ZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vYXRpX3BjaWdhcnQuYyBiL2RyaXZlcnMvY2hhci9kcm0vYXRpX3BjaWdhcnQuYwppbmRleCA5NTc1OTZjLi5kMDdjZTk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2F0aV9wY2lnYXJ0LmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9hdGlfcGNpZ2FydC5jCkBAIC0xLDUgKzEsNSBAQAogLyoqCi0gKiBcZmlsZSBhdGlfcGNpZ2FydC5oIAorICogXGZpbGUgYXRpX3BjaWdhcnQuYwogICogQVRJIFBDSSBHQVJUIHN1cHBvcnQKICAqCiAgKiBcYXV0aG9yIEdhcmV0aCBIdWdoZXMgPGdhcmV0aEB2YWxpbnV4LmNvbT4KQEAgLTUyLDg3ICs1Miw5MSBAQAogIyBkZWZpbmUgQVRJX01BWF9QQ0lHQVJUX1BBR0VTCQk4MTkyCS8qKjwgMzIgTUIgYXBlcnR1cmUsIDRLIHBhZ2VzICovCiAjIGRlZmluZSBBVElfUENJR0FSVF9QQUdFX1NJWkUJCTQwOTYJLyoqPCBQQ0kgR0FSVCBwYWdlIHNpemUgKi8KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgZHJtX2F0aV9hbGxvY19wY2lnYXJ0X3RhYmxlKCB2b2lkICkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGRybV9hdGlfYWxsb2NfcGNpZ2FydF90YWJsZSh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgYWRkcmVzczsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlpbnQgaTsKLQlEUk1fREVCVUcoICIlc1xuIiwgX19GVU5DVElPTl9fICk7CisJRFJNX0RFQlVHKCIlc1xuIiwgX19GVU5DVElPTl9fKTsKIAotCWFkZHJlc3MgPSBfX2dldF9mcmVlX3BhZ2VzKCBHRlBfS0VSTkVMLCBBVElfUENJR0FSVF9UQUJMRV9PUkRFUiApOwotCWlmICggYWRkcmVzcyA9PSAwVUwgKSB7CisJYWRkcmVzcyA9IF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwgQVRJX1BDSUdBUlRfVEFCTEVfT1JERVIpOworCWlmIChhZGRyZXNzID09IDBVTCkgewogCQlyZXR1cm4gMDsKIAl9CiAKLQlwYWdlID0gdmlydF90b19wYWdlKCBhZGRyZXNzICk7CisJcGFnZSA9IHZpcnRfdG9fcGFnZShhZGRyZXNzKTsKIAotCWZvciAoIGkgPSAwIDsgaSA8IEFUSV9QQ0lHQVJUX1RBQkxFX1BBR0VTIDsgaSsrLCBwYWdlKysgKSB7CisJZm9yIChpID0gMDsgaSA8IEFUSV9QQ0lHQVJUX1RBQkxFX1BBR0VTOyBpKyssIHBhZ2UrKykgewogCQlnZXRfcGFnZShwYWdlKTsKLQkJU2V0UGFnZVJlc2VydmVkKCBwYWdlICk7CisJCVNldFBhZ2VSZXNlcnZlZChwYWdlKTsKIAl9CiAKLQlEUk1fREVCVUcoICIlczogcmV0dXJuaW5nIDB4JTA4bHhcbiIsIF9fRlVOQ1RJT05fXywgYWRkcmVzcyApOworCURSTV9ERUJVRygiJXM6IHJldHVybmluZyAweCUwOGx4XG4iLCBfX0ZVTkNUSU9OX18sIGFkZHJlc3MpOwogCXJldHVybiBhZGRyZXNzOwogfQogCi1zdGF0aWMgdm9pZCBkcm1fYXRpX2ZyZWVfcGNpZ2FydF90YWJsZSggdW5zaWduZWQgbG9uZyBhZGRyZXNzICkKK3N0YXRpYyB2b2lkIGRybV9hdGlfZnJlZV9wY2lnYXJ0X3RhYmxlKHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlpbnQgaTsKLQlEUk1fREVCVUcoICIlc1xuIiwgX19GVU5DVElPTl9fICk7CisJRFJNX0RFQlVHKCIlc1xuIiwgX19GVU5DVElPTl9fKTsKIAotCXBhZ2UgPSB2aXJ0X3RvX3BhZ2UoIGFkZHJlc3MgKTsKKwlwYWdlID0gdmlydF90b19wYWdlKGFkZHJlc3MpOwogCi0JZm9yICggaSA9IDAgOyBpIDwgQVRJX1BDSUdBUlRfVEFCTEVfUEFHRVMgOyBpKyssIHBhZ2UrKyApIHsKKwlmb3IgKGkgPSAwOyBpIDwgQVRJX1BDSUdBUlRfVEFCTEVfUEFHRVM7IGkrKywgcGFnZSsrKSB7CiAJCV9fcHV0X3BhZ2UocGFnZSk7Ci0JCUNsZWFyUGFnZVJlc2VydmVkKCBwYWdlICk7CisJCUNsZWFyUGFnZVJlc2VydmVkKHBhZ2UpOwogCX0KIAotCWZyZWVfcGFnZXMoIGFkZHJlc3MsIEFUSV9QQ0lHQVJUX1RBQkxFX09SREVSICk7CisJZnJlZV9wYWdlcyhhZGRyZXNzLCBBVElfUENJR0FSVF9UQUJMRV9PUkRFUik7CiB9CiAKLWludCBkcm1fYXRpX3BjaWdhcnRfY2xlYW51cChkcm1fZGV2aWNlX3QgKmRldiwgZHJtX2F0aV9wY2lnYXJ0X2luZm8gKmdhcnRfaW5mbykKK2ludCBkcm1fYXRpX3BjaWdhcnRfY2xlYW51cChkcm1fZGV2aWNlX3QgKiBkZXYsCisJCQkgICAgZHJtX2F0aV9wY2lnYXJ0X2luZm8gKiBnYXJ0X2luZm8pCiB7CiAJZHJtX3NnX21lbV90ICplbnRyeSA9IGRldi0+c2c7CiAJdW5zaWduZWQgbG9uZyBwYWdlczsKIAlpbnQgaTsKIAogCS8qIHdlIG5lZWQgdG8gc3VwcG9ydCBsYXJnZSBtZW1vcnkgY29uZmlndXJhdGlvbnMgKi8KLQlpZiAoICFlbnRyeSApIHsKLQkJRFJNX0VSUk9SKCAibm8gc2NhdHRlci9nYXRoZXIgbWVtb3J5IVxuIiApOworCWlmICghZW50cnkpIHsKKwkJRFJNX0VSUk9SKCJubyBzY2F0dGVyL2dhdGhlciBtZW1vcnkhXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJaWYgKGdhcnRfaW5mby0+YnVzX2FkZHIpIHsKLQkJaWYgKGdhcnRfaW5mby0+Z2FydF90YWJsZV9sb2NhdGlvbj09RFJNX0FUSV9HQVJUX01BSU4pIHsKKwkJaWYgKGdhcnRfaW5mby0+Z2FydF90YWJsZV9sb2NhdGlvbiA9PSBEUk1fQVRJX0dBUlRfTUFJTikgewogCQkJcGNpX3VubWFwX3NpbmdsZShkZXYtPnBkZXYsIGdhcnRfaW5mby0+YnVzX2FkZHIsCiAJCQkJCSBBVElfUENJR0FSVF9UQUJMRV9QQUdFUyAqIFBBR0VfU0laRSwKIAkJCQkJIFBDSV9ETUFfVE9ERVZJQ0UpOwogCQl9CiAKLQkJcGFnZXMgPSAoIGVudHJ5LT5wYWdlcyA8PSBBVElfTUFYX1BDSUdBUlRfUEFHRVMgKQotCQkgICAgICAgID8gZW50cnktPnBhZ2VzIDogQVRJX01BWF9QQ0lHQVJUX1BBR0VTOworCQlwYWdlcyA9IChlbnRyeS0+cGFnZXMgPD0gQVRJX01BWF9QQ0lHQVJUX1BBR0VTKQorCQkgICAgPyBlbnRyeS0+cGFnZXMgOiBBVElfTUFYX1BDSUdBUlRfUEFHRVM7CiAKLQkJZm9yICggaSA9IDAgOyBpIDwgcGFnZXMgOyBpKysgKSB7Ci0JCQlpZiAoICFlbnRyeS0+YnVzYWRkcltpXSApIGJyZWFrOworCQlmb3IgKGkgPSAwOyBpIDwgcGFnZXM7IGkrKykgeworCQkJaWYgKCFlbnRyeS0+YnVzYWRkcltpXSkKKwkJCQlicmVhazsKIAkJCXBjaV91bm1hcF9zaW5nbGUoZGV2LT5wZGV2LCBlbnRyeS0+YnVzYWRkcltpXSwKIAkJCQkJIFBBR0VfU0laRSwgUENJX0RNQV9UT0RFVklDRSk7CiAJCX0KLQkJCi0gCQlpZiAoZ2FydF9pbmZvLT5nYXJ0X3RhYmxlX2xvY2F0aW9uPT1EUk1fQVRJX0dBUlRfTUFJTikKLQkJCWdhcnRfaW5mby0+YnVzX2FkZHI9MDsKKworCQlpZiAoZ2FydF9pbmZvLT5nYXJ0X3RhYmxlX2xvY2F0aW9uID09IERSTV9BVElfR0FSVF9NQUlOKQorCQkJZ2FydF9pbmZvLT5idXNfYWRkciA9IDA7CiAJfQogCi0gCWlmIChnYXJ0X2luZm8tPmdhcnRfdGFibGVfbG9jYXRpb249PURSTV9BVElfR0FSVF9NQUlOICYmIGdhcnRfaW5mby0+YWRkcikgeworCWlmIChnYXJ0X2luZm8tPmdhcnRfdGFibGVfbG9jYXRpb24gPT0gRFJNX0FUSV9HQVJUX01BSU4KKwkgICAgJiYgZ2FydF9pbmZvLT5hZGRyKSB7CiAJCWRybV9hdGlfZnJlZV9wY2lnYXJ0X3RhYmxlKGdhcnRfaW5mby0+YWRkcik7Ci0JCWdhcnRfaW5mby0+YWRkcj0wOworCQlnYXJ0X2luZm8tPmFkZHIgPSAwOwogCX0KIAogCXJldHVybiAxOwogfQorCiBFWFBPUlRfU1lNQk9MKGRybV9hdGlfcGNpZ2FydF9jbGVhbnVwKTsKIAotaW50IGRybV9hdGlfcGNpZ2FydF9pbml0KGRybV9kZXZpY2VfdCAqZGV2LCBkcm1fYXRpX3BjaWdhcnRfaW5mbyAqZ2FydF9pbmZvKQoraW50IGRybV9hdGlfcGNpZ2FydF9pbml0KGRybV9kZXZpY2VfdCAqIGRldiwgZHJtX2F0aV9wY2lnYXJ0X2luZm8gKiBnYXJ0X2luZm8pCiB7CiAJZHJtX3NnX21lbV90ICplbnRyeSA9IGRldi0+c2c7CiAJdW5zaWduZWQgbG9uZyBhZGRyZXNzID0gMDsKQEAgLTE0MCw1OCArMTQ0LDU2IEBACiAJdTMyICpwY2lfZ2FydCwgcGFnZV9iYXNlLCBidXNfYWRkcmVzcyA9IDA7CiAJaW50IGksIGosIHJldCA9IDA7CiAKLQlpZiAoICFlbnRyeSApIHsKLQkJRFJNX0VSUk9SKCAibm8gc2NhdHRlci9nYXRoZXIgbWVtb3J5IVxuIiApOworCWlmICghZW50cnkpIHsKKwkJRFJNX0VSUk9SKCJubyBzY2F0dGVyL2dhdGhlciBtZW1vcnkhXG4iKTsKIAkJZ290byBkb25lOwogCX0KIAotCWlmIChnYXJ0X2luZm8tPmdhcnRfdGFibGVfbG9jYXRpb24gPT0gRFJNX0FUSV9HQVJUX01BSU4pCi0JeworCWlmIChnYXJ0X2luZm8tPmdhcnRfdGFibGVfbG9jYXRpb24gPT0gRFJNX0FUSV9HQVJUX01BSU4pIHsKIAkJRFJNX0RFQlVHKCJQQ0k6IG5vIHRhYmxlIGluIFZSQU06IHVzaW5nIG5vcm1hbCBSQU1cbiIpOwotCQkKKwogCQlhZGRyZXNzID0gZHJtX2F0aV9hbGxvY19wY2lnYXJ0X3RhYmxlKCk7Ci0JCWlmICggIWFkZHJlc3MgKSB7Ci0JCQlEUk1fRVJST1IoICJjYW5ub3QgYWxsb2NhdGUgUENJIEdBUlQgcGFnZSFcbiIgKTsKKwkJaWYgKCFhZGRyZXNzKSB7CisJCQlEUk1fRVJST1IoImNhbm5vdCBhbGxvY2F0ZSBQQ0kgR0FSVCBwYWdlIVxuIik7CiAJCQlnb3RvIGRvbmU7CiAJCX0KLQkJCi0JCWlmICggIWRldi0+cGRldiApIHsKLQkJCURSTV9FUlJPUiggIlBDSSBkZXZpY2UgdW5rbm93biFcbiIgKTsKKworCQlpZiAoIWRldi0+cGRldikgeworCQkJRFJNX0VSUk9SKCJQQ0kgZGV2aWNlIHVua25vd24hXG4iKTsKIAkJCWdvdG8gZG9uZTsKIAkJfQogCiAJCWJ1c19hZGRyZXNzID0gcGNpX21hcF9zaW5nbGUoZGV2LT5wZGV2LCAodm9pZCAqKWFkZHJlc3MsCi0JCQkJCSAgICAgQVRJX1BDSUdBUlRfVEFCTEVfUEFHRVMgKiBQQUdFX1NJWkUsCi0JCQkJCSAgICAgUENJX0RNQV9UT0RFVklDRSk7CisJCQkJCSAgICAgQVRJX1BDSUdBUlRfVEFCTEVfUEFHRVMgKgorCQkJCQkgICAgIFBBR0VfU0laRSwgUENJX0RNQV9UT0RFVklDRSk7CiAJCWlmIChidXNfYWRkcmVzcyA9PSAwKSB7Ci0JCQlEUk1fRVJST1IoICJ1bmFibGUgdG8gbWFwIFBDSUdBUlQgcGFnZXMhXG4iICk7Ci0JCQlkcm1fYXRpX2ZyZWVfcGNpZ2FydF90YWJsZSggYWRkcmVzcyApOworCQkJRFJNX0VSUk9SKCJ1bmFibGUgdG8gbWFwIFBDSUdBUlQgcGFnZXMhXG4iKTsKKwkJCWRybV9hdGlfZnJlZV9wY2lnYXJ0X3RhYmxlKGFkZHJlc3MpOwogCQkJYWRkcmVzcyA9IDA7CiAJCQlnb3RvIGRvbmU7CiAJCX0KLQl9Ci0JZWxzZQotCXsKKwl9IGVsc2UgewogCQlhZGRyZXNzID0gZ2FydF9pbmZvLT5hZGRyOwogCQlidXNfYWRkcmVzcyA9IGdhcnRfaW5mby0+YnVzX2FkZHI7Ci0gCQlEUk1fREVCVUcoIlBDSTogR2FydCBUYWJsZTogVlJBTSAlMDhYIG1hcHBlZCBhdCAlMDhsWFxuIiwgYnVzX2FkZHJlc3MsIGFkZHJlc3MpOworCQlEUk1fREVCVUcoIlBDSTogR2FydCBUYWJsZTogVlJBTSAlMDhYIG1hcHBlZCBhdCAlMDhsWFxuIiwKKwkJCSAgYnVzX2FkZHJlc3MsIGFkZHJlc3MpOwogCX0KIAotCXBjaV9nYXJ0ID0gKHUzMiAqKWFkZHJlc3M7CisJcGNpX2dhcnQgPSAodTMyICopIGFkZHJlc3M7CiAKLQlwYWdlcyA9ICggZW50cnktPnBhZ2VzIDw9IEFUSV9NQVhfUENJR0FSVF9QQUdFUyApCi0JCT8gZW50cnktPnBhZ2VzIDogQVRJX01BWF9QQ0lHQVJUX1BBR0VTOworCXBhZ2VzID0gKGVudHJ5LT5wYWdlcyA8PSBBVElfTUFYX1BDSUdBUlRfUEFHRVMpCisJICAgID8gZW50cnktPnBhZ2VzIDogQVRJX01BWF9QQ0lHQVJUX1BBR0VTOwogCi0JbWVtc2V0KCBwY2lfZ2FydCwgMCwgQVRJX01BWF9QQ0lHQVJUX1BBR0VTICogc2l6ZW9mKHUzMikgKTsKKwltZW1zZXQocGNpX2dhcnQsIDAsIEFUSV9NQVhfUENJR0FSVF9QQUdFUyAqIHNpemVvZih1MzIpKTsKIAotCWZvciAoIGkgPSAwIDsgaSA8IHBhZ2VzIDsgaSsrICkgeworCWZvciAoaSA9IDA7IGkgPCBwYWdlczsgaSsrKSB7CiAJCS8qIHdlIG5lZWQgdG8gc3VwcG9ydCBsYXJnZSBtZW1vcnkgY29uZmlndXJhdGlvbnMgKi8KIAkJZW50cnktPmJ1c2FkZHJbaV0gPSBwY2lfbWFwX3NpbmdsZShkZXYtPnBkZXYsCi0JCQkJCSAgIHBhZ2VfYWRkcmVzcyggZW50cnktPnBhZ2VsaXN0W2ldICksCi0JCQkJCSAgIFBBR0VfU0laRSwKLQkJCQkJICAgUENJX0RNQV9UT0RFVklDRSk7CisJCQkJCQkgICBwYWdlX2FkZHJlc3MoZW50cnktPgorCQkJCQkJCQlwYWdlbGlzdFtpXSksCisJCQkJCQkgICBQQUdFX1NJWkUsIFBDSV9ETUFfVE9ERVZJQ0UpOwogCQlpZiAoZW50cnktPmJ1c2FkZHJbaV0gPT0gMCkgewotCQkJRFJNX0VSUk9SKCAidW5hYmxlIHRvIG1hcCBQQ0lHQVJUIHBhZ2VzIVxuIiApOworCQkJRFJNX0VSUk9SKCJ1bmFibGUgdG8gbWFwIFBDSUdBUlQgcGFnZXMhXG4iKTsKIAkJCWRybV9hdGlfcGNpZ2FydF9jbGVhbnVwKGRldiwgZ2FydF9pbmZvKTsKIAkJCWFkZHJlc3MgPSAwOwogCQkJYnVzX2FkZHJlc3MgPSAwOwpAQCAtMjAxLDkgKzIwMyw5IEBACiAKIAkJZm9yIChqID0gMDsgaiA8IChQQUdFX1NJWkUgLyBBVElfUENJR0FSVF9QQUdFX1NJWkUpOyBqKyspIHsKIAkJCWlmIChnYXJ0X2luZm8tPmlzX3BjaWUpCi0JCQkJKnBjaV9nYXJ0ID0gKGNwdV90b19sZTMyKHBhZ2VfYmFzZSk+PjgpIHwgMHhjOworCQkJCSpwY2lfZ2FydCA9IChjcHVfdG9fbGUzMihwYWdlX2Jhc2UpID4+IDgpIHwgMHhjOwogCQkJZWxzZQotCQkJCSpwY2lfZ2FydCsrID0gY3B1X3RvX2xlMzIoIHBhZ2VfYmFzZSApOworCQkJCSpwY2lfZ2FydCsrID0gY3B1X3RvX2xlMzIocGFnZV9iYXNlKTsKIAkJCXBhZ2VfYmFzZSArPSBBVElfUENJR0FSVF9QQUdFX1NJWkU7CiAJCX0KIAl9CkBAIC0yMTYsOSArMjE4LDEwIEBACiAJbWIoKTsKICNlbmRpZgogCi1kb25lOgorICAgICAgZG9uZToKIAlnYXJ0X2luZm8tPmFkZHIgPSBhZGRyZXNzOwotIAlnYXJ0X2luZm8tPmJ1c19hZGRyID0gYnVzX2FkZHJlc3M7CisJZ2FydF9pbmZvLT5idXNfYWRkciA9IGJ1c19hZGRyZXNzOwogCXJldHVybiByZXQ7CiB9CisKIEVYUE9SVF9TWU1CT0woZHJtX2F0aV9wY2lnYXJ0X2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9kcm0uaCBiL2RyaXZlcnMvY2hhci9kcm0vZHJtLmgKaW5kZXggZmM2NTk4YS4uNjRkNjIzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm0uaAorKysgYi9kcml2ZXJzL2NoYXIvZHJtL2RybS5oCkBAIC0xLDcgKzEsNyBAQAogLyoqCi0gKiBcZmlsZSBkcm0uaCAKKyAqIFxmaWxlIGRybS5oCiAgKiBIZWFkZXIgZm9yIHRoZSBEaXJlY3QgUmVuZGVyaW5nIE1hbmFnZXIKLSAqIAorICoKICAqIFxhdXRob3IgUmlja2FyZCBFLiAoUmlrKSBGYWl0aCA8ZmFpdGhAdmFsaW51eC5jb20+CiAgKgogICogXHBhciBBY2tub3dsZWRnbWVudHM6CkBAIC0zMyw3ICszMyw2IEBACiAgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgKi8KIAotCiAjaWZuZGVmIF9EUk1fSF8KICNkZWZpbmUgX0RSTV9IXwogCkBAIC01Niw3ICs1NSw3IEBACiAjZGVmaW5lIGlvY3RsKGEsYixjKQkJeGY4NmlvY3RsKGEsYixjKQogI2Vsc2UKICNpbmNsdWRlIDxzeXMvaW9jY29tLmg+Ci0jZW5kaWYgLyogX19GcmVlQlNEX18gJiYgeGY4NmlvY3RsICovCisjZW5kaWYJCQkJLyogX19GcmVlQlNEX18gJiYgeGY4NmlvY3RsICovCiAjZGVmaW5lIERSTV9JT0NUTF9OUihuKQkJKChuKSAmIDB4ZmYpCiAjZGVmaW5lIERSTV9JT0NfVk9JRAkJSU9DX1ZPSUQKICNkZWZpbmUgRFJNX0lPQ19SRUFECQlJT0NfT1VUCkBAIC05NywxNiArOTYsMTQgQEAKICNkZWZpbmUgX0RSTV9MT0NLX0lTX0NPTlQobG9jaykJICAgKChsb2NrKSAmIF9EUk1fTE9DS19DT05UKQogI2RlZmluZSBfRFJNX0xPQ0tJTkdfQ09OVEVYVChsb2NrKSAoKGxvY2spICYgfihfRFJNX0xPQ0tfSEVMRHxfRFJNX0xPQ0tfQ09OVCkpCiAKLQotdHlwZWRlZiB1bnNpZ25lZCBpbnQgIGRybV9oYW5kbGVfdDsKLXR5cGVkZWYgdW5zaWduZWQgaW50ICBkcm1fY29udGV4dF90OwotdHlwZWRlZiB1bnNpZ25lZCBpbnQgIGRybV9kcmF3YWJsZV90OwotdHlwZWRlZiB1bnNpZ25lZCBpbnQgIGRybV9tYWdpY190OwotCit0eXBlZGVmIHVuc2lnbmVkIGludCBkcm1faGFuZGxlX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludCBkcm1fY29udGV4dF90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgZHJtX2RyYXdhYmxlX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludCBkcm1fbWFnaWNfdDsKIAogLyoqCiAgKiBDbGlwcmVjdC4KLSAqIAorICoKICAqIFx3YXJuaW5nOiBJZiB5b3UgY2hhbmdlIHRoaXMgc3RydWN0dXJlLCBtYWtlIHN1cmUgeW91IGNoYW5nZQogICogWEY4NkRSSUNsaXBSZWN0UmVjIGluIHRoZSBzZXJ2ZXIgYXMgd2VsbAogICoKQEAgLTExNCwyMiArMTExLDIxIEBACiAgKiBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSByZWFzb25zLgogICovCiB0eXBlZGVmIHN0cnVjdCBkcm1fY2xpcF9yZWN0IHsKLQl1bnNpZ25lZCBzaG9ydAl4MTsKLQl1bnNpZ25lZCBzaG9ydAl5MTsKLQl1bnNpZ25lZCBzaG9ydAl4MjsKLQl1bnNpZ25lZCBzaG9ydAl5MjsKKwl1bnNpZ25lZCBzaG9ydCB4MTsKKwl1bnNpZ25lZCBzaG9ydCB5MTsKKwl1bnNpZ25lZCBzaG9ydCB4MjsKKwl1bnNpZ25lZCBzaG9ydCB5MjsKIH0gZHJtX2NsaXBfcmVjdF90OwogCi0KIC8qKgogICogVGV4dHVyZSByZWdpb24sCiAgKi8KIHR5cGVkZWYgc3RydWN0IGRybV90ZXhfcmVnaW9uIHsKLQl1bnNpZ25lZCBjaGFyCW5leHQ7Ci0JdW5zaWduZWQgY2hhcglwcmV2OwotCXVuc2lnbmVkIGNoYXIJaW5fdXNlOwotCXVuc2lnbmVkIGNoYXIJcGFkZGluZzsKLQl1bnNpZ25lZCBpbnQJYWdlOworCXVuc2lnbmVkIGNoYXIgbmV4dDsKKwl1bnNpZ25lZCBjaGFyIHByZXY7CisJdW5zaWduZWQgY2hhciBpbl91c2U7CisJdW5zaWduZWQgY2hhciBwYWRkaW5nOworCXVuc2lnbmVkIGludCBhZ2U7CiB9IGRybV90ZXhfcmVnaW9uX3Q7CiAKIC8qKgpAQCAtMTQxLDI4ICsxMzcsMjYgQEAKICAqLwogdHlwZWRlZiBzdHJ1Y3QgZHJtX2h3X2xvY2sgewogCV9fdm9sYXRpbGVfXyB1bnNpZ25lZCBpbnQgbG9jazsJCS8qKjwgbG9jayB2YXJpYWJsZSAqLwotCWNoYXIJCQkgIHBhZGRpbmdbNjBdOwkvKio8IFBhZCB0byBjYWNoZSBsaW5lICovCisJY2hhciBwYWRkaW5nWzYwXTsJCQkvKio8IFBhZCB0byBjYWNoZSBsaW5lICovCiB9IGRybV9od19sb2NrX3Q7CiAKLQogLyoqCiAgKiBEUk1fSU9DVExfVkVSU0lPTiBpb2N0bCBhcmd1bWVudCB0eXBlLgotICogCisgKgogICogXHNhIGRybUdldFZlcnNpb24oKS4KICAqLwogdHlwZWRlZiBzdHJ1Y3QgZHJtX3ZlcnNpb24gewotCWludCAgICB2ZXJzaW9uX21ham9yOwkgIC8qKjwgTWFqb3IgdmVyc2lvbiAqLwotCWludCAgICB2ZXJzaW9uX21pbm9yOwkgIC8qKjwgTWlub3IgdmVyc2lvbiAqLwotCWludCAgICB2ZXJzaW9uX3BhdGNobGV2ZWw7LyoqPCBQYXRjaCBsZXZlbCAqLworCWludCB2ZXJzaW9uX21ham9yOwkgIC8qKjwgTWFqb3IgdmVyc2lvbiAqLworCWludCB2ZXJzaW9uX21pbm9yOwkgIC8qKjwgTWlub3IgdmVyc2lvbiAqLworCWludCB2ZXJzaW9uX3BhdGNobGV2ZWw7CSAgLyoqPCBQYXRjaCBsZXZlbCAqLwogCXNpemVfdCBuYW1lX2xlbjsJICAvKio8IExlbmd0aCBvZiBuYW1lIGJ1ZmZlciAqLwotCWNoYXIgICBfX3VzZXIgKm5hbWU7CSAgLyoqPCBOYW1lIG9mIGRyaXZlciAqLworCWNoYXIgX191c2VyICpuYW1lOwkgIC8qKjwgTmFtZSBvZiBkcml2ZXIgKi8KIAlzaXplX3QgZGF0ZV9sZW47CSAgLyoqPCBMZW5ndGggb2YgZGF0ZSBidWZmZXIgKi8KLQljaGFyICAgX191c2VyICpkYXRlOwkgIC8qKjwgVXNlci1zcGFjZSBidWZmZXIgdG8gaG9sZCBkYXRlICovCisJY2hhciBfX3VzZXIgKmRhdGU7CSAgLyoqPCBVc2VyLXNwYWNlIGJ1ZmZlciB0byBob2xkIGRhdGUgKi8KIAlzaXplX3QgZGVzY19sZW47CSAgLyoqPCBMZW5ndGggb2YgZGVzYyBidWZmZXIgKi8KLQljaGFyICAgX191c2VyICpkZXNjOwkgIC8qKjwgVXNlci1zcGFjZSBidWZmZXIgdG8gaG9sZCBkZXNjICovCisJY2hhciBfX3VzZXIgKmRlc2M7CSAgLyoqPCBVc2VyLXNwYWNlIGJ1ZmZlciB0byBob2xkIGRlc2MgKi8KIH0gZHJtX3ZlcnNpb25fdDsKIAotCiAvKioKICAqIERSTV9JT0NUTF9HRVRfVU5JUVVFIGlvY3RsIGFyZ3VtZW50IHR5cGUuCiAgKgpAQCAtMTcwLDIxICsxNjQsMTggQEAKICAqLwogdHlwZWRlZiBzdHJ1Y3QgZHJtX3VuaXF1ZSB7CiAJc2l6ZV90IHVuaXF1ZV9sZW47CSAgLyoqPCBMZW5ndGggb2YgdW5pcXVlICovCi0JY2hhciAgIF9fdXNlciAqdW5pcXVlOwkgIC8qKjwgVW5pcXVlIG5hbWUgZm9yIGRyaXZlciBpbnN0YW50aWF0aW9uICovCisJY2hhciBfX3VzZXIgKnVuaXF1ZTsJICAvKio8IFVuaXF1ZSBuYW1lIGZvciBkcml2ZXIgaW5zdGFudGlhdGlvbiAqLwogfSBkcm1fdW5pcXVlX3Q7CiAKLQogdHlwZWRlZiBzdHJ1Y3QgZHJtX2xpc3QgewotCWludAkJIGNvdW50OwkgIC8qKjwgTGVuZ3RoIG9mIHVzZXItc3BhY2Ugc3RydWN0dXJlcyAqLwotCWRybV92ZXJzaW9uX3QJIF9fdXNlciAqdmVyc2lvbjsKKwlpbnQgY291bnQ7CQkgIC8qKjwgTGVuZ3RoIG9mIHVzZXItc3BhY2Ugc3RydWN0dXJlcyAqLworCWRybV92ZXJzaW9uX3QgX191c2VyICp2ZXJzaW9uOwogfSBkcm1fbGlzdF90OwogCi0KIHR5cGVkZWYgc3RydWN0IGRybV9ibG9jayB7Ci0JaW50CQkgdW51c2VkOworCWludCB1bnVzZWQ7CiB9IGRybV9ibG9ja190OwogCi0KIC8qKgogICogRFJNX0lPQ1RMX0NPTlRST0wgaW9jdGwgYXJndW1lbnQgdHlwZS4KICAqCkBAIC0xOTYsNDQgKzE4Nyw0MCBAQAogCQlEUk1fUk1fQ09NTUFORCwKIAkJRFJNX0lOU1RfSEFORExFUiwKIAkJRFJNX1VOSU5TVF9IQU5ETEVSCi0JfQkJIGZ1bmM7Ci0JaW50CQkgaXJxOworCX0gZnVuYzsKKwlpbnQgaXJxOwogfSBkcm1fY29udHJvbF90OwogCi0KIC8qKgogICogVHlwZSBvZiBtZW1vcnkgdG8gbWFwLgogICovCiB0eXBlZGVmIGVudW0gZHJtX21hcF90eXBlIHsKLQlfRFJNX0ZSQU1FX0JVRkZFUiAgID0gMCwgIC8qKjwgV0MgKG5vIGNhY2hpbmcpLCBubyBjb3JlIGR1bXAgKi8KLQlfRFJNX1JFR0lTVEVSUwkgICAgPSAxLCAgLyoqPCBubyBjYWNoaW5nLCBubyBjb3JlIGR1bXAgKi8KLQlfRFJNX1NITQkgICAgPSAyLCAgLyoqPCBzaGFyZWQsIGNhY2hlZCAqLwotCV9EUk1fQUdQICAgICAgICAgICAgPSAzLCAgLyoqPCBBR1AvR0FSVCAqLworCV9EUk1fRlJBTUVfQlVGRkVSID0gMCwJICAvKio8IFdDIChubyBjYWNoaW5nKSwgbm8gY29yZSBkdW1wICovCisJX0RSTV9SRUdJU1RFUlMgPSAxLAkgIC8qKjwgbm8gY2FjaGluZywgbm8gY29yZSBkdW1wICovCisJX0RSTV9TSE0gPSAyLAkJICAvKio8IHNoYXJlZCwgY2FjaGVkICovCisJX0RSTV9BR1AgPSAzLAkJICAvKio8IEFHUC9HQVJUICovCiAJX0RSTV9TQ0FUVEVSX0dBVEhFUiA9IDQsICAvKio8IFNjYXR0ZXIvZ2F0aGVyIG1lbW9yeSBmb3IgUENJIERNQSAqLwotCV9EUk1fQ09OU0lTVEVOVCAgICAgPSA1LCAgLyoqPCBDb25zaXN0ZW50IG1lbW9yeSBmb3IgUENJIERNQSAqLworCV9EUk1fQ09OU0lTVEVOVCA9IDUsCSAgLyoqPCBDb25zaXN0ZW50IG1lbW9yeSBmb3IgUENJIERNQSAqLwogfSBkcm1fbWFwX3R5cGVfdDsKIAotCiAvKioKICAqIE1lbW9yeSBtYXBwaW5nIGZsYWdzLgogICovCiB0eXBlZGVmIGVudW0gZHJtX21hcF9mbGFncyB7Ci0JX0RSTV9SRVNUUklDVEVECSAgICAgPSAweDAxLCAvKio8IENhbm5vdCBiZSBtYXBwZWQgdG8gdXNlci12aXJ0dWFsICovCi0JX0RSTV9SRUFEX09OTFkJICAgICA9IDB4MDIsCi0JX0RSTV9MT0NLRUQJICAgICA9IDB4MDQsIC8qKjwgc2hhcmVkLCBjYWNoZWQsIGxvY2tlZCAqLwotCV9EUk1fS0VSTkVMCSAgICAgPSAweDA4LCAvKio8IGtlcm5lbCByZXF1aXJlcyBhY2Nlc3MgKi8KKwlfRFJNX1JFU1RSSUNURUQgPSAweDAxLAkgICAgIC8qKjwgQ2Fubm90IGJlIG1hcHBlZCB0byB1c2VyLXZpcnR1YWwgKi8KKwlfRFJNX1JFQURfT05MWSA9IDB4MDIsCisJX0RSTV9MT0NLRUQgPSAweDA0LAkgICAgIC8qKjwgc2hhcmVkLCBjYWNoZWQsIGxvY2tlZCAqLworCV9EUk1fS0VSTkVMID0gMHgwOCwJICAgICAvKio8IGtlcm5lbCByZXF1aXJlcyBhY2Nlc3MgKi8KIAlfRFJNX1dSSVRFX0NPTUJJTklORyA9IDB4MTAsIC8qKjwgdXNlIHdyaXRlLWNvbWJpbmluZyBpZiBhdmFpbGFibGUgKi8KLQlfRFJNX0NPTlRBSU5TX0xPQ0sgICA9IDB4MjAsIC8qKjwgU0hNIHBhZ2UgdGhhdCBjb250YWlucyBsb2NrICovCi0JX0RSTV9SRU1PVkFCTEUJICAgICA9IDB4NDAgIC8qKjwgUmVtb3ZhYmxlIG1hcHBpbmcgKi8KKwlfRFJNX0NPTlRBSU5TX0xPQ0sgPSAweDIwLCAgIC8qKjwgU0hNIHBhZ2UgdGhhdCBjb250YWlucyBsb2NrICovCisJX0RSTV9SRU1PVkFCTEUgPSAweDQwCSAgICAgLyoqPCBSZW1vdmFibGUgbWFwcGluZyAqLwogfSBkcm1fbWFwX2ZsYWdzX3Q7CiAKLQogdHlwZWRlZiBzdHJ1Y3QgZHJtX2N0eF9wcml2X21hcCB7Ci0JdW5zaWduZWQgaW50CWN0eF9pZDsgIC8qKjwgQ29udGV4dCByZXF1ZXN0aW5nIHByaXZhdGUgbWFwcGluZyAqLwotCXZvaWQJCSpoYW5kbGU7IC8qKjwgSGFuZGxlIG9mIG1hcCAqLworCXVuc2lnbmVkIGludCBjdHhfaWQ7CSAvKio8IENvbnRleHQgcmVxdWVzdGluZyBwcml2YXRlIG1hcHBpbmcgKi8KKwl2b2lkICpoYW5kbGU7CQkgLyoqPCBIYW5kbGUgb2YgbWFwICovCiB9IGRybV9jdHhfcHJpdl9tYXBfdDsKIAotCiAvKioKICAqIERSTV9JT0NUTF9HRVRfTUFQLCBEUk1fSU9DVExfQUREX01BUCBhbmQgRFJNX0lPQ1RMX1JNX01BUCBpb2N0bHMKICAqIGFyZ3VtZW50IHR5cGUuCkBAIC0yNDEsMzAgKzIyOCwyOCBAQAogICogXHNhIGRybUFkZE1hcCgpLgogICovCiB0eXBlZGVmIHN0cnVjdCBkcm1fbWFwIHsKLQl1bnNpZ25lZCBsb25nCW9mZnNldDsJIC8qKjwgUmVxdWVzdGVkIHBoeXNpY2FsIGFkZHJlc3MgKDAgZm9yIFNBUkVBKSovCi0JdW5zaWduZWQgbG9uZwlzaXplOwkgLyoqPCBSZXF1ZXN0ZWQgcGh5c2ljYWwgc2l6ZSAoYnl0ZXMpICovCi0JZHJtX21hcF90eXBlX3QJdHlwZTsJIC8qKjwgVHlwZSBvZiBtZW1vcnkgdG8gbWFwICovCisJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CSAvKio8IFJlcXVlc3RlZCBwaHlzaWNhbCBhZGRyZXNzICgwIGZvciBTQVJFQSkqLworCXVuc2lnbmVkIGxvbmcgc2l6ZTsJIC8qKjwgUmVxdWVzdGVkIHBoeXNpY2FsIHNpemUgKGJ5dGVzKSAqLworCWRybV9tYXBfdHlwZV90IHR5cGU7CSAvKio8IFR5cGUgb2YgbWVtb3J5IHRvIG1hcCAqLwogCWRybV9tYXBfZmxhZ3NfdCBmbGFnczsJIC8qKjwgRmxhZ3MgKi8KLQl2b2lkCQkqaGFuZGxlOyAvKio8IFVzZXItc3BhY2U6ICJIYW5kbGUiIHRvIHBhc3MgdG8gbW1hcCgpICovCisJdm9pZCAqaGFuZGxlOwkJIC8qKjwgVXNlci1zcGFjZTogIkhhbmRsZSIgdG8gcGFzcyB0byBtbWFwKCkgKi8KIAkJCQkgLyoqPCBLZXJuZWwtc3BhY2U6IGtlcm5lbC12aXJ0dWFsIGFkZHJlc3MgKi8KLQlpbnQJCW10cnI7CSAvKio8IE1UUlIgc2xvdCB1c2VkICovCi0JCQkJIC8qICAgUHJpdmF0ZSBkYXRhICovCisJaW50IG10cnI7CQkgLyoqPCBNVFJSIHNsb3QgdXNlZCAqLworCS8qICAgUHJpdmF0ZSBkYXRhICovCiB9IGRybV9tYXBfdDsKIAotCiAvKioKICAqIERSTV9JT0NUTF9HRVRfQ0xJRU5UIGlvY3RsIGFyZ3VtZW50IHR5cGUuCiAgKi8KIHR5cGVkZWYgc3RydWN0IGRybV9jbGllbnQgewotCWludAkJaWR4OwkvKio8IFdoaWNoIGNsaWVudCBkZXNpcmVkPyAqLwotCWludAkJYXV0aDsJLyoqPCBJcyBjbGllbnQgYXV0aGVudGljYXRlZD8gKi8KLQl1bnNpZ25lZCBsb25nCXBpZDsJLyoqPCBQcm9jZXNzIElEICovCi0JdW5zaWduZWQgbG9uZwl1aWQ7CS8qKjwgVXNlciBJRCAqLwotCXVuc2lnbmVkIGxvbmcJbWFnaWM7CS8qKjwgTWFnaWMgKi8KLQl1bnNpZ25lZCBsb25nCWlvY3M7CS8qKjwgSW9jdGwgY291bnQgKi8KKwlpbnQgaWR4OwkJLyoqPCBXaGljaCBjbGllbnQgZGVzaXJlZD8gKi8KKwlpbnQgYXV0aDsJCS8qKjwgSXMgY2xpZW50IGF1dGhlbnRpY2F0ZWQ/ICovCisJdW5zaWduZWQgbG9uZyBwaWQ7CS8qKjwgUHJvY2VzcyBJRCAqLworCXVuc2lnbmVkIGxvbmcgdWlkOwkvKio8IFVzZXIgSUQgKi8KKwl1bnNpZ25lZCBsb25nIG1hZ2ljOwkvKio8IE1hZ2ljICovCisJdW5zaWduZWQgbG9uZyBpb2NzOwkvKio8IElvY3RsIGNvdW50ICovCiB9IGRybV9jbGllbnRfdDsKIAotCiB0eXBlZGVmIGVudW0gewogCV9EUk1fU1RBVF9MT0NLLAogCV9EUk1fU1RBVF9PUEVOUywKQEAgLTI4Miw2MyArMjY3LDU4IEBACiAJX0RSTV9TVEFUX0RNQSwJCS8qKjwgRE1BICovCiAJX0RSTV9TVEFUX1NQRUNJQUwsCS8qKjwgU3BlY2lhbCBETUEgKGUuZy4sIHByaW9yaXR5IG9yIHBvbGxlZCkgKi8KIAlfRFJNX1NUQVRfTUlTU0VECS8qKjwgTWlzc2VkIERNQSBvcHBvcnR1bml0eSAqLwotCi0JCQkJLyogQWRkIHRvIHRoZSAqRU5EKiBvZiB0aGUgbGlzdCAqLworCSAgICAvKiBBZGQgdG8gdGhlICpFTkQqIG9mIHRoZSBsaXN0ICovCiB9IGRybV9zdGF0X3R5cGVfdDsKIAotCiAvKioKICAqIERSTV9JT0NUTF9HRVRfU1RBVFMgaW9jdGwgYXJndW1lbnQgdHlwZS4KICAqLwogdHlwZWRlZiBzdHJ1Y3QgZHJtX3N0YXRzIHsKIAl1bnNpZ25lZCBsb25nIGNvdW50OwogCXN0cnVjdCB7Ci0JCXVuc2lnbmVkIGxvbmcgICB2YWx1ZTsKKwkJdW5zaWduZWQgbG9uZyB2YWx1ZTsKIAkJZHJtX3N0YXRfdHlwZV90IHR5cGU7CiAJfSBkYXRhWzE1XTsKIH0gZHJtX3N0YXRzX3Q7CiAKLQogLyoqCiAgKiBIYXJkd2FyZSBsb2NraW5nIGZsYWdzLgogICovCiB0eXBlZGVmIGVudW0gZHJtX2xvY2tfZmxhZ3MgewotCV9EUk1fTE9DS19SRUFEWQkgICAgID0gMHgwMSwgLyoqPCBXYWl0IHVudGlsIGhhcmR3YXJlIGlzIHJlYWR5IGZvciBETUEgKi8KLQlfRFJNX0xPQ0tfUVVJRVNDRU5UICA9IDB4MDIsIC8qKjwgV2FpdCB1bnRpbCBoYXJkd2FyZSBxdWllc2NlbnQgKi8KLQlfRFJNX0xPQ0tfRkxVU0gJICAgICA9IDB4MDQsIC8qKjwgRmx1c2ggdGhpcyBjb250ZXh0J3MgRE1BIHF1ZXVlIGZpcnN0ICovCi0JX0RSTV9MT0NLX0ZMVVNIX0FMTCAgPSAweDA4LCAvKio8IEZsdXNoIGFsbCBETUEgcXVldWVzIGZpcnN0ICovCi0JCQkJLyogVGhlc2UgKkhBTFQqIGZsYWdzIGFyZW4ndCBzdXBwb3J0ZWQgeWV0Ci0JCQkJICAgLS0gdGhleSB3aWxsIGJlIHVzZWQgdG8gc3VwcG9ydCB0aGUKLQkJCQkgICBmdWxsLXNjcmVlbiBER0EtbGlrZSBtb2RlLiAqLworCV9EUk1fTE9DS19SRUFEWSA9IDB4MDEsCSAgICAgLyoqPCBXYWl0IHVudGlsIGhhcmR3YXJlIGlzIHJlYWR5IGZvciBETUEgKi8KKwlfRFJNX0xPQ0tfUVVJRVNDRU5UID0gMHgwMiwgIC8qKjwgV2FpdCB1bnRpbCBoYXJkd2FyZSBxdWllc2NlbnQgKi8KKwlfRFJNX0xPQ0tfRkxVU0ggPSAweDA0LAkgICAgIC8qKjwgRmx1c2ggdGhpcyBjb250ZXh0J3MgRE1BIHF1ZXVlIGZpcnN0ICovCisJX0RSTV9MT0NLX0ZMVVNIX0FMTCA9IDB4MDgsICAvKio8IEZsdXNoIGFsbCBETUEgcXVldWVzIGZpcnN0ICovCisJLyogVGhlc2UgKkhBTFQqIGZsYWdzIGFyZW4ndCBzdXBwb3J0ZWQgeWV0CisJICAgLS0gdGhleSB3aWxsIGJlIHVzZWQgdG8gc3VwcG9ydCB0aGUKKwkgICBmdWxsLXNjcmVlbiBER0EtbGlrZSBtb2RlLiAqLwogCV9EUk1fSEFMVF9BTExfUVVFVUVTID0gMHgxMCwgLyoqPCBIYWx0IGFsbCBjdXJyZW50IGFuZCBmdXR1cmUgcXVldWVzICovCiAJX0RSTV9IQUxUX0NVUl9RVUVVRVMgPSAweDIwICAvKio8IEhhbHQgYWxsIGN1cnJlbnQgcXVldWVzICovCiB9IGRybV9sb2NrX2ZsYWdzX3Q7CiAKLQogLyoqCiAgKiBEUk1fSU9DVExfTE9DSywgRFJNX0lPQ1RMX1VOTE9DSyBhbmQgRFJNX0lPQ1RMX0ZJTklTSCBpb2N0bCBhcmd1bWVudCB0eXBlLgotICogCisgKgogICogXHNhIGRybUdldExvY2soKSBhbmQgZHJtVW5sb2NrKCkuCiAgKi8KIHR5cGVkZWYgc3RydWN0IGRybV9sb2NrIHsKLQlpbnQJCSBjb250ZXh0OworCWludCBjb250ZXh0OwogCWRybV9sb2NrX2ZsYWdzX3QgZmxhZ3M7CiB9IGRybV9sb2NrX3Q7CiAKLQogLyoqCiAgKiBETUEgZmxhZ3MKICAqCi0gKiBcd2FybmluZyAKKyAqIFx3YXJuaW5nCiAgKiBUaGVzZSB2YWx1ZXMgXGUgbXVzdCBtYXRjaCB4Zjg2ZHJtLmguCiAgKgogICogXHNhIGRybV9kbWEuCiAgKi8KLXR5cGVkZWYgZW51bSBkcm1fZG1hX2ZsYWdzIHsJICAgICAgCi0JCQkJICAgICAgLyogRmxhZ3MgZm9yIERNQSBidWZmZXIgZGlzcGF0Y2ggKi8KLQlfRFJNX0RNQV9CTE9DSwkgICAgICA9IDB4MDEsIC8qKjwKK3R5cGVkZWYgZW51bSBkcm1fZG1hX2ZsYWdzIHsKKwkvKiBGbGFncyBmb3IgRE1BIGJ1ZmZlciBkaXNwYXRjaCAqLworCV9EUk1fRE1BX0JMT0NLID0gMHgwMSwJICAgICAgLyoqPAogCQkJCSAgICAgICAqIEJsb2NrIHVudGlsIGJ1ZmZlciBkaXNwYXRjaGVkLgotCQkJCSAgICAgICAqIAorCQkJCSAgICAgICAqCiAJCQkJICAgICAgICogXG5vdGUgVGhlIGJ1ZmZlciBtYXkgbm90IHlldCBoYXZlCiAJCQkJICAgICAgICogYmVlbiBwcm9jZXNzZWQgYnkgdGhlIGhhcmR3YXJlIC0tCiAJCQkJICAgICAgICogZ2V0dGluZyBhIGhhcmR3YXJlIGxvY2sgd2l0aCB0aGUKQEAgLTM0Nyw3OSArMzI3LDczIEBACiAJCQkJICAgICAgICogcHJvY2Vzc2VkLgogCQkJCSAgICAgICAqLwogCV9EUk1fRE1BX1dISUxFX0xPQ0tFRCA9IDB4MDIsIC8qKjwgRGlzcGF0Y2ggd2hpbGUgbG9jayBoZWxkICovCi0JX0RSTV9ETUFfUFJJT1JJVFkgICAgID0gMHgwNCwgLyoqPCBIaWdoIHByaW9yaXR5IGRpc3BhdGNoICovCisJX0RSTV9ETUFfUFJJT1JJVFkgPSAweDA0LCAgICAgLyoqPCBIaWdoIHByaW9yaXR5IGRpc3BhdGNoICovCiAKLQkJCQkgICAgICAvKiBGbGFncyBmb3IgRE1BIGJ1ZmZlciByZXF1ZXN0ICovCi0JX0RSTV9ETUFfV0FJVAkgICAgICA9IDB4MTAsIC8qKjwgV2FpdCBmb3IgZnJlZSBidWZmZXJzICovCi0JX0RSTV9ETUFfU01BTExFUl9PSyAgID0gMHgyMCwgLyoqPCBTbWFsbGVyLXRoYW4tcmVxdWVzdGVkIGJ1ZmZlcnMgT0sgKi8KLQlfRFJNX0RNQV9MQVJHRVJfT0sgICAgPSAweDQwICAvKio8IExhcmdlci10aGFuLXJlcXVlc3RlZCBidWZmZXJzIE9LICovCisJLyogRmxhZ3MgZm9yIERNQSBidWZmZXIgcmVxdWVzdCAqLworCV9EUk1fRE1BX1dBSVQgPSAweDEwLAkgICAgICAvKio8IFdhaXQgZm9yIGZyZWUgYnVmZmVycyAqLworCV9EUk1fRE1BX1NNQUxMRVJfT0sgPSAweDIwLCAgIC8qKjwgU21hbGxlci10aGFuLXJlcXVlc3RlZCBidWZmZXJzIE9LICovCisJX0RSTV9ETUFfTEFSR0VSX09LID0gMHg0MCAgICAgLyoqPCBMYXJnZXItdGhhbi1yZXF1ZXN0ZWQgYnVmZmVycyBPSyAqLwogfSBkcm1fZG1hX2ZsYWdzX3Q7CiAKLQogLyoqCiAgKiBEUk1fSU9DVExfQUREX0JVRlMgYW5kIERSTV9JT0NUTF9NQVJLX0JVRlMgaW9jdGwgYXJndW1lbnQgdHlwZS4KICAqCiAgKiBcc2EgZHJtQWRkQnVmcygpLgogICovCiB0eXBlZGVmIHN0cnVjdCBkcm1fYnVmX2Rlc2MgewotCWludAkgICAgICBjb3VudDsJIC8qKjwgTnVtYmVyIG9mIGJ1ZmZlcnMgb2YgdGhpcyBzaXplICovCi0JaW50CSAgICAgIHNpemU7CSAvKio8IFNpemUgaW4gYnl0ZXMgKi8KLQlpbnQJICAgICAgbG93X21hcms7CSAvKio8IExvdyB3YXRlciBtYXJrICovCi0JaW50CSAgICAgIGhpZ2hfbWFyazsgLyoqPCBIaWdoIHdhdGVyIG1hcmsgKi8KKwlpbnQgY291bnQ7CQkgLyoqPCBOdW1iZXIgb2YgYnVmZmVycyBvZiB0aGlzIHNpemUgKi8KKwlpbnQgc2l6ZTsJCSAvKio8IFNpemUgaW4gYnl0ZXMgKi8KKwlpbnQgbG93X21hcms7CQkgLyoqPCBMb3cgd2F0ZXIgbWFyayAqLworCWludCBoaWdoX21hcms7CQkgLyoqPCBIaWdoIHdhdGVyIG1hcmsgKi8KIAllbnVtIHsKLQkJX0RSTV9QQUdFX0FMSUdOID0gMHgwMSwgLyoqPCBBbGlnbiBvbiBwYWdlIGJvdW5kYXJpZXMgZm9yIERNQSAqLwotCQlfRFJNX0FHUF9CVUZGRVIgPSAweDAyLCAvKio8IEJ1ZmZlciBpcyBpbiBBR1Agc3BhY2UgKi8KLQkJX0RSTV9TR19CVUZGRVIgID0gMHgwNCwgLyoqPCBTY2F0dGVyL2dhdGhlciBtZW1vcnkgYnVmZmVyICovCi0JCV9EUk1fRkJfQlVGRkVSICA9IDB4MDggIC8qKjwgQnVmZmVyIGlzIGluIGZyYW1lIGJ1ZmZlciAqLwotCX0JICAgICAgZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZyBhZ3Bfc3RhcnQ7IC8qKjwgCisJCV9EUk1fUEFHRV9BTElHTiA9IDB4MDEsCS8qKjwgQWxpZ24gb24gcGFnZSBib3VuZGFyaWVzIGZvciBETUEgKi8KKwkJX0RSTV9BR1BfQlVGRkVSID0gMHgwMiwJLyoqPCBCdWZmZXIgaXMgaW4gQUdQIHNwYWNlICovCisJCV9EUk1fU0dfQlVGRkVSID0gMHgwNCwJLyoqPCBTY2F0dGVyL2dhdGhlciBtZW1vcnkgYnVmZmVyICovCisJCV9EUk1fRkJfQlVGRkVSID0gMHgwOAkvKio8IEJ1ZmZlciBpcyBpbiBmcmFtZSBidWZmZXIgKi8KKwl9IGZsYWdzOworCXVuc2lnbmVkIGxvbmcgYWdwX3N0YXJ0OyAvKio8CiAJCQkJICAqIFN0YXJ0IGFkZHJlc3Mgb2Ygd2hlcmUgdGhlIEFHUCBidWZmZXJzIGFyZQogCQkJCSAgKiBpbiB0aGUgQUdQIGFwZXJ0dXJlCiAJCQkJICAqLwogfSBkcm1fYnVmX2Rlc2NfdDsKIAotCiAvKioKICAqIERSTV9JT0NUTF9JTkZPX0JVRlMgaW9jdGwgYXJndW1lbnQgdHlwZS4KICAqLwogdHlwZWRlZiBzdHJ1Y3QgZHJtX2J1Zl9pbmZvIHsKLQlpbnQJICAgICAgIGNvdW50OwkvKio8IEVudHJpZXMgaW4gbGlzdCAqLworCWludCBjb3VudDsJCS8qKjwgRW50cmllcyBpbiBsaXN0ICovCiAJZHJtX2J1Zl9kZXNjX3QgX191c2VyICpsaXN0OwogfSBkcm1fYnVmX2luZm9fdDsKIAotCiAvKioKICAqIERSTV9JT0NUTF9GUkVFX0JVRlMgaW9jdGwgYXJndW1lbnQgdHlwZS4KICAqLwogdHlwZWRlZiBzdHJ1Y3QgZHJtX2J1Zl9mcmVlIHsKLQlpbnQJICAgICAgIGNvdW50OwotCWludAkgICAgICAgX191c2VyICpsaXN0OworCWludCBjb3VudDsKKwlpbnQgX191c2VyICpsaXN0OwogfSBkcm1fYnVmX2ZyZWVfdDsKIAotCiAvKioKICAqIEJ1ZmZlciBpbmZvcm1hdGlvbgogICoKICAqIFxzYSBkcm1fYnVmX21hcC4KICAqLwogdHlwZWRlZiBzdHJ1Y3QgZHJtX2J1Zl9wdWIgewotCWludAkJICBpZHg7CSAgICAgICAvKio8IEluZGV4IGludG8gdGhlIG1hc3RlciBidWZmZXIgbGlzdCAqLwotCWludAkJICB0b3RhbDsgICAgICAgLyoqPCBCdWZmZXIgc2l6ZSAqLwotCWludAkJICB1c2VkOwkgICAgICAgLyoqPCBBbW91bnQgb2YgYnVmZmVyIGluIHVzZSAoZm9yIERNQSkgKi8KLQl2b2lkCSAgX191c2VyICphZGRyZXNzOyAgICAgLyoqPCBBZGRyZXNzIG9mIGJ1ZmZlciAqLworCWludCBpZHg7CQkgICAgICAgLyoqPCBJbmRleCBpbnRvIHRoZSBtYXN0ZXIgYnVmZmVyIGxpc3QgKi8KKwlpbnQgdG90YWw7CQkgICAgICAgLyoqPCBCdWZmZXIgc2l6ZSAqLworCWludCB1c2VkOwkJICAgICAgIC8qKjwgQW1vdW50IG9mIGJ1ZmZlciBpbiB1c2UgKGZvciBETUEpICovCisJdm9pZCBfX3VzZXIgKmFkZHJlc3M7CSAgICAgICAvKio8IEFkZHJlc3Mgb2YgYnVmZmVyICovCiB9IGRybV9idWZfcHViX3Q7CiAKLQogLyoqCiAgKiBEUk1fSU9DVExfTUFQX0JVRlMgaW9jdGwgYXJndW1lbnQgdHlwZS4KICAqLwogdHlwZWRlZiBzdHJ1Y3QgZHJtX2J1Zl9tYXAgewotCWludAkgICAgICBjb3VudDsJLyoqPCBMZW5ndGggb2YgdGhlIGJ1ZmZlciBsaXN0ICovCi0Jdm9pZAkgICAgICBfX3VzZXIgKnZpcnR1YWw7CS8qKjwgTW1hcCdkIGFyZWEgaW4gdXNlci12aXJ0dWFsICovCisJaW50IGNvdW50OwkJLyoqPCBMZW5ndGggb2YgdGhlIGJ1ZmZlciBsaXN0ICovCisJdm9pZCBfX3VzZXIgKnZpcnR1YWw7CQkvKio8IE1tYXAnZCBhcmVhIGluIHVzZXItdmlydHVhbCAqLwogCWRybV9idWZfcHViX3QgX191c2VyICpsaXN0OwkvKio8IEJ1ZmZlciBpbmZvcm1hdGlvbiAqLwogfSBkcm1fYnVmX21hcF90OwogCi0KIC8qKgogICogRFJNX0lPQ1RMX0RNQSBpb2N0bCBhcmd1bWVudCB0eXBlLgogICoKQEAgLTQyOCw2MSArNDAyLDU1IEBACiAgKiBcc2EgZHJtRE1BKCkuCiAgKi8KIHR5cGVkZWYgc3RydWN0IGRybV9kbWEgewotCWludAkJY29udGV4dDsJICAvKio8IENvbnRleHQgaGFuZGxlICovCi0JaW50CQlzZW5kX2NvdW50OwkgIC8qKjwgTnVtYmVyIG9mIGJ1ZmZlcnMgdG8gc2VuZCAqLwotCWludAlfX3VzZXIgKnNlbmRfaW5kaWNlczsJICAvKio8IExpc3Qgb2YgaGFuZGxlcyB0byBidWZmZXJzICovCi0JaW50CV9fdXNlciAqc2VuZF9zaXplczsJICAvKio8IExlbmd0aHMgb2YgZGF0YSB0byBzZW5kICovCisJaW50IGNvbnRleHQ7CQkJICAvKio8IENvbnRleHQgaGFuZGxlICovCisJaW50IHNlbmRfY291bnQ7CQkJICAvKio8IE51bWJlciBvZiBidWZmZXJzIHRvIHNlbmQgKi8KKwlpbnQgX191c2VyICpzZW5kX2luZGljZXM7CSAgLyoqPCBMaXN0IG9mIGhhbmRsZXMgdG8gYnVmZmVycyAqLworCWludCBfX3VzZXIgKnNlbmRfc2l6ZXM7CQkgIC8qKjwgTGVuZ3RocyBvZiBkYXRhIHRvIHNlbmQgKi8KIAlkcm1fZG1hX2ZsYWdzX3QgZmxhZ3M7CQkgIC8qKjwgRmxhZ3MgKi8KLQlpbnQJCXJlcXVlc3RfY291bnQ7CSAgLyoqPCBOdW1iZXIgb2YgYnVmZmVycyByZXF1ZXN0ZWQgKi8KLQlpbnQJCXJlcXVlc3Rfc2l6ZTsJICAvKio8IERlc2lyZWQgc2l6ZSBmb3IgYnVmZmVycyAqLwotCWludAlfX3VzZXIgKnJlcXVlc3RfaW5kaWNlczsgIC8qKjwgQnVmZmVyIGluZm9ybWF0aW9uICovCi0JaW50CV9fdXNlciAqcmVxdWVzdF9zaXplczsKLQlpbnQJCWdyYW50ZWRfY291bnQ7CSAgLyoqPCBOdW1iZXIgb2YgYnVmZmVycyBncmFudGVkICovCisJaW50IHJlcXVlc3RfY291bnQ7CQkgIC8qKjwgTnVtYmVyIG9mIGJ1ZmZlcnMgcmVxdWVzdGVkICovCisJaW50IHJlcXVlc3Rfc2l6ZTsJCSAgLyoqPCBEZXNpcmVkIHNpemUgZm9yIGJ1ZmZlcnMgKi8KKwlpbnQgX191c2VyICpyZXF1ZXN0X2luZGljZXM7CSAgLyoqPCBCdWZmZXIgaW5mb3JtYXRpb24gKi8KKwlpbnQgX191c2VyICpyZXF1ZXN0X3NpemVzOworCWludCBncmFudGVkX2NvdW50OwkJICAvKio8IE51bWJlciBvZiBidWZmZXJzIGdyYW50ZWQgKi8KIH0gZHJtX2RtYV90OwogCi0KIHR5cGVkZWYgZW51bSB7CiAJX0RSTV9DT05URVhUX1BSRVNFUlZFRCA9IDB4MDEsCi0JX0RSTV9DT05URVhUXzJET05MWSAgICA9IDB4MDIKKwlfRFJNX0NPTlRFWFRfMkRPTkxZID0gMHgwMgogfSBkcm1fY3R4X2ZsYWdzX3Q7CiAKLQogLyoqCiAgKiBEUk1fSU9DVExfQUREX0NUWCBpb2N0bCBhcmd1bWVudCB0eXBlLgogICoKICAqIFxzYSBkcm1DcmVhdGVDb250ZXh0KCkgYW5kIGRybURlc3Ryb3lDb250ZXh0KCkuCiAgKi8KIHR5cGVkZWYgc3RydWN0IGRybV9jdHggewotCWRybV9jb250ZXh0X3QJaGFuZGxlOworCWRybV9jb250ZXh0X3QgaGFuZGxlOwogCWRybV9jdHhfZmxhZ3NfdCBmbGFnczsKIH0gZHJtX2N0eF90OwogCi0KIC8qKgogICogRFJNX0lPQ1RMX1JFU19DVFggaW9jdGwgYXJndW1lbnQgdHlwZS4KICAqLwogdHlwZWRlZiBzdHJ1Y3QgZHJtX2N0eF9yZXMgewotCWludAkJY291bnQ7Ci0JZHJtX2N0eF90CV9fdXNlciAqY29udGV4dHM7CisJaW50IGNvdW50OworCWRybV9jdHhfdCBfX3VzZXIgKmNvbnRleHRzOwogfSBkcm1fY3R4X3Jlc190OwogCi0KIC8qKgogICogRFJNX0lPQ1RMX0FERF9EUkFXIGFuZCBEUk1fSU9DVExfUk1fRFJBVyBpb2N0bCBhcmd1bWVudCB0eXBlLgogICovCiB0eXBlZGVmIHN0cnVjdCBkcm1fZHJhdyB7Ci0JZHJtX2RyYXdhYmxlX3QJaGFuZGxlOworCWRybV9kcmF3YWJsZV90IGhhbmRsZTsKIH0gZHJtX2RyYXdfdDsKIAotCiAvKioKICAqIERSTV9JT0NUTF9HRVRfTUFHSUMgYW5kIERSTV9JT0NUTF9BVVRIX01BR0lDIGlvY3RsIGFyZ3VtZW50IHR5cGUuCiAgKi8KIHR5cGVkZWYgc3RydWN0IGRybV9hdXRoIHsKLQlkcm1fbWFnaWNfdAltYWdpYzsKKwlkcm1fbWFnaWNfdCBtYWdpYzsKIH0gZHJtX2F1dGhfdDsKIAotCiAvKioKICAqIERSTV9JT0NUTF9JUlFfQlVTSUQgaW9jdGwgYXJndW1lbnQgdHlwZS4KICAqCkBAIC00OTUsMjQgKzQ2MywyMCBAQAogCWludCBmdW5jbnVtOwkvKio8IGZ1bmN0aW9uIG51bWJlciAqLwogfSBkcm1faXJxX2J1c2lkX3Q7CiAKLQogdHlwZWRlZiBlbnVtIHsKLSAgICBfRFJNX1ZCTEFOS19BQlNPTFVURSA9IDB4MCwJCS8qKjwgV2FpdCBmb3Igc3BlY2lmaWMgdmJsYW5rIHNlcXVlbmNlIG51bWJlciAqLwotICAgIF9EUk1fVkJMQU5LX1JFTEFUSVZFID0gMHgxLAkJLyoqPCBXYWl0IGZvciBnaXZlbiBudW1iZXIgb2YgdmJsYW5rcyAqLwotICAgIF9EUk1fVkJMQU5LX1NJR05BTCAgID0gMHg0MDAwMDAwMAkvKio8IFNlbmQgc2lnbmFsIGluc3RlYWQgb2YgYmxvY2tpbmcgKi8KKwlfRFJNX1ZCTEFOS19BQlNPTFVURSA9IDB4MCwJLyoqPCBXYWl0IGZvciBzcGVjaWZpYyB2Ymxhbmsgc2VxdWVuY2UgbnVtYmVyICovCisJX0RSTV9WQkxBTktfUkVMQVRJVkUgPSAweDEsCS8qKjwgV2FpdCBmb3IgZ2l2ZW4gbnVtYmVyIG9mIHZibGFua3MgKi8KKwlfRFJNX1ZCTEFOS19TSUdOQUwgPSAweDQwMDAwMDAwCS8qKjwgU2VuZCBzaWduYWwgaW5zdGVhZCBvZiBibG9ja2luZyAqLwogfSBkcm1fdmJsYW5rX3NlcV90eXBlX3Q7CiAKLQogI2RlZmluZSBfRFJNX1ZCTEFOS19GTEFHU19NQVNLIF9EUk1fVkJMQU5LX1NJR05BTAogCi0KIHN0cnVjdCBkcm1fd2FpdF92YmxhbmtfcmVxdWVzdCB7CiAJZHJtX3ZibGFua19zZXFfdHlwZV90IHR5cGU7CiAJdW5zaWduZWQgaW50IHNlcXVlbmNlOwogCXVuc2lnbmVkIGxvbmcgc2lnbmFsOwogfTsKIAotCiBzdHJ1Y3QgZHJtX3dhaXRfdmJsYW5rX3JlcGx5IHsKIAlkcm1fdmJsYW5rX3NlcV90eXBlX3QgdHlwZTsKIAl1bnNpZ25lZCBpbnQgc2VxdWVuY2U7CkBAIC01MjAsNyArNDg0LDYgQEAKIAlsb25nIHR2YWxfdXNlYzsKIH07CiAKLQogLyoqCiAgKiBEUk1fSU9DVExfV0FJVF9WQkxBTksgaW9jdGwgYXJndW1lbnQgdHlwZS4KICAqCkBAIC01MzEsNyArNDk0LDYgQEAKIAlzdHJ1Y3QgZHJtX3dhaXRfdmJsYW5rX3JlcGx5IHJlcGx5OwogfSBkcm1fd2FpdF92YmxhbmtfdDsKIAotCiAvKioKICAqIERSTV9JT0NUTF9BR1BfRU5BQkxFIGlvY3RsIGFyZ3VtZW50IHR5cGUuCiAgKgpAQCAtNTQxLDcgKzUwMyw2IEBACiAJdW5zaWduZWQgbG9uZyBtb2RlOwkvKio8IEFHUCBtb2RlICovCiB9IGRybV9hZ3BfbW9kZV90OwogCi0KIC8qKgogICogRFJNX0lPQ1RMX0FHUF9BTExPQyBhbmQgRFJNX0lPQ1RMX0FHUF9GUkVFIGlvY3RscyBhcmd1bWVudCB0eXBlLgogICoKQEAgLTU1MCwyMiArNTExLDIwIEBACiB0eXBlZGVmIHN0cnVjdCBkcm1fYWdwX2J1ZmZlciB7CiAJdW5zaWduZWQgbG9uZyBzaXplOwkvKio8IEluIGJ5dGVzIC0tIHdpbGwgcm91bmQgdG8gcGFnZSBib3VuZGFyeSAqLwogCXVuc2lnbmVkIGxvbmcgaGFuZGxlOwkvKio8IFVzZWQgZm9yIGJpbmRpbmcgLyB1bmJpbmRpbmcgKi8KLQl1bnNpZ25lZCBsb25nIHR5cGU7ICAgICAvKio8IFR5cGUgb2YgbWVtb3J5IHRvIGFsbG9jYXRlICovCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgcGh5c2ljYWw7IC8qKjwgUGh5c2ljYWwgdXNlZCBieSBpODEwICovCisJdW5zaWduZWQgbG9uZyB0eXBlOwkvKio8IFR5cGUgb2YgbWVtb3J5IHRvIGFsbG9jYXRlICovCisJdW5zaWduZWQgbG9uZyBwaHlzaWNhbDsJLyoqPCBQaHlzaWNhbCB1c2VkIGJ5IGk4MTAgKi8KIH0gZHJtX2FncF9idWZmZXJfdDsKIAotCiAvKioKICAqIERSTV9JT0NUTF9BR1BfQklORCBhbmQgRFJNX0lPQ1RMX0FHUF9VTkJJTkQgaW9jdGxzIGFyZ3VtZW50IHR5cGUuCiAgKgogICogXHNhIGRybUFncEJpbmQoKSBhbmQgZHJtQWdwVW5iaW5kKCkuCiAgKi8KIHR5cGVkZWYgc3RydWN0IGRybV9hZ3BfYmluZGluZyB7Ci0JdW5zaWduZWQgbG9uZyBoYW5kbGU7ICAgLyoqPCBGcm9tIGRybV9hZ3BfYnVmZmVyICovCisJdW5zaWduZWQgbG9uZyBoYW5kbGU7CS8qKjwgRnJvbSBkcm1fYWdwX2J1ZmZlciAqLwogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwkvKio8IEluIGJ5dGVzIC0tIHdpbGwgcm91bmQgdG8gcGFnZSBib3VuZGFyeSAqLwogfSBkcm1fYWdwX2JpbmRpbmdfdDsKIAotCiAvKioKICAqIERSTV9JT0NUTF9BR1BfSU5GTyBpb2N0bCBhcmd1bWVudCB0eXBlLgogICoKQEAgLTU3NCwyMCArNTMzLDE5IEBACiAgKiBkcm1BZ3BWZW5kb3JJZCgpIGFuZCBkcm1BZ3BEZXZpY2VJZCgpLgogICovCiB0eXBlZGVmIHN0cnVjdCBkcm1fYWdwX2luZm8gewotCWludCAgICAgICAgICAgIGFncF92ZXJzaW9uX21ham9yOwotCWludCAgICAgICAgICAgIGFncF92ZXJzaW9uX21pbm9yOwotCXVuc2lnbmVkIGxvbmcgIG1vZGU7Ci0JdW5zaWduZWQgbG9uZyAgYXBlcnR1cmVfYmFzZTsgIC8qIHBoeXNpY2FsIGFkZHJlc3MgKi8KLQl1bnNpZ25lZCBsb25nICBhcGVydHVyZV9zaXplOyAgLyogYnl0ZXMgKi8KLQl1bnNpZ25lZCBsb25nICBtZW1vcnlfYWxsb3dlZDsgLyogYnl0ZXMgKi8KLQl1bnNpZ25lZCBsb25nICBtZW1vcnlfdXNlZDsKKwlpbnQgYWdwX3ZlcnNpb25fbWFqb3I7CisJaW50IGFncF92ZXJzaW9uX21pbm9yOworCXVuc2lnbmVkIGxvbmcgbW9kZTsKKwl1bnNpZ25lZCBsb25nIGFwZXJ0dXJlX2Jhc2U7CS8qIHBoeXNpY2FsIGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBsb25nIGFwZXJ0dXJlX3NpemU7CS8qIGJ5dGVzICovCisJdW5zaWduZWQgbG9uZyBtZW1vcnlfYWxsb3dlZDsJLyogYnl0ZXMgKi8KKwl1bnNpZ25lZCBsb25nIG1lbW9yeV91c2VkOwogCi0JCQkJLyogUENJIGluZm9ybWF0aW9uICovCisJLyogUENJIGluZm9ybWF0aW9uICovCiAJdW5zaWduZWQgc2hvcnQgaWRfdmVuZG9yOwogCXVuc2lnbmVkIHNob3J0IGlkX2RldmljZTsKIH0gZHJtX2FncF9pbmZvX3Q7CiAKLQogLyoqCiAgKiBEUk1fSU9DVExfU0dfQUxMT0MgaW9jdGwgYXJndW1lbnQgdHlwZS4KICAqLwpAQCAtNjA2LDcgKzU2NCw2IEBACiAJaW50IGRybV9kZF9taW5vcjsKIH0gZHJtX3NldF92ZXJzaW9uX3Q7CiAKLQogI2RlZmluZSBEUk1fSU9DVExfQkFTRQkJCSdkJwogI2RlZmluZSBEUk1fSU8obnIpCQkJX0lPKERSTV9JT0NUTF9CQVNFLG5yKQogI2RlZmluZSBEUk1fSU9SKG5yLHR5cGUpCQlfSU9SKERSTV9JT0NUTF9CQVNFLG5yLHR5cGUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2RybVAuaCBiL2RyaXZlcnMvY2hhci9kcm0vZHJtUC5oCmluZGV4IDc5MjIxNzguLjI1NWEyMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vZHJtUC5oCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtUC5oCkBAIC0xLDcgKzEsNyBAQAogLyoqCi0gKiBcZmlsZSBkcm1QLmggCisgKiBcZmlsZSBkcm1QLmgKICAqIFByaXZhdGUgaGVhZGVyIGZvciBEaXJlY3QgUmVuZGVyaW5nIE1hbmFnZXIKLSAqIAorICoKICAqIFxhdXRob3IgUmlja2FyZCBFLiAoUmlrKSBGYWl0aCA8ZmFpdGhAdmFsaW51eC5jb20+CiAgKiBcYXV0aG9yIEdhcmV0aCBIdWdoZXMgPGdhcmV0aEB2YWxpbnV4LmNvbT4KICAqLwpAQCAtNDMsNyArNDMsNyBAQAogICogYmVmb3JlIHN0YXRpYyBpbmxpbmUgZnVuY3MgaW4gd2FpdC5oLiBEb2luZyB0aGlzIHNvIHdlCiAgKiBjYW4gYnVpbGQgdGhlIERSTSAocGFydCBvZiBQSSBEUkkpLiA0LzIxLzIwMDAgUyArIEIgKi8KICNpbmNsdWRlIDxhc20vY3VycmVudC5oPgotI2VuZGlmIC8qIF9fYWxwaGFfXyAqLworI2VuZGlmCQkJCS8qIF9fYWxwaGFfXyAqLwogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtNTgsNyArNTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvY2Rldi5oPgogI2lmIGRlZmluZWQoX19hbHBoYV9fKSB8fCBkZWZpbmVkKF9fcG93ZXJwY19fKQotI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+IC8qIEZvciBwdGVfd3Jwcm90ZWN0ICovCisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4JLyogRm9yIHB0ZV93cnByb3RlY3QgKi8KICNlbmRpZgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9tbWFuLmg+CkBAIC0xMzgsMTYgKzEzOCwxNSBAQAogI2RlZmluZSBEUk1fTUVNX0NUWExJU1QgIDIxCiAKICNkZWZpbmUgRFJNX01BWF9DVFhCSVRNQVAgKFBBR0VfU0laRSAqIDgpCi0JCi0vKkB9Ki8KIAorLypAfSovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qKiBcbmFtZSBCYWNrd2FyZCBjb21wYXRpYmlsaXR5IHNlY3Rpb24gKi8KIC8qQHsqLwogCiAjaWZuZGVmIE1PRFVMRV9MSUNFTlNFCi0jZGVmaW5lIE1PRFVMRV9MSUNFTlNFKHgpIAorI2RlZmluZSBNT0RVTEVfTElDRU5TRSh4KQogI2VuZGlmCiAKICNpZm5kZWYgcHJlZW1wdF9kaXNhYmxlCkBAIC0xNTUsNyArMTU0LDcgQEAKICNkZWZpbmUgcHJlZW1wdF9lbmFibGUoKQogI2VuZGlmCiAKLSNpZm5kZWYgcHRlX29mZnNldF9tYXAgCisjaWZuZGVmIHB0ZV9vZmZzZXRfbWFwCiAjZGVmaW5lIHB0ZV9vZmZzZXRfbWFwIHB0ZV9vZmZzZXQKICNkZWZpbmUgcHRlX3VubWFwKHB0ZSkKICNlbmRpZgpAQCAtMTY2LDcgKzE2NSw2IEBACiAKIC8qQH0qLwogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qKiBcbmFtZSBNYWNyb3MgdG8gbWFrZSBwcmludGsgZWFzaWVyICovCiAvKkB7Ki8KQEAgLTE5NSw3ICsxOTMsNyBAQAogCiAvKioKICAqIERlYnVnIG91dHB1dC4KLSAqIAorICoKICAqIFxwYXJhbSBmbXQgcHJpbnRmKCkgbGlrZSBmb3JtYXQgc3RyaW5nLgogICogXHBhcmFtIGFyZyBhcmd1bWVudHMKICAqLwpAQCAtMjIzLDcgKzIyMSw2IEBACiAKIC8qQH0qLwogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qKiBcbmFtZSBJbnRlcm5hbCB0eXBlcyBhbmQgc3RydWN0dXJlcyAqLwogLypAeyovCkBAIC0yNzUsNyArMjcyLDcgQEAKIAkJaWYgKCBjb3B5X3RvX3VzZXIoIG5hbWUsIHZhbHVlLCBsZW4gKSApCQkJXAogCQkJcmV0dXJuIC1FRkFVTFQ7CQkJCQlcCiAJfQotCQorCiAvKioKICAqIElvY3RsIGZ1bmN0aW9uIHR5cGUuCiAgKgpAQCAtMjg0LDI1ICsyODEsMjUgQEAKICAqIFxwYXJhbSBjbWQgY29tbWFuZC4KICAqIFxwYXJhbSBhcmcgYXJndW1lbnQuCiAgKi8KLXR5cGVkZWYgaW50IGRybV9pb2N0bF90KCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJCSB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyApOwordHlwZWRlZiBpbnQgZHJtX2lvY3RsX3Qoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCisJCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiAKIHR5cGVkZWYgaW50IGRybV9pb2N0bF9jb21wYXRfdChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwKIAkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFyZyk7CiAKIHR5cGVkZWYgc3RydWN0IGRybV9pb2N0bF9kZXNjIHsKLQlkcm1faW9jdGxfdAkgICAgICpmdW5jOwotCWludAkJICAgICBhdXRoX25lZWRlZDsKLQlpbnQJCSAgICAgcm9vdF9vbmx5OworCWRybV9pb2N0bF90ICpmdW5jOworCWludCBhdXRoX25lZWRlZDsKKwlpbnQgcm9vdF9vbmx5OwogfSBkcm1faW9jdGxfZGVzY190OwogCiB0eXBlZGVmIHN0cnVjdCBkcm1fZGV2c3RhdGUgewotCXBpZF90CQkgIG93bmVyOwkvKio8IFggc2VydmVyIHBpZCBob2xkaW5nIHhfbG9jayAqLworCXBpZF90IG93bmVyOwkJCS8qKjwgWCBzZXJ2ZXIgcGlkIGhvbGRpbmcgeF9sb2NrICovCiB9IGRybV9kZXZzdGF0ZV90OwogCiB0eXBlZGVmIHN0cnVjdCBkcm1fbWFnaWNfZW50cnkgewotCWRybV9tYWdpY190CSAgICAgICBtYWdpYzsKLQlzdHJ1Y3QgZHJtX2ZpbGUJICAgICAgICpwcml2OworCWRybV9tYWdpY190IG1hZ2ljOworCXN0cnVjdCBkcm1fZmlsZSAqcHJpdjsKIAlzdHJ1Y3QgZHJtX21hZ2ljX2VudHJ5ICpuZXh0OwogfSBkcm1fbWFnaWNfZW50cnlfdDsKIApAQCAtMzEzLDExMSArMzEwLDExMCBAQAogCiB0eXBlZGVmIHN0cnVjdCBkcm1fdm1hX2VudHJ5IHsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKLQlzdHJ1Y3QgZHJtX3ZtYV9lbnRyeSAgKm5leHQ7Ci0JcGlkX3QJCSAgICAgIHBpZDsKKwlzdHJ1Y3QgZHJtX3ZtYV9lbnRyeSAqbmV4dDsKKwlwaWRfdCBwaWQ7CiB9IGRybV92bWFfZW50cnlfdDsKIAogLyoqCiAgKiBETUEgYnVmZmVyLgogICovCiB0eXBlZGVmIHN0cnVjdCBkcm1fYnVmIHsKLQlpbnQJCSAgaWR4OwkgICAgICAgLyoqPCBJbmRleCBpbnRvIG1hc3RlciBidWZsaXN0ICovCi0JaW50CQkgIHRvdGFsOyAgICAgICAvKio8IEJ1ZmZlciBzaXplICovCi0JaW50CQkgIG9yZGVyOyAgICAgICAvKio8IGxvZy1iYXNlLTIodG90YWwpICovCi0JaW50CQkgIHVzZWQ7CSAgICAgICAvKio8IEFtb3VudCBvZiBidWZmZXIgaW4gdXNlIChmb3IgRE1BKSAqLwotCXVuc2lnbmVkIGxvbmcJICBvZmZzZXQ7ICAgICAgLyoqPCBCeXRlIG9mZnNldCAodXNlZCBpbnRlcm5hbGx5KSAqLwotCXZvaWQJCSAgKmFkZHJlc3M7ICAgIC8qKjwgQWRkcmVzcyBvZiBidWZmZXIgKi8KLQl1bnNpZ25lZCBsb25nCSAgYnVzX2FkZHJlc3M7IC8qKjwgQnVzIGFkZHJlc3Mgb2YgYnVmZmVyICovCi0Jc3RydWN0IGRybV9idWYJICAqbmV4dDsgICAgICAgLyoqPCBLZXJuZWwtb25seTogdXNlZCBmb3IgZnJlZSBsaXN0ICovCi0JX192b2xhdGlsZV9fIGludCAgd2FpdGluZzsgICAgIC8qKjwgT24ga2VybmVsIERNQSBxdWV1ZSAqLwotCV9fdm9sYXRpbGVfXyBpbnQgIHBlbmRpbmc7ICAgICAvKio8IE9uIGhhcmR3YXJlIERNQSBxdWV1ZSAqLworCWludCBpZHg7CQkgICAgICAgLyoqPCBJbmRleCBpbnRvIG1hc3RlciBidWZsaXN0ICovCisJaW50IHRvdGFsOwkJICAgICAgIC8qKjwgQnVmZmVyIHNpemUgKi8KKwlpbnQgb3JkZXI7CQkgICAgICAgLyoqPCBsb2ctYmFzZS0yKHRvdGFsKSAqLworCWludCB1c2VkOwkJICAgICAgIC8qKjwgQW1vdW50IG9mIGJ1ZmZlciBpbiB1c2UgKGZvciBETUEpICovCisJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CSAgICAgICAvKio8IEJ5dGUgb2Zmc2V0ICh1c2VkIGludGVybmFsbHkpICovCisJdm9pZCAqYWRkcmVzczsJCSAgICAgICAvKio8IEFkZHJlc3Mgb2YgYnVmZmVyICovCisJdW5zaWduZWQgbG9uZyBidXNfYWRkcmVzczsgICAgIC8qKjwgQnVzIGFkZHJlc3Mgb2YgYnVmZmVyICovCisJc3RydWN0IGRybV9idWYgKm5leHQ7CSAgICAgICAvKio8IEtlcm5lbC1vbmx5OiB1c2VkIGZvciBmcmVlIGxpc3QgKi8KKwlfX3ZvbGF0aWxlX18gaW50IHdhaXRpbmc7ICAgICAgLyoqPCBPbiBrZXJuZWwgRE1BIHF1ZXVlICovCisJX192b2xhdGlsZV9fIGludCBwZW5kaW5nOyAgICAgIC8qKjwgT24gaGFyZHdhcmUgRE1BIHF1ZXVlICovCiAJd2FpdF9xdWV1ZV9oZWFkX3QgZG1hX3dhaXQ7ICAgIC8qKjwgUHJvY2Vzc2VzIHdhaXRpbmcgKi8KLQlzdHJ1Y3QgZmlsZSAgICAgICAqZmlscDsgICAgICAgLyoqPCBQb2ludGVyIHRvIGhvbGRpbmcgZmlsZSBkZXNjciAqLwotCWludAkJICBjb250ZXh0OyAgICAgLyoqPCBLZXJuZWwgcXVldWUgZm9yIHRoaXMgYnVmZmVyICovCi0JaW50CQkgIHdoaWxlX2xvY2tlZDsvKio8IERpc3BhdGNoIHRoaXMgYnVmZmVyIHdoaWxlIGxvY2tlZCAqLworCXN0cnVjdCBmaWxlICpmaWxwOwkgICAgICAgLyoqPCBQb2ludGVyIHRvIGhvbGRpbmcgZmlsZSBkZXNjciAqLworCWludCBjb250ZXh0OwkJICAgICAgIC8qKjwgS2VybmVsIHF1ZXVlIGZvciB0aGlzIGJ1ZmZlciAqLworCWludCB3aGlsZV9sb2NrZWQ7CSAgICAgICAvKio8IERpc3BhdGNoIHRoaXMgYnVmZmVyIHdoaWxlIGxvY2tlZCAqLwogCWVudW0gewotCQlEUk1fTElTVF9OT05FCSA9IDAsCi0JCURSTV9MSVNUX0ZSRUUJID0gMSwKLQkJRFJNX0xJU1RfV0FJVAkgPSAyLAotCQlEUk1fTElTVF9QRU5ECSA9IDMsCi0JCURSTV9MSVNUX1BSSU8JID0gNCwKKwkJRFJNX0xJU1RfTk9ORSA9IDAsCisJCURSTV9MSVNUX0ZSRUUgPSAxLAorCQlEUk1fTElTVF9XQUlUID0gMiwKKwkJRFJNX0xJU1RfUEVORCA9IDMsCisJCURSTV9MSVNUX1BSSU8gPSA0LAogCQlEUk1fTElTVF9SRUNMQUlNID0gNQotCX0JCSAgbGlzdDsJICAgICAgIC8qKjwgV2hpY2ggbGlzdCB3ZSdyZSBvbiAqLworCX0gbGlzdDsJCQkgICAgICAgLyoqPCBXaGljaCBsaXN0IHdlJ3JlIG9uICovCiAKLQlpbnQJCSAgZGV2X3ByaXZfc2l6ZTsgLyoqPCBTaXplIG9mIGJ1ZmZlciBwcml2YXRlIHN0b3JhZ2UgKi8KLQl2b2lkCQkgICpkZXZfcHJpdmF0ZTsgIC8qKjwgUGVyLWJ1ZmZlciBwcml2YXRlIHN0b3JhZ2UgKi8KKwlpbnQgZGV2X3ByaXZfc2l6ZTsJCSAvKio8IFNpemUgb2YgYnVmZmVyIHByaXZhdGUgc3RvcmFnZSAqLworCXZvaWQgKmRldl9wcml2YXRlOwkJIC8qKjwgUGVyLWJ1ZmZlciBwcml2YXRlIHN0b3JhZ2UgKi8KIH0gZHJtX2J1Zl90OwogCi0KIC8qKiBidWZzIGlzIG9uZSBsb25nZXIgdGhhbiBpdCBoYXMgdG8gYmUgKi8KIHR5cGVkZWYgc3RydWN0IGRybV93YWl0bGlzdCB7Ci0JaW50CQkgIGNvdW50OwkvKio8IE51bWJlciBvZiBwb3NzaWJsZSBidWZmZXJzICovCi0JZHJtX2J1Zl90CSAgKipidWZzOwkvKio8IExpc3Qgb2YgcG9pbnRlcnMgdG8gYnVmZmVycyAqLwotCWRybV9idWZfdAkgICoqcnA7CQkvKio8IFJlYWQgcG9pbnRlciAqLwotCWRybV9idWZfdAkgICoqd3A7CQkvKio8IFdyaXRlIHBvaW50ZXIgKi8KLQlkcm1fYnVmX3QJICAqKmVuZDsJLyoqPCBFbmQgcG9pbnRlciAqLwotCXNwaW5sb2NrX3QJICByZWFkX2xvY2s7Ci0Jc3BpbmxvY2tfdAkgIHdyaXRlX2xvY2s7CisJaW50IGNvdW50OwkJCS8qKjwgTnVtYmVyIG9mIHBvc3NpYmxlIGJ1ZmZlcnMgKi8KKwlkcm1fYnVmX3QgKipidWZzOwkJLyoqPCBMaXN0IG9mIHBvaW50ZXJzIHRvIGJ1ZmZlcnMgKi8KKwlkcm1fYnVmX3QgKipycDsJCQkvKio8IFJlYWQgcG9pbnRlciAqLworCWRybV9idWZfdCAqKndwOwkJCS8qKjwgV3JpdGUgcG9pbnRlciAqLworCWRybV9idWZfdCAqKmVuZDsJCS8qKjwgRW5kIHBvaW50ZXIgKi8KKwlzcGlubG9ja190IHJlYWRfbG9jazsKKwlzcGlubG9ja190IHdyaXRlX2xvY2s7CiB9IGRybV93YWl0bGlzdF90OwogCiB0eXBlZGVmIHN0cnVjdCBkcm1fZnJlZWxpc3QgewotCWludAkJICBpbml0aWFsaXplZDsgLyoqPCBGcmVlbGlzdCBpbiB1c2UgKi8KLQlhdG9taWNfdAkgIGNvdW50OyAgICAgICAvKio8IE51bWJlciBvZiBmcmVlIGJ1ZmZlcnMgKi8KLQlkcm1fYnVmX3QJICAqbmV4dDsgICAgICAgLyoqPCBFbmQgcG9pbnRlciAqLworCWludCBpbml0aWFsaXplZDsJICAgICAgIC8qKjwgRnJlZWxpc3QgaW4gdXNlICovCisJYXRvbWljX3QgY291bnQ7CQkgICAgICAgLyoqPCBOdW1iZXIgb2YgZnJlZSBidWZmZXJzICovCisJZHJtX2J1Zl90ICpuZXh0OwkgICAgICAgLyoqPCBFbmQgcG9pbnRlciAqLwogCiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdGluZzsgICAgIC8qKjwgUHJvY2Vzc2VzIHdhaXRpbmcgb24gZnJlZSBidWZzICovCi0JaW50CQkgIGxvd19tYXJrOyAgICAvKio8IExvdyB3YXRlciBtYXJrICovCi0JaW50CQkgIGhpZ2hfbWFyazsgICAvKio8IEhpZ2ggd2F0ZXIgbWFyayAqLwotCWF0b21pY190CSAgd2ZoOwkgICAgICAgLyoqPCBJZiB3YWl0aW5nIGZvciBoaWdoIG1hcmsgKi8KLQlzcGlubG9ja190ICAgICAgICBsb2NrOworCWludCBsb3dfbWFyazsJCSAgICAgICAvKio8IExvdyB3YXRlciBtYXJrICovCisJaW50IGhpZ2hfbWFyazsJCSAgICAgICAvKio8IEhpZ2ggd2F0ZXIgbWFyayAqLworCWF0b21pY190IHdmaDsJCSAgICAgICAvKio8IElmIHdhaXRpbmcgZm9yIGhpZ2ggbWFyayAqLworCXNwaW5sb2NrX3QgbG9jazsKIH0gZHJtX2ZyZWVsaXN0X3Q7CiAKIC8qKgogICogQnVmZmVyIGVudHJ5LiAgVGhlcmUgaXMgb25lIG9mIHRoaXMgZm9yIGVhY2ggYnVmZmVyIHNpemUgb3JkZXIuCiAgKi8KIHR5cGVkZWYgc3RydWN0IGRybV9idWZfZW50cnkgewotCWludAkJICBidWZfc2l6ZTsJLyoqPCBzaXplICovCi0JaW50CQkgIGJ1Zl9jb3VudDsJLyoqPCBudW1iZXIgb2YgYnVmZmVycyAqLwotCWRybV9idWZfdAkgICpidWZsaXN0OwkvKio8IGJ1ZmZlciBsaXN0ICovCi0JaW50CQkgIHNlZ19jb3VudDsKLQlpbnQJCSAgcGFnZV9vcmRlcjsKLQl1bnNpZ25lZCBsb25nCSAgKnNlZ2xpc3Q7CisJaW50IGJ1Zl9zaXplOwkJCS8qKjwgc2l6ZSAqLworCWludCBidWZfY291bnQ7CQkJLyoqPCBudW1iZXIgb2YgYnVmZmVycyAqLworCWRybV9idWZfdCAqYnVmbGlzdDsJCS8qKjwgYnVmZmVyIGxpc3QgKi8KKwlpbnQgc2VnX2NvdW50OworCWludCBwYWdlX29yZGVyOworCXVuc2lnbmVkIGxvbmcgKnNlZ2xpc3Q7CiAKLQlkcm1fZnJlZWxpc3RfdAkgIGZyZWVsaXN0OworCWRybV9mcmVlbGlzdF90IGZyZWVsaXN0OwogfSBkcm1fYnVmX2VudHJ5X3Q7CiAKIC8qKiBGaWxlIHByaXZhdGUgZGF0YSAqLwogdHlwZWRlZiBzdHJ1Y3QgZHJtX2ZpbGUgewotCWludAkJICBhdXRoZW50aWNhdGVkOwotCWludAkJICBtaW5vcjsKLQlwaWRfdAkJICBwaWQ7Ci0JdWlkX3QJCSAgdWlkOwotCWRybV9tYWdpY190CSAgbWFnaWM7Ci0JdW5zaWduZWQgbG9uZwkgIGlvY3RsX2NvdW50OwotCXN0cnVjdCBkcm1fZmlsZQkgICpuZXh0OwotCXN0cnVjdCBkcm1fZmlsZQkgICpwcmV2OwotCXN0cnVjdCBkcm1faGVhZCAgICpoZWFkOwotCWludCAJCSAgcmVtb3ZlX2F1dGhfb25fY2xvc2U7Ci0JdW5zaWduZWQgbG9uZyAgICAgbG9ja19jb3VudDsKLQl2b2lkICAgICAgICAgICAgICAqZHJpdmVyX3ByaXY7CisJaW50IGF1dGhlbnRpY2F0ZWQ7CisJaW50IG1pbm9yOworCXBpZF90IHBpZDsKKwl1aWRfdCB1aWQ7CisJZHJtX21hZ2ljX3QgbWFnaWM7CisJdW5zaWduZWQgbG9uZyBpb2N0bF9jb3VudDsKKwlzdHJ1Y3QgZHJtX2ZpbGUgKm5leHQ7CisJc3RydWN0IGRybV9maWxlICpwcmV2OworCXN0cnVjdCBkcm1faGVhZCAqaGVhZDsKKwlpbnQgcmVtb3ZlX2F1dGhfb25fY2xvc2U7CisJdW5zaWduZWQgbG9uZyBsb2NrX2NvdW50OworCXZvaWQgKmRyaXZlcl9wcml2OwogfSBkcm1fZmlsZV90OwogCiAvKiogV2FpdCBxdWV1ZSAqLwogdHlwZWRlZiBzdHJ1Y3QgZHJtX3F1ZXVlIHsKLQlhdG9taWNfdAkgIHVzZV9jb3VudDsJLyoqPCBPdXRzdGFuZGluZyB1c2VzICgrMSkgKi8KLQlhdG9taWNfdAkgIGZpbmFsaXphdGlvbjsJLyoqPCBGaW5hbGl6YXRpb24gaW4gcHJvZ3Jlc3MgKi8KLQlhdG9taWNfdAkgIGJsb2NrX2NvdW50OwkvKio8IENvdW50IG9mIHByb2Nlc3NlcyB3YWl0aW5nICovCi0JYXRvbWljX3QJICBibG9ja19yZWFkOwkvKio8IFF1ZXVlIGJsb2NrZWQgZm9yIHJlYWRzICovCisJYXRvbWljX3QgdXNlX2NvdW50OwkJLyoqPCBPdXRzdGFuZGluZyB1c2VzICgrMSkgKi8KKwlhdG9taWNfdCBmaW5hbGl6YXRpb247CQkvKio8IEZpbmFsaXphdGlvbiBpbiBwcm9ncmVzcyAqLworCWF0b21pY190IGJsb2NrX2NvdW50OwkJLyoqPCBDb3VudCBvZiBwcm9jZXNzZXMgd2FpdGluZyAqLworCWF0b21pY190IGJsb2NrX3JlYWQ7CQkvKio8IFF1ZXVlIGJsb2NrZWQgZm9yIHJlYWRzICovCiAJd2FpdF9xdWV1ZV9oZWFkX3QgcmVhZF9xdWV1ZTsJLyoqPCBQcm9jZXNzZXMgd2FpdGluZyBvbiBibG9ja19yZWFkICovCi0JYXRvbWljX3QJICBibG9ja193cml0ZTsJLyoqPCBRdWV1ZSBibG9ja2VkIGZvciB3cml0ZXMgKi8KKwlhdG9taWNfdCBibG9ja193cml0ZTsJCS8qKjwgUXVldWUgYmxvY2tlZCBmb3Igd3JpdGVzICovCiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd3JpdGVfcXVldWU7CS8qKjwgUHJvY2Vzc2VzIHdhaXRpbmcgb24gYmxvY2tfd3JpdGUgKi8KICNpZiAxCi0JYXRvbWljX3QJICB0b3RhbF9xdWV1ZWQ7CS8qKjwgVG90YWwgcXVldWVkIHN0YXRpc3RpYyAqLwotCWF0b21pY190CSAgdG90YWxfZmx1c2hlZDsvKio8IFRvdGFsIGZsdXNoZXMgc3RhdGlzdGljICovCi0JYXRvbWljX3QJICB0b3RhbF9sb2NrczsJLyoqPCBUb3RhbCBsb2NrcyBzdGF0aXN0aWNzICovCisJYXRvbWljX3QgdG90YWxfcXVldWVkOwkJLyoqPCBUb3RhbCBxdWV1ZWQgc3RhdGlzdGljICovCisJYXRvbWljX3QgdG90YWxfZmx1c2hlZDsJCS8qKjwgVG90YWwgZmx1c2hlcyBzdGF0aXN0aWMgKi8KKwlhdG9taWNfdCB0b3RhbF9sb2NrczsJCS8qKjwgVG90YWwgbG9ja3Mgc3RhdGlzdGljcyAqLwogI2VuZGlmCi0JZHJtX2N0eF9mbGFnc190CSAgZmxhZ3M7CS8qKjwgQ29udGV4dCBwcmVzZXJ2aW5nIGFuZCAyRC1vbmx5ICovCi0JZHJtX3dhaXRsaXN0X3QJICB3YWl0bGlzdDsJLyoqPCBQZW5kaW5nIGJ1ZmZlcnMgKi8KKwlkcm1fY3R4X2ZsYWdzX3QgZmxhZ3M7CQkvKio8IENvbnRleHQgcHJlc2VydmluZyBhbmQgMkQtb25seSAqLworCWRybV93YWl0bGlzdF90IHdhaXRsaXN0OwkvKio8IFBlbmRpbmcgYnVmZmVycyAqLwogCXdhaXRfcXVldWVfaGVhZF90IGZsdXNoX3F1ZXVlOwkvKio8IFByb2Nlc3NlcyB3YWl0aW5nIHVudGlsIGZsdXNoICovCiB9IGRybV9xdWV1ZV90OwogCkBAIC00MjUsMTAgKzQyMSwxMCBAQAogICogTG9jayBkYXRhLgogICovCiB0eXBlZGVmIHN0cnVjdCBkcm1fbG9ja19kYXRhIHsKLQlkcm1faHdfbG9ja190CSAgKmh3X2xvY2s7CS8qKjwgSGFyZHdhcmUgbG9jayAqLwotCXN0cnVjdCBmaWxlICAgICAgICpmaWxwOwkvKio8IEZpbGUgZGVzY3Igb2YgbG9jayBob2xkZXIgKDA9a2VybmVsKSAqLworCWRybV9od19sb2NrX3QgKmh3X2xvY2s7CQkvKio8IEhhcmR3YXJlIGxvY2sgKi8KKwlzdHJ1Y3QgZmlsZSAqZmlscDsJCS8qKjwgRmlsZSBkZXNjciBvZiBsb2NrIGhvbGRlciAoMD1rZXJuZWwpICovCiAJd2FpdF9xdWV1ZV9oZWFkX3QgbG9ja19xdWV1ZTsJLyoqPCBRdWV1ZSBvZiBibG9ja2VkIHByb2Nlc3NlcyAqLwotCXVuc2lnbmVkIGxvbmcJICBsb2NrX3RpbWU7CS8qKjwgVGltZSBvZiBsYXN0IGxvY2sgaW4gamlmZmllcyAqLworCXVuc2lnbmVkIGxvbmcgbG9ja190aW1lOwkvKio8IFRpbWUgb2YgbGFzdCBsb2NrIGluIGppZmZpZXMgKi8KIH0gZHJtX2xvY2tfZGF0YV90OwogCiAvKioKQEAgLTQzNiwyOSArNDMyLDI5IEBACiAgKi8KIHR5cGVkZWYgc3RydWN0IGRybV9kZXZpY2VfZG1hIHsKIAotCWRybV9idWZfZW50cnlfdAkgIGJ1ZnNbRFJNX01BWF9PUkRFUisxXTsJLyoqPCBidWZmZXJzLCBncm91cGVkIGJ5IHRoZWlyIHNpemUgb3JkZXIgKi8KLQlpbnQJCSAgYnVmX2NvdW50OwkvKio8IHRvdGFsIG51bWJlciBvZiBidWZmZXJzICovCi0JZHJtX2J1Zl90CSAgKipidWZsaXN0OwkvKio8IFZlY3RvciBvZiBwb2ludGVycyBpbnRvIGRybV9kZXZpY2VfZG1hOjpidWZzICovCi0JaW50CQkgIHNlZ19jb3VudDsKLQlpbnQJCSAgcGFnZV9jb3VudDsJLyoqPCBudW1iZXIgb2YgcGFnZXMgKi8KLQl1bnNpZ25lZCBsb25nCSAgKnBhZ2VsaXN0OwkvKio8IHBhZ2UgbGlzdCAqLwotCXVuc2lnbmVkIGxvbmcJICBieXRlX2NvdW50OworCWRybV9idWZfZW50cnlfdCBidWZzW0RSTV9NQVhfT1JERVIgKyAxXTsJLyoqPCBidWZmZXJzLCBncm91cGVkIGJ5IHRoZWlyIHNpemUgb3JkZXIgKi8KKwlpbnQgYnVmX2NvdW50OwkJCS8qKjwgdG90YWwgbnVtYmVyIG9mIGJ1ZmZlcnMgKi8KKwlkcm1fYnVmX3QgKipidWZsaXN0OwkJLyoqPCBWZWN0b3Igb2YgcG9pbnRlcnMgaW50byBkcm1fZGV2aWNlX2RtYTo6YnVmcyAqLworCWludCBzZWdfY291bnQ7CisJaW50IHBhZ2VfY291bnQ7CQkJLyoqPCBudW1iZXIgb2YgcGFnZXMgKi8KKwl1bnNpZ25lZCBsb25nICpwYWdlbGlzdDsJLyoqPCBwYWdlIGxpc3QgKi8KKwl1bnNpZ25lZCBsb25nIGJ5dGVfY291bnQ7CiAJZW51bSB7CiAJCV9EUk1fRE1BX1VTRV9BR1AgPSAweDAxLAotCQlfRFJNX0RNQV9VU0VfU0cgID0gMHgwMiwKLQkJX0RSTV9ETUFfVVNFX0ZCICA9IDB4MDQKKwkJX0RSTV9ETUFfVVNFX1NHID0gMHgwMiwKKwkJX0RSTV9ETUFfVVNFX0ZCID0gMHgwNAogCX0gZmxhZ3M7CiAKIH0gZHJtX2RldmljZV9kbWFfdDsKIAotLyoqIAorLyoqCiAgKiBBR1AgbWVtb3J5IGVudHJ5LiAgU3RvcmVkIGFzIGEgZG91Ymx5IGxpbmtlZCBsaXN0LgogICovCiB0eXBlZGVmIHN0cnVjdCBkcm1fYWdwX21lbSB7Ci0JdW5zaWduZWQgbG9uZyAgICAgIGhhbmRsZTsJLyoqPCBoYW5kbGUgKi8KLQlEUk1fQUdQX01FTSAgICAgICAgKm1lbW9yeTsJCi0JdW5zaWduZWQgbG9uZyAgICAgIGJvdW5kOwkvKio8IGFkZHJlc3MgKi8KLQlpbnQgICAgICAgICAgICAgICAgcGFnZXM7CisJdW5zaWduZWQgbG9uZyBoYW5kbGU7CQkvKio8IGhhbmRsZSAqLworCURSTV9BR1BfTUVNICptZW1vcnk7CisJdW5zaWduZWQgbG9uZyBib3VuZDsJCS8qKjwgYWRkcmVzcyAqLworCWludCBwYWdlczsKIAlzdHJ1Y3QgZHJtX2FncF9tZW0gKnByZXY7CS8qKjwgcHJldmlvdXMgZW50cnkgKi8KIAlzdHJ1Y3QgZHJtX2FncF9tZW0gKm5leHQ7CS8qKjwgbmV4dCBlbnRyeSAqLwogfSBkcm1fYWdwX21lbV90OwpAQCAtNDY5LDMxICs0NjUsMzEgQEAKICAqIFxzYSBkcm1fYWdwX2luaXQoKSBhbmQgZHJtX2RldmljZTo6YWdwLgogICovCiB0eXBlZGVmIHN0cnVjdCBkcm1fYWdwX2hlYWQgewotCURSTV9BR1BfS0VSTiAgICAgICBhZ3BfaW5mbzsJLyoqPCBBR1AgZGV2aWNlIGluZm9ybWF0aW9uICovCi0JZHJtX2FncF9tZW1fdCAgICAgICptZW1vcnk7CS8qKjwgbWVtb3J5IGVudHJpZXMgKi8KLQl1bnNpZ25lZCBsb25nICAgICAgbW9kZTsJLyoqPCBBR1AgbW9kZSAqLwotCXN0cnVjdCBhZ3BfYnJpZGdlX2RhdGEgICpicmlkZ2U7Ci0JaW50ICAgICAgICAgICAgICAgIGVuYWJsZWQ7CS8qKjwgd2hldGhlciB0aGUgQUdQIGJ1cyBhcyBiZWVuIGVuYWJsZWQgKi8KLQlpbnQgICAgICAgICAgICAgICAgYWNxdWlyZWQ7CS8qKjwgd2hldGhlciB0aGUgQUdQIGRldmljZSBoYXMgYmVlbiBhY3F1aXJlZCAqLwotCXVuc2lnbmVkIGxvbmcgICAgICBiYXNlOwotICAgCWludCAJCSAgIGFncF9tdHJyOwotCWludAkJICAgY2FudF91c2VfYXBlcnR1cmU7Ci0JdW5zaWduZWQgbG9uZwkgICBwYWdlX21hc2s7CisJRFJNX0FHUF9LRVJOIGFncF9pbmZvOwkJLyoqPCBBR1AgZGV2aWNlIGluZm9ybWF0aW9uICovCisJZHJtX2FncF9tZW1fdCAqbWVtb3J5OwkJLyoqPCBtZW1vcnkgZW50cmllcyAqLworCXVuc2lnbmVkIGxvbmcgbW9kZTsJCS8qKjwgQUdQIG1vZGUgKi8KKwlzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICpicmlkZ2U7CisJaW50IGVuYWJsZWQ7CQkJLyoqPCB3aGV0aGVyIHRoZSBBR1AgYnVzIGFzIGJlZW4gZW5hYmxlZCAqLworCWludCBhY3F1aXJlZDsJCQkvKio8IHdoZXRoZXIgdGhlIEFHUCBkZXZpY2UgaGFzIGJlZW4gYWNxdWlyZWQgKi8KKwl1bnNpZ25lZCBsb25nIGJhc2U7CisJaW50IGFncF9tdHJyOworCWludCBjYW50X3VzZV9hcGVydHVyZTsKKwl1bnNpZ25lZCBsb25nIHBhZ2VfbWFzazsKIH0gZHJtX2FncF9oZWFkX3Q7CiAKIC8qKgogICogU2NhdHRlci1nYXRoZXIgbWVtb3J5LgogICovCiB0eXBlZGVmIHN0cnVjdCBkcm1fc2dfbWVtIHsKLQl1bnNpZ25lZCBsb25nICAgaGFuZGxlOwotCXZvaWQgICAgICAgICAgICAqdmlydHVhbDsKLQlpbnQgICAgICAgICAgICAgcGFnZXM7Ci0Jc3RydWN0IHBhZ2UgICAgICoqcGFnZWxpc3Q7Ci0JZG1hX2FkZHJfdAkqYnVzYWRkcjsKKwl1bnNpZ25lZCBsb25nIGhhbmRsZTsKKwl2b2lkICp2aXJ0dWFsOworCWludCBwYWdlczsKKwlzdHJ1Y3QgcGFnZSAqKnBhZ2VsaXN0OworCWRtYV9hZGRyX3QgKmJ1c2FkZHI7CiB9IGRybV9zZ19tZW1fdDsKIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX3NpZ2RhdGEgewotCWludCAgICAgICAgICAgY29udGV4dDsKKwlpbnQgY29udGV4dDsKIAlkcm1faHdfbG9ja190ICpsb2NrOwogfSBkcm1fc2lnZGF0YV90OwogCkBAIC01MDcsOCArNTAzLDggQEAKICAqIE1hcHBpbmdzIGxpc3QKICAqLwogdHlwZWRlZiBzdHJ1Y3QgZHJtX21hcF9saXN0IHsKLQlzdHJ1Y3QgbGlzdF9oZWFkCWhlYWQ7CS8qKjwgbGlzdCBoZWFkICovCi0JZHJtX21hcF90CQkqbWFwOwkvKio8IG1hcHBpbmcgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGhlYWQ7CQkvKio8IGxpc3QgaGVhZCAqLworCWRybV9tYXBfdCAqbWFwOwkJCS8qKjwgbWFwcGluZyAqLwogCXVuc2lnbmVkIGludCB1c2VyX3Rva2VuOwogfSBkcm1fbWFwX2xpc3RfdDsKIApAQCAtNTE4LDIwICs1MTQsMTggQEAKICAqIENvbnRleHQgaGFuZGxlIGxpc3QKICAqLwogdHlwZWRlZiBzdHJ1Y3QgZHJtX2N0eF9saXN0IHsKLQlzdHJ1Y3QgbGlzdF9oZWFkCWhlYWQ7ICAgLyoqPCBsaXN0IGhlYWQgKi8KLQlkcm1fY29udGV4dF90CQloYW5kbGU7IC8qKjwgY29udGV4dCBoYW5kbGUgKi8KLQlkcm1fZmlsZV90CQkqdGFnOyAgIC8qKjwgYXNzb2NpYXRlZCBmZCBwcml2YXRlIGRhdGEgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGhlYWQ7CQkvKio8IGxpc3QgaGVhZCAqLworCWRybV9jb250ZXh0X3QgaGFuZGxlOwkJLyoqPCBjb250ZXh0IGhhbmRsZSAqLworCWRybV9maWxlX3QgKnRhZzsJCS8qKjwgYXNzb2NpYXRlZCBmZCBwcml2YXRlIGRhdGEgKi8KIH0gZHJtX2N0eF9saXN0X3Q7CiAKLQogdHlwZWRlZiBzdHJ1Y3QgZHJtX3ZibF9zaWcgewotCXN0cnVjdCBsaXN0X2hlYWQJaGVhZDsKLQl1bnNpZ25lZCBpbnQJCXNlcXVlbmNlOwotCXN0cnVjdCBzaWdpbmZvCQlpbmZvOwotCXN0cnVjdCB0YXNrX3N0cnVjdAkqdGFzazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGhlYWQ7CisJdW5zaWduZWQgaW50IHNlcXVlbmNlOworCXN0cnVjdCBzaWdpbmZvIGluZm87CisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwogfSBkcm1fdmJsX3NpZ190OwogCi0KIC8qIGxvY2F0aW9uIG9mIEdBUlQgdGFibGUgKi8KICNkZWZpbmUgRFJNX0FUSV9HQVJUX01BSU4gMQogI2RlZmluZSBEUk1fQVRJX0dBUlRfRkIgICAyCkBAIC01NTEsMjQgKzU0NSwyNiBAQAogc3RydWN0IGRybV9kZXZpY2U7CiAKIHN0cnVjdCBkcm1fZHJpdmVyIHsKLQlpbnQgKCpwcmVpbml0KShzdHJ1Y3QgZHJtX2RldmljZSAqLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKLQl2b2lkICgqcHJlcmVsZWFzZSkoc3RydWN0IGRybV9kZXZpY2UgKiwgc3RydWN0IGZpbGUgKmZpbHApOwotCXZvaWQgKCpwcmV0YWtlZG93bikoc3RydWN0IGRybV9kZXZpY2UgKik7Ci0JaW50ICgqcG9zdGNsZWFudXApKHN0cnVjdCBkcm1fZGV2aWNlICopOwotCWludCAoKnByZXNldHVwKShzdHJ1Y3QgZHJtX2RldmljZSAqKTsKLQlpbnQgKCpwb3N0c2V0dXApKHN0cnVjdCBkcm1fZGV2aWNlICopOwotIAlpbnQgKCpkbWFfaW9jdGwpKCBEUk1fSU9DVExfQVJHUyApOwotCWludCAoKm9wZW5faGVscGVyKShzdHJ1Y3QgZHJtX2RldmljZSAqLCBkcm1fZmlsZV90ICopOwotCXZvaWQgKCpmcmVlX2ZpbHBfcHJpdikoc3RydWN0IGRybV9kZXZpY2UgKiwgZHJtX2ZpbGVfdCAqKTsKLQl2b2lkICgqcmVsZWFzZSkoc3RydWN0IGRybV9kZXZpY2UgKiwgc3RydWN0IGZpbGUgKmZpbHApOwotCXZvaWQgKCpkbWFfcmVhZHkpKHN0cnVjdCBkcm1fZGV2aWNlICopOwotCWludCAoKmRtYV9xdWllc2NlbnQpKHN0cnVjdCBkcm1fZGV2aWNlICopOwotCWludCAoKmNvbnRleHRfY3Rvcikoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNvbnRleHQpOwotIAlpbnQgKCpjb250ZXh0X2R0b3IpKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjb250ZXh0KTsKLSAJaW50ICgqa2VybmVsX2NvbnRleHRfc3dpdGNoKShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgb2xkLCBpbnQgbmV3KTsKLQl2b2lkICgqa2VybmVsX2NvbnRleHRfc3dpdGNoX3VubG9jaykoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgZHJtX2xvY2tfdCAqbG9jayk7Ci0JaW50ICgqdmJsYW5rX3dhaXQpKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCAqc2VxdWVuY2UpOwotCQorCWludCAoKnByZWluaXQpIChzdHJ1Y3QgZHJtX2RldmljZSAqLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKKwl2b2lkICgqcHJlcmVsZWFzZSkgKHN0cnVjdCBkcm1fZGV2aWNlICosIHN0cnVjdCBmaWxlICogZmlscCk7CisJdm9pZCAoKnByZXRha2Vkb3duKSAoc3RydWN0IGRybV9kZXZpY2UgKik7CisJaW50ICgqcG9zdGNsZWFudXApIChzdHJ1Y3QgZHJtX2RldmljZSAqKTsKKwlpbnQgKCpwcmVzZXR1cCkgKHN0cnVjdCBkcm1fZGV2aWNlICopOworCWludCAoKnBvc3RzZXR1cCkgKHN0cnVjdCBkcm1fZGV2aWNlICopOworCWludCAoKmRtYV9pb2N0bCkgKERSTV9JT0NUTF9BUkdTKTsKKwlpbnQgKCpvcGVuX2hlbHBlcikgKHN0cnVjdCBkcm1fZGV2aWNlICosIGRybV9maWxlX3QgKik7CisJdm9pZCAoKmZyZWVfZmlscF9wcml2KSAoc3RydWN0IGRybV9kZXZpY2UgKiwgZHJtX2ZpbGVfdCAqKTsKKwl2b2lkICgqcmVsZWFzZSkgKHN0cnVjdCBkcm1fZGV2aWNlICosIHN0cnVjdCBmaWxlICogZmlscCk7CisJdm9pZCAoKmRtYV9yZWFkeSkgKHN0cnVjdCBkcm1fZGV2aWNlICopOworCWludCAoKmRtYV9xdWllc2NlbnQpIChzdHJ1Y3QgZHJtX2RldmljZSAqKTsKKwlpbnQgKCpjb250ZXh0X2N0b3IpIChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgaW50IGNvbnRleHQpOworCWludCAoKmNvbnRleHRfZHRvcikgKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBpbnQgY29udGV4dCk7CisJaW50ICgqa2VybmVsX2NvbnRleHRfc3dpdGNoKSAoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIGludCBvbGQsCisJCQkJICAgICAgaW50IG5ldyk7CisJdm9pZCAoKmtlcm5lbF9jb250ZXh0X3N3aXRjaF91bmxvY2spIChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwKKwkJCQkJICAgICAgZHJtX2xvY2tfdCAqIGxvY2spOworCWludCAoKnZibGFua193YWl0KSAoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCAqc2VxdWVuY2UpOworCiAJLyoqCiAJICogQ2FsbGVkIGJ5IFxjIGRybV9kZXZpY2VfaXNfYWdwLiAgVHlwaWNhbGx5IHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGEKIAkgKiBjYXJkIGlzIHJlYWxseSBhdHRhY2hlZCB0byBBR1Agb3Igbm90LgpAQCAtNTgzLDE3ICs1NzksMTcgQEAKIAlpbnQgKCpkZXZpY2VfaXNfYWdwKSAoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOwogCiAJLyogdGhlc2UgaGF2ZSB0byBiZSBmaWxsZWQgaW4gKi8KLSAgCi0gCWludCAoKnBvc3Rpbml0KShzdHJ1Y3QgZHJtX2RldmljZSAqLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKLQlpcnFyZXR1cm5fdCAoKmlycV9oYW5kbGVyKSggRFJNX0lSUV9BUkdTICk7Ci0gCXZvaWQgKCppcnFfcHJlaW5zdGFsbCkoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Ci0gCXZvaWQgKCppcnFfcG9zdGluc3RhbGwpKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwotIAl2b2lkICgqaXJxX3VuaW5zdGFsbCkoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Ci0Jdm9pZCAoKnJlY2xhaW1fYnVmZmVycykoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGZpbGUgKmZpbHApOwotCXVuc2lnbmVkIGxvbmcgKCpnZXRfbWFwX29mcykoZHJtX21hcF90ICptYXApOwotCXVuc2lnbmVkIGxvbmcgKCpnZXRfcmVnX29mcykoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Ci0Jdm9pZCAoKnNldF92ZXJzaW9uKShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBkcm1fc2V0X3ZlcnNpb25fdCAqc3YpOwotIAlpbnQgKCp2ZXJzaW9uKShkcm1fdmVyc2lvbl90ICp2ZXJzaW9uKTsKKworCWludCAoKnBvc3Rpbml0KSAoc3RydWN0IGRybV9kZXZpY2UgKiwgdW5zaWduZWQgbG9uZyBmbGFncyk7CisJIGlycXJldHVybl90KCppcnFfaGFuZGxlcikgKERSTV9JUlFfQVJHUyk7CisJdm9pZCAoKmlycV9wcmVpbnN0YWxsKSAoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOworCXZvaWQgKCppcnFfcG9zdGluc3RhbGwpIChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7CisJdm9pZCAoKmlycV91bmluc3RhbGwpIChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7CisJdm9pZCAoKnJlY2xhaW1fYnVmZmVycykgKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBzdHJ1Y3QgZmlsZSAqIGZpbHApOworCXVuc2lnbmVkIGxvbmcgKCpnZXRfbWFwX29mcykgKGRybV9tYXBfdCAqIG1hcCk7CisJdW5zaWduZWQgbG9uZyAoKmdldF9yZWdfb2ZzKSAoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOworCXZvaWQgKCpzZXRfdmVyc2lvbikgKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBkcm1fc2V0X3ZlcnNpb25fdCAqIHN2KTsKKwlpbnQgKCp2ZXJzaW9uKSAoZHJtX3ZlcnNpb25fdCAqIHZlcnNpb24pOwogCXUzMiBkcml2ZXJfZmVhdHVyZXM7CiAJaW50IGRldl9wcml2X3NpemU7CiAJZHJtX2lvY3RsX2Rlc2NfdCAqaW9jdGxzOwpAQCAtNjIwLDEyOCArNjE2LDEyOSBAQAogICogbWF5IGNvbnRhaW4gbXVsdGlwbGUgaGVhZHMuCiAgKi8KIHR5cGVkZWYgc3RydWN0IGRybV9kZXZpY2UgewotCWNoYXIJCSAgKnVuaXF1ZTsJLyoqPCBVbmlxdWUgaWRlbnRpZmllcjogZS5nLiwgYnVzaWQgKi8KLQlpbnQJCSAgdW5pcXVlX2xlbjsJLyoqPCBMZW5ndGggb2YgdW5pcXVlIGZpZWxkICovCi0JY2hhcgkJICAqZGV2bmFtZTsJLyoqPCBGb3IgL3Byb2MvaW50ZXJydXB0cyAqLwotCWludAkJICBpZl92ZXJzaW9uOwkvKio8IEhpZ2hlc3QgaW50ZXJmYWNlIHZlcnNpb24gc2V0ICovCisJY2hhciAqdW5pcXVlOwkJCS8qKjwgVW5pcXVlIGlkZW50aWZpZXI6IGUuZy4sIGJ1c2lkICovCisJaW50IHVuaXF1ZV9sZW47CQkJLyoqPCBMZW5ndGggb2YgdW5pcXVlIGZpZWxkICovCisJY2hhciAqZGV2bmFtZTsJCQkvKio8IEZvciAvcHJvYy9pbnRlcnJ1cHRzICovCisJaW50IGlmX3ZlcnNpb247CQkJLyoqPCBIaWdoZXN0IGludGVyZmFjZSB2ZXJzaW9uIHNldCAqLwogCi0JaW50CQkgIGJsb2NrZWQ7CS8qKjwgQmxvY2tlZCBkdWUgdG8gVkMgc3dpdGNoPyAqLworCWludCBibG9ja2VkOwkJCS8qKjwgQmxvY2tlZCBkdWUgdG8gVkMgc3dpdGNoPyAqLwogCiAJLyoqIFxuYW1lIExvY2tzICovCi0JLypAeyovCi0Jc3BpbmxvY2tfdAkgIGNvdW50X2xvY2s7CS8qKjwgRm9yIGludXNlLCBkcm1fZGV2aWNlOjpvcGVuX2NvdW50LCBkcm1fZGV2aWNlOjpidWZfdXNlICovCi0Jc3RydWN0IHNlbWFwaG9yZSAgc3RydWN0X3NlbTsJLyoqPCBGb3Igb3RoZXJzICovCi0JLypAfSovCisJLypAeyAqLworCXNwaW5sb2NrX3QgY291bnRfbG9jazsJCS8qKjwgRm9yIGludXNlLCBkcm1fZGV2aWNlOjpvcGVuX2NvdW50LCBkcm1fZGV2aWNlOjpidWZfdXNlICovCisJc3RydWN0IHNlbWFwaG9yZSBzdHJ1Y3Rfc2VtOwkvKio8IEZvciBvdGhlcnMgKi8KKwkvKkB9ICovCiAKIAkvKiogXG5hbWUgVXNhZ2UgQ291bnRlcnMgKi8KLQkvKkB7Ki8KLQlpbnQJCSAgb3Blbl9jb3VudDsJLyoqPCBPdXRzdGFuZGluZyBmaWxlcyBvcGVuICovCi0JYXRvbWljX3QJICBpb2N0bF9jb3VudDsJLyoqPCBPdXRzdGFuZGluZyBJT0NUTHMgcGVuZGluZyAqLwotCWF0b21pY190CSAgdm1hX2NvdW50OwkvKio8IE91dHN0YW5kaW5nIHZtYSBhcmVhcyBvcGVuICovCi0JaW50CQkgIGJ1Zl91c2U7CS8qKjwgQnVmZmVycyBpbiB1c2UgLS0gY2Fubm90IGFsbG9jICovCi0JYXRvbWljX3QJICBidWZfYWxsb2M7CS8qKjwgQnVmZmVyIGFsbG9jYXRpb24gaW4gcHJvZ3Jlc3MgKi8KLQkvKkB9Ki8KKwkvKkB7ICovCisJaW50IG9wZW5fY291bnQ7CQkJLyoqPCBPdXRzdGFuZGluZyBmaWxlcyBvcGVuICovCisJYXRvbWljX3QgaW9jdGxfY291bnQ7CQkvKio8IE91dHN0YW5kaW5nIElPQ1RMcyBwZW5kaW5nICovCisJYXRvbWljX3Qgdm1hX2NvdW50OwkJLyoqPCBPdXRzdGFuZGluZyB2bWEgYXJlYXMgb3BlbiAqLworCWludCBidWZfdXNlOwkJCS8qKjwgQnVmZmVycyBpbiB1c2UgLS0gY2Fubm90IGFsbG9jICovCisJYXRvbWljX3QgYnVmX2FsbG9jOwkJLyoqPCBCdWZmZXIgYWxsb2NhdGlvbiBpbiBwcm9ncmVzcyAqLworCS8qQH0gKi8KIAogCS8qKiBcbmFtZSBQZXJmb3JtYW5jZSBjb3VudGVycyAqLwotCS8qQHsqLwotCXVuc2lnbmVkIGxvbmcgICAgIGNvdW50ZXJzOwotCWRybV9zdGF0X3R5cGVfdCAgIHR5cGVzWzE1XTsKLQlhdG9taWNfdCAgICAgICAgICBjb3VudHNbMTVdOwotCS8qQH0qLworCS8qQHsgKi8KKwl1bnNpZ25lZCBsb25nIGNvdW50ZXJzOworCWRybV9zdGF0X3R5cGVfdCB0eXBlc1sxNV07CisJYXRvbWljX3QgY291bnRzWzE1XTsKKwkvKkB9ICovCiAKIAkvKiogXG5hbWUgQXV0aGVudGljYXRpb24gKi8KLQkvKkB7Ki8KLQlkcm1fZmlsZV90CSAgKmZpbGVfZmlyc3Q7CS8qKjwgZmlsZSBsaXN0IGhlYWQgKi8KLQlkcm1fZmlsZV90CSAgKmZpbGVfbGFzdDsJLyoqPCBmaWxlIGxpc3QgdGFpbCAqLwotCWRybV9tYWdpY19oZWFkX3QgIG1hZ2ljbGlzdFtEUk1fSEFTSF9TSVpFXTsJLyoqPCBtYWdpYyBoYXNoIHRhYmxlICovCi0JLypAfSovCisJLypAeyAqLworCWRybV9maWxlX3QgKmZpbGVfZmlyc3Q7CQkvKio8IGZpbGUgbGlzdCBoZWFkICovCisJZHJtX2ZpbGVfdCAqZmlsZV9sYXN0OwkJLyoqPCBmaWxlIGxpc3QgdGFpbCAqLworCWRybV9tYWdpY19oZWFkX3QgbWFnaWNsaXN0W0RSTV9IQVNIX1NJWkVdOwkvKio8IG1hZ2ljIGhhc2ggdGFibGUgKi8KKwkvKkB9ICovCiAKIAkvKiogXG5hbWUgTWVtb3J5IG1hbmFnZW1lbnQgKi8KLQkvKkB7Ki8KLQlkcm1fbWFwX2xpc3RfdAkgICptYXBsaXN0OwkvKio8IExpbmtlZCBsaXN0IG9mIHJlZ2lvbnMgKi8KLQlpbnQJCSAgbWFwX2NvdW50OwkvKio8IE51bWJlciBvZiBtYXBwYWJsZSByZWdpb25zICovCisJLypAeyAqLworCWRybV9tYXBfbGlzdF90ICptYXBsaXN0OwkvKio8IExpbmtlZCBsaXN0IG9mIHJlZ2lvbnMgKi8KKwlpbnQgbWFwX2NvdW50OwkJCS8qKjwgTnVtYmVyIG9mIG1hcHBhYmxlIHJlZ2lvbnMgKi8KIAogCS8qKiBcbmFtZSBDb250ZXh0IGhhbmRsZSBtYW5hZ2VtZW50ICovCi0JLypAeyovCi0JZHJtX2N0eF9saXN0X3QJICAqY3R4bGlzdDsJLyoqPCBMaW5rZWQgbGlzdCBvZiBjb250ZXh0IGhhbmRsZXMgKi8KLQlpbnQJCSAgY3R4X2NvdW50OwkvKio8IE51bWJlciBvZiBjb250ZXh0IGhhbmRsZXMgKi8KLQlzdHJ1Y3Qgc2VtYXBob3JlICBjdHhsaXN0X3NlbTsJLyoqPCBGb3IgY3R4bGlzdCAqLworCS8qQHsgKi8KKwlkcm1fY3R4X2xpc3RfdCAqY3R4bGlzdDsJLyoqPCBMaW5rZWQgbGlzdCBvZiBjb250ZXh0IGhhbmRsZXMgKi8KKwlpbnQgY3R4X2NvdW50OwkJCS8qKjwgTnVtYmVyIG9mIGNvbnRleHQgaGFuZGxlcyAqLworCXN0cnVjdCBzZW1hcGhvcmUgY3R4bGlzdF9zZW07CS8qKjwgRm9yIGN0eGxpc3QgKi8KIAotCWRybV9tYXBfdAkgICoqY29udGV4dF9zYXJlYXM7IC8qKjwgcGVyLWNvbnRleHQgU0FSRUEncyAqLwotCWludAkJICBtYXhfY29udGV4dDsKKwlkcm1fbWFwX3QgKipjb250ZXh0X3NhcmVhczsJICAgIC8qKjwgcGVyLWNvbnRleHQgU0FSRUEncyAqLworCWludCBtYXhfY29udGV4dDsKIAotCWRybV92bWFfZW50cnlfdAkgICp2bWFsaXN0OwkvKio8IExpc3Qgb2Ygdm1hcyAoZm9yIGRlYnVnZ2luZykgKi8KLQlkcm1fbG9ja19kYXRhX3QJICBsb2NrOwkJLyoqPCBJbmZvcm1hdGlvbiBvbiBoYXJkd2FyZSBsb2NrICovCi0JLypAfSovCisJZHJtX3ZtYV9lbnRyeV90ICp2bWFsaXN0OwkvKio8IExpc3Qgb2Ygdm1hcyAoZm9yIGRlYnVnZ2luZykgKi8KKwlkcm1fbG9ja19kYXRhX3QgbG9jazsJCS8qKjwgSW5mb3JtYXRpb24gb24gaGFyZHdhcmUgbG9jayAqLworCS8qQH0gKi8KIAogCS8qKiBcbmFtZSBETUEgcXVldWVzIChjb250ZXh0cykgKi8KLQkvKkB7Ki8KLQlpbnQJCSAgcXVldWVfY291bnQ7CS8qKjwgTnVtYmVyIG9mIGFjdGl2ZSBETUEgcXVldWVzICovCi0JaW50CQkgIHF1ZXVlX3Jlc2VydmVkOyAvKio8IE51bWJlciBvZiByZXNlcnZlZCBETUEgcXVldWVzICovCi0JaW50CQkgIHF1ZXVlX3Nsb3RzOwkvKio8IEFjdHVhbCBsZW5ndGggb2YgcXVldWVsaXN0ICovCi0JZHJtX3F1ZXVlX3QJICAqKnF1ZXVlbGlzdDsJLyoqPCBWZWN0b3Igb2YgcG9pbnRlcnMgdG8gRE1BIHF1ZXVlcyAqLwotCWRybV9kZXZpY2VfZG1hX3QgICpkbWE7CQkvKio8IE9wdGlvbmFsIHBvaW50ZXIgZm9yIERNQSBzdXBwb3J0ICovCi0JLypAfSovCisJLypAeyAqLworCWludCBxdWV1ZV9jb3VudDsJCS8qKjwgTnVtYmVyIG9mIGFjdGl2ZSBETUEgcXVldWVzICovCisJaW50IHF1ZXVlX3Jlc2VydmVkOwkJICAvKio8IE51bWJlciBvZiByZXNlcnZlZCBETUEgcXVldWVzICovCisJaW50IHF1ZXVlX3Nsb3RzOwkJLyoqPCBBY3R1YWwgbGVuZ3RoIG9mIHF1ZXVlbGlzdCAqLworCWRybV9xdWV1ZV90ICoqcXVldWVsaXN0OwkvKio8IFZlY3RvciBvZiBwb2ludGVycyB0byBETUEgcXVldWVzICovCisJZHJtX2RldmljZV9kbWFfdCAqZG1hOwkJLyoqPCBPcHRpb25hbCBwb2ludGVyIGZvciBETUEgc3VwcG9ydCAqLworCS8qQH0gKi8KIAogCS8qKiBcbmFtZSBDb250ZXh0IHN1cHBvcnQgKi8KLQkvKkB7Ki8KLQlpbnQJCSAgaXJxOwkJLyoqPCBJbnRlcnJ1cHQgdXNlZCBieSBib2FyZCAqLwotCWludAkJICBpcnFfZW5hYmxlZDsJLyoqPCBUcnVlIGlmIGlycSBoYW5kbGVyIGlzIGVuYWJsZWQgKi8KKwkvKkB7ICovCisJaW50IGlycTsJCQkvKio8IEludGVycnVwdCB1c2VkIGJ5IGJvYXJkICovCisJaW50IGlycV9lbmFibGVkOwkJLyoqPCBUcnVlIGlmIGlycSBoYW5kbGVyIGlzIGVuYWJsZWQgKi8KIAlfX3ZvbGF0aWxlX18gbG9uZyBjb250ZXh0X2ZsYWc7CS8qKjwgQ29udGV4dCBzd2FwcGluZyBmbGFnICovCiAJX192b2xhdGlsZV9fIGxvbmcgaW50ZXJydXB0X2ZsYWc7IC8qKjwgSW50ZXJydXB0aW9uIGhhbmRsZXIgZmxhZyAqLwogCV9fdm9sYXRpbGVfXyBsb25nIGRtYV9mbGFnOwkvKio8IERNQSBkaXNwYXRjaCBmbGFnICovCiAJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CS8qKjwgVGltZXIgZm9yIGRlbGF5aW5nIGN0eCBzd2l0Y2ggKi8KLQl3YWl0X3F1ZXVlX2hlYWRfdCBjb250ZXh0X3dhaXQ7IC8qKjwgUHJvY2Vzc2VzIHdhaXRpbmcgb24gY3R4IHN3aXRjaCAqLwotCWludAkJICBsYXN0X2NoZWNrZWQ7CS8qKjwgTGFzdCBjb250ZXh0IGNoZWNrZWQgZm9yIERNQSAqLwotCWludAkJICBsYXN0X2NvbnRleHQ7CS8qKjwgTGFzdCBjdXJyZW50IGNvbnRleHQgKi8KLQl1bnNpZ25lZCBsb25nCSAgbGFzdF9zd2l0Y2g7CS8qKjwgamlmZmllcyBhdCBsYXN0IGNvbnRleHQgc3dpdGNoICovCi0JLypAfSovCi0JCi0Jc3RydWN0IHdvcmtfc3RydWN0CXdvcms7CisJd2FpdF9xdWV1ZV9oZWFkX3QgY29udGV4dF93YWl0OwkvKio8IFByb2Nlc3NlcyB3YWl0aW5nIG9uIGN0eCBzd2l0Y2ggKi8KKwlpbnQgbGFzdF9jaGVja2VkOwkJLyoqPCBMYXN0IGNvbnRleHQgY2hlY2tlZCBmb3IgRE1BICovCisJaW50IGxhc3RfY29udGV4dDsJCS8qKjwgTGFzdCBjdXJyZW50IGNvbnRleHQgKi8KKwl1bnNpZ25lZCBsb25nIGxhc3Rfc3dpdGNoOwkvKio8IGppZmZpZXMgYXQgbGFzdCBjb250ZXh0IHN3aXRjaCAqLworCS8qQH0gKi8KKworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwogCS8qKiBcbmFtZSBWQkxBTksgSVJRIHN1cHBvcnQgKi8KLQkvKkB7Ki8KKwkvKkB7ICovCiAKLSAgIAl3YWl0X3F1ZXVlX2hlYWRfdCB2YmxfcXVldWU7CS8qKjwgVkJMQU5LIHdhaXQgcXVldWUgKi8KLSAgIAlhdG9taWNfdCAgICAgICAgICB2YmxfcmVjZWl2ZWQ7Ci0Jc3BpbmxvY2tfdCAgICAgICAgdmJsX2xvY2s7Ci0JZHJtX3ZibF9zaWdfdCAgICAgdmJsX3NpZ3M7CS8qKjwgc2lnbmFsIGxpc3QgdG8gc2VuZCBvbiBWQkxBTksgKi8KLQl1bnNpZ25lZCBpbnQgICAgICB2YmxfcGVuZGluZzsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB2YmxfcXVldWU7CS8qKjwgVkJMQU5LIHdhaXQgcXVldWUgKi8KKwlhdG9taWNfdCB2YmxfcmVjZWl2ZWQ7CisJc3BpbmxvY2tfdCB2YmxfbG9jazsKKwlkcm1fdmJsX3NpZ190IHZibF9zaWdzOwkJLyoqPCBzaWduYWwgbGlzdCB0byBzZW5kIG9uIFZCTEFOSyAqLworCXVuc2lnbmVkIGludCB2YmxfcGVuZGluZzsKIAotCS8qQH0qLwotCWN5Y2xlc190CSAgY3R4X3N0YXJ0OwotCWN5Y2xlc190CSAgbGNrX3N0YXJ0OworCS8qQH0gKi8KKwljeWNsZXNfdCBjdHhfc3RhcnQ7CisJY3ljbGVzX3QgbGNrX3N0YXJ0OwogCi0JY2hhcgkJICBidWZbRFJNX0JTWl07IC8qKjwgT3V0cHV0IGJ1ZmZlciAqLwotCWNoYXIJCSAgKmJ1Zl9ycDsJLyoqPCBSZWFkIHBvaW50ZXIgKi8KLQljaGFyCQkgICpidWZfd3A7CS8qKjwgV3JpdGUgcG9pbnRlciAqLwotCWNoYXIJCSAgKmJ1Zl9lbmQ7CS8qKjwgRW5kIHBvaW50ZXIgKi8KKwljaGFyIGJ1ZltEUk1fQlNaXTsJCS8qKjwgT3V0cHV0IGJ1ZmZlciAqLworCWNoYXIgKmJ1Zl9ycDsJCQkvKio8IFJlYWQgcG9pbnRlciAqLworCWNoYXIgKmJ1Zl93cDsJCQkvKio8IFdyaXRlIHBvaW50ZXIgKi8KKwljaGFyICpidWZfZW5kOwkJCS8qKjwgRW5kIHBvaW50ZXIgKi8KIAlzdHJ1Y3QgZmFzeW5jX3N0cnVjdCAqYnVmX2FzeW5jOy8qKjwgUHJvY2Vzc2VzIHdhaXRpbmcgZm9yIFNJR0lPICovCiAJd2FpdF9xdWV1ZV9oZWFkX3QgYnVmX3JlYWRlcnM7CS8qKjwgUHJvY2Vzc2VzIHdhaXRpbmcgdG8gcmVhZCAqLwogCXdhaXRfcXVldWVfaGVhZF90IGJ1Zl93cml0ZXJzOwkvKio8IFByb2Nlc3NlcyB3YWl0aW5nIHRvIGN0eCBzd2l0Y2ggKi8KIAotCWRybV9hZ3BfaGVhZF90ICAgICphZ3A7CS8qKjwgQUdQIGRhdGEgKi8KKwlkcm1fYWdwX2hlYWRfdCAqYWdwOwkvKio8IEFHUCBkYXRhICovCiAKLQlzdHJ1Y3QgcGNpX2RldiAgICAqcGRldjsJLyoqPCBQQ0kgZGV2aWNlIHN0cnVjdHVyZSAqLwotCWludCAgICAgICAgICAgICAgIHBjaV9kb21haW47CS8qKjwgUENJIGJ1cyBkb21haW4gbnVtYmVyICovCi0JaW50ICAgICAgICAgICAgICAgcGNpX2J1czsJLyoqPCBQQ0kgYnVzIG51bWJlciAqLwotCWludCAgICAgICAgICAgICAgIHBjaV9zbG90OwkvKio8IFBDSSBzbG90IG51bWJlciAqLwotCWludCAgICAgICAgICAgICAgIHBjaV9mdW5jOwkvKio8IFBDSSBmdW5jdGlvbiBudW1iZXIgKi8KKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsJCS8qKjwgUENJIGRldmljZSBzdHJ1Y3R1cmUgKi8KKwlpbnQgcGNpX2RvbWFpbjsJCQkvKio8IFBDSSBidXMgZG9tYWluIG51bWJlciAqLworCWludCBwY2lfYnVzOwkJCS8qKjwgUENJIGJ1cyBudW1iZXIgKi8KKwlpbnQgcGNpX3Nsb3Q7CQkJLyoqPCBQQ0kgc2xvdCBudW1iZXIgKi8KKwlpbnQgcGNpX2Z1bmM7CQkJLyoqPCBQQ0kgZnVuY3Rpb24gbnVtYmVyICovCiAjaWZkZWYgX19hbHBoYV9fCiAJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlOwogI2VuZGlmCi0JZHJtX3NnX21lbV90ICAgICAgKnNnOyAgLyoqPCBTY2F0dGVyIGdhdGhlciBtZW1vcnkgKi8KLQl1bnNpZ25lZCBsb25nICAgICAqY3R4X2JpdG1hcDsJLyoqPCBjb250ZXh0IGJpdG1hcCAqLwotCXZvaWQJCSAgKmRldl9wcml2YXRlOyAvKio8IGRldmljZSBwcml2YXRlIGRhdGEgKi8KLQlkcm1fc2lnZGF0YV90ICAgICBzaWdkYXRhOyAvKio8IEZvciBibG9ja19hbGxfc2lnbmFscyAqLwotCXNpZ3NldF90ICAgICAgICAgIHNpZ21hc2s7CisJZHJtX3NnX21lbV90ICpzZzsJLyoqPCBTY2F0dGVyIGdhdGhlciBtZW1vcnkgKi8KKwl1bnNpZ25lZCBsb25nICpjdHhfYml0bWFwOwkvKio8IGNvbnRleHQgYml0bWFwICovCisJdm9pZCAqZGV2X3ByaXZhdGU7CQkvKio8IGRldmljZSBwcml2YXRlIGRhdGEgKi8KKwlkcm1fc2lnZGF0YV90IHNpZ2RhdGE7CSAgIC8qKjwgRm9yIGJsb2NrX2FsbF9zaWduYWxzICovCisJc2lnc2V0X3Qgc2lnbWFzazsKIAotCXN0cnVjdCAgICAgICAgICAgIGRybV9kcml2ZXIgKmRyaXZlcjsKLQlkcm1fbG9jYWxfbWFwX3QgICAqYWdwX2J1ZmZlcl9tYXA7CisJc3RydWN0IGRybV9kcml2ZXIgKmRyaXZlcjsKKwlkcm1fbG9jYWxfbWFwX3QgKmFncF9idWZmZXJfbWFwOwogCXVuc2lnbmVkIGludCBhZ3BfYnVmZmVyX3Rva2VuOwogCWRybV9oZWFkX3QgcHJpbWFyeTsJCS8qKjwgcHJpbWFyeSBzY3JlZW4gaGVhZCAqLwogfSBkcm1fZGV2aWNlX3Q7CiAKLXN0YXRpYyBfX2lubGluZV9fIGludCBkcm1fY29yZV9jaGVja19mZWF0dXJlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBmZWF0dXJlKQorc3RhdGljIF9faW5saW5lX18gaW50IGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJICAgICBpbnQgZmVhdHVyZSkKIHsKIAlyZXR1cm4gKChkZXYtPmRyaXZlci0+ZHJpdmVyX2ZlYXR1cmVzICYgZmVhdHVyZSkgPyAxIDogMCk7CiB9CkBAIC03NDksNyArNzQ2LDcgQEAKICNpZiBfX09TX0hBU19BR1AKIHN0YXRpYyBpbmxpbmUgaW50IGRybV9jb3JlX2hhc19BR1Aoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKLSAgcmV0dXJuIGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfVVNFX0FHUCk7CisJcmV0dXJuIGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfVVNFX0FHUCk7CiB9CiAjZWxzZQogI2RlZmluZSBkcm1fY29yZV9oYXNfQUdQKGRldikgKDApCkBAIC03NTgsNyArNzU1LDcgQEAKICNpZiBfX09TX0hBU19NVFJSCiBzdGF0aWMgaW5saW5lIGludCBkcm1fY29yZV9oYXNfTVRSUihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewotICByZXR1cm4gZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9VU0VfTVRSUik7CisJcmV0dXJuIGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfVVNFX01UUlIpOwogfQogI2Vsc2UKICNkZWZpbmUgZHJtX2NvcmVfaGFzX01UUlIoZGV2KSAoMCkKQEAgLTc2OSwyMzAgKzc2NiwyMjkgQEAKIC8qQHsqLwogCiAJCQkJLyogTWlzYy4gc3VwcG9ydCAoZHJtX2luaXQuaCkgKi8KLWV4dGVybiBpbnQJICAgICBkcm1fZmxhZ3M7Ci1leHRlcm4gdm9pZAkgICAgIGRybV9wYXJzZV9vcHRpb25zKCBjaGFyICpzICk7Ci1leHRlcm4gaW50ICAgICAgICAgICBkcm1fY3B1X3ZhbGlkKCB2b2lkICk7CitleHRlcm4gaW50IGRybV9mbGFnczsKK2V4dGVybiB2b2lkIGRybV9wYXJzZV9vcHRpb25zKGNoYXIgKnMpOworZXh0ZXJuIGludCBkcm1fY3B1X3ZhbGlkKHZvaWQpOwogCiAJCQkJLyogRHJpdmVyIHN1cHBvcnQgKGRybV9kcnYuaCkgKi8KLWV4dGVybiBpbnQgICAgICAgICAgIGRybV9pbml0KHN0cnVjdCBkcm1fZHJpdmVyICpkcml2ZXIpOwotZXh0ZXJuIHZvaWQgICAgICAgICAgZHJtX2V4aXQoc3RydWN0IGRybV9kcml2ZXIgKmRyaXZlcik7Ci1leHRlcm4gaW50ICAgICAgICAgICBkcm1faW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCi0JCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwotZXh0ZXJuIGxvbmcJICAgICBkcm1fY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLAotCQkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKLWV4dGVybiBpbnQgICAgICAgICAgIGRybV90YWtlZG93bihkcm1fZGV2aWNlX3QgKiBkZXYpOworZXh0ZXJuIGludCBkcm1faW5pdChzdHJ1Y3QgZHJtX2RyaXZlciAqZHJpdmVyKTsKK2V4dGVybiB2b2lkIGRybV9leGl0KHN0cnVjdCBkcm1fZHJpdmVyICpkcml2ZXIpOworZXh0ZXJuIGludCBkcm1faW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCisJCSAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworZXh0ZXJuIGxvbmcgZHJtX2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJCSAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworZXh0ZXJuIGludCBkcm1fdGFrZWRvd24oZHJtX2RldmljZV90ICogZGV2KTsKIAogCQkJCS8qIERldmljZSBzdXBwb3J0IChkcm1fZm9wcy5oKSAqLwotZXh0ZXJuIGludCAgICAgICAgICAgZHJtX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApOwotZXh0ZXJuIGludCAgICAgICAgICAgZHJtX3N0dWJfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCk7Ci1leHRlcm4gaW50CSAgICAgZHJtX2ZsdXNoKHN0cnVjdCBmaWxlICpmaWxwKTsKLWV4dGVybiBpbnQJICAgICBkcm1fZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKmZpbHAsIGludCBvbik7Ci1leHRlcm4gaW50ICAgICAgICAgICBkcm1fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCk7CitleHRlcm4gaW50IGRybV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKTsKK2V4dGVybiBpbnQgZHJtX3N0dWJfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCk7CitleHRlcm4gaW50IGRybV9mbHVzaChzdHJ1Y3QgZmlsZSAqZmlscCk7CitleHRlcm4gaW50IGRybV9mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlscCwgaW50IG9uKTsKK2V4dGVybiBpbnQgZHJtX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApOwogCiAJCQkJLyogTWFwcGluZyBzdXBwb3J0IChkcm1fdm0uaCkgKi8KLWV4dGVybiBpbnQJICAgICBkcm1fbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwotZXh0ZXJuIHVuc2lnbmVkIGludCAgZHJtX3BvbGwoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqd2FpdCk7CitleHRlcm4gaW50IGRybV9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CitleHRlcm4gdW5zaWduZWQgaW50IGRybV9wb2xsKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpOwogCiAJCQkJLyogTWVtb3J5IG1hbmFnZW1lbnQgc3VwcG9ydCAoZHJtX21lbW9yeS5oKSAqLwogI2luY2x1ZGUgImRybV9tZW1vcnkuaCIKLWV4dGVybiB2b2lkCSAgICAgZHJtX21lbV9pbml0KHZvaWQpOwotZXh0ZXJuIGludAkgICAgIGRybV9tZW1faW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAotCQkJCSAgIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSk7Ci1leHRlcm4gdm9pZAkgICAgICpkcm1fcmVhbGxvYyh2b2lkICpvbGRwdCwgc2l6ZV90IG9sZHNpemUsIHNpemVfdCBzaXplLAotCQkJCSAgIGludCBhcmVhKTsKK2V4dGVybiB2b2lkIGRybV9tZW1faW5pdCh2b2lkKTsKK2V4dGVybiBpbnQgZHJtX21lbV9pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCisJCQlpbnQgcmVxdWVzdCwgaW50ICplb2YsIHZvaWQgKmRhdGEpOworZXh0ZXJuIHZvaWQgKmRybV9yZWFsbG9jKHZvaWQgKm9sZHB0LCBzaXplX3Qgb2xkc2l6ZSwgc2l6ZV90IHNpemUsIGludCBhcmVhKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIGRybV9hbGxvY19wYWdlcyhpbnQgb3JkZXIsIGludCBhcmVhKTsKLWV4dGVybiB2b2lkCSAgICAgZHJtX2ZyZWVfcGFnZXModW5zaWduZWQgbG9uZyBhZGRyZXNzLCBpbnQgb3JkZXIsCi0JCQkJICAgICBpbnQgYXJlYSk7Ci1leHRlcm4gdm9pZAkgICAgICpkcm1faW9yZW1hcCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLCBkcm1fZGV2aWNlX3QgKmRldik7Ci1leHRlcm4gdm9pZAkgICAgICpkcm1faW9yZW1hcF9ub2NhY2hlKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsCi0JCQkJCSAgIGRybV9kZXZpY2VfdCAqZGV2KTsKLWV4dGVybiB2b2lkCSAgICAgZHJtX2lvcmVtYXBmcmVlKHZvaWQgKnB0LCB1bnNpZ25lZCBsb25nIHNpemUsIGRybV9kZXZpY2VfdCAqZGV2KTsKK2V4dGVybiB2b2lkIGRybV9mcmVlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgaW50IG9yZGVyLCBpbnQgYXJlYSk7CitleHRlcm4gdm9pZCAqZHJtX2lvcmVtYXAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCSBkcm1fZGV2aWNlX3QgKiBkZXYpOworZXh0ZXJuIHZvaWQgKmRybV9pb3JlbWFwX25vY2FjaGUodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCQkgZHJtX2RldmljZV90ICogZGV2KTsKK2V4dGVybiB2b2lkIGRybV9pb3JlbWFwZnJlZSh2b2lkICpwdCwgdW5zaWduZWQgbG9uZyBzaXplLCBkcm1fZGV2aWNlX3QgKiBkZXYpOwogCi1leHRlcm4gRFJNX0FHUF9NRU0gICAqZHJtX2FsbG9jX2FncChkcm1fZGV2aWNlX3QgKmRldiwgaW50IHBhZ2VzLCB1MzIgdHlwZSk7Ci1leHRlcm4gaW50ICAgICAgICAgICBkcm1fZnJlZV9hZ3AoRFJNX0FHUF9NRU0gKmhhbmRsZSwgaW50IHBhZ2VzKTsKLWV4dGVybiBpbnQgICAgICAgICAgIGRybV9iaW5kX2FncChEUk1fQUdQX01FTSAqaGFuZGxlLCB1bnNpZ25lZCBpbnQgc3RhcnQpOwotZXh0ZXJuIGludCAgICAgICAgICAgZHJtX3VuYmluZF9hZ3AoRFJNX0FHUF9NRU0gKmhhbmRsZSk7CitleHRlcm4gRFJNX0FHUF9NRU0gKmRybV9hbGxvY19hZ3AoZHJtX2RldmljZV90ICogZGV2LCBpbnQgcGFnZXMsIHUzMiB0eXBlKTsKK2V4dGVybiBpbnQgZHJtX2ZyZWVfYWdwKERSTV9BR1BfTUVNICogaGFuZGxlLCBpbnQgcGFnZXMpOworZXh0ZXJuIGludCBkcm1fYmluZF9hZ3AoRFJNX0FHUF9NRU0gKiBoYW5kbGUsIHVuc2lnbmVkIGludCBzdGFydCk7CitleHRlcm4gaW50IGRybV91bmJpbmRfYWdwKERSTV9BR1BfTUVNICogaGFuZGxlKTsKIAogCQkJCS8qIE1pc2MuIElPQ1RMIHN1cHBvcnQgKGRybV9pb2N0bC5oKSAqLwotZXh0ZXJuIGludAkgICAgIGRybV9pcnFfYnlfYnVzaWQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCi0JCQkJICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKLWV4dGVybiBpbnQJICAgICBkcm1fZ2V0dW5pcXVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAotCQkJCSAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7Ci1leHRlcm4gaW50CSAgICAgZHJtX3NldHVuaXF1ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJCQkgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwotZXh0ZXJuIGludAkgICAgIGRybV9nZXRtYXAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCi0JCQkJIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKLWV4dGVybiBpbnQJICAgICBkcm1fZ2V0Y2xpZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAotCQkJCSAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7Ci1leHRlcm4gaW50CSAgICAgZHJtX2dldHN0YXRzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAotCQkJCSAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKLWV4dGVybiBpbnQJICAgICBkcm1fc2V0dmVyc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJCQkgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKK2V4dGVybiBpbnQgZHJtX2lycV9ieV9idXNpZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJCSAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CitleHRlcm4gaW50IGRybV9nZXR1bmlxdWUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCisJCQkgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworZXh0ZXJuIGludCBkcm1fc2V0dW5pcXVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAorCQkJIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKK2V4dGVybiBpbnQgZHJtX2dldG1hcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworZXh0ZXJuIGludCBkcm1fZ2V0Y2xpZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAorCQkJIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKK2V4dGVybiBpbnQgZHJtX2dldHN0YXRzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAorCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworZXh0ZXJuIGludCBkcm1fc2V0dmVyc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJCSAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogCiAJCQkJLyogQ29udGV4dCBJT0NUTCBzdXBwb3J0IChkcm1fY29udGV4dC5oKSAqLwotZXh0ZXJuIGludAkgICAgIGRybV9yZXNjdHgoIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAotCQkJCSAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcgKTsKLWV4dGVybiBpbnQJICAgICBkcm1fYWRkY3R4KCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJCQkgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnICk7Ci1leHRlcm4gaW50CSAgICAgZHJtX21vZGN0eCggc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCi0JCQkJICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyApOwotZXh0ZXJuIGludAkgICAgIGRybV9nZXRjdHgoIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAotCQkJCSAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcgKTsKLWV4dGVybiBpbnQJICAgICBkcm1fc3dpdGNoY3R4KCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJCQkgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnICk7Ci1leHRlcm4gaW50CSAgICAgZHJtX25ld2N0eCggc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCi0JCQkJICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyApOwotZXh0ZXJuIGludAkgICAgIGRybV9ybWN0eCggc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCi0JCQkJIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnICk7CitleHRlcm4gaW50IGRybV9yZXNjdHgoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCisJCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKK2V4dGVybiBpbnQgZHJtX2FkZGN0eChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworZXh0ZXJuIGludCBkcm1fbW9kY3R4KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAorCQkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CitleHRlcm4gaW50IGRybV9nZXRjdHgoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCisJCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKK2V4dGVybiBpbnQgZHJtX3N3aXRjaGN0eChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJCSB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CitleHRlcm4gaW50IGRybV9uZXdjdHgoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCisJCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKK2V4dGVybiBpbnQgZHJtX3JtY3R4KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAorCQkgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKIAotZXh0ZXJuIGludAkgICAgIGRybV9jdHhiaXRtYXBfaW5pdCggZHJtX2RldmljZV90ICpkZXYgKTsKLWV4dGVybiB2b2lkCSAgICAgZHJtX2N0eGJpdG1hcF9jbGVhbnVwKCBkcm1fZGV2aWNlX3QgKmRldiApOwotZXh0ZXJuIHZvaWQgICAgICAgICAgZHJtX2N0eGJpdG1hcF9mcmVlKCBkcm1fZGV2aWNlX3QgKmRldiwgaW50IGN0eF9oYW5kbGUgKTsKK2V4dGVybiBpbnQgZHJtX2N0eGJpdG1hcF9pbml0KGRybV9kZXZpY2VfdCAqIGRldik7CitleHRlcm4gdm9pZCBkcm1fY3R4Yml0bWFwX2NsZWFudXAoZHJtX2RldmljZV90ICogZGV2KTsKK2V4dGVybiB2b2lkIGRybV9jdHhiaXRtYXBfZnJlZShkcm1fZGV2aWNlX3QgKiBkZXYsIGludCBjdHhfaGFuZGxlKTsKIAotZXh0ZXJuIGludAkgICAgIGRybV9zZXRzYXJlYWN0eCggc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCi0JCQkJICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnICk7Ci1leHRlcm4gaW50CSAgICAgZHJtX2dldHNhcmVhY3R4KCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJCQkgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcgKTsKK2V4dGVybiBpbnQgZHJtX3NldHNhcmVhY3R4KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAorCQkJICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworZXh0ZXJuIGludCBkcm1fZ2V0c2FyZWFjdHgoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCisJCQkgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiAKIAkJCQkvKiBEcmF3YWJsZSBJT0NUTCBzdXBwb3J0IChkcm1fZHJhd2FibGUuaCkgKi8KLWV4dGVybiBpbnQJICAgICBkcm1fYWRkZHJhdyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJCQkgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKLWV4dGVybiBpbnQJICAgICBkcm1fcm1kcmF3KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAotCQkJCSB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7Ci0KK2V4dGVybiBpbnQgZHJtX2FkZGRyYXcoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CitleHRlcm4gaW50IGRybV9ybWRyYXcoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCisJCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKIAogCQkJCS8qIEF1dGhlbnRpY2F0aW9uIElPQ1RMIHN1cHBvcnQgKGRybV9hdXRoLmgpICovCi1leHRlcm4gaW50CSAgICAgZHJtX2dldG1hZ2ljKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAotCQkJCSAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKLWV4dGVybiBpbnQJICAgICBkcm1fYXV0aG1hZ2ljKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAotCQkJCSAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CitleHRlcm4gaW50IGRybV9nZXRtYWdpYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKK2V4dGVybiBpbnQgZHJtX2F1dGhtYWdpYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJCSB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUGxhY2Vob2xkZXIgZm9yIGlvY3RscyBwYXN0ICovCi1leHRlcm4gaW50CSAgICAgZHJtX25vb3Aoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCi0JCQkJICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CisJCQkJLyogUGxhY2Vob2xkZXIgZm9yIGlvY3RscyBwYXN0ICovCitleHRlcm4gaW50IGRybV9ub29wKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAorCQkgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogCiAJCQkJLyogTG9ja2luZyBJT0NUTCBzdXBwb3J0IChkcm1fbG9jay5oKSAqLwotZXh0ZXJuIGludCAgICAgICAgICAgZHJtX2xvY2soc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCi0JCQkgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwotZXh0ZXJuIGludCAgICAgICAgICAgZHJtX3VubG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJCQkgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwotZXh0ZXJuIGludAkgICAgIGRybV9sb2NrX3Rha2UoX192b2xhdGlsZV9fIHVuc2lnbmVkIGludCAqbG9jaywKLQkJCQkgICAgdW5zaWduZWQgaW50IGNvbnRleHQpOwotZXh0ZXJuIGludAkgICAgIGRybV9sb2NrX2ZyZWUoZHJtX2RldmljZV90ICpkZXYsCi0JCQkJICAgIF9fdm9sYXRpbGVfXyB1bnNpZ25lZCBpbnQgKmxvY2ssCi0JCQkJICAgIHVuc2lnbmVkIGludCBjb250ZXh0KTsKK2V4dGVybiBpbnQgZHJtX2xvY2soc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCisJCSAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CitleHRlcm4gaW50IGRybV91bmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCisJCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKK2V4dGVybiBpbnQgZHJtX2xvY2tfdGFrZShfX3ZvbGF0aWxlX18gdW5zaWduZWQgaW50ICpsb2NrLCB1bnNpZ25lZCBpbnQgY29udGV4dCk7CitleHRlcm4gaW50IGRybV9sb2NrX2ZyZWUoZHJtX2RldmljZV90ICogZGV2LAorCQkJIF9fdm9sYXRpbGVfXyB1bnNpZ25lZCBpbnQgKmxvY2ssIHVuc2lnbmVkIGludCBjb250ZXh0KTsKIAogCQkJCS8qIEJ1ZmZlciBtYW5hZ2VtZW50IHN1cHBvcnQgKGRybV9idWZzLmgpICovCi1leHRlcm4gaW50IGRybV9hZGRidWZzX2FncChkcm1fZGV2aWNlX3QgKmRldiwgZHJtX2J1Zl9kZXNjX3QgKnJlcXVlc3QpOwotZXh0ZXJuIGludCBkcm1fYWRkYnVmc19wY2koZHJtX2RldmljZV90ICpkZXYsIGRybV9idWZfZGVzY190ICpyZXF1ZXN0KTsKLWV4dGVybiBpbnQgZHJtX2FkZG1hcChkcm1fZGV2aWNlX3QgKmRldiwgdW5zaWduZWQgaW50IG9mZnNldCwKK2V4dGVybiBpbnQgZHJtX2FkZGJ1ZnNfYWdwKGRybV9kZXZpY2VfdCAqIGRldiwgZHJtX2J1Zl9kZXNjX3QgKiByZXF1ZXN0KTsKK2V4dGVybiBpbnQgZHJtX2FkZGJ1ZnNfcGNpKGRybV9kZXZpY2VfdCAqIGRldiwgZHJtX2J1Zl9kZXNjX3QgKiByZXF1ZXN0KTsKK2V4dGVybiBpbnQgZHJtX2FkZG1hcChkcm1fZGV2aWNlX3QgKiBkZXYsIHVuc2lnbmVkIGludCBvZmZzZXQsCiAJCSAgICAgIHVuc2lnbmVkIGludCBzaXplLCBkcm1fbWFwX3R5cGVfdCB0eXBlLAotCQkgICAgICBkcm1fbWFwX2ZsYWdzX3QgZmxhZ3MsIGRybV9sb2NhbF9tYXBfdCAqKm1hcF9wdHIpOworCQkgICAgICBkcm1fbWFwX2ZsYWdzX3QgZmxhZ3MsIGRybV9sb2NhbF9tYXBfdCAqKiBtYXBfcHRyKTsKIGV4dGVybiBpbnQgZHJtX2FkZG1hcF9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKIAkJCSAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7Ci1leHRlcm4gaW50IGRybV9ybW1hcChkcm1fZGV2aWNlX3QgKmRldiwgZHJtX2xvY2FsX21hcF90ICptYXApOwotZXh0ZXJuIGludCBkcm1fcm1tYXBfbG9ja2VkKGRybV9kZXZpY2VfdCAqZGV2LCBkcm1fbG9jYWxfbWFwX3QgKm1hcCk7CitleHRlcm4gaW50IGRybV9ybW1hcChkcm1fZGV2aWNlX3QgKiBkZXYsIGRybV9sb2NhbF9tYXBfdCAqIG1hcCk7CitleHRlcm4gaW50IGRybV9ybW1hcF9sb2NrZWQoZHJtX2RldmljZV90ICogZGV2LCBkcm1fbG9jYWxfbWFwX3QgKiBtYXApOwogZXh0ZXJuIGludCBkcm1fcm1tYXBfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCiAJCQkgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiAKLWV4dGVybiBpbnQJICAgICBkcm1fb3JkZXIoIHVuc2lnbmVkIGxvbmcgc2l6ZSApOwotZXh0ZXJuIGludAkgICAgIGRybV9hZGRidWZzKCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJCQkgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyApOwotZXh0ZXJuIGludAkgICAgIGRybV9pbmZvYnVmcyggc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCi0JCQkJICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnICk7Ci1leHRlcm4gaW50CSAgICAgZHJtX21hcmtidWZzKCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJCQkgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcgKTsKLWV4dGVybiBpbnQJICAgICBkcm1fZnJlZWJ1ZnMoIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAotCQkJCSAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyApOwotZXh0ZXJuIGludAkgICAgIGRybV9tYXBidWZzKCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJCQkgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyApOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZHJtX2dldF9yZXNvdXJjZV9zdGFydChkcm1fZGV2aWNlX3QgKmRldiwKK2V4dGVybiBpbnQgZHJtX29yZGVyKHVuc2lnbmVkIGxvbmcgc2l6ZSk7CitleHRlcm4gaW50IGRybV9hZGRidWZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAorCQkgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworZXh0ZXJuIGludCBkcm1faW5mb2J1ZnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCisJCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CitleHRlcm4gaW50IGRybV9tYXJrYnVmcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKK2V4dGVybiBpbnQgZHJtX2ZyZWVidWZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAorCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworZXh0ZXJuIGludCBkcm1fbWFwYnVmcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGRybV9nZXRfcmVzb3VyY2Vfc3RhcnQoZHJtX2RldmljZV90ICogZGV2LAogCQkJCQkgICAgdW5zaWduZWQgaW50IHJlc291cmNlKTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIGRybV9nZXRfcmVzb3VyY2VfbGVuKGRybV9kZXZpY2VfdCAqZGV2LAorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZHJtX2dldF9yZXNvdXJjZV9sZW4oZHJtX2RldmljZV90ICogZGV2LAogCQkJCQkgIHVuc2lnbmVkIGludCByZXNvdXJjZSk7CiAKIAkJCQkvKiBETUEgc3VwcG9ydCAoZHJtX2RtYS5oKSAqLwotZXh0ZXJuIGludAkgICAgIGRybV9kbWFfc2V0dXAoZHJtX2RldmljZV90ICpkZXYpOwotZXh0ZXJuIHZvaWQJICAgICBkcm1fZG1hX3Rha2Vkb3duKGRybV9kZXZpY2VfdCAqZGV2KTsKLWV4dGVybiB2b2lkCSAgICAgZHJtX2ZyZWVfYnVmZmVyKGRybV9kZXZpY2VfdCAqZGV2LCBkcm1fYnVmX3QgKmJ1Zik7Ci1leHRlcm4gdm9pZAkgICAgIGRybV9jb3JlX3JlY2xhaW1fYnVmZmVycyhkcm1fZGV2aWNlX3QgKmRldiwgc3RydWN0IGZpbGUgKmZpbHApOworZXh0ZXJuIGludCBkcm1fZG1hX3NldHVwKGRybV9kZXZpY2VfdCAqIGRldik7CitleHRlcm4gdm9pZCBkcm1fZG1hX3Rha2Vkb3duKGRybV9kZXZpY2VfdCAqIGRldik7CitleHRlcm4gdm9pZCBkcm1fZnJlZV9idWZmZXIoZHJtX2RldmljZV90ICogZGV2LCBkcm1fYnVmX3QgKiBidWYpOworZXh0ZXJuIHZvaWQgZHJtX2NvcmVfcmVjbGFpbV9idWZmZXJzKGRybV9kZXZpY2VfdCAqIGRldiwgc3RydWN0IGZpbGUgKmZpbHApOwogCiAJCQkJLyogSVJRIHN1cHBvcnQgKGRybV9pcnEuaCkgKi8KLWV4dGVybiBpbnQgICAgICAgICAgIGRybV9jb250cm9sKCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJCQkgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyApOwotZXh0ZXJuIGludCAgICAgICAgICAgZHJtX2lycV91bmluc3RhbGwoIGRybV9kZXZpY2VfdCAqZGV2ICk7Ci1leHRlcm4gaXJxcmV0dXJuX3QgICBkcm1faXJxX2hhbmRsZXIoIERSTV9JUlFfQVJHUyApOwotZXh0ZXJuIHZvaWQgICAgICAgICAgZHJtX2RyaXZlcl9pcnFfcHJlaW5zdGFsbCggZHJtX2RldmljZV90ICpkZXYgKTsKLWV4dGVybiB2b2lkICAgICAgICAgIGRybV9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsKCBkcm1fZGV2aWNlX3QgKmRldiApOwotZXh0ZXJuIHZvaWQgICAgICAgICAgZHJtX2RyaXZlcl9pcnFfdW5pbnN0YWxsKCBkcm1fZGV2aWNlX3QgKmRldiApOworZXh0ZXJuIGludCBkcm1fY29udHJvbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKK2V4dGVybiBpbnQgZHJtX2lycV91bmluc3RhbGwoZHJtX2RldmljZV90ICogZGV2KTsKK2V4dGVybiBpcnFyZXR1cm5fdCBkcm1faXJxX2hhbmRsZXIoRFJNX0lSUV9BUkdTKTsKK2V4dGVybiB2b2lkIGRybV9kcml2ZXJfaXJxX3ByZWluc3RhbGwoZHJtX2RldmljZV90ICogZGV2KTsKK2V4dGVybiB2b2lkIGRybV9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsKGRybV9kZXZpY2VfdCAqIGRldik7CitleHRlcm4gdm9pZCBkcm1fZHJpdmVyX2lycV91bmluc3RhbGwoZHJtX2RldmljZV90ICogZGV2KTsKIAotZXh0ZXJuIGludCAgICAgICAgICAgZHJtX3dhaXRfdmJsYW5rKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAotCQkJCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKLWV4dGVybiBpbnQgICAgICAgICAgIGRybV92Ymxhbmtfd2FpdChkcm1fZGV2aWNlX3QgKmRldiwgdW5zaWduZWQgaW50ICp2Ymxfc2VxKTsKLWV4dGVybiB2b2lkICAgICAgICAgIGRybV92Ymxfc2VuZF9zaWduYWxzKCBkcm1fZGV2aWNlX3QgKmRldiApOworZXh0ZXJuIGludCBkcm1fd2FpdF92Ymxhbmsoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCisJCQkgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CitleHRlcm4gaW50IGRybV92Ymxhbmtfd2FpdChkcm1fZGV2aWNlX3QgKiBkZXYsIHVuc2lnbmVkIGludCAqdmJsX3NlcSk7CitleHRlcm4gdm9pZCBkcm1fdmJsX3NlbmRfc2lnbmFscyhkcm1fZGV2aWNlX3QgKiBkZXYpOwogCiAJCQkJLyogQUdQL0dBUlQgc3VwcG9ydCAoZHJtX2FncHN1cHBvcnQuaCkgKi8KLWV4dGVybiBkcm1fYWdwX2hlYWRfdCAqZHJtX2FncF9pbml0KGRybV9kZXZpY2VfdCAqZGV2KTsKK2V4dGVybiBkcm1fYWdwX2hlYWRfdCAqZHJtX2FncF9pbml0KGRybV9kZXZpY2VfdCAqIGRldik7CiBleHRlcm4gaW50IGRybV9hZ3BfYWNxdWlyZShkcm1fZGV2aWNlX3QgKiBkZXYpOwogZXh0ZXJuIGludCBkcm1fYWdwX2FjcXVpcmVfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCi0JCQkgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7Ci1leHRlcm4gaW50IGRybV9hZ3BfcmVsZWFzZShkcm1fZGV2aWNlX3QgKmRldik7CisJCQkJIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKK2V4dGVybiBpbnQgZHJtX2FncF9yZWxlYXNlKGRybV9kZXZpY2VfdCAqIGRldik7CiBleHRlcm4gaW50IGRybV9hZ3BfcmVsZWFzZV9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJCSAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKLWV4dGVybiBpbnQgZHJtX2FncF9lbmFibGUoZHJtX2RldmljZV90ICpkZXYsIGRybV9hZ3BfbW9kZV90IG1vZGUpOworCQkJCSB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CitleHRlcm4gaW50IGRybV9hZ3BfZW5hYmxlKGRybV9kZXZpY2VfdCAqIGRldiwgZHJtX2FncF9tb2RlX3QgbW9kZSk7CiBleHRlcm4gaW50IGRybV9hZ3BfZW5hYmxlX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAotCQkJICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7Ci1leHRlcm4gaW50IGRybV9hZ3BfaW5mbyhkcm1fZGV2aWNlX3QgKiBkZXYsIGRybV9hZ3BfaW5mb190ICppbmZvKTsKKwkJCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CitleHRlcm4gaW50IGRybV9hZ3BfaW5mbyhkcm1fZGV2aWNlX3QgKiBkZXYsIGRybV9hZ3BfaW5mb190ICogaW5mbyk7CiBleHRlcm4gaW50IGRybV9hZ3BfaW5mb19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKK2V4dGVybiBpbnQgZHJtX2FncF9hbGxvYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJCSB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CitleHRlcm4gaW50IGRybV9hZ3BfZnJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKIAkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKLWV4dGVybiBpbnQgICAgICAgICAgICBkcm1fYWdwX2FsbG9jKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAotCQkJCSAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwotZXh0ZXJuIGludCAgICAgICAgICAgIGRybV9hZ3BfZnJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJCQkgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwotZXh0ZXJuIGludCAgICAgICAgICAgIGRybV9hZ3BfdW5iaW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAotCQkJCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKLWV4dGVybiBpbnQgICAgICAgICAgICBkcm1fYWdwX2JpbmQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCi0JCQkJICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKLWV4dGVybiBEUk1fQUdQX01FTSAgICAqZHJtX2FncF9hbGxvY2F0ZV9tZW1vcnkoc3RydWN0IGFncF9icmlkZ2VfZGF0YSAqYnJpZGdlLCBzaXplX3QgcGFnZXMsIHUzMiB0eXBlKTsKLWV4dGVybiBpbnQgICAgICAgICAgICBkcm1fYWdwX2ZyZWVfbWVtb3J5KERSTV9BR1BfTUVNICpoYW5kbGUpOwotZXh0ZXJuIGludCAgICAgICAgICAgIGRybV9hZ3BfYmluZF9tZW1vcnkoRFJNX0FHUF9NRU0gKmhhbmRsZSwgb2ZmX3Qgc3RhcnQpOwotZXh0ZXJuIGludCAgICAgICAgICAgIGRybV9hZ3BfdW5iaW5kX21lbW9yeShEUk1fQUdQX01FTSAqaGFuZGxlKTsKK2V4dGVybiBpbnQgZHJtX2FncF91bmJpbmQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCisJCQkgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKK2V4dGVybiBpbnQgZHJtX2FncF9iaW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAorCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworZXh0ZXJuIERSTV9BR1BfTUVNICpkcm1fYWdwX2FsbG9jYXRlX21lbW9yeShzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICpicmlkZ2UsCisJCQkJCSAgICBzaXplX3QgcGFnZXMsIHUzMiB0eXBlKTsKK2V4dGVybiBpbnQgZHJtX2FncF9mcmVlX21lbW9yeShEUk1fQUdQX01FTSAqIGhhbmRsZSk7CitleHRlcm4gaW50IGRybV9hZ3BfYmluZF9tZW1vcnkoRFJNX0FHUF9NRU0gKiBoYW5kbGUsIG9mZl90IHN0YXJ0KTsKK2V4dGVybiBpbnQgZHJtX2FncF91bmJpbmRfbWVtb3J5KERSTV9BR1BfTUVNICogaGFuZGxlKTsKIAogCQkJCS8qIFN0dWIgc3VwcG9ydCAoZHJtX3N0dWIuaCkgKi8KIGV4dGVybiBpbnQgZHJtX2dldF9kZXYoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQsCi0JCSAgICAgc3RydWN0IGRybV9kcml2ZXIgKmRyaXZlcik7CisJCSAgICAgICBzdHJ1Y3QgZHJtX2RyaXZlciAqZHJpdmVyKTsKIGV4dGVybiBpbnQgZHJtX3B1dF9kZXYoZHJtX2RldmljZV90ICogZGV2KTsKIGV4dGVybiBpbnQgZHJtX3B1dF9oZWFkKGRybV9oZWFkX3QgKiBoZWFkKTsKLWV4dGVybiB1bnNpZ25lZCBpbnQgICBkcm1fZGVidWc7Ci1leHRlcm4gdW5zaWduZWQgaW50ICAgZHJtX2NhcmRzX2xpbWl0OworZXh0ZXJuIHVuc2lnbmVkIGludCBkcm1fZGVidWc7CitleHRlcm4gdW5zaWduZWQgaW50IGRybV9jYXJkc19saW1pdDsKIGV4dGVybiBkcm1faGVhZF90ICoqZHJtX2hlYWRzOwogZXh0ZXJuIHN0cnVjdCBkcm1fc3lzZnNfY2xhc3MgKmRybV9jbGFzczsKIGV4dGVybiBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRybV9wcm9jX3Jvb3Q7CiAKIAkJCQkvKiBQcm9jIHN1cHBvcnQgKGRybV9wcm9jLmgpICovCi1leHRlcm4gaW50ICAgICAgICAgICAgZHJtX3Byb2NfaW5pdChkcm1fZGV2aWNlX3QgKmRldiwKLQkJCQkJICAgICBpbnQgbWlub3IsCi0JCQkJCSAgICAgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpyb290LAotCQkJCQkgICAgIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqKmRldl9yb290KTsKLWV4dGVybiBpbnQgICAgICAgICAgICBkcm1fcHJvY19jbGVhbnVwKGludCBtaW5vciwKLQkJCQkJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpyb290LAotCQkJCQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRldl9yb290KTsKK2V4dGVybiBpbnQgZHJtX3Byb2NfaW5pdChkcm1fZGV2aWNlX3QgKiBkZXYsCisJCQkgaW50IG1pbm9yLAorCQkJIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcm9vdCwKKwkJCSBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKipkZXZfcm9vdCk7CitleHRlcm4gaW50IGRybV9wcm9jX2NsZWFudXAoaW50IG1pbm9yLAorCQkJICAgIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcm9vdCwKKwkJCSAgICBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRldl9yb290KTsKIAogCQkJCS8qIFNjYXR0ZXIgR2F0aGVyIFN1cHBvcnQgKGRybV9zY2F0dGVyLmgpICovCi1leHRlcm4gdm9pZCAgICAgICAgICAgZHJtX3NnX2NsZWFudXAoZHJtX3NnX21lbV90ICplbnRyeSk7Ci1leHRlcm4gaW50ICAgICAgICAgICAgZHJtX3NnX2FsbG9jKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAotCQkJCSAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7Ci1leHRlcm4gaW50ICAgICAgICAgICAgZHJtX3NnX2ZyZWUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCi0JCQkJICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworZXh0ZXJuIHZvaWQgZHJtX3NnX2NsZWFudXAoZHJtX3NnX21lbV90ICogZW50cnkpOworZXh0ZXJuIGludCBkcm1fc2dfYWxsb2Moc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCisJCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CitleHRlcm4gaW50IGRybV9zZ19mcmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAorCQkgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQVRJIFBDSUdBUlQgc3VwcG9ydCAoYXRpX3BjaWdhcnQuaCkgKi8KLWV4dGVybiBpbnQgZHJtX2F0aV9wY2lnYXJ0X2luaXQoZHJtX2RldmljZV90ICogZGV2LCBkcm1fYXRpX3BjaWdhcnRfaW5mbyAqZ2FydF9pbmZvKTsKLWV4dGVybiBpbnQgZHJtX2F0aV9wY2lnYXJ0X2NsZWFudXAoZHJtX2RldmljZV90ICogZGV2LCBkcm1fYXRpX3BjaWdhcnRfaW5mbyAqZ2FydF9pbmZvKTsKKwkJCSAgICAgICAvKiBBVEkgUENJR0FSVCBzdXBwb3J0IChhdGlfcGNpZ2FydC5oKSAqLworZXh0ZXJuIGludCBkcm1fYXRpX3BjaWdhcnRfaW5pdChkcm1fZGV2aWNlX3QgKiBkZXYsCisJCQkJZHJtX2F0aV9wY2lnYXJ0X2luZm8gKiBnYXJ0X2luZm8pOworZXh0ZXJuIGludCBkcm1fYXRpX3BjaWdhcnRfY2xlYW51cChkcm1fZGV2aWNlX3QgKiBkZXYsCisJCQkJICAgZHJtX2F0aV9wY2lnYXJ0X2luZm8gKiBnYXJ0X2luZm8pOwogCi1leHRlcm4gZHJtX2RtYV9oYW5kbGVfdCAqZHJtX3BjaV9hbGxvYyhkcm1fZGV2aWNlX3QgKmRldiwgc2l6ZV90IHNpemUsCitleHRlcm4gZHJtX2RtYV9oYW5kbGVfdCAqZHJtX3BjaV9hbGxvYyhkcm1fZGV2aWNlX3QgKiBkZXYsIHNpemVfdCBzaXplLAogCQkJCSAgICAgICBzaXplX3QgYWxpZ24sIGRtYV9hZGRyX3QgbWF4YWRkcik7Ci1leHRlcm4gdm9pZCBfX2RybV9wY2lfZnJlZShkcm1fZGV2aWNlX3QgKmRldiwgZHJtX2RtYV9oYW5kbGVfdCAqZG1haCk7Ci1leHRlcm4gdm9pZCBkcm1fcGNpX2ZyZWUoZHJtX2RldmljZV90ICpkZXYsIGRybV9kbWFfaGFuZGxlX3QgKmRtYWgpOworZXh0ZXJuIHZvaWQgX19kcm1fcGNpX2ZyZWUoZHJtX2RldmljZV90ICogZGV2LCBkcm1fZG1hX2hhbmRsZV90ICogZG1haCk7CitleHRlcm4gdm9pZCBkcm1fcGNpX2ZyZWUoZHJtX2RldmljZV90ICogZGV2LCBkcm1fZG1hX2hhbmRsZV90ICogZG1haCk7CiAKIAkJCSAgICAgICAvKiBzeXNmcyBzdXBwb3J0IChkcm1fc3lzZnMuYykgKi8KIHN0cnVjdCBkcm1fc3lzZnNfY2xhc3M7CkBAIC0xMDA1LDM4ICsxMDAxLDQxIEBACiAJCQkJCQkgY29uc3QgY2hhciAqZm10LCAuLi4pOwogZXh0ZXJuIHZvaWQgZHJtX3N5c2ZzX2RldmljZV9yZW1vdmUoZGV2X3QgZGV2KTsKIAotCiAvKiBJbmxpbmUgcmVwbGFjZW1lbnRzIGZvciBEUk1fSU9SRU1BUCBtYWNyb3MgKi8KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgZHJtX2NvcmVfaW9yZW1hcChzdHJ1Y3QgZHJtX21hcCAqbWFwLCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQorc3RhdGljIF9faW5saW5lX18gdm9pZCBkcm1fY29yZV9pb3JlbWFwKHN0cnVjdCBkcm1fbWFwICptYXAsCisJCQkJCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7Ci0JbWFwLT5oYW5kbGUgPSBkcm1faW9yZW1hcCggbWFwLT5vZmZzZXQsIG1hcC0+c2l6ZSwgZGV2ICk7CisJbWFwLT5oYW5kbGUgPSBkcm1faW9yZW1hcChtYXAtPm9mZnNldCwgbWFwLT5zaXplLCBkZXYpOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIGRybV9jb3JlX2lvcmVtYXBfbm9jYWNoZShzdHJ1Y3QgZHJtX21hcCAqbWFwLCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQorc3RhdGljIF9faW5saW5lX18gdm9pZCBkcm1fY29yZV9pb3JlbWFwX25vY2FjaGUoc3RydWN0IGRybV9tYXAgKm1hcCwKKwkJCQkJCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJbWFwLT5oYW5kbGUgPSBkcm1faW9yZW1hcF9ub2NhY2hlKG1hcC0+b2Zmc2V0LCBtYXAtPnNpemUsIGRldik7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgZHJtX2NvcmVfaW9yZW1hcGZyZWUoc3RydWN0IGRybV9tYXAgKm1hcCwgc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgZHJtX2NvcmVfaW9yZW1hcGZyZWUoc3RydWN0IGRybV9tYXAgKm1hcCwKKwkJCQkJICAgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7Ci0JaWYgKCBtYXAtPmhhbmRsZSAmJiBtYXAtPnNpemUgKQotCQlkcm1faW9yZW1hcGZyZWUoIG1hcC0+aGFuZGxlLCBtYXAtPnNpemUsIGRldiApOworCWlmIChtYXAtPmhhbmRsZSAmJiBtYXAtPnNpemUpCisJCWRybV9pb3JlbWFwZnJlZShtYXAtPmhhbmRsZSwgbWFwLT5zaXplLCBkZXYpOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyBzdHJ1Y3QgZHJtX21hcCAqZHJtX2NvcmVfZmluZG1hcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgdG9rZW4pCitzdGF0aWMgX19pbmxpbmVfXyBzdHJ1Y3QgZHJtX21hcCAqZHJtX2NvcmVfZmluZG1hcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQkJICAgdW5zaWduZWQgaW50IHRva2VuKQogewogCWRybV9tYXBfbGlzdF90ICpfZW50cnk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShfZW50cnksICZkZXYtPm1hcGxpc3QtPmhlYWQsIGhlYWQpCi0JCWlmIChfZW50cnktPnVzZXJfdG9rZW4gPT0gdG9rZW4pCi0JCQlyZXR1cm4gX2VudHJ5LT5tYXA7CisJICAgIGlmIChfZW50cnktPnVzZXJfdG9rZW4gPT0gdG9rZW4pCisJCXJldHVybiBfZW50cnktPm1hcDsKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIF9faW5saW5lX18gaW50IGRybV9kZXZpY2VfaXNfYWdwKGRybV9kZXZpY2VfdCAqZGV2KQorc3RhdGljIF9faW5saW5lX18gaW50IGRybV9kZXZpY2VfaXNfYWdwKGRybV9kZXZpY2VfdCAqIGRldikKIHsKLQlpZiAoIGRldi0+ZHJpdmVyLT5kZXZpY2VfaXNfYWdwICE9IE5VTEwgKSB7Ci0JCWludCBlcnIgPSAoKmRldi0+ZHJpdmVyLT5kZXZpY2VfaXNfYWdwKSggZGV2ICk7Ci0JCisJaWYgKGRldi0+ZHJpdmVyLT5kZXZpY2VfaXNfYWdwICE9IE5VTEwpIHsKKwkJaW50IGVyciA9ICgqZGV2LT5kcml2ZXItPmRldmljZV9pc19hZ3ApIChkZXYpOworCiAJCWlmIChlcnIgIT0gMikgewogCQkJcmV0dXJuIGVycjsKIAkJfQpAQCAtMTA0NSw3ICsxMDQ0LDcgQEAKIAlyZXR1cm4gcGNpX2ZpbmRfY2FwYWJpbGl0eShkZXYtPnBkZXYsIFBDSV9DQVBfSURfQUdQKTsKIH0KIAotc3RhdGljIF9faW5saW5lX18gaW50IGRybV9kZXZpY2VfaXNfcGNpZShkcm1fZGV2aWNlX3QgKmRldikKK3N0YXRpYyBfX2lubGluZV9fIGludCBkcm1fZGV2aWNlX2lzX3BjaWUoZHJtX2RldmljZV90ICogZGV2KQogewogCXJldHVybiBwY2lfZmluZF9jYXBhYmlsaXR5KGRldi0+cGRldiwgUENJX0NBUF9JRF9FWFApOwogfQpAQCAtMTA4MCwxMiArMTA3OSwxMiBAQAogCiAvKkB9Ki8KIAotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZHJtX2NvcmVfZ2V0X21hcF9vZnMoZHJtX21hcF90ICptYXApOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZHJtX2NvcmVfZ2V0X21hcF9vZnMoZHJtX21hcF90ICogbWFwKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIGRybV9jb3JlX2dldF9yZWdfb2ZzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogCiAjaWZuZGVmIHBjaV9wcmV0dHlfbmFtZQogI2RlZmluZSBwY2lfcHJldHR5X25hbWUoZGV2KSAiIgogI2VuZGlmCiAKLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYJCQkJLyogX19LRVJORUxfXyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9hZ3BzdXBwb3J0LmMgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9hZ3BzdXBwb3J0LmMKaW5kZXggOGMyMTVhZC4uMmI2NDUzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1fYWdwc3VwcG9ydC5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX2FncHN1cHBvcnQuYwpAQCAtMSw3ICsxLDcgQEAKIC8qKgotICogXGZpbGUgZHJtX2FncHN1cHBvcnQuaCAKKyAqIFxmaWxlIGRybV9hZ3BzdXBwb3J0LmgKICAqIERSTSBzdXBwb3J0IGZvciBBR1AvR0FSVCBiYWNrZW5kCi0gKiAgICAKKyAqCiAgKiBcYXV0aG9yIFJpY2thcmQgRS4gKFJpaykgRmFpdGggPGZhaXRoQHZhbGludXguY29tPgogICogXGF1dGhvciBHYXJldGggSHVnaGVzIDxnYXJldGhAdmFsaW51eC5jb20+CiAgKi8KQEAgLTQ4LDMwICs0OCwzMSBAQAogICogVmVyaWZpZXMgdGhlIEFHUCBkZXZpY2UgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgYW5kIGFjcXVpcmVkIGFuZCBmaWxscyBpbiB0aGUKICAqIGRybV9hZ3BfaW5mbyBzdHJ1Y3R1cmUgd2l0aCB0aGUgaW5mb3JtYXRpb24gaW4gZHJtX2FncF9oZWFkOjphZ3BfaW5mby4KICAqLwotaW50IGRybV9hZ3BfaW5mbyhkcm1fZGV2aWNlX3QgKmRldiwgZHJtX2FncF9pbmZvX3QgKmluZm8pCitpbnQgZHJtX2FncF9pbmZvKGRybV9kZXZpY2VfdCAqIGRldiwgZHJtX2FncF9pbmZvX3QgKiBpbmZvKQogewotCURSTV9BR1BfS0VSTiAgICAgKmtlcm47CisJRFJNX0FHUF9LRVJOICprZXJuOwogCiAJaWYgKCFkZXYtPmFncCB8fCAhZGV2LT5hZ3AtPmFjcXVpcmVkKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWtlcm4gICAgICAgICAgICAgICAgICAgPSAmZGV2LT5hZ3AtPmFncF9pbmZvOworCWtlcm4gPSAmZGV2LT5hZ3AtPmFncF9pbmZvOwogCWluZm8tPmFncF92ZXJzaW9uX21ham9yID0ga2Vybi0+dmVyc2lvbi5tYWpvcjsKIAlpbmZvLT5hZ3BfdmVyc2lvbl9taW5vciA9IGtlcm4tPnZlcnNpb24ubWlub3I7Ci0JaW5mby0+bW9kZSAgICAgICAgICAgICAgPSBrZXJuLT5tb2RlOwotCWluZm8tPmFwZXJ0dXJlX2Jhc2UgICAgID0ga2Vybi0+YXBlcl9iYXNlOwotCWluZm8tPmFwZXJ0dXJlX3NpemUgICAgID0ga2Vybi0+YXBlcl9zaXplICogMTAyNCAqIDEwMjQ7Ci0JaW5mby0+bWVtb3J5X2FsbG93ZWQgICAgPSBrZXJuLT5tYXhfbWVtb3J5IDw8IFBBR0VfU0hJRlQ7Ci0JaW5mby0+bWVtb3J5X3VzZWQgICAgICAgPSBrZXJuLT5jdXJyZW50X21lbW9yeSA8PCBQQUdFX1NISUZUOwotCWluZm8tPmlkX3ZlbmRvciAgICAgICAgID0ga2Vybi0+ZGV2aWNlLT52ZW5kb3I7Ci0JaW5mby0+aWRfZGV2aWNlICAgICAgICAgPSBrZXJuLT5kZXZpY2UtPmRldmljZTsKKwlpbmZvLT5tb2RlID0ga2Vybi0+bW9kZTsKKwlpbmZvLT5hcGVydHVyZV9iYXNlID0ga2Vybi0+YXBlcl9iYXNlOworCWluZm8tPmFwZXJ0dXJlX3NpemUgPSBrZXJuLT5hcGVyX3NpemUgKiAxMDI0ICogMTAyNDsKKwlpbmZvLT5tZW1vcnlfYWxsb3dlZCA9IGtlcm4tPm1heF9tZW1vcnkgPDwgUEFHRV9TSElGVDsKKwlpbmZvLT5tZW1vcnlfdXNlZCA9IGtlcm4tPmN1cnJlbnRfbWVtb3J5IDw8IFBBR0VfU0hJRlQ7CisJaW5mby0+aWRfdmVuZG9yID0ga2Vybi0+ZGV2aWNlLT52ZW5kb3I7CisJaW5mby0+aWRfZGV2aWNlID0ga2Vybi0+ZGV2aWNlLT5kZXZpY2U7CiAKIAlyZXR1cm4gMDsKIH0KKwogRVhQT1JUX1NZTUJPTChkcm1fYWdwX2luZm8pOwogCiBpbnQgZHJtX2FncF9pbmZvX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAotCQkgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCisJCSAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlkcm1fZmlsZV90ICpwcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCWRybV9kZXZpY2VfdCAqZGV2ID0gcHJpdi0+aGVhZC0+ZGV2OwpAQCAtODEsNyArODIsNyBAQAogCWVyciA9IGRybV9hZ3BfaW5mbyhkZXYsICZpbmZvKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwotCQorCiAJaWYgKGNvcHlfdG9fdXNlcigoZHJtX2FncF9pbmZvX3QgX191c2VyICopIGFyZywgJmluZm8sIHNpemVvZihpbmZvKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCXJldHVybiAwOwpAQCAtOTEsMTIgKzkyLDEyIEBACiAgKiBBY3F1aXJlIHRoZSBBR1AgZGV2aWNlLgogICoKICAqIFxwYXJhbSBkZXYgRFJNIGRldmljZSB0aGF0IGlzIHRvIGFjcXVpcmUgQUdQCi0gKiBccmV0dXJuIHplcm8gb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIG51bWJlciBvbiBmYWlsdXJlLiAKKyAqIFxyZXR1cm4gemVybyBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgbnVtYmVyIG9uIGZhaWx1cmUuCiAgKgogICogVmVyaWZpZXMgdGhlIEFHUCBkZXZpY2UgaGFzbid0IGJlZW4gYWNxdWlyZWQgYmVmb3JlIGFuZCBjYWxscwogICogXGMgYWdwX2JhY2tlbmRfYWNxdWlyZS4KICAqLwotaW50IGRybV9hZ3BfYWNxdWlyZShkcm1fZGV2aWNlX3QgKmRldikKK2ludCBkcm1fYWdwX2FjcXVpcmUoZHJtX2RldmljZV90ICogZGV2KQogewogCWlmICghZGV2LT5hZ3ApCiAJCXJldHVybiAtRU5PREVWOwpAQCAtMTA3LDYgKzEwOCw3IEBACiAJZGV2LT5hZ3AtPmFjcXVpcmVkID0gMTsKIAlyZXR1cm4gMDsKIH0KKwogRVhQT1JUX1NZTUJPTChkcm1fYWdwX2FjcXVpcmUpOwogCiAvKioKQEAgLTEyNSw4ICsxMjcsOCBAQAogCQkJICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlkcm1fZmlsZV90ICpwcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwotCQotCXJldHVybiBkcm1fYWdwX2FjcXVpcmUoIChkcm1fZGV2aWNlX3QgKikgcHJpdi0+aGVhZC0+ZGV2ICk7CisKKwlyZXR1cm4gZHJtX2FncF9hY3F1aXJlKChkcm1fZGV2aWNlX3QgKikgcHJpdi0+aGVhZC0+ZGV2KTsKIH0KIAogLyoqCkBAIC0xMzcsNyArMTM5LDcgQEAKICAqCiAgKiBWZXJpZmllcyB0aGUgQUdQIGRldmljZSBoYXMgYmVlbiBhY3F1aXJlZCBhbmQgY2FsbHMgXGMgYWdwX2JhY2tlbmRfcmVsZWFzZS4KICAqLwotaW50IGRybV9hZ3BfcmVsZWFzZShkcm1fZGV2aWNlX3QgKmRldikKK2ludCBkcm1fYWdwX3JlbGVhc2UoZHJtX2RldmljZV90ICogZGV2KQogewogCWlmICghZGV2LT5hZ3AgfHwgIWRldi0+YWdwLT5hY3F1aXJlZCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNDUsNiArMTQ3LDcgQEAKIAlkZXYtPmFncC0+YWNxdWlyZWQgPSAwOwogCXJldHVybiAwOwogfQorCiBFWFBPUlRfU1lNQk9MKGRybV9hZ3BfcmVsZWFzZSk7CiAKIGludCBkcm1fYWdwX3JlbGVhc2VfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCkBAIC0xNTIsMTMgKzE1NSwxMyBAQAogewogCWRybV9maWxlX3QgKnByaXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAJZHJtX2RldmljZV90ICpkZXYgPSBwcml2LT5oZWFkLT5kZXY7Ci0JCisKIAlyZXR1cm4gZHJtX2FncF9yZWxlYXNlKGRldik7CiB9CiAKIC8qKgogICogRW5hYmxlIHRoZSBBR1AgYnVzLgotICogCisgKgogICogXHBhcmFtIGRldiBEUk0gZGV2aWNlIHRoYXQgaGFzIHByZXZpb3VzbHkgYWNxdWlyZWQgQUdQLgogICogXHBhcmFtIG1vZGUgUmVxdWVzdGVkIEFHUCBtb2RlLgogICogXHJldHVybiB6ZXJvIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBudW1iZXIgb24gZmFpbHVyZS4KQEAgLTE2NiwyNyArMTY5LDI3IEBACiAgKiBWZXJpZmllcyB0aGUgQUdQIGRldmljZSBoYXMgYmVlbiBhY3F1aXJlZCBidXQgbm90IGVuYWJsZWQsIGFuZCBjYWxscwogICogXGMgYWdwX2VuYWJsZS4KICAqLwotaW50IGRybV9hZ3BfZW5hYmxlKGRybV9kZXZpY2VfdCAqZGV2LCBkcm1fYWdwX21vZGVfdCBtb2RlKQoraW50IGRybV9hZ3BfZW5hYmxlKGRybV9kZXZpY2VfdCAqIGRldiwgZHJtX2FncF9tb2RlX3QgbW9kZSkKIHsKIAlpZiAoIWRldi0+YWdwIHx8ICFkZXYtPmFncC0+YWNxdWlyZWQpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZGV2LT5hZ3AtPm1vZGUgICAgPSBtb2RlLm1vZGU7CisJZGV2LT5hZ3AtPm1vZGUgPSBtb2RlLm1vZGU7CiAJYWdwX2VuYWJsZShkZXYtPmFncC0+YnJpZGdlLCBtb2RlLm1vZGUpOwotCWRldi0+YWdwLT5iYXNlICAgID0gZGV2LT5hZ3AtPmFncF9pbmZvLmFwZXJfYmFzZTsKKwlkZXYtPmFncC0+YmFzZSA9IGRldi0+YWdwLT5hZ3BfaW5mby5hcGVyX2Jhc2U7CiAJZGV2LT5hZ3AtPmVuYWJsZWQgPSAxOwogCXJldHVybiAwOwogfQorCiBFWFBPUlRfU1lNQk9MKGRybV9hZ3BfZW5hYmxlKTsKIAogaW50IGRybV9hZ3BfZW5hYmxlX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAotCQkgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKKwkJCSB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlkcm1fZmlsZV90ICpwcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCWRybV9kZXZpY2VfdCAqZGV2ID0gcHJpdi0+aGVhZC0+ZGV2OwogCWRybV9hZ3BfbW9kZV90IG1vZGU7CiAKLQogCWlmIChjb3B5X2Zyb21fdXNlcigmbW9kZSwgKGRybV9hZ3BfbW9kZV90IF9fdXNlciAqKSBhcmcsIHNpemVvZihtb2RlKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCkBAIC0yMDEsMjAgKzIwNCwyMCBAQAogICogXHBhcmFtIGNtZCBjb21tYW5kLgogICogXHBhcmFtIGFyZyBwb2ludGVyIHRvIGEgZHJtX2FncF9idWZmZXIgc3RydWN0dXJlLgogICogXHJldHVybiB6ZXJvIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBudW1iZXIgb24gZmFpbHVyZS4KLSAqIAorICoKICAqIFZlcmlmaWVzIHRoZSBBR1AgZGV2aWNlIGlzIHByZXNlbnQgYW5kIGhhcyBiZWVuIGFjcXVpcmVkLCBhbGxvY2F0ZXMgdGhlCiAgKiBtZW1vcnkgdmlhIGFsbG9jX2FncCgpIGFuZCBjcmVhdGVzIGEgZHJtX2FncF9tZW0gZW50cnkgZm9yIGl0LgogICovCiBpbnQgZHJtX2FncF9hbGxvYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCisJCSAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0JZHJtX2ZpbGVfdAkgKnByaXYJID0gZmlscC0+cHJpdmF0ZV9kYXRhOwotCWRybV9kZXZpY2VfdAkgKmRldgkgPSBwcml2LT5oZWFkLT5kZXY7CisJZHJtX2ZpbGVfdCAqcHJpdiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlkcm1fZGV2aWNlX3QgKmRldiA9IHByaXYtPmhlYWQtPmRldjsKIAlkcm1fYWdwX2J1ZmZlcl90IHJlcXVlc3Q7Ci0JZHJtX2FncF9tZW1fdCAgICAqZW50cnk7Ci0JRFJNX0FHUF9NRU0gICAgICAqbWVtb3J5OwotCXVuc2lnbmVkIGxvbmcgICAgcGFnZXM7Ci0JdTMyIAkJIHR5cGU7CisJZHJtX2FncF9tZW1fdCAqZW50cnk7CisJRFJNX0FHUF9NRU0gKm1lbW9yeTsKKwl1bnNpZ25lZCBsb25nIHBhZ2VzOworCXUzMiB0eXBlOwogCWRybV9hZ3BfYnVmZmVyX3QgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwogCiAJaWYgKCFkZXYtPmFncCB8fCAhZGV2LT5hZ3AtPmFjcXVpcmVkKQpAQCAtMjI0LDcgKzIyNyw3IEBACiAJaWYgKCEoZW50cnkgPSBkcm1fYWxsb2Moc2l6ZW9mKCplbnRyeSksIERSTV9NRU1fQUdQTElTVFMpKSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLSAgIAltZW1zZXQoZW50cnksIDAsIHNpemVvZigqZW50cnkpKTsKKwltZW1zZXQoZW50cnksIDAsIHNpemVvZigqZW50cnkpKTsKIAogCXBhZ2VzID0gKHJlcXVlc3Quc2l6ZSArIFBBR0VfU0laRSAtIDEpIC8gUEFHRV9TSVpFOwogCXR5cGUgPSAodTMyKSByZXF1ZXN0LnR5cGU7CkBAIC0yMzQsMjEgKzIzNywyMSBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQllbnRyeS0+aGFuZGxlICAgID0gKHVuc2lnbmVkIGxvbmcpbWVtb3J5LT5rZXkgKyAxOwotCWVudHJ5LT5tZW1vcnkgICAgPSBtZW1vcnk7Ci0JZW50cnktPmJvdW5kICAgICA9IDA7Ci0JZW50cnktPnBhZ2VzICAgICA9IHBhZ2VzOwotCWVudHJ5LT5wcmV2ICAgICAgPSBOVUxMOwotCWVudHJ5LT5uZXh0ICAgICAgPSBkZXYtPmFncC0+bWVtb3J5OworCWVudHJ5LT5oYW5kbGUgPSAodW5zaWduZWQgbG9uZyltZW1vcnktPmtleSArIDE7CisJZW50cnktPm1lbW9yeSA9IG1lbW9yeTsKKwllbnRyeS0+Ym91bmQgPSAwOworCWVudHJ5LT5wYWdlcyA9IHBhZ2VzOworCWVudHJ5LT5wcmV2ID0gTlVMTDsKKwllbnRyeS0+bmV4dCA9IGRldi0+YWdwLT5tZW1vcnk7CiAJaWYgKGRldi0+YWdwLT5tZW1vcnkpCiAJCWRldi0+YWdwLT5tZW1vcnktPnByZXYgPSBlbnRyeTsKIAlkZXYtPmFncC0+bWVtb3J5ID0gZW50cnk7CiAKLQlyZXF1ZXN0LmhhbmRsZSAgID0gZW50cnktPmhhbmRsZTsKKwlyZXF1ZXN0LmhhbmRsZSA9IGVudHJ5LT5oYW5kbGU7CiAJcmVxdWVzdC5waHlzaWNhbCA9IG1lbW9yeS0+cGh5c2ljYWw7CiAKIAlpZiAoY29weV90b191c2VyKGFyZ3AsICZyZXF1ZXN0LCBzaXplb2YocmVxdWVzdCkpKSB7Ci0JCWRldi0+YWdwLT5tZW1vcnkgICAgICAgPSBlbnRyeS0+bmV4dDsKKwkJZGV2LT5hZ3AtPm1lbW9yeSA9IGVudHJ5LT5uZXh0OwogCQlkZXYtPmFncC0+bWVtb3J5LT5wcmV2ID0gTlVMTDsKIAkJZHJtX2ZyZWVfYWdwKG1lbW9yeSwgcGFnZXMpOwogCQlkcm1fZnJlZShlbnRyeSwgc2l6ZW9mKCplbnRyeSksIERSTV9NRU1fQUdQTElTVFMpOwpAQCAtMjYzLDExICsyNjYsMTEgQEAKICAqIFxwYXJhbSBkZXYgRFJNIGRldmljZSBzdHJ1Y3R1cmUuCiAgKiBccGFyYW0gaGFuZGxlIEFHUCBtZW1vcnkgaGFuZGxlLgogICogXHJldHVybiBwb2ludGVyIHRvIHRoZSBkcm1fYWdwX21lbSBzdHJ1Y3R1cmUgYXNzb2NpYXRlZCB3aXRoIFxwIGhhbmRsZS4KLSAqIAorICoKICAqIFdhbGtzIHRocm91Z2ggZHJtX2FncF9oZWFkOjptZW1vcnkgdW50aWwgZmluZGluZyBhIG1hdGNoaW5nIGhhbmRsZS4KICAqLwotc3RhdGljIGRybV9hZ3BfbWVtX3QgKmRybV9hZ3BfbG9va3VwX2VudHJ5KGRybV9kZXZpY2VfdCAqZGV2LAotCQkJCQkgICAgdW5zaWduZWQgbG9uZyBoYW5kbGUpCitzdGF0aWMgZHJtX2FncF9tZW1fdCAqZHJtX2FncF9sb29rdXBfZW50cnkoZHJtX2RldmljZV90ICogZGV2LAorCQkJCQkgICB1bnNpZ25lZCBsb25nIGhhbmRsZSkKIHsKIAlkcm1fYWdwX21lbV90ICplbnRyeTsKIApAQCAtMjkxLDE3ICsyOTQsMTggQEAKICAqIGVudHJ5IGFuZCBwYXNzZXMgaXQgdG8gdGhlIHVuYmluZF9hZ3AoKSBmdW5jdGlvbi4KICAqLwogaW50IGRybV9hZ3BfdW5iaW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAotCQkgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCisJCSAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCWRybV9maWxlX3QJICAqcHJpdgkgPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0JZHJtX2RldmljZV90CSAgKmRldgkgPSBwcml2LT5oZWFkLT5kZXY7CisJZHJtX2ZpbGVfdCAqcHJpdiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlkcm1fZGV2aWNlX3QgKmRldiA9IHByaXYtPmhlYWQtPmRldjsKIAlkcm1fYWdwX2JpbmRpbmdfdCByZXF1ZXN0OwotCWRybV9hZ3BfbWVtX3QgICAgICplbnRyeTsKKwlkcm1fYWdwX21lbV90ICplbnRyeTsKIAlpbnQgcmV0OwogCiAJaWYgKCFkZXYtPmFncCB8fCAhZGV2LT5hZ3AtPmFjcXVpcmVkKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoY29weV9mcm9tX3VzZXIoJnJlcXVlc3QsIChkcm1fYWdwX2JpbmRpbmdfdCBfX3VzZXIgKilhcmcsIHNpemVvZihyZXF1ZXN0KSkpCisJaWYgKGNvcHlfZnJvbV91c2VyCisJICAgICgmcmVxdWVzdCwgKGRybV9hZ3BfYmluZGluZ190IF9fdXNlciAqKSBhcmcsIHNpemVvZihyZXF1ZXN0KSkpCiAJCXJldHVybiAtRUZBVUxUOwogCWlmICghKGVudHJ5ID0gZHJtX2FncF9sb29rdXBfZW50cnkoZGV2LCByZXF1ZXN0LmhhbmRsZSkpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTMwOSw3ICszMTMsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAlyZXQgPSBkcm1fdW5iaW5kX2FncChlbnRyeS0+bWVtb3J5KTsKIAlpZiAocmV0ID09IDApCi0JICAgIGVudHJ5LT5ib3VuZCA9IDA7CisJCWVudHJ5LT5ib3VuZCA9IDA7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzI3LDE4ICszMzEsMTkgQEAKICAqIGl0IHRvIGJpbmRfYWdwKCkgZnVuY3Rpb24uCiAgKi8KIGludCBkcm1fYWdwX2JpbmQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCi0JCSAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCisJCSB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlkcm1fZmlsZV90CSAgKnByaXYJID0gZmlscC0+cHJpdmF0ZV9kYXRhOwotCWRybV9kZXZpY2VfdAkgICpkZXYJID0gcHJpdi0+aGVhZC0+ZGV2OworCWRybV9maWxlX3QgKnByaXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJZHJtX2RldmljZV90ICpkZXYgPSBwcml2LT5oZWFkLT5kZXY7CiAJZHJtX2FncF9iaW5kaW5nX3QgcmVxdWVzdDsKLQlkcm1fYWdwX21lbV90ICAgICAqZW50cnk7Ci0JaW50ICAgICAgICAgICAgICAgcmV0Y29kZTsKLQlpbnQgICAgICAgICAgICAgICBwYWdlOworCWRybV9hZ3BfbWVtX3QgKmVudHJ5OworCWludCByZXRjb2RlOworCWludCBwYWdlOwogCiAJaWYgKCFkZXYtPmFncCB8fCAhZGV2LT5hZ3AtPmFjcXVpcmVkKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoY29weV9mcm9tX3VzZXIoJnJlcXVlc3QsIChkcm1fYWdwX2JpbmRpbmdfdCBfX3VzZXIgKilhcmcsIHNpemVvZihyZXF1ZXN0KSkpCisJaWYgKGNvcHlfZnJvbV91c2VyCisJICAgICgmcmVxdWVzdCwgKGRybV9hZ3BfYmluZGluZ190IF9fdXNlciAqKSBhcmcsIHNpemVvZihyZXF1ZXN0KSkpCiAJCXJldHVybiAtRUZBVUxUOwogCWlmICghKGVudHJ5ID0gZHJtX2FncF9sb29rdXBfZW50cnkoZGV2LCByZXF1ZXN0LmhhbmRsZSkpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTM2OCwxNiArMzczLDE3IEBACiAgKiBhbmQgdW5saW5rcyBmcm9tIHRoZSBkb3VibHkgbGlua2VkIGxpc3QgaXQncyBpbnNlcnRlZCBpbi4KICAqLwogaW50IGRybV9hZ3BfZnJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKKwkJIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCWRybV9maWxlX3QJICpwcml2CSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKLQlkcm1fZGV2aWNlX3QJICpkZXYJID0gcHJpdi0+aGVhZC0+ZGV2OworCWRybV9maWxlX3QgKnByaXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJZHJtX2RldmljZV90ICpkZXYgPSBwcml2LT5oZWFkLT5kZXY7CiAJZHJtX2FncF9idWZmZXJfdCByZXF1ZXN0OwotCWRybV9hZ3BfbWVtX3QgICAgKmVudHJ5OworCWRybV9hZ3BfbWVtX3QgKmVudHJ5OwogCiAJaWYgKCFkZXYtPmFncCB8fCAhZGV2LT5hZ3AtPmFjcXVpcmVkKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoY29weV9mcm9tX3VzZXIoJnJlcXVlc3QsIChkcm1fYWdwX2J1ZmZlcl90IF9fdXNlciAqKWFyZywgc2l6ZW9mKHJlcXVlc3QpKSkKKwlpZiAoY29weV9mcm9tX3VzZXIKKwkgICAgKCZyZXF1ZXN0LCAoZHJtX2FncF9idWZmZXJfdCBfX3VzZXIgKikgYXJnLCBzaXplb2YocmVxdWVzdCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAlpZiAoIShlbnRyeSA9IGRybV9hZ3BfbG9va3VwX2VudHJ5KGRldiwgcmVxdWVzdC5oYW5kbGUpKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC00MDMsOSArNDA5LDkgQEAKICAqIFxyZXR1cm4gcG9pbnRlciB0byBhIGRybV9hZ3BfaGVhZCBzdHJ1Y3R1cmUuCiAgKgogICovCi1kcm1fYWdwX2hlYWRfdCAqZHJtX2FncF9pbml0KGRybV9kZXZpY2VfdCAqZGV2KQorZHJtX2FncF9oZWFkX3QgKmRybV9hZ3BfaW5pdChkcm1fZGV2aWNlX3QgKiBkZXYpCiB7Ci0JZHJtX2FncF9oZWFkX3QgKmhlYWQgICAgICAgICA9IE5VTEw7CisJZHJtX2FncF9oZWFkX3QgKmhlYWQgPSBOVUxMOwogCiAJaWYgKCEoaGVhZCA9IGRybV9hbGxvYyhzaXplb2YoKmhlYWQpLCBEUk1fTUVNX0FHUExJU1RTKSkpCiAJCXJldHVybiBOVUxMOwpAQCAtNDMzLDEzICs0MzksMTQgQEAKIH0KIAogLyoqIENhbGxzIGFncF9hbGxvY2F0ZV9tZW1vcnkoKSAqLwotRFJNX0FHUF9NRU0gKmRybV9hZ3BfYWxsb2NhdGVfbWVtb3J5KHN0cnVjdCBhZ3BfYnJpZGdlX2RhdGEgKmJyaWRnZSwgc2l6ZV90IHBhZ2VzLCB1MzIgdHlwZSkKK0RSTV9BR1BfTUVNICpkcm1fYWdwX2FsbG9jYXRlX21lbW9yeShzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICogYnJpZGdlLAorCQkJCSAgICAgc2l6ZV90IHBhZ2VzLCB1MzIgdHlwZSkKIHsKIAlyZXR1cm4gYWdwX2FsbG9jYXRlX21lbW9yeShicmlkZ2UsIHBhZ2VzLCB0eXBlKTsKIH0KIAogLyoqIENhbGxzIGFncF9mcmVlX21lbW9yeSgpICovCi1pbnQgZHJtX2FncF9mcmVlX21lbW9yeShEUk1fQUdQX01FTSAqaGFuZGxlKQoraW50IGRybV9hZ3BfZnJlZV9tZW1vcnkoRFJNX0FHUF9NRU0gKiBoYW5kbGUpCiB7CiAJaWYgKCFoYW5kbGUpCiAJCXJldHVybiAwOwpAQCAtNDQ4LDIwICs0NTUsMjEgQEAKIH0KIAogLyoqIENhbGxzIGFncF9iaW5kX21lbW9yeSgpICovCi1pbnQgZHJtX2FncF9iaW5kX21lbW9yeShEUk1fQUdQX01FTSAqaGFuZGxlLCBvZmZfdCBzdGFydCkKK2ludCBkcm1fYWdwX2JpbmRfbWVtb3J5KERSTV9BR1BfTUVNICogaGFuZGxlLCBvZmZfdCBzdGFydCkKIHsKIAlpZiAoIWhhbmRsZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJcmV0dXJuIGFncF9iaW5kX21lbW9yeShoYW5kbGUsIHN0YXJ0KTsKIH0KKwogRVhQT1JUX1NZTUJPTChkcm1fYWdwX2JpbmRfbWVtb3J5KTsKIAogLyoqIENhbGxzIGFncF91bmJpbmRfbWVtb3J5KCkgKi8KLWludCBkcm1fYWdwX3VuYmluZF9tZW1vcnkoRFJNX0FHUF9NRU0gKmhhbmRsZSkKK2ludCBkcm1fYWdwX3VuYmluZF9tZW1vcnkoRFJNX0FHUF9NRU0gKiBoYW5kbGUpCiB7CiAJaWYgKCFoYW5kbGUpCiAJCXJldHVybiAtRUlOVkFMOwogCXJldHVybiBhZ3BfdW5iaW5kX21lbW9yeShoYW5kbGUpOwogfQogCi0jZW5kaWYgLyogX19PU19IQVNfQUdQICovCisjZW5kaWYJCQkJLyogX19PU19IQVNfQUdQICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9hdXRoLmMgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9hdXRoLmMKaW5kZXggZGQxNDBiYy4uYTQ3YjUwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1fYXV0aC5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX2F1dGguYwpAQCAtMSw1ICsxLDUgQEAKIC8qKgotICogXGZpbGUgZHJtX2F1dGguaCAKKyAqIFxmaWxlIGRybV9hdXRoLmMKICAqIElPQ1RMcyBmb3IgYXV0aGVudGljYXRpb24KICAqCiAgKiBcYXV0aG9yIFJpY2thcmQgRS4gKFJpaykgRmFpdGggPGZhaXRoQHZhbGludXguY29tPgpAQCAtNDYsNyArNDYsNyBAQAogICovCiBzdGF0aWMgaW50IGRybV9oYXNoX21hZ2ljKGRybV9tYWdpY190IG1hZ2ljKQogewotCXJldHVybiBtYWdpYyAmIChEUk1fSEFTSF9TSVpFLTEpOworCXJldHVybiBtYWdpYyAmIChEUk1fSEFTSF9TSVpFIC0gMSk7CiB9CiAKIC8qKgpAQCAtNTksMTEgKzU5LDExIEBACiAgKiB0aGUgb25lIHdpdGggbWF0Y2hpbmcgbWFnaWMgbnVtYmVyLCB3aGlsZSBob2xkaW5nIHRoZSBkcm1fZGV2aWNlOjpzdHJ1Y3Rfc2VtCiAgKiBsb2NrLgogICovCi1zdGF0aWMgZHJtX2ZpbGVfdCAqZHJtX2ZpbmRfZmlsZShkcm1fZGV2aWNlX3QgKmRldiwgZHJtX21hZ2ljX3QgbWFnaWMpCitzdGF0aWMgZHJtX2ZpbGVfdCAqZHJtX2ZpbmRfZmlsZShkcm1fZGV2aWNlX3QgKiBkZXYsIGRybV9tYWdpY190IG1hZ2ljKQogewotCWRybV9maWxlX3QJICAqcmV0dmFsID0gTlVMTDsKKwlkcm1fZmlsZV90ICpyZXR2YWwgPSBOVUxMOwogCWRybV9tYWdpY19lbnRyeV90ICpwdDsKLQlpbnQJCSAgaGFzaAkgID0gZHJtX2hhc2hfbWFnaWMobWFnaWMpOworCWludCBoYXNoID0gZHJtX2hhc2hfbWFnaWMobWFnaWMpOwogCiAJZG93bigmZGV2LT5zdHJ1Y3Rfc2VtKTsKIAlmb3IgKHB0ID0gZGV2LT5tYWdpY2xpc3RbaGFzaF0uaGVhZDsgcHQ7IHB0ID0gcHQtPm5leHQpIHsKQEAgLTc4LDcgKzc4LDcgQEAKIAogLyoqCiAgKiBBZGRzIGEgbWFnaWMgbnVtYmVyLgotICogCisgKgogICogXHBhcmFtIGRldiBEUk0gZGV2aWNlLgogICogXHBhcmFtIHByaXYgZmlsZSBwcml2YXRlIGRhdGEuCiAgKiBccGFyYW0gbWFnaWMgbWFnaWMgbnVtYmVyLgpAQCAtODcsMjggKzg3LDMwIEBACiAgKiBhc3NvY2lhdGVkIHRoZSBtYWdpYyBudW1iZXIgaGFzaCBrZXkgaW4gZHJtX2RldmljZTo6bWFnaWNsaXN0LCB3aGlsZSBob2xkaW5nCiAgKiB0aGUgZHJtX2RldmljZTo6c3RydWN0X3NlbSBsb2NrLgogICovCi1zdGF0aWMgaW50IGRybV9hZGRfbWFnaWMoZHJtX2RldmljZV90ICpkZXYsIGRybV9maWxlX3QgKnByaXYsIGRybV9tYWdpY190IG1hZ2ljKQorc3RhdGljIGludCBkcm1fYWRkX21hZ2ljKGRybV9kZXZpY2VfdCAqIGRldiwgZHJtX2ZpbGVfdCAqIHByaXYsCisJCQkgZHJtX21hZ2ljX3QgbWFnaWMpCiB7Ci0JaW50CQkgIGhhc2g7CisJaW50IGhhc2g7CiAJZHJtX21hZ2ljX2VudHJ5X3QgKmVudHJ5OwogCiAJRFJNX0RFQlVHKCIlZFxuIiwgbWFnaWMpOwogCi0JaGFzaAkgICAgID0gZHJtX2hhc2hfbWFnaWMobWFnaWMpOwotCWVudHJ5CSAgICAgPSBkcm1fYWxsb2Moc2l6ZW9mKCplbnRyeSksIERSTV9NRU1fTUFHSUMpOwotCWlmICghZW50cnkpIHJldHVybiAtRU5PTUVNOworCWhhc2ggPSBkcm1faGFzaF9tYWdpYyhtYWdpYyk7CisJZW50cnkgPSBkcm1fYWxsb2Moc2l6ZW9mKCplbnRyeSksIERSTV9NRU1fTUFHSUMpOworCWlmICghZW50cnkpCisJCXJldHVybiAtRU5PTUVNOwogCW1lbXNldChlbnRyeSwgMCwgc2l6ZW9mKCplbnRyeSkpOwogCWVudHJ5LT5tYWdpYyA9IG1hZ2ljOwotCWVudHJ5LT5wcml2ICA9IHByaXY7Ci0JZW50cnktPm5leHQgID0gTlVMTDsKKwllbnRyeS0+cHJpdiA9IHByaXY7CisJZW50cnktPm5leHQgPSBOVUxMOwogCiAJZG93bigmZGV2LT5zdHJ1Y3Rfc2VtKTsKIAlpZiAoZGV2LT5tYWdpY2xpc3RbaGFzaF0udGFpbCkgewogCQlkZXYtPm1hZ2ljbGlzdFtoYXNoXS50YWlsLT5uZXh0ID0gZW50cnk7Ci0JCWRldi0+bWFnaWNsaXN0W2hhc2hdLnRhaWwJPSBlbnRyeTsKKwkJZGV2LT5tYWdpY2xpc3RbaGFzaF0udGFpbCA9IGVudHJ5OwogCX0gZWxzZSB7Ci0JCWRldi0+bWFnaWNsaXN0W2hhc2hdLmhlYWQJPSBlbnRyeTsKLQkJZGV2LT5tYWdpY2xpc3RbaGFzaF0udGFpbAk9IGVudHJ5OworCQlkZXYtPm1hZ2ljbGlzdFtoYXNoXS5oZWFkID0gZW50cnk7CisJCWRldi0+bWFnaWNsaXN0W2hhc2hdLnRhaWwgPSBlbnRyeTsKIAl9CiAJdXAoJmRldi0+c3RydWN0X3NlbSk7CiAKQEAgLTExNywxOSArMTE5LDE4IEBACiAKIC8qKgogICogUmVtb3ZlIGEgbWFnaWMgbnVtYmVyLgotICogCisgKgogICogXHBhcmFtIGRldiBEUk0gZGV2aWNlLgogICogXHBhcmFtIG1hZ2ljIG1hZ2ljIG51bWJlci4KICAqCiAgKiBTZWFyY2hlcyBhbmQgdW5saW5rcyB0aGUgZW50cnkgaW4gZHJtX2RldmljZTo6bWFnaWNsaXN0IHdpdGggdGhlIG1hZ2ljCiAgKiBudW1iZXIgaGFzaCBrZXksIHdoaWxlIGhvbGRpbmcgdGhlIGRybV9kZXZpY2U6OnN0cnVjdF9zZW0gbG9jay4KICAqLwotc3RhdGljIGludCBkcm1fcmVtb3ZlX21hZ2ljKGRybV9kZXZpY2VfdCAqZGV2LCBkcm1fbWFnaWNfdCBtYWdpYykKK3N0YXRpYyBpbnQgZHJtX3JlbW92ZV9tYWdpYyhkcm1fZGV2aWNlX3QgKiBkZXYsIGRybV9tYWdpY190IG1hZ2ljKQogewogCWRybV9tYWdpY19lbnRyeV90ICpwcmV2ID0gTlVMTDsKIAlkcm1fbWFnaWNfZW50cnlfdCAqcHQ7Ci0JaW50CQkgIGhhc2g7Ci0KKwlpbnQgaGFzaDsKIAogCURSTV9ERUJVRygiJWRcbiIsIG1hZ2ljKTsKIAloYXNoID0gZHJtX2hhc2hfbWFnaWMobWFnaWMpOwpAQCAtMTcxLDIxICsxNzIsMjIgQEAKICAqIGZpbHAuCiAgKi8KIGludCBkcm1fZ2V0bWFnaWMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCi0JCSAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCisJCSB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdGF0aWMgZHJtX21hZ2ljX3Qgc2VxdWVuY2UgPSAwOwogCXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobG9jayk7Ci0JZHJtX2ZpbGVfdAkgICAqcHJpdiAgICA9IGZpbHAtPnByaXZhdGVfZGF0YTsKLQlkcm1fZGV2aWNlX3QJICAgKmRldgkgICAgPSBwcml2LT5oZWFkLT5kZXY7Ci0JZHJtX2F1dGhfdAkgICBhdXRoOworCWRybV9maWxlX3QgKnByaXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJZHJtX2RldmljZV90ICpkZXYgPSBwcml2LT5oZWFkLT5kZXY7CisJZHJtX2F1dGhfdCBhdXRoOwogCi0JCQkJLyogRmluZCB1bmlxdWUgbWFnaWMgKi8KKwkvKiBGaW5kIHVuaXF1ZSBtYWdpYyAqLwogCWlmIChwcml2LT5tYWdpYykgewogCQlhdXRoLm1hZ2ljID0gcHJpdi0+bWFnaWM7CiAJfSBlbHNlIHsKIAkJZG8gewogCQkJc3Bpbl9sb2NrKCZsb2NrKTsKLQkJCWlmICghc2VxdWVuY2UpICsrc2VxdWVuY2U7IC8qIHJlc2VydmUgMCAqLworCQkJaWYgKCFzZXF1ZW5jZSkKKwkJCQkrK3NlcXVlbmNlOwkvKiByZXNlcnZlIDAgKi8KIAkJCWF1dGgubWFnaWMgPSBzZXF1ZW5jZSsrOwogCQkJc3Bpbl91bmxvY2soJmxvY2spOwogCQl9IHdoaWxlIChkcm1fZmluZF9maWxlKGRldiwgYXV0aC5tYWdpYykpOwpAQCAtMTk0LDcgKzE5Niw3IEBACiAJfQogCiAJRFJNX0RFQlVHKCIldVxuIiwgYXV0aC5tYWdpYyk7Ci0JaWYgKGNvcHlfdG9fdXNlcigoZHJtX2F1dGhfdCBfX3VzZXIgKilhcmcsICZhdXRoLCBzaXplb2YoYXV0aCkpKQorCWlmIChjb3B5X3RvX3VzZXIoKGRybV9hdXRoX3QgX191c2VyICopIGFyZywgJmF1dGgsIHNpemVvZihhdXRoKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCXJldHVybiAwOwogfQpAQCAtMjExLDE0ICsyMTMsMTQgQEAKICAqIENoZWNrcyBpZiBccCBmaWxwIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWFnaWMgbnVtYmVyIHBhc3NlZCBpbiBcYXJnLgogICovCiBpbnQgZHJtX2F1dGhtYWdpYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCisJCSAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0JZHJtX2ZpbGVfdAkgICAqcHJpdiAgICA9IGZpbHAtPnByaXZhdGVfZGF0YTsKLQlkcm1fZGV2aWNlX3QJICAgKmRldgkgICAgPSBwcml2LT5oZWFkLT5kZXY7Ci0JZHJtX2F1dGhfdAkgICBhdXRoOwotCWRybV9maWxlX3QJICAgKmZpbGU7CisJZHJtX2ZpbGVfdCAqcHJpdiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlkcm1fZGV2aWNlX3QgKmRldiA9IHByaXYtPmhlYWQtPmRldjsKKwlkcm1fYXV0aF90IGF1dGg7CisJZHJtX2ZpbGVfdCAqZmlsZTsKIAotCWlmIChjb3B5X2Zyb21fdXNlcigmYXV0aCwgKGRybV9hdXRoX3QgX191c2VyICopYXJnLCBzaXplb2YoYXV0aCkpKQorCWlmIChjb3B5X2Zyb21fdXNlcigmYXV0aCwgKGRybV9hdXRoX3QgX191c2VyICopIGFyZywgc2l6ZW9mKGF1dGgpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJRFJNX0RFQlVHKCIldVxuIiwgYXV0aC5tYWdpYyk7CiAJaWYgKChmaWxlID0gZHJtX2ZpbmRfZmlsZShkZXYsIGF1dGgubWFnaWMpKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9kcm1fYnVmcy5jIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fYnVmcy5jCmluZGV4IGYyOGU3MGEuLmJiOTg5Y2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX2J1ZnMuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9idWZzLmMKQEAgLTEsNyArMSw3IEBACiAvKioKLSAqIFxmaWxlIGRybV9idWZzLmggCisgKiBcZmlsZSBkcm1fYnVmcy5jCiAgKiBHZW5lcmljIGJ1ZmZlciB0ZW1wbGF0ZQotICogCisgKgogICogXGF1dGhvciBSaWNrYXJkIEUuIChSaWspIEZhaXRoIDxmYWl0aEB2YWxpbnV4LmNvbT4KICAqIFxhdXRob3IgR2FyZXRoIEh1Z2hlcyA8Z2FyZXRoQHZhbGludXguY29tPgogICovCkBAIC0zNiwyMCArMzYsMjIgQEAKICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSAiZHJtUC5oIgogCi11bnNpZ25lZCBsb25nIGRybV9nZXRfcmVzb3VyY2Vfc3RhcnQoZHJtX2RldmljZV90ICpkZXYsIHVuc2lnbmVkIGludCByZXNvdXJjZSkKK3Vuc2lnbmVkIGxvbmcgZHJtX2dldF9yZXNvdXJjZV9zdGFydChkcm1fZGV2aWNlX3QgKiBkZXYsIHVuc2lnbmVkIGludCByZXNvdXJjZSkKIHsKIAlyZXR1cm4gcGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGRldiwgcmVzb3VyY2UpOwogfQorCiBFWFBPUlRfU1lNQk9MKGRybV9nZXRfcmVzb3VyY2Vfc3RhcnQpOwogCi11bnNpZ25lZCBsb25nIGRybV9nZXRfcmVzb3VyY2VfbGVuKGRybV9kZXZpY2VfdCAqZGV2LCB1bnNpZ25lZCBpbnQgcmVzb3VyY2UpCit1bnNpZ25lZCBsb25nIGRybV9nZXRfcmVzb3VyY2VfbGVuKGRybV9kZXZpY2VfdCAqIGRldiwgdW5zaWduZWQgaW50IHJlc291cmNlKQogewogCXJldHVybiBwY2lfcmVzb3VyY2VfbGVuKGRldi0+cGRldiwgcmVzb3VyY2UpOwogfQorCiBFWFBPUlRfU1lNQk9MKGRybV9nZXRfcmVzb3VyY2VfbGVuKTsKIAotc3RhdGljIGRybV9tYXBfbGlzdF90ICpkcm1fZmluZF9tYXRjaGluZ19tYXAoZHJtX2RldmljZV90ICpkZXYsCi0JCQkJCSAgICAgZHJtX2xvY2FsX21hcF90ICptYXApCitzdGF0aWMgZHJtX21hcF9saXN0X3QgKmRybV9maW5kX21hdGNoaW5nX21hcChkcm1fZGV2aWNlX3QgKiBkZXYsCisJCQkJCSAgICAgZHJtX2xvY2FsX21hcF90ICogbWFwKQogewogCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CiAKQEAgLTcxLDcgKzczLDggQEAKICNkZWZpbmUgRU5EX1JBTkdFIDB4NDAwMDAwMDAKIAogI2lmZGVmIF9MUDY0Ci1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgSGFuZGxlSUQodW5zaWduZWQgbG9uZyBsaGFuZGxlLCBkcm1fZGV2aWNlX3QgKmRldikgCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgSGFuZGxlSUQodW5zaWduZWQgbG9uZyBsaGFuZGxlLAorCQkJCQlkcm1fZGV2aWNlX3QgKiBkZXYpCiB7CiAJc3RhdGljIHVuc2lnbmVkIGludCBtYXAzMl9oYW5kbGUgPSBTVEFSVF9SQU5HRTsKIAl1bnNpZ25lZCBpbnQgaGFzaDsKQEAgLTgxLDEyICs4NCwxMiBAQAogCQltYXAzMl9oYW5kbGUgKz0gUEFHRV9TSVpFOwogCQlpZiAobWFwMzJfaGFuZGxlID4gRU5EX1JBTkdFKQogCQkJbWFwMzJfaGFuZGxlID0gU1RBUlRfUkFOR0U7Ci0JfSBlbHNlIAorCX0gZWxzZQogCQloYXNoID0gbGhhbmRsZTsKIAogCXdoaWxlICgxKSB7CiAJCWRybV9tYXBfbGlzdF90ICpfZW50cnk7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkoX2VudHJ5LCAmZGV2LT5tYXBsaXN0LT5oZWFkLGhlYWQpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShfZW50cnksICZkZXYtPm1hcGxpc3QtPmhlYWQsIGhlYWQpIHsKIAkJCWlmIChfZW50cnktPnVzZXJfdG9rZW4gPT0gaGFzaCkKIAkJCQlicmVhazsKIAkJfQpAQCAtMTE2LDE0ICsxMTksMTQgQEAKICAqLwogaW50IGRybV9hZGRtYXBfY29yZShkcm1fZGV2aWNlX3QgKiBkZXYsIHVuc2lnbmVkIGludCBvZmZzZXQsCiAJCSAgICB1bnNpZ25lZCBpbnQgc2l6ZSwgZHJtX21hcF90eXBlX3QgdHlwZSwKLQkJICAgIGRybV9tYXBfZmxhZ3NfdCBmbGFncywgZHJtX21hcF9saXN0X3QgKiptYXBsaXN0KQorCQkgICAgZHJtX21hcF9mbGFnc190IGZsYWdzLCBkcm1fbWFwX2xpc3RfdCAqKiBtYXBsaXN0KQogewogCWRybV9tYXBfdCAqbWFwOwogCWRybV9tYXBfbGlzdF90ICpsaXN0OwogCWRybV9kbWFfaGFuZGxlX3QgKmRtYWg7CiAKLQltYXAgPSBkcm1fYWxsb2MoIHNpemVvZigqbWFwKSwgRFJNX01FTV9NQVBTICk7Ci0JaWYgKCAhbWFwICkKKwltYXAgPSBkcm1fYWxsb2Moc2l6ZW9mKCptYXApLCBEUk1fTUVNX01BUFMpOworCWlmICghbWFwKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCW1hcC0+b2Zmc2V0ID0gb2Zmc2V0OwpAQCAtMTM1LDI2ICsxMzgsMjYgQEAKIAkgKiBib29rIGtlZXBpbmcgaW5mb3JtYXRpb24gYWJvdXQgc2hhcmVkIG1lbW9yeSB0byBhbGxvdyBmb3IgcmVtb3ZhbAogCSAqIHdoZW4gcHJvY2Vzc2VzIGZvcmsuCiAJICovCi0JaWYgKCAobWFwLT5mbGFncyAmIF9EUk1fUkVNT1ZBQkxFKSAmJiBtYXAtPnR5cGUgIT0gX0RSTV9TSE0gKSB7Ci0JCWRybV9mcmVlKCBtYXAsIHNpemVvZigqbWFwKSwgRFJNX01FTV9NQVBTICk7CisJaWYgKChtYXAtPmZsYWdzICYgX0RSTV9SRU1PVkFCTEUpICYmIG1hcC0+dHlwZSAhPSBfRFJNX1NITSkgeworCQlkcm1fZnJlZShtYXAsIHNpemVvZigqbWFwKSwgRFJNX01FTV9NQVBTKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCURSTV9ERUJVRyggIm9mZnNldCA9IDB4JTA4bHgsIHNpemUgPSAweCUwOGx4LCB0eXBlID0gJWRcbiIsCi0JCSAgIG1hcC0+b2Zmc2V0LCBtYXAtPnNpemUsIG1hcC0+dHlwZSApOwotCWlmICggKG1hcC0+b2Zmc2V0ICYgKH5QQUdFX01BU0spKSB8fCAobWFwLT5zaXplICYgKH5QQUdFX01BU0spKSApIHsKLQkJZHJtX2ZyZWUoIG1hcCwgc2l6ZW9mKCptYXApLCBEUk1fTUVNX01BUFMgKTsKKwlEUk1fREVCVUcoIm9mZnNldCA9IDB4JTA4bHgsIHNpemUgPSAweCUwOGx4LCB0eXBlID0gJWRcbiIsCisJCSAgbWFwLT5vZmZzZXQsIG1hcC0+c2l6ZSwgbWFwLT50eXBlKTsKKwlpZiAoKG1hcC0+b2Zmc2V0ICYgKH5QQUdFX01BU0spKSB8fCAobWFwLT5zaXplICYgKH5QQUdFX01BU0spKSkgeworCQlkcm1fZnJlZShtYXAsIHNpemVvZigqbWFwKSwgRFJNX01FTV9NQVBTKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCW1hcC0+bXRyciAgID0gLTE7CisJbWFwLT5tdHJyID0gLTE7CiAJbWFwLT5oYW5kbGUgPSBOVUxMOwogCi0Jc3dpdGNoICggbWFwLT50eXBlICkgeworCXN3aXRjaCAobWFwLT50eXBlKSB7CiAJY2FzZSBfRFJNX1JFR0lTVEVSUzoKIAljYXNlIF9EUk1fRlJBTUVfQlVGRkVSOgogI2lmICFkZWZpbmVkKF9fc3BhcmNfXykgJiYgIWRlZmluZWQoX19hbHBoYV9fKSAmJiAhZGVmaW5lZChfX2lhNjRfXykgJiYgIWRlZmluZWQoX19wb3dlcnBjNjRfXykgJiYgIWRlZmluZWQoX194ODZfNjRfXykKLQkJaWYgKCBtYXAtPm9mZnNldCArIG1hcC0+c2l6ZSA8IG1hcC0+b2Zmc2V0IHx8Ci0JCSAgICAgbWFwLT5vZmZzZXQgPCB2aXJ0X3RvX3BoeXMoaGlnaF9tZW1vcnkpICkgewotCQkJZHJtX2ZyZWUoIG1hcCwgc2l6ZW9mKCptYXApLCBEUk1fTUVNX01BUFMgKTsKKwkJaWYgKG1hcC0+b2Zmc2V0ICsgbWFwLT5zaXplIDwgbWFwLT5vZmZzZXQgfHwKKwkJICAgIG1hcC0+b2Zmc2V0IDwgdmlydF90b19waHlzKGhpZ2hfbWVtb3J5KSkgeworCQkJZHJtX2ZyZWUobWFwLCBzaXplb2YoKm1hcCksIERSTV9NRU1fTUFQUyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogI2VuZGlmCkBAIC0xNjksOCArMTcyLDkgQEAKIAkJaWYgKGxpc3QgIT0gTlVMTCkgewogCQkJaWYgKGxpc3QtPm1hcC0+c2l6ZSAhPSBtYXAtPnNpemUpIHsKIAkJCQlEUk1fREVCVUcoIk1hdGNoaW5nIG1hcHMgb2YgdHlwZSAlZCB3aXRoICIKLQkJCQkgICAibWlzbWF0Y2hlZCBzaXplcywgKCVsZCB2cyAlbGQpXG4iLAotCQkJCSAgICBtYXAtPnR5cGUsIG1hcC0+c2l6ZSwgbGlzdC0+bWFwLT5zaXplKTsKKwkJCQkJICAibWlzbWF0Y2hlZCBzaXplcywgKCVsZCB2cyAlbGQpXG4iLAorCQkJCQkgIG1hcC0+dHlwZSwgbWFwLT5zaXplLAorCQkJCQkgIGxpc3QtPm1hcC0+c2l6ZSk7CiAJCQkJbGlzdC0+bWFwLT5zaXplID0gbWFwLT5zaXplOwogCQkJfQogCkBAIC0xODAsMzUgKzE4NCwzMyBAQAogCQl9CiAKIAkJaWYgKGRybV9jb3JlX2hhc19NVFJSKGRldikpIHsKLQkJCWlmICggbWFwLT50eXBlID09IF9EUk1fRlJBTUVfQlVGRkVSIHx8Ci0JCQkgICAgIChtYXAtPmZsYWdzICYgX0RSTV9XUklURV9DT01CSU5JTkcpICkgewotCQkJCW1hcC0+bXRyciA9IG10cnJfYWRkKCBtYXAtPm9mZnNldCwgbWFwLT5zaXplLAotCQkJCQkJICAgICAgTVRSUl9UWVBFX1dSQ09NQiwgMSApOworCQkJaWYgKG1hcC0+dHlwZSA9PSBfRFJNX0ZSQU1FX0JVRkZFUiB8fAorCQkJICAgIChtYXAtPmZsYWdzICYgX0RSTV9XUklURV9DT01CSU5JTkcpKSB7CisJCQkJbWFwLT5tdHJyID0gbXRycl9hZGQobWFwLT5vZmZzZXQsIG1hcC0+c2l6ZSwKKwkJCQkJCSAgICAgTVRSUl9UWVBFX1dSQ09NQiwgMSk7CiAJCQl9CiAJCX0KIAkJaWYgKG1hcC0+dHlwZSA9PSBfRFJNX1JFR0lTVEVSUykKLQkJCW1hcC0+aGFuZGxlID0gZHJtX2lvcmVtYXAoIG1hcC0+b2Zmc2V0LCBtYXAtPnNpemUsCi0JCQkJCQkgICAgZGV2ICk7CisJCQltYXAtPmhhbmRsZSA9IGRybV9pb3JlbWFwKG1hcC0+b2Zmc2V0LCBtYXAtPnNpemUsIGRldik7CiAJCWJyZWFrOwogCiAJY2FzZSBfRFJNX1NITToKIAkJbWFwLT5oYW5kbGUgPSB2bWFsbG9jXzMyKG1hcC0+c2l6ZSk7Ci0JCURSTV9ERUJVRyggIiVsdSAlZCAlcFxuIiwKLQkJCSAgIG1hcC0+c2l6ZSwgZHJtX29yZGVyKCBtYXAtPnNpemUgKSwgbWFwLT5oYW5kbGUgKTsKLQkJaWYgKCAhbWFwLT5oYW5kbGUgKSB7Ci0JCQlkcm1fZnJlZSggbWFwLCBzaXplb2YoKm1hcCksIERSTV9NRU1fTUFQUyApOworCQlEUk1fREVCVUcoIiVsdSAlZCAlcFxuIiwKKwkJCSAgbWFwLT5zaXplLCBkcm1fb3JkZXIobWFwLT5zaXplKSwgbWFwLT5oYW5kbGUpOworCQlpZiAoIW1hcC0+aGFuZGxlKSB7CisJCQlkcm1fZnJlZShtYXAsIHNpemVvZigqbWFwKSwgRFJNX01FTV9NQVBTKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAJCW1hcC0+b2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpbWFwLT5oYW5kbGU7Ci0JCWlmICggbWFwLT5mbGFncyAmIF9EUk1fQ09OVEFJTlNfTE9DSyApIHsKKwkJaWYgKG1hcC0+ZmxhZ3MgJiBfRFJNX0NPTlRBSU5TX0xPQ0spIHsKIAkJCS8qIFByZXZlbnQgYSAybmQgWCBTZXJ2ZXIgZnJvbSBjcmVhdGluZyBhIDJuZCBsb2NrICovCiAJCQlpZiAoZGV2LT5sb2NrLmh3X2xvY2sgIT0gTlVMTCkgewotCQkJCXZmcmVlKCBtYXAtPmhhbmRsZSApOwotCQkJCWRybV9mcmVlKCBtYXAsIHNpemVvZigqbWFwKSwgRFJNX01FTV9NQVBTICk7CisJCQkJdmZyZWUobWFwLT5oYW5kbGUpOworCQkJCWRybV9mcmVlKG1hcCwgc2l6ZW9mKCptYXApLCBEUk1fTUVNX01BUFMpOwogCQkJCXJldHVybiAtRUJVU1k7CiAJCQl9Ci0JCQlkZXYtPnNpZ2RhdGEubG9jayA9Ci0JCQlkZXYtPmxvY2suaHdfbG9jayA9IG1hcC0+aGFuZGxlOyAvKiBQb2ludGVyIHRvIGxvY2sgKi8KKwkJCWRldi0+c2lnZGF0YS5sb2NrID0gZGV2LT5sb2NrLmh3X2xvY2sgPSBtYXAtPmhhbmRsZTsJLyogUG9pbnRlciB0byBsb2NrICovCiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBfRFJNX0FHUDoKQEAgLTIxNyw3ICsyMTksNyBAQAogCQkJbWFwLT5vZmZzZXQgKz0gZGV2LT5ob3NlLT5tZW1fc3BhY2UtPnN0YXJ0OwogI2VuZGlmCiAJCQltYXAtPm9mZnNldCArPSBkZXYtPmFncC0+YmFzZTsKLQkJCW1hcC0+bXRyciAgID0gZGV2LT5hZ3AtPmFncF9tdHJyOyAvKiBmb3IgZ2V0bWFwICovCisJCQltYXAtPm10cnIgPSBkZXYtPmFncC0+YWdwX210cnI7CS8qIGZvciBnZXRtYXAgKi8KIAkJfQogCQlicmVhazsKIAljYXNlIF9EUk1fU0NBVFRFUl9HQVRIRVI6CkBAIC0yMjcsNyArMjI5LDcgQEAKIAkJfQogCQltYXAtPm9mZnNldCArPSAodW5zaWduZWQgbG9uZylkZXYtPnNnLT52aXJ0dWFsOwogCQlicmVhazsKLQljYXNlIF9EUk1fQ09OU0lTVEVOVDogCisJY2FzZSBfRFJNX0NPTlNJU1RFTlQ6CiAJCS8qIGRtYV9hZGRyX3QgaXMgNjRiaXQgb24gaTM4NiB3aXRoIENPTkZJR19ISUdITUVNNjRHLAogCQkgKiBBcyB3ZSdyZSBsaW1pdGluZyB0aGUgYWRkcmVzcyB0byAyXjMyLTEgKG9yIGxlc3MpLAogCQkgKiBjYXN0aW5nIGl0IGRvd24gdG8gMzIgYml0cyBpcyBubyBwcm9ibGVtLCBidXQgd2UKQEAgLTI0MiwxMiArMjQ0LDEyIEBACiAJCWtmcmVlKGRtYWgpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlkcm1fZnJlZSggbWFwLCBzaXplb2YoKm1hcCksIERSTV9NRU1fTUFQUyApOworCQlkcm1fZnJlZShtYXAsIHNpemVvZigqbWFwKSwgRFJNX01FTV9NQVBTKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJbGlzdCA9IGRybV9hbGxvYyhzaXplb2YoKmxpc3QpLCBEUk1fTUVNX01BUFMpOwotCWlmKCFsaXN0KSB7CisJaWYgKCFsaXN0KSB7CiAJCWRybV9mcmVlKG1hcCwgc2l6ZW9mKCptYXApLCBEUk1fTUVNX01BUFMpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0yNTgsMTggKzI2MCwxOCBAQAogCWxpc3RfYWRkKCZsaXN0LT5oZWFkLCAmZGV2LT5tYXBsaXN0LT5oZWFkKTsKIAkvKiBBc3NpZ24gYSAzMi1iaXQgaGFuZGxlICovCiAJLyogV2UgZG8gaXQgaGVyZSBzbyB0aGF0IGRldi0+c3RydWN0X3NlbSBwcm90ZWN0cyB0aGUgaW5jcmVtZW50ICovCi0JbGlzdC0+dXNlcl90b2tlbiA9IEhhbmRsZUlEKG1hcC0+dHlwZT09X0RSTV9TSE0KKwlsaXN0LT51c2VyX3Rva2VuID0gSGFuZGxlSUQobWFwLT50eXBlID09IF9EUk1fU0hNCiAJCQkJICAgID8gKHVuc2lnbmVkIGxvbmcpbWFwLT5oYW5kbGUKIAkJCQkgICAgOiBtYXAtPm9mZnNldCwgZGV2KTsKLSAJdXAoJmRldi0+c3RydWN0X3NlbSk7CisJdXAoJmRldi0+c3RydWN0X3NlbSk7CiAKIAkqbWFwbGlzdCA9IGxpc3Q7CiAJcmV0dXJuIDA7CiB9CiAKLWludCBkcm1fYWRkbWFwKGRybV9kZXZpY2VfdCAqZGV2LCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAoraW50IGRybV9hZGRtYXAoZHJtX2RldmljZV90ICogZGV2LCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAogCSAgICAgICB1bnNpZ25lZCBpbnQgc2l6ZSwgZHJtX21hcF90eXBlX3QgdHlwZSwKLQkgICAgICAgZHJtX21hcF9mbGFnc190IGZsYWdzLCBkcm1fbG9jYWxfbWFwX3QgKiptYXBfcHRyKQorCSAgICAgICBkcm1fbWFwX2ZsYWdzX3QgZmxhZ3MsIGRybV9sb2NhbF9tYXBfdCAqKiBtYXBfcHRyKQogewogCWRybV9tYXBfbGlzdF90ICpsaXN0OwogCWludCByYzsKQEAgLTI3OSw2ICsyODEsNyBAQAogCQkqbWFwX3B0ciA9IGxpc3QtPm1hcDsKIAlyZXR1cm4gcmM7CiB9CisKIEVYUE9SVF9TWU1CT0woZHJtX2FkZG1hcCk7CiAKIGludCBkcm1fYWRkbWFwX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLApAQCAtMjk0LDE0ICsyOTcsMTQgQEAKIAlpZiAoIShmaWxwLT5mX21vZGUgJiAzKSkKIAkJcmV0dXJuIC1FQUNDRVM7CS8qIFJlcXVpcmUgcmVhZC93cml0ZSAqLwogCi0JaWYgKGNvcHlfZnJvbV91c2VyKCYgbWFwLCBhcmdwLCBzaXplb2YobWFwKSkpIHsKKwlpZiAoY29weV9mcm9tX3VzZXIoJm1hcCwgYXJncCwgc2l6ZW9mKG1hcCkpKSB7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KIAogCWVyciA9IGRybV9hZGRtYXBfY29yZShkZXYsIG1hcC5vZmZzZXQsIG1hcC5zaXplLCBtYXAudHlwZSwgbWFwLmZsYWdzLAogCQkJICAgICAgJm1hcGxpc3QpOwogCi0JaWYgKGVycikgCisJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAogCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgbWFwbGlzdC0+bWFwLCBzaXplb2YoZHJtX21hcF90KSkpCkBAIC0zMTEsNyArMzE0LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotCiAvKioKICAqIFJlbW92ZSBhIG1hcCBwcml2YXRlIGZyb20gbGlzdCBhbmQgZGVhbGxvY2F0ZSByZXNvdXJjZXMgaWYgdGhlIG1hcHBpbmcKICAqIGlzbid0IGluIHVzZS4KQEAgLTMyOCw3ICszMzAsNyBAQAogICoKICAqIFxzYSBkcm1fYWRkbWFwCiAgKi8KLWludCBkcm1fcm1tYXBfbG9ja2VkKGRybV9kZXZpY2VfdCAqZGV2LCBkcm1fbG9jYWxfbWFwX3QgKm1hcCkKK2ludCBkcm1fcm1tYXBfbG9ja2VkKGRybV9kZXZpY2VfdCAqIGRldiwgZHJtX2xvY2FsX21hcF90ICogbWFwKQogewogCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CiAJZHJtX21hcF9saXN0X3QgKnJfbGlzdCA9IE5VTEw7CkBAIC0zNTksOSArMzYxLDggQEAKIAljYXNlIF9EUk1fRlJBTUVfQlVGRkVSOgogCQlpZiAoZHJtX2NvcmVfaGFzX01UUlIoZGV2KSAmJiBtYXAtPm10cnIgPj0gMCkgewogCQkJaW50IHJldGNvZGU7Ci0JCQlyZXRjb2RlID0gbXRycl9kZWwobWFwLT5tdHJyLCBtYXAtPm9mZnNldCwKLQkJCQkJICAgbWFwLT5zaXplKTsKLQkJCURSTV9ERUJVRyAoIm10cnJfZGVsPSVkXG4iLCByZXRjb2RlKTsKKwkJCXJldGNvZGUgPSBtdHJyX2RlbChtYXAtPm10cnIsIG1hcC0+b2Zmc2V0LCBtYXAtPnNpemUpOworCQkJRFJNX0RFQlVHKCJtdHJyX2RlbD0lZFxuIiwgcmV0Y29kZSk7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBfRFJNX1NITToKQEAgLTM4MSw5ICszODIsMTAgQEAKIAogCXJldHVybiAwOwogfQorCiBFWFBPUlRfU1lNQk9MKGRybV9ybW1hcF9sb2NrZWQpOwogCi1pbnQgZHJtX3JtbWFwKGRybV9kZXZpY2VfdCAqZGV2LCBkcm1fbG9jYWxfbWFwX3QgKm1hcCkKK2ludCBkcm1fcm1tYXAoZHJtX2RldmljZV90ICogZGV2LCBkcm1fbG9jYWxfbWFwX3QgKiBtYXApCiB7CiAJaW50IHJldDsKIApAQCAtMzkzLDYgKzM5NSw3IEBACiAKIAlyZXR1cm4gcmV0OwogfQorCiBFWFBPUlRfU1lNQk9MKGRybV9ybW1hcCk7CiAKIC8qIFRoZSBybW1hcCBpb2N0bCBhcHBlYXJzIHRvIGJlIHVubmVjZXNzYXJ5LiAgQWxsIG1hcHBpbmdzIGFyZSB0b3JuIGRvd24gb24KQEAgLTQxNCw3ICs0MTcsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CiAJaW50IHJldDsKIAotCWlmIChjb3B5X2Zyb21fdXNlcigmcmVxdWVzdCwgKGRybV9tYXBfdCBfX3VzZXIgKilhcmcsIHNpemVvZihyZXF1ZXN0KSkpIHsKKwlpZiAoY29weV9mcm9tX3VzZXIoJnJlcXVlc3QsIChkcm1fbWFwX3QgX191c2VyICopIGFyZywgc2l6ZW9mKHJlcXVlc3QpKSkgewogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKQEAgLTQyMyw3ICs0MjYsNyBAQAogCQlkcm1fbWFwX2xpc3RfdCAqcl9saXN0ID0gbGlzdF9lbnRyeShsaXN0LCBkcm1fbWFwX2xpc3RfdCwgaGVhZCk7CiAKIAkJaWYgKHJfbGlzdC0+bWFwICYmCi0JCSAgICByX2xpc3QtPnVzZXJfdG9rZW4gPT0gKHVuc2lnbmVkIGxvbmcpIHJlcXVlc3QuaGFuZGxlICYmCisJCSAgICByX2xpc3QtPnVzZXJfdG9rZW4gPT0gKHVuc2lnbmVkIGxvbmcpcmVxdWVzdC5oYW5kbGUgJiYKIAkJICAgIHJfbGlzdC0+bWFwLT5mbGFncyAmIF9EUk1fUkVNT1ZBQkxFKSB7CiAJCQltYXAgPSByX2xpc3QtPm1hcDsKIAkJCWJyZWFrOwpAQCAtNDYyLDcgKzQ2NSw3IEBACiAgKgogICogRnJlZXMgYW55IHBhZ2VzIGFuZCBidWZmZXJzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gZW50cnkuCiAgKi8KLXN0YXRpYyB2b2lkIGRybV9jbGVhbnVwX2J1Zl9lcnJvcihkcm1fZGV2aWNlX3QgKmRldiwgZHJtX2J1Zl9lbnRyeV90ICplbnRyeSkKK3N0YXRpYyB2b2lkIGRybV9jbGVhbnVwX2J1Zl9lcnJvcihkcm1fZGV2aWNlX3QgKiBkZXYsIGRybV9idWZfZW50cnlfdCAqIGVudHJ5KQogewogCWludCBpOwogCkBAIC00NzAsMzAgKzQ3MywyNyBAQAogCQlmb3IgKGkgPSAwOyBpIDwgZW50cnktPnNlZ19jb3VudDsgaSsrKSB7CiAJCQlpZiAoZW50cnktPnNlZ2xpc3RbaV0pIHsKIAkJCQlkcm1fZnJlZV9wYWdlcyhlbnRyeS0+c2VnbGlzdFtpXSwKLQkJCQkJICAgICAgICBlbnRyeS0+cGFnZV9vcmRlciwKLQkJCQkJICAgICAgICBEUk1fTUVNX0RNQSk7CisJCQkJCSAgICAgICBlbnRyeS0+cGFnZV9vcmRlciwgRFJNX01FTV9ETUEpOwogCQkJfQogCQl9CiAJCWRybV9mcmVlKGVudHJ5LT5zZWdsaXN0LAotCQkJICBlbnRyeS0+c2VnX2NvdW50ICoKLQkJCSAgc2l6ZW9mKCplbnRyeS0+c2VnbGlzdCksCi0JCQkgIERSTV9NRU1fU0VHUyk7CisJCQkgZW50cnktPnNlZ19jb3VudCAqCisJCQkgc2l6ZW9mKCplbnRyeS0+c2VnbGlzdCksIERSTV9NRU1fU0VHUyk7CiAKIAkJZW50cnktPnNlZ19jb3VudCA9IDA7CiAJfQogCi0gICAJaWYgKGVudHJ5LT5idWZfY291bnQpIHsKLQkgICAJZm9yIChpID0gMDsgaSA8IGVudHJ5LT5idWZfY291bnQ7IGkrKykgeworCWlmIChlbnRyeS0+YnVmX2NvdW50KSB7CisJCWZvciAoaSA9IDA7IGkgPCBlbnRyeS0+YnVmX2NvdW50OyBpKyspIHsKIAkJCWlmIChlbnRyeS0+YnVmbGlzdFtpXS5kZXZfcHJpdmF0ZSkgewogCQkJCWRybV9mcmVlKGVudHJ5LT5idWZsaXN0W2ldLmRldl9wcml2YXRlLAotCQkJCQkgIGVudHJ5LT5idWZsaXN0W2ldLmRldl9wcml2X3NpemUsCi0JCQkJCSAgRFJNX01FTV9CVUZTKTsKKwkJCQkJIGVudHJ5LT5idWZsaXN0W2ldLmRldl9wcml2X3NpemUsCisJCQkJCSBEUk1fTUVNX0JVRlMpOwogCQkJfQogCQl9CiAJCWRybV9mcmVlKGVudHJ5LT5idWZsaXN0LAotCQkJICBlbnRyeS0+YnVmX2NvdW50ICoKLQkJCSAgc2l6ZW9mKCplbnRyeS0+YnVmbGlzdCksCi0JCQkgIERSTV9NRU1fQlVGUyk7CisJCQkgZW50cnktPmJ1Zl9jb3VudCAqCisJCQkgc2l6ZW9mKCplbnRyeS0+YnVmbGlzdCksIERSTV9NRU1fQlVGUyk7CiAKIAkJZW50cnktPmJ1Zl9jb3VudCA9IDA7CiAJfQpAQCAtNTA2LDEyICs1MDYsMTIgQEAKICAqIFxwYXJhbSBkZXYgZHJtX2RldmljZV90IHRvIHdoaWNoIHRoZSBidWZmZXJzIGFyZSB0byBiZSBhZGRlZC4KICAqIFxwYXJhbSByZXF1ZXN0IHBvaW50ZXIgdG8gYSBkcm1fYnVmX2Rlc2NfdCBkZXNjcmliaW5nIHRoZSByZXF1ZXN0LgogICogXHJldHVybiB6ZXJvIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBudW1iZXIgb24gZmFpbHVyZS4KLSAqIAorICoKICAqIEFmdGVyIHNvbWUgc2FuaXR5IGNoZWNrcyBjcmVhdGVzIGEgZHJtX2J1ZiBzdHJ1Y3R1cmUgZm9yIGVhY2ggYnVmZmVyIGFuZAogICogcmVhbGxvY2F0ZXMgdGhlIGJ1ZmZlciBsaXN0IG9mIHRoZSBzYW1lIHNpemUgb3JkZXIgdG8gYWNjb21tb2RhdGUgdGhlIG5ldwogICogYnVmZmVycy4KICAqLwotaW50IGRybV9hZGRidWZzX2FncChkcm1fZGV2aWNlX3QgKmRldiwgZHJtX2J1Zl9kZXNjX3QgKnJlcXVlc3QpCitpbnQgZHJtX2FkZGJ1ZnNfYWdwKGRybV9kZXZpY2VfdCAqIGRldiwgZHJtX2J1Zl9kZXNjX3QgKiByZXF1ZXN0KQogewogCWRybV9kZXZpY2VfZG1hX3QgKmRtYSA9IGRldi0+ZG1hOwogCWRybV9idWZfZW50cnlfdCAqZW50cnk7CkBAIC01MjgsMTQ0ICs1MjgsMTQ1IEBACiAJaW50IGk7CiAJZHJtX2J1Zl90ICoqdGVtcF9idWZsaXN0OwogCi0JaWYgKCAhZG1hICkgcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFkbWEpCisJCXJldHVybiAtRUlOVkFMOwogCiAJY291bnQgPSByZXF1ZXN0LT5jb3VudDsKIAlvcmRlciA9IGRybV9vcmRlcihyZXF1ZXN0LT5zaXplKTsKIAlzaXplID0gMSA8PCBvcmRlcjsKIAotCWFsaWdubWVudCAgPSAocmVxdWVzdC0+ZmxhZ3MgJiBfRFJNX1BBR0VfQUxJR04pCi0JCT8gUEFHRV9BTElHTihzaXplKSA6IHNpemU7CisJYWxpZ25tZW50ID0gKHJlcXVlc3QtPmZsYWdzICYgX0RSTV9QQUdFX0FMSUdOKQorCSAgICA/IFBBR0VfQUxJR04oc2l6ZSkgOiBzaXplOwogCXBhZ2Vfb3JkZXIgPSBvcmRlciAtIFBBR0VfU0hJRlQgPiAwID8gb3JkZXIgLSBQQUdFX1NISUZUIDogMDsKIAl0b3RhbCA9IFBBR0VfU0laRSA8PCBwYWdlX29yZGVyOwogCiAJYnl0ZV9jb3VudCA9IDA7CiAJYWdwX29mZnNldCA9IGRldi0+YWdwLT5iYXNlICsgcmVxdWVzdC0+YWdwX3N0YXJ0OwogCi0JRFJNX0RFQlVHKCAiY291bnQ6ICAgICAgJWRcbiIsICBjb3VudCApOwotCURSTV9ERUJVRyggIm9yZGVyOiAgICAgICVkXG4iLCAgb3JkZXIgKTsKLQlEUk1fREVCVUcoICJzaXplOiAgICAgICAlZFxuIiwgIHNpemUgKTsKLQlEUk1fREVCVUcoICJhZ3Bfb2Zmc2V0OiAlbHVcbiIsIGFncF9vZmZzZXQgKTsKLQlEUk1fREVCVUcoICJhbGlnbm1lbnQ6ICAlZFxuIiwgIGFsaWdubWVudCApOwotCURSTV9ERUJVRyggInBhZ2Vfb3JkZXI6ICVkXG4iLCAgcGFnZV9vcmRlciApOwotCURSTV9ERUJVRyggInRvdGFsOiAgICAgICVkXG4iLCAgdG90YWwgKTsKKwlEUk1fREVCVUcoImNvdW50OiAgICAgICVkXG4iLCBjb3VudCk7CisJRFJNX0RFQlVHKCJvcmRlcjogICAgICAlZFxuIiwgb3JkZXIpOworCURSTV9ERUJVRygic2l6ZTogICAgICAgJWRcbiIsIHNpemUpOworCURSTV9ERUJVRygiYWdwX29mZnNldDogJWx1XG4iLCBhZ3Bfb2Zmc2V0KTsKKwlEUk1fREVCVUcoImFsaWdubWVudDogICVkXG4iLCBhbGlnbm1lbnQpOworCURSTV9ERUJVRygicGFnZV9vcmRlcjogJWRcbiIsIHBhZ2Vfb3JkZXIpOworCURSTV9ERUJVRygidG90YWw6ICAgICAgJWRcbiIsIHRvdGFsKTsKIAotCWlmICggb3JkZXIgPCBEUk1fTUlOX09SREVSIHx8IG9yZGVyID4gRFJNX01BWF9PUkRFUiApIHJldHVybiAtRUlOVkFMOwotCWlmICggZGV2LT5xdWV1ZV9jb3VudCApIHJldHVybiAtRUJVU1k7IC8qIE5vdCB3aGlsZSBpbiB1c2UgKi8KKwlpZiAob3JkZXIgPCBEUk1fTUlOX09SREVSIHx8IG9yZGVyID4gRFJNX01BWF9PUkRFUikKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGRldi0+cXVldWVfY291bnQpCisJCXJldHVybiAtRUJVU1k7CS8qIE5vdCB3aGlsZSBpbiB1c2UgKi8KIAotCXNwaW5fbG9jayggJmRldi0+Y291bnRfbG9jayApOwotCWlmICggZGV2LT5idWZfdXNlICkgewotCQlzcGluX3VubG9jayggJmRldi0+Y291bnRfbG9jayApOworCXNwaW5fbG9jaygmZGV2LT5jb3VudF9sb2NrKTsKKwlpZiAoZGV2LT5idWZfdXNlKSB7CisJCXNwaW5fdW5sb2NrKCZkZXYtPmNvdW50X2xvY2spOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KLQlhdG9taWNfaW5jKCAmZGV2LT5idWZfYWxsb2MgKTsKLQlzcGluX3VubG9jayggJmRldi0+Y291bnRfbG9jayApOworCWF0b21pY19pbmMoJmRldi0+YnVmX2FsbG9jKTsKKwlzcGluX3VubG9jaygmZGV2LT5jb3VudF9sb2NrKTsKIAotCWRvd24oICZkZXYtPnN0cnVjdF9zZW0gKTsKKwlkb3duKCZkZXYtPnN0cnVjdF9zZW0pOwogCWVudHJ5ID0gJmRtYS0+YnVmc1tvcmRlcl07Ci0JaWYgKCBlbnRyeS0+YnVmX2NvdW50ICkgewotCQl1cCggJmRldi0+c3RydWN0X3NlbSApOwotCQlhdG9taWNfZGVjKCAmZGV2LT5idWZfYWxsb2MgKTsKLQkJcmV0dXJuIC1FTk9NRU07IC8qIE1heSBvbmx5IGNhbGwgb25jZSBmb3IgZWFjaCBvcmRlciAqLworCWlmIChlbnRyeS0+YnVmX2NvdW50KSB7CisJCXVwKCZkZXYtPnN0cnVjdF9zZW0pOworCQlhdG9taWNfZGVjKCZkZXYtPmJ1Zl9hbGxvYyk7CisJCXJldHVybiAtRU5PTUVNOwkvKiBNYXkgb25seSBjYWxsIG9uY2UgZm9yIGVhY2ggb3JkZXIgKi8KIAl9CiAKIAlpZiAoY291bnQgPCAwIHx8IGNvdW50ID4gNDA5NikgewotCQl1cCggJmRldi0+c3RydWN0X3NlbSApOwotCQlhdG9taWNfZGVjKCAmZGV2LT5idWZfYWxsb2MgKTsKKwkJdXAoJmRldi0+c3RydWN0X3NlbSk7CisJCWF0b21pY19kZWMoJmRldi0+YnVmX2FsbG9jKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JZW50cnktPmJ1Zmxpc3QgPSBkcm1fYWxsb2MoIGNvdW50ICogc2l6ZW9mKCplbnRyeS0+YnVmbGlzdCksCi0JCQkJICAgIERSTV9NRU1fQlVGUyApOwotCWlmICggIWVudHJ5LT5idWZsaXN0ICkgewotCQl1cCggJmRldi0+c3RydWN0X3NlbSApOwotCQlhdG9taWNfZGVjKCAmZGV2LT5idWZfYWxsb2MgKTsKKwllbnRyeS0+YnVmbGlzdCA9IGRybV9hbGxvYyhjb3VudCAqIHNpemVvZigqZW50cnktPmJ1Zmxpc3QpLAorCQkJCSAgIERSTV9NRU1fQlVGUyk7CisJaWYgKCFlbnRyeS0+YnVmbGlzdCkgeworCQl1cCgmZGV2LT5zdHJ1Y3Rfc2VtKTsKKwkJYXRvbWljX2RlYygmZGV2LT5idWZfYWxsb2MpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JbWVtc2V0KCBlbnRyeS0+YnVmbGlzdCwgMCwgY291bnQgKiBzaXplb2YoKmVudHJ5LT5idWZsaXN0KSApOworCW1lbXNldChlbnRyeS0+YnVmbGlzdCwgMCwgY291bnQgKiBzaXplb2YoKmVudHJ5LT5idWZsaXN0KSk7CiAKIAllbnRyeS0+YnVmX3NpemUgPSBzaXplOwogCWVudHJ5LT5wYWdlX29yZGVyID0gcGFnZV9vcmRlcjsKIAogCW9mZnNldCA9IDA7CiAKLQl3aGlsZSAoIGVudHJ5LT5idWZfY291bnQgPCBjb3VudCApIHsKLQkJYnVmICAgICAgICAgID0gJmVudHJ5LT5idWZsaXN0W2VudHJ5LT5idWZfY291bnRdOwotCQlidWYtPmlkeCAgICAgPSBkbWEtPmJ1Zl9jb3VudCArIGVudHJ5LT5idWZfY291bnQ7Ci0JCWJ1Zi0+dG90YWwgICA9IGFsaWdubWVudDsKLQkJYnVmLT5vcmRlciAgID0gb3JkZXI7Ci0JCWJ1Zi0+dXNlZCAgICA9IDA7CisJd2hpbGUgKGVudHJ5LT5idWZfY291bnQgPCBjb3VudCkgeworCQlidWYgPSAmZW50cnktPmJ1Zmxpc3RbZW50cnktPmJ1Zl9jb3VudF07CisJCWJ1Zi0+aWR4ID0gZG1hLT5idWZfY291bnQgKyBlbnRyeS0+YnVmX2NvdW50OworCQlidWYtPnRvdGFsID0gYWxpZ25tZW50OworCQlidWYtPm9yZGVyID0gb3JkZXI7CisJCWJ1Zi0+dXNlZCA9IDA7CiAKLQkJYnVmLT5vZmZzZXQgID0gKGRtYS0+Ynl0ZV9jb3VudCArIG9mZnNldCk7CisJCWJ1Zi0+b2Zmc2V0ID0gKGRtYS0+Ynl0ZV9jb3VudCArIG9mZnNldCk7CiAJCWJ1Zi0+YnVzX2FkZHJlc3MgPSBhZ3Bfb2Zmc2V0ICsgb2Zmc2V0OwogCQlidWYtPmFkZHJlc3MgPSAodm9pZCAqKShhZ3Bfb2Zmc2V0ICsgb2Zmc2V0KTsKLQkJYnVmLT5uZXh0ICAgID0gTlVMTDsKKwkJYnVmLT5uZXh0ID0gTlVMTDsKIAkJYnVmLT53YWl0aW5nID0gMDsKIAkJYnVmLT5wZW5kaW5nID0gMDsKLQkJaW5pdF93YWl0cXVldWVfaGVhZCggJmJ1Zi0+ZG1hX3dhaXQgKTsKLQkJYnVmLT5maWxwICAgID0gTlVMTDsKKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmYnVmLT5kbWFfd2FpdCk7CisJCWJ1Zi0+ZmlscCA9IE5VTEw7CiAKIAkJYnVmLT5kZXZfcHJpdl9zaXplID0gZGV2LT5kcml2ZXItPmRldl9wcml2X3NpemU7Ci0JCWJ1Zi0+ZGV2X3ByaXZhdGUgPSBkcm1fYWxsb2MoIGJ1Zi0+ZGV2X3ByaXZfc2l6ZSwKLQkJCQkJICAgICAgIERSTV9NRU1fQlVGUyApOwotCQlpZighYnVmLT5kZXZfcHJpdmF0ZSkgeworCQlidWYtPmRldl9wcml2YXRlID0gZHJtX2FsbG9jKGJ1Zi0+ZGV2X3ByaXZfc2l6ZSwgRFJNX01FTV9CVUZTKTsKKwkJaWYgKCFidWYtPmRldl9wcml2YXRlKSB7CiAJCQkvKiBTZXQgY291bnQgY29ycmVjdGx5IHNvIHdlIGZyZWUgdGhlIHByb3BlciBhbW91bnQuICovCiAJCQllbnRyeS0+YnVmX2NvdW50ID0gY291bnQ7Ci0JCQlkcm1fY2xlYW51cF9idWZfZXJyb3IoZGV2LGVudHJ5KTsKLQkJCXVwKCAmZGV2LT5zdHJ1Y3Rfc2VtICk7Ci0JCQlhdG9taWNfZGVjKCAmZGV2LT5idWZfYWxsb2MgKTsKKwkJCWRybV9jbGVhbnVwX2J1Zl9lcnJvcihkZXYsIGVudHJ5KTsKKwkJCXVwKCZkZXYtPnN0cnVjdF9zZW0pOworCQkJYXRvbWljX2RlYygmZGV2LT5idWZfYWxsb2MpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KLQkJbWVtc2V0KCBidWYtPmRldl9wcml2YXRlLCAwLCBidWYtPmRldl9wcml2X3NpemUgKTsKKwkJbWVtc2V0KGJ1Zi0+ZGV2X3ByaXZhdGUsIDAsIGJ1Zi0+ZGV2X3ByaXZfc2l6ZSk7CiAKLQkJRFJNX0RFQlVHKCAiYnVmZmVyICVkIEAgJXBcbiIsCi0JCQkgICBlbnRyeS0+YnVmX2NvdW50LCBidWYtPmFkZHJlc3MgKTsKKwkJRFJNX0RFQlVHKCJidWZmZXIgJWQgQCAlcFxuIiwgZW50cnktPmJ1Zl9jb3VudCwgYnVmLT5hZGRyZXNzKTsKIAogCQlvZmZzZXQgKz0gYWxpZ25tZW50OwogCQllbnRyeS0+YnVmX2NvdW50Kys7CiAJCWJ5dGVfY291bnQgKz0gUEFHRV9TSVpFIDw8IHBhZ2Vfb3JkZXI7CiAJfQogCi0JRFJNX0RFQlVHKCAiYnl0ZV9jb3VudDogJWRcbiIsIGJ5dGVfY291bnQgKTsKKwlEUk1fREVCVUcoImJ5dGVfY291bnQ6ICVkXG4iLCBieXRlX2NvdW50KTsKIAotCXRlbXBfYnVmbGlzdCA9IGRybV9yZWFsbG9jKCBkbWEtPmJ1Zmxpc3QsCi0JCQkJICAgICBkbWEtPmJ1Zl9jb3VudCAqIHNpemVvZigqZG1hLT5idWZsaXN0KSwKLQkJCQkgICAgIChkbWEtPmJ1Zl9jb3VudCArIGVudHJ5LT5idWZfY291bnQpCi0JCQkJICAgICAqIHNpemVvZigqZG1hLT5idWZsaXN0KSwKLQkJCQkgICAgIERSTV9NRU1fQlVGUyApOwotCWlmKCF0ZW1wX2J1Zmxpc3QpIHsKKwl0ZW1wX2J1Zmxpc3QgPSBkcm1fcmVhbGxvYyhkbWEtPmJ1Zmxpc3QsCisJCQkJICAgZG1hLT5idWZfY291bnQgKiBzaXplb2YoKmRtYS0+YnVmbGlzdCksCisJCQkJICAgKGRtYS0+YnVmX2NvdW50ICsgZW50cnktPmJ1Zl9jb3VudCkKKwkJCQkgICAqIHNpemVvZigqZG1hLT5idWZsaXN0KSwgRFJNX01FTV9CVUZTKTsKKwlpZiAoIXRlbXBfYnVmbGlzdCkgewogCQkvKiBGcmVlIHRoZSBlbnRyeSBiZWNhdXNlIGl0IGlzbid0IHZhbGlkICovCi0JCWRybV9jbGVhbnVwX2J1Zl9lcnJvcihkZXYsZW50cnkpOwotCQl1cCggJmRldi0+c3RydWN0X3NlbSApOwotCQlhdG9taWNfZGVjKCAmZGV2LT5idWZfYWxsb2MgKTsKKwkJZHJtX2NsZWFudXBfYnVmX2Vycm9yKGRldiwgZW50cnkpOworCQl1cCgmZGV2LT5zdHJ1Y3Rfc2VtKTsKKwkJYXRvbWljX2RlYygmZGV2LT5idWZfYWxsb2MpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJZG1hLT5idWZsaXN0ID0gdGVtcF9idWZsaXN0OwogCi0JZm9yICggaSA9IDAgOyBpIDwgZW50cnktPmJ1Zl9jb3VudCA7IGkrKyApIHsKKwlmb3IgKGkgPSAwOyBpIDwgZW50cnktPmJ1Zl9jb3VudDsgaSsrKSB7CiAJCWRtYS0+YnVmbGlzdFtpICsgZG1hLT5idWZfY291bnRdID0gJmVudHJ5LT5idWZsaXN0W2ldOwogCX0KIAogCWRtYS0+YnVmX2NvdW50ICs9IGVudHJ5LT5idWZfY291bnQ7CiAJZG1hLT5ieXRlX2NvdW50ICs9IGJ5dGVfY291bnQ7CiAKLQlEUk1fREVCVUcoICJkbWEtPmJ1Zl9jb3VudCA6ICVkXG4iLCBkbWEtPmJ1Zl9jb3VudCApOwotCURSTV9ERUJVRyggImVudHJ5LT5idWZfY291bnQgOiAlZFxuIiwgZW50cnktPmJ1Zl9jb3VudCApOworCURSTV9ERUJVRygiZG1hLT5idWZfY291bnQgOiAlZFxuIiwgZG1hLT5idWZfY291bnQpOworCURSTV9ERUJVRygiZW50cnktPmJ1Zl9jb3VudCA6ICVkXG4iLCBlbnRyeS0+YnVmX2NvdW50KTsKIAotCXVwKCAmZGV2LT5zdHJ1Y3Rfc2VtICk7CisJdXAoJmRldi0+c3RydWN0X3NlbSk7CiAKIAlyZXF1ZXN0LT5jb3VudCA9IGVudHJ5LT5idWZfY291bnQ7CiAJcmVxdWVzdC0+c2l6ZSA9IHNpemU7CiAKIAlkbWEtPmZsYWdzID0gX0RSTV9ETUFfVVNFX0FHUDsKIAotCWF0b21pY19kZWMoICZkZXYtPmJ1Zl9hbGxvYyApOworCWF0b21pY19kZWMoJmRldi0+YnVmX2FsbG9jKTsKIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0woZHJtX2FkZGJ1ZnNfYWdwKTsKLSNlbmRpZiAvKiBfX09TX0hBU19BR1AgKi8KIAotaW50IGRybV9hZGRidWZzX3BjaShkcm1fZGV2aWNlX3QgKmRldiwgZHJtX2J1Zl9kZXNjX3QgKnJlcXVlc3QpCitFWFBPUlRfU1lNQk9MKGRybV9hZGRidWZzX2FncCk7CisjZW5kaWYJCQkJLyogX19PU19IQVNfQUdQICovCisKK2ludCBkcm1fYWRkYnVmc19wY2koZHJtX2RldmljZV90ICogZGV2LCBkcm1fYnVmX2Rlc2NfdCAqIHJlcXVlc3QpCiB7CiAJZHJtX2RldmljZV9kbWFfdCAqZG1hID0gZGV2LT5kbWE7CiAJaW50IGNvdW50OwpAQCAtNjg0LDE3OCArNjg1LDE3NCBAQAogCXVuc2lnbmVkIGxvbmcgKnRlbXBfcGFnZWxpc3Q7CiAJZHJtX2J1Zl90ICoqdGVtcF9idWZsaXN0OwogCi0JaWYgKCFkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX1BDSV9ETUEpKSByZXR1cm4gLUVJTlZBTDsKLQlpZiAoICFkbWEgKSByZXR1cm4gLUVJTlZBTDsKKwlpZiAoIWRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfUENJX0RNQSkpCisJCXJldHVybiAtRUlOVkFMOworCWlmICghZG1hKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCWNvdW50ID0gcmVxdWVzdC0+Y291bnQ7CiAJb3JkZXIgPSBkcm1fb3JkZXIocmVxdWVzdC0+c2l6ZSk7CiAJc2l6ZSA9IDEgPDwgb3JkZXI7CiAKLQlEUk1fREVCVUcoICJjb3VudD0lZCwgc2l6ZT0lZCAoJWQpLCBvcmRlcj0lZCwgcXVldWVfY291bnQ9JWRcbiIsCi0JCSAgIHJlcXVlc3QtPmNvdW50LCByZXF1ZXN0LT5zaXplLCBzaXplLAotCQkgICBvcmRlciwgZGV2LT5xdWV1ZV9jb3VudCApOworCURSTV9ERUJVRygiY291bnQ9JWQsIHNpemU9JWQgKCVkKSwgb3JkZXI9JWQsIHF1ZXVlX2NvdW50PSVkXG4iLAorCQkgIHJlcXVlc3QtPmNvdW50LCByZXF1ZXN0LT5zaXplLCBzaXplLCBvcmRlciwgZGV2LT5xdWV1ZV9jb3VudCk7CiAKLQlpZiAoIG9yZGVyIDwgRFJNX01JTl9PUkRFUiB8fCBvcmRlciA+IERSTV9NQVhfT1JERVIgKSByZXR1cm4gLUVJTlZBTDsKLQlpZiAoIGRldi0+cXVldWVfY291bnQgKSByZXR1cm4gLUVCVVNZOyAvKiBOb3Qgd2hpbGUgaW4gdXNlICovCisJaWYgKG9yZGVyIDwgRFJNX01JTl9PUkRFUiB8fCBvcmRlciA+IERSTV9NQVhfT1JERVIpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChkZXYtPnF1ZXVlX2NvdW50KQorCQlyZXR1cm4gLUVCVVNZOwkvKiBOb3Qgd2hpbGUgaW4gdXNlICovCiAKIAlhbGlnbm1lbnQgPSAocmVxdWVzdC0+ZmxhZ3MgJiBfRFJNX1BBR0VfQUxJR04pCi0JCT8gUEFHRV9BTElHTihzaXplKSA6IHNpemU7CisJICAgID8gUEFHRV9BTElHTihzaXplKSA6IHNpemU7CiAJcGFnZV9vcmRlciA9IG9yZGVyIC0gUEFHRV9TSElGVCA+IDAgPyBvcmRlciAtIFBBR0VfU0hJRlQgOiAwOwogCXRvdGFsID0gUEFHRV9TSVpFIDw8IHBhZ2Vfb3JkZXI7CiAKLQlzcGluX2xvY2soICZkZXYtPmNvdW50X2xvY2sgKTsKLQlpZiAoIGRldi0+YnVmX3VzZSApIHsKLQkJc3Bpbl91bmxvY2soICZkZXYtPmNvdW50X2xvY2sgKTsKKwlzcGluX2xvY2soJmRldi0+Y291bnRfbG9jayk7CisJaWYgKGRldi0+YnVmX3VzZSkgeworCQlzcGluX3VubG9jaygmZGV2LT5jb3VudF9sb2NrKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9Ci0JYXRvbWljX2luYyggJmRldi0+YnVmX2FsbG9jICk7Ci0Jc3Bpbl91bmxvY2soICZkZXYtPmNvdW50X2xvY2sgKTsKKwlhdG9taWNfaW5jKCZkZXYtPmJ1Zl9hbGxvYyk7CisJc3Bpbl91bmxvY2soJmRldi0+Y291bnRfbG9jayk7CiAKLQlkb3duKCAmZGV2LT5zdHJ1Y3Rfc2VtICk7CisJZG93bigmZGV2LT5zdHJ1Y3Rfc2VtKTsKIAllbnRyeSA9ICZkbWEtPmJ1ZnNbb3JkZXJdOwotCWlmICggZW50cnktPmJ1Zl9jb3VudCApIHsKLQkJdXAoICZkZXYtPnN0cnVjdF9zZW0gKTsKLQkJYXRvbWljX2RlYyggJmRldi0+YnVmX2FsbG9jICk7CisJaWYgKGVudHJ5LT5idWZfY291bnQpIHsKKwkJdXAoJmRldi0+c3RydWN0X3NlbSk7CisJCWF0b21pY19kZWMoJmRldi0+YnVmX2FsbG9jKTsKIAkJcmV0dXJuIC1FTk9NRU07CS8qIE1heSBvbmx5IGNhbGwgb25jZSBmb3IgZWFjaCBvcmRlciAqLwogCX0KIAogCWlmIChjb3VudCA8IDAgfHwgY291bnQgPiA0MDk2KSB7Ci0JCXVwKCAmZGV2LT5zdHJ1Y3Rfc2VtICk7Ci0JCWF0b21pY19kZWMoICZkZXYtPmJ1Zl9hbGxvYyApOworCQl1cCgmZGV2LT5zdHJ1Y3Rfc2VtKTsKKwkJYXRvbWljX2RlYygmZGV2LT5idWZfYWxsb2MpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQllbnRyeS0+YnVmbGlzdCA9IGRybV9hbGxvYyggY291bnQgKiBzaXplb2YoKmVudHJ5LT5idWZsaXN0KSwKLQkJCQkgICAgRFJNX01FTV9CVUZTICk7Ci0JaWYgKCAhZW50cnktPmJ1Zmxpc3QgKSB7Ci0JCXVwKCAmZGV2LT5zdHJ1Y3Rfc2VtICk7Ci0JCWF0b21pY19kZWMoICZkZXYtPmJ1Zl9hbGxvYyApOworCWVudHJ5LT5idWZsaXN0ID0gZHJtX2FsbG9jKGNvdW50ICogc2l6ZW9mKCplbnRyeS0+YnVmbGlzdCksCisJCQkJICAgRFJNX01FTV9CVUZTKTsKKwlpZiAoIWVudHJ5LT5idWZsaXN0KSB7CisJCXVwKCZkZXYtPnN0cnVjdF9zZW0pOworCQlhdG9taWNfZGVjKCZkZXYtPmJ1Zl9hbGxvYyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQltZW1zZXQoIGVudHJ5LT5idWZsaXN0LCAwLCBjb3VudCAqIHNpemVvZigqZW50cnktPmJ1Zmxpc3QpICk7CisJbWVtc2V0KGVudHJ5LT5idWZsaXN0LCAwLCBjb3VudCAqIHNpemVvZigqZW50cnktPmJ1Zmxpc3QpKTsKIAotCWVudHJ5LT5zZWdsaXN0ID0gZHJtX2FsbG9jKCBjb3VudCAqIHNpemVvZigqZW50cnktPnNlZ2xpc3QpLAotCQkJCSAgICBEUk1fTUVNX1NFR1MgKTsKLQlpZiAoICFlbnRyeS0+c2VnbGlzdCApIHsKLQkJZHJtX2ZyZWUoIGVudHJ5LT5idWZsaXN0LAotCQkJICBjb3VudCAqIHNpemVvZigqZW50cnktPmJ1Zmxpc3QpLAotCQkJICBEUk1fTUVNX0JVRlMgKTsKLQkJdXAoICZkZXYtPnN0cnVjdF9zZW0gKTsKLQkJYXRvbWljX2RlYyggJmRldi0+YnVmX2FsbG9jICk7CisJZW50cnktPnNlZ2xpc3QgPSBkcm1fYWxsb2MoY291bnQgKiBzaXplb2YoKmVudHJ5LT5zZWdsaXN0KSwKKwkJCQkgICBEUk1fTUVNX1NFR1MpOworCWlmICghZW50cnktPnNlZ2xpc3QpIHsKKwkJZHJtX2ZyZWUoZW50cnktPmJ1Zmxpc3QsCisJCQkgY291bnQgKiBzaXplb2YoKmVudHJ5LT5idWZsaXN0KSwgRFJNX01FTV9CVUZTKTsKKwkJdXAoJmRldi0+c3RydWN0X3NlbSk7CisJCWF0b21pY19kZWMoJmRldi0+YnVmX2FsbG9jKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCW1lbXNldCggZW50cnktPnNlZ2xpc3QsIDAsIGNvdW50ICogc2l6ZW9mKCplbnRyeS0+c2VnbGlzdCkgKTsKKwltZW1zZXQoZW50cnktPnNlZ2xpc3QsIDAsIGNvdW50ICogc2l6ZW9mKCplbnRyeS0+c2VnbGlzdCkpOwogCiAJLyogS2VlcCB0aGUgb3JpZ2luYWwgcGFnZWxpc3QgdW50aWwgd2Uga25vdyBhbGwgdGhlIGFsbG9jYXRpb25zCiAJICogaGF2ZSBzdWNjZWVkZWQKIAkgKi8KLQl0ZW1wX3BhZ2VsaXN0ID0gZHJtX2FsbG9jKCAoZG1hLT5wYWdlX2NvdW50ICsgKGNvdW50IDw8IHBhZ2Vfb3JkZXIpKQotCQkJCSAgICAqIHNpemVvZigqZG1hLT5wYWdlbGlzdCksCi0JCQkJICAgIERSTV9NRU1fUEFHRVMgKTsKKwl0ZW1wX3BhZ2VsaXN0ID0gZHJtX2FsbG9jKChkbWEtPnBhZ2VfY291bnQgKyAoY291bnQgPDwgcGFnZV9vcmRlcikpCisJCQkJICAqIHNpemVvZigqZG1hLT5wYWdlbGlzdCksIERSTV9NRU1fUEFHRVMpOwogCWlmICghdGVtcF9wYWdlbGlzdCkgewotCQlkcm1fZnJlZSggZW50cnktPmJ1Zmxpc3QsCi0JCQkgICBjb3VudCAqIHNpemVvZigqZW50cnktPmJ1Zmxpc3QpLAotCQkJICAgRFJNX01FTV9CVUZTICk7Ci0JCWRybV9mcmVlKCBlbnRyeS0+c2VnbGlzdCwKLQkJCSAgIGNvdW50ICogc2l6ZW9mKCplbnRyeS0+c2VnbGlzdCksCi0JCQkgICBEUk1fTUVNX1NFR1MgKTsKLQkJdXAoICZkZXYtPnN0cnVjdF9zZW0gKTsKLQkJYXRvbWljX2RlYyggJmRldi0+YnVmX2FsbG9jICk7CisJCWRybV9mcmVlKGVudHJ5LT5idWZsaXN0LAorCQkJIGNvdW50ICogc2l6ZW9mKCplbnRyeS0+YnVmbGlzdCksIERSTV9NRU1fQlVGUyk7CisJCWRybV9mcmVlKGVudHJ5LT5zZWdsaXN0LAorCQkJIGNvdW50ICogc2l6ZW9mKCplbnRyeS0+c2VnbGlzdCksIERSTV9NRU1fU0VHUyk7CisJCXVwKCZkZXYtPnN0cnVjdF9zZW0pOworCQlhdG9taWNfZGVjKCZkZXYtPmJ1Zl9hbGxvYyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAltZW1jcHkodGVtcF9wYWdlbGlzdCwKLQkgICAgICAgZG1hLT5wYWdlbGlzdCwKLQkgICAgICAgZG1hLT5wYWdlX2NvdW50ICogc2l6ZW9mKCpkbWEtPnBhZ2VsaXN0KSk7Ci0JRFJNX0RFQlVHKCAicGFnZWxpc3Q6ICVkIGVudHJpZXNcbiIsCi0JCSAgIGRtYS0+cGFnZV9jb3VudCArIChjb3VudCA8PCBwYWdlX29yZGVyKSApOworCSAgICAgICBkbWEtPnBhZ2VsaXN0LCBkbWEtPnBhZ2VfY291bnQgKiBzaXplb2YoKmRtYS0+cGFnZWxpc3QpKTsKKwlEUk1fREVCVUcoInBhZ2VsaXN0OiAlZCBlbnRyaWVzXG4iLAorCQkgIGRtYS0+cGFnZV9jb3VudCArIChjb3VudCA8PCBwYWdlX29yZGVyKSk7CiAKLQllbnRyeS0+YnVmX3NpemUJPSBzaXplOworCWVudHJ5LT5idWZfc2l6ZSA9IHNpemU7CiAJZW50cnktPnBhZ2Vfb3JkZXIgPSBwYWdlX29yZGVyOwogCWJ5dGVfY291bnQgPSAwOwogCXBhZ2VfY291bnQgPSAwOwogCi0Jd2hpbGUgKCBlbnRyeS0+YnVmX2NvdW50IDwgY291bnQgKSB7Ci0JCXBhZ2UgPSBkcm1fYWxsb2NfcGFnZXMoIHBhZ2Vfb3JkZXIsIERSTV9NRU1fRE1BICk7Ci0JCWlmICggIXBhZ2UgKSB7CisJd2hpbGUgKGVudHJ5LT5idWZfY291bnQgPCBjb3VudCkgeworCQlwYWdlID0gZHJtX2FsbG9jX3BhZ2VzKHBhZ2Vfb3JkZXIsIERSTV9NRU1fRE1BKTsKKwkJaWYgKCFwYWdlKSB7CiAJCQkvKiBTZXQgY291bnQgY29ycmVjdGx5IHNvIHdlIGZyZWUgdGhlIHByb3BlciBhbW91bnQuICovCiAJCQllbnRyeS0+YnVmX2NvdW50ID0gY291bnQ7CiAJCQllbnRyeS0+c2VnX2NvdW50ID0gY291bnQ7CiAJCQlkcm1fY2xlYW51cF9idWZfZXJyb3IoZGV2LCBlbnRyeSk7Ci0JCQlkcm1fZnJlZSggdGVtcF9wYWdlbGlzdCwKLQkJCQkgICAoZG1hLT5wYWdlX2NvdW50ICsgKGNvdW50IDw8IHBhZ2Vfb3JkZXIpKQotCQkJCSAgICogc2l6ZW9mKCpkbWEtPnBhZ2VsaXN0KSwKLQkJCQkgICBEUk1fTUVNX1BBR0VTICk7Ci0JCQl1cCggJmRldi0+c3RydWN0X3NlbSApOwotCQkJYXRvbWljX2RlYyggJmRldi0+YnVmX2FsbG9jICk7CisJCQlkcm1fZnJlZSh0ZW1wX3BhZ2VsaXN0LAorCQkJCSAoZG1hLT5wYWdlX2NvdW50ICsgKGNvdW50IDw8IHBhZ2Vfb3JkZXIpKQorCQkJCSAqIHNpemVvZigqZG1hLT5wYWdlbGlzdCksIERSTV9NRU1fUEFHRVMpOworCQkJdXAoJmRldi0+c3RydWN0X3NlbSk7CisJCQlhdG9taWNfZGVjKCZkZXYtPmJ1Zl9hbGxvYyk7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCQllbnRyeS0+c2VnbGlzdFtlbnRyeS0+c2VnX2NvdW50KytdID0gcGFnZTsKLQkJZm9yICggaSA9IDAgOyBpIDwgKDEgPDwgcGFnZV9vcmRlcikgOyBpKysgKSB7Ci0JCQlEUk1fREVCVUcoICJwYWdlICVkIEAgMHglMDhseFxuIiwKLQkJCQkgICBkbWEtPnBhZ2VfY291bnQgKyBwYWdlX2NvdW50LAotCQkJCSAgIHBhZ2UgKyBQQUdFX1NJWkUgKiBpICk7CisJCWZvciAoaSA9IDA7IGkgPCAoMSA8PCBwYWdlX29yZGVyKTsgaSsrKSB7CisJCQlEUk1fREVCVUcoInBhZ2UgJWQgQCAweCUwOGx4XG4iLAorCQkJCSAgZG1hLT5wYWdlX2NvdW50ICsgcGFnZV9jb3VudCwKKwkJCQkgIHBhZ2UgKyBQQUdFX1NJWkUgKiBpKTsKIAkJCXRlbXBfcGFnZWxpc3RbZG1hLT5wYWdlX2NvdW50ICsgcGFnZV9jb3VudCsrXQotCQkJCT0gcGFnZSArIFBBR0VfU0laRSAqIGk7CisJCQkgICAgPSBwYWdlICsgUEFHRV9TSVpFICogaTsKIAkJfQotCQlmb3IgKCBvZmZzZXQgPSAwIDsKLQkJICAgICAgb2Zmc2V0ICsgc2l6ZSA8PSB0b3RhbCAmJiBlbnRyeS0+YnVmX2NvdW50IDwgY291bnQgOwotCQkgICAgICBvZmZzZXQgKz0gYWxpZ25tZW50LCArK2VudHJ5LT5idWZfY291bnQgKSB7Ci0JCQlidWYJICAgICA9ICZlbnRyeS0+YnVmbGlzdFtlbnRyeS0+YnVmX2NvdW50XTsKLQkJCWJ1Zi0+aWR4ICAgICA9IGRtYS0+YnVmX2NvdW50ICsgZW50cnktPmJ1Zl9jb3VudDsKLQkJCWJ1Zi0+dG90YWwgICA9IGFsaWdubWVudDsKLQkJCWJ1Zi0+b3JkZXIgICA9IG9yZGVyOwotCQkJYnVmLT51c2VkICAgID0gMDsKLQkJCWJ1Zi0+b2Zmc2V0ICA9IChkbWEtPmJ5dGVfY291bnQgKyBieXRlX2NvdW50ICsgb2Zmc2V0KTsKKwkJZm9yIChvZmZzZXQgPSAwOworCQkgICAgIG9mZnNldCArIHNpemUgPD0gdG90YWwgJiYgZW50cnktPmJ1Zl9jb3VudCA8IGNvdW50OworCQkgICAgIG9mZnNldCArPSBhbGlnbm1lbnQsICsrZW50cnktPmJ1Zl9jb3VudCkgeworCQkJYnVmID0gJmVudHJ5LT5idWZsaXN0W2VudHJ5LT5idWZfY291bnRdOworCQkJYnVmLT5pZHggPSBkbWEtPmJ1Zl9jb3VudCArIGVudHJ5LT5idWZfY291bnQ7CisJCQlidWYtPnRvdGFsID0gYWxpZ25tZW50OworCQkJYnVmLT5vcmRlciA9IG9yZGVyOworCQkJYnVmLT51c2VkID0gMDsKKwkJCWJ1Zi0+b2Zmc2V0ID0gKGRtYS0+Ynl0ZV9jb3VudCArIGJ5dGVfY291bnQgKyBvZmZzZXQpOwogCQkJYnVmLT5hZGRyZXNzID0gKHZvaWQgKikocGFnZSArIG9mZnNldCk7Ci0JCQlidWYtPm5leHQgICAgPSBOVUxMOworCQkJYnVmLT5uZXh0ID0gTlVMTDsKIAkJCWJ1Zi0+d2FpdGluZyA9IDA7CiAJCQlidWYtPnBlbmRpbmcgPSAwOwotCQkJaW5pdF93YWl0cXVldWVfaGVhZCggJmJ1Zi0+ZG1hX3dhaXQgKTsKLQkJCWJ1Zi0+ZmlscCAgICA9IE5VTEw7CisJCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZidWYtPmRtYV93YWl0KTsKKwkJCWJ1Zi0+ZmlscCA9IE5VTEw7CiAKIAkJCWJ1Zi0+ZGV2X3ByaXZfc2l6ZSA9IGRldi0+ZHJpdmVyLT5kZXZfcHJpdl9zaXplOwotCQkJYnVmLT5kZXZfcHJpdmF0ZSA9IGRybV9hbGxvYyggYnVmLT5kZXZfcHJpdl9zaXplLAotCQkJCQkJICAgICAgIERSTV9NRU1fQlVGUyApOwotCQkJaWYoIWJ1Zi0+ZGV2X3ByaXZhdGUpIHsKKwkJCWJ1Zi0+ZGV2X3ByaXZhdGUgPSBkcm1fYWxsb2MoYnVmLT5kZXZfcHJpdl9zaXplLAorCQkJCQkJICAgICBEUk1fTUVNX0JVRlMpOworCQkJaWYgKCFidWYtPmRldl9wcml2YXRlKSB7CiAJCQkJLyogU2V0IGNvdW50IGNvcnJlY3RseSBzbyB3ZSBmcmVlIHRoZSBwcm9wZXIgYW1vdW50LiAqLwogCQkJCWVudHJ5LT5idWZfY291bnQgPSBjb3VudDsKIAkJCQllbnRyeS0+c2VnX2NvdW50ID0gY291bnQ7Ci0JCQkJZHJtX2NsZWFudXBfYnVmX2Vycm9yKGRldixlbnRyeSk7Ci0JCQkJZHJtX2ZyZWUoIHRlbXBfcGFnZWxpc3QsCi0JCQkJCSAgIChkbWEtPnBhZ2VfY291bnQgKyAoY291bnQgPDwgcGFnZV9vcmRlcikpCi0JCQkJCSAgICogc2l6ZW9mKCpkbWEtPnBhZ2VsaXN0KSwKLQkJCQkJICAgRFJNX01FTV9QQUdFUyApOwotCQkJCXVwKCAmZGV2LT5zdHJ1Y3Rfc2VtICk7Ci0JCQkJYXRvbWljX2RlYyggJmRldi0+YnVmX2FsbG9jICk7CisJCQkJZHJtX2NsZWFudXBfYnVmX2Vycm9yKGRldiwgZW50cnkpOworCQkJCWRybV9mcmVlKHRlbXBfcGFnZWxpc3QsCisJCQkJCSAoZG1hLT5wYWdlX2NvdW50ICsKKwkJCQkJICAoY291bnQgPDwgcGFnZV9vcmRlcikpCisJCQkJCSAqIHNpemVvZigqZG1hLT5wYWdlbGlzdCksCisJCQkJCSBEUk1fTUVNX1BBR0VTKTsKKwkJCQl1cCgmZGV2LT5zdHJ1Y3Rfc2VtKTsKKwkJCQlhdG9taWNfZGVjKCZkZXYtPmJ1Zl9hbGxvYyk7CiAJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQl9Ci0JCQltZW1zZXQoIGJ1Zi0+ZGV2X3ByaXZhdGUsIDAsIGJ1Zi0+ZGV2X3ByaXZfc2l6ZSApOworCQkJbWVtc2V0KGJ1Zi0+ZGV2X3ByaXZhdGUsIDAsIGJ1Zi0+ZGV2X3ByaXZfc2l6ZSk7CiAKLQkJCURSTV9ERUJVRyggImJ1ZmZlciAlZCBAICVwXG4iLAotCQkJCSAgIGVudHJ5LT5idWZfY291bnQsIGJ1Zi0+YWRkcmVzcyApOworCQkJRFJNX0RFQlVHKCJidWZmZXIgJWQgQCAlcFxuIiwKKwkJCQkgIGVudHJ5LT5idWZfY291bnQsIGJ1Zi0+YWRkcmVzcyk7CiAJCX0KIAkJYnl0ZV9jb3VudCArPSBQQUdFX1NJWkUgPDwgcGFnZV9vcmRlcjsKIAl9CiAKLQl0ZW1wX2J1Zmxpc3QgPSBkcm1fcmVhbGxvYyggZG1hLT5idWZsaXN0LAotCQkJCSAgICAgZG1hLT5idWZfY291bnQgKiBzaXplb2YoKmRtYS0+YnVmbGlzdCksCi0JCQkJICAgICAoZG1hLT5idWZfY291bnQgKyBlbnRyeS0+YnVmX2NvdW50KQotCQkJCSAgICAgKiBzaXplb2YoKmRtYS0+YnVmbGlzdCksCi0JCQkJICAgICBEUk1fTUVNX0JVRlMgKTsKKwl0ZW1wX2J1Zmxpc3QgPSBkcm1fcmVhbGxvYyhkbWEtPmJ1Zmxpc3QsCisJCQkJICAgZG1hLT5idWZfY291bnQgKiBzaXplb2YoKmRtYS0+YnVmbGlzdCksCisJCQkJICAgKGRtYS0+YnVmX2NvdW50ICsgZW50cnktPmJ1Zl9jb3VudCkKKwkJCQkgICAqIHNpemVvZigqZG1hLT5idWZsaXN0KSwgRFJNX01FTV9CVUZTKTsKIAlpZiAoIXRlbXBfYnVmbGlzdCkgewogCQkvKiBGcmVlIHRoZSBlbnRyeSBiZWNhdXNlIGl0IGlzbid0IHZhbGlkICovCi0JCWRybV9jbGVhbnVwX2J1Zl9lcnJvcihkZXYsZW50cnkpOwotCQlkcm1fZnJlZSggdGVtcF9wYWdlbGlzdCwKLQkJCSAgIChkbWEtPnBhZ2VfY291bnQgKyAoY291bnQgPDwgcGFnZV9vcmRlcikpCi0JCQkgICAqIHNpemVvZigqZG1hLT5wYWdlbGlzdCksCi0JCQkgICBEUk1fTUVNX1BBR0VTICk7Ci0JCXVwKCAmZGV2LT5zdHJ1Y3Rfc2VtICk7Ci0JCWF0b21pY19kZWMoICZkZXYtPmJ1Zl9hbGxvYyApOworCQlkcm1fY2xlYW51cF9idWZfZXJyb3IoZGV2LCBlbnRyeSk7CisJCWRybV9mcmVlKHRlbXBfcGFnZWxpc3QsCisJCQkgKGRtYS0+cGFnZV9jb3VudCArIChjb3VudCA8PCBwYWdlX29yZGVyKSkKKwkJCSAqIHNpemVvZigqZG1hLT5wYWdlbGlzdCksIERSTV9NRU1fUEFHRVMpOworCQl1cCgmZGV2LT5zdHJ1Y3Rfc2VtKTsKKwkJYXRvbWljX2RlYygmZGV2LT5idWZfYWxsb2MpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJZG1hLT5idWZsaXN0ID0gdGVtcF9idWZsaXN0OwogCi0JZm9yICggaSA9IDAgOyBpIDwgZW50cnktPmJ1Zl9jb3VudCA7IGkrKyApIHsKKwlmb3IgKGkgPSAwOyBpIDwgZW50cnktPmJ1Zl9jb3VudDsgaSsrKSB7CiAJCWRtYS0+YnVmbGlzdFtpICsgZG1hLT5idWZfY291bnRdID0gJmVudHJ5LT5idWZsaXN0W2ldOwogCX0KIApAQCAtODY0LDggKzg2MSw4IEBACiAJICovCiAJaWYgKGRtYS0+cGFnZV9jb3VudCkgewogCQlkcm1fZnJlZShkbWEtPnBhZ2VsaXN0LAotCQkJICBkbWEtPnBhZ2VfY291bnQgKiBzaXplb2YoKmRtYS0+cGFnZWxpc3QpLAotCQkJICBEUk1fTUVNX1BBR0VTKTsKKwkJCSBkbWEtPnBhZ2VfY291bnQgKiBzaXplb2YoKmRtYS0+cGFnZWxpc3QpLAorCQkJIERSTV9NRU1fUEFHRVMpOwogCX0KIAlkbWEtPnBhZ2VsaXN0ID0gdGVtcF9wYWdlbGlzdDsKIApAQCAtODc0LDE4ICs4NzEsMTkgQEAKIAlkbWEtPnBhZ2VfY291bnQgKz0gZW50cnktPnNlZ19jb3VudCA8PCBwYWdlX29yZGVyOwogCWRtYS0+Ynl0ZV9jb3VudCArPSBQQUdFX1NJWkUgKiAoZW50cnktPnNlZ19jb3VudCA8PCBwYWdlX29yZGVyKTsKIAotCXVwKCAmZGV2LT5zdHJ1Y3Rfc2VtICk7CisJdXAoJmRldi0+c3RydWN0X3NlbSk7CiAKIAlyZXF1ZXN0LT5jb3VudCA9IGVudHJ5LT5idWZfY291bnQ7CiAJcmVxdWVzdC0+c2l6ZSA9IHNpemU7CiAKLQlhdG9taWNfZGVjKCAmZGV2LT5idWZfYWxsb2MgKTsKKwlhdG9taWNfZGVjKCZkZXYtPmJ1Zl9hbGxvYyk7CiAJcmV0dXJuIDA7CiAKIH0KKwogRVhQT1JUX1NZTUJPTChkcm1fYWRkYnVmc19wY2kpOwogCi1zdGF0aWMgaW50IGRybV9hZGRidWZzX3NnKGRybV9kZXZpY2VfdCAqZGV2LCBkcm1fYnVmX2Rlc2NfdCAqcmVxdWVzdCkKK3N0YXRpYyBpbnQgZHJtX2FkZGJ1ZnNfc2coZHJtX2RldmljZV90ICogZGV2LCBkcm1fYnVmX2Rlc2NfdCAqIHJlcXVlc3QpCiB7CiAJZHJtX2RldmljZV9kbWFfdCAqZG1hID0gZGV2LT5kbWE7CiAJZHJtX2J1Zl9lbnRyeV90ICplbnRyeTsKQEAgLTkwMiwxNDYgKzkwMCwxNDcgQEAKIAlpbnQgaTsKIAlkcm1fYnVmX3QgKip0ZW1wX2J1Zmxpc3Q7CiAKLQlpZiAoIWRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfU0cpKSByZXR1cm4gLUVJTlZBTDsKLQkKLQlpZiAoICFkbWEgKSByZXR1cm4gLUVJTlZBTDsKKwlpZiAoIWRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfU0cpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghZG1hKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCWNvdW50ID0gcmVxdWVzdC0+Y291bnQ7CiAJb3JkZXIgPSBkcm1fb3JkZXIocmVxdWVzdC0+c2l6ZSk7CiAJc2l6ZSA9IDEgPDwgb3JkZXI7CiAKLQlhbGlnbm1lbnQgID0gKHJlcXVlc3QtPmZsYWdzICYgX0RSTV9QQUdFX0FMSUdOKQotCQkJPyBQQUdFX0FMSUdOKHNpemUpIDogc2l6ZTsKKwlhbGlnbm1lbnQgPSAocmVxdWVzdC0+ZmxhZ3MgJiBfRFJNX1BBR0VfQUxJR04pCisJICAgID8gUEFHRV9BTElHTihzaXplKSA6IHNpemU7CiAJcGFnZV9vcmRlciA9IG9yZGVyIC0gUEFHRV9TSElGVCA+IDAgPyBvcmRlciAtIFBBR0VfU0hJRlQgOiAwOwogCXRvdGFsID0gUEFHRV9TSVpFIDw8IHBhZ2Vfb3JkZXI7CiAKIAlieXRlX2NvdW50ID0gMDsKIAlhZ3Bfb2Zmc2V0ID0gcmVxdWVzdC0+YWdwX3N0YXJ0OwogCi0JRFJNX0RFQlVHKCAiY291bnQ6ICAgICAgJWRcbiIsICBjb3VudCApOwotCURSTV9ERUJVRyggIm9yZGVyOiAgICAgICVkXG4iLCAgb3JkZXIgKTsKLQlEUk1fREVCVUcoICJzaXplOiAgICAgICAlZFxuIiwgIHNpemUgKTsKLQlEUk1fREVCVUcoICJhZ3Bfb2Zmc2V0OiAlbHVcbiIsIGFncF9vZmZzZXQgKTsKLQlEUk1fREVCVUcoICJhbGlnbm1lbnQ6ICAlZFxuIiwgIGFsaWdubWVudCApOwotCURSTV9ERUJVRyggInBhZ2Vfb3JkZXI6ICVkXG4iLCAgcGFnZV9vcmRlciApOwotCURSTV9ERUJVRyggInRvdGFsOiAgICAgICVkXG4iLCAgdG90YWwgKTsKKwlEUk1fREVCVUcoImNvdW50OiAgICAgICVkXG4iLCBjb3VudCk7CisJRFJNX0RFQlVHKCJvcmRlcjogICAgICAlZFxuIiwgb3JkZXIpOworCURSTV9ERUJVRygic2l6ZTogICAgICAgJWRcbiIsIHNpemUpOworCURSTV9ERUJVRygiYWdwX29mZnNldDogJWx1XG4iLCBhZ3Bfb2Zmc2V0KTsKKwlEUk1fREVCVUcoImFsaWdubWVudDogICVkXG4iLCBhbGlnbm1lbnQpOworCURSTV9ERUJVRygicGFnZV9vcmRlcjogJWRcbiIsIHBhZ2Vfb3JkZXIpOworCURSTV9ERUJVRygidG90YWw6ICAgICAgJWRcbiIsIHRvdGFsKTsKIAotCWlmICggb3JkZXIgPCBEUk1fTUlOX09SREVSIHx8IG9yZGVyID4gRFJNX01BWF9PUkRFUiApIHJldHVybiAtRUlOVkFMOwotCWlmICggZGV2LT5xdWV1ZV9jb3VudCApIHJldHVybiAtRUJVU1k7IC8qIE5vdCB3aGlsZSBpbiB1c2UgKi8KKwlpZiAob3JkZXIgPCBEUk1fTUlOX09SREVSIHx8IG9yZGVyID4gRFJNX01BWF9PUkRFUikKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGRldi0+cXVldWVfY291bnQpCisJCXJldHVybiAtRUJVU1k7CS8qIE5vdCB3aGlsZSBpbiB1c2UgKi8KIAotCXNwaW5fbG9jayggJmRldi0+Y291bnRfbG9jayApOwotCWlmICggZGV2LT5idWZfdXNlICkgewotCQlzcGluX3VubG9jayggJmRldi0+Y291bnRfbG9jayApOworCXNwaW5fbG9jaygmZGV2LT5jb3VudF9sb2NrKTsKKwlpZiAoZGV2LT5idWZfdXNlKSB7CisJCXNwaW5fdW5sb2NrKCZkZXYtPmNvdW50X2xvY2spOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KLQlhdG9taWNfaW5jKCAmZGV2LT5idWZfYWxsb2MgKTsKLQlzcGluX3VubG9jayggJmRldi0+Y291bnRfbG9jayApOworCWF0b21pY19pbmMoJmRldi0+YnVmX2FsbG9jKTsKKwlzcGluX3VubG9jaygmZGV2LT5jb3VudF9sb2NrKTsKIAotCWRvd24oICZkZXYtPnN0cnVjdF9zZW0gKTsKKwlkb3duKCZkZXYtPnN0cnVjdF9zZW0pOwogCWVudHJ5ID0gJmRtYS0+YnVmc1tvcmRlcl07Ci0JaWYgKCBlbnRyeS0+YnVmX2NvdW50ICkgewotCQl1cCggJmRldi0+c3RydWN0X3NlbSApOwotCQlhdG9taWNfZGVjKCAmZGV2LT5idWZfYWxsb2MgKTsKLQkJcmV0dXJuIC1FTk9NRU07IC8qIE1heSBvbmx5IGNhbGwgb25jZSBmb3IgZWFjaCBvcmRlciAqLworCWlmIChlbnRyeS0+YnVmX2NvdW50KSB7CisJCXVwKCZkZXYtPnN0cnVjdF9zZW0pOworCQlhdG9taWNfZGVjKCZkZXYtPmJ1Zl9hbGxvYyk7CisJCXJldHVybiAtRU5PTUVNOwkvKiBNYXkgb25seSBjYWxsIG9uY2UgZm9yIGVhY2ggb3JkZXIgKi8KIAl9CiAKIAlpZiAoY291bnQgPCAwIHx8IGNvdW50ID4gNDA5NikgewotCQl1cCggJmRldi0+c3RydWN0X3NlbSApOwotCQlhdG9taWNfZGVjKCAmZGV2LT5idWZfYWxsb2MgKTsKKwkJdXAoJmRldi0+c3RydWN0X3NlbSk7CisJCWF0b21pY19kZWMoJmRldi0+YnVmX2FsbG9jKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JZW50cnktPmJ1Zmxpc3QgPSBkcm1fYWxsb2MoIGNvdW50ICogc2l6ZW9mKCplbnRyeS0+YnVmbGlzdCksCi0JCQkJICAgICBEUk1fTUVNX0JVRlMgKTsKLQlpZiAoICFlbnRyeS0+YnVmbGlzdCApIHsKLQkJdXAoICZkZXYtPnN0cnVjdF9zZW0gKTsKLQkJYXRvbWljX2RlYyggJmRldi0+YnVmX2FsbG9jICk7CisJZW50cnktPmJ1Zmxpc3QgPSBkcm1fYWxsb2MoY291bnQgKiBzaXplb2YoKmVudHJ5LT5idWZsaXN0KSwKKwkJCQkgICBEUk1fTUVNX0JVRlMpOworCWlmICghZW50cnktPmJ1Zmxpc3QpIHsKKwkJdXAoJmRldi0+c3RydWN0X3NlbSk7CisJCWF0b21pY19kZWMoJmRldi0+YnVmX2FsbG9jKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCW1lbXNldCggZW50cnktPmJ1Zmxpc3QsIDAsIGNvdW50ICogc2l6ZW9mKCplbnRyeS0+YnVmbGlzdCkgKTsKKwltZW1zZXQoZW50cnktPmJ1Zmxpc3QsIDAsIGNvdW50ICogc2l6ZW9mKCplbnRyeS0+YnVmbGlzdCkpOwogCiAJZW50cnktPmJ1Zl9zaXplID0gc2l6ZTsKIAllbnRyeS0+cGFnZV9vcmRlciA9IHBhZ2Vfb3JkZXI7CiAKIAlvZmZzZXQgPSAwOwogCi0Jd2hpbGUgKCBlbnRyeS0+YnVmX2NvdW50IDwgY291bnQgKSB7Ci0JCWJ1ZiAgICAgICAgICA9ICZlbnRyeS0+YnVmbGlzdFtlbnRyeS0+YnVmX2NvdW50XTsKLQkJYnVmLT5pZHggICAgID0gZG1hLT5idWZfY291bnQgKyBlbnRyeS0+YnVmX2NvdW50OwotCQlidWYtPnRvdGFsICAgPSBhbGlnbm1lbnQ7Ci0JCWJ1Zi0+b3JkZXIgICA9IG9yZGVyOwotCQlidWYtPnVzZWQgICAgPSAwOworCXdoaWxlIChlbnRyeS0+YnVmX2NvdW50IDwgY291bnQpIHsKKwkJYnVmID0gJmVudHJ5LT5idWZsaXN0W2VudHJ5LT5idWZfY291bnRdOworCQlidWYtPmlkeCA9IGRtYS0+YnVmX2NvdW50ICsgZW50cnktPmJ1Zl9jb3VudDsKKwkJYnVmLT50b3RhbCA9IGFsaWdubWVudDsKKwkJYnVmLT5vcmRlciA9IG9yZGVyOworCQlidWYtPnVzZWQgPSAwOwogCi0JCWJ1Zi0+b2Zmc2V0ICA9IChkbWEtPmJ5dGVfY291bnQgKyBvZmZzZXQpOworCQlidWYtPm9mZnNldCA9IChkbWEtPmJ5dGVfY291bnQgKyBvZmZzZXQpOwogCQlidWYtPmJ1c19hZGRyZXNzID0gYWdwX29mZnNldCArIG9mZnNldDsKLQkJYnVmLT5hZGRyZXNzID0gKHZvaWQgKikoYWdwX29mZnNldCArIG9mZnNldCAKKwkJYnVmLT5hZGRyZXNzID0gKHZvaWQgKikoYWdwX29mZnNldCArIG9mZnNldAogCQkJCQkrICh1bnNpZ25lZCBsb25nKWRldi0+c2ctPnZpcnR1YWwpOwotCQlidWYtPm5leHQgICAgPSBOVUxMOworCQlidWYtPm5leHQgPSBOVUxMOwogCQlidWYtPndhaXRpbmcgPSAwOwogCQlidWYtPnBlbmRpbmcgPSAwOwotCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCAmYnVmLT5kbWFfd2FpdCApOwotCQlidWYtPmZpbHAgICAgPSBOVUxMOworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZidWYtPmRtYV93YWl0KTsKKwkJYnVmLT5maWxwID0gTlVMTDsKIAogCQlidWYtPmRldl9wcml2X3NpemUgPSBkZXYtPmRyaXZlci0+ZGV2X3ByaXZfc2l6ZTsKLQkJYnVmLT5kZXZfcHJpdmF0ZSA9IGRybV9hbGxvYyggYnVmLT5kZXZfcHJpdl9zaXplLAotCQkJCQkgICAgICAgRFJNX01FTV9CVUZTICk7Ci0JCWlmKCFidWYtPmRldl9wcml2YXRlKSB7CisJCWJ1Zi0+ZGV2X3ByaXZhdGUgPSBkcm1fYWxsb2MoYnVmLT5kZXZfcHJpdl9zaXplLCBEUk1fTUVNX0JVRlMpOworCQlpZiAoIWJ1Zi0+ZGV2X3ByaXZhdGUpIHsKIAkJCS8qIFNldCBjb3VudCBjb3JyZWN0bHkgc28gd2UgZnJlZSB0aGUgcHJvcGVyIGFtb3VudC4gKi8KIAkJCWVudHJ5LT5idWZfY291bnQgPSBjb3VudDsKLQkJCWRybV9jbGVhbnVwX2J1Zl9lcnJvcihkZXYsZW50cnkpOwotCQkJdXAoICZkZXYtPnN0cnVjdF9zZW0gKTsKLQkJCWF0b21pY19kZWMoICZkZXYtPmJ1Zl9hbGxvYyApOworCQkJZHJtX2NsZWFudXBfYnVmX2Vycm9yKGRldiwgZW50cnkpOworCQkJdXAoJmRldi0+c3RydWN0X3NlbSk7CisJCQlhdG9taWNfZGVjKCZkZXYtPmJ1Zl9hbGxvYyk7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCi0JCW1lbXNldCggYnVmLT5kZXZfcHJpdmF0ZSwgMCwgYnVmLT5kZXZfcHJpdl9zaXplICk7CisJCW1lbXNldChidWYtPmRldl9wcml2YXRlLCAwLCBidWYtPmRldl9wcml2X3NpemUpOwogCi0JCURSTV9ERUJVRyggImJ1ZmZlciAlZCBAICVwXG4iLAotCQkJICAgZW50cnktPmJ1Zl9jb3VudCwgYnVmLT5hZGRyZXNzICk7CisJCURSTV9ERUJVRygiYnVmZmVyICVkIEAgJXBcbiIsIGVudHJ5LT5idWZfY291bnQsIGJ1Zi0+YWRkcmVzcyk7CiAKIAkJb2Zmc2V0ICs9IGFsaWdubWVudDsKIAkJZW50cnktPmJ1Zl9jb3VudCsrOwogCQlieXRlX2NvdW50ICs9IFBBR0VfU0laRSA8PCBwYWdlX29yZGVyOwogCX0KIAotCURSTV9ERUJVRyggImJ5dGVfY291bnQ6ICVkXG4iLCBieXRlX2NvdW50ICk7CisJRFJNX0RFQlVHKCJieXRlX2NvdW50OiAlZFxuIiwgYnl0ZV9jb3VudCk7CiAKLQl0ZW1wX2J1Zmxpc3QgPSBkcm1fcmVhbGxvYyggZG1hLT5idWZsaXN0LAotCQkJCSAgICAgZG1hLT5idWZfY291bnQgKiBzaXplb2YoKmRtYS0+YnVmbGlzdCksCi0JCQkJICAgICAoZG1hLT5idWZfY291bnQgKyBlbnRyeS0+YnVmX2NvdW50KQotCQkJCSAgICAgKiBzaXplb2YoKmRtYS0+YnVmbGlzdCksCi0JCQkJICAgICBEUk1fTUVNX0JVRlMgKTsKLQlpZighdGVtcF9idWZsaXN0KSB7CisJdGVtcF9idWZsaXN0ID0gZHJtX3JlYWxsb2MoZG1hLT5idWZsaXN0LAorCQkJCSAgIGRtYS0+YnVmX2NvdW50ICogc2l6ZW9mKCpkbWEtPmJ1Zmxpc3QpLAorCQkJCSAgIChkbWEtPmJ1Zl9jb3VudCArIGVudHJ5LT5idWZfY291bnQpCisJCQkJICAgKiBzaXplb2YoKmRtYS0+YnVmbGlzdCksIERSTV9NRU1fQlVGUyk7CisJaWYgKCF0ZW1wX2J1Zmxpc3QpIHsKIAkJLyogRnJlZSB0aGUgZW50cnkgYmVjYXVzZSBpdCBpc24ndCB2YWxpZCAqLwotCQlkcm1fY2xlYW51cF9idWZfZXJyb3IoZGV2LGVudHJ5KTsKLQkJdXAoICZkZXYtPnN0cnVjdF9zZW0gKTsKLQkJYXRvbWljX2RlYyggJmRldi0+YnVmX2FsbG9jICk7CisJCWRybV9jbGVhbnVwX2J1Zl9lcnJvcihkZXYsIGVudHJ5KTsKKwkJdXAoJmRldi0+c3RydWN0X3NlbSk7CisJCWF0b21pY19kZWMoJmRldi0+YnVmX2FsbG9jKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCWRtYS0+YnVmbGlzdCA9IHRlbXBfYnVmbGlzdDsKIAotCWZvciAoIGkgPSAwIDsgaSA8IGVudHJ5LT5idWZfY291bnQgOyBpKysgKSB7CisJZm9yIChpID0gMDsgaSA8IGVudHJ5LT5idWZfY291bnQ7IGkrKykgewogCQlkbWEtPmJ1Zmxpc3RbaSArIGRtYS0+YnVmX2NvdW50XSA9ICZlbnRyeS0+YnVmbGlzdFtpXTsKIAl9CiAKIAlkbWEtPmJ1Zl9jb3VudCArPSBlbnRyeS0+YnVmX2NvdW50OwogCWRtYS0+Ynl0ZV9jb3VudCArPSBieXRlX2NvdW50OwogCi0JRFJNX0RFQlVHKCAiZG1hLT5idWZfY291bnQgOiAlZFxuIiwgZG1hLT5idWZfY291bnQgKTsKLQlEUk1fREVCVUcoICJlbnRyeS0+YnVmX2NvdW50IDogJWRcbiIsIGVudHJ5LT5idWZfY291bnQgKTsKKwlEUk1fREVCVUcoImRtYS0+YnVmX2NvdW50IDogJWRcbiIsIGRtYS0+YnVmX2NvdW50KTsKKwlEUk1fREVCVUcoImVudHJ5LT5idWZfY291bnQgOiAlZFxuIiwgZW50cnktPmJ1Zl9jb3VudCk7CiAKLQl1cCggJmRldi0+c3RydWN0X3NlbSApOworCXVwKCZkZXYtPnN0cnVjdF9zZW0pOwogCiAJcmVxdWVzdC0+Y291bnQgPSBlbnRyeS0+YnVmX2NvdW50OwogCXJlcXVlc3QtPnNpemUgPSBzaXplOwogCiAJZG1hLT5mbGFncyA9IF9EUk1fRE1BX1VTRV9TRzsKIAotCWF0b21pY19kZWMoICZkZXYtPmJ1Zl9hbGxvYyApOworCWF0b21pY19kZWMoJmRldi0+YnVmX2FsbG9jKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBkcm1fYWRkYnVmc19mYihkcm1fZGV2aWNlX3QgKmRldiwgZHJtX2J1Zl9kZXNjX3QgKnJlcXVlc3QpCitzdGF0aWMgaW50IGRybV9hZGRidWZzX2ZiKGRybV9kZXZpY2VfdCAqIGRldiwgZHJtX2J1Zl9kZXNjX3QgKiByZXF1ZXN0KQogewogCWRybV9kZXZpY2VfZG1hX3QgKmRtYSA9IGRldi0+ZG1hOwogCWRybV9idWZfZW50cnlfdCAqZW50cnk7CkBAIC0xMDYwLDcgKzEwNTksNyBAQAogCiAJaWYgKCFkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX0ZCX0RNQSkpCiAJCXJldHVybiAtRUlOVkFMOwotICAgIAorCiAJaWYgKCFkbWEpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0xMjEwLDQzICsxMjA5LDQxIEBACiAgKiBhZGRidWZzX3NnKCkgb3IgYWRkYnVmc19wY2koKSBmb3IgQUdQLCBzY2F0dGVyLWdhdGhlciBvciBjb25zaXN0ZW50CiAgKiBQQ0kgbWVtb3J5IHJlc3BlY3RpdmVseS4KICAqLwotaW50IGRybV9hZGRidWZzKCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyApCitpbnQgZHJtX2FkZGJ1ZnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCisJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCWRybV9idWZfZGVzY190IHJlcXVlc3Q7CiAJZHJtX2ZpbGVfdCAqcHJpdiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAlkcm1fZGV2aWNlX3QgKmRldiA9IHByaXYtPmhlYWQtPmRldjsKIAlpbnQgcmV0OwotCQorCiAJaWYgKCFkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX0hBVkVfRE1BKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoIGNvcHlfZnJvbV91c2VyKCAmcmVxdWVzdCwgKGRybV9idWZfZGVzY190IF9fdXNlciAqKWFyZywKLQkJCSAgICAgc2l6ZW9mKHJlcXVlc3QpICkgKQorCWlmIChjb3B5X2Zyb21fdXNlcigmcmVxdWVzdCwgKGRybV9idWZfZGVzY190IF9fdXNlciAqKSBhcmcsCisJCQkgICBzaXplb2YocmVxdWVzdCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAogI2lmIF9fT1NfSEFTX0FHUAotCWlmICggcmVxdWVzdC5mbGFncyAmIF9EUk1fQUdQX0JVRkZFUiApCi0JCXJldD1kcm1fYWRkYnVmc19hZ3AoZGV2LCAmcmVxdWVzdCk7CisJaWYgKHJlcXVlc3QuZmxhZ3MgJiBfRFJNX0FHUF9CVUZGRVIpCisJCXJldCA9IGRybV9hZGRidWZzX2FncChkZXYsICZyZXF1ZXN0KTsKIAllbHNlCiAjZW5kaWYKLQlpZiAoIHJlcXVlc3QuZmxhZ3MgJiBfRFJNX1NHX0JVRkZFUiApCi0JCXJldD1kcm1fYWRkYnVmc19zZyhkZXYsICZyZXF1ZXN0KTsKLQllbHNlIGlmICggcmVxdWVzdC5mbGFncyAmIF9EUk1fRkJfQlVGRkVSKQotCQlyZXQ9ZHJtX2FkZGJ1ZnNfZmIoZGV2LCAmcmVxdWVzdCk7CisJaWYgKHJlcXVlc3QuZmxhZ3MgJiBfRFJNX1NHX0JVRkZFUikKKwkJcmV0ID0gZHJtX2FkZGJ1ZnNfc2coZGV2LCAmcmVxdWVzdCk7CisJZWxzZSBpZiAocmVxdWVzdC5mbGFncyAmIF9EUk1fRkJfQlVGRkVSKQorCQlyZXQgPSBkcm1fYWRkYnVmc19mYihkZXYsICZyZXF1ZXN0KTsKIAllbHNlCi0JCXJldD1kcm1fYWRkYnVmc19wY2koZGV2LCAmcmVxdWVzdCk7CisJCXJldCA9IGRybV9hZGRidWZzX3BjaShkZXYsICZyZXF1ZXN0KTsKIAotCWlmIChyZXQ9PTApIHsKLQkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsICZyZXF1ZXN0LAotCQkJCSBzaXplb2YocmVxdWVzdCkpKSB7CisJaWYgKHJldCA9PSAwKSB7CisJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmcmVxdWVzdCwgc2l6ZW9mKHJlcXVlc3QpKSkgewogCQkJcmV0ID0gLUVGQVVMVDsKIAkJfQogCX0KIAlyZXR1cm4gcmV0OwogfQogCi0KIC8qKgogICogR2V0IGluZm9ybWF0aW9uIGFib3V0IHRoZSBidWZmZXIgbWFwcGluZ3MuCiAgKgpAQCAtMTI2NCw4ICsxMjYxLDggQEAKICAqIGxvY2ssIHByZXZlbnRpbmcgb2YgYWxsb2NhdGluZyBtb3JlIGJ1ZmZlcnMgYWZ0ZXIgdGhpcyBjYWxsLiBJbmZvcm1hdGlvbgogICogYWJvdXQgZWFjaCByZXF1ZXN0ZWQgYnVmZmVyIGlzIHRoZW4gY29waWVkIGludG8gdXNlciBzcGFjZS4KICAqLwotaW50IGRybV9pbmZvYnVmcyggc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCi0JCSAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnICkKK2ludCBkcm1faW5mb2J1ZnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCisJCSB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlkcm1fZmlsZV90ICpwcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCWRybV9kZXZpY2VfdCAqZGV2ID0gcHJpdi0+aGVhZC0+ZGV2OwpAQCAtMTI3OCw1OCArMTI3NSw2MSBAQAogCWlmICghZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9IQVZFX0RNQSkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKCAhZG1hICkgcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFkbWEpCisJCXJldHVybiAtRUlOVkFMOwogCi0Jc3Bpbl9sb2NrKCAmZGV2LT5jb3VudF9sb2NrICk7Ci0JaWYgKCBhdG9taWNfcmVhZCggJmRldi0+YnVmX2FsbG9jICkgKSB7Ci0JCXNwaW5fdW5sb2NrKCAmZGV2LT5jb3VudF9sb2NrICk7CisJc3Bpbl9sb2NrKCZkZXYtPmNvdW50X2xvY2spOworCWlmIChhdG9taWNfcmVhZCgmZGV2LT5idWZfYWxsb2MpKSB7CisJCXNwaW5fdW5sb2NrKCZkZXYtPmNvdW50X2xvY2spOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAkrK2Rldi0+YnVmX3VzZTsJCS8qIENhbid0IGFsbG9jYXRlIG1vcmUgYWZ0ZXIgdGhpcyBjYWxsICovCi0Jc3Bpbl91bmxvY2soICZkZXYtPmNvdW50X2xvY2sgKTsKKwlzcGluX3VubG9jaygmZGV2LT5jb3VudF9sb2NrKTsKIAotCWlmICggY29weV9mcm9tX3VzZXIoICZyZXF1ZXN0LCBhcmdwLCBzaXplb2YocmVxdWVzdCkgKSApCisJaWYgKGNvcHlfZnJvbV91c2VyKCZyZXF1ZXN0LCBhcmdwLCBzaXplb2YocmVxdWVzdCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWZvciAoIGkgPSAwLCBjb3VudCA9IDAgOyBpIDwgRFJNX01BWF9PUkRFUiArIDEgOyBpKysgKSB7Ci0JCWlmICggZG1hLT5idWZzW2ldLmJ1Zl9jb3VudCApICsrY291bnQ7CisJZm9yIChpID0gMCwgY291bnQgPSAwOyBpIDwgRFJNX01BWF9PUkRFUiArIDE7IGkrKykgeworCQlpZiAoZG1hLT5idWZzW2ldLmJ1Zl9jb3VudCkKKwkJCSsrY291bnQ7CiAJfQogCi0JRFJNX0RFQlVHKCAiY291bnQgPSAlZFxuIiwgY291bnQgKTsKKwlEUk1fREVCVUcoImNvdW50ID0gJWRcbiIsIGNvdW50KTsKIAotCWlmICggcmVxdWVzdC5jb3VudCA+PSBjb3VudCApIHsKLQkJZm9yICggaSA9IDAsIGNvdW50ID0gMCA7IGkgPCBEUk1fTUFYX09SREVSICsgMSA7IGkrKyApIHsKLQkJCWlmICggZG1hLT5idWZzW2ldLmJ1Zl9jb3VudCApIHsKLQkJCQlkcm1fYnVmX2Rlc2NfdCBfX3VzZXIgKnRvID0gJnJlcXVlc3QubGlzdFtjb3VudF07CisJaWYgKHJlcXVlc3QuY291bnQgPj0gY291bnQpIHsKKwkJZm9yIChpID0gMCwgY291bnQgPSAwOyBpIDwgRFJNX01BWF9PUkRFUiArIDE7IGkrKykgeworCQkJaWYgKGRtYS0+YnVmc1tpXS5idWZfY291bnQpIHsKKwkJCQlkcm1fYnVmX2Rlc2NfdCBfX3VzZXIgKnRvID0KKwkJCQkgICAgJnJlcXVlc3QubGlzdFtjb3VudF07CiAJCQkJZHJtX2J1Zl9lbnRyeV90ICpmcm9tID0gJmRtYS0+YnVmc1tpXTsKIAkJCQlkcm1fZnJlZWxpc3RfdCAqbGlzdCA9ICZkbWEtPmJ1ZnNbaV0uZnJlZWxpc3Q7Ci0JCQkJaWYgKCBjb3B5X3RvX3VzZXIoICZ0by0+Y291bnQsCi0JCQkJCQkgICAmZnJvbS0+YnVmX2NvdW50LAotCQkJCQkJICAgc2l6ZW9mKGZyb20tPmJ1Zl9jb3VudCkgKSB8fAotCQkJCSAgICAgY29weV90b191c2VyKCAmdG8tPnNpemUsCi0JCQkJCQkgICAmZnJvbS0+YnVmX3NpemUsCi0JCQkJCQkgICBzaXplb2YoZnJvbS0+YnVmX3NpemUpICkgfHwKLQkJCQkgICAgIGNvcHlfdG9fdXNlciggJnRvLT5sb3dfbWFyaywKLQkJCQkJCSAgICZsaXN0LT5sb3dfbWFyaywKLQkJCQkJCSAgIHNpemVvZihsaXN0LT5sb3dfbWFyaykgKSB8fAotCQkJCSAgICAgY29weV90b191c2VyKCAmdG8tPmhpZ2hfbWFyaywKLQkJCQkJCSAgICZsaXN0LT5oaWdoX21hcmssCi0JCQkJCQkgICBzaXplb2YobGlzdC0+aGlnaF9tYXJrKSApICkKKwkJCQlpZiAoY29weV90b191c2VyKCZ0by0+Y291bnQsCisJCQkJCQkgJmZyb20tPmJ1Zl9jb3VudCwKKwkJCQkJCSBzaXplb2YoZnJvbS0+YnVmX2NvdW50KSkgfHwKKwkJCQkgICAgY29weV90b191c2VyKCZ0by0+c2l6ZSwKKwkJCQkJCSAmZnJvbS0+YnVmX3NpemUsCisJCQkJCQkgc2l6ZW9mKGZyb20tPmJ1Zl9zaXplKSkgfHwKKwkJCQkgICAgY29weV90b191c2VyKCZ0by0+bG93X21hcmssCisJCQkJCQkgJmxpc3QtPmxvd19tYXJrLAorCQkJCQkJIHNpemVvZihsaXN0LT5sb3dfbWFyaykpIHx8CisJCQkJICAgIGNvcHlfdG9fdXNlcigmdG8tPmhpZ2hfbWFyaywKKwkJCQkJCSAmbGlzdC0+aGlnaF9tYXJrLAorCQkJCQkJIHNpemVvZihsaXN0LT5oaWdoX21hcmspKSkKIAkJCQkJcmV0dXJuIC1FRkFVTFQ7CiAKLQkJCQlEUk1fREVCVUcoICIlZCAlZCAlZCAlZCAlZFxuIiwKLQkJCQkJICAgaSwKLQkJCQkJICAgZG1hLT5idWZzW2ldLmJ1Zl9jb3VudCwKLQkJCQkJICAgZG1hLT5idWZzW2ldLmJ1Zl9zaXplLAotCQkJCQkgICBkbWEtPmJ1ZnNbaV0uZnJlZWxpc3QubG93X21hcmssCi0JCQkJCSAgIGRtYS0+YnVmc1tpXS5mcmVlbGlzdC5oaWdoX21hcmsgKTsKKwkJCQlEUk1fREVCVUcoIiVkICVkICVkICVkICVkXG4iLAorCQkJCQkgIGksCisJCQkJCSAgZG1hLT5idWZzW2ldLmJ1Zl9jb3VudCwKKwkJCQkJICBkbWEtPmJ1ZnNbaV0uYnVmX3NpemUsCisJCQkJCSAgZG1hLT5idWZzW2ldLmZyZWVsaXN0Lmxvd19tYXJrLAorCQkJCQkgIGRtYS0+YnVmc1tpXS5mcmVlbGlzdC5oaWdoX21hcmspOwogCQkJCSsrY291bnQ7CiAJCQl9CiAJCX0KIAl9CiAJcmVxdWVzdC5jb3VudCA9IGNvdW50OwogCi0JaWYgKCBjb3B5X3RvX3VzZXIoIGFyZ3AsICZyZXF1ZXN0LCBzaXplb2YocmVxdWVzdCkgKSApCisJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmcmVxdWVzdCwgc2l6ZW9mKHJlcXVlc3QpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlyZXR1cm4gMDsKQEAgLTEzNDksOCArMTM0OSw4IEBACiAgKgogICogXG5vdGUgVGhpcyBpb2N0bCBpcyBkZXByZWNhdGVkIGFuZCBtb3N0bHkgbmV2ZXIgdXNlZC4KICAqLwotaW50IGRybV9tYXJrYnVmcyggc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCi0JCSAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnICkKK2ludCBkcm1fbWFya2J1ZnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCisJCSB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlkcm1fZmlsZV90ICpwcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCWRybV9kZXZpY2VfdCAqZGV2ID0gcHJpdi0+aGVhZC0+ZGV2OwpAQCAtMTM2Miw0NCArMTM2Miw0NSBAQAogCWlmICghZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9IQVZFX0RNQSkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKCAhZG1hICkgcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFkbWEpCisJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKCBjb3B5X2Zyb21fdXNlciggJnJlcXVlc3QsCi0JCQkgICAgIChkcm1fYnVmX2Rlc2NfdCBfX3VzZXIgKilhcmcsCi0JCQkgICAgIHNpemVvZihyZXF1ZXN0KSApICkKKwlpZiAoY29weV9mcm9tX3VzZXIoJnJlcXVlc3QsCisJCQkgICAoZHJtX2J1Zl9kZXNjX3QgX191c2VyICopIGFyZywgc2l6ZW9mKHJlcXVlc3QpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlEUk1fREVCVUcoICIlZCwgJWQsICVkXG4iLAotCQkgICByZXF1ZXN0LnNpemUsIHJlcXVlc3QubG93X21hcmssIHJlcXVlc3QuaGlnaF9tYXJrICk7Ci0Jb3JkZXIgPSBkcm1fb3JkZXIoIHJlcXVlc3Quc2l6ZSApOwotCWlmICggb3JkZXIgPCBEUk1fTUlOX09SREVSIHx8IG9yZGVyID4gRFJNX01BWF9PUkRFUiApIHJldHVybiAtRUlOVkFMOworCURSTV9ERUJVRygiJWQsICVkLCAlZFxuIiwKKwkJICByZXF1ZXN0LnNpemUsIHJlcXVlc3QubG93X21hcmssIHJlcXVlc3QuaGlnaF9tYXJrKTsKKwlvcmRlciA9IGRybV9vcmRlcihyZXF1ZXN0LnNpemUpOworCWlmIChvcmRlciA8IERSTV9NSU5fT1JERVIgfHwgb3JkZXIgPiBEUk1fTUFYX09SREVSKQorCQlyZXR1cm4gLUVJTlZBTDsKIAllbnRyeSA9ICZkbWEtPmJ1ZnNbb3JkZXJdOwogCi0JaWYgKCByZXF1ZXN0Lmxvd19tYXJrIDwgMCB8fCByZXF1ZXN0Lmxvd19tYXJrID4gZW50cnktPmJ1Zl9jb3VudCApCisJaWYgKHJlcXVlc3QubG93X21hcmsgPCAwIHx8IHJlcXVlc3QubG93X21hcmsgPiBlbnRyeS0+YnVmX2NvdW50KQogCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoIHJlcXVlc3QuaGlnaF9tYXJrIDwgMCB8fCByZXF1ZXN0LmhpZ2hfbWFyayA+IGVudHJ5LT5idWZfY291bnQgKQorCWlmIChyZXF1ZXN0LmhpZ2hfbWFyayA8IDAgfHwgcmVxdWVzdC5oaWdoX21hcmsgPiBlbnRyeS0+YnVmX2NvdW50KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWVudHJ5LT5mcmVlbGlzdC5sb3dfbWFyayAgPSByZXF1ZXN0Lmxvd19tYXJrOworCWVudHJ5LT5mcmVlbGlzdC5sb3dfbWFyayA9IHJlcXVlc3QubG93X21hcms7CiAJZW50cnktPmZyZWVsaXN0LmhpZ2hfbWFyayA9IHJlcXVlc3QuaGlnaF9tYXJrOwogCiAJcmV0dXJuIDA7CiB9CiAKIC8qKgotICogVW5yZXNlcnZlIHRoZSBidWZmZXJzIGluIGxpc3QsIHByZXZpb3VzbHkgcmVzZXJ2ZWQgdXNpbmcgZHJtRE1BLiAKKyAqIFVucmVzZXJ2ZSB0aGUgYnVmZmVycyBpbiBsaXN0LCBwcmV2aW91c2x5IHJlc2VydmVkIHVzaW5nIGRybURNQS4KICAqCiAgKiBccGFyYW0gaW5vZGUgZGV2aWNlIGlub2RlLgogICogXHBhcmFtIGZpbHAgZmlsZSBwb2ludGVyLgogICogXHBhcmFtIGNtZCBjb21tYW5kLgogICogXHBhcmFtIGFyZyBwb2ludGVyIHRvIGEgZHJtX2J1Zl9mcmVlIHN0cnVjdHVyZS4KICAqIFxyZXR1cm4gemVybyBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgbnVtYmVyIG9uIGZhaWx1cmUuCi0gKiAKKyAqCiAgKiBDYWxscyBmcmVlX2J1ZmZlcigpIGZvciBlYWNoIHVzZWQgYnVmZmVyLgogICogVGhpcyBmdW5jdGlvbiBpcyBwcmltYXJpbHkgdXNlZCBmb3IgZGVidWdnaW5nLgogICovCi1pbnQgZHJtX2ZyZWVidWZzKCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcgKQoraW50IGRybV9mcmVlYnVmcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCWRybV9maWxlX3QgKnByaXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAJZHJtX2RldmljZV90ICpkZXYgPSBwcml2LT5oZWFkLT5kZXY7CkBAIC0xNDEyLDMxICsxNDEzLDI5IEBACiAJaWYgKCFkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX0hBVkVfRE1BKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoICFkbWEgKSByZXR1cm4gLUVJTlZBTDsKKwlpZiAoIWRtYSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoIGNvcHlfZnJvbV91c2VyKCAmcmVxdWVzdCwKLQkJCSAgICAgKGRybV9idWZfZnJlZV90IF9fdXNlciAqKWFyZywKLQkJCSAgICAgc2l6ZW9mKHJlcXVlc3QpICkgKQorCWlmIChjb3B5X2Zyb21fdXNlcigmcmVxdWVzdCwKKwkJCSAgIChkcm1fYnVmX2ZyZWVfdCBfX3VzZXIgKikgYXJnLCBzaXplb2YocmVxdWVzdCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCURSTV9ERUJVRyggIiVkXG4iLCByZXF1ZXN0LmNvdW50ICk7Ci0JZm9yICggaSA9IDAgOyBpIDwgcmVxdWVzdC5jb3VudCA7IGkrKyApIHsKLQkJaWYgKCBjb3B5X2Zyb21fdXNlciggJmlkeCwKLQkJCQkgICAgICZyZXF1ZXN0Lmxpc3RbaV0sCi0JCQkJICAgICBzaXplb2YoaWR4KSApICkKKwlEUk1fREVCVUcoIiVkXG4iLCByZXF1ZXN0LmNvdW50KTsKKwlmb3IgKGkgPSAwOyBpIDwgcmVxdWVzdC5jb3VudDsgaSsrKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmaWR4LCAmcmVxdWVzdC5saXN0W2ldLCBzaXplb2YoaWR4KSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKLQkJaWYgKCBpZHggPCAwIHx8IGlkeCA+PSBkbWEtPmJ1Zl9jb3VudCApIHsKLQkJCURSTV9FUlJPUiggIkluZGV4ICVkIChvZiAlZCBtYXgpXG4iLAotCQkJCSAgIGlkeCwgZG1hLT5idWZfY291bnQgLSAxICk7CisJCWlmIChpZHggPCAwIHx8IGlkeCA+PSBkbWEtPmJ1Zl9jb3VudCkgeworCQkJRFJNX0VSUk9SKCJJbmRleCAlZCAob2YgJWQgbWF4KVxuIiwKKwkJCQkgIGlkeCwgZG1hLT5idWZfY291bnQgLSAxKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWJ1ZiA9IGRtYS0+YnVmbGlzdFtpZHhdOwotCQlpZiAoIGJ1Zi0+ZmlscCAhPSBmaWxwICkgewotCQkJRFJNX0VSUk9SKCAiUHJvY2VzcyAlZCBmcmVlaW5nIGJ1ZmZlciBub3Qgb3duZWRcbiIsCi0JCQkJICAgY3VycmVudC0+cGlkICk7CisJCWlmIChidWYtPmZpbHAgIT0gZmlscCkgeworCQkJRFJNX0VSUk9SKCJQcm9jZXNzICVkIGZyZWVpbmcgYnVmZmVyIG5vdCBvd25lZFxuIiwKKwkJCQkgIGN1cnJlbnQtPnBpZCk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQlkcm1fZnJlZV9idWZmZXIoIGRldiwgYnVmICk7CisJCWRybV9mcmVlX2J1ZmZlcihkZXYsIGJ1Zik7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xNDU1LDggKzE0NTQsOCBAQAogICogYWJvdXQgZWFjaCBidWZmZXIgaW50byB1c2VyIHNwYWNlLiBUaGUgUENJIGJ1ZmZlcnMgYXJlIGFscmVhZHkgbWFwcGVkIG9uIHRoZQogICogYWRkYnVmc19wY2koKSBjYWxsLgogICovCi1pbnQgZHJtX21hcGJ1ZnMoIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAotCQkgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnICkKK2ludCBkcm1fbWFwYnVmcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJZHJtX2ZpbGVfdCAqcHJpdiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAlkcm1fZGV2aWNlX3QgKmRldiA9IHByaXYtPmhlYWQtPmRldjsKQEAgLTE0NzIsODYgKzE0NzEsODQgQEAKIAlpZiAoIWRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfSEFWRV9ETUEpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICggIWRtYSApIHJldHVybiAtRUlOVkFMOworCWlmICghZG1hKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotCXNwaW5fbG9jayggJmRldi0+Y291bnRfbG9jayApOwotCWlmICggYXRvbWljX3JlYWQoICZkZXYtPmJ1Zl9hbGxvYyApICkgewotCQlzcGluX3VubG9jayggJmRldi0+Y291bnRfbG9jayApOworCXNwaW5fbG9jaygmZGV2LT5jb3VudF9sb2NrKTsKKwlpZiAoYXRvbWljX3JlYWQoJmRldi0+YnVmX2FsbG9jKSkgeworCQlzcGluX3VubG9jaygmZGV2LT5jb3VudF9sb2NrKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAJZGV2LT5idWZfdXNlKys7CQkvKiBDYW4ndCBhbGxvY2F0ZSBtb3JlIGFmdGVyIHRoaXMgY2FsbCAqLwotCXNwaW5fdW5sb2NrKCAmZGV2LT5jb3VudF9sb2NrICk7CisJc3Bpbl91bmxvY2soJmRldi0+Y291bnRfbG9jayk7CiAKLQlpZiAoIGNvcHlfZnJvbV91c2VyKCAmcmVxdWVzdCwgYXJncCwgc2l6ZW9mKHJlcXVlc3QpICkgKQorCWlmIChjb3B5X2Zyb21fdXNlcigmcmVxdWVzdCwgYXJncCwgc2l6ZW9mKHJlcXVlc3QpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlpZiAoIHJlcXVlc3QuY291bnQgPj0gZG1hLT5idWZfY291bnQgKSB7CisJaWYgKHJlcXVlc3QuY291bnQgPj0gZG1hLT5idWZfY291bnQpIHsKIAkJaWYgKChkcm1fY29yZV9oYXNfQUdQKGRldikgJiYgKGRtYS0+ZmxhZ3MgJiBfRFJNX0RNQV9VU0VfQUdQKSkKLQkJICAgIHx8IChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX1NHKSAKKwkJICAgIHx8IChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX1NHKQogCQkJJiYgKGRtYS0+ZmxhZ3MgJiBfRFJNX0RNQV9VU0VfU0cpKQogCQkgICAgfHwgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfRkJfRE1BKQogCQkJJiYgKGRtYS0+ZmxhZ3MgJiBfRFJNX0RNQV9VU0VfRkIpKSkgewogCQkJZHJtX21hcF90ICptYXAgPSBkZXYtPmFncF9idWZmZXJfbWFwOwogCQkJdW5zaWduZWQgbG9uZyB0b2tlbiA9IGRldi0+YWdwX2J1ZmZlcl90b2tlbjsKIAotCQkJaWYgKCAhbWFwICkgeworCQkJaWYgKCFtYXApIHsKIAkJCQlyZXRjb2RlID0gLUVJTlZBTDsKIAkJCQlnb3RvIGRvbmU7CiAJCQl9CiAKLQkJCWRvd25fd3JpdGUoICZjdXJyZW50LT5tbS0+bW1hcF9zZW0gKTsKLQkJCXZpcnR1YWwgPSBkb19tbWFwKCBmaWxwLCAwLCBtYXAtPnNpemUsCi0JCQkJCSAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCi0JCQkJCSAgIE1BUF9TSEFSRUQsCi0JCQkJCSAgIHRva2VuICk7Ci0JCQl1cF93cml0ZSggJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSApOworCQkJZG93bl93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKwkJCXZpcnR1YWwgPSBkb19tbWFwKGZpbHAsIDAsIG1hcC0+c2l6ZSwKKwkJCQkJICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAorCQkJCQkgIE1BUF9TSEFSRUQsIHRva2VuKTsKKwkJCXVwX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogCQl9IGVsc2UgewotCQkJZG93bl93cml0ZSggJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSApOwotCQkJdmlydHVhbCA9IGRvX21tYXAoIGZpbHAsIDAsIGRtYS0+Ynl0ZV9jb3VudCwKLQkJCQkJICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKLQkJCQkJICAgTUFQX1NIQVJFRCwgMCApOwotCQkJdXBfd3JpdGUoICZjdXJyZW50LT5tbS0+bW1hcF9zZW0gKTsKKwkJCWRvd25fd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJCQl2aXJ0dWFsID0gZG9fbW1hcChmaWxwLCAwLCBkbWEtPmJ5dGVfY291bnQsCisJCQkJCSAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKKwkJCQkJICBNQVBfU0hBUkVELCAwKTsKKwkJCXVwX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogCQl9Ci0JCWlmICggdmlydHVhbCA+IC0xMDI0VUwgKSB7CisJCWlmICh2aXJ0dWFsID4gLTEwMjRVTCkgewogCQkJLyogUmVhbCBlcnJvciAqLwogCQkJcmV0Y29kZSA9IChzaWduZWQgbG9uZyl2aXJ0dWFsOwogCQkJZ290byBkb25lOwogCQl9CiAJCXJlcXVlc3QudmlydHVhbCA9ICh2b2lkIF9fdXNlciAqKXZpcnR1YWw7CiAKLQkJZm9yICggaSA9IDAgOyBpIDwgZG1hLT5idWZfY291bnQgOyBpKysgKSB7Ci0JCQlpZiAoIGNvcHlfdG9fdXNlciggJnJlcXVlc3QubGlzdFtpXS5pZHgsCi0JCQkJCSAgICZkbWEtPmJ1Zmxpc3RbaV0tPmlkeCwKLQkJCQkJICAgc2l6ZW9mKHJlcXVlc3QubGlzdFswXS5pZHgpICkgKSB7CisJCWZvciAoaSA9IDA7IGkgPCBkbWEtPmJ1Zl9jb3VudDsgaSsrKSB7CisJCQlpZiAoY29weV90b191c2VyKCZyZXF1ZXN0Lmxpc3RbaV0uaWR4LAorCQkJCQkgJmRtYS0+YnVmbGlzdFtpXS0+aWR4LAorCQkJCQkgc2l6ZW9mKHJlcXVlc3QubGlzdFswXS5pZHgpKSkgewogCQkJCXJldGNvZGUgPSAtRUZBVUxUOwogCQkJCWdvdG8gZG9uZTsKIAkJCX0KLQkJCWlmICggY29weV90b191c2VyKCAmcmVxdWVzdC5saXN0W2ldLnRvdGFsLAotCQkJCQkgICAmZG1hLT5idWZsaXN0W2ldLT50b3RhbCwKLQkJCQkJICAgc2l6ZW9mKHJlcXVlc3QubGlzdFswXS50b3RhbCkgKSApIHsKKwkJCWlmIChjb3B5X3RvX3VzZXIoJnJlcXVlc3QubGlzdFtpXS50b3RhbCwKKwkJCQkJICZkbWEtPmJ1Zmxpc3RbaV0tPnRvdGFsLAorCQkJCQkgc2l6ZW9mKHJlcXVlc3QubGlzdFswXS50b3RhbCkpKSB7CiAJCQkJcmV0Y29kZSA9IC1FRkFVTFQ7CiAJCQkJZ290byBkb25lOwogCQkJfQotCQkJaWYgKCBjb3B5X3RvX3VzZXIoICZyZXF1ZXN0Lmxpc3RbaV0udXNlZCwKLQkJCQkJICAgJnplcm8sCi0JCQkJCSAgIHNpemVvZih6ZXJvKSApICkgeworCQkJaWYgKGNvcHlfdG9fdXNlcigmcmVxdWVzdC5saXN0W2ldLnVzZWQsCisJCQkJCSAmemVybywgc2l6ZW9mKHplcm8pKSkgewogCQkJCXJldGNvZGUgPSAtRUZBVUxUOwogCQkJCWdvdG8gZG9uZTsKIAkJCX0KLQkJCWFkZHJlc3MgPSB2aXJ0dWFsICsgZG1hLT5idWZsaXN0W2ldLT5vZmZzZXQ7IC8qICoqKiAqLwotCQkJaWYgKCBjb3B5X3RvX3VzZXIoICZyZXF1ZXN0Lmxpc3RbaV0uYWRkcmVzcywKLQkJCQkJICAgJmFkZHJlc3MsCi0JCQkJCSAgIHNpemVvZihhZGRyZXNzKSApICkgeworCQkJYWRkcmVzcyA9IHZpcnR1YWwgKyBkbWEtPmJ1Zmxpc3RbaV0tPm9mZnNldDsJLyogKioqICovCisJCQlpZiAoY29weV90b191c2VyKCZyZXF1ZXN0Lmxpc3RbaV0uYWRkcmVzcywKKwkJCQkJICZhZGRyZXNzLCBzaXplb2YoYWRkcmVzcykpKSB7CiAJCQkJcmV0Y29kZSA9IC1FRkFVTFQ7CiAJCQkJZ290byBkb25lOwogCQkJfQogCQl9CiAJfQotIGRvbmU6CisgICAgICBkb25lOgogCXJlcXVlc3QuY291bnQgPSBkbWEtPmJ1Zl9jb3VudDsKLQlEUk1fREVCVUcoICIlZCBidWZmZXJzLCByZXRjb2RlID0gJWRcbiIsIHJlcXVlc3QuY291bnQsIHJldGNvZGUgKTsKKwlEUk1fREVCVUcoIiVkIGJ1ZmZlcnMsIHJldGNvZGUgPSAlZFxuIiwgcmVxdWVzdC5jb3VudCwgcmV0Y29kZSk7CiAKLQlpZiAoIGNvcHlfdG9fdXNlciggYXJncCwgJnJlcXVlc3QsIHNpemVvZihyZXF1ZXN0KSApICkKKwlpZiAoY29weV90b191c2VyKGFyZ3AsICZyZXF1ZXN0LCBzaXplb2YocmVxdWVzdCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAogCXJldHVybiByZXRjb2RlOwpAQCAtMTU2MCwyMyArMTU1NywyMyBAQAogLyoqCiAgKiBDb21wdXRlIHNpemUgb3JkZXIuICBSZXR1cm5zIHRoZSBleHBvbmVudCBvZiB0aGUgc21hbGxlciBwb3dlciBvZiB0d28gd2hpY2gKICAqIGlzIGdyZWF0ZXIgb3IgZXF1YWwgdG8gZ2l2ZW4gbnVtYmVyLgotICogCisgKgogICogXHBhcmFtIHNpemUgc2l6ZS4KICAqIFxyZXR1cm4gb3JkZXIuCiAgKgogICogXHRvZG8gQ2FuIGJlIG1hZGUgZmFzdGVyLgogICovCi1pbnQgZHJtX29yZGVyKCB1bnNpZ25lZCBsb25nIHNpemUgKQoraW50IGRybV9vcmRlcih1bnNpZ25lZCBsb25nIHNpemUpCiB7CiAJaW50IG9yZGVyOwogCXVuc2lnbmVkIGxvbmcgdG1wOwogCi0JZm9yIChvcmRlciA9IDAsIHRtcCA9IHNpemUgPj4gMTsgdG1wOyB0bXAgPj49IDEsIG9yZGVyKyspCi0JCTsKKwlmb3IgKG9yZGVyID0gMCwgdG1wID0gc2l6ZSA+PiAxOyB0bXA7IHRtcCA+Pj0gMSwgb3JkZXIrKykgOwogCiAJaWYgKHNpemUgJiAoc2l6ZSAtIDEpKQogCQkrK29yZGVyOwogCiAJcmV0dXJuIG9yZGVyOwogfQorCiBFWFBPUlRfU1lNQk9MKGRybV9vcmRlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9jb250ZXh0LmMgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9jb250ZXh0LmMKaW5kZXggNTAyODkyNy4uNjM4MDEyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1fY29udGV4dC5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX2NvbnRleHQuYwpAQCAtMSw3ICsxLDcgQEAKIC8qKgotICogXGZpbGUgZHJtX2NvbnRleHQuaCAKKyAqIFxmaWxlIGRybV9jb250ZXh0LmMKICAqIElPQ1RMcyBmb3IgZ2VuZXJpYyBjb250ZXh0cwotICogCisgKgogICogXGF1dGhvciBSaWNrYXJkIEUuIChSaWspIEZhaXRoIDxmYWl0aEB2YWxpbnV4LmNvbT4KICAqIFxhdXRob3IgR2FyZXRoIEh1Z2hlcyA8Z2FyZXRoQHZhbGludXguY29tPgogICovCkBAIC01NiwyNSArNTYsMjYgQEAKICAqIGluIGRybV9kZXZpY2U6OmNvbnRleHRfc2FyZWFzLCB3aGlsZSBob2xkaW5nIHRoZSBkcm1fZGV2aWNlOjpzdHJ1Y3Rfc2VtCiAgKiBsb2NrLgogICovCi12b2lkIGRybV9jdHhiaXRtYXBfZnJlZSggZHJtX2RldmljZV90ICpkZXYsIGludCBjdHhfaGFuZGxlICkKK3ZvaWQgZHJtX2N0eGJpdG1hcF9mcmVlKGRybV9kZXZpY2VfdCAqIGRldiwgaW50IGN0eF9oYW5kbGUpCiB7Ci0JaWYgKCBjdHhfaGFuZGxlIDwgMCApIGdvdG8gZmFpbGVkOwotCWlmICggIWRldi0+Y3R4X2JpdG1hcCApIGdvdG8gZmFpbGVkOworCWlmIChjdHhfaGFuZGxlIDwgMCkKKwkJZ290byBmYWlsZWQ7CisJaWYgKCFkZXYtPmN0eF9iaXRtYXApCisJCWdvdG8gZmFpbGVkOwogCi0JaWYgKCBjdHhfaGFuZGxlIDwgRFJNX01BWF9DVFhCSVRNQVAgKSB7CisJaWYgKGN0eF9oYW5kbGUgPCBEUk1fTUFYX0NUWEJJVE1BUCkgewogCQlkb3duKCZkZXYtPnN0cnVjdF9zZW0pOwotCQljbGVhcl9iaXQoIGN0eF9oYW5kbGUsIGRldi0+Y3R4X2JpdG1hcCApOworCQljbGVhcl9iaXQoY3R4X2hhbmRsZSwgZGV2LT5jdHhfYml0bWFwKTsKIAkJZGV2LT5jb250ZXh0X3NhcmVhc1tjdHhfaGFuZGxlXSA9IE5VTEw7CiAJCXVwKCZkZXYtPnN0cnVjdF9zZW0pOwogCQlyZXR1cm47CiAJfQotZmFpbGVkOgotICAgICAgIAlEUk1fRVJST1IoICJBdHRlbXB0IHRvIGZyZWUgaW52YWxpZCBjb250ZXh0IGhhbmRsZTogJWRcbiIsCi0JCSAgIGN0eF9oYW5kbGUgKTsKLSAgICAgICAJcmV0dXJuOworICAgICAgZmFpbGVkOgorCURSTV9FUlJPUigiQXR0ZW1wdCB0byBmcmVlIGludmFsaWQgY29udGV4dCBoYW5kbGU6ICVkXG4iLCBjdHhfaGFuZGxlKTsKKwlyZXR1cm47CiB9CiAKLS8qKiAKKy8qKgogICogQ29udGV4dCBiaXRtYXAgYWxsb2NhdGlvbi4KICAqCiAgKiBccGFyYW0gZGV2IERSTSBkZXZpY2UuCkBAIC04NCwyOSArODUsMzMgQEAKICAqIGRybV9kZXZpY2U6OmNvbnRleHRfc2FyZWFzIHRvIGFjY29tbW9kYXRlIHRoZSBuZXcgZW50cnkgd2hpbGUgaG9sZGluZyB0aGUKICAqIGRybV9kZXZpY2U6OnN0cnVjdF9zZW0gbG9jay4KICAqLwotc3RhdGljIGludCBkcm1fY3R4Yml0bWFwX25leHQoIGRybV9kZXZpY2VfdCAqZGV2ICkKK3N0YXRpYyBpbnQgZHJtX2N0eGJpdG1hcF9uZXh0KGRybV9kZXZpY2VfdCAqIGRldikKIHsKIAlpbnQgYml0OwogCi0JaWYoIWRldi0+Y3R4X2JpdG1hcCkgcmV0dXJuIC0xOworCWlmICghZGV2LT5jdHhfYml0bWFwKQorCQlyZXR1cm4gLTE7CiAKIAlkb3duKCZkZXYtPnN0cnVjdF9zZW0pOwotCWJpdCA9IGZpbmRfZmlyc3RfemVyb19iaXQoIGRldi0+Y3R4X2JpdG1hcCwgRFJNX01BWF9DVFhCSVRNQVAgKTsKLQlpZiAoIGJpdCA8IERSTV9NQVhfQ1RYQklUTUFQICkgewotCQlzZXRfYml0KCBiaXQsIGRldi0+Y3R4X2JpdG1hcCApOwotCSAgIAlEUk1fREVCVUcoICJkcm1fY3R4Yml0bWFwX25leHQgYml0IDogJWRcbiIsIGJpdCApOwotCQlpZigoYml0KzEpID4gZGV2LT5tYXhfY29udGV4dCkgewotCQkJZGV2LT5tYXhfY29udGV4dCA9IChiaXQrMSk7Ci0JCQlpZihkZXYtPmNvbnRleHRfc2FyZWFzKSB7CisJYml0ID0gZmluZF9maXJzdF96ZXJvX2JpdChkZXYtPmN0eF9iaXRtYXAsIERSTV9NQVhfQ1RYQklUTUFQKTsKKwlpZiAoYml0IDwgRFJNX01BWF9DVFhCSVRNQVApIHsKKwkJc2V0X2JpdChiaXQsIGRldi0+Y3R4X2JpdG1hcCk7CisJCURSTV9ERUJVRygiZHJtX2N0eGJpdG1hcF9uZXh0IGJpdCA6ICVkXG4iLCBiaXQpOworCQlpZiAoKGJpdCArIDEpID4gZGV2LT5tYXhfY29udGV4dCkgeworCQkJZGV2LT5tYXhfY29udGV4dCA9IChiaXQgKyAxKTsKKwkJCWlmIChkZXYtPmNvbnRleHRfc2FyZWFzKSB7CiAJCQkJZHJtX21hcF90ICoqY3R4X3NhcmVhczsKIAogCQkJCWN0eF9zYXJlYXMgPSBkcm1fcmVhbGxvYyhkZXYtPmNvbnRleHRfc2FyZWFzLAotCQkJCQkJKGRldi0+bWF4X2NvbnRleHQgLSAxKSAqIAotCQkJCQkJc2l6ZW9mKCpkZXYtPmNvbnRleHRfc2FyZWFzKSwKLQkJCQkJCWRldi0+bWF4X2NvbnRleHQgKiAKLQkJCQkJCXNpemVvZigqZGV2LT5jb250ZXh0X3NhcmVhcyksCi0JCQkJCQlEUk1fTUVNX01BUFMpOwotCQkJCWlmKCFjdHhfc2FyZWFzKSB7CisJCQkJCQkJIChkZXYtPm1heF9jb250ZXh0IC0KKwkJCQkJCQkgIDEpICoKKwkJCQkJCQkgc2l6ZW9mKCpkZXYtPgorCQkJCQkJCQljb250ZXh0X3NhcmVhcyksCisJCQkJCQkJIGRldi0+bWF4X2NvbnRleHQgKgorCQkJCQkJCSBzaXplb2YoKmRldi0+CisJCQkJCQkJCWNvbnRleHRfc2FyZWFzKSwKKwkJCQkJCQkgRFJNX01FTV9NQVBTKTsKKwkJCQlpZiAoIWN0eF9zYXJlYXMpIHsKIAkJCQkJY2xlYXJfYml0KGJpdCwgZGV2LT5jdHhfYml0bWFwKTsKIAkJCQkJdXAoJmRldi0+c3RydWN0X3NlbSk7CiAJCQkJCXJldHVybiAtMTsKQEAgLTExNSwxMSArMTIwLDExIEBACiAJCQkJZGV2LT5jb250ZXh0X3NhcmVhc1tiaXRdID0gTlVMTDsKIAkJCX0gZWxzZSB7CiAJCQkJLyogbWF4X2NvbnRleHQgPT0gMSBhdCB0aGlzIHBvaW50ICovCi0JCQkJZGV2LT5jb250ZXh0X3NhcmVhcyA9IGRybV9hbGxvYygKLQkJCQkJCWRldi0+bWF4X2NvbnRleHQgKiAKLQkJCQkJCXNpemVvZigqZGV2LT5jb250ZXh0X3NhcmVhcyksCi0JCQkJCQlEUk1fTUVNX01BUFMpOwotCQkJCWlmKCFkZXYtPmNvbnRleHRfc2FyZWFzKSB7CisJCQkJZGV2LT5jb250ZXh0X3NhcmVhcyA9CisJCQkJICAgIGRybV9hbGxvYyhkZXYtPm1heF9jb250ZXh0ICoKKwkJCQkJICAgICAgc2l6ZW9mKCpkZXYtPmNvbnRleHRfc2FyZWFzKSwKKwkJCQkJICAgICAgRFJNX01FTV9NQVBTKTsKKwkJCQlpZiAoIWRldi0+Y29udGV4dF9zYXJlYXMpIHsKIAkJCQkJY2xlYXJfYml0KGJpdCwgZGV2LT5jdHhfYml0bWFwKTsKIAkJCQkJdXAoJmRldi0+c3RydWN0X3NlbSk7CiAJCQkJCXJldHVybiAtMTsKQEAgLTE0MiwyNiArMTQ3LDI2IEBACiAgKiBBbGxvY2F0ZXMgYW5kIGluaXRpYWxpemUgZHJtX2RldmljZTo6Y3R4X2JpdG1hcCBhbmQgZHJtX2RldmljZTo6Y29udGV4dF9zYXJlYXMsIHdoaWxlIGhvbGRpbmcKICAqIHRoZSBkcm1fZGV2aWNlOjpzdHJ1Y3Rfc2VtIGxvY2suCiAgKi8KLWludCBkcm1fY3R4Yml0bWFwX2luaXQoIGRybV9kZXZpY2VfdCAqZGV2ICkKK2ludCBkcm1fY3R4Yml0bWFwX2luaXQoZHJtX2RldmljZV90ICogZGV2KQogewogCWludCBpOwotICAgCWludCB0ZW1wOworCWludCB0ZW1wOwogCiAJZG93bigmZGV2LT5zdHJ1Y3Rfc2VtKTsKLQlkZXYtPmN0eF9iaXRtYXAgPSAodW5zaWduZWQgbG9uZyAqKSBkcm1fYWxsb2MoIFBBR0VfU0laRSwKLQkJCQkJCQlEUk1fTUVNX0NUWEJJVE1BUCApOwotCWlmICggZGV2LT5jdHhfYml0bWFwID09IE5VTEwgKSB7CisJZGV2LT5jdHhfYml0bWFwID0gKHVuc2lnbmVkIGxvbmcgKilkcm1fYWxsb2MoUEFHRV9TSVpFLAorCQkJCQkJICAgICBEUk1fTUVNX0NUWEJJVE1BUCk7CisJaWYgKGRldi0+Y3R4X2JpdG1hcCA9PSBOVUxMKSB7CiAJCXVwKCZkZXYtPnN0cnVjdF9zZW0pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JbWVtc2V0KCAodm9pZCAqKWRldi0+Y3R4X2JpdG1hcCwgMCwgUEFHRV9TSVpFICk7CisJbWVtc2V0KCh2b2lkICopZGV2LT5jdHhfYml0bWFwLCAwLCBQQUdFX1NJWkUpOwogCWRldi0+Y29udGV4dF9zYXJlYXMgPSBOVUxMOwogCWRldi0+bWF4X2NvbnRleHQgPSAtMTsKIAl1cCgmZGV2LT5zdHJ1Y3Rfc2VtKTsKIAotCWZvciAoIGkgPSAwIDsgaSA8IERSTV9SRVNFUlZFRF9DT05URVhUUyA7IGkrKyApIHsKLQkJdGVtcCA9IGRybV9jdHhiaXRtYXBfbmV4dCggZGV2ICk7Ci0JICAgCURSTV9ERUJVRyggImRybV9jdHhiaXRtYXBfaW5pdCA6ICVkXG4iLCB0ZW1wICk7CisJZm9yIChpID0gMDsgaSA8IERSTV9SRVNFUlZFRF9DT05URVhUUzsgaSsrKSB7CisJCXRlbXAgPSBkcm1fY3R4Yml0bWFwX25leHQoZGV2KTsKKwkJRFJNX0RFQlVHKCJkcm1fY3R4Yml0bWFwX2luaXQgOiAlZFxuIiwgdGVtcCk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xNzUsMTQgKzE4MCwxNCBAQAogICogRnJlZXMgZHJtX2RldmljZTo6Y3R4X2JpdG1hcCBhbmQgZHJtX2RldmljZTo6Y29udGV4dF9zYXJlYXMsIHdoaWxlIGhvbGRpbmcKICAqIHRoZSBkcm1fZGV2aWNlOjpzdHJ1Y3Rfc2VtIGxvY2suCiAgKi8KLXZvaWQgZHJtX2N0eGJpdG1hcF9jbGVhbnVwKCBkcm1fZGV2aWNlX3QgKmRldiApCit2b2lkIGRybV9jdHhiaXRtYXBfY2xlYW51cChkcm1fZGV2aWNlX3QgKiBkZXYpCiB7CiAJZG93bigmZGV2LT5zdHJ1Y3Rfc2VtKTsKLQlpZiggZGV2LT5jb250ZXh0X3NhcmVhcyApIGRybV9mcmVlKCBkZXYtPmNvbnRleHRfc2FyZWFzLAotCQkJCQkgICAgIHNpemVvZigqZGV2LT5jb250ZXh0X3NhcmVhcykgKiAKLQkJCQkJICAgICBkZXYtPm1heF9jb250ZXh0LAotCQkJCQkgICAgIERSTV9NRU1fTUFQUyApOwotCWRybV9mcmVlKCAodm9pZCAqKWRldi0+Y3R4X2JpdG1hcCwgUEFHRV9TSVpFLCBEUk1fTUVNX0NUWEJJVE1BUCApOworCWlmIChkZXYtPmNvbnRleHRfc2FyZWFzKQorCQlkcm1fZnJlZShkZXYtPmNvbnRleHRfc2FyZWFzLAorCQkJIHNpemVvZigqZGV2LT5jb250ZXh0X3NhcmVhcykgKgorCQkJIGRldi0+bWF4X2NvbnRleHQsIERSTV9NRU1fTUFQUyk7CisJZHJtX2ZyZWUoKHZvaWQgKilkZXYtPmN0eF9iaXRtYXAsIFBBR0VfU0laRSwgRFJNX01FTV9DVFhCSVRNQVApOwogCXVwKCZkZXYtPnN0cnVjdF9zZW0pOwogfQogCkBAIC0xOTQsNyArMTk5LDcgQEAKIAogLyoqCiAgKiBHZXQgcGVyLWNvbnRleHQgU0FSRUEuCi0gKiAKKyAqCiAgKiBccGFyYW0gaW5vZGUgZGV2aWNlIGlub2RlLgogICogXHBhcmFtIGZpbHAgZmlsZSBwb2ludGVyLgogICogXHBhcmFtIGNtZCBjb21tYW5kLgpAQCAtMjA1LDEwICsyMTAsMTAgQEAKICAqIHJldHVybnMgaXRzIGhhbmRsZS4KICAqLwogaW50IGRybV9nZXRzYXJlYWN0eChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKKwkJICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCWRybV9maWxlX3QJKnByaXYJPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0JZHJtX2RldmljZV90CSpkZXYJPSBwcml2LT5oZWFkLT5kZXY7CisJZHJtX2ZpbGVfdCAqcHJpdiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlkcm1fZGV2aWNlX3QgKmRldiA9IHByaXYtPmhlYWQtPmRldjsKIAlkcm1fY3R4X3ByaXZfbWFwX3QgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwogCWRybV9jdHhfcHJpdl9tYXBfdCByZXF1ZXN0OwogCWRybV9tYXBfdCAqbWFwOwpAQCAtMjE4LDcgKzIyMyw4IEBACiAJCXJldHVybiAtRUZBVUxUOwogCiAJZG93bigmZGV2LT5zdHJ1Y3Rfc2VtKTsKLQlpZiAoZGV2LT5tYXhfY29udGV4dCA8IDAgfHwgcmVxdWVzdC5jdHhfaWQgPj0gKHVuc2lnbmVkKSBkZXYtPm1heF9jb250ZXh0KSB7CisJaWYgKGRldi0+bWF4X2NvbnRleHQgPCAwCisJICAgIHx8IHJlcXVlc3QuY3R4X2lkID49ICh1bnNpZ25lZClkZXYtPm1heF9jb250ZXh0KSB7CiAJCXVwKCZkZXYtPnN0cnVjdF9zZW0pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0yMjcsMTYgKzIzMywxNiBAQAogCXVwKCZkZXYtPnN0cnVjdF9zZW0pOwogCiAJcmVxdWVzdC5oYW5kbGUgPSAwOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoX2VudHJ5LCAmZGV2LT5tYXBsaXN0LT5oZWFkLGhlYWQpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KF9lbnRyeSwgJmRldi0+bWFwbGlzdC0+aGVhZCwgaGVhZCkgewogCQlpZiAoX2VudHJ5LT5tYXAgPT0gbWFwKSB7Ci0JCQlyZXF1ZXN0LmhhbmRsZSA9ICh2b2lkICopKHVuc2lnbmVkIGxvbmcpX2VudHJ5LT51c2VyX3Rva2VuOworCQkJcmVxdWVzdC5oYW5kbGUgPQorCQkJICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpX2VudHJ5LT51c2VyX3Rva2VuOwogCQkJYnJlYWs7CiAJCX0KIAl9CiAJaWYgKHJlcXVlc3QuaGFuZGxlID09IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0KIAlpZiAoY29weV90b191c2VyKGFyZ3AsICZyZXF1ZXN0LCBzaXplb2YocmVxdWVzdCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAlyZXR1cm4gMDsKQEAgLTI0NCw3ICsyNTAsNyBAQAogCiAvKioKICAqIFNldCBwZXItY29udGV4dCBTQVJFQS4KLSAqIAorICoKICAqIFxwYXJhbSBpbm9kZSBkZXZpY2UgaW5vZGUuCiAgKiBccGFyYW0gZmlscCBmaWxlIHBvaW50ZXIuCiAgKiBccGFyYW0gY21kIGNvbW1hbmQuCkBAIC0yNTUsMzcgKzI2MSwzNyBAQAogICogZHJtX2RldmljZTo6Y29udGV4dF9zYXJlYXMgd2l0aCBpdC4KICAqLwogaW50IGRybV9zZXRzYXJlYWN0eChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKKwkJICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCWRybV9maWxlX3QJKnByaXYJPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0JZHJtX2RldmljZV90CSpkZXYJPSBwcml2LT5oZWFkLT5kZXY7CisJZHJtX2ZpbGVfdCAqcHJpdiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlkcm1fZGV2aWNlX3QgKmRldiA9IHByaXYtPmhlYWQtPmRldjsKIAlkcm1fY3R4X3ByaXZfbWFwX3QgcmVxdWVzdDsKIAlkcm1fbWFwX3QgKm1hcCA9IE5VTEw7CiAJZHJtX21hcF9saXN0X3QgKnJfbGlzdCA9IE5VTEw7CiAJc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmcmVxdWVzdCwKLQkJCSAgIChkcm1fY3R4X3ByaXZfbWFwX3QgX191c2VyICopYXJnLAotCQkJICAgc2l6ZW9mKHJlcXVlc3QpKSkKKwkJCSAgIChkcm1fY3R4X3ByaXZfbWFwX3QgX191c2VyICopIGFyZywgc2l6ZW9mKHJlcXVlc3QpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlkb3duKCZkZXYtPnN0cnVjdF9zZW0pOwogCWxpc3RfZm9yX2VhY2gobGlzdCwgJmRldi0+bWFwbGlzdC0+aGVhZCkgewogCQlyX2xpc3QgPSBsaXN0X2VudHJ5KGxpc3QsIGRybV9tYXBfbGlzdF90LCBoZWFkKTsKIAkJaWYgKHJfbGlzdC0+bWFwCi0JCSAgICAmJiByX2xpc3QtPnVzZXJfdG9rZW4gPT0gKHVuc2lnbmVkIGxvbmcpIHJlcXVlc3QuaGFuZGxlKQorCQkgICAgJiYgcl9saXN0LT51c2VyX3Rva2VuID09ICh1bnNpZ25lZCBsb25nKXJlcXVlc3QuaGFuZGxlKQogCQkJZ290byBmb3VuZDsKIAl9Ci1iYWQ6CisgICAgICBiYWQ6CiAJdXAoJmRldi0+c3RydWN0X3NlbSk7CiAJcmV0dXJuIC1FSU5WQUw7CiAKLWZvdW5kOgorICAgICAgZm91bmQ6CiAJbWFwID0gcl9saXN0LT5tYXA7Ci0JaWYgKCFtYXApIGdvdG8gYmFkOworCWlmICghbWFwKQorCQlnb3RvIGJhZDsKIAlpZiAoZGV2LT5tYXhfY29udGV4dCA8IDApCiAJCWdvdG8gYmFkOwotCWlmIChyZXF1ZXN0LmN0eF9pZCA+PSAodW5zaWduZWQpIGRldi0+bWF4X2NvbnRleHQpCisJaWYgKHJlcXVlc3QuY3R4X2lkID49ICh1bnNpZ25lZClkZXYtPm1heF9jb250ZXh0KQogCQlnb3RvIGJhZDsKIAlkZXYtPmNvbnRleHRfc2FyZWFzW3JlcXVlc3QuY3R4X2lkXSA9IG1hcDsKIAl1cCgmZGV2LT5zdHJ1Y3Rfc2VtKTsKQEAgLTMwOCwyMiArMzE0LDIxIEBACiAgKgogICogQXR0ZW1wdCB0byBzZXQgZHJtX2RldmljZTo6Y29udGV4dF9mbGFnLgogICovCi1zdGF0aWMgaW50IGRybV9jb250ZXh0X3N3aXRjaCggZHJtX2RldmljZV90ICpkZXYsIGludCBvbGQsIGludCBuZXcgKQorc3RhdGljIGludCBkcm1fY29udGV4dF9zd2l0Y2goZHJtX2RldmljZV90ICogZGV2LCBpbnQgb2xkLCBpbnQgbmV3KQogewotICAgICAgICBpZiAoIHRlc3RfYW5kX3NldF9iaXQoIDAsICZkZXYtPmNvbnRleHRfZmxhZyApICkgewotICAgICAgICAgICAgICAgIERSTV9FUlJPUiggIlJlZW50ZXJpbmcgLS0gRklYTUVcbiIgKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVCVVNZOwotICAgICAgICB9CisJaWYgKHRlc3RfYW5kX3NldF9iaXQoMCwgJmRldi0+Y29udGV4dF9mbGFnKSkgeworCQlEUk1fRVJST1IoIlJlZW50ZXJpbmcgLS0gRklYTUVcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KIAorCURSTV9ERUJVRygiQ29udGV4dCBzd2l0Y2ggZnJvbSAlZCB0byAlZFxuIiwgb2xkLCBuZXcpOwogCi0gICAgICAgIERSTV9ERUJVRyggIkNvbnRleHQgc3dpdGNoIGZyb20gJWQgdG8gJWRcbiIsIG9sZCwgbmV3ICk7CisJaWYgKG5ldyA9PSBkZXYtPmxhc3RfY29udGV4dCkgeworCQljbGVhcl9iaXQoMCwgJmRldi0+Y29udGV4dF9mbGFnKTsKKwkJcmV0dXJuIDA7CisJfQogCi0gICAgICAgIGlmICggbmV3ID09IGRldi0+bGFzdF9jb250ZXh0ICkgewotICAgICAgICAgICAgICAgIGNsZWFyX2JpdCggMCwgJmRldi0+Y29udGV4dF9mbGFnICk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC0zMzcsMjIgKzM0MiwyMiBAQAogICogaGFyZHdhcmUgbG9jayBpcyBoZWxkLCBjbGVhcnMgdGhlIGRybV9kZXZpY2U6OmNvbnRleHRfZmxhZyBhbmQgd2FrZXMgdXAKICAqIGRybV9kZXZpY2U6OmNvbnRleHRfd2FpdC4KICAqLwotc3RhdGljIGludCBkcm1fY29udGV4dF9zd2l0Y2hfY29tcGxldGUoIGRybV9kZXZpY2VfdCAqZGV2LCBpbnQgbmV3ICkKK3N0YXRpYyBpbnQgZHJtX2NvbnRleHRfc3dpdGNoX2NvbXBsZXRlKGRybV9kZXZpY2VfdCAqIGRldiwgaW50IG5ldykKIHsKLSAgICAgICAgZGV2LT5sYXN0X2NvbnRleHQgPSBuZXc7ICAvKiBQUkUvUE9TVDogVGhpcyBpcyB0aGUgX29ubHlfIHdyaXRlci4gKi8KLSAgICAgICAgZGV2LT5sYXN0X3N3aXRjaCAgPSBqaWZmaWVzOworCWRldi0+bGFzdF9jb250ZXh0ID0gbmV3OwkvKiBQUkUvUE9TVDogVGhpcyBpcyB0aGUgX29ubHlfIHdyaXRlci4gKi8KKwlkZXYtPmxhc3Rfc3dpdGNoID0gamlmZmllczsKIAotICAgICAgICBpZiAoICFfRFJNX0xPQ0tfSVNfSEVMRChkZXYtPmxvY2suaHdfbG9jay0+bG9jaykgKSB7Ci0gICAgICAgICAgICAgICAgRFJNX0VSUk9SKCAiTG9jayBpc24ndCBoZWxkIGFmdGVyIGNvbnRleHQgc3dpdGNoXG4iICk7Ci0gICAgICAgIH0KKwlpZiAoIV9EUk1fTE9DS19JU19IRUxEKGRldi0+bG9jay5od19sb2NrLT5sb2NrKSkgeworCQlEUk1fRVJST1IoIkxvY2sgaXNuJ3QgaGVsZCBhZnRlciBjb250ZXh0IHN3aXRjaFxuIik7CisJfQogCi0JCQkJLyogSWYgYSBjb250ZXh0IHN3aXRjaCBpcyBldmVyIGluaXRpYXRlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHRoZSBrZXJuZWwgaG9sZHMgdGhlIGxvY2ssIHJlbGVhc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBsb2NrIGhlcmUuICovCi0gICAgICAgIGNsZWFyX2JpdCggMCwgJmRldi0+Y29udGV4dF9mbGFnICk7Ci0gICAgICAgIHdha2VfdXAoICZkZXYtPmNvbnRleHRfd2FpdCApOworCS8qIElmIGEgY29udGV4dCBzd2l0Y2ggaXMgZXZlciBpbml0aWF0ZWQKKwkgICB3aGVuIHRoZSBrZXJuZWwgaG9sZHMgdGhlIGxvY2ssIHJlbGVhc2UKKwkgICB0aGF0IGxvY2sgaGVyZS4gKi8KKwljbGVhcl9iaXQoMCwgJmRldi0+Y29udGV4dF9mbGFnKTsKKwl3YWtlX3VwKCZkZXYtPmNvbnRleHRfd2FpdCk7CiAKLSAgICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtMzY0LDI5ICszNjksMjggQEAKICAqIFxwYXJhbSBhcmcgdXNlciBhcmd1bWVudCBwb2ludGluZyB0byBhIGRybV9jdHhfcmVzIHN0cnVjdHVyZS4KICAqIFxyZXR1cm4gemVybyBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgbnVtYmVyIG9uIGZhaWx1cmUuCiAgKi8KLWludCBkcm1fcmVzY3R4KCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnICkKK2ludCBkcm1fcmVzY3R4KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAorCSAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlkcm1fY3R4X3Jlc190IHJlczsKIAlkcm1fY3R4X3QgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwogCWRybV9jdHhfdCBjdHg7CiAJaW50IGk7CiAKLQlpZiAoIGNvcHlfZnJvbV91c2VyKCAmcmVzLCBhcmdwLCBzaXplb2YocmVzKSApICkKKwlpZiAoY29weV9mcm9tX3VzZXIoJnJlcywgYXJncCwgc2l6ZW9mKHJlcykpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWlmICggcmVzLmNvdW50ID49IERSTV9SRVNFUlZFRF9DT05URVhUUyApIHsKLQkJbWVtc2V0KCAmY3R4LCAwLCBzaXplb2YoY3R4KSApOwotCQlmb3IgKCBpID0gMCA7IGkgPCBEUk1fUkVTRVJWRURfQ09OVEVYVFMgOyBpKysgKSB7CisJaWYgKHJlcy5jb3VudCA+PSBEUk1fUkVTRVJWRURfQ09OVEVYVFMpIHsKKwkJbWVtc2V0KCZjdHgsIDAsIHNpemVvZihjdHgpKTsKKwkJZm9yIChpID0gMDsgaSA8IERSTV9SRVNFUlZFRF9DT05URVhUUzsgaSsrKSB7CiAJCQljdHguaGFuZGxlID0gaTsKLQkJCWlmICggY29weV90b191c2VyKCAmcmVzLmNvbnRleHRzW2ldLAotCQkJCQkgICAmY3R4LCBzaXplb2YoY3R4KSApICkKKwkJCWlmIChjb3B5X3RvX3VzZXIoJnJlcy5jb250ZXh0c1tpXSwgJmN0eCwgc2l6ZW9mKGN0eCkpKQogCQkJCXJldHVybiAtRUZBVUxUOwogCQl9CiAJfQogCXJlcy5jb3VudCA9IERSTV9SRVNFUlZFRF9DT05URVhUUzsKIAotCWlmICggY29weV90b191c2VyKCBhcmdwLCAmcmVzLCBzaXplb2YocmVzKSApICkKKwlpZiAoY29weV90b191c2VyKGFyZ3AsICZyZXMsIHNpemVvZihyZXMpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJcmV0dXJuIDA7CiB9CkBAIC00MDIsNTggKzQwNiw1NyBAQAogICoKICAqIEdldCBhIG5ldyBoYW5kbGUgZm9yIHRoZSBjb250ZXh0IGFuZCBjb3B5IHRvIHVzZXJzcGFjZS4KICAqLwotaW50IGRybV9hZGRjdHgoIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAotCQkgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcgKQoraW50IGRybV9hZGRjdHgoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCisJICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCWRybV9maWxlX3QgKnByaXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAJZHJtX2RldmljZV90ICpkZXYgPSBwcml2LT5oZWFkLT5kZXY7Ci0JZHJtX2N0eF9saXN0X3QgKiBjdHhfZW50cnk7CisJZHJtX2N0eF9saXN0X3QgKmN0eF9lbnRyeTsKIAlkcm1fY3R4X3QgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwogCWRybV9jdHhfdCBjdHg7CiAKLQlpZiAoIGNvcHlfZnJvbV91c2VyKCAmY3R4LCBhcmdwLCBzaXplb2YoY3R4KSApICkKKwlpZiAoY29weV9mcm9tX3VzZXIoJmN0eCwgYXJncCwgc2l6ZW9mKGN0eCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWN0eC5oYW5kbGUgPSBkcm1fY3R4Yml0bWFwX25leHQoIGRldiApOwotCWlmICggY3R4LmhhbmRsZSA9PSBEUk1fS0VSTkVMX0NPTlRFWFQgKSB7Ci0JCQkJLyogU2tpcCBrZXJuZWwncyBjb250ZXh0IGFuZCBnZXQgYSBuZXcgb25lLiAqLwotCQljdHguaGFuZGxlID0gZHJtX2N0eGJpdG1hcF9uZXh0KCBkZXYgKTsKKwljdHguaGFuZGxlID0gZHJtX2N0eGJpdG1hcF9uZXh0KGRldik7CisJaWYgKGN0eC5oYW5kbGUgPT0gRFJNX0tFUk5FTF9DT05URVhUKSB7CisJCS8qIFNraXAga2VybmVsJ3MgY29udGV4dCBhbmQgZ2V0IGEgbmV3IG9uZS4gKi8KKwkJY3R4LmhhbmRsZSA9IGRybV9jdHhiaXRtYXBfbmV4dChkZXYpOwogCX0KLQlEUk1fREVCVUcoICIlZFxuIiwgY3R4LmhhbmRsZSApOwotCWlmICggY3R4LmhhbmRsZSA9PSAtMSApIHsKLQkJRFJNX0RFQlVHKCAiTm90IGVub3VnaCBmcmVlIGNvbnRleHRzLlxuIiApOwotCQkJCS8qIFNob3VsZCB0aGlzIHJldHVybiAtRUJVU1kgaW5zdGVhZD8gKi8KKwlEUk1fREVCVUcoIiVkXG4iLCBjdHguaGFuZGxlKTsKKwlpZiAoY3R4LmhhbmRsZSA9PSAtMSkgeworCQlEUk1fREVCVUcoIk5vdCBlbm91Z2ggZnJlZSBjb250ZXh0cy5cbiIpOworCQkvKiBTaG91bGQgdGhpcyByZXR1cm4gLUVCVVNZIGluc3RlYWQ/ICovCiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWlmICggY3R4LmhhbmRsZSAhPSBEUk1fS0VSTkVMX0NPTlRFWFQgKQotCXsKKwlpZiAoY3R4LmhhbmRsZSAhPSBEUk1fS0VSTkVMX0NPTlRFWFQpIHsKIAkJaWYgKGRldi0+ZHJpdmVyLT5jb250ZXh0X2N0b3IpCiAJCQlkZXYtPmRyaXZlci0+Y29udGV4dF9jdG9yKGRldiwgY3R4LmhhbmRsZSk7CiAJfQogCi0JY3R4X2VudHJ5ID0gZHJtX2FsbG9jKCBzaXplb2YoKmN0eF9lbnRyeSksIERSTV9NRU1fQ1RYTElTVCApOwotCWlmICggIWN0eF9lbnRyeSApIHsKKwljdHhfZW50cnkgPSBkcm1fYWxsb2Moc2l6ZW9mKCpjdHhfZW50cnkpLCBEUk1fTUVNX0NUWExJU1QpOworCWlmICghY3R4X2VudHJ5KSB7CiAJCURSTV9ERUJVRygib3V0IG9mIG1lbW9yeVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCUlOSVRfTElTVF9IRUFEKCAmY3R4X2VudHJ5LT5oZWFkICk7CisJSU5JVF9MSVNUX0hFQUQoJmN0eF9lbnRyeS0+aGVhZCk7CiAJY3R4X2VudHJ5LT5oYW5kbGUgPSBjdHguaGFuZGxlOwogCWN0eF9lbnRyeS0+dGFnID0gcHJpdjsKIAotCWRvd24oICZkZXYtPmN0eGxpc3Rfc2VtICk7Ci0JbGlzdF9hZGQoICZjdHhfZW50cnktPmhlYWQsICZkZXYtPmN0eGxpc3QtPmhlYWQgKTsKKwlkb3duKCZkZXYtPmN0eGxpc3Rfc2VtKTsKKwlsaXN0X2FkZCgmY3R4X2VudHJ5LT5oZWFkLCAmZGV2LT5jdHhsaXN0LT5oZWFkKTsKIAkrK2Rldi0+Y3R4X2NvdW50OwotCXVwKCAmZGV2LT5jdHhsaXN0X3NlbSApOworCXVwKCZkZXYtPmN0eGxpc3Rfc2VtKTsKIAotCWlmICggY29weV90b191c2VyKCBhcmdwLCAmY3R4LCBzaXplb2YoY3R4KSApICkKKwlpZiAoY29weV90b191c2VyKGFyZ3AsICZjdHgsIHNpemVvZihjdHgpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJcmV0dXJuIDA7CiB9CiAKLWludCBkcm1fbW9kY3R4KCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnICkKK2ludCBkcm1fbW9kY3R4KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAorCSAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAkvKiBUaGlzIGRvZXMgbm90aGluZyAqLwogCXJldHVybiAwOwpAQCAtNDY4LDE5ICs0NzEsMTkgQEAKICAqIFxwYXJhbSBhcmcgdXNlciBhcmd1bWVudCBwb2ludGluZyB0byBhIGRybV9jdHggc3RydWN0dXJlLgogICogXHJldHVybiB6ZXJvIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBudW1iZXIgb24gZmFpbHVyZS4KICAqLwotaW50IGRybV9nZXRjdHgoIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAotCQkgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcgKQoraW50IGRybV9nZXRjdHgoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCisJICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCWRybV9jdHhfdCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAJZHJtX2N0eF90IGN0eDsKIAotCWlmICggY29weV9mcm9tX3VzZXIoICZjdHgsIGFyZ3AsIHNpemVvZihjdHgpICkgKQorCWlmIChjb3B5X2Zyb21fdXNlcigmY3R4LCBhcmdwLCBzaXplb2YoY3R4KSkpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJLyogVGhpcyBpcyAwLCBiZWNhdXNlIHdlIGRvbid0IGhhbmRsZSBhbnkgY29udGV4dCBmbGFncyAqLwogCWN0eC5mbGFncyA9IDA7CiAKLQlpZiAoIGNvcHlfdG9fdXNlciggYXJncCwgJmN0eCwgc2l6ZW9mKGN0eCkgKSApCisJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmY3R4LCBzaXplb2YoY3R4KSkpCiAJCXJldHVybiAtRUZBVUxUOwogCXJldHVybiAwOwogfQpAQCAtNDk2LDE4ICs0OTksMTggQEAKICAqCiAgKiBDYWxscyBjb250ZXh0X3N3aXRjaCgpLgogICovCi1pbnQgZHJtX3N3aXRjaGN0eCggc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCi0JCSAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyApCitpbnQgZHJtX3N3aXRjaGN0eChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlkcm1fZmlsZV90ICpwcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCWRybV9kZXZpY2VfdCAqZGV2ID0gcHJpdi0+aGVhZC0+ZGV2OwogCWRybV9jdHhfdCBjdHg7CiAKLQlpZiAoIGNvcHlfZnJvbV91c2VyKCAmY3R4LCAoZHJtX2N0eF90IF9fdXNlciAqKWFyZywgc2l6ZW9mKGN0eCkgKSApCisJaWYgKGNvcHlfZnJvbV91c2VyKCZjdHgsIChkcm1fY3R4X3QgX191c2VyICopIGFyZywgc2l6ZW9mKGN0eCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCURSTV9ERUJVRyggIiVkXG4iLCBjdHguaGFuZGxlICk7Ci0JcmV0dXJuIGRybV9jb250ZXh0X3N3aXRjaCggZGV2LCBkZXYtPmxhc3RfY29udGV4dCwgY3R4LmhhbmRsZSApOworCURSTV9ERUJVRygiJWRcbiIsIGN0eC5oYW5kbGUpOworCXJldHVybiBkcm1fY29udGV4dF9zd2l0Y2goZGV2LCBkZXYtPmxhc3RfY29udGV4dCwgY3R4LmhhbmRsZSk7CiB9CiAKIC8qKgpAQCAtNTIxLDE4ICs1MjQsMTggQEAKICAqCiAgKiBDYWxscyBjb250ZXh0X3N3aXRjaF9jb21wbGV0ZSgpLgogICovCi1pbnQgZHJtX25ld2N0eCggc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCi0JCSB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyApCitpbnQgZHJtX25ld2N0eChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKKwkgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJZHJtX2ZpbGVfdCAqcHJpdiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAlkcm1fZGV2aWNlX3QgKmRldiA9IHByaXYtPmhlYWQtPmRldjsKIAlkcm1fY3R4X3QgY3R4OwogCi0JaWYgKCBjb3B5X2Zyb21fdXNlciggJmN0eCwgKGRybV9jdHhfdCBfX3VzZXIgKilhcmcsIHNpemVvZihjdHgpICkgKQorCWlmIChjb3B5X2Zyb21fdXNlcigmY3R4LCAoZHJtX2N0eF90IF9fdXNlciAqKSBhcmcsIHNpemVvZihjdHgpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlEUk1fREVCVUcoICIlZFxuIiwgY3R4LmhhbmRsZSApOwotCWRybV9jb250ZXh0X3N3aXRjaF9jb21wbGV0ZSggZGV2LCBjdHguaGFuZGxlICk7CisJRFJNX0RFQlVHKCIlZFxuIiwgY3R4LmhhbmRsZSk7CisJZHJtX2NvbnRleHRfc3dpdGNoX2NvbXBsZXRlKGRldiwgY3R4LmhhbmRsZSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTU0OCw0MiArNTUxLDQxIEBACiAgKgogICogSWYgbm90IHRoZSBzcGVjaWFsIGtlcm5lbCBjb250ZXh0LCBjYWxscyBjdHhiaXRtYXBfZnJlZSgpIHRvIGZyZWUgdGhlIHNwZWNpZmllZCBjb250ZXh0LgogICovCi1pbnQgZHJtX3JtY3R4KCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcgKQoraW50IGRybV9ybWN0eChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKKwkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlkcm1fZmlsZV90ICpwcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCWRybV9kZXZpY2VfdCAqZGV2ID0gcHJpdi0+aGVhZC0+ZGV2OwogCWRybV9jdHhfdCBjdHg7CiAKLQlpZiAoIGNvcHlfZnJvbV91c2VyKCAmY3R4LCAoZHJtX2N0eF90IF9fdXNlciAqKWFyZywgc2l6ZW9mKGN0eCkgKSApCisJaWYgKGNvcHlfZnJvbV91c2VyKCZjdHgsIChkcm1fY3R4X3QgX191c2VyICopIGFyZywgc2l6ZW9mKGN0eCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCURSTV9ERUJVRyggIiVkXG4iLCBjdHguaGFuZGxlICk7Ci0JaWYgKCBjdHguaGFuZGxlID09IERSTV9LRVJORUxfQ09OVEVYVCArIDEgKSB7CisJRFJNX0RFQlVHKCIlZFxuIiwgY3R4LmhhbmRsZSk7CisJaWYgKGN0eC5oYW5kbGUgPT0gRFJNX0tFUk5FTF9DT05URVhUICsgMSkgewogCQlwcml2LT5yZW1vdmVfYXV0aF9vbl9jbG9zZSA9IDE7CiAJfQotCWlmICggY3R4LmhhbmRsZSAhPSBEUk1fS0VSTkVMX0NPTlRFWFQgKSB7CisJaWYgKGN0eC5oYW5kbGUgIT0gRFJNX0tFUk5FTF9DT05URVhUKSB7CiAJCWlmIChkZXYtPmRyaXZlci0+Y29udGV4dF9kdG9yKQogCQkJZGV2LT5kcml2ZXItPmNvbnRleHRfZHRvcihkZXYsIGN0eC5oYW5kbGUpOwotCQlkcm1fY3R4Yml0bWFwX2ZyZWUoIGRldiwgY3R4LmhhbmRsZSApOworCQlkcm1fY3R4Yml0bWFwX2ZyZWUoZGV2LCBjdHguaGFuZGxlKTsKIAl9CiAKLQlkb3duKCAmZGV2LT5jdHhsaXN0X3NlbSApOwotCWlmICggIWxpc3RfZW1wdHkoICZkZXYtPmN0eGxpc3QtPmhlYWQgKSApIHsKKwlkb3duKCZkZXYtPmN0eGxpc3Rfc2VtKTsKKwlpZiAoIWxpc3RfZW1wdHkoJmRldi0+Y3R4bGlzdC0+aGVhZCkpIHsKIAkJZHJtX2N0eF9saXN0X3QgKnBvcywgKm47CiAKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKCBwb3MsIG4sICZkZXYtPmN0eGxpc3QtPmhlYWQsIGhlYWQgKSB7Ci0JCQlpZiAoIHBvcy0+aGFuZGxlID09IGN0eC5oYW5kbGUgKSB7Ci0JCQkJbGlzdF9kZWwoICZwb3MtPmhlYWQgKTsKLQkJCQlkcm1fZnJlZSggcG9zLCBzaXplb2YoKnBvcyksIERSTV9NRU1fQ1RYTElTVCApOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG9zLCBuLCAmZGV2LT5jdHhsaXN0LT5oZWFkLCBoZWFkKSB7CisJCQlpZiAocG9zLT5oYW5kbGUgPT0gY3R4LmhhbmRsZSkgeworCQkJCWxpc3RfZGVsKCZwb3MtPmhlYWQpOworCQkJCWRybV9mcmVlKHBvcywgc2l6ZW9mKCpwb3MpLCBEUk1fTUVNX0NUWExJU1QpOwogCQkJCS0tZGV2LT5jdHhfY291bnQ7CiAJCQl9CiAJCX0KIAl9Ci0JdXAoICZkZXYtPmN0eGxpc3Rfc2VtICk7CisJdXAoJmRldi0+Y3R4bGlzdF9zZW0pOwogCiAJcmV0dXJuIDA7CiB9CiAKIC8qQH0qLwotCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9kbWEuYyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX2RtYS5jCmluZGV4IDRhMjhjMDUuLjJhZmFiOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX2RtYS5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX2RtYS5jCkBAIC0xLDUgKzEsNSBAQAogLyoqCi0gKiBcZmlsZSBkcm1fZG1hLmggCisgKiBcZmlsZSBkcm1fZG1hLmMKICAqIERNQSBJT0NUTCBhbmQgZnVuY3Rpb24gc3VwcG9ydAogICoKICAqIFxhdXRob3IgUmlja2FyZCBFLiAoUmlrKSBGYWl0aCA8ZmFpdGhAdmFsaW51eC5jb20+CkBAIC0zNywyMyArMzcsMjMgQEAKIAogLyoqCiAgKiBJbml0aWFsaXplIHRoZSBETUEgZGF0YS4KLSAqIAorICoKICAqIFxwYXJhbSBkZXYgRFJNIGRldmljZS4KICAqIFxyZXR1cm4gemVybyBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgdmFsdWUgb24gZmFpbHVyZS4KICAqCiAgKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIGRybV9kZXZpY2VfZG1hIHN0cnVjdHVyZS4KICAqLwotaW50IGRybV9kbWFfc2V0dXAoIGRybV9kZXZpY2VfdCAqZGV2ICkKK2ludCBkcm1fZG1hX3NldHVwKGRybV9kZXZpY2VfdCAqIGRldikKIHsKIAlpbnQgaTsKIAotCWRldi0+ZG1hID0gZHJtX2FsbG9jKCBzaXplb2YoKmRldi0+ZG1hKSwgRFJNX01FTV9EUklWRVIgKTsKLQlpZiAoICFkZXYtPmRtYSApCisJZGV2LT5kbWEgPSBkcm1fYWxsb2Moc2l6ZW9mKCpkZXYtPmRtYSksIERSTV9NRU1fRFJJVkVSKTsKKwlpZiAoIWRldi0+ZG1hKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCW1lbXNldCggZGV2LT5kbWEsIDAsIHNpemVvZigqZGV2LT5kbWEpICk7CisJbWVtc2V0KGRldi0+ZG1hLCAwLCBzaXplb2YoKmRldi0+ZG1hKSk7CiAKLQlmb3IgKCBpID0gMCA7IGkgPD0gRFJNX01BWF9PUkRFUiA7IGkrKyApCisJZm9yIChpID0gMDsgaSA8PSBEUk1fTUFYX09SREVSOyBpKyspCiAJCW1lbXNldCgmZGV2LT5kbWEtPmJ1ZnNbaV0sIDAsIHNpemVvZihkZXYtPmRtYS0+YnVmc1swXSkpOwogCiAJcmV0dXJuIDA7CkBAIC02NywxNCArNjcsMTUgQEAKICAqIEZyZWUgYWxsIHBhZ2VzIGFzc29jaWF0ZWQgd2l0aCBETUEgYnVmZmVycywgdGhlIGJ1ZmZlcnMgYW5kIHBhZ2VzIGxpc3RzLCBhbmQKICAqIGZpbmFsbHkgdGhlIHRoZSBkcm1fZGV2aWNlOjpkbWEgc3RydWN0dXJlIGl0c2VsZi4KICAqLwotdm9pZCBkcm1fZG1hX3Rha2Vkb3duKGRybV9kZXZpY2VfdCAqZGV2KQordm9pZCBkcm1fZG1hX3Rha2Vkb3duKGRybV9kZXZpY2VfdCAqIGRldikKIHsKLQlkcm1fZGV2aWNlX2RtYV90ICAqZG1hID0gZGV2LT5kbWE7Ci0JaW50CQkgIGksIGo7CisJZHJtX2RldmljZV9kbWFfdCAqZG1hID0gZGV2LT5kbWE7CisJaW50IGksIGo7CiAKLQlpZiAoIWRtYSkgcmV0dXJuOworCWlmICghZG1hKQorCQlyZXR1cm47CiAKLQkJCQkvKiBDbGVhciBkbWEgYnVmZmVycyAqLworCS8qIENsZWFyIGRtYSBidWZmZXJzICovCiAJZm9yIChpID0gMDsgaSA8PSBEUk1fTUFYX09SREVSOyBpKyspIHsKIAkJaWYgKGRtYS0+YnVmc1tpXS5zZWdfY291bnQpIHsKIAkJCURSTV9ERUJVRygib3JkZXIgJWQ6IGJ1Zl9jb3VudCA9ICVkLCIKQEAgLTg1LDY0ICs4Niw2MyBAQAogCQkJZm9yIChqID0gMDsgaiA8IGRtYS0+YnVmc1tpXS5zZWdfY291bnQ7IGorKykgewogCQkJCWlmIChkbWEtPmJ1ZnNbaV0uc2VnbGlzdFtqXSkgewogCQkJCQlkcm1fZnJlZV9wYWdlcyhkbWEtPmJ1ZnNbaV0uc2VnbGlzdFtqXSwKLQkJCQkJCQlkbWEtPmJ1ZnNbaV0ucGFnZV9vcmRlciwKLQkJCQkJCQlEUk1fTUVNX0RNQSk7CisJCQkJCQkgICAgICAgZG1hLT5idWZzW2ldLnBhZ2Vfb3JkZXIsCisJCQkJCQkgICAgICAgRFJNX01FTV9ETUEpOwogCQkJCX0KIAkJCX0KIAkJCWRybV9mcmVlKGRtYS0+YnVmc1tpXS5zZWdsaXN0LAotCQkJCSAgZG1hLT5idWZzW2ldLnNlZ19jb3VudAotCQkJCSAgKiBzaXplb2YoKmRtYS0+YnVmc1swXS5zZWdsaXN0KSwKLQkJCQkgIERSTV9NRU1fU0VHUyk7CisJCQkJIGRtYS0+YnVmc1tpXS5zZWdfY291bnQKKwkJCQkgKiBzaXplb2YoKmRtYS0+YnVmc1swXS5zZWdsaXN0KSwgRFJNX01FTV9TRUdTKTsKIAkJfQotCSAgIAlpZiAoZG1hLT5idWZzW2ldLmJ1Zl9jb3VudCkgewotCQkgICAJZm9yIChqID0gMDsgaiA8IGRtYS0+YnVmc1tpXS5idWZfY291bnQ7IGorKykgeworCQlpZiAoZG1hLT5idWZzW2ldLmJ1Zl9jb3VudCkgeworCQkJZm9yIChqID0gMDsgaiA8IGRtYS0+YnVmc1tpXS5idWZfY291bnQ7IGorKykgewogCQkJCWlmIChkbWEtPmJ1ZnNbaV0uYnVmbGlzdFtqXS5kZXZfcHJpdmF0ZSkgewotCQkJCQlkcm1fZnJlZShkbWEtPmJ1ZnNbaV0uYnVmbGlzdFtqXS5kZXZfcHJpdmF0ZSwKLQkJCQkJCSAgZG1hLT5idWZzW2ldLmJ1Zmxpc3Rbal0uZGV2X3ByaXZfc2l6ZSwKLQkJCQkJCSAgRFJNX01FTV9CVUZTKTsKKwkJCQkJZHJtX2ZyZWUoZG1hLT5idWZzW2ldLmJ1Zmxpc3Rbal0uCisJCQkJCQkgZGV2X3ByaXZhdGUsCisJCQkJCQkgZG1hLT5idWZzW2ldLmJ1Zmxpc3Rbal0uCisJCQkJCQkgZGV2X3ByaXZfc2l6ZSwgRFJNX01FTV9CVUZTKTsKIAkJCQl9CiAJCQl9Ci0JCSAgIAlkcm1fZnJlZShkbWEtPmJ1ZnNbaV0uYnVmbGlzdCwKLQkJCQkgIGRtYS0+YnVmc1tpXS5idWZfY291bnQgKgotCQkJCSAgc2l6ZW9mKCpkbWEtPmJ1ZnNbMF0uYnVmbGlzdCksCi0JCQkJICBEUk1fTUVNX0JVRlMpOworCQkJZHJtX2ZyZWUoZG1hLT5idWZzW2ldLmJ1Zmxpc3QsCisJCQkJIGRtYS0+YnVmc1tpXS5idWZfY291bnQgKgorCQkJCSBzaXplb2YoKmRtYS0+YnVmc1swXS5idWZsaXN0KSwgRFJNX01FTV9CVUZTKTsKIAkJfQogCX0KIAogCWlmIChkbWEtPmJ1Zmxpc3QpIHsKIAkJZHJtX2ZyZWUoZG1hLT5idWZsaXN0LAotCQkJICBkbWEtPmJ1Zl9jb3VudCAqIHNpemVvZigqZG1hLT5idWZsaXN0KSwKLQkJCSAgRFJNX01FTV9CVUZTKTsKKwkJCSBkbWEtPmJ1Zl9jb3VudCAqIHNpemVvZigqZG1hLT5idWZsaXN0KSwgRFJNX01FTV9CVUZTKTsKIAl9CiAKIAlpZiAoZG1hLT5wYWdlbGlzdCkgewogCQlkcm1fZnJlZShkbWEtPnBhZ2VsaXN0LAotCQkJICBkbWEtPnBhZ2VfY291bnQgKiBzaXplb2YoKmRtYS0+cGFnZWxpc3QpLAotCQkJICBEUk1fTUVNX1BBR0VTKTsKKwkJCSBkbWEtPnBhZ2VfY291bnQgKiBzaXplb2YoKmRtYS0+cGFnZWxpc3QpLAorCQkJIERSTV9NRU1fUEFHRVMpOwogCX0KIAlkcm1fZnJlZShkZXYtPmRtYSwgc2l6ZW9mKCpkZXYtPmRtYSksIERSTV9NRU1fRFJJVkVSKTsKIAlkZXYtPmRtYSA9IE5VTEw7CiB9CiAKLQogLyoqCiAgKiBGcmVlIGEgYnVmZmVyLgogICoKICAqIFxwYXJhbSBkZXYgRFJNIGRldmljZS4KICAqIFxwYXJhbSBidWYgYnVmZmVyIHRvIGZyZWUuCi0gKiAKKyAqCiAgKiBSZXNldHMgdGhlIGZpZWxkcyBvZiBccCBidWYuCiAgKi8KLXZvaWQgZHJtX2ZyZWVfYnVmZmVyKGRybV9kZXZpY2VfdCAqZGV2LCBkcm1fYnVmX3QgKmJ1ZikKK3ZvaWQgZHJtX2ZyZWVfYnVmZmVyKGRybV9kZXZpY2VfdCAqIGRldiwgZHJtX2J1Zl90ICogYnVmKQogewotCWlmICghYnVmKSByZXR1cm47CisJaWYgKCFidWYpCisJCXJldHVybjsKIAotCWJ1Zi0+d2FpdGluZyAgPSAwOwotCWJ1Zi0+cGVuZGluZyAgPSAwOwotCWJ1Zi0+ZmlscCAgICAgPSBOVUxMOwotCWJ1Zi0+dXNlZCAgICAgPSAwOworCWJ1Zi0+d2FpdGluZyA9IDA7CisJYnVmLT5wZW5kaW5nID0gMDsKKwlidWYtPmZpbHAgPSBOVUxMOworCWJ1Zi0+dXNlZCA9IDA7CiAKLQlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9ETUFfUVVFVUUpICYmIHdhaXRxdWV1ZV9hY3RpdmUoJmJ1Zi0+ZG1hX3dhaXQpKSB7CisJaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfRE1BX1FVRVVFKQorCSAgICAmJiB3YWl0cXVldWVfYWN0aXZlKCZidWYtPmRtYV93YWl0KSkgewogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmJ1Zi0+ZG1hX3dhaXQpOwogCX0KIH0KQEAgLTE1NCwxMiArMTU0LDEzIEBACiAgKgogICogRnJlZXMgZWFjaCBidWZmZXIgYXNzb2NpYXRlZCB3aXRoIFxwIGZpbHAgbm90IGFscmVhZHkgb24gdGhlIGhhcmR3YXJlLgogICovCi12b2lkIGRybV9jb3JlX3JlY2xhaW1fYnVmZmVycyhkcm1fZGV2aWNlX3QgKmRldiwgc3RydWN0IGZpbGUgKmZpbHApCit2b2lkIGRybV9jb3JlX3JlY2xhaW1fYnVmZmVycyhkcm1fZGV2aWNlX3QgKiBkZXYsIHN0cnVjdCBmaWxlICpmaWxwKQogewogCWRybV9kZXZpY2VfZG1hX3QgKmRtYSA9IGRldi0+ZG1hOwotCWludAkJIGk7CisJaW50IGk7CiAKLQlpZiAoIWRtYSkgcmV0dXJuOworCWlmICghZG1hKQorCQlyZXR1cm47CiAJZm9yIChpID0gMDsgaSA8IGRtYS0+YnVmX2NvdW50OyBpKyspIHsKIAkJaWYgKGRtYS0+YnVmbGlzdFtpXS0+ZmlscCA9PSBmaWxwKSB7CiAJCQlzd2l0Y2ggKGRtYS0+YnVmbGlzdFtpXS0+bGlzdCkgewpAQCAtMTc2LDUgKzE3Nyw1IEBACiAJCX0KIAl9CiB9Ci1FWFBPUlRfU1lNQk9MKGRybV9jb3JlX3JlY2xhaW1fYnVmZmVycyk7CiAKK0VYUE9SVF9TWU1CT0woZHJtX2NvcmVfcmVjbGFpbV9idWZmZXJzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX2RyYXdhYmxlLmMgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9kcmF3YWJsZS5jCmluZGV4IGU4ZThlNDIuLjc4NTc0NTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX2RyYXdhYmxlLmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fZHJhd2FibGUuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKgotICogXGZpbGUgZHJtX2RyYXdhYmxlLmggCisgKiBcZmlsZSBkcm1fZHJhd2FibGUuYwogICogSU9DVExzIGZvciBkcmF3YWJsZXMKICAqCiAgKiBcYXV0aG9yIFJpY2thcmQgRS4gKFJpaykgRmFpdGggPGZhaXRoQHZhbGludXguY29tPgpAQCAtMzcsMjAgKzM3LDIwIEBACiAKIC8qKiBOby1vcC4gKi8KIGludCBkcm1fYWRkZHJhdyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlkcm1fZHJhd190IGRyYXc7CiAKIAlkcmF3LmhhbmRsZSA9IDA7CS8qIE5PT1AgKi8KIAlEUk1fREVCVUcoIiVkXG4iLCBkcmF3LmhhbmRsZSk7Ci0JaWYgKGNvcHlfdG9fdXNlcigoZHJtX2RyYXdfdCBfX3VzZXIgKilhcmcsICZkcmF3LCBzaXplb2YoZHJhdykpKQorCWlmIChjb3B5X3RvX3VzZXIoKGRybV9kcmF3X3QgX191c2VyICopIGFyZywgJmRyYXcsIHNpemVvZihkcmF3KSkpCiAJCXJldHVybiAtRUZBVUxUOwogCXJldHVybiAwOwogfQogCiAvKiogTm8tb3AuICovCiBpbnQgZHJtX3JtZHJhdyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCisJICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXJldHVybiAwOwkJLyogTk9PUCAqLwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9kcm1fZHJ2LmMgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9kcnYuYwppbmRleCA2YmE0OGYzLi4yNjczMzI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9kcnYuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9kcnYuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKgotICogXGZpbGUgZHJtX2Rydi5oIAorICogXGZpbGUgZHJtX2Rydi5jCiAgKiBHZW5lcmljIGRyaXZlciB0ZW1wbGF0ZQogICoKICAqIFxhdXRob3IgUmlja2FyZCBFLiAoUmlrKSBGYWl0aCA8ZmFpdGhAdmFsaW51eC5jb20+CkBAIC01NSw2NyArNTUsNjcgQEAKIAkJICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKIAogLyoqIElvY3RsIHRhYmxlICovCi1zdGF0aWMgZHJtX2lvY3RsX2Rlc2NfdAkJICBkcm1faW9jdGxzW10gPSB7Ci0JW0RSTV9JT0NUTF9OUihEUk1fSU9DVExfVkVSU0lPTildICAgICAgID0geyBkcm1fdmVyc2lvbiwgICAgIDAsIDAgfSwKLQlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9HRVRfVU5JUVVFKV0gICAgPSB7IGRybV9nZXR1bmlxdWUsICAgMCwgMCB9LAotCVtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX0dFVF9NQUdJQyldICAgICA9IHsgZHJtX2dldG1hZ2ljLCAgICAwLCAwIH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fSU9DVExfSVJRX0JVU0lEKV0gICAgID0geyBkcm1faXJxX2J5X2J1c2lkLCAwLCAxIH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fSU9DVExfR0VUX01BUCldICAgICAgID0geyBkcm1fZ2V0bWFwLCAgICAgIDAsIDAgfSwKLQlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9HRVRfQ0xJRU5UKV0gICAgPSB7IGRybV9nZXRjbGllbnQsICAgMCwgMCB9LAotCVtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX0dFVF9TVEFUUyldICAgICA9IHsgZHJtX2dldHN0YXRzLCAgICAwLCAwIH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fSU9DVExfU0VUX1ZFUlNJT04pXSAgID0geyBkcm1fc2V0dmVyc2lvbiwgIDAsIDEgfSwKK3N0YXRpYyBkcm1faW9jdGxfZGVzY190IGRybV9pb2N0bHNbXSA9IHsKKwlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9WRVJTSU9OKV0gPSB7ZHJtX3ZlcnNpb24sIDAsIDB9LAorCVtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX0dFVF9VTklRVUUpXSA9IHtkcm1fZ2V0dW5pcXVlLCAwLCAwfSwKKwlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9HRVRfTUFHSUMpXSA9IHtkcm1fZ2V0bWFnaWMsIDAsIDB9LAorCVtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX0lSUV9CVVNJRCldID0ge2RybV9pcnFfYnlfYnVzaWQsIDAsIDF9LAorCVtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX0dFVF9NQVApXSA9IHtkcm1fZ2V0bWFwLCAwLCAwfSwKKwlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9HRVRfQ0xJRU5UKV0gPSB7ZHJtX2dldGNsaWVudCwgMCwgMH0sCisJW0RSTV9JT0NUTF9OUihEUk1fSU9DVExfR0VUX1NUQVRTKV0gPSB7ZHJtX2dldHN0YXRzLCAwLCAwfSwKKwlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9TRVRfVkVSU0lPTildID0ge2RybV9zZXR2ZXJzaW9uLCAwLCAxfSwKIAotCVtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX1NFVF9VTklRVUUpXSAgICA9IHsgZHJtX3NldHVuaXF1ZSwgICAxLCAxIH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fSU9DVExfQkxPQ0spXSAgICAgICAgID0geyBkcm1fbm9vcCwgICAgICAgIDEsIDEgfSwKLQlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9VTkJMT0NLKV0gICAgICAgPSB7IGRybV9ub29wLCAgICAgICAgMSwgMSB9LAotCVtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX0FVVEhfTUFHSUMpXSAgICA9IHsgZHJtX2F1dGhtYWdpYywgICAxLCAxIH0sCisJW0RSTV9JT0NUTF9OUihEUk1fSU9DVExfU0VUX1VOSVFVRSldID0ge2RybV9zZXR1bmlxdWUsIDEsIDF9LAorCVtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX0JMT0NLKV0gPSB7ZHJtX25vb3AsIDEsIDF9LAorCVtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX1VOQkxPQ0spXSA9IHtkcm1fbm9vcCwgMSwgMX0sCisJW0RSTV9JT0NUTF9OUihEUk1fSU9DVExfQVVUSF9NQUdJQyldID0ge2RybV9hdXRobWFnaWMsIDEsIDF9LAogCi0JW0RSTV9JT0NUTF9OUihEUk1fSU9DVExfQUREX01BUCldICAgICAgID0geyBkcm1fYWRkbWFwX2lvY3RsLDEsIDEgfSwKLQlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9STV9NQVApXSAgICAgICAgPSB7IGRybV9ybW1hcF9pb2N0bCwgMSwgMCB9LAorCVtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX0FERF9NQVApXSA9IHtkcm1fYWRkbWFwX2lvY3RsLCAxLCAxfSwKKwlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9STV9NQVApXSA9IHtkcm1fcm1tYXBfaW9jdGwsIDEsIDB9LAogCi0JW0RSTV9JT0NUTF9OUihEUk1fSU9DVExfU0VUX1NBUkVBX0NUWCldID0geyBkcm1fc2V0c2FyZWFjdHgsIDEsIDEgfSwKLQlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9HRVRfU0FSRUFfQ1RYKV0gPSB7IGRybV9nZXRzYXJlYWN0eCwgMSwgMCB9LAorCVtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX1NFVF9TQVJFQV9DVFgpXSA9IHtkcm1fc2V0c2FyZWFjdHgsIDEsIDF9LAorCVtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX0dFVF9TQVJFQV9DVFgpXSA9IHtkcm1fZ2V0c2FyZWFjdHgsIDEsIDB9LAogCi0JW0RSTV9JT0NUTF9OUihEUk1fSU9DVExfQUREX0NUWCldICAgICAgID0geyBkcm1fYWRkY3R4LCAgICAgIDEsIDEgfSwKLQlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9STV9DVFgpXSAgICAgICAgPSB7IGRybV9ybWN0eCwgICAgICAgMSwgMSB9LAotCVtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX01PRF9DVFgpXSAgICAgICA9IHsgZHJtX21vZGN0eCwgICAgICAxLCAxIH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fSU9DVExfR0VUX0NUWCldICAgICAgID0geyBkcm1fZ2V0Y3R4LCAgICAgIDEsIDAgfSwKLQlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9TV0lUQ0hfQ1RYKV0gICAgPSB7IGRybV9zd2l0Y2hjdHgsICAgMSwgMSB9LAotCVtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX05FV19DVFgpXSAgICAgICA9IHsgZHJtX25ld2N0eCwgICAgICAxLCAxIH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fSU9DVExfUkVTX0NUWCldICAgICAgID0geyBkcm1fcmVzY3R4LCAgICAgIDEsIDAgfSwKKwlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9BRERfQ1RYKV0gPSB7ZHJtX2FkZGN0eCwgMSwgMX0sCisJW0RSTV9JT0NUTF9OUihEUk1fSU9DVExfUk1fQ1RYKV0gPSB7ZHJtX3JtY3R4LCAxLCAxfSwKKwlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9NT0RfQ1RYKV0gPSB7ZHJtX21vZGN0eCwgMSwgMX0sCisJW0RSTV9JT0NUTF9OUihEUk1fSU9DVExfR0VUX0NUWCldID0ge2RybV9nZXRjdHgsIDEsIDB9LAorCVtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX1NXSVRDSF9DVFgpXSA9IHtkcm1fc3dpdGNoY3R4LCAxLCAxfSwKKwlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9ORVdfQ1RYKV0gPSB7ZHJtX25ld2N0eCwgMSwgMX0sCisJW0RSTV9JT0NUTF9OUihEUk1fSU9DVExfUkVTX0NUWCldID0ge2RybV9yZXNjdHgsIDEsIDB9LAogCi0JW0RSTV9JT0NUTF9OUihEUk1fSU9DVExfQUREX0RSQVcpXSAgICAgID0geyBkcm1fYWRkZHJhdywgICAgIDEsIDEgfSwKLQlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9STV9EUkFXKV0gICAgICAgPSB7IGRybV9ybWRyYXcsICAgICAgMSwgMSB9LAorCVtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX0FERF9EUkFXKV0gPSB7ZHJtX2FkZGRyYXcsIDEsIDF9LAorCVtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX1JNX0RSQVcpXSA9IHtkcm1fcm1kcmF3LCAxLCAxfSwKIAotCVtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX0xPQ0spXQkgICAgICAgID0geyBkcm1fbG9jaywgICAgICAgIDEsIDAgfSwKLQlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9VTkxPQ0spXSAgICAgICAgPSB7IGRybV91bmxvY2ssICAgICAgMSwgMCB9LAorCVtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX0xPQ0spXSA9IHtkcm1fbG9jaywgMSwgMH0sCisJW0RSTV9JT0NUTF9OUihEUk1fSU9DVExfVU5MT0NLKV0gPSB7ZHJtX3VubG9jaywgMSwgMH0sCiAKLQlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9GSU5JU0gpXSAgICAgICAgPSB7IGRybV9ub29wLCAgICAgIDEsIDAgfSwKKwlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9GSU5JU0gpXSA9IHtkcm1fbm9vcCwgMSwgMH0sCiAKLQlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9BRERfQlVGUyldICAgICAgPSB7IGRybV9hZGRidWZzLCAgICAgMSwgMSB9LAotCVtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX01BUktfQlVGUyldICAgICA9IHsgZHJtX21hcmtidWZzLCAgICAxLCAxIH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fSU9DVExfSU5GT19CVUZTKV0gICAgID0geyBkcm1faW5mb2J1ZnMsICAgIDEsIDAgfSwKLQlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9NQVBfQlVGUyldICAgICAgPSB7IGRybV9tYXBidWZzLCAgICAgMSwgMCB9LAotCVtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX0ZSRUVfQlVGUyldICAgICA9IHsgZHJtX2ZyZWVidWZzLCAgICAxLCAwIH0sCisJW0RSTV9JT0NUTF9OUihEUk1fSU9DVExfQUREX0JVRlMpXSA9IHtkcm1fYWRkYnVmcywgMSwgMX0sCisJW0RSTV9JT0NUTF9OUihEUk1fSU9DVExfTUFSS19CVUZTKV0gPSB7ZHJtX21hcmtidWZzLCAxLCAxfSwKKwlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9JTkZPX0JVRlMpXSA9IHtkcm1faW5mb2J1ZnMsIDEsIDB9LAorCVtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX01BUF9CVUZTKV0gPSB7ZHJtX21hcGJ1ZnMsIDEsIDB9LAorCVtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX0ZSRUVfQlVGUyldID0ge2RybV9mcmVlYnVmcywgMSwgMH0sCiAJLyogVGhlIERSTV9JT0NUTF9ETUEgaW9jdGwgc2hvdWxkIGJlIGRlZmluZWQgYnkgdGhlIGRyaXZlci4gKi8KIAotCVtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX0NPTlRST0wpXSAgICAgICA9IHsgZHJtX2NvbnRyb2wsICAgICAxLCAxIH0sCisJW0RSTV9JT0NUTF9OUihEUk1fSU9DVExfQ09OVFJPTCldID0ge2RybV9jb250cm9sLCAxLCAxfSwKIAogI2lmIF9fT1NfSEFTX0FHUAotCVtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX0FHUF9BQ1FVSVJFKV0gICA9IHsgZHJtX2FncF9hY3F1aXJlX2lvY3RsLCAxLCAxIH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fSU9DVExfQUdQX1JFTEVBU0UpXSAgID0geyBkcm1fYWdwX3JlbGVhc2VfaW9jdGwsIDEsIDEgfSwKLQlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9BR1BfRU5BQkxFKV0gICAgPSB7IGRybV9hZ3BfZW5hYmxlX2lvY3RsLCAxLCAxIH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fSU9DVExfQUdQX0lORk8pXSAgICAgID0geyBkcm1fYWdwX2luZm9faW9jdGwsIDEsIDAgfSwKLQlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9BR1BfQUxMT0MpXSAgICAgPSB7IGRybV9hZ3BfYWxsb2MsICAgMSwgMSB9LAotCVtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX0FHUF9GUkVFKV0gICAgICA9IHsgZHJtX2FncF9mcmVlLCAgICAxLCAxIH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fSU9DVExfQUdQX0JJTkQpXSAgICAgID0geyBkcm1fYWdwX2JpbmQsICAgIDEsIDEgfSwKLQlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9BR1BfVU5CSU5EKV0gICAgPSB7IGRybV9hZ3BfdW5iaW5kLCAgMSwgMSB9LAorCVtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX0FHUF9BQ1FVSVJFKV0gPSB7ZHJtX2FncF9hY3F1aXJlX2lvY3RsLCAxLCAxfSwKKwlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9BR1BfUkVMRUFTRSldID0ge2RybV9hZ3BfcmVsZWFzZV9pb2N0bCwgMSwgMX0sCisJW0RSTV9JT0NUTF9OUihEUk1fSU9DVExfQUdQX0VOQUJMRSldID0ge2RybV9hZ3BfZW5hYmxlX2lvY3RsLCAxLCAxfSwKKwlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9BR1BfSU5GTyldID0ge2RybV9hZ3BfaW5mb19pb2N0bCwgMSwgMH0sCisJW0RSTV9JT0NUTF9OUihEUk1fSU9DVExfQUdQX0FMTE9DKV0gPSB7ZHJtX2FncF9hbGxvYywgMSwgMX0sCisJW0RSTV9JT0NUTF9OUihEUk1fSU9DVExfQUdQX0ZSRUUpXSA9IHtkcm1fYWdwX2ZyZWUsIDEsIDF9LAorCVtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX0FHUF9CSU5EKV0gPSB7ZHJtX2FncF9iaW5kLCAxLCAxfSwKKwlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9BR1BfVU5CSU5EKV0gPSB7ZHJtX2FncF91bmJpbmQsIDEsIDF9LAogI2VuZGlmCiAKLQlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9TR19BTExPQyldICAgICAgPSB7IGRybV9zZ19hbGxvYywgICAgMSwgMSB9LAotCVtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX1NHX0ZSRUUpXSAgICAgICA9IHsgZHJtX3NnX2ZyZWUsICAgICAxLCAxIH0sCisJW0RSTV9JT0NUTF9OUihEUk1fSU9DVExfU0dfQUxMT0MpXSA9IHtkcm1fc2dfYWxsb2MsIDEsIDF9LAorCVtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX1NHX0ZSRUUpXSA9IHtkcm1fc2dfZnJlZSwgMSwgMX0sCiAKLQlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9XQUlUX1ZCTEFOSyldICAgPSB7IGRybV93YWl0X3ZibGFuaywgMCwgMCB9LAorCVtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX1dBSVRfVkJMQU5LKV0gPSB7ZHJtX3dhaXRfdmJsYW5rLCAwLCAwfSwKIH07CiAKICNkZWZpbmUgRFJJVkVSX0lPQ1RMX0NPVU5UCURSTV9BUlJBWV9TSVpFKCBkcm1faW9jdGxzICkKQEAgLTEyOSwxNyArMTI5LDE3IEBACiAgKgogICogXHNhIGRybV9kZXZpY2UKICAqLwotaW50IGRybV90YWtlZG93biggZHJtX2RldmljZV90ICpkZXYgKQoraW50IGRybV90YWtlZG93bihkcm1fZGV2aWNlX3QgKiBkZXYpCiB7CiAJZHJtX21hZ2ljX2VudHJ5X3QgKnB0LCAqbmV4dDsKIAlkcm1fbWFwX2xpc3RfdCAqcl9saXN0OwogCWRybV92bWFfZW50cnlfdCAqdm1hLCAqdm1hX25leHQ7CiAJaW50IGk7CiAKLQlEUk1fREVCVUcoICJcbiIgKTsKKwlEUk1fREVCVUcoIlxuIik7CiAKIAlpZiAoZGV2LT5kcml2ZXItPnByZXRha2Vkb3duKQotCSAgZGV2LT5kcml2ZXItPnByZXRha2Vkb3duKGRldik7CisJCWRldi0+ZHJpdmVyLT5wcmV0YWtlZG93bihkZXYpOwogCURSTV9ERUJVRygiZHJpdmVyIHByZXRha2Vkb3duIGNvbXBsZXRlZFxuIik7CiAKIAlpZiAoZGV2LT51bmlxdWUpIHsKQEAgLTE0OCw5NSArMTQ4LDk1IEBACiAJCWRldi0+dW5pcXVlX2xlbiA9IDA7CiAJfQogCi0JaWYgKCBkZXYtPmlycV9lbmFibGVkICkgZHJtX2lycV91bmluc3RhbGwoIGRldiApOworCWlmIChkZXYtPmlycV9lbmFibGVkKQorCQlkcm1faXJxX3VuaW5zdGFsbChkZXYpOwogCi0JZG93biggJmRldi0+c3RydWN0X3NlbSApOwotCWRlbF90aW1lciggJmRldi0+dGltZXIgKTsKKwlkb3duKCZkZXYtPnN0cnVjdF9zZW0pOworCWRlbF90aW1lcigmZGV2LT50aW1lcik7CiAKLQkJCQkvKiBDbGVhciBwaWQgbGlzdCAqLwotCWZvciAoIGkgPSAwIDsgaSA8IERSTV9IQVNIX1NJWkUgOyBpKysgKSB7Ci0JCWZvciAoIHB0ID0gZGV2LT5tYWdpY2xpc3RbaV0uaGVhZCA7IHB0IDsgcHQgPSBuZXh0ICkgeworCS8qIENsZWFyIHBpZCBsaXN0ICovCisJZm9yIChpID0gMDsgaSA8IERSTV9IQVNIX1NJWkU7IGkrKykgeworCQlmb3IgKHB0ID0gZGV2LT5tYWdpY2xpc3RbaV0uaGVhZDsgcHQ7IHB0ID0gbmV4dCkgewogCQkJbmV4dCA9IHB0LT5uZXh0OwotCQkJZHJtX2ZyZWUoIHB0LCBzaXplb2YoKnB0KSwgRFJNX01FTV9NQUdJQyApOworCQkJZHJtX2ZyZWUocHQsIHNpemVvZigqcHQpLCBEUk1fTUVNX01BR0lDKTsKIAkJfQogCQlkZXYtPm1hZ2ljbGlzdFtpXS5oZWFkID0gZGV2LT5tYWdpY2xpc3RbaV0udGFpbCA9IE5VTEw7CiAJfQogCi0JCQkJLyogQ2xlYXIgQUdQIGluZm9ybWF0aW9uICovCisJLyogQ2xlYXIgQUdQIGluZm9ybWF0aW9uICovCiAJaWYgKGRybV9jb3JlX2hhc19BR1AoZGV2KSAmJiBkZXYtPmFncCkgewogCQlkcm1fYWdwX21lbV90ICplbnRyeTsKIAkJZHJtX2FncF9tZW1fdCAqbmV4dGU7CiAKLQkJCQkvKiBSZW1vdmUgQUdQIHJlc291cmNlcywgYnV0IGxlYXZlIGRldi0+YWdwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGFjdCB1bnRpbCBkcnZfY2xlYW51cCBpcyBjYWxsZWQuICovCi0JCWZvciAoIGVudHJ5ID0gZGV2LT5hZ3AtPm1lbW9yeSA7IGVudHJ5IDsgZW50cnkgPSBuZXh0ZSApIHsKKwkJLyogUmVtb3ZlIEFHUCByZXNvdXJjZXMsIGJ1dCBsZWF2ZSBkZXYtPmFncAorCQkgICBpbnRhY3QgdW50aWwgZHJ2X2NsZWFudXAgaXMgY2FsbGVkLiAqLworCQlmb3IgKGVudHJ5ID0gZGV2LT5hZ3AtPm1lbW9yeTsgZW50cnk7IGVudHJ5ID0gbmV4dGUpIHsKIAkJCW5leHRlID0gZW50cnktPm5leHQ7Ci0JCQlpZiAoIGVudHJ5LT5ib3VuZCApIGRybV91bmJpbmRfYWdwKCBlbnRyeS0+bWVtb3J5ICk7Ci0JCQlkcm1fZnJlZV9hZ3AoIGVudHJ5LT5tZW1vcnksIGVudHJ5LT5wYWdlcyApOwotCQkJZHJtX2ZyZWUoIGVudHJ5LCBzaXplb2YoKmVudHJ5KSwgRFJNX01FTV9BR1BMSVNUUyApOworCQkJaWYgKGVudHJ5LT5ib3VuZCkKKwkJCQlkcm1fdW5iaW5kX2FncChlbnRyeS0+bWVtb3J5KTsKKwkJCWRybV9mcmVlX2FncChlbnRyeS0+bWVtb3J5LCBlbnRyeS0+cGFnZXMpOworCQkJZHJtX2ZyZWUoZW50cnksIHNpemVvZigqZW50cnkpLCBEUk1fTUVNX0FHUExJU1RTKTsKIAkJfQogCQlkZXYtPmFncC0+bWVtb3J5ID0gTlVMTDsKIAogCQlpZiAoZGV2LT5hZ3AtPmFjcXVpcmVkKQotCQkgIGRybV9hZ3BfcmVsZWFzZShkZXYpOworCQkJZHJtX2FncF9yZWxlYXNlKGRldik7CiAKIAkJZGV2LT5hZ3AtPmFjcXVpcmVkID0gMDsKLQkJZGV2LT5hZ3AtPmVuYWJsZWQgID0gMDsKKwkJZGV2LT5hZ3AtPmVuYWJsZWQgPSAwOwogCX0KIAlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9TRykgJiYgZGV2LT5zZykgewogCQlkcm1fc2dfY2xlYW51cChkZXYtPnNnKTsKIAkJZGV2LT5zZyA9IE5VTEw7CiAJfQogCi0JCQkJLyogQ2xlYXIgdm1hIGxpc3QgKG9ubHkgYnVpbHQgZm9yIGRlYnVnZ2luZykgKi8KLQlpZiAoIGRldi0+dm1hbGlzdCApIHsKLQkJZm9yICggdm1hID0gZGV2LT52bWFsaXN0IDsgdm1hIDsgdm1hID0gdm1hX25leHQgKSB7CisJLyogQ2xlYXIgdm1hIGxpc3QgKG9ubHkgYnVpbHQgZm9yIGRlYnVnZ2luZykgKi8KKwlpZiAoZGV2LT52bWFsaXN0KSB7CisJCWZvciAodm1hID0gZGV2LT52bWFsaXN0OyB2bWE7IHZtYSA9IHZtYV9uZXh0KSB7CiAJCQl2bWFfbmV4dCA9IHZtYS0+bmV4dDsKLQkJCWRybV9mcmVlKCB2bWEsIHNpemVvZigqdm1hKSwgRFJNX01FTV9WTUFTICk7CisJCQlkcm1fZnJlZSh2bWEsIHNpemVvZigqdm1hKSwgRFJNX01FTV9WTUFTKTsKIAkJfQogCQlkZXYtPnZtYWxpc3QgPSBOVUxMOwogCX0KIAotCWlmKCBkZXYtPm1hcGxpc3QgKSB7CisJaWYgKGRldi0+bWFwbGlzdCkgewogCQl3aGlsZSAoIWxpc3RfZW1wdHkoJmRldi0+bWFwbGlzdC0+aGVhZCkpIHsKIAkJCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3QgPSBkZXYtPm1hcGxpc3QtPmhlYWQubmV4dDsKIAkJCXJfbGlzdCA9IGxpc3RfZW50cnkobGlzdCwgZHJtX21hcF9saXN0X3QsIGhlYWQpOwogCQkJZHJtX3JtbWFwX2xvY2tlZChkZXYsIHJfbGlzdC0+bWFwKTsKIAkJfQotIAl9CisJfQogCi0JaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfRE1BX1FVRVVFKSAmJiBkZXYtPnF1ZXVlbGlzdCApIHsKLQkJZm9yICggaSA9IDAgOyBpIDwgZGV2LT5xdWV1ZV9jb3VudCA7IGkrKyApIHsKLQkJCWlmICggZGV2LT5xdWV1ZWxpc3RbaV0gKSB7Ci0JCQkJZHJtX2ZyZWUoIGRldi0+cXVldWVsaXN0W2ldLAotCQkJCQkgIHNpemVvZigqZGV2LT5xdWV1ZWxpc3RbMF0pLAotCQkJCQkgIERSTV9NRU1fUVVFVUVTICk7CisJaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfRE1BX1FVRVVFKSAmJiBkZXYtPnF1ZXVlbGlzdCkgeworCQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5xdWV1ZV9jb3VudDsgaSsrKSB7CisJCQlpZiAoZGV2LT5xdWV1ZWxpc3RbaV0pIHsKKwkJCQlkcm1fZnJlZShkZXYtPnF1ZXVlbGlzdFtpXSwKKwkJCQkJIHNpemVvZigqZGV2LT5xdWV1ZWxpc3RbMF0pLAorCQkJCQkgRFJNX01FTV9RVUVVRVMpOwogCQkJCWRldi0+cXVldWVsaXN0W2ldID0gTlVMTDsKIAkJCX0KIAkJfQotCQlkcm1fZnJlZSggZGV2LT5xdWV1ZWxpc3QsCi0JCQkgIGRldi0+cXVldWVfc2xvdHMgKiBzaXplb2YoKmRldi0+cXVldWVsaXN0KSwKLQkJCSAgRFJNX01FTV9RVUVVRVMgKTsKKwkJZHJtX2ZyZWUoZGV2LT5xdWV1ZWxpc3QsCisJCQkgZGV2LT5xdWV1ZV9zbG90cyAqIHNpemVvZigqZGV2LT5xdWV1ZWxpc3QpLAorCQkJIERSTV9NRU1fUVVFVUVTKTsKIAkJZGV2LT5xdWV1ZWxpc3QgPSBOVUxMOwogCX0KIAlkZXYtPnF1ZXVlX2NvdW50ID0gMDsKIAogCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX0hBVkVfRE1BKSkKLQkJZHJtX2RtYV90YWtlZG93biggZGV2ICk7CisJCWRybV9kbWFfdGFrZWRvd24oZGV2KTsKIAotCWlmICggZGV2LT5sb2NrLmh3X2xvY2sgKSB7Ci0JCWRldi0+c2lnZGF0YS5sb2NrID0gZGV2LT5sb2NrLmh3X2xvY2sgPSBOVUxMOyAvKiBTSE0gcmVtb3ZlZCAqLworCWlmIChkZXYtPmxvY2suaHdfbG9jaykgeworCQlkZXYtPnNpZ2RhdGEubG9jayA9IGRldi0+bG9jay5od19sb2NrID0gTlVMTDsJLyogU0hNIHJlbW92ZWQgKi8KIAkJZGV2LT5sb2NrLmZpbHAgPSBOVUxMOwotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoICZkZXYtPmxvY2subG9ja19xdWV1ZSApOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmRldi0+bG9jay5sb2NrX3F1ZXVlKTsKIAl9Ci0JdXAoICZkZXYtPnN0cnVjdF9zZW0gKTsKKwl1cCgmZGV2LT5zdHJ1Y3Rfc2VtKTsKIAogCURSTV9ERUJVRygidGFrZWRvd24gY29tcGxldGVkXG4iKTsKIAlyZXR1cm4gMDsKIH0KIAotCi0KIC8qKgogICogTW9kdWxlIGluaXRpYWxpemF0aW9uLiBDYWxsZWQgdmlhIGluaXRfbW9kdWxlIGF0IG1vZHVsZSBsb2FkIHRpbWUsIG9yIHZpYQogICogbGludXgvaW5pdC9tYWluLmMgKHRoaXMgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQpLgpAQCAtMjQ2LDI2ICsyNDYsMjggQEAKICAqIEluaXRpYWxpemVzIGFuIGFycmF5IG9mIGRybV9kZXZpY2Ugc3RydWN0dXJlcywgYW5kIGF0dGVtcHRzIHRvCiAgKiBpbml0aWFsaXplIGFsbCBhdmFpbGFibGUgZGV2aWNlcywgdXNpbmcgY29uc2VjdXRpdmUgbWlub3JzLCByZWdpc3RlcmluZyB0aGUKICAqIHN0dWJzIGFuZCBpbml0aWFsaXppbmcgdGhlIEFHUCBkZXZpY2UuCi0gKiAKKyAqCiAgKiBFeHBhbmRzIHRoZSBcYyBEUklWRVJfUFJFSU5JVCBhbmQgXGMgRFJJVkVSX1BPU1RfSU5JVCBtYWNyb3MgYmVmb3JlIGFuZAogICogYWZ0ZXIgdGhlIGluaXRpYWxpemF0aW9uIGZvciBkcml2ZXIgY3VzdG9taXphdGlvbi4KICAqLwotaW50IGRybV9pbml0KCBzdHJ1Y3QgZHJtX2RyaXZlciAqZHJpdmVyICkKK2ludCBkcm1faW5pdChzdHJ1Y3QgZHJtX2RyaXZlciAqZHJpdmVyKQogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gTlVMTDsKIAlzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGlkOwogCWludCBpOwogCi0JRFJNX0RFQlVHKCAiXG4iICk7CisJRFJNX0RFQlVHKCJcbiIpOwogCiAJZHJtX21lbV9pbml0KCk7CiAKLQlmb3IgKGk9MDsgZHJpdmVyLT5wY2lfZHJpdmVyLmlkX3RhYmxlW2ldLnZlbmRvciAhPSAwOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBkcml2ZXItPnBjaV9kcml2ZXIuaWRfdGFibGVbaV0udmVuZG9yICE9IDA7IGkrKykgewogCQlwaWQgPSAoc3RydWN0IHBjaV9kZXZpY2VfaWQgKikmZHJpdmVyLT5wY2lfZHJpdmVyLmlkX3RhYmxlW2ldOwotCQkKLQkJcGRldj1OVUxMOwotCQkvKiBwYXNzIGJhY2sgaW4gcGRldiB0byBhY2NvdW50IGZvciBtdWx0aXBsZSBpZGVudGljYWwgY2FyZHMgKi8JCQotCQl3aGlsZSAoKHBkZXYgPSBwY2lfZ2V0X3N1YnN5cyhwaWQtPnZlbmRvciwgcGlkLT5kZXZpY2UsIHBpZC0+c3VidmVuZG9yLCBwaWQtPnN1YmRldmljZSwgcGRldikpICE9IE5VTEwpIHsKKworCQlwZGV2ID0gTlVMTDsKKwkJLyogcGFzcyBiYWNrIGluIHBkZXYgdG8gYWNjb3VudCBmb3IgbXVsdGlwbGUgaWRlbnRpY2FsIGNhcmRzICovCisJCXdoaWxlICgocGRldiA9CisJCQlwY2lfZ2V0X3N1YnN5cyhwaWQtPnZlbmRvciwgcGlkLT5kZXZpY2UsIHBpZC0+c3VidmVuZG9yLAorCQkJCSAgICAgICBwaWQtPnN1YmRldmljZSwgcGRldikpICE9IE5VTEwpIHsKIAkJCS8qIHN0ZWFsdGggbW9kZSByZXF1aXJlcyBhIG1hbnVhbCBwcm9iZSAqLwogCQkJcGNpX2Rldl9nZXQocGRldik7CiAJCQlkcm1fZ2V0X2RldihwZGV2LCBwaWQsIGRyaXZlcik7CkBAIC0yNzMsNjIgKzI3NSw2MyBAQAogCX0KIAlyZXR1cm4gMDsKIH0KKwogRVhQT1JUX1NZTUJPTChkcm1faW5pdCk7CiAKIC8qKgogICogQ2FsbGVkIHZpYSBjbGVhbnVwX21vZHVsZSgpIGF0IG1vZHVsZSB1bmxvYWQgdGltZS4KICAqCiAgKiBDbGVhbnMgdXAgYWxsIERSTSBkZXZpY2UsIGNhbGxpbmcgdGFrZWRvd24oKS4KLSAqIAorICoKICAqIFxzYSBkcm1faW5pdAogICovCi1zdGF0aWMgdm9pZCBkcm1fY2xlYW51cCggZHJtX2RldmljZV90ICpkZXYgKQorc3RhdGljIHZvaWQgZHJtX2NsZWFudXAoZHJtX2RldmljZV90ICogZGV2KQogewotCURSTV9ERUJVRyggIlxuIiApOworCURSTV9ERUJVRygiXG4iKTsKIAogCWlmICghZGV2KSB7CiAJCURSTV9FUlJPUigiY2xlYW51cCBjYWxsZWQgbm8gZGV2XG4iKTsKIAkJcmV0dXJuOwogCX0KIAotCWRybV90YWtlZG93biggZGV2ICk7CQorCWRybV90YWtlZG93bihkZXYpOwogCiAJaWYgKGRldi0+bWFwbGlzdCkgewogCQlkcm1fZnJlZShkZXYtPm1hcGxpc3QsIHNpemVvZigqZGV2LT5tYXBsaXN0KSwgRFJNX01FTV9NQVBTKTsKIAkJZGV2LT5tYXBsaXN0ID0gTlVMTDsKIAl9CiAKLQlkcm1fY3R4Yml0bWFwX2NsZWFudXAoIGRldiApOwotCQorCWRybV9jdHhiaXRtYXBfY2xlYW51cChkZXYpOworCiAJaWYgKGRybV9jb3JlX2hhc19NVFJSKGRldikgJiYgZHJtX2NvcmVfaGFzX0FHUChkZXYpICYmCiAJICAgIGRldi0+YWdwICYmIGRldi0+YWdwLT5hZ3BfbXRyciA+PSAwKSB7CiAJCWludCByZXR2YWw7Ci0JCXJldHZhbCA9IG10cnJfZGVsKCBkZXYtPmFncC0+YWdwX210cnIsCi0JCQkJICAgZGV2LT5hZ3AtPmFncF9pbmZvLmFwZXJfYmFzZSwKLQkJCQkgICBkZXYtPmFncC0+YWdwX2luZm8uYXBlcl9zaXplKjEwMjQqMTAyNCApOwotCQlEUk1fREVCVUcoICJtdHJyX2RlbD0lZFxuIiwgcmV0dmFsICk7CisJCXJldHZhbCA9IG10cnJfZGVsKGRldi0+YWdwLT5hZ3BfbXRyciwKKwkJCQkgIGRldi0+YWdwLT5hZ3BfaW5mby5hcGVyX2Jhc2UsCisJCQkJICBkZXYtPmFncC0+YWdwX2luZm8uYXBlcl9zaXplICogMTAyNCAqIDEwMjQpOworCQlEUk1fREVCVUcoIm10cnJfZGVsPSVkXG4iLCByZXR2YWwpOwogCX0KLQkKLQlpZiAoZHJtX2NvcmVfaGFzX0FHUChkZXYpICYmIGRldi0+YWdwICkgewotCQlkcm1fZnJlZSggZGV2LT5hZ3AsIHNpemVvZigqZGV2LT5hZ3ApLCBEUk1fTUVNX0FHUExJU1RTICk7CisKKwlpZiAoZHJtX2NvcmVfaGFzX0FHUChkZXYpICYmIGRldi0+YWdwKSB7CisJCWRybV9mcmVlKGRldi0+YWdwLCBzaXplb2YoKmRldi0+YWdwKSwgRFJNX01FTV9BR1BMSVNUUyk7CiAJCWRldi0+YWdwID0gTlVMTDsKIAl9CiAKIAlpZiAoZGV2LT5kcml2ZXItPnBvc3RjbGVhbnVwKQogCQlkZXYtPmRyaXZlci0+cG9zdGNsZWFudXAoZGV2KTsKLQkKKwogCWRybV9wdXRfaGVhZCgmZGV2LT5wcmltYXJ5KTsKLQlpZiAoIGRybV9wdXRfZGV2KGRldikgKQotCQlEUk1fRVJST1IoICJDYW5ub3QgdW5sb2FkIG1vZHVsZVxuIiApOworCWlmIChkcm1fcHV0X2RldihkZXYpKQorCQlEUk1fRVJST1IoIkNhbm5vdCB1bmxvYWQgbW9kdWxlXG4iKTsKIH0KIAotdm9pZCBkcm1fZXhpdCAoc3RydWN0IGRybV9kcml2ZXIgKmRyaXZlcikKK3ZvaWQgZHJtX2V4aXQoc3RydWN0IGRybV9kcml2ZXIgKmRyaXZlcikKIHsKIAlpbnQgaTsKIAlkcm1fZGV2aWNlX3QgKmRldiA9IE5VTEw7CiAJZHJtX2hlYWRfdCAqaGVhZDsKLQkKLQlEUk1fREVCVUcoICJcbiIgKTsKKworCURSTV9ERUJVRygiXG4iKTsKIAogCWZvciAoaSA9IDA7IGkgPCBkcm1fY2FyZHNfbGltaXQ7IGkrKykgewogCQloZWFkID0gZHJtX2hlYWRzW2ldOwpAQCAtMzM2LDkgKzMzOSw5IEBACiAJCQljb250aW51ZTsKIAkJaWYgKCFoZWFkLT5kZXYpCiAJCQljb250aW51ZTsKLQkJaWYgKGhlYWQtPmRldi0+ZHJpdmVyIT1kcml2ZXIpCisJCWlmIChoZWFkLT5kZXYtPmRyaXZlciAhPSBkcml2ZXIpCiAJCQljb250aW51ZTsKLQkJZGV2PWhlYWQtPmRldjsKKwkJZGV2ID0gaGVhZC0+ZGV2OwogCX0KIAlpZiAoZGV2KSB7CiAJCS8qIHJlbGVhc2UgdGhlIHBjaSBkcml2ZXIgKi8KQEAgLTM0NiwzMiArMzQ5LDM1IEBACiAJCQlwY2lfZGV2X3B1dChkZXYtPnBkZXYpOwogCQlkcm1fY2xlYW51cChkZXYpOwogCX0KLQlEUk1fSU5GTyggIk1vZHVsZSB1bmxvYWRlZFxuIiApOworCURSTV9JTkZPKCJNb2R1bGUgdW5sb2FkZWRcbiIpOwogfQorCiBFWFBPUlRfU1lNQk9MKGRybV9leGl0KTsKIAogLyoqIEZpbGUgb3BlcmF0aW9ucyBzdHJ1Y3R1cmUgKi8KIHN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRybV9zdHViX2ZvcHMgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLm9wZW4gID0gZHJtX3N0dWJfb3BlbgorCS5vcGVuID0gZHJtX3N0dWJfb3BlbgogfTsKIAogc3RhdGljIGludCBfX2luaXQgZHJtX2NvcmVfaW5pdCh2b2lkKQogewogCWludCByZXQgPSAtRU5PTUVNOwotCQotCWRybV9jYXJkc19saW1pdCA9IChkcm1fY2FyZHNfbGltaXQgPCBEUk1fTUFYX01JTk9SICsgMSA/IGRybV9jYXJkc19saW1pdCA6IERSTV9NQVhfTUlOT1IgKyAxKTsKLQlkcm1faGVhZHMgPSBkcm1fY2FsbG9jKGRybV9jYXJkc19saW1pdCwKLQkJCQlzaXplb2YoKmRybV9oZWFkcyksIERSTV9NRU1fU1RVQik7Ci0JaWYoIWRybV9oZWFkcykgCisKKwlkcm1fY2FyZHNfbGltaXQgPQorCSAgICAoZHJtX2NhcmRzX2xpbWl0IDwKKwkgICAgIERSTV9NQVhfTUlOT1IgKyAxID8gZHJtX2NhcmRzX2xpbWl0IDogRFJNX01BWF9NSU5PUiArIDEpOworCWRybV9oZWFkcyA9CisJICAgIGRybV9jYWxsb2MoZHJtX2NhcmRzX2xpbWl0LCBzaXplb2YoKmRybV9oZWFkcyksIERSTV9NRU1fU1RVQik7CisJaWYgKCFkcm1faGVhZHMpCiAJCWdvdG8gZXJyX3AxOwotCQorCiAJaWYgKHJlZ2lzdGVyX2NocmRldihEUk1fTUFKT1IsICJkcm0iLCAmZHJtX3N0dWJfZm9wcykpCiAJCWdvdG8gZXJyX3AxOwotCQorCiAJZHJtX2NsYXNzID0gZHJtX3N5c2ZzX2NyZWF0ZShUSElTX01PRFVMRSwgImRybSIpOwogCWlmIChJU19FUlIoZHJtX2NsYXNzKSkgewotCQlwcmludGsgKEtFUk5fRVJSICJEUk06IEVycm9yIGNyZWF0aW5nIGRybSBjbGFzcy5cbiIpOworCQlwcmludGsoS0VSTl9FUlIgIkRSTTogRXJyb3IgY3JlYXRpbmcgZHJtIGNsYXNzLlxuIik7CiAJCXJldCA9IFBUUl9FUlIoZHJtX2NsYXNzKTsKIAkJZ290byBlcnJfcDI7CiAJfQpAQCAtMzgyLDM1ICszODgsMzEgQEAKIAkJcmV0ID0gLTE7CiAJCWdvdG8gZXJyX3AzOwogCX0KLQkJCi0JRFJNX0lORk8oICJJbml0aWFsaXplZCAlcyAlZC4lZC4lZCAlc1xuIiwKLQkJQ09SRV9OQU1FLCBDT1JFX01BSk9SLCBDT1JFX01JTk9SLCBDT1JFX1BBVENITEVWRUwsCi0JCUNPUkVfREFURSk7CisKKwlEUk1fSU5GTygiSW5pdGlhbGl6ZWQgJXMgJWQuJWQuJWQgJXNcbiIsCisJCSBDT1JFX05BTUUsIENPUkVfTUFKT1IsIENPUkVfTUlOT1IsIENPUkVfUEFUQ0hMRVZFTCwgQ09SRV9EQVRFKTsKIAlyZXR1cm4gMDsKLWVycl9wMzoKKyAgICAgIGVycl9wMzoKIAlkcm1fc3lzZnNfZGVzdHJveShkcm1fY2xhc3MpOwotZXJyX3AyOgorICAgICAgZXJyX3AyOgogCXVucmVnaXN0ZXJfY2hyZGV2KERSTV9NQUpPUiwgImRybSIpOwogCWRybV9mcmVlKGRybV9oZWFkcywgc2l6ZW9mKCpkcm1faGVhZHMpICogZHJtX2NhcmRzX2xpbWl0LCBEUk1fTUVNX1NUVUIpOwotZXJyX3AxOgkKKyAgICAgIGVycl9wMToKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBfX2V4aXQgZHJtX2NvcmVfZXhpdCAodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBkcm1fY29yZV9leGl0KHZvaWQpCiB7CiAJcmVtb3ZlX3Byb2NfZW50cnkoImRyaSIsIE5VTEwpOwogCWRybV9zeXNmc19kZXN0cm95KGRybV9jbGFzcyk7CiAKIAl1bnJlZ2lzdGVyX2NocmRldihEUk1fTUFKT1IsICJkcm0iKTsKIAotCWRybV9mcmVlKGRybV9oZWFkcywgc2l6ZW9mKCpkcm1faGVhZHMpICoKLQkJCQlkcm1fY2FyZHNfbGltaXQsIERSTV9NRU1fU1RVQik7CisJZHJtX2ZyZWUoZHJtX2hlYWRzLCBzaXplb2YoKmRybV9oZWFkcykgKiBkcm1fY2FyZHNfbGltaXQsIERSTV9NRU1fU1RVQik7CiB9CiAKLQotbW9kdWxlX2luaXQoIGRybV9jb3JlX2luaXQgKTsKLW1vZHVsZV9leGl0KCBkcm1fY29yZV9leGl0ICk7Ci0KK21vZHVsZV9pbml0KGRybV9jb3JlX2luaXQpOworbW9kdWxlX2V4aXQoZHJtX2NvcmVfZXhpdCk7CiAKIC8qKgogICogR2V0IHZlcnNpb24gaW5mb3JtYXRpb24KQEAgLTQyMyw4ICs0MjUsOCBAQAogICoKICAqIEZpbGxzIGluIHRoZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGluIFxwIGFyZy4KICAqLwotc3RhdGljIGludCBkcm1fdmVyc2lvbiggc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCi0JCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyApCitzdGF0aWMgaW50IGRybV92ZXJzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAorCQkgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJZHJtX2ZpbGVfdCAqcHJpdiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAlkcm1fZGV2aWNlX3QgKmRldiA9IHByaXYtPmhlYWQtPmRldjsKQEAgLTQzMiwyMSArNDM0LDE5IEBACiAJZHJtX3ZlcnNpb25fdCB2ZXJzaW9uOwogCWludCByZXQ7CiAKLQlpZiAoIGNvcHlfZnJvbV91c2VyKCAmdmVyc2lvbiwgYXJncCwgc2l6ZW9mKHZlcnNpb24pICkgKQorCWlmIChjb3B5X2Zyb21fdXNlcigmdmVyc2lvbiwgYXJncCwgc2l6ZW9mKHZlcnNpb24pKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAkvKiB2ZXJzaW9uIGlzIGEgcmVxdWlyZWQgZnVuY3Rpb24gdG8gcmV0dXJuIHRoZSBwZXJzb25hbGl0eSBtb2R1bGUgdmVyc2lvbiAqLwogCWlmICgocmV0ID0gZGV2LT5kcml2ZXItPnZlcnNpb24oJnZlcnNpb24pKSkKIAkJcmV0dXJuIHJldDsKLQkJCi0JaWYgKCBjb3B5X3RvX3VzZXIoIGFyZ3AsICZ2ZXJzaW9uLCBzaXplb2YodmVyc2lvbikgKSApCisKKwlpZiAoY29weV90b191c2VyKGFyZ3AsICZ2ZXJzaW9uLCBzaXplb2YodmVyc2lvbikpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAlyZXR1cm4gMDsKIH0KIAotCi0KLS8qKiAKKy8qKgogICogQ2FsbGVkIHdoZW5ldmVyIGEgcHJvY2VzcyBwZXJmb3JtcyBhbiBpb2N0bCBvbiAvZGV2L2RybS4KICAqCiAgKiBccGFyYW0gaW5vZGUgZGV2aWNlIGlub2RlLgpAQCAtNDU4LDggKzQ1OCw4IEBACiAgKiBMb29rcyB1cCB0aGUgaW9jdGwgZnVuY3Rpb24gaW4gdGhlIDo6aW9jdGxzIHRhYmxlLCBjaGVja2luZyBmb3Igcm9vdAogICogcHJldmlsZWdlcyBpZiBzbyByZXF1aXJlZCwgYW5kIGRpc3BhdGNoZXMgdG8gdGhlIHJlc3BlY3RpdmUgZnVuY3Rpb24uCiAgKi8KLWludCBkcm1faW9jdGwoIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAotCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyApCitpbnQgZHJtX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAorCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCWRybV9maWxlX3QgKnByaXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAJZHJtX2RldmljZV90ICpkZXYgPSBwcml2LT5oZWFkLT5kZXY7CkBAIC00NjgsNDAgKzQ2OCw0MyBAQAogCXVuc2lnbmVkIGludCBuciA9IERSTV9JT0NUTF9OUihjbWQpOwogCWludCByZXRjb2RlID0gLUVJTlZBTDsKIAotCWF0b21pY19pbmMoICZkZXYtPmlvY3RsX2NvdW50ICk7Ci0JYXRvbWljX2luYyggJmRldi0+Y291bnRzW19EUk1fU1RBVF9JT0NUTFNdICk7CisJYXRvbWljX2luYygmZGV2LT5pb2N0bF9jb3VudCk7CisJYXRvbWljX2luYygmZGV2LT5jb3VudHNbX0RSTV9TVEFUX0lPQ1RMU10pOwogCSsrcHJpdi0+aW9jdGxfY291bnQ7CiAKLQlEUk1fREVCVUcoICJwaWQ9JWQsIGNtZD0weCUwMngsIG5yPTB4JTAyeCwgZGV2IDB4JWx4LCBhdXRoPSVkXG4iLAotCQkgICBjdXJyZW50LT5waWQsIGNtZCwgbnIsIChsb25nKW9sZF9lbmNvZGVfZGV2KHByaXYtPmhlYWQtPmRldmljZSksIAotCQkgICBwcml2LT5hdXRoZW50aWNhdGVkICk7Ci0JCisJRFJNX0RFQlVHKCJwaWQ9JWQsIGNtZD0weCUwMngsIG5yPTB4JTAyeCwgZGV2IDB4JWx4LCBhdXRoPSVkXG4iLAorCQkgIGN1cnJlbnQtPnBpZCwgY21kLCBuciwKKwkJICAobG9uZylvbGRfZW5jb2RlX2Rldihwcml2LT5oZWFkLT5kZXZpY2UpLAorCQkgIHByaXYtPmF1dGhlbnRpY2F0ZWQpOworCiAJaWYgKG5yIDwgRFJJVkVSX0lPQ1RMX0NPVU5UKQogCQlpb2N0bCA9ICZkcm1faW9jdGxzW25yXTsKLQllbHNlIGlmICgobnIgPj0gRFJNX0NPTU1BTkRfQkFTRSkgJiYgKG5yIDwgRFJNX0NPTU1BTkRfQkFTRSArIGRldi0+ZHJpdmVyLT5udW1faW9jdGxzKSkKKwllbHNlIGlmICgobnIgPj0gRFJNX0NPTU1BTkRfQkFTRSkKKwkJICYmIChuciA8IERSTV9DT01NQU5EX0JBU0UgKyBkZXYtPmRyaXZlci0+bnVtX2lvY3RscykpCiAJCWlvY3RsID0gJmRldi0+ZHJpdmVyLT5pb2N0bHNbbnIgLSBEUk1fQ09NTUFORF9CQVNFXTsKIAllbHNlCiAJCWdvdG8gZXJyX2kxOwotCQorCiAJZnVuYyA9IGlvY3RsLT5mdW5jOwogCS8qIGlzIHRoZXJlIGEgbG9jYWwgb3ZlcnJpZGU/ICovCiAJaWYgKChuciA9PSBEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX0RNQSkpICYmIGRldi0+ZHJpdmVyLT5kbWFfaW9jdGwpCiAJCWZ1bmMgPSBkZXYtPmRyaXZlci0+ZG1hX2lvY3RsOwotCQotCWlmICggIWZ1bmMgKSB7Ci0JCURSTV9ERUJVRyggIm5vIGZ1bmN0aW9uXG4iICk7CisKKwlpZiAoIWZ1bmMpIHsKKwkJRFJNX0RFQlVHKCJubyBmdW5jdGlvblxuIik7CiAJCXJldGNvZGUgPSAtRUlOVkFMOwotCX0gZWxzZSBpZiAoICggaW9jdGwtPnJvb3Rfb25seSAmJiAhY2FwYWJsZSggQ0FQX1NZU19BRE1JTiApICl8fAotCQkgICAgKCBpb2N0bC0+YXV0aF9uZWVkZWQgJiYgIXByaXYtPmF1dGhlbnRpY2F0ZWQgKSApIHsKKwl9IGVsc2UgaWYgKChpb2N0bC0+cm9vdF9vbmx5ICYmICFjYXBhYmxlKENBUF9TWVNfQURNSU4pKSB8fAorCQkgICAoaW9jdGwtPmF1dGhfbmVlZGVkICYmICFwcml2LT5hdXRoZW50aWNhdGVkKSkgewogCQlyZXRjb2RlID0gLUVBQ0NFUzsKIAl9IGVsc2UgewotCQlyZXRjb2RlID0gZnVuYyggaW5vZGUsIGZpbHAsIGNtZCwgYXJnICk7CisJCXJldGNvZGUgPSBmdW5jKGlub2RlLCBmaWxwLCBjbWQsIGFyZyk7CiAJfQotCQotZXJyX2kxOgotCWF0b21pY19kZWMoICZkZXYtPmlvY3RsX2NvdW50ICk7Ci0JaWYgKHJldGNvZGUpIERSTV9ERUJVRyggInJldCA9ICV4XG4iLCByZXRjb2RlKTsKKworICAgICAgZXJyX2kxOgorCWF0b21pY19kZWMoJmRldi0+aW9jdGxfY291bnQpOworCWlmIChyZXRjb2RlKQorCQlEUk1fREVCVUcoInJldCA9ICV4XG4iLCByZXRjb2RlKTsKIAlyZXR1cm4gcmV0Y29kZTsKIH0KLUVYUE9SVF9TWU1CT0woZHJtX2lvY3RsKTsKIAorRVhQT1JUX1NZTUJPTChkcm1faW9jdGwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9kcm1fZm9wcy5jIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fZm9wcy5jCmluZGV4IGExZjRlOWMuLmUwMTI0YTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX2ZvcHMuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9mb3BzLmMKQEAgLTEsNyArMSw3IEBACiAvKioKLSAqIFxmaWxlIGRybV9mb3BzLmggCisgKiBcZmlsZSBkcm1fZm9wcy5jCiAgKiBGaWxlIG9wZXJhdGlvbnMgZm9yIERSTQotICogCisgKgogICogXGF1dGhvciBSaWNrYXJkIEUuIChSaWspIEZhaXRoIDxmYWl0aEB2YWxpbnV4LmNvbT4KICAqIFxhdXRob3IgRGFyeWxsIFN0cmF1c3MgPGRhcnlsbEB2YWxpbnV4LmNvbT4KICAqIFxhdXRob3IgR2FyZXRoIEh1Z2hlcyA8Z2FyZXRoQHZhbGludXguY29tPgpAQCAtMzcsNDkgKzM3LDQ4IEBACiAjaW5jbHVkZSAiZHJtUC5oIgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KIAotc3RhdGljIGludCBkcm1fb3Blbl9oZWxwZXIoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsIGRybV9kZXZpY2VfdCAqZGV2KTsKK3N0YXRpYyBpbnQgZHJtX29wZW5faGVscGVyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAorCQkJICAgZHJtX2RldmljZV90ICogZGV2KTsKIAotc3RhdGljIGludCBkcm1fc2V0dXAoIGRybV9kZXZpY2VfdCAqZGV2ICkKK3N0YXRpYyBpbnQgZHJtX3NldHVwKGRybV9kZXZpY2VfdCAqIGRldikKIHsKIAlpbnQgaTsKIAlpbnQgcmV0OwogCi0JaWYgKGRldi0+ZHJpdmVyLT5wcmVzZXR1cCkKLQl7Ci0JCXJldD1kZXYtPmRyaXZlci0+cHJlc2V0dXAoZGV2KTsKLQkJaWYgKHJldCE9MCkgCisJaWYgKGRldi0+ZHJpdmVyLT5wcmVzZXR1cCkgeworCQlyZXQgPSBkZXYtPmRyaXZlci0+cHJlc2V0dXAoZGV2KTsKKwkJaWYgKHJldCAhPSAwKQogCQkJcmV0dXJuIHJldDsKIAl9CiAKLQlhdG9taWNfc2V0KCAmZGV2LT5pb2N0bF9jb3VudCwgMCApOwotCWF0b21pY19zZXQoICZkZXYtPnZtYV9jb3VudCwgMCApOworCWF0b21pY19zZXQoJmRldi0+aW9jdGxfY291bnQsIDApOworCWF0b21pY19zZXQoJmRldi0+dm1hX2NvdW50LCAwKTsKIAlkZXYtPmJ1Zl91c2UgPSAwOwotCWF0b21pY19zZXQoICZkZXYtPmJ1Zl9hbGxvYywgMCApOworCWF0b21pY19zZXQoJmRldi0+YnVmX2FsbG9jLCAwKTsKIAotCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX0hBVkVfRE1BKSkKLQl7Ci0JCWkgPSBkcm1fZG1hX3NldHVwKCBkZXYgKTsKLQkJaWYgKCBpIDwgMCApCisJaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfSEFWRV9ETUEpKSB7CisJCWkgPSBkcm1fZG1hX3NldHVwKGRldik7CisJCWlmIChpIDwgMCkKIAkJCXJldHVybiBpOwogCX0KIAotCWZvciAoIGkgPSAwIDsgaSA8IERSTV9BUlJBWV9TSVpFKGRldi0+Y291bnRzKSA7IGkrKyApCi0JCWF0b21pY19zZXQoICZkZXYtPmNvdW50c1tpXSwgMCApOworCWZvciAoaSA9IDA7IGkgPCBEUk1fQVJSQVlfU0laRShkZXYtPmNvdW50cyk7IGkrKykKKwkJYXRvbWljX3NldCgmZGV2LT5jb3VudHNbaV0sIDApOwogCi0JZm9yICggaSA9IDAgOyBpIDwgRFJNX0hBU0hfU0laRSA7IGkrKyApIHsKKwlmb3IgKGkgPSAwOyBpIDwgRFJNX0hBU0hfU0laRTsgaSsrKSB7CiAJCWRldi0+bWFnaWNsaXN0W2ldLmhlYWQgPSBOVUxMOwogCQlkZXYtPm1hZ2ljbGlzdFtpXS50YWlsID0gTlVMTDsKIAl9CiAKLQlkZXYtPmN0eGxpc3QgPSBkcm1fYWxsb2Moc2l6ZW9mKCpkZXYtPmN0eGxpc3QpLAotCQkJCSAgRFJNX01FTV9DVFhMSVNUKTsKLQlpZihkZXYtPmN0eGxpc3QgPT0gTlVMTCkgcmV0dXJuIC1FTk9NRU07CisJZGV2LT5jdHhsaXN0ID0gZHJtX2FsbG9jKHNpemVvZigqZGV2LT5jdHhsaXN0KSwgRFJNX01FTV9DVFhMSVNUKTsKKwlpZiAoZGV2LT5jdHhsaXN0ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOwogCW1lbXNldChkZXYtPmN0eGxpc3QsIDAsIHNpemVvZigqZGV2LT5jdHhsaXN0KSk7CiAJSU5JVF9MSVNUX0hFQUQoJmRldi0+Y3R4bGlzdC0+aGVhZCk7CiAKIAlkZXYtPnZtYWxpc3QgPSBOVUxMOwogCWRldi0+c2lnZGF0YS5sb2NrID0gZGV2LT5sb2NrLmh3X2xvY2sgPSBOVUxMOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoICZkZXYtPmxvY2subG9ja19xdWV1ZSApOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRldi0+bG9jay5sb2NrX3F1ZXVlKTsKIAlkZXYtPnF1ZXVlX2NvdW50ID0gMDsKIAlkZXYtPnF1ZXVlX3Jlc2VydmVkID0gMDsKIAlkZXYtPnF1ZXVlX3Nsb3RzID0gMDsKQEAgLTkxLDcgKzkwLDcgQEAKIAlkZXYtPmxhc3RfY29udGV4dCA9IDA7CiAJZGV2LT5sYXN0X3N3aXRjaCA9IDA7CiAJZGV2LT5sYXN0X2NoZWNrZWQgPSAwOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoICZkZXYtPmNvbnRleHRfd2FpdCApOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRldi0+Y29udGV4dF93YWl0KTsKIAlkZXYtPmlmX3ZlcnNpb24gPSAwOwogCiAJZGV2LT5jdHhfc3RhcnQgPSAwOwpAQCAtMTAxLDE0ICsxMDAsMTQgQEAKIAlkZXYtPmJ1Zl93cCA9IGRldi0+YnVmOwogCWRldi0+YnVmX2VuZCA9IGRldi0+YnVmICsgRFJNX0JTWjsKIAlkZXYtPmJ1Zl9hc3luYyA9IE5VTEw7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCggJmRldi0+YnVmX3JlYWRlcnMgKTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCAmZGV2LT5idWZfd3JpdGVycyApOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRldi0+YnVmX3JlYWRlcnMpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRldi0+YnVmX3dyaXRlcnMpOwogCi0JRFJNX0RFQlVHKCAiXG4iICk7CisJRFJNX0RFQlVHKCJcbiIpOwogCiAJLyoKIAkgKiBUaGUga2VybmVsJ3MgY29udGV4dCBjb3VsZCBiZSBjcmVhdGVkIGhlcmUsIGJ1dCBpcyBub3cgY3JlYXRlZAotCSAqIGluIGRybV9kbWFfZW5xdWV1ZS4JVGhpcyBpcyBtb3JlIHJlc291cmNlLWVmZmljaWVudCBmb3IKKwkgKiBpbiBkcm1fZG1hX2VucXVldWUuICBUaGlzIGlzIG1vcmUgcmVzb3VyY2UtZWZmaWNpZW50IGZvcgogCSAqIGhhcmR3YXJlIHRoYXQgZG9lcyBub3QgZG8gRE1BLCBidXQgbWF5IG1lYW4gdGhhdAogCSAqIGRybV9zZWxlY3RfcXVldWUgZmFpbHMgYmV0d2VlbiB0aGUgdGltZSB0aGUgaW50ZXJydXB0IGlzCiAJICogaW5pdGlhbGl6ZWQgYW5kIHRoZSB0aW1lIHRoZSBxdWV1ZXMgYXJlIGluaXRpYWxpemVkLgpAQCAtMTIxLDcgKzEyMCw3IEBACiAKIC8qKgogICogT3BlbiBmaWxlLgotICogCisgKgogICogXHBhcmFtIGlub2RlIGRldmljZSBpbm9kZQogICogXHBhcmFtIGZpbHAgZmlsZSBwb2ludGVyLgogICogXHJldHVybiB6ZXJvIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBudW1iZXIgb24gZmFpbHVyZS4KQEAgLTEzMCw3ICsxMjksNyBAQAogICogaW5jcmVtZW50cyB0aGUgZGV2aWNlIG9wZW4gY291bnQuIElmIHRoZSBvcGVuIGNvdW50IHdhcyBwcmV2aW91cyBhdCB6ZXJvLAogICogaS5lLiwgaXQncyB0aGUgZmlyc3QgdGhhdCB0aGUgZGV2aWNlIGlzIG9wZW4sIHRoZW4gY2FsbHMgc2V0dXAoKS4KICAqLwotaW50IGRybV9vcGVuKCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCApCitpbnQgZHJtX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJZHJtX2RldmljZV90ICpkZXYgPSBOVUxMOwogCWludCBtaW5vciA9IGltaW5vcihpbm9kZSk7CkBAIC0xMzgsMjYgKzEzNywyNyBAQAogCiAJaWYgKCEoKG1pbm9yID49IDApICYmIChtaW5vciA8IGRybV9jYXJkc19saW1pdCkpKQogCQlyZXR1cm4gLUVOT0RFVjsKLQkJCisKIAlpZiAoIWRybV9oZWFkc1ttaW5vcl0pCiAJCXJldHVybiAtRU5PREVWOwogCiAJaWYgKCEoZGV2ID0gZHJtX2hlYWRzW21pbm9yXS0+ZGV2KSkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JCi0JcmV0Y29kZSA9IGRybV9vcGVuX2hlbHBlciggaW5vZGUsIGZpbHAsIGRldiApOwotCWlmICggIXJldGNvZGUgKSB7Ci0JCWF0b21pY19pbmMoICZkZXYtPmNvdW50c1tfRFJNX1NUQVRfT1BFTlNdICk7Ci0JCXNwaW5fbG9jayggJmRldi0+Y291bnRfbG9jayApOwotCQlpZiAoICFkZXYtPm9wZW5fY291bnQrKyApIHsKLQkJCXNwaW5fdW5sb2NrKCAmZGV2LT5jb3VudF9sb2NrICk7Ci0JCQlyZXR1cm4gZHJtX3NldHVwKCBkZXYgKTsKKworCXJldGNvZGUgPSBkcm1fb3Blbl9oZWxwZXIoaW5vZGUsIGZpbHAsIGRldik7CisJaWYgKCFyZXRjb2RlKSB7CisJCWF0b21pY19pbmMoJmRldi0+Y291bnRzW19EUk1fU1RBVF9PUEVOU10pOworCQlzcGluX2xvY2soJmRldi0+Y291bnRfbG9jayk7CisJCWlmICghZGV2LT5vcGVuX2NvdW50KyspIHsKKwkJCXNwaW5fdW5sb2NrKCZkZXYtPmNvdW50X2xvY2spOworCQkJcmV0dXJuIGRybV9zZXR1cChkZXYpOwogCQl9Ci0JCXNwaW5fdW5sb2NrKCAmZGV2LT5jb3VudF9sb2NrICk7CisJCXNwaW5fdW5sb2NrKCZkZXYtPmNvdW50X2xvY2spOwogCX0KIAogCXJldHVybiByZXRjb2RlOwogfQorCiBFWFBPUlRfU1lNQk9MKGRybV9vcGVuKTsKIAogLyoqCkBAIC0xNzIsNyArMTcyLDcgQEAKICAqIGRhdGEgZnJvbSBpdHMgbGlzdCBhbmQgZnJlZSBpdC4gRGVjcmVhc2VzIHRoZSBvcGVuIGNvdW50IGFuZCBpZiBpdCByZWFjaGVzCiAgKiB6ZXJvIGNhbGxzIHRha2Vkb3duKCkuCiAgKi8KLWludCBkcm1fcmVsZWFzZSggc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAgKQoraW50IGRybV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogewogCWRybV9maWxlX3QgKnByaXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAJZHJtX2RldmljZV90ICpkZXY7CkBAIC0xODEsNyArMTgxLDcgQEAKIAlsb2NrX2tlcm5lbCgpOwogCWRldiA9IHByaXYtPmhlYWQtPmRldjsKIAotCURSTV9ERUJVRyggIm9wZW5fY291bnQgPSAlZFxuIiwgZGV2LT5vcGVuX2NvdW50ICk7CisJRFJNX0RFQlVHKCJvcGVuX2NvdW50ID0gJWRcbiIsIGRldi0+b3Blbl9jb3VudCk7CiAKIAlpZiAoZGV2LT5kcml2ZXItPnByZXJlbGVhc2UpCiAJCWRldi0+ZHJpdmVyLT5wcmVyZWxlYXNlKGRldiwgZmlscCk7CkBAIC0xOTAsMTk0ICsxOTAsMTk5IEBACiAJICogQmVnaW4gaW5saW5lIGRybV9yZWxlYXNlCiAJICovCiAKLQlEUk1fREVCVUcoICJwaWQgPSAlZCwgZGV2aWNlID0gMHglbHgsIG9wZW5fY291bnQgPSAlZFxuIiwKLQkJICAgY3VycmVudC0+cGlkLCAobG9uZylvbGRfZW5jb2RlX2Rldihwcml2LT5oZWFkLT5kZXZpY2UpLCBkZXYtPm9wZW5fY291bnQgKTsKKwlEUk1fREVCVUcoInBpZCA9ICVkLCBkZXZpY2UgPSAweCVseCwgb3Blbl9jb3VudCA9ICVkXG4iLAorCQkgIGN1cnJlbnQtPnBpZCwgKGxvbmcpb2xkX2VuY29kZV9kZXYocHJpdi0+aGVhZC0+ZGV2aWNlKSwKKwkJICBkZXYtPm9wZW5fY291bnQpOwogCi0JaWYgKCBwcml2LT5sb2NrX2NvdW50ICYmIGRldi0+bG9jay5od19sb2NrICYmCi0JICAgICBfRFJNX0xPQ0tfSVNfSEVMRChkZXYtPmxvY2suaHdfbG9jay0+bG9jaykgJiYKLQkgICAgIGRldi0+bG9jay5maWxwID09IGZpbHAgKSB7Ci0JCURSTV9ERUJVRyggIkZpbGUgJXAgcmVsZWFzZWQsIGZyZWVpbmcgbG9jayBmb3IgY29udGV4dCAlZFxuIiwKLQkJCWZpbHAsCi0JCQlfRFJNX0xPQ0tJTkdfQ09OVEVYVChkZXYtPmxvY2suaHdfbG9jay0+bG9jaykgKTsKLQkJCisJaWYgKHByaXYtPmxvY2tfY291bnQgJiYgZGV2LT5sb2NrLmh3X2xvY2sgJiYKKwkgICAgX0RSTV9MT0NLX0lTX0hFTEQoZGV2LT5sb2NrLmh3X2xvY2stPmxvY2spICYmCisJICAgIGRldi0+bG9jay5maWxwID09IGZpbHApIHsKKwkJRFJNX0RFQlVHKCJGaWxlICVwIHJlbGVhc2VkLCBmcmVlaW5nIGxvY2sgZm9yIGNvbnRleHQgJWRcbiIsCisJCQkgIGZpbHAsIF9EUk1fTE9DS0lOR19DT05URVhUKGRldi0+bG9jay5od19sb2NrLT5sb2NrKSk7CisKIAkJaWYgKGRldi0+ZHJpdmVyLT5yZWxlYXNlKQogCQkJZGV2LT5kcml2ZXItPnJlbGVhc2UoZGV2LCBmaWxwKTsKIAotCQlkcm1fbG9ja19mcmVlKCBkZXYsICZkZXYtPmxvY2suaHdfbG9jay0+bG9jaywKLQkJCQlfRFJNX0xPQ0tJTkdfQ09OVEVYVChkZXYtPmxvY2suaHdfbG9jay0+bG9jaykgKTsKKwkJZHJtX2xvY2tfZnJlZShkZXYsICZkZXYtPmxvY2suaHdfbG9jay0+bG9jaywKKwkJCSAgICAgIF9EUk1fTE9DS0lOR19DT05URVhUKGRldi0+bG9jay5od19sb2NrLT5sb2NrKSk7CiAKLQkJCQkvKiBGSVhNRTogbWF5IHJlcXVpcmUgaGVhdnktaGFuZGVkIHJlc2V0IG9mCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlIGF0IHRoaXMgcG9pbnQsIHBvc3NpYmx5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NlZCB2aWEgYSBjYWxsYmFjayB0byB0aGUgWAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIuICovCi0JfQotCWVsc2UgaWYgKCBkZXYtPmRyaXZlci0+cmVsZWFzZSAmJiBwcml2LT5sb2NrX2NvdW50ICYmIGRldi0+bG9jay5od19sb2NrICkgeworCQkvKiBGSVhNRTogbWF5IHJlcXVpcmUgaGVhdnktaGFuZGVkIHJlc2V0IG9mCisJCSAgIGhhcmR3YXJlIGF0IHRoaXMgcG9pbnQsIHBvc3NpYmx5CisJCSAgIHByb2Nlc3NlZCB2aWEgYSBjYWxsYmFjayB0byB0aGUgWAorCQkgICBzZXJ2ZXIuICovCisJfSBlbHNlIGlmIChkZXYtPmRyaXZlci0+cmVsZWFzZSAmJiBwcml2LT5sb2NrX2NvdW50CisJCSAgICYmIGRldi0+bG9jay5od19sb2NrKSB7CiAJCS8qIFRoZSBsb2NrIGlzIHJlcXVpcmVkIHRvIHJlY2xhaW0gYnVmZmVycyAqLwotCQlERUNMQVJFX1dBSVRRVUVVRSggZW50cnksIGN1cnJlbnQgKTsKKwkJREVDTEFSRV9XQUlUUVVFVUUoZW50cnksIGN1cnJlbnQpOwogCi0JCWFkZF93YWl0X3F1ZXVlKCAmZGV2LT5sb2NrLmxvY2tfcXVldWUsICZlbnRyeSApOworCQlhZGRfd2FpdF9xdWV1ZSgmZGV2LT5sb2NrLmxvY2tfcXVldWUsICZlbnRyeSk7CiAJCWZvciAoOzspIHsKIAkJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJCWlmICggIWRldi0+bG9jay5od19sb2NrICkgeworCQkJaWYgKCFkZXYtPmxvY2suaHdfbG9jaykgewogCQkJCS8qIERldmljZSBoYXMgYmVlbiB1bnJlZ2lzdGVyZWQgKi8KIAkJCQlyZXRjb2RlID0gLUVJTlRSOwogCQkJCWJyZWFrOwogCQkJfQotCQkJaWYgKCBkcm1fbG9ja190YWtlKCAmZGV2LT5sb2NrLmh3X2xvY2stPmxvY2ssCi0JCQkJCSAgICAgRFJNX0tFUk5FTF9DT05URVhUICkgKSB7Ci0JCQkJZGV2LT5sb2NrLmZpbHAJICAgID0gZmlscDsKKwkJCWlmIChkcm1fbG9ja190YWtlKCZkZXYtPmxvY2suaHdfbG9jay0+bG9jaywKKwkJCQkJICBEUk1fS0VSTkVMX0NPTlRFWFQpKSB7CisJCQkJZGV2LT5sb2NrLmZpbHAgPSBmaWxwOwogCQkJCWRldi0+bG9jay5sb2NrX3RpbWUgPSBqaWZmaWVzOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdG9taWNfaW5jKCAmZGV2LT5jb3VudHNbX0RSTV9TVEFUX0xPQ0tTXSApOworCQkJCWF0b21pY19pbmMoJmRldi0+Y291bnRzW19EUk1fU1RBVF9MT0NLU10pOwogCQkJCWJyZWFrOwkvKiBHb3QgbG9jayAqLwogCQkJfQotCQkJCS8qIENvbnRlbnRpb24gKi8KKwkJCS8qIENvbnRlbnRpb24gKi8KIAkJCXNjaGVkdWxlKCk7Ci0JCQlpZiAoIHNpZ25hbF9wZW5kaW5nKCBjdXJyZW50ICkgKSB7CisJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKIAkJCQlyZXRjb2RlID0gLUVSRVNUQVJUU1lTOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CiAJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQkJcmVtb3ZlX3dhaXRfcXVldWUoICZkZXYtPmxvY2subG9ja19xdWV1ZSwgJmVudHJ5ICk7Ci0JCWlmKCAhcmV0Y29kZSApIHsKKwkJcmVtb3ZlX3dhaXRfcXVldWUoJmRldi0+bG9jay5sb2NrX3F1ZXVlLCAmZW50cnkpOworCQlpZiAoIXJldGNvZGUpIHsKIAkJCWlmIChkZXYtPmRyaXZlci0+cmVsZWFzZSkKIAkJCQlkZXYtPmRyaXZlci0+cmVsZWFzZShkZXYsIGZpbHApOwotCQkJZHJtX2xvY2tfZnJlZSggZGV2LCAmZGV2LT5sb2NrLmh3X2xvY2stPmxvY2ssCi0JCQkJCURSTV9LRVJORUxfQ09OVEVYVCApOworCQkJZHJtX2xvY2tfZnJlZShkZXYsICZkZXYtPmxvY2suaHdfbG9jay0+bG9jaywKKwkJCQkgICAgICBEUk1fS0VSTkVMX0NPTlRFWFQpOwogCQl9CiAJfQotCQotCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX0hBVkVfRE1BKSAmJiAhZGV2LT5kcml2ZXItPnJlbGVhc2UpCi0JeworCisJaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfSEFWRV9ETUEpCisJICAgICYmICFkZXYtPmRyaXZlci0+cmVsZWFzZSkgewogCQlkZXYtPmRyaXZlci0+cmVjbGFpbV9idWZmZXJzKGRldiwgZmlscCk7CiAJfQogCi0JZHJtX2Zhc3luYyggLTEsIGZpbHAsIDAgKTsKKwlkcm1fZmFzeW5jKC0xLCBmaWxwLCAwKTsKIAotCWRvd24oICZkZXYtPmN0eGxpc3Rfc2VtICk7Ci0JaWYgKCBkZXYtPmN0eGxpc3QgJiYgKCFsaXN0X2VtcHR5KCZkZXYtPmN0eGxpc3QtPmhlYWQpKSkgeworCWRvd24oJmRldi0+Y3R4bGlzdF9zZW0pOworCWlmIChkZXYtPmN0eGxpc3QgJiYgKCFsaXN0X2VtcHR5KCZkZXYtPmN0eGxpc3QtPmhlYWQpKSkgewogCQlkcm1fY3R4X2xpc3RfdCAqcG9zLCAqbjsKIAotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoIHBvcywgbiwgJmRldi0+Y3R4bGlzdC0+aGVhZCwgaGVhZCApIHsKLQkJCWlmICggcG9zLT50YWcgPT0gcHJpdiAmJgotCQkJICAgICBwb3MtPmhhbmRsZSAhPSBEUk1fS0VSTkVMX0NPTlRFWFQgKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3MsIG4sICZkZXYtPmN0eGxpc3QtPmhlYWQsIGhlYWQpIHsKKwkJCWlmIChwb3MtPnRhZyA9PSBwcml2ICYmCisJCQkgICAgcG9zLT5oYW5kbGUgIT0gRFJNX0tFUk5FTF9DT05URVhUKSB7CiAJCQkJaWYgKGRldi0+ZHJpdmVyLT5jb250ZXh0X2R0b3IpCi0JCQkJCWRldi0+ZHJpdmVyLT5jb250ZXh0X2R0b3IoZGV2LCBwb3MtPmhhbmRsZSk7CisJCQkJCWRldi0+ZHJpdmVyLT5jb250ZXh0X2R0b3IoZGV2LAorCQkJCQkJCQkgIHBvcy0+aGFuZGxlKTsKIAotCQkJCWRybV9jdHhiaXRtYXBfZnJlZSggZGV2LCBwb3MtPmhhbmRsZSApOworCQkJCWRybV9jdHhiaXRtYXBfZnJlZShkZXYsIHBvcy0+aGFuZGxlKTsKIAotCQkJCWxpc3RfZGVsKCAmcG9zLT5oZWFkICk7Ci0JCQkJZHJtX2ZyZWUoIHBvcywgc2l6ZW9mKCpwb3MpLCBEUk1fTUVNX0NUWExJU1QgKTsKKwkJCQlsaXN0X2RlbCgmcG9zLT5oZWFkKTsKKwkJCQlkcm1fZnJlZShwb3MsIHNpemVvZigqcG9zKSwgRFJNX01FTV9DVFhMSVNUKTsKIAkJCQktLWRldi0+Y3R4X2NvdW50OwogCQkJfQogCQl9CiAJfQotCXVwKCAmZGV2LT5jdHhsaXN0X3NlbSApOworCXVwKCZkZXYtPmN0eGxpc3Rfc2VtKTsKIAotCWRvd24oICZkZXYtPnN0cnVjdF9zZW0gKTsKLQlpZiAoIHByaXYtPnJlbW92ZV9hdXRoX29uX2Nsb3NlID09IDEgKSB7CisJZG93bigmZGV2LT5zdHJ1Y3Rfc2VtKTsKKwlpZiAocHJpdi0+cmVtb3ZlX2F1dGhfb25fY2xvc2UgPT0gMSkgewogCQlkcm1fZmlsZV90ICp0ZW1wID0gZGV2LT5maWxlX2ZpcnN0OwotCQl3aGlsZSAoIHRlbXAgKSB7CisJCXdoaWxlICh0ZW1wKSB7CiAJCQl0ZW1wLT5hdXRoZW50aWNhdGVkID0gMDsKIAkJCXRlbXAgPSB0ZW1wLT5uZXh0OwogCQl9CiAJfQotCWlmICggcHJpdi0+cHJldiApIHsKKwlpZiAocHJpdi0+cHJldikgewogCQlwcml2LT5wcmV2LT5uZXh0ID0gcHJpdi0+bmV4dDsKIAl9IGVsc2UgewotCQlkZXYtPmZpbGVfZmlyc3QJID0gcHJpdi0+bmV4dDsKKwkJZGV2LT5maWxlX2ZpcnN0ID0gcHJpdi0+bmV4dDsKIAl9Ci0JaWYgKCBwcml2LT5uZXh0ICkgeworCWlmIChwcml2LT5uZXh0KSB7CiAJCXByaXYtPm5leHQtPnByZXYgPSBwcml2LT5wcmV2OwogCX0gZWxzZSB7Ci0JCWRldi0+ZmlsZV9sYXN0CSA9IHByaXYtPnByZXY7CisJCWRldi0+ZmlsZV9sYXN0ID0gcHJpdi0+cHJldjsKIAl9Ci0JdXAoICZkZXYtPnN0cnVjdF9zZW0gKTsKLQkKKwl1cCgmZGV2LT5zdHJ1Y3Rfc2VtKTsKKwogCWlmIChkZXYtPmRyaXZlci0+ZnJlZV9maWxwX3ByaXYpCiAJCWRldi0+ZHJpdmVyLT5mcmVlX2ZpbHBfcHJpdihkZXYsIHByaXYpOwogCi0JZHJtX2ZyZWUoIHByaXYsIHNpemVvZigqcHJpdiksIERSTV9NRU1fRklMRVMgKTsKKwlkcm1fZnJlZShwcml2LCBzaXplb2YoKnByaXYpLCBEUk1fTUVNX0ZJTEVTKTsKIAogCS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAJICogRW5kIGlubGluZSBkcm1fcmVsZWFzZQogCSAqLwogCi0JYXRvbWljX2luYyggJmRldi0+Y291bnRzW19EUk1fU1RBVF9DTE9TRVNdICk7Ci0Jc3Bpbl9sb2NrKCAmZGV2LT5jb3VudF9sb2NrICk7Ci0JaWYgKCAhLS1kZXYtPm9wZW5fY291bnQgKSB7Ci0JCWlmICggYXRvbWljX3JlYWQoICZkZXYtPmlvY3RsX2NvdW50ICkgfHwgZGV2LT5ibG9ja2VkICkgewotCQkJRFJNX0VSUk9SKCAiRGV2aWNlIGJ1c3k6ICVkICVkXG4iLAotCQkJCSAgIGF0b21pY19yZWFkKCAmZGV2LT5pb2N0bF9jb3VudCApLAotCQkJCSAgIGRldi0+YmxvY2tlZCApOwotCQkJc3Bpbl91bmxvY2soICZkZXYtPmNvdW50X2xvY2sgKTsKKwlhdG9taWNfaW5jKCZkZXYtPmNvdW50c1tfRFJNX1NUQVRfQ0xPU0VTXSk7CisJc3Bpbl9sb2NrKCZkZXYtPmNvdW50X2xvY2spOworCWlmICghLS1kZXYtPm9wZW5fY291bnQpIHsKKwkJaWYgKGF0b21pY19yZWFkKCZkZXYtPmlvY3RsX2NvdW50KSB8fCBkZXYtPmJsb2NrZWQpIHsKKwkJCURSTV9FUlJPUigiRGV2aWNlIGJ1c3k6ICVkICVkXG4iLAorCQkJCSAgYXRvbWljX3JlYWQoJmRldi0+aW9jdGxfY291bnQpLCBkZXYtPmJsb2NrZWQpOworCQkJc3Bpbl91bmxvY2soJmRldi0+Y291bnRfbG9jayk7CiAJCQl1bmxvY2tfa2VybmVsKCk7CiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9Ci0JCXNwaW5fdW5sb2NrKCAmZGV2LT5jb3VudF9sb2NrICk7CisJCXNwaW5fdW5sb2NrKCZkZXYtPmNvdW50X2xvY2spOwogCQl1bmxvY2tfa2VybmVsKCk7Ci0JCXJldHVybiBkcm1fdGFrZWRvd24oIGRldiApOworCQlyZXR1cm4gZHJtX3Rha2Vkb3duKGRldik7CiAJfQotCXNwaW5fdW5sb2NrKCAmZGV2LT5jb3VudF9sb2NrICk7CisJc3Bpbl91bmxvY2soJmRldi0+Y291bnRfbG9jayk7CiAKIAl1bmxvY2tfa2VybmVsKCk7CiAKIAlyZXR1cm4gcmV0Y29kZTsKIH0KKwogRVhQT1JUX1NZTUJPTChkcm1fcmVsZWFzZSk7CiAKIC8qKgotICogQ2FsbGVkIHdoZW5ldmVyIGEgcHJvY2VzcyBvcGVucyAvZGV2L2RybS4gCisgKiBDYWxsZWQgd2hlbmV2ZXIgYSBwcm9jZXNzIG9wZW5zIC9kZXYvZHJtLgogICoKICAqIFxwYXJhbSBpbm9kZSBkZXZpY2UgaW5vZGUuCiAgKiBccGFyYW0gZmlscCBmaWxlIHBvaW50ZXIuCiAgKiBccGFyYW0gZGV2IGRldmljZS4KICAqIFxyZXR1cm4gemVybyBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgbnVtYmVyIG9uIGZhaWx1cmUuCi0gKiAKKyAqCiAgKiBDcmVhdGVzIGFuZCBpbml0aWFsaXplcyBhIGRybV9maWxlIHN0cnVjdHVyZSBmb3IgdGhlIGZpbGUgcHJpdmF0ZSBkYXRhIGluIFxwCiAgKiBmaWxwIGFuZCBhZGQgaXQgaW50byB0aGUgZG91YmxlIGxpbmtlZCBsaXN0IGluIFxwIGRldi4KICAqLwotc3RhdGljIGludCBkcm1fb3Blbl9oZWxwZXIoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsIGRybV9kZXZpY2VfdCAqZGV2KQorc3RhdGljIGludCBkcm1fb3Blbl9oZWxwZXIoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCisJCQkgICBkcm1fZGV2aWNlX3QgKiBkZXYpCiB7Ci0JaW50CSAgICAgbWlub3IgPSBpbWlub3IoaW5vZGUpOwotCWRybV9maWxlX3QgICAqcHJpdjsKKwlpbnQgbWlub3IgPSBpbWlub3IoaW5vZGUpOworCWRybV9maWxlX3QgKnByaXY7CiAJaW50IHJldDsKIAotCWlmIChmaWxwLT5mX2ZsYWdzICYgT19FWENMKSAgIHJldHVybiAtRUJVU1k7IC8qIE5vIGV4Y2x1c2l2ZSBvcGVucyAqLwotCWlmICghZHJtX2NwdV92YWxpZCgpKSAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisJaWYgKGZpbHAtPmZfZmxhZ3MgJiBPX0VYQ0wpCisJCXJldHVybiAtRUJVU1k7CS8qIE5vIGV4Y2x1c2l2ZSBvcGVucyAqLworCWlmICghZHJtX2NwdV92YWxpZCgpKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCURSTV9ERUJVRygicGlkID0gJWQsIG1pbm9yID0gJWRcbiIsIGN1cnJlbnQtPnBpZCwgbWlub3IpOwogCi0JcHJpdgkJICAgID0gZHJtX2FsbG9jKHNpemVvZigqcHJpdiksIERSTV9NRU1fRklMRVMpOwotCWlmKCFwcml2KSByZXR1cm4gLUVOT01FTTsKKwlwcml2ID0gZHJtX2FsbG9jKHNpemVvZigqcHJpdiksIERSTV9NRU1fRklMRVMpOworCWlmICghcHJpdikKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAltZW1zZXQocHJpdiwgMCwgc2l6ZW9mKCpwcml2KSk7Ci0JZmlscC0+cHJpdmF0ZV9kYXRhICA9IHByaXY7Ci0JcHJpdi0+dWlkCSAgICA9IGN1cnJlbnQtPmV1aWQ7Ci0JcHJpdi0+cGlkCSAgICA9IGN1cnJlbnQtPnBpZDsKLQlwcml2LT5taW5vcgkgICAgPSBtaW5vcjsKLQlwcml2LT5oZWFkICAgICAgICAgID0gZHJtX2hlYWRzW21pbm9yXTsKLQlwcml2LT5pb2N0bF9jb3VudCAgID0gMDsKKwlmaWxwLT5wcml2YXRlX2RhdGEgPSBwcml2OworCXByaXYtPnVpZCA9IGN1cnJlbnQtPmV1aWQ7CisJcHJpdi0+cGlkID0gY3VycmVudC0+cGlkOworCXByaXYtPm1pbm9yID0gbWlub3I7CisJcHJpdi0+aGVhZCA9IGRybV9oZWFkc1ttaW5vcl07CisJcHJpdi0+aW9jdGxfY291bnQgPSAwOwogCXByaXYtPmF1dGhlbnRpY2F0ZWQgPSBjYXBhYmxlKENBUF9TWVNfQURNSU4pOwotCXByaXYtPmxvY2tfY291bnQgICAgPSAwOworCXByaXYtPmxvY2tfY291bnQgPSAwOwogCiAJaWYgKGRldi0+ZHJpdmVyLT5vcGVuX2hlbHBlcikgewotCQlyZXQ9ZGV2LT5kcml2ZXItPm9wZW5faGVscGVyKGRldiwgcHJpdik7CisJCXJldCA9IGRldi0+ZHJpdmVyLT5vcGVuX2hlbHBlcihkZXYsIHByaXYpOwogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gb3V0X2ZyZWU7CiAJfQogCiAJZG93bigmZGV2LT5zdHJ1Y3Rfc2VtKTsKIAlpZiAoIWRldi0+ZmlsZV9sYXN0KSB7Ci0JCXByaXYtPm5leHQJPSBOVUxMOwotCQlwcml2LT5wcmV2CT0gTlVMTDsKKwkJcHJpdi0+bmV4dCA9IE5VTEw7CisJCXByaXYtPnByZXYgPSBOVUxMOwogCQlkZXYtPmZpbGVfZmlyc3QgPSBwcml2OwotCQlkZXYtPmZpbGVfbGFzdAk9IHByaXY7CisJCWRldi0+ZmlsZV9sYXN0ID0gcHJpdjsKIAl9IGVsc2UgewotCQlwcml2LT5uZXh0CSAgICAgPSBOVUxMOwotCQlwcml2LT5wcmV2CSAgICAgPSBkZXYtPmZpbGVfbGFzdDsKKwkJcHJpdi0+bmV4dCA9IE5VTEw7CisJCXByaXYtPnByZXYgPSBkZXYtPmZpbGVfbGFzdDsKIAkJZGV2LT5maWxlX2xhc3QtPm5leHQgPSBwcml2OwotCQlkZXYtPmZpbGVfbGFzdAkgICAgID0gcHJpdjsKKwkJZGV2LT5maWxlX2xhc3QgPSBwcml2OwogCX0KIAl1cCgmZGV2LT5zdHJ1Y3Rfc2VtKTsKIApAQCAtMzk0LDQyICszOTksNDggQEAKIAkJfQogCQlpZiAoIWRldi0+aG9zZSkgewogCQkJc3RydWN0IHBjaV9idXMgKmIgPSBwY2lfYnVzX2IocGNpX3Jvb3RfYnVzZXMubmV4dCk7Ci0JCQlpZiAoYikgZGV2LT5ob3NlID0gYi0+c3lzZGF0YTsKKwkJCWlmIChiKQorCQkJCWRldi0+aG9zZSA9IGItPnN5c2RhdGE7CiAJCX0KIAl9CiAjZW5kaWYKIAogCXJldHVybiAwOwotb3V0X2ZyZWU6CisgICAgICBvdXRfZnJlZToKIAlkcm1fZnJlZShwcml2LCBzaXplb2YoKnByaXYpLCBEUk1fTUVNX0ZJTEVTKTsKLQlmaWxwLT5wcml2YXRlX2RhdGE9TlVMTDsKKwlmaWxwLT5wcml2YXRlX2RhdGEgPSBOVUxMOwogCXJldHVybiByZXQ7CiB9CiAKIC8qKiBOby1vcC4gKi8KIGludCBkcm1fZmx1c2goc3RydWN0IGZpbGUgKmZpbHApCiB7Ci0JZHJtX2ZpbGVfdCAgICAqcHJpdiAgID0gZmlscC0+cHJpdmF0ZV9kYXRhOwotCWRybV9kZXZpY2VfdCAgKmRldiAgICA9IHByaXYtPmhlYWQtPmRldjsKKwlkcm1fZmlsZV90ICpwcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCWRybV9kZXZpY2VfdCAqZGV2ID0gcHJpdi0+aGVhZC0+ZGV2OwogCiAJRFJNX0RFQlVHKCJwaWQgPSAlZCwgZGV2aWNlID0gMHglbHgsIG9wZW5fY291bnQgPSAlZFxuIiwKLQkJICBjdXJyZW50LT5waWQsIChsb25nKW9sZF9lbmNvZGVfZGV2KHByaXYtPmhlYWQtPmRldmljZSksIGRldi0+b3Blbl9jb3VudCk7CisJCSAgY3VycmVudC0+cGlkLCAobG9uZylvbGRfZW5jb2RlX2Rldihwcml2LT5oZWFkLT5kZXZpY2UpLAorCQkgIGRldi0+b3Blbl9jb3VudCk7CiAJcmV0dXJuIDA7CiB9CisKIEVYUE9SVF9TWU1CT0woZHJtX2ZsdXNoKTsKIAogLyoqIE5vLW9wLiAqLwogaW50IGRybV9mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlscCwgaW50IG9uKQogewotCWRybV9maWxlX3QgICAgKnByaXYgICA9IGZpbHAtPnByaXZhdGVfZGF0YTsKLQlkcm1fZGV2aWNlX3QgICpkZXYgICAgPSBwcml2LT5oZWFkLT5kZXY7Ci0JaW50CSAgICAgIHJldGNvZGU7CisJZHJtX2ZpbGVfdCAqcHJpdiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlkcm1fZGV2aWNlX3QgKmRldiA9IHByaXYtPmhlYWQtPmRldjsKKwlpbnQgcmV0Y29kZTsKIAotCURSTV9ERUJVRygiZmQgPSAlZCwgZGV2aWNlID0gMHglbHhcbiIsIGZkLCAobG9uZylvbGRfZW5jb2RlX2Rldihwcml2LT5oZWFkLT5kZXZpY2UpKTsKKwlEUk1fREVCVUcoImZkID0gJWQsIGRldmljZSA9IDB4JWx4XG4iLCBmZCwKKwkJICAobG9uZylvbGRfZW5jb2RlX2Rldihwcml2LT5oZWFkLT5kZXZpY2UpKTsKIAlyZXRjb2RlID0gZmFzeW5jX2hlbHBlcihmZCwgZmlscCwgb24sICZkZXYtPmJ1Zl9hc3luYyk7Ci0JaWYgKHJldGNvZGUgPCAwKSByZXR1cm4gcmV0Y29kZTsKKwlpZiAocmV0Y29kZSA8IDApCisJCXJldHVybiByZXRjb2RlOwogCXJldHVybiAwOwogfQorCiBFWFBPUlRfU1lNQk9MKGRybV9mYXN5bmMpOwogCiAvKiogTm8tb3AuICovCkBAIC00MzcsNSArNDQ4LDUgQEAKIHsKIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0woZHJtX3BvbGwpOwogCitFWFBPUlRfU1lNQk9MKGRybV9wb2xsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX2luaXQuYyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX2luaXQuYwppbmRleCA2Mjg4M2I3Li43NTRiOTM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9pbml0LmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9kcm1faW5pdC5jCkBAIC0xLDUgKzEsNSBAQAogLyoqCi0gKiBcZmlsZSBkcm1faW5pdC5oIAorICogXGZpbGUgZHJtX2luaXQuYwogICogU2V0dXAvQ2xlYW51cCBmb3IgRFJNCiAgKgogICogXGF1dGhvciBSaWNrYXJkIEUuIChSaWspIEZhaXRoIDxmYWl0aEB2YWxpbnV4LmNvbT4KQEAgLTQzLDEwICs0MywxMSBAQAogaW50IGRybV9jcHVfdmFsaWQodm9pZCkKIHsKICNpZiBkZWZpbmVkKF9faTM4Nl9fKQotCWlmIChib290X2NwdV9kYXRhLng4NiA9PSAzKSByZXR1cm4gMDsgLyogTm8gY21weGNoZyBvbiBhIDM4NiAqLworCWlmIChib290X2NwdV9kYXRhLng4NiA9PSAzKQorCQlyZXR1cm4gMDsJLyogTm8gY21weGNoZyBvbiBhIDM4NiAqLwogI2VuZGlmCiAjaWYgZGVmaW5lZChfX3NwYXJjX18pICYmICFkZWZpbmVkKF9fc3BhcmNfdjlfXykKLQlyZXR1cm4gMDsgLyogTm8gY21weGNoZyBiZWZvcmUgdjkgc3BhcmMuICovCisJcmV0dXJuIDA7CQkvKiBObyBjbXB4Y2hnIGJlZm9yZSB2OSBzcGFyYy4gKi8KICNlbmRpZgogCXJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9kcm1faW9jMzIuYyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX2lvYzMyLmMKaW5kZXggODA4N2E5Ni4uZGQ5MWZmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1faW9jMzIuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9pb2MzMi5jCkBAIC02OCwxNSArNjgsMTUgQEAKICNkZWZpbmUgRFJNX0lPQ1RMX1dBSVRfVkJMQU5LMzIJCURSTV9JT1dSKDB4M2EsIGRybV93YWl0X3ZibGFuazMyX3QpCiAKIHR5cGVkZWYgc3RydWN0IGRybV92ZXJzaW9uXzMyIHsKLQlpbnQJdmVyc2lvbl9tYWpvcjsJICAvKio8IE1ham9yIHZlcnNpb24gKi8KLQlpbnQJdmVyc2lvbl9taW5vcjsJICAvKio8IE1pbm9yIHZlcnNpb24gKi8KLQlpbnQJdmVyc2lvbl9wYXRjaGxldmVsOy8qKjwgUGF0Y2ggbGV2ZWwgKi8KLQl1MzIJbmFtZV9sZW47CSAgLyoqPCBMZW5ndGggb2YgbmFtZSBidWZmZXIgKi8KLQl1MzIJbmFtZTsJCSAgLyoqPCBOYW1lIG9mIGRyaXZlciAqLwotCXUzMglkYXRlX2xlbjsJICAvKio8IExlbmd0aCBvZiBkYXRlIGJ1ZmZlciAqLwotCXUzMglkYXRlOwkJICAvKio8IFVzZXItc3BhY2UgYnVmZmVyIHRvIGhvbGQgZGF0ZSAqLwotCXUzMglkZXNjX2xlbjsJICAvKio8IExlbmd0aCBvZiBkZXNjIGJ1ZmZlciAqLwotCXUzMglkZXNjOwkJICAvKio8IFVzZXItc3BhY2UgYnVmZmVyIHRvIGhvbGQgZGVzYyAqLworCWludCB2ZXJzaW9uX21ham9yOwkgIC8qKjwgTWFqb3IgdmVyc2lvbiAqLworCWludCB2ZXJzaW9uX21pbm9yOwkgIC8qKjwgTWlub3IgdmVyc2lvbiAqLworCWludCB2ZXJzaW9uX3BhdGNobGV2ZWw7CSAgIC8qKjwgUGF0Y2ggbGV2ZWwgKi8KKwl1MzIgbmFtZV9sZW47CQkgIC8qKjwgTGVuZ3RoIG9mIG5hbWUgYnVmZmVyICovCisJdTMyIG5hbWU7CQkgIC8qKjwgTmFtZSBvZiBkcml2ZXIgKi8KKwl1MzIgZGF0ZV9sZW47CQkgIC8qKjwgTGVuZ3RoIG9mIGRhdGUgYnVmZmVyICovCisJdTMyIGRhdGU7CQkgIC8qKjwgVXNlci1zcGFjZSBidWZmZXIgdG8gaG9sZCBkYXRlICovCisJdTMyIGRlc2NfbGVuOwkJICAvKio8IExlbmd0aCBvZiBkZXNjIGJ1ZmZlciAqLworCXUzMiBkZXNjOwkJICAvKio8IFVzZXItc3BhY2UgYnVmZmVyIHRvIGhvbGQgZGVzYyAqLwogfSBkcm1fdmVyc2lvbjMyX3Q7CiAKIHN0YXRpYyBpbnQgY29tcGF0X2RybV92ZXJzaW9uKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLApAQCAtODYsNyArODYsNyBAQAogCWRybV92ZXJzaW9uX3QgX191c2VyICp2ZXJzaW9uOwogCWludCBlcnI7CiAKLQlpZiAoY29weV9mcm9tX3VzZXIoJnYzMiwgKHZvaWQgX191c2VyICopIGFyZywgc2l6ZW9mKHYzMikpKQorCWlmIChjb3B5X2Zyb21fdXNlcigmdjMyLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZih2MzIpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAl2ZXJzaW9uID0gY29tcGF0X2FsbG9jX3VzZXJfc3BhY2Uoc2l6ZW9mKCp2ZXJzaW9uKSk7CkBAIC0xMDQsNyArMTA0LDcgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAllcnIgPSBkcm1faW9jdGwoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQlEUk1fSU9DVExfVkVSU0lPTiwgKHVuc2lnbmVkIGxvbmcpIHZlcnNpb24pOworCQkJRFJNX0lPQ1RMX1ZFUlNJT04sICh1bnNpZ25lZCBsb25nKXZlcnNpb24pOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTExNiw3ICsxMTYsNyBAQAogCSAgICB8fCBfX2dldF91c2VyKHYzMi5kZXNjX2xlbiwgJnZlcnNpb24tPmRlc2NfbGVuKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKSBhcmcsICZ2MzIsIHNpemVvZih2MzIpKSkKKwlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJnYzMiwgc2l6ZW9mKHYzMikpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAlyZXR1cm4gMDsKIH0KQEAgLTEzMywyNSArMTMzLDI1IEBACiAJZHJtX3VuaXF1ZV90IF9fdXNlciAqdTsKIAlpbnQgZXJyOwogCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZ1cTMyLCAodm9pZCBfX3VzZXIgKikgYXJnLCBzaXplb2YodXEzMikpKQorCWlmIChjb3B5X2Zyb21fdXNlcigmdXEzMiwgKHZvaWQgX191c2VyICopYXJnLCBzaXplb2YodXEzMikpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAogCXUgPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShzaXplb2YoKnUpKTsKIAlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHUsIHNpemVvZigqdSkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAlpZiAoX19wdXRfdXNlcih1cTMyLnVuaXF1ZV9sZW4sICZ1LT51bmlxdWVfbGVuKQotCSAgICB8fCBfX3B1dF91c2VyKCh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKSB1cTMyLnVuaXF1ZSwKKwkgICAgfHwgX19wdXRfdXNlcigodm9pZCBfX3VzZXIgKikodW5zaWduZWQgbG9uZyl1cTMyLnVuaXF1ZSwKIAkJCSAgJnUtPnVuaXF1ZSkpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJZXJyID0gZHJtX2lvY3RsKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJRFJNX0lPQ1RMX0dFVF9VTklRVUUsICh1bnNpZ25lZCBsb25nKSB1KTsKKwkJCURSTV9JT0NUTF9HRVRfVU5JUVVFLCAodW5zaWduZWQgbG9uZyl1KTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCiAJaWYgKF9fZ2V0X3VzZXIodXEzMi51bmlxdWVfbGVuLCAmdS0+dW5pcXVlX2xlbikpCiAJCXJldHVybiAtRUZBVUxUOwotCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopIGFyZywgJnVxMzIsIHNpemVvZih1cTMyKSkpCisJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsICZ1cTMyLCBzaXplb2YodXEzMikpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAlyZXR1cm4gMDsKIH0KQEAgLTE2MiwyOCArMTYyLDI4IEBACiAJZHJtX3VuaXF1ZTMyX3QgdXEzMjsKIAlkcm1fdW5pcXVlX3QgX191c2VyICp1OwogCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZ1cTMyLCAodm9pZCBfX3VzZXIgKikgYXJnLCBzaXplb2YodXEzMikpKQorCWlmIChjb3B5X2Zyb21fdXNlcigmdXEzMiwgKHZvaWQgX191c2VyICopYXJnLCBzaXplb2YodXEzMikpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAogCXUgPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShzaXplb2YoKnUpKTsKIAlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHUsIHNpemVvZigqdSkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAlpZiAoX19wdXRfdXNlcih1cTMyLnVuaXF1ZV9sZW4sICZ1LT51bmlxdWVfbGVuKQotCSAgICB8fCBfX3B1dF91c2VyKCh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKSB1cTMyLnVuaXF1ZSwKKwkgICAgfHwgX19wdXRfdXNlcigodm9pZCBfX3VzZXIgKikodW5zaWduZWQgbG9uZyl1cTMyLnVuaXF1ZSwKIAkJCSAgJnUtPnVuaXF1ZSkpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfU0VUX1VOSVFVRSwgKHVuc2lnbmVkIGxvbmcpIHUpOworCQkJIERSTV9JT0NUTF9TRVRfVU5JUVVFLCAodW5zaWduZWQgbG9uZyl1KTsKIH0KIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX21hcDMyIHsKLQl1MzIJb2Zmc2V0OwkgCS8qKjwgUmVxdWVzdGVkIHBoeXNpY2FsIGFkZHJlc3MgKDAgZm9yIFNBUkVBKSovCi0JdTMyCXNpemU7CSAJLyoqPCBSZXF1ZXN0ZWQgcGh5c2ljYWwgc2l6ZSAoYnl0ZXMpICovCi0JZHJtX21hcF90eXBlX3QJdHlwZTsJLyoqPCBUeXBlIG9mIG1lbW9yeSB0byBtYXAgKi8KKwl1MzIgb2Zmc2V0OwkJLyoqPCBSZXF1ZXN0ZWQgcGh5c2ljYWwgYWRkcmVzcyAoMCBmb3IgU0FSRUEpKi8KKwl1MzIgc2l6ZTsJCS8qKjwgUmVxdWVzdGVkIHBoeXNpY2FsIHNpemUgKGJ5dGVzKSAqLworCWRybV9tYXBfdHlwZV90IHR5cGU7CS8qKjwgVHlwZSBvZiBtZW1vcnkgdG8gbWFwICovCiAJZHJtX21hcF9mbGFnc190IGZsYWdzOwkvKio8IEZsYWdzICovCi0JdTMyCWhhbmRsZTsJCS8qKjwgVXNlci1zcGFjZTogIkhhbmRsZSIgdG8gcGFzcyB0byBtbWFwKCkgKi8KLQlpbnQJbXRycjsJCS8qKjwgTVRSUiBzbG90IHVzZWQgKi8KKwl1MzIgaGFuZGxlOwkJLyoqPCBVc2VyLXNwYWNlOiAiSGFuZGxlIiB0byBwYXNzIHRvIG1tYXAoKSAqLworCWludCBtdHJyOwkJLyoqPCBNVFJSIHNsb3QgdXNlZCAqLwogfSBkcm1fbWFwMzJfdDsKIAogc3RhdGljIGludCBjb21wYXRfZHJtX2dldG1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKQEAgLTIwNSw3ICsyMDUsNyBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAogCWVyciA9IGRybV9pb2N0bChmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCURSTV9JT0NUTF9HRVRfTUFQLCAodW5zaWduZWQgbG9uZykgbWFwKTsKKwkJCURSTV9JT0NUTF9HRVRfTUFQLCAodW5zaWduZWQgbG9uZyltYXApOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTIxNyw3ICsyMTcsNyBAQAogCSAgICB8fCBfX2dldF91c2VyKG0zMi5tdHJyLCAmbWFwLT5tdHJyKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQltMzIuaGFuZGxlID0gKHVuc2lnbmVkIGxvbmcpIGhhbmRsZTsKKwltMzIuaGFuZGxlID0gKHVuc2lnbmVkIGxvbmcpaGFuZGxlOwogCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJm0zMiwgc2l6ZW9mKG0zMikpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAlyZXR1cm4gMDsKQEAgLTI0Niw3ICsyNDYsNyBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAogCWVyciA9IGRybV9pb2N0bChmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCURSTV9JT0NUTF9BRERfTUFQLCAodW5zaWduZWQgbG9uZykgbWFwKTsKKwkJCURSTV9JT0NUTF9BRERfTUFQLCAodW5zaWduZWQgbG9uZyltYXApOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTI1NSw4ICsyNTUsOCBAQAogCSAgICB8fCBfX2dldF91c2VyKGhhbmRsZSwgJm1hcC0+aGFuZGxlKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQltMzIuaGFuZGxlID0gKHVuc2lnbmVkIGxvbmcpIGhhbmRsZTsKLQlpZiAobTMyLmhhbmRsZSAhPSAodW5zaWduZWQgbG9uZykgaGFuZGxlICYmIHByaW50a19yYXRlbGltaXQoKSkKKwltMzIuaGFuZGxlID0gKHVuc2lnbmVkIGxvbmcpaGFuZGxlOworCWlmIChtMzIuaGFuZGxlICE9ICh1bnNpZ25lZCBsb25nKWhhbmRsZSAmJiBwcmludGtfcmF0ZWxpbWl0KCkpCiAJCXByaW50ayhLRVJOX0VSUiAiY29tcGF0X2RybV9hZGRtYXAgdHJ1bmNhdGVkIGhhbmRsZSIKIAkJICAgICAgICIgJXAgZm9yIHR5cGUgJWQgb2Zmc2V0ICV4XG4iLAogCQkgICAgICAgaGFuZGxlLCBtMzIudHlwZSwgbTMyLm9mZnNldCk7CkBAIC0yODAsMjAgKzI4MCwyMCBAQAogCW1hcCA9IGNvbXBhdF9hbGxvY191c2VyX3NwYWNlKHNpemVvZigqbWFwKSk7CiAJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBtYXAsIHNpemVvZigqbWFwKSkpCiAJCXJldHVybiAtRUZBVUxUOwotCWlmIChfX3B1dF91c2VyKCh2b2lkICopKHVuc2lnbmVkIGxvbmcpIGhhbmRsZSwgJm1hcC0+aGFuZGxlKSkKKwlpZiAoX19wdXRfdXNlcigodm9pZCAqKSh1bnNpZ25lZCBsb25nKWhhbmRsZSwgJm1hcC0+aGFuZGxlKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJIERSTV9JT0NUTF9STV9NQVAsICh1bnNpZ25lZCBsb25nKSBtYXApOworCQkJIERSTV9JT0NUTF9STV9NQVAsICh1bnNpZ25lZCBsb25nKW1hcCk7CiB9CiAKIHR5cGVkZWYgc3RydWN0IGRybV9jbGllbnQzMiB7Ci0JaW50CWlkeDsJLyoqPCBXaGljaCBjbGllbnQgZGVzaXJlZD8gKi8KLQlpbnQJYXV0aDsJLyoqPCBJcyBjbGllbnQgYXV0aGVudGljYXRlZD8gKi8KLQl1MzIJcGlkOwkvKio8IFByb2Nlc3MgSUQgKi8KLQl1MzIJdWlkOwkvKio8IFVzZXIgSUQgKi8KLQl1MzIJbWFnaWM7CS8qKjwgTWFnaWMgKi8KLQl1MzIJaW9jczsJLyoqPCBJb2N0bCBjb3VudCAqLworCWludCBpZHg7CS8qKjwgV2hpY2ggY2xpZW50IGRlc2lyZWQ/ICovCisJaW50IGF1dGg7CS8qKjwgSXMgY2xpZW50IGF1dGhlbnRpY2F0ZWQ/ICovCisJdTMyIHBpZDsJLyoqPCBQcm9jZXNzIElEICovCisJdTMyIHVpZDsJLyoqPCBVc2VyIElEICovCisJdTMyIG1hZ2ljOwkvKio8IE1hZ2ljICovCisJdTMyIGlvY3M7CS8qKjwgSW9jdGwgY291bnQgKi8KIH0gZHJtX2NsaWVudDMyX3Q7CiAKIHN0YXRpYyBpbnQgY29tcGF0X2RybV9nZXRjbGllbnQoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCkBAIC0zMTQsNyArMzE0LDcgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAllcnIgPSBkcm1faW9jdGwoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQlEUk1fSU9DVExfR0VUX0NMSUVOVCwgKHVuc2lnbmVkIGxvbmcpIGNsaWVudCk7CisJCQlEUk1fSU9DVExfR0VUX0NMSUVOVCwgKHVuc2lnbmVkIGxvbmcpY2xpZW50KTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC0zNTEsNyArMzUxLDcgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAllcnIgPSBkcm1faW9jdGwoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQlEUk1fSU9DVExfR0VUX1NUQVRTLCAodW5zaWduZWQgbG9uZykgc3RhdHMpOworCQkJRFJNX0lPQ1RMX0dFVF9TVEFUUywgKHVuc2lnbmVkIGxvbmcpc3RhdHMpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTM2OCwxMiArMzY4LDEyIEBACiB9CiAKIHR5cGVkZWYgc3RydWN0IGRybV9idWZfZGVzYzMyIHsKLQlpbnQJICAgICAgY291bnQ7CSAvKio8IE51bWJlciBvZiBidWZmZXJzIG9mIHRoaXMgc2l6ZSAqLwotCWludAkgICAgICBzaXplOwkgLyoqPCBTaXplIGluIGJ5dGVzICovCi0JaW50CSAgICAgIGxvd19tYXJrOwkgLyoqPCBMb3cgd2F0ZXIgbWFyayAqLwotCWludAkgICAgICBoaWdoX21hcms7IC8qKjwgSGlnaCB3YXRlciBtYXJrICovCi0JaW50CSAgICAgIGZsYWdzOwotCXUzMgkgICAgICBhZ3Bfc3RhcnQ7IC8qKjwgU3RhcnQgYWRkcmVzcyBpbiB0aGUgQUdQIGFwZXJ0dXJlICovCisJaW50IGNvdW50OwkJIC8qKjwgTnVtYmVyIG9mIGJ1ZmZlcnMgb2YgdGhpcyBzaXplICovCisJaW50IHNpemU7CQkgLyoqPCBTaXplIGluIGJ5dGVzICovCisJaW50IGxvd19tYXJrOwkJIC8qKjwgTG93IHdhdGVyIG1hcmsgKi8KKwlpbnQgaGlnaF9tYXJrOwkJIC8qKjwgSGlnaCB3YXRlciBtYXJrICovCisJaW50IGZsYWdzOworCXUzMiBhZ3Bfc3RhcnQ7CQkgLyoqPCBTdGFydCBhZGRyZXNzIGluIHRoZSBBR1AgYXBlcnR1cmUgKi8KIH0gZHJtX2J1Zl9kZXNjMzJfdDsKIAogc3RhdGljIGludCBjb21wYXRfZHJtX2FkZGJ1ZnMoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCkBAIC0zOTUsNyArMzk1LDcgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAllcnIgPSBkcm1faW9jdGwoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQlEUk1fSU9DVExfQUREX0JVRlMsICh1bnNpZ25lZCBsb25nKSBidWYpOworCQkJRFJNX0lPQ1RMX0FERF9CVUZTLCAodW5zaWduZWQgbG9uZylidWYpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTQyNywxMiArNDI3LDEyIEBACiAJCXJldHVybiAtRUZBVUxUOwogCiAJcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfTUFSS19CVUZTLCAodW5zaWduZWQgbG9uZykgYnVmKTsKKwkJCSBEUk1fSU9DVExfTUFSS19CVUZTLCAodW5zaWduZWQgbG9uZylidWYpOwogfQogCiB0eXBlZGVmIHN0cnVjdCBkcm1fYnVmX2luZm8zMiB7Ci0JaW50CSAgICAgICBjb3VudDsJLyoqPCBFbnRyaWVzIGluIGxpc3QgKi8KLQl1MzIJICAgICAgIGxpc3Q7CisJaW50IGNvdW50OwkJLyoqPCBFbnRyaWVzIGluIGxpc3QgKi8KKwl1MzIgbGlzdDsKIH0gZHJtX2J1Zl9pbmZvMzJfdDsKIAogc3RhdGljIGludCBjb21wYXRfZHJtX2luZm9idWZzKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLApAQCAtNDUxLDcgKzQ1MSw3IEBACiAJCXJldHVybiAtRUZBVUxUOwogCiAJY291bnQgPSByZXEzMi5jb3VudDsKLQl0byA9IChkcm1fYnVmX2Rlc2MzMl90IF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKSByZXEzMi5saXN0OworCXRvID0gKGRybV9idWZfZGVzYzMyX3QgX191c2VyICopICh1bnNpZ25lZCBsb25nKXJlcTMyLmxpc3Q7CiAJaWYgKGNvdW50IDwgMCkKIAkJY291bnQgPSAwOwogCWlmIChjb3VudCA+IDAKQEAgLTQ2OSw3ICs0NjksNyBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAogCWVyciA9IGRybV9pb2N0bChmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCURSTV9JT0NUTF9JTkZPX0JVRlMsICh1bnNpZ25lZCBsb25nKSByZXF1ZXN0KTsKKwkJCURSTV9JT0NUTF9JTkZPX0JVRlMsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTQ4OCwxNiArNDg4LDE2IEBACiB9CiAKIHR5cGVkZWYgc3RydWN0IGRybV9idWZfcHViMzIgewotCWludAlpZHg7CQkvKio8IEluZGV4IGludG8gdGhlIG1hc3RlciBidWZmZXIgbGlzdCAqLwotCWludAl0b3RhbDsJCS8qKjwgQnVmZmVyIHNpemUgKi8KLQlpbnQJdXNlZDsJCS8qKjwgQW1vdW50IG9mIGJ1ZmZlciBpbiB1c2UgKGZvciBETUEpICovCi0JdTMyCWFkZHJlc3M7CS8qKjwgQWRkcmVzcyBvZiBidWZmZXIgKi8KKwlpbnQgaWR4OwkJLyoqPCBJbmRleCBpbnRvIHRoZSBtYXN0ZXIgYnVmZmVyIGxpc3QgKi8KKwlpbnQgdG90YWw7CQkvKio8IEJ1ZmZlciBzaXplICovCisJaW50IHVzZWQ7CQkvKio8IEFtb3VudCBvZiBidWZmZXIgaW4gdXNlIChmb3IgRE1BKSAqLworCXUzMiBhZGRyZXNzOwkJLyoqPCBBZGRyZXNzIG9mIGJ1ZmZlciAqLwogfSBkcm1fYnVmX3B1YjMyX3Q7CiAKIHR5cGVkZWYgc3RydWN0IGRybV9idWZfbWFwMzIgewotCWludAljb3VudDsJCS8qKjwgTGVuZ3RoIG9mIHRoZSBidWZmZXIgbGlzdCAqLwotCXUzMgl2aXJ0dWFsOwkvKio8IE1tYXAnZCBhcmVhIGluIHVzZXItdmlydHVhbCAqLwotCXUzMglsaXN0OwkJLyoqPCBCdWZmZXIgaW5mb3JtYXRpb24gKi8KKwlpbnQgY291bnQ7CQkvKio8IExlbmd0aCBvZiB0aGUgYnVmZmVyIGxpc3QgKi8KKwl1MzIgdmlydHVhbDsJCS8qKjwgTW1hcCdkIGFyZWEgaW4gdXNlci12aXJ0dWFsICovCisJdTMyIGxpc3Q7CQkvKio8IEJ1ZmZlciBpbmZvcm1hdGlvbiAqLwogfSBkcm1fYnVmX21hcDMyX3Q7CiAKIHN0YXRpYyBpbnQgY29tcGF0X2RybV9tYXBidWZzKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLApAQCAtNTMxLDcgKzUzMSw3IEBACiAJCXJldHVybiAtRUZBVUxUOwogCiAJZXJyID0gZHJtX2lvY3RsKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJRFJNX0lPQ1RMX01BUF9CVUZTLCAodW5zaWduZWQgbG9uZykgcmVxdWVzdCk7CisJCQlEUk1fSU9DVExfTUFQX0JVRlMsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTU0MiwyMSArNTQyLDIxIEBACiAJCQlpZiAoX19jb3B5X2luX3VzZXIoJmxpc3QzMltpXSwgJmxpc3RbaV0sCiAJCQkJCSAgIG9mZnNldG9mKGRybV9idWZfcHViX3QsIGFkZHJlc3MpKQogCQkJICAgIHx8IF9fZ2V0X3VzZXIoYWRkciwgJmxpc3RbaV0uYWRkcmVzcykKLQkJCSAgICB8fCBfX3B1dF91c2VyKCh1bnNpZ25lZCBsb25nKSBhZGRyLAorCQkJICAgIHx8IF9fcHV0X3VzZXIoKHVuc2lnbmVkIGxvbmcpYWRkciwKIAkJCQkJICAmbGlzdDMyW2ldLmFkZHJlc3MpKQogCQkJCXJldHVybiAtRUZBVUxUOwogCiAJaWYgKF9fcHV0X3VzZXIoYWN0dWFsLCAmYXJncC0+Y291bnQpCiAJICAgIHx8IF9fZ2V0X3VzZXIoYWRkciwgJnJlcXVlc3QtPnZpcnR1YWwpCi0JICAgIHx8IF9fcHV0X3VzZXIoKHVuc2lnbmVkIGxvbmcpIGFkZHIsICZhcmdwLT52aXJ0dWFsKSkKKwkgICAgfHwgX19wdXRfdXNlcigodW5zaWduZWQgbG9uZylhZGRyLCAmYXJncC0+dmlydHVhbCkpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJcmV0dXJuIDA7CiB9CiAKIHR5cGVkZWYgc3RydWN0IGRybV9idWZfZnJlZTMyIHsKLQlpbnQJY291bnQ7Ci0JdTMyCWxpc3Q7CisJaW50IGNvdW50OworCXUzMiBsaXN0OwogfSBkcm1fYnVmX2ZyZWUzMl90OwogCiBzdGF0aWMgaW50IGNvbXBhdF9kcm1fZnJlZWJ1ZnMoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCkBAIC01NzMsMTcgKzU3MywxNyBAQAogCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgcmVxdWVzdCwgc2l6ZW9mKCpyZXF1ZXN0KSkpCiAJCXJldHVybiAtRUZBVUxUOwogCWlmIChfX3B1dF91c2VyKHJlcTMyLmNvdW50LCAmcmVxdWVzdC0+Y291bnQpCi0JICAgIHx8IF9fcHV0X3VzZXIoKGludCBfX3VzZXIgKikodW5zaWduZWQgbG9uZykgcmVxMzIubGlzdCwKKwkgICAgfHwgX19wdXRfdXNlcigoaW50IF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKXJlcTMyLmxpc3QsCiAJCQkgICZyZXF1ZXN0LT5saXN0KSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJIERSTV9JT0NUTF9GUkVFX0JVRlMsICh1bnNpZ25lZCBsb25nKSByZXF1ZXN0KTsKKwkJCSBEUk1fSU9DVExfRlJFRV9CVUZTLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKIH0KIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX2N0eF9wcml2X21hcDMyIHsKLQl1bnNpZ25lZCBpbnQJY3R4X2lkOyAgLyoqPCBDb250ZXh0IHJlcXVlc3RpbmcgcHJpdmF0ZSBtYXBwaW5nICovCi0JdTMyCQloYW5kbGU7IC8qKjwgSGFuZGxlIG9mIG1hcCAqLworCXVuc2lnbmVkIGludCBjdHhfaWQ7CSAvKio8IENvbnRleHQgcmVxdWVzdGluZyBwcml2YXRlIG1hcHBpbmcgKi8KKwl1MzIgaGFuZGxlOwkJLyoqPCBIYW5kbGUgb2YgbWFwICovCiB9IGRybV9jdHhfcHJpdl9tYXAzMl90OwogCiBzdGF0aWMgaW50IGNvbXBhdF9kcm1fc2V0c2FyZWFjdHgoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCkBAIC02MDAsMTIgKzYwMCwxMiBAQAogCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgcmVxdWVzdCwgc2l6ZW9mKCpyZXF1ZXN0KSkpCiAJCXJldHVybiAtRUZBVUxUOwogCWlmIChfX3B1dF91c2VyKHJlcTMyLmN0eF9pZCwgJnJlcXVlc3QtPmN0eF9pZCkKLQkgICAgfHwgX19wdXRfdXNlcigodm9pZCAqKSh1bnNpZ25lZCBsb25nKSByZXEzMi5oYW5kbGUsCisJICAgIHx8IF9fcHV0X3VzZXIoKHZvaWQgKikodW5zaWduZWQgbG9uZylyZXEzMi5oYW5kbGUsCiAJCQkgICZyZXF1ZXN0LT5oYW5kbGUpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAogCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQkgRFJNX0lPQ1RMX1NFVF9TQVJFQV9DVFgsICh1bnNpZ25lZCBsb25nKSByZXF1ZXN0KTsKKwkJCSBEUk1fSU9DVExfU0VUX1NBUkVBX0NUWCwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiB9CiAKIHN0YXRpYyBpbnQgY29tcGF0X2RybV9nZXRzYXJlYWN0eChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKQEAgLTYyOCwyMCArNjI4LDIwIEBACiAJCXJldHVybiAtRUZBVUxUOwogCiAJZXJyID0gZHJtX2lvY3RsKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJRFJNX0lPQ1RMX0dFVF9TQVJFQV9DVFgsICh1bnNpZ25lZCBsb25nKSByZXF1ZXN0KTsKKwkJCURSTV9JT0NUTF9HRVRfU0FSRUFfQ1RYLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCiAJaWYgKF9fZ2V0X3VzZXIoaGFuZGxlLCAmcmVxdWVzdC0+aGFuZGxlKQotCSAgICB8fCBfX3B1dF91c2VyKCh1bnNpZ25lZCBsb25nKSBoYW5kbGUsICZhcmdwLT5oYW5kbGUpKQorCSAgICB8fCBfX3B1dF91c2VyKCh1bnNpZ25lZCBsb25nKWhhbmRsZSwgJmFyZ3AtPmhhbmRsZSkpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJcmV0dXJuIDA7CiB9CiAKIHR5cGVkZWYgc3RydWN0IGRybV9jdHhfcmVzMzIgewotCWludAljb3VudDsKLQl1MzIJY29udGV4dHM7CisJaW50IGNvdW50OworCXUzMiBjb250ZXh0czsKIH0gZHJtX2N0eF9yZXMzMl90OwogCiBzdGF0aWMgaW50IGNvbXBhdF9kcm1fcmVzY3R4KHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLApAQCAtNjU5LDEyICs2NTksMTIgQEAKIAlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHJlcywgc2l6ZW9mKCpyZXMpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJaWYgKF9fcHV0X3VzZXIocmVzMzIuY291bnQsICZyZXMtPmNvdW50KQotCSAgICB8fCBfX3B1dF91c2VyKChkcm1fY3R4X3QgX191c2VyICopKHVuc2lnbmVkIGxvbmcpIHJlczMyLmNvbnRleHRzLAorCSAgICB8fCBfX3B1dF91c2VyKChkcm1fY3R4X3QgX191c2VyICopICh1bnNpZ25lZCBsb25nKXJlczMyLmNvbnRleHRzLAogCQkJICAmcmVzLT5jb250ZXh0cykpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJZXJyID0gZHJtX2lvY3RsKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJRFJNX0lPQ1RMX1JFU19DVFgsICh1bnNpZ25lZCBsb25nKSByZXMpOworCQkJRFJNX0lPQ1RMX1JFU19DVFgsICh1bnNpZ25lZCBsb25nKXJlcyk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtNjc2LDIzICs2NzYsMjMgQEAKIH0KIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX2RtYTMyIHsKLQlpbnQJY29udGV4dDsJICAvKio8IENvbnRleHQgaGFuZGxlICovCi0JaW50CXNlbmRfY291bnQ7CSAgLyoqPCBOdW1iZXIgb2YgYnVmZmVycyB0byBzZW5kICovCi0JdTMyCXNlbmRfaW5kaWNlczsJICAvKio8IExpc3Qgb2YgaGFuZGxlcyB0byBidWZmZXJzICovCi0JdTMyCXNlbmRfc2l6ZXM7CSAgLyoqPCBMZW5ndGhzIG9mIGRhdGEgdG8gc2VuZCAqLworCWludCBjb250ZXh0OwkJICAvKio8IENvbnRleHQgaGFuZGxlICovCisJaW50IHNlbmRfY291bnQ7CQkgIC8qKjwgTnVtYmVyIG9mIGJ1ZmZlcnMgdG8gc2VuZCAqLworCXUzMiBzZW5kX2luZGljZXM7CSAgLyoqPCBMaXN0IG9mIGhhbmRsZXMgdG8gYnVmZmVycyAqLworCXUzMiBzZW5kX3NpemVzOwkJICAvKio8IExlbmd0aHMgb2YgZGF0YSB0byBzZW5kICovCiAJZHJtX2RtYV9mbGFnc190IGZsYWdzOwkJICAvKio8IEZsYWdzICovCi0JaW50CXJlcXVlc3RfY291bnQ7CSAgLyoqPCBOdW1iZXIgb2YgYnVmZmVycyByZXF1ZXN0ZWQgKi8KLQlpbnQJcmVxdWVzdF9zaXplOwkgIC8qKjwgRGVzaXJlZCBzaXplIGZvciBidWZmZXJzICovCi0JdTMyCXJlcXVlc3RfaW5kaWNlczsgIC8qKjwgQnVmZmVyIGluZm9ybWF0aW9uICovCi0JdTMyCXJlcXVlc3Rfc2l6ZXM7Ci0JaW50CWdyYW50ZWRfY291bnQ7CSAgLyoqPCBOdW1iZXIgb2YgYnVmZmVycyBncmFudGVkICovCisJaW50IHJlcXVlc3RfY291bnQ7CSAgLyoqPCBOdW1iZXIgb2YgYnVmZmVycyByZXF1ZXN0ZWQgKi8KKwlpbnQgcmVxdWVzdF9zaXplOwkgIC8qKjwgRGVzaXJlZCBzaXplIGZvciBidWZmZXJzICovCisJdTMyIHJlcXVlc3RfaW5kaWNlczsJICAvKio8IEJ1ZmZlciBpbmZvcm1hdGlvbiAqLworCXUzMiByZXF1ZXN0X3NpemVzOworCWludCBncmFudGVkX2NvdW50OwkgIC8qKjwgTnVtYmVyIG9mIGJ1ZmZlcnMgZ3JhbnRlZCAqLwogfSBkcm1fZG1hMzJfdDsKIAogc3RhdGljIGludCBjb21wYXRfZHJtX2RtYShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKIAkJCSAgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJZHJtX2RtYTMyX3QgZDMyOwotCWRybV9kbWEzMl90IF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKSBhcmc7CisJZHJtX2RtYTMyX3QgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwogCWRybV9kbWFfdCBfX3VzZXIgKmQ7CiAJaW50IGVycjsKIApAQCAtNzA1LDIwICs3MDUsMjAgQEAKIAogCWlmIChfX3B1dF91c2VyKGQzMi5jb250ZXh0LCAmZC0+Y29udGV4dCkKIAkgICAgfHwgX19wdXRfdXNlcihkMzIuc2VuZF9jb3VudCwgJmQtPnNlbmRfY291bnQpCi0JICAgIHx8IF9fcHV0X3VzZXIoKGludCBfX3VzZXIgKikodW5zaWduZWQgbG9uZykgZDMyLnNlbmRfaW5kaWNlcywKKwkgICAgfHwgX19wdXRfdXNlcigoaW50IF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKWQzMi5zZW5kX2luZGljZXMsCiAJCQkgICZkLT5zZW5kX2luZGljZXMpCi0JICAgIHx8IF9fcHV0X3VzZXIoKGludCBfX3VzZXIgKikodW5zaWduZWQgbG9uZykgZDMyLnNlbmRfc2l6ZXMsCisJICAgIHx8IF9fcHV0X3VzZXIoKGludCBfX3VzZXIgKikodW5zaWduZWQgbG9uZylkMzIuc2VuZF9zaXplcywKIAkJCSAgJmQtPnNlbmRfc2l6ZXMpCiAJICAgIHx8IF9fcHV0X3VzZXIoZDMyLmZsYWdzLCAmZC0+ZmxhZ3MpCiAJICAgIHx8IF9fcHV0X3VzZXIoZDMyLnJlcXVlc3RfY291bnQsICZkLT5yZXF1ZXN0X2NvdW50KQotCSAgICB8fCBfX3B1dF91c2VyKChpbnQgX191c2VyICopKHVuc2lnbmVkIGxvbmcpIGQzMi5yZXF1ZXN0X2luZGljZXMsCisJICAgIHx8IF9fcHV0X3VzZXIoKGludCBfX3VzZXIgKikodW5zaWduZWQgbG9uZylkMzIucmVxdWVzdF9pbmRpY2VzLAogCQkJICAmZC0+cmVxdWVzdF9pbmRpY2VzKQotCSAgICB8fCBfX3B1dF91c2VyKChpbnQgX191c2VyICopKHVuc2lnbmVkIGxvbmcpIGQzMi5yZXF1ZXN0X3NpemVzLAorCSAgICB8fCBfX3B1dF91c2VyKChpbnQgX191c2VyICopKHVuc2lnbmVkIGxvbmcpZDMyLnJlcXVlc3Rfc2l6ZXMsCiAJCQkgICZkLT5yZXF1ZXN0X3NpemVzKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAllcnIgPSBkcm1faW9jdGwoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQlEUk1fSU9DVExfRE1BLCAodW5zaWduZWQgbG9uZykgZCk7CisJCQlEUk1fSU9DVExfRE1BLCAodW5zaWduZWQgbG9uZylkKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC03NTEsMTkgKzc1MSwxOSBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAogCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQkgRFJNX0lPQ1RMX0FHUF9FTkFCTEUsICh1bnNpZ25lZCBsb25nKSBtb2RlKTsKKwkJCSBEUk1fSU9DVExfQUdQX0VOQUJMRSwgKHVuc2lnbmVkIGxvbmcpbW9kZSk7CiB9CiAKIHR5cGVkZWYgc3RydWN0IGRybV9hZ3BfaW5mbzMyIHsKLQlpbnQgICAgICAgYWdwX3ZlcnNpb25fbWFqb3I7Ci0JaW50ICAgICAgIGFncF92ZXJzaW9uX21pbm9yOwotCXUzMgkgIG1vZGU7Ci0JdTMyCSAgYXBlcnR1cmVfYmFzZTsgIC8qIHBoeXNpY2FsIGFkZHJlc3MgKi8KLQl1MzIJICBhcGVydHVyZV9zaXplOyAgLyogYnl0ZXMgKi8KLQl1MzIJICBtZW1vcnlfYWxsb3dlZDsgLyogYnl0ZXMgKi8KLQl1MzIJICBtZW1vcnlfdXNlZDsKKwlpbnQgYWdwX3ZlcnNpb25fbWFqb3I7CisJaW50IGFncF92ZXJzaW9uX21pbm9yOworCXUzMiBtb2RlOworCXUzMiBhcGVydHVyZV9iYXNlOwkvKiBwaHlzaWNhbCBhZGRyZXNzICovCisJdTMyIGFwZXJ0dXJlX3NpemU7CS8qIGJ5dGVzICovCisJdTMyIG1lbW9yeV9hbGxvd2VkOwkvKiBieXRlcyAqLworCXUzMiBtZW1vcnlfdXNlZDsKIAotCQkJCS8qIFBDSSBpbmZvcm1hdGlvbiAqLworCS8qIFBDSSBpbmZvcm1hdGlvbiAqLwogCXVuc2lnbmVkIHNob3J0IGlkX3ZlbmRvcjsKIAl1bnNpZ25lZCBzaG9ydCBpZF9kZXZpY2U7CiB9IGRybV9hZ3BfaW5mbzMyX3Q7CkBAIC03ODEsNyArNzgxLDcgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAllcnIgPSBkcm1faW9jdGwoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQlEUk1fSU9DVExfQUdQX0lORk8sICh1bnNpZ25lZCBsb25nKSBpbmZvKTsKKwkJCURSTV9JT0NUTF9BR1BfSU5GTywgKHVuc2lnbmVkIGxvbmcpaW5mbyk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtODA2LDcgKzgwNiw3IEBACiAJdTMyIHNpemU7CS8qKjwgSW4gYnl0ZXMgLS0gd2lsbCByb3VuZCB0byBwYWdlIGJvdW5kYXJ5ICovCiAJdTMyIGhhbmRsZTsJLyoqPCBVc2VkIGZvciBiaW5kaW5nIC8gdW5iaW5kaW5nICovCiAJdTMyIHR5cGU7CS8qKjwgVHlwZSBvZiBtZW1vcnkgdG8gYWxsb2NhdGUgKi8KLSAgICAgICAgdTMyIHBoeXNpY2FsOwkvKio8IFBoeXNpY2FsIHVzZWQgYnkgaTgxMCAqLworCXUzMiBwaHlzaWNhbDsJLyoqPCBQaHlzaWNhbCB1c2VkIGJ5IGk4MTAgKi8KIH0gZHJtX2FncF9idWZmZXIzMl90OwogCiBzdGF0aWMgaW50IGNvbXBhdF9kcm1fYWdwX2FsbG9jKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLApAQCAtODI3LDcgKzgyNyw3IEBACiAJCXJldHVybiAtRUZBVUxUOwogCiAJZXJyID0gZHJtX2lvY3RsKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJRFJNX0lPQ1RMX0FHUF9BTExPQywgKHVuc2lnbmVkIGxvbmcpIHJlcXVlc3QpOworCQkJRFJNX0lPQ1RMX0FHUF9BTExPQywgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtODM1LDcgKzgzNSw3IEBACiAJICAgIHx8IF9fZ2V0X3VzZXIocmVxMzIucGh5c2ljYWwsICZyZXF1ZXN0LT5waHlzaWNhbCkKIAkgICAgfHwgY29weV90b191c2VyKGFyZ3AsICZyZXEzMiwgc2l6ZW9mKHJlcTMyKSkpIHsKIAkJZHJtX2lvY3RsKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJICBEUk1fSU9DVExfQUdQX0ZSRUUsICh1bnNpZ25lZCBsb25nKSByZXF1ZXN0KTsKKwkJCSAgRFJNX0lPQ1RMX0FHUF9GUkVFLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCkBAIC04NTYsNyArODU2LDcgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJIERSTV9JT0NUTF9BR1BfRlJFRSwgKHVuc2lnbmVkIGxvbmcpIHJlcXVlc3QpOworCQkJIERSTV9JT0NUTF9BR1BfRlJFRSwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiB9CiAKIHR5cGVkZWYgc3RydWN0IGRybV9hZ3BfYmluZGluZzMyIHsKQEAgLTg4MSw3ICs4ODEsNyBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAogCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQkgRFJNX0lPQ1RMX0FHUF9CSU5ELCAodW5zaWduZWQgbG9uZykgcmVxdWVzdCk7CisJCQkgRFJNX0lPQ1RMX0FHUF9CSU5ELCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKIH0KIAogc3RhdGljIGludCBjb21wYXRfZHJtX2FncF91bmJpbmQoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCkBAIC04OTgsOSArODk4LDkgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJIERSTV9JT0NUTF9BR1BfVU5CSU5ELCAodW5zaWduZWQgbG9uZykgcmVxdWVzdCk7CisJCQkgRFJNX0lPQ1RMX0FHUF9VTkJJTkQsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOwogfQotI2VuZGlmIC8qIF9fT1NfSEFTX0FHUCAqLworI2VuZGlmCQkJCS8qIF9fT1NfSEFTX0FHUCAqLwogCiB0eXBlZGVmIHN0cnVjdCBkcm1fc2NhdHRlcl9nYXRoZXIzMiB7CiAJdTMyIHNpemU7CS8qKjwgSW4gYnl0ZXMgLS0gd2lsbCByb3VuZCB0byBwYWdlIGJvdW5kYXJ5ICovCkBAIC05MjMsNyArOTIzLDcgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAllcnIgPSBkcm1faW9jdGwoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQlEUk1fSU9DVExfU0dfQUxMT0MsICh1bnNpZ25lZCBsb25nKSByZXF1ZXN0KTsKKwkJCURSTV9JT0NUTF9TR19BTExPQywgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtOTUwLDcgKzk1MCw3IEBACiAJCXJldHVybiAtRUZBVUxUOwogCiAJcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfU0dfRlJFRSwgKHVuc2lnbmVkIGxvbmcpIHJlcXVlc3QpOworCQkJIERSTV9JT0NUTF9TR19GUkVFLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKIH0KIAogc3RydWN0IGRybV93YWl0X3ZibGFua19yZXF1ZXN0MzIgewpAQCAtOTkwLDcgKzk5MCw3IEBACiAJCXJldHVybiAtRUZBVUxUOwogCiAJZXJyID0gZHJtX2lvY3RsKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJRFJNX0lPQ1RMX1dBSVRfVkJMQU5LLCAodW5zaWduZWQgbG9uZykgcmVxdWVzdCk7CisJCQlEUk1fSU9DVExfV0FJVF9WQkxBTkssICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTEwNTksMTEgKzEwNTksMTIgQEAKIAogCWxvY2tfa2VybmVsKCk7CQkvKiBYWFggZm9yIG5vdyAqLwogCWlmIChmbiAhPSBOVUxMKQotCQlyZXQgPSAoKmZuKShmaWxwLCBjbWQsIGFyZyk7CisJCXJldCA9ICgqZm4pIChmaWxwLCBjbWQsIGFyZyk7CiAJZWxzZQogCQlyZXQgPSBkcm1faW9jdGwoZmlscC0+Zl9kZW50cnktPmRfaW5vZGUsIGZpbHAsIGNtZCwgYXJnKTsKIAl1bmxvY2tfa2VybmVsKCk7CiAKIAlyZXR1cm4gcmV0OwogfQorCiBFWFBPUlRfU1lNQk9MKGRybV9jb21wYXRfaW9jdGwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9kcm1faW9jdGwuYyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX2lvY3RsLmMKaW5kZXggZDJlZDNiYS4uOWIwZmViYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1faW9jdGwuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9pb2N0bC5jCkBAIC0xLDUgKzEsNSBAQAogLyoqCi0gKiBcZmlsZSBkcm1faW9jdGwuaCAKKyAqIFxmaWxlIGRybV9pb2N0bC5jCiAgKiBJT0NUTCBwcm9jZXNzaW5nIGZvciBEUk0KICAqCiAgKiBcYXV0aG9yIFJpY2thcmQgRS4gKFJpaykgRmFpdGggPGZhaXRoQHZhbGludXguY29tPgpAQCAtNDAsNyArNDAsNyBAQAogCiAvKioKICAqIEdldCB0aGUgYnVzIGlkLgotICogCisgKgogICogXHBhcmFtIGlub2RlIGRldmljZSBpbm9kZS4KICAqIFxwYXJhbSBmaWxwIGZpbGUgcG9pbnRlci4KICAqIFxwYXJhbSBjbWQgY29tbWFuZC4KQEAgLTUwLDEyICs1MCwxMiBAQAogICogQ29waWVzIHRoZSBidXMgaWQgZnJvbSBkcm1fZGV2aWNlOjp1bmlxdWUgaW50byB1c2VyIHNwYWNlLgogICovCiBpbnQgZHJtX2dldHVuaXF1ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCisJCSAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0JZHJtX2ZpbGVfdAkgKnByaXYJID0gZmlscC0+cHJpdmF0ZV9kYXRhOwotCWRybV9kZXZpY2VfdAkgKmRldgkgPSBwcml2LT5oZWFkLT5kZXY7Ci0JZHJtX3VuaXF1ZV90CSBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7Ci0JZHJtX3VuaXF1ZV90CSB1OworCWRybV9maWxlX3QgKnByaXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJZHJtX2RldmljZV90ICpkZXYgPSBwcml2LT5oZWFkLT5kZXY7CisJZHJtX3VuaXF1ZV90IF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKKwlkcm1fdW5pcXVlX3QgdTsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmdSwgYXJncCwgc2l6ZW9mKHUpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC03MSw3ICs3MSw3IEBACiAKIC8qKgogICogU2V0IHRoZSBidXMgaWQuCi0gKiAKKyAqCiAgKiBccGFyYW0gaW5vZGUgZGV2aWNlIGlub2RlLgogICogXHBhcmFtIGZpbHAgZmlsZSBwb2ludGVyLgogICogXHBhcmFtIGNtZCBjb21tYW5kLgpAQCAtODQsMzQgKzg0LDM5IEBACiAgKiB2ZXJzaW9uIDEuMSBvciBncmVhdGVyLgogICovCiBpbnQgZHJtX3NldHVuaXF1ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCisJCSAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0JZHJtX2ZpbGVfdAkgKnByaXYJID0gZmlscC0+cHJpdmF0ZV9kYXRhOwotCWRybV9kZXZpY2VfdAkgKmRldgkgPSBwcml2LT5oZWFkLT5kZXY7Ci0JZHJtX3VuaXF1ZV90CSB1OwotCWludAkJIGRvbWFpbiwgYnVzLCBzbG90LCBmdW5jLCByZXQ7CisJZHJtX2ZpbGVfdCAqcHJpdiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlkcm1fZGV2aWNlX3QgKmRldiA9IHByaXYtPmhlYWQtPmRldjsKKwlkcm1fdW5pcXVlX3QgdTsKKwlpbnQgZG9tYWluLCBidXMsIHNsb3QsIGZ1bmMsIHJldDsKIAotCWlmIChkZXYtPnVuaXF1ZV9sZW4gfHwgZGV2LT51bmlxdWUpIHJldHVybiAtRUJVU1k7CisJaWYgKGRldi0+dW5pcXVlX2xlbiB8fCBkZXYtPnVuaXF1ZSkKKwkJcmV0dXJuIC1FQlVTWTsKIAotCWlmIChjb3B5X2Zyb21fdXNlcigmdSwgKGRybV91bmlxdWVfdCBfX3VzZXIgKilhcmcsIHNpemVvZih1KSkpCisJaWYgKGNvcHlfZnJvbV91c2VyKCZ1LCAoZHJtX3VuaXF1ZV90IF9fdXNlciAqKSBhcmcsIHNpemVvZih1KSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JaWYgKCF1LnVuaXF1ZV9sZW4gfHwgdS51bmlxdWVfbGVuID4gMTAyNCkgcmV0dXJuIC1FSU5WQUw7CisJaWYgKCF1LnVuaXF1ZV9sZW4gfHwgdS51bmlxdWVfbGVuID4gMTAyNCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlkZXYtPnVuaXF1ZV9sZW4gPSB1LnVuaXF1ZV9sZW47Ci0JZGV2LT51bmlxdWUJPSBkcm1fYWxsb2ModS51bmlxdWVfbGVuICsgMSwgRFJNX01FTV9EUklWRVIpOwotCWlmKCFkZXYtPnVuaXF1ZSkgcmV0dXJuIC1FTk9NRU07CisJZGV2LT51bmlxdWUgPSBkcm1fYWxsb2ModS51bmlxdWVfbGVuICsgMSwgRFJNX01FTV9EUklWRVIpOworCWlmICghZGV2LT51bmlxdWUpCisJCXJldHVybiAtRU5PTUVNOwogCWlmIChjb3B5X2Zyb21fdXNlcihkZXYtPnVuaXF1ZSwgdS51bmlxdWUsIGRldi0+dW5pcXVlX2xlbikpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJZGV2LT51bmlxdWVbZGV2LT51bmlxdWVfbGVuXSA9ICdcMCc7CiAKLQlkZXYtPmRldm5hbWUgPSBkcm1fYWxsb2Moc3RybGVuKGRldi0+ZHJpdmVyLT5wY2lfZHJpdmVyLm5hbWUpICsgc3RybGVuKGRldi0+dW5pcXVlKSArIDIsCi0JCQkJICBEUk1fTUVNX0RSSVZFUik7CisJZGV2LT5kZXZuYW1lID0KKwkgICAgZHJtX2FsbG9jKHN0cmxlbihkZXYtPmRyaXZlci0+cGNpX2RyaXZlci5uYW1lKSArCisJCSAgICAgIHN0cmxlbihkZXYtPnVuaXF1ZSkgKyAyLCBEUk1fTUVNX0RSSVZFUik7CiAJaWYgKCFkZXYtPmRldm5hbWUpCiAJCXJldHVybiAtRU5PTUVNOwogCi0Jc3ByaW50ZihkZXYtPmRldm5hbWUsICIlc0AlcyIsIGRldi0+ZHJpdmVyLT5wY2lfZHJpdmVyLm5hbWUsIGRldi0+dW5pcXVlKTsKKwlzcHJpbnRmKGRldi0+ZGV2bmFtZSwgIiVzQCVzIiwgZGV2LT5kcml2ZXItPnBjaV9kcml2ZXIubmFtZSwKKwkJZGV2LT51bmlxdWUpOwogCiAJLyogUmV0dXJuIGVycm9yIGlmIHRoZSBidXNpZCBzdWJtaXR0ZWQgZG9lc24ndCBtYXRjaCB0aGUgZGV2aWNlJ3MgYWN0dWFsCiAJICogYnVzaWQuCkBAIC0xMjEsMTggKzEyNiwxNiBAQAogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCWRvbWFpbiA9IGJ1cyA+PiA4OwogCWJ1cyAmPSAweGZmOwotCQorCiAJaWYgKChkb21haW4gIT0gZGV2LT5wY2lfZG9tYWluKSB8fAogCSAgICAoYnVzICE9IGRldi0+cGNpX2J1cykgfHwKLQkgICAgKHNsb3QgIT0gZGV2LT5wY2lfc2xvdCkgfHwKLQkgICAgKGZ1bmMgIT0gZGV2LT5wY2lfZnVuYykpCisJICAgIChzbG90ICE9IGRldi0+cGNpX3Nsb3QpIHx8IChmdW5jICE9IGRldi0+cGNpX2Z1bmMpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1kcm1fc2V0X2J1c2lkKGRybV9kZXZpY2VfdCAqZGV2KQorc3RhdGljIGludCBkcm1fc2V0X2J1c2lkKGRybV9kZXZpY2VfdCAqIGRldikKIHsKIAlpZiAoZGV2LT51bmlxdWUgIT0gTlVMTCkKIAkJcmV0dXJuIEVCVVNZOwpAQCAtMTQzLDE5ICsxNDYsMjAgQEAKIAkJcmV0dXJuIEVOT01FTTsKIAogCXNucHJpbnRmKGRldi0+dW5pcXVlLCBkZXYtPnVuaXF1ZV9sZW4sICJwY2k6JTA0eDolMDJ4OiUwMnguJWQiLAotCQlkZXYtPnBjaV9kb21haW4sIGRldi0+cGNpX2J1cywgZGV2LT5wY2lfc2xvdCwgZGV2LT5wY2lfZnVuYyk7CisJCSBkZXYtPnBjaV9kb21haW4sIGRldi0+cGNpX2J1cywgZGV2LT5wY2lfc2xvdCwgZGV2LT5wY2lfZnVuYyk7CiAKLQlkZXYtPmRldm5hbWUgPSBkcm1fYWxsb2Moc3RybGVuKGRldi0+ZHJpdmVyLT5wY2lfZHJpdmVyLm5hbWUpICsgZGV2LT51bmlxdWVfbGVuICsgMiwKLQkJCQlEUk1fTUVNX0RSSVZFUik7CisJZGV2LT5kZXZuYW1lID0KKwkgICAgZHJtX2FsbG9jKHN0cmxlbihkZXYtPmRyaXZlci0+cGNpX2RyaXZlci5uYW1lKSArIGRldi0+dW5pcXVlX2xlbiArCisJCSAgICAgIDIsIERSTV9NRU1fRFJJVkVSKTsKIAlpZiAoZGV2LT5kZXZuYW1lID09IE5VTEwpCiAJCXJldHVybiBFTk9NRU07CiAKLQlzcHJpbnRmKGRldi0+ZGV2bmFtZSwgIiVzQCVzIiwgZGV2LT5kcml2ZXItPnBjaV9kcml2ZXIubmFtZSwgZGV2LT51bmlxdWUpOworCXNwcmludGYoZGV2LT5kZXZuYW1lLCAiJXNAJXMiLCBkZXYtPmRyaXZlci0+cGNpX2RyaXZlci5uYW1lLAorCQlkZXYtPnVuaXF1ZSk7CiAKIAlyZXR1cm4gMDsKIH0KIAotCiAvKioKICAqIEdldCBhIG1hcHBpbmcgaW5mb3JtYXRpb24uCiAgKgpAQCAtMTYzLDIzICsxNjcsMjMgQEAKICAqIFxwYXJhbSBmaWxwIGZpbGUgcG9pbnRlci4KICAqIFxwYXJhbSBjbWQgY29tbWFuZC4KICAqIFxwYXJhbSBhcmcgdXNlciBhcmd1bWVudCwgcG9pbnRpbmcgdG8gYSBkcm1fbWFwIHN0cnVjdHVyZS4KLSAqIAorICoKICAqIFxyZXR1cm4gemVybyBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgbnVtYmVyIG9uIGZhaWx1cmUuCiAgKgogICogU2VhcmNoZXMgZm9yIHRoZSBtYXBwaW5nIHdpdGggdGhlIHNwZWNpZmllZCBvZmZzZXQgYW5kIGNvcGllcyBpdHMgaW5mb3JtYXRpb24KICAqIGludG8gdXNlcnNwYWNlCiAgKi8KLWludCBkcm1fZ2V0bWFwKCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnICkKK2ludCBkcm1fZ2V0bWFwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAorCSAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlkcm1fZmlsZV90ICAgKnByaXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0JZHJtX2RldmljZV90ICpkZXYgID0gcHJpdi0+aGVhZC0+ZGV2OwotCWRybV9tYXBfdCAgICBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7Ci0JZHJtX21hcF90ICAgIG1hcDsKKwlkcm1fZmlsZV90ICpwcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCWRybV9kZXZpY2VfdCAqZGV2ID0gcHJpdi0+aGVhZC0+ZGV2OworCWRybV9tYXBfdCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CisJZHJtX21hcF90IG1hcDsKIAlkcm1fbWFwX2xpc3RfdCAqcl9saXN0ID0gTlVMTDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OwotCWludCAgICAgICAgICBpZHg7Ci0JaW50CSAgICAgaTsKKwlpbnQgaWR4OworCWludCBpOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZtYXAsIGFyZ3AsIHNpemVvZihtYXApKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0xOTMsMjYgKzE5NywyNyBAQAogCiAJaSA9IDA7CiAJbGlzdF9mb3JfZWFjaChsaXN0LCAmZGV2LT5tYXBsaXN0LT5oZWFkKSB7Ci0JCWlmKGkgPT0gaWR4KSB7CisJCWlmIChpID09IGlkeCkgewogCQkJcl9saXN0ID0gbGlzdF9lbnRyeShsaXN0LCBkcm1fbWFwX2xpc3RfdCwgaGVhZCk7CiAJCQlicmVhazsKIAkJfQogCQlpKys7CiAJfQotCWlmKCFyX2xpc3QgfHwgIXJfbGlzdC0+bWFwKSB7CisJaWYgKCFyX2xpc3QgfHwgIXJfbGlzdC0+bWFwKSB7CiAJCXVwKCZkZXYtPnN0cnVjdF9zZW0pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAltYXAub2Zmc2V0ID0gcl9saXN0LT5tYXAtPm9mZnNldDsKLQltYXAuc2l6ZSAgID0gcl9saXN0LT5tYXAtPnNpemU7Ci0JbWFwLnR5cGUgICA9IHJfbGlzdC0+bWFwLT50eXBlOwotCW1hcC5mbGFncyAgPSByX2xpc3QtPm1hcC0+ZmxhZ3M7Ci0JbWFwLmhhbmRsZSA9ICh2b2lkICopKHVuc2lnbmVkIGxvbmcpIHJfbGlzdC0+dXNlcl90b2tlbjsKLQltYXAubXRyciAgID0gcl9saXN0LT5tYXAtPm10cnI7CisJbWFwLnNpemUgPSByX2xpc3QtPm1hcC0+c2l6ZTsKKwltYXAudHlwZSA9IHJfbGlzdC0+bWFwLT50eXBlOworCW1hcC5mbGFncyA9IHJfbGlzdC0+bWFwLT5mbGFnczsKKwltYXAuaGFuZGxlID0gKHZvaWQgKikodW5zaWduZWQgbG9uZylyX2xpc3QtPnVzZXJfdG9rZW47CisJbWFwLm10cnIgPSByX2xpc3QtPm1hcC0+bXRycjsKIAl1cCgmZGV2LT5zdHJ1Y3Rfc2VtKTsKIAotCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJm1hcCwgc2l6ZW9mKG1hcCkpKSByZXR1cm4gLUVGQVVMVDsKKwlpZiAoY29weV90b191c2VyKGFyZ3AsICZtYXAsIHNpemVvZihtYXApKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIyMyw4MyArMjI4LDgxIEBACiAgKiBccGFyYW0gZmlscCBmaWxlIHBvaW50ZXIuCiAgKiBccGFyYW0gY21kIGNvbW1hbmQuCiAgKiBccGFyYW0gYXJnIHVzZXIgYXJndW1lbnQsIHBvaW50aW5nIHRvIGEgZHJtX2NsaWVudCBzdHJ1Y3R1cmUuCi0gKiAKKyAqCiAgKiBccmV0dXJuIHplcm8gb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIG51bWJlciBvbiBmYWlsdXJlLgogICoKICAqIFNlYXJjaGVzIGZvciB0aGUgY2xpZW50IHdpdGggdGhlIHNwZWNpZmllZCBpbmRleCBhbmQgY29waWVzIGl0cyBpbmZvcm1hdGlvbgogICogaW50byB1c2Vyc3BhY2UKICAqLwotaW50IGRybV9nZXRjbGllbnQoIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAotCQkgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcgKQoraW50IGRybV9nZXRjbGllbnQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCisJCSAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0JZHJtX2ZpbGVfdCAgICpwcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwotCWRybV9kZXZpY2VfdCAqZGV2ICA9IHByaXYtPmhlYWQtPmRldjsKKwlkcm1fZmlsZV90ICpwcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCWRybV9kZXZpY2VfdCAqZGV2ID0gcHJpdi0+aGVhZC0+ZGV2OwogCWRybV9jbGllbnRfdCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAJZHJtX2NsaWVudF90IGNsaWVudDsKLQlkcm1fZmlsZV90ICAgKnB0OwotCWludCAgICAgICAgICBpZHg7Ci0JaW50ICAgICAgICAgIGk7CisJZHJtX2ZpbGVfdCAqcHQ7CisJaW50IGlkeDsKKwlpbnQgaTsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmY2xpZW50LCBhcmdwLCBzaXplb2YoY2xpZW50KSkpCiAJCXJldHVybiAtRUZBVUxUOwogCWlkeCA9IGNsaWVudC5pZHg7CiAJZG93bigmZGV2LT5zdHJ1Y3Rfc2VtKTsKLQlmb3IgKGkgPSAwLCBwdCA9IGRldi0+ZmlsZV9maXJzdDsgaSA8IGlkeCAmJiBwdDsgaSsrLCBwdCA9IHB0LT5uZXh0KQotCQk7CisJZm9yIChpID0gMCwgcHQgPSBkZXYtPmZpbGVfZmlyc3Q7IGkgPCBpZHggJiYgcHQ7IGkrKywgcHQgPSBwdC0+bmV4dCkgOwogCiAJaWYgKCFwdCkgewogCQl1cCgmZGV2LT5zdHJ1Y3Rfc2VtKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWNsaWVudC5hdXRoICA9IHB0LT5hdXRoZW50aWNhdGVkOwotCWNsaWVudC5waWQgICA9IHB0LT5waWQ7Ci0JY2xpZW50LnVpZCAgID0gcHQtPnVpZDsKKwljbGllbnQuYXV0aCA9IHB0LT5hdXRoZW50aWNhdGVkOworCWNsaWVudC5waWQgPSBwdC0+cGlkOworCWNsaWVudC51aWQgPSBwdC0+dWlkOwogCWNsaWVudC5tYWdpYyA9IHB0LT5tYWdpYzsKLQljbGllbnQuaW9jcyAgPSBwdC0+aW9jdGxfY291bnQ7CisJY2xpZW50LmlvY3MgPSBwdC0+aW9jdGxfY291bnQ7CiAJdXAoJmRldi0+c3RydWN0X3NlbSk7CiAKLQlpZiAoY29weV90b191c2VyKChkcm1fY2xpZW50X3QgX191c2VyICopYXJnLCAmY2xpZW50LCBzaXplb2YoY2xpZW50KSkpCisJaWYgKGNvcHlfdG9fdXNlcigoZHJtX2NsaWVudF90IF9fdXNlciAqKSBhcmcsICZjbGllbnQsIHNpemVvZihjbGllbnQpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJcmV0dXJuIDA7CiB9CiAKLS8qKiAKLSAqIEdldCBzdGF0aXN0aWNzIGluZm9ybWF0aW9uLiAKLSAqIAorLyoqCisgKiBHZXQgc3RhdGlzdGljcyBpbmZvcm1hdGlvbi4KKyAqCiAgKiBccGFyYW0gaW5vZGUgZGV2aWNlIGlub2RlLgogICogXHBhcmFtIGZpbHAgZmlsZSBwb2ludGVyLgogICogXHBhcmFtIGNtZCBjb21tYW5kLgogICogXHBhcmFtIGFyZyB1c2VyIGFyZ3VtZW50LCBwb2ludGluZyB0byBhIGRybV9zdGF0cyBzdHJ1Y3R1cmUuCi0gKiAKKyAqCiAgKiBccmV0dXJuIHplcm8gb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIG51bWJlciBvbiBmYWlsdXJlLgogICovCi1pbnQgZHJtX2dldHN0YXRzKCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcgKQoraW50IGRybV9nZXRzdGF0cyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCWRybV9maWxlX3QgICAqcHJpdiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKLQlkcm1fZGV2aWNlX3QgKmRldiAgPSBwcml2LT5oZWFkLT5kZXY7Ci0JZHJtX3N0YXRzX3QgIHN0YXRzOwotCWludCAgICAgICAgICBpOworCWRybV9maWxlX3QgKnByaXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJZHJtX2RldmljZV90ICpkZXYgPSBwcml2LT5oZWFkLT5kZXY7CisJZHJtX3N0YXRzX3Qgc3RhdHM7CisJaW50IGk7CiAKIAltZW1zZXQoJnN0YXRzLCAwLCBzaXplb2Yoc3RhdHMpKTsKLQkKKwogCWRvd24oJmRldi0+c3RydWN0X3NlbSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZGV2LT5jb3VudGVyczsgaSsrKSB7CiAJCWlmIChkZXYtPnR5cGVzW2ldID09IF9EUk1fU1RBVF9MT0NLKQogCQkJc3RhdHMuZGF0YVtpXS52YWx1ZQotCQkJCT0gKGRldi0+bG9jay5od19sb2NrCi0JCQkJICAgPyBkZXYtPmxvY2suaHdfbG9jay0+bG9jayA6IDApOwotCQllbHNlIAorCQkJICAgID0gKGRldi0+bG9jay5od19sb2NrID8gZGV2LT5sb2NrLmh3X2xvY2stPmxvY2sgOiAwKTsKKwkJZWxzZQogCQkJc3RhdHMuZGF0YVtpXS52YWx1ZSA9IGF0b21pY19yZWFkKCZkZXYtPmNvdW50c1tpXSk7Ci0JCXN0YXRzLmRhdGFbaV0udHlwZSAgPSBkZXYtPnR5cGVzW2ldOworCQlzdGF0cy5kYXRhW2ldLnR5cGUgPSBkZXYtPnR5cGVzW2ldOwogCX0KLQkKKwogCXN0YXRzLmNvdW50ID0gZGV2LT5jb3VudGVyczsKIAogCXVwKCZkZXYtPnN0cnVjdF9zZW0pOwogCi0JaWYgKGNvcHlfdG9fdXNlcigoZHJtX3N0YXRzX3QgX191c2VyICopYXJnLCAmc3RhdHMsIHNpemVvZihzdGF0cykpKQorCWlmIChjb3B5X3RvX3VzZXIoKGRybV9zdGF0c190IF9fdXNlciAqKSBhcmcsICZzdGF0cywgc2l6ZW9mKHN0YXRzKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCXJldHVybiAwOwogfQpAQCAtMzUyLDcgKzM1NSw4IEBACiAKIAlpZiAoc3YuZHJtX2RkX21ham9yICE9IC0xKSB7CiAJCWlmIChzdi5kcm1fZGRfbWFqb3IgIT0gdmVyc2lvbi52ZXJzaW9uX21ham9yIHx8Ci0JCSAgICBzdi5kcm1fZGRfbWlub3IgPCAwIHx8IHN2LmRybV9kZF9taW5vciA+IHZlcnNpb24udmVyc2lvbl9taW5vcikKKwkJICAgIHN2LmRybV9kZF9taW5vciA8IDAKKwkJICAgIHx8IHN2LmRybV9kZF9taW5vciA+IHZlcnNpb24udmVyc2lvbl9taW5vcikKIAkJCXJldHVybiBFSU5WQUw7CiAKIAkJaWYgKGRldi0+ZHJpdmVyLT5zZXRfdmVyc2lvbikKQEAgLTM2Myw3ICszNjcsNyBAQAogCiAvKiogTm8tb3AgaW9jdGwuICovCiBpbnQgZHJtX25vb3Aoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsCi0JICAgICAgIHVuc2lnbmVkIGxvbmcgYXJnKQorCSAgICAgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJRFJNX0RFQlVHKCJcbiIpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9kcm1faXJxLmMgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9pcnEuYwppbmRleCBjZGQ0YWVjLi5iMGQ0YjIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9pcnEuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9pcnEuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKgotICogXGZpbGUgZHJtX2lycS5oIAorICogXGZpbGUgZHJtX2lycS5jCiAgKiBJUlEgc3VwcG9ydAogICoKICAqIFxhdXRob3IgUmlja2FyZCBFLiAoUmlrKSBGYWl0aCA8ZmFpdGhAdmFsaW51eC5jb20+CkBAIC0zOSwxOSArMzksMTkgQEAKIAogLyoqCiAgKiBHZXQgaW50ZXJydXB0IGZyb20gYnVzIGlkLgotICogCisgKgogICogXHBhcmFtIGlub2RlIGRldmljZSBpbm9kZS4KICAqIFxwYXJhbSBmaWxwIGZpbGUgcG9pbnRlci4KICAqIFxwYXJhbSBjbWQgY29tbWFuZC4KICAqIFxwYXJhbSBhcmcgdXNlciBhcmd1bWVudCwgcG9pbnRpbmcgdG8gYSBkcm1faXJxX2J1c2lkIHN0cnVjdHVyZS4KICAqIFxyZXR1cm4gemVybyBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgbnVtYmVyIG9uIGZhaWx1cmUuCi0gKiAKKyAqCiAgKiBGaW5kcyB0aGUgUENJIGRldmljZSB3aXRoIHRoZSBzcGVjaWZpZWQgYnVzIGlkIGFuZCBnZXRzIGl0cyBJUlEgbnVtYmVyLgogICogVGhpcyBJT0NUTCBpcyBkZXByZWNhdGVkLCBhbmQgd2lsbCBub3cgcmV0dXJuIEVJTlZBTCBmb3IgYW55IGJ1c2lkIG5vdCBlcXVhbAogICogdG8gdGhhdCBvZiB0aGUgZGV2aWNlIHRoYXQgdGhpcyBEUk0gaW5zdGFuY2UgYXR0YWNoZWQgdG8uCiAgKi8KIGludCBkcm1faXJxX2J5X2J1c2lkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAotCQkgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKKwkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlkcm1fZmlsZV90ICpwcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCWRybV9kZXZpY2VfdCAqZGV2ID0gcHJpdi0+aGVhZC0+ZGV2OwpAQCAtNjYsMTQgKzY2LDEyIEBACiAKIAlpZiAoKHAuYnVzbnVtID4+IDgpICE9IGRldi0+cGNpX2RvbWFpbiB8fAogCSAgICAocC5idXNudW0gJiAweGZmKSAhPSBkZXYtPnBjaV9idXMgfHwKLQkgICAgcC5kZXZudW0gIT0gZGV2LT5wY2lfc2xvdCB8fAotCSAgICBwLmZ1bmNudW0gIT0gZGV2LT5wY2lfZnVuYykKKwkgICAgcC5kZXZudW0gIT0gZGV2LT5wY2lfc2xvdCB8fCBwLmZ1bmNudW0gIT0gZGV2LT5wY2lfZnVuYykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlwLmlycSA9IGRldi0+aXJxOwogCi0JRFJNX0RFQlVHKCIlZDolZDolZCA9PiBJUlEgJWRcbiIsCi0JCSAgcC5idXNudW0sIHAuZGV2bnVtLCBwLmZ1bmNudW0sIHAuaXJxKTsKKwlEUk1fREVCVUcoIiVkOiVkOiVkID0+IElSUSAlZFxuIiwgcC5idXNudW0sIHAuZGV2bnVtLCBwLmZ1bmNudW0sIHAuaXJxKTsKIAlpZiAoY29weV90b191c2VyKGFyZ3AsICZwLCBzaXplb2YocCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAlyZXR1cm4gMDsKQEAgLTg5LDYxICs4Nyw2MSBAQAogICogXGMgZHJtX2RyaXZlcl9pcnFfcHJlaW5zdGFsbCgpIGFuZCBcYyBkcm1fZHJpdmVyX2lycV9wb3N0aW5zdGFsbCgpIGZ1bmN0aW9ucwogICogYmVmb3JlIGFuZCBhZnRlciB0aGUgaW5zdGFsbGF0aW9uLgogICovCi1zdGF0aWMgaW50IGRybV9pcnFfaW5zdGFsbCggZHJtX2RldmljZV90ICpkZXYgKQorc3RhdGljIGludCBkcm1faXJxX2luc3RhbGwoZHJtX2RldmljZV90ICogZGV2KQogewogCWludCByZXQ7Ci0JdW5zaWduZWQgbG9uZyBzaF9mbGFncz0wOworCXVuc2lnbmVkIGxvbmcgc2hfZmxhZ3MgPSAwOwogCiAJaWYgKCFkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX0hBVkVfSVJRKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoIGRldi0+aXJxID09IDAgKQorCWlmIChkZXYtPmlycSA9PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWRvd24oICZkZXYtPnN0cnVjdF9zZW0gKTsKKwlkb3duKCZkZXYtPnN0cnVjdF9zZW0pOwogCiAJLyogRHJpdmVyIG11c3QgaGF2ZSBiZWVuIGluaXRpYWxpemVkICovCi0JaWYgKCAhZGV2LT5kZXZfcHJpdmF0ZSApIHsKLQkJdXAoICZkZXYtPnN0cnVjdF9zZW0gKTsKKwlpZiAoIWRldi0+ZGV2X3ByaXZhdGUpIHsKKwkJdXAoJmRldi0+c3RydWN0X3NlbSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmICggZGV2LT5pcnFfZW5hYmxlZCApIHsKLQkJdXAoICZkZXYtPnN0cnVjdF9zZW0gKTsKKwlpZiAoZGV2LT5pcnFfZW5hYmxlZCkgeworCQl1cCgmZGV2LT5zdHJ1Y3Rfc2VtKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAJZGV2LT5pcnFfZW5hYmxlZCA9IDE7Ci0JdXAoICZkZXYtPnN0cnVjdF9zZW0gKTsKKwl1cCgmZGV2LT5zdHJ1Y3Rfc2VtKTsKIAotCURSTV9ERUJVRyggIiVzOiBpcnE9JWRcbiIsIF9fRlVOQ1RJT05fXywgZGV2LT5pcnEgKTsKKwlEUk1fREVCVUcoIiVzOiBpcnE9JWRcbiIsIF9fRlVOQ1RJT05fXywgZGV2LT5pcnEpOwogCiAJaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfSVJRX1ZCTCkpIHsKIAkJaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2LT52YmxfcXVldWUpOwotCQkKLQkJc3Bpbl9sb2NrX2luaXQoICZkZXYtPnZibF9sb2NrICk7Ci0JCQotCQlJTklUX0xJU1RfSEVBRCggJmRldi0+dmJsX3NpZ3MuaGVhZCApOwotCQkKKworCQlzcGluX2xvY2tfaW5pdCgmZGV2LT52YmxfbG9jayk7CisKKwkJSU5JVF9MSVNUX0hFQUQoJmRldi0+dmJsX3NpZ3MuaGVhZCk7CisKIAkJZGV2LT52YmxfcGVuZGluZyA9IDA7CiAJfQogCi0JCQkJLyogQmVmb3JlIGluc3RhbGxpbmcgaGFuZGxlciAqLworCS8qIEJlZm9yZSBpbnN0YWxsaW5nIGhhbmRsZXIgKi8KIAlkZXYtPmRyaXZlci0+aXJxX3ByZWluc3RhbGwoZGV2KTsKIAotCQkJCS8qIEluc3RhbGwgaGFuZGxlciAqLworCS8qIEluc3RhbGwgaGFuZGxlciAqLwogCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX0lSUV9TSEFSRUQpKQogCQlzaF9mbGFncyA9IFNBX1NISVJROwotCQotCXJldCA9IHJlcXVlc3RfaXJxKCBkZXYtPmlycSwgZGV2LT5kcml2ZXItPmlycV9oYW5kbGVyLAotCQkJICAgc2hfZmxhZ3MsIGRldi0+ZGV2bmFtZSwgZGV2ICk7Ci0JaWYgKCByZXQgPCAwICkgewotCQlkb3duKCAmZGV2LT5zdHJ1Y3Rfc2VtICk7CisKKwlyZXQgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgZGV2LT5kcml2ZXItPmlycV9oYW5kbGVyLAorCQkJICBzaF9mbGFncywgZGV2LT5kZXZuYW1lLCBkZXYpOworCWlmIChyZXQgPCAwKSB7CisJCWRvd24oJmRldi0+c3RydWN0X3NlbSk7CiAJCWRldi0+aXJxX2VuYWJsZWQgPSAwOwotCQl1cCggJmRldi0+c3RydWN0X3NlbSApOworCQl1cCgmZGV2LT5zdHJ1Y3Rfc2VtKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQkJCQkvKiBBZnRlciBpbnN0YWxsaW5nIGhhbmRsZXIgKi8KKwkvKiBBZnRlciBpbnN0YWxsaW5nIGhhbmRsZXIgKi8KIAlkZXYtPmRyaXZlci0+aXJxX3Bvc3RpbnN0YWxsKGRldik7CiAKIAlyZXR1cm4gMDsKQEAgLTE1NiwyOSArMTU0LDMwIEBACiAgKgogICogQ2FsbHMgdGhlIGRyaXZlcidzIFxjIGRybV9kcml2ZXJfaXJxX3VuaW5zdGFsbCgpIGZ1bmN0aW9uLCBhbmQgc3RvcHMgdGhlIGlycS4KICAqLwotaW50IGRybV9pcnFfdW5pbnN0YWxsKCBkcm1fZGV2aWNlX3QgKmRldiApCitpbnQgZHJtX2lycV91bmluc3RhbGwoZHJtX2RldmljZV90ICogZGV2KQogewogCWludCBpcnFfZW5hYmxlZDsKIAogCWlmICghZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9IQVZFX0lSUSkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZG93biggJmRldi0+c3RydWN0X3NlbSApOworCWRvd24oJmRldi0+c3RydWN0X3NlbSk7CiAJaXJxX2VuYWJsZWQgPSBkZXYtPmlycV9lbmFibGVkOwogCWRldi0+aXJxX2VuYWJsZWQgPSAwOwotCXVwKCAmZGV2LT5zdHJ1Y3Rfc2VtICk7CisJdXAoJmRldi0+c3RydWN0X3NlbSk7CiAKLQlpZiAoICFpcnFfZW5hYmxlZCApCisJaWYgKCFpcnFfZW5hYmxlZCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlEUk1fREVCVUcoICIlczogaXJxPSVkXG4iLCBfX0ZVTkNUSU9OX18sIGRldi0+aXJxICk7CisJRFJNX0RFQlVHKCIlczogaXJxPSVkXG4iLCBfX0ZVTkNUSU9OX18sIGRldi0+aXJxKTsKIAogCWRldi0+ZHJpdmVyLT5pcnFfdW5pbnN0YWxsKGRldik7CiAKLQlmcmVlX2lycSggZGV2LT5pcnEsIGRldiApOworCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwogCiAJcmV0dXJuIDA7CiB9CisKIEVYUE9SVF9TWU1CT0woZHJtX2lycV91bmluc3RhbGwpOwogCiAvKioKQEAgLTE5MiwzMCArMTkxLDMwIEBACiAgKgogICogQ2FsbHMgaXJxX2luc3RhbGwoKSBvciBpcnFfdW5pbnN0YWxsKCkgYWNjb3JkaW5nIHRvIFxwIGFyZy4KICAqLwotaW50IGRybV9jb250cm9sKCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyApCitpbnQgZHJtX2NvbnRyb2woc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCisJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCWRybV9maWxlX3QgKnByaXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAJZHJtX2RldmljZV90ICpkZXYgPSBwcml2LT5oZWFkLT5kZXY7CiAJZHJtX2NvbnRyb2xfdCBjdGw7Ci0JCisKIAkvKiBpZiB3ZSBoYXZlbid0IGlycSB3ZSBmYWxsYmFjayBmb3IgY29tcGF0aWJpbGl0eSByZWFzb25zIC0gdGhpcyB1c2VkIHRvIGJlIGEgc2VwYXJhdGUgZnVuY3Rpb24gaW4gZHJtX2RtYS5oICovCiAKLQlpZiAoIGNvcHlfZnJvbV91c2VyKCAmY3RsLCAoZHJtX2NvbnRyb2xfdCBfX3VzZXIgKilhcmcsIHNpemVvZihjdGwpICkgKQorCWlmIChjb3B5X2Zyb21fdXNlcigmY3RsLCAoZHJtX2NvbnRyb2xfdCBfX3VzZXIgKikgYXJnLCBzaXplb2YoY3RsKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0Jc3dpdGNoICggY3RsLmZ1bmMgKSB7CisJc3dpdGNoIChjdGwuZnVuYykgewogCWNhc2UgRFJNX0lOU1RfSEFORExFUjoKIAkJaWYgKCFkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX0hBVkVfSVJRKSkKIAkJCXJldHVybiAwOwogCQlpZiAoZGV2LT5pZl92ZXJzaW9uIDwgRFJNX0lGX1ZFUlNJT04oMSwgMikgJiYKIAkJICAgIGN0bC5pcnEgIT0gZGV2LT5pcnEpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJcmV0dXJuIGRybV9pcnFfaW5zdGFsbCggZGV2ICk7CisJCXJldHVybiBkcm1faXJxX2luc3RhbGwoZGV2KTsKIAljYXNlIERSTV9VTklOU1RfSEFORExFUjoKIAkJaWYgKCFkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX0hBVkVfSVJRKSkKIAkJCXJldHVybiAwOwotCQlyZXR1cm4gZHJtX2lycV91bmluc3RhbGwoIGRldiApOworCQlyZXR1cm4gZHJtX2lycV91bmluc3RhbGwoZGV2KTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0yMzAsNyArMjI5LDcgQEAKICAqIFxwYXJhbSBkYXRhIHVzZXIgYXJndW1lbnQsIHBvaW50aW5nIHRvIGEgZHJtX3dhaXRfdmJsYW5rIHN0cnVjdHVyZS4KICAqIFxyZXR1cm4gemVybyBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgbnVtYmVyIG9uIGZhaWx1cmUuCiAgKgotICogVmVyaWZpZXMgdGhlIElSUSBpcyBpbnN0YWxsZWQuIAorICogVmVyaWZpZXMgdGhlIElSUSBpcyBpbnN0YWxsZWQuCiAgKgogICogSWYgYSBzaWduYWwgaXMgcmVxdWVzdGVkIGNoZWNrcyBpZiB0aGlzIHRhc2sgaGFzIGFscmVhZHkgc2NoZWR1bGVkIHRoZSBzYW1lIHNpZ25hbAogICogZm9yIHRoZSBzYW1lIHZibGFuayBzZXF1ZW5jZSBudW1iZXIgLSBub3RoaW5nIHRvIGJlIGRvbmUgaW4KQEAgLTI0MCw3ICsyMzksNyBAQAogICoKICAqIElmIGEgc2lnbmFsIGlzIG5vdCByZXF1ZXN0ZWQsIHRoZW4gY2FsbHMgdmJsYW5rX3dhaXQoKS4KICAqLwotaW50IGRybV93YWl0X3ZibGFuayggRFJNX0lPQ1RMX0FSR1MgKQoraW50IGRybV93YWl0X3ZibGFuayhEUk1fSU9DVExfQVJHUykKIHsKIAlkcm1fZmlsZV90ICpwcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCWRybV9kZXZpY2VfdCAqZGV2ID0gcHJpdi0+aGVhZC0+ZGV2OwpAQCAtMjU2LDExICsyNTUsMTEgQEAKIAlpZiAoIWRldi0+aXJxKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCURSTV9DT1BZX0ZST01fVVNFUl9JT0NUTCggdmJsd2FpdCwgYXJncCwgc2l6ZW9mKHZibHdhaXQpICk7CisJRFJNX0NPUFlfRlJPTV9VU0VSX0lPQ1RMKHZibHdhaXQsIGFyZ3AsIHNpemVvZih2Ymx3YWl0KSk7CiAKLQlzd2l0Y2ggKCB2Ymx3YWl0LnJlcXVlc3QudHlwZSAmIH5fRFJNX1ZCTEFOS19GTEFHU19NQVNLICkgeworCXN3aXRjaCAodmJsd2FpdC5yZXF1ZXN0LnR5cGUgJiB+X0RSTV9WQkxBTktfRkxBR1NfTUFTSykgewogCWNhc2UgX0RSTV9WQkxBTktfUkVMQVRJVkU6Ci0JCXZibHdhaXQucmVxdWVzdC5zZXF1ZW5jZSArPSBhdG9taWNfcmVhZCggJmRldi0+dmJsX3JlY2VpdmVkICk7CisJCXZibHdhaXQucmVxdWVzdC5zZXF1ZW5jZSArPSBhdG9taWNfcmVhZCgmZGV2LT52YmxfcmVjZWl2ZWQpOwogCQl2Ymx3YWl0LnJlcXVlc3QudHlwZSAmPSB+X0RSTV9WQkxBTktfUkVMQVRJVkU7CiAJY2FzZSBfRFJNX1ZCTEFOS19BQlNPTFVURToKIAkJYnJlYWs7CkBAIC0yNjksNjQgKzI2OCw2OCBAQAogCX0KIAogCWZsYWdzID0gdmJsd2FpdC5yZXF1ZXN0LnR5cGUgJiBfRFJNX1ZCTEFOS19GTEFHU19NQVNLOwotCQotCWlmICggZmxhZ3MgJiBfRFJNX1ZCTEFOS19TSUdOQUwgKSB7CisKKwlpZiAoZmxhZ3MgJiBfRFJNX1ZCTEFOS19TSUdOQUwpIHsKIAkJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKIAkJZHJtX3ZibF9zaWdfdCAqdmJsX3NpZzsKLQkJCi0JCXZibHdhaXQucmVwbHkuc2VxdWVuY2UgPSBhdG9taWNfcmVhZCggJmRldi0+dmJsX3JlY2VpdmVkICk7CiAKLQkJc3Bpbl9sb2NrX2lycXNhdmUoICZkZXYtPnZibF9sb2NrLCBpcnFmbGFncyApOworCQl2Ymx3YWl0LnJlcGx5LnNlcXVlbmNlID0gYXRvbWljX3JlYWQoJmRldi0+dmJsX3JlY2VpdmVkKTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT52YmxfbG9jaywgaXJxZmxhZ3MpOwogCiAJCS8qIENoZWNrIGlmIHRoaXMgdGFzayBoYXMgYWxyZWFkeSBzY2hlZHVsZWQgdGhlIHNhbWUgc2lnbmFsCiAJCSAqIGZvciB0aGUgc2FtZSB2Ymxhbmsgc2VxdWVuY2UgbnVtYmVyOyBub3RoaW5nIHRvIGJlIGRvbmUgaW4KIAkJICogdGhhdCBjYXNlCiAJCSAqLwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KCB2Ymxfc2lnLCAmZGV2LT52Ymxfc2lncy5oZWFkLCBoZWFkICkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZibF9zaWcsICZkZXYtPnZibF9zaWdzLmhlYWQsIGhlYWQpIHsKIAkJCWlmICh2Ymxfc2lnLT5zZXF1ZW5jZSA9PSB2Ymx3YWl0LnJlcXVlc3Quc2VxdWVuY2UKIAkJCSAgICAmJiB2Ymxfc2lnLT5pbmZvLnNpX3NpZ25vID09IHZibHdhaXQucmVxdWVzdC5zaWduYWwKLQkJCSAgICAmJiB2Ymxfc2lnLT50YXNrID09IGN1cnJlbnQpCi0JCQl7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSggJmRldi0+dmJsX2xvY2ssIGlycWZsYWdzICk7CisJCQkgICAgJiYgdmJsX3NpZy0+dGFzayA9PSBjdXJyZW50KSB7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT52YmxfbG9jaywKKwkJCQkJCSAgICAgICBpcnFmbGFncyk7CiAJCQkJZ290byBkb25lOwogCQkJfQogCQl9CiAKLQkJaWYgKCBkZXYtPnZibF9wZW5kaW5nID49IDEwMCApIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoICZkZXYtPnZibF9sb2NrLCBpcnFmbGFncyApOworCQlpZiAoZGV2LT52YmxfcGVuZGluZyA+PSAxMDApIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+dmJsX2xvY2ssIGlycWZsYWdzKTsKIAkJCXJldHVybiAtRUJVU1k7CiAJCX0KIAogCQlkZXYtPnZibF9wZW5kaW5nKys7CiAKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSggJmRldi0+dmJsX2xvY2ssIGlycWZsYWdzICk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+dmJsX2xvY2ssIGlycWZsYWdzKTsKIAotCQlpZiAoICEoIHZibF9zaWcgPSBkcm1fYWxsb2MoIHNpemVvZiggZHJtX3ZibF9zaWdfdCApLCBEUk1fTUVNX0RSSVZFUiApICkgKSB7CisJCWlmICghCisJCSAgICAodmJsX3NpZyA9CisJCSAgICAgZHJtX2FsbG9jKHNpemVvZihkcm1fdmJsX3NpZ190KSwgRFJNX01FTV9EUklWRVIpKSkgewogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAotCQltZW1zZXQoICh2b2lkICopdmJsX3NpZywgMCwgc2l6ZW9mKCp2Ymxfc2lnKSApOworCQltZW1zZXQoKHZvaWQgKil2Ymxfc2lnLCAwLCBzaXplb2YoKnZibF9zaWcpKTsKIAogCQl2Ymxfc2lnLT5zZXF1ZW5jZSA9IHZibHdhaXQucmVxdWVzdC5zZXF1ZW5jZTsKIAkJdmJsX3NpZy0+aW5mby5zaV9zaWdubyA9IHZibHdhaXQucmVxdWVzdC5zaWduYWw7CiAJCXZibF9zaWctPnRhc2sgPSBjdXJyZW50OwogCi0JCXNwaW5fbG9ja19pcnFzYXZlKCAmZGV2LT52YmxfbG9jaywgaXJxZmxhZ3MgKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+dmJsX2xvY2ssIGlycWZsYWdzKTsKIAotCQlsaXN0X2FkZF90YWlsKCAoc3RydWN0IGxpc3RfaGVhZCAqKSB2Ymxfc2lnLCAmZGV2LT52Ymxfc2lncy5oZWFkICk7CisJCWxpc3RfYWRkX3RhaWwoKHN0cnVjdCBsaXN0X2hlYWQgKil2Ymxfc2lnLCAmZGV2LT52Ymxfc2lncy5oZWFkKTsKIAotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCAmZGV2LT52YmxfbG9jaywgaXJxZmxhZ3MgKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT52YmxfbG9jaywgaXJxZmxhZ3MpOwogCX0gZWxzZSB7CiAJCWlmIChkZXYtPmRyaXZlci0+dmJsYW5rX3dhaXQpCi0JCQlyZXQgPSBkZXYtPmRyaXZlci0+dmJsYW5rX3dhaXQoIGRldiwgJnZibHdhaXQucmVxdWVzdC5zZXF1ZW5jZSApOworCQkJcmV0ID0KKwkJCSAgICBkZXYtPmRyaXZlci0+dmJsYW5rX3dhaXQoZGV2LAorCQkJCQkJICAgICAmdmJsd2FpdC5yZXF1ZXN0LnNlcXVlbmNlKTsKIAotCQlkb19nZXR0aW1lb2ZkYXkoICZub3cgKTsKKwkJZG9fZ2V0dGltZW9mZGF5KCZub3cpOwogCQl2Ymx3YWl0LnJlcGx5LnR2YWxfc2VjID0gbm93LnR2X3NlYzsKIAkJdmJsd2FpdC5yZXBseS50dmFsX3VzZWMgPSBub3cudHZfdXNlYzsKIAl9CiAKLWRvbmU6Ci0JRFJNX0NPUFlfVE9fVVNFUl9JT0NUTCggYXJncCwgdmJsd2FpdCwgc2l6ZW9mKHZibHdhaXQpICk7CisgICAgICBkb25lOgorCURSTV9DT1BZX1RPX1VTRVJfSU9DVEwoYXJncCwgdmJsd2FpdCwgc2l6ZW9mKHZibHdhaXQpKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0zNDAsMzEgKzM0MywzMSBAQAogICoKICAqIElmIGEgc2lnbmFsIGlzIG5vdCByZXF1ZXN0ZWQsIHRoZW4gY2FsbHMgdmJsYW5rX3dhaXQoKS4KICAqLwotdm9pZCBkcm1fdmJsX3NlbmRfc2lnbmFscyggZHJtX2RldmljZV90ICpkZXYgKQordm9pZCBkcm1fdmJsX3NlbmRfc2lnbmFscyhkcm1fZGV2aWNlX3QgKiBkZXYpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgKnRtcDsKIAlkcm1fdmJsX3NpZ190ICp2Ymxfc2lnOwotCXVuc2lnbmVkIGludCB2Ymxfc2VxID0gYXRvbWljX3JlYWQoICZkZXYtPnZibF9yZWNlaXZlZCApOworCXVuc2lnbmVkIGludCB2Ymxfc2VxID0gYXRvbWljX3JlYWQoJmRldi0+dmJsX3JlY2VpdmVkKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoICZkZXYtPnZibF9sb2NrLCBmbGFncyApOworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnZibF9sb2NrLCBmbGFncyk7CiAKLQlsaXN0X2Zvcl9lYWNoX3NhZmUoIGxpc3QsIHRtcCwgJmRldi0+dmJsX3NpZ3MuaGVhZCApIHsKLQkJdmJsX3NpZyA9IGxpc3RfZW50cnkoIGxpc3QsIGRybV92Ymxfc2lnX3QsIGhlYWQgKTsKLQkJaWYgKCAoIHZibF9zZXEgLSB2Ymxfc2lnLT5zZXF1ZW5jZSApIDw9ICgxPDwyMykgKSB7CisJbGlzdF9mb3JfZWFjaF9zYWZlKGxpc3QsIHRtcCwgJmRldi0+dmJsX3NpZ3MuaGVhZCkgeworCQl2Ymxfc2lnID0gbGlzdF9lbnRyeShsaXN0LCBkcm1fdmJsX3NpZ190LCBoZWFkKTsKKwkJaWYgKCh2Ymxfc2VxIC0gdmJsX3NpZy0+c2VxdWVuY2UpIDw9ICgxIDw8IDIzKSkgewogCQkJdmJsX3NpZy0+aW5mby5zaV9jb2RlID0gdmJsX3NlcTsKLQkJCXNlbmRfc2lnX2luZm8oIHZibF9zaWctPmluZm8uc2lfc2lnbm8sICZ2Ymxfc2lnLT5pbmZvLCB2Ymxfc2lnLT50YXNrICk7CisJCQlzZW5kX3NpZ19pbmZvKHZibF9zaWctPmluZm8uc2lfc2lnbm8sICZ2Ymxfc2lnLT5pbmZvLAorCQkJCSAgICAgIHZibF9zaWctPnRhc2spOwogCi0JCQlsaXN0X2RlbCggbGlzdCApOworCQkJbGlzdF9kZWwobGlzdCk7CiAKLQkJCWRybV9mcmVlKCB2Ymxfc2lnLCBzaXplb2YoKnZibF9zaWcpLCBEUk1fTUVNX0RSSVZFUiApOworCQkJZHJtX2ZyZWUodmJsX3NpZywgc2l6ZW9mKCp2Ymxfc2lnKSwgRFJNX01FTV9EUklWRVIpOwogCiAJCQlkZXYtPnZibF9wZW5kaW5nLS07CiAJCX0KIAl9CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCAmZGV2LT52YmxfbG9jaywgZmxhZ3MgKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnZibF9sb2NrLCBmbGFncyk7CiB9CisKIEVYUE9SVF9TWU1CT0woZHJtX3ZibF9zZW5kX3NpZ25hbHMpOwotCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX2xvY2suYyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX2xvY2suYwppbmRleCA0NzAyZDg2Li5iMjc2YWU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9sb2NrLmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fbG9jay5jCkBAIC0xLDcgKzEsNyBAQAogLyoqCi0gKiBcZmlsZSBkcm1fbG9jay5oIAorICogXGZpbGUgZHJtX2xvY2suYwogICogSU9DVExzIGZvciBsb2NraW5nCi0gKiAKKyAqCiAgKiBcYXV0aG9yIFJpY2thcmQgRS4gKFJpaykgRmFpdGggPGZhaXRoQHZhbGludXguY29tPgogICogXGF1dGhvciBHYXJldGggSHVnaGVzIDxnYXJldGhAdmFsaW51eC5jb20+CiAgKi8KQEAgLTM1LDEyICszNSwxMiBAQAogCiAjaW5jbHVkZSAiZHJtUC5oIgogCi1zdGF0aWMgaW50IGRybV9sb2NrX3RyYW5zZmVyKGRybV9kZXZpY2VfdCAqZGV2LAorc3RhdGljIGludCBkcm1fbG9ja190cmFuc2Zlcihkcm1fZGV2aWNlX3QgKiBkZXYsCiAJCQkgICAgIF9fdm9sYXRpbGVfXyB1bnNpZ25lZCBpbnQgKmxvY2ssCiAJCQkgICAgIHVuc2lnbmVkIGludCBjb250ZXh0KTsKIHN0YXRpYyBpbnQgZHJtX25vdGlmaWVyKHZvaWQgKnByaXYpOwogCi0vKiogCisvKioKICAqIExvY2sgaW9jdGwuCiAgKgogICogXHBhcmFtIGlub2RlIGRldmljZSBpbm9kZS4KQEAgLTUxLDkxICs1MSw4OSBAQAogICoKICAqIEFkZCB0aGUgY3VycmVudCB0YXNrIHRvIHRoZSBsb2NrIHdhaXQgcXVldWUsIGFuZCBhdHRlbXB0IHRvIHRha2UgdG8gbG9jay4KICAqLwotaW50IGRybV9sb2NrKCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcgKQoraW50IGRybV9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAorCSAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0gICAgICAgIGRybV9maWxlX3QgKnByaXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0gICAgICAgIGRybV9kZXZpY2VfdCAqZGV2ID0gcHJpdi0+aGVhZC0+ZGV2OwotICAgICAgICBERUNMQVJFX1dBSVRRVUVVRSggZW50cnksIGN1cnJlbnQgKTsKLSAgICAgICAgZHJtX2xvY2tfdCBsb2NrOwotICAgICAgICBpbnQgcmV0ID0gMDsKKwlkcm1fZmlsZV90ICpwcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCWRybV9kZXZpY2VfdCAqZGV2ID0gcHJpdi0+aGVhZC0+ZGV2OworCURFQ0xBUkVfV0FJVFFVRVVFKGVudHJ5LCBjdXJyZW50KTsKKwlkcm1fbG9ja190IGxvY2s7CisJaW50IHJldCA9IDA7CiAKIAkrK3ByaXYtPmxvY2tfY291bnQ7CiAKLSAgICAgICAgaWYgKCBjb3B5X2Zyb21fdXNlciggJmxvY2ssIChkcm1fbG9ja190IF9fdXNlciAqKWFyZywgc2l6ZW9mKGxvY2spICkgKQorCWlmIChjb3B5X2Zyb21fdXNlcigmbG9jaywgKGRybV9sb2NrX3QgX191c2VyICopIGFyZywgc2l6ZW9mKGxvY2spKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLSAgICAgICAgaWYgKCBsb2NrLmNvbnRleHQgPT0gRFJNX0tFUk5FTF9DT05URVhUICkgewotICAgICAgICAgICAgICAgIERSTV9FUlJPUiggIlByb2Nlc3MgJWQgdXNpbmcga2VybmVsIGNvbnRleHQgJWRcbiIsCi0JCQkgICBjdXJyZW50LT5waWQsIGxvY2suY29udGV4dCApOwotICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgICAgICB9CisJaWYgKGxvY2suY29udGV4dCA9PSBEUk1fS0VSTkVMX0NPTlRFWFQpIHsKKwkJRFJNX0VSUk9SKCJQcm9jZXNzICVkIHVzaW5nIGtlcm5lbCBjb250ZXh0ICVkXG4iLAorCQkJICBjdXJyZW50LT5waWQsIGxvY2suY29udGV4dCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KIAotICAgICAgICBEUk1fREVCVUcoICIlZCAocGlkICVkKSByZXF1ZXN0cyBsb2NrICgweCUwOHgpLCBmbGFncyA9IDB4JTA4eFxuIiwKLQkJICAgbG9jay5jb250ZXh0LCBjdXJyZW50LT5waWQsCi0JCSAgIGRldi0+bG9jay5od19sb2NrLT5sb2NrLCBsb2NrLmZsYWdzICk7CisJRFJNX0RFQlVHKCIlZCAocGlkICVkKSByZXF1ZXN0cyBsb2NrICgweCUwOHgpLCBmbGFncyA9IDB4JTA4eFxuIiwKKwkJICBsb2NrLmNvbnRleHQsIGN1cnJlbnQtPnBpZCwKKwkJICBkZXYtPmxvY2suaHdfbG9jay0+bG9jaywgbG9jay5mbGFncyk7CiAKIAlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9ETUFfUVVFVUUpKQotCQlpZiAoIGxvY2suY29udGV4dCA8IDAgKQorCQlpZiAobG9jay5jb250ZXh0IDwgMCkKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JYWRkX3dhaXRfcXVldWUoICZkZXYtPmxvY2subG9ja19xdWV1ZSwgJmVudHJ5ICk7CisJYWRkX3dhaXRfcXVldWUoJmRldi0+bG9jay5sb2NrX3F1ZXVlLCAmZW50cnkpOwogCWZvciAoOzspIHsKIAkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQlpZiAoICFkZXYtPmxvY2suaHdfbG9jayApIHsKKwkJaWYgKCFkZXYtPmxvY2suaHdfbG9jaykgewogCQkJLyogRGV2aWNlIGhhcyBiZWVuIHVucmVnaXN0ZXJlZCAqLwogCQkJcmV0ID0gLUVJTlRSOwogCQkJYnJlYWs7CiAJCX0KLQkJaWYgKCBkcm1fbG9ja190YWtlKCAmZGV2LT5sb2NrLmh3X2xvY2stPmxvY2ssCi0JCQkJICAgICBsb2NrLmNvbnRleHQgKSApIHsKLQkJCWRldi0+bG9jay5maWxwICAgICAgPSBmaWxwOworCQlpZiAoZHJtX2xvY2tfdGFrZSgmZGV2LT5sb2NrLmh3X2xvY2stPmxvY2ssIGxvY2suY29udGV4dCkpIHsKKwkJCWRldi0+bG9jay5maWxwID0gZmlscDsKIAkJCWRldi0+bG9jay5sb2NrX3RpbWUgPSBqaWZmaWVzOwotCQkJYXRvbWljX2luYyggJmRldi0+Y291bnRzW19EUk1fU1RBVF9MT0NLU10gKTsKLQkJCWJyZWFrOyAgLyogR290IGxvY2sgKi8KKwkJCWF0b21pY19pbmMoJmRldi0+Y291bnRzW19EUk1fU1RBVF9MT0NLU10pOworCQkJYnJlYWs7CS8qIEdvdCBsb2NrICovCiAJCX0KLQkJCisKIAkJLyogQ29udGVudGlvbiAqLwogCQlzY2hlZHVsZSgpOwotCQlpZiAoIHNpZ25hbF9wZW5kaW5nKCBjdXJyZW50ICkgKSB7CisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewogCQkJcmV0ID0gLUVSRVNUQVJUU1lTOwogCQkJYnJlYWs7CiAJCX0KIAl9CiAJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwotCXJlbW92ZV93YWl0X3F1ZXVlKCAmZGV2LT5sb2NrLmxvY2tfcXVldWUsICZlbnRyeSApOworCXJlbW92ZV93YWl0X3F1ZXVlKCZkZXYtPmxvY2subG9ja19xdWV1ZSwgJmVudHJ5KTsKIAotCXNpZ2VtcHR5c2V0KCAmZGV2LT5zaWdtYXNrICk7Ci0Jc2lnYWRkc2V0KCAmZGV2LT5zaWdtYXNrLCBTSUdTVE9QICk7Ci0Jc2lnYWRkc2V0KCAmZGV2LT5zaWdtYXNrLCBTSUdUU1RQICk7Ci0Jc2lnYWRkc2V0KCAmZGV2LT5zaWdtYXNrLCBTSUdUVElOICk7Ci0Jc2lnYWRkc2V0KCAmZGV2LT5zaWdtYXNrLCBTSUdUVE9VICk7CisJc2lnZW1wdHlzZXQoJmRldi0+c2lnbWFzayk7CisJc2lnYWRkc2V0KCZkZXYtPnNpZ21hc2ssIFNJR1NUT1ApOworCXNpZ2FkZHNldCgmZGV2LT5zaWdtYXNrLCBTSUdUU1RQKTsKKwlzaWdhZGRzZXQoJmRldi0+c2lnbWFzaywgU0lHVFRJTik7CisJc2lnYWRkc2V0KCZkZXYtPnNpZ21hc2ssIFNJR1RUT1UpOwogCWRldi0+c2lnZGF0YS5jb250ZXh0ID0gbG9jay5jb250ZXh0OwotCWRldi0+c2lnZGF0YS5sb2NrICAgID0gZGV2LT5sb2NrLmh3X2xvY2s7Ci0JYmxvY2tfYWxsX3NpZ25hbHMoIGRybV9ub3RpZmllciwKLQkJCSAgICZkZXYtPnNpZ2RhdGEsICZkZXYtPnNpZ21hc2sgKTsKLQkKKwlkZXYtPnNpZ2RhdGEubG9jayA9IGRldi0+bG9jay5od19sb2NrOworCWJsb2NrX2FsbF9zaWduYWxzKGRybV9ub3RpZmllciwgJmRldi0+c2lnZGF0YSwgJmRldi0+c2lnbWFzayk7CisKIAlpZiAoZGV2LT5kcml2ZXItPmRtYV9yZWFkeSAmJiAobG9jay5mbGFncyAmIF9EUk1fTE9DS19SRUFEWSkpCiAJCWRldi0+ZHJpdmVyLT5kbWFfcmVhZHkoZGV2KTsKLQkKLQlpZiAoIGRldi0+ZHJpdmVyLT5kbWFfcXVpZXNjZW50ICYmIChsb2NrLmZsYWdzICYgX0RSTV9MT0NLX1FVSUVTQ0VOVCApKQorCisJaWYgKGRldi0+ZHJpdmVyLT5kbWFfcXVpZXNjZW50ICYmIChsb2NrLmZsYWdzICYgX0RSTV9MT0NLX1FVSUVTQ0VOVCkpCiAJCXJldHVybiBkZXYtPmRyaXZlci0+ZG1hX3F1aWVzY2VudChkZXYpOwotCQotCS8qIGRldi0+ZHJpdmVyLT5rZXJuZWxfY29udGV4dF9zd2l0Y2ggaXNuJ3QgdXNlZCBieSBhbnkgb2YgdGhlIHg4NiAKKworCS8qIGRldi0+ZHJpdmVyLT5rZXJuZWxfY29udGV4dF9zd2l0Y2ggaXNuJ3QgdXNlZCBieSBhbnkgb2YgdGhlIHg4NgogCSAqICBkcml2ZXJzIGJ1dCBpcyB1c2VkIGJ5IHRoZSBTcGFyYyBkcml2ZXIuCiAJICovCi0JCi0JaWYgKGRldi0+ZHJpdmVyLT5rZXJuZWxfY29udGV4dF9zd2l0Y2ggJiYgCi0JICAgIGRldi0+bGFzdF9jb250ZXh0ICE9IGxvY2suY29udGV4dCkgewotCSAgZGV2LT5kcml2ZXItPmtlcm5lbF9jb250ZXh0X3N3aXRjaChkZXYsIGRldi0+bGFzdF9jb250ZXh0LCAKLQkJCQkJICAgIGxvY2suY29udGV4dCk7Ci0JfQotICAgICAgICBEUk1fREVCVUcoICIlZCAlc1xuIiwgbG9jay5jb250ZXh0LCByZXQgPyAiaW50ZXJydXB0ZWQiIDogImhhcyBsb2NrIiApOwogCi0gICAgICAgIHJldHVybiByZXQ7CisJaWYgKGRldi0+ZHJpdmVyLT5rZXJuZWxfY29udGV4dF9zd2l0Y2ggJiYKKwkgICAgZGV2LT5sYXN0X2NvbnRleHQgIT0gbG9jay5jb250ZXh0KSB7CisJCWRldi0+ZHJpdmVyLT5rZXJuZWxfY29udGV4dF9zd2l0Y2goZGV2LCBkZXYtPmxhc3RfY29udGV4dCwKKwkJCQkJCSAgIGxvY2suY29udGV4dCk7CisJfQorCURSTV9ERUJVRygiJWQgJXNcbiIsIGxvY2suY29udGV4dCwgcmV0ID8gImludGVycnVwdGVkIiA6ICJoYXMgbG9jayIpOworCisJcmV0dXJuIHJldDsKIH0KIAotLyoqIAorLyoqCiAgKiBVbmxvY2sgaW9jdGwuCiAgKgogICogXHBhcmFtIGlub2RlIGRldmljZSBpbm9kZS4KQEAgLTE0NiwyMyArMTQ0LDIzIEBACiAgKgogICogVHJhbnNmZXIgYW5kIGZyZWUgdGhlIGxvY2suCiAgKi8KLWludCBkcm1fdW5sb2NrKCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnICkKK2ludCBkcm1fdW5sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAorCSAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlkcm1fZmlsZV90ICpwcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCWRybV9kZXZpY2VfdCAqZGV2ID0gcHJpdi0+aGVhZC0+ZGV2OwogCWRybV9sb2NrX3QgbG9jazsKIAotCWlmICggY29weV9mcm9tX3VzZXIoICZsb2NrLCAoZHJtX2xvY2tfdCBfX3VzZXIgKilhcmcsIHNpemVvZihsb2NrKSApICkKKwlpZiAoY29weV9mcm9tX3VzZXIoJmxvY2ssIChkcm1fbG9ja190IF9fdXNlciAqKSBhcmcsIHNpemVvZihsb2NrKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JaWYgKCBsb2NrLmNvbnRleHQgPT0gRFJNX0tFUk5FTF9DT05URVhUICkgewotCQlEUk1fRVJST1IoICJQcm9jZXNzICVkIHVzaW5nIGtlcm5lbCBjb250ZXh0ICVkXG4iLAotCQkJICAgY3VycmVudC0+cGlkLCBsb2NrLmNvbnRleHQgKTsKKwlpZiAobG9jay5jb250ZXh0ID09IERSTV9LRVJORUxfQ09OVEVYVCkgeworCQlEUk1fRVJST1IoIlByb2Nlc3MgJWQgdXNpbmcga2VybmVsIGNvbnRleHQgJWRcbiIsCisJCQkgIGN1cnJlbnQtPnBpZCwgbG9jay5jb250ZXh0KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JYXRvbWljX2luYyggJmRldi0+Y291bnRzW19EUk1fU1RBVF9VTkxPQ0tTXSApOworCWF0b21pY19pbmMoJmRldi0+Y291bnRzW19EUk1fU1RBVF9VTkxPQ0tTXSk7CiAKIAkvKiBrZXJuZWxfY29udGV4dF9zd2l0Y2ggaXNuJ3QgdXNlZCBieSBhbnkgb2YgdGhlIHg4NiBkcm0KIAkgKiBtb2R1bGVzIGJ1dCBpcyByZXF1aXJlZCBieSB0aGUgU3BhcmMgZHJpdmVyLgpAQCAtMTcwLDEyICsxNjgsMTIgQEAKIAlpZiAoZGV2LT5kcml2ZXItPmtlcm5lbF9jb250ZXh0X3N3aXRjaF91bmxvY2spCiAJCWRldi0+ZHJpdmVyLT5rZXJuZWxfY29udGV4dF9zd2l0Y2hfdW5sb2NrKGRldiwgJmxvY2spOwogCWVsc2UgewotCQlkcm1fbG9ja190cmFuc2ZlciggZGV2LCAmZGV2LT5sb2NrLmh3X2xvY2stPmxvY2ssIAotCQkJCSAgICBEUk1fS0VSTkVMX0NPTlRFWFQgKTsKLQkJCi0JCWlmICggZHJtX2xvY2tfZnJlZSggZGV2LCAmZGV2LT5sb2NrLmh3X2xvY2stPmxvY2ssCi0JCQkJICAgICBEUk1fS0VSTkVMX0NPTlRFWFQgKSApIHsKLQkJCURSTV9FUlJPUiggIlxuIiApOworCQlkcm1fbG9ja190cmFuc2ZlcihkZXYsICZkZXYtPmxvY2suaHdfbG9jay0+bG9jaywKKwkJCQkgIERSTV9LRVJORUxfQ09OVEVYVCk7CisKKwkJaWYgKGRybV9sb2NrX2ZyZWUoZGV2LCAmZGV2LT5sb2NrLmh3X2xvY2stPmxvY2ssCisJCQkJICBEUk1fS0VSTkVMX0NPTlRFWFQpKSB7CisJCQlEUk1fRVJST1IoIlxuIik7CiAJCX0KIAl9CiAKQEAgLTE5OCw4ICsxOTYsMTAgQEAKIAogCWRvIHsKIAkJb2xkID0gKmxvY2s7Ci0JCWlmIChvbGQgJiBfRFJNX0xPQ0tfSEVMRCkgbmV3ID0gb2xkIHwgX0RSTV9MT0NLX0NPTlQ7Ci0JCWVsc2UJCQkgIG5ldyA9IGNvbnRleHQgfCBfRFJNX0xPQ0tfSEVMRDsKKwkJaWYgKG9sZCAmIF9EUk1fTE9DS19IRUxEKQorCQkJbmV3ID0gb2xkIHwgX0RSTV9MT0NLX0NPTlQ7CisJCWVsc2UKKwkJCW5ldyA9IGNvbnRleHQgfCBfRFJNX0xPQ0tfSEVMRDsKIAkJcHJldiA9IGNtcHhjaGcobG9jaywgb2xkLCBuZXcpOwogCX0gd2hpbGUgKHByZXYgIT0gb2xkKTsKIAlpZiAoX0RSTV9MT0NLSU5HX0NPTlRFWFQob2xkKSA9PSBjb250ZXh0KSB7CkBAIC0yMTIsNyArMjEyLDcgQEAKIAkJfQogCX0KIAlpZiAobmV3ID09IChjb250ZXh0IHwgX0RSTV9MT0NLX0hFTEQpKSB7Ci0JCQkJLyogSGF2ZSBsb2NrICovCisJCS8qIEhhdmUgbG9jayAqLwogCQlyZXR1cm4gMTsKIAl9CiAJcmV0dXJuIDA7CkBAIC0yMjAsOCArMjIwLDggQEAKIAogLyoqCiAgKiBUaGlzIHRha2VzIGEgbG9jayBmb3JjaWJseSBhbmQgaGFuZHMgaXQgdG8gY29udGV4dC4JU2hvdWxkIE9OTFkgYmUgdXNlZAotICogaW5zaWRlICpfdW5sb2NrIHRvIGdpdmUgbG9jayB0byBrZXJuZWwgYmVmb3JlIGNhbGxpbmcgKl9kbWFfc2NoZWR1bGUuIAotICogCisgKiBpbnNpZGUgKl91bmxvY2sgdG8gZ2l2ZSBsb2NrIHRvIGtlcm5lbCBiZWZvcmUgY2FsbGluZyAqX2RtYV9zY2hlZHVsZS4KKyAqCiAgKiBccGFyYW0gZGV2IERSTSBkZXZpY2UuCiAgKiBccGFyYW0gbG9jayBsb2NrIHBvaW50ZXIuCiAgKiBccGFyYW0gY29udGV4dCBsb2NraW5nIGNvbnRleHQuCkBAIC0yMzAsNyArMjMwLDcgQEAKICAqIFJlc2V0cyB0aGUgbG9jayBmaWxlIHBvaW50ZXIuCiAgKiBNYXJrcyB0aGUgbG9jayBhcyBoZWxkIGJ5IHRoZSBnaXZlbiBjb250ZXh0LCB2aWEgdGhlIFxwIGNtcHhjaGcgaW5zdHJ1Y3Rpb24uCiAgKi8KLXN0YXRpYyBpbnQgZHJtX2xvY2tfdHJhbnNmZXIoZHJtX2RldmljZV90ICpkZXYsCitzdGF0aWMgaW50IGRybV9sb2NrX3RyYW5zZmVyKGRybV9kZXZpY2VfdCAqIGRldiwKIAkJCSAgICAgX192b2xhdGlsZV9fIHVuc2lnbmVkIGludCAqbG9jaywKIAkJCSAgICAgdW5zaWduZWQgaW50IGNvbnRleHQpCiB7CkBAIC0yMzgsOCArMjM4LDggQEAKIAogCWRldi0+bG9jay5maWxwID0gTlVMTDsKIAlkbyB7Ci0JCW9sZCAgPSAqbG9jazsKLQkJbmV3ICA9IGNvbnRleHQgfCBfRFJNX0xPQ0tfSEVMRDsKKwkJb2xkID0gKmxvY2s7CisJCW5ldyA9IGNvbnRleHQgfCBfRFJNX0xPQ0tfSEVMRDsKIAkJcHJldiA9IGNtcHhjaGcobG9jaywgb2xkLCBuZXcpOwogCX0gd2hpbGUgKHByZXYgIT0gb2xkKTsKIAlyZXR1cm4gMTsKQEAgLTI0NywzMCArMjQ3LDI5IEBACiAKIC8qKgogICogRnJlZSBsb2NrLgotICogCisgKgogICogXHBhcmFtIGRldiBEUk0gZGV2aWNlLgogICogXHBhcmFtIGxvY2sgbG9jay4KICAqIFxwYXJhbSBjb250ZXh0IGNvbnRleHQuCi0gKiAKKyAqCiAgKiBSZXNldHMgdGhlIGxvY2sgZmlsZSBwb2ludGVyLgogICogTWFya3MgdGhlIGxvY2sgYXMgbm90IGhlbGQsIHZpYSB0aGUgXHAgY21weGNoZyBpbnN0cnVjdGlvbi4gV2FrZXMgYW55IHRhc2sKICAqIHdhaXRpbmcgb24gdGhlIGxvY2sgcXVldWUuCiAgKi8KLWludCBkcm1fbG9ja19mcmVlKGRybV9kZXZpY2VfdCAqZGV2LAotCQkgICBfX3ZvbGF0aWxlX18gdW5zaWduZWQgaW50ICpsb2NrLCB1bnNpZ25lZCBpbnQgY29udGV4dCkKK2ludCBkcm1fbG9ja19mcmVlKGRybV9kZXZpY2VfdCAqIGRldiwKKwkJICBfX3ZvbGF0aWxlX18gdW5zaWduZWQgaW50ICpsb2NrLCB1bnNpZ25lZCBpbnQgY29udGV4dCkKIHsKIAl1bnNpZ25lZCBpbnQgb2xkLCBuZXcsIHByZXY7CiAKIAlkZXYtPmxvY2suZmlscCA9IE5VTEw7CiAJZG8gewotCQlvbGQgID0gKmxvY2s7Ci0JCW5ldyAgPSAwOworCQlvbGQgPSAqbG9jazsKKwkJbmV3ID0gMDsKIAkJcHJldiA9IGNtcHhjaGcobG9jaywgb2xkLCBuZXcpOwogCX0gd2hpbGUgKHByZXYgIT0gb2xkKTsKIAlpZiAoX0RSTV9MT0NLX0lTX0hFTEQob2xkKSAmJiBfRFJNX0xPQ0tJTkdfQ09OVEVYVChvbGQpICE9IGNvbnRleHQpIHsKIAkJRFJNX0VSUk9SKCIlZCBmcmVlZCBoZWF2eXdlaWdodCBsb2NrIGhlbGQgYnkgJWRcbiIsCi0JCQkgIGNvbnRleHQsCi0JCQkgIF9EUk1fTE9DS0lOR19DT05URVhUKG9sZCkpOworCQkJICBjb250ZXh0LCBfRFJNX0xPQ0tJTkdfQ09OVEVYVChvbGQpKTsKIAkJcmV0dXJuIDE7CiAJfQogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZGV2LT5sb2NrLmxvY2tfcXVldWUpOwpAQCAtMjkwLDE5ICsyODksMTkgQEAKICAqLwogc3RhdGljIGludCBkcm1fbm90aWZpZXIodm9pZCAqcHJpdikKIHsKLQlkcm1fc2lnZGF0YV90ICpzID0gKGRybV9zaWdkYXRhX3QgKilwcml2OwotCXVuc2lnbmVkIGludCAgb2xkLCBuZXcsIHByZXY7CisJZHJtX3NpZ2RhdGFfdCAqcyA9IChkcm1fc2lnZGF0YV90ICopIHByaXY7CisJdW5zaWduZWQgaW50IG9sZCwgbmV3LCBwcmV2OwogCi0KLQkJCQkvKiBBbGxvdyBzaWduYWwgZGVsaXZlcnkgaWYgbG9jayBpc24ndCBoZWxkICovCisJLyogQWxsb3cgc2lnbmFsIGRlbGl2ZXJ5IGlmIGxvY2sgaXNuJ3QgaGVsZCAqLwogCWlmICghcy0+bG9jayB8fCAhX0RSTV9MT0NLX0lTX0hFTEQocy0+bG9jay0+bG9jaykKLQkgICAgfHwgX0RSTV9MT0NLSU5HX0NPTlRFWFQocy0+bG9jay0+bG9jaykgIT0gcy0+Y29udGV4dCkgcmV0dXJuIDE7CisJICAgIHx8IF9EUk1fTE9DS0lOR19DT05URVhUKHMtPmxvY2stPmxvY2spICE9IHMtPmNvbnRleHQpCisJCXJldHVybiAxOwogCi0JCQkJLyogT3RoZXJ3aXNlLCBzZXQgZmxhZyB0byBmb3JjZSBjYWxsIHRvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRybVVubG9jayAqLworCS8qIE90aGVyd2lzZSwgc2V0IGZsYWcgdG8gZm9yY2UgY2FsbCB0bworCSAgIGRybVVubG9jayAqLwogCWRvIHsKLQkJb2xkICA9IHMtPmxvY2stPmxvY2s7Ci0JCW5ldyAgPSBvbGQgfCBfRFJNX0xPQ0tfQ09OVDsKKwkJb2xkID0gcy0+bG9jay0+bG9jazsKKwkJbmV3ID0gb2xkIHwgX0RSTV9MT0NLX0NPTlQ7CiAJCXByZXYgPSBjbXB4Y2hnKCZzLT5sb2NrLT5sb2NrLCBvbGQsIG5ldyk7CiAJfSB3aGlsZSAocHJldiAhPSBvbGQpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9kcm1fbWVtb3J5LmMgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9tZW1vcnkuYwppbmRleCBmZjQ4M2ZiLi4yYzc0MTU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9tZW1vcnkuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9tZW1vcnkuYwpAQCAtMSwxMiArMSwxMiBAQAotLyoqIAotICogXGZpbGUgZHJtX21lbW9yeS5oIAorLyoqCisgKiBcZmlsZSBkcm1fbWVtb3J5LmMKICAqIE1lbW9yeSBtYW5hZ2VtZW50IHdyYXBwZXJzIGZvciBEUk0KICAqCiAgKiBcYXV0aG9yIFJpY2thcmQgRS4gKFJpaykgRmFpdGggPGZhaXRoQHZhbGludXguY29tPgogICogXGF1dGhvciBHYXJldGggSHVnaGVzIDxnYXJldGhAdmFsaW51eC5jb20+CiAgKi8KIAotLyogCisvKgogICogQ3JlYXRlZDogVGh1IEZlYiAgNCAxNDowMDozNCAxOTk5IGJ5IGZhaXRoQHZhbGludXguY29tCiAgKgogICogQ29weXJpZ2h0IDE5OTkgUHJlY2lzaW9uIEluc2lnaHQsIEluYy4sIENlZGFyIFBhcmssIFRleGFzLgpAQCAtNDgsNyArNDgsNyBAQAogCiAvKioKICAqIENhbGxlZCB3aGVuICIvcHJvYy9kcmkvJWRldiUvbWVtIiBpcyByZWFkLgotICogCisgKgogICogXHBhcmFtIGJ1ZiBvdXRwdXQgYnVmZmVyLgogICogXHBhcmFtIHN0YXJ0IHN0YXJ0IG9mIG91dHB1dCBkYXRhLgogICogXHBhcmFtIG9mZnNldCByZXF1ZXN0ZWQgc3RhcnQgb2Zmc2V0LgpAQCAtNTcsMTAgKzU3LDEwIEBACiAgKiBccGFyYW0gZGF0YSBwcml2YXRlIGRhdGEuCiAgKiBccmV0dXJuIG51bWJlciBvZiB3cml0dGVuIGJ5dGVzLgogICoKLSAqIE5vLW9wLiAKKyAqIE5vLW9wLgogICovCiBpbnQgZHJtX21lbV9pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCi0JCSAgaW50IGxlbiwgaW50ICplb2YsIHZvaWQgKmRhdGEpCisJCSBpbnQgbGVuLCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTcwLDcgKzcwLDggQEAKIHsKIAl2b2lkICpwdDsKIAotCWlmICghKHB0ID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKSkpIHJldHVybiBOVUxMOworCWlmICghKHB0ID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKSkpCisJCXJldHVybiBOVUxMOwogCWlmIChvbGRwdCAmJiBvbGRzaXplKSB7CiAJCW1lbWNweShwdCwgb2xkcHQsIG9sZHNpemUpOwogCQlrZnJlZShvbGRwdCk7CkBAIC05MCwyMSArOTEsMjAgQEAKIHVuc2lnbmVkIGxvbmcgZHJtX2FsbG9jX3BhZ2VzKGludCBvcmRlciwgaW50IGFyZWEpCiB7CiAJdW5zaWduZWQgbG9uZyBhZGRyZXNzOwotCXVuc2lnbmVkIGxvbmcgYnl0ZXMJICA9IFBBR0VfU0laRSA8PCBvcmRlcjsKKwl1bnNpZ25lZCBsb25nIGJ5dGVzID0gUEFHRV9TSVpFIDw8IG9yZGVyOwogCXVuc2lnbmVkIGxvbmcgYWRkcjsKLQl1bnNpZ25lZCBpbnQgIHN6OworCXVuc2lnbmVkIGludCBzejsKIAogCWFkZHJlc3MgPSBfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsIG9yZGVyKTsKLQlpZiAoIWFkZHJlc3MpIAorCWlmICghYWRkcmVzcykKIAkJcmV0dXJuIDA7CiAKLQkJCQkvKiBaZXJvICovCisJLyogWmVybyAqLwogCW1lbXNldCgodm9pZCAqKWFkZHJlc3MsIDAsIGJ5dGVzKTsKIAotCQkJCS8qIFJlc2VydmUgKi8KKwkvKiBSZXNlcnZlICovCiAJZm9yIChhZGRyID0gYWRkcmVzcywgc3ogPSBieXRlczsKLQkgICAgIHN6ID4gMDsKLQkgICAgIGFkZHIgKz0gUEFHRV9TSVpFLCBzeiAtPSBQQUdFX1NJWkUpIHsKKwkgICAgIHN6ID4gMDsgYWRkciArPSBQQUdFX1NJWkUsIHN6IC09IFBBR0VfU0laRSkgewogCQlTZXRQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKGFkZHIpKTsKIAl9CiAKQEAgLTExMyw3ICsxMTMsNyBAQAogCiAvKioKICAqIEZyZWUgcGFnZXMuCi0gKiAKKyAqCiAgKiBccGFyYW0gYWRkcmVzcyBhZGRyZXNzIG9mIHRoZSBwYWdlcyB0byBmcmVlLgogICogXHBhcmFtIG9yZGVyIHNpemUgb3JkZXIuCiAgKiBccGFyYW0gYXJlYSBtZW1vcnkgYXJlYS4gKE5vdCB1c2VkLikKQEAgLTEyNCw0OSArMTI0LDUxIEBACiB7CiAJdW5zaWduZWQgbG9uZyBieXRlcyA9IFBBR0VfU0laRSA8PCBvcmRlcjsKIAl1bnNpZ25lZCBsb25nIGFkZHI7Ci0JdW5zaWduZWQgaW50ICBzejsKKwl1bnNpZ25lZCBpbnQgc3o7CiAKLQlpZiAoIWFkZHJlc3MpIAorCWlmICghYWRkcmVzcykKIAkJcmV0dXJuOwogCiAJLyogVW5yZXNlcnZlICovCiAJZm9yIChhZGRyID0gYWRkcmVzcywgc3ogPSBieXRlczsKLQkgICAgIHN6ID4gMDsKLQkgICAgIGFkZHIgKz0gUEFHRV9TSVpFLCBzeiAtPSBQQUdFX1NJWkUpIHsKKwkgICAgIHN6ID4gMDsgYWRkciArPSBQQUdFX1NJWkUsIHN6IC09IFBBR0VfU0laRSkgewogCQlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UoYWRkcikpOwogCX0KIAogCWZyZWVfcGFnZXMoYWRkcmVzcywgb3JkZXIpOwogfQogCi0KICNpZiBfX09TX0hBU19BR1AKIC8qKiBXcmFwcGVyIGFyb3VuZCBhZ3BfYWxsb2NhdGVfbWVtb3J5KCkgKi8KLURSTV9BR1BfTUVNICpkcm1fYWxsb2NfYWdwKGRybV9kZXZpY2VfdCAqZGV2LCBpbnQgcGFnZXMsIHUzMiB0eXBlKQorRFJNX0FHUF9NRU0gKmRybV9hbGxvY19hZ3AoZHJtX2RldmljZV90ICogZGV2LCBpbnQgcGFnZXMsIHUzMiB0eXBlKQogewogCXJldHVybiBkcm1fYWdwX2FsbG9jYXRlX21lbW9yeShkZXYtPmFncC0+YnJpZGdlLCBwYWdlcywgdHlwZSk7CiB9CisKIEVYUE9SVF9TWU1CT0woZHJtX2FsbG9jX2FncCk7CiAKIC8qKiBXcmFwcGVyIGFyb3VuZCBhZ3BfZnJlZV9tZW1vcnkoKSAqLwotaW50IGRybV9mcmVlX2FncChEUk1fQUdQX01FTSAqaGFuZGxlLCBpbnQgcGFnZXMpCitpbnQgZHJtX2ZyZWVfYWdwKERSTV9BR1BfTUVNICogaGFuZGxlLCBpbnQgcGFnZXMpCiB7CiAJcmV0dXJuIGRybV9hZ3BfZnJlZV9tZW1vcnkoaGFuZGxlKSA/IDAgOiAtRUlOVkFMOwogfQorCiBFWFBPUlRfU1lNQk9MKGRybV9mcmVlX2FncCk7CiAKIC8qKiBXcmFwcGVyIGFyb3VuZCBhZ3BfYmluZF9tZW1vcnkoKSAqLwotaW50IGRybV9iaW5kX2FncChEUk1fQUdQX01FTSAqaGFuZGxlLCB1bnNpZ25lZCBpbnQgc3RhcnQpCitpbnQgZHJtX2JpbmRfYWdwKERSTV9BR1BfTUVNICogaGFuZGxlLCB1bnNpZ25lZCBpbnQgc3RhcnQpCiB7CiAJcmV0dXJuIGRybV9hZ3BfYmluZF9tZW1vcnkoaGFuZGxlLCBzdGFydCk7CiB9CisKIEVYUE9SVF9TWU1CT0woZHJtX2JpbmRfYWdwKTsKIAogLyoqIFdyYXBwZXIgYXJvdW5kIGFncF91bmJpbmRfbWVtb3J5KCkgKi8KLWludCBkcm1fdW5iaW5kX2FncChEUk1fQUdQX01FTSAqaGFuZGxlKQoraW50IGRybV91bmJpbmRfYWdwKERSTV9BR1BfTUVNICogaGFuZGxlKQogewogCXJldHVybiBkcm1fYWdwX3VuYmluZF9tZW1vcnkoaGFuZGxlKTsKIH0KKwogRVhQT1JUX1NZTUJPTChkcm1fdW5iaW5kX2FncCk7Ci0jZW5kaWYgLyogYWdwICovCi0jZW5kaWYgLyogZGVidWdfbWVtb3J5ICovCisjZW5kaWYJCQkJLyogYWdwICovCisjZW5kaWYJCQkJLyogZGVidWdfbWVtb3J5ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9tZW1vcnkuaCBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX21lbW9yeS5oCmluZGV4IDQyMmI5NDIuLjM3MzJhNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX21lbW9yeS5oCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX21lbW9yeS5oCkBAIC0xLDEyICsxLDEyIEBACi0vKiogCi0gKiBcZmlsZSBkcm1fbWVtb3J5LmggCisvKioKKyAqIFxmaWxlIGRybV9tZW1vcnkuaAogICogTWVtb3J5IG1hbmFnZW1lbnQgd3JhcHBlcnMgZm9yIERSTQogICoKICAqIFxhdXRob3IgUmlja2FyZCBFLiAoUmlrKSBGYWl0aCA8ZmFpdGhAdmFsaW51eC5jb20+CiAgKiBcYXV0aG9yIEdhcmV0aCBIdWdoZXMgPGdhcmV0aEB2YWxpbnV4LmNvbT4KICAqLwogCi0vKiAKKy8qCiAgKiBDcmVhdGVkOiBUaHUgRmViICA0IDE0OjAwOjM0IDE5OTkgYnkgZmFpdGhAdmFsaW51eC5jb20KICAqCiAgKiBDb3B5cmlnaHQgMTk5OSBQcmVjaXNpb24gSW5zaWdodCwgSW5jLiwgQ2VkYXIgUGFyaywgVGV4YXMuCkBAIC00MCw3ICs0MCw3IEBACiAKIC8qKgogICogQ3V0IGRvd24gdmVyc2lvbiBvZiBkcm1fbWVtb3J5X2RlYnVnLmgsIHdoaWNoIHVzZWQgdG8gYmUgY2FsbGVkCi0gKiBkcm1fbWVtb3J5LmguICAKKyAqIGRybV9tZW1vcnkuaC4KICAqLwogCiAjaWYgX19PU19IQVNfQUdQCkBAIC02MCw4ICs2MCw4IEBACiAvKgogICogRmluZCB0aGUgZHJtX21hcCB0aGF0IGNvdmVycyB0aGUgcmFuZ2UgW29mZnNldCwgb2Zmc2V0K3NpemUpLgogICovCi1zdGF0aWMgaW5saW5lIGRybV9tYXBfdCAqCi1kcm1fbG9va3VwX21hcCAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgZHJtX2RldmljZV90ICpkZXYpCitzdGF0aWMgaW5saW5lIGRybV9tYXBfdCAqZHJtX2xvb2t1cF9tYXAodW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkJCXVuc2lnbmVkIGxvbmcgc2l6ZSwgZHJtX2RldmljZV90ICogZGV2KQogewogCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CiAJZHJtX21hcF9saXN0X3QgKnJfbGlzdDsKQEAgLTcyLDE2ICs3MiwxOCBAQAogCQltYXAgPSByX2xpc3QtPm1hcDsKIAkJaWYgKCFtYXApCiAJCQljb250aW51ZTsKLQkJaWYgKG1hcC0+b2Zmc2V0IDw9IG9mZnNldCAmJiAob2Zmc2V0ICsgc2l6ZSkgPD0gKG1hcC0+b2Zmc2V0ICsgbWFwLT5zaXplKSkKKwkJaWYgKG1hcC0+b2Zmc2V0IDw9IG9mZnNldAorCQkgICAgJiYgKG9mZnNldCArIHNpemUpIDw9IChtYXAtPm9mZnNldCArIG1hcC0+c2l6ZSkpCiAJCQlyZXR1cm4gbWFwOwogCX0KIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkICoKLWFncF9yZW1hcCAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgZHJtX2RldmljZV90ICpkZXYpCitzdGF0aWMgaW5saW5lIHZvaWQgKmFncF9yZW1hcCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJICAgICAgZHJtX2RldmljZV90ICogZGV2KQogewotCXVuc2lnbmVkIGxvbmcgKnBoeXNfYWRkcl9tYXAsIGksIG51bV9wYWdlcyA9IFBBR0VfQUxJR04oc2l6ZSkgLyBQQUdFX1NJWkU7CisJdW5zaWduZWQgbG9uZyAqcGh5c19hZGRyX21hcCwgaSwgbnVtX3BhZ2VzID0KKwkgICAgUEFHRV9BTElHTihzaXplKSAvIFBBR0VfU0laRTsKIAlzdHJ1Y3QgZHJtX2FncF9tZW0gKmFncG1lbTsKIAlzdHJ1Y3QgcGFnZSAqKnBhZ2VfbWFwOwogCXZvaWQgKmFkZHI7CkBAIC05NCw3ICs5Niw4IEBACiAKIAlmb3IgKGFncG1lbSA9IGRldi0+YWdwLT5tZW1vcnk7IGFncG1lbTsgYWdwbWVtID0gYWdwbWVtLT5uZXh0KQogCQlpZiAoYWdwbWVtLT5ib3VuZCA8PSBvZmZzZXQKLQkJICAgICYmIChhZ3BtZW0tPmJvdW5kICsgKGFncG1lbS0+cGFnZXMgPDwgUEFHRV9TSElGVCkpID49IChvZmZzZXQgKyBzaXplKSkKKwkJICAgICYmIChhZ3BtZW0tPmJvdW5kICsgKGFncG1lbS0+cGFnZXMgPDwgUEFHRV9TSElGVCkpID49CisJCSAgICAob2Zmc2V0ICsgc2l6ZSkpCiAJCQlicmVhazsKIAlpZiAoIWFncG1lbSkKIAkJcmV0dXJuIE5VTEw7CkBAIC0xMDksNyArMTEyLDggQEAKIAlpZiAoIXBhZ2VfbWFwKQogCQlyZXR1cm4gTlVMTDsKIAotCXBoeXNfYWRkcl9tYXAgPSBhZ3BtZW0tPm1lbW9yeS0+bWVtb3J5ICsgKG9mZnNldCAtIGFncG1lbS0+Ym91bmQpIC8gUEFHRV9TSVpFOworCXBoeXNfYWRkcl9tYXAgPQorCSAgICBhZ3BtZW0tPm1lbW9yeS0+bWVtb3J5ICsgKG9mZnNldCAtIGFncG1lbS0+Ym91bmQpIC8gUEFHRV9TSVpFOwogCWZvciAoaSA9IDA7IGkgPCBudW1fcGFnZXM7ICsraSkKIAkJcGFnZV9tYXBbaV0gPSBwZm5fdG9fcGFnZShwaHlzX2FkZHJfbWFwW2ldID4+IFBBR0VfU0hJRlQpOwogCWFkZHIgPSB2bWFwKHBhZ2VfbWFwLCBudW1fcGFnZXMsIFZNX0lPUkVNQVAsIFBBR0VfQUdQKTsKQEAgLTExOCwzNiArMTIyLDM4IEBACiAJcmV0dXJuIGFkZHI7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwotZHJtX2ZvbGxvd19wYWdlICh2b2lkICp2YWRkcikKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkcm1fZm9sbG93X3BhZ2Uodm9pZCAqdmFkZHIpCiB7Ci0JcGdkX3QgKnBnZCA9IHBnZF9vZmZzZXRfaygodW5zaWduZWQgbG9uZykgdmFkZHIpOwotCXB1ZF90ICpwdWQgPSBwdWRfb2Zmc2V0KHBnZCwgKHVuc2lnbmVkIGxvbmcpIHZhZGRyKTsKLQlwbWRfdCAqcG1kID0gcG1kX29mZnNldChwdWQsICh1bnNpZ25lZCBsb25nKSB2YWRkcik7Ci0JcHRlX3QgKnB0ZXAgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsICh1bnNpZ25lZCBsb25nKSB2YWRkcik7CisJcGdkX3QgKnBnZCA9IHBnZF9vZmZzZXRfaygodW5zaWduZWQgbG9uZyl2YWRkcik7CisJcHVkX3QgKnB1ZCA9IHB1ZF9vZmZzZXQocGdkLCAodW5zaWduZWQgbG9uZyl2YWRkcik7CisJcG1kX3QgKnBtZCA9IHBtZF9vZmZzZXQocHVkLCAodW5zaWduZWQgbG9uZyl2YWRkcik7CisJcHRlX3QgKnB0ZXAgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsICh1bnNpZ25lZCBsb25nKXZhZGRyKTsKIAlyZXR1cm4gcHRlX3BmbigqcHRlcCkgPDwgUEFHRV9TSElGVDsKIH0KIAotI2Vsc2UgLyogX19PU19IQVNfQUdQICovCisjZWxzZQkJCQkvKiBfX09TX0hBU19BR1AgKi8KIAotc3RhdGljIGlubGluZSBkcm1fbWFwX3QgKmRybV9sb29rdXBfbWFwKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsIGRybV9kZXZpY2VfdCAqZGV2KQorc3RhdGljIGlubGluZSBkcm1fbWFwX3QgKmRybV9sb29rdXBfbWFwKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJCQl1bnNpZ25lZCBsb25nIHNpemUsIGRybV9kZXZpY2VfdCAqIGRldikKIHsKLSAgcmV0dXJuIE5VTEw7CisJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCAqYWdwX3JlbWFwKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsIGRybV9kZXZpY2VfdCAqZGV2KQorc3RhdGljIGlubGluZSB2b2lkICphZ3BfcmVtYXAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCSAgICAgIGRybV9kZXZpY2VfdCAqIGRldikKIHsKLSAgcmV0dXJuIE5VTEw7CisJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkcm1fZm9sbG93X3BhZ2UgKHZvaWQgKnZhZGRyKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRybV9mb2xsb3dfcGFnZSh2b2lkICp2YWRkcikKIHsKLSAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKICNlbmRpZgogCi1zdGF0aWMgaW5saW5lIHZvaWQgKmRybV9pb3JlbWFwKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsIGRybV9kZXZpY2VfdCAqZGV2KQorc3RhdGljIGlubGluZSB2b2lkICpkcm1faW9yZW1hcCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJCWRybV9kZXZpY2VfdCAqIGRldikKIHsKIAlpZiAoZHJtX2NvcmVfaGFzX0FHUChkZXYpICYmIGRldi0+YWdwICYmIGRldi0+YWdwLT5jYW50X3VzZV9hcGVydHVyZSkgewogCQlkcm1fbWFwX3QgKm1hcCA9IGRybV9sb29rdXBfbWFwKG9mZnNldCwgc2l6ZSwgZGV2KTsKQEAgLTE1OCw4ICsxNjQsOCBAQAogCXJldHVybiBpb3JlbWFwKG9mZnNldCwgc2l6ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCAqZHJtX2lvcmVtYXBfbm9jYWNoZSh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJCQlkcm1fZGV2aWNlX3QgKmRldikKK3N0YXRpYyBpbmxpbmUgdm9pZCAqZHJtX2lvcmVtYXBfbm9jYWNoZSh1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCQkJdW5zaWduZWQgbG9uZyBzaXplLCBkcm1fZGV2aWNlX3QgKiBkZXYpCiB7CiAJaWYgKGRybV9jb3JlX2hhc19BR1AoZGV2KSAmJiBkZXYtPmFncCAmJiBkZXYtPmFncC0+Y2FudF91c2VfYXBlcnR1cmUpIHsKIAkJZHJtX21hcF90ICptYXAgPSBkcm1fbG9va3VwX21hcChvZmZzZXQsIHNpemUsIGRldik7CkBAIC0xNzAsNyArMTc2LDggQEAKIAlyZXR1cm4gaW9yZW1hcF9ub2NhY2hlKG9mZnNldCwgc2l6ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkcm1faW9yZW1hcGZyZWUodm9pZCAqcHQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgZHJtX2RldmljZV90ICpkZXYpCitzdGF0aWMgaW5saW5lIHZvaWQgZHJtX2lvcmVtYXBmcmVlKHZvaWQgKnB0LCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkJICAgZHJtX2RldmljZV90ICogZGV2KQogewogCS8qCiAJICogVGhpcyBpcyBhIGJpdCB1Z2x5LiAgSXQgd291bGQgYmUgbXVjaCBjbGVhbmVyIGlmIHRoZSBEUk0gQVBJIHdvdWxkIHVzZSBzZXBhcmF0ZQpAQCAtMTc4LDEyICsxODUsMTIgQEAKIAkgKiBhIGZ1dHVyZSByZXZpc2lvbiBvZiB0aGUgaW50ZXJmYWNlLi4uCiAJICovCiAJaWYgKGRybV9jb3JlX2hhc19BR1AoZGV2KSAmJiBkZXYtPmFncCAmJiBkZXYtPmFncC0+Y2FudF91c2VfYXBlcnR1cmUKLQkgICAgJiYgKCh1bnNpZ25lZCBsb25nKSBwdCA+PSBWTUFMTE9DX1NUQVJUICYmICh1bnNpZ25lZCBsb25nKSBwdCA8IFZNQUxMT0NfRU5EKSkKLQl7CisJICAgICYmICgodW5zaWduZWQgbG9uZylwdCA+PSBWTUFMTE9DX1NUQVJUCisJCSYmICh1bnNpZ25lZCBsb25nKXB0IDwgVk1BTExPQ19FTkQpKSB7CiAJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwogCQlkcm1fbWFwX3QgKm1hcDsKIAotCQlvZmZzZXQgPSBkcm1fZm9sbG93X3BhZ2UocHQpIHwgKCh1bnNpZ25lZCBsb25nKSBwdCAmIH5QQUdFX01BU0spOworCQlvZmZzZXQgPSBkcm1fZm9sbG93X3BhZ2UocHQpIHwgKCh1bnNpZ25lZCBsb25nKXB0ICYgflBBR0VfTUFTSyk7CiAJCW1hcCA9IGRybV9sb29rdXBfbWFwKG9mZnNldCwgc2l6ZSwgZGV2KTsKIAkJaWYgKG1hcCAmJiBtYXAtPnR5cGUgPT0gX0RSTV9BR1ApIHsKIAkJCXZ1bm1hcChwdCk7CkBAIC0xOTMsNSArMjAwLDMgQEAKIAogCWlvdW5tYXAocHQpOwogfQotCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX21lbW9yeV9kZWJ1Zy5oIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fbWVtb3J5X2RlYnVnLmgKaW5kZXggMmM4MmU2OS4uNDU0MjM1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1fbWVtb3J5X2RlYnVnLmgKKysrIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fbWVtb3J5X2RlYnVnLmgKQEAgLTEsNSArMSw1IEBACiAvKioKLSAqIFxmaWxlIGRybV9tZW1vcnkuaCAKKyAqIFxmaWxlIGRybV9tZW1vcnkuaAogICogTWVtb3J5IG1hbmFnZW1lbnQgd3JhcHBlcnMgZm9yIERSTS4KICAqCiAgKiBcYXV0aG9yIFJpY2thcmQgRS4gKFJpaykgRmFpdGggPGZhaXRoQHZhbGludXguY29tPgpAQCAtMzUsNzUgKzM1LDc1IEBACiAjaW5jbHVkZSAiZHJtUC5oIgogCiB0eXBlZGVmIHN0cnVjdCBkcm1fbWVtX3N0YXRzIHsKLQljb25zdCBjaGFyCSAgKm5hbWU7Ci0JaW50CQkgIHN1Y2NlZWRfY291bnQ7Ci0JaW50CQkgIGZyZWVfY291bnQ7Ci0JaW50CQkgIGZhaWxfY291bnQ7Ci0JdW5zaWduZWQgbG9uZwkgIGJ5dGVzX2FsbG9jYXRlZDsKLQl1bnNpZ25lZCBsb25nCSAgYnl0ZXNfZnJlZWQ7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgc3VjY2VlZF9jb3VudDsKKwlpbnQgZnJlZV9jb3VudDsKKwlpbnQgZmFpbF9jb3VudDsKKwl1bnNpZ25lZCBsb25nIGJ5dGVzX2FsbG9jYXRlZDsKKwl1bnNpZ25lZCBsb25nIGJ5dGVzX2ZyZWVkOwogfSBkcm1fbWVtX3N0YXRzX3Q7CiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soRFJNKG1lbV9sb2NrKSk7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZwkgIERSTShyYW1fYXZhaWxhYmxlKSA9IDA7IC8qIEluIHBhZ2VzICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZwkgIERSTShyYW1fdXNlZCkgICAgICA9IDA7Ci1zdGF0aWMgZHJtX21lbV9zdGF0c190CSAgRFJNKG1lbV9zdGF0cylbXSAgID0gewotCVtEUk1fTUVNX0RNQV0JICAgID0geyAiZG1hYnVmcyIgIH0sCi0JW0RSTV9NRU1fU0FSRUFdCSAgICA9IHsgInNhcmVhcyIgICB9LAotCVtEUk1fTUVNX0RSSVZFUl0gICAgPSB7ICJkcml2ZXIiICAgfSwKLQlbRFJNX01FTV9NQUdJQ10JICAgID0geyAibWFnaWMiCSAgIH0sCi0JW0RSTV9NRU1fSU9DVExTXSAgICA9IHsgImlvY3RsdGFiIiB9LAotCVtEUk1fTUVNX01BUFNdCSAgICA9IHsgIm1hcGxpc3QiICB9LAotCVtEUk1fTUVNX1ZNQVNdCSAgICA9IHsgInZtYWxpc3QiICB9LAotCVtEUk1fTUVNX0JVRlNdCSAgICA9IHsgImJ1Zmxpc3QiICB9LAotCVtEUk1fTUVNX1NFR1NdCSAgICA9IHsgInNlZ2xpc3QiICB9LAotCVtEUk1fTUVNX1BBR0VTXQkgICAgPSB7ICJwYWdlbGlzdCIgfSwKLQlbRFJNX01FTV9GSUxFU10JICAgID0geyAiZmlsZXMiCSAgIH0sCi0JW0RSTV9NRU1fUVVFVUVTXSAgICA9IHsgInF1ZXVlcyIgICB9LAotCVtEUk1fTUVNX0NNRFNdCSAgICA9IHsgImNvbW1hbmRzIiB9LAotCVtEUk1fTUVNX01BUFBJTkdTXSAgPSB7ICJtYXBwaW5ncyIgfSwKLQlbRFJNX01FTV9CVUZMSVNUU10gID0geyAiYnVmbGlzdHMiIH0sCi0JW0RSTV9NRU1fQUdQTElTVFNdICA9IHsgImFncGxpc3QiICB9LAotCVtEUk1fTUVNX1NHTElTVFNdICAgPSB7ICJzZ2xpc3QiICAgfSwKLQlbRFJNX01FTV9UT1RBTEFHUF0gID0geyAidG90YWxhZ3AiIH0sCi0JW0RSTV9NRU1fQk9VTkRBR1BdICA9IHsgImJvdW5kYWdwIiB9LAotCVtEUk1fTUVNX0NUWEJJVE1BUF0gPSB7ICJjdHhiaXRtYXAifSwKLQlbRFJNX01FTV9DVFhMSVNUXSAgID0geyAiY3R4bGlzdCIgIH0sCi0JW0RSTV9NRU1fU1RVQl0gICAgICA9IHsgInN0dWIiICAgICB9LAotCXsgTlVMTCwgMCwgfQkJLyogTGFzdCBlbnRyeSBtdXN0IGJlIG51bGwgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIERSTShyYW1fYXZhaWxhYmxlKSA9IDA7CS8qIEluIHBhZ2VzICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBEUk0ocmFtX3VzZWQpID0gMDsKK3N0YXRpYyBkcm1fbWVtX3N0YXRzX3QgRFJNKG1lbV9zdGF0cylbXSA9Cit7CisJW0RSTV9NRU1fRE1BXSA9IHsKKwkiZG1hYnVmcyJ9LFtEUk1fTUVNX1NBUkVBXSA9IHsKKwkic2FyZWFzIn0sW0RSTV9NRU1fRFJJVkVSXSA9IHsKKwkiZHJpdmVyIn0sW0RSTV9NRU1fTUFHSUNdID0geworCSJtYWdpYyJ9LFtEUk1fTUVNX0lPQ1RMU10gPSB7CisJImlvY3RsdGFiIn0sW0RSTV9NRU1fTUFQU10gPSB7CisJIm1hcGxpc3QifSxbRFJNX01FTV9WTUFTXSA9IHsKKwkidm1hbGlzdCJ9LFtEUk1fTUVNX0JVRlNdID0geworCSJidWZsaXN0In0sW0RSTV9NRU1fU0VHU10gPSB7CisJInNlZ2xpc3QifSxbRFJNX01FTV9QQUdFU10gPSB7CisJInBhZ2VsaXN0In0sW0RSTV9NRU1fRklMRVNdID0geworCSJmaWxlcyJ9LFtEUk1fTUVNX1FVRVVFU10gPSB7CisJInF1ZXVlcyJ9LFtEUk1fTUVNX0NNRFNdID0geworCSJjb21tYW5kcyJ9LFtEUk1fTUVNX01BUFBJTkdTXSA9IHsKKwkibWFwcGluZ3MifSxbRFJNX01FTV9CVUZMSVNUU10gPSB7CisJImJ1Zmxpc3RzIn0sW0RSTV9NRU1fQUdQTElTVFNdID0geworCSJhZ3BsaXN0In0sW0RSTV9NRU1fU0dMSVNUU10gPSB7CisJInNnbGlzdCJ9LFtEUk1fTUVNX1RPVEFMQUdQXSA9IHsKKwkidG90YWxhZ3AifSxbRFJNX01FTV9CT1VOREFHUF0gPSB7CisJImJvdW5kYWdwIn0sW0RSTV9NRU1fQ1RYQklUTUFQXSA9IHsKKwkiY3R4Yml0bWFwIn0sW0RSTV9NRU1fQ1RYTElTVF0gPSB7CisJImN0eGxpc3QifSxbRFJNX01FTV9TVFVCXSA9IHsKKwkic3R1YiJ9LCB7CisJTlVMTCwgMCx9CQkvKiBMYXN0IGVudHJ5IG11c3QgYmUgbnVsbCAqLwogfTsKIAotdm9pZCBEUk0obWVtX2luaXQpKHZvaWQpCi17Cit2b2lkIERSTShtZW1faW5pdCkgKHZvaWQpIHsKIAlkcm1fbWVtX3N0YXRzX3QgKm1lbTsKLQlzdHJ1Y3Qgc3lzaW5mbwlzaTsKKwlzdHJ1Y3Qgc3lzaW5mbyBzaTsKIAogCWZvciAobWVtID0gRFJNKG1lbV9zdGF0cyk7IG1lbS0+bmFtZTsgKyttZW0pIHsKLQkJbWVtLT5zdWNjZWVkX2NvdW50ICAgPSAwOwotCQltZW0tPmZyZWVfY291bnQJICAgICA9IDA7Ci0JCW1lbS0+ZmFpbF9jb3VudAkgICAgID0gMDsKKwkJbWVtLT5zdWNjZWVkX2NvdW50ID0gMDsKKwkJbWVtLT5mcmVlX2NvdW50ID0gMDsKKwkJbWVtLT5mYWlsX2NvdW50ID0gMDsKIAkJbWVtLT5ieXRlc19hbGxvY2F0ZWQgPSAwOwotCQltZW0tPmJ5dGVzX2ZyZWVkICAgICA9IDA7CisJCW1lbS0+Ynl0ZXNfZnJlZWQgPSAwOwogCX0KIAogCXNpX21lbWluZm8oJnNpKTsKIAlEUk0ocmFtX2F2YWlsYWJsZSkgPSBzaS50b3RhbHJhbTsKLQlEUk0ocmFtX3VzZWQpCSAgID0gMDsKKwlEUk0ocmFtX3VzZWQpID0gMDsKIH0KIAogLyogZHJtX21lbV9pbmZvIGlzIGNhbGxlZCB3aGVuZXZlciBhIHByb2Nlc3MgcmVhZHMgL2Rldi9kcm0vbWVtLiAqLwogCi1zdGF0aWMgaW50IERSTShfbWVtX2luZm8pKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCi0JCQkgIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKLXsKK3N0YXRpYyBpbnQgRFJNKF9tZW1faW5mbykgKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCisJCQkgICBpbnQgcmVxdWVzdCwgaW50ICplb2YsIHZvaWQgKmRhdGEpIHsKIAlkcm1fbWVtX3N0YXRzX3QgKnB0OwotCWludCAgICAgICAgICAgICBsZW4gPSAwOworCWludCBsZW4gPSAwOwogCiAJaWYgKG9mZnNldCA+IERSTV9QUk9DX0xJTUlUKSB7CiAJCSplb2YgPSAxOwogCQlyZXR1cm4gMDsKIAl9CiAKLQkqZW9mICAgPSAwOworCSplb2YgPSAwOwogCSpzdGFydCA9ICZidWZbb2Zmc2V0XTsKIAogCURSTV9QUk9DX1BSSU5UKCIJCSAgdG90YWwgY291bnRzCQkJIgpAQCAtMTI5LDI0ICsxMjksMjMgQEAKIAkJCSAgICAgICAtIChsb25nKXB0LT5ieXRlc19mcmVlZCk7CiAJfQogCi0JaWYgKGxlbiA+IHJlcXVlc3QgKyBvZmZzZXQpIHJldHVybiByZXF1ZXN0OworCWlmIChsZW4gPiByZXF1ZXN0ICsgb2Zmc2V0KQorCQlyZXR1cm4gcmVxdWVzdDsKIAkqZW9mID0gMTsKIAlyZXR1cm4gbGVuIC0gb2Zmc2V0OwogfQogCi1pbnQgRFJNKG1lbV9pbmZvKShjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAotCQkgIGludCBsZW4sIGludCAqZW9mLCB2b2lkICpkYXRhKQoteworaW50IERSTShtZW1faW5mbykgKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCisJCSAgIGludCBsZW4sIGludCAqZW9mLCB2b2lkICpkYXRhKSB7CiAJaW50IHJldDsKIAogCXNwaW5fbG9jaygmRFJNKG1lbV9sb2NrKSk7Ci0JcmV0ID0gRFJNKF9tZW1faW5mbykoYnVmLCBzdGFydCwgb2Zmc2V0LCBsZW4sIGVvZiwgZGF0YSk7CisJcmV0ID0gRFJNKF9tZW1faW5mbykgKGJ1Ziwgc3RhcnQsIG9mZnNldCwgbGVuLCBlb2YsIGRhdGEpOwogCXNwaW5fdW5sb2NrKCZEUk0obWVtX2xvY2spKTsKIAlyZXR1cm4gcmV0OwogfQogCi12b2lkICpEUk0oYWxsb2MpKHNpemVfdCBzaXplLCBpbnQgYXJlYSkKLXsKK3ZvaWQgKkRSTShhbGxvYykgKHNpemVfdCBzaXplLCBpbnQgYXJlYSkgewogCXZvaWQgKnB0OwogCiAJaWYgKCFzaXplKSB7CkBAIC0xNjcsNDAgKzE2Niw0MCBAQAogCXJldHVybiBwdDsKIH0KIAotdm9pZCAqRFJNKGNhbGxvYykoc2l6ZV90IG5tZW1iLCBzaXplX3Qgc2l6ZSwgaW50IGFyZWEpCi17Cit2b2lkICpEUk0oY2FsbG9jKSAoc2l6ZV90IG5tZW1iLCBzaXplX3Qgc2l6ZSwgaW50IGFyZWEpIHsKIAl2b2lkICphZGRyOwogCi0JYWRkciA9IERSTShhbGxvYykobm1lbWIgKiBzaXplLCBhcmVhKTsKKwlhZGRyID0gRFJNKGFsbG9jKSAobm1lbWIgKiBzaXplLCBhcmVhKTsKIAlpZiAoYWRkciAhPSBOVUxMKQogCQltZW1zZXQoKHZvaWQgKilhZGRyLCAwLCBzaXplICogbm1lbWIpOwogCiAJcmV0dXJuIGFkZHI7CiB9CiAKLXZvaWQgKkRSTShyZWFsbG9jKSh2b2lkICpvbGRwdCwgc2l6ZV90IG9sZHNpemUsIHNpemVfdCBzaXplLCBpbnQgYXJlYSkKLXsKK3ZvaWQgKkRSTShyZWFsbG9jKSAodm9pZCAqb2xkcHQsIHNpemVfdCBvbGRzaXplLCBzaXplX3Qgc2l6ZSwgaW50IGFyZWEpIHsKIAl2b2lkICpwdDsKIAotCWlmICghKHB0ID0gRFJNKGFsbG9jKShzaXplLCBhcmVhKSkpIHJldHVybiBOVUxMOworCWlmICghKHB0ID0gRFJNKGFsbG9jKSAoc2l6ZSwgYXJlYSkpKQorCQlyZXR1cm4gTlVMTDsKIAlpZiAob2xkcHQgJiYgb2xkc2l6ZSkgewogCQltZW1jcHkocHQsIG9sZHB0LCBvbGRzaXplKTsKLQkJRFJNKGZyZWUpKG9sZHB0LCBvbGRzaXplLCBhcmVhKTsKKwkJRFJNKGZyZWUpIChvbGRwdCwgb2xkc2l6ZSwgYXJlYSk7CiAJfQogCXJldHVybiBwdDsKIH0KIAotdm9pZCBEUk0oZnJlZSkodm9pZCAqcHQsIHNpemVfdCBzaXplLCBpbnQgYXJlYSkKLXsKK3ZvaWQgRFJNKGZyZWUpICh2b2lkICpwdCwgc2l6ZV90IHNpemUsIGludCBhcmVhKSB7CiAJaW50IGFsbG9jX2NvdW50OwogCWludCBmcmVlX2NvdW50OwogCi0JaWYgKCFwdCkgRFJNX01FTV9FUlJPUihhcmVhLCAiQXR0ZW1wdCB0byBmcmVlIE5VTEwgcG9pbnRlclxuIik7Ci0JZWxzZQkga2ZyZWUocHQpOworCWlmICghcHQpCisJCURSTV9NRU1fRVJST1IoYXJlYSwgIkF0dGVtcHQgdG8gZnJlZSBOVUxMIHBvaW50ZXJcbiIpOworCWVsc2UKKwkJa2ZyZWUocHQpOwogCXNwaW5fbG9jaygmRFJNKG1lbV9sb2NrKSk7CiAJRFJNKG1lbV9zdGF0cylbYXJlYV0uYnl0ZXNfZnJlZWQgKz0gc2l6ZTsKLQlmcmVlX2NvdW50ICA9ICsrRFJNKG1lbV9zdGF0cylbYXJlYV0uZnJlZV9jb3VudDsKLQlhbGxvY19jb3VudCA9CURSTShtZW1fc3RhdHMpW2FyZWFdLnN1Y2NlZWRfY291bnQ7CisJZnJlZV9jb3VudCA9ICsrRFJNKG1lbV9zdGF0cylbYXJlYV0uZnJlZV9jb3VudDsKKwlhbGxvY19jb3VudCA9IERSTShtZW1fc3RhdHMpW2FyZWFdLnN1Y2NlZWRfY291bnQ7CiAJc3Bpbl91bmxvY2soJkRSTShtZW1fbG9jaykpOwogCWlmIChmcmVlX2NvdW50ID4gYWxsb2NfY291bnQpIHsKIAkJRFJNX01FTV9FUlJPUihhcmVhLCAiRXhjZXNzIGZyZWVzOiAlZCBmcmVlcywgJWQgYWxsb2NzXG4iLApAQCAtMjA4LDEyICsyMDcsMTEgQEAKIAl9CiB9CiAKLXVuc2lnbmVkIGxvbmcgRFJNKGFsbG9jX3BhZ2VzKShpbnQgb3JkZXIsIGludCBhcmVhKQotewordW5zaWduZWQgbG9uZyBEUk0oYWxsb2NfcGFnZXMpIChpbnQgb3JkZXIsIGludCBhcmVhKSB7CiAJdW5zaWduZWQgbG9uZyBhZGRyZXNzOwotCXVuc2lnbmVkIGxvbmcgYnl0ZXMJICA9IFBBR0VfU0laRSA8PCBvcmRlcjsKKwl1bnNpZ25lZCBsb25nIGJ5dGVzID0gUEFHRV9TSVpFIDw8IG9yZGVyOwogCXVuc2lnbmVkIGxvbmcgYWRkcjsKLQl1bnNpZ25lZCBpbnQgIHN6OworCXVuc2lnbmVkIGludCBzejsKIAogCXNwaW5fbG9jaygmRFJNKG1lbV9sb2NrKSk7CiAJaWYgKChEUk0ocmFtX3VzZWQpID4+IFBBR0VfU0hJRlQpCkBAIC0yMzMsNDggKzIzMSw0NCBAQAogCXNwaW5fbG9jaygmRFJNKG1lbV9sb2NrKSk7CiAJKytEUk0obWVtX3N0YXRzKVthcmVhXS5zdWNjZWVkX2NvdW50OwogCURSTShtZW1fc3RhdHMpW2FyZWFdLmJ5dGVzX2FsbG9jYXRlZCArPSBieXRlczsKLQlEUk0ocmFtX3VzZWQpCQkgICAgICAgICAgICAgKz0gYnl0ZXM7CisJRFJNKHJhbV91c2VkKSArPSBieXRlczsKIAlzcGluX3VubG9jaygmRFJNKG1lbV9sb2NrKSk7CiAKLQotCQkJCS8qIFplcm8gb3V0c2lkZSB0aGUgbG9jayAqLworCS8qIFplcm8gb3V0c2lkZSB0aGUgbG9jayAqLwogCW1lbXNldCgodm9pZCAqKWFkZHJlc3MsIDAsIGJ5dGVzKTsKIAotCQkJCS8qIFJlc2VydmUgKi8KKwkvKiBSZXNlcnZlICovCiAJZm9yIChhZGRyID0gYWRkcmVzcywgc3ogPSBieXRlczsKLQkgICAgIHN6ID4gMDsKLQkgICAgIGFkZHIgKz0gUEFHRV9TSVpFLCBzeiAtPSBQQUdFX1NJWkUpIHsKKwkgICAgIHN6ID4gMDsgYWRkciArPSBQQUdFX1NJWkUsIHN6IC09IFBBR0VfU0laRSkgewogCQlTZXRQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKGFkZHIpKTsKIAl9CiAKIAlyZXR1cm4gYWRkcmVzczsKIH0KIAotdm9pZCBEUk0oZnJlZV9wYWdlcykodW5zaWduZWQgbG9uZyBhZGRyZXNzLCBpbnQgb3JkZXIsIGludCBhcmVhKQotewordm9pZCBEUk0oZnJlZV9wYWdlcykgKHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgaW50IG9yZGVyLCBpbnQgYXJlYSkgewogCXVuc2lnbmVkIGxvbmcgYnl0ZXMgPSBQQUdFX1NJWkUgPDwgb3JkZXI7Ci0JaW50CQkgIGFsbG9jX2NvdW50OwotCWludAkJICBmcmVlX2NvdW50OworCWludCBhbGxvY19jb3VudDsKKwlpbnQgZnJlZV9jb3VudDsKIAl1bnNpZ25lZCBsb25nIGFkZHI7Ci0JdW5zaWduZWQgaW50ICBzejsKKwl1bnNpZ25lZCBpbnQgc3o7CiAKIAlpZiAoIWFkZHJlc3MpIHsKIAkJRFJNX01FTV9FUlJPUihhcmVhLCAiQXR0ZW1wdCB0byBmcmVlIGFkZHJlc3MgMFxuIik7CiAJfSBlbHNlIHsKLQkJCQkvKiBVbnJlc2VydmUgKi8KKwkJLyogVW5yZXNlcnZlICovCiAJCWZvciAoYWRkciA9IGFkZHJlc3MsIHN6ID0gYnl0ZXM7Ci0JCSAgICAgc3ogPiAwOwotCQkgICAgIGFkZHIgKz0gUEFHRV9TSVpFLCBzeiAtPSBQQUdFX1NJWkUpIHsKKwkJICAgICBzeiA+IDA7IGFkZHIgKz0gUEFHRV9TSVpFLCBzeiAtPSBQQUdFX1NJWkUpIHsKIAkJCUNsZWFyUGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZShhZGRyKSk7CiAJCX0KIAkJZnJlZV9wYWdlcyhhZGRyZXNzLCBvcmRlcik7CiAJfQogCiAJc3Bpbl9sb2NrKCZEUk0obWVtX2xvY2spKTsKLQlmcmVlX2NvdW50ICA9ICsrRFJNKG1lbV9zdGF0cylbYXJlYV0uZnJlZV9jb3VudDsKLQlhbGxvY19jb3VudCA9CURSTShtZW1fc3RhdHMpW2FyZWFdLnN1Y2NlZWRfY291bnQ7CisJZnJlZV9jb3VudCA9ICsrRFJNKG1lbV9zdGF0cylbYXJlYV0uZnJlZV9jb3VudDsKKwlhbGxvY19jb3VudCA9IERSTShtZW1fc3RhdHMpW2FyZWFdLnN1Y2NlZWRfY291bnQ7CiAJRFJNKG1lbV9zdGF0cylbYXJlYV0uYnl0ZXNfZnJlZWQgKz0gYnl0ZXM7Ci0JRFJNKHJhbV91c2VkKQkJCSAtPSBieXRlczsKKwlEUk0ocmFtX3VzZWQpIC09IGJ5dGVzOwogCXNwaW5fdW5sb2NrKCZEUk0obWVtX2xvY2spKTsKIAlpZiAoZnJlZV9jb3VudCA+IGFsbG9jX2NvdW50KSB7CiAJCURSTV9NRU1fRVJST1IoYXJlYSwKQEAgLTI4Myw4ICsyNzcsOCBAQAogCX0KIH0KIAotdm9pZCAqRFJNKGlvcmVtYXApKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsIGRybV9kZXZpY2VfdCAqZGV2KQotewordm9pZCAqRFJNKGlvcmVtYXApICh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkgICAgZHJtX2RldmljZV90ICogZGV2KSB7CiAJdm9pZCAqcHQ7CiAKIAlpZiAoIXNpemUpIHsKQEAgLTMwNiw4ICszMDAsOCBAQAogCXJldHVybiBwdDsKIH0KIAotdm9pZCAqRFJNKGlvcmVtYXBfbm9jYWNoZSkodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgZHJtX2RldmljZV90ICpkZXYpCi17Cit2b2lkICpEUk0oaW9yZW1hcF9ub2NhY2hlKSAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCSAgICBkcm1fZGV2aWNlX3QgKiBkZXYpIHsKIAl2b2lkICpwdDsKIAogCWlmICghc2l6ZSkgewpAQCAtMzI5LDggKzMyMyw3IEBACiAJcmV0dXJuIHB0OwogfQogCi12b2lkIERSTShpb3JlbWFwZnJlZSkodm9pZCAqcHQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgZHJtX2RldmljZV90ICpkZXYpCi17Cit2b2lkIERSTShpb3JlbWFwZnJlZSkgKHZvaWQgKnB0LCB1bnNpZ25lZCBsb25nIHNpemUsIGRybV9kZXZpY2VfdCAqIGRldikgewogCWludCBhbGxvY19jb3VudDsKIAlpbnQgZnJlZV9jb3VudDsKIApAQCAtMzQyLDggKzMzNSw4IEBACiAKIAlzcGluX2xvY2soJkRSTShtZW1fbG9jaykpOwogCURSTShtZW1fc3RhdHMpW0RSTV9NRU1fTUFQUElOR1NdLmJ5dGVzX2ZyZWVkICs9IHNpemU7Ci0JZnJlZV9jb3VudCAgPSArK0RSTShtZW1fc3RhdHMpW0RSTV9NRU1fTUFQUElOR1NdLmZyZWVfY291bnQ7Ci0JYWxsb2NfY291bnQgPQlEUk0obWVtX3N0YXRzKVtEUk1fTUVNX01BUFBJTkdTXS5zdWNjZWVkX2NvdW50OworCWZyZWVfY291bnQgPSArK0RSTShtZW1fc3RhdHMpW0RSTV9NRU1fTUFQUElOR1NdLmZyZWVfY291bnQ7CisJYWxsb2NfY291bnQgPSBEUk0obWVtX3N0YXRzKVtEUk1fTUVNX01BUFBJTkdTXS5zdWNjZWVkX2NvdW50OwogCXNwaW5fdW5sb2NrKCZEUk0obWVtX2xvY2spKTsKIAlpZiAoZnJlZV9jb3VudCA+IGFsbG9jX2NvdW50KSB7CiAJCURSTV9NRU1fRVJST1IoRFJNX01FTV9NQVBQSU5HUywKQEAgLTM1NCw4ICszNDcsNyBAQAogCiAjaWYgX19PU19IQVNfQUdQCiAKLURSTV9BR1BfTUVNICpEUk0oYWxsb2NfYWdwKShpbnQgcGFnZXMsIHUzMiB0eXBlKQoteworRFJNX0FHUF9NRU0gKkRSTShhbGxvY19hZ3ApIChpbnQgcGFnZXMsIHUzMiB0eXBlKSB7CiAJRFJNX0FHUF9NRU0gKmhhbmRsZTsKIAogCWlmICghcGFnZXMpIHsKQEAgLTM2MywxMSArMzU1LDExIEBACiAJCXJldHVybiBOVUxMOwogCX0KIAotCWlmICgoaGFuZGxlID0gRFJNKGFncF9hbGxvY2F0ZV9tZW1vcnkpKHBhZ2VzLCB0eXBlKSkpIHsKKwlpZiAoKGhhbmRsZSA9IERSTShhZ3BfYWxsb2NhdGVfbWVtb3J5KSAocGFnZXMsIHR5cGUpKSkgewogCQlzcGluX2xvY2soJkRSTShtZW1fbG9jaykpOwogCQkrK0RSTShtZW1fc3RhdHMpW0RSTV9NRU1fVE9UQUxBR1BdLnN1Y2NlZWRfY291bnQ7CiAJCURSTShtZW1fc3RhdHMpW0RSTV9NRU1fVE9UQUxBR1BdLmJ5dGVzX2FsbG9jYXRlZAotCQkJKz0gcGFnZXMgPDwgUEFHRV9TSElGVDsKKwkJICAgICs9IHBhZ2VzIDw8IFBBR0VfU0hJRlQ7CiAJCXNwaW5fdW5sb2NrKCZEUk0obWVtX2xvY2spKTsKIAkJcmV0dXJuIGhhbmRsZTsKIAl9CkBAIC0zNzcsMTEgKzM2OSwxMCBAQAogCXJldHVybiBOVUxMOwogfQogCi1pbnQgRFJNKGZyZWVfYWdwKShEUk1fQUdQX01FTSAqaGFuZGxlLCBpbnQgcGFnZXMpCi17Ci0JaW50ICAgICAgICAgICBhbGxvY19jb3VudDsKLQlpbnQgICAgICAgICAgIGZyZWVfY291bnQ7Ci0JaW50ICAgICAgICAgICByZXR2YWwgPSAtRUlOVkFMOworaW50IERSTShmcmVlX2FncCkgKERSTV9BR1BfTUVNICogaGFuZGxlLCBpbnQgcGFnZXMpIHsKKwlpbnQgYWxsb2NfY291bnQ7CisJaW50IGZyZWVfY291bnQ7CisJaW50IHJldHZhbCA9IC1FSU5WQUw7CiAKIAlpZiAoIWhhbmRsZSkgewogCQlEUk1fTUVNX0VSUk9SKERSTV9NRU1fVE9UQUxBR1AsCkBAIC0zODksMTIgKzM4MCwxMiBAQAogCQlyZXR1cm4gcmV0dmFsOwogCX0KIAotCWlmIChEUk0oYWdwX2ZyZWVfbWVtb3J5KShoYW5kbGUpKSB7CisJaWYgKERSTShhZ3BfZnJlZV9tZW1vcnkpIChoYW5kbGUpKSB7CiAJCXNwaW5fbG9jaygmRFJNKG1lbV9sb2NrKSk7Ci0JCWZyZWVfY291bnQgID0gKytEUk0obWVtX3N0YXRzKVtEUk1fTUVNX1RPVEFMQUdQXS5mcmVlX2NvdW50OwotCQlhbGxvY19jb3VudCA9ICAgRFJNKG1lbV9zdGF0cylbRFJNX01FTV9UT1RBTEFHUF0uc3VjY2VlZF9jb3VudDsKKwkJZnJlZV9jb3VudCA9ICsrRFJNKG1lbV9zdGF0cylbRFJNX01FTV9UT1RBTEFHUF0uZnJlZV9jb3VudDsKKwkJYWxsb2NfY291bnQgPSBEUk0obWVtX3N0YXRzKVtEUk1fTUVNX1RPVEFMQUdQXS5zdWNjZWVkX2NvdW50OwogCQlEUk0obWVtX3N0YXRzKVtEUk1fTUVNX1RPVEFMQUdQXS5ieXRlc19mcmVlZAotCQkJKz0gcGFnZXMgPDwgUEFHRV9TSElGVDsKKwkJICAgICs9IHBhZ2VzIDw8IFBBR0VfU0hJRlQ7CiAJCXNwaW5fdW5sb2NrKCZEUk0obWVtX2xvY2spKTsKIAkJaWYgKGZyZWVfY291bnQgPiBhbGxvY19jb3VudCkgewogCQkJRFJNX01FTV9FUlJPUihEUk1fTUVNX1RPVEFMQUdQLApAQCAtNDA2LDggKzM5Nyw3IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotaW50IERSTShiaW5kX2FncCkoRFJNX0FHUF9NRU0gKmhhbmRsZSwgdW5zaWduZWQgaW50IHN0YXJ0KQoteworaW50IERSTShiaW5kX2FncCkgKERSTV9BR1BfTUVNICogaGFuZGxlLCB1bnNpZ25lZCBpbnQgc3RhcnQpIHsKIAlpbnQgcmV0Y29kZSA9IC1FSU5WQUw7CiAKIAlpZiAoIWhhbmRsZSkgewpAQCAtNDE2LDExICs0MDYsMTEgQEAKIAkJcmV0dXJuIHJldGNvZGU7CiAJfQogCi0JaWYgKCEocmV0Y29kZSA9IERSTShhZ3BfYmluZF9tZW1vcnkpKGhhbmRsZSwgc3RhcnQpKSkgeworCWlmICghKHJldGNvZGUgPSBEUk0oYWdwX2JpbmRfbWVtb3J5KSAoaGFuZGxlLCBzdGFydCkpKSB7CiAJCXNwaW5fbG9jaygmRFJNKG1lbV9sb2NrKSk7CiAJCSsrRFJNKG1lbV9zdGF0cylbRFJNX01FTV9CT1VOREFHUF0uc3VjY2VlZF9jb3VudDsKIAkJRFJNKG1lbV9zdGF0cylbRFJNX01FTV9CT1VOREFHUF0uYnl0ZXNfYWxsb2NhdGVkCi0JCQkrPSBoYW5kbGUtPnBhZ2VfY291bnQgPDwgUEFHRV9TSElGVDsKKwkJICAgICs9IGhhbmRsZS0+cGFnZV9jb3VudCA8PCBQQUdFX1NISUZUOwogCQlzcGluX3VubG9jaygmRFJNKG1lbV9sb2NrKSk7CiAJCXJldHVybiByZXRjb2RlOwogCX0KQEAgLTQzMCw4ICs0MjAsNyBAQAogCXJldHVybiByZXRjb2RlOwogfQogCi1pbnQgRFJNKHVuYmluZF9hZ3ApKERSTV9BR1BfTUVNICpoYW5kbGUpCi17CitpbnQgRFJNKHVuYmluZF9hZ3ApIChEUk1fQUdQX01FTSAqIGhhbmRsZSkgewogCWludCBhbGxvY19jb3VudDsKIAlpbnQgZnJlZV9jb3VudDsKIAlpbnQgcmV0Y29kZSA9IC1FSU5WQUw7CkBAIC00NDIsMTIgKzQzMSwxMyBAQAogCQlyZXR1cm4gcmV0Y29kZTsKIAl9CiAKLQlpZiAoKHJldGNvZGUgPSBEUk0oYWdwX3VuYmluZF9tZW1vcnkpKGhhbmRsZSkpKSByZXR1cm4gcmV0Y29kZTsKKwlpZiAoKHJldGNvZGUgPSBEUk0oYWdwX3VuYmluZF9tZW1vcnkpIChoYW5kbGUpKSkKKwkJcmV0dXJuIHJldGNvZGU7CiAJc3Bpbl9sb2NrKCZEUk0obWVtX2xvY2spKTsKLQlmcmVlX2NvdW50ICA9ICsrRFJNKG1lbV9zdGF0cylbRFJNX01FTV9CT1VOREFHUF0uZnJlZV9jb3VudDsKKwlmcmVlX2NvdW50ID0gKytEUk0obWVtX3N0YXRzKVtEUk1fTUVNX0JPVU5EQUdQXS5mcmVlX2NvdW50OwogCWFsbG9jX2NvdW50ID0gRFJNKG1lbV9zdGF0cylbRFJNX01FTV9CT1VOREFHUF0uc3VjY2VlZF9jb3VudDsKIAlEUk0obWVtX3N0YXRzKVtEUk1fTUVNX0JPVU5EQUdQXS5ieXRlc19mcmVlZAotCQkrPSBoYW5kbGUtPnBhZ2VfY291bnQgPDwgUEFHRV9TSElGVDsKKwkgICAgKz0gaGFuZGxlLT5wYWdlX2NvdW50IDw8IFBBR0VfU0hJRlQ7CiAJc3Bpbl91bmxvY2soJkRSTShtZW1fbG9jaykpOwogCWlmIChmcmVlX2NvdW50ID4gYWxsb2NfY291bnQpIHsKIAkJRFJNX01FTV9FUlJPUihEUk1fTUVNX0JPVU5EQUdQLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9kcm1fb3NfbGludXguaCBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX29zX2xpbnV4LmgKaW5kZXggYjE0Y2QzNy4uZDUxYWViNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1fb3NfbGludXguaAorKysgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9vc19saW51eC5oCkBAIC0zLDcgKzMsNiBAQAogICogT1MgYWJzdHJhY3Rpb24gbWFjcm9zLgogICovCiAKLQogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgkvKiBGb3IgdGFzayBxdWV1ZSBzdXBwb3J0ICovCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIApAQCAtNDcsMjUgKzQ2LDI1IEBACiAjZWxzZQogLyogZGVmaW5lIHNvbWUgZHVtbXkgdHlwZXMgZm9yIG5vbiBBR1Agc3VwcG9ydGluZyBrZXJuZWxzICovCiBzdHJ1Y3Qgbm9fYWdwX2tlcm4gewotICB1bnNpZ25lZCBsb25nIGFwZXJfYmFzZTsKLSAgdW5zaWduZWQgbG9uZyBhcGVyX3NpemU7CisJdW5zaWduZWQgbG9uZyBhcGVyX2Jhc2U7CisJdW5zaWduZWQgbG9uZyBhcGVyX3NpemU7CiB9OwogI2RlZmluZSBEUk1fQUdQX01FTSAgICAgICAgICAgICBpbnQKICNkZWZpbmUgRFJNX0FHUF9LRVJOICAgICAgICAgICAgc3RydWN0IG5vX2FncF9rZXJuCiAjZW5kaWYKIAogI2lmICEoX19PU19IQVNfTVRSUikKLXN0YXRpYyBfX2lubGluZV9fIGludCBtdHJyX2FkZCAodW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB0eXBlLCBjaGFyIGluY3JlbWVudCkKK3N0YXRpYyBfX2lubGluZV9fIGludCBtdHJyX2FkZCh1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgdHlwZSwgY2hhciBpbmNyZW1lbnQpCiB7CiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIGludCBtdHJyX2RlbCAoaW50IHJlZywgdW5zaWduZWQgbG9uZyBiYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHNpemUpCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgbXRycl9kZWwoaW50IHJlZywgdW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUpCiB7CiAJcmV0dXJuIC1FTk9ERVY7CiB9CisKICNkZWZpbmUgTVRSUl9UWVBFX1dSQ09NQiAgICAgMQogCiAjZW5kaWYKQEAgLTk5LDcgKzk4LDcgQEAKIAogI2RlZmluZSBEUk1fR0VUX1BSSVZfV0lUSF9SRVRVUk4oX3ByaXYsIF9maWxwKSBfcHJpdiA9IF9maWxwLT5wcml2YXRlX2RhdGEKIAotLyoqIAorLyoqCiAgKiBHZXQgdGhlIHBvaW50ZXIgdG8gdGhlIFNBUkVBLgogICoKICAqIFNlYXJjaGVzIHRoZSBTQVJFQSBvbiB0aGUgbWFwcGluZyBsaXN0cyBhbmQgcG9pbnRzIGRybV9kZXZpY2U6OnNhcmVhIHRvIGl0LgpAQCAtMTQzLDcgKzE0Miw1IEBACiAJcmVtb3ZlX3dhaXRfcXVldWUoJihxdWV1ZSksICZlbnRyeSk7CQkJXAogfSB3aGlsZSAoMCkKIAotCiAjZGVmaW5lIERSTV9XQUtFVVAoIHF1ZXVlICkgd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCBxdWV1ZSApCiAjZGVmaW5lIERSTV9JTklUX1dBSVRRVUVVRSggcXVldWUgKSBpbml0X3dhaXRxdWV1ZV9oZWFkKCBxdWV1ZSApCi0gCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9wY2kuYyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX3BjaS5jCmluZGV4IDA5ZWQ3MTIuLjFmZDdmZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX3BjaS5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX3BjaS5jCkBAIC03Nyw3ICs3Nyw3IEBACiAJZG1haCA9IGttYWxsb2Moc2l6ZW9mKGRybV9kbWFfaGFuZGxlX3QpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRtYWgpCiAJCXJldHVybiBOVUxMOwotCQorCiAJZG1haC0+c2l6ZSA9IHNpemU7CiAJZG1haC0+dmFkZHIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChkZXYtPnBkZXYsIHNpemUsICZkbWFoLT5idXNhZGRyKTsKIApAQCAtMTA2LDYgKzEwNiw3IEBACiAKIAlyZXR1cm4gZG1haDsKIH0KKwogRVhQT1JUX1NZTUJPTChkcm1fcGNpX2FsbG9jKTsKIAogLyoqCkBAIC0xMTMsOCArMTE0LDcgQEAKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGlzIGZvciBpbnRlcm5hbCB1c2UgaW4gdGhlIExpbnV4LXNwZWNpZmljIERSTSBjb3JlIGNvZGUuCiAgKi8KLXZvaWQKLV9fZHJtX3BjaV9mcmVlKGRybV9kZXZpY2VfdCAqIGRldiwgZHJtX2RtYV9oYW5kbGVfdCAqZG1haCkKK3ZvaWQgX19kcm1fcGNpX2ZyZWUoZHJtX2RldmljZV90ICogZGV2LCBkcm1fZG1hX2hhbmRsZV90ICogZG1haCkKIHsKICNpZmRlZiBEUk1fREVCVUdfTUVNT1JZCiAJaW50IGFyZWEgPSBEUk1fTUVNX0RNQTsKQEAgLTE1MCwxMiArMTUwLDEyIEBACiAvKioKICAqIFxicmllZiBGcmVlIGEgUENJIGNvbnNpc3RlbnQgbWVtb3J5IGJsb2NrCiAgKi8KLXZvaWQKLWRybV9wY2lfZnJlZShkcm1fZGV2aWNlX3QgKmRldiwgZHJtX2RtYV9oYW5kbGVfdCAqZG1haCkKK3ZvaWQgZHJtX3BjaV9mcmVlKGRybV9kZXZpY2VfdCAqIGRldiwgZHJtX2RtYV9oYW5kbGVfdCAqIGRtYWgpCiB7CiAJX19kcm1fcGNpX2ZyZWUoZGV2LCBkbWFoKTsKIAlrZnJlZShkbWFoKTsKIH0KKwogRVhQT1JUX1NZTUJPTChkcm1fcGNpX2ZyZWUpOwogCiAvKkB9Ki8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX3BjaWlkcy5oIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fcGNpaWRzLmgKaW5kZXggNThiMTc0Ny4uZDY2ZGM1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1fcGNpaWRzLmgKKysrIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fcGNpaWRzLmgKQEAgLTIzNCw0ICsyMzQsMyBAQAogCXsweDgwODYsIDB4MjU5MiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sIFwKIAl7MHg4MDg2LCAweDI3NzIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LCBcCiAJezAsIDAsIDB9Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX3Byb2MuYyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX3Byb2MuYwppbmRleCAzMmQyYmI5Li44ZWMyMTU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9wcm9jLmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fcHJvYy5jCkBAIC0xLDUgKzEsNSBAQAogLyoqCi0gKiBcZmlsZSBkcm1fcHJvYy5oIAorICogXGZpbGUgZHJtX3Byb2MuYwogICogL3Byb2Mgc3VwcG9ydCBmb3IgRFJNCiAgKgogICogXGF1dGhvciBSaWNrYXJkIEUuIChSaWspIEZhaXRoIDxmYWl0aEB2YWxpbnV4LmNvbT4KQEAgLTM5LDE5ICszOSwxOSBAQAogCiAjaW5jbHVkZSAiZHJtUC5oIgogCi1zdGF0aWMgaW50CSAgIGRybV9uYW1lX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKLQkJCQkgIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSk7Ci1zdGF0aWMgaW50CSAgIGRybV92bV9pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCi0JCQkJaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKTsKLXN0YXRpYyBpbnQJICAgZHJtX2NsaWVudHNfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAotCQkJCSAgICAgaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKTsKLXN0YXRpYyBpbnQJICAgZHJtX3F1ZXVlc19pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCi0JCQkJICAgIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSk7Ci1zdGF0aWMgaW50CSAgIGRybV9idWZzX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKLQkJCQkgIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSk7CitzdGF0aWMgaW50IGRybV9uYW1lX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKKwkJCSBpbnQgcmVxdWVzdCwgaW50ICplb2YsIHZvaWQgKmRhdGEpOworc3RhdGljIGludCBkcm1fdm1faW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAorCQkgICAgICAgaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKTsKK3N0YXRpYyBpbnQgZHJtX2NsaWVudHNfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAorCQkJICAgIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSk7CitzdGF0aWMgaW50IGRybV9xdWV1ZXNfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAorCQkJICAgaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKTsKK3N0YXRpYyBpbnQgZHJtX2J1ZnNfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAorCQkJIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSk7CiAjaWYgRFJNX0RFQlVHX0NPREUKLXN0YXRpYyBpbnQJICAgZHJtX3ZtYV9pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCi0JCQkJIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSk7CitzdGF0aWMgaW50IGRybV92bWFfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAorCQkJaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKTsKICNlbmRpZgogCiAvKioKQEAgLTU5LDE4ICs1OSwyMSBAQAogICovCiBzdGF0aWMgc3RydWN0IGRybV9wcm9jX2xpc3QgewogCWNvbnN0IGNoYXIgKm5hbWU7CS8qKjwgZmlsZSBuYW1lICovCi0JaW50CSAgICgqZikoY2hhciAqLCBjaGFyICoqLCBvZmZfdCwgaW50LCBpbnQgKiwgdm9pZCAqKTsJLyoqPCBwcm9jIGNhbGxiYWNrKi8KKwlpbnQgKCpmKSAoY2hhciAqLCBjaGFyICoqLCBvZmZfdCwgaW50LCBpbnQgKiwgdm9pZCAqKTsJCS8qKjwgcHJvYyBjYWxsYmFjayovCiB9IGRybV9wcm9jX2xpc3RbXSA9IHsKLQl7ICJuYW1lIiwgICAgZHJtX25hbWVfaW5mbyAgICB9LAotCXsgIm1lbSIsICAgICBkcm1fbWVtX2luZm8gICAgIH0sCi0JeyAidm0iLAkgICAgIGRybV92bV9pbmZvICAgICAgfSwKLQl7ICJjbGllbnRzIiwgZHJtX2NsaWVudHNfaW5mbyB9LAotCXsgInF1ZXVlcyIsICBkcm1fcXVldWVzX2luZm8gIH0sCi0JeyAiYnVmcyIsICAgIGRybV9idWZzX2luZm8gICAgfSwKKwl7CisJIm5hbWUiLCBkcm1fbmFtZV9pbmZvfSwgeworCSJtZW0iLCBkcm1fbWVtX2luZm99LCB7CisJInZtIiwgZHJtX3ZtX2luZm99LCB7CisJImNsaWVudHMiLCBkcm1fY2xpZW50c19pbmZvfSwgeworCSJxdWV1ZXMiLCBkcm1fcXVldWVzX2luZm99LCB7CisJImJ1ZnMiLCBkcm1fYnVmc19pbmZvfSwKICNpZiBEUk1fREVCVUdfQ09ERQotCXsgInZtYSIsICAgICBkcm1fdm1hX2luZm8gICAgIH0sCisJeworCSJ2bWEiLCBkcm1fdm1hX2luZm99LAogI2VuZGlmCiB9OworCiAjZGVmaW5lIERSTV9QUk9DX0VOVFJJRVMgKHNpemVvZihkcm1fcHJvY19saXN0KS9zaXplb2YoZHJtX3Byb2NfbGlzdFswXSkpCiAKIC8qKgpAQCAtODEsMTggKzg0LDE3IEBACiAgKiBccGFyYW0gcm9vdCBEUkkgcHJvYyBkaXIgZW50cnkuCiAgKiBccGFyYW0gZGV2X3Jvb3QgcmVzdWx0aW5nIERSSSBkZXZpY2UgcHJvYyBkaXIgZW50cnkuCiAgKiBccmV0dXJuIHJvb3QgZW50cnkgcG9pbnRlciBvbiBzdWNjZXNzLCBvciBOVUxMIG9uIGZhaWx1cmUuCi0gKiAKKyAqCiAgKiBDcmVhdGUgdGhlIERSSSBwcm9jIHJvb3QgZW50cnkgIi9wcm9jL2RyaSIsIHRoZSBkZXZpY2UgcHJvYyByb290IGVudHJ5CiAgKiAiL3Byb2MvZHJpLyVtaW5vciUvIiwgYW5kIGVhY2ggZW50cnkgaW4gcHJvY19saXN0IGFzCiAgKiAiL3Byb2MvZHJpLyVtaW5vciUvJW5hbWUlIi4KICAqLwotaW50IGRybV9wcm9jX2luaXQoZHJtX2RldmljZV90ICpkZXYsIGludCBtaW5vciwKLQkJICAgIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcm9vdCwKLQkJICAgIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqKmRldl9yb290KQoraW50IGRybV9wcm9jX2luaXQoZHJtX2RldmljZV90ICogZGV2LCBpbnQgbWlub3IsCisJCSAgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpyb290LCBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKipkZXZfcm9vdCkKIHsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudDsKLQlpbnQJCSAgICAgIGksIGo7Ci0JY2hhciAgICAgICAgICAgICAgICAgIG5hbWVbNjRdOworCWludCBpLCBqOworCWNoYXIgbmFtZVs2NF07CiAKIAlzcHJpbnRmKG5hbWUsICIlZCIsIG1pbm9yKTsKIAkqZGV2X3Jvb3QgPSBjcmVhdGVfcHJvY19lbnRyeShuYW1lLCBTX0lGRElSLCByb290KTsKQEAgLTEwMyw3ICsxMDUsNyBAQAogCiAJZm9yIChpID0gMDsgaSA8IERSTV9QUk9DX0VOVFJJRVM7IGkrKykgewogCQllbnQgPSBjcmVhdGVfcHJvY19lbnRyeShkcm1fcHJvY19saXN0W2ldLm5hbWUsCi0JCQkJCVNfSUZSRUd8U19JUlVHTywgKmRldl9yb290KTsKKwkJCQkJU19JRlJFRyB8IFNfSVJVR08sICpkZXZfcm9vdCk7CiAJCWlmICghZW50KSB7CiAJCQlEUk1fRVJST1IoIkNhbm5vdCBjcmVhdGUgL3Byb2MvZHJpLyVzLyVzXG4iLAogCQkJCSAgbmFtZSwgZHJtX3Byb2NfbGlzdFtpXS5uYW1lKTsKQEAgLTExNCwxMyArMTE2LDEyIEBACiAJCQlyZXR1cm4gLTE7CiAJCX0KIAkJZW50LT5yZWFkX3Byb2MgPSBkcm1fcHJvY19saXN0W2ldLmY7Ci0JCWVudC0+ZGF0YSAgICAgID0gZGV2OworCQllbnQtPmRhdGEgPSBkZXY7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLQogLyoqCiAgKiBDbGVhbnVwIHRoZSBwcm9jIGZpbGVzeXN0ZW0gcmVzb3VyY2VzLgogICoKQEAgLTEzMiwxMiArMTMzLDEzIEBACiAgKiBSZW1vdmUgYWxsIHByb2MgZW50cmllcyBjcmVhdGVkIGJ5IHByb2NfaW5pdCgpLgogICovCiBpbnQgZHJtX3Byb2NfY2xlYW51cChpbnQgbWlub3IsIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcm9vdCwKLQkJICAgICAgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkZXZfcm9vdCkKKwkJICAgICBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRldl9yb290KQogewotCWludCAgaTsKKwlpbnQgaTsKIAljaGFyIG5hbWVbNjRdOwogCi0JaWYgKCFyb290IHx8ICFkZXZfcm9vdCkgcmV0dXJuIDA7CisJaWYgKCFyb290IHx8ICFkZXZfcm9vdCkKKwkJcmV0dXJuIDA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgRFJNX1BST0NfRU5UUklFUzsgaSsrKQogCQlyZW1vdmVfcHJvY19lbnRyeShkcm1fcHJvY19saXN0W2ldLm5hbWUsIGRldl9yb290KTsKQEAgLTE0OSw3ICsxNTEsNyBAQAogCiAvKioKICAqIENhbGxlZCB3aGVuICIvcHJvYy9kcmkvLi4uL25hbWUiIGlzIHJlYWQuCi0gKiAKKyAqCiAgKiBccGFyYW0gYnVmIG91dHB1dCBidWZmZXIuCiAgKiBccGFyYW0gc3RhcnQgc3RhcnQgb2Ygb3V0cHV0IGRhdGEuCiAgKiBccGFyYW0gb2Zmc2V0IHJlcXVlc3RlZCBzdGFydCBvZmZzZXQuCkBAIC0xNTcsMTQgKzE1OSwxNCBAQAogICogXHBhcmFtIGVvZiB3aGV0aGVyIHRoZXJlIGlzIG5vIG1vcmUgZGF0YSB0byByZXR1cm4uCiAgKiBccGFyYW0gZGF0YSBwcml2YXRlIGRhdGEuCiAgKiBccmV0dXJuIG51bWJlciBvZiB3cml0dGVuIGJ5dGVzLgotICogCisgKgogICogUHJpbnRzIHRoZSBkZXZpY2UgbmFtZSB0b2dldGhlciB3aXRoIHRoZSBidXMgaWQgaWYgYXZhaWxhYmxlLgogICovCiBzdGF0aWMgaW50IGRybV9uYW1lX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwgaW50IHJlcXVlc3QsCi0JCQkgIGludCAqZW9mLCB2b2lkICpkYXRhKQorCQkJIGludCAqZW9mLCB2b2lkICpkYXRhKQogewotCWRybV9kZXZpY2VfdCAqZGV2ID0gKGRybV9kZXZpY2VfdCAqKWRhdGE7Ci0JaW50ICAgICAgICAgIGxlbiAgPSAwOworCWRybV9kZXZpY2VfdCAqZGV2ID0gKGRybV9kZXZpY2VfdCAqKSBkYXRhOworCWludCBsZW4gPSAwOwogCiAJaWYgKG9mZnNldCA+IERSTV9QUk9DX0xJTUlUKSB7CiAJCSplb2YgPSAxOwpAQCAtMTcyLDIzICsxNzQsMjYgQEAKIAl9CiAKIAkqc3RhcnQgPSAmYnVmW29mZnNldF07Ci0JKmVvZiAgID0gMDsKKwkqZW9mID0gMDsKIAogCWlmIChkZXYtPnVuaXF1ZSkgewogCQlEUk1fUFJPQ19QUklOVCgiJXMgJXMgJXNcbiIsCi0JCQkgICAgICAgZGV2LT5kcml2ZXItPnBjaV9kcml2ZXIubmFtZSwgcGNpX25hbWUoZGV2LT5wZGV2KSwgZGV2LT51bmlxdWUpOworCQkJICAgICAgIGRldi0+ZHJpdmVyLT5wY2lfZHJpdmVyLm5hbWUsCisJCQkgICAgICAgcGNpX25hbWUoZGV2LT5wZGV2KSwgZGV2LT51bmlxdWUpOwogCX0gZWxzZSB7Ci0JCURSTV9QUk9DX1BSSU5UKCIlcyAlc1xuIiwgZGV2LT5kcml2ZXItPnBjaV9kcml2ZXIubmFtZSwgcGNpX25hbWUoZGV2LT5wZGV2KSk7CisJCURSTV9QUk9DX1BSSU5UKCIlcyAlc1xuIiwgZGV2LT5kcml2ZXItPnBjaV9kcml2ZXIubmFtZSwKKwkJCSAgICAgICBwY2lfbmFtZShkZXYtPnBkZXYpKTsKIAl9CiAKLQlpZiAobGVuID4gcmVxdWVzdCArIG9mZnNldCkgcmV0dXJuIHJlcXVlc3Q7CisJaWYgKGxlbiA+IHJlcXVlc3QgKyBvZmZzZXQpCisJCXJldHVybiByZXF1ZXN0OwogCSplb2YgPSAxOwogCXJldHVybiBsZW4gLSBvZmZzZXQ7CiB9CiAKIC8qKgogICogQ2FsbGVkIHdoZW4gIi9wcm9jL2RyaS8uLi4vdm0iIGlzIHJlYWQuCi0gKiAKKyAqCiAgKiBccGFyYW0gYnVmIG91dHB1dCBidWZmZXIuCiAgKiBccGFyYW0gc3RhcnQgc3RhcnQgb2Ygb3V0cHV0IGRhdGEuCiAgKiBccGFyYW0gb2Zmc2V0IHJlcXVlc3RlZCBzdGFydCBvZmZzZXQuCkBAIC0xOTYsMjQgKzIwMSwyNCBAQAogICogXHBhcmFtIGVvZiB3aGV0aGVyIHRoZXJlIGlzIG5vIG1vcmUgZGF0YSB0byByZXR1cm4uCiAgKiBccGFyYW0gZGF0YSBwcml2YXRlIGRhdGEuCiAgKiBccmV0dXJuIG51bWJlciBvZiB3cml0dGVuIGJ5dGVzLgotICogCisgKgogICogUHJpbnRzIGluZm9ybWF0aW9uIGFib3V0IGFsbCBtYXBwaW5ncyBpbiBkcm1fZGV2aWNlOjptYXBsaXN0LgogICovCiBzdGF0aWMgaW50IGRybV9fdm1faW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LCBpbnQgcmVxdWVzdCwKLQkJCSBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKKwkJCWludCAqZW9mLCB2b2lkICpkYXRhKQogewotCWRybV9kZXZpY2VfdCAqZGV2ID0gKGRybV9kZXZpY2VfdCAqKWRhdGE7Ci0JaW50ICAgICAgICAgIGxlbiAgPSAwOwotCWRybV9tYXBfdCAgICAqbWFwOworCWRybV9kZXZpY2VfdCAqZGV2ID0gKGRybV9kZXZpY2VfdCAqKSBkYXRhOworCWludCBsZW4gPSAwOworCWRybV9tYXBfdCAqbWFwOwogCWRybV9tYXBfbGlzdF90ICpyX2xpc3Q7CiAJc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKIAotCQkJCS8qIEhhcmRjb2RlZCBmcm9tIF9EUk1fRlJBTUVfQlVGRkVSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRFJNX1JFR0lTVEVSUywgX0RSTV9TSE0sIF9EUk1fQUdQLCBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0RSTV9TQ0FUVEVSX0dBVEhFUiBhbmQgX0RSTV9DT05TSVNURU5UICovCi0JY29uc3QgY2hhciAgICp0eXBlc1tdID0geyAiRkIiLCAiUkVHIiwgIlNITSIsICJBR1AiLCAiU0ciLCAiUENJIiB9OwotCWNvbnN0IGNoYXIgICAqdHlwZTsKLQlpbnQJICAgICBpOworCS8qIEhhcmRjb2RlZCBmcm9tIF9EUk1fRlJBTUVfQlVGRkVSLAorCSAgIF9EUk1fUkVHSVNURVJTLCBfRFJNX1NITSwgX0RSTV9BR1AsIGFuZAorCSAgIF9EUk1fU0NBVFRFUl9HQVRIRVIgYW5kIF9EUk1fQ09OU0lTVEVOVCAqLworCWNvbnN0IGNoYXIgKnR5cGVzW10gPSB7ICJGQiIsICJSRUciLCAiU0hNIiwgIkFHUCIsICJTRyIsICJQQ0kiIH07CisJY29uc3QgY2hhciAqdHlwZTsKKwlpbnQgaTsKIAogCWlmIChvZmZzZXQgPiBEUk1fUFJPQ19MSU1JVCkgewogCQkqZW9mID0gMTsKQEAgLTIyMSwzNiArMjI2LDM1IEBACiAJfQogCiAJKnN0YXJ0ID0gJmJ1ZltvZmZzZXRdOwotCSplb2YgICA9IDA7CisJKmVvZiA9IDA7CiAKIAlEUk1fUFJPQ19QUklOVCgic2xvdAkgb2Zmc2V0CSAgICAgIHNpemUgdHlwZSBmbGFncwkgIgogCQkgICAgICAgImFkZHJlc3MgbXRyclxuXG4iKTsKIAlpID0gMDsKLQlpZiAoZGV2LT5tYXBsaXN0ICE9IE5VTEwpIGxpc3RfZm9yX2VhY2gobGlzdCwgJmRldi0+bWFwbGlzdC0+aGVhZCkgeworCWlmIChkZXYtPm1hcGxpc3QgIT0gTlVMTCkKKwkJbGlzdF9mb3JfZWFjaChsaXN0LCAmZGV2LT5tYXBsaXN0LT5oZWFkKSB7CiAJCXJfbGlzdCA9IGxpc3RfZW50cnkobGlzdCwgZHJtX21hcF9saXN0X3QsIGhlYWQpOwogCQltYXAgPSByX2xpc3QtPm1hcDsKLQkJaWYoIW1hcCkKKwkJaWYgKCFtYXApCiAJCQljb250aW51ZTsKIAkJaWYgKG1hcC0+dHlwZSA8IDAgfHwgbWFwLT50eXBlID4gNSkKIAkJCXR5cGUgPSAiPz8iOwotCQllbHNlCQorCQllbHNlCiAJCQl0eXBlID0gdHlwZXNbbWFwLT50eXBlXTsKIAkJRFJNX1BST0NfUFJJTlQoIiU0ZCAweCUwOGx4IDB4JTA4bHggJTQuNHMgIDB4JTAyeCAweCUwOHggIiwKIAkJCSAgICAgICBpLAogCQkJICAgICAgIG1hcC0+b2Zmc2V0LAotCQkJICAgICAgIG1hcC0+c2l6ZSwKLQkJCSAgICAgICB0eXBlLAotCQkJICAgICAgIG1hcC0+ZmxhZ3MsCi0JCQkgICAgICAgcl9saXN0LT51c2VyX3Rva2VuKTsKKwkJCSAgICAgICBtYXAtPnNpemUsIHR5cGUsIG1hcC0+ZmxhZ3MsIHJfbGlzdC0+dXNlcl90b2tlbik7CiAJCWlmIChtYXAtPm10cnIgPCAwKSB7CiAJCQlEUk1fUFJPQ19QUklOVCgibm9uZVxuIik7CiAJCX0gZWxzZSB7CiAJCQlEUk1fUFJPQ19QUklOVCgiJTRkXG4iLCBtYXAtPm10cnIpOwogCQl9CiAJCWkrKzsKLQl9CisJCX0KIAotCWlmIChsZW4gPiByZXF1ZXN0ICsgb2Zmc2V0KSByZXR1cm4gcmVxdWVzdDsKKwlpZiAobGVuID4gcmVxdWVzdCArIG9mZnNldCkKKwkJcmV0dXJuIHJlcXVlc3Q7CiAJKmVvZiA9IDE7CiAJcmV0dXJuIGxlbiAtIG9mZnNldDsKIH0KQEAgLTI1OSwxMCArMjYzLDEwIEBACiAgKiBTaW1wbHkgY2FsbHMgX3ZtX2luZm8oKSB3aGlsZSBob2xkaW5nIHRoZSBkcm1fZGV2aWNlOjpzdHJ1Y3Rfc2VtIGxvY2suCiAgKi8KIHN0YXRpYyBpbnQgZHJtX3ZtX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwgaW50IHJlcXVlc3QsCi0JCQlpbnQgKmVvZiwgdm9pZCAqZGF0YSkKKwkJICAgICAgIGludCAqZW9mLCB2b2lkICpkYXRhKQogewotCWRybV9kZXZpY2VfdCAqZGV2ID0gKGRybV9kZXZpY2VfdCAqKWRhdGE7Ci0JaW50CSAgICAgcmV0OworCWRybV9kZXZpY2VfdCAqZGV2ID0gKGRybV9kZXZpY2VfdCAqKSBkYXRhOworCWludCByZXQ7CiAKIAlkb3duKCZkZXYtPnN0cnVjdF9zZW0pOwogCXJldCA9IGRybV9fdm1faW5mbyhidWYsIHN0YXJ0LCBvZmZzZXQsIHJlcXVlc3QsIGVvZiwgZGF0YSk7CkBAIC0yNzIsNyArMjc2LDcgQEAKIAogLyoqCiAgKiBDYWxsZWQgd2hlbiAiL3Byb2MvZHJpLy4uLi9xdWV1ZXMiIGlzIHJlYWQuCi0gKiAKKyAqCiAgKiBccGFyYW0gYnVmIG91dHB1dCBidWZmZXIuCiAgKiBccGFyYW0gc3RhcnQgc3RhcnQgb2Ygb3V0cHV0IGRhdGEuCiAgKiBccGFyYW0gb2Zmc2V0IHJlcXVlc3RlZCBzdGFydCBvZmZzZXQuCkBAIC0yODIsMTIgKzI4NiwxMiBAQAogICogXHJldHVybiBudW1iZXIgb2Ygd3JpdHRlbiBieXRlcy4KICAqLwogc3RhdGljIGludCBkcm1fX3F1ZXVlc19pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCi0JCQkgICAgIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKKwkJCSAgICBpbnQgcmVxdWVzdCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCiB7Ci0JZHJtX2RldmljZV90ICpkZXYgPSAoZHJtX2RldmljZV90ICopZGF0YTsKLQlpbnQgICAgICAgICAgbGVuICA9IDA7Ci0JaW50CSAgICAgaTsKLQlkcm1fcXVldWVfdCAgKnE7CisJZHJtX2RldmljZV90ICpkZXYgPSAoZHJtX2RldmljZV90ICopIGRhdGE7CisJaW50IGxlbiA9IDA7CisJaW50IGk7CisJZHJtX3F1ZXVlX3QgKnE7CiAKIAlpZiAob2Zmc2V0ID4gRFJNX1BST0NfTElNSVQpIHsKIAkJKmVvZiA9IDE7CkBAIC0yOTUsNyArMjk5LDcgQEAKIAl9CiAKIAkqc3RhcnQgPSAmYnVmW29mZnNldF07Ci0JKmVvZiAgID0gMDsKKwkqZW9mID0gMDsKIAogCURSTV9QUk9DX1BSSU5UKCIgIGN0eC9mbGFncyAgIHVzZSAgIGZpbiIKIAkJICAgICAgICIgICBibGsvcncvcndmICB3YWl0ICAgIGZsdXNoZWQJICAgcXVldWVkIgpAQCAtMzEzLDE0ICszMTcsMTcgQEAKIAkJCQkgICBhdG9taWNfcmVhZCgmcS0+YmxvY2tfY291bnQpLAogCQkJCSAgIGF0b21pY19yZWFkKCZxLT5ibG9ja19yZWFkKSA/ICdyJyA6ICctJywKIAkJCQkgICBhdG9taWNfcmVhZCgmcS0+YmxvY2tfd3JpdGUpID8gJ3cnIDogJy0nLAotCQkJCSAgIHdhaXRxdWV1ZV9hY3RpdmUoJnEtPnJlYWRfcXVldWUpID8gJ3InOictJywKLQkJCQkgICB3YWl0cXVldWVfYWN0aXZlKCZxLT53cml0ZV9xdWV1ZSkgPyAndyc6Jy0nLAotCQkJCSAgIHdhaXRxdWV1ZV9hY3RpdmUoJnEtPmZsdXNoX3F1ZXVlKSA/ICdmJzonLScsCisJCQkJICAgd2FpdHF1ZXVlX2FjdGl2ZSgmcS0+cmVhZF9xdWV1ZSkgPyAncicgOiAnLScsCisJCQkJICAgd2FpdHF1ZXVlX2FjdGl2ZSgmcS0+CisJCQkJCQkgICAgd3JpdGVfcXVldWUpID8gJ3cnIDogJy0nLAorCQkJCSAgIHdhaXRxdWV1ZV9hY3RpdmUoJnEtPgorCQkJCQkJICAgIGZsdXNoX3F1ZXVlKSA/ICdmJyA6ICctJywKIAkJCQkgICBEUk1fQlVGQ09VTlQoJnEtPndhaXRsaXN0KSk7CiAJCWF0b21pY19kZWMoJnEtPnVzZV9jb3VudCk7CiAJfQogCi0JaWYgKGxlbiA+IHJlcXVlc3QgKyBvZmZzZXQpIHJldHVybiByZXF1ZXN0OworCWlmIChsZW4gPiByZXF1ZXN0ICsgb2Zmc2V0KQorCQlyZXR1cm4gcmVxdWVzdDsKIAkqZW9mID0gMTsKIAlyZXR1cm4gbGVuIC0gb2Zmc2V0OwogfQpAQCAtMzI5LDEwICszMzYsMTAgQEAKICAqIFNpbXBseSBjYWxscyBfcXVldWVzX2luZm8oKSB3aGlsZSBob2xkaW5nIHRoZSBkcm1fZGV2aWNlOjpzdHJ1Y3Rfc2VtIGxvY2suCiAgKi8KIHN0YXRpYyBpbnQgZHJtX3F1ZXVlc19pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsIGludCByZXF1ZXN0LAotCQkJICAgIGludCAqZW9mLCB2b2lkICpkYXRhKQorCQkJICAgaW50ICplb2YsIHZvaWQgKmRhdGEpCiB7Ci0JZHJtX2RldmljZV90ICpkZXYgPSAoZHJtX2RldmljZV90ICopZGF0YTsKLQlpbnQJICAgICByZXQ7CisJZHJtX2RldmljZV90ICpkZXYgPSAoZHJtX2RldmljZV90ICopIGRhdGE7CisJaW50IHJldDsKIAogCWRvd24oJmRldi0+c3RydWN0X3NlbSk7CiAJcmV0ID0gZHJtX19xdWV1ZXNfaW5mbyhidWYsIHN0YXJ0LCBvZmZzZXQsIHJlcXVlc3QsIGVvZiwgZGF0YSk7CkBAIC0zNDIsNyArMzQ5LDcgQEAKIAogLyoqCiAgKiBDYWxsZWQgd2hlbiAiL3Byb2MvZHJpLy4uLi9idWZzIiBpcyByZWFkLgotICogCisgKgogICogXHBhcmFtIGJ1ZiBvdXRwdXQgYnVmZmVyLgogICogXHBhcmFtIHN0YXJ0IHN0YXJ0IG9mIG91dHB1dCBkYXRhLgogICogXHBhcmFtIG9mZnNldCByZXF1ZXN0ZWQgc3RhcnQgb2Zmc2V0LgpAQCAtMzUyLDEyICszNTksMTIgQEAKICAqIFxyZXR1cm4gbnVtYmVyIG9mIHdyaXR0ZW4gYnl0ZXMuCiAgKi8KIHN0YXRpYyBpbnQgZHJtX19idWZzX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwgaW50IHJlcXVlc3QsCi0JCQkgICBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKKwkJCSAgaW50ICplb2YsIHZvaWQgKmRhdGEpCiB7Ci0JZHJtX2RldmljZV90CSAqZGV2ID0gKGRybV9kZXZpY2VfdCAqKWRhdGE7Ci0JaW50ICAgICAgICAgICAgICBsZW4gID0gMDsKKwlkcm1fZGV2aWNlX3QgKmRldiA9IChkcm1fZGV2aWNlX3QgKikgZGF0YTsKKwlpbnQgbGVuID0gMDsKIAlkcm1fZGV2aWNlX2RtYV90ICpkbWEgPSBkZXYtPmRtYTsKLQlpbnQJCSBpOworCWludCBpOwogCiAJaWYgKCFkbWEgfHwgb2Zmc2V0ID4gRFJNX1BST0NfTElNSVQpIHsKIAkJKmVvZiA9IDE7CkBAIC0zNjUsNyArMzcyLDcgQEAKIAl9CiAKIAkqc3RhcnQgPSAmYnVmW29mZnNldF07Ci0JKmVvZiAgID0gMDsKKwkqZW9mID0gMDsKIAogCURSTV9QUk9DX1BSSU5UKCIgbyAgICAgc2l6ZSBjb3VudCAgZnJlZQkgc2VncyBwYWdlcyAgICBrQlxuXG4iKTsKIAlmb3IgKGkgPSAwOyBpIDw9IERSTV9NQVhfT1JERVI7IGkrKykgewpAQCAtMzc4LDE5ICszODUsMjEgQEAKIAkJCQkJCSAgIC5mcmVlbGlzdC5jb3VudCksCiAJCQkJICAgICAgIGRtYS0+YnVmc1tpXS5zZWdfY291bnQsCiAJCQkJICAgICAgIGRtYS0+YnVmc1tpXS5zZWdfY291bnQKLQkJCQkgICAgICAgKigxIDw8IGRtYS0+YnVmc1tpXS5wYWdlX29yZGVyKSwKKwkJCQkgICAgICAgKiAoMSA8PCBkbWEtPmJ1ZnNbaV0ucGFnZV9vcmRlciksCiAJCQkJICAgICAgIChkbWEtPmJ1ZnNbaV0uc2VnX2NvdW50CiAJCQkJCSogKDEgPDwgZG1hLT5idWZzW2ldLnBhZ2Vfb3JkZXIpKQogCQkJCSAgICAgICAqIFBBR0VfU0laRSAvIDEwMjQpOwogCX0KIAlEUk1fUFJPQ19QUklOVCgiXG4iKTsKIAlmb3IgKGkgPSAwOyBpIDwgZG1hLT5idWZfY291bnQ7IGkrKykgewotCQlpZiAoaSAmJiAhKGklMzIpKSBEUk1fUFJPQ19QUklOVCgiXG4iKTsKKwkJaWYgKGkgJiYgIShpICUgMzIpKQorCQkJRFJNX1BST0NfUFJJTlQoIlxuIik7CiAJCURSTV9QUk9DX1BSSU5UKCIgJWQiLCBkbWEtPmJ1Zmxpc3RbaV0tPmxpc3QpOwogCX0KIAlEUk1fUFJPQ19QUklOVCgiXG4iKTsKIAotCWlmIChsZW4gPiByZXF1ZXN0ICsgb2Zmc2V0KSByZXR1cm4gcmVxdWVzdDsKKwlpZiAobGVuID4gcmVxdWVzdCArIG9mZnNldCkKKwkJcmV0dXJuIHJlcXVlc3Q7CiAJKmVvZiA9IDE7CiAJcmV0dXJuIGxlbiAtIG9mZnNldDsKIH0KQEAgLTM5OSwxMCArNDA4LDEwIEBACiAgKiBTaW1wbHkgY2FsbHMgX2J1ZnNfaW5mbygpIHdoaWxlIGhvbGRpbmcgdGhlIGRybV9kZXZpY2U6OnN0cnVjdF9zZW0gbG9jay4KICAqLwogc3RhdGljIGludCBkcm1fYnVmc19pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsIGludCByZXF1ZXN0LAotCQkJICBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKKwkJCSBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKIHsKLQlkcm1fZGV2aWNlX3QgKmRldiA9IChkcm1fZGV2aWNlX3QgKilkYXRhOwotCWludAkgICAgIHJldDsKKwlkcm1fZGV2aWNlX3QgKmRldiA9IChkcm1fZGV2aWNlX3QgKikgZGF0YTsKKwlpbnQgcmV0OwogCiAJZG93bigmZGV2LT5zdHJ1Y3Rfc2VtKTsKIAlyZXQgPSBkcm1fX2J1ZnNfaW5mbyhidWYsIHN0YXJ0LCBvZmZzZXQsIHJlcXVlc3QsIGVvZiwgZGF0YSk7CkBAIC00MTIsNyArNDIxLDcgQEAKIAogLyoqCiAgKiBDYWxsZWQgd2hlbiAiL3Byb2MvZHJpLy4uLi9jbGllbnRzIiBpcyByZWFkLgotICogCisgKgogICogXHBhcmFtIGJ1ZiBvdXRwdXQgYnVmZmVyLgogICogXHBhcmFtIHN0YXJ0IHN0YXJ0IG9mIG91dHB1dCBkYXRhLgogICogXHBhcmFtIG9mZnNldCByZXF1ZXN0ZWQgc3RhcnQgb2Zmc2V0LgpAQCAtNDIyLDExICs0MzEsMTEgQEAKICAqIFxyZXR1cm4gbnVtYmVyIG9mIHdyaXR0ZW4gYnl0ZXMuCiAgKi8KIHN0YXRpYyBpbnQgZHJtX19jbGllbnRzX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKLQkJCSAgICAgIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKKwkJCSAgICAgaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKQogewotCWRybV9kZXZpY2VfdCAqZGV2ID0gKGRybV9kZXZpY2VfdCAqKWRhdGE7Ci0JaW50ICAgICAgICAgIGxlbiAgPSAwOwotCWRybV9maWxlX3QgICAqcHJpdjsKKwlkcm1fZGV2aWNlX3QgKmRldiA9IChkcm1fZGV2aWNlX3QgKikgZGF0YTsKKwlpbnQgbGVuID0gMDsKKwlkcm1fZmlsZV90ICpwcml2OwogCiAJaWYgKG9mZnNldCA+IERSTV9QUk9DX0xJTUlUKSB7CiAJCSplb2YgPSAxOwpAQCAtNDM0LDcgKzQ0Myw3IEBACiAJfQogCiAJKnN0YXJ0ID0gJmJ1ZltvZmZzZXRdOwotCSplb2YgICA9IDA7CisJKmVvZiA9IDA7CiAKIAlEUk1fUFJPQ19QUklOVCgiYSBkZXYJcGlkICAgIHVpZAltYWdpYwkgIGlvY3Rsc1xuXG4iKTsKIAlmb3IgKHByaXYgPSBkZXYtPmZpbGVfZmlyc3Q7IHByaXY7IHByaXYgPSBwcml2LT5uZXh0KSB7CkBAIC00NDIsMTIgKzQ1MSwxMSBAQAogCQkJICAgICAgIHByaXYtPmF1dGhlbnRpY2F0ZWQgPyAneScgOiAnbicsCiAJCQkgICAgICAgcHJpdi0+bWlub3IsCiAJCQkgICAgICAgcHJpdi0+cGlkLAotCQkJICAgICAgIHByaXYtPnVpZCwKLQkJCSAgICAgICBwcml2LT5tYWdpYywKLQkJCSAgICAgICBwcml2LT5pb2N0bF9jb3VudCk7CisJCQkgICAgICAgcHJpdi0+dWlkLCBwcml2LT5tYWdpYywgcHJpdi0+aW9jdGxfY291bnQpOwogCX0KIAotCWlmIChsZW4gPiByZXF1ZXN0ICsgb2Zmc2V0KSByZXR1cm4gcmVxdWVzdDsKKwlpZiAobGVuID4gcmVxdWVzdCArIG9mZnNldCkKKwkJcmV0dXJuIHJlcXVlc3Q7CiAJKmVvZiA9IDE7CiAJcmV0dXJuIGxlbiAtIG9mZnNldDsKIH0KQEAgLTQ1NiwxMCArNDY0LDEwIEBACiAgKiBTaW1wbHkgY2FsbHMgX2NsaWVudHNfaW5mbygpIHdoaWxlIGhvbGRpbmcgdGhlIGRybV9kZXZpY2U6OnN0cnVjdF9zZW0gbG9jay4KICAqLwogc3RhdGljIGludCBkcm1fY2xpZW50c19pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCi0JCQkgICAgIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKKwkJCSAgICBpbnQgcmVxdWVzdCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCiB7Ci0JZHJtX2RldmljZV90ICpkZXYgPSAoZHJtX2RldmljZV90ICopZGF0YTsKLQlpbnQJICAgICByZXQ7CisJZHJtX2RldmljZV90ICpkZXYgPSAoZHJtX2RldmljZV90ICopIGRhdGE7CisJaW50IHJldDsKIAogCWRvd24oJmRldi0+c3RydWN0X3NlbSk7CiAJcmV0ID0gZHJtX19jbGllbnRzX2luZm8oYnVmLCBzdGFydCwgb2Zmc2V0LCByZXF1ZXN0LCBlb2YsIGRhdGEpOwpAQCAtNDcwLDE0ICs0NzgsMTQgQEAKICNpZiBEUk1fREVCVUdfQ09ERQogCiBzdGF0aWMgaW50IGRybV9fdm1hX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwgaW50IHJlcXVlc3QsCi0JCQkgIGludCAqZW9mLCB2b2lkICpkYXRhKQorCQkJIGludCAqZW9mLCB2b2lkICpkYXRhKQogewotCWRybV9kZXZpY2VfdAkgICAgICAqZGV2ID0gKGRybV9kZXZpY2VfdCAqKWRhdGE7Ci0JaW50ICAgICAgICAgICAgICAgICAgIGxlbiAgPSAwOwotCWRybV92bWFfZW50cnlfdAkgICAgICAqcHQ7CisJZHJtX2RldmljZV90ICpkZXYgPSAoZHJtX2RldmljZV90ICopIGRhdGE7CisJaW50IGxlbiA9IDA7CisJZHJtX3ZtYV9lbnRyeV90ICpwdDsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKICNpZiBkZWZpbmVkKF9faTM4Nl9fKQotCXVuc2lnbmVkIGludAkgICAgICBwZ3Byb3Q7CisJdW5zaWduZWQgaW50IHBncHJvdDsKICNlbmRpZgogCiAJaWYgKG9mZnNldCA+IERSTV9QUk9DX0xJTUlUKSB7CkBAIC00ODYsNTEgKzQ5NCw1MyBAQAogCX0KIAogCSpzdGFydCA9ICZidWZbb2Zmc2V0XTsKLQkqZW9mICAgPSAwOworCSplb2YgPSAwOwogCiAJRFJNX1BST0NfUFJJTlQoInZtYSB1c2UgY291bnQ6ICVkLCBoaWdoX21lbW9yeSA9ICVwLCAweCUwOGx4XG4iLAogCQkgICAgICAgYXRvbWljX3JlYWQoJmRldi0+dm1hX2NvdW50KSwKIAkJICAgICAgIGhpZ2hfbWVtb3J5LCB2aXJ0X3RvX3BoeXMoaGlnaF9tZW1vcnkpKTsKIAlmb3IgKHB0ID0gZGV2LT52bWFsaXN0OyBwdDsgcHQgPSBwdC0+bmV4dCkgewotCQlpZiAoISh2bWEgPSBwdC0+dm1hKSkgY29udGludWU7CisJCWlmICghKHZtYSA9IHB0LT52bWEpKQorCQkJY29udGludWU7CiAJCURSTV9QUk9DX1BSSU5UKCJcbiU1ZCAweCUwOGx4LTB4JTA4bHggJWMlYyVjJWMlYyVjIDB4JTA4bHgiLAogCQkJICAgICAgIHB0LT5waWQsCiAJCQkgICAgICAgdm1hLT52bV9zdGFydCwKIAkJCSAgICAgICB2bWEtPnZtX2VuZCwKLQkJCSAgICAgICB2bWEtPnZtX2ZsYWdzICYgVk1fUkVBRAkgICA/ICdyJyA6ICctJywKLQkJCSAgICAgICB2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUJICAgPyAndycgOiAnLScsCi0JCQkgICAgICAgdm1hLT52bV9mbGFncyAmIFZNX0VYRUMJICAgPyAneCcgOiAnLScsCisJCQkgICAgICAgdm1hLT52bV9mbGFncyAmIFZNX1JFQUQgPyAncicgOiAnLScsCisJCQkgICAgICAgdm1hLT52bV9mbGFncyAmIFZNX1dSSVRFID8gJ3cnIDogJy0nLAorCQkJICAgICAgIHZtYS0+dm1fZmxhZ3MgJiBWTV9FWEVDID8gJ3gnIDogJy0nLAogCQkJICAgICAgIHZtYS0+dm1fZmxhZ3MgJiBWTV9NQVlTSEFSRSA/ICdzJyA6ICdwJywKLQkJCSAgICAgICB2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEICAgPyAnbCcgOiAnLScsCi0JCQkgICAgICAgdm1hLT52bV9mbGFncyAmIFZNX0lPCSAgID8gJ2knIDogJy0nLAorCQkJICAgICAgIHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQgPyAnbCcgOiAnLScsCisJCQkgICAgICAgdm1hLT52bV9mbGFncyAmIFZNX0lPID8gJ2knIDogJy0nLAogCQkJICAgICAgIFZNX09GRlNFVCh2bWEpKTsKIAogI2lmIGRlZmluZWQoX19pMzg2X18pCiAJCXBncHJvdCA9IHBncHJvdF92YWwodm1hLT52bV9wYWdlX3Byb3QpOwogCQlEUk1fUFJPQ19QUklOVCgiICVjJWMlYyVjJWMlYyVjJWMlYyIsCi0JCQkgICAgICAgcGdwcm90ICYgX1BBR0VfUFJFU0VOVCAgPyAncCcgOiAnLScsCi0JCQkgICAgICAgcGdwcm90ICYgX1BBR0VfUlcgICAgICAgPyAndycgOiAncicsCi0JCQkgICAgICAgcGdwcm90ICYgX1BBR0VfVVNFUiAgICAgPyAndScgOiAncycsCi0JCQkgICAgICAgcGdwcm90ICYgX1BBR0VfUFdUICAgICAgPyAndCcgOiAnYicsCi0JCQkgICAgICAgcGdwcm90ICYgX1BBR0VfUENEICAgICAgPyAndScgOiAnYycsCisJCQkgICAgICAgcGdwcm90ICYgX1BBR0VfUFJFU0VOVCA/ICdwJyA6ICctJywKKwkJCSAgICAgICBwZ3Byb3QgJiBfUEFHRV9SVyA/ICd3JyA6ICdyJywKKwkJCSAgICAgICBwZ3Byb3QgJiBfUEFHRV9VU0VSID8gJ3UnIDogJ3MnLAorCQkJICAgICAgIHBncHJvdCAmIF9QQUdFX1BXVCA/ICd0JyA6ICdiJywKKwkJCSAgICAgICBwZ3Byb3QgJiBfUEFHRV9QQ0QgPyAndScgOiAnYycsCiAJCQkgICAgICAgcGdwcm90ICYgX1BBR0VfQUNDRVNTRUQgPyAnYScgOiAnLScsCi0JCQkgICAgICAgcGdwcm90ICYgX1BBR0VfRElSVFkgICAgPyAnZCcgOiAnLScsCi0JCQkgICAgICAgcGdwcm90ICYgX1BBR0VfUFNFICAgICAgPyAnbScgOiAnaycsCi0JCQkgICAgICAgcGdwcm90ICYgX1BBR0VfR0xPQkFMICAgPyAnZycgOiAnbCcgKTsKKwkJCSAgICAgICBwZ3Byb3QgJiBfUEFHRV9ESVJUWSA/ICdkJyA6ICctJywKKwkJCSAgICAgICBwZ3Byb3QgJiBfUEFHRV9QU0UgPyAnbScgOiAnaycsCisJCQkgICAgICAgcGdwcm90ICYgX1BBR0VfR0xPQkFMID8gJ2cnIDogJ2wnKTsKICNlbmRpZgogCQlEUk1fUFJPQ19QUklOVCgiXG4iKTsKIAl9CiAKLQlpZiAobGVuID4gcmVxdWVzdCArIG9mZnNldCkgcmV0dXJuIHJlcXVlc3Q7CisJaWYgKGxlbiA+IHJlcXVlc3QgKyBvZmZzZXQpCisJCXJldHVybiByZXF1ZXN0OwogCSplb2YgPSAxOwogCXJldHVybiBsZW4gLSBvZmZzZXQ7CiB9CiAKIHN0YXRpYyBpbnQgZHJtX3ZtYV9pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsIGludCByZXF1ZXN0LAotCQkJIGludCAqZW9mLCB2b2lkICpkYXRhKQorCQkJaW50ICplb2YsIHZvaWQgKmRhdGEpCiB7Ci0JZHJtX2RldmljZV90ICpkZXYgPSAoZHJtX2RldmljZV90ICopZGF0YTsKLQlpbnQJICAgICByZXQ7CisJZHJtX2RldmljZV90ICpkZXYgPSAoZHJtX2RldmljZV90ICopIGRhdGE7CisJaW50IHJldDsKIAogCWRvd24oJmRldi0+c3RydWN0X3NlbSk7CiAJcmV0ID0gZHJtX192bWFfaW5mbyhidWYsIHN0YXJ0LCBvZmZzZXQsIHJlcXVlc3QsIGVvZiwgZGF0YSk7CkBAIC01MzgsNSArNTQ4LDMgQEAKIAlyZXR1cm4gcmV0OwogfQogI2VuZGlmCi0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9kcm1fc2FyZWEuaCBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX3NhcmVhLmgKaW5kZXggZGU3ODJlZC4uZTk0Mjk3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1fc2FyZWEuaAorKysgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9zYXJlYS5oCkBAIC0xLDUgKzEsNSBAQAogLyoqCi0gKiBcZmlsZSBkcm1fc2FyZWEuaCAKKyAqIFxmaWxlIGRybV9zYXJlYS5oCiAgKiBcYnJpZWYgU0FSRUEgZGVmaW5pdGlvbnMKICAqCiAgKiBcYXV0aG9yIE1pY2hlbCBE5G56ZXIgPG1pY2hlbEBkYWVuemVyLm5ldD4KQEAgLTM4LDcgKzM4LDcgQEAKICNpZiBkZWZpbmVkKF9fYWxwaGFfXykKICNkZWZpbmUgU0FSRUFfTUFYICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAKICNlbGlmIGRlZmluZWQoX19pYTY0X18pCi0jZGVmaW5lIFNBUkVBX01BWCAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMCAgICAgICAgIC8qIDY0a0IgKi8KKyNkZWZpbmUgU0FSRUFfTUFYICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwCS8qIDY0a0IgKi8KICNlbHNlCiAvKiBJbnRlbCA4MzBNIGRyaXZlciBuZWVkcyBhdCBsZWFzdCA4ayBTQVJFQSAqLwogI2RlZmluZSBTQVJFQV9NQVggICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMApAQCAtNTEsMjggKzUxLDI4IEBACiAKIC8qKiBTQVJFQSBkcmF3YWJsZSAqLwogdHlwZWRlZiBzdHJ1Y3QgZHJtX3NhcmVhX2RyYXdhYmxlIHsKLSAgICB1bnNpZ25lZCBpbnQJc3RhbXA7Ci0gICAgdW5zaWduZWQgaW50CWZsYWdzOworCXVuc2lnbmVkIGludCBzdGFtcDsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CiB9IGRybV9zYXJlYV9kcmF3YWJsZV90OwogCiAvKiogU0FSRUEgZnJhbWUgKi8KIHR5cGVkZWYgc3RydWN0IGRybV9zYXJlYV9mcmFtZSB7Ci0gICAgdW5zaWduZWQgaW50ICAgICAgICB4OwotICAgIHVuc2lnbmVkIGludCAgICAgICAgeTsKLSAgICB1bnNpZ25lZCBpbnQgICAgICAgIHdpZHRoOwotICAgIHVuc2lnbmVkIGludCAgICAgICAgaGVpZ2h0OwotICAgIHVuc2lnbmVkIGludCAgICAgICAgZnVsbHNjcmVlbjsKKwl1bnNpZ25lZCBpbnQgeDsKKwl1bnNpZ25lZCBpbnQgeTsKKwl1bnNpZ25lZCBpbnQgd2lkdGg7CisJdW5zaWduZWQgaW50IGhlaWdodDsKKwl1bnNpZ25lZCBpbnQgZnVsbHNjcmVlbjsKIH0gZHJtX3NhcmVhX2ZyYW1lX3Q7CiAKIC8qKiBTQVJFQSAqLwogdHlwZWRlZiBzdHJ1Y3QgZHJtX3NhcmVhIHsKICAgICAvKiogZmlyc3QgdGhpbmcgaXMgYWx3YXlzIHRoZSBEUk0gbG9ja2luZyBzdHJ1Y3R1cmUgKi8KLSAgICBkcm1faHdfbG9ja190CQlsb2NrOworCWRybV9od19sb2NrX3QgbG9jazsKICAgICAvKiogXHRvZG8gVXNlIHJlYWRlcnMvd3JpdGVyIGxvY2sgZm9yIGRybV9zYXJlYTo6ZHJhd2FibGVfbG9jayAqLwotICAgIGRybV9od19sb2NrX3QJCWRyYXdhYmxlX2xvY2s7Ci0gICAgZHJtX3NhcmVhX2RyYXdhYmxlX3QJZHJhd2FibGVUYWJsZVtTQVJFQV9NQVhfRFJBV0FCTEVTXTsJLyoqPCBkcmF3YWJsZXMgKi8KLSAgICBkcm1fc2FyZWFfZnJhbWVfdAkJZnJhbWU7CS8qKjwgZnJhbWUgKi8KLSAgICBkcm1fY29udGV4dF90CQlkdW1teV9jb250ZXh0OworCWRybV9od19sb2NrX3QgZHJhd2FibGVfbG9jazsKKwlkcm1fc2FyZWFfZHJhd2FibGVfdCBkcmF3YWJsZVRhYmxlW1NBUkVBX01BWF9EUkFXQUJMRVNdOwkvKio8IGRyYXdhYmxlcyAqLworCWRybV9zYXJlYV9mcmFtZV90IGZyYW1lOwkvKio8IGZyYW1lICovCisJZHJtX2NvbnRleHRfdCBkdW1teV9jb250ZXh0OwogfSBkcm1fc2FyZWFfdDsKIAotI2VuZGlmCS8qIF9EUk1fU0FSRUFfSF8gKi8KKyNlbmRpZgkJCQkvKiBfRFJNX1NBUkVBX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9zY2F0dGVyLmMgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9zY2F0dGVyLmMKaW5kZXggZWQyNjdkNC4uY2U4MWJmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1fc2NhdHRlci5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX3NjYXR0ZXIuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKgotICogXGZpbGUgZHJtX3NjYXR0ZXIuaCAKKyAqIFxmaWxlIGRybV9zY2F0dGVyLmMKICAqIElPQ1RMcyB0byBtYW5hZ2Ugc2NhdHRlci9nYXRoZXIgbWVtb3J5CiAgKgogICogXGF1dGhvciBHYXJldGggSHVnaGVzIDxnYXJldGhAdmFsaW51eC5jb20+CkBAIC0zNywyOCArMzcsMjQgQEAKIAogI2RlZmluZSBERUJVR19TQ0FUVEVSIDAKIAotdm9pZCBkcm1fc2dfY2xlYW51cCggZHJtX3NnX21lbV90ICplbnRyeSApCit2b2lkIGRybV9zZ19jbGVhbnVwKGRybV9zZ19tZW1fdCAqIGVudHJ5KQogewogCXN0cnVjdCBwYWdlICpwYWdlOwogCWludCBpOwogCi0JZm9yICggaSA9IDAgOyBpIDwgZW50cnktPnBhZ2VzIDsgaSsrICkgeworCWZvciAoaSA9IDA7IGkgPCBlbnRyeS0+cGFnZXM7IGkrKykgewogCQlwYWdlID0gZW50cnktPnBhZ2VsaXN0W2ldOwotCQlpZiAoIHBhZ2UgKQotCQkJQ2xlYXJQYWdlUmVzZXJ2ZWQoIHBhZ2UgKTsKKwkJaWYgKHBhZ2UpCisJCQlDbGVhclBhZ2VSZXNlcnZlZChwYWdlKTsKIAl9CiAKLQl2ZnJlZSggZW50cnktPnZpcnR1YWwgKTsKKwl2ZnJlZShlbnRyeS0+dmlydHVhbCk7CiAKLQlkcm1fZnJlZSggZW50cnktPmJ1c2FkZHIsCi0JCSAgIGVudHJ5LT5wYWdlcyAqIHNpemVvZigqZW50cnktPmJ1c2FkZHIpLAotCQkgICBEUk1fTUVNX1BBR0VTICk7Ci0JZHJtX2ZyZWUoIGVudHJ5LT5wYWdlbGlzdCwKLQkJICAgZW50cnktPnBhZ2VzICogc2l6ZW9mKCplbnRyeS0+cGFnZWxpc3QpLAotCQkgICBEUk1fTUVNX1BBR0VTICk7Ci0JZHJtX2ZyZWUoIGVudHJ5LAotCQkgICBzaXplb2YoKmVudHJ5KSwKLQkJICAgRFJNX01FTV9TR0xJU1RTICk7CisJZHJtX2ZyZWUoZW50cnktPmJ1c2FkZHIsCisJCSBlbnRyeS0+cGFnZXMgKiBzaXplb2YoKmVudHJ5LT5idXNhZGRyKSwgRFJNX01FTV9QQUdFUyk7CisJZHJtX2ZyZWUoZW50cnktPnBhZ2VsaXN0LAorCQkgZW50cnktPnBhZ2VzICogc2l6ZW9mKCplbnRyeS0+cGFnZWxpc3QpLCBEUk1fTUVNX1BBR0VTKTsKKwlkcm1fZnJlZShlbnRyeSwgc2l6ZW9mKCplbnRyeSksIERSTV9NRU1fU0dMSVNUUyk7CiB9CiAKICNpZmRlZiBfTFA2NApAQCAtNjcsOCArNjMsOCBAQAogIyBkZWZpbmUgU2NhdHRlckhhbmRsZSh4KSAodW5zaWduZWQgaW50KSh4KQogI2VuZGlmCiAKLWludCBkcm1fc2dfYWxsb2MoIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAotCQkgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyApCitpbnQgZHJtX3NnX2FsbG9jKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAorCQkgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJZHJtX2ZpbGVfdCAqcHJpdiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAlkcm1fZGV2aWNlX3QgKmRldiA9IHByaXYtPmhlYWQtPmRldjsKQEAgLTc3LDc1ICs3Myw3MCBAQAogCWRybV9zZ19tZW1fdCAqZW50cnk7CiAJdW5zaWduZWQgbG9uZyBwYWdlcywgaSwgajsKIAotCURSTV9ERUJVRyggIiVzXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwlEUk1fREVCVUcoIiVzXG4iLCBfX0ZVTkNUSU9OX18pOwogCiAJaWYgKCFkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX1NHKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoIGRldi0+c2cgKQorCWlmIChkZXYtPnNnKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICggY29weV9mcm9tX3VzZXIoICZyZXF1ZXN0LCBhcmdwLCBzaXplb2YocmVxdWVzdCkgKSApCisJaWYgKGNvcHlfZnJvbV91c2VyKCZyZXF1ZXN0LCBhcmdwLCBzaXplb2YocmVxdWVzdCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWVudHJ5ID0gZHJtX2FsbG9jKCBzaXplb2YoKmVudHJ5KSwgRFJNX01FTV9TR0xJU1RTICk7Ci0JaWYgKCAhZW50cnkgKQorCWVudHJ5ID0gZHJtX2FsbG9jKHNpemVvZigqZW50cnkpLCBEUk1fTUVNX1NHTElTVFMpOworCWlmICghZW50cnkpCiAJCXJldHVybiAtRU5PTUVNOwogCi0gICAJbWVtc2V0KCBlbnRyeSwgMCwgc2l6ZW9mKCplbnRyeSkgKTsKKwltZW1zZXQoZW50cnksIDAsIHNpemVvZigqZW50cnkpKTsKIAogCXBhZ2VzID0gKHJlcXVlc3Quc2l6ZSArIFBBR0VfU0laRSAtIDEpIC8gUEFHRV9TSVpFOwotCURSTV9ERUJVRyggInNnIHNpemU9JWxkIHBhZ2VzPSVsZFxuIiwgcmVxdWVzdC5zaXplLCBwYWdlcyApOworCURSTV9ERUJVRygic2cgc2l6ZT0lbGQgcGFnZXM9JWxkXG4iLCByZXF1ZXN0LnNpemUsIHBhZ2VzKTsKIAogCWVudHJ5LT5wYWdlcyA9IHBhZ2VzOwotCWVudHJ5LT5wYWdlbGlzdCA9IGRybV9hbGxvYyggcGFnZXMgKiBzaXplb2YoKmVudHJ5LT5wYWdlbGlzdCksCi0JCQkJICAgICBEUk1fTUVNX1BBR0VTICk7Ci0JaWYgKCAhZW50cnktPnBhZ2VsaXN0ICkgewotCQlkcm1fZnJlZSggZW50cnksIHNpemVvZigqZW50cnkpLCBEUk1fTUVNX1NHTElTVFMgKTsKKwllbnRyeS0+cGFnZWxpc3QgPSBkcm1fYWxsb2MocGFnZXMgKiBzaXplb2YoKmVudHJ5LT5wYWdlbGlzdCksCisJCQkJICAgIERSTV9NRU1fUEFHRVMpOworCWlmICghZW50cnktPnBhZ2VsaXN0KSB7CisJCWRybV9mcmVlKGVudHJ5LCBzaXplb2YoKmVudHJ5KSwgRFJNX01FTV9TR0xJU1RTKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJbWVtc2V0KGVudHJ5LT5wYWdlbGlzdCwgMCwgcGFnZXMgKiBzaXplb2YoKmVudHJ5LT5wYWdlbGlzdCkpOwogCi0JZW50cnktPmJ1c2FkZHIgPSBkcm1fYWxsb2MoIHBhZ2VzICogc2l6ZW9mKCplbnRyeS0+YnVzYWRkciksCi0JCQkJICAgICBEUk1fTUVNX1BBR0VTICk7Ci0JaWYgKCAhZW50cnktPmJ1c2FkZHIgKSB7Ci0JCWRybV9mcmVlKCBlbnRyeS0+cGFnZWxpc3QsCi0JCQkgICBlbnRyeS0+cGFnZXMgKiBzaXplb2YoKmVudHJ5LT5wYWdlbGlzdCksCi0JCQkgICBEUk1fTUVNX1BBR0VTICk7Ci0JCWRybV9mcmVlKCBlbnRyeSwKLQkJCSAgIHNpemVvZigqZW50cnkpLAotCQkJICAgRFJNX01FTV9TR0xJU1RTICk7CisJZW50cnktPmJ1c2FkZHIgPSBkcm1fYWxsb2MocGFnZXMgKiBzaXplb2YoKmVudHJ5LT5idXNhZGRyKSwKKwkJCQkgICBEUk1fTUVNX1BBR0VTKTsKKwlpZiAoIWVudHJ5LT5idXNhZGRyKSB7CisJCWRybV9mcmVlKGVudHJ5LT5wYWdlbGlzdCwKKwkJCSBlbnRyeS0+cGFnZXMgKiBzaXplb2YoKmVudHJ5LT5wYWdlbGlzdCksCisJCQkgRFJNX01FTV9QQUdFUyk7CisJCWRybV9mcmVlKGVudHJ5LCBzaXplb2YoKmVudHJ5KSwgRFJNX01FTV9TR0xJU1RTKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCW1lbXNldCggKHZvaWQgKillbnRyeS0+YnVzYWRkciwgMCwgcGFnZXMgKiBzaXplb2YoKmVudHJ5LT5idXNhZGRyKSApOworCW1lbXNldCgodm9pZCAqKWVudHJ5LT5idXNhZGRyLCAwLCBwYWdlcyAqIHNpemVvZigqZW50cnktPmJ1c2FkZHIpKTsKIAotCWVudHJ5LT52aXJ0dWFsID0gdm1hbGxvY18zMiggcGFnZXMgPDwgUEFHRV9TSElGVCApOwotCWlmICggIWVudHJ5LT52aXJ0dWFsICkgewotCQlkcm1fZnJlZSggZW50cnktPmJ1c2FkZHIsCi0JCQkgICBlbnRyeS0+cGFnZXMgKiBzaXplb2YoKmVudHJ5LT5idXNhZGRyKSwKLQkJCSAgIERSTV9NRU1fUEFHRVMgKTsKLQkJZHJtX2ZyZWUoIGVudHJ5LT5wYWdlbGlzdCwKLQkJCSAgIGVudHJ5LT5wYWdlcyAqIHNpemVvZigqZW50cnktPnBhZ2VsaXN0KSwKLQkJCSAgIERSTV9NRU1fUEFHRVMgKTsKLQkJZHJtX2ZyZWUoIGVudHJ5LAotCQkJICAgc2l6ZW9mKCplbnRyeSksCi0JCQkgICBEUk1fTUVNX1NHTElTVFMgKTsKKwllbnRyeS0+dmlydHVhbCA9IHZtYWxsb2NfMzIocGFnZXMgPDwgUEFHRV9TSElGVCk7CisJaWYgKCFlbnRyeS0+dmlydHVhbCkgeworCQlkcm1fZnJlZShlbnRyeS0+YnVzYWRkciwKKwkJCSBlbnRyeS0+cGFnZXMgKiBzaXplb2YoKmVudHJ5LT5idXNhZGRyKSwgRFJNX01FTV9QQUdFUyk7CisJCWRybV9mcmVlKGVudHJ5LT5wYWdlbGlzdCwKKwkJCSBlbnRyeS0+cGFnZXMgKiBzaXplb2YoKmVudHJ5LT5wYWdlbGlzdCksCisJCQkgRFJNX01FTV9QQUdFUyk7CisJCWRybV9mcmVlKGVudHJ5LCBzaXplb2YoKmVudHJ5KSwgRFJNX01FTV9TR0xJU1RTKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJLyogVGhpcyBhbHNvIGZvcmNlcyB0aGUgbWFwcGluZyBvZiBDT1cgcGFnZXMsIHNvIG91ciBwYWdlIGxpc3QKIAkgKiB3aWxsIGJlIHZhbGlkLiAgUGxlYXNlIGRvbid0IHJlbW92ZSBpdC4uLgogCSAqLwotCW1lbXNldCggZW50cnktPnZpcnR1YWwsIDAsIHBhZ2VzIDw8IFBBR0VfU0hJRlQgKTsKKwltZW1zZXQoZW50cnktPnZpcnR1YWwsIDAsIHBhZ2VzIDw8IFBBR0VfU0hJRlQpOwogCiAJZW50cnktPmhhbmRsZSA9IFNjYXR0ZXJIYW5kbGUoKHVuc2lnbmVkIGxvbmcpZW50cnktPnZpcnR1YWwpOwogCi0JRFJNX0RFQlVHKCAic2cgYWxsb2MgaGFuZGxlICA9ICUwOGx4XG4iLCBlbnRyeS0+aGFuZGxlICk7Ci0JRFJNX0RFQlVHKCAic2cgYWxsb2MgdmlydHVhbCA9ICVwXG4iLCBlbnRyeS0+dmlydHVhbCApOworCURSTV9ERUJVRygic2cgYWxsb2MgaGFuZGxlICA9ICUwOGx4XG4iLCBlbnRyeS0+aGFuZGxlKTsKKwlEUk1fREVCVUcoInNnIGFsbG9jIHZpcnR1YWwgPSAlcFxuIiwgZW50cnktPnZpcnR1YWwpOwogCi0JZm9yIChpID0gKHVuc2lnbmVkIGxvbmcpZW50cnktPnZpcnR1YWwsIGogPSAwOyBqIDwgcGFnZXM7IAotCQlpICs9IFBBR0VfU0laRSwgaisrKSB7CisJZm9yIChpID0gKHVuc2lnbmVkIGxvbmcpZW50cnktPnZpcnR1YWwsIGogPSAwOyBqIDwgcGFnZXM7CisJICAgICBpICs9IFBBR0VfU0laRSwgaisrKSB7CiAJCWVudHJ5LT5wYWdlbGlzdFtqXSA9IHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWkpOwogCQlpZiAoIWVudHJ5LT5wYWdlbGlzdFtqXSkKIAkJCWdvdG8gZmFpbGVkOwpAQCAtMTU0LDggKzE0NSw4IEBACiAKIAlyZXF1ZXN0LmhhbmRsZSA9IGVudHJ5LT5oYW5kbGU7CiAKLQlpZiAoIGNvcHlfdG9fdXNlciggYXJncCwgJnJlcXVlc3QsIHNpemVvZihyZXF1ZXN0KSApICkgewotCQlkcm1fc2dfY2xlYW51cCggZW50cnkgKTsKKwlpZiAoY29weV90b191c2VyKGFyZ3AsICZyZXF1ZXN0LCBzaXplb2YocmVxdWVzdCkpKSB7CisJCWRybV9zZ19jbGVhbnVwKGVudHJ5KTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCkBAIC0xNjYsNTAgKzE1Nyw1MCBAQAogCSAqIHZlcnNhLgogCSAqLwogCXsKLQlpbnQgZXJyb3IgPSAwOworCQlpbnQgZXJyb3IgPSAwOwogCi0JZm9yICggaSA9IDAgOyBpIDwgcGFnZXMgOyBpKysgKSB7Ci0JCXVuc2lnbmVkIGxvbmcgKnRtcDsKKwkJZm9yIChpID0gMDsgaSA8IHBhZ2VzOyBpKyspIHsKKwkJCXVuc2lnbmVkIGxvbmcgKnRtcDsKIAotCQl0bXAgPSBwYWdlX2FkZHJlc3MoIGVudHJ5LT5wYWdlbGlzdFtpXSApOwotCQlmb3IgKCBqID0gMCA7Ci0JCSAgICAgIGogPCBQQUdFX1NJWkUgLyBzaXplb2YodW5zaWduZWQgbG9uZykgOwotCQkgICAgICBqKyssIHRtcCsrICkgewotCQkJKnRtcCA9IDB4Y2FmZWJhYmU7Ci0JCX0KLQkJdG1wID0gKHVuc2lnbmVkIGxvbmcgKikoKHU4ICopZW50cnktPnZpcnR1YWwgKwotCQkJCQkoUEFHRV9TSVpFICogaSkpOwotCQlmb3IoIGogPSAwIDsKLQkJICAgICBqIDwgUEFHRV9TSVpFIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpIDsKLQkJICAgICBqKyssIHRtcCsrICkgewotCQkJaWYgKCAqdG1wICE9IDB4Y2FmZWJhYmUgJiYgZXJyb3IgPT0gMCApIHsKLQkJCQllcnJvciA9IDE7Ci0JCQkJRFJNX0VSUk9SKCAiU2NhdHRlciBhbGxvY2F0aW9uIGVycm9yLCAiCi0JCQkJCSAgICJwYWdlbGlzdCBkb2VzIG5vdCBtYXRjaCAiCi0JCQkJCSAgICJ2aXJ0dWFsIG1hcHBpbmdcbiIgKTsKKwkJCXRtcCA9IHBhZ2VfYWRkcmVzcyhlbnRyeS0+cGFnZWxpc3RbaV0pOworCQkJZm9yIChqID0gMDsKKwkJCSAgICAgaiA8IFBBR0VfU0laRSAvIHNpemVvZih1bnNpZ25lZCBsb25nKTsKKwkJCSAgICAgaisrLCB0bXArKykgeworCQkJCSp0bXAgPSAweGNhZmViYWJlOworCQkJfQorCQkJdG1wID0gKHVuc2lnbmVkIGxvbmcgKikoKHU4ICopIGVudHJ5LT52aXJ0dWFsICsKKwkJCQkJCShQQUdFX1NJWkUgKiBpKSk7CisJCQlmb3IgKGogPSAwOworCQkJICAgICBqIDwgUEFHRV9TSVpFIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOworCQkJICAgICBqKyssIHRtcCsrKSB7CisJCQkJaWYgKCp0bXAgIT0gMHhjYWZlYmFiZSAmJiBlcnJvciA9PSAwKSB7CisJCQkJCWVycm9yID0gMTsKKwkJCQkJRFJNX0VSUk9SKCJTY2F0dGVyIGFsbG9jYXRpb24gZXJyb3IsICIKKwkJCQkJCSAgInBhZ2VsaXN0IGRvZXMgbm90IG1hdGNoICIKKwkJCQkJCSAgInZpcnR1YWwgbWFwcGluZ1xuIik7CisJCQkJfQorCQkJfQorCQkJdG1wID0gcGFnZV9hZGRyZXNzKGVudHJ5LT5wYWdlbGlzdFtpXSk7CisJCQlmb3IgKGogPSAwOworCQkJICAgICBqIDwgUEFHRV9TSVpFIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOworCQkJICAgICBqKyssIHRtcCsrKSB7CisJCQkJKnRtcCA9IDA7CiAJCQl9CiAJCX0KLQkJdG1wID0gcGFnZV9hZGRyZXNzKCBlbnRyeS0+cGFnZWxpc3RbaV0gKTsKLQkJZm9yKGogPSAwIDsKLQkJICAgIGogPCBQQUdFX1NJWkUgLyBzaXplb2YodW5zaWduZWQgbG9uZykgOwotCQkgICAgaisrLCB0bXArKykgewotCQkJKnRtcCA9IDA7Ci0JCX0KLQl9Ci0JaWYgKGVycm9yID09IDApCi0JCURSTV9FUlJPUiggIlNjYXR0ZXIgYWxsb2NhdGlvbiBtYXRjaGVzIHBhZ2VsaXN0XG4iICk7CisJCWlmIChlcnJvciA9PSAwKQorCQkJRFJNX0VSUk9SKCJTY2F0dGVyIGFsbG9jYXRpb24gbWF0Y2hlcyBwYWdlbGlzdFxuIik7CiAJfQogI2VuZGlmCiAKIAlyZXR1cm4gMDsKIAotIGZhaWxlZDoKLQlkcm1fc2dfY2xlYW51cCggZW50cnkgKTsKKyAgICAgIGZhaWxlZDoKKwlkcm1fc2dfY2xlYW51cChlbnRyeSk7CiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKLWludCBkcm1fc2dfZnJlZSggc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCi0JCSB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyApCitpbnQgZHJtX3NnX2ZyZWUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCisJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCWRybV9maWxlX3QgKnByaXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAJZHJtX2RldmljZV90ICpkZXYgPSBwcml2LT5oZWFkLT5kZXY7CkBAIC0yMTksMjAgKzIxMCwyMCBAQAogCWlmICghZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9TRykpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKCBjb3B5X2Zyb21fdXNlciggJnJlcXVlc3QsCi0JCQkgICAgIChkcm1fc2NhdHRlcl9nYXRoZXJfdCBfX3VzZXIgKilhcmcsCi0JCQkgICAgIHNpemVvZihyZXF1ZXN0KSApICkKKwlpZiAoY29weV9mcm9tX3VzZXIoJnJlcXVlc3QsCisJCQkgICAoZHJtX3NjYXR0ZXJfZ2F0aGVyX3QgX191c2VyICopIGFyZywKKwkJCSAgIHNpemVvZihyZXF1ZXN0KSkpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJZW50cnkgPSBkZXYtPnNnOwogCWRldi0+c2cgPSBOVUxMOwogCi0JaWYgKCAhZW50cnkgfHwgZW50cnktPmhhbmRsZSAhPSByZXF1ZXN0LmhhbmRsZSApCisJaWYgKCFlbnRyeSB8fCBlbnRyeS0+aGFuZGxlICE9IHJlcXVlc3QuaGFuZGxlKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCURSTV9ERUJVRyggInNnIGZyZWUgdmlydHVhbCAgPSAlcFxuIiwgZW50cnktPnZpcnR1YWwgKTsKKwlEUk1fREVCVUcoInNnIGZyZWUgdmlydHVhbCAgPSAlcFxuIiwgZW50cnktPnZpcnR1YWwpOwogCi0JZHJtX3NnX2NsZWFudXAoIGVudHJ5ICk7CisJZHJtX3NnX2NsZWFudXAoZW50cnkpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9zdHViLmMgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9zdHViLmMKaW5kZXggOTVhOTc2Yy4uN2NiNzIzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1fc3R1Yi5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX3N0dWIuYwpAQCAtMzcsMTEgKzM3LDExIEBACiAjaW5jbHVkZSAiZHJtX2NvcmUuaCIKIAogdW5zaWduZWQgaW50IGRybV9jYXJkc19saW1pdCA9IDE2OwkvKiBFbm91Z2ggZm9yIG9uZSBtYWNoaW5lICovCi11bnNpZ25lZCBpbnQgZHJtX2RlYnVnID0gMDsJCS8qIDEgdG8gZW5hYmxlIGRlYnVnIG91dHB1dCAqLwordW5zaWduZWQgaW50IGRybV9kZWJ1ZyA9IDA7CS8qIDEgdG8gZW5hYmxlIGRlYnVnIG91dHB1dCAqLwogRVhQT1JUX1NZTUJPTChkcm1fZGVidWcpOwogCi1NT0RVTEVfQVVUSE9SKCBDT1JFX0FVVEhPUiApOwotTU9EVUxFX0RFU0NSSVBUSU9OKCBDT1JFX0RFU0MgKTsKK01PRFVMRV9BVVRIT1IoQ09SRV9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKENPUkVfREVTQyk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIGFuZCBhZGRpdGlvbmFsIHJpZ2h0cyIpOwogTU9EVUxFX1BBUk1fREVTQyhjYXJkc19saW1pdCwgIk1heGltdW0gbnVtYmVyIG9mIGdyYXBoaWNzIGNhcmRzIik7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRW5hYmxlIGRlYnVnIG91dHB1dCIpOwpAQCAtNTMsMTkgKzUzLDIxIEBACiBzdHJ1Y3QgZHJtX3N5c2ZzX2NsYXNzICpkcm1fY2xhc3M7CiBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRybV9wcm9jX3Jvb3Q7CiAKLXN0YXRpYyBpbnQgZHJtX2ZpbGxfaW5fZGV2KGRybV9kZXZpY2VfdCAqZGV2LCBzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCwgc3RydWN0IGRybV9kcml2ZXIgKmRyaXZlcikKK3N0YXRpYyBpbnQgZHJtX2ZpbGxfaW5fZGV2KGRybV9kZXZpY2VfdCAqIGRldiwgc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50LAorCQkJICAgc3RydWN0IGRybV9kcml2ZXIgKmRyaXZlcikKIHsKIAlpbnQgcmV0Y29kZTsKIAogCXNwaW5fbG9ja19pbml0KCZkZXYtPmNvdW50X2xvY2spOwotCWluaXRfdGltZXIoICZkZXYtPnRpbWVyICk7Ci0Jc2VtYV9pbml0KCAmZGV2LT5zdHJ1Y3Rfc2VtLCAxICk7Ci0Jc2VtYV9pbml0KCAmZGV2LT5jdHhsaXN0X3NlbSwgMSApOworCWluaXRfdGltZXIoJmRldi0+dGltZXIpOworCXNlbWFfaW5pdCgmZGV2LT5zdHJ1Y3Rfc2VtLCAxKTsKKwlzZW1hX2luaXQoJmRldi0+Y3R4bGlzdF9zZW0sIDEpOwogCi0JZGV2LT5wZGV2ICAgPSBwZGV2OworCWRldi0+cGRldiA9IHBkZXY7CiAKICNpZmRlZiBfX2FscGhhX18KLQlkZXYtPmhvc2UgICA9IHBkZXYtPnN5c2RhdGE7CisJZGV2LT5ob3NlID0gcGRldi0+c3lzZGF0YTsKIAlkZXYtPnBjaV9kb21haW4gPSBkZXYtPmhvc2UtPmJ1cy0+bnVtYmVyOwogI2Vsc2UKIAlkZXYtPnBjaV9kb21haW4gPSAwOwpAQCAtODIsMTUgKzg0LDE1IEBACiAKIAkvKiB0aGUgRFJNIGhhcyA2IGJhc2ljIGNvdW50ZXJzICovCiAJZGV2LT5jb3VudGVycyA9IDY7Ci0JZGV2LT50eXBlc1swXSAgPSBfRFJNX1NUQVRfTE9DSzsKLQlkZXYtPnR5cGVzWzFdICA9IF9EUk1fU1RBVF9PUEVOUzsKLQlkZXYtPnR5cGVzWzJdICA9IF9EUk1fU1RBVF9DTE9TRVM7Ci0JZGV2LT50eXBlc1szXSAgPSBfRFJNX1NUQVRfSU9DVExTOwotCWRldi0+dHlwZXNbNF0gID0gX0RSTV9TVEFUX0xPQ0tTOwotCWRldi0+dHlwZXNbNV0gID0gX0RSTV9TVEFUX1VOTE9DS1M7CisJZGV2LT50eXBlc1swXSA9IF9EUk1fU1RBVF9MT0NLOworCWRldi0+dHlwZXNbMV0gPSBfRFJNX1NUQVRfT1BFTlM7CisJZGV2LT50eXBlc1syXSA9IF9EUk1fU1RBVF9DTE9TRVM7CisJZGV2LT50eXBlc1szXSA9IF9EUk1fU1RBVF9JT0NUTFM7CisJZGV2LT50eXBlc1s0XSA9IF9EUk1fU1RBVF9MT0NLUzsKKwlkZXYtPnR5cGVzWzVdID0gX0RSTV9TVEFUX1VOTE9DS1M7CiAKIAlkZXYtPmRyaXZlciA9IGRyaXZlcjsKLQkKKwogCWlmIChkZXYtPmRyaXZlci0+cHJlaW5pdCkKIAkJaWYgKChyZXRjb2RlID0gZGV2LT5kcml2ZXItPnByZWluaXQoZGV2LCBlbnQtPmRyaXZlcl9kYXRhKSkpCiAJCQlnb3RvIGVycm9yX291dF91bnJlZzsKQEAgLTk4LDI5ICsxMDAsMzAgQEAKIAlpZiAoZHJtX2NvcmVfaGFzX0FHUChkZXYpKSB7CiAJCWlmIChkcm1fZGV2aWNlX2lzX2FncChkZXYpKQogCQkJZGV2LT5hZ3AgPSBkcm1fYWdwX2luaXQoZGV2KTsKLQkJaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfUkVRVUlSRV9BR1ApICYmIChkZXYtPmFncCA9PSBOVUxMKSkgewotCQkJRFJNX0VSUk9SKCAiQ2Fubm90IGluaXRpYWxpemUgdGhlIGFncGdhcnQgbW9kdWxlLlxuIiApOworCQlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9SRVFVSVJFX0FHUCkKKwkJICAgICYmIChkZXYtPmFncCA9PSBOVUxMKSkgeworCQkJRFJNX0VSUk9SKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgYWdwZ2FydCBtb2R1bGUuXG4iKTsKIAkJCXJldGNvZGUgPSAtRUlOVkFMOwogCQkJZ290byBlcnJvcl9vdXRfdW5yZWc7CiAJCX0KIAkJaWYgKGRybV9jb3JlX2hhc19NVFJSKGRldikpIHsKIAkJCWlmIChkZXYtPmFncCkKLQkJCQlkZXYtPmFncC0+YWdwX210cnIgPSBtdHJyX2FkZCggZGV2LT5hZ3AtPmFncF9pbmZvLmFwZXJfYmFzZSwKLQkJCQkJCQkgICAgICAgZGV2LT5hZ3AtPmFncF9pbmZvLmFwZXJfc2l6ZSoxMDI0KjEwMjQsCi0JCQkJCQkJICAgICAgIE1UUlJfVFlQRV9XUkNPTUIsCi0JCQkJCQkJICAgICAgIDEgKTsKKwkJCQlkZXYtPmFncC0+YWdwX210cnIgPQorCQkJCSAgICBtdHJyX2FkZChkZXYtPmFncC0+YWdwX2luZm8uYXBlcl9iYXNlLAorCQkJCQkgICAgIGRldi0+YWdwLT5hZ3BfaW5mby5hcGVyX3NpemUgKgorCQkJCQkgICAgIDEwMjQgKiAxMDI0LCBNVFJSX1RZUEVfV1JDT01CLCAxKTsKIAkJfQogCX0KIAotCXJldGNvZGUgPSBkcm1fY3R4Yml0bWFwX2luaXQoIGRldiApOwotCWlmKCByZXRjb2RlICkgewotCQlEUk1fRVJST1IoICJDYW5ub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBjb250ZXh0IGJpdG1hcC5cbiIgKTsKKwlyZXRjb2RlID0gZHJtX2N0eGJpdG1hcF9pbml0KGRldik7CisJaWYgKHJldGNvZGUpIHsKKwkJRFJNX0VSUk9SKCJDYW5ub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBjb250ZXh0IGJpdG1hcC5cbiIpOwogCQlnb3RvIGVycm9yX291dF91bnJlZzsKIAl9CiAKIAlyZXR1cm4gMDsKLQkKLWVycm9yX291dF91bnJlZzoKKworICAgICAgZXJyb3Jfb3V0X3VucmVnOgogCWRybV90YWtlZG93bihkZXYpOwogCXJldHVybiByZXRjb2RlOwogfQpAQCAtMTQwLDcgKzE0Myw3IEBACiAJaW50IG1pbm9yID0gaW1pbm9yKGlub2RlKTsKIAlpbnQgZXJyID0gLUVOT0RFVjsKIAlzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpvbGRfZm9wczsKLQkKKwogCURSTV9ERUJVRygiXG4iKTsKIAogCWlmICghKChtaW5vciA+PSAwKSAmJiAobWlub3IgPCBkcm1fY2FyZHNfbGltaXQpKSkKQEAgLTE0OCw3ICsxNTEsNyBAQAogCiAJaWYgKCFkcm1faGVhZHNbbWlub3JdKQogCQlyZXR1cm4gLUVOT0RFVjsKLQkKKwogCWlmICghKGRldiA9IGRybV9oZWFkc1ttaW5vcl0tPmRldikpCiAJCXJldHVybiAtRU5PREVWOwogCkBAIC0xNzQsNyArMTc3LDcgQEAKICAqIGNyZWF0ZSB0aGUgcHJvYyBpbml0IGVudHJ5IHZpYSBwcm9jX2luaXQoKS4gVGhpcyByb3V0aW5lcyBhc3NpZ25zCiAgKiBtaW5vciBudW1iZXJzIHRvIHNlY29uZGFyeSBoZWFkcyBvZiBtdWx0aS1oZWFkZWQgY2FyZHMKICAqLwotc3RhdGljIGludCBkcm1fZ2V0X2hlYWQoZHJtX2RldmljZV90ICpkZXYsIGRybV9oZWFkX3QgKmhlYWQpCitzdGF0aWMgaW50IGRybV9nZXRfaGVhZChkcm1fZGV2aWNlX3QgKiBkZXYsIGRybV9oZWFkX3QgKiBoZWFkKQogewogCWRybV9oZWFkX3QgKipoZWFkcyA9IGRybV9oZWFkczsKIAlpbnQgcmV0OwpAQCAtMTg0LDI2ICsxODcsMjcgQEAKIAogCWZvciAobWlub3IgPSAwOyBtaW5vciA8IGRybV9jYXJkc19saW1pdDsgbWlub3IrKywgaGVhZHMrKykgewogCQlpZiAoISpoZWFkcykgewotCQkJCisKIAkJCSpoZWFkID0gKGRybV9oZWFkX3QpIHsKLQkJCQkuZGV2ID0gZGV2LAotCQkJCS5kZXZpY2UgPSBNS0RFVihEUk1fTUFKT1IsIG1pbm9yKSwKLQkJCQkubWlub3IgPSBtaW5vciwKLQkJCX07Ci0JCQkKLQkJCWlmICgocmV0ID0gZHJtX3Byb2NfaW5pdChkZXYsIG1pbm9yLCBkcm1fcHJvY19yb290LCAmaGVhZC0+ZGV2X3Jvb3QpKSkgewotCQkJCXByaW50ayAoS0VSTl9FUlIgIkRSTTogRmFpbGVkIHRvIGluaXRpYWxpemUgL3Byb2MvZHJpLlxuIik7CisJCQkuZGV2ID0gZGV2LC5kZXZpY2UgPQorCQkJCSAgICBNS0RFVihEUk1fTUFKT1IsIG1pbm9yKSwubWlub3IgPSBtaW5vcix9OworCisJCQlpZiAoKHJldCA9CisJCQkgICAgIGRybV9wcm9jX2luaXQoZGV2LCBtaW5vciwgZHJtX3Byb2Nfcm9vdCwKKwkJCQkJICAgJmhlYWQtPmRldl9yb290KSkpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkgICAgICAgIkRSTTogRmFpbGVkIHRvIGluaXRpYWxpemUgL3Byb2MvZHJpLlxuIik7CiAJCQkJZ290byBlcnJfZzE7CiAJCQl9CiAKLQkJCQogCQkJaGVhZC0+ZGV2X2NsYXNzID0gZHJtX3N5c2ZzX2RldmljZV9hZGQoZHJtX2NsYXNzLAogCQkJCQkJCSAgICAgICBNS0RFVihEUk1fTUFKT1IsCiAJCQkJCQkJCSAgICAgbWlub3IpLAogCQkJCQkJCSAgICAgICAmZGV2LT5wZGV2LT5kZXYsCiAJCQkJCQkJICAgICAgICJjYXJkJWQiLCBtaW5vcik7CiAJCQlpZiAoSVNfRVJSKGhlYWQtPmRldl9jbGFzcykpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgIkRSTTogRXJyb3Igc3lzZnNfZGV2aWNlX2FkZC5cbiIpOworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAiRFJNOiBFcnJvciBzeXNmc19kZXZpY2VfYWRkLlxuIik7CiAJCQkJcmV0ID0gUFRSX0VSUihoZWFkLT5kZXZfY2xhc3MpOwogCQkJCWdvdG8gZXJyX2cyOwogCQkJfQpAQCAtMjE1LDEzICsyMTksMTQgQEAKIAl9CiAJRFJNX0VSUk9SKCJvdXQgb2YgbWlub3JzXG4iKTsKIAlyZXR1cm4gLUVOT01FTTsKLWVycl9nMjoKKyAgICAgIGVycl9nMjoKIAlkcm1fcHJvY19jbGVhbnVwKG1pbm9yLCBkcm1fcHJvY19yb290LCBoZWFkLT5kZXZfcm9vdCk7Ci1lcnJfZzE6Ci0JKmhlYWQgPSAoZHJtX2hlYWRfdCkgey5kZXYgPSBOVUxMfTsKKyAgICAgIGVycl9nMToKKwkqaGVhZCA9IChkcm1faGVhZF90KSB7CisJLmRldiA9IE5VTEx9OwogCXJldHVybiByZXQ7CiB9Ci0JCQorCiAvKioKICAqIFJlZ2lzdGVyLgogICoKQEAgLTIzNCw3ICsyMzksNyBAQAogICogVHJ5IGFuZCByZWdpc3RlciwgaWYgd2UgZmFpbCB0byByZWdpc3RlciwgYmFja291dCBwcmV2aW91cyB3b3JrLgogICovCiBpbnQgZHJtX2dldF9kZXYoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQsCi0JICAgICAgc3RydWN0IGRybV9kcml2ZXIgKmRyaXZlcikKKwkJc3RydWN0IGRybV9kcml2ZXIgKmRyaXZlcikKIHsKIAlkcm1fZGV2aWNlX3QgKmRldjsKIAlpbnQgcmV0OwpAQCAtMjYxLDEwICsyNjYsMTEgQEAKIAogCXJldHVybiAwOwogCi1lcnJfZzE6CisgICAgICBlcnJfZzE6CiAJZHJtX2ZyZWUoZGV2LCBzaXplb2YoKmRldiksIERSTV9NRU1fU1RVQik7CiAJcmV0dXJuIHJldDsKIH0KKwogRVhQT1JUX1NZTUJPTChkcm1fZ2V0X2Rldik7CiAKIC8qKgpAQCAtMzA1LDE5ICszMTEsMTkgQEAKICAqIGxhc3QgbWlub3IgcmVsZWFzZWQuCiAgKgogICovCi1pbnQgZHJtX3B1dF9oZWFkKGRybV9oZWFkX3QgKmhlYWQpCitpbnQgZHJtX3B1dF9oZWFkKGRybV9oZWFkX3QgKiBoZWFkKQogewogCWludCBtaW5vciA9IGhlYWQtPm1pbm9yOwotCQorCiAJRFJNX0RFQlVHKCJyZWxlYXNlIHNlY29uZGFyeSBtaW5vciAlZFxuIiwgbWlub3IpOwotCQorCiAJZHJtX3Byb2NfY2xlYW51cChtaW5vciwgZHJtX3Byb2Nfcm9vdCwgaGVhZC0+ZGV2X3Jvb3QpOwogCWRybV9zeXNmc19kZXZpY2VfcmVtb3ZlKE1LREVWKERSTV9NQUpPUiwgaGVhZC0+bWlub3IpKTsKLQkKLQkqaGVhZCA9IChkcm1faGVhZF90KXsuZGV2ID0gTlVMTH07CisKKwkqaGVhZCA9IChkcm1faGVhZF90KSB7CisJLmRldiA9IE5VTEx9OwogCiAJZHJtX2hlYWRzW21pbm9yXSA9IE5VTEw7Ci0JCisKIAlyZXR1cm4gMDsKIH0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9kcm1fdm0uYyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX3ZtLmMKaW5kZXggYTEzZDA3Zi4uZTg0YTc4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1fdm0uYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV92bS5jCkBAIC0xLDcgKzEsNyBAQAogLyoqCi0gKiBcZmlsZSBkcm1fdm0uaAorICogXGZpbGUgZHJtX3ZtLmMKICAqIE1lbW9yeSBtYXBwaW5nIGZvciBEUk0KLSAqIAorICoKICAqIFxhdXRob3IgUmlja2FyZCBFLiAoUmlrKSBGYWl0aCA8ZmFpdGhAdmFsaW51eC5jb20+CiAgKiBcYXV0aG9yIEdhcmV0aCBIdWdoZXMgPGdhcmV0aEB2YWxpbnV4LmNvbT4KICAqLwpAQCAtNDcsMzIgKzQ3LDM0IEBACiAgKiBccGFyYW0gdm1hIHZpcnR1YWwgbWVtb3J5IGFyZWEuCiAgKiBccGFyYW0gYWRkcmVzcyBhY2Nlc3MgYWRkcmVzcy4KICAqIFxyZXR1cm4gcG9pbnRlciB0byB0aGUgcGFnZSBzdHJ1Y3R1cmUuCi0gKiAKKyAqCiAgKiBGaW5kIHRoZSByaWdodCBtYXAgYW5kIGlmIGl0J3MgQUdQIG1lbW9yeSBmaW5kIHRoZSByZWFsIHBoeXNpY2FsIHBhZ2UgdG8KICAqIG1hcCwgZ2V0IHRoZSBwYWdlLCBpbmNyZW1lbnQgdGhlIHVzZSBjb3VudCBhbmQgcmV0dXJuIGl0LgogICovCiAjaWYgX19PU19IQVNfQUdQCiBzdGF0aWMgX19pbmxpbmVfXyBzdHJ1Y3QgcGFnZSAqZHJtX2RvX3ZtX25vcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJCQkJCSB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCisJCQkJCQl1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7Ci0JZHJtX2ZpbGVfdCAqcHJpdiAgPSB2bWEtPnZtX2ZpbGUtPnByaXZhdGVfZGF0YTsKKwlkcm1fZmlsZV90ICpwcml2ID0gdm1hLT52bV9maWxlLT5wcml2YXRlX2RhdGE7CiAJZHJtX2RldmljZV90ICpkZXYgPSBwcml2LT5oZWFkLT5kZXY7Ci0JZHJtX21hcF90ICptYXAgICAgPSBOVUxMOwotCWRybV9tYXBfbGlzdF90ICAqcl9saXN0OworCWRybV9tYXBfdCAqbWFwID0gTlVMTDsKKwlkcm1fbWFwX2xpc3RfdCAqcl9saXN0OwogCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CiAKIAkvKgotICAgICAgICAgKiBGaW5kIHRoZSByaWdodCBtYXAKLSAgICAgICAgICovCisJICogRmluZCB0aGUgcmlnaHQgbWFwCisJICovCiAJaWYgKCFkcm1fY29yZV9oYXNfQUdQKGRldikpCiAJCWdvdG8gdm1fbm9wYWdlX2Vycm9yOwogCi0JaWYoIWRldi0+YWdwIHx8ICFkZXYtPmFncC0+Y2FudF91c2VfYXBlcnR1cmUpIGdvdG8gdm1fbm9wYWdlX2Vycm9yOworCWlmICghZGV2LT5hZ3AgfHwgIWRldi0+YWdwLT5jYW50X3VzZV9hcGVydHVyZSkKKwkJZ290byB2bV9ub3BhZ2VfZXJyb3I7CiAKIAlsaXN0X2Zvcl9lYWNoKGxpc3QsICZkZXYtPm1hcGxpc3QtPmhlYWQpIHsKIAkJcl9saXN0ID0gbGlzdF9lbnRyeShsaXN0LCBkcm1fbWFwX2xpc3RfdCwgaGVhZCk7CiAJCW1hcCA9IHJfbGlzdC0+bWFwOwotCQlpZiAoIW1hcCkgY29udGludWU7CisJCWlmICghbWFwKQorCQkJY29udGludWU7CiAJCWlmIChyX2xpc3QtPnVzZXJfdG9rZW4gPT0gVk1fT0ZGU0VUKHZtYSkpCiAJCQlicmVhazsKIAl9CkBAIC04NSw0NSArODcsNDcgQEAKIAogI2lmZGVmIF9fYWxwaGFfXwogCQkvKgotICAgICAgICAgICAgICAgICAqIEFkanVzdCB0byBhIGJ1cy1yZWxhdGl2ZSBhZGRyZXNzCi0gICAgICAgICAgICAgICAgICovCisJCSAqIEFkanVzdCB0byBhIGJ1cy1yZWxhdGl2ZSBhZGRyZXNzCisJCSAqLwogCQliYWRkciAtPSBkZXYtPmhvc2UtPm1lbV9zcGFjZS0+c3RhcnQ7CiAjZW5kaWYKIAogCQkvKgotICAgICAgICAgICAgICAgICAqIEl0J3MgQUdQIG1lbW9yeSAtIGZpbmQgdGhlIHJlYWwgcGh5c2ljYWwgcGFnZSB0byBtYXAKLSAgICAgICAgICAgICAgICAgKi8KLQkJZm9yKGFncG1lbSA9IGRldi0+YWdwLT5tZW1vcnk7IGFncG1lbTsgYWdwbWVtID0gYWdwbWVtLT5uZXh0KSB7CisJCSAqIEl0J3MgQUdQIG1lbW9yeSAtIGZpbmQgdGhlIHJlYWwgcGh5c2ljYWwgcGFnZSB0byBtYXAKKwkJICovCisJCWZvciAoYWdwbWVtID0gZGV2LT5hZ3AtPm1lbW9yeTsgYWdwbWVtOyBhZ3BtZW0gPSBhZ3BtZW0tPm5leHQpIHsKIAkJCWlmIChhZ3BtZW0tPmJvdW5kIDw9IGJhZGRyICYmCi0JCQkgICAgYWdwbWVtLT5ib3VuZCArIGFncG1lbS0+cGFnZXMgKiBQQUdFX1NJWkUgPiBiYWRkcikgCisJCQkgICAgYWdwbWVtLT5ib3VuZCArIGFncG1lbS0+cGFnZXMgKiBQQUdFX1NJWkUgPiBiYWRkcikKIAkJCQlicmVhazsKIAkJfQogCi0JCWlmICghYWdwbWVtKSBnb3RvIHZtX25vcGFnZV9lcnJvcjsKKwkJaWYgKCFhZ3BtZW0pCisJCQlnb3RvIHZtX25vcGFnZV9lcnJvcjsKIAogCQkvKgotICAgICAgICAgICAgICAgICAqIEdldCB0aGUgcGFnZSwgaW5jIHRoZSB1c2UgY291bnQsIGFuZCByZXR1cm4gaXQKLSAgICAgICAgICAgICAgICAgKi8KKwkJICogR2V0IHRoZSBwYWdlLCBpbmMgdGhlIHVzZSBjb3VudCwgYW5kIHJldHVybiBpdAorCQkgKi8KIAkJb2Zmc2V0ID0gKGJhZGRyIC0gYWdwbWVtLT5ib3VuZCkgPj4gUEFHRV9TSElGVDsKIAkJcGFnZSA9IHZpcnRfdG9fcGFnZShfX3ZhKGFncG1lbS0+bWVtb3J5LT5tZW1vcnlbb2Zmc2V0XSkpOwogCQlnZXRfcGFnZShwYWdlKTsKIAotCQlEUk1fREVCVUcoImJhZGRyID0gMHglbHggcGFnZSA9IDB4JXAsIG9mZnNldCA9IDB4JWx4LCBjb3VudD0lZFxuIiwKLQkJCSAgYmFkZHIsIF9fdmEoYWdwbWVtLT5tZW1vcnktPm1lbW9yeVtvZmZzZXRdKSwgb2Zmc2V0LAotCQkJICBwYWdlX2NvdW50KHBhZ2UpKTsKKwkJRFJNX0RFQlVHCisJCSAgICAoImJhZGRyID0gMHglbHggcGFnZSA9IDB4JXAsIG9mZnNldCA9IDB4JWx4LCBjb3VudD0lZFxuIiwKKwkJICAgICBiYWRkciwgX192YShhZ3BtZW0tPm1lbW9yeS0+bWVtb3J5W29mZnNldF0pLCBvZmZzZXQsCisJCSAgICAgcGFnZV9jb3VudChwYWdlKSk7CiAKIAkJcmV0dXJuIHBhZ2U7Ci0gICAgICAgIH0KLXZtX25vcGFnZV9lcnJvcjoKLQlyZXR1cm4gTk9QQUdFX1NJR0JVUzsJCS8qIERpc2FsbG93IG1yZW1hcCAqLworCX0KKyAgICAgIHZtX25vcGFnZV9lcnJvcjoKKwlyZXR1cm4gTk9QQUdFX1NJR0JVUzsJLyogRGlzYWxsb3cgbXJlbWFwICovCiB9Ci0jZWxzZSAvKiBfX09TX0hBU19BR1AgKi8KKyNlbHNlCQkJCS8qIF9fT1NfSEFTX0FHUCAqLwogc3RhdGljIF9faW5saW5lX18gc3RydWN0IHBhZ2UgKmRybV9kb192bV9ub3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQkJCQkgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQorCQkJCQkJdW5zaWduZWQgbG9uZyBhZGRyZXNzKQogewogCXJldHVybiBOT1BBR0VfU0lHQlVTOwogfQotI2VuZGlmIC8qIF9fT1NfSEFTX0FHUCAqLworI2VuZGlmCQkJCS8qIF9fT1NfSEFTX0FHUCAqLwogCiAvKioKICAqIFxjIG5vcGFnZSBtZXRob2QgZm9yIHNoYXJlZCB2aXJ0dWFsIG1lbW9yeS4KQEAgLTEzMSwyNSArMTM1LDI3IEBACiAgKiBccGFyYW0gdm1hIHZpcnR1YWwgbWVtb3J5IGFyZWEuCiAgKiBccGFyYW0gYWRkcmVzcyBhY2Nlc3MgYWRkcmVzcy4KICAqIFxyZXR1cm4gcG9pbnRlciB0byB0aGUgcGFnZSBzdHJ1Y3R1cmUuCi0gKiAKKyAqCiAgKiBHZXQgdGhlIHRoZSBtYXBwaW5nLCBmaW5kIHRoZSByZWFsIHBoeXNpY2FsIHBhZ2UgdG8gbWFwLCBnZXQgdGhlIHBhZ2UsIGFuZAogICogcmV0dXJuIGl0LgogICovCiBzdGF0aWMgX19pbmxpbmVfXyBzdHJ1Y3QgcGFnZSAqZHJtX2RvX3ZtX3NobV9ub3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKKwkJCQkJCSAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7Ci0JZHJtX21hcF90CSAqbWFwCSA9IChkcm1fbWFwX3QgKil2bWEtPnZtX3ByaXZhdGVfZGF0YTsKLQl1bnNpZ25lZCBsb25nCSBvZmZzZXQ7Ci0JdW5zaWduZWQgbG9uZwkgaTsKLQlzdHJ1Y3QgcGFnZQkgKnBhZ2U7CisJZHJtX21hcF90ICptYXAgPSAoZHJtX21hcF90ICopIHZtYS0+dm1fcHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OworCXVuc2lnbmVkIGxvbmcgaTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAotCWlmIChhZGRyZXNzID4gdm1hLT52bV9lbmQpIHJldHVybiBOT1BBR0VfU0lHQlVTOyAvKiBEaXNhbGxvdyBtcmVtYXAgKi8KLQlpZiAoIW1hcCkgICAgCQkgICByZXR1cm4gTk9QQUdFX09PTTsgIC8qIE5vdGhpbmcgYWxsb2NhdGVkICovCisJaWYgKGFkZHJlc3MgPiB2bWEtPnZtX2VuZCkKKwkJcmV0dXJuIE5PUEFHRV9TSUdCVVM7CS8qIERpc2FsbG93IG1yZW1hcCAqLworCWlmICghbWFwKQorCQlyZXR1cm4gTk9QQUdFX09PTTsJLyogTm90aGluZyBhbGxvY2F0ZWQgKi8KIAotCW9mZnNldAkgPSBhZGRyZXNzIC0gdm1hLT52bV9zdGFydDsKKwlvZmZzZXQgPSBhZGRyZXNzIC0gdm1hLT52bV9zdGFydDsKIAlpID0gKHVuc2lnbmVkIGxvbmcpbWFwLT5oYW5kbGUgKyBvZmZzZXQ7Ci0JcGFnZSA9IChtYXAtPnR5cGUgPT0gX0RSTV9DT05TSVNURU5UKSA/IAotCQl2aXJ0X3RvX3BhZ2UoKHZvaWQgKilpKSA6IHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWkpOworCXBhZ2UgPSAobWFwLT50eXBlID09IF9EUk1fQ09OU0lTVEVOVCkgPworCSAgICB2aXJ0X3RvX3BhZ2UoKHZvaWQgKilpKSA6IHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWkpOwogCWlmICghcGFnZSkKIAkJcmV0dXJuIE5PUEFHRV9PT007CiAJZ2V0X3BhZ2UocGFnZSk7CkBAIC0xNTgsMTkgKzE2NCwxOCBAQAogCXJldHVybiBwYWdlOwogfQogCi0KIC8qKgogICogXGMgY2xvc2UgbWV0aG9kIGZvciBzaGFyZWQgdmlydHVhbCBtZW1vcnkuCi0gKiAKKyAqCiAgKiBccGFyYW0gdm1hIHZpcnR1YWwgbWVtb3J5IGFyZWEuCi0gKiAKKyAqCiAgKiBEZWxldGVzIG1hcCBpbmZvcm1hdGlvbiBpZiB3ZSBhcmUgdGhlIGxhc3QKICAqIHBlcnNvbiB0byBjbG9zZSBhIG1hcHBpbmcgYW5kIGl0J3Mgbm90IGluIHRoZSBnbG9iYWwgbWFwbGlzdC4KICAqLwogc3RhdGljIHZvaWQgZHJtX3ZtX3NobV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKLQlkcm1fZmlsZV90CSpwcml2CT0gdm1hLT52bV9maWxlLT5wcml2YXRlX2RhdGE7Ci0JZHJtX2RldmljZV90CSpkZXYJPSBwcml2LT5oZWFkLT5kZXY7CisJZHJtX2ZpbGVfdCAqcHJpdiA9IHZtYS0+dm1fZmlsZS0+cHJpdmF0ZV9kYXRhOworCWRybV9kZXZpY2VfdCAqZGV2ID0gcHJpdi0+aGVhZC0+ZGV2OwogCWRybV92bWFfZW50cnlfdCAqcHQsICpwcmV2LCAqbmV4dDsKIAlkcm1fbWFwX3QgKm1hcDsKIAlkcm1fbWFwX2xpc3RfdCAqcl9saXN0OwpAQCAtMTg2LDcgKzE5MSw4IEBACiAJZG93bigmZGV2LT5zdHJ1Y3Rfc2VtKTsKIAlmb3IgKHB0ID0gZGV2LT52bWFsaXN0LCBwcmV2ID0gTlVMTDsgcHQ7IHB0ID0gbmV4dCkgewogCQluZXh0ID0gcHQtPm5leHQ7Ci0JCWlmIChwdC0+dm1hLT52bV9wcml2YXRlX2RhdGEgPT0gbWFwKSBmb3VuZF9tYXBzKys7CisJCWlmIChwdC0+dm1hLT52bV9wcml2YXRlX2RhdGEgPT0gbWFwKQorCQkJZm91bmRfbWFwcysrOwogCQlpZiAocHQtPnZtYSA9PSB2bWEpIHsKIAkJCWlmIChwcmV2KSB7CiAJCQkJcHJldi0+bmV4dCA9IHB0LT5uZXh0OwpAQCAtMTk5LDggKzIwNSw3IEBACiAJCX0KIAl9CiAJLyogV2Ugd2VyZSB0aGUgb25seSBtYXAgdGhhdCB3YXMgZm91bmQgKi8KLQlpZihmb3VuZF9tYXBzID09IDEgJiYKLQkgICBtYXAtPmZsYWdzICYgX0RSTV9SRU1PVkFCTEUpIHsKKwlpZiAoZm91bmRfbWFwcyA9PSAxICYmIG1hcC0+ZmxhZ3MgJiBfRFJNX1JFTU9WQUJMRSkgewogCQkvKiBDaGVjayB0byBzZWUgaWYgd2UgYXJlIGluIHRoZSBtYXBsaXN0LCBpZiB3ZSBhcmUgbm90LCB0aGVuCiAJCSAqIHdlIGRlbGV0ZSB0aGlzIG1hcHBpbmdzIGluZm9ybWF0aW9uLgogCQkgKi8KQEAgLTIwOCwxMCArMjEzLDExIEBACiAJCWxpc3QgPSAmZGV2LT5tYXBsaXN0LT5oZWFkOwogCQlsaXN0X2Zvcl9lYWNoKGxpc3QsICZkZXYtPm1hcGxpc3QtPmhlYWQpIHsKIAkJCXJfbGlzdCA9IGxpc3RfZW50cnkobGlzdCwgZHJtX21hcF9saXN0X3QsIGhlYWQpOwotCQkJaWYgKHJfbGlzdC0+bWFwID09IG1hcCkgZm91bmRfbWFwcysrOworCQkJaWYgKHJfbGlzdC0+bWFwID09IG1hcCkKKwkJCQlmb3VuZF9tYXBzKys7CiAJCX0KIAotCQlpZighZm91bmRfbWFwcykgeworCQlpZiAoIWZvdW5kX21hcHMpIHsKIAkJCWRybV9kbWFfaGFuZGxlX3QgZG1haDsKIAogCQkJc3dpdGNoIChtYXAtPnR5cGUpIHsKQEAgLTI1MSwyNyArMjU3LDI5IEBACiAgKiBccGFyYW0gdm1hIHZpcnR1YWwgbWVtb3J5IGFyZWEuCiAgKiBccGFyYW0gYWRkcmVzcyBhY2Nlc3MgYWRkcmVzcy4KICAqIFxyZXR1cm4gcG9pbnRlciB0byB0aGUgcGFnZSBzdHJ1Y3R1cmUuCi0gKiAKKyAqCiAgKiBEZXRlcm1pbmUgdGhlIHBhZ2UgbnVtYmVyIGZyb20gdGhlIHBhZ2Ugb2Zmc2V0IGFuZCBnZXQgaXQgZnJvbSBkcm1fZGV2aWNlX2RtYTo6cGFnZWxpc3QuCiAgKi8KIHN0YXRpYyBfX2lubGluZV9fIHN0cnVjdCBwYWdlICpkcm1fZG9fdm1fZG1hX25vcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJCQkJCSAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQorCQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKLQlkcm1fZmlsZV90CSAqcHJpdgkgPSB2bWEtPnZtX2ZpbGUtPnByaXZhdGVfZGF0YTsKLQlkcm1fZGV2aWNlX3QJICpkZXYJID0gcHJpdi0+aGVhZC0+ZGV2OwotCWRybV9kZXZpY2VfZG1hX3QgKmRtYQkgPSBkZXYtPmRtYTsKLQl1bnNpZ25lZCBsb25nCSBvZmZzZXQ7Ci0JdW5zaWduZWQgbG9uZwkgcGFnZV9ucjsKLQlzdHJ1Y3QgcGFnZQkgKnBhZ2U7CisJZHJtX2ZpbGVfdCAqcHJpdiA9IHZtYS0+dm1fZmlsZS0+cHJpdmF0ZV9kYXRhOworCWRybV9kZXZpY2VfdCAqZGV2ID0gcHJpdi0+aGVhZC0+ZGV2OworCWRybV9kZXZpY2VfZG1hX3QgKmRtYSA9IGRldi0+ZG1hOworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OworCXVuc2lnbmVkIGxvbmcgcGFnZV9ucjsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAotCWlmICghZG1hKQkJICAgcmV0dXJuIE5PUEFHRV9TSUdCVVM7IC8qIEVycm9yICovCi0JaWYgKGFkZHJlc3MgPiB2bWEtPnZtX2VuZCkgcmV0dXJuIE5PUEFHRV9TSUdCVVM7IC8qIERpc2FsbG93IG1yZW1hcCAqLwotCWlmICghZG1hLT5wYWdlbGlzdCkJICAgcmV0dXJuIE5PUEFHRV9PT00gOyAvKiBOb3RoaW5nIGFsbG9jYXRlZCAqLworCWlmICghZG1hKQorCQlyZXR1cm4gTk9QQUdFX1NJR0JVUzsJLyogRXJyb3IgKi8KKwlpZiAoYWRkcmVzcyA+IHZtYS0+dm1fZW5kKQorCQlyZXR1cm4gTk9QQUdFX1NJR0JVUzsJLyogRGlzYWxsb3cgbXJlbWFwICovCisJaWYgKCFkbWEtPnBhZ2VsaXN0KQorCQlyZXR1cm4gTk9QQUdFX09PTTsJLyogTm90aGluZyBhbGxvY2F0ZWQgKi8KIAotCW9mZnNldAkgPSBhZGRyZXNzIC0gdm1hLT52bV9zdGFydDsgLyogdm1fW3BnXW9mZltzZXRdIHNob3VsZCBiZSAwICovCi0JcGFnZV9uciAgPSBvZmZzZXQgPj4gUEFHRV9TSElGVDsKLQlwYWdlID0gdmlydF90b19wYWdlKChkbWEtPnBhZ2VsaXN0W3BhZ2VfbnJdICsgCi0JCQkgICAgIChvZmZzZXQgJiAoflBBR0VfTUFTSykpKSk7CisJb2Zmc2V0ID0gYWRkcmVzcyAtIHZtYS0+dm1fc3RhcnQ7CS8qIHZtX1twZ11vZmZbc2V0XSBzaG91bGQgYmUgMCAqLworCXBhZ2VfbnIgPSBvZmZzZXQgPj4gUEFHRV9TSElGVDsKKwlwYWdlID0gdmlydF90b19wYWdlKChkbWEtPnBhZ2VsaXN0W3BhZ2VfbnJdICsgKG9mZnNldCAmICh+UEFHRV9NQVNLKSkpKTsKIAogCWdldF9wYWdlKHBhZ2UpOwogCkBAIC0yODUsMTMgKzI5MywxMyBAQAogICogXHBhcmFtIHZtYSB2aXJ0dWFsIG1lbW9yeSBhcmVhLgogICogXHBhcmFtIGFkZHJlc3MgYWNjZXNzIGFkZHJlc3MuCiAgKiBccmV0dXJuIHBvaW50ZXIgdG8gdGhlIHBhZ2Ugc3RydWN0dXJlLgotICogCisgKgogICogRGV0ZXJtaW5lIHRoZSBtYXAgb2Zmc2V0IGZyb20gdGhlIHBhZ2Ugb2Zmc2V0IGFuZCBnZXQgaXQgZnJvbSBkcm1fc2dfbWVtOjpwYWdlbGlzdC4KICAqLwogc3RhdGljIF9faW5saW5lX18gc3RydWN0IHBhZ2UgKmRybV9kb192bV9zZ19ub3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQkJCQkgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQorCQkJCQkJICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQogewotCWRybV9tYXBfdCAgICAgICAgKm1hcCAgICA9IChkcm1fbWFwX3QgKil2bWEtPnZtX3ByaXZhdGVfZGF0YTsKKwlkcm1fbWFwX3QgKm1hcCA9IChkcm1fbWFwX3QgKikgdm1hLT52bV9wcml2YXRlX2RhdGE7CiAJZHJtX2ZpbGVfdCAqcHJpdiA9IHZtYS0+dm1fZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWRybV9kZXZpY2VfdCAqZGV2ID0gcHJpdi0+aGVhZC0+ZGV2OwogCWRybV9zZ19tZW1fdCAqZW50cnkgPSBkZXYtPnNnOwpAQCAtMzAwLDEwICszMDgsMTIgQEAKIAl1bnNpZ25lZCBsb25nIHBhZ2Vfb2Zmc2V0OwogCXN0cnVjdCBwYWdlICpwYWdlOwogCi0JaWYgKCFlbnRyeSkgICAgICAgICAgICAgICAgcmV0dXJuIE5PUEFHRV9TSUdCVVM7IC8qIEVycm9yICovCi0JaWYgKGFkZHJlc3MgPiB2bWEtPnZtX2VuZCkgcmV0dXJuIE5PUEFHRV9TSUdCVVM7IC8qIERpc2FsbG93IG1yZW1hcCAqLwotCWlmICghZW50cnktPnBhZ2VsaXN0KSAgICAgIHJldHVybiBOT1BBR0VfT09NIDsgIC8qIE5vdGhpbmcgYWxsb2NhdGVkICovCi0KKwlpZiAoIWVudHJ5KQorCQlyZXR1cm4gTk9QQUdFX1NJR0JVUzsJLyogRXJyb3IgKi8KKwlpZiAoYWRkcmVzcyA+IHZtYS0+dm1fZW5kKQorCQlyZXR1cm4gTk9QQUdFX1NJR0JVUzsJLyogRGlzYWxsb3cgbXJlbWFwICovCisJaWYgKCFlbnRyeS0+cGFnZWxpc3QpCisJCXJldHVybiBOT1BBR0VfT09NOwkvKiBOb3RoaW5nIGFsbG9jYXRlZCAqLwogCiAJb2Zmc2V0ID0gYWRkcmVzcyAtIHZtYS0+dm1fc3RhcnQ7CiAJbWFwX29mZnNldCA9IG1hcC0+b2Zmc2V0IC0gKHVuc2lnbmVkIGxvbmcpZGV2LT5zZy0+dmlydHVhbDsKQEAgLTMxNCw3NiArMzI0LDc4IEBACiAJcmV0dXJuIHBhZ2U7CiB9CiAKLQogc3RhdGljIHN0cnVjdCBwYWdlICpkcm1fdm1fbm9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJCSAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKLQkJCQkgICBpbnQgKnR5cGUpIHsKLQlpZiAodHlwZSkgKnR5cGUgPSBWTV9GQVVMVF9NSU5PUjsKKwkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgaW50ICp0eXBlKQoreworCWlmICh0eXBlKQorCQkqdHlwZSA9IFZNX0ZBVUxUX01JTk9SOwogCXJldHVybiBkcm1fZG9fdm1fbm9wYWdlKHZtYSwgYWRkcmVzcyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqZHJtX3ZtX3NobV9ub3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKLQkJCQkgICAgICAgaW50ICp0eXBlKSB7Ci0JaWYgKHR5cGUpICp0eXBlID0gVk1fRkFVTFRfTUlOT1I7CisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBpbnQgKnR5cGUpCit7CisJaWYgKHR5cGUpCisJCSp0eXBlID0gVk1fRkFVTFRfTUlOT1I7CiAJcmV0dXJuIGRybV9kb192bV9zaG1fbm9wYWdlKHZtYSwgYWRkcmVzcyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqZHJtX3ZtX2RtYV9ub3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKLQkJCQkgICAgICAgaW50ICp0eXBlKSB7Ci0JaWYgKHR5cGUpICp0eXBlID0gVk1fRkFVTFRfTUlOT1I7CisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBpbnQgKnR5cGUpCit7CisJaWYgKHR5cGUpCisJCSp0eXBlID0gVk1fRkFVTFRfTUlOT1I7CiAJcmV0dXJuIGRybV9kb192bV9kbWFfbm9wYWdlKHZtYSwgYWRkcmVzcyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqZHJtX3ZtX3NnX25vcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJCQkgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCi0JCQkJICAgICAgaW50ICp0eXBlKSB7Ci0JaWYgKHR5cGUpICp0eXBlID0gVk1fRkFVTFRfTUlOT1I7CisJCQkJICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGludCAqdHlwZSkKK3sKKwlpZiAodHlwZSkKKwkJKnR5cGUgPSBWTV9GQVVMVF9NSU5PUjsKIAlyZXR1cm4gZHJtX2RvX3ZtX3NnX25vcGFnZSh2bWEsIGFkZHJlc3MpOwogfQogCiAvKiogQUdQIHZpcnR1YWwgbWVtb3J5IG9wZXJhdGlvbnMgKi8KLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgICBkcm1fdm1fb3BzID0geworc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBkcm1fdm1fb3BzID0gewogCS5ub3BhZ2UgPSBkcm1fdm1fbm9wYWdlLAotCS5vcGVuCT0gZHJtX3ZtX29wZW4sCi0JLmNsb3NlCT0gZHJtX3ZtX2Nsb3NlLAorCS5vcGVuID0gZHJtX3ZtX29wZW4sCisJLmNsb3NlID0gZHJtX3ZtX2Nsb3NlLAogfTsKIAogLyoqIFNoYXJlZCB2aXJ0dWFsIG1lbW9yeSBvcGVyYXRpb25zICovCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0ICAgZHJtX3ZtX3NobV9vcHMgPSB7CitzdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGRybV92bV9zaG1fb3BzID0gewogCS5ub3BhZ2UgPSBkcm1fdm1fc2htX25vcGFnZSwKLQkub3Blbgk9IGRybV92bV9vcGVuLAotCS5jbG9zZQk9IGRybV92bV9zaG1fY2xvc2UsCisJLm9wZW4gPSBkcm1fdm1fb3BlbiwKKwkuY2xvc2UgPSBkcm1fdm1fc2htX2Nsb3NlLAogfTsKIAogLyoqIERNQSB2aXJ0dWFsIG1lbW9yeSBvcGVyYXRpb25zICovCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0ICAgZHJtX3ZtX2RtYV9vcHMgPSB7CitzdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGRybV92bV9kbWFfb3BzID0gewogCS5ub3BhZ2UgPSBkcm1fdm1fZG1hX25vcGFnZSwKLQkub3Blbgk9IGRybV92bV9vcGVuLAotCS5jbG9zZQk9IGRybV92bV9jbG9zZSwKKwkub3BlbiA9IGRybV92bV9vcGVuLAorCS5jbG9zZSA9IGRybV92bV9jbG9zZSwKIH07CiAKIC8qKiBTY2F0dGVyLWdhdGhlciB2aXJ0dWFsIG1lbW9yeSBvcGVyYXRpb25zICovCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0ICAgZHJtX3ZtX3NnX29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZHJtX3ZtX3NnX29wcyA9IHsKIAkubm9wYWdlID0gZHJtX3ZtX3NnX25vcGFnZSwKLQkub3BlbiAgID0gZHJtX3ZtX29wZW4sCi0JLmNsb3NlICA9IGRybV92bV9jbG9zZSwKKwkub3BlbiA9IGRybV92bV9vcGVuLAorCS5jbG9zZSA9IGRybV92bV9jbG9zZSwKIH07CiAKLQogLyoqCiAgKiBcYyBvcGVuIG1ldGhvZCBmb3Igc2hhcmVkIHZpcnR1YWwgbWVtb3J5LgotICogCisgKgogICogXHBhcmFtIHZtYSB2aXJ0dWFsIG1lbW9yeSBhcmVhLgotICogCisgKgogICogQ3JlYXRlIGEgbmV3IGRybV92bWFfZW50cnkgc3RydWN0dXJlIGFzIHRoZSBccCB2bWEgcHJpdmF0ZSBkYXRhIGVudHJ5IGFuZAogICogYWRkIGl0IHRvIGRybV9kZXZpY2U6OnZtYWxpc3QuCiAgKi8KIHN0YXRpYyB2b2lkIGRybV92bV9vcGVuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewotCWRybV9maWxlX3QJKnByaXYJPSB2bWEtPnZtX2ZpbGUtPnByaXZhdGVfZGF0YTsKLQlkcm1fZGV2aWNlX3QJKmRldgk9IHByaXYtPmhlYWQtPmRldjsKKwlkcm1fZmlsZV90ICpwcml2ID0gdm1hLT52bV9maWxlLT5wcml2YXRlX2RhdGE7CisJZHJtX2RldmljZV90ICpkZXYgPSBwcml2LT5oZWFkLT5kZXY7CiAJZHJtX3ZtYV9lbnRyeV90ICp2bWFfZW50cnk7CiAKIAlEUk1fREVCVUcoIjB4JTA4bHgsMHglMDhseFxuIiwKQEAgLTM5MywyNiArNDA1LDI2IEBACiAJdm1hX2VudHJ5ID0gZHJtX2FsbG9jKHNpemVvZigqdm1hX2VudHJ5KSwgRFJNX01FTV9WTUFTKTsKIAlpZiAodm1hX2VudHJ5KSB7CiAJCWRvd24oJmRldi0+c3RydWN0X3NlbSk7Ci0JCXZtYV9lbnRyeS0+dm1hCT0gdm1hOworCQl2bWFfZW50cnktPnZtYSA9IHZtYTsKIAkJdm1hX2VudHJ5LT5uZXh0ID0gZGV2LT52bWFsaXN0OwotCQl2bWFfZW50cnktPnBpZAk9IGN1cnJlbnQtPnBpZDsKLQkJZGV2LT52bWFsaXN0CT0gdm1hX2VudHJ5OworCQl2bWFfZW50cnktPnBpZCA9IGN1cnJlbnQtPnBpZDsKKwkJZGV2LT52bWFsaXN0ID0gdm1hX2VudHJ5OwogCQl1cCgmZGV2LT5zdHJ1Y3Rfc2VtKTsKIAl9CiB9CiAKIC8qKgogICogXGMgY2xvc2UgbWV0aG9kIGZvciBhbGwgdmlydHVhbCBtZW1vcnkgdHlwZXMuCi0gKiAKKyAqCiAgKiBccGFyYW0gdm1hIHZpcnR1YWwgbWVtb3J5IGFyZWEuCi0gKiAKKyAqCiAgKiBTZWFyY2ggdGhlIFxwIHZtYSBwcml2YXRlIGRhdGEgZW50cnkgaW4gZHJtX2RldmljZTo6dm1hbGlzdCwgdW5saW5rIGl0LCBhbmQKICAqIGZyZWUgaXQuCiAgKi8KIHN0YXRpYyB2b2lkIGRybV92bV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKLQlkcm1fZmlsZV90CSpwcml2CT0gdm1hLT52bV9maWxlLT5wcml2YXRlX2RhdGE7Ci0JZHJtX2RldmljZV90CSpkZXYJPSBwcml2LT5oZWFkLT5kZXY7CisJZHJtX2ZpbGVfdCAqcHJpdiA9IHZtYS0+dm1fZmlsZS0+cHJpdmF0ZV9kYXRhOworCWRybV9kZXZpY2VfdCAqZGV2ID0gcHJpdi0+aGVhZC0+ZGV2OwogCWRybV92bWFfZW50cnlfdCAqcHQsICpwcmV2OwogCiAJRFJNX0RFQlVHKCIweCUwOGx4LDB4JTA4bHhcbiIsCkBAIC00NDAsNDMgKzQ1Miw0NCBAQAogICogXHBhcmFtIGZpbHAgZmlsZSBwb2ludGVyLgogICogXHBhcmFtIHZtYSB2aXJ0dWFsIG1lbW9yeSBhcmVhLgogICogXHJldHVybiB6ZXJvIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBudW1iZXIgb24gZmFpbHVyZS4KLSAqIAorICoKICAqIFNldHMgdGhlIHZpcnR1YWwgbWVtb3J5IGFyZWEgb3BlcmF0aW9ucyBzdHJ1Y3R1cmUgdG8gdm1fZG1hX29wcywgdGhlIGZpbGUKICAqIHBvaW50ZXIsIGFuZCBjYWxscyB2bV9vcGVuKCkuCiAgKi8KIHN0YXRpYyBpbnQgZHJtX21tYXBfZG1hKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKLQlkcm1fZmlsZV90CSAqcHJpdgkgPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0JZHJtX2RldmljZV90CSAqZGV2OworCWRybV9maWxlX3QgKnByaXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJZHJtX2RldmljZV90ICpkZXY7CiAJZHJtX2RldmljZV9kbWFfdCAqZG1hOwotCXVuc2lnbmVkIGxvbmcJIGxlbmd0aAkgPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBsZW5ndGggPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQ7CiAKIAlsb2NrX2tlcm5lbCgpOwotCWRldgkgPSBwcml2LT5oZWFkLT5kZXY7Ci0JZG1hCSA9IGRldi0+ZG1hOworCWRldiA9IHByaXYtPmhlYWQtPmRldjsKKwlkbWEgPSBkZXYtPmRtYTsKIAlEUk1fREVCVUcoInN0YXJ0ID0gMHglbHgsIGVuZCA9IDB4JWx4LCBvZmZzZXQgPSAweCVseFxuIiwKIAkJICB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCwgVk1fT0ZGU0VUKHZtYSkpOwogCi0JCQkJLyogTGVuZ3RoIG11c3QgbWF0Y2ggZXhhY3QgcGFnZSBjb3VudCAqLworCS8qIExlbmd0aCBtdXN0IG1hdGNoIGV4YWN0IHBhZ2UgY291bnQgKi8KIAlpZiAoIWRtYSB8fCAobGVuZ3RoID4+IFBBR0VfU0hJRlQpICE9IGRtYS0+cGFnZV9jb3VudCkgewogCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAl1bmxvY2tfa2VybmVsKCk7CiAKLQl2bWEtPnZtX29wcyAgID0gJmRybV92bV9kbWFfb3BzOworCXZtYS0+dm1fb3BzID0gJmRybV92bV9kbWFfb3BzOwogCi0Jdm1hLT52bV9mbGFncyB8PSBWTV9SRVNFUlZFRDsgLyogRG9uJ3Qgc3dhcCAqLworCXZtYS0+dm1fZmxhZ3MgfD0gVk1fUkVTRVJWRUQ7CS8qIERvbid0IHN3YXAgKi8KIAotCXZtYS0+dm1fZmlsZSAgPQkgZmlscDsJLyogTmVlZGVkIGZvciBkcm1fdm1fb3BlbigpICovCisJdm1hLT52bV9maWxlID0gZmlscDsJLyogTmVlZGVkIGZvciBkcm1fdm1fb3BlbigpICovCiAJZHJtX3ZtX29wZW4odm1hKTsKIAlyZXR1cm4gMDsKIH0KIAotdW5zaWduZWQgbG9uZyBkcm1fY29yZV9nZXRfbWFwX29mcyhkcm1fbWFwX3QgKm1hcCkKK3Vuc2lnbmVkIGxvbmcgZHJtX2NvcmVfZ2V0X21hcF9vZnMoZHJtX21hcF90ICogbWFwKQogewogCXJldHVybiBtYXAtPm9mZnNldDsKIH0KKwogRVhQT1JUX1NZTUJPTChkcm1fY29yZV9nZXRfbWFwX29mcyk7CiAKIHVuc2lnbmVkIGxvbmcgZHJtX2NvcmVfZ2V0X3JlZ19vZnMoc3RydWN0IGRybV9kZXZpY2UgKmRldikKQEAgLTQ4Nyw2ICs1MDAsNyBAQAogCXJldHVybiAwOwogI2VuZGlmCiB9CisKIEVYUE9SVF9TWU1CT0woZHJtX2NvcmVfZ2V0X3JlZ19vZnMpOwogCiAvKioKQEAgLTQ5NSw3ICs1MDksNyBAQAogICogXHBhcmFtIGZpbHAgZmlsZSBwb2ludGVyLgogICogXHBhcmFtIHZtYSB2aXJ0dWFsIG1lbW9yeSBhcmVhLgogICogXHJldHVybiB6ZXJvIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBudW1iZXIgb24gZmFpbHVyZS4KLSAqIAorICoKICAqIElmIHRoZSB2aXJ0dWFsIG1lbW9yeSBhcmVhIGhhcyBubyBvZmZzZXQgYXNzb2NpYXRlZCB3aXRoIGl0IHRoZW4gaXQncyBhIERNQQogICogYXJlYSwgc28gY2FsbHMgbW1hcF9kbWEoKS4gT3RoZXJ3aXNlIHNlYXJjaGVzIHRoZSBtYXAgaW4gZHJtX2RldmljZTo6bWFwbGlzdCwKICAqIGNoZWNrcyB0aGF0IHRoZSByZXN0cmljdGVkIGZsYWcgaXMgbm90IHNldCwgc2V0cyB0aGUgdmlydHVhbCBtZW1vcnkgb3BlcmF0aW9ucwpAQCAtNTA0LDE3ICs1MTgsMTggQEAKICAqLwogaW50IGRybV9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKLQlkcm1fZmlsZV90CSpwcml2CT0gZmlscC0+cHJpdmF0ZV9kYXRhOwotCWRybV9kZXZpY2VfdAkqZGV2CT0gcHJpdi0+aGVhZC0+ZGV2OwotCWRybV9tYXBfdAkqbWFwCT0gTlVMTDsKLQlkcm1fbWFwX2xpc3RfdCAgKnJfbGlzdDsKLQl1bnNpZ25lZCBsb25nICAgb2Zmc2V0ICA9IDA7CisJZHJtX2ZpbGVfdCAqcHJpdiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlkcm1fZGV2aWNlX3QgKmRldiA9IHByaXYtPmhlYWQtPmRldjsKKwlkcm1fbWFwX3QgKm1hcCA9IE5VTEw7CisJZHJtX21hcF9saXN0X3QgKnJfbGlzdDsKKwl1bnNpZ25lZCBsb25nIG9mZnNldCA9IDA7CiAJc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKIAogCURSTV9ERUJVRygic3RhcnQgPSAweCVseCwgZW5kID0gMHglbHgsIG9mZnNldCA9IDB4JWx4XG4iLAogCQkgIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fZW5kLCBWTV9PRkZTRVQodm1hKSk7CiAKLQlpZiAoICFwcml2LT5hdXRoZW50aWNhdGVkICkgcmV0dXJuIC1FQUNDRVM7CisJaWYgKCFwcml2LT5hdXRoZW50aWNhdGVkKQorCQlyZXR1cm4gLUVBQ0NFUzsKIAogCS8qIFdlIGNoZWNrIGZvciAiZG1hIi4gT24gQXBwbGUncyBVbmlOb3J0aCwgaXQncyB2YWxpZCB0byBoYXZlCiAJICogdGhlIEFHUCBtYXBwZWQgYXQgcGh5c2ljYWwgYWRkcmVzcyAwCkBAIC01MjIsNjEgKzUzNyw2NiBAQAogCSAqLwogCWlmICghVk1fT0ZGU0VUKHZtYSkKICNpZiBfX09TX0hBU19BR1AKLQkgICAgJiYgKCFkZXYtPmFncCB8fCBkZXYtPmFncC0+YWdwX2luZm8uZGV2aWNlLT52ZW5kb3IgIT0gUENJX1ZFTkRPUl9JRF9BUFBMRSkKKwkgICAgJiYgKCFkZXYtPmFncAorCQl8fCBkZXYtPmFncC0+YWdwX2luZm8uZGV2aWNlLT52ZW5kb3IgIT0gUENJX1ZFTkRPUl9JRF9BUFBMRSkKICNlbmRpZgogCSAgICApCiAJCXJldHVybiBkcm1fbW1hcF9kbWEoZmlscCwgdm1hKTsKIAotCQkJCS8qIEEgc2VxdWVudGlhbCBzZWFyY2ggb2YgYSBsaW5rZWQgbGlzdCBpcwotCQkJCSAgIGZpbmUgaGVyZSBiZWNhdXNlOiAxKSB0aGVyZSB3aWxsIG9ubHkgYmUKLQkJCQkgICBhYm91dCA1LTEwIGVudHJpZXMgaW4gdGhlIGxpc3QgYW5kLCAyKSBhCi0JCQkJICAgRFJJIGNsaWVudCBvbmx5IGhhcyB0byBkbyB0aGlzIG1hcHBpbmcKLQkJCQkgICBvbmNlLCBzbyBpdCBkb2Vzbid0IGhhdmUgdG8gYmUgb3B0aW1pemVkCi0JCQkJICAgZm9yIHBlcmZvcm1hbmNlLCBldmVuIGlmIHRoZSBsaXN0IHdhcyBhCi0JCQkJICAgYml0IGxvbmdlci4gKi8KKwkvKiBBIHNlcXVlbnRpYWwgc2VhcmNoIG9mIGEgbGlua2VkIGxpc3QgaXMKKwkgICBmaW5lIGhlcmUgYmVjYXVzZTogMSkgdGhlcmUgd2lsbCBvbmx5IGJlCisJICAgYWJvdXQgNS0xMCBlbnRyaWVzIGluIHRoZSBsaXN0IGFuZCwgMikgYQorCSAgIERSSSBjbGllbnQgb25seSBoYXMgdG8gZG8gdGhpcyBtYXBwaW5nCisJICAgb25jZSwgc28gaXQgZG9lc24ndCBoYXZlIHRvIGJlIG9wdGltaXplZAorCSAgIGZvciBwZXJmb3JtYW5jZSwgZXZlbiBpZiB0aGUgbGlzdCB3YXMgYQorCSAgIGJpdCBsb25nZXIuICovCiAJbGlzdF9mb3JfZWFjaChsaXN0LCAmZGV2LT5tYXBsaXN0LT5oZWFkKSB7CiAKIAkJcl9saXN0ID0gbGlzdF9lbnRyeShsaXN0LCBkcm1fbWFwX2xpc3RfdCwgaGVhZCk7CiAJCW1hcCA9IHJfbGlzdC0+bWFwOwotCQlpZiAoIW1hcCkgY29udGludWU7CisJCWlmICghbWFwKQorCQkJY29udGludWU7CiAJCWlmIChyX2xpc3QtPnVzZXJfdG9rZW4gPT0gVk1fT0ZGU0VUKHZtYSkpCiAJCQlicmVhazsKIAl9CiAKLQlpZiAoIW1hcCB8fCAoKG1hcC0+ZmxhZ3MmX0RSTV9SRVNUUklDVEVEKSAmJiAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkpCisJaWYgKCFtYXAgfHwgKChtYXAtPmZsYWdzICYgX0RSTV9SRVNUUklDVEVEKSAmJiAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkpCiAJCXJldHVybiAtRVBFUk07CiAKLQkJCQkvKiBDaGVjayBmb3IgdmFsaWQgc2l6ZS4gKi8KLQlpZiAobWFwLT5zaXplICE9IHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCkgcmV0dXJuIC1FSU5WQUw7CisJLyogQ2hlY2sgZm9yIHZhbGlkIHNpemUuICovCisJaWYgKG1hcC0+c2l6ZSAhPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQpCisJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pICYmIChtYXAtPmZsYWdzICYgX0RSTV9SRUFEX09OTFkpKSB7CiAJCXZtYS0+dm1fZmxhZ3MgJj0gfihWTV9XUklURSB8IFZNX01BWVdSSVRFKTsKICNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCiAJCXBncHJvdF92YWwodm1hLT52bV9wYWdlX3Byb3QpICY9IH5fUEFHRV9SVzsKICNlbHNlCi0JCQkJLyogWWUgZ2FkcyB0aGlzIGlzIHVnbHkuICBXaXRoIG1vcmUgdGhvdWdodAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZSBjb3VsZCBtb3ZlIHRoaXMgdXAgaGlnaGVyIGFuZCB1c2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHByb3RlY3Rpb25fbWFwJyBpbnN0ZWFkLiAgKi8KLQkJdm1hLT52bV9wYWdlX3Byb3QgPSBfX3BncHJvdChwdGVfdmFsKHB0ZV93cnByb3RlY3QoCi0JCQlfX3B0ZShwZ3Byb3RfdmFsKHZtYS0+dm1fcGFnZV9wcm90KSkpKSk7CisJCS8qIFllIGdhZHMgdGhpcyBpcyB1Z2x5LiAgV2l0aCBtb3JlIHRob3VnaHQKKwkJICAgd2UgY291bGQgbW92ZSB0aGlzIHVwIGhpZ2hlciBhbmQgdXNlCisJCSAgIGBwcm90ZWN0aW9uX21hcCcgaW5zdGVhZC4gICovCisJCXZtYS0+dm1fcGFnZV9wcm90ID0KKwkJICAgIF9fcGdwcm90KHB0ZV92YWwKKwkJCSAgICAgKHB0ZV93cnByb3RlY3QKKwkJCSAgICAgIChfX3B0ZShwZ3Byb3RfdmFsKHZtYS0+dm1fcGFnZV9wcm90KSkpKSk7CiAjZW5kaWYKIAl9CiAKIAlzd2l0Y2ggKG1hcC0+dHlwZSkgewotICAgICAgICBjYXNlIF9EUk1fQUdQOgotCSAgaWYgKGRybV9jb3JlX2hhc19BR1AoZGV2KSAmJiBkZXYtPmFncC0+Y2FudF91c2VfYXBlcnR1cmUpIHsKLSAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAqIE9uIHNvbWUgcGxhdGZvcm1zIHdlIGNhbid0IHRhbGsgdG8gYnVzIGRtYSBhZGRyZXNzIGZyb20gdGhlIENQVSwgc28gZm9yCi0gICAgICAgICAgICAgICAgICogbWVtb3J5IG9mIHR5cGUgRFJNX0FHUCwgd2UnbGwgZGVhbCB3aXRoIHNvcnRpbmcgb3V0IHRoZSByZWFsIHBoeXNpY2FsCi0gICAgICAgICAgICAgICAgICogcGFnZXMgYW5kIG1hcHBpbmdzIGluIG5vcGFnZSgpCi0gICAgICAgICAgICAgICAgICovCisJY2FzZSBfRFJNX0FHUDoKKwkJaWYgKGRybV9jb3JlX2hhc19BR1AoZGV2KSAmJiBkZXYtPmFncC0+Y2FudF91c2VfYXBlcnR1cmUpIHsKKwkJCS8qCisJCQkgKiBPbiBzb21lIHBsYXRmb3JtcyB3ZSBjYW4ndCB0YWxrIHRvIGJ1cyBkbWEgYWRkcmVzcyBmcm9tIHRoZSBDUFUsIHNvIGZvcgorCQkJICogbWVtb3J5IG9mIHR5cGUgRFJNX0FHUCwgd2UnbGwgZGVhbCB3aXRoIHNvcnRpbmcgb3V0IHRoZSByZWFsIHBoeXNpY2FsCisJCQkgKiBwYWdlcyBhbmQgbWFwcGluZ3MgaW4gbm9wYWdlKCkKKwkJCSAqLwogI2lmIGRlZmluZWQoX19wb3dlcnBjX18pCi0JCXBncHJvdF92YWwodm1hLT52bV9wYWdlX3Byb3QpIHw9IF9QQUdFX05PX0NBQ0hFOworCQkJcGdwcm90X3ZhbCh2bWEtPnZtX3BhZ2VfcHJvdCkgfD0gX1BBR0VfTk9fQ0FDSEU7CiAjZW5kaWYKLSAgICAgICAgICAgICAgICB2bWEtPnZtX29wcyA9ICZkcm1fdm1fb3BzOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCSAgfQotICAgICAgICAgICAgICAgIC8qIGZhbGwgdGhyb3VnaCB0byBfRFJNX0ZSQU1FX0JVRkZFUi4uLiAqLyAgICAgICAgCisJCQl2bWEtPnZtX29wcyA9ICZkcm1fdm1fb3BzOworCQkJYnJlYWs7CisJCX0KKwkJLyogZmFsbCB0aHJvdWdoIHRvIF9EUk1fRlJBTUVfQlVGRkVSLi4uICovCiAJY2FzZSBfRFJNX0ZSQU1FX0JVRkZFUjoKIAljYXNlIF9EUk1fUkVHSVNURVJTOgogI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKQEAgLTU5MSwyNyArNjExLDI1IEBACiAjZW5kaWYKIAkJdm1hLT52bV9mbGFncyB8PSBWTV9JTzsJLyogbm90IGluIGNvcmUgZHVtcCAqLwogI2lmIGRlZmluZWQoX19pYTY0X18pCi0JCWlmIChlZmlfcmFuZ2VfaXNfd2Modm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQgLQotCQkJCSAgICB2bWEtPnZtX3N0YXJ0KSkKKwkJaWYgKGVmaV9yYW5nZV9pc193Yyh2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQpKQogCQkJdm1hLT52bV9wYWdlX3Byb3QgPQotCQkJCXBncHJvdF93cml0ZWNvbWJpbmUodm1hLT52bV9wYWdlX3Byb3QpOworCQkJICAgIHBncHJvdF93cml0ZWNvbWJpbmUodm1hLT52bV9wYWdlX3Byb3QpOwogCQllbHNlCi0JCQl2bWEtPnZtX3BhZ2VfcHJvdCA9Ci0JCQkJcGdwcm90X25vbmNhY2hlZCh2bWEtPnZtX3BhZ2VfcHJvdCk7CisJCQl2bWEtPnZtX3BhZ2VfcHJvdCA9IHBncHJvdF9ub25jYWNoZWQodm1hLT52bV9wYWdlX3Byb3QpOwogI2VuZGlmCiAJCW9mZnNldCA9IGRldi0+ZHJpdmVyLT5nZXRfcmVnX29mcyhkZXYpOwogI2lmZGVmIF9fc3BhcmNfXwogCQlpZiAoaW9fcmVtYXBfcGZuX3JhbmdlKERSTV9SUFJfQVJHKHZtYSkgdm1hLT52bV9zdGFydCwKLQkJCQkJKG1hcC0+b2Zmc2V0ICsgb2Zmc2V0KSA+PiBQQUdFX1NISUZULAotCQkJCQl2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQsCi0JCQkJCXZtYS0+dm1fcGFnZV9wcm90KSkKKwkJCQkgICAgICAgKG1hcC0+b2Zmc2V0ICsgb2Zmc2V0KSA+PiBQQUdFX1NISUZULAorCQkJCSAgICAgICB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQsCisJCQkJICAgICAgIHZtYS0+dm1fcGFnZV9wcm90KSkKICNlbHNlCiAJCWlmIChpb19yZW1hcF9wZm5fcmFuZ2Uodm1hLCB2bWEtPnZtX3N0YXJ0LAotCQkJCSAgICAgKG1hcC0+b2Zmc2V0ICsgb2Zmc2V0KSA+PiBQQUdFX1NISUZULAotCQkJCSAgICAgdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0LAotCQkJCSAgICAgdm1hLT52bV9wYWdlX3Byb3QpKQorCQkJCSAgICAgICAobWFwLT5vZmZzZXQgKyBvZmZzZXQpID4+IFBBR0VfU0hJRlQsCisJCQkJICAgICAgIHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCwKKwkJCQkgICAgICAgdm1hLT52bV9wYWdlX3Byb3QpKQogI2VuZGlmCi0JCQkJcmV0dXJuIC1FQUdBSU47CisJCQlyZXR1cm4gLUVBR0FJTjsKIAkJRFJNX0RFQlVHKCIgICBUeXBlID0gJWQ7IHN0YXJ0ID0gMHglbHgsIGVuZCA9IDB4JWx4LCIKIAkJCSAgIiBvZmZzZXQgPSAweCVseFxuIiwKIAkJCSAgbWFwLT50eXBlLApAQCAtNjI0LDIyICs2NDIsMjMgQEAKIAkJICogYWxsb2NhdGUgaW4gYSBkaWZmZXJlbnQgd2F5ICovCiAJCXZtYS0+dm1fb3BzID0gJmRybV92bV9zaG1fb3BzOwogCQl2bWEtPnZtX3ByaXZhdGVfZGF0YSA9ICh2b2lkICopbWFwOwotCQkJCS8qIERvbid0IGxldCB0aGlzIGFyZWEgc3dhcC4gIENoYW5nZSB3aGVuCi0JCQkJICAgRFJNX0tFUk5FTCBhZHZpc29yeSBpcyBzdXBwb3J0ZWQuICovCisJCS8qIERvbid0IGxldCB0aGlzIGFyZWEgc3dhcC4gIENoYW5nZSB3aGVuCisJCSAgIERSTV9LRVJORUwgYWR2aXNvcnkgaXMgc3VwcG9ydGVkLiAqLwogCQl2bWEtPnZtX2ZsYWdzIHw9IFZNX1JFU0VSVkVEOwogCQlicmVhazsKIAljYXNlIF9EUk1fU0NBVFRFUl9HQVRIRVI6CiAJCXZtYS0+dm1fb3BzID0gJmRybV92bV9zZ19vcHM7CiAJCXZtYS0+dm1fcHJpdmF0ZV9kYXRhID0gKHZvaWQgKiltYXA7CiAJCXZtYS0+dm1fZmxhZ3MgfD0gVk1fUkVTRVJWRUQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwkvKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uICovCiAJfQotCXZtYS0+dm1fZmxhZ3MgfD0gVk1fUkVTRVJWRUQ7IC8qIERvbid0IHN3YXAgKi8KKwl2bWEtPnZtX2ZsYWdzIHw9IFZNX1JFU0VSVkVEOwkvKiBEb24ndCBzd2FwICovCiAKLQl2bWEtPnZtX2ZpbGUgID0JIGZpbHA7CS8qIE5lZWRlZCBmb3IgZHJtX3ZtX29wZW4oKSAqLworCXZtYS0+dm1fZmlsZSA9IGZpbHA7CS8qIE5lZWRlZCBmb3IgZHJtX3ZtX29wZW4oKSAqLwogCWRybV92bV9vcGVuKHZtYSk7CiAJcmV0dXJuIDA7CiB9CisKIEVYUE9SVF9TWU1CT0woZHJtX21tYXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9mZmJfY29udGV4dC5jIGIvZHJpdmVycy9jaGFyL2RybS9mZmJfY29udGV4dC5jCmluZGV4IGY1MTgxMjAuLjhhNmNjMjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vZmZiX2NvbnRleHQuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL2ZmYl9jb250ZXh0LmMKQEAgLTE1LDggKzE1LDcgQEAKIAogI2luY2x1ZGUgImZmYl9kcnYuaCIKIAotc3RhdGljIGludCBEUk0oYWxsb2NfcXVldWUpKGRybV9kZXZpY2VfdCAqZGV2LCBpbnQgaXNfMmRfb25seSkKLXsKK3N0YXRpYyBpbnQgRFJNKGFsbG9jX3F1ZXVlKSAoZHJtX2RldmljZV90ICogZGV2LCBpbnQgaXNfMmRfb25seSkgewogCWZmYl9kZXZfcHJpdl90ICpmcHJpdiA9IChmZmJfZGV2X3ByaXZfdCAqKSBkZXYtPmRldl9wcml2YXRlOwogCWludCBpOwogCkBAIC0zNyw3ICszNiw3IEBACiAJcmV0dXJuIGkgKyAxOwogfQogCi1zdGF0aWMgdm9pZCBmZmJfc2F2ZV9jb250ZXh0KGZmYl9kZXZfcHJpdl90ICpmcHJpdiwgaW50IGlkeCkKK3N0YXRpYyB2b2lkIGZmYl9zYXZlX2NvbnRleHQoZmZiX2Rldl9wcml2X3QgKiBmcHJpdiwgaW50IGlkeCkKIHsKIAlmZmJfZmJjUHRyIGZmYiA9IGZwcml2LT5yZWdzOwogCXN0cnVjdCBmZmJfaHdfY29udGV4dCAqY3R4OwpAQCAtOTQsMzYgKzkzLDM2IEBACiAKIAkvKiBDYXB0dXJlIHJlbmRlcmluZyBhdHRyaWJ1dGVzLiAqLwogCi0JY3R4LT5wcGMgPSB1cGFfcmVhZGwoJmZmYi0+cHBjKTsJCS8qIFBpeGVsIFByb2Nlc3NvciBDb250cm9sICovCi0JY3R4LT53aWQgPSB1cGFfcmVhZGwoJmZmYi0+d2lkKTsJCS8qIEN1cnJlbnQgV0lEICovCi0JY3R4LT5mZyA9IHVwYV9yZWFkbCgmZmZiLT5mZyk7CQkJLyogQ29uc3RhbnQgRkcgY29sb3IgKi8KLQljdHgtPmJnID0gdXBhX3JlYWRsKCZmZmItPmJnKTsJCQkvKiBDb25zdGFudCBCRyBjb2xvciAqLwotCWN0eC0+Y29uc3R5ID0gdXBhX3JlYWRsKCZmZmItPmNvbnN0eSk7CQkvKiBDb25zdGFudCBZICovCi0JY3R4LT5jb25zdHogPSB1cGFfcmVhZGwoJmZmYi0+Y29uc3R6KTsJCS8qIENvbnN0YW50IFogKi8KLQljdHgtPnhjbGlwID0gdXBhX3JlYWRsKCZmZmItPnhjbGlwKTsJCS8qIFggcGxhbmUgY2xpcCAqLwotCWN0eC0+ZGNzcyA9IHVwYV9yZWFkbCgmZmZiLT5kY3NzKTsJCS8qIERlcHRoIEN1ZSBTY2FsZSBTbG9wZSAqLworCWN0eC0+cHBjID0gdXBhX3JlYWRsKCZmZmItPnBwYyk7CS8qIFBpeGVsIFByb2Nlc3NvciBDb250cm9sICovCisJY3R4LT53aWQgPSB1cGFfcmVhZGwoJmZmYi0+d2lkKTsJLyogQ3VycmVudCBXSUQgKi8KKwljdHgtPmZnID0gdXBhX3JlYWRsKCZmZmItPmZnKTsJLyogQ29uc3RhbnQgRkcgY29sb3IgKi8KKwljdHgtPmJnID0gdXBhX3JlYWRsKCZmZmItPmJnKTsJLyogQ29uc3RhbnQgQkcgY29sb3IgKi8KKwljdHgtPmNvbnN0eSA9IHVwYV9yZWFkbCgmZmZiLT5jb25zdHkpOwkvKiBDb25zdGFudCBZICovCisJY3R4LT5jb25zdHogPSB1cGFfcmVhZGwoJmZmYi0+Y29uc3R6KTsJLyogQ29uc3RhbnQgWiAqLworCWN0eC0+eGNsaXAgPSB1cGFfcmVhZGwoJmZmYi0+eGNsaXApOwkvKiBYIHBsYW5lIGNsaXAgKi8KKwljdHgtPmRjc3MgPSB1cGFfcmVhZGwoJmZmYi0+ZGNzcyk7CS8qIERlcHRoIEN1ZSBTY2FsZSBTbG9wZSAqLwogCWN0eC0+dmNsaXBtaW4gPSB1cGFfcmVhZGwoJmZmYi0+dmNsaXBtaW4pOwkvKiBQcmltYXJ5IFhZIGNsaXAsIG1pbmltdW0gKi8KIAljdHgtPnZjbGlwbWF4ID0gdXBhX3JlYWRsKCZmZmItPnZjbGlwbWF4KTsJLyogUHJpbWFyeSBYWSBjbGlwLCBtYXhpbXVtICovCiAJY3R4LT52Y2xpcHptaW4gPSB1cGFfcmVhZGwoJmZmYi0+dmNsaXB6bWluKTsJLyogUHJpbWFyeSBaIGNsaXAsIG1pbmltdW0gKi8KIAljdHgtPnZjbGlwem1heCA9IHVwYV9yZWFkbCgmZmZiLT52Y2xpcHptYXgpOwkvKiBQcmltYXJ5IFogY2xpcCwgbWF4aW11bSAqLwotCWN0eC0+ZGNzZiA9IHVwYV9yZWFkbCgmZmZiLT5kY3NmKTsJCS8qIERlcHRoIEN1ZSBTY2FsZSBGcm9udCBCb3VuZCAqLwotCWN0eC0+ZGNzYiA9IHVwYV9yZWFkbCgmZmZiLT5kY3NiKTsJCS8qIERlcHRoIEN1ZSBTY2FsZSBCYWNrIEJvdW5kICovCi0JY3R4LT5kY3pmID0gdXBhX3JlYWRsKCZmZmItPmRjemYpOwkJLyogRGVwdGggQ3VlIFNjYWxlIFogRnJvbnQgKi8KLQljdHgtPmRjemIgPSB1cGFfcmVhZGwoJmZmYi0+ZGN6Yik7CQkvKiBEZXB0aCBDdWUgU2NhbGUgWiBCYWNrICovCi0JY3R4LT5ibGVuZGMgPSB1cGFfcmVhZGwoJmZmYi0+YmxlbmRjKTsJCS8qIEFscGhhIEJsZW5kIENvbnRyb2wgKi8KKwljdHgtPmRjc2YgPSB1cGFfcmVhZGwoJmZmYi0+ZGNzZik7CS8qIERlcHRoIEN1ZSBTY2FsZSBGcm9udCBCb3VuZCAqLworCWN0eC0+ZGNzYiA9IHVwYV9yZWFkbCgmZmZiLT5kY3NiKTsJLyogRGVwdGggQ3VlIFNjYWxlIEJhY2sgQm91bmQgKi8KKwljdHgtPmRjemYgPSB1cGFfcmVhZGwoJmZmYi0+ZGN6Zik7CS8qIERlcHRoIEN1ZSBTY2FsZSBaIEZyb250ICovCisJY3R4LT5kY3piID0gdXBhX3JlYWRsKCZmZmItPmRjemIpOwkvKiBEZXB0aCBDdWUgU2NhbGUgWiBCYWNrICovCisJY3R4LT5ibGVuZGMgPSB1cGFfcmVhZGwoJmZmYi0+YmxlbmRjKTsJLyogQWxwaGEgQmxlbmQgQ29udHJvbCAqLwogCWN0eC0+YmxlbmRjMSA9IHVwYV9yZWFkbCgmZmZiLT5ibGVuZGMxKTsJLyogQWxwaGEgQmxlbmQgQ29sb3IgMSAqLwogCWN0eC0+YmxlbmRjMiA9IHVwYV9yZWFkbCgmZmZiLT5ibGVuZGMyKTsJLyogQWxwaGEgQmxlbmQgQ29sb3IgMiAqLwotCWN0eC0+ZmJjID0gdXBhX3JlYWRsKCZmZmItPmZiYyk7CQkvKiBGcmFtZSBCdWZmZXIgQ29udHJvbCAqLwotCWN0eC0+cm9wID0gdXBhX3JlYWRsKCZmZmItPnJvcCk7CQkvKiBSYXN0ZXIgT3BlcmF0aW9uICovCi0JY3R4LT5jbXAgPSB1cGFfcmVhZGwoJmZmYi0+Y21wKTsJCS8qIENvbXBhcmUgQ29udHJvbHMgKi8KKwljdHgtPmZiYyA9IHVwYV9yZWFkbCgmZmZiLT5mYmMpOwkvKiBGcmFtZSBCdWZmZXIgQ29udHJvbCAqLworCWN0eC0+cm9wID0gdXBhX3JlYWRsKCZmZmItPnJvcCk7CS8qIFJhc3RlciBPcGVyYXRpb24gKi8KKwljdHgtPmNtcCA9IHVwYV9yZWFkbCgmZmZiLT5jbXApOwkvKiBDb21wYXJlIENvbnRyb2xzICovCiAJY3R4LT5tYXRjaGFiID0gdXBhX3JlYWRsKCZmZmItPm1hdGNoYWIpOwkvKiBCdWZmZXIgQS9CIE1hdGNoIE9wcyAqLwotCWN0eC0+bWF0Y2hjID0gdXBhX3JlYWRsKCZmZmItPm1hdGNoYyk7CQkvKiBCdWZmZXIgQyBNYXRjaCBPcHMgKi8KLQljdHgtPm1hZ25hYiA9IHVwYV9yZWFkbCgmZmZiLT5tYWduYWIpOwkJLyogQnVmZmVyIEEvQiBNYWduaXR1ZGUgT3BzICovCi0JY3R4LT5tYWduYyA9IHVwYV9yZWFkbCgmZmZiLT5tYWduYyk7CQkvKiBCdWZmZXIgQyBNYWduaXR1ZGUgT3BzICovCi0JY3R4LT5wbWFzayA9IHVwYV9yZWFkbCgmZmZiLT5wbWFzayk7CQkvKiBSR0IgUGxhbmUgTWFzayAqLwotCWN0eC0+eHBtYXNrID0gdXBhX3JlYWRsKCZmZmItPnhwbWFzayk7CQkvKiBYIFBsYW5lIE1hc2sgKi8KLQljdHgtPnlwbWFzayA9IHVwYV9yZWFkbCgmZmZiLT55cG1hc2spOwkJLyogWSBQbGFuZSBNYXNrICovCi0JY3R4LT56cG1hc2sgPSB1cGFfcmVhZGwoJmZmYi0+enBtYXNrKTsJCS8qIFogUGxhbmUgTWFzayAqLworCWN0eC0+bWF0Y2hjID0gdXBhX3JlYWRsKCZmZmItPm1hdGNoYyk7CS8qIEJ1ZmZlciBDIE1hdGNoIE9wcyAqLworCWN0eC0+bWFnbmFiID0gdXBhX3JlYWRsKCZmZmItPm1hZ25hYik7CS8qIEJ1ZmZlciBBL0IgTWFnbml0dWRlIE9wcyAqLworCWN0eC0+bWFnbmMgPSB1cGFfcmVhZGwoJmZmYi0+bWFnbmMpOwkvKiBCdWZmZXIgQyBNYWduaXR1ZGUgT3BzICovCisJY3R4LT5wbWFzayA9IHVwYV9yZWFkbCgmZmZiLT5wbWFzayk7CS8qIFJHQiBQbGFuZSBNYXNrICovCisJY3R4LT54cG1hc2sgPSB1cGFfcmVhZGwoJmZmYi0+eHBtYXNrKTsJLyogWCBQbGFuZSBNYXNrICovCisJY3R4LT55cG1hc2sgPSB1cGFfcmVhZGwoJmZmYi0+eXBtYXNrKTsJLyogWSBQbGFuZSBNYXNrICovCisJY3R4LT56cG1hc2sgPSB1cGFfcmVhZGwoJmZmYi0+enBtYXNrKTsJLyogWiBQbGFuZSBNYXNrICovCiAKIAkvKiBBdXhpbGlhcnkgQ2xpcHMuICovCiAJY3R4LT5hdXhjbGlwMG1pbiA9IHVwYV9yZWFkbCgmZmZiLT5hdXhjbGlwWzBdLm1pbik7CkBAIC0xMzUsOSArMTM0LDkgQEAKIAljdHgtPmF1eGNsaXAzbWluID0gdXBhX3JlYWRsKCZmZmItPmF1eGNsaXBbM10ubWluKTsKIAljdHgtPmF1eGNsaXAzbWF4ID0gdXBhX3JlYWRsKCZmZmItPmF1eGNsaXBbM10ubWF4KTsKIAotCWN0eC0+bHBhdCA9IHVwYV9yZWFkbCgmZmZiLT5scGF0KTsJCS8qIExpbmUgUGF0dGVybiAqLwotCWN0eC0+Zm9udHh5ID0gdXBhX3JlYWRsKCZmZmItPmZvbnR4eSk7CQkvKiBYWSBGb250IENvb3JkaW5hdGUgKi8KLQljdHgtPmZvbnR3ID0gdXBhX3JlYWRsKCZmZmItPmZvbnR3KTsJCS8qIEZvbnQgV2lkdGggKi8KKwljdHgtPmxwYXQgPSB1cGFfcmVhZGwoJmZmYi0+bHBhdCk7CS8qIExpbmUgUGF0dGVybiAqLworCWN0eC0+Zm9udHh5ID0gdXBhX3JlYWRsKCZmZmItPmZvbnR4eSk7CS8qIFhZIEZvbnQgQ29vcmRpbmF0ZSAqLworCWN0eC0+Zm9udHcgPSB1cGFfcmVhZGwoJmZmYi0+Zm9udHcpOwkvKiBGb250IFdpZHRoICovCiAJY3R4LT5mb250aW5jID0gdXBhX3JlYWRsKCZmZmItPmZvbnRpbmMpOwkvKiBGb250IFgvWSBJbmNyZW1lbnQgKi8KIAogCS8qIFRoZXNlIHJlZ2lzdGVycy9mZWF0dXJlcyBvbmx5IGV4aXN0IG9uIEZGQjIgYW5kIGxhdGVyIGNoaXBzLiAqLwpAQCAtMTQ1LDEyICsxNDQsMTIgQEAKIAkJY3R4LT5kY3NzMSA9IHVwYV9yZWFkbCgmZmZiLT5kY3NzMSk7CS8qIERlcHRoIEN1ZSBTY2FsZSBTbG9wZSAxICovCiAJCWN0eC0+ZGNzczIgPSB1cGFfcmVhZGwoJmZmYi0+ZGNzczIpOwkvKiBEZXB0aCBDdWUgU2NhbGUgU2xvcGUgMiAqLwogCQljdHgtPmRjc3MyID0gdXBhX3JlYWRsKCZmZmItPmRjc3MzKTsJLyogRGVwdGggQ3VlIFNjYWxlIFNsb3BlIDMgKi8KLQkJY3R4LT5kY3MyICA9IHVwYV9yZWFkbCgmZmZiLT5kY3MyKTsJLyogRGVwdGggQ3VlIFNjYWxlIDIgKi8KLQkJY3R4LT5kY3MzICA9IHVwYV9yZWFkbCgmZmZiLT5kY3MzKTsJLyogRGVwdGggQ3VlIFNjYWxlIDMgKi8KLQkJY3R4LT5kY3M0ICA9IHVwYV9yZWFkbCgmZmZiLT5kY3M0KTsJLyogRGVwdGggQ3VlIFNjYWxlIDQgKi8KLQkJY3R4LT5kY2QyICA9IHVwYV9yZWFkbCgmZmZiLT5kY2QyKTsJLyogRGVwdGggQ3VlIERlcHRoIDIgKi8KLQkJY3R4LT5kY2QzICA9IHVwYV9yZWFkbCgmZmZiLT5kY2QzKTsJLyogRGVwdGggQ3VlIERlcHRoIDMgKi8KLQkJY3R4LT5kY2Q0ICA9IHVwYV9yZWFkbCgmZmZiLT5kY2Q0KTsJLyogRGVwdGggQ3VlIERlcHRoIDQgKi8KKwkJY3R4LT5kY3MyID0gdXBhX3JlYWRsKCZmZmItPmRjczIpOwkvKiBEZXB0aCBDdWUgU2NhbGUgMiAqLworCQljdHgtPmRjczMgPSB1cGFfcmVhZGwoJmZmYi0+ZGNzMyk7CS8qIERlcHRoIEN1ZSBTY2FsZSAzICovCisJCWN0eC0+ZGNzNCA9IHVwYV9yZWFkbCgmZmZiLT5kY3M0KTsJLyogRGVwdGggQ3VlIFNjYWxlIDQgKi8KKwkJY3R4LT5kY2QyID0gdXBhX3JlYWRsKCZmZmItPmRjZDIpOwkvKiBEZXB0aCBDdWUgRGVwdGggMiAqLworCQljdHgtPmRjZDMgPSB1cGFfcmVhZGwoJmZmYi0+ZGNkMyk7CS8qIERlcHRoIEN1ZSBEZXB0aCAzICovCisJCWN0eC0+ZGNkNCA9IHVwYV9yZWFkbCgmZmZiLT5kY2Q0KTsJLyogRGVwdGggQ3VlIERlcHRoIDQgKi8KIAogCQkvKiBBbmQgc3RlbmNpbC9zdGVuY2lsY3RsIG9ubHkgZXhpc3RzIG9uIEZGQjIrIGFuZCBsYXRlcgogCQkgKiBkdWUgdG8gdGhlIGludHJvZHVjdGlvbiBvZiAzRFJBTS1JSUkuCkBAIC0xNzAsNyArMTY5LDcgQEAKIAljdHgtPnVjc3IgPSB1cGFfcmVhZGwoJmZmYi0+dWNzcik7CiB9CiAKLXN0YXRpYyB2b2lkIGZmYl9yZXN0b3JlX2NvbnRleHQoZmZiX2Rldl9wcml2X3QgKmZwcml2LCBpbnQgb2xkLCBpbnQgaWR4KQorc3RhdGljIHZvaWQgZmZiX3Jlc3RvcmVfY29udGV4dChmZmJfZGV2X3ByaXZfdCAqIGZwcml2LCBpbnQgb2xkLCBpbnQgaWR4KQogewogCWZmYl9mYmNQdHIgZmZiID0gZnByaXYtPnJlZ3M7CiAJc3RydWN0IGZmYl9od19jb250ZXh0ICpjdHg7CkBAIC0xOTMsNyArMTkyLDcgQEAKIAogCQl1cGFfd3JpdGVsKGN0eC0+cHBjLCAmZmZiLT5wcGMpOwogCQl1cGFfd3JpdGVsKGN0eC0+d2lkLCAmZmZiLT53aWQpOwotCQl1cGFfd3JpdGVsKGN0eC0+ZmcsICAmZmZiLT5mZyk7CisJCXVwYV93cml0ZWwoY3R4LT5mZywgJmZmYi0+ZmcpOwogCQl1cGFfd3JpdGVsKGN0eC0+YmcsICZmZmItPmJnKTsKIAkJdXBhX3dyaXRlbChjdHgtPnhjbGlwLCAmZmZiLT54Y2xpcCk7CiAJCXVwYV93cml0ZWwoY3R4LT5mYmMsICZmZmItPmZiYyk7CkBAIC0yMzcsMzYgKzIzNiwzNiBAQAogCiAJLyogUmVzdG9yZSByZW5kZXJpbmcgYXR0cmlidXRlcy4gKi8KIAotCXVwYV93cml0ZWwoY3R4LT5wcGMsICZmZmItPnBwYyk7CQkvKiBQaXhlbCBQcm9jZXNzb3IgQ29udHJvbCAqLwotCXVwYV93cml0ZWwoY3R4LT53aWQsICZmZmItPndpZCk7CQkvKiBDdXJyZW50IFdJRCAqLwotCXVwYV93cml0ZWwoY3R4LT5mZywgJmZmYi0+ZmcpOwkJCS8qIENvbnN0YW50IEZHIGNvbG9yICovCi0JdXBhX3dyaXRlbChjdHgtPmJnLCAmZmZiLT5iZyk7CQkJLyogQ29uc3RhbnQgQkcgY29sb3IgKi8KLQl1cGFfd3JpdGVsKGN0eC0+Y29uc3R5LCAmZmZiLT5jb25zdHkpOwkJLyogQ29uc3RhbnQgWSAqLwotCXVwYV93cml0ZWwoY3R4LT5jb25zdHosICZmZmItPmNvbnN0eik7CQkvKiBDb25zdGFudCBaICovCi0JdXBhX3dyaXRlbChjdHgtPnhjbGlwLCAmZmZiLT54Y2xpcCk7CQkvKiBYIHBsYW5lIGNsaXAgKi8KLQl1cGFfd3JpdGVsKGN0eC0+ZGNzcywgJmZmYi0+ZGNzcyk7CQkvKiBEZXB0aCBDdWUgU2NhbGUgU2xvcGUgKi8KKwl1cGFfd3JpdGVsKGN0eC0+cHBjLCAmZmZiLT5wcGMpOwkvKiBQaXhlbCBQcm9jZXNzb3IgQ29udHJvbCAqLworCXVwYV93cml0ZWwoY3R4LT53aWQsICZmZmItPndpZCk7CS8qIEN1cnJlbnQgV0lEICovCisJdXBhX3dyaXRlbChjdHgtPmZnLCAmZmZiLT5mZyk7CS8qIENvbnN0YW50IEZHIGNvbG9yICovCisJdXBhX3dyaXRlbChjdHgtPmJnLCAmZmZiLT5iZyk7CS8qIENvbnN0YW50IEJHIGNvbG9yICovCisJdXBhX3dyaXRlbChjdHgtPmNvbnN0eSwgJmZmYi0+Y29uc3R5KTsJLyogQ29uc3RhbnQgWSAqLworCXVwYV93cml0ZWwoY3R4LT5jb25zdHosICZmZmItPmNvbnN0eik7CS8qIENvbnN0YW50IFogKi8KKwl1cGFfd3JpdGVsKGN0eC0+eGNsaXAsICZmZmItPnhjbGlwKTsJLyogWCBwbGFuZSBjbGlwICovCisJdXBhX3dyaXRlbChjdHgtPmRjc3MsICZmZmItPmRjc3MpOwkvKiBEZXB0aCBDdWUgU2NhbGUgU2xvcGUgKi8KIAl1cGFfd3JpdGVsKGN0eC0+dmNsaXBtaW4sICZmZmItPnZjbGlwbWluKTsJLyogUHJpbWFyeSBYWSBjbGlwLCBtaW5pbXVtICovCiAJdXBhX3dyaXRlbChjdHgtPnZjbGlwbWF4LCAmZmZiLT52Y2xpcG1heCk7CS8qIFByaW1hcnkgWFkgY2xpcCwgbWF4aW11bSAqLwogCXVwYV93cml0ZWwoY3R4LT52Y2xpcHptaW4sICZmZmItPnZjbGlwem1pbik7CS8qIFByaW1hcnkgWiBjbGlwLCBtaW5pbXVtICovCiAJdXBhX3dyaXRlbChjdHgtPnZjbGlwem1heCwgJmZmYi0+dmNsaXB6bWF4KTsJLyogUHJpbWFyeSBaIGNsaXAsIG1heGltdW0gKi8KLQl1cGFfd3JpdGVsKGN0eC0+ZGNzZiwgJmZmYi0+ZGNzZik7CQkvKiBEZXB0aCBDdWUgU2NhbGUgRnJvbnQgQm91bmQgKi8KLQl1cGFfd3JpdGVsKGN0eC0+ZGNzYiwgJmZmYi0+ZGNzYik7CQkvKiBEZXB0aCBDdWUgU2NhbGUgQmFjayBCb3VuZCAqLwotCXVwYV93cml0ZWwoY3R4LT5kY3pmLCAmZmZiLT5kY3pmKTsJCS8qIERlcHRoIEN1ZSBTY2FsZSBaIEZyb250ICovCi0JdXBhX3dyaXRlbChjdHgtPmRjemIsICZmZmItPmRjemIpOwkJLyogRGVwdGggQ3VlIFNjYWxlIFogQmFjayAqLwotCXVwYV93cml0ZWwoY3R4LT5ibGVuZGMsICZmZmItPmJsZW5kYyk7CQkvKiBBbHBoYSBCbGVuZCBDb250cm9sICovCisJdXBhX3dyaXRlbChjdHgtPmRjc2YsICZmZmItPmRjc2YpOwkvKiBEZXB0aCBDdWUgU2NhbGUgRnJvbnQgQm91bmQgKi8KKwl1cGFfd3JpdGVsKGN0eC0+ZGNzYiwgJmZmYi0+ZGNzYik7CS8qIERlcHRoIEN1ZSBTY2FsZSBCYWNrIEJvdW5kICovCisJdXBhX3dyaXRlbChjdHgtPmRjemYsICZmZmItPmRjemYpOwkvKiBEZXB0aCBDdWUgU2NhbGUgWiBGcm9udCAqLworCXVwYV93cml0ZWwoY3R4LT5kY3piLCAmZmZiLT5kY3piKTsJLyogRGVwdGggQ3VlIFNjYWxlIFogQmFjayAqLworCXVwYV93cml0ZWwoY3R4LT5ibGVuZGMsICZmZmItPmJsZW5kYyk7CS8qIEFscGhhIEJsZW5kIENvbnRyb2wgKi8KIAl1cGFfd3JpdGVsKGN0eC0+YmxlbmRjMSwgJmZmYi0+YmxlbmRjMSk7CS8qIEFscGhhIEJsZW5kIENvbG9yIDEgKi8KIAl1cGFfd3JpdGVsKGN0eC0+YmxlbmRjMiwgJmZmYi0+YmxlbmRjMik7CS8qIEFscGhhIEJsZW5kIENvbG9yIDIgKi8KLQl1cGFfd3JpdGVsKGN0eC0+ZmJjLCAmZmZiLT5mYmMpOwkJLyogRnJhbWUgQnVmZmVyIENvbnRyb2wgKi8KLQl1cGFfd3JpdGVsKGN0eC0+cm9wLCAmZmZiLT5yb3ApOwkJLyogUmFzdGVyIE9wZXJhdGlvbiAqLwotCXVwYV93cml0ZWwoY3R4LT5jbXAsICZmZmItPmNtcCk7CQkvKiBDb21wYXJlIENvbnRyb2xzICovCisJdXBhX3dyaXRlbChjdHgtPmZiYywgJmZmYi0+ZmJjKTsJLyogRnJhbWUgQnVmZmVyIENvbnRyb2wgKi8KKwl1cGFfd3JpdGVsKGN0eC0+cm9wLCAmZmZiLT5yb3ApOwkvKiBSYXN0ZXIgT3BlcmF0aW9uICovCisJdXBhX3dyaXRlbChjdHgtPmNtcCwgJmZmYi0+Y21wKTsJLyogQ29tcGFyZSBDb250cm9scyAqLwogCXVwYV93cml0ZWwoY3R4LT5tYXRjaGFiLCAmZmZiLT5tYXRjaGFiKTsJLyogQnVmZmVyIEEvQiBNYXRjaCBPcHMgKi8KLQl1cGFfd3JpdGVsKGN0eC0+bWF0Y2hjLCAmZmZiLT5tYXRjaGMpOwkJLyogQnVmZmVyIEMgTWF0Y2ggT3BzICovCi0JdXBhX3dyaXRlbChjdHgtPm1hZ25hYiwgJmZmYi0+bWFnbmFiKTsJCS8qIEJ1ZmZlciBBL0IgTWFnbml0dWRlIE9wcyAqLwotCXVwYV93cml0ZWwoY3R4LT5tYWduYywgJmZmYi0+bWFnbmMpOwkJLyogQnVmZmVyIEMgTWFnbml0dWRlIE9wcyAqLwotCXVwYV93cml0ZWwoY3R4LT5wbWFzaywgJmZmYi0+cG1hc2spOwkJLyogUkdCIFBsYW5lIE1hc2sgKi8KLQl1cGFfd3JpdGVsKGN0eC0+eHBtYXNrLCAmZmZiLT54cG1hc2spOwkJLyogWCBQbGFuZSBNYXNrICovCi0JdXBhX3dyaXRlbChjdHgtPnlwbWFzaywgJmZmYi0+eXBtYXNrKTsJCS8qIFkgUGxhbmUgTWFzayAqLwotCXVwYV93cml0ZWwoY3R4LT56cG1hc2ssICZmZmItPnpwbWFzayk7CQkvKiBaIFBsYW5lIE1hc2sgKi8KKwl1cGFfd3JpdGVsKGN0eC0+bWF0Y2hjLCAmZmZiLT5tYXRjaGMpOwkvKiBCdWZmZXIgQyBNYXRjaCBPcHMgKi8KKwl1cGFfd3JpdGVsKGN0eC0+bWFnbmFiLCAmZmZiLT5tYWduYWIpOwkvKiBCdWZmZXIgQS9CIE1hZ25pdHVkZSBPcHMgKi8KKwl1cGFfd3JpdGVsKGN0eC0+bWFnbmMsICZmZmItPm1hZ25jKTsJLyogQnVmZmVyIEMgTWFnbml0dWRlIE9wcyAqLworCXVwYV93cml0ZWwoY3R4LT5wbWFzaywgJmZmYi0+cG1hc2spOwkvKiBSR0IgUGxhbmUgTWFzayAqLworCXVwYV93cml0ZWwoY3R4LT54cG1hc2ssICZmZmItPnhwbWFzayk7CS8qIFggUGxhbmUgTWFzayAqLworCXVwYV93cml0ZWwoY3R4LT55cG1hc2ssICZmZmItPnlwbWFzayk7CS8qIFkgUGxhbmUgTWFzayAqLworCXVwYV93cml0ZWwoY3R4LT56cG1hc2ssICZmZmItPnpwbWFzayk7CS8qIFogUGxhbmUgTWFzayAqLwogCiAJLyogQXV4aWxpYXJ5IENsaXBzLiAqLwogCXVwYV93cml0ZWwoY3R4LT5hdXhjbGlwMG1pbiwgJmZmYi0+YXV4Y2xpcFswXS5taW4pOwpAQCAtMjc4LDkgKzI3Nyw5IEBACiAJdXBhX3dyaXRlbChjdHgtPmF1eGNsaXAzbWluLCAmZmZiLT5hdXhjbGlwWzNdLm1pbik7CiAJdXBhX3dyaXRlbChjdHgtPmF1eGNsaXAzbWF4LCAmZmZiLT5hdXhjbGlwWzNdLm1heCk7CiAKLQl1cGFfd3JpdGVsKGN0eC0+bHBhdCwgJmZmYi0+bHBhdCk7CQkvKiBMaW5lIFBhdHRlcm4gKi8KLQl1cGFfd3JpdGVsKGN0eC0+Zm9udHh5LCAmZmZiLT5mb250eHkpOwkJLyogWFkgRm9udCBDb29yZGluYXRlICovCi0JdXBhX3dyaXRlbChjdHgtPmZvbnR3LCAmZmZiLT5mb250dyk7CQkvKiBGb250IFdpZHRoICovCisJdXBhX3dyaXRlbChjdHgtPmxwYXQsICZmZmItPmxwYXQpOwkvKiBMaW5lIFBhdHRlcm4gKi8KKwl1cGFfd3JpdGVsKGN0eC0+Zm9udHh5LCAmZmZiLT5mb250eHkpOwkvKiBYWSBGb250IENvb3JkaW5hdGUgKi8KKwl1cGFfd3JpdGVsKGN0eC0+Zm9udHcsICZmZmItPmZvbnR3KTsJLyogRm9udCBXaWR0aCAqLwogCXVwYV93cml0ZWwoY3R4LT5mb250aW5jLCAmZmZiLT5mb250aW5jKTsJLyogRm9udCBYL1kgSW5jcmVtZW50ICovCiAKIAkvKiBUaGVzZSByZWdpc3RlcnMvZmVhdHVyZXMgb25seSBleGlzdCBvbiBGRkIyIGFuZCBsYXRlciBjaGlwcy4gKi8KQEAgLTM1NCw5MSArMzUzLDg3IEBACiAJfSB3aGlsZSAoLS1saW1pdCk7CiB9CiAKLWludCBmZmJfZHJpdmVyX2NvbnRleHRfc3dpdGNoKGRybV9kZXZpY2VfdCAqZGV2LCBpbnQgb2xkLCBpbnQgbmV3KQoraW50IGZmYl9kcml2ZXJfY29udGV4dF9zd2l0Y2goZHJtX2RldmljZV90ICogZGV2LCBpbnQgb2xkLCBpbnQgbmV3KQogewogCWZmYl9kZXZfcHJpdl90ICpmcHJpdiA9IChmZmJfZGV2X3ByaXZfdCAqKSBkZXYtPmRldl9wcml2YXRlOwogCiAjaWZkZWYgRFJNX0RNQV9ISVNUT0dSQU0KLSAgICAgICAgZGV2LT5jdHhfc3RhcnQgPSBnZXRfY3ljbGVzKCk7CisJZGV2LT5jdHhfc3RhcnQgPSBnZXRfY3ljbGVzKCk7CiAjZW5kaWYKLSAgICAgICAgCi0gICAgICAgIERSTV9ERUJVRygiQ29udGV4dCBzd2l0Y2ggZnJvbSAlZCB0byAlZFxuIiwgb2xkLCBuZXcpOwogCi0gICAgICAgIGlmIChuZXcgPT0gZGV2LT5sYXN0X2NvbnRleHQgfHwKLQkgICAgZGV2LT5sYXN0X2NvbnRleHQgPT0gMCkgeworCURSTV9ERUJVRygiQ29udGV4dCBzd2l0Y2ggZnJvbSAlZCB0byAlZFxuIiwgb2xkLCBuZXcpOworCisJaWYgKG5ldyA9PSBkZXYtPmxhc3RfY29udGV4dCB8fCBkZXYtPmxhc3RfY29udGV4dCA9PSAwKSB7CiAJCWRldi0+bGFzdF9jb250ZXh0ID0gbmV3OwotICAgICAgICAgICAgICAgIHJldHVybiAwOworCQlyZXR1cm4gMDsKIAl9Ci0gICAgICAgIAorCiAJRkZCV2FpdChmcHJpdi0+cmVncyk7CiAJZmZiX3NhdmVfY29udGV4dChmcHJpdiwgb2xkKTsKIAlmZmJfcmVzdG9yZV9jb250ZXh0KGZwcml2LCBvbGQsIG5ldyk7CiAJRkZCV2FpdChmcHJpdi0+cmVncyk7Ci0gICAgICAgIAorCiAJZGV2LT5sYXN0X2NvbnRleHQgPSBuZXc7CiAKLSAgICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKIGludCBmZmJfZHJpdmVyX3Jlc2N0eChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwKLQkJdW5zaWduZWQgbG9uZyBhcmcpCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCWRybV9jdHhfcmVzX3QJcmVzOwotCWRybV9jdHhfdAljdHg7Ci0JaW50CQlpOworCWRybV9jdHhfcmVzX3QgcmVzOworCWRybV9jdHhfdCBjdHg7CisJaW50IGk7CiAKIAlEUk1fREVCVUcoIiVkXG4iLCBEUk1fUkVTRVJWRURfQ09OVEVYVFMpOwotCWlmIChjb3B5X2Zyb21fdXNlcigmcmVzLCAoZHJtX2N0eF9yZXNfdCBfX3VzZXIgKilhcmcsIHNpemVvZihyZXMpKSkKKwlpZiAoY29weV9mcm9tX3VzZXIoJnJlcywgKGRybV9jdHhfcmVzX3QgX191c2VyICopIGFyZywgc2l6ZW9mKHJlcykpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAlpZiAocmVzLmNvdW50ID49IERSTV9SRVNFUlZFRF9DT05URVhUUykgewogCQltZW1zZXQoJmN0eCwgMCwgc2l6ZW9mKGN0eCkpOwogCQlmb3IgKGkgPSAwOyBpIDwgRFJNX1JFU0VSVkVEX0NPTlRFWFRTOyBpKyspIHsKIAkJCWN0eC5oYW5kbGUgPSBpOwotCQkJaWYgKGNvcHlfdG9fdXNlcigmcmVzLmNvbnRleHRzW2ldLAotCQkJCQkgJmksCi0JCQkJCSBzaXplb2YoaSkpKQorCQkJaWYgKGNvcHlfdG9fdXNlcigmcmVzLmNvbnRleHRzW2ldLCAmaSwgc2l6ZW9mKGkpKSkKIAkJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQogCX0KIAlyZXMuY291bnQgPSBEUk1fUkVTRVJWRURfQ09OVEVYVFM7Ci0JaWYgKGNvcHlfdG9fdXNlcigoZHJtX2N0eF9yZXNfdCBfX3VzZXIgKilhcmcsICZyZXMsIHNpemVvZihyZXMpKSkKKwlpZiAoY29weV90b191c2VyKChkcm1fY3R4X3Jlc190IF9fdXNlciAqKSBhcmcsICZyZXMsIHNpemVvZihyZXMpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJcmV0dXJuIDA7CiB9CiAKLQogaW50IGZmYl9kcml2ZXJfYWRkY3R4KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLAotCQl1bnNpZ25lZCBsb25nIGFyZykKKwkJICAgICAgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0JZHJtX2ZpbGVfdAkqcHJpdgk9IGZpbHAtPnByaXZhdGVfZGF0YTsKLQlkcm1fZGV2aWNlX3QJKmRldgk9IHByaXYtPmRldjsKLQlkcm1fY3R4X3QJY3R4OworCWRybV9maWxlX3QgKnByaXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJZHJtX2RldmljZV90ICpkZXYgPSBwcml2LT5kZXY7CisJZHJtX2N0eF90IGN0eDsKIAlpbnQgaWR4OwogCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZjdHgsIChkcm1fY3R4X3QgX191c2VyICopYXJnLCBzaXplb2YoY3R4KSkpCisJaWYgKGNvcHlfZnJvbV91c2VyKCZjdHgsIChkcm1fY3R4X3QgX191c2VyICopIGFyZywgc2l6ZW9mKGN0eCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKLQlpZHggPSBEUk0oYWxsb2NfcXVldWUpKGRldiwgKGN0eC5mbGFncyAmIF9EUk1fQ09OVEVYVF8yRE9OTFkpKTsKKwlpZHggPSBEUk0oYWxsb2NfcXVldWUpIChkZXYsIChjdHguZmxhZ3MgJiBfRFJNX0NPTlRFWFRfMkRPTkxZKSk7CiAJaWYgKGlkeCA8IDApCiAJCXJldHVybiAtRU5GSUxFOwogCiAJRFJNX0RFQlVHKCIlZFxuIiwgY3R4LmhhbmRsZSk7CiAJY3R4LmhhbmRsZSA9IGlkeDsKLQlpZiAoY29weV90b191c2VyKChkcm1fY3R4X3QgX191c2VyICopYXJnLCAmY3R4LCBzaXplb2YoY3R4KSkpCisJaWYgKGNvcHlfdG9fdXNlcigoZHJtX2N0eF90IF9fdXNlciAqKSBhcmcsICZjdHgsIHNpemVvZihjdHgpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJcmV0dXJuIDA7CiB9CiAKIGludCBmZmJfZHJpdmVyX21vZGN0eChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwKLQkJdW5zaWduZWQgbG9uZyBhcmcpCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCWRybV9maWxlX3QJKnByaXYJPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0JZHJtX2RldmljZV90CSpkZXYJPSBwcml2LT5kZXY7Ci0JZmZiX2Rldl9wcml2X3QJKmZwcml2CT0gKGZmYl9kZXZfcHJpdl90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisJZHJtX2ZpbGVfdCAqcHJpdiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlkcm1fZGV2aWNlX3QgKmRldiA9IHByaXYtPmRldjsKKwlmZmJfZGV2X3ByaXZfdCAqZnByaXYgPSAoZmZiX2Rldl9wcml2X3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgZmZiX2h3X2NvbnRleHQgKmh3Y3R4OwogCWRybV9jdHhfdCBjdHg7CiAJaW50IGlkeDsKIAotCWlmIChjb3B5X2Zyb21fdXNlcigmY3R4LCAoZHJtX2N0eF90IF9fdXNlciAqKWFyZywgc2l6ZW9mKGN0eCkpKQorCWlmIChjb3B5X2Zyb21fdXNlcigmY3R4LCAoZHJtX2N0eF90IF9fdXNlciAqKSBhcmcsIHNpemVvZihjdHgpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlpZHggPSBjdHguaGFuZGxlOwpAQCAtNDU4LDE2ICs0NTMsMTYgQEAKIH0KIAogaW50IGZmYl9kcml2ZXJfZ2V0Y3R4KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLAotCQl1bnNpZ25lZCBsb25nIGFyZykKKwkJICAgICAgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0JZHJtX2ZpbGVfdAkqcHJpdgk9IGZpbHAtPnByaXZhdGVfZGF0YTsKLQlkcm1fZGV2aWNlX3QJKmRldgk9IHByaXYtPmRldjsKLQlmZmJfZGV2X3ByaXZfdAkqZnByaXYJPSAoZmZiX2Rldl9wcml2X3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKKwlkcm1fZmlsZV90ICpwcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCWRybV9kZXZpY2VfdCAqZGV2ID0gcHJpdi0+ZGV2OworCWZmYl9kZXZfcHJpdl90ICpmcHJpdiA9IChmZmJfZGV2X3ByaXZfdCAqKSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBmZmJfaHdfY29udGV4dCAqaHdjdHg7CiAJZHJtX2N0eF90IGN0eDsKIAlpbnQgaWR4OwogCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZjdHgsIChkcm1fY3R4X3QgX191c2VyICopYXJnLCBzaXplb2YoY3R4KSkpCisJaWYgKGNvcHlfZnJvbV91c2VyKCZjdHgsIChkcm1fY3R4X3QgX191c2VyICopIGFyZywgc2l6ZW9mKGN0eCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAogCWlkeCA9IGN0eC5oYW5kbGU7CkBAIC00ODMsMzEgKzQ3OCwzMSBAQAogCWVsc2UKIAkJY3R4LmZsYWdzID0gMDsKIAotCWlmIChjb3B5X3RvX3VzZXIoKGRybV9jdHhfdCBfX3VzZXIgKilhcmcsICZjdHgsIHNpemVvZihjdHgpKSkKKwlpZiAoY29weV90b191c2VyKChkcm1fY3R4X3QgX191c2VyICopIGFyZywgJmN0eCwgc2l6ZW9mKGN0eCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAogCXJldHVybiAwOwogfQogCi1pbnQgZmZiX2RyaXZlcl9zd2l0Y2hjdHgoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsCi0JCSAgIHVuc2lnbmVkIGxvbmcgYXJnKQoraW50IGZmYl9kcml2ZXJfc3dpdGNoY3R4KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAorCQkJIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCWRybV9maWxlX3QJKnByaXYJPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0JZHJtX2RldmljZV90CSpkZXYJPSBwcml2LT5kZXY7Ci0JZHJtX2N0eF90CWN0eDsKKwlkcm1fZmlsZV90ICpwcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCWRybV9kZXZpY2VfdCAqZGV2ID0gcHJpdi0+ZGV2OworCWRybV9jdHhfdCBjdHg7CiAKLQlpZiAoY29weV9mcm9tX3VzZXIoJmN0eCwgKGRybV9jdHhfdCAgX191c2VyICopYXJnLCBzaXplb2YoY3R4KSkpCisJaWYgKGNvcHlfZnJvbV91c2VyKCZjdHgsIChkcm1fY3R4X3QgX191c2VyICopIGFyZywgc2l6ZW9mKGN0eCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAlEUk1fREVCVUcoIiVkXG4iLCBjdHguaGFuZGxlKTsKIAlyZXR1cm4gZmZiX2RyaXZlcl9jb250ZXh0X3N3aXRjaChkZXYsIGRldi0+bGFzdF9jb250ZXh0LCBjdHguaGFuZGxlKTsKIH0KIAogaW50IGZmYl9kcml2ZXJfbmV3Y3R4KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLAotCQl1bnNpZ25lZCBsb25nIGFyZykKKwkJICAgICAgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0JZHJtX2N0eF90CWN0eDsKKwlkcm1fY3R4X3QgY3R4OwogCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZjdHgsIChkcm1fY3R4X3QgIF9fdXNlciAqKWFyZywgc2l6ZW9mKGN0eCkpKQorCWlmIChjb3B5X2Zyb21fdXNlcigmY3R4LCAoZHJtX2N0eF90IF9fdXNlciAqKSBhcmcsIHNpemVvZihjdHgpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJRFJNX0RFQlVHKCIlZFxuIiwgY3R4LmhhbmRsZSk7CiAKQEAgLTUxNSwxNSArNTEwLDE1IEBACiB9CiAKIGludCBmZmJfZHJpdmVyX3JtY3R4KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLAotCSAgICAgICB1bnNpZ25lZCBsb25nIGFyZykKKwkJICAgICB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlkcm1fY3R4X3QJY3R4OwotCWRybV9maWxlX3QJKnByaXYJPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0JZHJtX2RldmljZV90CSpkZXYJPSBwcml2LT5kZXY7Ci0JZmZiX2Rldl9wcml2X3QJKmZwcml2CT0gKGZmYl9kZXZfcHJpdl90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisJZHJtX2N0eF90IGN0eDsKKwlkcm1fZmlsZV90ICpwcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCWRybV9kZXZpY2VfdCAqZGV2ID0gcHJpdi0+ZGV2OworCWZmYl9kZXZfcHJpdl90ICpmcHJpdiA9IChmZmJfZGV2X3ByaXZfdCAqKSBkZXYtPmRldl9wcml2YXRlOwogCWludCBpZHg7CiAKLQlpZiAoY29weV9mcm9tX3VzZXIoJmN0eCwgKGRybV9jdHhfdCBfX3VzZXIgKilhcmcsIHNpemVvZihjdHgpKSkKKwlpZiAoY29weV9mcm9tX3VzZXIoJmN0eCwgKGRybV9jdHhfdCBfX3VzZXIgKikgYXJnLCBzaXplb2YoY3R4KSkpCiAJCXJldHVybiAtRUZBVUxUOwogCURSTV9ERUJVRygiJWRcbiIsIGN0eC5oYW5kbGUpOwogCkBAIC01NDQsNyArNTM5LDggQEAKIAlEUk0oaW9jdGxzKVtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX1JNX0NUWCldLmZ1bmMgPSBmZmJfZHJpdmVyX3JtY3R4OwogCURSTShpb2N0bHMpW0RSTV9JT0NUTF9OUihEUk1fSU9DVExfTU9EX0NUWCldLmZ1bmMgPSBmZmJfZHJpdmVyX21vZGN0eDsKIAlEUk0oaW9jdGxzKVtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX0dFVF9DVFgpXS5mdW5jID0gZmZiX2RyaXZlcl9nZXRjdHg7Ci0JRFJNKGlvY3RscylbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9TV0lUQ0hfQ1RYKV0uZnVuYyA9IGZmYl9kcml2ZXJfc3dpdGNoY3R4OworCURSTShpb2N0bHMpW0RSTV9JT0NUTF9OUihEUk1fSU9DVExfU1dJVENIX0NUWCldLmZ1bmMgPQorCSAgICBmZmJfZHJpdmVyX3N3aXRjaGN0eDsKIAlEUk0oaW9jdGxzKVtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX05FV19DVFgpXS5mdW5jID0gZmZiX2RyaXZlcl9uZXdjdHg7CiAJRFJNKGlvY3RscylbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9SRVNfQ1RYKV0uZnVuYyA9IGZmYl9kcml2ZXJfcmVzY3R4OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2ZmYl9kcnYuYyBiL2RyaXZlcnMvY2hhci9kcm0vZmZiX2Rydi5jCmluZGV4IDFiZDBkNTUuLjVjMTIxZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vZmZiX2Rydi5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vZmZiX2Rydi5jCkBAIC0zMywxMyArMzMsMTMgQEAKIAogc3RhdGljIGZmYl9wb3NpdGlvbl90ICpmZmJfcG9zaXRpb247CiAKLXN0YXRpYyB2b2lkIGdldF9mZmJfdHlwZShmZmJfZGV2X3ByaXZfdCAqZmZiX3ByaXYsIGludCBpbnN0YW5jZSkKK3N0YXRpYyB2b2lkIGdldF9mZmJfdHlwZShmZmJfZGV2X3ByaXZfdCAqIGZmYl9wcml2LCBpbnQgaW5zdGFuY2UpCiB7CiAJdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqc3RyYXBfYml0czsKIAl1bnNpZ25lZCBjaGFyIHZhbDsKIAogCXN0cmFwX2JpdHMgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKQotCQkoZmZiX3ByaXYtPmNhcmRfcGh5c19iYXNlICsgMHgwMDIwMDAwMFVMKTsKKwkgICAgKGZmYl9wcml2LT5jYXJkX3BoeXNfYmFzZSArIDB4MDAyMDAwMDBVTCk7CiAKIAkvKiBEb24ndCBhc2ssIHlvdSBoYXZlIHRvIHJlYWQgdGhlIHZhbHVlIHR3aWNlIGZvciB3aGF0ZXZlcgogCSAqIHJlYXNvbiB0byBnZXQgY29ycmVjdCBjb250ZW50cy4KQEAgLTYxLDcgKzYxLDggQEAKIAkJYnJlYWs7CiAJY2FzZSAoMHgxIDw8IDUpIHwgKDB4MCA8PCAzKToKIAkJZmZiX3ByaXYtPmZmYl90eXBlID0gZmZiMl9wcm90b3R5cGU7Ci0JCXByaW50aygiZmZiJWQ6IERldGVjdGVkIEZGQjIvdmVydGljYWwgcHJlLUZDUyBwcm90b3R5cGVcbiIsIGluc3RhbmNlKTsKKwkJcHJpbnRrKCJmZmIlZDogRGV0ZWN0ZWQgRkZCMi92ZXJ0aWNhbCBwcmUtRkNTIHByb3RvdHlwZVxuIiwKKwkJICAgICAgIGluc3RhbmNlKTsKIAkJYnJlYWs7CiAJY2FzZSAoMHgxIDw8IDUpIHwgKDB4MSA8PCAzKToKIAkJZmZiX3ByaXYtPmZmYl90eXBlID0gZmZiMl92ZXJ0aWNhbDsKQEAgLTgxLDEyICs4MiwxMyBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQlmZmJfcHJpdi0+ZmZiX3R5cGUgPSBmZmIyX3ZlcnRpY2FsOwotCQlwcmludGsoImZmYiVkOiBVbmtub3duIGJvYXJkSURbJTA4eF0sIGFzc3VtaW5nIEZGQjJcbiIsIGluc3RhbmNlLCB2YWwpOworCQlwcmludGsoImZmYiVkOiBVbmtub3duIGJvYXJkSURbJTA4eF0sIGFzc3VtaW5nIEZGQjJcbiIsCisJCSAgICAgICBpbnN0YW5jZSwgdmFsKTsKIAkJYnJlYWs7CiAJfTsKIH0KIAotc3RhdGljIHZvaWQgZmZiX2FwcGx5X3VwYV9wYXJlbnRfcmFuZ2VzKGludCBwYXJlbnQsIAorc3RhdGljIHZvaWQgZmZiX2FwcGx5X3VwYV9wYXJlbnRfcmFuZ2VzKGludCBwYXJlbnQsCiAJCQkJCXN0cnVjdCBsaW51eF9wcm9tNjRfcmVnaXN0ZXJzICpyZWdzKQogewogCXN0cnVjdCBsaW51eF9wcm9tNjRfcmFuZ2VzIHJhbmdlc1tQUk9NUkVHX01BWF07CkBAIC05Nyw3ICs5OSw4IEBACiAJaWYgKHN0cmNtcChuYW1lLCAidXBhIikgIT0gMCkKIAkJcmV0dXJuOwogCi0JbGVuID0gcHJvbV9nZXRwcm9wZXJ0eShwYXJlbnQsICJyYW5nZXMiLCAodm9pZCAqKSByYW5nZXMsIHNpemVvZihyYW5nZXMpKTsKKwlsZW4gPQorCSAgICBwcm9tX2dldHByb3BlcnR5KHBhcmVudCwgInJhbmdlcyIsICh2b2lkICopcmFuZ2VzLCBzaXplb2YocmFuZ2VzKSk7CiAJaWYgKGxlbiA8PSAwKQogCQlyZXR1cm47CiAKQEAgLTExNywxMSArMTIwLDExIEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgaW50IGZmYl9pbml0X29uZShkcm1fZGV2aWNlX3QgKmRldiwgaW50IHByb21fbm9kZSwgaW50IHBhcmVudF9ub2RlLAorc3RhdGljIGludCBmZmJfaW5pdF9vbmUoZHJtX2RldmljZV90ICogZGV2LCBpbnQgcHJvbV9ub2RlLCBpbnQgcGFyZW50X25vZGUsCiAJCQlpbnQgaW5zdGFuY2UpCiB7Ci0Jc3RydWN0IGxpbnV4X3Byb202NF9yZWdpc3RlcnMgcmVnc1syKlBST01SRUdfTUFYXTsKLQlmZmJfZGV2X3ByaXZfdCAqZmZiX3ByaXYgPSAoZmZiX2Rldl9wcml2X3QgKilkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBsaW51eF9wcm9tNjRfcmVnaXN0ZXJzIHJlZ3NbMiAqIFBST01SRUdfTUFYXTsKKwlmZmJfZGV2X3ByaXZfdCAqZmZiX3ByaXYgPSAoZmZiX2Rldl9wcml2X3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKIAlpbnQgaTsKIAogCWZmYl9wcml2LT5wcm9tX25vZGUgPSBwcm9tX25vZGU7CkBAIC0xMzIsMjcgKzEzNSwyNyBAQAogCWZmYl9hcHBseV91cGFfcGFyZW50X3JhbmdlcyhwYXJlbnRfbm9kZSwgJnJlZ3NbMF0pOwogCWZmYl9wcml2LT5jYXJkX3BoeXNfYmFzZSA9IHJlZ3NbMF0ucGh5c19hZGRyOwogCWZmYl9wcml2LT5yZWdzID0gKGZmYl9mYmNQdHIpCi0JCShyZWdzWzBdLnBoeXNfYWRkciArIDB4MDA2MDAwMDBVTCk7CisJICAgIChyZWdzWzBdLnBoeXNfYWRkciArIDB4MDA2MDAwMDBVTCk7CiAJZ2V0X2ZmYl90eXBlKGZmYl9wcml2LCBpbnN0YW5jZSk7CiAJZm9yIChpID0gMDsgaSA8IEZGQl9NQVhfQ1RYUzsgaSsrKQogCQlmZmJfcHJpdi0+aHdfc3RhdGVbaV0gPSBOVUxMOwotCQorCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBkcm1fbWFwX3QgKmZmYl9maW5kX21hcChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBvZmYpCiB7Ci0JZHJtX2ZpbGVfdAkqcHJpdgk9IGZpbHAtPnByaXZhdGVfZGF0YTsKLQlkcm1fZGV2aWNlX3QJKmRldjsKLQlkcm1fbWFwX2xpc3RfdCAgKnJfbGlzdDsKKwlkcm1fZmlsZV90ICpwcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCWRybV9kZXZpY2VfdCAqZGV2OworCWRybV9tYXBfbGlzdF90ICpyX2xpc3Q7CiAJc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKLQlkcm1fbWFwX3QJKm1hcDsKKwlkcm1fbWFwX3QgKm1hcDsKIAogCWlmICghcHJpdiB8fCAoZGV2ID0gcHJpdi0+ZGV2KSA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIAogCWxpc3RfZm9yX2VhY2gobGlzdCwgJmRldi0+bWFwbGlzdC0+aGVhZCkgewotCQlyX2xpc3QgPSAoZHJtX21hcF9saXN0X3QgKilsaXN0OworCQlyX2xpc3QgPSAoZHJtX21hcF9saXN0X3QgKikgbGlzdDsKIAkJbWFwID0gcl9saXN0LT5tYXA7CiAJCWlmICghbWFwKQogCQkJY29udGludWU7CkBAIC0xNjYsOCArMTY5LDcgQEAKIHVuc2lnbmVkIGxvbmcgZmZiX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLAogCQkJCSAgICB1bnNpZ25lZCBsb25nIGhpbnQsCiAJCQkJICAgIHVuc2lnbmVkIGxvbmcgbGVuLAotCQkJCSAgICB1bnNpZ25lZCBsb25nIHBnb2ZmLAotCQkJCSAgICB1bnNpZ25lZCBsb25nIGZsYWdzKQorCQkJCSAgICB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewogCWRybV9tYXBfdCAqbWFwID0gZmZiX2ZpbmRfbWFwKGZpbHAsIHBnb2ZmIDw8IFBBR0VfU0hJRlQpOwogCXVuc2lnbmVkIGxvbmcgYWRkciA9IC1FTk9NRU07CkBAIC0xNzUsOCArMTc3LDcgQEAKIAlpZiAoIW1hcCkKIAkJcmV0dXJuIGdldF91bm1hcHBlZF9hcmVhKE5VTEwsIGhpbnQsIGxlbiwgcGdvZmYsIGZsYWdzKTsKIAotCWlmIChtYXAtPnR5cGUgPT0gX0RSTV9GUkFNRV9CVUZGRVIgfHwKLQkgICAgbWFwLT50eXBlID09IF9EUk1fUkVHSVNURVJTKSB7CisJaWYgKG1hcC0+dHlwZSA9PSBfRFJNX0ZSQU1FX0JVRkZFUiB8fCBtYXAtPnR5cGUgPT0gX0RSTV9SRUdJU1RFUlMpIHsKICNpZmRlZiBIQVZFX0FSQ0hfRkJfVU5NQVBQRURfQVJFQQogCQlhZGRyID0gZ2V0X2ZiX3VubWFwcGVkX2FyZWEoZmlscCwgaGludCwgbGVuLCBwZ29mZiwgZmxhZ3MpOwogI2Vsc2UKQEAgLTE4Nyw3ICsxODgsNyBAQAogCiAJCWFkZHIgPSBnZXRfdW5tYXBwZWRfYXJlYShOVUxMLCBoaW50LCBsZW4gKyBzbGFjaywgcGdvZmYsIGZsYWdzKTsKIAkJaWYgKCEoYWRkciAmIH5QQUdFX01BU0spKSB7Ci0JCQl1bnNpZ25lZCBsb25nIGt2aXJ0ID0gKHVuc2lnbmVkIGxvbmcpIG1hcC0+aGFuZGxlOworCQkJdW5zaWduZWQgbG9uZyBrdmlydCA9ICh1bnNpZ25lZCBsb25nKW1hcC0+aGFuZGxlOwogCiAJCQlpZiAoKGt2aXJ0ICYgKFNITUxCQSAtIDEpKSAhPSAoYWRkciAmIChTSE1MQkEgLSAxKSkpIHsKIAkJCQl1bnNpZ25lZCBsb25nIGtvZmYsIGFvZmY7CkBAIC0yMDcsOSArMjA4LDkgQEAKIAlyZXR1cm4gYWRkcjsKIH0KIAotc3RhdGljIGludCBmZmJfcHJlc2V0dXAoZHJtX2RldmljZV90ICpkZXYpCitzdGF0aWMgaW50IGZmYl9wcmVzZXR1cChkcm1fZGV2aWNlX3QgKiBkZXYpCiB7Ci0JZmZiX2Rldl9wcml2X3QJKmZmYl9wcml2OworCWZmYl9kZXZfcHJpdl90ICpmZmJfcHJpdjsKIAlpbnQgcmV0ID0gMDsKIAlpbnQgaSA9IDA7CiAKQEAgLTIyNCwxNCArMjI1LDExIEBACiAJbWVtc2V0KGZmYl9wcml2LCAwLCBzaXplb2YoKmZmYl9wcml2KSk7CiAJZGV2LT5kZXZfcHJpdmF0ZSA9IGZmYl9wcml2OwogCi0JcmV0ID0gZmZiX2luaXRfb25lKGRldiwKLQkJCSAgIGZmYl9wb3NpdGlvbltpXS5ub2RlLAotCQkJICAgZmZiX3Bvc2l0aW9uW2ldLnJvb3QsCi0JCQkgICBpKTsKKwlyZXQgPSBmZmJfaW5pdF9vbmUoZGV2LCBmZmJfcG9zaXRpb25baV0ubm9kZSwgZmZiX3Bvc2l0aW9uW2ldLnJvb3QsIGkpOwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIGZmYl9kcml2ZXJfcmVsZWFzZShkcm1fZGV2aWNlX3QgKmRldiwgc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgdm9pZCBmZmJfZHJpdmVyX3JlbGVhc2UoZHJtX2RldmljZV90ICogZGV2LCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKIAlmZmJfZGV2X3ByaXZfdCAqZnByaXYgPSAoZmZiX2Rldl9wcml2X3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKIAlpbnQgY29udGV4dCA9IF9EUk1fTE9DS0lOR19DT05URVhUKGRldi0+bG9jay5od19sb2NrLT5sb2NrKTsKQEAgLTIzOSw4NCArMjM3LDgyIEBACiAKIAlpZHggPSBjb250ZXh0IC0gMTsKIAlpZiAoZnByaXYgJiYKLQkgICAgY29udGV4dCAhPSBEUk1fS0VSTkVMX0NPTlRFWFQgJiYKLQkgICAgZnByaXYtPmh3X3N0YXRlW2lkeF0gIT0gTlVMTCkgeworCSAgICBjb250ZXh0ICE9IERSTV9LRVJORUxfQ09OVEVYVCAmJiBmcHJpdi0+aHdfc3RhdGVbaWR4XSAhPSBOVUxMKSB7CiAJCWtmcmVlKGZwcml2LT5od19zdGF0ZVtpZHhdKTsKIAkJZnByaXYtPmh3X3N0YXRlW2lkeF0gPSBOVUxMOwotCX0JCisJfQogfQogCi1zdGF0aWMgdm9pZCBmZmJfZHJpdmVyX3ByZXRha2Vkb3duKGRybV9kZXZpY2VfdCAqZGV2KQorc3RhdGljIHZvaWQgZmZiX2RyaXZlcl9wcmV0YWtlZG93bihkcm1fZGV2aWNlX3QgKiBkZXYpCiB7Ci0JaWYgKGRldi0+ZGV2X3ByaXZhdGUpIGtmcmVlKGRldi0+ZGV2X3ByaXZhdGUpOworCWlmIChkZXYtPmRldl9wcml2YXRlKQorCQlrZnJlZShkZXYtPmRldl9wcml2YXRlKTsKIH0KIAotc3RhdGljIGludCBmZmJfZHJpdmVyX3Bvc3RjbGVhbnVwKGRybV9kZXZpY2VfdCAqZGV2KQorc3RhdGljIGludCBmZmJfZHJpdmVyX3Bvc3RjbGVhbnVwKGRybV9kZXZpY2VfdCAqIGRldikKIHsKLQlpZiAoZmZiX3Bvc2l0aW9uICE9IE5VTEwpIGtmcmVlKGZmYl9wb3NpdGlvbik7CisJaWYgKGZmYl9wb3NpdGlvbiAhPSBOVUxMKQorCQlrZnJlZShmZmJfcG9zaXRpb24pOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBmZmJfZHJpdmVyX2tlcm5lbF9jb250ZXh0X3N3aXRjaF91bmxvY2soc3RydWN0IGRybV9kZXZpY2UgKmRldiwgZHJtX2xvY2tfdCAqbG9jaykKK3N0YXRpYyB2b2lkIGZmYl9kcml2ZXJfa2VybmVsX2NvbnRleHRfc3dpdGNoX3VubG9jayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQkJICAgIGRybV9sb2NrX3QgKiBsb2NrKQogewogCWRldi0+bG9jay5maWxwID0gMDsKIAl7CiAJCV9fdm9sYXRpbGVfXyB1bnNpZ25lZCBpbnQgKnBsb2NrID0gJmRldi0+bG9jay5od19sb2NrLT5sb2NrOwogCQl1bnNpZ25lZCBpbnQgb2xkLCBuZXcsIHByZXYsIGN0eDsKLQkJCisKIAkJY3R4ID0gbG9jay0+Y29udGV4dDsKIAkJZG8gewotCQkJb2xkICA9ICpwbG9jazsKLQkJCW5ldyAgPSBjdHg7CisJCQlvbGQgPSAqcGxvY2s7CisJCQluZXcgPSBjdHg7CiAJCQlwcmV2ID0gY21weGNoZyhwbG9jaywgb2xkLCBuZXcpOwogCQl9IHdoaWxlIChwcmV2ICE9IG9sZCk7CiAJfQogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZGV2LT5sb2NrLmxvY2tfcXVldWUpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBmZmJfZHJpdmVyX2dldF9tYXBfb2ZzKGRybV9tYXBfdCAqbWFwKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgZmZiX2RyaXZlcl9nZXRfbWFwX29mcyhkcm1fbWFwX3QgKiBtYXApCiB7CiAJcmV0dXJuIChtYXAtPm9mZnNldCAmIDB4ZmZmZmZmZmYpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBmZmJfZHJpdmVyX2dldF9yZWdfb2ZzKGRybV9kZXZpY2VfdCAqZGV2KQorc3RhdGljIHVuc2lnbmVkIGxvbmcgZmZiX2RyaXZlcl9nZXRfcmVnX29mcyhkcm1fZGV2aWNlX3QgKiBkZXYpCiB7Ci0gICAgICAgZmZiX2Rldl9wcml2X3QgKmZmYl9wcml2ID0gKGZmYl9kZXZfcHJpdl90ICopZGV2LT5kZXZfcHJpdmF0ZTsKLSAgICAgICAKLSAgICAgICBpZiAoZmZiX3ByaXYpCi0gICAgICAgICAgICAgICByZXR1cm4gZmZiX3ByaXYtPmNhcmRfcGh5c19iYXNlOwotICAgICAgIAotICAgICAgIHJldHVybiAwOwotfQorCWZmYl9kZXZfcHJpdl90ICpmZmJfcHJpdiA9IChmZmJfZGV2X3ByaXZfdCAqKSBkZXYtPmRldl9wcml2YXRlOwogCi1zdGF0aWMgaW50IHBvc3Rpbml0KCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzICkgCi17Ci0JRFJNX0lORk8oICJJbml0aWFsaXplZCAlcyAlZC4lZC4lZCAlcyBvbiBtaW5vciAlZFxuIiwKLQkJRFJJVkVSX05BTUUsCi0JCURSSVZFUl9NQUpPUiwKLQkJRFJJVkVSX01JTk9SLAotCQlEUklWRVJfUEFUQ0hMRVZFTCwKLQkJRFJJVkVSX0RBVEUsCi0JCWRldi0+bWlub3IKLQkJKTsKKwlpZiAoZmZiX3ByaXYpCisJCXJldHVybiBmZmJfcHJpdi0+Y2FyZF9waHlzX2Jhc2U7CisKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2ZXJzaW9uKCBkcm1fdmVyc2lvbl90ICp2ZXJzaW9uICkKK3N0YXRpYyBpbnQgcG9zdGluaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlEUk1fSU5GTygiSW5pdGlhbGl6ZWQgJXMgJWQuJWQuJWQgJXMgb24gbWlub3IgJWRcbiIsCisJCSBEUklWRVJfTkFNRSwKKwkJIERSSVZFUl9NQUpPUiwKKwkJIERSSVZFUl9NSU5PUiwgRFJJVkVSX1BBVENITEVWRUwsIERSSVZFUl9EQVRFLCBkZXYtPm1pbm9yKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2ZXJzaW9uKGRybV92ZXJzaW9uX3QgKiB2ZXJzaW9uKQogewogCWludCBsZW47CiAKIAl2ZXJzaW9uLT52ZXJzaW9uX21ham9yID0gRFJJVkVSX01BSk9SOwogCXZlcnNpb24tPnZlcnNpb25fbWlub3IgPSBEUklWRVJfTUlOT1I7CiAJdmVyc2lvbi0+dmVyc2lvbl9wYXRjaGxldmVsID0gRFJJVkVSX1BBVENITEVWRUw7Ci0JRFJNX0NPUFkoIHZlcnNpb24tPm5hbWUsIERSSVZFUl9OQU1FICk7Ci0JRFJNX0NPUFkoIHZlcnNpb24tPmRhdGUsIERSSVZFUl9EQVRFICk7Ci0JRFJNX0NPUFkoIHZlcnNpb24tPmRlc2MsIERSSVZFUl9ERVNDICk7CisJRFJNX0NPUFkodmVyc2lvbi0+bmFtZSwgRFJJVkVSX05BTUUpOworCURSTV9DT1BZKHZlcnNpb24tPmRhdGUsIERSSVZFUl9EQVRFKTsKKwlEUk1fQ09QWSh2ZXJzaW9uLT5kZXNjLCBEUklWRVJfREVTQyk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBkcm1faW9jdGxfZGVzY190IGlvY3Rsc1tdID0gewotCQorCiB9OwogCiBzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIgZHJpdmVyID0gewpAQCAtMzM1LDE0ICszMzEsMTUgQEAKIAkuaW9jdGxzID0gaW9jdGxzLAogCS5udW1faW9jdGxzID0gRFJNX0FSUkFZX1NJWkUoaW9jdGxzKSwKIAkuZm9wcyA9IHsKLQkJLm93bmVyID0gVEhJU19NT0RVTEUsCi0JCS5vcGVuID0gZHJtX29wZW4sCi0JCS5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCi0JCS5pb2N0bCA9IGRybV9pb2N0bCwKLQkJLm1tYXAgPSBkcm1fbW1hcCwKLQkJLnBvbGwgPSBkcm1fcG9sbCwKLQkJLmZhc3luYyA9IGRybV9mYXN5bmMsCi0JfSwKKwkJIC5vd25lciA9IFRISVNfTU9EVUxFLAorCQkgLm9wZW4gPSBkcm1fb3BlbiwKKwkJIC5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCisJCSAuaW9jdGwgPSBkcm1faW9jdGwsCisJCSAubW1hcCA9IGRybV9tbWFwLAorCQkgLnBvbGwgPSBkcm1fcG9sbCwKKwkJIC5mYXN5bmMgPSBkcm1fZmFzeW5jLAorCQkgfQorCSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGZmYl9pbml0KHZvaWQpCkBAIC0zNTcsNiArMzU0LDYgQEAKIG1vZHVsZV9pbml0KGZmYl9pbml0KTsKIG1vZHVsZV9leGl0KGZmYl9leGl0KTsKIAotTU9EVUxFX0FVVEhPUiggRFJJVkVSX0FVVEhPUiApOwotTU9EVUxFX0RFU0NSSVBUSU9OKCBEUklWRVJfREVTQyApOworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIGFuZCBhZGRpdGlvbmFsIHJpZ2h0cyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9mZmJfZHJ2LmggYi9kcml2ZXJzL2NoYXIvZHJtL2ZmYl9kcnYuaAppbmRleCA4YmY3ZjFlLi41ODJhZmE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2ZmYl9kcnYuaAorKysgYi9kcml2ZXJzL2NoYXIvZHJtL2ZmYl9kcnYuaApAQCAtNSw3ICs1LDcgQEAKICAqLwogCiAvKiBBdXhpbGxpYXJ5IGNsaXBzLiAqLwotdHlwZWRlZiBzdHJ1Y3QgIHsKK3R5cGVkZWYgc3RydWN0IHsKIAl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWluOwogCXZvbGF0aWxlIHVuc2lnbmVkIGludCBtYXg7CiB9IGZmYl9hdXhjbGlwLCAqZmZiX2F1eGNsaXBQdHI7CkBAIC0xNSwxNzIgKzE1LDI2NSBAQAogCS8qIE5leHQgdmVydGV4IHJlZ2lzdGVycywgb24gdGhlIHJpZ2h0IHdlIGxpc3Qgd2hpY2ggZHJhd29wcwogCSAqIHVzZSBzYWlkIHJlZ2lzdGVyIGFuZCB0aGUgbG9naWNhbCBuYW1lIHRoZSByZWdpc3RlciBoYXMgaW4KIAkgKiB0aGF0IGNvbnRleHQuCi0JICovCQkJCQkvKiBERVNDUklQVElPTgkJRFJBV09QKE5BTUUpCSovCi0vKjB4MDAqL3Vuc2lnbmVkIGludAkJcGFkMVszXTsJLyogUmVzZXJ2ZWQJCQkJKi8KLS8qMHgwYyovdm9sYXRpbGUgdW5zaWduZWQgaW50CWFscGhhOwkJLyogQUxQSEEgVHJhbnNwYXJlbmN5CQkJKi8KLS8qMHgxMCovdm9sYXRpbGUgdW5zaWduZWQgaW50CXJlZDsJCS8qIFJFRAkJCQkJKi8KLS8qMHgxNCovdm9sYXRpbGUgdW5zaWduZWQgaW50CWdyZWVuOwkJLyogR1JFRU4JCQkJKi8KLS8qMHgxOCovdm9sYXRpbGUgdW5zaWduZWQgaW50CWJsdWU7CQkvKiBCTFVFCQkJCQkqLwotLyoweDFjKi92b2xhdGlsZSB1bnNpZ25lZCBpbnQJejsJCS8qIERFUFRICQkJCSovCi0vKjB4MjAqL3ZvbGF0aWxlIHVuc2lnbmVkIGludAl5OwkJLyogWQkJCXRyaWFuZ2xlKERPWUYpCSovCi0JCQkJCQkvKiAgICAgICAgICAgICAgICAgICAgICBhYWRvdChEWUYpCSovCi0JCQkJCQkvKiAgICAgICAgICAgICAgICAgICAgICBkZGxpbmUoRFlGKQkqLwotCQkJCQkJLyogICAgICAgICAgICAgICAgICAgICAgYWFsaW5lKERZRikJKi8KLS8qMHgyNCovdm9sYXRpbGUgdW5zaWduZWQgaW50CXg7CQkvKiBYCQkJdHJpYW5nbGUoRE9YRikJKi8KLQkJCQkJCS8qICAgICAgICAgICAgICAgICAgICAgIGFhZG90KERYRikJKi8KLQkJCQkJCS8qICAgICAgICAgICAgICAgICAgICAgIGRkbGluZShEWEYpCSovCi0JCQkJCQkvKiAgICAgICAgICAgICAgICAgICAgICBhYWxpbmUoRFhGKQkqLwotLyoweDI4Ki91bnNpZ25lZCBpbnQJCXBhZDJbMl07CS8qIFJlc2VydmVkCQkJCSovCi0vKjB4MzAqL3ZvbGF0aWxlIHVuc2lnbmVkIGludAlyeWY7CQkvKiBZIChhbGlhcyB0byBET1lGKQlkZGxpbmUoUllGKQkqLwotCQkJCQkJLyoJCQlhYWxpbmUoUllGKQkqLwotCQkJCQkJLyoJCQl0cmlhbmdsZShSWUYpCSovCi0vKjB4MzQqL3ZvbGF0aWxlIHVuc2lnbmVkIGludAlyeGY7CQkvKiBYCQkJZGRsaW5lKFJYRikJKi8KLQkJCQkJCS8qCQkJYWFsaW5lKFJYRikJKi8KLQkJCQkJCS8qCQkJdHJpYW5nbGUoUlhGKQkqLwotLyoweDM4Ki91bnNpZ25lZCBpbnQJCXBhZDNbMl07CS8qIFJlc2VydmVkCQkJCSovCi0vKjB4NDAqL3ZvbGF0aWxlIHVuc2lnbmVkIGludAlkbXlmOwkJLyogWSAoYWxpYXMgdG8gRE9ZRikJdHJpYW5nbGUoRE1ZRikJKi8KLS8qMHg0NCovdm9sYXRpbGUgdW5zaWduZWQgaW50CWRteGY7CQkvKiBYCQkJdHJpYW5nbGUoRE1YRikJKi8KLS8qMHg0OCovdW5zaWduZWQgaW50CQlwYWQ0WzJdOwkvKiBSZXNlcnZlZAkJCQkqLwotLyoweDUwKi92b2xhdGlsZSB1bnNpZ25lZCBpbnQJZWJ5aTsJCS8qIFkgKGFsaWFzIHRvIFJZSSkJcG9seWdvbihFQllJKQkqLwotLyoweDU0Ki92b2xhdGlsZSB1bnNpZ25lZCBpbnQJZWJ4aTsJCS8qIFgJCQlwb2x5Z29uKEVCWEkpCSovCi0vKjB4NTgqL3Vuc2lnbmVkIGludAkJcGFkNVsyXTsJLyogUmVzZXJ2ZWQJCQkJKi8KLS8qMHg2MCovdm9sYXRpbGUgdW5zaWduZWQgaW50CWJ5OwkJLyogWQkJCWJybGluZShSWUkpCSovCi0JCQkJCQkvKgkJCWZhc3RmaWxsKE9QKQkqLwotCQkJCQkJLyoJCQlwb2x5Z29uKFlJKQkqLwotCQkJCQkJLyoJCQlyZWN0YW5nbGUoWUkpCSovCi0JCQkJCQkvKgkJCWJjb3B5KFNSQ1kpCSovCi0JCQkJCQkvKgkJCXZzY3JvbGwoU1JDWSkJKi8KLS8qMHg2NCovdm9sYXRpbGUgdW5zaWduZWQgaW50CWJ4OwkJLyogWAkJCWJybGluZShSWEkpCSovCi0JCQkJCQkvKgkJCXBvbHlnb24oWEkpCSovCi0JCQkJCQkvKgkJCXJlY3RhbmdsZShYSSkJKi8KLQkJCQkJCS8qCQkJYmNvcHkoU1JDWCkJKi8KLQkJCQkJCS8qCQkJdnNjcm9sbChTUkNYKQkqLwotCQkJCQkJLyoJCQlmYXN0ZmlsbChHTykJKi8KLS8qMHg2OCovdm9sYXRpbGUgdW5zaWduZWQgaW50CWR5OwkJLyogZGVzdGluYXRpb24gWQlmYXN0ZmlsbChEU1RZKQkqLwotCQkJCQkJLyoJCQliY29weShEU1JZKQkqLwotCQkJCQkJLyoJCQl2c2Nyb2xsKERTUlkpCSovCi0vKjB4NmMqL3ZvbGF0aWxlIHVuc2lnbmVkIGludAlkeDsJCS8qIGRlc3RpbmF0aW9uIFgJZmFzdGZpbGwoRFNUWCkJKi8KLQkJCQkJCS8qCQkJYmNvcHkoRFNUWCkJKi8KLQkJCQkJCS8qCQkJdnNjcm9sbChEU1RYKQkqLwotLyoweDcwKi92b2xhdGlsZSB1bnNpZ25lZCBpbnQJYmg7CQkvKiBZIChhbGlhcyB0byBSWUkpCWJybGluZShEWUkpCSovCi0JCQkJCQkvKgkJCWRvdChEWUkpCSovCi0JCQkJCQkvKgkJCXBvbHlnb24oRVRZSSkJKi8KLQkJCQkJCS8qIEhlaWdodAkJZmFzdGZpbGwoSCkJKi8KLQkJCQkJCS8qCQkJYmNvcHkoSCkJKi8KLQkJCQkJCS8qCQkJdnNjcm9sbChIKQkqLwotCQkJCQkJLyogWSBjb3VudAkJZmFzdGZpbGwoTlkpCSovCi0vKjB4NzQqL3ZvbGF0aWxlIHVuc2lnbmVkIGludAlidzsJCS8qIFgJCQlkb3QoRFhJKQkqLwotCQkJCQkJLyoJCQlicmxpbmUoRFhJKQkqLwotCQkJCQkJLyoJCQlwb2x5Z29uKEVUWEkpCSovCi0JCQkJCQkvKgkJCWZhc3RmaWxsKFcpCSovCi0JCQkJCQkvKgkJCWJjb3B5KFcpCSovCi0JCQkJCQkvKgkJCXZzY3JvbGwoVykJKi8KLQkJCQkJCS8qCQkJZmFzdGZpbGwoTlgpCSovCi0vKjB4NzgqL3Vuc2lnbmVkIGludAkJcGFkNlsyXTsJLyogUmVzZXJ2ZWQJCQkJKi8KLS8qMHg4MCovdW5zaWduZWQgaW50CQlwYWQ3WzMyXTsJLyogUmVzZXJ2ZWQJCQkJKi8KLQkKLQkvKiBTZXR1cCBVbml0J3MgdmVydGV4IHN0YXRlIHJlZ2lzdGVyICovCi0vKjEwMCovCXZvbGF0aWxlIHVuc2lnbmVkIGludAlzdXZ0eDsKLS8qMTA0Ki8JdW5zaWduZWQgaW50CQlwYWQ4WzYzXTsJLyogUmVzZXJ2ZWQJCQkJKi8KLQkKLQkvKiBGcmFtZSBCdWZmZXIgQ29udHJvbCBSZWdpc3RlcnMgKi8KLS8qMjAwKi8Jdm9sYXRpbGUgdW5zaWduZWQgaW50CXBwYzsJCS8qIFBpeGVsIFByb2Nlc3NvciBDb250cm9sCQkqLwotLyoyMDQqLwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQJd2lkOwkJLyogQ3VycmVudCBXSUQJCQkJKi8KLS8qMjA4Ki8Jdm9sYXRpbGUgdW5zaWduZWQgaW50CWZnOwkJLyogRkcgZGF0YQkJCQkqLwotLyoyMGMqLwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQJYmc7CQkvKiBCRyBkYXRhCQkJCSovCi0vKjIxMCovCXZvbGF0aWxlIHVuc2lnbmVkIGludAljb25zdHk7CQkvKiBDb25zdGFudCBZCQkJCSovCi0vKjIxNCovCXZvbGF0aWxlIHVuc2lnbmVkIGludAljb25zdHo7CQkvKiBDb25zdGFudCBaCQkJCSovCi0vKjIxOCovCXZvbGF0aWxlIHVuc2lnbmVkIGludAl4Y2xpcDsJCS8qIFggQ2xpcAkJCQkqLwotLyoyMWMqLwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQJZGNzczsJCS8qIERlcHRoIEN1ZSBTY2FsZSBTbG9wZQkJKi8KLS8qMjIwKi8Jdm9sYXRpbGUgdW5zaWduZWQgaW50CXZjbGlwbWluOwkvKiBWaWV3Y2xpcCBYWSBNaW4gQm91bmRzCQkqLwotLyoyMjQqLwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQJdmNsaXBtYXg7CS8qIFZpZXdjbGlwIFhZIE1heCBCb3VuZHMJCSovCi0vKjIyOCovCXZvbGF0aWxlIHVuc2lnbmVkIGludAl2Y2xpcHptaW47CS8qIFZpZXdjbGlwIFogTWluIEJvdW5kcwkJKi8KLS8qMjJjKi8Jdm9sYXRpbGUgdW5zaWduZWQgaW50CXZjbGlwem1heDsJLyogVmlld2NsaXAgWiBNYXggQm91bmRzCQkqLwotLyoyMzAqLwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQJZGNzZjsJCS8qIERlcHRoIEN1ZSBTY2FsZSBGcm9udCBCb3VuZAkJKi8KLS8qMjM0Ki8Jdm9sYXRpbGUgdW5zaWduZWQgaW50CWRjc2I7CQkvKiBEZXB0aCBDdWUgU2NhbGUgQmFjayBCb3VuZAkJKi8KLS8qMjM4Ki8Jdm9sYXRpbGUgdW5zaWduZWQgaW50CWRjemY7CQkvKiBEZXB0aCBDdWUgWiBGcm9udAkJCSovCi0vKjIzYyovCXZvbGF0aWxlIHVuc2lnbmVkIGludAlkY3piOwkJLyogRGVwdGggQ3VlIFogQmFjawkJCSovCi0vKjI0MCovCXVuc2lnbmVkIGludAkJcGFkOTsJCS8qIFJlc2VydmVkCQkJCSovCi0vKjI0NCovCXZvbGF0aWxlIHVuc2lnbmVkIGludAlibGVuZGM7CQkvKiBBbHBoYSBCbGVuZCBDb250cm9sCQkJKi8KLS8qMjQ4Ki8Jdm9sYXRpbGUgdW5zaWduZWQgaW50CWJsZW5kYzE7CS8qIEFscGhhIEJsZW5kIENvbG9yIDEJCQkqLwotLyoyNGMqLwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQJYmxlbmRjMjsJLyogQWxwaGEgQmxlbmQgQ29sb3IgMgkJCSovCi0vKjI1MCovCXZvbGF0aWxlIHVuc2lnbmVkIGludAlmYnJhbWl0YzsJLyogRkIgUkFNIEludGVybGVhdmUgVGVzdCBDb250cm9sCSovCi0vKjI1NCovCXZvbGF0aWxlIHVuc2lnbmVkIGludAlmYmM7CQkvKiBGcmFtZSBCdWZmZXIgQ29udHJvbAkJCSovCi0vKjI1OCovCXZvbGF0aWxlIHVuc2lnbmVkIGludAlyb3A7CQkvKiBSYXN0ZXIgT1BlcmF0aW9uCQkJKi8KLS8qMjVjKi8Jdm9sYXRpbGUgdW5zaWduZWQgaW50CWNtcDsJCS8qIEZyYW1lIEJ1ZmZlciBDb21wYXJlCQkJKi8KLS8qMjYwKi8Jdm9sYXRpbGUgdW5zaWduZWQgaW50CW1hdGNoYWI7CS8qIEJ1ZmZlciBBQiBNYXRjaCBNYXNrCQkJKi8KLS8qMjY0Ki8Jdm9sYXRpbGUgdW5zaWduZWQgaW50CW1hdGNoYzsJCS8qIEJ1ZmZlciBDKFlaKSBNYXRjaCBNYXNrCQkqLwotLyoyNjgqLwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQJbWFnbmFiOwkJLyogQnVmZmVyIEFCIE1hZ25pdHVkZSBNYXNrCQkqLwotLyoyNmMqLwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQJbWFnbmM7CQkvKiBCdWZmZXIgQyhZWikgTWFnbml0dWRlIE1hc2sJCSovCi0vKjI3MCovCXZvbGF0aWxlIHVuc2lnbmVkIGludAlmYmNmZzA7CQkvKiBGcmFtZSBCdWZmZXIgQ29uZmlnIDAJCSovCi0vKjI3NCovCXZvbGF0aWxlIHVuc2lnbmVkIGludAlmYmNmZzE7CQkvKiBGcmFtZSBCdWZmZXIgQ29uZmlnIDEJCSovCi0vKjI3OCovCXZvbGF0aWxlIHVuc2lnbmVkIGludAlmYmNmZzI7CQkvKiBGcmFtZSBCdWZmZXIgQ29uZmlnIDIJCSovCi0vKjI3YyovCXZvbGF0aWxlIHVuc2lnbmVkIGludAlmYmNmZzM7CQkvKiBGcmFtZSBCdWZmZXIgQ29uZmlnIDMJCSovCi0vKjI4MCovCXZvbGF0aWxlIHVuc2lnbmVkIGludAlwcGNmZzsJCS8qIFBpeGVsIFByb2Nlc3NvciBDb25maWcJCSovCi0vKjI4NCovCXZvbGF0aWxlIHVuc2lnbmVkIGludAlwaWNrOwkJLyogUGlja2luZyBDb250cm9sCQkJKi8KLS8qMjg4Ki8Jdm9sYXRpbGUgdW5zaWduZWQgaW50CWZpbGxtb2RlOwkvKiBGaWxsTW9kZQkJCQkqLwotLyoyOGMqLwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQJZmJyYW13YWM7CS8qIEZCIFJBTSBXcml0ZSBBZGRyZXNzIENvbnRyb2wJCSovCi0vKjI5MCovCXZvbGF0aWxlIHVuc2lnbmVkIGludAlwbWFzazsJCS8qIFJHQiBQbGFuZU1hc2sJCQkqLwotLyoyOTQqLwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQJeHBtYXNrOwkJLyogWCBQbGFuZU1hc2sJCQkJKi8KLS8qMjk4Ki8Jdm9sYXRpbGUgdW5zaWduZWQgaW50CXlwbWFzazsJCS8qIFkgUGxhbmVNYXNrCQkJCSovCi0vKjI5YyovCXZvbGF0aWxlIHVuc2lnbmVkIGludAl6cG1hc2s7CQkvKiBaIFBsYW5lTWFzawkJCQkqLwotLyoyYTAqLwlmZmJfYXV4Y2xpcAkJYXV4Y2xpcFs0XTsgCS8qIEF1eGlsbGlhcnkgVmlld3BvcnQgQ2xpcAkJKi8KLQkKLQkvKiBOZXcgM2RSQU0gSUlJIHN1cHBvcnQgcmVncyAqLwotLyoyYzAqLwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQJcmF3YmxlbmQyOwotLyoyYzQqLwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQJcmF3cHJlYmxlbmQ7Ci0vKjJjOCovCXZvbGF0aWxlIHVuc2lnbmVkIGludAlyYXdzdGVuY2lsOwotLyoyY2MqLwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQJcmF3c3RlbmNpbGN0bDsKLS8qMmQwKi8Jdm9sYXRpbGUgdW5zaWduZWQgaW50CXRocmVlZHJhbTE7Ci0vKjJkNCovCXZvbGF0aWxlIHVuc2lnbmVkIGludAl0aHJlZWRyYW0yOwotLyoyZDgqLwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQJcGFzc2luOwotLyoyZGMqLwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQJcmF3Y2xyZGVwdGg7Ci0vKjJlMCovCXZvbGF0aWxlIHVuc2lnbmVkIGludAlyYXdwbWFzazsKLS8qMmU0Ki8Jdm9sYXRpbGUgdW5zaWduZWQgaW50CXJhd2NzcmM7Ci0vKjJlOCovCXZvbGF0aWxlIHVuc2lnbmVkIGludAlyYXdtYXRjaDsKLS8qMmVjKi8Jdm9sYXRpbGUgdW5zaWduZWQgaW50CXJhd21hZ247Ci0vKjJmMCovCXZvbGF0aWxlIHVuc2lnbmVkIGludAlyYXdyb3BibGVuZDsKLS8qMmY0Ki8Jdm9sYXRpbGUgdW5zaWduZWQgaW50CXJhd2NtcDsKLS8qMmY4Ki8Jdm9sYXRpbGUgdW5zaWduZWQgaW50CXJhd3dhYzsKLS8qMmZjKi8Jdm9sYXRpbGUgdW5zaWduZWQgaW50CWZicmFtaWQ7Ci0JCi0vKjMwMCovCXZvbGF0aWxlIHVuc2lnbmVkIGludAlkcmF3b3A7CQkvKiBEcmF3IE9QZXJhdGlvbgkJCSovCi0vKjMwNCovCXVuc2lnbmVkIGludAkJcGFkMTBbMl07CS8qIFJlc2VydmVkCQkJCSovCi0vKjMwYyovCXZvbGF0aWxlIHVuc2lnbmVkIGludAlscGF0OwkJLyogTGluZSBQYXR0ZXJuIGNvbnRyb2wJCQkqLwotLyozMTAqLwl1bnNpZ25lZCBpbnQJCXBhZDExOwkJLyogUmVzZXJ2ZWQJCQkJKi8KLS8qMzE0Ki8Jdm9sYXRpbGUgdW5zaWduZWQgaW50CWZvbnR4eTsJCS8qIFhZIEZvbnQgY29vcmRpbmF0ZQkJCSovCi0vKjMxOCovCXZvbGF0aWxlIHVuc2lnbmVkIGludAlmb250dzsJCS8qIEZvbnQgV2lkdGgJCQkJKi8KLS8qMzFjKi8Jdm9sYXRpbGUgdW5zaWduZWQgaW50CWZvbnRpbmM7CS8qIEZvbnQgSW5jcmVtZW50CQkJKi8KLS8qMzIwKi8Jdm9sYXRpbGUgdW5zaWduZWQgaW50CWZvbnQ7CQkvKiBGb250IGJpdHMJCQkJKi8KLS8qMzI0Ki8JdW5zaWduZWQgaW50CQlwYWQxMlszXTsJLyogUmVzZXJ2ZWQJCQkJKi8KLS8qMzMwKi8Jdm9sYXRpbGUgdW5zaWduZWQgaW50CWJsZW5kMjsKLS8qMzM0Ki8Jdm9sYXRpbGUgdW5zaWduZWQgaW50CXByZWJsZW5kOwotLyozMzgqLwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQJc3RlbmNpbDsKLS8qMzNjKi8Jdm9sYXRpbGUgdW5zaWduZWQgaW50CXN0ZW5jaWxjdGw7CisJICovLyogREVTQ1JJUFRJT04gICAgICAgICAgRFJBV09QKE5BTUUpICAgICovCisJCQkJCS8qMHgwMCovIHVuc2lnbmVkIGludCBwYWQxWzNdOworCQkJCQkvKiBSZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJCS8qMHgwYyovIHZvbGF0aWxlIHVuc2lnbmVkIGludCBhbHBoYTsKKwkJCQkJCS8qIEFMUEhBIFRyYW5zcGFyZW5jeSAgICAgICAgICAgICAgICAgICAqLworCQkJCQkJLyoweDEwKi8gdm9sYXRpbGUgdW5zaWduZWQgaW50IHJlZDsKKwkJCQkJCS8qIFJFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQkJCQkJLyoweDE0Ki8gdm9sYXRpbGUgdW5zaWduZWQgaW50IGdyZWVuOworCQkJCQkJLyogR1JFRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJCQkvKjB4MTgqLyB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgYmx1ZTsKKwkJCQkJCS8qIEJMVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQkJCQkJLyoweDFjKi8gdm9sYXRpbGUgdW5zaWduZWQgaW50IHo7CisJCQkJCQkvKiBERVBUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJCS8qMHgyMCovIHZvbGF0aWxlIHVuc2lnbmVkIGludCB5OworCQkJCQkJLyogWSAgICAgICAgICAgICAgICAgICAgdHJpYW5nbGUoRE9ZRikgICovCisJLyogICAgICAgICAgICAgICAgICAgICAgYWFkb3QoRFlGKSAgICAgICovCisJLyogICAgICAgICAgICAgICAgICAgICAgZGRsaW5lKERZRikgICAgICovCisJLyogICAgICAgICAgICAgICAgICAgICAgYWFsaW5lKERZRikgICAgICovCisJCQkJCQkvKjB4MjQqLyB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgeDsKKwkJCQkJCS8qIFggICAgICAgICAgICAgICAgICAgIHRyaWFuZ2xlKERPWEYpICAqLworCS8qICAgICAgICAgICAgICAgICAgICAgIGFhZG90KERYRikgICAgICAqLworCS8qICAgICAgICAgICAgICAgICAgICAgIGRkbGluZShEWEYpICAgICAqLworCS8qICAgICAgICAgICAgICAgICAgICAgIGFhbGluZShEWEYpICAgICAqLworCQkJCQkvKjB4MjgqLyB1bnNpZ25lZCBpbnQgcGFkMlsyXTsKKwkJCQkJLyogUmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJCQkvKjB4MzAqLyB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgcnlmOworCQkJCQkJLyogWSAoYWxpYXMgdG8gRE9ZRikgICAgZGRsaW5lKFJZRikgICAgICovCisJLyogICAgICAgICAgICAgICAgICAgICAgYWFsaW5lKFJZRikgICAgICovCisJLyogICAgICAgICAgICAgICAgICAgICAgdHJpYW5nbGUoUllGKSAgICovCisJCQkJCQkvKjB4MzQqLyB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgcnhmOworCQkJCQkJLyogWCAgICAgICAgICAgICAgICAgICAgZGRsaW5lKFJYRikgICAgICovCisJLyogICAgICAgICAgICAgICAgICAgICAgYWFsaW5lKFJYRikgICAgICovCisJLyogICAgICAgICAgICAgICAgICAgICAgdHJpYW5nbGUoUlhGKSAgICovCisJCQkJCS8qMHgzOCovIHVuc2lnbmVkIGludCBwYWQzWzJdOworCQkJCQkvKiBSZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJCS8qMHg0MCovIHZvbGF0aWxlIHVuc2lnbmVkIGludCBkbXlmOworCQkJCQkJLyogWSAoYWxpYXMgdG8gRE9ZRikgICAgdHJpYW5nbGUoRE1ZRikgICovCisJCQkJCQkvKjB4NDQqLyB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgZG14ZjsKKwkJCQkJCS8qIFggICAgICAgICAgICAgICAgICAgIHRyaWFuZ2xlKERNWEYpICAqLworCQkJCQkvKjB4NDgqLyB1bnNpZ25lZCBpbnQgcGFkNFsyXTsKKwkJCQkJLyogUmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJCQkvKjB4NTAqLyB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgZWJ5aTsKKwkJCQkJCS8qIFkgKGFsaWFzIHRvIFJZSSkgICAgIHBvbHlnb24oRUJZSSkgICAqLworCQkJCQkJLyoweDU0Ki8gdm9sYXRpbGUgdW5zaWduZWQgaW50IGVieGk7CisJCQkJCQkvKiBYICAgICAgICAgICAgICAgICAgICBwb2x5Z29uKEVCWEkpICAgKi8KKwkJCQkJLyoweDU4Ki8gdW5zaWduZWQgaW50IHBhZDVbMl07CisJCQkJCS8qIFJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQkJCQkJLyoweDYwKi8gdm9sYXRpbGUgdW5zaWduZWQgaW50IGJ5OworCQkJCQkJLyogWSAgICAgICAgICAgICAgICAgICAgYnJsaW5lKFJZSSkgICAgICovCisJLyogICAgICAgICAgICAgICAgICAgICAgZmFzdGZpbGwoT1ApICAgICovCisJLyogICAgICAgICAgICAgICAgICAgICAgcG9seWdvbihZSSkgICAgICovCisJLyogICAgICAgICAgICAgICAgICAgICAgcmVjdGFuZ2xlKFlJKSAgICovCisJLyogICAgICAgICAgICAgICAgICAgICAgYmNvcHkoU1JDWSkgICAgICovCisJLyogICAgICAgICAgICAgICAgICAgICAgdnNjcm9sbChTUkNZKSAgICovCisJCQkJCQkvKjB4NjQqLyB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgYng7CisJCQkJCQkvKiBYICAgICAgICAgICAgICAgICAgICBicmxpbmUoUlhJKSAgICAgKi8KKwkvKiAgICAgICAgICAgICAgICAgICAgICBwb2x5Z29uKFhJKSAgICAgKi8KKwkvKiAgICAgICAgICAgICAgICAgICAgICByZWN0YW5nbGUoWEkpICAgKi8KKwkvKiAgICAgICAgICAgICAgICAgICAgICBiY29weShTUkNYKSAgICAgKi8KKwkvKiAgICAgICAgICAgICAgICAgICAgICB2c2Nyb2xsKFNSQ1gpICAgKi8KKwkvKiAgICAgICAgICAgICAgICAgICAgICBmYXN0ZmlsbChHTykgICAgKi8KKwkJCQkJCS8qMHg2OCovIHZvbGF0aWxlIHVuc2lnbmVkIGludCBkeTsKKwkJCQkJCS8qIGRlc3RpbmF0aW9uIFkgICAgICAgIGZhc3RmaWxsKERTVFkpICAqLworCS8qICAgICAgICAgICAgICAgICAgICAgIGJjb3B5KERTUlkpICAgICAqLworCS8qICAgICAgICAgICAgICAgICAgICAgIHZzY3JvbGwoRFNSWSkgICAqLworCQkJCQkJLyoweDZjKi8gdm9sYXRpbGUgdW5zaWduZWQgaW50IGR4OworCQkJCQkJLyogZGVzdGluYXRpb24gWCAgICAgICAgZmFzdGZpbGwoRFNUWCkgICovCisJLyogICAgICAgICAgICAgICAgICAgICAgYmNvcHkoRFNUWCkgICAgICovCisJLyogICAgICAgICAgICAgICAgICAgICAgdnNjcm9sbChEU1RYKSAgICovCisJCQkJCQkvKjB4NzAqLyB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgYmg7CisJCQkJCQkvKiBZIChhbGlhcyB0byBSWUkpICAgICBicmxpbmUoRFlJKSAgICAgKi8KKwkvKiAgICAgICAgICAgICAgICAgICAgICBkb3QoRFlJKSAgICAgICAgKi8KKwkvKiAgICAgICAgICAgICAgICAgICAgICBwb2x5Z29uKEVUWUkpICAgKi8KKwkvKiBIZWlnaHQgICAgICAgICAgICAgICBmYXN0ZmlsbChIKSAgICAgKi8KKwkvKiAgICAgICAgICAgICAgICAgICAgICBiY29weShIKSAgICAgICAgKi8KKwkvKiAgICAgICAgICAgICAgICAgICAgICB2c2Nyb2xsKEgpICAgICAgKi8KKwkvKiBZIGNvdW50ICAgICAgICAgICAgICBmYXN0ZmlsbChOWSkgICAgKi8KKwkJCQkJCS8qMHg3NCovIHZvbGF0aWxlIHVuc2lnbmVkIGludCBidzsKKwkJCQkJCS8qIFggICAgICAgICAgICAgICAgICAgIGRvdChEWEkpICAgICAgICAqLworCS8qICAgICAgICAgICAgICAgICAgICAgIGJybGluZShEWEkpICAgICAqLworCS8qICAgICAgICAgICAgICAgICAgICAgIHBvbHlnb24oRVRYSSkgICAqLworCS8qICAgICAgICAgICAgICAgICAgICAgIGZhc3RmaWxsKFcpICAgICAqLworCS8qICAgICAgICAgICAgICAgICAgICAgIGJjb3B5KFcpICAgICAgICAqLworCS8qICAgICAgICAgICAgICAgICAgICAgIHZzY3JvbGwoVykgICAgICAqLworCS8qICAgICAgICAgICAgICAgICAgICAgIGZhc3RmaWxsKE5YKSAgICAqLworCQkJCQkvKjB4NzgqLyB1bnNpZ25lZCBpbnQgcGFkNlsyXTsKKwkJCQkJLyogUmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJCS8qMHg4MCovIHVuc2lnbmVkIGludCBwYWQ3WzMyXTsKKwkJCQkJLyogUmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKLS8qMzQwKi8JdW5zaWduZWQgaW50CQlwYWQxM1s0XTsJLyogUmVzZXJ2ZWQJCQkJKi8KLS8qMzUwKi8Jdm9sYXRpbGUgdW5zaWduZWQgaW50CWRjc3MxOwkJLyogRGVwdGggQ3VlIFNjYWxlIFNsb3BlIDEJCSovCi0vKjM1NCovCXZvbGF0aWxlIHVuc2lnbmVkIGludAlkY3NzMjsJCS8qIERlcHRoIEN1ZSBTY2FsZSBTbG9wZSAyCQkqLwotLyozNTgqLwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQJZGNzczM7CQkvKiBEZXB0aCBDdWUgU2NhbGUgU2xvcGUgMwkJKi8KLS8qMzVjKi8Jdm9sYXRpbGUgdW5zaWduZWQgaW50CXdpZHBtYXNrOwotLyozNjAqLwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQJZGNzMjsKLS8qMzY0Ki8Jdm9sYXRpbGUgdW5zaWduZWQgaW50CWRjczM7Ci0vKjM2OCovCXZvbGF0aWxlIHVuc2lnbmVkIGludAlkY3M0OwotLyozNmMqLwl1bnNpZ25lZCBpbnQJCXBhZDE0OwkJLyogUmVzZXJ2ZWQJCQkJKi8KLS8qMzcwKi8Jdm9sYXRpbGUgdW5zaWduZWQgaW50CWRjZDI7Ci0vKjM3NCovCXZvbGF0aWxlIHVuc2lnbmVkIGludAlkY2QzOwotLyozNzgqLwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQJZGNkNDsKLS8qMzdjKi8JdW5zaWduZWQgaW50CQlwYWQxNTsJCS8qIFJlc2VydmVkCQkJCSovCi0vKjM4MCovCXZvbGF0aWxlIHVuc2lnbmVkIGludAlwYXR0ZXJuWzMyXTsJLyogYXJlYSBQYXR0ZXJuCQkJCSovCi0vKjQwMCovCXVuc2lnbmVkIGludAkJcGFkMTZbOF07CS8qIFJlc2VydmVkCQkJCSovCi0vKjQyMCovCXZvbGF0aWxlIHVuc2lnbmVkIGludAlyZXNldDsJCS8qIGNoaXAgUkVTRVQJCQkJKi8KLS8qNDI0Ki8JdW5zaWduZWQgaW50CQlwYWQxN1syNDddOwkvKiBSZXNlcnZlZAkJCQkqLwotLyo4MDAqLwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQJZGV2aWQ7CQkvKiBEZXZpY2UgSUQJCQkJKi8KLS8qODA0Ki8JdW5zaWduZWQgaW50CQlwYWQxOFs2M107CS8qIFJlc2VydmVkCQkJCSovCi0vKjkwMCovCXZvbGF0aWxlIHVuc2lnbmVkIGludAl1Y3NyOwkJLyogVXNlciBDb250cm9sICYgU3RhdHVzIFJlZ2lzdGVyCSovCi0vKjkwNCovCXVuc2lnbmVkIGludAkJcGFkMTlbMzFdOwkvKiBSZXNlcnZlZAkJCQkqLwotLyo5ODAqLwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQJbWVyOwkJLyogTW9kZSBFbmFibGUgUmVnaXN0ZXIJCQkqLwotLyo5ODQqLwl1bnNpZ25lZCBpbnQJCXBhZDIwWzE0MzldOwkvKiBSZXNlcnZlZAkJCQkqLworCS8qIFNldHVwIFVuaXQncyB2ZXJ0ZXggc3RhdGUgcmVnaXN0ZXIgKi8KKy8qMTAwKi8gdm9sYXRpbGUgdW5zaWduZWQgaW50IHN1dnR4OworCQkJCQkvKjEwNCovIHVuc2lnbmVkIGludCBwYWQ4WzYzXTsKKwkJCQkJLyogUmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKwkvKiBGcmFtZSBCdWZmZXIgQ29udHJvbCBSZWdpc3RlcnMgKi8KKwkJCQkJCS8qMjAwKi8gdm9sYXRpbGUgdW5zaWduZWQgaW50IHBwYzsKKwkJCQkJCS8qIFBpeGVsIFByb2Nlc3NvciBDb250cm9sICAgICAgICAgICAgICAqLworCQkJCQkJLyoyMDQqLyB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2lkOworCQkJCQkJLyogQ3VycmVudCBXSUQgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJCQkvKjIwOCovIHZvbGF0aWxlIHVuc2lnbmVkIGludCBmZzsKKwkJCQkJCS8qIEZHIGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQkJCQkJLyoyMGMqLyB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgYmc7CisJCQkJCQkvKiBCRyBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJCS8qMjEwKi8gdm9sYXRpbGUgdW5zaWduZWQgaW50IGNvbnN0eTsKKwkJCQkJCS8qIENvbnN0YW50IFkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQkJCQkJLyoyMTQqLyB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgY29uc3R6OworCQkJCQkJLyogQ29uc3RhbnQgWiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJCQkvKjIxOCovIHZvbGF0aWxlIHVuc2lnbmVkIGludCB4Y2xpcDsKKwkJCQkJCS8qIFggQ2xpcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQkJCQkJLyoyMWMqLyB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgZGNzczsKKwkJCQkJCS8qIERlcHRoIEN1ZSBTY2FsZSBTbG9wZSAgICAgICAgICAgICAgICAqLworCQkJCQkJLyoyMjAqLyB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgdmNsaXBtaW47CisJCQkJCQkvKiBWaWV3Y2xpcCBYWSBNaW4gQm91bmRzICAgICAgICAgICAgICAgKi8KKwkJCQkJCS8qMjI0Ki8gdm9sYXRpbGUgdW5zaWduZWQgaW50IHZjbGlwbWF4OworCQkJCQkJLyogVmlld2NsaXAgWFkgTWF4IEJvdW5kcyAgICAgICAgICAgICAgICovCisJCQkJCQkJLyoyMjgqLyB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgdmNsaXB6bWluOworCQkJCQkJCS8qIFZpZXdjbGlwIFogTWluIEJvdW5kcyAgICAgICAgICAgICAgICAqLworCQkJCQkJCS8qMjJjKi8gdm9sYXRpbGUgdW5zaWduZWQgaW50IHZjbGlwem1heDsKKwkJCQkJCQkvKiBWaWV3Y2xpcCBaIE1heCBCb3VuZHMgICAgICAgICAgICAgICAgKi8KKwkJCQkJCS8qMjMwKi8gdm9sYXRpbGUgdW5zaWduZWQgaW50IGRjc2Y7CisJCQkJCQkvKiBEZXB0aCBDdWUgU2NhbGUgRnJvbnQgQm91bmQgICAgICAgICAgKi8KKwkJCQkJCS8qMjM0Ki8gdm9sYXRpbGUgdW5zaWduZWQgaW50IGRjc2I7CisJCQkJCQkvKiBEZXB0aCBDdWUgU2NhbGUgQmFjayBCb3VuZCAgICAgICAgICAgKi8KKwkJCQkJCS8qMjM4Ki8gdm9sYXRpbGUgdW5zaWduZWQgaW50IGRjemY7CisJCQkJCQkvKiBEZXB0aCBDdWUgWiBGcm9udCAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJCS8qMjNjKi8gdm9sYXRpbGUgdW5zaWduZWQgaW50IGRjemI7CisJCQkJCQkvKiBEZXB0aCBDdWUgWiBCYWNrICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJLyoyNDAqLyB1bnNpZ25lZCBpbnQgcGFkOTsKKwkJCQkJLyogUmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJCQkvKjI0NCovIHZvbGF0aWxlIHVuc2lnbmVkIGludCBibGVuZGM7CisJCQkJCQkvKiBBbHBoYSBCbGVuZCBDb250cm9sICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJCS8qMjQ4Ki8gdm9sYXRpbGUgdW5zaWduZWQgaW50IGJsZW5kYzE7CisJCQkJCQkvKiBBbHBoYSBCbGVuZCBDb2xvciAxICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJCS8qMjRjKi8gdm9sYXRpbGUgdW5zaWduZWQgaW50IGJsZW5kYzI7CisJCQkJCQkvKiBBbHBoYSBCbGVuZCBDb2xvciAyICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJCS8qMjUwKi8gdm9sYXRpbGUgdW5zaWduZWQgaW50IGZicmFtaXRjOworCQkJCQkJLyogRkIgUkFNIEludGVybGVhdmUgVGVzdCBDb250cm9sICAgICAgICovCisJCQkJCQkvKjI1NCovIHZvbGF0aWxlIHVuc2lnbmVkIGludCBmYmM7CisJCQkJCQkvKiBGcmFtZSBCdWZmZXIgQ29udHJvbCAgICAgICAgICAgICAgICAgKi8KKwkJCQkJCS8qMjU4Ki8gdm9sYXRpbGUgdW5zaWduZWQgaW50IHJvcDsKKwkJCQkJCS8qIFJhc3RlciBPUGVyYXRpb24gICAgICAgICAgICAgICAgICAgICAqLworCQkJCQkJLyoyNWMqLyB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgY21wOworCQkJCQkJLyogRnJhbWUgQnVmZmVyIENvbXBhcmUgICAgICAgICAgICAgICAgICovCisJCQkJCQkvKjI2MCovIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYXRjaGFiOworCQkJCQkJLyogQnVmZmVyIEFCIE1hdGNoIE1hc2sgICAgICAgICAgICAgICAgICovCisJCQkJCQkvKjI2NCovIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYXRjaGM7CisJCQkJCQkvKiBCdWZmZXIgQyhZWikgTWF0Y2ggTWFzayAgICAgICAgICAgICAgKi8KKwkJCQkJCS8qMjY4Ki8gdm9sYXRpbGUgdW5zaWduZWQgaW50IG1hZ25hYjsKKwkJCQkJCS8qIEJ1ZmZlciBBQiBNYWduaXR1ZGUgTWFzayAgICAgICAgICAgICAqLworCQkJCQkJLyoyNmMqLyB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFnbmM7CisJCQkJCQkvKiBCdWZmZXIgQyhZWikgTWFnbml0dWRlIE1hc2sgICAgICAgICAgKi8KKwkJCQkJCS8qMjcwKi8gdm9sYXRpbGUgdW5zaWduZWQgaW50IGZiY2ZnMDsKKwkJCQkJCS8qIEZyYW1lIEJ1ZmZlciBDb25maWcgMCAgICAgICAgICAgICAgICAqLworCQkJCQkJLyoyNzQqLyB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgZmJjZmcxOworCQkJCQkJLyogRnJhbWUgQnVmZmVyIENvbmZpZyAxICAgICAgICAgICAgICAgICovCisJCQkJCQkvKjI3OCovIHZvbGF0aWxlIHVuc2lnbmVkIGludCBmYmNmZzI7CisJCQkJCQkvKiBGcmFtZSBCdWZmZXIgQ29uZmlnIDIgICAgICAgICAgICAgICAgKi8KKwkJCQkJCS8qMjdjKi8gdm9sYXRpbGUgdW5zaWduZWQgaW50IGZiY2ZnMzsKKwkJCQkJCS8qIEZyYW1lIEJ1ZmZlciBDb25maWcgMyAgICAgICAgICAgICAgICAqLworCQkJCQkJLyoyODAqLyB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgcHBjZmc7CisJCQkJCQkvKiBQaXhlbCBQcm9jZXNzb3IgQ29uZmlnICAgICAgICAgICAgICAgKi8KKwkJCQkJCS8qMjg0Ki8gdm9sYXRpbGUgdW5zaWduZWQgaW50IHBpY2s7CisJCQkJCQkvKiBQaWNraW5nIENvbnRyb2wgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJCS8qMjg4Ki8gdm9sYXRpbGUgdW5zaWduZWQgaW50IGZpbGxtb2RlOworCQkJCQkJLyogRmlsbE1vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJCQkvKjI4YyovIHZvbGF0aWxlIHVuc2lnbmVkIGludCBmYnJhbXdhYzsKKwkJCQkJCS8qIEZCIFJBTSBXcml0ZSBBZGRyZXNzIENvbnRyb2wgICAgICAgICAqLworCQkJCQkJLyoyOTAqLyB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgcG1hc2s7CisJCQkJCQkvKiBSR0IgUGxhbmVNYXNrICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJCS8qMjk0Ki8gdm9sYXRpbGUgdW5zaWduZWQgaW50IHhwbWFzazsKKwkJCQkJCS8qIFggUGxhbmVNYXNrICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQkJCQkJLyoyOTgqLyB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgeXBtYXNrOworCQkJCQkJLyogWSBQbGFuZU1hc2sgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJCQkvKjI5YyovIHZvbGF0aWxlIHVuc2lnbmVkIGludCB6cG1hc2s7CisJCQkJCQkvKiBaIFBsYW5lTWFzayAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJLyoyYTAqLyBmZmJfYXV4Y2xpcCBhdXhjbGlwWzRdOworCQkJCQkvKiBBdXhpbGxpYXJ5IFZpZXdwb3J0IENsaXAgICAgICAgICAgICAgKi8KKworCS8qIE5ldyAzZFJBTSBJSUkgc3VwcG9ydCByZWdzICovCisvKjJjMCovIHZvbGF0aWxlIHVuc2lnbmVkIGludCByYXdibGVuZDI7CisvKjJjNCovIHZvbGF0aWxlIHVuc2lnbmVkIGludCByYXdwcmVibGVuZDsKKy8qMmM4Ki8gdm9sYXRpbGUgdW5zaWduZWQgaW50IHJhd3N0ZW5jaWw7CisvKjJjYyovIHZvbGF0aWxlIHVuc2lnbmVkIGludCByYXdzdGVuY2lsY3RsOworLyoyZDAqLyB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgdGhyZWVkcmFtMTsKKy8qMmQ0Ki8gdm9sYXRpbGUgdW5zaWduZWQgaW50IHRocmVlZHJhbTI7CisvKjJkOCovIHZvbGF0aWxlIHVuc2lnbmVkIGludCBwYXNzaW47CisvKjJkYyovIHZvbGF0aWxlIHVuc2lnbmVkIGludCByYXdjbHJkZXB0aDsKKy8qMmUwKi8gdm9sYXRpbGUgdW5zaWduZWQgaW50IHJhd3BtYXNrOworLyoyZTQqLyB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgcmF3Y3NyYzsKKy8qMmU4Ki8gdm9sYXRpbGUgdW5zaWduZWQgaW50IHJhd21hdGNoOworLyoyZWMqLyB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgcmF3bWFnbjsKKy8qMmYwKi8gdm9sYXRpbGUgdW5zaWduZWQgaW50IHJhd3JvcGJsZW5kOworLyoyZjQqLyB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgcmF3Y21wOworLyoyZjgqLyB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgcmF3d2FjOworLyoyZmMqLyB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgZmJyYW1pZDsKKworCQkJCQkJLyozMDAqLyB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgZHJhd29wOworCQkJCQkJLyogRHJhdyBPUGVyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJCS8qMzA0Ki8gdW5zaWduZWQgaW50IHBhZDEwWzJdOworCQkJCQkvKiBSZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJCS8qMzBjKi8gdm9sYXRpbGUgdW5zaWduZWQgaW50IGxwYXQ7CisJCQkJCQkvKiBMaW5lIFBhdHRlcm4gY29udHJvbCAgICAgICAgICAgICAgICAgKi8KKwkJCQkJLyozMTAqLyB1bnNpZ25lZCBpbnQgcGFkMTE7CisJCQkJCS8qIFJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQkJCQkJLyozMTQqLyB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgZm9udHh5OworCQkJCQkJLyogWFkgRm9udCBjb29yZGluYXRlICAgICAgICAgICAgICAgICAgICovCisJCQkJCQkvKjMxOCovIHZvbGF0aWxlIHVuc2lnbmVkIGludCBmb250dzsKKwkJCQkJCS8qIEZvbnQgV2lkdGggICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQkJCQkJLyozMWMqLyB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgZm9udGluYzsKKwkJCQkJCS8qIEZvbnQgSW5jcmVtZW50ICAgICAgICAgICAgICAgICAgICAgICAqLworCQkJCQkJLyozMjAqLyB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgZm9udDsKKwkJCQkJCS8qIEZvbnQgYml0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQkJCQkvKjMyNCovIHVuc2lnbmVkIGludCBwYWQxMlszXTsKKwkJCQkJLyogUmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKjMzMCovIHZvbGF0aWxlIHVuc2lnbmVkIGludCBibGVuZDI7CisvKjMzNCovIHZvbGF0aWxlIHVuc2lnbmVkIGludCBwcmVibGVuZDsKKy8qMzM4Ki8gdm9sYXRpbGUgdW5zaWduZWQgaW50IHN0ZW5jaWw7CisvKjMzYyovIHZvbGF0aWxlIHVuc2lnbmVkIGludCBzdGVuY2lsY3RsOworCisJCQkJCS8qMzQwKi8gdW5zaWduZWQgaW50IHBhZDEzWzRdOworCQkJCQkvKiBSZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJCS8qMzUwKi8gdm9sYXRpbGUgdW5zaWduZWQgaW50IGRjc3MxOworCQkJCQkJLyogRGVwdGggQ3VlIFNjYWxlIFNsb3BlIDEgICAgICAgICAgICAgICovCisJCQkJCQkvKjM1NCovIHZvbGF0aWxlIHVuc2lnbmVkIGludCBkY3NzMjsKKwkJCQkJCS8qIERlcHRoIEN1ZSBTY2FsZSBTbG9wZSAyICAgICAgICAgICAgICAqLworCQkJCQkJLyozNTgqLyB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgZGNzczM7CisJCQkJCQkvKiBEZXB0aCBDdWUgU2NhbGUgU2xvcGUgMyAgICAgICAgICAgICAgKi8KKy8qMzVjKi8gdm9sYXRpbGUgdW5zaWduZWQgaW50IHdpZHBtYXNrOworLyozNjAqLyB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgZGNzMjsKKy8qMzY0Ki8gdm9sYXRpbGUgdW5zaWduZWQgaW50IGRjczM7CisvKjM2OCovIHZvbGF0aWxlIHVuc2lnbmVkIGludCBkY3M0OworCQkJCQkvKjM2YyovIHVuc2lnbmVkIGludCBwYWQxNDsKKwkJCQkJLyogUmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKjM3MCovIHZvbGF0aWxlIHVuc2lnbmVkIGludCBkY2QyOworLyozNzQqLyB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgZGNkMzsKKy8qMzc4Ki8gdm9sYXRpbGUgdW5zaWduZWQgaW50IGRjZDQ7CisJCQkJCS8qMzdjKi8gdW5zaWduZWQgaW50IHBhZDE1OworCQkJCQkvKiBSZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJCQkvKjM4MCovIHZvbGF0aWxlIHVuc2lnbmVkIGludCBwYXR0ZXJuWzMyXTsKKwkJCQkJCQkvKiBhcmVhIFBhdHRlcm4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJLyo0MDAqLyB1bnNpZ25lZCBpbnQgcGFkMTZbOF07CisJCQkJCS8qIFJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQkJCQkJLyo0MjAqLyB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgcmVzZXQ7CisJCQkJCQkvKiBjaGlwIFJFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJCS8qNDI0Ki8gdW5zaWduZWQgaW50IHBhZDE3WzI0N107CisJCQkJCQkvKiBSZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJCS8qODAwKi8gdm9sYXRpbGUgdW5zaWduZWQgaW50IGRldmlkOworCQkJCQkJLyogRGV2aWNlIElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJCS8qODA0Ki8gdW5zaWduZWQgaW50IHBhZDE4WzYzXTsKKwkJCQkJLyogUmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJCQkvKjkwMCovIHZvbGF0aWxlIHVuc2lnbmVkIGludCB1Y3NyOworCQkJCQkJLyogVXNlciBDb250cm9sICYgU3RhdHVzIFJlZ2lzdGVyICAgICAgICovCisJCQkJCS8qOTA0Ki8gdW5zaWduZWQgaW50IHBhZDE5WzMxXTsKKwkJCQkJLyogUmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJCQkvKjk4MCovIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtZXI7CisJCQkJCQkvKiBNb2RlIEVuYWJsZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgKi8KKwkJCQkJCS8qOTg0Ki8gdW5zaWduZWQgaW50IHBhZDIwWzE0MzldOworCQkJCQkJLyogUmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiB9IGZmYl9mYmMsICpmZmJfZmJjUHRyOwogCiBzdHJ1Y3QgZmZiX2h3X2NvbnRleHQgewpAQCAtMjYzLDE2ICszNTYsMTYgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgZmZiX2Rldl9wcml2IHsKIAkvKiBNaXNjIHNvZnR3YXJlIHN0YXRlLiAqLwotCWludAkJCXByb21fbm9kZTsKLQllbnVtIGZmYl9jaGlwX3R5cGUJZmZiX3R5cGU7Ci0JdTY0CQkJY2FyZF9waHlzX2Jhc2U7Ci0Jc3RydWN0IG1pc2NkZXZpY2UgCW1pc2NkZXY7CisJaW50IHByb21fbm9kZTsKKwllbnVtIGZmYl9jaGlwX3R5cGUgZmZiX3R5cGU7CisJdTY0IGNhcmRfcGh5c19iYXNlOworCXN0cnVjdCBtaXNjZGV2aWNlIG1pc2NkZXY7CiAKIAkvKiBDb250cm9sbGVyIHJlZ2lzdGVycy4gKi8KLQlmZmJfZmJjUHRyCQlyZWdzOworCWZmYl9mYmNQdHIgcmVnczsKIAogCS8qIENvbnRleHQgdGFibGUuICovCi0Jc3RydWN0IGZmYl9od19jb250ZXh0CSpod19zdGF0ZVtGRkJfTUFYX0NUWFNdOworCXN0cnVjdCBmZmJfaHdfY29udGV4dCAqaHdfc3RhdGVbRkZCX01BWF9DVFhTXTsKIH0gZmZiX2Rldl9wcml2X3Q7CiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIGZmYl9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwKQEAgLTI4Myw0ICszNzYsNCBAQAogZXh0ZXJuIHZvaWQgZmZiX3NldF9jb250ZXh0X2lvY3Rscyh2b2lkKTsKIGV4dGVybiBkcm1faW9jdGxfZGVzY190IERSTShpb2N0bHMpW107CiAKLWV4dGVybiBpbnQgZmZiX2RyaXZlcl9jb250ZXh0X3N3aXRjaChkcm1fZGV2aWNlX3QgKmRldiwgaW50IG9sZCwgaW50IG5ldyk7CitleHRlcm4gaW50IGZmYl9kcml2ZXJfY29udGV4dF9zd2l0Y2goZHJtX2RldmljZV90ICogZGV2LCBpbnQgb2xkLCBpbnQgbmV3KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vaTgxMF9kbWEuYyBiL2RyaXZlcnMvY2hhci9kcm0vaTgxMF9kbWEuYwppbmRleCAyZjE2NTliLi44MTA2MjUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2k4MTBfZG1hLmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9pODEwX2RtYS5jCkBAIC00NSwxMDIgKzQ1LDEwMSBAQAogI2RlZmluZSBJODEwX0JVRl9VTk1BUFBFRCAwCiAjZGVmaW5lIEk4MTBfQlVGX01BUFBFRCAgIDEKIAotc3RhdGljIGRybV9idWZfdCAqaTgxMF9mcmVlbGlzdF9nZXQoZHJtX2RldmljZV90ICpkZXYpCitzdGF0aWMgZHJtX2J1Zl90ICppODEwX2ZyZWVsaXN0X2dldChkcm1fZGV2aWNlX3QgKiBkZXYpCiB7Ci0gICAJZHJtX2RldmljZV9kbWFfdCAqZG1hID0gZGV2LT5kbWE7Ci0JaW50CQkgaTsKLSAgIAlpbnQgCQkgdXNlZDsKKwlkcm1fZGV2aWNlX2RtYV90ICpkbWEgPSBkZXYtPmRtYTsKKwlpbnQgaTsKKwlpbnQgdXNlZDsKIAogCS8qIExpbmVhciBzZWFyY2ggbWlnaHQgbm90IGJlIHRoZSBiZXN0IHNvbHV0aW9uICovCiAKLSAgIAlmb3IgKGkgPSAwOyBpIDwgZG1hLT5idWZfY291bnQ7IGkrKykgewotCSAgIAlkcm1fYnVmX3QgKmJ1ZiA9IGRtYS0+YnVmbGlzdFsgaSBdOwotCSAgIAlkcm1faTgxMF9idWZfcHJpdl90ICpidWZfcHJpdiA9IGJ1Zi0+ZGV2X3ByaXZhdGU7CisJZm9yIChpID0gMDsgaSA8IGRtYS0+YnVmX2NvdW50OyBpKyspIHsKKwkJZHJtX2J1Zl90ICpidWYgPSBkbWEtPmJ1Zmxpc3RbaV07CisJCWRybV9pODEwX2J1Zl9wcml2X3QgKmJ1Zl9wcml2ID0gYnVmLT5kZXZfcHJpdmF0ZTsKIAkJLyogSW4gdXNlIGlzIGFscmVhZHkgYSBwb2ludGVyICovCi0JICAgCXVzZWQgPSBjbXB4Y2hnKGJ1Zl9wcml2LT5pbl91c2UsIEk4MTBfQlVGX0ZSRUUsCisJCXVzZWQgPSBjbXB4Y2hnKGJ1Zl9wcml2LT5pbl91c2UsIEk4MTBfQlVGX0ZSRUUsCiAJCQkgICAgICAgSTgxMF9CVUZfQ0xJRU5UKTsKIAkJaWYgKHVzZWQgPT0gSTgxMF9CVUZfRlJFRSkgewogCQkJcmV0dXJuIGJ1ZjsKIAkJfQogCX0KLSAgIAlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gTlVMTDsKIH0KIAogLyogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgaWYgdGhlIGJ1ZmZlciBpcyBub3Qgc2VudCB0byB0aGUgaGFyZHdhcmUKICAqIHlldCwgdGhlIGhhcmR3YXJlIHVwZGF0ZXMgaW4gdXNlIGZvciB1cyBvbmNlIGl0cyBvbiB0aGUgcmluZyBidWZmZXIuCiAgKi8KIAotc3RhdGljIGludCBpODEwX2ZyZWVsaXN0X3B1dChkcm1fZGV2aWNlX3QgKmRldiwgZHJtX2J1Zl90ICpidWYpCitzdGF0aWMgaW50IGk4MTBfZnJlZWxpc3RfcHV0KGRybV9kZXZpY2VfdCAqIGRldiwgZHJtX2J1Zl90ICogYnVmKQogewotICAgCWRybV9pODEwX2J1Zl9wcml2X3QgKmJ1Zl9wcml2ID0gYnVmLT5kZXZfcHJpdmF0ZTsKLSAgIAlpbnQgdXNlZDsKKwlkcm1faTgxMF9idWZfcHJpdl90ICpidWZfcHJpdiA9IGJ1Zi0+ZGV2X3ByaXZhdGU7CisJaW50IHVzZWQ7CiAKLSAgIAkvKiBJbiB1c2UgaXMgYWxyZWFkeSBhIHBvaW50ZXIgKi8KLSAgIAl1c2VkID0gY21weGNoZyhidWZfcHJpdi0+aW5fdXNlLCBJODEwX0JVRl9DTElFTlQsIEk4MTBfQlVGX0ZSRUUpOworCS8qIEluIHVzZSBpcyBhbHJlYWR5IGEgcG9pbnRlciAqLworCXVzZWQgPSBjbXB4Y2hnKGJ1Zl9wcml2LT5pbl91c2UsIEk4MTBfQlVGX0NMSUVOVCwgSTgxMF9CVUZfRlJFRSk7CiAJaWYgKHVzZWQgIT0gSTgxMF9CVUZfQ0xJRU5UKSB7Ci0JICAgCURSTV9FUlJPUigiRnJlZWluZyBidWZmZXIgdGhhdHMgbm90IGluIHVzZSA6ICVkXG4iLCBidWYtPmlkeCk7Ci0JICAgCXJldHVybiAtRUlOVkFMOworCQlEUk1fRVJST1IoIkZyZWVpbmcgYnVmZmVyIHRoYXRzIG5vdCBpbiB1c2UgOiAlZFxuIiwgYnVmLT5pZHgpOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLSAgIAlyZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBpODEwX21tYXBfYnVmZmVycyhzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7Ci0JZHJtX2ZpbGVfdAkgICAgKnByaXYJICA9IGZpbHAtPnByaXZhdGVfZGF0YTsKLQlkcm1fZGV2aWNlX3QJICAgICpkZXY7Ci0JZHJtX2k4MTBfcHJpdmF0ZV90ICAqZGV2X3ByaXY7Ci0JZHJtX2J1Zl90ICAgICAgICAgICAqYnVmOworCWRybV9maWxlX3QgKnByaXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJZHJtX2RldmljZV90ICpkZXY7CisJZHJtX2k4MTBfcHJpdmF0ZV90ICpkZXZfcHJpdjsKKwlkcm1fYnVmX3QgKmJ1ZjsKIAlkcm1faTgxMF9idWZfcHJpdl90ICpidWZfcHJpdjsKIAogCWxvY2tfa2VybmVsKCk7Ci0JZGV2CSA9IHByaXYtPmhlYWQtPmRldjsKKwlkZXYgPSBwcml2LT5oZWFkLT5kZXY7CiAJZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCWJ1ZiAgICAgID0gZGV2X3ByaXYtPm1tYXBfYnVmZmVyOworCWJ1ZiA9IGRldl9wcml2LT5tbWFwX2J1ZmZlcjsKIAlidWZfcHJpdiA9IGJ1Zi0+ZGV2X3ByaXZhdGU7CiAKIAl2bWEtPnZtX2ZsYWdzIHw9IChWTV9JTyB8IFZNX0RPTlRDT1BZKTsKIAl2bWEtPnZtX2ZpbGUgPSBmaWxwOwogCi0gICAJYnVmX3ByaXYtPmN1cnJlbnRseV9tYXBwZWQgPSBJODEwX0JVRl9NQVBQRUQ7CisJYnVmX3ByaXYtPmN1cnJlbnRseV9tYXBwZWQgPSBJODEwX0JVRl9NQVBQRUQ7CiAJdW5sb2NrX2tlcm5lbCgpOwogCiAJaWYgKGlvX3JlbWFwX3Bmbl9yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQsCi0JCQkgICAgIFZNX09GRlNFVCh2bWEpID4+IFBBR0VfU0hJRlQsCi0JCQkgICAgIHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCwKLQkJCSAgICAgdm1hLT52bV9wYWdlX3Byb3QpKSByZXR1cm4gLUVBR0FJTjsKKwkJCSAgICAgICBWTV9PRkZTRVQodm1hKSA+PiBQQUdFX1NISUZULAorCQkJICAgICAgIHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCwgdm1hLT52bV9wYWdlX3Byb3QpKQorCQlyZXR1cm4gLUVBR0FJTjsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaTgxMF9idWZmZXJfZm9wcyA9IHsKLQkub3BlbgkgPSBkcm1fb3BlbiwKLQkuZmx1c2gJID0gZHJtX2ZsdXNoLAorCS5vcGVuID0gZHJtX29wZW4sCisJLmZsdXNoID0gZHJtX2ZsdXNoLAogCS5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCi0JLmlvY3RsCSA9IGRybV9pb2N0bCwKLQkubW1hcAkgPSBpODEwX21tYXBfYnVmZmVycywKLQkuZmFzeW5jICA9IGRybV9mYXN5bmMsCisJLmlvY3RsID0gZHJtX2lvY3RsLAorCS5tbWFwID0gaTgxMF9tbWFwX2J1ZmZlcnMsCisJLmZhc3luYyA9IGRybV9mYXN5bmMsCiB9OwogCi1zdGF0aWMgaW50IGk4MTBfbWFwX2J1ZmZlcihkcm1fYnVmX3QgKmJ1Ziwgc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgaW50IGk4MTBfbWFwX2J1ZmZlcihkcm1fYnVmX3QgKiBidWYsIHN0cnVjdCBmaWxlICpmaWxwKQogewotCWRybV9maWxlX3QJICAqcHJpdgkgID0gZmlscC0+cHJpdmF0ZV9kYXRhOwotCWRybV9kZXZpY2VfdAkgICpkZXYJICA9IHByaXYtPmhlYWQtPmRldjsKKwlkcm1fZmlsZV90ICpwcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCWRybV9kZXZpY2VfdCAqZGV2ID0gcHJpdi0+aGVhZC0+ZGV2OwogCWRybV9pODEwX2J1Zl9wcml2X3QgKmJ1Zl9wcml2ID0gYnVmLT5kZXZfcHJpdmF0ZTsKLSAgICAgIAlkcm1faTgxMF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLSAgIAlzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpvbGRfZm9wczsKKwlkcm1faTgxMF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpvbGRfZm9wczsKIAlpbnQgcmV0Y29kZSA9IDA7CiAKLQlpZiAoYnVmX3ByaXYtPmN1cnJlbnRseV9tYXBwZWQgPT0gSTgxMF9CVUZfTUFQUEVEKSAKKwlpZiAoYnVmX3ByaXYtPmN1cnJlbnRseV9tYXBwZWQgPT0gSTgxMF9CVUZfTUFQUEVEKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWRvd25fd3JpdGUoICZjdXJyZW50LT5tbS0+bW1hcF9zZW0gKTsKKwlkb3duX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogCW9sZF9mb3BzID0gZmlscC0+Zl9vcDsKIAlmaWxwLT5mX29wID0gJmk4MTBfYnVmZmVyX2ZvcHM7CiAJZGV2X3ByaXYtPm1tYXBfYnVmZmVyID0gYnVmOwogCWJ1Zl9wcml2LT52aXJ0dWFsID0gKHZvaWQgKilkb19tbWFwKGZpbHAsIDAsIGJ1Zi0+dG90YWwsCi0JCQkJCSAgICBQUk9UX1JFQUR8UFJPVF9XUklURSwKLQkJCQkJICAgIE1BUF9TSEFSRUQsCi0JCQkJCSAgICBidWYtPmJ1c19hZGRyZXNzKTsKKwkJCQkJICAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCisJCQkJCSAgICBNQVBfU0hBUkVELCBidWYtPmJ1c19hZGRyZXNzKTsKIAlkZXZfcHJpdi0+bW1hcF9idWZmZXIgPSBOVUxMOwogCWZpbHAtPmZfb3AgPSBvbGRfZm9wczsKIAlpZiAoKHVuc2lnbmVkIGxvbmcpYnVmX3ByaXYtPnZpcnR1YWwgPiAtMTAyNFVMKSB7CkBAIC0xNDksMTIgKzE0OCwxMiBAQAogCQlyZXRjb2RlID0gKHNpZ25lZCBpbnQpYnVmX3ByaXYtPnZpcnR1YWw7CiAJCWJ1Zl9wcml2LT52aXJ0dWFsID0gTlVMTDsKIAl9Ci0JdXBfd3JpdGUoICZjdXJyZW50LT5tbS0+bW1hcF9zZW0gKTsKKwl1cF93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAogCXJldHVybiByZXRjb2RlOwogfQogCi1zdGF0aWMgaW50IGk4MTBfdW5tYXBfYnVmZmVyKGRybV9idWZfdCAqYnVmKQorc3RhdGljIGludCBpODEwX3VubWFwX2J1ZmZlcihkcm1fYnVmX3QgKiBidWYpCiB7CiAJZHJtX2k4MTBfYnVmX3ByaXZfdCAqYnVmX3ByaXYgPSBidWYtPmRldl9wcml2YXRlOwogCWludCByZXRjb2RlID0gMDsKQEAgLTE2OCw0MyArMTY3LDQzIEBACiAJCQkgICAgKHNpemVfdCkgYnVmLT50b3RhbCk7CiAJdXBfd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAKLSAgIAlidWZfcHJpdi0+Y3VycmVudGx5X21hcHBlZCA9IEk4MTBfQlVGX1VOTUFQUEVEOwotICAgCWJ1Zl9wcml2LT52aXJ0dWFsID0gTlVMTDsKKwlidWZfcHJpdi0+Y3VycmVudGx5X21hcHBlZCA9IEk4MTBfQlVGX1VOTUFQUEVEOworCWJ1Zl9wcml2LT52aXJ0dWFsID0gTlVMTDsKIAogCXJldHVybiByZXRjb2RlOwogfQogCi1zdGF0aWMgaW50IGk4MTBfZG1hX2dldF9idWZmZXIoZHJtX2RldmljZV90ICpkZXYsIGRybV9pODEwX2RtYV90ICpkLAorc3RhdGljIGludCBpODEwX2RtYV9nZXRfYnVmZmVyKGRybV9kZXZpY2VfdCAqIGRldiwgZHJtX2k4MTBfZG1hX3QgKiBkLAogCQkJICAgICAgIHN0cnVjdCBmaWxlICpmaWxwKQogewotCWRybV9idWZfdAkgICpidWY7CisJZHJtX2J1Zl90ICpidWY7CiAJZHJtX2k4MTBfYnVmX3ByaXZfdCAqYnVmX3ByaXY7CiAJaW50IHJldGNvZGUgPSAwOwogCiAJYnVmID0gaTgxMF9mcmVlbGlzdF9nZXQoZGV2KTsKIAlpZiAoIWJ1ZikgewogCQlyZXRjb2RlID0gLUVOT01FTTsKLQkgICAJRFJNX0RFQlVHKCJyZXRjb2RlPSVkXG4iLCByZXRjb2RlKTsKKwkJRFJNX0RFQlVHKCJyZXRjb2RlPSVkXG4iLCByZXRjb2RlKTsKIAkJcmV0dXJuIHJldGNvZGU7CiAJfQogCiAJcmV0Y29kZSA9IGk4MTBfbWFwX2J1ZmZlcihidWYsIGZpbHApOwogCWlmIChyZXRjb2RlKSB7CiAJCWk4MTBfZnJlZWxpc3RfcHV0KGRldiwgYnVmKTsKLQkgICAJRFJNX0VSUk9SKCJtYXBidWYgZmFpbGVkLCByZXRjb2RlICVkXG4iLCByZXRjb2RlKTsKKwkJRFJNX0VSUk9SKCJtYXBidWYgZmFpbGVkLCByZXRjb2RlICVkXG4iLCByZXRjb2RlKTsKIAkJcmV0dXJuIHJldGNvZGU7CiAJfQogCWJ1Zi0+ZmlscCA9IGZpbHA7CiAJYnVmX3ByaXYgPSBidWYtPmRldl9wcml2YXRlOwogCWQtPmdyYW50ZWQgPSAxOwotICAgCWQtPnJlcXVlc3RfaWR4ID0gYnVmLT5pZHg7Ci0gICAJZC0+cmVxdWVzdF9zaXplID0gYnVmLT50b3RhbDsKLSAgIAlkLT52aXJ0dWFsID0gYnVmX3ByaXYtPnZpcnR1YWw7CisJZC0+cmVxdWVzdF9pZHggPSBidWYtPmlkeDsKKwlkLT5yZXF1ZXN0X3NpemUgPSBidWYtPnRvdGFsOworCWQtPnZpcnR1YWwgPSBidWZfcHJpdi0+dmlydHVhbDsKIAogCXJldHVybiByZXRjb2RlOwogfQogCi1zdGF0aWMgaW50IGk4MTBfZG1hX2NsZWFudXAoZHJtX2RldmljZV90ICpkZXYpCitzdGF0aWMgaW50IGk4MTBfZG1hX2NsZWFudXAoZHJtX2RldmljZV90ICogZGV2KQogewogCWRybV9kZXZpY2VfZG1hX3QgKmRtYSA9IGRldi0+ZG1hOwogCkBAIC0yMTcsMTY1ICsyMTYsMTY3IEBACiAKIAlpZiAoZGV2LT5kZXZfcHJpdmF0ZSkgewogCQlpbnQgaTsKLQkgICAJZHJtX2k4MTBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9Ci0JICAgICAJCShkcm1faTgxMF9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKKwkJZHJtX2k4MTBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9CisJCSAgICAoZHJtX2k4MTBfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CiAKIAkJaWYgKGRldl9wcml2LT5yaW5nLnZpcnR1YWxfc3RhcnQpIHsKLQkJICAgCWRybV9pb3JlbWFwZnJlZSgodm9pZCAqKSBkZXZfcHJpdi0+cmluZy52aXJ0dWFsX3N0YXJ0LAotCQkJCQkgZGV2X3ByaXYtPnJpbmcuU2l6ZSwgZGV2KTsKKwkJCWRybV9pb3JlbWFwZnJlZSgodm9pZCAqKWRldl9wcml2LT5yaW5nLnZpcnR1YWxfc3RhcnQsCisJCQkJCWRldl9wcml2LT5yaW5nLlNpemUsIGRldik7CiAJCX0KLQkgICAJaWYgKGRldl9wcml2LT5od19zdGF0dXNfcGFnZSkgewotCQkgICAJcGNpX2ZyZWVfY29uc2lzdGVudChkZXYtPnBkZXYsIFBBR0VfU0laRSwKKwkJaWYgKGRldl9wcml2LT5od19zdGF0dXNfcGFnZSkgeworCQkJcGNpX2ZyZWVfY29uc2lzdGVudChkZXYtPnBkZXYsIFBBR0VfU0laRSwKIAkJCQkJICAgIGRldl9wcml2LT5od19zdGF0dXNfcGFnZSwKIAkJCQkJICAgIGRldl9wcml2LT5kbWFfc3RhdHVzX3BhZ2UpOwotCQkgICAJLyogTmVlZCB0byByZXdyaXRlIGhhcmR3YXJlIHN0YXR1cyBwYWdlICovCi0JCSAgIAlJODEwX1dSSVRFKDB4MDIwODAsIDB4MWZmZmYwMDApOworCQkJLyogTmVlZCB0byByZXdyaXRlIGhhcmR3YXJlIHN0YXR1cyBwYWdlICovCisJCQlJODEwX1dSSVRFKDB4MDIwODAsIDB4MWZmZmYwMDApOwogCQl9Ci0JICAgCWRybV9mcmVlKGRldi0+ZGV2X3ByaXZhdGUsIHNpemVvZihkcm1faTgxMF9wcml2YXRlX3QpLAorCQlkcm1fZnJlZShkZXYtPmRldl9wcml2YXRlLCBzaXplb2YoZHJtX2k4MTBfcHJpdmF0ZV90KSwKIAkJCSBEUk1fTUVNX0RSSVZFUik7Ci0JICAgCWRldi0+ZGV2X3ByaXZhdGUgPSBOVUxMOworCQlkZXYtPmRldl9wcml2YXRlID0gTlVMTDsKIAogCQlmb3IgKGkgPSAwOyBpIDwgZG1hLT5idWZfY291bnQ7IGkrKykgewotCQkJZHJtX2J1Zl90ICpidWYgPSBkbWEtPmJ1Zmxpc3RbIGkgXTsKKwkJCWRybV9idWZfdCAqYnVmID0gZG1hLT5idWZsaXN0W2ldOwogCQkJZHJtX2k4MTBfYnVmX3ByaXZfdCAqYnVmX3ByaXYgPSBidWYtPmRldl9wcml2YXRlOwotCQkJaWYgKCBidWZfcHJpdi0+a2VybmVsX3ZpcnR1YWwgJiYgYnVmLT50b3RhbCApCi0JCQkJZHJtX2lvcmVtYXBmcmVlKGJ1Zl9wcml2LT5rZXJuZWxfdmlydHVhbCwgYnVmLT50b3RhbCwgZGV2KTsKKwkJCWlmIChidWZfcHJpdi0+a2VybmVsX3ZpcnR1YWwgJiYgYnVmLT50b3RhbCkKKwkJCQlkcm1faW9yZW1hcGZyZWUoYnVmX3ByaXYtPmtlcm5lbF92aXJ0dWFsLAorCQkJCQkJYnVmLT50b3RhbCwgZGV2KTsKIAkJfQogCX0KLSAgIAlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpODEwX3dhaXRfcmluZyhkcm1fZGV2aWNlX3QgKmRldiwgaW50IG4pCi17Ci0gICAJZHJtX2k4MTBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0gICAJZHJtX2k4MTBfcmluZ19idWZmZXJfdCAqcmluZyA9ICYoZGV2X3ByaXYtPnJpbmcpOwotICAgCWludCBpdGVycyA9IDA7Ci0gICAJdW5zaWduZWQgbG9uZyBlbmQ7Ci0JdW5zaWduZWQgaW50IGxhc3RfaGVhZCA9IEk4MTBfUkVBRChMUF9SSU5HICsgUklOR19IRUFEKSAmIEhFQURfQUREUjsKLQotCWVuZCA9IGppZmZpZXMgKyAoSFoqMyk7Ci0gICAJd2hpbGUgKHJpbmctPnNwYWNlIDwgbikgewotCSAgIAlyaW5nLT5oZWFkID0gSTgxMF9SRUFEKExQX1JJTkcgKyBSSU5HX0hFQUQpICYgSEVBRF9BRERSOwotCSAgIAlyaW5nLT5zcGFjZSA9IHJpbmctPmhlYWQgLSAocmluZy0+dGFpbCs4KTsKLQkJaWYgKHJpbmctPnNwYWNlIDwgMCkgcmluZy0+c3BhY2UgKz0gcmluZy0+U2l6ZTsKLQkgICAKLQkJaWYgKHJpbmctPmhlYWQgIT0gbGFzdF9oZWFkKSB7Ci0JCQllbmQgPSBqaWZmaWVzICsgKEhaKjMpOwotCQkJbGFzdF9oZWFkID0gcmluZy0+aGVhZDsKLQkJfQotCSAgCi0JICAgCWl0ZXJzKys7Ci0JCWlmICh0aW1lX2JlZm9yZShlbmQsIGppZmZpZXMpKSB7Ci0JCSAgIAlEUk1fRVJST1IoInNwYWNlOiAlZCB3YW50ZWQgJWRcbiIsIHJpbmctPnNwYWNlLCBuKTsKLQkJICAgCURSTV9FUlJPUigibG9ja3VwXG4iKTsKLQkJICAgCWdvdG8gb3V0X3dhaXRfcmluZzsKLQkJfQotCQl1ZGVsYXkoMSk7Ci0JfQotCi1vdXRfd2FpdF9yaW5nOgotICAgCXJldHVybiBpdGVyczsKLX0KLQotc3RhdGljIHZvaWQgaTgxMF9rZXJuZWxfbG9zdF9jb250ZXh0KGRybV9kZXZpY2VfdCAqZGV2KQotewotICAgICAgCWRybV9pODEwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotICAgCWRybV9pODEwX3JpbmdfYnVmZmVyX3QgKnJpbmcgPSAmKGRldl9wcml2LT5yaW5nKTsKLQotICAgCXJpbmctPmhlYWQgPSBJODEwX1JFQUQoTFBfUklORyArIFJJTkdfSEVBRCkgJiBIRUFEX0FERFI7Ci0gICAgIAlyaW5nLT50YWlsID0gSTgxMF9SRUFEKExQX1JJTkcgKyBSSU5HX1RBSUwpOwotICAgICAJcmluZy0+c3BhY2UgPSByaW5nLT5oZWFkIC0gKHJpbmctPnRhaWwrOCk7Ci0gICAgIAlpZiAocmluZy0+c3BhY2UgPCAwKSByaW5nLT5zcGFjZSArPSByaW5nLT5TaXplOwotfQotCi1zdGF0aWMgaW50IGk4MTBfZnJlZWxpc3RfaW5pdChkcm1fZGV2aWNlX3QgKmRldiwgZHJtX2k4MTBfcHJpdmF0ZV90ICpkZXZfcHJpdikKLXsKLSAgICAgIAlkcm1fZGV2aWNlX2RtYV90ICpkbWEgPSBkZXYtPmRtYTsKLSAgIAlpbnQgbXlfaWR4ID0gMjQ7Ci0gICAJdTMyICpod19zdGF0dXMgPSAodTMyICopKGRldl9wcml2LT5od19zdGF0dXNfcGFnZSArIG15X2lkeCk7Ci0gICAJaW50IGk7Ci0KLQlpZiAoZG1hLT5idWZfY291bnQgPiAxMDE5KSB7Ci0JICAgCS8qIE5vdCBlbm91Z2ggc3BhY2UgaW4gdGhlIHN0YXR1cyBwYWdlIGZvciB0aGUgZnJlZWxpc3QgKi8KLQkgICAJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0gICAJZm9yIChpID0gMDsgaSA8IGRtYS0+YnVmX2NvdW50OyBpKyspIHsKLQkgICAJZHJtX2J1Zl90ICpidWYgPSBkbWEtPmJ1Zmxpc3RbIGkgXTsKLQkgICAJZHJtX2k4MTBfYnVmX3ByaXZfdCAqYnVmX3ByaXYgPSBidWYtPmRldl9wcml2YXRlOwotCi0JICAgCWJ1Zl9wcml2LT5pbl91c2UgPSBod19zdGF0dXMrKzsKLQkgICAJYnVmX3ByaXYtPm15X3VzZV9pZHggPSBteV9pZHg7Ci0JICAgCW15X2lkeCArPSA0OwotCi0JICAgCSpidWZfcHJpdi0+aW5fdXNlID0gSTgxMF9CVUZfRlJFRTsKLQotCQlidWZfcHJpdi0+a2VybmVsX3ZpcnR1YWwgPSBkcm1faW9yZW1hcChidWYtPmJ1c19hZGRyZXNzLAotCQkJCQkJCWJ1Zi0+dG90YWwsIGRldik7Ci0JfQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGk4MTBfZG1hX2luaXRpYWxpemUoZHJtX2RldmljZV90ICpkZXYsCi0JCQkgICAgICAgZHJtX2k4MTBfcHJpdmF0ZV90ICpkZXZfcHJpdiwKLQkJCSAgICAgICBkcm1faTgxMF9pbml0X3QgKmluaXQpCitzdGF0aWMgaW50IGk4MTBfd2FpdF9yaW5nKGRybV9kZXZpY2VfdCAqIGRldiwgaW50IG4pCit7CisJZHJtX2k4MTBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJZHJtX2k4MTBfcmluZ19idWZmZXJfdCAqcmluZyA9ICYoZGV2X3ByaXYtPnJpbmcpOworCWludCBpdGVycyA9IDA7CisJdW5zaWduZWQgbG9uZyBlbmQ7CisJdW5zaWduZWQgaW50IGxhc3RfaGVhZCA9IEk4MTBfUkVBRChMUF9SSU5HICsgUklOR19IRUFEKSAmIEhFQURfQUREUjsKKworCWVuZCA9IGppZmZpZXMgKyAoSFogKiAzKTsKKwl3aGlsZSAocmluZy0+c3BhY2UgPCBuKSB7CisJCXJpbmctPmhlYWQgPSBJODEwX1JFQUQoTFBfUklORyArIFJJTkdfSEVBRCkgJiBIRUFEX0FERFI7CisJCXJpbmctPnNwYWNlID0gcmluZy0+aGVhZCAtIChyaW5nLT50YWlsICsgOCk7CisJCWlmIChyaW5nLT5zcGFjZSA8IDApCisJCQlyaW5nLT5zcGFjZSArPSByaW5nLT5TaXplOworCisJCWlmIChyaW5nLT5oZWFkICE9IGxhc3RfaGVhZCkgeworCQkJZW5kID0gamlmZmllcyArIChIWiAqIDMpOworCQkJbGFzdF9oZWFkID0gcmluZy0+aGVhZDsKKwkJfQorCisJCWl0ZXJzKys7CisJCWlmICh0aW1lX2JlZm9yZShlbmQsIGppZmZpZXMpKSB7CisJCQlEUk1fRVJST1IoInNwYWNlOiAlZCB3YW50ZWQgJWRcbiIsIHJpbmctPnNwYWNlLCBuKTsKKwkJCURSTV9FUlJPUigibG9ja3VwXG4iKTsKKwkJCWdvdG8gb3V0X3dhaXRfcmluZzsKKwkJfQorCQl1ZGVsYXkoMSk7CisJfQorCisgICAgICBvdXRfd2FpdF9yaW5nOgorCXJldHVybiBpdGVyczsKK30KKworc3RhdGljIHZvaWQgaTgxMF9rZXJuZWxfbG9zdF9jb250ZXh0KGRybV9kZXZpY2VfdCAqIGRldikKK3sKKwlkcm1faTgxMF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlkcm1faTgxMF9yaW5nX2J1ZmZlcl90ICpyaW5nID0gJihkZXZfcHJpdi0+cmluZyk7CisKKwlyaW5nLT5oZWFkID0gSTgxMF9SRUFEKExQX1JJTkcgKyBSSU5HX0hFQUQpICYgSEVBRF9BRERSOworCXJpbmctPnRhaWwgPSBJODEwX1JFQUQoTFBfUklORyArIFJJTkdfVEFJTCk7CisJcmluZy0+c3BhY2UgPSByaW5nLT5oZWFkIC0gKHJpbmctPnRhaWwgKyA4KTsKKwlpZiAocmluZy0+c3BhY2UgPCAwKQorCQlyaW5nLT5zcGFjZSArPSByaW5nLT5TaXplOworfQorCitzdGF0aWMgaW50IGk4MTBfZnJlZWxpc3RfaW5pdChkcm1fZGV2aWNlX3QgKiBkZXYsIGRybV9pODEwX3ByaXZhdGVfdCAqIGRldl9wcml2KQoreworCWRybV9kZXZpY2VfZG1hX3QgKmRtYSA9IGRldi0+ZG1hOworCWludCBteV9pZHggPSAyNDsKKwl1MzIgKmh3X3N0YXR1cyA9ICh1MzIgKikgKGRldl9wcml2LT5od19zdGF0dXNfcGFnZSArIG15X2lkeCk7CisJaW50IGk7CisKKwlpZiAoZG1hLT5idWZfY291bnQgPiAxMDE5KSB7CisJCS8qIE5vdCBlbm91Z2ggc3BhY2UgaW4gdGhlIHN0YXR1cyBwYWdlIGZvciB0aGUgZnJlZWxpc3QgKi8KKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGRtYS0+YnVmX2NvdW50OyBpKyspIHsKKwkJZHJtX2J1Zl90ICpidWYgPSBkbWEtPmJ1Zmxpc3RbaV07CisJCWRybV9pODEwX2J1Zl9wcml2X3QgKmJ1Zl9wcml2ID0gYnVmLT5kZXZfcHJpdmF0ZTsKKworCQlidWZfcHJpdi0+aW5fdXNlID0gaHdfc3RhdHVzKys7CisJCWJ1Zl9wcml2LT5teV91c2VfaWR4ID0gbXlfaWR4OworCQlteV9pZHggKz0gNDsKKworCQkqYnVmX3ByaXYtPmluX3VzZSA9IEk4MTBfQlVGX0ZSRUU7CisKKwkJYnVmX3ByaXYtPmtlcm5lbF92aXJ0dWFsID0gZHJtX2lvcmVtYXAoYnVmLT5idXNfYWRkcmVzcywKKwkJCQkJCSAgICAgICBidWYtPnRvdGFsLCBkZXYpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpODEwX2RtYV9pbml0aWFsaXplKGRybV9kZXZpY2VfdCAqIGRldiwKKwkJCSAgICAgICBkcm1faTgxMF9wcml2YXRlX3QgKiBkZXZfcHJpdiwKKwkJCSAgICAgICBkcm1faTgxMF9pbml0X3QgKiBpbml0KQogewogCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CiAKLSAgIAltZW1zZXQoZGV2X3ByaXYsIDAsIHNpemVvZihkcm1faTgxMF9wcml2YXRlX3QpKTsKKwltZW1zZXQoZGV2X3ByaXYsIDAsIHNpemVvZihkcm1faTgxMF9wcml2YXRlX3QpKTsKIAogCWxpc3RfZm9yX2VhY2gobGlzdCwgJmRldi0+bWFwbGlzdC0+aGVhZCkgewogCQlkcm1fbWFwX2xpc3RfdCAqcl9saXN0ID0gbGlzdF9lbnRyeShsaXN0LCBkcm1fbWFwX2xpc3RfdCwgaGVhZCk7CiAJCWlmIChyX2xpc3QtPm1hcCAmJgogCQkgICAgcl9saXN0LT5tYXAtPnR5cGUgPT0gX0RSTV9TSE0gJiYKLQkJICAgIHJfbGlzdC0+bWFwLT5mbGFncyAmIF9EUk1fQ09OVEFJTlNfTE9DSyApIHsKKwkJICAgIHJfbGlzdC0+bWFwLT5mbGFncyAmIF9EUk1fQ09OVEFJTlNfTE9DSykgewogCQkJZGV2X3ByaXYtPnNhcmVhX21hcCA9IHJfbGlzdC0+bWFwOwotIAkJCWJyZWFrOwotIAkJfQotIAl9CisJCQlicmVhazsKKwkJfQorCX0KIAlpZiAoIWRldl9wcml2LT5zYXJlYV9tYXApIHsKIAkJZGV2LT5kZXZfcHJpdmF0ZSA9ICh2b2lkICopZGV2X3ByaXY7Ci0JICAgCWk4MTBfZG1hX2NsZWFudXAoZGV2KTsKLQkgICAJRFJNX0VSUk9SKCJjYW4gbm90IGZpbmQgc2FyZWEhXG4iKTsKLQkgICAJcmV0dXJuIC1FSU5WQUw7CisJCWk4MTBfZG1hX2NsZWFudXAoZGV2KTsKKwkJRFJNX0VSUk9SKCJjYW4gbm90IGZpbmQgc2FyZWEhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWRldl9wcml2LT5tbWlvX21hcCA9IGRybV9jb3JlX2ZpbmRtYXAoZGV2LCBpbml0LT5tbWlvX29mZnNldCk7CiAJaWYgKCFkZXZfcHJpdi0+bW1pb19tYXApIHsKIAkJZGV2LT5kZXZfcHJpdmF0ZSA9ICh2b2lkICopZGV2X3ByaXY7Ci0JICAgCWk4MTBfZG1hX2NsZWFudXAoZGV2KTsKLQkgICAJRFJNX0VSUk9SKCJjYW4gbm90IGZpbmQgbW1pbyBtYXAhXG4iKTsKLQkgICAJcmV0dXJuIC1FSU5WQUw7CisJCWk4MTBfZG1hX2NsZWFudXAoZGV2KTsKKwkJRFJNX0VSUk9SKCJjYW4gbm90IGZpbmQgbW1pbyBtYXAhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWRldi0+YWdwX2J1ZmZlcl90b2tlbiA9IGluaXQtPmJ1ZmZlcnNfb2Zmc2V0OwogCWRldi0+YWdwX2J1ZmZlcl9tYXAgPSBkcm1fY29yZV9maW5kbWFwKGRldiwgaW5pdC0+YnVmZmVyc19vZmZzZXQpOwogCWlmICghZGV2LT5hZ3BfYnVmZmVyX21hcCkgewogCQlkZXYtPmRldl9wcml2YXRlID0gKHZvaWQgKilkZXZfcHJpdjsKLQkgICAJaTgxMF9kbWFfY2xlYW51cChkZXYpOwotCSAgIAlEUk1fRVJST1IoImNhbiBub3QgZmluZCBkbWEgYnVmZmVyIG1hcCFcbiIpOwotCSAgIAlyZXR1cm4gLUVJTlZBTDsKKwkJaTgxMF9kbWFfY2xlYW51cChkZXYpOworCQlEUk1fRVJST1IoImNhbiBub3QgZmluZCBkbWEgYnVmZmVyIG1hcCFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlkZXZfcHJpdi0+c2FyZWFfcHJpdiA9IChkcm1faTgxMF9zYXJlYV90ICopCi0JCSgodTggKilkZXZfcHJpdi0+c2FyZWFfbWFwLT5oYW5kbGUgKwotCQkgaW5pdC0+c2FyZWFfcHJpdl9vZmZzZXQpOworCSAgICAoKHU4ICopIGRldl9wcml2LT5zYXJlYV9tYXAtPmhhbmRsZSArIGluaXQtPnNhcmVhX3ByaXZfb2Zmc2V0KTsKIAotICAgCWRldl9wcml2LT5yaW5nLlN0YXJ0ID0gaW5pdC0+cmluZ19zdGFydDsKLSAgIAlkZXZfcHJpdi0+cmluZy5FbmQgPSBpbml0LT5yaW5nX2VuZDsKLSAgIAlkZXZfcHJpdi0+cmluZy5TaXplID0gaW5pdC0+cmluZ19zaXplOworCWRldl9wcml2LT5yaW5nLlN0YXJ0ID0gaW5pdC0+cmluZ19zdGFydDsKKwlkZXZfcHJpdi0+cmluZy5FbmQgPSBpbml0LT5yaW5nX2VuZDsKKwlkZXZfcHJpdi0+cmluZy5TaXplID0gaW5pdC0+cmluZ19zaXplOwogCi0gICAJZGV2X3ByaXYtPnJpbmcudmlydHVhbF9zdGFydCA9IGRybV9pb3JlbWFwKGRldi0+YWdwLT5iYXNlICsKLQkJCQkJCSAgICBpbml0LT5yaW5nX3N0YXJ0LAotCQkJCQkJICAgIGluaXQtPnJpbmdfc2l6ZSwgZGV2KTsKKwlkZXZfcHJpdi0+cmluZy52aXJ0dWFsX3N0YXJ0ID0gZHJtX2lvcmVtYXAoZGV2LT5hZ3AtPmJhc2UgKworCQkJCQkJICAgaW5pdC0+cmluZ19zdGFydCwKKwkJCQkJCSAgIGluaXQtPnJpbmdfc2l6ZSwgZGV2KTsKIAotICAgCWlmIChkZXZfcHJpdi0+cmluZy52aXJ0dWFsX3N0YXJ0ID09IE5VTEwpIHsKLQkJZGV2LT5kZXZfcHJpdmF0ZSA9ICh2b2lkICopIGRldl9wcml2OwotCSAgIAlpODEwX2RtYV9jbGVhbnVwKGRldik7Ci0JICAgCURSTV9FUlJPUigiY2FuIG5vdCBpb3JlbWFwIHZpcnR1YWwgYWRkcmVzcyBmb3IiCisJaWYgKGRldl9wcml2LT5yaW5nLnZpcnR1YWxfc3RhcnQgPT0gTlVMTCkgeworCQlkZXYtPmRldl9wcml2YXRlID0gKHZvaWQgKilkZXZfcHJpdjsKKwkJaTgxMF9kbWFfY2xlYW51cChkZXYpOworCQlEUk1fRVJST1IoImNhbiBub3QgaW9yZW1hcCB2aXJ0dWFsIGFkZHJlc3MgZm9yIgogCQkJICAiIHJpbmcgYnVmZmVyXG4iKTsKLQkgICAJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAotICAgCWRldl9wcml2LT5yaW5nLnRhaWxfbWFzayA9IGRldl9wcml2LT5yaW5nLlNpemUgLSAxOworCWRldl9wcml2LT5yaW5nLnRhaWxfbWFzayA9IGRldl9wcml2LT5yaW5nLlNpemUgLSAxOwogCiAJZGV2X3ByaXYtPncgPSBpbml0LT53OwogCWRldl9wcml2LT5oID0gaW5pdC0+aDsKQEAgLTM5MSwzMyArMzkyLDMzIEBACiAJZGV2X3ByaXYtPmJhY2tfZGkxID0gaW5pdC0+YmFja19vZmZzZXQgfCBpbml0LT5waXRjaF9iaXRzOwogCWRldl9wcml2LT56aTEgPSBpbml0LT5kZXB0aF9vZmZzZXQgfCBpbml0LT5waXRjaF9iaXRzOwogCi0gICAJLyogUHJvZ3JhbSBIYXJkd2FyZSBTdGF0dXMgUGFnZSAqLwotICAgCWRldl9wcml2LT5od19zdGF0dXNfcGFnZSA9Ci0JCXBjaV9hbGxvY19jb25zaXN0ZW50KGRldi0+cGRldiwgUEFHRV9TSVpFLAotCQkJCQkJJmRldl9wcml2LT5kbWFfc3RhdHVzX3BhZ2UpOwotICAgCWlmICghZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlKSB7CisJLyogUHJvZ3JhbSBIYXJkd2FyZSBTdGF0dXMgUGFnZSAqLworCWRldl9wcml2LT5od19zdGF0dXNfcGFnZSA9CisJICAgIHBjaV9hbGxvY19jb25zaXN0ZW50KGRldi0+cGRldiwgUEFHRV9TSVpFLAorCQkJCSAmZGV2X3ByaXYtPmRtYV9zdGF0dXNfcGFnZSk7CisJaWYgKCFkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UpIHsKIAkJZGV2LT5kZXZfcHJpdmF0ZSA9ICh2b2lkICopZGV2X3ByaXY7CiAJCWk4MTBfZG1hX2NsZWFudXAoZGV2KTsKIAkJRFJNX0VSUk9SKCJDYW4gbm90IGFsbG9jYXRlIGhhcmR3YXJlIHN0YXR1cyBwYWdlXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotICAgCW1lbXNldChkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UsIDAsIFBBR0VfU0laRSk7Ci0gICAJRFJNX0RFQlVHKCJodyBzdGF0dXMgcGFnZSBAICVwXG4iLCBkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UpOworCW1lbXNldChkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UsIDAsIFBBR0VfU0laRSk7CisJRFJNX0RFQlVHKCJodyBzdGF0dXMgcGFnZSBAICVwXG4iLCBkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UpOwogCiAJSTgxMF9XUklURSgweDAyMDgwLCBkZXZfcHJpdi0+ZG1hX3N0YXR1c19wYWdlKTsKLSAgIAlEUk1fREVCVUcoIkVuYWJsZWQgaGFyZHdhcmUgc3RhdHVzIHBhZ2VcbiIpOworCURSTV9ERUJVRygiRW5hYmxlZCBoYXJkd2FyZSBzdGF0dXMgcGFnZVxuIik7CiAKLSAgIAkvKiBOb3cgd2UgbmVlZCB0byBpbml0IG91ciBmcmVlbGlzdCAqLworCS8qIE5vdyB3ZSBuZWVkIHRvIGluaXQgb3VyIGZyZWVsaXN0ICovCiAJaWYgKGk4MTBfZnJlZWxpc3RfaW5pdChkZXYsIGRldl9wcml2KSAhPSAwKSB7CiAJCWRldi0+ZGV2X3ByaXZhdGUgPSAodm9pZCAqKWRldl9wcml2OwotCSAgIAlpODEwX2RtYV9jbGVhbnVwKGRldik7Ci0JICAgCURSTV9FUlJPUigiTm90IGVub3VnaCBzcGFjZSBpbiB0aGUgc3RhdHVzIHBhZ2UgZm9yIgorCQlpODEwX2RtYV9jbGVhbnVwKGRldik7CisJCURSTV9FUlJPUigiTm90IGVub3VnaCBzcGFjZSBpbiB0aGUgc3RhdHVzIHBhZ2UgZm9yIgogCQkJICAiIHRoZSBmcmVlbGlzdFxuIik7Ci0JICAgCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJZGV2LT5kZXZfcHJpdmF0ZSA9ICh2b2lkICopZGV2X3ByaXY7CiAKLSAgIAlyZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogLyogaTgxMCBEUk0gdmVyc2lvbiAxLjEgdXNlZCBhIHNtYWxsZXIgaW5pdCBzdHJ1Y3R1cmUgd2l0aCBkaWZmZXJlbnQKQEAgLTQzMSwxMiArNDMyLDEyIEBACiAgKiAgICBJZiBpdCBpc24ndCB0aGVuIHdlIGhhdmUgYSB2MS4xIGNsaWVudC4gRml4IHVwIHBhcmFtcy4KICAqICAgIElmIGl0IGlzLCB0aGVuIHdlIGhhdmUgYSAxLjIgY2xpZW50Li4uIGdldCB0aGUgcmVzdCBvZiB0aGUgZGF0YS4KICAqLwotc3RhdGljIGludCBpODEwX2RtYV9pbml0X2NvbXBhdChkcm1faTgxMF9pbml0X3QgKmluaXQsIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGludCBpODEwX2RtYV9pbml0X2NvbXBhdChkcm1faTgxMF9pbml0X3QgKiBpbml0LCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAogCS8qIEdldCB2MS4xIGluaXQgZGF0YSAqLwotCWlmIChjb3B5X2Zyb21fdXNlcihpbml0LCAoZHJtX2k4MTBfcHJlMTJfaW5pdF90IF9fdXNlciAqKWFyZywKLQkJCSAgc2l6ZW9mKGRybV9pODEwX3ByZTEyX2luaXRfdCkpKSB7CisJaWYgKGNvcHlfZnJvbV91c2VyKGluaXQsIChkcm1faTgxMF9wcmUxMl9pbml0X3QgX191c2VyICopIGFyZywKKwkJCSAgIHNpemVvZihkcm1faTgxMF9wcmUxMl9pbml0X3QpKSkgewogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKQEAgLTQ0NCw3ICs0NDUsNyBAQAogCiAJCS8qIFRoaXMgaXMgYSB2MS4yIGNsaWVudCwganVzdCBnZXQgdGhlIHYxLjIgaW5pdCBkYXRhICovCiAJCURSTV9JTkZPKCJVc2luZyBQT1NUIHYxLjIgaW5pdC5cbiIpOwotCQlpZiAoY29weV9mcm9tX3VzZXIoaW5pdCwgKGRybV9pODEwX2luaXRfdCBfX3VzZXIgKilhcmcsCisJCWlmIChjb3B5X2Zyb21fdXNlcihpbml0LCAoZHJtX2k4MTBfaW5pdF90IF9fdXNlciAqKSBhcmcsCiAJCQkJICAgc2l6ZW9mKGRybV9pODEwX2luaXRfdCkpKSB7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQpAQCAtNDUyLDI0NiArNDUzLDIzOSBAQAogCiAJCS8qIFRoaXMgaXMgYSB2MS4xIGNsaWVudCwgZml4IHRoZSBwYXJhbXMgKi8KIAkJRFJNX0lORk8oIlVzaW5nIFBSRSB2MS4yIGluaXQuXG4iKTsKLQkgCWluaXQtPnBpdGNoX2JpdHMgPSBpbml0LT5oOwotCSAJaW5pdC0+cGl0Y2ggPSBpbml0LT53OwotCSAJaW5pdC0+aCA9IGluaXQtPm92ZXJsYXlfcGh5c2ljYWw7Ci0JIAlpbml0LT53ID0gaW5pdC0+b3ZlcmxheV9vZmZzZXQ7Ci0JIAlpbml0LT5vdmVybGF5X3BoeXNpY2FsID0gMDsKLQkgCWluaXQtPm92ZXJsYXlfb2Zmc2V0ID0gMDsKKwkJaW5pdC0+cGl0Y2hfYml0cyA9IGluaXQtPmg7CisJCWluaXQtPnBpdGNoID0gaW5pdC0+dzsKKwkJaW5pdC0+aCA9IGluaXQtPm92ZXJsYXlfcGh5c2ljYWw7CisJCWluaXQtPncgPSBpbml0LT5vdmVybGF5X29mZnNldDsKKwkJaW5pdC0+b3ZlcmxheV9waHlzaWNhbCA9IDA7CisJCWluaXQtPm92ZXJsYXlfb2Zmc2V0ID0gMDsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBpODEwX2RtYV9pbml0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAotCQkgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorCQkJIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotICAgCWRybV9maWxlX3QgKnByaXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0gICAJZHJtX2RldmljZV90ICpkZXYgPSBwcml2LT5oZWFkLT5kZXY7Ci0gICAJZHJtX2k4MTBfcHJpdmF0ZV90ICpkZXZfcHJpdjsKLSAgIAlkcm1faTgxMF9pbml0X3QgaW5pdDsKLSAgIAlpbnQgcmV0Y29kZSA9IDA7CisJZHJtX2ZpbGVfdCAqcHJpdiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlkcm1fZGV2aWNlX3QgKmRldiA9IHByaXYtPmhlYWQtPmRldjsKKwlkcm1faTgxMF9wcml2YXRlX3QgKmRldl9wcml2OworCWRybV9pODEwX2luaXRfdCBpbml0OworCWludCByZXRjb2RlID0gMDsKIAogCS8qIEdldCBvbmx5IHRoZSBpbml0IGZ1bmMgKi8KLQlpZiAoY29weV9mcm9tX3VzZXIoJmluaXQsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKGRybV9pODEwX2luaXRfZnVuY190KSkpIAorCWlmIChjb3B5X2Zyb21fdXNlcgorCSAgICAoJmluaXQsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKGRybV9pODEwX2luaXRfZnVuY190KSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0gICAJc3dpdGNoKGluaXQuZnVuYykgewotCSAJY2FzZSBJODEwX0lOSVRfRE1BOgotCSAJICAgICAgIAkvKiBUaGlzIGNhc2UgaXMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIEl0Ci0JCQkgKiBoYW5kbGVzIFhGcmVlIDQuMS4wIGFuZCA0LjIuMCwgYW5kIGhhcyB0bwotCQkJICogZG8gc29tZSBwYXJhbWV0ZXIgY2hlY2tpbmcgYXMgZGVzY3JpYmVkIGJlbG93LgotCQkJICogSXQgd2lsbCBzb21lZGF5IGdvIGF3YXkuCi0JCQkgKi8KLQkJCXJldGNvZGUgPSBpODEwX2RtYV9pbml0X2NvbXBhdCgmaW5pdCwgYXJnKTsKLQkJCWlmIChyZXRjb2RlKQotCQkJCXJldHVybiByZXRjb2RlOworCXN3aXRjaCAoaW5pdC5mdW5jKSB7CisJY2FzZSBJODEwX0lOSVRfRE1BOgorCQkvKiBUaGlzIGNhc2UgaXMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIEl0CisJCSAqIGhhbmRsZXMgWEZyZWUgNC4xLjAgYW5kIDQuMi4wLCBhbmQgaGFzIHRvCisJCSAqIGRvIHNvbWUgcGFyYW1ldGVyIGNoZWNraW5nIGFzIGRlc2NyaWJlZCBiZWxvdy4KKwkJICogSXQgd2lsbCBzb21lZGF5IGdvIGF3YXkuCisJCSAqLworCQlyZXRjb2RlID0gaTgxMF9kbWFfaW5pdF9jb21wYXQoJmluaXQsIGFyZyk7CisJCWlmIChyZXRjb2RlKQorCQkJcmV0dXJuIHJldGNvZGU7CiAKLQkgICAJCWRldl9wcml2ID0gZHJtX2FsbG9jKHNpemVvZihkcm1faTgxMF9wcml2YXRlX3QpLAotCQkJCQkgICAgIERSTV9NRU1fRFJJVkVSKTsKLQkgICAJCWlmIChkZXZfcHJpdiA9PSBOVUxMKQotCQkJCXJldHVybiAtRU5PTUVNOwotCSAgIAkJcmV0Y29kZSA9IGk4MTBfZG1hX2luaXRpYWxpemUoZGV2LCBkZXZfcHJpdiwgJmluaXQpOwotCQkJYnJlYWs7CisJCWRldl9wcml2ID0gZHJtX2FsbG9jKHNpemVvZihkcm1faTgxMF9wcml2YXRlX3QpLAorCQkJCSAgICAgRFJNX01FTV9EUklWRVIpOworCQlpZiAoZGV2X3ByaXYgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCQlyZXRjb2RlID0gaTgxMF9kbWFfaW5pdGlhbGl6ZShkZXYsIGRldl9wcml2LCAmaW5pdCk7CisJCWJyZWFrOwogCi0JCWRlZmF1bHQ6Ci0JIAljYXNlIEk4MTBfSU5JVF9ETUFfMV80OgotCQkJRFJNX0lORk8oIlVzaW5nIHYxLjQgaW5pdC5cbiIpOwotICAJCQlpZiAoY29weV9mcm9tX3VzZXIoJmluaXQsIChkcm1faTgxMF9pbml0X3QgX191c2VyICopYXJnLAotCQkJCQkgIHNpemVvZihkcm1faTgxMF9pbml0X3QpKSkgewotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJfQotCSAgIAkJZGV2X3ByaXYgPSBkcm1fYWxsb2Moc2l6ZW9mKGRybV9pODEwX3ByaXZhdGVfdCksCi0JCQkJCSAgICAgRFJNX01FTV9EUklWRVIpOwotCQkJaWYgKGRldl9wcml2ID09IE5VTEwpIAotCQkJCXJldHVybiAtRU5PTUVNOwotCSAgIAkJcmV0Y29kZSA9IGk4MTBfZG1hX2luaXRpYWxpemUoZGV2LCBkZXZfcHJpdiwgJmluaXQpOwotCQkJYnJlYWs7CisJZGVmYXVsdDoKKwljYXNlIEk4MTBfSU5JVF9ETUFfMV80OgorCQlEUk1fSU5GTygiVXNpbmcgdjEuNCBpbml0LlxuIik7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmaW5pdCwgKGRybV9pODEwX2luaXRfdCBfX3VzZXIgKikgYXJnLAorCQkJCSAgIHNpemVvZihkcm1faTgxMF9pbml0X3QpKSkgeworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKwkJZGV2X3ByaXYgPSBkcm1fYWxsb2Moc2l6ZW9mKGRybV9pODEwX3ByaXZhdGVfdCksCisJCQkJICAgICBEUk1fTUVNX0RSSVZFUik7CisJCWlmIChkZXZfcHJpdiA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCXJldGNvZGUgPSBpODEwX2RtYV9pbml0aWFsaXplKGRldiwgZGV2X3ByaXYsICZpbml0KTsKKwkJYnJlYWs7CiAKLQkgCWNhc2UgSTgxMF9DTEVBTlVQX0RNQToKLQkJICAgICAgICBEUk1fSU5GTygiRE1BIENsZWFudXBcbiIpOwotCSAgIAkJcmV0Y29kZSA9IGk4MTBfZG1hX2NsZWFudXAoZGV2KTsKLSAgICAgICAgICAgICAgCSAgIAlicmVhazsKKwljYXNlIEk4MTBfQ0xFQU5VUF9ETUE6CisJCURSTV9JTkZPKCJETUEgQ2xlYW51cFxuIik7CisJCXJldGNvZGUgPSBpODEwX2RtYV9jbGVhbnVwKGRldik7CisJCWJyZWFrOwogCX0KIAotICAgCXJldHVybiByZXRjb2RlOworCXJldHVybiByZXRjb2RlOwogfQogCi0KLQogLyogTW9zdCBlZmZpY2llbnQgd2F5IHRvIHZlcmlmeSBzdGF0ZSBmb3IgdGhlIGk4MTAgaXMgYXMgaXQgaXMKICAqIGVtaXR0ZWQuICBOb24tY29uZm9ybWFudCBzdGF0ZSBpcyBzaWxlbnRseSBkcm9wcGVkLgogICoKICAqIFVzZSAndm9sYXRpbGUnICYgbG9jYWwgdmFyIHRtcCB0byBmb3JjZSB0aGUgZW1pdHRlZCB2YWx1ZXMgdG8gYmUKICAqIGlkZW50aWNhbCB0byB0aGUgdmVyaWZpZWQgb25lcy4KICAqLwotc3RhdGljIHZvaWQgaTgxMEVtaXRDb250ZXh0VmVyaWZpZWQoIGRybV9kZXZpY2VfdCAqZGV2LAotCQkJCSAgICAgdm9sYXRpbGUgdW5zaWduZWQgaW50ICpjb2RlICkKK3N0YXRpYyB2b2lkIGk4MTBFbWl0Q29udGV4dFZlcmlmaWVkKGRybV9kZXZpY2VfdCAqIGRldiwKKwkJCQkgICAgdm9sYXRpbGUgdW5zaWduZWQgaW50ICpjb2RlKQogewotICAgCWRybV9pODEwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWRybV9pODEwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWludCBpLCBqID0gMDsKIAl1bnNpZ25lZCBpbnQgdG1wOwogCVJJTkdfTE9DQUxTOwogCi0JQkVHSU5fTFBfUklORyggSTgxMF9DVFhfU0VUVVBfU0laRSApOworCUJFR0lOX0xQX1JJTkcoSTgxMF9DVFhfU0VUVVBfU0laRSk7CiAKLQlPVVRfUklORyggR0ZYX09QX0NPTE9SX0ZBQ1RPUiApOwotCU9VVF9SSU5HKCBjb2RlW0k4MTBfQ1RYUkVHX0NGMV0gKTsKKwlPVVRfUklORyhHRlhfT1BfQ09MT1JfRkFDVE9SKTsKKwlPVVRfUklORyhjb2RlW0k4MTBfQ1RYUkVHX0NGMV0pOwogCi0JT1VUX1JJTkcoIEdGWF9PUF9TVElQUExFICk7Ci0JT1VUX1JJTkcoIGNvZGVbSTgxMF9DVFhSRUdfU1QxXSApOworCU9VVF9SSU5HKEdGWF9PUF9TVElQUExFKTsKKwlPVVRfUklORyhjb2RlW0k4MTBfQ1RYUkVHX1NUMV0pOwogCi0JZm9yICggaSA9IDQgOyBpIDwgSTgxMF9DVFhfU0VUVVBfU0laRSA7IGkrKyApIHsKKwlmb3IgKGkgPSA0OyBpIDwgSTgxMF9DVFhfU0VUVVBfU0laRTsgaSsrKSB7CiAJCXRtcCA9IGNvZGVbaV07CiAKLQkJaWYgKCh0bXAgJiAoNzw8MjkpKSA9PSAoMzw8MjkpICYmCi0JCSAgICAodG1wICYgKDB4MWY8PDI0KSkgPCAoMHgxZDw8MjQpKQotCQl7Ci0JCQlPVVRfUklORyggdG1wICk7CisJCWlmICgodG1wICYgKDcgPDwgMjkpKSA9PSAoMyA8PCAyOSkgJiYKKwkJICAgICh0bXAgJiAoMHgxZiA8PCAyNCkpIDwgKDB4MWQgPDwgMjQpKSB7CisJCQlPVVRfUklORyh0bXApOwogCQkJaisrOwotCQl9Ci0JCWVsc2UgcHJpbnRrKCJjb25zdGV4dCBzdGF0ZSBkcm9wcGVkISEhXG4iKTsKKwkJfSBlbHNlCisJCQlwcmludGsoImNvbnN0ZXh0IHN0YXRlIGRyb3BwZWQhISFcbiIpOwogCX0KIAogCWlmIChqICYgMSkKLQkJT1VUX1JJTkcoIDAgKTsKKwkJT1VUX1JJTkcoMCk7CiAKIAlBRFZBTkNFX0xQX1JJTkcoKTsKIH0KIAotc3RhdGljIHZvaWQgaTgxMEVtaXRUZXhWZXJpZmllZCggZHJtX2RldmljZV90ICpkZXYsCi0JCQkJIHZvbGF0aWxlIHVuc2lnbmVkIGludCAqY29kZSApCitzdGF0aWMgdm9pZCBpODEwRW1pdFRleFZlcmlmaWVkKGRybV9kZXZpY2VfdCAqIGRldiwgdm9sYXRpbGUgdW5zaWduZWQgaW50ICpjb2RlKQogewotICAgCWRybV9pODEwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWRybV9pODEwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWludCBpLCBqID0gMDsKIAl1bnNpZ25lZCBpbnQgdG1wOwogCVJJTkdfTE9DQUxTOwogCi0JQkVHSU5fTFBfUklORyggSTgxMF9URVhfU0VUVVBfU0laRSApOworCUJFR0lOX0xQX1JJTkcoSTgxMF9URVhfU0VUVVBfU0laRSk7CiAKLQlPVVRfUklORyggR0ZYX09QX01BUF9JTkZPICk7Ci0JT1VUX1JJTkcoIGNvZGVbSTgxMF9URVhSRUdfTUkxXSApOwotCU9VVF9SSU5HKCBjb2RlW0k4MTBfVEVYUkVHX01JMl0gKTsKLQlPVVRfUklORyggY29kZVtJODEwX1RFWFJFR19NSTNdICk7CisJT1VUX1JJTkcoR0ZYX09QX01BUF9JTkZPKTsKKwlPVVRfUklORyhjb2RlW0k4MTBfVEVYUkVHX01JMV0pOworCU9VVF9SSU5HKGNvZGVbSTgxMF9URVhSRUdfTUkyXSk7CisJT1VUX1JJTkcoY29kZVtJODEwX1RFWFJFR19NSTNdKTsKIAotCWZvciAoIGkgPSA0IDsgaSA8IEk4MTBfVEVYX1NFVFVQX1NJWkUgOyBpKysgKSB7CisJZm9yIChpID0gNDsgaSA8IEk4MTBfVEVYX1NFVFVQX1NJWkU7IGkrKykgewogCQl0bXAgPSBjb2RlW2ldOwogCi0JCWlmICgodG1wICYgKDc8PDI5KSkgPT0gKDM8PDI5KSAmJgotCQkgICAgKHRtcCAmICgweDFmPDwyNCkpIDwgKDB4MWQ8PDI0KSkKLQkJewotCQkJT1VUX1JJTkcoIHRtcCApOworCQlpZiAoKHRtcCAmICg3IDw8IDI5KSkgPT0gKDMgPDwgMjkpICYmCisJCSAgICAodG1wICYgKDB4MWYgPDwgMjQpKSA8ICgweDFkIDw8IDI0KSkgeworCQkJT1VUX1JJTkcodG1wKTsKIAkJCWorKzsKLQkJfQotCQllbHNlIHByaW50aygidGV4dHVyZSBzdGF0ZSBkcm9wcGVkISEhXG4iKTsKKwkJfSBlbHNlCisJCQlwcmludGsoInRleHR1cmUgc3RhdGUgZHJvcHBlZCEhIVxuIik7CiAJfQogCiAJaWYgKGogJiAxKQotCQlPVVRfUklORyggMCApOworCQlPVVRfUklORygwKTsKIAogCUFEVkFOQ0VfTFBfUklORygpOwogfQogCi0KIC8qIE5lZWQgdG8gZG8gc29tZSBhZGRpdGlvbmFsIGNoZWNraW5nIHdoZW4gc2V0dGluZyB0aGUgZGVzdCBidWZmZXIuCiAgKi8KLXN0YXRpYyB2b2lkIGk4MTBFbWl0RGVzdFZlcmlmaWVkKCBkcm1fZGV2aWNlX3QgKmRldiwKLQkJCQkgIHZvbGF0aWxlIHVuc2lnbmVkIGludCAqY29kZSApCitzdGF0aWMgdm9pZCBpODEwRW1pdERlc3RWZXJpZmllZChkcm1fZGV2aWNlX3QgKiBkZXYsCisJCQkJIHZvbGF0aWxlIHVuc2lnbmVkIGludCAqY29kZSkKIHsKLSAgIAlkcm1faTgxMF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlkcm1faTgxMF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAl1bnNpZ25lZCBpbnQgdG1wOwogCVJJTkdfTE9DQUxTOwogCi0JQkVHSU5fTFBfUklORyggSTgxMF9ERVNUX1NFVFVQX1NJWkUgKyAyICk7CisJQkVHSU5fTFBfUklORyhJODEwX0RFU1RfU0VUVVBfU0laRSArIDIpOwogCiAJdG1wID0gY29kZVtJODEwX0RFU1RSRUdfREkxXTsKIAlpZiAodG1wID09IGRldl9wcml2LT5mcm9udF9kaTEgfHwgdG1wID09IGRldl9wcml2LT5iYWNrX2RpMSkgewotCQlPVVRfUklORyggQ01EX09QX0RFU1RCVUZGRVJfSU5GTyApOwotCQlPVVRfUklORyggdG1wICk7CisJCU9VVF9SSU5HKENNRF9PUF9ERVNUQlVGRkVSX0lORk8pOworCQlPVVRfUklORyh0bXApOwogCX0gZWxzZQotCSAgIERSTV9ERUJVRygiYmFkIGRpMSAleCAoYWxsb3cgJXggb3IgJXgpXG4iLAotCQkgICAgIHRtcCwgZGV2X3ByaXYtPmZyb250X2RpMSwgZGV2X3ByaXYtPmJhY2tfZGkxKTsKKwkJRFJNX0RFQlVHKCJiYWQgZGkxICV4IChhbGxvdyAleCBvciAleClcbiIsCisJCQkgIHRtcCwgZGV2X3ByaXYtPmZyb250X2RpMSwgZGV2X3ByaXYtPmJhY2tfZGkxKTsKIAogCS8qIGludmFyaWVudDoKIAkgKi8KLQlPVVRfUklORyggQ01EX09QX1pfQlVGRkVSX0lORk8gKTsKLQlPVVRfUklORyggZGV2X3ByaXYtPnppMSApOworCU9VVF9SSU5HKENNRF9PUF9aX0JVRkZFUl9JTkZPKTsKKwlPVVRfUklORyhkZXZfcHJpdi0+emkxKTsKIAotCU9VVF9SSU5HKCBHRlhfT1BfREVTVEJVRkZFUl9WQVJTICk7Ci0JT1VUX1JJTkcoIGNvZGVbSTgxMF9ERVNUUkVHX0RWMV0gKTsKKwlPVVRfUklORyhHRlhfT1BfREVTVEJVRkZFUl9WQVJTKTsKKwlPVVRfUklORyhjb2RlW0k4MTBfREVTVFJFR19EVjFdKTsKIAotCU9VVF9SSU5HKCBHRlhfT1BfRFJBV1JFQ1RfSU5GTyApOwotCU9VVF9SSU5HKCBjb2RlW0k4MTBfREVTVFJFR19EUjFdICk7Ci0JT1VUX1JJTkcoIGNvZGVbSTgxMF9ERVNUUkVHX0RSMl0gKTsKLQlPVVRfUklORyggY29kZVtJODEwX0RFU1RSRUdfRFIzXSApOwotCU9VVF9SSU5HKCBjb2RlW0k4MTBfREVTVFJFR19EUjRdICk7Ci0JT1VUX1JJTkcoIDAgKTsKKwlPVVRfUklORyhHRlhfT1BfRFJBV1JFQ1RfSU5GTyk7CisJT1VUX1JJTkcoY29kZVtJODEwX0RFU1RSRUdfRFIxXSk7CisJT1VUX1JJTkcoY29kZVtJODEwX0RFU1RSRUdfRFIyXSk7CisJT1VUX1JJTkcoY29kZVtJODEwX0RFU1RSRUdfRFIzXSk7CisJT1VUX1JJTkcoY29kZVtJODEwX0RFU1RSRUdfRFI0XSk7CisJT1VUX1JJTkcoMCk7CiAKIAlBRFZBTkNFX0xQX1JJTkcoKTsKIH0KIAotCi0KLXN0YXRpYyB2b2lkIGk4MTBFbWl0U3RhdGUoIGRybV9kZXZpY2VfdCAqZGV2ICkKK3N0YXRpYyB2b2lkIGk4MTBFbWl0U3RhdGUoZHJtX2RldmljZV90ICogZGV2KQogewotICAgCWRybV9pODEwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotICAgICAgCWRybV9pODEwX3NhcmVhX3QgKnNhcmVhX3ByaXYgPSBkZXZfcHJpdi0+c2FyZWFfcHJpdjsKKwlkcm1faTgxMF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlkcm1faTgxMF9zYXJlYV90ICpzYXJlYV9wcml2ID0gZGV2X3ByaXYtPnNhcmVhX3ByaXY7CiAJdW5zaWduZWQgaW50IGRpcnR5ID0gc2FyZWFfcHJpdi0+ZGlydHk7Ci0JCisKIAlEUk1fREVCVUcoIiVzICV4XG4iLCBfX0ZVTkNUSU9OX18sIGRpcnR5KTsKIAogCWlmIChkaXJ0eSAmIEk4MTBfVVBMT0FEX0JVRkZFUlMpIHsKLQkJaTgxMEVtaXREZXN0VmVyaWZpZWQoIGRldiwgc2FyZWFfcHJpdi0+QnVmZmVyU3RhdGUgKTsKKwkJaTgxMEVtaXREZXN0VmVyaWZpZWQoZGV2LCBzYXJlYV9wcml2LT5CdWZmZXJTdGF0ZSk7CiAJCXNhcmVhX3ByaXYtPmRpcnR5ICY9IH5JODEwX1VQTE9BRF9CVUZGRVJTOwogCX0KIAogCWlmIChkaXJ0eSAmIEk4MTBfVVBMT0FEX0NUWCkgewotCQlpODEwRW1pdENvbnRleHRWZXJpZmllZCggZGV2LCBzYXJlYV9wcml2LT5Db250ZXh0U3RhdGUgKTsKKwkJaTgxMEVtaXRDb250ZXh0VmVyaWZpZWQoZGV2LCBzYXJlYV9wcml2LT5Db250ZXh0U3RhdGUpOwogCQlzYXJlYV9wcml2LT5kaXJ0eSAmPSB+STgxMF9VUExPQURfQ1RYOwogCX0KIAogCWlmIChkaXJ0eSAmIEk4MTBfVVBMT0FEX1RFWDApIHsKLQkJaTgxMEVtaXRUZXhWZXJpZmllZCggZGV2LCBzYXJlYV9wcml2LT5UZXhTdGF0ZVswXSApOworCQlpODEwRW1pdFRleFZlcmlmaWVkKGRldiwgc2FyZWFfcHJpdi0+VGV4U3RhdGVbMF0pOwogCQlzYXJlYV9wcml2LT5kaXJ0eSAmPSB+STgxMF9VUExPQURfVEVYMDsKIAl9CiAKIAlpZiAoZGlydHkgJiBJODEwX1VQTE9BRF9URVgxKSB7Ci0JCWk4MTBFbWl0VGV4VmVyaWZpZWQoIGRldiwgc2FyZWFfcHJpdi0+VGV4U3RhdGVbMV0gKTsKKwkJaTgxMEVtaXRUZXhWZXJpZmllZChkZXYsIHNhcmVhX3ByaXYtPlRleFN0YXRlWzFdKTsKIAkJc2FyZWFfcHJpdi0+ZGlydHkgJj0gfkk4MTBfVVBMT0FEX1RFWDE7CiAJfQogfQogCi0KLQogLyogbmVlZCB0byB2ZXJpZnkKICAqLwotc3RhdGljIHZvaWQgaTgxMF9kbWFfZGlzcGF0Y2hfY2xlYXIoIGRybV9kZXZpY2VfdCAqZGV2LCBpbnQgZmxhZ3MsCi0JCQkJICAgICB1bnNpZ25lZCBpbnQgY2xlYXJfY29sb3IsCi0JCQkJICAgICB1bnNpZ25lZCBpbnQgY2xlYXJfenZhbCApCitzdGF0aWMgdm9pZCBpODEwX2RtYV9kaXNwYXRjaF9jbGVhcihkcm1fZGV2aWNlX3QgKiBkZXYsIGludCBmbGFncywKKwkJCQkgICAgdW5zaWduZWQgaW50IGNsZWFyX2NvbG9yLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgY2xlYXJfenZhbCkKIHsKLSAgIAlkcm1faTgxMF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLSAgICAgIAlkcm1faTgxMF9zYXJlYV90ICpzYXJlYV9wcml2ID0gZGV2X3ByaXYtPnNhcmVhX3ByaXY7CisJZHJtX2k4MTBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJZHJtX2k4MTBfc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9wcml2OwogCWludCBuYm94ID0gc2FyZWFfcHJpdi0+bmJveDsKIAlkcm1fY2xpcF9yZWN0X3QgKnBib3ggPSBzYXJlYV9wcml2LT5ib3hlczsKIAlpbnQgcGl0Y2ggPSBkZXZfcHJpdi0+cGl0Y2g7CiAJaW50IGNwcCA9IDI7CiAJaW50IGk7CiAJUklOR19MT0NBTFM7Ci0JCi0JaWYgKCBkZXZfcHJpdi0+Y3VycmVudF9wYWdlID09IDEgKSB7Ci0JICAgICAgICB1bnNpZ25lZCBpbnQgdG1wID0gZmxhZ3M7Ci0JICAgICAgIAorCisJaWYgKGRldl9wcml2LT5jdXJyZW50X3BhZ2UgPT0gMSkgeworCQl1bnNpZ25lZCBpbnQgdG1wID0gZmxhZ3M7CisKIAkJZmxhZ3MgJj0gfihJODEwX0ZST05UIHwgSTgxMF9CQUNLKTsKLQkJaWYgKHRtcCAmIEk4MTBfRlJPTlQpIGZsYWdzIHw9IEk4MTBfQkFDSzsKLQkJaWYgKHRtcCAmIEk4MTBfQkFDSykgZmxhZ3MgfD0gSTgxMF9GUk9OVDsKKwkJaWYgKHRtcCAmIEk4MTBfRlJPTlQpCisJCQlmbGFncyB8PSBJODEwX0JBQ0s7CisJCWlmICh0bXAgJiBJODEwX0JBQ0spCisJCQlmbGFncyB8PSBJODEwX0ZST05UOwogCX0KIAotICAJaTgxMF9rZXJuZWxfbG9zdF9jb250ZXh0KGRldik7CisJaTgxMF9rZXJuZWxfbG9zdF9jb250ZXh0KGRldik7CiAKLSAgICAgIAlpZiAobmJveCA+IEk4MTBfTlJfU0FSRUFfQ0xJUFJFQ1RTKQotICAgICAJCW5ib3ggPSBJODEwX05SX1NBUkVBX0NMSVBSRUNUUzsKKwlpZiAobmJveCA+IEk4MTBfTlJfU0FSRUFfQ0xJUFJFQ1RTKQorCQluYm94ID0gSTgxMF9OUl9TQVJFQV9DTElQUkVDVFM7CiAKLQlmb3IgKGkgPSAwIDsgaSA8IG5ib3ggOyBpKyssIHBib3grKykgeworCWZvciAoaSA9IDA7IGkgPCBuYm94OyBpKyssIHBib3grKykgewogCQl1bnNpZ25lZCBpbnQgeCA9IHBib3gtPngxOwogCQl1bnNpZ25lZCBpbnQgeSA9IHBib3gtPnkxOwogCQl1bnNpZ25lZCBpbnQgd2lkdGggPSAocGJveC0+eDIgLSB4KSAqIGNwcDsKQEAgLTcwMCw1MiArNjk0LDQ4IEBACiAKIAkJaWYgKHBib3gtPngxID4gcGJveC0+eDIgfHwKIAkJICAgIHBib3gtPnkxID4gcGJveC0+eTIgfHwKLQkJICAgIHBib3gtPngyID4gZGV2X3ByaXYtPncgfHwKLQkJICAgIHBib3gtPnkyID4gZGV2X3ByaXYtPmgpCisJCSAgICBwYm94LT54MiA+IGRldl9wcml2LT53IHx8IHBib3gtPnkyID4gZGV2X3ByaXYtPmgpCiAJCQljb250aW51ZTsKIAotCSAgIAlpZiAoIGZsYWdzICYgSTgxMF9GUk9OVCApIHsKLQkJCUJFR0lOX0xQX1JJTkcoIDYgKTsKLQkJCU9VVF9SSU5HKCBCUjAwX0JJVEJMVF9DTElFTlQgfAotCQkJCSAgQlIwMF9PUF9DT0xPUl9CTFQgfCAweDMgKTsKLQkJCU9VVF9SSU5HKCBCUjEzX1NPTElEX1BBVFRFUk4gfCAoMHhGMCA8PCAxNikgfCBwaXRjaCApOwotCQkJT1VUX1JJTkcoIChoZWlnaHQgPDwgMTYpIHwgd2lkdGggKTsKLQkJCU9VVF9SSU5HKCBzdGFydCApOwotCQkJT1VUX1JJTkcoIGNsZWFyX2NvbG9yICk7Ci0JCQlPVVRfUklORyggMCApOworCQlpZiAoZmxhZ3MgJiBJODEwX0ZST05UKSB7CisJCQlCRUdJTl9MUF9SSU5HKDYpOworCQkJT1VUX1JJTkcoQlIwMF9CSVRCTFRfQ0xJRU5UIHwgQlIwMF9PUF9DT0xPUl9CTFQgfCAweDMpOworCQkJT1VUX1JJTkcoQlIxM19TT0xJRF9QQVRURVJOIHwgKDB4RjAgPDwgMTYpIHwgcGl0Y2gpOworCQkJT1VUX1JJTkcoKGhlaWdodCA8PCAxNikgfCB3aWR0aCk7CisJCQlPVVRfUklORyhzdGFydCk7CisJCQlPVVRfUklORyhjbGVhcl9jb2xvcik7CisJCQlPVVRfUklORygwKTsKIAkJCUFEVkFOQ0VfTFBfUklORygpOwogCQl9CiAKLQkJaWYgKCBmbGFncyAmIEk4MTBfQkFDSyApIHsKLQkJCUJFR0lOX0xQX1JJTkcoIDYgKTsKLQkJCU9VVF9SSU5HKCBCUjAwX0JJVEJMVF9DTElFTlQgfAotCQkJCSAgQlIwMF9PUF9DT0xPUl9CTFQgfCAweDMgKTsKLQkJCU9VVF9SSU5HKCBCUjEzX1NPTElEX1BBVFRFUk4gfCAoMHhGMCA8PCAxNikgfCBwaXRjaCApOwotCQkJT1VUX1JJTkcoIChoZWlnaHQgPDwgMTYpIHwgd2lkdGggKTsKLQkJCU9VVF9SSU5HKCBkZXZfcHJpdi0+YmFja19vZmZzZXQgKyBzdGFydCApOwotCQkJT1VUX1JJTkcoIGNsZWFyX2NvbG9yICk7Ci0JCQlPVVRfUklORyggMCApOworCQlpZiAoZmxhZ3MgJiBJODEwX0JBQ0spIHsKKwkJCUJFR0lOX0xQX1JJTkcoNik7CisJCQlPVVRfUklORyhCUjAwX0JJVEJMVF9DTElFTlQgfCBCUjAwX09QX0NPTE9SX0JMVCB8IDB4Myk7CisJCQlPVVRfUklORyhCUjEzX1NPTElEX1BBVFRFUk4gfCAoMHhGMCA8PCAxNikgfCBwaXRjaCk7CisJCQlPVVRfUklORygoaGVpZ2h0IDw8IDE2KSB8IHdpZHRoKTsKKwkJCU9VVF9SSU5HKGRldl9wcml2LT5iYWNrX29mZnNldCArIHN0YXJ0KTsKKwkJCU9VVF9SSU5HKGNsZWFyX2NvbG9yKTsKKwkJCU9VVF9SSU5HKDApOwogCQkJQURWQU5DRV9MUF9SSU5HKCk7CiAJCX0KIAotCQlpZiAoIGZsYWdzICYgSTgxMF9ERVBUSCApIHsKLQkJCUJFR0lOX0xQX1JJTkcoIDYgKTsKLQkJCU9VVF9SSU5HKCBCUjAwX0JJVEJMVF9DTElFTlQgfAotCQkJCSAgQlIwMF9PUF9DT0xPUl9CTFQgfCAweDMgKTsKLQkJCU9VVF9SSU5HKCBCUjEzX1NPTElEX1BBVFRFUk4gfCAoMHhGMCA8PCAxNikgfCBwaXRjaCApOwotCQkJT1VUX1JJTkcoIChoZWlnaHQgPDwgMTYpIHwgd2lkdGggKTsKLQkJCU9VVF9SSU5HKCBkZXZfcHJpdi0+ZGVwdGhfb2Zmc2V0ICsgc3RhcnQgKTsKLQkJCU9VVF9SSU5HKCBjbGVhcl96dmFsICk7Ci0JCQlPVVRfUklORyggMCApOworCQlpZiAoZmxhZ3MgJiBJODEwX0RFUFRIKSB7CisJCQlCRUdJTl9MUF9SSU5HKDYpOworCQkJT1VUX1JJTkcoQlIwMF9CSVRCTFRfQ0xJRU5UIHwgQlIwMF9PUF9DT0xPUl9CTFQgfCAweDMpOworCQkJT1VUX1JJTkcoQlIxM19TT0xJRF9QQVRURVJOIHwgKDB4RjAgPDwgMTYpIHwgcGl0Y2gpOworCQkJT1VUX1JJTkcoKGhlaWdodCA8PCAxNikgfCB3aWR0aCk7CisJCQlPVVRfUklORyhkZXZfcHJpdi0+ZGVwdGhfb2Zmc2V0ICsgc3RhcnQpOworCQkJT1VUX1JJTkcoY2xlYXJfenZhbCk7CisJCQlPVVRfUklORygwKTsKIAkJCUFEVkFOQ0VfTFBfUklORygpOwogCQl9CiAJfQogfQogCi1zdGF0aWMgdm9pZCBpODEwX2RtYV9kaXNwYXRjaF9zd2FwKCBkcm1fZGV2aWNlX3QgKmRldiApCitzdGF0aWMgdm9pZCBpODEwX2RtYV9kaXNwYXRjaF9zd2FwKGRybV9kZXZpY2VfdCAqIGRldikKIHsKLSAgIAlkcm1faTgxMF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLSAgICAgIAlkcm1faTgxMF9zYXJlYV90ICpzYXJlYV9wcml2ID0gZGV2X3ByaXYtPnNhcmVhX3ByaXY7CisJZHJtX2k4MTBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJZHJtX2k4MTBfc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9wcml2OwogCWludCBuYm94ID0gc2FyZWFfcHJpdi0+bmJveDsKIAlkcm1fY2xpcF9yZWN0X3QgKnBib3ggPSBzYXJlYV9wcml2LT5ib3hlczsKIAlpbnQgcGl0Y2ggPSBkZXZfcHJpdi0+cGl0Y2g7CkBAIC03NTUsNzUgKzc0NSw3MSBAQAogCiAJRFJNX0RFQlVHKCJzd2FwYnVmZmVyc1xuIik7CiAKLSAgCWk4MTBfa2VybmVsX2xvc3RfY29udGV4dChkZXYpOworCWk4MTBfa2VybmVsX2xvc3RfY29udGV4dChkZXYpOwogCi0gICAgICAJaWYgKG5ib3ggPiBJODEwX05SX1NBUkVBX0NMSVBSRUNUUykKLSAgICAgCQluYm94ID0gSTgxMF9OUl9TQVJFQV9DTElQUkVDVFM7CisJaWYgKG5ib3ggPiBJODEwX05SX1NBUkVBX0NMSVBSRUNUUykKKwkJbmJveCA9IEk4MTBfTlJfU0FSRUFfQ0xJUFJFQ1RTOwogCi0JZm9yIChpID0gMCA7IGkgPCBuYm94OyBpKyssIHBib3grKykKLQl7CisJZm9yIChpID0gMDsgaSA8IG5ib3g7IGkrKywgcGJveCsrKSB7CiAJCXVuc2lnbmVkIGludCB3ID0gcGJveC0+eDIgLSBwYm94LT54MTsKIAkJdW5zaWduZWQgaW50IGggPSBwYm94LT55MiAtIHBib3gtPnkxOwotCQl1bnNpZ25lZCBpbnQgZHN0ID0gcGJveC0+eDEqY3BwICsgcGJveC0+eTEqcGl0Y2g7CisJCXVuc2lnbmVkIGludCBkc3QgPSBwYm94LT54MSAqIGNwcCArIHBib3gtPnkxICogcGl0Y2g7CiAJCXVuc2lnbmVkIGludCBzdGFydCA9IGRzdDsKIAogCQlpZiAocGJveC0+eDEgPiBwYm94LT54MiB8fAogCQkgICAgcGJveC0+eTEgPiBwYm94LT55MiB8fAotCQkgICAgcGJveC0+eDIgPiBkZXZfcHJpdi0+dyB8fAotCQkgICAgcGJveC0+eTIgPiBkZXZfcHJpdi0+aCkKKwkJICAgIHBib3gtPngyID4gZGV2X3ByaXYtPncgfHwgcGJveC0+eTIgPiBkZXZfcHJpdi0+aCkKIAkJCWNvbnRpbnVlOwogCi0JCUJFR0lOX0xQX1JJTkcoIDYgKTsKLQkJT1VUX1JJTkcoIEJSMDBfQklUQkxUX0NMSUVOVCB8IEJSMDBfT1BfU1JDX0NPUFlfQkxUIHwgMHg0ICk7Ci0JCU9VVF9SSU5HKCBwaXRjaCB8ICgweENDIDw8IDE2KSk7Ci0JCU9VVF9SSU5HKCAoaCA8PCAxNikgfCAodyAqIGNwcCkpOworCQlCRUdJTl9MUF9SSU5HKDYpOworCQlPVVRfUklORyhCUjAwX0JJVEJMVF9DTElFTlQgfCBCUjAwX09QX1NSQ19DT1BZX0JMVCB8IDB4NCk7CisJCU9VVF9SSU5HKHBpdGNoIHwgKDB4Q0MgPDwgMTYpKTsKKwkJT1VUX1JJTkcoKGggPDwgMTYpIHwgKHcgKiBjcHApKTsKIAkJaWYgKGRldl9wcml2LT5jdXJyZW50X3BhZ2UgPT0gMCkKLQkJICBPVVRfUklORyhkZXZfcHJpdi0+ZnJvbnRfb2Zmc2V0ICsgc3RhcnQpOworCQkJT1VUX1JJTkcoZGV2X3ByaXYtPmZyb250X29mZnNldCArIHN0YXJ0KTsKIAkJZWxzZQotCQkgIE9VVF9SSU5HKGRldl9wcml2LT5iYWNrX29mZnNldCArIHN0YXJ0KTsKLQkJT1VUX1JJTkcoIHBpdGNoICk7CisJCQlPVVRfUklORyhkZXZfcHJpdi0+YmFja19vZmZzZXQgKyBzdGFydCk7CisJCU9VVF9SSU5HKHBpdGNoKTsKIAkJaWYgKGRldl9wcml2LT5jdXJyZW50X3BhZ2UgPT0gMCkKLQkJICBPVVRfUklORyhkZXZfcHJpdi0+YmFja19vZmZzZXQgKyBzdGFydCk7CisJCQlPVVRfUklORyhkZXZfcHJpdi0+YmFja19vZmZzZXQgKyBzdGFydCk7CiAJCWVsc2UKLQkJICBPVVRfUklORyhkZXZfcHJpdi0+ZnJvbnRfb2Zmc2V0ICsgc3RhcnQpOworCQkJT1VUX1JJTkcoZGV2X3ByaXYtPmZyb250X29mZnNldCArIHN0YXJ0KTsKIAkJQURWQU5DRV9MUF9SSU5HKCk7CiAJfQogfQogCi0KLXN0YXRpYyB2b2lkIGk4MTBfZG1hX2Rpc3BhdGNoX3ZlcnRleChkcm1fZGV2aWNlX3QgKmRldiwKLQkJCQkgICAgIGRybV9idWZfdCAqYnVmLAotCQkJCSAgICAgaW50IGRpc2NhcmQsCi0JCQkJICAgICBpbnQgdXNlZCkKK3N0YXRpYyB2b2lkIGk4MTBfZG1hX2Rpc3BhdGNoX3ZlcnRleChkcm1fZGV2aWNlX3QgKiBkZXYsCisJCQkJICAgICBkcm1fYnVmX3QgKiBidWYsIGludCBkaXNjYXJkLCBpbnQgdXNlZCkKIHsKLSAgIAlkcm1faTgxMF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlkcm1faTgxMF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlkcm1faTgxMF9idWZfcHJpdl90ICpidWZfcHJpdiA9IGJ1Zi0+ZGV2X3ByaXZhdGU7Ci0gICAJZHJtX2k4MTBfc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9wcml2OwotICAgCWRybV9jbGlwX3JlY3RfdCAqYm94ID0gc2FyZWFfcHJpdi0+Ym94ZXM7Ci0gICAJaW50IG5ib3ggPSBzYXJlYV9wcml2LT5uYm94OworCWRybV9pODEwX3NhcmVhX3QgKnNhcmVhX3ByaXYgPSBkZXZfcHJpdi0+c2FyZWFfcHJpdjsKKwlkcm1fY2xpcF9yZWN0X3QgKmJveCA9IHNhcmVhX3ByaXYtPmJveGVzOworCWludCBuYm94ID0gc2FyZWFfcHJpdi0+bmJveDsKIAl1bnNpZ25lZCBsb25nIGFkZHJlc3MgPSAodW5zaWduZWQgbG9uZylidWYtPmJ1c19hZGRyZXNzOwogCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBhZGRyZXNzIC0gZGV2LT5hZ3AtPmJhc2U7CiAJaW50IGkgPSAwOwotICAgCVJJTkdfTE9DQUxTOworCVJJTkdfTE9DQUxTOwogCi0gICAJaTgxMF9rZXJuZWxfbG9zdF9jb250ZXh0KGRldik7CisJaTgxMF9rZXJuZWxfbG9zdF9jb250ZXh0KGRldik7CiAKLSAgIAlpZiAobmJveCA+IEk4MTBfTlJfU0FSRUFfQ0xJUFJFQ1RTKQorCWlmIChuYm94ID4gSTgxMF9OUl9TQVJFQV9DTElQUkVDVFMpCiAJCW5ib3ggPSBJODEwX05SX1NBUkVBX0NMSVBSRUNUUzsKIAotCWlmICh1c2VkID4gNCoxMDI0KQorCWlmICh1c2VkID4gNCAqIDEwMjQpCiAJCXVzZWQgPSAwOwogCiAJaWYgKHNhcmVhX3ByaXYtPmRpcnR5KQotCSAgIGk4MTBFbWl0U3RhdGUoIGRldiApOworCQlpODEwRW1pdFN0YXRlKGRldik7CiAKIAlpZiAoYnVmX3ByaXYtPmN1cnJlbnRseV9tYXBwZWQgPT0gSTgxMF9CVUZfTUFQUEVEKSB7CiAJCXVuc2lnbmVkIGludCBwcmltID0gKHNhcmVhX3ByaXYtPnZlcnRleF9wcmltICYgUFJfTUFTSyk7CiAKLQkJKih1MzIgKilidWZfcHJpdi0+a2VybmVsX3ZpcnR1YWwgPSAoKEdGWF9PUF9QUklNSVRJVkUgfCBwcmltIHwgKCh1c2VkLzQpLTIpKSk7CisJCSoodTMyICopIGJ1Zl9wcml2LT5rZXJuZWxfdmlydHVhbCA9CisJCSAgICAoKEdGWF9PUF9QUklNSVRJVkUgfCBwcmltIHwgKCh1c2VkIC8gNCkgLSAyKSkpOwogCiAJCWlmICh1c2VkICYgNCkgewotCQkJKih1MzIgKikoKHUzMilidWZfcHJpdi0+a2VybmVsX3ZpcnR1YWwgKyB1c2VkKSA9IDA7CisJCQkqKHUzMiAqKSAoKHUzMikgYnVmX3ByaXYtPmtlcm5lbF92aXJ0dWFsICsgdXNlZCkgPSAwOwogCQkJdXNlZCArPSA0OwogCQl9CiAKQEAgLTgzNCwxOSArODIwLDIwIEBACiAJCWRvIHsKIAkJCWlmIChpIDwgbmJveCkgewogCQkJCUJFR0lOX0xQX1JJTkcoNCk7Ci0JCQkJT1VUX1JJTkcoIEdGWF9PUF9TQ0lTU09SIHwgU0NfVVBEQVRFX1NDSVNTT1IgfAotCQkJCQkgIFNDX0VOQUJMRSApOwotCQkJCU9VVF9SSU5HKCBHRlhfT1BfU0NJU1NPUl9JTkZPICk7Ci0JCQkJT1VUX1JJTkcoIGJveFtpXS54MSB8IChib3hbaV0ueTE8PDE2KSApOwotCQkJCU9VVF9SSU5HKCAoYm94W2ldLngyLTEpIHwgKChib3hbaV0ueTItMSk8PDE2KSApOworCQkJCU9VVF9SSU5HKEdGWF9PUF9TQ0lTU09SIHwgU0NfVVBEQVRFX1NDSVNTT1IgfAorCQkJCQkgU0NfRU5BQkxFKTsKKwkJCQlPVVRfUklORyhHRlhfT1BfU0NJU1NPUl9JTkZPKTsKKwkJCQlPVVRfUklORyhib3hbaV0ueDEgfCAoYm94W2ldLnkxIDw8IDE2KSk7CisJCQkJT1VUX1JJTkcoKGJveFtpXS54MiAtCisJCQkJCSAgMSkgfCAoKGJveFtpXS55MiAtIDEpIDw8IDE2KSk7CiAJCQkJQURWQU5DRV9MUF9SSU5HKCk7CiAJCQl9CiAKIAkJCUJFR0lOX0xQX1JJTkcoNCk7Ci0JCQlPVVRfUklORyggQ01EX09QX0JBVENIX0JVRkZFUiApOwotCQkJT1VUX1JJTkcoIHN0YXJ0IHwgQkIxX1BST1RFQ1RFRCApOwotCQkJT1VUX1JJTkcoIHN0YXJ0ICsgdXNlZCAtIDQgKTsKLQkJCU9VVF9SSU5HKCAwICk7CisJCQlPVVRfUklORyhDTURfT1BfQkFUQ0hfQlVGRkVSKTsKKwkJCU9VVF9SSU5HKHN0YXJ0IHwgQkIxX1BST1RFQ1RFRCk7CisJCQlPVVRfUklORyhzdGFydCArIHVzZWQgLSA0KTsKKwkJCU9VVF9SSU5HKDApOwogCQkJQURWQU5DRV9MUF9SSU5HKCk7CiAKIAkJfSB3aGlsZSAoKytpIDwgbmJveCk7CkBAIC04NTUsNTkgKzg0Miw1OSBAQAogCWlmIChkaXNjYXJkKSB7CiAJCWRldl9wcml2LT5jb3VudGVyKys7CiAKLQkJKHZvaWQpIGNtcHhjaGcoYnVmX3ByaXYtPmluX3VzZSwgSTgxMF9CVUZfQ0xJRU5ULAotCQkJICAgICAgIEk4MTBfQlVGX0hBUkRXQVJFKTsKKwkJKHZvaWQpY21weGNoZyhidWZfcHJpdi0+aW5fdXNlLCBJODEwX0JVRl9DTElFTlQsCisJCQkgICAgICBJODEwX0JVRl9IQVJEV0FSRSk7CiAKIAkJQkVHSU5fTFBfUklORyg4KTsKLQkJT1VUX1JJTkcoIENNRF9TVE9SRV9EV09SRF9JRFggKTsKLQkJT1VUX1JJTkcoIDIwICk7Ci0JCU9VVF9SSU5HKCBkZXZfcHJpdi0+Y291bnRlciApOwotCQlPVVRfUklORyggQ01EX1NUT1JFX0RXT1JEX0lEWCApOwotCQlPVVRfUklORyggYnVmX3ByaXYtPm15X3VzZV9pZHggKTsKLQkJT1VUX1JJTkcoIEk4MTBfQlVGX0ZSRUUgKTsKLQkJT1VUX1JJTkcoIENNRF9SRVBPUlRfSEVBRCApOwotCQlPVVRfUklORyggMCApOworCQlPVVRfUklORyhDTURfU1RPUkVfRFdPUkRfSURYKTsKKwkJT1VUX1JJTkcoMjApOworCQlPVVRfUklORyhkZXZfcHJpdi0+Y291bnRlcik7CisJCU9VVF9SSU5HKENNRF9TVE9SRV9EV09SRF9JRFgpOworCQlPVVRfUklORyhidWZfcHJpdi0+bXlfdXNlX2lkeCk7CisJCU9VVF9SSU5HKEk4MTBfQlVGX0ZSRUUpOworCQlPVVRfUklORyhDTURfUkVQT1JUX0hFQUQpOworCQlPVVRfUklORygwKTsKIAkJQURWQU5DRV9MUF9SSU5HKCk7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBpODEwX2RtYV9kaXNwYXRjaF9mbGlwKCBkcm1fZGV2aWNlX3QgKmRldiApCitzdGF0aWMgdm9pZCBpODEwX2RtYV9kaXNwYXRjaF9mbGlwKGRybV9kZXZpY2VfdCAqIGRldikKIHsKLSAgICAgICAgZHJtX2k4MTBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJZHJtX2k4MTBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJaW50IHBpdGNoID0gZGV2X3ByaXYtPnBpdGNoOwogCVJJTkdfTE9DQUxTOwogCi0JRFJNX0RFQlVHKCAiJXM6IHBhZ2U9JWQgcGZDdXJyZW50UGFnZT0lZFxuIiwgCi0JCV9fRlVOQ1RJT05fXywgCi0JCWRldl9wcml2LT5jdXJyZW50X3BhZ2UsCi0JCWRldl9wcml2LT5zYXJlYV9wcml2LT5wZl9jdXJyZW50X3BhZ2UpOwotCQotICAgICAgICBpODEwX2tlcm5lbF9sb3N0X2NvbnRleHQoZGV2KTsKKwlEUk1fREVCVUcoIiVzOiBwYWdlPSVkIHBmQ3VycmVudFBhZ2U9JWRcbiIsCisJCSAgX19GVU5DVElPTl9fLAorCQkgIGRldl9wcml2LT5jdXJyZW50X3BhZ2UsCisJCSAgZGV2X3ByaXYtPnNhcmVhX3ByaXYtPnBmX2N1cnJlbnRfcGFnZSk7CiAKLQlCRUdJTl9MUF9SSU5HKCAyICk7Ci0gICAJT1VUX1JJTkcoIElOU1RfUEFSU0VSX0NMSUVOVCB8IElOU1RfT1BfRkxVU0ggfCBJTlNUX0ZMVVNIX01BUF9DQUNIRSApOyAKLQlPVVRfUklORyggMCApOworCWk4MTBfa2VybmVsX2xvc3RfY29udGV4dChkZXYpOworCisJQkVHSU5fTFBfUklORygyKTsKKwlPVVRfUklORyhJTlNUX1BBUlNFUl9DTElFTlQgfCBJTlNUX09QX0ZMVVNIIHwgSU5TVF9GTFVTSF9NQVBfQ0FDSEUpOworCU9VVF9SSU5HKDApOwogCUFEVkFOQ0VfTFBfUklORygpOwogCi0JQkVHSU5fTFBfUklORyggSTgxMF9ERVNUX1NFVFVQX1NJWkUgKyAyICk7CisJQkVHSU5fTFBfUklORyhJODEwX0RFU1RfU0VUVVBfU0laRSArIDIpOwogCS8qIE9uIGk4MTUgYXQgbGVhc3QgQVNZTkMgaXMgYnVnZ3kgKi8KIAkvKiBwaXRjaDw8NSBpcyBmcm9tIDExLjIuOCBwMTU4LAogCSAgIGl0cyB0aGUgcGl0Y2ggLyA4IHRoZW4gbGVmdCBzaGlmdGVkIDgsCiAJICAgc28gKHBpdGNoID4+IDMpIDw8IDggKi8KLQlPVVRfUklORyggQ01EX09QX0ZST05UQlVGRkVSX0lORk8gfCAocGl0Y2g8PDUpIC8qfCBBU1lOQ19GTElQICovICk7Ci0JaWYgKCBkZXZfcHJpdi0+Y3VycmVudF9wYWdlID09IDAgKSB7Ci0JCU9VVF9SSU5HKCBkZXZfcHJpdi0+YmFja19vZmZzZXQgKTsKKwlPVVRfUklORyhDTURfT1BfRlJPTlRCVUZGRVJfSU5GTyB8IChwaXRjaCA8PCA1KSAvKnwgQVNZTkNfRkxJUCAqLyApOworCWlmIChkZXZfcHJpdi0+Y3VycmVudF9wYWdlID09IDApIHsKKwkJT1VUX1JJTkcoZGV2X3ByaXYtPmJhY2tfb2Zmc2V0KTsKIAkJZGV2X3ByaXYtPmN1cnJlbnRfcGFnZSA9IDE7CiAJfSBlbHNlIHsKLQkJT1VUX1JJTkcoIGRldl9wcml2LT5mcm9udF9vZmZzZXQgKTsKKwkJT1VUX1JJTkcoZGV2X3ByaXYtPmZyb250X29mZnNldCk7CiAJCWRldl9wcml2LT5jdXJyZW50X3BhZ2UgPSAwOwogCX0KIAlPVVRfUklORygwKTsKIAlBRFZBTkNFX0xQX1JJTkcoKTsKIAogCUJFR0lOX0xQX1JJTkcoMik7Ci0JT1VUX1JJTkcoIENNRF9PUF9XQUlUX0ZPUl9FVkVOVCB8IFdBSVRfRk9SX1BMQU5FX0FfRkxJUCApOwotCU9VVF9SSU5HKCAwICk7CisJT1VUX1JJTkcoQ01EX09QX1dBSVRfRk9SX0VWRU5UIHwgV0FJVF9GT1JfUExBTkVfQV9GTElQKTsKKwlPVVRfUklORygwKTsKIAlBRFZBTkNFX0xQX1JJTkcoKTsKIAogCS8qIEluY3JlbWVudCB0aGUgZnJhbWUgY291bnRlci4gIFRoZSBjbGllbnQtc2lkZSAzRCBkcml2ZXIgbXVzdApAQCAtOTE4LDQ2ICs5MDUsNDYgQEAKIAogfQogCi1zdGF0aWMgdm9pZCBpODEwX2RtYV9xdWllc2NlbnQoZHJtX2RldmljZV90ICpkZXYpCitzdGF0aWMgdm9pZCBpODEwX2RtYV9xdWllc2NlbnQoZHJtX2RldmljZV90ICogZGV2KQogewotICAgICAgCWRybV9pODEwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotICAgCVJJTkdfTE9DQUxTOworCWRybV9pODEwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCVJJTkdfTE9DQUxTOwogCiAvKiAgCXByaW50aygiJXNcbiIsIF9fRlVOQ1RJT05fXyk7ICovCiAKLSAgCWk4MTBfa2VybmVsX2xvc3RfY29udGV4dChkZXYpOworCWk4MTBfa2VybmVsX2xvc3RfY29udGV4dChkZXYpOwogCi0gICAJQkVHSU5fTFBfUklORyg0KTsKLSAgIAlPVVRfUklORyggSU5TVF9QQVJTRVJfQ0xJRU5UIHwgSU5TVF9PUF9GTFVTSCB8IElOU1RfRkxVU0hfTUFQX0NBQ0hFICk7Ci0gICAJT1VUX1JJTkcoIENNRF9SRVBPUlRfSEVBRCApOwotICAgICAgCU9VVF9SSU5HKCAwICk7Ci0gICAgICAJT1VUX1JJTkcoIDAgKTsKLSAgIAlBRFZBTkNFX0xQX1JJTkcoKTsKKwlCRUdJTl9MUF9SSU5HKDQpOworCU9VVF9SSU5HKElOU1RfUEFSU0VSX0NMSUVOVCB8IElOU1RfT1BfRkxVU0ggfCBJTlNUX0ZMVVNIX01BUF9DQUNIRSk7CisJT1VUX1JJTkcoQ01EX1JFUE9SVF9IRUFEKTsKKwlPVVRfUklORygwKTsKKwlPVVRfUklORygwKTsKKwlBRFZBTkNFX0xQX1JJTkcoKTsKIAotCWk4MTBfd2FpdF9yaW5nKCBkZXYsIGRldl9wcml2LT5yaW5nLlNpemUgLSA4ICk7CisJaTgxMF93YWl0X3JpbmcoZGV2LCBkZXZfcHJpdi0+cmluZy5TaXplIC0gOCk7CiB9CiAKLXN0YXRpYyBpbnQgaTgxMF9mbHVzaF9xdWV1ZShkcm1fZGV2aWNlX3QgKmRldikKK3N0YXRpYyBpbnQgaTgxMF9mbHVzaF9xdWV1ZShkcm1fZGV2aWNlX3QgKiBkZXYpCiB7Ci0gICAJZHJtX2k4MTBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJZHJtX2k4MTBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJZHJtX2RldmljZV9kbWFfdCAqZG1hID0gZGV2LT5kbWE7Ci0gICAJaW50IGksIHJldCA9IDA7Ci0gICAJUklOR19MT0NBTFM7Ci0JCisJaW50IGksIHJldCA9IDA7CisJUklOR19MT0NBTFM7CisKIC8qICAJcHJpbnRrKCIlc1xuIiwgX19GVU5DVElPTl9fKTsgKi8KIAotICAgCWk4MTBfa2VybmVsX2xvc3RfY29udGV4dChkZXYpOworCWk4MTBfa2VybmVsX2xvc3RfY29udGV4dChkZXYpOwogCi0gICAJQkVHSU5fTFBfUklORygyKTsKLSAgICAgIAlPVVRfUklORyggQ01EX1JFUE9SVF9IRUFEICk7Ci0gICAgICAJT1VUX1JJTkcoIDAgKTsKLSAgICAgIAlBRFZBTkNFX0xQX1JJTkcoKTsKKwlCRUdJTl9MUF9SSU5HKDIpOworCU9VVF9SSU5HKENNRF9SRVBPUlRfSEVBRCk7CisJT1VUX1JJTkcoMCk7CisJQURWQU5DRV9MUF9SSU5HKCk7CiAKLQlpODEwX3dhaXRfcmluZyggZGV2LCBkZXZfcHJpdi0+cmluZy5TaXplIC0gOCApOworCWk4MTBfd2FpdF9yaW5nKGRldiwgZGV2X3ByaXYtPnJpbmcuU2l6ZSAtIDgpOwogCi0gICAJZm9yIChpID0gMDsgaSA8IGRtYS0+YnVmX2NvdW50OyBpKyspIHsKLQkgICAJZHJtX2J1Zl90ICpidWYgPSBkbWEtPmJ1Zmxpc3RbIGkgXTsKLQkgICAJZHJtX2k4MTBfYnVmX3ByaXZfdCAqYnVmX3ByaXYgPSBidWYtPmRldl9wcml2YXRlOworCWZvciAoaSA9IDA7IGkgPCBkbWEtPmJ1Zl9jb3VudDsgaSsrKSB7CisJCWRybV9idWZfdCAqYnVmID0gZG1hLT5idWZsaXN0W2ldOworCQlkcm1faTgxMF9idWZfcHJpdl90ICpidWZfcHJpdiA9IGJ1Zi0+ZGV2X3ByaXZhdGU7CiAKIAkJaW50IHVzZWQgPSBjbXB4Y2hnKGJ1Zl9wcml2LT5pbl91c2UsIEk4MTBfQlVGX0hBUkRXQVJFLAogCQkJCSAgIEk4MTBfQlVGX0ZSRUUpOwpAQCAtOTY4LDI0ICs5NTUsMjcgQEAKIAkJCURSTV9ERUJVRygic3RpbGwgb24gY2xpZW50XG4iKTsKIAl9CiAKLSAgIAlyZXR1cm4gcmV0OworCXJldHVybiByZXQ7CiB9CiAKIC8qIE11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGxvY2sgaGVsZCAqLwotdm9pZCBpODEwX3JlY2xhaW1fYnVmZmVycyhkcm1fZGV2aWNlX3QgKmRldiwgc3RydWN0IGZpbGUgKmZpbHApCit2b2lkIGk4MTBfcmVjbGFpbV9idWZmZXJzKGRybV9kZXZpY2VfdCAqIGRldiwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJZHJtX2RldmljZV9kbWFfdCAqZG1hID0gZGV2LT5kbWE7Ci0JaW50CQkgaTsKKwlpbnQgaTsKIAotCWlmICghZG1hKSByZXR1cm47Ci0gICAgICAJaWYgKCFkZXYtPmRldl9wcml2YXRlKSByZXR1cm47Ci0JaWYgKCFkbWEtPmJ1Zmxpc3QpIHJldHVybjsKKwlpZiAoIWRtYSkKKwkJcmV0dXJuOworCWlmICghZGV2LT5kZXZfcHJpdmF0ZSkKKwkJcmV0dXJuOworCWlmICghZG1hLT5idWZsaXN0KQorCQlyZXR1cm47CiAKLSAgICAgICAgaTgxMF9mbHVzaF9xdWV1ZShkZXYpOworCWk4MTBfZmx1c2hfcXVldWUoZGV2KTsKIAogCWZvciAoaSA9IDA7IGkgPCBkbWEtPmJ1Zl9jb3VudDsgaSsrKSB7Ci0JICAgCWRybV9idWZfdCAqYnVmID0gZG1hLT5idWZsaXN0WyBpIF07Ci0JICAgCWRybV9pODEwX2J1Zl9wcml2X3QgKmJ1Zl9wcml2ID0gYnVmLT5kZXZfcHJpdmF0ZTsKKwkJZHJtX2J1Zl90ICpidWYgPSBkbWEtPmJ1Zmxpc3RbaV07CisJCWRybV9pODEwX2J1Zl9wcml2X3QgKmJ1Zl9wcml2ID0gYnVmLT5kZXZfcHJpdmF0ZTsKIAogCQlpZiAoYnVmLT5maWxwID09IGZpbHAgJiYgYnVmX3ByaXYpIHsKIAkJCWludCB1c2VkID0gY21weGNoZyhidWZfcHJpdi0+aW5fdXNlLCBJODEwX0JVRl9DTElFTlQsCkBAIC05OTQsNyArOTg0LDcgQEAKIAkJCWlmICh1c2VkID09IEk4MTBfQlVGX0NMSUVOVCkKIAkJCQlEUk1fREVCVUcoInJlY2xhaW1lZCBmcm9tIGNsaWVudFxuIik7CiAJCQlpZiAoYnVmX3ByaXYtPmN1cnJlbnRseV9tYXBwZWQgPT0gSTgxMF9CVUZfTUFQUEVEKQotCQkgICAgIAkJYnVmX3ByaXYtPmN1cnJlbnRseV9tYXBwZWQgPSBJODEwX0JVRl9VTk1BUFBFRDsKKwkJCQlidWZfcHJpdi0+Y3VycmVudGx5X21hcHBlZCA9IEk4MTBfQlVGX1VOTUFQUEVEOwogCQl9CiAJfQogfQpAQCAtMTAwMiwyOSArOTkyLDI5IEBACiBzdGF0aWMgaW50IGk4MTBfZmx1c2hfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCiAJCQkgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0gICAJZHJtX2ZpbGVfdAkgICpwcml2CSAgPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0gICAJZHJtX2RldmljZV90CSAgKmRldgkgID0gcHJpdi0+aGVhZC0+ZGV2OworCWRybV9maWxlX3QgKnByaXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJZHJtX2RldmljZV90ICpkZXYgPSBwcml2LT5oZWFkLT5kZXY7CiAKIAlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxwKTsKIAotICAgCWk4MTBfZmx1c2hfcXVldWUoZGV2KTsKLSAgIAlyZXR1cm4gMDsKKwlpODEwX2ZsdXNoX3F1ZXVlKGRldik7CisJcmV0dXJuIDA7CiB9CiAKLQogc3RhdGljIGludCBpODEwX2RtYV92ZXJ0ZXgoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCi0JICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorCQkJICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJZHJtX2ZpbGVfdCAqcHJpdiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAlkcm1fZGV2aWNlX3QgKmRldiA9IHByaXYtPmhlYWQtPmRldjsKIAlkcm1fZGV2aWNlX2RtYV90ICpkbWEgPSBkZXYtPmRtYTsKLSAgIAlkcm1faTgxMF9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pODEwX3ByaXZhdGVfdCAqKWRldi0+ZGV2X3ByaXZhdGU7Ci0gICAgICAJdTMyICpod19zdGF0dXMgPSBkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2U7Ci0gICAJZHJtX2k4MTBfc2FyZWFfdCAqc2FyZWFfcHJpdiA9IChkcm1faTgxMF9zYXJlYV90ICopCi0gICAgIAkJCQkJZGV2X3ByaXYtPnNhcmVhX3ByaXY7CisJZHJtX2k4MTBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1faTgxMF9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKKwl1MzIgKmh3X3N0YXR1cyA9IGRldl9wcml2LT5od19zdGF0dXNfcGFnZTsKKwlkcm1faTgxMF9zYXJlYV90ICpzYXJlYV9wcml2ID0gKGRybV9pODEwX3NhcmVhX3QgKikKKwkgICAgZGV2X3ByaXYtPnNhcmVhX3ByaXY7CiAJZHJtX2k4MTBfdmVydGV4X3QgdmVydGV4OwogCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZ2ZXJ0ZXgsIChkcm1faTgxMF92ZXJ0ZXhfdCBfX3VzZXIgKilhcmcsIHNpemVvZih2ZXJ0ZXgpKSkKKwlpZiAoY29weV9mcm9tX3VzZXIKKwkgICAgKCZ2ZXJ0ZXgsIChkcm1faTgxMF92ZXJ0ZXhfdCBfX3VzZXIgKikgYXJnLCBzaXplb2YodmVydGV4KSkpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlscCk7CkBAIC0xMDMyLDQ4ICsxMDIyLDQ2IEBACiAJRFJNX0RFQlVHKCJpODEwIGRtYSB2ZXJ0ZXgsIGlkeCAlZCB1c2VkICVkIGRpc2NhcmQgJWRcbiIsCiAJCSAgdmVydGV4LmlkeCwgdmVydGV4LnVzZWQsIHZlcnRleC5kaXNjYXJkKTsKIAotCWlmICh2ZXJ0ZXguaWR4IDwgMCB8fCB2ZXJ0ZXguaWR4ID4gZG1hLT5idWZfY291bnQpIAorCWlmICh2ZXJ0ZXguaWR4IDwgMCB8fCB2ZXJ0ZXguaWR4ID4gZG1hLT5idWZfY291bnQpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaTgxMF9kbWFfZGlzcGF0Y2hfdmVydGV4KCBkZXYsCi0JCQkJICBkbWEtPmJ1Zmxpc3RbIHZlcnRleC5pZHggXSwKLQkJCQkgIHZlcnRleC5kaXNjYXJkLCB2ZXJ0ZXgudXNlZCApOworCWk4MTBfZG1hX2Rpc3BhdGNoX3ZlcnRleChkZXYsCisJCQkJIGRtYS0+YnVmbGlzdFt2ZXJ0ZXguaWR4XSwKKwkJCQkgdmVydGV4LmRpc2NhcmQsIHZlcnRleC51c2VkKTsKIAotICAgCWF0b21pY19hZGQodmVydGV4LnVzZWQsICZkZXYtPmNvdW50c1tfRFJNX1NUQVRfU0VDT05EQVJZXSk7CisJYXRvbWljX2FkZCh2ZXJ0ZXgudXNlZCwgJmRldi0+Y291bnRzW19EUk1fU1RBVF9TRUNPTkRBUlldKTsKIAlhdG9taWNfaW5jKCZkZXYtPmNvdW50c1tfRFJNX1NUQVRfRE1BXSk7Ci0Jc2FyZWFfcHJpdi0+bGFzdF9lbnF1ZXVlID0gZGV2X3ByaXYtPmNvdW50ZXItMTsKLSAgIAlzYXJlYV9wcml2LT5sYXN0X2Rpc3BhdGNoID0gKGludCkgaHdfc3RhdHVzWzVdOworCXNhcmVhX3ByaXYtPmxhc3RfZW5xdWV1ZSA9IGRldl9wcml2LT5jb3VudGVyIC0gMTsKKwlzYXJlYV9wcml2LT5sYXN0X2Rpc3BhdGNoID0gKGludClod19zdGF0dXNbNV07CiAKIAlyZXR1cm4gMDsKIH0KIAotCi0KIHN0YXRpYyBpbnQgaTgxMF9jbGVhcl9idWZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAotCQkgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKKwkJCSAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCWRybV9maWxlX3QgKnByaXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAJZHJtX2RldmljZV90ICpkZXYgPSBwcml2LT5oZWFkLT5kZXY7CiAJZHJtX2k4MTBfY2xlYXJfdCBjbGVhcjsKIAotICAgCWlmIChjb3B5X2Zyb21fdXNlcigmY2xlYXIsIChkcm1faTgxMF9jbGVhcl90IF9fdXNlciAqKWFyZywgc2l6ZW9mKGNsZWFyKSkpCisJaWYgKGNvcHlfZnJvbV91c2VyCisJICAgICgmY2xlYXIsIChkcm1faTgxMF9jbGVhcl90IF9fdXNlciAqKSBhcmcsIHNpemVvZihjbGVhcikpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAogCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbHApOwogCi0gCS8qIEdIOiBTb21lb25lJ3MgZG9pbmcgbmFzdHkgdGhpbmdzLi4uICovCi0gCWlmICghZGV2LT5kZXZfcHJpdmF0ZSkgewotIAkJcmV0dXJuIC1FSU5WQUw7Ci0gCX0KKwkvKiBHSDogU29tZW9uZSdzIGRvaW5nIG5hc3R5IHRoaW5ncy4uLiAqLworCWlmICghZGV2LT5kZXZfcHJpdmF0ZSkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKLQlpODEwX2RtYV9kaXNwYXRjaF9jbGVhciggZGV2LCBjbGVhci5mbGFncywKLQkJCQkgY2xlYXIuY2xlYXJfY29sb3IsCi0JCQkJIGNsZWFyLmNsZWFyX2RlcHRoICk7Ci0gICAJcmV0dXJuIDA7CisJaTgxMF9kbWFfZGlzcGF0Y2hfY2xlYXIoZGV2LCBjbGVhci5mbGFncywKKwkJCQljbGVhci5jbGVhcl9jb2xvciwgY2xlYXIuY2xlYXJfZGVwdGgpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGk4MTBfc3dhcF9idWZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAotCQkgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorCQkJICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlkcm1fZmlsZV90ICpwcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCWRybV9kZXZpY2VfdCAqZGV2ID0gcHJpdi0+aGVhZC0+ZGV2OwpAQCAtMTA4MiwzNyArMTA3MCwzNyBAQAogCiAJTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlscCk7CiAKLQlpODEwX2RtYV9kaXNwYXRjaF9zd2FwKCBkZXYgKTsKLSAgIAlyZXR1cm4gMDsKKwlpODEwX2RtYV9kaXNwYXRjaF9zd2FwKGRldik7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgaTgxMF9nZXRhZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsCi0JCXVuc2lnbmVkIGxvbmcgYXJnKQorCQkgICAgICAgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0gICAJZHJtX2ZpbGVfdAkgICpwcml2CSAgICA9IGZpbHAtPnByaXZhdGVfZGF0YTsKLQlkcm1fZGV2aWNlX3QJICAqZGV2CSAgICA9IHByaXYtPmhlYWQtPmRldjsKLSAgIAlkcm1faTgxMF9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pODEwX3ByaXZhdGVfdCAqKWRldi0+ZGV2X3ByaXZhdGU7Ci0gICAgICAJdTMyICpod19zdGF0dXMgPSBkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2U7Ci0gICAJZHJtX2k4MTBfc2FyZWFfdCAqc2FyZWFfcHJpdiA9IChkcm1faTgxMF9zYXJlYV90ICopCi0gICAgIAkJCQkJZGV2X3ByaXYtPnNhcmVhX3ByaXY7CisJZHJtX2ZpbGVfdCAqcHJpdiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlkcm1fZGV2aWNlX3QgKmRldiA9IHByaXYtPmhlYWQtPmRldjsKKwlkcm1faTgxMF9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pODEwX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOworCXUzMiAqaHdfc3RhdHVzID0gZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlOworCWRybV9pODEwX3NhcmVhX3QgKnNhcmVhX3ByaXYgPSAoZHJtX2k4MTBfc2FyZWFfdCAqKQorCSAgICBkZXZfcHJpdi0+c2FyZWFfcHJpdjsKIAotICAgICAgCXNhcmVhX3ByaXYtPmxhc3RfZGlzcGF0Y2ggPSAoaW50KSBod19zdGF0dXNbNV07CisJc2FyZWFfcHJpdi0+bGFzdF9kaXNwYXRjaCA9IChpbnQpaHdfc3RhdHVzWzVdOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGk4MTBfZ2V0YnVmKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLAotCQl1bnNpZ25lZCBsb25nIGFyZykKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCWRybV9maWxlX3QJICAqcHJpdgkgICAgPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0JZHJtX2RldmljZV90CSAgKmRldgkgICAgPSBwcml2LT5oZWFkLT5kZXY7Ci0JaW50CQkgIHJldGNvZGUgICA9IDA7Ci0JZHJtX2k4MTBfZG1hX3QJICBkOwotICAgCWRybV9pODEwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX2k4MTBfcHJpdmF0ZV90ICopZGV2LT5kZXZfcHJpdmF0ZTsKLSAgIAl1MzIgKmh3X3N0YXR1cyA9IGRldl9wcml2LT5od19zdGF0dXNfcGFnZTsKLSAgIAlkcm1faTgxMF9zYXJlYV90ICpzYXJlYV9wcml2ID0gKGRybV9pODEwX3NhcmVhX3QgKikKLSAgICAgCQkJCQlkZXZfcHJpdi0+c2FyZWFfcHJpdjsKKwlkcm1fZmlsZV90ICpwcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCWRybV9kZXZpY2VfdCAqZGV2ID0gcHJpdi0+aGVhZC0+ZGV2OworCWludCByZXRjb2RlID0gMDsKKwlkcm1faTgxMF9kbWFfdCBkOworCWRybV9pODEwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX2k4MTBfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisJdTMyICpod19zdGF0dXMgPSBkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2U7CisJZHJtX2k4MTBfc2FyZWFfdCAqc2FyZWFfcHJpdiA9IChkcm1faTgxMF9zYXJlYV90ICopCisJICAgIGRldl9wcml2LT5zYXJlYV9wcml2OwogCi0gICAJaWYgKGNvcHlfZnJvbV91c2VyKCZkLCAoZHJtX2k4MTBfZG1hX3QgX191c2VyICopYXJnLCBzaXplb2YoZCkpKQorCWlmIChjb3B5X2Zyb21fdXNlcigmZCwgKGRybV9pODEwX2RtYV90IF9fdXNlciAqKSBhcmcsIHNpemVvZihkKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlscCk7CkBAIC0xMTI0LDI5ICsxMTEyLDI5IEBACiAJRFJNX0RFQlVHKCJpODEwX2RtYTogJWQgcmV0dXJuaW5nICVkLCBncmFudGVkID0gJWRcbiIsCiAJCSAgY3VycmVudC0+cGlkLCByZXRjb2RlLCBkLmdyYW50ZWQpOwogCi0JaWYgKGNvcHlfdG9fdXNlcigoZHJtX2RtYV90IF9fdXNlciAqKWFyZywgJmQsIHNpemVvZihkKSkpCisJaWYgKGNvcHlfdG9fdXNlcigoZHJtX2RtYV90IF9fdXNlciAqKSBhcmcsICZkLCBzaXplb2YoZCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKLSAgIAlzYXJlYV9wcml2LT5sYXN0X2Rpc3BhdGNoID0gKGludCkgaHdfc3RhdHVzWzVdOworCXNhcmVhX3ByaXYtPmxhc3RfZGlzcGF0Y2ggPSAoaW50KWh3X3N0YXR1c1s1XTsKIAogCXJldHVybiByZXRjb2RlOwogfQogCiBzdGF0aWMgaW50IGk4MTBfY29weWJ1ZihzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJIHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKKwkJCXN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAkvKiBOZXZlciBjb3B5IC0gMi40LnggZG9lc24ndCBuZWVkIGl0ICovCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgaTgxMF9kb2NvcHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsCi0JCQl1bnNpZ25lZCBsb25nIGFyZykKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCS8qIE5ldmVyIGNvcHkgLSAyLjQueCBkb2Vzbid0IG5lZWQgaXQgKi8KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgaTgxMF9kbWFfZGlzcGF0Y2hfbWMoZHJtX2RldmljZV90ICpkZXYsIGRybV9idWZfdCAqYnVmLCBpbnQgdXNlZCwKLQkJdW5zaWduZWQgaW50IGxhc3RfcmVuZGVyKQorc3RhdGljIHZvaWQgaTgxMF9kbWFfZGlzcGF0Y2hfbWMoZHJtX2RldmljZV90ICogZGV2LCBkcm1fYnVmX3QgKiBidWYsIGludCB1c2VkLAorCQkJCSB1bnNpZ25lZCBpbnQgbGFzdF9yZW5kZXIpCiB7CiAJZHJtX2k4MTBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJZHJtX2k4MTBfYnVmX3ByaXZfdCAqYnVmX3ByaXYgPSBidWYtPmRldl9wcml2YXRlOwpAQCAtMTE1OCwxOSArMTE0NiwxNyBAQAogCiAJaTgxMF9rZXJuZWxfbG9zdF9jb250ZXh0KGRldik7CiAKLQl1ID0gY21weGNoZyhidWZfcHJpdi0+aW5fdXNlLCBJODEwX0JVRl9DTElFTlQsCi0JCUk4MTBfQlVGX0hBUkRXQVJFKTsKKwl1ID0gY21weGNoZyhidWZfcHJpdi0+aW5fdXNlLCBJODEwX0JVRl9DTElFTlQsIEk4MTBfQlVGX0hBUkRXQVJFKTsKIAlpZiAodSAhPSBJODEwX0JVRl9DTElFTlQpIHsKIAkJRFJNX0RFQlVHKCJNQyBmb3VuZCBidWZmZXIgdGhhdCBpc24ndCBtaW5lIVxuIik7CiAJfQogCi0JaWYgKHVzZWQgPiA0KjEwMjQpCisJaWYgKHVzZWQgPiA0ICogMTAyNCkKIAkJdXNlZCA9IDA7CiAKIAlzYXJlYV9wcml2LT5kaXJ0eSA9IDB4N2Y7CiAKLQlEUk1fREVCVUcoImRpc3BhdGNoIG1jIGFkZHIgMHglbHgsIHVzZWQgMHgleFxuIiwKLQkJYWRkcmVzcywgdXNlZCk7CisJRFJNX0RFQlVHKCJkaXNwYXRjaCBtYyBhZGRyIDB4JWx4LCB1c2VkIDB4JXhcbiIsIGFkZHJlc3MsIHVzZWQpOwogCiAJZGV2X3ByaXYtPmNvdW50ZXIrKzsKIAlEUk1fREVCVUcoImRpc3BhdGNoIGNvdW50ZXIgOiAlbGRcbiIsIGRldl9wcml2LT5jb3VudGVyKTsKQEAgLTExODEsNDYgKzExNjcsNDUgQEAKIAogCWlmIChidWZfcHJpdi0+Y3VycmVudGx5X21hcHBlZCA9PSBJODEwX0JVRl9NQVBQRUQpIHsKIAkJaWYgKHVzZWQgJiA0KSB7Ci0JCQkqKHUzMiAqKSgodTMyKWJ1Zl9wcml2LT52aXJ0dWFsICsgdXNlZCkgPSAwOworCQkJKih1MzIgKikgKCh1MzIpIGJ1Zl9wcml2LT52aXJ0dWFsICsgdXNlZCkgPSAwOwogCQkJdXNlZCArPSA0OwogCQl9CiAKIAkJaTgxMF91bm1hcF9idWZmZXIoYnVmKTsKIAl9CiAJQkVHSU5fTFBfUklORyg0KTsKLQlPVVRfUklORyggQ01EX09QX0JBVENIX0JVRkZFUiApOwotCU9VVF9SSU5HKCBzdGFydCB8IEJCMV9QUk9URUNURUQgKTsKLQlPVVRfUklORyggc3RhcnQgKyB1c2VkIC0gNCApOwotCU9VVF9SSU5HKCAwICk7CisJT1VUX1JJTkcoQ01EX09QX0JBVENIX0JVRkZFUik7CisJT1VUX1JJTkcoc3RhcnQgfCBCQjFfUFJPVEVDVEVEKTsKKwlPVVRfUklORyhzdGFydCArIHVzZWQgLSA0KTsKKwlPVVRfUklORygwKTsKIAlBRFZBTkNFX0xQX1JJTkcoKTsKIAotCiAJQkVHSU5fTFBfUklORyg4KTsKLQlPVVRfUklORyggQ01EX1NUT1JFX0RXT1JEX0lEWCApOwotCU9VVF9SSU5HKCBidWZfcHJpdi0+bXlfdXNlX2lkeCApOwotCU9VVF9SSU5HKCBJODEwX0JVRl9GUkVFICk7Ci0JT1VUX1JJTkcoIDAgKTsKKwlPVVRfUklORyhDTURfU1RPUkVfRFdPUkRfSURYKTsKKwlPVVRfUklORyhidWZfcHJpdi0+bXlfdXNlX2lkeCk7CisJT1VUX1JJTkcoSTgxMF9CVUZfRlJFRSk7CisJT1VUX1JJTkcoMCk7CiAKLQlPVVRfUklORyggQ01EX1NUT1JFX0RXT1JEX0lEWCApOwotCU9VVF9SSU5HKCAxNiApOwotCU9VVF9SSU5HKCBsYXN0X3JlbmRlciApOwotCU9VVF9SSU5HKCAwICk7CisJT1VUX1JJTkcoQ01EX1NUT1JFX0RXT1JEX0lEWCk7CisJT1VUX1JJTkcoMTYpOworCU9VVF9SSU5HKGxhc3RfcmVuZGVyKTsKKwlPVVRfUklORygwKTsKIAlBRFZBTkNFX0xQX1JJTkcoKTsKIH0KIAogc3RhdGljIGludCBpODEwX2RtYV9tYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKKwkJICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCWRybV9maWxlX3QgKnByaXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAJZHJtX2RldmljZV90ICpkZXYgPSBwcml2LT5oZWFkLT5kZXY7CiAJZHJtX2RldmljZV9kbWFfdCAqZG1hID0gZGV2LT5kbWE7Ci0JZHJtX2k4MTBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1faTgxMF9wcml2YXRlX3QgKilkZXYtPmRldl9wcml2YXRlOworCWRybV9pODEwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX2k4MTBfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CiAJdTMyICpod19zdGF0dXMgPSBkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2U7CiAJZHJtX2k4MTBfc2FyZWFfdCAqc2FyZWFfcHJpdiA9IChkcm1faTgxMF9zYXJlYV90ICopCi0JCWRldl9wcml2LT5zYXJlYV9wcml2OworCSAgICBkZXZfcHJpdi0+c2FyZWFfcHJpdjsKIAlkcm1faTgxMF9tY190IG1jOwogCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZtYywgKGRybV9pODEwX21jX3QgX191c2VyICopYXJnLCBzaXplb2YobWMpKSkKKwlpZiAoY29weV9mcm9tX3VzZXIoJm1jLCAoZHJtX2k4MTBfbWNfdCBfX3VzZXIgKikgYXJnLCBzaXplb2YobWMpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxwKTsKQEAgLTEyMjksMTIgKzEyMTQsMTIgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpODEwX2RtYV9kaXNwYXRjaF9tYyhkZXYsIGRtYS0+YnVmbGlzdFttYy5pZHhdLCBtYy51c2VkLAotCQltYy5sYXN0X3JlbmRlciApOworCQkJICAgICBtYy5sYXN0X3JlbmRlcik7CiAKIAlhdG9taWNfYWRkKG1jLnVzZWQsICZkZXYtPmNvdW50c1tfRFJNX1NUQVRfU0VDT05EQVJZXSk7CiAJYXRvbWljX2luYygmZGV2LT5jb3VudHNbX0RSTV9TVEFUX0RNQV0pOwotCXNhcmVhX3ByaXYtPmxhc3RfZW5xdWV1ZSA9IGRldl9wcml2LT5jb3VudGVyLTE7Ci0Jc2FyZWFfcHJpdi0+bGFzdF9kaXNwYXRjaCA9IChpbnQpIGh3X3N0YXR1c1s1XTsKKwlzYXJlYV9wcml2LT5sYXN0X2VucXVldWUgPSBkZXZfcHJpdi0+Y291bnRlciAtIDE7CisJc2FyZWFfcHJpdi0+bGFzdF9kaXNwYXRjaCA9IChpbnQpaHdfc3RhdHVzWzVdOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMjQ0LDIyICsxMjI5LDIzIEBACiB7CiAJZHJtX2ZpbGVfdCAqcHJpdiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAlkcm1fZGV2aWNlX3QgKmRldiA9IHByaXYtPmhlYWQtPmRldjsKLQlkcm1faTgxMF9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pODEwX3ByaXZhdGVfdCAqKWRldi0+ZGV2X3ByaXZhdGU7CisJZHJtX2k4MTBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1faTgxMF9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKIAotCXJldHVybiAoaW50KSgoKHUzMiAqKShkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UpKVs0XSk7CisJcmV0dXJuIChpbnQpKCgodTMyICopIChkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UpKVs0XSk7CiB9CiAKIHN0YXRpYyBpbnQgaTgxMF9vdjBfaW5mbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorCQkJIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCWRybV9maWxlX3QgKnByaXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAJZHJtX2RldmljZV90ICpkZXYgPSBwcml2LT5oZWFkLT5kZXY7Ci0JZHJtX2k4MTBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1faTgxMF9wcml2YXRlX3QgKilkZXYtPmRldl9wcml2YXRlOworCWRybV9pODEwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX2k4MTBfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CiAJZHJtX2k4MTBfb3ZlcmxheV90IGRhdGE7CiAKIAlkYXRhLm9mZnNldCA9IGRldl9wcml2LT5vdmVybGF5X29mZnNldDsKIAlkYXRhLnBoeXNpY2FsID0gZGV2X3ByaXYtPm92ZXJsYXlfcGh5c2ljYWw7Ci0JaWYgKGNvcHlfdG9fdXNlcigoZHJtX2k4MTBfb3ZlcmxheV90IF9fdXNlciAqKWFyZywmZGF0YSxzaXplb2YoZGF0YSkpKQorCWlmIChjb3B5X3RvX3VzZXIKKwkgICAgKChkcm1faTgxMF9vdmVybGF5X3QgX191c2VyICopIGFyZywgJmRhdGEsIHNpemVvZihkYXRhKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCXJldHVybiAwOwogfQpAQCAtMTI2OSw3ICsxMjU1LDcgQEAKIHsKIAlkcm1fZmlsZV90ICpwcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCWRybV9kZXZpY2VfdCAqZGV2ID0gcHJpdi0+aGVhZC0+ZGV2OwotCWRybV9pODEwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX2k4MTBfcHJpdmF0ZV90ICopZGV2LT5kZXZfcHJpdmF0ZTsKKwlkcm1faTgxMF9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pODEwX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwogCiAJTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlscCk7CiAKQEAgLTEyNzcsNDcgKzEyNjMsNDYgQEAKIH0KIAogc3RhdGljIGludCBpODEwX292MF9mbGlwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAotCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCisJCQkgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJZHJtX2ZpbGVfdCAqcHJpdiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAlkcm1fZGV2aWNlX3QgKmRldiA9IHByaXYtPmhlYWQtPmRldjsKLQlkcm1faTgxMF9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pODEwX3ByaXZhdGVfdCAqKWRldi0+ZGV2X3ByaXZhdGU7CisJZHJtX2k4MTBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1faTgxMF9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKIAogCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbHApOwogCiAJLy9UZWxsIHRoZSBvdmVybGF5IHRvIHVwZGF0ZQotCUk4MTBfV1JJVEUoMHgzMDAwMCxkZXZfcHJpdi0+b3ZlcmxheV9waHlzaWNhbCB8IDB4ODAwMDAwMDApOworCUk4MTBfV1JJVEUoMHgzMDAwMCwgZGV2X3ByaXYtPm92ZXJsYXlfcGh5c2ljYWwgfCAweDgwMDAwMDAwKTsKIAogCXJldHVybiAwOwogfQogCi0KIC8qIE5vdCBzdXJlIHdoeSB0aGlzIGlzbid0IHNldCBhbGwgdGhlIHRpbWU6Ci0gKi8gCi1zdGF0aWMgdm9pZCBpODEwX2RvX2luaXRfcGFnZWZsaXAoIGRybV9kZXZpY2VfdCAqZGV2ICkKKyAqLworc3RhdGljIHZvaWQgaTgxMF9kb19pbml0X3BhZ2VmbGlwKGRybV9kZXZpY2VfdCAqIGRldikKIHsKIAlkcm1faTgxMF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQkKKwogCURSTV9ERUJVRygiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CiAJZGV2X3ByaXYtPnBhZ2VfZmxpcHBpbmcgPSAxOwogCWRldl9wcml2LT5jdXJyZW50X3BhZ2UgPSAwOwogCWRldl9wcml2LT5zYXJlYV9wcml2LT5wZl9jdXJyZW50X3BhZ2UgPSBkZXZfcHJpdi0+Y3VycmVudF9wYWdlOwogfQogCi1zdGF0aWMgaW50IGk4MTBfZG9fY2xlYW51cF9wYWdlZmxpcCggZHJtX2RldmljZV90ICpkZXYgKQorc3RhdGljIGludCBpODEwX2RvX2NsZWFudXBfcGFnZWZsaXAoZHJtX2RldmljZV90ICogZGV2KQogewogCWRybV9pODEwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCiAJRFJNX0RFQlVHKCIlc1xuIiwgX19GVU5DVElPTl9fKTsKIAlpZiAoZGV2X3ByaXYtPmN1cnJlbnRfcGFnZSAhPSAwKQotCQlpODEwX2RtYV9kaXNwYXRjaF9mbGlwKCBkZXYgKTsKKwkJaTgxMF9kbWFfZGlzcGF0Y2hfZmxpcChkZXYpOwogCiAJZGV2X3ByaXYtPnBhZ2VfZmxpcHBpbmcgPSAwOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGk4MTBfZmxpcF9idWZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAotCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCisJCQkgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCWRybV9maWxlX3QgKnByaXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAJZHJtX2RldmljZV90ICpkZXYgPSBwcml2LT5oZWFkLT5kZXY7CkBAIC0xMzI3LDE5ICsxMzEyLDE5IEBACiAKIAlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxwKTsKIAotCWlmICghZGV2X3ByaXYtPnBhZ2VfZmxpcHBpbmcpIAotCQlpODEwX2RvX2luaXRfcGFnZWZsaXAoIGRldiApOworCWlmICghZGV2X3ByaXYtPnBhZ2VfZmxpcHBpbmcpCisJCWk4MTBfZG9faW5pdF9wYWdlZmxpcChkZXYpOwogCi0JaTgxMF9kbWFfZGlzcGF0Y2hfZmxpcCggZGV2ICk7Ci0gICAJcmV0dXJuIDA7CisJaTgxMF9kbWFfZGlzcGF0Y2hfZmxpcChkZXYpOworCXJldHVybiAwOwogfQogCi12b2lkIGk4MTBfZHJpdmVyX3ByZXRha2Vkb3duKGRybV9kZXZpY2VfdCAqZGV2KQordm9pZCBpODEwX2RyaXZlcl9wcmV0YWtlZG93bihkcm1fZGV2aWNlX3QgKiBkZXYpCiB7Ci0JaTgxMF9kbWFfY2xlYW51cCggZGV2ICk7CisJaTgxMF9kbWFfY2xlYW51cChkZXYpOwogfQogCi12b2lkIGk4MTBfZHJpdmVyX3ByZXJlbGVhc2UoZHJtX2RldmljZV90ICpkZXYsIERSTUZJTEUgZmlscCkKK3ZvaWQgaTgxMF9kcml2ZXJfcHJlcmVsZWFzZShkcm1fZGV2aWNlX3QgKiBkZXYsIERSTUZJTEUgZmlscCkKIHsKIAlpZiAoZGV2LT5kZXZfcHJpdmF0ZSkgewogCQlkcm1faTgxMF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKQEAgLTEzNDksMzMgKzEzMzQsNDcgQEAKIAl9CiB9CiAKLXZvaWQgaTgxMF9kcml2ZXJfcmVsZWFzZShkcm1fZGV2aWNlX3QgKmRldiwgc3RydWN0IGZpbGUgKmZpbHApCit2b2lkIGk4MTBfZHJpdmVyX3JlbGVhc2UoZHJtX2RldmljZV90ICogZGV2LCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKIAlpODEwX3JlY2xhaW1fYnVmZmVycyhkZXYsIGZpbHApOwogfQogCi1pbnQgaTgxMF9kcml2ZXJfZG1hX3F1aWVzY2VudChkcm1fZGV2aWNlX3QgKmRldikKK2ludCBpODEwX2RyaXZlcl9kbWFfcXVpZXNjZW50KGRybV9kZXZpY2VfdCAqIGRldikKIHsKLQlpODEwX2RtYV9xdWllc2NlbnQoIGRldiApOworCWk4MTBfZG1hX3F1aWVzY2VudChkZXYpOwogCXJldHVybiAwOwogfQogCiBkcm1faW9jdGxfZGVzY190IGk4MTBfaW9jdGxzW10gPSB7Ci0JW0RSTV9JT0NUTF9OUihEUk1fSTgxMF9JTklUKV0gICAgPSB7IGk4MTBfZG1hX2luaXQsICAgIDEsIDEgfSwKLQlbRFJNX0lPQ1RMX05SKERSTV9JODEwX1ZFUlRFWCldICA9IHsgaTgxMF9kbWFfdmVydGV4LCAgMSwgMCB9LAotCVtEUk1fSU9DVExfTlIoRFJNX0k4MTBfQ0xFQVIpXSAgID0geyBpODEwX2NsZWFyX2J1ZnMsICAxLCAwIH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fSTgxMF9GTFVTSCldICAgPSB7IGk4MTBfZmx1c2hfaW9jdGwsIDEsIDAgfSwKLQlbRFJNX0lPQ1RMX05SKERSTV9JODEwX0dFVEFHRSldICA9IHsgaTgxMF9nZXRhZ2UsICAgICAgMSwgMCB9LAotCVtEUk1fSU9DVExfTlIoRFJNX0k4MTBfR0VUQlVGKV0gID0geyBpODEwX2dldGJ1ZiwgICAgICAxLCAwIH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fSTgxMF9TV0FQKV0gICAgPSB7IGk4MTBfc3dhcF9idWZzLCAgIDEsIDAgfSwKLQlbRFJNX0lPQ1RMX05SKERSTV9JODEwX0NPUFkpXSAgICA9IHsgaTgxMF9jb3B5YnVmLCAgICAgMSwgMCB9LAotCVtEUk1fSU9DVExfTlIoRFJNX0k4MTBfRE9DT1BZKV0gID0geyBpODEwX2RvY29weSwgICAgICAxLCAwIH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fSTgxMF9PVjBJTkZPKV0gPSB7IGk4MTBfb3YwX2luZm8sICAgIDEsIDAgfSwKLQlbRFJNX0lPQ1RMX05SKERSTV9JODEwX0ZTVEFUVVMpXSA9IHsgaTgxMF9mc3RhdHVzLCAgICAgMSwgMCB9LAotCVtEUk1fSU9DVExfTlIoRFJNX0k4MTBfT1YwRkxJUCldID0geyBpODEwX292MF9mbGlwLCAgICAxLCAwIH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fSTgxMF9NQyldICAgICAgPSB7IGk4MTBfZG1hX21jLCAgICAgIDEsIDEgfSwKLQlbRFJNX0lPQ1RMX05SKERSTV9JODEwX1JTVEFUVVMpXSA9IHsgaTgxMF9yc3RhdHVzLCAgICAgMSwgMCB9LAotCVtEUk1fSU9DVExfTlIoRFJNX0k4MTBfRkxJUCldICAgID0geyBpODEwX2ZsaXBfYnVmcywgICAxLCAwIH0KKwlbRFJNX0lPQ1RMX05SKERSTV9JODEwX0lOSVQpXSA9IHtpODEwX2RtYV9pbml0LCAxLCAxfQorCSwKKwlbRFJNX0lPQ1RMX05SKERSTV9JODEwX1ZFUlRFWCldID0ge2k4MTBfZG1hX3ZlcnRleCwgMSwgMH0KKwksCisJW0RSTV9JT0NUTF9OUihEUk1fSTgxMF9DTEVBUildID0ge2k4MTBfY2xlYXJfYnVmcywgMSwgMH0KKwksCisJW0RSTV9JT0NUTF9OUihEUk1fSTgxMF9GTFVTSCldID0ge2k4MTBfZmx1c2hfaW9jdGwsIDEsIDB9CisJLAorCVtEUk1fSU9DVExfTlIoRFJNX0k4MTBfR0VUQUdFKV0gPSB7aTgxMF9nZXRhZ2UsIDEsIDB9CisJLAorCVtEUk1fSU9DVExfTlIoRFJNX0k4MTBfR0VUQlVGKV0gPSB7aTgxMF9nZXRidWYsIDEsIDB9CisJLAorCVtEUk1fSU9DVExfTlIoRFJNX0k4MTBfU1dBUCldID0ge2k4MTBfc3dhcF9idWZzLCAxLCAwfQorCSwKKwlbRFJNX0lPQ1RMX05SKERSTV9JODEwX0NPUFkpXSA9IHtpODEwX2NvcHlidWYsIDEsIDB9CisJLAorCVtEUk1fSU9DVExfTlIoRFJNX0k4MTBfRE9DT1BZKV0gPSB7aTgxMF9kb2NvcHksIDEsIDB9CisJLAorCVtEUk1fSU9DVExfTlIoRFJNX0k4MTBfT1YwSU5GTyldID0ge2k4MTBfb3YwX2luZm8sIDEsIDB9CisJLAorCVtEUk1fSU9DVExfTlIoRFJNX0k4MTBfRlNUQVRVUyldID0ge2k4MTBfZnN0YXR1cywgMSwgMH0KKwksCisJW0RSTV9JT0NUTF9OUihEUk1fSTgxMF9PVjBGTElQKV0gPSB7aTgxMF9vdjBfZmxpcCwgMSwgMH0KKwksCisJW0RSTV9JT0NUTF9OUihEUk1fSTgxMF9NQyldID0ge2k4MTBfZG1hX21jLCAxLCAxfQorCSwKKwlbRFJNX0lPQ1RMX05SKERSTV9JODEwX1JTVEFUVVMpXSA9IHtpODEwX3JzdGF0dXMsIDEsIDB9CisJLAorCVtEUk1fSU9DVExfTlIoRFJNX0k4MTBfRkxJUCldID0ge2k4MTBfZmxpcF9idWZzLCAxLCAwfQogfTsKIAogaW50IGk4MTBfbWF4X2lvY3RsID0gRFJNX0FSUkFZX1NJWkUoaTgxMF9pb2N0bHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9pODEwX2RybS5oIGIvZHJpdmVycy9jaGFyL2RybS9pODEwX2RybS5oCmluZGV4IDczYWM0MDUuLjJkZWI5MjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vaTgxMF9kcm0uaAorKysgYi9kcml2ZXJzL2NoYXIvZHJtL2k4MTBfZHJtLmgKQEAgLTE5LDIxICsxOSwyMCBAQAogI2RlZmluZSBJODEwX0xPR19NSU5fVEVYX1JFR0lPTl9TSVpFIDE2CiAjZW5kaWYKIAotI2RlZmluZSBJODEwX1VQTE9BRF9URVgwSU1BR0UgIDB4MSAvKiBoYW5kbGVkIGNsaWVudHNpZGUgKi8KLSNkZWZpbmUgSTgxMF9VUExPQURfVEVYMUlNQUdFICAweDIgLyogaGFuZGxlZCBjbGllbnRzaWRlICovCisjZGVmaW5lIEk4MTBfVVBMT0FEX1RFWDBJTUFHRSAgMHgxCS8qIGhhbmRsZWQgY2xpZW50c2lkZSAqLworI2RlZmluZSBJODEwX1VQTE9BRF9URVgxSU1BR0UgIDB4MgkvKiBoYW5kbGVkIGNsaWVudHNpZGUgKi8KICNkZWZpbmUgSTgxMF9VUExPQURfQ1RYICAgICAgICAweDQKICNkZWZpbmUgSTgxMF9VUExPQURfQlVGRkVSUyAgICAweDgKICNkZWZpbmUgSTgxMF9VUExPQURfVEVYMCAgICAgICAweDEwCiAjZGVmaW5lIEk4MTBfVVBMT0FEX1RFWDEgICAgICAgMHgyMAogI2RlZmluZSBJODEwX1VQTE9BRF9DTElQUkVDVFMgIDB4NDAKIAotCiAvKiBJbmRpY2VzIGludG8gYnVmLlNldHVwIHdoZXJlIHZhcmlvdXMgYml0cyBvZiBzdGF0ZSBhcmUgbWlycm9yZWQgcGVyCiAgKiBjb250ZXh0IGFuZCBwZXIgYnVmZmVyLiAgVGhlc2UgY2FuIGJlIGZpcmVkIGF0IHRoZSBjYXJkIGFzIGEgdW5pdCwKICAqIG9yIGluIGEgcGllY2V3aXNlIGZhc2hpb24gYXMgcmVxdWlyZWQuCiAgKi8KIAotLyogRGVzdGJ1ZmZlciBzdGF0ZSAKKy8qIERlc3RidWZmZXIgc3RhdGUKICAqICAgIC0gYmFja2J1ZmZlciBsaW5lYXIgb2Zmc2V0IGFuZCBwaXRjaCAtLSBpbnZhcmllbnQgaW4gdGhlIGN1cnJlbnQgZHJpCiAgKiAgICAtIHpidWZmZXIgbGluZWFyIG9mZnNldCBhbmQgcGl0Y2ggLS0gYWxzbyBpbnZhcmllbnQKICAqICAgIC0gZHJhd2luZyBvcmlnaW4gaW4gYmFjayBhbmQgZGVwdGggYnVmZmVycy4KQEAgLTU1LDEzICs1NCwxMyBAQAogLyogQ29udGV4dCBzdGF0ZQogICovCiAjZGVmaW5lIEk4MTBfQ1RYUkVHX0NGMCAgIDAJLyogR0ZYX09QX0NPTE9SX0ZBQ1RPUiAqLwotI2RlZmluZSBJODEwX0NUWFJFR19DRjEgICAxCQotI2RlZmluZSBJODEwX0NUWFJFR19TVDAgICAyICAgICAvKiBHRlhfT1BfU1RJUFBMRSAqLworI2RlZmluZSBJODEwX0NUWFJFR19DRjEgICAxCisjZGVmaW5lIEk4MTBfQ1RYUkVHX1NUMCAgIDIJLyogR0ZYX09QX1NUSVBQTEUgKi8KICNkZWZpbmUgSTgxMF9DVFhSRUdfU1QxICAgMwogI2RlZmluZSBJODEwX0NUWFJFR19WRiAgICA0CS8qIEdGWF9PUF9WRVJURVhfRk1UICovCiAjZGVmaW5lIEk4MTBfQ1RYUkVHX01UICAgIDUJLyogR0ZYX09QX01BUF9URVhFTFMgKi8KICNkZWZpbmUgSTgxMF9DVFhSRUdfTUMwICAgNgkvKiBHRlhfT1BfTUFQX0NPTE9SX1NUQUdFUyAtIHN0YWdlIDAgKi8KLSNkZWZpbmUgSTgxMF9DVFhSRUdfTUMxICAgNyAgICAgLyogR0ZYX09QX01BUF9DT0xPUl9TVEFHRVMgLSBzdGFnZSAxICovCisjZGVmaW5lIEk4MTBfQ1RYUkVHX01DMSAgIDcJLyogR0ZYX09QX01BUF9DT0xPUl9TVEFHRVMgLSBzdGFnZSAxICovCiAjZGVmaW5lIEk4MTBfQ1RYUkVHX01DMiAgIDgJLyogR0ZYX09QX01BUF9DT0xPUl9TVEFHRVMgLSBzdGFnZSAyICovCiAjZGVmaW5lIEk4MTBfQ1RYUkVHX01BMCAgIDkJLyogR0ZYX09QX01BUF9BTFBIQV9TVEFHRVMgLSBzdGFnZSAwICovCiAjZGVmaW5lIEk4MTBfQ1RYUkVHX01BMSAgIDEwCS8qIEdGWF9PUF9NQVBfQUxQSEFfU1RBR0VTIC0gc3RhZ2UgMSAqLwpAQCAtNzQsMTQgKzczLDE0IEBACiAjZGVmaW5lIEk4MTBfQ1RYUkVHX1BWICAgIDE3CS8qIEdGWF9PUF9QVl9SVUxFIC0tIEludmFyaWVudCEgKi8KICNkZWZpbmUgSTgxMF9DVFhSRUdfWkEgICAgMTgJLyogR0ZYX09QX1pCSUFTX0FMUEhBRlVOQyAqLwogI2RlZmluZSBJODEwX0NUWFJFR19BQSAgICAxOQkvKiBHRlhfT1BfQU5USUFMSUFTICovCi0jZGVmaW5lIEk4MTBfQ1RYX1NFVFVQX1NJWkUgMjAgCisjZGVmaW5lIEk4MTBfQ1RYX1NFVFVQX1NJWkUgMjAKIAogLyogVGV4dHVyZSBzdGF0ZSAocGVyIHRleCB1bml0KQogICovCiAjZGVmaW5lIEk4MTBfVEVYUkVHX01JMCAgMAkvKiBHRlhfT1BfTUFQX0lORk8gKDQgZHdvcmRzKSAqLwotI2RlZmluZSBJODEwX1RFWFJFR19NSTEgIDEJCi0jZGVmaW5lIEk4MTBfVEVYUkVHX01JMiAgMgkKLSNkZWZpbmUgSTgxMF9URVhSRUdfTUkzICAzCQorI2RlZmluZSBJODEwX1RFWFJFR19NSTEgIDEKKyNkZWZpbmUgSTgxMF9URVhSRUdfTUkyICAyCisjZGVmaW5lIEk4MTBfVEVYUkVHX01JMyAgMwogI2RlZmluZSBJODEwX1RFWFJFR19NRiAgIDQJLyogR0ZYX09QX01BUF9GSUxURVIgKi8KICNkZWZpbmUgSTgxMF9URVhSRUdfTUxDICA1CS8qIEdGWF9PUF9NQVBfTE9EX0NUTCAqLwogI2RlZmluZSBJODEwX1RFWFJFR19NTEwgIDYJLyogR0ZYX09QX01BUF9MT0RfTElNSVRTICovCkBAIC05OCw3ICs5Nyw3IEBACiAJSTgxMF9JTklUX0RNQSA9IDB4MDEsCiAJSTgxMF9DTEVBTlVQX0RNQSA9IDB4MDIsCiAJSTgxMF9JTklUX0RNQV8xXzQgPSAweDAzCi0gfSBkcm1faTgxMF9pbml0X2Z1bmNfdDsKK30gZHJtX2k4MTBfaW5pdF9mdW5jX3Q7CiAKIC8qIFRoaXMgaXMgdGhlIGluaXQgc3RydWN0dXJlIGFmdGVyIHYxLjIgKi8KIHR5cGVkZWYgc3RydWN0IF9kcm1faTgxMF9pbml0IHsKQEAgLTEyMiw3ICsxMjEsNyBAQAogCXVuc2lnbmVkIGludCB3OwogCXVuc2lnbmVkIGludCBoOwogCXVuc2lnbmVkIGludCBwaXRjaDsKLQl1bnNpZ25lZCBpbnQgcGl0Y2hfYml0czsgCisJdW5zaWduZWQgaW50IHBpdGNoX2JpdHM7CiB9IGRybV9pODEwX2luaXRfdDsKIAogLyogVGhpcyBpcyB0aGUgaW5pdCBzdHJ1Y3R1cmUgcHJpb3IgdG8gdjEuMiAqLwpAQCAtMTQwLDIzICsxMzksMjMgQEAKIAl1bnNpZ25lZCBpbnQgdzsKIAl1bnNpZ25lZCBpbnQgaDsKIAl1bnNpZ25lZCBpbnQgcGl0Y2g7Ci0JdW5zaWduZWQgaW50IHBpdGNoX2JpdHM7IAorCXVuc2lnbmVkIGludCBwaXRjaF9iaXRzOwogfSBkcm1faTgxMF9wcmUxMl9pbml0X3Q7CiAKIC8qIFdhcm5pbmc6IElmIHlvdSBjaGFuZ2UgdGhlIFNBUkVBIHN0cnVjdHVyZSB5b3UgbXVzdCBjaGFuZ2UgdGhlIFhzZXJ2ZXIKICAqIHN0cnVjdHVyZSBhcyB3ZWxsICovCiAKIHR5cGVkZWYgc3RydWN0IF9kcm1faTgxMF90ZXhfcmVnaW9uIHsKLQl1bnNpZ25lZCBjaGFyIG5leHQsIHByZXY7IC8qIGluZGljZXMgdG8gZm9ybSBhIGNpcmN1bGFyIExSVSAgKi8KKwl1bnNpZ25lZCBjaGFyIG5leHQsIHByZXY7CS8qIGluZGljZXMgdG8gZm9ybSBhIGNpcmN1bGFyIExSVSAgKi8KIAl1bnNpZ25lZCBjaGFyIGluX3VzZTsJLyogb3duZWQgYnkgYSBjbGllbnQsIG9yIGZyZWU/ICovCiAJaW50IGFnZTsJCS8qIHRyYWNrZWQgYnkgY2xpZW50cyB0byB1cGRhdGUgbG9jYWwgTFJVJ3MgKi8KIH0gZHJtX2k4MTBfdGV4X3JlZ2lvbl90OwogCiB0eXBlZGVmIHN0cnVjdCBfZHJtX2k4MTBfc2FyZWEgewotICAgCXVuc2lnbmVkIGludCBDb250ZXh0U3RhdGVbSTgxMF9DVFhfU0VUVVBfU0laRV07Ci0gICAJdW5zaWduZWQgaW50IEJ1ZmZlclN0YXRlW0k4MTBfREVTVF9TRVRVUF9TSVpFXTsKLSAgIAl1bnNpZ25lZCBpbnQgVGV4U3RhdGVbMl1bSTgxMF9URVhfU0VUVVBfU0laRV07Ci0gICAJdW5zaWduZWQgaW50IGRpcnR5OworCXVuc2lnbmVkIGludCBDb250ZXh0U3RhdGVbSTgxMF9DVFhfU0VUVVBfU0laRV07CisJdW5zaWduZWQgaW50IEJ1ZmZlclN0YXRlW0k4MTBfREVTVF9TRVRVUF9TSVpFXTsKKwl1bnNpZ25lZCBpbnQgVGV4U3RhdGVbMl1bSTgxMF9URVhfU0VUVVBfU0laRV07CisJdW5zaWduZWQgaW50IGRpcnR5OwogCiAJdW5zaWduZWQgaW50IG5ib3g7CiAJZHJtX2NsaXBfcmVjdF90IGJveGVzW0k4MTBfTlJfU0FSRUFfQ0xJUFJFQ1RTXTsKQEAgLTE3NCwyMiArMTczLDIyIEBACiAJICogdGV4dHVyZSBzcGFjZSwgYW5kIGNhbiBtYWtlIGluZm9ybWVkIGRlY2lzaW9ucyBhcyB0byB3aGljaAogCSAqIGFyZWFzIHRvIGtpY2sgb3V0LiAgVGhlcmUgaXMgbm8gbmVlZCB0byBjaG9vc2Ugd2hldGhlciB0bwogCSAqIGtpY2sgb3V0IHlvdXIgb3duIHRleHR1cmUgb3Igc29tZW9uZSBlbHNlJ3MgLSBzaW1wbHkgZWplY3QKLQkgKiB0aGVtIGFsbCBpbiBMUlUgb3JkZXIuICAKKwkgKiB0aGVtIGFsbCBpbiBMUlUgb3JkZXIuCiAJICovCi0gICAKLQlkcm1faTgxMF90ZXhfcmVnaW9uX3QgdGV4TGlzdFtJODEwX05SX1RFWF9SRUdJT05TKzFdOyAKLQkJCQkvKiBMYXN0IGVsdCBpcyBzZW50aW5hbCAqLwotICAgICAgICBpbnQgdGV4QWdlOwkJLyogbGFzdCB0aW1lIHRleHR1cmUgd2FzIHVwbG9hZGVkICovCi0gICAgICAgIGludCBsYXN0X2VucXVldWU7CS8qIGxhc3QgdGltZSBhIGJ1ZmZlciB3YXMgZW5xdWV1ZWQgKi8KKworCWRybV9pODEwX3RleF9yZWdpb25fdCB0ZXhMaXN0W0k4MTBfTlJfVEVYX1JFR0lPTlMgKyAxXTsKKwkvKiBMYXN0IGVsdCBpcyBzZW50aW5hbCAqLworCWludCB0ZXhBZ2U7CQkvKiBsYXN0IHRpbWUgdGV4dHVyZSB3YXMgdXBsb2FkZWQgKi8KKwlpbnQgbGFzdF9lbnF1ZXVlOwkvKiBsYXN0IHRpbWUgYSBidWZmZXIgd2FzIGVucXVldWVkICovCiAJaW50IGxhc3RfZGlzcGF0Y2g7CS8qIGFnZSBvZiB0aGUgbW9zdCByZWNlbnRseSBkaXNwYXRjaGVkIGJ1ZmZlciAqLwotCWludCBsYXN0X3F1aWVzY2VudDsgICAgIC8qICAqLworCWludCBsYXN0X3F1aWVzY2VudDsJLyogICovCiAJaW50IGN0eE93bmVyOwkJLyogbGFzdCBjb250ZXh0IHRvIHVwbG9hZCBzdGF0ZSAqLwogCiAJaW50IHZlcnRleF9wcmltOwogCi0JaW50IHBmX2VuYWJsZWQ7ICAgICAgICAgICAgICAgLyogaXMgcGFnZWZsaXBwaW5nIGFsbG93ZWQ/ICovCisJaW50IHBmX2VuYWJsZWQ7CQkvKiBpcyBwYWdlZmxpcHBpbmcgYWxsb3dlZD8gKi8KIAlpbnQgcGZfYWN0aXZlOwotCWludCBwZl9jdXJyZW50X3BhZ2U7CSAgICAvKiB3aGljaCBidWZmZXIgaXMgYmVpbmcgZGlzcGxheWVkPyAqLworCWludCBwZl9jdXJyZW50X3BhZ2U7CS8qIHdoaWNoIGJ1ZmZlciBpcyBiZWluZyBkaXNwbGF5ZWQ/ICovCiB9IGRybV9pODEwX3NhcmVhX3Q7CiAKIC8qIFdBUk5JTkc6IElmIHlvdSBjaGFuZ2UgYW55IG9mIHRoZXNlIGRlZmluZXMsIG1ha2Ugc3VyZSB0byBjaGFuZ2UgdGhlCkBAIC0yNDMsMTMgKzI0MiwxMyBAQAogICogbmV3IHNldCBvZiBjbGlwcmVjdHMuCiAgKi8KIHR5cGVkZWYgc3RydWN0IF9kcm1faTgxMF92ZXJ0ZXggewotICAgCWludCBpZHg7CQkvKiBidWZmZXIgaW5kZXggKi8KKwlpbnQgaWR4OwkJLyogYnVmZmVyIGluZGV4ICovCiAJaW50IHVzZWQ7CQkvKiBuciBieXRlcyBpbiB1c2UgKi8KIAlpbnQgZGlzY2FyZDsJCS8qIGNsaWVudCBpcyBmaW5pc2hlZCB3aXRoIHRoZSBidWZmZXI/ICovCiB9IGRybV9pODEwX3ZlcnRleF90OwogCiB0eXBlZGVmIHN0cnVjdCBfZHJtX2k4MTBfY29weV90IHsKLSAgIAlpbnQgaWR4OwkJLyogYnVmZmVyIGluZGV4ICovCisJaW50IGlkeDsJCS8qIGJ1ZmZlciBpbmRleCAqLwogCWludCB1c2VkOwkJLyogbnIgYnl0ZXMgaW4gdXNlICovCiAJdm9pZCAqYWRkcmVzczsJCS8qIEFkZHJlc3MgdG8gY29weSBmcm9tICovCiB9IGRybV9pODEwX2NvcHlfdDsKQEAgLTI2NCw3ICsyNjMsNiBAQAogI2RlZmluZSBQUl9SRUNUUyAgICAgICAgICAgICAoMHg3PDwxOCkKICNkZWZpbmUgUFJfTUFTSyAgICAgICAgICAgICAgKDB4Nzw8MTgpCiAKLQogdHlwZWRlZiBzdHJ1Y3QgZHJtX2k4MTBfZG1hIHsKIAl2b2lkICp2aXJ0dWFsOwogCWludCByZXF1ZXN0X2lkeDsKQEAgLTI3MywxNyArMjcxLDE2IEBACiB9IGRybV9pODEwX2RtYV90OwogCiB0eXBlZGVmIHN0cnVjdCBfZHJtX2k4MTBfb3ZlcmxheV90IHsKLQl1bnNpZ25lZCBpbnQgb2Zmc2V0OyAgICAvKiBBZGRyZXNzIG9mIHRoZSBPdmVybGF5IFJlZ3MgKi8KKwl1bnNpZ25lZCBpbnQgb2Zmc2V0OwkvKiBBZGRyZXNzIG9mIHRoZSBPdmVybGF5IFJlZ3MgKi8KIAl1bnNpZ25lZCBpbnQgcGh5c2ljYWw7CiB9IGRybV9pODEwX292ZXJsYXlfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgX2RybV9pODEwX21jIHsKLQlpbnQgaWR4OyAgICAgICAgICAgICAgICAvKiBidWZmZXIgaW5kZXggKi8KLQlpbnQgdXNlZDsgICAgICAgICAgICAgICAvKiBuciBieXRlcyBpbiB1c2UgKi8KLQlpbnQgbnVtX2Jsb2NrczsgICAgICAgICAvKiBudW1iZXIgb2YgR0ZYQmxvY2tzICovCi0JaW50ICpsZW5ndGg7ICAgICAgICAgICAgLyogTGlzdCBvZiBsZW5ndGhzIGZvciBHRlhCbG9ja3MgKEZVVFVSRSkqLwotCXVuc2lnbmVkIGludCBsYXN0X3JlbmRlcjsgLyogTGFzdCBSZW5kZXIgUmVxdWVzdCAqLworCWludCBpZHg7CQkvKiBidWZmZXIgaW5kZXggKi8KKwlpbnQgdXNlZDsJCS8qIG5yIGJ5dGVzIGluIHVzZSAqLworCWludCBudW1fYmxvY2tzOwkJLyogbnVtYmVyIG9mIEdGWEJsb2NrcyAqLworCWludCAqbGVuZ3RoOwkJLyogTGlzdCBvZiBsZW5ndGhzIGZvciBHRlhCbG9ja3MgKEZVVFVSRSkgKi8KKwl1bnNpZ25lZCBpbnQgbGFzdF9yZW5kZXI7CS8qIExhc3QgUmVuZGVyIFJlcXVlc3QgKi8KIH0gZHJtX2k4MTBfbWNfdDsKIAotCi0jZW5kaWYgLyogX0k4MTBfRFJNX0hfICovCisjZW5kaWYJCQkJLyogX0k4MTBfRFJNX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2k4MTBfZHJ2LmMgYi9kcml2ZXJzL2NoYXIvZHJtL2k4MTBfZHJ2LmMKaW5kZXggMDA2MDkzMi4uMzI3ZTJmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9pODEwX2Rydi5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vaTgxMF9kcnYuYwpAQCAtMzgsNyArMzgsNyBAQAogCiAjaW5jbHVkZSAiZHJtX3BjaWlkcy5oIgogCi1zdGF0aWMgaW50IHBvc3Rpbml0KCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzICkKK3N0YXRpYyBpbnQgcG9zdGluaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKIAkvKiBpODEwIGhhcyA0IG1vcmUgY291bnRlcnMgKi8KIAlkZXYtPmNvdW50ZXJzICs9IDQ7CkBAIC00NiwyOSArNDYsMjcgQEAKIAlkZXYtPnR5cGVzWzddID0gX0RSTV9TVEFUX1BSSU1BUlk7CiAJZGV2LT50eXBlc1s4XSA9IF9EUk1fU1RBVF9TRUNPTkRBUlk7CiAJZGV2LT50eXBlc1s5XSA9IF9EUk1fU1RBVF9ETUE7Ci0JCi0JRFJNX0lORk8oICJJbml0aWFsaXplZCAlcyAlZC4lZC4lZCAlcyBvbiBtaW5vciAlZDogJXNcbiIsCi0JCURSSVZFUl9OQU1FLAotCQlEUklWRVJfTUFKT1IsCi0JCURSSVZFUl9NSU5PUiwKLQkJRFJJVkVSX1BBVENITEVWRUwsCi0JCURSSVZFUl9EQVRFLAotCQlkZXYtPnByaW1hcnkubWlub3IsCi0JCXBjaV9wcmV0dHlfbmFtZShkZXYtPnBkZXYpCi0JCSk7CisKKwlEUk1fSU5GTygiSW5pdGlhbGl6ZWQgJXMgJWQuJWQuJWQgJXMgb24gbWlub3IgJWQ6ICVzXG4iLAorCQkgRFJJVkVSX05BTUUsCisJCSBEUklWRVJfTUFKT1IsCisJCSBEUklWRVJfTUlOT1IsCisJCSBEUklWRVJfUEFUQ0hMRVZFTCwKKwkJIERSSVZFUl9EQVRFLCBkZXYtPnByaW1hcnkubWlub3IsIHBjaV9wcmV0dHlfbmFtZShkZXYtPnBkZXYpCisJICAgICk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmVyc2lvbiggZHJtX3ZlcnNpb25fdCAqdmVyc2lvbiApCitzdGF0aWMgaW50IHZlcnNpb24oZHJtX3ZlcnNpb25fdCAqIHZlcnNpb24pCiB7CiAJaW50IGxlbjsKIAogCXZlcnNpb24tPnZlcnNpb25fbWFqb3IgPSBEUklWRVJfTUFKT1I7CiAJdmVyc2lvbi0+dmVyc2lvbl9taW5vciA9IERSSVZFUl9NSU5PUjsKIAl2ZXJzaW9uLT52ZXJzaW9uX3BhdGNobGV2ZWwgPSBEUklWRVJfUEFUQ0hMRVZFTDsKLQlEUk1fQ09QWSggdmVyc2lvbi0+bmFtZSwgRFJJVkVSX05BTUUgKTsKLQlEUk1fQ09QWSggdmVyc2lvbi0+ZGF0ZSwgRFJJVkVSX0RBVEUgKTsKLQlEUk1fQ09QWSggdmVyc2lvbi0+ZGVzYywgRFJJVkVSX0RFU0MgKTsKKwlEUk1fQ09QWSh2ZXJzaW9uLT5uYW1lLCBEUklWRVJfTkFNRSk7CisJRFJNX0NPUFkodmVyc2lvbi0+ZGF0ZSwgRFJJVkVSX0RBVEUpOworCURSTV9DT1BZKHZlcnNpb24tPmRlc2MsIERSSVZFUl9ERVNDKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtODAsNyArNzgsOSBAQAogZXh0ZXJuIGludCBpODEwX21heF9pb2N0bDsKIAogc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIGRyaXZlciA9IHsKLQkuZHJpdmVyX2ZlYXR1cmVzID0gRFJJVkVSX1VTRV9BR1AgfCBEUklWRVJfUkVRVUlSRV9BR1AgfCBEUklWRVJfVVNFX01UUlIgfCBEUklWRVJfSEFWRV9ETUEgfCBEUklWRVJfRE1BX1FVRVVFLAorCS5kcml2ZXJfZmVhdHVyZXMgPQorCSAgICBEUklWRVJfVVNFX0FHUCB8IERSSVZFUl9SRVFVSVJFX0FHUCB8IERSSVZFUl9VU0VfTVRSUiB8CisJICAgIERSSVZFUl9IQVZFX0RNQSB8IERSSVZFUl9ETUFfUVVFVUUsCiAJLmRldl9wcml2X3NpemUgPSBzaXplb2YoZHJtX2k4MTBfYnVmX3ByaXZfdCksCiAJLnByZXRha2Vkb3duID0gaTgxMF9kcml2ZXJfcHJldGFrZWRvd24sCiAJLnByZXJlbGVhc2UgPSBpODEwX2RyaXZlcl9wcmVyZWxlYXNlLApAQCAtOTQsMTggKzk0LDIwIEBACiAJLnZlcnNpb24gPSB2ZXJzaW9uLAogCS5pb2N0bHMgPSBpODEwX2lvY3RscywKIAkuZm9wcyA9IHsKLQkJLm93bmVyID0gVEhJU19NT0RVTEUsCi0JCS5vcGVuID0gZHJtX29wZW4sCi0JCS5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCi0JCS5pb2N0bCA9IGRybV9pb2N0bCwKLQkJLm1tYXAgPSBkcm1fbW1hcCwKLQkJLnBvbGwgPSBkcm1fcG9sbCwKLQkJLmZhc3luYyA9IGRybV9mYXN5bmMsCi0JfSwKKwkJIC5vd25lciA9IFRISVNfTU9EVUxFLAorCQkgLm9wZW4gPSBkcm1fb3BlbiwKKwkJIC5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCisJCSAuaW9jdGwgPSBkcm1faW9jdGwsCisJCSAubW1hcCA9IGRybV9tbWFwLAorCQkgLnBvbGwgPSBkcm1fcG9sbCwKKwkJIC5mYXN5bmMgPSBkcm1fZmFzeW5jLAorCQkgfQorCSwKIAkucGNpX2RyaXZlciA9IHsKLQkJLm5hbWUgICAgICAgICAgPSBEUklWRVJfTkFNRSwKLQkJLmlkX3RhYmxlICAgICAgPSBwY2lpZGxpc3QsCi0JfSwKKwkJICAgICAgIC5uYW1lID0gRFJJVkVSX05BTUUsCisJCSAgICAgICAuaWRfdGFibGUgPSBwY2lpZGxpc3QsCisJCSAgICAgICB9CisJLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgaTgxMF9pbml0KHZvaWQpCkBAIC0xMjIsNiArMTI0LDYgQEAKIG1vZHVsZV9pbml0KGk4MTBfaW5pdCk7CiBtb2R1bGVfZXhpdChpODEwX2V4aXQpOwogCi1NT0RVTEVfQVVUSE9SKCBEUklWRVJfQVVUSE9SICk7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIERSSVZFUl9ERVNDICk7CitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgYW5kIGFkZGl0aW9uYWwgcmlnaHRzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2k4MTBfZHJ2LmggYi9kcml2ZXJzL2NoYXIvZHJtL2k4MTBfZHJ2LmgKaW5kZXggNjJlZTRmNS4uMmQ2YjU5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9pODEwX2Rydi5oCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vaTgxMF9kcnYuaApAQCAtNTYsMTQgKzU2LDE0IEBACiAjZGVmaW5lIERSSVZFUl9QQVRDSExFVkVMCTAKIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX2k4MTBfYnVmX3ByaXYgewotICAgCXUzMiAqaW5fdXNlOwotICAgCWludCBteV91c2VfaWR4OworCXUzMiAqaW5fdXNlOworCWludCBteV91c2VfaWR4OwogCWludCBjdXJyZW50bHlfbWFwcGVkOwogCXZvaWQgKnZpcnR1YWw7CiAJdm9pZCAqa2VybmVsX3ZpcnR1YWw7CiB9IGRybV9pODEwX2J1Zl9wcml2X3Q7CiAKLXR5cGVkZWYgc3RydWN0IF9kcm1faTgxMF9yaW5nX2J1ZmZlcnsKK3R5cGVkZWYgc3RydWN0IF9kcm1faTgxMF9yaW5nX2J1ZmZlciB7CiAJaW50IHRhaWxfbWFzazsKIAl1bnNpZ25lZCBsb25nIFN0YXJ0OwogCXVuc2lnbmVkIGxvbmcgRW5kOwpAQCAtNzksMTYgKzc5LDE1IEBACiAJZHJtX21hcF90ICptbWlvX21hcDsKIAogCWRybV9pODEwX3NhcmVhX3QgKnNhcmVhX3ByaXY7Ci0gICAJZHJtX2k4MTBfcmluZ19idWZmZXJfdCByaW5nOworCWRybV9pODEwX3JpbmdfYnVmZmVyX3QgcmluZzsKIAotICAgICAgCXZvaWQgKmh3X3N0YXR1c19wYWdlOwotICAgCXVuc2lnbmVkIGxvbmcgY291bnRlcjsKKwl2b2lkICpod19zdGF0dXNfcGFnZTsKKwl1bnNpZ25lZCBsb25nIGNvdW50ZXI7CiAKIAlkbWFfYWRkcl90IGRtYV9zdGF0dXNfcGFnZTsKIAogCWRybV9idWZfdCAqbW1hcF9idWZmZXI7CiAKLQogCXUzMiBmcm9udF9kaTEsIGJhY2tfZGkxLCB6aTE7CiAKIAlpbnQgYmFja19vZmZzZXQ7CkBAIC05Nyw3ICs5Niw3IEBACiAJaW50IG92ZXJsYXlfcGh5c2ljYWw7CiAJaW50IHcsIGg7CiAJaW50IHBpdGNoOwotICAJaW50IGJhY2tfcGl0Y2g7CisJaW50IGJhY2tfcGl0Y2g7CiAJaW50IGRlcHRoX3BpdGNoOwogCiAJaW50IGRvX2JveGVzOwpAQCAtMTA3LDE5ICsxMDYsMTkgQEAKIAlpbnQgcGFnZV9mbGlwcGluZzsKIAogCXdhaXRfcXVldWVfaGVhZF90IGlycV9xdWV1ZTsKLSAgIAlhdG9taWNfdCBpcnFfcmVjZWl2ZWQ7Ci0gICAJYXRvbWljX3QgaXJxX2VtaXR0ZWQ7Ci0gIAotICAgICAgICBpbnQgZnJvbnRfb2Zmc2V0OworCWF0b21pY190IGlycV9yZWNlaXZlZDsKKwlhdG9taWNfdCBpcnFfZW1pdHRlZDsKKworCWludCBmcm9udF9vZmZzZXQ7CiB9IGRybV9pODEwX3ByaXZhdGVfdDsKIAogCQkJCS8qIGk4MTBfZG1hLmMgKi8KLWV4dGVybiB2b2lkIGk4MTBfcmVjbGFpbV9idWZmZXJzKGRybV9kZXZpY2VfdCAqZGV2LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CitleHRlcm4gdm9pZCBpODEwX3JlY2xhaW1fYnVmZmVycyhkcm1fZGV2aWNlX3QgKiBkZXYsIHN0cnVjdCBmaWxlICpmaWxwKTsKIAotZXh0ZXJuIGludCBpODEwX2RyaXZlcl9kbWFfcXVpZXNjZW50KGRybV9kZXZpY2VfdCAqZGV2KTsKLWV4dGVybiB2b2lkIGk4MTBfZHJpdmVyX3JlbGVhc2UoZHJtX2RldmljZV90ICpkZXYsIHN0cnVjdCBmaWxlICpmaWxwKTsKLWV4dGVybiB2b2lkIGk4MTBfZHJpdmVyX3ByZXRha2Vkb3duKGRybV9kZXZpY2VfdCAqZGV2KTsKLWV4dGVybiB2b2lkIGk4MTBfZHJpdmVyX3ByZXJlbGVhc2UoZHJtX2RldmljZV90ICpkZXYsIERSTUZJTEUgZmlscCk7CitleHRlcm4gaW50IGk4MTBfZHJpdmVyX2RtYV9xdWllc2NlbnQoZHJtX2RldmljZV90ICogZGV2KTsKK2V4dGVybiB2b2lkIGk4MTBfZHJpdmVyX3JlbGVhc2UoZHJtX2RldmljZV90ICogZGV2LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CitleHRlcm4gdm9pZCBpODEwX2RyaXZlcl9wcmV0YWtlZG93bihkcm1fZGV2aWNlX3QgKiBkZXYpOworZXh0ZXJuIHZvaWQgaTgxMF9kcml2ZXJfcHJlcmVsZWFzZShkcm1fZGV2aWNlX3QgKiBkZXYsIERSTUZJTEUgZmlscCk7CiBleHRlcm4gaW50IGk4MTBfZHJpdmVyX2RldmljZV9pc19hZ3AoZHJtX2RldmljZV90ICogZGV2KTsKIAogI2RlZmluZSBJODEwX0JBU0UocmVnKQkJKCh1bnNpZ25lZCBsb25nKSBcCkBAIC0xNzAsNyArMTY5LDYgQEAKICNkZWZpbmUgSU5TVF9PUF9GTFVTSCAgICAgICAgMHgwMjAwMDAwMAogI2RlZmluZSBJTlNUX0ZMVVNIX01BUF9DQUNIRSAweDAwMDAwMDAxCiAKLQogI2RlZmluZSBCQjFfU1RBUlRfQUREUl9NQVNLICAgKH4weDcpCiAjZGVmaW5lIEJCMV9QUk9URUNURUQgICAgICAgICAoMTw8MCkKICNkZWZpbmUgQkIxX1VOUFJPVEVDVEVEICAgICAgICgwPDwwKQpAQCAtMjI5LDggKzIyNyw4IEBACiAjZGVmaW5lIEJSMDBfT1BfU1JDX0NPUFlfQkxUIDB4MTBDMDAwMDAKICNkZWZpbmUgQlIxM19TT0xJRF9QQVRURVJOICAgMHg4MDAwMDAwMAogCi0jZGVmaW5lIFdBSVRfRk9SX1BMQU5FX0FfU0NBTkxJTkVTICgxPDwxKSAKLSNkZWZpbmUgV0FJVF9GT1JfUExBTkVfQV9GTElQICAgICAgKDE8PDIpIAorI2RlZmluZSBXQUlUX0ZPUl9QTEFORV9BX1NDQU5MSU5FUyAoMTw8MSkKKyNkZWZpbmUgV0FJVF9GT1JfUExBTkVfQV9GTElQICAgICAgKDE8PDIpCiAjZGVmaW5lIFdBSVRfRk9SX1ZCTEFOSyAoMTw8MykKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2k4MzBfZG1hLmMgYi9kcml2ZXJzL2NoYXIvZHJtL2k4MzBfZG1hLmMKaW5kZXggNmY4OWQ1Ny4uZTExMDdlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9pODMwX2RtYS5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vaTgzMF9kbWEuYwpAQCAtMTEsMTEgKzExLDExIEBACiAgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKICAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQogICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqIAorICoKICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKICAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKICAqIFNvZnR3YXJlLgotICogCisgKgogICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKICAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAogICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCkBAIC00NywxMDMgKzQ3LDEwNCBAQAogI2RlZmluZSBJODMwX0JVRl9VTk1BUFBFRCAwCiAjZGVmaW5lIEk4MzBfQlVGX01BUFBFRCAgIDEKIAotc3RhdGljIGRybV9idWZfdCAqaTgzMF9mcmVlbGlzdF9nZXQoZHJtX2RldmljZV90ICpkZXYpCitzdGF0aWMgZHJtX2J1Zl90ICppODMwX2ZyZWVsaXN0X2dldChkcm1fZGV2aWNlX3QgKiBkZXYpCiB7Ci0gICAJZHJtX2RldmljZV9kbWFfdCAqZG1hID0gZGV2LT5kbWE7Ci0JaW50CQkgaTsKLSAgIAlpbnQgCQkgdXNlZDsKLSAgIAorCWRybV9kZXZpY2VfZG1hX3QgKmRtYSA9IGRldi0+ZG1hOworCWludCBpOworCWludCB1c2VkOworCiAJLyogTGluZWFyIHNlYXJjaCBtaWdodCBub3QgYmUgdGhlIGJlc3Qgc29sdXRpb24gKi8KIAotICAgCWZvciAoaSA9IDA7IGkgPCBkbWEtPmJ1Zl9jb3VudDsgaSsrKSB7Ci0JICAgCWRybV9idWZfdCAqYnVmID0gZG1hLT5idWZsaXN0WyBpIF07Ci0JICAgCWRybV9pODMwX2J1Zl9wcml2X3QgKmJ1Zl9wcml2ID0gYnVmLT5kZXZfcHJpdmF0ZTsKKwlmb3IgKGkgPSAwOyBpIDwgZG1hLT5idWZfY291bnQ7IGkrKykgeworCQlkcm1fYnVmX3QgKmJ1ZiA9IGRtYS0+YnVmbGlzdFtpXTsKKwkJZHJtX2k4MzBfYnVmX3ByaXZfdCAqYnVmX3ByaXYgPSBidWYtPmRldl9wcml2YXRlOwogCQkvKiBJbiB1c2UgaXMgYWxyZWFkeSBhIHBvaW50ZXIgKi8KLQkgICAJdXNlZCA9IGNtcHhjaGcoYnVmX3ByaXYtPmluX3VzZSwgSTgzMF9CVUZfRlJFRSwgCisJCXVzZWQgPSBjbXB4Y2hnKGJ1Zl9wcml2LT5pbl91c2UsIEk4MzBfQlVGX0ZSRUUsCiAJCQkgICAgICAgSTgzMF9CVUZfQ0xJRU5UKTsKLQkgICAJaWYodXNlZCA9PSBJODMwX0JVRl9GUkVFKSB7CisJCWlmICh1c2VkID09IEk4MzBfQlVGX0ZSRUUpIHsKIAkJCXJldHVybiBidWY7CiAJCX0KIAl9Ci0gICAJcmV0dXJuIE5VTEw7CisJcmV0dXJuIE5VTEw7CiB9CiAKIC8qIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGlmIHRoZSBidWZmZXIgaXMgbm90IHNlbnQgdG8gdGhlIGhhcmR3YXJlCiAgKiB5ZXQsIHRoZSBoYXJkd2FyZSB1cGRhdGVzIGluIHVzZSBmb3IgdXMgb25jZSBpdHMgb24gdGhlIHJpbmcgYnVmZmVyLgogICovCiAKLXN0YXRpYyBpbnQgaTgzMF9mcmVlbGlzdF9wdXQoZHJtX2RldmljZV90ICpkZXYsIGRybV9idWZfdCAqYnVmKQorc3RhdGljIGludCBpODMwX2ZyZWVsaXN0X3B1dChkcm1fZGV2aWNlX3QgKiBkZXYsIGRybV9idWZfdCAqIGJ1ZikKIHsKLSAgIAlkcm1faTgzMF9idWZfcHJpdl90ICpidWZfcHJpdiA9IGJ1Zi0+ZGV2X3ByaXZhdGU7Ci0gICAJaW50IHVzZWQ7Ci0gICAKLSAgIAkvKiBJbiB1c2UgaXMgYWxyZWFkeSBhIHBvaW50ZXIgKi8KLSAgIAl1c2VkID0gY21weGNoZyhidWZfcHJpdi0+aW5fdXNlLCBJODMwX0JVRl9DTElFTlQsIEk4MzBfQlVGX0ZSRUUpOwotICAgCWlmKHVzZWQgIT0gSTgzMF9CVUZfQ0xJRU5UKSB7Ci0JICAgCURSTV9FUlJPUigiRnJlZWluZyBidWZmZXIgdGhhdHMgbm90IGluIHVzZSA6ICVkXG4iLCBidWYtPmlkeCk7Ci0JICAgCXJldHVybiAtRUlOVkFMOworCWRybV9pODMwX2J1Zl9wcml2X3QgKmJ1Zl9wcml2ID0gYnVmLT5kZXZfcHJpdmF0ZTsKKwlpbnQgdXNlZDsKKworCS8qIEluIHVzZSBpcyBhbHJlYWR5IGEgcG9pbnRlciAqLworCXVzZWQgPSBjbXB4Y2hnKGJ1Zl9wcml2LT5pbl91c2UsIEk4MzBfQlVGX0NMSUVOVCwgSTgzMF9CVUZfRlJFRSk7CisJaWYgKHVzZWQgIT0gSTgzMF9CVUZfQ0xJRU5UKSB7CisJCURSTV9FUlJPUigiRnJlZWluZyBidWZmZXIgdGhhdHMgbm90IGluIHVzZSA6ICVkXG4iLCBidWYtPmlkeCk7CisJCXJldHVybiAtRUlOVkFMOwogCX0KLSAgIAotICAgCXJldHVybiAwOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgaTgzMF9tbWFwX2J1ZmZlcnMoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewotCWRybV9maWxlX3QJICAgICpwcml2CSAgPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0JZHJtX2RldmljZV90CSAgICAqZGV2OwotCWRybV9pODMwX3ByaXZhdGVfdCAgKmRldl9wcml2OwotCWRybV9idWZfdCAgICAgICAgICAgKmJ1ZjsKKwlkcm1fZmlsZV90ICpwcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCWRybV9kZXZpY2VfdCAqZGV2OworCWRybV9pODMwX3ByaXZhdGVfdCAqZGV2X3ByaXY7CisJZHJtX2J1Zl90ICpidWY7CiAJZHJtX2k4MzBfYnVmX3ByaXZfdCAqYnVmX3ByaXY7CiAKIAlsb2NrX2tlcm5lbCgpOwotCWRldgkgPSBwcml2LT5oZWFkLT5kZXY7CisJZGV2ID0gcHJpdi0+aGVhZC0+ZGV2OwogCWRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlidWYgICAgICA9IGRldl9wcml2LT5tbWFwX2J1ZmZlcjsKKwlidWYgPSBkZXZfcHJpdi0+bW1hcF9idWZmZXI7CiAJYnVmX3ByaXYgPSBidWYtPmRldl9wcml2YXRlOwotICAgCisKIAl2bWEtPnZtX2ZsYWdzIHw9IChWTV9JTyB8IFZNX0RPTlRDT1BZKTsKIAl2bWEtPnZtX2ZpbGUgPSBmaWxwOwotICAgCi0gICAJYnVmX3ByaXYtPmN1cnJlbnRseV9tYXBwZWQgPSBJODMwX0JVRl9NQVBQRUQ7CisKKwlidWZfcHJpdi0+Y3VycmVudGx5X21hcHBlZCA9IEk4MzBfQlVGX01BUFBFRDsKIAl1bmxvY2tfa2VybmVsKCk7CiAKIAlpZiAoaW9fcmVtYXBfcGZuX3JhbmdlKHZtYSwgdm1hLT52bV9zdGFydCwKLQkJCSAgICAgVk1fT0ZGU0VUKHZtYSkgPj4gUEFHRV9TSElGVCwKLQkJCSAgICAgdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0LAotCQkJICAgICB2bWEtPnZtX3BhZ2VfcHJvdCkpIHJldHVybiAtRUFHQUlOOworCQkJICAgICAgIFZNX09GRlNFVCh2bWEpID4+IFBBR0VfU0hJRlQsCisJCQkgICAgICAgdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX3BhZ2VfcHJvdCkpCisJCXJldHVybiAtRUFHQUlOOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpODMwX2J1ZmZlcl9mb3BzID0gewotCS5vcGVuCSA9IGRybV9vcGVuLAotCS5mbHVzaAkgPSBkcm1fZmx1c2gsCisJLm9wZW4gPSBkcm1fb3BlbiwKKwkuZmx1c2ggPSBkcm1fZmx1c2gsCiAJLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKLQkuaW9jdGwJID0gZHJtX2lvY3RsLAotCS5tbWFwCSA9IGk4MzBfbW1hcF9idWZmZXJzLAotCS5mYXN5bmMgID0gZHJtX2Zhc3luYywKKwkuaW9jdGwgPSBkcm1faW9jdGwsCisJLm1tYXAgPSBpODMwX21tYXBfYnVmZmVycywKKwkuZmFzeW5jID0gZHJtX2Zhc3luYywKIH07CiAKLXN0YXRpYyBpbnQgaTgzMF9tYXBfYnVmZmVyKGRybV9idWZfdCAqYnVmLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyBpbnQgaTgzMF9tYXBfYnVmZmVyKGRybV9idWZfdCAqIGJ1Ziwgc3RydWN0IGZpbGUgKmZpbHApCiB7Ci0JZHJtX2ZpbGVfdAkgICpwcml2CSAgPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0JZHJtX2RldmljZV90CSAgKmRldgkgID0gcHJpdi0+aGVhZC0+ZGV2OworCWRybV9maWxlX3QgKnByaXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJZHJtX2RldmljZV90ICpkZXYgPSBwcml2LT5oZWFkLT5kZXY7CiAJZHJtX2k4MzBfYnVmX3ByaXZfdCAqYnVmX3ByaXYgPSBidWYtPmRldl9wcml2YXRlOwotICAgICAgCWRybV9pODMwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotICAgCXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKm9sZF9mb3BzOworCWRybV9pODMwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKm9sZF9mb3BzOwogCXVuc2lnbmVkIGxvbmcgdmlydHVhbDsKIAlpbnQgcmV0Y29kZSA9IDA7CiAKLQlpZihidWZfcHJpdi0+Y3VycmVudGx5X21hcHBlZCA9PSBJODMwX0JVRl9NQVBQRUQpIHJldHVybiAtRUlOVkFMOworCWlmIChidWZfcHJpdi0+Y3VycmVudGx5X21hcHBlZCA9PSBJODMwX0JVRl9NQVBQRUQpCisJCXJldHVybiAtRUlOVkFMOwogCi0JZG93bl93cml0ZSggJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSApOworCWRvd25fd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAJb2xkX2ZvcHMgPSBmaWxwLT5mX29wOwogCWZpbHAtPmZfb3AgPSAmaTgzMF9idWZmZXJfZm9wczsKIAlkZXZfcHJpdi0+bW1hcF9idWZmZXIgPSBidWY7Ci0JdmlydHVhbCA9IGRvX21tYXAoZmlscCwgMCwgYnVmLT50b3RhbCwgUFJPVF9SRUFEfFBST1RfV1JJVEUsCi0JCQkgICAgTUFQX1NIQVJFRCwgYnVmLT5idXNfYWRkcmVzcyk7CisJdmlydHVhbCA9IGRvX21tYXAoZmlscCwgMCwgYnVmLT50b3RhbCwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKKwkJCSAgTUFQX1NIQVJFRCwgYnVmLT5idXNfYWRkcmVzcyk7CiAJZGV2X3ByaXYtPm1tYXBfYnVmZmVyID0gTlVMTDsKIAlmaWxwLT5mX29wID0gb2xkX2ZvcHM7Ci0JaWYgKElTX0VSUigodm9pZCAqKXZpcnR1YWwpKSB7CQkvKiB1Z2ggKi8KKwlpZiAoSVNfRVJSKCh2b2lkICopdmlydHVhbCkpIHsJLyogdWdoICovCiAJCS8qIFJlYWwgZXJyb3IgKi8KIAkJRFJNX0VSUk9SKCJtbWFwIGVycm9yXG4iKTsKIAkJcmV0Y29kZSA9IHZpcnR1YWw7CkBAIC0xNTEsMTcgKzE1MiwxNyBAQAogCX0gZWxzZSB7CiAJCWJ1Zl9wcml2LT52aXJ0dWFsID0gKHZvaWQgX191c2VyICopdmlydHVhbDsKIAl9Ci0JdXBfd3JpdGUoICZjdXJyZW50LT5tbS0+bW1hcF9zZW0gKTsKKwl1cF93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAogCXJldHVybiByZXRjb2RlOwogfQogCi1zdGF0aWMgaW50IGk4MzBfdW5tYXBfYnVmZmVyKGRybV9idWZfdCAqYnVmKQorc3RhdGljIGludCBpODMwX3VubWFwX2J1ZmZlcihkcm1fYnVmX3QgKiBidWYpCiB7CiAJZHJtX2k4MzBfYnVmX3ByaXZfdCAqYnVmX3ByaXYgPSBidWYtPmRldl9wcml2YXRlOwogCWludCByZXRjb2RlID0gMDsKIAotCWlmKGJ1Zl9wcml2LT5jdXJyZW50bHlfbWFwcGVkICE9IEk4MzBfQlVGX01BUFBFRCkgCisJaWYgKGJ1Zl9wcml2LT5jdXJyZW50bHlfbWFwcGVkICE9IEk4MzBfQlVGX01BUFBFRCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlkb3duX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwpAQCAtMTcwLDQzICsxNzEsNDMgQEAKIAkJCSAgICAoc2l6ZV90KSBidWYtPnRvdGFsKTsKIAl1cF93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAotICAgCWJ1Zl9wcml2LT5jdXJyZW50bHlfbWFwcGVkID0gSTgzMF9CVUZfVU5NQVBQRUQ7Ci0gICAJYnVmX3ByaXYtPnZpcnR1YWwgPSBOVUxMOworCWJ1Zl9wcml2LT5jdXJyZW50bHlfbWFwcGVkID0gSTgzMF9CVUZfVU5NQVBQRUQ7CisJYnVmX3ByaXYtPnZpcnR1YWwgPSBOVUxMOwogCiAJcmV0dXJuIHJldGNvZGU7CiB9CiAKLXN0YXRpYyBpbnQgaTgzMF9kbWFfZ2V0X2J1ZmZlcihkcm1fZGV2aWNlX3QgKmRldiwgZHJtX2k4MzBfZG1hX3QgKmQsIAorc3RhdGljIGludCBpODMwX2RtYV9nZXRfYnVmZmVyKGRybV9kZXZpY2VfdCAqIGRldiwgZHJtX2k4MzBfZG1hX3QgKiBkLAogCQkJICAgICAgIHN0cnVjdCBmaWxlICpmaWxwKQogewotCWRybV9idWZfdAkgICpidWY7CisJZHJtX2J1Zl90ICpidWY7CiAJZHJtX2k4MzBfYnVmX3ByaXZfdCAqYnVmX3ByaXY7CiAJaW50IHJldGNvZGUgPSAwOwogCiAJYnVmID0gaTgzMF9mcmVlbGlzdF9nZXQoZGV2KTsKIAlpZiAoIWJ1ZikgewogCQlyZXRjb2RlID0gLUVOT01FTTsKLQkgICAJRFJNX0RFQlVHKCJyZXRjb2RlPSVkXG4iLCByZXRjb2RlKTsKKwkJRFJNX0RFQlVHKCJyZXRjb2RlPSVkXG4iLCByZXRjb2RlKTsKIAkJcmV0dXJuIHJldGNvZGU7CiAJfQotICAgCisKIAlyZXRjb2RlID0gaTgzMF9tYXBfYnVmZmVyKGJ1ZiwgZmlscCk7Ci0JaWYocmV0Y29kZSkgeworCWlmIChyZXRjb2RlKSB7CiAJCWk4MzBfZnJlZWxpc3RfcHV0KGRldiwgYnVmKTsKLQkgICAJRFJNX0VSUk9SKCJtYXBidWYgZmFpbGVkLCByZXRjb2RlICVkXG4iLCByZXRjb2RlKTsKKwkJRFJNX0VSUk9SKCJtYXBidWYgZmFpbGVkLCByZXRjb2RlICVkXG4iLCByZXRjb2RlKTsKIAkJcmV0dXJuIHJldGNvZGU7CiAJfQogCWJ1Zi0+ZmlscCA9IGZpbHA7Ci0JYnVmX3ByaXYgPSBidWYtPmRldl9wcml2YXRlOwkKKwlidWZfcHJpdiA9IGJ1Zi0+ZGV2X3ByaXZhdGU7CiAJZC0+Z3JhbnRlZCA9IDE7Ci0gICAJZC0+cmVxdWVzdF9pZHggPSBidWYtPmlkeDsKLSAgIAlkLT5yZXF1ZXN0X3NpemUgPSBidWYtPnRvdGFsOwotICAgCWQtPnZpcnR1YWwgPSBidWZfcHJpdi0+dmlydHVhbDsKKwlkLT5yZXF1ZXN0X2lkeCA9IGJ1Zi0+aWR4OworCWQtPnJlcXVlc3Rfc2l6ZSA9IGJ1Zi0+dG90YWw7CisJZC0+dmlydHVhbCA9IGJ1Zl9wcml2LT52aXJ0dWFsOwogCiAJcmV0dXJuIHJldGNvZGU7CiB9CiAKLXN0YXRpYyBpbnQgaTgzMF9kbWFfY2xlYW51cChkcm1fZGV2aWNlX3QgKmRldikKK3N0YXRpYyBpbnQgaTgzMF9kbWFfY2xlYW51cChkcm1fZGV2aWNlX3QgKiBkZXYpCiB7CiAJZHJtX2RldmljZV9kbWFfdCAqZG1hID0gZGV2LT5kbWE7CiAKQEAgLTIxNCwxNDAgKzIxNSwxNDQgQEAKIAkgKiBtYXkgbm90IGhhdmUgYmVlbiBjYWxsZWQgZnJvbSB1c2Vyc3BhY2UgYW5kIGFmdGVyIGRldl9wcml2YXRlCiAJICogaXMgZnJlZWQsIGl0J3MgdG9vIGxhdGUuCiAJICovCi0JaWYgKCBkZXYtPmlycV9lbmFibGVkICkgZHJtX2lycV91bmluc3RhbGwoZGV2KTsKKwlpZiAoZGV2LT5pcnFfZW5hYmxlZCkKKwkJZHJtX2lycV91bmluc3RhbGwoZGV2KTsKIAogCWlmIChkZXYtPmRldl9wcml2YXRlKSB7CiAJCWludCBpOwotCSAgIAlkcm1faTgzMF9wcml2YXRlX3QgKmRldl9wcml2ID0gCi0JICAgICAJCShkcm1faTgzMF9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKLQkgICAKLQkgICAJaWYgKGRldl9wcml2LT5yaW5nLnZpcnR1YWxfc3RhcnQpIHsKLQkJICAgCWRybV9pb3JlbWFwZnJlZSgodm9pZCAqKSBkZXZfcHJpdi0+cmluZy52aXJ0dWFsX3N0YXJ0LAotCQkJCQkgZGV2X3ByaXYtPnJpbmcuU2l6ZSwgZGV2KTsKKwkJZHJtX2k4MzBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9CisJCSAgICAoZHJtX2k4MzBfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisKKwkJaWYgKGRldl9wcml2LT5yaW5nLnZpcnR1YWxfc3RhcnQpIHsKKwkJCWRybV9pb3JlbWFwZnJlZSgodm9pZCAqKWRldl9wcml2LT5yaW5nLnZpcnR1YWxfc3RhcnQsCisJCQkJCWRldl9wcml2LT5yaW5nLlNpemUsIGRldik7CiAJCX0KLQkgICAJaWYgKGRldl9wcml2LT5od19zdGF0dXNfcGFnZSkgeworCQlpZiAoZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlKSB7CiAJCQlwY2lfZnJlZV9jb25zaXN0ZW50KGRldi0+cGRldiwgUEFHRV9TSVpFLAogCQkJCQkgICAgZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlLAogCQkJCQkgICAgZGV2X3ByaXYtPmRtYV9zdGF0dXNfcGFnZSk7Ci0JCSAgIAkvKiBOZWVkIHRvIHJld3JpdGUgaGFyZHdhcmUgc3RhdHVzIHBhZ2UgKi8KLQkJICAgCUk4MzBfV1JJVEUoMHgwMjA4MCwgMHgxZmZmZjAwMCk7CisJCQkvKiBOZWVkIHRvIHJld3JpdGUgaGFyZHdhcmUgc3RhdHVzIHBhZ2UgKi8KKwkJCUk4MzBfV1JJVEUoMHgwMjA4MCwgMHgxZmZmZjAwMCk7CiAJCX0KIAotCSAgIAlkcm1fZnJlZShkZXYtPmRldl9wcml2YXRlLCBzaXplb2YoZHJtX2k4MzBfcHJpdmF0ZV90KSwgCisJCWRybV9mcmVlKGRldi0+ZGV2X3ByaXZhdGUsIHNpemVvZihkcm1faTgzMF9wcml2YXRlX3QpLAogCQkJIERSTV9NRU1fRFJJVkVSKTsKLQkgICAJZGV2LT5kZXZfcHJpdmF0ZSA9IE5VTEw7CisJCWRldi0+ZGV2X3ByaXZhdGUgPSBOVUxMOwogCiAJCWZvciAoaSA9IDA7IGkgPCBkbWEtPmJ1Zl9jb3VudDsgaSsrKSB7Ci0JCQlkcm1fYnVmX3QgKmJ1ZiA9IGRtYS0+YnVmbGlzdFsgaSBdOworCQkJZHJtX2J1Zl90ICpidWYgPSBkbWEtPmJ1Zmxpc3RbaV07CiAJCQlkcm1faTgzMF9idWZfcHJpdl90ICpidWZfcHJpdiA9IGJ1Zi0+ZGV2X3ByaXZhdGU7Ci0JCQlpZiAoIGJ1Zl9wcml2LT5rZXJuZWxfdmlydHVhbCAmJiBidWYtPnRvdGFsICkKLQkJCQlkcm1faW9yZW1hcGZyZWUoYnVmX3ByaXYtPmtlcm5lbF92aXJ0dWFsLCBidWYtPnRvdGFsLCBkZXYpOworCQkJaWYgKGJ1Zl9wcml2LT5rZXJuZWxfdmlydHVhbCAmJiBidWYtPnRvdGFsKQorCQkJCWRybV9pb3JlbWFwZnJlZShidWZfcHJpdi0+a2VybmVsX3ZpcnR1YWwsCisJCQkJCQlidWYtPnRvdGFsLCBkZXYpOwogCQl9CiAJfQotICAgCXJldHVybiAwOworCXJldHVybiAwOwogfQogCi1pbnQgaTgzMF93YWl0X3JpbmcoZHJtX2RldmljZV90ICpkZXYsIGludCBuLCBjb25zdCBjaGFyICpjYWxsZXIpCitpbnQgaTgzMF93YWl0X3JpbmcoZHJtX2RldmljZV90ICogZGV2LCBpbnQgbiwgY29uc3QgY2hhciAqY2FsbGVyKQogewotICAgCWRybV9pODMwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotICAgCWRybV9pODMwX3JpbmdfYnVmZmVyX3QgKnJpbmcgPSAmKGRldl9wcml2LT5yaW5nKTsKLSAgIAlpbnQgaXRlcnMgPSAwOwotICAgCXVuc2lnbmVkIGxvbmcgZW5kOworCWRybV9pODMwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWRybV9pODMwX3JpbmdfYnVmZmVyX3QgKnJpbmcgPSAmKGRldl9wcml2LT5yaW5nKTsKKwlpbnQgaXRlcnMgPSAwOworCXVuc2lnbmVkIGxvbmcgZW5kOwogCXVuc2lnbmVkIGludCBsYXN0X2hlYWQgPSBJODMwX1JFQUQoTFBfUklORyArIFJJTkdfSEVBRCkgJiBIRUFEX0FERFI7CiAKLQllbmQgPSBqaWZmaWVzICsgKEhaKjMpOwotICAgCXdoaWxlIChyaW5nLT5zcGFjZSA8IG4pIHsJCi0JICAgCXJpbmctPmhlYWQgPSBJODMwX1JFQUQoTFBfUklORyArIFJJTkdfSEVBRCkgJiBIRUFEX0FERFI7Ci0JICAgCXJpbmctPnNwYWNlID0gcmluZy0+aGVhZCAtIChyaW5nLT50YWlsKzgpOwotCQlpZiAocmluZy0+c3BhY2UgPCAwKSByaW5nLT5zcGFjZSArPSByaW5nLT5TaXplOwotCSAgIAorCWVuZCA9IGppZmZpZXMgKyAoSFogKiAzKTsKKwl3aGlsZSAocmluZy0+c3BhY2UgPCBuKSB7CisJCXJpbmctPmhlYWQgPSBJODMwX1JFQUQoTFBfUklORyArIFJJTkdfSEVBRCkgJiBIRUFEX0FERFI7CisJCXJpbmctPnNwYWNlID0gcmluZy0+aGVhZCAtIChyaW5nLT50YWlsICsgOCk7CisJCWlmIChyaW5nLT5zcGFjZSA8IDApCisJCQlyaW5nLT5zcGFjZSArPSByaW5nLT5TaXplOworCiAJCWlmIChyaW5nLT5oZWFkICE9IGxhc3RfaGVhZCkgewotCQkJZW5kID0gamlmZmllcyArIChIWiozKTsKKwkJCWVuZCA9IGppZmZpZXMgKyAoSFogKiAzKTsKIAkJCWxhc3RfaGVhZCA9IHJpbmctPmhlYWQ7CiAJCX0KLQkgIAotCSAgIAlpdGVycysrOwotCQlpZih0aW1lX2JlZm9yZShlbmQsIGppZmZpZXMpKSB7Ci0JCSAgIAlEUk1fRVJST1IoInNwYWNlOiAlZCB3YW50ZWQgJWRcbiIsIHJpbmctPnNwYWNlLCBuKTsKLQkJICAgCURSTV9FUlJPUigibG9ja3VwXG4iKTsKLQkJICAgCWdvdG8gb3V0X3dhaXRfcmluZzsKKworCQlpdGVycysrOworCQlpZiAodGltZV9iZWZvcmUoZW5kLCBqaWZmaWVzKSkgeworCQkJRFJNX0VSUk9SKCJzcGFjZTogJWQgd2FudGVkICVkXG4iLCByaW5nLT5zcGFjZSwgbik7CisJCQlEUk1fRVJST1IoImxvY2t1cFxuIik7CisJCQlnb3RvIG91dF93YWl0X3Jpbmc7CiAJCX0KIAkJdWRlbGF5KDEpOwogCQlkZXZfcHJpdi0+c2FyZWFfcHJpdi0+cGVyZl9ib3hlcyB8PSBJODMwX0JPWF9XQUlUOwogCX0KIAotb3V0X3dhaXRfcmluZzogICAKLSAgIAlyZXR1cm4gaXRlcnM7CisgICAgICBvdXRfd2FpdF9yaW5nOgorCXJldHVybiBpdGVyczsKIH0KIAotc3RhdGljIHZvaWQgaTgzMF9rZXJuZWxfbG9zdF9jb250ZXh0KGRybV9kZXZpY2VfdCAqZGV2KQorc3RhdGljIHZvaWQgaTgzMF9rZXJuZWxfbG9zdF9jb250ZXh0KGRybV9kZXZpY2VfdCAqIGRldikKIHsKLSAgICAgIAlkcm1faTgzMF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLSAgIAlkcm1faTgzMF9yaW5nX2J1ZmZlcl90ICpyaW5nID0gJihkZXZfcHJpdi0+cmluZyk7Ci0gICAgICAKLSAgIAlyaW5nLT5oZWFkID0gSTgzMF9SRUFEKExQX1JJTkcgKyBSSU5HX0hFQUQpICYgSEVBRF9BRERSOwotICAgICAJcmluZy0+dGFpbCA9IEk4MzBfUkVBRChMUF9SSU5HICsgUklOR19UQUlMKSAmIFRBSUxfQUREUjsKLSAgICAgCXJpbmctPnNwYWNlID0gcmluZy0+aGVhZCAtIChyaW5nLT50YWlsKzgpOwotICAgICAJaWYgKHJpbmctPnNwYWNlIDwgMCkgcmluZy0+c3BhY2UgKz0gcmluZy0+U2l6ZTsKKwlkcm1faTgzMF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlkcm1faTgzMF9yaW5nX2J1ZmZlcl90ICpyaW5nID0gJihkZXZfcHJpdi0+cmluZyk7CisKKwlyaW5nLT5oZWFkID0gSTgzMF9SRUFEKExQX1JJTkcgKyBSSU5HX0hFQUQpICYgSEVBRF9BRERSOworCXJpbmctPnRhaWwgPSBJODMwX1JFQUQoTFBfUklORyArIFJJTkdfVEFJTCkgJiBUQUlMX0FERFI7CisJcmluZy0+c3BhY2UgPSByaW5nLT5oZWFkIC0gKHJpbmctPnRhaWwgKyA4KTsKKwlpZiAocmluZy0+c3BhY2UgPCAwKQorCQlyaW5nLT5zcGFjZSArPSByaW5nLT5TaXplOwogCiAJaWYgKHJpbmctPmhlYWQgPT0gcmluZy0+dGFpbCkKIAkJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPnBlcmZfYm94ZXMgfD0gSTgzMF9CT1hfUklOR19FTVBUWTsKIH0KIAotc3RhdGljIGludCBpODMwX2ZyZWVsaXN0X2luaXQoZHJtX2RldmljZV90ICpkZXYsIGRybV9pODMwX3ByaXZhdGVfdCAqZGV2X3ByaXYpCitzdGF0aWMgaW50IGk4MzBfZnJlZWxpc3RfaW5pdChkcm1fZGV2aWNlX3QgKiBkZXYsIGRybV9pODMwX3ByaXZhdGVfdCAqIGRldl9wcml2KQogewotICAgICAgCWRybV9kZXZpY2VfZG1hX3QgKmRtYSA9IGRldi0+ZG1hOwotICAgCWludCBteV9pZHggPSAzNjsKLSAgIAl1MzIgKmh3X3N0YXR1cyA9ICh1MzIgKikoZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlICsgbXlfaWR4KTsKLSAgIAlpbnQgaTsKKwlkcm1fZGV2aWNlX2RtYV90ICpkbWEgPSBkZXYtPmRtYTsKKwlpbnQgbXlfaWR4ID0gMzY7CisJdTMyICpod19zdGF0dXMgPSAodTMyICopIChkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UgKyBteV9pZHgpOworCWludCBpOwogCi0gICAJaWYoZG1hLT5idWZfY291bnQgPiAxMDE5KSB7Ci0JICAgCS8qIE5vdCBlbm91Z2ggc3BhY2UgaW4gdGhlIHN0YXR1cyBwYWdlIGZvciB0aGUgZnJlZWxpc3QgKi8KLQkgICAJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGRtYS0+YnVmX2NvdW50ID4gMTAxOSkgeworCQkvKiBOb3QgZW5vdWdoIHNwYWNlIGluIHRoZSBzdGF0dXMgcGFnZSBmb3IgdGhlIGZyZWVsaXN0ICovCisJCXJldHVybiAtRUlOVkFMOwogCX0KIAotICAgCWZvciAoaSA9IDA7IGkgPCBkbWEtPmJ1Zl9jb3VudDsgaSsrKSB7Ci0JICAgCWRybV9idWZfdCAqYnVmID0gZG1hLT5idWZsaXN0WyBpIF07Ci0JICAgCWRybV9pODMwX2J1Zl9wcml2X3QgKmJ1Zl9wcml2ID0gYnVmLT5kZXZfcHJpdmF0ZTsKKwlmb3IgKGkgPSAwOyBpIDwgZG1hLT5idWZfY291bnQ7IGkrKykgeworCQlkcm1fYnVmX3QgKmJ1ZiA9IGRtYS0+YnVmbGlzdFtpXTsKKwkJZHJtX2k4MzBfYnVmX3ByaXZfdCAqYnVmX3ByaXYgPSBidWYtPmRldl9wcml2YXRlOwogCi0JICAgCWJ1Zl9wcml2LT5pbl91c2UgPSBod19zdGF0dXMrKzsKLQkgICAJYnVmX3ByaXYtPm15X3VzZV9pZHggPSBteV9pZHg7Ci0JICAgCW15X2lkeCArPSA0OworCQlidWZfcHJpdi0+aW5fdXNlID0gaHdfc3RhdHVzKys7CisJCWJ1Zl9wcml2LT5teV91c2VfaWR4ID0gbXlfaWR4OworCQlteV9pZHggKz0gNDsKIAotCSAgIAkqYnVmX3ByaXYtPmluX3VzZSA9IEk4MzBfQlVGX0ZSRUU7CisJCSpidWZfcHJpdi0+aW5fdXNlID0gSTgzMF9CVUZfRlJFRTsKIAotCQlidWZfcHJpdi0+a2VybmVsX3ZpcnR1YWwgPSBkcm1faW9yZW1hcChidWYtPmJ1c19hZGRyZXNzLCAKLQkJCQkJCQlidWYtPnRvdGFsLCBkZXYpOworCQlidWZfcHJpdi0+a2VybmVsX3ZpcnR1YWwgPSBkcm1faW9yZW1hcChidWYtPmJ1c19hZGRyZXNzLAorCQkJCQkJICAgICAgIGJ1Zi0+dG90YWwsIGRldik7CiAJfQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGk4MzBfZG1hX2luaXRpYWxpemUoZHJtX2RldmljZV90ICpkZXYsIAotCQkJICAgICAgIGRybV9pODMwX3ByaXZhdGVfdCAqZGV2X3ByaXYsCi0JCQkgICAgICAgZHJtX2k4MzBfaW5pdF90ICppbml0KQorc3RhdGljIGludCBpODMwX2RtYV9pbml0aWFsaXplKGRybV9kZXZpY2VfdCAqIGRldiwKKwkJCSAgICAgICBkcm1faTgzMF9wcml2YXRlX3QgKiBkZXZfcHJpdiwKKwkJCSAgICAgICBkcm1faTgzMF9pbml0X3QgKiBpbml0KQogewogCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CiAKLSAgIAltZW1zZXQoZGV2X3ByaXYsIDAsIHNpemVvZihkcm1faTgzMF9wcml2YXRlX3QpKTsKKwltZW1zZXQoZGV2X3ByaXYsIDAsIHNpemVvZihkcm1faTgzMF9wcml2YXRlX3QpKTsKIAogCWxpc3RfZm9yX2VhY2gobGlzdCwgJmRldi0+bWFwbGlzdC0+aGVhZCkgewogCQlkcm1fbWFwX2xpc3RfdCAqcl9saXN0ID0gbGlzdF9lbnRyeShsaXN0LCBkcm1fbWFwX2xpc3RfdCwgaGVhZCk7Ci0JCWlmKCByX2xpc3QtPm1hcCAmJgorCQlpZiAocl9saXN0LT5tYXAgJiYKIAkJICAgIHJfbGlzdC0+bWFwLT50eXBlID09IF9EUk1fU0hNICYmCi0JCSAgICByX2xpc3QtPm1hcC0+ZmxhZ3MgJiBfRFJNX0NPTlRBSU5TX0xPQ0sgKSB7CisJCSAgICByX2xpc3QtPm1hcC0+ZmxhZ3MgJiBfRFJNX0NPTlRBSU5TX0xPQ0spIHsKIAkJCWRldl9wcml2LT5zYXJlYV9tYXAgPSByX2xpc3QtPm1hcDsKLSAJCQlicmVhazsKLSAJCX0KLSAJfQorCQkJYnJlYWs7CisJCX0KKwl9CiAKLQlpZighZGV2X3ByaXYtPnNhcmVhX21hcCkgeworCWlmICghZGV2X3ByaXYtPnNhcmVhX21hcCkgewogCQlkZXYtPmRldl9wcml2YXRlID0gKHZvaWQgKilkZXZfcHJpdjsKIAkJaTgzMF9kbWFfY2xlYW51cChkZXYpOwogCQlEUk1fRVJST1IoImNhbiBub3QgZmluZCBzYXJlYSFcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJZGV2X3ByaXYtPm1taW9fbWFwID0gZHJtX2NvcmVfZmluZG1hcChkZXYsIGluaXQtPm1taW9fb2Zmc2V0KTsKLQlpZighZGV2X3ByaXYtPm1taW9fbWFwKSB7CisJaWYgKCFkZXZfcHJpdi0+bW1pb19tYXApIHsKIAkJZGV2LT5kZXZfcHJpdmF0ZSA9ICh2b2lkICopZGV2X3ByaXY7CiAJCWk4MzBfZG1hX2NsZWFudXAoZGV2KTsKIAkJRFJNX0VSUk9SKCJjYW4gbm90IGZpbmQgbW1pbyBtYXAhXG4iKTsKQEAgLTM1NSw3ICszNjAsNyBAQAogCX0KIAlkZXYtPmFncF9idWZmZXJfdG9rZW4gPSBpbml0LT5idWZmZXJzX29mZnNldDsKIAlkZXYtPmFncF9idWZmZXJfbWFwID0gZHJtX2NvcmVfZmluZG1hcChkZXYsIGluaXQtPmJ1ZmZlcnNfb2Zmc2V0KTsKLQlpZighZGV2LT5hZ3BfYnVmZmVyX21hcCkgeworCWlmICghZGV2LT5hZ3BfYnVmZmVyX21hcCkgewogCQlkZXYtPmRldl9wcml2YXRlID0gKHZvaWQgKilkZXZfcHJpdjsKIAkJaTgzMF9kbWFfY2xlYW51cChkZXYpOwogCQlEUk1fRVJST1IoImNhbiBub3QgZmluZCBkbWEgYnVmZmVyIG1hcCFcbiIpOwpAQCAtMzYzLDI3ICszNjgsMjYgQEAKIAl9CiAKIAlkZXZfcHJpdi0+c2FyZWFfcHJpdiA9IChkcm1faTgzMF9zYXJlYV90ICopCi0JCSgodTggKilkZXZfcHJpdi0+c2FyZWFfbWFwLT5oYW5kbGUgKwotCQkgaW5pdC0+c2FyZWFfcHJpdl9vZmZzZXQpOworCSAgICAoKHU4ICopIGRldl9wcml2LT5zYXJlYV9tYXAtPmhhbmRsZSArIGluaXQtPnNhcmVhX3ByaXZfb2Zmc2V0KTsKIAotICAgCWRldl9wcml2LT5yaW5nLlN0YXJ0ID0gaW5pdC0+cmluZ19zdGFydDsKLSAgIAlkZXZfcHJpdi0+cmluZy5FbmQgPSBpbml0LT5yaW5nX2VuZDsKLSAgIAlkZXZfcHJpdi0+cmluZy5TaXplID0gaW5pdC0+cmluZ19zaXplOworCWRldl9wcml2LT5yaW5nLlN0YXJ0ID0gaW5pdC0+cmluZ19zdGFydDsKKwlkZXZfcHJpdi0+cmluZy5FbmQgPSBpbml0LT5yaW5nX2VuZDsKKwlkZXZfcHJpdi0+cmluZy5TaXplID0gaW5pdC0+cmluZ19zaXplOwogCi0gICAJZGV2X3ByaXYtPnJpbmcudmlydHVhbF9zdGFydCA9IGRybV9pb3JlbWFwKGRldi0+YWdwLT5iYXNlICsgCi0JCQkJCQkgICAgaW5pdC0+cmluZ19zdGFydCwgCi0JCQkJCQkgICAgaW5pdC0+cmluZ19zaXplLCBkZXYpOworCWRldl9wcml2LT5yaW5nLnZpcnR1YWxfc3RhcnQgPSBkcm1faW9yZW1hcChkZXYtPmFncC0+YmFzZSArCisJCQkJCQkgICBpbml0LT5yaW5nX3N0YXJ0LAorCQkJCQkJICAgaW5pdC0+cmluZ19zaXplLCBkZXYpOwogCi0gICAJaWYgKGRldl9wcml2LT5yaW5nLnZpcnR1YWxfc3RhcnQgPT0gTlVMTCkgewotCQlkZXYtPmRldl9wcml2YXRlID0gKHZvaWQgKikgZGV2X3ByaXY7Ci0JICAgCWk4MzBfZG1hX2NsZWFudXAoZGV2KTsKLQkgICAJRFJNX0VSUk9SKCJjYW4gbm90IGlvcmVtYXAgdmlydHVhbCBhZGRyZXNzIGZvciIKKwlpZiAoZGV2X3ByaXYtPnJpbmcudmlydHVhbF9zdGFydCA9PSBOVUxMKSB7CisJCWRldi0+ZGV2X3ByaXZhdGUgPSAodm9pZCAqKWRldl9wcml2OworCQlpODMwX2RtYV9jbGVhbnVwKGRldik7CisJCURSTV9FUlJPUigiY2FuIG5vdCBpb3JlbWFwIHZpcnR1YWwgYWRkcmVzcyBmb3IiCiAJCQkgICIgcmluZyBidWZmZXJcbiIpOwotCSAgIAlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0gICAJZGV2X3ByaXYtPnJpbmcudGFpbF9tYXNrID0gZGV2X3ByaXYtPnJpbmcuU2l6ZSAtIDE7Ci0gICAKKwlkZXZfcHJpdi0+cmluZy50YWlsX21hc2sgPSBkZXZfcHJpdi0+cmluZy5TaXplIC0gMTsKKwogCWRldl9wcml2LT53ID0gaW5pdC0+dzsKIAlkZXZfcHJpdi0+aCA9IGluaXQtPmg7CiAJZGV2X3ByaXYtPnBpdGNoID0gaW5pdC0+cGl0Y2g7CkBAIC0zOTUsMTAgKzM5OSwxMCBAQAogCWRldl9wcml2LT5iYWNrX2RpMSA9IGluaXQtPmJhY2tfb2Zmc2V0IHwgaW5pdC0+cGl0Y2hfYml0czsKIAlkZXZfcHJpdi0+emkxID0gaW5pdC0+ZGVwdGhfb2Zmc2V0IHwgaW5pdC0+cGl0Y2hfYml0czsKIAotCURSTV9ERUJVRygiZnJvbnRfZGkxICV4XG4iLCAgICBkZXZfcHJpdi0+ZnJvbnRfZGkxKTsKKwlEUk1fREVCVUcoImZyb250X2RpMSAleFxuIiwgZGV2X3ByaXYtPmZyb250X2RpMSk7CiAJRFJNX0RFQlVHKCJiYWNrX29mZnNldCAleFxuIiwgZGV2X3ByaXYtPmJhY2tfb2Zmc2V0KTsKLQlEUk1fREVCVUcoImJhY2tfZGkxICV4XG4iLCAgICBkZXZfcHJpdi0+YmFja19kaTEpOwotCURSTV9ERUJVRygicGl0Y2hfYml0cyAleFxuIiwgICAgaW5pdC0+cGl0Y2hfYml0cyk7CisJRFJNX0RFQlVHKCJiYWNrX2RpMSAleFxuIiwgZGV2X3ByaXYtPmJhY2tfZGkxKTsKKwlEUk1fREVCVUcoInBpdGNoX2JpdHMgJXhcbiIsIGluaXQtPnBpdGNoX2JpdHMpOwogCiAJZGV2X3ByaXYtPmNwcCA9IGluaXQtPmNwcDsKIAkvKiBXZSBhcmUgdXNpbmcgc2VwYXJhdGUgdmFsdWVzIGFzIHBsYWNlaG9sZGVycyBmb3IgbWVjaGFuaXNtcyBmb3IKQEAgLTQxMCw2MyArNDE0LDY0IEBACiAJZGV2X3ByaXYtPmRvX2JveGVzID0gMDsKIAlkZXZfcHJpdi0+dXNlX21pX2JhdGNoYnVmZmVyX3N0YXJ0ID0gMDsKIAotICAgCS8qIFByb2dyYW0gSGFyZHdhcmUgU3RhdHVzIFBhZ2UgKi8KLSAgIAlkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UgPQotCQlwY2lfYWxsb2NfY29uc2lzdGVudChkZXYtPnBkZXYsIFBBR0VfU0laRSwKLQkJCQkJCSZkZXZfcHJpdi0+ZG1hX3N0YXR1c19wYWdlKTsKLSAgIAlpZiAoIWRldl9wcml2LT5od19zdGF0dXNfcGFnZSkgeworCS8qIFByb2dyYW0gSGFyZHdhcmUgU3RhdHVzIFBhZ2UgKi8KKwlkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UgPQorCSAgICBwY2lfYWxsb2NfY29uc2lzdGVudChkZXYtPnBkZXYsIFBBR0VfU0laRSwKKwkJCQkgJmRldl9wcml2LT5kbWFfc3RhdHVzX3BhZ2UpOworCWlmICghZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlKSB7CiAJCWRldi0+ZGV2X3ByaXZhdGUgPSAodm9pZCAqKWRldl9wcml2OwogCQlpODMwX2RtYV9jbGVhbnVwKGRldik7CiAJCURSTV9FUlJPUigiQ2FuIG5vdCBhbGxvY2F0ZSBoYXJkd2FyZSBzdGF0dXMgcGFnZVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLSAgIAltZW1zZXQoZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlLCAwLCBQQUdFX1NJWkUpOworCW1lbXNldChkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UsIDAsIFBBR0VfU0laRSk7CiAJRFJNX0RFQlVHKCJodyBzdGF0dXMgcGFnZSBAICVwXG4iLCBkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UpOwotICAgCi0gICAJSTgzMF9XUklURSgweDAyMDgwLCBkZXZfcHJpdi0+ZG1hX3N0YXR1c19wYWdlKTsKKworCUk4MzBfV1JJVEUoMHgwMjA4MCwgZGV2X3ByaXYtPmRtYV9zdGF0dXNfcGFnZSk7CiAJRFJNX0RFQlVHKCJFbmFibGVkIGhhcmR3YXJlIHN0YXR1cyBwYWdlXG4iKTsKLSAgIAotICAgCS8qIE5vdyB3ZSBuZWVkIHRvIGluaXQgb3VyIGZyZWVsaXN0ICovCi0gICAJaWYoaTgzMF9mcmVlbGlzdF9pbml0KGRldiwgZGV2X3ByaXYpICE9IDApIHsKKworCS8qIE5vdyB3ZSBuZWVkIHRvIGluaXQgb3VyIGZyZWVsaXN0ICovCisJaWYgKGk4MzBfZnJlZWxpc3RfaW5pdChkZXYsIGRldl9wcml2KSAhPSAwKSB7CiAJCWRldi0+ZGV2X3ByaXZhdGUgPSAodm9pZCAqKWRldl9wcml2OwotCSAgIAlpODMwX2RtYV9jbGVhbnVwKGRldik7Ci0JICAgCURSTV9FUlJPUigiTm90IGVub3VnaCBzcGFjZSBpbiB0aGUgc3RhdHVzIHBhZ2UgZm9yIgorCQlpODMwX2RtYV9jbGVhbnVwKGRldik7CisJCURSTV9FUlJPUigiTm90IGVub3VnaCBzcGFjZSBpbiB0aGUgc3RhdHVzIHBhZ2UgZm9yIgogCQkJICAiIHRoZSBmcmVlbGlzdFxuIik7Ci0JICAgCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJZGV2LT5kZXZfcHJpdmF0ZSA9ICh2b2lkICopZGV2X3ByaXY7CiAKLSAgIAlyZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBpODMwX2RtYV9pbml0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAotCQkgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorCQkJIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotICAgCWRybV9maWxlX3QgKnByaXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0gICAJZHJtX2RldmljZV90ICpkZXYgPSBwcml2LT5oZWFkLT5kZXY7Ci0gICAJZHJtX2k4MzBfcHJpdmF0ZV90ICpkZXZfcHJpdjsKLSAgIAlkcm1faTgzMF9pbml0X3QgaW5pdDsKLSAgIAlpbnQgcmV0Y29kZSA9IDA7Ci0JCi0gIAlpZiAoY29weV9mcm9tX3VzZXIoJmluaXQsICh2b2lkICogX191c2VyKSBhcmcsIHNpemVvZihpbml0KSkpCisJZHJtX2ZpbGVfdCAqcHJpdiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlkcm1fZGV2aWNlX3QgKmRldiA9IHByaXYtPmhlYWQtPmRldjsKKwlkcm1faTgzMF9wcml2YXRlX3QgKmRldl9wcml2OworCWRybV9pODMwX2luaXRfdCBpbml0OworCWludCByZXRjb2RlID0gMDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmaW5pdCwgKHZvaWQgKl9fdXNlcilhcmcsIHNpemVvZihpbml0KSkpCiAJCXJldHVybiAtRUZBVUxUOwotCQotICAgCXN3aXRjaChpbml0LmZ1bmMpIHsKLQkgCWNhc2UgSTgzMF9JTklUX0RNQToKLQkJCWRldl9wcml2ID0gZHJtX2FsbG9jKHNpemVvZihkcm1faTgzMF9wcml2YXRlX3QpLCAKLQkJCQkJICAgICAgRFJNX01FTV9EUklWRVIpOwotCSAgIAkJaWYoZGV2X3ByaXYgPT0gTlVMTCkgcmV0dXJuIC1FTk9NRU07Ci0JICAgCQlyZXRjb2RlID0gaTgzMF9kbWFfaW5pdGlhbGl6ZShkZXYsIGRldl9wcml2LCAmaW5pdCk7Ci0JICAgCWJyZWFrOwotCSAJY2FzZSBJODMwX0NMRUFOVVBfRE1BOgotCSAgIAkJcmV0Y29kZSA9IGk4MzBfZG1hX2NsZWFudXAoZGV2KTsKLQkgICAJYnJlYWs7Ci0JIAlkZWZhdWx0OgotCSAgIAkJcmV0Y29kZSA9IC1FSU5WQUw7Ci0JICAgCWJyZWFrOworCisJc3dpdGNoIChpbml0LmZ1bmMpIHsKKwljYXNlIEk4MzBfSU5JVF9ETUE6CisJCWRldl9wcml2ID0gZHJtX2FsbG9jKHNpemVvZihkcm1faTgzMF9wcml2YXRlX3QpLAorCQkJCSAgICAgRFJNX01FTV9EUklWRVIpOworCQlpZiAoZGV2X3ByaXYgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCQlyZXRjb2RlID0gaTgzMF9kbWFfaW5pdGlhbGl6ZShkZXYsIGRldl9wcml2LCAmaW5pdCk7CisJCWJyZWFrOworCWNhc2UgSTgzMF9DTEVBTlVQX0RNQToKKwkJcmV0Y29kZSA9IGk4MzBfZG1hX2NsZWFudXAoZGV2KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0Y29kZSA9IC1FSU5WQUw7CisJCWJyZWFrOwogCX0KLSAgIAotICAgCXJldHVybiByZXRjb2RlOworCisJcmV0dXJuIHJldGNvZGU7CiB9CiAKICNkZWZpbmUgR0ZYX09QX1NUSVBQTEUgICAgICAgICAgICgoMHgzPDwyOSl8KDB4MWQ8PDI0KXwoMHg4Mzw8MTYpKQpAQCAtNDc2LDkyICs0ODEsODkgQEAKIC8qIE1vc3QgZWZmaWNpZW50IHdheSB0byB2ZXJpZnkgc3RhdGUgZm9yIHRoZSBpODMwIGlzIGFzIGl0IGlzCiAgKiBlbWl0dGVkLiAgTm9uLWNvbmZvcm1hbnQgc3RhdGUgaXMgc2lsZW50bHkgZHJvcHBlZC4KICAqLwotc3RhdGljIHZvaWQgaTgzMEVtaXRDb250ZXh0VmVyaWZpZWQoIGRybV9kZXZpY2VfdCAqZGV2LAotCQkJCSAgICAgdW5zaWduZWQgaW50ICpjb2RlICkKK3N0YXRpYyB2b2lkIGk4MzBFbWl0Q29udGV4dFZlcmlmaWVkKGRybV9kZXZpY2VfdCAqIGRldiwgdW5zaWduZWQgaW50ICpjb2RlKQogewotICAgCWRybV9pODMwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWRybV9pODMwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWludCBpLCBqID0gMDsKIAl1bnNpZ25lZCBpbnQgdG1wOwogCVJJTkdfTE9DQUxTOwogCi0JQkVHSU5fTFBfUklORyggSTgzMF9DVFhfU0VUVVBfU0laRSArIDQgKTsKKwlCRUdJTl9MUF9SSU5HKEk4MzBfQ1RYX1NFVFVQX1NJWkUgKyA0KTsKIAotCWZvciAoIGkgPSAwIDsgaSA8IEk4MzBfQ1RYUkVHX0JMRU5EQ09MUjAgOyBpKysgKSB7CisJZm9yIChpID0gMDsgaSA8IEk4MzBfQ1RYUkVHX0JMRU5EQ09MUjA7IGkrKykgewogCQl0bXAgPSBjb2RlW2ldOwotCQlpZiAoKHRtcCAmICg3PDwyOSkpID09IENNRF8zRCAmJgotCQkgICAgKHRtcCAmICgweDFmPDwyNCkpIDwgKDB4MWQ8PDI0KSkgewotCQkJT1VUX1JJTkcoIHRtcCApOyAKKwkJaWYgKCh0bXAgJiAoNyA8PCAyOSkpID09IENNRF8zRCAmJgorCQkgICAgKHRtcCAmICgweDFmIDw8IDI0KSkgPCAoMHgxZCA8PCAyNCkpIHsKKwkJCU9VVF9SSU5HKHRtcCk7CiAJCQlqKys7CiAJCX0gZWxzZSB7CiAJCQlEUk1fRVJST1IoIlNraXBwaW5nICVkXG4iLCBpKTsKIAkJfQogCX0KIAotCU9VVF9SSU5HKCBTVEFURTNEX0NPTlNUX0JMRU5EX0NPTE9SX0NNRCApOyAKLQlPVVRfUklORyggY29kZVtJODMwX0NUWFJFR19CTEVORENPTFJdICk7IAorCU9VVF9SSU5HKFNUQVRFM0RfQ09OU1RfQkxFTkRfQ09MT1JfQ01EKTsKKwlPVVRfUklORyhjb2RlW0k4MzBfQ1RYUkVHX0JMRU5EQ09MUl0pOwogCWogKz0gMjsKIAotCWZvciAoIGkgPSBJODMwX0NUWFJFR19WRiA7IGkgPCBJODMwX0NUWFJFR19NQ1NCMCA7IGkrKyApIHsKKwlmb3IgKGkgPSBJODMwX0NUWFJFR19WRjsgaSA8IEk4MzBfQ1RYUkVHX01DU0IwOyBpKyspIHsKIAkJdG1wID0gY29kZVtpXTsKLQkJaWYgKCh0bXAgJiAoNzw8MjkpKSA9PSBDTURfM0QgJiYKLQkJICAgICh0bXAgJiAoMHgxZjw8MjQpKSA8ICgweDFkPDwyNCkpIHsKLQkJCU9VVF9SSU5HKCB0bXAgKTsgCisJCWlmICgodG1wICYgKDcgPDwgMjkpKSA9PSBDTURfM0QgJiYKKwkJICAgICh0bXAgJiAoMHgxZiA8PCAyNCkpIDwgKDB4MWQgPDwgMjQpKSB7CisJCQlPVVRfUklORyh0bXApOwogCQkJaisrOwogCQl9IGVsc2UgewogCQkJRFJNX0VSUk9SKCJTa2lwcGluZyAlZFxuIiwgaSk7CiAJCX0KIAl9CiAKLQlPVVRfUklORyggU1RBVEUzRF9NQVBfQ09PUkRfU0VUQklORF9DTUQgKTsgCi0JT1VUX1JJTkcoIGNvZGVbSTgzMF9DVFhSRUdfTUNTQjFdICk7IAorCU9VVF9SSU5HKFNUQVRFM0RfTUFQX0NPT1JEX1NFVEJJTkRfQ01EKTsKKwlPVVRfUklORyhjb2RlW0k4MzBfQ1RYUkVHX01DU0IxXSk7CiAJaiArPSAyOwogCi0JaWYgKGogJiAxKSAKLQkJT1VUX1JJTkcoIDAgKTsgCisJaWYgKGogJiAxKQorCQlPVVRfUklORygwKTsKIAogCUFEVkFOQ0VfTFBfUklORygpOwogfQogCi1zdGF0aWMgdm9pZCBpODMwRW1pdFRleFZlcmlmaWVkKCBkcm1fZGV2aWNlX3QgKmRldiwgdW5zaWduZWQgaW50ICpjb2RlICkgCitzdGF0aWMgdm9pZCBpODMwRW1pdFRleFZlcmlmaWVkKGRybV9kZXZpY2VfdCAqIGRldiwgdW5zaWduZWQgaW50ICpjb2RlKQogewotICAgCWRybV9pODMwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWRybV9pODMwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWludCBpLCBqID0gMDsKIAl1bnNpZ25lZCBpbnQgdG1wOwogCVJJTkdfTE9DQUxTOwogCiAJaWYgKGNvZGVbSTgzMF9URVhSRUdfTUkwXSA9PSBHRlhfT1BfTUFQX0lORk8gfHwKLQkgICAgKGNvZGVbSTgzMF9URVhSRUdfTUkwXSAmIH4oMHhmKkxPQURfVEVYVFVSRV9NQVAwKSkgPT0gCi0JICAgIChTVEFURTNEX0xPQURfU1RBVEVfSU1NRURJQVRFXzJ8NCkpIHsKKwkgICAgKGNvZGVbSTgzMF9URVhSRUdfTUkwXSAmIH4oMHhmICogTE9BRF9URVhUVVJFX01BUDApKSA9PQorCSAgICAoU1RBVEUzRF9MT0FEX1NUQVRFX0lNTUVESUFURV8yIHwgNCkpIHsKIAotCQlCRUdJTl9MUF9SSU5HKCBJODMwX1RFWF9TRVRVUF9TSVpFICk7CisJCUJFR0lOX0xQX1JJTkcoSTgzMF9URVhfU0VUVVBfU0laRSk7CiAKLQkJT1VUX1JJTkcoIGNvZGVbSTgzMF9URVhSRUdfTUkwXSApOyAvKiBUTTBMSSAqLwotCQlPVVRfUklORyggY29kZVtJODMwX1RFWFJFR19NSTFdICk7IC8qIFRNMFMwICovCi0JCU9VVF9SSU5HKCBjb2RlW0k4MzBfVEVYUkVHX01JMl0gKTsgLyogVE0wUzEgKi8KLQkJT1VUX1JJTkcoIGNvZGVbSTgzMF9URVhSRUdfTUkzXSApOyAvKiBUTTBTMiAqLwotCQlPVVRfUklORyggY29kZVtJODMwX1RFWFJFR19NSTRdICk7IC8qIFRNMFMzICovCi0JCU9VVF9SSU5HKCBjb2RlW0k4MzBfVEVYUkVHX01JNV0gKTsgLyogVE0wUzQgKi8KLQkJCi0JCWZvciAoIGkgPSA2IDsgaSA8IEk4MzBfVEVYX1NFVFVQX1NJWkUgOyBpKysgKSB7CisJCU9VVF9SSU5HKGNvZGVbSTgzMF9URVhSRUdfTUkwXSk7CS8qIFRNMExJICovCisJCU9VVF9SSU5HKGNvZGVbSTgzMF9URVhSRUdfTUkxXSk7CS8qIFRNMFMwICovCisJCU9VVF9SSU5HKGNvZGVbSTgzMF9URVhSRUdfTUkyXSk7CS8qIFRNMFMxICovCisJCU9VVF9SSU5HKGNvZGVbSTgzMF9URVhSRUdfTUkzXSk7CS8qIFRNMFMyICovCisJCU9VVF9SSU5HKGNvZGVbSTgzMF9URVhSRUdfTUk0XSk7CS8qIFRNMFMzICovCisJCU9VVF9SSU5HKGNvZGVbSTgzMF9URVhSRUdfTUk1XSk7CS8qIFRNMFM0ICovCisKKwkJZm9yIChpID0gNjsgaSA8IEk4MzBfVEVYX1NFVFVQX1NJWkU7IGkrKykgewogCQkJdG1wID0gY29kZVtpXTsKLQkJCU9VVF9SSU5HKCB0bXAgKTsgCisJCQlPVVRfUklORyh0bXApOwogCQkJaisrOwotCQl9IAorCQl9CiAKLQkJaWYgKGogJiAxKSAKLQkJCU9VVF9SSU5HKCAwICk7IAorCQlpZiAoaiAmIDEpCisJCQlPVVRfUklORygwKTsKIAogCQlBRFZBTkNFX0xQX1JJTkcoKTsKLQl9Ci0JZWxzZQorCX0gZWxzZQogCQlwcmludGsoInJlamVjdGVkIHBhY2tldCAleFxuIiwgY29kZVswXSk7CiB9CiAKLXN0YXRpYyB2b2lkIGk4MzBFbWl0VGV4QmxlbmRWZXJpZmllZCggZHJtX2RldmljZV90ICpkZXYsIAotCQkJCSAgICAgIHVuc2lnbmVkIGludCAqY29kZSwKLQkJCQkgICAgICB1bnNpZ25lZCBpbnQgbnVtKQorc3RhdGljIHZvaWQgaTgzMEVtaXRUZXhCbGVuZFZlcmlmaWVkKGRybV9kZXZpY2VfdCAqIGRldiwKKwkJCQkgICAgIHVuc2lnbmVkIGludCAqY29kZSwgdW5zaWduZWQgaW50IG51bSkKIHsKLSAgIAlkcm1faTgzMF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlkcm1faTgzMF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlpbnQgaSwgaiA9IDA7CiAJdW5zaWduZWQgaW50IHRtcDsKIAlSSU5HX0xPQ0FMUzsKQEAgLTU2OSw1OSArNTcxLDU0IEBACiAJaWYgKCFudW0pCiAJCXJldHVybjsKIAotCUJFR0lOX0xQX1JJTkcoIG51bSArIDEgKTsKKwlCRUdJTl9MUF9SSU5HKG51bSArIDEpOwogCi0JZm9yICggaSA9IDAgOyBpIDwgbnVtIDsgaSsrICkgeworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgewogCQl0bXAgPSBjb2RlW2ldOwotCQlPVVRfUklORyggdG1wICk7CisJCU9VVF9SSU5HKHRtcCk7CiAJCWorKzsKIAl9CiAKLQlpZiAoaiAmIDEpIAotCQlPVVRfUklORyggMCApOyAKKwlpZiAoaiAmIDEpCisJCU9VVF9SSU5HKDApOwogCiAJQURWQU5DRV9MUF9SSU5HKCk7CiB9CiAKLXN0YXRpYyB2b2lkIGk4MzBFbWl0VGV4UGFsZXR0ZSggZHJtX2RldmljZV90ICpkZXYsCi0JCQkgICAgICAgIHVuc2lnbmVkIGludCAqcGFsZXR0ZSwKLQkJCSAgICAgICAgaW50IG51bWJlciwKLQkJCSAgICAgICAgaW50IGlzX3NoYXJlZCApCitzdGF0aWMgdm9pZCBpODMwRW1pdFRleFBhbGV0dGUoZHJtX2RldmljZV90ICogZGV2LAorCQkJICAgICAgIHVuc2lnbmVkIGludCAqcGFsZXR0ZSwgaW50IG51bWJlciwgaW50IGlzX3NoYXJlZCkKIHsKLSAgIAlkcm1faTgzMF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlkcm1faTgzMF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlpbnQgaTsKIAlSSU5HX0xPQ0FMUzsKIAogCXJldHVybjsKIAotCUJFR0lOX0xQX1JJTkcoIDI1OCApOworCUJFR0lOX0xQX1JJTkcoMjU4KTsKIAotCWlmKGlzX3NoYXJlZCA9PSAxKSB7CisJaWYgKGlzX3NoYXJlZCA9PSAxKSB7CiAJCU9VVF9SSU5HKENNRF9PUF9NQVBfUEFMRVRURV9MT0FEIHwKLQkJCSBNQVBfUEFMRVRURV9OVU0oMCkgfAotCQkJIE1BUF9QQUxFVFRFX0JPVEgpOworCQkJIE1BUF9QQUxFVFRFX05VTSgwKSB8IE1BUF9QQUxFVFRFX0JPVEgpOwogCX0gZWxzZSB7CiAJCU9VVF9SSU5HKENNRF9PUF9NQVBfUEFMRVRURV9MT0FEIHwgTUFQX1BBTEVUVEVfTlVNKG51bWJlcikpOwogCX0KLQlmb3IoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewogCQlPVVRfUklORyhwYWxldHRlW2ldKTsKIAl9CiAJT1VUX1JJTkcoMCk7Ci0JLyogS1c6ICBXSEVSRSBJUyBUSEUgQURWQU5DRV9MUF9SSU5HPyAgVGhpcyBpcyBlZmZlY3RpdmVseSBhIG5vb3AhIAorCS8qIEtXOiAgV0hFUkUgSVMgVEhFIEFEVkFOQ0VfTFBfUklORz8gIFRoaXMgaXMgZWZmZWN0aXZlbHkgYSBub29wIQogCSAqLwogfQogCiAvKiBOZWVkIHRvIGRvIHNvbWUgYWRkaXRpb25hbCBjaGVja2luZyB3aGVuIHNldHRpbmcgdGhlIGRlc3QgYnVmZmVyLgogICovCi1zdGF0aWMgdm9pZCBpODMwRW1pdERlc3RWZXJpZmllZCggZHJtX2RldmljZV90ICpkZXYsIAotCQkJCSAgdW5zaWduZWQgaW50ICpjb2RlICkgCi17CQotICAgCWRybV9pODMwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworc3RhdGljIHZvaWQgaTgzMEVtaXREZXN0VmVyaWZpZWQoZHJtX2RldmljZV90ICogZGV2LCB1bnNpZ25lZCBpbnQgKmNvZGUpCit7CisJZHJtX2k4MzBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJdW5zaWduZWQgaW50IHRtcDsKIAlSSU5HX0xPQ0FMUzsKIAotCUJFR0lOX0xQX1JJTkcoIEk4MzBfREVTVF9TRVRVUF9TSVpFICsgMTAgKTsKLQorCUJFR0lOX0xQX1JJTkcoSTgzMF9ERVNUX1NFVFVQX1NJWkUgKyAxMCk7CiAKIAl0bXAgPSBjb2RlW0k4MzBfREVTVFJFR19DQlVGQUREUl07CiAJaWYgKHRtcCA9PSBkZXZfcHJpdi0+ZnJvbnRfZGkxIHx8IHRtcCA9PSBkZXZfcHJpdi0+YmFja19kaTEpIHsKQEAgLTYzMCwxOCArNjI3LDE4IEBACiAJCQlPVVRfUklORygwKTsKIAkJfQogCi0JCU9VVF9SSU5HKCBDTURfT1BfREVTVEJVRkZFUl9JTkZPICk7Ci0JCU9VVF9SSU5HKCBCVUZfM0RfSURfQ09MT1JfQkFDSyB8IAotCQkJICBCVUZfM0RfUElUQ0goZGV2X3ByaXYtPmJhY2tfcGl0Y2ggKiBkZXZfcHJpdi0+Y3BwKSB8Ci0JCQkgIEJVRl8zRF9VU0VfRkVOQ0UpOwotCQlPVVRfUklORyggdG1wICk7Ci0JCU9VVF9SSU5HKCAwICk7CisJCU9VVF9SSU5HKENNRF9PUF9ERVNUQlVGRkVSX0lORk8pOworCQlPVVRfUklORyhCVUZfM0RfSURfQ09MT1JfQkFDSyB8CisJCQkgQlVGXzNEX1BJVENIKGRldl9wcml2LT5iYWNrX3BpdGNoICogZGV2X3ByaXYtPmNwcCkgfAorCQkJIEJVRl8zRF9VU0VfRkVOQ0UpOworCQlPVVRfUklORyh0bXApOworCQlPVVRfUklORygwKTsKIAotCQlPVVRfUklORyggQ01EX09QX0RFU1RCVUZGRVJfSU5GTyApOwotCQlPVVRfUklORyggQlVGXzNEX0lEX0RFUFRIIHwgQlVGXzNEX1VTRV9GRU5DRSB8IAotCQkJICBCVUZfM0RfUElUQ0goZGV2X3ByaXYtPmRlcHRoX3BpdGNoICogZGV2X3ByaXYtPmNwcCkpOwotCQlPVVRfUklORyggZGV2X3ByaXYtPnppMSApOwotCQlPVVRfUklORyggMCApOworCQlPVVRfUklORyhDTURfT1BfREVTVEJVRkZFUl9JTkZPKTsKKwkJT1VUX1JJTkcoQlVGXzNEX0lEX0RFUFRIIHwgQlVGXzNEX1VTRV9GRU5DRSB8CisJCQkgQlVGXzNEX1BJVENIKGRldl9wcml2LT5kZXB0aF9waXRjaCAqIGRldl9wcml2LT5jcHApKTsKKwkJT1VUX1JJTkcoZGV2X3ByaXYtPnppMSk7CisJCU9VVF9SSU5HKDApOwogCX0gZWxzZSB7CiAJCURSTV9FUlJPUigiYmFkIGRpMSAleCAoYWxsb3cgJXggb3IgJXgpXG4iLAogCQkJICB0bXAsIGRldl9wcml2LT5mcm9udF9kaTEsIGRldl9wcml2LT5iYWNrX2RpMSk7CkBAIC02NTAsODMgKzY0Nyw4MCBAQAogCS8qIGludmFyaWVudDoKIAkgKi8KIAorCU9VVF9SSU5HKEdGWF9PUF9ERVNUQlVGRkVSX1ZBUlMpOworCU9VVF9SSU5HKGNvZGVbSTgzMF9ERVNUUkVHX0RWMV0pOwogCi0JT1VUX1JJTkcoIEdGWF9PUF9ERVNUQlVGRkVSX1ZBUlMgKTsKLQlPVVRfUklORyggY29kZVtJODMwX0RFU1RSRUdfRFYxXSApOwotCi0JT1VUX1JJTkcoIEdGWF9PUF9EUkFXUkVDVF9JTkZPICk7Ci0JT1VUX1JJTkcoIGNvZGVbSTgzMF9ERVNUUkVHX0RSMV0gKTsKLQlPVVRfUklORyggY29kZVtJODMwX0RFU1RSRUdfRFIyXSApOwotCU9VVF9SSU5HKCBjb2RlW0k4MzBfREVTVFJFR19EUjNdICk7Ci0JT1VUX1JJTkcoIGNvZGVbSTgzMF9ERVNUUkVHX0RSNF0gKTsKKwlPVVRfUklORyhHRlhfT1BfRFJBV1JFQ1RfSU5GTyk7CisJT1VUX1JJTkcoY29kZVtJODMwX0RFU1RSRUdfRFIxXSk7CisJT1VUX1JJTkcoY29kZVtJODMwX0RFU1RSRUdfRFIyXSk7CisJT1VUX1JJTkcoY29kZVtJODMwX0RFU1RSRUdfRFIzXSk7CisJT1VUX1JJTkcoY29kZVtJODMwX0RFU1RSRUdfRFI0XSk7CiAKIAkvKiBOZWVkIHRvIHZlcmlmeSB0aGlzICovCiAJdG1wID0gY29kZVtJODMwX0RFU1RSRUdfU0VOQUJMRV07Ci0JaWYoKHRtcCAmIH4weDMpID09IEdGWF9PUF9TQ0lTU09SX0VOQUJMRSkgewotCQlPVVRfUklORyggdG1wICk7CisJaWYgKCh0bXAgJiB+MHgzKSA9PSBHRlhfT1BfU0NJU1NPUl9FTkFCTEUpIHsKKwkJT1VUX1JJTkcodG1wKTsKIAl9IGVsc2UgewogCQlEUk1fRVJST1IoImJhZCBzY2lzc29yIGVuYWJsZVxuIik7Ci0JCU9VVF9SSU5HKCAwICk7CisJCU9VVF9SSU5HKDApOwogCX0KIAotCU9VVF9SSU5HKCBHRlhfT1BfU0NJU1NPUl9SRUNUICk7Ci0JT1VUX1JJTkcoIGNvZGVbSTgzMF9ERVNUUkVHX1NSMV0gKTsKLQlPVVRfUklORyggY29kZVtJODMwX0RFU1RSRUdfU1IyXSApOwotCU9VVF9SSU5HKCAwICk7CisJT1VUX1JJTkcoR0ZYX09QX1NDSVNTT1JfUkVDVCk7CisJT1VUX1JJTkcoY29kZVtJODMwX0RFU1RSRUdfU1IxXSk7CisJT1VUX1JJTkcoY29kZVtJODMwX0RFU1RSRUdfU1IyXSk7CisJT1VUX1JJTkcoMCk7CiAKIAlBRFZBTkNFX0xQX1JJTkcoKTsKIH0KIAotc3RhdGljIHZvaWQgaTgzMEVtaXRTdGlwcGxlVmVyaWZpZWQoIGRybV9kZXZpY2VfdCAqZGV2LCAKLQkJCQkgICAgIHVuc2lnbmVkIGludCAqY29kZSApIAorc3RhdGljIHZvaWQgaTgzMEVtaXRTdGlwcGxlVmVyaWZpZWQoZHJtX2RldmljZV90ICogZGV2LCB1bnNpZ25lZCBpbnQgKmNvZGUpCiB7Ci0gICAJZHJtX2k4MzBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJZHJtX2k4MzBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJUklOR19MT0NBTFM7CiAKLQlCRUdJTl9MUF9SSU5HKCAyICk7Ci0JT1VUX1JJTkcoIEdGWF9PUF9TVElQUExFICk7Ci0JT1VUX1JJTkcoIGNvZGVbMV0gKTsKLQlBRFZBTkNFX0xQX1JJTkcoKTsJCisJQkVHSU5fTFBfUklORygyKTsKKwlPVVRfUklORyhHRlhfT1BfU1RJUFBMRSk7CisJT1VUX1JJTkcoY29kZVsxXSk7CisJQURWQU5DRV9MUF9SSU5HKCk7CiB9CiAKLQotc3RhdGljIHZvaWQgaTgzMEVtaXRTdGF0ZSggZHJtX2RldmljZV90ICpkZXYgKQorc3RhdGljIHZvaWQgaTgzMEVtaXRTdGF0ZShkcm1fZGV2aWNlX3QgKiBkZXYpCiB7Ci0gICAJZHJtX2k4MzBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0gICAgICAJZHJtX2k4MzBfc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9wcml2OworCWRybV9pODMwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWRybV9pODMwX3NhcmVhX3QgKnNhcmVhX3ByaXYgPSBkZXZfcHJpdi0+c2FyZWFfcHJpdjsKIAl1bnNpZ25lZCBpbnQgZGlydHkgPSBzYXJlYV9wcml2LT5kaXJ0eTsKIAogCURSTV9ERUJVRygiJXMgJXhcbiIsIF9fRlVOQ1RJT05fXywgZGlydHkpOwogCiAJaWYgKGRpcnR5ICYgSTgzMF9VUExPQURfQlVGRkVSUykgewotCQlpODMwRW1pdERlc3RWZXJpZmllZCggZGV2LCBzYXJlYV9wcml2LT5CdWZmZXJTdGF0ZSApOworCQlpODMwRW1pdERlc3RWZXJpZmllZChkZXYsIHNhcmVhX3ByaXYtPkJ1ZmZlclN0YXRlKTsKIAkJc2FyZWFfcHJpdi0+ZGlydHkgJj0gfkk4MzBfVVBMT0FEX0JVRkZFUlM7CiAJfQogCiAJaWYgKGRpcnR5ICYgSTgzMF9VUExPQURfQ1RYKSB7Ci0JCWk4MzBFbWl0Q29udGV4dFZlcmlmaWVkKCBkZXYsIHNhcmVhX3ByaXYtPkNvbnRleHRTdGF0ZSApOworCQlpODMwRW1pdENvbnRleHRWZXJpZmllZChkZXYsIHNhcmVhX3ByaXYtPkNvbnRleHRTdGF0ZSk7CiAJCXNhcmVhX3ByaXYtPmRpcnR5ICY9IH5JODMwX1VQTE9BRF9DVFg7CiAJfQogCiAJaWYgKGRpcnR5ICYgSTgzMF9VUExPQURfVEVYMCkgewotCQlpODMwRW1pdFRleFZlcmlmaWVkKCBkZXYsIHNhcmVhX3ByaXYtPlRleFN0YXRlWzBdICk7CisJCWk4MzBFbWl0VGV4VmVyaWZpZWQoZGV2LCBzYXJlYV9wcml2LT5UZXhTdGF0ZVswXSk7CiAJCXNhcmVhX3ByaXYtPmRpcnR5ICY9IH5JODMwX1VQTE9BRF9URVgwOwogCX0KIAogCWlmIChkaXJ0eSAmIEk4MzBfVVBMT0FEX1RFWDEpIHsKLQkJaTgzMEVtaXRUZXhWZXJpZmllZCggZGV2LCBzYXJlYV9wcml2LT5UZXhTdGF0ZVsxXSApOworCQlpODMwRW1pdFRleFZlcmlmaWVkKGRldiwgc2FyZWFfcHJpdi0+VGV4U3RhdGVbMV0pOwogCQlzYXJlYV9wcml2LT5kaXJ0eSAmPSB+STgzMF9VUExPQURfVEVYMTsKIAl9CiAKIAlpZiAoZGlydHkgJiBJODMwX1VQTE9BRF9URVhCTEVORDApIHsKLQkJaTgzMEVtaXRUZXhCbGVuZFZlcmlmaWVkKCBkZXYsIHNhcmVhX3ByaXYtPlRleEJsZW5kU3RhdGVbMF0sCi0JCQkJc2FyZWFfcHJpdi0+VGV4QmxlbmRTdGF0ZVdvcmRzVXNlZFswXSk7CisJCWk4MzBFbWl0VGV4QmxlbmRWZXJpZmllZChkZXYsIHNhcmVhX3ByaXYtPlRleEJsZW5kU3RhdGVbMF0sCisJCQkJCSBzYXJlYV9wcml2LT5UZXhCbGVuZFN0YXRlV29yZHNVc2VkWzBdKTsKIAkJc2FyZWFfcHJpdi0+ZGlydHkgJj0gfkk4MzBfVVBMT0FEX1RFWEJMRU5EMDsKIAl9CiAKIAlpZiAoZGlydHkgJiBJODMwX1VQTE9BRF9URVhCTEVORDEpIHsKLQkJaTgzMEVtaXRUZXhCbGVuZFZlcmlmaWVkKCBkZXYsIHNhcmVhX3ByaXYtPlRleEJsZW5kU3RhdGVbMV0sCi0JCQkJc2FyZWFfcHJpdi0+VGV4QmxlbmRTdGF0ZVdvcmRzVXNlZFsxXSk7CisJCWk4MzBFbWl0VGV4QmxlbmRWZXJpZmllZChkZXYsIHNhcmVhX3ByaXYtPlRleEJsZW5kU3RhdGVbMV0sCisJCQkJCSBzYXJlYV9wcml2LT5UZXhCbGVuZFN0YXRlV29yZHNVc2VkWzFdKTsKIAkJc2FyZWFfcHJpdi0+ZGlydHkgJj0gfkk4MzBfVVBMT0FEX1RFWEJMRU5EMTsKIAl9CiAKQEAgLTc1OSwzNiArNzUzLDMyIEBACiAJLyogMS4zOgogCSAqLwogCWlmIChkaXJ0eSAmIEk4MzBfVVBMT0FEX1NUSVBQTEUpIHsKLQkJaTgzMEVtaXRTdGlwcGxlVmVyaWZpZWQoIGRldiwgCi0JCQkJCSBzYXJlYV9wcml2LT5TdGlwcGxlU3RhdGUpOworCQlpODMwRW1pdFN0aXBwbGVWZXJpZmllZChkZXYsIHNhcmVhX3ByaXYtPlN0aXBwbGVTdGF0ZSk7CiAJCXNhcmVhX3ByaXYtPmRpcnR5ICY9IH5JODMwX1VQTE9BRF9TVElQUExFOwogCX0KIAogCWlmIChkaXJ0eSAmIEk4MzBfVVBMT0FEX1RFWDIpIHsKLQkJaTgzMEVtaXRUZXhWZXJpZmllZCggZGV2LCBzYXJlYV9wcml2LT5UZXhTdGF0ZTIgKTsKKwkJaTgzMEVtaXRUZXhWZXJpZmllZChkZXYsIHNhcmVhX3ByaXYtPlRleFN0YXRlMik7CiAJCXNhcmVhX3ByaXYtPmRpcnR5ICY9IH5JODMwX1VQTE9BRF9URVgyOwogCX0KIAogCWlmIChkaXJ0eSAmIEk4MzBfVVBMT0FEX1RFWDMpIHsKLQkJaTgzMEVtaXRUZXhWZXJpZmllZCggZGV2LCBzYXJlYV9wcml2LT5UZXhTdGF0ZTMgKTsKKwkJaTgzMEVtaXRUZXhWZXJpZmllZChkZXYsIHNhcmVhX3ByaXYtPlRleFN0YXRlMyk7CiAJCXNhcmVhX3ByaXYtPmRpcnR5ICY9IH5JODMwX1VQTE9BRF9URVgzOwogCX0KIAotCiAJaWYgKGRpcnR5ICYgSTgzMF9VUExPQURfVEVYQkxFTkQyKSB7Ci0JCWk4MzBFbWl0VGV4QmxlbmRWZXJpZmllZCggCi0JCQlkZXYsIAotCQkJc2FyZWFfcHJpdi0+VGV4QmxlbmRTdGF0ZTIsCi0JCQlzYXJlYV9wcml2LT5UZXhCbGVuZFN0YXRlV29yZHNVc2VkMik7CisJCWk4MzBFbWl0VGV4QmxlbmRWZXJpZmllZChkZXYsCisJCQkJCSBzYXJlYV9wcml2LT5UZXhCbGVuZFN0YXRlMiwKKwkJCQkJIHNhcmVhX3ByaXYtPlRleEJsZW5kU3RhdGVXb3Jkc1VzZWQyKTsKIAogCQlzYXJlYV9wcml2LT5kaXJ0eSAmPSB+STgzMF9VUExPQURfVEVYQkxFTkQyOwogCX0KIAogCWlmIChkaXJ0eSAmIEk4MzBfVVBMT0FEX1RFWEJMRU5EMykgewotCQlpODMwRW1pdFRleEJsZW5kVmVyaWZpZWQoIAotCQkJZGV2LCAKLQkJCXNhcmVhX3ByaXYtPlRleEJsZW5kU3RhdGUzLAotCQkJc2FyZWFfcHJpdi0+VGV4QmxlbmRTdGF0ZVdvcmRzVXNlZDMpOworCQlpODMwRW1pdFRleEJsZW5kVmVyaWZpZWQoZGV2LAorCQkJCQkgc2FyZWFfcHJpdi0+VGV4QmxlbmRTdGF0ZTMsCisJCQkJCSBzYXJlYV9wcml2LT5UZXhCbGVuZFN0YXRlV29yZHNVc2VkMyk7CiAJCXNhcmVhX3ByaXYtPmRpcnR5ICY9IH5JODMwX1VQTE9BRF9URVhCTEVORDM7CiAJfQogfQpAQCAtNzk3LDk3ICs3ODcsOTYgQEAKICAqIFBlcmZvcm1hbmNlIG1vbml0b3JpbmcgZnVuY3Rpb25zCiAgKi8KIAotc3RhdGljIHZvaWQgaTgzMF9maWxsX2JveCggZHJtX2RldmljZV90ICpkZXYsCi0JCQkgICBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwKLQkJCSAgIGludCByLCBpbnQgZywgaW50IGIgKQorc3RhdGljIHZvaWQgaTgzMF9maWxsX2JveChkcm1fZGV2aWNlX3QgKiBkZXYsCisJCQkgIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLCBpbnQgciwgaW50IGcsIGludCBiKQogewotICAgCWRybV9pODMwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWRybV9pODMwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXUzMiBjb2xvcjsKIAl1bnNpZ25lZCBpbnQgQlIxMywgQ01EOwogCVJJTkdfTE9DQUxTOwogCi0JQlIxMyA9ICgweEYwIDw8IDE2KSB8IChkZXZfcHJpdi0+cGl0Y2ggKiBkZXZfcHJpdi0+Y3BwKSB8ICgxPDwyNCk7CisJQlIxMyA9ICgweEYwIDw8IDE2KSB8IChkZXZfcHJpdi0+cGl0Y2ggKiBkZXZfcHJpdi0+Y3BwKSB8ICgxIDw8IDI0KTsKIAlDTUQgPSBYWV9DT0xPUl9CTFRfQ01EOwogCXggKz0gZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmJveGVzWzBdLngxOwogCXkgKz0gZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmJveGVzWzBdLnkxOwogCiAJaWYgKGRldl9wcml2LT5jcHAgPT0gNCkgewotCQlCUjEzIHw9ICgxPDwyNSk7CisJCUJSMTMgfD0gKDEgPDwgMjUpOwogCQlDTUQgfD0gKFhZX0NPTE9SX0JMVF9XUklURV9BTFBIQSB8IFhZX0NPTE9SX0JMVF9XUklURV9SR0IpOwotCQljb2xvciA9ICgoKDB4ZmYpIDw8IDI0KSB8IChyIDw8IDE2KSB8IChnIDw8ICA4KSB8IGIpOwkKKwkJY29sb3IgPSAoKCgweGZmKSA8PCAyNCkgfCAociA8PCAxNikgfCAoZyA8PCA4KSB8IGIpOwogCX0gZWxzZSB7CiAJCWNvbG9yID0gKCgociAmIDB4ZjgpIDw8IDgpIHwKLQkJCSAoKGcgJiAweGZjKSA8PCAzKSB8Ci0JCQkgKChiICYgMHhmOCkgPj4gMykpOworCQkJICgoZyAmIDB4ZmMpIDw8IDMpIHwgKChiICYgMHhmOCkgPj4gMykpOwogCX0KIAotCUJFR0lOX0xQX1JJTkcoIDYgKTsJICAgIAotCU9VVF9SSU5HKCBDTUQgKTsKLQlPVVRfUklORyggQlIxMyApOwotCU9VVF9SSU5HKCAoeSA8PCAxNikgfCB4ICk7Ci0JT1VUX1JJTkcoICgoeStoKSA8PCAxNikgfCAoeCt3KSApOworCUJFR0lOX0xQX1JJTkcoNik7CisJT1VUX1JJTkcoQ01EKTsKKwlPVVRfUklORyhCUjEzKTsKKwlPVVRfUklORygoeSA8PCAxNikgfCB4KTsKKwlPVVRfUklORygoKHkgKyBoKSA8PCAxNikgfCAoeCArIHcpKTsKIAotIAlpZiAoIGRldl9wcml2LT5jdXJyZW50X3BhZ2UgPT0gMSApIHsgCi0JCU9VVF9SSU5HKCBkZXZfcHJpdi0+ZnJvbnRfb2Zmc2V0ICk7Ci0gCX0gZWxzZSB7CSAKLQkJT1VUX1JJTkcoIGRldl9wcml2LT5iYWNrX29mZnNldCApOwotIAl9IAorCWlmIChkZXZfcHJpdi0+Y3VycmVudF9wYWdlID09IDEpIHsKKwkJT1VUX1JJTkcoZGV2X3ByaXYtPmZyb250X29mZnNldCk7CisJfSBlbHNlIHsKKwkJT1VUX1JJTkcoZGV2X3ByaXYtPmJhY2tfb2Zmc2V0KTsKKwl9CiAKLQlPVVRfUklORyggY29sb3IgKTsKKwlPVVRfUklORyhjb2xvcik7CiAJQURWQU5DRV9MUF9SSU5HKCk7CiB9CiAKLXN0YXRpYyB2b2lkIGk4MzBfY3BfcGVyZm9ybWFuY2VfYm94ZXMoIGRybV9kZXZpY2VfdCAqZGV2ICkKK3N0YXRpYyB2b2lkIGk4MzBfY3BfcGVyZm9ybWFuY2VfYm94ZXMoZHJtX2RldmljZV90ICogZGV2KQogewotICAgCWRybV9pODMwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWRybV9pODMwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCiAJLyogUHVycGxlIGJveCBmb3IgcGFnZSBmbGlwcGluZwogCSAqLwotCWlmICggZGV2X3ByaXYtPnNhcmVhX3ByaXYtPnBlcmZfYm94ZXMgJiBJODMwX0JPWF9GTElQICkgCi0JCWk4MzBfZmlsbF9ib3goIGRldiwgNCwgNCwgOCwgOCwgMjU1LCAwLCAyNTUgKTsKKwlpZiAoZGV2X3ByaXYtPnNhcmVhX3ByaXYtPnBlcmZfYm94ZXMgJiBJODMwX0JPWF9GTElQKQorCQlpODMwX2ZpbGxfYm94KGRldiwgNCwgNCwgOCwgOCwgMjU1LCAwLCAyNTUpOwogCiAJLyogUmVkIGJveCBpZiB3ZSBoYXZlIHRvIHdhaXQgZm9yIGlkbGUgYXQgYW55IHBvaW50CiAJICovCi0JaWYgKCBkZXZfcHJpdi0+c2FyZWFfcHJpdi0+cGVyZl9ib3hlcyAmIEk4MzBfQk9YX1dBSVQgKSAKLQkJaTgzMF9maWxsX2JveCggZGV2LCAxNiwgNCwgOCwgOCwgMjU1LCAwLCAwICk7CisJaWYgKGRldl9wcml2LT5zYXJlYV9wcml2LT5wZXJmX2JveGVzICYgSTgzMF9CT1hfV0FJVCkKKwkJaTgzMF9maWxsX2JveChkZXYsIDE2LCA0LCA4LCA4LCAyNTUsIDAsIDApOwogCiAJLyogQmx1ZSBib3g6IGxvc3QgY29udGV4dD8KIAkgKi8KLQlpZiAoIGRldl9wcml2LT5zYXJlYV9wcml2LT5wZXJmX2JveGVzICYgSTgzMF9CT1hfTE9TVF9DT05URVhUICkgCi0JCWk4MzBfZmlsbF9ib3goIGRldiwgMjgsIDQsIDgsIDgsIDAsIDAsIDI1NSApOworCWlmIChkZXZfcHJpdi0+c2FyZWFfcHJpdi0+cGVyZl9ib3hlcyAmIEk4MzBfQk9YX0xPU1RfQ09OVEVYVCkKKwkJaTgzMF9maWxsX2JveChkZXYsIDI4LCA0LCA4LCA4LCAwLCAwLCAyNTUpOwogCiAJLyogWWVsbG93IGJveCBmb3IgdGV4dHVyZSBzd2FwcwogCSAqLwotCWlmICggZGV2X3ByaXYtPnNhcmVhX3ByaXYtPnBlcmZfYm94ZXMgJiBJODMwX0JPWF9URVhUVVJFX0xPQUQgKSAKLQkJaTgzMF9maWxsX2JveCggZGV2LCA0MCwgNCwgOCwgOCwgMjU1LCAyNTUsIDAgKTsKKwlpZiAoZGV2X3ByaXYtPnNhcmVhX3ByaXYtPnBlcmZfYm94ZXMgJiBJODMwX0JPWF9URVhUVVJFX0xPQUQpCisJCWk4MzBfZmlsbF9ib3goZGV2LCA0MCwgNCwgOCwgOCwgMjU1LCAyNTUsIDApOwogCiAJLyogR3JlZW4gYm94IGlmIGhhcmR3YXJlIG5ldmVyIGlkbGVzIChhcyBmYXIgYXMgd2UgY2FuIHRlbGwpCiAJICovCi0JaWYgKCAhKGRldl9wcml2LT5zYXJlYV9wcml2LT5wZXJmX2JveGVzICYgSTgzMF9CT1hfUklOR19FTVBUWSkgKSAKLQkJaTgzMF9maWxsX2JveCggZGV2LCA2NCwgNCwgOCwgOCwgMCwgMjU1LCAwICk7CisJaWYgKCEoZGV2X3ByaXYtPnNhcmVhX3ByaXYtPnBlcmZfYm94ZXMgJiBJODMwX0JPWF9SSU5HX0VNUFRZKSkKKwkJaTgzMF9maWxsX2JveChkZXYsIDY0LCA0LCA4LCA4LCAwLCAyNTUsIDApOwogCi0KLQkvKiBEcmF3IGJhcnMgaW5kaWNhdGluZyBudW1iZXIgb2YgYnVmZmVycyBhbGxvY2F0ZWQgCisJLyogRHJhdyBiYXJzIGluZGljYXRpbmcgbnVtYmVyIG9mIGJ1ZmZlcnMgYWxsb2NhdGVkCiAJICogKG5vdCBhIGdyZWF0IG1lYXN1cmUsIGVhc2lseSBjb25mdXNlZCkKIAkgKi8KIAlpZiAoZGV2X3ByaXYtPmRtYV91c2VkKSB7CiAJCWludCBiYXIgPSBkZXZfcHJpdi0+ZG1hX3VzZWQgLyAxMDI0MDsKLQkJaWYgKGJhciA+IDEwMCkgYmFyID0gMTAwOwotCQlpZiAoYmFyIDwgMSkgYmFyID0gMTsKLQkJaTgzMF9maWxsX2JveCggZGV2LCA0LCAxNiwgYmFyLCA0LCAxOTYsIDEyOCwgMTI4ICk7CisJCWlmIChiYXIgPiAxMDApCisJCQliYXIgPSAxMDA7CisJCWlmIChiYXIgPCAxKQorCQkJYmFyID0gMTsKKwkJaTgzMF9maWxsX2JveChkZXYsIDQsIDE2LCBiYXIsIDQsIDE5NiwgMTI4LCAxMjgpOwogCQlkZXZfcHJpdi0+ZG1hX3VzZWQgPSAwOwogCX0KIAogCWRldl9wcml2LT5zYXJlYV9wcml2LT5wZXJmX2JveGVzID0gMDsKIH0KIAotc3RhdGljIHZvaWQgaTgzMF9kbWFfZGlzcGF0Y2hfY2xlYXIoIGRybV9kZXZpY2VfdCAqZGV2LCBpbnQgZmxhZ3MsIAorc3RhdGljIHZvaWQgaTgzMF9kbWFfZGlzcGF0Y2hfY2xlYXIoZHJtX2RldmljZV90ICogZGV2LCBpbnQgZmxhZ3MsCiAJCQkJICAgIHVuc2lnbmVkIGludCBjbGVhcl9jb2xvciwKIAkJCQkgICAgdW5zaWduZWQgaW50IGNsZWFyX3p2YWwsCiAJCQkJICAgIHVuc2lnbmVkIGludCBjbGVhcl9kZXB0aG1hc2spCiB7Ci0gICAJZHJtX2k4MzBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0gICAgICAJZHJtX2k4MzBfc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9wcml2OworCWRybV9pODMwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWRybV9pODMwX3NhcmVhX3QgKnNhcmVhX3ByaXYgPSBkZXZfcHJpdi0+c2FyZWFfcHJpdjsKIAlpbnQgbmJveCA9IHNhcmVhX3ByaXYtPm5ib3g7CiAJZHJtX2NsaXBfcmVjdF90ICpwYm94ID0gc2FyZWFfcHJpdi0+Ym94ZXM7CiAJaW50IHBpdGNoID0gZGV2X3ByaXYtPnBpdGNoOwpAQCAtODk2LDkwICs4ODUsOTAgQEAKIAl1bnNpZ25lZCBpbnQgQlIxMywgQ01ELCBEX0NNRDsKIAlSSU5HX0xPQ0FMUzsKIAotCi0JaWYgKCBkZXZfcHJpdi0+Y3VycmVudF9wYWdlID09IDEgKSB7CisJaWYgKGRldl9wcml2LT5jdXJyZW50X3BhZ2UgPT0gMSkgewogCQl1bnNpZ25lZCBpbnQgdG1wID0gZmxhZ3M7CiAKIAkJZmxhZ3MgJj0gfihJODMwX0ZST05UIHwgSTgzMF9CQUNLKTsKLQkJaWYgKCB0bXAgJiBJODMwX0ZST05UICkgZmxhZ3MgfD0gSTgzMF9CQUNLOwotCQlpZiAoIHRtcCAmIEk4MzBfQkFDSyApICBmbGFncyB8PSBJODMwX0ZST05UOworCQlpZiAodG1wICYgSTgzMF9GUk9OVCkKKwkJCWZsYWdzIHw9IEk4MzBfQkFDSzsKKwkJaWYgKHRtcCAmIEk4MzBfQkFDSykKKwkJCWZsYWdzIHw9IEk4MzBfRlJPTlQ7CiAJfQogCi0gIAlpODMwX2tlcm5lbF9sb3N0X2NvbnRleHQoZGV2KTsKKwlpODMwX2tlcm5lbF9sb3N0X2NvbnRleHQoZGV2KTsKIAotCXN3aXRjaChjcHApIHsKLQljYXNlIDI6IAotCQlCUjEzID0gKDB4RjAgPDwgMTYpIHwgKHBpdGNoICogY3BwKSB8ICgxPDwyNCk7CisJc3dpdGNoIChjcHApIHsKKwljYXNlIDI6CisJCUJSMTMgPSAoMHhGMCA8PCAxNikgfCAocGl0Y2ggKiBjcHApIHwgKDEgPDwgMjQpOwogCQlEX0NNRCA9IENNRCA9IFhZX0NPTE9SX0JMVF9DTUQ7CiAJCWJyZWFrOwogCWNhc2UgNDoKLQkJQlIxMyA9ICgweEYwIDw8IDE2KSB8IChwaXRjaCAqIGNwcCkgfCAoMTw8MjQpIHwgKDE8PDI1KTsKLQkJQ01EID0gKFhZX0NPTE9SX0JMVF9DTUQgfCBYWV9DT0xPUl9CTFRfV1JJVEVfQUxQSEEgfCAKKwkJQlIxMyA9ICgweEYwIDw8IDE2KSB8IChwaXRjaCAqIGNwcCkgfCAoMSA8PCAyNCkgfCAoMSA8PCAyNSk7CisJCUNNRCA9IChYWV9DT0xPUl9CTFRfQ01EIHwgWFlfQ09MT1JfQkxUX1dSSVRFX0FMUEhBIHwKIAkJICAgICAgIFhZX0NPTE9SX0JMVF9XUklURV9SR0IpOwogCQlEX0NNRCA9IFhZX0NPTE9SX0JMVF9DTUQ7Ci0JCWlmKGNsZWFyX2RlcHRobWFzayAmIDB4MDBmZmZmZmYpCisJCWlmIChjbGVhcl9kZXB0aG1hc2sgJiAweDAwZmZmZmZmKQogCQkJRF9DTUQgfD0gWFlfQ09MT1JfQkxUX1dSSVRFX1JHQjsKLQkJaWYoY2xlYXJfZGVwdGhtYXNrICYgMHhmZjAwMDAwMCkKKwkJaWYgKGNsZWFyX2RlcHRobWFzayAmIDB4ZmYwMDAwMDApCiAJCQlEX0NNRCB8PSBYWV9DT0xPUl9CTFRfV1JJVEVfQUxQSEE7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCUJSMTMgPSAoMHhGMCA8PCAxNikgfCAocGl0Y2ggKiBjcHApIHwgKDE8PDI0KTsKKwkJQlIxMyA9ICgweEYwIDw8IDE2KSB8IChwaXRjaCAqIGNwcCkgfCAoMSA8PCAyNCk7CiAJCURfQ01EID0gQ01EID0gWFlfQ09MT1JfQkxUX0NNRDsKIAkJYnJlYWs7CiAJfQogCi0gICAgICAJaWYgKG5ib3ggPiBJODMwX05SX1NBUkVBX0NMSVBSRUNUUykKLSAgICAgCQluYm94ID0gSTgzMF9OUl9TQVJFQV9DTElQUkVDVFM7CisJaWYgKG5ib3ggPiBJODMwX05SX1NBUkVBX0NMSVBSRUNUUykKKwkJbmJveCA9IEk4MzBfTlJfU0FSRUFfQ0xJUFJFQ1RTOwogCi0JZm9yIChpID0gMCA7IGkgPCBuYm94IDsgaSsrLCBwYm94KyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgbmJveDsgaSsrLCBwYm94KyspIHsKIAkJaWYgKHBib3gtPngxID4gcGJveC0+eDIgfHwKIAkJICAgIHBib3gtPnkxID4gcGJveC0+eTIgfHwKLQkJICAgIHBib3gtPngyID4gZGV2X3ByaXYtPncgfHwKLQkJICAgIHBib3gtPnkyID4gZGV2X3ByaXYtPmgpCisJCSAgICBwYm94LT54MiA+IGRldl9wcml2LT53IHx8IHBib3gtPnkyID4gZGV2X3ByaXYtPmgpCiAJCQljb250aW51ZTsKIAotCSAgIAlpZiAoIGZsYWdzICYgSTgzMF9GUk9OVCApIHsJICAgIAotCQkgICAJRFJNX0RFQlVHKCJjbGVhciBmcm9udFxuIik7Ci0JCQlCRUdJTl9MUF9SSU5HKCA2ICk7CSAgICAKLQkJCU9VVF9SSU5HKCBDTUQgKTsKLQkJCU9VVF9SSU5HKCBCUjEzICk7Ci0JCQlPVVRfUklORyggKHBib3gtPnkxIDw8IDE2KSB8IHBib3gtPngxICk7Ci0JCQlPVVRfUklORyggKHBib3gtPnkyIDw8IDE2KSB8IHBib3gtPngyICk7Ci0JCQlPVVRfUklORyggZGV2X3ByaXYtPmZyb250X29mZnNldCApOwotCQkJT1VUX1JJTkcoIGNsZWFyX2NvbG9yICk7CisJCWlmIChmbGFncyAmIEk4MzBfRlJPTlQpIHsKKwkJCURSTV9ERUJVRygiY2xlYXIgZnJvbnRcbiIpOworCQkJQkVHSU5fTFBfUklORyg2KTsKKwkJCU9VVF9SSU5HKENNRCk7CisJCQlPVVRfUklORyhCUjEzKTsKKwkJCU9VVF9SSU5HKChwYm94LT55MSA8PCAxNikgfCBwYm94LT54MSk7CisJCQlPVVRfUklORygocGJveC0+eTIgPDwgMTYpIHwgcGJveC0+eDIpOworCQkJT1VUX1JJTkcoZGV2X3ByaXYtPmZyb250X29mZnNldCk7CisJCQlPVVRfUklORyhjbGVhcl9jb2xvcik7CiAJCQlBRFZBTkNFX0xQX1JJTkcoKTsKIAkJfQogCi0JCWlmICggZmxhZ3MgJiBJODMwX0JBQ0sgKSB7CisJCWlmIChmbGFncyAmIEk4MzBfQkFDSykgewogCQkJRFJNX0RFQlVHKCJjbGVhciBiYWNrXG4iKTsKLQkJCUJFR0lOX0xQX1JJTkcoIDYgKTsJICAgIAotCQkJT1VUX1JJTkcoIENNRCApOwotCQkJT1VUX1JJTkcoIEJSMTMgKTsKLQkJCU9VVF9SSU5HKCAocGJveC0+eTEgPDwgMTYpIHwgcGJveC0+eDEgKTsKLQkJCU9VVF9SSU5HKCAocGJveC0+eTIgPDwgMTYpIHwgcGJveC0+eDIgKTsKLQkJCU9VVF9SSU5HKCBkZXZfcHJpdi0+YmFja19vZmZzZXQgKTsKLQkJCU9VVF9SSU5HKCBjbGVhcl9jb2xvciApOworCQkJQkVHSU5fTFBfUklORyg2KTsKKwkJCU9VVF9SSU5HKENNRCk7CisJCQlPVVRfUklORyhCUjEzKTsKKwkJCU9VVF9SSU5HKChwYm94LT55MSA8PCAxNikgfCBwYm94LT54MSk7CisJCQlPVVRfUklORygocGJveC0+eTIgPDwgMTYpIHwgcGJveC0+eDIpOworCQkJT1VUX1JJTkcoZGV2X3ByaXYtPmJhY2tfb2Zmc2V0KTsKKwkJCU9VVF9SSU5HKGNsZWFyX2NvbG9yKTsKIAkJCUFEVkFOQ0VfTFBfUklORygpOwogCQl9CiAKLQkJaWYgKCBmbGFncyAmIEk4MzBfREVQVEggKSB7CisJCWlmIChmbGFncyAmIEk4MzBfREVQVEgpIHsKIAkJCURSTV9ERUJVRygiY2xlYXIgZGVwdGhcbiIpOwotCQkJQkVHSU5fTFBfUklORyggNiApOwotCQkJT1VUX1JJTkcoIERfQ01EICk7Ci0JCQlPVVRfUklORyggQlIxMyApOwotCQkJT1VUX1JJTkcoIChwYm94LT55MSA8PCAxNikgfCBwYm94LT54MSApOwotCQkJT1VUX1JJTkcoIChwYm94LT55MiA8PCAxNikgfCBwYm94LT54MiApOwotCQkJT1VUX1JJTkcoIGRldl9wcml2LT5kZXB0aF9vZmZzZXQgKTsKLQkJCU9VVF9SSU5HKCBjbGVhcl96dmFsICk7CisJCQlCRUdJTl9MUF9SSU5HKDYpOworCQkJT1VUX1JJTkcoRF9DTUQpOworCQkJT1VUX1JJTkcoQlIxMyk7CisJCQlPVVRfUklORygocGJveC0+eTEgPDwgMTYpIHwgcGJveC0+eDEpOworCQkJT1VUX1JJTkcoKHBib3gtPnkyIDw8IDE2KSB8IHBib3gtPngyKTsKKwkJCU9VVF9SSU5HKGRldl9wcml2LT5kZXB0aF9vZmZzZXQpOworCQkJT1VUX1JJTkcoY2xlYXJfenZhbCk7CiAJCQlBRFZBTkNFX0xQX1JJTkcoKTsKIAkJfQogCX0KIH0KIAotc3RhdGljIHZvaWQgaTgzMF9kbWFfZGlzcGF0Y2hfc3dhcCggZHJtX2RldmljZV90ICpkZXYgKQorc3RhdGljIHZvaWQgaTgzMF9kbWFfZGlzcGF0Y2hfc3dhcChkcm1fZGV2aWNlX3QgKiBkZXYpCiB7Ci0gICAJZHJtX2k4MzBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0gICAgICAJZHJtX2k4MzBfc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9wcml2OworCWRybV9pODMwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWRybV9pODMwX3NhcmVhX3QgKnNhcmVhX3ByaXYgPSBkZXZfcHJpdi0+c2FyZWFfcHJpdjsKIAlpbnQgbmJveCA9IHNhcmVhX3ByaXYtPm5ib3g7CiAJZHJtX2NsaXBfcmVjdF90ICpwYm94ID0gc2FyZWFfcHJpdi0+Ym94ZXM7CiAJaW50IHBpdGNoID0gZGV2X3ByaXYtPnBpdGNoOwpAQCAtOTkwLDIwMiArOTc5LDE5MiBAQAogCiAJRFJNX0RFQlVHKCJzd2FwYnVmZmVyc1xuIik7CiAKLSAgCWk4MzBfa2VybmVsX2xvc3RfY29udGV4dChkZXYpOworCWk4MzBfa2VybmVsX2xvc3RfY29udGV4dChkZXYpOwogCiAJaWYgKGRldl9wcml2LT5kb19ib3hlcykKLQkJaTgzMF9jcF9wZXJmb3JtYW5jZV9ib3hlcyggZGV2ICk7CisJCWk4MzBfY3BfcGVyZm9ybWFuY2VfYm94ZXMoZGV2KTsKIAotCXN3aXRjaChjcHApIHsKLQljYXNlIDI6IAotCQlCUjEzID0gKHBpdGNoICogY3BwKSB8ICgweENDIDw8IDE2KSB8ICgxPDwyNCk7CisJc3dpdGNoIChjcHApIHsKKwljYXNlIDI6CisJCUJSMTMgPSAocGl0Y2ggKiBjcHApIHwgKDB4Q0MgPDwgMTYpIHwgKDEgPDwgMjQpOwogCQlDTUQgPSBYWV9TUkNfQ09QWV9CTFRfQ01EOwogCQlicmVhazsKIAljYXNlIDQ6Ci0JCUJSMTMgPSAocGl0Y2ggKiBjcHApIHwgKDB4Q0MgPDwgMTYpIHwgKDE8PDI0KSB8ICgxPDwyNSk7CisJCUJSMTMgPSAocGl0Y2ggKiBjcHApIHwgKDB4Q0MgPDwgMTYpIHwgKDEgPDwgMjQpIHwgKDEgPDwgMjUpOwogCQlDTUQgPSAoWFlfU1JDX0NPUFlfQkxUX0NNRCB8IFhZX1NSQ19DT1BZX0JMVF9XUklURV9BTFBIQSB8CiAJCSAgICAgICBYWV9TUkNfQ09QWV9CTFRfV1JJVEVfUkdCKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJQlIxMyA9IChwaXRjaCAqIGNwcCkgfCAoMHhDQyA8PCAxNikgfCAoMTw8MjQpOworCQlCUjEzID0gKHBpdGNoICogY3BwKSB8ICgweENDIDw8IDE2KSB8ICgxIDw8IDI0KTsKIAkJQ01EID0gWFlfU1JDX0NPUFlfQkxUX0NNRDsKIAkJYnJlYWs7CiAJfQogCisJaWYgKG5ib3ggPiBJODMwX05SX1NBUkVBX0NMSVBSRUNUUykKKwkJbmJveCA9IEk4MzBfTlJfU0FSRUFfQ0xJUFJFQ1RTOwogCi0gICAgICAJaWYgKG5ib3ggPiBJODMwX05SX1NBUkVBX0NMSVBSRUNUUykKLSAgICAgCQluYm94ID0gSTgzMF9OUl9TQVJFQV9DTElQUkVDVFM7Ci0KLQlmb3IgKGkgPSAwIDsgaSA8IG5ib3g7IGkrKywgcGJveCsrKSAKLQl7CisJZm9yIChpID0gMDsgaSA8IG5ib3g7IGkrKywgcGJveCsrKSB7CiAJCWlmIChwYm94LT54MSA+IHBib3gtPngyIHx8CiAJCSAgICBwYm94LT55MSA+IHBib3gtPnkyIHx8Ci0JCSAgICBwYm94LT54MiA+IGRldl9wcml2LT53IHx8Ci0JCSAgICBwYm94LT55MiA+IGRldl9wcml2LT5oKQorCQkgICAgcGJveC0+eDIgPiBkZXZfcHJpdi0+dyB8fCBwYm94LT55MiA+IGRldl9wcml2LT5oKQogCQkJY29udGludWU7Ci0gCisKIAkJRFJNX0RFQlVHKCJkaXNwYXRjaCBzd2FwICVkLCVkLSVkLCVkIVxuIiwKLQkJCSAgcGJveC0+eDEsIHBib3gtPnkxLAotCQkJICBwYm94LT54MiwgcGJveC0+eTIpOworCQkJICBwYm94LT54MSwgcGJveC0+eTEsIHBib3gtPngyLCBwYm94LT55Mik7CiAKLQkJQkVHSU5fTFBfUklORyggOCApOwotCQlPVVRfUklORyggQ01EICk7Ci0JCU9VVF9SSU5HKCBCUjEzICk7Ci0JCU9VVF9SSU5HKCAocGJveC0+eTEgPDwgMTYpIHwgcGJveC0+eDEgKTsKLQkJT1VUX1JJTkcoIChwYm94LT55MiA8PCAxNikgfCBwYm94LT54MiApOworCQlCRUdJTl9MUF9SSU5HKDgpOworCQlPVVRfUklORyhDTUQpOworCQlPVVRfUklORyhCUjEzKTsKKwkJT1VUX1JJTkcoKHBib3gtPnkxIDw8IDE2KSB8IHBib3gtPngxKTsKKwkJT1VUX1JJTkcoKHBib3gtPnkyIDw8IDE2KSB8IHBib3gtPngyKTsKIAotCQlpZiAoZGV2X3ByaXYtPmN1cnJlbnRfcGFnZSA9PSAwKSAKLQkJCU9VVF9SSU5HKCBkZXZfcHJpdi0+ZnJvbnRfb2Zmc2V0ICk7CisJCWlmIChkZXZfcHJpdi0+Y3VycmVudF9wYWdlID09IDApCisJCQlPVVRfUklORyhkZXZfcHJpdi0+ZnJvbnRfb2Zmc2V0KTsKIAkJZWxzZQotCQkJT1VUX1JJTkcoIGRldl9wcml2LT5iYWNrX29mZnNldCApOwkJCQorCQkJT1VUX1JJTkcoZGV2X3ByaXYtPmJhY2tfb2Zmc2V0KTsKIAotCQlPVVRfUklORyggKHBib3gtPnkxIDw8IDE2KSB8IHBib3gtPngxICk7Ci0JCU9VVF9SSU5HKCBCUjEzICYgMHhmZmZmICk7CisJCU9VVF9SSU5HKChwYm94LT55MSA8PCAxNikgfCBwYm94LT54MSk7CisJCU9VVF9SSU5HKEJSMTMgJiAweGZmZmYpOwogCi0JCWlmIChkZXZfcHJpdi0+Y3VycmVudF9wYWdlID09IDApIAotCQkJT1VUX1JJTkcoIGRldl9wcml2LT5iYWNrX29mZnNldCApOwkJCQorCQlpZiAoZGV2X3ByaXYtPmN1cnJlbnRfcGFnZSA9PSAwKQorCQkJT1VUX1JJTkcoZGV2X3ByaXYtPmJhY2tfb2Zmc2V0KTsKIAkJZWxzZQotCQkJT1VUX1JJTkcoIGRldl9wcml2LT5mcm9udF9vZmZzZXQgKTsKKwkJCU9VVF9SSU5HKGRldl9wcml2LT5mcm9udF9vZmZzZXQpOwogCiAJCUFEVkFOQ0VfTFBfUklORygpOwogCX0KIH0KIAotc3RhdGljIHZvaWQgaTgzMF9kbWFfZGlzcGF0Y2hfZmxpcCggZHJtX2RldmljZV90ICpkZXYgKQorc3RhdGljIHZvaWQgaTgzMF9kbWFfZGlzcGF0Y2hfZmxpcChkcm1fZGV2aWNlX3QgKiBkZXYpCiB7Ci0gICAJZHJtX2k4MzBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJZHJtX2k4MzBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJUklOR19MT0NBTFM7CiAKLQlEUk1fREVCVUcoICIlczogcGFnZT0lZCBwZkN1cnJlbnRQYWdlPSVkXG4iLCAKLQkJICAgX19GVU5DVElPTl9fLCAKLQkJICAgZGV2X3ByaXYtPmN1cnJlbnRfcGFnZSwKLQkJICAgZGV2X3ByaXYtPnNhcmVhX3ByaXYtPnBmX2N1cnJlbnRfcGFnZSk7CisJRFJNX0RFQlVHKCIlczogcGFnZT0lZCBwZkN1cnJlbnRQYWdlPSVkXG4iLAorCQkgIF9fRlVOQ1RJT05fXywKKwkJICBkZXZfcHJpdi0+Y3VycmVudF9wYWdlLAorCQkgIGRldl9wcml2LT5zYXJlYV9wcml2LT5wZl9jdXJyZW50X3BhZ2UpOwogCi0gIAlpODMwX2tlcm5lbF9sb3N0X2NvbnRleHQoZGV2KTsKKwlpODMwX2tlcm5lbF9sb3N0X2NvbnRleHQoZGV2KTsKIAogCWlmIChkZXZfcHJpdi0+ZG9fYm94ZXMpIHsKIAkJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPnBlcmZfYm94ZXMgfD0gSTgzMF9CT1hfRkxJUDsKLQkJaTgzMF9jcF9wZXJmb3JtYW5jZV9ib3hlcyggZGV2ICk7CisJCWk4MzBfY3BfcGVyZm9ybWFuY2VfYm94ZXMoZGV2KTsKIAl9CiAKLQotCUJFR0lOX0xQX1JJTkcoIDIgKTsKLSAgICAJT1VUX1JJTkcoIElOU1RfUEFSU0VSX0NMSUVOVCB8IElOU1RfT1BfRkxVU0ggfCBJTlNUX0ZMVVNIX01BUF9DQUNIRSApOyAKLQlPVVRfUklORyggMCApOworCUJFR0lOX0xQX1JJTkcoMik7CisJT1VUX1JJTkcoSU5TVF9QQVJTRVJfQ0xJRU5UIHwgSU5TVF9PUF9GTFVTSCB8IElOU1RfRkxVU0hfTUFQX0NBQ0hFKTsKKwlPVVRfUklORygwKTsKIAlBRFZBTkNFX0xQX1JJTkcoKTsKIAotCUJFR0lOX0xQX1JJTkcoIDYgKTsKLQlPVVRfUklORyggQ01EX09QX0RJU1BMQVlCVUZGRVJfSU5GTyB8IEFTWU5DX0ZMSVAgKTsJCi0JT1VUX1JJTkcoIDAgKTsKLQlpZiAoIGRldl9wcml2LT5jdXJyZW50X3BhZ2UgPT0gMCApIHsKLQkJT1VUX1JJTkcoIGRldl9wcml2LT5iYWNrX29mZnNldCApOworCUJFR0lOX0xQX1JJTkcoNik7CisJT1VUX1JJTkcoQ01EX09QX0RJU1BMQVlCVUZGRVJfSU5GTyB8IEFTWU5DX0ZMSVApOworCU9VVF9SSU5HKDApOworCWlmIChkZXZfcHJpdi0+Y3VycmVudF9wYWdlID09IDApIHsKKwkJT1VUX1JJTkcoZGV2X3ByaXYtPmJhY2tfb2Zmc2V0KTsKIAkJZGV2X3ByaXYtPmN1cnJlbnRfcGFnZSA9IDE7CiAJfSBlbHNlIHsKLQkJT1VUX1JJTkcoIGRldl9wcml2LT5mcm9udF9vZmZzZXQgKTsKKwkJT1VUX1JJTkcoZGV2X3ByaXYtPmZyb250X29mZnNldCk7CiAJCWRldl9wcml2LT5jdXJyZW50X3BhZ2UgPSAwOwogCX0KIAlPVVRfUklORygwKTsKIAlBRFZBTkNFX0xQX1JJTkcoKTsKIAotCi0JQkVHSU5fTFBfUklORyggMiApOwotCU9VVF9SSU5HKCBNSV9XQUlUX0ZPUl9FVkVOVCB8Ci0JCSAgTUlfV0FJVF9GT1JfUExBTkVfQV9GTElQICk7Ci0JT1VUX1JJTkcoIDAgKTsKKwlCRUdJTl9MUF9SSU5HKDIpOworCU9VVF9SSU5HKE1JX1dBSVRfRk9SX0VWRU5UIHwgTUlfV0FJVF9GT1JfUExBTkVfQV9GTElQKTsKKwlPVVRfUklORygwKTsKIAlBRFZBTkNFX0xQX1JJTkcoKTsKLQkKIAogCWRldl9wcml2LT5zYXJlYV9wcml2LT5wZl9jdXJyZW50X3BhZ2UgPSBkZXZfcHJpdi0+Y3VycmVudF9wYWdlOwogfQogCi1zdGF0aWMgdm9pZCBpODMwX2RtYV9kaXNwYXRjaF92ZXJ0ZXgoZHJtX2RldmljZV90ICpkZXYsIAotCQkJCSAgICAgZHJtX2J1Zl90ICpidWYsCi0JCQkJICAgICBpbnQgZGlzY2FyZCwKLQkJCQkgICAgIGludCB1c2VkKQorc3RhdGljIHZvaWQgaTgzMF9kbWFfZGlzcGF0Y2hfdmVydGV4KGRybV9kZXZpY2VfdCAqIGRldiwKKwkJCQkgICAgIGRybV9idWZfdCAqIGJ1ZiwgaW50IGRpc2NhcmQsIGludCB1c2VkKQogewotICAgCWRybV9pODMwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWRybV9pODMwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWRybV9pODMwX2J1Zl9wcml2X3QgKmJ1Zl9wcml2ID0gYnVmLT5kZXZfcHJpdmF0ZTsKLSAgIAlkcm1faTgzMF9zYXJlYV90ICpzYXJlYV9wcml2ID0gZGV2X3ByaXYtPnNhcmVhX3ByaXY7Ci0gICAJZHJtX2NsaXBfcmVjdF90ICpib3ggPSBzYXJlYV9wcml2LT5ib3hlczsKLSAgIAlpbnQgbmJveCA9IHNhcmVhX3ByaXYtPm5ib3g7CisJZHJtX2k4MzBfc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9wcml2OworCWRybV9jbGlwX3JlY3RfdCAqYm94ID0gc2FyZWFfcHJpdi0+Ym94ZXM7CisJaW50IG5ib3ggPSBzYXJlYV9wcml2LT5uYm94OwogCXVuc2lnbmVkIGxvbmcgYWRkcmVzcyA9ICh1bnNpZ25lZCBsb25nKWJ1Zi0+YnVzX2FkZHJlc3M7Ci0JdW5zaWduZWQgbG9uZyBzdGFydCA9IGFkZHJlc3MgLSBkZXYtPmFncC0+YmFzZTsgICAgIAorCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBhZGRyZXNzIC0gZGV2LT5hZ3AtPmJhc2U7CiAJaW50IGkgPSAwLCB1OwotICAgCVJJTkdfTE9DQUxTOworCVJJTkdfTE9DQUxTOwogCi0gICAJaTgzMF9rZXJuZWxfbG9zdF9jb250ZXh0KGRldik7CisJaTgzMF9rZXJuZWxfbG9zdF9jb250ZXh0KGRldik7CiAKLSAgIAlpZiAobmJveCA+IEk4MzBfTlJfU0FSRUFfQ0xJUFJFQ1RTKSAKKwlpZiAobmJveCA+IEk4MzBfTlJfU0FSRUFfQ0xJUFJFQ1RTKQogCQluYm94ID0gSTgzMF9OUl9TQVJFQV9DTElQUkVDVFM7CiAKIAlpZiAoZGlzY2FyZCkgewotCQl1ID0gY21weGNoZyhidWZfcHJpdi0+aW5fdXNlLCBJODMwX0JVRl9DTElFTlQsIAorCQl1ID0gY21weGNoZyhidWZfcHJpdi0+aW5fdXNlLCBJODMwX0JVRl9DTElFTlQsCiAJCQkgICAgSTgzMF9CVUZfSEFSRFdBUkUpOwotCQlpZih1ICE9IEk4MzBfQlVGX0NMSUVOVCkgeworCQlpZiAodSAhPSBJODMwX0JVRl9DTElFTlQpIHsKIAkJCURSTV9ERUJVRygieHh4eCAyXG4iKTsKIAkJfQogCX0KIAotCWlmICh1c2VkID4gNCoxMDIzKSAKKwlpZiAodXNlZCA+IDQgKiAxMDIzKQogCQl1c2VkID0gMDsKIAogCWlmIChzYXJlYV9wcml2LT5kaXJ0eSkKLQkgICBpODMwRW1pdFN0YXRlKCBkZXYgKTsKKwkJaTgzMEVtaXRTdGF0ZShkZXYpOwogCi0gIAlEUk1fREVCVUcoImRpc3BhdGNoIHZlcnRleCBhZGRyIDB4JWx4LCB1c2VkIDB4JXggbmJveCAlZFxuIiwgCisJRFJNX0RFQlVHKCJkaXNwYXRjaCB2ZXJ0ZXggYWRkciAweCVseCwgdXNlZCAweCV4IG5ib3ggJWRcbiIsCiAJCSAgYWRkcmVzcywgdXNlZCwgbmJveCk7CiAKLSAgIAlkZXZfcHJpdi0+Y291bnRlcisrOwotICAgCURSTV9ERUJVRyggICJkaXNwYXRjaCBjb3VudGVyIDogJWxkXG4iLCBkZXZfcHJpdi0+Y291bnRlcik7Ci0gICAJRFJNX0RFQlVHKCAgImk4MzBfZG1hX2Rpc3BhdGNoXG4iKTsKLSAgIAlEUk1fREVCVUcoICAic3RhcnQgOiAlbHhcbiIsIHN0YXJ0KTsKLQlEUk1fREVCVUcoICAidXNlZCA6ICVkXG4iLCB1c2VkKTsKLSAgIAlEUk1fREVCVUcoICAic3RhcnQgKyB1c2VkIC0gNCA6ICVsZFxuIiwgc3RhcnQgKyB1c2VkIC0gNCk7CisJZGV2X3ByaXYtPmNvdW50ZXIrKzsKKwlEUk1fREVCVUcoImRpc3BhdGNoIGNvdW50ZXIgOiAlbGRcbiIsIGRldl9wcml2LT5jb3VudGVyKTsKKwlEUk1fREVCVUcoImk4MzBfZG1hX2Rpc3BhdGNoXG4iKTsKKwlEUk1fREVCVUcoInN0YXJ0IDogJWx4XG4iLCBzdGFydCk7CisJRFJNX0RFQlVHKCJ1c2VkIDogJWRcbiIsIHVzZWQpOworCURSTV9ERUJVRygic3RhcnQgKyB1c2VkIC0gNCA6ICVsZFxuIiwgc3RhcnQgKyB1c2VkIC0gNCk7CiAKIAlpZiAoYnVmX3ByaXYtPmN1cnJlbnRseV9tYXBwZWQgPT0gSTgzMF9CVUZfTUFQUEVEKSB7CiAJCXUzMiAqdnAgPSBidWZfcHJpdi0+a2VybmVsX3ZpcnR1YWw7CiAKIAkJdnBbMF0gPSAoR0ZYX09QX1BSSU1JVElWRSB8Ci0JCQlzYXJlYV9wcml2LT52ZXJ0ZXhfcHJpbSB8Ci0JCQkoKHVzZWQvNCktMikpOworCQkJIHNhcmVhX3ByaXYtPnZlcnRleF9wcmltIHwgKCh1c2VkIC8gNCkgLSAyKSk7CiAKIAkJaWYgKGRldl9wcml2LT51c2VfbWlfYmF0Y2hidWZmZXJfc3RhcnQpIHsKLQkJCXZwW3VzZWQvNF0gPSBNSV9CQVRDSF9CVUZGRVJfRU5EOwotCQkJdXNlZCArPSA0OyAKKwkJCXZwW3VzZWQgLyA0XSA9IE1JX0JBVENIX0JVRkZFUl9FTkQ7CisJCQl1c2VkICs9IDQ7CiAJCX0KLQkJCisKIAkJaWYgKHVzZWQgJiA0KSB7Ci0JCQl2cFt1c2VkLzRdID0gMDsKKwkJCXZwW3VzZWQgLyA0XSA9IDA7CiAJCQl1c2VkICs9IDQ7CiAJCX0KIAogCQlpODMwX3VubWFwX2J1ZmZlcihidWYpOwogCX0KLQkJICAgCisKIAlpZiAodXNlZCkgewogCQlkbyB7CiAJCQlpZiAoaSA8IG5ib3gpIHsKIAkJCQlCRUdJTl9MUF9SSU5HKDYpOwotCQkJCU9VVF9SSU5HKCBHRlhfT1BfRFJBV1JFQ1RfSU5GTyApOwotCQkJCU9VVF9SSU5HKCBzYXJlYV9wcml2LT5CdWZmZXJTdGF0ZVtJODMwX0RFU1RSRUdfRFIxXSApOwotCQkJCU9VVF9SSU5HKCBib3hbaV0ueDEgfCAoYm94W2ldLnkxPDwxNikgKTsKLQkJCQlPVVRfUklORyggYm94W2ldLngyIHwgKGJveFtpXS55Mjw8MTYpICk7Ci0JCQkJT1VUX1JJTkcoIHNhcmVhX3ByaXYtPkJ1ZmZlclN0YXRlW0k4MzBfREVTVFJFR19EUjRdICk7Ci0JCQkJT1VUX1JJTkcoIDAgKTsKKwkJCQlPVVRfUklORyhHRlhfT1BfRFJBV1JFQ1RfSU5GTyk7CisJCQkJT1VUX1JJTkcoc2FyZWFfcHJpdi0+CisJCQkJCSBCdWZmZXJTdGF0ZVtJODMwX0RFU1RSRUdfRFIxXSk7CisJCQkJT1VUX1JJTkcoYm94W2ldLngxIHwgKGJveFtpXS55MSA8PCAxNikpOworCQkJCU9VVF9SSU5HKGJveFtpXS54MiB8IChib3hbaV0ueTIgPDwgMTYpKTsKKwkJCQlPVVRfUklORyhzYXJlYV9wcml2LT4KKwkJCQkJIEJ1ZmZlclN0YXRlW0k4MzBfREVTVFJFR19EUjRdKTsKKwkJCQlPVVRfUklORygwKTsKIAkJCQlBRFZBTkNFX0xQX1JJTkcoKTsKIAkJCX0KIAogCQkJaWYgKGRldl9wcml2LT51c2VfbWlfYmF0Y2hidWZmZXJfc3RhcnQpIHsKIAkJCQlCRUdJTl9MUF9SSU5HKDIpOwotCQkJCU9VVF9SSU5HKCBNSV9CQVRDSF9CVUZGRVJfU1RBUlQgfCAoMjw8NikgKTsKLQkJCQlPVVRfUklORyggc3RhcnQgfCBNSV9CQVRDSF9OT05fU0VDVVJFICk7CisJCQkJT1VUX1JJTkcoTUlfQkFUQ0hfQlVGRkVSX1NUQVJUIHwgKDIgPDwgNikpOworCQkJCU9VVF9SSU5HKHN0YXJ0IHwgTUlfQkFUQ0hfTk9OX1NFQ1VSRSk7CiAJCQkJQURWQU5DRV9MUF9SSU5HKCk7Ci0JCQl9IAotCQkJZWxzZSB7CisJCQl9IGVsc2UgewogCQkJCUJFR0lOX0xQX1JJTkcoNCk7Ci0JCQkJT1VUX1JJTkcoIE1JX0JBVENIX0JVRkZFUiApOwotCQkJCU9VVF9SSU5HKCBzdGFydCB8IE1JX0JBVENIX05PTl9TRUNVUkUgKTsKLQkJCQlPVVRfUklORyggc3RhcnQgKyB1c2VkIC0gNCApOwotCQkJCU9VVF9SSU5HKCAwICk7CisJCQkJT1VUX1JJTkcoTUlfQkFUQ0hfQlVGRkVSKTsKKwkJCQlPVVRfUklORyhzdGFydCB8IE1JX0JBVENIX05PTl9TRUNVUkUpOworCQkJCU9VVF9SSU5HKHN0YXJ0ICsgdXNlZCAtIDQpOworCQkJCU9VVF9SSU5HKDApOwogCQkJCUFEVkFOQ0VfTFBfUklORygpOwogCQkJfQogCkBAIC0xMTk1LDYxICsxMTc0LDYwIEBACiAJaWYgKGRpc2NhcmQpIHsKIAkJZGV2X3ByaXYtPmNvdW50ZXIrKzsKIAotCQkodm9pZCkgY21weGNoZyhidWZfcHJpdi0+aW5fdXNlLCBJODMwX0JVRl9DTElFTlQsCi0JCQkgICAgICAgSTgzMF9CVUZfSEFSRFdBUkUpOworCQkodm9pZCljbXB4Y2hnKGJ1Zl9wcml2LT5pbl91c2UsIEk4MzBfQlVGX0NMSUVOVCwKKwkJCSAgICAgIEk4MzBfQlVGX0hBUkRXQVJFKTsKIAogCQlCRUdJTl9MUF9SSU5HKDgpOwotCQlPVVRfUklORyggQ01EX1NUT1JFX0RXT1JEX0lEWCApOwotCQlPVVRfUklORyggMjAgKTsKLQkJT1VUX1JJTkcoIGRldl9wcml2LT5jb3VudGVyICk7Ci0JCU9VVF9SSU5HKCBDTURfU1RPUkVfRFdPUkRfSURYICk7Ci0JCU9VVF9SSU5HKCBidWZfcHJpdi0+bXlfdXNlX2lkeCApOwotCQlPVVRfUklORyggSTgzMF9CVUZfRlJFRSApOwotCQlPVVRfUklORyggQ01EX1JFUE9SVF9IRUFEICk7Ci0JCU9VVF9SSU5HKCAwICk7CisJCU9VVF9SSU5HKENNRF9TVE9SRV9EV09SRF9JRFgpOworCQlPVVRfUklORygyMCk7CisJCU9VVF9SSU5HKGRldl9wcml2LT5jb3VudGVyKTsKKwkJT1VUX1JJTkcoQ01EX1NUT1JFX0RXT1JEX0lEWCk7CisJCU9VVF9SSU5HKGJ1Zl9wcml2LT5teV91c2VfaWR4KTsKKwkJT1VUX1JJTkcoSTgzMF9CVUZfRlJFRSk7CisJCU9VVF9SSU5HKENNRF9SRVBPUlRfSEVBRCk7CisJCU9VVF9SSU5HKDApOwogCQlBRFZBTkNFX0xQX1JJTkcoKTsKIAl9CiB9CiAKLQotc3RhdGljIHZvaWQgaTgzMF9kbWFfcXVpZXNjZW50KGRybV9kZXZpY2VfdCAqZGV2KQorc3RhdGljIHZvaWQgaTgzMF9kbWFfcXVpZXNjZW50KGRybV9kZXZpY2VfdCAqIGRldikKIHsKLSAgICAgIAlkcm1faTgzMF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLSAgIAlSSU5HX0xPQ0FMUzsKKwlkcm1faTgzMF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlSSU5HX0xPQ0FMUzsKIAotICAJaTgzMF9rZXJuZWxfbG9zdF9jb250ZXh0KGRldik7CisJaTgzMF9rZXJuZWxfbG9zdF9jb250ZXh0KGRldik7CiAKLSAgIAlCRUdJTl9MUF9SSU5HKDQpOwotICAgCU9VVF9SSU5HKCBJTlNUX1BBUlNFUl9DTElFTlQgfCBJTlNUX09QX0ZMVVNIIHwgSU5TVF9GTFVTSF9NQVBfQ0FDSEUgKTsKLSAgIAlPVVRfUklORyggQ01EX1JFUE9SVF9IRUFEICk7Ci0gICAgICAJT1VUX1JJTkcoIDAgKTsKLSAgICAgIAlPVVRfUklORyggMCApOwotICAgCUFEVkFOQ0VfTFBfUklORygpOworCUJFR0lOX0xQX1JJTkcoNCk7CisJT1VUX1JJTkcoSU5TVF9QQVJTRVJfQ0xJRU5UIHwgSU5TVF9PUF9GTFVTSCB8IElOU1RfRkxVU0hfTUFQX0NBQ0hFKTsKKwlPVVRfUklORyhDTURfUkVQT1JUX0hFQUQpOworCU9VVF9SSU5HKDApOworCU9VVF9SSU5HKDApOworCUFEVkFOQ0VfTFBfUklORygpOwogCi0JaTgzMF93YWl0X3JpbmcoIGRldiwgZGV2X3ByaXYtPnJpbmcuU2l6ZSAtIDgsIF9fRlVOQ1RJT05fXyApOworCWk4MzBfd2FpdF9yaW5nKGRldiwgZGV2X3ByaXYtPnJpbmcuU2l6ZSAtIDgsIF9fRlVOQ1RJT05fXyk7CiB9CiAKLXN0YXRpYyBpbnQgaTgzMF9mbHVzaF9xdWV1ZShkcm1fZGV2aWNlX3QgKmRldikKK3N0YXRpYyBpbnQgaTgzMF9mbHVzaF9xdWV1ZShkcm1fZGV2aWNlX3QgKiBkZXYpCiB7Ci0gICAJZHJtX2k4MzBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJZHJtX2k4MzBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJZHJtX2RldmljZV9kbWFfdCAqZG1hID0gZGV2LT5kbWE7Ci0gICAJaW50IGksIHJldCA9IDA7Ci0gICAJUklOR19MT0NBTFM7Ci0JCi0gICAJaTgzMF9rZXJuZWxfbG9zdF9jb250ZXh0KGRldik7CisJaW50IGksIHJldCA9IDA7CisJUklOR19MT0NBTFM7CiAKLSAgIAlCRUdJTl9MUF9SSU5HKDIpOwotICAgICAgCU9VVF9SSU5HKCBDTURfUkVQT1JUX0hFQUQgKTsKLSAgICAgIAlPVVRfUklORyggMCApOwotICAgICAgCUFEVkFOQ0VfTFBfUklORygpOworCWk4MzBfa2VybmVsX2xvc3RfY29udGV4dChkZXYpOwogCi0JaTgzMF93YWl0X3JpbmcoIGRldiwgZGV2X3ByaXYtPnJpbmcuU2l6ZSAtIDgsIF9fRlVOQ1RJT05fXyApOworCUJFR0lOX0xQX1JJTkcoMik7CisJT1VUX1JJTkcoQ01EX1JFUE9SVF9IRUFEKTsKKwlPVVRfUklORygwKTsKKwlBRFZBTkNFX0xQX1JJTkcoKTsKIAotICAgCWZvciAoaSA9IDA7IGkgPCBkbWEtPmJ1Zl9jb3VudDsgaSsrKSB7Ci0JICAgCWRybV9idWZfdCAqYnVmID0gZG1hLT5idWZsaXN0WyBpIF07Ci0JICAgCWRybV9pODMwX2J1Zl9wcml2X3QgKmJ1Zl9wcml2ID0gYnVmLT5kZXZfcHJpdmF0ZTsKLQkgICAKLQkJaW50IHVzZWQgPSBjbXB4Y2hnKGJ1Zl9wcml2LT5pbl91c2UsIEk4MzBfQlVGX0hBUkRXQVJFLCAKKwlpODMwX3dhaXRfcmluZyhkZXYsIGRldl9wcml2LT5yaW5nLlNpemUgLSA4LCBfX0ZVTkNUSU9OX18pOworCisJZm9yIChpID0gMDsgaSA8IGRtYS0+YnVmX2NvdW50OyBpKyspIHsKKwkJZHJtX2J1Zl90ICpidWYgPSBkbWEtPmJ1Zmxpc3RbaV07CisJCWRybV9pODMwX2J1Zl9wcml2X3QgKmJ1Zl9wcml2ID0gYnVmLT5kZXZfcHJpdmF0ZTsKKworCQlpbnQgdXNlZCA9IGNtcHhjaGcoYnVmX3ByaXYtPmluX3VzZSwgSTgzMF9CVUZfSEFSRFdBUkUsCiAJCQkJICAgSTgzMF9CVUZfRlJFRSk7CiAKIAkJaWYgKHVzZWQgPT0gSTgzMF9CVUZfSEFSRFdBUkUpCkBAIC0xMjU4LDYyICsxMjM2LDY2IEBACiAJCQlEUk1fREVCVUcoInN0aWxsIG9uIGNsaWVudFxuIik7CiAJfQogCi0gICAJcmV0dXJuIHJldDsKKwlyZXR1cm4gcmV0OwogfQogCiAvKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBsb2NrIGhlbGQgKi8KLXZvaWQgaTgzMF9yZWNsYWltX2J1ZmZlcnMoZHJtX2RldmljZV90ICpkZXYsIHN0cnVjdCBmaWxlICpmaWxwKQordm9pZCBpODMwX3JlY2xhaW1fYnVmZmVycyhkcm1fZGV2aWNlX3QgKiBkZXYsIHN0cnVjdCBmaWxlICpmaWxwKQogewogCWRybV9kZXZpY2VfZG1hX3QgKmRtYSA9IGRldi0+ZG1hOwotCWludAkJIGk7CisJaW50IGk7CiAKLQlpZiAoIWRtYSkgcmV0dXJuOwotICAgICAgCWlmICghZGV2LT5kZXZfcHJpdmF0ZSkgcmV0dXJuOwotCWlmICghZG1hLT5idWZsaXN0KSByZXR1cm47CisJaWYgKCFkbWEpCisJCXJldHVybjsKKwlpZiAoIWRldi0+ZGV2X3ByaXZhdGUpCisJCXJldHVybjsKKwlpZiAoIWRtYS0+YnVmbGlzdCkKKwkJcmV0dXJuOwogCi0gICAgICAgIGk4MzBfZmx1c2hfcXVldWUoZGV2KTsKKwlpODMwX2ZsdXNoX3F1ZXVlKGRldik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZG1hLT5idWZfY291bnQ7IGkrKykgewotCSAgIAlkcm1fYnVmX3QgKmJ1ZiA9IGRtYS0+YnVmbGlzdFsgaSBdOwotCSAgIAlkcm1faTgzMF9idWZfcHJpdl90ICpidWZfcHJpdiA9IGJ1Zi0+ZGV2X3ByaXZhdGU7Ci0JICAgCisJCWRybV9idWZfdCAqYnVmID0gZG1hLT5idWZsaXN0W2ldOworCQlkcm1faTgzMF9idWZfcHJpdl90ICpidWZfcHJpdiA9IGJ1Zi0+ZGV2X3ByaXZhdGU7CisKIAkJaWYgKGJ1Zi0+ZmlscCA9PSBmaWxwICYmIGJ1Zl9wcml2KSB7Ci0JCQlpbnQgdXNlZCA9IGNtcHhjaGcoYnVmX3ByaXYtPmluX3VzZSwgSTgzMF9CVUZfQ0xJRU5ULCAKKwkJCWludCB1c2VkID0gY21weGNoZyhidWZfcHJpdi0+aW5fdXNlLCBJODMwX0JVRl9DTElFTlQsCiAJCQkJCSAgIEk4MzBfQlVGX0ZSRUUpOwogCiAJCQlpZiAodXNlZCA9PSBJODMwX0JVRl9DTElFTlQpCiAJCQkJRFJNX0RFQlVHKCJyZWNsYWltZWQgZnJvbSBjbGllbnRcbiIpOwotCQkgICAJaWYoYnVmX3ByaXYtPmN1cnJlbnRseV9tYXBwZWQgPT0gSTgzMF9CVUZfTUFQUEVEKQotCQkgICAgIAkJYnVmX3ByaXYtPmN1cnJlbnRseV9tYXBwZWQgPSBJODMwX0JVRl9VTk1BUFBFRDsKKwkJCWlmIChidWZfcHJpdi0+Y3VycmVudGx5X21hcHBlZCA9PSBJODMwX0JVRl9NQVBQRUQpCisJCQkJYnVmX3ByaXYtPmN1cnJlbnRseV9tYXBwZWQgPSBJODMwX0JVRl9VTk1BUFBFRDsKIAkJfQogCX0KIH0KIAotc3RhdGljIGludCBpODMwX2ZsdXNoX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLCAKLQkJCSAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50IGk4MzBfZmx1c2hfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCisJCQkgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0gICAJZHJtX2ZpbGVfdAkgICpwcml2CSAgPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0gICAJZHJtX2RldmljZV90CSAgKmRldgkgID0gcHJpdi0+aGVhZC0+ZGV2OworCWRybV9maWxlX3QgKnByaXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJZHJtX2RldmljZV90ICpkZXYgPSBwcml2LT5oZWFkLT5kZXY7CiAKIAlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxwKTsKIAotICAgCWk4MzBfZmx1c2hfcXVldWUoZGV2KTsKLSAgIAlyZXR1cm4gMDsKKwlpODMwX2ZsdXNoX3F1ZXVlKGRldik7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgaTgzMF9kbWFfdmVydGV4KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAotCQkgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCisJCQkgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlkcm1fZmlsZV90ICpwcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCWRybV9kZXZpY2VfdCAqZGV2ID0gcHJpdi0+aGVhZC0+ZGV2OwogCWRybV9kZXZpY2VfZG1hX3QgKmRtYSA9IGRldi0+ZG1hOwotICAgCWRybV9pODMwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX2k4MzBfcHJpdmF0ZV90ICopZGV2LT5kZXZfcHJpdmF0ZTsKLSAgICAgIAl1MzIgKmh3X3N0YXR1cyA9IGRldl9wcml2LT5od19zdGF0dXNfcGFnZTsKLSAgIAlkcm1faTgzMF9zYXJlYV90ICpzYXJlYV9wcml2ID0gKGRybV9pODMwX3NhcmVhX3QgKikgCi0gICAgIAkJCQkJZGV2X3ByaXYtPnNhcmVhX3ByaXY7IAorCWRybV9pODMwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX2k4MzBfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisJdTMyICpod19zdGF0dXMgPSBkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2U7CisJZHJtX2k4MzBfc2FyZWFfdCAqc2FyZWFfcHJpdiA9IChkcm1faTgzMF9zYXJlYV90ICopCisJICAgIGRldl9wcml2LT5zYXJlYV9wcml2OwogCWRybV9pODMwX3ZlcnRleF90IHZlcnRleDsKIAotCWlmIChjb3B5X2Zyb21fdXNlcigmdmVydGV4LCAoZHJtX2k4MzBfdmVydGV4X3QgX191c2VyICopYXJnLCBzaXplb2YodmVydGV4KSkpCisJaWYgKGNvcHlfZnJvbV91c2VyCisJICAgICgmdmVydGV4LCAoZHJtX2k4MzBfdmVydGV4X3QgX191c2VyICopIGFyZywgc2l6ZW9mKHZlcnRleCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAogCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbHApOwpAQCAtMTMyMSwxNSArMTMwMywxNiBAQAogCURSTV9ERUJVRygiaTgzMCBkbWEgdmVydGV4LCBpZHggJWQgdXNlZCAlZCBkaXNjYXJkICVkXG4iLAogCQkgIHZlcnRleC5pZHgsIHZlcnRleC51c2VkLCB2ZXJ0ZXguZGlzY2FyZCk7CiAKLQlpZih2ZXJ0ZXguaWR4IDwgMCB8fCB2ZXJ0ZXguaWR4ID4gZG1hLT5idWZfY291bnQpIHJldHVybiAtRUlOVkFMOworCWlmICh2ZXJ0ZXguaWR4IDwgMCB8fCB2ZXJ0ZXguaWR4ID4gZG1hLT5idWZfY291bnQpCisJCXJldHVybiAtRUlOVkFMOwogCi0JaTgzMF9kbWFfZGlzcGF0Y2hfdmVydGV4KCBkZXYsIAotCQkJCSAgZG1hLT5idWZsaXN0WyB2ZXJ0ZXguaWR4IF0sIAotCQkJCSAgdmVydGV4LmRpc2NhcmQsIHZlcnRleC51c2VkICk7CisJaTgzMF9kbWFfZGlzcGF0Y2hfdmVydGV4KGRldiwKKwkJCQkgZG1hLT5idWZsaXN0W3ZlcnRleC5pZHhdLAorCQkJCSB2ZXJ0ZXguZGlzY2FyZCwgdmVydGV4LnVzZWQpOwogCi0Jc2FyZWFfcHJpdi0+bGFzdF9lbnF1ZXVlID0gZGV2X3ByaXYtPmNvdW50ZXItMTsKLSAgIAlzYXJlYV9wcml2LT5sYXN0X2Rpc3BhdGNoID0gKGludCkgaHdfc3RhdHVzWzVdOwotICAgCisJc2FyZWFfcHJpdi0+bGFzdF9lbnF1ZXVlID0gZGV2X3ByaXYtPmNvdW50ZXIgLSAxOworCXNhcmVhX3ByaXYtPmxhc3RfZGlzcGF0Y2ggPSAoaW50KWh3X3N0YXR1c1s1XTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xMzQwLDkgKzEzMjMsMTAgQEAKIAlkcm1fZGV2aWNlX3QgKmRldiA9IHByaXYtPmhlYWQtPmRldjsKIAlkcm1faTgzMF9jbGVhcl90IGNsZWFyOwogCi0gICAJaWYgKGNvcHlfZnJvbV91c2VyKCZjbGVhciwgKGRybV9pODMwX2NsZWFyX3QgX191c2VyICopYXJnLCBzaXplb2YoY2xlYXIpKSkKKwlpZiAoY29weV9mcm9tX3VzZXIKKwkgICAgKCZjbGVhciwgKGRybV9pODMwX2NsZWFyX3QgX191c2VyICopIGFyZywgc2l6ZW9mKGNsZWFyKSkpCiAJCXJldHVybiAtRUZBVUxUOwotICAgCisKIAlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxwKTsKIAogCS8qIEdIOiBTb21lb25lJ3MgZG9pbmcgbmFzdHkgdGhpbmdzLi4uICovCkBAIC0xMzUwLDExICsxMzM0LDEwIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWk4MzBfZG1hX2Rpc3BhdGNoX2NsZWFyKCBkZXYsIGNsZWFyLmZsYWdzLCAKLQkJCQkgY2xlYXIuY2xlYXJfY29sb3IsIAotCQkJCSBjbGVhci5jbGVhcl9kZXB0aCwKLQkJCSAgICAgICAgIGNsZWFyLmNsZWFyX2RlcHRobWFzayk7Ci0gICAJcmV0dXJuIDA7CisJaTgzMF9kbWFfZGlzcGF0Y2hfY2xlYXIoZGV2LCBjbGVhci5mbGFncywKKwkJCQljbGVhci5jbGVhcl9jb2xvciwKKwkJCQljbGVhci5jbGVhcl9kZXB0aCwgY2xlYXIuY2xlYXJfZGVwdGhtYXNrKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBpODMwX3N3YXBfYnVmcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKQEAgLTEzNjIsMjAgKzEzNDUsMTggQEAKIHsKIAlkcm1fZmlsZV90ICpwcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCWRybV9kZXZpY2VfdCAqZGV2ID0gcHJpdi0+aGVhZC0+ZGV2OwotICAgCisKIAlEUk1fREVCVUcoImk4MzBfc3dhcF9idWZzXG4iKTsKIAogCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbHApOwogCi0JaTgzMF9kbWFfZGlzcGF0Y2hfc3dhcCggZGV2ICk7Ci0gICAJcmV0dXJuIDA7CisJaTgzMF9kbWFfZGlzcGF0Y2hfc3dhcChkZXYpOworCXJldHVybiAwOwogfQogCi0KLQogLyogTm90IHN1cmUgd2h5IHRoaXMgaXNuJ3Qgc2V0IGFsbCB0aGUgdGltZToKLSAqLyAKLXN0YXRpYyB2b2lkIGk4MzBfZG9faW5pdF9wYWdlZmxpcCggZHJtX2RldmljZV90ICpkZXYgKQorICovCitzdGF0aWMgdm9pZCBpODMwX2RvX2luaXRfcGFnZWZsaXAoZHJtX2RldmljZV90ICogZGV2KQogewogCWRybV9pODMwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCkBAIC0xMzg1LDIwICsxMzY2LDIwIEBACiAJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPnBmX2N1cnJlbnRfcGFnZSA9IGRldl9wcml2LT5jdXJyZW50X3BhZ2U7CiB9CiAKLXN0YXRpYyBpbnQgaTgzMF9kb19jbGVhbnVwX3BhZ2VmbGlwKCBkcm1fZGV2aWNlX3QgKmRldiApCitzdGF0aWMgaW50IGk4MzBfZG9fY2xlYW51cF9wYWdlZmxpcChkcm1fZGV2aWNlX3QgKiBkZXYpCiB7CiAJZHJtX2k4MzBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKIAlEUk1fREVCVUcoIiVzXG4iLCBfX0ZVTkNUSU9OX18pOwogCWlmIChkZXZfcHJpdi0+Y3VycmVudF9wYWdlICE9IDApCi0JCWk4MzBfZG1hX2Rpc3BhdGNoX2ZsaXAoIGRldiApOworCQlpODMwX2RtYV9kaXNwYXRjaF9mbGlwKGRldik7CiAKIAlkZXZfcHJpdi0+cGFnZV9mbGlwcGluZyA9IDA7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgaTgzMF9mbGlwX2J1ZnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCi0JCQkgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKKwkJCSAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJZHJtX2ZpbGVfdCAqcHJpdiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAlkcm1fZGV2aWNlX3QgKmRldiA9IHByaXYtPmhlYWQtPmRldjsKQEAgLTE0MDgsNDUgKzEzODksNDUgQEAKIAogCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbHApOwogCi0JaWYgKCFkZXZfcHJpdi0+cGFnZV9mbGlwcGluZykgCi0JCWk4MzBfZG9faW5pdF9wYWdlZmxpcCggZGV2ICk7CisJaWYgKCFkZXZfcHJpdi0+cGFnZV9mbGlwcGluZykKKwkJaTgzMF9kb19pbml0X3BhZ2VmbGlwKGRldik7CiAKLQlpODMwX2RtYV9kaXNwYXRjaF9mbGlwKCBkZXYgKTsKLSAgIAlyZXR1cm4gMDsKKwlpODMwX2RtYV9kaXNwYXRjaF9mbGlwKGRldik7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgaTgzMF9nZXRhZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsCi0JCQl1bnNpZ25lZCBsb25nIGFyZykKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgYXJnKQogewotICAgCWRybV9maWxlX3QJICAqcHJpdgkgICAgPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0JZHJtX2RldmljZV90CSAgKmRldgkgICAgPSBwcml2LT5oZWFkLT5kZXY7Ci0gICAJZHJtX2k4MzBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1faTgzMF9wcml2YXRlX3QgKilkZXYtPmRldl9wcml2YXRlOwotICAgICAgCXUzMiAqaHdfc3RhdHVzID0gZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlOwotICAgCWRybV9pODMwX3NhcmVhX3QgKnNhcmVhX3ByaXYgPSAoZHJtX2k4MzBfc2FyZWFfdCAqKSAKLSAgICAgCQkJCQlkZXZfcHJpdi0+c2FyZWFfcHJpdjsgCisJZHJtX2ZpbGVfdCAqcHJpdiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlkcm1fZGV2aWNlX3QgKmRldiA9IHByaXYtPmhlYWQtPmRldjsKKwlkcm1faTgzMF9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pODMwX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOworCXUzMiAqaHdfc3RhdHVzID0gZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlOworCWRybV9pODMwX3NhcmVhX3QgKnNhcmVhX3ByaXYgPSAoZHJtX2k4MzBfc2FyZWFfdCAqKQorCSAgICBkZXZfcHJpdi0+c2FyZWFfcHJpdjsKIAotICAgICAgCXNhcmVhX3ByaXYtPmxhc3RfZGlzcGF0Y2ggPSAoaW50KSBod19zdGF0dXNbNV07CisJc2FyZWFfcHJpdi0+bGFzdF9kaXNwYXRjaCA9IChpbnQpaHdfc3RhdHVzWzVdOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGk4MzBfZ2V0YnVmKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLAotCQkJdW5zaWduZWQgbG9uZyBhcmcpCisJCSAgICAgICB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlkcm1fZmlsZV90CSAgKnByaXYJICAgID0gZmlscC0+cHJpdmF0ZV9kYXRhOwotCWRybV9kZXZpY2VfdAkgICpkZXYJICAgID0gcHJpdi0+aGVhZC0+ZGV2OwotCWludAkJICByZXRjb2RlICAgPSAwOwotCWRybV9pODMwX2RtYV90CSAgZDsKLSAgIAlkcm1faTgzMF9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pODMwX3ByaXZhdGVfdCAqKWRldi0+ZGV2X3ByaXZhdGU7Ci0gICAJdTMyICpod19zdGF0dXMgPSBkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2U7Ci0gICAJZHJtX2k4MzBfc2FyZWFfdCAqc2FyZWFfcHJpdiA9IChkcm1faTgzMF9zYXJlYV90ICopIAotICAgICAJCQkJCWRldl9wcml2LT5zYXJlYV9wcml2OyAKKwlkcm1fZmlsZV90ICpwcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCWRybV9kZXZpY2VfdCAqZGV2ID0gcHJpdi0+aGVhZC0+ZGV2OworCWludCByZXRjb2RlID0gMDsKKwlkcm1faTgzMF9kbWFfdCBkOworCWRybV9pODMwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX2k4MzBfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisJdTMyICpod19zdGF0dXMgPSBkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2U7CisJZHJtX2k4MzBfc2FyZWFfdCAqc2FyZWFfcHJpdiA9IChkcm1faTgzMF9zYXJlYV90ICopCisJICAgIGRldl9wcml2LT5zYXJlYV9wcml2OwogCiAJRFJNX0RFQlVHKCJnZXRidWZcbiIpOwotICAgCWlmIChjb3B5X2Zyb21fdXNlcigmZCwgKGRybV9pODMwX2RtYV90IF9fdXNlciAqKWFyZywgc2l6ZW9mKGQpKSkKKwlpZiAoY29weV9mcm9tX3VzZXIoJmQsIChkcm1faTgzMF9kbWFfdCBfX3VzZXIgKikgYXJnLCBzaXplb2YoZCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKLSAgIAorCiAJTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlscCk7Ci0JCisKIAlkLmdyYW50ZWQgPSAwOwogCiAJcmV0Y29kZSA9IGk4MzBfZG1hX2dldF9idWZmZXIoZGV2LCAmZCwgZmlscCk7CkBAIC0xNDU0LDQ2ICsxNDM1LDQ1IEBACiAJRFJNX0RFQlVHKCJpODMwX2RtYTogJWQgcmV0dXJuaW5nICVkLCBncmFudGVkID0gJWRcbiIsCiAJCSAgY3VycmVudC0+cGlkLCByZXRjb2RlLCBkLmdyYW50ZWQpOwogCi0JaWYgKGNvcHlfdG9fdXNlcigoZHJtX2RtYV90IF9fdXNlciAqKWFyZywgJmQsIHNpemVvZihkKSkpCisJaWYgKGNvcHlfdG9fdXNlcigoZHJtX2RtYV90IF9fdXNlciAqKSBhcmcsICZkLCBzaXplb2YoZCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKLSAgIAlzYXJlYV9wcml2LT5sYXN0X2Rpc3BhdGNoID0gKGludCkgaHdfc3RhdHVzWzVdOworCXNhcmVhX3ByaXYtPmxhc3RfZGlzcGF0Y2ggPSAoaW50KWh3X3N0YXR1c1s1XTsKIAogCXJldHVybiByZXRjb2RlOwogfQogCiBzdGF0aWMgaW50IGk4MzBfY29weWJ1ZihzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJIHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKKwkJCXN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAkvKiBOZXZlciBjb3B5IC0gMi40LnggZG9lc24ndCBuZWVkIGl0ICovCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgaTgzMF9kb2NvcHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsCi0JCQl1bnNpZ25lZCBsb25nIGFyZykKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXJldHVybiAwOwogfQogCi0KLQotc3RhdGljIGludCBpODMwX2dldHBhcmFtKCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwgCi0JCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyApCitzdGF0aWMgaW50IGk4MzBfZ2V0cGFyYW0oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCisJCQkgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0JZHJtX2ZpbGVfdAkgICpwcml2CSAgICA9IGZpbHAtPnByaXZhdGVfZGF0YTsKLQlkcm1fZGV2aWNlX3QJICAqZGV2CSAgICA9IHByaXYtPmhlYWQtPmRldjsKKwlkcm1fZmlsZV90ICpwcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCWRybV9kZXZpY2VfdCAqZGV2ID0gcHJpdi0+aGVhZC0+ZGV2OwogCWRybV9pODMwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWRybV9pODMwX2dldHBhcmFtX3QgcGFyYW07CiAJaW50IHZhbHVlOwogCi0JaWYgKCAhZGV2X3ByaXYgKSB7Ci0JCURSTV9FUlJPUiggIiVzIGNhbGxlZCB3aXRoIG5vIGluaXRpYWxpemF0aW9uXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwlpZiAoIWRldl9wcml2KSB7CisJCURSTV9FUlJPUigiJXMgY2FsbGVkIHdpdGggbm8gaW5pdGlhbGl6YXRpb25cbiIsIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmIChjb3B5X2Zyb21fdXNlcigmcGFyYW0sIChkcm1faTgzMF9nZXRwYXJhbV90IF9fdXNlciAqKWFyZywgc2l6ZW9mKHBhcmFtKSApKQorCWlmIChjb3B5X2Zyb21fdXNlcgorCSAgICAoJnBhcmFtLCAoZHJtX2k4MzBfZ2V0cGFyYW1fdCBfX3VzZXIgKikgYXJnLCBzaXplb2YocGFyYW0pKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlzd2l0Y2goIHBhcmFtLnBhcmFtICkgeworCXN3aXRjaCAocGFyYW0ucGFyYW0pIHsKIAljYXNlIEk4MzBfUEFSQU1fSVJRX0FDVElWRToKIAkJdmFsdWUgPSBkZXYtPmlycV9lbmFibGVkOwogCQlicmVhazsKQEAgLTE1MDEsMzIgKzE0ODEsMzIgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKCBjb3B5X3RvX3VzZXIoIHBhcmFtLnZhbHVlLCAmdmFsdWUsIHNpemVvZihpbnQpICkgKSB7Ci0JCURSTV9FUlJPUiggImNvcHlfdG9fdXNlclxuIiApOworCWlmIChjb3B5X3RvX3VzZXIocGFyYW0udmFsdWUsICZ2YWx1ZSwgc2l6ZW9mKGludCkpKSB7CisJCURSTV9FUlJPUigiY29weV90b191c2VyXG4iKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQotCQorCiAJcmV0dXJuIDA7CiB9CiAKLQotc3RhdGljIGludCBpODMwX3NldHBhcmFtKCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnICkKK3N0YXRpYyBpbnQgaTgzMF9zZXRwYXJhbShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJCSB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlkcm1fZmlsZV90CSAgKnByaXYJICAgID0gZmlscC0+cHJpdmF0ZV9kYXRhOwotCWRybV9kZXZpY2VfdAkgICpkZXYJICAgID0gcHJpdi0+aGVhZC0+ZGV2OworCWRybV9maWxlX3QgKnByaXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJZHJtX2RldmljZV90ICpkZXYgPSBwcml2LT5oZWFkLT5kZXY7CiAJZHJtX2k4MzBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJZHJtX2k4MzBfc2V0cGFyYW1fdCBwYXJhbTsKIAotCWlmICggIWRldl9wcml2ICkgewotCQlEUk1fRVJST1IoICIlcyBjYWxsZWQgd2l0aCBubyBpbml0aWFsaXphdGlvblxuIiwgX19GVU5DVElPTl9fICk7CisJaWYgKCFkZXZfcHJpdikgeworCQlEUk1fRVJST1IoIiVzIGNhbGxlZCB3aXRoIG5vIGluaXRpYWxpemF0aW9uXG4iLCBfX0ZVTkNUSU9OX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAoY29weV9mcm9tX3VzZXIoJnBhcmFtLCAoZHJtX2k4MzBfc2V0cGFyYW1fdCBfX3VzZXIgKilhcmcsIHNpemVvZihwYXJhbSkgKSkKKwlpZiAoY29weV9mcm9tX3VzZXIKKwkgICAgKCZwYXJhbSwgKGRybV9pODMwX3NldHBhcmFtX3QgX191c2VyICopIGFyZywgc2l6ZW9mKHBhcmFtKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0Jc3dpdGNoKCBwYXJhbS5wYXJhbSApIHsKKwlzd2l0Y2ggKHBhcmFtLnBhcmFtKSB7CiAJY2FzZSBJODMwX1NFVFBBUkFNX1VTRV9NSV9CQVRDSEJVRkZFUl9TVEFSVDoKIAkJZGV2X3ByaXYtPnVzZV9taV9iYXRjaGJ1ZmZlcl9zdGFydCA9IHBhcmFtLnZhbHVlOwogCQlicmVhazsKQEAgLTE1MzcsMTMgKzE1MTcsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotCi12b2lkIGk4MzBfZHJpdmVyX3ByZXRha2Vkb3duKGRybV9kZXZpY2VfdCAqZGV2KQordm9pZCBpODMwX2RyaXZlcl9wcmV0YWtlZG93bihkcm1fZGV2aWNlX3QgKiBkZXYpCiB7Ci0JaTgzMF9kbWFfY2xlYW51cCggZGV2ICk7CisJaTgzMF9kbWFfY2xlYW51cChkZXYpOwogfQogCi12b2lkIGk4MzBfZHJpdmVyX3ByZXJlbGVhc2UoZHJtX2RldmljZV90ICpkZXYsIERSTUZJTEUgZmlscCkKK3ZvaWQgaTgzMF9kcml2ZXJfcHJlcmVsZWFzZShkcm1fZGV2aWNlX3QgKiBkZXYsIERSTUZJTEUgZmlscCkKIHsKIAlpZiAoZGV2LT5kZXZfcHJpdmF0ZSkgewogCQlkcm1faTgzMF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKQEAgLTE1NTMsMzIgKzE1MzIsNDUgQEAKIAl9CiB9CiAKLXZvaWQgaTgzMF9kcml2ZXJfcmVsZWFzZShkcm1fZGV2aWNlX3QgKmRldiwgc3RydWN0IGZpbGUgKmZpbHApCit2b2lkIGk4MzBfZHJpdmVyX3JlbGVhc2UoZHJtX2RldmljZV90ICogZGV2LCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKIAlpODMwX3JlY2xhaW1fYnVmZmVycyhkZXYsIGZpbHApOwogfQogCi1pbnQgaTgzMF9kcml2ZXJfZG1hX3F1aWVzY2VudChkcm1fZGV2aWNlX3QgKmRldikKK2ludCBpODMwX2RyaXZlcl9kbWFfcXVpZXNjZW50KGRybV9kZXZpY2VfdCAqIGRldikKIHsKLQlpODMwX2RtYV9xdWllc2NlbnQoIGRldiApOworCWk4MzBfZG1hX3F1aWVzY2VudChkZXYpOwogCXJldHVybiAwOwogfQogCiBkcm1faW9jdGxfZGVzY190IGk4MzBfaW9jdGxzW10gPSB7Ci0JW0RSTV9JT0NUTF9OUihEUk1fSTgzMF9JTklUKV0gICAgID0geyBpODMwX2RtYV9pbml0LCAgICAxLCAxIH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fSTgzMF9WRVJURVgpXSAgID0geyBpODMwX2RtYV92ZXJ0ZXgsICAxLCAwIH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fSTgzMF9DTEVBUildICAgID0geyBpODMwX2NsZWFyX2J1ZnMsICAxLCAwIH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fSTgzMF9GTFVTSCldICAgID0geyBpODMwX2ZsdXNoX2lvY3RsLCAxLCAwIH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fSTgzMF9HRVRBR0UpXSAgID0geyBpODMwX2dldGFnZSwgICAgICAxLCAwIH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fSTgzMF9HRVRCVUYpXSAgID0geyBpODMwX2dldGJ1ZiwgICAgICAxLCAwIH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fSTgzMF9TV0FQKV0gICAgID0geyBpODMwX3N3YXBfYnVmcywgICAxLCAwIH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fSTgzMF9DT1BZKV0gICAgID0geyBpODMwX2NvcHlidWYsICAgICAxLCAwIH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fSTgzMF9ET0NPUFkpXSAgID0geyBpODMwX2RvY29weSwgICAgICAxLCAwIH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fSTgzMF9GTElQKV0gICAgID0geyBpODMwX2ZsaXBfYnVmcywgICAxLCAwIH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fSTgzMF9JUlFfRU1JVCldID0geyBpODMwX2lycV9lbWl0LCAgICAxLCAwIH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fSTgzMF9JUlFfV0FJVCldID0geyBpODMwX2lycV93YWl0LCAgICAxLCAwIH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fSTgzMF9HRVRQQVJBTSldID0geyBpODMwX2dldHBhcmFtLCAgICAxLCAwIH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fSTgzMF9TRVRQQVJBTSldID0geyBpODMwX3NldHBhcmFtLCAgICAxLCAwIH0gCisJW0RSTV9JT0NUTF9OUihEUk1fSTgzMF9JTklUKV0gPSB7aTgzMF9kbWFfaW5pdCwgMSwgMX0KKwksCisJW0RSTV9JT0NUTF9OUihEUk1fSTgzMF9WRVJURVgpXSA9IHtpODMwX2RtYV92ZXJ0ZXgsIDEsIDB9CisJLAorCVtEUk1fSU9DVExfTlIoRFJNX0k4MzBfQ0xFQVIpXSA9IHtpODMwX2NsZWFyX2J1ZnMsIDEsIDB9CisJLAorCVtEUk1fSU9DVExfTlIoRFJNX0k4MzBfRkxVU0gpXSA9IHtpODMwX2ZsdXNoX2lvY3RsLCAxLCAwfQorCSwKKwlbRFJNX0lPQ1RMX05SKERSTV9JODMwX0dFVEFHRSldID0ge2k4MzBfZ2V0YWdlLCAxLCAwfQorCSwKKwlbRFJNX0lPQ1RMX05SKERSTV9JODMwX0dFVEJVRildID0ge2k4MzBfZ2V0YnVmLCAxLCAwfQorCSwKKwlbRFJNX0lPQ1RMX05SKERSTV9JODMwX1NXQVApXSA9IHtpODMwX3N3YXBfYnVmcywgMSwgMH0KKwksCisJW0RSTV9JT0NUTF9OUihEUk1fSTgzMF9DT1BZKV0gPSB7aTgzMF9jb3B5YnVmLCAxLCAwfQorCSwKKwlbRFJNX0lPQ1RMX05SKERSTV9JODMwX0RPQ09QWSldID0ge2k4MzBfZG9jb3B5LCAxLCAwfQorCSwKKwlbRFJNX0lPQ1RMX05SKERSTV9JODMwX0ZMSVApXSA9IHtpODMwX2ZsaXBfYnVmcywgMSwgMH0KKwksCisJW0RSTV9JT0NUTF9OUihEUk1fSTgzMF9JUlFfRU1JVCldID0ge2k4MzBfaXJxX2VtaXQsIDEsIDB9CisJLAorCVtEUk1fSU9DVExfTlIoRFJNX0k4MzBfSVJRX1dBSVQpXSA9IHtpODMwX2lycV93YWl0LCAxLCAwfQorCSwKKwlbRFJNX0lPQ1RMX05SKERSTV9JODMwX0dFVFBBUkFNKV0gPSB7aTgzMF9nZXRwYXJhbSwgMSwgMH0KKwksCisJW0RSTV9JT0NUTF9OUihEUk1fSTgzMF9TRVRQQVJBTSldID0ge2k4MzBfc2V0cGFyYW0sIDEsIDB9CiB9OwogCiBpbnQgaTgzMF9tYXhfaW9jdGwgPSBEUk1fQVJSQVlfU0laRShpODMwX2lvY3Rscyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2k4MzBfZHJtLmggYi9kcml2ZXJzL2NoYXIvZHJtL2k4MzBfZHJtLmgKaW5kZXggMDMzODJjMC4uNjZkZDc1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9pODMwX2RybS5oCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vaTgzMF9kcm0uaApAQCAtMzMsMTQgKzMzLDE0IEBACiAjZGVmaW5lIEk4MzBfVVBMT0FEX0NUWAkJCTB4MQogI2RlZmluZSBJODMwX1VQTE9BRF9CVUZGRVJTCQkweDIKICNkZWZpbmUgSTgzMF9VUExPQURfQ0xJUFJFQ1RTCQkweDQKLSNkZWZpbmUgSTgzMF9VUExPQURfVEVYMF9JTUFHRQkJMHgxMDAgLyogaGFuZGxlZCBjbGllbnRzaWRlICovCi0jZGVmaW5lIEk4MzBfVVBMT0FEX1RFWDBfQ1VCRQkJMHgyMDAgLyogaGFuZGxlZCBjbGllbnRzaWRlICovCi0jZGVmaW5lIEk4MzBfVVBMT0FEX1RFWDFfSU1BR0UJCTB4NDAwIC8qIGhhbmRsZWQgY2xpZW50c2lkZSAqLwotI2RlZmluZSBJODMwX1VQTE9BRF9URVgxX0NVQkUJCTB4ODAwIC8qIGhhbmRsZWQgY2xpZW50c2lkZSAqLwotI2RlZmluZSBJODMwX1VQTE9BRF9URVgyX0lNQUdFCQkweDEwMDAgLyogaGFuZGxlZCBjbGllbnRzaWRlICovCi0jZGVmaW5lIEk4MzBfVVBMT0FEX1RFWDJfQ1VCRQkJMHgyMDAwIC8qIGhhbmRsZWQgY2xpZW50c2lkZSAqLwotI2RlZmluZSBJODMwX1VQTE9BRF9URVgzX0lNQUdFCQkweDQwMDAgLyogaGFuZGxlZCBjbGllbnRzaWRlICovCi0jZGVmaW5lIEk4MzBfVVBMT0FEX1RFWDNfQ1VCRQkJMHg4MDAwIC8qIGhhbmRsZWQgY2xpZW50c2lkZSAqLworI2RlZmluZSBJODMwX1VQTE9BRF9URVgwX0lNQUdFCQkweDEwMAkvKiBoYW5kbGVkIGNsaWVudHNpZGUgKi8KKyNkZWZpbmUgSTgzMF9VUExPQURfVEVYMF9DVUJFCQkweDIwMAkvKiBoYW5kbGVkIGNsaWVudHNpZGUgKi8KKyNkZWZpbmUgSTgzMF9VUExPQURfVEVYMV9JTUFHRQkJMHg0MDAJLyogaGFuZGxlZCBjbGllbnRzaWRlICovCisjZGVmaW5lIEk4MzBfVVBMT0FEX1RFWDFfQ1VCRQkJMHg4MDAJLyogaGFuZGxlZCBjbGllbnRzaWRlICovCisjZGVmaW5lIEk4MzBfVVBMT0FEX1RFWDJfSU1BR0UJCTB4MTAwMAkvKiBoYW5kbGVkIGNsaWVudHNpZGUgKi8KKyNkZWZpbmUgSTgzMF9VUExPQURfVEVYMl9DVUJFCQkweDIwMDAJLyogaGFuZGxlZCBjbGllbnRzaWRlICovCisjZGVmaW5lIEk4MzBfVVBMT0FEX1RFWDNfSU1BR0UJCTB4NDAwMAkvKiBoYW5kbGVkIGNsaWVudHNpZGUgKi8KKyNkZWZpbmUgSTgzMF9VUExPQURfVEVYM19DVUJFCQkweDgwMDAJLyogaGFuZGxlZCBjbGllbnRzaWRlICovCiAjZGVmaW5lIEk4MzBfVVBMT0FEX1RFWF9OX0lNQUdFKG4pCSgweDEwMCA8PCAobiAqIDIpKQogI2RlZmluZSBJODMwX1VQTE9BRF9URVhfTl9DVUJFKG4pCSgweDIwMCA8PCAobiAqIDIpKQogI2RlZmluZSBJODMwX1VQTE9BRF9URVhJTUFHRV9NQVNLCTB4ZmYwMApAQCAtNjUsNyArNjUsNyBAQAogICogb3IgaW4gYSBwaWVjZXdpc2UgZmFzaGlvbiBhcyByZXF1aXJlZC4KICAqLwogCi0vKiBEZXN0YnVmZmVyIHN0YXRlIAorLyogRGVzdGJ1ZmZlciBzdGF0ZQogICogICAgLSBiYWNrYnVmZmVyIGxpbmVhciBvZmZzZXQgYW5kIHBpdGNoIC0tIGludmFyaWVudCBpbiB0aGUgY3VycmVudCBkcmkKICAqICAgIC0gemJ1ZmZlciBsaW5lYXIgb2Zmc2V0IGFuZCBwaXRjaCAtLSBhbHNvIGludmFyaWVudAogICogICAgLSBkcmF3aW5nIG9yaWdpbiBpbiBiYWNrIGFuZCBkZXB0aCBidWZmZXJzLgpAQCAtMTAzLDcgKzEwMyw3IEBACiAjZGVmaW5lIEk4MzBfQ1RYUkVHX0FBCQkJOQogI2RlZmluZSBJODMwX0NUWFJFR19GT0dDT0xPUgkJMTAKICNkZWZpbmUgSTgzMF9DVFhSRUdfQkxFTkRDT0xSMAkJMTEKLSNkZWZpbmUgSTgzMF9DVFhSRUdfQkxFTkRDT0xSCQkxMiAvKiBEd29yZCAxIG9mIDIgZHdvcmQgY29tbWFuZCAqLworI2RlZmluZSBJODMwX0NUWFJFR19CTEVORENPTFIJCTEyCS8qIER3b3JkIDEgb2YgMiBkd29yZCBjb21tYW5kICovCiAjZGVmaW5lIEk4MzBfQ1RYUkVHX1ZGCQkJMTMKICNkZWZpbmUgSTgzMF9DVFhSRUdfVkYyCQkJMTQKICNkZWZpbmUgSTgzMF9DVFhSRUdfTUNTQjAJCTE1CkBAIC0xMTEsMTIgKzExMSwxMSBAQAogI2RlZmluZSBJODMwX0NUWF9TRVRVUF9TSVpFCQkxNwogCiAvKiAxLjM6IFN0aXBwbGUgc3RhdGUKLSAqLyAKKyAqLwogI2RlZmluZSBJODMwX1NUUFJFR19TVDAgMAogI2RlZmluZSBJODMwX1NUUFJFR19TVDEgMQogI2RlZmluZSBJODMwX1NUUF9TRVRVUF9TSVpFIDIKIAotCiAvKiBUZXh0dXJlIHN0YXRlIChwZXIgdGV4IHVuaXQpCiAgKi8KIApAQCAtMTMyLDIzICsxMzEsMjMgQEAKICNkZWZpbmUgSTgzMF9URVhSRUdfTUNTCTkJLyogR0ZYX09QX01BUF9DT09SRF9TRVRTICovCiAjZGVmaW5lIEk4MzBfVEVYX1NFVFVQX1NJWkUgMTAKIAotI2RlZmluZSBJODMwX1RFWFJFR19UTTBMSSAgICAgIDAgLyogbG9hZCBpbW1lZGlhdGUgMiB0ZXh0dXJlIG1hcCBuICovCisjZGVmaW5lIEk4MzBfVEVYUkVHX1RNMExJICAgICAgMAkvKiBsb2FkIGltbWVkaWF0ZSAyIHRleHR1cmUgbWFwIG4gKi8KICNkZWZpbmUgSTgzMF9URVhSRUdfVE0wUzAgICAgICAxCiAjZGVmaW5lIEk4MzBfVEVYUkVHX1RNMFMxICAgICAgMgogI2RlZmluZSBJODMwX1RFWFJFR19UTTBTMiAgICAgIDMKICNkZWZpbmUgSTgzMF9URVhSRUdfVE0wUzMgICAgICA0CiAjZGVmaW5lIEk4MzBfVEVYUkVHX1RNMFM0ICAgICAgNQotI2RlZmluZSBJODMwX1RFWFJFR19OT1AwICAgICAgIDYgICAgICAgLyogbm9vcCAqLwotI2RlZmluZSBJODMwX1RFWFJFR19OT1AxICAgICAgIDcgICAgICAgLyogbm9vcCAqLwotI2RlZmluZSBJODMwX1RFWFJFR19OT1AyICAgICAgIDggICAgICAgLyogbm9vcCAqLwotI2RlZmluZSBfX0k4MzBfVEVYUkVHX01DUyAgICAgIDkgICAgICAgLyogR0ZYX09QX01BUF9DT09SRF9TRVRTIC0tIHNoYXJlZCAqLworI2RlZmluZSBJODMwX1RFWFJFR19OT1AwICAgICAgIDYJLyogbm9vcCAqLworI2RlZmluZSBJODMwX1RFWFJFR19OT1AxICAgICAgIDcJLyogbm9vcCAqLworI2RlZmluZSBJODMwX1RFWFJFR19OT1AyICAgICAgIDgJLyogbm9vcCAqLworI2RlZmluZSBfX0k4MzBfVEVYUkVHX01DUyAgICAgIDkJLyogR0ZYX09QX01BUF9DT09SRF9TRVRTIC0tIHNoYXJlZCAqLwogI2RlZmluZSBfX0k4MzBfVEVYX1NFVFVQX1NJWkUgICAxMAogCiAjZGVmaW5lIEk4MzBfRlJPTlQgICAweDEKICNkZWZpbmUgSTgzMF9CQUNLICAgIDB4MgogI2RlZmluZSBJODMwX0RFUFRIICAgMHg0CiAKLSNlbmRpZiAvKiBfSTgzMF9ERUZJTkVTXyAqLworI2VuZGlmCQkJCS8qIF9JODMwX0RFRklORVNfICovCiAKIHR5cGVkZWYgc3RydWN0IF9kcm1faTgzMF9pbml0IHsKIAllbnVtIHsKQEAgLTE3NywxOSArMTc2LDE5IEBACiAgKiBzdHJ1Y3R1cmUgYXMgd2VsbCAqLwogCiB0eXBlZGVmIHN0cnVjdCBfZHJtX2k4MzBfdGV4X3JlZ2lvbiB7Ci0JdW5zaWduZWQgY2hhciBuZXh0LCBwcmV2OyAvKiBpbmRpY2VzIHRvIGZvcm0gYSBjaXJjdWxhciBMUlUgICovCisJdW5zaWduZWQgY2hhciBuZXh0LCBwcmV2OwkvKiBpbmRpY2VzIHRvIGZvcm0gYSBjaXJjdWxhciBMUlUgICovCiAJdW5zaWduZWQgY2hhciBpbl91c2U7CS8qIG93bmVkIGJ5IGEgY2xpZW50LCBvciBmcmVlPyAqLwogCWludCBhZ2U7CQkvKiB0cmFja2VkIGJ5IGNsaWVudHMgdG8gdXBkYXRlIGxvY2FsIExSVSdzICovCiB9IGRybV9pODMwX3RleF9yZWdpb25fdDsKIAogdHlwZWRlZiBzdHJ1Y3QgX2RybV9pODMwX3NhcmVhIHsKIAl1bnNpZ25lZCBpbnQgQ29udGV4dFN0YXRlW0k4MzBfQ1RYX1NFVFVQX1NJWkVdOwotICAgCXVuc2lnbmVkIGludCBCdWZmZXJTdGF0ZVtJODMwX0RFU1RfU0VUVVBfU0laRV07CisJdW5zaWduZWQgaW50IEJ1ZmZlclN0YXRlW0k4MzBfREVTVF9TRVRVUF9TSVpFXTsKIAl1bnNpZ25lZCBpbnQgVGV4U3RhdGVbSTgzMF9URVhUVVJFX0NPVU5UXVtJODMwX1RFWF9TRVRVUF9TSVpFXTsKIAl1bnNpZ25lZCBpbnQgVGV4QmxlbmRTdGF0ZVtJODMwX1RFWEJMRU5EX0NPVU5UXVtJODMwX1RFWEJMRU5EX1NJWkVdOwogCXVuc2lnbmVkIGludCBUZXhCbGVuZFN0YXRlV29yZHNVc2VkW0k4MzBfVEVYQkxFTkRfQ09VTlRdOwogCXVuc2lnbmVkIGludCBQYWxldHRlWzJdWzI1Nl07Ci0gICAJdW5zaWduZWQgaW50IGRpcnR5OworCXVuc2lnbmVkIGludCBkaXJ0eTsKIAogCXVuc2lnbmVkIGludCBuYm94OwogCWRybV9jbGlwX3JlY3RfdCBib3hlc1tJODMwX05SX1NBUkVBX0NMSVBSRUNUU107CkBAIC0yMDcsMjYgKzIwNiwyNiBAQAogCSAqIHRleHR1cmUgc3BhY2UsIGFuZCBjYW4gbWFrZSBpbmZvcm1lZCBkZWNpc2lvbnMgYXMgdG8gd2hpY2gKIAkgKiBhcmVhcyB0byBraWNrIG91dC4gIFRoZXJlIGlzIG5vIG5lZWQgdG8gY2hvb3NlIHdoZXRoZXIgdG8KIAkgKiBraWNrIG91dCB5b3VyIG93biB0ZXh0dXJlIG9yIHNvbWVvbmUgZWxzZSdzIC0gc2ltcGx5IGVqZWN0Ci0JICogdGhlbSBhbGwgaW4gTFJVIG9yZGVyLiAgCisJICogdGhlbSBhbGwgaW4gTFJVIG9yZGVyLgogCSAqLwogCi0JZHJtX2k4MzBfdGV4X3JlZ2lvbl90IHRleExpc3RbSTgzMF9OUl9URVhfUkVHSU9OUysxXTsgCi0JCQkJLyogTGFzdCBlbHQgaXMgc2VudGluYWwgKi8KLSAgICAgICAgaW50IHRleEFnZTsJCS8qIGxhc3QgdGltZSB0ZXh0dXJlIHdhcyB1cGxvYWRlZCAqLwotICAgICAgICBpbnQgbGFzdF9lbnF1ZXVlOwkvKiBsYXN0IHRpbWUgYSBidWZmZXIgd2FzIGVucXVldWVkICovCisJZHJtX2k4MzBfdGV4X3JlZ2lvbl90IHRleExpc3RbSTgzMF9OUl9URVhfUkVHSU9OUyArIDFdOworCS8qIExhc3QgZWx0IGlzIHNlbnRpbmFsICovCisJaW50IHRleEFnZTsJCS8qIGxhc3QgdGltZSB0ZXh0dXJlIHdhcyB1cGxvYWRlZCAqLworCWludCBsYXN0X2VucXVldWU7CS8qIGxhc3QgdGltZSBhIGJ1ZmZlciB3YXMgZW5xdWV1ZWQgKi8KIAlpbnQgbGFzdF9kaXNwYXRjaDsJLyogYWdlIG9mIHRoZSBtb3N0IHJlY2VudGx5IGRpc3BhdGNoZWQgYnVmZmVyICovCi0JaW50IGxhc3RfcXVpZXNjZW50OyAgICAgLyogICovCisJaW50IGxhc3RfcXVpZXNjZW50OwkvKiAgKi8KIAlpbnQgY3R4T3duZXI7CQkvKiBsYXN0IGNvbnRleHQgdG8gdXBsb2FkIHN0YXRlICovCiAKIAlpbnQgdmVydGV4X3ByaW07CiAKLSAgICAgICAgaW50IHBmX2VuYWJsZWQ7ICAgICAgICAgICAgICAgLyogaXMgcGFnZWZsaXBwaW5nIGFsbG93ZWQ/ICovCi0gICAgICAgIGludCBwZl9hY3RpdmU7ICAgICAgICAgICAgICAgCi0gICAgICAgIGludCBwZl9jdXJyZW50X3BhZ2U7CSAgICAvKiB3aGljaCBidWZmZXIgaXMgYmVpbmcgZGlzcGxheWVkPyAqLworCWludCBwZl9lbmFibGVkOwkJLyogaXMgcGFnZWZsaXBwaW5nIGFsbG93ZWQ/ICovCisJaW50IHBmX2FjdGl2ZTsKKwlpbnQgcGZfY3VycmVudF9wYWdlOwkvKiB3aGljaCBidWZmZXIgaXMgYmVpbmcgZGlzcGxheWVkPyAqLwogCi0gICAgICAgIGludCBwZXJmX2JveGVzOyAgICAgICAgICAgICAvKiBwZXJmb3JtYW5jZSBib3hlcyB0byBiZSBkaXNwbGF5ZWQgKi8KLSAgIAotICAgICAgICAvKiBIZXJlJ3MgdGhlIHN0YXRlIGZvciB0ZXh1bml0cyAyLDM6CisJaW50IHBlcmZfYm94ZXM7CQkvKiBwZXJmb3JtYW5jZSBib3hlcyB0byBiZSBkaXNwbGF5ZWQgKi8KKworCS8qIEhlcmUncyB0aGUgc3RhdGUgZm9yIHRleHVuaXRzIDIsMzoKIAkgKi8KIAl1bnNpZ25lZCBpbnQgVGV4U3RhdGUyW0k4MzBfVEVYX1NFVFVQX1NJWkVdOwogCXVuc2lnbmVkIGludCBUZXhCbGVuZFN0YXRlMltJODMwX1RFWEJMRU5EX1NJWkVdOwpAQCAtMjQxLDEyICsyNDAsMTEgQEAKIAogLyogRmxhZ3MgZm9yIHBlcmZfYm94ZXMKICAqLwotI2RlZmluZSBJODMwX0JPWF9SSU5HX0VNUFRZICAgIDB4MSAvKiBwb3B1bGF0ZWQgYnkga2VybmVsICovCi0jZGVmaW5lIEk4MzBfQk9YX0ZMSVAgICAgICAgICAgMHgyIC8qIHBvcHVsYXRlZCBieSBrZXJuZWwgKi8KLSNkZWZpbmUgSTgzMF9CT1hfV0FJVCAgICAgICAgICAweDQgLyogcG9wdWxhdGVkIGJ5IGtlcm5lbCAmIGNsaWVudCAqLwotI2RlZmluZSBJODMwX0JPWF9URVhUVVJFX0xPQUQgIDB4OCAvKiBwb3B1bGF0ZWQgYnkga2VybmVsICovCi0jZGVmaW5lIEk4MzBfQk9YX0xPU1RfQ09OVEVYVCAgMHgxMCAvKiBwb3B1bGF0ZWQgYnkgY2xpZW50ICovCi0KKyNkZWZpbmUgSTgzMF9CT1hfUklOR19FTVBUWSAgICAweDEJLyogcG9wdWxhdGVkIGJ5IGtlcm5lbCAqLworI2RlZmluZSBJODMwX0JPWF9GTElQICAgICAgICAgIDB4MgkvKiBwb3B1bGF0ZWQgYnkga2VybmVsICovCisjZGVmaW5lIEk4MzBfQk9YX1dBSVQgICAgICAgICAgMHg0CS8qIHBvcHVsYXRlZCBieSBrZXJuZWwgJiBjbGllbnQgKi8KKyNkZWZpbmUgSTgzMF9CT1hfVEVYVFVSRV9MT0FEICAweDgJLyogcG9wdWxhdGVkIGJ5IGtlcm5lbCAqLworI2RlZmluZSBJODMwX0JPWF9MT1NUX0NPTlRFWFQgIDB4MTAJLyogcG9wdWxhdGVkIGJ5IGNsaWVudCAqLwogCiAvKiBJODMwIHNwZWNpZmljIGlvY3RscwogICogVGhlIGRldmljZSBzcGVjaWZpYyBpb2N0bCByYW5nZSBpcyAweDQwIHRvIDB4NzkuCkBAIC0yODksMjMgKzI4NywyMSBAQAogCXVuc2lnbmVkIGludCBjbGVhcl9kZXB0aG1hc2s7CiB9IGRybV9pODMwX2NsZWFyX3Q7CiAKLQotCiAvKiBUaGVzZSBtYXkgYmUgcGxhY2Vob2xkZXJzIGlmIHdlIGhhdmUgbW9yZSBjbGlwcmVjdHMgdGhhbgogICogSTgzMF9OUl9TQVJFQV9DTElQUkVDVFMuICBJbiB0aGF0IGNhc2UsIHRoZSBjbGllbnQgc2V0cyBkaXNjYXJkIHRvCiAgKiBmYWxzZSwgaW5kaWNhdGluZyB0aGF0IHRoZSBidWZmZXIgd2lsbCBiZSBkaXNwYXRjaGVkIGFnYWluIHdpdGggYQogICogbmV3IHNldCBvZiBjbGlwcmVjdHMuCiAgKi8KIHR5cGVkZWYgc3RydWN0IF9kcm1faTgzMF92ZXJ0ZXggewotICAgCWludCBpZHg7CQkvKiBidWZmZXIgaW5kZXggKi8KKwlpbnQgaWR4OwkJLyogYnVmZmVyIGluZGV4ICovCiAJaW50IHVzZWQ7CQkvKiBuciBieXRlcyBpbiB1c2UgKi8KIAlpbnQgZGlzY2FyZDsJCS8qIGNsaWVudCBpcyBmaW5pc2hlZCB3aXRoIHRoZSBidWZmZXI/ICovCiB9IGRybV9pODMwX3ZlcnRleF90OwogCiB0eXBlZGVmIHN0cnVjdCBfZHJtX2k4MzBfY29weV90IHsKLSAgIAlpbnQgaWR4OwkJLyogYnVmZmVyIGluZGV4ICovCisJaW50IGlkeDsJCS8qIGJ1ZmZlciBpbmRleCAqLwogCWludCB1c2VkOwkJLyogbnIgYnl0ZXMgaW4gdXNlICovCi0Jdm9pZCBfX3VzZXIgKmFkZHJlc3M7CQkvKiBBZGRyZXNzIHRvIGNvcHkgZnJvbSAqLworCXZvaWQgX191c2VyICphZGRyZXNzOwkvKiBBZGRyZXNzIHRvIGNvcHkgZnJvbSAqLwogfSBkcm1faTgzMF9jb3B5X3Q7CiAKIHR5cGVkZWYgc3RydWN0IGRybV9pODMwX2RtYSB7CkBAIC0zMTUsNyArMzExLDYgQEAKIAlpbnQgZ3JhbnRlZDsKIH0gZHJtX2k4MzBfZG1hX3Q7CiAKLQogLyogMS4zOiBVc2Vyc3BhY2UgY2FuIHJlcXVlc3QgJiB3YWl0IG9uIGlycSdzOgogICovCiB0eXBlZGVmIHN0cnVjdCBkcm1faTgzMF9pcnFfZW1pdCB7CkBAIC0zMjYsNyArMzIxLDYgQEAKIAlpbnQgaXJxX3NlcTsKIH0gZHJtX2k4MzBfaXJxX3dhaXRfdDsKIAotCiAvKiAxLjM6IE5ldyBpb2N0bCB0byBxdWVyeSBrZXJuZWwgcGFyYW1zOgogICovCiAjZGVmaW5lIEk4MzBfUEFSQU1fSVJRX0FDVElWRSAgICAgICAgICAgIDEKQEAgLTMzNiw3ICszMzAsNiBAQAogCWludCBfX3VzZXIgKnZhbHVlOwogfSBkcm1faTgzMF9nZXRwYXJhbV90OwogCi0KIC8qIDEuMzogTmV3IGlvY3RsIHRvIHNldCBrZXJuZWwgcGFyYW1zOgogICovCiAjZGVmaW5lIEk4MzBfU0VUUEFSQU1fVVNFX01JX0JBVENIQlVGRkVSX1NUQVJUICAgICAgICAgICAgMQpAQCAtMzQ2LDUgKzMzOSw0IEBACiAJaW50IHZhbHVlOwogfSBkcm1faTgzMF9zZXRwYXJhbV90OwogCi0KLSNlbmRpZiAvKiBfSTgzMF9EUk1fSF8gKi8KKyNlbmRpZgkJCQkvKiBfSTgzMF9EUk1fSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vaTgzMF9kcnYuYyBiL2RyaXZlcnMvY2hhci9kcm0vaTgzMF9kcnYuYwppbmRleCAwZGE5Y2QxLi42ZGFkMzU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2k4MzBfZHJ2LmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9pODMwX2Rydi5jCkBAIC00MCwzNiArNDAsMzQgQEAKIAogI2luY2x1ZGUgImRybV9wY2lpZHMuaCIKIAotc3RhdGljIGludCBwb3N0aW5pdCggc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmbGFncyApCitzdGF0aWMgaW50IHBvc3Rpbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CiAJZGV2LT5jb3VudGVycyArPSA0OwogCWRldi0+dHlwZXNbNl0gPSBfRFJNX1NUQVRfSVJROwogCWRldi0+dHlwZXNbN10gPSBfRFJNX1NUQVRfUFJJTUFSWTsKIAlkZXYtPnR5cGVzWzhdID0gX0RSTV9TVEFUX1NFQ09OREFSWTsKIAlkZXYtPnR5cGVzWzldID0gX0RSTV9TVEFUX0RNQTsKLQkKLQlEUk1fSU5GTyggIkluaXRpYWxpemVkICVzICVkLiVkLiVkICVzIG9uIG1pbm9yICVkOiAlc1xuIiwKLQkJRFJJVkVSX05BTUUsCi0JCURSSVZFUl9NQUpPUiwKLQkJRFJJVkVSX01JTk9SLAotCQlEUklWRVJfUEFUQ0hMRVZFTCwKLQkJRFJJVkVSX0RBVEUsCi0JCWRldi0+cHJpbWFyeS5taW5vciwKLQkJcGNpX3ByZXR0eV9uYW1lKGRldi0+cGRldikKLQkJKTsKKworCURSTV9JTkZPKCJJbml0aWFsaXplZCAlcyAlZC4lZC4lZCAlcyBvbiBtaW5vciAlZDogJXNcbiIsCisJCSBEUklWRVJfTkFNRSwKKwkJIERSSVZFUl9NQUpPUiwKKwkJIERSSVZFUl9NSU5PUiwKKwkJIERSSVZFUl9QQVRDSExFVkVMLAorCQkgRFJJVkVSX0RBVEUsIGRldi0+cHJpbWFyeS5taW5vciwgcGNpX3ByZXR0eV9uYW1lKGRldi0+cGRldikKKwkgICAgKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2ZXJzaW9uKCBkcm1fdmVyc2lvbl90ICp2ZXJzaW9uICkKK3N0YXRpYyBpbnQgdmVyc2lvbihkcm1fdmVyc2lvbl90ICogdmVyc2lvbikKIHsKIAlpbnQgbGVuOwogCiAJdmVyc2lvbi0+dmVyc2lvbl9tYWpvciA9IERSSVZFUl9NQUpPUjsKIAl2ZXJzaW9uLT52ZXJzaW9uX21pbm9yID0gRFJJVkVSX01JTk9SOwogCXZlcnNpb24tPnZlcnNpb25fcGF0Y2hsZXZlbCA9IERSSVZFUl9QQVRDSExFVkVMOwotCURSTV9DT1BZKCB2ZXJzaW9uLT5uYW1lLCBEUklWRVJfTkFNRSApOwotCURSTV9DT1BZKCB2ZXJzaW9uLT5kYXRlLCBEUklWRVJfREFURSApOwotCURSTV9DT1BZKCB2ZXJzaW9uLT5kZXNjLCBEUklWRVJfREVTQyApOworCURSTV9DT1BZKHZlcnNpb24tPm5hbWUsIERSSVZFUl9OQU1FKTsKKwlEUk1fQ09QWSh2ZXJzaW9uLT5kYXRlLCBEUklWRVJfREFURSk7CisJRFJNX0NPUFkodmVyc2lvbi0+ZGVzYywgRFJJVkVSX0RFU0MpOwogCXJldHVybiAwOwogfQogCkBAIC04MSw3ICs3OSw5IEBACiBleHRlcm4gaW50IGk4MzBfbWF4X2lvY3RsOwogCiBzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIgZHJpdmVyID0gewotCS5kcml2ZXJfZmVhdHVyZXMgPSBEUklWRVJfVVNFX0FHUCB8IERSSVZFUl9SRVFVSVJFX0FHUCB8IERSSVZFUl9VU0VfTVRSUiB8IERSSVZFUl9IQVZFX0RNQSB8IERSSVZFUl9ETUFfUVVFVUUsCisJLmRyaXZlcl9mZWF0dXJlcyA9CisJICAgIERSSVZFUl9VU0VfQUdQIHwgRFJJVkVSX1JFUVVJUkVfQUdQIHwgRFJJVkVSX1VTRV9NVFJSIHwKKwkgICAgRFJJVkVSX0hBVkVfRE1BIHwgRFJJVkVSX0RNQV9RVUVVRSwKICNpZiBVU0VfSVJRUwogCS5kcml2ZXJfZmVhdHVyZXMgfD0gRFJJVkVSX0hBVkVfSVJRIHwgRFJJVkVSX1NIQVJFRF9JUlEsCiAjZW5kaWYKQEAgLTEwNCwxOCArMTA0LDE5IEBACiAJLnZlcnNpb24gPSB2ZXJzaW9uLAogCS5pb2N0bHMgPSBpODMwX2lvY3RscywKIAkuZm9wcyA9IHsKLQkJLm93bmVyID0gVEhJU19NT0RVTEUsCi0JCS5vcGVuID0gZHJtX29wZW4sCi0JCS5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCi0JCS5pb2N0bCA9IGRybV9pb2N0bCwKLQkJLm1tYXAgPSBkcm1fbW1hcCwKLQkJLnBvbGwgPSBkcm1fcG9sbCwKLQkJLmZhc3luYyA9IGRybV9mYXN5bmMsCi0JfSwKKwkJIC5vd25lciA9IFRISVNfTU9EVUxFLAorCQkgLm9wZW4gPSBkcm1fb3BlbiwKKwkJIC5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCisJCSAuaW9jdGwgPSBkcm1faW9jdGwsCisJCSAubW1hcCA9IGRybV9tbWFwLAorCQkgLnBvbGwgPSBkcm1fcG9sbCwKKwkJIC5mYXN5bmMgPSBkcm1fZmFzeW5jLAorCQkgfQorCSwKIAkucGNpX2RyaXZlciA9IHsKLQkJLm5hbWUgICAgICAgICAgPSBEUklWRVJfTkFNRSwKLQkJLmlkX3RhYmxlICAgICAgPSBwY2lpZGxpc3QsCi0JfQorCQkgICAgICAgLm5hbWUgPSBEUklWRVJfTkFNRSwKKwkJICAgICAgIC5pZF90YWJsZSA9IHBjaWlkbGlzdCwKKwkJICAgICAgIH0KIAogfTsKIApAQCAtMTMzLDYgKzEzNCw2IEBACiBtb2R1bGVfaW5pdChpODMwX2luaXQpOwogbW9kdWxlX2V4aXQoaTgzMF9leGl0KTsKIAotTU9EVUxFX0FVVEhPUiggRFJJVkVSX0FVVEhPUiApOwotTU9EVUxFX0RFU0NSSVBUSU9OKCBEUklWRVJfREVTQyApOworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIGFuZCBhZGRpdGlvbmFsIHJpZ2h0cyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9pODMwX2Rydi5oIGIvZHJpdmVycy9jaGFyL2RybS9pODMwX2Rydi5oCmluZGV4IDYzZjk2YTguLjk5ODM1NDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vaTgzMF9kcnYuaAorKysgYi9kcml2ZXJzL2NoYXIvZHJtL2k4MzBfZHJ2LmgKQEAgLTExLDExICsxMSwxMSBAQAogICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCiAgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKICAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKiAKKyAqCiAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CiAgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCiAgKiBTb2Z0d2FyZS4KLSAqIAorICoKICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCiAgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKICAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTApAQCAtNjMsMTQgKzYzLDE0IEBACiAjZGVmaW5lIFVTRV9JUlFTIDAKIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX2k4MzBfYnVmX3ByaXYgewotICAgCXUzMiAqaW5fdXNlOwotICAgCWludCBteV91c2VfaWR4OworCXUzMiAqaW5fdXNlOworCWludCBteV91c2VfaWR4OwogCWludCBjdXJyZW50bHlfbWFwcGVkOwogCXZvaWQgX191c2VyICp2aXJ0dWFsOwogCXZvaWQgKmtlcm5lbF92aXJ0dWFsOwogfSBkcm1faTgzMF9idWZfcHJpdl90OwogCi10eXBlZGVmIHN0cnVjdCBfZHJtX2k4MzBfcmluZ19idWZmZXJ7Cit0eXBlZGVmIHN0cnVjdCBfZHJtX2k4MzBfcmluZ19idWZmZXIgewogCWludCB0YWlsX21hc2s7CiAJdW5zaWduZWQgbG9uZyBTdGFydDsKIAl1bnNpZ25lZCBsb25nIEVuZDsKQEAgLTg2LDE3ICs4NiwxNyBAQAogCWRybV9tYXBfdCAqbW1pb19tYXA7CiAKIAlkcm1faTgzMF9zYXJlYV90ICpzYXJlYV9wcml2OwotICAgCWRybV9pODMwX3JpbmdfYnVmZmVyX3QgcmluZzsKKwlkcm1faTgzMF9yaW5nX2J1ZmZlcl90IHJpbmc7CiAKLSAgICAgIAl2b2lkICogaHdfc3RhdHVzX3BhZ2U7Ci0gICAJdW5zaWduZWQgbG9uZyBjb3VudGVyOworCXZvaWQgKmh3X3N0YXR1c19wYWdlOworCXVuc2lnbmVkIGxvbmcgY291bnRlcjsKIAogCWRtYV9hZGRyX3QgZG1hX3N0YXR1c19wYWdlOwogCiAJZHJtX2J1Zl90ICptbWFwX2J1ZmZlcjsKLQkKKwogCXUzMiBmcm9udF9kaTEsIGJhY2tfZGkxLCB6aTE7Ci0JCisKIAlpbnQgYmFja19vZmZzZXQ7CiAJaW50IGRlcHRoX29mZnNldDsKIAlpbnQgZnJvbnRfb2Zmc2V0OwpAQCAtMTEzLDMwICsxMTMsMzAgQEAKIAlpbnQgcGFnZV9mbGlwcGluZzsKIAogCXdhaXRfcXVldWVfaGVhZF90IGlycV9xdWV1ZTsKLSAgIAlhdG9taWNfdCBpcnFfcmVjZWl2ZWQ7Ci0gICAJYXRvbWljX3QgaXJxX2VtaXR0ZWQ7CisJYXRvbWljX3QgaXJxX3JlY2VpdmVkOworCWF0b21pY190IGlycV9lbWl0dGVkOwogCiAJaW50IHVzZV9taV9iYXRjaGJ1ZmZlcl9zdGFydDsKIAogfSBkcm1faTgzMF9wcml2YXRlX3Q7CiAKIC8qIGk4MzBfZG1hLmMgKi8KLWV4dGVybiB2b2lkIGk4MzBfcmVjbGFpbV9idWZmZXJzKGRybV9kZXZpY2VfdCAqZGV2LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CitleHRlcm4gdm9pZCBpODMwX3JlY2xhaW1fYnVmZmVycyhkcm1fZGV2aWNlX3QgKiBkZXYsIHN0cnVjdCBmaWxlICpmaWxwKTsKIAogLyogaTgzMF9pcnEuYyAqLwotZXh0ZXJuIGludCBpODMwX2lycV9lbWl0KCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwgCi0JCQkgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnICk7Ci1leHRlcm4gaW50IGk4MzBfaXJxX3dhaXQoIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAotCQkJICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyApOworZXh0ZXJuIGludCBpODMwX2lycV9lbWl0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAorCQkJIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKK2V4dGVybiBpbnQgaTgzMF9pcnFfd2FpdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJCSB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiAKLWV4dGVybiBpcnFyZXR1cm5fdCBpODMwX2RyaXZlcl9pcnFfaGFuZGxlciggRFJNX0lSUV9BUkdTICk7Ci1leHRlcm4gdm9pZCBpODMwX2RyaXZlcl9pcnFfcHJlaW5zdGFsbCggZHJtX2RldmljZV90ICpkZXYgKTsKLWV4dGVybiB2b2lkIGk4MzBfZHJpdmVyX2lycV9wb3N0aW5zdGFsbCggZHJtX2RldmljZV90ICpkZXYgKTsKLWV4dGVybiB2b2lkIGk4MzBfZHJpdmVyX2lycV91bmluc3RhbGwoIGRybV9kZXZpY2VfdCAqZGV2ICk7Ci1leHRlcm4gdm9pZCBpODMwX2RyaXZlcl9wcmV0YWtlZG93bihkcm1fZGV2aWNlX3QgKmRldik7Ci1leHRlcm4gdm9pZCBpODMwX2RyaXZlcl9yZWxlYXNlKGRybV9kZXZpY2VfdCAqZGV2LCBzdHJ1Y3QgZmlsZSAqZmlscCk7Ci1leHRlcm4gaW50IGk4MzBfZHJpdmVyX2RtYV9xdWllc2NlbnQoZHJtX2RldmljZV90ICpkZXYpOwotZXh0ZXJuIHZvaWQgaTgzMF9kcml2ZXJfcHJlcmVsZWFzZShkcm1fZGV2aWNlX3QgKmRldiwgRFJNRklMRSBmaWxwKTsKK2V4dGVybiBpcnFyZXR1cm5fdCBpODMwX2RyaXZlcl9pcnFfaGFuZGxlcihEUk1fSVJRX0FSR1MpOworZXh0ZXJuIHZvaWQgaTgzMF9kcml2ZXJfaXJxX3ByZWluc3RhbGwoZHJtX2RldmljZV90ICogZGV2KTsKK2V4dGVybiB2b2lkIGk4MzBfZHJpdmVyX2lycV9wb3N0aW5zdGFsbChkcm1fZGV2aWNlX3QgKiBkZXYpOworZXh0ZXJuIHZvaWQgaTgzMF9kcml2ZXJfaXJxX3VuaW5zdGFsbChkcm1fZGV2aWNlX3QgKiBkZXYpOworZXh0ZXJuIHZvaWQgaTgzMF9kcml2ZXJfcHJldGFrZWRvd24oZHJtX2RldmljZV90ICogZGV2KTsKK2V4dGVybiB2b2lkIGk4MzBfZHJpdmVyX3JlbGVhc2UoZHJtX2RldmljZV90ICogZGV2LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CitleHRlcm4gaW50IGk4MzBfZHJpdmVyX2RtYV9xdWllc2NlbnQoZHJtX2RldmljZV90ICogZGV2KTsKK2V4dGVybiB2b2lkIGk4MzBfZHJpdmVyX3ByZXJlbGVhc2UoZHJtX2RldmljZV90ICogZGV2LCBEUk1GSUxFIGZpbHApOwogZXh0ZXJuIGludCBpODMwX2RyaXZlcl9kZXZpY2VfaXNfYWdwKGRybV9kZXZpY2VfdCAqIGRldik7CiAKICNkZWZpbmUgSTgzMF9CQVNFKHJlZykJCSgodW5zaWduZWQgbG9uZykgXApAQCAtMTQ5LDggKzE0OSw2IEBACiAjZGVmaW5lIEk4MzBfUkVBRDE2KHJlZykgCUk4MzBfREVSRUYxNihyZWcpCiAjZGVmaW5lIEk4MzBfV1JJVEUxNihyZWcsdmFsKQlkbyB7IEk4MzBfREVSRUYxNihyZWcpID0gdmFsOyB9IHdoaWxlICgwKQogCi0KLQogI2RlZmluZSBJODMwX1ZFUkJPU0UgMAogCiAjZGVmaW5lIFJJTkdfTE9DQUxTCXVuc2lnbmVkIGludCBvdXRyaW5nLCByaW5nbWFzaywgb3V0Y291bnQ7IFwKQEAgLTE2OCw3ICsxNjYsNiBAQAogCXZpcnQgPSBkZXZfcHJpdi0+cmluZy52aXJ0dWFsX3N0YXJ0OwkJXAogfSB3aGlsZSAoMCkKIAotCiAjZGVmaW5lIE9VVF9SSU5HKG4pIGRvIHsJCQkJCVwKIAlpZiAoSTgzMF9WRVJCT1NFKSBwcmludGsoIiAgIE9VVF9SSU5HICV4XG4iLCAoaW50KShuKSk7CVwKIAkqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSh2aXJ0ICsgb3V0cmluZykgPSBuOwkJXApAQCAtMTg0LDggKzE4MSw3IEBACiAJSTgzMF9XUklURShMUF9SSU5HICsgUklOR19UQUlMLCBvdXRyaW5nKTsJCQlcCiB9IHdoaWxlKDApCiAKLWV4dGVybiBpbnQgaTgzMF93YWl0X3JpbmcoZHJtX2RldmljZV90ICpkZXYsIGludCBuLCBjb25zdCBjaGFyICpjYWxsZXIpOwotCitleHRlcm4gaW50IGk4MzBfd2FpdF9yaW5nKGRybV9kZXZpY2VfdCAqIGRldiwgaW50IG4sIGNvbnN0IGNoYXIgKmNhbGxlcik7CiAKICNkZWZpbmUgR0ZYX09QX1VTRVJfSU5URVJSVVBUIAkJKCgwPDwyOSl8KDI8PDIzKSkKICNkZWZpbmUgR0ZYX09QX0JSRUFLUE9JTlRfSU5URVJSVVBUCSgoMDw8MjkpfCgxPDwyMykpCkBAIC0yMDAsNyArMTk2LDYgQEAKICNkZWZpbmUgSU5TVF9PUF9GTFVTSCAgICAgICAgMHgwMjAwMDAwMAogI2RlZmluZSBJTlNUX0ZMVVNIX01BUF9DQUNIRSAweDAwMDAwMDAxCiAKLQogI2RlZmluZSBCQjFfU1RBUlRfQUREUl9NQVNLICAgKH4weDcpCiAjZGVmaW5lIEJCMV9QUk9URUNURUQgICAgICAgICAoMTw8MCkKICNkZWZpbmUgQkIxX1VOUFJPVEVDVEVEICAgICAgICgwPDwwKQpAQCAtMjEzLDcgKzIwOCw2IEBACiAKICNkZWZpbmUgSTgzMF9JUlFfUkVTRVJWRUQgKCgxPDwxMyl8KDM8PDIpKQogCi0KICNkZWZpbmUgTFBfUklORyAgICAgCQkweDIwMzAKICNkZWZpbmUgSFBfUklORyAgICAgCQkweDIwNDAKICNkZWZpbmUgUklOR19UQUlMICAgICAgCQkweDAwCkBAIC0yMjUsNyArMjE5LDcgQEAKICNkZWZpbmUgUklOR19TVEFSVCAgICAgCQkweDA4CiAjZGVmaW5lIFNUQVJUX0FERFIgICAgICAgICAgCTB4MHhGRkZGRjAwMAogI2RlZmluZSBSSU5HX0xFTiAgICAgICAJCTB4MEMKLSNkZWZpbmUgUklOR19OUl9QQUdFUyAgICAgICAJMHgwMDFGRjAwMCAKKyNkZWZpbmUgUklOR19OUl9QQUdFUyAgICAgICAJMHgwMDFGRjAwMAogI2RlZmluZSBSSU5HX1JFUE9SVF9NQVNLICAgIAkweDAwMDAwMDA2CiAjZGVmaW5lIFJJTkdfUkVQT1JUXzY0SyAgICAgCTB4MDAwMDAwMDIKICNkZWZpbmUgUklOR19SRVBPUlRfMTI4SyAgICAJMHgwMDAwMDAwNApAQCAtMjkxLDEwICsyODUsOSBAQAogI2RlZmluZSBNSV9CQVRDSF9OT05fU0VDVVJFCSgxKQogCiAjZGVmaW5lIE1JX1dBSVRfRk9SX0VWRU5UICAgICAgICgoMHgzPDwyMykpCi0jZGVmaW5lIE1JX1dBSVRfRk9SX1BMQU5FX0FfRkxJUCAgICAgICgxPDwyKSAKLSNkZWZpbmUgTUlfV0FJVF9GT1JfUExBTkVfQV9TQ0FOTElORVMgKDE8PDEpIAorI2RlZmluZSBNSV9XQUlUX0ZPUl9QTEFORV9BX0ZMSVAgICAgICAoMTw8MikKKyNkZWZpbmUgTUlfV0FJVF9GT1JfUExBTkVfQV9TQ0FOTElORVMgKDE8PDEpCiAKICNkZWZpbmUgTUlfTE9BRF9TQ0FOX0xJTkVTX0lOQ0wgICgoMHgxMjw8MjMpKQogCiAjZW5kaWYKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9pODMwX2lycS5jIGIvZHJpdmVycy9jaGFyL2RybS9pODMwX2lycS5jCmluZGV4IGE1OTIzZTUuLjU4NDFmNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vaTgzMF9pcnEuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL2k4MzBfaXJxLmMKQEAgLTksMTEgKzksMTEgQEAKICAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAogICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCiAgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICogCisgKgogICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAogICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQogICogU29mdHdhcmUuCi0gKiAKKyAqCiAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgogICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCiAgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKQEAgLTMzLDI4ICszMywyNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgkvKiBGb3IgdGFzayBxdWV1ZSBzdXBwb3J0ICovCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAotCi1pcnFyZXR1cm5fdCBpODMwX2RyaXZlcl9pcnFfaGFuZGxlciggRFJNX0lSUV9BUkdTICkKK2lycXJldHVybl90IGk4MzBfZHJpdmVyX2lycV9oYW5kbGVyKERSTV9JUlFfQVJHUykKIHsKLQlkcm1fZGV2aWNlX3QJICpkZXYgPSAoZHJtX2RldmljZV90ICopYXJnOwotICAgICAgCWRybV9pODMwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX2k4MzBfcHJpdmF0ZV90ICopZGV2LT5kZXZfcHJpdmF0ZTsKLSAgIAl1MTYgdGVtcDsKKwlkcm1fZGV2aWNlX3QgKmRldiA9IChkcm1fZGV2aWNlX3QgKikgYXJnOworCWRybV9pODMwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX2k4MzBfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisJdTE2IHRlbXA7CiAKLSAgICAgIAl0ZW1wID0gSTgzMF9SRUFEMTYoSTgzMFJFR19JTlRfSURFTlRJVFlfUik7CisJdGVtcCA9IEk4MzBfUkVBRDE2KEk4MzBSRUdfSU5UX0lERU5USVRZX1IpOwogCURSTV9ERUJVRygiJXhcbiIsIHRlbXApOwogCi0gICAJaWYgKCAhKCB0ZW1wICYgMiApICkgCisJaWYgKCEodGVtcCAmIDIpKQogCQlyZXR1cm4gSVJRX05PTkU7CiAKLQlJODMwX1dSSVRFMTYoSTgzMFJFR19JTlRfSURFTlRJVFlfUiwgdGVtcCk7IAorCUk4MzBfV1JJVEUxNihJODMwUkVHX0lOVF9JREVOVElUWV9SLCB0ZW1wKTsKIAogCWF0b21pY19pbmMoJmRldl9wcml2LT5pcnFfcmVjZWl2ZWQpOwotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZGV2X3ByaXYtPmlycV9xdWV1ZSk7IAorCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZGV2X3ByaXYtPmlycV9xdWV1ZSk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBpbnQgaTgzMF9lbWl0X2lycShkcm1fZGV2aWNlX3QgKmRldikKK3N0YXRpYyBpbnQgaTgzMF9lbWl0X2lycShkcm1fZGV2aWNlX3QgKiBkZXYpCiB7CiAJZHJtX2k4MzBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJUklOR19MT0NBTFM7CkBAIC02MywyNyArNjIsMjUgQEAKIAogCWF0b21pY19pbmMoJmRldl9wcml2LT5pcnFfZW1pdHRlZCk7CiAKLSAgIAlCRUdJTl9MUF9SSU5HKDIpOwotICAgICAgCU9VVF9SSU5HKCAwICk7Ci0gICAgICAJT1VUX1JJTkcoIEdGWF9PUF9VU0VSX0lOVEVSUlVQVCApOwotICAgICAgCUFEVkFOQ0VfTFBfUklORygpOworCUJFR0lOX0xQX1JJTkcoMik7CisJT1VUX1JJTkcoMCk7CisJT1VUX1JJTkcoR0ZYX09QX1VTRVJfSU5URVJSVVBUKTsKKwlBRFZBTkNFX0xQX1JJTkcoKTsKIAogCXJldHVybiBhdG9taWNfcmVhZCgmZGV2X3ByaXYtPmlycV9lbWl0dGVkKTsKIH0KIAotCi1zdGF0aWMgaW50IGk4MzBfd2FpdF9pcnEoZHJtX2RldmljZV90ICpkZXYsIGludCBpcnFfbnIpCitzdGF0aWMgaW50IGk4MzBfd2FpdF9pcnEoZHJtX2RldmljZV90ICogZGV2LCBpbnQgaXJxX25yKQogewotICAJZHJtX2k4MzBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IAotCSAgIChkcm1faTgzMF9wcml2YXRlX3QgKilkZXYtPmRldl9wcml2YXRlOworCWRybV9pODMwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX2k4MzBfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CiAJREVDTEFSRV9XQUlUUVVFVUUoZW50cnksIGN1cnJlbnQpOwotCXVuc2lnbmVkIGxvbmcgZW5kID0gamlmZmllcyArIEhaKjM7CisJdW5zaWduZWQgbG9uZyBlbmQgPSBqaWZmaWVzICsgSFogKiAzOwogCWludCByZXQgPSAwOwogCiAJRFJNX0RFQlVHKCIlc1xuIiwgX19GVU5DVElPTl9fKTsKIAotIAlpZiAoYXRvbWljX3JlYWQoJmRldl9wcml2LT5pcnFfcmVjZWl2ZWQpID49IGlycV9ucikgIAotIAkJcmV0dXJuIDA7IAorCWlmIChhdG9taWNfcmVhZCgmZGV2X3ByaXYtPmlycV9yZWNlaXZlZCkgPj0gaXJxX25yKQorCQlyZXR1cm4gMDsKIAogCWRldl9wcml2LT5zYXJlYV9wcml2LT5wZXJmX2JveGVzIHw9IEk4MzBfQk9YX1dBSVQ7CiAKQEAgLTkxLDIxICs4OCwyMSBAQAogCiAJZm9yICg7OykgewogCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JICAgCWlmIChhdG9taWNfcmVhZCgmZGV2X3ByaXYtPmlycV9yZWNlaXZlZCkgPj0gaXJxX25yKSAKLQkJICAgYnJlYWs7Ci0JCWlmKChzaWduZWQpKGVuZCAtIGppZmZpZXMpIDw9IDApIHsKKwkJaWYgKGF0b21pY19yZWFkKCZkZXZfcHJpdi0+aXJxX3JlY2VpdmVkKSA+PSBpcnFfbnIpCisJCQlicmVhazsKKwkJaWYgKChzaWduZWQpKGVuZCAtIGppZmZpZXMpIDw9IDApIHsKIAkJCURSTV9FUlJPUigidGltZW91dCBpaXIgJXggaW1yICV4IGllciAleCBod3N0YW0gJXhcbiIsCi0JCQkJICBJODMwX1JFQUQxNiggSTgzMFJFR19JTlRfSURFTlRJVFlfUiApLAotCQkJCSAgSTgzMF9SRUFEMTYoIEk4MzBSRUdfSU5UX01BU0tfUiApLAotCQkJCSAgSTgzMF9SRUFEMTYoIEk4MzBSRUdfSU5UX0VOQUJMRV9SICksCi0JCQkJICBJODMwX1JFQUQxNiggSTgzMFJFR19IV1NUQU0gKSk7CisJCQkJICBJODMwX1JFQUQxNihJODMwUkVHX0lOVF9JREVOVElUWV9SKSwKKwkJCQkgIEk4MzBfUkVBRDE2KEk4MzBSRUdfSU5UX01BU0tfUiksCisJCQkJICBJODMwX1JFQUQxNihJODMwUkVHX0lOVF9FTkFCTEVfUiksCisJCQkJICBJODMwX1JFQUQxNihJODMwUkVHX0hXU1RBTSkpOwogCi0JCSAgIAlyZXQgPSAtRUJVU1k7CS8qIExvY2t1cD8gIE1pc3NlZCBpcnE/ICovCisJCQlyZXQgPSAtRUJVU1k7CS8qIExvY2t1cD8gIE1pc3NlZCBpcnE/ICovCiAJCQlicmVhazsKIAkJfQotCSAgICAgIAlzY2hlZHVsZV90aW1lb3V0KEhaKjMpOwotCSAgICAgIAlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJICAgCXJldCA9IC1FSU5UUjsKKwkJc2NoZWR1bGVfdGltZW91dChIWiAqIDMpOworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCXJldCA9IC1FSU5UUjsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtMTE1LDg5ICsxMTIsODcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0KIC8qIE5lZWRzIHRoZSBsb2NrIGFzIGl0IHRvdWNoZXMgdGhlIHJpbmcuCiAgKi8KLWludCBpODMwX2lycV9lbWl0KCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwKLQkJICAgdW5zaWduZWQgbG9uZyBhcmcgKQoraW50IGk4MzBfaXJxX2VtaXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsCisJCSAgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0JZHJtX2ZpbGVfdAkgICpwcml2CSAgICA9IGZpbHAtPnByaXZhdGVfZGF0YTsKLQlkcm1fZGV2aWNlX3QJICAqZGV2CSAgICA9IHByaXYtPmhlYWQtPmRldjsKKwlkcm1fZmlsZV90ICpwcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCWRybV9kZXZpY2VfdCAqZGV2ID0gcHJpdi0+aGVhZC0+ZGV2OwogCWRybV9pODMwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWRybV9pODMwX2lycV9lbWl0X3QgZW1pdDsKIAlpbnQgcmVzdWx0OwogCiAJTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlscCk7CiAKLQlpZiAoICFkZXZfcHJpdiApIHsKLQkJRFJNX0VSUk9SKCAiJXMgY2FsbGVkIHdpdGggbm8gaW5pdGlhbGl6YXRpb25cbiIsIF9fRlVOQ1RJT05fXyApOworCWlmICghZGV2X3ByaXYpIHsKKwkJRFJNX0VSUk9SKCIlcyBjYWxsZWQgd2l0aCBubyBpbml0aWFsaXphdGlvblxuIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKGNvcHlfZnJvbV91c2VyKCAmZW1pdCwgKGRybV9pODMwX2lycV9lbWl0X3QgX191c2VyICopYXJnLCBzaXplb2YoZW1pdCkgKSkKKwlpZiAoY29weV9mcm9tX3VzZXIKKwkgICAgKCZlbWl0LCAoZHJtX2k4MzBfaXJxX2VtaXRfdCBfX3VzZXIgKikgYXJnLCBzaXplb2YoZW1pdCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJlc3VsdCA9IGk4MzBfZW1pdF9pcnEoIGRldiApOworCXJlc3VsdCA9IGk4MzBfZW1pdF9pcnEoZGV2KTsKIAotCWlmICggY29weV90b191c2VyKCBlbWl0LmlycV9zZXEsICZyZXN1bHQsIHNpemVvZihpbnQpICkgKSB7Ci0JCURSTV9FUlJPUiggImNvcHlfdG9fdXNlclxuIiApOworCWlmIChjb3B5X3RvX3VzZXIoZW1pdC5pcnFfc2VxLCAmcmVzdWx0LCBzaXplb2YoaW50KSkpIHsKKwkJRFJNX0VSUk9SKCJjb3B5X3RvX3VzZXJcbiIpOwogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAotCiAvKiBEb2Vzbid0IG5lZWQgdGhlIGhhcmR3YXJlIGxvY2suCiAgKi8KLWludCBpODMwX2lycV93YWl0KCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwKLQkJICAgdW5zaWduZWQgbG9uZyBhcmcgKQoraW50IGk4MzBfaXJxX3dhaXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsCisJCSAgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0JZHJtX2ZpbGVfdAkgICpwcml2CSAgICA9IGZpbHAtPnByaXZhdGVfZGF0YTsKLQlkcm1fZGV2aWNlX3QJICAqZGV2CSAgICA9IHByaXYtPmhlYWQtPmRldjsKKwlkcm1fZmlsZV90ICpwcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCWRybV9kZXZpY2VfdCAqZGV2ID0gcHJpdi0+aGVhZC0+ZGV2OwogCWRybV9pODMwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWRybV9pODMwX2lycV93YWl0X3QgaXJxd2FpdDsKIAotCWlmICggIWRldl9wcml2ICkgewotCQlEUk1fRVJST1IoICIlcyBjYWxsZWQgd2l0aCBubyBpbml0aWFsaXphdGlvblxuIiwgX19GVU5DVElPTl9fICk7CisJaWYgKCFkZXZfcHJpdikgeworCQlEUk1fRVJST1IoIiVzIGNhbGxlZCB3aXRoIG5vIGluaXRpYWxpemF0aW9uXG4iLCBfX0ZVTkNUSU9OX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAoY29weV9mcm9tX3VzZXIoICZpcnF3YWl0LCAoZHJtX2k4MzBfaXJxX3dhaXRfdCBfX3VzZXIgKilhcmcsIAotCQkJICAgIHNpemVvZihpcnF3YWl0KSApKQorCWlmIChjb3B5X2Zyb21fdXNlcigmaXJxd2FpdCwgKGRybV9pODMwX2lycV93YWl0X3QgX191c2VyICopIGFyZywKKwkJCSAgIHNpemVvZihpcnF3YWl0KSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGk4MzBfd2FpdF9pcnEoIGRldiwgaXJxd2FpdC5pcnFfc2VxICk7CisJcmV0dXJuIGk4MzBfd2FpdF9pcnEoZGV2LCBpcnF3YWl0LmlycV9zZXEpOwogfQogCi0KIC8qIGRybV9kbWEuaCBob29rcwogKi8KLXZvaWQgaTgzMF9kcml2ZXJfaXJxX3ByZWluc3RhbGwoIGRybV9kZXZpY2VfdCAqZGV2ICkgewotCWRybV9pODMwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPQotCQkoZHJtX2k4MzBfcHJpdmF0ZV90ICopZGV2LT5kZXZfcHJpdmF0ZTsKK3ZvaWQgaTgzMF9kcml2ZXJfaXJxX3ByZWluc3RhbGwoZHJtX2RldmljZV90ICogZGV2KQoreworCWRybV9pODMwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX2k4MzBfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CiAKLQlJODMwX1dSSVRFMTYoIEk4MzBSRUdfSFdTVEFNLCAweGZmZmYgKTsKLQlJODMwX1dSSVRFMTYoIEk4MzBSRUdfSU5UX01BU0tfUiwgMHgwICk7Ci0JSTgzMF9XUklURTE2KCBJODMwUkVHX0lOVF9FTkFCTEVfUiwgMHgwICk7CisJSTgzMF9XUklURTE2KEk4MzBSRUdfSFdTVEFNLCAweGZmZmYpOworCUk4MzBfV1JJVEUxNihJODMwUkVHX0lOVF9NQVNLX1IsIDB4MCk7CisJSTgzMF9XUklURTE2KEk4MzBSRUdfSU5UX0VOQUJMRV9SLCAweDApOwogCWF0b21pY19zZXQoJmRldl9wcml2LT5pcnFfcmVjZWl2ZWQsIDApOwogCWF0b21pY19zZXQoJmRldl9wcml2LT5pcnFfZW1pdHRlZCwgMCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2X3ByaXYtPmlycV9xdWV1ZSk7CiB9CiAKLXZvaWQgaTgzMF9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsKCBkcm1fZGV2aWNlX3QgKmRldiApIHsKLQlkcm1faTgzMF9wcml2YXRlX3QgKmRldl9wcml2ID0KLQkJKGRybV9pODMwX3ByaXZhdGVfdCAqKWRldi0+ZGV2X3ByaXZhdGU7Cit2b2lkIGk4MzBfZHJpdmVyX2lycV9wb3N0aW5zdGFsbChkcm1fZGV2aWNlX3QgKiBkZXYpCit7CisJZHJtX2k4MzBfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1faTgzMF9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKIAotCUk4MzBfV1JJVEUxNiggSTgzMFJFR19JTlRfRU5BQkxFX1IsIDB4MiApOworCUk4MzBfV1JJVEUxNihJODMwUkVHX0lOVF9FTkFCTEVfUiwgMHgyKTsKIH0KIAotdm9pZCBpODMwX2RyaXZlcl9pcnFfdW5pbnN0YWxsKCBkcm1fZGV2aWNlX3QgKmRldiApIHsKLQlkcm1faTgzMF9wcml2YXRlX3QgKmRldl9wcml2ID0KLQkJKGRybV9pODMwX3ByaXZhdGVfdCAqKWRldi0+ZGV2X3ByaXZhdGU7Cit2b2lkIGk4MzBfZHJpdmVyX2lycV91bmluc3RhbGwoZHJtX2RldmljZV90ICogZGV2KQoreworCWRybV9pODMwX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX2k4MzBfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CiAJaWYgKCFkZXZfcHJpdikKIAkJcmV0dXJuOwogCi0JSTgzMF9XUklURTE2KCBJODMwUkVHX0lOVF9NQVNLX1IsIDB4ZmZmZiApOwotCUk4MzBfV1JJVEUxNiggSTgzMFJFR19JTlRfRU5BQkxFX1IsIDB4MCApOworCUk4MzBfV1JJVEUxNihJODMwUkVHX0lOVF9NQVNLX1IsIDB4ZmZmZik7CisJSTgzMF9XUklURTE2KEk4MzBSRUdfSU5UX0VOQUJMRV9SLCAweDApOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9pOTE1X2RtYS5jIGIvZHJpdmVycy9jaGFyL2RybS9pOTE1X2RtYS5jCmluZGV4IDM0ZjU1MmYuLmYwYmIwYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vaTkxNV9kbWEuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL2k5MTVfZG1hLmMKQEAgLTg1LDE0ICs4NSwxNCBAQAogCSAqIGlzIGZyZWVkLCBpdCdzIHRvbyBsYXRlLgogCSAqLwogCWlmIChkZXYtPmlycSkKLQkJZHJtX2lycV91bmluc3RhbGwgKGRldik7CisJCWRybV9pcnFfdW5pbnN0YWxsKGRldik7CiAKIAlpZiAoZGV2LT5kZXZfcHJpdmF0ZSkgewogCQlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0KIAkJICAgIChkcm1faTkxNV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKIAogCQlpZiAoZGV2X3ByaXYtPnJpbmcudmlydHVhbF9zdGFydCkgewotCQkJZHJtX2NvcmVfaW9yZW1hcGZyZWUoICZkZXZfcHJpdi0+cmluZy5tYXAsIGRldik7CisJCQlkcm1fY29yZV9pb3JlbWFwZnJlZSgmZGV2X3ByaXYtPnJpbmcubWFwLCBkZXYpOwogCQl9CiAKIAkJaWYgKGRldl9wcml2LT5zdGF0dXNfcGFnZV9kbWFoKSB7CkBAIC0xMDEsOCArMTAxLDggQEAKIAkJCUk5MTVfV1JJVEUoMHgwMjA4MCwgMHgxZmZmZjAwMCk7CiAJCX0KIAotCQlkcm1fZnJlZSAoZGV2LT5kZXZfcHJpdmF0ZSwgc2l6ZW9mKGRybV9pOTE1X3ByaXZhdGVfdCksCi0JCQkgICBEUk1fTUVNX0RSSVZFUik7CisJCWRybV9mcmVlKGRldi0+ZGV2X3ByaXZhdGUsIHNpemVvZihkcm1faTkxNV9wcml2YXRlX3QpLAorCQkJIERSTV9NRU1fRFJJVkVSKTsKIAogCQlkZXYtPmRldl9wcml2YXRlID0gTlVMTDsKIAl9CkBAIC0xNDYsNyArMTQ2LDcgQEAKIAlkZXZfcHJpdi0+cmluZy5tYXAuZmxhZ3MgPSAwOwogCWRldl9wcml2LT5yaW5nLm1hcC5tdHJyID0gMDsKIAotCWRybV9jb3JlX2lvcmVtYXAoICZkZXZfcHJpdi0+cmluZy5tYXAsIGRldiApOworCWRybV9jb3JlX2lvcmVtYXAoJmRldl9wcml2LT5yaW5nLm1hcCwgZGV2KTsKIAogCWlmIChkZXZfcHJpdi0+cmluZy5tYXAuaGFuZGxlID09IE5VTEwpIHsKIAkJZGV2LT5kZXZfcHJpdmF0ZSA9ICh2b2lkICopZGV2X3ByaXY7CkBAIC0yNDMsOCArMjQzLDggQEAKIAogCXN3aXRjaCAoaW5pdC5mdW5jKSB7CiAJY2FzZSBJOTE1X0lOSVRfRE1BOgotCQlkZXZfcHJpdiA9IGRybV9hbGxvYyAoc2l6ZW9mKGRybV9pOTE1X3ByaXZhdGVfdCksCi0JCQkJICAgICAgIERSTV9NRU1fRFJJVkVSKTsKKwkJZGV2X3ByaXYgPSBkcm1fYWxsb2Moc2l6ZW9mKGRybV9pOTE1X3ByaXZhdGVfdCksCisJCQkJICAgICBEUk1fTUVNX0RSSVZFUik7CiAJCWlmIChkZXZfcHJpdiA9PSBOVUxMKQogCQkJcmV0dXJuIERSTV9FUlIoRU5PTUVNKTsKIAkJcmV0Y29kZSA9IGk5MTVfaW5pdGlhbGl6ZShkZXYsIGRldl9wcml2LCAmaW5pdCk7CkBAIC0yOTcsNyArMjk3LDcgQEAKIAkJY2FzZSAweDFjOgogCQkJcmV0dXJuIDE7CiAJCWNhc2UgMHgxZDoKLQkJCXN3aXRjaCAoKGNtZD4+MTYpJjB4ZmYpIHsKKwkJCXN3aXRjaCAoKGNtZCA+PiAxNikgJiAweGZmKSB7CiAJCQljYXNlIDB4MzoKIAkJCQlyZXR1cm4gKGNtZCAmIDB4MWYpICsgMjsKIAkJCWNhc2UgMHg0OgpAQCAtNjk5LDM1ICs2OTksNDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBpOTE1X2RyaXZlcl9wcmV0YWtlZG93bihkcm1fZGV2aWNlX3QgKmRldikKK3ZvaWQgaTkxNV9kcml2ZXJfcHJldGFrZWRvd24oZHJtX2RldmljZV90ICogZGV2KQogewotCWlmICggZGV2LT5kZXZfcHJpdmF0ZSApIHsKKwlpZiAoZGV2LT5kZXZfcHJpdmF0ZSkgewogCQlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQkgICAgICAgIGk5MTVfbWVtX3Rha2Vkb3duKCAmKGRldl9wcml2LT5hZ3BfaGVhcCkgKTsKLSAJfQotCWk5MTVfZG1hX2NsZWFudXAoIGRldiApOworCQlpOTE1X21lbV90YWtlZG93bigmKGRldl9wcml2LT5hZ3BfaGVhcCkpOworCX0KKwlpOTE1X2RtYV9jbGVhbnVwKGRldik7CiB9CiAKLXZvaWQgaTkxNV9kcml2ZXJfcHJlcmVsZWFzZShkcm1fZGV2aWNlX3QgKmRldiwgRFJNRklMRSBmaWxwKQordm9pZCBpOTE1X2RyaXZlcl9wcmVyZWxlYXNlKGRybV9kZXZpY2VfdCAqIGRldiwgRFJNRklMRSBmaWxwKQogewotCWlmICggZGV2LT5kZXZfcHJpdmF0ZSApIHsKKwlpZiAoZGV2LT5kZXZfcHJpdmF0ZSkgewogCQlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLSAgICAgICAgICAgICAgICBpOTE1X21lbV9yZWxlYXNlKCBkZXYsIGZpbHAsIGRldl9wcml2LT5hZ3BfaGVhcCApOworCQlpOTE1X21lbV9yZWxlYXNlKGRldiwgZmlscCwgZGV2X3ByaXYtPmFncF9oZWFwKTsKIAl9CiB9CiAKIGRybV9pb2N0bF9kZXNjX3QgaTkxNV9pb2N0bHNbXSA9IHsKLQlbRFJNX0lPQ1RMX05SKERSTV9JOTE1X0lOSVQpXSA9IHtpOTE1X2RtYV9pbml0LCAxLCAxfSwKLQlbRFJNX0lPQ1RMX05SKERSTV9JOTE1X0ZMVVNIKV0gPSB7aTkxNV9mbHVzaF9pb2N0bCwgMSwgMH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fSTkxNV9GTElQKV0gPSB7aTkxNV9mbGlwX2J1ZnMsIDEsIDB9LAotCVtEUk1fSU9DVExfTlIoRFJNX0k5MTVfQkFUQ0hCVUZGRVIpXSA9IHtpOTE1X2JhdGNoYnVmZmVyLCAxLCAwfSwKLQlbRFJNX0lPQ1RMX05SKERSTV9JOTE1X0lSUV9FTUlUKV0gPSB7aTkxNV9pcnFfZW1pdCwgMSwgMH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fSTkxNV9JUlFfV0FJVCldID0ge2k5MTVfaXJxX3dhaXQsIDEsIDB9LAotCVtEUk1fSU9DVExfTlIoRFJNX0k5MTVfR0VUUEFSQU0pXSA9IHtpOTE1X2dldHBhcmFtLCAxLCAwfSwKLQlbRFJNX0lPQ1RMX05SKERSTV9JOTE1X1NFVFBBUkFNKV0gPSB7aTkxNV9zZXRwYXJhbSwgMSwgMX0sCi0JW0RSTV9JT0NUTF9OUihEUk1fSTkxNV9BTExPQyldID0ge2k5MTVfbWVtX2FsbG9jLCAxLCAwfSwKLQlbRFJNX0lPQ1RMX05SKERSTV9JOTE1X0ZSRUUpXSA9IHtpOTE1X21lbV9mcmVlLCAxLCAwfSwKLQlbRFJNX0lPQ1RMX05SKERSTV9JOTE1X0lOSVRfSEVBUCldID0ge2k5MTVfbWVtX2luaXRfaGVhcCwgMSwgMX0sCisJW0RSTV9JT0NUTF9OUihEUk1fSTkxNV9JTklUKV0gPSB7aTkxNV9kbWFfaW5pdCwgMSwgMX0KKwksCisJW0RSTV9JT0NUTF9OUihEUk1fSTkxNV9GTFVTSCldID0ge2k5MTVfZmx1c2hfaW9jdGwsIDEsIDB9CisJLAorCVtEUk1fSU9DVExfTlIoRFJNX0k5MTVfRkxJUCldID0ge2k5MTVfZmxpcF9idWZzLCAxLCAwfQorCSwKKwlbRFJNX0lPQ1RMX05SKERSTV9JOTE1X0JBVENIQlVGRkVSKV0gPSB7aTkxNV9iYXRjaGJ1ZmZlciwgMSwgMH0KKwksCisJW0RSTV9JT0NUTF9OUihEUk1fSTkxNV9JUlFfRU1JVCldID0ge2k5MTVfaXJxX2VtaXQsIDEsIDB9CisJLAorCVtEUk1fSU9DVExfTlIoRFJNX0k5MTVfSVJRX1dBSVQpXSA9IHtpOTE1X2lycV93YWl0LCAxLCAwfQorCSwKKwlbRFJNX0lPQ1RMX05SKERSTV9JOTE1X0dFVFBBUkFNKV0gPSB7aTkxNV9nZXRwYXJhbSwgMSwgMH0KKwksCisJW0RSTV9JT0NUTF9OUihEUk1fSTkxNV9TRVRQQVJBTSldID0ge2k5MTVfc2V0cGFyYW0sIDEsIDF9CisJLAorCVtEUk1fSU9DVExfTlIoRFJNX0k5MTVfQUxMT0MpXSA9IHtpOTE1X21lbV9hbGxvYywgMSwgMH0KKwksCisJW0RSTV9JT0NUTF9OUihEUk1fSTkxNV9GUkVFKV0gPSB7aTkxNV9tZW1fZnJlZSwgMSwgMH0KKwksCisJW0RSTV9JT0NUTF9OUihEUk1fSTkxNV9JTklUX0hFQVApXSA9IHtpOTE1X21lbV9pbml0X2hlYXAsIDEsIDF9CisJLAogCVtEUk1fSU9DVExfTlIoRFJNX0k5MTVfQ01EQlVGRkVSKV0gPSB7aTkxNV9jbWRidWZmZXIsIDEsIDB9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2k5MTVfZHJ2LmMgYi9kcml2ZXJzL2NoYXIvZHJtL2k5MTVfZHJ2LmMKaW5kZXggMTA2YjllYy4uNjY1ZGE2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9pOTE1X2Rydi5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vaTkxNV9kcnYuYwpAQCAtMzQsMzYgKzM0LDM0IEBACiAKICNpbmNsdWRlICJkcm1fcGNpaWRzLmgiCiAKLXN0YXRpYyBpbnQgcG9zdGluaXQoIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MgKQorc3RhdGljIGludCBwb3N0aW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewogCWRldi0+Y291bnRlcnMgKz0gNDsKIAlkZXYtPnR5cGVzWzZdID0gX0RSTV9TVEFUX0lSUTsKIAlkZXYtPnR5cGVzWzddID0gX0RSTV9TVEFUX1BSSU1BUlk7CiAJZGV2LT50eXBlc1s4XSA9IF9EUk1fU1RBVF9TRUNPTkRBUlk7CiAJZGV2LT50eXBlc1s5XSA9IF9EUk1fU1RBVF9ETUE7Ci0JCi0JRFJNX0lORk8oICJJbml0aWFsaXplZCAlcyAlZC4lZC4lZCAlcyBvbiBtaW5vciAlZDogJXNcbiIsCi0JCURSSVZFUl9OQU1FLAotCQlEUklWRVJfTUFKT1IsCi0JCURSSVZFUl9NSU5PUiwKLQkJRFJJVkVSX1BBVENITEVWRUwsCi0JCURSSVZFUl9EQVRFLAotCQlkZXYtPnByaW1hcnkubWlub3IsCi0JCXBjaV9wcmV0dHlfbmFtZShkZXYtPnBkZXYpCi0JCSk7CisKKwlEUk1fSU5GTygiSW5pdGlhbGl6ZWQgJXMgJWQuJWQuJWQgJXMgb24gbWlub3IgJWQ6ICVzXG4iLAorCQkgRFJJVkVSX05BTUUsCisJCSBEUklWRVJfTUFKT1IsCisJCSBEUklWRVJfTUlOT1IsCisJCSBEUklWRVJfUEFUQ0hMRVZFTCwKKwkJIERSSVZFUl9EQVRFLCBkZXYtPnByaW1hcnkubWlub3IsIHBjaV9wcmV0dHlfbmFtZShkZXYtPnBkZXYpCisJICAgICk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmVyc2lvbiggZHJtX3ZlcnNpb25fdCAqdmVyc2lvbiApCitzdGF0aWMgaW50IHZlcnNpb24oZHJtX3ZlcnNpb25fdCAqIHZlcnNpb24pCiB7CiAJaW50IGxlbjsKIAogCXZlcnNpb24tPnZlcnNpb25fbWFqb3IgPSBEUklWRVJfTUFKT1I7CiAJdmVyc2lvbi0+dmVyc2lvbl9taW5vciA9IERSSVZFUl9NSU5PUjsKIAl2ZXJzaW9uLT52ZXJzaW9uX3BhdGNobGV2ZWwgPSBEUklWRVJfUEFUQ0hMRVZFTDsKLQlEUk1fQ09QWSggdmVyc2lvbi0+bmFtZSwgRFJJVkVSX05BTUUgKTsKLQlEUk1fQ09QWSggdmVyc2lvbi0+ZGF0ZSwgRFJJVkVSX0RBVEUgKTsKLQlEUk1fQ09QWSggdmVyc2lvbi0+ZGVzYywgRFJJVkVSX0RFU0MgKTsKKwlEUk1fQ09QWSh2ZXJzaW9uLT5uYW1lLCBEUklWRVJfTkFNRSk7CisJRFJNX0NPUFkodmVyc2lvbi0+ZGF0ZSwgRFJJVkVSX0RBVEUpOworCURSTV9DT1BZKHZlcnNpb24tPmRlc2MsIERSSVZFUl9ERVNDKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzUsOCArNzMsOSBAQAogZXh0ZXJuIGludCBpOTE1X21heF9pb2N0bDsKIAogc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIGRyaXZlciA9IHsKLQkuZHJpdmVyX2ZlYXR1cmVzID0gRFJJVkVSX1VTRV9BR1AgfCBEUklWRVJfUkVRVUlSRV9BR1AgfCBEUklWRVJfVVNFX01UUlIgfAotCQkJCURSSVZFUl9IQVZFX0lSUSB8IERSSVZFUl9JUlFfU0hBUkVELAorCS5kcml2ZXJfZmVhdHVyZXMgPQorCSAgICBEUklWRVJfVVNFX0FHUCB8IERSSVZFUl9SRVFVSVJFX0FHUCB8IERSSVZFUl9VU0VfTVRSUiB8CisJICAgIERSSVZFUl9IQVZFX0lSUSB8IERSSVZFUl9JUlFfU0hBUkVELAogCS5wcmV0YWtlZG93biA9IGk5MTVfZHJpdmVyX3ByZXRha2Vkb3duLAogCS5wcmVyZWxlYXNlID0gaTkxNV9kcml2ZXJfcHJlcmVsZWFzZSwKIAkuZGV2aWNlX2lzX2FncCA9IGk5MTVfZHJpdmVyX2RldmljZV9pc19hZ3AsCkBAIC05MSwyMSArOTAsMjEgQEAKIAkudmVyc2lvbiA9IHZlcnNpb24sCiAJLmlvY3RscyA9IGk5MTVfaW9jdGxzLAogCS5mb3BzID0gewotCQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkJLm9wZW4gPSBkcm1fb3BlbiwKLQkJLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKLQkJLmlvY3RsID0gZHJtX2lvY3RsLAotCQkubW1hcCA9IGRybV9tbWFwLAotCQkucG9sbCA9IGRybV9wb2xsLAotCQkuZmFzeW5jID0gZHJtX2Zhc3luYywKKwkJIC5vd25lciA9IFRISVNfTU9EVUxFLAorCQkgLm9wZW4gPSBkcm1fb3BlbiwKKwkJIC5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCisJCSAuaW9jdGwgPSBkcm1faW9jdGwsCisJCSAubW1hcCA9IGRybV9tbWFwLAorCQkgLnBvbGwgPSBkcm1fcG9sbCwKKwkJIC5mYXN5bmMgPSBkcm1fZmFzeW5jLAogI2lmZGVmIENPTkZJR19DT01QQVQKLQkJLmNvbXBhdF9pb2N0bCA9IGk5MTVfY29tcGF0X2lvY3RsLAorCQkgLmNvbXBhdF9pb2N0bCA9IGk5MTVfY29tcGF0X2lvY3RsLAogI2VuZGlmCi0JfSwKKwkJIH0sCiAJLnBjaV9kcml2ZXIgPSB7Ci0JCS5uYW1lICAgICAgICAgID0gRFJJVkVSX05BTUUsCi0JCS5pZF90YWJsZSAgICAgID0gcGNpaWRsaXN0LAotCX0KKwkJICAgICAgIC5uYW1lID0gRFJJVkVSX05BTUUsCisJCSAgICAgICAuaWRfdGFibGUgPSBwY2lpZGxpc3QsCisJCSAgICAgICB9CiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpOTE1X2luaXQodm9pZCkKQEAgLTEyMiw2ICsxMjEsNiBAQAogbW9kdWxlX2luaXQoaTkxNV9pbml0KTsKIG1vZHVsZV9leGl0KGk5MTVfZXhpdCk7CiAKLU1PRFVMRV9BVVRIT1IoIERSSVZFUl9BVVRIT1IgKTsKLU1PRFVMRV9ERVNDUklQVElPTiggRFJJVkVSX0RFU0MgKTsKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCBhbmQgYWRkaXRpb25hbCByaWdodHMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vaTkxNV9kcnYuaCBiL2RyaXZlcnMvY2hhci9kcm0vaTkxNV9kcnYuaAppbmRleCA3MGVkNGU2Li41MTFlZjFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9jaGFyL2RybS9pOTE1X2Rydi5oCkBAIC0xMDEsMTggKzEwMSwxOCBAQAogCiAJCQkJLyogaTkxNV9kbWEuYyAqLwogZXh0ZXJuIHZvaWQgaTkxNV9rZXJuZWxfbG9zdF9jb250ZXh0KGRybV9kZXZpY2VfdCAqIGRldik7Ci1leHRlcm4gdm9pZCBpOTE1X2RyaXZlcl9wcmV0YWtlZG93bihkcm1fZGV2aWNlX3QgKmRldik7Ci1leHRlcm4gdm9pZCBpOTE1X2RyaXZlcl9wcmVyZWxlYXNlKGRybV9kZXZpY2VfdCAqZGV2LCBEUk1GSUxFIGZpbHApOwotZXh0ZXJuIGludCBpOTE1X2RyaXZlcl9kZXZpY2VfaXNfYWdwKGRybV9kZXZpY2VfdCAqZGV2KTsKK2V4dGVybiB2b2lkIGk5MTVfZHJpdmVyX3ByZXRha2Vkb3duKGRybV9kZXZpY2VfdCAqIGRldik7CitleHRlcm4gdm9pZCBpOTE1X2RyaXZlcl9wcmVyZWxlYXNlKGRybV9kZXZpY2VfdCAqIGRldiwgRFJNRklMRSBmaWxwKTsKK2V4dGVybiBpbnQgaTkxNV9kcml2ZXJfZGV2aWNlX2lzX2FncChkcm1fZGV2aWNlX3QgKiBkZXYpOwogCiAvKiBpOTE1X2lycS5jICovCiBleHRlcm4gaW50IGk5MTVfaXJxX2VtaXQoRFJNX0lPQ1RMX0FSR1MpOwogZXh0ZXJuIGludCBpOTE1X2lycV93YWl0KERSTV9JT0NUTF9BUkdTKTsKIAogZXh0ZXJuIGlycXJldHVybl90IGk5MTVfZHJpdmVyX2lycV9oYW5kbGVyKERSTV9JUlFfQVJHUyk7Ci1leHRlcm4gdm9pZCBpOTE1X2RyaXZlcl9pcnFfcHJlaW5zdGFsbChkcm1fZGV2aWNlX3QgKmRldik7Ci1leHRlcm4gdm9pZCBpOTE1X2RyaXZlcl9pcnFfcG9zdGluc3RhbGwoZHJtX2RldmljZV90ICpkZXYpOwotZXh0ZXJuIHZvaWQgaTkxNV9kcml2ZXJfaXJxX3VuaW5zdGFsbChkcm1fZGV2aWNlX3QgKmRldik7CitleHRlcm4gdm9pZCBpOTE1X2RyaXZlcl9pcnFfcHJlaW5zdGFsbChkcm1fZGV2aWNlX3QgKiBkZXYpOworZXh0ZXJuIHZvaWQgaTkxNV9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsKGRybV9kZXZpY2VfdCAqIGRldik7CitleHRlcm4gdm9pZCBpOTE1X2RyaXZlcl9pcnFfdW5pbnN0YWxsKGRybV9kZXZpY2VfdCAqIGRldik7CiAKIC8qIGk5MTVfbWVtLmMgKi8KIGV4dGVybiBpbnQgaTkxNV9tZW1fYWxsb2MoRFJNX0lPQ1RMX0FSR1MpOwpAQCAtMTI1LDcgKzEyNSw2IEBACiBleHRlcm4gbG9uZyBpOTE1X2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwKIAkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYXJnKTsKIAotCiAjZGVmaW5lIEk5MTVfUkVBRChyZWcpICAgICAgICAgIERSTV9SRUFEMzIoZGV2X3ByaXYtPm1taW9fbWFwLCByZWcpCiAjZGVmaW5lIEk5MTVfV1JJVEUocmVnLHZhbCkgICAgIERSTV9XUklURTMyKGRldl9wcml2LT5tbWlvX21hcCwgcmVnLCB2YWwpCiAjZGVmaW5lIEk5MTVfUkVBRDE2KHJlZykgCURSTV9SRUFEMTYoZGV2X3ByaXYtPm1taW9fbWFwLCByZWcpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2k5MTVfaW9jMzIuYyBiL2RyaXZlcnMvY2hhci9kcm0vaTkxNV9pb2MzMi5jCmluZGV4IGZlMDA5ZTEuLjIyMThhOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vaTkxNV9pb2MzMi5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vaTkxNV9pb2MzMi5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIDMyLWJpdCBpb2N0bCBjb21wYXRpYmlsaXR5IHJvdXRpbmVzIGZvciB0aGUgaTkxNSBEUk0uCiAgKgotICogXGF1dGhvciBBbGFuIEhvdXJpaGFuZSA8YWxhbmhAZmFpcmxpdGUuZGVtb24uY28udWs+IAorICogXGF1dGhvciBBbGFuIEhvdXJpaGFuZSA8YWxhbmhAZmFpcmxpdGUuZGVtb24uY28udWs+CiAgKgogICoKICAqIENvcHlyaWdodCAoQykgUGF1bCBNYWNrZXJyYXMgMjAwNQpAQCAtNDIsNTEgKzQyLDU1IEBACiAJaW50IERSMTsJCS8qIGh3IGZsYWdzIGZvciBHRlhfT1BfRFJBV1JFQ1RfSU5GTyAqLwogCWludCBEUjQ7CQkvKiB3aW5kb3cgb3JpZ2luIGZvciBHRlhfT1BfRFJBV1JFQ1RfSU5GTyAqLwogCWludCBudW1fY2xpcHJlY3RzOwkvKiBtdWxpdHBhc3Mgd2l0aCBtdWx0aXBsZSBjbGlwcmVjdHM/ICovCi0JdTMyIGNsaXByZWN0czsJLyogcG9pbnRlciB0byB1c2Vyc3BhY2UgY2xpcHJlY3RzICovCisJdTMyIGNsaXByZWN0czsJCS8qIHBvaW50ZXIgdG8gdXNlcnNwYWNlIGNsaXByZWN0cyAqLwogfSBkcm1faTkxNV9iYXRjaGJ1ZmZlcjMyX3Q7CiAKIHN0YXRpYyBpbnQgY29tcGF0X2k5MTVfYmF0Y2hidWZmZXIoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCi0JCQkgICB1bnNpZ25lZCBsb25nIGFyZykKKwkJCQkgICB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlkcm1faTkxNV9iYXRjaGJ1ZmZlcjMyX3QgYmF0Y2hidWZmZXIzMjsKIAlkcm1faTkxNV9iYXRjaGJ1ZmZlcl90IF9fdXNlciAqYmF0Y2hidWZmZXI7Ci0JCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZiYXRjaGJ1ZmZlcjMyLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihiYXRjaGJ1ZmZlcjMyKSkpCisKKwlpZiAoY29weV9mcm9tX3VzZXIKKwkgICAgKCZiYXRjaGJ1ZmZlcjMyLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihiYXRjaGJ1ZmZlcjMyKSkpCiAJCXJldHVybiAtRUZBVUxUOwotCQorCiAJYmF0Y2hidWZmZXIgPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShzaXplb2YoKmJhdGNoYnVmZmVyKSk7CiAJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBiYXRjaGJ1ZmZlciwgc2l6ZW9mKCpiYXRjaGJ1ZmZlcikpCiAJICAgIHx8IF9fcHV0X3VzZXIoYmF0Y2hidWZmZXIzMi5zdGFydCwgJmJhdGNoYnVmZmVyLT5zdGFydCkKIAkgICAgfHwgX19wdXRfdXNlcihiYXRjaGJ1ZmZlcjMyLnVzZWQsICZiYXRjaGJ1ZmZlci0+dXNlZCkKIAkgICAgfHwgX19wdXRfdXNlcihiYXRjaGJ1ZmZlcjMyLkRSMSwgJmJhdGNoYnVmZmVyLT5EUjEpCiAJICAgIHx8IF9fcHV0X3VzZXIoYmF0Y2hidWZmZXIzMi5EUjQsICZiYXRjaGJ1ZmZlci0+RFI0KQotCSAgICB8fCBfX3B1dF91c2VyKGJhdGNoYnVmZmVyMzIubnVtX2NsaXByZWN0cywgJmJhdGNoYnVmZmVyLT5udW1fY2xpcHJlY3RzKQorCSAgICB8fCBfX3B1dF91c2VyKGJhdGNoYnVmZmVyMzIubnVtX2NsaXByZWN0cywKKwkJCSAgJmJhdGNoYnVmZmVyLT5udW1fY2xpcHJlY3RzKQogCSAgICB8fCBfX3B1dF91c2VyKChpbnQgX191c2VyICopKHVuc2lnbmVkIGxvbmcpYmF0Y2hidWZmZXIzMi5jbGlwcmVjdHMsCiAJCQkgICZiYXRjaGJ1ZmZlci0+Y2xpcHJlY3RzKSkKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JCisKIAlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJIERSTV9JT0NUTF9JOTE1X0JBVENIQlVGRkVSLCAodW5zaWduZWQgbG9uZykgYmF0Y2hidWZmZXIpOworCQkJIERSTV9JT0NUTF9JOTE1X0JBVENIQlVGRkVSLAorCQkJICh1bnNpZ25lZCBsb25nKWJhdGNoYnVmZmVyKTsKIH0KIAogdHlwZWRlZiBzdHJ1Y3QgX2RybV9pOTE1X2NtZGJ1ZmZlcjMyIHsKLQl1MzIgYnVmOwkvKiBwb2ludGVyIHRvIHVzZXJzcGFjZSBjb21tYW5kIGJ1ZmZlciAqLworCXUzMiBidWY7CQkvKiBwb2ludGVyIHRvIHVzZXJzcGFjZSBjb21tYW5kIGJ1ZmZlciAqLwogCWludCBzejsJCQkvKiBuciBieXRlcyBpbiBidWYgKi8KIAlpbnQgRFIxOwkJLyogaHcgZmxhZ3MgZm9yIEdGWF9PUF9EUkFXUkVDVF9JTkZPICovCiAJaW50IERSNDsJCS8qIHdpbmRvdyBvcmlnaW4gZm9yIEdGWF9PUF9EUkFXUkVDVF9JTkZPICovCiAJaW50IG51bV9jbGlwcmVjdHM7CS8qIG11bGl0cGFzcyB3aXRoIG11bHRpcGxlIGNsaXByZWN0cz8gKi8KLQl1MzIgY2xpcHJlY3RzOwkvKiBwb2ludGVyIHRvIHVzZXJzcGFjZSBjbGlwcmVjdHMgKi8KKwl1MzIgY2xpcHJlY3RzOwkJLyogcG9pbnRlciB0byB1c2Vyc3BhY2UgY2xpcHJlY3RzICovCiB9IGRybV9pOTE1X2NtZGJ1ZmZlcjMyX3Q7CiAKIHN0YXRpYyBpbnQgY29tcGF0X2k5MTVfY21kYnVmZmVyKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAotCQkJICAgdW5zaWduZWQgbG9uZyBhcmcpCisJCQkJIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCWRybV9pOTE1X2NtZGJ1ZmZlcjMyX3QgY21kYnVmZmVyMzI7CiAJZHJtX2k5MTVfY21kYnVmZmVyX3QgX191c2VyICpjbWRidWZmZXI7Ci0JCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZjbWRidWZmZXIzMiwgKHZvaWQgX191c2VyICopYXJnLCBzaXplb2YoY21kYnVmZmVyMzIpKSkKKworCWlmIChjb3B5X2Zyb21fdXNlcgorCSAgICAoJmNtZGJ1ZmZlcjMyLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihjbWRidWZmZXIzMikpKQogCQlyZXR1cm4gLUVGQVVMVDsKLQkKKwogCWNtZGJ1ZmZlciA9IGNvbXBhdF9hbGxvY191c2VyX3NwYWNlKHNpemVvZigqY21kYnVmZmVyKSk7CiAJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBjbWRidWZmZXIsIHNpemVvZigqY21kYnVmZmVyKSkKIAkgICAgfHwgX19wdXRfdXNlcigoaW50IF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKWNtZGJ1ZmZlcjMyLmJ1ZiwKQEAgLTk4LDkgKzEwMiw5IEBACiAJICAgIHx8IF9fcHV0X3VzZXIoKGludCBfX3VzZXIgKikodW5zaWduZWQgbG9uZyljbWRidWZmZXIzMi5jbGlwcmVjdHMsCiAJCQkgICZjbWRidWZmZXItPmNsaXByZWN0cykpCiAJCXJldHVybiAtRUZBVUxUOwotCQorCiAJcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfSTkxNV9DTURCVUZGRVIsICh1bnNpZ25lZCBsb25nKSBjbWRidWZmZXIpOworCQkJIERSTV9JT0NUTF9JOTE1X0NNREJVRkZFUiwgKHVuc2lnbmVkIGxvbmcpY21kYnVmZmVyKTsKIH0KIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX2k5MTVfaXJxX2VtaXQzMiB7CkBAIC0xMDgsMTIgKzExMiwxMiBAQAogfSBkcm1faTkxNV9pcnFfZW1pdDMyX3Q7CiAKIHN0YXRpYyBpbnQgY29tcGF0X2k5MTVfaXJxX2VtaXQoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCi0JCQkJICB1bnNpZ25lZCBsb25nIGFyZykKKwkJCQl1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlkcm1faTkxNV9pcnFfZW1pdDMyX3QgcmVxMzI7CiAJZHJtX2k5MTVfaXJxX2VtaXRfdCBfX3VzZXIgKnJlcXVlc3Q7CiAKLQlpZiAoY29weV9mcm9tX3VzZXIoJnJlcTMyLCAodm9pZCBfX3VzZXIgKikgYXJnLCBzaXplb2YocmVxMzIpKSkKKwlpZiAoY29weV9mcm9tX3VzZXIoJnJlcTMyLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihyZXEzMikpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAogCXJlcXVlc3QgPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShzaXplb2YoKnJlcXVlc3QpKTsKQEAgLTEyMyw3ICsxMjcsNyBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAogCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQkgRFJNX0lPQ1RMX0k5MTVfSVJRX0VNSVQsICh1bnNpZ25lZCBsb25nKSByZXF1ZXN0KTsKKwkJCSBEUk1fSU9DVExfSTkxNV9JUlFfRU1JVCwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiB9CiB0eXBlZGVmIHN0cnVjdCBkcm1faTkxNV9nZXRwYXJhbTMyIHsKIAlpbnQgcGFyYW07CkBAIC0xMzEsMTIgKzEzNSwxMiBAQAogfSBkcm1faTkxNV9nZXRwYXJhbTMyX3Q7CiAKIHN0YXRpYyBpbnQgY29tcGF0X2k5MTVfZ2V0cGFyYW0oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCi0JCQkJICAgICB1bnNpZ25lZCBsb25nIGFyZykKKwkJCQl1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlkcm1faTkxNV9nZXRwYXJhbTMyX3QgcmVxMzI7CiAJZHJtX2k5MTVfZ2V0cGFyYW1fdCBfX3VzZXIgKnJlcXVlc3Q7CiAKLQlpZiAoY29weV9mcm9tX3VzZXIoJnJlcTMyLCAodm9pZCBfX3VzZXIgKikgYXJnLCBzaXplb2YocmVxMzIpKSkKKwlpZiAoY29weV9mcm9tX3VzZXIoJnJlcTMyLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihyZXEzMikpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAogCXJlcXVlc3QgPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShzaXplb2YoKnJlcXVlc3QpKTsKQEAgLTE0Nyw3ICsxNTEsNyBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAogCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQkgRFJNX0lPQ1RMX0k5MTVfR0VUUEFSQU0sICh1bnNpZ25lZCBsb25nKSByZXF1ZXN0KTsKKwkJCSBEUk1fSU9DVExfSTkxNV9HRVRQQVJBTSwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiB9CiAKIHR5cGVkZWYgc3RydWN0IGRybV9pOTE1X21lbV9hbGxvYzMyIHsKQEAgLTE1OCwxMiArMTYyLDEyIEBACiB9IGRybV9pOTE1X21lbV9hbGxvYzMyX3Q7CiAKIHN0YXRpYyBpbnQgY29tcGF0X2k5MTVfYWxsb2Moc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCi0JCQkJICAgICB1bnNpZ25lZCBsb25nIGFyZykKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJZHJtX2k5MTVfbWVtX2FsbG9jMzJfdCByZXEzMjsKIAlkcm1faTkxNV9tZW1fYWxsb2NfdCBfX3VzZXIgKnJlcXVlc3Q7CiAKLQlpZiAoY29weV9mcm9tX3VzZXIoJnJlcTMyLCAodm9pZCBfX3VzZXIgKikgYXJnLCBzaXplb2YocmVxMzIpKSkKKwlpZiAoY29weV9mcm9tX3VzZXIoJnJlcTMyLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihyZXEzMikpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAogCXJlcXVlc3QgPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShzaXplb2YoKnJlcXVlc3QpKTsKQEAgLTE3NiwxMCArMTgwLDkgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJIERSTV9JT0NUTF9JOTE1X0FMTE9DLCAodW5zaWduZWQgbG9uZykgcmVxdWVzdCk7CisJCQkgRFJNX0lPQ1RMX0k5MTVfQUxMT0MsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOwogfQogCi0KIGRybV9pb2N0bF9jb21wYXRfdCAqaTkxNV9jb21wYXRfaW9jdGxzW10gPSB7CiAJW0RSTV9JOTE1X0JBVENIQlVGRkVSXSA9IGNvbXBhdF9pOTE1X2JhdGNoYnVmZmVyLAogCVtEUk1fSTkxNV9DTURCVUZGRVJdID0gY29tcGF0X2k5MTVfY21kYnVmZmVyLApAQCAtMTk3LDggKzIwMCw3IEBACiAgKiBccGFyYW0gYXJnIHVzZXIgYXJndW1lbnQuCiAgKiBccmV0dXJuIHplcm8gb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBudW1iZXIgb24gZmFpbHVyZS4KICAqLwotbG9uZyBpOTE1X2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwKLQkJCSB1bnNpZ25lZCBsb25nIGFyZykKK2xvbmcgaTkxNV9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXVuc2lnbmVkIGludCBuciA9IERSTV9JT0NUTF9OUihjbWQpOwogCWRybV9pb2N0bF9jb21wYXRfdCAqZm4gPSBOVUxMOwpAQCAtMjA2LDEzICsyMDgsMTMgQEAKIAogCWlmIChuciA8IERSTV9DT01NQU5EX0JBU0UpCiAJCXJldHVybiBkcm1fY29tcGF0X2lvY3RsKGZpbHAsIGNtZCwgYXJnKTsKLQkKKwogCWlmIChuciA8IERSTV9DT01NQU5EX0JBU0UgKyBEUk1fQVJSQVlfU0laRShpOTE1X2NvbXBhdF9pb2N0bHMpKQogCQlmbiA9IGk5MTVfY29tcGF0X2lvY3Rsc1tuciAtIERSTV9DT01NQU5EX0JBU0VdOwogCiAJbG9ja19rZXJuZWwoKTsJCS8qIFhYWCBmb3Igbm93ICovCiAJaWYgKGZuICE9IE5VTEwpCi0JCXJldCA9ICgqZm4pKGZpbHAsIGNtZCwgYXJnKTsKKwkJcmV0ID0gKCpmbikgKGZpbHAsIGNtZCwgYXJnKTsKIAllbHNlCiAJCXJldCA9IGRybV9pb2N0bChmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZSwgZmlscCwgY21kLCBhcmcpOwogCXVubG9ja19rZXJuZWwoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vaTkxNV9tZW0uYyBiL2RyaXZlcnMvY2hhci9kcm0vaTkxNV9tZW0uYwppbmRleCA5YjE2OThmLi4xMzE3NmQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2k5MTVfbWVtLmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9pOTE1X21lbS5jCkBAIC04Niw3ICs4Niw3IEBACiB9CiAKIC8qIFZlcnkgc2ltcGxlIGFsbG9jYXRvciBmb3IgYWdwIG1lbW9yeSwgd29ya2luZyBvbiBhIHN0YXRpYyByYW5nZQotICogYWxyZWFkeSBtYXBwZWQgaW50byBlYWNoIGNsaWVudCdzIGFkZHJlc3Mgc3BhY2UuICAKKyAqIGFscmVhZHkgbWFwcGVkIGludG8gZWFjaCBjbGllbnQncyBhZGRyZXNzIHNwYWNlLgogICovCiAKIHN0YXRpYyBzdHJ1Y3QgbWVtX2Jsb2NrICpzcGxpdF9ibG9jayhzdHJ1Y3QgbWVtX2Jsb2NrICpwLCBpbnQgc3RhcnQsIGludCBzaXplLApAQCAtOTQsNyArOTQsOCBAQAogewogCS8qIE1heWJlIGN1dCBvZmYgdGhlIHN0YXJ0IG9mIGFuIGV4aXN0aW5nIGJsb2NrICovCiAJaWYgKHN0YXJ0ID4gcC0+c3RhcnQpIHsKLQkJc3RydWN0IG1lbV9ibG9jayAqbmV3YmxvY2sgPSBkcm1fYWxsb2Moc2l6ZW9mKCpuZXdibG9jayksIERSTV9NRU1fQlVGTElTVFMpOworCQlzdHJ1Y3QgbWVtX2Jsb2NrICpuZXdibG9jayA9CisJCSAgICBkcm1fYWxsb2Moc2l6ZW9mKCpuZXdibG9jayksIERSTV9NRU1fQlVGTElTVFMpOwogCQlpZiAoIW5ld2Jsb2NrKQogCQkJZ290byBvdXQ7CiAJCW5ld2Jsb2NrLT5zdGFydCA9IHN0YXJ0OwpAQCAtMTEwLDcgKzExMSw4IEBACiAKIAkvKiBNYXliZSBjdXQgb2ZmIHRoZSBlbmQgb2YgYW4gZXhpc3RpbmcgYmxvY2sgKi8KIAlpZiAoc2l6ZSA8IHAtPnNpemUpIHsKLQkJc3RydWN0IG1lbV9ibG9jayAqbmV3YmxvY2sgPSBkcm1fYWxsb2Moc2l6ZW9mKCpuZXdibG9jayksIERSTV9NRU1fQlVGTElTVFMpOworCQlzdHJ1Y3QgbWVtX2Jsb2NrICpuZXdibG9jayA9CisJCSAgICBkcm1fYWxsb2Moc2l6ZW9mKCpuZXdibG9jayksIERSTV9NRU1fQlVGTElTVFMpOwogCQlpZiAoIW5ld2Jsb2NrKQogCQkJZ290byBvdXQ7CiAJCW5ld2Jsb2NrLT5zdGFydCA9IHN0YXJ0ICsgc2l6ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vbWdhX2RtYS5jIGIvZHJpdmVycy9jaGFyL2RybS9tZ2FfZG1hLmMKaW5kZXggZmM3ZDRhNS4uY2ZiZTM1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9tZ2FfZG1hLmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9tZ2FfZG1hLmMKQEAgLTI4LDcgKzI4LDcgQEAKIC8qKgogICogXGZpbGUgbWdhX2RtYS5jCiAgKiBETUEgc3VwcG9ydCBmb3IgTUdBIEcyMDAgLyBHNDAwLgotICogCisgKgogICogXGF1dGhvciBSaWNrYXJkIEUuIChSaWspIEZhaXRoIDxmYWl0aEB2YWxpbnV4LmNvbT4KICAqIFxhdXRob3IgSmVmZiBIYXJ0bWFubiA8amhhcnRtYW5uQHZhbGludXguY29tPgogICogXGF1dGhvciBLZWl0aCBXaGl0d2VsbCA8a2VpdGhAdHVuZ3N0ZW5ncmFwaGljcy5jb20+CkBAIC00NCw0MCArNDQsNDAgQEAKICNkZWZpbmUgTUdBX0RFRkFVTFRfVVNFQ19USU1FT1VUCTEwMDAwCiAjZGVmaW5lIE1HQV9GUkVFTElTVF9ERUJVRwkJMAogCi1zdGF0aWMgaW50IG1nYV9kb19jbGVhbnVwX2RtYSggZHJtX2RldmljZV90ICpkZXYgKTsKK3N0YXRpYyBpbnQgbWdhX2RvX2NsZWFudXBfZG1hKGRybV9kZXZpY2VfdCAqIGRldik7CiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqIEVuZ2luZSBjb250cm9sCiAgKi8KIAotaW50IG1nYV9kb193YWl0X2Zvcl9pZGxlKCBkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYgKQoraW50IG1nYV9kb193YWl0X2Zvcl9pZGxlKGRybV9tZ2FfcHJpdmF0ZV90ICogZGV2X3ByaXYpCiB7CiAJdTMyIHN0YXR1cyA9IDA7CiAJaW50IGk7Ci0JRFJNX0RFQlVHKCAiXG4iICk7CisJRFJNX0RFQlVHKCJcbiIpOwogCi0JZm9yICggaSA9IDAgOyBpIDwgZGV2X3ByaXYtPnVzZWNfdGltZW91dCA7IGkrKyApIHsKLQkJc3RhdHVzID0gTUdBX1JFQUQoIE1HQV9TVEFUVVMgKSAmIE1HQV9FTkdJTkVfSURMRV9NQVNLOwotCQlpZiAoIHN0YXR1cyA9PSBNR0FfRU5EUFJETUFTVFMgKSB7Ci0JCQlNR0FfV1JJVEU4KCBNR0FfQ1JUQ19JTkRFWCwgMCApOworCWZvciAoaSA9IDA7IGkgPCBkZXZfcHJpdi0+dXNlY190aW1lb3V0OyBpKyspIHsKKwkJc3RhdHVzID0gTUdBX1JFQUQoTUdBX1NUQVRVUykgJiBNR0FfRU5HSU5FX0lETEVfTUFTSzsKKwkJaWYgKHN0YXR1cyA9PSBNR0FfRU5EUFJETUFTVFMpIHsKKwkJCU1HQV9XUklURTgoTUdBX0NSVENfSU5ERVgsIDApOwogCQkJcmV0dXJuIDA7CiAJCX0KLQkJRFJNX1VERUxBWSggMSApOworCQlEUk1fVURFTEFZKDEpOwogCX0KIAogI2lmIE1HQV9ETUFfREVCVUcKLQlEUk1fRVJST1IoICJmYWlsZWQhXG4iICk7Ci0JRFJNX0lORk8oICIgICBzdGF0dXM9MHglMDh4XG4iLCBzdGF0dXMgKTsKKwlEUk1fRVJST1IoImZhaWxlZCFcbiIpOworCURSTV9JTkZPKCIgICBzdGF0dXM9MHglMDh4XG4iLCBzdGF0dXMpOwogI2VuZGlmCiAJcmV0dXJuIERSTV9FUlIoRUJVU1kpOwogfQogCi1zdGF0aWMgaW50IG1nYV9kb19kbWFfcmVzZXQoIGRybV9tZ2FfcHJpdmF0ZV90ICpkZXZfcHJpdiApCitzdGF0aWMgaW50IG1nYV9kb19kbWFfcmVzZXQoZHJtX21nYV9wcml2YXRlX3QgKiBkZXZfcHJpdikKIHsKIAlkcm1fbWdhX3NhcmVhX3QgKnNhcmVhX3ByaXYgPSBkZXZfcHJpdi0+c2FyZWFfcHJpdjsKIAlkcm1fbWdhX3ByaW1hcnlfYnVmZmVyX3QgKnByaW1hcnkgPSAmZGV2X3ByaXYtPnByaW07CiAKLQlEUk1fREVCVUcoICJcbiIgKTsKKwlEUk1fREVCVUcoIlxuIik7CiAKIAkvKiBUaGUgcHJpbWFyeSBETUEgc3RyZWFtIHNob3VsZCBsb29rIGxpa2UgbmV3IHJpZ2h0IGFib3V0IG5vdy4KIAkgKi8KQEAgLTEwMCwyNCArMTAwLDI1IEBACiAgKiBQcmltYXJ5IERNQSBzdHJlYW0KICAqLwogCi12b2lkIG1nYV9kb19kbWFfZmx1c2goIGRybV9tZ2FfcHJpdmF0ZV90ICpkZXZfcHJpdiApCit2b2lkIG1nYV9kb19kbWFfZmx1c2goZHJtX21nYV9wcml2YXRlX3QgKiBkZXZfcHJpdikKIHsKIAlkcm1fbWdhX3ByaW1hcnlfYnVmZmVyX3QgKnByaW1hcnkgPSAmZGV2X3ByaXYtPnByaW07CiAJdTMyIGhlYWQsIHRhaWw7CiAJdTMyIHN0YXR1cyA9IDA7CiAJaW50IGk7Ci0gCURNQV9MT0NBTFM7Ci0JRFJNX0RFQlVHKCAiXG4iICk7CisJRE1BX0xPQ0FMUzsKKwlEUk1fREVCVUcoIlxuIik7CiAKLSAgICAgICAgLyogV2UgbmVlZCB0byB3YWl0IHNvIHRoYXQgd2UgY2FuIGRvIGFuIHNhZmUgZmx1c2ggKi8KLQlmb3IgKCBpID0gMCA7IGkgPCBkZXZfcHJpdi0+dXNlY190aW1lb3V0IDsgaSsrICkgewotCQlzdGF0dXMgPSBNR0FfUkVBRCggTUdBX1NUQVRVUyApICYgTUdBX0VOR0lORV9JRExFX01BU0s7Ci0JCWlmICggc3RhdHVzID09IE1HQV9FTkRQUkRNQVNUUyApIGJyZWFrOwotCQlEUk1fVURFTEFZKCAxICk7CisJLyogV2UgbmVlZCB0byB3YWl0IHNvIHRoYXQgd2UgY2FuIGRvIGFuIHNhZmUgZmx1c2ggKi8KKwlmb3IgKGkgPSAwOyBpIDwgZGV2X3ByaXYtPnVzZWNfdGltZW91dDsgaSsrKSB7CisJCXN0YXR1cyA9IE1HQV9SRUFEKE1HQV9TVEFUVVMpICYgTUdBX0VOR0lORV9JRExFX01BU0s7CisJCWlmIChzdGF0dXMgPT0gTUdBX0VORFBSRE1BU1RTKQorCQkJYnJlYWs7CisJCURSTV9VREVMQVkoMSk7CiAJfQogCi0JaWYgKCBwcmltYXJ5LT50YWlsID09IHByaW1hcnktPmxhc3RfZmx1c2ggKSB7Ci0JCURSTV9ERUJVRyggIiAgIGJhaWxpbmcgb3V0Li4uXG4iICk7CisJaWYgKHByaW1hcnktPnRhaWwgPT0gcHJpbWFyeS0+bGFzdF9mbHVzaCkgeworCQlEUk1fREVCVUcoIiAgIGJhaWxpbmcgb3V0Li4uXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTI3LDQ4ICsxMjgsNDYgQEAKIAkgKiBhY3R1YWxseSAocGFydGlhbGx5PykgcmVhZHMgdGhlIGZpcnN0IG9mIHRoZXNlIGNvbW1hbmRzLgogCSAqIFNlZSBwYWdlIDQtMTYgaW4gdGhlIEc0MDAgbWFudWFsLCBtaWRkbGUgb2YgdGhlIHBhZ2Ugb3Igc28uCiAJICovCi0JQkVHSU5fRE1BKCAxICk7CisJQkVHSU5fRE1BKDEpOwogCi0JRE1BX0JMT0NLKCBNR0FfRE1BUEFELCAgMHgwMDAwMDAwMCwKLQkJICAgTUdBX0RNQVBBRCwgIDB4MDAwMDAwMDAsCi0JCSAgIE1HQV9ETUFQQUQsICAweDAwMDAwMDAwLAotCQkgICBNR0FfRE1BUEFELAkweDAwMDAwMDAwICk7CisJRE1BX0JMT0NLKE1HQV9ETUFQQUQsIDB4MDAwMDAwMDAsCisJCSAgTUdBX0RNQVBBRCwgMHgwMDAwMDAwMCwKKwkJICBNR0FfRE1BUEFELCAweDAwMDAwMDAwLCBNR0FfRE1BUEFELCAweDAwMDAwMDAwKTsKIAogCUFEVkFOQ0VfRE1BKCk7CiAKIAlwcmltYXJ5LT5sYXN0X2ZsdXNoID0gcHJpbWFyeS0+dGFpbDsKIAotCWhlYWQgPSBNR0FfUkVBRCggTUdBX1BSSU1BRERSRVNTICk7CisJaGVhZCA9IE1HQV9SRUFEKE1HQV9QUklNQUREUkVTUyk7CiAKLQlpZiAoIGhlYWQgPD0gdGFpbCApIHsKKwlpZiAoaGVhZCA8PSB0YWlsKSB7CiAJCXByaW1hcnktPnNwYWNlID0gcHJpbWFyeS0+c2l6ZSAtIHByaW1hcnktPnRhaWw7CiAJfSBlbHNlIHsKIAkJcHJpbWFyeS0+c3BhY2UgPSBoZWFkIC0gdGFpbDsKIAl9CiAKLQlEUk1fREVCVUcoICIgICBoZWFkID0gMHglMDZseFxuIiwgaGVhZCAtIGRldl9wcml2LT5wcmltYXJ5LT5vZmZzZXQgKTsKLQlEUk1fREVCVUcoICIgICB0YWlsID0gMHglMDZseFxuIiwgdGFpbCAtIGRldl9wcml2LT5wcmltYXJ5LT5vZmZzZXQgKTsKLQlEUk1fREVCVUcoICIgIHNwYWNlID0gMHglMDZ4XG4iLCBwcmltYXJ5LT5zcGFjZSApOworCURSTV9ERUJVRygiICAgaGVhZCA9IDB4JTA2bHhcbiIsIGhlYWQgLSBkZXZfcHJpdi0+cHJpbWFyeS0+b2Zmc2V0KTsKKwlEUk1fREVCVUcoIiAgIHRhaWwgPSAweCUwNmx4XG4iLCB0YWlsIC0gZGV2X3ByaXYtPnByaW1hcnktPm9mZnNldCk7CisJRFJNX0RFQlVHKCIgIHNwYWNlID0gMHglMDZ4XG4iLCBwcmltYXJ5LT5zcGFjZSk7CiAKIAltZ2FfZmx1c2hfd3JpdGVfY29tYmluZSgpOwogCU1HQV9XUklURShNR0FfUFJJTUVORCwgdGFpbCB8IGRldl9wcml2LT5kbWFfYWNjZXNzKTsKIAotCURSTV9ERUJVRyggImRvbmUuXG4iICk7CisJRFJNX0RFQlVHKCJkb25lLlxuIik7CiB9CiAKLXZvaWQgbWdhX2RvX2RtYV93cmFwX3N0YXJ0KCBkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYgKQordm9pZCBtZ2FfZG9fZG1hX3dyYXBfc3RhcnQoZHJtX21nYV9wcml2YXRlX3QgKiBkZXZfcHJpdikKIHsKIAlkcm1fbWdhX3ByaW1hcnlfYnVmZmVyX3QgKnByaW1hcnkgPSAmZGV2X3ByaXYtPnByaW07CiAJdTMyIGhlYWQsIHRhaWw7CiAJRE1BX0xPQ0FMUzsKLQlEUk1fREVCVUcoICJcbiIgKTsKKwlEUk1fREVCVUcoIlxuIik7CiAKIAlCRUdJTl9ETUFfV1JBUCgpOwogCi0JRE1BX0JMT0NLKCBNR0FfRE1BUEFELAkweDAwMDAwMDAwLAotCQkgICBNR0FfRE1BUEFELAkweDAwMDAwMDAwLAotCQkgICBNR0FfRE1BUEFELAkweDAwMDAwMDAwLAotCQkgICBNR0FfRE1BUEFELAkweDAwMDAwMDAwICk7CisJRE1BX0JMT0NLKE1HQV9ETUFQQUQsIDB4MDAwMDAwMDAsCisJCSAgTUdBX0RNQVBBRCwgMHgwMDAwMDAwMCwKKwkJICBNR0FfRE1BUEFELCAweDAwMDAwMDAwLCBNR0FfRE1BUEFELCAweDAwMDAwMDAwKTsKIAogCUFEVkFOQ0VfRE1BKCk7CiAKQEAgLTE3OCw0NSArMTc3LDQzIEBACiAJcHJpbWFyeS0+bGFzdF9mbHVzaCA9IDA7CiAJcHJpbWFyeS0+bGFzdF93cmFwKys7CiAKLQloZWFkID0gTUdBX1JFQUQoIE1HQV9QUklNQUREUkVTUyApOworCWhlYWQgPSBNR0FfUkVBRChNR0FfUFJJTUFERFJFU1MpOwogCi0JaWYgKCBoZWFkID09IGRldl9wcml2LT5wcmltYXJ5LT5vZmZzZXQgKSB7CisJaWYgKGhlYWQgPT0gZGV2X3ByaXYtPnByaW1hcnktPm9mZnNldCkgewogCQlwcmltYXJ5LT5zcGFjZSA9IHByaW1hcnktPnNpemU7CiAJfSBlbHNlIHsKIAkJcHJpbWFyeS0+c3BhY2UgPSBoZWFkIC0gZGV2X3ByaXYtPnByaW1hcnktPm9mZnNldDsKIAl9CiAKLQlEUk1fREVCVUcoICIgICBoZWFkID0gMHglMDZseFxuIiwKLQkJICBoZWFkIC0gZGV2X3ByaXYtPnByaW1hcnktPm9mZnNldCApOwotCURSTV9ERUJVRyggIiAgIHRhaWwgPSAweCUwNnhcbiIsIHByaW1hcnktPnRhaWwgKTsKLQlEUk1fREVCVUcoICIgICB3cmFwID0gJWRcbiIsIHByaW1hcnktPmxhc3Rfd3JhcCApOwotCURSTV9ERUJVRyggIiAgc3BhY2UgPSAweCUwNnhcbiIsIHByaW1hcnktPnNwYWNlICk7CisJRFJNX0RFQlVHKCIgICBoZWFkID0gMHglMDZseFxuIiwgaGVhZCAtIGRldl9wcml2LT5wcmltYXJ5LT5vZmZzZXQpOworCURSTV9ERUJVRygiICAgdGFpbCA9IDB4JTA2eFxuIiwgcHJpbWFyeS0+dGFpbCk7CisJRFJNX0RFQlVHKCIgICB3cmFwID0gJWRcbiIsIHByaW1hcnktPmxhc3Rfd3JhcCk7CisJRFJNX0RFQlVHKCIgIHNwYWNlID0gMHglMDZ4XG4iLCBwcmltYXJ5LT5zcGFjZSk7CiAKIAltZ2FfZmx1c2hfd3JpdGVfY29tYmluZSgpOwogCU1HQV9XUklURShNR0FfUFJJTUVORCwgdGFpbCB8IGRldl9wcml2LT5kbWFfYWNjZXNzKTsKIAotCXNldF9iaXQoIDAsICZwcmltYXJ5LT53cmFwcGVkICk7Ci0JRFJNX0RFQlVHKCAiZG9uZS5cbiIgKTsKKwlzZXRfYml0KDAsICZwcmltYXJ5LT53cmFwcGVkKTsKKwlEUk1fREVCVUcoImRvbmUuXG4iKTsKIH0KIAotdm9pZCBtZ2FfZG9fZG1hX3dyYXBfZW5kKCBkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYgKQordm9pZCBtZ2FfZG9fZG1hX3dyYXBfZW5kKGRybV9tZ2FfcHJpdmF0ZV90ICogZGV2X3ByaXYpCiB7CiAJZHJtX21nYV9wcmltYXJ5X2J1ZmZlcl90ICpwcmltYXJ5ID0gJmRldl9wcml2LT5wcmltOwogCWRybV9tZ2Ffc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9wcml2OwogCXUzMiBoZWFkID0gZGV2X3ByaXYtPnByaW1hcnktPm9mZnNldDsKLQlEUk1fREVCVUcoICJcbiIgKTsKKwlEUk1fREVCVUcoIlxuIik7CiAKIAlzYXJlYV9wcml2LT5sYXN0X3dyYXArKzsKLQlEUk1fREVCVUcoICIgICB3cmFwID0gJWRcbiIsIHNhcmVhX3ByaXYtPmxhc3Rfd3JhcCApOworCURSTV9ERUJVRygiICAgd3JhcCA9ICVkXG4iLCBzYXJlYV9wcml2LT5sYXN0X3dyYXApOwogCiAJbWdhX2ZsdXNoX3dyaXRlX2NvbWJpbmUoKTsKLQlNR0FfV1JJVEUoIE1HQV9QUklNQUREUkVTUywgaGVhZCB8IE1HQV9ETUFfR0VORVJBTCApOworCU1HQV9XUklURShNR0FfUFJJTUFERFJFU1MsIGhlYWQgfCBNR0FfRE1BX0dFTkVSQUwpOwogCi0JY2xlYXJfYml0KCAwLCAmcHJpbWFyeS0+d3JhcHBlZCApOwotCURSTV9ERUJVRyggImRvbmUuXG4iICk7CisJY2xlYXJfYml0KDAsICZwcmltYXJ5LT53cmFwcGVkKTsKKwlEUk1fREVCVUcoImRvbmUuXG4iKTsKIH0KIAotCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiBGcmVlbGlzdCBtYW5hZ2VtZW50CiAgKi8KQEAgLTIyNSw2MyArMjIyLDYxIEBACiAjZGVmaW5lIE1HQV9CVUZGRVJfRlJFRQkJMAogCiAjaWYgTUdBX0ZSRUVMSVNUX0RFQlVHCi1zdGF0aWMgdm9pZCBtZ2FfZnJlZWxpc3RfcHJpbnQoIGRybV9kZXZpY2VfdCAqZGV2ICkKK3N0YXRpYyB2b2lkIG1nYV9mcmVlbGlzdF9wcmludChkcm1fZGV2aWNlX3QgKiBkZXYpCiB7CiAJZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlkcm1fbWdhX2ZyZWVsaXN0X3QgKmVudHJ5OwogCi0JRFJNX0lORk8oICJcbiIgKTsKLQlEUk1fSU5GTyggImN1cnJlbnQgZGlzcGF0Y2g6IGxhc3Q9MHgleCBkb25lPTB4JXhcbiIsCi0JCSAgZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZGlzcGF0Y2gsCi0JCSAgKHVuc2lnbmVkIGludCkoTUdBX1JFQUQoIE1HQV9QUklNQUREUkVTUyApIC0KLQkJCQkgZGV2X3ByaXYtPnByaW1hcnktPm9mZnNldCkgKTsKLQlEUk1fSU5GTyggImN1cnJlbnQgZnJlZWxpc3Q6XG4iICk7CisJRFJNX0lORk8oIlxuIik7CisJRFJNX0lORk8oImN1cnJlbnQgZGlzcGF0Y2g6IGxhc3Q9MHgleCBkb25lPTB4JXhcbiIsCisJCSBkZXZfcHJpdi0+c2FyZWFfcHJpdi0+bGFzdF9kaXNwYXRjaCwKKwkJICh1bnNpZ25lZCBpbnQpKE1HQV9SRUFEKE1HQV9QUklNQUREUkVTUykgLQorCQkJCWRldl9wcml2LT5wcmltYXJ5LT5vZmZzZXQpKTsKKwlEUk1fSU5GTygiY3VycmVudCBmcmVlbGlzdDpcbiIpOwogCi0JZm9yICggZW50cnkgPSBkZXZfcHJpdi0+aGVhZC0+bmV4dCA7IGVudHJ5IDsgZW50cnkgPSBlbnRyeS0+bmV4dCApIHsKLQkJRFJNX0lORk8oICIgICAlcCAgIGlkeD0lMmQgIGFnZT0weCV4IDB4JTA2bHhcbiIsCi0JCQkgIGVudHJ5LCBlbnRyeS0+YnVmLT5pZHgsIGVudHJ5LT5hZ2UuaGVhZCwKLQkJCSAgZW50cnktPmFnZS5oZWFkIC0gZGV2X3ByaXYtPnByaW1hcnktPm9mZnNldCApOworCWZvciAoZW50cnkgPSBkZXZfcHJpdi0+aGVhZC0+bmV4dDsgZW50cnk7IGVudHJ5ID0gZW50cnktPm5leHQpIHsKKwkJRFJNX0lORk8oIiAgICVwICAgaWR4PSUyZCAgYWdlPTB4JXggMHglMDZseFxuIiwKKwkJCSBlbnRyeSwgZW50cnktPmJ1Zi0+aWR4LCBlbnRyeS0+YWdlLmhlYWQsCisJCQkgZW50cnktPmFnZS5oZWFkIC0gZGV2X3ByaXYtPnByaW1hcnktPm9mZnNldCk7CiAJfQotCURSTV9JTkZPKCAiXG4iICk7CisJRFJNX0lORk8oIlxuIik7CiB9CiAjZW5kaWYKIAotc3RhdGljIGludCBtZ2FfZnJlZWxpc3RfaW5pdCggZHJtX2RldmljZV90ICpkZXYsIGRybV9tZ2FfcHJpdmF0ZV90ICpkZXZfcHJpdiApCitzdGF0aWMgaW50IG1nYV9mcmVlbGlzdF9pbml0KGRybV9kZXZpY2VfdCAqIGRldiwgZHJtX21nYV9wcml2YXRlX3QgKiBkZXZfcHJpdikKIHsKIAlkcm1fZGV2aWNlX2RtYV90ICpkbWEgPSBkZXYtPmRtYTsKIAlkcm1fYnVmX3QgKmJ1ZjsKIAlkcm1fbWdhX2J1Zl9wcml2X3QgKmJ1Zl9wcml2OwogCWRybV9tZ2FfZnJlZWxpc3RfdCAqZW50cnk7CiAJaW50IGk7Ci0JRFJNX0RFQlVHKCAiY291bnQ9JWRcbiIsIGRtYS0+YnVmX2NvdW50ICk7CisJRFJNX0RFQlVHKCJjb3VudD0lZFxuIiwgZG1hLT5idWZfY291bnQpOwogCi0JZGV2X3ByaXYtPmhlYWQgPSBkcm1fYWxsb2MoIHNpemVvZihkcm1fbWdhX2ZyZWVsaXN0X3QpLAotCQkJCSAgICAgRFJNX01FTV9EUklWRVIgKTsKLQlpZiAoIGRldl9wcml2LT5oZWFkID09IE5VTEwgKQorCWRldl9wcml2LT5oZWFkID0gZHJtX2FsbG9jKHNpemVvZihkcm1fbWdhX2ZyZWVsaXN0X3QpLCBEUk1fTUVNX0RSSVZFUik7CisJaWYgKGRldl9wcml2LT5oZWFkID09IE5VTEwpCiAJCXJldHVybiBEUk1fRVJSKEVOT01FTSk7CiAKLQltZW1zZXQoIGRldl9wcml2LT5oZWFkLCAwLCBzaXplb2YoZHJtX21nYV9mcmVlbGlzdF90KSApOwotCVNFVF9BR0UoICZkZXZfcHJpdi0+aGVhZC0+YWdlLCBNR0FfQlVGRkVSX1VTRUQsIDAgKTsKKwltZW1zZXQoZGV2X3ByaXYtPmhlYWQsIDAsIHNpemVvZihkcm1fbWdhX2ZyZWVsaXN0X3QpKTsKKwlTRVRfQUdFKCZkZXZfcHJpdi0+aGVhZC0+YWdlLCBNR0FfQlVGRkVSX1VTRUQsIDApOwogCi0JZm9yICggaSA9IDAgOyBpIDwgZG1hLT5idWZfY291bnQgOyBpKysgKSB7CisJZm9yIChpID0gMDsgaSA8IGRtYS0+YnVmX2NvdW50OyBpKyspIHsKIAkJYnVmID0gZG1hLT5idWZsaXN0W2ldOwotCSAgICAgICAgYnVmX3ByaXYgPSBidWYtPmRldl9wcml2YXRlOworCQlidWZfcHJpdiA9IGJ1Zi0+ZGV2X3ByaXZhdGU7CiAKLQkJZW50cnkgPSBkcm1fYWxsb2MoIHNpemVvZihkcm1fbWdhX2ZyZWVsaXN0X3QpLAotCQkJCSAgICBEUk1fTUVNX0RSSVZFUiApOwotCQlpZiAoIGVudHJ5ID09IE5VTEwgKQorCQllbnRyeSA9IGRybV9hbGxvYyhzaXplb2YoZHJtX21nYV9mcmVlbGlzdF90KSwgRFJNX01FTV9EUklWRVIpOworCQlpZiAoZW50cnkgPT0gTlVMTCkKIAkJCXJldHVybiBEUk1fRVJSKEVOT01FTSk7CiAKLQkJbWVtc2V0KCBlbnRyeSwgMCwgc2l6ZW9mKGRybV9tZ2FfZnJlZWxpc3RfdCkgKTsKKwkJbWVtc2V0KGVudHJ5LCAwLCBzaXplb2YoZHJtX21nYV9mcmVlbGlzdF90KSk7CiAKIAkJZW50cnktPm5leHQgPSBkZXZfcHJpdi0+aGVhZC0+bmV4dDsKIAkJZW50cnktPnByZXYgPSBkZXZfcHJpdi0+aGVhZDsKLQkJU0VUX0FHRSggJmVudHJ5LT5hZ2UsIE1HQV9CVUZGRVJfRlJFRSwgMCApOworCQlTRVRfQUdFKCZlbnRyeS0+YWdlLCBNR0FfQlVGRkVSX0ZSRUUsIDApOwogCQllbnRyeS0+YnVmID0gYnVmOwogCi0JCWlmICggZGV2X3ByaXYtPmhlYWQtPm5leHQgIT0gTlVMTCApCisJCWlmIChkZXZfcHJpdi0+aGVhZC0+bmV4dCAhPSBOVUxMKQogCQkJZGV2X3ByaXYtPmhlYWQtPm5leHQtPnByZXYgPSBlbnRyeTsKLQkJaWYgKCBlbnRyeS0+bmV4dCA9PSBOVUxMICkKKwkJaWYgKGVudHJ5LT5uZXh0ID09IE5VTEwpCiAJCQlkZXZfcHJpdi0+dGFpbCA9IGVudHJ5OwogCiAJCWJ1Zl9wcml2LT5saXN0X2VudHJ5ID0gZW50cnk7CkBAIC0yOTQsMTcgKzI4OSwxNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBtZ2FfZnJlZWxpc3RfY2xlYW51cCggZHJtX2RldmljZV90ICpkZXYgKQorc3RhdGljIHZvaWQgbWdhX2ZyZWVsaXN0X2NsZWFudXAoZHJtX2RldmljZV90ICogZGV2KQogewogCWRybV9tZ2FfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJZHJtX21nYV9mcmVlbGlzdF90ICplbnRyeTsKIAlkcm1fbWdhX2ZyZWVsaXN0X3QgKm5leHQ7Ci0JRFJNX0RFQlVHKCAiXG4iICk7CisJRFJNX0RFQlVHKCJcbiIpOwogCiAJZW50cnkgPSBkZXZfcHJpdi0+aGVhZDsKLQl3aGlsZSAoIGVudHJ5ICkgeworCXdoaWxlIChlbnRyeSkgewogCQluZXh0ID0gZW50cnktPm5leHQ7Ci0JCWRybV9mcmVlKCBlbnRyeSwgc2l6ZW9mKGRybV9tZ2FfZnJlZWxpc3RfdCksIERSTV9NRU1fRFJJVkVSICk7CisJCWRybV9mcmVlKGVudHJ5LCBzaXplb2YoZHJtX21nYV9mcmVlbGlzdF90KSwgRFJNX01FTV9EUklWRVIpOwogCQllbnRyeSA9IG5leHQ7CiAJfQogCkBAIC0zMTQsNzEgKzMwOSw2OSBAQAogI2lmIDAKIC8qIEZJWE1FOiBTdGlsbCBuZWVkZWQ/CiAgKi8KLXN0YXRpYyB2b2lkIG1nYV9mcmVlbGlzdF9yZXNldCggZHJtX2RldmljZV90ICpkZXYgKQorc3RhdGljIHZvaWQgbWdhX2ZyZWVsaXN0X3Jlc2V0KGRybV9kZXZpY2VfdCAqIGRldikKIHsKIAlkcm1fZGV2aWNlX2RtYV90ICpkbWEgPSBkZXYtPmRtYTsKIAlkcm1fYnVmX3QgKmJ1ZjsKIAlkcm1fbWdhX2J1Zl9wcml2X3QgKmJ1Zl9wcml2OwogCWludCBpOwogCi0JZm9yICggaSA9IDAgOyBpIDwgZG1hLT5idWZfY291bnQgOyBpKysgKSB7CisJZm9yIChpID0gMDsgaSA8IGRtYS0+YnVmX2NvdW50OyBpKyspIHsKIAkJYnVmID0gZG1hLT5idWZsaXN0W2ldOwotCSAgICAgICAgYnVmX3ByaXYgPSBidWYtPmRldl9wcml2YXRlOwotCQlTRVRfQUdFKCAmYnVmX3ByaXYtPmxpc3RfZW50cnktPmFnZSwKLQkJCSBNR0FfQlVGRkVSX0ZSRUUsIDAgKTsKKwkJYnVmX3ByaXYgPSBidWYtPmRldl9wcml2YXRlOworCQlTRVRfQUdFKCZidWZfcHJpdi0+bGlzdF9lbnRyeS0+YWdlLCBNR0FfQlVGRkVSX0ZSRUUsIDApOwogCX0KIH0KICNlbmRpZgogCi1zdGF0aWMgZHJtX2J1Zl90ICptZ2FfZnJlZWxpc3RfZ2V0KCBkcm1fZGV2aWNlX3QgKmRldiApCitzdGF0aWMgZHJtX2J1Zl90ICptZ2FfZnJlZWxpc3RfZ2V0KGRybV9kZXZpY2VfdCAqIGRldikKIHsKIAlkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWRybV9tZ2FfZnJlZWxpc3RfdCAqbmV4dDsKIAlkcm1fbWdhX2ZyZWVsaXN0X3QgKnByZXY7CiAJZHJtX21nYV9mcmVlbGlzdF90ICp0YWlsID0gZGV2X3ByaXYtPnRhaWw7CiAJdTMyIGhlYWQsIHdyYXA7Ci0JRFJNX0RFQlVHKCAiXG4iICk7CisJRFJNX0RFQlVHKCJcbiIpOwogCi0JaGVhZCA9IE1HQV9SRUFEKCBNR0FfUFJJTUFERFJFU1MgKTsKKwloZWFkID0gTUdBX1JFQUQoTUdBX1BSSU1BRERSRVNTKTsKIAl3cmFwID0gZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3Rfd3JhcDsKIAotCURSTV9ERUJVRyggIiAgIHRhaWw9MHglMDZseCAlZFxuIiwKLQkJICAgdGFpbC0+YWdlLmhlYWQgPwotCQkgICB0YWlsLT5hZ2UuaGVhZCAtIGRldl9wcml2LT5wcmltYXJ5LT5vZmZzZXQgOiAwLAotCQkgICB0YWlsLT5hZ2Uud3JhcCApOwotCURSTV9ERUJVRyggIiAgIGhlYWQ9MHglMDZseCAlZFxuIiwKLQkJICAgaGVhZCAtIGRldl9wcml2LT5wcmltYXJ5LT5vZmZzZXQsIHdyYXAgKTsKKwlEUk1fREVCVUcoIiAgIHRhaWw9MHglMDZseCAlZFxuIiwKKwkJICB0YWlsLT5hZ2UuaGVhZCA/CisJCSAgdGFpbC0+YWdlLmhlYWQgLSBkZXZfcHJpdi0+cHJpbWFyeS0+b2Zmc2V0IDogMCwKKwkJICB0YWlsLT5hZ2Uud3JhcCk7CisJRFJNX0RFQlVHKCIgICBoZWFkPTB4JTA2bHggJWRcbiIsCisJCSAgaGVhZCAtIGRldl9wcml2LT5wcmltYXJ5LT5vZmZzZXQsIHdyYXApOwogCi0JaWYgKCBURVNUX0FHRSggJnRhaWwtPmFnZSwgaGVhZCwgd3JhcCApICkgeworCWlmIChURVNUX0FHRSgmdGFpbC0+YWdlLCBoZWFkLCB3cmFwKSkgewogCQlwcmV2ID0gZGV2X3ByaXYtPnRhaWwtPnByZXY7CiAJCW5leHQgPSBkZXZfcHJpdi0+dGFpbDsKIAkJcHJldi0+bmV4dCA9IE5VTEw7CiAJCW5leHQtPnByZXYgPSBuZXh0LT5uZXh0ID0gTlVMTDsKIAkJZGV2X3ByaXYtPnRhaWwgPSBwcmV2OwotCQlTRVRfQUdFKCAmbmV4dC0+YWdlLCBNR0FfQlVGRkVSX1VTRUQsIDAgKTsKKwkJU0VUX0FHRSgmbmV4dC0+YWdlLCBNR0FfQlVGRkVSX1VTRUQsIDApOwogCQlyZXR1cm4gbmV4dC0+YnVmOwogCX0KIAotCURSTV9ERUJVRyggInJldHVybmluZyBOVUxMIVxuIiApOworCURSTV9ERUJVRygicmV0dXJuaW5nIE5VTEwhXG4iKTsKIAlyZXR1cm4gTlVMTDsKIH0KIAotaW50IG1nYV9mcmVlbGlzdF9wdXQoIGRybV9kZXZpY2VfdCAqZGV2LCBkcm1fYnVmX3QgKmJ1ZiApCitpbnQgbWdhX2ZyZWVsaXN0X3B1dChkcm1fZGV2aWNlX3QgKiBkZXYsIGRybV9idWZfdCAqIGJ1ZikKIHsKIAlkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWRybV9tZ2FfYnVmX3ByaXZfdCAqYnVmX3ByaXYgPSBidWYtPmRldl9wcml2YXRlOwogCWRybV9tZ2FfZnJlZWxpc3RfdCAqaGVhZCwgKmVudHJ5LCAqcHJldjsKIAotCURSTV9ERUJVRyggImFnZT0weCUwNmx4IHdyYXA9JWRcbiIsCi0JCSAgIGJ1Zl9wcml2LT5saXN0X2VudHJ5LT5hZ2UuaGVhZCAtCi0JCSAgIGRldl9wcml2LT5wcmltYXJ5LT5vZmZzZXQsCi0JCSAgIGJ1Zl9wcml2LT5saXN0X2VudHJ5LT5hZ2Uud3JhcCApOworCURSTV9ERUJVRygiYWdlPTB4JTA2bHggd3JhcD0lZFxuIiwKKwkJICBidWZfcHJpdi0+bGlzdF9lbnRyeS0+YWdlLmhlYWQgLQorCQkgIGRldl9wcml2LT5wcmltYXJ5LT5vZmZzZXQsIGJ1Zl9wcml2LT5saXN0X2VudHJ5LT5hZ2Uud3JhcCk7CiAKIAllbnRyeSA9IGJ1Zl9wcml2LT5saXN0X2VudHJ5OwogCWhlYWQgPSBkZXZfcHJpdi0+aGVhZDsKIAotCWlmICggYnVmX3ByaXYtPmxpc3RfZW50cnktPmFnZS5oZWFkID09IE1HQV9CVUZGRVJfVVNFRCApIHsKLQkJU0VUX0FHRSggJmVudHJ5LT5hZ2UsIE1HQV9CVUZGRVJfRlJFRSwgMCApOworCWlmIChidWZfcHJpdi0+bGlzdF9lbnRyeS0+YWdlLmhlYWQgPT0gTUdBX0JVRkZFUl9VU0VEKSB7CisJCVNFVF9BR0UoJmVudHJ5LT5hZ2UsIE1HQV9CVUZGRVJfRlJFRSwgMCk7CiAJCXByZXYgPSBkZXZfcHJpdi0+dGFpbDsKIAkJcHJldi0+bmV4dCA9IGVudHJ5OwogCQllbnRyeS0+cHJldiA9IHByZXY7CkBAIC0zOTQsMTUgKzM4NywxMyBAQAogCXJldHVybiAwOwogfQogCi0KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqIERNQSBpbml0aWFsaXphdGlvbiwgY2xlYW51cAogICovCiAKLQotaW50IG1nYV9kcml2ZXJfcHJlaW5pdChkcm1fZGV2aWNlX3QgKmRldiwgdW5zaWduZWQgbG9uZyBmbGFncykKK2ludCBtZ2FfZHJpdmVyX3ByZWluaXQoZHJtX2RldmljZV90ICogZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewotCWRybV9tZ2FfcHJpdmF0ZV90ICogZGV2X3ByaXY7CisJZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2OwogCiAJZGV2X3ByaXYgPSBkcm1fYWxsb2Moc2l6ZW9mKGRybV9tZ2FfcHJpdmF0ZV90KSwgRFJNX01FTV9EUklWRVIpOwogCWlmICghZGV2X3ByaXYpCkBAIC00MjAsNyArNDExLDcgQEAKICNpZiBfX09TX0hBU19BR1AKIC8qKgogICogQm9vdHN0cmFwIHRoZSBkcml2ZXIgZm9yIEFHUCBETUEuCi0gKiAKKyAqCiAgKiBcdG9kbwogICogSW52ZXN0aWdhdGUgd2hldGhlciB0aGVyZSBpcyBhbnkgYmVuaWZpdCB0byBzdG9yaW5nIHRoZSBXQVJQIG1pY3JvY29kZSBpbgogICogQUdQIG1lbW9yeS4gIElmIG5vdCwgdGhlIG1pY3JvY29kZSBtYXkgYXMgd2VsbCBhbHdheXMgYmUgcHV0IGluIFBDSQpAQCAtNDM2LDE4ICs0MjcsMTggQEAKIHN0YXRpYyBpbnQgbWdhX2RvX2FncF9kbWFfYm9vdHN0cmFwKGRybV9kZXZpY2VfdCAqIGRldiwKIAkJCQkgICAgZHJtX21nYV9kbWFfYm9vdHN0cmFwX3QgKiBkbWFfYnMpCiB7Ci0JZHJtX21nYV9wcml2YXRlX3QgKiBjb25zdCBkZXZfcHJpdiA9IChkcm1fbWdhX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOworCWRybV9tZ2FfcHJpdmF0ZV90ICpjb25zdCBkZXZfcHJpdiA9CisJICAgIChkcm1fbWdhX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwogCWNvbnN0IHVuc2lnbmVkIGludCB3YXJwX3NpemUgPSBtZ2Ffd2FycF9taWNyb2NvZGVfc2l6ZShkZXZfcHJpdik7CiAJaW50IGVycjsKLQl1bnNpZ25lZCAgb2Zmc2V0OworCXVuc2lnbmVkIG9mZnNldDsKIAljb25zdCB1bnNpZ25lZCBzZWNvbmRhcnlfc2l6ZSA9IGRtYV9icy0+c2Vjb25kYXJ5X2Jpbl9jb3VudAotCQkqIGRtYV9icy0+c2Vjb25kYXJ5X2Jpbl9zaXplOworCSAgICAqIGRtYV9icy0+c2Vjb25kYXJ5X2Jpbl9zaXplOwogCWNvbnN0IHVuc2lnbmVkIGFncF9zaXplID0gKGRtYV9icy0+YWdwX3NpemUgPDwgMjApOwogCWRybV9idWZfZGVzY190IHJlcTsKIAlkcm1fYWdwX21vZGVfdCBtb2RlOwogCWRybV9hZ3BfaW5mb190IGluZm87CiAKLQkKIAkvKiBBY3F1aXJlIEFHUC4gKi8KIAllcnIgPSBkcm1fYWdwX2FjcXVpcmUoZGV2KTsKIAlpZiAoZXJyKSB7CkBAIC00NjgsNyArNDU5LDYgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAKLQogCS8qIEluIGFkZGl0aW9uIHRvIHRoZSB1c3VhbCBBR1AgbW9kZSBjb25maWd1cmF0aW9uLCB0aGUgRzIwMCBBR1AgY2FyZHMKIAkgKiBuZWVkIHRvIGhhdmUgdGhlIEFHUCBtb2RlICJtYW51YWxseSIgc2V0LgogCSAqLwpAQCAtNDc2LDY4ICs0NjYsNjYgQEAKIAlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gTUdBX0NBUkRfVFlQRV9HMjAwKSB7CiAJCWlmIChtb2RlLm1vZGUgJiAweDAyKSB7CiAJCQlNR0FfV1JJVEUoTUdBX0FHUF9QTEwsIE1HQV9BR1AyWFBMTF9FTkFCTEUpOwotCQl9Ci0JCWVsc2UgeworCQl9IGVsc2UgewogCQkJTUdBX1dSSVRFKE1HQV9BR1BfUExMLCBNR0FfQUdQMlhQTExfRElTQUJMRSk7CiAJCX0KIAl9CiAKLQogCS8qIEFsbG9jYXRlIGFuZCBiaW5kIEFHUCBtZW1vcnkuICovCiAJZGV2X3ByaXYtPmFncF9wYWdlcyA9IGFncF9zaXplIC8gUEFHRV9TSVpFOwotCWRldl9wcml2LT5hZ3BfbWVtID0gZHJtX2FsbG9jX2FncCggZGV2LCBkZXZfcHJpdi0+YWdwX3BhZ2VzLCAwICk7CisJZGV2X3ByaXYtPmFncF9tZW0gPSBkcm1fYWxsb2NfYWdwKGRldiwgZGV2X3ByaXYtPmFncF9wYWdlcywgMCk7CiAJaWYgKGRldl9wcml2LT5hZ3BfbWVtID09IE5VTEwpIHsKIAkJZGV2X3ByaXYtPmFncF9wYWdlcyA9IDA7CiAJCURSTV9FUlJPUigiVW5hYmxlIHRvIGFsbG9jYXRlICV1TUIgQUdQIG1lbW9yeVxuIiwKIAkJCSAgZG1hX2JzLT5hZ3Bfc2l6ZSk7CiAJCXJldHVybiBEUk1fRVJSKEVOT01FTSk7CiAJfQotCQkKLQllcnIgPSBkcm1fYmluZF9hZ3AoIGRldl9wcml2LT5hZ3BfbWVtLCAwICk7CisKKwllcnIgPSBkcm1fYmluZF9hZ3AoZGV2X3ByaXYtPmFncF9tZW0sIDApOwogCWlmIChlcnIpIHsKIAkJRFJNX0VSUk9SKCJVbmFibGUgdG8gYmluZCBBR1AgbWVtb3J5XG4iKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKIAlvZmZzZXQgPSAwOwotCWVyciA9IGRybV9hZGRtYXAoIGRldiwgb2Zmc2V0LCB3YXJwX3NpemUsCi0JCQkgIF9EUk1fQUdQLCBfRFJNX1JFQURfT05MWSwgJiBkZXZfcHJpdi0+d2FycCApOworCWVyciA9IGRybV9hZGRtYXAoZGV2LCBvZmZzZXQsIHdhcnBfc2l6ZSwKKwkJCSBfRFJNX0FHUCwgX0RSTV9SRUFEX09OTFksICZkZXZfcHJpdi0+d2FycCk7CiAJaWYgKGVycikgewogCQlEUk1fRVJST1IoIlVuYWJsZSB0byBtYXAgV0FSUCBtaWNyb2NvZGVcbiIpOwogCQlyZXR1cm4gZXJyOwogCX0KIAogCW9mZnNldCArPSB3YXJwX3NpemU7Ci0JZXJyID0gZHJtX2FkZG1hcCggZGV2LCBvZmZzZXQsIGRtYV9icy0+cHJpbWFyeV9zaXplLAotCQkJICBfRFJNX0FHUCwgX0RSTV9SRUFEX09OTFksICYgZGV2X3ByaXYtPnByaW1hcnkgKTsKKwllcnIgPSBkcm1fYWRkbWFwKGRldiwgb2Zmc2V0LCBkbWFfYnMtPnByaW1hcnlfc2l6ZSwKKwkJCSBfRFJNX0FHUCwgX0RSTV9SRUFEX09OTFksICZkZXZfcHJpdi0+cHJpbWFyeSk7CiAJaWYgKGVycikgewogCQlEUk1fRVJST1IoIlVuYWJsZSB0byBtYXAgcHJpbWFyeSBETUEgcmVnaW9uXG4iKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKIAlvZmZzZXQgKz0gZG1hX2JzLT5wcmltYXJ5X3NpemU7Ci0JZXJyID0gZHJtX2FkZG1hcCggZGV2LCBvZmZzZXQsIHNlY29uZGFyeV9zaXplLAotCQkJICBfRFJNX0FHUCwgMCwgJiBkZXYtPmFncF9idWZmZXJfbWFwICk7CisJZXJyID0gZHJtX2FkZG1hcChkZXYsIG9mZnNldCwgc2Vjb25kYXJ5X3NpemUsCisJCQkgX0RSTV9BR1AsIDAsICZkZXYtPmFncF9idWZmZXJfbWFwKTsKIAlpZiAoZXJyKSB7CiAJCURSTV9FUlJPUigiVW5hYmxlIHRvIG1hcCBzZWNvbmRhcnkgRE1BIHJlZ2lvblxuIik7CiAJCXJldHVybiBlcnI7CiAJfQogCi0JKHZvaWQpIG1lbXNldCggJnJlcSwgMCwgc2l6ZW9mKHJlcSkgKTsKKwkodm9pZCltZW1zZXQoJnJlcSwgMCwgc2l6ZW9mKHJlcSkpOwogCXJlcS5jb3VudCA9IGRtYV9icy0+c2Vjb25kYXJ5X2Jpbl9jb3VudDsKIAlyZXEuc2l6ZSA9IGRtYV9icy0+c2Vjb25kYXJ5X2Jpbl9zaXplOwogCXJlcS5mbGFncyA9IF9EUk1fQUdQX0JVRkZFUjsKIAlyZXEuYWdwX3N0YXJ0ID0gb2Zmc2V0OwogCi0JZXJyID0gZHJtX2FkZGJ1ZnNfYWdwKCBkZXYsICYgcmVxICk7CisJZXJyID0gZHJtX2FkZGJ1ZnNfYWdwKGRldiwgJnJlcSk7CiAJaWYgKGVycikgewogCQlEUk1fRVJST1IoIlVuYWJsZSB0byBhZGQgc2Vjb25kYXJ5IERNQSBidWZmZXJzXG4iKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKIAlvZmZzZXQgKz0gc2Vjb25kYXJ5X3NpemU7Ci0JZXJyID0gZHJtX2FkZG1hcCggZGV2LCBvZmZzZXQsIGFncF9zaXplIC0gb2Zmc2V0LAotCQkJICBfRFJNX0FHUCwgMCwgJiBkZXZfcHJpdi0+YWdwX3RleHR1cmVzICk7CisJZXJyID0gZHJtX2FkZG1hcChkZXYsIG9mZnNldCwgYWdwX3NpemUgLSBvZmZzZXQsCisJCQkgX0RSTV9BR1AsIDAsICZkZXZfcHJpdi0+YWdwX3RleHR1cmVzKTsKIAlpZiAoZXJyKSB7CiAJCURSTV9FUlJPUigiVW5hYmxlIHRvIG1hcCBBR1AgdGV4dHVyZSByZWdpb25cbiIpOwogCQlyZXR1cm4gZXJyOwpAQCAtNTcxLDcgKzU1OSw3IEBACiAKIC8qKgogICogQm9vdHN0cmFwIHRoZSBkcml2ZXIgZm9yIFBDSSBETUEuCi0gKiAKKyAqCiAgKiBcdG9kbwogICogVGhlIGFsZ29yaXRobSBmb3IgZGVjcmVhc2luZyB0aGUgc2l6ZSBvZiB0aGUgcHJpbWFyeSBETUEgYnVmZmVyIGNvdWxkIGJlCiAgKiBiZXR0ZXIuICBUaGUgc2l6ZSBzaG91bGQgYmUgcm91bmRlZCB1cCB0byB0aGUgbmVhcmVzdCBwYWdlIHNpemUsIHRoZW4KQEAgLTU4MCwyMCArNTY4LDIwIEBACiAgKiBcdG9kbwogICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIG1heGltdW0gYWRkcmVzcyBwYXNzZWQgdG8gZHJtX3BjaV9hbGxvYyBpcyBjb3JyZWN0LgogICogVGhlIHNhbWUgZ29lcyBmb3IgZHJtX2FkZGJ1ZnNfcGNpLgotICogCisgKgogICogXHNhIG1nYV9kb19kbWFfYm9vdHN0cmFwLCBtZ2FfZG9fYWdwX2RtYV9ib290c3RyYXAKICAqLwogc3RhdGljIGludCBtZ2FfZG9fcGNpX2RtYV9ib290c3RyYXAoZHJtX2RldmljZV90ICogZGV2LAogCQkJCSAgICBkcm1fbWdhX2RtYV9ib290c3RyYXBfdCAqIGRtYV9icykKIHsKLQlkcm1fbWdhX3ByaXZhdGVfdCAqIGNvbnN0IGRldl9wcml2ID0gKGRybV9tZ2FfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisJZHJtX21nYV9wcml2YXRlX3QgKmNvbnN0IGRldl9wcml2ID0KKwkgICAgKGRybV9tZ2FfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CiAJY29uc3QgdW5zaWduZWQgaW50IHdhcnBfc2l6ZSA9IG1nYV93YXJwX21pY3JvY29kZV9zaXplKGRldl9wcml2KTsKIAl1bnNpZ25lZCBpbnQgcHJpbWFyeV9zaXplOwogCXVuc2lnbmVkIGludCBiaW5fY291bnQ7CiAJaW50IGVycjsKIAlkcm1fYnVmX2Rlc2NfdCByZXE7CiAKLQkKIAlpZiAoZGV2LT5kbWEgPT0gTlVMTCkgewogCQlEUk1fRVJST1IoImRldi0+ZG1hIGlzIE5VTExcbiIpOwogCQlyZXR1cm4gRFJNX0VSUihFRkFVTFQpOwpAQCAtNjEyLDkgKzYwMCw4IEBACiAJICogYWxpZ25tZW50IG9mIHRoZSBwcmltYXJ5IG9yIHNlY29uZGFyeSBETUEgYnVmZmVycy4KIAkgKi8KIAotCWZvciAoIHByaW1hcnlfc2l6ZSA9IGRtYV9icy0+cHJpbWFyeV9zaXplCi0JICAgICAgOyBwcmltYXJ5X3NpemUgIT0gMAotCSAgICAgIDsgcHJpbWFyeV9zaXplID4+PSAxICkgeworCWZvciAocHJpbWFyeV9zaXplID0gZG1hX2JzLT5wcmltYXJ5X3NpemU7IHByaW1hcnlfc2l6ZSAhPSAwOworCSAgICAgcHJpbWFyeV9zaXplID4+PSAxKSB7CiAJCS8qIFRoZSBwcm9wZXIgYWxpZ25tZW50IGZvciB0aGlzIG1hcHBpbmcgaXMgMHgwNCAqLwogCQllcnIgPSBkcm1fYWRkbWFwKGRldiwgMCwgcHJpbWFyeV9zaXplLCBfRFJNX0NPTlNJU1RFTlQsCiAJCQkJIF9EUk1fUkVBRF9PTkxZLCAmZGV2X3ByaXYtPnByaW1hcnkpOwpAQCAtNjI5LDI0ICs2MTYsMjMgQEAKIAogCWlmIChkZXZfcHJpdi0+cHJpbWFyeS0+c2l6ZSAhPSBkbWFfYnMtPnByaW1hcnlfc2l6ZSkgewogCQlEUk1fSU5GTygiUHJpbWFyeSBETUEgYnVmZmVyIHNpemUgcmVkdWNlZCBmcm9tICV1IHRvICV1LlxuIiwKLQkJCSBkbWFfYnMtPnByaW1hcnlfc2l6ZSwgCi0JCQkgKHVuc2lnbmVkKSBkZXZfcHJpdi0+cHJpbWFyeS0+c2l6ZSk7CisJCQkgZG1hX2JzLT5wcmltYXJ5X3NpemUsCisJCQkgKHVuc2lnbmVkKWRldl9wcml2LT5wcmltYXJ5LT5zaXplKTsKIAkJZG1hX2JzLT5wcmltYXJ5X3NpemUgPSBkZXZfcHJpdi0+cHJpbWFyeS0+c2l6ZTsKIAl9CiAKLQlmb3IgKCBiaW5fY291bnQgPSBkbWFfYnMtPnNlY29uZGFyeV9iaW5fY291bnQKLQkgICAgICA7IGJpbl9jb3VudCA+IDAgCi0JICAgICAgOyBiaW5fY291bnQtLSApIHsKLQkJKHZvaWQpIG1lbXNldCggJnJlcSwgMCwgc2l6ZW9mKHJlcSkgKTsKKwlmb3IgKGJpbl9jb3VudCA9IGRtYV9icy0+c2Vjb25kYXJ5X2Jpbl9jb3VudDsgYmluX2NvdW50ID4gMDsKKwkgICAgIGJpbl9jb3VudC0tKSB7CisJCSh2b2lkKW1lbXNldCgmcmVxLCAwLCBzaXplb2YocmVxKSk7CiAJCXJlcS5jb3VudCA9IGJpbl9jb3VudDsKIAkJcmVxLnNpemUgPSBkbWFfYnMtPnNlY29uZGFyeV9iaW5fc2l6ZTsKIAotCQllcnIgPSBkcm1fYWRkYnVmc19wY2koIGRldiwgJiByZXEgKTsKKwkJZXJyID0gZHJtX2FkZGJ1ZnNfcGNpKGRldiwgJnJlcSk7CiAJCWlmICghZXJyKSB7CiAJCQlicmVhazsKIAkJfQogCX0KLQkKKwogCWlmIChiaW5fY291bnQgPT0gMCkgewogCQlEUk1fRVJST1IoIlVuYWJsZSB0byBhZGQgc2Vjb25kYXJ5IERNQSBidWZmZXJzXG4iKTsKIAkJcmV0dXJuIGVycjsKQEAgLTY2OCwzOCArNjU0LDM0IEBACiAJcmV0dXJuIDA7CiB9CiAKLQogc3RhdGljIGludCBtZ2FfZG9fZG1hX2Jvb3RzdHJhcChkcm1fZGV2aWNlX3QgKiBkZXYsCiAJCQkJZHJtX21nYV9kbWFfYm9vdHN0cmFwX3QgKiBkbWFfYnMpCiB7CiAJY29uc3QgaW50IGlzX2FncCA9IChkbWFfYnMtPmFncF9tb2RlICE9IDApICYmIGRybV9kZXZpY2VfaXNfYWdwKGRldik7CiAJaW50IGVycjsKLQlkcm1fbWdhX3ByaXZhdGVfdCAqIGNvbnN0IGRldl9wcml2ID0KLQkJKGRybV9tZ2FfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7Ci0KKwlkcm1fbWdhX3ByaXZhdGVfdCAqY29uc3QgZGV2X3ByaXYgPQorCSAgICAoZHJtX21nYV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKIAogCWRldl9wcml2LT51c2VkX25ld19kbWFfaW5pdCA9IDE7CiAKIAkvKiBUaGUgZmlyc3Qgc3RlcHMgYXJlIHRoZSBzYW1lIGZvciBib3RoIFBDSSBhbmQgQUdQIGJhc2VkIERNQS4gIE1hcAogCSAqIHRoZSBjYXJkcyBNTUlPIHJlZ2lzdGVycyBhbmQgbWFwIGEgc3RhdHVzIHBhZ2UuCiAJICovCi0JZXJyID0gZHJtX2FkZG1hcCggZGV2LCBkZXZfcHJpdi0+bW1pb19iYXNlLCBkZXZfcHJpdi0+bW1pb19zaXplLAotCQkJICBfRFJNX1JFR0lTVEVSUywgX0RSTV9SRUFEX09OTFksICYgZGV2X3ByaXYtPm1taW8gKTsKKwllcnIgPSBkcm1fYWRkbWFwKGRldiwgZGV2X3ByaXYtPm1taW9fYmFzZSwgZGV2X3ByaXYtPm1taW9fc2l6ZSwKKwkJCSBfRFJNX1JFR0lTVEVSUywgX0RSTV9SRUFEX09OTFksICZkZXZfcHJpdi0+bW1pbyk7CiAJaWYgKGVycikgewogCQlEUk1fRVJST1IoIlVuYWJsZSB0byBtYXAgTU1JTyByZWdpb25cbiIpOwogCQlyZXR1cm4gZXJyOwogCX0KIAotCi0JZXJyID0gZHJtX2FkZG1hcCggZGV2LCAwLCBTQVJFQV9NQVgsIF9EUk1fU0hNLAotCQkJICBfRFJNX1JFQURfT05MWSB8IF9EUk1fTE9DS0VEIHwgX0RSTV9LRVJORUwsCi0JCQkgICYgZGV2X3ByaXYtPnN0YXR1cyApOworCWVyciA9IGRybV9hZGRtYXAoZGV2LCAwLCBTQVJFQV9NQVgsIF9EUk1fU0hNLAorCQkJIF9EUk1fUkVBRF9PTkxZIHwgX0RSTV9MT0NLRUQgfCBfRFJNX0tFUk5FTCwKKwkJCSAmZGV2X3ByaXYtPnN0YXR1cyk7CiAJaWYgKGVycikgewogCQlEUk1fRVJST1IoIlVuYWJsZSB0byBtYXAgc3RhdHVzIHJlZ2lvblxuIik7CiAJCXJldHVybiBlcnI7CiAJfQogCi0KIAkvKiBUaGUgRE1BIGluaXRpYWxpemF0aW9uIHByb2NlZHVyZSBpcyBzbGlnaHRseSBkaWZmZXJlbnQgZm9yIFBDSSBhbmQKIAkgKiBBR1AgY2FyZHMuICBBR1AgY2FyZHMganVzdCBhbGxvY2F0ZSBhIGxhcmdlIGJsb2NrIG9mIEFHUCBtZW1vcnkgYW5kCiAJICogY2FydmUgb2ZmIHBvcnRpb25zIG9mIGl0IGZvciBpbnRlcm5hbCB1c2VzLiAgVGhlIHJlbWFpbmluZyBtZW1vcnkKQEAgLTcwOCw3ICs2OTAsNyBAQAogCWlmIChpc19hZ3ApIHsKIAkJZXJyID0gbWdhX2RvX2FncF9kbWFfYm9vdHN0cmFwKGRldiwgZG1hX2JzKTsKIAl9Ci0JCisKIAkvKiBJZiB3ZSBhdHRlbXB0ZWQgdG8gaW5pdGlhbGl6ZSB0aGUgY2FyZCBmb3IgQUdQIERNQSBidXQgZmFpbGVkLAogCSAqIGNsZWFuLXVwIGFueSBtZXNzIHRoYXQgbWF5IGhhdmUgYmVlbiBjcmVhdGVkLgogCSAqLwpAQCAtNzE3LDcgKzY5OSw2IEBACiAJCW1nYV9kb19jbGVhbnVwX2RtYShkZXYpOwogCX0KIAotCiAJLyogTm90IG9ubHkgZG8gd2Ugd2FudCB0byB0cnkgYW5kIGluaXRpYWxpemVkIFBDSSBjYXJkcyBmb3IgUENJIERNQSwKIAkgKiBidXQgd2UgYWxzbyB0cnkgdG8gaW5pdGlhbGl6ZWQgQUdQIGNhcmRzIHRoYXQgY291bGQgbm90IGJlCiAJICogaW5pdGlhbGl6ZWQgZm9yIEFHUCBETUEuICBUaGlzIGNvdmVycyB0aGUgY2FzZSB3aGVyZSB3ZSBoYXZlIGFuIEFHUApAQCAtNzMwLDcgKzcxMSw2IEBACiAJCWVyciA9IG1nYV9kb19wY2lfZG1hX2Jvb3RzdHJhcChkZXYsIGRtYV9icyk7CiAJfQogCi0KIAlyZXR1cm4gZXJyOwogfQogCkBAIC03NDAsNDUgKzcyMCw0MiBAQAogCWRybV9tZ2FfZG1hX2Jvb3RzdHJhcF90IGJvb3RzdHJhcDsKIAlpbnQgZXJyOwogCi0KIAlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwoYm9vdHN0cmFwLAogCQkJCSAoZHJtX21nYV9kbWFfYm9vdHN0cmFwX3QgX191c2VyICopIGRhdGEsCiAJCQkJIHNpemVvZihib290c3RyYXApKTsKIAotCWVyciA9IG1nYV9kb19kbWFfYm9vdHN0cmFwKGRldiwgJiBib290c3RyYXApOwotCWlmICghIGVycikgeworCWVyciA9IG1nYV9kb19kbWFfYm9vdHN0cmFwKGRldiwgJmJvb3RzdHJhcCk7CisJaWYgKCFlcnIpIHsKIAkJc3RhdGljIGNvbnN0IGludCBtb2Rlc1tdID0geyAwLCAxLCAyLCAyLCA0LCA0LCA0LCA0IH07Ci0JCWNvbnN0IGRybV9tZ2FfcHJpdmF0ZV90ICogY29uc3QgZGV2X3ByaXYgPSAKLQkJCShkcm1fbWdhX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOworCQljb25zdCBkcm1fbWdhX3ByaXZhdGVfdCAqY29uc3QgZGV2X3ByaXYgPQorCQkgICAgKGRybV9tZ2FfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CiAKIAkJaWYgKGRldl9wcml2LT5hZ3BfdGV4dHVyZXMgIT0gTlVMTCkgewotCQkJYm9vdHN0cmFwLnRleHR1cmVfaGFuZGxlID0gZGV2X3ByaXYtPmFncF90ZXh0dXJlcy0+b2Zmc2V0OworCQkJYm9vdHN0cmFwLnRleHR1cmVfaGFuZGxlID0KKwkJCSAgICBkZXZfcHJpdi0+YWdwX3RleHR1cmVzLT5vZmZzZXQ7CiAJCQlib290c3RyYXAudGV4dHVyZV9zaXplID0gZGV2X3ByaXYtPmFncF90ZXh0dXJlcy0+c2l6ZTsKLQkJfQotCQllbHNlIHsKKwkJfSBlbHNlIHsKIAkJCWJvb3RzdHJhcC50ZXh0dXJlX2hhbmRsZSA9IDA7CiAJCQlib290c3RyYXAudGV4dHVyZV9zaXplID0gMDsKIAkJfQogCi0JCWJvb3RzdHJhcC5hZ3BfbW9kZSA9IG1vZGVzWyBib290c3RyYXAuYWdwX21vZGUgJiAweDA3IF07Ci0JCWlmIChEUk1fQ09QWV9UT19VU0VSKCAodm9pZCBfX3VzZXIgKikgZGF0YSwgJiBib290c3RyYXAsCisJCWJvb3RzdHJhcC5hZ3BfbW9kZSA9IG1vZGVzW2Jvb3RzdHJhcC5hZ3BfbW9kZSAmIDB4MDddOworCQlpZiAoRFJNX0NPUFlfVE9fVVNFUigodm9pZCBfX3VzZXIgKilkYXRhLCAmYm9vdHN0cmFwLAogCQkJCSAgICAgc2l6ZW9mKGJvb3RzdHJhcCkpKSB7CiAJCQllcnIgPSBEUk1fRVJSKEVGQVVMVCk7CiAJCX0KLQl9Ci0JZWxzZSB7CisJfSBlbHNlIHsKIAkJbWdhX2RvX2NsZWFudXBfZG1hKGRldik7CiAJfQogCiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZ2FfZG9faW5pdF9kbWEoIGRybV9kZXZpY2VfdCAqZGV2LCBkcm1fbWdhX2luaXRfdCAqaW5pdCApCitzdGF0aWMgaW50IG1nYV9kb19pbml0X2RtYShkcm1fZGV2aWNlX3QgKiBkZXYsIGRybV9tZ2FfaW5pdF90ICogaW5pdCkKIHsKIAlkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXY7CiAJaW50IHJldDsKLQlEUk1fREVCVUcoICJcbiIgKTsKLQorCURSTV9ERUJVRygiXG4iKTsKIAogCWRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIApAQCAtNzg3LDE3ICs3NjQsMTcgQEAKIAl9IGVsc2UgewogCQlkZXZfcHJpdi0+Y2xlYXJfY21kID0gTUdBX0RXR0NUTF9DTEVBUiB8IE1HQV9BVFlQRV9SU1RSOwogCX0KLQlkZXZfcHJpdi0+bWFjY2Vzcwk9IGluaXQtPm1hY2Nlc3M7CisJZGV2X3ByaXYtPm1hY2Nlc3MgPSBpbml0LT5tYWNjZXNzOwogCi0JZGV2X3ByaXYtPmZiX2NwcAk9IGluaXQtPmZiX2NwcDsKLQlkZXZfcHJpdi0+ZnJvbnRfb2Zmc2V0CT0gaW5pdC0+ZnJvbnRfb2Zmc2V0OwotCWRldl9wcml2LT5mcm9udF9waXRjaAk9IGluaXQtPmZyb250X3BpdGNoOwotCWRldl9wcml2LT5iYWNrX29mZnNldAk9IGluaXQtPmJhY2tfb2Zmc2V0OwotCWRldl9wcml2LT5iYWNrX3BpdGNoCT0gaW5pdC0+YmFja19waXRjaDsKKwlkZXZfcHJpdi0+ZmJfY3BwID0gaW5pdC0+ZmJfY3BwOworCWRldl9wcml2LT5mcm9udF9vZmZzZXQgPSBpbml0LT5mcm9udF9vZmZzZXQ7CisJZGV2X3ByaXYtPmZyb250X3BpdGNoID0gaW5pdC0+ZnJvbnRfcGl0Y2g7CisJZGV2X3ByaXYtPmJhY2tfb2Zmc2V0ID0gaW5pdC0+YmFja19vZmZzZXQ7CisJZGV2X3ByaXYtPmJhY2tfcGl0Y2ggPSBpbml0LT5iYWNrX3BpdGNoOwogCi0JZGV2X3ByaXYtPmRlcHRoX2NwcAk9IGluaXQtPmRlcHRoX2NwcDsKLQlkZXZfcHJpdi0+ZGVwdGhfb2Zmc2V0CT0gaW5pdC0+ZGVwdGhfb2Zmc2V0OwotCWRldl9wcml2LT5kZXB0aF9waXRjaAk9IGluaXQtPmRlcHRoX3BpdGNoOworCWRldl9wcml2LT5kZXB0aF9jcHAgPSBpbml0LT5kZXB0aF9jcHA7CisJZGV2X3ByaXYtPmRlcHRoX29mZnNldCA9IGluaXQtPmRlcHRoX29mZnNldDsKKwlkZXZfcHJpdi0+ZGVwdGhfcGl0Y2ggPSBpbml0LT5kZXB0aF9waXRjaDsKIAogCS8qIEZJWE1FOiBOZWVkIHRvIHN1cHBvcnQgQUdQIHRleHR1cmVzLi4uCiAJICovCkBAIC04MTEsNyArNzg4LDcgQEAKIAkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAl9CiAKLQlpZiAoISBkZXZfcHJpdi0+dXNlZF9uZXdfZG1hX2luaXQpIHsKKwlpZiAoIWRldl9wcml2LT51c2VkX25ld19kbWFfaW5pdCkgewogCQlkZXZfcHJpdi0+c3RhdHVzID0gZHJtX2NvcmVfZmluZG1hcChkZXYsIGluaXQtPnN0YXR1c19vZmZzZXQpOwogCQlpZiAoIWRldl9wcml2LT5zdGF0dXMpIHsKIAkJCURSTV9FUlJPUigiZmFpbGVkIHRvIGZpbmQgc3RhdHVzIHBhZ2UhXG4iKTsKQEAgLTgzMyw3ICs4MTAsOCBAQAogCQkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAkJfQogCQlkZXYtPmFncF9idWZmZXJfdG9rZW4gPSBpbml0LT5idWZmZXJzX29mZnNldDsKLQkJZGV2LT5hZ3BfYnVmZmVyX21hcCA9IGRybV9jb3JlX2ZpbmRtYXAoZGV2LCBpbml0LT5idWZmZXJzX29mZnNldCk7CisJCWRldi0+YWdwX2J1ZmZlcl9tYXAgPQorCQkgICAgZHJtX2NvcmVfZmluZG1hcChkZXYsIGluaXQtPmJ1ZmZlcnNfb2Zmc2V0KTsKIAkJaWYgKCFkZXYtPmFncF9idWZmZXJfbWFwKSB7CiAJCQlEUk1fRVJST1IoImZhaWxlZCB0byBmaW5kIGRtYSBidWZmZXIgcmVnaW9uIVxuIik7CiAJCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwpAQCAtODQ1LDggKzgyMyw4IEBACiAJfQogCiAJZGV2X3ByaXYtPnNhcmVhX3ByaXYgPQotCQkoZHJtX21nYV9zYXJlYV90ICopKCh1OCAqKWRldl9wcml2LT5zYXJlYS0+aGFuZGxlICsKLQkJCQkgICAgaW5pdC0+c2FyZWFfcHJpdl9vZmZzZXQpOworCSAgICAoZHJtX21nYV9zYXJlYV90ICopICgodTggKikgZGV2X3ByaXYtPnNhcmVhLT5oYW5kbGUgKworCQkJCSBpbml0LT5zYXJlYV9wcml2X29mZnNldCk7CiAKIAlpZiAoIWRldl9wcml2LT53YXJwLT5oYW5kbGUgfHwKIAkgICAgIWRldl9wcml2LT5wcmltYXJ5LT5oYW5kbGUgfHwKQEAgLTg2OSwyMyArODQ3LDIwIEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0JZGV2X3ByaXYtPnByaW0uc3RhdHVzID0gKHUzMiAqKWRldl9wcml2LT5zdGF0dXMtPmhhbmRsZTsKKwlkZXZfcHJpdi0+cHJpbS5zdGF0dXMgPSAodTMyICopIGRldl9wcml2LT5zdGF0dXMtPmhhbmRsZTsKIAotCW1nYV9kb193YWl0X2Zvcl9pZGxlKCBkZXZfcHJpdiApOworCW1nYV9kb193YWl0X2Zvcl9pZGxlKGRldl9wcml2KTsKIAogCS8qIEluaXQgdGhlIHByaW1hcnkgRE1BIHJlZ2lzdGVycy4KIAkgKi8KLQlNR0FfV1JJVEUoIE1HQV9QUklNQUREUkVTUywKLQkJICAgZGV2X3ByaXYtPnByaW1hcnktPm9mZnNldCB8IE1HQV9ETUFfR0VORVJBTCApOworCU1HQV9XUklURShNR0FfUFJJTUFERFJFU1MsIGRldl9wcml2LT5wcmltYXJ5LT5vZmZzZXQgfCBNR0FfRE1BX0dFTkVSQUwpOwogI2lmIDAKLQlNR0FfV1JJVEUoIE1HQV9QUklNUFRSLAotCQkgICB2aXJ0X3RvX2J1cygodm9pZCAqKWRldl9wcml2LT5wcmltLnN0YXR1cykgfAotCQkgICBNR0FfUFJJTVBUUkVOMCB8CS8qIFNvZnQgdHJhcCwgU0VDRU5ELCBTRVRVUEVORCAqLwotCQkgICBNR0FfUFJJTVBUUkVOMSApOwkvKiBEV0dTWU5DICovCisJTUdBX1dSSVRFKE1HQV9QUklNUFRSLCB2aXJ0X3RvX2J1cygodm9pZCAqKWRldl9wcml2LT5wcmltLnN0YXR1cykgfCBNR0FfUFJJTVBUUkVOMCB8CS8qIFNvZnQgdHJhcCwgU0VDRU5ELCBTRVRVUEVORCAqLworCQkgIE1HQV9QUklNUFRSRU4xKTsJLyogRFdHU1lOQyAqLwogI2VuZGlmCiAKLQlkZXZfcHJpdi0+cHJpbS5zdGFydCA9ICh1OCAqKWRldl9wcml2LT5wcmltYXJ5LT5oYW5kbGU7Ci0JZGV2X3ByaXYtPnByaW0uZW5kID0gKCh1OCAqKWRldl9wcml2LT5wcmltYXJ5LT5oYW5kbGUKKwlkZXZfcHJpdi0+cHJpbS5zdGFydCA9ICh1OCAqKSBkZXZfcHJpdi0+cHJpbWFyeS0+aGFuZGxlOworCWRldl9wcml2LT5wcmltLmVuZCA9ICgodTggKikgZGV2X3ByaXYtPnByaW1hcnktPmhhbmRsZQogCQkJICAgICAgKyBkZXZfcHJpdi0+cHJpbWFyeS0+c2l6ZSk7CiAJZGV2X3ByaXYtPnByaW0uc2l6ZSA9IGRldl9wcml2LT5wcmltYXJ5LT5zaXplOwogCkBAIC05MTMsNyArODg4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtZ2FfZG9fY2xlYW51cF9kbWEoIGRybV9kZXZpY2VfdCAqZGV2ICkKK3N0YXRpYyBpbnQgbWdhX2RvX2NsZWFudXBfZG1hKGRybV9kZXZpY2VfdCAqIGRldikKIHsKIAlpbnQgZXJyID0gMDsKIAlEUk1fREVCVUcoIlxuIik7CkBAIC05MjIsMTYgKzg5NywxNyBAQAogCSAqIG1heSBub3QgaGF2ZSBiZWVuIGNhbGxlZCBmcm9tIHVzZXJzcGFjZSBhbmQgYWZ0ZXIgZGV2X3ByaXZhdGUKIAkgKiBpcyBmcmVlZCwgaXQncyB0b28gbGF0ZS4KIAkgKi8KLQlpZiAoIGRldi0+aXJxX2VuYWJsZWQgKSBkcm1faXJxX3VuaW5zdGFsbChkZXYpOworCWlmIChkZXYtPmlycV9lbmFibGVkKQorCQlkcm1faXJxX3VuaW5zdGFsbChkZXYpOwogCi0JaWYgKCBkZXYtPmRldl9wcml2YXRlICkgeworCWlmIChkZXYtPmRldl9wcml2YXRlKSB7CiAJCWRybV9tZ2FfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKLQkJaWYgKChkZXZfcHJpdi0+d2FycCAhPSBOVUxMKSAKKwkJaWYgKChkZXZfcHJpdi0+d2FycCAhPSBOVUxMKQogCQkgICAgJiYgKGRldl9wcml2LT5tbWlvLT50eXBlICE9IF9EUk1fQ09OU0lTVEVOVCkpCiAJCQlkcm1fY29yZV9pb3JlbWFwZnJlZShkZXZfcHJpdi0+d2FycCwgZGV2KTsKIAotCQlpZiAoKGRldl9wcml2LT5wcmltYXJ5ICE9IE5VTEwpIAorCQlpZiAoKGRldl9wcml2LT5wcmltYXJ5ICE9IE5VTEwpCiAJCSAgICAmJiAoZGV2X3ByaXYtPnByaW1hcnktPnR5cGUgIT0gX0RSTV9DT05TSVNURU5UKSkKIAkJCWRybV9jb3JlX2lvcmVtYXBmcmVlKGRldl9wcml2LT5wcmltYXJ5LCBkZXYpOwogCkBAIC05NDQsNyArOTIwLDggQEAKIAkJCQlkZXZfcHJpdi0+YWdwX3RleHR1cmVzID0gTlVMTDsKIAkJCQlkcm1fdW5iaW5kX2FncChkZXZfcHJpdi0+YWdwX21lbSk7CiAKLQkJCQlkcm1fZnJlZV9hZ3AoZGV2X3ByaXYtPmFncF9tZW0sIGRldl9wcml2LT5hZ3BfcGFnZXMpOworCQkJCWRybV9mcmVlX2FncChkZXZfcHJpdi0+YWdwX21lbSwKKwkJCQkJICAgICBkZXZfcHJpdi0+YWdwX3BhZ2VzKTsKIAkJCQlkZXZfcHJpdi0+YWdwX3BhZ2VzID0gMDsKIAkJCQlkZXZfcHJpdi0+YWdwX21lbSA9IE5VTEw7CiAJCQl9CkBAIC05NjYsNyArOTQzLDggQEAKIAogCQltZW1zZXQoJmRldl9wcml2LT5wcmltLCAwLCBzaXplb2YoZGV2X3ByaXYtPnByaW0pKTsKIAkJZGV2X3ByaXYtPndhcnBfcGlwZSA9IDA7Ci0JCW1lbXNldChkZXZfcHJpdi0+d2FycF9waXBlX3BoeXMsIDAsIHNpemVvZihkZXZfcHJpdi0+d2FycF9waXBlX3BoeXMpKTsKKwkJbWVtc2V0KGRldl9wcml2LT53YXJwX3BpcGVfcGh5cywgMCwKKwkJICAgICAgIHNpemVvZihkZXZfcHJpdi0+d2FycF9waXBlX3BoeXMpKTsKIAogCQlpZiAoZGV2X3ByaXYtPmhlYWQgIT0gTlVMTCkgewogCQkJbWdhX2ZyZWVsaXN0X2NsZWFudXAoZGV2KTsKQEAgLTk3NiwxMDMgKzk1NCwxMDIgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1pbnQgbWdhX2RtYV9pbml0KCBEUk1fSU9DVExfQVJHUyApCitpbnQgbWdhX2RtYV9pbml0KERSTV9JT0NUTF9BUkdTKQogewogCURSTV9ERVZJQ0U7CiAJZHJtX21nYV9pbml0X3QgaW5pdDsKIAlpbnQgZXJyOwogCi0JTE9DS19URVNUX1dJVEhfUkVUVVJOKCBkZXYsIGZpbHAgKTsKKwlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxwKTsKIAogCURSTV9DT1BZX0ZST01fVVNFUl9JT0NUTChpbml0LCAoZHJtX21nYV9pbml0X3QgX191c2VyICopIGRhdGEsCiAJCQkJIHNpemVvZihpbml0KSk7CiAKLQlzd2l0Y2ggKCBpbml0LmZ1bmMgKSB7CisJc3dpdGNoIChpbml0LmZ1bmMpIHsKIAljYXNlIE1HQV9JTklUX0RNQToKIAkJZXJyID0gbWdhX2RvX2luaXRfZG1hKGRldiwgJmluaXQpOwogCQlpZiAoZXJyKSB7Ci0JCQkodm9pZCkgbWdhX2RvX2NsZWFudXBfZG1hKGRldik7CisJCQkodm9pZCltZ2FfZG9fY2xlYW51cF9kbWEoZGV2KTsKIAkJfQogCQlyZXR1cm4gZXJyOwogCWNhc2UgTUdBX0NMRUFOVVBfRE1BOgotCQlyZXR1cm4gbWdhX2RvX2NsZWFudXBfZG1hKCBkZXYgKTsKKwkJcmV0dXJuIG1nYV9kb19jbGVhbnVwX2RtYShkZXYpOwogCX0KIAogCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiB9CiAKLQogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogUHJpbWFyeSBETUEgc3RyZWFtIG1hbmFnZW1lbnQKICAqLwogCi1pbnQgbWdhX2RtYV9mbHVzaCggRFJNX0lPQ1RMX0FSR1MgKQoraW50IG1nYV9kbWFfZmx1c2goRFJNX0lPQ1RMX0FSR1MpCiB7CiAJRFJNX0RFVklDRTsKLQlkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX21nYV9wcml2YXRlX3QgKilkZXYtPmRldl9wcml2YXRlOworCWRybV9tZ2FfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1fbWdhX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwogCWRybV9sb2NrX3QgbG9jazsKIAotCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTiggZGV2LCBmaWxwICk7CisJTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlscCk7CiAKLQlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwoIGxvY2ssIChkcm1fbG9ja190IF9fdXNlciAqKWRhdGEsIHNpemVvZihsb2NrKSApOworCURSTV9DT1BZX0ZST01fVVNFUl9JT0NUTChsb2NrLCAoZHJtX2xvY2tfdCBfX3VzZXIgKikgZGF0YSwKKwkJCQkgc2l6ZW9mKGxvY2spKTsKIAotCURSTV9ERUJVRyggIiVzJXMlc1xuIiwKLQkJICAgKGxvY2suZmxhZ3MgJiBfRFJNX0xPQ0tfRkxVU0gpID8JImZsdXNoLCAiIDogIiIsCi0JCSAgIChsb2NrLmZsYWdzICYgX0RSTV9MT0NLX0ZMVVNIX0FMTCkgPwkiZmx1c2ggYWxsLCAiIDogIiIsCi0JCSAgIChsb2NrLmZsYWdzICYgX0RSTV9MT0NLX1FVSUVTQ0VOVCkgPwkiaWRsZSwgIiA6ICIiICk7CisJRFJNX0RFQlVHKCIlcyVzJXNcbiIsCisJCSAgKGxvY2suZmxhZ3MgJiBfRFJNX0xPQ0tfRkxVU0gpID8gImZsdXNoLCAiIDogIiIsCisJCSAgKGxvY2suZmxhZ3MgJiBfRFJNX0xPQ0tfRkxVU0hfQUxMKSA/ICJmbHVzaCBhbGwsICIgOiAiIiwKKwkJICAobG9jay5mbGFncyAmIF9EUk1fTE9DS19RVUlFU0NFTlQpID8gImlkbGUsICIgOiAiIik7CiAKLQlXUkFQX1dBSVRfV0lUSF9SRVRVUk4oIGRldl9wcml2ICk7CisJV1JBUF9XQUlUX1dJVEhfUkVUVVJOKGRldl9wcml2KTsKIAotCWlmICggbG9jay5mbGFncyAmIChfRFJNX0xPQ0tfRkxVU0ggfCBfRFJNX0xPQ0tfRkxVU0hfQUxMKSApIHsKLQkJbWdhX2RvX2RtYV9mbHVzaCggZGV2X3ByaXYgKTsKKwlpZiAobG9jay5mbGFncyAmIChfRFJNX0xPQ0tfRkxVU0ggfCBfRFJNX0xPQ0tfRkxVU0hfQUxMKSkgeworCQltZ2FfZG9fZG1hX2ZsdXNoKGRldl9wcml2KTsKIAl9CiAKLQlpZiAoIGxvY2suZmxhZ3MgJiBfRFJNX0xPQ0tfUVVJRVNDRU5UICkgeworCWlmIChsb2NrLmZsYWdzICYgX0RSTV9MT0NLX1FVSUVTQ0VOVCkgewogI2lmIE1HQV9ETUFfREVCVUcKLQkJaW50IHJldCA9IG1nYV9kb193YWl0X2Zvcl9pZGxlKCBkZXZfcHJpdiApOwotCQlpZiAoIHJldCA8IDAgKQotCQkJRFJNX0lORk8oICIlczogLUVCVVNZXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwkJaW50IHJldCA9IG1nYV9kb193YWl0X2Zvcl9pZGxlKGRldl9wcml2KTsKKwkJaWYgKHJldCA8IDApCisJCQlEUk1fSU5GTygiJXM6IC1FQlVTWVxuIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIHJldDsKICNlbHNlCi0JCXJldHVybiBtZ2FfZG9fd2FpdF9mb3JfaWRsZSggZGV2X3ByaXYgKTsKKwkJcmV0dXJuIG1nYV9kb193YWl0X2Zvcl9pZGxlKGRldl9wcml2KTsKICNlbmRpZgogCX0gZWxzZSB7CiAJCXJldHVybiAwOwogCX0KIH0KIAotaW50IG1nYV9kbWFfcmVzZXQoIERSTV9JT0NUTF9BUkdTICkKK2ludCBtZ2FfZG1hX3Jlc2V0KERSTV9JT0NUTF9BUkdTKQogewogCURSTV9ERVZJQ0U7Ci0JZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9tZ2FfcHJpdmF0ZV90ICopZGV2LT5kZXZfcHJpdmF0ZTsKKwlkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX21nYV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKIAotCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTiggZGV2LCBmaWxwICk7CisJTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlscCk7CiAKLQlyZXR1cm4gbWdhX2RvX2RtYV9yZXNldCggZGV2X3ByaXYgKTsKKwlyZXR1cm4gbWdhX2RvX2RtYV9yZXNldChkZXZfcHJpdik7CiB9CiAKLQogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogRE1BIGJ1ZmZlciBtYW5hZ2VtZW50CiAgKi8KIAotc3RhdGljIGludCBtZ2FfZG1hX2dldF9idWZmZXJzKCBEUk1GSUxFIGZpbHAsCi0JCQkJZHJtX2RldmljZV90ICpkZXYsIGRybV9kbWFfdCAqZCApCitzdGF0aWMgaW50IG1nYV9kbWFfZ2V0X2J1ZmZlcnMoRFJNRklMRSBmaWxwLCBkcm1fZGV2aWNlX3QgKiBkZXYsIGRybV9kbWFfdCAqIGQpCiB7CiAJZHJtX2J1Zl90ICpidWY7CiAJaW50IGk7CiAKLQlmb3IgKCBpID0gZC0+Z3JhbnRlZF9jb3VudCA7IGkgPCBkLT5yZXF1ZXN0X2NvdW50IDsgaSsrICkgewotCQlidWYgPSBtZ2FfZnJlZWxpc3RfZ2V0KCBkZXYgKTsKLQkJaWYgKCAhYnVmICkgcmV0dXJuIERSTV9FUlIoRUFHQUlOKTsKKwlmb3IgKGkgPSBkLT5ncmFudGVkX2NvdW50OyBpIDwgZC0+cmVxdWVzdF9jb3VudDsgaSsrKSB7CisJCWJ1ZiA9IG1nYV9mcmVlbGlzdF9nZXQoZGV2KTsKKwkJaWYgKCFidWYpCisJCQlyZXR1cm4gRFJNX0VSUihFQUdBSU4pOwogCiAJCWJ1Zi0+ZmlscCA9IGZpbHA7CiAKLQkJaWYgKCBEUk1fQ09QWV9UT19VU0VSKCAmZC0+cmVxdWVzdF9pbmRpY2VzW2ldLAotCQkJCSAgICZidWYtPmlkeCwgc2l6ZW9mKGJ1Zi0+aWR4KSApICkKKwkJaWYgKERSTV9DT1BZX1RPX1VTRVIoJmQtPnJlcXVlc3RfaW5kaWNlc1tpXSwKKwkJCQkgICAgICZidWYtPmlkeCwgc2l6ZW9mKGJ1Zi0+aWR4KSkpCiAJCQlyZXR1cm4gRFJNX0VSUihFRkFVTFQpOwotCQlpZiAoIERSTV9DT1BZX1RPX1VTRVIoICZkLT5yZXF1ZXN0X3NpemVzW2ldLAotCQkJCSAgICZidWYtPnRvdGFsLCBzaXplb2YoYnVmLT50b3RhbCkgKSApCisJCWlmIChEUk1fQ09QWV9UT19VU0VSKCZkLT5yZXF1ZXN0X3NpemVzW2ldLAorCQkJCSAgICAgJmJ1Zi0+dG90YWwsIHNpemVvZihidWYtPnRvdGFsKSkpCiAJCQlyZXR1cm4gRFJNX0VSUihFRkFVTFQpOwogCiAJCWQtPmdyYW50ZWRfY291bnQrKzsKQEAgLTEwODAsNDQgKzEwNTcsNDQgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IG1nYV9kbWFfYnVmZmVycyggRFJNX0lPQ1RMX0FSR1MgKQoraW50IG1nYV9kbWFfYnVmZmVycyhEUk1fSU9DVExfQVJHUykKIHsKIAlEUk1fREVWSUNFOwogCWRybV9kZXZpY2VfZG1hX3QgKmRtYSA9IGRldi0+ZG1hOwotCWRybV9tZ2FfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1fbWdhX3ByaXZhdGVfdCAqKWRldi0+ZGV2X3ByaXZhdGU7CisJZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9tZ2FfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CiAJZHJtX2RtYV90IF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWRhdGE7CiAJZHJtX2RtYV90IGQ7CiAJaW50IHJldCA9IDA7CiAKLQlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oIGRldiwgZmlscCApOworCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbHApOwogCi0JRFJNX0NPUFlfRlJPTV9VU0VSX0lPQ1RMKCBkLCBhcmdwLCBzaXplb2YoZCkgKTsKKwlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwoZCwgYXJncCwgc2l6ZW9mKGQpKTsKIAogCS8qIFBsZWFzZSBkb24ndCBzZW5kIHVzIGJ1ZmZlcnMuCiAJICovCi0JaWYgKCBkLnNlbmRfY291bnQgIT0gMCApIHsKLQkJRFJNX0VSUk9SKCAiUHJvY2VzcyAlZCB0cnlpbmcgdG8gc2VuZCAlZCBidWZmZXJzIHZpYSBkcm1ETUFcbiIsCi0JCQkgICBEUk1fQ1VSUkVOVFBJRCwgZC5zZW5kX2NvdW50ICk7CisJaWYgKGQuc2VuZF9jb3VudCAhPSAwKSB7CisJCURSTV9FUlJPUigiUHJvY2VzcyAlZCB0cnlpbmcgdG8gc2VuZCAlZCBidWZmZXJzIHZpYSBkcm1ETUFcbiIsCisJCQkgIERSTV9DVVJSRU5UUElELCBkLnNlbmRfY291bnQpOwogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCX0KIAogCS8qIFdlJ2xsIHNlbmQgeW91IGJ1ZmZlcnMuCiAJICovCi0JaWYgKCBkLnJlcXVlc3RfY291bnQgPCAwIHx8IGQucmVxdWVzdF9jb3VudCA+IGRtYS0+YnVmX2NvdW50ICkgewotCQlEUk1fRVJST1IoICJQcm9jZXNzICVkIHRyeWluZyB0byBnZXQgJWQgYnVmZmVycyAob2YgJWQgbWF4KVxuIiwKLQkJCSAgIERSTV9DVVJSRU5UUElELCBkLnJlcXVlc3RfY291bnQsIGRtYS0+YnVmX2NvdW50ICk7CisJaWYgKGQucmVxdWVzdF9jb3VudCA8IDAgfHwgZC5yZXF1ZXN0X2NvdW50ID4gZG1hLT5idWZfY291bnQpIHsKKwkJRFJNX0VSUk9SKCJQcm9jZXNzICVkIHRyeWluZyB0byBnZXQgJWQgYnVmZmVycyAob2YgJWQgbWF4KVxuIiwKKwkJCSAgRFJNX0NVUlJFTlRQSUQsIGQucmVxdWVzdF9jb3VudCwgZG1hLT5idWZfY291bnQpOwogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCX0KIAotCVdSQVBfVEVTVF9XSVRIX1JFVFVSTiggZGV2X3ByaXYgKTsKKwlXUkFQX1RFU1RfV0lUSF9SRVRVUk4oZGV2X3ByaXYpOwogCiAJZC5ncmFudGVkX2NvdW50ID0gMDsKIAotCWlmICggZC5yZXF1ZXN0X2NvdW50ICkgewotCQlyZXQgPSBtZ2FfZG1hX2dldF9idWZmZXJzKCBmaWxwLCBkZXYsICZkICk7CisJaWYgKGQucmVxdWVzdF9jb3VudCkgeworCQlyZXQgPSBtZ2FfZG1hX2dldF9idWZmZXJzKGZpbHAsIGRldiwgJmQpOwogCX0KIAotCURSTV9DT1BZX1RPX1VTRVJfSU9DVEwoIGFyZ3AsIGQsIHNpemVvZihkKSApOworCURSTV9DT1BZX1RPX1VTRVJfSU9DVEwoYXJncCwgZCwgc2l6ZW9mKGQpKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xMTM4LDExICsxMTE1LDExIEBACiAgKi8KIHZvaWQgbWdhX2RyaXZlcl9wcmV0YWtlZG93bihkcm1fZGV2aWNlX3QgKiBkZXYpCiB7Ci0JbWdhX2RvX2NsZWFudXBfZG1hKCBkZXYgKTsKKwltZ2FfZG9fY2xlYW51cF9kbWEoZGV2KTsKIH0KIAotaW50IG1nYV9kcml2ZXJfZG1hX3F1aWVzY2VudChkcm1fZGV2aWNlX3QgKmRldikKK2ludCBtZ2FfZHJpdmVyX2RtYV9xdWllc2NlbnQoZHJtX2RldmljZV90ICogZGV2KQogewogCWRybV9tZ2FfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JcmV0dXJuIG1nYV9kb193YWl0X2Zvcl9pZGxlKCBkZXZfcHJpdiApOworCXJldHVybiBtZ2FfZG9fd2FpdF9mb3JfaWRsZShkZXZfcHJpdik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL21nYV9kcm0uaCBiL2RyaXZlcnMvY2hhci9kcm0vbWdhX2RybS5oCmluZGV4IGQyMGFhYjMuLjQ0ZDEyOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vbWdhX2RybS5oCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vbWdhX2RybS5oCkBAIC00NCwxMCArNDQsMTAgQEAKIAogLyogV0FSUCBwaXBlIGZsYWdzCiAgKi8KLSNkZWZpbmUgTUdBX0YJCQkweDEJCS8qIGZvZyAqLwotI2RlZmluZSBNR0FfQQkJCTB4MgkJLyogYWxwaGEgKi8KLSNkZWZpbmUgTUdBX1MJCQkweDQJCS8qIHNwZWN1bGFyICovCi0jZGVmaW5lIE1HQV9UMgkJCTB4OAkJLyogbXVsdGl0ZXh0dXJlICovCisjZGVmaW5lIE1HQV9GCQkJMHgxCS8qIGZvZyAqLworI2RlZmluZSBNR0FfQQkJCTB4MgkvKiBhbHBoYSAqLworI2RlZmluZSBNR0FfUwkJCTB4NAkvKiBzcGVjdWxhciAqLworI2RlZmluZSBNR0FfVDIJCQkweDgJLyogbXVsdGl0ZXh0dXJlICovCiAKICNkZWZpbmUgTUdBX1dBUlBfVEdaCQkwCiAjZGVmaW5lIE1HQV9XQVJQX1RHWkYJCShNR0FfRikKQEAgLTY2LDE0ICs2NiwxNCBAQAogI2RlZmluZSBNR0FfV0FSUF9UMkdaU0EJCShNR0FfVDJ8TUdBX1N8TUdBX0EpCiAjZGVmaW5lIE1HQV9XQVJQX1QyR1pTQUYJKE1HQV9UMnxNR0FfU3xNR0FfRnxNR0FfQSkKIAotI2RlZmluZSBNR0FfTUFYX0cyMDBfUElQRVMJOAkJLyogbm8gbXVsdGl0ZXggKi8KKyNkZWZpbmUgTUdBX01BWF9HMjAwX1BJUEVTCTgJLyogbm8gbXVsdGl0ZXggKi8KICNkZWZpbmUgTUdBX01BWF9HNDAwX1BJUEVTCTE2CiAjZGVmaW5lIE1HQV9NQVhfV0FSUF9QSVBFUwlNR0FfTUFYX0c0MDBfUElQRVMKLSNkZWZpbmUgTUdBX1dBUlBfVUNPREVfU0laRQkzMjc2OAkJLyogaW4gYnl0ZXMgKi8KKyNkZWZpbmUgTUdBX1dBUlBfVUNPREVfU0laRQkzMjc2OAkvKiBpbiBieXRlcyAqLwogCiAjZGVmaW5lIE1HQV9DQVJEX1RZUEVfRzIwMAkxCiAjZGVmaW5lIE1HQV9DQVJEX1RZUEVfRzQwMAkyCi0jZGVmaW5lIE1HQV9DQVJEX1RZUEVfRzQ1MAkzICAgICAgIC8qIG5vdCBjdXJyZW50bHkgdXNlZCAqLworI2RlZmluZSBNR0FfQ0FSRF9UWVBFX0c0NTAJMwkvKiBub3QgY3VycmVudGx5IHVzZWQgKi8KICNkZWZpbmUgTUdBX0NBUkRfVFlQRV9HNTUwCTQKIAogI2RlZmluZSBNR0FfRlJPTlQJCTB4MQpAQCAtODYsMTQgKzg2LDE0IEBACiAjZGVmaW5lIE1HQV9VUExPQURfVEVYMAkJMHgyCiAjZGVmaW5lIE1HQV9VUExPQURfVEVYMQkJMHg0CiAjZGVmaW5lIE1HQV9VUExPQURfUElQRQkJMHg4Ci0jZGVmaW5lIE1HQV9VUExPQURfVEVYMElNQUdFCTB4MTAgLyogaGFuZGxlZCBjbGllbnQtc2lkZSAqLwotI2RlZmluZSBNR0FfVVBMT0FEX1RFWDFJTUFHRQkweDIwIC8qIGhhbmRsZWQgY2xpZW50LXNpZGUgKi8KKyNkZWZpbmUgTUdBX1VQTE9BRF9URVgwSU1BR0UJMHgxMAkvKiBoYW5kbGVkIGNsaWVudC1zaWRlICovCisjZGVmaW5lIE1HQV9VUExPQURfVEVYMUlNQUdFCTB4MjAJLyogaGFuZGxlZCBjbGllbnQtc2lkZSAqLwogI2RlZmluZSBNR0FfVVBMT0FEXzJECQkweDQwCi0jZGVmaW5lIE1HQV9XQUlUX0FHRQkJMHg4MCAvKiBoYW5kbGVkIGNsaWVudC1zaWRlICovCi0jZGVmaW5lIE1HQV9VUExPQURfQ0xJUFJFQ1RTCTB4MTAwIC8qIGhhbmRsZWQgY2xpZW50LXNpZGUgKi8KKyNkZWZpbmUgTUdBX1dBSVRfQUdFCQkweDgwCS8qIGhhbmRsZWQgY2xpZW50LXNpZGUgKi8KKyNkZWZpbmUgTUdBX1VQTE9BRF9DTElQUkVDVFMJMHgxMDAJLyogaGFuZGxlZCBjbGllbnQtc2lkZSAqLwogI2lmIDAKLSNkZWZpbmUgTUdBX0RNQV9GTFVTSAkJMHgyMDAgLyogc2V0IHdoZW4gc29tZW9uZSBnZXRzIHRoZSBsb2NrCi0JCQkJCSBxdWllc2NlbnQgKi8KKyNkZWZpbmUgTUdBX0RNQV9GTFVTSAkJMHgyMDAJLyogc2V0IHdoZW4gc29tZW9uZSBnZXRzIHRoZSBsb2NrCisJCQkJCSAgIHF1aWVzY2VudCAqLwogI2VuZGlmCiAKIC8qIDMyIGJ1ZmZlcnMgb2YgNjRrIGVhY2gsIHRvdGFsIDIgbWVnLgpAQCAtMTIwLDggKzEyMCw3IEBACiAKICNkZWZpbmUgIERSTV9NR0FfSURMRV9SRVRSWSAgICAgICAgICAyMDQ4CiAKLSNlbmRpZiAvKiBfX01HQV9TQVJFQV9ERUZJTkVTX18gKi8KLQorI2VuZGlmCQkJCS8qIF9fTUdBX1NBUkVBX0RFRklORVNfXyAqLwogCiAvKiBTZXR1cCByZWdpc3RlcnMgZm9yIDNEIGNvbnRleHQKICAqLwpAQCAtMTY1LDI1ICsxNjQsMjUgQEAKIC8qIEdlbmVyYWwgYWdpbmcgbWVjaGFuaXNtCiAgKi8KIHR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBpbnQgaGVhZDsJCS8qIFBvc2l0aW9uIG9mIGhlYWQgcG9pbnRlciAgICAgICAgICAqLwotCXVuc2lnbmVkIGludCB3cmFwOwkJLyogUHJpbWFyeSBETUEgd3JhcCBjb3VudCAgICAgICAgICAgICovCisJdW5zaWduZWQgaW50IGhlYWQ7CS8qIFBvc2l0aW9uIG9mIGhlYWQgcG9pbnRlciAgICAgICAgICAqLworCXVuc2lnbmVkIGludCB3cmFwOwkvKiBQcmltYXJ5IERNQSB3cmFwIGNvdW50ICAgICAgICAgICAgKi8KIH0gZHJtX21nYV9hZ2VfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgX2RybV9tZ2Ffc2FyZWEgewogCS8qIFRoZSBjaGFubmVsIGZvciBjb21tdW5pY2F0aW9uIG9mIHN0YXRlIGluZm9ybWF0aW9uIHRvIHRoZSBrZXJuZWwKIAkgKiBvbiBmaXJpbmcgYSB2ZXJ0ZXggZG1hIGJ1ZmZlci4KIAkgKi8KLSAgIAlkcm1fbWdhX2NvbnRleHRfcmVnc190IGNvbnRleHRfc3RhdGU7Ci0gICAJZHJtX21nYV9zZXJ2ZXJfcmVnc190IHNlcnZlcl9zdGF0ZTsKLSAgIAlkcm1fbWdhX3RleHR1cmVfcmVnc190IHRleF9zdGF0ZVsyXTsKLSAgIAl1bnNpZ25lZCBpbnQgd2FycF9waXBlOwotICAgCXVuc2lnbmVkIGludCBkaXJ0eTsKLSAgIAl1bnNpZ25lZCBpbnQgdmVydHNpemU7CisJZHJtX21nYV9jb250ZXh0X3JlZ3NfdCBjb250ZXh0X3N0YXRlOworCWRybV9tZ2Ffc2VydmVyX3JlZ3NfdCBzZXJ2ZXJfc3RhdGU7CisJZHJtX21nYV90ZXh0dXJlX3JlZ3NfdCB0ZXhfc3RhdGVbMl07CisJdW5zaWduZWQgaW50IHdhcnBfcGlwZTsKKwl1bnNpZ25lZCBpbnQgZGlydHk7CisJdW5zaWduZWQgaW50IHZlcnRzaXplOwogCiAJLyogVGhlIGN1cnJlbnQgY2xpcHJlY3RzLCBvciBhIHN1YnNldCB0aGVyZW9mLgogCSAqLwotICAgCWRybV9jbGlwX3JlY3RfdCBib3hlc1tNR0FfTlJfU0FSRUFfQ0xJUFJFQ1RTXTsKLSAgIAl1bnNpZ25lZCBpbnQgbmJveDsKKwlkcm1fY2xpcF9yZWN0X3QgYm94ZXNbTUdBX05SX1NBUkVBX0NMSVBSRUNUU107CisJdW5zaWduZWQgaW50IG5ib3g7CiAKIAkvKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgbW9zdCByZWNlbnRseSB1c2VkIDNkIGRyYXdhYmxlLiAgVGhlCiAJICogY2xpZW50IGZpbGxzIGluIHRoZSByZXFfKiBmaWVsZHMsIHRoZSBzZXJ2ZXIgZmlsbHMgaW4gdGhlCkBAIC0xOTIsMTggKzE5MSwxOCBAQAogCSAqIFRoZSBjbGllbnQgY2xlYXJzIHRoZSBleHBvcnRlZF9kcmF3YWJsZSBmaWVsZCBiZWZvcmUKIAkgKiBjbG9iYmVyaW5nIHRoZSBib3hlcyBkYXRhLgogCSAqLwotICAgICAgICB1bnNpZ25lZCBpbnQgcmVxX2RyYXdhYmxlOwkgLyogdGhlIFggZHJhd2FibGUgaWQgKi8KLQl1bnNpZ25lZCBpbnQgcmVxX2RyYXdfYnVmZmVyOwkgLyogTUdBX0ZST05UIG9yIE1HQV9CQUNLICovCisJdW5zaWduZWQgaW50IHJlcV9kcmF3YWJsZTsJLyogdGhlIFggZHJhd2FibGUgaWQgKi8KKwl1bnNpZ25lZCBpbnQgcmVxX2RyYXdfYnVmZmVyOwkvKiBNR0FfRlJPTlQgb3IgTUdBX0JBQ0sgKi8KIAotICAgICAgICB1bnNpZ25lZCBpbnQgZXhwb3J0ZWRfZHJhd2FibGU7CisJdW5zaWduZWQgaW50IGV4cG9ydGVkX2RyYXdhYmxlOwogCXVuc2lnbmVkIGludCBleHBvcnRlZF9pbmRleDsKLSAgICAgICAgdW5zaWduZWQgaW50IGV4cG9ydGVkX3N0YW1wOwotICAgICAgICB1bnNpZ25lZCBpbnQgZXhwb3J0ZWRfYnVmZmVyczsKLSAgICAgICAgdW5zaWduZWQgaW50IGV4cG9ydGVkX25mcm9udDsKLSAgICAgICAgdW5zaWduZWQgaW50IGV4cG9ydGVkX25iYWNrOworCXVuc2lnbmVkIGludCBleHBvcnRlZF9zdGFtcDsKKwl1bnNpZ25lZCBpbnQgZXhwb3J0ZWRfYnVmZmVyczsKKwl1bnNpZ25lZCBpbnQgZXhwb3J0ZWRfbmZyb250OworCXVuc2lnbmVkIGludCBleHBvcnRlZF9uYmFjazsKIAlpbnQgZXhwb3J0ZWRfYmFja194LCBleHBvcnRlZF9mcm9udF94LCBleHBvcnRlZF93OwogCWludCBleHBvcnRlZF9iYWNrX3ksIGV4cG9ydGVkX2Zyb250X3ksIGV4cG9ydGVkX2g7Ci0gICAJZHJtX2NsaXBfcmVjdF90IGV4cG9ydGVkX2JveGVzW01HQV9OUl9TQVJFQV9DTElQUkVDVFNdOworCWRybV9jbGlwX3JlY3RfdCBleHBvcnRlZF9ib3hlc1tNR0FfTlJfU0FSRUFfQ0xJUFJFQ1RTXTsKIAogCS8qIENvdW50ZXJzIGZvciBhZ2luZyB0ZXh0dXJlcyBhbmQgZm9yIGNsaWVudC1zaWRlIHRocm90dGxpbmcuCiAJICovCkBAIC0yMTEsMjEgKzIxMCwyMCBAQAogCXVuc2lnbmVkIGludCBsYXN0X3dyYXA7CiAKIAlkcm1fbWdhX2FnZV90IGxhc3RfZnJhbWU7Ci0gICAgICAgIHVuc2lnbmVkIGludCBsYXN0X2VucXVldWU7CS8qIGxhc3QgdGltZSBhIGJ1ZmZlciB3YXMgZW5xdWV1ZWQgKi8KKwl1bnNpZ25lZCBpbnQgbGFzdF9lbnF1ZXVlOwkvKiBsYXN0IHRpbWUgYSBidWZmZXIgd2FzIGVucXVldWVkICovCiAJdW5zaWduZWQgaW50IGxhc3RfZGlzcGF0Y2g7CS8qIGFnZSBvZiB0aGUgbW9zdCByZWNlbnRseSBkaXNwYXRjaGVkIGJ1ZmZlciAqLwotCXVuc2lnbmVkIGludCBsYXN0X3F1aWVzY2VudDsgICAgIC8qICAqLworCXVuc2lnbmVkIGludCBsYXN0X3F1aWVzY2VudDsJLyogICovCiAKIAkvKiBMUlUgbGlzdHMgZm9yIHRleHR1cmUgbWVtb3J5IGluIGFncCBzcGFjZSBhbmQgb24gdGhlIGNhcmQuCiAJICovCi0JZHJtX3RleF9yZWdpb25fdCB0ZXhMaXN0W01HQV9OUl9URVhfSEVBUFNdW01HQV9OUl9URVhfUkVHSU9OUysxXTsKKwlkcm1fdGV4X3JlZ2lvbl90IHRleExpc3RbTUdBX05SX1RFWF9IRUFQU11bTUdBX05SX1RFWF9SRUdJT05TICsgMV07CiAJdW5zaWduZWQgaW50IHRleEFnZVtNR0FfTlJfVEVYX0hFQVBTXTsKIAogCS8qIE1lY2hhbmlzbSB0byB2YWxpZGF0ZSBjYXJkIHN0YXRlLgogCSAqLwotICAgCWludCBjdHhPd25lcjsKKwlpbnQgY3R4T3duZXI7CiB9IGRybV9tZ2Ffc2FyZWFfdDsKIAotCiAvKiBNR0Egc3BlY2lmaWMgaW9jdGxzCiAgKiBUaGUgZGV2aWNlIHNwZWNpZmljIGlvY3RsIHJhbmdlIGlzIDB4NDAgdG8gMHg3OS4KICAqLwpAQCAtMjQ3LDcgKzI0NSw2IEBACiAjZGVmaW5lIERSTV9NR0FfV0FJVF9GRU5DRSAgICAgMHgwYgogI2RlZmluZSBEUk1fTUdBX0RNQV9CT09UU1RSQVAgIDB4MGMKIAotCiAjZGVmaW5lIERSTV9JT0NUTF9NR0FfSU5JVCAgICAgRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9NR0FfSU5JVCwgZHJtX21nYV9pbml0X3QpCiAjZGVmaW5lIERSTV9JT0NUTF9NR0FfRkxVU0ggICAgRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9NR0FfRkxVU0gsIGRybV9sb2NrX3QpCiAjZGVmaW5lIERSTV9JT0NUTF9NR0FfUkVTRVQgICAgRFJNX0lPKCAgRFJNX0NPTU1BTkRfQkFTRSArIERSTV9NR0FfUkVTRVQpCkBAIC0yNjMsMzMgKzI2MCwzMyBAQAogI2RlZmluZSBEUk1fSU9DVExfTUdBX0RNQV9CT09UU1RSQVAgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9NR0FfRE1BX0JPT1RTVFJBUCwgZHJtX21nYV9kbWFfYm9vdHN0cmFwX3QpCiAKIHR5cGVkZWYgc3RydWN0IF9kcm1fbWdhX3dhcnBfaW5kZXggewotICAgCWludCBpbnN0YWxsZWQ7Ci0gICAJdW5zaWduZWQgbG9uZyBwaHlzX2FkZHI7Ci0gICAJaW50IHNpemU7CisJaW50IGluc3RhbGxlZDsKKwl1bnNpZ25lZCBsb25nIHBoeXNfYWRkcjsKKwlpbnQgc2l6ZTsKIH0gZHJtX21nYV93YXJwX2luZGV4X3Q7CiAKIHR5cGVkZWYgc3RydWN0IGRybV9tZ2FfaW5pdCB7Ci0gICAJZW51bSB7Ci0JICAgCU1HQV9JTklUX0RNQSAgICA9IDB4MDEsCi0JICAgICAgIAlNR0FfQ0xFQU5VUF9ETUEgPSAweDAyCisJZW51bSB7CisJCU1HQV9JTklUX0RNQSA9IDB4MDEsCisJCU1HQV9DTEVBTlVQX0RNQSA9IDB4MDIKIAl9IGZ1bmM7CiAKLSAgIAl1bnNpZ25lZCBsb25nIHNhcmVhX3ByaXZfb2Zmc2V0OworCXVuc2lnbmVkIGxvbmcgc2FyZWFfcHJpdl9vZmZzZXQ7CiAKIAlpbnQgY2hpcHNldDsKLSAgIAlpbnQgc2dyYW07CisJaW50IHNncmFtOwogCiAJdW5zaWduZWQgaW50IG1hY2Nlc3M7CiAKLSAgIAl1bnNpZ25lZCBpbnQgZmJfY3BwOworCXVuc2lnbmVkIGludCBmYl9jcHA7CiAJdW5zaWduZWQgaW50IGZyb250X29mZnNldCwgZnJvbnRfcGl0Y2g7Ci0gICAJdW5zaWduZWQgaW50IGJhY2tfb2Zmc2V0LCBiYWNrX3BpdGNoOworCXVuc2lnbmVkIGludCBiYWNrX29mZnNldCwgYmFja19waXRjaDsKIAotICAgCXVuc2lnbmVkIGludCBkZXB0aF9jcHA7Ci0gICAJdW5zaWduZWQgaW50IGRlcHRoX29mZnNldCwgZGVwdGhfcGl0Y2g7CisJdW5zaWduZWQgaW50IGRlcHRoX2NwcDsKKwl1bnNpZ25lZCBpbnQgZGVwdGhfb2Zmc2V0LCBkZXB0aF9waXRjaDsKIAotICAgCXVuc2lnbmVkIGludCB0ZXh0dXJlX29mZnNldFtNR0FfTlJfVEVYX0hFQVBTXTsKLSAgIAl1bnNpZ25lZCBpbnQgdGV4dHVyZV9zaXplW01HQV9OUl9URVhfSEVBUFNdOworCXVuc2lnbmVkIGludCB0ZXh0dXJlX29mZnNldFtNR0FfTlJfVEVYX0hFQVBTXTsKKwl1bnNpZ25lZCBpbnQgdGV4dHVyZV9zaXplW01HQV9OUl9URVhfSEVBUFNdOwogCiAJdW5zaWduZWQgbG9uZyBmYl9vZmZzZXQ7CiAJdW5zaWduZWQgbG9uZyBtbWlvX29mZnNldDsKQEAgLTMwMiw2NCArMjk5LDU5IEBACiB0eXBlZGVmIHN0cnVjdCBkcm1fbWdhX2RtYV9ib290c3RyYXAgewogCS8qKgogCSAqIFxuYW1lIEFHUCB0ZXh0dXJlIHJlZ2lvbgotCSAqIAorCSAqCiAJICogT24gcmV0dXJuIGZyb20gdGhlIERSTV9NR0FfRE1BX0JPT1RTVFJBUCBpb2N0bCwgdGhlc2UgZmllbGRzIHdpbGwKIAkgKiBiZSBmaWxsZWQgaW4gd2l0aCB0aGUgYWN0dWFsIEFHUCB0ZXh0dXJlIHNldHRpbmdzLgotCSAqIAorCSAqCiAJICogXHdhcm5pbmcKIAkgKiBJZiB0aGVzZSBmaWVsZHMgYXJlIG5vbi16ZXJvLCBidXQgZG1hX21nYV9kbWFfYm9vdHN0cmFwOjphZ3BfbW9kZQogCSAqIGlzIHplcm8sIGl0IG1lYW5zIHRoYXQgUENJIG1lbW9yeSAobW9zdCBsaWtlbHkgdGhyb3VnaCB0aGUgdXNlIG9mCiAJICogYW4gSU9NTVUpIGlzIGJlaW5nIHVzZWQgZm9yICJBR1AiIHRleHR1cmVzLgogCSAqLwotCS8qQHsqLworCS8qQHsgKi8KIAl1bnNpZ25lZCBsb25nIHRleHR1cmVfaGFuZGxlOyAvKio8IEhhbmRsZSB1c2VkIHRvIG1hcCBBR1AgdGV4dHVyZXMuICovCi0JdWludDMyX3QgICAgIHRleHR1cmVfc2l6ZTsgICAgLyoqPCBTaXplIG9mIHRoZSBBR1AgdGV4dHVyZSByZWdpb24uICovCi0JLypAfSovCi0KKwl1aW50MzJfdCB0ZXh0dXJlX3NpemU7CSAgICAgIC8qKjwgU2l6ZSBvZiB0aGUgQUdQIHRleHR1cmUgcmVnaW9uLiAqLworCS8qQH0gKi8KIAogCS8qKgogCSAqIFJlcXVlc3RlZCBzaXplIG9mIHRoZSBwcmltYXJ5IERNQSByZWdpb24uCi0JICogCisJICoKIAkgKiBPbiByZXR1cm4gZnJvbSB0aGUgRFJNX01HQV9ETUFfQk9PVFNUUkFQIGlvY3RsLCB0aGlzIGZpZWxkIHdpbGwgYmUKIAkgKiBmaWxsZWQgaW4gd2l0aCB0aGUgYWN0dWFsIEFHUCBtb2RlLiAgSWYgQUdQIHdhcyBub3QgYXZhaWxhYmxlCiAJICovCiAJdWludDMyX3QgcHJpbWFyeV9zaXplOwogCi0KIAkvKioKIAkgKiBSZXF1ZXN0ZWQgbnVtYmVyIG9mIHNlY29uZGFyeSBETUEgYnVmZmVycy4KLQkgKiAKKwkgKgogCSAqIE9uIHJldHVybiBmcm9tIHRoZSBEUk1fTUdBX0RNQV9CT09UU1RSQVAgaW9jdGwsIHRoaXMgZmllbGQgd2lsbCBiZQogCSAqIGZpbGxlZCBpbiB3aXRoIHRoZSBhY3R1YWwgbnVtYmVyIG9mIHNlY29uZGFyeSBETUEgYnVmZmVycwogCSAqIGFsbG9jYXRlZC4gIFBhcnRpY3VsYXJseSB3aGVuIFBDSSBETUEgaXMgdXNlZCwgdGhpcyBtYXkgYmUKIAkgKiAoc3VidGFudGlhbGx5KSBsZXNzIHRoYW4gdGhlIG51bWJlciByZXF1ZXN0ZWQuCiAJICovCiAJdWludDMyX3Qgc2Vjb25kYXJ5X2Jpbl9jb3VudDsKLQkKLQkKKwogCS8qKgogCSAqIFJlcXVlc3RlZCBzaXplIG9mIGVhY2ggc2Vjb25kYXJ5IERNQSBidWZmZXIuCi0JICogCisJICoKIAkgKiBXaGlsZSB0aGUga2VybmVsIFxiIGlzIGZyZWUgdG8gcmVkdWNlCiAJICogZG1hX21nYV9kbWFfYm9vdHN0cmFwOjpzZWNvbmRhcnlfYmluX2NvdW50LCBpdCBpcyBcYiBub3QgYWxsb3dlZAogCSAqIHRvIHJlZHVjZSBkbWFfbWdhX2RtYV9ib290c3RyYXA6OnNlY29uZGFyeV9iaW5fc2l6ZS4KIAkgKi8KIAl1aW50MzJfdCBzZWNvbmRhcnlfYmluX3NpemU7CiAKLQogCS8qKgogCSAqIEJpdC13aXNlIG1hc2sgb2YgQUdQU1RBVDJfKiB2YWx1ZXMuICBDdXJyZW50bHkgb25seSBcYyBBR1BTVEFUMl8xWCwKIAkgKiBcYyBBR1BTVEFUMl8yWCwgYW5kIFxjIEFHUFNUQVQyXzRYIGFyZSBzdXBwb3J0ZWQuICBJZiB0aGlzIHZhbHVlIGlzCiAJICogemVybywgaXQgbWVhbnMgdGhhdCBQQ0kgRE1BIHNob3VsZCBiZSB1c2VkLCBldmVuIGlmIEFHUCBpcwogCSAqIHBvc3NpYmxlLgotCSAqIAorCSAqCiAJICogT24gcmV0dXJuIGZyb20gdGhlIERSTV9NR0FfRE1BX0JPT1RTVFJBUCBpb2N0bCwgdGhpcyBmaWVsZCB3aWxsIGJlCiAJICogZmlsbGVkIGluIHdpdGggdGhlIGFjdHVhbCBBR1AgbW9kZS4gIElmIEFHUCB3YXMgbm90IGF2YWlsYWJsZQogCSAqIChpLmUuLCBQQ0kgRE1BIHdhcyB1c2VkKSwgdGhpcyB2YWx1ZSB3aWxsIGJlIHplcm8uCiAJICovCiAJdWludDMyX3QgYWdwX21vZGU7CiAKLQogCS8qKgogCSAqIERlc2lyZWQgQUdQIEdBUlQgc2l6ZSwgbWVhc3VyZWQgaW4gbWVnYWJ5dGVzLgogCSAqLwpAQCAtMzc1LDE2ICszNjcsMTYgQEAKIH0gZHJtX21nYV9jbGVhcl90OwogCiB0eXBlZGVmIHN0cnVjdCBkcm1fbWdhX3ZlcnRleCB7Ci0gICAJaW50IGlkeDsJCQkvKiBidWZmZXIgdG8gcXVldWUgKi8KLQlpbnQgdXNlZDsJCQkvKiBieXRlcyBpbiB1c2UgKi8KLQlpbnQgZGlzY2FyZDsJCQkvKiBjbGllbnQgZmluaXNoZWQgd2l0aCBidWZmZXI/ICAqLworCWludCBpZHg7CQkvKiBidWZmZXIgdG8gcXVldWUgKi8KKwlpbnQgdXNlZDsJCS8qIGJ5dGVzIGluIHVzZSAqLworCWludCBkaXNjYXJkOwkJLyogY2xpZW50IGZpbmlzaGVkIHdpdGggYnVmZmVyPyAgKi8KIH0gZHJtX21nYV92ZXJ0ZXhfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX21nYV9pbmRpY2VzIHsKLSAgIAlpbnQgaWR4OwkJCS8qIGJ1ZmZlciB0byBxdWV1ZSAqLworCWludCBpZHg7CQkvKiBidWZmZXIgdG8gcXVldWUgKi8KIAl1bnNpZ25lZCBpbnQgc3RhcnQ7CiAJdW5zaWduZWQgaW50IGVuZDsKLQlpbnQgZGlzY2FyZDsJCQkvKiBjbGllbnQgZmluaXNoZWQgd2l0aCBidWZmZXI/ICAqLworCWludCBkaXNjYXJkOwkJLyogY2xpZW50IGZpbmlzaGVkIHdpdGggYnVmZmVyPyAgKi8KIH0gZHJtX21nYV9pbmRpY2VzX3Q7CiAKIHR5cGVkZWYgc3RydWN0IGRybV9tZ2FfaWxvYWQgewpAQCAtNDAwLDEyICszOTIsMTIgQEAKIAlpbnQgc3JjX3BpdGNoLCBkc3RfcGl0Y2g7CiAJaW50IGRlbHRhX3N4LCBkZWx0YV9zeTsKIAlpbnQgZGVsdGFfZHgsIGRlbHRhX2R5OwotCWludCBoZWlnaHQsIHlkaXI7CQkvKiBmbGlwIGltYWdlIHZlcnRpY2FsbHkgKi8KKwlpbnQgaGVpZ2h0LCB5ZGlyOwkvKiBmbGlwIGltYWdlIHZlcnRpY2FsbHkgKi8KIAlpbnQgc291cmNlX3BpdGNoLCBkZXN0X3BpdGNoOwogfSBkcm1fbWdhX2JsaXRfdDsKIAogLyogMy4xOiBBbiBpb2N0bCB0byBnZXQgcGFyYW1ldGVycyB0aGF0IGFyZW4ndCBhdmFpbGFibGUgdG8gdGhlIDNkCi0gKiBjbGllbnQgYW55IG90aGVyIHdheS4gIAorICogY2xpZW50IGFueSBvdGhlciB3YXkuCiAgKi8KICNkZWZpbmUgTUdBX1BBUkFNX0lSUV9OUiAgICAgICAgICAgIDEKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9tZ2FfZHJ2LmMgYi9kcml2ZXJzL2NoYXIvZHJtL21nYV9kcnYuYwppbmRleCBkYWFiYmJhLi4yMjAwMzdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL21nYV9kcnYuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL21nYV9kcnYuYwpAQCAtMzUsMTQgKzM1LDEzIEBACiAjaW5jbHVkZSAibWdhX2RybS5oIgogI2luY2x1ZGUgIm1nYV9kcnYuaCIKIAotICAKICNpbmNsdWRlICJkcm1fcGNpaWRzLmgiCiAKIHN0YXRpYyBpbnQgbWdhX2RyaXZlcl9kZXZpY2VfaXNfYWdwKGRybV9kZXZpY2VfdCAqIGRldik7Ci1zdGF0aWMgaW50IHBvc3Rpbml0KCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzICkKK3N0YXRpYyBpbnQgcG9zdGluaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKLQlkcm1fbWdhX3ByaXZhdGVfdCAqIGNvbnN0IGRldl9wcml2ID0KLQkJKGRybV9tZ2FfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisJZHJtX21nYV9wcml2YXRlX3QgKmNvbnN0IGRldl9wcml2ID0KKwkgICAgKGRybV9tZ2FfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CiAKIAlkZXZfcHJpdi0+bW1pb19iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGRldiwgMSk7CiAJZGV2X3ByaXYtPm1taW9fc2l6ZSA9IHBjaV9yZXNvdXJjZV9sZW4oZGV2LT5wZGV2LCAxKTsKQEAgLTUyLDI4ICs1MSwyNiBAQAogCWRldi0+dHlwZXNbN10gPSBfRFJNX1NUQVRfUFJJTUFSWTsKIAlkZXYtPnR5cGVzWzhdID0gX0RSTV9TVEFUX1NFQ09OREFSWTsKIAotCURSTV9JTkZPKCAiSW5pdGlhbGl6ZWQgJXMgJWQuJWQuJWQgJXMgb24gbWlub3IgJWQ6ICVzXG4iLAotCQlEUklWRVJfTkFNRSwKLQkJRFJJVkVSX01BSk9SLAotCQlEUklWRVJfTUlOT1IsCi0JCURSSVZFUl9QQVRDSExFVkVMLAotCQlEUklWRVJfREFURSwKLQkJZGV2LT5wcmltYXJ5Lm1pbm9yLAotCQlwY2lfcHJldHR5X25hbWUoZGV2LT5wZGV2KQotCQkpOworCURSTV9JTkZPKCJJbml0aWFsaXplZCAlcyAlZC4lZC4lZCAlcyBvbiBtaW5vciAlZDogJXNcbiIsCisJCSBEUklWRVJfTkFNRSwKKwkJIERSSVZFUl9NQUpPUiwKKwkJIERSSVZFUl9NSU5PUiwKKwkJIERSSVZFUl9QQVRDSExFVkVMLAorCQkgRFJJVkVSX0RBVEUsIGRldi0+cHJpbWFyeS5taW5vciwgcGNpX3ByZXR0eV9uYW1lKGRldi0+cGRldikKKwkgICAgKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2ZXJzaW9uKCBkcm1fdmVyc2lvbl90ICp2ZXJzaW9uICkKK3N0YXRpYyBpbnQgdmVyc2lvbihkcm1fdmVyc2lvbl90ICogdmVyc2lvbikKIHsKIAlpbnQgbGVuOwogCiAJdmVyc2lvbi0+dmVyc2lvbl9tYWpvciA9IERSSVZFUl9NQUpPUjsKIAl2ZXJzaW9uLT52ZXJzaW9uX21pbm9yID0gRFJJVkVSX01JTk9SOwogCXZlcnNpb24tPnZlcnNpb25fcGF0Y2hsZXZlbCA9IERSSVZFUl9QQVRDSExFVkVMOwotCURSTV9DT1BZKCB2ZXJzaW9uLT5uYW1lLCBEUklWRVJfTkFNRSApOwotCURSTV9DT1BZKCB2ZXJzaW9uLT5kYXRlLCBEUklWRVJfREFURSApOwotCURSTV9DT1BZKCB2ZXJzaW9uLT5kZXNjLCBEUklWRVJfREVTQyApOworCURSTV9DT1BZKHZlcnNpb24tPm5hbWUsIERSSVZFUl9OQU1FKTsKKwlEUk1fQ09QWSh2ZXJzaW9uLT5kYXRlLCBEUklWRVJfREFURSk7CisJRFJNX0NPUFkodmVyc2lvbi0+ZGVzYywgRFJJVkVSX0RFU0MpOwogCXJldHVybiAwOwogfQogCkBAIC04NSw3ICs4MiwxMCBAQAogZXh0ZXJuIGludCBtZ2FfbWF4X2lvY3RsOwogCiBzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIgZHJpdmVyID0gewotCS5kcml2ZXJfZmVhdHVyZXMgPSBEUklWRVJfVVNFX0FHUCB8IERSSVZFUl9SRVFVSVJFX0FHUCB8IERSSVZFUl9VU0VfTVRSUiB8IERSSVZFUl9IQVZFX0RNQSB8IERSSVZFUl9IQVZFX0lSUSB8IERSSVZFUl9JUlFfU0hBUkVEIHwgRFJJVkVSX0lSUV9WQkwsCisJLmRyaXZlcl9mZWF0dXJlcyA9CisJICAgIERSSVZFUl9VU0VfQUdQIHwgRFJJVkVSX1JFUVVJUkVfQUdQIHwgRFJJVkVSX1VTRV9NVFJSIHwKKwkgICAgRFJJVkVSX0hBVkVfRE1BIHwgRFJJVkVSX0hBVkVfSVJRIHwgRFJJVkVSX0lSUV9TSEFSRUQgfAorCSAgICBEUklWRVJfSVJRX1ZCTCwKIAkucHJlaW5pdCA9IG1nYV9kcml2ZXJfcHJlaW5pdCwKIAkucG9zdGNsZWFudXAgPSBtZ2FfZHJpdmVyX3Bvc3RjbGVhbnVwLAogCS5wcmV0YWtlZG93biA9IG1nYV9kcml2ZXJfcHJldGFrZWRvd24sCkBAIC0xMDQsMjEgKzEwNCwyMSBAQAogCS5pb2N0bHMgPSBtZ2FfaW9jdGxzLAogCS5kbWFfaW9jdGwgPSBtZ2FfZG1hX2J1ZmZlcnMsCiAJLmZvcHMgPSB7Ci0JCS5vd25lciA9IFRISVNfTU9EVUxFLAotCQkub3BlbiA9IGRybV9vcGVuLAotCQkucmVsZWFzZSA9IGRybV9yZWxlYXNlLAotCQkuaW9jdGwgPSBkcm1faW9jdGwsCi0JCS5tbWFwID0gZHJtX21tYXAsCi0JCS5wb2xsID0gZHJtX3BvbGwsCi0JCS5mYXN5bmMgPSBkcm1fZmFzeW5jLAorCQkgLm93bmVyID0gVEhJU19NT0RVTEUsCisJCSAub3BlbiA9IGRybV9vcGVuLAorCQkgLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKKwkJIC5pb2N0bCA9IGRybV9pb2N0bCwKKwkJIC5tbWFwID0gZHJtX21tYXAsCisJCSAucG9sbCA9IGRybV9wb2xsLAorCQkgLmZhc3luYyA9IGRybV9mYXN5bmMsCiAjaWZkZWYgQ09ORklHX0NPTVBBVAotCQkuY29tcGF0X2lvY3RsID0gbWdhX2NvbXBhdF9pb2N0bCwKKwkJIC5jb21wYXRfaW9jdGwgPSBtZ2FfY29tcGF0X2lvY3RsLAogI2VuZGlmCi0JfSwKKwkJIH0sCiAJLnBjaV9kcml2ZXIgPSB7Ci0JCS5uYW1lID0gRFJJVkVSX05BTUUsCi0JCS5pZF90YWJsZSA9IHBjaWlkbGlzdCwKLQl9CisJCSAgICAgICAubmFtZSA9IERSSVZFUl9OQU1FLAorCQkgICAgICAgLmlkX3RhYmxlID0gcGNpaWRsaXN0LAorCQkgICAgICAgfQogfTsKIAogc3RhdGljIGludCBfX2luaXQgbWdhX2luaXQodm9pZCkKQEAgLTEzNSw4ICsxMzUsOCBAQAogbW9kdWxlX2luaXQobWdhX2luaXQpOwogbW9kdWxlX2V4aXQobWdhX2V4aXQpOwogCi1NT0RVTEVfQVVUSE9SKCBEUklWRVJfQVVUSE9SICk7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIERSSVZFUl9ERVNDICk7CitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgYW5kIGFkZGl0aW9uYWwgcmlnaHRzIik7CiAKIC8qKgpAQCAtMTUzLDggKzE1Myw3IEBACiAgKi8KIGludCBtZ2FfZHJpdmVyX2RldmljZV9pc19hZ3AoZHJtX2RldmljZV90ICogZGV2KQogewotCWNvbnN0IHN0cnVjdCBwY2lfZGV2ICogY29uc3QgcGRldiA9IGRldi0+cGRldjsKLQorCWNvbnN0IHN0cnVjdCBwY2lfZGV2ICpjb25zdCBwZGV2ID0gZGV2LT5wZGV2OwogCiAJLyogVGhlcmUgYXJlIFBDSSB2ZXJzaW9ucyBvZiB0aGUgRzQ1MC4gIFRoZXNlIGNhcmRzIGhhdmUgdGhlCiAJICogc2FtZSBQQ0kgSUQgYXMgdGhlIEFHUCBHNDUwLCBidXQgaGF2ZSBhbiBhZGRpdGlvbmFsIFBDSS10by1QQ0kKQEAgLTE2NCwxMCArMTYzLDEwIEBACiAJICogZGV2aWNlIGlzIDB4MDAyMSAoSEI2IFVuaXZlcnNhbCBQQ0ktUENJIGJyaWRnZSksIHdlIHJlamVjdCB0aGUKIAkgKiBkZXZpY2UuCiAJICovCi0JCi0JaWYgKCAocGRldi0+ZGV2aWNlID09IDB4MDUyNSkKLQkgICAgICYmIChwZGV2LT5idXMtPnNlbGYtPnZlbmRvciA9PSAweDMzODgpCi0JICAgICAmJiAocGRldi0+YnVzLT5zZWxmLT5kZXZpY2UgPT0gMHgwMDIxKSApIHsKKworCWlmICgocGRldi0+ZGV2aWNlID09IDB4MDUyNSkKKwkgICAgJiYgKHBkZXYtPmJ1cy0+c2VsZi0+dmVuZG9yID09IDB4MzM4OCkKKwkgICAgJiYgKHBkZXYtPmJ1cy0+c2VsZi0+ZGV2aWNlID09IDB4MDAyMSkpIHsKIAkJcmV0dXJuIDA7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL21nYV9kcnYuaCBiL2RyaXZlcnMvY2hhci9kcm0vbWdhX2Rydi5oCmluZGV4IGIyMmZkYmQuLjA1ZjBmOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vbWdhX2Rydi5oCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vbWdhX2Rydi5oCkBAIC02MiwxNCArNjIsMTQgQEAKIH0gZHJtX21nYV9wcmltYXJ5X2J1ZmZlcl90OwogCiB0eXBlZGVmIHN0cnVjdCBkcm1fbWdhX2ZyZWVsaXN0IHsKLSAgIAlzdHJ1Y3QgZHJtX21nYV9mcmVlbGlzdCAqbmV4dDsKLSAgIAlzdHJ1Y3QgZHJtX21nYV9mcmVlbGlzdCAqcHJldjsKKwlzdHJ1Y3QgZHJtX21nYV9mcmVlbGlzdCAqbmV4dDsKKwlzdHJ1Y3QgZHJtX21nYV9mcmVlbGlzdCAqcHJldjsKIAlkcm1fbWdhX2FnZV90IGFnZTsKLSAgIAlkcm1fYnVmX3QgKmJ1ZjsKKwlkcm1fYnVmX3QgKmJ1ZjsKIH0gZHJtX21nYV9mcmVlbGlzdF90OwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAJZHJtX21nYV9mcmVlbGlzdF90ICpsaXN0X2VudHJ5OworCWRybV9tZ2FfZnJlZWxpc3RfdCAqbGlzdF9lbnRyeTsKIAlpbnQgZGlzY2FyZDsKIAlpbnQgZGlzcGF0Y2hlZDsKIH0gZHJtX21nYV9idWZfcHJpdl90OwpAQCAtNzgsOCArNzgsOCBAQAogCWRybV9tZ2FfcHJpbWFyeV9idWZmZXJfdCBwcmltOwogCWRybV9tZ2Ffc2FyZWFfdCAqc2FyZWFfcHJpdjsKIAotICAgCWRybV9tZ2FfZnJlZWxpc3RfdCAqaGVhZDsKLSAgIAlkcm1fbWdhX2ZyZWVsaXN0X3QgKnRhaWw7CisJZHJtX21nYV9mcmVlbGlzdF90ICpoZWFkOworCWRybV9tZ2FfZnJlZWxpc3RfdCAqdGFpbDsKIAogCXVuc2lnbmVkIGludCB3YXJwX3BpcGU7CiAJdW5zaWduZWQgbG9uZyB3YXJwX3BpcGVfcGh5c1tNR0FfTUFYX1dBUlBfUElQRVNdOwpAQCAtMTA5LDEzICsxMDksMTMgQEAKIAogCS8qKgogCSAqIFxuYW1lIE1NSU8gcmVnaW9uIHBhcmFtZXRlcnMuCi0JICogCisJICoKIAkgKiBcc2EgZHJtX21nYV9wcml2YXRlX3Q6Om1taW8KIAkgKi8KLQkvKkB7Ki8KLQl1MzIgbW1pb19iYXNlOyAgICAgICAgICAgICAvKio8IEJ1cyBhZGRyZXNzIG9mIGJhc2Ugb2YgTU1JTy4gKi8KLQl1MzIgbW1pb19zaXplOyAgICAgICAgICAgICAvKio8IFNpemUgb2YgdGhlIE1NSU8gcmVnaW9uLiAqLwotCS8qQH0qLworCS8qQHsgKi8KKwl1MzIgbW1pb19iYXNlOwkJICAgLyoqPCBCdXMgYWRkcmVzcyBvZiBiYXNlIG9mIE1NSU8uICovCisJdTMyIG1taW9fc2l6ZTsJCSAgIC8qKjwgU2l6ZSBvZiB0aGUgTU1JTyByZWdpb24uICovCisJLypAfSAqLwogCiAJdTMyIGNsZWFyX2NtZDsKIAl1MzIgbWFjY2VzczsKQEAgLTE0Myw3ICsxNDMsNyBAQAogCWRybV9sb2NhbF9tYXBfdCAqd2FycDsKIAlkcm1fbG9jYWxfbWFwX3QgKnByaW1hcnk7CiAJZHJtX2xvY2FsX21hcF90ICphZ3BfdGV4dHVyZXM7Ci0JCisKIAlEUk1fQUdQX01FTSAqYWdwX21lbTsKIAl1bnNpZ25lZCBpbnQgYWdwX3BhZ2VzOwogfSBkcm1fbWdhX3ByaXZhdGVfdDsKQEAgLTE2NSw3ICsxNjUsNyBAQAogZXh0ZXJuIHZvaWQgbWdhX2RvX2RtYV93cmFwX3N0YXJ0KGRybV9tZ2FfcHJpdmF0ZV90ICogZGV2X3ByaXYpOwogZXh0ZXJuIHZvaWQgbWdhX2RvX2RtYV93cmFwX2VuZChkcm1fbWdhX3ByaXZhdGVfdCAqIGRldl9wcml2KTsKIAotZXh0ZXJuIGludCBtZ2FfZnJlZWxpc3RfcHV0KCBkcm1fZGV2aWNlX3QgKmRldiwgZHJtX2J1Zl90ICpidWYgKTsKK2V4dGVybiBpbnQgbWdhX2ZyZWVsaXN0X3B1dChkcm1fZGV2aWNlX3QgKiBkZXYsIGRybV9idWZfdCAqIGJ1Zik7CiAKIAkJCQkvKiBtZ2Ffd2FycC5jICovCiBleHRlcm4gdW5zaWduZWQgaW50IG1nYV93YXJwX21pY3JvY29kZV9zaXplKGNvbnN0IGRybV9tZ2FfcHJpdmF0ZV90ICogZGV2X3ByaXYpOwpAQCAtMTk2LDcgKzE5Niw3IEBACiAjZGVmaW5lIE1HQV9XUklURSggcmVnLCB2YWwgKQlkbyB7IERSTV9XUklURU1FTU9SWUJBUlJJRVIoKTsgTUdBX0RFUkVGKCByZWcgKSA9IHZhbDsgfSB3aGlsZSAoMCkKICNkZWZpbmUgTUdBX1dSSVRFOCggcmVnLCB2YWwgKSAgZG8geyBEUk1fV1JJVEVNRU1PUllCQVJSSUVSKCk7IE1HQV9ERVJFRjgoIHJlZyApID0gdmFsOyB9IHdoaWxlICgwKQogCi1zdGF0aWMgaW5saW5lIHUzMiBfTUdBX1JFQUQodTMyICphZGRyKQorc3RhdGljIGlubGluZSB1MzIgX01HQV9SRUFEKHUzMiAqIGFkZHIpCiB7CiAJRFJNX01FTU9SWUJBUlJJRVIoKTsKIAlyZXR1cm4gKih2b2xhdGlsZSB1MzIgKilhZGRyOwpAQCAtMjE4LDggKzIxOCw2IEBACiAjZGVmaW5lIERNQVJFRzEocikJKHU4KSgoKHIgLSBEV0dSRUcxKSA+PiAyKSB8IDB4ODApCiAjZGVmaW5lIERNQVJFRyhyKQkoSVNSRUcwKHIpID8gRE1BUkVHMChyKSA6IERNQVJFRzEocikpCiAKLQotCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiBIZWxwZXIgbWFjcm9zcy4uLgogICovCkBAIC0yNjEsNyArMjU5LDYgQEAKIAl9CQkJCQkJCQlcCiB9IHdoaWxlICgwKQogCi0KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqIFByaW1hcnkgRE1BIGNvbW1hbmQgc3RyZWFtCiAgKi8KQEAgLTM0Niw3ICszNDMsNiBAQAogCXdyaXRlICs9IERNQV9CTE9DS19TSVpFOwkJCQkJXAogfSB3aGlsZSAoMCkKIAotCiAvKiBCdWZmZXIgYWdpbmcgdmlhIHByaW1hcnkgRE1BIHN0cmVhbSBoZWFkIHBvaW50ZXIuCiAgKi8KIApAQCAtMzczLDcgKzM2OSw2IEBACiAJfQkJCQkJCQkJXAogfSB3aGlsZSAoMCkKIAotCiAjZGVmaW5lIE1HQV9FTkdJTkVfSURMRV9NQVNLCQkoTUdBX1NPRlRSQVBFTiB8CQlcCiAJCQkJCSBNR0FfRFdHRU5HU1RTIHwJCVwKIAkJCQkJIE1HQV9FTkRQUkRNQVNUUykKQEAgLTM4Miw4ICszNzcsNiBAQAogCiAjZGVmaW5lIE1HQV9ETUFfREVCVUcJCQkwCiAKLQotCiAvKiBBIHJlZHVjZWQgc2V0IG9mIHRoZSBtZ2EgcmVnaXN0ZXJzLgogICovCiAjZGVmaW5lIE1HQV9DUlRDX0lOREVYCQkJMHgxZmQ0CkBAIC02NDQsNyArNjM3LDYgQEAKICMJZGVmaW5lIE1HQV9HNDAwX1dSX01BR0lDCQkoMSA8PCA2KQogIwlkZWZpbmUgTUdBX0c0MDBfV1I1Nl9NQUdJQwkJMHg0NjQ4MDAwMAkvKiAxMjgwMC4wZiAqLwogCi0KICNkZWZpbmUgTUdBX0lMT0FEX0FMSUdOCQk2NAogI2RlZmluZSBNR0FfSUxPQURfTUFTSwkJKE1HQV9JTE9BRF9BTElHTiAtIDEpCiAKQEAgLTY3OSwxMCArNjcxLDEwIEBACiAKIC8qIFNpbXBsZSBpZGxlIHRlc3QuCiAgKi8KLXN0YXRpYyBfX2lubGluZV9fIGludCBtZ2FfaXNfaWRsZSggZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2ICkKK3N0YXRpYyBfX2lubGluZV9fIGludCBtZ2FfaXNfaWRsZShkcm1fbWdhX3ByaXZhdGVfdCAqIGRldl9wcml2KQogewotCXUzMiBzdGF0dXMgPSBNR0FfUkVBRCggTUdBX1NUQVRVUyApICYgTUdBX0VOR0lORV9JRExFX01BU0s7Ci0JcmV0dXJuICggc3RhdHVzID09IE1HQV9FTkRQUkRNQVNUUyApOworCXUzMiBzdGF0dXMgPSBNR0FfUkVBRChNR0FfU1RBVFVTKSAmIE1HQV9FTkdJTkVfSURMRV9NQVNLOworCXJldHVybiAoc3RhdHVzID09IE1HQV9FTkRQUkRNQVNUUyk7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9tZ2FfaW9jMzIuYyBiL2RyaXZlcnMvY2hhci9kcm0vbWdhX2lvYzMyLmMKaW5kZXggNzdkNzM4ZS4uMjRhOWQ0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9tZ2FfaW9jMzIuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL21nYV9pb2MzMi5jCkBAIC0zOSwxNyArMzksMTcgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgZHJtMzJfbWdhX2luaXQgewogCWludCBmdW5jOwotICAgCXUzMiBzYXJlYV9wcml2X29mZnNldDsKKwl1MzIgc2FyZWFfcHJpdl9vZmZzZXQ7CiAJaW50IGNoaXBzZXQ7Ci0gICAJaW50IHNncmFtOworCWludCBzZ3JhbTsKIAl1bnNpZ25lZCBpbnQgbWFjY2VzczsKLSAgIAl1bnNpZ25lZCBpbnQgZmJfY3BwOworCXVuc2lnbmVkIGludCBmYl9jcHA7CiAJdW5zaWduZWQgaW50IGZyb250X29mZnNldCwgZnJvbnRfcGl0Y2g7Ci0gICAJdW5zaWduZWQgaW50IGJhY2tfb2Zmc2V0LCBiYWNrX3BpdGNoOwotICAgCXVuc2lnbmVkIGludCBkZXB0aF9jcHA7Ci0gICAJdW5zaWduZWQgaW50IGRlcHRoX29mZnNldCwgZGVwdGhfcGl0Y2g7Ci0gICAJdW5zaWduZWQgaW50IHRleHR1cmVfb2Zmc2V0W01HQV9OUl9URVhfSEVBUFNdOwotICAgCXVuc2lnbmVkIGludCB0ZXh0dXJlX3NpemVbTUdBX05SX1RFWF9IRUFQU107CisJdW5zaWduZWQgaW50IGJhY2tfb2Zmc2V0LCBiYWNrX3BpdGNoOworCXVuc2lnbmVkIGludCBkZXB0aF9jcHA7CisJdW5zaWduZWQgaW50IGRlcHRoX29mZnNldCwgZGVwdGhfcGl0Y2g7CisJdW5zaWduZWQgaW50IHRleHR1cmVfb2Zmc2V0W01HQV9OUl9URVhfSEVBUFNdOworCXVuc2lnbmVkIGludCB0ZXh0dXJlX3NpemVbTUdBX05SX1RFWF9IRUFQU107CiAJdTMyIGZiX29mZnNldDsKIAl1MzIgbW1pb19vZmZzZXQ7CiAJdTMyIHN0YXR1c19vZmZzZXQ7CkBAIC02NCwxMCArNjQsMTAgQEAKIAlkcm1fbWdhX2luaXQzMl90IGluaXQzMjsKIAlkcm1fbWdhX2luaXRfdCBfX3VzZXIgKmluaXQ7CiAJaW50IGVyciA9IDAsIGk7Ci0JCisKIAlpZiAoY29weV9mcm9tX3VzZXIoJmluaXQzMiwgKHZvaWQgX191c2VyICopYXJnLCBzaXplb2YoaW5pdDMyKSkpCiAJCXJldHVybiAtRUZBVUxUOwotCQorCiAJaW5pdCA9IGNvbXBhdF9hbGxvY191c2VyX3NwYWNlKHNpemVvZigqaW5pdCkpOwogCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgaW5pdCwgc2l6ZW9mKCppbml0KSkKIAkgICAgfHwgX19wdXRfdXNlcihpbml0MzIuZnVuYywgJmluaXQtPmZ1bmMpCkBAIC05MCw0MiArOTAsNDMgQEAKIAkgICAgfHwgX19wdXRfdXNlcihpbml0MzIucHJpbWFyeV9vZmZzZXQsICZpbml0LT5wcmltYXJ5X29mZnNldCkKIAkgICAgfHwgX19wdXRfdXNlcihpbml0MzIuYnVmZmVyc19vZmZzZXQsICZpbml0LT5idWZmZXJzX29mZnNldCkpCiAJCXJldHVybiAtRUZBVUxUOwotCQotCWZvciAoaT0wOyBpPE1HQV9OUl9URVhfSEVBUFM7IGkrKykKLQl7Ci0JCWVyciB8PSBfX3B1dF91c2VyKGluaXQzMi50ZXh0dXJlX29mZnNldFtpXSwgJmluaXQtPnRleHR1cmVfb2Zmc2V0W2ldKTsKLQkJZXJyIHw9IF9fcHV0X3VzZXIoaW5pdDMyLnRleHR1cmVfc2l6ZVtpXSwgJmluaXQtPnRleHR1cmVfc2l6ZVtpXSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUdBX05SX1RFWF9IRUFQUzsgaSsrKSB7CisJCWVyciB8PQorCQkgICAgX19wdXRfdXNlcihpbml0MzIudGV4dHVyZV9vZmZzZXRbaV0sCisJCQkgICAgICAgJmluaXQtPnRleHR1cmVfb2Zmc2V0W2ldKTsKKwkJZXJyIHw9CisJCSAgICBfX3B1dF91c2VyKGluaXQzMi50ZXh0dXJlX3NpemVbaV0sICZpbml0LT50ZXh0dXJlX3NpemVbaV0pOwogCX0KIAlpZiAoZXJyKQogCQlyZXR1cm4gLUVGQVVMVDsKLQkKLQlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJIERSTV9JT0NUTF9NR0FfSU5JVCwgKHVuc2lnbmVkIGxvbmcpIGluaXQpOwotfQogCisJcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKKwkJCSBEUk1fSU9DVExfTUdBX0lOSVQsICh1bnNpZ25lZCBsb25nKWluaXQpOworfQogCiB0eXBlZGVmIHN0cnVjdCBkcm1fbWdhX2dldHBhcmFtMzIgewogCWludCBwYXJhbTsKIAl1MzIgdmFsdWU7CiB9IGRybV9tZ2FfZ2V0cGFyYW0zMl90OwogCi0KIHN0YXRpYyBpbnQgY29tcGF0X21nYV9nZXRwYXJhbShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKIAkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlkcm1fbWdhX2dldHBhcmFtMzJfdCBnZXRwYXJhbTMyOwogCWRybV9tZ2FfZ2V0cGFyYW1fdCBfX3VzZXIgKmdldHBhcmFtOwotCQorCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZnZXRwYXJhbTMyLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihnZXRwYXJhbTMyKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJZ2V0cGFyYW0gPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShzaXplb2YoKmdldHBhcmFtKSk7CiAJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBnZXRwYXJhbSwgc2l6ZW9mKCpnZXRwYXJhbSkpCiAJICAgIHx8IF9fcHV0X3VzZXIoZ2V0cGFyYW0zMi5wYXJhbSwgJmdldHBhcmFtLT5wYXJhbSkKLQkgICAgfHwgX19wdXRfdXNlcigodm9pZCBfX3VzZXIgKikodW5zaWduZWQgbG9uZylnZXRwYXJhbTMyLnZhbHVlLCAmZ2V0cGFyYW0tPnZhbHVlKSkKKwkgICAgfHwgX19wdXRfdXNlcigodm9pZCBfX3VzZXIgKikodW5zaWduZWQgbG9uZylnZXRwYXJhbTMyLnZhbHVlLAorCQkJICAmZ2V0cGFyYW0tPnZhbHVlKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxlLCAKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxlLAogCQkJIERSTV9JT0NUTF9NR0FfR0VUUEFSQU0sICh1bnNpZ25lZCBsb25nKWdldHBhcmFtKTsKIH0KIApAQCAtMTgyLDE0ICsxODMsMTIgQEAKIAkJCSAgJmRtYV9ib290c3RyYXAtPnNlY29uZGFyeV9iaW5fY291bnQpCiAJICAgIHx8IF9fZ2V0X3VzZXIoZG1hX2Jvb3RzdHJhcDMyLnNlY29uZGFyeV9iaW5fc2l6ZSwKIAkJCSAgJmRtYV9ib290c3RyYXAtPnNlY29uZGFyeV9iaW5fc2l6ZSkKLQkgICAgfHwgX19nZXRfdXNlcihkbWFfYm9vdHN0cmFwMzIuYWdwX21vZGUsCi0JCQkgICZkbWFfYm9vdHN0cmFwLT5hZ3BfbW9kZSkKLQkgICAgfHwgX19nZXRfdXNlcihkbWFfYm9vdHN0cmFwMzIuYWdwX3NpemUsCi0JCQkgICZkbWFfYm9vdHN0cmFwLT5hZ3Bfc2l6ZSkpCisJICAgIHx8IF9fZ2V0X3VzZXIoZG1hX2Jvb3RzdHJhcDMyLmFncF9tb2RlLCAmZG1hX2Jvb3RzdHJhcC0+YWdwX21vZGUpCisJICAgIHx8IF9fZ2V0X3VzZXIoZG1hX2Jvb3RzdHJhcDMyLmFncF9zaXplLCAmZG1hX2Jvb3RzdHJhcC0+YWdwX3NpemUpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAogCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmZG1hX2Jvb3RzdHJhcDMyLAotCSAgICAJCSBzaXplb2YoZG1hX2Jvb3RzdHJhcDMyKSkpCisJCQkgc2l6ZW9mKGRtYV9ib290c3RyYXAzMikpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAogCXJldHVybiAwOwpAQCAtMjEwLDggKzIwOSw3IEBACiAgKiBccGFyYW0gYXJnIHVzZXIgYXJndW1lbnQuCiAgKiBccmV0dXJuIHplcm8gb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBudW1iZXIgb24gZmFpbHVyZS4KICAqLwotbG9uZyBtZ2FfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLAotCQkJIHVuc2lnbmVkIGxvbmcgYXJnKQorbG9uZyBtZ2FfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAl1bnNpZ25lZCBpbnQgbnIgPSBEUk1fSU9DVExfTlIoY21kKTsKIAlkcm1faW9jdGxfY29tcGF0X3QgKmZuID0gTlVMTDsKQEAgLTIxOSwxMyArMjE3LDEzIEBACiAKIAlpZiAobnIgPCBEUk1fQ09NTUFORF9CQVNFKQogCQlyZXR1cm4gZHJtX2NvbXBhdF9pb2N0bChmaWxwLCBjbWQsIGFyZyk7Ci0JCisKIAlpZiAobnIgPCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX0FSUkFZX1NJWkUobWdhX2NvbXBhdF9pb2N0bHMpKQogCQlmbiA9IG1nYV9jb21wYXRfaW9jdGxzW25yIC0gRFJNX0NPTU1BTkRfQkFTRV07CiAKIAlsb2NrX2tlcm5lbCgpOwkJLyogWFhYIGZvciBub3cgKi8KIAlpZiAoZm4gIT0gTlVMTCkKLQkJcmV0ID0gKCpmbikoZmlscCwgY21kLCBhcmcpOworCQlyZXQgPSAoKmZuKSAoZmlscCwgY21kLCBhcmcpOwogCWVsc2UKIAkJcmV0ID0gZHJtX2lvY3RsKGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxwLCBjbWQsIGFyZyk7CiAJdW5sb2NrX2tlcm5lbCgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9tZ2FfaXJxLmMgYi9kcml2ZXJzL2NoYXIvZHJtL21nYV9pcnEuYwppbmRleCA1MmVhYTRlLi5lYjk2NDQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL21nYV9pcnEuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL21nYV9pcnEuYwpAQCAtMSw3ICsxLDcgQEAKIC8qIG1nYV9pcnEuYyAtLSBJUlEgaGFuZGxpbmcgZm9yIHJhZGVvbiAtKi0gbGludXgtYyAtKi0KICAqCiAgKiBDb3B5cmlnaHQgKEMpIFRoZSBXZWF0aGVyIENoYW5uZWwsIEluYy4gIDIwMDIuICBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogCisgKgogICogVGhlIFdlYXRoZXIgQ2hhbm5lbCAoVE0pIGZ1bmRlZCBUdW5nc3RlbiBHcmFwaGljcyB0byBkZXZlbG9wIHRoZQogICogaW5pdGlhbCByZWxlYXNlIG9mIHRoZSBSYWRlb24gODUwMCBkcml2ZXIgdW5kZXIgdGhlIFhGcmVlODYgbGljZW5zZS4KICAqIFRoaXMgbm90aWNlIG11c3QgYmUgcHJlc2VydmVkLgpAQCAtMzUsMTkgKzM1LDE4IEBACiAjaW5jbHVkZSAibWdhX2RybS5oIgogI2luY2x1ZGUgIm1nYV9kcnYuaCIKIAotaXJxcmV0dXJuX3QgbWdhX2RyaXZlcl9pcnFfaGFuZGxlciggRFJNX0lSUV9BUkdTICkKK2lycXJldHVybl90IG1nYV9kcml2ZXJfaXJxX2hhbmRsZXIoRFJNX0lSUV9BUkdTKQogewogCWRybV9kZXZpY2VfdCAqZGV2ID0gKGRybV9kZXZpY2VfdCAqKSBhcmc7Ci0JZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2ID0gCi0JICAgKGRybV9tZ2FfcHJpdmF0ZV90ICopZGV2LT5kZXZfcHJpdmF0ZTsKKwlkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX21nYV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKIAlpbnQgc3RhdHVzOwogCWludCBoYW5kbGVkID0gMDsKIAogCXN0YXR1cyA9IE1HQV9SRUFEKE1HQV9TVEFUVVMpOwogCiAJLyogVkJMQU5LIGludGVycnVwdCAqLwotCWlmICggc3RhdHVzICYgTUdBX1ZMSU5FUEVOICkgewotCQlNR0FfV1JJVEUoIE1HQV9JQ0xFQVIsIE1HQV9WTElORUlDTFIgKTsKKwlpZiAoc3RhdHVzICYgTUdBX1ZMSU5FUEVOKSB7CisJCU1HQV9XUklURShNR0FfSUNMRUFSLCBNR0FfVkxJTkVJQ0xSKTsKIAkJYXRvbWljX2luYygmZGV2LT52YmxfcmVjZWl2ZWQpOwogCQlEUk1fV0FLRVVQKCZkZXYtPnZibF9xdWV1ZSk7CiAJCWRybV92Ymxfc2VuZF9zaWduYWxzKGRldik7CkBAIC01NywxNSArNTYsMTQgQEAKIAkvKiBTT0ZUUkFQIGludGVycnVwdCAqLwogCWlmIChzdGF0dXMgJiBNR0FfU09GVFJBUEVOKSB7CiAJCWNvbnN0IHUzMiBwcmltX3N0YXJ0ID0gTUdBX1JFQUQoTUdBX1BSSU1BRERSRVNTKTsKLQkJY29uc3QgdTMyIHByaW1fZW5kICAgPSBNR0FfUkVBRChNR0FfUFJJTUVORCk7Ci0KKwkJY29uc3QgdTMyIHByaW1fZW5kID0gTUdBX1JFQUQoTUdBX1BSSU1FTkQpOwogCiAJCU1HQV9XUklURShNR0FfSUNMRUFSLCBNR0FfU09GVFJBUElDTFIpOwogCiAJCS8qIEluIGFkZGl0aW9uIHRvIGNsZWFyaW5nIHRoZSBpbnRlcnJ1cHQtcGVuZGluZyBiaXQsIHdlCiAJCSAqIGhhdmUgdG8gd3JpdGUgdG8gTUdBX1BSSU1FTkQgdG8gcmUtc3RhcnQgdGhlIERNQSBvcGVyYXRpb24uCiAJCSAqLwotCQlpZiAoIChwcmltX3N0YXJ0ICYgfjB4MDMpICE9IChwcmltX2VuZCAmIH4weDAzKSApIHsKKwkJaWYgKChwcmltX3N0YXJ0ICYgfjB4MDMpICE9IChwcmltX2VuZCAmIH4weDAzKSkgewogCQkJTUdBX1dSSVRFKE1HQV9QUklNRU5ELCBwcmltX2VuZCk7CiAJCX0KIApAQCAtNzQsMjQgKzcyLDI0IEBACiAJCWhhbmRsZWQgPSAxOwogCX0KIAotCWlmICggaGFuZGxlZCApIHsKKwlpZiAoaGFuZGxlZCkgewogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJfQogCXJldHVybiBJUlFfTk9ORTsKIH0KIAotaW50IG1nYV9kcml2ZXJfdmJsYW5rX3dhaXQoZHJtX2RldmljZV90ICpkZXYsIHVuc2lnbmVkIGludCAqc2VxdWVuY2UpCitpbnQgbWdhX2RyaXZlcl92Ymxhbmtfd2FpdChkcm1fZGV2aWNlX3QgKiBkZXYsIHVuc2lnbmVkIGludCAqc2VxdWVuY2UpCiB7CiAJdW5zaWduZWQgaW50IGN1cl92Ymxhbms7CiAJaW50IHJldCA9IDA7CiAKIAkvKiBBc3N1bWUgdGhhdCB0aGUgdXNlciBoYXMgbWlzc2VkIHRoZSBjdXJyZW50IHNlcXVlbmNlIG51bWJlcgogCSAqIGJ5IGFib3V0IGEgZGF5IHJhdGhlciB0aGFuIHNoZSB3YW50cyB0byB3YWl0IGZvciB5ZWFycwotCSAqIHVzaW5nIHZlcnRpY2FsIGJsYW5rcy4uLiAKKwkgKiB1c2luZyB2ZXJ0aWNhbCBibGFua3MuLi4KIAkgKi8KLQlEUk1fV0FJVF9PTiggcmV0LCBkZXYtPnZibF9xdWV1ZSwgMypEUk1fSFosIAotCQkgICAgICggKCAoIGN1cl92YmxhbmsgPSBhdG9taWNfcmVhZCgmZGV2LT52YmxfcmVjZWl2ZWQgKSApCi0JCQkgLSAqc2VxdWVuY2UgKSA8PSAoMTw8MjMpICkgKTsKKwlEUk1fV0FJVF9PTihyZXQsIGRldi0+dmJsX3F1ZXVlLCAzICogRFJNX0haLAorCQkgICAgKCgoY3VyX3ZibGFuayA9IGF0b21pY19yZWFkKCZkZXYtPnZibF9yZWNlaXZlZCkpCisJCSAgICAgIC0gKnNlcXVlbmNlKSA8PSAoMSA8PCAyMykpKTsKIAogCSpzZXF1ZW5jZSA9IGN1cl92Ymxhbms7CiAKQEAgLTEyMiwyOSArMTIwLDI5IEBACiAJZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9tZ2FfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CiAKIAkvKiBEaXNhYmxlICphbGwqIGludGVycnVwdHMgKi8KLSAgICAgIAlNR0FfV1JJVEUoIE1HQV9JRU4sIDAgKTsKKwlNR0FfV1JJVEUoTUdBX0lFTiwgMCk7CiAJLyogQ2xlYXIgYml0cyBpZiB0aGV5J3JlIGFscmVhZHkgaGlnaCAqLwotICAgCU1HQV9XUklURSggTUdBX0lDTEVBUiwgfjAgKTsKKwlNR0FfV1JJVEUoTUdBX0lDTEVBUiwgfjApOwogfQogCiB2b2lkIG1nYV9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsKGRybV9kZXZpY2VfdCAqIGRldikKIHsKIAlkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX21nYV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKIAotCURSTV9JTklUX1dBSVRRVUVVRSggJmRldl9wcml2LT5mZW5jZV9xdWV1ZSApOworCURSTV9JTklUX1dBSVRRVUVVRSgmZGV2X3ByaXYtPmZlbmNlX3F1ZXVlKTsKIAogCS8qIFR1cm4gb24gdmVydGljYWwgYmxhbmsgaW50ZXJydXB0IGFuZCBzb2Z0IHRyYXAgaW50ZXJydXB0LiAqLwogCU1HQV9XUklURShNR0FfSUVOLCBNR0FfVkxJTkVJRU4gfCBNR0FfU09GVFJBUEVOKTsKIH0KIAotdm9pZCBtZ2FfZHJpdmVyX2lycV91bmluc3RhbGwoIGRybV9kZXZpY2VfdCAqZGV2ICkgewotICAJZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2ID0gCi0JICAgKGRybV9tZ2FfcHJpdmF0ZV90ICopZGV2LT5kZXZfcHJpdmF0ZTsKK3ZvaWQgbWdhX2RyaXZlcl9pcnFfdW5pbnN0YWxsKGRybV9kZXZpY2VfdCAqIGRldikKK3sKKwlkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX21nYV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKIAlpZiAoIWRldl9wcml2KQogCQlyZXR1cm47CiAKIAkvKiBEaXNhYmxlICphbGwqIGludGVycnVwdHMgKi8KIAlNR0FfV1JJVEUoTUdBX0lFTiwgMCk7Ci0JCisKIAlkZXYtPmlycV9lbmFibGVkID0gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vbWdhX3N0YXRlLmMgYi9kcml2ZXJzL2NoYXIvZHJtL21nYV9zdGF0ZS5jCmluZGV4IDA1YmJiNDcuLjE1MTE0ZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vbWdhX3N0YXRlLmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9tZ2Ffc3RhdGUuYwpAQCAtNDEsMTUgKzQxLDE1IEBACiAgKiBETUEgaGFyZHdhcmUgc3RhdGUgcHJvZ3JhbW1pbmcgZnVuY3Rpb25zCiAgKi8KIAotc3RhdGljIHZvaWQgbWdhX2VtaXRfY2xpcF9yZWN0KCBkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYsCi0JCQkJZHJtX2NsaXBfcmVjdF90ICpib3ggKQorc3RhdGljIHZvaWQgbWdhX2VtaXRfY2xpcF9yZWN0KGRybV9tZ2FfcHJpdmF0ZV90ICogZGV2X3ByaXYsCisJCQkgICAgICAgZHJtX2NsaXBfcmVjdF90ICogYm94KQogewogCWRybV9tZ2Ffc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9wcml2OwogCWRybV9tZ2FfY29udGV4dF9yZWdzX3QgKmN0eCA9ICZzYXJlYV9wcml2LT5jb250ZXh0X3N0YXRlOwogCXVuc2lnbmVkIGludCBwaXRjaCA9IGRldl9wcml2LT5mcm9udF9waXRjaDsKIAlETUFfTE9DQUxTOwogCi0JQkVHSU5fRE1BKCAyICk7CisJQkVHSU5fRE1BKDIpOwogCiAJLyogRm9yY2UgcmVzZXQgb2YgRFdHQ1RMIG9uIEc0MDAgKGVsaW1pbmF0ZXMgY2xpcCBkaXNhYmxlIGJpdCkuCiAJICovCkBAIC02MSwxMDEgKzYxLDkwIEBACiAJfQogCURNQV9CTE9DSyhNR0FfRE1BUEFELCAweDAwMDAwMDAwLAogCQkgIE1HQV9DWEJORFJZLCAoKGJveC0+eDIgLSAxKSA8PCAxNikgfCBib3gtPngxLAotCQkgIE1HQV9ZVE9QLCBib3gtPnkxICogcGl0Y2gsCi0JCSAgTUdBX1lCT1QsIChib3gtPnkyIC0gMSkgKiBwaXRjaCk7CisJCSAgTUdBX1lUT1AsIGJveC0+eTEgKiBwaXRjaCwgTUdBX1lCT1QsIChib3gtPnkyIC0gMSkgKiBwaXRjaCk7CiAKIAlBRFZBTkNFX0RNQSgpOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIG1nYV9nMjAwX2VtaXRfY29udGV4dCggZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2ICkKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgbWdhX2cyMDBfZW1pdF9jb250ZXh0KGRybV9tZ2FfcHJpdmF0ZV90ICogZGV2X3ByaXYpCiB7CiAJZHJtX21nYV9zYXJlYV90ICpzYXJlYV9wcml2ID0gZGV2X3ByaXYtPnNhcmVhX3ByaXY7CiAJZHJtX21nYV9jb250ZXh0X3JlZ3NfdCAqY3R4ID0gJnNhcmVhX3ByaXYtPmNvbnRleHRfc3RhdGU7CiAJRE1BX0xPQ0FMUzsKIAotCUJFR0lOX0RNQSggMyApOworCUJFR0lOX0RNQSgzKTsKIAotCURNQV9CTE9DSyggTUdBX0RTVE9SRywJCWN0eC0+ZHN0b3JnLAotCQkgICBNR0FfTUFDQ0VTUywJCWN0eC0+bWFjY2VzcywKLQkJICAgTUdBX1BMTldULAkJY3R4LT5wbG53dCwKLQkJICAgTUdBX0RXR0NUTCwJCWN0eC0+ZHdnY3RsICk7CisJRE1BX0JMT0NLKE1HQV9EU1RPUkcsIGN0eC0+ZHN0b3JnLAorCQkgIE1HQV9NQUNDRVNTLCBjdHgtPm1hY2Nlc3MsCisJCSAgTUdBX1BMTldULCBjdHgtPnBsbnd0LCBNR0FfRFdHQ1RMLCBjdHgtPmR3Z2N0bCk7CiAKLQlETUFfQkxPQ0soIE1HQV9BTFBIQUNUUkwsCWN0eC0+YWxwaGFjdHJsLAotCQkgICBNR0FfRk9HQ09MLAkJY3R4LT5mb2djb2xvciwKLQkJICAgTUdBX1dGTEFHLAkJY3R4LT53ZmxhZywKLQkJICAgTUdBX1pPUkcsCQlkZXZfcHJpdi0+ZGVwdGhfb2Zmc2V0ICk7CisJRE1BX0JMT0NLKE1HQV9BTFBIQUNUUkwsIGN0eC0+YWxwaGFjdHJsLAorCQkgIE1HQV9GT0dDT0wsIGN0eC0+Zm9nY29sb3IsCisJCSAgTUdBX1dGTEFHLCBjdHgtPndmbGFnLCBNR0FfWk9SRywgZGV2X3ByaXYtPmRlcHRoX29mZnNldCk7CiAKLQlETUFfQkxPQ0soIE1HQV9GQ09MLAkJY3R4LT5mY29sLAotCQkgICBNR0FfRE1BUEFELAkJMHgwMDAwMDAwMCwKLQkJICAgTUdBX0RNQVBBRCwJCTB4MDAwMDAwMDAsCi0JCSAgIE1HQV9ETUFQQUQsCQkweDAwMDAwMDAwICk7CisJRE1BX0JMT0NLKE1HQV9GQ09MLCBjdHgtPmZjb2wsCisJCSAgTUdBX0RNQVBBRCwgMHgwMDAwMDAwMCwKKwkJICBNR0FfRE1BUEFELCAweDAwMDAwMDAwLCBNR0FfRE1BUEFELCAweDAwMDAwMDAwKTsKIAogCUFEVkFOQ0VfRE1BKCk7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgbWdhX2c0MDBfZW1pdF9jb250ZXh0KCBkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYgKQorc3RhdGljIF9faW5saW5lX18gdm9pZCBtZ2FfZzQwMF9lbWl0X2NvbnRleHQoZHJtX21nYV9wcml2YXRlX3QgKiBkZXZfcHJpdikKIHsKIAlkcm1fbWdhX3NhcmVhX3QgKnNhcmVhX3ByaXYgPSBkZXZfcHJpdi0+c2FyZWFfcHJpdjsKIAlkcm1fbWdhX2NvbnRleHRfcmVnc190ICpjdHggPSAmc2FyZWFfcHJpdi0+Y29udGV4dF9zdGF0ZTsKIAlETUFfTE9DQUxTOwogCi0JQkVHSU5fRE1BKCA0ICk7CisJQkVHSU5fRE1BKDQpOwogCi0JRE1BX0JMT0NLKCBNR0FfRFNUT1JHLAkJY3R4LT5kc3RvcmcsCi0JCSAgIE1HQV9NQUNDRVNTLAkJY3R4LT5tYWNjZXNzLAotCQkgICBNR0FfUExOV1QsCQljdHgtPnBsbnd0LAotCQkgICBNR0FfRFdHQ1RMLAkJY3R4LT5kd2djdGwgKTsKKwlETUFfQkxPQ0soTUdBX0RTVE9SRywgY3R4LT5kc3RvcmcsCisJCSAgTUdBX01BQ0NFU1MsIGN0eC0+bWFjY2VzcywKKwkJICBNR0FfUExOV1QsIGN0eC0+cGxud3QsIE1HQV9EV0dDVEwsIGN0eC0+ZHdnY3RsKTsKIAotCURNQV9CTE9DSyggTUdBX0FMUEhBQ1RSTCwJY3R4LT5hbHBoYWN0cmwsCi0JCSAgIE1HQV9GT0dDT0wsCQljdHgtPmZvZ2NvbG9yLAotCQkgICBNR0FfV0ZMQUcsCQljdHgtPndmbGFnLAotCQkgICBNR0FfWk9SRywJCWRldl9wcml2LT5kZXB0aF9vZmZzZXQgKTsKKwlETUFfQkxPQ0soTUdBX0FMUEhBQ1RSTCwgY3R4LT5hbHBoYWN0cmwsCisJCSAgTUdBX0ZPR0NPTCwgY3R4LT5mb2djb2xvciwKKwkJICBNR0FfV0ZMQUcsIGN0eC0+d2ZsYWcsIE1HQV9aT1JHLCBkZXZfcHJpdi0+ZGVwdGhfb2Zmc2V0KTsKIAotCURNQV9CTE9DSyggTUdBX1dGTEFHMSwJCWN0eC0+d2ZsYWcsCi0JCSAgIE1HQV9URFVBTFNUQUdFMCwJY3R4LT50ZHVhbHN0YWdlMCwKLQkJICAgTUdBX1REVUFMU1RBR0UxLAljdHgtPnRkdWFsc3RhZ2UxLAotCQkgICBNR0FfRkNPTCwJCWN0eC0+ZmNvbCApOworCURNQV9CTE9DSyhNR0FfV0ZMQUcxLCBjdHgtPndmbGFnLAorCQkgIE1HQV9URFVBTFNUQUdFMCwgY3R4LT50ZHVhbHN0YWdlMCwKKwkJICBNR0FfVERVQUxTVEFHRTEsIGN0eC0+dGR1YWxzdGFnZTEsIE1HQV9GQ09MLCBjdHgtPmZjb2wpOwogCi0JRE1BX0JMT0NLKCBNR0FfU1RFTkNJTCwJCWN0eC0+c3RlbmNpbCwKLQkJICAgTUdBX1NURU5DSUxDVEwsCWN0eC0+c3RlbmNpbGN0bCwKLQkJICAgTUdBX0RNQVBBRCwJCTB4MDAwMDAwMDAsCi0JCSAgIE1HQV9ETUFQQUQsCQkweDAwMDAwMDAwICk7CisJRE1BX0JMT0NLKE1HQV9TVEVOQ0lMLCBjdHgtPnN0ZW5jaWwsCisJCSAgTUdBX1NURU5DSUxDVEwsIGN0eC0+c3RlbmNpbGN0bCwKKwkJICBNR0FfRE1BUEFELCAweDAwMDAwMDAwLCBNR0FfRE1BUEFELCAweDAwMDAwMDAwKTsKIAogCUFEVkFOQ0VfRE1BKCk7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgbWdhX2cyMDBfZW1pdF90ZXgwKCBkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYgKQorc3RhdGljIF9faW5saW5lX18gdm9pZCBtZ2FfZzIwMF9lbWl0X3RleDAoZHJtX21nYV9wcml2YXRlX3QgKiBkZXZfcHJpdikKIHsKIAlkcm1fbWdhX3NhcmVhX3QgKnNhcmVhX3ByaXYgPSBkZXZfcHJpdi0+c2FyZWFfcHJpdjsKIAlkcm1fbWdhX3RleHR1cmVfcmVnc190ICp0ZXggPSAmc2FyZWFfcHJpdi0+dGV4X3N0YXRlWzBdOwogCURNQV9MT0NBTFM7CiAKLQlCRUdJTl9ETUEoIDQgKTsKKwlCRUdJTl9ETUEoNCk7CiAKLQlETUFfQkxPQ0soIE1HQV9URVhDVEwyLAkJdGV4LT50ZXhjdGwyLAotCQkgICBNR0FfVEVYQ1RMLAkJdGV4LT50ZXhjdGwsCi0JCSAgIE1HQV9URVhGSUxURVIsCXRleC0+dGV4ZmlsdGVyLAotCQkgICBNR0FfVEVYQk9SREVSQ09MLAl0ZXgtPnRleGJvcmRlcmNvbCApOworCURNQV9CTE9DSyhNR0FfVEVYQ1RMMiwgdGV4LT50ZXhjdGwyLAorCQkgIE1HQV9URVhDVEwsIHRleC0+dGV4Y3RsLAorCQkgIE1HQV9URVhGSUxURVIsIHRleC0+dGV4ZmlsdGVyLAorCQkgIE1HQV9URVhCT1JERVJDT0wsIHRleC0+dGV4Ym9yZGVyY29sKTsKIAotCURNQV9CTE9DSyggTUdBX1RFWE9SRywJCXRleC0+dGV4b3JnLAotCQkgICBNR0FfVEVYT1JHMSwJCXRleC0+dGV4b3JnMSwKLQkJICAgTUdBX1RFWE9SRzIsCQl0ZXgtPnRleG9yZzIsCi0JCSAgIE1HQV9URVhPUkczLAkJdGV4LT50ZXhvcmczICk7CisJRE1BX0JMT0NLKE1HQV9URVhPUkcsIHRleC0+dGV4b3JnLAorCQkgIE1HQV9URVhPUkcxLCB0ZXgtPnRleG9yZzEsCisJCSAgTUdBX1RFWE9SRzIsIHRleC0+dGV4b3JnMiwgTUdBX1RFWE9SRzMsIHRleC0+dGV4b3JnMyk7CiAKLQlETUFfQkxPQ0soIE1HQV9URVhPUkc0LAkJdGV4LT50ZXhvcmc0LAotCQkgICBNR0FfVEVYV0lEVEgsCXRleC0+dGV4d2lkdGgsCi0JCSAgIE1HQV9URVhIRUlHSFQsCXRleC0+dGV4aGVpZ2h0LAotCQkgICBNR0FfV1IyNCwJCXRleC0+dGV4d2lkdGggKTsKKwlETUFfQkxPQ0soTUdBX1RFWE9SRzQsIHRleC0+dGV4b3JnNCwKKwkJICBNR0FfVEVYV0lEVEgsIHRleC0+dGV4d2lkdGgsCisJCSAgTUdBX1RFWEhFSUdIVCwgdGV4LT50ZXhoZWlnaHQsIE1HQV9XUjI0LCB0ZXgtPnRleHdpZHRoKTsKIAotCURNQV9CTE9DSyggTUdBX1dSMzQsCQl0ZXgtPnRleGhlaWdodCwKLQkJICAgTUdBX1RFWFRSQU5TLAkweDAwMDBmZmZmLAotCQkgICBNR0FfVEVYVFJBTlNISUdILAkweDAwMDBmZmZmLAotCQkgICBNR0FfRE1BUEFELAkJMHgwMDAwMDAwMCApOworCURNQV9CTE9DSyhNR0FfV1IzNCwgdGV4LT50ZXhoZWlnaHQsCisJCSAgTUdBX1RFWFRSQU5TLCAweDAwMDBmZmZmLAorCQkgIE1HQV9URVhUUkFOU0hJR0gsIDB4MDAwMGZmZmYsIE1HQV9ETUFQQUQsIDB4MDAwMDAwMDApOwogCiAJQURWQU5DRV9ETUEoKTsKIH0KIAotc3RhdGljIF9faW5saW5lX18gdm9pZCBtZ2FfZzQwMF9lbWl0X3RleDAoIGRybV9tZ2FfcHJpdmF0ZV90ICpkZXZfcHJpdiApCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIG1nYV9nNDAwX2VtaXRfdGV4MChkcm1fbWdhX3ByaXZhdGVfdCAqIGRldl9wcml2KQogewogCWRybV9tZ2Ffc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9wcml2OwogCWRybV9tZ2FfdGV4dHVyZV9yZWdzX3QgKnRleCA9ICZzYXJlYV9wcml2LT50ZXhfc3RhdGVbMF07CkBAIC0xNjQsNDIgKzE1MywzOCBAQAogLyogIAlwcmludGsoIm1nYV9nNDAwX2VtaXRfdGV4MCAleCAleCAleFxuIiwgdGV4LT50ZXhvcmcsICovCiAvKiAgCSAgICAgICB0ZXgtPnRleGN0bCwgdGV4LT50ZXhjdGwyKTsgKi8KIAotCUJFR0lOX0RNQSggNiApOworCUJFR0lOX0RNQSg2KTsKIAotCURNQV9CTE9DSyggTUdBX1RFWENUTDIsCQl0ZXgtPnRleGN0bDIgfCBNR0FfRzQwMF9UQzJfTUFHSUMsCi0JCSAgIE1HQV9URVhDVEwsCQl0ZXgtPnRleGN0bCwKLQkJICAgTUdBX1RFWEZJTFRFUiwJdGV4LT50ZXhmaWx0ZXIsCi0JCSAgIE1HQV9URVhCT1JERVJDT0wsCXRleC0+dGV4Ym9yZGVyY29sICk7CisJRE1BX0JMT0NLKE1HQV9URVhDVEwyLCB0ZXgtPnRleGN0bDIgfCBNR0FfRzQwMF9UQzJfTUFHSUMsCisJCSAgTUdBX1RFWENUTCwgdGV4LT50ZXhjdGwsCisJCSAgTUdBX1RFWEZJTFRFUiwgdGV4LT50ZXhmaWx0ZXIsCisJCSAgTUdBX1RFWEJPUkRFUkNPTCwgdGV4LT50ZXhib3JkZXJjb2wpOwogCi0JRE1BX0JMT0NLKCBNR0FfVEVYT1JHLAkJdGV4LT50ZXhvcmcsCi0JCSAgIE1HQV9URVhPUkcxLAkJdGV4LT50ZXhvcmcxLAotCQkgICBNR0FfVEVYT1JHMiwJCXRleC0+dGV4b3JnMiwKLQkJICAgTUdBX1RFWE9SRzMsCQl0ZXgtPnRleG9yZzMgKTsKKwlETUFfQkxPQ0soTUdBX1RFWE9SRywgdGV4LT50ZXhvcmcsCisJCSAgTUdBX1RFWE9SRzEsIHRleC0+dGV4b3JnMSwKKwkJICBNR0FfVEVYT1JHMiwgdGV4LT50ZXhvcmcyLCBNR0FfVEVYT1JHMywgdGV4LT50ZXhvcmczKTsKIAotCURNQV9CTE9DSyggTUdBX1RFWE9SRzQsCQl0ZXgtPnRleG9yZzQsCi0JCSAgIE1HQV9URVhXSURUSCwJdGV4LT50ZXh3aWR0aCwKLQkJICAgTUdBX1RFWEhFSUdIVCwJdGV4LT50ZXhoZWlnaHQsCi0JCSAgIE1HQV9XUjQ5LAkJMHgwMDAwMDAwMCApOworCURNQV9CTE9DSyhNR0FfVEVYT1JHNCwgdGV4LT50ZXhvcmc0LAorCQkgIE1HQV9URVhXSURUSCwgdGV4LT50ZXh3aWR0aCwKKwkJICBNR0FfVEVYSEVJR0hULCB0ZXgtPnRleGhlaWdodCwgTUdBX1dSNDksIDB4MDAwMDAwMDApOwogCi0JRE1BX0JMT0NLKCBNR0FfV1I1NywJCTB4MDAwMDAwMDAsCi0JCSAgIE1HQV9XUjUzLAkJMHgwMDAwMDAwMCwKLQkJICAgTUdBX1dSNjEsCQkweDAwMDAwMDAwLAotCQkgICBNR0FfV1I1MiwJCU1HQV9HNDAwX1dSX01BR0lDICk7CisJRE1BX0JMT0NLKE1HQV9XUjU3LCAweDAwMDAwMDAwLAorCQkgIE1HQV9XUjUzLCAweDAwMDAwMDAwLAorCQkgIE1HQV9XUjYxLCAweDAwMDAwMDAwLCBNR0FfV1I1MiwgTUdBX0c0MDBfV1JfTUFHSUMpOwogCi0JRE1BX0JMT0NLKCBNR0FfV1I2MCwJCU1HQV9HNDAwX1dSX01BR0lDLAotCQkgICBNR0FfV1I1NCwJCXRleC0+dGV4d2lkdGggfCBNR0FfRzQwMF9XUl9NQUdJQywKLQkJICAgTUdBX1dSNjIsCQl0ZXgtPnRleGhlaWdodCB8IE1HQV9HNDAwX1dSX01BR0lDLAotCQkgICBNR0FfRE1BUEFELAkJMHgwMDAwMDAwMCApOworCURNQV9CTE9DSyhNR0FfV1I2MCwgTUdBX0c0MDBfV1JfTUFHSUMsCisJCSAgTUdBX1dSNTQsIHRleC0+dGV4d2lkdGggfCBNR0FfRzQwMF9XUl9NQUdJQywKKwkJICBNR0FfV1I2MiwgdGV4LT50ZXhoZWlnaHQgfCBNR0FfRzQwMF9XUl9NQUdJQywKKwkJICBNR0FfRE1BUEFELCAweDAwMDAwMDAwKTsKIAotCURNQV9CTE9DSyggTUdBX0RNQVBBRCwJCTB4MDAwMDAwMDAsCi0JCSAgIE1HQV9ETUFQQUQsCQkweDAwMDAwMDAwLAotCQkgICBNR0FfVEVYVFJBTlMsCTB4MDAwMGZmZmYsCi0JCSAgIE1HQV9URVhUUkFOU0hJR0gsCTB4MDAwMGZmZmYgKTsKKwlETUFfQkxPQ0soTUdBX0RNQVBBRCwgMHgwMDAwMDAwMCwKKwkJICBNR0FfRE1BUEFELCAweDAwMDAwMDAwLAorCQkgIE1HQV9URVhUUkFOUywgMHgwMDAwZmZmZiwgTUdBX1RFWFRSQU5TSElHSCwgMHgwMDAwZmZmZik7CiAKIAlBRFZBTkNFX0RNQSgpOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIG1nYV9nNDAwX2VtaXRfdGV4MSggZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2ICkKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgbWdhX2c0MDBfZW1pdF90ZXgxKGRybV9tZ2FfcHJpdmF0ZV90ICogZGV2X3ByaXYpCiB7CiAJZHJtX21nYV9zYXJlYV90ICpzYXJlYV9wcml2ID0gZGV2X3ByaXYtPnNhcmVhX3ByaXY7CiAJZHJtX21nYV90ZXh0dXJlX3JlZ3NfdCAqdGV4ID0gJnNhcmVhX3ByaXYtPnRleF9zdGF0ZVsxXTsKQEAgLTIwOCw1NSArMTkzLDUxIEBACiAvKiAgCXByaW50aygibWdhX2c0MDBfZW1pdF90ZXgxICV4ICV4ICV4XG4iLCB0ZXgtPnRleG9yZywgICovCiAvKiAgCSAgICAgICB0ZXgtPnRleGN0bCwgdGV4LT50ZXhjdGwyKTsgKi8KIAotCUJFR0lOX0RNQSggNSApOworCUJFR0lOX0RNQSg1KTsKIAotCURNQV9CTE9DSyggTUdBX1RFWENUTDIsCQkodGV4LT50ZXhjdGwyIHwKLQkJCQkJIE1HQV9NQVAxX0VOQUJMRSB8Ci0JCQkJCSBNR0FfRzQwMF9UQzJfTUFHSUMpLAotCQkgICBNR0FfVEVYQ1RMLAkJdGV4LT50ZXhjdGwsCi0JCSAgIE1HQV9URVhGSUxURVIsCXRleC0+dGV4ZmlsdGVyLAotCQkgICBNR0FfVEVYQk9SREVSQ09MLAl0ZXgtPnRleGJvcmRlcmNvbCApOworCURNQV9CTE9DSyhNR0FfVEVYQ1RMMiwgKHRleC0+dGV4Y3RsMiB8CisJCQkJTUdBX01BUDFfRU5BQkxFIHwKKwkJCQlNR0FfRzQwMF9UQzJfTUFHSUMpLAorCQkgIE1HQV9URVhDVEwsIHRleC0+dGV4Y3RsLAorCQkgIE1HQV9URVhGSUxURVIsIHRleC0+dGV4ZmlsdGVyLAorCQkgIE1HQV9URVhCT1JERVJDT0wsIHRleC0+dGV4Ym9yZGVyY29sKTsKIAotCURNQV9CTE9DSyggTUdBX1RFWE9SRywJCXRleC0+dGV4b3JnLAotCQkgICBNR0FfVEVYT1JHMSwJCXRleC0+dGV4b3JnMSwKLQkJICAgTUdBX1RFWE9SRzIsCQl0ZXgtPnRleG9yZzIsCi0JCSAgIE1HQV9URVhPUkczLAkJdGV4LT50ZXhvcmczICk7CisJRE1BX0JMT0NLKE1HQV9URVhPUkcsIHRleC0+dGV4b3JnLAorCQkgIE1HQV9URVhPUkcxLCB0ZXgtPnRleG9yZzEsCisJCSAgTUdBX1RFWE9SRzIsIHRleC0+dGV4b3JnMiwgTUdBX1RFWE9SRzMsIHRleC0+dGV4b3JnMyk7CiAKLQlETUFfQkxPQ0soIE1HQV9URVhPUkc0LAkJdGV4LT50ZXhvcmc0LAotCQkgICBNR0FfVEVYV0lEVEgsCXRleC0+dGV4d2lkdGgsCi0JCSAgIE1HQV9URVhIRUlHSFQsCXRleC0+dGV4aGVpZ2h0LAotCQkgICBNR0FfV1I0OSwJCTB4MDAwMDAwMDAgKTsKKwlETUFfQkxPQ0soTUdBX1RFWE9SRzQsIHRleC0+dGV4b3JnNCwKKwkJICBNR0FfVEVYV0lEVEgsIHRleC0+dGV4d2lkdGgsCisJCSAgTUdBX1RFWEhFSUdIVCwgdGV4LT50ZXhoZWlnaHQsIE1HQV9XUjQ5LCAweDAwMDAwMDAwKTsKIAotCURNQV9CTE9DSyggTUdBX1dSNTcsCQkweDAwMDAwMDAwLAotCQkgICBNR0FfV1I1MywJCTB4MDAwMDAwMDAsCi0JCSAgIE1HQV9XUjYxLAkJMHgwMDAwMDAwMCwKLQkJICAgTUdBX1dSNTIsCQl0ZXgtPnRleHdpZHRoIHwgTUdBX0c0MDBfV1JfTUFHSUMgKTsKKwlETUFfQkxPQ0soTUdBX1dSNTcsIDB4MDAwMDAwMDAsCisJCSAgTUdBX1dSNTMsIDB4MDAwMDAwMDAsCisJCSAgTUdBX1dSNjEsIDB4MDAwMDAwMDAsCisJCSAgTUdBX1dSNTIsIHRleC0+dGV4d2lkdGggfCBNR0FfRzQwMF9XUl9NQUdJQyk7CiAKLQlETUFfQkxPQ0soIE1HQV9XUjYwLAkJdGV4LT50ZXhoZWlnaHQgfCBNR0FfRzQwMF9XUl9NQUdJQywKLQkJICAgTUdBX1RFWFRSQU5TLAkweDAwMDBmZmZmLAotCQkgICBNR0FfVEVYVFJBTlNISUdILAkweDAwMDBmZmZmLAotCQkgICBNR0FfVEVYQ1RMMiwJCXRleC0+dGV4Y3RsMiB8IE1HQV9HNDAwX1RDMl9NQUdJQyApOworCURNQV9CTE9DSyhNR0FfV1I2MCwgdGV4LT50ZXhoZWlnaHQgfCBNR0FfRzQwMF9XUl9NQUdJQywKKwkJICBNR0FfVEVYVFJBTlMsIDB4MDAwMGZmZmYsCisJCSAgTUdBX1RFWFRSQU5TSElHSCwgMHgwMDAwZmZmZiwKKwkJICBNR0FfVEVYQ1RMMiwgdGV4LT50ZXhjdGwyIHwgTUdBX0c0MDBfVEMyX01BR0lDKTsKIAogCUFEVkFOQ0VfRE1BKCk7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgbWdhX2cyMDBfZW1pdF9waXBlKCBkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYgKQorc3RhdGljIF9faW5saW5lX18gdm9pZCBtZ2FfZzIwMF9lbWl0X3BpcGUoZHJtX21nYV9wcml2YXRlX3QgKiBkZXZfcHJpdikKIHsKIAlkcm1fbWdhX3NhcmVhX3QgKnNhcmVhX3ByaXYgPSBkZXZfcHJpdi0+c2FyZWFfcHJpdjsKIAl1bnNpZ25lZCBpbnQgcGlwZSA9IHNhcmVhX3ByaXYtPndhcnBfcGlwZTsKIAlETUFfTE9DQUxTOwogCi0JQkVHSU5fRE1BKCAzICk7CisJQkVHSU5fRE1BKDMpOwogCi0JRE1BX0JMT0NLKCBNR0FfV0lBRERSLAlNR0FfV01PREVfU1VTUEVORCwKLQkJICAgTUdBX1dWUlRYU1osCTB4MDAwMDAwMDcsCi0JCSAgIE1HQV9XRkxBRywJMHgwMDAwMDAwMCwKLQkJICAgTUdBX1dSMjQsCTB4MDAwMDAwMDAgKTsKKwlETUFfQkxPQ0soTUdBX1dJQUREUiwgTUdBX1dNT0RFX1NVU1BFTkQsCisJCSAgTUdBX1dWUlRYU1osIDB4MDAwMDAwMDcsCisJCSAgTUdBX1dGTEFHLCAweDAwMDAwMDAwLCBNR0FfV1IyNCwgMHgwMDAwMDAwMCk7CiAKLQlETUFfQkxPQ0soIE1HQV9XUjI1LAkweDAwMDAwMTAwLAotCQkgICBNR0FfV1IzNCwJMHgwMDAwMDAwMCwKLQkJICAgTUdBX1dSNDIsCTB4MDAwMGZmZmYsCi0JCSAgIE1HQV9XUjYwLAkweDAwMDBmZmZmICk7CisJRE1BX0JMT0NLKE1HQV9XUjI1LCAweDAwMDAwMTAwLAorCQkgIE1HQV9XUjM0LCAweDAwMDAwMDAwLAorCQkgIE1HQV9XUjQyLCAweDAwMDBmZmZmLCBNR0FfV1I2MCwgMHgwMDAwZmZmZik7CiAKIAkvKiBQYWRkaW5nIHJlcXVpcmVkIHRvIHRvIGhhcmR3YXJlIGJ1Zy4KIAkgKi8KQEAgLTI2OSw3ICsyNTAsNyBAQAogCUFEVkFOQ0VfRE1BKCk7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgbWdhX2c0MDBfZW1pdF9waXBlKCBkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYgKQorc3RhdGljIF9faW5saW5lX18gdm9pZCBtZ2FfZzQwMF9lbWl0X3BpcGUoZHJtX21nYV9wcml2YXRlX3QgKiBkZXZfcHJpdikKIHsKIAlkcm1fbWdhX3NhcmVhX3QgKnNhcmVhX3ByaXYgPSBkZXZfcHJpdi0+c2FyZWFfcHJpdjsKIAl1bnNpZ25lZCBpbnQgcGlwZSA9IHNhcmVhX3ByaXYtPndhcnBfcGlwZTsKQEAgLTI3Nyw2OCArMjU4LDY0IEBACiAKIC8qICAJcHJpbnRrKCJtZ2FfZzQwMF9lbWl0X3BpcGUgJXhcbiIsIHBpcGUpOyAqLwogCi0JQkVHSU5fRE1BKCAxMCApOworCUJFR0lOX0RNQSgxMCk7CiAKLQlETUFfQkxPQ0soIE1HQV9XSUFERFIyLAlNR0FfV01PREVfU1VTUEVORCwKLQkJICAgTUdBX0RNQVBBRCwJMHgwMDAwMDAwMCwKLQkJICAgTUdBX0RNQVBBRCwJMHgwMDAwMDAwMCwKLQkJICAgTUdBX0RNQVBBRCwJMHgwMDAwMDAwMCApOworCURNQV9CTE9DSyhNR0FfV0lBRERSMiwgTUdBX1dNT0RFX1NVU1BFTkQsCisJCSAgTUdBX0RNQVBBRCwgMHgwMDAwMDAwMCwKKwkJICBNR0FfRE1BUEFELCAweDAwMDAwMDAwLCBNR0FfRE1BUEFELCAweDAwMDAwMDAwKTsKIAotCWlmICggcGlwZSAmIE1HQV9UMiApIHsKLQkJRE1BX0JMT0NLKCBNR0FfV1ZSVFhTWiwJCTB4MDAwMDFlMDksCi0JCQkgICBNR0FfRE1BUEFELAkJMHgwMDAwMDAwMCwKLQkJCSAgIE1HQV9ETUFQQUQsCQkweDAwMDAwMDAwLAotCQkJICAgTUdBX0RNQVBBRCwJCTB4MDAwMDAwMDAgKTsKKwlpZiAocGlwZSAmIE1HQV9UMikgeworCQlETUFfQkxPQ0soTUdBX1dWUlRYU1osIDB4MDAwMDFlMDksCisJCQkgIE1HQV9ETUFQQUQsIDB4MDAwMDAwMDAsCisJCQkgIE1HQV9ETUFQQUQsIDB4MDAwMDAwMDAsIE1HQV9ETUFQQUQsIDB4MDAwMDAwMDApOwogCi0JCURNQV9CTE9DSyggTUdBX1dBQ0NFUFRTRVEsCTB4MDAwMDAwMDAsCi0JCQkgICBNR0FfV0FDQ0VQVFNFUSwJMHgwMDAwMDAwMCwKLQkJCSAgIE1HQV9XQUNDRVBUU0VRLAkweDAwMDAwMDAwLAotCQkJICAgTUdBX1dBQ0NFUFRTRVEsCTB4MWUwMDAwMDAgKTsKKwkJRE1BX0JMT0NLKE1HQV9XQUNDRVBUU0VRLCAweDAwMDAwMDAwLAorCQkJICBNR0FfV0FDQ0VQVFNFUSwgMHgwMDAwMDAwMCwKKwkJCSAgTUdBX1dBQ0NFUFRTRVEsIDB4MDAwMDAwMDAsCisJCQkgIE1HQV9XQUNDRVBUU0VRLCAweDFlMDAwMDAwKTsKIAl9IGVsc2UgewotCQlpZiAoIGRldl9wcml2LT53YXJwX3BpcGUgJiBNR0FfVDIgKSB7CisJCWlmIChkZXZfcHJpdi0+d2FycF9waXBlICYgTUdBX1QyKSB7CiAJCQkvKiBGbHVzaCB0aGUgV0FSUCBwaXBlICovCi0JCQlETUFfQkxPQ0soIE1HQV9ZRFNULAkJMHgwMDAwMDAwMCwKLQkJCQkgICBNR0FfRlhMRUZULAkJMHgwMDAwMDAwMCwKLQkJCQkgICBNR0FfRlhSSUdIVCwJCTB4MDAwMDAwMDEsCi0JCQkJICAgTUdBX0RXR0NUTCwJCU1HQV9EV0dDVExfRkxVU0ggKTsKKwkJCURNQV9CTE9DSyhNR0FfWURTVCwgMHgwMDAwMDAwMCwKKwkJCQkgIE1HQV9GWExFRlQsIDB4MDAwMDAwMDAsCisJCQkJICBNR0FfRlhSSUdIVCwgMHgwMDAwMDAwMSwKKwkJCQkgIE1HQV9EV0dDVEwsIE1HQV9EV0dDVExfRkxVU0gpOwogCi0JCQlETUFfQkxPQ0soIE1HQV9MRU4gKyBNR0FfRVhFQywJMHgwMDAwMDAwMSwKLQkJCQkgICBNR0FfRFdHU1lOQywJCTB4MDAwMDcwMDAsCi0JCQkJICAgTUdBX1RFWENUTDIsCQlNR0FfRzQwMF9UQzJfTUFHSUMsCi0JCQkJICAgTUdBX0xFTiArIE1HQV9FWEVDLAkweDAwMDAwMDAwICk7CisJCQlETUFfQkxPQ0soTUdBX0xFTiArIE1HQV9FWEVDLCAweDAwMDAwMDAxLAorCQkJCSAgTUdBX0RXR1NZTkMsIDB4MDAwMDcwMDAsCisJCQkJICBNR0FfVEVYQ1RMMiwgTUdBX0c0MDBfVEMyX01BR0lDLAorCQkJCSAgTUdBX0xFTiArIE1HQV9FWEVDLCAweDAwMDAwMDAwKTsKIAotCQkJRE1BX0JMT0NLKCBNR0FfVEVYQ1RMMiwJCShNR0FfRFVBTFRFWCB8Ci0JCQkJCQkJIE1HQV9HNDAwX1RDMl9NQUdJQyksCi0JCQkJICAgTUdBX0xFTiArIE1HQV9FWEVDLAkweDAwMDAwMDAwLAotCQkJCSAgIE1HQV9URVhDVEwyLAkJTUdBX0c0MDBfVEMyX01BR0lDLAotCQkJCSAgIE1HQV9ETUFQQUQsCQkweDAwMDAwMDAwICk7CisJCQlETUFfQkxPQ0soTUdBX1RFWENUTDIsIChNR0FfRFVBTFRFWCB8CisJCQkJCQlNR0FfRzQwMF9UQzJfTUFHSUMpLAorCQkJCSAgTUdBX0xFTiArIE1HQV9FWEVDLCAweDAwMDAwMDAwLAorCQkJCSAgTUdBX1RFWENUTDIsIE1HQV9HNDAwX1RDMl9NQUdJQywKKwkJCQkgIE1HQV9ETUFQQUQsIDB4MDAwMDAwMDApOwogCQl9CiAKLQkJRE1BX0JMT0NLKCBNR0FfV1ZSVFhTWiwJCTB4MDAwMDE4MDcsCi0JCQkgICBNR0FfRE1BUEFELAkJMHgwMDAwMDAwMCwKLQkJCSAgIE1HQV9ETUFQQUQsCQkweDAwMDAwMDAwLAotCQkJICAgTUdBX0RNQVBBRCwJCTB4MDAwMDAwMDAgKTsKKwkJRE1BX0JMT0NLKE1HQV9XVlJUWFNaLCAweDAwMDAxODA3LAorCQkJICBNR0FfRE1BUEFELCAweDAwMDAwMDAwLAorCQkJICBNR0FfRE1BUEFELCAweDAwMDAwMDAwLCBNR0FfRE1BUEFELCAweDAwMDAwMDAwKTsKIAotCQlETUFfQkxPQ0soIE1HQV9XQUNDRVBUU0VRLAkweDAwMDAwMDAwLAotCQkJICAgTUdBX1dBQ0NFUFRTRVEsCTB4MDAwMDAwMDAsCi0JCQkgICBNR0FfV0FDQ0VQVFNFUSwJMHgwMDAwMDAwMCwKLQkJCSAgIE1HQV9XQUNDRVBUU0VRLAkweDE4MDAwMDAwICk7CisJCURNQV9CTE9DSyhNR0FfV0FDQ0VQVFNFUSwgMHgwMDAwMDAwMCwKKwkJCSAgTUdBX1dBQ0NFUFRTRVEsIDB4MDAwMDAwMDAsCisJCQkgIE1HQV9XQUNDRVBUU0VRLCAweDAwMDAwMDAwLAorCQkJICBNR0FfV0FDQ0VQVFNFUSwgMHgxODAwMDAwMCk7CiAJfQogCi0JRE1BX0JMT0NLKCBNR0FfV0ZMQUcsCTB4MDAwMDAwMDAsCi0JCSAgIE1HQV9XRkxBRzEsCTB4MDAwMDAwMDAsCi0JCSAgIE1HQV9XUjU2LAlNR0FfRzQwMF9XUjU2X01BR0lDLAotCQkgICBNR0FfRE1BUEFELAkweDAwMDAwMDAwICk7CisJRE1BX0JMT0NLKE1HQV9XRkxBRywgMHgwMDAwMDAwMCwKKwkJICBNR0FfV0ZMQUcxLCAweDAwMDAwMDAwLAorCQkgIE1HQV9XUjU2LCBNR0FfRzQwMF9XUjU2X01BR0lDLCBNR0FfRE1BUEFELCAweDAwMDAwMDAwKTsKIAotCURNQV9CTE9DSyggTUdBX1dSNDksCTB4MDAwMDAwMDAsCQkvKiB0ZXgwICAgICAgICAgICAgICAqLwotCQkgICBNR0FfV1I1NywJMHgwMDAwMDAwMCwJCS8qIHRleDAgICAgICAgICAgICAgICovCi0JCSAgIE1HQV9XUjUzLAkweDAwMDAwMDAwLAkJLyogdGV4MSAgICAgICAgICAgICAgKi8KLQkJICAgTUdBX1dSNjEsCTB4MDAwMDAwMDAgKTsJCS8qIHRleDEgICAgICAgICAgICAgICovCisJRE1BX0JMT0NLKE1HQV9XUjQ5LCAweDAwMDAwMDAwLAkvKiB0ZXgwICAgICAgICAgICAgICAqLworCQkgIE1HQV9XUjU3LCAweDAwMDAwMDAwLAkvKiB0ZXgwICAgICAgICAgICAgICAqLworCQkgIE1HQV9XUjUzLCAweDAwMDAwMDAwLAkvKiB0ZXgxICAgICAgICAgICAgICAqLworCQkgIE1HQV9XUjYxLCAweDAwMDAwMDAwKTsJLyogdGV4MSAgICAgICAgICAgICAgKi8KIAotCURNQV9CTE9DSyggTUdBX1dSNTQsCU1HQV9HNDAwX1dSX01BR0lDLAkvKiB0ZXgwIHdpZHRoICAgICAgICAqLwotCQkgICBNR0FfV1I2MiwJTUdBX0c0MDBfV1JfTUFHSUMsCS8qIHRleDAgaGVpZ2h0ICAgICAgICovCi0JCSAgIE1HQV9XUjUyLAlNR0FfRzQwMF9XUl9NQUdJQywJLyogdGV4MSB3aWR0aCAgICAgICAgKi8KLQkJICAgTUdBX1dSNjAsCU1HQV9HNDAwX1dSX01BR0lDICk7CS8qIHRleDEgaGVpZ2h0ICAgICAgICovCisJRE1BX0JMT0NLKE1HQV9XUjU0LCBNR0FfRzQwMF9XUl9NQUdJQywJLyogdGV4MCB3aWR0aCAgICAgICAgKi8KKwkJICBNR0FfV1I2MiwgTUdBX0c0MDBfV1JfTUFHSUMsCS8qIHRleDAgaGVpZ2h0ICAgICAgICovCisJCSAgTUdBX1dSNTIsIE1HQV9HNDAwX1dSX01BR0lDLAkvKiB0ZXgxIHdpZHRoICAgICAgICAqLworCQkgIE1HQV9XUjYwLCBNR0FfRzQwMF9XUl9NQUdJQyk7CS8qIHRleDEgaGVpZ2h0ICAgICAgICovCiAKIAkvKiBQYWRkaW5nIHJlcXVpcmVkIHRvIHRvIGhhcmR3YXJlIGJ1ZyAqLwogCURNQV9CTE9DSyhNR0FfRE1BUEFELCAweGZmZmZmZmZmLApAQCAtMzUwLDcxICszMjcsNzAgQEAKIAlBRFZBTkNFX0RNQSgpOwogfQogCi1zdGF0aWMgdm9pZCBtZ2FfZzIwMF9lbWl0X3N0YXRlKCBkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYgKQorc3RhdGljIHZvaWQgbWdhX2cyMDBfZW1pdF9zdGF0ZShkcm1fbWdhX3ByaXZhdGVfdCAqIGRldl9wcml2KQogewogCWRybV9tZ2Ffc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9wcml2OwogCXVuc2lnbmVkIGludCBkaXJ0eSA9IHNhcmVhX3ByaXYtPmRpcnR5OwogCi0JaWYgKCBzYXJlYV9wcml2LT53YXJwX3BpcGUgIT0gZGV2X3ByaXYtPndhcnBfcGlwZSApIHsKLQkJbWdhX2cyMDBfZW1pdF9waXBlKCBkZXZfcHJpdiApOworCWlmIChzYXJlYV9wcml2LT53YXJwX3BpcGUgIT0gZGV2X3ByaXYtPndhcnBfcGlwZSkgeworCQltZ2FfZzIwMF9lbWl0X3BpcGUoZGV2X3ByaXYpOwogCQlkZXZfcHJpdi0+d2FycF9waXBlID0gc2FyZWFfcHJpdi0+d2FycF9waXBlOwogCX0KIAotCWlmICggZGlydHkgJiBNR0FfVVBMT0FEX0NPTlRFWFQgKSB7Ci0JCW1nYV9nMjAwX2VtaXRfY29udGV4dCggZGV2X3ByaXYgKTsKKwlpZiAoZGlydHkgJiBNR0FfVVBMT0FEX0NPTlRFWFQpIHsKKwkJbWdhX2cyMDBfZW1pdF9jb250ZXh0KGRldl9wcml2KTsKIAkJc2FyZWFfcHJpdi0+ZGlydHkgJj0gfk1HQV9VUExPQURfQ09OVEVYVDsKIAl9CiAKLQlpZiAoIGRpcnR5ICYgTUdBX1VQTE9BRF9URVgwICkgewotCQltZ2FfZzIwMF9lbWl0X3RleDAoIGRldl9wcml2ICk7CisJaWYgKGRpcnR5ICYgTUdBX1VQTE9BRF9URVgwKSB7CisJCW1nYV9nMjAwX2VtaXRfdGV4MChkZXZfcHJpdik7CiAJCXNhcmVhX3ByaXYtPmRpcnR5ICY9IH5NR0FfVVBMT0FEX1RFWDA7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBtZ2FfZzQwMF9lbWl0X3N0YXRlKCBkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYgKQorc3RhdGljIHZvaWQgbWdhX2c0MDBfZW1pdF9zdGF0ZShkcm1fbWdhX3ByaXZhdGVfdCAqIGRldl9wcml2KQogewogCWRybV9tZ2Ffc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9wcml2OwogCXVuc2lnbmVkIGludCBkaXJ0eSA9IHNhcmVhX3ByaXYtPmRpcnR5OwogCWludCBtdWx0aXRleCA9IHNhcmVhX3ByaXYtPndhcnBfcGlwZSAmIE1HQV9UMjsKIAotCWlmICggc2FyZWFfcHJpdi0+d2FycF9waXBlICE9IGRldl9wcml2LT53YXJwX3BpcGUgKSB7Ci0JCW1nYV9nNDAwX2VtaXRfcGlwZSggZGV2X3ByaXYgKTsKKwlpZiAoc2FyZWFfcHJpdi0+d2FycF9waXBlICE9IGRldl9wcml2LT53YXJwX3BpcGUpIHsKKwkJbWdhX2c0MDBfZW1pdF9waXBlKGRldl9wcml2KTsKIAkJZGV2X3ByaXYtPndhcnBfcGlwZSA9IHNhcmVhX3ByaXYtPndhcnBfcGlwZTsKIAl9CiAKLQlpZiAoIGRpcnR5ICYgTUdBX1VQTE9BRF9DT05URVhUICkgewotCQltZ2FfZzQwMF9lbWl0X2NvbnRleHQoIGRldl9wcml2ICk7CisJaWYgKGRpcnR5ICYgTUdBX1VQTE9BRF9DT05URVhUKSB7CisJCW1nYV9nNDAwX2VtaXRfY29udGV4dChkZXZfcHJpdik7CiAJCXNhcmVhX3ByaXYtPmRpcnR5ICY9IH5NR0FfVVBMT0FEX0NPTlRFWFQ7CiAJfQogCi0JaWYgKCBkaXJ0eSAmIE1HQV9VUExPQURfVEVYMCApIHsKLQkJbWdhX2c0MDBfZW1pdF90ZXgwKCBkZXZfcHJpdiApOworCWlmIChkaXJ0eSAmIE1HQV9VUExPQURfVEVYMCkgeworCQltZ2FfZzQwMF9lbWl0X3RleDAoZGV2X3ByaXYpOwogCQlzYXJlYV9wcml2LT5kaXJ0eSAmPSB+TUdBX1VQTE9BRF9URVgwOwogCX0KIAotCWlmICggKGRpcnR5ICYgTUdBX1VQTE9BRF9URVgxKSAmJiBtdWx0aXRleCApIHsKLQkJbWdhX2c0MDBfZW1pdF90ZXgxKCBkZXZfcHJpdiApOworCWlmICgoZGlydHkgJiBNR0FfVVBMT0FEX1RFWDEpICYmIG11bHRpdGV4KSB7CisJCW1nYV9nNDAwX2VtaXRfdGV4MShkZXZfcHJpdik7CiAJCXNhcmVhX3ByaXYtPmRpcnR5ICY9IH5NR0FfVVBMT0FEX1RFWDE7CiAJfQogfQogCi0KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqIFNBUkVBIHN0YXRlIHZlcmlmaWNhdGlvbgogICovCiAKIC8qIERpc2FsbG93IGFsbCB3cml0ZSBkZXN0aW5hdGlvbnMgZXhjZXB0IHRoZSBmcm9udCBhbmQgYmFja2J1ZmZlci4KICAqLwotc3RhdGljIGludCBtZ2FfdmVyaWZ5X2NvbnRleHQoIGRybV9tZ2FfcHJpdmF0ZV90ICpkZXZfcHJpdiApCitzdGF0aWMgaW50IG1nYV92ZXJpZnlfY29udGV4dChkcm1fbWdhX3ByaXZhdGVfdCAqIGRldl9wcml2KQogewogCWRybV9tZ2Ffc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9wcml2OwogCWRybV9tZ2FfY29udGV4dF9yZWdzX3QgKmN0eCA9ICZzYXJlYV9wcml2LT5jb250ZXh0X3N0YXRlOwogCi0JaWYgKCBjdHgtPmRzdG9yZyAhPSBkZXZfcHJpdi0+ZnJvbnRfb2Zmc2V0ICYmCi0JICAgICBjdHgtPmRzdG9yZyAhPSBkZXZfcHJpdi0+YmFja19vZmZzZXQgKSB7Ci0JCURSTV9FUlJPUiggIioqKiBiYWQgRFNUT1JHOiAleCAoZnJvbnQgJXgsIGJhY2sgJXgpXG5cbiIsCi0JCQkgICBjdHgtPmRzdG9yZywgZGV2X3ByaXYtPmZyb250X29mZnNldCwKLQkJCSAgIGRldl9wcml2LT5iYWNrX29mZnNldCApOworCWlmIChjdHgtPmRzdG9yZyAhPSBkZXZfcHJpdi0+ZnJvbnRfb2Zmc2V0ICYmCisJICAgIGN0eC0+ZHN0b3JnICE9IGRldl9wcml2LT5iYWNrX29mZnNldCkgeworCQlEUk1fRVJST1IoIioqKiBiYWQgRFNUT1JHOiAleCAoZnJvbnQgJXgsIGJhY2sgJXgpXG5cbiIsCisJCQkgIGN0eC0+ZHN0b3JnLCBkZXZfcHJpdi0+ZnJvbnRfb2Zmc2V0LAorCQkJICBkZXZfcHJpdi0+YmFja19vZmZzZXQpOwogCQljdHgtPmRzdG9yZyA9IDA7CiAJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiAJfQpAQCAtNDI0LDcgKzQwMCw3IEBACiAKIC8qIERpc2FsbG93IHRleHR1cmUgcmVhZHMgZnJvbSBQQ0kgc3BhY2UuCiAgKi8KLXN0YXRpYyBpbnQgbWdhX3ZlcmlmeV90ZXgoIGRybV9tZ2FfcHJpdmF0ZV90ICpkZXZfcHJpdiwgaW50IHVuaXQgKQorc3RhdGljIGludCBtZ2FfdmVyaWZ5X3RleChkcm1fbWdhX3ByaXZhdGVfdCAqIGRldl9wcml2LCBpbnQgdW5pdCkKIHsKIAlkcm1fbWdhX3NhcmVhX3QgKnNhcmVhX3ByaXYgPSBkZXZfcHJpdi0+c2FyZWFfcHJpdjsKIAlkcm1fbWdhX3RleHR1cmVfcmVnc190ICp0ZXggPSAmc2FyZWFfcHJpdi0+dGV4X3N0YXRlW3VuaXRdOwpAQCAtNDMyLDkgKzQwOCw4IEBACiAKIAlvcmcgPSB0ZXgtPnRleG9yZyAmIChNR0FfVEVYT1JHTUFQX01BU0sgfCBNR0FfVEVYT1JHQUNDX01BU0spOwogCi0JaWYgKCBvcmcgPT0gKE1HQV9URVhPUkdNQVBfU1lTTUVNIHwgTUdBX1RFWE9SR0FDQ19QQ0kpICkgewotCQlEUk1fRVJST1IoICIqKiogYmFkIFRFWE9SRzogMHgleCwgdW5pdCAlZFxuIiwKLQkJCSAgIHRleC0+dGV4b3JnLCB1bml0ICk7CisJaWYgKG9yZyA9PSAoTUdBX1RFWE9SR01BUF9TWVNNRU0gfCBNR0FfVEVYT1JHQUNDX1BDSSkpIHsKKwkJRFJNX0VSUk9SKCIqKiogYmFkIFRFWE9SRzogMHgleCwgdW5pdCAlZFxuIiwgdGV4LT50ZXhvcmcsIHVuaXQpOwogCQl0ZXgtPnRleG9yZyA9IDA7CiAJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiAJfQpAQCAtNDQyLDczICs0MTcsNzAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtZ2FfdmVyaWZ5X3N0YXRlKCBkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYgKQorc3RhdGljIGludCBtZ2FfdmVyaWZ5X3N0YXRlKGRybV9tZ2FfcHJpdmF0ZV90ICogZGV2X3ByaXYpCiB7CiAJZHJtX21nYV9zYXJlYV90ICpzYXJlYV9wcml2ID0gZGV2X3ByaXYtPnNhcmVhX3ByaXY7CiAJdW5zaWduZWQgaW50IGRpcnR5ID0gc2FyZWFfcHJpdi0+ZGlydHk7CiAJaW50IHJldCA9IDA7CiAKLQlpZiAoIHNhcmVhX3ByaXYtPm5ib3ggPiBNR0FfTlJfU0FSRUFfQ0xJUFJFQ1RTICkKKwlpZiAoc2FyZWFfcHJpdi0+bmJveCA+IE1HQV9OUl9TQVJFQV9DTElQUkVDVFMpCiAJCXNhcmVhX3ByaXYtPm5ib3ggPSBNR0FfTlJfU0FSRUFfQ0xJUFJFQ1RTOwogCi0JaWYgKCBkaXJ0eSAmIE1HQV9VUExPQURfQ09OVEVYVCApCi0JCXJldCB8PSBtZ2FfdmVyaWZ5X2NvbnRleHQoIGRldl9wcml2ICk7CisJaWYgKGRpcnR5ICYgTUdBX1VQTE9BRF9DT05URVhUKQorCQlyZXQgfD0gbWdhX3ZlcmlmeV9jb250ZXh0KGRldl9wcml2KTsKIAotCWlmICggZGlydHkgJiBNR0FfVVBMT0FEX1RFWDAgKQotCQlyZXQgfD0gbWdhX3ZlcmlmeV90ZXgoIGRldl9wcml2LCAwICk7CisJaWYgKGRpcnR5ICYgTUdBX1VQTE9BRF9URVgwKQorCQlyZXQgfD0gbWdhX3ZlcmlmeV90ZXgoZGV2X3ByaXYsIDApOwogCiAJaWYgKGRldl9wcml2LT5jaGlwc2V0ID49IE1HQV9DQVJEX1RZUEVfRzQwMCkgewogCQlpZiAoZGlydHkgJiBNR0FfVVBMT0FEX1RFWDEpCiAJCQlyZXQgfD0gbWdhX3ZlcmlmeV90ZXgoZGV2X3ByaXYsIDEpOwogCi0JCWlmICggZGlydHkgJiBNR0FfVVBMT0FEX1BJUEUgKQotCQkJcmV0IHw9ICggc2FyZWFfcHJpdi0+d2FycF9waXBlID4gTUdBX01BWF9HNDAwX1BJUEVTICk7CisJCWlmIChkaXJ0eSAmIE1HQV9VUExPQURfUElQRSkKKwkJCXJldCB8PSAoc2FyZWFfcHJpdi0+d2FycF9waXBlID4gTUdBX01BWF9HNDAwX1BJUEVTKTsKIAl9IGVsc2UgewotCQlpZiAoIGRpcnR5ICYgTUdBX1VQTE9BRF9QSVBFICkKLQkJCXJldCB8PSAoIHNhcmVhX3ByaXYtPndhcnBfcGlwZSA+IE1HQV9NQVhfRzIwMF9QSVBFUyApOworCQlpZiAoZGlydHkgJiBNR0FfVVBMT0FEX1BJUEUpCisJCQlyZXQgfD0gKHNhcmVhX3ByaXYtPndhcnBfcGlwZSA+IE1HQV9NQVhfRzIwMF9QSVBFUyk7CiAJfQogCi0JcmV0dXJuICggcmV0ID09IDAgKTsKKwlyZXR1cm4gKHJldCA9PSAwKTsKIH0KIAotc3RhdGljIGludCBtZ2FfdmVyaWZ5X2lsb2FkKCBkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYsCi0JCQkgICAgIHVuc2lnbmVkIGludCBkc3RvcmcsIHVuc2lnbmVkIGludCBsZW5ndGggKQorc3RhdGljIGludCBtZ2FfdmVyaWZ5X2lsb2FkKGRybV9tZ2FfcHJpdmF0ZV90ICogZGV2X3ByaXYsCisJCQkgICAgdW5zaWduZWQgaW50IGRzdG9yZywgdW5zaWduZWQgaW50IGxlbmd0aCkKIHsKLQlpZiAoIGRzdG9yZyA8IGRldl9wcml2LT50ZXh0dXJlX29mZnNldCB8fAotCSAgICAgZHN0b3JnICsgbGVuZ3RoID4gKGRldl9wcml2LT50ZXh0dXJlX29mZnNldCArCi0JCQkJZGV2X3ByaXYtPnRleHR1cmVfc2l6ZSkgKSB7Ci0JCURSTV9FUlJPUiggIioqKiBiYWQgaWxvYWQgRFNUT1JHOiAweCV4XG4iLCBkc3RvcmcgKTsKKwlpZiAoZHN0b3JnIDwgZGV2X3ByaXYtPnRleHR1cmVfb2Zmc2V0IHx8CisJICAgIGRzdG9yZyArIGxlbmd0aCA+IChkZXZfcHJpdi0+dGV4dHVyZV9vZmZzZXQgKworCQkJICAgICAgIGRldl9wcml2LT50ZXh0dXJlX3NpemUpKSB7CisJCURSTV9FUlJPUigiKioqIGJhZCBpbG9hZCBEU1RPUkc6IDB4JXhcbiIsIGRzdG9yZyk7CiAJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiAJfQogCi0JaWYgKCBsZW5ndGggJiBNR0FfSUxPQURfTUFTSyApIHsKLQkJRFJNX0VSUk9SKCAiKioqIGJhZCBpbG9hZCBsZW5ndGg6IDB4JXhcbiIsCi0JCQkgICBsZW5ndGggJiBNR0FfSUxPQURfTUFTSyApOworCWlmIChsZW5ndGggJiBNR0FfSUxPQURfTUFTSykgeworCQlEUk1fRVJST1IoIioqKiBiYWQgaWxvYWQgbGVuZ3RoOiAweCV4XG4iLAorCQkJICBsZW5ndGggJiBNR0FfSUxPQURfTUFTSyk7CiAJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbWdhX3ZlcmlmeV9ibGl0KCBkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYsCi0JCQkgICAgdW5zaWduZWQgaW50IHNyY29yZywgdW5zaWduZWQgaW50IGRzdG9yZyApCitzdGF0aWMgaW50IG1nYV92ZXJpZnlfYmxpdChkcm1fbWdhX3ByaXZhdGVfdCAqIGRldl9wcml2LAorCQkJICAgdW5zaWduZWQgaW50IHNyY29yZywgdW5zaWduZWQgaW50IGRzdG9yZykKIHsKLQlpZiAoIChzcmNvcmcgJiAweDMpID09IChNR0FfU1JDQUNDX1BDSSB8IE1HQV9TUkNNQVBfU1lTTUVNKSB8fAotCSAgICAgKGRzdG9yZyAmIDB4MykgPT0gKE1HQV9TUkNBQ0NfUENJIHwgTUdBX1NSQ01BUF9TWVNNRU0pICkgewotCQlEUk1fRVJST1IoICIqKiogYmFkIGJsaXQ6IHNyYz0weCV4IGRzdD0weCV4XG4iLAotCQkJICAgc3Jjb3JnLCBkc3RvcmcgKTsKKwlpZiAoKHNyY29yZyAmIDB4MykgPT0gKE1HQV9TUkNBQ0NfUENJIHwgTUdBX1NSQ01BUF9TWVNNRU0pIHx8CisJICAgIChkc3RvcmcgJiAweDMpID09IChNR0FfU1JDQUNDX1BDSSB8IE1HQV9TUkNNQVBfU1lTTUVNKSkgeworCQlEUk1fRVJST1IoIioqKiBiYWQgYmxpdDogc3JjPTB4JXggZHN0PTB4JXhcbiIsIHNyY29yZywgZHN0b3JnKTsKIAkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKLQogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICoKICAqLwogCi1zdGF0aWMgdm9pZCBtZ2FfZG1hX2Rpc3BhdGNoX2NsZWFyKCBkcm1fZGV2aWNlX3QgKmRldiwKLQkJCQkgICAgZHJtX21nYV9jbGVhcl90ICpjbGVhciApCitzdGF0aWMgdm9pZCBtZ2FfZG1hX2Rpc3BhdGNoX2NsZWFyKGRybV9kZXZpY2VfdCAqIGRldiwgZHJtX21nYV9jbGVhcl90ICogY2xlYXIpCiB7CiAJZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlkcm1fbWdhX3NhcmVhX3QgKnNhcmVhX3ByaXYgPSBkZXZfcHJpdi0+c2FyZWFfcHJpdjsKQEAgLTUxNyw5MiArNDg5LDg2IEBACiAJaW50IG5ib3ggPSBzYXJlYV9wcml2LT5uYm94OwogCWludCBpOwogCURNQV9MT0NBTFM7Ci0JRFJNX0RFQlVHKCAiXG4iICk7CisJRFJNX0RFQlVHKCJcbiIpOwogCi0JQkVHSU5fRE1BKCAxICk7CisJQkVHSU5fRE1BKDEpOwogCi0JRE1BX0JMT0NLKCBNR0FfRE1BUEFELAkweDAwMDAwMDAwLAotCQkgICBNR0FfRE1BUEFELAkweDAwMDAwMDAwLAotCQkgICBNR0FfRFdHU1lOQywJMHgwMDAwNzEwMCwKLQkJICAgTUdBX0RXR1NZTkMsCTB4MDAwMDcwMDAgKTsKKwlETUFfQkxPQ0soTUdBX0RNQVBBRCwgMHgwMDAwMDAwMCwKKwkJICBNR0FfRE1BUEFELCAweDAwMDAwMDAwLAorCQkgIE1HQV9EV0dTWU5DLCAweDAwMDA3MTAwLCBNR0FfRFdHU1lOQywgMHgwMDAwNzAwMCk7CiAKIAlBRFZBTkNFX0RNQSgpOwogCi0JZm9yICggaSA9IDAgOyBpIDwgbmJveCA7IGkrKyApIHsKKwlmb3IgKGkgPSAwOyBpIDwgbmJveDsgaSsrKSB7CiAJCWRybV9jbGlwX3JlY3RfdCAqYm94ID0gJnBib3hbaV07CiAJCXUzMiBoZWlnaHQgPSBib3gtPnkyIC0gYm94LT55MTsKIAotCQlEUk1fREVCVUcoICIgICBmcm9tPSVkLCVkIHRvPSVkLCVkXG4iLAotCQkJICAgYm94LT54MSwgYm94LT55MSwgYm94LT54MiwgYm94LT55MiApOworCQlEUk1fREVCVUcoIiAgIGZyb209JWQsJWQgdG89JWQsJWRcbiIsCisJCQkgIGJveC0+eDEsIGJveC0+eTEsIGJveC0+eDIsIGJveC0+eTIpOwogCi0JCWlmICggY2xlYXItPmZsYWdzICYgTUdBX0ZST05UICkgewotCQkJQkVHSU5fRE1BKCAyICk7CisJCWlmIChjbGVhci0+ZmxhZ3MgJiBNR0FfRlJPTlQpIHsKKwkJCUJFR0lOX0RNQSgyKTsKIAotCQkJRE1BX0JMT0NLKCBNR0FfRE1BUEFELAkweDAwMDAwMDAwLAotCQkJCSAgIE1HQV9QTE5XVCwJY2xlYXItPmNvbG9yX21hc2ssCi0JCQkJICAgTUdBX1lEU1RMRU4sIChib3gtPnkxIDw8IDE2KSB8IGhlaWdodCwKLQkJCQkgICBNR0FfRlhCTkRSWSwgKGJveC0+eDIgPDwgMTYpIHwgYm94LT54MSApOworCQkJRE1BX0JMT0NLKE1HQV9ETUFQQUQsIDB4MDAwMDAwMDAsCisJCQkJICBNR0FfUExOV1QsIGNsZWFyLT5jb2xvcl9tYXNrLAorCQkJCSAgTUdBX1lEU1RMRU4sIChib3gtPnkxIDw8IDE2KSB8IGhlaWdodCwKKwkJCQkgIE1HQV9GWEJORFJZLCAoYm94LT54MiA8PCAxNikgfCBib3gtPngxKTsKIAotCQkJRE1BX0JMT0NLKCBNR0FfRE1BUEFELAkweDAwMDAwMDAwLAotCQkJCSAgIE1HQV9GQ09MLAljbGVhci0+Y2xlYXJfY29sb3IsCi0JCQkJICAgTUdBX0RTVE9SRywJZGV2X3ByaXYtPmZyb250X29mZnNldCwKLQkJCQkgICBNR0FfRFdHQ1RMICsgTUdBX0VYRUMsCi0JCQkJCQlkZXZfcHJpdi0+Y2xlYXJfY21kICk7CisJCQlETUFfQkxPQ0soTUdBX0RNQVBBRCwgMHgwMDAwMDAwMCwKKwkJCQkgIE1HQV9GQ09MLCBjbGVhci0+Y2xlYXJfY29sb3IsCisJCQkJICBNR0FfRFNUT1JHLCBkZXZfcHJpdi0+ZnJvbnRfb2Zmc2V0LAorCQkJCSAgTUdBX0RXR0NUTCArIE1HQV9FWEVDLCBkZXZfcHJpdi0+Y2xlYXJfY21kKTsKIAogCQkJQURWQU5DRV9ETUEoKTsKIAkJfQogCisJCWlmIChjbGVhci0+ZmxhZ3MgJiBNR0FfQkFDSykgeworCQkJQkVHSU5fRE1BKDIpOwogCi0JCWlmICggY2xlYXItPmZsYWdzICYgTUdBX0JBQ0sgKSB7Ci0JCQlCRUdJTl9ETUEoIDIgKTsKKwkJCURNQV9CTE9DSyhNR0FfRE1BUEFELCAweDAwMDAwMDAwLAorCQkJCSAgTUdBX1BMTldULCBjbGVhci0+Y29sb3JfbWFzaywKKwkJCQkgIE1HQV9ZRFNUTEVOLCAoYm94LT55MSA8PCAxNikgfCBoZWlnaHQsCisJCQkJICBNR0FfRlhCTkRSWSwgKGJveC0+eDIgPDwgMTYpIHwgYm94LT54MSk7CiAKLQkJCURNQV9CTE9DSyggTUdBX0RNQVBBRCwJMHgwMDAwMDAwMCwKLQkJCQkgICBNR0FfUExOV1QsCWNsZWFyLT5jb2xvcl9tYXNrLAotCQkJCSAgIE1HQV9ZRFNUTEVOLCAoYm94LT55MSA8PCAxNikgfCBoZWlnaHQsCi0JCQkJICAgTUdBX0ZYQk5EUlksIChib3gtPngyIDw8IDE2KSB8IGJveC0+eDEgKTsKLQotCQkJRE1BX0JMT0NLKCBNR0FfRE1BUEFELAkweDAwMDAwMDAwLAotCQkJCSAgIE1HQV9GQ09MLAljbGVhci0+Y2xlYXJfY29sb3IsCi0JCQkJICAgTUdBX0RTVE9SRywJZGV2X3ByaXYtPmJhY2tfb2Zmc2V0LAotCQkJCSAgIE1HQV9EV0dDVEwgKyBNR0FfRVhFQywKLQkJCQkJCWRldl9wcml2LT5jbGVhcl9jbWQgKTsKKwkJCURNQV9CTE9DSyhNR0FfRE1BUEFELCAweDAwMDAwMDAwLAorCQkJCSAgTUdBX0ZDT0wsIGNsZWFyLT5jbGVhcl9jb2xvciwKKwkJCQkgIE1HQV9EU1RPUkcsIGRldl9wcml2LT5iYWNrX29mZnNldCwKKwkJCQkgIE1HQV9EV0dDVEwgKyBNR0FfRVhFQywgZGV2X3ByaXYtPmNsZWFyX2NtZCk7CiAKIAkJCUFEVkFOQ0VfRE1BKCk7CiAJCX0KIAotCQlpZiAoIGNsZWFyLT5mbGFncyAmIE1HQV9ERVBUSCApIHsKLQkJCUJFR0lOX0RNQSggMiApOworCQlpZiAoY2xlYXItPmZsYWdzICYgTUdBX0RFUFRIKSB7CisJCQlCRUdJTl9ETUEoMik7CiAKLQkJCURNQV9CTE9DSyggTUdBX0RNQVBBRCwJMHgwMDAwMDAwMCwKLQkJCQkgICBNR0FfUExOV1QsCWNsZWFyLT5kZXB0aF9tYXNrLAotCQkJCSAgIE1HQV9ZRFNUTEVOLCAoYm94LT55MSA8PCAxNikgfCBoZWlnaHQsCi0JCQkJICAgTUdBX0ZYQk5EUlksIChib3gtPngyIDw8IDE2KSB8IGJveC0+eDEgKTsKKwkJCURNQV9CTE9DSyhNR0FfRE1BUEFELCAweDAwMDAwMDAwLAorCQkJCSAgTUdBX1BMTldULCBjbGVhci0+ZGVwdGhfbWFzaywKKwkJCQkgIE1HQV9ZRFNUTEVOLCAoYm94LT55MSA8PCAxNikgfCBoZWlnaHQsCisJCQkJICBNR0FfRlhCTkRSWSwgKGJveC0+eDIgPDwgMTYpIHwgYm94LT54MSk7CiAKLQkJCURNQV9CTE9DSyggTUdBX0RNQVBBRCwJMHgwMDAwMDAwMCwKLQkJCQkgICBNR0FfRkNPTCwJY2xlYXItPmNsZWFyX2RlcHRoLAotCQkJCSAgIE1HQV9EU1RPUkcsCWRldl9wcml2LT5kZXB0aF9vZmZzZXQsCi0JCQkJICAgTUdBX0RXR0NUTCArIE1HQV9FWEVDLAotCQkJCQkJZGV2X3ByaXYtPmNsZWFyX2NtZCApOworCQkJRE1BX0JMT0NLKE1HQV9ETUFQQUQsIDB4MDAwMDAwMDAsCisJCQkJICBNR0FfRkNPTCwgY2xlYXItPmNsZWFyX2RlcHRoLAorCQkJCSAgTUdBX0RTVE9SRywgZGV2X3ByaXYtPmRlcHRoX29mZnNldCwKKwkJCQkgIE1HQV9EV0dDVEwgKyBNR0FfRVhFQywgZGV2X3ByaXYtPmNsZWFyX2NtZCk7CiAKIAkJCUFEVkFOQ0VfRE1BKCk7CiAJCX0KIAogCX0KIAotCUJFR0lOX0RNQSggMSApOworCUJFR0lOX0RNQSgxKTsKIAogCS8qIEZvcmNlIHJlc2V0IG9mIERXR0NUTCAqLwotCURNQV9CTE9DSyggTUdBX0RNQVBBRCwJMHgwMDAwMDAwMCwKLQkJICAgTUdBX0RNQVBBRCwJMHgwMDAwMDAwMCwKLQkJICAgTUdBX1BMTldULAljdHgtPnBsbnd0LAotCQkgICBNR0FfRFdHQ1RMLAljdHgtPmR3Z2N0bCApOworCURNQV9CTE9DSyhNR0FfRE1BUEFELCAweDAwMDAwMDAwLAorCQkgIE1HQV9ETUFQQUQsIDB4MDAwMDAwMDAsCisJCSAgTUdBX1BMTldULCBjdHgtPnBsbnd0LCBNR0FfRFdHQ1RMLCBjdHgtPmR3Z2N0bCk7CiAKIAlBRFZBTkNFX0RNQSgpOwogCiAJRkxVU0hfRE1BKCk7CiB9CiAKLXN0YXRpYyB2b2lkIG1nYV9kbWFfZGlzcGF0Y2hfc3dhcCggZHJtX2RldmljZV90ICpkZXYgKQorc3RhdGljIHZvaWQgbWdhX2RtYV9kaXNwYXRjaF9zd2FwKGRybV9kZXZpY2VfdCAqIGRldikKIHsKIAlkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWRybV9tZ2Ffc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9wcml2OwpAQCAtNjExLDU2ICs1NzcsNTIgQEAKIAlpbnQgbmJveCA9IHNhcmVhX3ByaXYtPm5ib3g7CiAJaW50IGk7CiAJRE1BX0xPQ0FMUzsKLQlEUk1fREVCVUcoICJcbiIgKTsKKwlEUk1fREVCVUcoIlxuIik7CiAKIAlzYXJlYV9wcml2LT5sYXN0X2ZyYW1lLmhlYWQgPSBkZXZfcHJpdi0+cHJpbS50YWlsOwogCXNhcmVhX3ByaXYtPmxhc3RfZnJhbWUud3JhcCA9IGRldl9wcml2LT5wcmltLmxhc3Rfd3JhcDsKIAotCUJFR0lOX0RNQSggNCArIG5ib3ggKTsKKwlCRUdJTl9ETUEoNCArIG5ib3gpOwogCi0JRE1BX0JMT0NLKCBNR0FfRE1BUEFELAkweDAwMDAwMDAwLAotCQkgICBNR0FfRE1BUEFELAkweDAwMDAwMDAwLAotCQkgICBNR0FfRFdHU1lOQywJMHgwMDAwNzEwMCwKLQkJICAgTUdBX0RXR1NZTkMsCTB4MDAwMDcwMDAgKTsKKwlETUFfQkxPQ0soTUdBX0RNQVBBRCwgMHgwMDAwMDAwMCwKKwkJICBNR0FfRE1BUEFELCAweDAwMDAwMDAwLAorCQkgIE1HQV9EV0dTWU5DLCAweDAwMDA3MTAwLCBNR0FfRFdHU1lOQywgMHgwMDAwNzAwMCk7CiAKLQlETUFfQkxPQ0soIE1HQV9EU1RPUkcsCWRldl9wcml2LT5mcm9udF9vZmZzZXQsCi0JCSAgIE1HQV9NQUNDRVNTLAlkZXZfcHJpdi0+bWFjY2VzcywKLQkJICAgTUdBX1NSQ09SRywJZGV2X3ByaXYtPmJhY2tfb2Zmc2V0LAotCQkgICBNR0FfQVI1LAlkZXZfcHJpdi0+ZnJvbnRfcGl0Y2ggKTsKKwlETUFfQkxPQ0soTUdBX0RTVE9SRywgZGV2X3ByaXYtPmZyb250X29mZnNldCwKKwkJICBNR0FfTUFDQ0VTUywgZGV2X3ByaXYtPm1hY2Nlc3MsCisJCSAgTUdBX1NSQ09SRywgZGV2X3ByaXYtPmJhY2tfb2Zmc2V0LAorCQkgIE1HQV9BUjUsIGRldl9wcml2LT5mcm9udF9waXRjaCk7CiAKLQlETUFfQkxPQ0soIE1HQV9ETUFQQUQsCTB4MDAwMDAwMDAsCi0JCSAgIE1HQV9ETUFQQUQsCTB4MDAwMDAwMDAsCi0JCSAgIE1HQV9QTE5XVCwJMHhmZmZmZmZmZiwKLQkJICAgTUdBX0RXR0NUTCwJTUdBX0RXR0NUTF9DT1BZICk7CisJRE1BX0JMT0NLKE1HQV9ETUFQQUQsIDB4MDAwMDAwMDAsCisJCSAgTUdBX0RNQVBBRCwgMHgwMDAwMDAwMCwKKwkJICBNR0FfUExOV1QsIDB4ZmZmZmZmZmYsIE1HQV9EV0dDVEwsIE1HQV9EV0dDVExfQ09QWSk7CiAKLQlmb3IgKCBpID0gMCA7IGkgPCBuYm94IDsgaSsrICkgeworCWZvciAoaSA9IDA7IGkgPCBuYm94OyBpKyspIHsKIAkJZHJtX2NsaXBfcmVjdF90ICpib3ggPSAmcGJveFtpXTsKIAkJdTMyIGhlaWdodCA9IGJveC0+eTIgLSBib3gtPnkxOwogCQl1MzIgc3RhcnQgPSBib3gtPnkxICogZGV2X3ByaXYtPmZyb250X3BpdGNoOwogCi0JCURSTV9ERUJVRyggIiAgIGZyb209JWQsJWQgdG89JWQsJWRcbiIsCi0JCQkgICBib3gtPngxLCBib3gtPnkxLCBib3gtPngyLCBib3gtPnkyICk7CisJCURSTV9ERUJVRygiICAgZnJvbT0lZCwlZCB0bz0lZCwlZFxuIiwKKwkJCSAgYm94LT54MSwgYm94LT55MSwgYm94LT54MiwgYm94LT55Mik7CiAKLQkJRE1BX0JMT0NLKCBNR0FfQVIwLAlzdGFydCArIGJveC0+eDIgLSAxLAotCQkJICAgTUdBX0FSMywJc3RhcnQgKyBib3gtPngxLAotCQkJICAgTUdBX0ZYQk5EUlksCSgoYm94LT54MiAtIDEpIDw8IDE2KSB8IGJveC0+eDEsCi0JCQkgICBNR0FfWURTVExFTiArIE1HQV9FWEVDLAotCQkJCQkoYm94LT55MSA8PCAxNikgfCBoZWlnaHQgKTsKKwkJRE1BX0JMT0NLKE1HQV9BUjAsIHN0YXJ0ICsgYm94LT54MiAtIDEsCisJCQkgIE1HQV9BUjMsIHN0YXJ0ICsgYm94LT54MSwKKwkJCSAgTUdBX0ZYQk5EUlksICgoYm94LT54MiAtIDEpIDw8IDE2KSB8IGJveC0+eDEsCisJCQkgIE1HQV9ZRFNUTEVOICsgTUdBX0VYRUMsIChib3gtPnkxIDw8IDE2KSB8IGhlaWdodCk7CiAJfQogCi0JRE1BX0JMT0NLKCBNR0FfRE1BUEFELAkweDAwMDAwMDAwLAotCQkgICBNR0FfUExOV1QsCWN0eC0+cGxud3QsCi0JCSAgIE1HQV9TUkNPUkcsCWRldl9wcml2LT5mcm9udF9vZmZzZXQsCi0JCSAgIE1HQV9EV0dDVEwsCWN0eC0+ZHdnY3RsICk7CisJRE1BX0JMT0NLKE1HQV9ETUFQQUQsIDB4MDAwMDAwMDAsCisJCSAgTUdBX1BMTldULCBjdHgtPnBsbnd0LAorCQkgIE1HQV9TUkNPUkcsIGRldl9wcml2LT5mcm9udF9vZmZzZXQsIE1HQV9EV0dDVEwsIGN0eC0+ZHdnY3RsKTsKIAogCUFEVkFOQ0VfRE1BKCk7CiAKIAlGTFVTSF9ETUEoKTsKIAotCURSTV9ERUJVRyggIiVzLi4uIGRvbmUuXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwlEUk1fREVCVUcoIiVzLi4uIGRvbmUuXG4iLCBfX0ZVTkNUSU9OX18pOwogfQogCi1zdGF0aWMgdm9pZCBtZ2FfZG1hX2Rpc3BhdGNoX3ZlcnRleCggZHJtX2RldmljZV90ICpkZXYsIGRybV9idWZfdCAqYnVmICkKK3N0YXRpYyB2b2lkIG1nYV9kbWFfZGlzcGF0Y2hfdmVydGV4KGRybV9kZXZpY2VfdCAqIGRldiwgZHJtX2J1Zl90ICogYnVmKQogewogCWRybV9tZ2FfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJZHJtX21nYV9idWZfcHJpdl90ICpidWZfcHJpdiA9IGJ1Zi0+ZGV2X3ByaXZhdGU7CkBAIC02NjksMjAgKzYzMSwyMCBAQAogCXUzMiBsZW5ndGggPSAodTMyKSBidWYtPnVzZWQ7CiAJaW50IGkgPSAwOwogCURNQV9MT0NBTFM7Ci0JRFJNX0RFQlVHKCAidmVydGV4OiBidWY9JWQgdXNlZD0lZFxuIiwgYnVmLT5pZHgsIGJ1Zi0+dXNlZCApOworCURSTV9ERUJVRygidmVydGV4OiBidWY9JWQgdXNlZD0lZFxuIiwgYnVmLT5pZHgsIGJ1Zi0+dXNlZCk7CiAKLQlpZiAoIGJ1Zi0+dXNlZCApIHsKKwlpZiAoYnVmLT51c2VkKSB7CiAJCWJ1Zl9wcml2LT5kaXNwYXRjaGVkID0gMTsKIAotCQlNR0FfRU1JVF9TVEFURSggZGV2X3ByaXYsIHNhcmVhX3ByaXYtPmRpcnR5ICk7CisJCU1HQV9FTUlUX1NUQVRFKGRldl9wcml2LCBzYXJlYV9wcml2LT5kaXJ0eSk7CiAKIAkJZG8gewotCQkJaWYgKCBpIDwgc2FyZWFfcHJpdi0+bmJveCApIHsKLQkJCQltZ2FfZW1pdF9jbGlwX3JlY3QoIGRldl9wcml2LAotCQkJCQkJICAgICZzYXJlYV9wcml2LT5ib3hlc1tpXSApOworCQkJaWYgKGkgPCBzYXJlYV9wcml2LT5uYm94KSB7CisJCQkJbWdhX2VtaXRfY2xpcF9yZWN0KGRldl9wcml2LAorCQkJCQkJICAgJnNhcmVhX3ByaXYtPmJveGVzW2ldKTsKIAkJCX0KIAotCQkJQkVHSU5fRE1BKCAxICk7CisJCQlCRUdJTl9ETUEoMSk7CiAKIAkJCURNQV9CTE9DSyhNR0FfRE1BUEFELCAweDAwMDAwMDAwLAogCQkJCSAgTUdBX0RNQVBBRCwgMHgwMDAwMDAwMCwKQEAgLTY5MiwyMyArNjU0LDIzIEBACiAJCQkJCSAgICAgICBkZXZfcHJpdi0+ZG1hX2FjY2VzcykpOwogCiAJCQlBRFZBTkNFX0RNQSgpOwotCQl9IHdoaWxlICggKytpIDwgc2FyZWFfcHJpdi0+bmJveCApOworCQl9IHdoaWxlICgrK2kgPCBzYXJlYV9wcml2LT5uYm94KTsKIAl9CiAKLQlpZiAoIGJ1Zl9wcml2LT5kaXNjYXJkICkgewotCQlBR0VfQlVGRkVSKCBidWZfcHJpdiApOworCWlmIChidWZfcHJpdi0+ZGlzY2FyZCkgeworCQlBR0VfQlVGRkVSKGJ1Zl9wcml2KTsKIAkJYnVmLT5wZW5kaW5nID0gMDsKIAkJYnVmLT51c2VkID0gMDsKIAkJYnVmX3ByaXYtPmRpc3BhdGNoZWQgPSAwOwogCi0JCW1nYV9mcmVlbGlzdF9wdXQoIGRldiwgYnVmICk7CisJCW1nYV9mcmVlbGlzdF9wdXQoZGV2LCBidWYpOwogCX0KIAogCUZMVVNIX0RNQSgpOwogfQogCi1zdGF0aWMgdm9pZCBtZ2FfZG1hX2Rpc3BhdGNoX2luZGljZXMoIGRybV9kZXZpY2VfdCAqZGV2LCBkcm1fYnVmX3QgKmJ1ZiwKLQkJCQkgICAgICB1bnNpZ25lZCBpbnQgc3RhcnQsIHVuc2lnbmVkIGludCBlbmQgKQorc3RhdGljIHZvaWQgbWdhX2RtYV9kaXNwYXRjaF9pbmRpY2VzKGRybV9kZXZpY2VfdCAqIGRldiwgZHJtX2J1Zl90ICogYnVmLAorCQkJCSAgICAgdW5zaWduZWQgaW50IHN0YXJ0LCB1bnNpZ25lZCBpbnQgZW5kKQogewogCWRybV9tZ2FfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJZHJtX21nYV9idWZfcHJpdl90ICpidWZfcHJpdiA9IGJ1Zi0+ZGV2X3ByaXZhdGU7CkBAIC03MTYsMjAgKzY3OCwyMCBAQAogCXUzMiBhZGRyZXNzID0gKHUzMikgYnVmLT5idXNfYWRkcmVzczsKIAlpbnQgaSA9IDA7CiAJRE1BX0xPQ0FMUzsKLQlEUk1fREVCVUcoICJpbmRpY2VzOiBidWY9JWQgc3RhcnQ9JWQgZW5kPSVkXG4iLCBidWYtPmlkeCwgc3RhcnQsIGVuZCApOworCURSTV9ERUJVRygiaW5kaWNlczogYnVmPSVkIHN0YXJ0PSVkIGVuZD0lZFxuIiwgYnVmLT5pZHgsIHN0YXJ0LCBlbmQpOwogCi0JaWYgKCBzdGFydCAhPSBlbmQgKSB7CisJaWYgKHN0YXJ0ICE9IGVuZCkgewogCQlidWZfcHJpdi0+ZGlzcGF0Y2hlZCA9IDE7CiAKLQkJTUdBX0VNSVRfU1RBVEUoIGRldl9wcml2LCBzYXJlYV9wcml2LT5kaXJ0eSApOworCQlNR0FfRU1JVF9TVEFURShkZXZfcHJpdiwgc2FyZWFfcHJpdi0+ZGlydHkpOwogCiAJCWRvIHsKLQkJCWlmICggaSA8IHNhcmVhX3ByaXYtPm5ib3ggKSB7Ci0JCQkJbWdhX2VtaXRfY2xpcF9yZWN0KCBkZXZfcHJpdiwKLQkJCQkJCSAgICAmc2FyZWFfcHJpdi0+Ym94ZXNbaV0gKTsKKwkJCWlmIChpIDwgc2FyZWFfcHJpdi0+bmJveCkgeworCQkJCW1nYV9lbWl0X2NsaXBfcmVjdChkZXZfcHJpdiwKKwkJCQkJCSAgICZzYXJlYV9wcml2LT5ib3hlc1tpXSk7CiAJCQl9CiAKLQkJCUJFR0lOX0RNQSggMSApOworCQkJQkVHSU5fRE1BKDEpOwogCiAJCQlETUFfQkxPQ0soTUdBX0RNQVBBRCwgMHgwMDAwMDAwMCwKIAkJCQkgIE1HQV9ETUFQQUQsIDB4MDAwMDAwMDAsCkBAIC03MzgsMTYgKzcwMCwxNiBAQAogCQkJCQkJIGRldl9wcml2LT5kbWFfYWNjZXNzKSk7CiAKIAkJCUFEVkFOQ0VfRE1BKCk7Ci0JCX0gd2hpbGUgKCArK2kgPCBzYXJlYV9wcml2LT5uYm94ICk7CisJCX0gd2hpbGUgKCsraSA8IHNhcmVhX3ByaXYtPm5ib3gpOwogCX0KIAotCWlmICggYnVmX3ByaXYtPmRpc2NhcmQgKSB7Ci0JCUFHRV9CVUZGRVIoIGJ1Zl9wcml2ICk7CisJaWYgKGJ1Zl9wcml2LT5kaXNjYXJkKSB7CisJCUFHRV9CVUZGRVIoYnVmX3ByaXYpOwogCQlidWYtPnBlbmRpbmcgPSAwOwogCQlidWYtPnVzZWQgPSAwOwogCQlidWZfcHJpdi0+ZGlzcGF0Y2hlZCA9IDA7CiAKLQkJbWdhX2ZyZWVsaXN0X3B1dCggZGV2LCBidWYgKTsKKwkJbWdhX2ZyZWVsaXN0X3B1dChkZXYsIGJ1Zik7CiAJfQogCiAJRkxVU0hfRE1BKCk7CkBAIC03NTYsNjEgKzcxOCw1NSBAQAogLyogVGhpcyBjb3BpZXMgYSA2NCBieXRlIGFsaWduZWQgYWdwIHJlZ2lvbiB0byB0aGUgZnJhbWJ1ZmZlciB3aXRoIGEKICAqIHN0YW5kYXJkIGJsaXQsIHRoZSBpb2N0bCBuZWVkcyB0byBkbyBjaGVja2luZy4KICAqLwotc3RhdGljIHZvaWQgbWdhX2RtYV9kaXNwYXRjaF9pbG9hZCggZHJtX2RldmljZV90ICpkZXYsIGRybV9idWZfdCAqYnVmLAotCQkJCSAgICB1bnNpZ25lZCBpbnQgZHN0b3JnLCB1bnNpZ25lZCBpbnQgbGVuZ3RoICkKK3N0YXRpYyB2b2lkIG1nYV9kbWFfZGlzcGF0Y2hfaWxvYWQoZHJtX2RldmljZV90ICogZGV2LCBkcm1fYnVmX3QgKiBidWYsCisJCQkJICAgdW5zaWduZWQgaW50IGRzdG9yZywgdW5zaWduZWQgaW50IGxlbmd0aCkKIHsKIAlkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWRybV9tZ2FfYnVmX3ByaXZfdCAqYnVmX3ByaXYgPSBidWYtPmRldl9wcml2YXRlOwogCWRybV9tZ2FfY29udGV4dF9yZWdzX3QgKmN0eCA9ICZkZXZfcHJpdi0+c2FyZWFfcHJpdi0+Y29udGV4dF9zdGF0ZTsKLQl1MzIgc3Jjb3JnID0gYnVmLT5idXNfYWRkcmVzcyB8IGRldl9wcml2LT5kbWFfYWNjZXNzIHwgTUdBX1NSQ01BUF9TWVNNRU07CisJdTMyIHNyY29yZyA9CisJICAgIGJ1Zi0+YnVzX2FkZHJlc3MgfCBkZXZfcHJpdi0+ZG1hX2FjY2VzcyB8IE1HQV9TUkNNQVBfU1lTTUVNOwogCXUzMiB5MjsKIAlETUFfTE9DQUxTOwotCURSTV9ERUJVRyggImJ1Zj0lZCB1c2VkPSVkXG4iLCBidWYtPmlkeCwgYnVmLT51c2VkICk7CisJRFJNX0RFQlVHKCJidWY9JWQgdXNlZD0lZFxuIiwgYnVmLT5pZHgsIGJ1Zi0+dXNlZCk7CiAKIAl5MiA9IGxlbmd0aCAvIDY0OwogCi0JQkVHSU5fRE1BKCA1ICk7CisJQkVHSU5fRE1BKDUpOwogCi0JRE1BX0JMT0NLKCBNR0FfRE1BUEFELAkweDAwMDAwMDAwLAotCQkgICBNR0FfRE1BUEFELAkweDAwMDAwMDAwLAotCQkgICBNR0FfRFdHU1lOQywJMHgwMDAwNzEwMCwKLQkJICAgTUdBX0RXR1NZTkMsCTB4MDAwMDcwMDAgKTsKKwlETUFfQkxPQ0soTUdBX0RNQVBBRCwgMHgwMDAwMDAwMCwKKwkJICBNR0FfRE1BUEFELCAweDAwMDAwMDAwLAorCQkgIE1HQV9EV0dTWU5DLCAweDAwMDA3MTAwLCBNR0FfRFdHU1lOQywgMHgwMDAwNzAwMCk7CiAKLQlETUFfQkxPQ0soIE1HQV9EU1RPUkcsCWRzdG9yZywKLQkJICAgTUdBX01BQ0NFU1MsCTB4MDAwMDAwMDAsCi0JCSAgIE1HQV9TUkNPUkcsCXNyY29yZywKLQkJICAgTUdBX0FSNSwJNjQgKTsKKwlETUFfQkxPQ0soTUdBX0RTVE9SRywgZHN0b3JnLAorCQkgIE1HQV9NQUNDRVNTLCAweDAwMDAwMDAwLCBNR0FfU1JDT1JHLCBzcmNvcmcsIE1HQV9BUjUsIDY0KTsKIAotCURNQV9CTE9DSyggTUdBX1BJVENILAk2NCwKLQkJICAgTUdBX1BMTldULAkweGZmZmZmZmZmLAotCQkgICBNR0FfRE1BUEFELAkweDAwMDAwMDAwLAotCQkgICBNR0FfRFdHQ1RMLAlNR0FfRFdHQ1RMX0NPUFkgKTsKKwlETUFfQkxPQ0soTUdBX1BJVENILCA2NCwKKwkJICBNR0FfUExOV1QsIDB4ZmZmZmZmZmYsCisJCSAgTUdBX0RNQVBBRCwgMHgwMDAwMDAwMCwgTUdBX0RXR0NUTCwgTUdBX0RXR0NUTF9DT1BZKTsKIAotCURNQV9CTE9DSyggTUdBX0FSMCwJNjMsCi0JCSAgIE1HQV9BUjMsCTAsCi0JCSAgIE1HQV9GWEJORFJZLAkoNjMgPDwgMTYpIHwgMCwKLQkJICAgTUdBX1lEU1RMRU4gKyBNR0FfRVhFQywgeTIgKTsKKwlETUFfQkxPQ0soTUdBX0FSMCwgNjMsCisJCSAgTUdBX0FSMywgMCwKKwkJICBNR0FfRlhCTkRSWSwgKDYzIDw8IDE2KSB8IDAsIE1HQV9ZRFNUTEVOICsgTUdBX0VYRUMsIHkyKTsKIAotCURNQV9CTE9DSyggTUdBX1BMTldULAljdHgtPnBsbnd0LAotCQkgICBNR0FfU1JDT1JHLAlkZXZfcHJpdi0+ZnJvbnRfb2Zmc2V0LAotCQkgICBNR0FfUElUQ0gsCWRldl9wcml2LT5mcm9udF9waXRjaCwKLQkJICAgTUdBX0RXR1NZTkMsCTB4MDAwMDcwMDAgKTsKKwlETUFfQkxPQ0soTUdBX1BMTldULCBjdHgtPnBsbnd0LAorCQkgIE1HQV9TUkNPUkcsIGRldl9wcml2LT5mcm9udF9vZmZzZXQsCisJCSAgTUdBX1BJVENILCBkZXZfcHJpdi0+ZnJvbnRfcGl0Y2gsIE1HQV9EV0dTWU5DLCAweDAwMDA3MDAwKTsKIAogCUFEVkFOQ0VfRE1BKCk7CiAKLQlBR0VfQlVGRkVSKCBidWZfcHJpdiApOworCUFHRV9CVUZGRVIoYnVmX3ByaXYpOwogCiAJYnVmLT5wZW5kaW5nID0gMDsKIAlidWYtPnVzZWQgPSAwOwogCWJ1Zl9wcml2LT5kaXNwYXRjaGVkID0gMDsKIAotCW1nYV9mcmVlbGlzdF9wdXQoIGRldiwgYnVmICk7CisJbWdhX2ZyZWVsaXN0X3B1dChkZXYsIGJ1Zik7CiAKIAlGTFVTSF9ETUEoKTsKIH0KIAotc3RhdGljIHZvaWQgbWdhX2RtYV9kaXNwYXRjaF9ibGl0KCBkcm1fZGV2aWNlX3QgKmRldiwKLQkJCQkgICBkcm1fbWdhX2JsaXRfdCAqYmxpdCApCitzdGF0aWMgdm9pZCBtZ2FfZG1hX2Rpc3BhdGNoX2JsaXQoZHJtX2RldmljZV90ICogZGV2LCBkcm1fbWdhX2JsaXRfdCAqIGJsaXQpCiB7CiAJZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlkcm1fbWdhX3NhcmVhX3QgKnNhcmVhX3ByaXYgPSBkZXZfcHJpdi0+c2FyZWFfcHJpdjsKQEAgLTgxOSwyNiArNzc1LDI0IEBACiAJaW50IG5ib3ggPSBzYXJlYV9wcml2LT5uYm94OwogCXUzMiBzY2FuZGlyID0gMCwgaTsKIAlETUFfTE9DQUxTOwotCURSTV9ERUJVRyggIlxuIiApOworCURSTV9ERUJVRygiXG4iKTsKIAotCUJFR0lOX0RNQSggNCArIG5ib3ggKTsKKwlCRUdJTl9ETUEoNCArIG5ib3gpOwogCi0JRE1BX0JMT0NLKCBNR0FfRE1BUEFELAkweDAwMDAwMDAwLAotCQkgICBNR0FfRE1BUEFELAkweDAwMDAwMDAwLAotCQkgICBNR0FfRFdHU1lOQywJMHgwMDAwNzEwMCwKLQkJICAgTUdBX0RXR1NZTkMsCTB4MDAwMDcwMDAgKTsKKwlETUFfQkxPQ0soTUdBX0RNQVBBRCwgMHgwMDAwMDAwMCwKKwkJICBNR0FfRE1BUEFELCAweDAwMDAwMDAwLAorCQkgIE1HQV9EV0dTWU5DLCAweDAwMDA3MTAwLCBNR0FfRFdHU1lOQywgMHgwMDAwNzAwMCk7CiAKLQlETUFfQkxPQ0soIE1HQV9EV0dDVEwsCU1HQV9EV0dDVExfQ09QWSwKLQkJICAgTUdBX1BMTldULAlibGl0LT5wbGFuZW1hc2ssCi0JCSAgIE1HQV9TUkNPUkcsCWJsaXQtPnNyY29yZywKLQkJICAgTUdBX0RTVE9SRywJYmxpdC0+ZHN0b3JnICk7CisJRE1BX0JMT0NLKE1HQV9EV0dDVEwsIE1HQV9EV0dDVExfQ09QWSwKKwkJICBNR0FfUExOV1QsIGJsaXQtPnBsYW5lbWFzaywKKwkJICBNR0FfU1JDT1JHLCBibGl0LT5zcmNvcmcsIE1HQV9EU1RPUkcsIGJsaXQtPmRzdG9yZyk7CiAKLQlETUFfQkxPQ0soIE1HQV9TR04sCXNjYW5kaXIsCi0JCSAgIE1HQV9NQUNDRVNTLAlkZXZfcHJpdi0+bWFjY2VzcywKLQkJICAgTUdBX0FSNSwJYmxpdC0+eWRpciAqIGJsaXQtPnNyY19waXRjaCwKLQkJICAgTUdBX1BJVENILAlibGl0LT5kc3RfcGl0Y2ggKTsKKwlETUFfQkxPQ0soTUdBX1NHTiwgc2NhbmRpciwKKwkJICBNR0FfTUFDQ0VTUywgZGV2X3ByaXYtPm1hY2Nlc3MsCisJCSAgTUdBX0FSNSwgYmxpdC0+eWRpciAqIGJsaXQtPnNyY19waXRjaCwKKwkJICBNR0FfUElUQ0gsIGJsaXQtPmRzdF9waXRjaCk7CiAKLQlmb3IgKCBpID0gMCA7IGkgPCBuYm94IDsgaSsrICkgeworCWZvciAoaSA9IDA7IGkgPCBuYm94OyBpKyspIHsKIAkJaW50IHNyY3ggPSBwYm94W2ldLngxICsgYmxpdC0+ZGVsdGFfc3g7CiAJCWludCBzcmN5ID0gcGJveFtpXS55MSArIGJsaXQtPmRlbHRhX3N5OwogCQlpbnQgZHN0eCA9IHBib3hbaV0ueDEgKyBibGl0LT5kZWx0YV9keDsKQEAgLTg0Nyw1MiArODAxLDUxIEBACiAJCWludCB3ID0gcGJveFtpXS54MiAtIHBib3hbaV0ueDEgLSAxOwogCQlpbnQgc3RhcnQ7CiAKLQkJaWYgKCBibGl0LT55ZGlyID09IC0xICkgeworCQlpZiAoYmxpdC0+eWRpciA9PSAtMSkgewogCQkJc3JjeSA9IGJsaXQtPmhlaWdodCAtIHNyY3kgLSAxOwogCQl9CiAKIAkJc3RhcnQgPSBzcmN5ICogYmxpdC0+c3JjX3BpdGNoICsgc3JjeDsKIAotCQlETUFfQkxPQ0soIE1HQV9BUjAsCXN0YXJ0ICsgdywKLQkJCSAgIE1HQV9BUjMsCXN0YXJ0LAotCQkJICAgTUdBX0ZYQk5EUlksCSgoZHN0eCArIHcpIDw8IDE2KSB8IChkc3R4ICYgMHhmZmZmKSwKLQkJCSAgIE1HQV9ZRFNUTEVOICsgTUdBX0VYRUMsIChkc3R5IDw8IDE2KSB8IGggKTsKKwkJRE1BX0JMT0NLKE1HQV9BUjAsIHN0YXJ0ICsgdywKKwkJCSAgTUdBX0FSMywgc3RhcnQsCisJCQkgIE1HQV9GWEJORFJZLCAoKGRzdHggKyB3KSA8PCAxNikgfCAoZHN0eCAmIDB4ZmZmZiksCisJCQkgIE1HQV9ZRFNUTEVOICsgTUdBX0VYRUMsIChkc3R5IDw8IDE2KSB8IGgpOwogCX0KIAogCS8qIERvIHNvbWV0aGluZyB0byBmbHVzaCBBR1A/CiAJICovCiAKIAkvKiBGb3JjZSByZXNldCBvZiBEV0dDVEwgKi8KLQlETUFfQkxPQ0soIE1HQV9ETUFQQUQsCTB4MDAwMDAwMDAsCi0JCSAgIE1HQV9QTE5XVCwJY3R4LT5wbG53dCwKLQkJICAgTUdBX1BJVENILAlkZXZfcHJpdi0+ZnJvbnRfcGl0Y2gsCi0JCSAgIE1HQV9EV0dDVEwsCWN0eC0+ZHdnY3RsICk7CisJRE1BX0JMT0NLKE1HQV9ETUFQQUQsIDB4MDAwMDAwMDAsCisJCSAgTUdBX1BMTldULCBjdHgtPnBsbnd0LAorCQkgIE1HQV9QSVRDSCwgZGV2X3ByaXYtPmZyb250X3BpdGNoLCBNR0FfRFdHQ1RMLCBjdHgtPmR3Z2N0bCk7CiAKIAlBRFZBTkNFX0RNQSgpOwogfQogCi0KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqCiAgKi8KIAotc3RhdGljIGludCBtZ2FfZG1hX2NsZWFyKCBEUk1fSU9DVExfQVJHUyApCitzdGF0aWMgaW50IG1nYV9kbWFfY2xlYXIoRFJNX0lPQ1RMX0FSR1MpCiB7CiAJRFJNX0RFVklDRTsKIAlkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWRybV9tZ2Ffc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9wcml2OwogCWRybV9tZ2FfY2xlYXJfdCBjbGVhcjsKIAotCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTiggZGV2LCBmaWxwICk7CisJTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlscCk7CiAKLQlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwoIGNsZWFyLCAoZHJtX21nYV9jbGVhcl90IF9fdXNlciAqKWRhdGEsIHNpemVvZihjbGVhcikgKTsKKwlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwoY2xlYXIsIChkcm1fbWdhX2NsZWFyX3QgX191c2VyICopIGRhdGEsCisJCQkJIHNpemVvZihjbGVhcikpOwogCi0JaWYgKCBzYXJlYV9wcml2LT5uYm94ID4gTUdBX05SX1NBUkVBX0NMSVBSRUNUUyApCisJaWYgKHNhcmVhX3ByaXYtPm5ib3ggPiBNR0FfTlJfU0FSRUFfQ0xJUFJFQ1RTKQogCQlzYXJlYV9wcml2LT5uYm94ID0gTUdBX05SX1NBUkVBX0NMSVBSRUNUUzsKIAotCVdSQVBfVEVTVF9XSVRIX1JFVFVSTiggZGV2X3ByaXYgKTsKKwlXUkFQX1RFU1RfV0lUSF9SRVRVUk4oZGV2X3ByaXYpOwogCi0JbWdhX2RtYV9kaXNwYXRjaF9jbGVhciggZGV2LCAmY2xlYXIgKTsKKwltZ2FfZG1hX2Rpc3BhdGNoX2NsZWFyKGRldiwgJmNsZWFyKTsKIAogCS8qIE1ha2Ugc3VyZSB3ZSByZXN0b3JlIHRoZSAzRCBzdGF0ZSBuZXh0IHRpbWUuCiAJICovCkBAIC05MDEsMjAgKzg1NCwyMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG1nYV9kbWFfc3dhcCggRFJNX0lPQ1RMX0FSR1MgKQorc3RhdGljIGludCBtZ2FfZG1hX3N3YXAoRFJNX0lPQ1RMX0FSR1MpCiB7CiAJRFJNX0RFVklDRTsKIAlkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWRybV9tZ2Ffc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9wcml2OwogCi0JTE9DS19URVNUX1dJVEhfUkVUVVJOKCBkZXYsIGZpbHAgKTsKKwlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxwKTsKIAotCWlmICggc2FyZWFfcHJpdi0+bmJveCA+IE1HQV9OUl9TQVJFQV9DTElQUkVDVFMgKQorCWlmIChzYXJlYV9wcml2LT5uYm94ID4gTUdBX05SX1NBUkVBX0NMSVBSRUNUUykKIAkJc2FyZWFfcHJpdi0+bmJveCA9IE1HQV9OUl9TQVJFQV9DTElQUkVDVFM7CiAKLQlXUkFQX1RFU1RfV0lUSF9SRVRVUk4oIGRldl9wcml2ICk7CisJV1JBUF9URVNUX1dJVEhfUkVUVVJOKGRldl9wcml2KTsKIAotCW1nYV9kbWFfZGlzcGF0Y2hfc3dhcCggZGV2ICk7CisJbWdhX2RtYV9kaXNwYXRjaF9zd2FwKGRldik7CiAKIAkvKiBNYWtlIHN1cmUgd2UgcmVzdG9yZSB0aGUgM0Qgc3RhdGUgbmV4dCB0aW1lLgogCSAqLwpAQCAtOTIzLDcgKzg3Niw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbWdhX2RtYV92ZXJ0ZXgoIERSTV9JT0NUTF9BUkdTICkKK3N0YXRpYyBpbnQgbWdhX2RtYV92ZXJ0ZXgoRFJNX0lPQ1RMX0FSR1MpCiB7CiAJRFJNX0RFVklDRTsKIAlkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwpAQCAtOTMyLDM3ICs4ODUsMzggQEAKIAlkcm1fbWdhX2J1Zl9wcml2X3QgKmJ1Zl9wcml2OwogCWRybV9tZ2FfdmVydGV4X3QgdmVydGV4OwogCi0JTE9DS19URVNUX1dJVEhfUkVUVVJOKCBkZXYsIGZpbHAgKTsKKwlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxwKTsKIAotCURSTV9DT1BZX0ZST01fVVNFUl9JT0NUTCggdmVydGV4LAotCQkJICAgICAoZHJtX21nYV92ZXJ0ZXhfdCBfX3VzZXIgKilkYXRhLAotCQkJICAgICBzaXplb2YodmVydGV4KSApOworCURSTV9DT1BZX0ZST01fVVNFUl9JT0NUTCh2ZXJ0ZXgsCisJCQkJIChkcm1fbWdhX3ZlcnRleF90IF9fdXNlciAqKSBkYXRhLAorCQkJCSBzaXplb2YodmVydGV4KSk7CiAKLSAgICAgICAgaWYodmVydGV4LmlkeCA8IDAgfHwgdmVydGV4LmlkeCA+IGRtYS0+YnVmX2NvdW50KSByZXR1cm4gRFJNX0VSUihFSU5WQUwpOworCWlmICh2ZXJ0ZXguaWR4IDwgMCB8fCB2ZXJ0ZXguaWR4ID4gZG1hLT5idWZfY291bnQpCisJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiAJYnVmID0gZG1hLT5idWZsaXN0W3ZlcnRleC5pZHhdOwogCWJ1Zl9wcml2ID0gYnVmLT5kZXZfcHJpdmF0ZTsKIAogCWJ1Zi0+dXNlZCA9IHZlcnRleC51c2VkOwogCWJ1Zl9wcml2LT5kaXNjYXJkID0gdmVydGV4LmRpc2NhcmQ7CiAKLQlpZiAoICFtZ2FfdmVyaWZ5X3N0YXRlKCBkZXZfcHJpdiApICkgewotCQlpZiAoIHZlcnRleC5kaXNjYXJkICkgewotCQkJaWYgKCBidWZfcHJpdi0+ZGlzcGF0Y2hlZCA9PSAxICkKLQkJCQlBR0VfQlVGRkVSKCBidWZfcHJpdiApOworCWlmICghbWdhX3ZlcmlmeV9zdGF0ZShkZXZfcHJpdikpIHsKKwkJaWYgKHZlcnRleC5kaXNjYXJkKSB7CisJCQlpZiAoYnVmX3ByaXYtPmRpc3BhdGNoZWQgPT0gMSkKKwkJCQlBR0VfQlVGRkVSKGJ1Zl9wcml2KTsKIAkJCWJ1Zl9wcml2LT5kaXNwYXRjaGVkID0gMDsKLQkJCW1nYV9mcmVlbGlzdF9wdXQoIGRldiwgYnVmICk7CisJCQltZ2FfZnJlZWxpc3RfcHV0KGRldiwgYnVmKTsKIAkJfQogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCX0KIAotCVdSQVBfVEVTVF9XSVRIX1JFVFVSTiggZGV2X3ByaXYgKTsKKwlXUkFQX1RFU1RfV0lUSF9SRVRVUk4oZGV2X3ByaXYpOwogCi0JbWdhX2RtYV9kaXNwYXRjaF92ZXJ0ZXgoIGRldiwgYnVmICk7CisJbWdhX2RtYV9kaXNwYXRjaF92ZXJ0ZXgoZGV2LCBidWYpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbWdhX2RtYV9pbmRpY2VzKCBEUk1fSU9DVExfQVJHUyApCitzdGF0aWMgaW50IG1nYV9kbWFfaW5kaWNlcyhEUk1fSU9DVExfQVJHUykKIHsKIAlEUk1fREVWSUNFOwogCWRybV9tZ2FfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CkBAIC05NzEsMzcgKzkyNSwzOCBAQAogCWRybV9tZ2FfYnVmX3ByaXZfdCAqYnVmX3ByaXY7CiAJZHJtX21nYV9pbmRpY2VzX3QgaW5kaWNlczsKIAotCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTiggZGV2LCBmaWxwICk7CisJTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlscCk7CiAKLQlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwoIGluZGljZXMsCi0JCQkgICAgIChkcm1fbWdhX2luZGljZXNfdCBfX3VzZXIgKilkYXRhLAotCQkJICAgICBzaXplb2YoaW5kaWNlcykgKTsKKwlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwoaW5kaWNlcywKKwkJCQkgKGRybV9tZ2FfaW5kaWNlc190IF9fdXNlciAqKSBkYXRhLAorCQkJCSBzaXplb2YoaW5kaWNlcykpOwogCi0gICAgICAgIGlmKGluZGljZXMuaWR4IDwgMCB8fCBpbmRpY2VzLmlkeCA+IGRtYS0+YnVmX2NvdW50KSByZXR1cm4gRFJNX0VSUihFSU5WQUwpOworCWlmIChpbmRpY2VzLmlkeCA8IDAgfHwgaW5kaWNlcy5pZHggPiBkbWEtPmJ1Zl9jb3VudCkKKwkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAogCWJ1ZiA9IGRtYS0+YnVmbGlzdFtpbmRpY2VzLmlkeF07CiAJYnVmX3ByaXYgPSBidWYtPmRldl9wcml2YXRlOwogCiAJYnVmX3ByaXYtPmRpc2NhcmQgPSBpbmRpY2VzLmRpc2NhcmQ7CiAKLQlpZiAoICFtZ2FfdmVyaWZ5X3N0YXRlKCBkZXZfcHJpdiApICkgewotCQlpZiAoIGluZGljZXMuZGlzY2FyZCApIHsKLQkJCWlmICggYnVmX3ByaXYtPmRpc3BhdGNoZWQgPT0gMSApCi0JCQkJQUdFX0JVRkZFUiggYnVmX3ByaXYgKTsKKwlpZiAoIW1nYV92ZXJpZnlfc3RhdGUoZGV2X3ByaXYpKSB7CisJCWlmIChpbmRpY2VzLmRpc2NhcmQpIHsKKwkJCWlmIChidWZfcHJpdi0+ZGlzcGF0Y2hlZCA9PSAxKQorCQkJCUFHRV9CVUZGRVIoYnVmX3ByaXYpOwogCQkJYnVmX3ByaXYtPmRpc3BhdGNoZWQgPSAwOwotCQkJbWdhX2ZyZWVsaXN0X3B1dCggZGV2LCBidWYgKTsKKwkJCW1nYV9mcmVlbGlzdF9wdXQoZGV2LCBidWYpOwogCQl9CiAJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiAJfQogCi0JV1JBUF9URVNUX1dJVEhfUkVUVVJOKCBkZXZfcHJpdiApOworCVdSQVBfVEVTVF9XSVRIX1JFVFVSTihkZXZfcHJpdik7CiAKLQltZ2FfZG1hX2Rpc3BhdGNoX2luZGljZXMoIGRldiwgYnVmLCBpbmRpY2VzLnN0YXJ0LCBpbmRpY2VzLmVuZCApOworCW1nYV9kbWFfZGlzcGF0Y2hfaW5kaWNlcyhkZXYsIGJ1ZiwgaW5kaWNlcy5zdGFydCwgaW5kaWNlcy5lbmQpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbWdhX2RtYV9pbG9hZCggRFJNX0lPQ1RMX0FSR1MgKQorc3RhdGljIGludCBtZ2FfZG1hX2lsb2FkKERSTV9JT0NUTF9BUkdTKQogewogCURSTV9ERVZJQ0U7CiAJZHJtX2RldmljZV9kbWFfdCAqZG1hID0gZGV2LT5kbWE7CkBAIC0xMDA5LDMyICs5NjQsMzQgQEAKIAlkcm1fYnVmX3QgKmJ1ZjsKIAlkcm1fbWdhX2J1Zl9wcml2X3QgKmJ1Zl9wcml2OwogCWRybV9tZ2FfaWxvYWRfdCBpbG9hZDsKLQlEUk1fREVCVUcoICJcbiIgKTsKKwlEUk1fREVCVUcoIlxuIik7CiAKLQlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oIGRldiwgZmlscCApOworCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbHApOwogCi0JRFJNX0NPUFlfRlJPTV9VU0VSX0lPQ1RMKCBpbG9hZCwgKGRybV9tZ2FfaWxvYWRfdCBfX3VzZXIgKilkYXRhLCBzaXplb2YoaWxvYWQpICk7CisJRFJNX0NPUFlfRlJPTV9VU0VSX0lPQ1RMKGlsb2FkLCAoZHJtX21nYV9pbG9hZF90IF9fdXNlciAqKSBkYXRhLAorCQkJCSBzaXplb2YoaWxvYWQpKTsKIAogI2lmIDAKLQlpZiAoIG1nYV9kb193YWl0X2Zvcl9pZGxlKCBkZXZfcHJpdiApIDwgMCApIHsKLQkJaWYgKCBNR0FfRE1BX0RFQlVHICkKLQkJCURSTV9JTkZPKCAiJXM6IC1FQlVTWVxuIiwgX19GVU5DVElPTl9fICk7CisJaWYgKG1nYV9kb193YWl0X2Zvcl9pZGxlKGRldl9wcml2KSA8IDApIHsKKwkJaWYgKE1HQV9ETUFfREVCVUcpCisJCQlEUk1fSU5GTygiJXM6IC1FQlVTWVxuIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIERSTV9FUlIoRUJVU1kpOwogCX0KICNlbmRpZgotICAgICAgICBpZihpbG9hZC5pZHggPCAwIHx8IGlsb2FkLmlkeCA+IGRtYS0+YnVmX2NvdW50KSByZXR1cm4gRFJNX0VSUihFSU5WQUwpOworCWlmIChpbG9hZC5pZHggPCAwIHx8IGlsb2FkLmlkeCA+IGRtYS0+YnVmX2NvdW50KQorCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCiAJYnVmID0gZG1hLT5idWZsaXN0W2lsb2FkLmlkeF07CiAJYnVmX3ByaXYgPSBidWYtPmRldl9wcml2YXRlOwogCi0JaWYgKCBtZ2FfdmVyaWZ5X2lsb2FkKCBkZXZfcHJpdiwgaWxvYWQuZHN0b3JnLCBpbG9hZC5sZW5ndGggKSApIHsKLQkJbWdhX2ZyZWVsaXN0X3B1dCggZGV2LCBidWYgKTsKKwlpZiAobWdhX3ZlcmlmeV9pbG9hZChkZXZfcHJpdiwgaWxvYWQuZHN0b3JnLCBpbG9hZC5sZW5ndGgpKSB7CisJCW1nYV9mcmVlbGlzdF9wdXQoZGV2LCBidWYpOwogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCX0KIAotCVdSQVBfVEVTVF9XSVRIX1JFVFVSTiggZGV2X3ByaXYgKTsKKwlXUkFQX1RFU1RfV0lUSF9SRVRVUk4oZGV2X3ByaXYpOwogCi0JbWdhX2RtYV9kaXNwYXRjaF9pbG9hZCggZGV2LCBidWYsIGlsb2FkLmRzdG9yZywgaWxvYWQubGVuZ3RoICk7CisJbWdhX2RtYV9kaXNwYXRjaF9pbG9hZChkZXYsIGJ1ZiwgaWxvYWQuZHN0b3JnLCBpbG9hZC5sZW5ndGgpOwogCiAJLyogTWFrZSBzdXJlIHdlIHJlc3RvcmUgdGhlIDNEIHN0YXRlIG5leHQgdGltZS4KIAkgKi8KQEAgLTEwNDMsMjcgKzEwMDAsMjggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtZ2FfZG1hX2JsaXQoIERSTV9JT0NUTF9BUkdTICkKK3N0YXRpYyBpbnQgbWdhX2RtYV9ibGl0KERSTV9JT0NUTF9BUkdTKQogewogCURSTV9ERVZJQ0U7CiAJZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlkcm1fbWdhX3NhcmVhX3QgKnNhcmVhX3ByaXYgPSBkZXZfcHJpdi0+c2FyZWFfcHJpdjsKIAlkcm1fbWdhX2JsaXRfdCBibGl0OwotCURSTV9ERUJVRyggIlxuIiApOworCURSTV9ERUJVRygiXG4iKTsKIAotCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTiggZGV2LCBmaWxwICk7CisJTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlscCk7CiAKLQlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwoIGJsaXQsIChkcm1fbWdhX2JsaXRfdCBfX3VzZXIgKilkYXRhLCBzaXplb2YoYmxpdCkgKTsKKwlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwoYmxpdCwgKGRybV9tZ2FfYmxpdF90IF9fdXNlciAqKSBkYXRhLAorCQkJCSBzaXplb2YoYmxpdCkpOwogCi0JaWYgKCBzYXJlYV9wcml2LT5uYm94ID4gTUdBX05SX1NBUkVBX0NMSVBSRUNUUyApCisJaWYgKHNhcmVhX3ByaXYtPm5ib3ggPiBNR0FfTlJfU0FSRUFfQ0xJUFJFQ1RTKQogCQlzYXJlYV9wcml2LT5uYm94ID0gTUdBX05SX1NBUkVBX0NMSVBSRUNUUzsKIAotCWlmICggbWdhX3ZlcmlmeV9ibGl0KCBkZXZfcHJpdiwgYmxpdC5zcmNvcmcsIGJsaXQuZHN0b3JnICkgKQorCWlmIChtZ2FfdmVyaWZ5X2JsaXQoZGV2X3ByaXYsIGJsaXQuc3Jjb3JnLCBibGl0LmRzdG9yZykpCiAJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiAKLQlXUkFQX1RFU1RfV0lUSF9SRVRVUk4oIGRldl9wcml2ICk7CisJV1JBUF9URVNUX1dJVEhfUkVUVVJOKGRldl9wcml2KTsKIAotCW1nYV9kbWFfZGlzcGF0Y2hfYmxpdCggZGV2LCAmYmxpdCApOworCW1nYV9kbWFfZGlzcGF0Y2hfYmxpdChkZXYsICZibGl0KTsKIAogCS8qIE1ha2Ugc3VyZSB3ZSByZXN0b3JlIHRoZSAzRCBzdGF0ZSBuZXh0IHRpbWUuCiAJICovCkBAIC0xMDcyLDI0ICsxMDMwLDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbWdhX2dldHBhcmFtKCBEUk1fSU9DVExfQVJHUyApCitzdGF0aWMgaW50IG1nYV9nZXRwYXJhbShEUk1fSU9DVExfQVJHUykKIHsKIAlEUk1fREVWSUNFOwogCWRybV9tZ2FfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJZHJtX21nYV9nZXRwYXJhbV90IHBhcmFtOwogCWludCB2YWx1ZTsKIAotCWlmICggIWRldl9wcml2ICkgewotCQlEUk1fRVJST1IoICIlcyBjYWxsZWQgd2l0aCBubyBpbml0aWFsaXphdGlvblxuIiwgX19GVU5DVElPTl9fICk7CisJaWYgKCFkZXZfcHJpdikgeworCQlEUk1fRVJST1IoIiVzIGNhbGxlZCB3aXRoIG5vIGluaXRpYWxpemF0aW9uXG4iLCBfX0ZVTkNUSU9OX18pOwogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCX0KIAotCURSTV9DT1BZX0ZST01fVVNFUl9JT0NUTCggcGFyYW0sIChkcm1fbWdhX2dldHBhcmFtX3QgX191c2VyICopZGF0YSwKLQkJCSAgICAgc2l6ZW9mKHBhcmFtKSApOworCURSTV9DT1BZX0ZST01fVVNFUl9JT0NUTChwYXJhbSwgKGRybV9tZ2FfZ2V0cGFyYW1fdCBfX3VzZXIgKikgZGF0YSwKKwkJCQkgc2l6ZW9mKHBhcmFtKSk7CiAKLQlEUk1fREVCVUcoICJwaWQ9JWRcbiIsIERSTV9DVVJSRU5UUElEICk7CisJRFJNX0RFQlVHKCJwaWQ9JWRcbiIsIERSTV9DVVJSRU5UUElEKTsKIAotCXN3aXRjaCggcGFyYW0ucGFyYW0gKSB7CisJc3dpdGNoIChwYXJhbS5wYXJhbSkgewogCWNhc2UgTUdBX1BBUkFNX0lSUV9OUjoKIAkJdmFsdWUgPSBkZXYtPmlycTsKIAkJYnJlYWs7CkBAIC0xMTAwLDExICsxMDU4LDExIEBACiAJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiAJfQogCi0JaWYgKCBEUk1fQ09QWV9UT19VU0VSKCBwYXJhbS52YWx1ZSwgJnZhbHVlLCBzaXplb2YoaW50KSApICkgewotCQlEUk1fRVJST1IoICJjb3B5X3RvX3VzZXJcbiIgKTsKKwlpZiAoRFJNX0NPUFlfVE9fVVNFUihwYXJhbS52YWx1ZSwgJnZhbHVlLCBzaXplb2YoaW50KSkpIHsKKwkJRFJNX0VSUk9SKCJjb3B5X3RvX3VzZXJcbiIpOwogCQlyZXR1cm4gRFJNX0VSUihFRkFVTFQpOwogCX0KLQkKKwogCXJldHVybiAwOwogfQogCkBAIC0xMTMyLDExICsxMDkwLDEwIEBACiAJQkVHSU5fRE1BKDEpOwogCURNQV9CTE9DSyhNR0FfRE1BUEFELCAweDAwMDAwMDAwLAogCQkgIE1HQV9ETUFQQUQsIDB4MDAwMDAwMDAsCi0JCSAgTUdBX0RNQVBBRCwgMHgwMDAwMDAwMCwKLQkJICBNR0FfU09GVFJBUCwgMHgwMDAwMDAwMCk7CisJCSAgTUdBX0RNQVBBRCwgMHgwMDAwMDAwMCwgTUdBX1NPRlRSQVAsIDB4MDAwMDAwMDApOwogCUFEVkFOQ0VfRE1BKCk7CiAKLQlpZiAoRFJNX0NPUFlfVE9fVVNFUiggKHUzMiBfX3VzZXIgKikgZGF0YSwgJiB0ZW1wLCBzaXplb2YodTMyKSkpIHsKKwlpZiAoRFJNX0NPUFlfVE9fVVNFUigodTMyIF9fdXNlciAqKSBkYXRhLCAmdGVtcCwgc2l6ZW9mKHUzMikpKSB7CiAJCURSTV9FUlJPUigiY29weV90b191c2VyXG4iKTsKIAkJcmV0dXJuIERSTV9FUlIoRUZBVUxUKTsKIAl9CkBAIC0xMTU5LDkgKzExMTYsOSBAQAogCiAJRFJNX0RFQlVHKCJwaWQ9JWRcbiIsIERSTV9DVVJSRU5UUElEKTsKIAotCW1nYV9kcml2ZXJfZmVuY2Vfd2FpdChkZXYsICYgZmVuY2UpOworCW1nYV9kcml2ZXJfZmVuY2Vfd2FpdChkZXYsICZmZW5jZSk7CiAKLQlpZiAoRFJNX0NPUFlfVE9fVVNFUiggKHUzMiBfX3VzZXIgKikgZGF0YSwgJiBmZW5jZSwgc2l6ZW9mKHUzMikpKSB7CisJaWYgKERSTV9DT1BZX1RPX1VTRVIoKHUzMiBfX3VzZXIgKikgZGF0YSwgJmZlbmNlLCBzaXplb2YodTMyKSkpIHsKIAkJRFJNX0VSUk9SKCJjb3B5X3RvX3VzZXJcbiIpOwogCQlyZXR1cm4gRFJNX0VSUihFRkFVTFQpOwogCX0KQEAgLTExNzAsMTkgKzExMjcsMzIgQEAKIH0KIAogZHJtX2lvY3RsX2Rlc2NfdCBtZ2FfaW9jdGxzW10gPSB7Ci0JW0RSTV9JT0NUTF9OUihEUk1fTUdBX0lOSVQpXSA9IHttZ2FfZG1hX2luaXQsIDEsIDF9LAotCVtEUk1fSU9DVExfTlIoRFJNX01HQV9GTFVTSCldID0ge21nYV9kbWFfZmx1c2gsIDEsIDB9LAotCVtEUk1fSU9DVExfTlIoRFJNX01HQV9SRVNFVCldID0ge21nYV9kbWFfcmVzZXQsIDEsIDB9LAotCVtEUk1fSU9DVExfTlIoRFJNX01HQV9TV0FQKV0gPSB7bWdhX2RtYV9zd2FwLCAxLCAwfSwKLQlbRFJNX0lPQ1RMX05SKERSTV9NR0FfQ0xFQVIpXSA9IHttZ2FfZG1hX2NsZWFyLCAxLCAwfSwKLQlbRFJNX0lPQ1RMX05SKERSTV9NR0FfVkVSVEVYKV0gPSB7bWdhX2RtYV92ZXJ0ZXgsIDEsIDB9LAotCVtEUk1fSU9DVExfTlIoRFJNX01HQV9JTkRJQ0VTKV0gPSB7bWdhX2RtYV9pbmRpY2VzLCAxLCAwfSwKLQlbRFJNX0lPQ1RMX05SKERSTV9NR0FfSUxPQUQpXSA9IHttZ2FfZG1hX2lsb2FkLCAxLCAwfSwKLQlbRFJNX0lPQ1RMX05SKERSTV9NR0FfQkxJVCldID0ge21nYV9kbWFfYmxpdCwgMSwgMH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fTUdBX0dFVFBBUkFNKV0gPSB7bWdhX2dldHBhcmFtLCAxLCAwfSwKLQlbRFJNX0lPQ1RMX05SKERSTV9NR0FfU0VUX0ZFTkNFKV0gPSB7bWdhX3NldF9mZW5jZSwgMSwgMH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fTUdBX1dBSVRfRkVOQ0UpXSA9IHttZ2Ffd2FpdF9mZW5jZSwgMSwgMH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fTUdBX0RNQV9CT09UU1RSQVApXSA9IHttZ2FfZG1hX2Jvb3RzdHJhcCwgMSwgMX0sCisJW0RSTV9JT0NUTF9OUihEUk1fTUdBX0lOSVQpXSA9IHttZ2FfZG1hX2luaXQsIDEsIDF9CisJLAorCVtEUk1fSU9DVExfTlIoRFJNX01HQV9GTFVTSCldID0ge21nYV9kbWFfZmx1c2gsIDEsIDB9CisJLAorCVtEUk1fSU9DVExfTlIoRFJNX01HQV9SRVNFVCldID0ge21nYV9kbWFfcmVzZXQsIDEsIDB9CisJLAorCVtEUk1fSU9DVExfTlIoRFJNX01HQV9TV0FQKV0gPSB7bWdhX2RtYV9zd2FwLCAxLCAwfQorCSwKKwlbRFJNX0lPQ1RMX05SKERSTV9NR0FfQ0xFQVIpXSA9IHttZ2FfZG1hX2NsZWFyLCAxLCAwfQorCSwKKwlbRFJNX0lPQ1RMX05SKERSTV9NR0FfVkVSVEVYKV0gPSB7bWdhX2RtYV92ZXJ0ZXgsIDEsIDB9CisJLAorCVtEUk1fSU9DVExfTlIoRFJNX01HQV9JTkRJQ0VTKV0gPSB7bWdhX2RtYV9pbmRpY2VzLCAxLCAwfQorCSwKKwlbRFJNX0lPQ1RMX05SKERSTV9NR0FfSUxPQUQpXSA9IHttZ2FfZG1hX2lsb2FkLCAxLCAwfQorCSwKKwlbRFJNX0lPQ1RMX05SKERSTV9NR0FfQkxJVCldID0ge21nYV9kbWFfYmxpdCwgMSwgMH0KKwksCisJW0RSTV9JT0NUTF9OUihEUk1fTUdBX0dFVFBBUkFNKV0gPSB7bWdhX2dldHBhcmFtLCAxLCAwfQorCSwKKwlbRFJNX0lPQ1RMX05SKERSTV9NR0FfU0VUX0ZFTkNFKV0gPSB7bWdhX3NldF9mZW5jZSwgMSwgMH0KKwksCisJW0RSTV9JT0NUTF9OUihEUk1fTUdBX1dBSVRfRkVOQ0UpXSA9IHttZ2Ffd2FpdF9mZW5jZSwgMSwgMH0KKwksCisJW0RSTV9JT0NUTF9OUihEUk1fTUdBX0RNQV9CT09UU1RSQVApXSA9IHttZ2FfZG1hX2Jvb3RzdHJhcCwgMSwgMX0KKwksCiAKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vbWdhX3Vjb2RlLmggYi9kcml2ZXJzL2NoYXIvZHJtL21nYV91Y29kZS5oCmluZGV4IGZhMGY4MmUuLmI2MTFlMjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vbWdhX3Vjb2RlLmgKKysrIGIvZHJpdmVycy9jaGFyL2RybS9tZ2FfdWNvZGUuaApAQCAtNDAsMTE2MDYgKzQwLDExNjA2IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHdhcnBfZzIwMF90Z3pbXSA9IHsKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MDAsIDB4OTgsIDB4QTAsIDB4RTksCi0weDQwLCAweDQwLCAweEQ4LCAweEVDLAorCTB4MDAsIDB4OTgsIDB4QTAsIDB4RTksCisJMHg0MCwgMHg0MCwgMHhEOCwgMHhFQywKIAotMHhGRiwgMHg4MCwgMHhDMCwgMHhFOSwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHhGRiwgMHg4MCwgMHhDMCwgMHhFOSwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDFGLCAweEQ3LCAweDE4LCAweEJELAotMHgzRiwgMHhENywgMHgyMiwgMHhCRCwKKwkweDFGLCAweEQ3LCAweDE4LCAweEJELAorCTB4M0YsIDB4RDcsIDB4MjIsIDB4QkQsCiAKLTB4ODEsIDB4MDQsCi0weDg5LCAweDA0LAotMHgwMSwgMHgwNCwKLTB4MDksIDB4MDQsCisJMHg4MSwgMHgwNCwKKwkweDg5LCAweDA0LAorCTB4MDEsIDB4MDQsCisJMHgwOSwgMHgwNCwKIAotMHhDOSwgMHg0MSwgMHhDMCwgMHhFQywKLTB4MTEsIDB4MDQsCi0weDAwLCAweEUwLAorCTB4QzksIDB4NDEsIDB4QzAsIDB4RUMsCisJMHgxMSwgMHgwNCwKKwkweDAwLCAweEUwLAogCi0weDQxLCAweENDLCAweDQxLCAweENELAotMHg0OSwgMHhDQywgMHg0OSwgMHhDRCwKKwkweDQxLCAweENDLCAweDQxLCAweENELAorCTB4NDksIDB4Q0MsIDB4NDksIDB4Q0QsCiAKLTB4RDEsIDB4NDEsIDB4QzAsIDB4RUMsCi0weDUxLCAweENDLCAweDUxLCAweENELAorCTB4RDEsIDB4NDEsIDB4QzAsIDB4RUMsCisJMHg1MSwgMHhDQywgMHg1MSwgMHhDRCwKIAotMHg4MCwgMHgwNCwKLTB4MTAsIDB4MDQsCi0weDA4LCAweDA0LAotMHgwMCwgMHhFMCwKKwkweDgwLCAweDA0LAorCTB4MTAsIDB4MDQsCisJMHgwOCwgMHgwNCwKKwkweDAwLCAweEUwLAogCi0weDAwLCAweENDLCAweEMwLCAweENELAotMHhEMSwgMHg0OSwgMHhDMCwgMHhFQywKKwkweDAwLCAweENDLCAweEMwLCAweENELAorCTB4RDEsIDB4NDksIDB4QzAsIDB4RUMsCiAKLTB4OEEsIDB4MUYsIDB4MjAsIDB4RTksCi0weDhCLCAweDNGLCAweDIwLCAweEU5LAorCTB4OEEsIDB4MUYsIDB4MjAsIDB4RTksCisJMHg4QiwgMHgzRiwgMHgyMCwgMHhFOSwKIAotMHg0MSwgMHgzQywgMHg0MSwgMHhBRCwKLTB4NDksIDB4M0MsIDB4NDksIDB4QUQsCisJMHg0MSwgMHgzQywgMHg0MSwgMHhBRCwKKwkweDQ5LCAweDNDLCAweDQ5LCAweEFELAogCi0weDEwLCAweENDLCAweDEwLCAweENELAotMHgwOCwgMHhDQywgMHgwOCwgMHhDRCwKKwkweDEwLCAweENDLCAweDEwLCAweENELAorCTB4MDgsIDB4Q0MsIDB4MDgsIDB4Q0QsCiAKLTB4QjksIDB4NDEsIDB4NDksIDB4QkIsCi0weDFGLCAweEYwLCAweDQxLCAweENELAorCTB4QjksIDB4NDEsIDB4NDksIDB4QkIsCisJMHgxRiwgMHhGMCwgMHg0MSwgMHhDRCwKIAotMHg1MSwgMHgzQywgMHg1MSwgMHhBRCwKLTB4MDAsIDB4OTgsIDB4ODAsIDB4RTksCisJMHg1MSwgMHgzQywgMHg1MSwgMHhBRCwKKwkweDAwLCAweDk4LCAweDgwLCAweEU5LAogCi0weDcyLCAweDgwLCAweDA3LCAweEVBLAotMHgyNCwgMHgxRiwgMHgyMCwgMHhFOSwKKwkweDcyLCAweDgwLCAweDA3LCAweEVBLAorCTB4MjQsIDB4MUYsIDB4MjAsIDB4RTksCiAKLTB4MTUsIDB4NDEsIDB4NDksIDB4QkQsCi0weDFELCAweDQxLCAweDUxLCAweEJELAorCTB4MTUsIDB4NDEsIDB4NDksIDB4QkQsCisJMHgxRCwgMHg0MSwgMHg1MSwgMHhCRCwKIAotMHgyRSwgMHg0MSwgMHgyQSwgMHhCOCwKLTB4MzQsIDB4NTMsIDB4QTAsIDB4RTgsCisJMHgyRSwgMHg0MSwgMHgyQSwgMHhCOCwKKwkweDM0LCAweDUzLCAweEEwLCAweEU4LAogCi0weDE1LCAweDMwLAotMHgxRCwgMHgzMCwKLTB4NTgsIDB4RTMsCi0weDAwLCAweEUwLAorCTB4MTUsIDB4MzAsCisJMHgxRCwgMHgzMCwKKwkweDU4LCAweEUzLAorCTB4MDAsIDB4RTAsCiAKLTB4QjUsIDB4NDAsIDB4NDgsIDB4QkQsCi0weDNELCAweDQwLCAweDUwLCAweEJELAorCTB4QjUsIDB4NDAsIDB4NDgsIDB4QkQsCisJMHgzRCwgMHg0MCwgMHg1MCwgMHhCRCwKIAotMHgyNCwgMHg0MywgMHhBMCwgMHhFOCwKLTB4MkMsIDB4NEIsIDB4QTAsIDB4RTgsCisJMHgyNCwgMHg0MywgMHhBMCwgMHhFOCwKKwkweDJDLCAweDRCLCAweEEwLCAweEU4LAogCi0weDE1LCAweDcyLAotMHgwOSwgMHhFMywKLTB4MDAsIDB4RTAsCi0weDFELCAweDcyLAorCTB4MTUsIDB4NzIsCisJMHgwOSwgMHhFMywKKwkweDAwLCAweEUwLAorCTB4MUQsIDB4NzIsCiAKLTB4MzUsIDB4MzAsCi0weEI1LCAweDMwLAotMHhCRCwgMHgzMCwKLTB4M0QsIDB4MzAsCisJMHgzNSwgMHgzMCwKKwkweEI1LCAweDMwLAorCTB4QkQsIDB4MzAsCisJMHgzRCwgMHgzMCwKIAotMHg5QywgMHg5NywgMHg1NywgMHg5RiwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHg5QywgMHg5NywgMHg1NywgMHg5RiwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDZDLCAweDY0LCAweEM4LCAweEVDLAotMHg5OCwgMHhFMSwKLTB4QjUsIDB4MDUsCisJMHg2QywgMHg2NCwgMHhDOCwgMHhFQywKKwkweDk4LCAweEUxLAorCTB4QjUsIDB4MDUsCiAKLTB4QkQsIDB4MDUsCi0weDJFLCAweDMwLAotMHgzMiwgMHhDMCwgMHhBMCwgMHhFOCwKKwkweEJELCAweDA1LAorCTB4MkUsIDB4MzAsCisJMHgzMiwgMHhDMCwgMHhBMCwgMHhFOCwKIAotMHgzMywgMHhDMCwgMHhBMCwgMHhFOCwKLTB4NzQsIDB4NjQsIDB4QzgsIDB4RUMsCisJMHgzMywgMHhDMCwgMHhBMCwgMHhFOCwKKwkweDc0LCAweDY0LCAweEM4LCAweEVDLAogCi0weDQwLCAweDNDLCAweDQwLCAweEFELAotMHgzMiwgMHg2QSwKLTB4MkEsIDB4MzAsCisJMHg0MCwgMHgzQywgMHg0MCwgMHhBRCwKKwkweDMyLCAweDZBLAorCTB4MkEsIDB4MzAsCiAKLTB4MjAsIDB4NzMsCi0weDMzLCAweDZBLAotMHgwMCwgMHhFMCwKLTB4MjgsIDB4NzMsCisJMHgyMCwgMHg3MywKKwkweDMzLCAweDZBLAorCTB4MDAsIDB4RTAsCisJMHgyOCwgMHg3MywKIAotMHgxQywgMHg3MiwKLTB4ODMsIDB4RTIsCi0weDYwLCAweDgwLCAweDE1LCAweEVBLAorCTB4MUMsIDB4NzIsCisJMHg4MywgMHhFMiwKKwkweDYwLCAweDgwLCAweDE1LCAweEVBLAogCi0weEI4LCAweDNELCAweDI4LCAweERGLAotMHgzMCwgMHgzNSwgMHgyMCwgMHhERiwKKwkweEI4LCAweDNELCAweDI4LCAweERGLAorCTB4MzAsIDB4MzUsIDB4MjAsIDB4REYsCiAKLTB4NDAsIDB4MzAsCi0weDAwLCAweEUwLAotMHhDQywgMHhFMiwKLTB4NjQsIDB4NzIsCisJMHg0MCwgMHgzMCwKKwkweDAwLCAweEUwLAorCTB4Q0MsIDB4RTIsCisJMHg2NCwgMHg3MiwKIAotMHgyNSwgMHg0MiwgMHg1MiwgMHhCRiwKLTB4MkQsIDB4NDIsIDB4NEEsIDB4QkYsCisJMHgyNSwgMHg0MiwgMHg1MiwgMHhCRiwKKwkweDJELCAweDQyLCAweDRBLCAweEJGLAogCi0weDMwLCAweDJFLCAweDMwLCAweERGLAotMHgzOCwgMHgyRSwgMHgzOCwgMHhERiwKKwkweDMwLCAweDJFLCAweDMwLCAweERGLAorCTB4MzgsIDB4MkUsIDB4MzgsIDB4REYsCiAKLTB4MTgsIDB4MUQsIDB4NDUsIDB4RTksCi0weDFFLCAweDE1LCAweDQ1LCAweEU5LAorCTB4MTgsIDB4MUQsIDB4NDUsIDB4RTksCisJMHgxRSwgMHgxNSwgMHg0NSwgMHhFOSwKIAotMHgyQiwgMHg0OSwgMHg1MSwgMHhCRCwKLTB4MDAsIDB4RTAsCi0weDFGLCAweDczLAorCTB4MkIsIDB4NDksIDB4NTEsIDB4QkQsCisJMHgwMCwgMHhFMCwKKwkweDFGLCAweDczLAogCi0weDM4LCAweDM4LCAweDQwLCAweEFGLAotMHgzMCwgMHgzMCwgMHg0MCwgMHhBRiwKKwkweDM4LCAweDM4LCAweDQwLCAweEFGLAorCTB4MzAsIDB4MzAsIDB4NDAsIDB4QUYsCiAKLTB4MjQsIDB4MUYsIDB4MjQsIDB4REYsCi0weDFELCAweDMyLCAweDIwLCAweEU5LAorCTB4MjQsIDB4MUYsIDB4MjQsIDB4REYsCisJMHgxRCwgMHgzMiwgMHgyMCwgMHhFOSwKIAotMHgyQywgMHgxRiwgMHgyQywgMHhERiwKLTB4MUEsIDB4MzMsIDB4MjAsIDB4RTksCisJMHgyQywgMHgxRiwgMHgyQywgMHhERiwKKwkweDFBLCAweDMzLCAweDIwLCAweEU5LAogCi0weEIwLCAweDEwLAotMHgwOCwgMHhFMywKLTB4NDAsIDB4MTAsCi0weEI4LCAweDEwLAorCTB4QjAsIDB4MTAsCisJMHgwOCwgMHhFMywKKwkweDQwLCAweDEwLAorCTB4QjgsIDB4MTAsCiAKLTB4MjYsIDB4RjAsIDB4MzAsIDB4Q0QsCi0weDJGLCAweEYwLCAweDM4LCAweENELAorCTB4MjYsIDB4RjAsIDB4MzAsIDB4Q0QsCisJMHgyRiwgMHhGMCwgMHgzOCwgMHhDRCwKIAotMHgyQiwgMHg4MCwgMHgyMCwgMHhFOSwKLTB4MkEsIDB4ODAsIDB4MjAsIDB4RTksCisJMHgyQiwgMHg4MCwgMHgyMCwgMHhFOSwKKwkweDJBLCAweDgwLCAweDIwLCAweEU5LAogCi0weEE2LCAweDIwLAotMHg4OCwgMHhFMiwKLTB4MDAsIDB4RTAsCi0weEFGLCAweDIwLAorCTB4QTYsIDB4MjAsCisJMHg4OCwgMHhFMiwKKwkweDAwLCAweEUwLAorCTB4QUYsIDB4MjAsCiAKLTB4MjgsIDB4MkEsIDB4MjYsIDB4QUYsCi0weDIwLCAweDJBLCAweEMwLCAweEFGLAorCTB4MjgsIDB4MkEsIDB4MjYsIDB4QUYsCisJMHgyMCwgMHgyQSwgMHhDMCwgMHhBRiwKIAotMHgzNCwgMHgxRiwgMHgzNCwgMHhERiwKLTB4NDYsIDB4MjQsIDB4NDYsIDB4REYsCisJMHgzNCwgMHgxRiwgMHgzNCwgMHhERiwKKwkweDQ2LCAweDI0LCAweDQ2LCAweERGLAogCi0weDI4LCAweDMwLCAweDgwLCAweEJGLAotMHgyMCwgMHgzOCwgMHg4MCwgMHhCRiwKKwkweDI4LCAweDMwLCAweDgwLCAweEJGLAorCTB4MjAsIDB4MzgsIDB4ODAsIDB4QkYsCiAKLTB4NDcsIDB4MjQsIDB4NDcsIDB4REYsCi0weDRFLCAweDJDLCAweDRFLCAweERGLAorCTB4NDcsIDB4MjQsIDB4NDcsIDB4REYsCisJMHg0RSwgMHgyQywgMHg0RSwgMHhERiwKIAotMHg0RiwgMHgyQywgMHg0RiwgMHhERiwKLTB4NTYsIDB4MzQsIDB4NTYsIDB4REYsCisJMHg0RiwgMHgyQywgMHg0RiwgMHhERiwKKwkweDU2LCAweDM0LCAweDU2LCAweERGLAogCi0weDI4LCAweDE1LCAweDI4LCAweERGLAotMHgyMCwgMHgxRCwgMHgyMCwgMHhERiwKKwkweDI4LCAweDE1LCAweDI4LCAweERGLAorCTB4MjAsIDB4MUQsIDB4MjAsIDB4REYsCiAKLTB4NTcsIDB4MzQsIDB4NTcsIDB4REYsCi0weDAwLCAweEUwLAotMHgxRCwgMHgwNSwKKwkweDU3LCAweDM0LCAweDU3LCAweERGLAorCTB4MDAsIDB4RTAsCisJMHgxRCwgMHgwNSwKIAotMHgwNCwgMHg4MCwgMHgxMCwgMHhFQSwKLTB4ODksIDB4RTIsCi0weDJCLCAweDMwLAorCTB4MDQsIDB4ODAsIDB4MTAsIDB4RUEsCisJMHg4OSwgMHhFMiwKKwkweDJCLCAweDMwLAogCi0weDNGLCAweEMxLCAweDFELCAweEJELAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDNGLCAweEMxLCAweDFELCAweEJELAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHhBMCwgMHg2OCwKLTB4QkYsIDB4MjUsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4QTAsIDB4NjgsCisJMHhCRiwgMHgyNSwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDIwLCAweEMwLCAweDIwLCAweEFGLAotMHgyOCwgMHgwNSwKLTB4OTcsIDB4NzQsCisJMHgyMCwgMHhDMCwgMHgyMCwgMHhBRiwKKwkweDI4LCAweDA1LAorCTB4OTcsIDB4NzQsCiAKLTB4MDAsIDB4RTAsCi0weDJBLCAweDEwLAotMHgxNiwgMHhDMCwgMHgyMCwgMHhFOSwKKwkweDAwLCAweEUwLAorCTB4MkEsIDB4MTAsCisJMHgxNiwgMHhDMCwgMHgyMCwgMHhFOSwKIAotMHgwNCwgMHg4MCwgMHgxMCwgMHhFQSwKLTB4OEMsIDB4RTIsCi0weDk1LCAweDA1LAorCTB4MDQsIDB4ODAsIDB4MTAsIDB4RUEsCisJMHg4QywgMHhFMiwKKwkweDk1LCAweDA1LAogCi0weDI4LCAweEMxLCAweDI4LCAweEFELAotMHgxRiwgMHhDMSwgMHgxNSwgMHhCRCwKKwkweDI4LCAweEMxLCAweDI4LCAweEFELAorCTB4MUYsIDB4QzEsIDB4MTUsIDB4QkQsCiAKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHhBOCwgMHg2NywKLTB4OUYsIDB4NkIsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4QTgsIDB4NjcsCisJMHg5RiwgMHg2QiwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDI4LCAweEMwLCAweDI4LCAweEFELAotMHgxRCwgMHgyNSwKLTB4MjAsIDB4MDUsCisJMHgyOCwgMHhDMCwgMHgyOCwgMHhBRCwKKwkweDFELCAweDI1LAorCTB4MjAsIDB4MDUsCiAKLTB4MjgsIDB4MzIsIDB4ODAsIDB4QUQsCi0weDQwLCAweDJBLCAweDQwLCAweEJELAorCTB4MjgsIDB4MzIsIDB4ODAsIDB4QUQsCisJMHg0MCwgMHgyQSwgMHg0MCwgMHhCRCwKIAotMHgxQywgMHg4MCwgMHgyMCwgMHhFOSwKLTB4MjAsIDB4MzMsIDB4MjAsIDB4QUQsCisJMHgxQywgMHg4MCwgMHgyMCwgMHhFOSwKKwkweDIwLCAweDMzLCAweDIwLCAweEFELAogCi0weDIwLCAweDczLAotMHgwMCwgMHhFMCwKLTB4QjYsIDB4NDksIDB4NTEsIDB4QkIsCisJMHgyMCwgMHg3MywKKwkweDAwLCAweEUwLAorCTB4QjYsIDB4NDksIDB4NTEsIDB4QkIsCiAKLTB4MjYsIDB4MkYsIDB4QjAsIDB4RTgsCi0weDE5LCAweDIwLCAweDIwLCAweEU5LAorCTB4MjYsIDB4MkYsIDB4QjAsIDB4RTgsCisJMHgxOSwgMHgyMCwgMHgyMCwgMHhFOSwKIAotMHgzNSwgMHgyMCwgMHgzNSwgMHhERiwKLTB4M0QsIDB4MjAsIDB4M0QsIDB4REYsCisJMHgzNSwgMHgyMCwgMHgzNSwgMHhERiwKKwkweDNELCAweDIwLCAweDNELCAweERGLAogCi0weDE1LCAweDIwLCAweDE1LCAweERGLAotMHgxRCwgMHgyMCwgMHgxRCwgMHhERiwKKwkweDE1LCAweDIwLCAweDE1LCAweERGLAorCTB4MUQsIDB4MjAsIDB4MUQsIDB4REYsCiAKLTB4MjYsIDB4RDAsIDB4MjYsIDB4Q0QsCi0weDI5LCAweDQ5LCAweDJBLCAweEI4LAorCTB4MjYsIDB4RDAsIDB4MjYsIDB4Q0QsCisJMHgyOSwgMHg0OSwgMHgyQSwgMHhCOCwKIAotMHgyNiwgMHg0MCwgMHg4MCwgMHhCRCwKLTB4M0IsIDB4NDgsIDB4NTAsIDB4QkQsCisJMHgyNiwgMHg0MCwgMHg4MCwgMHhCRCwKKwkweDNCLCAweDQ4LCAweDUwLCAweEJELAogCi0weDNFLCAweDU0LCAweDU3LCAweDlGLAotMHgwMCwgMHhFMCwKLTB4ODIsIDB4RTEsCisJMHgzRSwgMHg1NCwgMHg1NywgMHg5RiwKKwkweDAwLCAweEUwLAorCTB4ODIsIDB4RTEsCiAKLTB4MUUsIDB4QUYsIDB4NTksIDB4OUYsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MUUsIDB4QUYsIDB4NTksIDB4OUYsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgyNiwgMHgzMCwKLTB4MjksIDB4MzAsCi0weDQ4LCAweDNDLCAweDQ4LCAweEFELAorCTB4MjYsIDB4MzAsCisJMHgyOSwgMHgzMCwKKwkweDQ4LCAweDNDLCAweDQ4LCAweEFELAogCi0weDJCLCAweDcyLAotMHhDMiwgMHhFMSwKLTB4MkMsIDB4QzAsIDB4NDQsIDB4QzIsCisJMHgyQiwgMHg3MiwKKwkweEMyLCAweEUxLAorCTB4MkMsIDB4QzAsIDB4NDQsIDB4QzIsCiAKLTB4MDUsIDB4MjQsIDB4MzQsIDB4QkYsCi0weDBELCAweDI0LCAweDJDLCAweEJGLAorCTB4MDUsIDB4MjQsIDB4MzQsIDB4QkYsCisJMHgwRCwgMHgyNCwgMHgyQywgMHhCRiwKIAotMHgyRCwgMHg0NiwgMHg0RSwgMHhCRiwKLTB4MjUsIDB4NDYsIDB4NTYsIDB4QkYsCisJMHgyRCwgMHg0NiwgMHg0RSwgMHhCRiwKKwkweDI1LCAweDQ2LCAweDU2LCAweEJGLAogCi0weDIwLCAweDFELCAweDZGLCAweDhGLAotMHgzMiwgMHgzRSwgMHg1RiwgMHhFOSwKKwkweDIwLCAweDFELCAweDZGLCAweDhGLAorCTB4MzIsIDB4M0UsIDB4NUYsIDB4RTksCiAKLTB4M0UsIDB4NTAsIDB4NTYsIDB4OUYsCi0weDAwLCAweEUwLAotMHgzQiwgMHgzMCwKKwkweDNFLCAweDUwLCAweDU2LCAweDlGLAorCTB4MDAsIDB4RTAsCisJMHgzQiwgMHgzMCwKIAotMHgxRSwgMHg4RiwgMHg1MSwgMHg5RiwKLTB4MzMsIDB4MUUsIDB4NUYsIDB4RTksCisJMHgxRSwgMHg4RiwgMHg1MSwgMHg5RiwKKwkweDMzLCAweDFFLCAweDVGLCAweEU5LAogCi0weDA1LCAweDQ0LCAweDU0LCAweEIyLAotMHgwRCwgMHg0NCwgMHg0QywgMHhCMiwKKwkweDA1LCAweDQ0LCAweDU0LCAweEIyLAorCTB4MEQsIDB4NDQsIDB4NEMsIDB4QjIsCiAKLTB4MTksIDB4QzAsIDB4QjAsIDB4RTgsCi0weDM0LCAweEMwLCAweDQ0LCAweEM0LAorCTB4MTksIDB4QzAsIDB4QjAsIDB4RTgsCisJMHgzNCwgMHhDMCwgMHg0NCwgMHhDNCwKIAotMHgzMywgMHg3MywKLTB4MDAsIDB4RTAsCi0weDNFLCAweDYyLCAweDU3LCAweDlGLAorCTB4MzMsIDB4NzMsCisJMHgwMCwgMHhFMCwKKwkweDNFLCAweDYyLCAweDU3LCAweDlGLAogCi0weDFFLCAweEFGLCAweDU5LCAweDlGLAotMHgwMCwgMHhFMCwKLTB4MEQsIDB4MjAsCisJMHgxRSwgMHhBRiwgMHg1OSwgMHg5RiwKKwkweDAwLCAweEUwLAorCTB4MEQsIDB4MjAsCiAKLTB4ODQsIDB4M0UsIDB4NTgsIDB4RTksCi0weDI4LCAweDFELCAweDZGLCAweDhGLAorCTB4ODQsIDB4M0UsIDB4NTgsIDB4RTksCisJMHgyOCwgMHgxRCwgMHg2RiwgMHg4RiwKIAotMHgwNSwgMHgyMCwKLTB4MDAsIDB4RTAsCi0weDg1LCAweDFFLCAweDU4LCAweEU5LAorCTB4MDUsIDB4MjAsCisJMHgwMCwgMHhFMCwKKwkweDg1LCAweDFFLCAweDU4LCAweEU5LAogCi0weDlCLCAweDNCLCAweDMzLCAweERGLAotMHgyMCwgMHgyMCwgMHg0MiwgMHhBRiwKKwkweDlCLCAweDNCLCAweDMzLCAweERGLAorCTB4MjAsIDB4MjAsIDB4NDIsIDB4QUYsCiAKLTB4MzAsIDB4NDIsIDB4NTYsIDB4OUYsCi0weDgwLCAweDNFLCAweDU3LCAweEU5LAorCTB4MzAsIDB4NDIsIDB4NTYsIDB4OUYsCisJMHg4MCwgMHgzRSwgMHg1NywgMHhFOSwKIAotMHgzRiwgMHg4RiwgMHg1MSwgMHg5RiwKLTB4MzAsIDB4ODAsIDB4NUYsIDB4RTksCisJMHgzRiwgMHg4RiwgMHg1MSwgMHg5RiwKKwkweDMwLCAweDgwLCAweDVGLCAweEU5LAogCi0weDI4LCAweDI4LCAweDI0LCAweEFGLAotMHg4MSwgMHgxRSwgMHg1NywgMHhFOSwKKwkweDI4LCAweDI4LCAweDI0LCAweEFGLAorCTB4ODEsIDB4MUUsIDB4NTcsIDB4RTksCiAKLTB4MDUsIDB4NDcsIDB4NTcsIDB4QkYsCi0weDBELCAweDQ3LCAweDRGLCAweEJGLAorCTB4MDUsIDB4NDcsIDB4NTcsIDB4QkYsCisJMHgwRCwgMHg0NywgMHg0RiwgMHhCRiwKIAotMHg4OCwgMHg4MCwgMHg1OCwgMHhFOSwKLTB4MUIsIDB4MjksIDB4MUIsIDB4REYsCisJMHg4OCwgMHg4MCwgMHg1OCwgMHhFOSwKKwkweDFCLCAweDI5LCAweDFCLCAweERGLAogCi0weDMwLCAweDFELCAweDZGLCAweDhGLAotMHgzQSwgMHgzMCwgMHg0RiwgMHhFOSwKKwkweDMwLCAweDFELCAweDZGLCAweDhGLAorCTB4M0EsIDB4MzAsIDB4NEYsIDB4RTksCiAKLTB4MUMsIDB4MzAsIDB4MjYsIDB4REYsCi0weDA5LCAweEUzLAotMHgzQiwgMHgwNSwKKwkweDFDLCAweDMwLCAweDI2LCAweERGLAorCTB4MDksIDB4RTMsCisJMHgzQiwgMHgwNSwKIAotMHgzRSwgMHg1MCwgMHg1NiwgMHg5RiwKLTB4M0IsIDB4M0YsIDB4NEYsIDB4RTksCisJMHgzRSwgMHg1MCwgMHg1NiwgMHg5RiwKKwkweDNCLCAweDNGLCAweDRGLCAweEU5LAogCi0weDFFLCAweDhGLCAweDUxLCAweDlGLAotMHgwMCwgMHhFMCwKLTB4QUMsIDB4MjAsCisJMHgxRSwgMHg4RiwgMHg1MSwgMHg5RiwKKwkweDAwLCAweEUwLAorCTB4QUMsIDB4MjAsCiAKLTB4MkQsIDB4NDQsIDB4NEMsIDB4QjQsCi0weDJDLCAweDFDLCAweEMwLCAweEFGLAorCTB4MkQsIDB4NDQsIDB4NEMsIDB4QjQsCisJMHgyQywgMHgxQywgMHhDMCwgMHhBRiwKIAotMHgyNSwgMHg0NCwgMHg1NCwgMHhCNCwKLTB4MDAsIDB4RTAsCi0weEM4LCAweDMwLAorCTB4MjUsIDB4NDQsIDB4NTQsIDB4QjQsCisJMHgwMCwgMHhFMCwKKwkweEM4LCAweDMwLAogCi0weDMwLCAweDQ2LCAweDMwLCAweEFGLAotMHgxQiwgMHgxQiwgMHg0OCwgMHhBRiwKKwkweDMwLCAweDQ2LCAweDMwLCAweEFGLAorCTB4MUIsIDB4MUIsIDB4NDgsIDB4QUYsCiAKLTB4MDAsIDB4RTAsCi0weDI1LCAweDIwLAotMHgzOCwgMHgyQywgMHg0RiwgMHhFOSwKKwkweDAwLCAweEUwLAorCTB4MjUsIDB4MjAsCisJMHgzOCwgMHgyQywgMHg0RiwgMHhFOSwKIAotMHg4NiwgMHg4MCwgMHg1NywgMHhFOSwKLTB4MzgsIDB4MUQsIDB4NkYsIDB4OEYsCisJMHg4NiwgMHg4MCwgMHg1NywgMHhFOSwKKwkweDM4LCAweDFELCAweDZGLCAweDhGLAogCi0weDI4LCAweDc0LAotMHgwMCwgMHhFMCwKLTB4MEQsIDB4NDQsIDB4NEMsIDB4QjAsCisJMHgyOCwgMHg3NCwKKwkweDAwLCAweEUwLAorCTB4MEQsIDB4NDQsIDB4NEMsIDB4QjAsCiAKLTB4MDUsIDB4NDQsIDB4NTQsIDB4QjAsCi0weDJELCAweDIwLAotMHg5QiwgMHgxMCwKKwkweDA1LCAweDQ0LCAweDU0LCAweEIwLAorCTB4MkQsIDB4MjAsCisJMHg5QiwgMHgxMCwKIAotMHg4MiwgMHgzRSwgMHg1NywgMHhFOSwKLTB4MzIsIDB4RjAsIDB4MUIsIDB4Q0QsCisJMHg4MiwgMHgzRSwgMHg1NywgMHhFOSwKKwkweDMyLCAweEYwLCAweDFCLCAweENELAogCi0weDFFLCAweEJELCAweDU5LCAweDlGLAotMHg4MywgMHgxRSwgMHg1NywgMHhFOSwKKwkweDFFLCAweEJELCAweDU5LCAweDlGLAorCTB4ODMsIDB4MUUsIDB4NTcsIDB4RTksCiAKLTB4MzgsIDB4NDcsIDB4MzgsIDB4QUYsCi0weDM0LCAweDIwLAotMHgyQSwgMHgzMCwKKwkweDM4LCAweDQ3LCAweDM4LCAweEFGLAorCTB4MzQsIDB4MjAsCisJMHgyQSwgMHgzMCwKIAotMHgwMCwgMHhFMCwKLTB4MEQsIDB4MjAsCi0weDMyLCAweDIwLAotMHgwNSwgMHgyMCwKKwkweDAwLCAweEUwLAorCTB4MEQsIDB4MjAsCisJMHgzMiwgMHgyMCwKKwkweDA1LCAweDIwLAogCi0weDg3LCAweDgwLCAweDU3LCAweEU5LAotMHgxRiwgMHg1NCwgMHg1NywgMHg5RiwKKwkweDg3LCAweDgwLCAweDU3LCAweEU5LAorCTB4MUYsIDB4NTQsIDB4NTcsIDB4OUYsCiAKLTB4MTcsIDB4NDIsIDB4NTYsIDB4OUYsCi0weDAwLCAweEUwLAotMHgzQiwgMHg2QSwKKwkweDE3LCAweDQyLCAweDU2LCAweDlGLAorCTB4MDAsIDB4RTAsCisJMHgzQiwgMHg2QSwKIAotMHgzRiwgMHg4RiwgMHg1MSwgMHg5RiwKLTB4MzcsIDB4MUUsIDB4NEYsIDB4RTksCisJMHgzRiwgMHg4RiwgMHg1MSwgMHg5RiwKKwkweDM3LCAweDFFLCAweDRGLCAweEU5LAogCi0weDM3LCAweDMyLCAweDJBLCAweEFGLAotMHgwMCwgMHhFMCwKLTB4MzIsIDB4MDAsCisJMHgzNywgMHgzMiwgMHgyQSwgMHhBRiwKKwkweDAwLCAweEUwLAorCTB4MzIsIDB4MDAsCiAKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0weDI3LCAweEMwLCAweDQ0LCAweEMwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgyNywgMHhDMCwgMHg0NCwgMHhDMCwKIAotMHgzNiwgMHgxRiwgMHg0RiwgMHhFOSwKLTB4MUYsIDB4MUYsIDB4MjYsIDB4REYsCisJMHgzNiwgMHgxRiwgMHg0RiwgMHhFOSwKKwkweDFGLCAweDFGLCAweDI2LCAweERGLAogCi0weDM3LCAweDFCLCAweDM3LCAweEJGLAotMHgxNywgMHgyNiwgMHgxNywgMHhERiwKKwkweDM3LCAweDFCLCAweDM3LCAweEJGLAorCTB4MTcsIDB4MjYsIDB4MTcsIDB4REYsCiAKLTB4M0UsIDB4MTcsIDB4NEYsIDB4RTksCi0weDNGLCAweDNGLCAweDRGLCAweEU5LAorCTB4M0UsIDB4MTcsIDB4NEYsIDB4RTksCisJMHgzRiwgMHgzRiwgMHg0RiwgMHhFOSwKIAotMHgzNCwgMHgxRiwgMHgzNCwgMHhBRiwKLTB4MkIsIDB4MDUsCi0weEE3LCAweDIwLAorCTB4MzQsIDB4MUYsIDB4MzQsIDB4QUYsCisJMHgyQiwgMHgwNSwKKwkweEE3LCAweDIwLAogCi0weDMzLCAweDJCLCAweDM3LCAweERGLAotMHgyNywgMHgxNywgMHhDMCwgMHhBRiwKKwkweDMzLCAweDJCLCAweDM3LCAweERGLAorCTB4MjcsIDB4MTcsIDB4QzAsIDB4QUYsCiAKLTB4MzQsIDB4ODAsIDB4NEYsIDB4RTksCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MzQsIDB4ODAsIDB4NEYsIDB4RTksCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMywgMHg4MCwgMHgwQSwgMHhFQSwKLTB4MTcsIDB4QzEsIDB4MkIsIDB4QkQsCisJMHgwMywgMHg4MCwgMHgwQSwgMHhFQSwKKwkweDE3LCAweEMxLCAweDJCLCAweEJELAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4QjMsIDB4NjgsCi0weDk3LCAweDI1LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweEIzLCAweDY4LAorCTB4OTcsIDB4MjUsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgzMywgMHhDMCwgMHgzMywgMHhBRiwKLTB4M0MsIDB4MjcsIDB4NEYsIDB4RTksCisJMHgzMywgMHhDMCwgMHgzMywgMHhBRiwKKwkweDNDLCAweDI3LCAweDRGLCAweEU5LAogCi0weDU3LCAweDM5LCAweDIwLCAweEU5LAotMHgyOCwgMHgxOSwgMHg2MCwgMHhFQywKKwkweDU3LCAweDM5LCAweDIwLCAweEU5LAorCTB4MjgsIDB4MTksIDB4NjAsIDB4RUMsCiAKLTB4MkIsIDB4MzIsIDB4MjAsIDB4RTksCi0weDFELCAweDNCLCAweDIwLCAweEU5LAorCTB4MkIsIDB4MzIsIDB4MjAsIDB4RTksCisJMHgxRCwgMHgzQiwgMHgyMCwgMHhFOSwKIAotMHhCMywgMHgwNSwKLTB4MDAsIDB4RTAsCi0weDE2LCAweDI4LCAweDIwLCAweEU5LAorCTB4QjMsIDB4MDUsCisJMHgwMCwgMHhFMCwKKwkweDE2LCAweDI4LCAweDIwLCAweEU5LAogCi0weDIzLCAweDNCLCAweDMzLCAweEFELAotMHgxRSwgMHgyQiwgMHgyMCwgMHhFOSwKKwkweDIzLCAweDNCLCAweDMzLCAweEFELAorCTB4MUUsIDB4MkIsIDB4MjAsIDB4RTksCiAKLTB4MUMsIDB4ODAsIDB4MjAsIDB4RTksCi0weDU3LCAweDM2LCAweDIwLCAweEU5LAorCTB4MUMsIDB4ODAsIDB4MjAsIDB4RTksCisJMHg1NywgMHgzNiwgMHgyMCwgMHhFOSwKIAotMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKLTB4NDAsIDB4NDAsIDB4RDgsIDB4RUMsCisJMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKKwkweDQwLCAweDQwLCAweEQ4LCAweEVDLAogCi0weEZGLCAweDgwLCAweEMwLCAweEU5LAotMHg5MCwgMHhFMiwKLTB4MDAsIDB4RTAsCisJMHhGRiwgMHg4MCwgMHhDMCwgMHhFOSwKKwkweDkwLCAweEUyLAorCTB4MDAsIDB4RTAsCiAKLTB4ODUsIDB4RkYsIDB4MjAsIDB4RUEsCi0weDE5LCAweEM4LCAweEMxLCAweENELAorCTB4ODUsIDB4RkYsIDB4MjAsIDB4RUEsCisJMHgxOSwgMHhDOCwgMHhDMSwgMHhDRCwKIAotMHgxRiwgMHhENywgMHgxOCwgMHhCRCwKLTB4M0YsIDB4RDcsIDB4MjIsIDB4QkQsCisJMHgxRiwgMHhENywgMHgxOCwgMHhCRCwKKwkweDNGLCAweEQ3LCAweDIyLCAweEJELAogCi0weDlGLCAweDQxLCAweDQ5LCAweEJELAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDlGLCAweDQxLCAweDQ5LCAweEJELAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MjUsIDB4NDEsIDB4NDksIDB4QkQsCi0weDJELCAweDQxLCAweDUxLCAweEJELAorCTB4MjUsIDB4NDEsIDB4NDksIDB4QkQsCisJMHgyRCwgMHg0MSwgMHg1MSwgMHhCRCwKIAotMHgwRCwgMHg4MCwgMHgwNywgMHhFQSwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwRCwgMHg4MCwgMHgwNywgMHhFQSwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDM1LCAweDQwLCAweDQ4LCAweEJELAotMHgzRCwgMHg0MCwgMHg1MCwgMHhCRCwKKwkweDM1LCAweDQwLCAweDQ4LCAweEJELAorCTB4M0QsIDB4NDAsIDB4NTAsIDB4QkQsCiAKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0weDI1LCAweDMwLAotMHgyRCwgMHgzMCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MjUsIDB4MzAsCisJMHgyRCwgMHgzMCwKIAotMHgzNSwgMHgzMCwKLTB4QjUsIDB4MzAsCi0weEJELCAweDMwLAotMHgzRCwgMHgzMCwKKwkweDM1LCAweDMwLAorCTB4QjUsIDB4MzAsCisJMHhCRCwgMHgzMCwKKwkweDNELCAweDMwLAogCi0weDlDLCAweEE3LCAweDVCLCAweDlGLAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDlDLCAweEE3LCAweDVCLCAweDlGLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHg4NCwgMHhGRiwgMHgwQSwgMHhFQSwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHg4NCwgMHhGRiwgMHgwQSwgMHhFQSwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weEM5LCAweDQxLCAweEM4LCAweEVDLAotMHg0MiwgMHhFMSwKLTB4MDAsIDB4RTAsCisJMHhDOSwgMHg0MSwgMHhDOCwgMHhFQywKKwkweDQyLCAweEUxLAorCTB4MDAsIDB4RTAsCiAKLTB4ODIsIDB4RkYsIDB4MjAsIDB4RUEsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4ODIsIDB4RkYsIDB4MjAsIDB4RUEsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weEM4LCAweDQwLCAweEMwLCAweEVDLAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweEM4LCAweDQwLCAweEMwLCAweEVDLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4N0YsIDB4RkYsIDB4MjAsIDB4RUEsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4N0YsIDB4RkYsIDB4MjAsIDB4RUEsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCiB9OwogCiBzdGF0aWMgdW5zaWduZWQgY2hhciB3YXJwX2cyMDBfdGd6YVtdID0gewogCi0weDAwLCAweDk4LCAweEEwLCAweEU5LAotMHg0MCwgMHg0MCwgMHhEOCwgMHhFQywKKwkweDAwLCAweDk4LCAweEEwLCAweEU5LAorCTB4NDAsIDB4NDAsIDB4RDgsIDB4RUMsCiAKLTB4RkYsIDB4ODAsIDB4QzAsIDB4RTksCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4RkYsIDB4ODAsIDB4QzAsIDB4RTksCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgxRiwgMHhENywgMHgxOCwgMHhCRCwKLTB4M0YsIDB4RDcsIDB4MjIsIDB4QkQsCisJMHgxRiwgMHhENywgMHgxOCwgMHhCRCwKKwkweDNGLCAweEQ3LCAweDIyLCAweEJELAogCi0weDgxLCAweDA0LAotMHg4OSwgMHgwNCwKLTB4MDEsIDB4MDQsCi0weDA5LCAweDA0LAorCTB4ODEsIDB4MDQsCisJMHg4OSwgMHgwNCwKKwkweDAxLCAweDA0LAorCTB4MDksIDB4MDQsCiAKLTB4QzksIDB4NDEsIDB4QzAsIDB4RUMsCi0weDExLCAweDA0LAotMHgwMCwgMHhFMCwKKwkweEM5LCAweDQxLCAweEMwLCAweEVDLAorCTB4MTEsIDB4MDQsCisJMHgwMCwgMHhFMCwKIAotMHg0MSwgMHhDQywgMHg0MSwgMHhDRCwKLTB4NDksIDB4Q0MsIDB4NDksIDB4Q0QsCisJMHg0MSwgMHhDQywgMHg0MSwgMHhDRCwKKwkweDQ5LCAweENDLCAweDQ5LCAweENELAogCi0weEQxLCAweDQxLCAweEMwLCAweEVDLAotMHg1MSwgMHhDQywgMHg1MSwgMHhDRCwKKwkweEQxLCAweDQxLCAweEMwLCAweEVDLAorCTB4NTEsIDB4Q0MsIDB4NTEsIDB4Q0QsCiAKLTB4ODAsIDB4MDQsCi0weDEwLCAweDA0LAotMHgwOCwgMHgwNCwKLTB4MDAsIDB4RTAsCisJMHg4MCwgMHgwNCwKKwkweDEwLCAweDA0LAorCTB4MDgsIDB4MDQsCisJMHgwMCwgMHhFMCwKIAotMHgwMCwgMHhDQywgMHhDMCwgMHhDRCwKLTB4RDEsIDB4NDksIDB4QzAsIDB4RUMsCisJMHgwMCwgMHhDQywgMHhDMCwgMHhDRCwKKwkweEQxLCAweDQ5LCAweEMwLCAweEVDLAogCi0weDhBLCAweDFGLCAweDIwLCAweEU5LAotMHg4QiwgMHgzRiwgMHgyMCwgMHhFOSwKKwkweDhBLCAweDFGLCAweDIwLCAweEU5LAorCTB4OEIsIDB4M0YsIDB4MjAsIDB4RTksCiAKLTB4NDEsIDB4M0MsIDB4NDEsIDB4QUQsCi0weDQ5LCAweDNDLCAweDQ5LCAweEFELAorCTB4NDEsIDB4M0MsIDB4NDEsIDB4QUQsCisJMHg0OSwgMHgzQywgMHg0OSwgMHhBRCwKIAotMHgxMCwgMHhDQywgMHgxMCwgMHhDRCwKLTB4MDgsIDB4Q0MsIDB4MDgsIDB4Q0QsCisJMHgxMCwgMHhDQywgMHgxMCwgMHhDRCwKKwkweDA4LCAweENDLCAweDA4LCAweENELAogCi0weEI5LCAweDQxLCAweDQ5LCAweEJCLAotMHgxRiwgMHhGMCwgMHg0MSwgMHhDRCwKKwkweEI5LCAweDQxLCAweDQ5LCAweEJCLAorCTB4MUYsIDB4RjAsIDB4NDEsIDB4Q0QsCiAKLTB4NTEsIDB4M0MsIDB4NTEsIDB4QUQsCi0weDAwLCAweDk4LCAweDgwLCAweEU5LAorCTB4NTEsIDB4M0MsIDB4NTEsIDB4QUQsCisJMHgwMCwgMHg5OCwgMHg4MCwgMHhFOSwKIAotMHg3RCwgMHg4MCwgMHgwNywgMHhFQSwKLTB4MjQsIDB4MUYsIDB4MjAsIDB4RTksCisJMHg3RCwgMHg4MCwgMHgwNywgMHhFQSwKKwkweDI0LCAweDFGLCAweDIwLCAweEU5LAogCi0weDE1LCAweDQxLCAweDQ5LCAweEJELAotMHgxRCwgMHg0MSwgMHg1MSwgMHhCRCwKKwkweDE1LCAweDQxLCAweDQ5LCAweEJELAorCTB4MUQsIDB4NDEsIDB4NTEsIDB4QkQsCiAKLTB4MkUsIDB4NDEsIDB4MkEsIDB4QjgsCi0weDM0LCAweDUzLCAweEEwLCAweEU4LAorCTB4MkUsIDB4NDEsIDB4MkEsIDB4QjgsCisJMHgzNCwgMHg1MywgMHhBMCwgMHhFOCwKIAotMHgxNSwgMHgzMCwKLTB4MUQsIDB4MzAsCi0weDU4LCAweEUzLAotMHgwMCwgMHhFMCwKKwkweDE1LCAweDMwLAorCTB4MUQsIDB4MzAsCisJMHg1OCwgMHhFMywKKwkweDAwLCAweEUwLAogCi0weEI1LCAweDQwLCAweDQ4LCAweEJELAotMHgzRCwgMHg0MCwgMHg1MCwgMHhCRCwKKwkweEI1LCAweDQwLCAweDQ4LCAweEJELAorCTB4M0QsIDB4NDAsIDB4NTAsIDB4QkQsCiAKLTB4MjQsIDB4NDMsIDB4QTAsIDB4RTgsCi0weDJDLCAweDRCLCAweEEwLCAweEU4LAorCTB4MjQsIDB4NDMsIDB4QTAsIDB4RTgsCisJMHgyQywgMHg0QiwgMHhBMCwgMHhFOCwKIAotMHgxNSwgMHg3MiwKLTB4MDksIDB4RTMsCi0weDAwLCAweEUwLAotMHgxRCwgMHg3MiwKKwkweDE1LCAweDcyLAorCTB4MDksIDB4RTMsCisJMHgwMCwgMHhFMCwKKwkweDFELCAweDcyLAogCi0weDM1LCAweDMwLAotMHhCNSwgMHgzMCwKLTB4QkQsIDB4MzAsCi0weDNELCAweDMwLAorCTB4MzUsIDB4MzAsCisJMHhCNSwgMHgzMCwKKwkweEJELCAweDMwLAorCTB4M0QsIDB4MzAsCiAKLTB4OUMsIDB4OTcsIDB4NTcsIDB4OUYsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4OUMsIDB4OTcsIDB4NTcsIDB4OUYsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHg2QywgMHg2NCwgMHhDOCwgMHhFQywKLTB4OTgsIDB4RTEsCi0weEI1LCAweDA1LAorCTB4NkMsIDB4NjQsIDB4QzgsIDB4RUMsCisJMHg5OCwgMHhFMSwKKwkweEI1LCAweDA1LAogCi0weEJELCAweDA1LAotMHgyRSwgMHgzMCwKLTB4MzIsIDB4QzAsIDB4QTAsIDB4RTgsCisJMHhCRCwgMHgwNSwKKwkweDJFLCAweDMwLAorCTB4MzIsIDB4QzAsIDB4QTAsIDB4RTgsCiAKLTB4MzMsIDB4QzAsIDB4QTAsIDB4RTgsCi0weDc0LCAweDY0LCAweEM4LCAweEVDLAorCTB4MzMsIDB4QzAsIDB4QTAsIDB4RTgsCisJMHg3NCwgMHg2NCwgMHhDOCwgMHhFQywKIAotMHg0MCwgMHgzQywgMHg0MCwgMHhBRCwKLTB4MzIsIDB4NkEsCi0weDJBLCAweDMwLAorCTB4NDAsIDB4M0MsIDB4NDAsIDB4QUQsCisJMHgzMiwgMHg2QSwKKwkweDJBLCAweDMwLAogCi0weDIwLCAweDczLAotMHgzMywgMHg2QSwKLTB4MDAsIDB4RTAsCi0weDI4LCAweDczLAorCTB4MjAsIDB4NzMsCisJMHgzMywgMHg2QSwKKwkweDAwLCAweEUwLAorCTB4MjgsIDB4NzMsCiAKLTB4MUMsIDB4NzIsCi0weDgzLCAweEUyLAotMHg2QiwgMHg4MCwgMHgxNSwgMHhFQSwKKwkweDFDLCAweDcyLAorCTB4ODMsIDB4RTIsCisJMHg2QiwgMHg4MCwgMHgxNSwgMHhFQSwKIAotMHhCOCwgMHgzRCwgMHgyOCwgMHhERiwKLTB4MzAsIDB4MzUsIDB4MjAsIDB4REYsCisJMHhCOCwgMHgzRCwgMHgyOCwgMHhERiwKKwkweDMwLCAweDM1LCAweDIwLCAweERGLAogCi0weDQwLCAweDMwLAotMHgwMCwgMHhFMCwKLTB4Q0MsIDB4RTIsCi0weDY0LCAweDcyLAorCTB4NDAsIDB4MzAsCisJMHgwMCwgMHhFMCwKKwkweENDLCAweEUyLAorCTB4NjQsIDB4NzIsCiAKLTB4MjUsIDB4NDIsIDB4NTIsIDB4QkYsCi0weDJELCAweDQyLCAweDRBLCAweEJGLAorCTB4MjUsIDB4NDIsIDB4NTIsIDB4QkYsCisJMHgyRCwgMHg0MiwgMHg0QSwgMHhCRiwKIAotMHgzMCwgMHgyRSwgMHgzMCwgMHhERiwKLTB4MzgsIDB4MkUsIDB4MzgsIDB4REYsCisJMHgzMCwgMHgyRSwgMHgzMCwgMHhERiwKKwkweDM4LCAweDJFLCAweDM4LCAweERGLAogCi0weDE4LCAweDFELCAweDQ1LCAweEU5LAotMHgxRSwgMHgxNSwgMHg0NSwgMHhFOSwKKwkweDE4LCAweDFELCAweDQ1LCAweEU5LAorCTB4MUUsIDB4MTUsIDB4NDUsIDB4RTksCiAKLTB4MkIsIDB4NDksIDB4NTEsIDB4QkQsCi0weDAwLCAweEUwLAotMHgxRiwgMHg3MywKKwkweDJCLCAweDQ5LCAweDUxLCAweEJELAorCTB4MDAsIDB4RTAsCisJMHgxRiwgMHg3MywKIAotMHgzOCwgMHgzOCwgMHg0MCwgMHhBRiwKLTB4MzAsIDB4MzAsIDB4NDAsIDB4QUYsCisJMHgzOCwgMHgzOCwgMHg0MCwgMHhBRiwKKwkweDMwLCAweDMwLCAweDQwLCAweEFGLAogCi0weDI0LCAweDFGLCAweDI0LCAweERGLAotMHgxRCwgMHgzMiwgMHgyMCwgMHhFOSwKKwkweDI0LCAweDFGLCAweDI0LCAweERGLAorCTB4MUQsIDB4MzIsIDB4MjAsIDB4RTksCiAKLTB4MkMsIDB4MUYsIDB4MkMsIDB4REYsCi0weDFBLCAweDMzLCAweDIwLCAweEU5LAorCTB4MkMsIDB4MUYsIDB4MkMsIDB4REYsCisJMHgxQSwgMHgzMywgMHgyMCwgMHhFOSwKIAotMHhCMCwgMHgxMCwKLTB4MDgsIDB4RTMsCi0weDQwLCAweDEwLAotMHhCOCwgMHgxMCwKKwkweEIwLCAweDEwLAorCTB4MDgsIDB4RTMsCisJMHg0MCwgMHgxMCwKKwkweEI4LCAweDEwLAogCi0weDI2LCAweEYwLCAweDMwLCAweENELAotMHgyRiwgMHhGMCwgMHgzOCwgMHhDRCwKKwkweDI2LCAweEYwLCAweDMwLCAweENELAorCTB4MkYsIDB4RjAsIDB4MzgsIDB4Q0QsCiAKLTB4MkIsIDB4ODAsIDB4MjAsIDB4RTksCi0weDJBLCAweDgwLCAweDIwLCAweEU5LAorCTB4MkIsIDB4ODAsIDB4MjAsIDB4RTksCisJMHgyQSwgMHg4MCwgMHgyMCwgMHhFOSwKIAotMHhBNiwgMHgyMCwKLTB4ODgsIDB4RTIsCi0weDAwLCAweEUwLAotMHhBRiwgMHgyMCwKKwkweEE2LCAweDIwLAorCTB4ODgsIDB4RTIsCisJMHgwMCwgMHhFMCwKKwkweEFGLCAweDIwLAogCi0weDI4LCAweDJBLCAweDI2LCAweEFGLAotMHgyMCwgMHgyQSwgMHhDMCwgMHhBRiwKKwkweDI4LCAweDJBLCAweDI2LCAweEFGLAorCTB4MjAsIDB4MkEsIDB4QzAsIDB4QUYsCiAKLTB4MzQsIDB4MUYsIDB4MzQsIDB4REYsCi0weDQ2LCAweDI0LCAweDQ2LCAweERGLAorCTB4MzQsIDB4MUYsIDB4MzQsIDB4REYsCisJMHg0NiwgMHgyNCwgMHg0NiwgMHhERiwKIAotMHgyOCwgMHgzMCwgMHg4MCwgMHhCRiwKLTB4MjAsIDB4MzgsIDB4ODAsIDB4QkYsCisJMHgyOCwgMHgzMCwgMHg4MCwgMHhCRiwKKwkweDIwLCAweDM4LCAweDgwLCAweEJGLAogCi0weDQ3LCAweDI0LCAweDQ3LCAweERGLAotMHg0RSwgMHgyQywgMHg0RSwgMHhERiwKKwkweDQ3LCAweDI0LCAweDQ3LCAweERGLAorCTB4NEUsIDB4MkMsIDB4NEUsIDB4REYsCiAKLTB4NEYsIDB4MkMsIDB4NEYsIDB4REYsCi0weDU2LCAweDM0LCAweDU2LCAweERGLAorCTB4NEYsIDB4MkMsIDB4NEYsIDB4REYsCisJMHg1NiwgMHgzNCwgMHg1NiwgMHhERiwKIAotMHgyOCwgMHgxNSwgMHgyOCwgMHhERiwKLTB4MjAsIDB4MUQsIDB4MjAsIDB4REYsCisJMHgyOCwgMHgxNSwgMHgyOCwgMHhERiwKKwkweDIwLCAweDFELCAweDIwLCAweERGLAogCi0weDU3LCAweDM0LCAweDU3LCAweERGLAotMHgwMCwgMHhFMCwKLTB4MUQsIDB4MDUsCisJMHg1NywgMHgzNCwgMHg1NywgMHhERiwKKwkweDAwLCAweEUwLAorCTB4MUQsIDB4MDUsCiAKLTB4MDQsIDB4ODAsIDB4MTAsIDB4RUEsCi0weDg5LCAweEUyLAotMHgyQiwgMHgzMCwKKwkweDA0LCAweDgwLCAweDEwLCAweEVBLAorCTB4ODksIDB4RTIsCisJMHgyQiwgMHgzMCwKIAotMHgzRiwgMHhDMSwgMHgxRCwgMHhCRCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgzRiwgMHhDMSwgMHgxRCwgMHhCRCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4QTAsIDB4NjgsCi0weEJGLCAweDI1LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweEEwLCAweDY4LAorCTB4QkYsIDB4MjUsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgyMCwgMHhDMCwgMHgyMCwgMHhBRiwKLTB4MjgsIDB4MDUsCi0weDk3LCAweDc0LAorCTB4MjAsIDB4QzAsIDB4MjAsIDB4QUYsCisJMHgyOCwgMHgwNSwKKwkweDk3LCAweDc0LAogCi0weDAwLCAweEUwLAotMHgyQSwgMHgxMCwKLTB4MTYsIDB4QzAsIDB4MjAsIDB4RTksCisJMHgwMCwgMHhFMCwKKwkweDJBLCAweDEwLAorCTB4MTYsIDB4QzAsIDB4MjAsIDB4RTksCiAKLTB4MDQsIDB4ODAsIDB4MTAsIDB4RUEsCi0weDhDLCAweEUyLAotMHg5NSwgMHgwNSwKKwkweDA0LCAweDgwLCAweDEwLCAweEVBLAorCTB4OEMsIDB4RTIsCisJMHg5NSwgMHgwNSwKIAotMHgyOCwgMHhDMSwgMHgyOCwgMHhBRCwKLTB4MUYsIDB4QzEsIDB4MTUsIDB4QkQsCisJMHgyOCwgMHhDMSwgMHgyOCwgMHhBRCwKKwkweDFGLCAweEMxLCAweDE1LCAweEJELAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4QTgsIDB4NjcsCi0weDlGLCAweDZCLAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweEE4LCAweDY3LAorCTB4OUYsIDB4NkIsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgyOCwgMHhDMCwgMHgyOCwgMHhBRCwKLTB4MUQsIDB4MjUsCi0weDIwLCAweDA1LAorCTB4MjgsIDB4QzAsIDB4MjgsIDB4QUQsCisJMHgxRCwgMHgyNSwKKwkweDIwLCAweDA1LAogCi0weDI4LCAweDMyLCAweDgwLCAweEFELAotMHg0MCwgMHgyQSwgMHg0MCwgMHhCRCwKKwkweDI4LCAweDMyLCAweDgwLCAweEFELAorCTB4NDAsIDB4MkEsIDB4NDAsIDB4QkQsCiAKLTB4MUMsIDB4ODAsIDB4MjAsIDB4RTksCi0weDIwLCAweDMzLCAweDIwLCAweEFELAorCTB4MUMsIDB4ODAsIDB4MjAsIDB4RTksCisJMHgyMCwgMHgzMywgMHgyMCwgMHhBRCwKIAotMHgyMCwgMHg3MywKLTB4MDAsIDB4RTAsCi0weEI2LCAweDQ5LCAweDUxLCAweEJCLAorCTB4MjAsIDB4NzMsCisJMHgwMCwgMHhFMCwKKwkweEI2LCAweDQ5LCAweDUxLCAweEJCLAogCi0weDI2LCAweDJGLCAweEIwLCAweEU4LAotMHgxOSwgMHgyMCwgMHgyMCwgMHhFOSwKKwkweDI2LCAweDJGLCAweEIwLCAweEU4LAorCTB4MTksIDB4MjAsIDB4MjAsIDB4RTksCiAKLTB4MzUsIDB4MjAsIDB4MzUsIDB4REYsCi0weDNELCAweDIwLCAweDNELCAweERGLAorCTB4MzUsIDB4MjAsIDB4MzUsIDB4REYsCisJMHgzRCwgMHgyMCwgMHgzRCwgMHhERiwKIAotMHgxNSwgMHgyMCwgMHgxNSwgMHhERiwKLTB4MUQsIDB4MjAsIDB4MUQsIDB4REYsCisJMHgxNSwgMHgyMCwgMHgxNSwgMHhERiwKKwkweDFELCAweDIwLCAweDFELCAweERGLAogCi0weDI2LCAweEQwLCAweDI2LCAweENELAotMHgyOSwgMHg0OSwgMHgyQSwgMHhCOCwKKwkweDI2LCAweEQwLCAweDI2LCAweENELAorCTB4MjksIDB4NDksIDB4MkEsIDB4QjgsCiAKLTB4MjYsIDB4NDAsIDB4ODAsIDB4QkQsCi0weDNCLCAweDQ4LCAweDUwLCAweEJELAorCTB4MjYsIDB4NDAsIDB4ODAsIDB4QkQsCisJMHgzQiwgMHg0OCwgMHg1MCwgMHhCRCwKIAotMHgzRSwgMHg1NCwgMHg1NywgMHg5RiwKLTB4MDAsIDB4RTAsCi0weDgyLCAweEUxLAorCTB4M0UsIDB4NTQsIDB4NTcsIDB4OUYsCisJMHgwMCwgMHhFMCwKKwkweDgyLCAweEUxLAogCi0weDFFLCAweEFGLCAweDU5LCAweDlGLAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDFFLCAweEFGLCAweDU5LCAweDlGLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MjYsIDB4MzAsCi0weDI5LCAweDMwLAotMHg0OCwgMHgzQywgMHg0OCwgMHhBRCwKKwkweDI2LCAweDMwLAorCTB4MjksIDB4MzAsCisJMHg0OCwgMHgzQywgMHg0OCwgMHhBRCwKIAotMHgyQiwgMHg3MiwKLTB4QzIsIDB4RTEsCi0weDJDLCAweEMwLCAweDQ0LCAweEMyLAorCTB4MkIsIDB4NzIsCisJMHhDMiwgMHhFMSwKKwkweDJDLCAweEMwLCAweDQ0LCAweEMyLAogCi0weDA1LCAweDI0LCAweDM0LCAweEJGLAotMHgwRCwgMHgyNCwgMHgyQywgMHhCRiwKKwkweDA1LCAweDI0LCAweDM0LCAweEJGLAorCTB4MEQsIDB4MjQsIDB4MkMsIDB4QkYsCiAKLTB4MkQsIDB4NDYsIDB4NEUsIDB4QkYsCi0weDI1LCAweDQ2LCAweDU2LCAweEJGLAorCTB4MkQsIDB4NDYsIDB4NEUsIDB4QkYsCisJMHgyNSwgMHg0NiwgMHg1NiwgMHhCRiwKIAotMHgyMCwgMHgxRCwgMHg2RiwgMHg4RiwKLTB4MzIsIDB4M0UsIDB4NUYsIDB4RTksCisJMHgyMCwgMHgxRCwgMHg2RiwgMHg4RiwKKwkweDMyLCAweDNFLCAweDVGLCAweEU5LAogCi0weDNFLCAweDUwLCAweDU2LCAweDlGLAotMHgwMCwgMHhFMCwKLTB4M0IsIDB4MzAsCisJMHgzRSwgMHg1MCwgMHg1NiwgMHg5RiwKKwkweDAwLCAweEUwLAorCTB4M0IsIDB4MzAsCiAKLTB4MUUsIDB4OEYsIDB4NTEsIDB4OUYsCi0weDMzLCAweDFFLCAweDVGLCAweEU5LAorCTB4MUUsIDB4OEYsIDB4NTEsIDB4OUYsCisJMHgzMywgMHgxRSwgMHg1RiwgMHhFOSwKIAotMHgwNSwgMHg0NCwgMHg1NCwgMHhCMiwKLTB4MEQsIDB4NDQsIDB4NEMsIDB4QjIsCisJMHgwNSwgMHg0NCwgMHg1NCwgMHhCMiwKKwkweDBELCAweDQ0LCAweDRDLCAweEIyLAogCi0weDE5LCAweEMwLCAweEIwLCAweEU4LAotMHgzNCwgMHhDMCwgMHg0NCwgMHhDNCwKKwkweDE5LCAweEMwLCAweEIwLCAweEU4LAorCTB4MzQsIDB4QzAsIDB4NDQsIDB4QzQsCiAKLTB4MzMsIDB4NzMsCi0weDAwLCAweEUwLAotMHgzRSwgMHg2MiwgMHg1NywgMHg5RiwKKwkweDMzLCAweDczLAorCTB4MDAsIDB4RTAsCisJMHgzRSwgMHg2MiwgMHg1NywgMHg5RiwKIAotMHgxRSwgMHhBRiwgMHg1OSwgMHg5RiwKLTB4MDAsIDB4RTAsCi0weDBELCAweDIwLAorCTB4MUUsIDB4QUYsIDB4NTksIDB4OUYsCisJMHgwMCwgMHhFMCwKKwkweDBELCAweDIwLAogCi0weDg0LCAweDNFLCAweDU4LCAweEU5LAotMHgyOCwgMHgxRCwgMHg2RiwgMHg4RiwKKwkweDg0LCAweDNFLCAweDU4LCAweEU5LAorCTB4MjgsIDB4MUQsIDB4NkYsIDB4OEYsCiAKLTB4MDUsIDB4MjAsCi0weDAwLCAweEUwLAotMHg4NSwgMHgxRSwgMHg1OCwgMHhFOSwKKwkweDA1LCAweDIwLAorCTB4MDAsIDB4RTAsCisJMHg4NSwgMHgxRSwgMHg1OCwgMHhFOSwKIAotMHg5QiwgMHgzQiwgMHgzMywgMHhERiwKLTB4MjAsIDB4MjAsIDB4NDIsIDB4QUYsCisJMHg5QiwgMHgzQiwgMHgzMywgMHhERiwKKwkweDIwLCAweDIwLCAweDQyLCAweEFGLAogCi0weDMwLCAweDQyLCAweDU2LCAweDlGLAotMHg4MCwgMHgzRSwgMHg1NywgMHhFOSwKKwkweDMwLCAweDQyLCAweDU2LCAweDlGLAorCTB4ODAsIDB4M0UsIDB4NTcsIDB4RTksCiAKLTB4M0YsIDB4OEYsIDB4NTEsIDB4OUYsCi0weDMwLCAweDgwLCAweDVGLCAweEU5LAorCTB4M0YsIDB4OEYsIDB4NTEsIDB4OUYsCisJMHgzMCwgMHg4MCwgMHg1RiwgMHhFOSwKIAotMHgyOCwgMHgyOCwgMHgyNCwgMHhBRiwKLTB4ODEsIDB4MUUsIDB4NTcsIDB4RTksCisJMHgyOCwgMHgyOCwgMHgyNCwgMHhBRiwKKwkweDgxLCAweDFFLCAweDU3LCAweEU5LAogCi0weDA1LCAweDQ3LCAweDU3LCAweEJGLAotMHgwRCwgMHg0NywgMHg0RiwgMHhCRiwKKwkweDA1LCAweDQ3LCAweDU3LCAweEJGLAorCTB4MEQsIDB4NDcsIDB4NEYsIDB4QkYsCiAKLTB4ODgsIDB4ODAsIDB4NTgsIDB4RTksCi0weDFCLCAweDI5LCAweDFCLCAweERGLAorCTB4ODgsIDB4ODAsIDB4NTgsIDB4RTksCisJMHgxQiwgMHgyOSwgMHgxQiwgMHhERiwKIAotMHgzMCwgMHgxRCwgMHg2RiwgMHg4RiwKLTB4M0EsIDB4MzAsIDB4NEYsIDB4RTksCisJMHgzMCwgMHgxRCwgMHg2RiwgMHg4RiwKKwkweDNBLCAweDMwLCAweDRGLCAweEU5LAogCi0weDFDLCAweDMwLCAweDI2LCAweERGLAotMHgwOSwgMHhFMywKLTB4M0IsIDB4MDUsCisJMHgxQywgMHgzMCwgMHgyNiwgMHhERiwKKwkweDA5LCAweEUzLAorCTB4M0IsIDB4MDUsCiAKLTB4M0UsIDB4NTAsIDB4NTYsIDB4OUYsCi0weDNCLCAweDNGLCAweDRGLCAweEU5LAorCTB4M0UsIDB4NTAsIDB4NTYsIDB4OUYsCisJMHgzQiwgMHgzRiwgMHg0RiwgMHhFOSwKIAotMHgxRSwgMHg4RiwgMHg1MSwgMHg5RiwKLTB4MDAsIDB4RTAsCi0weEFDLCAweDIwLAorCTB4MUUsIDB4OEYsIDB4NTEsIDB4OUYsCisJMHgwMCwgMHhFMCwKKwkweEFDLCAweDIwLAogCi0weDJELCAweDQ0LCAweDRDLCAweEI0LAotMHgyQywgMHgxQywgMHhDMCwgMHhBRiwKKwkweDJELCAweDQ0LCAweDRDLCAweEI0LAorCTB4MkMsIDB4MUMsIDB4QzAsIDB4QUYsCiAKLTB4MjUsIDB4NDQsIDB4NTQsIDB4QjQsCi0weDAwLCAweEUwLAotMHhDOCwgMHgzMCwKKwkweDI1LCAweDQ0LCAweDU0LCAweEI0LAorCTB4MDAsIDB4RTAsCisJMHhDOCwgMHgzMCwKIAotMHgzMCwgMHg0NiwgMHgzMCwgMHhBRiwKLTB4MUIsIDB4MUIsIDB4NDgsIDB4QUYsCisJMHgzMCwgMHg0NiwgMHgzMCwgMHhBRiwKKwkweDFCLCAweDFCLCAweDQ4LCAweEFGLAogCi0weDAwLCAweEUwLAotMHgyNSwgMHgyMCwKLTB4MzgsIDB4MkMsIDB4NEYsIDB4RTksCisJMHgwMCwgMHhFMCwKKwkweDI1LCAweDIwLAorCTB4MzgsIDB4MkMsIDB4NEYsIDB4RTksCiAKLTB4ODYsIDB4ODAsIDB4NTcsIDB4RTksCi0weDM4LCAweDFELCAweDZGLCAweDhGLAorCTB4ODYsIDB4ODAsIDB4NTcsIDB4RTksCisJMHgzOCwgMHgxRCwgMHg2RiwgMHg4RiwKIAotMHgyOCwgMHg3NCwKLTB4MDAsIDB4RTAsCi0weDBELCAweDQ0LCAweDRDLCAweEIwLAorCTB4MjgsIDB4NzQsCisJMHgwMCwgMHhFMCwKKwkweDBELCAweDQ0LCAweDRDLCAweEIwLAogCi0weDA1LCAweDQ0LCAweDU0LCAweEIwLAotMHgyRCwgMHgyMCwKLTB4OUIsIDB4MTAsCisJMHgwNSwgMHg0NCwgMHg1NCwgMHhCMCwKKwkweDJELCAweDIwLAorCTB4OUIsIDB4MTAsCiAKLTB4ODIsIDB4M0UsIDB4NTcsIDB4RTksCi0weDMyLCAweEYwLCAweDFCLCAweENELAorCTB4ODIsIDB4M0UsIDB4NTcsIDB4RTksCisJMHgzMiwgMHhGMCwgMHgxQiwgMHhDRCwKIAotMHgxRSwgMHhCRCwgMHg1OSwgMHg5RiwKLTB4ODMsIDB4MUUsIDB4NTcsIDB4RTksCisJMHgxRSwgMHhCRCwgMHg1OSwgMHg5RiwKKwkweDgzLCAweDFFLCAweDU3LCAweEU5LAogCi0weDM4LCAweDQ3LCAweDM4LCAweEFGLAotMHgzNCwgMHgyMCwKLTB4MkEsIDB4MzAsCisJMHgzOCwgMHg0NywgMHgzOCwgMHhBRiwKKwkweDM0LCAweDIwLAorCTB4MkEsIDB4MzAsCiAKLTB4MDAsIDB4RTAsCi0weDBELCAweDIwLAotMHgzMiwgMHgyMCwKLTB4MDUsIDB4MjAsCisJMHgwMCwgMHhFMCwKKwkweDBELCAweDIwLAorCTB4MzIsIDB4MjAsCisJMHgwNSwgMHgyMCwKIAotMHg4NywgMHg4MCwgMHg1NywgMHhFOSwKLTB4MUYsIDB4NTQsIDB4NTcsIDB4OUYsCisJMHg4NywgMHg4MCwgMHg1NywgMHhFOSwKKwkweDFGLCAweDU0LCAweDU3LCAweDlGLAogCi0weDE3LCAweDQyLCAweDU2LCAweDlGLAotMHgwMCwgMHhFMCwKLTB4M0IsIDB4NkEsCisJMHgxNywgMHg0MiwgMHg1NiwgMHg5RiwKKwkweDAwLCAweEUwLAorCTB4M0IsIDB4NkEsCiAKLTB4M0YsIDB4OEYsIDB4NTEsIDB4OUYsCi0weDM3LCAweDFFLCAweDRGLCAweEU5LAorCTB4M0YsIDB4OEYsIDB4NTEsIDB4OUYsCisJMHgzNywgMHgxRSwgMHg0RiwgMHhFOSwKIAotMHgzNywgMHgzMiwgMHgyQSwgMHhBRiwKLTB4MDAsIDB4RTAsCi0weDMyLCAweDAwLAorCTB4MzcsIDB4MzIsIDB4MkEsIDB4QUYsCisJMHgwMCwgMHhFMCwKKwkweDMyLCAweDAwLAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgyNywgMHhDMCwgMHg0NCwgMHhDMCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MjcsIDB4QzAsIDB4NDQsIDB4QzAsCiAKLTB4MzYsIDB4MUYsIDB4NEYsIDB4RTksCi0weDFGLCAweDFGLCAweDI2LCAweERGLAorCTB4MzYsIDB4MUYsIDB4NEYsIDB4RTksCisJMHgxRiwgMHgxRiwgMHgyNiwgMHhERiwKIAotMHgzNywgMHgxQiwgMHgzNywgMHhCRiwKLTB4MTcsIDB4MjYsIDB4MTcsIDB4REYsCisJMHgzNywgMHgxQiwgMHgzNywgMHhCRiwKKwkweDE3LCAweDI2LCAweDE3LCAweERGLAogCi0weDNFLCAweDE3LCAweDRGLCAweEU5LAotMHgzRiwgMHgzRiwgMHg0RiwgMHhFOSwKKwkweDNFLCAweDE3LCAweDRGLCAweEU5LAorCTB4M0YsIDB4M0YsIDB4NEYsIDB4RTksCiAKLTB4MzQsIDB4MUYsIDB4MzQsIDB4QUYsCi0weDJCLCAweDA1LAotMHhBNywgMHgyMCwKKwkweDM0LCAweDFGLCAweDM0LCAweEFGLAorCTB4MkIsIDB4MDUsCisJMHhBNywgMHgyMCwKIAotMHgzMywgMHgyQiwgMHgzNywgMHhERiwKLTB4MjcsIDB4MTcsIDB4QzAsIDB4QUYsCisJMHgzMywgMHgyQiwgMHgzNywgMHhERiwKKwkweDI3LCAweDE3LCAweEMwLCAweEFGLAogCi0weDM0LCAweDgwLCAweDRGLCAweEU5LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDM0LCAweDgwLCAweDRGLCAweEU5LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MkQsIDB4NDQsIDB4NEMsIDB4QjYsCi0weDI1LCAweDQ0LCAweDU0LCAweEI2LAorCTB4MkQsIDB4NDQsIDB4NEMsIDB4QjYsCisJMHgyNSwgMHg0NCwgMHg1NCwgMHhCNiwKIAotMHgwMywgMHg4MCwgMHgyQSwgMHhFQSwKLTB4MTcsIDB4QzEsIDB4MkIsIDB4QkQsCisJMHgwMywgMHg4MCwgMHgyQSwgMHhFQSwKKwkweDE3LCAweEMxLCAweDJCLCAweEJELAogCi0weDJELCAweDIwLAotMHgyNSwgMHgyMCwKLTB4MDcsIDB4QzAsIDB4NDQsIDB4QzYsCisJMHgyRCwgMHgyMCwKKwkweDI1LCAweDIwLAorCTB4MDcsIDB4QzAsIDB4NDQsIDB4QzYsCiAKLTB4QjMsIDB4NjgsCi0weDk3LCAweDI1LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweEIzLCAweDY4LAorCTB4OTcsIDB4MjUsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgzMywgMHhDMCwgMHgzMywgMHhBRiwKLTB4M0MsIDB4MjcsIDB4NEYsIDB4RTksCisJMHgzMywgMHhDMCwgMHgzMywgMHhBRiwKKwkweDNDLCAweDI3LCAweDRGLCAweEU5LAogCi0weDFGLCAweDYyLCAweDU3LCAweDlGLAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDFGLCAweDYyLCAweDU3LCAweDlGLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4M0YsIDB4M0QsIDB4NUQsIDB4OUYsCi0weDAwLCAweEUwLAotMHgwNywgMHgyMCwKKwkweDNGLCAweDNELCAweDVELCAweDlGLAorCTB4MDAsIDB4RTAsCisJMHgwNywgMHgyMCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MjgsIDB4MTksIDB4NjAsIDB4RUMsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDI4LCAweDE5LCAweDYwLCAweEVDLAogCi0weEIzLCAweDA1LAotMHgwMCwgMHhFMCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHhCMywgMHgwNSwKKwkweDAwLCAweEUwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MjMsIDB4M0IsIDB4MzMsIDB4QUQsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MjMsIDB4M0IsIDB4MzMsIDB4QUQsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgxRiwgMHgyNiwgMHgxRiwgMHhERiwKLTB4OUQsIDB4MUYsIDB4NEYsIDB4RTksCisJMHgxRiwgMHgyNiwgMHgxRiwgMHhERiwKKwkweDlELCAweDFGLCAweDRGLCAweEU5LAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0weDlFLCAweDNGLCAweDRGLCAweEU5LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHg5RSwgMHgzRiwgMHg0RiwgMHhFOSwKIAotMHgwNywgMHgwNywgMHgxRiwgMHhBRiwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwNywgMHgwNywgMHgxRiwgMHhBRiwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4OUMsIDB4ODAsIDB4NEYsIDB4RTksCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4OUMsIDB4ODAsIDB4NEYsIDB4RTksCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4NTcsIDB4MzksIDB4MjAsIDB4RTksCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDU3LCAweDM5LCAweDIwLCAweEU5LAogCi0weDE2LCAweDI4LCAweDIwLCAweEU5LAotMHgxRCwgMHgzQiwgMHgyMCwgMHhFOSwKKwkweDE2LCAweDI4LCAweDIwLCAweEU5LAorCTB4MUQsIDB4M0IsIDB4MjAsIDB4RTksCiAKLTB4MUUsIDB4MkIsIDB4MjAsIDB4RTksCi0weDJCLCAweDMyLCAweDIwLCAweEU5LAorCTB4MUUsIDB4MkIsIDB4MjAsIDB4RTksCisJMHgyQiwgMHgzMiwgMHgyMCwgMHhFOSwKIAotMHgxQywgMHgyMywgMHgyMCwgMHhFOSwKLTB4NTcsIDB4MzYsIDB4MjAsIDB4RTksCisJMHgxQywgMHgyMywgMHgyMCwgMHhFOSwKKwkweDU3LCAweDM2LCAweDIwLCAweEU5LAogCi0weDAwLCAweDgwLCAweEEwLCAweEU5LAotMHg0MCwgMHg0MCwgMHhEOCwgMHhFQywKKwkweDAwLCAweDgwLCAweEEwLCAweEU5LAorCTB4NDAsIDB4NDAsIDB4RDgsIDB4RUMsCiAKLTB4RkYsIDB4ODAsIDB4QzAsIDB4RTksCi0weDkwLCAweEUyLAotMHgwMCwgMHhFMCwKKwkweEZGLCAweDgwLCAweEMwLCAweEU5LAorCTB4OTAsIDB4RTIsCisJMHgwMCwgMHhFMCwKIAotMHg3QSwgMHhGRiwgMHgyMCwgMHhFQSwKLTB4MTksIDB4QzgsIDB4QzEsIDB4Q0QsCisJMHg3QSwgMHhGRiwgMHgyMCwgMHhFQSwKKwkweDE5LCAweEM4LCAweEMxLCAweENELAogCi0weDFGLCAweEQ3LCAweDE4LCAweEJELAotMHgzRiwgMHhENywgMHgyMiwgMHhCRCwKKwkweDFGLCAweEQ3LCAweDE4LCAweEJELAorCTB4M0YsIDB4RDcsIDB4MjIsIDB4QkQsCiAKLTB4OUYsIDB4NDEsIDB4NDksIDB4QkQsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4OUYsIDB4NDEsIDB4NDksIDB4QkQsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgyNSwgMHg0MSwgMHg0OSwgMHhCRCwKLTB4MkQsIDB4NDEsIDB4NTEsIDB4QkQsCisJMHgyNSwgMHg0MSwgMHg0OSwgMHhCRCwKKwkweDJELCAweDQxLCAweDUxLCAweEJELAogCi0weDBELCAweDgwLCAweDA3LCAweEVBLAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDBELCAweDgwLCAweDA3LCAweEVBLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MzUsIDB4NDAsIDB4NDgsIDB4QkQsCi0weDNELCAweDQwLCAweDUwLCAweEJELAorCTB4MzUsIDB4NDAsIDB4NDgsIDB4QkQsCisJMHgzRCwgMHg0MCwgMHg1MCwgMHhCRCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MjUsIDB4MzAsCi0weDJELCAweDMwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgyNSwgMHgzMCwKKwkweDJELCAweDMwLAogCi0weDM1LCAweDMwLAotMHhCNSwgMHgzMCwKLTB4QkQsIDB4MzAsCi0weDNELCAweDMwLAorCTB4MzUsIDB4MzAsCisJMHhCNSwgMHgzMCwKKwkweEJELCAweDMwLAorCTB4M0QsIDB4MzAsCiAKLTB4OUMsIDB4QTcsIDB4NUIsIDB4OUYsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4OUMsIDB4QTcsIDB4NUIsIDB4OUYsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDc5LCAweEZGLCAweDBBLCAweEVBLAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDc5LCAweEZGLCAweDBBLCAweEVBLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4QzksIDB4NDEsIDB4QzgsIDB4RUMsCi0weDQyLCAweEUxLAotMHgwMCwgMHhFMCwKKwkweEM5LCAweDQxLCAweEM4LCAweEVDLAorCTB4NDIsIDB4RTEsCisJMHgwMCwgMHhFMCwKIAotMHg3NywgMHhGRiwgMHgyMCwgMHhFQSwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHg3NywgMHhGRiwgMHgyMCwgMHhFQSwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4QzgsIDB4NDAsIDB4QzAsIDB4RUMsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4QzgsIDB4NDAsIDB4QzAsIDB4RUMsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHg3NCwgMHhGRiwgMHgyMCwgMHhFQSwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHg3NCwgMHhGRiwgMHgyMCwgMHhFQSwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHdhcnBfZzIwMF90Z3phZltdID0gewogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MDAsIDB4OTgsIDB4QTAsIDB4RTksCi0weDQwLCAweDQwLCAweEQ4LCAweEVDLAorCTB4MDAsIDB4OTgsIDB4QTAsIDB4RTksCisJMHg0MCwgMHg0MCwgMHhEOCwgMHhFQywKIAotMHhGRiwgMHg4MCwgMHhDMCwgMHhFOSwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHhGRiwgMHg4MCwgMHhDMCwgMHhFOSwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDFGLCAweEQ3LCAweDE4LCAweEJELAotMHgzRiwgMHhENywgMHgyMiwgMHhCRCwKKwkweDFGLCAweEQ3LCAweDE4LCAweEJELAorCTB4M0YsIDB4RDcsIDB4MjIsIDB4QkQsCiAKLTB4ODEsIDB4MDQsCi0weDg5LCAweDA0LAotMHgwMSwgMHgwNCwKLTB4MDksIDB4MDQsCisJMHg4MSwgMHgwNCwKKwkweDg5LCAweDA0LAorCTB4MDEsIDB4MDQsCisJMHgwOSwgMHgwNCwKIAotMHhDOSwgMHg0MSwgMHhDMCwgMHhFQywKLTB4MTEsIDB4MDQsCi0weDAwLCAweEUwLAorCTB4QzksIDB4NDEsIDB4QzAsIDB4RUMsCisJMHgxMSwgMHgwNCwKKwkweDAwLCAweEUwLAogCi0weDQxLCAweENDLCAweDQxLCAweENELAotMHg0OSwgMHhDQywgMHg0OSwgMHhDRCwKKwkweDQxLCAweENDLCAweDQxLCAweENELAorCTB4NDksIDB4Q0MsIDB4NDksIDB4Q0QsCiAKLTB4RDEsIDB4NDEsIDB4QzAsIDB4RUMsCi0weDUxLCAweENDLCAweDUxLCAweENELAorCTB4RDEsIDB4NDEsIDB4QzAsIDB4RUMsCisJMHg1MSwgMHhDQywgMHg1MSwgMHhDRCwKIAotMHg4MCwgMHgwNCwKLTB4MTAsIDB4MDQsCi0weDA4LCAweDA0LAotMHgwMCwgMHhFMCwKKwkweDgwLCAweDA0LAorCTB4MTAsIDB4MDQsCisJMHgwOCwgMHgwNCwKKwkweDAwLCAweEUwLAogCi0weDAwLCAweENDLCAweEMwLCAweENELAotMHhEMSwgMHg0OSwgMHhDMCwgMHhFQywKKwkweDAwLCAweENDLCAweEMwLCAweENELAorCTB4RDEsIDB4NDksIDB4QzAsIDB4RUMsCiAKLTB4OEEsIDB4MUYsIDB4MjAsIDB4RTksCi0weDhCLCAweDNGLCAweDIwLCAweEU5LAorCTB4OEEsIDB4MUYsIDB4MjAsIDB4RTksCisJMHg4QiwgMHgzRiwgMHgyMCwgMHhFOSwKIAotMHg0MSwgMHgzQywgMHg0MSwgMHhBRCwKLTB4NDksIDB4M0MsIDB4NDksIDB4QUQsCisJMHg0MSwgMHgzQywgMHg0MSwgMHhBRCwKKwkweDQ5LCAweDNDLCAweDQ5LCAweEFELAogCi0weDEwLCAweENDLCAweDEwLCAweENELAotMHgwOCwgMHhDQywgMHgwOCwgMHhDRCwKKwkweDEwLCAweENDLCAweDEwLCAweENELAorCTB4MDgsIDB4Q0MsIDB4MDgsIDB4Q0QsCiAKLTB4QjksIDB4NDEsIDB4NDksIDB4QkIsCi0weDFGLCAweEYwLCAweDQxLCAweENELAorCTB4QjksIDB4NDEsIDB4NDksIDB4QkIsCisJMHgxRiwgMHhGMCwgMHg0MSwgMHhDRCwKIAotMHg1MSwgMHgzQywgMHg1MSwgMHhBRCwKLTB4MDAsIDB4OTgsIDB4ODAsIDB4RTksCisJMHg1MSwgMHgzQywgMHg1MSwgMHhBRCwKKwkweDAwLCAweDk4LCAweDgwLCAweEU5LAogCi0weDgzLCAweDgwLCAweDA3LCAweEVBLAotMHgyNCwgMHgxRiwgMHgyMCwgMHhFOSwKKwkweDgzLCAweDgwLCAweDA3LCAweEVBLAorCTB4MjQsIDB4MUYsIDB4MjAsIDB4RTksCiAKLTB4MjEsIDB4NDUsIDB4ODAsIDB4RTgsCi0weDFBLCAweDRELCAweDgwLCAweEU4LAorCTB4MjEsIDB4NDUsIDB4ODAsIDB4RTgsCisJMHgxQSwgMHg0RCwgMHg4MCwgMHhFOCwKIAotMHgzMSwgMHg1NSwgMHg4MCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgzMSwgMHg1NSwgMHg4MCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDE1LCAweDQxLCAweDQ5LCAweEJELAotMHgxRCwgMHg0MSwgMHg1MSwgMHhCRCwKKwkweDE1LCAweDQxLCAweDQ5LCAweEJELAorCTB4MUQsIDB4NDEsIDB4NTEsIDB4QkQsCiAKLTB4MkUsIDB4NDEsIDB4MkEsIDB4QjgsCi0weDM0LCAweDUzLCAweEEwLCAweEU4LAorCTB4MkUsIDB4NDEsIDB4MkEsIDB4QjgsCisJMHgzNCwgMHg1MywgMHhBMCwgMHhFOCwKIAotMHgxNSwgMHgzMCwKLTB4MUQsIDB4MzAsCi0weDU4LCAweEUzLAotMHgwMCwgMHhFMCwKKwkweDE1LCAweDMwLAorCTB4MUQsIDB4MzAsCisJMHg1OCwgMHhFMywKKwkweDAwLCAweEUwLAogCi0weEI1LCAweDQwLCAweDQ4LCAweEJELAotMHgzRCwgMHg0MCwgMHg1MCwgMHhCRCwKKwkweEI1LCAweDQwLCAweDQ4LCAweEJELAorCTB4M0QsIDB4NDAsIDB4NTAsIDB4QkQsCiAKLTB4MjQsIDB4NDMsIDB4QTAsIDB4RTgsCi0weDJDLCAweDRCLCAweEEwLCAweEU4LAorCTB4MjQsIDB4NDMsIDB4QTAsIDB4RTgsCisJMHgyQywgMHg0QiwgMHhBMCwgMHhFOCwKIAotMHgxNSwgMHg3MiwKLTB4MDksIDB4RTMsCi0weDAwLCAweEUwLAotMHgxRCwgMHg3MiwKKwkweDE1LCAweDcyLAorCTB4MDksIDB4RTMsCisJMHgwMCwgMHhFMCwKKwkweDFELCAweDcyLAogCi0weDM1LCAweDMwLAotMHhCNSwgMHgzMCwKLTB4QkQsIDB4MzAsCi0weDNELCAweDMwLAorCTB4MzUsIDB4MzAsCisJMHhCNSwgMHgzMCwKKwkweEJELCAweDMwLAorCTB4M0QsIDB4MzAsCiAKLTB4OUMsIDB4OTcsIDB4NTcsIDB4OUYsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4OUMsIDB4OTcsIDB4NTcsIDB4OUYsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHg2QywgMHg2NCwgMHhDOCwgMHhFQywKLTB4OTgsIDB4RTEsCi0weEI1LCAweDA1LAorCTB4NkMsIDB4NjQsIDB4QzgsIDB4RUMsCisJMHg5OCwgMHhFMSwKKwkweEI1LCAweDA1LAogCi0weEJELCAweDA1LAotMHgyRSwgMHgzMCwKLTB4MzIsIDB4QzAsIDB4QTAsIDB4RTgsCisJMHhCRCwgMHgwNSwKKwkweDJFLCAweDMwLAorCTB4MzIsIDB4QzAsIDB4QTAsIDB4RTgsCiAKLTB4MzMsIDB4QzAsIDB4QTAsIDB4RTgsCi0weDc0LCAweDY0LCAweEM4LCAweEVDLAorCTB4MzMsIDB4QzAsIDB4QTAsIDB4RTgsCisJMHg3NCwgMHg2NCwgMHhDOCwgMHhFQywKIAotMHg0MCwgMHgzQywgMHg0MCwgMHhBRCwKLTB4MzIsIDB4NkEsCi0weDJBLCAweDMwLAorCTB4NDAsIDB4M0MsIDB4NDAsIDB4QUQsCisJMHgzMiwgMHg2QSwKKwkweDJBLCAweDMwLAogCi0weDIwLCAweDczLAotMHgzMywgMHg2QSwKLTB4MDAsIDB4RTAsCi0weDI4LCAweDczLAorCTB4MjAsIDB4NzMsCisJMHgzMywgMHg2QSwKKwkweDAwLCAweEUwLAorCTB4MjgsIDB4NzMsCiAKLTB4MUMsIDB4NzIsCi0weDgzLCAweEUyLAotMHg2RiwgMHg4MCwgMHgxNSwgMHhFQSwKKwkweDFDLCAweDcyLAorCTB4ODMsIDB4RTIsCisJMHg2RiwgMHg4MCwgMHgxNSwgMHhFQSwKIAotMHhCOCwgMHgzRCwgMHgyOCwgMHhERiwKLTB4MzAsIDB4MzUsIDB4MjAsIDB4REYsCisJMHhCOCwgMHgzRCwgMHgyOCwgMHhERiwKKwkweDMwLCAweDM1LCAweDIwLCAweERGLAogCi0weDQwLCAweDMwLAotMHgwMCwgMHhFMCwKLTB4Q0MsIDB4RTIsCi0weDY0LCAweDcyLAorCTB4NDAsIDB4MzAsCisJMHgwMCwgMHhFMCwKKwkweENDLCAweEUyLAorCTB4NjQsIDB4NzIsCiAKLTB4MjUsIDB4NDIsIDB4NTIsIDB4QkYsCi0weDJELCAweDQyLCAweDRBLCAweEJGLAorCTB4MjUsIDB4NDIsIDB4NTIsIDB4QkYsCisJMHgyRCwgMHg0MiwgMHg0QSwgMHhCRiwKIAotMHgzMCwgMHgyRSwgMHgzMCwgMHhERiwKLTB4MzgsIDB4MkUsIDB4MzgsIDB4REYsCisJMHgzMCwgMHgyRSwgMHgzMCwgMHhERiwKKwkweDM4LCAweDJFLCAweDM4LCAweERGLAogCi0weDE4LCAweDFELCAweDQ1LCAweEU5LAotMHgxRSwgMHgxNSwgMHg0NSwgMHhFOSwKKwkweDE4LCAweDFELCAweDQ1LCAweEU5LAorCTB4MUUsIDB4MTUsIDB4NDUsIDB4RTksCiAKLTB4MkIsIDB4NDksIDB4NTEsIDB4QkQsCi0weDAwLCAweEUwLAotMHgxRiwgMHg3MywKKwkweDJCLCAweDQ5LCAweDUxLCAweEJELAorCTB4MDAsIDB4RTAsCisJMHgxRiwgMHg3MywKIAotMHgzOCwgMHgzOCwgMHg0MCwgMHhBRiwKLTB4MzAsIDB4MzAsIDB4NDAsIDB4QUYsCisJMHgzOCwgMHgzOCwgMHg0MCwgMHhBRiwKKwkweDMwLCAweDMwLCAweDQwLCAweEFGLAogCi0weDI0LCAweDFGLCAweDI0LCAweERGLAotMHgxRCwgMHgzMiwgMHgyMCwgMHhFOSwKKwkweDI0LCAweDFGLCAweDI0LCAweERGLAorCTB4MUQsIDB4MzIsIDB4MjAsIDB4RTksCiAKLTB4MkMsIDB4MUYsIDB4MkMsIDB4REYsCi0weDFBLCAweDMzLCAweDIwLCAweEU5LAorCTB4MkMsIDB4MUYsIDB4MkMsIDB4REYsCisJMHgxQSwgMHgzMywgMHgyMCwgMHhFOSwKIAotMHhCMCwgMHgxMCwKLTB4MDgsIDB4RTMsCi0weDQwLCAweDEwLAotMHhCOCwgMHgxMCwKKwkweEIwLCAweDEwLAorCTB4MDgsIDB4RTMsCisJMHg0MCwgMHgxMCwKKwkweEI4LCAweDEwLAogCi0weDI2LCAweEYwLCAweDMwLCAweENELAotMHgyRiwgMHhGMCwgMHgzOCwgMHhDRCwKKwkweDI2LCAweEYwLCAweDMwLCAweENELAorCTB4MkYsIDB4RjAsIDB4MzgsIDB4Q0QsCiAKLTB4MkIsIDB4ODAsIDB4MjAsIDB4RTksCi0weDJBLCAweDgwLCAweDIwLCAweEU5LAorCTB4MkIsIDB4ODAsIDB4MjAsIDB4RTksCisJMHgyQSwgMHg4MCwgMHgyMCwgMHhFOSwKIAotMHhBNiwgMHgyMCwKLTB4ODgsIDB4RTIsCi0weDAwLCAweEUwLAotMHhBRiwgMHgyMCwKKwkweEE2LCAweDIwLAorCTB4ODgsIDB4RTIsCisJMHgwMCwgMHhFMCwKKwkweEFGLCAweDIwLAogCi0weDI4LCAweDJBLCAweDI2LCAweEFGLAotMHgyMCwgMHgyQSwgMHhDMCwgMHhBRiwKKwkweDI4LCAweDJBLCAweDI2LCAweEFGLAorCTB4MjAsIDB4MkEsIDB4QzAsIDB4QUYsCiAKLTB4MzQsIDB4MUYsIDB4MzQsIDB4REYsCi0weDQ2LCAweDI0LCAweDQ2LCAweERGLAorCTB4MzQsIDB4MUYsIDB4MzQsIDB4REYsCisJMHg0NiwgMHgyNCwgMHg0NiwgMHhERiwKIAotMHgyOCwgMHgzMCwgMHg4MCwgMHhCRiwKLTB4MjAsIDB4MzgsIDB4ODAsIDB4QkYsCisJMHgyOCwgMHgzMCwgMHg4MCwgMHhCRiwKKwkweDIwLCAweDM4LCAweDgwLCAweEJGLAogCi0weDQ3LCAweDI0LCAweDQ3LCAweERGLAotMHg0RSwgMHgyQywgMHg0RSwgMHhERiwKKwkweDQ3LCAweDI0LCAweDQ3LCAweERGLAorCTB4NEUsIDB4MkMsIDB4NEUsIDB4REYsCiAKLTB4NEYsIDB4MkMsIDB4NEYsIDB4REYsCi0weDU2LCAweDM0LCAweDU2LCAweERGLAorCTB4NEYsIDB4MkMsIDB4NEYsIDB4REYsCisJMHg1NiwgMHgzNCwgMHg1NiwgMHhERiwKIAotMHgyOCwgMHgxNSwgMHgyOCwgMHhERiwKLTB4MjAsIDB4MUQsIDB4MjAsIDB4REYsCisJMHgyOCwgMHgxNSwgMHgyOCwgMHhERiwKKwkweDIwLCAweDFELCAweDIwLCAweERGLAogCi0weDU3LCAweDM0LCAweDU3LCAweERGLAotMHgwMCwgMHhFMCwKLTB4MUQsIDB4MDUsCisJMHg1NywgMHgzNCwgMHg1NywgMHhERiwKKwkweDAwLCAweEUwLAorCTB4MUQsIDB4MDUsCiAKLTB4MDQsIDB4ODAsIDB4MTAsIDB4RUEsCi0weDg5LCAweEUyLAotMHgyQiwgMHgzMCwKKwkweDA0LCAweDgwLCAweDEwLCAweEVBLAorCTB4ODksIDB4RTIsCisJMHgyQiwgMHgzMCwKIAotMHgzRiwgMHhDMSwgMHgxRCwgMHhCRCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgzRiwgMHhDMSwgMHgxRCwgMHhCRCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4QTAsIDB4NjgsCi0weEJGLCAweDI1LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweEEwLCAweDY4LAorCTB4QkYsIDB4MjUsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgyMCwgMHhDMCwgMHgyMCwgMHhBRiwKLTB4MjgsIDB4MDUsCi0weDk3LCAweDc0LAorCTB4MjAsIDB4QzAsIDB4MjAsIDB4QUYsCisJMHgyOCwgMHgwNSwKKwkweDk3LCAweDc0LAogCi0weDAwLCAweEUwLAotMHgyQSwgMHgxMCwKLTB4MTYsIDB4QzAsIDB4MjAsIDB4RTksCisJMHgwMCwgMHhFMCwKKwkweDJBLCAweDEwLAorCTB4MTYsIDB4QzAsIDB4MjAsIDB4RTksCiAKLTB4MDQsIDB4ODAsIDB4MTAsIDB4RUEsCi0weDhDLCAweEUyLAotMHg5NSwgMHgwNSwKKwkweDA0LCAweDgwLCAweDEwLCAweEVBLAorCTB4OEMsIDB4RTIsCisJMHg5NSwgMHgwNSwKIAotMHgyOCwgMHhDMSwgMHgyOCwgMHhBRCwKLTB4MUYsIDB4QzEsIDB4MTUsIDB4QkQsCisJMHgyOCwgMHhDMSwgMHgyOCwgMHhBRCwKKwkweDFGLCAweEMxLCAweDE1LCAweEJELAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4QTgsIDB4NjcsCi0weDlGLCAweDZCLAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweEE4LCAweDY3LAorCTB4OUYsIDB4NkIsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgyOCwgMHhDMCwgMHgyOCwgMHhBRCwKLTB4MUQsIDB4MjUsCi0weDIwLCAweDA1LAorCTB4MjgsIDB4QzAsIDB4MjgsIDB4QUQsCisJMHgxRCwgMHgyNSwKKwkweDIwLCAweDA1LAogCi0weDI4LCAweDMyLCAweDgwLCAweEFELAotMHg0MCwgMHgyQSwgMHg0MCwgMHhCRCwKKwkweDI4LCAweDMyLCAweDgwLCAweEFELAorCTB4NDAsIDB4MkEsIDB4NDAsIDB4QkQsCiAKLTB4MUMsIDB4ODAsIDB4MjAsIDB4RTksCi0weDIwLCAweDMzLCAweDIwLCAweEFELAorCTB4MUMsIDB4ODAsIDB4MjAsIDB4RTksCisJMHgyMCwgMHgzMywgMHgyMCwgMHhBRCwKIAotMHgyMCwgMHg3MywKLTB4MDAsIDB4RTAsCi0weEI2LCAweDQ5LCAweDUxLCAweEJCLAorCTB4MjAsIDB4NzMsCisJMHgwMCwgMHhFMCwKKwkweEI2LCAweDQ5LCAweDUxLCAweEJCLAogCi0weDI2LCAweDJGLCAweEIwLCAweEU4LAotMHgxOSwgMHgyMCwgMHgyMCwgMHhFOSwKKwkweDI2LCAweDJGLCAweEIwLCAweEU4LAorCTB4MTksIDB4MjAsIDB4MjAsIDB4RTksCiAKLTB4MzUsIDB4MjAsIDB4MzUsIDB4REYsCi0weDNELCAweDIwLCAweDNELCAweERGLAorCTB4MzUsIDB4MjAsIDB4MzUsIDB4REYsCisJMHgzRCwgMHgyMCwgMHgzRCwgMHhERiwKIAotMHgxNSwgMHgyMCwgMHgxNSwgMHhERiwKLTB4MUQsIDB4MjAsIDB4MUQsIDB4REYsCisJMHgxNSwgMHgyMCwgMHgxNSwgMHhERiwKKwkweDFELCAweDIwLCAweDFELCAweERGLAogCi0weDI2LCAweEQwLCAweDI2LCAweENELAotMHgyOSwgMHg0OSwgMHgyQSwgMHhCOCwKKwkweDI2LCAweEQwLCAweDI2LCAweENELAorCTB4MjksIDB4NDksIDB4MkEsIDB4QjgsCiAKLTB4MjYsIDB4NDAsIDB4ODAsIDB4QkQsCi0weDNCLCAweDQ4LCAweDUwLCAweEJELAorCTB4MjYsIDB4NDAsIDB4ODAsIDB4QkQsCisJMHgzQiwgMHg0OCwgMHg1MCwgMHhCRCwKIAotMHgzRSwgMHg1NCwgMHg1NywgMHg5RiwKLTB4MDAsIDB4RTAsCi0weDgyLCAweEUxLAorCTB4M0UsIDB4NTQsIDB4NTcsIDB4OUYsCisJMHgwMCwgMHhFMCwKKwkweDgyLCAweEUxLAogCi0weDFFLCAweEFGLCAweDU5LCAweDlGLAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDFFLCAweEFGLCAweDU5LCAweDlGLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MjYsIDB4MzAsCi0weDI5LCAweDMwLAotMHg0OCwgMHgzQywgMHg0OCwgMHhBRCwKKwkweDI2LCAweDMwLAorCTB4MjksIDB4MzAsCisJMHg0OCwgMHgzQywgMHg0OCwgMHhBRCwKIAotMHgyQiwgMHg3MiwKLTB4QzIsIDB4RTEsCi0weDJDLCAweEMwLCAweDQ0LCAweEMyLAorCTB4MkIsIDB4NzIsCisJMHhDMiwgMHhFMSwKKwkweDJDLCAweEMwLCAweDQ0LCAweEMyLAogCi0weDA1LCAweDI0LCAweDM0LCAweEJGLAotMHgwRCwgMHgyNCwgMHgyQywgMHhCRiwKKwkweDA1LCAweDI0LCAweDM0LCAweEJGLAorCTB4MEQsIDB4MjQsIDB4MkMsIDB4QkYsCiAKLTB4MkQsIDB4NDYsIDB4NEUsIDB4QkYsCi0weDI1LCAweDQ2LCAweDU2LCAweEJGLAorCTB4MkQsIDB4NDYsIDB4NEUsIDB4QkYsCisJMHgyNSwgMHg0NiwgMHg1NiwgMHhCRiwKIAotMHgyMCwgMHgxRCwgMHg2RiwgMHg4RiwKLTB4MzIsIDB4M0UsIDB4NUYsIDB4RTksCisJMHgyMCwgMHgxRCwgMHg2RiwgMHg4RiwKKwkweDMyLCAweDNFLCAweDVGLCAweEU5LAogCi0weDNFLCAweDUwLCAweDU2LCAweDlGLAotMHgwMCwgMHhFMCwKLTB4M0IsIDB4MzAsCisJMHgzRSwgMHg1MCwgMHg1NiwgMHg5RiwKKwkweDAwLCAweEUwLAorCTB4M0IsIDB4MzAsCiAKLTB4MUUsIDB4OEYsIDB4NTEsIDB4OUYsCi0weDMzLCAweDFFLCAweDVGLCAweEU5LAorCTB4MUUsIDB4OEYsIDB4NTEsIDB4OUYsCisJMHgzMywgMHgxRSwgMHg1RiwgMHhFOSwKIAotMHgwNSwgMHg0NCwgMHg1NCwgMHhCMiwKLTB4MEQsIDB4NDQsIDB4NEMsIDB4QjIsCisJMHgwNSwgMHg0NCwgMHg1NCwgMHhCMiwKKwkweDBELCAweDQ0LCAweDRDLCAweEIyLAogCi0weDE5LCAweEMwLCAweEIwLCAweEU4LAotMHgzNCwgMHhDMCwgMHg0NCwgMHhDNCwKKwkweDE5LCAweEMwLCAweEIwLCAweEU4LAorCTB4MzQsIDB4QzAsIDB4NDQsIDB4QzQsCiAKLTB4MzMsIDB4NzMsCi0weDAwLCAweEUwLAotMHgzRSwgMHg2MiwgMHg1NywgMHg5RiwKKwkweDMzLCAweDczLAorCTB4MDAsIDB4RTAsCisJMHgzRSwgMHg2MiwgMHg1NywgMHg5RiwKIAotMHgxRSwgMHhBRiwgMHg1OSwgMHg5RiwKLTB4MDAsIDB4RTAsCi0weDBELCAweDIwLAorCTB4MUUsIDB4QUYsIDB4NTksIDB4OUYsCisJMHgwMCwgMHhFMCwKKwkweDBELCAweDIwLAogCi0weDg0LCAweDNFLCAweDU4LCAweEU5LAotMHgyOCwgMHgxRCwgMHg2RiwgMHg4RiwKKwkweDg0LCAweDNFLCAweDU4LCAweEU5LAorCTB4MjgsIDB4MUQsIDB4NkYsIDB4OEYsCiAKLTB4MDUsIDB4MjAsCi0weDAwLCAweEUwLAotMHg4NSwgMHgxRSwgMHg1OCwgMHhFOSwKKwkweDA1LCAweDIwLAorCTB4MDAsIDB4RTAsCisJMHg4NSwgMHgxRSwgMHg1OCwgMHhFOSwKIAotMHg5QiwgMHgzQiwgMHgzMywgMHhERiwKLTB4MjAsIDB4MjAsIDB4NDIsIDB4QUYsCisJMHg5QiwgMHgzQiwgMHgzMywgMHhERiwKKwkweDIwLCAweDIwLCAweDQyLCAweEFGLAogCi0weDMwLCAweDQyLCAweDU2LCAweDlGLAotMHg4MCwgMHgzRSwgMHg1NywgMHhFOSwKKwkweDMwLCAweDQyLCAweDU2LCAweDlGLAorCTB4ODAsIDB4M0UsIDB4NTcsIDB4RTksCiAKLTB4M0YsIDB4OEYsIDB4NTEsIDB4OUYsCi0weDMwLCAweDgwLCAweDVGLCAweEU5LAorCTB4M0YsIDB4OEYsIDB4NTEsIDB4OUYsCisJMHgzMCwgMHg4MCwgMHg1RiwgMHhFOSwKIAotMHgyOCwgMHgyOCwgMHgyNCwgMHhBRiwKLTB4ODEsIDB4MUUsIDB4NTcsIDB4RTksCisJMHgyOCwgMHgyOCwgMHgyNCwgMHhBRiwKKwkweDgxLCAweDFFLCAweDU3LCAweEU5LAogCi0weDA1LCAweDQ3LCAweDU3LCAweEJGLAotMHgwRCwgMHg0NywgMHg0RiwgMHhCRiwKKwkweDA1LCAweDQ3LCAweDU3LCAweEJGLAorCTB4MEQsIDB4NDcsIDB4NEYsIDB4QkYsCiAKLTB4ODgsIDB4ODAsIDB4NTgsIDB4RTksCi0weDFCLCAweDI5LCAweDFCLCAweERGLAorCTB4ODgsIDB4ODAsIDB4NTgsIDB4RTksCisJMHgxQiwgMHgyOSwgMHgxQiwgMHhERiwKIAotMHgzMCwgMHgxRCwgMHg2RiwgMHg4RiwKLTB4M0EsIDB4MzAsIDB4NEYsIDB4RTksCisJMHgzMCwgMHgxRCwgMHg2RiwgMHg4RiwKKwkweDNBLCAweDMwLCAweDRGLCAweEU5LAogCi0weDFDLCAweDMwLCAweDI2LCAweERGLAotMHgwOSwgMHhFMywKLTB4M0IsIDB4MDUsCisJMHgxQywgMHgzMCwgMHgyNiwgMHhERiwKKwkweDA5LCAweEUzLAorCTB4M0IsIDB4MDUsCiAKLTB4M0UsIDB4NTAsIDB4NTYsIDB4OUYsCi0weDNCLCAweDNGLCAweDRGLCAweEU5LAorCTB4M0UsIDB4NTAsIDB4NTYsIDB4OUYsCisJMHgzQiwgMHgzRiwgMHg0RiwgMHhFOSwKIAotMHgxRSwgMHg4RiwgMHg1MSwgMHg5RiwKLTB4MDAsIDB4RTAsCi0weEFDLCAweDIwLAorCTB4MUUsIDB4OEYsIDB4NTEsIDB4OUYsCisJMHgwMCwgMHhFMCwKKwkweEFDLCAweDIwLAogCi0weDJELCAweDQ0LCAweDRDLCAweEI0LAotMHgyQywgMHgxQywgMHhDMCwgMHhBRiwKKwkweDJELCAweDQ0LCAweDRDLCAweEI0LAorCTB4MkMsIDB4MUMsIDB4QzAsIDB4QUYsCiAKLTB4MjUsIDB4NDQsIDB4NTQsIDB4QjQsCi0weDAwLCAweEUwLAotMHhDOCwgMHgzMCwKKwkweDI1LCAweDQ0LCAweDU0LCAweEI0LAorCTB4MDAsIDB4RTAsCisJMHhDOCwgMHgzMCwKIAotMHgzMCwgMHg0NiwgMHgzMCwgMHhBRiwKLTB4MUIsIDB4MUIsIDB4NDgsIDB4QUYsCisJMHgzMCwgMHg0NiwgMHgzMCwgMHhBRiwKKwkweDFCLCAweDFCLCAweDQ4LCAweEFGLAogCi0weDAwLCAweEUwLAotMHgyNSwgMHgyMCwKLTB4MzgsIDB4MkMsIDB4NEYsIDB4RTksCisJMHgwMCwgMHhFMCwKKwkweDI1LCAweDIwLAorCTB4MzgsIDB4MkMsIDB4NEYsIDB4RTksCiAKLTB4ODYsIDB4ODAsIDB4NTcsIDB4RTksCi0weDM4LCAweDFELCAweDZGLCAweDhGLAorCTB4ODYsIDB4ODAsIDB4NTcsIDB4RTksCisJMHgzOCwgMHgxRCwgMHg2RiwgMHg4RiwKIAotMHgyOCwgMHg3NCwKLTB4MDAsIDB4RTAsCi0weDBELCAweDQ0LCAweDRDLCAweEIwLAorCTB4MjgsIDB4NzQsCisJMHgwMCwgMHhFMCwKKwkweDBELCAweDQ0LCAweDRDLCAweEIwLAogCi0weDA1LCAweDQ0LCAweDU0LCAweEIwLAotMHgyRCwgMHgyMCwKLTB4OUIsIDB4MTAsCisJMHgwNSwgMHg0NCwgMHg1NCwgMHhCMCwKKwkweDJELCAweDIwLAorCTB4OUIsIDB4MTAsCiAKLTB4ODIsIDB4M0UsIDB4NTcsIDB4RTksCi0weDMyLCAweEYwLCAweDFCLCAweENELAorCTB4ODIsIDB4M0UsIDB4NTcsIDB4RTksCisJMHgzMiwgMHhGMCwgMHgxQiwgMHhDRCwKIAotMHgxRSwgMHhCRCwgMHg1OSwgMHg5RiwKLTB4ODMsIDB4MUUsIDB4NTcsIDB4RTksCisJMHgxRSwgMHhCRCwgMHg1OSwgMHg5RiwKKwkweDgzLCAweDFFLCAweDU3LCAweEU5LAogCi0weDM4LCAweDQ3LCAweDM4LCAweEFGLAotMHgzNCwgMHgyMCwKLTB4MkEsIDB4MzAsCisJMHgzOCwgMHg0NywgMHgzOCwgMHhBRiwKKwkweDM0LCAweDIwLAorCTB4MkEsIDB4MzAsCiAKLTB4MDAsIDB4RTAsCi0weDBELCAweDIwLAotMHgzMiwgMHgyMCwKLTB4MDUsIDB4MjAsCisJMHgwMCwgMHhFMCwKKwkweDBELCAweDIwLAorCTB4MzIsIDB4MjAsCisJMHgwNSwgMHgyMCwKIAotMHg4NywgMHg4MCwgMHg1NywgMHhFOSwKLTB4MUYsIDB4NTQsIDB4NTcsIDB4OUYsCisJMHg4NywgMHg4MCwgMHg1NywgMHhFOSwKKwkweDFGLCAweDU0LCAweDU3LCAweDlGLAogCi0weDE3LCAweDQyLCAweDU2LCAweDlGLAotMHgwMCwgMHhFMCwKLTB4M0IsIDB4NkEsCisJMHgxNywgMHg0MiwgMHg1NiwgMHg5RiwKKwkweDAwLCAweEUwLAorCTB4M0IsIDB4NkEsCiAKLTB4M0YsIDB4OEYsIDB4NTEsIDB4OUYsCi0weDM3LCAweDFFLCAweDRGLCAweEU5LAorCTB4M0YsIDB4OEYsIDB4NTEsIDB4OUYsCisJMHgzNywgMHgxRSwgMHg0RiwgMHhFOSwKIAotMHgzNywgMHgzMiwgMHgyQSwgMHhBRiwKLTB4MDAsIDB4RTAsCi0weDMyLCAweDAwLAorCTB4MzcsIDB4MzIsIDB4MkEsIDB4QUYsCisJMHgwMCwgMHhFMCwKKwkweDMyLCAweDAwLAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgyNywgMHhDMCwgMHg0NCwgMHhDMCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MjcsIDB4QzAsIDB4NDQsIDB4QzAsCiAKLTB4MzYsIDB4MUYsIDB4NEYsIDB4RTksCi0weDFGLCAweDFGLCAweDI2LCAweERGLAorCTB4MzYsIDB4MUYsIDB4NEYsIDB4RTksCisJMHgxRiwgMHgxRiwgMHgyNiwgMHhERiwKIAotMHgzNywgMHgxQiwgMHgzNywgMHhCRiwKLTB4MTcsIDB4MjYsIDB4MTcsIDB4REYsCisJMHgzNywgMHgxQiwgMHgzNywgMHhCRiwKKwkweDE3LCAweDI2LCAweDE3LCAweERGLAogCi0weDNFLCAweDE3LCAweDRGLCAweEU5LAotMHgzRiwgMHgzRiwgMHg0RiwgMHhFOSwKKwkweDNFLCAweDE3LCAweDRGLCAweEU5LAorCTB4M0YsIDB4M0YsIDB4NEYsIDB4RTksCiAKLTB4MzQsIDB4MUYsIDB4MzQsIDB4QUYsCi0weDJCLCAweDA1LAotMHhBNywgMHgyMCwKKwkweDM0LCAweDFGLCAweDM0LCAweEFGLAorCTB4MkIsIDB4MDUsCisJMHhBNywgMHgyMCwKIAotMHgzMywgMHgyQiwgMHgzNywgMHhERiwKLTB4MjcsIDB4MTcsIDB4QzAsIDB4QUYsCisJMHgzMywgMHgyQiwgMHgzNywgMHhERiwKKwkweDI3LCAweDE3LCAweEMwLCAweEFGLAogCi0weDM0LCAweDgwLCAweDRGLCAweEU5LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDM0LCAweDgwLCAweDRGLCAweEU5LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MEQsIDB4MjEsIDB4MUEsIDB4QjYsCi0weDA1LCAweDIxLCAweDMxLCAweEI2LAorCTB4MEQsIDB4MjEsIDB4MUEsIDB4QjYsCisJMHgwNSwgMHgyMSwgMHgzMSwgMHhCNiwKIAotMHgyRCwgMHg0NCwgMHg0QywgMHhCNiwKLTB4MjUsIDB4NDQsIDB4NTQsIDB4QjYsCisJMHgyRCwgMHg0NCwgMHg0QywgMHhCNiwKKwkweDI1LCAweDQ0LCAweDU0LCAweEI2LAogCi0weDAzLCAweDgwLCAweDJBLCAweEVBLAotMHgxNywgMHhDMSwgMHgyQiwgMHhCRCwKKwkweDAzLCAweDgwLCAweDJBLCAweEVBLAorCTB4MTcsIDB4QzEsIDB4MkIsIDB4QkQsCiAKLTB4MEQsIDB4MjAsCi0weDA1LCAweDIwLAotMHgyRiwgMHhDMCwgMHgyMSwgMHhDNiwKKwkweDBELCAweDIwLAorCTB4MDUsIDB4MjAsCisJMHgyRiwgMHhDMCwgMHgyMSwgMHhDNiwKIAotMHhCMywgMHg2OCwKLTB4OTcsIDB4MjUsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4QjMsIDB4NjgsCisJMHg5NywgMHgyNSwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDMzLCAweEMwLCAweDMzLCAweEFGLAotMHgzQywgMHgyNywgMHg0RiwgMHhFOSwKKwkweDMzLCAweEMwLCAweDMzLCAweEFGLAorCTB4M0MsIDB4MjcsIDB4NEYsIDB4RTksCiAKLTB4MDAsIDB4RTAsCi0weDI1LCAweDIwLAotMHgwNywgMHhDMCwgMHg0NCwgMHhDNiwKKwkweDAwLCAweEUwLAorCTB4MjUsIDB4MjAsCisJMHgwNywgMHhDMCwgMHg0NCwgMHhDNiwKIAotMHgxNywgMHg1MCwgMHg1NiwgMHg5RiwKLTB4MDAsIDB4RTAsCi0weDJELCAweDIwLAorCTB4MTcsIDB4NTAsIDB4NTYsIDB4OUYsCisJMHgwMCwgMHhFMCwKKwkweDJELCAweDIwLAogCi0weDM3LCAweDBGLCAweDVDLCAweDlGLAotMHgwMCwgMHhFMCwKLTB4MkYsIDB4MjAsCisJMHgzNywgMHgwRiwgMHg1QywgMHg5RiwKKwkweDAwLCAweEUwLAorCTB4MkYsIDB4MjAsCiAKLTB4MUYsIDB4NjIsIDB4NTcsIDB4OUYsCi0weDAwLCAweEUwLAotMHgwNywgMHgyMCwKKwkweDFGLCAweDYyLCAweDU3LCAweDlGLAorCTB4MDAsIDB4RTAsCisJMHgwNywgMHgyMCwKIAotMHgzRiwgMHgzRCwgMHg1RCwgMHg5RiwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgzRiwgMHgzRCwgMHg1RCwgMHg5RiwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgyOCwgMHgxOSwgMHg2MCwgMHhFQywKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MjgsIDB4MTksIDB4NjAsIDB4RUMsCiAKLTB4QjMsIDB4MDUsCi0weDAwLCAweEUwLAotMHgxNywgMHgyNiwgMHgxNywgMHhERiwKKwkweEIzLCAweDA1LAorCTB4MDAsIDB4RTAsCisJMHgxNywgMHgyNiwgMHgxNywgMHhERiwKIAotMHgyMywgMHgzQiwgMHgzMywgMHhBRCwKLTB4MzUsIDB4MTcsIDB4NEYsIDB4RTksCisJMHgyMywgMHgzQiwgMHgzMywgMHhBRCwKKwkweDM1LCAweDE3LCAweDRGLCAweEU5LAogCi0weDFGLCAweDI2LCAweDFGLCAweERGLAotMHg5RCwgMHgxRiwgMHg0RiwgMHhFOSwKKwkweDFGLCAweDI2LCAweDFGLCAweERGLAorCTB4OUQsIDB4MUYsIDB4NEYsIDB4RTksCiAKLTB4OUUsIDB4M0YsIDB4NEYsIDB4RTksCi0weDM5LCAweDM3LCAweDRGLCAweEU5LAorCTB4OUUsIDB4M0YsIDB4NEYsIDB4RTksCisJMHgzOSwgMHgzNywgMHg0RiwgMHhFOSwKIAotMHgyRiwgMHgyRiwgMHgxNywgMHhBRiwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgyRiwgMHgyRiwgMHgxNywgMHhBRiwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDA3LCAweDA3LCAweDFGLCAweEFGLAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDA3LCAweDA3LCAweDFGLCAweEFGLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MzEsIDB4ODAsIDB4NEYsIDB4RTksCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MzEsIDB4ODAsIDB4NEYsIDB4RTksCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHg5QywgMHg4MCwgMHg0RiwgMHhFOSwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHg5QywgMHg4MCwgMHg0RiwgMHhFOSwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHg1NywgMHgzOSwgMHgyMCwgMHhFOSwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4NTcsIDB4MzksIDB4MjAsIDB4RTksCiAKLTB4MTYsIDB4MjgsIDB4MjAsIDB4RTksCi0weDFELCAweDNCLCAweDIwLCAweEU5LAorCTB4MTYsIDB4MjgsIDB4MjAsIDB4RTksCisJMHgxRCwgMHgzQiwgMHgyMCwgMHhFOSwKIAotMHgxRSwgMHgyQiwgMHgyMCwgMHhFOSwKLTB4MkIsIDB4MzIsIDB4MjAsIDB4RTksCisJMHgxRSwgMHgyQiwgMHgyMCwgMHhFOSwKKwkweDJCLCAweDMyLCAweDIwLCAweEU5LAogCi0weDFDLCAweDIzLCAweDIwLCAweEU5LAotMHg1NywgMHgzNiwgMHgyMCwgMHhFOSwKKwkweDFDLCAweDIzLCAweDIwLCAweEU5LAorCTB4NTcsIDB4MzYsIDB4MjAsIDB4RTksCiAKLTB4MDAsIDB4ODAsIDB4QTAsIDB4RTksCi0weDQwLCAweDQwLCAweEQ4LCAweEVDLAorCTB4MDAsIDB4ODAsIDB4QTAsIDB4RTksCisJMHg0MCwgMHg0MCwgMHhEOCwgMHhFQywKIAotMHhGRiwgMHg4MCwgMHhDMCwgMHhFOSwKLTB4OTAsIDB4RTIsCi0weDAwLCAweEUwLAorCTB4RkYsIDB4ODAsIDB4QzAsIDB4RTksCisJMHg5MCwgMHhFMiwKKwkweDAwLCAweEUwLAogCi0weDc0LCAweEZGLCAweDIwLCAweEVBLAotMHgxOSwgMHhDOCwgMHhDMSwgMHhDRCwKKwkweDc0LCAweEZGLCAweDIwLCAweEVBLAorCTB4MTksIDB4QzgsIDB4QzEsIDB4Q0QsCiAKLTB4MUYsIDB4RDcsIDB4MTgsIDB4QkQsCi0weDNGLCAweEQ3LCAweDIyLCAweEJELAorCTB4MUYsIDB4RDcsIDB4MTgsIDB4QkQsCisJMHgzRiwgMHhENywgMHgyMiwgMHhCRCwKIAotMHg5RiwgMHg0MSwgMHg0OSwgMHhCRCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHg5RiwgMHg0MSwgMHg0OSwgMHhCRCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDI1LCAweDQxLCAweDQ5LCAweEJELAotMHgyRCwgMHg0MSwgMHg1MSwgMHhCRCwKKwkweDI1LCAweDQxLCAweDQ5LCAweEJELAorCTB4MkQsIDB4NDEsIDB4NTEsIDB4QkQsCiAKLTB4MEQsIDB4ODAsIDB4MDcsIDB4RUEsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MEQsIDB4ODAsIDB4MDcsIDB4RUEsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgzNSwgMHg0MCwgMHg0OCwgMHhCRCwKLTB4M0QsIDB4NDAsIDB4NTAsIDB4QkQsCisJMHgzNSwgMHg0MCwgMHg0OCwgMHhCRCwKKwkweDNELCAweDQwLCAweDUwLCAweEJELAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgyNSwgMHgzMCwKLTB4MkQsIDB4MzAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDI1LCAweDMwLAorCTB4MkQsIDB4MzAsCiAKLTB4MzUsIDB4MzAsCi0weEI1LCAweDMwLAotMHhCRCwgMHgzMCwKLTB4M0QsIDB4MzAsCisJMHgzNSwgMHgzMCwKKwkweEI1LCAweDMwLAorCTB4QkQsIDB4MzAsCisJMHgzRCwgMHgzMCwKIAotMHg5QywgMHhBNywgMHg1QiwgMHg5RiwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHg5QywgMHhBNywgMHg1QiwgMHg5RiwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4NzMsIDB4RkYsIDB4MEEsIDB4RUEsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4NzMsIDB4RkYsIDB4MEEsIDB4RUEsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHhDOSwgMHg0MSwgMHhDOCwgMHhFQywKLTB4NDIsIDB4RTEsCi0weDAwLCAweEUwLAorCTB4QzksIDB4NDEsIDB4QzgsIDB4RUMsCisJMHg0MiwgMHhFMSwKKwkweDAwLCAweEUwLAogCi0weDcxLCAweEZGLCAweDIwLCAweEVBLAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDcxLCAweEZGLCAweDIwLCAweEVBLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHhDOCwgMHg0MCwgMHhDMCwgMHhFQywKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHhDOCwgMHg0MCwgMHhDMCwgMHhFQywKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDZFLCAweEZGLCAweDIwLCAweEVBLAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDZFLCAweEZGLCAweDIwLCAweEVBLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAogfTsKIAogc3RhdGljIHVuc2lnbmVkIGNoYXIgd2FycF9nMjAwX3RnemZbXSA9IHsKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDk4LCAweEEwLCAweEU5LAotMHg0MCwgMHg0MCwgMHhEOCwgMHhFQywKKwkweDAwLCAweDk4LCAweEEwLCAweEU5LAorCTB4NDAsIDB4NDAsIDB4RDgsIDB4RUMsCiAKLTB4RkYsIDB4ODAsIDB4QzAsIDB4RTksCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4RkYsIDB4ODAsIDB4QzAsIDB4RTksCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgxRiwgMHhENywgMHgxOCwgMHhCRCwKLTB4M0YsIDB4RDcsIDB4MjIsIDB4QkQsCisJMHgxRiwgMHhENywgMHgxOCwgMHhCRCwKKwkweDNGLCAweEQ3LCAweDIyLCAweEJELAogCi0weDgxLCAweDA0LAotMHg4OSwgMHgwNCwKLTB4MDEsIDB4MDQsCi0weDA5LCAweDA0LAorCTB4ODEsIDB4MDQsCisJMHg4OSwgMHgwNCwKKwkweDAxLCAweDA0LAorCTB4MDksIDB4MDQsCiAKLTB4QzksIDB4NDEsIDB4QzAsIDB4RUMsCi0weDExLCAweDA0LAotMHgwMCwgMHhFMCwKKwkweEM5LCAweDQxLCAweEMwLCAweEVDLAorCTB4MTEsIDB4MDQsCisJMHgwMCwgMHhFMCwKIAotMHg0MSwgMHhDQywgMHg0MSwgMHhDRCwKLTB4NDksIDB4Q0MsIDB4NDksIDB4Q0QsCisJMHg0MSwgMHhDQywgMHg0MSwgMHhDRCwKKwkweDQ5LCAweENDLCAweDQ5LCAweENELAogCi0weEQxLCAweDQxLCAweEMwLCAweEVDLAotMHg1MSwgMHhDQywgMHg1MSwgMHhDRCwKKwkweEQxLCAweDQxLCAweEMwLCAweEVDLAorCTB4NTEsIDB4Q0MsIDB4NTEsIDB4Q0QsCiAKLTB4ODAsIDB4MDQsCi0weDEwLCAweDA0LAotMHgwOCwgMHgwNCwKLTB4MDAsIDB4RTAsCisJMHg4MCwgMHgwNCwKKwkweDEwLCAweDA0LAorCTB4MDgsIDB4MDQsCisJMHgwMCwgMHhFMCwKIAotMHgwMCwgMHhDQywgMHhDMCwgMHhDRCwKLTB4RDEsIDB4NDksIDB4QzAsIDB4RUMsCisJMHgwMCwgMHhDQywgMHhDMCwgMHhDRCwKKwkweEQxLCAweDQ5LCAweEMwLCAweEVDLAogCi0weDhBLCAweDFGLCAweDIwLCAweEU5LAotMHg4QiwgMHgzRiwgMHgyMCwgMHhFOSwKKwkweDhBLCAweDFGLCAweDIwLCAweEU5LAorCTB4OEIsIDB4M0YsIDB4MjAsIDB4RTksCiAKLTB4NDEsIDB4M0MsIDB4NDEsIDB4QUQsCi0weDQ5LCAweDNDLCAweDQ5LCAweEFELAorCTB4NDEsIDB4M0MsIDB4NDEsIDB4QUQsCisJMHg0OSwgMHgzQywgMHg0OSwgMHhBRCwKIAotMHgxMCwgMHhDQywgMHgxMCwgMHhDRCwKLTB4MDgsIDB4Q0MsIDB4MDgsIDB4Q0QsCisJMHgxMCwgMHhDQywgMHgxMCwgMHhDRCwKKwkweDA4LCAweENDLCAweDA4LCAweENELAogCi0weEI5LCAweDQxLCAweDQ5LCAweEJCLAotMHgxRiwgMHhGMCwgMHg0MSwgMHhDRCwKKwkweEI5LCAweDQxLCAweDQ5LCAweEJCLAorCTB4MUYsIDB4RjAsIDB4NDEsIDB4Q0QsCiAKLTB4NTEsIDB4M0MsIDB4NTEsIDB4QUQsCi0weDAwLCAweDk4LCAweDgwLCAweEU5LAorCTB4NTEsIDB4M0MsIDB4NTEsIDB4QUQsCisJMHgwMCwgMHg5OCwgMHg4MCwgMHhFOSwKIAotMHg3RiwgMHg4MCwgMHgwNywgMHhFQSwKLTB4MjQsIDB4MUYsIDB4MjAsIDB4RTksCisJMHg3RiwgMHg4MCwgMHgwNywgMHhFQSwKKwkweDI0LCAweDFGLCAweDIwLCAweEU5LAogCi0weDIxLCAweDQ1LCAweDgwLCAweEU4LAotMHgxQSwgMHg0RCwgMHg4MCwgMHhFOCwKKwkweDIxLCAweDQ1LCAweDgwLCAweEU4LAorCTB4MUEsIDB4NEQsIDB4ODAsIDB4RTgsCiAKLTB4MzEsIDB4NTUsIDB4ODAsIDB4RTgsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MzEsIDB4NTUsIDB4ODAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgxNSwgMHg0MSwgMHg0OSwgMHhCRCwKLTB4MUQsIDB4NDEsIDB4NTEsIDB4QkQsCisJMHgxNSwgMHg0MSwgMHg0OSwgMHhCRCwKKwkweDFELCAweDQxLCAweDUxLCAweEJELAogCi0weDJFLCAweDQxLCAweDJBLCAweEI4LAotMHgzNCwgMHg1MywgMHhBMCwgMHhFOCwKKwkweDJFLCAweDQxLCAweDJBLCAweEI4LAorCTB4MzQsIDB4NTMsIDB4QTAsIDB4RTgsCiAKLTB4MTUsIDB4MzAsCi0weDFELCAweDMwLAotMHg1OCwgMHhFMywKLTB4MDAsIDB4RTAsCisJMHgxNSwgMHgzMCwKKwkweDFELCAweDMwLAorCTB4NTgsIDB4RTMsCisJMHgwMCwgMHhFMCwKIAotMHhCNSwgMHg0MCwgMHg0OCwgMHhCRCwKLTB4M0QsIDB4NDAsIDB4NTAsIDB4QkQsCisJMHhCNSwgMHg0MCwgMHg0OCwgMHhCRCwKKwkweDNELCAweDQwLCAweDUwLCAweEJELAogCi0weDI0LCAweDQzLCAweEEwLCAweEU4LAotMHgyQywgMHg0QiwgMHhBMCwgMHhFOCwKKwkweDI0LCAweDQzLCAweEEwLCAweEU4LAorCTB4MkMsIDB4NEIsIDB4QTAsIDB4RTgsCiAKLTB4MTUsIDB4NzIsCi0weDA5LCAweEUzLAotMHgwMCwgMHhFMCwKLTB4MUQsIDB4NzIsCisJMHgxNSwgMHg3MiwKKwkweDA5LCAweEUzLAorCTB4MDAsIDB4RTAsCisJMHgxRCwgMHg3MiwKIAotMHgzNSwgMHgzMCwKLTB4QjUsIDB4MzAsCi0weEJELCAweDMwLAotMHgzRCwgMHgzMCwKKwkweDM1LCAweDMwLAorCTB4QjUsIDB4MzAsCisJMHhCRCwgMHgzMCwKKwkweDNELCAweDMwLAogCi0weDlDLCAweDk3LCAweDU3LCAweDlGLAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDlDLCAweDk3LCAweDU3LCAweDlGLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4NkMsIDB4NjQsIDB4QzgsIDB4RUMsCi0weDk4LCAweEUxLAotMHhCNSwgMHgwNSwKKwkweDZDLCAweDY0LCAweEM4LCAweEVDLAorCTB4OTgsIDB4RTEsCisJMHhCNSwgMHgwNSwKIAotMHhCRCwgMHgwNSwKLTB4MkUsIDB4MzAsCi0weDMyLCAweEMwLCAweEEwLCAweEU4LAorCTB4QkQsIDB4MDUsCisJMHgyRSwgMHgzMCwKKwkweDMyLCAweEMwLCAweEEwLCAweEU4LAogCi0weDMzLCAweEMwLCAweEEwLCAweEU4LAotMHg3NCwgMHg2NCwgMHhDOCwgMHhFQywKKwkweDMzLCAweEMwLCAweEEwLCAweEU4LAorCTB4NzQsIDB4NjQsIDB4QzgsIDB4RUMsCiAKLTB4NDAsIDB4M0MsIDB4NDAsIDB4QUQsCi0weDMyLCAweDZBLAotMHgyQSwgMHgzMCwKKwkweDQwLCAweDNDLCAweDQwLCAweEFELAorCTB4MzIsIDB4NkEsCisJMHgyQSwgMHgzMCwKIAotMHgyMCwgMHg3MywKLTB4MzMsIDB4NkEsCi0weDAwLCAweEUwLAotMHgyOCwgMHg3MywKKwkweDIwLCAweDczLAorCTB4MzMsIDB4NkEsCisJMHgwMCwgMHhFMCwKKwkweDI4LCAweDczLAogCi0weDFDLCAweDcyLAotMHg4MywgMHhFMiwKLTB4NkIsIDB4ODAsIDB4MTUsIDB4RUEsCisJMHgxQywgMHg3MiwKKwkweDgzLCAweEUyLAorCTB4NkIsIDB4ODAsIDB4MTUsIDB4RUEsCiAKLTB4QjgsIDB4M0QsIDB4MjgsIDB4REYsCi0weDMwLCAweDM1LCAweDIwLCAweERGLAorCTB4QjgsIDB4M0QsIDB4MjgsIDB4REYsCisJMHgzMCwgMHgzNSwgMHgyMCwgMHhERiwKIAotMHg0MCwgMHgzMCwKLTB4MDAsIDB4RTAsCi0weENDLCAweEUyLAotMHg2NCwgMHg3MiwKKwkweDQwLCAweDMwLAorCTB4MDAsIDB4RTAsCisJMHhDQywgMHhFMiwKKwkweDY0LCAweDcyLAogCi0weDI1LCAweDQyLCAweDUyLCAweEJGLAotMHgyRCwgMHg0MiwgMHg0QSwgMHhCRiwKKwkweDI1LCAweDQyLCAweDUyLCAweEJGLAorCTB4MkQsIDB4NDIsIDB4NEEsIDB4QkYsCiAKLTB4MzAsIDB4MkUsIDB4MzAsIDB4REYsCi0weDM4LCAweDJFLCAweDM4LCAweERGLAorCTB4MzAsIDB4MkUsIDB4MzAsIDB4REYsCisJMHgzOCwgMHgyRSwgMHgzOCwgMHhERiwKIAotMHgxOCwgMHgxRCwgMHg0NSwgMHhFOSwKLTB4MUUsIDB4MTUsIDB4NDUsIDB4RTksCisJMHgxOCwgMHgxRCwgMHg0NSwgMHhFOSwKKwkweDFFLCAweDE1LCAweDQ1LCAweEU5LAogCi0weDJCLCAweDQ5LCAweDUxLCAweEJELAotMHgwMCwgMHhFMCwKLTB4MUYsIDB4NzMsCisJMHgyQiwgMHg0OSwgMHg1MSwgMHhCRCwKKwkweDAwLCAweEUwLAorCTB4MUYsIDB4NzMsCiAKLTB4MzgsIDB4MzgsIDB4NDAsIDB4QUYsCi0weDMwLCAweDMwLCAweDQwLCAweEFGLAorCTB4MzgsIDB4MzgsIDB4NDAsIDB4QUYsCisJMHgzMCwgMHgzMCwgMHg0MCwgMHhBRiwKIAotMHgyNCwgMHgxRiwgMHgyNCwgMHhERiwKLTB4MUQsIDB4MzIsIDB4MjAsIDB4RTksCisJMHgyNCwgMHgxRiwgMHgyNCwgMHhERiwKKwkweDFELCAweDMyLCAweDIwLCAweEU5LAogCi0weDJDLCAweDFGLCAweDJDLCAweERGLAotMHgxQSwgMHgzMywgMHgyMCwgMHhFOSwKKwkweDJDLCAweDFGLCAweDJDLCAweERGLAorCTB4MUEsIDB4MzMsIDB4MjAsIDB4RTksCiAKLTB4QjAsIDB4MTAsCi0weDA4LCAweEUzLAotMHg0MCwgMHgxMCwKLTB4QjgsIDB4MTAsCisJMHhCMCwgMHgxMCwKKwkweDA4LCAweEUzLAorCTB4NDAsIDB4MTAsCisJMHhCOCwgMHgxMCwKIAotMHgyNiwgMHhGMCwgMHgzMCwgMHhDRCwKLTB4MkYsIDB4RjAsIDB4MzgsIDB4Q0QsCisJMHgyNiwgMHhGMCwgMHgzMCwgMHhDRCwKKwkweDJGLCAweEYwLCAweDM4LCAweENELAogCi0weDJCLCAweDgwLCAweDIwLCAweEU5LAotMHgyQSwgMHg4MCwgMHgyMCwgMHhFOSwKKwkweDJCLCAweDgwLCAweDIwLCAweEU5LAorCTB4MkEsIDB4ODAsIDB4MjAsIDB4RTksCiAKLTB4QTYsIDB4MjAsCi0weDg4LCAweEUyLAotMHgwMCwgMHhFMCwKLTB4QUYsIDB4MjAsCisJMHhBNiwgMHgyMCwKKwkweDg4LCAweEUyLAorCTB4MDAsIDB4RTAsCisJMHhBRiwgMHgyMCwKIAotMHgyOCwgMHgyQSwgMHgyNiwgMHhBRiwKLTB4MjAsIDB4MkEsIDB4QzAsIDB4QUYsCisJMHgyOCwgMHgyQSwgMHgyNiwgMHhBRiwKKwkweDIwLCAweDJBLCAweEMwLCAweEFGLAogCi0weDM0LCAweDFGLCAweDM0LCAweERGLAotMHg0NiwgMHgyNCwgMHg0NiwgMHhERiwKKwkweDM0LCAweDFGLCAweDM0LCAweERGLAorCTB4NDYsIDB4MjQsIDB4NDYsIDB4REYsCiAKLTB4MjgsIDB4MzAsIDB4ODAsIDB4QkYsCi0weDIwLCAweDM4LCAweDgwLCAweEJGLAorCTB4MjgsIDB4MzAsIDB4ODAsIDB4QkYsCisJMHgyMCwgMHgzOCwgMHg4MCwgMHhCRiwKIAotMHg0NywgMHgyNCwgMHg0NywgMHhERiwKLTB4NEUsIDB4MkMsIDB4NEUsIDB4REYsCisJMHg0NywgMHgyNCwgMHg0NywgMHhERiwKKwkweDRFLCAweDJDLCAweDRFLCAweERGLAogCi0weDRGLCAweDJDLCAweDRGLCAweERGLAotMHg1NiwgMHgzNCwgMHg1NiwgMHhERiwKKwkweDRGLCAweDJDLCAweDRGLCAweERGLAorCTB4NTYsIDB4MzQsIDB4NTYsIDB4REYsCiAKLTB4MjgsIDB4MTUsIDB4MjgsIDB4REYsCi0weDIwLCAweDFELCAweDIwLCAweERGLAorCTB4MjgsIDB4MTUsIDB4MjgsIDB4REYsCisJMHgyMCwgMHgxRCwgMHgyMCwgMHhERiwKIAotMHg1NywgMHgzNCwgMHg1NywgMHhERiwKLTB4MDAsIDB4RTAsCi0weDFELCAweDA1LAorCTB4NTcsIDB4MzQsIDB4NTcsIDB4REYsCisJMHgwMCwgMHhFMCwKKwkweDFELCAweDA1LAogCi0weDA0LCAweDgwLCAweDEwLCAweEVBLAotMHg4OSwgMHhFMiwKLTB4MkIsIDB4MzAsCisJMHgwNCwgMHg4MCwgMHgxMCwgMHhFQSwKKwkweDg5LCAweEUyLAorCTB4MkIsIDB4MzAsCiAKLTB4M0YsIDB4QzEsIDB4MUQsIDB4QkQsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4M0YsIDB4QzEsIDB4MUQsIDB4QkQsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weEEwLCAweDY4LAotMHhCRiwgMHgyNSwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHhBMCwgMHg2OCwKKwkweEJGLCAweDI1LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MjAsIDB4QzAsIDB4MjAsIDB4QUYsCi0weDI4LCAweDA1LAotMHg5NywgMHg3NCwKKwkweDIwLCAweEMwLCAweDIwLCAweEFGLAorCTB4MjgsIDB4MDUsCisJMHg5NywgMHg3NCwKIAotMHgwMCwgMHhFMCwKLTB4MkEsIDB4MTAsCi0weDE2LCAweEMwLCAweDIwLCAweEU5LAorCTB4MDAsIDB4RTAsCisJMHgyQSwgMHgxMCwKKwkweDE2LCAweEMwLCAweDIwLCAweEU5LAogCi0weDA0LCAweDgwLCAweDEwLCAweEVBLAotMHg4QywgMHhFMiwKLTB4OTUsIDB4MDUsCisJMHgwNCwgMHg4MCwgMHgxMCwgMHhFQSwKKwkweDhDLCAweEUyLAorCTB4OTUsIDB4MDUsCiAKLTB4MjgsIDB4QzEsIDB4MjgsIDB4QUQsCi0weDFGLCAweEMxLCAweDE1LCAweEJELAorCTB4MjgsIDB4QzEsIDB4MjgsIDB4QUQsCisJMHgxRiwgMHhDMSwgMHgxNSwgMHhCRCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weEE4LCAweDY3LAotMHg5RiwgMHg2QiwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHhBOCwgMHg2NywKKwkweDlGLCAweDZCLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MjgsIDB4QzAsIDB4MjgsIDB4QUQsCi0weDFELCAweDI1LAotMHgyMCwgMHgwNSwKKwkweDI4LCAweEMwLCAweDI4LCAweEFELAorCTB4MUQsIDB4MjUsCisJMHgyMCwgMHgwNSwKIAotMHgyOCwgMHgzMiwgMHg4MCwgMHhBRCwKLTB4NDAsIDB4MkEsIDB4NDAsIDB4QkQsCisJMHgyOCwgMHgzMiwgMHg4MCwgMHhBRCwKKwkweDQwLCAweDJBLCAweDQwLCAweEJELAogCi0weDFDLCAweDgwLCAweDIwLCAweEU5LAotMHgyMCwgMHgzMywgMHgyMCwgMHhBRCwKKwkweDFDLCAweDgwLCAweDIwLCAweEU5LAorCTB4MjAsIDB4MzMsIDB4MjAsIDB4QUQsCiAKLTB4MjAsIDB4NzMsCi0weDAwLCAweEUwLAotMHhCNiwgMHg0OSwgMHg1MSwgMHhCQiwKKwkweDIwLCAweDczLAorCTB4MDAsIDB4RTAsCisJMHhCNiwgMHg0OSwgMHg1MSwgMHhCQiwKIAotMHgyNiwgMHgyRiwgMHhCMCwgMHhFOCwKLTB4MTksIDB4MjAsIDB4MjAsIDB4RTksCisJMHgyNiwgMHgyRiwgMHhCMCwgMHhFOCwKKwkweDE5LCAweDIwLCAweDIwLCAweEU5LAogCi0weDM1LCAweDIwLCAweDM1LCAweERGLAotMHgzRCwgMHgyMCwgMHgzRCwgMHhERiwKKwkweDM1LCAweDIwLCAweDM1LCAweERGLAorCTB4M0QsIDB4MjAsIDB4M0QsIDB4REYsCiAKLTB4MTUsIDB4MjAsIDB4MTUsIDB4REYsCi0weDFELCAweDIwLCAweDFELCAweERGLAorCTB4MTUsIDB4MjAsIDB4MTUsIDB4REYsCisJMHgxRCwgMHgyMCwgMHgxRCwgMHhERiwKIAotMHgyNiwgMHhEMCwgMHgyNiwgMHhDRCwKLTB4MjksIDB4NDksIDB4MkEsIDB4QjgsCisJMHgyNiwgMHhEMCwgMHgyNiwgMHhDRCwKKwkweDI5LCAweDQ5LCAweDJBLCAweEI4LAogCi0weDI2LCAweDQwLCAweDgwLCAweEJELAotMHgzQiwgMHg0OCwgMHg1MCwgMHhCRCwKKwkweDI2LCAweDQwLCAweDgwLCAweEJELAorCTB4M0IsIDB4NDgsIDB4NTAsIDB4QkQsCiAKLTB4M0UsIDB4NTQsIDB4NTcsIDB4OUYsCi0weDAwLCAweEUwLAotMHg4MiwgMHhFMSwKKwkweDNFLCAweDU0LCAweDU3LCAweDlGLAorCTB4MDAsIDB4RTAsCisJMHg4MiwgMHhFMSwKIAotMHgxRSwgMHhBRiwgMHg1OSwgMHg5RiwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgxRSwgMHhBRiwgMHg1OSwgMHg5RiwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDI2LCAweDMwLAotMHgyOSwgMHgzMCwKLTB4NDgsIDB4M0MsIDB4NDgsIDB4QUQsCisJMHgyNiwgMHgzMCwKKwkweDI5LCAweDMwLAorCTB4NDgsIDB4M0MsIDB4NDgsIDB4QUQsCiAKLTB4MkIsIDB4NzIsCi0weEMyLCAweEUxLAotMHgyQywgMHhDMCwgMHg0NCwgMHhDMiwKKwkweDJCLCAweDcyLAorCTB4QzIsIDB4RTEsCisJMHgyQywgMHhDMCwgMHg0NCwgMHhDMiwKIAotMHgwNSwgMHgyNCwgMHgzNCwgMHhCRiwKLTB4MEQsIDB4MjQsIDB4MkMsIDB4QkYsCisJMHgwNSwgMHgyNCwgMHgzNCwgMHhCRiwKKwkweDBELCAweDI0LCAweDJDLCAweEJGLAogCi0weDJELCAweDQ2LCAweDRFLCAweEJGLAotMHgyNSwgMHg0NiwgMHg1NiwgMHhCRiwKKwkweDJELCAweDQ2LCAweDRFLCAweEJGLAorCTB4MjUsIDB4NDYsIDB4NTYsIDB4QkYsCiAKLTB4MjAsIDB4MUQsIDB4NkYsIDB4OEYsCi0weDMyLCAweDNFLCAweDVGLCAweEU5LAorCTB4MjAsIDB4MUQsIDB4NkYsIDB4OEYsCisJMHgzMiwgMHgzRSwgMHg1RiwgMHhFOSwKIAotMHgzRSwgMHg1MCwgMHg1NiwgMHg5RiwKLTB4MDAsIDB4RTAsCi0weDNCLCAweDMwLAorCTB4M0UsIDB4NTAsIDB4NTYsIDB4OUYsCisJMHgwMCwgMHhFMCwKKwkweDNCLCAweDMwLAogCi0weDFFLCAweDhGLCAweDUxLCAweDlGLAotMHgzMywgMHgxRSwgMHg1RiwgMHhFOSwKKwkweDFFLCAweDhGLCAweDUxLCAweDlGLAorCTB4MzMsIDB4MUUsIDB4NUYsIDB4RTksCiAKLTB4MDUsIDB4NDQsIDB4NTQsIDB4QjIsCi0weDBELCAweDQ0LCAweDRDLCAweEIyLAorCTB4MDUsIDB4NDQsIDB4NTQsIDB4QjIsCisJMHgwRCwgMHg0NCwgMHg0QywgMHhCMiwKIAotMHgxOSwgMHhDMCwgMHhCMCwgMHhFOCwKLTB4MzQsIDB4QzAsIDB4NDQsIDB4QzQsCisJMHgxOSwgMHhDMCwgMHhCMCwgMHhFOCwKKwkweDM0LCAweEMwLCAweDQ0LCAweEM0LAogCi0weDMzLCAweDczLAotMHgwMCwgMHhFMCwKLTB4M0UsIDB4NjIsIDB4NTcsIDB4OUYsCisJMHgzMywgMHg3MywKKwkweDAwLCAweEUwLAorCTB4M0UsIDB4NjIsIDB4NTcsIDB4OUYsCiAKLTB4MUUsIDB4QUYsIDB4NTksIDB4OUYsCi0weDAwLCAweEUwLAotMHgwRCwgMHgyMCwKKwkweDFFLCAweEFGLCAweDU5LCAweDlGLAorCTB4MDAsIDB4RTAsCisJMHgwRCwgMHgyMCwKIAotMHg4NCwgMHgzRSwgMHg1OCwgMHhFOSwKLTB4MjgsIDB4MUQsIDB4NkYsIDB4OEYsCisJMHg4NCwgMHgzRSwgMHg1OCwgMHhFOSwKKwkweDI4LCAweDFELCAweDZGLCAweDhGLAogCi0weDA1LCAweDIwLAotMHgwMCwgMHhFMCwKLTB4ODUsIDB4MUUsIDB4NTgsIDB4RTksCisJMHgwNSwgMHgyMCwKKwkweDAwLCAweEUwLAorCTB4ODUsIDB4MUUsIDB4NTgsIDB4RTksCiAKLTB4OUIsIDB4M0IsIDB4MzMsIDB4REYsCi0weDIwLCAweDIwLCAweDQyLCAweEFGLAorCTB4OUIsIDB4M0IsIDB4MzMsIDB4REYsCisJMHgyMCwgMHgyMCwgMHg0MiwgMHhBRiwKIAotMHgzMCwgMHg0MiwgMHg1NiwgMHg5RiwKLTB4ODAsIDB4M0UsIDB4NTcsIDB4RTksCisJMHgzMCwgMHg0MiwgMHg1NiwgMHg5RiwKKwkweDgwLCAweDNFLCAweDU3LCAweEU5LAogCi0weDNGLCAweDhGLCAweDUxLCAweDlGLAotMHgzMCwgMHg4MCwgMHg1RiwgMHhFOSwKKwkweDNGLCAweDhGLCAweDUxLCAweDlGLAorCTB4MzAsIDB4ODAsIDB4NUYsIDB4RTksCiAKLTB4MjgsIDB4MjgsIDB4MjQsIDB4QUYsCi0weDgxLCAweDFFLCAweDU3LCAweEU5LAorCTB4MjgsIDB4MjgsIDB4MjQsIDB4QUYsCisJMHg4MSwgMHgxRSwgMHg1NywgMHhFOSwKIAotMHgwNSwgMHg0NywgMHg1NywgMHhCRiwKLTB4MEQsIDB4NDcsIDB4NEYsIDB4QkYsCisJMHgwNSwgMHg0NywgMHg1NywgMHhCRiwKKwkweDBELCAweDQ3LCAweDRGLCAweEJGLAogCi0weDg4LCAweDgwLCAweDU4LCAweEU5LAotMHgxQiwgMHgyOSwgMHgxQiwgMHhERiwKKwkweDg4LCAweDgwLCAweDU4LCAweEU5LAorCTB4MUIsIDB4MjksIDB4MUIsIDB4REYsCiAKLTB4MzAsIDB4MUQsIDB4NkYsIDB4OEYsCi0weDNBLCAweDMwLCAweDRGLCAweEU5LAorCTB4MzAsIDB4MUQsIDB4NkYsIDB4OEYsCisJMHgzQSwgMHgzMCwgMHg0RiwgMHhFOSwKIAotMHgxQywgMHgzMCwgMHgyNiwgMHhERiwKLTB4MDksIDB4RTMsCi0weDNCLCAweDA1LAorCTB4MUMsIDB4MzAsIDB4MjYsIDB4REYsCisJMHgwOSwgMHhFMywKKwkweDNCLCAweDA1LAogCi0weDNFLCAweDUwLCAweDU2LCAweDlGLAotMHgzQiwgMHgzRiwgMHg0RiwgMHhFOSwKKwkweDNFLCAweDUwLCAweDU2LCAweDlGLAorCTB4M0IsIDB4M0YsIDB4NEYsIDB4RTksCiAKLTB4MUUsIDB4OEYsIDB4NTEsIDB4OUYsCi0weDAwLCAweEUwLAotMHhBQywgMHgyMCwKKwkweDFFLCAweDhGLCAweDUxLCAweDlGLAorCTB4MDAsIDB4RTAsCisJMHhBQywgMHgyMCwKIAotMHgyRCwgMHg0NCwgMHg0QywgMHhCNCwKLTB4MkMsIDB4MUMsIDB4QzAsIDB4QUYsCisJMHgyRCwgMHg0NCwgMHg0QywgMHhCNCwKKwkweDJDLCAweDFDLCAweEMwLCAweEFGLAogCi0weDI1LCAweDQ0LCAweDU0LCAweEI0LAotMHgwMCwgMHhFMCwKLTB4QzgsIDB4MzAsCisJMHgyNSwgMHg0NCwgMHg1NCwgMHhCNCwKKwkweDAwLCAweEUwLAorCTB4QzgsIDB4MzAsCiAKLTB4MzAsIDB4NDYsIDB4MzAsIDB4QUYsCi0weDFCLCAweDFCLCAweDQ4LCAweEFGLAorCTB4MzAsIDB4NDYsIDB4MzAsIDB4QUYsCisJMHgxQiwgMHgxQiwgMHg0OCwgMHhBRiwKIAotMHgwMCwgMHhFMCwKLTB4MjUsIDB4MjAsCi0weDM4LCAweDJDLCAweDRGLCAweEU5LAorCTB4MDAsIDB4RTAsCisJMHgyNSwgMHgyMCwKKwkweDM4LCAweDJDLCAweDRGLCAweEU5LAogCi0weDg2LCAweDgwLCAweDU3LCAweEU5LAotMHgzOCwgMHgxRCwgMHg2RiwgMHg4RiwKKwkweDg2LCAweDgwLCAweDU3LCAweEU5LAorCTB4MzgsIDB4MUQsIDB4NkYsIDB4OEYsCiAKLTB4MjgsIDB4NzQsCi0weDAwLCAweEUwLAotMHgwRCwgMHg0NCwgMHg0QywgMHhCMCwKKwkweDI4LCAweDc0LAorCTB4MDAsIDB4RTAsCisJMHgwRCwgMHg0NCwgMHg0QywgMHhCMCwKIAotMHgwNSwgMHg0NCwgMHg1NCwgMHhCMCwKLTB4MkQsIDB4MjAsCi0weDlCLCAweDEwLAorCTB4MDUsIDB4NDQsIDB4NTQsIDB4QjAsCisJMHgyRCwgMHgyMCwKKwkweDlCLCAweDEwLAogCi0weDgyLCAweDNFLCAweDU3LCAweEU5LAotMHgzMiwgMHhGMCwgMHgxQiwgMHhDRCwKKwkweDgyLCAweDNFLCAweDU3LCAweEU5LAorCTB4MzIsIDB4RjAsIDB4MUIsIDB4Q0QsCiAKLTB4MUUsIDB4QkQsIDB4NTksIDB4OUYsCi0weDgzLCAweDFFLCAweDU3LCAweEU5LAorCTB4MUUsIDB4QkQsIDB4NTksIDB4OUYsCisJMHg4MywgMHgxRSwgMHg1NywgMHhFOSwKIAotMHgzOCwgMHg0NywgMHgzOCwgMHhBRiwKLTB4MzQsIDB4MjAsCi0weDJBLCAweDMwLAorCTB4MzgsIDB4NDcsIDB4MzgsIDB4QUYsCisJMHgzNCwgMHgyMCwKKwkweDJBLCAweDMwLAogCi0weDAwLCAweEUwLAotMHgwRCwgMHgyMCwKLTB4MzIsIDB4MjAsCi0weDA1LCAweDIwLAorCTB4MDAsIDB4RTAsCisJMHgwRCwgMHgyMCwKKwkweDMyLCAweDIwLAorCTB4MDUsIDB4MjAsCiAKLTB4ODcsIDB4ODAsIDB4NTcsIDB4RTksCi0weDFGLCAweDU0LCAweDU3LCAweDlGLAorCTB4ODcsIDB4ODAsIDB4NTcsIDB4RTksCisJMHgxRiwgMHg1NCwgMHg1NywgMHg5RiwKIAotMHgxNywgMHg0MiwgMHg1NiwgMHg5RiwKLTB4MDAsIDB4RTAsCi0weDNCLCAweDZBLAorCTB4MTcsIDB4NDIsIDB4NTYsIDB4OUYsCisJMHgwMCwgMHhFMCwKKwkweDNCLCAweDZBLAogCi0weDNGLCAweDhGLCAweDUxLCAweDlGLAotMHgzNywgMHgxRSwgMHg0RiwgMHhFOSwKKwkweDNGLCAweDhGLCAweDUxLCAweDlGLAorCTB4MzcsIDB4MUUsIDB4NEYsIDB4RTksCiAKLTB4MzcsIDB4MzIsIDB4MkEsIDB4QUYsCi0weDAwLCAweEUwLAotMHgzMiwgMHgwMCwKKwkweDM3LCAweDMyLCAweDJBLCAweEFGLAorCTB4MDAsIDB4RTAsCisJMHgzMiwgMHgwMCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MjcsIDB4QzAsIDB4NDQsIDB4QzAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDI3LCAweEMwLCAweDQ0LCAweEMwLAogCi0weDM2LCAweDFGLCAweDRGLCAweEU5LAotMHgxRiwgMHgxRiwgMHgyNiwgMHhERiwKKwkweDM2LCAweDFGLCAweDRGLCAweEU5LAorCTB4MUYsIDB4MUYsIDB4MjYsIDB4REYsCiAKLTB4MzcsIDB4MUIsIDB4MzcsIDB4QkYsCi0weDE3LCAweDI2LCAweDE3LCAweERGLAorCTB4MzcsIDB4MUIsIDB4MzcsIDB4QkYsCisJMHgxNywgMHgyNiwgMHgxNywgMHhERiwKIAotMHgzRSwgMHgxNywgMHg0RiwgMHhFOSwKLTB4M0YsIDB4M0YsIDB4NEYsIDB4RTksCisJMHgzRSwgMHgxNywgMHg0RiwgMHhFOSwKKwkweDNGLCAweDNGLCAweDRGLCAweEU5LAogCi0weDM0LCAweDFGLCAweDM0LCAweEFGLAotMHgyQiwgMHgwNSwKLTB4QTcsIDB4MjAsCisJMHgzNCwgMHgxRiwgMHgzNCwgMHhBRiwKKwkweDJCLCAweDA1LAorCTB4QTcsIDB4MjAsCiAKLTB4MzMsIDB4MkIsIDB4MzcsIDB4REYsCi0weDI3LCAweDE3LCAweEMwLCAweEFGLAorCTB4MzMsIDB4MkIsIDB4MzcsIDB4REYsCisJMHgyNywgMHgxNywgMHhDMCwgMHhBRiwKIAotMHgzNCwgMHg4MCwgMHg0RiwgMHhFOSwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgzNCwgMHg4MCwgMHg0RiwgMHhFOSwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDBELCAweDIxLCAweDFBLCAweEI2LAotMHgwNSwgMHgyMSwgMHgzMSwgMHhCNiwKKwkweDBELCAweDIxLCAweDFBLCAweEI2LAorCTB4MDUsIDB4MjEsIDB4MzEsIDB4QjYsCiAKLTB4MDMsIDB4ODAsIDB4MkEsIDB4RUEsCi0weDE3LCAweEMxLCAweDJCLCAweEJELAorCTB4MDMsIDB4ODAsIDB4MkEsIDB4RUEsCisJMHgxNywgMHhDMSwgMHgyQiwgMHhCRCwKIAotMHgwRCwgMHgyMCwKLTB4MDUsIDB4MjAsCi0weDJGLCAweEMwLCAweDIxLCAweEM2LAorCTB4MEQsIDB4MjAsCisJMHgwNSwgMHgyMCwKKwkweDJGLCAweEMwLCAweDIxLCAweEM2LAogCi0weEIzLCAweDY4LAotMHg5NywgMHgyNSwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHhCMywgMHg2OCwKKwkweDk3LCAweDI1LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MzMsIDB4QzAsIDB4MzMsIDB4QUYsCi0weDNDLCAweDI3LCAweDRGLCAweEU5LAorCTB4MzMsIDB4QzAsIDB4MzMsIDB4QUYsCisJMHgzQywgMHgyNywgMHg0RiwgMHhFOSwKIAotMHgxNywgMHg1MCwgMHg1NiwgMHg5RiwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgxNywgMHg1MCwgMHg1NiwgMHg5RiwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDM3LCAweDBGLCAweDVDLCAweDlGLAotMHgwMCwgMHhFMCwKLTB4MkYsIDB4MjAsCisJMHgzNywgMHgwRiwgMHg1QywgMHg5RiwKKwkweDAwLCAweEUwLAorCTB4MkYsIDB4MjAsCiAKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0weDI4LCAweDE5LCAweDYwLCAweEVDLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgyOCwgMHgxOSwgMHg2MCwgMHhFQywKIAotMHhCMywgMHgwNSwKLTB4MDAsIDB4RTAsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4QjMsIDB4MDUsCisJMHgwMCwgMHhFMCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDIzLCAweDNCLCAweDMzLCAweEFELAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDIzLCAweDNCLCAweDMzLCAweEFELAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MTcsIDB4MjYsIDB4MTcsIDB4REYsCi0weDM1LCAweDE3LCAweDRGLCAweEU5LAorCTB4MTcsIDB4MjYsIDB4MTcsIDB4REYsCisJMHgzNSwgMHgxNywgMHg0RiwgMHhFOSwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgzOSwgMHgzNywgMHg0RiwgMHhFOSwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MzksIDB4MzcsIDB4NEYsIDB4RTksCiAKLTB4MkYsIDB4MkYsIDB4MTcsIDB4QUYsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MkYsIDB4MkYsIDB4MTcsIDB4QUYsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDMxLCAweDgwLCAweDRGLCAweEU5LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDMxLCAweDgwLCAweDRGLCAweEU5LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0weDU3LCAweDM5LCAweDIwLCAweEU5LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHg1NywgMHgzOSwgMHgyMCwgMHhFOSwKIAotMHgxNiwgMHgyOCwgMHgyMCwgMHhFOSwKLTB4MUQsIDB4M0IsIDB4MjAsIDB4RTksCisJMHgxNiwgMHgyOCwgMHgyMCwgMHhFOSwKKwkweDFELCAweDNCLCAweDIwLCAweEU5LAogCi0weDFFLCAweDJCLCAweDIwLCAweEU5LAotMHgyQiwgMHgzMiwgMHgyMCwgMHhFOSwKKwkweDFFLCAweDJCLCAweDIwLCAweEU5LAorCTB4MkIsIDB4MzIsIDB4MjAsIDB4RTksCiAKLTB4MUMsIDB4MjMsIDB4MjAsIDB4RTksCi0weDU3LCAweDM2LCAweDIwLCAweEU5LAorCTB4MUMsIDB4MjMsIDB4MjAsIDB4RTksCisJMHg1NywgMHgzNiwgMHgyMCwgMHhFOSwKIAotMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKLTB4NDAsIDB4NDAsIDB4RDgsIDB4RUMsCisJMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKKwkweDQwLCAweDQwLCAweEQ4LCAweEVDLAogCi0weEZGLCAweDgwLCAweEMwLCAweEU5LAotMHg5MCwgMHhFMiwKLTB4MDAsIDB4RTAsCisJMHhGRiwgMHg4MCwgMHhDMCwgMHhFOSwKKwkweDkwLCAweEUyLAorCTB4MDAsIDB4RTAsCiAKLTB4NzgsIDB4RkYsIDB4MjAsIDB4RUEsCi0weDE5LCAweEM4LCAweEMxLCAweENELAorCTB4NzgsIDB4RkYsIDB4MjAsIDB4RUEsCisJMHgxOSwgMHhDOCwgMHhDMSwgMHhDRCwKIAotMHgxRiwgMHhENywgMHgxOCwgMHhCRCwKLTB4M0YsIDB4RDcsIDB4MjIsIDB4QkQsCisJMHgxRiwgMHhENywgMHgxOCwgMHhCRCwKKwkweDNGLCAweEQ3LCAweDIyLCAweEJELAogCi0weDlGLCAweDQxLCAweDQ5LCAweEJELAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDlGLCAweDQxLCAweDQ5LCAweEJELAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MjUsIDB4NDEsIDB4NDksIDB4QkQsCi0weDJELCAweDQxLCAweDUxLCAweEJELAorCTB4MjUsIDB4NDEsIDB4NDksIDB4QkQsCisJMHgyRCwgMHg0MSwgMHg1MSwgMHhCRCwKIAotMHgwRCwgMHg4MCwgMHgwNywgMHhFQSwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwRCwgMHg4MCwgMHgwNywgMHhFQSwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDM1LCAweDQwLCAweDQ4LCAweEJELAotMHgzRCwgMHg0MCwgMHg1MCwgMHhCRCwKKwkweDM1LCAweDQwLCAweDQ4LCAweEJELAorCTB4M0QsIDB4NDAsIDB4NTAsIDB4QkQsCiAKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0weDI1LCAweDMwLAotMHgyRCwgMHgzMCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MjUsIDB4MzAsCisJMHgyRCwgMHgzMCwKIAotMHgzNSwgMHgzMCwKLTB4QjUsIDB4MzAsCi0weEJELCAweDMwLAotMHgzRCwgMHgzMCwKKwkweDM1LCAweDMwLAorCTB4QjUsIDB4MzAsCisJMHhCRCwgMHgzMCwKKwkweDNELCAweDMwLAogCi0weDlDLCAweEE3LCAweDVCLCAweDlGLAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDlDLCAweEE3LCAweDVCLCAweDlGLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHg3NywgMHhGRiwgMHgwQSwgMHhFQSwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHg3NywgMHhGRiwgMHgwQSwgMHhFQSwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weEM5LCAweDQxLCAweEM4LCAweEVDLAotMHg0MiwgMHhFMSwKLTB4MDAsIDB4RTAsCisJMHhDOSwgMHg0MSwgMHhDOCwgMHhFQywKKwkweDQyLCAweEUxLAorCTB4MDAsIDB4RTAsCiAKLTB4NzUsIDB4RkYsIDB4MjAsIDB4RUEsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4NzUsIDB4RkYsIDB4MjAsIDB4RUEsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weEM4LCAweDQwLCAweEMwLCAweEVDLAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweEM4LCAweDQwLCAweEMwLCAweEVDLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4NzIsIDB4RkYsIDB4MjAsIDB4RUEsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4NzIsIDB4RkYsIDB4MjAsIDB4RUEsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCiB9OwogCiBzdGF0aWMgdW5zaWduZWQgY2hhciB3YXJwX2cyMDBfdGd6c1tdID0gewogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MDAsIDB4OTgsIDB4QTAsIDB4RTksCi0weDQwLCAweDQwLCAweEQ4LCAweEVDLAorCTB4MDAsIDB4OTgsIDB4QTAsIDB4RTksCisJMHg0MCwgMHg0MCwgMHhEOCwgMHhFQywKIAotMHhGRiwgMHg4MCwgMHhDMCwgMHhFOSwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHhGRiwgMHg4MCwgMHhDMCwgMHhFOSwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDFGLCAweEQ3LCAweDE4LCAweEJELAotMHgzRiwgMHhENywgMHgyMiwgMHhCRCwKKwkweDFGLCAweEQ3LCAweDE4LCAweEJELAorCTB4M0YsIDB4RDcsIDB4MjIsIDB4QkQsCiAKLTB4ODEsIDB4MDQsCi0weDg5LCAweDA0LAotMHgwMSwgMHgwNCwKLTB4MDksIDB4MDQsCisJMHg4MSwgMHgwNCwKKwkweDg5LCAweDA0LAorCTB4MDEsIDB4MDQsCisJMHgwOSwgMHgwNCwKIAotMHhDOSwgMHg0MSwgMHhDMCwgMHhFQywKLTB4MTEsIDB4MDQsCi0weDAwLCAweEUwLAorCTB4QzksIDB4NDEsIDB4QzAsIDB4RUMsCisJMHgxMSwgMHgwNCwKKwkweDAwLCAweEUwLAogCi0weDQxLCAweENDLCAweDQxLCAweENELAotMHg0OSwgMHhDQywgMHg0OSwgMHhDRCwKKwkweDQxLCAweENDLCAweDQxLCAweENELAorCTB4NDksIDB4Q0MsIDB4NDksIDB4Q0QsCiAKLTB4RDEsIDB4NDEsIDB4QzAsIDB4RUMsCi0weDUxLCAweENDLCAweDUxLCAweENELAorCTB4RDEsIDB4NDEsIDB4QzAsIDB4RUMsCisJMHg1MSwgMHhDQywgMHg1MSwgMHhDRCwKIAotMHg4MCwgMHgwNCwKLTB4MTAsIDB4MDQsCi0weDA4LCAweDA0LAotMHgwMCwgMHhFMCwKKwkweDgwLCAweDA0LAorCTB4MTAsIDB4MDQsCisJMHgwOCwgMHgwNCwKKwkweDAwLCAweEUwLAogCi0weDAwLCAweENDLCAweEMwLCAweENELAotMHhEMSwgMHg0OSwgMHhDMCwgMHhFQywKKwkweDAwLCAweENDLCAweEMwLCAweENELAorCTB4RDEsIDB4NDksIDB4QzAsIDB4RUMsCiAKLTB4OEEsIDB4MUYsIDB4MjAsIDB4RTksCi0weDhCLCAweDNGLCAweDIwLCAweEU5LAorCTB4OEEsIDB4MUYsIDB4MjAsIDB4RTksCisJMHg4QiwgMHgzRiwgMHgyMCwgMHhFOSwKIAotMHg0MSwgMHgzQywgMHg0MSwgMHhBRCwKLTB4NDksIDB4M0MsIDB4NDksIDB4QUQsCisJMHg0MSwgMHgzQywgMHg0MSwgMHhBRCwKKwkweDQ5LCAweDNDLCAweDQ5LCAweEFELAogCi0weDEwLCAweENDLCAweDEwLCAweENELAotMHgwOCwgMHhDQywgMHgwOCwgMHhDRCwKKwkweDEwLCAweENDLCAweDEwLCAweENELAorCTB4MDgsIDB4Q0MsIDB4MDgsIDB4Q0QsCiAKLTB4QjksIDB4NDEsIDB4NDksIDB4QkIsCi0weDFGLCAweEYwLCAweDQxLCAweENELAorCTB4QjksIDB4NDEsIDB4NDksIDB4QkIsCisJMHgxRiwgMHhGMCwgMHg0MSwgMHhDRCwKIAotMHg1MSwgMHgzQywgMHg1MSwgMHhBRCwKLTB4MDAsIDB4OTgsIDB4ODAsIDB4RTksCisJMHg1MSwgMHgzQywgMHg1MSwgMHhBRCwKKwkweDAwLCAweDk4LCAweDgwLCAweEU5LAogCi0weDhCLCAweDgwLCAweDA3LCAweEVBLAotMHgyNCwgMHgxRiwgMHgyMCwgMHhFOSwKKwkweDhCLCAweDgwLCAweDA3LCAweEVBLAorCTB4MjQsIDB4MUYsIDB4MjAsIDB4RTksCiAKLTB4MjEsIDB4NDUsIDB4ODAsIDB4RTgsCi0weDFBLCAweDRELCAweDgwLCAweEU4LAorCTB4MjEsIDB4NDUsIDB4ODAsIDB4RTgsCisJMHgxQSwgMHg0RCwgMHg4MCwgMHhFOCwKIAotMHgzMSwgMHg1NSwgMHg4MCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgzMSwgMHg1NSwgMHg4MCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDE1LCAweDQxLCAweDQ5LCAweEJELAotMHgxRCwgMHg0MSwgMHg1MSwgMHhCRCwKKwkweDE1LCAweDQxLCAweDQ5LCAweEJELAorCTB4MUQsIDB4NDEsIDB4NTEsIDB4QkQsCiAKLTB4MkUsIDB4NDEsIDB4MkEsIDB4QjgsCi0weDM0LCAweDUzLCAweEEwLCAweEU4LAorCTB4MkUsIDB4NDEsIDB4MkEsIDB4QjgsCisJMHgzNCwgMHg1MywgMHhBMCwgMHhFOCwKIAotMHgxNSwgMHgzMCwKLTB4MUQsIDB4MzAsCi0weDU4LCAweEUzLAotMHgwMCwgMHhFMCwKKwkweDE1LCAweDMwLAorCTB4MUQsIDB4MzAsCisJMHg1OCwgMHhFMywKKwkweDAwLCAweEUwLAogCi0weEI1LCAweDQwLCAweDQ4LCAweEJELAotMHgzRCwgMHg0MCwgMHg1MCwgMHhCRCwKKwkweEI1LCAweDQwLCAweDQ4LCAweEJELAorCTB4M0QsIDB4NDAsIDB4NTAsIDB4QkQsCiAKLTB4MjQsIDB4NDMsIDB4QTAsIDB4RTgsCi0weDJDLCAweDRCLCAweEEwLCAweEU4LAorCTB4MjQsIDB4NDMsIDB4QTAsIDB4RTgsCisJMHgyQywgMHg0QiwgMHhBMCwgMHhFOCwKIAotMHgxNSwgMHg3MiwKLTB4MDksIDB4RTMsCi0weDAwLCAweEUwLAotMHgxRCwgMHg3MiwKKwkweDE1LCAweDcyLAorCTB4MDksIDB4RTMsCisJMHgwMCwgMHhFMCwKKwkweDFELCAweDcyLAogCi0weDM1LCAweDMwLAotMHhCNSwgMHgzMCwKLTB4QkQsIDB4MzAsCi0weDNELCAweDMwLAorCTB4MzUsIDB4MzAsCisJMHhCNSwgMHgzMCwKKwkweEJELCAweDMwLAorCTB4M0QsIDB4MzAsCiAKLTB4OUMsIDB4OTcsIDB4NTcsIDB4OUYsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4OUMsIDB4OTcsIDB4NTcsIDB4OUYsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHg2QywgMHg2NCwgMHhDOCwgMHhFQywKLTB4OTgsIDB4RTEsCi0weEI1LCAweDA1LAorCTB4NkMsIDB4NjQsIDB4QzgsIDB4RUMsCisJMHg5OCwgMHhFMSwKKwkweEI1LCAweDA1LAogCi0weEJELCAweDA1LAotMHgyRSwgMHgzMCwKLTB4MzIsIDB4QzAsIDB4QTAsIDB4RTgsCisJMHhCRCwgMHgwNSwKKwkweDJFLCAweDMwLAorCTB4MzIsIDB4QzAsIDB4QTAsIDB4RTgsCiAKLTB4MzMsIDB4QzAsIDB4QTAsIDB4RTgsCi0weDc0LCAweDY0LCAweEM4LCAweEVDLAorCTB4MzMsIDB4QzAsIDB4QTAsIDB4RTgsCisJMHg3NCwgMHg2NCwgMHhDOCwgMHhFQywKIAotMHg0MCwgMHgzQywgMHg0MCwgMHhBRCwKLTB4MzIsIDB4NkEsCi0weDJBLCAweDMwLAorCTB4NDAsIDB4M0MsIDB4NDAsIDB4QUQsCisJMHgzMiwgMHg2QSwKKwkweDJBLCAweDMwLAogCi0weDIwLCAweDczLAotMHgzMywgMHg2QSwKLTB4MDAsIDB4RTAsCi0weDI4LCAweDczLAorCTB4MjAsIDB4NzMsCisJMHgzMywgMHg2QSwKKwkweDAwLCAweEUwLAorCTB4MjgsIDB4NzMsCiAKLTB4MUMsIDB4NzIsCi0weDgzLCAweEUyLAotMHg3NywgMHg4MCwgMHgxNSwgMHhFQSwKKwkweDFDLCAweDcyLAorCTB4ODMsIDB4RTIsCisJMHg3NywgMHg4MCwgMHgxNSwgMHhFQSwKIAotMHhCOCwgMHgzRCwgMHgyOCwgMHhERiwKLTB4MzAsIDB4MzUsIDB4MjAsIDB4REYsCisJMHhCOCwgMHgzRCwgMHgyOCwgMHhERiwKKwkweDMwLCAweDM1LCAweDIwLCAweERGLAogCi0weDQwLCAweDMwLAotMHgwMCwgMHhFMCwKLTB4Q0MsIDB4RTIsCi0weDY0LCAweDcyLAorCTB4NDAsIDB4MzAsCisJMHgwMCwgMHhFMCwKKwkweENDLCAweEUyLAorCTB4NjQsIDB4NzIsCiAKLTB4MjUsIDB4NDIsIDB4NTIsIDB4QkYsCi0weDJELCAweDQyLCAweDRBLCAweEJGLAorCTB4MjUsIDB4NDIsIDB4NTIsIDB4QkYsCisJMHgyRCwgMHg0MiwgMHg0QSwgMHhCRiwKIAotMHgzMCwgMHgyRSwgMHgzMCwgMHhERiwKLTB4MzgsIDB4MkUsIDB4MzgsIDB4REYsCisJMHgzMCwgMHgyRSwgMHgzMCwgMHhERiwKKwkweDM4LCAweDJFLCAweDM4LCAweERGLAogCi0weDE4LCAweDFELCAweDQ1LCAweEU5LAotMHgxRSwgMHgxNSwgMHg0NSwgMHhFOSwKKwkweDE4LCAweDFELCAweDQ1LCAweEU5LAorCTB4MUUsIDB4MTUsIDB4NDUsIDB4RTksCiAKLTB4MkIsIDB4NDksIDB4NTEsIDB4QkQsCi0weDAwLCAweEUwLAotMHgxRiwgMHg3MywKKwkweDJCLCAweDQ5LCAweDUxLCAweEJELAorCTB4MDAsIDB4RTAsCisJMHgxRiwgMHg3MywKIAotMHgzOCwgMHgzOCwgMHg0MCwgMHhBRiwKLTB4MzAsIDB4MzAsIDB4NDAsIDB4QUYsCisJMHgzOCwgMHgzOCwgMHg0MCwgMHhBRiwKKwkweDMwLCAweDMwLCAweDQwLCAweEFGLAogCi0weDI0LCAweDFGLCAweDI0LCAweERGLAotMHgxRCwgMHgzMiwgMHgyMCwgMHhFOSwKKwkweDI0LCAweDFGLCAweDI0LCAweERGLAorCTB4MUQsIDB4MzIsIDB4MjAsIDB4RTksCiAKLTB4MkMsIDB4MUYsIDB4MkMsIDB4REYsCi0weDFBLCAweDMzLCAweDIwLCAweEU5LAorCTB4MkMsIDB4MUYsIDB4MkMsIDB4REYsCisJMHgxQSwgMHgzMywgMHgyMCwgMHhFOSwKIAotMHhCMCwgMHgxMCwKLTB4MDgsIDB4RTMsCi0weDQwLCAweDEwLAotMHhCOCwgMHgxMCwKKwkweEIwLCAweDEwLAorCTB4MDgsIDB4RTMsCisJMHg0MCwgMHgxMCwKKwkweEI4LCAweDEwLAogCi0weDI2LCAweEYwLCAweDMwLCAweENELAotMHgyRiwgMHhGMCwgMHgzOCwgMHhDRCwKKwkweDI2LCAweEYwLCAweDMwLCAweENELAorCTB4MkYsIDB4RjAsIDB4MzgsIDB4Q0QsCiAKLTB4MkIsIDB4ODAsIDB4MjAsIDB4RTksCi0weDJBLCAweDgwLCAweDIwLCAweEU5LAorCTB4MkIsIDB4ODAsIDB4MjAsIDB4RTksCisJMHgyQSwgMHg4MCwgMHgyMCwgMHhFOSwKIAotMHhBNiwgMHgyMCwKLTB4ODgsIDB4RTIsCi0weDAwLCAweEUwLAotMHhBRiwgMHgyMCwKKwkweEE2LCAweDIwLAorCTB4ODgsIDB4RTIsCisJMHgwMCwgMHhFMCwKKwkweEFGLCAweDIwLAogCi0weDI4LCAweDJBLCAweDI2LCAweEFGLAotMHgyMCwgMHgyQSwgMHhDMCwgMHhBRiwKKwkweDI4LCAweDJBLCAweDI2LCAweEFGLAorCTB4MjAsIDB4MkEsIDB4QzAsIDB4QUYsCiAKLTB4MzQsIDB4MUYsIDB4MzQsIDB4REYsCi0weDQ2LCAweDI0LCAweDQ2LCAweERGLAorCTB4MzQsIDB4MUYsIDB4MzQsIDB4REYsCisJMHg0NiwgMHgyNCwgMHg0NiwgMHhERiwKIAotMHgyOCwgMHgzMCwgMHg4MCwgMHhCRiwKLTB4MjAsIDB4MzgsIDB4ODAsIDB4QkYsCisJMHgyOCwgMHgzMCwgMHg4MCwgMHhCRiwKKwkweDIwLCAweDM4LCAweDgwLCAweEJGLAogCi0weDQ3LCAweDI0LCAweDQ3LCAweERGLAotMHg0RSwgMHgyQywgMHg0RSwgMHhERiwKKwkweDQ3LCAweDI0LCAweDQ3LCAweERGLAorCTB4NEUsIDB4MkMsIDB4NEUsIDB4REYsCiAKLTB4NEYsIDB4MkMsIDB4NEYsIDB4REYsCi0weDU2LCAweDM0LCAweDU2LCAweERGLAorCTB4NEYsIDB4MkMsIDB4NEYsIDB4REYsCisJMHg1NiwgMHgzNCwgMHg1NiwgMHhERiwKIAotMHgyOCwgMHgxNSwgMHgyOCwgMHhERiwKLTB4MjAsIDB4MUQsIDB4MjAsIDB4REYsCisJMHgyOCwgMHgxNSwgMHgyOCwgMHhERiwKKwkweDIwLCAweDFELCAweDIwLCAweERGLAogCi0weDU3LCAweDM0LCAweDU3LCAweERGLAotMHgwMCwgMHhFMCwKLTB4MUQsIDB4MDUsCisJMHg1NywgMHgzNCwgMHg1NywgMHhERiwKKwkweDAwLCAweEUwLAorCTB4MUQsIDB4MDUsCiAKLTB4MDQsIDB4ODAsIDB4MTAsIDB4RUEsCi0weDg5LCAweEUyLAotMHgyQiwgMHgzMCwKKwkweDA0LCAweDgwLCAweDEwLCAweEVBLAorCTB4ODksIDB4RTIsCisJMHgyQiwgMHgzMCwKIAotMHgzRiwgMHhDMSwgMHgxRCwgMHhCRCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgzRiwgMHhDMSwgMHgxRCwgMHhCRCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4QTAsIDB4NjgsCi0weEJGLCAweDI1LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweEEwLCAweDY4LAorCTB4QkYsIDB4MjUsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgyMCwgMHhDMCwgMHgyMCwgMHhBRiwKLTB4MjgsIDB4MDUsCi0weDk3LCAweDc0LAorCTB4MjAsIDB4QzAsIDB4MjAsIDB4QUYsCisJMHgyOCwgMHgwNSwKKwkweDk3LCAweDc0LAogCi0weDAwLCAweEUwLAotMHgyQSwgMHgxMCwKLTB4MTYsIDB4QzAsIDB4MjAsIDB4RTksCisJMHgwMCwgMHhFMCwKKwkweDJBLCAweDEwLAorCTB4MTYsIDB4QzAsIDB4MjAsIDB4RTksCiAKLTB4MDQsIDB4ODAsIDB4MTAsIDB4RUEsCi0weDhDLCAweEUyLAotMHg5NSwgMHgwNSwKKwkweDA0LCAweDgwLCAweDEwLCAweEVBLAorCTB4OEMsIDB4RTIsCisJMHg5NSwgMHgwNSwKIAotMHgyOCwgMHhDMSwgMHgyOCwgMHhBRCwKLTB4MUYsIDB4QzEsIDB4MTUsIDB4QkQsCisJMHgyOCwgMHhDMSwgMHgyOCwgMHhBRCwKKwkweDFGLCAweEMxLCAweDE1LCAweEJELAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4QTgsIDB4NjcsCi0weDlGLCAweDZCLAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweEE4LCAweDY3LAorCTB4OUYsIDB4NkIsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgyOCwgMHhDMCwgMHgyOCwgMHhBRCwKLTB4MUQsIDB4MjUsCi0weDIwLCAweDA1LAorCTB4MjgsIDB4QzAsIDB4MjgsIDB4QUQsCisJMHgxRCwgMHgyNSwKKwkweDIwLCAweDA1LAogCi0weDI4LCAweDMyLCAweDgwLCAweEFELAotMHg0MCwgMHgyQSwgMHg0MCwgMHhCRCwKKwkweDI4LCAweDMyLCAweDgwLCAweEFELAorCTB4NDAsIDB4MkEsIDB4NDAsIDB4QkQsCiAKLTB4MUMsIDB4ODAsIDB4MjAsIDB4RTksCi0weDIwLCAweDMzLCAweDIwLCAweEFELAorCTB4MUMsIDB4ODAsIDB4MjAsIDB4RTksCisJMHgyMCwgMHgzMywgMHgyMCwgMHhBRCwKIAotMHgyMCwgMHg3MywKLTB4MDAsIDB4RTAsCi0weEI2LCAweDQ5LCAweDUxLCAweEJCLAorCTB4MjAsIDB4NzMsCisJMHgwMCwgMHhFMCwKKwkweEI2LCAweDQ5LCAweDUxLCAweEJCLAogCi0weDI2LCAweDJGLCAweEIwLCAweEU4LAotMHgxOSwgMHgyMCwgMHgyMCwgMHhFOSwKKwkweDI2LCAweDJGLCAweEIwLCAweEU4LAorCTB4MTksIDB4MjAsIDB4MjAsIDB4RTksCiAKLTB4MzUsIDB4MjAsIDB4MzUsIDB4REYsCi0weDNELCAweDIwLCAweDNELCAweERGLAorCTB4MzUsIDB4MjAsIDB4MzUsIDB4REYsCisJMHgzRCwgMHgyMCwgMHgzRCwgMHhERiwKIAotMHgxNSwgMHgyMCwgMHgxNSwgMHhERiwKLTB4MUQsIDB4MjAsIDB4MUQsIDB4REYsCisJMHgxNSwgMHgyMCwgMHgxNSwgMHhERiwKKwkweDFELCAweDIwLCAweDFELCAweERGLAogCi0weDI2LCAweEQwLCAweDI2LCAweENELAotMHgyOSwgMHg0OSwgMHgyQSwgMHhCOCwKKwkweDI2LCAweEQwLCAweDI2LCAweENELAorCTB4MjksIDB4NDksIDB4MkEsIDB4QjgsCiAKLTB4MjYsIDB4NDAsIDB4ODAsIDB4QkQsCi0weDNCLCAweDQ4LCAweDUwLCAweEJELAorCTB4MjYsIDB4NDAsIDB4ODAsIDB4QkQsCisJMHgzQiwgMHg0OCwgMHg1MCwgMHhCRCwKIAotMHgzRSwgMHg1NCwgMHg1NywgMHg5RiwKLTB4MDAsIDB4RTAsCi0weDgyLCAweEUxLAorCTB4M0UsIDB4NTQsIDB4NTcsIDB4OUYsCisJMHgwMCwgMHhFMCwKKwkweDgyLCAweEUxLAogCi0weDFFLCAweEFGLCAweDU5LCAweDlGLAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDFFLCAweEFGLCAweDU5LCAweDlGLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MjYsIDB4MzAsCi0weDI5LCAweDMwLAotMHg0OCwgMHgzQywgMHg0OCwgMHhBRCwKKwkweDI2LCAweDMwLAorCTB4MjksIDB4MzAsCisJMHg0OCwgMHgzQywgMHg0OCwgMHhBRCwKIAotMHgyQiwgMHg3MiwKLTB4QzIsIDB4RTEsCi0weDJDLCAweEMwLCAweDQ0LCAweEMyLAorCTB4MkIsIDB4NzIsCisJMHhDMiwgMHhFMSwKKwkweDJDLCAweEMwLCAweDQ0LCAweEMyLAogCi0weDA1LCAweDI0LCAweDM0LCAweEJGLAotMHgwRCwgMHgyNCwgMHgyQywgMHhCRiwKKwkweDA1LCAweDI0LCAweDM0LCAweEJGLAorCTB4MEQsIDB4MjQsIDB4MkMsIDB4QkYsCiAKLTB4MkQsIDB4NDYsIDB4NEUsIDB4QkYsCi0weDI1LCAweDQ2LCAweDU2LCAweEJGLAorCTB4MkQsIDB4NDYsIDB4NEUsIDB4QkYsCisJMHgyNSwgMHg0NiwgMHg1NiwgMHhCRiwKIAotMHgyMCwgMHgxRCwgMHg2RiwgMHg4RiwKLTB4MzIsIDB4M0UsIDB4NUYsIDB4RTksCisJMHgyMCwgMHgxRCwgMHg2RiwgMHg4RiwKKwkweDMyLCAweDNFLCAweDVGLCAweEU5LAogCi0weDNFLCAweDUwLCAweDU2LCAweDlGLAotMHgwMCwgMHhFMCwKLTB4M0IsIDB4MzAsCisJMHgzRSwgMHg1MCwgMHg1NiwgMHg5RiwKKwkweDAwLCAweEUwLAorCTB4M0IsIDB4MzAsCiAKLTB4MUUsIDB4OEYsIDB4NTEsIDB4OUYsCi0weDMzLCAweDFFLCAweDVGLCAweEU5LAorCTB4MUUsIDB4OEYsIDB4NTEsIDB4OUYsCisJMHgzMywgMHgxRSwgMHg1RiwgMHhFOSwKIAotMHgwNSwgMHg0NCwgMHg1NCwgMHhCMiwKLTB4MEQsIDB4NDQsIDB4NEMsIDB4QjIsCisJMHgwNSwgMHg0NCwgMHg1NCwgMHhCMiwKKwkweDBELCAweDQ0LCAweDRDLCAweEIyLAogCi0weDE5LCAweEMwLCAweEIwLCAweEU4LAotMHgzNCwgMHhDMCwgMHg0NCwgMHhDNCwKKwkweDE5LCAweEMwLCAweEIwLCAweEU4LAorCTB4MzQsIDB4QzAsIDB4NDQsIDB4QzQsCiAKLTB4MzMsIDB4NzMsCi0weDAwLCAweEUwLAotMHgzRSwgMHg2MiwgMHg1NywgMHg5RiwKKwkweDMzLCAweDczLAorCTB4MDAsIDB4RTAsCisJMHgzRSwgMHg2MiwgMHg1NywgMHg5RiwKIAotMHgxRSwgMHhBRiwgMHg1OSwgMHg5RiwKLTB4MDAsIDB4RTAsCi0weDBELCAweDIwLAorCTB4MUUsIDB4QUYsIDB4NTksIDB4OUYsCisJMHgwMCwgMHhFMCwKKwkweDBELCAweDIwLAogCi0weDg0LCAweDNFLCAweDU4LCAweEU5LAotMHgyOCwgMHgxRCwgMHg2RiwgMHg4RiwKKwkweDg0LCAweDNFLCAweDU4LCAweEU5LAorCTB4MjgsIDB4MUQsIDB4NkYsIDB4OEYsCiAKLTB4MDUsIDB4MjAsCi0weDAwLCAweEUwLAotMHg4NSwgMHgxRSwgMHg1OCwgMHhFOSwKKwkweDA1LCAweDIwLAorCTB4MDAsIDB4RTAsCisJMHg4NSwgMHgxRSwgMHg1OCwgMHhFOSwKIAotMHg5QiwgMHgzQiwgMHgzMywgMHhERiwKLTB4MjAsIDB4MjAsIDB4NDIsIDB4QUYsCisJMHg5QiwgMHgzQiwgMHgzMywgMHhERiwKKwkweDIwLCAweDIwLCAweDQyLCAweEFGLAogCi0weDMwLCAweDQyLCAweDU2LCAweDlGLAotMHg4MCwgMHgzRSwgMHg1NywgMHhFOSwKKwkweDMwLCAweDQyLCAweDU2LCAweDlGLAorCTB4ODAsIDB4M0UsIDB4NTcsIDB4RTksCiAKLTB4M0YsIDB4OEYsIDB4NTEsIDB4OUYsCi0weDMwLCAweDgwLCAweDVGLCAweEU5LAorCTB4M0YsIDB4OEYsIDB4NTEsIDB4OUYsCisJMHgzMCwgMHg4MCwgMHg1RiwgMHhFOSwKIAotMHgyOCwgMHgyOCwgMHgyNCwgMHhBRiwKLTB4ODEsIDB4MUUsIDB4NTcsIDB4RTksCisJMHgyOCwgMHgyOCwgMHgyNCwgMHhBRiwKKwkweDgxLCAweDFFLCAweDU3LCAweEU5LAogCi0weDA1LCAweDQ3LCAweDU3LCAweEJGLAotMHgwRCwgMHg0NywgMHg0RiwgMHhCRiwKKwkweDA1LCAweDQ3LCAweDU3LCAweEJGLAorCTB4MEQsIDB4NDcsIDB4NEYsIDB4QkYsCiAKLTB4ODgsIDB4ODAsIDB4NTgsIDB4RTksCi0weDFCLCAweDI5LCAweDFCLCAweERGLAorCTB4ODgsIDB4ODAsIDB4NTgsIDB4RTksCisJMHgxQiwgMHgyOSwgMHgxQiwgMHhERiwKIAotMHgzMCwgMHgxRCwgMHg2RiwgMHg4RiwKLTB4M0EsIDB4MzAsIDB4NEYsIDB4RTksCisJMHgzMCwgMHgxRCwgMHg2RiwgMHg4RiwKKwkweDNBLCAweDMwLCAweDRGLCAweEU5LAogCi0weDFDLCAweDMwLCAweDI2LCAweERGLAotMHgwOSwgMHhFMywKLTB4M0IsIDB4MDUsCisJMHgxQywgMHgzMCwgMHgyNiwgMHhERiwKKwkweDA5LCAweEUzLAorCTB4M0IsIDB4MDUsCiAKLTB4M0UsIDB4NTAsIDB4NTYsIDB4OUYsCi0weDNCLCAweDNGLCAweDRGLCAweEU5LAorCTB4M0UsIDB4NTAsIDB4NTYsIDB4OUYsCisJMHgzQiwgMHgzRiwgMHg0RiwgMHhFOSwKIAotMHgxRSwgMHg4RiwgMHg1MSwgMHg5RiwKLTB4MDAsIDB4RTAsCi0weEFDLCAweDIwLAorCTB4MUUsIDB4OEYsIDB4NTEsIDB4OUYsCisJMHgwMCwgMHhFMCwKKwkweEFDLCAweDIwLAogCi0weDJELCAweDQ0LCAweDRDLCAweEI0LAotMHgyQywgMHgxQywgMHhDMCwgMHhBRiwKKwkweDJELCAweDQ0LCAweDRDLCAweEI0LAorCTB4MkMsIDB4MUMsIDB4QzAsIDB4QUYsCiAKLTB4MjUsIDB4NDQsIDB4NTQsIDB4QjQsCi0weDAwLCAweEUwLAotMHhDOCwgMHgzMCwKKwkweDI1LCAweDQ0LCAweDU0LCAweEI0LAorCTB4MDAsIDB4RTAsCisJMHhDOCwgMHgzMCwKIAotMHgzMCwgMHg0NiwgMHgzMCwgMHhBRiwKLTB4MUIsIDB4MUIsIDB4NDgsIDB4QUYsCisJMHgzMCwgMHg0NiwgMHgzMCwgMHhBRiwKKwkweDFCLCAweDFCLCAweDQ4LCAweEFGLAogCi0weDAwLCAweEUwLAotMHgyNSwgMHgyMCwKLTB4MzgsIDB4MkMsIDB4NEYsIDB4RTksCisJMHgwMCwgMHhFMCwKKwkweDI1LCAweDIwLAorCTB4MzgsIDB4MkMsIDB4NEYsIDB4RTksCiAKLTB4ODYsIDB4ODAsIDB4NTcsIDB4RTksCi0weDM4LCAweDFELCAweDZGLCAweDhGLAorCTB4ODYsIDB4ODAsIDB4NTcsIDB4RTksCisJMHgzOCwgMHgxRCwgMHg2RiwgMHg4RiwKIAotMHgyOCwgMHg3NCwKLTB4MDAsIDB4RTAsCi0weDBELCAweDQ0LCAweDRDLCAweEIwLAorCTB4MjgsIDB4NzQsCisJMHgwMCwgMHhFMCwKKwkweDBELCAweDQ0LCAweDRDLCAweEIwLAogCi0weDA1LCAweDQ0LCAweDU0LCAweEIwLAotMHgyRCwgMHgyMCwKLTB4OUIsIDB4MTAsCisJMHgwNSwgMHg0NCwgMHg1NCwgMHhCMCwKKwkweDJELCAweDIwLAorCTB4OUIsIDB4MTAsCiAKLTB4ODIsIDB4M0UsIDB4NTcsIDB4RTksCi0weDMyLCAweEYwLCAweDFCLCAweENELAorCTB4ODIsIDB4M0UsIDB4NTcsIDB4RTksCisJMHgzMiwgMHhGMCwgMHgxQiwgMHhDRCwKIAotMHgxRSwgMHhCRCwgMHg1OSwgMHg5RiwKLTB4ODMsIDB4MUUsIDB4NTcsIDB4RTksCisJMHgxRSwgMHhCRCwgMHg1OSwgMHg5RiwKKwkweDgzLCAweDFFLCAweDU3LCAweEU5LAogCi0weDM4LCAweDQ3LCAweDM4LCAweEFGLAotMHgzNCwgMHgyMCwKLTB4MkEsIDB4MzAsCisJMHgzOCwgMHg0NywgMHgzOCwgMHhBRiwKKwkweDM0LCAweDIwLAorCTB4MkEsIDB4MzAsCiAKLTB4MDAsIDB4RTAsCi0weDBELCAweDIwLAotMHgzMiwgMHgyMCwKLTB4MDUsIDB4MjAsCisJMHgwMCwgMHhFMCwKKwkweDBELCAweDIwLAorCTB4MzIsIDB4MjAsCisJMHgwNSwgMHgyMCwKIAotMHg4NywgMHg4MCwgMHg1NywgMHhFOSwKLTB4MUYsIDB4NTQsIDB4NTcsIDB4OUYsCisJMHg4NywgMHg4MCwgMHg1NywgMHhFOSwKKwkweDFGLCAweDU0LCAweDU3LCAweDlGLAogCi0weDE3LCAweDQyLCAweDU2LCAweDlGLAotMHgwMCwgMHhFMCwKLTB4M0IsIDB4NkEsCisJMHgxNywgMHg0MiwgMHg1NiwgMHg5RiwKKwkweDAwLCAweEUwLAorCTB4M0IsIDB4NkEsCiAKLTB4M0YsIDB4OEYsIDB4NTEsIDB4OUYsCi0weDM3LCAweDFFLCAweDRGLCAweEU5LAorCTB4M0YsIDB4OEYsIDB4NTEsIDB4OUYsCisJMHgzNywgMHgxRSwgMHg0RiwgMHhFOSwKIAotMHgzNywgMHgzMiwgMHgyQSwgMHhBRiwKLTB4MDAsIDB4RTAsCi0weDMyLCAweDAwLAorCTB4MzcsIDB4MzIsIDB4MkEsIDB4QUYsCisJMHgwMCwgMHhFMCwKKwkweDMyLCAweDAwLAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgyNywgMHhDMCwgMHg0NCwgMHhDMCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MjcsIDB4QzAsIDB4NDQsIDB4QzAsCiAKLTB4MzYsIDB4MUYsIDB4NEYsIDB4RTksCi0weDFGLCAweDFGLCAweDI2LCAweERGLAorCTB4MzYsIDB4MUYsIDB4NEYsIDB4RTksCisJMHgxRiwgMHgxRiwgMHgyNiwgMHhERiwKIAotMHgzNywgMHgxQiwgMHgzNywgMHhCRiwKLTB4MTcsIDB4MjYsIDB4MTcsIDB4REYsCisJMHgzNywgMHgxQiwgMHgzNywgMHhCRiwKKwkweDE3LCAweDI2LCAweDE3LCAweERGLAogCi0weDNFLCAweDE3LCAweDRGLCAweEU5LAotMHgzRiwgMHgzRiwgMHg0RiwgMHhFOSwKKwkweDNFLCAweDE3LCAweDRGLCAweEU5LAorCTB4M0YsIDB4M0YsIDB4NEYsIDB4RTksCiAKLTB4MzQsIDB4MUYsIDB4MzQsIDB4QUYsCi0weDJCLCAweDA1LAotMHhBNywgMHgyMCwKKwkweDM0LCAweDFGLCAweDM0LCAweEFGLAorCTB4MkIsIDB4MDUsCisJMHhBNywgMHgyMCwKIAotMHgzMywgMHgyQiwgMHgzNywgMHhERiwKLTB4MjcsIDB4MTcsIDB4QzAsIDB4QUYsCisJMHgzMywgMHgyQiwgMHgzNywgMHhERiwKKwkweDI3LCAweDE3LCAweEMwLCAweEFGLAogCi0weDM0LCAweDgwLCAweDRGLCAweEU5LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDM0LCAweDgwLCAweDRGLCAweEU5LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MkQsIDB4MjEsIDB4MUEsIDB4QjAsCi0weDI1LCAweDIxLCAweDMxLCAweEIwLAorCTB4MkQsIDB4MjEsIDB4MUEsIDB4QjAsCisJMHgyNSwgMHgyMSwgMHgzMSwgMHhCMCwKIAotMHgwRCwgMHgyMSwgMHgxQSwgMHhCMiwKLTB4MDUsIDB4MjEsIDB4MzEsIDB4QjIsCisJMHgwRCwgMHgyMSwgMHgxQSwgMHhCMiwKKwkweDA1LCAweDIxLCAweDMxLCAweEIyLAogCi0weDAzLCAweDgwLCAweDJBLCAweEVBLAotMHgxNywgMHhDMSwgMHgyQiwgMHhCRCwKKwkweDAzLCAweDgwLCAweDJBLCAweEVBLAorCTB4MTcsIDB4QzEsIDB4MkIsIDB4QkQsCiAKLTB4MkQsIDB4MjAsCi0weDI1LCAweDIwLAotMHgwNSwgMHgyMCwKLTB4MEQsIDB4MjAsCisJMHgyRCwgMHgyMCwKKwkweDI1LCAweDIwLAorCTB4MDUsIDB4MjAsCisJMHgwRCwgMHgyMCwKIAotMHhCMywgMHg2OCwKLTB4OTcsIDB4MjUsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4QjMsIDB4NjgsCisJMHg5NywgMHgyNSwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDMzLCAweEMwLCAweDMzLCAweEFGLAotMHgyRiwgMHhDMCwgMHgyMSwgMHhDMCwKKwkweDMzLCAweEMwLCAweDMzLCAweEFGLAorCTB4MkYsIDB4QzAsIDB4MjEsIDB4QzAsCiAKLTB4MTYsIDB4NDIsIDB4NTYsIDB4OUYsCi0weDNDLCAweDI3LCAweDRGLCAweEU5LAorCTB4MTYsIDB4NDIsIDB4NTYsIDB4OUYsCisJMHgzQywgMHgyNywgMHg0RiwgMHhFOSwKIAotMHgxRSwgMHg2MiwgMHg1NywgMHg5RiwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgxRSwgMHg2MiwgMHg1NywgMHg5RiwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDI1LCAweDIxLCAweDMxLCAweEI0LAotMHgyRCwgMHgyMSwgMHgxQSwgMHhCNCwKKwkweDI1LCAweDIxLCAweDMxLCAweEI0LAorCTB4MkQsIDB4MjEsIDB4MUEsIDB4QjQsCiAKLTB4M0YsIDB4MkYsIDB4NUQsIDB4OUYsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4M0YsIDB4MkYsIDB4NUQsIDB4OUYsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgzMywgMHgwNSwKLTB4MDAsIDB4RTAsCi0weDI4LCAweDE5LCAweDYwLCAweEVDLAorCTB4MzMsIDB4MDUsCisJMHgwMCwgMHhFMCwKKwkweDI4LCAweDE5LCAweDYwLCAweEVDLAogCi0weDM3LCAweDBGLCAweDVDLCAweDlGLAotMHgwMCwgMHhFMCwKLTB4MkYsIDB4MjAsCisJMHgzNywgMHgwRiwgMHg1QywgMHg5RiwKKwkweDAwLCAweEUwLAorCTB4MkYsIDB4MjAsCiAKLTB4MjMsIDB4M0IsIDB4MzMsIDB4QUQsCi0weDFFLCAweDI2LCAweDFFLCAweERGLAorCTB4MjMsIDB4M0IsIDB4MzMsIDB4QUQsCisJMHgxRSwgMHgyNiwgMHgxRSwgMHhERiwKIAotMHhBNywgMHgxRSwgMHg0RiwgMHhFOSwKLTB4MTcsIDB4MjYsIDB4MTYsIDB4REYsCisJMHhBNywgMHgxRSwgMHg0RiwgMHhFOSwKKwkweDE3LCAweDI2LCAweDE2LCAweERGLAogCi0weDJELCAweDIwLAotMHgwMCwgMHhFMCwKLTB4QTgsIDB4M0YsIDB4NEYsIDB4RTksCisJMHgyRCwgMHgyMCwKKwkweDAwLCAweEUwLAorCTB4QTgsIDB4M0YsIDB4NEYsIDB4RTksCiAKLTB4MkYsIDB4MkYsIDB4MUUsIDB4QUYsCi0weDI1LCAweDIwLAotMHgwMCwgMHhFMCwKKwkweDJGLCAweDJGLCAweDFFLCAweEFGLAorCTB4MjUsIDB4MjAsCisJMHgwMCwgMHhFMCwKIAotMHhBNCwgMHgxNiwgMHg0RiwgMHhFOSwKLTB4MEYsIDB4QzAsIDB4MjEsIDB4QzIsCisJMHhBNCwgMHgxNiwgMHg0RiwgMHhFOSwKKwkweDBGLCAweEMwLCAweDIxLCAweEMyLAogCi0weEE2LCAweDgwLCAweDRGLCAweEU5LAotMHgxRiwgMHg2MiwgMHg1NywgMHg5RiwKKwkweEE2LCAweDgwLCAweDRGLCAweEU5LAorCTB4MUYsIDB4NjIsIDB4NTcsIDB4OUYsCiAKLTB4M0YsIDB4MkYsIDB4NUQsIDB4OUYsCi0weDAwLCAweEUwLAotMHg4RiwgMHgyMCwKKwkweDNGLCAweDJGLCAweDVELCAweDlGLAorCTB4MDAsIDB4RTAsCisJMHg4RiwgMHgyMCwKIAotMHhBNSwgMHgzNywgMHg0RiwgMHhFOSwKLTB4MEYsIDB4MTcsIDB4MEYsIDB4QUYsCisJMHhBNSwgMHgzNywgMHg0RiwgMHhFOSwKKwkweDBGLCAweDE3LCAweDBGLCAweEFGLAogCi0weDA2LCAweEMwLCAweDIxLCAweEM0LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDA2LCAweEMwLCAweDIxLCAweEM0LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0weEEzLCAweDgwLCAweDRGLCAweEU5LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHhBMywgMHg4MCwgMHg0RiwgMHhFOSwKIAotMHgwNiwgMHgyMCwKLTB4MDAsIDB4RTAsCi0weDFGLCAweDI2LCAweDFGLCAweERGLAorCTB4MDYsIDB4MjAsCisJMHgwMCwgMHhFMCwKKwkweDFGLCAweDI2LCAweDFGLCAweERGLAogCi0weEExLCAweDFGLCAweDRGLCAweEU5LAotMHhBMiwgMHgzRiwgMHg0RiwgMHhFOSwKKwkweEExLCAweDFGLCAweDRGLCAweEU5LAorCTB4QTIsIDB4M0YsIDB4NEYsIDB4RTksCiAKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwNiwgMHgwNiwgMHgxRiwgMHhBRiwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwNiwgMHgwNiwgMHgxRiwgMHhBRiwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4QTAsIDB4ODAsIDB4NEYsIDB4RTksCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4QTAsIDB4ODAsIDB4NEYsIDB4RTksCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4NTcsIDB4MzksIDB4MjAsIDB4RTksCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDU3LCAweDM5LCAweDIwLCAweEU5LAogCi0weDE2LCAweDI4LCAweDIwLCAweEU5LAotMHgxRCwgMHgzQiwgMHgyMCwgMHhFOSwKKwkweDE2LCAweDI4LCAweDIwLCAweEU5LAorCTB4MUQsIDB4M0IsIDB4MjAsIDB4RTksCiAKLTB4MUUsIDB4MkIsIDB4MjAsIDB4RTksCi0weDJCLCAweDMyLCAweDIwLCAweEU5LAorCTB4MUUsIDB4MkIsIDB4MjAsIDB4RTksCisJMHgyQiwgMHgzMiwgMHgyMCwgMHhFOSwKIAotMHgxQywgMHgyMywgMHgyMCwgMHhFOSwKLTB4NTcsIDB4MzYsIDB4MjAsIDB4RTksCisJMHgxQywgMHgyMywgMHgyMCwgMHhFOSwKKwkweDU3LCAweDM2LCAweDIwLCAweEU5LAogCi0weDAwLCAweDgwLCAweEEwLCAweEU5LAotMHg0MCwgMHg0MCwgMHhEOCwgMHhFQywKKwkweDAwLCAweDgwLCAweEEwLCAweEU5LAorCTB4NDAsIDB4NDAsIDB4RDgsIDB4RUMsCiAKLTB4RkYsIDB4ODAsIDB4QzAsIDB4RTksCi0weDkwLCAweEUyLAotMHgwMCwgMHhFMCwKKwkweEZGLCAweDgwLCAweEMwLCAweEU5LAorCTB4OTAsIDB4RTIsCisJMHgwMCwgMHhFMCwKIAotMHg2QywgMHhGRiwgMHgyMCwgMHhFQSwKLTB4MTksIDB4QzgsIDB4QzEsIDB4Q0QsCisJMHg2QywgMHhGRiwgMHgyMCwgMHhFQSwKKwkweDE5LCAweEM4LCAweEMxLCAweENELAogCi0weDFGLCAweEQ3LCAweDE4LCAweEJELAotMHgzRiwgMHhENywgMHgyMiwgMHhCRCwKKwkweDFGLCAweEQ3LCAweDE4LCAweEJELAorCTB4M0YsIDB4RDcsIDB4MjIsIDB4QkQsCiAKLTB4OUYsIDB4NDEsIDB4NDksIDB4QkQsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4OUYsIDB4NDEsIDB4NDksIDB4QkQsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgyNSwgMHg0MSwgMHg0OSwgMHhCRCwKLTB4MkQsIDB4NDEsIDB4NTEsIDB4QkQsCisJMHgyNSwgMHg0MSwgMHg0OSwgMHhCRCwKKwkweDJELCAweDQxLCAweDUxLCAweEJELAogCi0weDBELCAweDgwLCAweDA3LCAweEVBLAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDBELCAweDgwLCAweDA3LCAweEVBLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MzUsIDB4NDAsIDB4NDgsIDB4QkQsCi0weDNELCAweDQwLCAweDUwLCAweEJELAorCTB4MzUsIDB4NDAsIDB4NDgsIDB4QkQsCisJMHgzRCwgMHg0MCwgMHg1MCwgMHhCRCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MjUsIDB4MzAsCi0weDJELCAweDMwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgyNSwgMHgzMCwKKwkweDJELCAweDMwLAogCi0weDM1LCAweDMwLAotMHhCNSwgMHgzMCwKLTB4QkQsIDB4MzAsCi0weDNELCAweDMwLAorCTB4MzUsIDB4MzAsCisJMHhCNSwgMHgzMCwKKwkweEJELCAweDMwLAorCTB4M0QsIDB4MzAsCiAKLTB4OUMsIDB4QTcsIDB4NUIsIDB4OUYsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4OUMsIDB4QTcsIDB4NUIsIDB4OUYsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDZCLCAweEZGLCAweDBBLCAweEVBLAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDZCLCAweEZGLCAweDBBLCAweEVBLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4QzksIDB4NDEsIDB4QzgsIDB4RUMsCi0weDQyLCAweEUxLAotMHgwMCwgMHhFMCwKKwkweEM5LCAweDQxLCAweEM4LCAweEVDLAorCTB4NDIsIDB4RTEsCisJMHgwMCwgMHhFMCwKIAotMHg2OSwgMHhGRiwgMHgyMCwgMHhFQSwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHg2OSwgMHhGRiwgMHgyMCwgMHhFQSwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4QzgsIDB4NDAsIDB4QzAsIDB4RUMsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4QzgsIDB4NDAsIDB4QzAsIDB4RUMsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHg2NiwgMHhGRiwgMHgyMCwgMHhFQSwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHg2NiwgMHhGRiwgMHgyMCwgMHhFQSwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHdhcnBfZzIwMF90Z3pzYVtdID0gewogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MDAsIDB4OTgsIDB4QTAsIDB4RTksCi0weDQwLCAweDQwLCAweEQ4LCAweEVDLAorCTB4MDAsIDB4OTgsIDB4QTAsIDB4RTksCisJMHg0MCwgMHg0MCwgMHhEOCwgMHhFQywKIAotMHhGRiwgMHg4MCwgMHhDMCwgMHhFOSwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHhGRiwgMHg4MCwgMHhDMCwgMHhFOSwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDFGLCAweEQ3LCAweDE4LCAweEJELAotMHgzRiwgMHhENywgMHgyMiwgMHhCRCwKKwkweDFGLCAweEQ3LCAweDE4LCAweEJELAorCTB4M0YsIDB4RDcsIDB4MjIsIDB4QkQsCiAKLTB4ODEsIDB4MDQsCi0weDg5LCAweDA0LAotMHgwMSwgMHgwNCwKLTB4MDksIDB4MDQsCisJMHg4MSwgMHgwNCwKKwkweDg5LCAweDA0LAorCTB4MDEsIDB4MDQsCisJMHgwOSwgMHgwNCwKIAotMHhDOSwgMHg0MSwgMHhDMCwgMHhFQywKLTB4MTEsIDB4MDQsCi0weDAwLCAweEUwLAorCTB4QzksIDB4NDEsIDB4QzAsIDB4RUMsCisJMHgxMSwgMHgwNCwKKwkweDAwLCAweEUwLAogCi0weDQxLCAweENDLCAweDQxLCAweENELAotMHg0OSwgMHhDQywgMHg0OSwgMHhDRCwKKwkweDQxLCAweENDLCAweDQxLCAweENELAorCTB4NDksIDB4Q0MsIDB4NDksIDB4Q0QsCiAKLTB4RDEsIDB4NDEsIDB4QzAsIDB4RUMsCi0weDUxLCAweENDLCAweDUxLCAweENELAorCTB4RDEsIDB4NDEsIDB4QzAsIDB4RUMsCisJMHg1MSwgMHhDQywgMHg1MSwgMHhDRCwKIAotMHg4MCwgMHgwNCwKLTB4MTAsIDB4MDQsCi0weDA4LCAweDA0LAotMHgwMCwgMHhFMCwKKwkweDgwLCAweDA0LAorCTB4MTAsIDB4MDQsCisJMHgwOCwgMHgwNCwKKwkweDAwLCAweEUwLAogCi0weDAwLCAweENDLCAweEMwLCAweENELAotMHhEMSwgMHg0OSwgMHhDMCwgMHhFQywKKwkweDAwLCAweENDLCAweEMwLCAweENELAorCTB4RDEsIDB4NDksIDB4QzAsIDB4RUMsCiAKLTB4OEEsIDB4MUYsIDB4MjAsIDB4RTksCi0weDhCLCAweDNGLCAweDIwLCAweEU5LAorCTB4OEEsIDB4MUYsIDB4MjAsIDB4RTksCisJMHg4QiwgMHgzRiwgMHgyMCwgMHhFOSwKIAotMHg0MSwgMHgzQywgMHg0MSwgMHhBRCwKLTB4NDksIDB4M0MsIDB4NDksIDB4QUQsCisJMHg0MSwgMHgzQywgMHg0MSwgMHhBRCwKKwkweDQ5LCAweDNDLCAweDQ5LCAweEFELAogCi0weDEwLCAweENDLCAweDEwLCAweENELAotMHgwOCwgMHhDQywgMHgwOCwgMHhDRCwKKwkweDEwLCAweENDLCAweDEwLCAweENELAorCTB4MDgsIDB4Q0MsIDB4MDgsIDB4Q0QsCiAKLTB4QjksIDB4NDEsIDB4NDksIDB4QkIsCi0weDFGLCAweEYwLCAweDQxLCAweENELAorCTB4QjksIDB4NDEsIDB4NDksIDB4QkIsCisJMHgxRiwgMHhGMCwgMHg0MSwgMHhDRCwKIAotMHg1MSwgMHgzQywgMHg1MSwgMHhBRCwKLTB4MDAsIDB4OTgsIDB4ODAsIDB4RTksCisJMHg1MSwgMHgzQywgMHg1MSwgMHhBRCwKKwkweDAwLCAweDk4LCAweDgwLCAweEU5LAogCi0weDhGLCAweDgwLCAweDA3LCAweEVBLAotMHgyNCwgMHgxRiwgMHgyMCwgMHhFOSwKKwkweDhGLCAweDgwLCAweDA3LCAweEVBLAorCTB4MjQsIDB4MUYsIDB4MjAsIDB4RTksCiAKLTB4MjEsIDB4NDUsIDB4ODAsIDB4RTgsCi0weDFBLCAweDRELCAweDgwLCAweEU4LAorCTB4MjEsIDB4NDUsIDB4ODAsIDB4RTgsCisJMHgxQSwgMHg0RCwgMHg4MCwgMHhFOCwKIAotMHgzMSwgMHg1NSwgMHg4MCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgzMSwgMHg1NSwgMHg4MCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDE1LCAweDQxLCAweDQ5LCAweEJELAotMHgxRCwgMHg0MSwgMHg1MSwgMHhCRCwKKwkweDE1LCAweDQxLCAweDQ5LCAweEJELAorCTB4MUQsIDB4NDEsIDB4NTEsIDB4QkQsCiAKLTB4MkUsIDB4NDEsIDB4MkEsIDB4QjgsCi0weDM0LCAweDUzLCAweEEwLCAweEU4LAorCTB4MkUsIDB4NDEsIDB4MkEsIDB4QjgsCisJMHgzNCwgMHg1MywgMHhBMCwgMHhFOCwKIAotMHgxNSwgMHgzMCwKLTB4MUQsIDB4MzAsCi0weDU4LCAweEUzLAotMHgwMCwgMHhFMCwKKwkweDE1LCAweDMwLAorCTB4MUQsIDB4MzAsCisJMHg1OCwgMHhFMywKKwkweDAwLCAweEUwLAogCi0weEI1LCAweDQwLCAweDQ4LCAweEJELAotMHgzRCwgMHg0MCwgMHg1MCwgMHhCRCwKKwkweEI1LCAweDQwLCAweDQ4LCAweEJELAorCTB4M0QsIDB4NDAsIDB4NTAsIDB4QkQsCiAKLTB4MjQsIDB4NDMsIDB4QTAsIDB4RTgsCi0weDJDLCAweDRCLCAweEEwLCAweEU4LAorCTB4MjQsIDB4NDMsIDB4QTAsIDB4RTgsCisJMHgyQywgMHg0QiwgMHhBMCwgMHhFOCwKIAotMHgxNSwgMHg3MiwKLTB4MDksIDB4RTMsCi0weDAwLCAweEUwLAotMHgxRCwgMHg3MiwKKwkweDE1LCAweDcyLAorCTB4MDksIDB4RTMsCisJMHgwMCwgMHhFMCwKKwkweDFELCAweDcyLAogCi0weDM1LCAweDMwLAotMHhCNSwgMHgzMCwKLTB4QkQsIDB4MzAsCi0weDNELCAweDMwLAorCTB4MzUsIDB4MzAsCisJMHhCNSwgMHgzMCwKKwkweEJELCAweDMwLAorCTB4M0QsIDB4MzAsCiAKLTB4OUMsIDB4OTcsIDB4NTcsIDB4OUYsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4OUMsIDB4OTcsIDB4NTcsIDB4OUYsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHg2QywgMHg2NCwgMHhDOCwgMHhFQywKLTB4OTgsIDB4RTEsCi0weEI1LCAweDA1LAorCTB4NkMsIDB4NjQsIDB4QzgsIDB4RUMsCisJMHg5OCwgMHhFMSwKKwkweEI1LCAweDA1LAogCi0weEJELCAweDA1LAotMHgyRSwgMHgzMCwKLTB4MzIsIDB4QzAsIDB4QTAsIDB4RTgsCisJMHhCRCwgMHgwNSwKKwkweDJFLCAweDMwLAorCTB4MzIsIDB4QzAsIDB4QTAsIDB4RTgsCiAKLTB4MzMsIDB4QzAsIDB4QTAsIDB4RTgsCi0weDc0LCAweDY0LCAweEM4LCAweEVDLAorCTB4MzMsIDB4QzAsIDB4QTAsIDB4RTgsCisJMHg3NCwgMHg2NCwgMHhDOCwgMHhFQywKIAotMHg0MCwgMHgzQywgMHg0MCwgMHhBRCwKLTB4MzIsIDB4NkEsCi0weDJBLCAweDMwLAorCTB4NDAsIDB4M0MsIDB4NDAsIDB4QUQsCisJMHgzMiwgMHg2QSwKKwkweDJBLCAweDMwLAogCi0weDIwLCAweDczLAotMHgzMywgMHg2QSwKLTB4MDAsIDB4RTAsCi0weDI4LCAweDczLAorCTB4MjAsIDB4NzMsCisJMHgzMywgMHg2QSwKKwkweDAwLCAweEUwLAorCTB4MjgsIDB4NzMsCiAKLTB4MUMsIDB4NzIsCi0weDgzLCAweEUyLAotMHg3QiwgMHg4MCwgMHgxNSwgMHhFQSwKKwkweDFDLCAweDcyLAorCTB4ODMsIDB4RTIsCisJMHg3QiwgMHg4MCwgMHgxNSwgMHhFQSwKIAotMHhCOCwgMHgzRCwgMHgyOCwgMHhERiwKLTB4MzAsIDB4MzUsIDB4MjAsIDB4REYsCisJMHhCOCwgMHgzRCwgMHgyOCwgMHhERiwKKwkweDMwLCAweDM1LCAweDIwLCAweERGLAogCi0weDQwLCAweDMwLAotMHgwMCwgMHhFMCwKLTB4Q0MsIDB4RTIsCi0weDY0LCAweDcyLAorCTB4NDAsIDB4MzAsCisJMHgwMCwgMHhFMCwKKwkweENDLCAweEUyLAorCTB4NjQsIDB4NzIsCiAKLTB4MjUsIDB4NDIsIDB4NTIsIDB4QkYsCi0weDJELCAweDQyLCAweDRBLCAweEJGLAorCTB4MjUsIDB4NDIsIDB4NTIsIDB4QkYsCisJMHgyRCwgMHg0MiwgMHg0QSwgMHhCRiwKIAotMHgzMCwgMHgyRSwgMHgzMCwgMHhERiwKLTB4MzgsIDB4MkUsIDB4MzgsIDB4REYsCisJMHgzMCwgMHgyRSwgMHgzMCwgMHhERiwKKwkweDM4LCAweDJFLCAweDM4LCAweERGLAogCi0weDE4LCAweDFELCAweDQ1LCAweEU5LAotMHgxRSwgMHgxNSwgMHg0NSwgMHhFOSwKKwkweDE4LCAweDFELCAweDQ1LCAweEU5LAorCTB4MUUsIDB4MTUsIDB4NDUsIDB4RTksCiAKLTB4MkIsIDB4NDksIDB4NTEsIDB4QkQsCi0weDAwLCAweEUwLAotMHgxRiwgMHg3MywKKwkweDJCLCAweDQ5LCAweDUxLCAweEJELAorCTB4MDAsIDB4RTAsCisJMHgxRiwgMHg3MywKIAotMHgzOCwgMHgzOCwgMHg0MCwgMHhBRiwKLTB4MzAsIDB4MzAsIDB4NDAsIDB4QUYsCisJMHgzOCwgMHgzOCwgMHg0MCwgMHhBRiwKKwkweDMwLCAweDMwLCAweDQwLCAweEFGLAogCi0weDI0LCAweDFGLCAweDI0LCAweERGLAotMHgxRCwgMHgzMiwgMHgyMCwgMHhFOSwKKwkweDI0LCAweDFGLCAweDI0LCAweERGLAorCTB4MUQsIDB4MzIsIDB4MjAsIDB4RTksCiAKLTB4MkMsIDB4MUYsIDB4MkMsIDB4REYsCi0weDFBLCAweDMzLCAweDIwLCAweEU5LAorCTB4MkMsIDB4MUYsIDB4MkMsIDB4REYsCisJMHgxQSwgMHgzMywgMHgyMCwgMHhFOSwKIAotMHhCMCwgMHgxMCwKLTB4MDgsIDB4RTMsCi0weDQwLCAweDEwLAotMHhCOCwgMHgxMCwKKwkweEIwLCAweDEwLAorCTB4MDgsIDB4RTMsCisJMHg0MCwgMHgxMCwKKwkweEI4LCAweDEwLAogCi0weDI2LCAweEYwLCAweDMwLCAweENELAotMHgyRiwgMHhGMCwgMHgzOCwgMHhDRCwKKwkweDI2LCAweEYwLCAweDMwLCAweENELAorCTB4MkYsIDB4RjAsIDB4MzgsIDB4Q0QsCiAKLTB4MkIsIDB4ODAsIDB4MjAsIDB4RTksCi0weDJBLCAweDgwLCAweDIwLCAweEU5LAorCTB4MkIsIDB4ODAsIDB4MjAsIDB4RTksCisJMHgyQSwgMHg4MCwgMHgyMCwgMHhFOSwKIAotMHhBNiwgMHgyMCwKLTB4ODgsIDB4RTIsCi0weDAwLCAweEUwLAotMHhBRiwgMHgyMCwKKwkweEE2LCAweDIwLAorCTB4ODgsIDB4RTIsCisJMHgwMCwgMHhFMCwKKwkweEFGLCAweDIwLAogCi0weDI4LCAweDJBLCAweDI2LCAweEFGLAotMHgyMCwgMHgyQSwgMHhDMCwgMHhBRiwKKwkweDI4LCAweDJBLCAweDI2LCAweEFGLAorCTB4MjAsIDB4MkEsIDB4QzAsIDB4QUYsCiAKLTB4MzQsIDB4MUYsIDB4MzQsIDB4REYsCi0weDQ2LCAweDI0LCAweDQ2LCAweERGLAorCTB4MzQsIDB4MUYsIDB4MzQsIDB4REYsCisJMHg0NiwgMHgyNCwgMHg0NiwgMHhERiwKIAotMHgyOCwgMHgzMCwgMHg4MCwgMHhCRiwKLTB4MjAsIDB4MzgsIDB4ODAsIDB4QkYsCisJMHgyOCwgMHgzMCwgMHg4MCwgMHhCRiwKKwkweDIwLCAweDM4LCAweDgwLCAweEJGLAogCi0weDQ3LCAweDI0LCAweDQ3LCAweERGLAotMHg0RSwgMHgyQywgMHg0RSwgMHhERiwKKwkweDQ3LCAweDI0LCAweDQ3LCAweERGLAorCTB4NEUsIDB4MkMsIDB4NEUsIDB4REYsCiAKLTB4NEYsIDB4MkMsIDB4NEYsIDB4REYsCi0weDU2LCAweDM0LCAweDU2LCAweERGLAorCTB4NEYsIDB4MkMsIDB4NEYsIDB4REYsCisJMHg1NiwgMHgzNCwgMHg1NiwgMHhERiwKIAotMHgyOCwgMHgxNSwgMHgyOCwgMHhERiwKLTB4MjAsIDB4MUQsIDB4MjAsIDB4REYsCisJMHgyOCwgMHgxNSwgMHgyOCwgMHhERiwKKwkweDIwLCAweDFELCAweDIwLCAweERGLAogCi0weDU3LCAweDM0LCAweDU3LCAweERGLAotMHgwMCwgMHhFMCwKLTB4MUQsIDB4MDUsCisJMHg1NywgMHgzNCwgMHg1NywgMHhERiwKKwkweDAwLCAweEUwLAorCTB4MUQsIDB4MDUsCiAKLTB4MDQsIDB4ODAsIDB4MTAsIDB4RUEsCi0weDg5LCAweEUyLAotMHgyQiwgMHgzMCwKKwkweDA0LCAweDgwLCAweDEwLCAweEVBLAorCTB4ODksIDB4RTIsCisJMHgyQiwgMHgzMCwKIAotMHgzRiwgMHhDMSwgMHgxRCwgMHhCRCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgzRiwgMHhDMSwgMHgxRCwgMHhCRCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4QTAsIDB4NjgsCi0weEJGLCAweDI1LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweEEwLCAweDY4LAorCTB4QkYsIDB4MjUsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgyMCwgMHhDMCwgMHgyMCwgMHhBRiwKLTB4MjgsIDB4MDUsCi0weDk3LCAweDc0LAorCTB4MjAsIDB4QzAsIDB4MjAsIDB4QUYsCisJMHgyOCwgMHgwNSwKKwkweDk3LCAweDc0LAogCi0weDAwLCAweEUwLAotMHgyQSwgMHgxMCwKLTB4MTYsIDB4QzAsIDB4MjAsIDB4RTksCisJMHgwMCwgMHhFMCwKKwkweDJBLCAweDEwLAorCTB4MTYsIDB4QzAsIDB4MjAsIDB4RTksCiAKLTB4MDQsIDB4ODAsIDB4MTAsIDB4RUEsCi0weDhDLCAweEUyLAotMHg5NSwgMHgwNSwKKwkweDA0LCAweDgwLCAweDEwLCAweEVBLAorCTB4OEMsIDB4RTIsCisJMHg5NSwgMHgwNSwKIAotMHgyOCwgMHhDMSwgMHgyOCwgMHhBRCwKLTB4MUYsIDB4QzEsIDB4MTUsIDB4QkQsCisJMHgyOCwgMHhDMSwgMHgyOCwgMHhBRCwKKwkweDFGLCAweEMxLCAweDE1LCAweEJELAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4QTgsIDB4NjcsCi0weDlGLCAweDZCLAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweEE4LCAweDY3LAorCTB4OUYsIDB4NkIsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgyOCwgMHhDMCwgMHgyOCwgMHhBRCwKLTB4MUQsIDB4MjUsCi0weDIwLCAweDA1LAorCTB4MjgsIDB4QzAsIDB4MjgsIDB4QUQsCisJMHgxRCwgMHgyNSwKKwkweDIwLCAweDA1LAogCi0weDI4LCAweDMyLCAweDgwLCAweEFELAotMHg0MCwgMHgyQSwgMHg0MCwgMHhCRCwKKwkweDI4LCAweDMyLCAweDgwLCAweEFELAorCTB4NDAsIDB4MkEsIDB4NDAsIDB4QkQsCiAKLTB4MUMsIDB4ODAsIDB4MjAsIDB4RTksCi0weDIwLCAweDMzLCAweDIwLCAweEFELAorCTB4MUMsIDB4ODAsIDB4MjAsIDB4RTksCisJMHgyMCwgMHgzMywgMHgyMCwgMHhBRCwKIAotMHgyMCwgMHg3MywKLTB4MDAsIDB4RTAsCi0weEI2LCAweDQ5LCAweDUxLCAweEJCLAorCTB4MjAsIDB4NzMsCisJMHgwMCwgMHhFMCwKKwkweEI2LCAweDQ5LCAweDUxLCAweEJCLAogCi0weDI2LCAweDJGLCAweEIwLCAweEU4LAotMHgxOSwgMHgyMCwgMHgyMCwgMHhFOSwKKwkweDI2LCAweDJGLCAweEIwLCAweEU4LAorCTB4MTksIDB4MjAsIDB4MjAsIDB4RTksCiAKLTB4MzUsIDB4MjAsIDB4MzUsIDB4REYsCi0weDNELCAweDIwLCAweDNELCAweERGLAorCTB4MzUsIDB4MjAsIDB4MzUsIDB4REYsCisJMHgzRCwgMHgyMCwgMHgzRCwgMHhERiwKIAotMHgxNSwgMHgyMCwgMHgxNSwgMHhERiwKLTB4MUQsIDB4MjAsIDB4MUQsIDB4REYsCisJMHgxNSwgMHgyMCwgMHgxNSwgMHhERiwKKwkweDFELCAweDIwLCAweDFELCAweERGLAogCi0weDI2LCAweEQwLCAweDI2LCAweENELAotMHgyOSwgMHg0OSwgMHgyQSwgMHhCOCwKKwkweDI2LCAweEQwLCAweDI2LCAweENELAorCTB4MjksIDB4NDksIDB4MkEsIDB4QjgsCiAKLTB4MjYsIDB4NDAsIDB4ODAsIDB4QkQsCi0weDNCLCAweDQ4LCAweDUwLCAweEJELAorCTB4MjYsIDB4NDAsIDB4ODAsIDB4QkQsCisJMHgzQiwgMHg0OCwgMHg1MCwgMHhCRCwKIAotMHgzRSwgMHg1NCwgMHg1NywgMHg5RiwKLTB4MDAsIDB4RTAsCi0weDgyLCAweEUxLAorCTB4M0UsIDB4NTQsIDB4NTcsIDB4OUYsCisJMHgwMCwgMHhFMCwKKwkweDgyLCAweEUxLAogCi0weDFFLCAweEFGLCAweDU5LCAweDlGLAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDFFLCAweEFGLCAweDU5LCAweDlGLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MjYsIDB4MzAsCi0weDI5LCAweDMwLAotMHg0OCwgMHgzQywgMHg0OCwgMHhBRCwKKwkweDI2LCAweDMwLAorCTB4MjksIDB4MzAsCisJMHg0OCwgMHgzQywgMHg0OCwgMHhBRCwKIAotMHgyQiwgMHg3MiwKLTB4QzIsIDB4RTEsCi0weDJDLCAweEMwLCAweDQ0LCAweEMyLAorCTB4MkIsIDB4NzIsCisJMHhDMiwgMHhFMSwKKwkweDJDLCAweEMwLCAweDQ0LCAweEMyLAogCi0weDA1LCAweDI0LCAweDM0LCAweEJGLAotMHgwRCwgMHgyNCwgMHgyQywgMHhCRiwKKwkweDA1LCAweDI0LCAweDM0LCAweEJGLAorCTB4MEQsIDB4MjQsIDB4MkMsIDB4QkYsCiAKLTB4MkQsIDB4NDYsIDB4NEUsIDB4QkYsCi0weDI1LCAweDQ2LCAweDU2LCAweEJGLAorCTB4MkQsIDB4NDYsIDB4NEUsIDB4QkYsCisJMHgyNSwgMHg0NiwgMHg1NiwgMHhCRiwKIAotMHgyMCwgMHgxRCwgMHg2RiwgMHg4RiwKLTB4MzIsIDB4M0UsIDB4NUYsIDB4RTksCisJMHgyMCwgMHgxRCwgMHg2RiwgMHg4RiwKKwkweDMyLCAweDNFLCAweDVGLCAweEU5LAogCi0weDNFLCAweDUwLCAweDU2LCAweDlGLAotMHgwMCwgMHhFMCwKLTB4M0IsIDB4MzAsCisJMHgzRSwgMHg1MCwgMHg1NiwgMHg5RiwKKwkweDAwLCAweEUwLAorCTB4M0IsIDB4MzAsCiAKLTB4MUUsIDB4OEYsIDB4NTEsIDB4OUYsCi0weDMzLCAweDFFLCAweDVGLCAweEU5LAorCTB4MUUsIDB4OEYsIDB4NTEsIDB4OUYsCisJMHgzMywgMHgxRSwgMHg1RiwgMHhFOSwKIAotMHgwNSwgMHg0NCwgMHg1NCwgMHhCMiwKLTB4MEQsIDB4NDQsIDB4NEMsIDB4QjIsCisJMHgwNSwgMHg0NCwgMHg1NCwgMHhCMiwKKwkweDBELCAweDQ0LCAweDRDLCAweEIyLAogCi0weDE5LCAweEMwLCAweEIwLCAweEU4LAotMHgzNCwgMHhDMCwgMHg0NCwgMHhDNCwKKwkweDE5LCAweEMwLCAweEIwLCAweEU4LAorCTB4MzQsIDB4QzAsIDB4NDQsIDB4QzQsCiAKLTB4MzMsIDB4NzMsCi0weDAwLCAweEUwLAotMHgzRSwgMHg2MiwgMHg1NywgMHg5RiwKKwkweDMzLCAweDczLAorCTB4MDAsIDB4RTAsCisJMHgzRSwgMHg2MiwgMHg1NywgMHg5RiwKIAotMHgxRSwgMHhBRiwgMHg1OSwgMHg5RiwKLTB4MDAsIDB4RTAsCi0weDBELCAweDIwLAorCTB4MUUsIDB4QUYsIDB4NTksIDB4OUYsCisJMHgwMCwgMHhFMCwKKwkweDBELCAweDIwLAogCi0weDg0LCAweDNFLCAweDU4LCAweEU5LAotMHgyOCwgMHgxRCwgMHg2RiwgMHg4RiwKKwkweDg0LCAweDNFLCAweDU4LCAweEU5LAorCTB4MjgsIDB4MUQsIDB4NkYsIDB4OEYsCiAKLTB4MDUsIDB4MjAsCi0weDAwLCAweEUwLAotMHg4NSwgMHgxRSwgMHg1OCwgMHhFOSwKKwkweDA1LCAweDIwLAorCTB4MDAsIDB4RTAsCisJMHg4NSwgMHgxRSwgMHg1OCwgMHhFOSwKIAotMHg5QiwgMHgzQiwgMHgzMywgMHhERiwKLTB4MjAsIDB4MjAsIDB4NDIsIDB4QUYsCisJMHg5QiwgMHgzQiwgMHgzMywgMHhERiwKKwkweDIwLCAweDIwLCAweDQyLCAweEFGLAogCi0weDMwLCAweDQyLCAweDU2LCAweDlGLAotMHg4MCwgMHgzRSwgMHg1NywgMHhFOSwKKwkweDMwLCAweDQyLCAweDU2LCAweDlGLAorCTB4ODAsIDB4M0UsIDB4NTcsIDB4RTksCiAKLTB4M0YsIDB4OEYsIDB4NTEsIDB4OUYsCi0weDMwLCAweDgwLCAweDVGLCAweEU5LAorCTB4M0YsIDB4OEYsIDB4NTEsIDB4OUYsCisJMHgzMCwgMHg4MCwgMHg1RiwgMHhFOSwKIAotMHgyOCwgMHgyOCwgMHgyNCwgMHhBRiwKLTB4ODEsIDB4MUUsIDB4NTcsIDB4RTksCisJMHgyOCwgMHgyOCwgMHgyNCwgMHhBRiwKKwkweDgxLCAweDFFLCAweDU3LCAweEU5LAogCi0weDA1LCAweDQ3LCAweDU3LCAweEJGLAotMHgwRCwgMHg0NywgMHg0RiwgMHhCRiwKKwkweDA1LCAweDQ3LCAweDU3LCAweEJGLAorCTB4MEQsIDB4NDcsIDB4NEYsIDB4QkYsCiAKLTB4ODgsIDB4ODAsIDB4NTgsIDB4RTksCi0weDFCLCAweDI5LCAweDFCLCAweERGLAorCTB4ODgsIDB4ODAsIDB4NTgsIDB4RTksCisJMHgxQiwgMHgyOSwgMHgxQiwgMHhERiwKIAotMHgzMCwgMHgxRCwgMHg2RiwgMHg4RiwKLTB4M0EsIDB4MzAsIDB4NEYsIDB4RTksCisJMHgzMCwgMHgxRCwgMHg2RiwgMHg4RiwKKwkweDNBLCAweDMwLCAweDRGLCAweEU5LAogCi0weDFDLCAweDMwLCAweDI2LCAweERGLAotMHgwOSwgMHhFMywKLTB4M0IsIDB4MDUsCisJMHgxQywgMHgzMCwgMHgyNiwgMHhERiwKKwkweDA5LCAweEUzLAorCTB4M0IsIDB4MDUsCiAKLTB4M0UsIDB4NTAsIDB4NTYsIDB4OUYsCi0weDNCLCAweDNGLCAweDRGLCAweEU5LAorCTB4M0UsIDB4NTAsIDB4NTYsIDB4OUYsCisJMHgzQiwgMHgzRiwgMHg0RiwgMHhFOSwKIAotMHgxRSwgMHg4RiwgMHg1MSwgMHg5RiwKLTB4MDAsIDB4RTAsCi0weEFDLCAweDIwLAorCTB4MUUsIDB4OEYsIDB4NTEsIDB4OUYsCisJMHgwMCwgMHhFMCwKKwkweEFDLCAweDIwLAogCi0weDJELCAweDQ0LCAweDRDLCAweEI0LAotMHgyQywgMHgxQywgMHhDMCwgMHhBRiwKKwkweDJELCAweDQ0LCAweDRDLCAweEI0LAorCTB4MkMsIDB4MUMsIDB4QzAsIDB4QUYsCiAKLTB4MjUsIDB4NDQsIDB4NTQsIDB4QjQsCi0weDAwLCAweEUwLAotMHhDOCwgMHgzMCwKKwkweDI1LCAweDQ0LCAweDU0LCAweEI0LAorCTB4MDAsIDB4RTAsCisJMHhDOCwgMHgzMCwKIAotMHgzMCwgMHg0NiwgMHgzMCwgMHhBRiwKLTB4MUIsIDB4MUIsIDB4NDgsIDB4QUYsCisJMHgzMCwgMHg0NiwgMHgzMCwgMHhBRiwKKwkweDFCLCAweDFCLCAweDQ4LCAweEFGLAogCi0weDAwLCAweEUwLAotMHgyNSwgMHgyMCwKLTB4MzgsIDB4MkMsIDB4NEYsIDB4RTksCisJMHgwMCwgMHhFMCwKKwkweDI1LCAweDIwLAorCTB4MzgsIDB4MkMsIDB4NEYsIDB4RTksCiAKLTB4ODYsIDB4ODAsIDB4NTcsIDB4RTksCi0weDM4LCAweDFELCAweDZGLCAweDhGLAorCTB4ODYsIDB4ODAsIDB4NTcsIDB4RTksCisJMHgzOCwgMHgxRCwgMHg2RiwgMHg4RiwKIAotMHgyOCwgMHg3NCwKLTB4MDAsIDB4RTAsCi0weDBELCAweDQ0LCAweDRDLCAweEIwLAorCTB4MjgsIDB4NzQsCisJMHgwMCwgMHhFMCwKKwkweDBELCAweDQ0LCAweDRDLCAweEIwLAogCi0weDA1LCAweDQ0LCAweDU0LCAweEIwLAotMHgyRCwgMHgyMCwKLTB4OUIsIDB4MTAsCisJMHgwNSwgMHg0NCwgMHg1NCwgMHhCMCwKKwkweDJELCAweDIwLAorCTB4OUIsIDB4MTAsCiAKLTB4ODIsIDB4M0UsIDB4NTcsIDB4RTksCi0weDMyLCAweEYwLCAweDFCLCAweENELAorCTB4ODIsIDB4M0UsIDB4NTcsIDB4RTksCisJMHgzMiwgMHhGMCwgMHgxQiwgMHhDRCwKIAotMHgxRSwgMHhCRCwgMHg1OSwgMHg5RiwKLTB4ODMsIDB4MUUsIDB4NTcsIDB4RTksCisJMHgxRSwgMHhCRCwgMHg1OSwgMHg5RiwKKwkweDgzLCAweDFFLCAweDU3LCAweEU5LAogCi0weDM4LCAweDQ3LCAweDM4LCAweEFGLAotMHgzNCwgMHgyMCwKLTB4MkEsIDB4MzAsCisJMHgzOCwgMHg0NywgMHgzOCwgMHhBRiwKKwkweDM0LCAweDIwLAorCTB4MkEsIDB4MzAsCiAKLTB4MDAsIDB4RTAsCi0weDBELCAweDIwLAotMHgzMiwgMHgyMCwKLTB4MDUsIDB4MjAsCisJMHgwMCwgMHhFMCwKKwkweDBELCAweDIwLAorCTB4MzIsIDB4MjAsCisJMHgwNSwgMHgyMCwKIAotMHg4NywgMHg4MCwgMHg1NywgMHhFOSwKLTB4MUYsIDB4NTQsIDB4NTcsIDB4OUYsCisJMHg4NywgMHg4MCwgMHg1NywgMHhFOSwKKwkweDFGLCAweDU0LCAweDU3LCAweDlGLAogCi0weDE3LCAweDQyLCAweDU2LCAweDlGLAotMHgwMCwgMHhFMCwKLTB4M0IsIDB4NkEsCisJMHgxNywgMHg0MiwgMHg1NiwgMHg5RiwKKwkweDAwLCAweEUwLAorCTB4M0IsIDB4NkEsCiAKLTB4M0YsIDB4OEYsIDB4NTEsIDB4OUYsCi0weDM3LCAweDFFLCAweDRGLCAweEU5LAorCTB4M0YsIDB4OEYsIDB4NTEsIDB4OUYsCisJMHgzNywgMHgxRSwgMHg0RiwgMHhFOSwKIAotMHgzNywgMHgzMiwgMHgyQSwgMHhBRiwKLTB4MDAsIDB4RTAsCi0weDMyLCAweDAwLAorCTB4MzcsIDB4MzIsIDB4MkEsIDB4QUYsCisJMHgwMCwgMHhFMCwKKwkweDMyLCAweDAwLAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgyNywgMHhDMCwgMHg0NCwgMHhDMCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MjcsIDB4QzAsIDB4NDQsIDB4QzAsCiAKLTB4MzYsIDB4MUYsIDB4NEYsIDB4RTksCi0weDFGLCAweDFGLCAweDI2LCAweERGLAorCTB4MzYsIDB4MUYsIDB4NEYsIDB4RTksCisJMHgxRiwgMHgxRiwgMHgyNiwgMHhERiwKIAotMHgzNywgMHgxQiwgMHgzNywgMHhCRiwKLTB4MTcsIDB4MjYsIDB4MTcsIDB4REYsCisJMHgzNywgMHgxQiwgMHgzNywgMHhCRiwKKwkweDE3LCAweDI2LCAweDE3LCAweERGLAogCi0weDNFLCAweDE3LCAweDRGLCAweEU5LAotMHgzRiwgMHgzRiwgMHg0RiwgMHhFOSwKKwkweDNFLCAweDE3LCAweDRGLCAweEU5LAorCTB4M0YsIDB4M0YsIDB4NEYsIDB4RTksCiAKLTB4MzQsIDB4MUYsIDB4MzQsIDB4QUYsCi0weDJCLCAweDA1LAotMHhBNywgMHgyMCwKKwkweDM0LCAweDFGLCAweDM0LCAweEFGLAorCTB4MkIsIDB4MDUsCisJMHhBNywgMHgyMCwKIAotMHgzMywgMHgyQiwgMHgzNywgMHhERiwKLTB4MjcsIDB4MTcsIDB4QzAsIDB4QUYsCisJMHgzMywgMHgyQiwgMHgzNywgMHhERiwKKwkweDI3LCAweDE3LCAweEMwLCAweEFGLAogCi0weDM0LCAweDgwLCAweDRGLCAweEU5LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDM0LCAweDgwLCAweDRGLCAweEU5LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MkQsIDB4MjEsIDB4MUEsIDB4QjAsCi0weDI1LCAweDIxLCAweDMxLCAweEIwLAorCTB4MkQsIDB4MjEsIDB4MUEsIDB4QjAsCisJMHgyNSwgMHgyMSwgMHgzMSwgMHhCMCwKIAotMHgwRCwgMHgyMSwgMHgxQSwgMHhCMiwKLTB4MDUsIDB4MjEsIDB4MzEsIDB4QjIsCisJMHgwRCwgMHgyMSwgMHgxQSwgMHhCMiwKKwkweDA1LCAweDIxLCAweDMxLCAweEIyLAogCi0weDAzLCAweDgwLCAweDJBLCAweEVBLAotMHgxNywgMHhDMSwgMHgyQiwgMHhCRCwKKwkweDAzLCAweDgwLCAweDJBLCAweEVBLAorCTB4MTcsIDB4QzEsIDB4MkIsIDB4QkQsCiAKLTB4MkQsIDB4MjAsCi0weDI1LCAweDIwLAotMHgwNSwgMHgyMCwKLTB4MEQsIDB4MjAsCisJMHgyRCwgMHgyMCwKKwkweDI1LCAweDIwLAorCTB4MDUsIDB4MjAsCisJMHgwRCwgMHgyMCwKIAotMHhCMywgMHg2OCwKLTB4OTcsIDB4MjUsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4QjMsIDB4NjgsCisJMHg5NywgMHgyNSwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDMzLCAweEMwLCAweDMzLCAweEFGLAotMHgyRiwgMHhDMCwgMHgyMSwgMHhDMCwKKwkweDMzLCAweEMwLCAweDMzLCAweEFGLAorCTB4MkYsIDB4QzAsIDB4MjEsIDB4QzAsCiAKLTB4MTYsIDB4NDIsIDB4NTYsIDB4OUYsCi0weDNDLCAweDI3LCAweDRGLCAweEU5LAorCTB4MTYsIDB4NDIsIDB4NTYsIDB4OUYsCisJMHgzQywgMHgyNywgMHg0RiwgMHhFOSwKIAotMHgxRSwgMHg2MiwgMHg1NywgMHg5RiwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgxRSwgMHg2MiwgMHg1NywgMHg5RiwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDI1LCAweDIxLCAweDMxLCAweEI0LAotMHgyRCwgMHgyMSwgMHgxQSwgMHhCNCwKKwkweDI1LCAweDIxLCAweDMxLCAweEI0LAorCTB4MkQsIDB4MjEsIDB4MUEsIDB4QjQsCiAKLTB4M0YsIDB4MkYsIDB4NUQsIDB4OUYsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4M0YsIDB4MkYsIDB4NUQsIDB4OUYsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgzMywgMHgwNSwKLTB4MDAsIDB4RTAsCi0weDI4LCAweDE5LCAweDYwLCAweEVDLAorCTB4MzMsIDB4MDUsCisJMHgwMCwgMHhFMCwKKwkweDI4LCAweDE5LCAweDYwLCAweEVDLAogCi0weDBELCAweDQ0LCAweDRDLCAweEI2LAotMHgwNSwgMHg0NCwgMHg1NCwgMHhCNiwKKwkweDBELCAweDQ0LCAweDRDLCAweEI2LAorCTB4MDUsIDB4NDQsIDB4NTQsIDB4QjYsCiAKLTB4MzcsIDB4MEYsIDB4NUMsIDB4OUYsCi0weDAwLCAweEUwLAotMHgyRiwgMHgyMCwKKwkweDM3LCAweDBGLCAweDVDLCAweDlGLAorCTB4MDAsIDB4RTAsCisJMHgyRiwgMHgyMCwKIAotMHgyMywgMHgzQiwgMHgzMywgMHhBRCwKLTB4MUUsIDB4MjYsIDB4MUUsIDB4REYsCisJMHgyMywgMHgzQiwgMHgzMywgMHhBRCwKKwkweDFFLCAweDI2LCAweDFFLCAweERGLAogCi0weEE3LCAweDFFLCAweDRGLCAweEU5LAotMHgxNywgMHgyNiwgMHgxNiwgMHhERiwKKwkweEE3LCAweDFFLCAweDRGLCAweEU5LAorCTB4MTcsIDB4MjYsIDB4MTYsIDB4REYsCiAKLTB4MkQsIDB4MjAsCi0weDAwLCAweEUwLAotMHhBOCwgMHgzRiwgMHg0RiwgMHhFOSwKKwkweDJELCAweDIwLAorCTB4MDAsIDB4RTAsCisJMHhBOCwgMHgzRiwgMHg0RiwgMHhFOSwKIAotMHgyRiwgMHgyRiwgMHgxRSwgMHhBRiwKLTB4MjUsIDB4MjAsCi0weDAwLCAweEUwLAorCTB4MkYsIDB4MkYsIDB4MUUsIDB4QUYsCisJMHgyNSwgMHgyMCwKKwkweDAwLCAweEUwLAogCi0weEE0LCAweDE2LCAweDRGLCAweEU5LAotMHgwRiwgMHhDMCwgMHgyMSwgMHhDMiwKKwkweEE0LCAweDE2LCAweDRGLCAweEU5LAorCTB4MEYsIDB4QzAsIDB4MjEsIDB4QzIsCiAKLTB4QTYsIDB4ODAsIDB4NEYsIDB4RTksCi0weDFGLCAweDYyLCAweDU3LCAweDlGLAorCTB4QTYsIDB4ODAsIDB4NEYsIDB4RTksCisJMHgxRiwgMHg2MiwgMHg1NywgMHg5RiwKIAotMHgwRCwgMHgyMCwKLTB4MDUsIDB4MjAsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MEQsIDB4MjAsCisJMHgwNSwgMHgyMCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDNGLCAweDJGLCAweDVELCAweDlGLAotMHgwMCwgMHhFMCwKLTB4MEYsIDB4MjAsCisJMHgzRiwgMHgyRiwgMHg1RCwgMHg5RiwKKwkweDAwLCAweEUwLAorCTB4MEYsIDB4MjAsCiAKLTB4MTcsIDB4NTAsIDB4NTYsIDB4OUYsCi0weEE1LCAweDM3LCAweDRGLCAweEU5LAorCTB4MTcsIDB4NTAsIDB4NTYsIDB4OUYsCisJMHhBNSwgMHgzNywgMHg0RiwgMHhFOSwKIAotMHgwNiwgMHhDMCwgMHgyMSwgMHhDNCwKLTB4MEYsIDB4MTcsIDB4MEYsIDB4QUYsCisJMHgwNiwgMHhDMCwgMHgyMSwgMHhDNCwKKwkweDBGLCAweDE3LCAweDBGLCAweEFGLAogCi0weDM3LCAweDBGLCAweDVDLCAweDlGLAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDM3LCAweDBGLCAweDVDLCAweDlGLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MkYsIDB4QzAsIDB4NDQsIDB4QzYsCi0weEEzLCAweDgwLCAweDRGLCAweEU5LAorCTB4MkYsIDB4QzAsIDB4NDQsIDB4QzYsCisJMHhBMywgMHg4MCwgMHg0RiwgMHhFOSwKIAotMHgwNiwgMHgyMCwKLTB4MDAsIDB4RTAsCi0weDFGLCAweDI2LCAweDFGLCAweERGLAorCTB4MDYsIDB4MjAsCisJMHgwMCwgMHhFMCwKKwkweDFGLCAweDI2LCAweDFGLCAweERGLAogCi0weDE3LCAweDI2LCAweDE3LCAweERGLAotMHg5RCwgMHgxNywgMHg0RiwgMHhFOSwKKwkweDE3LCAweDI2LCAweDE3LCAweERGLAorCTB4OUQsIDB4MTcsIDB4NEYsIDB4RTksCiAKLTB4QTEsIDB4MUYsIDB4NEYsIDB4RTksCi0weEEyLCAweDNGLCAweDRGLCAweEU5LAorCTB4QTEsIDB4MUYsIDB4NEYsIDB4RTksCisJMHhBMiwgMHgzRiwgMHg0RiwgMHhFOSwKIAotMHgwNiwgMHgwNiwgMHgxRiwgMHhBRiwKLTB4MDAsIDB4RTAsCi0weEFGLCAweDIwLAorCTB4MDYsIDB4MDYsIDB4MUYsIDB4QUYsCisJMHgwMCwgMHhFMCwKKwkweEFGLCAweDIwLAogCi0weDlFLCAweDM3LCAweDRGLCAweEU5LAotMHgyRiwgMHgxNywgMHgyRiwgMHhBRiwKKwkweDlFLCAweDM3LCAweDRGLCAweEU5LAorCTB4MkYsIDB4MTcsIDB4MkYsIDB4QUYsCiAKLTB4QTAsIDB4ODAsIDB4NEYsIDB4RTksCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4QTAsIDB4ODAsIDB4NEYsIDB4RTksCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4OUMsIDB4ODAsIDB4NEYsIDB4RTksCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDlDLCAweDgwLCAweDRGLCAweEU5LAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHg1NywgMHgzOSwgMHgyMCwgMHhFOSwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4NTcsIDB4MzksIDB4MjAsIDB4RTksCiAKLTB4MTYsIDB4MjgsIDB4MjAsIDB4RTksCi0weDFELCAweDNCLCAweDIwLCAweEU5LAorCTB4MTYsIDB4MjgsIDB4MjAsIDB4RTksCisJMHgxRCwgMHgzQiwgMHgyMCwgMHhFOSwKIAotMHgxRSwgMHgyQiwgMHgyMCwgMHhFOSwKLTB4MkIsIDB4MzIsIDB4MjAsIDB4RTksCisJMHgxRSwgMHgyQiwgMHgyMCwgMHhFOSwKKwkweDJCLCAweDMyLCAweDIwLCAweEU5LAogCi0weDFDLCAweDIzLCAweDIwLCAweEU5LAotMHg1NywgMHgzNiwgMHgyMCwgMHhFOSwKKwkweDFDLCAweDIzLCAweDIwLCAweEU5LAorCTB4NTcsIDB4MzYsIDB4MjAsIDB4RTksCiAKLTB4MDAsIDB4ODAsIDB4QTAsIDB4RTksCi0weDQwLCAweDQwLCAweEQ4LCAweEVDLAorCTB4MDAsIDB4ODAsIDB4QTAsIDB4RTksCisJMHg0MCwgMHg0MCwgMHhEOCwgMHhFQywKIAotMHhGRiwgMHg4MCwgMHhDMCwgMHhFOSwKLTB4OTAsIDB4RTIsCi0weDAwLCAweEUwLAorCTB4RkYsIDB4ODAsIDB4QzAsIDB4RTksCisJMHg5MCwgMHhFMiwKKwkweDAwLCAweEUwLAogCi0weDY4LCAweEZGLCAweDIwLCAweEVBLAotMHgxOSwgMHhDOCwgMHhDMSwgMHhDRCwKKwkweDY4LCAweEZGLCAweDIwLCAweEVBLAorCTB4MTksIDB4QzgsIDB4QzEsIDB4Q0QsCiAKLTB4MUYsIDB4RDcsIDB4MTgsIDB4QkQsCi0weDNGLCAweEQ3LCAweDIyLCAweEJELAorCTB4MUYsIDB4RDcsIDB4MTgsIDB4QkQsCisJMHgzRiwgMHhENywgMHgyMiwgMHhCRCwKIAotMHg5RiwgMHg0MSwgMHg0OSwgMHhCRCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHg5RiwgMHg0MSwgMHg0OSwgMHhCRCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDI1LCAweDQxLCAweDQ5LCAweEJELAotMHgyRCwgMHg0MSwgMHg1MSwgMHhCRCwKKwkweDI1LCAweDQxLCAweDQ5LCAweEJELAorCTB4MkQsIDB4NDEsIDB4NTEsIDB4QkQsCiAKLTB4MEQsIDB4ODAsIDB4MDcsIDB4RUEsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MEQsIDB4ODAsIDB4MDcsIDB4RUEsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgzNSwgMHg0MCwgMHg0OCwgMHhCRCwKLTB4M0QsIDB4NDAsIDB4NTAsIDB4QkQsCisJMHgzNSwgMHg0MCwgMHg0OCwgMHhCRCwKKwkweDNELCAweDQwLCAweDUwLCAweEJELAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgyNSwgMHgzMCwKLTB4MkQsIDB4MzAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDI1LCAweDMwLAorCTB4MkQsIDB4MzAsCiAKLTB4MzUsIDB4MzAsCi0weEI1LCAweDMwLAotMHhCRCwgMHgzMCwKLTB4M0QsIDB4MzAsCisJMHgzNSwgMHgzMCwKKwkweEI1LCAweDMwLAorCTB4QkQsIDB4MzAsCisJMHgzRCwgMHgzMCwKIAotMHg5QywgMHhBNywgMHg1QiwgMHg5RiwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHg5QywgMHhBNywgMHg1QiwgMHg5RiwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4NjcsIDB4RkYsIDB4MEEsIDB4RUEsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4NjcsIDB4RkYsIDB4MEEsIDB4RUEsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHhDOSwgMHg0MSwgMHhDOCwgMHhFQywKLTB4NDIsIDB4RTEsCi0weDAwLCAweEUwLAorCTB4QzksIDB4NDEsIDB4QzgsIDB4RUMsCisJMHg0MiwgMHhFMSwKKwkweDAwLCAweEUwLAogCi0weDY1LCAweEZGLCAweDIwLCAweEVBLAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDY1LCAweEZGLCAweDIwLCAweEVBLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHhDOCwgMHg0MCwgMHhDMCwgMHhFQywKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHhDOCwgMHg0MCwgMHhDMCwgMHhFQywKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDYyLCAweEZGLCAweDIwLCAweEVBLAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDYyLCAweEZGLCAweDIwLCAweEVBLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAogfTsKIAogc3RhdGljIHVuc2lnbmVkIGNoYXIgd2FycF9nMjAwX3RnenNhZltdID0gewogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDk4LCAweEEwLCAweEU5LAotMHg0MCwgMHg0MCwgMHhEOCwgMHhFQywKKwkweDAwLCAweDk4LCAweEEwLCAweEU5LAorCTB4NDAsIDB4NDAsIDB4RDgsIDB4RUMsCiAKLTB4RkYsIDB4ODAsIDB4QzAsIDB4RTksCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4RkYsIDB4ODAsIDB4QzAsIDB4RTksCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgxRiwgMHhENywgMHgxOCwgMHhCRCwKLTB4M0YsIDB4RDcsIDB4MjIsIDB4QkQsCisJMHgxRiwgMHhENywgMHgxOCwgMHhCRCwKKwkweDNGLCAweEQ3LCAweDIyLCAweEJELAogCi0weDgxLCAweDA0LAotMHg4OSwgMHgwNCwKLTB4MDEsIDB4MDQsCi0weDA5LCAweDA0LAorCTB4ODEsIDB4MDQsCisJMHg4OSwgMHgwNCwKKwkweDAxLCAweDA0LAorCTB4MDksIDB4MDQsCiAKLTB4QzksIDB4NDEsIDB4QzAsIDB4RUMsCi0weDExLCAweDA0LAotMHgwMCwgMHhFMCwKKwkweEM5LCAweDQxLCAweEMwLCAweEVDLAorCTB4MTEsIDB4MDQsCisJMHgwMCwgMHhFMCwKIAotMHg0MSwgMHhDQywgMHg0MSwgMHhDRCwKLTB4NDksIDB4Q0MsIDB4NDksIDB4Q0QsCisJMHg0MSwgMHhDQywgMHg0MSwgMHhDRCwKKwkweDQ5LCAweENDLCAweDQ5LCAweENELAogCi0weEQxLCAweDQxLCAweEMwLCAweEVDLAotMHg1MSwgMHhDQywgMHg1MSwgMHhDRCwKKwkweEQxLCAweDQxLCAweEMwLCAweEVDLAorCTB4NTEsIDB4Q0MsIDB4NTEsIDB4Q0QsCiAKLTB4ODAsIDB4MDQsCi0weDEwLCAweDA0LAotMHgwOCwgMHgwNCwKLTB4MDAsIDB4RTAsCisJMHg4MCwgMHgwNCwKKwkweDEwLCAweDA0LAorCTB4MDgsIDB4MDQsCisJMHgwMCwgMHhFMCwKIAotMHgwMCwgMHhDQywgMHhDMCwgMHhDRCwKLTB4RDEsIDB4NDksIDB4QzAsIDB4RUMsCisJMHgwMCwgMHhDQywgMHhDMCwgMHhDRCwKKwkweEQxLCAweDQ5LCAweEMwLCAweEVDLAogCi0weDhBLCAweDFGLCAweDIwLCAweEU5LAotMHg4QiwgMHgzRiwgMHgyMCwgMHhFOSwKKwkweDhBLCAweDFGLCAweDIwLCAweEU5LAorCTB4OEIsIDB4M0YsIDB4MjAsIDB4RTksCiAKLTB4NDEsIDB4M0MsIDB4NDEsIDB4QUQsCi0weDQ5LCAweDNDLCAweDQ5LCAweEFELAorCTB4NDEsIDB4M0MsIDB4NDEsIDB4QUQsCisJMHg0OSwgMHgzQywgMHg0OSwgMHhBRCwKIAotMHgxMCwgMHhDQywgMHgxMCwgMHhDRCwKLTB4MDgsIDB4Q0MsIDB4MDgsIDB4Q0QsCisJMHgxMCwgMHhDQywgMHgxMCwgMHhDRCwKKwkweDA4LCAweENDLCAweDA4LCAweENELAogCi0weEI5LCAweDQxLCAweDQ5LCAweEJCLAotMHgxRiwgMHhGMCwgMHg0MSwgMHhDRCwKKwkweEI5LCAweDQxLCAweDQ5LCAweEJCLAorCTB4MUYsIDB4RjAsIDB4NDEsIDB4Q0QsCiAKLTB4NTEsIDB4M0MsIDB4NTEsIDB4QUQsCi0weDAwLCAweDk4LCAweDgwLCAweEU5LAorCTB4NTEsIDB4M0MsIDB4NTEsIDB4QUQsCisJMHgwMCwgMHg5OCwgMHg4MCwgMHhFOSwKIAotMHg5NCwgMHg4MCwgMHgwNywgMHhFQSwKLTB4MjQsIDB4MUYsIDB4MjAsIDB4RTksCisJMHg5NCwgMHg4MCwgMHgwNywgMHhFQSwKKwkweDI0LCAweDFGLCAweDIwLCAweEU5LAogCi0weDIxLCAweDQ1LCAweDgwLCAweEU4LAotMHgxQSwgMHg0RCwgMHg4MCwgMHhFOCwKKwkweDIxLCAweDQ1LCAweDgwLCAweEU4LAorCTB4MUEsIDB4NEQsIDB4ODAsIDB4RTgsCiAKLTB4MzEsIDB4NTUsIDB4ODAsIDB4RTgsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MzEsIDB4NTUsIDB4ODAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgxNSwgMHg0MSwgMHg0OSwgMHhCRCwKLTB4MUQsIDB4NDEsIDB4NTEsIDB4QkQsCisJMHgxNSwgMHg0MSwgMHg0OSwgMHhCRCwKKwkweDFELCAweDQxLCAweDUxLCAweEJELAogCi0weDJFLCAweDQxLCAweDJBLCAweEI4LAotMHgzNCwgMHg1MywgMHhBMCwgMHhFOCwKKwkweDJFLCAweDQxLCAweDJBLCAweEI4LAorCTB4MzQsIDB4NTMsIDB4QTAsIDB4RTgsCiAKLTB4MTUsIDB4MzAsCi0weDFELCAweDMwLAotMHg1OCwgMHhFMywKLTB4MDAsIDB4RTAsCisJMHgxNSwgMHgzMCwKKwkweDFELCAweDMwLAorCTB4NTgsIDB4RTMsCisJMHgwMCwgMHhFMCwKIAotMHhCNSwgMHg0MCwgMHg0OCwgMHhCRCwKLTB4M0QsIDB4NDAsIDB4NTAsIDB4QkQsCisJMHhCNSwgMHg0MCwgMHg0OCwgMHhCRCwKKwkweDNELCAweDQwLCAweDUwLCAweEJELAogCi0weDI0LCAweDQzLCAweEEwLCAweEU4LAotMHgyQywgMHg0QiwgMHhBMCwgMHhFOCwKKwkweDI0LCAweDQzLCAweEEwLCAweEU4LAorCTB4MkMsIDB4NEIsIDB4QTAsIDB4RTgsCiAKLTB4MTUsIDB4NzIsCi0weDA5LCAweEUzLAotMHgwMCwgMHhFMCwKLTB4MUQsIDB4NzIsCisJMHgxNSwgMHg3MiwKKwkweDA5LCAweEUzLAorCTB4MDAsIDB4RTAsCisJMHgxRCwgMHg3MiwKIAotMHgzNSwgMHgzMCwKLTB4QjUsIDB4MzAsCi0weEJELCAweDMwLAotMHgzRCwgMHgzMCwKKwkweDM1LCAweDMwLAorCTB4QjUsIDB4MzAsCisJMHhCRCwgMHgzMCwKKwkweDNELCAweDMwLAogCi0weDlDLCAweDk3LCAweDU3LCAweDlGLAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDlDLCAweDk3LCAweDU3LCAweDlGLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4NkMsIDB4NjQsIDB4QzgsIDB4RUMsCi0weDk4LCAweEUxLAotMHhCNSwgMHgwNSwKKwkweDZDLCAweDY0LCAweEM4LCAweEVDLAorCTB4OTgsIDB4RTEsCisJMHhCNSwgMHgwNSwKIAotMHhCRCwgMHgwNSwKLTB4MkUsIDB4MzAsCi0weDMyLCAweEMwLCAweEEwLCAweEU4LAorCTB4QkQsIDB4MDUsCisJMHgyRSwgMHgzMCwKKwkweDMyLCAweEMwLCAweEEwLCAweEU4LAogCi0weDMzLCAweEMwLCAweEEwLCAweEU4LAotMHg3NCwgMHg2NCwgMHhDOCwgMHhFQywKKwkweDMzLCAweEMwLCAweEEwLCAweEU4LAorCTB4NzQsIDB4NjQsIDB4QzgsIDB4RUMsCiAKLTB4NDAsIDB4M0MsIDB4NDAsIDB4QUQsCi0weDMyLCAweDZBLAotMHgyQSwgMHgzMCwKKwkweDQwLCAweDNDLCAweDQwLCAweEFELAorCTB4MzIsIDB4NkEsCisJMHgyQSwgMHgzMCwKIAotMHgyMCwgMHg3MywKLTB4MzMsIDB4NkEsCi0weDAwLCAweEUwLAotMHgyOCwgMHg3MywKKwkweDIwLCAweDczLAorCTB4MzMsIDB4NkEsCisJMHgwMCwgMHhFMCwKKwkweDI4LCAweDczLAogCi0weDFDLCAweDcyLAotMHg4MywgMHhFMiwKLTB4ODAsIDB4ODAsIDB4MTUsIDB4RUEsCisJMHgxQywgMHg3MiwKKwkweDgzLCAweEUyLAorCTB4ODAsIDB4ODAsIDB4MTUsIDB4RUEsCiAKLTB4QjgsIDB4M0QsIDB4MjgsIDB4REYsCi0weDMwLCAweDM1LCAweDIwLCAweERGLAorCTB4QjgsIDB4M0QsIDB4MjgsIDB4REYsCisJMHgzMCwgMHgzNSwgMHgyMCwgMHhERiwKIAotMHg0MCwgMHgzMCwKLTB4MDAsIDB4RTAsCi0weENDLCAweEUyLAotMHg2NCwgMHg3MiwKKwkweDQwLCAweDMwLAorCTB4MDAsIDB4RTAsCisJMHhDQywgMHhFMiwKKwkweDY0LCAweDcyLAogCi0weDI1LCAweDQyLCAweDUyLCAweEJGLAotMHgyRCwgMHg0MiwgMHg0QSwgMHhCRiwKKwkweDI1LCAweDQyLCAweDUyLCAweEJGLAorCTB4MkQsIDB4NDIsIDB4NEEsIDB4QkYsCiAKLTB4MzAsIDB4MkUsIDB4MzAsIDB4REYsCi0weDM4LCAweDJFLCAweDM4LCAweERGLAorCTB4MzAsIDB4MkUsIDB4MzAsIDB4REYsCisJMHgzOCwgMHgyRSwgMHgzOCwgMHhERiwKIAotMHgxOCwgMHgxRCwgMHg0NSwgMHhFOSwKLTB4MUUsIDB4MTUsIDB4NDUsIDB4RTksCisJMHgxOCwgMHgxRCwgMHg0NSwgMHhFOSwKKwkweDFFLCAweDE1LCAweDQ1LCAweEU5LAogCi0weDJCLCAweDQ5LCAweDUxLCAweEJELAotMHgwMCwgMHhFMCwKLTB4MUYsIDB4NzMsCisJMHgyQiwgMHg0OSwgMHg1MSwgMHhCRCwKKwkweDAwLCAweEUwLAorCTB4MUYsIDB4NzMsCiAKLTB4MzgsIDB4MzgsIDB4NDAsIDB4QUYsCi0weDMwLCAweDMwLCAweDQwLCAweEFGLAorCTB4MzgsIDB4MzgsIDB4NDAsIDB4QUYsCisJMHgzMCwgMHgzMCwgMHg0MCwgMHhBRiwKIAotMHgyNCwgMHgxRiwgMHgyNCwgMHhERiwKLTB4MUQsIDB4MzIsIDB4MjAsIDB4RTksCisJMHgyNCwgMHgxRiwgMHgyNCwgMHhERiwKKwkweDFELCAweDMyLCAweDIwLCAweEU5LAogCi0weDJDLCAweDFGLCAweDJDLCAweERGLAotMHgxQSwgMHgzMywgMHgyMCwgMHhFOSwKKwkweDJDLCAweDFGLCAweDJDLCAweERGLAorCTB4MUEsIDB4MzMsIDB4MjAsIDB4RTksCiAKLTB4QjAsIDB4MTAsCi0weDA4LCAweEUzLAotMHg0MCwgMHgxMCwKLTB4QjgsIDB4MTAsCisJMHhCMCwgMHgxMCwKKwkweDA4LCAweEUzLAorCTB4NDAsIDB4MTAsCisJMHhCOCwgMHgxMCwKIAotMHgyNiwgMHhGMCwgMHgzMCwgMHhDRCwKLTB4MkYsIDB4RjAsIDB4MzgsIDB4Q0QsCisJMHgyNiwgMHhGMCwgMHgzMCwgMHhDRCwKKwkweDJGLCAweEYwLCAweDM4LCAweENELAogCi0weDJCLCAweDgwLCAweDIwLCAweEU5LAotMHgyQSwgMHg4MCwgMHgyMCwgMHhFOSwKKwkweDJCLCAweDgwLCAweDIwLCAweEU5LAorCTB4MkEsIDB4ODAsIDB4MjAsIDB4RTksCiAKLTB4QTYsIDB4MjAsCi0weDg4LCAweEUyLAotMHgwMCwgMHhFMCwKLTB4QUYsIDB4MjAsCisJMHhBNiwgMHgyMCwKKwkweDg4LCAweEUyLAorCTB4MDAsIDB4RTAsCisJMHhBRiwgMHgyMCwKIAotMHgyOCwgMHgyQSwgMHgyNiwgMHhBRiwKLTB4MjAsIDB4MkEsIDB4QzAsIDB4QUYsCisJMHgyOCwgMHgyQSwgMHgyNiwgMHhBRiwKKwkweDIwLCAweDJBLCAweEMwLCAweEFGLAogCi0weDM0LCAweDFGLCAweDM0LCAweERGLAotMHg0NiwgMHgyNCwgMHg0NiwgMHhERiwKKwkweDM0LCAweDFGLCAweDM0LCAweERGLAorCTB4NDYsIDB4MjQsIDB4NDYsIDB4REYsCiAKLTB4MjgsIDB4MzAsIDB4ODAsIDB4QkYsCi0weDIwLCAweDM4LCAweDgwLCAweEJGLAorCTB4MjgsIDB4MzAsIDB4ODAsIDB4QkYsCisJMHgyMCwgMHgzOCwgMHg4MCwgMHhCRiwKIAotMHg0NywgMHgyNCwgMHg0NywgMHhERiwKLTB4NEUsIDB4MkMsIDB4NEUsIDB4REYsCisJMHg0NywgMHgyNCwgMHg0NywgMHhERiwKKwkweDRFLCAweDJDLCAweDRFLCAweERGLAogCi0weDRGLCAweDJDLCAweDRGLCAweERGLAotMHg1NiwgMHgzNCwgMHg1NiwgMHhERiwKKwkweDRGLCAweDJDLCAweDRGLCAweERGLAorCTB4NTYsIDB4MzQsIDB4NTYsIDB4REYsCiAKLTB4MjgsIDB4MTUsIDB4MjgsIDB4REYsCi0weDIwLCAweDFELCAweDIwLCAweERGLAorCTB4MjgsIDB4MTUsIDB4MjgsIDB4REYsCisJMHgyMCwgMHgxRCwgMHgyMCwgMHhERiwKIAotMHg1NywgMHgzNCwgMHg1NywgMHhERiwKLTB4MDAsIDB4RTAsCi0weDFELCAweDA1LAorCTB4NTcsIDB4MzQsIDB4NTcsIDB4REYsCisJMHgwMCwgMHhFMCwKKwkweDFELCAweDA1LAogCi0weDA0LCAweDgwLCAweDEwLCAweEVBLAotMHg4OSwgMHhFMiwKLTB4MkIsIDB4MzAsCisJMHgwNCwgMHg4MCwgMHgxMCwgMHhFQSwKKwkweDg5LCAweEUyLAorCTB4MkIsIDB4MzAsCiAKLTB4M0YsIDB4QzEsIDB4MUQsIDB4QkQsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4M0YsIDB4QzEsIDB4MUQsIDB4QkQsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weEEwLCAweDY4LAotMHhCRiwgMHgyNSwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHhBMCwgMHg2OCwKKwkweEJGLCAweDI1LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MjAsIDB4QzAsIDB4MjAsIDB4QUYsCi0weDI4LCAweDA1LAotMHg5NywgMHg3NCwKKwkweDIwLCAweEMwLCAweDIwLCAweEFGLAorCTB4MjgsIDB4MDUsCisJMHg5NywgMHg3NCwKIAotMHgwMCwgMHhFMCwKLTB4MkEsIDB4MTAsCi0weDE2LCAweEMwLCAweDIwLCAweEU5LAorCTB4MDAsIDB4RTAsCisJMHgyQSwgMHgxMCwKKwkweDE2LCAweEMwLCAweDIwLCAweEU5LAogCi0weDA0LCAweDgwLCAweDEwLCAweEVBLAotMHg4QywgMHhFMiwKLTB4OTUsIDB4MDUsCisJMHgwNCwgMHg4MCwgMHgxMCwgMHhFQSwKKwkweDhDLCAweEUyLAorCTB4OTUsIDB4MDUsCiAKLTB4MjgsIDB4QzEsIDB4MjgsIDB4QUQsCi0weDFGLCAweEMxLCAweDE1LCAweEJELAorCTB4MjgsIDB4QzEsIDB4MjgsIDB4QUQsCisJMHgxRiwgMHhDMSwgMHgxNSwgMHhCRCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weEE4LCAweDY3LAotMHg5RiwgMHg2QiwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHhBOCwgMHg2NywKKwkweDlGLCAweDZCLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MjgsIDB4QzAsIDB4MjgsIDB4QUQsCi0weDFELCAweDI1LAotMHgyMCwgMHgwNSwKKwkweDI4LCAweEMwLCAweDI4LCAweEFELAorCTB4MUQsIDB4MjUsCisJMHgyMCwgMHgwNSwKIAotMHgyOCwgMHgzMiwgMHg4MCwgMHhBRCwKLTB4NDAsIDB4MkEsIDB4NDAsIDB4QkQsCisJMHgyOCwgMHgzMiwgMHg4MCwgMHhBRCwKKwkweDQwLCAweDJBLCAweDQwLCAweEJELAogCi0weDFDLCAweDgwLCAweDIwLCAweEU5LAotMHgyMCwgMHgzMywgMHgyMCwgMHhBRCwKKwkweDFDLCAweDgwLCAweDIwLCAweEU5LAorCTB4MjAsIDB4MzMsIDB4MjAsIDB4QUQsCiAKLTB4MjAsIDB4NzMsCi0weDAwLCAweEUwLAotMHhCNiwgMHg0OSwgMHg1MSwgMHhCQiwKKwkweDIwLCAweDczLAorCTB4MDAsIDB4RTAsCisJMHhCNiwgMHg0OSwgMHg1MSwgMHhCQiwKIAotMHgyNiwgMHgyRiwgMHhCMCwgMHhFOCwKLTB4MTksIDB4MjAsIDB4MjAsIDB4RTksCisJMHgyNiwgMHgyRiwgMHhCMCwgMHhFOCwKKwkweDE5LCAweDIwLCAweDIwLCAweEU5LAogCi0weDM1LCAweDIwLCAweDM1LCAweERGLAotMHgzRCwgMHgyMCwgMHgzRCwgMHhERiwKKwkweDM1LCAweDIwLCAweDM1LCAweERGLAorCTB4M0QsIDB4MjAsIDB4M0QsIDB4REYsCiAKLTB4MTUsIDB4MjAsIDB4MTUsIDB4REYsCi0weDFELCAweDIwLCAweDFELCAweERGLAorCTB4MTUsIDB4MjAsIDB4MTUsIDB4REYsCisJMHgxRCwgMHgyMCwgMHgxRCwgMHhERiwKIAotMHgyNiwgMHhEMCwgMHgyNiwgMHhDRCwKLTB4MjksIDB4NDksIDB4MkEsIDB4QjgsCisJMHgyNiwgMHhEMCwgMHgyNiwgMHhDRCwKKwkweDI5LCAweDQ5LCAweDJBLCAweEI4LAogCi0weDI2LCAweDQwLCAweDgwLCAweEJELAotMHgzQiwgMHg0OCwgMHg1MCwgMHhCRCwKKwkweDI2LCAweDQwLCAweDgwLCAweEJELAorCTB4M0IsIDB4NDgsIDB4NTAsIDB4QkQsCiAKLTB4M0UsIDB4NTQsIDB4NTcsIDB4OUYsCi0weDAwLCAweEUwLAotMHg4MiwgMHhFMSwKKwkweDNFLCAweDU0LCAweDU3LCAweDlGLAorCTB4MDAsIDB4RTAsCisJMHg4MiwgMHhFMSwKIAotMHgxRSwgMHhBRiwgMHg1OSwgMHg5RiwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgxRSwgMHhBRiwgMHg1OSwgMHg5RiwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDI2LCAweDMwLAotMHgyOSwgMHgzMCwKLTB4NDgsIDB4M0MsIDB4NDgsIDB4QUQsCisJMHgyNiwgMHgzMCwKKwkweDI5LCAweDMwLAorCTB4NDgsIDB4M0MsIDB4NDgsIDB4QUQsCiAKLTB4MkIsIDB4NzIsCi0weEMyLCAweEUxLAotMHgyQywgMHhDMCwgMHg0NCwgMHhDMiwKKwkweDJCLCAweDcyLAorCTB4QzIsIDB4RTEsCisJMHgyQywgMHhDMCwgMHg0NCwgMHhDMiwKIAotMHgwNSwgMHgyNCwgMHgzNCwgMHhCRiwKLTB4MEQsIDB4MjQsIDB4MkMsIDB4QkYsCisJMHgwNSwgMHgyNCwgMHgzNCwgMHhCRiwKKwkweDBELCAweDI0LCAweDJDLCAweEJGLAogCi0weDJELCAweDQ2LCAweDRFLCAweEJGLAotMHgyNSwgMHg0NiwgMHg1NiwgMHhCRiwKKwkweDJELCAweDQ2LCAweDRFLCAweEJGLAorCTB4MjUsIDB4NDYsIDB4NTYsIDB4QkYsCiAKLTB4MjAsIDB4MUQsIDB4NkYsIDB4OEYsCi0weDMyLCAweDNFLCAweDVGLCAweEU5LAorCTB4MjAsIDB4MUQsIDB4NkYsIDB4OEYsCisJMHgzMiwgMHgzRSwgMHg1RiwgMHhFOSwKIAotMHgzRSwgMHg1MCwgMHg1NiwgMHg5RiwKLTB4MDAsIDB4RTAsCi0weDNCLCAweDMwLAorCTB4M0UsIDB4NTAsIDB4NTYsIDB4OUYsCisJMHgwMCwgMHhFMCwKKwkweDNCLCAweDMwLAogCi0weDFFLCAweDhGLCAweDUxLCAweDlGLAotMHgzMywgMHgxRSwgMHg1RiwgMHhFOSwKKwkweDFFLCAweDhGLCAweDUxLCAweDlGLAorCTB4MzMsIDB4MUUsIDB4NUYsIDB4RTksCiAKLTB4MDUsIDB4NDQsIDB4NTQsIDB4QjIsCi0weDBELCAweDQ0LCAweDRDLCAweEIyLAorCTB4MDUsIDB4NDQsIDB4NTQsIDB4QjIsCisJMHgwRCwgMHg0NCwgMHg0QywgMHhCMiwKIAotMHgxOSwgMHhDMCwgMHhCMCwgMHhFOCwKLTB4MzQsIDB4QzAsIDB4NDQsIDB4QzQsCisJMHgxOSwgMHhDMCwgMHhCMCwgMHhFOCwKKwkweDM0LCAweEMwLCAweDQ0LCAweEM0LAogCi0weDMzLCAweDczLAotMHgwMCwgMHhFMCwKLTB4M0UsIDB4NjIsIDB4NTcsIDB4OUYsCisJMHgzMywgMHg3MywKKwkweDAwLCAweEUwLAorCTB4M0UsIDB4NjIsIDB4NTcsIDB4OUYsCiAKLTB4MUUsIDB4QUYsIDB4NTksIDB4OUYsCi0weDAwLCAweEUwLAotMHgwRCwgMHgyMCwKKwkweDFFLCAweEFGLCAweDU5LCAweDlGLAorCTB4MDAsIDB4RTAsCisJMHgwRCwgMHgyMCwKIAotMHg4NCwgMHgzRSwgMHg1OCwgMHhFOSwKLTB4MjgsIDB4MUQsIDB4NkYsIDB4OEYsCisJMHg4NCwgMHgzRSwgMHg1OCwgMHhFOSwKKwkweDI4LCAweDFELCAweDZGLCAweDhGLAogCi0weDA1LCAweDIwLAotMHgwMCwgMHhFMCwKLTB4ODUsIDB4MUUsIDB4NTgsIDB4RTksCisJMHgwNSwgMHgyMCwKKwkweDAwLCAweEUwLAorCTB4ODUsIDB4MUUsIDB4NTgsIDB4RTksCiAKLTB4OUIsIDB4M0IsIDB4MzMsIDB4REYsCi0weDIwLCAweDIwLCAweDQyLCAweEFGLAorCTB4OUIsIDB4M0IsIDB4MzMsIDB4REYsCisJMHgyMCwgMHgyMCwgMHg0MiwgMHhBRiwKIAotMHgzMCwgMHg0MiwgMHg1NiwgMHg5RiwKLTB4ODAsIDB4M0UsIDB4NTcsIDB4RTksCisJMHgzMCwgMHg0MiwgMHg1NiwgMHg5RiwKKwkweDgwLCAweDNFLCAweDU3LCAweEU5LAogCi0weDNGLCAweDhGLCAweDUxLCAweDlGLAotMHgzMCwgMHg4MCwgMHg1RiwgMHhFOSwKKwkweDNGLCAweDhGLCAweDUxLCAweDlGLAorCTB4MzAsIDB4ODAsIDB4NUYsIDB4RTksCiAKLTB4MjgsIDB4MjgsIDB4MjQsIDB4QUYsCi0weDgxLCAweDFFLCAweDU3LCAweEU5LAorCTB4MjgsIDB4MjgsIDB4MjQsIDB4QUYsCisJMHg4MSwgMHgxRSwgMHg1NywgMHhFOSwKIAotMHgwNSwgMHg0NywgMHg1NywgMHhCRiwKLTB4MEQsIDB4NDcsIDB4NEYsIDB4QkYsCisJMHgwNSwgMHg0NywgMHg1NywgMHhCRiwKKwkweDBELCAweDQ3LCAweDRGLCAweEJGLAogCi0weDg4LCAweDgwLCAweDU4LCAweEU5LAotMHgxQiwgMHgyOSwgMHgxQiwgMHhERiwKKwkweDg4LCAweDgwLCAweDU4LCAweEU5LAorCTB4MUIsIDB4MjksIDB4MUIsIDB4REYsCiAKLTB4MzAsIDB4MUQsIDB4NkYsIDB4OEYsCi0weDNBLCAweDMwLCAweDRGLCAweEU5LAorCTB4MzAsIDB4MUQsIDB4NkYsIDB4OEYsCisJMHgzQSwgMHgzMCwgMHg0RiwgMHhFOSwKIAotMHgxQywgMHgzMCwgMHgyNiwgMHhERiwKLTB4MDksIDB4RTMsCi0weDNCLCAweDA1LAorCTB4MUMsIDB4MzAsIDB4MjYsIDB4REYsCisJMHgwOSwgMHhFMywKKwkweDNCLCAweDA1LAogCi0weDNFLCAweDUwLCAweDU2LCAweDlGLAotMHgzQiwgMHgzRiwgMHg0RiwgMHhFOSwKKwkweDNFLCAweDUwLCAweDU2LCAweDlGLAorCTB4M0IsIDB4M0YsIDB4NEYsIDB4RTksCiAKLTB4MUUsIDB4OEYsIDB4NTEsIDB4OUYsCi0weDAwLCAweEUwLAotMHhBQywgMHgyMCwKKwkweDFFLCAweDhGLCAweDUxLCAweDlGLAorCTB4MDAsIDB4RTAsCisJMHhBQywgMHgyMCwKIAotMHgyRCwgMHg0NCwgMHg0QywgMHhCNCwKLTB4MkMsIDB4MUMsIDB4QzAsIDB4QUYsCisJMHgyRCwgMHg0NCwgMHg0QywgMHhCNCwKKwkweDJDLCAweDFDLCAweEMwLCAweEFGLAogCi0weDI1LCAweDQ0LCAweDU0LCAweEI0LAotMHgwMCwgMHhFMCwKLTB4QzgsIDB4MzAsCisJMHgyNSwgMHg0NCwgMHg1NCwgMHhCNCwKKwkweDAwLCAweEUwLAorCTB4QzgsIDB4MzAsCiAKLTB4MzAsIDB4NDYsIDB4MzAsIDB4QUYsCi0weDFCLCAweDFCLCAweDQ4LCAweEFGLAorCTB4MzAsIDB4NDYsIDB4MzAsIDB4QUYsCisJMHgxQiwgMHgxQiwgMHg0OCwgMHhBRiwKIAotMHgwMCwgMHhFMCwKLTB4MjUsIDB4MjAsCi0weDM4LCAweDJDLCAweDRGLCAweEU5LAorCTB4MDAsIDB4RTAsCisJMHgyNSwgMHgyMCwKKwkweDM4LCAweDJDLCAweDRGLCAweEU5LAogCi0weDg2LCAweDgwLCAweDU3LCAweEU5LAotMHgzOCwgMHgxRCwgMHg2RiwgMHg4RiwKKwkweDg2LCAweDgwLCAweDU3LCAweEU5LAorCTB4MzgsIDB4MUQsIDB4NkYsIDB4OEYsCiAKLTB4MjgsIDB4NzQsCi0weDAwLCAweEUwLAotMHgwRCwgMHg0NCwgMHg0QywgMHhCMCwKKwkweDI4LCAweDc0LAorCTB4MDAsIDB4RTAsCisJMHgwRCwgMHg0NCwgMHg0QywgMHhCMCwKIAotMHgwNSwgMHg0NCwgMHg1NCwgMHhCMCwKLTB4MkQsIDB4MjAsCi0weDlCLCAweDEwLAorCTB4MDUsIDB4NDQsIDB4NTQsIDB4QjAsCisJMHgyRCwgMHgyMCwKKwkweDlCLCAweDEwLAogCi0weDgyLCAweDNFLCAweDU3LCAweEU5LAotMHgzMiwgMHhGMCwgMHgxQiwgMHhDRCwKKwkweDgyLCAweDNFLCAweDU3LCAweEU5LAorCTB4MzIsIDB4RjAsIDB4MUIsIDB4Q0QsCiAKLTB4MUUsIDB4QkQsIDB4NTksIDB4OUYsCi0weDgzLCAweDFFLCAweDU3LCAweEU5LAorCTB4MUUsIDB4QkQsIDB4NTksIDB4OUYsCisJMHg4MywgMHgxRSwgMHg1NywgMHhFOSwKIAotMHgzOCwgMHg0NywgMHgzOCwgMHhBRiwKLTB4MzQsIDB4MjAsCi0weDJBLCAweDMwLAorCTB4MzgsIDB4NDcsIDB4MzgsIDB4QUYsCisJMHgzNCwgMHgyMCwKKwkweDJBLCAweDMwLAogCi0weDAwLCAweEUwLAotMHgwRCwgMHgyMCwKLTB4MzIsIDB4MjAsCi0weDA1LCAweDIwLAorCTB4MDAsIDB4RTAsCisJMHgwRCwgMHgyMCwKKwkweDMyLCAweDIwLAorCTB4MDUsIDB4MjAsCiAKLTB4ODcsIDB4ODAsIDB4NTcsIDB4RTksCi0weDFGLCAweDU0LCAweDU3LCAweDlGLAorCTB4ODcsIDB4ODAsIDB4NTcsIDB4RTksCisJMHgxRiwgMHg1NCwgMHg1NywgMHg5RiwKIAotMHgxNywgMHg0MiwgMHg1NiwgMHg5RiwKLTB4MDAsIDB4RTAsCi0weDNCLCAweDZBLAorCTB4MTcsIDB4NDIsIDB4NTYsIDB4OUYsCisJMHgwMCwgMHhFMCwKKwkweDNCLCAweDZBLAogCi0weDNGLCAweDhGLCAweDUxLCAweDlGLAotMHgzNywgMHgxRSwgMHg0RiwgMHhFOSwKKwkweDNGLCAweDhGLCAweDUxLCAweDlGLAorCTB4MzcsIDB4MUUsIDB4NEYsIDB4RTksCiAKLTB4MzcsIDB4MzIsIDB4MkEsIDB4QUYsCi0weDAwLCAweEUwLAotMHgzMiwgMHgwMCwKKwkweDM3LCAweDMyLCAweDJBLCAweEFGLAorCTB4MDAsIDB4RTAsCisJMHgzMiwgMHgwMCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MjcsIDB4QzAsIDB4NDQsIDB4QzAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDI3LCAweEMwLCAweDQ0LCAweEMwLAogCi0weDM2LCAweDFGLCAweDRGLCAweEU5LAotMHgxRiwgMHgxRiwgMHgyNiwgMHhERiwKKwkweDM2LCAweDFGLCAweDRGLCAweEU5LAorCTB4MUYsIDB4MUYsIDB4MjYsIDB4REYsCiAKLTB4MzcsIDB4MUIsIDB4MzcsIDB4QkYsCi0weDE3LCAweDI2LCAweDE3LCAweERGLAorCTB4MzcsIDB4MUIsIDB4MzcsIDB4QkYsCisJMHgxNywgMHgyNiwgMHgxNywgMHhERiwKIAotMHgzRSwgMHgxNywgMHg0RiwgMHhFOSwKLTB4M0YsIDB4M0YsIDB4NEYsIDB4RTksCisJMHgzRSwgMHgxNywgMHg0RiwgMHhFOSwKKwkweDNGLCAweDNGLCAweDRGLCAweEU5LAogCi0weDM0LCAweDFGLCAweDM0LCAweEFGLAotMHgyQiwgMHgwNSwKLTB4QTcsIDB4MjAsCisJMHgzNCwgMHgxRiwgMHgzNCwgMHhBRiwKKwkweDJCLCAweDA1LAorCTB4QTcsIDB4MjAsCiAKLTB4MzMsIDB4MkIsIDB4MzcsIDB4REYsCi0weDI3LCAweDE3LCAweEMwLCAweEFGLAorCTB4MzMsIDB4MkIsIDB4MzcsIDB4REYsCisJMHgyNywgMHgxNywgMHhDMCwgMHhBRiwKIAotMHgzNCwgMHg4MCwgMHg0RiwgMHhFOSwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgzNCwgMHg4MCwgMHg0RiwgMHhFOSwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDJELCAweDIxLCAweDFBLCAweEIwLAotMHgyNSwgMHgyMSwgMHgzMSwgMHhCMCwKKwkweDJELCAweDIxLCAweDFBLCAweEIwLAorCTB4MjUsIDB4MjEsIDB4MzEsIDB4QjAsCiAKLTB4MEQsIDB4MjEsIDB4MUEsIDB4QjIsCi0weDA1LCAweDIxLCAweDMxLCAweEIyLAorCTB4MEQsIDB4MjEsIDB4MUEsIDB4QjIsCisJMHgwNSwgMHgyMSwgMHgzMSwgMHhCMiwKIAotMHgwMywgMHg4MCwgMHgyQSwgMHhFQSwKLTB4MTcsIDB4QzEsIDB4MkIsIDB4QkQsCisJMHgwMywgMHg4MCwgMHgyQSwgMHhFQSwKKwkweDE3LCAweEMxLCAweDJCLCAweEJELAogCi0weDJELCAweDIwLAotMHgyNSwgMHgyMCwKLTB4MDUsIDB4MjAsCi0weDBELCAweDIwLAorCTB4MkQsIDB4MjAsCisJMHgyNSwgMHgyMCwKKwkweDA1LCAweDIwLAorCTB4MEQsIDB4MjAsCiAKLTB4QjMsIDB4NjgsCi0weDk3LCAweDI1LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweEIzLCAweDY4LAorCTB4OTcsIDB4MjUsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgzMywgMHhDMCwgMHgzMywgMHhBRiwKLTB4MkYsIDB4QzAsIDB4MjEsIDB4QzAsCisJMHgzMywgMHhDMCwgMHgzMywgMHhBRiwKKwkweDJGLCAweEMwLCAweDIxLCAweEMwLAogCi0weDE2LCAweDQyLCAweDU2LCAweDlGLAotMHgzQywgMHgyNywgMHg0RiwgMHhFOSwKKwkweDE2LCAweDQyLCAweDU2LCAweDlGLAorCTB4M0MsIDB4MjcsIDB4NEYsIDB4RTksCiAKLTB4MUUsIDB4NjIsIDB4NTcsIDB4OUYsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MUUsIDB4NjIsIDB4NTcsIDB4OUYsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgyNSwgMHgyMSwgMHgzMSwgMHhCNCwKLTB4MkQsIDB4MjEsIDB4MUEsIDB4QjQsCisJMHgyNSwgMHgyMSwgMHgzMSwgMHhCNCwKKwkweDJELCAweDIxLCAweDFBLCAweEI0LAogCi0weDNGLCAweDJGLCAweDVELCAweDlGLAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDNGLCAweDJGLCAweDVELCAweDlGLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MzMsIDB4MDUsCi0weDAwLCAweEUwLAotMHgyOCwgMHgxOSwgMHg2MCwgMHhFQywKKwkweDMzLCAweDA1LAorCTB4MDAsIDB4RTAsCisJMHgyOCwgMHgxOSwgMHg2MCwgMHhFQywKIAotMHgwRCwgMHgyMSwgMHgxQSwgMHhCNiwKLTB4MDUsIDB4MjEsIDB4MzEsIDB4QjYsCisJMHgwRCwgMHgyMSwgMHgxQSwgMHhCNiwKKwkweDA1LCAweDIxLCAweDMxLCAweEI2LAogCi0weDM3LCAweDBGLCAweDVDLCAweDlGLAotMHgwMCwgMHhFMCwKLTB4MkYsIDB4MjAsCisJMHgzNywgMHgwRiwgMHg1QywgMHg5RiwKKwkweDAwLCAweEUwLAorCTB4MkYsIDB4MjAsCiAKLTB4MjMsIDB4M0IsIDB4MzMsIDB4QUQsCi0weDFFLCAweDI2LCAweDFFLCAweERGLAorCTB4MjMsIDB4M0IsIDB4MzMsIDB4QUQsCisJMHgxRSwgMHgyNiwgMHgxRSwgMHhERiwKIAotMHhBNywgMHgxRSwgMHg0RiwgMHhFOSwKLTB4MTcsIDB4MjYsIDB4MTYsIDB4REYsCisJMHhBNywgMHgxRSwgMHg0RiwgMHhFOSwKKwkweDE3LCAweDI2LCAweDE2LCAweERGLAogCi0weDJELCAweDIwLAotMHgwMCwgMHhFMCwKLTB4QTgsIDB4M0YsIDB4NEYsIDB4RTksCisJMHgyRCwgMHgyMCwKKwkweDAwLCAweEUwLAorCTB4QTgsIDB4M0YsIDB4NEYsIDB4RTksCiAKLTB4MkYsIDB4MkYsIDB4MUUsIDB4QUYsCi0weDI1LCAweDIwLAotMHgwMCwgMHhFMCwKKwkweDJGLCAweDJGLCAweDFFLCAweEFGLAorCTB4MjUsIDB4MjAsCisJMHgwMCwgMHhFMCwKIAotMHhBNCwgMHgxNiwgMHg0RiwgMHhFOSwKLTB4MEYsIDB4QzAsIDB4MjEsIDB4QzIsCisJMHhBNCwgMHgxNiwgMHg0RiwgMHhFOSwKKwkweDBGLCAweEMwLCAweDIxLCAweEMyLAogCi0weEE2LCAweDgwLCAweDRGLCAweEU5LAotMHgxRiwgMHg2MiwgMHg1NywgMHg5RiwKKwkweEE2LCAweDgwLCAweDRGLCAweEU5LAorCTB4MUYsIDB4NjIsIDB4NTcsIDB4OUYsCiAKLTB4MEQsIDB4MjAsCi0weDA1LCAweDIwLAotMHgyRiwgMHhDMCwgMHgyMSwgMHhDNiwKKwkweDBELCAweDIwLAorCTB4MDUsIDB4MjAsCisJMHgyRiwgMHhDMCwgMHgyMSwgMHhDNiwKIAotMHgyRCwgMHg0NCwgMHg0QywgMHhCNiwKLTB4MjUsIDB4NDQsIDB4NTQsIDB4QjYsCisJMHgyRCwgMHg0NCwgMHg0QywgMHhCNiwKKwkweDI1LCAweDQ0LCAweDU0LCAweEI2LAogCi0weDNGLCAweDJGLCAweDVELCAweDlGLAotMHgwMCwgMHhFMCwKLTB4MEYsIDB4MjAsCisJMHgzRiwgMHgyRiwgMHg1RCwgMHg5RiwKKwkweDAwLCAweEUwLAorCTB4MEYsIDB4MjAsCiAKLTB4MkQsIDB4MjAsCi0weDI1LCAweDIwLAotMHgwNywgMHhDMCwgMHg0NCwgMHhDNiwKKwkweDJELCAweDIwLAorCTB4MjUsIDB4MjAsCisJMHgwNywgMHhDMCwgMHg0NCwgMHhDNiwKIAotMHgxNywgMHg1MCwgMHg1NiwgMHg5RiwKLTB4QTUsIDB4MzcsIDB4NEYsIDB4RTksCisJMHgxNywgMHg1MCwgMHg1NiwgMHg5RiwKKwkweEE1LCAweDM3LCAweDRGLCAweEU5LAogCi0weDA2LCAweEMwLCAweDIxLCAweEM0LAotMHgwRiwgMHgxNywgMHgwRiwgMHhBRiwKKwkweDA2LCAweEMwLCAweDIxLCAweEM0LAorCTB4MEYsIDB4MTcsIDB4MEYsIDB4QUYsCiAKLTB4MzcsIDB4MEYsIDB4NUMsIDB4OUYsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MzcsIDB4MEYsIDB4NUMsIDB4OUYsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgxRSwgMHg2MiwgMHg1NywgMHg5RiwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgxRSwgMHg2MiwgMHg1NywgMHg5RiwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDNFLCAweDNELCAweDVELCAweDlGLAotMHgwMCwgMHhFMCwKLTB4MDcsIDB4MjAsCisJMHgzRSwgMHgzRCwgMHg1RCwgMHg5RiwKKwkweDAwLCAweEUwLAorCTB4MDcsIDB4MjAsCiAKLTB4MkYsIDB4MjAsCi0weDAwLCAweEUwLAotMHhBMywgMHgwRiwgMHg0RiwgMHhFOSwKKwkweDJGLCAweDIwLAorCTB4MDAsIDB4RTAsCisJMHhBMywgMHgwRiwgMHg0RiwgMHhFOSwKIAotMHgwNiwgMHgyMCwKLTB4MDAsIDB4RTAsCi0weDFGLCAweDI2LCAweDFGLCAweERGLAorCTB4MDYsIDB4MjAsCisJMHgwMCwgMHhFMCwKKwkweDFGLCAweDI2LCAweDFGLCAweERGLAogCi0weDE3LCAweDI2LCAweDE3LCAweERGLAotMHhBMSwgMHgxRiwgMHg0RiwgMHhFOSwKKwkweDE3LCAweDI2LCAweDE3LCAweERGLAorCTB4QTEsIDB4MUYsIDB4NEYsIDB4RTksCiAKLTB4MUUsIDB4MjYsIDB4MUUsIDB4REYsCi0weDlELCAweDFFLCAweDRGLCAweEU5LAorCTB4MUUsIDB4MjYsIDB4MUUsIDB4REYsCisJMHg5RCwgMHgxRSwgMHg0RiwgMHhFOSwKIAotMHgzNSwgMHgxNywgMHg0RiwgMHhFOSwKLTB4QTIsIDB4M0YsIDB4NEYsIDB4RTksCisJMHgzNSwgMHgxNywgMHg0RiwgMHhFOSwKKwkweEEyLCAweDNGLCAweDRGLCAweEU5LAogCi0weDA2LCAweDA2LCAweDFGLCAweEFGLAotMHgzOSwgMHgzNywgMHg0RiwgMHhFOSwKKwkweDA2LCAweDA2LCAweDFGLCAweEFGLAorCTB4MzksIDB4MzcsIDB4NEYsIDB4RTksCiAKLTB4MkYsIDB4MkYsIDB4MTcsIDB4QUYsCi0weDA3LCAweDA3LCAweDFFLCAweEFGLAorCTB4MkYsIDB4MkYsIDB4MTcsIDB4QUYsCisJMHgwNywgMHgwNywgMHgxRSwgMHhBRiwKIAotMHhBMCwgMHg4MCwgMHg0RiwgMHhFOSwKLTB4OUUsIDB4M0UsIDB4NEYsIDB4RTksCisJMHhBMCwgMHg4MCwgMHg0RiwgMHhFOSwKKwkweDlFLCAweDNFLCAweDRGLCAweEU5LAogCi0weDMxLCAweDgwLCAweDRGLCAweEU5LAotMHg5QywgMHg4MCwgMHg0RiwgMHhFOSwKKwkweDMxLCAweDgwLCAweDRGLCAweEU5LAorCTB4OUMsIDB4ODAsIDB4NEYsIDB4RTksCiAKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0weDU3LCAweDM5LCAweDIwLCAweEU5LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHg1NywgMHgzOSwgMHgyMCwgMHhFOSwKIAotMHgxNiwgMHgyOCwgMHgyMCwgMHhFOSwKLTB4MUQsIDB4M0IsIDB4MjAsIDB4RTksCisJMHgxNiwgMHgyOCwgMHgyMCwgMHhFOSwKKwkweDFELCAweDNCLCAweDIwLCAweEU5LAogCi0weDFFLCAweDJCLCAweDIwLCAweEU5LAotMHgyQiwgMHgzMiwgMHgyMCwgMHhFOSwKKwkweDFFLCAweDJCLCAweDIwLCAweEU5LAorCTB4MkIsIDB4MzIsIDB4MjAsIDB4RTksCiAKLTB4MUMsIDB4MjMsIDB4MjAsIDB4RTksCi0weDU3LCAweDM2LCAweDIwLCAweEU5LAorCTB4MUMsIDB4MjMsIDB4MjAsIDB4RTksCisJMHg1NywgMHgzNiwgMHgyMCwgMHhFOSwKIAotMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKLTB4NDAsIDB4NDAsIDB4RDgsIDB4RUMsCisJMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKKwkweDQwLCAweDQwLCAweEQ4LCAweEVDLAogCi0weEZGLCAweDgwLCAweEMwLCAweEU5LAotMHg5MCwgMHhFMiwKLTB4MDAsIDB4RTAsCisJMHhGRiwgMHg4MCwgMHhDMCwgMHhFOSwKKwkweDkwLCAweEUyLAorCTB4MDAsIDB4RTAsCiAKLTB4NjMsIDB4RkYsIDB4MjAsIDB4RUEsCi0weDE5LCAweEM4LCAweEMxLCAweENELAorCTB4NjMsIDB4RkYsIDB4MjAsIDB4RUEsCisJMHgxOSwgMHhDOCwgMHhDMSwgMHhDRCwKIAotMHgxRiwgMHhENywgMHgxOCwgMHhCRCwKLTB4M0YsIDB4RDcsIDB4MjIsIDB4QkQsCisJMHgxRiwgMHhENywgMHgxOCwgMHhCRCwKKwkweDNGLCAweEQ3LCAweDIyLCAweEJELAogCi0weDlGLCAweDQxLCAweDQ5LCAweEJELAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDlGLCAweDQxLCAweDQ5LCAweEJELAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MjUsIDB4NDEsIDB4NDksIDB4QkQsCi0weDJELCAweDQxLCAweDUxLCAweEJELAorCTB4MjUsIDB4NDEsIDB4NDksIDB4QkQsCisJMHgyRCwgMHg0MSwgMHg1MSwgMHhCRCwKIAotMHgwRCwgMHg4MCwgMHgwNywgMHhFQSwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwRCwgMHg4MCwgMHgwNywgMHhFQSwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDM1LCAweDQwLCAweDQ4LCAweEJELAotMHgzRCwgMHg0MCwgMHg1MCwgMHhCRCwKKwkweDM1LCAweDQwLCAweDQ4LCAweEJELAorCTB4M0QsIDB4NDAsIDB4NTAsIDB4QkQsCiAKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0weDI1LCAweDMwLAotMHgyRCwgMHgzMCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MjUsIDB4MzAsCisJMHgyRCwgMHgzMCwKIAotMHgzNSwgMHgzMCwKLTB4QjUsIDB4MzAsCi0weEJELCAweDMwLAotMHgzRCwgMHgzMCwKKwkweDM1LCAweDMwLAorCTB4QjUsIDB4MzAsCisJMHhCRCwgMHgzMCwKKwkweDNELCAweDMwLAogCi0weDlDLCAweEE3LCAweDVCLCAweDlGLAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDlDLCAweEE3LCAweDVCLCAweDlGLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHg2MiwgMHhGRiwgMHgwQSwgMHhFQSwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHg2MiwgMHhGRiwgMHgwQSwgMHhFQSwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weEM5LCAweDQxLCAweEM4LCAweEVDLAotMHg0MiwgMHhFMSwKLTB4MDAsIDB4RTAsCisJMHhDOSwgMHg0MSwgMHhDOCwgMHhFQywKKwkweDQyLCAweEUxLAorCTB4MDAsIDB4RTAsCiAKLTB4NjAsIDB4RkYsIDB4MjAsIDB4RUEsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4NjAsIDB4RkYsIDB4MjAsIDB4RUEsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weEM4LCAweDQwLCAweEMwLCAweEVDLAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweEM4LCAweDQwLCAweEMwLCAweEVDLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4NUQsIDB4RkYsIDB4MjAsIDB4RUEsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4NUQsIDB4RkYsIDB4MjAsIDB4RUEsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCiB9OwogCiBzdGF0aWMgdW5zaWduZWQgY2hhciB3YXJwX2cyMDBfdGd6c2ZbXSA9IHsKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDk4LCAweEEwLCAweEU5LAotMHg0MCwgMHg0MCwgMHhEOCwgMHhFQywKKwkweDAwLCAweDk4LCAweEEwLCAweEU5LAorCTB4NDAsIDB4NDAsIDB4RDgsIDB4RUMsCiAKLTB4RkYsIDB4ODAsIDB4QzAsIDB4RTksCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4RkYsIDB4ODAsIDB4QzAsIDB4RTksCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgxRiwgMHhENywgMHgxOCwgMHhCRCwKLTB4M0YsIDB4RDcsIDB4MjIsIDB4QkQsCisJMHgxRiwgMHhENywgMHgxOCwgMHhCRCwKKwkweDNGLCAweEQ3LCAweDIyLCAweEJELAogCi0weDgxLCAweDA0LAotMHg4OSwgMHgwNCwKLTB4MDEsIDB4MDQsCi0weDA5LCAweDA0LAorCTB4ODEsIDB4MDQsCisJMHg4OSwgMHgwNCwKKwkweDAxLCAweDA0LAorCTB4MDksIDB4MDQsCiAKLTB4QzksIDB4NDEsIDB4QzAsIDB4RUMsCi0weDExLCAweDA0LAotMHgwMCwgMHhFMCwKKwkweEM5LCAweDQxLCAweEMwLCAweEVDLAorCTB4MTEsIDB4MDQsCisJMHgwMCwgMHhFMCwKIAotMHg0MSwgMHhDQywgMHg0MSwgMHhDRCwKLTB4NDksIDB4Q0MsIDB4NDksIDB4Q0QsCisJMHg0MSwgMHhDQywgMHg0MSwgMHhDRCwKKwkweDQ5LCAweENDLCAweDQ5LCAweENELAogCi0weEQxLCAweDQxLCAweEMwLCAweEVDLAotMHg1MSwgMHhDQywgMHg1MSwgMHhDRCwKKwkweEQxLCAweDQxLCAweEMwLCAweEVDLAorCTB4NTEsIDB4Q0MsIDB4NTEsIDB4Q0QsCiAKLTB4ODAsIDB4MDQsCi0weDEwLCAweDA0LAotMHgwOCwgMHgwNCwKLTB4MDAsIDB4RTAsCisJMHg4MCwgMHgwNCwKKwkweDEwLCAweDA0LAorCTB4MDgsIDB4MDQsCisJMHgwMCwgMHhFMCwKIAotMHgwMCwgMHhDQywgMHhDMCwgMHhDRCwKLTB4RDEsIDB4NDksIDB4QzAsIDB4RUMsCisJMHgwMCwgMHhDQywgMHhDMCwgMHhDRCwKKwkweEQxLCAweDQ5LCAweEMwLCAweEVDLAogCi0weDhBLCAweDFGLCAweDIwLCAweEU5LAotMHg4QiwgMHgzRiwgMHgyMCwgMHhFOSwKKwkweDhBLCAweDFGLCAweDIwLCAweEU5LAorCTB4OEIsIDB4M0YsIDB4MjAsIDB4RTksCiAKLTB4NDEsIDB4M0MsIDB4NDEsIDB4QUQsCi0weDQ5LCAweDNDLCAweDQ5LCAweEFELAorCTB4NDEsIDB4M0MsIDB4NDEsIDB4QUQsCisJMHg0OSwgMHgzQywgMHg0OSwgMHhBRCwKIAotMHgxMCwgMHhDQywgMHgxMCwgMHhDRCwKLTB4MDgsIDB4Q0MsIDB4MDgsIDB4Q0QsCisJMHgxMCwgMHhDQywgMHgxMCwgMHhDRCwKKwkweDA4LCAweENDLCAweDA4LCAweENELAogCi0weEI5LCAweDQxLCAweDQ5LCAweEJCLAotMHgxRiwgMHhGMCwgMHg0MSwgMHhDRCwKKwkweEI5LCAweDQxLCAweDQ5LCAweEJCLAorCTB4MUYsIDB4RjAsIDB4NDEsIDB4Q0QsCiAKLTB4NTEsIDB4M0MsIDB4NTEsIDB4QUQsCi0weDAwLCAweDk4LCAweDgwLCAweEU5LAorCTB4NTEsIDB4M0MsIDB4NTEsIDB4QUQsCisJMHgwMCwgMHg5OCwgMHg4MCwgMHhFOSwKIAotMHg4RiwgMHg4MCwgMHgwNywgMHhFQSwKLTB4MjQsIDB4MUYsIDB4MjAsIDB4RTksCisJMHg4RiwgMHg4MCwgMHgwNywgMHhFQSwKKwkweDI0LCAweDFGLCAweDIwLCAweEU5LAogCi0weDIxLCAweDQ1LCAweDgwLCAweEU4LAotMHgxQSwgMHg0RCwgMHg4MCwgMHhFOCwKKwkweDIxLCAweDQ1LCAweDgwLCAweEU4LAorCTB4MUEsIDB4NEQsIDB4ODAsIDB4RTgsCiAKLTB4MzEsIDB4NTUsIDB4ODAsIDB4RTgsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MzEsIDB4NTUsIDB4ODAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgxNSwgMHg0MSwgMHg0OSwgMHhCRCwKLTB4MUQsIDB4NDEsIDB4NTEsIDB4QkQsCisJMHgxNSwgMHg0MSwgMHg0OSwgMHhCRCwKKwkweDFELCAweDQxLCAweDUxLCAweEJELAogCi0weDJFLCAweDQxLCAweDJBLCAweEI4LAotMHgzNCwgMHg1MywgMHhBMCwgMHhFOCwKKwkweDJFLCAweDQxLCAweDJBLCAweEI4LAorCTB4MzQsIDB4NTMsIDB4QTAsIDB4RTgsCiAKLTB4MTUsIDB4MzAsCi0weDFELCAweDMwLAotMHg1OCwgMHhFMywKLTB4MDAsIDB4RTAsCisJMHgxNSwgMHgzMCwKKwkweDFELCAweDMwLAorCTB4NTgsIDB4RTMsCisJMHgwMCwgMHhFMCwKIAotMHhCNSwgMHg0MCwgMHg0OCwgMHhCRCwKLTB4M0QsIDB4NDAsIDB4NTAsIDB4QkQsCisJMHhCNSwgMHg0MCwgMHg0OCwgMHhCRCwKKwkweDNELCAweDQwLCAweDUwLCAweEJELAogCi0weDI0LCAweDQzLCAweEEwLCAweEU4LAotMHgyQywgMHg0QiwgMHhBMCwgMHhFOCwKKwkweDI0LCAweDQzLCAweEEwLCAweEU4LAorCTB4MkMsIDB4NEIsIDB4QTAsIDB4RTgsCiAKLTB4MTUsIDB4NzIsCi0weDA5LCAweEUzLAotMHgwMCwgMHhFMCwKLTB4MUQsIDB4NzIsCisJMHgxNSwgMHg3MiwKKwkweDA5LCAweEUzLAorCTB4MDAsIDB4RTAsCisJMHgxRCwgMHg3MiwKIAotMHgzNSwgMHgzMCwKLTB4QjUsIDB4MzAsCi0weEJELCAweDMwLAotMHgzRCwgMHgzMCwKKwkweDM1LCAweDMwLAorCTB4QjUsIDB4MzAsCisJMHhCRCwgMHgzMCwKKwkweDNELCAweDMwLAogCi0weDlDLCAweDk3LCAweDU3LCAweDlGLAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDlDLCAweDk3LCAweDU3LCAweDlGLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4NkMsIDB4NjQsIDB4QzgsIDB4RUMsCi0weDk4LCAweEUxLAotMHhCNSwgMHgwNSwKKwkweDZDLCAweDY0LCAweEM4LCAweEVDLAorCTB4OTgsIDB4RTEsCisJMHhCNSwgMHgwNSwKIAotMHhCRCwgMHgwNSwKLTB4MkUsIDB4MzAsCi0weDMyLCAweEMwLCAweEEwLCAweEU4LAorCTB4QkQsIDB4MDUsCisJMHgyRSwgMHgzMCwKKwkweDMyLCAweEMwLCAweEEwLCAweEU4LAogCi0weDMzLCAweEMwLCAweEEwLCAweEU4LAotMHg3NCwgMHg2NCwgMHhDOCwgMHhFQywKKwkweDMzLCAweEMwLCAweEEwLCAweEU4LAorCTB4NzQsIDB4NjQsIDB4QzgsIDB4RUMsCiAKLTB4NDAsIDB4M0MsIDB4NDAsIDB4QUQsCi0weDMyLCAweDZBLAotMHgyQSwgMHgzMCwKKwkweDQwLCAweDNDLCAweDQwLCAweEFELAorCTB4MzIsIDB4NkEsCisJMHgyQSwgMHgzMCwKIAotMHgyMCwgMHg3MywKLTB4MzMsIDB4NkEsCi0weDAwLCAweEUwLAotMHgyOCwgMHg3MywKKwkweDIwLCAweDczLAorCTB4MzMsIDB4NkEsCisJMHgwMCwgMHhFMCwKKwkweDI4LCAweDczLAogCi0weDFDLCAweDcyLAotMHg4MywgMHhFMiwKLTB4N0IsIDB4ODAsIDB4MTUsIDB4RUEsCisJMHgxQywgMHg3MiwKKwkweDgzLCAweEUyLAorCTB4N0IsIDB4ODAsIDB4MTUsIDB4RUEsCiAKLTB4QjgsIDB4M0QsIDB4MjgsIDB4REYsCi0weDMwLCAweDM1LCAweDIwLCAweERGLAorCTB4QjgsIDB4M0QsIDB4MjgsIDB4REYsCisJMHgzMCwgMHgzNSwgMHgyMCwgMHhERiwKIAotMHg0MCwgMHgzMCwKLTB4MDAsIDB4RTAsCi0weENDLCAweEUyLAotMHg2NCwgMHg3MiwKKwkweDQwLCAweDMwLAorCTB4MDAsIDB4RTAsCisJMHhDQywgMHhFMiwKKwkweDY0LCAweDcyLAogCi0weDI1LCAweDQyLCAweDUyLCAweEJGLAotMHgyRCwgMHg0MiwgMHg0QSwgMHhCRiwKKwkweDI1LCAweDQyLCAweDUyLCAweEJGLAorCTB4MkQsIDB4NDIsIDB4NEEsIDB4QkYsCiAKLTB4MzAsIDB4MkUsIDB4MzAsIDB4REYsCi0weDM4LCAweDJFLCAweDM4LCAweERGLAorCTB4MzAsIDB4MkUsIDB4MzAsIDB4REYsCisJMHgzOCwgMHgyRSwgMHgzOCwgMHhERiwKIAotMHgxOCwgMHgxRCwgMHg0NSwgMHhFOSwKLTB4MUUsIDB4MTUsIDB4NDUsIDB4RTksCisJMHgxOCwgMHgxRCwgMHg0NSwgMHhFOSwKKwkweDFFLCAweDE1LCAweDQ1LCAweEU5LAogCi0weDJCLCAweDQ5LCAweDUxLCAweEJELAotMHgwMCwgMHhFMCwKLTB4MUYsIDB4NzMsCisJMHgyQiwgMHg0OSwgMHg1MSwgMHhCRCwKKwkweDAwLCAweEUwLAorCTB4MUYsIDB4NzMsCiAKLTB4MzgsIDB4MzgsIDB4NDAsIDB4QUYsCi0weDMwLCAweDMwLCAweDQwLCAweEFGLAorCTB4MzgsIDB4MzgsIDB4NDAsIDB4QUYsCisJMHgzMCwgMHgzMCwgMHg0MCwgMHhBRiwKIAotMHgyNCwgMHgxRiwgMHgyNCwgMHhERiwKLTB4MUQsIDB4MzIsIDB4MjAsIDB4RTksCisJMHgyNCwgMHgxRiwgMHgyNCwgMHhERiwKKwkweDFELCAweDMyLCAweDIwLCAweEU5LAogCi0weDJDLCAweDFGLCAweDJDLCAweERGLAotMHgxQSwgMHgzMywgMHgyMCwgMHhFOSwKKwkweDJDLCAweDFGLCAweDJDLCAweERGLAorCTB4MUEsIDB4MzMsIDB4MjAsIDB4RTksCiAKLTB4QjAsIDB4MTAsCi0weDA4LCAweEUzLAotMHg0MCwgMHgxMCwKLTB4QjgsIDB4MTAsCisJMHhCMCwgMHgxMCwKKwkweDA4LCAweEUzLAorCTB4NDAsIDB4MTAsCisJMHhCOCwgMHgxMCwKIAotMHgyNiwgMHhGMCwgMHgzMCwgMHhDRCwKLTB4MkYsIDB4RjAsIDB4MzgsIDB4Q0QsCisJMHgyNiwgMHhGMCwgMHgzMCwgMHhDRCwKKwkweDJGLCAweEYwLCAweDM4LCAweENELAogCi0weDJCLCAweDgwLCAweDIwLCAweEU5LAotMHgyQSwgMHg4MCwgMHgyMCwgMHhFOSwKKwkweDJCLCAweDgwLCAweDIwLCAweEU5LAorCTB4MkEsIDB4ODAsIDB4MjAsIDB4RTksCiAKLTB4QTYsIDB4MjAsCi0weDg4LCAweEUyLAotMHgwMCwgMHhFMCwKLTB4QUYsIDB4MjAsCisJMHhBNiwgMHgyMCwKKwkweDg4LCAweEUyLAorCTB4MDAsIDB4RTAsCisJMHhBRiwgMHgyMCwKIAotMHgyOCwgMHgyQSwgMHgyNiwgMHhBRiwKLTB4MjAsIDB4MkEsIDB4QzAsIDB4QUYsCisJMHgyOCwgMHgyQSwgMHgyNiwgMHhBRiwKKwkweDIwLCAweDJBLCAweEMwLCAweEFGLAogCi0weDM0LCAweDFGLCAweDM0LCAweERGLAotMHg0NiwgMHgyNCwgMHg0NiwgMHhERiwKKwkweDM0LCAweDFGLCAweDM0LCAweERGLAorCTB4NDYsIDB4MjQsIDB4NDYsIDB4REYsCiAKLTB4MjgsIDB4MzAsIDB4ODAsIDB4QkYsCi0weDIwLCAweDM4LCAweDgwLCAweEJGLAorCTB4MjgsIDB4MzAsIDB4ODAsIDB4QkYsCisJMHgyMCwgMHgzOCwgMHg4MCwgMHhCRiwKIAotMHg0NywgMHgyNCwgMHg0NywgMHhERiwKLTB4NEUsIDB4MkMsIDB4NEUsIDB4REYsCisJMHg0NywgMHgyNCwgMHg0NywgMHhERiwKKwkweDRFLCAweDJDLCAweDRFLCAweERGLAogCi0weDRGLCAweDJDLCAweDRGLCAweERGLAotMHg1NiwgMHgzNCwgMHg1NiwgMHhERiwKKwkweDRGLCAweDJDLCAweDRGLCAweERGLAorCTB4NTYsIDB4MzQsIDB4NTYsIDB4REYsCiAKLTB4MjgsIDB4MTUsIDB4MjgsIDB4REYsCi0weDIwLCAweDFELCAweDIwLCAweERGLAorCTB4MjgsIDB4MTUsIDB4MjgsIDB4REYsCisJMHgyMCwgMHgxRCwgMHgyMCwgMHhERiwKIAotMHg1NywgMHgzNCwgMHg1NywgMHhERiwKLTB4MDAsIDB4RTAsCi0weDFELCAweDA1LAorCTB4NTcsIDB4MzQsIDB4NTcsIDB4REYsCisJMHgwMCwgMHhFMCwKKwkweDFELCAweDA1LAogCi0weDA0LCAweDgwLCAweDEwLCAweEVBLAotMHg4OSwgMHhFMiwKLTB4MkIsIDB4MzAsCisJMHgwNCwgMHg4MCwgMHgxMCwgMHhFQSwKKwkweDg5LCAweEUyLAorCTB4MkIsIDB4MzAsCiAKLTB4M0YsIDB4QzEsIDB4MUQsIDB4QkQsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4M0YsIDB4QzEsIDB4MUQsIDB4QkQsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weEEwLCAweDY4LAotMHhCRiwgMHgyNSwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHhBMCwgMHg2OCwKKwkweEJGLCAweDI1LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MjAsIDB4QzAsIDB4MjAsIDB4QUYsCi0weDI4LCAweDA1LAotMHg5NywgMHg3NCwKKwkweDIwLCAweEMwLCAweDIwLCAweEFGLAorCTB4MjgsIDB4MDUsCisJMHg5NywgMHg3NCwKIAotMHgwMCwgMHhFMCwKLTB4MkEsIDB4MTAsCi0weDE2LCAweEMwLCAweDIwLCAweEU5LAorCTB4MDAsIDB4RTAsCisJMHgyQSwgMHgxMCwKKwkweDE2LCAweEMwLCAweDIwLCAweEU5LAogCi0weDA0LCAweDgwLCAweDEwLCAweEVBLAotMHg4QywgMHhFMiwKLTB4OTUsIDB4MDUsCisJMHgwNCwgMHg4MCwgMHgxMCwgMHhFQSwKKwkweDhDLCAweEUyLAorCTB4OTUsIDB4MDUsCiAKLTB4MjgsIDB4QzEsIDB4MjgsIDB4QUQsCi0weDFGLCAweEMxLCAweDE1LCAweEJELAorCTB4MjgsIDB4QzEsIDB4MjgsIDB4QUQsCisJMHgxRiwgMHhDMSwgMHgxNSwgMHhCRCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weEE4LCAweDY3LAotMHg5RiwgMHg2QiwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHhBOCwgMHg2NywKKwkweDlGLCAweDZCLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MjgsIDB4QzAsIDB4MjgsIDB4QUQsCi0weDFELCAweDI1LAotMHgyMCwgMHgwNSwKKwkweDI4LCAweEMwLCAweDI4LCAweEFELAorCTB4MUQsIDB4MjUsCisJMHgyMCwgMHgwNSwKIAotMHgyOCwgMHgzMiwgMHg4MCwgMHhBRCwKLTB4NDAsIDB4MkEsIDB4NDAsIDB4QkQsCisJMHgyOCwgMHgzMiwgMHg4MCwgMHhBRCwKKwkweDQwLCAweDJBLCAweDQwLCAweEJELAogCi0weDFDLCAweDgwLCAweDIwLCAweEU5LAotMHgyMCwgMHgzMywgMHgyMCwgMHhBRCwKKwkweDFDLCAweDgwLCAweDIwLCAweEU5LAorCTB4MjAsIDB4MzMsIDB4MjAsIDB4QUQsCiAKLTB4MjAsIDB4NzMsCi0weDAwLCAweEUwLAotMHhCNiwgMHg0OSwgMHg1MSwgMHhCQiwKKwkweDIwLCAweDczLAorCTB4MDAsIDB4RTAsCisJMHhCNiwgMHg0OSwgMHg1MSwgMHhCQiwKIAotMHgyNiwgMHgyRiwgMHhCMCwgMHhFOCwKLTB4MTksIDB4MjAsIDB4MjAsIDB4RTksCisJMHgyNiwgMHgyRiwgMHhCMCwgMHhFOCwKKwkweDE5LCAweDIwLCAweDIwLCAweEU5LAogCi0weDM1LCAweDIwLCAweDM1LCAweERGLAotMHgzRCwgMHgyMCwgMHgzRCwgMHhERiwKKwkweDM1LCAweDIwLCAweDM1LCAweERGLAorCTB4M0QsIDB4MjAsIDB4M0QsIDB4REYsCiAKLTB4MTUsIDB4MjAsIDB4MTUsIDB4REYsCi0weDFELCAweDIwLCAweDFELCAweERGLAorCTB4MTUsIDB4MjAsIDB4MTUsIDB4REYsCisJMHgxRCwgMHgyMCwgMHgxRCwgMHhERiwKIAotMHgyNiwgMHhEMCwgMHgyNiwgMHhDRCwKLTB4MjksIDB4NDksIDB4MkEsIDB4QjgsCisJMHgyNiwgMHhEMCwgMHgyNiwgMHhDRCwKKwkweDI5LCAweDQ5LCAweDJBLCAweEI4LAogCi0weDI2LCAweDQwLCAweDgwLCAweEJELAotMHgzQiwgMHg0OCwgMHg1MCwgMHhCRCwKKwkweDI2LCAweDQwLCAweDgwLCAweEJELAorCTB4M0IsIDB4NDgsIDB4NTAsIDB4QkQsCiAKLTB4M0UsIDB4NTQsIDB4NTcsIDB4OUYsCi0weDAwLCAweEUwLAotMHg4MiwgMHhFMSwKKwkweDNFLCAweDU0LCAweDU3LCAweDlGLAorCTB4MDAsIDB4RTAsCisJMHg4MiwgMHhFMSwKIAotMHgxRSwgMHhBRiwgMHg1OSwgMHg5RiwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgxRSwgMHhBRiwgMHg1OSwgMHg5RiwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDI2LCAweDMwLAotMHgyOSwgMHgzMCwKLTB4NDgsIDB4M0MsIDB4NDgsIDB4QUQsCisJMHgyNiwgMHgzMCwKKwkweDI5LCAweDMwLAorCTB4NDgsIDB4M0MsIDB4NDgsIDB4QUQsCiAKLTB4MkIsIDB4NzIsCi0weEMyLCAweEUxLAotMHgyQywgMHhDMCwgMHg0NCwgMHhDMiwKKwkweDJCLCAweDcyLAorCTB4QzIsIDB4RTEsCisJMHgyQywgMHhDMCwgMHg0NCwgMHhDMiwKIAotMHgwNSwgMHgyNCwgMHgzNCwgMHhCRiwKLTB4MEQsIDB4MjQsIDB4MkMsIDB4QkYsCisJMHgwNSwgMHgyNCwgMHgzNCwgMHhCRiwKKwkweDBELCAweDI0LCAweDJDLCAweEJGLAogCi0weDJELCAweDQ2LCAweDRFLCAweEJGLAotMHgyNSwgMHg0NiwgMHg1NiwgMHhCRiwKKwkweDJELCAweDQ2LCAweDRFLCAweEJGLAorCTB4MjUsIDB4NDYsIDB4NTYsIDB4QkYsCiAKLTB4MjAsIDB4MUQsIDB4NkYsIDB4OEYsCi0weDMyLCAweDNFLCAweDVGLCAweEU5LAorCTB4MjAsIDB4MUQsIDB4NkYsIDB4OEYsCisJMHgzMiwgMHgzRSwgMHg1RiwgMHhFOSwKIAotMHgzRSwgMHg1MCwgMHg1NiwgMHg5RiwKLTB4MDAsIDB4RTAsCi0weDNCLCAweDMwLAorCTB4M0UsIDB4NTAsIDB4NTYsIDB4OUYsCisJMHgwMCwgMHhFMCwKKwkweDNCLCAweDMwLAogCi0weDFFLCAweDhGLCAweDUxLCAweDlGLAotMHgzMywgMHgxRSwgMHg1RiwgMHhFOSwKKwkweDFFLCAweDhGLCAweDUxLCAweDlGLAorCTB4MzMsIDB4MUUsIDB4NUYsIDB4RTksCiAKLTB4MDUsIDB4NDQsIDB4NTQsIDB4QjIsCi0weDBELCAweDQ0LCAweDRDLCAweEIyLAorCTB4MDUsIDB4NDQsIDB4NTQsIDB4QjIsCisJMHgwRCwgMHg0NCwgMHg0QywgMHhCMiwKIAotMHgxOSwgMHhDMCwgMHhCMCwgMHhFOCwKLTB4MzQsIDB4QzAsIDB4NDQsIDB4QzQsCisJMHgxOSwgMHhDMCwgMHhCMCwgMHhFOCwKKwkweDM0LCAweEMwLCAweDQ0LCAweEM0LAogCi0weDMzLCAweDczLAotMHgwMCwgMHhFMCwKLTB4M0UsIDB4NjIsIDB4NTcsIDB4OUYsCisJMHgzMywgMHg3MywKKwkweDAwLCAweEUwLAorCTB4M0UsIDB4NjIsIDB4NTcsIDB4OUYsCiAKLTB4MUUsIDB4QUYsIDB4NTksIDB4OUYsCi0weDAwLCAweEUwLAotMHgwRCwgMHgyMCwKKwkweDFFLCAweEFGLCAweDU5LCAweDlGLAorCTB4MDAsIDB4RTAsCisJMHgwRCwgMHgyMCwKIAotMHg4NCwgMHgzRSwgMHg1OCwgMHhFOSwKLTB4MjgsIDB4MUQsIDB4NkYsIDB4OEYsCisJMHg4NCwgMHgzRSwgMHg1OCwgMHhFOSwKKwkweDI4LCAweDFELCAweDZGLCAweDhGLAogCi0weDA1LCAweDIwLAotMHgwMCwgMHhFMCwKLTB4ODUsIDB4MUUsIDB4NTgsIDB4RTksCisJMHgwNSwgMHgyMCwKKwkweDAwLCAweEUwLAorCTB4ODUsIDB4MUUsIDB4NTgsIDB4RTksCiAKLTB4OUIsIDB4M0IsIDB4MzMsIDB4REYsCi0weDIwLCAweDIwLCAweDQyLCAweEFGLAorCTB4OUIsIDB4M0IsIDB4MzMsIDB4REYsCisJMHgyMCwgMHgyMCwgMHg0MiwgMHhBRiwKIAotMHgzMCwgMHg0MiwgMHg1NiwgMHg5RiwKLTB4ODAsIDB4M0UsIDB4NTcsIDB4RTksCisJMHgzMCwgMHg0MiwgMHg1NiwgMHg5RiwKKwkweDgwLCAweDNFLCAweDU3LCAweEU5LAogCi0weDNGLCAweDhGLCAweDUxLCAweDlGLAotMHgzMCwgMHg4MCwgMHg1RiwgMHhFOSwKKwkweDNGLCAweDhGLCAweDUxLCAweDlGLAorCTB4MzAsIDB4ODAsIDB4NUYsIDB4RTksCiAKLTB4MjgsIDB4MjgsIDB4MjQsIDB4QUYsCi0weDgxLCAweDFFLCAweDU3LCAweEU5LAorCTB4MjgsIDB4MjgsIDB4MjQsIDB4QUYsCisJMHg4MSwgMHgxRSwgMHg1NywgMHhFOSwKIAotMHgwNSwgMHg0NywgMHg1NywgMHhCRiwKLTB4MEQsIDB4NDcsIDB4NEYsIDB4QkYsCisJMHgwNSwgMHg0NywgMHg1NywgMHhCRiwKKwkweDBELCAweDQ3LCAweDRGLCAweEJGLAogCi0weDg4LCAweDgwLCAweDU4LCAweEU5LAotMHgxQiwgMHgyOSwgMHgxQiwgMHhERiwKKwkweDg4LCAweDgwLCAweDU4LCAweEU5LAorCTB4MUIsIDB4MjksIDB4MUIsIDB4REYsCiAKLTB4MzAsIDB4MUQsIDB4NkYsIDB4OEYsCi0weDNBLCAweDMwLCAweDRGLCAweEU5LAorCTB4MzAsIDB4MUQsIDB4NkYsIDB4OEYsCisJMHgzQSwgMHgzMCwgMHg0RiwgMHhFOSwKIAotMHgxQywgMHgzMCwgMHgyNiwgMHhERiwKLTB4MDksIDB4RTMsCi0weDNCLCAweDA1LAorCTB4MUMsIDB4MzAsIDB4MjYsIDB4REYsCisJMHgwOSwgMHhFMywKKwkweDNCLCAweDA1LAogCi0weDNFLCAweDUwLCAweDU2LCAweDlGLAotMHgzQiwgMHgzRiwgMHg0RiwgMHhFOSwKKwkweDNFLCAweDUwLCAweDU2LCAweDlGLAorCTB4M0IsIDB4M0YsIDB4NEYsIDB4RTksCiAKLTB4MUUsIDB4OEYsIDB4NTEsIDB4OUYsCi0weDAwLCAweEUwLAotMHhBQywgMHgyMCwKKwkweDFFLCAweDhGLCAweDUxLCAweDlGLAorCTB4MDAsIDB4RTAsCisJMHhBQywgMHgyMCwKIAotMHgyRCwgMHg0NCwgMHg0QywgMHhCNCwKLTB4MkMsIDB4MUMsIDB4QzAsIDB4QUYsCisJMHgyRCwgMHg0NCwgMHg0QywgMHhCNCwKKwkweDJDLCAweDFDLCAweEMwLCAweEFGLAogCi0weDI1LCAweDQ0LCAweDU0LCAweEI0LAotMHgwMCwgMHhFMCwKLTB4QzgsIDB4MzAsCisJMHgyNSwgMHg0NCwgMHg1NCwgMHhCNCwKKwkweDAwLCAweEUwLAorCTB4QzgsIDB4MzAsCiAKLTB4MzAsIDB4NDYsIDB4MzAsIDB4QUYsCi0weDFCLCAweDFCLCAweDQ4LCAweEFGLAorCTB4MzAsIDB4NDYsIDB4MzAsIDB4QUYsCisJMHgxQiwgMHgxQiwgMHg0OCwgMHhBRiwKIAotMHgwMCwgMHhFMCwKLTB4MjUsIDB4MjAsCi0weDM4LCAweDJDLCAweDRGLCAweEU5LAorCTB4MDAsIDB4RTAsCisJMHgyNSwgMHgyMCwKKwkweDM4LCAweDJDLCAweDRGLCAweEU5LAogCi0weDg2LCAweDgwLCAweDU3LCAweEU5LAotMHgzOCwgMHgxRCwgMHg2RiwgMHg4RiwKKwkweDg2LCAweDgwLCAweDU3LCAweEU5LAorCTB4MzgsIDB4MUQsIDB4NkYsIDB4OEYsCiAKLTB4MjgsIDB4NzQsCi0weDAwLCAweEUwLAotMHgwRCwgMHg0NCwgMHg0QywgMHhCMCwKKwkweDI4LCAweDc0LAorCTB4MDAsIDB4RTAsCisJMHgwRCwgMHg0NCwgMHg0QywgMHhCMCwKIAotMHgwNSwgMHg0NCwgMHg1NCwgMHhCMCwKLTB4MkQsIDB4MjAsCi0weDlCLCAweDEwLAorCTB4MDUsIDB4NDQsIDB4NTQsIDB4QjAsCisJMHgyRCwgMHgyMCwKKwkweDlCLCAweDEwLAogCi0weDgyLCAweDNFLCAweDU3LCAweEU5LAotMHgzMiwgMHhGMCwgMHgxQiwgMHhDRCwKKwkweDgyLCAweDNFLCAweDU3LCAweEU5LAorCTB4MzIsIDB4RjAsIDB4MUIsIDB4Q0QsCiAKLTB4MUUsIDB4QkQsIDB4NTksIDB4OUYsCi0weDgzLCAweDFFLCAweDU3LCAweEU5LAorCTB4MUUsIDB4QkQsIDB4NTksIDB4OUYsCisJMHg4MywgMHgxRSwgMHg1NywgMHhFOSwKIAotMHgzOCwgMHg0NywgMHgzOCwgMHhBRiwKLTB4MzQsIDB4MjAsCi0weDJBLCAweDMwLAorCTB4MzgsIDB4NDcsIDB4MzgsIDB4QUYsCisJMHgzNCwgMHgyMCwKKwkweDJBLCAweDMwLAogCi0weDAwLCAweEUwLAotMHgwRCwgMHgyMCwKLTB4MzIsIDB4MjAsCi0weDA1LCAweDIwLAorCTB4MDAsIDB4RTAsCisJMHgwRCwgMHgyMCwKKwkweDMyLCAweDIwLAorCTB4MDUsIDB4MjAsCiAKLTB4ODcsIDB4ODAsIDB4NTcsIDB4RTksCi0weDFGLCAweDU0LCAweDU3LCAweDlGLAorCTB4ODcsIDB4ODAsIDB4NTcsIDB4RTksCisJMHgxRiwgMHg1NCwgMHg1NywgMHg5RiwKIAotMHgxNywgMHg0MiwgMHg1NiwgMHg5RiwKLTB4MDAsIDB4RTAsCi0weDNCLCAweDZBLAorCTB4MTcsIDB4NDIsIDB4NTYsIDB4OUYsCisJMHgwMCwgMHhFMCwKKwkweDNCLCAweDZBLAogCi0weDNGLCAweDhGLCAweDUxLCAweDlGLAotMHgzNywgMHgxRSwgMHg0RiwgMHhFOSwKKwkweDNGLCAweDhGLCAweDUxLCAweDlGLAorCTB4MzcsIDB4MUUsIDB4NEYsIDB4RTksCiAKLTB4MzcsIDB4MzIsIDB4MkEsIDB4QUYsCi0weDAwLCAweEUwLAotMHgzMiwgMHgwMCwKKwkweDM3LCAweDMyLCAweDJBLCAweEFGLAorCTB4MDAsIDB4RTAsCisJMHgzMiwgMHgwMCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MjcsIDB4QzAsIDB4NDQsIDB4QzAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDI3LCAweEMwLCAweDQ0LCAweEMwLAogCi0weDM2LCAweDFGLCAweDRGLCAweEU5LAotMHgxRiwgMHgxRiwgMHgyNiwgMHhERiwKKwkweDM2LCAweDFGLCAweDRGLCAweEU5LAorCTB4MUYsIDB4MUYsIDB4MjYsIDB4REYsCiAKLTB4MzcsIDB4MUIsIDB4MzcsIDB4QkYsCi0weDE3LCAweDI2LCAweDE3LCAweERGLAorCTB4MzcsIDB4MUIsIDB4MzcsIDB4QkYsCisJMHgxNywgMHgyNiwgMHgxNywgMHhERiwKIAotMHgzRSwgMHgxNywgMHg0RiwgMHhFOSwKLTB4M0YsIDB4M0YsIDB4NEYsIDB4RTksCisJMHgzRSwgMHgxNywgMHg0RiwgMHhFOSwKKwkweDNGLCAweDNGLCAweDRGLCAweEU5LAogCi0weDM0LCAweDFGLCAweDM0LCAweEFGLAotMHgyQiwgMHgwNSwKLTB4QTcsIDB4MjAsCisJMHgzNCwgMHgxRiwgMHgzNCwgMHhBRiwKKwkweDJCLCAweDA1LAorCTB4QTcsIDB4MjAsCiAKLTB4MzMsIDB4MkIsIDB4MzcsIDB4REYsCi0weDI3LCAweDE3LCAweEMwLCAweEFGLAorCTB4MzMsIDB4MkIsIDB4MzcsIDB4REYsCisJMHgyNywgMHgxNywgMHhDMCwgMHhBRiwKIAotMHgzNCwgMHg4MCwgMHg0RiwgMHhFOSwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgzNCwgMHg4MCwgMHg0RiwgMHhFOSwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDJELCAweDIxLCAweDFBLCAweEIwLAotMHgyNSwgMHgyMSwgMHgzMSwgMHhCMCwKKwkweDJELCAweDIxLCAweDFBLCAweEIwLAorCTB4MjUsIDB4MjEsIDB4MzEsIDB4QjAsCiAKLTB4MEQsIDB4MjEsIDB4MUEsIDB4QjIsCi0weDA1LCAweDIxLCAweDMxLCAweEIyLAorCTB4MEQsIDB4MjEsIDB4MUEsIDB4QjIsCisJMHgwNSwgMHgyMSwgMHgzMSwgMHhCMiwKIAotMHgwMywgMHg4MCwgMHgyQSwgMHhFQSwKLTB4MTcsIDB4QzEsIDB4MkIsIDB4QkQsCisJMHgwMywgMHg4MCwgMHgyQSwgMHhFQSwKKwkweDE3LCAweEMxLCAweDJCLCAweEJELAogCi0weDJELCAweDIwLAotMHgyNSwgMHgyMCwKLTB4MDUsIDB4MjAsCi0weDBELCAweDIwLAorCTB4MkQsIDB4MjAsCisJMHgyNSwgMHgyMCwKKwkweDA1LCAweDIwLAorCTB4MEQsIDB4MjAsCiAKLTB4QjMsIDB4NjgsCi0weDk3LCAweDI1LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweEIzLCAweDY4LAorCTB4OTcsIDB4MjUsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgzMywgMHhDMCwgMHgzMywgMHhBRiwKLTB4MkYsIDB4QzAsIDB4MjEsIDB4QzAsCisJMHgzMywgMHhDMCwgMHgzMywgMHhBRiwKKwkweDJGLCAweEMwLCAweDIxLCAweEMwLAogCi0weDE2LCAweDQyLCAweDU2LCAweDlGLAotMHgzQywgMHgyNywgMHg0RiwgMHhFOSwKKwkweDE2LCAweDQyLCAweDU2LCAweDlGLAorCTB4M0MsIDB4MjcsIDB4NEYsIDB4RTksCiAKLTB4MUUsIDB4NjIsIDB4NTcsIDB4OUYsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MUUsIDB4NjIsIDB4NTcsIDB4OUYsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgyNSwgMHgyMSwgMHgzMSwgMHhCNCwKLTB4MkQsIDB4MjEsIDB4MUEsIDB4QjQsCisJMHgyNSwgMHgyMSwgMHgzMSwgMHhCNCwKKwkweDJELCAweDIxLCAweDFBLCAweEI0LAogCi0weDNGLCAweDJGLCAweDVELCAweDlGLAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDNGLCAweDJGLCAweDVELCAweDlGLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MzMsIDB4MDUsCi0weDAwLCAweEUwLAotMHgyOCwgMHgxOSwgMHg2MCwgMHhFQywKKwkweDMzLCAweDA1LAorCTB4MDAsIDB4RTAsCisJMHgyOCwgMHgxOSwgMHg2MCwgMHhFQywKIAotMHgwRCwgMHgyMSwgMHgxQSwgMHhCNiwKLTB4MDUsIDB4MjEsIDB4MzEsIDB4QjYsCisJMHgwRCwgMHgyMSwgMHgxQSwgMHhCNiwKKwkweDA1LCAweDIxLCAweDMxLCAweEI2LAogCi0weDM3LCAweDBGLCAweDVDLCAweDlGLAotMHgwMCwgMHhFMCwKLTB4MkYsIDB4MjAsCisJMHgzNywgMHgwRiwgMHg1QywgMHg5RiwKKwkweDAwLCAweEUwLAorCTB4MkYsIDB4MjAsCiAKLTB4MjMsIDB4M0IsIDB4MzMsIDB4QUQsCi0weDFFLCAweDI2LCAweDFFLCAweERGLAorCTB4MjMsIDB4M0IsIDB4MzMsIDB4QUQsCisJMHgxRSwgMHgyNiwgMHgxRSwgMHhERiwKIAotMHhBNywgMHgxRSwgMHg0RiwgMHhFOSwKLTB4MTcsIDB4MjYsIDB4MTYsIDB4REYsCisJMHhBNywgMHgxRSwgMHg0RiwgMHhFOSwKKwkweDE3LCAweDI2LCAweDE2LCAweERGLAogCi0weDJELCAweDIwLAotMHgwMCwgMHhFMCwKLTB4QTgsIDB4M0YsIDB4NEYsIDB4RTksCisJMHgyRCwgMHgyMCwKKwkweDAwLCAweEUwLAorCTB4QTgsIDB4M0YsIDB4NEYsIDB4RTksCiAKLTB4MkYsIDB4MkYsIDB4MUUsIDB4QUYsCi0weDI1LCAweDIwLAotMHgwMCwgMHhFMCwKKwkweDJGLCAweDJGLCAweDFFLCAweEFGLAorCTB4MjUsIDB4MjAsCisJMHgwMCwgMHhFMCwKIAotMHhBNCwgMHgxNiwgMHg0RiwgMHhFOSwKLTB4MEYsIDB4QzAsIDB4MjEsIDB4QzIsCisJMHhBNCwgMHgxNiwgMHg0RiwgMHhFOSwKKwkweDBGLCAweEMwLCAweDIxLCAweEMyLAogCi0weEE2LCAweDgwLCAweDRGLCAweEU5LAotMHgxRiwgMHg2MiwgMHg1NywgMHg5RiwKKwkweEE2LCAweDgwLCAweDRGLCAweEU5LAorCTB4MUYsIDB4NjIsIDB4NTcsIDB4OUYsCiAKLTB4MEQsIDB4MjAsCi0weDA1LCAweDIwLAotMHgyRiwgMHhDMCwgMHgyMSwgMHhDNiwKKwkweDBELCAweDIwLAorCTB4MDUsIDB4MjAsCisJMHgyRiwgMHhDMCwgMHgyMSwgMHhDNiwKIAotMHgzRiwgMHgyRiwgMHg1RCwgMHg5RiwKLTB4MDAsIDB4RTAsCi0weDBGLCAweDIwLAorCTB4M0YsIDB4MkYsIDB4NUQsIDB4OUYsCisJMHgwMCwgMHhFMCwKKwkweDBGLCAweDIwLAogCi0weDE3LCAweDUwLCAweDU2LCAweDlGLAotMHhBNSwgMHgzNywgMHg0RiwgMHhFOSwKKwkweDE3LCAweDUwLCAweDU2LCAweDlGLAorCTB4QTUsIDB4MzcsIDB4NEYsIDB4RTksCiAKLTB4MDYsIDB4QzAsIDB4MjEsIDB4QzQsCi0weDBGLCAweDE3LCAweDBGLCAweEFGLAorCTB4MDYsIDB4QzAsIDB4MjEsIDB4QzQsCisJMHgwRiwgMHgxNywgMHgwRiwgMHhBRiwKIAotMHgzNywgMHgwRiwgMHg1QywgMHg5RiwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgzNywgMHgwRiwgMHg1QywgMHg5RiwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDJGLCAweDIwLAotMHgwMCwgMHhFMCwKLTB4QTMsIDB4ODAsIDB4NEYsIDB4RTksCisJMHgyRiwgMHgyMCwKKwkweDAwLCAweEUwLAorCTB4QTMsIDB4ODAsIDB4NEYsIDB4RTksCiAKLTB4MDYsIDB4MjAsCi0weDAwLCAweEUwLAotMHgxRiwgMHgyNiwgMHgxRiwgMHhERiwKKwkweDA2LCAweDIwLAorCTB4MDAsIDB4RTAsCisJMHgxRiwgMHgyNiwgMHgxRiwgMHhERiwKIAotMHgxNywgMHgyNiwgMHgxNywgMHhERiwKLTB4MzUsIDB4MTcsIDB4NEYsIDB4RTksCisJMHgxNywgMHgyNiwgMHgxNywgMHhERiwKKwkweDM1LCAweDE3LCAweDRGLCAweEU5LAogCi0weEExLCAweDFGLCAweDRGLCAweEU5LAotMHhBMiwgMHgzRiwgMHg0RiwgMHhFOSwKKwkweEExLCAweDFGLCAweDRGLCAweEU5LAorCTB4QTIsIDB4M0YsIDB4NEYsIDB4RTksCiAKLTB4MDYsIDB4MDYsIDB4MUYsIDB4QUYsCi0weDM5LCAweDM3LCAweDRGLCAweEU5LAorCTB4MDYsIDB4MDYsIDB4MUYsIDB4QUYsCisJMHgzOSwgMHgzNywgMHg0RiwgMHhFOSwKIAotMHgyRiwgMHgyRiwgMHgxNywgMHhBRiwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgyRiwgMHgyRiwgMHgxNywgMHhBRiwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weEEwLCAweDgwLCAweDRGLCAweEU5LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweEEwLCAweDgwLCAweDRGLCAweEU5LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MzEsIDB4ODAsIDB4NEYsIDB4RTksCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MzEsIDB4ODAsIDB4NEYsIDB4RTksCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4NTcsIDB4MzksIDB4MjAsIDB4RTksCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDU3LCAweDM5LCAweDIwLCAweEU5LAogCi0weDE2LCAweDI4LCAweDIwLCAweEU5LAotMHgxRCwgMHgzQiwgMHgyMCwgMHhFOSwKKwkweDE2LCAweDI4LCAweDIwLCAweEU5LAorCTB4MUQsIDB4M0IsIDB4MjAsIDB4RTksCiAKLTB4MUUsIDB4MkIsIDB4MjAsIDB4RTksCi0weDJCLCAweDMyLCAweDIwLCAweEU5LAorCTB4MUUsIDB4MkIsIDB4MjAsIDB4RTksCisJMHgyQiwgMHgzMiwgMHgyMCwgMHhFOSwKIAotMHgxQywgMHgyMywgMHgyMCwgMHhFOSwKLTB4NTcsIDB4MzYsIDB4MjAsIDB4RTksCisJMHgxQywgMHgyMywgMHgyMCwgMHhFOSwKKwkweDU3LCAweDM2LCAweDIwLCAweEU5LAogCi0weDAwLCAweDgwLCAweEEwLCAweEU5LAotMHg0MCwgMHg0MCwgMHhEOCwgMHhFQywKKwkweDAwLCAweDgwLCAweEEwLCAweEU5LAorCTB4NDAsIDB4NDAsIDB4RDgsIDB4RUMsCiAKLTB4RkYsIDB4ODAsIDB4QzAsIDB4RTksCi0weDkwLCAweEUyLAotMHgwMCwgMHhFMCwKKwkweEZGLCAweDgwLCAweEMwLCAweEU5LAorCTB4OTAsIDB4RTIsCisJMHgwMCwgMHhFMCwKIAotMHg2OCwgMHhGRiwgMHgyMCwgMHhFQSwKLTB4MTksIDB4QzgsIDB4QzEsIDB4Q0QsCisJMHg2OCwgMHhGRiwgMHgyMCwgMHhFQSwKKwkweDE5LCAweEM4LCAweEMxLCAweENELAogCi0weDFGLCAweEQ3LCAweDE4LCAweEJELAotMHgzRiwgMHhENywgMHgyMiwgMHhCRCwKKwkweDFGLCAweEQ3LCAweDE4LCAweEJELAorCTB4M0YsIDB4RDcsIDB4MjIsIDB4QkQsCiAKLTB4OUYsIDB4NDEsIDB4NDksIDB4QkQsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4OUYsIDB4NDEsIDB4NDksIDB4QkQsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgyNSwgMHg0MSwgMHg0OSwgMHhCRCwKLTB4MkQsIDB4NDEsIDB4NTEsIDB4QkQsCisJMHgyNSwgMHg0MSwgMHg0OSwgMHhCRCwKKwkweDJELCAweDQxLCAweDUxLCAweEJELAogCi0weDBELCAweDgwLCAweDA3LCAweEVBLAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDBELCAweDgwLCAweDA3LCAweEVBLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MzUsIDB4NDAsIDB4NDgsIDB4QkQsCi0weDNELCAweDQwLCAweDUwLCAweEJELAorCTB4MzUsIDB4NDAsIDB4NDgsIDB4QkQsCisJMHgzRCwgMHg0MCwgMHg1MCwgMHhCRCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MjUsIDB4MzAsCi0weDJELCAweDMwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgyNSwgMHgzMCwKKwkweDJELCAweDMwLAogCi0weDM1LCAweDMwLAotMHhCNSwgMHgzMCwKLTB4QkQsIDB4MzAsCi0weDNELCAweDMwLAorCTB4MzUsIDB4MzAsCisJMHhCNSwgMHgzMCwKKwkweEJELCAweDMwLAorCTB4M0QsIDB4MzAsCiAKLTB4OUMsIDB4QTcsIDB4NUIsIDB4OUYsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4OUMsIDB4QTcsIDB4NUIsIDB4OUYsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDY3LCAweEZGLCAweDBBLCAweEVBLAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDY3LCAweEZGLCAweDBBLCAweEVBLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4QzksIDB4NDEsIDB4QzgsIDB4RUMsCi0weDQyLCAweEUxLAotMHgwMCwgMHhFMCwKKwkweEM5LCAweDQxLCAweEM4LCAweEVDLAorCTB4NDIsIDB4RTEsCisJMHgwMCwgMHhFMCwKIAotMHg2NSwgMHhGRiwgMHgyMCwgMHhFQSwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHg2NSwgMHhGRiwgMHgyMCwgMHhFQSwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4QzgsIDB4NDAsIDB4QzAsIDB4RUMsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4QzgsIDB4NDAsIDB4QzAsIDB4RUMsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHg2MiwgMHhGRiwgMHgyMCwgMHhFQSwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHg2MiwgMHhGRiwgMHgyMCwgMHhFQSwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHdhcnBfZzQwMF90Mmd6W10gPSB7CiAKLTB4MDAsIDB4OEEsIDB4OTgsIDB4RTksCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4OEEsIDB4OTgsIDB4RTksCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKLTB4MDAsIDB4MDAsIDB4RDgsIDB4RUMsCisJMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKKwkweDAwLCAweDAwLCAweEQ4LCAweEVDLAogCi0weEZGLCAweDgwLCAweEMwLCAweEU5LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweEZGLCAweDgwLCAweEMwLCAweEU5LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MEEsIDB4NDAsIDB4NTAsIDB4QkYsCi0weDJBLCAweDQwLCAweDYwLCAweEJGLAorCTB4MEEsIDB4NDAsIDB4NTAsIDB4QkYsCisJMHgyQSwgMHg0MCwgMHg2MCwgMHhCRiwKIAotMHgzMiwgMHg0MSwgMHg1MSwgMHhCRiwKLTB4M0EsIDB4NDEsIDB4NjEsIDB4QkYsCisJMHgzMiwgMHg0MSwgMHg1MSwgMHhCRiwKKwkweDNBLCAweDQxLCAweDYxLCAweEJGLAogCi0weEMzLCAweDZCLAotMHhEMywgMHg2QiwKLTB4MDAsIDB4OEEsIDB4OTgsIDB4RTksCisJMHhDMywgMHg2QiwKKwkweEQzLCAweDZCLAorCTB4MDAsIDB4OEEsIDB4OTgsIDB4RTksCiAKLTB4NzMsIDB4N0IsIDB4QzgsIDB4RUMsCi0weDk2LCAweEUyLAotMHg0MSwgMHgwNCwKKwkweDczLCAweDdCLCAweEM4LCAweEVDLAorCTB4OTYsIDB4RTIsCisJMHg0MSwgMHgwNCwKIAotMHg3QiwgMHg0MywgMHhBMCwgMHhFOCwKLTB4NzMsIDB4NTMsIDB4QTAsIDB4RTgsCisJMHg3QiwgMHg0MywgMHhBMCwgMHhFOCwKKwkweDczLCAweDUzLCAweEEwLCAweEU4LAogCi0weEFELCAweEVFLCAweDIzLCAweDlGLAotMHgwMCwgMHhFMCwKLTB4NTEsIDB4MDQsCisJMHhBRCwgMHhFRSwgMHgyMywgMHg5RiwKKwkweDAwLCAweEUwLAorCTB4NTEsIDB4MDQsCiAKLTB4OTAsIDB4RTIsCi0weDYxLCAweDA0LAotMHgzMSwgMHg0NiwgMHhCMSwgMHhFOCwKKwkweDkwLCAweEUyLAorCTB4NjEsIDB4MDQsCisJMHgzMSwgMHg0NiwgMHhCMSwgMHhFOCwKIAotMHg1MSwgMHg0MSwgMHhFMCwgMHhFQywKLTB4MzksIDB4NjcsIDB4QjEsIDB4RTgsCisJMHg1MSwgMHg0MSwgMHhFMCwgMHhFQywKKwkweDM5LCAweDY3LCAweEIxLCAweEU4LAogCi0weDAwLCAweDA0LAotMHg0NiwgMHhFMiwKLTB4NzMsIDB4NjMsIDB4QTAsIDB4RTgsCisJMHgwMCwgMHgwNCwKKwkweDQ2LCAweEUyLAorCTB4NzMsIDB4NjMsIDB4QTAsIDB4RTgsCiAKLTB4NjEsIDB4NDEsIDB4RTAsIDB4RUMsCi0weDMxLCAweDAwLAotMHgzOSwgMHgwMCwKKwkweDYxLCAweDQxLCAweEUwLCAweEVDLAorCTB4MzEsIDB4MDAsCisJMHgzOSwgMHgwMCwKIAotMHg3OCwgMHg4MCwgMHgxNSwgMHhFQSwKLTB4MTAsIDB4MDQsCi0weDIwLCAweDA0LAorCTB4NzgsIDB4ODAsIDB4MTUsIDB4RUEsCisJMHgxMCwgMHgwNCwKKwkweDIwLCAweDA0LAogCi0weDYxLCAweDUxLCAweEUwLCAweEVDLAotMHgyRiwgMHg0MSwgMHg2MCwgMHhFQSwKKwkweDYxLCAweDUxLCAweEUwLCAweEVDLAorCTB4MkYsIDB4NDEsIDB4NjAsIDB4RUEsCiAKLTB4MzEsIDB4MjAsCi0weDM5LCAweDIwLAotMHgxRiwgMHg0MiwgMHhBMCwgMHhFOCwKKwkweDMxLCAweDIwLAorCTB4MzksIDB4MjAsCisJMHgxRiwgMHg0MiwgMHhBMCwgMHhFOCwKIAotMHgyQSwgMHg0MiwgMHg1MiwgMHhCRiwKLTB4MEYsIDB4NTIsIDB4QTAsIDB4RTgsCisJMHgyQSwgMHg0MiwgMHg1MiwgMHhCRiwKKwkweDBGLCAweDUyLCAweEEwLCAweEU4LAogCi0weDFBLCAweDQyLCAweDYyLCAweEJGLAotMHgxRSwgMHg1MSwgMHg2MCwgMHhFQSwKKwkweDFBLCAweDQyLCAweDYyLCAweEJGLAorCTB4MUUsIDB4NTEsIDB4NjAsIDB4RUEsCiAKLTB4NzMsIDB4N0IsIDB4QzgsIDB4RUMsCi0weDBFLCAweDYxLCAweDYwLCAweEVBLAorCTB4NzMsIDB4N0IsIDB4QzgsIDB4RUMsCisJMHgwRSwgMHg2MSwgMHg2MCwgMHhFQSwKIAotMHgzMiwgMHg0MCwgMHg1MCwgMHhCRCwKLTB4MjIsIDB4NDAsIDB4NjAsIDB4QkQsCisJMHgzMiwgMHg0MCwgMHg1MCwgMHhCRCwKKwkweDIyLCAweDQwLCAweDYwLCAweEJELAogCi0weDEyLCAweDQxLCAweDUxLCAweEJELAotMHgzQSwgMHg0MSwgMHg2MSwgMHhCRCwKKwkweDEyLCAweDQxLCAweDUxLCAweEJELAorCTB4M0EsIDB4NDEsIDB4NjEsIDB4QkQsCiAKLTB4QkYsIDB4MkYsIDB4MEUsIDB4QkQsCi0weDk3LCAweEUyLAotMHg3QiwgMHg3MiwKKwkweEJGLCAweDJGLCAweDBFLCAweEJELAorCTB4OTcsIDB4RTIsCisJMHg3QiwgMHg3MiwKIAotMHgzMiwgMHgyMCwKLTB4MjIsIDB4MjAsCi0weDEyLCAweDIwLAotMHgzQSwgMHgyMCwKKwkweDMyLCAweDIwLAorCTB4MjIsIDB4MjAsCisJMHgxMiwgMHgyMCwKKwkweDNBLCAweDIwLAogCi0weDM1LCAweDQ4LCAweEIxLCAweEU4LAotMHgzRCwgMHg1OSwgMHhCMSwgMHhFOCwKKwkweDM1LCAweDQ4LCAweEIxLCAweEU4LAorCTB4M0QsIDB4NTksIDB4QjEsIDB4RTgsCiAKLTB4NDYsIDB4MzEsIDB4NDYsIDB4QkYsCi0weDU2LCAweDMxLCAweDU2LCAweEJGLAorCTB4NDYsIDB4MzEsIDB4NDYsIDB4QkYsCisJMHg1NiwgMHgzMSwgMHg1NiwgMHhCRiwKIAotMHhCMywgMHhFMiwgMHgyRCwgMHg5RiwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHhCMywgMHhFMiwgMHgyRCwgMHg5RiwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDY2LCAweDMxLCAweDY2LCAweEJGLAotMHg0NywgMHgzOSwgMHg0NywgMHhCRiwKKwkweDY2LCAweDMxLCAweDY2LCAweEJGLAorCTB4NDcsIDB4MzksIDB4NDcsIDB4QkYsCiAKLTB4NTcsIDB4MzksIDB4NTcsIDB4QkYsCi0weDY3LCAweDM5LCAweDY3LCAweEJGLAorCTB4NTcsIDB4MzksIDB4NTcsIDB4QkYsCisJMHg2NywgMHgzOSwgMHg2NywgMHhCRiwKIAotMHg2OSwgMHg4MCwgMHgwNywgMHhFQSwKLTB4MjQsIDB4NDEsIDB4MjAsIDB4RTksCisJMHg2OSwgMHg4MCwgMHgwNywgMHhFQSwKKwkweDI0LCAweDQxLCAweDIwLCAweEU5LAogCi0weDM1LCAweDAwLAotMHgzRCwgMHgwMCwKLTB4MDAsIDB4RTAsCi0weDJELCAweDczLAorCTB4MzUsIDB4MDAsCisJMHgzRCwgMHgwMCwKKwkweDAwLCAweEUwLAorCTB4MkQsIDB4NzMsCiAKLTB4MzMsIDB4NzIsCi0weDBDLCAweEUzLAotMHg4RCwgMHgyRiwgMHgxRSwgMHhCRCwKKwkweDMzLCAweDcyLAorCTB4MEMsIDB4RTMsCisJMHg4RCwgMHgyRiwgMHgxRSwgMHhCRCwKIAotMHg0MywgMHg3NSwgMHhGOCwgMHhFQywKLTB4MzUsIDB4MjAsCi0weDNELCAweDIwLAorCTB4NDMsIDB4NzUsIDB4RjgsIDB4RUMsCisJMHgzNSwgMHgyMCwKKwkweDNELCAweDIwLAogCi0weDQzLCAweDQzLCAweDJELCAweERGLAotMHg1MywgMHg1MywgMHgyRCwgMHhERiwKKwkweDQzLCAweDQzLCAweDJELCAweERGLAorCTB4NTMsIDB4NTMsIDB4MkQsIDB4REYsCiAKLTB4QUUsIDB4MUUsIDB4MEUsIDB4QkQsCi0weDU4LCAweEUzLAotMHgzMywgMHg2NiwKKwkweEFFLCAweDFFLCAweDBFLCAweEJELAorCTB4NTgsIDB4RTMsCisJMHgzMywgMHg2NiwKIAotMHg0OCwgMHgzNSwgMHg0OCwgMHhCRiwKLTB4NTgsIDB4MzUsIDB4NTgsIDB4QkYsCisJMHg0OCwgMHgzNSwgMHg0OCwgMHhCRiwKKwkweDU4LCAweDM1LCAweDU4LCAweEJGLAogCi0weDY4LCAweDM1LCAweDY4LCAweEJGLAotMHg0OSwgMHgzRCwgMHg0OSwgMHhCRiwKKwkweDY4LCAweDM1LCAweDY4LCAweEJGLAorCTB4NDksIDB4M0QsIDB4NDksIDB4QkYsCiAKLTB4NTksIDB4M0QsIDB4NTksIDB4QkYsCi0weDY5LCAweDNELCAweDY5LCAweEJGLAorCTB4NTksIDB4M0QsIDB4NTksIDB4QkYsCisJMHg2OSwgMHgzRCwgMHg2OSwgMHhCRiwKIAotMHg2MywgMHg2MywgMHgyRCwgMHhERiwKLTB4NEQsIDB4N0QsIDB4RjgsIDB4RUMsCisJMHg2MywgMHg2MywgMHgyRCwgMHhERiwKKwkweDRELCAweDdELCAweEY4LCAweEVDLAogCi0weDU5LCAweEUzLAotMHgwMCwgMHhFMCwKLTB4QjgsIDB4MzgsIDB4MzMsIDB4QkYsCisJMHg1OSwgMHhFMywKKwkweDAwLCAweEUwLAorCTB4QjgsIDB4MzgsIDB4MzMsIDB4QkYsCiAKLTB4MkQsIDB4NzMsCi0weDMwLCAweDc2LAotMHgxOCwgMHgzQSwgMHg0MSwgMHhFOSwKKwkweDJELCAweDczLAorCTB4MzAsIDB4NzYsCisJMHgxOCwgMHgzQSwgMHg0MSwgMHhFOSwKIAotMHgzRiwgMHg1MywgMHhBMCwgMHhFOCwKLTB4MDUsIDB4ODAsIDB4M0QsIDB4RUEsCisJMHgzRiwgMHg1MywgMHhBMCwgMHhFOCwKKwkweDA1LCAweDgwLCAweDNELCAweEVBLAogCi0weDM3LCAweDQzLCAweEEwLCAweEU4LAotMHgzRCwgMHg2MywgMHhBMCwgMHhFOCwKKwkweDM3LCAweDQzLCAweEEwLCAweEU4LAorCTB4M0QsIDB4NjMsIDB4QTAsIDB4RTgsCiAKLTB4NTAsIDB4NzAsIDB4RjgsIDB4RUMsCi0weDJCLCAweDUwLCAweDNDLCAweEU5LAorCTB4NTAsIDB4NzAsIDB4RjgsIDB4RUMsCisJMHgyQiwgMHg1MCwgMHgzQywgMHhFOSwKIAotMHgxRiwgMHgwRiwgMHhCQywgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgxRiwgMHgwRiwgMHhCQywgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDU5LCAweDc4LCAweEY4LCAweEVDLAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDU5LCAweDc4LCAweEY4LCAweEVDLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0weDE1LCAweEMwLCAweDIwLCAweEU5LAorCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCisJMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKIAotMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCisJMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKKwkweDE1LCAweEMwLCAweDIwLCAweEU5LAogCi0weDFFLCAweDEyLCAweDQxLCAweEU5LAotMHgxQSwgMHgyMiwgMHg0MSwgMHhFOSwKKwkweDFFLCAweDEyLCAweDQxLCAweEU5LAorCTB4MUEsIDB4MjIsIDB4NDEsIDB4RTksCiAKLTB4NDYsIDB4MzcsIDB4NDYsIDB4REYsCi0weDU2LCAweDNGLCAweDU2LCAweERGLAorCTB4NDYsIDB4MzcsIDB4NDYsIDB4REYsCisJMHg1NiwgMHgzRiwgMHg1NiwgMHhERiwKIAotMHgyQiwgMHg0MCwgMHgzRCwgMHhFOSwKLTB4NjYsIDB4M0QsIDB4NjYsIDB4REYsCisJMHgyQiwgMHg0MCwgMHgzRCwgMHhFOSwKKwkweDY2LCAweDNELCAweDY2LCAweERGLAogCi0weDFELCAweDMyLCAweDQxLCAweEU5LAotMHg2NywgMHgzRCwgMHg2NywgMHhERiwKKwkweDFELCAweDMyLCAweDQxLCAweEU5LAorCTB4NjcsIDB4M0QsIDB4NjcsIDB4REYsCiAKLTB4NDcsIDB4MzcsIDB4NDcsIDB4REYsCi0weDU3LCAweDNGLCAweDU3LCAweERGLAorCTB4NDcsIDB4MzcsIDB4NDcsIDB4REYsCisJMHg1NywgMHgzRiwgMHg1NywgMHhERiwKIAotMHgyQSwgMHg0MCwgMHgyMCwgMHhFOSwKLTB4NTksIDB4M0YsIDB4NTksIDB4REYsCisJMHgyQSwgMHg0MCwgMHgyMCwgMHhFOSwKKwkweDU5LCAweDNGLCAweDU5LCAweERGLAogCi0weDE2LCAweDMwLCAweDIwLCAweEU5LAotMHg2OSwgMHgzRCwgMHg2OSwgMHhERiwKKwkweDE2LCAweDMwLCAweDIwLCAweEU5LAorCTB4NjksIDB4M0QsIDB4NjksIDB4REYsCiAKLTB4NDgsIDB4MzcsIDB4NDgsIDB4REYsCi0weDU4LCAweDNGLCAweDU4LCAweERGLAorCTB4NDgsIDB4MzcsIDB4NDgsIDB4REYsCisJMHg1OCwgMHgzRiwgMHg1OCwgMHhERiwKIAotMHgxMiwgMHgxMiwgMHgyRCwgMHhERiwKLTB4MjIsIDB4MjIsIDB4MkQsIDB4REYsCisJMHgxMiwgMHgxMiwgMHgyRCwgMHhERiwKKwkweDIyLCAweDIyLCAweDJELCAweERGLAogCi0weDMyLCAweDMyLCAweDJELCAweERGLAotMHgzQSwgMHgzQSwgMHgyRCwgMHhERiwKKwkweDMyLCAweDMyLCAweDJELCAweERGLAorCTB4M0EsIDB4M0EsIDB4MkQsIDB4REYsCiAKLTB4NjgsIDB4M0QsIDB4NjgsIDB4REYsCi0weDQ5LCAweDM3LCAweDQ5LCAweERGLAorCTB4NjgsIDB4M0QsIDB4NjgsIDB4REYsCisJMHg0OSwgMHgzNywgMHg0OSwgMHhERiwKIAotMHgzRCwgMHhDRiwgMHg3NCwgMHhDMCwKLTB4MzcsIDB4Q0YsIDB4NzQsIDB4QzQsCisJMHgzRCwgMHhDRiwgMHg3NCwgMHhDMCwKKwkweDM3LCAweENGLCAweDc0LCAweEM0LAogCi0weDMxLCAweDUzLCAweDJGLCAweDlGLAotMHgzNCwgMHg4MCwgMHgyMCwgMHhFOSwKKwkweDMxLCAweDUzLCAweDJGLCAweDlGLAorCTB4MzQsIDB4ODAsIDB4MjAsIDB4RTksCiAKLTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0weDNDLCAweDNELCAweDIwLCAweEU5LAorCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCisJMHgzQywgMHgzRCwgMHgyMCwgMHhFOSwKIAotMHgwQSwgMHg0NCwgMHg1NCwgMHhCMCwKLTB4MDIsIDB4NDQsIDB4NjQsIDB4QjAsCisJMHgwQSwgMHg0NCwgMHg1NCwgMHhCMCwKKwkweDAyLCAweDQ0LCAweDY0LCAweEIwLAogCi0weDJBLCAweDQ0LCAweDU0LCAweEIyLAotMHgxQSwgMHg0NCwgMHg2NCwgMHhCMiwKKwkweDJBLCAweDQ0LCAweDU0LCAweEIyLAorCTB4MUEsIDB4NDQsIDB4NjQsIDB4QjIsCiAKLTB4MjUsIDB4ODAsIDB4M0EsIDB4RUEsCi0weDBBLCAweDIwLAotMHgwMiwgMHgyMCwKKwkweDI1LCAweDgwLCAweDNBLCAweEVBLAorCTB4MEEsIDB4MjAsCisJMHgwMiwgMHgyMCwKIAotMHgzRCwgMHhDRiwgMHg3NCwgMHhDMiwKLTB4MkEsIDB4MjAsCi0weDFBLCAweDIwLAorCTB4M0QsIDB4Q0YsIDB4NzQsIDB4QzIsCisJMHgyQSwgMHgyMCwKKwkweDFBLCAweDIwLAogCi0weDMwLCAweDUwLCAweDJFLCAweDlGLAotMHgzMiwgMHgzMSwgMHg1RiwgMHhFOSwKKwkweDMwLCAweDUwLCAweDJFLCAweDlGLAorCTB4MzIsIDB4MzEsIDB4NUYsIDB4RTksCiAKLTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0weDMzLCAweDM5LCAweDVGLCAweEU5LAorCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCisJMHgzMywgMHgzOSwgMHg1RiwgMHhFOSwKIAotMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDJBLCAweDQ0LCAweDU0LCAweEI0LAotMHgxQSwgMHg0NCwgMHg2NCwgMHhCNCwKKwkweDJBLCAweDQ0LCAweDU0LCAweEI0LAorCTB4MUEsIDB4NDQsIDB4NjQsIDB4QjQsCiAKLTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0weDM4LCAweDNELCAweDIwLCAweEU5LAorCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCisJMHgzOCwgMHgzRCwgMHgyMCwgMHhFOSwKIAotMHg4OCwgMHg3MywgMHg1RSwgMHhFOSwKLTB4MkEsIDB4MjAsCi0weDFBLCAweDIwLAorCTB4ODgsIDB4NzMsIDB4NUUsIDB4RTksCisJMHgyQSwgMHgyMCwKKwkweDFBLCAweDIwLAogCi0weDJBLCAweDQ2LCAweDU2LCAweEJGLAotMHgxQSwgMHg0NiwgMHg2NiwgMHhCRiwKKwkweDJBLCAweDQ2LCAweDU2LCAweEJGLAorCTB4MUEsIDB4NDYsIDB4NjYsIDB4QkYsCiAKLTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0weDNFLCAweDMwLCAweDRGLCAweEU5LAorCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCisJMHgzRSwgMHgzMCwgMHg0RiwgMHhFOSwKIAotMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLTB4M0YsIDB4MzgsIDB4NEYsIDB4RTksCisJMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKKwkweDNGLCAweDM4LCAweDRGLCAweEU5LAogCi0weDBBLCAweDQ3LCAweDU3LCAweEJGLAotMHgwMiwgMHg0NywgMHg2NywgMHhCRiwKKwkweDBBLCAweDQ3LCAweDU3LCAweEJGLAorCTB4MDIsIDB4NDcsIDB4NjcsIDB4QkYsCiAKLTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0weDNBLCAweDMxLCAweDRGLCAweEU5LAorCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCisJMHgzQSwgMHgzMSwgMHg0RiwgMHhFOSwKIAotMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLTB4M0IsIDB4MzksIDB4NEYsIDB4RTksCisJMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKKwkweDNCLCAweDM5LCAweDRGLCAweEU5LAogCi0weDJBLCAweDQzLCAweDUzLCAweEJGLAotMHgxQSwgMHg0MywgMHg2MywgMHhCRiwKKwkweDJBLCAweDQzLCAweDUzLCAweEJGLAorCTB4MUEsIDB4NDMsIDB4NjMsIDB4QkYsCiAKLTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0weDM2LCAweDMxLCAweDRGLCAweEU5LAorCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCisJMHgzNiwgMHgzMSwgMHg0RiwgMHhFOSwKIAotMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLTB4MzcsIDB4MzksIDB4NEYsIDB4RTksCisJMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKKwkweDM3LCAweDM5LCAweDRGLCAweEU5LAogCi0weDBBLCAweDQ4LCAweDU4LCAweEJGLAotMHgwMiwgMHg0OCwgMHg2OCwgMHhCRiwKKwkweDBBLCAweDQ4LCAweDU4LCAweEJGLAorCTB4MDIsIDB4NDgsIDB4NjgsIDB4QkYsCiAKLTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0weDgwLCAweDMxLCAweDU3LCAweEU5LAorCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCisJMHg4MCwgMHgzMSwgMHg1NywgMHhFOSwKIAotMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLTB4ODEsIDB4MzksIDB4NTcsIDB4RTksCisJMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKKwkweDgxLCAweDM5LCAweDU3LCAweEU5LAogCi0weDJBLCAweDQ5LCAweDU5LCAweEJGLAotMHgxQSwgMHg0OSwgMHg2OSwgMHhCRiwKKwkweDJBLCAweDQ5LCAweDU5LCAweEJGLAorCTB4MUEsIDB4NDksIDB4NjksIDB4QkYsCiAKLTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0weDgyLCAweDMwLCAweDU3LCAweEU5LAorCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCisJMHg4MiwgMHgzMCwgMHg1NywgMHhFOSwKIAotMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLTB4ODMsIDB4MzgsIDB4NTcsIDB4RTksCisJMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKKwkweDgzLCAweDM4LCAweDU3LCAweEU5LAogCi0weDMxLCAweDUzLCAweDJGLCAweDlGLAotMHg4NCwgMHgzMSwgMHg1RSwgMHhFOSwKKwkweDMxLCAweDUzLCAweDJGLCAweDlGLAorCTB4ODQsIDB4MzEsIDB4NUUsIDB4RTksCiAKLTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0weDg1LCAweDM5LCAweDVFLCAweEU5LAorCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCisJMHg4NSwgMHgzOSwgMHg1RSwgMHhFOSwKIAotMHg4NiwgMHg3NiwgMHg1NywgMHhFOSwKLTB4OEEsIDB4MzYsIDB4MjAsIDB4RTksCisJMHg4NiwgMHg3NiwgMHg1NywgMHhFOSwKKwkweDhBLCAweDM2LCAweDIwLCAweEU5LAogCi0weDg3LCAweDc3LCAweDU3LCAweEU5LAotMHg4QiwgMHgzRSwgMHhCRiwgMHhFQSwKKwkweDg3LCAweDc3LCAweDU3LCAweEU5LAorCTB4OEIsIDB4M0UsIDB4QkYsIDB4RUEsCiAKLTB4ODAsIDB4MzAsIDB4NTcsIDB4RTksCi0weDgxLCAweDM4LCAweDU3LCAweEU5LAorCTB4ODAsIDB4MzAsIDB4NTcsIDB4RTksCisJMHg4MSwgMHgzOCwgMHg1NywgMHhFOSwKIAotMHg4MiwgMHgzMSwgMHg1NywgMHhFOSwKLTB4ODYsIDB4NzgsIDB4NTcsIDB4RTksCisJMHg4MiwgMHgzMSwgMHg1NywgMHhFOSwKKwkweDg2LCAweDc4LCAweDU3LCAweEU5LAogCi0weDgzLCAweDM5LCAweDU3LCAweEU5LAotMHg4NywgMHg3OSwgMHg1NywgMHhFOSwKKwkweDgzLCAweDM5LCAweDU3LCAweEU5LAorCTB4ODcsIDB4NzksIDB4NTcsIDB4RTksCiAKLTB4MzAsIDB4MUYsIDB4NUYsIDB4RTksCi0weDhBLCAweDM0LCAweDIwLCAweEU5LAorCTB4MzAsIDB4MUYsIDB4NUYsIDB4RTksCisJMHg4QSwgMHgzNCwgMHgyMCwgMHhFOSwKIAotMHg4QiwgMHgzQywgMHgyMCwgMHhFOSwKLTB4MzcsIDB4NTAsIDB4NjAsIDB4QkQsCisJMHg4QiwgMHgzQywgMHgyMCwgMHhFOSwKKwkweDM3LCAweDUwLCAweDYwLCAweEJELAogCi0weDU3LCAweDBELCAweDIwLCAweEU5LAotMHgzNSwgMHg1MSwgMHg2MSwgMHhCRCwKKwkweDU3LCAweDBELCAweDIwLCAweEU5LAorCTB4MzUsIDB4NTEsIDB4NjEsIDB4QkQsCiAKLTB4MkIsIDB4NTAsIDB4MjAsIDB4RTksCi0weDFELCAweDM3LCAweEUxLCAweEVBLAorCTB4MkIsIDB4NTAsIDB4MjAsIDB4RTksCisJMHgxRCwgMHgzNywgMHhFMSwgMHhFQSwKIAotMHgxRSwgMHgzNSwgMHhFMSwgMHhFQSwKLTB4MDAsIDB4RTAsCi0weDBFLCAweDc3LAorCTB4MUUsIDB4MzUsIDB4RTEsIDB4RUEsCisJMHgwMCwgMHhFMCwKKwkweDBFLCAweDc3LAogCi0weDI0LCAweDUxLCAweDIwLCAweEU5LAotMHg5RiwgMHhGRiwgMHgyMCwgMHhFQSwKKwkweDI0LCAweDUxLCAweDIwLCAweEU5LAorCTB4OUYsIDB4RkYsIDB4MjAsIDB4RUEsCiAKLTB4MTYsIDB4MEUsIDB4MjAsIDB4RTksCi0weDU3LCAweDJFLCAweEJGLCAweEVBLAorCTB4MTYsIDB4MEUsIDB4MjAsIDB4RTksCisJMHg1NywgMHgyRSwgMHhCRiwgMHhFQSwKIAotMHgwQiwgMHg0NiwgMHhBMCwgMHhFOCwKLTB4MUIsIDB4NTYsIDB4QTAsIDB4RTgsCisJMHgwQiwgMHg0NiwgMHhBMCwgMHhFOCwKKwkweDFCLCAweDU2LCAweEEwLCAweEU4LAogCi0weDJCLCAweDY2LCAweEEwLCAweEU4LAotMHgwQywgMHg0NywgMHhBMCwgMHhFOCwKKwkweDJCLCAweDY2LCAweEEwLCAweEU4LAorCTB4MEMsIDB4NDcsIDB4QTAsIDB4RTgsCiAKLTB4MUMsIDB4NTcsIDB4QTAsIDB4RTgsCi0weDJDLCAweDY3LCAweEEwLCAweEU4LAorCTB4MUMsIDB4NTcsIDB4QTAsIDB4RTgsCisJMHgyQywgMHg2NywgMHhBMCwgMHhFOCwKIAotMHgwQiwgMHgwMCwKLTB4MUIsIDB4MDAsCi0weDJCLCAweDAwLAotMHgwMCwgMHhFMCwKKwkweDBCLCAweDAwLAorCTB4MUIsIDB4MDAsCisJMHgyQiwgMHgwMCwKKwkweDAwLCAweEUwLAogCi0weDBDLCAweDAwLAotMHgxQywgMHgwMCwKLTB4MkMsIDB4MDAsCi0weDAwLCAweEUwLAorCTB4MEMsIDB4MDAsCisJMHgxQywgMHgwMCwKKwkweDJDLCAweDAwLAorCTB4MDAsIDB4RTAsCiAKLTB4MEIsIDB4NjUsCi0weDFCLCAweDY1LAotMHgyQiwgMHg2NSwKLTB4MDAsIDB4RTAsCisJMHgwQiwgMHg2NSwKKwkweDFCLCAweDY1LAorCTB4MkIsIDB4NjUsCisJMHgwMCwgMHhFMCwKIAotMHgwQywgMHg2NSwKLTB4MUMsIDB4NjUsCi0weDJDLCAweDY1LAotMHgwMCwgMHhFMCwKKwkweDBDLCAweDY1LAorCTB4MUMsIDB4NjUsCisJMHgyQywgMHg2NSwKKwkweDAwLCAweEUwLAogCi0weDBCLCAweDFCLCAweDYwLCAweEVDLAotMHgzNiwgMHhENywgMHgzNiwgMHhBRCwKKwkweDBCLCAweDFCLCAweDYwLCAweEVDLAorCTB4MzYsIDB4RDcsIDB4MzYsIDB4QUQsCiAKLTB4MkIsIDB4ODAsIDB4NjAsIDB4RUMsCi0weDBDLCAweDFDLCAweDYwLCAweEVDLAorCTB4MkIsIDB4ODAsIDB4NjAsIDB4RUMsCisJMHgwQywgMHgxQywgMHg2MCwgMHhFQywKIAotMHgzRSwgMHhENywgMHgzRSwgMHhBRCwKLTB4MkMsIDB4ODAsIDB4NjAsIDB4RUMsCisJMHgzRSwgMHhENywgMHgzRSwgMHhBRCwKKwkweDJDLCAweDgwLCAweDYwLCAweEVDLAogCi0weDBCLCAweDJCLCAweERFLCAweEU4LAotMHgxQiwgMHg4MCwgMHhERSwgMHhFOCwKKwkweDBCLCAweDJCLCAweERFLCAweEU4LAorCTB4MUIsIDB4ODAsIDB4REUsIDB4RTgsCiAKLTB4MzYsIDB4ODAsIDB4MzYsIDB4QkQsCi0weDNFLCAweDgwLCAweDNFLCAweEJELAorCTB4MzYsIDB4ODAsIDB4MzYsIDB4QkQsCisJMHgzRSwgMHg4MCwgMHgzRSwgMHhCRCwKIAotMHgzMywgMHhENywgMHgwQiwgMHhCRCwKLTB4M0IsIDB4RDcsIDB4MUIsIDB4QkQsCisJMHgzMywgMHhENywgMHgwQiwgMHhCRCwKKwkweDNCLCAweEQ3LCAweDFCLCAweEJELAogCi0weDQ2LCAweDgwLCAweDQ2LCAweENGLAotMHg1NywgMHg4MCwgMHg1NywgMHhDRiwKKwkweDQ2LCAweDgwLCAweDQ2LCAweENGLAorCTB4NTcsIDB4ODAsIDB4NTcsIDB4Q0YsCiAKLTB4NjYsIDB4MzMsIDB4NjYsIDB4Q0YsCi0weDQ3LCAweDNCLCAweDQ3LCAweENGLAorCTB4NjYsIDB4MzMsIDB4NjYsIDB4Q0YsCisJMHg0NywgMHgzQiwgMHg0NywgMHhDRiwKIAotMHg1NiwgMHgzMywgMHg1NiwgMHhDRiwKLTB4NjcsIDB4M0IsIDB4NjcsIDB4Q0YsCisJMHg1NiwgMHgzMywgMHg1NiwgMHhDRiwKKwkweDY3LCAweDNCLCAweDY3LCAweENGLAogCi0weDBCLCAweDQ4LCAweEEwLCAweEU4LAotMHgxQiwgMHg1OCwgMHhBMCwgMHhFOCwKKwkweDBCLCAweDQ4LCAweEEwLCAweEU4LAorCTB4MUIsIDB4NTgsIDB4QTAsIDB4RTgsCiAKLTB4MkIsIDB4NjgsIDB4QTAsIDB4RTgsCi0weDBDLCAweDQ5LCAweEEwLCAweEU4LAorCTB4MkIsIDB4NjgsIDB4QTAsIDB4RTgsCisJMHgwQywgMHg0OSwgMHhBMCwgMHhFOCwKIAotMHgxQywgMHg1OSwgMHhBMCwgMHhFOCwKLTB4MkMsIDB4NjksIDB4QTAsIDB4RTgsCisJMHgxQywgMHg1OSwgMHhBMCwgMHhFOCwKKwkweDJDLCAweDY5LCAweEEwLCAweEU4LAogCi0weDBCLCAweDAwLAotMHgxQiwgMHgwMCwKLTB4MkIsIDB4MDAsCi0weDAwLCAweEUwLAorCTB4MEIsIDB4MDAsCisJMHgxQiwgMHgwMCwKKwkweDJCLCAweDAwLAorCTB4MDAsIDB4RTAsCiAKLTB4MEMsIDB4MDAsCi0weDFDLCAweDAwLAotMHgyQywgMHgwMCwKLTB4MDAsIDB4RTAsCisJMHgwQywgMHgwMCwKKwkweDFDLCAweDAwLAorCTB4MkMsIDB4MDAsCisJMHgwMCwgMHhFMCwKIAotMHgwQiwgMHg2NSwKLTB4MUIsIDB4NjUsCi0weDJCLCAweDY1LAotMHgwMCwgMHhFMCwKKwkweDBCLCAweDY1LAorCTB4MUIsIDB4NjUsCisJMHgyQiwgMHg2NSwKKwkweDAwLCAweEUwLAogCi0weDBDLCAweDY1LAotMHgxQywgMHg2NSwKLTB4MkMsIDB4NjUsCi0weDAwLCAweEUwLAorCTB4MEMsIDB4NjUsCisJMHgxQywgMHg2NSwKKwkweDJDLCAweDY1LAorCTB4MDAsIDB4RTAsCiAKLTB4MEIsIDB4MUIsIDB4NjAsIDB4RUMsCi0weDM0LCAweEQ3LCAweDM0LCAweEFELAorCTB4MEIsIDB4MUIsIDB4NjAsIDB4RUMsCisJMHgzNCwgMHhENywgMHgzNCwgMHhBRCwKIAotMHgyQiwgMHg4MCwgMHg2MCwgMHhFQywKLTB4MEMsIDB4MUMsIDB4NjAsIDB4RUMsCisJMHgyQiwgMHg4MCwgMHg2MCwgMHhFQywKKwkweDBDLCAweDFDLCAweDYwLCAweEVDLAogCi0weDNDLCAweEQ3LCAweDNDLCAweEFELAotMHgyQywgMHg4MCwgMHg2MCwgMHhFQywKKwkweDNDLCAweEQ3LCAweDNDLCAweEFELAorCTB4MkMsIDB4ODAsIDB4NjAsIDB4RUMsCiAKLTB4MEIsIDB4MkIsIDB4REUsIDB4RTgsCi0weDFCLCAweDgwLCAweERFLCAweEU4LAorCTB4MEIsIDB4MkIsIDB4REUsIDB4RTgsCisJMHgxQiwgMHg4MCwgMHhERSwgMHhFOCwKIAotMHgzNCwgMHg4MCwgMHgzNCwgMHhCRCwKLTB4M0MsIDB4ODAsIDB4M0MsIDB4QkQsCisJMHgzNCwgMHg4MCwgMHgzNCwgMHhCRCwKKwkweDNDLCAweDgwLCAweDNDLCAweEJELAogCi0weDMzLCAweEQ3LCAweDBCLCAweEJELAotMHgzQiwgMHhENywgMHgxQiwgMHhCRCwKKwkweDMzLCAweEQ3LCAweDBCLCAweEJELAorCTB4M0IsIDB4RDcsIDB4MUIsIDB4QkQsCiAKLTB4NDgsIDB4ODAsIDB4NDgsIDB4Q0YsCi0weDU5LCAweDgwLCAweDU5LCAweENGLAorCTB4NDgsIDB4ODAsIDB4NDgsIDB4Q0YsCisJMHg1OSwgMHg4MCwgMHg1OSwgMHhDRiwKIAotMHg2OCwgMHgzMywgMHg2OCwgMHhDRiwKLTB4NDksIDB4M0IsIDB4NDksIDB4Q0YsCisJMHg2OCwgMHgzMywgMHg2OCwgMHhDRiwKKwkweDQ5LCAweDNCLCAweDQ5LCAweENGLAogCi0weEJFLCAweEZGLCAweDIwLCAweEVBLAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweEJFLCAweEZGLCAweDIwLCAweEVBLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4NTgsIDB4MzMsIDB4NTgsIDB4Q0YsCi0weDY5LCAweDNCLCAweDY5LCAweENGLAorCTB4NTgsIDB4MzMsIDB4NTgsIDB4Q0YsCisJMHg2OSwgMHgzQiwgMHg2OSwgMHhDRiwKIAotMHg3RCwgMHhGRiwgMHgyMCwgMHhFQSwKLTB4NTcsIDB4QzAsIDB4QkYsIDB4RUEsCisJMHg3RCwgMHhGRiwgMHgyMCwgMHhFQSwKKwkweDU3LCAweEMwLCAweEJGLCAweEVBLAogCi0weDAwLCAweDgwLCAweEEwLCAweEU5LAotMHgwMCwgMHgwMCwgMHhEOCwgMHhFQywKKwkweDAwLCAweDgwLCAweEEwLCAweEU5LAorCTB4MDAsIDB4MDAsIDB4RDgsIDB4RUMsCiAKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHdhcnBfZzQwMF90Mmd6YVtdID0gewogCi0weDAwLCAweDhBLCAweDk4LCAweEU5LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDhBLCAweDk4LCAweEU5LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MDAsIDB4ODAsIDB4QTAsIDB4RTksCi0weDAwLCAweDAwLCAweEQ4LCAweEVDLAorCTB4MDAsIDB4ODAsIDB4QTAsIDB4RTksCisJMHgwMCwgMHgwMCwgMHhEOCwgMHhFQywKIAotMHhGRiwgMHg4MCwgMHhDMCwgMHhFOSwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHhGRiwgMHg4MCwgMHhDMCwgMHhFOSwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDBBLCAweDQwLCAweDUwLCAweEJGLAotMHgyQSwgMHg0MCwgMHg2MCwgMHhCRiwKKwkweDBBLCAweDQwLCAweDUwLCAweEJGLAorCTB4MkEsIDB4NDAsIDB4NjAsIDB4QkYsCiAKLTB4MzIsIDB4NDEsIDB4NTEsIDB4QkYsCi0weDNBLCAweDQxLCAweDYxLCAweEJGLAorCTB4MzIsIDB4NDEsIDB4NTEsIDB4QkYsCisJMHgzQSwgMHg0MSwgMHg2MSwgMHhCRiwKIAotMHhDMywgMHg2QiwKLTB4RDMsIDB4NkIsCi0weDAwLCAweDhBLCAweDk4LCAweEU5LAorCTB4QzMsIDB4NkIsCisJMHhEMywgMHg2QiwKKwkweDAwLCAweDhBLCAweDk4LCAweEU5LAogCi0weDczLCAweDdCLCAweEM4LCAweEVDLAotMHg5NiwgMHhFMiwKLTB4NDEsIDB4MDQsCisJMHg3MywgMHg3QiwgMHhDOCwgMHhFQywKKwkweDk2LCAweEUyLAorCTB4NDEsIDB4MDQsCiAKLTB4N0IsIDB4NDMsIDB4QTAsIDB4RTgsCi0weDczLCAweDUzLCAweEEwLCAweEU4LAorCTB4N0IsIDB4NDMsIDB4QTAsIDB4RTgsCisJMHg3MywgMHg1MywgMHhBMCwgMHhFOCwKIAotMHhBRCwgMHhFRSwgMHgyMywgMHg5RiwKLTB4MDAsIDB4RTAsCi0weDUxLCAweDA0LAorCTB4QUQsIDB4RUUsIDB4MjMsIDB4OUYsCisJMHgwMCwgMHhFMCwKKwkweDUxLCAweDA0LAogCi0weDkwLCAweEUyLAotMHg2MSwgMHgwNCwKLTB4MzEsIDB4NDYsIDB4QjEsIDB4RTgsCisJMHg5MCwgMHhFMiwKKwkweDYxLCAweDA0LAorCTB4MzEsIDB4NDYsIDB4QjEsIDB4RTgsCiAKLTB4NTEsIDB4NDEsIDB4RTAsIDB4RUMsCi0weDM5LCAweDY3LCAweEIxLCAweEU4LAorCTB4NTEsIDB4NDEsIDB4RTAsIDB4RUMsCisJMHgzOSwgMHg2NywgMHhCMSwgMHhFOCwKIAotMHgwMCwgMHgwNCwKLTB4NDYsIDB4RTIsCi0weDczLCAweDYzLCAweEEwLCAweEU4LAorCTB4MDAsIDB4MDQsCisJMHg0NiwgMHhFMiwKKwkweDczLCAweDYzLCAweEEwLCAweEU4LAogCi0weDYxLCAweDQxLCAweEUwLCAweEVDLAotMHgzMSwgMHgwMCwKLTB4MzksIDB4MDAsCisJMHg2MSwgMHg0MSwgMHhFMCwgMHhFQywKKwkweDMxLCAweDAwLAorCTB4MzksIDB4MDAsCiAKLTB4N0MsIDB4ODAsIDB4MTUsIDB4RUEsCi0weDEwLCAweDA0LAotMHgyMCwgMHgwNCwKKwkweDdDLCAweDgwLCAweDE1LCAweEVBLAorCTB4MTAsIDB4MDQsCisJMHgyMCwgMHgwNCwKIAotMHg2MSwgMHg1MSwgMHhFMCwgMHhFQywKLTB4MkYsIDB4NDEsIDB4NjAsIDB4RUEsCisJMHg2MSwgMHg1MSwgMHhFMCwgMHhFQywKKwkweDJGLCAweDQxLCAweDYwLCAweEVBLAogCi0weDMxLCAweDIwLAotMHgzOSwgMHgyMCwKLTB4MUYsIDB4NDIsIDB4QTAsIDB4RTgsCisJMHgzMSwgMHgyMCwKKwkweDM5LCAweDIwLAorCTB4MUYsIDB4NDIsIDB4QTAsIDB4RTgsCiAKLTB4MkEsIDB4NDIsIDB4NTIsIDB4QkYsCi0weDBGLCAweDUyLCAweEEwLCAweEU4LAorCTB4MkEsIDB4NDIsIDB4NTIsIDB4QkYsCisJMHgwRiwgMHg1MiwgMHhBMCwgMHhFOCwKIAotMHgxQSwgMHg0MiwgMHg2MiwgMHhCRiwKLTB4MUUsIDB4NTEsIDB4NjAsIDB4RUEsCisJMHgxQSwgMHg0MiwgMHg2MiwgMHhCRiwKKwkweDFFLCAweDUxLCAweDYwLCAweEVBLAogCi0weDczLCAweDdCLCAweEM4LCAweEVDLAotMHgwRSwgMHg2MSwgMHg2MCwgMHhFQSwKKwkweDczLCAweDdCLCAweEM4LCAweEVDLAorCTB4MEUsIDB4NjEsIDB4NjAsIDB4RUEsCiAKLTB4MzIsIDB4NDAsIDB4NTAsIDB4QkQsCi0weDIyLCAweDQwLCAweDYwLCAweEJELAorCTB4MzIsIDB4NDAsIDB4NTAsIDB4QkQsCisJMHgyMiwgMHg0MCwgMHg2MCwgMHhCRCwKIAotMHgxMiwgMHg0MSwgMHg1MSwgMHhCRCwKLTB4M0EsIDB4NDEsIDB4NjEsIDB4QkQsCisJMHgxMiwgMHg0MSwgMHg1MSwgMHhCRCwKKwkweDNBLCAweDQxLCAweDYxLCAweEJELAogCi0weEJGLCAweDJGLCAweDBFLCAweEJELAotMHg5NywgMHhFMiwKLTB4N0IsIDB4NzIsCisJMHhCRiwgMHgyRiwgMHgwRSwgMHhCRCwKKwkweDk3LCAweEUyLAorCTB4N0IsIDB4NzIsCiAKLTB4MzIsIDB4MjAsCi0weDIyLCAweDIwLAotMHgxMiwgMHgyMCwKLTB4M0EsIDB4MjAsCisJMHgzMiwgMHgyMCwKKwkweDIyLCAweDIwLAorCTB4MTIsIDB4MjAsCisJMHgzQSwgMHgyMCwKIAotMHgzNSwgMHg0OCwgMHhCMSwgMHhFOCwKLTB4M0QsIDB4NTksIDB4QjEsIDB4RTgsCisJMHgzNSwgMHg0OCwgMHhCMSwgMHhFOCwKKwkweDNELCAweDU5LCAweEIxLCAweEU4LAogCi0weDQ2LCAweDMxLCAweDQ2LCAweEJGLAotMHg1NiwgMHgzMSwgMHg1NiwgMHhCRiwKKwkweDQ2LCAweDMxLCAweDQ2LCAweEJGLAorCTB4NTYsIDB4MzEsIDB4NTYsIDB4QkYsCiAKLTB4QjMsIDB4RTIsIDB4MkQsIDB4OUYsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4QjMsIDB4RTIsIDB4MkQsIDB4OUYsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHg2NiwgMHgzMSwgMHg2NiwgMHhCRiwKLTB4NDcsIDB4MzksIDB4NDcsIDB4QkYsCisJMHg2NiwgMHgzMSwgMHg2NiwgMHhCRiwKKwkweDQ3LCAweDM5LCAweDQ3LCAweEJGLAogCi0weDU3LCAweDM5LCAweDU3LCAweEJGLAotMHg2NywgMHgzOSwgMHg2NywgMHhCRiwKKwkweDU3LCAweDM5LCAweDU3LCAweEJGLAorCTB4NjcsIDB4MzksIDB4NjcsIDB4QkYsCiAKLTB4NkQsIDB4ODAsIDB4MDcsIDB4RUEsCi0weDI0LCAweDQxLCAweDIwLCAweEU5LAorCTB4NkQsIDB4ODAsIDB4MDcsIDB4RUEsCisJMHgyNCwgMHg0MSwgMHgyMCwgMHhFOSwKIAotMHgzNSwgMHgwMCwKLTB4M0QsIDB4MDAsCi0weDAwLCAweEUwLAotMHgyRCwgMHg3MywKKwkweDM1LCAweDAwLAorCTB4M0QsIDB4MDAsCisJMHgwMCwgMHhFMCwKKwkweDJELCAweDczLAogCi0weDMzLCAweDcyLAotMHgwQywgMHhFMywKLTB4OEQsIDB4MkYsIDB4MUUsIDB4QkQsCisJMHgzMywgMHg3MiwKKwkweDBDLCAweEUzLAorCTB4OEQsIDB4MkYsIDB4MUUsIDB4QkQsCiAKLTB4NDMsIDB4NzUsIDB4RjgsIDB4RUMsCi0weDM1LCAweDIwLAotMHgzRCwgMHgyMCwKKwkweDQzLCAweDc1LCAweEY4LCAweEVDLAorCTB4MzUsIDB4MjAsCisJMHgzRCwgMHgyMCwKIAotMHg0MywgMHg0MywgMHgyRCwgMHhERiwKLTB4NTMsIDB4NTMsIDB4MkQsIDB4REYsCisJMHg0MywgMHg0MywgMHgyRCwgMHhERiwKKwkweDUzLCAweDUzLCAweDJELCAweERGLAogCi0weEFFLCAweDFFLCAweDBFLCAweEJELAotMHg1OCwgMHhFMywKLTB4MzMsIDB4NjYsCisJMHhBRSwgMHgxRSwgMHgwRSwgMHhCRCwKKwkweDU4LCAweEUzLAorCTB4MzMsIDB4NjYsCiAKLTB4NDgsIDB4MzUsIDB4NDgsIDB4QkYsCi0weDU4LCAweDM1LCAweDU4LCAweEJGLAorCTB4NDgsIDB4MzUsIDB4NDgsIDB4QkYsCisJMHg1OCwgMHgzNSwgMHg1OCwgMHhCRiwKIAotMHg2OCwgMHgzNSwgMHg2OCwgMHhCRiwKLTB4NDksIDB4M0QsIDB4NDksIDB4QkYsCisJMHg2OCwgMHgzNSwgMHg2OCwgMHhCRiwKKwkweDQ5LCAweDNELCAweDQ5LCAweEJGLAogCi0weDU5LCAweDNELCAweDU5LCAweEJGLAotMHg2OSwgMHgzRCwgMHg2OSwgMHhCRiwKKwkweDU5LCAweDNELCAweDU5LCAweEJGLAorCTB4NjksIDB4M0QsIDB4NjksIDB4QkYsCiAKLTB4NjMsIDB4NjMsIDB4MkQsIDB4REYsCi0weDRELCAweDdELCAweEY4LCAweEVDLAorCTB4NjMsIDB4NjMsIDB4MkQsIDB4REYsCisJMHg0RCwgMHg3RCwgMHhGOCwgMHhFQywKIAotMHg1OSwgMHhFMywKLTB4MDAsIDB4RTAsCi0weEI4LCAweDM4LCAweDMzLCAweEJGLAorCTB4NTksIDB4RTMsCisJMHgwMCwgMHhFMCwKKwkweEI4LCAweDM4LCAweDMzLCAweEJGLAogCi0weDJELCAweDczLAotMHgzMCwgMHg3NiwKLTB4MTgsIDB4M0EsIDB4NDEsIDB4RTksCisJMHgyRCwgMHg3MywKKwkweDMwLCAweDc2LAorCTB4MTgsIDB4M0EsIDB4NDEsIDB4RTksCiAKLTB4M0YsIDB4NTMsIDB4QTAsIDB4RTgsCi0weDA1LCAweDgwLCAweDNELCAweEVBLAorCTB4M0YsIDB4NTMsIDB4QTAsIDB4RTgsCisJMHgwNSwgMHg4MCwgMHgzRCwgMHhFQSwKIAotMHgzNywgMHg0MywgMHhBMCwgMHhFOCwKLTB4M0QsIDB4NjMsIDB4QTAsIDB4RTgsCisJMHgzNywgMHg0MywgMHhBMCwgMHhFOCwKKwkweDNELCAweDYzLCAweEEwLCAweEU4LAogCi0weDUwLCAweDcwLCAweEY4LCAweEVDLAotMHgyQiwgMHg1MCwgMHgzQywgMHhFOSwKKwkweDUwLCAweDcwLCAweEY4LCAweEVDLAorCTB4MkIsIDB4NTAsIDB4M0MsIDB4RTksCiAKLTB4MUYsIDB4MEYsIDB4QkMsIDB4RTgsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MUYsIDB4MEYsIDB4QkMsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHg1OSwgMHg3OCwgMHhGOCwgMHhFQywKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHg1OSwgMHg3OCwgMHhGOCwgMHhFQywKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDE1LCAweEMwLCAweDIwLCAweEU5LAotMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKKwkweDE1LCAweEMwLCAweDIwLCAweEU5LAorCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCiAKLTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0weDE1LCAweEMwLCAweDIwLCAweEU5LAorCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCisJMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKIAotMHgxRSwgMHgxMiwgMHg0MSwgMHhFOSwKLTB4MUEsIDB4MjIsIDB4NDEsIDB4RTksCisJMHgxRSwgMHgxMiwgMHg0MSwgMHhFOSwKKwkweDFBLCAweDIyLCAweDQxLCAweEU5LAogCi0weDQ2LCAweDM3LCAweDQ2LCAweERGLAotMHg1NiwgMHgzRiwgMHg1NiwgMHhERiwKKwkweDQ2LCAweDM3LCAweDQ2LCAweERGLAorCTB4NTYsIDB4M0YsIDB4NTYsIDB4REYsCiAKLTB4MkIsIDB4NDAsIDB4M0QsIDB4RTksCi0weDY2LCAweDNELCAweDY2LCAweERGLAorCTB4MkIsIDB4NDAsIDB4M0QsIDB4RTksCisJMHg2NiwgMHgzRCwgMHg2NiwgMHhERiwKIAotMHgxRCwgMHgzMiwgMHg0MSwgMHhFOSwKLTB4NjcsIDB4M0QsIDB4NjcsIDB4REYsCisJMHgxRCwgMHgzMiwgMHg0MSwgMHhFOSwKKwkweDY3LCAweDNELCAweDY3LCAweERGLAogCi0weDQ3LCAweDM3LCAweDQ3LCAweERGLAotMHg1NywgMHgzRiwgMHg1NywgMHhERiwKKwkweDQ3LCAweDM3LCAweDQ3LCAweERGLAorCTB4NTcsIDB4M0YsIDB4NTcsIDB4REYsCiAKLTB4MkEsIDB4NDAsIDB4MjAsIDB4RTksCi0weDU5LCAweDNGLCAweDU5LCAweERGLAorCTB4MkEsIDB4NDAsIDB4MjAsIDB4RTksCisJMHg1OSwgMHgzRiwgMHg1OSwgMHhERiwKIAotMHgxNiwgMHgzMCwgMHgyMCwgMHhFOSwKLTB4NjksIDB4M0QsIDB4NjksIDB4REYsCisJMHgxNiwgMHgzMCwgMHgyMCwgMHhFOSwKKwkweDY5LCAweDNELCAweDY5LCAweERGLAogCi0weDQ4LCAweDM3LCAweDQ4LCAweERGLAotMHg1OCwgMHgzRiwgMHg1OCwgMHhERiwKKwkweDQ4LCAweDM3LCAweDQ4LCAweERGLAorCTB4NTgsIDB4M0YsIDB4NTgsIDB4REYsCiAKLTB4MTIsIDB4MTIsIDB4MkQsIDB4REYsCi0weDIyLCAweDIyLCAweDJELCAweERGLAorCTB4MTIsIDB4MTIsIDB4MkQsIDB4REYsCisJMHgyMiwgMHgyMiwgMHgyRCwgMHhERiwKIAotMHgzMiwgMHgzMiwgMHgyRCwgMHhERiwKLTB4M0EsIDB4M0EsIDB4MkQsIDB4REYsCisJMHgzMiwgMHgzMiwgMHgyRCwgMHhERiwKKwkweDNBLCAweDNBLCAweDJELCAweERGLAogCi0weDY4LCAweDNELCAweDY4LCAweERGLAotMHg0OSwgMHgzNywgMHg0OSwgMHhERiwKKwkweDY4LCAweDNELCAweDY4LCAweERGLAorCTB4NDksIDB4MzcsIDB4NDksIDB4REYsCiAKLTB4M0QsIDB4Q0YsIDB4NzQsIDB4QzAsCi0weDM3LCAweENGLCAweDc0LCAweEM0LAorCTB4M0QsIDB4Q0YsIDB4NzQsIDB4QzAsCisJMHgzNywgMHhDRiwgMHg3NCwgMHhDNCwKIAotMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLTB4MzQsIDB4ODAsIDB4MjAsIDB4RTksCisJMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKKwkweDM0LCAweDgwLCAweDIwLCAweEU5LAogCi0weDM5LCAweEU1LCAweDJDLCAweDlGLAotMHgzQywgMHgzRCwgMHgyMCwgMHhFOSwKKwkweDM5LCAweEU1LCAweDJDLCAweDlGLAorCTB4M0MsIDB4M0QsIDB4MjAsIDB4RTksCiAKLTB4MEEsIDB4NDQsIDB4NTQsIDB4QjAsCi0weDAyLCAweDQ0LCAweDY0LCAweEIwLAorCTB4MEEsIDB4NDQsIDB4NTQsIDB4QjAsCisJMHgwMiwgMHg0NCwgMHg2NCwgMHhCMCwKIAotMHgyQSwgMHg0NCwgMHg1NCwgMHhCMiwKLTB4MUEsIDB4NDQsIDB4NjQsIDB4QjIsCisJMHgyQSwgMHg0NCwgMHg1NCwgMHhCMiwKKwkweDFBLCAweDQ0LCAweDY0LCAweEIyLAogCi0weDI5LCAweDgwLCAweDNBLCAweEVBLAotMHgwQSwgMHgyMCwKLTB4MDIsIDB4MjAsCisJMHgyOSwgMHg4MCwgMHgzQSwgMHhFQSwKKwkweDBBLCAweDIwLAorCTB4MDIsIDB4MjAsCiAKLTB4MEYsIDB4Q0YsIDB4NzQsIDB4QzYsCi0weDNELCAweENGLCAweDc0LCAweEMyLAorCTB4MEYsIDB4Q0YsIDB4NzQsIDB4QzYsCisJMHgzRCwgMHhDRiwgMHg3NCwgMHhDMiwKIAotMHg4OCwgMHg3MywgMHg1RSwgMHhFOSwKLTB4MkEsIDB4MjAsCi0weDFBLCAweDIwLAorCTB4ODgsIDB4NzMsIDB4NUUsIDB4RTksCisJMHgyQSwgMHgyMCwKKwkweDFBLCAweDIwLAogCi0weDMwLCAweDUwLCAweDJFLCAweDlGLAotMHgzMiwgMHgzMSwgMHg1RiwgMHhFOSwKKwkweDMwLCAweDUwLCAweDJFLCAweDlGLAorCTB4MzIsIDB4MzEsIDB4NUYsIDB4RTksCiAKLTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0weDMzLCAweDM5LCAweDVGLCAweEU5LAorCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCisJMHgzMywgMHgzOSwgMHg1RiwgMHhFOSwKIAotMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLTB4OUMsIDB4MEYsIDB4MjAsIDB4RTksCisJMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKKwkweDlDLCAweDBGLCAweDIwLCAweEU5LAogCi0weDBBLCAweDQ0LCAweDU0LCAweEI0LAotMHgwMiwgMHg0NCwgMHg2NCwgMHhCNCwKKwkweDBBLCAweDQ0LCAweDU0LCAweEI0LAorCTB4MDIsIDB4NDQsIDB4NjQsIDB4QjQsCiAKLTB4MkEsIDB4NDQsIDB4NTQsIDB4QjYsCi0weDFBLCAweDQ0LCAweDY0LCAweEI2LAorCTB4MkEsIDB4NDQsIDB4NTQsIDB4QjYsCisJMHgxQSwgMHg0NCwgMHg2NCwgMHhCNiwKIAotMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLTB4MzgsIDB4M0QsIDB4MjAsIDB4RTksCisJMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKKwkweDM4LCAweDNELCAweDIwLCAweEU5LAogCi0weDBBLCAweDIwLAotMHgwMiwgMHgyMCwKLTB4MkEsIDB4MjAsCi0weDFBLCAweDIwLAorCTB4MEEsIDB4MjAsCisJMHgwMiwgMHgyMCwKKwkweDJBLCAweDIwLAorCTB4MUEsIDB4MjAsCiAKLTB4MEEsIDB4NDcsIDB4NTcsIDB4QkYsCi0weDAyLCAweDQ3LCAweDY3LCAweEJGLAorCTB4MEEsIDB4NDcsIDB4NTcsIDB4QkYsCisJMHgwMiwgMHg0NywgMHg2NywgMHhCRiwKIAotMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLTB4M0UsIDB4MzAsIDB4NEYsIDB4RTksCisJMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKKwkweDNFLCAweDMwLCAweDRGLCAweEU5LAogCi0weDM4LCAweDIxLCAweDJDLCAweDlGLAotMHgzRiwgMHgzOCwgMHg0RiwgMHhFOSwKKwkweDM4LCAweDIxLCAweDJDLCAweDlGLAorCTB4M0YsIDB4MzgsIDB4NEYsIDB4RTksCiAKLTB4MkEsIDB4NDYsIDB4NTYsIDB4QkYsCi0weDFBLCAweDQ2LCAweDY2LCAweEJGLAorCTB4MkEsIDB4NDYsIDB4NTYsIDB4QkYsCisJMHgxQSwgMHg0NiwgMHg2NiwgMHhCRiwKIAotMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLTB4M0EsIDB4MzEsIDB4NEYsIDB4RTksCisJMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKKwkweDNBLCAweDMxLCAweDRGLCAweEU5LAogCi0weDM5LCAweEU1LCAweDJDLCAweDlGLAotMHgzQiwgMHgzOSwgMHg0RiwgMHhFOSwKKwkweDM5LCAweEU1LCAweDJDLCAweDlGLAorCTB4M0IsIDB4MzksIDB4NEYsIDB4RTksCiAKLTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0weDM2LCAweDMwLCAweDRGLCAweEU5LAorCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCisJMHgzNiwgMHgzMCwgMHg0RiwgMHhFOSwKIAotMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLTB4MzcsIDB4MzgsIDB4NEYsIDB4RTksCisJMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKKwkweDM3LCAweDM4LCAweDRGLCAweEU5LAogCi0weDJBLCAweDQzLCAweDUzLCAweEJGLAotMHgxQSwgMHg0MywgMHg2MywgMHhCRiwKKwkweDJBLCAweDQzLCAweDUzLCAweEJGLAorCTB4MUEsIDB4NDMsIDB4NjMsIDB4QkYsCiAKLTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0weDlELCAweDMxLCAweDRGLCAweEU5LAorCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCisJMHg5RCwgMHgzMSwgMHg0RiwgMHhFOSwKIAotMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLTB4OUUsIDB4MzksIDB4NEYsIDB4RTksCisJMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKKwkweDlFLCAweDM5LCAweDRGLCAweEU5LAogCi0weDBBLCAweDQ4LCAweDU4LCAweEJGLAotMHgwMiwgMHg0OCwgMHg2OCwgMHhCRiwKKwkweDBBLCAweDQ4LCAweDU4LCAweEJGLAorCTB4MDIsIDB4NDgsIDB4NjgsIDB4QkYsCiAKLTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0weDgwLCAweDMxLCAweDU3LCAweEU5LAorCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCisJMHg4MCwgMHgzMSwgMHg1NywgMHhFOSwKIAotMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLTB4ODEsIDB4MzksIDB4NTcsIDB4RTksCisJMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKKwkweDgxLCAweDM5LCAweDU3LCAweEU5LAogCi0weDJBLCAweDQ5LCAweDU5LCAweEJGLAotMHgxQSwgMHg0OSwgMHg2OSwgMHhCRiwKKwkweDJBLCAweDQ5LCAweDU5LCAweEJGLAorCTB4MUEsIDB4NDksIDB4NjksIDB4QkYsCiAKLTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0weDgyLCAweDMwLCAweDU3LCAweEU5LAorCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCisJMHg4MiwgMHgzMCwgMHg1NywgMHhFOSwKIAotMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLTB4ODMsIDB4MzgsIDB4NTcsIDB4RTksCisJMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKKwkweDgzLCAweDM4LCAweDU3LCAweEU5LAogCi0weDMxLCAweDUzLCAweDJGLCAweDlGLAotMHg4NCwgMHgzMSwgMHg1RSwgMHhFOSwKKwkweDMxLCAweDUzLCAweDJGLCAweDlGLAorCTB4ODQsIDB4MzEsIDB4NUUsIDB4RTksCiAKLTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0weDg1LCAweDM5LCAweDVFLCAweEU5LAorCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCisJMHg4NSwgMHgzOSwgMHg1RSwgMHhFOSwKIAotMHg4NiwgMHg3NiwgMHg1NywgMHhFOSwKLTB4OEEsIDB4MzYsIDB4MjAsIDB4RTksCisJMHg4NiwgMHg3NiwgMHg1NywgMHhFOSwKKwkweDhBLCAweDM2LCAweDIwLCAweEU5LAogCi0weDg3LCAweDc3LCAweDU3LCAweEU5LAotMHg4QiwgMHgzRSwgMHhCRiwgMHhFQSwKKwkweDg3LCAweDc3LCAweDU3LCAweEU5LAorCTB4OEIsIDB4M0UsIDB4QkYsIDB4RUEsCiAKLTB4ODAsIDB4MzAsIDB4NTcsIDB4RTksCi0weDgxLCAweDM4LCAweDU3LCAweEU5LAorCTB4ODAsIDB4MzAsIDB4NTcsIDB4RTksCisJMHg4MSwgMHgzOCwgMHg1NywgMHhFOSwKIAotMHg4MiwgMHgzMSwgMHg1NywgMHhFOSwKLTB4ODYsIDB4NzgsIDB4NTcsIDB4RTksCisJMHg4MiwgMHgzMSwgMHg1NywgMHhFOSwKKwkweDg2LCAweDc4LCAweDU3LCAweEU5LAogCi0weDgzLCAweDM5LCAweDU3LCAweEU5LAotMHg4NywgMHg3OSwgMHg1NywgMHhFOSwKKwkweDgzLCAweDM5LCAweDU3LCAweEU5LAorCTB4ODcsIDB4NzksIDB4NTcsIDB4RTksCiAKLTB4MzAsIDB4MUYsIDB4NUYsIDB4RTksCi0weDhBLCAweDM0LCAweDIwLCAweEU5LAorCTB4MzAsIDB4MUYsIDB4NUYsIDB4RTksCisJMHg4QSwgMHgzNCwgMHgyMCwgMHhFOSwKIAotMHg4QiwgMHgzQywgMHgyMCwgMHhFOSwKLTB4MzcsIDB4NTAsIDB4NjAsIDB4QkQsCisJMHg4QiwgMHgzQywgMHgyMCwgMHhFOSwKKwkweDM3LCAweDUwLCAweDYwLCAweEJELAogCi0weDU3LCAweDBELCAweDIwLCAweEU5LAotMHgzNSwgMHg1MSwgMHg2MSwgMHhCRCwKKwkweDU3LCAweDBELCAweDIwLCAweEU5LAorCTB4MzUsIDB4NTEsIDB4NjEsIDB4QkQsCiAKLTB4MkIsIDB4NTAsIDB4MjAsIDB4RTksCi0weDFELCAweDM3LCAweEUxLCAweEVBLAorCTB4MkIsIDB4NTAsIDB4MjAsIDB4RTksCisJMHgxRCwgMHgzNywgMHhFMSwgMHhFQSwKIAotMHgxRSwgMHgzNSwgMHhFMSwgMHhFQSwKLTB4MDAsIDB4RTAsCi0weDBFLCAweDc3LAorCTB4MUUsIDB4MzUsIDB4RTEsIDB4RUEsCisJMHgwMCwgMHhFMCwKKwkweDBFLCAweDc3LAogCi0weDI0LCAweDUxLCAweDIwLCAweEU5LAotMHg5QiwgMHhGRiwgMHgyMCwgMHhFQSwKKwkweDI0LCAweDUxLCAweDIwLCAweEU5LAorCTB4OUIsIDB4RkYsIDB4MjAsIDB4RUEsCiAKLTB4MTYsIDB4MEUsIDB4MjAsIDB4RTksCi0weDU3LCAweDJFLCAweEJGLCAweEVBLAorCTB4MTYsIDB4MEUsIDB4MjAsIDB4RTksCisJMHg1NywgMHgyRSwgMHhCRiwgMHhFQSwKIAotMHgwQiwgMHg0NiwgMHhBMCwgMHhFOCwKLTB4MUIsIDB4NTYsIDB4QTAsIDB4RTgsCisJMHgwQiwgMHg0NiwgMHhBMCwgMHhFOCwKKwkweDFCLCAweDU2LCAweEEwLCAweEU4LAogCi0weDJCLCAweDY2LCAweEEwLCAweEU4LAotMHgwQywgMHg0NywgMHhBMCwgMHhFOCwKKwkweDJCLCAweDY2LCAweEEwLCAweEU4LAorCTB4MEMsIDB4NDcsIDB4QTAsIDB4RTgsCiAKLTB4MUMsIDB4NTcsIDB4QTAsIDB4RTgsCi0weDJDLCAweDY3LCAweEEwLCAweEU4LAorCTB4MUMsIDB4NTcsIDB4QTAsIDB4RTgsCisJMHgyQywgMHg2NywgMHhBMCwgMHhFOCwKIAotMHgwQiwgMHgwMCwKLTB4MUIsIDB4MDAsCi0weDJCLCAweDAwLAotMHgwMCwgMHhFMCwKKwkweDBCLCAweDAwLAorCTB4MUIsIDB4MDAsCisJMHgyQiwgMHgwMCwKKwkweDAwLCAweEUwLAogCi0weDBDLCAweDAwLAotMHgxQywgMHgwMCwKLTB4MkMsIDB4MDAsCi0weDAwLCAweEUwLAorCTB4MEMsIDB4MDAsCisJMHgxQywgMHgwMCwKKwkweDJDLCAweDAwLAorCTB4MDAsIDB4RTAsCiAKLTB4MEIsIDB4NjUsCi0weDFCLCAweDY1LAotMHgyQiwgMHg2NSwKLTB4MDAsIDB4RTAsCisJMHgwQiwgMHg2NSwKKwkweDFCLCAweDY1LAorCTB4MkIsIDB4NjUsCisJMHgwMCwgMHhFMCwKIAotMHgwQywgMHg2NSwKLTB4MUMsIDB4NjUsCi0weDJDLCAweDY1LAotMHgwMCwgMHhFMCwKKwkweDBDLCAweDY1LAorCTB4MUMsIDB4NjUsCisJMHgyQywgMHg2NSwKKwkweDAwLCAweEUwLAogCi0weDBCLCAweDFCLCAweDYwLCAweEVDLAotMHgzNiwgMHhENywgMHgzNiwgMHhBRCwKKwkweDBCLCAweDFCLCAweDYwLCAweEVDLAorCTB4MzYsIDB4RDcsIDB4MzYsIDB4QUQsCiAKLTB4MkIsIDB4ODAsIDB4NjAsIDB4RUMsCi0weDBDLCAweDFDLCAweDYwLCAweEVDLAorCTB4MkIsIDB4ODAsIDB4NjAsIDB4RUMsCisJMHgwQywgMHgxQywgMHg2MCwgMHhFQywKIAotMHgzRSwgMHhENywgMHgzRSwgMHhBRCwKLTB4MkMsIDB4ODAsIDB4NjAsIDB4RUMsCisJMHgzRSwgMHhENywgMHgzRSwgMHhBRCwKKwkweDJDLCAweDgwLCAweDYwLCAweEVDLAogCi0weDBCLCAweDJCLCAweERFLCAweEU4LAotMHgxQiwgMHg4MCwgMHhERSwgMHhFOCwKKwkweDBCLCAweDJCLCAweERFLCAweEU4LAorCTB4MUIsIDB4ODAsIDB4REUsIDB4RTgsCiAKLTB4MzYsIDB4ODAsIDB4MzYsIDB4QkQsCi0weDNFLCAweDgwLCAweDNFLCAweEJELAorCTB4MzYsIDB4ODAsIDB4MzYsIDB4QkQsCisJMHgzRSwgMHg4MCwgMHgzRSwgMHhCRCwKIAotMHgzMywgMHhENywgMHgwQiwgMHhCRCwKLTB4M0IsIDB4RDcsIDB4MUIsIDB4QkQsCisJMHgzMywgMHhENywgMHgwQiwgMHhCRCwKKwkweDNCLCAweEQ3LCAweDFCLCAweEJELAogCi0weDQ2LCAweDgwLCAweDQ2LCAweENGLAotMHg1NywgMHg4MCwgMHg1NywgMHhDRiwKKwkweDQ2LCAweDgwLCAweDQ2LCAweENGLAorCTB4NTcsIDB4ODAsIDB4NTcsIDB4Q0YsCiAKLTB4NjYsIDB4MzMsIDB4NjYsIDB4Q0YsCi0weDQ3LCAweDNCLCAweDQ3LCAweENGLAorCTB4NjYsIDB4MzMsIDB4NjYsIDB4Q0YsCisJMHg0NywgMHgzQiwgMHg0NywgMHhDRiwKIAotMHg1NiwgMHgzMywgMHg1NiwgMHhDRiwKLTB4NjcsIDB4M0IsIDB4NjcsIDB4Q0YsCisJMHg1NiwgMHgzMywgMHg1NiwgMHhDRiwKKwkweDY3LCAweDNCLCAweDY3LCAweENGLAogCi0weDBCLCAweDQ4LCAweEEwLCAweEU4LAotMHgxQiwgMHg1OCwgMHhBMCwgMHhFOCwKKwkweDBCLCAweDQ4LCAweEEwLCAweEU4LAorCTB4MUIsIDB4NTgsIDB4QTAsIDB4RTgsCiAKLTB4MkIsIDB4NjgsIDB4QTAsIDB4RTgsCi0weDBDLCAweDQ5LCAweEEwLCAweEU4LAorCTB4MkIsIDB4NjgsIDB4QTAsIDB4RTgsCisJMHgwQywgMHg0OSwgMHhBMCwgMHhFOCwKIAotMHgxQywgMHg1OSwgMHhBMCwgMHhFOCwKLTB4MkMsIDB4NjksIDB4QTAsIDB4RTgsCisJMHgxQywgMHg1OSwgMHhBMCwgMHhFOCwKKwkweDJDLCAweDY5LCAweEEwLCAweEU4LAogCi0weDBCLCAweDAwLAotMHgxQiwgMHgwMCwKLTB4MkIsIDB4MDAsCi0weDAwLCAweEUwLAorCTB4MEIsIDB4MDAsCisJMHgxQiwgMHgwMCwKKwkweDJCLCAweDAwLAorCTB4MDAsIDB4RTAsCiAKLTB4MEMsIDB4MDAsCi0weDFDLCAweDAwLAotMHgyQywgMHgwMCwKLTB4MDAsIDB4RTAsCisJMHgwQywgMHgwMCwKKwkweDFDLCAweDAwLAorCTB4MkMsIDB4MDAsCisJMHgwMCwgMHhFMCwKIAotMHgwQiwgMHg2NSwKLTB4MUIsIDB4NjUsCi0weDJCLCAweDY1LAotMHgwMCwgMHhFMCwKKwkweDBCLCAweDY1LAorCTB4MUIsIDB4NjUsCisJMHgyQiwgMHg2NSwKKwkweDAwLCAweEUwLAogCi0weDBDLCAweDY1LAotMHgxQywgMHg2NSwKLTB4MkMsIDB4NjUsCi0weDAwLCAweEUwLAorCTB4MEMsIDB4NjUsCisJMHgxQywgMHg2NSwKKwkweDJDLCAweDY1LAorCTB4MDAsIDB4RTAsCiAKLTB4MEIsIDB4MUIsIDB4NjAsIDB4RUMsCi0weDM0LCAweEQ3LCAweDM0LCAweEFELAorCTB4MEIsIDB4MUIsIDB4NjAsIDB4RUMsCisJMHgzNCwgMHhENywgMHgzNCwgMHhBRCwKIAotMHgyQiwgMHg4MCwgMHg2MCwgMHhFQywKLTB4MEMsIDB4MUMsIDB4NjAsIDB4RUMsCisJMHgyQiwgMHg4MCwgMHg2MCwgMHhFQywKKwkweDBDLCAweDFDLCAweDYwLCAweEVDLAogCi0weDNDLCAweEQ3LCAweDNDLCAweEFELAotMHgyQywgMHg4MCwgMHg2MCwgMHhFQywKKwkweDNDLCAweEQ3LCAweDNDLCAweEFELAorCTB4MkMsIDB4ODAsIDB4NjAsIDB4RUMsCiAKLTB4MEIsIDB4MkIsIDB4REUsIDB4RTgsCi0weDFCLCAweDgwLCAweERFLCAweEU4LAorCTB4MEIsIDB4MkIsIDB4REUsIDB4RTgsCisJMHgxQiwgMHg4MCwgMHhERSwgMHhFOCwKIAotMHgzNCwgMHg4MCwgMHgzNCwgMHhCRCwKLTB4M0MsIDB4ODAsIDB4M0MsIDB4QkQsCisJMHgzNCwgMHg4MCwgMHgzNCwgMHhCRCwKKwkweDNDLCAweDgwLCAweDNDLCAweEJELAogCi0weDMzLCAweEQ3LCAweDBCLCAweEJELAotMHgzQiwgMHhENywgMHgxQiwgMHhCRCwKKwkweDMzLCAweEQ3LCAweDBCLCAweEJELAorCTB4M0IsIDB4RDcsIDB4MUIsIDB4QkQsCiAKLTB4NDgsIDB4ODAsIDB4NDgsIDB4Q0YsCi0weDU5LCAweDgwLCAweDU5LCAweENGLAorCTB4NDgsIDB4ODAsIDB4NDgsIDB4Q0YsCisJMHg1OSwgMHg4MCwgMHg1OSwgMHhDRiwKIAotMHg2OCwgMHgzMywgMHg2OCwgMHhDRiwKLTB4NDksIDB4M0IsIDB4NDksIDB4Q0YsCisJMHg2OCwgMHgzMywgMHg2OCwgMHhDRiwKKwkweDQ5LCAweDNCLCAweDQ5LCAweENGLAogCi0weEJBLCAweEZGLCAweDIwLCAweEVBLAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweEJBLCAweEZGLCAweDIwLCAweEVBLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4NTgsIDB4MzMsIDB4NTgsIDB4Q0YsCi0weDY5LCAweDNCLCAweDY5LCAweENGLAorCTB4NTgsIDB4MzMsIDB4NTgsIDB4Q0YsCisJMHg2OSwgMHgzQiwgMHg2OSwgMHhDRiwKIAotMHg3OSwgMHhGRiwgMHgyMCwgMHhFQSwKLTB4NTcsIDB4QzAsIDB4QkYsIDB4RUEsCisJMHg3OSwgMHhGRiwgMHgyMCwgMHhFQSwKKwkweDU3LCAweEMwLCAweEJGLCAweEVBLAogCi0weDAwLCAweDgwLCAweEEwLCAweEU5LAotMHgwMCwgMHgwMCwgMHhEOCwgMHhFQywKKwkweDAwLCAweDgwLCAweEEwLCAweEU5LAorCTB4MDAsIDB4MDAsIDB4RDgsIDB4RUMsCiAKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHdhcnBfZzQwMF90Mmd6YWZbXSA9IHsKIAotMHgwMCwgMHg4QSwgMHg5OCwgMHhFOSwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4QSwgMHg5OCwgMHhFOSwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweEEwLCAweEU5LAotMHgwMCwgMHgwMCwgMHhEOCwgMHhFQywKKwkweDAwLCAweDgwLCAweEEwLCAweEU5LAorCTB4MDAsIDB4MDAsIDB4RDgsIDB4RUMsCiAKLTB4RkYsIDB4ODAsIDB4QzAsIDB4RTksCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4RkYsIDB4ODAsIDB4QzAsIDB4RTksCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwQSwgMHg0MCwgMHg1MCwgMHhCRiwKLTB4MkEsIDB4NDAsIDB4NjAsIDB4QkYsCisJMHgwQSwgMHg0MCwgMHg1MCwgMHhCRiwKKwkweDJBLCAweDQwLCAweDYwLCAweEJGLAogCi0weDMyLCAweDQxLCAweDUxLCAweEJGLAotMHgzQSwgMHg0MSwgMHg2MSwgMHhCRiwKKwkweDMyLCAweDQxLCAweDUxLCAweEJGLAorCTB4M0EsIDB4NDEsIDB4NjEsIDB4QkYsCiAKLTB4QzMsIDB4NkIsCi0weEQzLCAweDZCLAotMHgwMCwgMHg4QSwgMHg5OCwgMHhFOSwKKwkweEMzLCAweDZCLAorCTB4RDMsIDB4NkIsCisJMHgwMCwgMHg4QSwgMHg5OCwgMHhFOSwKIAotMHg3MywgMHg3QiwgMHhDOCwgMHhFQywKLTB4OTYsIDB4RTIsCi0weDQxLCAweDA0LAorCTB4NzMsIDB4N0IsIDB4QzgsIDB4RUMsCisJMHg5NiwgMHhFMiwKKwkweDQxLCAweDA0LAogCi0weDdCLCAweDQzLCAweEEwLCAweEU4LAotMHg3MywgMHg1MywgMHhBMCwgMHhFOCwKKwkweDdCLCAweDQzLCAweEEwLCAweEU4LAorCTB4NzMsIDB4NTMsIDB4QTAsIDB4RTgsCiAKLTB4QUQsIDB4RUUsIDB4MjMsIDB4OUYsCi0weDAwLCAweEUwLAotMHg1MSwgMHgwNCwKKwkweEFELCAweEVFLCAweDIzLCAweDlGLAorCTB4MDAsIDB4RTAsCisJMHg1MSwgMHgwNCwKIAotMHg5MCwgMHhFMiwKLTB4NjEsIDB4MDQsCi0weDMxLCAweDQ2LCAweEIxLCAweEU4LAorCTB4OTAsIDB4RTIsCisJMHg2MSwgMHgwNCwKKwkweDMxLCAweDQ2LCAweEIxLCAweEU4LAogCi0weDUxLCAweDQxLCAweEUwLCAweEVDLAotMHgzOSwgMHg2NywgMHhCMSwgMHhFOCwKKwkweDUxLCAweDQxLCAweEUwLCAweEVDLAorCTB4MzksIDB4NjcsIDB4QjEsIDB4RTgsCiAKLTB4MDAsIDB4MDQsCi0weDQ2LCAweEUyLAotMHg3MywgMHg2MywgMHhBMCwgMHhFOCwKKwkweDAwLCAweDA0LAorCTB4NDYsIDB4RTIsCisJMHg3MywgMHg2MywgMHhBMCwgMHhFOCwKIAotMHg2MSwgMHg0MSwgMHhFMCwgMHhFQywKLTB4MzEsIDB4MDAsCi0weDM5LCAweDAwLAorCTB4NjEsIDB4NDEsIDB4RTAsIDB4RUMsCisJMHgzMSwgMHgwMCwKKwkweDM5LCAweDAwLAogCi0weDgxLCAweDgwLCAweDE1LCAweEVBLAotMHgxMCwgMHgwNCwKLTB4MjAsIDB4MDQsCisJMHg4MSwgMHg4MCwgMHgxNSwgMHhFQSwKKwkweDEwLCAweDA0LAorCTB4MjAsIDB4MDQsCiAKLTB4NjEsIDB4NTEsIDB4RTAsIDB4RUMsCi0weDJGLCAweDQxLCAweDYwLCAweEVBLAorCTB4NjEsIDB4NTEsIDB4RTAsIDB4RUMsCisJMHgyRiwgMHg0MSwgMHg2MCwgMHhFQSwKIAotMHgzMSwgMHgyMCwKLTB4MzksIDB4MjAsCi0weDFGLCAweDQyLCAweEEwLCAweEU4LAorCTB4MzEsIDB4MjAsCisJMHgzOSwgMHgyMCwKKwkweDFGLCAweDQyLCAweEEwLCAweEU4LAogCi0weDJBLCAweDQyLCAweDUyLCAweEJGLAotMHgwRiwgMHg1MiwgMHhBMCwgMHhFOCwKKwkweDJBLCAweDQyLCAweDUyLCAweEJGLAorCTB4MEYsIDB4NTIsIDB4QTAsIDB4RTgsCiAKLTB4MUEsIDB4NDIsIDB4NjIsIDB4QkYsCi0weDFFLCAweDUxLCAweDYwLCAweEVBLAorCTB4MUEsIDB4NDIsIDB4NjIsIDB4QkYsCisJMHgxRSwgMHg1MSwgMHg2MCwgMHhFQSwKIAotMHg3MywgMHg3QiwgMHhDOCwgMHhFQywKLTB4MEUsIDB4NjEsIDB4NjAsIDB4RUEsCisJMHg3MywgMHg3QiwgMHhDOCwgMHhFQywKKwkweDBFLCAweDYxLCAweDYwLCAweEVBLAogCi0weDMyLCAweDQwLCAweDUwLCAweEJELAotMHgyMiwgMHg0MCwgMHg2MCwgMHhCRCwKKwkweDMyLCAweDQwLCAweDUwLCAweEJELAorCTB4MjIsIDB4NDAsIDB4NjAsIDB4QkQsCiAKLTB4MTIsIDB4NDEsIDB4NTEsIDB4QkQsCi0weDNBLCAweDQxLCAweDYxLCAweEJELAorCTB4MTIsIDB4NDEsIDB4NTEsIDB4QkQsCisJMHgzQSwgMHg0MSwgMHg2MSwgMHhCRCwKIAotMHhCRiwgMHgyRiwgMHgwRSwgMHhCRCwKLTB4OTcsIDB4RTIsCi0weDdCLCAweDcyLAorCTB4QkYsIDB4MkYsIDB4MEUsIDB4QkQsCisJMHg5NywgMHhFMiwKKwkweDdCLCAweDcyLAogCi0weDMyLCAweDIwLAotMHgyMiwgMHgyMCwKLTB4MTIsIDB4MjAsCi0weDNBLCAweDIwLAorCTB4MzIsIDB4MjAsCisJMHgyMiwgMHgyMCwKKwkweDEyLCAweDIwLAorCTB4M0EsIDB4MjAsCiAKLTB4MzUsIDB4NDgsIDB4QjEsIDB4RTgsCi0weDNELCAweDU5LCAweEIxLCAweEU4LAorCTB4MzUsIDB4NDgsIDB4QjEsIDB4RTgsCisJMHgzRCwgMHg1OSwgMHhCMSwgMHhFOCwKIAotMHg0NiwgMHgzMSwgMHg0NiwgMHhCRiwKLTB4NTYsIDB4MzEsIDB4NTYsIDB4QkYsCisJMHg0NiwgMHgzMSwgMHg0NiwgMHhCRiwKKwkweDU2LCAweDMxLCAweDU2LCAweEJGLAogCi0weEIzLCAweEUyLCAweDJELCAweDlGLAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweEIzLCAweEUyLCAweDJELCAweDlGLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4NjYsIDB4MzEsIDB4NjYsIDB4QkYsCi0weDQ3LCAweDM5LCAweDQ3LCAweEJGLAorCTB4NjYsIDB4MzEsIDB4NjYsIDB4QkYsCisJMHg0NywgMHgzOSwgMHg0NywgMHhCRiwKIAotMHg1NywgMHgzOSwgMHg1NywgMHhCRiwKLTB4NjcsIDB4MzksIDB4NjcsIDB4QkYsCisJMHg1NywgMHgzOSwgMHg1NywgMHhCRiwKKwkweDY3LCAweDM5LCAweDY3LCAweEJGLAogCi0weDcyLCAweDgwLCAweDA3LCAweEVBLAotMHgyNCwgMHg0MSwgMHgyMCwgMHhFOSwKKwkweDcyLCAweDgwLCAweDA3LCAweEVBLAorCTB4MjQsIDB4NDEsIDB4MjAsIDB4RTksCiAKLTB4MzUsIDB4MDAsCi0weDNELCAweDAwLAotMHgwMCwgMHhFMCwKLTB4MkQsIDB4NzMsCisJMHgzNSwgMHgwMCwKKwkweDNELCAweDAwLAorCTB4MDAsIDB4RTAsCisJMHgyRCwgMHg3MywKIAotMHgzMywgMHg3MiwKLTB4MEMsIDB4RTMsCi0weDhELCAweDJGLCAweDFFLCAweEJELAorCTB4MzMsIDB4NzIsCisJMHgwQywgMHhFMywKKwkweDhELCAweDJGLCAweDFFLCAweEJELAogCi0weDQzLCAweDc1LCAweEY4LCAweEVDLAotMHgzNSwgMHgyMCwKLTB4M0QsIDB4MjAsCisJMHg0MywgMHg3NSwgMHhGOCwgMHhFQywKKwkweDM1LCAweDIwLAorCTB4M0QsIDB4MjAsCiAKLTB4NDMsIDB4NDMsIDB4MkQsIDB4REYsCi0weDUzLCAweDUzLCAweDJELCAweERGLAorCTB4NDMsIDB4NDMsIDB4MkQsIDB4REYsCisJMHg1MywgMHg1MywgMHgyRCwgMHhERiwKIAotMHhBRSwgMHgxRSwgMHgwRSwgMHhCRCwKLTB4NTgsIDB4RTMsCi0weDMzLCAweDY2LAorCTB4QUUsIDB4MUUsIDB4MEUsIDB4QkQsCisJMHg1OCwgMHhFMywKKwkweDMzLCAweDY2LAogCi0weDQ4LCAweDM1LCAweDQ4LCAweEJGLAotMHg1OCwgMHgzNSwgMHg1OCwgMHhCRiwKKwkweDQ4LCAweDM1LCAweDQ4LCAweEJGLAorCTB4NTgsIDB4MzUsIDB4NTgsIDB4QkYsCiAKLTB4NjgsIDB4MzUsIDB4NjgsIDB4QkYsCi0weDQ5LCAweDNELCAweDQ5LCAweEJGLAorCTB4NjgsIDB4MzUsIDB4NjgsIDB4QkYsCisJMHg0OSwgMHgzRCwgMHg0OSwgMHhCRiwKIAotMHg1OSwgMHgzRCwgMHg1OSwgMHhCRiwKLTB4NjksIDB4M0QsIDB4NjksIDB4QkYsCisJMHg1OSwgMHgzRCwgMHg1OSwgMHhCRiwKKwkweDY5LCAweDNELCAweDY5LCAweEJGLAogCi0weDYzLCAweDYzLCAweDJELCAweERGLAotMHg0RCwgMHg3RCwgMHhGOCwgMHhFQywKKwkweDYzLCAweDYzLCAweDJELCAweERGLAorCTB4NEQsIDB4N0QsIDB4RjgsIDB4RUMsCiAKLTB4NTksIDB4RTMsCi0weDAwLCAweEUwLAotMHhCOCwgMHgzOCwgMHgzMywgMHhCRiwKKwkweDU5LCAweEUzLAorCTB4MDAsIDB4RTAsCisJMHhCOCwgMHgzOCwgMHgzMywgMHhCRiwKIAotMHgyRCwgMHg3MywKLTB4MzAsIDB4NzYsCi0weDE4LCAweDNBLCAweDQxLCAweEU5LAorCTB4MkQsIDB4NzMsCisJMHgzMCwgMHg3NiwKKwkweDE4LCAweDNBLCAweDQxLCAweEU5LAogCi0weDNGLCAweDUzLCAweEEwLCAweEU4LAotMHgwNSwgMHg4MCwgMHgzRCwgMHhFQSwKKwkweDNGLCAweDUzLCAweEEwLCAweEU4LAorCTB4MDUsIDB4ODAsIDB4M0QsIDB4RUEsCiAKLTB4MzcsIDB4NDMsIDB4QTAsIDB4RTgsCi0weDNELCAweDYzLCAweEEwLCAweEU4LAorCTB4MzcsIDB4NDMsIDB4QTAsIDB4RTgsCisJMHgzRCwgMHg2MywgMHhBMCwgMHhFOCwKIAotMHg1MCwgMHg3MCwgMHhGOCwgMHhFQywKLTB4MkIsIDB4NTAsIDB4M0MsIDB4RTksCisJMHg1MCwgMHg3MCwgMHhGOCwgMHhFQywKKwkweDJCLCAweDUwLCAweDNDLCAweEU5LAogCi0weDFGLCAweDBGLCAweEJDLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDFGLCAweDBGLCAweEJDLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4NTksIDB4NzgsIDB4RjgsIDB4RUMsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4NTksIDB4NzgsIDB4RjgsIDB4RUMsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCisJMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKKwkweDE1LCAweEMwLCAweDIwLCAweEU5LAogCi0weDE1LCAweEMwLCAweDIwLCAweEU5LAotMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKKwkweDE1LCAweEMwLCAweDIwLCAweEU5LAorCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCiAKLTB4MUUsIDB4MTIsIDB4NDEsIDB4RTksCi0weDFBLCAweDIyLCAweDQxLCAweEU5LAorCTB4MUUsIDB4MTIsIDB4NDEsIDB4RTksCisJMHgxQSwgMHgyMiwgMHg0MSwgMHhFOSwKIAotMHg0NiwgMHgzNywgMHg0NiwgMHhERiwKLTB4NTYsIDB4M0YsIDB4NTYsIDB4REYsCisJMHg0NiwgMHgzNywgMHg0NiwgMHhERiwKKwkweDU2LCAweDNGLCAweDU2LCAweERGLAogCi0weDJCLCAweDQwLCAweDNELCAweEU5LAotMHg2NiwgMHgzRCwgMHg2NiwgMHhERiwKKwkweDJCLCAweDQwLCAweDNELCAweEU5LAorCTB4NjYsIDB4M0QsIDB4NjYsIDB4REYsCiAKLTB4MUQsIDB4MzIsIDB4NDEsIDB4RTksCi0weDY3LCAweDNELCAweDY3LCAweERGLAorCTB4MUQsIDB4MzIsIDB4NDEsIDB4RTksCisJMHg2NywgMHgzRCwgMHg2NywgMHhERiwKIAotMHg0NywgMHgzNywgMHg0NywgMHhERiwKLTB4NTcsIDB4M0YsIDB4NTcsIDB4REYsCisJMHg0NywgMHgzNywgMHg0NywgMHhERiwKKwkweDU3LCAweDNGLCAweDU3LCAweERGLAogCi0weDJBLCAweDQwLCAweDIwLCAweEU5LAotMHg1OSwgMHgzRiwgMHg1OSwgMHhERiwKKwkweDJBLCAweDQwLCAweDIwLCAweEU5LAorCTB4NTksIDB4M0YsIDB4NTksIDB4REYsCiAKLTB4MTYsIDB4MzAsIDB4MjAsIDB4RTksCi0weDY5LCAweDNELCAweDY5LCAweERGLAorCTB4MTYsIDB4MzAsIDB4MjAsIDB4RTksCisJMHg2OSwgMHgzRCwgMHg2OSwgMHhERiwKIAotMHg0OCwgMHgzNywgMHg0OCwgMHhERiwKLTB4NTgsIDB4M0YsIDB4NTgsIDB4REYsCisJMHg0OCwgMHgzNywgMHg0OCwgMHhERiwKKwkweDU4LCAweDNGLCAweDU4LCAweERGLAogCi0weDEyLCAweDEyLCAweDJELCAweERGLAotMHgyMiwgMHgyMiwgMHgyRCwgMHhERiwKKwkweDEyLCAweDEyLCAweDJELCAweERGLAorCTB4MjIsIDB4MjIsIDB4MkQsIDB4REYsCiAKLTB4MzIsIDB4MzIsIDB4MkQsIDB4REYsCi0weDNBLCAweDNBLCAweDJELCAweERGLAorCTB4MzIsIDB4MzIsIDB4MkQsIDB4REYsCisJMHgzQSwgMHgzQSwgMHgyRCwgMHhERiwKIAotMHg2OCwgMHgzRCwgMHg2OCwgMHhERiwKLTB4NDksIDB4MzcsIDB4NDksIDB4REYsCisJMHg2OCwgMHgzRCwgMHg2OCwgMHhERiwKKwkweDQ5LCAweDM3LCAweDQ5LCAweERGLAogCi0weDNELCAweENGLCAweDc0LCAweEMwLAotMHgzNywgMHhDRiwgMHg3NCwgMHhDNCwKKwkweDNELCAweENGLCAweDc0LCAweEMwLAorCTB4MzcsIDB4Q0YsIDB4NzQsIDB4QzQsCiAKLTB4MEEsIDB4NDQsIDB4NTQsIDB4QjAsCi0weDAyLCAweDQ0LCAweDY0LCAweEIwLAorCTB4MEEsIDB4NDQsIDB4NTQsIDB4QjAsCisJMHgwMiwgMHg0NCwgMHg2NCwgMHhCMCwKIAotMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLTB4MzQsIDB4MzcsIDB4MjAsIDB4RTksCisJMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKKwkweDM0LCAweDM3LCAweDIwLCAweEU5LAogCi0weDM5LCAweEU1LCAweDJDLCAweDlGLAotMHgzQywgMHgzRCwgMHgyMCwgMHhFOSwKKwkweDM5LCAweEU1LCAweDJDLCAweDlGLAorCTB4M0MsIDB4M0QsIDB4MjAsIDB4RTksCiAKLTB4MkEsIDB4NDQsIDB4NTQsIDB4QjIsCi0weDFBLCAweDQ0LCAweDY0LCAweEIyLAorCTB4MkEsIDB4NDQsIDB4NTQsIDB4QjIsCisJMHgxQSwgMHg0NCwgMHg2NCwgMHhCMiwKIAotMHgyRSwgMHg4MCwgMHgzQSwgMHhFQSwKLTB4MEEsIDB4MjAsCi0weDAyLCAweDIwLAorCTB4MkUsIDB4ODAsIDB4M0EsIDB4RUEsCisJMHgwQSwgMHgyMCwKKwkweDAyLCAweDIwLAogCi0weDg4LCAweDczLCAweDVFLCAweEU5LAotMHgyQSwgMHgyMCwKLTB4MUEsIDB4MjAsCisJMHg4OCwgMHg3MywgMHg1RSwgMHhFOSwKKwkweDJBLCAweDIwLAorCTB4MUEsIDB4MjAsCiAKLTB4M0QsIDB4Q0YsIDB4NzQsIDB4QzIsCi0weDBGLCAweENGLCAweDc0LCAweEM2LAorCTB4M0QsIDB4Q0YsIDB4NzQsIDB4QzIsCisJMHgwRiwgMHhDRiwgMHg3NCwgMHhDNiwKIAotMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLTB4MzIsIDB4MzEsIDB4NUYsIDB4RTksCisJMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKKwkweDMyLCAweDMxLCAweDVGLCAweEU5LAogCi0weDM4LCAweDIxLCAweDJDLCAweDlGLAotMHgzMywgMHgzOSwgMHg1RiwgMHhFOSwKKwkweDM4LCAweDIxLCAweDJDLCAweDlGLAorCTB4MzMsIDB4MzksIDB4NUYsIDB4RTksCiAKLTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0weDlDLCAweDBGLCAweDIwLCAweEU5LAorCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCisJMHg5QywgMHgwRiwgMHgyMCwgMHhFOSwKIAotMHgwQSwgMHg0NCwgMHg1NCwgMHhCNCwKLTB4MDIsIDB4NDQsIDB4NjQsIDB4QjQsCisJMHgwQSwgMHg0NCwgMHg1NCwgMHhCNCwKKwkweDAyLCAweDQ0LCAweDY0LCAweEI0LAogCi0weDJBLCAweDQ0LCAweDU0LCAweEI2LAotMHgxQSwgMHg0NCwgMHg2NCwgMHhCNiwKKwkweDJBLCAweDQ0LCAweDU0LCAweEI2LAorCTB4MUEsIDB4NDQsIDB4NjQsIDB4QjYsCiAKLTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0weDM4LCAweDNELCAweDIwLCAweEU5LAorCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCisJMHgzOCwgMHgzRCwgMHgyMCwgMHhFOSwKIAotMHgwQSwgMHgyMCwKLTB4MDIsIDB4MjAsCi0weDJBLCAweDIwLAotMHgxQSwgMHgyMCwKKwkweDBBLCAweDIwLAorCTB4MDIsIDB4MjAsCisJMHgyQSwgMHgyMCwKKwkweDFBLCAweDIwLAogCi0weDNELCAweENGLCAweDc1LCAweEM2LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDNELCAweENGLCAweDc1LCAweEM2LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0weDNFLCAweDMwLCAweDRGLCAweEU5LAorCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCisJMHgzRSwgMHgzMCwgMHg0RiwgMHhFOSwKIAotMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLTB4M0YsIDB4MzgsIDB4NEYsIDB4RTksCisJMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKKwkweDNGLCAweDM4LCAweDRGLCAweEU5LAogCi0weDBBLCAweDQ1LCAweDU1LCAweEI2LAotMHgwMiwgMHg0NSwgMHg2NSwgMHhCNiwKKwkweDBBLCAweDQ1LCAweDU1LCAweEI2LAorCTB4MDIsIDB4NDUsIDB4NjUsIDB4QjYsCiAKLTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0weDNBLCAweDMxLCAweDRGLCAweEU5LAorCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCisJMHgzQSwgMHgzMSwgMHg0RiwgMHhFOSwKIAotMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLTB4M0IsIDB4MzksIDB4NEYsIDB4RTksCisJMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKKwkweDNCLCAweDM5LCAweDRGLCAweEU5LAogCi0weDMxLCAweDNELCAweDIwLCAweEU5LAotMHgwQSwgMHgyMCwKLTB4MDIsIDB4MjAsCisJMHgzMSwgMHgzRCwgMHgyMCwgMHhFOSwKKwkweDBBLCAweDIwLAorCTB4MDIsIDB4MjAsCiAKLTB4MkEsIDB4NDYsIDB4NTYsIDB4QkYsCi0weDFBLCAweDQ2LCAweDY2LCAweEJGLAorCTB4MkEsIDB4NDYsIDB4NTYsIDB4QkYsCisJMHgxQSwgMHg0NiwgMHg2NiwgMHhCRiwKIAotMHgwQSwgMHg0NywgMHg1NywgMHhCRiwKLTB4MDIsIDB4NDcsIDB4NjcsIDB4QkYsCisJMHgwQSwgMHg0NywgMHg1NywgMHhCRiwKKwkweDAyLCAweDQ3LCAweDY3LCAweEJGLAogCi0weDMwLCAweDUwLCAweDJFLCAweDlGLAotMHgzNiwgMHgzMCwgMHg0RiwgMHhFOSwKKwkweDMwLCAweDUwLCAweDJFLCAweDlGLAorCTB4MzYsIDB4MzAsIDB4NEYsIDB4RTksCiAKLTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0weDM3LCAweDM4LCAweDRGLCAweEU5LAorCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCisJMHgzNywgMHgzOCwgMHg0RiwgMHhFOSwKIAotMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLTB4OUQsIDB4MzEsIDB4NEYsIDB4RTksCisJMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKKwkweDlELCAweDMxLCAweDRGLCAweEU5LAogCi0weDM5LCAweEU1LCAweDJDLCAweDlGLAotMHg5RSwgMHgzOSwgMHg0RiwgMHhFOSwKKwkweDM5LCAweEU1LCAweDJDLCAweDlGLAorCTB4OUUsIDB4MzksIDB4NEYsIDB4RTksCiAKLTB4MkEsIDB4NDMsIDB4NTMsIDB4QkYsCi0weDFBLCAweDQzLCAweDYzLCAweEJGLAorCTB4MkEsIDB4NDMsIDB4NTMsIDB4QkYsCisJMHgxQSwgMHg0MywgMHg2MywgMHhCRiwKIAotMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLTB4MzUsIDB4MzAsIDB4NEYsIDB4RTksCisJMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKKwkweDM1LCAweDMwLCAweDRGLCAweEU5LAogCi0weDM4LCAweDIxLCAweDJDLCAweDlGLAotMHgzOSwgMHgzOCwgMHg0RiwgMHhFOSwKKwkweDM4LCAweDIxLCAweDJDLCAweDlGLAorCTB4MzksIDB4MzgsIDB4NEYsIDB4RTksCiAKLTB4MEEsIDB4NDgsIDB4NTgsIDB4QkYsCi0weDAyLCAweDQ4LCAweDY4LCAweEJGLAorCTB4MEEsIDB4NDgsIDB4NTgsIDB4QkYsCisJMHgwMiwgMHg0OCwgMHg2OCwgMHhCRiwKIAotMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLTB4ODAsIDB4MzEsIDB4NTcsIDB4RTksCisJMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKKwkweDgwLCAweDMxLCAweDU3LCAweEU5LAogCi0weDM5LCAweEU1LCAweDJDLCAweDlGLAotMHg4MSwgMHgzOSwgMHg1NywgMHhFOSwKKwkweDM5LCAweEU1LCAweDJDLCAweDlGLAorCTB4ODEsIDB4MzksIDB4NTcsIDB4RTksCiAKLTB4MkEsIDB4NDksIDB4NTksIDB4QkYsCi0weDFBLCAweDQ5LCAweDY5LCAweEJGLAorCTB4MkEsIDB4NDksIDB4NTksIDB4QkYsCisJMHgxQSwgMHg0OSwgMHg2OSwgMHhCRiwKIAotMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLTB4ODIsIDB4MzAsIDB4NTcsIDB4RTksCisJMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKKwkweDgyLCAweDMwLCAweDU3LCAweEU5LAogCi0weDM4LCAweDIxLCAweDJDLCAweDlGLAotMHg4MywgMHgzOCwgMHg1NywgMHhFOSwKKwkweDM4LCAweDIxLCAweDJDLCAweDlGLAorCTB4ODMsIDB4MzgsIDB4NTcsIDB4RTksCiAKLTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0weDg0LCAweDMxLCAweDVFLCAweEU5LAorCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCisJMHg4NCwgMHgzMSwgMHg1RSwgMHhFOSwKIAotMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLTB4ODUsIDB4MzksIDB4NUUsIDB4RTksCisJMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKKwkweDg1LCAweDM5LCAweDVFLCAweEU5LAogCi0weDg2LCAweDc2LCAweDU3LCAweEU5LAotMHg4QSwgMHgzNiwgMHgyMCwgMHhFOSwKKwkweDg2LCAweDc2LCAweDU3LCAweEU5LAorCTB4OEEsIDB4MzYsIDB4MjAsIDB4RTksCiAKLTB4ODcsIDB4NzcsIDB4NTcsIDB4RTksCi0weDhCLCAweDNFLCAweEJGLCAweEVBLAorCTB4ODcsIDB4NzcsIDB4NTcsIDB4RTksCisJMHg4QiwgMHgzRSwgMHhCRiwgMHhFQSwKIAotMHg4MCwgMHgzMCwgMHg1NywgMHhFOSwKLTB4ODEsIDB4MzgsIDB4NTcsIDB4RTksCisJMHg4MCwgMHgzMCwgMHg1NywgMHhFOSwKKwkweDgxLCAweDM4LCAweDU3LCAweEU5LAogCi0weDgyLCAweDMxLCAweDU3LCAweEU5LAotMHg4NiwgMHg3OCwgMHg1NywgMHhFOSwKKwkweDgyLCAweDMxLCAweDU3LCAweEU5LAorCTB4ODYsIDB4NzgsIDB4NTcsIDB4RTksCiAKLTB4ODMsIDB4MzksIDB4NTcsIDB4RTksCi0weDg3LCAweDc5LCAweDU3LCAweEU5LAorCTB4ODMsIDB4MzksIDB4NTcsIDB4RTksCisJMHg4NywgMHg3OSwgMHg1NywgMHhFOSwKIAotMHgzMCwgMHgxRiwgMHg1RiwgMHhFOSwKLTB4OEEsIDB4MzQsIDB4MjAsIDB4RTksCisJMHgzMCwgMHgxRiwgMHg1RiwgMHhFOSwKKwkweDhBLCAweDM0LCAweDIwLCAweEU5LAogCi0weDhCLCAweDNDLCAweDIwLCAweEU5LAotMHgzNywgMHg1MCwgMHg2MCwgMHhCRCwKKwkweDhCLCAweDNDLCAweDIwLCAweEU5LAorCTB4MzcsIDB4NTAsIDB4NjAsIDB4QkQsCiAKLTB4NTcsIDB4MEQsIDB4MjAsIDB4RTksCi0weDM1LCAweDUxLCAweDYxLCAweEJELAorCTB4NTcsIDB4MEQsIDB4MjAsIDB4RTksCisJMHgzNSwgMHg1MSwgMHg2MSwgMHhCRCwKIAotMHgyQiwgMHg1MCwgMHgyMCwgMHhFOSwKLTB4MUQsIDB4MzcsIDB4RTEsIDB4RUEsCisJMHgyQiwgMHg1MCwgMHgyMCwgMHhFOSwKKwkweDFELCAweDM3LCAweEUxLCAweEVBLAogCi0weDFFLCAweDM1LCAweEUxLCAweEVBLAotMHgwMCwgMHhFMCwKLTB4MEUsIDB4NzcsCisJMHgxRSwgMHgzNSwgMHhFMSwgMHhFQSwKKwkweDAwLCAweEUwLAorCTB4MEUsIDB4NzcsCiAKLTB4MjQsIDB4NTEsIDB4MjAsIDB4RTksCi0weDk2LCAweEZGLCAweDIwLCAweEVBLAorCTB4MjQsIDB4NTEsIDB4MjAsIDB4RTksCisJMHg5NiwgMHhGRiwgMHgyMCwgMHhFQSwKIAotMHgxNiwgMHgwRSwgMHgyMCwgMHhFOSwKLTB4NTcsIDB4MkUsIDB4QkYsIDB4RUEsCisJMHgxNiwgMHgwRSwgMHgyMCwgMHhFOSwKKwkweDU3LCAweDJFLCAweEJGLCAweEVBLAogCi0weDBCLCAweDQ2LCAweEEwLCAweEU4LAotMHgxQiwgMHg1NiwgMHhBMCwgMHhFOCwKKwkweDBCLCAweDQ2LCAweEEwLCAweEU4LAorCTB4MUIsIDB4NTYsIDB4QTAsIDB4RTgsCiAKLTB4MkIsIDB4NjYsIDB4QTAsIDB4RTgsCi0weDBDLCAweDQ3LCAweEEwLCAweEU4LAorCTB4MkIsIDB4NjYsIDB4QTAsIDB4RTgsCisJMHgwQywgMHg0NywgMHhBMCwgMHhFOCwKIAotMHgxQywgMHg1NywgMHhBMCwgMHhFOCwKLTB4MkMsIDB4NjcsIDB4QTAsIDB4RTgsCisJMHgxQywgMHg1NywgMHhBMCwgMHhFOCwKKwkweDJDLCAweDY3LCAweEEwLCAweEU4LAogCi0weDBCLCAweDAwLAotMHgxQiwgMHgwMCwKLTB4MkIsIDB4MDAsCi0weDAwLCAweEUwLAorCTB4MEIsIDB4MDAsCisJMHgxQiwgMHgwMCwKKwkweDJCLCAweDAwLAorCTB4MDAsIDB4RTAsCiAKLTB4MEMsIDB4MDAsCi0weDFDLCAweDAwLAotMHgyQywgMHgwMCwKLTB4MDAsIDB4RTAsCisJMHgwQywgMHgwMCwKKwkweDFDLCAweDAwLAorCTB4MkMsIDB4MDAsCisJMHgwMCwgMHhFMCwKIAotMHgwQiwgMHg2NSwKLTB4MUIsIDB4NjUsCi0weDJCLCAweDY1LAotMHgwMCwgMHhFMCwKKwkweDBCLCAweDY1LAorCTB4MUIsIDB4NjUsCisJMHgyQiwgMHg2NSwKKwkweDAwLCAweEUwLAogCi0weDBDLCAweDY1LAotMHgxQywgMHg2NSwKLTB4MkMsIDB4NjUsCi0weDAwLCAweEUwLAorCTB4MEMsIDB4NjUsCisJMHgxQywgMHg2NSwKKwkweDJDLCAweDY1LAorCTB4MDAsIDB4RTAsCiAKLTB4MEIsIDB4MUIsIDB4NjAsIDB4RUMsCi0weDM2LCAweEQ3LCAweDM2LCAweEFELAorCTB4MEIsIDB4MUIsIDB4NjAsIDB4RUMsCisJMHgzNiwgMHhENywgMHgzNiwgMHhBRCwKIAotMHgyQiwgMHg4MCwgMHg2MCwgMHhFQywKLTB4MEMsIDB4MUMsIDB4NjAsIDB4RUMsCisJMHgyQiwgMHg4MCwgMHg2MCwgMHhFQywKKwkweDBDLCAweDFDLCAweDYwLCAweEVDLAogCi0weDNFLCAweEQ3LCAweDNFLCAweEFELAotMHgyQywgMHg4MCwgMHg2MCwgMHhFQywKKwkweDNFLCAweEQ3LCAweDNFLCAweEFELAorCTB4MkMsIDB4ODAsIDB4NjAsIDB4RUMsCiAKLTB4MEIsIDB4MkIsIDB4REUsIDB4RTgsCi0weDFCLCAweDgwLCAweERFLCAweEU4LAorCTB4MEIsIDB4MkIsIDB4REUsIDB4RTgsCisJMHgxQiwgMHg4MCwgMHhERSwgMHhFOCwKIAotMHgzNiwgMHg4MCwgMHgzNiwgMHhCRCwKLTB4M0UsIDB4ODAsIDB4M0UsIDB4QkQsCisJMHgzNiwgMHg4MCwgMHgzNiwgMHhCRCwKKwkweDNFLCAweDgwLCAweDNFLCAweEJELAogCi0weDMzLCAweEQ3LCAweDBCLCAweEJELAotMHgzQiwgMHhENywgMHgxQiwgMHhCRCwKKwkweDMzLCAweEQ3LCAweDBCLCAweEJELAorCTB4M0IsIDB4RDcsIDB4MUIsIDB4QkQsCiAKLTB4NDYsIDB4ODAsIDB4NDYsIDB4Q0YsCi0weDU3LCAweDgwLCAweDU3LCAweENGLAorCTB4NDYsIDB4ODAsIDB4NDYsIDB4Q0YsCisJMHg1NywgMHg4MCwgMHg1NywgMHhDRiwKIAotMHg2NiwgMHgzMywgMHg2NiwgMHhDRiwKLTB4NDcsIDB4M0IsIDB4NDcsIDB4Q0YsCisJMHg2NiwgMHgzMywgMHg2NiwgMHhDRiwKKwkweDQ3LCAweDNCLCAweDQ3LCAweENGLAogCi0weDU2LCAweDMzLCAweDU2LCAweENGLAotMHg2NywgMHgzQiwgMHg2NywgMHhDRiwKKwkweDU2LCAweDMzLCAweDU2LCAweENGLAorCTB4NjcsIDB4M0IsIDB4NjcsIDB4Q0YsCiAKLTB4MEIsIDB4NDgsIDB4QTAsIDB4RTgsCi0weDFCLCAweDU4LCAweEEwLCAweEU4LAorCTB4MEIsIDB4NDgsIDB4QTAsIDB4RTgsCisJMHgxQiwgMHg1OCwgMHhBMCwgMHhFOCwKIAotMHgyQiwgMHg2OCwgMHhBMCwgMHhFOCwKLTB4MEMsIDB4NDksIDB4QTAsIDB4RTgsCisJMHgyQiwgMHg2OCwgMHhBMCwgMHhFOCwKKwkweDBDLCAweDQ5LCAweEEwLCAweEU4LAogCi0weDFDLCAweDU5LCAweEEwLCAweEU4LAotMHgyQywgMHg2OSwgMHhBMCwgMHhFOCwKKwkweDFDLCAweDU5LCAweEEwLCAweEU4LAorCTB4MkMsIDB4NjksIDB4QTAsIDB4RTgsCiAKLTB4MEIsIDB4MDAsCi0weDFCLCAweDAwLAotMHgyQiwgMHgwMCwKLTB4MDAsIDB4RTAsCisJMHgwQiwgMHgwMCwKKwkweDFCLCAweDAwLAorCTB4MkIsIDB4MDAsCisJMHgwMCwgMHhFMCwKIAotMHgwQywgMHgwMCwKLTB4MUMsIDB4MDAsCi0weDJDLCAweDAwLAotMHgwMCwgMHhFMCwKKwkweDBDLCAweDAwLAorCTB4MUMsIDB4MDAsCisJMHgyQywgMHgwMCwKKwkweDAwLCAweEUwLAogCi0weDBCLCAweDY1LAotMHgxQiwgMHg2NSwKLTB4MkIsIDB4NjUsCi0weDAwLCAweEUwLAorCTB4MEIsIDB4NjUsCisJMHgxQiwgMHg2NSwKKwkweDJCLCAweDY1LAorCTB4MDAsIDB4RTAsCiAKLTB4MEMsIDB4NjUsCi0weDFDLCAweDY1LAotMHgyQywgMHg2NSwKLTB4MDAsIDB4RTAsCisJMHgwQywgMHg2NSwKKwkweDFDLCAweDY1LAorCTB4MkMsIDB4NjUsCisJMHgwMCwgMHhFMCwKIAotMHgwQiwgMHgxQiwgMHg2MCwgMHhFQywKLTB4MzQsIDB4RDcsIDB4MzQsIDB4QUQsCisJMHgwQiwgMHgxQiwgMHg2MCwgMHhFQywKKwkweDM0LCAweEQ3LCAweDM0LCAweEFELAogCi0weDJCLCAweDgwLCAweDYwLCAweEVDLAotMHgwQywgMHgxQywgMHg2MCwgMHhFQywKKwkweDJCLCAweDgwLCAweDYwLCAweEVDLAorCTB4MEMsIDB4MUMsIDB4NjAsIDB4RUMsCiAKLTB4M0MsIDB4RDcsIDB4M0MsIDB4QUQsCi0weDJDLCAweDgwLCAweDYwLCAweEVDLAorCTB4M0MsIDB4RDcsIDB4M0MsIDB4QUQsCisJMHgyQywgMHg4MCwgMHg2MCwgMHhFQywKIAotMHgwQiwgMHgyQiwgMHhERSwgMHhFOCwKLTB4MUIsIDB4ODAsIDB4REUsIDB4RTgsCisJMHgwQiwgMHgyQiwgMHhERSwgMHhFOCwKKwkweDFCLCAweDgwLCAweERFLCAweEU4LAogCi0weDM0LCAweDgwLCAweDM0LCAweEJELAotMHgzQywgMHg4MCwgMHgzQywgMHhCRCwKKwkweDM0LCAweDgwLCAweDM0LCAweEJELAorCTB4M0MsIDB4ODAsIDB4M0MsIDB4QkQsCiAKLTB4MzMsIDB4RDcsIDB4MEIsIDB4QkQsCi0weDNCLCAweEQ3LCAweDFCLCAweEJELAorCTB4MzMsIDB4RDcsIDB4MEIsIDB4QkQsCisJMHgzQiwgMHhENywgMHgxQiwgMHhCRCwKIAotMHg0OCwgMHg4MCwgMHg0OCwgMHhDRiwKLTB4NTksIDB4ODAsIDB4NTksIDB4Q0YsCisJMHg0OCwgMHg4MCwgMHg0OCwgMHhDRiwKKwkweDU5LCAweDgwLCAweDU5LCAweENGLAogCi0weDY4LCAweDMzLCAweDY4LCAweENGLAotMHg0OSwgMHgzQiwgMHg0OSwgMHhDRiwKKwkweDY4LCAweDMzLCAweDY4LCAweENGLAorCTB4NDksIDB4M0IsIDB4NDksIDB4Q0YsCiAKLTB4QjUsIDB4RkYsIDB4MjAsIDB4RUEsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4QjUsIDB4RkYsIDB4MjAsIDB4RUEsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHg1OCwgMHgzMywgMHg1OCwgMHhDRiwKLTB4NjksIDB4M0IsIDB4NjksIDB4Q0YsCisJMHg1OCwgMHgzMywgMHg1OCwgMHhDRiwKKwkweDY5LCAweDNCLCAweDY5LCAweENGLAogCi0weDc0LCAweEZGLCAweDIwLCAweEVBLAotMHg1NywgMHhDMCwgMHhCRiwgMHhFQSwKKwkweDc0LCAweEZGLCAweDIwLCAweEVBLAorCTB4NTcsIDB4QzAsIDB4QkYsIDB4RUEsCiAKLTB4MDAsIDB4ODAsIDB4QTAsIDB4RTksCi0weDAwLCAweDAwLCAweEQ4LCAweEVDLAorCTB4MDAsIDB4ODAsIDB4QTAsIDB4RTksCisJMHgwMCwgMHgwMCwgMHhEOCwgMHhFQywKIAogfTsKIAogc3RhdGljIHVuc2lnbmVkIGNoYXIgd2FycF9nNDAwX3QyZ3pmW10gPSB7CiAKLTB4MDAsIDB4OEEsIDB4OTgsIDB4RTksCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4OEEsIDB4OTgsIDB4RTksCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKLTB4MDAsIDB4MDAsIDB4RDgsIDB4RUMsCisJMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKKwkweDAwLCAweDAwLCAweEQ4LCAweEVDLAogCi0weEZGLCAweDgwLCAweEMwLCAweEU5LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweEZGLCAweDgwLCAweEMwLCAweEU5LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MEEsIDB4NDAsIDB4NTAsIDB4QkYsCi0weDJBLCAweDQwLCAweDYwLCAweEJGLAorCTB4MEEsIDB4NDAsIDB4NTAsIDB4QkYsCisJMHgyQSwgMHg0MCwgMHg2MCwgMHhCRiwKIAotMHgzMiwgMHg0MSwgMHg1MSwgMHhCRiwKLTB4M0EsIDB4NDEsIDB4NjEsIDB4QkYsCisJMHgzMiwgMHg0MSwgMHg1MSwgMHhCRiwKKwkweDNBLCAweDQxLCAweDYxLCAweEJGLAogCi0weEMzLCAweDZCLAotMHhEMywgMHg2QiwKLTB4MDAsIDB4OEEsIDB4OTgsIDB4RTksCisJMHhDMywgMHg2QiwKKwkweEQzLCAweDZCLAorCTB4MDAsIDB4OEEsIDB4OTgsIDB4RTksCiAKLTB4NzMsIDB4N0IsIDB4QzgsIDB4RUMsCi0weDk2LCAweEUyLAotMHg0MSwgMHgwNCwKKwkweDczLCAweDdCLCAweEM4LCAweEVDLAorCTB4OTYsIDB4RTIsCisJMHg0MSwgMHgwNCwKIAotMHg3QiwgMHg0MywgMHhBMCwgMHhFOCwKLTB4NzMsIDB4NTMsIDB4QTAsIDB4RTgsCisJMHg3QiwgMHg0MywgMHhBMCwgMHhFOCwKKwkweDczLCAweDUzLCAweEEwLCAweEU4LAogCi0weEFELCAweEVFLCAweDIzLCAweDlGLAotMHgwMCwgMHhFMCwKLTB4NTEsIDB4MDQsCisJMHhBRCwgMHhFRSwgMHgyMywgMHg5RiwKKwkweDAwLCAweEUwLAorCTB4NTEsIDB4MDQsCiAKLTB4OTAsIDB4RTIsCi0weDYxLCAweDA0LAotMHgzMSwgMHg0NiwgMHhCMSwgMHhFOCwKKwkweDkwLCAweEUyLAorCTB4NjEsIDB4MDQsCisJMHgzMSwgMHg0NiwgMHhCMSwgMHhFOCwKIAotMHg1MSwgMHg0MSwgMHhFMCwgMHhFQywKLTB4MzksIDB4NjcsIDB4QjEsIDB4RTgsCisJMHg1MSwgMHg0MSwgMHhFMCwgMHhFQywKKwkweDM5LCAweDY3LCAweEIxLCAweEU4LAogCi0weDAwLCAweDA0LAotMHg0NiwgMHhFMiwKLTB4NzMsIDB4NjMsIDB4QTAsIDB4RTgsCisJMHgwMCwgMHgwNCwKKwkweDQ2LCAweEUyLAorCTB4NzMsIDB4NjMsIDB4QTAsIDB4RTgsCiAKLTB4NjEsIDB4NDEsIDB4RTAsIDB4RUMsCi0weDMxLCAweDAwLAotMHgzOSwgMHgwMCwKKwkweDYxLCAweDQxLCAweEUwLCAweEVDLAorCTB4MzEsIDB4MDAsCisJMHgzOSwgMHgwMCwKIAotMHg3RCwgMHg4MCwgMHgxNSwgMHhFQSwKLTB4MTAsIDB4MDQsCi0weDIwLCAweDA0LAorCTB4N0QsIDB4ODAsIDB4MTUsIDB4RUEsCisJMHgxMCwgMHgwNCwKKwkweDIwLCAweDA0LAogCi0weDYxLCAweDUxLCAweEUwLCAweEVDLAotMHgyRiwgMHg0MSwgMHg2MCwgMHhFQSwKKwkweDYxLCAweDUxLCAweEUwLCAweEVDLAorCTB4MkYsIDB4NDEsIDB4NjAsIDB4RUEsCiAKLTB4MzEsIDB4MjAsCi0weDM5LCAweDIwLAotMHgxRiwgMHg0MiwgMHhBMCwgMHhFOCwKKwkweDMxLCAweDIwLAorCTB4MzksIDB4MjAsCisJMHgxRiwgMHg0MiwgMHhBMCwgMHhFOCwKIAotMHgyQSwgMHg0MiwgMHg1MiwgMHhCRiwKLTB4MEYsIDB4NTIsIDB4QTAsIDB4RTgsCisJMHgyQSwgMHg0MiwgMHg1MiwgMHhCRiwKKwkweDBGLCAweDUyLCAweEEwLCAweEU4LAogCi0weDFBLCAweDQyLCAweDYyLCAweEJGLAotMHgxRSwgMHg1MSwgMHg2MCwgMHhFQSwKKwkweDFBLCAweDQyLCAweDYyLCAweEJGLAorCTB4MUUsIDB4NTEsIDB4NjAsIDB4RUEsCiAKLTB4NzMsIDB4N0IsIDB4QzgsIDB4RUMsCi0weDBFLCAweDYxLCAweDYwLCAweEVBLAorCTB4NzMsIDB4N0IsIDB4QzgsIDB4RUMsCisJMHgwRSwgMHg2MSwgMHg2MCwgMHhFQSwKIAotMHgzMiwgMHg0MCwgMHg1MCwgMHhCRCwKLTB4MjIsIDB4NDAsIDB4NjAsIDB4QkQsCisJMHgzMiwgMHg0MCwgMHg1MCwgMHhCRCwKKwkweDIyLCAweDQwLCAweDYwLCAweEJELAogCi0weDEyLCAweDQxLCAweDUxLCAweEJELAotMHgzQSwgMHg0MSwgMHg2MSwgMHhCRCwKKwkweDEyLCAweDQxLCAweDUxLCAweEJELAorCTB4M0EsIDB4NDEsIDB4NjEsIDB4QkQsCiAKLTB4QkYsIDB4MkYsIDB4MEUsIDB4QkQsCi0weDk3LCAweEUyLAotMHg3QiwgMHg3MiwKKwkweEJGLCAweDJGLCAweDBFLCAweEJELAorCTB4OTcsIDB4RTIsCisJMHg3QiwgMHg3MiwKIAotMHgzMiwgMHgyMCwKLTB4MjIsIDB4MjAsCi0weDEyLCAweDIwLAotMHgzQSwgMHgyMCwKKwkweDMyLCAweDIwLAorCTB4MjIsIDB4MjAsCisJMHgxMiwgMHgyMCwKKwkweDNBLCAweDIwLAogCi0weDM1LCAweDQ4LCAweEIxLCAweEU4LAotMHgzRCwgMHg1OSwgMHhCMSwgMHhFOCwKKwkweDM1LCAweDQ4LCAweEIxLCAweEU4LAorCTB4M0QsIDB4NTksIDB4QjEsIDB4RTgsCiAKLTB4NDYsIDB4MzEsIDB4NDYsIDB4QkYsCi0weDU2LCAweDMxLCAweDU2LCAweEJGLAorCTB4NDYsIDB4MzEsIDB4NDYsIDB4QkYsCisJMHg1NiwgMHgzMSwgMHg1NiwgMHhCRiwKIAotMHhCMywgMHhFMiwgMHgyRCwgMHg5RiwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHhCMywgMHhFMiwgMHgyRCwgMHg5RiwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDY2LCAweDMxLCAweDY2LCAweEJGLAotMHg0NywgMHgzOSwgMHg0NywgMHhCRiwKKwkweDY2LCAweDMxLCAweDY2LCAweEJGLAorCTB4NDcsIDB4MzksIDB4NDcsIDB4QkYsCiAKLTB4NTcsIDB4MzksIDB4NTcsIDB4QkYsCi0weDY3LCAweDM5LCAweDY3LCAweEJGLAorCTB4NTcsIDB4MzksIDB4NTcsIDB4QkYsCisJMHg2NywgMHgzOSwgMHg2NywgMHhCRiwKIAotMHg2RSwgMHg4MCwgMHgwNywgMHhFQSwKLTB4MjQsIDB4NDEsIDB4MjAsIDB4RTksCisJMHg2RSwgMHg4MCwgMHgwNywgMHhFQSwKKwkweDI0LCAweDQxLCAweDIwLCAweEU5LAogCi0weDM1LCAweDAwLAotMHgzRCwgMHgwMCwKLTB4MDAsIDB4RTAsCi0weDJELCAweDczLAorCTB4MzUsIDB4MDAsCisJMHgzRCwgMHgwMCwKKwkweDAwLCAweEUwLAorCTB4MkQsIDB4NzMsCiAKLTB4MzMsIDB4NzIsCi0weDBDLCAweEUzLAotMHg4RCwgMHgyRiwgMHgxRSwgMHhCRCwKKwkweDMzLCAweDcyLAorCTB4MEMsIDB4RTMsCisJMHg4RCwgMHgyRiwgMHgxRSwgMHhCRCwKIAotMHg0MywgMHg3NSwgMHhGOCwgMHhFQywKLTB4MzUsIDB4MjAsCi0weDNELCAweDIwLAorCTB4NDMsIDB4NzUsIDB4RjgsIDB4RUMsCisJMHgzNSwgMHgyMCwKKwkweDNELCAweDIwLAogCi0weDQzLCAweDQzLCAweDJELCAweERGLAotMHg1MywgMHg1MywgMHgyRCwgMHhERiwKKwkweDQzLCAweDQzLCAweDJELCAweERGLAorCTB4NTMsIDB4NTMsIDB4MkQsIDB4REYsCiAKLTB4QUUsIDB4MUUsIDB4MEUsIDB4QkQsCi0weDU4LCAweEUzLAotMHgzMywgMHg2NiwKKwkweEFFLCAweDFFLCAweDBFLCAweEJELAorCTB4NTgsIDB4RTMsCisJMHgzMywgMHg2NiwKIAotMHg0OCwgMHgzNSwgMHg0OCwgMHhCRiwKLTB4NTgsIDB4MzUsIDB4NTgsIDB4QkYsCisJMHg0OCwgMHgzNSwgMHg0OCwgMHhCRiwKKwkweDU4LCAweDM1LCAweDU4LCAweEJGLAogCi0weDY4LCAweDM1LCAweDY4LCAweEJGLAotMHg0OSwgMHgzRCwgMHg0OSwgMHhCRiwKKwkweDY4LCAweDM1LCAweDY4LCAweEJGLAorCTB4NDksIDB4M0QsIDB4NDksIDB4QkYsCiAKLTB4NTksIDB4M0QsIDB4NTksIDB4QkYsCi0weDY5LCAweDNELCAweDY5LCAweEJGLAorCTB4NTksIDB4M0QsIDB4NTksIDB4QkYsCisJMHg2OSwgMHgzRCwgMHg2OSwgMHhCRiwKIAotMHg2MywgMHg2MywgMHgyRCwgMHhERiwKLTB4NEQsIDB4N0QsIDB4RjgsIDB4RUMsCisJMHg2MywgMHg2MywgMHgyRCwgMHhERiwKKwkweDRELCAweDdELCAweEY4LCAweEVDLAogCi0weDU5LCAweEUzLAotMHgwMCwgMHhFMCwKLTB4QjgsIDB4MzgsIDB4MzMsIDB4QkYsCisJMHg1OSwgMHhFMywKKwkweDAwLCAweEUwLAorCTB4QjgsIDB4MzgsIDB4MzMsIDB4QkYsCiAKLTB4MkQsIDB4NzMsCi0weDMwLCAweDc2LAotMHgxOCwgMHgzQSwgMHg0MSwgMHhFOSwKKwkweDJELCAweDczLAorCTB4MzAsIDB4NzYsCisJMHgxOCwgMHgzQSwgMHg0MSwgMHhFOSwKIAotMHgzRiwgMHg1MywgMHhBMCwgMHhFOCwKLTB4MDUsIDB4ODAsIDB4M0QsIDB4RUEsCisJMHgzRiwgMHg1MywgMHhBMCwgMHhFOCwKKwkweDA1LCAweDgwLCAweDNELCAweEVBLAogCi0weDM3LCAweDQzLCAweEEwLCAweEU4LAotMHgzRCwgMHg2MywgMHhBMCwgMHhFOCwKKwkweDM3LCAweDQzLCAweEEwLCAweEU4LAorCTB4M0QsIDB4NjMsIDB4QTAsIDB4RTgsCiAKLTB4NTAsIDB4NzAsIDB4RjgsIDB4RUMsCi0weDJCLCAweDUwLCAweDNDLCAweEU5LAorCTB4NTAsIDB4NzAsIDB4RjgsIDB4RUMsCisJMHgyQiwgMHg1MCwgMHgzQywgMHhFOSwKIAotMHgxRiwgMHgwRiwgMHhCQywgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgxRiwgMHgwRiwgMHhCQywgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDU5LCAweDc4LCAweEY4LCAweEVDLAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDU5LCAweDc4LCAweEY4LCAweEVDLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0weDE1LCAweEMwLCAweDIwLCAweEU5LAorCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCisJMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKIAotMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCisJMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKKwkweDE1LCAweEMwLCAweDIwLCAweEU5LAogCi0weDFFLCAweDEyLCAweDQxLCAweEU5LAotMHgxQSwgMHgyMiwgMHg0MSwgMHhFOSwKKwkweDFFLCAweDEyLCAweDQxLCAweEU5LAorCTB4MUEsIDB4MjIsIDB4NDEsIDB4RTksCiAKLTB4NDYsIDB4MzcsIDB4NDYsIDB4REYsCi0weDU2LCAweDNGLCAweDU2LCAweERGLAorCTB4NDYsIDB4MzcsIDB4NDYsIDB4REYsCisJMHg1NiwgMHgzRiwgMHg1NiwgMHhERiwKIAotMHgyQiwgMHg0MCwgMHgzRCwgMHhFOSwKLTB4NjYsIDB4M0QsIDB4NjYsIDB4REYsCisJMHgyQiwgMHg0MCwgMHgzRCwgMHhFOSwKKwkweDY2LCAweDNELCAweDY2LCAweERGLAogCi0weDFELCAweDMyLCAweDQxLCAweEU5LAotMHg2NywgMHgzRCwgMHg2NywgMHhERiwKKwkweDFELCAweDMyLCAweDQxLCAweEU5LAorCTB4NjcsIDB4M0QsIDB4NjcsIDB4REYsCiAKLTB4NDcsIDB4MzcsIDB4NDcsIDB4REYsCi0weDU3LCAweDNGLCAweDU3LCAweERGLAorCTB4NDcsIDB4MzcsIDB4NDcsIDB4REYsCisJMHg1NywgMHgzRiwgMHg1NywgMHhERiwKIAotMHgyQSwgMHg0MCwgMHgyMCwgMHhFOSwKLTB4NTksIDB4M0YsIDB4NTksIDB4REYsCisJMHgyQSwgMHg0MCwgMHgyMCwgMHhFOSwKKwkweDU5LCAweDNGLCAweDU5LCAweERGLAogCi0weDE2LCAweDMwLCAweDIwLCAweEU5LAotMHg2OSwgMHgzRCwgMHg2OSwgMHhERiwKKwkweDE2LCAweDMwLCAweDIwLCAweEU5LAorCTB4NjksIDB4M0QsIDB4NjksIDB4REYsCiAKLTB4NDgsIDB4MzcsIDB4NDgsIDB4REYsCi0weDU4LCAweDNGLCAweDU4LCAweERGLAorCTB4NDgsIDB4MzcsIDB4NDgsIDB4REYsCisJMHg1OCwgMHgzRiwgMHg1OCwgMHhERiwKIAotMHgxMiwgMHgxMiwgMHgyRCwgMHhERiwKLTB4MjIsIDB4MjIsIDB4MkQsIDB4REYsCisJMHgxMiwgMHgxMiwgMHgyRCwgMHhERiwKKwkweDIyLCAweDIyLCAweDJELCAweERGLAogCi0weDMyLCAweDMyLCAweDJELCAweERGLAotMHgzQSwgMHgzQSwgMHgyRCwgMHhERiwKKwkweDMyLCAweDMyLCAweDJELCAweERGLAorCTB4M0EsIDB4M0EsIDB4MkQsIDB4REYsCiAKLTB4NjgsIDB4M0QsIDB4NjgsIDB4REYsCi0weDQ5LCAweDM3LCAweDQ5LCAweERGLAorCTB4NjgsIDB4M0QsIDB4NjgsIDB4REYsCisJMHg0OSwgMHgzNywgMHg0OSwgMHhERiwKIAotMHgzRCwgMHhDRiwgMHg3NCwgMHhDMCwKLTB4MzcsIDB4Q0YsIDB4NzQsIDB4QzQsCisJMHgzRCwgMHhDRiwgMHg3NCwgMHhDMCwKKwkweDM3LCAweENGLCAweDc0LCAweEM0LAogCi0weDM5LCAweEU1LCAweDJDLCAweDlGLAotMHgzNCwgMHg4MCwgMHgyMCwgMHhFOSwKKwkweDM5LCAweEU1LCAweDJDLCAweDlGLAorCTB4MzQsIDB4ODAsIDB4MjAsIDB4RTksCiAKLTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHg4OCwgMHg3MywgMHg1RSwgMHhFOSwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHg4OCwgMHg3MywgMHg1RSwgMHhFOSwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDBGLCAweENGLCAweDc1LCAweEM2LAotMHgzQywgMHgzRCwgMHgyMCwgMHhFOSwKKwkweDBGLCAweENGLCAweDc1LCAweEM2LAorCTB4M0MsIDB4M0QsIDB4MjAsIDB4RTksCiAKLTB4MEEsIDB4NDQsIDB4NTQsIDB4QjAsCi0weDAyLCAweDQ0LCAweDY0LCAweEIwLAorCTB4MEEsIDB4NDQsIDB4NTQsIDB4QjAsCisJMHgwMiwgMHg0NCwgMHg2NCwgMHhCMCwKIAotMHgyQSwgMHg0NCwgMHg1NCwgMHhCMiwKLTB4MUEsIDB4NDQsIDB4NjQsIDB4QjIsCisJMHgyQSwgMHg0NCwgMHg1NCwgMHhCMiwKKwkweDFBLCAweDQ0LCAweDY0LCAweEIyLAogCi0weDI4LCAweDgwLCAweDNBLCAweEVBLAotMHgwQSwgMHgyMCwKLTB4MDIsIDB4MjAsCisJMHgyOCwgMHg4MCwgMHgzQSwgMHhFQSwKKwkweDBBLCAweDIwLAorCTB4MDIsIDB4MjAsCiAKLTB4M0QsIDB4Q0YsIDB4NzQsIDB4QzIsCi0weDJBLCAweDIwLAotMHgxQSwgMHgyMCwKKwkweDNELCAweENGLCAweDc0LCAweEMyLAorCTB4MkEsIDB4MjAsCisJMHgxQSwgMHgyMCwKIAotMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLTB4MzIsIDB4MzEsIDB4NUYsIDB4RTksCisJMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKKwkweDMyLCAweDMxLCAweDVGLCAweEU5LAogCi0weDM4LCAweDIxLCAweDJDLCAweDlGLAotMHgzMywgMHgzOSwgMHg1RiwgMHhFOSwKKwkweDM4LCAweDIxLCAweDJDLCAweDlGLAorCTB4MzMsIDB4MzksIDB4NUYsIDB4RTksCiAKLTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0weDMxLCAweDBGLCAweDIwLCAweEU5LAorCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCisJMHgzMSwgMHgwRiwgMHgyMCwgMHhFOSwKIAotMHgwQSwgMHg0NCwgMHg1NCwgMHhCNCwKLTB4MDIsIDB4NDQsIDB4NjQsIDB4QjQsCisJMHgwQSwgMHg0NCwgMHg1NCwgMHhCNCwKKwkweDAyLCAweDQ0LCAweDY0LCAweEI0LAogCi0weDJBLCAweDQ1LCAweDU1LCAweEI2LAotMHgxQSwgMHg0NSwgMHg2NSwgMHhCNiwKKwkweDJBLCAweDQ1LCAweDU1LCAweEI2LAorCTB4MUEsIDB4NDUsIDB4NjUsIDB4QjYsCiAKLTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0weDM4LCAweDNELCAweDIwLCAweEU5LAorCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCisJMHgzOCwgMHgzRCwgMHgyMCwgMHhFOSwKIAotMHgwQSwgMHgyMCwKLTB4MDIsIDB4MjAsCi0weDJBLCAweDIwLAotMHgxQSwgMHgyMCwKKwkweDBBLCAweDIwLAorCTB4MDIsIDB4MjAsCisJMHgyQSwgMHgyMCwKKwkweDFBLCAweDIwLAogCi0weDBBLCAweDQ3LCAweDU3LCAweEJGLAotMHgwMiwgMHg0NywgMHg2NywgMHhCRiwKKwkweDBBLCAweDQ3LCAweDU3LCAweEJGLAorCTB4MDIsIDB4NDcsIDB4NjcsIDB4QkYsCiAKLTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0weDNFLCAweDMwLCAweDRGLCAweEU5LAorCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCisJMHgzRSwgMHgzMCwgMHg0RiwgMHhFOSwKIAotMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLTB4M0YsIDB4MzgsIDB4NEYsIDB4RTksCisJMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKKwkweDNGLCAweDM4LCAweDRGLCAweEU5LAogCi0weDJBLCAweDQ2LCAweDU2LCAweEJGLAotMHgxQSwgMHg0NiwgMHg2NiwgMHhCRiwKKwkweDJBLCAweDQ2LCAweDU2LCAweEJGLAorCTB4MUEsIDB4NDYsIDB4NjYsIDB4QkYsCiAKLTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0weDNBLCAweDMxLCAweDRGLCAweEU5LAorCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCisJMHgzQSwgMHgzMSwgMHg0RiwgMHhFOSwKIAotMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLTB4M0IsIDB4MzksIDB4NEYsIDB4RTksCisJMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKKwkweDNCLCAweDM5LCAweDRGLCAweEU5LAogCi0weDMxLCAweDUzLCAweDJGLCAweDlGLAotMHgzNiwgMHgzMCwgMHg0RiwgMHhFOSwKKwkweDMxLCAweDUzLCAweDJGLCAweDlGLAorCTB4MzYsIDB4MzAsIDB4NEYsIDB4RTksCiAKLTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0weDM3LCAweDM4LCAweDRGLCAweEU5LAorCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCisJMHgzNywgMHgzOCwgMHg0RiwgMHhFOSwKIAotMHgyQSwgMHg0MywgMHg1MywgMHhCRiwKLTB4MUEsIDB4NDMsIDB4NjMsIDB4QkYsCisJMHgyQSwgMHg0MywgMHg1MywgMHhCRiwKKwkweDFBLCAweDQzLCAweDYzLCAweEJGLAogCi0weDMwLCAweDUwLCAweDJFLCAweDlGLAotMHgzNSwgMHgzMSwgMHg0RiwgMHhFOSwKKwkweDMwLCAweDUwLCAweDJFLCAweDlGLAorCTB4MzUsIDB4MzEsIDB4NEYsIDB4RTksCiAKLTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0weDM5LCAweDM5LCAweDRGLCAweEU5LAorCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCisJMHgzOSwgMHgzOSwgMHg0RiwgMHhFOSwKIAotMHgwQSwgMHg0OCwgMHg1OCwgMHhCRiwKLTB4MDIsIDB4NDgsIDB4NjgsIDB4QkYsCisJMHgwQSwgMHg0OCwgMHg1OCwgMHhCRiwKKwkweDAyLCAweDQ4LCAweDY4LCAweEJGLAogCi0weDMxLCAweDUzLCAweDJGLCAweDlGLAotMHg4MCwgMHgzMSwgMHg1NywgMHhFOSwKKwkweDMxLCAweDUzLCAweDJGLCAweDlGLAorCTB4ODAsIDB4MzEsIDB4NTcsIDB4RTksCiAKLTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0weDgxLCAweDM5LCAweDU3LCAweEU5LAorCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCisJMHg4MSwgMHgzOSwgMHg1NywgMHhFOSwKIAotMHgyQSwgMHg0OSwgMHg1OSwgMHhCRiwKLTB4MUEsIDB4NDksIDB4NjksIDB4QkYsCisJMHgyQSwgMHg0OSwgMHg1OSwgMHhCRiwKKwkweDFBLCAweDQ5LCAweDY5LCAweEJGLAogCi0weDMwLCAweDUwLCAweDJFLCAweDlGLAotMHg4MiwgMHgzMCwgMHg1NywgMHhFOSwKKwkweDMwLCAweDUwLCAweDJFLCAweDlGLAorCTB4ODIsIDB4MzAsIDB4NTcsIDB4RTksCiAKLTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0weDgzLCAweDM4LCAweDU3LCAweEU5LAorCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCisJMHg4MywgMHgzOCwgMHg1NywgMHhFOSwKIAotMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLTB4ODQsIDB4MzEsIDB4NUUsIDB4RTksCisJMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKKwkweDg0LCAweDMxLCAweDVFLCAweEU5LAogCi0weDM5LCAweEU1LCAweDJDLCAweDlGLAotMHg4NSwgMHgzOSwgMHg1RSwgMHhFOSwKKwkweDM5LCAweEU1LCAweDJDLCAweDlGLAorCTB4ODUsIDB4MzksIDB4NUUsIDB4RTksCiAKLTB4ODYsIDB4NzYsIDB4NTcsIDB4RTksCi0weDhBLCAweDM2LCAweDIwLCAweEU5LAorCTB4ODYsIDB4NzYsIDB4NTcsIDB4RTksCisJMHg4QSwgMHgzNiwgMHgyMCwgMHhFOSwKIAotMHg4NywgMHg3NywgMHg1NywgMHhFOSwKLTB4OEIsIDB4M0UsIDB4QkYsIDB4RUEsCisJMHg4NywgMHg3NywgMHg1NywgMHhFOSwKKwkweDhCLCAweDNFLCAweEJGLCAweEVBLAogCi0weDgwLCAweDMwLCAweDU3LCAweEU5LAotMHg4MSwgMHgzOCwgMHg1NywgMHhFOSwKKwkweDgwLCAweDMwLCAweDU3LCAweEU5LAorCTB4ODEsIDB4MzgsIDB4NTcsIDB4RTksCiAKLTB4ODIsIDB4MzEsIDB4NTcsIDB4RTksCi0weDg2LCAweDc4LCAweDU3LCAweEU5LAorCTB4ODIsIDB4MzEsIDB4NTcsIDB4RTksCisJMHg4NiwgMHg3OCwgMHg1NywgMHhFOSwKIAotMHg4MywgMHgzOSwgMHg1NywgMHhFOSwKLTB4ODcsIDB4NzksIDB4NTcsIDB4RTksCisJMHg4MywgMHgzOSwgMHg1NywgMHhFOSwKKwkweDg3LCAweDc5LCAweDU3LCAweEU5LAogCi0weDMwLCAweDFGLCAweDVGLCAweEU5LAotMHg4QSwgMHgzNCwgMHgyMCwgMHhFOSwKKwkweDMwLCAweDFGLCAweDVGLCAweEU5LAorCTB4OEEsIDB4MzQsIDB4MjAsIDB4RTksCiAKLTB4OEIsIDB4M0MsIDB4MjAsIDB4RTksCi0weDM3LCAweDUwLCAweDYwLCAweEJELAorCTB4OEIsIDB4M0MsIDB4MjAsIDB4RTksCisJMHgzNywgMHg1MCwgMHg2MCwgMHhCRCwKIAotMHg1NywgMHgwRCwgMHgyMCwgMHhFOSwKLTB4MzUsIDB4NTEsIDB4NjEsIDB4QkQsCisJMHg1NywgMHgwRCwgMHgyMCwgMHhFOSwKKwkweDM1LCAweDUxLCAweDYxLCAweEJELAogCi0weDJCLCAweDUwLCAweDIwLCAweEU5LAotMHgxRCwgMHgzNywgMHhFMSwgMHhFQSwKKwkweDJCLCAweDUwLCAweDIwLCAweEU5LAorCTB4MUQsIDB4MzcsIDB4RTEsIDB4RUEsCiAKLTB4MUUsIDB4MzUsIDB4RTEsIDB4RUEsCi0weDAwLCAweEUwLAotMHgwRSwgMHg3NywKKwkweDFFLCAweDM1LCAweEUxLCAweEVBLAorCTB4MDAsIDB4RTAsCisJMHgwRSwgMHg3NywKIAotMHgyNCwgMHg1MSwgMHgyMCwgMHhFOSwKLTB4OUEsIDB4RkYsIDB4MjAsIDB4RUEsCisJMHgyNCwgMHg1MSwgMHgyMCwgMHhFOSwKKwkweDlBLCAweEZGLCAweDIwLCAweEVBLAogCi0weDE2LCAweDBFLCAweDIwLCAweEU5LAotMHg1NywgMHgyRSwgMHhCRiwgMHhFQSwKKwkweDE2LCAweDBFLCAweDIwLCAweEU5LAorCTB4NTcsIDB4MkUsIDB4QkYsIDB4RUEsCiAKLTB4MEIsIDB4NDYsIDB4QTAsIDB4RTgsCi0weDFCLCAweDU2LCAweEEwLCAweEU4LAorCTB4MEIsIDB4NDYsIDB4QTAsIDB4RTgsCisJMHgxQiwgMHg1NiwgMHhBMCwgMHhFOCwKIAotMHgyQiwgMHg2NiwgMHhBMCwgMHhFOCwKLTB4MEMsIDB4NDcsIDB4QTAsIDB4RTgsCisJMHgyQiwgMHg2NiwgMHhBMCwgMHhFOCwKKwkweDBDLCAweDQ3LCAweEEwLCAweEU4LAogCi0weDFDLCAweDU3LCAweEEwLCAweEU4LAotMHgyQywgMHg2NywgMHhBMCwgMHhFOCwKKwkweDFDLCAweDU3LCAweEEwLCAweEU4LAorCTB4MkMsIDB4NjcsIDB4QTAsIDB4RTgsCiAKLTB4MEIsIDB4MDAsCi0weDFCLCAweDAwLAotMHgyQiwgMHgwMCwKLTB4MDAsIDB4RTAsCisJMHgwQiwgMHgwMCwKKwkweDFCLCAweDAwLAorCTB4MkIsIDB4MDAsCisJMHgwMCwgMHhFMCwKIAotMHgwQywgMHgwMCwKLTB4MUMsIDB4MDAsCi0weDJDLCAweDAwLAotMHgwMCwgMHhFMCwKKwkweDBDLCAweDAwLAorCTB4MUMsIDB4MDAsCisJMHgyQywgMHgwMCwKKwkweDAwLCAweEUwLAogCi0weDBCLCAweDY1LAotMHgxQiwgMHg2NSwKLTB4MkIsIDB4NjUsCi0weDAwLCAweEUwLAorCTB4MEIsIDB4NjUsCisJMHgxQiwgMHg2NSwKKwkweDJCLCAweDY1LAorCTB4MDAsIDB4RTAsCiAKLTB4MEMsIDB4NjUsCi0weDFDLCAweDY1LAotMHgyQywgMHg2NSwKLTB4MDAsIDB4RTAsCisJMHgwQywgMHg2NSwKKwkweDFDLCAweDY1LAorCTB4MkMsIDB4NjUsCisJMHgwMCwgMHhFMCwKIAotMHgwQiwgMHgxQiwgMHg2MCwgMHhFQywKLTB4MzYsIDB4RDcsIDB4MzYsIDB4QUQsCisJMHgwQiwgMHgxQiwgMHg2MCwgMHhFQywKKwkweDM2LCAweEQ3LCAweDM2LCAweEFELAogCi0weDJCLCAweDgwLCAweDYwLCAweEVDLAotMHgwQywgMHgxQywgMHg2MCwgMHhFQywKKwkweDJCLCAweDgwLCAweDYwLCAweEVDLAorCTB4MEMsIDB4MUMsIDB4NjAsIDB4RUMsCiAKLTB4M0UsIDB4RDcsIDB4M0UsIDB4QUQsCi0weDJDLCAweDgwLCAweDYwLCAweEVDLAorCTB4M0UsIDB4RDcsIDB4M0UsIDB4QUQsCisJMHgyQywgMHg4MCwgMHg2MCwgMHhFQywKIAotMHgwQiwgMHgyQiwgMHhERSwgMHhFOCwKLTB4MUIsIDB4ODAsIDB4REUsIDB4RTgsCisJMHgwQiwgMHgyQiwgMHhERSwgMHhFOCwKKwkweDFCLCAweDgwLCAweERFLCAweEU4LAogCi0weDM2LCAweDgwLCAweDM2LCAweEJELAotMHgzRSwgMHg4MCwgMHgzRSwgMHhCRCwKKwkweDM2LCAweDgwLCAweDM2LCAweEJELAorCTB4M0UsIDB4ODAsIDB4M0UsIDB4QkQsCiAKLTB4MzMsIDB4RDcsIDB4MEIsIDB4QkQsCi0weDNCLCAweEQ3LCAweDFCLCAweEJELAorCTB4MzMsIDB4RDcsIDB4MEIsIDB4QkQsCisJMHgzQiwgMHhENywgMHgxQiwgMHhCRCwKIAotMHg0NiwgMHg4MCwgMHg0NiwgMHhDRiwKLTB4NTcsIDB4ODAsIDB4NTcsIDB4Q0YsCisJMHg0NiwgMHg4MCwgMHg0NiwgMHhDRiwKKwkweDU3LCAweDgwLCAweDU3LCAweENGLAogCi0weDY2LCAweDMzLCAweDY2LCAweENGLAotMHg0NywgMHgzQiwgMHg0NywgMHhDRiwKKwkweDY2LCAweDMzLCAweDY2LCAweENGLAorCTB4NDcsIDB4M0IsIDB4NDcsIDB4Q0YsCiAKLTB4NTYsIDB4MzMsIDB4NTYsIDB4Q0YsCi0weDY3LCAweDNCLCAweDY3LCAweENGLAorCTB4NTYsIDB4MzMsIDB4NTYsIDB4Q0YsCisJMHg2NywgMHgzQiwgMHg2NywgMHhDRiwKIAotMHgwQiwgMHg0OCwgMHhBMCwgMHhFOCwKLTB4MUIsIDB4NTgsIDB4QTAsIDB4RTgsCisJMHgwQiwgMHg0OCwgMHhBMCwgMHhFOCwKKwkweDFCLCAweDU4LCAweEEwLCAweEU4LAogCi0weDJCLCAweDY4LCAweEEwLCAweEU4LAotMHgwQywgMHg0OSwgMHhBMCwgMHhFOCwKKwkweDJCLCAweDY4LCAweEEwLCAweEU4LAorCTB4MEMsIDB4NDksIDB4QTAsIDB4RTgsCiAKLTB4MUMsIDB4NTksIDB4QTAsIDB4RTgsCi0weDJDLCAweDY5LCAweEEwLCAweEU4LAorCTB4MUMsIDB4NTksIDB4QTAsIDB4RTgsCisJMHgyQywgMHg2OSwgMHhBMCwgMHhFOCwKIAotMHgwQiwgMHgwMCwKLTB4MUIsIDB4MDAsCi0weDJCLCAweDAwLAotMHgwMCwgMHhFMCwKKwkweDBCLCAweDAwLAorCTB4MUIsIDB4MDAsCisJMHgyQiwgMHgwMCwKKwkweDAwLCAweEUwLAogCi0weDBDLCAweDAwLAotMHgxQywgMHgwMCwKLTB4MkMsIDB4MDAsCi0weDAwLCAweEUwLAorCTB4MEMsIDB4MDAsCisJMHgxQywgMHgwMCwKKwkweDJDLCAweDAwLAorCTB4MDAsIDB4RTAsCiAKLTB4MEIsIDB4NjUsCi0weDFCLCAweDY1LAotMHgyQiwgMHg2NSwKLTB4MDAsIDB4RTAsCisJMHgwQiwgMHg2NSwKKwkweDFCLCAweDY1LAorCTB4MkIsIDB4NjUsCisJMHgwMCwgMHhFMCwKIAotMHgwQywgMHg2NSwKLTB4MUMsIDB4NjUsCi0weDJDLCAweDY1LAotMHgwMCwgMHhFMCwKKwkweDBDLCAweDY1LAorCTB4MUMsIDB4NjUsCisJMHgyQywgMHg2NSwKKwkweDAwLCAweEUwLAogCi0weDBCLCAweDFCLCAweDYwLCAweEVDLAotMHgzNCwgMHhENywgMHgzNCwgMHhBRCwKKwkweDBCLCAweDFCLCAweDYwLCAweEVDLAorCTB4MzQsIDB4RDcsIDB4MzQsIDB4QUQsCiAKLTB4MkIsIDB4ODAsIDB4NjAsIDB4RUMsCi0weDBDLCAweDFDLCAweDYwLCAweEVDLAorCTB4MkIsIDB4ODAsIDB4NjAsIDB4RUMsCisJMHgwQywgMHgxQywgMHg2MCwgMHhFQywKIAotMHgzQywgMHhENywgMHgzQywgMHhBRCwKLTB4MkMsIDB4ODAsIDB4NjAsIDB4RUMsCisJMHgzQywgMHhENywgMHgzQywgMHhBRCwKKwkweDJDLCAweDgwLCAweDYwLCAweEVDLAogCi0weDBCLCAweDJCLCAweERFLCAweEU4LAotMHgxQiwgMHg4MCwgMHhERSwgMHhFOCwKKwkweDBCLCAweDJCLCAweERFLCAweEU4LAorCTB4MUIsIDB4ODAsIDB4REUsIDB4RTgsCiAKLTB4MzQsIDB4ODAsIDB4MzQsIDB4QkQsCi0weDNDLCAweDgwLCAweDNDLCAweEJELAorCTB4MzQsIDB4ODAsIDB4MzQsIDB4QkQsCisJMHgzQywgMHg4MCwgMHgzQywgMHhCRCwKIAotMHgzMywgMHhENywgMHgwQiwgMHhCRCwKLTB4M0IsIDB4RDcsIDB4MUIsIDB4QkQsCisJMHgzMywgMHhENywgMHgwQiwgMHhCRCwKKwkweDNCLCAweEQ3LCAweDFCLCAweEJELAogCi0weDQ4LCAweDgwLCAweDQ4LCAweENGLAotMHg1OSwgMHg4MCwgMHg1OSwgMHhDRiwKKwkweDQ4LCAweDgwLCAweDQ4LCAweENGLAorCTB4NTksIDB4ODAsIDB4NTksIDB4Q0YsCiAKLTB4NjgsIDB4MzMsIDB4NjgsIDB4Q0YsCi0weDQ5LCAweDNCLCAweDQ5LCAweENGLAorCTB4NjgsIDB4MzMsIDB4NjgsIDB4Q0YsCisJMHg0OSwgMHgzQiwgMHg0OSwgMHhDRiwKIAotMHhCQiwgMHhGRiwgMHgyMCwgMHhFQSwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHhCQiwgMHhGRiwgMHgyMCwgMHhFQSwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDU4LCAweDMzLCAweDU4LCAweENGLAotMHg2OSwgMHgzQiwgMHg2OSwgMHhDRiwKKwkweDU4LCAweDMzLCAweDU4LCAweENGLAorCTB4NjksIDB4M0IsIDB4NjksIDB4Q0YsCiAKLTB4NzgsIDB4RkYsIDB4MjAsIDB4RUEsCi0weDU3LCAweEMwLCAweEJGLCAweEVBLAorCTB4NzgsIDB4RkYsIDB4MjAsIDB4RUEsCisJMHg1NywgMHhDMCwgMHhCRiwgMHhFQSwKIAotMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKLTB4MDAsIDB4MDAsIDB4RDgsIDB4RUMsCisJMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKKwkweDAwLCAweDAwLCAweEQ4LCAweEVDLAogCiB9OwogCiBzdGF0aWMgdW5zaWduZWQgY2hhciB3YXJwX2c0MDBfdDJnenNbXSA9IHsKIAotMHgwMCwgMHg4QSwgMHg5OCwgMHhFOSwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4QSwgMHg5OCwgMHhFOSwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweEEwLCAweEU5LAotMHgwMCwgMHgwMCwgMHhEOCwgMHhFQywKKwkweDAwLCAweDgwLCAweEEwLCAweEU5LAorCTB4MDAsIDB4MDAsIDB4RDgsIDB4RUMsCiAKLTB4RkYsIDB4ODAsIDB4QzAsIDB4RTksCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4RkYsIDB4ODAsIDB4QzAsIDB4RTksCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwQSwgMHg0MCwgMHg1MCwgMHhCRiwKLTB4MkEsIDB4NDAsIDB4NjAsIDB4QkYsCisJMHgwQSwgMHg0MCwgMHg1MCwgMHhCRiwKKwkweDJBLCAweDQwLCAweDYwLCAweEJGLAogCi0weDMyLCAweDQxLCAweDUxLCAweEJGLAotMHgzQSwgMHg0MSwgMHg2MSwgMHhCRiwKKwkweDMyLCAweDQxLCAweDUxLCAweEJGLAorCTB4M0EsIDB4NDEsIDB4NjEsIDB4QkYsCiAKLTB4QzMsIDB4NkIsCi0weEQzLCAweDZCLAotMHgwMCwgMHg4QSwgMHg5OCwgMHhFOSwKKwkweEMzLCAweDZCLAorCTB4RDMsIDB4NkIsCisJMHgwMCwgMHg4QSwgMHg5OCwgMHhFOSwKIAotMHg3MywgMHg3QiwgMHhDOCwgMHhFQywKLTB4OTYsIDB4RTIsCi0weDQxLCAweDA0LAorCTB4NzMsIDB4N0IsIDB4QzgsIDB4RUMsCisJMHg5NiwgMHhFMiwKKwkweDQxLCAweDA0LAogCi0weDdCLCAweDQzLCAweEEwLCAweEU4LAotMHg3MywgMHg1MywgMHhBMCwgMHhFOCwKKwkweDdCLCAweDQzLCAweEEwLCAweEU4LAorCTB4NzMsIDB4NTMsIDB4QTAsIDB4RTgsCiAKLTB4QUQsIDB4RUUsIDB4MjMsIDB4OUYsCi0weDAwLCAweEUwLAotMHg1MSwgMHgwNCwKKwkweEFELCAweEVFLCAweDIzLCAweDlGLAorCTB4MDAsIDB4RTAsCisJMHg1MSwgMHgwNCwKIAotMHg5MCwgMHhFMiwKLTB4NjEsIDB4MDQsCi0weDMxLCAweDQ2LCAweEIxLCAweEU4LAorCTB4OTAsIDB4RTIsCisJMHg2MSwgMHgwNCwKKwkweDMxLCAweDQ2LCAweEIxLCAweEU4LAogCi0weDUxLCAweDQxLCAweEUwLCAweEVDLAotMHgzOSwgMHg2NywgMHhCMSwgMHhFOCwKKwkweDUxLCAweDQxLCAweEUwLCAweEVDLAorCTB4MzksIDB4NjcsIDB4QjEsIDB4RTgsCiAKLTB4MDAsIDB4MDQsCi0weDQ2LCAweEUyLAotMHg3MywgMHg2MywgMHhBMCwgMHhFOCwKKwkweDAwLCAweDA0LAorCTB4NDYsIDB4RTIsCisJMHg3MywgMHg2MywgMHhBMCwgMHhFOCwKIAotMHg2MSwgMHg0MSwgMHhFMCwgMHhFQywKLTB4MzEsIDB4MDAsCi0weDM5LCAweDAwLAorCTB4NjEsIDB4NDEsIDB4RTAsIDB4RUMsCisJMHgzMSwgMHgwMCwKKwkweDM5LCAweDAwLAogCi0weDg1LCAweDgwLCAweDE1LCAweEVBLAotMHgxMCwgMHgwNCwKLTB4MjAsIDB4MDQsCisJMHg4NSwgMHg4MCwgMHgxNSwgMHhFQSwKKwkweDEwLCAweDA0LAorCTB4MjAsIDB4MDQsCiAKLTB4NjEsIDB4NTEsIDB4RTAsIDB4RUMsCi0weDJGLCAweDQxLCAweDYwLCAweEVBLAorCTB4NjEsIDB4NTEsIDB4RTAsIDB4RUMsCisJMHgyRiwgMHg0MSwgMHg2MCwgMHhFQSwKIAotMHgzMSwgMHgyMCwKLTB4MzksIDB4MjAsCi0weDFGLCAweDQyLCAweEEwLCAweEU4LAorCTB4MzEsIDB4MjAsCisJMHgzOSwgMHgyMCwKKwkweDFGLCAweDQyLCAweEEwLCAweEU4LAogCi0weDJBLCAweDQyLCAweDUyLCAweEJGLAotMHgwRiwgMHg1MiwgMHhBMCwgMHhFOCwKKwkweDJBLCAweDQyLCAweDUyLCAweEJGLAorCTB4MEYsIDB4NTIsIDB4QTAsIDB4RTgsCiAKLTB4MUEsIDB4NDIsIDB4NjIsIDB4QkYsCi0weDFFLCAweDUxLCAweDYwLCAweEVBLAorCTB4MUEsIDB4NDIsIDB4NjIsIDB4QkYsCisJMHgxRSwgMHg1MSwgMHg2MCwgMHhFQSwKIAotMHg3MywgMHg3QiwgMHhDOCwgMHhFQywKLTB4MEUsIDB4NjEsIDB4NjAsIDB4RUEsCisJMHg3MywgMHg3QiwgMHhDOCwgMHhFQywKKwkweDBFLCAweDYxLCAweDYwLCAweEVBLAogCi0weDMyLCAweDQwLCAweDUwLCAweEJELAotMHgyMiwgMHg0MCwgMHg2MCwgMHhCRCwKKwkweDMyLCAweDQwLCAweDUwLCAweEJELAorCTB4MjIsIDB4NDAsIDB4NjAsIDB4QkQsCiAKLTB4MTIsIDB4NDEsIDB4NTEsIDB4QkQsCi0weDNBLCAweDQxLCAweDYxLCAweEJELAorCTB4MTIsIDB4NDEsIDB4NTEsIDB4QkQsCisJMHgzQSwgMHg0MSwgMHg2MSwgMHhCRCwKIAotMHhCRiwgMHgyRiwgMHgwRSwgMHhCRCwKLTB4OTcsIDB4RTIsCi0weDdCLCAweDcyLAorCTB4QkYsIDB4MkYsIDB4MEUsIDB4QkQsCisJMHg5NywgMHhFMiwKKwkweDdCLCAweDcyLAogCi0weDMyLCAweDIwLAotMHgyMiwgMHgyMCwKLTB4MTIsIDB4MjAsCi0weDNBLCAweDIwLAorCTB4MzIsIDB4MjAsCisJMHgyMiwgMHgyMCwKKwkweDEyLCAweDIwLAorCTB4M0EsIDB4MjAsCiAKLTB4MzUsIDB4NDgsIDB4QjEsIDB4RTgsCi0weDNELCAweDU5LCAweEIxLCAweEU4LAorCTB4MzUsIDB4NDgsIDB4QjEsIDB4RTgsCisJMHgzRCwgMHg1OSwgMHhCMSwgMHhFOCwKIAotMHg0NiwgMHgzMSwgMHg0NiwgMHhCRiwKLTB4NTYsIDB4MzEsIDB4NTYsIDB4QkYsCisJMHg0NiwgMHgzMSwgMHg0NiwgMHhCRiwKKwkweDU2LCAweDMxLCAweDU2LCAweEJGLAogCi0weEIzLCAweEUyLCAweDJELCAweDlGLAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweEIzLCAweEUyLCAweDJELCAweDlGLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4NjYsIDB4MzEsIDB4NjYsIDB4QkYsCi0weDQ3LCAweDM5LCAweDQ3LCAweEJGLAorCTB4NjYsIDB4MzEsIDB4NjYsIDB4QkYsCisJMHg0NywgMHgzOSwgMHg0NywgMHhCRiwKIAotMHg1NywgMHgzOSwgMHg1NywgMHhCRiwKLTB4NjcsIDB4MzksIDB4NjcsIDB4QkYsCisJMHg1NywgMHgzOSwgMHg1NywgMHhCRiwKKwkweDY3LCAweDM5LCAweDY3LCAweEJGLAogCi0weDc2LCAweDgwLCAweDA3LCAweEVBLAotMHgyNCwgMHg0MSwgMHgyMCwgMHhFOSwKKwkweDc2LCAweDgwLCAweDA3LCAweEVBLAorCTB4MjQsIDB4NDEsIDB4MjAsIDB4RTksCiAKLTB4MzUsIDB4MDAsCi0weDNELCAweDAwLAotMHgwMCwgMHhFMCwKLTB4MkQsIDB4NzMsCisJMHgzNSwgMHgwMCwKKwkweDNELCAweDAwLAorCTB4MDAsIDB4RTAsCisJMHgyRCwgMHg3MywKIAotMHgzMywgMHg3MiwKLTB4MEMsIDB4RTMsCi0weDhELCAweDJGLCAweDFFLCAweEJELAorCTB4MzMsIDB4NzIsCisJMHgwQywgMHhFMywKKwkweDhELCAweDJGLCAweDFFLCAweEJELAogCi0weDQzLCAweDc1LCAweEY4LCAweEVDLAotMHgzNSwgMHgyMCwKLTB4M0QsIDB4MjAsCisJMHg0MywgMHg3NSwgMHhGOCwgMHhFQywKKwkweDM1LCAweDIwLAorCTB4M0QsIDB4MjAsCiAKLTB4NDMsIDB4NDMsIDB4MkQsIDB4REYsCi0weDUzLCAweDUzLCAweDJELCAweERGLAorCTB4NDMsIDB4NDMsIDB4MkQsIDB4REYsCisJMHg1MywgMHg1MywgMHgyRCwgMHhERiwKIAotMHhBRSwgMHgxRSwgMHgwRSwgMHhCRCwKLTB4NTgsIDB4RTMsCi0weDMzLCAweDY2LAorCTB4QUUsIDB4MUUsIDB4MEUsIDB4QkQsCisJMHg1OCwgMHhFMywKKwkweDMzLCAweDY2LAogCi0weDQ4LCAweDM1LCAweDQ4LCAweEJGLAotMHg1OCwgMHgzNSwgMHg1OCwgMHhCRiwKKwkweDQ4LCAweDM1LCAweDQ4LCAweEJGLAorCTB4NTgsIDB4MzUsIDB4NTgsIDB4QkYsCiAKLTB4NjgsIDB4MzUsIDB4NjgsIDB4QkYsCi0weDQ5LCAweDNELCAweDQ5LCAweEJGLAorCTB4NjgsIDB4MzUsIDB4NjgsIDB4QkYsCisJMHg0OSwgMHgzRCwgMHg0OSwgMHhCRiwKIAotMHg1OSwgMHgzRCwgMHg1OSwgMHhCRiwKLTB4NjksIDB4M0QsIDB4NjksIDB4QkYsCisJMHg1OSwgMHgzRCwgMHg1OSwgMHhCRiwKKwkweDY5LCAweDNELCAweDY5LCAweEJGLAogCi0weDYzLCAweDYzLCAweDJELCAweERGLAotMHg0RCwgMHg3RCwgMHhGOCwgMHhFQywKKwkweDYzLCAweDYzLCAweDJELCAweERGLAorCTB4NEQsIDB4N0QsIDB4RjgsIDB4RUMsCiAKLTB4NTksIDB4RTMsCi0weDAwLCAweEUwLAotMHhCOCwgMHgzOCwgMHgzMywgMHhCRiwKKwkweDU5LCAweEUzLAorCTB4MDAsIDB4RTAsCisJMHhCOCwgMHgzOCwgMHgzMywgMHhCRiwKIAotMHgyRCwgMHg3MywKLTB4MzAsIDB4NzYsCi0weDE4LCAweDNBLCAweDQxLCAweEU5LAorCTB4MkQsIDB4NzMsCisJMHgzMCwgMHg3NiwKKwkweDE4LCAweDNBLCAweDQxLCAweEU5LAogCi0weDNGLCAweDUzLCAweEEwLCAweEU4LAotMHgwNSwgMHg4MCwgMHgzRCwgMHhFQSwKKwkweDNGLCAweDUzLCAweEEwLCAweEU4LAorCTB4MDUsIDB4ODAsIDB4M0QsIDB4RUEsCiAKLTB4MzcsIDB4NDMsIDB4QTAsIDB4RTgsCi0weDNELCAweDYzLCAweEEwLCAweEU4LAorCTB4MzcsIDB4NDMsIDB4QTAsIDB4RTgsCisJMHgzRCwgMHg2MywgMHhBMCwgMHhFOCwKIAotMHg1MCwgMHg3MCwgMHhGOCwgMHhFQywKLTB4MkIsIDB4NTAsIDB4M0MsIDB4RTksCisJMHg1MCwgMHg3MCwgMHhGOCwgMHhFQywKKwkweDJCLCAweDUwLCAweDNDLCAweEU5LAogCi0weDFGLCAweDBGLCAweEJDLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDFGLCAweDBGLCAweEJDLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4NTksIDB4NzgsIDB4RjgsIDB4RUMsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4NTksIDB4NzgsIDB4RjgsIDB4RUMsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCisJMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKKwkweDE1LCAweEMwLCAweDIwLCAweEU5LAogCi0weDE1LCAweEMwLCAweDIwLCAweEU5LAotMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKKwkweDE1LCAweEMwLCAweDIwLCAweEU5LAorCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCiAKLTB4MUUsIDB4MTIsIDB4NDEsIDB4RTksCi0weDFBLCAweDIyLCAweDQxLCAweEU5LAorCTB4MUUsIDB4MTIsIDB4NDEsIDB4RTksCisJMHgxQSwgMHgyMiwgMHg0MSwgMHhFOSwKIAotMHg0NiwgMHgzNywgMHg0NiwgMHhERiwKLTB4NTYsIDB4M0YsIDB4NTYsIDB4REYsCisJMHg0NiwgMHgzNywgMHg0NiwgMHhERiwKKwkweDU2LCAweDNGLCAweDU2LCAweERGLAogCi0weDJCLCAweDQwLCAweDNELCAweEU5LAotMHg2NiwgMHgzRCwgMHg2NiwgMHhERiwKKwkweDJCLCAweDQwLCAweDNELCAweEU5LAorCTB4NjYsIDB4M0QsIDB4NjYsIDB4REYsCiAKLTB4MUQsIDB4MzIsIDB4NDEsIDB4RTksCi0weDY3LCAweDNELCAweDY3LCAweERGLAorCTB4MUQsIDB4MzIsIDB4NDEsIDB4RTksCisJMHg2NywgMHgzRCwgMHg2NywgMHhERiwKIAotMHg0NywgMHgzNywgMHg0NywgMHhERiwKLTB4NTcsIDB4M0YsIDB4NTcsIDB4REYsCisJMHg0NywgMHgzNywgMHg0NywgMHhERiwKKwkweDU3LCAweDNGLCAweDU3LCAweERGLAogCi0weDJBLCAweDQwLCAweDIwLCAweEU5LAotMHg1OSwgMHgzRiwgMHg1OSwgMHhERiwKKwkweDJBLCAweDQwLCAweDIwLCAweEU5LAorCTB4NTksIDB4M0YsIDB4NTksIDB4REYsCiAKLTB4MTYsIDB4MzAsIDB4MjAsIDB4RTksCi0weDY5LCAweDNELCAweDY5LCAweERGLAorCTB4MTYsIDB4MzAsIDB4MjAsIDB4RTksCisJMHg2OSwgMHgzRCwgMHg2OSwgMHhERiwKIAotMHg0OCwgMHgzNywgMHg0OCwgMHhERiwKLTB4NTgsIDB4M0YsIDB4NTgsIDB4REYsCisJMHg0OCwgMHgzNywgMHg0OCwgMHhERiwKKwkweDU4LCAweDNGLCAweDU4LCAweERGLAogCi0weDY4LCAweDNELCAweDY4LCAweERGLAotMHg0OSwgMHgzNywgMHg0OSwgMHhERiwKKwkweDY4LCAweDNELCAweDY4LCAweERGLAorCTB4NDksIDB4MzcsIDB4NDksIDB4REYsCiAKLTB4MzIsIDB4MzIsIDB4MkQsIDB4REYsCi0weDIyLCAweDIyLCAweDJELCAweERGLAorCTB4MzIsIDB4MzIsIDB4MkQsIDB4REYsCisJMHgyMiwgMHgyMiwgMHgyRCwgMHhERiwKIAotMHgxMiwgMHgxMiwgMHgyRCwgMHhERiwKLTB4M0EsIDB4M0EsIDB4MkQsIDB4REYsCisJMHgxMiwgMHgxMiwgMHgyRCwgMHhERiwKKwkweDNBLCAweDNBLCAweDJELCAweERGLAogCi0weDBGLCAweENGLCAweDc0LCAweEMyLAotMHgzNywgMHhDRiwgMHg3NCwgMHhDNCwKKwkweDBGLCAweENGLCAweDc0LCAweEMyLAorCTB4MzcsIDB4Q0YsIDB4NzQsIDB4QzQsCiAKLTB4MEEsIDB4NDQsIDB4NTQsIDB4QjAsCi0weDAyLCAweDQ0LCAweDY0LCAweEIwLAorCTB4MEEsIDB4NDQsIDB4NTQsIDB4QjAsCisJMHgwMiwgMHg0NCwgMHg2NCwgMHhCMCwKIAotMHgzRCwgMHhDRiwgMHg3NCwgMHhDMCwKLTB4MzQsIDB4MzcsIDB4MjAsIDB4RTksCisJMHgzRCwgMHhDRiwgMHg3NCwgMHhDMCwKKwkweDM0LCAweDM3LCAweDIwLCAweEU5LAogCi0weDMxLCAweDUzLCAweDJGLCAweDlGLAotMHgzOCwgMHgwRiwgMHgyMCwgMHhFOSwKKwkweDMxLCAweDUzLCAweDJGLCAweDlGLAorCTB4MzgsIDB4MEYsIDB4MjAsIDB4RTksCiAKLTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0weDNDLCAweDNELCAweDIwLCAweEU5LAorCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCisJMHgzQywgMHgzRCwgMHgyMCwgMHhFOSwKIAotMHgyQSwgMHg0NCwgMHg1NCwgMHhCMiwKLTB4MUEsIDB4NDQsIDB4NjQsIDB4QjIsCisJMHgyQSwgMHg0NCwgMHg1NCwgMHhCMiwKKwkweDFBLCAweDQ0LCAweDY0LCAweEIyLAogCi0weDMxLCAweDgwLCAweDNBLCAweEVBLAotMHgwQSwgMHgyMCwKLTB4MDIsIDB4MjAsCisJMHgzMSwgMHg4MCwgMHgzQSwgMHhFQSwKKwkweDBBLCAweDIwLAorCTB4MDIsIDB4MjAsCiAKLTB4MEYsIDB4Q0YsIDB4NzUsIDB4QzAsCi0weDJBLCAweDIwLAotMHgxQSwgMHgyMCwKKwkweDBGLCAweENGLCAweDc1LCAweEMwLAorCTB4MkEsIDB4MjAsCisJMHgxQSwgMHgyMCwKIAotMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLTB4MzIsIDB4MzEsIDB4NUYsIDB4RTksCisJMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKKwkweDMyLCAweDMxLCAweDVGLCAweEU5LAogCi0weDM4LCAweDIxLCAweDJDLCAweDlGLAotMHgzMywgMHgzOSwgMHg1RiwgMHhFOSwKKwkweDM4LCAweDIxLCAweDJDLCAweDlGLAorCTB4MzMsIDB4MzksIDB4NUYsIDB4RTksCiAKLTB4M0QsIDB4Q0YsIDB4NzUsIDB4QzIsCi0weDM3LCAweENGLCAweDc1LCAweEM0LAorCTB4M0QsIDB4Q0YsIDB4NzUsIDB4QzIsCisJMHgzNywgMHhDRiwgMHg3NSwgMHhDNCwKIAotMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLTB4QTYsIDB4MEYsIDB4MjAsIDB4RTksCisJMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKKwkweEE2LCAweDBGLCAweDIwLCAweEU5LAogCi0weDM5LCAweEU1LCAweDJDLCAweDlGLAotMHhBMywgMHgzRCwgMHgyMCwgMHhFOSwKKwkweDM5LCAweEU1LCAweDJDLCAweDlGLAorCTB4QTMsIDB4M0QsIDB4MjAsIDB4RTksCiAKLTB4MkEsIDB4NDQsIDB4NTQsIDB4QjQsCi0weDFBLCAweDQ0LCAweDY0LCAweEI0LAorCTB4MkEsIDB4NDQsIDB4NTQsIDB4QjQsCisJMHgxQSwgMHg0NCwgMHg2NCwgMHhCNCwKIAotMHgwQSwgMHg0NSwgMHg1NSwgMHhCMCwKLTB4MDIsIDB4NDUsIDB4NjUsIDB4QjAsCisJMHgwQSwgMHg0NSwgMHg1NSwgMHhCMCwKKwkweDAyLCAweDQ1LCAweDY1LCAweEIwLAogCi0weDg4LCAweDczLCAweDVFLCAweEU5LAotMHgyQSwgMHgyMCwKLTB4MUEsIDB4MjAsCisJMHg4OCwgMHg3MywgMHg1RSwgMHhFOSwKKwkweDJBLCAweDIwLAorCTB4MUEsIDB4MjAsCiAKLTB4QTAsIDB4MzcsIDB4MjAsIDB4RTksCi0weDBBLCAweDIwLAotMHgwMiwgMHgyMCwKKwkweEEwLCAweDM3LCAweDIwLCAweEU5LAorCTB4MEEsIDB4MjAsCisJMHgwMiwgMHgyMCwKIAotMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLTB4M0UsIDB4MzAsIDB4NEYsIDB4RTksCisJMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKKwkweDNFLCAweDMwLCAweDRGLCAweEU5LAogCi0weDM5LCAweEU1LCAweDJDLCAweDlGLAotMHgzRiwgMHgzOCwgMHg0RiwgMHhFOSwKKwkweDM5LCAweEU1LCAweDJDLCAweDlGLAorCTB4M0YsIDB4MzgsIDB4NEYsIDB4RTksCiAKLTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0weDNBLCAweDMxLCAweDRGLCAweEU5LAorCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCisJMHgzQSwgMHgzMSwgMHg0RiwgMHhFOSwKIAotMHgyQSwgMHg0NSwgMHg1NSwgMHhCMiwKLTB4MUEsIDB4NDUsIDB4NjUsIDB4QjIsCisJMHgyQSwgMHg0NSwgMHg1NSwgMHhCMiwKKwkweDFBLCAweDQ1LCAweDY1LCAweEIyLAogCi0weDBBLCAweDQ1LCAweDU1LCAweEI0LAotMHgwMiwgMHg0NSwgMHg2NSwgMHhCNCwKKwkweDBBLCAweDQ1LCAweDU1LCAweEI0LAorCTB4MDIsIDB4NDUsIDB4NjUsIDB4QjQsCiAKLTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0weDNCLCAweDM5LCAweDRGLCAweEU5LAorCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCisJMHgzQiwgMHgzOSwgMHg0RiwgMHhFOSwKIAotMHgyQSwgMHgyMCwKLTB4MUEsIDB4MjAsCi0weDBBLCAweDIwLAotMHgwMiwgMHgyMCwKKwkweDJBLCAweDIwLAorCTB4MUEsIDB4MjAsCisJMHgwQSwgMHgyMCwKKwkweDAyLCAweDIwLAogCi0weDJBLCAweDQ2LCAweDU2LCAweEJGLAotMHgxQSwgMHg0NiwgMHg2NiwgMHhCRiwKKwkweDJBLCAweDQ2LCAweDU2LCAweEJGLAorCTB4MUEsIDB4NDYsIDB4NjYsIDB4QkYsCiAKLTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0weDM2LCAweDMxLCAweDRGLCAweEU5LAorCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCisJMHgzNiwgMHgzMSwgMHg0RiwgMHhFOSwKIAotMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLTB4MzcsIDB4MzksIDB4NEYsIDB4RTksCisJMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKKwkweDM3LCAweDM5LCAweDRGLCAweEU5LAogCi0weDMwLCAweDUwLCAweDJFLCAweDlGLAotMHhBNywgMHgzMCwgMHg0RiwgMHhFOSwKKwkweDMwLCAweDUwLCAweDJFLCAweDlGLAorCTB4QTcsIDB4MzAsIDB4NEYsIDB4RTksCiAKLTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0weEE4LCAweDM4LCAweDRGLCAweEU5LAorCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCisJMHhBOCwgMHgzOCwgMHg0RiwgMHhFOSwKIAotMHgwQSwgMHg0NywgMHg1NywgMHhCRiwKLTB4MDIsIDB4NDcsIDB4NjcsIDB4QkYsCisJMHgwQSwgMHg0NywgMHg1NywgMHhCRiwKKwkweDAyLCAweDQ3LCAweDY3LCAweEJGLAogCi0weDMxLCAweDUzLCAweDJGLCAweDlGLAotMHhBNCwgMHgzMSwgMHg0RiwgMHhFOSwKKwkweDMxLCAweDUzLCAweDJGLCAweDlGLAorCTB4QTQsIDB4MzEsIDB4NEYsIDB4RTksCiAKLTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0weEE1LCAweDM5LCAweDRGLCAweEU5LAorCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCisJMHhBNSwgMHgzOSwgMHg0RiwgMHhFOSwKIAotMHgyQSwgMHg0MywgMHg1MywgMHhCRiwKLTB4MUEsIDB4NDMsIDB4NjMsIDB4QkYsCisJMHgyQSwgMHg0MywgMHg1MywgMHhCRiwKKwkweDFBLCAweDQzLCAweDYzLCAweEJGLAogCi0weDMwLCAweDUwLCAweDJFLCAweDlGLAotMHhBMSwgMHgzMCwgMHg0RiwgMHhFOSwKKwkweDMwLCAweDUwLCAweDJFLCAweDlGLAorCTB4QTEsIDB4MzAsIDB4NEYsIDB4RTksCiAKLTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0weEEyLCAweDM4LCAweDRGLCAweEU5LAorCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCisJMHhBMiwgMHgzOCwgMHg0RiwgMHhFOSwKIAotMHgwQSwgMHg0OCwgMHg1OCwgMHhCRiwKLTB4MDIsIDB4NDgsIDB4NjgsIDB4QkYsCisJMHgwQSwgMHg0OCwgMHg1OCwgMHhCRiwKKwkweDAyLCAweDQ4LCAweDY4LCAweEJGLAogCi0weDMxLCAweDUzLCAweDJGLCAweDlGLAotMHg4MCwgMHgzMSwgMHg1NywgMHhFOSwKKwkweDMxLCAweDUzLCAweDJGLCAweDlGLAorCTB4ODAsIDB4MzEsIDB4NTcsIDB4RTksCiAKLTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0weDgxLCAweDM5LCAweDU3LCAweEU5LAorCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCisJMHg4MSwgMHgzOSwgMHg1NywgMHhFOSwKIAotMHgyQSwgMHg0OSwgMHg1OSwgMHhCRiwKLTB4MUEsIDB4NDksIDB4NjksIDB4QkYsCisJMHgyQSwgMHg0OSwgMHg1OSwgMHhCRiwKKwkweDFBLCAweDQ5LCAweDY5LCAweEJGLAogCi0weDMwLCAweDUwLCAweDJFLCAweDlGLAotMHg4MiwgMHgzMCwgMHg1NywgMHhFOSwKKwkweDMwLCAweDUwLCAweDJFLCAweDlGLAorCTB4ODIsIDB4MzAsIDB4NTcsIDB4RTksCiAKLTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0weDgzLCAweDM4LCAweDU3LCAweEU5LAorCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCisJMHg4MywgMHgzOCwgMHg1NywgMHhFOSwKIAotMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLTB4ODQsIDB4MzEsIDB4NUUsIDB4RTksCisJMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKKwkweDg0LCAweDMxLCAweDVFLCAweEU5LAogCi0weDM5LCAweEU1LCAweDJDLCAweDlGLAotMHg4NSwgMHgzOSwgMHg1RSwgMHhFOSwKKwkweDM5LCAweEU1LCAweDJDLCAweDlGLAorCTB4ODUsIDB4MzksIDB4NUUsIDB4RTksCiAKLTB4ODYsIDB4NzYsIDB4NTcsIDB4RTksCi0weDhBLCAweDM2LCAweDIwLCAweEU5LAorCTB4ODYsIDB4NzYsIDB4NTcsIDB4RTksCisJMHg4QSwgMHgzNiwgMHgyMCwgMHhFOSwKIAotMHg4NywgMHg3NywgMHg1NywgMHhFOSwKLTB4OEIsIDB4M0UsIDB4QkYsIDB4RUEsCisJMHg4NywgMHg3NywgMHg1NywgMHhFOSwKKwkweDhCLCAweDNFLCAweEJGLCAweEVBLAogCi0weDgwLCAweDMwLCAweDU3LCAweEU5LAotMHg4MSwgMHgzOCwgMHg1NywgMHhFOSwKKwkweDgwLCAweDMwLCAweDU3LCAweEU5LAorCTB4ODEsIDB4MzgsIDB4NTcsIDB4RTksCiAKLTB4ODIsIDB4MzEsIDB4NTcsIDB4RTksCi0weDg2LCAweDc4LCAweDU3LCAweEU5LAorCTB4ODIsIDB4MzEsIDB4NTcsIDB4RTksCisJMHg4NiwgMHg3OCwgMHg1NywgMHhFOSwKIAotMHg4MywgMHgzOSwgMHg1NywgMHhFOSwKLTB4ODcsIDB4NzksIDB4NTcsIDB4RTksCisJMHg4MywgMHgzOSwgMHg1NywgMHhFOSwKKwkweDg3LCAweDc5LCAweDU3LCAweEU5LAogCi0weDMwLCAweDFGLCAweDVGLCAweEU5LAotMHg4QSwgMHgzNCwgMHgyMCwgMHhFOSwKKwkweDMwLCAweDFGLCAweDVGLCAweEU5LAorCTB4OEEsIDB4MzQsIDB4MjAsIDB4RTksCiAKLTB4OEIsIDB4M0MsIDB4MjAsIDB4RTksCi0weDM3LCAweDUwLCAweDYwLCAweEJELAorCTB4OEIsIDB4M0MsIDB4MjAsIDB4RTksCisJMHgzNywgMHg1MCwgMHg2MCwgMHhCRCwKIAotMHg1NywgMHgwRCwgMHgyMCwgMHhFOSwKLTB4MzUsIDB4NTEsIDB4NjEsIDB4QkQsCisJMHg1NywgMHgwRCwgMHgyMCwgMHhFOSwKKwkweDM1LCAweDUxLCAweDYxLCAweEJELAogCi0weDJCLCAweDUwLCAweDIwLCAweEU5LAotMHgxRCwgMHgzNywgMHhFMSwgMHhFQSwKKwkweDJCLCAweDUwLCAweDIwLCAweEU5LAorCTB4MUQsIDB4MzcsIDB4RTEsIDB4RUEsCiAKLTB4MUUsIDB4MzUsIDB4RTEsIDB4RUEsCi0weDAwLCAweEUwLAotMHgwRSwgMHg3NywKKwkweDFFLCAweDM1LCAweEUxLCAweEVBLAorCTB4MDAsIDB4RTAsCisJMHgwRSwgMHg3NywKIAotMHgyNCwgMHg1MSwgMHgyMCwgMHhFOSwKLTB4OTIsIDB4RkYsIDB4MjAsIDB4RUEsCisJMHgyNCwgMHg1MSwgMHgyMCwgMHhFOSwKKwkweDkyLCAweEZGLCAweDIwLCAweEVBLAogCi0weDE2LCAweDBFLCAweDIwLCAweEU5LAotMHg1NywgMHgyRSwgMHhCRiwgMHhFQSwKKwkweDE2LCAweDBFLCAweDIwLCAweEU5LAorCTB4NTcsIDB4MkUsIDB4QkYsIDB4RUEsCiAKLTB4MEIsIDB4NDYsIDB4QTAsIDB4RTgsCi0weDFCLCAweDU2LCAweEEwLCAweEU4LAorCTB4MEIsIDB4NDYsIDB4QTAsIDB4RTgsCisJMHgxQiwgMHg1NiwgMHhBMCwgMHhFOCwKIAotMHgyQiwgMHg2NiwgMHhBMCwgMHhFOCwKLTB4MEMsIDB4NDcsIDB4QTAsIDB4RTgsCisJMHgyQiwgMHg2NiwgMHhBMCwgMHhFOCwKKwkweDBDLCAweDQ3LCAweEEwLCAweEU4LAogCi0weDFDLCAweDU3LCAweEEwLCAweEU4LAotMHgyQywgMHg2NywgMHhBMCwgMHhFOCwKKwkweDFDLCAweDU3LCAweEEwLCAweEU4LAorCTB4MkMsIDB4NjcsIDB4QTAsIDB4RTgsCiAKLTB4MEIsIDB4MDAsCi0weDFCLCAweDAwLAotMHgyQiwgMHgwMCwKLTB4MDAsIDB4RTAsCisJMHgwQiwgMHgwMCwKKwkweDFCLCAweDAwLAorCTB4MkIsIDB4MDAsCisJMHgwMCwgMHhFMCwKIAotMHgwQywgMHgwMCwKLTB4MUMsIDB4MDAsCi0weDJDLCAweDAwLAotMHgwMCwgMHhFMCwKKwkweDBDLCAweDAwLAorCTB4MUMsIDB4MDAsCisJMHgyQywgMHgwMCwKKwkweDAwLCAweEUwLAogCi0weDBCLCAweDY1LAotMHgxQiwgMHg2NSwKLTB4MkIsIDB4NjUsCi0weDAwLCAweEUwLAorCTB4MEIsIDB4NjUsCisJMHgxQiwgMHg2NSwKKwkweDJCLCAweDY1LAorCTB4MDAsIDB4RTAsCiAKLTB4MEMsIDB4NjUsCi0weDFDLCAweDY1LAotMHgyQywgMHg2NSwKLTB4MDAsIDB4RTAsCisJMHgwQywgMHg2NSwKKwkweDFDLCAweDY1LAorCTB4MkMsIDB4NjUsCisJMHgwMCwgMHhFMCwKIAotMHgwQiwgMHgxQiwgMHg2MCwgMHhFQywKLTB4MzYsIDB4RDcsIDB4MzYsIDB4QUQsCisJMHgwQiwgMHgxQiwgMHg2MCwgMHhFQywKKwkweDM2LCAweEQ3LCAweDM2LCAweEFELAogCi0weDJCLCAweDgwLCAweDYwLCAweEVDLAotMHgwQywgMHgxQywgMHg2MCwgMHhFQywKKwkweDJCLCAweDgwLCAweDYwLCAweEVDLAorCTB4MEMsIDB4MUMsIDB4NjAsIDB4RUMsCiAKLTB4M0UsIDB4RDcsIDB4M0UsIDB4QUQsCi0weDJDLCAweDgwLCAweDYwLCAweEVDLAorCTB4M0UsIDB4RDcsIDB4M0UsIDB4QUQsCisJMHgyQywgMHg4MCwgMHg2MCwgMHhFQywKIAotMHgwQiwgMHgyQiwgMHhERSwgMHhFOCwKLTB4MUIsIDB4ODAsIDB4REUsIDB4RTgsCisJMHgwQiwgMHgyQiwgMHhERSwgMHhFOCwKKwkweDFCLCAweDgwLCAweERFLCAweEU4LAogCi0weDM2LCAweDgwLCAweDM2LCAweEJELAotMHgzRSwgMHg4MCwgMHgzRSwgMHhCRCwKKwkweDM2LCAweDgwLCAweDM2LCAweEJELAorCTB4M0UsIDB4ODAsIDB4M0UsIDB4QkQsCiAKLTB4MzMsIDB4RDcsIDB4MEIsIDB4QkQsCi0weDNCLCAweEQ3LCAweDFCLCAweEJELAorCTB4MzMsIDB4RDcsIDB4MEIsIDB4QkQsCisJMHgzQiwgMHhENywgMHgxQiwgMHhCRCwKIAotMHg0NiwgMHg4MCwgMHg0NiwgMHhDRiwKLTB4NTcsIDB4ODAsIDB4NTcsIDB4Q0YsCisJMHg0NiwgMHg4MCwgMHg0NiwgMHhDRiwKKwkweDU3LCAweDgwLCAweDU3LCAweENGLAogCi0weDY2LCAweDMzLCAweDY2LCAweENGLAotMHg0NywgMHgzQiwgMHg0NywgMHhDRiwKKwkweDY2LCAweDMzLCAweDY2LCAweENGLAorCTB4NDcsIDB4M0IsIDB4NDcsIDB4Q0YsCiAKLTB4NTYsIDB4MzMsIDB4NTYsIDB4Q0YsCi0weDY3LCAweDNCLCAweDY3LCAweENGLAorCTB4NTYsIDB4MzMsIDB4NTYsIDB4Q0YsCisJMHg2NywgMHgzQiwgMHg2NywgMHhDRiwKIAotMHgwQiwgMHg0OCwgMHhBMCwgMHhFOCwKLTB4MUIsIDB4NTgsIDB4QTAsIDB4RTgsCisJMHgwQiwgMHg0OCwgMHhBMCwgMHhFOCwKKwkweDFCLCAweDU4LCAweEEwLCAweEU4LAogCi0weDJCLCAweDY4LCAweEEwLCAweEU4LAotMHgwQywgMHg0OSwgMHhBMCwgMHhFOCwKKwkweDJCLCAweDY4LCAweEEwLCAweEU4LAorCTB4MEMsIDB4NDksIDB4QTAsIDB4RTgsCiAKLTB4MUMsIDB4NTksIDB4QTAsIDB4RTgsCi0weDJDLCAweDY5LCAweEEwLCAweEU4LAorCTB4MUMsIDB4NTksIDB4QTAsIDB4RTgsCisJMHgyQywgMHg2OSwgMHhBMCwgMHhFOCwKIAotMHgwQiwgMHgwMCwKLTB4MUIsIDB4MDAsCi0weDJCLCAweDAwLAotMHgwMCwgMHhFMCwKKwkweDBCLCAweDAwLAorCTB4MUIsIDB4MDAsCisJMHgyQiwgMHgwMCwKKwkweDAwLCAweEUwLAogCi0weDBDLCAweDAwLAotMHgxQywgMHgwMCwKLTB4MkMsIDB4MDAsCi0weDAwLCAweEUwLAorCTB4MEMsIDB4MDAsCisJMHgxQywgMHgwMCwKKwkweDJDLCAweDAwLAorCTB4MDAsIDB4RTAsCiAKLTB4MEIsIDB4NjUsCi0weDFCLCAweDY1LAotMHgyQiwgMHg2NSwKLTB4MDAsIDB4RTAsCisJMHgwQiwgMHg2NSwKKwkweDFCLCAweDY1LAorCTB4MkIsIDB4NjUsCisJMHgwMCwgMHhFMCwKIAotMHgwQywgMHg2NSwKLTB4MUMsIDB4NjUsCi0weDJDLCAweDY1LAotMHgwMCwgMHhFMCwKKwkweDBDLCAweDY1LAorCTB4MUMsIDB4NjUsCisJMHgyQywgMHg2NSwKKwkweDAwLCAweEUwLAogCi0weDBCLCAweDFCLCAweDYwLCAweEVDLAotMHgzNCwgMHhENywgMHgzNCwgMHhBRCwKKwkweDBCLCAweDFCLCAweDYwLCAweEVDLAorCTB4MzQsIDB4RDcsIDB4MzQsIDB4QUQsCiAKLTB4MkIsIDB4ODAsIDB4NjAsIDB4RUMsCi0weDBDLCAweDFDLCAweDYwLCAweEVDLAorCTB4MkIsIDB4ODAsIDB4NjAsIDB4RUMsCisJMHgwQywgMHgxQywgMHg2MCwgMHhFQywKIAotMHgzQywgMHhENywgMHgzQywgMHhBRCwKLTB4MkMsIDB4ODAsIDB4NjAsIDB4RUMsCisJMHgzQywgMHhENywgMHgzQywgMHhBRCwKKwkweDJDLCAweDgwLCAweDYwLCAweEVDLAogCi0weDBCLCAweDJCLCAweERFLCAweEU4LAotMHgxQiwgMHg4MCwgMHhERSwgMHhFOCwKKwkweDBCLCAweDJCLCAweERFLCAweEU4LAorCTB4MUIsIDB4ODAsIDB4REUsIDB4RTgsCiAKLTB4MzQsIDB4ODAsIDB4MzQsIDB4QkQsCi0weDNDLCAweDgwLCAweDNDLCAweEJELAorCTB4MzQsIDB4ODAsIDB4MzQsIDB4QkQsCisJMHgzQywgMHg4MCwgMHgzQywgMHhCRCwKIAotMHgzMywgMHhENywgMHgwQiwgMHhCRCwKLTB4M0IsIDB4RDcsIDB4MUIsIDB4QkQsCisJMHgzMywgMHhENywgMHgwQiwgMHhCRCwKKwkweDNCLCAweEQ3LCAweDFCLCAweEJELAogCi0weDQ4LCAweDgwLCAweDQ4LCAweENGLAotMHg1OSwgMHg4MCwgMHg1OSwgMHhDRiwKKwkweDQ4LCAweDgwLCAweDQ4LCAweENGLAorCTB4NTksIDB4ODAsIDB4NTksIDB4Q0YsCiAKLTB4NjgsIDB4MzMsIDB4NjgsIDB4Q0YsCi0weDQ5LCAweDNCLCAweDQ5LCAweENGLAorCTB4NjgsIDB4MzMsIDB4NjgsIDB4Q0YsCisJMHg0OSwgMHgzQiwgMHg0OSwgMHhDRiwKIAotMHhCMiwgMHhGRiwgMHgyMCwgMHhFQSwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHhCMiwgMHhGRiwgMHgyMCwgMHhFQSwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDU4LCAweDMzLCAweDU4LCAweENGLAotMHg2OSwgMHgzQiwgMHg2OSwgMHhDRiwKKwkweDU4LCAweDMzLCAweDU4LCAweENGLAorCTB4NjksIDB4M0IsIDB4NjksIDB4Q0YsCiAKLTB4NzAsIDB4RkYsIDB4MjAsIDB4RUEsCi0weDU3LCAweEMwLCAweEJGLCAweEVBLAorCTB4NzAsIDB4RkYsIDB4MjAsIDB4RUEsCisJMHg1NywgMHhDMCwgMHhCRiwgMHhFQSwKIAotMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKLTB4MDAsIDB4MDAsIDB4RDgsIDB4RUMsCisJMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKKwkweDAwLCAweDAwLCAweEQ4LCAweEVDLAogCiB9OwogCiBzdGF0aWMgdW5zaWduZWQgY2hhciB3YXJwX2c0MDBfdDJnenNhW10gPSB7CiAKLTB4MDAsIDB4OEEsIDB4OTgsIDB4RTksCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4OEEsIDB4OTgsIDB4RTksCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKLTB4MDAsIDB4MDAsIDB4RDgsIDB4RUMsCisJMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKKwkweDAwLCAweDAwLCAweEQ4LCAweEVDLAogCi0weEZGLCAweDgwLCAweEMwLCAweEU5LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweEZGLCAweDgwLCAweEMwLCAweEU5LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MEEsIDB4NDAsIDB4NTAsIDB4QkYsCi0weDJBLCAweDQwLCAweDYwLCAweEJGLAorCTB4MEEsIDB4NDAsIDB4NTAsIDB4QkYsCisJMHgyQSwgMHg0MCwgMHg2MCwgMHhCRiwKIAotMHgzMiwgMHg0MSwgMHg1MSwgMHhCRiwKLTB4M0EsIDB4NDEsIDB4NjEsIDB4QkYsCisJMHgzMiwgMHg0MSwgMHg1MSwgMHhCRiwKKwkweDNBLCAweDQxLCAweDYxLCAweEJGLAogCi0weEMzLCAweDZCLAotMHhEMywgMHg2QiwKLTB4MDAsIDB4OEEsIDB4OTgsIDB4RTksCisJMHhDMywgMHg2QiwKKwkweEQzLCAweDZCLAorCTB4MDAsIDB4OEEsIDB4OTgsIDB4RTksCiAKLTB4NzMsIDB4N0IsIDB4QzgsIDB4RUMsCi0weDk2LCAweEUyLAotMHg0MSwgMHgwNCwKKwkweDczLCAweDdCLCAweEM4LCAweEVDLAorCTB4OTYsIDB4RTIsCisJMHg0MSwgMHgwNCwKIAotMHg3QiwgMHg0MywgMHhBMCwgMHhFOCwKLTB4NzMsIDB4NTMsIDB4QTAsIDB4RTgsCisJMHg3QiwgMHg0MywgMHhBMCwgMHhFOCwKKwkweDczLCAweDUzLCAweEEwLCAweEU4LAogCi0weEFELCAweEVFLCAweDIzLCAweDlGLAotMHgwMCwgMHhFMCwKLTB4NTEsIDB4MDQsCisJMHhBRCwgMHhFRSwgMHgyMywgMHg5RiwKKwkweDAwLCAweEUwLAorCTB4NTEsIDB4MDQsCiAKLTB4OTAsIDB4RTIsCi0weDYxLCAweDA0LAotMHgzMSwgMHg0NiwgMHhCMSwgMHhFOCwKKwkweDkwLCAweEUyLAorCTB4NjEsIDB4MDQsCisJMHgzMSwgMHg0NiwgMHhCMSwgMHhFOCwKIAotMHg1MSwgMHg0MSwgMHhFMCwgMHhFQywKLTB4MzksIDB4NjcsIDB4QjEsIDB4RTgsCisJMHg1MSwgMHg0MSwgMHhFMCwgMHhFQywKKwkweDM5LCAweDY3LCAweEIxLCAweEU4LAogCi0weDAwLCAweDA0LAotMHg0NiwgMHhFMiwKLTB4NzMsIDB4NjMsIDB4QTAsIDB4RTgsCisJMHgwMCwgMHgwNCwKKwkweDQ2LCAweEUyLAorCTB4NzMsIDB4NjMsIDB4QTAsIDB4RTgsCiAKLTB4NjEsIDB4NDEsIDB4RTAsIDB4RUMsCi0weDMxLCAweDAwLAotMHgzOSwgMHgwMCwKKwkweDYxLCAweDQxLCAweEUwLCAweEVDLAorCTB4MzEsIDB4MDAsCisJMHgzOSwgMHgwMCwKIAotMHg4QSwgMHg4MCwgMHgxNSwgMHhFQSwKLTB4MTAsIDB4MDQsCi0weDIwLCAweDA0LAorCTB4OEEsIDB4ODAsIDB4MTUsIDB4RUEsCisJMHgxMCwgMHgwNCwKKwkweDIwLCAweDA0LAogCi0weDYxLCAweDUxLCAweEUwLCAweEVDLAotMHgyRiwgMHg0MSwgMHg2MCwgMHhFQSwKKwkweDYxLCAweDUxLCAweEUwLCAweEVDLAorCTB4MkYsIDB4NDEsIDB4NjAsIDB4RUEsCiAKLTB4MzEsIDB4MjAsCi0weDM5LCAweDIwLAotMHgxRiwgMHg0MiwgMHhBMCwgMHhFOCwKKwkweDMxLCAweDIwLAorCTB4MzksIDB4MjAsCisJMHgxRiwgMHg0MiwgMHhBMCwgMHhFOCwKIAotMHgyQSwgMHg0MiwgMHg1MiwgMHhCRiwKLTB4MEYsIDB4NTIsIDB4QTAsIDB4RTgsCisJMHgyQSwgMHg0MiwgMHg1MiwgMHhCRiwKKwkweDBGLCAweDUyLCAweEEwLCAweEU4LAogCi0weDFBLCAweDQyLCAweDYyLCAweEJGLAotMHgxRSwgMHg1MSwgMHg2MCwgMHhFQSwKKwkweDFBLCAweDQyLCAweDYyLCAweEJGLAorCTB4MUUsIDB4NTEsIDB4NjAsIDB4RUEsCiAKLTB4NzMsIDB4N0IsIDB4QzgsIDB4RUMsCi0weDBFLCAweDYxLCAweDYwLCAweEVBLAorCTB4NzMsIDB4N0IsIDB4QzgsIDB4RUMsCisJMHgwRSwgMHg2MSwgMHg2MCwgMHhFQSwKIAotMHgzMiwgMHg0MCwgMHg1MCwgMHhCRCwKLTB4MjIsIDB4NDAsIDB4NjAsIDB4QkQsCisJMHgzMiwgMHg0MCwgMHg1MCwgMHhCRCwKKwkweDIyLCAweDQwLCAweDYwLCAweEJELAogCi0weDEyLCAweDQxLCAweDUxLCAweEJELAotMHgzQSwgMHg0MSwgMHg2MSwgMHhCRCwKKwkweDEyLCAweDQxLCAweDUxLCAweEJELAorCTB4M0EsIDB4NDEsIDB4NjEsIDB4QkQsCiAKLTB4QkYsIDB4MkYsIDB4MEUsIDB4QkQsCi0weDk3LCAweEUyLAotMHg3QiwgMHg3MiwKKwkweEJGLCAweDJGLCAweDBFLCAweEJELAorCTB4OTcsIDB4RTIsCisJMHg3QiwgMHg3MiwKIAotMHgzMiwgMHgyMCwKLTB4MjIsIDB4MjAsCi0weDEyLCAweDIwLAotMHgzQSwgMHgyMCwKKwkweDMyLCAweDIwLAorCTB4MjIsIDB4MjAsCisJMHgxMiwgMHgyMCwKKwkweDNBLCAweDIwLAogCi0weDM1LCAweDQ4LCAweEIxLCAweEU4LAotMHgzRCwgMHg1OSwgMHhCMSwgMHhFOCwKKwkweDM1LCAweDQ4LCAweEIxLCAweEU4LAorCTB4M0QsIDB4NTksIDB4QjEsIDB4RTgsCiAKLTB4NDYsIDB4MzEsIDB4NDYsIDB4QkYsCi0weDU2LCAweDMxLCAweDU2LCAweEJGLAorCTB4NDYsIDB4MzEsIDB4NDYsIDB4QkYsCisJMHg1NiwgMHgzMSwgMHg1NiwgMHhCRiwKIAotMHhCMywgMHhFMiwgMHgyRCwgMHg5RiwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHhCMywgMHhFMiwgMHgyRCwgMHg5RiwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDY2LCAweDMxLCAweDY2LCAweEJGLAotMHg0NywgMHgzOSwgMHg0NywgMHhCRiwKKwkweDY2LCAweDMxLCAweDY2LCAweEJGLAorCTB4NDcsIDB4MzksIDB4NDcsIDB4QkYsCiAKLTB4NTcsIDB4MzksIDB4NTcsIDB4QkYsCi0weDY3LCAweDM5LCAweDY3LCAweEJGLAorCTB4NTcsIDB4MzksIDB4NTcsIDB4QkYsCisJMHg2NywgMHgzOSwgMHg2NywgMHhCRiwKIAotMHg3QiwgMHg4MCwgMHgwNywgMHhFQSwKLTB4MjQsIDB4NDEsIDB4MjAsIDB4RTksCisJMHg3QiwgMHg4MCwgMHgwNywgMHhFQSwKKwkweDI0LCAweDQxLCAweDIwLCAweEU5LAogCi0weDM1LCAweDAwLAotMHgzRCwgMHgwMCwKLTB4MDAsIDB4RTAsCi0weDJELCAweDczLAorCTB4MzUsIDB4MDAsCisJMHgzRCwgMHgwMCwKKwkweDAwLCAweEUwLAorCTB4MkQsIDB4NzMsCiAKLTB4MzMsIDB4NzIsCi0weDBDLCAweEUzLAotMHg4RCwgMHgyRiwgMHgxRSwgMHhCRCwKKwkweDMzLCAweDcyLAorCTB4MEMsIDB4RTMsCisJMHg4RCwgMHgyRiwgMHgxRSwgMHhCRCwKIAotMHg0MywgMHg3NSwgMHhGOCwgMHhFQywKLTB4MzUsIDB4MjAsCi0weDNELCAweDIwLAorCTB4NDMsIDB4NzUsIDB4RjgsIDB4RUMsCisJMHgzNSwgMHgyMCwKKwkweDNELCAweDIwLAogCi0weDQzLCAweDQzLCAweDJELCAweERGLAotMHg1MywgMHg1MywgMHgyRCwgMHhERiwKKwkweDQzLCAweDQzLCAweDJELCAweERGLAorCTB4NTMsIDB4NTMsIDB4MkQsIDB4REYsCiAKLTB4QUUsIDB4MUUsIDB4MEUsIDB4QkQsCi0weDU4LCAweEUzLAotMHgzMywgMHg2NiwKKwkweEFFLCAweDFFLCAweDBFLCAweEJELAorCTB4NTgsIDB4RTMsCisJMHgzMywgMHg2NiwKIAotMHg0OCwgMHgzNSwgMHg0OCwgMHhCRiwKLTB4NTgsIDB4MzUsIDB4NTgsIDB4QkYsCisJMHg0OCwgMHgzNSwgMHg0OCwgMHhCRiwKKwkweDU4LCAweDM1LCAweDU4LCAweEJGLAogCi0weDY4LCAweDM1LCAweDY4LCAweEJGLAotMHg0OSwgMHgzRCwgMHg0OSwgMHhCRiwKKwkweDY4LCAweDM1LCAweDY4LCAweEJGLAorCTB4NDksIDB4M0QsIDB4NDksIDB4QkYsCiAKLTB4NTksIDB4M0QsIDB4NTksIDB4QkYsCi0weDY5LCAweDNELCAweDY5LCAweEJGLAorCTB4NTksIDB4M0QsIDB4NTksIDB4QkYsCisJMHg2OSwgMHgzRCwgMHg2OSwgMHhCRiwKIAotMHg2MywgMHg2MywgMHgyRCwgMHhERiwKLTB4NEQsIDB4N0QsIDB4RjgsIDB4RUMsCisJMHg2MywgMHg2MywgMHgyRCwgMHhERiwKKwkweDRELCAweDdELCAweEY4LCAweEVDLAogCi0weDU5LCAweEUzLAotMHgwMCwgMHhFMCwKLTB4QjgsIDB4MzgsIDB4MzMsIDB4QkYsCisJMHg1OSwgMHhFMywKKwkweDAwLCAweEUwLAorCTB4QjgsIDB4MzgsIDB4MzMsIDB4QkYsCiAKLTB4MkQsIDB4NzMsCi0weDMwLCAweDc2LAotMHgxOCwgMHgzQSwgMHg0MSwgMHhFOSwKKwkweDJELCAweDczLAorCTB4MzAsIDB4NzYsCisJMHgxOCwgMHgzQSwgMHg0MSwgMHhFOSwKIAotMHgzRiwgMHg1MywgMHhBMCwgMHhFOCwKLTB4MDUsIDB4ODAsIDB4M0QsIDB4RUEsCisJMHgzRiwgMHg1MywgMHhBMCwgMHhFOCwKKwkweDA1LCAweDgwLCAweDNELCAweEVBLAogCi0weDM3LCAweDQzLCAweEEwLCAweEU4LAotMHgzRCwgMHg2MywgMHhBMCwgMHhFOCwKKwkweDM3LCAweDQzLCAweEEwLCAweEU4LAorCTB4M0QsIDB4NjMsIDB4QTAsIDB4RTgsCiAKLTB4NTAsIDB4NzAsIDB4RjgsIDB4RUMsCi0weDJCLCAweDUwLCAweDNDLCAweEU5LAorCTB4NTAsIDB4NzAsIDB4RjgsIDB4RUMsCisJMHgyQiwgMHg1MCwgMHgzQywgMHhFOSwKIAotMHgxRiwgMHgwRiwgMHhCQywgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgxRiwgMHgwRiwgMHhCQywgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDU5LCAweDc4LCAweEY4LCAweEVDLAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDU5LCAweDc4LCAweEY4LCAweEVDLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0weDE1LCAweEMwLCAweDIwLCAweEU5LAorCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCisJMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKIAotMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCisJMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKKwkweDE1LCAweEMwLCAweDIwLCAweEU5LAogCi0weDFFLCAweDEyLCAweDQxLCAweEU5LAotMHgxQSwgMHgyMiwgMHg0MSwgMHhFOSwKKwkweDFFLCAweDEyLCAweDQxLCAweEU5LAorCTB4MUEsIDB4MjIsIDB4NDEsIDB4RTksCiAKLTB4NDYsIDB4MzcsIDB4NDYsIDB4REYsCi0weDU2LCAweDNGLCAweDU2LCAweERGLAorCTB4NDYsIDB4MzcsIDB4NDYsIDB4REYsCisJMHg1NiwgMHgzRiwgMHg1NiwgMHhERiwKIAotMHgyQiwgMHg0MCwgMHgzRCwgMHhFOSwKLTB4NjYsIDB4M0QsIDB4NjYsIDB4REYsCisJMHgyQiwgMHg0MCwgMHgzRCwgMHhFOSwKKwkweDY2LCAweDNELCAweDY2LCAweERGLAogCi0weDFELCAweDMyLCAweDQxLCAweEU5LAotMHg2NywgMHgzRCwgMHg2NywgMHhERiwKKwkweDFELCAweDMyLCAweDQxLCAweEU5LAorCTB4NjcsIDB4M0QsIDB4NjcsIDB4REYsCiAKLTB4NDcsIDB4MzcsIDB4NDcsIDB4REYsCi0weDU3LCAweDNGLCAweDU3LCAweERGLAorCTB4NDcsIDB4MzcsIDB4NDcsIDB4REYsCisJMHg1NywgMHgzRiwgMHg1NywgMHhERiwKIAotMHgyQSwgMHg0MCwgMHgyMCwgMHhFOSwKLTB4NTksIDB4M0YsIDB4NTksIDB4REYsCisJMHgyQSwgMHg0MCwgMHgyMCwgMHhFOSwKKwkweDU5LCAweDNGLCAweDU5LCAweERGLAogCi0weDE2LCAweDMwLCAweDIwLCAweEU5LAotMHg2OSwgMHgzRCwgMHg2OSwgMHhERiwKKwkweDE2LCAweDMwLCAweDIwLCAweEU5LAorCTB4NjksIDB4M0QsIDB4NjksIDB4REYsCiAKLTB4NDgsIDB4MzcsIDB4NDgsIDB4REYsCi0weDU4LCAweDNGLCAweDU4LCAweERGLAorCTB4NDgsIDB4MzcsIDB4NDgsIDB4REYsCisJMHg1OCwgMHgzRiwgMHg1OCwgMHhERiwKIAotMHg2OCwgMHgzRCwgMHg2OCwgMHhERiwKLTB4NDksIDB4MzcsIDB4NDksIDB4REYsCisJMHg2OCwgMHgzRCwgMHg2OCwgMHhERiwKKwkweDQ5LCAweDM3LCAweDQ5LCAweERGLAogCi0weDMyLCAweDMyLCAweDJELCAweERGLAotMHgyMiwgMHgyMiwgMHgyRCwgMHhERiwKKwkweDMyLCAweDMyLCAweDJELCAweERGLAorCTB4MjIsIDB4MjIsIDB4MkQsIDB4REYsCiAKLTB4MTIsIDB4MTIsIDB4MkQsIDB4REYsCi0weDNBLCAweDNBLCAweDJELCAweERGLAorCTB4MTIsIDB4MTIsIDB4MkQsIDB4REYsCisJMHgzQSwgMHgzQSwgMHgyRCwgMHhERiwKIAotMHgwRiwgMHhDRiwgMHg3NCwgMHhDMiwKLTB4MzcsIDB4Q0YsIDB4NzQsIDB4QzQsCisJMHgwRiwgMHhDRiwgMHg3NCwgMHhDMiwKKwkweDM3LCAweENGLCAweDc0LCAweEM0LAogCi0weDBBLCAweDQ0LCAweDU0LCAweEIwLAotMHgwMiwgMHg0NCwgMHg2NCwgMHhCMCwKKwkweDBBLCAweDQ0LCAweDU0LCAweEIwLAorCTB4MDIsIDB4NDQsIDB4NjQsIDB4QjAsCiAKLTB4M0QsIDB4Q0YsIDB4NzQsIDB4QzAsCi0weDM0LCAweDM3LCAweDIwLCAweEU5LAorCTB4M0QsIDB4Q0YsIDB4NzQsIDB4QzAsCisJMHgzNCwgMHgzNywgMHgyMCwgMHhFOSwKIAotMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLTB4MzgsIDB4MEYsIDB4MjAsIDB4RTksCisJMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKKwkweDM4LCAweDBGLCAweDIwLCAweEU5LAogCi0weDM5LCAweEU1LCAweDJDLCAweDlGLAotMHgzQywgMHgzRCwgMHgyMCwgMHhFOSwKKwkweDM5LCAweEU1LCAweDJDLCAweDlGLAorCTB4M0MsIDB4M0QsIDB4MjAsIDB4RTksCiAKLTB4MkEsIDB4NDQsIDB4NTQsIDB4QjIsCi0weDFBLCAweDQ0LCAweDY0LCAweEIyLAorCTB4MkEsIDB4NDQsIDB4NTQsIDB4QjIsCisJMHgxQSwgMHg0NCwgMHg2NCwgMHhCMiwKIAotMHgzNiwgMHg4MCwgMHgzQSwgMHhFQSwKLTB4MEEsIDB4MjAsCi0weDAyLCAweDIwLAorCTB4MzYsIDB4ODAsIDB4M0EsIDB4RUEsCisJMHgwQSwgMHgyMCwKKwkweDAyLCAweDIwLAogCi0weDBGLCAweENGLCAweDc1LCAweEMwLAotMHgyQSwgMHgyMCwKLTB4MUEsIDB4MjAsCisJMHgwRiwgMHhDRiwgMHg3NSwgMHhDMCwKKwkweDJBLCAweDIwLAorCTB4MUEsIDB4MjAsCiAKLTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0weDMyLCAweDMxLCAweDVGLCAweEU5LAorCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCisJMHgzMiwgMHgzMSwgMHg1RiwgMHhFOSwKIAotMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLTB4MzMsIDB4MzksIDB4NUYsIDB4RTksCisJMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKKwkweDMzLCAweDM5LCAweDVGLCAweEU5LAogCi0weDNELCAweENGLCAweDc1LCAweEMyLAotMHgzNywgMHhDRiwgMHg3NSwgMHhDNCwKKwkweDNELCAweENGLCAweDc1LCAweEMyLAorCTB4MzcsIDB4Q0YsIDB4NzUsIDB4QzQsCiAKLTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0weEE2LCAweDBGLCAweDIwLCAweEU5LAorCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCisJMHhBNiwgMHgwRiwgMHgyMCwgMHhFOSwKIAotMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLTB4QTMsIDB4M0QsIDB4MjAsIDB4RTksCisJMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKKwkweEEzLCAweDNELCAweDIwLCAweEU5LAogCi0weDJBLCAweDQ0LCAweDU0LCAweEI0LAotMHgxQSwgMHg0NCwgMHg2NCwgMHhCNCwKKwkweDJBLCAweDQ0LCAweDU0LCAweEI0LAorCTB4MUEsIDB4NDQsIDB4NjQsIDB4QjQsCiAKLTB4MEEsIDB4NDUsIDB4NTUsIDB4QjAsCi0weDAyLCAweDQ1LCAweDY1LCAweEIwLAorCTB4MEEsIDB4NDUsIDB4NTUsIDB4QjAsCisJMHgwMiwgMHg0NSwgMHg2NSwgMHhCMCwKIAotMHg4OCwgMHg3MywgMHg1RSwgMHhFOSwKLTB4MkEsIDB4MjAsCi0weDFBLCAweDIwLAorCTB4ODgsIDB4NzMsIDB4NUUsIDB4RTksCisJMHgyQSwgMHgyMCwKKwkweDFBLCAweDIwLAogCi0weEEwLCAweDM3LCAweDIwLCAweEU5LAotMHgwQSwgMHgyMCwKLTB4MDIsIDB4MjAsCisJMHhBMCwgMHgzNywgMHgyMCwgMHhFOSwKKwkweDBBLCAweDIwLAorCTB4MDIsIDB4MjAsCiAKLTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0weDNFLCAweDMwLCAweDRGLCAweEU5LAorCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCisJMHgzRSwgMHgzMCwgMHg0RiwgMHhFOSwKIAotMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLTB4M0YsIDB4MzgsIDB4NEYsIDB4RTksCisJMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKKwkweDNGLCAweDM4LCAweDRGLCAweEU5LAogCi0weDMwLCAweDUwLCAweDJFLCAweDlGLAotMHgzQSwgMHgzMSwgMHg0RiwgMHhFOSwKKwkweDMwLCAweDUwLCAweDJFLCAweDlGLAorCTB4M0EsIDB4MzEsIDB4NEYsIDB4RTksCiAKLTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0weDNCLCAweDM5LCAweDRGLCAweEU5LAorCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCisJMHgzQiwgMHgzOSwgMHg0RiwgMHhFOSwKIAotMHgyQSwgMHg0NSwgMHg1NSwgMHhCMiwKLTB4MUEsIDB4NDUsIDB4NjUsIDB4QjIsCisJMHgyQSwgMHg0NSwgMHg1NSwgMHhCMiwKKwkweDFBLCAweDQ1LCAweDY1LCAweEIyLAogCi0weDBBLCAweDQ1LCAweDU1LCAweEI0LAotMHgwMiwgMHg0NSwgMHg2NSwgMHhCNCwKKwkweDBBLCAweDQ1LCAweDU1LCAweEI0LAorCTB4MDIsIDB4NDUsIDB4NjUsIDB4QjQsCiAKLTB4MEYsIDB4Q0YsIDB4NzQsIDB4QzYsCi0weDJBLCAweDIwLAotMHgxQSwgMHgyMCwKKwkweDBGLCAweENGLCAweDc0LCAweEM2LAorCTB4MkEsIDB4MjAsCisJMHgxQSwgMHgyMCwKIAotMHhBNywgMHgzMCwgMHg0RiwgMHhFOSwKLTB4MEEsIDB4MjAsCi0weDAyLCAweDIwLAorCTB4QTcsIDB4MzAsIDB4NEYsIDB4RTksCisJMHgwQSwgMHgyMCwKKwkweDAyLCAweDIwLAogCi0weDMxLCAweDUzLCAweDJGLCAweDlGLAotMHg5QywgMHgwRiwgMHgyMCwgMHhFOSwKKwkweDMxLCAweDUzLCAweDJGLCAweDlGLAorCTB4OUMsIDB4MEYsIDB4MjAsIDB4RTksCiAKLTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0weEE4LCAweDM4LCAweDRGLCAweEU5LAorCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCisJMHhBOCwgMHgzOCwgMHg0RiwgMHhFOSwKIAotMHgyQSwgMHg0NCwgMHg1NCwgMHhCNiwKLTB4MUEsIDB4NDQsIDB4NjQsIDB4QjYsCisJMHgyQSwgMHg0NCwgMHg1NCwgMHhCNiwKKwkweDFBLCAweDQ0LCAweDY0LCAweEI2LAogCi0weDMwLCAweDUwLCAweDJFLCAweDlGLAotMHgzNiwgMHgzMSwgMHg0RiwgMHhFOSwKKwkweDMwLCAweDUwLCAweDJFLCAweDlGLAorCTB4MzYsIDB4MzEsIDB4NEYsIDB4RTksCiAKLTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0weDM3LCAweDM5LCAweDRGLCAweEU5LAorCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCisJMHgzNywgMHgzOSwgMHg0RiwgMHhFOSwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MkEsIDB4MjAsCi0weDFBLCAweDIwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgyQSwgMHgyMCwKKwkweDFBLCAweDIwLAogCi0weDJBLCAweDQ2LCAweDU2LCAweEJGLAotMHgxQSwgMHg0NiwgMHg2NiwgMHhCRiwKKwkweDJBLCAweDQ2LCAweDU2LCAweEJGLAorCTB4MUEsIDB4NDYsIDB4NjYsIDB4QkYsCiAKLTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0weEE0LCAweDMxLCAweDRGLCAweEU5LAorCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCisJMHhBNCwgMHgzMSwgMHg0RiwgMHhFOSwKIAotMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLTB4QTUsIDB4MzksIDB4NEYsIDB4RTksCisJMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKKwkweEE1LCAweDM5LCAweDRGLCAweEU5LAogCi0weDBBLCAweDQ3LCAweDU3LCAweEJGLAotMHgwMiwgMHg0NywgMHg2NywgMHhCRiwKKwkweDBBLCAweDQ3LCAweDU3LCAweEJGLAorCTB4MDIsIDB4NDcsIDB4NjcsIDB4QkYsCiAKLTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0weEExLCAweDMwLCAweDRGLCAweEU5LAorCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCisJMHhBMSwgMHgzMCwgMHg0RiwgMHhFOSwKIAotMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLTB4QTIsIDB4MzgsIDB4NEYsIDB4RTksCisJMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKKwkweEEyLCAweDM4LCAweDRGLCAweEU5LAogCi0weDJBLCAweDQzLCAweDUzLCAweEJGLAotMHgxQSwgMHg0MywgMHg2MywgMHhCRiwKKwkweDJBLCAweDQzLCAweDUzLCAweEJGLAorCTB4MUEsIDB4NDMsIDB4NjMsIDB4QkYsCiAKLTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0weDlELCAweDMxLCAweDRGLCAweEU5LAorCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCisJMHg5RCwgMHgzMSwgMHg0RiwgMHhFOSwKIAotMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLTB4OUUsIDB4MzksIDB4NEYsIDB4RTksCisJMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKKwkweDlFLCAweDM5LCAweDRGLCAweEU5LAogCi0weDBBLCAweDQ4LCAweDU4LCAweEJGLAotMHgwMiwgMHg0OCwgMHg2OCwgMHhCRiwKKwkweDBBLCAweDQ4LCAweDU4LCAweEJGLAorCTB4MDIsIDB4NDgsIDB4NjgsIDB4QkYsCiAKLTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0weDgwLCAweDMxLCAweDU3LCAweEU5LAorCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCisJMHg4MCwgMHgzMSwgMHg1NywgMHhFOSwKIAotMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLTB4ODEsIDB4MzksIDB4NTcsIDB4RTksCisJMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKKwkweDgxLCAweDM5LCAweDU3LCAweEU5LAogCi0weDJBLCAweDQ5LCAweDU5LCAweEJGLAotMHgxQSwgMHg0OSwgMHg2OSwgMHhCRiwKKwkweDJBLCAweDQ5LCAweDU5LCAweEJGLAorCTB4MUEsIDB4NDksIDB4NjksIDB4QkYsCiAKLTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0weDgyLCAweDMwLCAweDU3LCAweEU5LAorCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCisJMHg4MiwgMHgzMCwgMHg1NywgMHhFOSwKIAotMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLTB4ODMsIDB4MzgsIDB4NTcsIDB4RTksCisJMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKKwkweDgzLCAweDM4LCAweDU3LCAweEU5LAogCi0weDMxLCAweDUzLCAweDJGLCAweDlGLAotMHg4NCwgMHgzMSwgMHg1RSwgMHhFOSwKKwkweDMxLCAweDUzLCAweDJGLCAweDlGLAorCTB4ODQsIDB4MzEsIDB4NUUsIDB4RTksCiAKLTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0weDg1LCAweDM5LCAweDVFLCAweEU5LAorCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCisJMHg4NSwgMHgzOSwgMHg1RSwgMHhFOSwKIAotMHg4NiwgMHg3NiwgMHg1NywgMHhFOSwKLTB4OEEsIDB4MzYsIDB4MjAsIDB4RTksCisJMHg4NiwgMHg3NiwgMHg1NywgMHhFOSwKKwkweDhBLCAweDM2LCAweDIwLCAweEU5LAogCi0weDg3LCAweDc3LCAweDU3LCAweEU5LAotMHg4QiwgMHgzRSwgMHhCRiwgMHhFQSwKKwkweDg3LCAweDc3LCAweDU3LCAweEU5LAorCTB4OEIsIDB4M0UsIDB4QkYsIDB4RUEsCiAKLTB4ODAsIDB4MzAsIDB4NTcsIDB4RTksCi0weDgxLCAweDM4LCAweDU3LCAweEU5LAorCTB4ODAsIDB4MzAsIDB4NTcsIDB4RTksCisJMHg4MSwgMHgzOCwgMHg1NywgMHhFOSwKIAotMHg4MiwgMHgzMSwgMHg1NywgMHhFOSwKLTB4ODYsIDB4NzgsIDB4NTcsIDB4RTksCisJMHg4MiwgMHgzMSwgMHg1NywgMHhFOSwKKwkweDg2LCAweDc4LCAweDU3LCAweEU5LAogCi0weDgzLCAweDM5LCAweDU3LCAweEU5LAotMHg4NywgMHg3OSwgMHg1NywgMHhFOSwKKwkweDgzLCAweDM5LCAweDU3LCAweEU5LAorCTB4ODcsIDB4NzksIDB4NTcsIDB4RTksCiAKLTB4MzAsIDB4MUYsIDB4NUYsIDB4RTksCi0weDhBLCAweDM0LCAweDIwLCAweEU5LAorCTB4MzAsIDB4MUYsIDB4NUYsIDB4RTksCisJMHg4QSwgMHgzNCwgMHgyMCwgMHhFOSwKIAotMHg4QiwgMHgzQywgMHgyMCwgMHhFOSwKLTB4MzcsIDB4NTAsIDB4NjAsIDB4QkQsCisJMHg4QiwgMHgzQywgMHgyMCwgMHhFOSwKKwkweDM3LCAweDUwLCAweDYwLCAweEJELAogCi0weDU3LCAweDBELCAweDIwLCAweEU5LAotMHgzNSwgMHg1MSwgMHg2MSwgMHhCRCwKKwkweDU3LCAweDBELCAweDIwLCAweEU5LAorCTB4MzUsIDB4NTEsIDB4NjEsIDB4QkQsCiAKLTB4MkIsIDB4NTAsIDB4MjAsIDB4RTksCi0weDFELCAweDM3LCAweEUxLCAweEVBLAorCTB4MkIsIDB4NTAsIDB4MjAsIDB4RTksCisJMHgxRCwgMHgzNywgMHhFMSwgMHhFQSwKIAotMHgxRSwgMHgzNSwgMHhFMSwgMHhFQSwKLTB4MDAsIDB4RTAsCi0weDBFLCAweDc3LAorCTB4MUUsIDB4MzUsIDB4RTEsIDB4RUEsCisJMHgwMCwgMHhFMCwKKwkweDBFLCAweDc3LAogCi0weDI0LCAweDUxLCAweDIwLCAweEU5LAotMHg4RCwgMHhGRiwgMHgyMCwgMHhFQSwKKwkweDI0LCAweDUxLCAweDIwLCAweEU5LAorCTB4OEQsIDB4RkYsIDB4MjAsIDB4RUEsCiAKLTB4MTYsIDB4MEUsIDB4MjAsIDB4RTksCi0weDU3LCAweDJFLCAweEJGLCAweEVBLAorCTB4MTYsIDB4MEUsIDB4MjAsIDB4RTksCisJMHg1NywgMHgyRSwgMHhCRiwgMHhFQSwKIAotMHgwQiwgMHg0NiwgMHhBMCwgMHhFOCwKLTB4MUIsIDB4NTYsIDB4QTAsIDB4RTgsCisJMHgwQiwgMHg0NiwgMHhBMCwgMHhFOCwKKwkweDFCLCAweDU2LCAweEEwLCAweEU4LAogCi0weDJCLCAweDY2LCAweEEwLCAweEU4LAotMHgwQywgMHg0NywgMHhBMCwgMHhFOCwKKwkweDJCLCAweDY2LCAweEEwLCAweEU4LAorCTB4MEMsIDB4NDcsIDB4QTAsIDB4RTgsCiAKLTB4MUMsIDB4NTcsIDB4QTAsIDB4RTgsCi0weDJDLCAweDY3LCAweEEwLCAweEU4LAorCTB4MUMsIDB4NTcsIDB4QTAsIDB4RTgsCisJMHgyQywgMHg2NywgMHhBMCwgMHhFOCwKIAotMHgwQiwgMHgwMCwKLTB4MUIsIDB4MDAsCi0weDJCLCAweDAwLAotMHgwMCwgMHhFMCwKKwkweDBCLCAweDAwLAorCTB4MUIsIDB4MDAsCisJMHgyQiwgMHgwMCwKKwkweDAwLCAweEUwLAogCi0weDBDLCAweDAwLAotMHgxQywgMHgwMCwKLTB4MkMsIDB4MDAsCi0weDAwLCAweEUwLAorCTB4MEMsIDB4MDAsCisJMHgxQywgMHgwMCwKKwkweDJDLCAweDAwLAorCTB4MDAsIDB4RTAsCiAKLTB4MEIsIDB4NjUsCi0weDFCLCAweDY1LAotMHgyQiwgMHg2NSwKLTB4MDAsIDB4RTAsCisJMHgwQiwgMHg2NSwKKwkweDFCLCAweDY1LAorCTB4MkIsIDB4NjUsCisJMHgwMCwgMHhFMCwKIAotMHgwQywgMHg2NSwKLTB4MUMsIDB4NjUsCi0weDJDLCAweDY1LAotMHgwMCwgMHhFMCwKKwkweDBDLCAweDY1LAorCTB4MUMsIDB4NjUsCisJMHgyQywgMHg2NSwKKwkweDAwLCAweEUwLAogCi0weDBCLCAweDFCLCAweDYwLCAweEVDLAotMHgzNiwgMHhENywgMHgzNiwgMHhBRCwKKwkweDBCLCAweDFCLCAweDYwLCAweEVDLAorCTB4MzYsIDB4RDcsIDB4MzYsIDB4QUQsCiAKLTB4MkIsIDB4ODAsIDB4NjAsIDB4RUMsCi0weDBDLCAweDFDLCAweDYwLCAweEVDLAorCTB4MkIsIDB4ODAsIDB4NjAsIDB4RUMsCisJMHgwQywgMHgxQywgMHg2MCwgMHhFQywKIAotMHgzRSwgMHhENywgMHgzRSwgMHhBRCwKLTB4MkMsIDB4ODAsIDB4NjAsIDB4RUMsCisJMHgzRSwgMHhENywgMHgzRSwgMHhBRCwKKwkweDJDLCAweDgwLCAweDYwLCAweEVDLAogCi0weDBCLCAweDJCLCAweERFLCAweEU4LAotMHgxQiwgMHg4MCwgMHhERSwgMHhFOCwKKwkweDBCLCAweDJCLCAweERFLCAweEU4LAorCTB4MUIsIDB4ODAsIDB4REUsIDB4RTgsCiAKLTB4MzYsIDB4ODAsIDB4MzYsIDB4QkQsCi0weDNFLCAweDgwLCAweDNFLCAweEJELAorCTB4MzYsIDB4ODAsIDB4MzYsIDB4QkQsCisJMHgzRSwgMHg4MCwgMHgzRSwgMHhCRCwKIAotMHgzMywgMHhENywgMHgwQiwgMHhCRCwKLTB4M0IsIDB4RDcsIDB4MUIsIDB4QkQsCisJMHgzMywgMHhENywgMHgwQiwgMHhCRCwKKwkweDNCLCAweEQ3LCAweDFCLCAweEJELAogCi0weDQ2LCAweDgwLCAweDQ2LCAweENGLAotMHg1NywgMHg4MCwgMHg1NywgMHhDRiwKKwkweDQ2LCAweDgwLCAweDQ2LCAweENGLAorCTB4NTcsIDB4ODAsIDB4NTcsIDB4Q0YsCiAKLTB4NjYsIDB4MzMsIDB4NjYsIDB4Q0YsCi0weDQ3LCAweDNCLCAweDQ3LCAweENGLAorCTB4NjYsIDB4MzMsIDB4NjYsIDB4Q0YsCisJMHg0NywgMHgzQiwgMHg0NywgMHhDRiwKIAotMHg1NiwgMHgzMywgMHg1NiwgMHhDRiwKLTB4NjcsIDB4M0IsIDB4NjcsIDB4Q0YsCisJMHg1NiwgMHgzMywgMHg1NiwgMHhDRiwKKwkweDY3LCAweDNCLCAweDY3LCAweENGLAogCi0weDBCLCAweDQ4LCAweEEwLCAweEU4LAotMHgxQiwgMHg1OCwgMHhBMCwgMHhFOCwKKwkweDBCLCAweDQ4LCAweEEwLCAweEU4LAorCTB4MUIsIDB4NTgsIDB4QTAsIDB4RTgsCiAKLTB4MkIsIDB4NjgsIDB4QTAsIDB4RTgsCi0weDBDLCAweDQ5LCAweEEwLCAweEU4LAorCTB4MkIsIDB4NjgsIDB4QTAsIDB4RTgsCisJMHgwQywgMHg0OSwgMHhBMCwgMHhFOCwKIAotMHgxQywgMHg1OSwgMHhBMCwgMHhFOCwKLTB4MkMsIDB4NjksIDB4QTAsIDB4RTgsCisJMHgxQywgMHg1OSwgMHhBMCwgMHhFOCwKKwkweDJDLCAweDY5LCAweEEwLCAweEU4LAogCi0weDBCLCAweDAwLAotMHgxQiwgMHgwMCwKLTB4MkIsIDB4MDAsCi0weDAwLCAweEUwLAorCTB4MEIsIDB4MDAsCisJMHgxQiwgMHgwMCwKKwkweDJCLCAweDAwLAorCTB4MDAsIDB4RTAsCiAKLTB4MEMsIDB4MDAsCi0weDFDLCAweDAwLAotMHgyQywgMHgwMCwKLTB4MDAsIDB4RTAsCisJMHgwQywgMHgwMCwKKwkweDFDLCAweDAwLAorCTB4MkMsIDB4MDAsCisJMHgwMCwgMHhFMCwKIAotMHgwQiwgMHg2NSwKLTB4MUIsIDB4NjUsCi0weDJCLCAweDY1LAotMHgwMCwgMHhFMCwKKwkweDBCLCAweDY1LAorCTB4MUIsIDB4NjUsCisJMHgyQiwgMHg2NSwKKwkweDAwLCAweEUwLAogCi0weDBDLCAweDY1LAotMHgxQywgMHg2NSwKLTB4MkMsIDB4NjUsCi0weDAwLCAweEUwLAorCTB4MEMsIDB4NjUsCisJMHgxQywgMHg2NSwKKwkweDJDLCAweDY1LAorCTB4MDAsIDB4RTAsCiAKLTB4MEIsIDB4MUIsIDB4NjAsIDB4RUMsCi0weDM0LCAweEQ3LCAweDM0LCAweEFELAorCTB4MEIsIDB4MUIsIDB4NjAsIDB4RUMsCisJMHgzNCwgMHhENywgMHgzNCwgMHhBRCwKIAotMHgyQiwgMHg4MCwgMHg2MCwgMHhFQywKLTB4MEMsIDB4MUMsIDB4NjAsIDB4RUMsCisJMHgyQiwgMHg4MCwgMHg2MCwgMHhFQywKKwkweDBDLCAweDFDLCAweDYwLCAweEVDLAogCi0weDNDLCAweEQ3LCAweDNDLCAweEFELAotMHgyQywgMHg4MCwgMHg2MCwgMHhFQywKKwkweDNDLCAweEQ3LCAweDNDLCAweEFELAorCTB4MkMsIDB4ODAsIDB4NjAsIDB4RUMsCiAKLTB4MEIsIDB4MkIsIDB4REUsIDB4RTgsCi0weDFCLCAweDgwLCAweERFLCAweEU4LAorCTB4MEIsIDB4MkIsIDB4REUsIDB4RTgsCisJMHgxQiwgMHg4MCwgMHhERSwgMHhFOCwKIAotMHgzNCwgMHg4MCwgMHgzNCwgMHhCRCwKLTB4M0MsIDB4ODAsIDB4M0MsIDB4QkQsCisJMHgzNCwgMHg4MCwgMHgzNCwgMHhCRCwKKwkweDNDLCAweDgwLCAweDNDLCAweEJELAogCi0weDMzLCAweEQ3LCAweDBCLCAweEJELAotMHgzQiwgMHhENywgMHgxQiwgMHhCRCwKKwkweDMzLCAweEQ3LCAweDBCLCAweEJELAorCTB4M0IsIDB4RDcsIDB4MUIsIDB4QkQsCiAKLTB4NDgsIDB4ODAsIDB4NDgsIDB4Q0YsCi0weDU5LCAweDgwLCAweDU5LCAweENGLAorCTB4NDgsIDB4ODAsIDB4NDgsIDB4Q0YsCisJMHg1OSwgMHg4MCwgMHg1OSwgMHhDRiwKIAotMHg2OCwgMHgzMywgMHg2OCwgMHhDRiwKLTB4NDksIDB4M0IsIDB4NDksIDB4Q0YsCisJMHg2OCwgMHgzMywgMHg2OCwgMHhDRiwKKwkweDQ5LCAweDNCLCAweDQ5LCAweENGLAogCi0weEFELCAweEZGLCAweDIwLCAweEVBLAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweEFELCAweEZGLCAweDIwLCAweEVBLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4NTgsIDB4MzMsIDB4NTgsIDB4Q0YsCi0weDY5LCAweDNCLCAweDY5LCAweENGLAorCTB4NTgsIDB4MzMsIDB4NTgsIDB4Q0YsCisJMHg2OSwgMHgzQiwgMHg2OSwgMHhDRiwKIAotMHg2QiwgMHhGRiwgMHgyMCwgMHhFQSwKLTB4NTcsIDB4QzAsIDB4QkYsIDB4RUEsCisJMHg2QiwgMHhGRiwgMHgyMCwgMHhFQSwKKwkweDU3LCAweEMwLCAweEJGLCAweEVBLAogCi0weDAwLCAweDgwLCAweEEwLCAweEU5LAotMHgwMCwgMHgwMCwgMHhEOCwgMHhFQywKKwkweDAwLCAweDgwLCAweEEwLCAweEU5LAorCTB4MDAsIDB4MDAsIDB4RDgsIDB4RUMsCiAKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHdhcnBfZzQwMF90Mmd6c2FmW10gPSB7CiAKLTB4MDAsIDB4OEEsIDB4OTgsIDB4RTksCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4OEEsIDB4OTgsIDB4RTksCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKLTB4MDAsIDB4MDAsIDB4RDgsIDB4RUMsCisJMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKKwkweDAwLCAweDAwLCAweEQ4LCAweEVDLAogCi0weEZGLCAweDgwLCAweEMwLCAweEU5LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweEZGLCAweDgwLCAweEMwLCAweEU5LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MEEsIDB4NDAsIDB4NTAsIDB4QkYsCi0weDJBLCAweDQwLCAweDYwLCAweEJGLAorCTB4MEEsIDB4NDAsIDB4NTAsIDB4QkYsCisJMHgyQSwgMHg0MCwgMHg2MCwgMHhCRiwKIAotMHgzMiwgMHg0MSwgMHg1MSwgMHhCRiwKLTB4M0EsIDB4NDEsIDB4NjEsIDB4QkYsCisJMHgzMiwgMHg0MSwgMHg1MSwgMHhCRiwKKwkweDNBLCAweDQxLCAweDYxLCAweEJGLAogCi0weEMzLCAweDZCLAotMHhEMywgMHg2QiwKLTB4MDAsIDB4OEEsIDB4OTgsIDB4RTksCisJMHhDMywgMHg2QiwKKwkweEQzLCAweDZCLAorCTB4MDAsIDB4OEEsIDB4OTgsIDB4RTksCiAKLTB4NzMsIDB4N0IsIDB4QzgsIDB4RUMsCi0weDk2LCAweEUyLAotMHg0MSwgMHgwNCwKKwkweDczLCAweDdCLCAweEM4LCAweEVDLAorCTB4OTYsIDB4RTIsCisJMHg0MSwgMHgwNCwKIAotMHg3QiwgMHg0MywgMHhBMCwgMHhFOCwKLTB4NzMsIDB4NTMsIDB4QTAsIDB4RTgsCisJMHg3QiwgMHg0MywgMHhBMCwgMHhFOCwKKwkweDczLCAweDUzLCAweEEwLCAweEU4LAogCi0weEFELCAweEVFLCAweDIzLCAweDlGLAotMHgwMCwgMHhFMCwKLTB4NTEsIDB4MDQsCisJMHhBRCwgMHhFRSwgMHgyMywgMHg5RiwKKwkweDAwLCAweEUwLAorCTB4NTEsIDB4MDQsCiAKLTB4OTAsIDB4RTIsCi0weDYxLCAweDA0LAotMHgzMSwgMHg0NiwgMHhCMSwgMHhFOCwKKwkweDkwLCAweEUyLAorCTB4NjEsIDB4MDQsCisJMHgzMSwgMHg0NiwgMHhCMSwgMHhFOCwKIAotMHg1MSwgMHg0MSwgMHhFMCwgMHhFQywKLTB4MzksIDB4NjcsIDB4QjEsIDB4RTgsCisJMHg1MSwgMHg0MSwgMHhFMCwgMHhFQywKKwkweDM5LCAweDY3LCAweEIxLCAweEU4LAogCi0weDAwLCAweDA0LAotMHg0NiwgMHhFMiwKLTB4NzMsIDB4NjMsIDB4QTAsIDB4RTgsCisJMHgwMCwgMHgwNCwKKwkweDQ2LCAweEUyLAorCTB4NzMsIDB4NjMsIDB4QTAsIDB4RTgsCiAKLTB4NjEsIDB4NDEsIDB4RTAsIDB4RUMsCi0weDMxLCAweDAwLAotMHgzOSwgMHgwMCwKKwkweDYxLCAweDQxLCAweEUwLCAweEVDLAorCTB4MzEsIDB4MDAsCisJMHgzOSwgMHgwMCwKIAotMHg4RSwgMHg4MCwgMHgxNSwgMHhFQSwKLTB4MTAsIDB4MDQsCi0weDIwLCAweDA0LAorCTB4OEUsIDB4ODAsIDB4MTUsIDB4RUEsCisJMHgxMCwgMHgwNCwKKwkweDIwLCAweDA0LAogCi0weDYxLCAweDUxLCAweEUwLCAweEVDLAotMHgyRiwgMHg0MSwgMHg2MCwgMHhFQSwKKwkweDYxLCAweDUxLCAweEUwLCAweEVDLAorCTB4MkYsIDB4NDEsIDB4NjAsIDB4RUEsCiAKLTB4MzEsIDB4MjAsCi0weDM5LCAweDIwLAotMHgxRiwgMHg0MiwgMHhBMCwgMHhFOCwKKwkweDMxLCAweDIwLAorCTB4MzksIDB4MjAsCisJMHgxRiwgMHg0MiwgMHhBMCwgMHhFOCwKIAotMHgyQSwgMHg0MiwgMHg1MiwgMHhCRiwKLTB4MEYsIDB4NTIsIDB4QTAsIDB4RTgsCisJMHgyQSwgMHg0MiwgMHg1MiwgMHhCRiwKKwkweDBGLCAweDUyLCAweEEwLCAweEU4LAogCi0weDFBLCAweDQyLCAweDYyLCAweEJGLAotMHgxRSwgMHg1MSwgMHg2MCwgMHhFQSwKKwkweDFBLCAweDQyLCAweDYyLCAweEJGLAorCTB4MUUsIDB4NTEsIDB4NjAsIDB4RUEsCiAKLTB4NzMsIDB4N0IsIDB4QzgsIDB4RUMsCi0weDBFLCAweDYxLCAweDYwLCAweEVBLAorCTB4NzMsIDB4N0IsIDB4QzgsIDB4RUMsCisJMHgwRSwgMHg2MSwgMHg2MCwgMHhFQSwKIAotMHgzMiwgMHg0MCwgMHg1MCwgMHhCRCwKLTB4MjIsIDB4NDAsIDB4NjAsIDB4QkQsCisJMHgzMiwgMHg0MCwgMHg1MCwgMHhCRCwKKwkweDIyLCAweDQwLCAweDYwLCAweEJELAogCi0weDEyLCAweDQxLCAweDUxLCAweEJELAotMHgzQSwgMHg0MSwgMHg2MSwgMHhCRCwKKwkweDEyLCAweDQxLCAweDUxLCAweEJELAorCTB4M0EsIDB4NDEsIDB4NjEsIDB4QkQsCiAKLTB4QkYsIDB4MkYsIDB4MEUsIDB4QkQsCi0weDk3LCAweEUyLAotMHg3QiwgMHg3MiwKKwkweEJGLCAweDJGLCAweDBFLCAweEJELAorCTB4OTcsIDB4RTIsCisJMHg3QiwgMHg3MiwKIAotMHgzMiwgMHgyMCwKLTB4MjIsIDB4MjAsCi0weDEyLCAweDIwLAotMHgzQSwgMHgyMCwKKwkweDMyLCAweDIwLAorCTB4MjIsIDB4MjAsCisJMHgxMiwgMHgyMCwKKwkweDNBLCAweDIwLAogCi0weDM1LCAweDQ4LCAweEIxLCAweEU4LAotMHgzRCwgMHg1OSwgMHhCMSwgMHhFOCwKKwkweDM1LCAweDQ4LCAweEIxLCAweEU4LAorCTB4M0QsIDB4NTksIDB4QjEsIDB4RTgsCiAKLTB4NDYsIDB4MzEsIDB4NDYsIDB4QkYsCi0weDU2LCAweDMxLCAweDU2LCAweEJGLAorCTB4NDYsIDB4MzEsIDB4NDYsIDB4QkYsCisJMHg1NiwgMHgzMSwgMHg1NiwgMHhCRiwKIAotMHhCMywgMHhFMiwgMHgyRCwgMHg5RiwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHhCMywgMHhFMiwgMHgyRCwgMHg5RiwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDY2LCAweDMxLCAweDY2LCAweEJGLAotMHg0NywgMHgzOSwgMHg0NywgMHhCRiwKKwkweDY2LCAweDMxLCAweDY2LCAweEJGLAorCTB4NDcsIDB4MzksIDB4NDcsIDB4QkYsCiAKLTB4NTcsIDB4MzksIDB4NTcsIDB4QkYsCi0weDY3LCAweDM5LCAweDY3LCAweEJGLAorCTB4NTcsIDB4MzksIDB4NTcsIDB4QkYsCisJMHg2NywgMHgzOSwgMHg2NywgMHhCRiwKIAotMHg3RiwgMHg4MCwgMHgwNywgMHhFQSwKLTB4MjQsIDB4NDEsIDB4MjAsIDB4RTksCisJMHg3RiwgMHg4MCwgMHgwNywgMHhFQSwKKwkweDI0LCAweDQxLCAweDIwLCAweEU5LAogCi0weDM1LCAweDAwLAotMHgzRCwgMHgwMCwKLTB4MDAsIDB4RTAsCi0weDJELCAweDczLAorCTB4MzUsIDB4MDAsCisJMHgzRCwgMHgwMCwKKwkweDAwLCAweEUwLAorCTB4MkQsIDB4NzMsCiAKLTB4MzMsIDB4NzIsCi0weDBDLCAweEUzLAotMHg4RCwgMHgyRiwgMHgxRSwgMHhCRCwKKwkweDMzLCAweDcyLAorCTB4MEMsIDB4RTMsCisJMHg4RCwgMHgyRiwgMHgxRSwgMHhCRCwKIAotMHg0MywgMHg3NSwgMHhGOCwgMHhFQywKLTB4MzUsIDB4MjAsCi0weDNELCAweDIwLAorCTB4NDMsIDB4NzUsIDB4RjgsIDB4RUMsCisJMHgzNSwgMHgyMCwKKwkweDNELCAweDIwLAogCi0weDQzLCAweDQzLCAweDJELCAweERGLAotMHg1MywgMHg1MywgMHgyRCwgMHhERiwKKwkweDQzLCAweDQzLCAweDJELCAweERGLAorCTB4NTMsIDB4NTMsIDB4MkQsIDB4REYsCiAKLTB4QUUsIDB4MUUsIDB4MEUsIDB4QkQsCi0weDU4LCAweEUzLAotMHgzMywgMHg2NiwKKwkweEFFLCAweDFFLCAweDBFLCAweEJELAorCTB4NTgsIDB4RTMsCisJMHgzMywgMHg2NiwKIAotMHg0OCwgMHgzNSwgMHg0OCwgMHhCRiwKLTB4NTgsIDB4MzUsIDB4NTgsIDB4QkYsCisJMHg0OCwgMHgzNSwgMHg0OCwgMHhCRiwKKwkweDU4LCAweDM1LCAweDU4LCAweEJGLAogCi0weDY4LCAweDM1LCAweDY4LCAweEJGLAotMHg0OSwgMHgzRCwgMHg0OSwgMHhCRiwKKwkweDY4LCAweDM1LCAweDY4LCAweEJGLAorCTB4NDksIDB4M0QsIDB4NDksIDB4QkYsCiAKLTB4NTksIDB4M0QsIDB4NTksIDB4QkYsCi0weDY5LCAweDNELCAweDY5LCAweEJGLAorCTB4NTksIDB4M0QsIDB4NTksIDB4QkYsCisJMHg2OSwgMHgzRCwgMHg2OSwgMHhCRiwKIAotMHg2MywgMHg2MywgMHgyRCwgMHhERiwKLTB4NEQsIDB4N0QsIDB4RjgsIDB4RUMsCisJMHg2MywgMHg2MywgMHgyRCwgMHhERiwKKwkweDRELCAweDdELCAweEY4LCAweEVDLAogCi0weDU5LCAweEUzLAotMHgwMCwgMHhFMCwKLTB4QjgsIDB4MzgsIDB4MzMsIDB4QkYsCisJMHg1OSwgMHhFMywKKwkweDAwLCAweEUwLAorCTB4QjgsIDB4MzgsIDB4MzMsIDB4QkYsCiAKLTB4MkQsIDB4NzMsCi0weDMwLCAweDc2LAotMHgxOCwgMHgzQSwgMHg0MSwgMHhFOSwKKwkweDJELCAweDczLAorCTB4MzAsIDB4NzYsCisJMHgxOCwgMHgzQSwgMHg0MSwgMHhFOSwKIAotMHgzRiwgMHg1MywgMHhBMCwgMHhFOCwKLTB4MDUsIDB4ODAsIDB4M0QsIDB4RUEsCisJMHgzRiwgMHg1MywgMHhBMCwgMHhFOCwKKwkweDA1LCAweDgwLCAweDNELCAweEVBLAogCi0weDM3LCAweDQzLCAweEEwLCAweEU4LAotMHgzRCwgMHg2MywgMHhBMCwgMHhFOCwKKwkweDM3LCAweDQzLCAweEEwLCAweEU4LAorCTB4M0QsIDB4NjMsIDB4QTAsIDB4RTgsCiAKLTB4NTAsIDB4NzAsIDB4RjgsIDB4RUMsCi0weDJCLCAweDUwLCAweDNDLCAweEU5LAorCTB4NTAsIDB4NzAsIDB4RjgsIDB4RUMsCisJMHgyQiwgMHg1MCwgMHgzQywgMHhFOSwKIAotMHgxRiwgMHgwRiwgMHhCQywgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgxRiwgMHgwRiwgMHhCQywgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDU5LCAweDc4LCAweEY4LCAweEVDLAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDU5LCAweDc4LCAweEY4LCAweEVDLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0weDE1LCAweEMwLCAweDIwLCAweEU5LAorCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCisJMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKIAotMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCisJMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKKwkweDE1LCAweEMwLCAweDIwLCAweEU5LAogCi0weDFFLCAweDEyLCAweDQxLCAweEU5LAotMHgxQSwgMHgyMiwgMHg0MSwgMHhFOSwKKwkweDFFLCAweDEyLCAweDQxLCAweEU5LAorCTB4MUEsIDB4MjIsIDB4NDEsIDB4RTksCiAKLTB4NDYsIDB4MzcsIDB4NDYsIDB4REYsCi0weDU2LCAweDNGLCAweDU2LCAweERGLAorCTB4NDYsIDB4MzcsIDB4NDYsIDB4REYsCisJMHg1NiwgMHgzRiwgMHg1NiwgMHhERiwKIAotMHgyQiwgMHg0MCwgMHgzRCwgMHhFOSwKLTB4NjYsIDB4M0QsIDB4NjYsIDB4REYsCisJMHgyQiwgMHg0MCwgMHgzRCwgMHhFOSwKKwkweDY2LCAweDNELCAweDY2LCAweERGLAogCi0weDFELCAweDMyLCAweDQxLCAweEU5LAotMHg2NywgMHgzRCwgMHg2NywgMHhERiwKKwkweDFELCAweDMyLCAweDQxLCAweEU5LAorCTB4NjcsIDB4M0QsIDB4NjcsIDB4REYsCiAKLTB4NDcsIDB4MzcsIDB4NDcsIDB4REYsCi0weDU3LCAweDNGLCAweDU3LCAweERGLAorCTB4NDcsIDB4MzcsIDB4NDcsIDB4REYsCisJMHg1NywgMHgzRiwgMHg1NywgMHhERiwKIAotMHgyQSwgMHg0MCwgMHgyMCwgMHhFOSwKLTB4NTksIDB4M0YsIDB4NTksIDB4REYsCisJMHgyQSwgMHg0MCwgMHgyMCwgMHhFOSwKKwkweDU5LCAweDNGLCAweDU5LCAweERGLAogCi0weDE2LCAweDMwLCAweDIwLCAweEU5LAotMHg2OSwgMHgzRCwgMHg2OSwgMHhERiwKKwkweDE2LCAweDMwLCAweDIwLCAweEU5LAorCTB4NjksIDB4M0QsIDB4NjksIDB4REYsCiAKLTB4NDgsIDB4MzcsIDB4NDgsIDB4REYsCi0weDU4LCAweDNGLCAweDU4LCAweERGLAorCTB4NDgsIDB4MzcsIDB4NDgsIDB4REYsCisJMHg1OCwgMHgzRiwgMHg1OCwgMHhERiwKIAotMHg2OCwgMHgzRCwgMHg2OCwgMHhERiwKLTB4NDksIDB4MzcsIDB4NDksIDB4REYsCisJMHg2OCwgMHgzRCwgMHg2OCwgMHhERiwKKwkweDQ5LCAweDM3LCAweDQ5LCAweERGLAogCi0weDMyLCAweDMyLCAweDJELCAweERGLAotMHgyMiwgMHgyMiwgMHgyRCwgMHhERiwKKwkweDMyLCAweDMyLCAweDJELCAweERGLAorCTB4MjIsIDB4MjIsIDB4MkQsIDB4REYsCiAKLTB4MTIsIDB4MTIsIDB4MkQsIDB4REYsCi0weDNBLCAweDNBLCAweDJELCAweERGLAorCTB4MTIsIDB4MTIsIDB4MkQsIDB4REYsCisJMHgzQSwgMHgzQSwgMHgyRCwgMHhERiwKIAotMHgwRiwgMHhDRiwgMHg3NCwgMHhDMiwKLTB4MzcsIDB4Q0YsIDB4NzQsIDB4QzQsCisJMHgwRiwgMHhDRiwgMHg3NCwgMHhDMiwKKwkweDM3LCAweENGLCAweDc0LCAweEM0LAogCi0weDBBLCAweDQ0LCAweDU0LCAweEIwLAotMHgwMiwgMHg0NCwgMHg2NCwgMHhCMCwKKwkweDBBLCAweDQ0LCAweDU0LCAweEIwLAorCTB4MDIsIDB4NDQsIDB4NjQsIDB4QjAsCiAKLTB4M0QsIDB4Q0YsIDB4NzQsIDB4QzAsCi0weDM0LCAweDM3LCAweDIwLCAweEU5LAorCTB4M0QsIDB4Q0YsIDB4NzQsIDB4QzAsCisJMHgzNCwgMHgzNywgMHgyMCwgMHhFOSwKIAotMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLTB4MzgsIDB4MEYsIDB4MjAsIDB4RTksCisJMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKKwkweDM4LCAweDBGLCAweDIwLCAweEU5LAogCi0weDM5LCAweEU1LCAweDJDLCAweDlGLAotMHgzQywgMHgzRCwgMHgyMCwgMHhFOSwKKwkweDM5LCAweEU1LCAweDJDLCAweDlGLAorCTB4M0MsIDB4M0QsIDB4MjAsIDB4RTksCiAKLTB4MkEsIDB4NDQsIDB4NTQsIDB4QjIsCi0weDFBLCAweDQ0LCAweDY0LCAweEIyLAorCTB4MkEsIDB4NDQsIDB4NTQsIDB4QjIsCisJMHgxQSwgMHg0NCwgMHg2NCwgMHhCMiwKIAotMHgzQSwgMHg4MCwgMHgzQSwgMHhFQSwKLTB4MEEsIDB4MjAsCi0weDAyLCAweDIwLAorCTB4M0EsIDB4ODAsIDB4M0EsIDB4RUEsCisJMHgwQSwgMHgyMCwKKwkweDAyLCAweDIwLAogCi0weDBGLCAweENGLCAweDc1LCAweEMwLAotMHgyQSwgMHgyMCwKLTB4MUEsIDB4MjAsCisJMHgwRiwgMHhDRiwgMHg3NSwgMHhDMCwKKwkweDJBLCAweDIwLAorCTB4MUEsIDB4MjAsCiAKLTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0weDMyLCAweDMxLCAweDVGLCAweEU5LAorCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCisJMHgzMiwgMHgzMSwgMHg1RiwgMHhFOSwKIAotMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLTB4MzMsIDB4MzksIDB4NUYsIDB4RTksCisJMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKKwkweDMzLCAweDM5LCAweDVGLCAweEU5LAogCi0weDNELCAweENGLCAweDc1LCAweEMyLAotMHgzNywgMHhDRiwgMHg3NSwgMHhDNCwKKwkweDNELCAweENGLCAweDc1LCAweEMyLAorCTB4MzcsIDB4Q0YsIDB4NzUsIDB4QzQsCiAKLTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0weEE2LCAweDBGLCAweDIwLCAweEU5LAorCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCisJMHhBNiwgMHgwRiwgMHgyMCwgMHhFOSwKIAotMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLTB4QTMsIDB4M0QsIDB4MjAsIDB4RTksCisJMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKKwkweEEzLCAweDNELCAweDIwLCAweEU5LAogCi0weDJBLCAweDQ0LCAweDU0LCAweEI0LAotMHgxQSwgMHg0NCwgMHg2NCwgMHhCNCwKKwkweDJBLCAweDQ0LCAweDU0LCAweEI0LAorCTB4MUEsIDB4NDQsIDB4NjQsIDB4QjQsCiAKLTB4MEEsIDB4NDUsIDB4NTUsIDB4QjAsCi0weDAyLCAweDQ1LCAweDY1LCAweEIwLAorCTB4MEEsIDB4NDUsIDB4NTUsIDB4QjAsCisJMHgwMiwgMHg0NSwgMHg2NSwgMHhCMCwKIAotMHg4OCwgMHg3MywgMHg1RSwgMHhFOSwKLTB4MkEsIDB4MjAsCi0weDFBLCAweDIwLAorCTB4ODgsIDB4NzMsIDB4NUUsIDB4RTksCisJMHgyQSwgMHgyMCwKKwkweDFBLCAweDIwLAogCi0weEEwLCAweDM3LCAweDIwLCAweEU5LAotMHgwQSwgMHgyMCwKLTB4MDIsIDB4MjAsCisJMHhBMCwgMHgzNywgMHgyMCwgMHhFOSwKKwkweDBBLCAweDIwLAorCTB4MDIsIDB4MjAsCiAKLTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0weDNFLCAweDMwLCAweDRGLCAweEU5LAorCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCisJMHgzRSwgMHgzMCwgMHg0RiwgMHhFOSwKIAotMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLTB4M0YsIDB4MzgsIDB4NEYsIDB4RTksCisJMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKKwkweDNGLCAweDM4LCAweDRGLCAweEU5LAogCi0weDMwLCAweDUwLCAweDJFLCAweDlGLAotMHgzQSwgMHgzMSwgMHg0RiwgMHhFOSwKKwkweDMwLCAweDUwLCAweDJFLCAweDlGLAorCTB4M0EsIDB4MzEsIDB4NEYsIDB4RTksCiAKLTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0weDNCLCAweDM5LCAweDRGLCAweEU5LAorCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCisJMHgzQiwgMHgzOSwgMHg0RiwgMHhFOSwKIAotMHgyQSwgMHg0NSwgMHg1NSwgMHhCMiwKLTB4MUEsIDB4NDUsIDB4NjUsIDB4QjIsCisJMHgyQSwgMHg0NSwgMHg1NSwgMHhCMiwKKwkweDFBLCAweDQ1LCAweDY1LCAweEIyLAogCi0weDBBLCAweDQ1LCAweDU1LCAweEI0LAotMHgwMiwgMHg0NSwgMHg2NSwgMHhCNCwKKwkweDBBLCAweDQ1LCAweDU1LCAweEI0LAorCTB4MDIsIDB4NDUsIDB4NjUsIDB4QjQsCiAKLTB4MEYsIDB4Q0YsIDB4NzQsIDB4QzYsCi0weDJBLCAweDIwLAotMHgxQSwgMHgyMCwKKwkweDBGLCAweENGLCAweDc0LCAweEM2LAorCTB4MkEsIDB4MjAsCisJMHgxQSwgMHgyMCwKIAotMHhBNywgMHgzMCwgMHg0RiwgMHhFOSwKLTB4MEEsIDB4MjAsCi0weDAyLCAweDIwLAorCTB4QTcsIDB4MzAsIDB4NEYsIDB4RTksCisJMHgwQSwgMHgyMCwKKwkweDAyLCAweDIwLAogCi0weDMxLCAweDUzLCAweDJGLCAweDlGLAotMHg5QywgMHgwRiwgMHgyMCwgMHhFOSwKKwkweDMxLCAweDUzLCAweDJGLCAweDlGLAorCTB4OUMsIDB4MEYsIDB4MjAsIDB4RTksCiAKLTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0weEE4LCAweDM4LCAweDRGLCAweEU5LAorCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCisJMHhBOCwgMHgzOCwgMHg0RiwgMHhFOSwKIAotMHgyQSwgMHg0NCwgMHg1NCwgMHhCNiwKLTB4MUEsIDB4NDQsIDB4NjQsIDB4QjYsCisJMHgyQSwgMHg0NCwgMHg1NCwgMHhCNiwKKwkweDFBLCAweDQ0LCAweDY0LCAweEI2LAogCi0weDMwLCAweDUwLCAweDJFLCAweDlGLAotMHgzNiwgMHgzMSwgMHg0RiwgMHhFOSwKKwkweDMwLCAweDUwLCAweDJFLCAweDlGLAorCTB4MzYsIDB4MzEsIDB4NEYsIDB4RTksCiAKLTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0weDM3LCAweDM5LCAweDRGLCAweEU5LAorCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCisJMHgzNywgMHgzOSwgMHg0RiwgMHhFOSwKIAotMHgwQSwgMHg0NSwgMHg1NSwgMHhCNiwKLTB4MDIsIDB4NDUsIDB4NjUsIDB4QjYsCisJMHgwQSwgMHg0NSwgMHg1NSwgMHhCNiwKKwkweDAyLCAweDQ1LCAweDY1LCAweEI2LAogCi0weDNELCAweENGLCAweDc1LCAweEM2LAotMHgyQSwgMHgyMCwKLTB4MUEsIDB4MjAsCisJMHgzRCwgMHhDRiwgMHg3NSwgMHhDNiwKKwkweDJBLCAweDIwLAorCTB4MUEsIDB4MjAsCiAKLTB4MkEsIDB4NDYsIDB4NTYsIDB4QkYsCi0weDFBLCAweDQ2LCAweDY2LCAweEJGLAorCTB4MkEsIDB4NDYsIDB4NTYsIDB4QkYsCisJMHgxQSwgMHg0NiwgMHg2NiwgMHhCRiwKIAotMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLTB4QTQsIDB4MzEsIDB4NEYsIDB4RTksCisJMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKKwkweEE0LCAweDMxLCAweDRGLCAweEU5LAogCi0weDM5LCAweEU1LCAweDJDLCAweDlGLAotMHhBNSwgMHgzOSwgMHg0RiwgMHhFOSwKKwkweDM5LCAweEU1LCAweDJDLCAweDlGLAorCTB4QTUsIDB4MzksIDB4NEYsIDB4RTksCiAKLTB4MzEsIDB4M0QsIDB4MjAsIDB4RTksCi0weDBBLCAweDIwLAotMHgwMiwgMHgyMCwKKwkweDMxLCAweDNELCAweDIwLCAweEU5LAorCTB4MEEsIDB4MjAsCisJMHgwMiwgMHgyMCwKIAotMHgwQSwgMHg0NywgMHg1NywgMHhCRiwKLTB4MDIsIDB4NDcsIDB4NjcsIDB4QkYsCisJMHgwQSwgMHg0NywgMHg1NywgMHhCRiwKKwkweDAyLCAweDQ3LCAweDY3LCAweEJGLAogCi0weDMwLCAweDUwLCAweDJFLCAweDlGLAotMHhBMSwgMHgzMCwgMHg0RiwgMHhFOSwKKwkweDMwLCAweDUwLCAweDJFLCAweDlGLAorCTB4QTEsIDB4MzAsIDB4NEYsIDB4RTksCiAKLTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0weEEyLCAweDM4LCAweDRGLCAweEU5LAorCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCisJMHhBMiwgMHgzOCwgMHg0RiwgMHhFOSwKIAotMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLTB4OUQsIDB4MzEsIDB4NEYsIDB4RTksCisJMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKKwkweDlELCAweDMxLCAweDRGLCAweEU5LAogCi0weDM5LCAweEU1LCAweDJDLCAweDlGLAotMHg5RSwgMHgzOSwgMHg0RiwgMHhFOSwKKwkweDM5LCAweEU1LCAweDJDLCAweDlGLAorCTB4OUUsIDB4MzksIDB4NEYsIDB4RTksCiAKLTB4MkEsIDB4NDMsIDB4NTMsIDB4QkYsCi0weDFBLCAweDQzLCAweDYzLCAweEJGLAorCTB4MkEsIDB4NDMsIDB4NTMsIDB4QkYsCisJMHgxQSwgMHg0MywgMHg2MywgMHhCRiwKIAotMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLTB4MzUsIDB4MzAsIDB4NEYsIDB4RTksCisJMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKKwkweDM1LCAweDMwLCAweDRGLCAweEU5LAogCi0weDM4LCAweDIxLCAweDJDLCAweDlGLAotMHgzOSwgMHgzOCwgMHg0RiwgMHhFOSwKKwkweDM4LCAweDIxLCAweDJDLCAweDlGLAorCTB4MzksIDB4MzgsIDB4NEYsIDB4RTksCiAKLTB4MEEsIDB4NDgsIDB4NTgsIDB4QkYsCi0weDAyLCAweDQ4LCAweDY4LCAweEJGLAorCTB4MEEsIDB4NDgsIDB4NTgsIDB4QkYsCisJMHgwMiwgMHg0OCwgMHg2OCwgMHhCRiwKIAotMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLTB4ODAsIDB4MzEsIDB4NTcsIDB4RTksCisJMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKKwkweDgwLCAweDMxLCAweDU3LCAweEU5LAogCi0weDM5LCAweEU1LCAweDJDLCAweDlGLAotMHg4MSwgMHgzOSwgMHg1NywgMHhFOSwKKwkweDM5LCAweEU1LCAweDJDLCAweDlGLAorCTB4ODEsIDB4MzksIDB4NTcsIDB4RTksCiAKLTB4MkEsIDB4NDksIDB4NTksIDB4QkYsCi0weDFBLCAweDQ5LCAweDY5LCAweEJGLAorCTB4MkEsIDB4NDksIDB4NTksIDB4QkYsCisJMHgxQSwgMHg0OSwgMHg2OSwgMHhCRiwKIAotMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLTB4ODIsIDB4MzAsIDB4NTcsIDB4RTksCisJMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKKwkweDgyLCAweDMwLCAweDU3LCAweEU5LAogCi0weDM4LCAweDIxLCAweDJDLCAweDlGLAotMHg4MywgMHgzOCwgMHg1NywgMHhFOSwKKwkweDM4LCAweDIxLCAweDJDLCAweDlGLAorCTB4ODMsIDB4MzgsIDB4NTcsIDB4RTksCiAKLTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0weDg0LCAweDMxLCAweDVFLCAweEU5LAorCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCisJMHg4NCwgMHgzMSwgMHg1RSwgMHhFOSwKIAotMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLTB4ODUsIDB4MzksIDB4NUUsIDB4RTksCisJMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKKwkweDg1LCAweDM5LCAweDVFLCAweEU5LAogCi0weDg2LCAweDc2LCAweDU3LCAweEU5LAotMHg4QSwgMHgzNiwgMHgyMCwgMHhFOSwKKwkweDg2LCAweDc2LCAweDU3LCAweEU5LAorCTB4OEEsIDB4MzYsIDB4MjAsIDB4RTksCiAKLTB4ODcsIDB4NzcsIDB4NTcsIDB4RTksCi0weDhCLCAweDNFLCAweEJGLCAweEVBLAorCTB4ODcsIDB4NzcsIDB4NTcsIDB4RTksCisJMHg4QiwgMHgzRSwgMHhCRiwgMHhFQSwKIAotMHg4MCwgMHgzMCwgMHg1NywgMHhFOSwKLTB4ODEsIDB4MzgsIDB4NTcsIDB4RTksCisJMHg4MCwgMHgzMCwgMHg1NywgMHhFOSwKKwkweDgxLCAweDM4LCAweDU3LCAweEU5LAogCi0weDgyLCAweDMxLCAweDU3LCAweEU5LAotMHg4NiwgMHg3OCwgMHg1NywgMHhFOSwKKwkweDgyLCAweDMxLCAweDU3LCAweEU5LAorCTB4ODYsIDB4NzgsIDB4NTcsIDB4RTksCiAKLTB4ODMsIDB4MzksIDB4NTcsIDB4RTksCi0weDg3LCAweDc5LCAweDU3LCAweEU5LAorCTB4ODMsIDB4MzksIDB4NTcsIDB4RTksCisJMHg4NywgMHg3OSwgMHg1NywgMHhFOSwKIAotMHgzMCwgMHgxRiwgMHg1RiwgMHhFOSwKLTB4OEEsIDB4MzQsIDB4MjAsIDB4RTksCisJMHgzMCwgMHgxRiwgMHg1RiwgMHhFOSwKKwkweDhBLCAweDM0LCAweDIwLCAweEU5LAogCi0weDhCLCAweDNDLCAweDIwLCAweEU5LAotMHgzNywgMHg1MCwgMHg2MCwgMHhCRCwKKwkweDhCLCAweDNDLCAweDIwLCAweEU5LAorCTB4MzcsIDB4NTAsIDB4NjAsIDB4QkQsCiAKLTB4NTcsIDB4MEQsIDB4MjAsIDB4RTksCi0weDM1LCAweDUxLCAweDYxLCAweEJELAorCTB4NTcsIDB4MEQsIDB4MjAsIDB4RTksCisJMHgzNSwgMHg1MSwgMHg2MSwgMHhCRCwKIAotMHgyQiwgMHg1MCwgMHgyMCwgMHhFOSwKLTB4MUQsIDB4MzcsIDB4RTEsIDB4RUEsCisJMHgyQiwgMHg1MCwgMHgyMCwgMHhFOSwKKwkweDFELCAweDM3LCAweEUxLCAweEVBLAogCi0weDFFLCAweDM1LCAweEUxLCAweEVBLAotMHgwMCwgMHhFMCwKLTB4MEUsIDB4NzcsCisJMHgxRSwgMHgzNSwgMHhFMSwgMHhFQSwKKwkweDAwLCAweEUwLAorCTB4MEUsIDB4NzcsCiAKLTB4MjQsIDB4NTEsIDB4MjAsIDB4RTksCi0weDg5LCAweEZGLCAweDIwLCAweEVBLAorCTB4MjQsIDB4NTEsIDB4MjAsIDB4RTksCisJMHg4OSwgMHhGRiwgMHgyMCwgMHhFQSwKIAotMHgxNiwgMHgwRSwgMHgyMCwgMHhFOSwKLTB4NTcsIDB4MkUsIDB4QkYsIDB4RUEsCisJMHgxNiwgMHgwRSwgMHgyMCwgMHhFOSwKKwkweDU3LCAweDJFLCAweEJGLCAweEVBLAogCi0weDBCLCAweDQ2LCAweEEwLCAweEU4LAotMHgxQiwgMHg1NiwgMHhBMCwgMHhFOCwKKwkweDBCLCAweDQ2LCAweEEwLCAweEU4LAorCTB4MUIsIDB4NTYsIDB4QTAsIDB4RTgsCiAKLTB4MkIsIDB4NjYsIDB4QTAsIDB4RTgsCi0weDBDLCAweDQ3LCAweEEwLCAweEU4LAorCTB4MkIsIDB4NjYsIDB4QTAsIDB4RTgsCisJMHgwQywgMHg0NywgMHhBMCwgMHhFOCwKIAotMHgxQywgMHg1NywgMHhBMCwgMHhFOCwKLTB4MkMsIDB4NjcsIDB4QTAsIDB4RTgsCisJMHgxQywgMHg1NywgMHhBMCwgMHhFOCwKKwkweDJDLCAweDY3LCAweEEwLCAweEU4LAogCi0weDBCLCAweDAwLAotMHgxQiwgMHgwMCwKLTB4MkIsIDB4MDAsCi0weDAwLCAweEUwLAorCTB4MEIsIDB4MDAsCisJMHgxQiwgMHgwMCwKKwkweDJCLCAweDAwLAorCTB4MDAsIDB4RTAsCiAKLTB4MEMsIDB4MDAsCi0weDFDLCAweDAwLAotMHgyQywgMHgwMCwKLTB4MDAsIDB4RTAsCisJMHgwQywgMHgwMCwKKwkweDFDLCAweDAwLAorCTB4MkMsIDB4MDAsCisJMHgwMCwgMHhFMCwKIAotMHgwQiwgMHg2NSwKLTB4MUIsIDB4NjUsCi0weDJCLCAweDY1LAotMHgwMCwgMHhFMCwKKwkweDBCLCAweDY1LAorCTB4MUIsIDB4NjUsCisJMHgyQiwgMHg2NSwKKwkweDAwLCAweEUwLAogCi0weDBDLCAweDY1LAotMHgxQywgMHg2NSwKLTB4MkMsIDB4NjUsCi0weDAwLCAweEUwLAorCTB4MEMsIDB4NjUsCisJMHgxQywgMHg2NSwKKwkweDJDLCAweDY1LAorCTB4MDAsIDB4RTAsCiAKLTB4MEIsIDB4MUIsIDB4NjAsIDB4RUMsCi0weDM2LCAweEQ3LCAweDM2LCAweEFELAorCTB4MEIsIDB4MUIsIDB4NjAsIDB4RUMsCisJMHgzNiwgMHhENywgMHgzNiwgMHhBRCwKIAotMHgyQiwgMHg4MCwgMHg2MCwgMHhFQywKLTB4MEMsIDB4MUMsIDB4NjAsIDB4RUMsCisJMHgyQiwgMHg4MCwgMHg2MCwgMHhFQywKKwkweDBDLCAweDFDLCAweDYwLCAweEVDLAogCi0weDNFLCAweEQ3LCAweDNFLCAweEFELAotMHgyQywgMHg4MCwgMHg2MCwgMHhFQywKKwkweDNFLCAweEQ3LCAweDNFLCAweEFELAorCTB4MkMsIDB4ODAsIDB4NjAsIDB4RUMsCiAKLTB4MEIsIDB4MkIsIDB4REUsIDB4RTgsCi0weDFCLCAweDgwLCAweERFLCAweEU4LAorCTB4MEIsIDB4MkIsIDB4REUsIDB4RTgsCisJMHgxQiwgMHg4MCwgMHhERSwgMHhFOCwKIAotMHgzNiwgMHg4MCwgMHgzNiwgMHhCRCwKLTB4M0UsIDB4ODAsIDB4M0UsIDB4QkQsCisJMHgzNiwgMHg4MCwgMHgzNiwgMHhCRCwKKwkweDNFLCAweDgwLCAweDNFLCAweEJELAogCi0weDMzLCAweEQ3LCAweDBCLCAweEJELAotMHgzQiwgMHhENywgMHgxQiwgMHhCRCwKKwkweDMzLCAweEQ3LCAweDBCLCAweEJELAorCTB4M0IsIDB4RDcsIDB4MUIsIDB4QkQsCiAKLTB4NDYsIDB4ODAsIDB4NDYsIDB4Q0YsCi0weDU3LCAweDgwLCAweDU3LCAweENGLAorCTB4NDYsIDB4ODAsIDB4NDYsIDB4Q0YsCisJMHg1NywgMHg4MCwgMHg1NywgMHhDRiwKIAotMHg2NiwgMHgzMywgMHg2NiwgMHhDRiwKLTB4NDcsIDB4M0IsIDB4NDcsIDB4Q0YsCisJMHg2NiwgMHgzMywgMHg2NiwgMHhDRiwKKwkweDQ3LCAweDNCLCAweDQ3LCAweENGLAogCi0weDU2LCAweDMzLCAweDU2LCAweENGLAotMHg2NywgMHgzQiwgMHg2NywgMHhDRiwKKwkweDU2LCAweDMzLCAweDU2LCAweENGLAorCTB4NjcsIDB4M0IsIDB4NjcsIDB4Q0YsCiAKLTB4MEIsIDB4NDgsIDB4QTAsIDB4RTgsCi0weDFCLCAweDU4LCAweEEwLCAweEU4LAorCTB4MEIsIDB4NDgsIDB4QTAsIDB4RTgsCisJMHgxQiwgMHg1OCwgMHhBMCwgMHhFOCwKIAotMHgyQiwgMHg2OCwgMHhBMCwgMHhFOCwKLTB4MEMsIDB4NDksIDB4QTAsIDB4RTgsCisJMHgyQiwgMHg2OCwgMHhBMCwgMHhFOCwKKwkweDBDLCAweDQ5LCAweEEwLCAweEU4LAogCi0weDFDLCAweDU5LCAweEEwLCAweEU4LAotMHgyQywgMHg2OSwgMHhBMCwgMHhFOCwKKwkweDFDLCAweDU5LCAweEEwLCAweEU4LAorCTB4MkMsIDB4NjksIDB4QTAsIDB4RTgsCiAKLTB4MEIsIDB4MDAsCi0weDFCLCAweDAwLAotMHgyQiwgMHgwMCwKLTB4MDAsIDB4RTAsCisJMHgwQiwgMHgwMCwKKwkweDFCLCAweDAwLAorCTB4MkIsIDB4MDAsCisJMHgwMCwgMHhFMCwKIAotMHgwQywgMHgwMCwKLTB4MUMsIDB4MDAsCi0weDJDLCAweDAwLAotMHgwMCwgMHhFMCwKKwkweDBDLCAweDAwLAorCTB4MUMsIDB4MDAsCisJMHgyQywgMHgwMCwKKwkweDAwLCAweEUwLAogCi0weDBCLCAweDY1LAotMHgxQiwgMHg2NSwKLTB4MkIsIDB4NjUsCi0weDAwLCAweEUwLAorCTB4MEIsIDB4NjUsCisJMHgxQiwgMHg2NSwKKwkweDJCLCAweDY1LAorCTB4MDAsIDB4RTAsCiAKLTB4MEMsIDB4NjUsCi0weDFDLCAweDY1LAotMHgyQywgMHg2NSwKLTB4MDAsIDB4RTAsCisJMHgwQywgMHg2NSwKKwkweDFDLCAweDY1LAorCTB4MkMsIDB4NjUsCisJMHgwMCwgMHhFMCwKIAotMHgwQiwgMHgxQiwgMHg2MCwgMHhFQywKLTB4MzQsIDB4RDcsIDB4MzQsIDB4QUQsCisJMHgwQiwgMHgxQiwgMHg2MCwgMHhFQywKKwkweDM0LCAweEQ3LCAweDM0LCAweEFELAogCi0weDJCLCAweDgwLCAweDYwLCAweEVDLAotMHgwQywgMHgxQywgMHg2MCwgMHhFQywKKwkweDJCLCAweDgwLCAweDYwLCAweEVDLAorCTB4MEMsIDB4MUMsIDB4NjAsIDB4RUMsCiAKLTB4M0MsIDB4RDcsIDB4M0MsIDB4QUQsCi0weDJDLCAweDgwLCAweDYwLCAweEVDLAorCTB4M0MsIDB4RDcsIDB4M0MsIDB4QUQsCisJMHgyQywgMHg4MCwgMHg2MCwgMHhFQywKIAotMHgwQiwgMHgyQiwgMHhERSwgMHhFOCwKLTB4MUIsIDB4ODAsIDB4REUsIDB4RTgsCisJMHgwQiwgMHgyQiwgMHhERSwgMHhFOCwKKwkweDFCLCAweDgwLCAweERFLCAweEU4LAogCi0weDM0LCAweDgwLCAweDM0LCAweEJELAotMHgzQywgMHg4MCwgMHgzQywgMHhCRCwKKwkweDM0LCAweDgwLCAweDM0LCAweEJELAorCTB4M0MsIDB4ODAsIDB4M0MsIDB4QkQsCiAKLTB4MzMsIDB4RDcsIDB4MEIsIDB4QkQsCi0weDNCLCAweEQ3LCAweDFCLCAweEJELAorCTB4MzMsIDB4RDcsIDB4MEIsIDB4QkQsCisJMHgzQiwgMHhENywgMHgxQiwgMHhCRCwKIAotMHg0OCwgMHg4MCwgMHg0OCwgMHhDRiwKLTB4NTksIDB4ODAsIDB4NTksIDB4Q0YsCisJMHg0OCwgMHg4MCwgMHg0OCwgMHhDRiwKKwkweDU5LCAweDgwLCAweDU5LCAweENGLAogCi0weDY4LCAweDMzLCAweDY4LCAweENGLAotMHg0OSwgMHgzQiwgMHg0OSwgMHhDRiwKKwkweDY4LCAweDMzLCAweDY4LCAweENGLAorCTB4NDksIDB4M0IsIDB4NDksIDB4Q0YsCiAKLTB4QTksIDB4RkYsIDB4MjAsIDB4RUEsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4QTksIDB4RkYsIDB4MjAsIDB4RUEsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHg1OCwgMHgzMywgMHg1OCwgMHhDRiwKLTB4NjksIDB4M0IsIDB4NjksIDB4Q0YsCisJMHg1OCwgMHgzMywgMHg1OCwgMHhDRiwKKwkweDY5LCAweDNCLCAweDY5LCAweENGLAogCi0weDY3LCAweEZGLCAweDIwLCAweEVBLAotMHg1NywgMHhDMCwgMHhCRiwgMHhFQSwKKwkweDY3LCAweEZGLCAweDIwLCAweEVBLAorCTB4NTcsIDB4QzAsIDB4QkYsIDB4RUEsCiAKLTB4MDAsIDB4ODAsIDB4QTAsIDB4RTksCi0weDAwLCAweDAwLCAweEQ4LCAweEVDLAorCTB4MDAsIDB4ODAsIDB4QTAsIDB4RTksCisJMHgwMCwgMHgwMCwgMHhEOCwgMHhFQywKIAogfTsKIAogc3RhdGljIHVuc2lnbmVkIGNoYXIgd2FycF9nNDAwX3QyZ3pzZltdID0gewogCi0weDAwLCAweDhBLCAweDk4LCAweEU5LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDhBLCAweDk4LCAweEU5LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MDAsIDB4ODAsIDB4QTAsIDB4RTksCi0weDAwLCAweDAwLCAweEQ4LCAweEVDLAorCTB4MDAsIDB4ODAsIDB4QTAsIDB4RTksCisJMHgwMCwgMHgwMCwgMHhEOCwgMHhFQywKIAotMHhGRiwgMHg4MCwgMHhDMCwgMHhFOSwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHhGRiwgMHg4MCwgMHhDMCwgMHhFOSwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDBBLCAweDQwLCAweDUwLCAweEJGLAotMHgyQSwgMHg0MCwgMHg2MCwgMHhCRiwKKwkweDBBLCAweDQwLCAweDUwLCAweEJGLAorCTB4MkEsIDB4NDAsIDB4NjAsIDB4QkYsCiAKLTB4MzIsIDB4NDEsIDB4NTEsIDB4QkYsCi0weDNBLCAweDQxLCAweDYxLCAweEJGLAorCTB4MzIsIDB4NDEsIDB4NTEsIDB4QkYsCisJMHgzQSwgMHg0MSwgMHg2MSwgMHhCRiwKIAotMHhDMywgMHg2QiwKLTB4RDMsIDB4NkIsCi0weDAwLCAweDhBLCAweDk4LCAweEU5LAorCTB4QzMsIDB4NkIsCisJMHhEMywgMHg2QiwKKwkweDAwLCAweDhBLCAweDk4LCAweEU5LAogCi0weDczLCAweDdCLCAweEM4LCAweEVDLAotMHg5NiwgMHhFMiwKLTB4NDEsIDB4MDQsCisJMHg3MywgMHg3QiwgMHhDOCwgMHhFQywKKwkweDk2LCAweEUyLAorCTB4NDEsIDB4MDQsCiAKLTB4N0IsIDB4NDMsIDB4QTAsIDB4RTgsCi0weDczLCAweDUzLCAweEEwLCAweEU4LAorCTB4N0IsIDB4NDMsIDB4QTAsIDB4RTgsCisJMHg3MywgMHg1MywgMHhBMCwgMHhFOCwKIAotMHhBRCwgMHhFRSwgMHgyMywgMHg5RiwKLTB4MDAsIDB4RTAsCi0weDUxLCAweDA0LAorCTB4QUQsIDB4RUUsIDB4MjMsIDB4OUYsCisJMHgwMCwgMHhFMCwKKwkweDUxLCAweDA0LAogCi0weDkwLCAweEUyLAotMHg2MSwgMHgwNCwKLTB4MzEsIDB4NDYsIDB4QjEsIDB4RTgsCisJMHg5MCwgMHhFMiwKKwkweDYxLCAweDA0LAorCTB4MzEsIDB4NDYsIDB4QjEsIDB4RTgsCiAKLTB4NTEsIDB4NDEsIDB4RTAsIDB4RUMsCi0weDM5LCAweDY3LCAweEIxLCAweEU4LAorCTB4NTEsIDB4NDEsIDB4RTAsIDB4RUMsCisJMHgzOSwgMHg2NywgMHhCMSwgMHhFOCwKIAotMHgwMCwgMHgwNCwKLTB4NDYsIDB4RTIsCi0weDczLCAweDYzLCAweEEwLCAweEU4LAorCTB4MDAsIDB4MDQsCisJMHg0NiwgMHhFMiwKKwkweDczLCAweDYzLCAweEEwLCAweEU4LAogCi0weDYxLCAweDQxLCAweEUwLCAweEVDLAotMHgzMSwgMHgwMCwKLTB4MzksIDB4MDAsCisJMHg2MSwgMHg0MSwgMHhFMCwgMHhFQywKKwkweDMxLCAweDAwLAorCTB4MzksIDB4MDAsCiAKLTB4OEEsIDB4ODAsIDB4MTUsIDB4RUEsCi0weDEwLCAweDA0LAotMHgyMCwgMHgwNCwKKwkweDhBLCAweDgwLCAweDE1LCAweEVBLAorCTB4MTAsIDB4MDQsCisJMHgyMCwgMHgwNCwKIAotMHg2MSwgMHg1MSwgMHhFMCwgMHhFQywKLTB4MkYsIDB4NDEsIDB4NjAsIDB4RUEsCisJMHg2MSwgMHg1MSwgMHhFMCwgMHhFQywKKwkweDJGLCAweDQxLCAweDYwLCAweEVBLAogCi0weDMxLCAweDIwLAotMHgzOSwgMHgyMCwKLTB4MUYsIDB4NDIsIDB4QTAsIDB4RTgsCisJMHgzMSwgMHgyMCwKKwkweDM5LCAweDIwLAorCTB4MUYsIDB4NDIsIDB4QTAsIDB4RTgsCiAKLTB4MkEsIDB4NDIsIDB4NTIsIDB4QkYsCi0weDBGLCAweDUyLCAweEEwLCAweEU4LAorCTB4MkEsIDB4NDIsIDB4NTIsIDB4QkYsCisJMHgwRiwgMHg1MiwgMHhBMCwgMHhFOCwKIAotMHgxQSwgMHg0MiwgMHg2MiwgMHhCRiwKLTB4MUUsIDB4NTEsIDB4NjAsIDB4RUEsCisJMHgxQSwgMHg0MiwgMHg2MiwgMHhCRiwKKwkweDFFLCAweDUxLCAweDYwLCAweEVBLAogCi0weDczLCAweDdCLCAweEM4LCAweEVDLAotMHgwRSwgMHg2MSwgMHg2MCwgMHhFQSwKKwkweDczLCAweDdCLCAweEM4LCAweEVDLAorCTB4MEUsIDB4NjEsIDB4NjAsIDB4RUEsCiAKLTB4MzIsIDB4NDAsIDB4NTAsIDB4QkQsCi0weDIyLCAweDQwLCAweDYwLCAweEJELAorCTB4MzIsIDB4NDAsIDB4NTAsIDB4QkQsCisJMHgyMiwgMHg0MCwgMHg2MCwgMHhCRCwKIAotMHgxMiwgMHg0MSwgMHg1MSwgMHhCRCwKLTB4M0EsIDB4NDEsIDB4NjEsIDB4QkQsCisJMHgxMiwgMHg0MSwgMHg1MSwgMHhCRCwKKwkweDNBLCAweDQxLCAweDYxLCAweEJELAogCi0weEJGLCAweDJGLCAweDBFLCAweEJELAotMHg5NywgMHhFMiwKLTB4N0IsIDB4NzIsCisJMHhCRiwgMHgyRiwgMHgwRSwgMHhCRCwKKwkweDk3LCAweEUyLAorCTB4N0IsIDB4NzIsCiAKLTB4MzIsIDB4MjAsCi0weDIyLCAweDIwLAotMHgxMiwgMHgyMCwKLTB4M0EsIDB4MjAsCisJMHgzMiwgMHgyMCwKKwkweDIyLCAweDIwLAorCTB4MTIsIDB4MjAsCisJMHgzQSwgMHgyMCwKIAotMHgzNSwgMHg0OCwgMHhCMSwgMHhFOCwKLTB4M0QsIDB4NTksIDB4QjEsIDB4RTgsCisJMHgzNSwgMHg0OCwgMHhCMSwgMHhFOCwKKwkweDNELCAweDU5LCAweEIxLCAweEU4LAogCi0weDQ2LCAweDMxLCAweDQ2LCAweEJGLAotMHg1NiwgMHgzMSwgMHg1NiwgMHhCRiwKKwkweDQ2LCAweDMxLCAweDQ2LCAweEJGLAorCTB4NTYsIDB4MzEsIDB4NTYsIDB4QkYsCiAKLTB4QjMsIDB4RTIsIDB4MkQsIDB4OUYsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4QjMsIDB4RTIsIDB4MkQsIDB4OUYsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHg2NiwgMHgzMSwgMHg2NiwgMHhCRiwKLTB4NDcsIDB4MzksIDB4NDcsIDB4QkYsCisJMHg2NiwgMHgzMSwgMHg2NiwgMHhCRiwKKwkweDQ3LCAweDM5LCAweDQ3LCAweEJGLAogCi0weDU3LCAweDM5LCAweDU3LCAweEJGLAotMHg2NywgMHgzOSwgMHg2NywgMHhCRiwKKwkweDU3LCAweDM5LCAweDU3LCAweEJGLAorCTB4NjcsIDB4MzksIDB4NjcsIDB4QkYsCiAKLTB4N0IsIDB4ODAsIDB4MDcsIDB4RUEsCi0weDI0LCAweDQxLCAweDIwLCAweEU5LAorCTB4N0IsIDB4ODAsIDB4MDcsIDB4RUEsCisJMHgyNCwgMHg0MSwgMHgyMCwgMHhFOSwKIAotMHgzNSwgMHgwMCwKLTB4M0QsIDB4MDAsCi0weDAwLCAweEUwLAotMHgyRCwgMHg3MywKKwkweDM1LCAweDAwLAorCTB4M0QsIDB4MDAsCisJMHgwMCwgMHhFMCwKKwkweDJELCAweDczLAogCi0weDMzLCAweDcyLAotMHgwQywgMHhFMywKLTB4OEQsIDB4MkYsIDB4MUUsIDB4QkQsCisJMHgzMywgMHg3MiwKKwkweDBDLCAweEUzLAorCTB4OEQsIDB4MkYsIDB4MUUsIDB4QkQsCiAKLTB4NDMsIDB4NzUsIDB4RjgsIDB4RUMsCi0weDM1LCAweDIwLAotMHgzRCwgMHgyMCwKKwkweDQzLCAweDc1LCAweEY4LCAweEVDLAorCTB4MzUsIDB4MjAsCisJMHgzRCwgMHgyMCwKIAotMHg0MywgMHg0MywgMHgyRCwgMHhERiwKLTB4NTMsIDB4NTMsIDB4MkQsIDB4REYsCisJMHg0MywgMHg0MywgMHgyRCwgMHhERiwKKwkweDUzLCAweDUzLCAweDJELCAweERGLAogCi0weEFFLCAweDFFLCAweDBFLCAweEJELAotMHg1OCwgMHhFMywKLTB4MzMsIDB4NjYsCisJMHhBRSwgMHgxRSwgMHgwRSwgMHhCRCwKKwkweDU4LCAweEUzLAorCTB4MzMsIDB4NjYsCiAKLTB4NDgsIDB4MzUsIDB4NDgsIDB4QkYsCi0weDU4LCAweDM1LCAweDU4LCAweEJGLAorCTB4NDgsIDB4MzUsIDB4NDgsIDB4QkYsCisJMHg1OCwgMHgzNSwgMHg1OCwgMHhCRiwKIAotMHg2OCwgMHgzNSwgMHg2OCwgMHhCRiwKLTB4NDksIDB4M0QsIDB4NDksIDB4QkYsCisJMHg2OCwgMHgzNSwgMHg2OCwgMHhCRiwKKwkweDQ5LCAweDNELCAweDQ5LCAweEJGLAogCi0weDU5LCAweDNELCAweDU5LCAweEJGLAotMHg2OSwgMHgzRCwgMHg2OSwgMHhCRiwKKwkweDU5LCAweDNELCAweDU5LCAweEJGLAorCTB4NjksIDB4M0QsIDB4NjksIDB4QkYsCiAKLTB4NjMsIDB4NjMsIDB4MkQsIDB4REYsCi0weDRELCAweDdELCAweEY4LCAweEVDLAorCTB4NjMsIDB4NjMsIDB4MkQsIDB4REYsCisJMHg0RCwgMHg3RCwgMHhGOCwgMHhFQywKIAotMHg1OSwgMHhFMywKLTB4MDAsIDB4RTAsCi0weEI4LCAweDM4LCAweDMzLCAweEJGLAorCTB4NTksIDB4RTMsCisJMHgwMCwgMHhFMCwKKwkweEI4LCAweDM4LCAweDMzLCAweEJGLAogCi0weDJELCAweDczLAotMHgzMCwgMHg3NiwKLTB4MTgsIDB4M0EsIDB4NDEsIDB4RTksCisJMHgyRCwgMHg3MywKKwkweDMwLCAweDc2LAorCTB4MTgsIDB4M0EsIDB4NDEsIDB4RTksCiAKLTB4M0YsIDB4NTMsIDB4QTAsIDB4RTgsCi0weDA1LCAweDgwLCAweDNELCAweEVBLAorCTB4M0YsIDB4NTMsIDB4QTAsIDB4RTgsCisJMHgwNSwgMHg4MCwgMHgzRCwgMHhFQSwKIAotMHgzNywgMHg0MywgMHhBMCwgMHhFOCwKLTB4M0QsIDB4NjMsIDB4QTAsIDB4RTgsCisJMHgzNywgMHg0MywgMHhBMCwgMHhFOCwKKwkweDNELCAweDYzLCAweEEwLCAweEU4LAogCi0weDUwLCAweDcwLCAweEY4LCAweEVDLAotMHgyQiwgMHg1MCwgMHgzQywgMHhFOSwKKwkweDUwLCAweDcwLCAweEY4LCAweEVDLAorCTB4MkIsIDB4NTAsIDB4M0MsIDB4RTksCiAKLTB4MUYsIDB4MEYsIDB4QkMsIDB4RTgsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MUYsIDB4MEYsIDB4QkMsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHg1OSwgMHg3OCwgMHhGOCwgMHhFQywKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHg1OSwgMHg3OCwgMHhGOCwgMHhFQywKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDE1LCAweEMwLCAweDIwLCAweEU5LAotMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKKwkweDE1LCAweEMwLCAweDIwLCAweEU5LAorCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCiAKLTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0weDE1LCAweEMwLCAweDIwLCAweEU5LAorCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCisJMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKIAotMHgxRSwgMHgxMiwgMHg0MSwgMHhFOSwKLTB4MUEsIDB4MjIsIDB4NDEsIDB4RTksCisJMHgxRSwgMHgxMiwgMHg0MSwgMHhFOSwKKwkweDFBLCAweDIyLCAweDQxLCAweEU5LAogCi0weDQ2LCAweDM3LCAweDQ2LCAweERGLAotMHg1NiwgMHgzRiwgMHg1NiwgMHhERiwKKwkweDQ2LCAweDM3LCAweDQ2LCAweERGLAorCTB4NTYsIDB4M0YsIDB4NTYsIDB4REYsCiAKLTB4MkIsIDB4NDAsIDB4M0QsIDB4RTksCi0weDY2LCAweDNELCAweDY2LCAweERGLAorCTB4MkIsIDB4NDAsIDB4M0QsIDB4RTksCisJMHg2NiwgMHgzRCwgMHg2NiwgMHhERiwKIAotMHgxRCwgMHgzMiwgMHg0MSwgMHhFOSwKLTB4NjcsIDB4M0QsIDB4NjcsIDB4REYsCisJMHgxRCwgMHgzMiwgMHg0MSwgMHhFOSwKKwkweDY3LCAweDNELCAweDY3LCAweERGLAogCi0weDQ3LCAweDM3LCAweDQ3LCAweERGLAotMHg1NywgMHgzRiwgMHg1NywgMHhERiwKKwkweDQ3LCAweDM3LCAweDQ3LCAweERGLAorCTB4NTcsIDB4M0YsIDB4NTcsIDB4REYsCiAKLTB4MkEsIDB4NDAsIDB4MjAsIDB4RTksCi0weDU5LCAweDNGLCAweDU5LCAweERGLAorCTB4MkEsIDB4NDAsIDB4MjAsIDB4RTksCisJMHg1OSwgMHgzRiwgMHg1OSwgMHhERiwKIAotMHgxNiwgMHgzMCwgMHgyMCwgMHhFOSwKLTB4NjksIDB4M0QsIDB4NjksIDB4REYsCisJMHgxNiwgMHgzMCwgMHgyMCwgMHhFOSwKKwkweDY5LCAweDNELCAweDY5LCAweERGLAogCi0weDQ4LCAweDM3LCAweDQ4LCAweERGLAotMHg1OCwgMHgzRiwgMHg1OCwgMHhERiwKKwkweDQ4LCAweDM3LCAweDQ4LCAweERGLAorCTB4NTgsIDB4M0YsIDB4NTgsIDB4REYsCiAKLTB4NjgsIDB4M0QsIDB4NjgsIDB4REYsCi0weDQ5LCAweDM3LCAweDQ5LCAweERGLAorCTB4NjgsIDB4M0QsIDB4NjgsIDB4REYsCisJMHg0OSwgMHgzNywgMHg0OSwgMHhERiwKIAotMHgzMiwgMHgzMiwgMHgyRCwgMHhERiwKLTB4MjIsIDB4MjIsIDB4MkQsIDB4REYsCisJMHgzMiwgMHgzMiwgMHgyRCwgMHhERiwKKwkweDIyLCAweDIyLCAweDJELCAweERGLAogCi0weDEyLCAweDEyLCAweDJELCAweERGLAotMHgzQSwgMHgzQSwgMHgyRCwgMHhERiwKKwkweDEyLCAweDEyLCAweDJELCAweERGLAorCTB4M0EsIDB4M0EsIDB4MkQsIDB4REYsCiAKLTB4MEYsIDB4Q0YsIDB4NzQsIDB4QzIsCi0weDM3LCAweENGLCAweDc0LCAweEM0LAorCTB4MEYsIDB4Q0YsIDB4NzQsIDB4QzIsCisJMHgzNywgMHhDRiwgMHg3NCwgMHhDNCwKIAotMHgwQSwgMHg0NCwgMHg1NCwgMHhCMCwKLTB4MDIsIDB4NDQsIDB4NjQsIDB4QjAsCisJMHgwQSwgMHg0NCwgMHg1NCwgMHhCMCwKKwkweDAyLCAweDQ0LCAweDY0LCAweEIwLAogCi0weDNELCAweENGLCAweDc0LCAweEMwLAotMHgzNCwgMHgzNywgMHgyMCwgMHhFOSwKKwkweDNELCAweENGLCAweDc0LCAweEMwLAorCTB4MzQsIDB4MzcsIDB4MjAsIDB4RTksCiAKLTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0weDM4LCAweDBGLCAweDIwLCAweEU5LAorCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCisJMHgzOCwgMHgwRiwgMHgyMCwgMHhFOSwKIAotMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLTB4M0MsIDB4M0QsIDB4MjAsIDB4RTksCisJMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKKwkweDNDLCAweDNELCAweDIwLCAweEU5LAogCi0weDJBLCAweDQ0LCAweDU0LCAweEIyLAotMHgxQSwgMHg0NCwgMHg2NCwgMHhCMiwKKwkweDJBLCAweDQ0LCAweDU0LCAweEIyLAorCTB4MUEsIDB4NDQsIDB4NjQsIDB4QjIsCiAKLTB4MzYsIDB4ODAsIDB4M0EsIDB4RUEsCi0weDBBLCAweDIwLAotMHgwMiwgMHgyMCwKKwkweDM2LCAweDgwLCAweDNBLCAweEVBLAorCTB4MEEsIDB4MjAsCisJMHgwMiwgMHgyMCwKIAotMHgwRiwgMHhDRiwgMHg3NSwgMHhDMCwKLTB4MkEsIDB4MjAsCi0weDFBLCAweDIwLAorCTB4MEYsIDB4Q0YsIDB4NzUsIDB4QzAsCisJMHgyQSwgMHgyMCwKKwkweDFBLCAweDIwLAogCi0weDMwLCAweDUwLCAweDJFLCAweDlGLAotMHgzMiwgMHgzMSwgMHg1RiwgMHhFOSwKKwkweDMwLCAweDUwLCAweDJFLCAweDlGLAorCTB4MzIsIDB4MzEsIDB4NUYsIDB4RTksCiAKLTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0weDMzLCAweDM5LCAweDVGLCAweEU5LAorCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCisJMHgzMywgMHgzOSwgMHg1RiwgMHhFOSwKIAotMHgzRCwgMHhDRiwgMHg3NSwgMHhDMiwKLTB4MzcsIDB4Q0YsIDB4NzUsIDB4QzQsCisJMHgzRCwgMHhDRiwgMHg3NSwgMHhDMiwKKwkweDM3LCAweENGLCAweDc1LCAweEM0LAogCi0weDMxLCAweDUzLCAweDJGLCAweDlGLAotMHhBNiwgMHgwRiwgMHgyMCwgMHhFOSwKKwkweDMxLCAweDUzLCAweDJGLCAweDlGLAorCTB4QTYsIDB4MEYsIDB4MjAsIDB4RTksCiAKLTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0weEEzLCAweDNELCAweDIwLCAweEU5LAorCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCisJMHhBMywgMHgzRCwgMHgyMCwgMHhFOSwKIAotMHgyQSwgMHg0NCwgMHg1NCwgMHhCNCwKLTB4MUEsIDB4NDQsIDB4NjQsIDB4QjQsCisJMHgyQSwgMHg0NCwgMHg1NCwgMHhCNCwKKwkweDFBLCAweDQ0LCAweDY0LCAweEI0LAogCi0weDBBLCAweDQ1LCAweDU1LCAweEIwLAotMHgwMiwgMHg0NSwgMHg2NSwgMHhCMCwKKwkweDBBLCAweDQ1LCAweDU1LCAweEIwLAorCTB4MDIsIDB4NDUsIDB4NjUsIDB4QjAsCiAKLTB4ODgsIDB4NzMsIDB4NUUsIDB4RTksCi0weDJBLCAweDIwLAotMHgxQSwgMHgyMCwKKwkweDg4LCAweDczLCAweDVFLCAweEU5LAorCTB4MkEsIDB4MjAsCisJMHgxQSwgMHgyMCwKIAotMHhBMCwgMHgzNywgMHgyMCwgMHhFOSwKLTB4MEEsIDB4MjAsCi0weDAyLCAweDIwLAorCTB4QTAsIDB4MzcsIDB4MjAsIDB4RTksCisJMHgwQSwgMHgyMCwKKwkweDAyLCAweDIwLAogCi0weDMxLCAweDUzLCAweDJGLCAweDlGLAotMHgzRSwgMHgzMCwgMHg0RiwgMHhFOSwKKwkweDMxLCAweDUzLCAweDJGLCAweDlGLAorCTB4M0UsIDB4MzAsIDB4NEYsIDB4RTksCiAKLTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0weDNGLCAweDM4LCAweDRGLCAweEU5LAorCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCisJMHgzRiwgMHgzOCwgMHg0RiwgMHhFOSwKIAotMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLTB4M0EsIDB4MzEsIDB4NEYsIDB4RTksCisJMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKKwkweDNBLCAweDMxLCAweDRGLCAweEU5LAogCi0weDM4LCAweDIxLCAweDJDLCAweDlGLAotMHgzQiwgMHgzOSwgMHg0RiwgMHhFOSwKKwkweDM4LCAweDIxLCAweDJDLCAweDlGLAorCTB4M0IsIDB4MzksIDB4NEYsIDB4RTksCiAKLTB4MkEsIDB4NDUsIDB4NTUsIDB4QjIsCi0weDFBLCAweDQ1LCAweDY1LCAweEIyLAorCTB4MkEsIDB4NDUsIDB4NTUsIDB4QjIsCisJMHgxQSwgMHg0NSwgMHg2NSwgMHhCMiwKIAotMHgwQSwgMHg0NSwgMHg1NSwgMHhCNCwKLTB4MDIsIDB4NDUsIDB4NjUsIDB4QjQsCisJMHgwQSwgMHg0NSwgMHg1NSwgMHhCNCwKKwkweDAyLCAweDQ1LCAweDY1LCAweEI0LAogCi0weDBGLCAweENGLCAweDc1LCAweEM2LAotMHgyQSwgMHgyMCwKLTB4MUEsIDB4MjAsCisJMHgwRiwgMHhDRiwgMHg3NSwgMHhDNiwKKwkweDJBLCAweDIwLAorCTB4MUEsIDB4MjAsCiAKLTB4QTcsIDB4MzAsIDB4NEYsIDB4RTksCi0weDBBLCAweDIwLAotMHgwMiwgMHgyMCwKKwkweEE3LCAweDMwLCAweDRGLCAweEU5LAorCTB4MEEsIDB4MjAsCisJMHgwMiwgMHgyMCwKIAotMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLTB4MzEsIDB4MEYsIDB4MjAsIDB4RTksCisJMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKKwkweDMxLCAweDBGLCAweDIwLCAweEU5LAogCi0weDM5LCAweEU1LCAweDJDLCAweDlGLAotMHhBOCwgMHgzOCwgMHg0RiwgMHhFOSwKKwkweDM5LCAweEU1LCAweDJDLCAweDlGLAorCTB4QTgsIDB4MzgsIDB4NEYsIDB4RTksCiAKLTB4MkEsIDB4NDUsIDB4NTUsIDB4QjYsCi0weDFBLCAweDQ1LCAweDY1LCAweEI2LAorCTB4MkEsIDB4NDUsIDB4NTUsIDB4QjYsCisJMHgxQSwgMHg0NSwgMHg2NSwgMHhCNiwKIAotMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLTB4MzYsIDB4MzEsIDB4NEYsIDB4RTksCisJMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKKwkweDM2LCAweDMxLCAweDRGLCAweEU5LAogCi0weDM4LCAweDIxLCAweDJDLCAweDlGLAotMHgzNywgMHgzOSwgMHg0RiwgMHhFOSwKKwkweDM4LCAweDIxLCAweDJDLCAweDlGLAorCTB4MzcsIDB4MzksIDB4NEYsIDB4RTksCiAKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0weDJBLCAweDIwLAotMHgxQSwgMHgyMCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MkEsIDB4MjAsCisJMHgxQSwgMHgyMCwKIAotMHgyQSwgMHg0NiwgMHg1NiwgMHhCRiwKLTB4MUEsIDB4NDYsIDB4NjYsIDB4QkYsCisJMHgyQSwgMHg0NiwgMHg1NiwgMHhCRiwKKwkweDFBLCAweDQ2LCAweDY2LCAweEJGLAogCi0weDMxLCAweDUzLCAweDJGLCAweDlGLAotMHhBNCwgMHgzMSwgMHg0RiwgMHhFOSwKKwkweDMxLCAweDUzLCAweDJGLCAweDlGLAorCTB4QTQsIDB4MzEsIDB4NEYsIDB4RTksCiAKLTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0weEE1LCAweDM5LCAweDRGLCAweEU5LAorCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCisJMHhBNSwgMHgzOSwgMHg0RiwgMHhFOSwKIAotMHgwQSwgMHg0NywgMHg1NywgMHhCRiwKLTB4MDIsIDB4NDcsIDB4NjcsIDB4QkYsCisJMHgwQSwgMHg0NywgMHg1NywgMHhCRiwKKwkweDAyLCAweDQ3LCAweDY3LCAweEJGLAogCi0weDMxLCAweDUzLCAweDJGLCAweDlGLAotMHhBMSwgMHgzMCwgMHg0RiwgMHhFOSwKKwkweDMxLCAweDUzLCAweDJGLCAweDlGLAorCTB4QTEsIDB4MzAsIDB4NEYsIDB4RTksCiAKLTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0weEEyLCAweDM4LCAweDRGLCAweEU5LAorCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCisJMHhBMiwgMHgzOCwgMHg0RiwgMHhFOSwKIAotMHgyQSwgMHg0MywgMHg1MywgMHhCRiwKLTB4MUEsIDB4NDMsIDB4NjMsIDB4QkYsCisJMHgyQSwgMHg0MywgMHg1MywgMHhCRiwKKwkweDFBLCAweDQzLCAweDYzLCAweEJGLAogCi0weDMwLCAweDUwLCAweDJFLCAweDlGLAotMHgzNSwgMHgzMSwgMHg0RiwgMHhFOSwKKwkweDMwLCAweDUwLCAweDJFLCAweDlGLAorCTB4MzUsIDB4MzEsIDB4NEYsIDB4RTksCiAKLTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0weDM5LCAweDM5LCAweDRGLCAweEU5LAorCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCisJMHgzOSwgMHgzOSwgMHg0RiwgMHhFOSwKIAotMHgwQSwgMHg0OCwgMHg1OCwgMHhCRiwKLTB4MDIsIDB4NDgsIDB4NjgsIDB4QkYsCisJMHgwQSwgMHg0OCwgMHg1OCwgMHhCRiwKKwkweDAyLCAweDQ4LCAweDY4LCAweEJGLAogCi0weDMxLCAweDUzLCAweDJGLCAweDlGLAotMHg4MCwgMHgzMSwgMHg1NywgMHhFOSwKKwkweDMxLCAweDUzLCAweDJGLCAweDlGLAorCTB4ODAsIDB4MzEsIDB4NTcsIDB4RTksCiAKLTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0weDgxLCAweDM5LCAweDU3LCAweEU5LAorCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCisJMHg4MSwgMHgzOSwgMHg1NywgMHhFOSwKIAotMHgyQSwgMHg0OSwgMHg1OSwgMHhCRiwKLTB4MUEsIDB4NDksIDB4NjksIDB4QkYsCisJMHgyQSwgMHg0OSwgMHg1OSwgMHhCRiwKKwkweDFBLCAweDQ5LCAweDY5LCAweEJGLAogCi0weDMwLCAweDUwLCAweDJFLCAweDlGLAotMHg4MiwgMHgzMCwgMHg1NywgMHhFOSwKKwkweDMwLCAweDUwLCAweDJFLCAweDlGLAorCTB4ODIsIDB4MzAsIDB4NTcsIDB4RTksCiAKLTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0weDgzLCAweDM4LCAweDU3LCAweEU5LAorCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCisJMHg4MywgMHgzOCwgMHg1NywgMHhFOSwKIAotMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLTB4ODQsIDB4MzEsIDB4NUUsIDB4RTksCisJMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKKwkweDg0LCAweDMxLCAweDVFLCAweEU5LAogCi0weDM5LCAweEU1LCAweDJDLCAweDlGLAotMHg4NSwgMHgzOSwgMHg1RSwgMHhFOSwKKwkweDM5LCAweEU1LCAweDJDLCAweDlGLAorCTB4ODUsIDB4MzksIDB4NUUsIDB4RTksCiAKLTB4ODYsIDB4NzYsIDB4NTcsIDB4RTksCi0weDhBLCAweDM2LCAweDIwLCAweEU5LAorCTB4ODYsIDB4NzYsIDB4NTcsIDB4RTksCisJMHg4QSwgMHgzNiwgMHgyMCwgMHhFOSwKIAotMHg4NywgMHg3NywgMHg1NywgMHhFOSwKLTB4OEIsIDB4M0UsIDB4QkYsIDB4RUEsCisJMHg4NywgMHg3NywgMHg1NywgMHhFOSwKKwkweDhCLCAweDNFLCAweEJGLCAweEVBLAogCi0weDgwLCAweDMwLCAweDU3LCAweEU5LAotMHg4MSwgMHgzOCwgMHg1NywgMHhFOSwKKwkweDgwLCAweDMwLCAweDU3LCAweEU5LAorCTB4ODEsIDB4MzgsIDB4NTcsIDB4RTksCiAKLTB4ODIsIDB4MzEsIDB4NTcsIDB4RTksCi0weDg2LCAweDc4LCAweDU3LCAweEU5LAorCTB4ODIsIDB4MzEsIDB4NTcsIDB4RTksCisJMHg4NiwgMHg3OCwgMHg1NywgMHhFOSwKIAotMHg4MywgMHgzOSwgMHg1NywgMHhFOSwKLTB4ODcsIDB4NzksIDB4NTcsIDB4RTksCisJMHg4MywgMHgzOSwgMHg1NywgMHhFOSwKKwkweDg3LCAweDc5LCAweDU3LCAweEU5LAogCi0weDMwLCAweDFGLCAweDVGLCAweEU5LAotMHg4QSwgMHgzNCwgMHgyMCwgMHhFOSwKKwkweDMwLCAweDFGLCAweDVGLCAweEU5LAorCTB4OEEsIDB4MzQsIDB4MjAsIDB4RTksCiAKLTB4OEIsIDB4M0MsIDB4MjAsIDB4RTksCi0weDM3LCAweDUwLCAweDYwLCAweEJELAorCTB4OEIsIDB4M0MsIDB4MjAsIDB4RTksCisJMHgzNywgMHg1MCwgMHg2MCwgMHhCRCwKIAotMHg1NywgMHgwRCwgMHgyMCwgMHhFOSwKLTB4MzUsIDB4NTEsIDB4NjEsIDB4QkQsCisJMHg1NywgMHgwRCwgMHgyMCwgMHhFOSwKKwkweDM1LCAweDUxLCAweDYxLCAweEJELAogCi0weDJCLCAweDUwLCAweDIwLCAweEU5LAotMHgxRCwgMHgzNywgMHhFMSwgMHhFQSwKKwkweDJCLCAweDUwLCAweDIwLCAweEU5LAorCTB4MUQsIDB4MzcsIDB4RTEsIDB4RUEsCiAKLTB4MUUsIDB4MzUsIDB4RTEsIDB4RUEsCi0weDAwLCAweEUwLAotMHgwRSwgMHg3NywKKwkweDFFLCAweDM1LCAweEUxLCAweEVBLAorCTB4MDAsIDB4RTAsCisJMHgwRSwgMHg3NywKIAotMHgyNCwgMHg1MSwgMHgyMCwgMHhFOSwKLTB4OEQsIDB4RkYsIDB4MjAsIDB4RUEsCisJMHgyNCwgMHg1MSwgMHgyMCwgMHhFOSwKKwkweDhELCAweEZGLCAweDIwLCAweEVBLAogCi0weDE2LCAweDBFLCAweDIwLCAweEU5LAotMHg1NywgMHgyRSwgMHhCRiwgMHhFQSwKKwkweDE2LCAweDBFLCAweDIwLCAweEU5LAorCTB4NTcsIDB4MkUsIDB4QkYsIDB4RUEsCiAKLTB4MEIsIDB4NDYsIDB4QTAsIDB4RTgsCi0weDFCLCAweDU2LCAweEEwLCAweEU4LAorCTB4MEIsIDB4NDYsIDB4QTAsIDB4RTgsCisJMHgxQiwgMHg1NiwgMHhBMCwgMHhFOCwKIAotMHgyQiwgMHg2NiwgMHhBMCwgMHhFOCwKLTB4MEMsIDB4NDcsIDB4QTAsIDB4RTgsCisJMHgyQiwgMHg2NiwgMHhBMCwgMHhFOCwKKwkweDBDLCAweDQ3LCAweEEwLCAweEU4LAogCi0weDFDLCAweDU3LCAweEEwLCAweEU4LAotMHgyQywgMHg2NywgMHhBMCwgMHhFOCwKKwkweDFDLCAweDU3LCAweEEwLCAweEU4LAorCTB4MkMsIDB4NjcsIDB4QTAsIDB4RTgsCiAKLTB4MEIsIDB4MDAsCi0weDFCLCAweDAwLAotMHgyQiwgMHgwMCwKLTB4MDAsIDB4RTAsCisJMHgwQiwgMHgwMCwKKwkweDFCLCAweDAwLAorCTB4MkIsIDB4MDAsCisJMHgwMCwgMHhFMCwKIAotMHgwQywgMHgwMCwKLTB4MUMsIDB4MDAsCi0weDJDLCAweDAwLAotMHgwMCwgMHhFMCwKKwkweDBDLCAweDAwLAorCTB4MUMsIDB4MDAsCisJMHgyQywgMHgwMCwKKwkweDAwLCAweEUwLAogCi0weDBCLCAweDY1LAotMHgxQiwgMHg2NSwKLTB4MkIsIDB4NjUsCi0weDAwLCAweEUwLAorCTB4MEIsIDB4NjUsCisJMHgxQiwgMHg2NSwKKwkweDJCLCAweDY1LAorCTB4MDAsIDB4RTAsCiAKLTB4MEMsIDB4NjUsCi0weDFDLCAweDY1LAotMHgyQywgMHg2NSwKLTB4MDAsIDB4RTAsCisJMHgwQywgMHg2NSwKKwkweDFDLCAweDY1LAorCTB4MkMsIDB4NjUsCisJMHgwMCwgMHhFMCwKIAotMHgwQiwgMHgxQiwgMHg2MCwgMHhFQywKLTB4MzYsIDB4RDcsIDB4MzYsIDB4QUQsCisJMHgwQiwgMHgxQiwgMHg2MCwgMHhFQywKKwkweDM2LCAweEQ3LCAweDM2LCAweEFELAogCi0weDJCLCAweDgwLCAweDYwLCAweEVDLAotMHgwQywgMHgxQywgMHg2MCwgMHhFQywKKwkweDJCLCAweDgwLCAweDYwLCAweEVDLAorCTB4MEMsIDB4MUMsIDB4NjAsIDB4RUMsCiAKLTB4M0UsIDB4RDcsIDB4M0UsIDB4QUQsCi0weDJDLCAweDgwLCAweDYwLCAweEVDLAorCTB4M0UsIDB4RDcsIDB4M0UsIDB4QUQsCisJMHgyQywgMHg4MCwgMHg2MCwgMHhFQywKIAotMHgwQiwgMHgyQiwgMHhERSwgMHhFOCwKLTB4MUIsIDB4ODAsIDB4REUsIDB4RTgsCisJMHgwQiwgMHgyQiwgMHhERSwgMHhFOCwKKwkweDFCLCAweDgwLCAweERFLCAweEU4LAogCi0weDM2LCAweDgwLCAweDM2LCAweEJELAotMHgzRSwgMHg4MCwgMHgzRSwgMHhCRCwKKwkweDM2LCAweDgwLCAweDM2LCAweEJELAorCTB4M0UsIDB4ODAsIDB4M0UsIDB4QkQsCiAKLTB4MzMsIDB4RDcsIDB4MEIsIDB4QkQsCi0weDNCLCAweEQ3LCAweDFCLCAweEJELAorCTB4MzMsIDB4RDcsIDB4MEIsIDB4QkQsCisJMHgzQiwgMHhENywgMHgxQiwgMHhCRCwKIAotMHg0NiwgMHg4MCwgMHg0NiwgMHhDRiwKLTB4NTcsIDB4ODAsIDB4NTcsIDB4Q0YsCisJMHg0NiwgMHg4MCwgMHg0NiwgMHhDRiwKKwkweDU3LCAweDgwLCAweDU3LCAweENGLAogCi0weDY2LCAweDMzLCAweDY2LCAweENGLAotMHg0NywgMHgzQiwgMHg0NywgMHhDRiwKKwkweDY2LCAweDMzLCAweDY2LCAweENGLAorCTB4NDcsIDB4M0IsIDB4NDcsIDB4Q0YsCiAKLTB4NTYsIDB4MzMsIDB4NTYsIDB4Q0YsCi0weDY3LCAweDNCLCAweDY3LCAweENGLAorCTB4NTYsIDB4MzMsIDB4NTYsIDB4Q0YsCisJMHg2NywgMHgzQiwgMHg2NywgMHhDRiwKIAotMHgwQiwgMHg0OCwgMHhBMCwgMHhFOCwKLTB4MUIsIDB4NTgsIDB4QTAsIDB4RTgsCisJMHgwQiwgMHg0OCwgMHhBMCwgMHhFOCwKKwkweDFCLCAweDU4LCAweEEwLCAweEU4LAogCi0weDJCLCAweDY4LCAweEEwLCAweEU4LAotMHgwQywgMHg0OSwgMHhBMCwgMHhFOCwKKwkweDJCLCAweDY4LCAweEEwLCAweEU4LAorCTB4MEMsIDB4NDksIDB4QTAsIDB4RTgsCiAKLTB4MUMsIDB4NTksIDB4QTAsIDB4RTgsCi0weDJDLCAweDY5LCAweEEwLCAweEU4LAorCTB4MUMsIDB4NTksIDB4QTAsIDB4RTgsCisJMHgyQywgMHg2OSwgMHhBMCwgMHhFOCwKIAotMHgwQiwgMHgwMCwKLTB4MUIsIDB4MDAsCi0weDJCLCAweDAwLAotMHgwMCwgMHhFMCwKKwkweDBCLCAweDAwLAorCTB4MUIsIDB4MDAsCisJMHgyQiwgMHgwMCwKKwkweDAwLCAweEUwLAogCi0weDBDLCAweDAwLAotMHgxQywgMHgwMCwKLTB4MkMsIDB4MDAsCi0weDAwLCAweEUwLAorCTB4MEMsIDB4MDAsCisJMHgxQywgMHgwMCwKKwkweDJDLCAweDAwLAorCTB4MDAsIDB4RTAsCiAKLTB4MEIsIDB4NjUsCi0weDFCLCAweDY1LAotMHgyQiwgMHg2NSwKLTB4MDAsIDB4RTAsCisJMHgwQiwgMHg2NSwKKwkweDFCLCAweDY1LAorCTB4MkIsIDB4NjUsCisJMHgwMCwgMHhFMCwKIAotMHgwQywgMHg2NSwKLTB4MUMsIDB4NjUsCi0weDJDLCAweDY1LAotMHgwMCwgMHhFMCwKKwkweDBDLCAweDY1LAorCTB4MUMsIDB4NjUsCisJMHgyQywgMHg2NSwKKwkweDAwLCAweEUwLAogCi0weDBCLCAweDFCLCAweDYwLCAweEVDLAotMHgzNCwgMHhENywgMHgzNCwgMHhBRCwKKwkweDBCLCAweDFCLCAweDYwLCAweEVDLAorCTB4MzQsIDB4RDcsIDB4MzQsIDB4QUQsCiAKLTB4MkIsIDB4ODAsIDB4NjAsIDB4RUMsCi0weDBDLCAweDFDLCAweDYwLCAweEVDLAorCTB4MkIsIDB4ODAsIDB4NjAsIDB4RUMsCisJMHgwQywgMHgxQywgMHg2MCwgMHhFQywKIAotMHgzQywgMHhENywgMHgzQywgMHhBRCwKLTB4MkMsIDB4ODAsIDB4NjAsIDB4RUMsCisJMHgzQywgMHhENywgMHgzQywgMHhBRCwKKwkweDJDLCAweDgwLCAweDYwLCAweEVDLAogCi0weDBCLCAweDJCLCAweERFLCAweEU4LAotMHgxQiwgMHg4MCwgMHhERSwgMHhFOCwKKwkweDBCLCAweDJCLCAweERFLCAweEU4LAorCTB4MUIsIDB4ODAsIDB4REUsIDB4RTgsCiAKLTB4MzQsIDB4ODAsIDB4MzQsIDB4QkQsCi0weDNDLCAweDgwLCAweDNDLCAweEJELAorCTB4MzQsIDB4ODAsIDB4MzQsIDB4QkQsCisJMHgzQywgMHg4MCwgMHgzQywgMHhCRCwKIAotMHgzMywgMHhENywgMHgwQiwgMHhCRCwKLTB4M0IsIDB4RDcsIDB4MUIsIDB4QkQsCisJMHgzMywgMHhENywgMHgwQiwgMHhCRCwKKwkweDNCLCAweEQ3LCAweDFCLCAweEJELAogCi0weDQ4LCAweDgwLCAweDQ4LCAweENGLAotMHg1OSwgMHg4MCwgMHg1OSwgMHhDRiwKKwkweDQ4LCAweDgwLCAweDQ4LCAweENGLAorCTB4NTksIDB4ODAsIDB4NTksIDB4Q0YsCiAKLTB4NjgsIDB4MzMsIDB4NjgsIDB4Q0YsCi0weDQ5LCAweDNCLCAweDQ5LCAweENGLAorCTB4NjgsIDB4MzMsIDB4NjgsIDB4Q0YsCisJMHg0OSwgMHgzQiwgMHg0OSwgMHhDRiwKIAotMHhBRCwgMHhGRiwgMHgyMCwgMHhFQSwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHhBRCwgMHhGRiwgMHgyMCwgMHhFQSwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDU4LCAweDMzLCAweDU4LCAweENGLAotMHg2OSwgMHgzQiwgMHg2OSwgMHhDRiwKKwkweDU4LCAweDMzLCAweDU4LCAweENGLAorCTB4NjksIDB4M0IsIDB4NjksIDB4Q0YsCiAKLTB4NkIsIDB4RkYsIDB4MjAsIDB4RUEsCi0weDU3LCAweEMwLCAweEJGLCAweEVBLAorCTB4NkIsIDB4RkYsIDB4MjAsIDB4RUEsCisJMHg1NywgMHhDMCwgMHhCRiwgMHhFQSwKIAotMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKLTB4MDAsIDB4MDAsIDB4RDgsIDB4RUMsCisJMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKKwkweDAwLCAweDAwLCAweEQ4LCAweEVDLAogCiB9OwogCiBzdGF0aWMgdW5zaWduZWQgY2hhciB3YXJwX2c0MDBfdGd6W10gPSB7CiAKLTB4MDAsIDB4ODgsIDB4OTgsIDB4RTksCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODgsIDB4OTgsIDB4RTksCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKLTB4MDAsIDB4MDAsIDB4RDgsIDB4RUMsCisJMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKKwkweDAwLCAweDAwLCAweEQ4LCAweEVDLAogCi0weEZGLCAweDgwLCAweEMwLCAweEU5LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweEZGLCAweDgwLCAweEMwLCAweEU5LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MjIsIDB4NDAsIDB4NDgsIDB4QkYsCi0weDJBLCAweDQwLCAweDUwLCAweEJGLAorCTB4MjIsIDB4NDAsIDB4NDgsIDB4QkYsCisJMHgyQSwgMHg0MCwgMHg1MCwgMHhCRiwKIAotMHgzMiwgMHg0MSwgMHg0OSwgMHhCRiwKLTB4M0EsIDB4NDEsIDB4NTEsIDB4QkYsCisJMHgzMiwgMHg0MSwgMHg0OSwgMHhCRiwKKwkweDNBLCAweDQxLCAweDUxLCAweEJGLAogCi0weEMzLCAweDZCLAotMHhDQiwgMHg2QiwKLTB4MDAsIDB4ODgsIDB4OTgsIDB4RTksCisJMHhDMywgMHg2QiwKKwkweENCLCAweDZCLAorCTB4MDAsIDB4ODgsIDB4OTgsIDB4RTksCiAKLTB4NzMsIDB4N0IsIDB4QzgsIDB4RUMsCi0weDk2LCAweEUyLAotMHg0MSwgMHgwNCwKKwkweDczLCAweDdCLCAweEM4LCAweEVDLAorCTB4OTYsIDB4RTIsCisJMHg0MSwgMHgwNCwKIAotMHg3QiwgMHg0MywgMHhBMCwgMHhFOCwKLTB4NzMsIDB4NEIsIDB4QTAsIDB4RTgsCisJMHg3QiwgMHg0MywgMHhBMCwgMHhFOCwKKwkweDczLCAweDRCLCAweEEwLCAweEU4LAogCi0weEFELCAweEVFLCAweDI5LCAweDlGLAotMHgwMCwgMHhFMCwKLTB4NDksIDB4MDQsCisJMHhBRCwgMHhFRSwgMHgyOSwgMHg5RiwKKwkweDAwLCAweEUwLAorCTB4NDksIDB4MDQsCiAKLTB4OTAsIDB4RTIsCi0weDUxLCAweDA0LAotMHgzMSwgMHg0NiwgMHhCMSwgMHhFOCwKKwkweDkwLCAweEUyLAorCTB4NTEsIDB4MDQsCisJMHgzMSwgMHg0NiwgMHhCMSwgMHhFOCwKIAotMHg0OSwgMHg0MSwgMHhDMCwgMHhFQywKLTB4MzksIDB4NTcsIDB4QjEsIDB4RTgsCisJMHg0OSwgMHg0MSwgMHhDMCwgMHhFQywKKwkweDM5LCAweDU3LCAweEIxLCAweEU4LAogCi0weDAwLCAweDA0LAotMHg0NiwgMHhFMiwKLTB4NzMsIDB4NTMsIDB4QTAsIDB4RTgsCisJMHgwMCwgMHgwNCwKKwkweDQ2LCAweEUyLAorCTB4NzMsIDB4NTMsIDB4QTAsIDB4RTgsCiAKLTB4NTEsIDB4NDEsIDB4QzAsIDB4RUMsCi0weDMxLCAweDAwLAotMHgzOSwgMHgwMCwKKwkweDUxLCAweDQxLCAweEMwLCAweEVDLAorCTB4MzEsIDB4MDAsCisJMHgzOSwgMHgwMCwKIAotMHg1OCwgMHg4MCwgMHgxNSwgMHhFQSwKLTB4MDgsIDB4MDQsCi0weDEwLCAweDA0LAorCTB4NTgsIDB4ODAsIDB4MTUsIDB4RUEsCisJMHgwOCwgMHgwNCwKKwkweDEwLCAweDA0LAogCi0weDUxLCAweDQ5LCAweEMwLCAweEVDLAotMHgyRiwgMHg0MSwgMHg2MCwgMHhFQSwKKwkweDUxLCAweDQ5LCAweEMwLCAweEVDLAorCTB4MkYsIDB4NDEsIDB4NjAsIDB4RUEsCiAKLTB4MzEsIDB4MjAsCi0weDM5LCAweDIwLAotMHgxRiwgMHg0MiwgMHhBMCwgMHhFOCwKKwkweDMxLCAweDIwLAorCTB4MzksIDB4MjAsCisJMHgxRiwgMHg0MiwgMHhBMCwgMHhFOCwKIAotMHgyQSwgMHg0MiwgMHg0QSwgMHhCRiwKLTB4MjcsIDB4NEEsIDB4QTAsIDB4RTgsCisJMHgyQSwgMHg0MiwgMHg0QSwgMHhCRiwKKwkweDI3LCAweDRBLCAweEEwLCAweEU4LAogCi0weDFBLCAweDQyLCAweDUyLCAweEJGLAotMHgxRSwgMHg0OSwgMHg2MCwgMHhFQSwKKwkweDFBLCAweDQyLCAweDUyLCAweEJGLAorCTB4MUUsIDB4NDksIDB4NjAsIDB4RUEsCiAKLTB4NzMsIDB4N0IsIDB4QzgsIDB4RUMsCi0weDI2LCAweDUxLCAweDYwLCAweEVBLAorCTB4NzMsIDB4N0IsIDB4QzgsIDB4RUMsCisJMHgyNiwgMHg1MSwgMHg2MCwgMHhFQSwKIAotMHgzMiwgMHg0MCwgMHg0OCwgMHhCRCwKLTB4MjIsIDB4NDAsIDB4NTAsIDB4QkQsCisJMHgzMiwgMHg0MCwgMHg0OCwgMHhCRCwKKwkweDIyLCAweDQwLCAweDUwLCAweEJELAogCi0weDEyLCAweDQxLCAweDQ5LCAweEJELAotMHgzQSwgMHg0MSwgMHg1MSwgMHhCRCwKKwkweDEyLCAweDQxLCAweDQ5LCAweEJELAorCTB4M0EsIDB4NDEsIDB4NTEsIDB4QkQsCiAKLTB4QkYsIDB4MkYsIDB4MjYsIDB4QkQsCi0weDAwLCAweEUwLAotMHg3QiwgMHg3MiwKKwkweEJGLCAweDJGLCAweDI2LCAweEJELAorCTB4MDAsIDB4RTAsCisJMHg3QiwgMHg3MiwKIAotMHgzMiwgMHgyMCwKLTB4MjIsIDB4MjAsCi0weDEyLCAweDIwLAotMHgzQSwgMHgyMCwKKwkweDMyLCAweDIwLAorCTB4MjIsIDB4MjAsCisJMHgxMiwgMHgyMCwKKwkweDNBLCAweDIwLAogCi0weDQ2LCAweDMxLCAweDQ2LCAweEJGLAotMHg0RSwgMHgzMSwgMHg0RSwgMHhCRiwKKwkweDQ2LCAweDMxLCAweDQ2LCAweEJGLAorCTB4NEUsIDB4MzEsIDB4NEUsIDB4QkYsCiAKLTB4QjMsIDB4RTIsIDB4MkQsIDB4OUYsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4QjMsIDB4RTIsIDB4MkQsIDB4OUYsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHg1NiwgMHgzMSwgMHg1NiwgMHhCRiwKLTB4NDcsIDB4MzksIDB4NDcsIDB4QkYsCisJMHg1NiwgMHgzMSwgMHg1NiwgMHhCRiwKKwkweDQ3LCAweDM5LCAweDQ3LCAweEJGLAogCi0weDRGLCAweDM5LCAweDRGLCAweEJGLAotMHg1NywgMHgzOSwgMHg1NywgMHhCRiwKKwkweDRGLCAweDM5LCAweDRGLCAweEJGLAorCTB4NTcsIDB4MzksIDB4NTcsIDB4QkYsCiAKLTB4NEEsIDB4ODAsIDB4MDcsIDB4RUEsCi0weDI0LCAweDQxLCAweDIwLCAweEU5LAorCTB4NEEsIDB4ODAsIDB4MDcsIDB4RUEsCisJMHgyNCwgMHg0MSwgMHgyMCwgMHhFOSwKIAotMHg0MiwgMHg3MywgMHhGOCwgMHhFQywKLTB4MDAsIDB4RTAsCi0weDJELCAweDczLAorCTB4NDIsIDB4NzMsIDB4RjgsIDB4RUMsCisJMHgwMCwgMHhFMCwKKwkweDJELCAweDczLAogCi0weDMzLCAweDcyLAotMHgwQywgMHhFMywKLTB4QTUsIDB4MkYsIDB4MUUsIDB4QkQsCisJMHgzMywgMHg3MiwKKwkweDBDLCAweEUzLAorCTB4QTUsIDB4MkYsIDB4MUUsIDB4QkQsCiAKLTB4NDMsIDB4NDMsIDB4MkQsIDB4REYsCi0weDRCLCAweDRCLCAweDJELCAweERGLAorCTB4NDMsIDB4NDMsIDB4MkQsIDB4REYsCisJMHg0QiwgMHg0QiwgMHgyRCwgMHhERiwKIAotMHhBRSwgMHgxRSwgMHgyNiwgMHhCRCwKLTB4NTgsIDB4RTMsCi0weDMzLCAweDY2LAorCTB4QUUsIDB4MUUsIDB4MjYsIDB4QkQsCisJMHg1OCwgMHhFMywKKwkweDMzLCAweDY2LAogCi0weDUzLCAweDUzLCAweDJELCAweERGLAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDUzLCAweDUzLCAweDJELCAweERGLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4QjgsIDB4MzgsIDB4MzMsIDB4QkYsCi0weDAwLCAweEUwLAotMHg1OSwgMHhFMywKKwkweEI4LCAweDM4LCAweDMzLCAweEJGLAorCTB4MDAsIDB4RTAsCisJMHg1OSwgMHhFMywKIAotMHgxRSwgMHgxMiwgMHg0MSwgMHhFOSwKLTB4MUEsIDB4MjIsIDB4NDEsIDB4RTksCisJMHgxRSwgMHgxMiwgMHg0MSwgMHhFOSwKKwkweDFBLCAweDIyLCAweDQxLCAweEU5LAogCi0weDJCLCAweDQwLCAweDNELCAweEU5LAotMHgzRiwgMHg0QiwgMHhBMCwgMHhFOCwKKwkweDJCLCAweDQwLCAweDNELCAweEU5LAorCTB4M0YsIDB4NEIsIDB4QTAsIDB4RTgsCiAKLTB4MkQsIDB4NzMsCi0weDMwLCAweDc2LAotMHgwNSwgMHg4MCwgMHgzRCwgMHhFQSwKKwkweDJELCAweDczLAorCTB4MzAsIDB4NzYsCisJMHgwNSwgMHg4MCwgMHgzRCwgMHhFQSwKIAotMHgzNywgMHg0MywgMHhBMCwgMHhFOCwKLTB4M0QsIDB4NTMsIDB4QTAsIDB4RTgsCisJMHgzNywgMHg0MywgMHhBMCwgMHhFOCwKKwkweDNELCAweDUzLCAweEEwLCAweEU4LAogCi0weDQ4LCAweDcwLCAweEY4LCAweEVDLAotMHgyQiwgMHg0OCwgMHgzQywgMHhFOSwKKwkweDQ4LCAweDcwLCAweEY4LCAweEVDLAorCTB4MkIsIDB4NDgsIDB4M0MsIDB4RTksCiAKLTB4MUYsIDB4MjcsIDB4QkMsIDB4RTgsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MUYsIDB4MjcsIDB4QkMsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDE1LCAweEMwLCAweDIwLCAweEU5LAotMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKKwkweDE1LCAweEMwLCAweDIwLCAweEU5LAorCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCiAKLTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0weDE1LCAweEMwLCAweDIwLCAweEU5LAorCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCisJMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKIAotMHgxOCwgMHgzQSwgMHg0MSwgMHhFOSwKLTB4MUQsIDB4MzIsIDB4NDEsIDB4RTksCisJMHgxOCwgMHgzQSwgMHg0MSwgMHhFOSwKKwkweDFELCAweDMyLCAweDQxLCAweEU5LAogCi0weDJBLCAweDQwLCAweDIwLCAweEU5LAotMHg1NiwgMHgzRCwgMHg1NiwgMHhERiwKKwkweDJBLCAweDQwLCAweDIwLCAweEU5LAorCTB4NTYsIDB4M0QsIDB4NTYsIDB4REYsCiAKLTB4NDYsIDB4MzcsIDB4NDYsIDB4REYsCi0weDRFLCAweDNGLCAweDRFLCAweERGLAorCTB4NDYsIDB4MzcsIDB4NDYsIDB4REYsCisJMHg0RSwgMHgzRiwgMHg0RSwgMHhERiwKIAotMHgxNiwgMHgzMCwgMHgyMCwgMHhFOSwKLTB4NEYsIDB4M0YsIDB4NEYsIDB4REYsCisJMHgxNiwgMHgzMCwgMHgyMCwgMHhFOSwKKwkweDRGLCAweDNGLCAweDRGLCAweERGLAogCi0weDMyLCAweDMyLCAweDJELCAweERGLAotMHgyMiwgMHgyMiwgMHgyRCwgMHhERiwKKwkweDMyLCAweDMyLCAweDJELCAweERGLAorCTB4MjIsIDB4MjIsIDB4MkQsIDB4REYsCiAKLTB4MTIsIDB4MTIsIDB4MkQsIDB4REYsCi0weDNBLCAweDNBLCAweDJELCAweERGLAorCTB4MTIsIDB4MTIsIDB4MkQsIDB4REYsCisJMHgzQSwgMHgzQSwgMHgyRCwgMHhERiwKIAotMHg0NywgMHgzNywgMHg0NywgMHhERiwKLTB4NTcsIDB4M0QsIDB4NTcsIDB4REYsCisJMHg0NywgMHgzNywgMHg0NywgMHhERiwKKwkweDU3LCAweDNELCAweDU3LCAweERGLAogCi0weDNELCAweENGLCAweDc0LCAweEMwLAotMHgzNywgMHhDRiwgMHg3NCwgMHhDNCwKKwkweDNELCAweENGLCAweDc0LCAweEMwLAorCTB4MzcsIDB4Q0YsIDB4NzQsIDB4QzQsCiAKLTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0weDM0LCAweDgwLCAweDIwLCAweEU5LAorCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCisJMHgzNCwgMHg4MCwgMHgyMCwgMHhFOSwKIAotMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLTB4M0MsIDB4M0QsIDB4MjAsIDB4RTksCisJMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKKwkweDNDLCAweDNELCAweDIwLCAweEU5LAogCi0weDBBLCAweDQ0LCAweDRDLCAweEIwLAotMHgwMiwgMHg0NCwgMHg1NCwgMHhCMCwKKwkweDBBLCAweDQ0LCAweDRDLCAweEIwLAorCTB4MDIsIDB4NDQsIDB4NTQsIDB4QjAsCiAKLTB4MkEsIDB4NDQsIDB4NEMsIDB4QjIsCi0weDFBLCAweDQ0LCAweDU0LCAweEIyLAorCTB4MkEsIDB4NDQsIDB4NEMsIDB4QjIsCisJMHgxQSwgMHg0NCwgMHg1NCwgMHhCMiwKIAotMHgxRCwgMHg4MCwgMHgzQSwgMHhFQSwKLTB4MEEsIDB4MjAsCi0weDAyLCAweDIwLAorCTB4MUQsIDB4ODAsIDB4M0EsIDB4RUEsCisJMHgwQSwgMHgyMCwKKwkweDAyLCAweDIwLAogCi0weDNELCAweENGLCAweDc0LCAweEMyLAotMHgyQSwgMHgyMCwKLTB4MUEsIDB4MjAsCisJMHgzRCwgMHhDRiwgMHg3NCwgMHhDMiwKKwkweDJBLCAweDIwLAorCTB4MUEsIDB4MjAsCiAKLTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0weDMyLCAweDMxLCAweDVGLCAweEU5LAorCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCisJMHgzMiwgMHgzMSwgMHg1RiwgMHhFOSwKIAotMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLTB4MzMsIDB4MzksIDB4NUYsIDB4RTksCisJMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKKwkweDMzLCAweDM5LCAweDVGLCAweEU5LAogCi0weDMxLCAweDUzLCAweDJGLCAweDlGLAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDMxLCAweDUzLCAweDJGLCAweDlGLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MkEsIDB4NDQsIDB4NEMsIDB4QjQsCi0weDFBLCAweDQ0LCAweDU0LCAweEI0LAorCTB4MkEsIDB4NDQsIDB4NEMsIDB4QjQsCisJMHgxQSwgMHg0NCwgMHg1NCwgMHhCNCwKIAotMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLTB4MzgsIDB4M0QsIDB4MjAsIDB4RTksCisJMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKKwkweDM4LCAweDNELCAweDIwLCAweEU5LAogCi0weDg4LCAweDczLCAweDVFLCAweEU5LAotMHgyQSwgMHgyMCwKLTB4MUEsIDB4MjAsCisJMHg4OCwgMHg3MywgMHg1RSwgMHhFOSwKKwkweDJBLCAweDIwLAorCTB4MUEsIDB4MjAsCiAKLTB4MkEsIDB4NDYsIDB4NEUsIDB4QkYsCi0weDFBLCAweDQ2LCAweDU2LCAweEJGLAorCTB4MkEsIDB4NDYsIDB4NEUsIDB4QkYsCisJMHgxQSwgMHg0NiwgMHg1NiwgMHhCRiwKIAotMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLTB4M0UsIDB4MzAsIDB4NEYsIDB4RTksCisJMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKKwkweDNFLCAweDMwLCAweDRGLCAweEU5LAogCi0weDM5LCAweEU1LCAweDJDLCAweDlGLAotMHgzRiwgMHgzOCwgMHg0RiwgMHhFOSwKKwkweDM5LCAweEU1LCAweDJDLCAweDlGLAorCTB4M0YsIDB4MzgsIDB4NEYsIDB4RTksCiAKLTB4MEEsIDB4NDcsIDB4NEYsIDB4QkYsCi0weDAyLCAweDQ3LCAweDU3LCAweEJGLAorCTB4MEEsIDB4NDcsIDB4NEYsIDB4QkYsCisJMHgwMiwgMHg0NywgMHg1NywgMHhCRiwKIAotMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLTB4M0EsIDB4MzEsIDB4NEYsIDB4RTksCisJMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKKwkweDNBLCAweDMxLCAweDRGLCAweEU5LAogCi0weDM5LCAweEU1LCAweDJDLCAweDlGLAotMHgzQiwgMHgzOSwgMHg0RiwgMHhFOSwKKwkweDM5LCAweEU1LCAweDJDLCAweDlGLAorCTB4M0IsIDB4MzksIDB4NEYsIDB4RTksCiAKLTB4MkEsIDB4NDMsIDB4NEIsIDB4QkYsCi0weDFBLCAweDQzLCAweDUzLCAweEJGLAorCTB4MkEsIDB4NDMsIDB4NEIsIDB4QkYsCisJMHgxQSwgMHg0MywgMHg1MywgMHhCRiwKIAotMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLTB4MzYsIDB4MzEsIDB4NEYsIDB4RTksCisJMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKKwkweDM2LCAweDMxLCAweDRGLCAweEU5LAogCi0weDM4LCAweDIxLCAweDJDLCAweDlGLAotMHgzNywgMHgzOSwgMHg0RiwgMHhFOSwKKwkweDM4LCAweDIxLCAweDJDLCAweDlGLAorCTB4MzcsIDB4MzksIDB4NEYsIDB4RTksCiAKLTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0weDgwLCAweDMxLCAweDU3LCAweEU5LAorCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCisJMHg4MCwgMHgzMSwgMHg1NywgMHhFOSwKIAotMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLTB4ODEsIDB4MzksIDB4NTcsIDB4RTksCisJMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKKwkweDgxLCAweDM5LCAweDU3LCAweEU5LAogCi0weDM3LCAweDQ4LCAweDUwLCAweEJELAotMHg4QSwgMHgzNiwgMHgyMCwgMHhFOSwKKwkweDM3LCAweDQ4LCAweDUwLCAweEJELAorCTB4OEEsIDB4MzYsIDB4MjAsIDB4RTksCiAKLTB4ODYsIDB4NzYsIDB4NTcsIDB4RTksCi0weDhCLCAweDNFLCAweDIwLCAweEU5LAorCTB4ODYsIDB4NzYsIDB4NTcsIDB4RTksCisJMHg4QiwgMHgzRSwgMHgyMCwgMHhFOSwKIAotMHg4MiwgMHgzMCwgMHg1NywgMHhFOSwKLTB4ODcsIDB4NzcsIDB4NTcsIDB4RTksCisJMHg4MiwgMHgzMCwgMHg1NywgMHhFOSwKKwkweDg3LCAweDc3LCAweDU3LCAweEU5LAogCi0weDgzLCAweDM4LCAweDU3LCAweEU5LAotMHgzNSwgMHg0OSwgMHg1MSwgMHhCRCwKKwkweDgzLCAweDM4LCAweDU3LCAweEU5LAorCTB4MzUsIDB4NDksIDB4NTEsIDB4QkQsCiAKLTB4ODQsIDB4MzEsIDB4NUUsIDB4RTksCi0weDMwLCAweDFGLCAweDVGLCAweEU5LAorCTB4ODQsIDB4MzEsIDB4NUUsIDB4RTksCisJMHgzMCwgMHgxRiwgMHg1RiwgMHhFOSwKIAotMHg4NSwgMHgzOSwgMHg1RSwgMHhFOSwKLTB4NTcsIDB4MjUsIDB4MjAsIDB4RTksCisJMHg4NSwgMHgzOSwgMHg1RSwgMHhFOSwKKwkweDU3LCAweDI1LCAweDIwLCAweEU5LAogCi0weDJCLCAweDQ4LCAweDIwLCAweEU5LAotMHgxRCwgMHgzNywgMHhFMSwgMHhFQSwKKwkweDJCLCAweDQ4LCAweDIwLCAweEU5LAorCTB4MUQsIDB4MzcsIDB4RTEsIDB4RUEsCiAKLTB4MUUsIDB4MzUsIDB4RTEsIDB4RUEsCi0weDAwLCAweEUwLAotMHgyNiwgMHg3NywKKwkweDFFLCAweDM1LCAweEUxLCAweEVBLAorCTB4MDAsIDB4RTAsCisJMHgyNiwgMHg3NywKIAotMHgyNCwgMHg0OSwgMHgyMCwgMHhFOSwKLTB4QUYsIDB4RkYsIDB4MjAsIDB4RUEsCisJMHgyNCwgMHg0OSwgMHgyMCwgMHhFOSwKKwkweEFGLCAweEZGLCAweDIwLCAweEVBLAogCi0weDE2LCAweDI2LCAweDIwLCAweEU5LAotMHg1NywgMHgyRSwgMHhCRiwgMHhFQSwKKwkweDE2LCAweDI2LCAweDIwLCAweEU5LAorCTB4NTcsIDB4MkUsIDB4QkYsIDB4RUEsCiAKLTB4MUMsIDB4NDYsIDB4QTAsIDB4RTgsCi0weDIzLCAweDRFLCAweEEwLCAweEU4LAorCTB4MUMsIDB4NDYsIDB4QTAsIDB4RTgsCisJMHgyMywgMHg0RSwgMHhBMCwgMHhFOCwKIAotMHgyQiwgMHg1NiwgMHhBMCwgMHhFOCwKLTB4MUQsIDB4NDcsIDB4QTAsIDB4RTgsCisJMHgyQiwgMHg1NiwgMHhBMCwgMHhFOCwKKwkweDFELCAweDQ3LCAweEEwLCAweEU4LAogCi0weDI0LCAweDRGLCAweEEwLCAweEU4LAotMHgyQywgMHg1NywgMHhBMCwgMHhFOCwKKwkweDI0LCAweDRGLCAweEEwLCAweEU4LAorCTB4MkMsIDB4NTcsIDB4QTAsIDB4RTgsCiAKLTB4MUMsIDB4MDAsCi0weDIzLCAweDAwLAotMHgyQiwgMHgwMCwKLTB4MDAsIDB4RTAsCisJMHgxQywgMHgwMCwKKwkweDIzLCAweDAwLAorCTB4MkIsIDB4MDAsCisJMHgwMCwgMHhFMCwKIAotMHgxRCwgMHgwMCwKLTB4MjQsIDB4MDAsCi0weDJDLCAweDAwLAotMHgwMCwgMHhFMCwKKwkweDFELCAweDAwLAorCTB4MjQsIDB4MDAsCisJMHgyQywgMHgwMCwKKwkweDAwLCAweEUwLAogCi0weDFDLCAweDY1LAotMHgyMywgMHg2NSwKLTB4MkIsIDB4NjUsCi0weDAwLCAweEUwLAorCTB4MUMsIDB4NjUsCisJMHgyMywgMHg2NSwKKwkweDJCLCAweDY1LAorCTB4MDAsIDB4RTAsCiAKLTB4MUQsIDB4NjUsCi0weDI0LCAweDY1LAotMHgyQywgMHg2NSwKLTB4MDAsIDB4RTAsCisJMHgxRCwgMHg2NSwKKwkweDI0LCAweDY1LAorCTB4MkMsIDB4NjUsCisJMHgwMCwgMHhFMCwKIAotMHgxQywgMHgyMywgMHg2MCwgMHhFQywKLTB4MzYsIDB4RDcsIDB4MzYsIDB4QUQsCisJMHgxQywgMHgyMywgMHg2MCwgMHhFQywKKwkweDM2LCAweEQ3LCAweDM2LCAweEFELAogCi0weDJCLCAweDgwLCAweDYwLCAweEVDLAotMHgxRCwgMHgyNCwgMHg2MCwgMHhFQywKKwkweDJCLCAweDgwLCAweDYwLCAweEVDLAorCTB4MUQsIDB4MjQsIDB4NjAsIDB4RUMsCiAKLTB4M0UsIDB4RDcsIDB4M0UsIDB4QUQsCi0weDJDLCAweDgwLCAweDYwLCAweEVDLAorCTB4M0UsIDB4RDcsIDB4M0UsIDB4QUQsCisJMHgyQywgMHg4MCwgMHg2MCwgMHhFQywKIAotMHgxQywgMHgyQiwgMHhERSwgMHhFOCwKLTB4MjMsIDB4ODAsIDB4REUsIDB4RTgsCisJMHgxQywgMHgyQiwgMHhERSwgMHhFOCwKKwkweDIzLCAweDgwLCAweERFLCAweEU4LAogCi0weDM2LCAweDgwLCAweDM2LCAweEJELAotMHgzRSwgMHg4MCwgMHgzRSwgMHhCRCwKKwkweDM2LCAweDgwLCAweDM2LCAweEJELAorCTB4M0UsIDB4ODAsIDB4M0UsIDB4QkQsCiAKLTB4MzMsIDB4RDcsIDB4MUMsIDB4QkQsCi0weDNCLCAweEQ3LCAweDIzLCAweEJELAorCTB4MzMsIDB4RDcsIDB4MUMsIDB4QkQsCisJMHgzQiwgMHhENywgMHgyMywgMHhCRCwKIAotMHg0NiwgMHg4MCwgMHg0NiwgMHhDRiwKLTB4NEYsIDB4ODAsIDB4NEYsIDB4Q0YsCisJMHg0NiwgMHg4MCwgMHg0NiwgMHhDRiwKKwkweDRGLCAweDgwLCAweDRGLCAweENGLAogCi0weDU2LCAweDMzLCAweDU2LCAweENGLAotMHg0NywgMHgzQiwgMHg0NywgMHhDRiwKKwkweDU2LCAweDMzLCAweDU2LCAweENGLAorCTB4NDcsIDB4M0IsIDB4NDcsIDB4Q0YsCiAKLTB4RDYsIDB4RkYsIDB4MjAsIDB4RUEsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4RDYsIDB4RkYsIDB4MjAsIDB4RUEsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHg0RSwgMHgzMywgMHg0RSwgMHhDRiwKLTB4NTcsIDB4M0IsIDB4NTcsIDB4Q0YsCisJMHg0RSwgMHgzMywgMHg0RSwgMHhDRiwKKwkweDU3LCAweDNCLCAweDU3LCAweENGLAogCi0weDlELCAweEZGLCAweDIwLCAweEVBLAotMHg1NywgMHhDMCwgMHhCRiwgMHhFQSwKKwkweDlELCAweEZGLCAweDIwLCAweEVBLAorCTB4NTcsIDB4QzAsIDB4QkYsIDB4RUEsCiAKLTB4MDAsIDB4ODAsIDB4QTAsIDB4RTksCi0weDAwLCAweDAwLCAweEQ4LCAweEVDLAorCTB4MDAsIDB4ODAsIDB4QTAsIDB4RTksCisJMHgwMCwgMHgwMCwgMHhEOCwgMHhFQywKIAogfTsKIAogc3RhdGljIHVuc2lnbmVkIGNoYXIgd2FycF9nNDAwX3RnemFbXSA9IHsKIAotMHgwMCwgMHg4OCwgMHg5OCwgMHhFOSwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4OCwgMHg5OCwgMHhFOSwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweEEwLCAweEU5LAotMHgwMCwgMHgwMCwgMHhEOCwgMHhFQywKKwkweDAwLCAweDgwLCAweEEwLCAweEU5LAorCTB4MDAsIDB4MDAsIDB4RDgsIDB4RUMsCiAKLTB4RkYsIDB4ODAsIDB4QzAsIDB4RTksCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4RkYsIDB4ODAsIDB4QzAsIDB4RTksCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgyMiwgMHg0MCwgMHg0OCwgMHhCRiwKLTB4MkEsIDB4NDAsIDB4NTAsIDB4QkYsCisJMHgyMiwgMHg0MCwgMHg0OCwgMHhCRiwKKwkweDJBLCAweDQwLCAweDUwLCAweEJGLAogCi0weDMyLCAweDQxLCAweDQ5LCAweEJGLAotMHgzQSwgMHg0MSwgMHg1MSwgMHhCRiwKKwkweDMyLCAweDQxLCAweDQ5LCAweEJGLAorCTB4M0EsIDB4NDEsIDB4NTEsIDB4QkYsCiAKLTB4QzMsIDB4NkIsCi0weENCLCAweDZCLAotMHgwMCwgMHg4OCwgMHg5OCwgMHhFOSwKKwkweEMzLCAweDZCLAorCTB4Q0IsIDB4NkIsCisJMHgwMCwgMHg4OCwgMHg5OCwgMHhFOSwKIAotMHg3MywgMHg3QiwgMHhDOCwgMHhFQywKLTB4OTYsIDB4RTIsCi0weDQxLCAweDA0LAorCTB4NzMsIDB4N0IsIDB4QzgsIDB4RUMsCisJMHg5NiwgMHhFMiwKKwkweDQxLCAweDA0LAogCi0weDdCLCAweDQzLCAweEEwLCAweEU4LAotMHg3MywgMHg0QiwgMHhBMCwgMHhFOCwKKwkweDdCLCAweDQzLCAweEEwLCAweEU4LAorCTB4NzMsIDB4NEIsIDB4QTAsIDB4RTgsCiAKLTB4QUQsIDB4RUUsIDB4MjksIDB4OUYsCi0weDAwLCAweEUwLAotMHg0OSwgMHgwNCwKKwkweEFELCAweEVFLCAweDI5LCAweDlGLAorCTB4MDAsIDB4RTAsCisJMHg0OSwgMHgwNCwKIAotMHg5MCwgMHhFMiwKLTB4NTEsIDB4MDQsCi0weDMxLCAweDQ2LCAweEIxLCAweEU4LAorCTB4OTAsIDB4RTIsCisJMHg1MSwgMHgwNCwKKwkweDMxLCAweDQ2LCAweEIxLCAweEU4LAogCi0weDQ5LCAweDQxLCAweEMwLCAweEVDLAotMHgzOSwgMHg1NywgMHhCMSwgMHhFOCwKKwkweDQ5LCAweDQxLCAweEMwLCAweEVDLAorCTB4MzksIDB4NTcsIDB4QjEsIDB4RTgsCiAKLTB4MDAsIDB4MDQsCi0weDQ2LCAweEUyLAotMHg3MywgMHg1MywgMHhBMCwgMHhFOCwKKwkweDAwLCAweDA0LAorCTB4NDYsIDB4RTIsCisJMHg3MywgMHg1MywgMHhBMCwgMHhFOCwKIAotMHg1MSwgMHg0MSwgMHhDMCwgMHhFQywKLTB4MzEsIDB4MDAsCi0weDM5LCAweDAwLAorCTB4NTEsIDB4NDEsIDB4QzAsIDB4RUMsCisJMHgzMSwgMHgwMCwKKwkweDM5LCAweDAwLAogCi0weDVDLCAweDgwLCAweDE1LCAweEVBLAotMHgwOCwgMHgwNCwKLTB4MTAsIDB4MDQsCisJMHg1QywgMHg4MCwgMHgxNSwgMHhFQSwKKwkweDA4LCAweDA0LAorCTB4MTAsIDB4MDQsCiAKLTB4NTEsIDB4NDksIDB4QzAsIDB4RUMsCi0weDJGLCAweDQxLCAweDYwLCAweEVBLAorCTB4NTEsIDB4NDksIDB4QzAsIDB4RUMsCisJMHgyRiwgMHg0MSwgMHg2MCwgMHhFQSwKIAotMHgzMSwgMHgyMCwKLTB4MzksIDB4MjAsCi0weDFGLCAweDQyLCAweEEwLCAweEU4LAorCTB4MzEsIDB4MjAsCisJMHgzOSwgMHgyMCwKKwkweDFGLCAweDQyLCAweEEwLCAweEU4LAogCi0weDJBLCAweDQyLCAweDRBLCAweEJGLAotMHgyNywgMHg0QSwgMHhBMCwgMHhFOCwKKwkweDJBLCAweDQyLCAweDRBLCAweEJGLAorCTB4MjcsIDB4NEEsIDB4QTAsIDB4RTgsCiAKLTB4MUEsIDB4NDIsIDB4NTIsIDB4QkYsCi0weDFFLCAweDQ5LCAweDYwLCAweEVBLAorCTB4MUEsIDB4NDIsIDB4NTIsIDB4QkYsCisJMHgxRSwgMHg0OSwgMHg2MCwgMHhFQSwKIAotMHg3MywgMHg3QiwgMHhDOCwgMHhFQywKLTB4MjYsIDB4NTEsIDB4NjAsIDB4RUEsCisJMHg3MywgMHg3QiwgMHhDOCwgMHhFQywKKwkweDI2LCAweDUxLCAweDYwLCAweEVBLAogCi0weDMyLCAweDQwLCAweDQ4LCAweEJELAotMHgyMiwgMHg0MCwgMHg1MCwgMHhCRCwKKwkweDMyLCAweDQwLCAweDQ4LCAweEJELAorCTB4MjIsIDB4NDAsIDB4NTAsIDB4QkQsCiAKLTB4MTIsIDB4NDEsIDB4NDksIDB4QkQsCi0weDNBLCAweDQxLCAweDUxLCAweEJELAorCTB4MTIsIDB4NDEsIDB4NDksIDB4QkQsCisJMHgzQSwgMHg0MSwgMHg1MSwgMHhCRCwKIAotMHhCRiwgMHgyRiwgMHgyNiwgMHhCRCwKLTB4MDAsIDB4RTAsCi0weDdCLCAweDcyLAorCTB4QkYsIDB4MkYsIDB4MjYsIDB4QkQsCisJMHgwMCwgMHhFMCwKKwkweDdCLCAweDcyLAogCi0weDMyLCAweDIwLAotMHgyMiwgMHgyMCwKLTB4MTIsIDB4MjAsCi0weDNBLCAweDIwLAorCTB4MzIsIDB4MjAsCisJMHgyMiwgMHgyMCwKKwkweDEyLCAweDIwLAorCTB4M0EsIDB4MjAsCiAKLTB4NDYsIDB4MzEsIDB4NDYsIDB4QkYsCi0weDRFLCAweDMxLCAweDRFLCAweEJGLAorCTB4NDYsIDB4MzEsIDB4NDYsIDB4QkYsCisJMHg0RSwgMHgzMSwgMHg0RSwgMHhCRiwKIAotMHhCMywgMHhFMiwgMHgyRCwgMHg5RiwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHhCMywgMHhFMiwgMHgyRCwgMHg5RiwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDU2LCAweDMxLCAweDU2LCAweEJGLAotMHg0NywgMHgzOSwgMHg0NywgMHhCRiwKKwkweDU2LCAweDMxLCAweDU2LCAweEJGLAorCTB4NDcsIDB4MzksIDB4NDcsIDB4QkYsCiAKLTB4NEYsIDB4MzksIDB4NEYsIDB4QkYsCi0weDU3LCAweDM5LCAweDU3LCAweEJGLAorCTB4NEYsIDB4MzksIDB4NEYsIDB4QkYsCisJMHg1NywgMHgzOSwgMHg1NywgMHhCRiwKIAotMHg0RSwgMHg4MCwgMHgwNywgMHhFQSwKLTB4MjQsIDB4NDEsIDB4MjAsIDB4RTksCisJMHg0RSwgMHg4MCwgMHgwNywgMHhFQSwKKwkweDI0LCAweDQxLCAweDIwLCAweEU5LAogCi0weDQyLCAweDczLCAweEY4LCAweEVDLAotMHgwMCwgMHhFMCwKLTB4MkQsIDB4NzMsCisJMHg0MiwgMHg3MywgMHhGOCwgMHhFQywKKwkweDAwLCAweEUwLAorCTB4MkQsIDB4NzMsCiAKLTB4MzMsIDB4NzIsCi0weDBDLCAweEUzLAotMHhBNSwgMHgyRiwgMHgxRSwgMHhCRCwKKwkweDMzLCAweDcyLAorCTB4MEMsIDB4RTMsCisJMHhBNSwgMHgyRiwgMHgxRSwgMHhCRCwKIAotMHg0MywgMHg0MywgMHgyRCwgMHhERiwKLTB4NEIsIDB4NEIsIDB4MkQsIDB4REYsCisJMHg0MywgMHg0MywgMHgyRCwgMHhERiwKKwkweDRCLCAweDRCLCAweDJELCAweERGLAogCi0weEFFLCAweDFFLCAweDI2LCAweEJELAotMHg1OCwgMHhFMywKLTB4MzMsIDB4NjYsCisJMHhBRSwgMHgxRSwgMHgyNiwgMHhCRCwKKwkweDU4LCAweEUzLAorCTB4MzMsIDB4NjYsCiAKLTB4NTMsIDB4NTMsIDB4MkQsIDB4REYsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4NTMsIDB4NTMsIDB4MkQsIDB4REYsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHhCOCwgMHgzOCwgMHgzMywgMHhCRiwKLTB4MDAsIDB4RTAsCi0weDU5LCAweEUzLAorCTB4QjgsIDB4MzgsIDB4MzMsIDB4QkYsCisJMHgwMCwgMHhFMCwKKwkweDU5LCAweEUzLAogCi0weDFFLCAweDEyLCAweDQxLCAweEU5LAotMHgxQSwgMHgyMiwgMHg0MSwgMHhFOSwKKwkweDFFLCAweDEyLCAweDQxLCAweEU5LAorCTB4MUEsIDB4MjIsIDB4NDEsIDB4RTksCiAKLTB4MkIsIDB4NDAsIDB4M0QsIDB4RTksCi0weDNGLCAweDRCLCAweEEwLCAweEU4LAorCTB4MkIsIDB4NDAsIDB4M0QsIDB4RTksCisJMHgzRiwgMHg0QiwgMHhBMCwgMHhFOCwKIAotMHgyRCwgMHg3MywKLTB4MzAsIDB4NzYsCi0weDA1LCAweDgwLCAweDNELCAweEVBLAorCTB4MkQsIDB4NzMsCisJMHgzMCwgMHg3NiwKKwkweDA1LCAweDgwLCAweDNELCAweEVBLAogCi0weDM3LCAweDQzLCAweEEwLCAweEU4LAotMHgzRCwgMHg1MywgMHhBMCwgMHhFOCwKKwkweDM3LCAweDQzLCAweEEwLCAweEU4LAorCTB4M0QsIDB4NTMsIDB4QTAsIDB4RTgsCiAKLTB4NDgsIDB4NzAsIDB4RjgsIDB4RUMsCi0weDJCLCAweDQ4LCAweDNDLCAweEU5LAorCTB4NDgsIDB4NzAsIDB4RjgsIDB4RUMsCisJMHgyQiwgMHg0OCwgMHgzQywgMHhFOSwKIAotMHgxRiwgMHgyNywgMHhCQywgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgxRiwgMHgyNywgMHhCQywgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0weDE1LCAweEMwLCAweDIwLCAweEU5LAorCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCisJMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKIAotMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCisJMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKKwkweDE1LCAweEMwLCAweDIwLCAweEU5LAogCi0weDE4LCAweDNBLCAweDQxLCAweEU5LAotMHgxRCwgMHgzMiwgMHg0MSwgMHhFOSwKKwkweDE4LCAweDNBLCAweDQxLCAweEU5LAorCTB4MUQsIDB4MzIsIDB4NDEsIDB4RTksCiAKLTB4MkEsIDB4NDAsIDB4MjAsIDB4RTksCi0weDU2LCAweDNELCAweDU2LCAweERGLAorCTB4MkEsIDB4NDAsIDB4MjAsIDB4RTksCisJMHg1NiwgMHgzRCwgMHg1NiwgMHhERiwKIAotMHg0NiwgMHgzNywgMHg0NiwgMHhERiwKLTB4NEUsIDB4M0YsIDB4NEUsIDB4REYsCisJMHg0NiwgMHgzNywgMHg0NiwgMHhERiwKKwkweDRFLCAweDNGLCAweDRFLCAweERGLAogCi0weDE2LCAweDMwLCAweDIwLCAweEU5LAotMHg0RiwgMHgzRiwgMHg0RiwgMHhERiwKKwkweDE2LCAweDMwLCAweDIwLCAweEU5LAorCTB4NEYsIDB4M0YsIDB4NEYsIDB4REYsCiAKLTB4MzIsIDB4MzIsIDB4MkQsIDB4REYsCi0weDIyLCAweDIyLCAweDJELCAweERGLAorCTB4MzIsIDB4MzIsIDB4MkQsIDB4REYsCisJMHgyMiwgMHgyMiwgMHgyRCwgMHhERiwKIAotMHgxMiwgMHgxMiwgMHgyRCwgMHhERiwKLTB4M0EsIDB4M0EsIDB4MkQsIDB4REYsCisJMHgxMiwgMHgxMiwgMHgyRCwgMHhERiwKKwkweDNBLCAweDNBLCAweDJELCAweERGLAogCi0weDQ3LCAweDM3LCAweDQ3LCAweERGLAotMHg1NywgMHgzRCwgMHg1NywgMHhERiwKKwkweDQ3LCAweDM3LCAweDQ3LCAweERGLAorCTB4NTcsIDB4M0QsIDB4NTcsIDB4REYsCiAKLTB4M0QsIDB4Q0YsIDB4NzQsIDB4QzAsCi0weDM3LCAweENGLCAweDc0LCAweEM0LAorCTB4M0QsIDB4Q0YsIDB4NzQsIDB4QzAsCisJMHgzNywgMHhDRiwgMHg3NCwgMHhDNCwKIAotMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLTB4MzQsIDB4ODAsIDB4MjAsIDB4RTksCisJMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKKwkweDM0LCAweDgwLCAweDIwLCAweEU5LAogCi0weDM5LCAweEU1LCAweDJDLCAweDlGLAotMHgzQywgMHgzRCwgMHgyMCwgMHhFOSwKKwkweDM5LCAweEU1LCAweDJDLCAweDlGLAorCTB4M0MsIDB4M0QsIDB4MjAsIDB4RTksCiAKLTB4MjcsIDB4Q0YsIDB4NzQsIDB4QzYsCi0weDNELCAweENGLCAweDc0LCAweEMyLAorCTB4MjcsIDB4Q0YsIDB4NzQsIDB4QzYsCisJMHgzRCwgMHhDRiwgMHg3NCwgMHhDMiwKIAotMHgwQSwgMHg0NCwgMHg0QywgMHhCMCwKLTB4MDIsIDB4NDQsIDB4NTQsIDB4QjAsCisJMHgwQSwgMHg0NCwgMHg0QywgMHhCMCwKKwkweDAyLCAweDQ0LCAweDU0LCAweEIwLAogCi0weDJBLCAweDQ0LCAweDRDLCAweEIyLAotMHgxQSwgMHg0NCwgMHg1NCwgMHhCMiwKKwkweDJBLCAweDQ0LCAweDRDLCAweEIyLAorCTB4MUEsIDB4NDQsIDB4NTQsIDB4QjIsCiAKLTB4MjAsIDB4ODAsIDB4M0EsIDB4RUEsCi0weDBBLCAweDIwLAotMHgwMiwgMHgyMCwKKwkweDIwLCAweDgwLCAweDNBLCAweEVBLAorCTB4MEEsIDB4MjAsCisJMHgwMiwgMHgyMCwKIAotMHg4OCwgMHg3MywgMHg1RSwgMHhFOSwKLTB4MkEsIDB4MjAsCi0weDFBLCAweDIwLAorCTB4ODgsIDB4NzMsIDB4NUUsIDB4RTksCisJMHgyQSwgMHgyMCwKKwkweDFBLCAweDIwLAogCi0weDMwLCAweDUwLCAweDJFLCAweDlGLAotMHgzMiwgMHgzMSwgMHg1RiwgMHhFOSwKKwkweDMwLCAweDUwLCAweDJFLCAweDlGLAorCTB4MzIsIDB4MzEsIDB4NUYsIDB4RTksCiAKLTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0weDMzLCAweDM5LCAweDVGLCAweEU5LAorCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCisJMHgzMywgMHgzOSwgMHg1RiwgMHhFOSwKIAotMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLTB4OUMsIDB4MjcsIDB4MjAsIDB4RTksCisJMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKKwkweDlDLCAweDI3LCAweDIwLCAweEU5LAogCi0weDBBLCAweDQ0LCAweDRDLCAweEI0LAotMHgwMiwgMHg0NCwgMHg1NCwgMHhCNCwKKwkweDBBLCAweDQ0LCAweDRDLCAweEI0LAorCTB4MDIsIDB4NDQsIDB4NTQsIDB4QjQsCiAKLTB4MkEsIDB4NDQsIDB4NEMsIDB4QjYsCi0weDFBLCAweDQ0LCAweDU0LCAweEI2LAorCTB4MkEsIDB4NDQsIDB4NEMsIDB4QjYsCisJMHgxQSwgMHg0NCwgMHg1NCwgMHhCNiwKIAotMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLTB4MzgsIDB4M0QsIDB4MjAsIDB4RTksCisJMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKKwkweDM4LCAweDNELCAweDIwLCAweEU5LAogCi0weDBBLCAweDIwLAotMHgwMiwgMHgyMCwKLTB4MkEsIDB4MjAsCi0weDFBLCAweDIwLAorCTB4MEEsIDB4MjAsCisJMHgwMiwgMHgyMCwKKwkweDJBLCAweDIwLAorCTB4MUEsIDB4MjAsCiAKLTB4MEEsIDB4NDcsIDB4NEYsIDB4QkYsCi0weDAyLCAweDQ3LCAweDU3LCAweEJGLAorCTB4MEEsIDB4NDcsIDB4NEYsIDB4QkYsCisJMHgwMiwgMHg0NywgMHg1NywgMHhCRiwKIAotMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLTB4M0UsIDB4MzAsIDB4NEYsIDB4RTksCisJMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKKwkweDNFLCAweDMwLCAweDRGLCAweEU5LAogCi0weDM4LCAweDIxLCAweDJDLCAweDlGLAotMHgzRiwgMHgzOCwgMHg0RiwgMHhFOSwKKwkweDM4LCAweDIxLCAweDJDLCAweDlGLAorCTB4M0YsIDB4MzgsIDB4NEYsIDB4RTksCiAKLTB4MkEsIDB4NDYsIDB4NEUsIDB4QkYsCi0weDFBLCAweDQ2LCAweDU2LCAweEJGLAorCTB4MkEsIDB4NDYsIDB4NEUsIDB4QkYsCisJMHgxQSwgMHg0NiwgMHg1NiwgMHhCRiwKIAotMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLTB4M0EsIDB4MzEsIDB4NEYsIDB4RTksCisJMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKKwkweDNBLCAweDMxLCAweDRGLCAweEU5LAogCi0weDM5LCAweEU1LCAweDJDLCAweDlGLAotMHgzQiwgMHgzOSwgMHg0RiwgMHhFOSwKKwkweDM5LCAweEU1LCAweDJDLCAweDlGLAorCTB4M0IsIDB4MzksIDB4NEYsIDB4RTksCiAKLTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0weDM2LCAweDMwLCAweDRGLCAweEU5LAorCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCisJMHgzNiwgMHgzMCwgMHg0RiwgMHhFOSwKIAotMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLTB4MzcsIDB4MzgsIDB4NEYsIDB4RTksCisJMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKKwkweDM3LCAweDM4LCAweDRGLCAweEU5LAogCi0weDJBLCAweDQzLCAweDRCLCAweEJGLAotMHgxQSwgMHg0MywgMHg1MywgMHhCRiwKKwkweDJBLCAweDQzLCAweDRCLCAweEJGLAorCTB4MUEsIDB4NDMsIDB4NTMsIDB4QkYsCiAKLTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0weDlELCAweDMxLCAweDRGLCAweEU5LAorCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCisJMHg5RCwgMHgzMSwgMHg0RiwgMHhFOSwKIAotMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLTB4OUUsIDB4MzksIDB4NEYsIDB4RTksCisJMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKKwkweDlFLCAweDM5LCAweDRGLCAweEU5LAogCi0weDMxLCAweDUzLCAweDJGLCAweDlGLAotMHg4MCwgMHgzMSwgMHg1NywgMHhFOSwKKwkweDMxLCAweDUzLCAweDJGLCAweDlGLAorCTB4ODAsIDB4MzEsIDB4NTcsIDB4RTksCiAKLTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0weDgxLCAweDM5LCAweDU3LCAweEU5LAorCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCisJMHg4MSwgMHgzOSwgMHg1NywgMHhFOSwKIAotMHgzNywgMHg0OCwgMHg1MCwgMHhCRCwKLTB4OEEsIDB4MzYsIDB4MjAsIDB4RTksCisJMHgzNywgMHg0OCwgMHg1MCwgMHhCRCwKKwkweDhBLCAweDM2LCAweDIwLCAweEU5LAogCi0weDg2LCAweDc2LCAweDU3LCAweEU5LAotMHg4QiwgMHgzRSwgMHgyMCwgMHhFOSwKKwkweDg2LCAweDc2LCAweDU3LCAweEU5LAorCTB4OEIsIDB4M0UsIDB4MjAsIDB4RTksCiAKLTB4ODIsIDB4MzAsIDB4NTcsIDB4RTksCi0weDg3LCAweDc3LCAweDU3LCAweEU5LAorCTB4ODIsIDB4MzAsIDB4NTcsIDB4RTksCisJMHg4NywgMHg3NywgMHg1NywgMHhFOSwKIAotMHg4MywgMHgzOCwgMHg1NywgMHhFOSwKLTB4MzUsIDB4NDksIDB4NTEsIDB4QkQsCisJMHg4MywgMHgzOCwgMHg1NywgMHhFOSwKKwkweDM1LCAweDQ5LCAweDUxLCAweEJELAogCi0weDg0LCAweDMxLCAweDVFLCAweEU5LAotMHgzMCwgMHgxRiwgMHg1RiwgMHhFOSwKKwkweDg0LCAweDMxLCAweDVFLCAweEU5LAorCTB4MzAsIDB4MUYsIDB4NUYsIDB4RTksCiAKLTB4ODUsIDB4MzksIDB4NUUsIDB4RTksCi0weDU3LCAweDI1LCAweDIwLCAweEU5LAorCTB4ODUsIDB4MzksIDB4NUUsIDB4RTksCisJMHg1NywgMHgyNSwgMHgyMCwgMHhFOSwKIAotMHgyQiwgMHg0OCwgMHgyMCwgMHhFOSwKLTB4MUQsIDB4MzcsIDB4RTEsIDB4RUEsCisJMHgyQiwgMHg0OCwgMHgyMCwgMHhFOSwKKwkweDFELCAweDM3LCAweEUxLCAweEVBLAogCi0weDFFLCAweDM1LCAweEUxLCAweEVBLAotMHgwMCwgMHhFMCwKLTB4MjYsIDB4NzcsCisJMHgxRSwgMHgzNSwgMHhFMSwgMHhFQSwKKwkweDAwLCAweEUwLAorCTB4MjYsIDB4NzcsCiAKLTB4MjQsIDB4NDksIDB4MjAsIDB4RTksCi0weEFCLCAweEZGLCAweDIwLCAweEVBLAorCTB4MjQsIDB4NDksIDB4MjAsIDB4RTksCisJMHhBQiwgMHhGRiwgMHgyMCwgMHhFQSwKIAotMHgxNiwgMHgyNiwgMHgyMCwgMHhFOSwKLTB4NTcsIDB4MkUsIDB4QkYsIDB4RUEsCisJMHgxNiwgMHgyNiwgMHgyMCwgMHhFOSwKKwkweDU3LCAweDJFLCAweEJGLCAweEVBLAogCi0weDFDLCAweDQ2LCAweEEwLCAweEU4LAotMHgyMywgMHg0RSwgMHhBMCwgMHhFOCwKKwkweDFDLCAweDQ2LCAweEEwLCAweEU4LAorCTB4MjMsIDB4NEUsIDB4QTAsIDB4RTgsCiAKLTB4MkIsIDB4NTYsIDB4QTAsIDB4RTgsCi0weDFELCAweDQ3LCAweEEwLCAweEU4LAorCTB4MkIsIDB4NTYsIDB4QTAsIDB4RTgsCisJMHgxRCwgMHg0NywgMHhBMCwgMHhFOCwKIAotMHgyNCwgMHg0RiwgMHhBMCwgMHhFOCwKLTB4MkMsIDB4NTcsIDB4QTAsIDB4RTgsCisJMHgyNCwgMHg0RiwgMHhBMCwgMHhFOCwKKwkweDJDLCAweDU3LCAweEEwLCAweEU4LAogCi0weDFDLCAweDAwLAotMHgyMywgMHgwMCwKLTB4MkIsIDB4MDAsCi0weDAwLCAweEUwLAorCTB4MUMsIDB4MDAsCisJMHgyMywgMHgwMCwKKwkweDJCLCAweDAwLAorCTB4MDAsIDB4RTAsCiAKLTB4MUQsIDB4MDAsCi0weDI0LCAweDAwLAotMHgyQywgMHgwMCwKLTB4MDAsIDB4RTAsCisJMHgxRCwgMHgwMCwKKwkweDI0LCAweDAwLAorCTB4MkMsIDB4MDAsCisJMHgwMCwgMHhFMCwKIAotMHgxQywgMHg2NSwKLTB4MjMsIDB4NjUsCi0weDJCLCAweDY1LAotMHgwMCwgMHhFMCwKKwkweDFDLCAweDY1LAorCTB4MjMsIDB4NjUsCisJMHgyQiwgMHg2NSwKKwkweDAwLCAweEUwLAogCi0weDFELCAweDY1LAotMHgyNCwgMHg2NSwKLTB4MkMsIDB4NjUsCi0weDAwLCAweEUwLAorCTB4MUQsIDB4NjUsCisJMHgyNCwgMHg2NSwKKwkweDJDLCAweDY1LAorCTB4MDAsIDB4RTAsCiAKLTB4MUMsIDB4MjMsIDB4NjAsIDB4RUMsCi0weDM2LCAweEQ3LCAweDM2LCAweEFELAorCTB4MUMsIDB4MjMsIDB4NjAsIDB4RUMsCisJMHgzNiwgMHhENywgMHgzNiwgMHhBRCwKIAotMHgyQiwgMHg4MCwgMHg2MCwgMHhFQywKLTB4MUQsIDB4MjQsIDB4NjAsIDB4RUMsCisJMHgyQiwgMHg4MCwgMHg2MCwgMHhFQywKKwkweDFELCAweDI0LCAweDYwLCAweEVDLAogCi0weDNFLCAweEQ3LCAweDNFLCAweEFELAotMHgyQywgMHg4MCwgMHg2MCwgMHhFQywKKwkweDNFLCAweEQ3LCAweDNFLCAweEFELAorCTB4MkMsIDB4ODAsIDB4NjAsIDB4RUMsCiAKLTB4MUMsIDB4MkIsIDB4REUsIDB4RTgsCi0weDIzLCAweDgwLCAweERFLCAweEU4LAorCTB4MUMsIDB4MkIsIDB4REUsIDB4RTgsCisJMHgyMywgMHg4MCwgMHhERSwgMHhFOCwKIAotMHgzNiwgMHg4MCwgMHgzNiwgMHhCRCwKLTB4M0UsIDB4ODAsIDB4M0UsIDB4QkQsCisJMHgzNiwgMHg4MCwgMHgzNiwgMHhCRCwKKwkweDNFLCAweDgwLCAweDNFLCAweEJELAogCi0weDMzLCAweEQ3LCAweDFDLCAweEJELAotMHgzQiwgMHhENywgMHgyMywgMHhCRCwKKwkweDMzLCAweEQ3LCAweDFDLCAweEJELAorCTB4M0IsIDB4RDcsIDB4MjMsIDB4QkQsCiAKLTB4NDYsIDB4ODAsIDB4NDYsIDB4Q0YsCi0weDRGLCAweDgwLCAweDRGLCAweENGLAorCTB4NDYsIDB4ODAsIDB4NDYsIDB4Q0YsCisJMHg0RiwgMHg4MCwgMHg0RiwgMHhDRiwKIAotMHg1NiwgMHgzMywgMHg1NiwgMHhDRiwKLTB4NDcsIDB4M0IsIDB4NDcsIDB4Q0YsCisJMHg1NiwgMHgzMywgMHg1NiwgMHhDRiwKKwkweDQ3LCAweDNCLCAweDQ3LCAweENGLAogCi0weEQzLCAweEZGLCAweDIwLCAweEVBLAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweEQzLCAweEZGLCAweDIwLCAweEVBLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4NEUsIDB4MzMsIDB4NEUsIDB4Q0YsCi0weDU3LCAweDNCLCAweDU3LCAweENGLAorCTB4NEUsIDB4MzMsIDB4NEUsIDB4Q0YsCisJMHg1NywgMHgzQiwgMHg1NywgMHhDRiwKIAotMHg5OSwgMHhGRiwgMHgyMCwgMHhFQSwKLTB4NTcsIDB4QzAsIDB4QkYsIDB4RUEsCisJMHg5OSwgMHhGRiwgMHgyMCwgMHhFQSwKKwkweDU3LCAweEMwLCAweEJGLCAweEVBLAogCi0weDAwLCAweDgwLCAweEEwLCAweEU5LAotMHgwMCwgMHgwMCwgMHhEOCwgMHhFQywKKwkweDAwLCAweDgwLCAweEEwLCAweEU5LAorCTB4MDAsIDB4MDAsIDB4RDgsIDB4RUMsCiAKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHdhcnBfZzQwMF90Z3phZltdID0gewogCi0weDAwLCAweDg4LCAweDk4LCAweEU5LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDg4LCAweDk4LCAweEU5LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MDAsIDB4ODAsIDB4QTAsIDB4RTksCi0weDAwLCAweDAwLCAweEQ4LCAweEVDLAorCTB4MDAsIDB4ODAsIDB4QTAsIDB4RTksCisJMHgwMCwgMHgwMCwgMHhEOCwgMHhFQywKIAotMHhGRiwgMHg4MCwgMHhDMCwgMHhFOSwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHhGRiwgMHg4MCwgMHhDMCwgMHhFOSwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDIyLCAweDQwLCAweDQ4LCAweEJGLAotMHgyQSwgMHg0MCwgMHg1MCwgMHhCRiwKKwkweDIyLCAweDQwLCAweDQ4LCAweEJGLAorCTB4MkEsIDB4NDAsIDB4NTAsIDB4QkYsCiAKLTB4MzIsIDB4NDEsIDB4NDksIDB4QkYsCi0weDNBLCAweDQxLCAweDUxLCAweEJGLAorCTB4MzIsIDB4NDEsIDB4NDksIDB4QkYsCisJMHgzQSwgMHg0MSwgMHg1MSwgMHhCRiwKIAotMHhDMywgMHg2QiwKLTB4Q0IsIDB4NkIsCi0weDAwLCAweDg4LCAweDk4LCAweEU5LAorCTB4QzMsIDB4NkIsCisJMHhDQiwgMHg2QiwKKwkweDAwLCAweDg4LCAweDk4LCAweEU5LAogCi0weDczLCAweDdCLCAweEM4LCAweEVDLAotMHg5NiwgMHhFMiwKLTB4NDEsIDB4MDQsCisJMHg3MywgMHg3QiwgMHhDOCwgMHhFQywKKwkweDk2LCAweEUyLAorCTB4NDEsIDB4MDQsCiAKLTB4N0IsIDB4NDMsIDB4QTAsIDB4RTgsCi0weDczLCAweDRCLCAweEEwLCAweEU4LAorCTB4N0IsIDB4NDMsIDB4QTAsIDB4RTgsCisJMHg3MywgMHg0QiwgMHhBMCwgMHhFOCwKIAotMHhBRCwgMHhFRSwgMHgyOSwgMHg5RiwKLTB4MDAsIDB4RTAsCi0weDQ5LCAweDA0LAorCTB4QUQsIDB4RUUsIDB4MjksIDB4OUYsCisJMHgwMCwgMHhFMCwKKwkweDQ5LCAweDA0LAogCi0weDkwLCAweEUyLAotMHg1MSwgMHgwNCwKLTB4MzEsIDB4NDYsIDB4QjEsIDB4RTgsCisJMHg5MCwgMHhFMiwKKwkweDUxLCAweDA0LAorCTB4MzEsIDB4NDYsIDB4QjEsIDB4RTgsCiAKLTB4NDksIDB4NDEsIDB4QzAsIDB4RUMsCi0weDM5LCAweDU3LCAweEIxLCAweEU4LAorCTB4NDksIDB4NDEsIDB4QzAsIDB4RUMsCisJMHgzOSwgMHg1NywgMHhCMSwgMHhFOCwKIAotMHgwMCwgMHgwNCwKLTB4NDYsIDB4RTIsCi0weDczLCAweDUzLCAweEEwLCAweEU4LAorCTB4MDAsIDB4MDQsCisJMHg0NiwgMHhFMiwKKwkweDczLCAweDUzLCAweEEwLCAweEU4LAogCi0weDUxLCAweDQxLCAweEMwLCAweEVDLAotMHgzMSwgMHgwMCwKLTB4MzksIDB4MDAsCisJMHg1MSwgMHg0MSwgMHhDMCwgMHhFQywKKwkweDMxLCAweDAwLAorCTB4MzksIDB4MDAsCiAKLTB4NjEsIDB4ODAsIDB4MTUsIDB4RUEsCi0weDA4LCAweDA0LAotMHgxMCwgMHgwNCwKKwkweDYxLCAweDgwLCAweDE1LCAweEVBLAorCTB4MDgsIDB4MDQsCisJMHgxMCwgMHgwNCwKIAotMHg1MSwgMHg0OSwgMHhDMCwgMHhFQywKLTB4MkYsIDB4NDEsIDB4NjAsIDB4RUEsCisJMHg1MSwgMHg0OSwgMHhDMCwgMHhFQywKKwkweDJGLCAweDQxLCAweDYwLCAweEVBLAogCi0weDMxLCAweDIwLAotMHgzOSwgMHgyMCwKLTB4MUYsIDB4NDIsIDB4QTAsIDB4RTgsCisJMHgzMSwgMHgyMCwKKwkweDM5LCAweDIwLAorCTB4MUYsIDB4NDIsIDB4QTAsIDB4RTgsCiAKLTB4MkEsIDB4NDIsIDB4NEEsIDB4QkYsCi0weDI3LCAweDRBLCAweEEwLCAweEU4LAorCTB4MkEsIDB4NDIsIDB4NEEsIDB4QkYsCisJMHgyNywgMHg0QSwgMHhBMCwgMHhFOCwKIAotMHgxQSwgMHg0MiwgMHg1MiwgMHhCRiwKLTB4MUUsIDB4NDksIDB4NjAsIDB4RUEsCisJMHgxQSwgMHg0MiwgMHg1MiwgMHhCRiwKKwkweDFFLCAweDQ5LCAweDYwLCAweEVBLAogCi0weDczLCAweDdCLCAweEM4LCAweEVDLAotMHgyNiwgMHg1MSwgMHg2MCwgMHhFQSwKKwkweDczLCAweDdCLCAweEM4LCAweEVDLAorCTB4MjYsIDB4NTEsIDB4NjAsIDB4RUEsCiAKLTB4MzIsIDB4NDAsIDB4NDgsIDB4QkQsCi0weDIyLCAweDQwLCAweDUwLCAweEJELAorCTB4MzIsIDB4NDAsIDB4NDgsIDB4QkQsCisJMHgyMiwgMHg0MCwgMHg1MCwgMHhCRCwKIAotMHgxMiwgMHg0MSwgMHg0OSwgMHhCRCwKLTB4M0EsIDB4NDEsIDB4NTEsIDB4QkQsCisJMHgxMiwgMHg0MSwgMHg0OSwgMHhCRCwKKwkweDNBLCAweDQxLCAweDUxLCAweEJELAogCi0weEJGLCAweDJGLCAweDI2LCAweEJELAotMHgwMCwgMHhFMCwKLTB4N0IsIDB4NzIsCisJMHhCRiwgMHgyRiwgMHgyNiwgMHhCRCwKKwkweDAwLCAweEUwLAorCTB4N0IsIDB4NzIsCiAKLTB4MzIsIDB4MjAsCi0weDIyLCAweDIwLAotMHgxMiwgMHgyMCwKLTB4M0EsIDB4MjAsCisJMHgzMiwgMHgyMCwKKwkweDIyLCAweDIwLAorCTB4MTIsIDB4MjAsCisJMHgzQSwgMHgyMCwKIAotMHg0NiwgMHgzMSwgMHg0NiwgMHhCRiwKLTB4NEUsIDB4MzEsIDB4NEUsIDB4QkYsCisJMHg0NiwgMHgzMSwgMHg0NiwgMHhCRiwKKwkweDRFLCAweDMxLCAweDRFLCAweEJGLAogCi0weEIzLCAweEUyLCAweDJELCAweDlGLAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweEIzLCAweEUyLCAweDJELCAweDlGLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4NTYsIDB4MzEsIDB4NTYsIDB4QkYsCi0weDQ3LCAweDM5LCAweDQ3LCAweEJGLAorCTB4NTYsIDB4MzEsIDB4NTYsIDB4QkYsCisJMHg0NywgMHgzOSwgMHg0NywgMHhCRiwKIAotMHg0RiwgMHgzOSwgMHg0RiwgMHhCRiwKLTB4NTcsIDB4MzksIDB4NTcsIDB4QkYsCisJMHg0RiwgMHgzOSwgMHg0RiwgMHhCRiwKKwkweDU3LCAweDM5LCAweDU3LCAweEJGLAogCi0weDUzLCAweDgwLCAweDA3LCAweEVBLAotMHgyNCwgMHg0MSwgMHgyMCwgMHhFOSwKKwkweDUzLCAweDgwLCAweDA3LCAweEVBLAorCTB4MjQsIDB4NDEsIDB4MjAsIDB4RTksCiAKLTB4NDIsIDB4NzMsIDB4RjgsIDB4RUMsCi0weDAwLCAweEUwLAotMHgyRCwgMHg3MywKKwkweDQyLCAweDczLCAweEY4LCAweEVDLAorCTB4MDAsIDB4RTAsCisJMHgyRCwgMHg3MywKIAotMHgzMywgMHg3MiwKLTB4MEMsIDB4RTMsCi0weEE1LCAweDJGLCAweDFFLCAweEJELAorCTB4MzMsIDB4NzIsCisJMHgwQywgMHhFMywKKwkweEE1LCAweDJGLCAweDFFLCAweEJELAogCi0weDQzLCAweDQzLCAweDJELCAweERGLAotMHg0QiwgMHg0QiwgMHgyRCwgMHhERiwKKwkweDQzLCAweDQzLCAweDJELCAweERGLAorCTB4NEIsIDB4NEIsIDB4MkQsIDB4REYsCiAKLTB4QUUsIDB4MUUsIDB4MjYsIDB4QkQsCi0weDU4LCAweEUzLAotMHgzMywgMHg2NiwKKwkweEFFLCAweDFFLCAweDI2LCAweEJELAorCTB4NTgsIDB4RTMsCisJMHgzMywgMHg2NiwKIAotMHg1MywgMHg1MywgMHgyRCwgMHhERiwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHg1MywgMHg1MywgMHgyRCwgMHhERiwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weEI4LCAweDM4LCAweDMzLCAweEJGLAotMHgwMCwgMHhFMCwKLTB4NTksIDB4RTMsCisJMHhCOCwgMHgzOCwgMHgzMywgMHhCRiwKKwkweDAwLCAweEUwLAorCTB4NTksIDB4RTMsCiAKLTB4MUUsIDB4MTIsIDB4NDEsIDB4RTksCi0weDFBLCAweDIyLCAweDQxLCAweEU5LAorCTB4MUUsIDB4MTIsIDB4NDEsIDB4RTksCisJMHgxQSwgMHgyMiwgMHg0MSwgMHhFOSwKIAotMHgyQiwgMHg0MCwgMHgzRCwgMHhFOSwKLTB4M0YsIDB4NEIsIDB4QTAsIDB4RTgsCisJMHgyQiwgMHg0MCwgMHgzRCwgMHhFOSwKKwkweDNGLCAweDRCLCAweEEwLCAweEU4LAogCi0weDJELCAweDczLAotMHgzMCwgMHg3NiwKLTB4MDUsIDB4ODAsIDB4M0QsIDB4RUEsCisJMHgyRCwgMHg3MywKKwkweDMwLCAweDc2LAorCTB4MDUsIDB4ODAsIDB4M0QsIDB4RUEsCiAKLTB4MzcsIDB4NDMsIDB4QTAsIDB4RTgsCi0weDNELCAweDUzLCAweEEwLCAweEU4LAorCTB4MzcsIDB4NDMsIDB4QTAsIDB4RTgsCisJMHgzRCwgMHg1MywgMHhBMCwgMHhFOCwKIAotMHg0OCwgMHg3MCwgMHhGOCwgMHhFQywKLTB4MkIsIDB4NDgsIDB4M0MsIDB4RTksCisJMHg0OCwgMHg3MCwgMHhGOCwgMHhFQywKKwkweDJCLCAweDQ4LCAweDNDLCAweEU5LAogCi0weDFGLCAweDI3LCAweEJDLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDFGLCAweDI3LCAweEJDLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCisJMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKKwkweDE1LCAweEMwLCAweDIwLCAweEU5LAogCi0weDE1LCAweEMwLCAweDIwLCAweEU5LAotMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKKwkweDE1LCAweEMwLCAweDIwLCAweEU5LAorCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCiAKLTB4MTgsIDB4M0EsIDB4NDEsIDB4RTksCi0weDFELCAweDMyLCAweDQxLCAweEU5LAorCTB4MTgsIDB4M0EsIDB4NDEsIDB4RTksCisJMHgxRCwgMHgzMiwgMHg0MSwgMHhFOSwKIAotMHgyQSwgMHg0MCwgMHgyMCwgMHhFOSwKLTB4NTYsIDB4M0QsIDB4NTYsIDB4REYsCisJMHgyQSwgMHg0MCwgMHgyMCwgMHhFOSwKKwkweDU2LCAweDNELCAweDU2LCAweERGLAogCi0weDQ2LCAweDM3LCAweDQ2LCAweERGLAotMHg0RSwgMHgzRiwgMHg0RSwgMHhERiwKKwkweDQ2LCAweDM3LCAweDQ2LCAweERGLAorCTB4NEUsIDB4M0YsIDB4NEUsIDB4REYsCiAKLTB4MTYsIDB4MzAsIDB4MjAsIDB4RTksCi0weDRGLCAweDNGLCAweDRGLCAweERGLAorCTB4MTYsIDB4MzAsIDB4MjAsIDB4RTksCisJMHg0RiwgMHgzRiwgMHg0RiwgMHhERiwKIAotMHgzMiwgMHgzMiwgMHgyRCwgMHhERiwKLTB4MjIsIDB4MjIsIDB4MkQsIDB4REYsCisJMHgzMiwgMHgzMiwgMHgyRCwgMHhERiwKKwkweDIyLCAweDIyLCAweDJELCAweERGLAogCi0weDEyLCAweDEyLCAweDJELCAweERGLAotMHgzQSwgMHgzQSwgMHgyRCwgMHhERiwKKwkweDEyLCAweDEyLCAweDJELCAweERGLAorCTB4M0EsIDB4M0EsIDB4MkQsIDB4REYsCiAKLTB4NDcsIDB4MzcsIDB4NDcsIDB4REYsCi0weDU3LCAweDNELCAweDU3LCAweERGLAorCTB4NDcsIDB4MzcsIDB4NDcsIDB4REYsCisJMHg1NywgMHgzRCwgMHg1NywgMHhERiwKIAotMHgzRCwgMHhDRiwgMHg3NCwgMHhDMCwKLTB4MzcsIDB4Q0YsIDB4NzQsIDB4QzQsCisJMHgzRCwgMHhDRiwgMHg3NCwgMHhDMCwKKwkweDM3LCAweENGLCAweDc0LCAweEM0LAogCi0weDBBLCAweDQ0LCAweDRDLCAweEIwLAotMHgwMiwgMHg0NCwgMHg1NCwgMHhCMCwKKwkweDBBLCAweDQ0LCAweDRDLCAweEIwLAorCTB4MDIsIDB4NDQsIDB4NTQsIDB4QjAsCiAKLTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0weDM0LCAweDM3LCAweDIwLCAweEU5LAorCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCisJMHgzNCwgMHgzNywgMHgyMCwgMHhFOSwKIAotMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLTB4M0MsIDB4M0QsIDB4MjAsIDB4RTksCisJMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKKwkweDNDLCAweDNELCAweDIwLCAweEU5LAogCi0weDJBLCAweDQ0LCAweDRDLCAweEIyLAotMHgxQSwgMHg0NCwgMHg1NCwgMHhCMiwKKwkweDJBLCAweDQ0LCAweDRDLCAweEIyLAorCTB4MUEsIDB4NDQsIDB4NTQsIDB4QjIsCiAKLTB4MjYsIDB4ODAsIDB4M0EsIDB4RUEsCi0weDBBLCAweDIwLAotMHgwMiwgMHgyMCwKKwkweDI2LCAweDgwLCAweDNBLCAweEVBLAorCTB4MEEsIDB4MjAsCisJMHgwMiwgMHgyMCwKIAotMHg4OCwgMHg3MywgMHg1RSwgMHhFOSwKLTB4MkEsIDB4MjAsCi0weDFBLCAweDIwLAorCTB4ODgsIDB4NzMsIDB4NUUsIDB4RTksCisJMHgyQSwgMHgyMCwKKwkweDFBLCAweDIwLAogCi0weDNELCAweENGLCAweDc0LCAweEMyLAotMHgyNywgMHhDRiwgMHg3NCwgMHhDNiwKKwkweDNELCAweENGLCAweDc0LCAweEMyLAorCTB4MjcsIDB4Q0YsIDB4NzQsIDB4QzYsCiAKLTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0weDMyLCAweDMxLCAweDVGLCAweEU5LAorCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCisJMHgzMiwgMHgzMSwgMHg1RiwgMHhFOSwKIAotMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLTB4MzMsIDB4MzksIDB4NUYsIDB4RTksCisJMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKKwkweDMzLCAweDM5LCAweDVGLCAweEU5LAogCi0weDMxLCAweDUzLCAweDJGLCAweDlGLAotMHg5QywgMHgyNywgMHgyMCwgMHhFOSwKKwkweDMxLCAweDUzLCAweDJGLCAweDlGLAorCTB4OUMsIDB4MjcsIDB4MjAsIDB4RTksCiAKLTB4MEEsIDB4NDQsIDB4NEMsIDB4QjQsCi0weDAyLCAweDQ0LCAweDU0LCAweEI0LAorCTB4MEEsIDB4NDQsIDB4NEMsIDB4QjQsCisJMHgwMiwgMHg0NCwgMHg1NCwgMHhCNCwKIAotMHgyQSwgMHg0NCwgMHg0QywgMHhCNiwKLTB4MUEsIDB4NDQsIDB4NTQsIDB4QjYsCisJMHgyQSwgMHg0NCwgMHg0QywgMHhCNiwKKwkweDFBLCAweDQ0LCAweDU0LCAweEI2LAogCi0weDM5LCAweEU1LCAweDJDLCAweDlGLAotMHgzOCwgMHgzRCwgMHgyMCwgMHhFOSwKKwkweDM5LCAweEU1LCAweDJDLCAweDlGLAorCTB4MzgsIDB4M0QsIDB4MjAsIDB4RTksCiAKLTB4MEEsIDB4MjAsCi0weDAyLCAweDIwLAotMHgyQSwgMHgyMCwKLTB4MUEsIDB4MjAsCisJMHgwQSwgMHgyMCwKKwkweDAyLCAweDIwLAorCTB4MkEsIDB4MjAsCisJMHgxQSwgMHgyMCwKIAotMHgzRCwgMHhDRiwgMHg3NSwgMHhDNiwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgzRCwgMHhDRiwgMHg3NSwgMHhDNiwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDMwLCAweDUwLCAweDJFLCAweDlGLAotMHgzRSwgMHgzMCwgMHg0RiwgMHhFOSwKKwkweDMwLCAweDUwLCAweDJFLCAweDlGLAorCTB4M0UsIDB4MzAsIDB4NEYsIDB4RTksCiAKLTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0weDNGLCAweDM4LCAweDRGLCAweEU5LAorCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCisJMHgzRiwgMHgzOCwgMHg0RiwgMHhFOSwKIAotMHgwQSwgMHg0NSwgMHg0RCwgMHhCNiwKLTB4MDIsIDB4NDUsIDB4NTUsIDB4QjYsCisJMHgwQSwgMHg0NSwgMHg0RCwgMHhCNiwKKwkweDAyLCAweDQ1LCAweDU1LCAweEI2LAogCi0weDMxLCAweDUzLCAweDJGLCAweDlGLAotMHgzQSwgMHgzMSwgMHg0RiwgMHhFOSwKKwkweDMxLCAweDUzLCAweDJGLCAweDlGLAorCTB4M0EsIDB4MzEsIDB4NEYsIDB4RTksCiAKLTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0weDNCLCAweDM5LCAweDRGLCAweEU5LAorCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCisJMHgzQiwgMHgzOSwgMHg0RiwgMHhFOSwKIAotMHgzMSwgMHgzRCwgMHgyMCwgMHhFOSwKLTB4MEEsIDB4MjAsCi0weDAyLCAweDIwLAorCTB4MzEsIDB4M0QsIDB4MjAsIDB4RTksCisJMHgwQSwgMHgyMCwKKwkweDAyLCAweDIwLAogCi0weDJBLCAweDQ2LCAweDRFLCAweEJGLAotMHgxQSwgMHg0NiwgMHg1NiwgMHhCRiwKKwkweDJBLCAweDQ2LCAweDRFLCAweEJGLAorCTB4MUEsIDB4NDYsIDB4NTYsIDB4QkYsCiAKLTB4MEEsIDB4NDcsIDB4NEYsIDB4QkYsCi0weDAyLCAweDQ3LCAweDU3LCAweEJGLAorCTB4MEEsIDB4NDcsIDB4NEYsIDB4QkYsCisJMHgwMiwgMHg0NywgMHg1NywgMHhCRiwKIAotMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLTB4MzYsIDB4MzAsIDB4NEYsIDB4RTksCisJMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKKwkweDM2LCAweDMwLCAweDRGLCAweEU5LAogCi0weDM4LCAweDIxLCAweDJDLCAweDlGLAotMHgzNywgMHgzOCwgMHg0RiwgMHhFOSwKKwkweDM4LCAweDIxLCAweDJDLCAweDlGLAorCTB4MzcsIDB4MzgsIDB4NEYsIDB4RTksCiAKLTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0weDlELCAweDMxLCAweDRGLCAweEU5LAorCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCisJMHg5RCwgMHgzMSwgMHg0RiwgMHhFOSwKIAotMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLTB4OUUsIDB4MzksIDB4NEYsIDB4RTksCisJMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKKwkweDlFLCAweDM5LCAweDRGLCAweEU5LAogCi0weDJBLCAweDQzLCAweDRCLCAweEJGLAotMHgxQSwgMHg0MywgMHg1MywgMHhCRiwKKwkweDJBLCAweDQzLCAweDRCLCAweEJGLAorCTB4MUEsIDB4NDMsIDB4NTMsIDB4QkYsCiAKLTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0weDM1LCAweDMwLCAweDRGLCAweEU5LAorCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCisJMHgzNSwgMHgzMCwgMHg0RiwgMHhFOSwKIAotMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLTB4MzksIDB4MzgsIDB4NEYsIDB4RTksCisJMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKKwkweDM5LCAweDM4LCAweDRGLCAweEU5LAogCi0weDMxLCAweDUzLCAweDJGLCAweDlGLAotMHg4MCwgMHgzMSwgMHg1NywgMHhFOSwKKwkweDMxLCAweDUzLCAweDJGLCAweDlGLAorCTB4ODAsIDB4MzEsIDB4NTcsIDB4RTksCiAKLTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0weDgxLCAweDM5LCAweDU3LCAweEU5LAorCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCisJMHg4MSwgMHgzOSwgMHg1NywgMHhFOSwKIAotMHgzNywgMHg0OCwgMHg1MCwgMHhCRCwKLTB4OEEsIDB4MzYsIDB4MjAsIDB4RTksCisJMHgzNywgMHg0OCwgMHg1MCwgMHhCRCwKKwkweDhBLCAweDM2LCAweDIwLCAweEU5LAogCi0weDg2LCAweDc2LCAweDU3LCAweEU5LAotMHg4QiwgMHgzRSwgMHgyMCwgMHhFOSwKKwkweDg2LCAweDc2LCAweDU3LCAweEU5LAorCTB4OEIsIDB4M0UsIDB4MjAsIDB4RTksCiAKLTB4ODIsIDB4MzAsIDB4NTcsIDB4RTksCi0weDg3LCAweDc3LCAweDU3LCAweEU5LAorCTB4ODIsIDB4MzAsIDB4NTcsIDB4RTksCisJMHg4NywgMHg3NywgMHg1NywgMHhFOSwKIAotMHg4MywgMHgzOCwgMHg1NywgMHhFOSwKLTB4MzUsIDB4NDksIDB4NTEsIDB4QkQsCisJMHg4MywgMHgzOCwgMHg1NywgMHhFOSwKKwkweDM1LCAweDQ5LCAweDUxLCAweEJELAogCi0weDg0LCAweDMxLCAweDVFLCAweEU5LAotMHgzMCwgMHgxRiwgMHg1RiwgMHhFOSwKKwkweDg0LCAweDMxLCAweDVFLCAweEU5LAorCTB4MzAsIDB4MUYsIDB4NUYsIDB4RTksCiAKLTB4ODUsIDB4MzksIDB4NUUsIDB4RTksCi0weDU3LCAweDI1LCAweDIwLCAweEU5LAorCTB4ODUsIDB4MzksIDB4NUUsIDB4RTksCisJMHg1NywgMHgyNSwgMHgyMCwgMHhFOSwKIAotMHgyQiwgMHg0OCwgMHgyMCwgMHhFOSwKLTB4MUQsIDB4MzcsIDB4RTEsIDB4RUEsCisJMHgyQiwgMHg0OCwgMHgyMCwgMHhFOSwKKwkweDFELCAweDM3LCAweEUxLCAweEVBLAogCi0weDFFLCAweDM1LCAweEUxLCAweEVBLAotMHgwMCwgMHhFMCwKLTB4MjYsIDB4NzcsCisJMHgxRSwgMHgzNSwgMHhFMSwgMHhFQSwKKwkweDAwLCAweEUwLAorCTB4MjYsIDB4NzcsCiAKLTB4MjQsIDB4NDksIDB4MjAsIDB4RTksCi0weEE2LCAweEZGLCAweDIwLCAweEVBLAorCTB4MjQsIDB4NDksIDB4MjAsIDB4RTksCisJMHhBNiwgMHhGRiwgMHgyMCwgMHhFQSwKIAotMHgxNiwgMHgyNiwgMHgyMCwgMHhFOSwKLTB4NTcsIDB4MkUsIDB4QkYsIDB4RUEsCisJMHgxNiwgMHgyNiwgMHgyMCwgMHhFOSwKKwkweDU3LCAweDJFLCAweEJGLCAweEVBLAogCi0weDFDLCAweDQ2LCAweEEwLCAweEU4LAotMHgyMywgMHg0RSwgMHhBMCwgMHhFOCwKKwkweDFDLCAweDQ2LCAweEEwLCAweEU4LAorCTB4MjMsIDB4NEUsIDB4QTAsIDB4RTgsCiAKLTB4MkIsIDB4NTYsIDB4QTAsIDB4RTgsCi0weDFELCAweDQ3LCAweEEwLCAweEU4LAorCTB4MkIsIDB4NTYsIDB4QTAsIDB4RTgsCisJMHgxRCwgMHg0NywgMHhBMCwgMHhFOCwKIAotMHgyNCwgMHg0RiwgMHhBMCwgMHhFOCwKLTB4MkMsIDB4NTcsIDB4QTAsIDB4RTgsCisJMHgyNCwgMHg0RiwgMHhBMCwgMHhFOCwKKwkweDJDLCAweDU3LCAweEEwLCAweEU4LAogCi0weDFDLCAweDAwLAotMHgyMywgMHgwMCwKLTB4MkIsIDB4MDAsCi0weDAwLCAweEUwLAorCTB4MUMsIDB4MDAsCisJMHgyMywgMHgwMCwKKwkweDJCLCAweDAwLAorCTB4MDAsIDB4RTAsCiAKLTB4MUQsIDB4MDAsCi0weDI0LCAweDAwLAotMHgyQywgMHgwMCwKLTB4MDAsIDB4RTAsCisJMHgxRCwgMHgwMCwKKwkweDI0LCAweDAwLAorCTB4MkMsIDB4MDAsCisJMHgwMCwgMHhFMCwKIAotMHgxQywgMHg2NSwKLTB4MjMsIDB4NjUsCi0weDJCLCAweDY1LAotMHgwMCwgMHhFMCwKKwkweDFDLCAweDY1LAorCTB4MjMsIDB4NjUsCisJMHgyQiwgMHg2NSwKKwkweDAwLCAweEUwLAogCi0weDFELCAweDY1LAotMHgyNCwgMHg2NSwKLTB4MkMsIDB4NjUsCi0weDAwLCAweEUwLAorCTB4MUQsIDB4NjUsCisJMHgyNCwgMHg2NSwKKwkweDJDLCAweDY1LAorCTB4MDAsIDB4RTAsCiAKLTB4MUMsIDB4MjMsIDB4NjAsIDB4RUMsCi0weDM2LCAweEQ3LCAweDM2LCAweEFELAorCTB4MUMsIDB4MjMsIDB4NjAsIDB4RUMsCisJMHgzNiwgMHhENywgMHgzNiwgMHhBRCwKIAotMHgyQiwgMHg4MCwgMHg2MCwgMHhFQywKLTB4MUQsIDB4MjQsIDB4NjAsIDB4RUMsCisJMHgyQiwgMHg4MCwgMHg2MCwgMHhFQywKKwkweDFELCAweDI0LCAweDYwLCAweEVDLAogCi0weDNFLCAweEQ3LCAweDNFLCAweEFELAotMHgyQywgMHg4MCwgMHg2MCwgMHhFQywKKwkweDNFLCAweEQ3LCAweDNFLCAweEFELAorCTB4MkMsIDB4ODAsIDB4NjAsIDB4RUMsCiAKLTB4MUMsIDB4MkIsIDB4REUsIDB4RTgsCi0weDIzLCAweDgwLCAweERFLCAweEU4LAorCTB4MUMsIDB4MkIsIDB4REUsIDB4RTgsCisJMHgyMywgMHg4MCwgMHhERSwgMHhFOCwKIAotMHgzNiwgMHg4MCwgMHgzNiwgMHhCRCwKLTB4M0UsIDB4ODAsIDB4M0UsIDB4QkQsCisJMHgzNiwgMHg4MCwgMHgzNiwgMHhCRCwKKwkweDNFLCAweDgwLCAweDNFLCAweEJELAogCi0weDMzLCAweEQ3LCAweDFDLCAweEJELAotMHgzQiwgMHhENywgMHgyMywgMHhCRCwKKwkweDMzLCAweEQ3LCAweDFDLCAweEJELAorCTB4M0IsIDB4RDcsIDB4MjMsIDB4QkQsCiAKLTB4NDYsIDB4ODAsIDB4NDYsIDB4Q0YsCi0weDRGLCAweDgwLCAweDRGLCAweENGLAorCTB4NDYsIDB4ODAsIDB4NDYsIDB4Q0YsCisJMHg0RiwgMHg4MCwgMHg0RiwgMHhDRiwKIAotMHg1NiwgMHgzMywgMHg1NiwgMHhDRiwKLTB4NDcsIDB4M0IsIDB4NDcsIDB4Q0YsCisJMHg1NiwgMHgzMywgMHg1NiwgMHhDRiwKKwkweDQ3LCAweDNCLCAweDQ3LCAweENGLAogCi0weENELCAweEZGLCAweDIwLCAweEVBLAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweENELCAweEZGLCAweDIwLCAweEVBLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4NEUsIDB4MzMsIDB4NEUsIDB4Q0YsCi0weDU3LCAweDNCLCAweDU3LCAweENGLAorCTB4NEUsIDB4MzMsIDB4NEUsIDB4Q0YsCisJMHg1NywgMHgzQiwgMHg1NywgMHhDRiwKIAotMHg5NCwgMHhGRiwgMHgyMCwgMHhFQSwKLTB4NTcsIDB4QzAsIDB4QkYsIDB4RUEsCisJMHg5NCwgMHhGRiwgMHgyMCwgMHhFQSwKKwkweDU3LCAweEMwLCAweEJGLCAweEVBLAogCi0weDAwLCAweDgwLCAweEEwLCAweEU5LAotMHgwMCwgMHgwMCwgMHhEOCwgMHhFQywKKwkweDAwLCAweDgwLCAweEEwLCAweEU5LAorCTB4MDAsIDB4MDAsIDB4RDgsIDB4RUMsCiAKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHdhcnBfZzQwMF90Z3pmW10gPSB7CiAKLTB4MDAsIDB4ODgsIDB4OTgsIDB4RTksCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODgsIDB4OTgsIDB4RTksCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKLTB4MDAsIDB4MDAsIDB4RDgsIDB4RUMsCisJMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKKwkweDAwLCAweDAwLCAweEQ4LCAweEVDLAogCi0weEZGLCAweDgwLCAweEMwLCAweEU5LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweEZGLCAweDgwLCAweEMwLCAweEU5LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MjIsIDB4NDAsIDB4NDgsIDB4QkYsCi0weDJBLCAweDQwLCAweDUwLCAweEJGLAorCTB4MjIsIDB4NDAsIDB4NDgsIDB4QkYsCisJMHgyQSwgMHg0MCwgMHg1MCwgMHhCRiwKIAotMHgzMiwgMHg0MSwgMHg0OSwgMHhCRiwKLTB4M0EsIDB4NDEsIDB4NTEsIDB4QkYsCisJMHgzMiwgMHg0MSwgMHg0OSwgMHhCRiwKKwkweDNBLCAweDQxLCAweDUxLCAweEJGLAogCi0weEMzLCAweDZCLAotMHhDQiwgMHg2QiwKLTB4MDAsIDB4ODgsIDB4OTgsIDB4RTksCisJMHhDMywgMHg2QiwKKwkweENCLCAweDZCLAorCTB4MDAsIDB4ODgsIDB4OTgsIDB4RTksCiAKLTB4NzMsIDB4N0IsIDB4QzgsIDB4RUMsCi0weDk2LCAweEUyLAotMHg0MSwgMHgwNCwKKwkweDczLCAweDdCLCAweEM4LCAweEVDLAorCTB4OTYsIDB4RTIsCisJMHg0MSwgMHgwNCwKIAotMHg3QiwgMHg0MywgMHhBMCwgMHhFOCwKLTB4NzMsIDB4NEIsIDB4QTAsIDB4RTgsCisJMHg3QiwgMHg0MywgMHhBMCwgMHhFOCwKKwkweDczLCAweDRCLCAweEEwLCAweEU4LAogCi0weEFELCAweEVFLCAweDI5LCAweDlGLAotMHgwMCwgMHhFMCwKLTB4NDksIDB4MDQsCisJMHhBRCwgMHhFRSwgMHgyOSwgMHg5RiwKKwkweDAwLCAweEUwLAorCTB4NDksIDB4MDQsCiAKLTB4OTAsIDB4RTIsCi0weDUxLCAweDA0LAotMHgzMSwgMHg0NiwgMHhCMSwgMHhFOCwKKwkweDkwLCAweEUyLAorCTB4NTEsIDB4MDQsCisJMHgzMSwgMHg0NiwgMHhCMSwgMHhFOCwKIAotMHg0OSwgMHg0MSwgMHhDMCwgMHhFQywKLTB4MzksIDB4NTcsIDB4QjEsIDB4RTgsCisJMHg0OSwgMHg0MSwgMHhDMCwgMHhFQywKKwkweDM5LCAweDU3LCAweEIxLCAweEU4LAogCi0weDAwLCAweDA0LAotMHg0NiwgMHhFMiwKLTB4NzMsIDB4NTMsIDB4QTAsIDB4RTgsCisJMHgwMCwgMHgwNCwKKwkweDQ2LCAweEUyLAorCTB4NzMsIDB4NTMsIDB4QTAsIDB4RTgsCiAKLTB4NTEsIDB4NDEsIDB4QzAsIDB4RUMsCi0weDMxLCAweDAwLAotMHgzOSwgMHgwMCwKKwkweDUxLCAweDQxLCAweEMwLCAweEVDLAorCTB4MzEsIDB4MDAsCisJMHgzOSwgMHgwMCwKIAotMHg1RCwgMHg4MCwgMHgxNSwgMHhFQSwKLTB4MDgsIDB4MDQsCi0weDEwLCAweDA0LAorCTB4NUQsIDB4ODAsIDB4MTUsIDB4RUEsCisJMHgwOCwgMHgwNCwKKwkweDEwLCAweDA0LAogCi0weDUxLCAweDQ5LCAweEMwLCAweEVDLAotMHgyRiwgMHg0MSwgMHg2MCwgMHhFQSwKKwkweDUxLCAweDQ5LCAweEMwLCAweEVDLAorCTB4MkYsIDB4NDEsIDB4NjAsIDB4RUEsCiAKLTB4MzEsIDB4MjAsCi0weDM5LCAweDIwLAotMHgxRiwgMHg0MiwgMHhBMCwgMHhFOCwKKwkweDMxLCAweDIwLAorCTB4MzksIDB4MjAsCisJMHgxRiwgMHg0MiwgMHhBMCwgMHhFOCwKIAotMHgyQSwgMHg0MiwgMHg0QSwgMHhCRiwKLTB4MjcsIDB4NEEsIDB4QTAsIDB4RTgsCisJMHgyQSwgMHg0MiwgMHg0QSwgMHhCRiwKKwkweDI3LCAweDRBLCAweEEwLCAweEU4LAogCi0weDFBLCAweDQyLCAweDUyLCAweEJGLAotMHgxRSwgMHg0OSwgMHg2MCwgMHhFQSwKKwkweDFBLCAweDQyLCAweDUyLCAweEJGLAorCTB4MUUsIDB4NDksIDB4NjAsIDB4RUEsCiAKLTB4NzMsIDB4N0IsIDB4QzgsIDB4RUMsCi0weDI2LCAweDUxLCAweDYwLCAweEVBLAorCTB4NzMsIDB4N0IsIDB4QzgsIDB4RUMsCisJMHgyNiwgMHg1MSwgMHg2MCwgMHhFQSwKIAotMHgzMiwgMHg0MCwgMHg0OCwgMHhCRCwKLTB4MjIsIDB4NDAsIDB4NTAsIDB4QkQsCisJMHgzMiwgMHg0MCwgMHg0OCwgMHhCRCwKKwkweDIyLCAweDQwLCAweDUwLCAweEJELAogCi0weDEyLCAweDQxLCAweDQ5LCAweEJELAotMHgzQSwgMHg0MSwgMHg1MSwgMHhCRCwKKwkweDEyLCAweDQxLCAweDQ5LCAweEJELAorCTB4M0EsIDB4NDEsIDB4NTEsIDB4QkQsCiAKLTB4QkYsIDB4MkYsIDB4MjYsIDB4QkQsCi0weDAwLCAweEUwLAotMHg3QiwgMHg3MiwKKwkweEJGLCAweDJGLCAweDI2LCAweEJELAorCTB4MDAsIDB4RTAsCisJMHg3QiwgMHg3MiwKIAotMHgzMiwgMHgyMCwKLTB4MjIsIDB4MjAsCi0weDEyLCAweDIwLAotMHgzQSwgMHgyMCwKKwkweDMyLCAweDIwLAorCTB4MjIsIDB4MjAsCisJMHgxMiwgMHgyMCwKKwkweDNBLCAweDIwLAogCi0weDQ2LCAweDMxLCAweDQ2LCAweEJGLAotMHg0RSwgMHgzMSwgMHg0RSwgMHhCRiwKKwkweDQ2LCAweDMxLCAweDQ2LCAweEJGLAorCTB4NEUsIDB4MzEsIDB4NEUsIDB4QkYsCiAKLTB4QjMsIDB4RTIsIDB4MkQsIDB4OUYsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4QjMsIDB4RTIsIDB4MkQsIDB4OUYsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHg1NiwgMHgzMSwgMHg1NiwgMHhCRiwKLTB4NDcsIDB4MzksIDB4NDcsIDB4QkYsCisJMHg1NiwgMHgzMSwgMHg1NiwgMHhCRiwKKwkweDQ3LCAweDM5LCAweDQ3LCAweEJGLAogCi0weDRGLCAweDM5LCAweDRGLCAweEJGLAotMHg1NywgMHgzOSwgMHg1NywgMHhCRiwKKwkweDRGLCAweDM5LCAweDRGLCAweEJGLAorCTB4NTcsIDB4MzksIDB4NTcsIDB4QkYsCiAKLTB4NEYsIDB4ODAsIDB4MDcsIDB4RUEsCi0weDI0LCAweDQxLCAweDIwLCAweEU5LAorCTB4NEYsIDB4ODAsIDB4MDcsIDB4RUEsCisJMHgyNCwgMHg0MSwgMHgyMCwgMHhFOSwKIAotMHg0MiwgMHg3MywgMHhGOCwgMHhFQywKLTB4MDAsIDB4RTAsCi0weDJELCAweDczLAorCTB4NDIsIDB4NzMsIDB4RjgsIDB4RUMsCisJMHgwMCwgMHhFMCwKKwkweDJELCAweDczLAogCi0weDMzLCAweDcyLAotMHgwQywgMHhFMywKLTB4QTUsIDB4MkYsIDB4MUUsIDB4QkQsCisJMHgzMywgMHg3MiwKKwkweDBDLCAweEUzLAorCTB4QTUsIDB4MkYsIDB4MUUsIDB4QkQsCiAKLTB4NDMsIDB4NDMsIDB4MkQsIDB4REYsCi0weDRCLCAweDRCLCAweDJELCAweERGLAorCTB4NDMsIDB4NDMsIDB4MkQsIDB4REYsCisJMHg0QiwgMHg0QiwgMHgyRCwgMHhERiwKIAotMHhBRSwgMHgxRSwgMHgyNiwgMHhCRCwKLTB4NTgsIDB4RTMsCi0weDMzLCAweDY2LAorCTB4QUUsIDB4MUUsIDB4MjYsIDB4QkQsCisJMHg1OCwgMHhFMywKKwkweDMzLCAweDY2LAogCi0weDUzLCAweDUzLCAweDJELCAweERGLAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDUzLCAweDUzLCAweDJELCAweERGLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4QjgsIDB4MzgsIDB4MzMsIDB4QkYsCi0weDAwLCAweEUwLAotMHg1OSwgMHhFMywKKwkweEI4LCAweDM4LCAweDMzLCAweEJGLAorCTB4MDAsIDB4RTAsCisJMHg1OSwgMHhFMywKIAotMHgxRSwgMHgxMiwgMHg0MSwgMHhFOSwKLTB4MUEsIDB4MjIsIDB4NDEsIDB4RTksCisJMHgxRSwgMHgxMiwgMHg0MSwgMHhFOSwKKwkweDFBLCAweDIyLCAweDQxLCAweEU5LAogCi0weDJCLCAweDQwLCAweDNELCAweEU5LAotMHgzRiwgMHg0QiwgMHhBMCwgMHhFOCwKKwkweDJCLCAweDQwLCAweDNELCAweEU5LAorCTB4M0YsIDB4NEIsIDB4QTAsIDB4RTgsCiAKLTB4MkQsIDB4NzMsCi0weDMwLCAweDc2LAotMHgwNSwgMHg4MCwgMHgzRCwgMHhFQSwKKwkweDJELCAweDczLAorCTB4MzAsIDB4NzYsCisJMHgwNSwgMHg4MCwgMHgzRCwgMHhFQSwKIAotMHgzNywgMHg0MywgMHhBMCwgMHhFOCwKLTB4M0QsIDB4NTMsIDB4QTAsIDB4RTgsCisJMHgzNywgMHg0MywgMHhBMCwgMHhFOCwKKwkweDNELCAweDUzLCAweEEwLCAweEU4LAogCi0weDQ4LCAweDcwLCAweEY4LCAweEVDLAotMHgyQiwgMHg0OCwgMHgzQywgMHhFOSwKKwkweDQ4LCAweDcwLCAweEY4LCAweEVDLAorCTB4MkIsIDB4NDgsIDB4M0MsIDB4RTksCiAKLTB4MUYsIDB4MjcsIDB4QkMsIDB4RTgsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MUYsIDB4MjcsIDB4QkMsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDE1LCAweEMwLCAweDIwLCAweEU5LAotMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKKwkweDE1LCAweEMwLCAweDIwLCAweEU5LAorCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCiAKLTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0weDE1LCAweEMwLCAweDIwLCAweEU5LAorCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCisJMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKIAotMHgxOCwgMHgzQSwgMHg0MSwgMHhFOSwKLTB4MUQsIDB4MzIsIDB4NDEsIDB4RTksCisJMHgxOCwgMHgzQSwgMHg0MSwgMHhFOSwKKwkweDFELCAweDMyLCAweDQxLCAweEU5LAogCi0weDJBLCAweDQwLCAweDIwLCAweEU5LAotMHg1NiwgMHgzRCwgMHg1NiwgMHhERiwKKwkweDJBLCAweDQwLCAweDIwLCAweEU5LAorCTB4NTYsIDB4M0QsIDB4NTYsIDB4REYsCiAKLTB4NDYsIDB4MzcsIDB4NDYsIDB4REYsCi0weDRFLCAweDNGLCAweDRFLCAweERGLAorCTB4NDYsIDB4MzcsIDB4NDYsIDB4REYsCisJMHg0RSwgMHgzRiwgMHg0RSwgMHhERiwKIAotMHgxNiwgMHgzMCwgMHgyMCwgMHhFOSwKLTB4NEYsIDB4M0YsIDB4NEYsIDB4REYsCisJMHgxNiwgMHgzMCwgMHgyMCwgMHhFOSwKKwkweDRGLCAweDNGLCAweDRGLCAweERGLAogCi0weDMyLCAweDMyLCAweDJELCAweERGLAotMHgyMiwgMHgyMiwgMHgyRCwgMHhERiwKKwkweDMyLCAweDMyLCAweDJELCAweERGLAorCTB4MjIsIDB4MjIsIDB4MkQsIDB4REYsCiAKLTB4MTIsIDB4MTIsIDB4MkQsIDB4REYsCi0weDNBLCAweDNBLCAweDJELCAweERGLAorCTB4MTIsIDB4MTIsIDB4MkQsIDB4REYsCisJMHgzQSwgMHgzQSwgMHgyRCwgMHhERiwKIAotMHg0NywgMHgzNywgMHg0NywgMHhERiwKLTB4NTcsIDB4M0QsIDB4NTcsIDB4REYsCisJMHg0NywgMHgzNywgMHg0NywgMHhERiwKKwkweDU3LCAweDNELCAweDU3LCAweERGLAogCi0weDNELCAweENGLCAweDc0LCAweEMwLAotMHgzNywgMHhDRiwgMHg3NCwgMHhDNCwKKwkweDNELCAweENGLCAweDc0LCAweEMwLAorCTB4MzcsIDB4Q0YsIDB4NzQsIDB4QzQsCiAKLTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0weDM0LCAweDgwLCAweDIwLCAweEU5LAorCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCisJMHgzNCwgMHg4MCwgMHgyMCwgMHhFOSwKIAotMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDg4LCAweDczLCAweDVFLCAweEU5LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDg4LCAweDczLCAweDVFLCAweEU5LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MjcsIDB4Q0YsIDB4NzUsIDB4QzYsCi0weDNDLCAweDNELCAweDIwLCAweEU5LAorCTB4MjcsIDB4Q0YsIDB4NzUsIDB4QzYsCisJMHgzQywgMHgzRCwgMHgyMCwgMHhFOSwKIAotMHgwQSwgMHg0NCwgMHg0QywgMHhCMCwKLTB4MDIsIDB4NDQsIDB4NTQsIDB4QjAsCisJMHgwQSwgMHg0NCwgMHg0QywgMHhCMCwKKwkweDAyLCAweDQ0LCAweDU0LCAweEIwLAogCi0weDJBLCAweDQ0LCAweDRDLCAweEIyLAotMHgxQSwgMHg0NCwgMHg1NCwgMHhCMiwKKwkweDJBLCAweDQ0LCAweDRDLCAweEIyLAorCTB4MUEsIDB4NDQsIDB4NTQsIDB4QjIsCiAKLTB4MjAsIDB4ODAsIDB4M0EsIDB4RUEsCi0weDBBLCAweDIwLAotMHgwMiwgMHgyMCwKKwkweDIwLCAweDgwLCAweDNBLCAweEVBLAorCTB4MEEsIDB4MjAsCisJMHgwMiwgMHgyMCwKIAotMHgzRCwgMHhDRiwgMHg3NCwgMHhDMiwKLTB4MkEsIDB4MjAsCi0weDFBLCAweDIwLAorCTB4M0QsIDB4Q0YsIDB4NzQsIDB4QzIsCisJMHgyQSwgMHgyMCwKKwkweDFBLCAweDIwLAogCi0weDMwLCAweDUwLCAweDJFLCAweDlGLAotMHgzMiwgMHgzMSwgMHg1RiwgMHhFOSwKKwkweDMwLCAweDUwLCAweDJFLCAweDlGLAorCTB4MzIsIDB4MzEsIDB4NUYsIDB4RTksCiAKLTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0weDMzLCAweDM5LCAweDVGLCAweEU5LAorCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCisJMHgzMywgMHgzOSwgMHg1RiwgMHhFOSwKIAotMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLTB4MzEsIDB4MjcsIDB4MjAsIDB4RTksCisJMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKKwkweDMxLCAweDI3LCAweDIwLCAweEU5LAogCi0weDBBLCAweDQ0LCAweDRDLCAweEI0LAotMHgwMiwgMHg0NCwgMHg1NCwgMHhCNCwKKwkweDBBLCAweDQ0LCAweDRDLCAweEI0LAorCTB4MDIsIDB4NDQsIDB4NTQsIDB4QjQsCiAKLTB4MkEsIDB4NDUsIDB4NEQsIDB4QjYsCi0weDFBLCAweDQ1LCAweDU1LCAweEI2LAorCTB4MkEsIDB4NDUsIDB4NEQsIDB4QjYsCisJMHgxQSwgMHg0NSwgMHg1NSwgMHhCNiwKIAotMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLTB4MzgsIDB4M0QsIDB4MjAsIDB4RTksCisJMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKKwkweDM4LCAweDNELCAweDIwLCAweEU5LAogCi0weDBBLCAweDIwLAotMHgwMiwgMHgyMCwKLTB4MkEsIDB4MjAsCi0weDFBLCAweDIwLAorCTB4MEEsIDB4MjAsCisJMHgwMiwgMHgyMCwKKwkweDJBLCAweDIwLAorCTB4MUEsIDB4MjAsCiAKLTB4MEEsIDB4NDcsIDB4NEYsIDB4QkYsCi0weDAyLCAweDQ3LCAweDU3LCAweEJGLAorCTB4MEEsIDB4NDcsIDB4NEYsIDB4QkYsCisJMHgwMiwgMHg0NywgMHg1NywgMHhCRiwKIAotMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLTB4M0UsIDB4MzAsIDB4NEYsIDB4RTksCisJMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKKwkweDNFLCAweDMwLCAweDRGLCAweEU5LAogCi0weDM4LCAweDIxLCAweDJDLCAweDlGLAotMHgzRiwgMHgzOCwgMHg0RiwgMHhFOSwKKwkweDM4LCAweDIxLCAweDJDLCAweDlGLAorCTB4M0YsIDB4MzgsIDB4NEYsIDB4RTksCiAKLTB4MkEsIDB4NDYsIDB4NEUsIDB4QkYsCi0weDFBLCAweDQ2LCAweDU2LCAweEJGLAorCTB4MkEsIDB4NDYsIDB4NEUsIDB4QkYsCisJMHgxQSwgMHg0NiwgMHg1NiwgMHhCRiwKIAotMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLTB4M0EsIDB4MzEsIDB4NEYsIDB4RTksCisJMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKKwkweDNBLCAweDMxLCAweDRGLCAweEU5LAogCi0weDM5LCAweEU1LCAweDJDLCAweDlGLAotMHgzQiwgMHgzOSwgMHg0RiwgMHhFOSwKKwkweDM5LCAweEU1LCAweDJDLCAweDlGLAorCTB4M0IsIDB4MzksIDB4NEYsIDB4RTksCiAKLTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0weDM2LCAweDMwLCAweDRGLCAweEU5LAorCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCisJMHgzNiwgMHgzMCwgMHg0RiwgMHhFOSwKIAotMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLTB4MzcsIDB4MzgsIDB4NEYsIDB4RTksCisJMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKKwkweDM3LCAweDM4LCAweDRGLCAweEU5LAogCi0weDJBLCAweDQzLCAweDRCLCAweEJGLAotMHgxQSwgMHg0MywgMHg1MywgMHhCRiwKKwkweDJBLCAweDQzLCAweDRCLCAweEJGLAorCTB4MUEsIDB4NDMsIDB4NTMsIDB4QkYsCiAKLTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0weDM1LCAweDMxLCAweDRGLCAweEU5LAorCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCisJMHgzNSwgMHgzMSwgMHg0RiwgMHhFOSwKIAotMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLTB4MzksIDB4MzksIDB4NEYsIDB4RTksCisJMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKKwkweDM5LCAweDM5LCAweDRGLCAweEU5LAogCi0weDMxLCAweDUzLCAweDJGLCAweDlGLAotMHg4MCwgMHgzMSwgMHg1NywgMHhFOSwKKwkweDMxLCAweDUzLCAweDJGLCAweDlGLAorCTB4ODAsIDB4MzEsIDB4NTcsIDB4RTksCiAKLTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0weDgxLCAweDM5LCAweDU3LCAweEU5LAorCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCisJMHg4MSwgMHgzOSwgMHg1NywgMHhFOSwKIAotMHgzNywgMHg0OCwgMHg1MCwgMHhCRCwKLTB4OEEsIDB4MzYsIDB4MjAsIDB4RTksCisJMHgzNywgMHg0OCwgMHg1MCwgMHhCRCwKKwkweDhBLCAweDM2LCAweDIwLCAweEU5LAogCi0weDg2LCAweDc2LCAweDU3LCAweEU5LAotMHg4QiwgMHgzRSwgMHgyMCwgMHhFOSwKKwkweDg2LCAweDc2LCAweDU3LCAweEU5LAorCTB4OEIsIDB4M0UsIDB4MjAsIDB4RTksCiAKLTB4ODIsIDB4MzAsIDB4NTcsIDB4RTksCi0weDg3LCAweDc3LCAweDU3LCAweEU5LAorCTB4ODIsIDB4MzAsIDB4NTcsIDB4RTksCisJMHg4NywgMHg3NywgMHg1NywgMHhFOSwKIAotMHg4MywgMHgzOCwgMHg1NywgMHhFOSwKLTB4MzUsIDB4NDksIDB4NTEsIDB4QkQsCisJMHg4MywgMHgzOCwgMHg1NywgMHhFOSwKKwkweDM1LCAweDQ5LCAweDUxLCAweEJELAogCi0weDg0LCAweDMxLCAweDVFLCAweEU5LAotMHgzMCwgMHgxRiwgMHg1RiwgMHhFOSwKKwkweDg0LCAweDMxLCAweDVFLCAweEU5LAorCTB4MzAsIDB4MUYsIDB4NUYsIDB4RTksCiAKLTB4ODUsIDB4MzksIDB4NUUsIDB4RTksCi0weDU3LCAweDI1LCAweDIwLCAweEU5LAorCTB4ODUsIDB4MzksIDB4NUUsIDB4RTksCisJMHg1NywgMHgyNSwgMHgyMCwgMHhFOSwKIAotMHgyQiwgMHg0OCwgMHgyMCwgMHhFOSwKLTB4MUQsIDB4MzcsIDB4RTEsIDB4RUEsCisJMHgyQiwgMHg0OCwgMHgyMCwgMHhFOSwKKwkweDFELCAweDM3LCAweEUxLCAweEVBLAogCi0weDFFLCAweDM1LCAweEUxLCAweEVBLAotMHgwMCwgMHhFMCwKLTB4MjYsIDB4NzcsCisJMHgxRSwgMHgzNSwgMHhFMSwgMHhFQSwKKwkweDAwLCAweEUwLAorCTB4MjYsIDB4NzcsCiAKLTB4MjQsIDB4NDksIDB4MjAsIDB4RTksCi0weEFBLCAweEZGLCAweDIwLCAweEVBLAorCTB4MjQsIDB4NDksIDB4MjAsIDB4RTksCisJMHhBQSwgMHhGRiwgMHgyMCwgMHhFQSwKIAotMHgxNiwgMHgyNiwgMHgyMCwgMHhFOSwKLTB4NTcsIDB4MkUsIDB4QkYsIDB4RUEsCisJMHgxNiwgMHgyNiwgMHgyMCwgMHhFOSwKKwkweDU3LCAweDJFLCAweEJGLCAweEVBLAogCi0weDFDLCAweDQ2LCAweEEwLCAweEU4LAotMHgyMywgMHg0RSwgMHhBMCwgMHhFOCwKKwkweDFDLCAweDQ2LCAweEEwLCAweEU4LAorCTB4MjMsIDB4NEUsIDB4QTAsIDB4RTgsCiAKLTB4MkIsIDB4NTYsIDB4QTAsIDB4RTgsCi0weDFELCAweDQ3LCAweEEwLCAweEU4LAorCTB4MkIsIDB4NTYsIDB4QTAsIDB4RTgsCisJMHgxRCwgMHg0NywgMHhBMCwgMHhFOCwKIAotMHgyNCwgMHg0RiwgMHhBMCwgMHhFOCwKLTB4MkMsIDB4NTcsIDB4QTAsIDB4RTgsCisJMHgyNCwgMHg0RiwgMHhBMCwgMHhFOCwKKwkweDJDLCAweDU3LCAweEEwLCAweEU4LAogCi0weDFDLCAweDAwLAotMHgyMywgMHgwMCwKLTB4MkIsIDB4MDAsCi0weDAwLCAweEUwLAorCTB4MUMsIDB4MDAsCisJMHgyMywgMHgwMCwKKwkweDJCLCAweDAwLAorCTB4MDAsIDB4RTAsCiAKLTB4MUQsIDB4MDAsCi0weDI0LCAweDAwLAotMHgyQywgMHgwMCwKLTB4MDAsIDB4RTAsCisJMHgxRCwgMHgwMCwKKwkweDI0LCAweDAwLAorCTB4MkMsIDB4MDAsCisJMHgwMCwgMHhFMCwKIAotMHgxQywgMHg2NSwKLTB4MjMsIDB4NjUsCi0weDJCLCAweDY1LAotMHgwMCwgMHhFMCwKKwkweDFDLCAweDY1LAorCTB4MjMsIDB4NjUsCisJMHgyQiwgMHg2NSwKKwkweDAwLCAweEUwLAogCi0weDFELCAweDY1LAotMHgyNCwgMHg2NSwKLTB4MkMsIDB4NjUsCi0weDAwLCAweEUwLAorCTB4MUQsIDB4NjUsCisJMHgyNCwgMHg2NSwKKwkweDJDLCAweDY1LAorCTB4MDAsIDB4RTAsCiAKLTB4MUMsIDB4MjMsIDB4NjAsIDB4RUMsCi0weDM2LCAweEQ3LCAweDM2LCAweEFELAorCTB4MUMsIDB4MjMsIDB4NjAsIDB4RUMsCisJMHgzNiwgMHhENywgMHgzNiwgMHhBRCwKIAotMHgyQiwgMHg4MCwgMHg2MCwgMHhFQywKLTB4MUQsIDB4MjQsIDB4NjAsIDB4RUMsCisJMHgyQiwgMHg4MCwgMHg2MCwgMHhFQywKKwkweDFELCAweDI0LCAweDYwLCAweEVDLAogCi0weDNFLCAweEQ3LCAweDNFLCAweEFELAotMHgyQywgMHg4MCwgMHg2MCwgMHhFQywKKwkweDNFLCAweEQ3LCAweDNFLCAweEFELAorCTB4MkMsIDB4ODAsIDB4NjAsIDB4RUMsCiAKLTB4MUMsIDB4MkIsIDB4REUsIDB4RTgsCi0weDIzLCAweDgwLCAweERFLCAweEU4LAorCTB4MUMsIDB4MkIsIDB4REUsIDB4RTgsCisJMHgyMywgMHg4MCwgMHhERSwgMHhFOCwKIAotMHgzNiwgMHg4MCwgMHgzNiwgMHhCRCwKLTB4M0UsIDB4ODAsIDB4M0UsIDB4QkQsCisJMHgzNiwgMHg4MCwgMHgzNiwgMHhCRCwKKwkweDNFLCAweDgwLCAweDNFLCAweEJELAogCi0weDMzLCAweEQ3LCAweDFDLCAweEJELAotMHgzQiwgMHhENywgMHgyMywgMHhCRCwKKwkweDMzLCAweEQ3LCAweDFDLCAweEJELAorCTB4M0IsIDB4RDcsIDB4MjMsIDB4QkQsCiAKLTB4NDYsIDB4ODAsIDB4NDYsIDB4Q0YsCi0weDRGLCAweDgwLCAweDRGLCAweENGLAorCTB4NDYsIDB4ODAsIDB4NDYsIDB4Q0YsCisJMHg0RiwgMHg4MCwgMHg0RiwgMHhDRiwKIAotMHg1NiwgMHgzMywgMHg1NiwgMHhDRiwKLTB4NDcsIDB4M0IsIDB4NDcsIDB4Q0YsCisJMHg1NiwgMHgzMywgMHg1NiwgMHhDRiwKKwkweDQ3LCAweDNCLCAweDQ3LCAweENGLAogCi0weEQzLCAweEZGLCAweDIwLCAweEVBLAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweEQzLCAweEZGLCAweDIwLCAweEVBLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4NEUsIDB4MzMsIDB4NEUsIDB4Q0YsCi0weDU3LCAweDNCLCAweDU3LCAweENGLAorCTB4NEUsIDB4MzMsIDB4NEUsIDB4Q0YsCisJMHg1NywgMHgzQiwgMHg1NywgMHhDRiwKIAotMHg5OCwgMHhGRiwgMHgyMCwgMHhFQSwKLTB4NTcsIDB4QzAsIDB4QkYsIDB4RUEsCisJMHg5OCwgMHhGRiwgMHgyMCwgMHhFQSwKKwkweDU3LCAweEMwLCAweEJGLCAweEVBLAogCi0weDAwLCAweDgwLCAweEEwLCAweEU5LAotMHgwMCwgMHgwMCwgMHhEOCwgMHhFQywKKwkweDAwLCAweDgwLCAweEEwLCAweEU5LAorCTB4MDAsIDB4MDAsIDB4RDgsIDB4RUMsCiAKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHdhcnBfZzQwMF90Z3pzW10gPSB7CiAKLTB4MDAsIDB4ODgsIDB4OTgsIDB4RTksCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODgsIDB4OTgsIDB4RTksCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKLTB4MDAsIDB4MDAsIDB4RDgsIDB4RUMsCisJMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKKwkweDAwLCAweDAwLCAweEQ4LCAweEVDLAogCi0weEZGLCAweDgwLCAweEMwLCAweEU5LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweEZGLCAweDgwLCAweEMwLCAweEU5LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MjIsIDB4NDAsIDB4NDgsIDB4QkYsCi0weDJBLCAweDQwLCAweDUwLCAweEJGLAorCTB4MjIsIDB4NDAsIDB4NDgsIDB4QkYsCisJMHgyQSwgMHg0MCwgMHg1MCwgMHhCRiwKIAotMHgzMiwgMHg0MSwgMHg0OSwgMHhCRiwKLTB4M0EsIDB4NDEsIDB4NTEsIDB4QkYsCisJMHgzMiwgMHg0MSwgMHg0OSwgMHhCRiwKKwkweDNBLCAweDQxLCAweDUxLCAweEJGLAogCi0weEMzLCAweDZCLAotMHhDQiwgMHg2QiwKLTB4MDAsIDB4ODgsIDB4OTgsIDB4RTksCisJMHhDMywgMHg2QiwKKwkweENCLCAweDZCLAorCTB4MDAsIDB4ODgsIDB4OTgsIDB4RTksCiAKLTB4NzMsIDB4N0IsIDB4QzgsIDB4RUMsCi0weDk2LCAweEUyLAotMHg0MSwgMHgwNCwKKwkweDczLCAweDdCLCAweEM4LCAweEVDLAorCTB4OTYsIDB4RTIsCisJMHg0MSwgMHgwNCwKIAotMHg3QiwgMHg0MywgMHhBMCwgMHhFOCwKLTB4NzMsIDB4NEIsIDB4QTAsIDB4RTgsCisJMHg3QiwgMHg0MywgMHhBMCwgMHhFOCwKKwkweDczLCAweDRCLCAweEEwLCAweEU4LAogCi0weEFELCAweEVFLCAweDI5LCAweDlGLAotMHgwMCwgMHhFMCwKLTB4NDksIDB4MDQsCisJMHhBRCwgMHhFRSwgMHgyOSwgMHg5RiwKKwkweDAwLCAweEUwLAorCTB4NDksIDB4MDQsCiAKLTB4OTAsIDB4RTIsCi0weDUxLCAweDA0LAotMHgzMSwgMHg0NiwgMHhCMSwgMHhFOCwKKwkweDkwLCAweEUyLAorCTB4NTEsIDB4MDQsCisJMHgzMSwgMHg0NiwgMHhCMSwgMHhFOCwKIAotMHg0OSwgMHg0MSwgMHhDMCwgMHhFQywKLTB4MzksIDB4NTcsIDB4QjEsIDB4RTgsCisJMHg0OSwgMHg0MSwgMHhDMCwgMHhFQywKKwkweDM5LCAweDU3LCAweEIxLCAweEU4LAogCi0weDAwLCAweDA0LAotMHg0NiwgMHhFMiwKLTB4NzMsIDB4NTMsIDB4QTAsIDB4RTgsCisJMHgwMCwgMHgwNCwKKwkweDQ2LCAweEUyLAorCTB4NzMsIDB4NTMsIDB4QTAsIDB4RTgsCiAKLTB4NTEsIDB4NDEsIDB4QzAsIDB4RUMsCi0weDMxLCAweDAwLAotMHgzOSwgMHgwMCwKKwkweDUxLCAweDQxLCAweEMwLCAweEVDLAorCTB4MzEsIDB4MDAsCisJMHgzOSwgMHgwMCwKIAotMHg2NSwgMHg4MCwgMHgxNSwgMHhFQSwKLTB4MDgsIDB4MDQsCi0weDEwLCAweDA0LAorCTB4NjUsIDB4ODAsIDB4MTUsIDB4RUEsCisJMHgwOCwgMHgwNCwKKwkweDEwLCAweDA0LAogCi0weDUxLCAweDQ5LCAweEMwLCAweEVDLAotMHgyRiwgMHg0MSwgMHg2MCwgMHhFQSwKKwkweDUxLCAweDQ5LCAweEMwLCAweEVDLAorCTB4MkYsIDB4NDEsIDB4NjAsIDB4RUEsCiAKLTB4MzEsIDB4MjAsCi0weDM5LCAweDIwLAotMHgxRiwgMHg0MiwgMHhBMCwgMHhFOCwKKwkweDMxLCAweDIwLAorCTB4MzksIDB4MjAsCisJMHgxRiwgMHg0MiwgMHhBMCwgMHhFOCwKIAotMHgyQSwgMHg0MiwgMHg0QSwgMHhCRiwKLTB4MjcsIDB4NEEsIDB4QTAsIDB4RTgsCisJMHgyQSwgMHg0MiwgMHg0QSwgMHhCRiwKKwkweDI3LCAweDRBLCAweEEwLCAweEU4LAogCi0weDFBLCAweDQyLCAweDUyLCAweEJGLAotMHgxRSwgMHg0OSwgMHg2MCwgMHhFQSwKKwkweDFBLCAweDQyLCAweDUyLCAweEJGLAorCTB4MUUsIDB4NDksIDB4NjAsIDB4RUEsCiAKLTB4NzMsIDB4N0IsIDB4QzgsIDB4RUMsCi0weDI2LCAweDUxLCAweDYwLCAweEVBLAorCTB4NzMsIDB4N0IsIDB4QzgsIDB4RUMsCisJMHgyNiwgMHg1MSwgMHg2MCwgMHhFQSwKIAotMHgzMiwgMHg0MCwgMHg0OCwgMHhCRCwKLTB4MjIsIDB4NDAsIDB4NTAsIDB4QkQsCisJMHgzMiwgMHg0MCwgMHg0OCwgMHhCRCwKKwkweDIyLCAweDQwLCAweDUwLCAweEJELAogCi0weDEyLCAweDQxLCAweDQ5LCAweEJELAotMHgzQSwgMHg0MSwgMHg1MSwgMHhCRCwKKwkweDEyLCAweDQxLCAweDQ5LCAweEJELAorCTB4M0EsIDB4NDEsIDB4NTEsIDB4QkQsCiAKLTB4QkYsIDB4MkYsIDB4MjYsIDB4QkQsCi0weDAwLCAweEUwLAotMHg3QiwgMHg3MiwKKwkweEJGLCAweDJGLCAweDI2LCAweEJELAorCTB4MDAsIDB4RTAsCisJMHg3QiwgMHg3MiwKIAotMHgzMiwgMHgyMCwKLTB4MjIsIDB4MjAsCi0weDEyLCAweDIwLAotMHgzQSwgMHgyMCwKKwkweDMyLCAweDIwLAorCTB4MjIsIDB4MjAsCisJMHgxMiwgMHgyMCwKKwkweDNBLCAweDIwLAogCi0weDQ2LCAweDMxLCAweDQ2LCAweEJGLAotMHg0RSwgMHgzMSwgMHg0RSwgMHhCRiwKKwkweDQ2LCAweDMxLCAweDQ2LCAweEJGLAorCTB4NEUsIDB4MzEsIDB4NEUsIDB4QkYsCiAKLTB4QjMsIDB4RTIsIDB4MkQsIDB4OUYsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4QjMsIDB4RTIsIDB4MkQsIDB4OUYsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHg1NiwgMHgzMSwgMHg1NiwgMHhCRiwKLTB4NDcsIDB4MzksIDB4NDcsIDB4QkYsCisJMHg1NiwgMHgzMSwgMHg1NiwgMHhCRiwKKwkweDQ3LCAweDM5LCAweDQ3LCAweEJGLAogCi0weDRGLCAweDM5LCAweDRGLCAweEJGLAotMHg1NywgMHgzOSwgMHg1NywgMHhCRiwKKwkweDRGLCAweDM5LCAweDRGLCAweEJGLAorCTB4NTcsIDB4MzksIDB4NTcsIDB4QkYsCiAKLTB4NTcsIDB4ODAsIDB4MDcsIDB4RUEsCi0weDI0LCAweDQxLCAweDIwLCAweEU5LAorCTB4NTcsIDB4ODAsIDB4MDcsIDB4RUEsCisJMHgyNCwgMHg0MSwgMHgyMCwgMHhFOSwKIAotMHg0MiwgMHg3MywgMHhGOCwgMHhFQywKLTB4MDAsIDB4RTAsCi0weDJELCAweDczLAorCTB4NDIsIDB4NzMsIDB4RjgsIDB4RUMsCisJMHgwMCwgMHhFMCwKKwkweDJELCAweDczLAogCi0weDMzLCAweDcyLAotMHgwQywgMHhFMywKLTB4QTUsIDB4MkYsIDB4MUUsIDB4QkQsCisJMHgzMywgMHg3MiwKKwkweDBDLCAweEUzLAorCTB4QTUsIDB4MkYsIDB4MUUsIDB4QkQsCiAKLTB4NDMsIDB4NDMsIDB4MkQsIDB4REYsCi0weDRCLCAweDRCLCAweDJELCAweERGLAorCTB4NDMsIDB4NDMsIDB4MkQsIDB4REYsCisJMHg0QiwgMHg0QiwgMHgyRCwgMHhERiwKIAotMHhBRSwgMHgxRSwgMHgyNiwgMHhCRCwKLTB4NTgsIDB4RTMsCi0weDMzLCAweDY2LAorCTB4QUUsIDB4MUUsIDB4MjYsIDB4QkQsCisJMHg1OCwgMHhFMywKKwkweDMzLCAweDY2LAogCi0weDUzLCAweDUzLCAweDJELCAweERGLAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDUzLCAweDUzLCAweDJELCAweERGLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4QjgsIDB4MzgsIDB4MzMsIDB4QkYsCi0weDAwLCAweEUwLAotMHg1OSwgMHhFMywKKwkweEI4LCAweDM4LCAweDMzLCAweEJGLAorCTB4MDAsIDB4RTAsCisJMHg1OSwgMHhFMywKIAotMHgxRSwgMHgxMiwgMHg0MSwgMHhFOSwKLTB4MUEsIDB4MjIsIDB4NDEsIDB4RTksCisJMHgxRSwgMHgxMiwgMHg0MSwgMHhFOSwKKwkweDFBLCAweDIyLCAweDQxLCAweEU5LAogCi0weDJCLCAweDQwLCAweDNELCAweEU5LAotMHgzRiwgMHg0QiwgMHhBMCwgMHhFOCwKKwkweDJCLCAweDQwLCAweDNELCAweEU5LAorCTB4M0YsIDB4NEIsIDB4QTAsIDB4RTgsCiAKLTB4MkQsIDB4NzMsCi0weDMwLCAweDc2LAotMHgwNSwgMHg4MCwgMHgzRCwgMHhFQSwKKwkweDJELCAweDczLAorCTB4MzAsIDB4NzYsCisJMHgwNSwgMHg4MCwgMHgzRCwgMHhFQSwKIAotMHgzNywgMHg0MywgMHhBMCwgMHhFOCwKLTB4M0QsIDB4NTMsIDB4QTAsIDB4RTgsCisJMHgzNywgMHg0MywgMHhBMCwgMHhFOCwKKwkweDNELCAweDUzLCAweEEwLCAweEU4LAogCi0weDQ4LCAweDcwLCAweEY4LCAweEVDLAotMHgyQiwgMHg0OCwgMHgzQywgMHhFOSwKKwkweDQ4LCAweDcwLCAweEY4LCAweEVDLAorCTB4MkIsIDB4NDgsIDB4M0MsIDB4RTksCiAKLTB4MUYsIDB4MjcsIDB4QkMsIDB4RTgsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MUYsIDB4MjcsIDB4QkMsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDE1LCAweEMwLCAweDIwLCAweEU5LAotMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKKwkweDE1LCAweEMwLCAweDIwLCAweEU5LAorCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCiAKLTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0weDE1LCAweEMwLCAweDIwLCAweEU5LAorCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCisJMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKIAotMHgxOCwgMHgzQSwgMHg0MSwgMHhFOSwKLTB4MUQsIDB4MzIsIDB4NDEsIDB4RTksCisJMHgxOCwgMHgzQSwgMHg0MSwgMHhFOSwKKwkweDFELCAweDMyLCAweDQxLCAweEU5LAogCi0weDJBLCAweDQwLCAweDIwLCAweEU5LAotMHg1NiwgMHgzRCwgMHg1NiwgMHhERiwKKwkweDJBLCAweDQwLCAweDIwLCAweEU5LAorCTB4NTYsIDB4M0QsIDB4NTYsIDB4REYsCiAKLTB4NDYsIDB4MzcsIDB4NDYsIDB4REYsCi0weDRFLCAweDNGLCAweDRFLCAweERGLAorCTB4NDYsIDB4MzcsIDB4NDYsIDB4REYsCisJMHg0RSwgMHgzRiwgMHg0RSwgMHhERiwKIAotMHgxNiwgMHgzMCwgMHgyMCwgMHhFOSwKLTB4NEYsIDB4M0YsIDB4NEYsIDB4REYsCisJMHgxNiwgMHgzMCwgMHgyMCwgMHhFOSwKKwkweDRGLCAweDNGLCAweDRGLCAweERGLAogCi0weDQ3LCAweDM3LCAweDQ3LCAweERGLAotMHg1NywgMHgzRCwgMHg1NywgMHhERiwKKwkweDQ3LCAweDM3LCAweDQ3LCAweERGLAorCTB4NTcsIDB4M0QsIDB4NTcsIDB4REYsCiAKLTB4MzIsIDB4MzIsIDB4MkQsIDB4REYsCi0weDIyLCAweDIyLCAweDJELCAweERGLAorCTB4MzIsIDB4MzIsIDB4MkQsIDB4REYsCisJMHgyMiwgMHgyMiwgMHgyRCwgMHhERiwKIAotMHgxMiwgMHgxMiwgMHgyRCwgMHhERiwKLTB4M0EsIDB4M0EsIDB4MkQsIDB4REYsCisJMHgxMiwgMHgxMiwgMHgyRCwgMHhERiwKKwkweDNBLCAweDNBLCAweDJELCAweERGLAogCi0weDI3LCAweENGLCAweDc0LCAweEMyLAotMHgzNywgMHhDRiwgMHg3NCwgMHhDNCwKKwkweDI3LCAweENGLCAweDc0LCAweEMyLAorCTB4MzcsIDB4Q0YsIDB4NzQsIDB4QzQsCiAKLTB4MEEsIDB4NDQsIDB4NEMsIDB4QjAsCi0weDAyLCAweDQ0LCAweDU0LCAweEIwLAorCTB4MEEsIDB4NDQsIDB4NEMsIDB4QjAsCisJMHgwMiwgMHg0NCwgMHg1NCwgMHhCMCwKIAotMHgzRCwgMHhDRiwgMHg3NCwgMHhDMCwKLTB4MzQsIDB4MzcsIDB4MjAsIDB4RTksCisJMHgzRCwgMHhDRiwgMHg3NCwgMHhDMCwKKwkweDM0LCAweDM3LCAweDIwLCAweEU5LAogCi0weDMxLCAweDUzLCAweDJGLCAweDlGLAotMHgzOCwgMHgyNywgMHgyMCwgMHhFOSwKKwkweDMxLCAweDUzLCAweDJGLCAweDlGLAorCTB4MzgsIDB4MjcsIDB4MjAsIDB4RTksCiAKLTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0weDNDLCAweDNELCAweDIwLCAweEU5LAorCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCisJMHgzQywgMHgzRCwgMHgyMCwgMHhFOSwKIAotMHgyQSwgMHg0NCwgMHg0QywgMHhCMiwKLTB4MUEsIDB4NDQsIDB4NTQsIDB4QjIsCisJMHgyQSwgMHg0NCwgMHg0QywgMHhCMiwKKwkweDFBLCAweDQ0LCAweDU0LCAweEIyLAogCi0weDI5LCAweDgwLCAweDNBLCAweEVBLAotMHgwQSwgMHgyMCwKLTB4MDIsIDB4MjAsCisJMHgyOSwgMHg4MCwgMHgzQSwgMHhFQSwKKwkweDBBLCAweDIwLAorCTB4MDIsIDB4MjAsCiAKLTB4MjcsIDB4Q0YsIDB4NzUsIDB4QzAsCi0weDJBLCAweDIwLAotMHgxQSwgMHgyMCwKKwkweDI3LCAweENGLCAweDc1LCAweEMwLAorCTB4MkEsIDB4MjAsCisJMHgxQSwgMHgyMCwKIAotMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLTB4MzIsIDB4MzEsIDB4NUYsIDB4RTksCisJMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKKwkweDMyLCAweDMxLCAweDVGLCAweEU5LAogCi0weDM4LCAweDIxLCAweDJDLCAweDlGLAotMHgzMywgMHgzOSwgMHg1RiwgMHhFOSwKKwkweDM4LCAweDIxLCAweDJDLCAweDlGLAorCTB4MzMsIDB4MzksIDB4NUYsIDB4RTksCiAKLTB4M0QsIDB4Q0YsIDB4NzUsIDB4QzIsCi0weDM3LCAweENGLCAweDc1LCAweEM0LAorCTB4M0QsIDB4Q0YsIDB4NzUsIDB4QzIsCisJMHgzNywgMHhDRiwgMHg3NSwgMHhDNCwKIAotMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLTB4QTYsIDB4MjcsIDB4MjAsIDB4RTksCisJMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKKwkweEE2LCAweDI3LCAweDIwLCAweEU5LAogCi0weDM5LCAweEU1LCAweDJDLCAweDlGLAotMHhBMywgMHgzRCwgMHgyMCwgMHhFOSwKKwkweDM5LCAweEU1LCAweDJDLCAweDlGLAorCTB4QTMsIDB4M0QsIDB4MjAsIDB4RTksCiAKLTB4MkEsIDB4NDQsIDB4NEMsIDB4QjQsCi0weDFBLCAweDQ0LCAweDU0LCAweEI0LAorCTB4MkEsIDB4NDQsIDB4NEMsIDB4QjQsCisJMHgxQSwgMHg0NCwgMHg1NCwgMHhCNCwKIAotMHgwQSwgMHg0NSwgMHg0RCwgMHhCMCwKLTB4MDIsIDB4NDUsIDB4NTUsIDB4QjAsCisJMHgwQSwgMHg0NSwgMHg0RCwgMHhCMCwKKwkweDAyLCAweDQ1LCAweDU1LCAweEIwLAogCi0weDg4LCAweDczLCAweDVFLCAweEU5LAotMHgyQSwgMHgyMCwKLTB4MUEsIDB4MjAsCisJMHg4OCwgMHg3MywgMHg1RSwgMHhFOSwKKwkweDJBLCAweDIwLAorCTB4MUEsIDB4MjAsCiAKLTB4QTAsIDB4MzcsIDB4MjAsIDB4RTksCi0weDBBLCAweDIwLAotMHgwMiwgMHgyMCwKKwkweEEwLCAweDM3LCAweDIwLCAweEU5LAorCTB4MEEsIDB4MjAsCisJMHgwMiwgMHgyMCwKIAotMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLTB4M0UsIDB4MzAsIDB4NEYsIDB4RTksCisJMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKKwkweDNFLCAweDMwLCAweDRGLCAweEU5LAogCi0weDM5LCAweEU1LCAweDJDLCAweDlGLAotMHgzRiwgMHgzOCwgMHg0RiwgMHhFOSwKKwkweDM5LCAweEU1LCAweDJDLCAweDlGLAorCTB4M0YsIDB4MzgsIDB4NEYsIDB4RTksCiAKLTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0weDNBLCAweDMxLCAweDRGLCAweEU5LAorCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCisJMHgzQSwgMHgzMSwgMHg0RiwgMHhFOSwKIAotMHgyQSwgMHg0NSwgMHg0RCwgMHhCMiwKLTB4MUEsIDB4NDUsIDB4NTUsIDB4QjIsCisJMHgyQSwgMHg0NSwgMHg0RCwgMHhCMiwKKwkweDFBLCAweDQ1LCAweDU1LCAweEIyLAogCi0weDBBLCAweDQ1LCAweDRELCAweEI0LAotMHgwMiwgMHg0NSwgMHg1NSwgMHhCNCwKKwkweDBBLCAweDQ1LCAweDRELCAweEI0LAorCTB4MDIsIDB4NDUsIDB4NTUsIDB4QjQsCiAKLTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0weDNCLCAweDM5LCAweDRGLCAweEU5LAorCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCisJMHgzQiwgMHgzOSwgMHg0RiwgMHhFOSwKIAotMHgwQSwgMHgyMCwKLTB4MDIsIDB4MjAsCi0weDJBLCAweDIwLAotMHgxQSwgMHgyMCwKKwkweDBBLCAweDIwLAorCTB4MDIsIDB4MjAsCisJMHgyQSwgMHgyMCwKKwkweDFBLCAweDIwLAogCi0weDJBLCAweDQ2LCAweDRFLCAweEJGLAotMHgxQSwgMHg0NiwgMHg1NiwgMHhCRiwKKwkweDJBLCAweDQ2LCAweDRFLCAweEJGLAorCTB4MUEsIDB4NDYsIDB4NTYsIDB4QkYsCiAKLTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0weDM2LCAweDMxLCAweDRGLCAweEU5LAorCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCisJMHgzNiwgMHgzMSwgMHg0RiwgMHhFOSwKIAotMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLTB4MzcsIDB4MzksIDB4NEYsIDB4RTksCisJMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKKwkweDM3LCAweDM5LCAweDRGLCAweEU5LAogCi0weDMwLCAweDUwLCAweDJFLCAweDlGLAotMHhBNywgMHgzMCwgMHg0RiwgMHhFOSwKKwkweDMwLCAweDUwLCAweDJFLCAweDlGLAorCTB4QTcsIDB4MzAsIDB4NEYsIDB4RTksCiAKLTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0weEE4LCAweDM4LCAweDRGLCAweEU5LAorCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCisJMHhBOCwgMHgzOCwgMHg0RiwgMHhFOSwKIAotMHgwQSwgMHg0NywgMHg0RiwgMHhCRiwKLTB4MDIsIDB4NDcsIDB4NTcsIDB4QkYsCisJMHgwQSwgMHg0NywgMHg0RiwgMHhCRiwKKwkweDAyLCAweDQ3LCAweDU3LCAweEJGLAogCi0weDMxLCAweDUzLCAweDJGLCAweDlGLAotMHhBNCwgMHgzMSwgMHg0RiwgMHhFOSwKKwkweDMxLCAweDUzLCAweDJGLCAweDlGLAorCTB4QTQsIDB4MzEsIDB4NEYsIDB4RTksCiAKLTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0weEE1LCAweDM5LCAweDRGLCAweEU5LAorCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCisJMHhBNSwgMHgzOSwgMHg0RiwgMHhFOSwKIAotMHgyQSwgMHg0MywgMHg0QiwgMHhCRiwKLTB4MUEsIDB4NDMsIDB4NTMsIDB4QkYsCisJMHgyQSwgMHg0MywgMHg0QiwgMHhCRiwKKwkweDFBLCAweDQzLCAweDUzLCAweEJGLAogCi0weDMwLCAweDUwLCAweDJFLCAweDlGLAotMHhBMSwgMHgzMCwgMHg0RiwgMHhFOSwKKwkweDMwLCAweDUwLCAweDJFLCAweDlGLAorCTB4QTEsIDB4MzAsIDB4NEYsIDB4RTksCiAKLTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0weEEyLCAweDM4LCAweDRGLCAweEU5LAorCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCisJMHhBMiwgMHgzOCwgMHg0RiwgMHhFOSwKIAotMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLTB4ODAsIDB4MzEsIDB4NTcsIDB4RTksCisJMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKKwkweDgwLCAweDMxLCAweDU3LCAweEU5LAogCi0weDM5LCAweEU1LCAweDJDLCAweDlGLAotMHg4MSwgMHgzOSwgMHg1NywgMHhFOSwKKwkweDM5LCAweEU1LCAweDJDLCAweDlGLAorCTB4ODEsIDB4MzksIDB4NTcsIDB4RTksCiAKLTB4MzcsIDB4NDgsIDB4NTAsIDB4QkQsCi0weDhBLCAweDM2LCAweDIwLCAweEU5LAorCTB4MzcsIDB4NDgsIDB4NTAsIDB4QkQsCisJMHg4QSwgMHgzNiwgMHgyMCwgMHhFOSwKIAotMHg4NiwgMHg3NiwgMHg1NywgMHhFOSwKLTB4OEIsIDB4M0UsIDB4MjAsIDB4RTksCisJMHg4NiwgMHg3NiwgMHg1NywgMHhFOSwKKwkweDhCLCAweDNFLCAweDIwLCAweEU5LAogCi0weDgyLCAweDMwLCAweDU3LCAweEU5LAotMHg4NywgMHg3NywgMHg1NywgMHhFOSwKKwkweDgyLCAweDMwLCAweDU3LCAweEU5LAorCTB4ODcsIDB4NzcsIDB4NTcsIDB4RTksCiAKLTB4ODMsIDB4MzgsIDB4NTcsIDB4RTksCi0weDM1LCAweDQ5LCAweDUxLCAweEJELAorCTB4ODMsIDB4MzgsIDB4NTcsIDB4RTksCisJMHgzNSwgMHg0OSwgMHg1MSwgMHhCRCwKIAotMHg4NCwgMHgzMSwgMHg1RSwgMHhFOSwKLTB4MzAsIDB4MUYsIDB4NUYsIDB4RTksCisJMHg4NCwgMHgzMSwgMHg1RSwgMHhFOSwKKwkweDMwLCAweDFGLCAweDVGLCAweEU5LAogCi0weDg1LCAweDM5LCAweDVFLCAweEU5LAotMHg1NywgMHgyNSwgMHgyMCwgMHhFOSwKKwkweDg1LCAweDM5LCAweDVFLCAweEU5LAorCTB4NTcsIDB4MjUsIDB4MjAsIDB4RTksCiAKLTB4MkIsIDB4NDgsIDB4MjAsIDB4RTksCi0weDFELCAweDM3LCAweEUxLCAweEVBLAorCTB4MkIsIDB4NDgsIDB4MjAsIDB4RTksCisJMHgxRCwgMHgzNywgMHhFMSwgMHhFQSwKIAotMHgxRSwgMHgzNSwgMHhFMSwgMHhFQSwKLTB4MDAsIDB4RTAsCi0weDI2LCAweDc3LAorCTB4MUUsIDB4MzUsIDB4RTEsIDB4RUEsCisJMHgwMCwgMHhFMCwKKwkweDI2LCAweDc3LAogCi0weDI0LCAweDQ5LCAweDIwLCAweEU5LAotMHhBMiwgMHhGRiwgMHgyMCwgMHhFQSwKKwkweDI0LCAweDQ5LCAweDIwLCAweEU5LAorCTB4QTIsIDB4RkYsIDB4MjAsIDB4RUEsCiAKLTB4MTYsIDB4MjYsIDB4MjAsIDB4RTksCi0weDU3LCAweDJFLCAweEJGLCAweEVBLAorCTB4MTYsIDB4MjYsIDB4MjAsIDB4RTksCisJMHg1NywgMHgyRSwgMHhCRiwgMHhFQSwKIAotMHgxQywgMHg0NiwgMHhBMCwgMHhFOCwKLTB4MjMsIDB4NEUsIDB4QTAsIDB4RTgsCisJMHgxQywgMHg0NiwgMHhBMCwgMHhFOCwKKwkweDIzLCAweDRFLCAweEEwLCAweEU4LAogCi0weDJCLCAweDU2LCAweEEwLCAweEU4LAotMHgxRCwgMHg0NywgMHhBMCwgMHhFOCwKKwkweDJCLCAweDU2LCAweEEwLCAweEU4LAorCTB4MUQsIDB4NDcsIDB4QTAsIDB4RTgsCiAKLTB4MjQsIDB4NEYsIDB4QTAsIDB4RTgsCi0weDJDLCAweDU3LCAweEEwLCAweEU4LAorCTB4MjQsIDB4NEYsIDB4QTAsIDB4RTgsCisJMHgyQywgMHg1NywgMHhBMCwgMHhFOCwKIAotMHgxQywgMHgwMCwKLTB4MjMsIDB4MDAsCi0weDJCLCAweDAwLAotMHgwMCwgMHhFMCwKKwkweDFDLCAweDAwLAorCTB4MjMsIDB4MDAsCisJMHgyQiwgMHgwMCwKKwkweDAwLCAweEUwLAogCi0weDFELCAweDAwLAotMHgyNCwgMHgwMCwKLTB4MkMsIDB4MDAsCi0weDAwLCAweEUwLAorCTB4MUQsIDB4MDAsCisJMHgyNCwgMHgwMCwKKwkweDJDLCAweDAwLAorCTB4MDAsIDB4RTAsCiAKLTB4MUMsIDB4NjUsCi0weDIzLCAweDY1LAotMHgyQiwgMHg2NSwKLTB4MDAsIDB4RTAsCisJMHgxQywgMHg2NSwKKwkweDIzLCAweDY1LAorCTB4MkIsIDB4NjUsCisJMHgwMCwgMHhFMCwKIAotMHgxRCwgMHg2NSwKLTB4MjQsIDB4NjUsCi0weDJDLCAweDY1LAotMHgwMCwgMHhFMCwKKwkweDFELCAweDY1LAorCTB4MjQsIDB4NjUsCisJMHgyQywgMHg2NSwKKwkweDAwLCAweEUwLAogCi0weDFDLCAweDIzLCAweDYwLCAweEVDLAotMHgzNiwgMHhENywgMHgzNiwgMHhBRCwKKwkweDFDLCAweDIzLCAweDYwLCAweEVDLAorCTB4MzYsIDB4RDcsIDB4MzYsIDB4QUQsCiAKLTB4MkIsIDB4ODAsIDB4NjAsIDB4RUMsCi0weDFELCAweDI0LCAweDYwLCAweEVDLAorCTB4MkIsIDB4ODAsIDB4NjAsIDB4RUMsCisJMHgxRCwgMHgyNCwgMHg2MCwgMHhFQywKIAotMHgzRSwgMHhENywgMHgzRSwgMHhBRCwKLTB4MkMsIDB4ODAsIDB4NjAsIDB4RUMsCisJMHgzRSwgMHhENywgMHgzRSwgMHhBRCwKKwkweDJDLCAweDgwLCAweDYwLCAweEVDLAogCi0weDFDLCAweDJCLCAweERFLCAweEU4LAotMHgyMywgMHg4MCwgMHhERSwgMHhFOCwKKwkweDFDLCAweDJCLCAweERFLCAweEU4LAorCTB4MjMsIDB4ODAsIDB4REUsIDB4RTgsCiAKLTB4MzYsIDB4ODAsIDB4MzYsIDB4QkQsCi0weDNFLCAweDgwLCAweDNFLCAweEJELAorCTB4MzYsIDB4ODAsIDB4MzYsIDB4QkQsCisJMHgzRSwgMHg4MCwgMHgzRSwgMHhCRCwKIAotMHgzMywgMHhENywgMHgxQywgMHhCRCwKLTB4M0IsIDB4RDcsIDB4MjMsIDB4QkQsCisJMHgzMywgMHhENywgMHgxQywgMHhCRCwKKwkweDNCLCAweEQ3LCAweDIzLCAweEJELAogCi0weDQ2LCAweDgwLCAweDQ2LCAweENGLAotMHg0RiwgMHg4MCwgMHg0RiwgMHhDRiwKKwkweDQ2LCAweDgwLCAweDQ2LCAweENGLAorCTB4NEYsIDB4ODAsIDB4NEYsIDB4Q0YsCiAKLTB4NTYsIDB4MzMsIDB4NTYsIDB4Q0YsCi0weDQ3LCAweDNCLCAweDQ3LCAweENGLAorCTB4NTYsIDB4MzMsIDB4NTYsIDB4Q0YsCisJMHg0NywgMHgzQiwgMHg0NywgMHhDRiwKIAotMHhDQSwgMHhGRiwgMHgyMCwgMHhFQSwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHhDQSwgMHhGRiwgMHgyMCwgMHhFQSwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDRFLCAweDMzLCAweDRFLCAweENGLAotMHg1NywgMHgzQiwgMHg1NywgMHhDRiwKKwkweDRFLCAweDMzLCAweDRFLCAweENGLAorCTB4NTcsIDB4M0IsIDB4NTcsIDB4Q0YsCiAKLTB4OTAsIDB4RkYsIDB4MjAsIDB4RUEsCi0weDU3LCAweEMwLCAweEJGLCAweEVBLAorCTB4OTAsIDB4RkYsIDB4MjAsIDB4RUEsCisJMHg1NywgMHhDMCwgMHhCRiwgMHhFQSwKIAotMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKLTB4MDAsIDB4MDAsIDB4RDgsIDB4RUMsCisJMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKKwkweDAwLCAweDAwLCAweEQ4LCAweEVDLAogCiB9OwogCiBzdGF0aWMgdW5zaWduZWQgY2hhciB3YXJwX2c0MDBfdGd6c2FbXSA9IHsKIAotMHgwMCwgMHg4OCwgMHg5OCwgMHhFOSwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4OCwgMHg5OCwgMHhFOSwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweEEwLCAweEU5LAotMHgwMCwgMHgwMCwgMHhEOCwgMHhFQywKKwkweDAwLCAweDgwLCAweEEwLCAweEU5LAorCTB4MDAsIDB4MDAsIDB4RDgsIDB4RUMsCiAKLTB4RkYsIDB4ODAsIDB4QzAsIDB4RTksCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4RkYsIDB4ODAsIDB4QzAsIDB4RTksCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgyMiwgMHg0MCwgMHg0OCwgMHhCRiwKLTB4MkEsIDB4NDAsIDB4NTAsIDB4QkYsCisJMHgyMiwgMHg0MCwgMHg0OCwgMHhCRiwKKwkweDJBLCAweDQwLCAweDUwLCAweEJGLAogCi0weDMyLCAweDQxLCAweDQ5LCAweEJGLAotMHgzQSwgMHg0MSwgMHg1MSwgMHhCRiwKKwkweDMyLCAweDQxLCAweDQ5LCAweEJGLAorCTB4M0EsIDB4NDEsIDB4NTEsIDB4QkYsCiAKLTB4QzMsIDB4NkIsCi0weENCLCAweDZCLAotMHgwMCwgMHg4OCwgMHg5OCwgMHhFOSwKKwkweEMzLCAweDZCLAorCTB4Q0IsIDB4NkIsCisJMHgwMCwgMHg4OCwgMHg5OCwgMHhFOSwKIAotMHg3MywgMHg3QiwgMHhDOCwgMHhFQywKLTB4OTYsIDB4RTIsCi0weDQxLCAweDA0LAorCTB4NzMsIDB4N0IsIDB4QzgsIDB4RUMsCisJMHg5NiwgMHhFMiwKKwkweDQxLCAweDA0LAogCi0weDdCLCAweDQzLCAweEEwLCAweEU4LAotMHg3MywgMHg0QiwgMHhBMCwgMHhFOCwKKwkweDdCLCAweDQzLCAweEEwLCAweEU4LAorCTB4NzMsIDB4NEIsIDB4QTAsIDB4RTgsCiAKLTB4QUQsIDB4RUUsIDB4MjksIDB4OUYsCi0weDAwLCAweEUwLAotMHg0OSwgMHgwNCwKKwkweEFELCAweEVFLCAweDI5LCAweDlGLAorCTB4MDAsIDB4RTAsCisJMHg0OSwgMHgwNCwKIAotMHg5MCwgMHhFMiwKLTB4NTEsIDB4MDQsCi0weDMxLCAweDQ2LCAweEIxLCAweEU4LAorCTB4OTAsIDB4RTIsCisJMHg1MSwgMHgwNCwKKwkweDMxLCAweDQ2LCAweEIxLCAweEU4LAogCi0weDQ5LCAweDQxLCAweEMwLCAweEVDLAotMHgzOSwgMHg1NywgMHhCMSwgMHhFOCwKKwkweDQ5LCAweDQxLCAweEMwLCAweEVDLAorCTB4MzksIDB4NTcsIDB4QjEsIDB4RTgsCiAKLTB4MDAsIDB4MDQsCi0weDQ2LCAweEUyLAotMHg3MywgMHg1MywgMHhBMCwgMHhFOCwKKwkweDAwLCAweDA0LAorCTB4NDYsIDB4RTIsCisJMHg3MywgMHg1MywgMHhBMCwgMHhFOCwKIAotMHg1MSwgMHg0MSwgMHhDMCwgMHhFQywKLTB4MzEsIDB4MDAsCi0weDM5LCAweDAwLAorCTB4NTEsIDB4NDEsIDB4QzAsIDB4RUMsCisJMHgzMSwgMHgwMCwKKwkweDM5LCAweDAwLAogCi0weDZBLCAweDgwLCAweDE1LCAweEVBLAotMHgwOCwgMHgwNCwKLTB4MTAsIDB4MDQsCisJMHg2QSwgMHg4MCwgMHgxNSwgMHhFQSwKKwkweDA4LCAweDA0LAorCTB4MTAsIDB4MDQsCiAKLTB4NTEsIDB4NDksIDB4QzAsIDB4RUMsCi0weDJGLCAweDQxLCAweDYwLCAweEVBLAorCTB4NTEsIDB4NDksIDB4QzAsIDB4RUMsCisJMHgyRiwgMHg0MSwgMHg2MCwgMHhFQSwKIAotMHgzMSwgMHgyMCwKLTB4MzksIDB4MjAsCi0weDFGLCAweDQyLCAweEEwLCAweEU4LAorCTB4MzEsIDB4MjAsCisJMHgzOSwgMHgyMCwKKwkweDFGLCAweDQyLCAweEEwLCAweEU4LAogCi0weDJBLCAweDQyLCAweDRBLCAweEJGLAotMHgyNywgMHg0QSwgMHhBMCwgMHhFOCwKKwkweDJBLCAweDQyLCAweDRBLCAweEJGLAorCTB4MjcsIDB4NEEsIDB4QTAsIDB4RTgsCiAKLTB4MUEsIDB4NDIsIDB4NTIsIDB4QkYsCi0weDFFLCAweDQ5LCAweDYwLCAweEVBLAorCTB4MUEsIDB4NDIsIDB4NTIsIDB4QkYsCisJMHgxRSwgMHg0OSwgMHg2MCwgMHhFQSwKIAotMHg3MywgMHg3QiwgMHhDOCwgMHhFQywKLTB4MjYsIDB4NTEsIDB4NjAsIDB4RUEsCisJMHg3MywgMHg3QiwgMHhDOCwgMHhFQywKKwkweDI2LCAweDUxLCAweDYwLCAweEVBLAogCi0weDMyLCAweDQwLCAweDQ4LCAweEJELAotMHgyMiwgMHg0MCwgMHg1MCwgMHhCRCwKKwkweDMyLCAweDQwLCAweDQ4LCAweEJELAorCTB4MjIsIDB4NDAsIDB4NTAsIDB4QkQsCiAKLTB4MTIsIDB4NDEsIDB4NDksIDB4QkQsCi0weDNBLCAweDQxLCAweDUxLCAweEJELAorCTB4MTIsIDB4NDEsIDB4NDksIDB4QkQsCisJMHgzQSwgMHg0MSwgMHg1MSwgMHhCRCwKIAotMHhCRiwgMHgyRiwgMHgyNiwgMHhCRCwKLTB4MDAsIDB4RTAsCi0weDdCLCAweDcyLAorCTB4QkYsIDB4MkYsIDB4MjYsIDB4QkQsCisJMHgwMCwgMHhFMCwKKwkweDdCLCAweDcyLAogCi0weDMyLCAweDIwLAotMHgyMiwgMHgyMCwKLTB4MTIsIDB4MjAsCi0weDNBLCAweDIwLAorCTB4MzIsIDB4MjAsCisJMHgyMiwgMHgyMCwKKwkweDEyLCAweDIwLAorCTB4M0EsIDB4MjAsCiAKLTB4NDYsIDB4MzEsIDB4NDYsIDB4QkYsCi0weDRFLCAweDMxLCAweDRFLCAweEJGLAorCTB4NDYsIDB4MzEsIDB4NDYsIDB4QkYsCisJMHg0RSwgMHgzMSwgMHg0RSwgMHhCRiwKIAotMHhCMywgMHhFMiwgMHgyRCwgMHg5RiwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHhCMywgMHhFMiwgMHgyRCwgMHg5RiwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDU2LCAweDMxLCAweDU2LCAweEJGLAotMHg0NywgMHgzOSwgMHg0NywgMHhCRiwKKwkweDU2LCAweDMxLCAweDU2LCAweEJGLAorCTB4NDcsIDB4MzksIDB4NDcsIDB4QkYsCiAKLTB4NEYsIDB4MzksIDB4NEYsIDB4QkYsCi0weDU3LCAweDM5LCAweDU3LCAweEJGLAorCTB4NEYsIDB4MzksIDB4NEYsIDB4QkYsCisJMHg1NywgMHgzOSwgMHg1NywgMHhCRiwKIAotMHg1QywgMHg4MCwgMHgwNywgMHhFQSwKLTB4MjQsIDB4NDEsIDB4MjAsIDB4RTksCisJMHg1QywgMHg4MCwgMHgwNywgMHhFQSwKKwkweDI0LCAweDQxLCAweDIwLCAweEU5LAogCi0weDQyLCAweDczLCAweEY4LCAweEVDLAotMHgwMCwgMHhFMCwKLTB4MkQsIDB4NzMsCisJMHg0MiwgMHg3MywgMHhGOCwgMHhFQywKKwkweDAwLCAweEUwLAorCTB4MkQsIDB4NzMsCiAKLTB4MzMsIDB4NzIsCi0weDBDLCAweEUzLAotMHhBNSwgMHgyRiwgMHgxRSwgMHhCRCwKKwkweDMzLCAweDcyLAorCTB4MEMsIDB4RTMsCisJMHhBNSwgMHgyRiwgMHgxRSwgMHhCRCwKIAotMHg0MywgMHg0MywgMHgyRCwgMHhERiwKLTB4NEIsIDB4NEIsIDB4MkQsIDB4REYsCisJMHg0MywgMHg0MywgMHgyRCwgMHhERiwKKwkweDRCLCAweDRCLCAweDJELCAweERGLAogCi0weEFFLCAweDFFLCAweDI2LCAweEJELAotMHg1OCwgMHhFMywKLTB4MzMsIDB4NjYsCisJMHhBRSwgMHgxRSwgMHgyNiwgMHhCRCwKKwkweDU4LCAweEUzLAorCTB4MzMsIDB4NjYsCiAKLTB4NTMsIDB4NTMsIDB4MkQsIDB4REYsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4NTMsIDB4NTMsIDB4MkQsIDB4REYsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHhCOCwgMHgzOCwgMHgzMywgMHhCRiwKLTB4MDAsIDB4RTAsCi0weDU5LCAweEUzLAorCTB4QjgsIDB4MzgsIDB4MzMsIDB4QkYsCisJMHgwMCwgMHhFMCwKKwkweDU5LCAweEUzLAogCi0weDFFLCAweDEyLCAweDQxLCAweEU5LAotMHgxQSwgMHgyMiwgMHg0MSwgMHhFOSwKKwkweDFFLCAweDEyLCAweDQxLCAweEU5LAorCTB4MUEsIDB4MjIsIDB4NDEsIDB4RTksCiAKLTB4MkIsIDB4NDAsIDB4M0QsIDB4RTksCi0weDNGLCAweDRCLCAweEEwLCAweEU4LAorCTB4MkIsIDB4NDAsIDB4M0QsIDB4RTksCisJMHgzRiwgMHg0QiwgMHhBMCwgMHhFOCwKIAotMHgyRCwgMHg3MywKLTB4MzAsIDB4NzYsCi0weDA1LCAweDgwLCAweDNELCAweEVBLAorCTB4MkQsIDB4NzMsCisJMHgzMCwgMHg3NiwKKwkweDA1LCAweDgwLCAweDNELCAweEVBLAogCi0weDM3LCAweDQzLCAweEEwLCAweEU4LAotMHgzRCwgMHg1MywgMHhBMCwgMHhFOCwKKwkweDM3LCAweDQzLCAweEEwLCAweEU4LAorCTB4M0QsIDB4NTMsIDB4QTAsIDB4RTgsCiAKLTB4NDgsIDB4NzAsIDB4RjgsIDB4RUMsCi0weDJCLCAweDQ4LCAweDNDLCAweEU5LAorCTB4NDgsIDB4NzAsIDB4RjgsIDB4RUMsCisJMHgyQiwgMHg0OCwgMHgzQywgMHhFOSwKIAotMHgxRiwgMHgyNywgMHhCQywgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgxRiwgMHgyNywgMHhCQywgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0weDE1LCAweEMwLCAweDIwLCAweEU5LAorCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCisJMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKIAotMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCisJMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKKwkweDE1LCAweEMwLCAweDIwLCAweEU5LAogCi0weDE4LCAweDNBLCAweDQxLCAweEU5LAotMHgxRCwgMHgzMiwgMHg0MSwgMHhFOSwKKwkweDE4LCAweDNBLCAweDQxLCAweEU5LAorCTB4MUQsIDB4MzIsIDB4NDEsIDB4RTksCiAKLTB4MkEsIDB4NDAsIDB4MjAsIDB4RTksCi0weDU2LCAweDNELCAweDU2LCAweERGLAorCTB4MkEsIDB4NDAsIDB4MjAsIDB4RTksCisJMHg1NiwgMHgzRCwgMHg1NiwgMHhERiwKIAotMHg0NiwgMHgzNywgMHg0NiwgMHhERiwKLTB4NEUsIDB4M0YsIDB4NEUsIDB4REYsCisJMHg0NiwgMHgzNywgMHg0NiwgMHhERiwKKwkweDRFLCAweDNGLCAweDRFLCAweERGLAogCi0weDE2LCAweDMwLCAweDIwLCAweEU5LAotMHg0RiwgMHgzRiwgMHg0RiwgMHhERiwKKwkweDE2LCAweDMwLCAweDIwLCAweEU5LAorCTB4NEYsIDB4M0YsIDB4NEYsIDB4REYsCiAKLTB4NDcsIDB4MzcsIDB4NDcsIDB4REYsCi0weDU3LCAweDNELCAweDU3LCAweERGLAorCTB4NDcsIDB4MzcsIDB4NDcsIDB4REYsCisJMHg1NywgMHgzRCwgMHg1NywgMHhERiwKIAotMHgzMiwgMHgzMiwgMHgyRCwgMHhERiwKLTB4MjIsIDB4MjIsIDB4MkQsIDB4REYsCisJMHgzMiwgMHgzMiwgMHgyRCwgMHhERiwKKwkweDIyLCAweDIyLCAweDJELCAweERGLAogCi0weDEyLCAweDEyLCAweDJELCAweERGLAotMHgzQSwgMHgzQSwgMHgyRCwgMHhERiwKKwkweDEyLCAweDEyLCAweDJELCAweERGLAorCTB4M0EsIDB4M0EsIDB4MkQsIDB4REYsCiAKLTB4MjcsIDB4Q0YsIDB4NzQsIDB4QzIsCi0weDM3LCAweENGLCAweDc0LCAweEM0LAorCTB4MjcsIDB4Q0YsIDB4NzQsIDB4QzIsCisJMHgzNywgMHhDRiwgMHg3NCwgMHhDNCwKIAotMHgwQSwgMHg0NCwgMHg0QywgMHhCMCwKLTB4MDIsIDB4NDQsIDB4NTQsIDB4QjAsCisJMHgwQSwgMHg0NCwgMHg0QywgMHhCMCwKKwkweDAyLCAweDQ0LCAweDU0LCAweEIwLAogCi0weDNELCAweENGLCAweDc0LCAweEMwLAotMHgzNCwgMHgzNywgMHgyMCwgMHhFOSwKKwkweDNELCAweENGLCAweDc0LCAweEMwLAorCTB4MzQsIDB4MzcsIDB4MjAsIDB4RTksCiAKLTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0weDM4LCAweDI3LCAweDIwLCAweEU5LAorCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCisJMHgzOCwgMHgyNywgMHgyMCwgMHhFOSwKIAotMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLTB4M0MsIDB4M0QsIDB4MjAsIDB4RTksCisJMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKKwkweDNDLCAweDNELCAweDIwLCAweEU5LAogCi0weDJBLCAweDQ0LCAweDRDLCAweEIyLAotMHgxQSwgMHg0NCwgMHg1NCwgMHhCMiwKKwkweDJBLCAweDQ0LCAweDRDLCAweEIyLAorCTB4MUEsIDB4NDQsIDB4NTQsIDB4QjIsCiAKLTB4MkUsIDB4ODAsIDB4M0EsIDB4RUEsCi0weDBBLCAweDIwLAotMHgwMiwgMHgyMCwKKwkweDJFLCAweDgwLCAweDNBLCAweEVBLAorCTB4MEEsIDB4MjAsCisJMHgwMiwgMHgyMCwKIAotMHgyNywgMHhDRiwgMHg3NSwgMHhDMCwKLTB4MkEsIDB4MjAsCi0weDFBLCAweDIwLAorCTB4MjcsIDB4Q0YsIDB4NzUsIDB4QzAsCisJMHgyQSwgMHgyMCwKKwkweDFBLCAweDIwLAogCi0weDMwLCAweDUwLCAweDJFLCAweDlGLAotMHgzMiwgMHgzMSwgMHg1RiwgMHhFOSwKKwkweDMwLCAweDUwLCAweDJFLCAweDlGLAorCTB4MzIsIDB4MzEsIDB4NUYsIDB4RTksCiAKLTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0weDMzLCAweDM5LCAweDVGLCAweEU5LAorCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCisJMHgzMywgMHgzOSwgMHg1RiwgMHhFOSwKIAotMHgzRCwgMHhDRiwgMHg3NSwgMHhDMiwKLTB4MzcsIDB4Q0YsIDB4NzUsIDB4QzQsCisJMHgzRCwgMHhDRiwgMHg3NSwgMHhDMiwKKwkweDM3LCAweENGLCAweDc1LCAweEM0LAogCi0weDMxLCAweDUzLCAweDJGLCAweDlGLAotMHhBNiwgMHgyNywgMHgyMCwgMHhFOSwKKwkweDMxLCAweDUzLCAweDJGLCAweDlGLAorCTB4QTYsIDB4MjcsIDB4MjAsIDB4RTksCiAKLTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0weEEzLCAweDNELCAweDIwLCAweEU5LAorCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCisJMHhBMywgMHgzRCwgMHgyMCwgMHhFOSwKIAotMHgyQSwgMHg0NCwgMHg0QywgMHhCNCwKLTB4MUEsIDB4NDQsIDB4NTQsIDB4QjQsCisJMHgyQSwgMHg0NCwgMHg0QywgMHhCNCwKKwkweDFBLCAweDQ0LCAweDU0LCAweEI0LAogCi0weDBBLCAweDQ1LCAweDRELCAweEIwLAotMHgwMiwgMHg0NSwgMHg1NSwgMHhCMCwKKwkweDBBLCAweDQ1LCAweDRELCAweEIwLAorCTB4MDIsIDB4NDUsIDB4NTUsIDB4QjAsCiAKLTB4ODgsIDB4NzMsIDB4NUUsIDB4RTksCi0weDJBLCAweDIwLAotMHgxQSwgMHgyMCwKKwkweDg4LCAweDczLCAweDVFLCAweEU5LAorCTB4MkEsIDB4MjAsCisJMHgxQSwgMHgyMCwKIAotMHhBMCwgMHgzNywgMHgyMCwgMHhFOSwKLTB4MEEsIDB4MjAsCi0weDAyLCAweDIwLAorCTB4QTAsIDB4MzcsIDB4MjAsIDB4RTksCisJMHgwQSwgMHgyMCwKKwkweDAyLCAweDIwLAogCi0weDMxLCAweDUzLCAweDJGLCAweDlGLAotMHgzRSwgMHgzMCwgMHg0RiwgMHhFOSwKKwkweDMxLCAweDUzLCAweDJGLCAweDlGLAorCTB4M0UsIDB4MzAsIDB4NEYsIDB4RTksCiAKLTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0weDNGLCAweDM4LCAweDRGLCAweEU5LAorCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCisJMHgzRiwgMHgzOCwgMHg0RiwgMHhFOSwKIAotMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLTB4M0EsIDB4MzEsIDB4NEYsIDB4RTksCisJMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKKwkweDNBLCAweDMxLCAweDRGLCAweEU5LAogCi0weDM4LCAweDIxLCAweDJDLCAweDlGLAotMHgzQiwgMHgzOSwgMHg0RiwgMHhFOSwKKwkweDM4LCAweDIxLCAweDJDLCAweDlGLAorCTB4M0IsIDB4MzksIDB4NEYsIDB4RTksCiAKLTB4MkEsIDB4NDUsIDB4NEQsIDB4QjIsCi0weDFBLCAweDQ1LCAweDU1LCAweEIyLAorCTB4MkEsIDB4NDUsIDB4NEQsIDB4QjIsCisJMHgxQSwgMHg0NSwgMHg1NSwgMHhCMiwKIAotMHgwQSwgMHg0NSwgMHg0RCwgMHhCNCwKLTB4MDIsIDB4NDUsIDB4NTUsIDB4QjQsCisJMHgwQSwgMHg0NSwgMHg0RCwgMHhCNCwKKwkweDAyLCAweDQ1LCAweDU1LCAweEI0LAogCi0weDI3LCAweENGLCAweDc0LCAweEM2LAotMHgyQSwgMHgyMCwKLTB4MUEsIDB4MjAsCisJMHgyNywgMHhDRiwgMHg3NCwgMHhDNiwKKwkweDJBLCAweDIwLAorCTB4MUEsIDB4MjAsCiAKLTB4QTcsIDB4MzAsIDB4NEYsIDB4RTksCi0weDBBLCAweDIwLAotMHgwMiwgMHgyMCwKKwkweEE3LCAweDMwLCAweDRGLCAweEU5LAorCTB4MEEsIDB4MjAsCisJMHgwMiwgMHgyMCwKIAotMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLTB4OUMsIDB4MjcsIDB4MjAsIDB4RTksCisJMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKKwkweDlDLCAweDI3LCAweDIwLCAweEU5LAogCi0weDM5LCAweEU1LCAweDJDLCAweDlGLAotMHhBOCwgMHgzOCwgMHg0RiwgMHhFOSwKKwkweDM5LCAweEU1LCAweDJDLCAweDlGLAorCTB4QTgsIDB4MzgsIDB4NEYsIDB4RTksCiAKLTB4MkEsIDB4NDQsIDB4NEMsIDB4QjYsCi0weDFBLCAweDQ0LCAweDU0LCAweEI2LAorCTB4MkEsIDB4NDQsIDB4NEMsIDB4QjYsCisJMHgxQSwgMHg0NCwgMHg1NCwgMHhCNiwKIAotMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLTB4MzYsIDB4MzEsIDB4NEYsIDB4RTksCisJMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKKwkweDM2LCAweDMxLCAweDRGLCAweEU5LAogCi0weDM4LCAweDIxLCAweDJDLCAweDlGLAotMHgzNywgMHgzOSwgMHg0RiwgMHhFOSwKKwkweDM4LCAweDIxLCAweDJDLCAweDlGLAorCTB4MzcsIDB4MzksIDB4NEYsIDB4RTksCiAKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0weDJBLCAweDIwLAotMHgxQSwgMHgyMCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MkEsIDB4MjAsCisJMHgxQSwgMHgyMCwKIAotMHgyQSwgMHg0NiwgMHg0RSwgMHhCRiwKLTB4MUEsIDB4NDYsIDB4NTYsIDB4QkYsCisJMHgyQSwgMHg0NiwgMHg0RSwgMHhCRiwKKwkweDFBLCAweDQ2LCAweDU2LCAweEJGLAogCi0weDMxLCAweDUzLCAweDJGLCAweDlGLAotMHhBNCwgMHgzMSwgMHg0RiwgMHhFOSwKKwkweDMxLCAweDUzLCAweDJGLCAweDlGLAorCTB4QTQsIDB4MzEsIDB4NEYsIDB4RTksCiAKLTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0weEE1LCAweDM5LCAweDRGLCAweEU5LAorCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCisJMHhBNSwgMHgzOSwgMHg0RiwgMHhFOSwKIAotMHgwQSwgMHg0NywgMHg0RiwgMHhCRiwKLTB4MDIsIDB4NDcsIDB4NTcsIDB4QkYsCisJMHgwQSwgMHg0NywgMHg0RiwgMHhCRiwKKwkweDAyLCAweDQ3LCAweDU3LCAweEJGLAogCi0weDMxLCAweDUzLCAweDJGLCAweDlGLAotMHhBMSwgMHgzMCwgMHg0RiwgMHhFOSwKKwkweDMxLCAweDUzLCAweDJGLCAweDlGLAorCTB4QTEsIDB4MzAsIDB4NEYsIDB4RTksCiAKLTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0weEEyLCAweDM4LCAweDRGLCAweEU5LAorCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCisJMHhBMiwgMHgzOCwgMHg0RiwgMHhFOSwKIAotMHgyQSwgMHg0MywgMHg0QiwgMHhCRiwKLTB4MUEsIDB4NDMsIDB4NTMsIDB4QkYsCisJMHgyQSwgMHg0MywgMHg0QiwgMHhCRiwKKwkweDFBLCAweDQzLCAweDUzLCAweEJGLAogCi0weDMwLCAweDUwLCAweDJFLCAweDlGLAotMHg5RCwgMHgzMSwgMHg0RiwgMHhFOSwKKwkweDMwLCAweDUwLCAweDJFLCAweDlGLAorCTB4OUQsIDB4MzEsIDB4NEYsIDB4RTksCiAKLTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0weDlFLCAweDM5LCAweDRGLCAweEU5LAorCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCisJMHg5RSwgMHgzOSwgMHg0RiwgMHhFOSwKIAotMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLTB4ODAsIDB4MzEsIDB4NTcsIDB4RTksCisJMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKKwkweDgwLCAweDMxLCAweDU3LCAweEU5LAogCi0weDM5LCAweEU1LCAweDJDLCAweDlGLAotMHg4MSwgMHgzOSwgMHg1NywgMHhFOSwKKwkweDM5LCAweEU1LCAweDJDLCAweDlGLAorCTB4ODEsIDB4MzksIDB4NTcsIDB4RTksCiAKLTB4MzcsIDB4NDgsIDB4NTAsIDB4QkQsCi0weDhBLCAweDM2LCAweDIwLCAweEU5LAorCTB4MzcsIDB4NDgsIDB4NTAsIDB4QkQsCisJMHg4QSwgMHgzNiwgMHgyMCwgMHhFOSwKIAotMHg4NiwgMHg3NiwgMHg1NywgMHhFOSwKLTB4OEIsIDB4M0UsIDB4MjAsIDB4RTksCisJMHg4NiwgMHg3NiwgMHg1NywgMHhFOSwKKwkweDhCLCAweDNFLCAweDIwLCAweEU5LAogCi0weDgyLCAweDMwLCAweDU3LCAweEU5LAotMHg4NywgMHg3NywgMHg1NywgMHhFOSwKKwkweDgyLCAweDMwLCAweDU3LCAweEU5LAorCTB4ODcsIDB4NzcsIDB4NTcsIDB4RTksCiAKLTB4ODMsIDB4MzgsIDB4NTcsIDB4RTksCi0weDM1LCAweDQ5LCAweDUxLCAweEJELAorCTB4ODMsIDB4MzgsIDB4NTcsIDB4RTksCisJMHgzNSwgMHg0OSwgMHg1MSwgMHhCRCwKIAotMHg4NCwgMHgzMSwgMHg1RSwgMHhFOSwKLTB4MzAsIDB4MUYsIDB4NUYsIDB4RTksCisJMHg4NCwgMHgzMSwgMHg1RSwgMHhFOSwKKwkweDMwLCAweDFGLCAweDVGLCAweEU5LAogCi0weDg1LCAweDM5LCAweDVFLCAweEU5LAotMHg1NywgMHgyNSwgMHgyMCwgMHhFOSwKKwkweDg1LCAweDM5LCAweDVFLCAweEU5LAorCTB4NTcsIDB4MjUsIDB4MjAsIDB4RTksCiAKLTB4MkIsIDB4NDgsIDB4MjAsIDB4RTksCi0weDFELCAweDM3LCAweEUxLCAweEVBLAorCTB4MkIsIDB4NDgsIDB4MjAsIDB4RTksCisJMHgxRCwgMHgzNywgMHhFMSwgMHhFQSwKIAotMHgxRSwgMHgzNSwgMHhFMSwgMHhFQSwKLTB4MDAsIDB4RTAsCi0weDI2LCAweDc3LAorCTB4MUUsIDB4MzUsIDB4RTEsIDB4RUEsCisJMHgwMCwgMHhFMCwKKwkweDI2LCAweDc3LAogCi0weDI0LCAweDQ5LCAweDIwLCAweEU5LAotMHg5RCwgMHhGRiwgMHgyMCwgMHhFQSwKKwkweDI0LCAweDQ5LCAweDIwLCAweEU5LAorCTB4OUQsIDB4RkYsIDB4MjAsIDB4RUEsCiAKLTB4MTYsIDB4MjYsIDB4MjAsIDB4RTksCi0weDU3LCAweDJFLCAweEJGLCAweEVBLAorCTB4MTYsIDB4MjYsIDB4MjAsIDB4RTksCisJMHg1NywgMHgyRSwgMHhCRiwgMHhFQSwKIAotMHgxQywgMHg0NiwgMHhBMCwgMHhFOCwKLTB4MjMsIDB4NEUsIDB4QTAsIDB4RTgsCisJMHgxQywgMHg0NiwgMHhBMCwgMHhFOCwKKwkweDIzLCAweDRFLCAweEEwLCAweEU4LAogCi0weDJCLCAweDU2LCAweEEwLCAweEU4LAotMHgxRCwgMHg0NywgMHhBMCwgMHhFOCwKKwkweDJCLCAweDU2LCAweEEwLCAweEU4LAorCTB4MUQsIDB4NDcsIDB4QTAsIDB4RTgsCiAKLTB4MjQsIDB4NEYsIDB4QTAsIDB4RTgsCi0weDJDLCAweDU3LCAweEEwLCAweEU4LAorCTB4MjQsIDB4NEYsIDB4QTAsIDB4RTgsCisJMHgyQywgMHg1NywgMHhBMCwgMHhFOCwKIAotMHgxQywgMHgwMCwKLTB4MjMsIDB4MDAsCi0weDJCLCAweDAwLAotMHgwMCwgMHhFMCwKKwkweDFDLCAweDAwLAorCTB4MjMsIDB4MDAsCisJMHgyQiwgMHgwMCwKKwkweDAwLCAweEUwLAogCi0weDFELCAweDAwLAotMHgyNCwgMHgwMCwKLTB4MkMsIDB4MDAsCi0weDAwLCAweEUwLAorCTB4MUQsIDB4MDAsCisJMHgyNCwgMHgwMCwKKwkweDJDLCAweDAwLAorCTB4MDAsIDB4RTAsCiAKLTB4MUMsIDB4NjUsCi0weDIzLCAweDY1LAotMHgyQiwgMHg2NSwKLTB4MDAsIDB4RTAsCisJMHgxQywgMHg2NSwKKwkweDIzLCAweDY1LAorCTB4MkIsIDB4NjUsCisJMHgwMCwgMHhFMCwKIAotMHgxRCwgMHg2NSwKLTB4MjQsIDB4NjUsCi0weDJDLCAweDY1LAotMHgwMCwgMHhFMCwKKwkweDFELCAweDY1LAorCTB4MjQsIDB4NjUsCisJMHgyQywgMHg2NSwKKwkweDAwLCAweEUwLAogCi0weDFDLCAweDIzLCAweDYwLCAweEVDLAotMHgzNiwgMHhENywgMHgzNiwgMHhBRCwKKwkweDFDLCAweDIzLCAweDYwLCAweEVDLAorCTB4MzYsIDB4RDcsIDB4MzYsIDB4QUQsCiAKLTB4MkIsIDB4ODAsIDB4NjAsIDB4RUMsCi0weDFELCAweDI0LCAweDYwLCAweEVDLAorCTB4MkIsIDB4ODAsIDB4NjAsIDB4RUMsCisJMHgxRCwgMHgyNCwgMHg2MCwgMHhFQywKIAotMHgzRSwgMHhENywgMHgzRSwgMHhBRCwKLTB4MkMsIDB4ODAsIDB4NjAsIDB4RUMsCisJMHgzRSwgMHhENywgMHgzRSwgMHhBRCwKKwkweDJDLCAweDgwLCAweDYwLCAweEVDLAogCi0weDFDLCAweDJCLCAweERFLCAweEU4LAotMHgyMywgMHg4MCwgMHhERSwgMHhFOCwKKwkweDFDLCAweDJCLCAweERFLCAweEU4LAorCTB4MjMsIDB4ODAsIDB4REUsIDB4RTgsCiAKLTB4MzYsIDB4ODAsIDB4MzYsIDB4QkQsCi0weDNFLCAweDgwLCAweDNFLCAweEJELAorCTB4MzYsIDB4ODAsIDB4MzYsIDB4QkQsCisJMHgzRSwgMHg4MCwgMHgzRSwgMHhCRCwKIAotMHgzMywgMHhENywgMHgxQywgMHhCRCwKLTB4M0IsIDB4RDcsIDB4MjMsIDB4QkQsCisJMHgzMywgMHhENywgMHgxQywgMHhCRCwKKwkweDNCLCAweEQ3LCAweDIzLCAweEJELAogCi0weDQ2LCAweDgwLCAweDQ2LCAweENGLAotMHg0RiwgMHg4MCwgMHg0RiwgMHhDRiwKKwkweDQ2LCAweDgwLCAweDQ2LCAweENGLAorCTB4NEYsIDB4ODAsIDB4NEYsIDB4Q0YsCiAKLTB4NTYsIDB4MzMsIDB4NTYsIDB4Q0YsCi0weDQ3LCAweDNCLCAweDQ3LCAweENGLAorCTB4NTYsIDB4MzMsIDB4NTYsIDB4Q0YsCisJMHg0NywgMHgzQiwgMHg0NywgMHhDRiwKIAotMHhDNSwgMHhGRiwgMHgyMCwgMHhFQSwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHhDNSwgMHhGRiwgMHgyMCwgMHhFQSwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDRFLCAweDMzLCAweDRFLCAweENGLAotMHg1NywgMHgzQiwgMHg1NywgMHhDRiwKKwkweDRFLCAweDMzLCAweDRFLCAweENGLAorCTB4NTcsIDB4M0IsIDB4NTcsIDB4Q0YsCiAKLTB4OEIsIDB4RkYsIDB4MjAsIDB4RUEsCi0weDU3LCAweEMwLCAweEJGLCAweEVBLAorCTB4OEIsIDB4RkYsIDB4MjAsIDB4RUEsCisJMHg1NywgMHhDMCwgMHhCRiwgMHhFQSwKIAotMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKLTB4MDAsIDB4MDAsIDB4RDgsIDB4RUMsCisJMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKKwkweDAwLCAweDAwLCAweEQ4LCAweEVDLAogCiB9OwogCiBzdGF0aWMgdW5zaWduZWQgY2hhciB3YXJwX2c0MDBfdGd6c2FmW10gPSB7CiAKLTB4MDAsIDB4ODgsIDB4OTgsIDB4RTksCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODgsIDB4OTgsIDB4RTksCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKLTB4MDAsIDB4MDAsIDB4RDgsIDB4RUMsCisJMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKKwkweDAwLCAweDAwLCAweEQ4LCAweEVDLAogCi0weEZGLCAweDgwLCAweEMwLCAweEU5LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweEZGLCAweDgwLCAweEMwLCAweEU5LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MjIsIDB4NDAsIDB4NDgsIDB4QkYsCi0weDJBLCAweDQwLCAweDUwLCAweEJGLAorCTB4MjIsIDB4NDAsIDB4NDgsIDB4QkYsCisJMHgyQSwgMHg0MCwgMHg1MCwgMHhCRiwKIAotMHgzMiwgMHg0MSwgMHg0OSwgMHhCRiwKLTB4M0EsIDB4NDEsIDB4NTEsIDB4QkYsCisJMHgzMiwgMHg0MSwgMHg0OSwgMHhCRiwKKwkweDNBLCAweDQxLCAweDUxLCAweEJGLAogCi0weEMzLCAweDZCLAotMHhDQiwgMHg2QiwKLTB4MDAsIDB4ODgsIDB4OTgsIDB4RTksCisJMHhDMywgMHg2QiwKKwkweENCLCAweDZCLAorCTB4MDAsIDB4ODgsIDB4OTgsIDB4RTksCiAKLTB4NzMsIDB4N0IsIDB4QzgsIDB4RUMsCi0weDk2LCAweEUyLAotMHg0MSwgMHgwNCwKKwkweDczLCAweDdCLCAweEM4LCAweEVDLAorCTB4OTYsIDB4RTIsCisJMHg0MSwgMHgwNCwKIAotMHg3QiwgMHg0MywgMHhBMCwgMHhFOCwKLTB4NzMsIDB4NEIsIDB4QTAsIDB4RTgsCisJMHg3QiwgMHg0MywgMHhBMCwgMHhFOCwKKwkweDczLCAweDRCLCAweEEwLCAweEU4LAogCi0weEFELCAweEVFLCAweDI5LCAweDlGLAotMHgwMCwgMHhFMCwKLTB4NDksIDB4MDQsCisJMHhBRCwgMHhFRSwgMHgyOSwgMHg5RiwKKwkweDAwLCAweEUwLAorCTB4NDksIDB4MDQsCiAKLTB4OTAsIDB4RTIsCi0weDUxLCAweDA0LAotMHgzMSwgMHg0NiwgMHhCMSwgMHhFOCwKKwkweDkwLCAweEUyLAorCTB4NTEsIDB4MDQsCisJMHgzMSwgMHg0NiwgMHhCMSwgMHhFOCwKIAotMHg0OSwgMHg0MSwgMHhDMCwgMHhFQywKLTB4MzksIDB4NTcsIDB4QjEsIDB4RTgsCisJMHg0OSwgMHg0MSwgMHhDMCwgMHhFQywKKwkweDM5LCAweDU3LCAweEIxLCAweEU4LAogCi0weDAwLCAweDA0LAotMHg0NiwgMHhFMiwKLTB4NzMsIDB4NTMsIDB4QTAsIDB4RTgsCisJMHgwMCwgMHgwNCwKKwkweDQ2LCAweEUyLAorCTB4NzMsIDB4NTMsIDB4QTAsIDB4RTgsCiAKLTB4NTEsIDB4NDEsIDB4QzAsIDB4RUMsCi0weDMxLCAweDAwLAotMHgzOSwgMHgwMCwKKwkweDUxLCAweDQxLCAweEMwLCAweEVDLAorCTB4MzEsIDB4MDAsCisJMHgzOSwgMHgwMCwKIAotMHg2RSwgMHg4MCwgMHgxNSwgMHhFQSwKLTB4MDgsIDB4MDQsCi0weDEwLCAweDA0LAorCTB4NkUsIDB4ODAsIDB4MTUsIDB4RUEsCisJMHgwOCwgMHgwNCwKKwkweDEwLCAweDA0LAogCi0weDUxLCAweDQ5LCAweEMwLCAweEVDLAotMHgyRiwgMHg0MSwgMHg2MCwgMHhFQSwKKwkweDUxLCAweDQ5LCAweEMwLCAweEVDLAorCTB4MkYsIDB4NDEsIDB4NjAsIDB4RUEsCiAKLTB4MzEsIDB4MjAsCi0weDM5LCAweDIwLAotMHgxRiwgMHg0MiwgMHhBMCwgMHhFOCwKKwkweDMxLCAweDIwLAorCTB4MzksIDB4MjAsCisJMHgxRiwgMHg0MiwgMHhBMCwgMHhFOCwKIAotMHgyQSwgMHg0MiwgMHg0QSwgMHhCRiwKLTB4MjcsIDB4NEEsIDB4QTAsIDB4RTgsCisJMHgyQSwgMHg0MiwgMHg0QSwgMHhCRiwKKwkweDI3LCAweDRBLCAweEEwLCAweEU4LAogCi0weDFBLCAweDQyLCAweDUyLCAweEJGLAotMHgxRSwgMHg0OSwgMHg2MCwgMHhFQSwKKwkweDFBLCAweDQyLCAweDUyLCAweEJGLAorCTB4MUUsIDB4NDksIDB4NjAsIDB4RUEsCiAKLTB4NzMsIDB4N0IsIDB4QzgsIDB4RUMsCi0weDI2LCAweDUxLCAweDYwLCAweEVBLAorCTB4NzMsIDB4N0IsIDB4QzgsIDB4RUMsCisJMHgyNiwgMHg1MSwgMHg2MCwgMHhFQSwKIAotMHgzMiwgMHg0MCwgMHg0OCwgMHhCRCwKLTB4MjIsIDB4NDAsIDB4NTAsIDB4QkQsCisJMHgzMiwgMHg0MCwgMHg0OCwgMHhCRCwKKwkweDIyLCAweDQwLCAweDUwLCAweEJELAogCi0weDEyLCAweDQxLCAweDQ5LCAweEJELAotMHgzQSwgMHg0MSwgMHg1MSwgMHhCRCwKKwkweDEyLCAweDQxLCAweDQ5LCAweEJELAorCTB4M0EsIDB4NDEsIDB4NTEsIDB4QkQsCiAKLTB4QkYsIDB4MkYsIDB4MjYsIDB4QkQsCi0weDAwLCAweEUwLAotMHg3QiwgMHg3MiwKKwkweEJGLCAweDJGLCAweDI2LCAweEJELAorCTB4MDAsIDB4RTAsCisJMHg3QiwgMHg3MiwKIAotMHgzMiwgMHgyMCwKLTB4MjIsIDB4MjAsCi0weDEyLCAweDIwLAotMHgzQSwgMHgyMCwKKwkweDMyLCAweDIwLAorCTB4MjIsIDB4MjAsCisJMHgxMiwgMHgyMCwKKwkweDNBLCAweDIwLAogCi0weDQ2LCAweDMxLCAweDQ2LCAweEJGLAotMHg0RSwgMHgzMSwgMHg0RSwgMHhCRiwKKwkweDQ2LCAweDMxLCAweDQ2LCAweEJGLAorCTB4NEUsIDB4MzEsIDB4NEUsIDB4QkYsCiAKLTB4QjMsIDB4RTIsIDB4MkQsIDB4OUYsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4QjMsIDB4RTIsIDB4MkQsIDB4OUYsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHg1NiwgMHgzMSwgMHg1NiwgMHhCRiwKLTB4NDcsIDB4MzksIDB4NDcsIDB4QkYsCisJMHg1NiwgMHgzMSwgMHg1NiwgMHhCRiwKKwkweDQ3LCAweDM5LCAweDQ3LCAweEJGLAogCi0weDRGLCAweDM5LCAweDRGLCAweEJGLAotMHg1NywgMHgzOSwgMHg1NywgMHhCRiwKKwkweDRGLCAweDM5LCAweDRGLCAweEJGLAorCTB4NTcsIDB4MzksIDB4NTcsIDB4QkYsCiAKLTB4NjAsIDB4ODAsIDB4MDcsIDB4RUEsCi0weDI0LCAweDQxLCAweDIwLCAweEU5LAorCTB4NjAsIDB4ODAsIDB4MDcsIDB4RUEsCisJMHgyNCwgMHg0MSwgMHgyMCwgMHhFOSwKIAotMHg0MiwgMHg3MywgMHhGOCwgMHhFQywKLTB4MDAsIDB4RTAsCi0weDJELCAweDczLAorCTB4NDIsIDB4NzMsIDB4RjgsIDB4RUMsCisJMHgwMCwgMHhFMCwKKwkweDJELCAweDczLAogCi0weDMzLCAweDcyLAotMHgwQywgMHhFMywKLTB4QTUsIDB4MkYsIDB4MUUsIDB4QkQsCisJMHgzMywgMHg3MiwKKwkweDBDLCAweEUzLAorCTB4QTUsIDB4MkYsIDB4MUUsIDB4QkQsCiAKLTB4NDMsIDB4NDMsIDB4MkQsIDB4REYsCi0weDRCLCAweDRCLCAweDJELCAweERGLAorCTB4NDMsIDB4NDMsIDB4MkQsIDB4REYsCisJMHg0QiwgMHg0QiwgMHgyRCwgMHhERiwKIAotMHhBRSwgMHgxRSwgMHgyNiwgMHhCRCwKLTB4NTgsIDB4RTMsCi0weDMzLCAweDY2LAorCTB4QUUsIDB4MUUsIDB4MjYsIDB4QkQsCisJMHg1OCwgMHhFMywKKwkweDMzLCAweDY2LAogCi0weDUzLCAweDUzLCAweDJELCAweERGLAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDUzLCAweDUzLCAweDJELCAweERGLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4QjgsIDB4MzgsIDB4MzMsIDB4QkYsCi0weDAwLCAweEUwLAotMHg1OSwgMHhFMywKKwkweEI4LCAweDM4LCAweDMzLCAweEJGLAorCTB4MDAsIDB4RTAsCisJMHg1OSwgMHhFMywKIAotMHgxRSwgMHgxMiwgMHg0MSwgMHhFOSwKLTB4MUEsIDB4MjIsIDB4NDEsIDB4RTksCisJMHgxRSwgMHgxMiwgMHg0MSwgMHhFOSwKKwkweDFBLCAweDIyLCAweDQxLCAweEU5LAogCi0weDJCLCAweDQwLCAweDNELCAweEU5LAotMHgzRiwgMHg0QiwgMHhBMCwgMHhFOCwKKwkweDJCLCAweDQwLCAweDNELCAweEU5LAorCTB4M0YsIDB4NEIsIDB4QTAsIDB4RTgsCiAKLTB4MkQsIDB4NzMsCi0weDMwLCAweDc2LAotMHgwNSwgMHg4MCwgMHgzRCwgMHhFQSwKKwkweDJELCAweDczLAorCTB4MzAsIDB4NzYsCisJMHgwNSwgMHg4MCwgMHgzRCwgMHhFQSwKIAotMHgzNywgMHg0MywgMHhBMCwgMHhFOCwKLTB4M0QsIDB4NTMsIDB4QTAsIDB4RTgsCisJMHgzNywgMHg0MywgMHhBMCwgMHhFOCwKKwkweDNELCAweDUzLCAweEEwLCAweEU4LAogCi0weDQ4LCAweDcwLCAweEY4LCAweEVDLAotMHgyQiwgMHg0OCwgMHgzQywgMHhFOSwKKwkweDQ4LCAweDcwLCAweEY4LCAweEVDLAorCTB4MkIsIDB4NDgsIDB4M0MsIDB4RTksCiAKLTB4MUYsIDB4MjcsIDB4QkMsIDB4RTgsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MUYsIDB4MjcsIDB4QkMsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDE1LCAweEMwLCAweDIwLCAweEU5LAotMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKKwkweDE1LCAweEMwLCAweDIwLCAweEU5LAorCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCiAKLTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0weDE1LCAweEMwLCAweDIwLCAweEU5LAorCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCisJMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKIAotMHgxOCwgMHgzQSwgMHg0MSwgMHhFOSwKLTB4MUQsIDB4MzIsIDB4NDEsIDB4RTksCisJMHgxOCwgMHgzQSwgMHg0MSwgMHhFOSwKKwkweDFELCAweDMyLCAweDQxLCAweEU5LAogCi0weDJBLCAweDQwLCAweDIwLCAweEU5LAotMHg1NiwgMHgzRCwgMHg1NiwgMHhERiwKKwkweDJBLCAweDQwLCAweDIwLCAweEU5LAorCTB4NTYsIDB4M0QsIDB4NTYsIDB4REYsCiAKLTB4NDYsIDB4MzcsIDB4NDYsIDB4REYsCi0weDRFLCAweDNGLCAweDRFLCAweERGLAorCTB4NDYsIDB4MzcsIDB4NDYsIDB4REYsCisJMHg0RSwgMHgzRiwgMHg0RSwgMHhERiwKIAotMHgxNiwgMHgzMCwgMHgyMCwgMHhFOSwKLTB4NEYsIDB4M0YsIDB4NEYsIDB4REYsCisJMHgxNiwgMHgzMCwgMHgyMCwgMHhFOSwKKwkweDRGLCAweDNGLCAweDRGLCAweERGLAogCi0weDQ3LCAweDM3LCAweDQ3LCAweERGLAotMHg1NywgMHgzRCwgMHg1NywgMHhERiwKKwkweDQ3LCAweDM3LCAweDQ3LCAweERGLAorCTB4NTcsIDB4M0QsIDB4NTcsIDB4REYsCiAKLTB4MzIsIDB4MzIsIDB4MkQsIDB4REYsCi0weDIyLCAweDIyLCAweDJELCAweERGLAorCTB4MzIsIDB4MzIsIDB4MkQsIDB4REYsCisJMHgyMiwgMHgyMiwgMHgyRCwgMHhERiwKIAotMHgxMiwgMHgxMiwgMHgyRCwgMHhERiwKLTB4M0EsIDB4M0EsIDB4MkQsIDB4REYsCisJMHgxMiwgMHgxMiwgMHgyRCwgMHhERiwKKwkweDNBLCAweDNBLCAweDJELCAweERGLAogCi0weDI3LCAweENGLCAweDc0LCAweEMyLAotMHgzNywgMHhDRiwgMHg3NCwgMHhDNCwKKwkweDI3LCAweENGLCAweDc0LCAweEMyLAorCTB4MzcsIDB4Q0YsIDB4NzQsIDB4QzQsCiAKLTB4MEEsIDB4NDQsIDB4NEMsIDB4QjAsCi0weDAyLCAweDQ0LCAweDU0LCAweEIwLAorCTB4MEEsIDB4NDQsIDB4NEMsIDB4QjAsCisJMHgwMiwgMHg0NCwgMHg1NCwgMHhCMCwKIAotMHgzRCwgMHhDRiwgMHg3NCwgMHhDMCwKLTB4MzQsIDB4MzcsIDB4MjAsIDB4RTksCisJMHgzRCwgMHhDRiwgMHg3NCwgMHhDMCwKKwkweDM0LCAweDM3LCAweDIwLCAweEU5LAogCi0weDMxLCAweDUzLCAweDJGLCAweDlGLAotMHgzOCwgMHgyNywgMHgyMCwgMHhFOSwKKwkweDMxLCAweDUzLCAweDJGLCAweDlGLAorCTB4MzgsIDB4MjcsIDB4MjAsIDB4RTksCiAKLTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0weDNDLCAweDNELCAweDIwLCAweEU5LAorCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCisJMHgzQywgMHgzRCwgMHgyMCwgMHhFOSwKIAotMHgyQSwgMHg0NCwgMHg0QywgMHhCMiwKLTB4MUEsIDB4NDQsIDB4NTQsIDB4QjIsCisJMHgyQSwgMHg0NCwgMHg0QywgMHhCMiwKKwkweDFBLCAweDQ0LCAweDU0LCAweEIyLAogCi0weDMyLCAweDgwLCAweDNBLCAweEVBLAotMHgwQSwgMHgyMCwKLTB4MDIsIDB4MjAsCisJMHgzMiwgMHg4MCwgMHgzQSwgMHhFQSwKKwkweDBBLCAweDIwLAorCTB4MDIsIDB4MjAsCiAKLTB4MjcsIDB4Q0YsIDB4NzUsIDB4QzAsCi0weDJBLCAweDIwLAotMHgxQSwgMHgyMCwKKwkweDI3LCAweENGLCAweDc1LCAweEMwLAorCTB4MkEsIDB4MjAsCisJMHgxQSwgMHgyMCwKIAotMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLTB4MzIsIDB4MzEsIDB4NUYsIDB4RTksCisJMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKKwkweDMyLCAweDMxLCAweDVGLCAweEU5LAogCi0weDM4LCAweDIxLCAweDJDLCAweDlGLAotMHgzMywgMHgzOSwgMHg1RiwgMHhFOSwKKwkweDM4LCAweDIxLCAweDJDLCAweDlGLAorCTB4MzMsIDB4MzksIDB4NUYsIDB4RTksCiAKLTB4M0QsIDB4Q0YsIDB4NzUsIDB4QzIsCi0weDM3LCAweENGLCAweDc1LCAweEM0LAorCTB4M0QsIDB4Q0YsIDB4NzUsIDB4QzIsCisJMHgzNywgMHhDRiwgMHg3NSwgMHhDNCwKIAotMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLTB4QTYsIDB4MjcsIDB4MjAsIDB4RTksCisJMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKKwkweEE2LCAweDI3LCAweDIwLCAweEU5LAogCi0weDM5LCAweEU1LCAweDJDLCAweDlGLAotMHhBMywgMHgzRCwgMHgyMCwgMHhFOSwKKwkweDM5LCAweEU1LCAweDJDLCAweDlGLAorCTB4QTMsIDB4M0QsIDB4MjAsIDB4RTksCiAKLTB4MkEsIDB4NDQsIDB4NEMsIDB4QjQsCi0weDFBLCAweDQ0LCAweDU0LCAweEI0LAorCTB4MkEsIDB4NDQsIDB4NEMsIDB4QjQsCisJMHgxQSwgMHg0NCwgMHg1NCwgMHhCNCwKIAotMHgwQSwgMHg0NSwgMHg0RCwgMHhCMCwKLTB4MDIsIDB4NDUsIDB4NTUsIDB4QjAsCisJMHgwQSwgMHg0NSwgMHg0RCwgMHhCMCwKKwkweDAyLCAweDQ1LCAweDU1LCAweEIwLAogCi0weDg4LCAweDczLCAweDVFLCAweEU5LAotMHgyQSwgMHgyMCwKLTB4MUEsIDB4MjAsCisJMHg4OCwgMHg3MywgMHg1RSwgMHhFOSwKKwkweDJBLCAweDIwLAorCTB4MUEsIDB4MjAsCiAKLTB4QTAsIDB4MzcsIDB4MjAsIDB4RTksCi0weDBBLCAweDIwLAotMHgwMiwgMHgyMCwKKwkweEEwLCAweDM3LCAweDIwLCAweEU5LAorCTB4MEEsIDB4MjAsCisJMHgwMiwgMHgyMCwKIAotMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLTB4M0UsIDB4MzAsIDB4NEYsIDB4RTksCisJMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKKwkweDNFLCAweDMwLCAweDRGLCAweEU5LAogCi0weDM5LCAweEU1LCAweDJDLCAweDlGLAotMHgzRiwgMHgzOCwgMHg0RiwgMHhFOSwKKwkweDM5LCAweEU1LCAweDJDLCAweDlGLAorCTB4M0YsIDB4MzgsIDB4NEYsIDB4RTksCiAKLTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0weDNBLCAweDMxLCAweDRGLCAweEU5LAorCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCisJMHgzQSwgMHgzMSwgMHg0RiwgMHhFOSwKIAotMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLTB4M0IsIDB4MzksIDB4NEYsIDB4RTksCisJMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKKwkweDNCLCAweDM5LCAweDRGLCAweEU5LAogCi0weDJBLCAweDQ1LCAweDRELCAweEIyLAotMHgxQSwgMHg0NSwgMHg1NSwgMHhCMiwKKwkweDJBLCAweDQ1LCAweDRELCAweEIyLAorCTB4MUEsIDB4NDUsIDB4NTUsIDB4QjIsCiAKLTB4MEEsIDB4NDUsIDB4NEQsIDB4QjQsCi0weDAyLCAweDQ1LCAweDU1LCAweEI0LAorCTB4MEEsIDB4NDUsIDB4NEQsIDB4QjQsCisJMHgwMiwgMHg0NSwgMHg1NSwgMHhCNCwKIAotMHgyNywgMHhDRiwgMHg3NCwgMHhDNiwKLTB4MkEsIDB4MjAsCi0weDFBLCAweDIwLAorCTB4MjcsIDB4Q0YsIDB4NzQsIDB4QzYsCisJMHgyQSwgMHgyMCwKKwkweDFBLCAweDIwLAogCi0weEE3LCAweDMwLCAweDRGLCAweEU5LAotMHgwQSwgMHgyMCwKLTB4MDIsIDB4MjAsCisJMHhBNywgMHgzMCwgMHg0RiwgMHhFOSwKKwkweDBBLCAweDIwLAorCTB4MDIsIDB4MjAsCiAKLTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0weDlDLCAweDI3LCAweDIwLCAweEU5LAorCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCisJMHg5QywgMHgyNywgMHgyMCwgMHhFOSwKIAotMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLTB4QTgsIDB4MzgsIDB4NEYsIDB4RTksCisJMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKKwkweEE4LCAweDM4LCAweDRGLCAweEU5LAogCi0weDJBLCAweDQ0LCAweDRDLCAweEI2LAotMHgxQSwgMHg0NCwgMHg1NCwgMHhCNiwKKwkweDJBLCAweDQ0LCAweDRDLCAweEI2LAorCTB4MUEsIDB4NDQsIDB4NTQsIDB4QjYsCiAKLTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0weDM2LCAweDMxLCAweDRGLCAweEU5LAorCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCisJMHgzNiwgMHgzMSwgMHg0RiwgMHhFOSwKIAotMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLTB4MzcsIDB4MzksIDB4NEYsIDB4RTksCisJMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKKwkweDM3LCAweDM5LCAweDRGLCAweEU5LAogCi0weDBBLCAweDQ1LCAweDRELCAweEI2LAotMHgwMiwgMHg0NSwgMHg1NSwgMHhCNiwKKwkweDBBLCAweDQ1LCAweDRELCAweEI2LAorCTB4MDIsIDB4NDUsIDB4NTUsIDB4QjYsCiAKLTB4M0QsIDB4Q0YsIDB4NzUsIDB4QzYsCi0weDJBLCAweDIwLAotMHgxQSwgMHgyMCwKKwkweDNELCAweENGLCAweDc1LCAweEM2LAorCTB4MkEsIDB4MjAsCisJMHgxQSwgMHgyMCwKIAotMHgyQSwgMHg0NiwgMHg0RSwgMHhCRiwKLTB4MUEsIDB4NDYsIDB4NTYsIDB4QkYsCisJMHgyQSwgMHg0NiwgMHg0RSwgMHhCRiwKKwkweDFBLCAweDQ2LCAweDU2LCAweEJGLAogCi0weDMxLCAweDUzLCAweDJGLCAweDlGLAotMHhBNCwgMHgzMSwgMHg0RiwgMHhFOSwKKwkweDMxLCAweDUzLCAweDJGLCAweDlGLAorCTB4QTQsIDB4MzEsIDB4NEYsIDB4RTksCiAKLTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0weEE1LCAweDM5LCAweDRGLCAweEU5LAorCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCisJMHhBNSwgMHgzOSwgMHg0RiwgMHhFOSwKIAotMHgzMSwgMHgzRCwgMHgyMCwgMHhFOSwKLTB4MEEsIDB4MjAsCi0weDAyLCAweDIwLAorCTB4MzEsIDB4M0QsIDB4MjAsIDB4RTksCisJMHgwQSwgMHgyMCwKKwkweDAyLCAweDIwLAogCi0weDBBLCAweDQ3LCAweDRGLCAweEJGLAotMHgwMiwgMHg0NywgMHg1NywgMHhCRiwKKwkweDBBLCAweDQ3LCAweDRGLCAweEJGLAorCTB4MDIsIDB4NDcsIDB4NTcsIDB4QkYsCiAKLTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCi0weEExLCAweDMwLCAweDRGLCAweEU5LAorCTB4MzAsIDB4NTAsIDB4MkUsIDB4OUYsCisJMHhBMSwgMHgzMCwgMHg0RiwgMHhFOSwKIAotMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKLTB4QTIsIDB4MzgsIDB4NEYsIDB4RTksCisJMHgzOCwgMHgyMSwgMHgyQywgMHg5RiwKKwkweEEyLCAweDM4LCAweDRGLCAweEU5LAogCi0weDMxLCAweDUzLCAweDJGLCAweDlGLAotMHg5RCwgMHgzMSwgMHg0RiwgMHhFOSwKKwkweDMxLCAweDUzLCAweDJGLCAweDlGLAorCTB4OUQsIDB4MzEsIDB4NEYsIDB4RTksCiAKLTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0weDlFLCAweDM5LCAweDRGLCAweEU5LAorCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCisJMHg5RSwgMHgzOSwgMHg0RiwgMHhFOSwKIAotMHgyQSwgMHg0MywgMHg0QiwgMHhCRiwKLTB4MUEsIDB4NDMsIDB4NTMsIDB4QkYsCisJMHgyQSwgMHg0MywgMHg0QiwgMHhCRiwKKwkweDFBLCAweDQzLCAweDUzLCAweEJGLAogCi0weDMwLCAweDUwLCAweDJFLCAweDlGLAotMHgzNSwgMHgzMCwgMHg0RiwgMHhFOSwKKwkweDMwLCAweDUwLCAweDJFLCAweDlGLAorCTB4MzUsIDB4MzAsIDB4NEYsIDB4RTksCiAKLTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0weDM5LCAweDM4LCAweDRGLCAweEU5LAorCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCisJMHgzOSwgMHgzOCwgMHg0RiwgMHhFOSwKIAotMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLTB4ODAsIDB4MzEsIDB4NTcsIDB4RTksCisJMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKKwkweDgwLCAweDMxLCAweDU3LCAweEU5LAogCi0weDM5LCAweEU1LCAweDJDLCAweDlGLAotMHg4MSwgMHgzOSwgMHg1NywgMHhFOSwKKwkweDM5LCAweEU1LCAweDJDLCAweDlGLAorCTB4ODEsIDB4MzksIDB4NTcsIDB4RTksCiAKLTB4MzcsIDB4NDgsIDB4NTAsIDB4QkQsCi0weDhBLCAweDM2LCAweDIwLCAweEU5LAorCTB4MzcsIDB4NDgsIDB4NTAsIDB4QkQsCisJMHg4QSwgMHgzNiwgMHgyMCwgMHhFOSwKIAotMHg4NiwgMHg3NiwgMHg1NywgMHhFOSwKLTB4OEIsIDB4M0UsIDB4MjAsIDB4RTksCisJMHg4NiwgMHg3NiwgMHg1NywgMHhFOSwKKwkweDhCLCAweDNFLCAweDIwLCAweEU5LAogCi0weDgyLCAweDMwLCAweDU3LCAweEU5LAotMHg4NywgMHg3NywgMHg1NywgMHhFOSwKKwkweDgyLCAweDMwLCAweDU3LCAweEU5LAorCTB4ODcsIDB4NzcsIDB4NTcsIDB4RTksCiAKLTB4ODMsIDB4MzgsIDB4NTcsIDB4RTksCi0weDM1LCAweDQ5LCAweDUxLCAweEJELAorCTB4ODMsIDB4MzgsIDB4NTcsIDB4RTksCisJMHgzNSwgMHg0OSwgMHg1MSwgMHhCRCwKIAotMHg4NCwgMHgzMSwgMHg1RSwgMHhFOSwKLTB4MzAsIDB4MUYsIDB4NUYsIDB4RTksCisJMHg4NCwgMHgzMSwgMHg1RSwgMHhFOSwKKwkweDMwLCAweDFGLCAweDVGLCAweEU5LAogCi0weDg1LCAweDM5LCAweDVFLCAweEU5LAotMHg1NywgMHgyNSwgMHgyMCwgMHhFOSwKKwkweDg1LCAweDM5LCAweDVFLCAweEU5LAorCTB4NTcsIDB4MjUsIDB4MjAsIDB4RTksCiAKLTB4MkIsIDB4NDgsIDB4MjAsIDB4RTksCi0weDFELCAweDM3LCAweEUxLCAweEVBLAorCTB4MkIsIDB4NDgsIDB4MjAsIDB4RTksCisJMHgxRCwgMHgzNywgMHhFMSwgMHhFQSwKIAotMHgxRSwgMHgzNSwgMHhFMSwgMHhFQSwKLTB4MDAsIDB4RTAsCi0weDI2LCAweDc3LAorCTB4MUUsIDB4MzUsIDB4RTEsIDB4RUEsCisJMHgwMCwgMHhFMCwKKwkweDI2LCAweDc3LAogCi0weDI0LCAweDQ5LCAweDIwLCAweEU5LAotMHg5OSwgMHhGRiwgMHgyMCwgMHhFQSwKKwkweDI0LCAweDQ5LCAweDIwLCAweEU5LAorCTB4OTksIDB4RkYsIDB4MjAsIDB4RUEsCiAKLTB4MTYsIDB4MjYsIDB4MjAsIDB4RTksCi0weDU3LCAweDJFLCAweEJGLCAweEVBLAorCTB4MTYsIDB4MjYsIDB4MjAsIDB4RTksCisJMHg1NywgMHgyRSwgMHhCRiwgMHhFQSwKIAotMHgxQywgMHg0NiwgMHhBMCwgMHhFOCwKLTB4MjMsIDB4NEUsIDB4QTAsIDB4RTgsCisJMHgxQywgMHg0NiwgMHhBMCwgMHhFOCwKKwkweDIzLCAweDRFLCAweEEwLCAweEU4LAogCi0weDJCLCAweDU2LCAweEEwLCAweEU4LAotMHgxRCwgMHg0NywgMHhBMCwgMHhFOCwKKwkweDJCLCAweDU2LCAweEEwLCAweEU4LAorCTB4MUQsIDB4NDcsIDB4QTAsIDB4RTgsCiAKLTB4MjQsIDB4NEYsIDB4QTAsIDB4RTgsCi0weDJDLCAweDU3LCAweEEwLCAweEU4LAorCTB4MjQsIDB4NEYsIDB4QTAsIDB4RTgsCisJMHgyQywgMHg1NywgMHhBMCwgMHhFOCwKIAotMHgxQywgMHgwMCwKLTB4MjMsIDB4MDAsCi0weDJCLCAweDAwLAotMHgwMCwgMHhFMCwKKwkweDFDLCAweDAwLAorCTB4MjMsIDB4MDAsCisJMHgyQiwgMHgwMCwKKwkweDAwLCAweEUwLAogCi0weDFELCAweDAwLAotMHgyNCwgMHgwMCwKLTB4MkMsIDB4MDAsCi0weDAwLCAweEUwLAorCTB4MUQsIDB4MDAsCisJMHgyNCwgMHgwMCwKKwkweDJDLCAweDAwLAorCTB4MDAsIDB4RTAsCiAKLTB4MUMsIDB4NjUsCi0weDIzLCAweDY1LAotMHgyQiwgMHg2NSwKLTB4MDAsIDB4RTAsCisJMHgxQywgMHg2NSwKKwkweDIzLCAweDY1LAorCTB4MkIsIDB4NjUsCisJMHgwMCwgMHhFMCwKIAotMHgxRCwgMHg2NSwKLTB4MjQsIDB4NjUsCi0weDJDLCAweDY1LAotMHgwMCwgMHhFMCwKKwkweDFELCAweDY1LAorCTB4MjQsIDB4NjUsCisJMHgyQywgMHg2NSwKKwkweDAwLCAweEUwLAogCi0weDFDLCAweDIzLCAweDYwLCAweEVDLAotMHgzNiwgMHhENywgMHgzNiwgMHhBRCwKKwkweDFDLCAweDIzLCAweDYwLCAweEVDLAorCTB4MzYsIDB4RDcsIDB4MzYsIDB4QUQsCiAKLTB4MkIsIDB4ODAsIDB4NjAsIDB4RUMsCi0weDFELCAweDI0LCAweDYwLCAweEVDLAorCTB4MkIsIDB4ODAsIDB4NjAsIDB4RUMsCisJMHgxRCwgMHgyNCwgMHg2MCwgMHhFQywKIAotMHgzRSwgMHhENywgMHgzRSwgMHhBRCwKLTB4MkMsIDB4ODAsIDB4NjAsIDB4RUMsCisJMHgzRSwgMHhENywgMHgzRSwgMHhBRCwKKwkweDJDLCAweDgwLCAweDYwLCAweEVDLAogCi0weDFDLCAweDJCLCAweERFLCAweEU4LAotMHgyMywgMHg4MCwgMHhERSwgMHhFOCwKKwkweDFDLCAweDJCLCAweERFLCAweEU4LAorCTB4MjMsIDB4ODAsIDB4REUsIDB4RTgsCiAKLTB4MzYsIDB4ODAsIDB4MzYsIDB4QkQsCi0weDNFLCAweDgwLCAweDNFLCAweEJELAorCTB4MzYsIDB4ODAsIDB4MzYsIDB4QkQsCisJMHgzRSwgMHg4MCwgMHgzRSwgMHhCRCwKIAotMHgzMywgMHhENywgMHgxQywgMHhCRCwKLTB4M0IsIDB4RDcsIDB4MjMsIDB4QkQsCisJMHgzMywgMHhENywgMHgxQywgMHhCRCwKKwkweDNCLCAweEQ3LCAweDIzLCAweEJELAogCi0weDQ2LCAweDgwLCAweDQ2LCAweENGLAotMHg0RiwgMHg4MCwgMHg0RiwgMHhDRiwKKwkweDQ2LCAweDgwLCAweDQ2LCAweENGLAorCTB4NEYsIDB4ODAsIDB4NEYsIDB4Q0YsCiAKLTB4NTYsIDB4MzMsIDB4NTYsIDB4Q0YsCi0weDQ3LCAweDNCLCAweDQ3LCAweENGLAorCTB4NTYsIDB4MzMsIDB4NTYsIDB4Q0YsCisJMHg0NywgMHgzQiwgMHg0NywgMHhDRiwKIAotMHhDMSwgMHhGRiwgMHgyMCwgMHhFQSwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHhDMSwgMHhGRiwgMHgyMCwgMHhFQSwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDRFLCAweDMzLCAweDRFLCAweENGLAotMHg1NywgMHgzQiwgMHg1NywgMHhDRiwKKwkweDRFLCAweDMzLCAweDRFLCAweENGLAorCTB4NTcsIDB4M0IsIDB4NTcsIDB4Q0YsCiAKLTB4ODcsIDB4RkYsIDB4MjAsIDB4RUEsCi0weDU3LCAweEMwLCAweEJGLCAweEVBLAorCTB4ODcsIDB4RkYsIDB4MjAsIDB4RUEsCisJMHg1NywgMHhDMCwgMHhCRiwgMHhFQSwKIAotMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKLTB4MDAsIDB4MDAsIDB4RDgsIDB4RUMsCisJMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKKwkweDAwLCAweDAwLCAweEQ4LCAweEVDLAogCiB9OwogCiBzdGF0aWMgdW5zaWduZWQgY2hhciB3YXJwX2c0MDBfdGd6c2ZbXSA9IHsKIAotMHgwMCwgMHg4OCwgMHg5OCwgMHhFOSwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgwMCwgMHg4OCwgMHg5OCwgMHhFOSwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweEEwLCAweEU5LAotMHgwMCwgMHgwMCwgMHhEOCwgMHhFQywKKwkweDAwLCAweDgwLCAweEEwLCAweEU5LAorCTB4MDAsIDB4MDAsIDB4RDgsIDB4RUMsCiAKLTB4RkYsIDB4ODAsIDB4QzAsIDB4RTksCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4RkYsIDB4ODAsIDB4QzAsIDB4RTksCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHgyMiwgMHg0MCwgMHg0OCwgMHhCRiwKLTB4MkEsIDB4NDAsIDB4NTAsIDB4QkYsCisJMHgyMiwgMHg0MCwgMHg0OCwgMHhCRiwKKwkweDJBLCAweDQwLCAweDUwLCAweEJGLAogCi0weDMyLCAweDQxLCAweDQ5LCAweEJGLAotMHgzQSwgMHg0MSwgMHg1MSwgMHhCRiwKKwkweDMyLCAweDQxLCAweDQ5LCAweEJGLAorCTB4M0EsIDB4NDEsIDB4NTEsIDB4QkYsCiAKLTB4QzMsIDB4NkIsCi0weENCLCAweDZCLAotMHgwMCwgMHg4OCwgMHg5OCwgMHhFOSwKKwkweEMzLCAweDZCLAorCTB4Q0IsIDB4NkIsCisJMHgwMCwgMHg4OCwgMHg5OCwgMHhFOSwKIAotMHg3MywgMHg3QiwgMHhDOCwgMHhFQywKLTB4OTYsIDB4RTIsCi0weDQxLCAweDA0LAorCTB4NzMsIDB4N0IsIDB4QzgsIDB4RUMsCisJMHg5NiwgMHhFMiwKKwkweDQxLCAweDA0LAogCi0weDdCLCAweDQzLCAweEEwLCAweEU4LAotMHg3MywgMHg0QiwgMHhBMCwgMHhFOCwKKwkweDdCLCAweDQzLCAweEEwLCAweEU4LAorCTB4NzMsIDB4NEIsIDB4QTAsIDB4RTgsCiAKLTB4QUQsIDB4RUUsIDB4MjksIDB4OUYsCi0weDAwLCAweEUwLAotMHg0OSwgMHgwNCwKKwkweEFELCAweEVFLCAweDI5LCAweDlGLAorCTB4MDAsIDB4RTAsCisJMHg0OSwgMHgwNCwKIAotMHg5MCwgMHhFMiwKLTB4NTEsIDB4MDQsCi0weDMxLCAweDQ2LCAweEIxLCAweEU4LAorCTB4OTAsIDB4RTIsCisJMHg1MSwgMHgwNCwKKwkweDMxLCAweDQ2LCAweEIxLCAweEU4LAogCi0weDQ5LCAweDQxLCAweEMwLCAweEVDLAotMHgzOSwgMHg1NywgMHhCMSwgMHhFOCwKKwkweDQ5LCAweDQxLCAweEMwLCAweEVDLAorCTB4MzksIDB4NTcsIDB4QjEsIDB4RTgsCiAKLTB4MDAsIDB4MDQsCi0weDQ2LCAweEUyLAotMHg3MywgMHg1MywgMHhBMCwgMHhFOCwKKwkweDAwLCAweDA0LAorCTB4NDYsIDB4RTIsCisJMHg3MywgMHg1MywgMHhBMCwgMHhFOCwKIAotMHg1MSwgMHg0MSwgMHhDMCwgMHhFQywKLTB4MzEsIDB4MDAsCi0weDM5LCAweDAwLAorCTB4NTEsIDB4NDEsIDB4QzAsIDB4RUMsCisJMHgzMSwgMHgwMCwKKwkweDM5LCAweDAwLAogCi0weDZBLCAweDgwLCAweDE1LCAweEVBLAotMHgwOCwgMHgwNCwKLTB4MTAsIDB4MDQsCisJMHg2QSwgMHg4MCwgMHgxNSwgMHhFQSwKKwkweDA4LCAweDA0LAorCTB4MTAsIDB4MDQsCiAKLTB4NTEsIDB4NDksIDB4QzAsIDB4RUMsCi0weDJGLCAweDQxLCAweDYwLCAweEVBLAorCTB4NTEsIDB4NDksIDB4QzAsIDB4RUMsCisJMHgyRiwgMHg0MSwgMHg2MCwgMHhFQSwKIAotMHgzMSwgMHgyMCwKLTB4MzksIDB4MjAsCi0weDFGLCAweDQyLCAweEEwLCAweEU4LAorCTB4MzEsIDB4MjAsCisJMHgzOSwgMHgyMCwKKwkweDFGLCAweDQyLCAweEEwLCAweEU4LAogCi0weDJBLCAweDQyLCAweDRBLCAweEJGLAotMHgyNywgMHg0QSwgMHhBMCwgMHhFOCwKKwkweDJBLCAweDQyLCAweDRBLCAweEJGLAorCTB4MjcsIDB4NEEsIDB4QTAsIDB4RTgsCiAKLTB4MUEsIDB4NDIsIDB4NTIsIDB4QkYsCi0weDFFLCAweDQ5LCAweDYwLCAweEVBLAorCTB4MUEsIDB4NDIsIDB4NTIsIDB4QkYsCisJMHgxRSwgMHg0OSwgMHg2MCwgMHhFQSwKIAotMHg3MywgMHg3QiwgMHhDOCwgMHhFQywKLTB4MjYsIDB4NTEsIDB4NjAsIDB4RUEsCisJMHg3MywgMHg3QiwgMHhDOCwgMHhFQywKKwkweDI2LCAweDUxLCAweDYwLCAweEVBLAogCi0weDMyLCAweDQwLCAweDQ4LCAweEJELAotMHgyMiwgMHg0MCwgMHg1MCwgMHhCRCwKKwkweDMyLCAweDQwLCAweDQ4LCAweEJELAorCTB4MjIsIDB4NDAsIDB4NTAsIDB4QkQsCiAKLTB4MTIsIDB4NDEsIDB4NDksIDB4QkQsCi0weDNBLCAweDQxLCAweDUxLCAweEJELAorCTB4MTIsIDB4NDEsIDB4NDksIDB4QkQsCisJMHgzQSwgMHg0MSwgMHg1MSwgMHhCRCwKIAotMHhCRiwgMHgyRiwgMHgyNiwgMHhCRCwKLTB4MDAsIDB4RTAsCi0weDdCLCAweDcyLAorCTB4QkYsIDB4MkYsIDB4MjYsIDB4QkQsCisJMHgwMCwgMHhFMCwKKwkweDdCLCAweDcyLAogCi0weDMyLCAweDIwLAotMHgyMiwgMHgyMCwKLTB4MTIsIDB4MjAsCi0weDNBLCAweDIwLAorCTB4MzIsIDB4MjAsCisJMHgyMiwgMHgyMCwKKwkweDEyLCAweDIwLAorCTB4M0EsIDB4MjAsCiAKLTB4NDYsIDB4MzEsIDB4NDYsIDB4QkYsCi0weDRFLCAweDMxLCAweDRFLCAweEJGLAorCTB4NDYsIDB4MzEsIDB4NDYsIDB4QkYsCisJMHg0RSwgMHgzMSwgMHg0RSwgMHhCRiwKIAotMHhCMywgMHhFMiwgMHgyRCwgMHg5RiwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHhCMywgMHhFMiwgMHgyRCwgMHg5RiwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDU2LCAweDMxLCAweDU2LCAweEJGLAotMHg0NywgMHgzOSwgMHg0NywgMHhCRiwKKwkweDU2LCAweDMxLCAweDU2LCAweEJGLAorCTB4NDcsIDB4MzksIDB4NDcsIDB4QkYsCiAKLTB4NEYsIDB4MzksIDB4NEYsIDB4QkYsCi0weDU3LCAweDM5LCAweDU3LCAweEJGLAorCTB4NEYsIDB4MzksIDB4NEYsIDB4QkYsCisJMHg1NywgMHgzOSwgMHg1NywgMHhCRiwKIAotMHg1QywgMHg4MCwgMHgwNywgMHhFQSwKLTB4MjQsIDB4NDEsIDB4MjAsIDB4RTksCisJMHg1QywgMHg4MCwgMHgwNywgMHhFQSwKKwkweDI0LCAweDQxLCAweDIwLCAweEU5LAogCi0weDQyLCAweDczLCAweEY4LCAweEVDLAotMHgwMCwgMHhFMCwKLTB4MkQsIDB4NzMsCisJMHg0MiwgMHg3MywgMHhGOCwgMHhFQywKKwkweDAwLCAweEUwLAorCTB4MkQsIDB4NzMsCiAKLTB4MzMsIDB4NzIsCi0weDBDLCAweEUzLAotMHhBNSwgMHgyRiwgMHgxRSwgMHhCRCwKKwkweDMzLCAweDcyLAorCTB4MEMsIDB4RTMsCisJMHhBNSwgMHgyRiwgMHgxRSwgMHhCRCwKIAotMHg0MywgMHg0MywgMHgyRCwgMHhERiwKLTB4NEIsIDB4NEIsIDB4MkQsIDB4REYsCisJMHg0MywgMHg0MywgMHgyRCwgMHhERiwKKwkweDRCLCAweDRCLCAweDJELCAweERGLAogCi0weEFFLCAweDFFLCAweDI2LCAweEJELAotMHg1OCwgMHhFMywKLTB4MzMsIDB4NjYsCisJMHhBRSwgMHgxRSwgMHgyNiwgMHhCRCwKKwkweDU4LCAweEUzLAorCTB4MzMsIDB4NjYsCiAKLTB4NTMsIDB4NTMsIDB4MkQsIDB4REYsCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4NTMsIDB4NTMsIDB4MkQsIDB4REYsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKIAotMHhCOCwgMHgzOCwgMHgzMywgMHhCRiwKLTB4MDAsIDB4RTAsCi0weDU5LCAweEUzLAorCTB4QjgsIDB4MzgsIDB4MzMsIDB4QkYsCisJMHgwMCwgMHhFMCwKKwkweDU5LCAweEUzLAogCi0weDFFLCAweDEyLCAweDQxLCAweEU5LAotMHgxQSwgMHgyMiwgMHg0MSwgMHhFOSwKKwkweDFFLCAweDEyLCAweDQxLCAweEU5LAorCTB4MUEsIDB4MjIsIDB4NDEsIDB4RTksCiAKLTB4MkIsIDB4NDAsIDB4M0QsIDB4RTksCi0weDNGLCAweDRCLCAweEEwLCAweEU4LAorCTB4MkIsIDB4NDAsIDB4M0QsIDB4RTksCisJMHgzRiwgMHg0QiwgMHhBMCwgMHhFOCwKIAotMHgyRCwgMHg3MywKLTB4MzAsIDB4NzYsCi0weDA1LCAweDgwLCAweDNELCAweEVBLAorCTB4MkQsIDB4NzMsCisJMHgzMCwgMHg3NiwKKwkweDA1LCAweDgwLCAweDNELCAweEVBLAogCi0weDM3LCAweDQzLCAweEEwLCAweEU4LAotMHgzRCwgMHg1MywgMHhBMCwgMHhFOCwKKwkweDM3LCAweDQzLCAweEEwLCAweEU4LAorCTB4M0QsIDB4NTMsIDB4QTAsIDB4RTgsCiAKLTB4NDgsIDB4NzAsIDB4RjgsIDB4RUMsCi0weDJCLCAweDQ4LCAweDNDLCAweEU5LAorCTB4NDgsIDB4NzAsIDB4RjgsIDB4RUMsCisJMHgyQiwgMHg0OCwgMHgzQywgMHhFOSwKIAotMHgxRiwgMHgyNywgMHhCQywgMHhFOCwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHgxRiwgMHgyNywgMHhCQywgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDAwLCAweDgwLCAweDAwLCAweEU4LAotMHgwMCwgMHg4MCwgMHgwMCwgMHhFOCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCiAKLTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCi0weDE1LCAweEMwLCAweDIwLCAweEU5LAorCTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCisJMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKIAotMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKLTB4MTUsIDB4QzAsIDB4MjAsIDB4RTksCisJMHgxNSwgMHhDMCwgMHgyMCwgMHhFOSwKKwkweDE1LCAweEMwLCAweDIwLCAweEU5LAogCi0weDE4LCAweDNBLCAweDQxLCAweEU5LAotMHgxRCwgMHgzMiwgMHg0MSwgMHhFOSwKKwkweDE4LCAweDNBLCAweDQxLCAweEU5LAorCTB4MUQsIDB4MzIsIDB4NDEsIDB4RTksCiAKLTB4MkEsIDB4NDAsIDB4MjAsIDB4RTksCi0weDU2LCAweDNELCAweDU2LCAweERGLAorCTB4MkEsIDB4NDAsIDB4MjAsIDB4RTksCisJMHg1NiwgMHgzRCwgMHg1NiwgMHhERiwKIAotMHg0NiwgMHgzNywgMHg0NiwgMHhERiwKLTB4NEUsIDB4M0YsIDB4NEUsIDB4REYsCisJMHg0NiwgMHgzNywgMHg0NiwgMHhERiwKKwkweDRFLCAweDNGLCAweDRFLCAweERGLAogCi0weDE2LCAweDMwLCAweDIwLCAweEU5LAotMHg0RiwgMHgzRiwgMHg0RiwgMHhERiwKKwkweDE2LCAweDMwLCAweDIwLCAweEU5LAorCTB4NEYsIDB4M0YsIDB4NEYsIDB4REYsCiAKLTB4NDcsIDB4MzcsIDB4NDcsIDB4REYsCi0weDU3LCAweDNELCAweDU3LCAweERGLAorCTB4NDcsIDB4MzcsIDB4NDcsIDB4REYsCisJMHg1NywgMHgzRCwgMHg1NywgMHhERiwKIAotMHgzMiwgMHgzMiwgMHgyRCwgMHhERiwKLTB4MjIsIDB4MjIsIDB4MkQsIDB4REYsCisJMHgzMiwgMHgzMiwgMHgyRCwgMHhERiwKKwkweDIyLCAweDIyLCAweDJELCAweERGLAogCi0weDEyLCAweDEyLCAweDJELCAweERGLAotMHgzQSwgMHgzQSwgMHgyRCwgMHhERiwKKwkweDEyLCAweDEyLCAweDJELCAweERGLAorCTB4M0EsIDB4M0EsIDB4MkQsIDB4REYsCiAKLTB4MjcsIDB4Q0YsIDB4NzQsIDB4QzIsCi0weDM3LCAweENGLCAweDc0LCAweEM0LAorCTB4MjcsIDB4Q0YsIDB4NzQsIDB4QzIsCisJMHgzNywgMHhDRiwgMHg3NCwgMHhDNCwKIAotMHgwQSwgMHg0NCwgMHg0QywgMHhCMCwKLTB4MDIsIDB4NDQsIDB4NTQsIDB4QjAsCisJMHgwQSwgMHg0NCwgMHg0QywgMHhCMCwKKwkweDAyLCAweDQ0LCAweDU0LCAweEIwLAogCi0weDNELCAweENGLCAweDc0LCAweEMwLAotMHgzNCwgMHgzNywgMHgyMCwgMHhFOSwKKwkweDNELCAweENGLCAweDc0LCAweEMwLAorCTB4MzQsIDB4MzcsIDB4MjAsIDB4RTksCiAKLTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCi0weDM4LCAweDI3LCAweDIwLCAweEU5LAorCTB4MzEsIDB4NTMsIDB4MkYsIDB4OUYsCisJMHgzOCwgMHgyNywgMHgyMCwgMHhFOSwKIAotMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKLTB4M0MsIDB4M0QsIDB4MjAsIDB4RTksCisJMHgzOSwgMHhFNSwgMHgyQywgMHg5RiwKKwkweDNDLCAweDNELCAweDIwLCAweEU5LAogCi0weDJBLCAweDQ0LCAweDRDLCAweEIyLAotMHgxQSwgMHg0NCwgMHg1NCwgMHhCMiwKKwkweDJBLCAweDQ0LCAweDRDLCAweEIyLAorCTB4MUEsIDB4NDQsIDB4NTQsIDB4QjIsCiAKLTB4MkUsIDB4ODAsIDB4M0EsIDB4RUEsCi0weDBBLCAweDIwLAotMHgwMiwgMHgyMCwKKwkweDJFLCAweDgwLCAweDNBLCAweEVBLAorCTB4MEEsIDB4MjAsCisJMHgwMiwgMHgyMCwKIAotMHgyNywgMHhDRiwgMHg3NSwgMHhDMCwKLTB4MkEsIDB4MjAsCi0weDFBLCAweDIwLAorCTB4MjcsIDB4Q0YsIDB4NzUsIDB4QzAsCisJMHgyQSwgMHgyMCwKKwkweDFBLCAweDIwLAogCi0weDMwLCAweDUwLCAweDJFLCAweDlGLAotMHgzMiwgMHgzMSwgMHg1RiwgMHhFOSwKKwkweDMwLCAweDUwLCAweDJFLCAweDlGLAorCTB4MzIsIDB4MzEsIDB4NUYsIDB4RTksCiAKLTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0weDMzLCAweDM5LCAweDVGLCAweEU5LAorCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCisJMHgzMywgMHgzOSwgMHg1RiwgMHhFOSwKIAotMHgzRCwgMHhDRiwgMHg3NSwgMHhDMiwKLTB4MzcsIDB4Q0YsIDB4NzUsIDB4QzQsCisJMHgzRCwgMHhDRiwgMHg3NSwgMHhDMiwKKwkweDM3LCAweENGLCAweDc1LCAweEM0LAogCi0weDMxLCAweDUzLCAweDJGLCAweDlGLAotMHhBNiwgMHgyNywgMHgyMCwgMHhFOSwKKwkweDMxLCAweDUzLCAweDJGLCAweDlGLAorCTB4QTYsIDB4MjcsIDB4MjAsIDB4RTksCiAKLTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0weEEzLCAweDNELCAweDIwLCAweEU5LAorCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCisJMHhBMywgMHgzRCwgMHgyMCwgMHhFOSwKIAotMHgyQSwgMHg0NCwgMHg0QywgMHhCNCwKLTB4MUEsIDB4NDQsIDB4NTQsIDB4QjQsCisJMHgyQSwgMHg0NCwgMHg0QywgMHhCNCwKKwkweDFBLCAweDQ0LCAweDU0LCAweEI0LAogCi0weDBBLCAweDQ1LCAweDRELCAweEIwLAotMHgwMiwgMHg0NSwgMHg1NSwgMHhCMCwKKwkweDBBLCAweDQ1LCAweDRELCAweEIwLAorCTB4MDIsIDB4NDUsIDB4NTUsIDB4QjAsCiAKLTB4ODgsIDB4NzMsIDB4NUUsIDB4RTksCi0weDJBLCAweDIwLAotMHgxQSwgMHgyMCwKKwkweDg4LCAweDczLCAweDVFLCAweEU5LAorCTB4MkEsIDB4MjAsCisJMHgxQSwgMHgyMCwKIAotMHhBMCwgMHgzNywgMHgyMCwgMHhFOSwKLTB4MEEsIDB4MjAsCi0weDAyLCAweDIwLAorCTB4QTAsIDB4MzcsIDB4MjAsIDB4RTksCisJMHgwQSwgMHgyMCwKKwkweDAyLCAweDIwLAogCi0weDMxLCAweDUzLCAweDJGLCAweDlGLAotMHgzRSwgMHgzMCwgMHg0RiwgMHhFOSwKKwkweDMxLCAweDUzLCAweDJGLCAweDlGLAorCTB4M0UsIDB4MzAsIDB4NEYsIDB4RTksCiAKLTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0weDNGLCAweDM4LCAweDRGLCAweEU5LAorCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCisJMHgzRiwgMHgzOCwgMHg0RiwgMHhFOSwKIAotMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLTB4M0EsIDB4MzEsIDB4NEYsIDB4RTksCisJMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKKwkweDNBLCAweDMxLCAweDRGLCAweEU5LAogCi0weDM4LCAweDIxLCAweDJDLCAweDlGLAotMHgzQiwgMHgzOSwgMHg0RiwgMHhFOSwKKwkweDM4LCAweDIxLCAweDJDLCAweDlGLAorCTB4M0IsIDB4MzksIDB4NEYsIDB4RTksCiAKLTB4MkEsIDB4NDUsIDB4NEQsIDB4QjIsCi0weDFBLCAweDQ1LCAweDU1LCAweEIyLAorCTB4MkEsIDB4NDUsIDB4NEQsIDB4QjIsCisJMHgxQSwgMHg0NSwgMHg1NSwgMHhCMiwKIAotMHgwQSwgMHg0NSwgMHg0RCwgMHhCNCwKLTB4MDIsIDB4NDUsIDB4NTUsIDB4QjQsCisJMHgwQSwgMHg0NSwgMHg0RCwgMHhCNCwKKwkweDAyLCAweDQ1LCAweDU1LCAweEI0LAogCi0weDI3LCAweENGLCAweDc1LCAweEM2LAotMHgyQSwgMHgyMCwKLTB4MUEsIDB4MjAsCisJMHgyNywgMHhDRiwgMHg3NSwgMHhDNiwKKwkweDJBLCAweDIwLAorCTB4MUEsIDB4MjAsCiAKLTB4QTcsIDB4MzAsIDB4NEYsIDB4RTksCi0weDBBLCAweDIwLAotMHgwMiwgMHgyMCwKKwkweEE3LCAweDMwLCAweDRGLCAweEU5LAorCTB4MEEsIDB4MjAsCisJMHgwMiwgMHgyMCwKIAotMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLTB4MzEsIDB4MjcsIDB4MjAsIDB4RTksCisJMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKKwkweDMxLCAweDI3LCAweDIwLCAweEU5LAogCi0weDM5LCAweEU1LCAweDJDLCAweDlGLAotMHhBOCwgMHgzOCwgMHg0RiwgMHhFOSwKKwkweDM5LCAweEU1LCAweDJDLCAweDlGLAorCTB4QTgsIDB4MzgsIDB4NEYsIDB4RTksCiAKLTB4MkEsIDB4NDUsIDB4NEQsIDB4QjYsCi0weDFBLCAweDQ1LCAweDU1LCAweEI2LAorCTB4MkEsIDB4NDUsIDB4NEQsIDB4QjYsCisJMHgxQSwgMHg0NSwgMHg1NSwgMHhCNiwKIAotMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKLTB4MzYsIDB4MzEsIDB4NEYsIDB4RTksCisJMHgzMCwgMHg1MCwgMHgyRSwgMHg5RiwKKwkweDM2LCAweDMxLCAweDRGLCAweEU5LAogCi0weDM4LCAweDIxLCAweDJDLCAweDlGLAotMHgzNywgMHgzOSwgMHg0RiwgMHhFOSwKKwkweDM4LCAweDIxLCAweDJDLCAweDlGLAorCTB4MzcsIDB4MzksIDB4NEYsIDB4RTksCiAKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCi0weDJBLCAweDIwLAotMHgxQSwgMHgyMCwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAorCTB4MkEsIDB4MjAsCisJMHgxQSwgMHgyMCwKIAotMHgyQSwgMHg0NiwgMHg0RSwgMHhCRiwKLTB4MUEsIDB4NDYsIDB4NTYsIDB4QkYsCisJMHgyQSwgMHg0NiwgMHg0RSwgMHhCRiwKKwkweDFBLCAweDQ2LCAweDU2LCAweEJGLAogCi0weDMxLCAweDUzLCAweDJGLCAweDlGLAotMHhBNCwgMHgzMSwgMHg0RiwgMHhFOSwKKwkweDMxLCAweDUzLCAweDJGLCAweDlGLAorCTB4QTQsIDB4MzEsIDB4NEYsIDB4RTksCiAKLTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0weEE1LCAweDM5LCAweDRGLCAweEU5LAorCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCisJMHhBNSwgMHgzOSwgMHg0RiwgMHhFOSwKIAotMHgwQSwgMHg0NywgMHg0RiwgMHhCRiwKLTB4MDIsIDB4NDcsIDB4NTcsIDB4QkYsCisJMHgwQSwgMHg0NywgMHg0RiwgMHhCRiwKKwkweDAyLCAweDQ3LCAweDU3LCAweEJGLAogCi0weDMxLCAweDUzLCAweDJGLCAweDlGLAotMHhBMSwgMHgzMCwgMHg0RiwgMHhFOSwKKwkweDMxLCAweDUzLCAweDJGLCAweDlGLAorCTB4QTEsIDB4MzAsIDB4NEYsIDB4RTksCiAKLTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCi0weEEyLCAweDM4LCAweDRGLCAweEU5LAorCTB4MzksIDB4RTUsIDB4MkMsIDB4OUYsCisJMHhBMiwgMHgzOCwgMHg0RiwgMHhFOSwKIAotMHgyQSwgMHg0MywgMHg0QiwgMHhCRiwKLTB4MUEsIDB4NDMsIDB4NTMsIDB4QkYsCisJMHgyQSwgMHg0MywgMHg0QiwgMHhCRiwKKwkweDFBLCAweDQzLCAweDUzLCAweEJGLAogCi0weDMwLCAweDUwLCAweDJFLCAweDlGLAotMHgzNSwgMHgzMSwgMHg0RiwgMHhFOSwKKwkweDMwLCAweDUwLCAweDJFLCAweDlGLAorCTB4MzUsIDB4MzEsIDB4NEYsIDB4RTksCiAKLTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCi0weDM5LCAweDM5LCAweDRGLCAweEU5LAorCTB4MzgsIDB4MjEsIDB4MkMsIDB4OUYsCisJMHgzOSwgMHgzOSwgMHg0RiwgMHhFOSwKIAotMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKLTB4ODAsIDB4MzEsIDB4NTcsIDB4RTksCisJMHgzMSwgMHg1MywgMHgyRiwgMHg5RiwKKwkweDgwLCAweDMxLCAweDU3LCAweEU5LAogCi0weDM5LCAweEU1LCAweDJDLCAweDlGLAotMHg4MSwgMHgzOSwgMHg1NywgMHhFOSwKKwkweDM5LCAweEU1LCAweDJDLCAweDlGLAorCTB4ODEsIDB4MzksIDB4NTcsIDB4RTksCiAKLTB4MzcsIDB4NDgsIDB4NTAsIDB4QkQsCi0weDhBLCAweDM2LCAweDIwLCAweEU5LAorCTB4MzcsIDB4NDgsIDB4NTAsIDB4QkQsCisJMHg4QSwgMHgzNiwgMHgyMCwgMHhFOSwKIAotMHg4NiwgMHg3NiwgMHg1NywgMHhFOSwKLTB4OEIsIDB4M0UsIDB4MjAsIDB4RTksCisJMHg4NiwgMHg3NiwgMHg1NywgMHhFOSwKKwkweDhCLCAweDNFLCAweDIwLCAweEU5LAogCi0weDgyLCAweDMwLCAweDU3LCAweEU5LAotMHg4NywgMHg3NywgMHg1NywgMHhFOSwKKwkweDgyLCAweDMwLCAweDU3LCAweEU5LAorCTB4ODcsIDB4NzcsIDB4NTcsIDB4RTksCiAKLTB4ODMsIDB4MzgsIDB4NTcsIDB4RTksCi0weDM1LCAweDQ5LCAweDUxLCAweEJELAorCTB4ODMsIDB4MzgsIDB4NTcsIDB4RTksCisJMHgzNSwgMHg0OSwgMHg1MSwgMHhCRCwKIAotMHg4NCwgMHgzMSwgMHg1RSwgMHhFOSwKLTB4MzAsIDB4MUYsIDB4NUYsIDB4RTksCisJMHg4NCwgMHgzMSwgMHg1RSwgMHhFOSwKKwkweDMwLCAweDFGLCAweDVGLCAweEU5LAogCi0weDg1LCAweDM5LCAweDVFLCAweEU5LAotMHg1NywgMHgyNSwgMHgyMCwgMHhFOSwKKwkweDg1LCAweDM5LCAweDVFLCAweEU5LAorCTB4NTcsIDB4MjUsIDB4MjAsIDB4RTksCiAKLTB4MkIsIDB4NDgsIDB4MjAsIDB4RTksCi0weDFELCAweDM3LCAweEUxLCAweEVBLAorCTB4MkIsIDB4NDgsIDB4MjAsIDB4RTksCisJMHgxRCwgMHgzNywgMHhFMSwgMHhFQSwKIAotMHgxRSwgMHgzNSwgMHhFMSwgMHhFQSwKLTB4MDAsIDB4RTAsCi0weDI2LCAweDc3LAorCTB4MUUsIDB4MzUsIDB4RTEsIDB4RUEsCisJMHgwMCwgMHhFMCwKKwkweDI2LCAweDc3LAogCi0weDI0LCAweDQ5LCAweDIwLCAweEU5LAotMHg5RCwgMHhGRiwgMHgyMCwgMHhFQSwKKwkweDI0LCAweDQ5LCAweDIwLCAweEU5LAorCTB4OUQsIDB4RkYsIDB4MjAsIDB4RUEsCiAKLTB4MTYsIDB4MjYsIDB4MjAsIDB4RTksCi0weDU3LCAweDJFLCAweEJGLCAweEVBLAorCTB4MTYsIDB4MjYsIDB4MjAsIDB4RTksCisJMHg1NywgMHgyRSwgMHhCRiwgMHhFQSwKIAotMHgxQywgMHg0NiwgMHhBMCwgMHhFOCwKLTB4MjMsIDB4NEUsIDB4QTAsIDB4RTgsCisJMHgxQywgMHg0NiwgMHhBMCwgMHhFOCwKKwkweDIzLCAweDRFLCAweEEwLCAweEU4LAogCi0weDJCLCAweDU2LCAweEEwLCAweEU4LAotMHgxRCwgMHg0NywgMHhBMCwgMHhFOCwKKwkweDJCLCAweDU2LCAweEEwLCAweEU4LAorCTB4MUQsIDB4NDcsIDB4QTAsIDB4RTgsCiAKLTB4MjQsIDB4NEYsIDB4QTAsIDB4RTgsCi0weDJDLCAweDU3LCAweEEwLCAweEU4LAorCTB4MjQsIDB4NEYsIDB4QTAsIDB4RTgsCisJMHgyQywgMHg1NywgMHhBMCwgMHhFOCwKIAotMHgxQywgMHgwMCwKLTB4MjMsIDB4MDAsCi0weDJCLCAweDAwLAotMHgwMCwgMHhFMCwKKwkweDFDLCAweDAwLAorCTB4MjMsIDB4MDAsCisJMHgyQiwgMHgwMCwKKwkweDAwLCAweEUwLAogCi0weDFELCAweDAwLAotMHgyNCwgMHgwMCwKLTB4MkMsIDB4MDAsCi0weDAwLCAweEUwLAorCTB4MUQsIDB4MDAsCisJMHgyNCwgMHgwMCwKKwkweDJDLCAweDAwLAorCTB4MDAsIDB4RTAsCiAKLTB4MUMsIDB4NjUsCi0weDIzLCAweDY1LAotMHgyQiwgMHg2NSwKLTB4MDAsIDB4RTAsCisJMHgxQywgMHg2NSwKKwkweDIzLCAweDY1LAorCTB4MkIsIDB4NjUsCisJMHgwMCwgMHhFMCwKIAotMHgxRCwgMHg2NSwKLTB4MjQsIDB4NjUsCi0weDJDLCAweDY1LAotMHgwMCwgMHhFMCwKKwkweDFELCAweDY1LAorCTB4MjQsIDB4NjUsCisJMHgyQywgMHg2NSwKKwkweDAwLCAweEUwLAogCi0weDFDLCAweDIzLCAweDYwLCAweEVDLAotMHgzNiwgMHhENywgMHgzNiwgMHhBRCwKKwkweDFDLCAweDIzLCAweDYwLCAweEVDLAorCTB4MzYsIDB4RDcsIDB4MzYsIDB4QUQsCiAKLTB4MkIsIDB4ODAsIDB4NjAsIDB4RUMsCi0weDFELCAweDI0LCAweDYwLCAweEVDLAorCTB4MkIsIDB4ODAsIDB4NjAsIDB4RUMsCisJMHgxRCwgMHgyNCwgMHg2MCwgMHhFQywKIAotMHgzRSwgMHhENywgMHgzRSwgMHhBRCwKLTB4MkMsIDB4ODAsIDB4NjAsIDB4RUMsCisJMHgzRSwgMHhENywgMHgzRSwgMHhBRCwKKwkweDJDLCAweDgwLCAweDYwLCAweEVDLAogCi0weDFDLCAweDJCLCAweERFLCAweEU4LAotMHgyMywgMHg4MCwgMHhERSwgMHhFOCwKKwkweDFDLCAweDJCLCAweERFLCAweEU4LAorCTB4MjMsIDB4ODAsIDB4REUsIDB4RTgsCiAKLTB4MzYsIDB4ODAsIDB4MzYsIDB4QkQsCi0weDNFLCAweDgwLCAweDNFLCAweEJELAorCTB4MzYsIDB4ODAsIDB4MzYsIDB4QkQsCisJMHgzRSwgMHg4MCwgMHgzRSwgMHhCRCwKIAotMHgzMywgMHhENywgMHgxQywgMHhCRCwKLTB4M0IsIDB4RDcsIDB4MjMsIDB4QkQsCisJMHgzMywgMHhENywgMHgxQywgMHhCRCwKKwkweDNCLCAweEQ3LCAweDIzLCAweEJELAogCi0weDQ2LCAweDgwLCAweDQ2LCAweENGLAotMHg0RiwgMHg4MCwgMHg0RiwgMHhDRiwKKwkweDQ2LCAweDgwLCAweDQ2LCAweENGLAorCTB4NEYsIDB4ODAsIDB4NEYsIDB4Q0YsCiAKLTB4NTYsIDB4MzMsIDB4NTYsIDB4Q0YsCi0weDQ3LCAweDNCLCAweDQ3LCAweENGLAorCTB4NTYsIDB4MzMsIDB4NTYsIDB4Q0YsCisJMHg0NywgMHgzQiwgMHg0NywgMHhDRiwKIAotMHhDNSwgMHhGRiwgMHgyMCwgMHhFQSwKLTB4MDAsIDB4ODAsIDB4MDAsIDB4RTgsCisJMHhDNSwgMHhGRiwgMHgyMCwgMHhFQSwKKwkweDAwLCAweDgwLCAweDAwLCAweEU4LAogCi0weDRFLCAweDMzLCAweDRFLCAweENGLAotMHg1NywgMHgzQiwgMHg1NywgMHhDRiwKKwkweDRFLCAweDMzLCAweDRFLCAweENGLAorCTB4NTcsIDB4M0IsIDB4NTcsIDB4Q0YsCiAKLTB4OEIsIDB4RkYsIDB4MjAsIDB4RUEsCi0weDU3LCAweEMwLCAweEJGLCAweEVBLAorCTB4OEIsIDB4RkYsIDB4MjAsIDB4RUEsCisJMHg1NywgMHhDMCwgMHhCRiwgMHhFQSwKIAotMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKLTB4MDAsIDB4MDAsIDB4RDgsIDB4RUMsCisJMHgwMCwgMHg4MCwgMHhBMCwgMHhFOSwKKwkweDAwLCAweDAwLCAweEQ4LCAweEVDLAogCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9tZ2Ffd2FycC5jIGIvZHJpdmVycy9jaGFyL2RybS9tZ2Ffd2FycC5jCmluZGV4IDU1Y2NjOGEuLmQ2N2Y0OTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vbWdhX3dhcnAuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL21nYV93YXJwLmMKQEAgLTMzLDggKzMzLDcgQEAKICNpbmNsdWRlICJtZ2FfZHJ2LmgiCiAjaW5jbHVkZSAibWdhX3Vjb2RlLmgiCiAKLQotI2RlZmluZSBNR0FfV0FSUF9DT0RFX0FMSUdOCQkyNTYJCS8qIGluIGJ5dGVzICovCisjZGVmaW5lIE1HQV9XQVJQX0NPREVfQUxJR04JCTI1NgkvKiBpbiBieXRlcyAqLwogCiAjZGVmaW5lIFdBUlBfVUNPREVfU0laRSggd2hpY2ggKQkJCQkJXAogCSgoc2l6ZW9mKHdoaWNoKSAvIE1HQV9XQVJQX0NPREVfQUxJR04gKyAxKSAqIE1HQV9XQVJQX0NPREVfQUxJR04pCkBAIC00OSwzMyArNDgsMzAgQEAKIH0gd2hpbGUgKDApCiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWdhX3dhcnBfZzQwMF9taWNyb2NvZGVfc2l6ZSA9Ci0JICAgICAgIChXQVJQX1VDT0RFX1NJWkUod2FycF9nNDAwX3RneikgKwotCQlXQVJQX1VDT0RFX1NJWkUod2FycF9nNDAwX3RnemEpICsKLQkJV0FSUF9VQ09ERV9TSVpFKHdhcnBfZzQwMF90Z3phZikgKwotCQlXQVJQX1VDT0RFX1NJWkUod2FycF9nNDAwX3RnemYpICsKLQkJV0FSUF9VQ09ERV9TSVpFKHdhcnBfZzQwMF90Z3pzKSArCi0JCVdBUlBfVUNPREVfU0laRSh3YXJwX2c0MDBfdGd6c2EpICsKLQkJV0FSUF9VQ09ERV9TSVpFKHdhcnBfZzQwMF90Z3pzYWYpICsKLQkJV0FSUF9VQ09ERV9TSVpFKHdhcnBfZzQwMF90Z3pzZikgKwotCQlXQVJQX1VDT0RFX1NJWkUod2FycF9nNDAwX3QyZ3opICsKLQkJV0FSUF9VQ09ERV9TSVpFKHdhcnBfZzQwMF90Mmd6YSkgKwotCQlXQVJQX1VDT0RFX1NJWkUod2FycF9nNDAwX3QyZ3phZikgKwotCQlXQVJQX1VDT0RFX1NJWkUod2FycF9nNDAwX3QyZ3pmKSArCi0JCVdBUlBfVUNPREVfU0laRSh3YXJwX2c0MDBfdDJnenMpICsKLQkJV0FSUF9VQ09ERV9TSVpFKHdhcnBfZzQwMF90Mmd6c2EpICsKLQkJV0FSUF9VQ09ERV9TSVpFKHdhcnBfZzQwMF90Mmd6c2FmKSArCi0JCVdBUlBfVUNPREVfU0laRSh3YXJwX2c0MDBfdDJnenNmKSk7CisgICAgKFdBUlBfVUNPREVfU0laRSh3YXJwX2c0MDBfdGd6KSArCisgICAgIFdBUlBfVUNPREVfU0laRSh3YXJwX2c0MDBfdGd6YSkgKworICAgICBXQVJQX1VDT0RFX1NJWkUod2FycF9nNDAwX3RnemFmKSArCisgICAgIFdBUlBfVUNPREVfU0laRSh3YXJwX2c0MDBfdGd6ZikgKworICAgICBXQVJQX1VDT0RFX1NJWkUod2FycF9nNDAwX3RnenMpICsKKyAgICAgV0FSUF9VQ09ERV9TSVpFKHdhcnBfZzQwMF90Z3pzYSkgKworICAgICBXQVJQX1VDT0RFX1NJWkUod2FycF9nNDAwX3RnenNhZikgKworICAgICBXQVJQX1VDT0RFX1NJWkUod2FycF9nNDAwX3RnenNmKSArCisgICAgIFdBUlBfVUNPREVfU0laRSh3YXJwX2c0MDBfdDJneikgKworICAgICBXQVJQX1VDT0RFX1NJWkUod2FycF9nNDAwX3QyZ3phKSArCisgICAgIFdBUlBfVUNPREVfU0laRSh3YXJwX2c0MDBfdDJnemFmKSArCisgICAgIFdBUlBfVUNPREVfU0laRSh3YXJwX2c0MDBfdDJnemYpICsKKyAgICAgV0FSUF9VQ09ERV9TSVpFKHdhcnBfZzQwMF90Mmd6cykgKworICAgICBXQVJQX1VDT0RFX1NJWkUod2FycF9nNDAwX3QyZ3pzYSkgKworICAgICBXQVJQX1VDT0RFX1NJWkUod2FycF9nNDAwX3QyZ3pzYWYpICsgV0FSUF9VQ09ERV9TSVpFKHdhcnBfZzQwMF90Mmd6c2YpKTsKIAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZ2Ffd2FycF9nMjAwX21pY3JvY29kZV9zaXplID0KLQkgICAgICAgKFdBUlBfVUNPREVfU0laRSh3YXJwX2cyMDBfdGd6KSArCi0JCVdBUlBfVUNPREVfU0laRSh3YXJwX2cyMDBfdGd6YSkgKwotCQlXQVJQX1VDT0RFX1NJWkUod2FycF9nMjAwX3RnemFmKSArCi0JCVdBUlBfVUNPREVfU0laRSh3YXJwX2cyMDBfdGd6ZikgKwotCQlXQVJQX1VDT0RFX1NJWkUod2FycF9nMjAwX3RnenMpICsKLQkJV0FSUF9VQ09ERV9TSVpFKHdhcnBfZzIwMF90Z3pzYSkgKwotCQlXQVJQX1VDT0RFX1NJWkUod2FycF9nMjAwX3RnenNhZikgKwotCQlXQVJQX1VDT0RFX1NJWkUod2FycF9nMjAwX3RnenNmKSk7Ci0KKyAgICAoV0FSUF9VQ09ERV9TSVpFKHdhcnBfZzIwMF90Z3opICsKKyAgICAgV0FSUF9VQ09ERV9TSVpFKHdhcnBfZzIwMF90Z3phKSArCisgICAgIFdBUlBfVUNPREVfU0laRSh3YXJwX2cyMDBfdGd6YWYpICsKKyAgICAgV0FSUF9VQ09ERV9TSVpFKHdhcnBfZzIwMF90Z3pmKSArCisgICAgIFdBUlBfVUNPREVfU0laRSh3YXJwX2cyMDBfdGd6cykgKworICAgICBXQVJQX1VDT0RFX1NJWkUod2FycF9nMjAwX3RnenNhKSArCisgICAgIFdBUlBfVUNPREVfU0laRSh3YXJwX2cyMDBfdGd6c2FmKSArIFdBUlBfVUNPREVfU0laRSh3YXJwX2cyMDBfdGd6c2YpKTsKIAogdW5zaWduZWQgaW50IG1nYV93YXJwX21pY3JvY29kZV9zaXplKGNvbnN0IGRybV9tZ2FfcHJpdmF0ZV90ICogZGV2X3ByaXYpCiB7CkBAIC05MCwzNiArODYsMzUgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgbWdhX3dhcnBfaW5zdGFsbF9nNDAwX21pY3JvY29kZSggZHJtX21nYV9wcml2YXRlX3QgKmRldl9wcml2ICkKK3N0YXRpYyBpbnQgbWdhX3dhcnBfaW5zdGFsbF9nNDAwX21pY3JvY29kZShkcm1fbWdhX3ByaXZhdGVfdCAqIGRldl9wcml2KQogewogCXVuc2lnbmVkIGNoYXIgKnZjYmFzZSA9IGRldl9wcml2LT53YXJwLT5oYW5kbGU7CiAJdW5zaWduZWQgbG9uZyBwY2Jhc2UgPSBkZXZfcHJpdi0+d2FycC0+b2Zmc2V0OwogCi0JbWVtc2V0KCBkZXZfcHJpdi0+d2FycF9waXBlX3BoeXMsIDAsCi0JCXNpemVvZihkZXZfcHJpdi0+d2FycF9waXBlX3BoeXMpICk7CisJbWVtc2V0KGRldl9wcml2LT53YXJwX3BpcGVfcGh5cywgMCwgc2l6ZW9mKGRldl9wcml2LT53YXJwX3BpcGVfcGh5cykpOwogCi0JV0FSUF9VQ09ERV9JTlNUQUxMKCB3YXJwX2c0MDBfdGd6LAlNR0FfV0FSUF9UR1ogKTsKLQlXQVJQX1VDT0RFX0lOU1RBTEwoIHdhcnBfZzQwMF90Z3pmLAlNR0FfV0FSUF9UR1pGICk7Ci0JV0FSUF9VQ09ERV9JTlNUQUxMKCB3YXJwX2c0MDBfdGd6YSwJTUdBX1dBUlBfVEdaQSApOwotCVdBUlBfVUNPREVfSU5TVEFMTCggd2FycF9nNDAwX3RnemFmLAlNR0FfV0FSUF9UR1pBRiApOwotCVdBUlBfVUNPREVfSU5TVEFMTCggd2FycF9nNDAwX3RnenMsCU1HQV9XQVJQX1RHWlMgKTsKLQlXQVJQX1VDT0RFX0lOU1RBTEwoIHdhcnBfZzQwMF90Z3pzZiwJTUdBX1dBUlBfVEdaU0YgKTsKLQlXQVJQX1VDT0RFX0lOU1RBTEwoIHdhcnBfZzQwMF90Z3pzYSwJTUdBX1dBUlBfVEdaU0EgKTsKLQlXQVJQX1VDT0RFX0lOU1RBTEwoIHdhcnBfZzQwMF90Z3pzYWYsCU1HQV9XQVJQX1RHWlNBRiApOworCVdBUlBfVUNPREVfSU5TVEFMTCh3YXJwX2c0MDBfdGd6LCBNR0FfV0FSUF9UR1opOworCVdBUlBfVUNPREVfSU5TVEFMTCh3YXJwX2c0MDBfdGd6ZiwgTUdBX1dBUlBfVEdaRik7CisJV0FSUF9VQ09ERV9JTlNUQUxMKHdhcnBfZzQwMF90Z3phLCBNR0FfV0FSUF9UR1pBKTsKKwlXQVJQX1VDT0RFX0lOU1RBTEwod2FycF9nNDAwX3RnemFmLCBNR0FfV0FSUF9UR1pBRik7CisJV0FSUF9VQ09ERV9JTlNUQUxMKHdhcnBfZzQwMF90Z3pzLCBNR0FfV0FSUF9UR1pTKTsKKwlXQVJQX1VDT0RFX0lOU1RBTEwod2FycF9nNDAwX3RnenNmLCBNR0FfV0FSUF9UR1pTRik7CisJV0FSUF9VQ09ERV9JTlNUQUxMKHdhcnBfZzQwMF90Z3pzYSwgTUdBX1dBUlBfVEdaU0EpOworCVdBUlBfVUNPREVfSU5TVEFMTCh3YXJwX2c0MDBfdGd6c2FmLCBNR0FfV0FSUF9UR1pTQUYpOwogCi0JV0FSUF9VQ09ERV9JTlNUQUxMKCB3YXJwX2c0MDBfdDJneiwJTUdBX1dBUlBfVDJHWiApOwotCVdBUlBfVUNPREVfSU5TVEFMTCggd2FycF9nNDAwX3QyZ3pmLAlNR0FfV0FSUF9UMkdaRiApOwotCVdBUlBfVUNPREVfSU5TVEFMTCggd2FycF9nNDAwX3QyZ3phLAlNR0FfV0FSUF9UMkdaQSApOwotCVdBUlBfVUNPREVfSU5TVEFMTCggd2FycF9nNDAwX3QyZ3phZiwJTUdBX1dBUlBfVDJHWkFGICk7Ci0JV0FSUF9VQ09ERV9JTlNUQUxMKCB3YXJwX2c0MDBfdDJnenMsCU1HQV9XQVJQX1QyR1pTICk7Ci0JV0FSUF9VQ09ERV9JTlNUQUxMKCB3YXJwX2c0MDBfdDJnenNmLAlNR0FfV0FSUF9UMkdaU0YgKTsKLQlXQVJQX1VDT0RFX0lOU1RBTEwoIHdhcnBfZzQwMF90Mmd6c2EsCU1HQV9XQVJQX1QyR1pTQSApOwotCVdBUlBfVUNPREVfSU5TVEFMTCggd2FycF9nNDAwX3QyZ3pzYWYsCU1HQV9XQVJQX1QyR1pTQUYgKTsKKwlXQVJQX1VDT0RFX0lOU1RBTEwod2FycF9nNDAwX3QyZ3osIE1HQV9XQVJQX1QyR1opOworCVdBUlBfVUNPREVfSU5TVEFMTCh3YXJwX2c0MDBfdDJnemYsIE1HQV9XQVJQX1QyR1pGKTsKKwlXQVJQX1VDT0RFX0lOU1RBTEwod2FycF9nNDAwX3QyZ3phLCBNR0FfV0FSUF9UMkdaQSk7CisJV0FSUF9VQ09ERV9JTlNUQUxMKHdhcnBfZzQwMF90Mmd6YWYsIE1HQV9XQVJQX1QyR1pBRik7CisJV0FSUF9VQ09ERV9JTlNUQUxMKHdhcnBfZzQwMF90Mmd6cywgTUdBX1dBUlBfVDJHWlMpOworCVdBUlBfVUNPREVfSU5TVEFMTCh3YXJwX2c0MDBfdDJnenNmLCBNR0FfV0FSUF9UMkdaU0YpOworCVdBUlBfVUNPREVfSU5TVEFMTCh3YXJwX2c0MDBfdDJnenNhLCBNR0FfV0FSUF9UMkdaU0EpOworCVdBUlBfVUNPREVfSU5TVEFMTCh3YXJwX2c0MDBfdDJnenNhZiwgTUdBX1dBUlBfVDJHWlNBRik7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtZ2Ffd2FycF9pbnN0YWxsX2cyMDBfbWljcm9jb2RlKCBkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYgKQorc3RhdGljIGludCBtZ2Ffd2FycF9pbnN0YWxsX2cyMDBfbWljcm9jb2RlKGRybV9tZ2FfcHJpdmF0ZV90ICogZGV2X3ByaXYpCiB7CiAJdW5zaWduZWQgY2hhciAqdmNiYXNlID0gZGV2X3ByaXYtPndhcnAtPmhhbmRsZTsKIAl1bnNpZ25lZCBsb25nIHBjYmFzZSA9IGRldl9wcml2LT53YXJwLT5vZmZzZXQ7CkBAIC0xMzgsNyArMTMzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IG1nYV93YXJwX2luc3RhbGxfbWljcm9jb2RlKAlkcm1fbWdhX3ByaXZhdGVfdCAqZGV2X3ByaXYgKQoraW50IG1nYV93YXJwX2luc3RhbGxfbWljcm9jb2RlKGRybV9tZ2FfcHJpdmF0ZV90ICogZGV2X3ByaXYpCiB7CiAJY29uc3QgdW5zaWduZWQgaW50IHNpemUgPSBtZ2Ffd2FycF9taWNyb2NvZGVfc2l6ZShkZXZfcHJpdik7CiAKQEAgLTE1NCw3ICsxNDksNyBAQAogCWNhc2UgTUdBX0NBUkRfVFlQRV9HNTUwOgogCQlyZXR1cm4gbWdhX3dhcnBfaW5zdGFsbF9nNDAwX21pY3JvY29kZShkZXZfcHJpdik7CiAJY2FzZSBNR0FfQ0FSRF9UWVBFX0cyMDA6Ci0JCXJldHVybiBtZ2Ffd2FycF9pbnN0YWxsX2cyMDBfbWljcm9jb2RlKCBkZXZfcHJpdiApOworCQlyZXR1cm4gbWdhX3dhcnBfaW5zdGFsbF9nMjAwX21pY3JvY29kZShkZXZfcHJpdik7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAl9CkBAIC0xNjIsMTMgKzE1NywxMyBAQAogCiAjZGVmaW5lIFdNSVNDX0VYUEVDVEVECQkoTUdBX1dVQ09ERUNBQ0hFX0VOQUJMRSB8IE1HQV9XTUFTVEVSX0VOQUJMRSkKIAotaW50IG1nYV93YXJwX2luaXQoIGRybV9tZ2FfcHJpdmF0ZV90ICpkZXZfcHJpdiApCitpbnQgbWdhX3dhcnBfaW5pdChkcm1fbWdhX3ByaXZhdGVfdCAqIGRldl9wcml2KQogewogCXUzMiB3bWlzYzsKIAogCS8qIEZJWE1FOiBHZXQgcmlkIG9mIHRoZXNlIGRhbW5lZCBtYWdpYyBudW1iZXJzLi4uCiAJICovCi0Jc3dpdGNoICggZGV2X3ByaXYtPmNoaXBzZXQgKSB7CisJc3dpdGNoIChkZXZfcHJpdi0+Y2hpcHNldCkgewogCWNhc2UgTUdBX0NBUkRfVFlQRV9HNDAwOgogCWNhc2UgTUdBX0NBUkRfVFlQRV9HNTUwOgogCQlNR0FfV1JJVEUoTUdBX1dJQUREUjIsIE1HQV9XTU9ERV9TVVNQRU5EKTsKQEAgLTE3NywyMSArMTcyLDIwIEBACiAJCU1HQV9XUklURShNR0FfV0FDQ0VQVFNFUSwgMHgxODAwMDAwMCk7CiAJCWJyZWFrOwogCWNhc2UgTUdBX0NBUkRfVFlQRV9HMjAwOgotCQlNR0FfV1JJVEUoIE1HQV9XSUFERFIsIE1HQV9XTU9ERV9TVVNQRU5EICk7Ci0JCU1HQV9XUklURSggTUdBX1dHRVRNU0IsIDB4MTYwNiApOwotCQlNR0FfV1JJVEUoIE1HQV9XVlJUWFNaLCA3ICk7CisJCU1HQV9XUklURShNR0FfV0lBRERSLCBNR0FfV01PREVfU1VTUEVORCk7CisJCU1HQV9XUklURShNR0FfV0dFVE1TQiwgMHgxNjA2KTsKKwkJTUdBX1dSSVRFKE1HQV9XVlJUWFNaLCA3KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAl9CiAKLQlNR0FfV1JJVEUoIE1HQV9XTUlTQywgKE1HQV9XVUNPREVDQUNIRV9FTkFCTEUgfAotCQkJICAgICAgIE1HQV9XTUFTVEVSX0VOQUJMRSB8Ci0JCQkgICAgICAgTUdBX1dDQUNIRUZMVVNIX0VOQUJMRSkgKTsKLQl3bWlzYyA9IE1HQV9SRUFEKCBNR0FfV01JU0MgKTsKLQlpZiAoIHdtaXNjICE9IFdNSVNDX0VYUEVDVEVEICkgewotCQlEUk1fRVJST1IoICJXQVJQIGVuZ2luZSBjb25maWcgZmFpbGVkISAweCV4ICE9IDB4JXhcbiIsCi0JCQkgICB3bWlzYywgV01JU0NfRVhQRUNURUQgKTsKKwlNR0FfV1JJVEUoTUdBX1dNSVNDLCAoTUdBX1dVQ09ERUNBQ0hFX0VOQUJMRSB8CisJCQkgICAgICBNR0FfV01BU1RFUl9FTkFCTEUgfCBNR0FfV0NBQ0hFRkxVU0hfRU5BQkxFKSk7CisJd21pc2MgPSBNR0FfUkVBRChNR0FfV01JU0MpOworCWlmICh3bWlzYyAhPSBXTUlTQ19FWFBFQ1RFRCkgeworCQlEUk1fRVJST1IoIldBUlAgZW5naW5lIGNvbmZpZyBmYWlsZWQhIDB4JXggIT0gMHgleFxuIiwKKwkJCSAgd21pc2MsIFdNSVNDX0VYUEVDVEVEKTsKIAkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vcjEyOF9jY2UuYyBiL2RyaXZlcnMvY2hhci9kcm0vcjEyOF9jY2UuYwppbmRleCBhYzNlYTJiLi43NDUyNzUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL3IxMjhfY2NlLmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9yMTI4X2NjZS5jCkBAIC04MCw3ICs4MCw3IEBACiAJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMAogfTsKIAotc3RhdGljIGludCBSMTI4X1JFQURfUExMKGRybV9kZXZpY2VfdCAqZGV2LCBpbnQgYWRkcikKK3N0YXRpYyBpbnQgUjEyOF9SRUFEX1BMTChkcm1fZGV2aWNlX3QgKiBkZXYsIGludCBhZGRyKQogewogCWRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCkBAIC04OSwxMDYgKzg5LDEwNSBAQAogfQogCiAjaWYgUjEyOF9GSUZPX0RFQlVHCi1zdGF0aWMgdm9pZCByMTI4X3N0YXR1cyggZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdiApCitzdGF0aWMgdm9pZCByMTI4X3N0YXR1cyhkcm1fcjEyOF9wcml2YXRlX3QgKiBkZXZfcHJpdikKIHsKLQlwcmludGsoICJHVUlfU1RBVCAgICAgICAgICAgPSAweCUwOHhcbiIsCi0JCSh1bnNpZ25lZCBpbnQpUjEyOF9SRUFEKCBSMTI4X0dVSV9TVEFUICkgKTsKLQlwcmludGsoICJQTTRfU1RBVCAgICAgICAgICAgPSAweCUwOHhcbiIsCi0JCSh1bnNpZ25lZCBpbnQpUjEyOF9SRUFEKCBSMTI4X1BNNF9TVEFUICkgKTsKLQlwcmludGsoICJQTTRfQlVGRkVSX0RMX1dQVFIgPSAweCUwOHhcbiIsCi0JCSh1bnNpZ25lZCBpbnQpUjEyOF9SRUFEKCBSMTI4X1BNNF9CVUZGRVJfRExfV1BUUiApICk7Ci0JcHJpbnRrKCAiUE00X0JVRkZFUl9ETF9SUFRSID0gMHglMDh4XG4iLAotCQkodW5zaWduZWQgaW50KVIxMjhfUkVBRCggUjEyOF9QTTRfQlVGRkVSX0RMX1JQVFIgKSApOwotCXByaW50ayggIlBNNF9NSUNST19DTlRMICAgICA9IDB4JTA4eFxuIiwKLQkJKHVuc2lnbmVkIGludClSMTI4X1JFQUQoIFIxMjhfUE00X01JQ1JPX0NOVEwgKSApOwotCXByaW50ayggIlBNNF9CVUZGRVJfQ05UTCAgICA9IDB4JTA4eFxuIiwKLQkJKHVuc2lnbmVkIGludClSMTI4X1JFQUQoIFIxMjhfUE00X0JVRkZFUl9DTlRMICkgKTsKKwlwcmludGsoIkdVSV9TVEFUICAgICAgICAgICA9IDB4JTA4eFxuIiwKKwkgICAgICAgKHVuc2lnbmVkIGludClSMTI4X1JFQUQoUjEyOF9HVUlfU1RBVCkpOworCXByaW50aygiUE00X1NUQVQgICAgICAgICAgID0gMHglMDh4XG4iLAorCSAgICAgICAodW5zaWduZWQgaW50KVIxMjhfUkVBRChSMTI4X1BNNF9TVEFUKSk7CisJcHJpbnRrKCJQTTRfQlVGRkVSX0RMX1dQVFIgPSAweCUwOHhcbiIsCisJICAgICAgICh1bnNpZ25lZCBpbnQpUjEyOF9SRUFEKFIxMjhfUE00X0JVRkZFUl9ETF9XUFRSKSk7CisJcHJpbnRrKCJQTTRfQlVGRkVSX0RMX1JQVFIgPSAweCUwOHhcbiIsCisJICAgICAgICh1bnNpZ25lZCBpbnQpUjEyOF9SRUFEKFIxMjhfUE00X0JVRkZFUl9ETF9SUFRSKSk7CisJcHJpbnRrKCJQTTRfTUlDUk9fQ05UTCAgICAgPSAweCUwOHhcbiIsCisJICAgICAgICh1bnNpZ25lZCBpbnQpUjEyOF9SRUFEKFIxMjhfUE00X01JQ1JPX0NOVEwpKTsKKwlwcmludGsoIlBNNF9CVUZGRVJfQ05UTCAgICA9IDB4JTA4eFxuIiwKKwkgICAgICAgKHVuc2lnbmVkIGludClSMTI4X1JFQUQoUjEyOF9QTTRfQlVGRkVSX0NOVEwpKTsKIH0KICNlbmRpZgogCi0KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqIEVuZ2luZSwgRklGTyBjb250cm9sCiAgKi8KIAotc3RhdGljIGludCByMTI4X2RvX3BpeGNhY2hlX2ZsdXNoKCBkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2ICkKK3N0YXRpYyBpbnQgcjEyOF9kb19waXhjYWNoZV9mbHVzaChkcm1fcjEyOF9wcml2YXRlX3QgKiBkZXZfcHJpdikKIHsKIAl1MzIgdG1wOwogCWludCBpOwogCi0JdG1wID0gUjEyOF9SRUFEKCBSMTI4X1BDX05HVUlfQ1RMU1RBVCApIHwgUjEyOF9QQ19GTFVTSF9BTEw7Ci0JUjEyOF9XUklURSggUjEyOF9QQ19OR1VJX0NUTFNUQVQsIHRtcCApOworCXRtcCA9IFIxMjhfUkVBRChSMTI4X1BDX05HVUlfQ1RMU1RBVCkgfCBSMTI4X1BDX0ZMVVNIX0FMTDsKKwlSMTI4X1dSSVRFKFIxMjhfUENfTkdVSV9DVExTVEFULCB0bXApOwogCi0JZm9yICggaSA9IDAgOyBpIDwgZGV2X3ByaXYtPnVzZWNfdGltZW91dCA7IGkrKyApIHsKLQkJaWYgKCAhKFIxMjhfUkVBRCggUjEyOF9QQ19OR1VJX0NUTFNUQVQgKSAmIFIxMjhfUENfQlVTWSkgKSB7CisJZm9yIChpID0gMDsgaSA8IGRldl9wcml2LT51c2VjX3RpbWVvdXQ7IGkrKykgeworCQlpZiAoIShSMTI4X1JFQUQoUjEyOF9QQ19OR1VJX0NUTFNUQVQpICYgUjEyOF9QQ19CVVNZKSkgewogCQkJcmV0dXJuIDA7CiAJCX0KLQkJRFJNX1VERUxBWSggMSApOworCQlEUk1fVURFTEFZKDEpOwogCX0KIAogI2lmIFIxMjhfRklGT19ERUJVRwotCURSTV9FUlJPUiggImZhaWxlZCFcbiIgKTsKKwlEUk1fRVJST1IoImZhaWxlZCFcbiIpOwogI2VuZGlmCiAJcmV0dXJuIERSTV9FUlIoRUJVU1kpOwogfQogCi1zdGF0aWMgaW50IHIxMjhfZG9fd2FpdF9mb3JfZmlmbyggZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdiwgaW50IGVudHJpZXMgKQorc3RhdGljIGludCByMTI4X2RvX3dhaXRfZm9yX2ZpZm8oZHJtX3IxMjhfcHJpdmF0ZV90ICogZGV2X3ByaXYsIGludCBlbnRyaWVzKQogewogCWludCBpOwogCi0JZm9yICggaSA9IDAgOyBpIDwgZGV2X3ByaXYtPnVzZWNfdGltZW91dCA7IGkrKyApIHsKLQkJaW50IHNsb3RzID0gUjEyOF9SRUFEKCBSMTI4X0dVSV9TVEFUICkgJiBSMTI4X0dVSV9GSUZPQ05UX01BU0s7Ci0JCWlmICggc2xvdHMgPj0gZW50cmllcyApIHJldHVybiAwOwotCQlEUk1fVURFTEFZKCAxICk7CisJZm9yIChpID0gMDsgaSA8IGRldl9wcml2LT51c2VjX3RpbWVvdXQ7IGkrKykgeworCQlpbnQgc2xvdHMgPSBSMTI4X1JFQUQoUjEyOF9HVUlfU1RBVCkgJiBSMTI4X0dVSV9GSUZPQ05UX01BU0s7CisJCWlmIChzbG90cyA+PSBlbnRyaWVzKQorCQkJcmV0dXJuIDA7CisJCURSTV9VREVMQVkoMSk7CiAJfQogCiAjaWYgUjEyOF9GSUZPX0RFQlVHCi0JRFJNX0VSUk9SKCAiZmFpbGVkIVxuIiApOworCURSTV9FUlJPUigiZmFpbGVkIVxuIik7CiAjZW5kaWYKIAlyZXR1cm4gRFJNX0VSUihFQlVTWSk7CiB9CiAKLXN0YXRpYyBpbnQgcjEyOF9kb193YWl0X2Zvcl9pZGxlKCBkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2ICkKK3N0YXRpYyBpbnQgcjEyOF9kb193YWl0X2Zvcl9pZGxlKGRybV9yMTI4X3ByaXZhdGVfdCAqIGRldl9wcml2KQogewogCWludCBpLCByZXQ7CiAKLQlyZXQgPSByMTI4X2RvX3dhaXRfZm9yX2ZpZm8oIGRldl9wcml2LCA2NCApOwotCWlmICggcmV0ICkgcmV0dXJuIHJldDsKKwlyZXQgPSByMTI4X2RvX3dhaXRfZm9yX2ZpZm8oZGV2X3ByaXYsIDY0KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCi0JZm9yICggaSA9IDAgOyBpIDwgZGV2X3ByaXYtPnVzZWNfdGltZW91dCA7IGkrKyApIHsKLQkJaWYgKCAhKFIxMjhfUkVBRCggUjEyOF9HVUlfU1RBVCApICYgUjEyOF9HVUlfQUNUSVZFKSApIHsKLQkJCXIxMjhfZG9fcGl4Y2FjaGVfZmx1c2goIGRldl9wcml2ICk7CisJZm9yIChpID0gMDsgaSA8IGRldl9wcml2LT51c2VjX3RpbWVvdXQ7IGkrKykgeworCQlpZiAoIShSMTI4X1JFQUQoUjEyOF9HVUlfU1RBVCkgJiBSMTI4X0dVSV9BQ1RJVkUpKSB7CisJCQlyMTI4X2RvX3BpeGNhY2hlX2ZsdXNoKGRldl9wcml2KTsKIAkJCXJldHVybiAwOwogCQl9Ci0JCURSTV9VREVMQVkoIDEgKTsKKwkJRFJNX1VERUxBWSgxKTsKIAl9CiAKICNpZiBSMTI4X0ZJRk9fREVCVUcKLQlEUk1fRVJST1IoICJmYWlsZWQhXG4iICk7CisJRFJNX0VSUk9SKCJmYWlsZWQhXG4iKTsKICNlbmRpZgogCXJldHVybiBEUk1fRVJSKEVCVVNZKTsKIH0KIAotCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiBDQ0UgY29udHJvbCwgaW5pdGlhbGl6YXRpb24KICAqLwogCiAvKiBMb2FkIHRoZSBtaWNyb2NvZGUgZm9yIHRoZSBDQ0UgKi8KLXN0YXRpYyB2b2lkIHIxMjhfY2NlX2xvYWRfbWljcm9jb2RlKCBkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2ICkKK3N0YXRpYyB2b2lkIHIxMjhfY2NlX2xvYWRfbWljcm9jb2RlKGRybV9yMTI4X3ByaXZhdGVfdCAqIGRldl9wcml2KQogewogCWludCBpOwogCi0JRFJNX0RFQlVHKCAiXG4iICk7CisJRFJNX0RFQlVHKCJcbiIpOwogCi0JcjEyOF9kb193YWl0X2Zvcl9pZGxlKCBkZXZfcHJpdiApOworCXIxMjhfZG9fd2FpdF9mb3JfaWRsZShkZXZfcHJpdik7CiAKLQlSMTI4X1dSSVRFKCBSMTI4X1BNNF9NSUNST0NPREVfQUREUiwgMCApOwotCWZvciAoIGkgPSAwIDsgaSA8IDI1NiA7IGkrKyApIHsKLQkJUjEyOF9XUklURSggUjEyOF9QTTRfTUlDUk9DT0RFX0RBVEFILAotCQkJICAgIHIxMjhfY2NlX21pY3JvY29kZVtpICogMl0gKTsKLQkJUjEyOF9XUklURSggUjEyOF9QTTRfTUlDUk9DT0RFX0RBVEFMLAotCQkJICAgIHIxMjhfY2NlX21pY3JvY29kZVtpICogMiArIDFdICk7CisJUjEyOF9XUklURShSMTI4X1BNNF9NSUNST0NPREVfQUREUiwgMCk7CisJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisJCVIxMjhfV1JJVEUoUjEyOF9QTTRfTUlDUk9DT0RFX0RBVEFILCByMTI4X2NjZV9taWNyb2NvZGVbaSAqIDJdKTsKKwkJUjEyOF9XUklURShSMTI4X1BNNF9NSUNST0NPREVfREFUQUwsCisJCQkgICByMTI4X2NjZV9taWNyb2NvZGVbaSAqIDIgKyAxXSk7CiAJfQogfQogCkBAIC0xOTYsNTEgKzE5NSw1MSBAQAogICogcHJpb3IgdG8gYSB3YWl0IGZvciBpZGxlLCBhcyBpdCBpbmZvcm1zIHRoZSBlbmdpbmUgdGhhdCB0aGUgY29tbWFuZAogICogc3RyZWFtIGlzIGVuZGluZy4KICAqLwotc3RhdGljIHZvaWQgcjEyOF9kb19jY2VfZmx1c2goIGRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYgKQorc3RhdGljIHZvaWQgcjEyOF9kb19jY2VfZmx1c2goZHJtX3IxMjhfcHJpdmF0ZV90ICogZGV2X3ByaXYpCiB7CiAJdTMyIHRtcDsKIAotCXRtcCA9IFIxMjhfUkVBRCggUjEyOF9QTTRfQlVGRkVSX0RMX1dQVFIgKSB8IFIxMjhfUE00X0JVRkZFUl9ETF9ET05FOwotCVIxMjhfV1JJVEUoIFIxMjhfUE00X0JVRkZFUl9ETF9XUFRSLCB0bXAgKTsKKwl0bXAgPSBSMTI4X1JFQUQoUjEyOF9QTTRfQlVGRkVSX0RMX1dQVFIpIHwgUjEyOF9QTTRfQlVGRkVSX0RMX0RPTkU7CisJUjEyOF9XUklURShSMTI4X1BNNF9CVUZGRVJfRExfV1BUUiwgdG1wKTsKIH0KIAogLyogV2FpdCBmb3IgdGhlIENDRSB0byBnbyBpZGxlLgogICovCi1pbnQgcjEyOF9kb19jY2VfaWRsZSggZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdiApCitpbnQgcjEyOF9kb19jY2VfaWRsZShkcm1fcjEyOF9wcml2YXRlX3QgKiBkZXZfcHJpdikKIHsKIAlpbnQgaTsKIAotCWZvciAoIGkgPSAwIDsgaSA8IGRldl9wcml2LT51c2VjX3RpbWVvdXQgOyBpKysgKSB7Ci0JCWlmICggR0VUX1JJTkdfSEVBRCggZGV2X3ByaXYgKSA9PSBkZXZfcHJpdi0+cmluZy50YWlsICkgewotCQkJaW50IHBtNHN0YXQgPSBSMTI4X1JFQUQoIFIxMjhfUE00X1NUQVQgKTsKLQkJCWlmICggKCAocG00c3RhdCAmIFIxMjhfUE00X0ZJRk9DTlRfTUFTSykgPj0KLQkJCSAgICAgICBkZXZfcHJpdi0+Y2NlX2ZpZm9fc2l6ZSApICYmCi0JCQkgICAgICEocG00c3RhdCAmIChSMTI4X1BNNF9CVVNZIHwKLQkJCQkJICBSMTI4X1BNNF9HVUlfQUNUSVZFKSkgKSB7Ci0JCQkJcmV0dXJuIHIxMjhfZG9fcGl4Y2FjaGVfZmx1c2goIGRldl9wcml2ICk7CisJZm9yIChpID0gMDsgaSA8IGRldl9wcml2LT51c2VjX3RpbWVvdXQ7IGkrKykgeworCQlpZiAoR0VUX1JJTkdfSEVBRChkZXZfcHJpdikgPT0gZGV2X3ByaXYtPnJpbmcudGFpbCkgeworCQkJaW50IHBtNHN0YXQgPSBSMTI4X1JFQUQoUjEyOF9QTTRfU1RBVCk7CisJCQlpZiAoKChwbTRzdGF0ICYgUjEyOF9QTTRfRklGT0NOVF9NQVNLKSA+PQorCQkJICAgICBkZXZfcHJpdi0+Y2NlX2ZpZm9fc2l6ZSkgJiYKKwkJCSAgICAhKHBtNHN0YXQgJiAoUjEyOF9QTTRfQlVTWSB8CisJCQkJCSBSMTI4X1BNNF9HVUlfQUNUSVZFKSkpIHsKKwkJCQlyZXR1cm4gcjEyOF9kb19waXhjYWNoZV9mbHVzaChkZXZfcHJpdik7CiAJCQl9CiAJCX0KLQkJRFJNX1VERUxBWSggMSApOworCQlEUk1fVURFTEFZKDEpOwogCX0KIAogI2lmIFIxMjhfRklGT19ERUJVRwotCURSTV9FUlJPUiggImZhaWxlZCFcbiIgKTsKLQlyMTI4X3N0YXR1cyggZGV2X3ByaXYgKTsKKwlEUk1fRVJST1IoImZhaWxlZCFcbiIpOworCXIxMjhfc3RhdHVzKGRldl9wcml2KTsKICNlbmRpZgogCXJldHVybiBEUk1fRVJSKEVCVVNZKTsKIH0KIAogLyogU3RhcnQgdGhlIENvbmN1cnJlbnQgQ29tbWFuZCBFbmdpbmUuCiAgKi8KLXN0YXRpYyB2b2lkIHIxMjhfZG9fY2NlX3N0YXJ0KCBkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2ICkKK3N0YXRpYyB2b2lkIHIxMjhfZG9fY2NlX3N0YXJ0KGRybV9yMTI4X3ByaXZhdGVfdCAqIGRldl9wcml2KQogewotCXIxMjhfZG9fd2FpdF9mb3JfaWRsZSggZGV2X3ByaXYgKTsKKwlyMTI4X2RvX3dhaXRfZm9yX2lkbGUoZGV2X3ByaXYpOwogCi0JUjEyOF9XUklURSggUjEyOF9QTTRfQlVGRkVSX0NOVEwsCi0JCSAgICBkZXZfcHJpdi0+Y2NlX21vZGUgfCBkZXZfcHJpdi0+cmluZy5zaXplX2wycXcKLQkJICAgIHwgUjEyOF9QTTRfQlVGRkVSX0NOVExfTk9VUERBVEUgKTsKLQlSMTI4X1JFQUQoIFIxMjhfUE00X0JVRkZFUl9BRERSICk7IC8qIGFzIHBlciB0aGUgc2FtcGxlIGNvZGUgKi8KLQlSMTI4X1dSSVRFKCBSMTI4X1BNNF9NSUNST19DTlRMLCBSMTI4X1BNNF9NSUNST19GUkVFUlVOICk7CisJUjEyOF9XUklURShSMTI4X1BNNF9CVUZGRVJfQ05UTCwKKwkJICAgZGV2X3ByaXYtPmNjZV9tb2RlIHwgZGV2X3ByaXYtPnJpbmcuc2l6ZV9sMnF3CisJCSAgIHwgUjEyOF9QTTRfQlVGRkVSX0NOVExfTk9VUERBVEUpOworCVIxMjhfUkVBRChSMTI4X1BNNF9CVUZGRVJfQUREUik7CS8qIGFzIHBlciB0aGUgc2FtcGxlIGNvZGUgKi8KKwlSMTI4X1dSSVRFKFIxMjhfUE00X01JQ1JPX0NOVEwsIFIxMjhfUE00X01JQ1JPX0ZSRUVSVU4pOwogCiAJZGV2X3ByaXYtPmNjZV9ydW5uaW5nID0gMTsKIH0KQEAgLTI0OSwxMCArMjQ4LDEwIEBACiAgKiBjb21tYW5kcywgc28geW91IG11c3Qgd2FpdCBmb3IgdGhlIENDRSBjb21tYW5kIHN0cmVhbSB0byBjb21wbGV0ZQogICogYmVmb3JlIGNhbGxpbmcgdGhpcyByb3V0aW5lLgogICovCi1zdGF0aWMgdm9pZCByMTI4X2RvX2NjZV9yZXNldCggZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdiApCitzdGF0aWMgdm9pZCByMTI4X2RvX2NjZV9yZXNldChkcm1fcjEyOF9wcml2YXRlX3QgKiBkZXZfcHJpdikKIHsKLQlSMTI4X1dSSVRFKCBSMTI4X1BNNF9CVUZGRVJfRExfV1BUUiwgMCApOwotCVIxMjhfV1JJVEUoIFIxMjhfUE00X0JVRkZFUl9ETF9SUFRSLCAwICk7CisJUjEyOF9XUklURShSMTI4X1BNNF9CVUZGRVJfRExfV1BUUiwgMCk7CisJUjEyOF9XUklURShSMTI4X1BNNF9CVUZGRVJfRExfUlBUUiwgMCk7CiAJZGV2X3ByaXYtPnJpbmcudGFpbCA9IDA7CiB9CiAKQEAgLTI2MCwxMjIgKzI1OSwxMjAgQEAKICAqIGNvbW1hbmRzLCBzbyB5b3UgbXVzdCBmbHVzaCB0aGUgY29tbWFuZCBzdHJlYW0gYW5kIHdhaXQgZm9yIHRoZSBDQ0UKICAqIHRvIGdvIGlkbGUgYmVmb3JlIGNhbGxpbmcgdGhpcyByb3V0aW5lLgogICovCi1zdGF0aWMgdm9pZCByMTI4X2RvX2NjZV9zdG9wKCBkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2ICkKK3N0YXRpYyB2b2lkIHIxMjhfZG9fY2NlX3N0b3AoZHJtX3IxMjhfcHJpdmF0ZV90ICogZGV2X3ByaXYpCiB7Ci0JUjEyOF9XUklURSggUjEyOF9QTTRfTUlDUk9fQ05UTCwgMCApOwotCVIxMjhfV1JJVEUoIFIxMjhfUE00X0JVRkZFUl9DTlRMLAotCQkgICAgUjEyOF9QTTRfTk9OUE00IHwgUjEyOF9QTTRfQlVGRkVSX0NOVExfTk9VUERBVEUgKTsKKwlSMTI4X1dSSVRFKFIxMjhfUE00X01JQ1JPX0NOVEwsIDApOworCVIxMjhfV1JJVEUoUjEyOF9QTTRfQlVGRkVSX0NOVEwsCisJCSAgIFIxMjhfUE00X05PTlBNNCB8IFIxMjhfUE00X0JVRkZFUl9DTlRMX05PVVBEQVRFKTsKIAogCWRldl9wcml2LT5jY2VfcnVubmluZyA9IDA7CiB9CiAKIC8qIFJlc2V0IHRoZSBlbmdpbmUuICBUaGlzIHdpbGwgc3RvcCB0aGUgQ0NFIGlmIGl0IGlzIHJ1bm5pbmcuCiAgKi8KLXN0YXRpYyBpbnQgcjEyOF9kb19lbmdpbmVfcmVzZXQoIGRybV9kZXZpY2VfdCAqZGV2ICkKK3N0YXRpYyBpbnQgcjEyOF9kb19lbmdpbmVfcmVzZXQoZHJtX2RldmljZV90ICogZGV2KQogewogCWRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXUzMiBjbG9ja19jbnRsX2luZGV4LCBtY2xrX2NudGwsIGdlbl9yZXNldF9jbnRsOwogCi0JcjEyOF9kb19waXhjYWNoZV9mbHVzaCggZGV2X3ByaXYgKTsKKwlyMTI4X2RvX3BpeGNhY2hlX2ZsdXNoKGRldl9wcml2KTsKIAotCWNsb2NrX2NudGxfaW5kZXggPSBSMTI4X1JFQUQoIFIxMjhfQ0xPQ0tfQ05UTF9JTkRFWCApOwotCW1jbGtfY250bCA9IFIxMjhfUkVBRF9QTEwoIGRldiwgUjEyOF9NQ0xLX0NOVEwgKTsKKwljbG9ja19jbnRsX2luZGV4ID0gUjEyOF9SRUFEKFIxMjhfQ0xPQ0tfQ05UTF9JTkRFWCk7CisJbWNsa19jbnRsID0gUjEyOF9SRUFEX1BMTChkZXYsIFIxMjhfTUNMS19DTlRMKTsKIAotCVIxMjhfV1JJVEVfUExMKCBSMTI4X01DTEtfQ05UTCwKLQkJCW1jbGtfY250bCB8IFIxMjhfRk9SQ0VfR0NQIHwgUjEyOF9GT1JDRV9QSVBFM0RfQ1AgKTsKKwlSMTI4X1dSSVRFX1BMTChSMTI4X01DTEtfQ05UTCwKKwkJICAgICAgIG1jbGtfY250bCB8IFIxMjhfRk9SQ0VfR0NQIHwgUjEyOF9GT1JDRV9QSVBFM0RfQ1ApOwogCi0JZ2VuX3Jlc2V0X2NudGwgPSBSMTI4X1JFQUQoIFIxMjhfR0VOX1JFU0VUX0NOVEwgKTsKKwlnZW5fcmVzZXRfY250bCA9IFIxMjhfUkVBRChSMTI4X0dFTl9SRVNFVF9DTlRMKTsKIAogCS8qIFRha2VuIGZyb20gdGhlIHNhbXBsZSBjb2RlIC0gZG8gbm90IGNoYW5nZSAqLwotCVIxMjhfV1JJVEUoIFIxMjhfR0VOX1JFU0VUX0NOVEwsCi0JCSAgICBnZW5fcmVzZXRfY250bCB8IFIxMjhfU09GVF9SRVNFVF9HVUkgKTsKLQlSMTI4X1JFQUQoIFIxMjhfR0VOX1JFU0VUX0NOVEwgKTsKLQlSMTI4X1dSSVRFKCBSMTI4X0dFTl9SRVNFVF9DTlRMLAotCQkgICAgZ2VuX3Jlc2V0X2NudGwgJiB+UjEyOF9TT0ZUX1JFU0VUX0dVSSApOwotCVIxMjhfUkVBRCggUjEyOF9HRU5fUkVTRVRfQ05UTCApOworCVIxMjhfV1JJVEUoUjEyOF9HRU5fUkVTRVRfQ05UTCwgZ2VuX3Jlc2V0X2NudGwgfCBSMTI4X1NPRlRfUkVTRVRfR1VJKTsKKwlSMTI4X1JFQUQoUjEyOF9HRU5fUkVTRVRfQ05UTCk7CisJUjEyOF9XUklURShSMTI4X0dFTl9SRVNFVF9DTlRMLCBnZW5fcmVzZXRfY250bCAmIH5SMTI4X1NPRlRfUkVTRVRfR1VJKTsKKwlSMTI4X1JFQUQoUjEyOF9HRU5fUkVTRVRfQ05UTCk7CiAKLQlSMTI4X1dSSVRFX1BMTCggUjEyOF9NQ0xLX0NOVEwsIG1jbGtfY250bCApOwotCVIxMjhfV1JJVEUoIFIxMjhfQ0xPQ0tfQ05UTF9JTkRFWCwgY2xvY2tfY250bF9pbmRleCApOwotCVIxMjhfV1JJVEUoIFIxMjhfR0VOX1JFU0VUX0NOVEwsIGdlbl9yZXNldF9jbnRsICk7CisJUjEyOF9XUklURV9QTEwoUjEyOF9NQ0xLX0NOVEwsIG1jbGtfY250bCk7CisJUjEyOF9XUklURShSMTI4X0NMT0NLX0NOVExfSU5ERVgsIGNsb2NrX2NudGxfaW5kZXgpOworCVIxMjhfV1JJVEUoUjEyOF9HRU5fUkVTRVRfQ05UTCwgZ2VuX3Jlc2V0X2NudGwpOwogCiAJLyogUmVzZXQgdGhlIENDRSByaW5nICovCi0JcjEyOF9kb19jY2VfcmVzZXQoIGRldl9wcml2ICk7CisJcjEyOF9kb19jY2VfcmVzZXQoZGV2X3ByaXYpOwogCiAJLyogVGhlIENDRSBpcyBubyBsb25nZXIgcnVubmluZyBhZnRlciBhbiBlbmdpbmUgcmVzZXQgKi8KIAlkZXZfcHJpdi0+Y2NlX3J1bm5pbmcgPSAwOwogCiAJLyogUmVzZXQgYW55IHBlbmRpbmcgdmVydGV4LCBpbmRpcmVjdCBidWZmZXJzICovCi0JcjEyOF9mcmVlbGlzdF9yZXNldCggZGV2ICk7CisJcjEyOF9mcmVlbGlzdF9yZXNldChkZXYpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHIxMjhfY2NlX2luaXRfcmluZ19idWZmZXIoIGRybV9kZXZpY2VfdCAqZGV2LAotCQkJCSAgICAgICBkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2ICkKK3N0YXRpYyB2b2lkIHIxMjhfY2NlX2luaXRfcmluZ19idWZmZXIoZHJtX2RldmljZV90ICogZGV2LAorCQkJCSAgICAgIGRybV9yMTI4X3ByaXZhdGVfdCAqIGRldl9wcml2KQogewogCXUzMiByaW5nX3N0YXJ0OwogCXUzMiB0bXA7CiAKLQlEUk1fREVCVUcoICJcbiIgKTsKKwlEUk1fREVCVUcoIlxuIik7CiAKIAkvKiBUaGUgbWFudWFsIChwLiAyKSBzYXlzIHRoaXMgYWRkcmVzcyBpcyBpbiAiVk0gc3BhY2UiLiAgVGhpcwogCSAqIG1lYW5zIGl0J3MgYW4gb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIEFHUCBzcGFjZS4KIAkgKi8KICNpZiBfX09TX0hBU19BR1AKLQlpZiAoICFkZXZfcHJpdi0+aXNfcGNpICkKKwlpZiAoIWRldl9wcml2LT5pc19wY2kpCiAJCXJpbmdfc3RhcnQgPSBkZXZfcHJpdi0+Y2NlX3JpbmctPm9mZnNldCAtIGRldi0+YWdwLT5iYXNlOwogCWVsc2UKICNlbmRpZgotCQlyaW5nX3N0YXJ0ID0gZGV2X3ByaXYtPmNjZV9yaW5nLT5vZmZzZXQgLSAKLQkJCQkodW5zaWduZWQgbG9uZylkZXYtPnNnLT52aXJ0dWFsOworCQlyaW5nX3N0YXJ0ID0gZGV2X3ByaXYtPmNjZV9yaW5nLT5vZmZzZXQgLQorCQkgICAgKHVuc2lnbmVkIGxvbmcpZGV2LT5zZy0+dmlydHVhbDsKIAotCVIxMjhfV1JJVEUoIFIxMjhfUE00X0JVRkZFUl9PRkZTRVQsIHJpbmdfc3RhcnQgfCBSMTI4X0FHUF9PRkZTRVQgKTsKKwlSMTI4X1dSSVRFKFIxMjhfUE00X0JVRkZFUl9PRkZTRVQsIHJpbmdfc3RhcnQgfCBSMTI4X0FHUF9PRkZTRVQpOwogCi0JUjEyOF9XUklURSggUjEyOF9QTTRfQlVGRkVSX0RMX1dQVFIsIDAgKTsKLQlSMTI4X1dSSVRFKCBSMTI4X1BNNF9CVUZGRVJfRExfUlBUUiwgMCApOworCVIxMjhfV1JJVEUoUjEyOF9QTTRfQlVGRkVSX0RMX1dQVFIsIDApOworCVIxMjhfV1JJVEUoUjEyOF9QTTRfQlVGRkVSX0RMX1JQVFIsIDApOwogCiAJLyogU2V0IHdhdGVybWFyayBjb250cm9sICovCi0JUjEyOF9XUklURSggUjEyOF9QTTRfQlVGRkVSX1dNX0NOVEwsCi0JCSAgICAoKFIxMjhfV0FURVJNQVJLX0wvNCkgPDwgUjEyOF9XTUFfU0hJRlQpCi0JCSAgICB8ICgoUjEyOF9XQVRFUk1BUktfTS80KSA8PCBSMTI4X1dNQl9TSElGVCkKLQkJICAgIHwgKChSMTI4X1dBVEVSTUFSS19OLzQpIDw8IFIxMjhfV01DX1NISUZUKQotCQkgICAgfCAoKFIxMjhfV0FURVJNQVJLX0svNjQpIDw8IFIxMjhfV0JfV01fU0hJRlQpICk7CisJUjEyOF9XUklURShSMTI4X1BNNF9CVUZGRVJfV01fQ05UTCwKKwkJICAgKChSMTI4X1dBVEVSTUFSS19MIC8gNCkgPDwgUjEyOF9XTUFfU0hJRlQpCisJCSAgIHwgKChSMTI4X1dBVEVSTUFSS19NIC8gNCkgPDwgUjEyOF9XTUJfU0hJRlQpCisJCSAgIHwgKChSMTI4X1dBVEVSTUFSS19OIC8gNCkgPDwgUjEyOF9XTUNfU0hJRlQpCisJCSAgIHwgKChSMTI4X1dBVEVSTUFSS19LIC8gNjQpIDw8IFIxMjhfV0JfV01fU0hJRlQpKTsKIAogCS8qIEZvcmNlIHJlYWQuICBXaHk/ICBCZWNhdXNlIGl0J3MgaW4gdGhlIGV4YW1wbGVzLi4uICovCi0JUjEyOF9SRUFEKCBSMTI4X1BNNF9CVUZGRVJfQUREUiApOworCVIxMjhfUkVBRChSMTI4X1BNNF9CVUZGRVJfQUREUik7CiAKIAkvKiBUdXJuIG9uIGJ1cyBtYXN0ZXJpbmcgKi8KLQl0bXAgPSBSMTI4X1JFQUQoIFIxMjhfQlVTX0NOVEwgKSAmIH5SMTI4X0JVU19NQVNURVJfRElTOwotCVIxMjhfV1JJVEUoIFIxMjhfQlVTX0NOVEwsIHRtcCApOworCXRtcCA9IFIxMjhfUkVBRChSMTI4X0JVU19DTlRMKSAmIH5SMTI4X0JVU19NQVNURVJfRElTOworCVIxMjhfV1JJVEUoUjEyOF9CVVNfQ05UTCwgdG1wKTsKIH0KIAotc3RhdGljIGludCByMTI4X2RvX2luaXRfY2NlKCBkcm1fZGV2aWNlX3QgKmRldiwgZHJtX3IxMjhfaW5pdF90ICppbml0ICkKK3N0YXRpYyBpbnQgcjEyOF9kb19pbml0X2NjZShkcm1fZGV2aWNlX3QgKiBkZXYsIGRybV9yMTI4X2luaXRfdCAqIGluaXQpCiB7CiAJZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdjsKIAotCURSTV9ERUJVRyggIlxuIiApOworCURSTV9ERUJVRygiXG4iKTsKIAotCWRldl9wcml2ID0gZHJtX2FsbG9jKCBzaXplb2YoZHJtX3IxMjhfcHJpdmF0ZV90KSwgRFJNX01FTV9EUklWRVIgKTsKLQlpZiAoIGRldl9wcml2ID09IE5VTEwgKQorCWRldl9wcml2ID0gZHJtX2FsbG9jKHNpemVvZihkcm1fcjEyOF9wcml2YXRlX3QpLCBEUk1fTUVNX0RSSVZFUik7CisJaWYgKGRldl9wcml2ID09IE5VTEwpCiAJCXJldHVybiBEUk1fRVJSKEVOT01FTSk7CiAKLQltZW1zZXQoIGRldl9wcml2LCAwLCBzaXplb2YoZHJtX3IxMjhfcHJpdmF0ZV90KSApOworCW1lbXNldChkZXZfcHJpdiwgMCwgc2l6ZW9mKGRybV9yMTI4X3ByaXZhdGVfdCkpOwogCiAJZGV2X3ByaXYtPmlzX3BjaSA9IGluaXQtPmlzX3BjaTsKIAotCWlmICggZGV2X3ByaXYtPmlzX3BjaSAmJiAhZGV2LT5zZyApIHsKLQkJRFJNX0VSUk9SKCAiUENJIEdBUlQgbWVtb3J5IG5vdCBhbGxvY2F0ZWQhXG4iICk7CisJaWYgKGRldl9wcml2LT5pc19wY2kgJiYgIWRldi0+c2cpIHsKKwkJRFJNX0VSUk9SKCJQQ0kgR0FSVCBtZW1vcnkgbm90IGFsbG9jYXRlZCFcbiIpOwogCQlkZXYtPmRldl9wcml2YXRlID0gKHZvaWQgKilkZXZfcHJpdjsKLQkJcjEyOF9kb19jbGVhbnVwX2NjZSggZGV2ICk7CisJCXIxMjhfZG9fY2xlYW51cF9jY2UoZGV2KTsKIAkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAl9CiAKIAlkZXZfcHJpdi0+dXNlY190aW1lb3V0ID0gaW5pdC0+dXNlY190aW1lb3V0OwotCWlmICggZGV2X3ByaXYtPnVzZWNfdGltZW91dCA8IDEgfHwKLQkgICAgIGRldl9wcml2LT51c2VjX3RpbWVvdXQgPiBSMTI4X01BWF9VU0VDX1RJTUVPVVQgKSB7Ci0JCURSTV9ERUJVRyggIlRJTUVPVVQgcHJvYmxlbSFcbiIgKTsKKwlpZiAoZGV2X3ByaXYtPnVzZWNfdGltZW91dCA8IDEgfHwKKwkgICAgZGV2X3ByaXYtPnVzZWNfdGltZW91dCA+IFIxMjhfTUFYX1VTRUNfVElNRU9VVCkgeworCQlEUk1fREVCVUcoIlRJTUVPVVQgcHJvYmxlbSFcbiIpOwogCQlkZXYtPmRldl9wcml2YXRlID0gKHZvaWQgKilkZXZfcHJpdjsKLQkJcjEyOF9kb19jbGVhbnVwX2NjZSggZGV2ICk7CisJCXIxMjhfZG9fY2xlYW51cF9jY2UoZGV2KTsKIAkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAl9CiAKQEAgLTM4MywyMyArMzgwLDIzIEBACiAKIAkvKiBHSDogU2ltcGxlIGlkbGUgY2hlY2suCiAJICovCi0JYXRvbWljX3NldCggJmRldl9wcml2LT5pZGxlX2NvdW50LCAwICk7CisJYXRvbWljX3NldCgmZGV2X3ByaXYtPmlkbGVfY291bnQsIDApOwogCiAJLyogV2UgZG9uJ3Qgc3VwcG9ydCBhbnl0aGluZyBvdGhlciB0aGFuIGJ1cy1tYXN0ZXJpbmcgcmluZyBtb2RlLAogCSAqIGJ1dCB0aGUgcmluZyBjYW4gYmUgaW4gZWl0aGVyIEFHUCBvciBQQ0kgc3BhY2UgZm9yIHRoZSByaW5nCiAJICogcmVhZCBwb2ludGVyLgogCSAqLwotCWlmICggKCBpbml0LT5jY2VfbW9kZSAhPSBSMTI4X1BNNF8xOTJCTSApICYmCi0JICAgICAoIGluaXQtPmNjZV9tb2RlICE9IFIxMjhfUE00XzEyOEJNXzY0SU5EQk0gKSAmJgotCSAgICAgKCBpbml0LT5jY2VfbW9kZSAhPSBSMTI4X1BNNF82NEJNXzEyOElOREJNICkgJiYKLQkgICAgICggaW5pdC0+Y2NlX21vZGUgIT0gUjEyOF9QTTRfNjRCTV82NFZDQk1fNjRJTkRCTSApICkgewotCQlEUk1fREVCVUcoICJCYWQgY2NlX21vZGUhXG4iICk7CisJaWYgKChpbml0LT5jY2VfbW9kZSAhPSBSMTI4X1BNNF8xOTJCTSkgJiYKKwkgICAgKGluaXQtPmNjZV9tb2RlICE9IFIxMjhfUE00XzEyOEJNXzY0SU5EQk0pICYmCisJICAgIChpbml0LT5jY2VfbW9kZSAhPSBSMTI4X1BNNF82NEJNXzEyOElOREJNKSAmJgorCSAgICAoaW5pdC0+Y2NlX21vZGUgIT0gUjEyOF9QTTRfNjRCTV82NFZDQk1fNjRJTkRCTSkpIHsKKwkJRFJNX0RFQlVHKCJCYWQgY2NlX21vZGUhXG4iKTsKIAkJZGV2LT5kZXZfcHJpdmF0ZSA9ICh2b2lkICopZGV2X3ByaXY7Ci0JCXIxMjhfZG9fY2xlYW51cF9jY2UoIGRldiApOworCQlyMTI4X2RvX2NsZWFudXBfY2NlKGRldik7CiAJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiAJfQogCi0Jc3dpdGNoICggaW5pdC0+Y2NlX21vZGUgKSB7CisJc3dpdGNoIChpbml0LT5jY2VfbW9kZSkgewogCWNhc2UgUjEyOF9QTTRfTk9OUE00OgogCQlkZXZfcHJpdi0+Y2NlX2ZpZm9fc2l6ZSA9IDA7CiAJCWJyZWFrOwpAQCAtNDIwLDcgKzQxNyw3IEBACiAJCWJyZWFrOwogCX0KIAotCXN3aXRjaCAoIGluaXQtPmZiX2JwcCApIHsKKwlzd2l0Y2ggKGluaXQtPmZiX2JwcCkgewogCWNhc2UgMTY6CiAJCWRldl9wcml2LT5jb2xvcl9mbXQgPSBSMTI4X0RBVEFUWVBFX1JHQjU2NTsKIAkJYnJlYWs7CkBAIC00MjksMTIgKzQyNiwxMiBAQAogCQlkZXZfcHJpdi0+Y29sb3JfZm10ID0gUjEyOF9EQVRBVFlQRV9BUkdCODg4ODsKIAkJYnJlYWs7CiAJfQotCWRldl9wcml2LT5mcm9udF9vZmZzZXQJPSBpbml0LT5mcm9udF9vZmZzZXQ7Ci0JZGV2X3ByaXYtPmZyb250X3BpdGNoCT0gaW5pdC0+ZnJvbnRfcGl0Y2g7Ci0JZGV2X3ByaXYtPmJhY2tfb2Zmc2V0CT0gaW5pdC0+YmFja19vZmZzZXQ7Ci0JZGV2X3ByaXYtPmJhY2tfcGl0Y2gJPSBpbml0LT5iYWNrX3BpdGNoOworCWRldl9wcml2LT5mcm9udF9vZmZzZXQgPSBpbml0LT5mcm9udF9vZmZzZXQ7CisJZGV2X3ByaXYtPmZyb250X3BpdGNoID0gaW5pdC0+ZnJvbnRfcGl0Y2g7CisJZGV2X3ByaXYtPmJhY2tfb2Zmc2V0ID0gaW5pdC0+YmFja19vZmZzZXQ7CisJZGV2X3ByaXYtPmJhY2tfcGl0Y2ggPSBpbml0LT5iYWNrX3BpdGNoOwogCi0Jc3dpdGNoICggaW5pdC0+ZGVwdGhfYnBwICkgeworCXN3aXRjaCAoaW5pdC0+ZGVwdGhfYnBwKSB7CiAJY2FzZSAxNjoKIAkJZGV2X3ByaXYtPmRlcHRoX2ZtdCA9IFIxMjhfREFUQVRZUEVfUkdCNTY1OwogCQlicmVhazsKQEAgLTQ0NCwxMzEgKzQ0MSwxMzAgQEAKIAkJZGV2X3ByaXYtPmRlcHRoX2ZtdCA9IFIxMjhfREFUQVRZUEVfQVJHQjg4ODg7CiAJCWJyZWFrOwogCX0KLQlkZXZfcHJpdi0+ZGVwdGhfb2Zmc2V0CT0gaW5pdC0+ZGVwdGhfb2Zmc2V0OwotCWRldl9wcml2LT5kZXB0aF9waXRjaAk9IGluaXQtPmRlcHRoX3BpdGNoOwotCWRldl9wcml2LT5zcGFuX29mZnNldAk9IGluaXQtPnNwYW5fb2Zmc2V0OworCWRldl9wcml2LT5kZXB0aF9vZmZzZXQgPSBpbml0LT5kZXB0aF9vZmZzZXQ7CisJZGV2X3ByaXYtPmRlcHRoX3BpdGNoID0gaW5pdC0+ZGVwdGhfcGl0Y2g7CisJZGV2X3ByaXYtPnNwYW5fb2Zmc2V0ID0gaW5pdC0+c3Bhbl9vZmZzZXQ7CiAKLQlkZXZfcHJpdi0+ZnJvbnRfcGl0Y2hfb2Zmc2V0X2MgPSAoKChkZXZfcHJpdi0+ZnJvbnRfcGl0Y2gvOCkgPDwgMjEpIHwKKwlkZXZfcHJpdi0+ZnJvbnRfcGl0Y2hfb2Zmc2V0X2MgPSAoKChkZXZfcHJpdi0+ZnJvbnRfcGl0Y2ggLyA4KSA8PCAyMSkgfAogCQkJCQkgIChkZXZfcHJpdi0+ZnJvbnRfb2Zmc2V0ID4+IDUpKTsKLQlkZXZfcHJpdi0+YmFja19waXRjaF9vZmZzZXRfYyA9ICgoKGRldl9wcml2LT5iYWNrX3BpdGNoLzgpIDw8IDIxKSB8CisJZGV2X3ByaXYtPmJhY2tfcGl0Y2hfb2Zmc2V0X2MgPSAoKChkZXZfcHJpdi0+YmFja19waXRjaCAvIDgpIDw8IDIxKSB8CiAJCQkJCSAoZGV2X3ByaXYtPmJhY2tfb2Zmc2V0ID4+IDUpKTsKLQlkZXZfcHJpdi0+ZGVwdGhfcGl0Y2hfb2Zmc2V0X2MgPSAoKChkZXZfcHJpdi0+ZGVwdGhfcGl0Y2gvOCkgPDwgMjEpIHwKKwlkZXZfcHJpdi0+ZGVwdGhfcGl0Y2hfb2Zmc2V0X2MgPSAoKChkZXZfcHJpdi0+ZGVwdGhfcGl0Y2ggLyA4KSA8PCAyMSkgfAogCQkJCQkgIChkZXZfcHJpdi0+ZGVwdGhfb2Zmc2V0ID4+IDUpIHwKIAkJCQkJICBSMTI4X0RTVF9USUxFKTsKLQlkZXZfcHJpdi0+c3Bhbl9waXRjaF9vZmZzZXRfYyA9ICgoKGRldl9wcml2LT5kZXB0aF9waXRjaC84KSA8PCAyMSkgfAorCWRldl9wcml2LT5zcGFuX3BpdGNoX29mZnNldF9jID0gKCgoZGV2X3ByaXYtPmRlcHRoX3BpdGNoIC8gOCkgPDwgMjEpIHwKIAkJCQkJIChkZXZfcHJpdi0+c3Bhbl9vZmZzZXQgPj4gNSkpOwogCiAJRFJNX0dFVFNBUkVBKCk7Ci0JCi0JaWYoIWRldl9wcml2LT5zYXJlYSkgeworCisJaWYgKCFkZXZfcHJpdi0+c2FyZWEpIHsKIAkJRFJNX0VSUk9SKCJjb3VsZCBub3QgZmluZCBzYXJlYSFcbiIpOwogCQlkZXYtPmRldl9wcml2YXRlID0gKHZvaWQgKilkZXZfcHJpdjsKLQkJcjEyOF9kb19jbGVhbnVwX2NjZSggZGV2ICk7CisJCXIxMjhfZG9fY2xlYW51cF9jY2UoZGV2KTsKIAkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAl9CiAKIAlkZXZfcHJpdi0+bW1pbyA9IGRybV9jb3JlX2ZpbmRtYXAoZGV2LCBpbml0LT5tbWlvX29mZnNldCk7Ci0JaWYoIWRldl9wcml2LT5tbWlvKSB7CisJaWYgKCFkZXZfcHJpdi0+bW1pbykgewogCQlEUk1fRVJST1IoImNvdWxkIG5vdCBmaW5kIG1taW8gcmVnaW9uIVxuIik7CiAJCWRldi0+ZGV2X3ByaXZhdGUgPSAodm9pZCAqKWRldl9wcml2OwotCQlyMTI4X2RvX2NsZWFudXBfY2NlKCBkZXYgKTsKKwkJcjEyOF9kb19jbGVhbnVwX2NjZShkZXYpOwogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCX0KIAlkZXZfcHJpdi0+Y2NlX3JpbmcgPSBkcm1fY29yZV9maW5kbWFwKGRldiwgaW5pdC0+cmluZ19vZmZzZXQpOwotCWlmKCFkZXZfcHJpdi0+Y2NlX3JpbmcpIHsKKwlpZiAoIWRldl9wcml2LT5jY2VfcmluZykgewogCQlEUk1fRVJST1IoImNvdWxkIG5vdCBmaW5kIGNjZSByaW5nIHJlZ2lvbiFcbiIpOwogCQlkZXYtPmRldl9wcml2YXRlID0gKHZvaWQgKilkZXZfcHJpdjsKLQkJcjEyOF9kb19jbGVhbnVwX2NjZSggZGV2ICk7CisJCXIxMjhfZG9fY2xlYW51cF9jY2UoZGV2KTsKIAkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAl9CiAJZGV2X3ByaXYtPnJpbmdfcnB0ciA9IGRybV9jb3JlX2ZpbmRtYXAoZGV2LCBpbml0LT5yaW5nX3JwdHJfb2Zmc2V0KTsKLQlpZighZGV2X3ByaXYtPnJpbmdfcnB0cikgeworCWlmICghZGV2X3ByaXYtPnJpbmdfcnB0cikgewogCQlEUk1fRVJST1IoImNvdWxkIG5vdCBmaW5kIHJpbmcgcmVhZCBwb2ludGVyIVxuIik7CiAJCWRldi0+ZGV2X3ByaXZhdGUgPSAodm9pZCAqKWRldl9wcml2OwotCQlyMTI4X2RvX2NsZWFudXBfY2NlKCBkZXYgKTsKKwkJcjEyOF9kb19jbGVhbnVwX2NjZShkZXYpOwogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCX0KIAlkZXYtPmFncF9idWZmZXJfdG9rZW4gPSBpbml0LT5idWZmZXJzX29mZnNldDsKIAlkZXYtPmFncF9idWZmZXJfbWFwID0gZHJtX2NvcmVfZmluZG1hcChkZXYsIGluaXQtPmJ1ZmZlcnNfb2Zmc2V0KTsKLQlpZighZGV2LT5hZ3BfYnVmZmVyX21hcCkgeworCWlmICghZGV2LT5hZ3BfYnVmZmVyX21hcCkgewogCQlEUk1fRVJST1IoImNvdWxkIG5vdCBmaW5kIGRtYSBidWZmZXIgcmVnaW9uIVxuIik7CiAJCWRldi0+ZGV2X3ByaXZhdGUgPSAodm9pZCAqKWRldl9wcml2OwotCQlyMTI4X2RvX2NsZWFudXBfY2NlKCBkZXYgKTsKKwkJcjEyOF9kb19jbGVhbnVwX2NjZShkZXYpOwogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCX0KIAotCWlmICggIWRldl9wcml2LT5pc19wY2kgKSB7Ci0JCWRldl9wcml2LT5hZ3BfdGV4dHVyZXMgPSBkcm1fY29yZV9maW5kbWFwKGRldiwgaW5pdC0+YWdwX3RleHR1cmVzX29mZnNldCk7Ci0JCWlmKCFkZXZfcHJpdi0+YWdwX3RleHR1cmVzKSB7CisJaWYgKCFkZXZfcHJpdi0+aXNfcGNpKSB7CisJCWRldl9wcml2LT5hZ3BfdGV4dHVyZXMgPQorCQkgICAgZHJtX2NvcmVfZmluZG1hcChkZXYsIGluaXQtPmFncF90ZXh0dXJlc19vZmZzZXQpOworCQlpZiAoIWRldl9wcml2LT5hZ3BfdGV4dHVyZXMpIHsKIAkJCURSTV9FUlJPUigiY291bGQgbm90IGZpbmQgYWdwIHRleHR1cmUgcmVnaW9uIVxuIik7CiAJCQlkZXYtPmRldl9wcml2YXRlID0gKHZvaWQgKilkZXZfcHJpdjsKLQkJCXIxMjhfZG9fY2xlYW51cF9jY2UoIGRldiApOworCQkJcjEyOF9kb19jbGVhbnVwX2NjZShkZXYpOwogCQkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAkJfQogCX0KIAogCWRldl9wcml2LT5zYXJlYV9wcml2ID0KLQkJKGRybV9yMTI4X3NhcmVhX3QgKikoKHU4ICopZGV2X3ByaXYtPnNhcmVhLT5oYW5kbGUgKwotCQkJCSAgICAgaW5pdC0+c2FyZWFfcHJpdl9vZmZzZXQpOworCSAgICAoZHJtX3IxMjhfc2FyZWFfdCAqKSAoKHU4ICopIGRldl9wcml2LT5zYXJlYS0+aGFuZGxlICsKKwkJCQkgIGluaXQtPnNhcmVhX3ByaXZfb2Zmc2V0KTsKIAogI2lmIF9fT1NfSEFTX0FHUAotCWlmICggIWRldl9wcml2LT5pc19wY2kgKSB7Ci0JCWRybV9jb3JlX2lvcmVtYXAoIGRldl9wcml2LT5jY2VfcmluZywgZGV2ICk7Ci0JCWRybV9jb3JlX2lvcmVtYXAoIGRldl9wcml2LT5yaW5nX3JwdHIsIGRldiApOwotCQlkcm1fY29yZV9pb3JlbWFwKCBkZXYtPmFncF9idWZmZXJfbWFwLCBkZXYgKTsKLQkJaWYoIWRldl9wcml2LT5jY2VfcmluZy0+aGFuZGxlIHx8Ci0JCSAgICFkZXZfcHJpdi0+cmluZ19ycHRyLT5oYW5kbGUgfHwKLQkJICAgIWRldi0+YWdwX2J1ZmZlcl9tYXAtPmhhbmRsZSkgeworCWlmICghZGV2X3ByaXYtPmlzX3BjaSkgeworCQlkcm1fY29yZV9pb3JlbWFwKGRldl9wcml2LT5jY2VfcmluZywgZGV2KTsKKwkJZHJtX2NvcmVfaW9yZW1hcChkZXZfcHJpdi0+cmluZ19ycHRyLCBkZXYpOworCQlkcm1fY29yZV9pb3JlbWFwKGRldi0+YWdwX2J1ZmZlcl9tYXAsIGRldik7CisJCWlmICghZGV2X3ByaXYtPmNjZV9yaW5nLT5oYW5kbGUgfHwKKwkJICAgICFkZXZfcHJpdi0+cmluZ19ycHRyLT5oYW5kbGUgfHwKKwkJICAgICFkZXYtPmFncF9idWZmZXJfbWFwLT5oYW5kbGUpIHsKIAkJCURSTV9FUlJPUigiQ291bGQgbm90IGlvcmVtYXAgYWdwIHJlZ2lvbnMhXG4iKTsKIAkJCWRldi0+ZGV2X3ByaXZhdGUgPSAodm9pZCAqKWRldl9wcml2OwotCQkJcjEyOF9kb19jbGVhbnVwX2NjZSggZGV2ICk7CisJCQlyMTI4X2RvX2NsZWFudXBfY2NlKGRldik7CiAJCQlyZXR1cm4gRFJNX0VSUihFTk9NRU0pOwogCQl9CiAJfSBlbHNlCiAjZW5kaWYKIAl7Ci0JCWRldl9wcml2LT5jY2VfcmluZy0+aGFuZGxlID0KLQkJCSh2b2lkICopZGV2X3ByaXYtPmNjZV9yaW5nLT5vZmZzZXQ7CisJCWRldl9wcml2LT5jY2VfcmluZy0+aGFuZGxlID0gKHZvaWQgKilkZXZfcHJpdi0+Y2NlX3JpbmctPm9mZnNldDsKIAkJZGV2X3ByaXYtPnJpbmdfcnB0ci0+aGFuZGxlID0KLQkJCSh2b2lkICopZGV2X3ByaXYtPnJpbmdfcnB0ci0+b2Zmc2V0OwotCQlkZXYtPmFncF9idWZmZXJfbWFwLT5oYW5kbGUgPSAodm9pZCAqKWRldi0+YWdwX2J1ZmZlcl9tYXAtPm9mZnNldDsKKwkJICAgICh2b2lkICopZGV2X3ByaXYtPnJpbmdfcnB0ci0+b2Zmc2V0OworCQlkZXYtPmFncF9idWZmZXJfbWFwLT5oYW5kbGUgPQorCQkgICAgKHZvaWQgKilkZXYtPmFncF9idWZmZXJfbWFwLT5vZmZzZXQ7CiAJfQogCiAjaWYgX19PU19IQVNfQUdQCi0JaWYgKCAhZGV2X3ByaXYtPmlzX3BjaSApCisJaWYgKCFkZXZfcHJpdi0+aXNfcGNpKQogCQlkZXZfcHJpdi0+Y2NlX2J1ZmZlcnNfb2Zmc2V0ID0gZGV2LT5hZ3AtPmJhc2U7CiAJZWxzZQogI2VuZGlmCiAJCWRldl9wcml2LT5jY2VfYnVmZmVyc19vZmZzZXQgPSAodW5zaWduZWQgbG9uZylkZXYtPnNnLT52aXJ0dWFsOwogCi0JZGV2X3ByaXYtPnJpbmcuc3RhcnQgPSAodTMyICopZGV2X3ByaXYtPmNjZV9yaW5nLT5oYW5kbGU7Ci0JZGV2X3ByaXYtPnJpbmcuZW5kID0gKCh1MzIgKilkZXZfcHJpdi0+Y2NlX3JpbmctPmhhbmRsZQorCWRldl9wcml2LT5yaW5nLnN0YXJ0ID0gKHUzMiAqKSBkZXZfcHJpdi0+Y2NlX3JpbmctPmhhbmRsZTsKKwlkZXZfcHJpdi0+cmluZy5lbmQgPSAoKHUzMiAqKSBkZXZfcHJpdi0+Y2NlX3JpbmctPmhhbmRsZQogCQkJICAgICAgKyBpbml0LT5yaW5nX3NpemUgLyBzaXplb2YodTMyKSk7CiAJZGV2X3ByaXYtPnJpbmcuc2l6ZSA9IGluaXQtPnJpbmdfc2l6ZTsKLQlkZXZfcHJpdi0+cmluZy5zaXplX2wycXcgPSBkcm1fb3JkZXIoIGluaXQtPnJpbmdfc2l6ZSAvIDggKTsKKwlkZXZfcHJpdi0+cmluZy5zaXplX2wycXcgPSBkcm1fb3JkZXIoaW5pdC0+cmluZ19zaXplIC8gOCk7CiAKLQlkZXZfcHJpdi0+cmluZy50YWlsX21hc2sgPQotCQkoZGV2X3ByaXYtPnJpbmcuc2l6ZSAvIHNpemVvZih1MzIpKSAtIDE7CisJZGV2X3ByaXYtPnJpbmcudGFpbF9tYXNrID0gKGRldl9wcml2LT5yaW5nLnNpemUgLyBzaXplb2YodTMyKSkgLSAxOwogCiAJZGV2X3ByaXYtPnJpbmcuaGlnaF9tYXJrID0gMTI4OwogCiAJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZnJhbWUgPSAwOwotCVIxMjhfV1JJVEUoIFIxMjhfTEFTVF9GUkFNRV9SRUcsIGRldl9wcml2LT5zYXJlYV9wcml2LT5sYXN0X2ZyYW1lICk7CisJUjEyOF9XUklURShSMTI4X0xBU1RfRlJBTUVfUkVHLCBkZXZfcHJpdi0+c2FyZWFfcHJpdi0+bGFzdF9mcmFtZSk7CiAKIAlkZXZfcHJpdi0+c2FyZWFfcHJpdi0+bGFzdF9kaXNwYXRjaCA9IDA7Ci0JUjEyOF9XUklURSggUjEyOF9MQVNUX0RJU1BBVENIX1JFRywKLQkJICAgIGRldl9wcml2LT5zYXJlYV9wcml2LT5sYXN0X2Rpc3BhdGNoICk7CisJUjEyOF9XUklURShSMTI4X0xBU1RfRElTUEFUQ0hfUkVHLCBkZXZfcHJpdi0+c2FyZWFfcHJpdi0+bGFzdF9kaXNwYXRjaCk7CiAKICNpZiBfX09TX0hBU19BR1AKLQlpZiAoIGRldl9wcml2LT5pc19wY2kgKSB7CisJaWYgKGRldl9wcml2LT5pc19wY2kpIHsKICNlbmRpZgogCQlkZXZfcHJpdi0+Z2FydF9pbmZvLmdhcnRfdGFibGVfbG9jYXRpb24gPSBEUk1fQVRJX0dBUlRfTUFJTjsKIAkJZGV2X3ByaXYtPmdhcnRfaW5mby5hZGRyID0gZGV2X3ByaXYtPmdhcnRfaW5mby5idXNfYWRkciA9IDA7Ci0gCQlkZXZfcHJpdi0+Z2FydF9pbmZvLmlzX3BjaWUgPSAwOworCQlkZXZfcHJpdi0+Z2FydF9pbmZvLmlzX3BjaWUgPSAwOwogCQlpZiAoIWRybV9hdGlfcGNpZ2FydF9pbml0KGRldiwgJmRldl9wcml2LT5nYXJ0X2luZm8pKSB7Ci0JCQlEUk1fRVJST1IoICJmYWlsZWQgdG8gaW5pdCBQQ0kgR0FSVCFcbiIgKTsKKwkJCURSTV9FUlJPUigiZmFpbGVkIHRvIGluaXQgUENJIEdBUlQhXG4iKTsKIAkJCWRldi0+ZGV2X3ByaXZhdGUgPSAodm9pZCAqKWRldl9wcml2OwotCQkJcjEyOF9kb19jbGVhbnVwX2NjZSggZGV2ICk7CisJCQlyMTI4X2RvX2NsZWFudXBfY2NlKGRldik7CiAJCQlyZXR1cm4gRFJNX0VSUihFTk9NRU0pOwogCQl9CiAJCVIxMjhfV1JJVEUoUjEyOF9QQ0lfR0FSVF9QQUdFLCBkZXZfcHJpdi0+Z2FydF9pbmZvLmJ1c19hZGRyKTsKQEAgLTU3Niw4OCArNTcyLDkyIEBACiAJfQogI2VuZGlmCiAKLQlyMTI4X2NjZV9pbml0X3JpbmdfYnVmZmVyKCBkZXYsIGRldl9wcml2ICk7Ci0JcjEyOF9jY2VfbG9hZF9taWNyb2NvZGUoIGRldl9wcml2ICk7CisJcjEyOF9jY2VfaW5pdF9yaW5nX2J1ZmZlcihkZXYsIGRldl9wcml2KTsKKwlyMTI4X2NjZV9sb2FkX21pY3JvY29kZShkZXZfcHJpdik7CiAKIAlkZXYtPmRldl9wcml2YXRlID0gKHZvaWQgKilkZXZfcHJpdjsKIAotCXIxMjhfZG9fZW5naW5lX3Jlc2V0KCBkZXYgKTsKKwlyMTI4X2RvX2VuZ2luZV9yZXNldChkZXYpOwogCiAJcmV0dXJuIDA7CiB9CiAKLWludCByMTI4X2RvX2NsZWFudXBfY2NlKCBkcm1fZGV2aWNlX3QgKmRldiApCitpbnQgcjEyOF9kb19jbGVhbnVwX2NjZShkcm1fZGV2aWNlX3QgKiBkZXYpCiB7CiAKIAkvKiBNYWtlIHN1cmUgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgaGVyZSBiZWNhdXNlIHRoZSB1bmluc3RhbGwgaW9jdGwKIAkgKiBtYXkgbm90IGhhdmUgYmVlbiBjYWxsZWQgZnJvbSB1c2Vyc3BhY2UgYW5kIGFmdGVyIGRldl9wcml2YXRlCiAJICogaXMgZnJlZWQsIGl0J3MgdG9vIGxhdGUuCiAJICovCi0JaWYgKCBkZXYtPmlycV9lbmFibGVkICkgZHJtX2lycV91bmluc3RhbGwoZGV2KTsKKwlpZiAoZGV2LT5pcnFfZW5hYmxlZCkKKwkJZHJtX2lycV91bmluc3RhbGwoZGV2KTsKIAotCWlmICggZGV2LT5kZXZfcHJpdmF0ZSApIHsKKwlpZiAoZGV2LT5kZXZfcHJpdmF0ZSkgewogCQlkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAogI2lmIF9fT1NfSEFTX0FHUAotCQlpZiAoICFkZXZfcHJpdi0+aXNfcGNpICkgewotCQkJaWYgKCBkZXZfcHJpdi0+Y2NlX3JpbmcgIT0gTlVMTCApCi0JCQkJZHJtX2NvcmVfaW9yZW1hcGZyZWUoIGRldl9wcml2LT5jY2VfcmluZywgZGV2ICk7Ci0JCQlpZiAoIGRldl9wcml2LT5yaW5nX3JwdHIgIT0gTlVMTCApCi0JCQkJZHJtX2NvcmVfaW9yZW1hcGZyZWUoIGRldl9wcml2LT5yaW5nX3JwdHIsIGRldiApOwotCQkJaWYgKCBkZXYtPmFncF9idWZmZXJfbWFwICE9IE5VTEwgKQotCQkJCWRybV9jb3JlX2lvcmVtYXBmcmVlKCBkZXYtPmFncF9idWZmZXJfbWFwLCBkZXYgKTsKKwkJaWYgKCFkZXZfcHJpdi0+aXNfcGNpKSB7CisJCQlpZiAoZGV2X3ByaXYtPmNjZV9yaW5nICE9IE5VTEwpCisJCQkJZHJtX2NvcmVfaW9yZW1hcGZyZWUoZGV2X3ByaXYtPmNjZV9yaW5nLCBkZXYpOworCQkJaWYgKGRldl9wcml2LT5yaW5nX3JwdHIgIT0gTlVMTCkKKwkJCQlkcm1fY29yZV9pb3JlbWFwZnJlZShkZXZfcHJpdi0+cmluZ19ycHRyLCBkZXYpOworCQkJaWYgKGRldi0+YWdwX2J1ZmZlcl9tYXAgIT0gTlVMTCkKKwkJCQlkcm1fY29yZV9pb3JlbWFwZnJlZShkZXYtPmFncF9idWZmZXJfbWFwLCBkZXYpOwogCQl9IGVsc2UKICNlbmRpZgogCQl7Ci0gCQkJaWYgKGRldl9wcml2LT5nYXJ0X2luZm8uYnVzX2FkZHIpCi0JCQkJaWYgKCFkcm1fYXRpX3BjaWdhcnRfY2xlYW51cCggZGV2LAotCQkJCQkJCSAgICAgICZkZXZfcHJpdi0+Z2FydF9pbmZvKSkKLQkJCQkJRFJNX0VSUk9SKCAiZmFpbGVkIHRvIGNsZWFudXAgUENJIEdBUlQhXG4iICk7CisJCQlpZiAoZGV2X3ByaXYtPmdhcnRfaW5mby5idXNfYWRkcikKKwkJCQlpZiAoIWRybV9hdGlfcGNpZ2FydF9jbGVhbnVwKGRldiwKKwkJCQkJCQkgICAgICZkZXZfcHJpdi0+CisJCQkJCQkJICAgICBnYXJ0X2luZm8pKQorCQkJCQlEUk1fRVJST1IKKwkJCQkJICAgICgiZmFpbGVkIHRvIGNsZWFudXAgUENJIEdBUlQhXG4iKTsKIAkJfQogCi0JCWRybV9mcmVlKCBkZXYtPmRldl9wcml2YXRlLCBzaXplb2YoZHJtX3IxMjhfcHJpdmF0ZV90KSwKLQkJCSAgIERSTV9NRU1fRFJJVkVSICk7CisJCWRybV9mcmVlKGRldi0+ZGV2X3ByaXZhdGUsIHNpemVvZihkcm1fcjEyOF9wcml2YXRlX3QpLAorCQkJIERSTV9NRU1fRFJJVkVSKTsKIAkJZGV2LT5kZXZfcHJpdmF0ZSA9IE5VTEw7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLWludCByMTI4X2NjZV9pbml0KCBEUk1fSU9DVExfQVJHUyApCitpbnQgcjEyOF9jY2VfaW5pdChEUk1fSU9DVExfQVJHUykKIHsKIAlEUk1fREVWSUNFOwogCWRybV9yMTI4X2luaXRfdCBpbml0OwogCi0JRFJNX0RFQlVHKCAiXG4iICk7CisJRFJNX0RFQlVHKCJcbiIpOwogCi0JTE9DS19URVNUX1dJVEhfUkVUVVJOKCBkZXYsIGZpbHAgKTsKKwlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxwKTsKIAotCURSTV9DT1BZX0ZST01fVVNFUl9JT0NUTCggaW5pdCwgKGRybV9yMTI4X2luaXRfdCBfX3VzZXIgKilkYXRhLCBzaXplb2YoaW5pdCkgKTsKKwlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwoaW5pdCwgKGRybV9yMTI4X2luaXRfdCBfX3VzZXIgKikgZGF0YSwKKwkJCQkgc2l6ZW9mKGluaXQpKTsKIAotCXN3aXRjaCAoIGluaXQuZnVuYyApIHsKKwlzd2l0Y2ggKGluaXQuZnVuYykgewogCWNhc2UgUjEyOF9JTklUX0NDRToKLQkJcmV0dXJuIHIxMjhfZG9faW5pdF9jY2UoIGRldiwgJmluaXQgKTsKKwkJcmV0dXJuIHIxMjhfZG9faW5pdF9jY2UoZGV2LCAmaW5pdCk7CiAJY2FzZSBSMTI4X0NMRUFOVVBfQ0NFOgotCQlyZXR1cm4gcjEyOF9kb19jbGVhbnVwX2NjZSggZGV2ICk7CisJCXJldHVybiByMTI4X2RvX2NsZWFudXBfY2NlKGRldik7CiAJfQogCiAJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIH0KIAotaW50IHIxMjhfY2NlX3N0YXJ0KCBEUk1fSU9DVExfQVJHUyApCitpbnQgcjEyOF9jY2Vfc3RhcnQoRFJNX0lPQ1RMX0FSR1MpCiB7CiAJRFJNX0RFVklDRTsKIAlkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlEUk1fREVCVUcoICJcbiIgKTsKKwlEUk1fREVCVUcoIlxuIik7CiAKLQlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oIGRldiwgZmlscCApOworCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbHApOwogCi0JaWYgKCBkZXZfcHJpdi0+Y2NlX3J1bm5pbmcgfHwgZGV2X3ByaXYtPmNjZV9tb2RlID09IFIxMjhfUE00X05PTlBNNCApIHsKLQkJRFJNX0RFQlVHKCAiJXMgd2hpbGUgQ0NFIHJ1bm5pbmdcbiIsIF9fRlVOQ1RJT05fXyApOworCWlmIChkZXZfcHJpdi0+Y2NlX3J1bm5pbmcgfHwgZGV2X3ByaXYtPmNjZV9tb2RlID09IFIxMjhfUE00X05PTlBNNCkgeworCQlEUk1fREVCVUcoIiVzIHdoaWxlIENDRSBydW5uaW5nXG4iLCBfX0ZVTkNUSU9OX18pOwogCQlyZXR1cm4gMDsKIAl9CiAKLQlyMTI4X2RvX2NjZV9zdGFydCggZGV2X3ByaXYgKTsKKwlyMTI4X2RvX2NjZV9zdGFydChkZXZfcHJpdik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTY2NSw2MSArNjY1LDYzIEBACiAvKiBTdG9wIHRoZSBDQ0UuICBUaGUgZW5naW5lIG11c3QgaGF2ZSBiZWVuIGlkbGVkIGJlZm9yZSBjYWxsaW5nIHRoaXMKICAqIHJvdXRpbmUuCiAgKi8KLWludCByMTI4X2NjZV9zdG9wKCBEUk1fSU9DVExfQVJHUyApCitpbnQgcjEyOF9jY2Vfc3RvcChEUk1fSU9DVExfQVJHUykKIHsKIAlEUk1fREVWSUNFOwogCWRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWRybV9yMTI4X2NjZV9zdG9wX3Qgc3RvcDsKIAlpbnQgcmV0OwotCURSTV9ERUJVRyggIlxuIiApOworCURSTV9ERUJVRygiXG4iKTsKIAotCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTiggZGV2LCBmaWxwICk7CisJTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlscCk7CiAKLQlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwoc3RvcCwgKGRybV9yMTI4X2NjZV9zdG9wX3QgX191c2VyICopZGF0YSwgc2l6ZW9mKHN0b3ApICk7CisJRFJNX0NPUFlfRlJPTV9VU0VSX0lPQ1RMKHN0b3AsIChkcm1fcjEyOF9jY2Vfc3RvcF90IF9fdXNlciAqKSBkYXRhLAorCQkJCSBzaXplb2Yoc3RvcCkpOwogCiAJLyogRmx1c2ggYW55IHBlbmRpbmcgQ0NFIGNvbW1hbmRzLiAgVGhpcyBlbnN1cmVzIGFueSBvdXRzdGFuZGluZwogCSAqIGNvbW1hbmRzIGFyZSBleGVjdHV0ZWQgYnkgdGhlIGVuZ2luZSBiZWZvcmUgd2UgdHVybiBpdCBvZmYuCiAJICovCi0JaWYgKCBzdG9wLmZsdXNoICkgewotCQlyMTI4X2RvX2NjZV9mbHVzaCggZGV2X3ByaXYgKTsKKwlpZiAoc3RvcC5mbHVzaCkgeworCQlyMTI4X2RvX2NjZV9mbHVzaChkZXZfcHJpdik7CiAJfQogCiAJLyogSWYgd2UgZmFpbCB0byBtYWtlIHRoZSBlbmdpbmUgZ28gaWRsZSwgd2UgcmV0dXJuIGFuIGVycm9yCiAJICogY29kZSBzbyB0aGF0IHRoZSBEUk0gaW9jdGwgd3JhcHBlciBjYW4gdHJ5IGFnYWluLgogCSAqLwotCWlmICggc3RvcC5pZGxlICkgewotCQlyZXQgPSByMTI4X2RvX2NjZV9pZGxlKCBkZXZfcHJpdiApOwotCQlpZiAoIHJldCApIHJldHVybiByZXQ7CisJaWYgKHN0b3AuaWRsZSkgeworCQlyZXQgPSByMTI4X2RvX2NjZV9pZGxlKGRldl9wcml2KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CiAJfQogCiAJLyogRmluYWxseSwgd2UgY2FuIHR1cm4gb2ZmIHRoZSBDQ0UuICBJZiB0aGUgZW5naW5lIGlzbid0IGlkbGUsCiAJICogd2Ugd2lsbCBnZXQgc29tZSBkcm9wcGVkIHRyaWFuZ2xlcyBhcyB0aGV5IHdvbid0IGJlIGZ1bGx5CiAJICogcmVuZGVyZWQgYmVmb3JlIHRoZSBDQ0UgaXMgc2h1dCBkb3duLgogCSAqLwotCXIxMjhfZG9fY2NlX3N0b3AoIGRldl9wcml2ICk7CisJcjEyOF9kb19jY2Vfc3RvcChkZXZfcHJpdik7CiAKIAkvKiBSZXNldCB0aGUgZW5naW5lICovCi0JcjEyOF9kb19lbmdpbmVfcmVzZXQoIGRldiApOworCXIxMjhfZG9fZW5naW5lX3Jlc2V0KGRldik7CiAKIAlyZXR1cm4gMDsKIH0KIAogLyogSnVzdCByZXNldCB0aGUgQ0NFIHJpbmcuICBDYWxsZWQgYXMgcGFydCBvZiBhbiBYIFNlcnZlciBlbmdpbmUgcmVzZXQuCiAgKi8KLWludCByMTI4X2NjZV9yZXNldCggRFJNX0lPQ1RMX0FSR1MgKQoraW50IHIxMjhfY2NlX3Jlc2V0KERSTV9JT0NUTF9BUkdTKQogewogCURSTV9ERVZJQ0U7CiAJZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JRFJNX0RFQlVHKCAiXG4iICk7CisJRFJNX0RFQlVHKCJcbiIpOwogCi0JTE9DS19URVNUX1dJVEhfUkVUVVJOKCBkZXYsIGZpbHAgKTsKKwlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxwKTsKIAotCWlmICggIWRldl9wcml2ICkgewotCQlEUk1fREVCVUcoICIlcyBjYWxsZWQgYmVmb3JlIGluaXQgZG9uZVxuIiwgX19GVU5DVElPTl9fICk7CisJaWYgKCFkZXZfcHJpdikgeworCQlEUk1fREVCVUcoIiVzIGNhbGxlZCBiZWZvcmUgaW5pdCBkb25lXG4iLCBfX0ZVTkNUSU9OX18pOwogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCX0KIAotCXIxMjhfZG9fY2NlX3Jlc2V0KCBkZXZfcHJpdiApOworCXIxMjhfZG9fY2NlX3Jlc2V0KGRldl9wcml2KTsKIAogCS8qIFRoZSBDQ0UgaXMgbm8gbG9uZ2VyIHJ1bm5pbmcgYWZ0ZXIgYW4gZW5naW5lIHJlc2V0ICovCiAJZGV2X3ByaXYtPmNjZV9ydW5uaW5nID0gMDsKQEAgLTcyNywzNyArNzI5LDM2IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCByMTI4X2NjZV9pZGxlKCBEUk1fSU9DVExfQVJHUyApCitpbnQgcjEyOF9jY2VfaWRsZShEUk1fSU9DVExfQVJHUykKIHsKIAlEUk1fREVWSUNFOwogCWRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCURSTV9ERUJVRyggIlxuIiApOworCURSTV9ERUJVRygiXG4iKTsKIAotCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTiggZGV2LCBmaWxwICk7CisJTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlscCk7CiAKLQlpZiAoIGRldl9wcml2LT5jY2VfcnVubmluZyApIHsKLQkJcjEyOF9kb19jY2VfZmx1c2goIGRldl9wcml2ICk7CisJaWYgKGRldl9wcml2LT5jY2VfcnVubmluZykgeworCQlyMTI4X2RvX2NjZV9mbHVzaChkZXZfcHJpdik7CiAJfQogCi0JcmV0dXJuIHIxMjhfZG9fY2NlX2lkbGUoIGRldl9wcml2ICk7CisJcmV0dXJuIHIxMjhfZG9fY2NlX2lkbGUoZGV2X3ByaXYpOwogfQogCi1pbnQgcjEyOF9lbmdpbmVfcmVzZXQoIERSTV9JT0NUTF9BUkdTICkKK2ludCByMTI4X2VuZ2luZV9yZXNldChEUk1fSU9DVExfQVJHUykKIHsKIAlEUk1fREVWSUNFOwotCURSTV9ERUJVRyggIlxuIiApOworCURSTV9ERUJVRygiXG4iKTsKIAotCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTiggZGV2LCBmaWxwICk7CisJTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlscCk7CiAKLQlyZXR1cm4gcjEyOF9kb19lbmdpbmVfcmVzZXQoIGRldiApOworCXJldHVybiByMTI4X2RvX2VuZ2luZV9yZXNldChkZXYpOwogfQogCi1pbnQgcjEyOF9mdWxsc2NyZWVuKCBEUk1fSU9DVExfQVJHUyApCitpbnQgcjEyOF9mdWxsc2NyZWVuKERSTV9JT0NUTF9BUkdTKQogewogCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiB9CiAKLQogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogRnJlZWxpc3QgbWFuYWdlbWVudAogICovCkBAIC03NjUsNyArNzY2LDcgQEAKICNkZWZpbmUgUjEyOF9CVUZGRVJfRlJFRQkwCiAKICNpZiAwCi1zdGF0aWMgaW50IHIxMjhfZnJlZWxpc3RfaW5pdCggZHJtX2RldmljZV90ICpkZXYgKQorc3RhdGljIGludCByMTI4X2ZyZWVsaXN0X2luaXQoZHJtX2RldmljZV90ICogZGV2KQogewogCWRybV9kZXZpY2VfZG1hX3QgKmRtYSA9IGRldi0+ZG1hOwogCWRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwpAQCAtNzc0LDI3ICs3NzUsMjYgQEAKIAlkcm1fcjEyOF9mcmVlbGlzdF90ICplbnRyeTsKIAlpbnQgaTsKIAotCWRldl9wcml2LT5oZWFkID0gZHJtX2FsbG9jKCBzaXplb2YoZHJtX3IxMjhfZnJlZWxpc3RfdCksCi0JCQkJICAgICBEUk1fTUVNX0RSSVZFUiApOwotCWlmICggZGV2X3ByaXYtPmhlYWQgPT0gTlVMTCApCisJZGV2X3ByaXYtPmhlYWQgPSBkcm1fYWxsb2Moc2l6ZW9mKGRybV9yMTI4X2ZyZWVsaXN0X3QpLCBEUk1fTUVNX0RSSVZFUik7CisJaWYgKGRldl9wcml2LT5oZWFkID09IE5VTEwpCiAJCXJldHVybiBEUk1fRVJSKEVOT01FTSk7CiAKLQltZW1zZXQoIGRldl9wcml2LT5oZWFkLCAwLCBzaXplb2YoZHJtX3IxMjhfZnJlZWxpc3RfdCkgKTsKKwltZW1zZXQoZGV2X3ByaXYtPmhlYWQsIDAsIHNpemVvZihkcm1fcjEyOF9mcmVlbGlzdF90KSk7CiAJZGV2X3ByaXYtPmhlYWQtPmFnZSA9IFIxMjhfQlVGRkVSX1VTRUQ7CiAKLQlmb3IgKCBpID0gMCA7IGkgPCBkbWEtPmJ1Zl9jb3VudCA7IGkrKyApIHsKKwlmb3IgKGkgPSAwOyBpIDwgZG1hLT5idWZfY291bnQ7IGkrKykgewogCQlidWYgPSBkbWEtPmJ1Zmxpc3RbaV07CiAJCWJ1Zl9wcml2ID0gYnVmLT5kZXZfcHJpdmF0ZTsKIAotCQllbnRyeSA9IGRybV9hbGxvYyggc2l6ZW9mKGRybV9yMTI4X2ZyZWVsaXN0X3QpLAotCQkJCSAgICBEUk1fTUVNX0RSSVZFUiApOwotCQlpZiAoICFlbnRyeSApIHJldHVybiBEUk1fRVJSKEVOT01FTSk7CisJCWVudHJ5ID0gZHJtX2FsbG9jKHNpemVvZihkcm1fcjEyOF9mcmVlbGlzdF90KSwgRFJNX01FTV9EUklWRVIpOworCQlpZiAoIWVudHJ5KQorCQkJcmV0dXJuIERSTV9FUlIoRU5PTUVNKTsKIAogCQllbnRyeS0+YWdlID0gUjEyOF9CVUZGRVJfRlJFRTsKIAkJZW50cnktPmJ1ZiA9IGJ1ZjsKIAkJZW50cnktPnByZXYgPSBkZXZfcHJpdi0+aGVhZDsKIAkJZW50cnktPm5leHQgPSBkZXZfcHJpdi0+aGVhZC0+bmV4dDsKLQkJaWYgKCAhZW50cnktPm5leHQgKQorCQlpZiAoIWVudHJ5LT5uZXh0KQogCQkJZGV2X3ByaXYtPnRhaWwgPSBlbnRyeTsKIAogCQlidWZfcHJpdi0+ZGlzY2FyZCA9IDA7CkBAIC04MDMsNyArODAzLDcgQEAKIAogCQlkZXZfcHJpdi0+aGVhZC0+bmV4dCA9IGVudHJ5OwogCi0JCWlmICggZGV2X3ByaXYtPmhlYWQtPm5leHQgKQorCQlpZiAoZGV2X3ByaXYtPmhlYWQtPm5leHQpCiAJCQlkZXZfcHJpdi0+aGVhZC0+bmV4dC0+cHJldiA9IGVudHJ5OwogCX0KIApAQCAtODEyLDcgKzgxMiw3IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIGRybV9idWZfdCAqcjEyOF9mcmVlbGlzdF9nZXQoIGRybV9kZXZpY2VfdCAqZGV2ICkKK3N0YXRpYyBkcm1fYnVmX3QgKnIxMjhfZnJlZWxpc3RfZ2V0KGRybV9kZXZpY2VfdCAqIGRldikKIHsKIAlkcm1fZGV2aWNlX2RtYV90ICpkbWEgPSBkZXYtPmRtYTsKIAlkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKQEAgLTgyMiwyMCArODIyLDIwIEBACiAKIAkvKiBGSVhNRTogT3B0aW1pemUgLS0gdXNlIGZyZWVsaXN0IGNvZGUgKi8KIAotCWZvciAoIGkgPSAwIDsgaSA8IGRtYS0+YnVmX2NvdW50IDsgaSsrICkgeworCWZvciAoaSA9IDA7IGkgPCBkbWEtPmJ1Zl9jb3VudDsgaSsrKSB7CiAJCWJ1ZiA9IGRtYS0+YnVmbGlzdFtpXTsKIAkJYnVmX3ByaXYgPSBidWYtPmRldl9wcml2YXRlOwotCQlpZiAoIGJ1Zi0+ZmlscCA9PSAwICkKKwkJaWYgKGJ1Zi0+ZmlscCA9PSAwKQogCQkJcmV0dXJuIGJ1ZjsKIAl9CiAKLQlmb3IgKCB0ID0gMCA7IHQgPCBkZXZfcHJpdi0+dXNlY190aW1lb3V0IDsgdCsrICkgewotCQl1MzIgZG9uZV9hZ2UgPSBSMTI4X1JFQUQoIFIxMjhfTEFTVF9ESVNQQVRDSF9SRUcgKTsKKwlmb3IgKHQgPSAwOyB0IDwgZGV2X3ByaXYtPnVzZWNfdGltZW91dDsgdCsrKSB7CisJCXUzMiBkb25lX2FnZSA9IFIxMjhfUkVBRChSMTI4X0xBU1RfRElTUEFUQ0hfUkVHKTsKIAotCQlmb3IgKCBpID0gMCA7IGkgPCBkbWEtPmJ1Zl9jb3VudCA7IGkrKyApIHsKKwkJZm9yIChpID0gMDsgaSA8IGRtYS0+YnVmX2NvdW50OyBpKyspIHsKIAkJCWJ1ZiA9IGRtYS0+YnVmbGlzdFtpXTsKIAkJCWJ1Zl9wcml2ID0gYnVmLT5kZXZfcHJpdmF0ZTsKLQkJCWlmICggYnVmLT5wZW5kaW5nICYmIGJ1Zl9wcml2LT5hZ2UgPD0gZG9uZV9hZ2UgKSB7CisJCQlpZiAoYnVmLT5wZW5kaW5nICYmIGJ1Zl9wcml2LT5hZ2UgPD0gZG9uZV9hZ2UpIHsKIAkJCQkvKiBUaGUgYnVmZmVyIGhhcyBiZWVuIHByb2Nlc3NlZCwgc28gaXQKIAkJCQkgKiBjYW4gbm93IGJlIHVzZWQuCiAJCQkJICovCkBAIC04NDMsNjMgKzg0Myw2MyBAQAogCQkJCXJldHVybiBidWY7CiAJCQl9CiAJCX0KLQkJRFJNX1VERUxBWSggMSApOworCQlEUk1fVURFTEFZKDEpOwogCX0KIAotCURSTV9ERUJVRyggInJldHVybmluZyBOVUxMIVxuIiApOworCURSTV9ERUJVRygicmV0dXJuaW5nIE5VTEwhXG4iKTsKIAlyZXR1cm4gTlVMTDsKIH0KIAotdm9pZCByMTI4X2ZyZWVsaXN0X3Jlc2V0KCBkcm1fZGV2aWNlX3QgKmRldiApCit2b2lkIHIxMjhfZnJlZWxpc3RfcmVzZXQoZHJtX2RldmljZV90ICogZGV2KQogewogCWRybV9kZXZpY2VfZG1hX3QgKmRtYSA9IGRldi0+ZG1hOwogCWludCBpOwogCi0JZm9yICggaSA9IDAgOyBpIDwgZG1hLT5idWZfY291bnQgOyBpKysgKSB7CisJZm9yIChpID0gMDsgaSA8IGRtYS0+YnVmX2NvdW50OyBpKyspIHsKIAkJZHJtX2J1Zl90ICpidWYgPSBkbWEtPmJ1Zmxpc3RbaV07CiAJCWRybV9yMTI4X2J1Zl9wcml2X3QgKmJ1Zl9wcml2ID0gYnVmLT5kZXZfcHJpdmF0ZTsKIAkJYnVmX3ByaXYtPmFnZSA9IDA7CiAJfQogfQogCi0KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqIENDRSBjb21tYW5kIHN1Ym1pc3Npb24KICAqLwogCi1pbnQgcjEyOF93YWl0X3JpbmcoIGRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYsIGludCBuICkKK2ludCByMTI4X3dhaXRfcmluZyhkcm1fcjEyOF9wcml2YXRlX3QgKiBkZXZfcHJpdiwgaW50IG4pCiB7CiAJZHJtX3IxMjhfcmluZ19idWZmZXJfdCAqcmluZyA9ICZkZXZfcHJpdi0+cmluZzsKIAlpbnQgaTsKIAotCWZvciAoIGkgPSAwIDsgaSA8IGRldl9wcml2LT51c2VjX3RpbWVvdXQgOyBpKysgKSB7Ci0JCXIxMjhfdXBkYXRlX3Jpbmdfc25hcHNob3QoIGRldl9wcml2ICk7Ci0JCWlmICggcmluZy0+c3BhY2UgPj0gbiApCisJZm9yIChpID0gMDsgaSA8IGRldl9wcml2LT51c2VjX3RpbWVvdXQ7IGkrKykgeworCQlyMTI4X3VwZGF0ZV9yaW5nX3NuYXBzaG90KGRldl9wcml2KTsKKwkJaWYgKHJpbmctPnNwYWNlID49IG4pCiAJCQlyZXR1cm4gMDsKLQkJRFJNX1VERUxBWSggMSApOworCQlEUk1fVURFTEFZKDEpOwogCX0KIAogCS8qIEZJWE1FOiBUaGlzIGlzIGJlaW5nIGlnbm9yZWQuLi4gKi8KLQlEUk1fRVJST1IoICJmYWlsZWQhXG4iICk7CisJRFJNX0VSUk9SKCJmYWlsZWQhXG4iKTsKIAlyZXR1cm4gRFJNX0VSUihFQlVTWSk7CiB9CiAKLXN0YXRpYyBpbnQgcjEyOF9jY2VfZ2V0X2J1ZmZlcnMoIERSTUZJTEUgZmlscCwgZHJtX2RldmljZV90ICpkZXYsIGRybV9kbWFfdCAqZCApCitzdGF0aWMgaW50IHIxMjhfY2NlX2dldF9idWZmZXJzKERSTUZJTEUgZmlscCwgZHJtX2RldmljZV90ICogZGV2LCBkcm1fZG1hX3QgKiBkKQogewogCWludCBpOwogCWRybV9idWZfdCAqYnVmOwogCi0JZm9yICggaSA9IGQtPmdyYW50ZWRfY291bnQgOyBpIDwgZC0+cmVxdWVzdF9jb3VudCA7IGkrKyApIHsKLQkJYnVmID0gcjEyOF9mcmVlbGlzdF9nZXQoIGRldiApOwotCQlpZiAoICFidWYgKSByZXR1cm4gRFJNX0VSUihFQUdBSU4pOworCWZvciAoaSA9IGQtPmdyYW50ZWRfY291bnQ7IGkgPCBkLT5yZXF1ZXN0X2NvdW50OyBpKyspIHsKKwkJYnVmID0gcjEyOF9mcmVlbGlzdF9nZXQoZGV2KTsKKwkJaWYgKCFidWYpCisJCQlyZXR1cm4gRFJNX0VSUihFQUdBSU4pOwogCiAJCWJ1Zi0+ZmlscCA9IGZpbHA7CiAKLQkJaWYgKCBEUk1fQ09QWV9UT19VU0VSKCAmZC0+cmVxdWVzdF9pbmRpY2VzW2ldLCAmYnVmLT5pZHgsCi0JCQkJICAgc2l6ZW9mKGJ1Zi0+aWR4KSApICkKKwkJaWYgKERSTV9DT1BZX1RPX1VTRVIoJmQtPnJlcXVlc3RfaW5kaWNlc1tpXSwgJmJ1Zi0+aWR4LAorCQkJCSAgICAgc2l6ZW9mKGJ1Zi0+aWR4KSkpCiAJCQlyZXR1cm4gRFJNX0VSUihFRkFVTFQpOwotCQlpZiAoIERSTV9DT1BZX1RPX1VTRVIoICZkLT5yZXF1ZXN0X3NpemVzW2ldLCAmYnVmLT50b3RhbCwKLQkJCQkgICBzaXplb2YoYnVmLT50b3RhbCkgKSApCisJCWlmIChEUk1fQ09QWV9UT19VU0VSKCZkLT5yZXF1ZXN0X3NpemVzW2ldLCAmYnVmLT50b3RhbCwKKwkJCQkgICAgIHNpemVvZihidWYtPnRvdGFsKSkpCiAJCQlyZXR1cm4gRFJNX0VSUihFRkFVTFQpOwogCiAJCWQtPmdyYW50ZWRfY291bnQrKzsKQEAgLTkwNyw3ICs5MDcsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgcjEyOF9jY2VfYnVmZmVycyggRFJNX0lPQ1RMX0FSR1MgKQoraW50IHIxMjhfY2NlX2J1ZmZlcnMoRFJNX0lPQ1RMX0FSR1MpCiB7CiAJRFJNX0RFVklDRTsKIAlkcm1fZGV2aWNlX2RtYV90ICpkbWEgPSBkZXYtPmRtYTsKQEAgLTkxNSwzMyArOTE1LDMzIEBACiAJZHJtX2RtYV90IF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWRhdGE7CiAJZHJtX2RtYV90IGQ7CiAKLQlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oIGRldiwgZmlscCApOworCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbHApOwogCi0JRFJNX0NPUFlfRlJPTV9VU0VSX0lPQ1RMKCBkLCBhcmdwLCBzaXplb2YoZCkgKTsKKwlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwoZCwgYXJncCwgc2l6ZW9mKGQpKTsKIAogCS8qIFBsZWFzZSBkb24ndCBzZW5kIHVzIGJ1ZmZlcnMuCiAJICovCi0JaWYgKCBkLnNlbmRfY291bnQgIT0gMCApIHsKLQkJRFJNX0VSUk9SKCAiUHJvY2VzcyAlZCB0cnlpbmcgdG8gc2VuZCAlZCBidWZmZXJzIHZpYSBkcm1ETUFcbiIsCi0JCQkgICBEUk1fQ1VSUkVOVFBJRCwgZC5zZW5kX2NvdW50ICk7CisJaWYgKGQuc2VuZF9jb3VudCAhPSAwKSB7CisJCURSTV9FUlJPUigiUHJvY2VzcyAlZCB0cnlpbmcgdG8gc2VuZCAlZCBidWZmZXJzIHZpYSBkcm1ETUFcbiIsCisJCQkgIERSTV9DVVJSRU5UUElELCBkLnNlbmRfY291bnQpOwogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCX0KIAogCS8qIFdlJ2xsIHNlbmQgeW91IGJ1ZmZlcnMuCiAJICovCi0JaWYgKCBkLnJlcXVlc3RfY291bnQgPCAwIHx8IGQucmVxdWVzdF9jb3VudCA+IGRtYS0+YnVmX2NvdW50ICkgewotCQlEUk1fRVJST1IoICJQcm9jZXNzICVkIHRyeWluZyB0byBnZXQgJWQgYnVmZmVycyAob2YgJWQgbWF4KVxuIiwKLQkJCSAgIERSTV9DVVJSRU5UUElELCBkLnJlcXVlc3RfY291bnQsIGRtYS0+YnVmX2NvdW50ICk7CisJaWYgKGQucmVxdWVzdF9jb3VudCA8IDAgfHwgZC5yZXF1ZXN0X2NvdW50ID4gZG1hLT5idWZfY291bnQpIHsKKwkJRFJNX0VSUk9SKCJQcm9jZXNzICVkIHRyeWluZyB0byBnZXQgJWQgYnVmZmVycyAob2YgJWQgbWF4KVxuIiwKKwkJCSAgRFJNX0NVUlJFTlRQSUQsIGQucmVxdWVzdF9jb3VudCwgZG1hLT5idWZfY291bnQpOwogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCX0KIAogCWQuZ3JhbnRlZF9jb3VudCA9IDA7CiAKLQlpZiAoIGQucmVxdWVzdF9jb3VudCApIHsKLQkJcmV0ID0gcjEyOF9jY2VfZ2V0X2J1ZmZlcnMoIGZpbHAsIGRldiwgJmQgKTsKKwlpZiAoZC5yZXF1ZXN0X2NvdW50KSB7CisJCXJldCA9IHIxMjhfY2NlX2dldF9idWZmZXJzKGZpbHAsIGRldiwgJmQpOwogCX0KIAotCURSTV9DT1BZX1RPX1VTRVJfSU9DVEwoYXJncCwgZCwgc2l6ZW9mKGQpICk7CisJRFJNX0NPUFlfVE9fVVNFUl9JT0NUTChhcmdwLCBkLCBzaXplb2YoZCkpOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vcjEyOF9kcm0uaCBiL2RyaXZlcnMvY2hhci9kcm0vcjEyOF9kcm0uaAppbmRleCBiNjE2Y2QzLi41ZGRjMDMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL3IxMjhfZHJtLmgKKysrIGIvZHJpdmVycy9jaGFyL2RybS9yMTI4X2RybS5oCkBAIC05Myw3ICs5Myw3IEBACiAjZGVmaW5lIFIxMjhfTUFYX1RFWFRVUkVfTEVWRUxTCQkxMQogI2RlZmluZSBSMTI4X01BWF9URVhUVVJFX1VOSVRTCQkyCiAKLSNlbmRpZiAvKiBfX1IxMjhfU0FSRUFfREVGSU5FU19fICovCisjZW5kaWYJCQkJLyogX19SMTI4X1NBUkVBX0RFRklORVNfXyAqLwogCiB0eXBlZGVmIHN0cnVjdCB7CiAJLyogQ29udGV4dCBzdGF0ZSAtIGNhbiBiZSB3cml0dGVuIGluIG9uZSBsYXJnZSBjaHVuayAqLwpAQCAtMTQwLDcgKzE0MCw2IEBACiAJdW5zaWduZWQgaW50IHRleF9ib3JkZXJfY29sb3I7CiB9IGRybV9yMTI4X3RleHR1cmVfcmVnc190OwogCi0KIHR5cGVkZWYgc3RydWN0IGRybV9yMTI4X3NhcmVhIHsKIAkvKiBUaGUgY2hhbm5lbCBmb3IgY29tbXVuaWNhdGlvbiBvZiBzdGF0ZSBpbmZvcm1hdGlvbiB0byB0aGUga2VybmVsCiAJICogb24gZmlyaW5nIGEgdmVydGV4IGJ1ZmZlci4KQEAgLTE2MSwxNCArMTYwLDEzIEBACiAJdW5zaWduZWQgaW50IGxhc3RfZnJhbWU7CiAJdW5zaWduZWQgaW50IGxhc3RfZGlzcGF0Y2g7CiAKLQlkcm1fdGV4X3JlZ2lvbl90IHRleF9saXN0W1IxMjhfTlJfVEVYX0hFQVBTXVtSMTI4X05SX1RFWF9SRUdJT05TKzFdOworCWRybV90ZXhfcmVnaW9uX3QgdGV4X2xpc3RbUjEyOF9OUl9URVhfSEVBUFNdW1IxMjhfTlJfVEVYX1JFR0lPTlMgKyAxXTsKIAl1bnNpZ25lZCBpbnQgdGV4X2FnZVtSMTI4X05SX1RFWF9IRUFQU107CiAJaW50IGN0eF9vd25lcjsKLQlpbnQgcGZBbGxvd1BhZ2VGbGlwOyAgICAgICAgLyogbnVtYmVyIG9mIDNkIHdpbmRvd3MgKDAsMSwyIG9yIG1vcmUpICovCi0JaW50IHBmQ3VycmVudFBhZ2U7CSAgICAvKiB3aGljaCBidWZmZXIgaXMgYmVpbmcgZGlzcGxheWVkPyAqLworCWludCBwZkFsbG93UGFnZUZsaXA7CS8qIG51bWJlciBvZiAzZCB3aW5kb3dzICgwLDEsMiBvciBtb3JlKSAqLworCWludCBwZkN1cnJlbnRQYWdlOwkvKiB3aGljaCBidWZmZXIgaXMgYmVpbmcgZGlzcGxheWVkPyAqLwogfSBkcm1fcjEyOF9zYXJlYV90OwogCi0KIC8qIFdBUk5JTkc6IElmIHlvdSBjaGFuZ2UgYW55IG9mIHRoZXNlIGRlZmluZXMsIG1ha2Ugc3VyZSB0byBjaGFuZ2UgdGhlCiAgKiBkZWZpbmVzIGluIHRoZSBYc2VydmVyIGZpbGUgKHhmODZkcm1SMTI4LmgpCiAgKi8KQEAgLTIyMCw3ICsyMTgsNyBAQAogCiB0eXBlZGVmIHN0cnVjdCBkcm1fcjEyOF9pbml0IHsKIAllbnVtIHsKLQkJUjEyOF9JTklUX0NDRSAgICA9IDB4MDEsCisJCVIxMjhfSU5JVF9DQ0UgPSAweDAxLAogCQlSMTI4X0NMRUFOVVBfQ0NFID0gMHgwMgogCX0gZnVuYzsKICNpZiBDT05GSUdfWEZSRUU4Nl9WRVJTSU9OIDwgWEZSRUU4Nl9WRVJTSU9OKDQsMSwwLDApCkBAIC0yNzgsOSArMjc2LDkgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX3IxMjhfdmVydGV4IHsKIAlpbnQgcHJpbTsKLQlpbnQgaWR4OwkJCS8qIEluZGV4IG9mIHZlcnRleCBidWZmZXIgKi8KLQlpbnQgY291bnQ7CQkJLyogTnVtYmVyIG9mIHZlcnRpY2VzIGluIGJ1ZmZlciAqLwotCWludCBkaXNjYXJkOwkJCS8qIENsaWVudCBmaW5pc2hlZCB3aXRoIGJ1ZmZlcj8gKi8KKwlpbnQgaWR4OwkJLyogSW5kZXggb2YgdmVydGV4IGJ1ZmZlciAqLworCWludCBjb3VudDsJCS8qIE51bWJlciBvZiB2ZXJ0aWNlcyBpbiBidWZmZXIgKi8KKwlpbnQgZGlzY2FyZDsJCS8qIENsaWVudCBmaW5pc2hlZCB3aXRoIGJ1ZmZlcj8gKi8KIH0gZHJtX3IxMjhfdmVydGV4X3Q7CiAKIHR5cGVkZWYgc3RydWN0IGRybV9yMTI4X2luZGljZXMgewpAQCAtMjg4LDcgKzI4Niw3IEBACiAJaW50IGlkeDsKIAlpbnQgc3RhcnQ7CiAJaW50IGVuZDsKLQlpbnQgZGlzY2FyZDsJCQkvKiBDbGllbnQgZmluaXNoZWQgd2l0aCBidWZmZXI/ICovCisJaW50IGRpc2NhcmQ7CQkvKiBDbGllbnQgZmluaXNoZWQgd2l0aCBidWZmZXI/ICovCiB9IGRybV9yMTI4X2luZGljZXNfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX3IxMjhfYmxpdCB7CkBAIC0zMDIsMTAgKzMwMCwxMCBAQAogCiB0eXBlZGVmIHN0cnVjdCBkcm1fcjEyOF9kZXB0aCB7CiAJZW51bSB7Ci0JCVIxMjhfV1JJVEVfU1BBTgkJPSAweDAxLAotCQlSMTI4X1dSSVRFX1BJWEVMUwk9IDB4MDIsCi0JCVIxMjhfUkVBRF9TUEFOCQk9IDB4MDMsCi0JCVIxMjhfUkVBRF9QSVhFTFMJPSAweDA0CisJCVIxMjhfV1JJVEVfU1BBTiA9IDB4MDEsCisJCVIxMjhfV1JJVEVfUElYRUxTID0gMHgwMiwKKwkJUjEyOF9SRUFEX1NQQU4gPSAweDAzLAorCQlSMTI4X1JFQURfUElYRUxTID0gMHgwNAogCX0gZnVuYzsKIAlpbnQgbjsKIAlpbnQgX191c2VyICp4OwpAQCAtMzI3LDEzICszMjUsMTMgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX3IxMjhfZnVsbHNjcmVlbiB7CiAJZW51bSB7Ci0JCVIxMjhfSU5JVF9GVUxMU0NSRUVOICAgID0gMHgwMSwKKwkJUjEyOF9JTklUX0ZVTExTQ1JFRU4gPSAweDAxLAogCQlSMTI4X0NMRUFOVVBfRlVMTFNDUkVFTiA9IDB4MDIKIAl9IGZ1bmM7CiB9IGRybV9yMTI4X2Z1bGxzY3JlZW5fdDsKIAogLyogMi4zOiBBbiBpb2N0bCB0byBnZXQgcGFyYW1ldGVycyB0aGF0IGFyZW4ndCBhdmFpbGFibGUgdG8gdGhlIDNkCi0gKiBjbGllbnQgYW55IG90aGVyIHdheS4gIAorICogY2xpZW50IGFueSBvdGhlciB3YXkuCiAgKi8KICNkZWZpbmUgUjEyOF9QQVJBTV9JUlFfTlIgICAgICAgICAgICAxCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vcjEyOF9kcnYuYyBiL2RyaXZlcnMvY2hhci9kcm0vcjEyOF9kcnYuYwppbmRleCBiYzQ0NmRhLi40ZDkyMjQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL3IxMjhfZHJ2LmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9yMTI4X2Rydi5jCkBAIC0zNywzMCArMzcsMjggQEAKIAogI2luY2x1ZGUgImRybV9wY2lpZHMuaCIKIAotc3RhdGljIGludCBwb3N0aW5pdCggc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmbGFncyApCitzdGF0aWMgaW50IHBvc3Rpbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7Ci0JRFJNX0lORk8oICJJbml0aWFsaXplZCAlcyAlZC4lZC4lZCAlcyBvbiBtaW5vciAlZDogJXNcbiIsCi0JCURSSVZFUl9OQU1FLAotCQlEUklWRVJfTUFKT1IsCi0JCURSSVZFUl9NSU5PUiwKLQkJRFJJVkVSX1BBVENITEVWRUwsCi0JCURSSVZFUl9EQVRFLAotCQlkZXYtPnByaW1hcnkubWlub3IsCi0JCXBjaV9wcmV0dHlfbmFtZShkZXYtPnBkZXYpCi0JCSk7CisJRFJNX0lORk8oIkluaXRpYWxpemVkICVzICVkLiVkLiVkICVzIG9uIG1pbm9yICVkOiAlc1xuIiwKKwkJIERSSVZFUl9OQU1FLAorCQkgRFJJVkVSX01BSk9SLAorCQkgRFJJVkVSX01JTk9SLAorCQkgRFJJVkVSX1BBVENITEVWRUwsCisJCSBEUklWRVJfREFURSwgZGV2LT5wcmltYXJ5Lm1pbm9yLCBwY2lfcHJldHR5X25hbWUoZGV2LT5wZGV2KQorCSAgICApOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZlcnNpb24oIGRybV92ZXJzaW9uX3QgKnZlcnNpb24gKQorc3RhdGljIGludCB2ZXJzaW9uKGRybV92ZXJzaW9uX3QgKiB2ZXJzaW9uKQogewogCWludCBsZW47CiAKIAl2ZXJzaW9uLT52ZXJzaW9uX21ham9yID0gRFJJVkVSX01BSk9SOwogCXZlcnNpb24tPnZlcnNpb25fbWlub3IgPSBEUklWRVJfTUlOT1I7CiAJdmVyc2lvbi0+dmVyc2lvbl9wYXRjaGxldmVsID0gRFJJVkVSX1BBVENITEVWRUw7Ci0JRFJNX0NPUFkoIHZlcnNpb24tPm5hbWUsIERSSVZFUl9OQU1FICk7Ci0JRFJNX0NPUFkoIHZlcnNpb24tPmRhdGUsIERSSVZFUl9EQVRFICk7Ci0JRFJNX0NPUFkoIHZlcnNpb24tPmRlc2MsIERSSVZFUl9ERVNDICk7CisJRFJNX0NPUFkodmVyc2lvbi0+bmFtZSwgRFJJVkVSX05BTUUpOworCURSTV9DT1BZKHZlcnNpb24tPmRhdGUsIERSSVZFUl9EQVRFKTsKKwlEUk1fQ09QWSh2ZXJzaW9uLT5kZXNjLCBEUklWRVJfREVTQyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTcyLDcgKzcwLDEwIEBACiBleHRlcm4gaW50IHIxMjhfbWF4X2lvY3RsOwogCiBzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIgZHJpdmVyID0gewotCS5kcml2ZXJfZmVhdHVyZXMgPSBEUklWRVJfVVNFX0FHUCB8IERSSVZFUl9VU0VfTVRSUiB8IERSSVZFUl9QQ0lfRE1BIHwgRFJJVkVSX1NHIHwgRFJJVkVSX0hBVkVfRE1BIHwgRFJJVkVSX0hBVkVfSVJRIHwgRFJJVkVSX0lSUV9TSEFSRUQgfCBEUklWRVJfSVJRX1ZCTCwKKwkuZHJpdmVyX2ZlYXR1cmVzID0KKwkgICAgRFJJVkVSX1VTRV9BR1AgfCBEUklWRVJfVVNFX01UUlIgfCBEUklWRVJfUENJX0RNQSB8IERSSVZFUl9TRyB8CisJICAgIERSSVZFUl9IQVZFX0RNQSB8IERSSVZFUl9IQVZFX0lSUSB8IERSSVZFUl9JUlFfU0hBUkVEIHwKKwkgICAgRFJJVkVSX0lSUV9WQkwsCiAJLmRldl9wcml2X3NpemUgPSBzaXplb2YoZHJtX3IxMjhfYnVmX3ByaXZfdCksCiAJLnByZXJlbGVhc2UgPSByMTI4X2RyaXZlcl9wcmVyZWxlYXNlLAogCS5wcmV0YWtlZG93biA9IHIxMjhfZHJpdmVyX3ByZXRha2Vkb3duLApAQCAtODksMjEgKzkwLDIyIEBACiAJLmlvY3RscyA9IHIxMjhfaW9jdGxzLAogCS5kbWFfaW9jdGwgPSByMTI4X2NjZV9idWZmZXJzLAogCS5mb3BzID0gewotCQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkJLm9wZW4gPSBkcm1fb3BlbiwKLQkJLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKLQkJLmlvY3RsID0gZHJtX2lvY3RsLAotCQkubW1hcCA9IGRybV9tbWFwLAotCQkucG9sbCA9IGRybV9wb2xsLAotCQkuZmFzeW5jID0gZHJtX2Zhc3luYywKKwkJIC5vd25lciA9IFRISVNfTU9EVUxFLAorCQkgLm9wZW4gPSBkcm1fb3BlbiwKKwkJIC5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCisJCSAuaW9jdGwgPSBkcm1faW9jdGwsCisJCSAubW1hcCA9IGRybV9tbWFwLAorCQkgLnBvbGwgPSBkcm1fcG9sbCwKKwkJIC5mYXN5bmMgPSBkcm1fZmFzeW5jLAogI2lmZGVmIENPTkZJR19DT01QQVQKLQkJLmNvbXBhdF9pb2N0bCA9IHIxMjhfY29tcGF0X2lvY3RsLAorCQkgLmNvbXBhdF9pb2N0bCA9IHIxMjhfY29tcGF0X2lvY3RsLAogI2VuZGlmCi0JfSwKKwkJIH0KKwksCiAJLnBjaV9kcml2ZXIgPSB7Ci0JCS5uYW1lICAgICAgICAgID0gRFJJVkVSX05BTUUsCi0JCS5pZF90YWJsZSAgICAgID0gcGNpaWRsaXN0LAotCX0KKwkJICAgICAgIC5uYW1lID0gRFJJVkVSX05BTUUsCisJCSAgICAgICAuaWRfdGFibGUgPSBwY2lpZGxpc3QsCisJCSAgICAgICB9CiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCByMTI4X2luaXQodm9pZCkKQEAgLTEyMCw2ICsxMjIsNiBAQAogbW9kdWxlX2luaXQocjEyOF9pbml0KTsKIG1vZHVsZV9leGl0KHIxMjhfZXhpdCk7CiAKLU1PRFVMRV9BVVRIT1IoIERSSVZFUl9BVVRIT1IgKTsKLU1PRFVMRV9ERVNDUklQVElPTiggRFJJVkVSX0RFU0MgKTsKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCBhbmQgYWRkaXRpb25hbCByaWdodHMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vcjEyOF9kcnYuaCBiL2RyaXZlcnMvY2hhci9kcm0vcjEyOF9kcnYuaAppbmRleCA5MzhkZmFlLi44N2M1ZTEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL3IxMjhfZHJ2LmgKKysrIGIvZHJpdmVycy9jaGFyL2RybS9yMTI4X2Rydi5oCkBAIC01MiwxNCArNTIsMTMgQEAKICNkZWZpbmUgRFJJVkVSX01JTk9SCQk1CiAjZGVmaW5lIERSSVZFUl9QQVRDSExFVkVMCTAKIAotCiAjZGVmaW5lIEdFVF9SSU5HX0hFQUQoZGV2X3ByaXYpCQlSMTI4X1JFQUQoIFIxMjhfUE00X0JVRkZFUl9ETF9SUFRSICkKIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX3IxMjhfZnJlZWxpc3QgewotICAgCXVuc2lnbmVkIGludCBhZ2U7Ci0gICAJZHJtX2J1Zl90ICpidWY7Ci0gICAJc3RydWN0IGRybV9yMTI4X2ZyZWVsaXN0ICpuZXh0OwotICAgCXN0cnVjdCBkcm1fcjEyOF9mcmVlbGlzdCAqcHJldjsKKwl1bnNpZ25lZCBpbnQgYWdlOworCWRybV9idWZfdCAqYnVmOworCXN0cnVjdCBkcm1fcjEyOF9mcmVlbGlzdCAqbmV4dDsKKwlzdHJ1Y3QgZHJtX3IxMjhfZnJlZWxpc3QgKnByZXY7CiB9IGRybV9yMTI4X2ZyZWVsaXN0X3Q7CiAKIHR5cGVkZWYgc3RydWN0IGRybV9yMTI4X3JpbmdfYnVmZmVyIHsKQEAgLTgzLDggKzgyLDggQEAKIAlpbnQgY2NlX2ZpZm9fc2l6ZTsKIAlpbnQgY2NlX3J1bm5pbmc7CiAKLSAgIAlkcm1fcjEyOF9mcmVlbGlzdF90ICpoZWFkOwotICAgCWRybV9yMTI4X2ZyZWVsaXN0X3QgKnRhaWw7CisJZHJtX3IxMjhfZnJlZWxpc3RfdCAqaGVhZDsKKwlkcm1fcjEyOF9mcmVlbGlzdF90ICp0YWlsOwogCiAJaW50IHVzZWNfdGltZW91dDsKIAlpbnQgaXNfcGNpOwpAQCAtMTI2LDM0ICsxMjUsMzQgQEAKIAlpbnQgcHJpbTsKIAlpbnQgZGlzY2FyZDsKIAlpbnQgZGlzcGF0Y2hlZDsKLSAgIAlkcm1fcjEyOF9mcmVlbGlzdF90ICpsaXN0X2VudHJ5OworCWRybV9yMTI4X2ZyZWVsaXN0X3QgKmxpc3RfZW50cnk7CiB9IGRybV9yMTI4X2J1Zl9wcml2X3Q7CiAKIAkJCQkvKiByMTI4X2NjZS5jICovCi1leHRlcm4gaW50IHIxMjhfY2NlX2luaXQoIERSTV9JT0NUTF9BUkdTICk7Ci1leHRlcm4gaW50IHIxMjhfY2NlX3N0YXJ0KCBEUk1fSU9DVExfQVJHUyApOwotZXh0ZXJuIGludCByMTI4X2NjZV9zdG9wKCBEUk1fSU9DVExfQVJHUyApOwotZXh0ZXJuIGludCByMTI4X2NjZV9yZXNldCggRFJNX0lPQ1RMX0FSR1MgKTsKLWV4dGVybiBpbnQgcjEyOF9jY2VfaWRsZSggRFJNX0lPQ1RMX0FSR1MgKTsKLWV4dGVybiBpbnQgcjEyOF9lbmdpbmVfcmVzZXQoIERSTV9JT0NUTF9BUkdTICk7Ci1leHRlcm4gaW50IHIxMjhfZnVsbHNjcmVlbiggRFJNX0lPQ1RMX0FSR1MgKTsKLWV4dGVybiBpbnQgcjEyOF9jY2VfYnVmZmVycyggRFJNX0lPQ1RMX0FSR1MgKTsKK2V4dGVybiBpbnQgcjEyOF9jY2VfaW5pdChEUk1fSU9DVExfQVJHUyk7CitleHRlcm4gaW50IHIxMjhfY2NlX3N0YXJ0KERSTV9JT0NUTF9BUkdTKTsKK2V4dGVybiBpbnQgcjEyOF9jY2Vfc3RvcChEUk1fSU9DVExfQVJHUyk7CitleHRlcm4gaW50IHIxMjhfY2NlX3Jlc2V0KERSTV9JT0NUTF9BUkdTKTsKK2V4dGVybiBpbnQgcjEyOF9jY2VfaWRsZShEUk1fSU9DVExfQVJHUyk7CitleHRlcm4gaW50IHIxMjhfZW5naW5lX3Jlc2V0KERSTV9JT0NUTF9BUkdTKTsKK2V4dGVybiBpbnQgcjEyOF9mdWxsc2NyZWVuKERSTV9JT0NUTF9BUkdTKTsKK2V4dGVybiBpbnQgcjEyOF9jY2VfYnVmZmVycyhEUk1fSU9DVExfQVJHUyk7CiAKLWV4dGVybiB2b2lkIHIxMjhfZnJlZWxpc3RfcmVzZXQoIGRybV9kZXZpY2VfdCAqZGV2ICk7CitleHRlcm4gdm9pZCByMTI4X2ZyZWVsaXN0X3Jlc2V0KGRybV9kZXZpY2VfdCAqIGRldik7CiAKLWV4dGVybiBpbnQgcjEyOF93YWl0X3JpbmcoIGRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYsIGludCBuICk7CitleHRlcm4gaW50IHIxMjhfd2FpdF9yaW5nKGRybV9yMTI4X3ByaXZhdGVfdCAqIGRldl9wcml2LCBpbnQgbik7CiAKLWV4dGVybiBpbnQgcjEyOF9kb19jY2VfaWRsZSggZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdiApOwotZXh0ZXJuIGludCByMTI4X2RvX2NsZWFudXBfY2NlKCBkcm1fZGV2aWNlX3QgKmRldiApOworZXh0ZXJuIGludCByMTI4X2RvX2NjZV9pZGxlKGRybV9yMTI4X3ByaXZhdGVfdCAqIGRldl9wcml2KTsKK2V4dGVybiBpbnQgcjEyOF9kb19jbGVhbnVwX2NjZShkcm1fZGV2aWNlX3QgKiBkZXYpOwogCi1leHRlcm4gaW50IHIxMjhfZHJpdmVyX3ZibGFua193YWl0KGRybV9kZXZpY2VfdCAqZGV2LCB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKTsKK2V4dGVybiBpbnQgcjEyOF9kcml2ZXJfdmJsYW5rX3dhaXQoZHJtX2RldmljZV90ICogZGV2LCB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKTsKIAotZXh0ZXJuIGlycXJldHVybl90IHIxMjhfZHJpdmVyX2lycV9oYW5kbGVyKCBEUk1fSVJRX0FSR1MgKTsKLWV4dGVybiB2b2lkIHIxMjhfZHJpdmVyX2lycV9wcmVpbnN0YWxsKCBkcm1fZGV2aWNlX3QgKmRldiApOwotZXh0ZXJuIHZvaWQgcjEyOF9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsKCBkcm1fZGV2aWNlX3QgKmRldiApOwotZXh0ZXJuIHZvaWQgcjEyOF9kcml2ZXJfaXJxX3VuaW5zdGFsbCggZHJtX2RldmljZV90ICpkZXYgKTsKLWV4dGVybiB2b2lkIHIxMjhfZHJpdmVyX3ByZXRha2Vkb3duKGRybV9kZXZpY2VfdCAqZGV2KTsKLWV4dGVybiB2b2lkIHIxMjhfZHJpdmVyX3ByZXJlbGVhc2UoZHJtX2RldmljZV90ICpkZXYsIERSTUZJTEUgZmlscCk7CitleHRlcm4gaXJxcmV0dXJuX3QgcjEyOF9kcml2ZXJfaXJxX2hhbmRsZXIoRFJNX0lSUV9BUkdTKTsKK2V4dGVybiB2b2lkIHIxMjhfZHJpdmVyX2lycV9wcmVpbnN0YWxsKGRybV9kZXZpY2VfdCAqIGRldik7CitleHRlcm4gdm9pZCByMTI4X2RyaXZlcl9pcnFfcG9zdGluc3RhbGwoZHJtX2RldmljZV90ICogZGV2KTsKK2V4dGVybiB2b2lkIHIxMjhfZHJpdmVyX2lycV91bmluc3RhbGwoZHJtX2RldmljZV90ICogZGV2KTsKK2V4dGVybiB2b2lkIHIxMjhfZHJpdmVyX3ByZXRha2Vkb3duKGRybV9kZXZpY2VfdCAqIGRldik7CitleHRlcm4gdm9pZCByMTI4X2RyaXZlcl9wcmVyZWxlYXNlKGRybV9kZXZpY2VfdCAqIGRldiwgRFJNRklMRSBmaWxwKTsKIAogZXh0ZXJuIGxvbmcgcjEyOF9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsCiAJCQkgICAgICB1bnNpZ25lZCBsb25nIGFyZyk7CkBAIC0yNjUsNyArMjY0LDYgQEAKICMJZGVmaW5lIFIxMjhfRVZFTlRfQ1JUQ19PRkZTRVQJCSgxIDw8IDApCiAjZGVmaW5lIFIxMjhfV0lORE9XX1hZX09GRlNFVAkJMHgxYmNjCiAKLQogLyogQ0NFIHJlZ2lzdGVycwogICovCiAjZGVmaW5lIFIxMjhfUE00X0JVRkZFUl9PRkZTRVQJCTB4MDcwMApAQCAtMzE2LDcgKzMxNCw2IEBACiAjZGVmaW5lIFIxMjhfUE00X0ZJRk9fREFUQV9FVkVOCQkweDEwMDAKICNkZWZpbmUgUjEyOF9QTTRfRklGT19EQVRBX09ERAkJMHgxMDA0CiAKLQogLyogQ0NFIGNvbW1hbmQgcGFja2V0cwogICovCiAjZGVmaW5lIFIxMjhfQ0NFX1BBQ0tFVDAJCTB4MDAwMDAwMDAKQEAgLTM5NCw3ICszOTEsNiBAQAogCVIxMjhfV1JJVEUoUjEyOF9DTE9DS19DTlRMX0RBVEEsICh2YWwpKTsJCQlcCiB9IHdoaWxlICgwKQogCi0KICNkZWZpbmUgQ0NFX1BBQ0tFVDAoIHJlZywgbiApCQkoUjEyOF9DQ0VfUEFDS0VUMCB8CQlcCiAJCQkJCSAoKG4pIDw8IDE2KSB8ICgocmVnKSA+PiAyKSkKICNkZWZpbmUgQ0NFX1BBQ0tFVDEoIHJlZzAsIHJlZzEgKQkoUjEyOF9DQ0VfUEFDS0VUMSB8CQlcCkBAIC00MDMsMTMgKzM5OSwxMSBAQAogI2RlZmluZSBDQ0VfUEFDS0VUMyggcGt0LCBuICkJCShSMTI4X0NDRV9QQUNLRVQzIHwJCVwKIAkJCQkJIChwa3QpIHwgKChuKSA8PCAxNikpCiAKLQotc3RhdGljIF9faW5saW5lX18gdm9pZAotcjEyOF91cGRhdGVfcmluZ19zbmFwc2hvdCggZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdiApCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHIxMjhfdXBkYXRlX3Jpbmdfc25hcHNob3QoZHJtX3IxMjhfcHJpdmF0ZV90ICogZGV2X3ByaXYpCiB7CiAJZHJtX3IxMjhfcmluZ19idWZmZXJfdCAqcmluZyA9ICZkZXZfcHJpdi0+cmluZzsKLQlyaW5nLT5zcGFjZSA9IChHRVRfUklOR19IRUFEKCBkZXZfcHJpdiApIC0gcmluZy0+dGFpbCkgKiBzaXplb2YodTMyKTsKLQlpZiAoIHJpbmctPnNwYWNlIDw9IDAgKQorCXJpbmctPnNwYWNlID0gKEdFVF9SSU5HX0hFQUQoZGV2X3ByaXYpIC0gcmluZy0+dGFpbCkgKiBzaXplb2YodTMyKTsKKwlpZiAocmluZy0+c3BhY2UgPD0gMCkKIAkJcmluZy0+c3BhY2UgKz0gcmluZy0+c2l6ZTsKIH0KIApAQCAtNDUwLDcgKzQ0NCw2IEBACiAJT1VUX1JJTkcoIFIxMjhfRVZFTlRfQ1JUQ19PRkZTRVQgKTsJCQkJXAogfSB3aGlsZSAoMCkKIAotCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiBSaW5nIGNvbnRyb2wKICAqLwpAQCAtNTIwLDQgKzUxMyw0IEBACiAJd3JpdGUgJj0gdGFpbF9tYXNrOwkJCQkJCVwKIH0gd2hpbGUgKDApCiAKLSNlbmRpZiAvKiBfX1IxMjhfRFJWX0hfXyAqLworI2VuZGlmCQkJCS8qIF9fUjEyOF9EUlZfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3IxMjhfaW9jMzIuYyBiL2RyaXZlcnMvY2hhci9kcm0vcjEyOF9pb2MzMi5jCmluZGV4IDYwNTk4ZWYuLjFlMmUzNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vcjEyOF9pb2MzMi5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vcjEyOF9pb2MzMi5jCkBAIC02NSwxMCArNjUsMTAgQEAKIHsKIAlkcm1fcjEyOF9pbml0MzJfdCBpbml0MzI7CiAJZHJtX3IxMjhfaW5pdF90IF9fdXNlciAqaW5pdDsKLQkKKwogCWlmIChjb3B5X2Zyb21fdXNlcigmaW5pdDMyLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihpbml0MzIpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JCisKIAlpbml0ID0gY29tcGF0X2FsbG9jX3VzZXJfc3BhY2Uoc2l6ZW9mKCppbml0KSk7CiAJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBpbml0LCBzaXplb2YoKmluaXQpKQogCSAgICB8fCBfX3B1dF91c2VyKGluaXQzMi5mdW5jLCAmaW5pdC0+ZnVuYykKQEAgLTkyLDE0ICs5MiwxNCBAQAogCSAgICB8fCBfX3B1dF91c2VyKGluaXQzMi5yaW5nX29mZnNldCwgJmluaXQtPnJpbmdfb2Zmc2V0KQogCSAgICB8fCBfX3B1dF91c2VyKGluaXQzMi5yaW5nX3JwdHJfb2Zmc2V0LCAmaW5pdC0+cmluZ19ycHRyX29mZnNldCkKIAkgICAgfHwgX19wdXRfdXNlcihpbml0MzIuYnVmZmVyc19vZmZzZXQsICZpbml0LT5idWZmZXJzX29mZnNldCkKLQkgICAgfHwgX19wdXRfdXNlcihpbml0MzIuYWdwX3RleHR1cmVzX29mZnNldCwgJmluaXQtPmFncF90ZXh0dXJlc19vZmZzZXQpKQorCSAgICB8fCBfX3B1dF91c2VyKGluaXQzMi5hZ3BfdGV4dHVyZXNfb2Zmc2V0LAorCQkJICAmaW5pdC0+YWdwX3RleHR1cmVzX29mZnNldCkpCiAJCXJldHVybiAtRUZBVUxUOwotCQorCiAJcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKIAkJCSBEUk1fSU9DVExfUjEyOF9JTklULCAodW5zaWduZWQgbG9uZylpbml0KTsKIH0KIAotCiB0eXBlZGVmIHN0cnVjdCBkcm1fcjEyOF9kZXB0aDMyIHsKIAlpbnQgZnVuYzsKIAlpbnQgbjsKQEAgLTEyNCwxMyArMTI0LDE1IEBACiAJICAgIHx8IF9fcHV0X3VzZXIoZGVwdGgzMi5uLCAmZGVwdGgtPm4pCiAJICAgIHx8IF9fcHV0X3VzZXIoKGludCBfX3VzZXIgKikodW5zaWduZWQgbG9uZylkZXB0aDMyLngsICZkZXB0aC0+eCkKIAkgICAgfHwgX19wdXRfdXNlcigoaW50IF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKWRlcHRoMzIueSwgJmRlcHRoLT55KQotCSAgICB8fCBfX3B1dF91c2VyKCh1bnNpZ25lZCBpbnQgX191c2VyICopKHVuc2lnbmVkIGxvbmcpZGVwdGgzMi5idWZmZXIsICZkZXB0aC0+YnVmZmVyKQotCSAgICB8fCBfX3B1dF91c2VyKCh1bnNpZ25lZCBjaGFyIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKWRlcHRoMzIubWFzaywgJmRlcHRoLT5tYXNrKSkKKwkgICAgfHwgX19wdXRfdXNlcigodW5zaWduZWQgaW50IF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKWRlcHRoMzIuYnVmZmVyLAorCQkJICAmZGVwdGgtPmJ1ZmZlcikKKwkgICAgfHwgX19wdXRfdXNlcigodW5zaWduZWQgY2hhciBfX3VzZXIgKikodW5zaWduZWQgbG9uZylkZXB0aDMyLm1hc2ssCisJCQkgICZkZXB0aC0+bWFzaykpCiAJCXJldHVybiAtRUZBVUxUOwotCQorCiAJcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfUjEyOF9ERVBUSCwgKHVuc2lnbmVkIGxvbmcpZGVwdGgpOwkKLQkKKwkJCSBEUk1fSU9DVExfUjEyOF9ERVBUSCwgKHVuc2lnbmVkIGxvbmcpZGVwdGgpOworCiB9CiAKIHR5cGVkZWYgc3RydWN0IGRybV9yMTI4X3N0aXBwbGUzMiB7CkBAIC0xNDgsNyArMTUwLDggQEAKIAogCXN0aXBwbGUgPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShzaXplb2YoKnN0aXBwbGUpKTsKIAlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHN0aXBwbGUsIHNpemVvZigqc3RpcHBsZSkpCi0JICAgIHx8IF9fcHV0X3VzZXIoKHVuc2lnbmVkIGludCBfX3VzZXIgKikodW5zaWduZWQgbG9uZylzdGlwcGxlMzIubWFzaywgJnN0aXBwbGUtPm1hc2spKQorCSAgICB8fCBfX3B1dF91c2VyKCh1bnNpZ25lZCBpbnQgX191c2VyICopKHVuc2lnbmVkIGxvbmcpc3RpcHBsZTMyLm1hc2ssCisJCQkgICZzdGlwcGxlLT5tYXNrKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxlLApAQCAtMTcyLDkgKzE3NSwxMCBAQAogCWdldHBhcmFtID0gY29tcGF0X2FsbG9jX3VzZXJfc3BhY2Uoc2l6ZW9mKCpnZXRwYXJhbSkpOwogCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgZ2V0cGFyYW0sIHNpemVvZigqZ2V0cGFyYW0pKQogCSAgICB8fCBfX3B1dF91c2VyKGdldHBhcmFtMzIucGFyYW0sICZnZXRwYXJhbS0+cGFyYW0pCi0JICAgIHx8IF9fcHV0X3VzZXIoKHZvaWQgX191c2VyICopKHVuc2lnbmVkIGxvbmcpZ2V0cGFyYW0zMi52YWx1ZSwgJmdldHBhcmFtLT52YWx1ZSkpCisJICAgIHx8IF9fcHV0X3VzZXIoKHZvaWQgX191c2VyICopKHVuc2lnbmVkIGxvbmcpZ2V0cGFyYW0zMi52YWx1ZSwKKwkJCSAgJmdldHBhcmFtLT52YWx1ZSkpCiAJCXJldHVybiAtRUZBVUxUOwotCQorCiAJcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKIAkJCSBEUk1fSU9DVExfUjEyOF9HRVRQQVJBTSwgKHVuc2lnbmVkIGxvbmcpZ2V0cGFyYW0pOwogfQpAQCAtMTk1LDggKzE5OSw3IEBACiAgKiBccGFyYW0gYXJnIHVzZXIgYXJndW1lbnQuCiAgKiBccmV0dXJuIHplcm8gb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBudW1iZXIgb24gZmFpbHVyZS4KICAqLwotbG9uZyByMTI4X2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwKLQkJCSB1bnNpZ25lZCBsb25nIGFyZykKK2xvbmcgcjEyOF9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXVuc2lnbmVkIGludCBuciA9IERSTV9JT0NUTF9OUihjbWQpOwogCWRybV9pb2N0bF9jb21wYXRfdCAqZm4gPSBOVUxMOwpAQCAtMjEwLDcgKzIxMyw3IEBACiAKIAlsb2NrX2tlcm5lbCgpOwkJLyogWFhYIGZvciBub3cgKi8KIAlpZiAoZm4gIT0gTlVMTCkKLQkJcmV0ID0gKCpmbikoZmlscCwgY21kLCBhcmcpOworCQlyZXQgPSAoKmZuKSAoZmlscCwgY21kLCBhcmcpOwogCWVsc2UKIAkJcmV0ID0gZHJtX2lvY3RsKGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxwLCBjbWQsIGFyZyk7CiAJdW5sb2NrX2tlcm5lbCgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9yMTI4X2lycS5jIGIvZHJpdmVycy9jaGFyL2RybS9yMTI4X2lycS5jCmluZGV4IDY0M2EzMDcuLjI3ZWIwZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vcjEyOF9pcnEuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL3IxMjhfaXJxLmMKQEAgLTEsNyArMSw3IEBACiAvKiByMTI4X2lycS5jIC0tIElSUSBoYW5kbGluZyBmb3IgcmFkZW9uIC0qLSBsaW51eC1jIC0qLQogICoKICAqIENvcHlyaWdodCAoQykgVGhlIFdlYXRoZXIgQ2hhbm5lbCwgSW5jLiAgMjAwMi4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiAKKyAqCiAgKiBUaGUgV2VhdGhlciBDaGFubmVsIChUTSkgZnVuZGVkIFR1bmdzdGVuIEdyYXBoaWNzIHRvIGRldmVsb3AgdGhlCiAgKiBpbml0aWFsIHJlbGVhc2Ugb2YgdGhlIFJhZGVvbiA4NTAwIGRyaXZlciB1bmRlciB0aGUgWEZyZWU4NiBsaWNlbnNlLgogICogVGhpcyBub3RpY2UgbXVzdCBiZSBwcmVzZXJ2ZWQuCkBAIC0zNSw2OCArMzUsNjcgQEAKICNpbmNsdWRlICJyMTI4X2RybS5oIgogI2luY2x1ZGUgInIxMjhfZHJ2LmgiCiAKLWlycXJldHVybl90IHIxMjhfZHJpdmVyX2lycV9oYW5kbGVyKCBEUk1fSVJRX0FSR1MgKQoraXJxcmV0dXJuX3QgcjEyOF9kcml2ZXJfaXJxX2hhbmRsZXIoRFJNX0lSUV9BUkdTKQogewogCWRybV9kZXZpY2VfdCAqZGV2ID0gKGRybV9kZXZpY2VfdCAqKSBhcmc7Ci0JZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IAotCSAgIChkcm1fcjEyOF9wcml2YXRlX3QgKilkZXYtPmRldl9wcml2YXRlOworCWRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX3IxMjhfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CiAJaW50IHN0YXR1czsKIAotCXN0YXR1cyA9IFIxMjhfUkVBRCggUjEyOF9HRU5fSU5UX1NUQVRVUyApOwotCQorCXN0YXR1cyA9IFIxMjhfUkVBRChSMTI4X0dFTl9JTlRfU1RBVFVTKTsKKwogCS8qIFZCTEFOSyBpbnRlcnJ1cHQgKi8KLQlpZiAoIHN0YXR1cyAmIFIxMjhfQ1JUQ19WQkxBTktfSU5UICkgewotCQlSMTI4X1dSSVRFKCBSMTI4X0dFTl9JTlRfU1RBVFVTLCBSMTI4X0NSVENfVkJMQU5LX0lOVF9BSyApOworCWlmIChzdGF0dXMgJiBSMTI4X0NSVENfVkJMQU5LX0lOVCkgeworCQlSMTI4X1dSSVRFKFIxMjhfR0VOX0lOVF9TVEFUVVMsIFIxMjhfQ1JUQ19WQkxBTktfSU5UX0FLKTsKIAkJYXRvbWljX2luYygmZGV2LT52YmxfcmVjZWl2ZWQpOwogCQlEUk1fV0FLRVVQKCZkZXYtPnZibF9xdWV1ZSk7Ci0JCWRybV92Ymxfc2VuZF9zaWduYWxzKCBkZXYgKTsKKwkJZHJtX3ZibF9zZW5kX3NpZ25hbHMoZGV2KTsKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCX0KIAlyZXR1cm4gSVJRX05PTkU7CiB9CiAKLWludCByMTI4X2RyaXZlcl92Ymxhbmtfd2FpdChkcm1fZGV2aWNlX3QgKmRldiwgdW5zaWduZWQgaW50ICpzZXF1ZW5jZSkKK2ludCByMTI4X2RyaXZlcl92Ymxhbmtfd2FpdChkcm1fZGV2aWNlX3QgKiBkZXYsIHVuc2lnbmVkIGludCAqc2VxdWVuY2UpCiB7CiAJdW5zaWduZWQgaW50IGN1cl92Ymxhbms7CiAJaW50IHJldCA9IDA7CiAKIAkvKiBBc3N1bWUgdGhhdCB0aGUgdXNlciBoYXMgbWlzc2VkIHRoZSBjdXJyZW50IHNlcXVlbmNlIG51bWJlcgogCSAqIGJ5IGFib3V0IGEgZGF5IHJhdGhlciB0aGFuIHNoZSB3YW50cyB0byB3YWl0IGZvciB5ZWFycwotCSAqIHVzaW5nIHZlcnRpY2FsIGJsYW5rcy4uLiAKKwkgKiB1c2luZyB2ZXJ0aWNhbCBibGFua3MuLi4KIAkgKi8KLQlEUk1fV0FJVF9PTiggcmV0LCBkZXYtPnZibF9xdWV1ZSwgMypEUk1fSFosIAotCQkgICAgICggKCAoIGN1cl92YmxhbmsgPSBhdG9taWNfcmVhZCgmZGV2LT52YmxfcmVjZWl2ZWQgKSApCi0JCQkgLSAqc2VxdWVuY2UgKSA8PSAoMTw8MjMpICkgKTsKKwlEUk1fV0FJVF9PTihyZXQsIGRldi0+dmJsX3F1ZXVlLCAzICogRFJNX0haLAorCQkgICAgKCgoY3VyX3ZibGFuayA9IGF0b21pY19yZWFkKCZkZXYtPnZibF9yZWNlaXZlZCkpCisJCSAgICAgIC0gKnNlcXVlbmNlKSA8PSAoMSA8PCAyMykpKTsKIAogCSpzZXF1ZW5jZSA9IGN1cl92Ymxhbms7CiAKIAlyZXR1cm4gcmV0OwogfQogCi12b2lkIHIxMjhfZHJpdmVyX2lycV9wcmVpbnN0YWxsKCBkcm1fZGV2aWNlX3QgKmRldiApIHsKLSAgCWRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAKLQkgICAoZHJtX3IxMjhfcHJpdmF0ZV90ICopZGV2LT5kZXZfcHJpdmF0ZTsKK3ZvaWQgcjEyOF9kcml2ZXJfaXJxX3ByZWluc3RhbGwoZHJtX2RldmljZV90ICogZGV2KQoreworCWRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX3IxMjhfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CiAKIAkvKiBEaXNhYmxlICphbGwqIGludGVycnVwdHMgKi8KLSAgICAgIAlSMTI4X1dSSVRFKCBSMTI4X0dFTl9JTlRfQ05UTCwgMCApOworCVIxMjhfV1JJVEUoUjEyOF9HRU5fSU5UX0NOVEwsIDApOwogCS8qIENsZWFyIHZibGFuayBiaXQgaWYgaXQncyBhbHJlYWR5IGhpZ2ggKi8KLSAgIAlSMTI4X1dSSVRFKCBSMTI4X0dFTl9JTlRfU1RBVFVTLCBSMTI4X0NSVENfVkJMQU5LX0lOVF9BSyApOworCVIxMjhfV1JJVEUoUjEyOF9HRU5fSU5UX1NUQVRVUywgUjEyOF9DUlRDX1ZCTEFOS19JTlRfQUspOwogfQogCi12b2lkIHIxMjhfZHJpdmVyX2lycV9wb3N0aW5zdGFsbCggZHJtX2RldmljZV90ICpkZXYgKSB7Ci0gIAlkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2ID0gCi0JICAgKGRybV9yMTI4X3ByaXZhdGVfdCAqKWRldi0+ZGV2X3ByaXZhdGU7Cit2b2lkIHIxMjhfZHJpdmVyX2lycV9wb3N0aW5zdGFsbChkcm1fZGV2aWNlX3QgKiBkZXYpCit7CisJZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1fcjEyOF9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKIAogCS8qIFR1cm4gb24gVkJMIGludGVycnVwdCAqLwotICAgCVIxMjhfV1JJVEUoIFIxMjhfR0VOX0lOVF9DTlRMLCBSMTI4X0NSVENfVkJMQU5LX0lOVF9FTiApOworCVIxMjhfV1JJVEUoUjEyOF9HRU5fSU5UX0NOVEwsIFIxMjhfQ1JUQ19WQkxBTktfSU5UX0VOKTsKIH0KIAotdm9pZCByMTI4X2RyaXZlcl9pcnFfdW5pbnN0YWxsKCBkcm1fZGV2aWNlX3QgKmRldiApIHsKLSAgCWRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAKLQkgICAoZHJtX3IxMjhfcHJpdmF0ZV90ICopZGV2LT5kZXZfcHJpdmF0ZTsKK3ZvaWQgcjEyOF9kcml2ZXJfaXJxX3VuaW5zdGFsbChkcm1fZGV2aWNlX3QgKiBkZXYpCit7CisJZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1fcjEyOF9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKIAlpZiAoIWRldl9wcml2KQogCQlyZXR1cm47CiAKIAkvKiBEaXNhYmxlICphbGwqIGludGVycnVwdHMgKi8KLQlSMTI4X1dSSVRFKCBSMTI4X0dFTl9JTlRfQ05UTCwgMCApOworCVIxMjhfV1JJVEUoUjEyOF9HRU5fSU5UX0NOVEwsIDApOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9yMTI4X3N0YXRlLmMgYi9kcml2ZXJzL2NoYXIvZHJtL3IxMjhfc3RhdGUuYwppbmRleCA0MjZhNzFjLi4xNDQ3OWNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL3IxMjhfc3RhdGUuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL3IxMjhfc3RhdGUuYwpAQCAtMzIsMjM1ICszMiwyMzMgQEAKICNpbmNsdWRlICJyMTI4X2RybS5oIgogI2luY2x1ZGUgInIxMjhfZHJ2LmgiCiAKLQogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogQ0NFIGhhcmR3YXJlIHN0YXRlIHByb2dyYW1taW5nIGZ1bmN0aW9ucwogICovCiAKLXN0YXRpYyB2b2lkIHIxMjhfZW1pdF9jbGlwX3JlY3RzKCBkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2LAotCQkJCSAgZHJtX2NsaXBfcmVjdF90ICpib3hlcywgaW50IGNvdW50ICkKK3N0YXRpYyB2b2lkIHIxMjhfZW1pdF9jbGlwX3JlY3RzKGRybV9yMTI4X3ByaXZhdGVfdCAqIGRldl9wcml2LAorCQkJCSBkcm1fY2xpcF9yZWN0X3QgKiBib3hlcywgaW50IGNvdW50KQogewogCXUzMiBhdXhfc2NfY250bCA9IDB4MDAwMDAwMDA7CiAJUklOR19MT0NBTFM7Ci0JRFJNX0RFQlVHKCAiICAgICVzXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwlEUk1fREVCVUcoIiAgICAlc1xuIiwgX19GVU5DVElPTl9fKTsKIAotCUJFR0lOX1JJTkcoIChjb3VudCA8IDM/IGNvdW50OiAzKSAqIDUgKyAyICk7CisJQkVHSU5fUklORygoY291bnQgPCAzID8gY291bnQgOiAzKSAqIDUgKyAyKTsKIAotCWlmICggY291bnQgPj0gMSApIHsKLQkJT1VUX1JJTkcoIENDRV9QQUNLRVQwKCBSMTI4X0FVWDFfU0NfTEVGVCwgMyApICk7Ci0JCU9VVF9SSU5HKCBib3hlc1swXS54MSApOwotCQlPVVRfUklORyggYm94ZXNbMF0ueDIgLSAxICk7Ci0JCU9VVF9SSU5HKCBib3hlc1swXS55MSApOwotCQlPVVRfUklORyggYm94ZXNbMF0ueTIgLSAxICk7CisJaWYgKGNvdW50ID49IDEpIHsKKwkJT1VUX1JJTkcoQ0NFX1BBQ0tFVDAoUjEyOF9BVVgxX1NDX0xFRlQsIDMpKTsKKwkJT1VUX1JJTkcoYm94ZXNbMF0ueDEpOworCQlPVVRfUklORyhib3hlc1swXS54MiAtIDEpOworCQlPVVRfUklORyhib3hlc1swXS55MSk7CisJCU9VVF9SSU5HKGJveGVzWzBdLnkyIC0gMSk7CiAKIAkJYXV4X3NjX2NudGwgfD0gKFIxMjhfQVVYMV9TQ19FTiB8IFIxMjhfQVVYMV9TQ19NT0RFX09SKTsKIAl9Ci0JaWYgKCBjb3VudCA+PSAyICkgewotCQlPVVRfUklORyggQ0NFX1BBQ0tFVDAoIFIxMjhfQVVYMl9TQ19MRUZULCAzICkgKTsKLQkJT1VUX1JJTkcoIGJveGVzWzFdLngxICk7Ci0JCU9VVF9SSU5HKCBib3hlc1sxXS54MiAtIDEgKTsKLQkJT1VUX1JJTkcoIGJveGVzWzFdLnkxICk7Ci0JCU9VVF9SSU5HKCBib3hlc1sxXS55MiAtIDEgKTsKKwlpZiAoY291bnQgPj0gMikgeworCQlPVVRfUklORyhDQ0VfUEFDS0VUMChSMTI4X0FVWDJfU0NfTEVGVCwgMykpOworCQlPVVRfUklORyhib3hlc1sxXS54MSk7CisJCU9VVF9SSU5HKGJveGVzWzFdLngyIC0gMSk7CisJCU9VVF9SSU5HKGJveGVzWzFdLnkxKTsKKwkJT1VUX1JJTkcoYm94ZXNbMV0ueTIgLSAxKTsKIAogCQlhdXhfc2NfY250bCB8PSAoUjEyOF9BVVgyX1NDX0VOIHwgUjEyOF9BVVgyX1NDX01PREVfT1IpOwogCX0KLQlpZiAoIGNvdW50ID49IDMgKSB7Ci0JCU9VVF9SSU5HKCBDQ0VfUEFDS0VUMCggUjEyOF9BVVgzX1NDX0xFRlQsIDMgKSApOwotCQlPVVRfUklORyggYm94ZXNbMl0ueDEgKTsKLQkJT1VUX1JJTkcoIGJveGVzWzJdLngyIC0gMSApOwotCQlPVVRfUklORyggYm94ZXNbMl0ueTEgKTsKLQkJT1VUX1JJTkcoIGJveGVzWzJdLnkyIC0gMSApOworCWlmIChjb3VudCA+PSAzKSB7CisJCU9VVF9SSU5HKENDRV9QQUNLRVQwKFIxMjhfQVVYM19TQ19MRUZULCAzKSk7CisJCU9VVF9SSU5HKGJveGVzWzJdLngxKTsKKwkJT1VUX1JJTkcoYm94ZXNbMl0ueDIgLSAxKTsKKwkJT1VUX1JJTkcoYm94ZXNbMl0ueTEpOworCQlPVVRfUklORyhib3hlc1syXS55MiAtIDEpOwogCiAJCWF1eF9zY19jbnRsIHw9IChSMTI4X0FVWDNfU0NfRU4gfCBSMTI4X0FVWDNfU0NfTU9ERV9PUik7CiAJfQogCi0JT1VUX1JJTkcoIENDRV9QQUNLRVQwKCBSMTI4X0FVWF9TQ19DTlRMLCAwICkgKTsKLQlPVVRfUklORyggYXV4X3NjX2NudGwgKTsKKwlPVVRfUklORyhDQ0VfUEFDS0VUMChSMTI4X0FVWF9TQ19DTlRMLCAwKSk7CisJT1VUX1JJTkcoYXV4X3NjX2NudGwpOwogCiAJQURWQU5DRV9SSU5HKCk7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgcjEyOF9lbWl0X2NvcmUoIGRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYgKQorc3RhdGljIF9faW5saW5lX18gdm9pZCByMTI4X2VtaXRfY29yZShkcm1fcjEyOF9wcml2YXRlX3QgKiBkZXZfcHJpdikKIHsKIAlkcm1fcjEyOF9zYXJlYV90ICpzYXJlYV9wcml2ID0gZGV2X3ByaXYtPnNhcmVhX3ByaXY7CiAJZHJtX3IxMjhfY29udGV4dF9yZWdzX3QgKmN0eCA9ICZzYXJlYV9wcml2LT5jb250ZXh0X3N0YXRlOwogCVJJTkdfTE9DQUxTOwotCURSTV9ERUJVRyggIiAgICAlc1xuIiwgX19GVU5DVElPTl9fICk7CisJRFJNX0RFQlVHKCIgICAgJXNcbiIsIF9fRlVOQ1RJT05fXyk7CiAKLQlCRUdJTl9SSU5HKCAyICk7CisJQkVHSU5fUklORygyKTsKIAotCU9VVF9SSU5HKCBDQ0VfUEFDS0VUMCggUjEyOF9TQ0FMRV8zRF9DTlRMLCAwICkgKTsKLQlPVVRfUklORyggY3R4LT5zY2FsZV8zZF9jbnRsICk7CisJT1VUX1JJTkcoQ0NFX1BBQ0tFVDAoUjEyOF9TQ0FMRV8zRF9DTlRMLCAwKSk7CisJT1VUX1JJTkcoY3R4LT5zY2FsZV8zZF9jbnRsKTsKIAogCUFEVkFOQ0VfUklORygpOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIHIxMjhfZW1pdF9jb250ZXh0KCBkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2ICkKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgcjEyOF9lbWl0X2NvbnRleHQoZHJtX3IxMjhfcHJpdmF0ZV90ICogZGV2X3ByaXYpCiB7CiAJZHJtX3IxMjhfc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9wcml2OwogCWRybV9yMTI4X2NvbnRleHRfcmVnc190ICpjdHggPSAmc2FyZWFfcHJpdi0+Y29udGV4dF9zdGF0ZTsKIAlSSU5HX0xPQ0FMUzsKLQlEUk1fREVCVUcoICIgICAgJXNcbiIsIF9fRlVOQ1RJT05fXyApOworCURSTV9ERUJVRygiICAgICVzXG4iLCBfX0ZVTkNUSU9OX18pOwogCi0JQkVHSU5fUklORyggMTMgKTsKKwlCRUdJTl9SSU5HKDEzKTsKIAotCU9VVF9SSU5HKCBDQ0VfUEFDS0VUMCggUjEyOF9EU1RfUElUQ0hfT0ZGU0VUX0MsIDExICkgKTsKLQlPVVRfUklORyggY3R4LT5kc3RfcGl0Y2hfb2Zmc2V0X2MgKTsKLQlPVVRfUklORyggY3R4LT5kcF9ndWlfbWFzdGVyX2NudGxfYyApOwotCU9VVF9SSU5HKCBjdHgtPnNjX3RvcF9sZWZ0X2MgKTsKLQlPVVRfUklORyggY3R4LT5zY19ib3R0b21fcmlnaHRfYyApOwotCU9VVF9SSU5HKCBjdHgtPnpfb2Zmc2V0X2MgKTsKLQlPVVRfUklORyggY3R4LT56X3BpdGNoX2MgKTsKLQlPVVRfUklORyggY3R4LT56X3N0ZW5fY250bF9jICk7Ci0JT1VUX1JJTkcoIGN0eC0+dGV4X2NudGxfYyApOwotCU9VVF9SSU5HKCBjdHgtPm1pc2NfM2Rfc3RhdGVfY250bF9yZWcgKTsKLQlPVVRfUklORyggY3R4LT50ZXh0dXJlX2Nscl9jbXBfY2xyX2MgKTsKLQlPVVRfUklORyggY3R4LT50ZXh0dXJlX2Nscl9jbXBfbXNrX2MgKTsKLQlPVVRfUklORyggY3R4LT5mb2dfY29sb3JfYyApOworCU9VVF9SSU5HKENDRV9QQUNLRVQwKFIxMjhfRFNUX1BJVENIX09GRlNFVF9DLCAxMSkpOworCU9VVF9SSU5HKGN0eC0+ZHN0X3BpdGNoX29mZnNldF9jKTsKKwlPVVRfUklORyhjdHgtPmRwX2d1aV9tYXN0ZXJfY250bF9jKTsKKwlPVVRfUklORyhjdHgtPnNjX3RvcF9sZWZ0X2MpOworCU9VVF9SSU5HKGN0eC0+c2NfYm90dG9tX3JpZ2h0X2MpOworCU9VVF9SSU5HKGN0eC0+el9vZmZzZXRfYyk7CisJT1VUX1JJTkcoY3R4LT56X3BpdGNoX2MpOworCU9VVF9SSU5HKGN0eC0+el9zdGVuX2NudGxfYyk7CisJT1VUX1JJTkcoY3R4LT50ZXhfY250bF9jKTsKKwlPVVRfUklORyhjdHgtPm1pc2NfM2Rfc3RhdGVfY250bF9yZWcpOworCU9VVF9SSU5HKGN0eC0+dGV4dHVyZV9jbHJfY21wX2Nscl9jKTsKKwlPVVRfUklORyhjdHgtPnRleHR1cmVfY2xyX2NtcF9tc2tfYyk7CisJT1VUX1JJTkcoY3R4LT5mb2dfY29sb3JfYyk7CiAKIAlBRFZBTkNFX1JJTkcoKTsKIH0KIAotc3RhdGljIF9faW5saW5lX18gdm9pZCByMTI4X2VtaXRfc2V0dXAoIGRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYgKQorc3RhdGljIF9faW5saW5lX18gdm9pZCByMTI4X2VtaXRfc2V0dXAoZHJtX3IxMjhfcHJpdmF0ZV90ICogZGV2X3ByaXYpCiB7CiAJZHJtX3IxMjhfc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9wcml2OwogCWRybV9yMTI4X2NvbnRleHRfcmVnc190ICpjdHggPSAmc2FyZWFfcHJpdi0+Y29udGV4dF9zdGF0ZTsKIAlSSU5HX0xPQ0FMUzsKLQlEUk1fREVCVUcoICIgICAgJXNcbiIsIF9fRlVOQ1RJT05fXyApOworCURSTV9ERUJVRygiICAgICVzXG4iLCBfX0ZVTkNUSU9OX18pOwogCi0JQkVHSU5fUklORyggMyApOworCUJFR0lOX1JJTkcoMyk7CiAKLQlPVVRfUklORyggQ0NFX1BBQ0tFVDEoIFIxMjhfU0VUVVBfQ05UTCwgUjEyOF9QTTRfVkNfRlBVX1NFVFVQICkgKTsKLQlPVVRfUklORyggY3R4LT5zZXR1cF9jbnRsICk7Ci0JT1VUX1JJTkcoIGN0eC0+cG00X3ZjX2ZwdV9zZXR1cCApOworCU9VVF9SSU5HKENDRV9QQUNLRVQxKFIxMjhfU0VUVVBfQ05UTCwgUjEyOF9QTTRfVkNfRlBVX1NFVFVQKSk7CisJT1VUX1JJTkcoY3R4LT5zZXR1cF9jbnRsKTsKKwlPVVRfUklORyhjdHgtPnBtNF92Y19mcHVfc2V0dXApOwogCiAJQURWQU5DRV9SSU5HKCk7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgcjEyOF9lbWl0X21hc2tzKCBkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2ICkKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgcjEyOF9lbWl0X21hc2tzKGRybV9yMTI4X3ByaXZhdGVfdCAqIGRldl9wcml2KQogewogCWRybV9yMTI4X3NhcmVhX3QgKnNhcmVhX3ByaXYgPSBkZXZfcHJpdi0+c2FyZWFfcHJpdjsKIAlkcm1fcjEyOF9jb250ZXh0X3JlZ3NfdCAqY3R4ID0gJnNhcmVhX3ByaXYtPmNvbnRleHRfc3RhdGU7CiAJUklOR19MT0NBTFM7Ci0JRFJNX0RFQlVHKCAiICAgICVzXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwlEUk1fREVCVUcoIiAgICAlc1xuIiwgX19GVU5DVElPTl9fKTsKIAotCUJFR0lOX1JJTkcoIDUgKTsKKwlCRUdJTl9SSU5HKDUpOwogCi0JT1VUX1JJTkcoIENDRV9QQUNLRVQwKCBSMTI4X0RQX1dSSVRFX01BU0ssIDAgKSApOwotCU9VVF9SSU5HKCBjdHgtPmRwX3dyaXRlX21hc2sgKTsKKwlPVVRfUklORyhDQ0VfUEFDS0VUMChSMTI4X0RQX1dSSVRFX01BU0ssIDApKTsKKwlPVVRfUklORyhjdHgtPmRwX3dyaXRlX21hc2spOwogCi0JT1VUX1JJTkcoIENDRV9QQUNLRVQwKCBSMTI4X1NURU5fUkVGX01BU0tfQywgMSApICk7Ci0JT1VUX1JJTkcoIGN0eC0+c3Rlbl9yZWZfbWFza19jICk7Ci0JT1VUX1JJTkcoIGN0eC0+cGxhbmVfM2RfbWFza19jICk7CisJT1VUX1JJTkcoQ0NFX1BBQ0tFVDAoUjEyOF9TVEVOX1JFRl9NQVNLX0MsIDEpKTsKKwlPVVRfUklORyhjdHgtPnN0ZW5fcmVmX21hc2tfYyk7CisJT1VUX1JJTkcoY3R4LT5wbGFuZV8zZF9tYXNrX2MpOwogCiAJQURWQU5DRV9SSU5HKCk7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgcjEyOF9lbWl0X3dpbmRvdyggZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdiApCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHIxMjhfZW1pdF93aW5kb3coZHJtX3IxMjhfcHJpdmF0ZV90ICogZGV2X3ByaXYpCiB7CiAJZHJtX3IxMjhfc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9wcml2OwogCWRybV9yMTI4X2NvbnRleHRfcmVnc190ICpjdHggPSAmc2FyZWFfcHJpdi0+Y29udGV4dF9zdGF0ZTsKIAlSSU5HX0xPQ0FMUzsKLQlEUk1fREVCVUcoICIgICAgJXNcbiIsIF9fRlVOQ1RJT05fXyApOworCURSTV9ERUJVRygiICAgICVzXG4iLCBfX0ZVTkNUSU9OX18pOwogCi0JQkVHSU5fUklORyggMiApOworCUJFR0lOX1JJTkcoMik7CiAKLQlPVVRfUklORyggQ0NFX1BBQ0tFVDAoIFIxMjhfV0lORE9XX1hZX09GRlNFVCwgMCApICk7Ci0JT1VUX1JJTkcoIGN0eC0+d2luZG93X3h5X29mZnNldCApOworCU9VVF9SSU5HKENDRV9QQUNLRVQwKFIxMjhfV0lORE9XX1hZX09GRlNFVCwgMCkpOworCU9VVF9SSU5HKGN0eC0+d2luZG93X3h5X29mZnNldCk7CiAKIAlBRFZBTkNFX1JJTkcoKTsKIH0KIAotc3RhdGljIF9faW5saW5lX18gdm9pZCByMTI4X2VtaXRfdGV4MCggZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdiApCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHIxMjhfZW1pdF90ZXgwKGRybV9yMTI4X3ByaXZhdGVfdCAqIGRldl9wcml2KQogewogCWRybV9yMTI4X3NhcmVhX3QgKnNhcmVhX3ByaXYgPSBkZXZfcHJpdi0+c2FyZWFfcHJpdjsKIAlkcm1fcjEyOF9jb250ZXh0X3JlZ3NfdCAqY3R4ID0gJnNhcmVhX3ByaXYtPmNvbnRleHRfc3RhdGU7CiAJZHJtX3IxMjhfdGV4dHVyZV9yZWdzX3QgKnRleCA9ICZzYXJlYV9wcml2LT50ZXhfc3RhdGVbMF07CiAJaW50IGk7CiAJUklOR19MT0NBTFM7Ci0JRFJNX0RFQlVHKCAiICAgICVzXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwlEUk1fREVCVUcoIiAgICAlc1xuIiwgX19GVU5DVElPTl9fKTsKIAotCUJFR0lOX1JJTkcoIDcgKyBSMTI4X01BWF9URVhUVVJFX0xFVkVMUyApOworCUJFR0lOX1JJTkcoNyArIFIxMjhfTUFYX1RFWFRVUkVfTEVWRUxTKTsKIAotCU9VVF9SSU5HKCBDQ0VfUEFDS0VUMCggUjEyOF9QUklNX1RFWF9DTlRMX0MsCi0JCQkgICAgICAgMiArIFIxMjhfTUFYX1RFWFRVUkVfTEVWRUxTICkgKTsKLQlPVVRfUklORyggdGV4LT50ZXhfY250bCApOwotCU9VVF9SSU5HKCB0ZXgtPnRleF9jb21iaW5lX2NudGwgKTsKLQlPVVRfUklORyggY3R4LT50ZXhfc2l6ZV9waXRjaF9jICk7Ci0JZm9yICggaSA9IDAgOyBpIDwgUjEyOF9NQVhfVEVYVFVSRV9MRVZFTFMgOyBpKysgKSB7Ci0JCU9VVF9SSU5HKCB0ZXgtPnRleF9vZmZzZXRbaV0gKTsKKwlPVVRfUklORyhDQ0VfUEFDS0VUMChSMTI4X1BSSU1fVEVYX0NOVExfQywKKwkJCSAgICAgMiArIFIxMjhfTUFYX1RFWFRVUkVfTEVWRUxTKSk7CisJT1VUX1JJTkcodGV4LT50ZXhfY250bCk7CisJT1VUX1JJTkcodGV4LT50ZXhfY29tYmluZV9jbnRsKTsKKwlPVVRfUklORyhjdHgtPnRleF9zaXplX3BpdGNoX2MpOworCWZvciAoaSA9IDA7IGkgPCBSMTI4X01BWF9URVhUVVJFX0xFVkVMUzsgaSsrKSB7CisJCU9VVF9SSU5HKHRleC0+dGV4X29mZnNldFtpXSk7CiAJfQogCi0JT1VUX1JJTkcoIENDRV9QQUNLRVQwKCBSMTI4X0NPTlNUQU5UX0NPTE9SX0MsIDEgKSApOwotCU9VVF9SSU5HKCBjdHgtPmNvbnN0YW50X2NvbG9yX2MgKTsKLQlPVVRfUklORyggdGV4LT50ZXhfYm9yZGVyX2NvbG9yICk7CisJT1VUX1JJTkcoQ0NFX1BBQ0tFVDAoUjEyOF9DT05TVEFOVF9DT0xPUl9DLCAxKSk7CisJT1VUX1JJTkcoY3R4LT5jb25zdGFudF9jb2xvcl9jKTsKKwlPVVRfUklORyh0ZXgtPnRleF9ib3JkZXJfY29sb3IpOwogCiAJQURWQU5DRV9SSU5HKCk7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgcjEyOF9lbWl0X3RleDEoIGRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYgKQorc3RhdGljIF9faW5saW5lX18gdm9pZCByMTI4X2VtaXRfdGV4MShkcm1fcjEyOF9wcml2YXRlX3QgKiBkZXZfcHJpdikKIHsKIAlkcm1fcjEyOF9zYXJlYV90ICpzYXJlYV9wcml2ID0gZGV2X3ByaXYtPnNhcmVhX3ByaXY7CiAJZHJtX3IxMjhfdGV4dHVyZV9yZWdzX3QgKnRleCA9ICZzYXJlYV9wcml2LT50ZXhfc3RhdGVbMV07CiAJaW50IGk7CiAJUklOR19MT0NBTFM7Ci0JRFJNX0RFQlVHKCAiICAgICVzXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwlEUk1fREVCVUcoIiAgICAlc1xuIiwgX19GVU5DVElPTl9fKTsKIAotCUJFR0lOX1JJTkcoIDUgKyBSMTI4X01BWF9URVhUVVJFX0xFVkVMUyApOworCUJFR0lOX1JJTkcoNSArIFIxMjhfTUFYX1RFWFRVUkVfTEVWRUxTKTsKIAotCU9VVF9SSU5HKCBDQ0VfUEFDS0VUMCggUjEyOF9TRUNfVEVYX0NOVExfQywKLQkJCSAgICAgICAxICsgUjEyOF9NQVhfVEVYVFVSRV9MRVZFTFMgKSApOwotCU9VVF9SSU5HKCB0ZXgtPnRleF9jbnRsICk7Ci0JT1VUX1JJTkcoIHRleC0+dGV4X2NvbWJpbmVfY250bCApOwotCWZvciAoIGkgPSAwIDsgaSA8IFIxMjhfTUFYX1RFWFRVUkVfTEVWRUxTIDsgaSsrICkgewotCQlPVVRfUklORyggdGV4LT50ZXhfb2Zmc2V0W2ldICk7CisJT1VUX1JJTkcoQ0NFX1BBQ0tFVDAoUjEyOF9TRUNfVEVYX0NOVExfQywgMSArIFIxMjhfTUFYX1RFWFRVUkVfTEVWRUxTKSk7CisJT1VUX1JJTkcodGV4LT50ZXhfY250bCk7CisJT1VUX1JJTkcodGV4LT50ZXhfY29tYmluZV9jbnRsKTsKKwlmb3IgKGkgPSAwOyBpIDwgUjEyOF9NQVhfVEVYVFVSRV9MRVZFTFM7IGkrKykgeworCQlPVVRfUklORyh0ZXgtPnRleF9vZmZzZXRbaV0pOwogCX0KIAotCU9VVF9SSU5HKCBDQ0VfUEFDS0VUMCggUjEyOF9TRUNfVEVYVFVSRV9CT1JERVJfQ09MT1JfQywgMCApICk7Ci0JT1VUX1JJTkcoIHRleC0+dGV4X2JvcmRlcl9jb2xvciApOworCU9VVF9SSU5HKENDRV9QQUNLRVQwKFIxMjhfU0VDX1RFWFRVUkVfQk9SREVSX0NPTE9SX0MsIDApKTsKKwlPVVRfUklORyh0ZXgtPnRleF9ib3JkZXJfY29sb3IpOwogCiAJQURWQU5DRV9SSU5HKCk7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgcjEyOF9lbWl0X3N0YXRlKCBkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2ICkKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgcjEyOF9lbWl0X3N0YXRlKGRybV9yMTI4X3ByaXZhdGVfdCAqIGRldl9wcml2KQogewogCWRybV9yMTI4X3NhcmVhX3QgKnNhcmVhX3ByaXYgPSBkZXZfcHJpdi0+c2FyZWFfcHJpdjsKIAl1bnNpZ25lZCBpbnQgZGlydHkgPSBzYXJlYV9wcml2LT5kaXJ0eTsKIAotCURSTV9ERUJVRyggIiVzOiBkaXJ0eT0weCUwOHhcbiIsIF9fRlVOQ1RJT05fXywgZGlydHkgKTsKKwlEUk1fREVCVUcoIiVzOiBkaXJ0eT0weCUwOHhcbiIsIF9fRlVOQ1RJT05fXywgZGlydHkpOwogCi0JaWYgKCBkaXJ0eSAmIFIxMjhfVVBMT0FEX0NPUkUgKSB7Ci0JCXIxMjhfZW1pdF9jb3JlKCBkZXZfcHJpdiApOworCWlmIChkaXJ0eSAmIFIxMjhfVVBMT0FEX0NPUkUpIHsKKwkJcjEyOF9lbWl0X2NvcmUoZGV2X3ByaXYpOwogCQlzYXJlYV9wcml2LT5kaXJ0eSAmPSB+UjEyOF9VUExPQURfQ09SRTsKIAl9CiAKLQlpZiAoIGRpcnR5ICYgUjEyOF9VUExPQURfQ09OVEVYVCApIHsKLQkJcjEyOF9lbWl0X2NvbnRleHQoIGRldl9wcml2ICk7CisJaWYgKGRpcnR5ICYgUjEyOF9VUExPQURfQ09OVEVYVCkgeworCQlyMTI4X2VtaXRfY29udGV4dChkZXZfcHJpdik7CiAJCXNhcmVhX3ByaXYtPmRpcnR5ICY9IH5SMTI4X1VQTE9BRF9DT05URVhUOwogCX0KIAotCWlmICggZGlydHkgJiBSMTI4X1VQTE9BRF9TRVRVUCApIHsKLQkJcjEyOF9lbWl0X3NldHVwKCBkZXZfcHJpdiApOworCWlmIChkaXJ0eSAmIFIxMjhfVVBMT0FEX1NFVFVQKSB7CisJCXIxMjhfZW1pdF9zZXR1cChkZXZfcHJpdik7CiAJCXNhcmVhX3ByaXYtPmRpcnR5ICY9IH5SMTI4X1VQTE9BRF9TRVRVUDsKIAl9CiAKLQlpZiAoIGRpcnR5ICYgUjEyOF9VUExPQURfTUFTS1MgKSB7Ci0JCXIxMjhfZW1pdF9tYXNrcyggZGV2X3ByaXYgKTsKKwlpZiAoZGlydHkgJiBSMTI4X1VQTE9BRF9NQVNLUykgeworCQlyMTI4X2VtaXRfbWFza3MoZGV2X3ByaXYpOwogCQlzYXJlYV9wcml2LT5kaXJ0eSAmPSB+UjEyOF9VUExPQURfTUFTS1M7CiAJfQogCi0JaWYgKCBkaXJ0eSAmIFIxMjhfVVBMT0FEX1dJTkRPVyApIHsKLQkJcjEyOF9lbWl0X3dpbmRvdyggZGV2X3ByaXYgKTsKKwlpZiAoZGlydHkgJiBSMTI4X1VQTE9BRF9XSU5ET1cpIHsKKwkJcjEyOF9lbWl0X3dpbmRvdyhkZXZfcHJpdik7CiAJCXNhcmVhX3ByaXYtPmRpcnR5ICY9IH5SMTI4X1VQTE9BRF9XSU5ET1c7CiAJfQogCi0JaWYgKCBkaXJ0eSAmIFIxMjhfVVBMT0FEX1RFWDAgKSB7Ci0JCXIxMjhfZW1pdF90ZXgwKCBkZXZfcHJpdiApOworCWlmIChkaXJ0eSAmIFIxMjhfVVBMT0FEX1RFWDApIHsKKwkJcjEyOF9lbWl0X3RleDAoZGV2X3ByaXYpOwogCQlzYXJlYV9wcml2LT5kaXJ0eSAmPSB+UjEyOF9VUExPQURfVEVYMDsKIAl9CiAKLQlpZiAoIGRpcnR5ICYgUjEyOF9VUExPQURfVEVYMSApIHsKLQkJcjEyOF9lbWl0X3RleDEoIGRldl9wcml2ICk7CisJaWYgKGRpcnR5ICYgUjEyOF9VUExPQURfVEVYMSkgeworCQlyMTI4X2VtaXRfdGV4MShkZXZfcHJpdik7CiAJCXNhcmVhX3ByaXYtPmRpcnR5ICY9IH5SMTI4X1VQTE9BRF9URVgxOwogCX0KIApAQCAtMjcwLDI2ICsyNjgsMjMgQEAKIAlzYXJlYV9wcml2LT5kaXJ0eSAmPSB+UjEyOF9SRVFVSVJFX1FVSUVTQ0VOQ0U7CiB9CiAKLQogI2lmIFIxMjhfUEVSRk9STUFOQ0VfQk9YRVMKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqIFBlcmZvcm1hbmNlIG1vbml0b3JpbmcgZnVuY3Rpb25zCiAgKi8KIAotc3RhdGljIHZvaWQgcjEyOF9jbGVhcl9ib3goIGRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYsCi0JCQkgICAgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgsCi0JCQkgICAgaW50IHIsIGludCBnLCBpbnQgYiApCitzdGF0aWMgdm9pZCByMTI4X2NsZWFyX2JveChkcm1fcjEyOF9wcml2YXRlX3QgKiBkZXZfcHJpdiwKKwkJCSAgIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLCBpbnQgciwgaW50IGcsIGludCBiKQogewogCXUzMiBwaXRjaCwgb2Zmc2V0OwogCXUzMiBmYl9icHAsIGNvbG9yOwogCVJJTkdfTE9DQUxTOwogCi0Jc3dpdGNoICggZGV2X3ByaXYtPmZiX2JwcCApIHsKKwlzd2l0Y2ggKGRldl9wcml2LT5mYl9icHApIHsKIAljYXNlIDE2OgogCQlmYl9icHAgPSBSMTI4X0dNQ19EU1RfMTZCUFA7CiAJCWNvbG9yID0gKCgociAmIDB4ZjgpIDw8IDgpIHwKLQkJCSAoKGcgJiAweGZjKSA8PCAzKSB8Ci0JCQkgKChiICYgMHhmOCkgPj4gMykpOworCQkJICgoZyAmIDB4ZmMpIDw8IDMpIHwgKChiICYgMHhmOCkgPj4gMykpOwogCQlicmVhazsKIAljYXNlIDI0OgogCQlmYl9icHAgPSBSMTI4X0dNQ19EU1RfMjRCUFA7CkBAIC0yOTcsNyArMjkyLDcgQEAKIAkJYnJlYWs7CiAJY2FzZSAzMjoKIAkJZmJfYnBwID0gUjEyOF9HTUNfRFNUXzMyQlBQOwotCQljb2xvciA9ICgoKDB4ZmYpIDw8IDI0KSB8IChyIDw8IDE2KSB8IChnIDw8ICA4KSB8IGIpOworCQljb2xvciA9ICgoKDB4ZmYpIDw8IDI0KSB8IChyIDw8IDE2KSB8IChnIDw8IDgpIHwgYik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybjsKQEAgLTMwNiw2MCArMzAxLDU4IEBACiAJb2Zmc2V0ID0gZGV2X3ByaXYtPmJhY2tfb2Zmc2V0OwogCXBpdGNoID0gZGV2X3ByaXYtPmJhY2tfcGl0Y2ggPj4gMzsKIAotCUJFR0lOX1JJTkcoIDYgKTsKKwlCRUdJTl9SSU5HKDYpOwogCi0JT1VUX1JJTkcoIENDRV9QQUNLRVQzKCBSMTI4X0NOVExfUEFJTlRfTVVMVEksIDQgKSApOwotCU9VVF9SSU5HKCBSMTI4X0dNQ19EU1RfUElUQ0hfT0ZGU0VUX0NOVEwgfAotCQkgIFIxMjhfR01DX0JSVVNIX1NPTElEX0NPTE9SIHwKLQkJICBmYl9icHAgfAotCQkgIFIxMjhfR01DX1NSQ19EQVRBVFlQRV9DT0xPUiB8Ci0JCSAgUjEyOF9ST1AzX1AgfAotCQkgIFIxMjhfR01DX0NMUl9DTVBfQ05UTF9ESVMgfAotCQkgIFIxMjhfR01DX0FVWF9DTElQX0RJUyApOworCU9VVF9SSU5HKENDRV9QQUNLRVQzKFIxMjhfQ05UTF9QQUlOVF9NVUxUSSwgNCkpOworCU9VVF9SSU5HKFIxMjhfR01DX0RTVF9QSVRDSF9PRkZTRVRfQ05UTCB8CisJCSBSMTI4X0dNQ19CUlVTSF9TT0xJRF9DT0xPUiB8CisJCSBmYl9icHAgfAorCQkgUjEyOF9HTUNfU1JDX0RBVEFUWVBFX0NPTE9SIHwKKwkJIFIxMjhfUk9QM19QIHwKKwkJIFIxMjhfR01DX0NMUl9DTVBfQ05UTF9ESVMgfCBSMTI4X0dNQ19BVVhfQ0xJUF9ESVMpOwogCi0JT1VUX1JJTkcoIChwaXRjaCA8PCAyMSkgfCAob2Zmc2V0ID4+IDUpICk7Ci0JT1VUX1JJTkcoIGNvbG9yICk7CisJT1VUX1JJTkcoKHBpdGNoIDw8IDIxKSB8IChvZmZzZXQgPj4gNSkpOworCU9VVF9SSU5HKGNvbG9yKTsKIAotCU9VVF9SSU5HKCAoeCA8PCAxNikgfCB5ICk7Ci0JT1VUX1JJTkcoICh3IDw8IDE2KSB8IGggKTsKKwlPVVRfUklORygoeCA8PCAxNikgfCB5KTsKKwlPVVRfUklORygodyA8PCAxNikgfCBoKTsKIAogCUFEVkFOQ0VfUklORygpOwogfQogCi1zdGF0aWMgdm9pZCByMTI4X2NjZV9wZXJmb3JtYW5jZV9ib3hlcyggZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdiApCitzdGF0aWMgdm9pZCByMTI4X2NjZV9wZXJmb3JtYW5jZV9ib3hlcyhkcm1fcjEyOF9wcml2YXRlX3QgKiBkZXZfcHJpdikKIHsKLQlpZiAoIGF0b21pY19yZWFkKCAmZGV2X3ByaXYtPmlkbGVfY291bnQgKSA9PSAwICkgewotCQlyMTI4X2NsZWFyX2JveCggZGV2X3ByaXYsIDY0LCA0LCA4LCA4LCAwLCAyNTUsIDAgKTsKKwlpZiAoYXRvbWljX3JlYWQoJmRldl9wcml2LT5pZGxlX2NvdW50KSA9PSAwKSB7CisJCXIxMjhfY2xlYXJfYm94KGRldl9wcml2LCA2NCwgNCwgOCwgOCwgMCwgMjU1LCAwKTsKIAl9IGVsc2UgewotCQlhdG9taWNfc2V0KCAmZGV2X3ByaXYtPmlkbGVfY291bnQsIDAgKTsKKwkJYXRvbWljX3NldCgmZGV2X3ByaXYtPmlkbGVfY291bnQsIDApOwogCX0KIH0KIAogI2VuZGlmCiAKLQogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogQ0NFIGNvbW1hbmQgZGlzcGF0Y2ggZnVuY3Rpb25zCiAgKi8KIAotc3RhdGljIHZvaWQgcjEyOF9wcmludF9kaXJ0eSggY29uc3QgY2hhciAqbXNnLCB1bnNpZ25lZCBpbnQgZmxhZ3MgKQorc3RhdGljIHZvaWQgcjEyOF9wcmludF9kaXJ0eShjb25zdCBjaGFyICptc2csIHVuc2lnbmVkIGludCBmbGFncykKIHsKLQlEUk1fSU5GTyggIiVzOiAoMHgleCkgJXMlcyVzJXMlcyVzJXMlcyVzXG4iLAotCQkgIG1zZywKLQkJICBmbGFncywKLQkJICAoZmxhZ3MgJiBSMTI4X1VQTE9BRF9DT1JFKSAgICAgICAgPyAiY29yZSwgIiA6ICIiLAotCQkgIChmbGFncyAmIFIxMjhfVVBMT0FEX0NPTlRFWFQpICAgICA/ICJjb250ZXh0LCAiIDogIiIsCi0JCSAgKGZsYWdzICYgUjEyOF9VUExPQURfU0VUVVApICAgICAgID8gInNldHVwLCAiIDogIiIsCi0JCSAgKGZsYWdzICYgUjEyOF9VUExPQURfVEVYMCkgICAgICAgID8gInRleDAsICIgOiAiIiwKLQkJICAoZmxhZ3MgJiBSMTI4X1VQTE9BRF9URVgxKSAgICAgICAgPyAidGV4MSwgIiA6ICIiLAotCQkgIChmbGFncyAmIFIxMjhfVVBMT0FEX01BU0tTKSAgICAgICA/ICJtYXNrcywgIiA6ICIiLAotCQkgIChmbGFncyAmIFIxMjhfVVBMT0FEX1dJTkRPVykgICAgICA/ICJ3aW5kb3csICIgOiAiIiwKLQkJICAoZmxhZ3MgJiBSMTI4X1VQTE9BRF9DTElQUkVDVFMpICAgPyAiY2xpcHJlY3RzLCAiIDogIiIsCi0JCSAgKGZsYWdzICYgUjEyOF9SRVFVSVJFX1FVSUVTQ0VOQ0UpID8gInF1aWVzY2VuY2UsICIgOiAiIiApOworCURSTV9JTkZPKCIlczogKDB4JXgpICVzJXMlcyVzJXMlcyVzJXMlc1xuIiwKKwkJIG1zZywKKwkJIGZsYWdzLAorCQkgKGZsYWdzICYgUjEyOF9VUExPQURfQ09SRSkgPyAiY29yZSwgIiA6ICIiLAorCQkgKGZsYWdzICYgUjEyOF9VUExPQURfQ09OVEVYVCkgPyAiY29udGV4dCwgIiA6ICIiLAorCQkgKGZsYWdzICYgUjEyOF9VUExPQURfU0VUVVApID8gInNldHVwLCAiIDogIiIsCisJCSAoZmxhZ3MgJiBSMTI4X1VQTE9BRF9URVgwKSA/ICJ0ZXgwLCAiIDogIiIsCisJCSAoZmxhZ3MgJiBSMTI4X1VQTE9BRF9URVgxKSA/ICJ0ZXgxLCAiIDogIiIsCisJCSAoZmxhZ3MgJiBSMTI4X1VQTE9BRF9NQVNLUykgPyAibWFza3MsICIgOiAiIiwKKwkJIChmbGFncyAmIFIxMjhfVVBMT0FEX1dJTkRPVykgPyAid2luZG93LCAiIDogIiIsCisJCSAoZmxhZ3MgJiBSMTI4X1VQTE9BRF9DTElQUkVDVFMpID8gImNsaXByZWN0cywgIiA6ICIiLAorCQkgKGZsYWdzICYgUjEyOF9SRVFVSVJFX1FVSUVTQ0VOQ0UpID8gInF1aWVzY2VuY2UsICIgOiAiIik7CiB9CiAKLXN0YXRpYyB2b2lkIHIxMjhfY2NlX2Rpc3BhdGNoX2NsZWFyKCBkcm1fZGV2aWNlX3QgKmRldiwKLQkJCQkgICAgIGRybV9yMTI4X2NsZWFyX3QgKmNsZWFyICkKK3N0YXRpYyB2b2lkIHIxMjhfY2NlX2Rpc3BhdGNoX2NsZWFyKGRybV9kZXZpY2VfdCAqIGRldiwKKwkJCQkgICAgZHJtX3IxMjhfY2xlYXJfdCAqIGNsZWFyKQogewogCWRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWRybV9yMTI4X3NhcmVhX3QgKnNhcmVhX3ByaXYgPSBkZXZfcHJpdi0+c2FyZWFfcHJpdjsKQEAgLTM2OCwxMDIgKzM2MSwxMDMgQEAKIAl1bnNpZ25lZCBpbnQgZmxhZ3MgPSBjbGVhci0+ZmxhZ3M7CiAJaW50IGk7CiAJUklOR19MT0NBTFM7Ci0JRFJNX0RFQlVHKCAiJXNcbiIsIF9fRlVOQ1RJT05fXyApOworCURSTV9ERUJVRygiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CiAKLQlpZiAoIGRldl9wcml2LT5wYWdlX2ZsaXBwaW5nICYmIGRldl9wcml2LT5jdXJyZW50X3BhZ2UgPT0gMSApIHsKKwlpZiAoZGV2X3ByaXYtPnBhZ2VfZmxpcHBpbmcgJiYgZGV2X3ByaXYtPmN1cnJlbnRfcGFnZSA9PSAxKSB7CiAJCXVuc2lnbmVkIGludCB0bXAgPSBmbGFnczsKIAogCQlmbGFncyAmPSB+KFIxMjhfRlJPTlQgfCBSMTI4X0JBQ0spOwotCQlpZiAoIHRtcCAmIFIxMjhfRlJPTlQgKSBmbGFncyB8PSBSMTI4X0JBQ0s7Ci0JCWlmICggdG1wICYgUjEyOF9CQUNLICkgIGZsYWdzIHw9IFIxMjhfRlJPTlQ7CisJCWlmICh0bXAgJiBSMTI4X0ZST05UKQorCQkJZmxhZ3MgfD0gUjEyOF9CQUNLOworCQlpZiAodG1wICYgUjEyOF9CQUNLKQorCQkJZmxhZ3MgfD0gUjEyOF9GUk9OVDsKIAl9CiAKLQlmb3IgKCBpID0gMCA7IGkgPCBuYm94IDsgaSsrICkgeworCWZvciAoaSA9IDA7IGkgPCBuYm94OyBpKyspIHsKIAkJaW50IHggPSBwYm94W2ldLngxOwogCQlpbnQgeSA9IHBib3hbaV0ueTE7CiAJCWludCB3ID0gcGJveFtpXS54MiAtIHg7CiAJCWludCBoID0gcGJveFtpXS55MiAtIHk7CiAKLQkJRFJNX0RFQlVHKCAiZGlzcGF0Y2ggY2xlYXIgJWQsJWQtJWQsJWQgZmxhZ3MgMHgleFxuIiwKLQkJCSAgIHBib3hbaV0ueDEsIHBib3hbaV0ueTEsIHBib3hbaV0ueDIsCi0JCQkgICBwYm94W2ldLnkyLCBmbGFncyApOworCQlEUk1fREVCVUcoImRpc3BhdGNoIGNsZWFyICVkLCVkLSVkLCVkIGZsYWdzIDB4JXhcbiIsCisJCQkgIHBib3hbaV0ueDEsIHBib3hbaV0ueTEsIHBib3hbaV0ueDIsCisJCQkgIHBib3hbaV0ueTIsIGZsYWdzKTsKIAotCQlpZiAoIGZsYWdzICYgKFIxMjhfRlJPTlQgfCBSMTI4X0JBQ0spICkgewotCQkJQkVHSU5fUklORyggMiApOworCQlpZiAoZmxhZ3MgJiAoUjEyOF9GUk9OVCB8IFIxMjhfQkFDSykpIHsKKwkJCUJFR0lOX1JJTkcoMik7CiAKLQkJCU9VVF9SSU5HKCBDQ0VfUEFDS0VUMCggUjEyOF9EUF9XUklURV9NQVNLLCAwICkgKTsKLQkJCU9VVF9SSU5HKCBjbGVhci0+Y29sb3JfbWFzayApOworCQkJT1VUX1JJTkcoQ0NFX1BBQ0tFVDAoUjEyOF9EUF9XUklURV9NQVNLLCAwKSk7CisJCQlPVVRfUklORyhjbGVhci0+Y29sb3JfbWFzayk7CiAKIAkJCUFEVkFOQ0VfUklORygpOwogCQl9CiAKLQkJaWYgKCBmbGFncyAmIFIxMjhfRlJPTlQgKSB7Ci0JCQlCRUdJTl9SSU5HKCA2ICk7CisJCWlmIChmbGFncyAmIFIxMjhfRlJPTlQpIHsKKwkJCUJFR0lOX1JJTkcoNik7CiAKLQkJCU9VVF9SSU5HKCBDQ0VfUEFDS0VUMyggUjEyOF9DTlRMX1BBSU5UX01VTFRJLCA0ICkgKTsKLQkJCU9VVF9SSU5HKCBSMTI4X0dNQ19EU1RfUElUQ0hfT0ZGU0VUX0NOVEwgfAotCQkJCSAgUjEyOF9HTUNfQlJVU0hfU09MSURfQ09MT1IgfAotCQkJCSAgKGRldl9wcml2LT5jb2xvcl9mbXQgPDwgOCkgfAotCQkJCSAgUjEyOF9HTUNfU1JDX0RBVEFUWVBFX0NPTE9SIHwKLQkJCQkgIFIxMjhfUk9QM19QIHwKLQkJCQkgIFIxMjhfR01DX0NMUl9DTVBfQ05UTF9ESVMgfAotCQkJCSAgUjEyOF9HTUNfQVVYX0NMSVBfRElTICk7CisJCQlPVVRfUklORyhDQ0VfUEFDS0VUMyhSMTI4X0NOVExfUEFJTlRfTVVMVEksIDQpKTsKKwkJCU9VVF9SSU5HKFIxMjhfR01DX0RTVF9QSVRDSF9PRkZTRVRfQ05UTCB8CisJCQkJIFIxMjhfR01DX0JSVVNIX1NPTElEX0NPTE9SIHwKKwkJCQkgKGRldl9wcml2LT5jb2xvcl9mbXQgPDwgOCkgfAorCQkJCSBSMTI4X0dNQ19TUkNfREFUQVRZUEVfQ09MT1IgfAorCQkJCSBSMTI4X1JPUDNfUCB8CisJCQkJIFIxMjhfR01DX0NMUl9DTVBfQ05UTF9ESVMgfAorCQkJCSBSMTI4X0dNQ19BVVhfQ0xJUF9ESVMpOwogCi0JCQlPVVRfUklORyggZGV2X3ByaXYtPmZyb250X3BpdGNoX29mZnNldF9jICk7Ci0JCQlPVVRfUklORyggY2xlYXItPmNsZWFyX2NvbG9yICk7CisJCQlPVVRfUklORyhkZXZfcHJpdi0+ZnJvbnRfcGl0Y2hfb2Zmc2V0X2MpOworCQkJT1VUX1JJTkcoY2xlYXItPmNsZWFyX2NvbG9yKTsKIAotCQkJT1VUX1JJTkcoICh4IDw8IDE2KSB8IHkgKTsKLQkJCU9VVF9SSU5HKCAodyA8PCAxNikgfCBoICk7CisJCQlPVVRfUklORygoeCA8PCAxNikgfCB5KTsKKwkJCU9VVF9SSU5HKCh3IDw8IDE2KSB8IGgpOwogCiAJCQlBRFZBTkNFX1JJTkcoKTsKIAkJfQogCi0JCWlmICggZmxhZ3MgJiBSMTI4X0JBQ0sgKSB7Ci0JCQlCRUdJTl9SSU5HKCA2ICk7CisJCWlmIChmbGFncyAmIFIxMjhfQkFDSykgeworCQkJQkVHSU5fUklORyg2KTsKIAotCQkJT1VUX1JJTkcoIENDRV9QQUNLRVQzKCBSMTI4X0NOVExfUEFJTlRfTVVMVEksIDQgKSApOwotCQkJT1VUX1JJTkcoIFIxMjhfR01DX0RTVF9QSVRDSF9PRkZTRVRfQ05UTCB8Ci0JCQkJICBSMTI4X0dNQ19CUlVTSF9TT0xJRF9DT0xPUiB8Ci0JCQkJICAoZGV2X3ByaXYtPmNvbG9yX2ZtdCA8PCA4KSB8Ci0JCQkJICBSMTI4X0dNQ19TUkNfREFUQVRZUEVfQ09MT1IgfAotCQkJCSAgUjEyOF9ST1AzX1AgfAotCQkJCSAgUjEyOF9HTUNfQ0xSX0NNUF9DTlRMX0RJUyB8Ci0JCQkJICBSMTI4X0dNQ19BVVhfQ0xJUF9ESVMgKTsKKwkJCU9VVF9SSU5HKENDRV9QQUNLRVQzKFIxMjhfQ05UTF9QQUlOVF9NVUxUSSwgNCkpOworCQkJT1VUX1JJTkcoUjEyOF9HTUNfRFNUX1BJVENIX09GRlNFVF9DTlRMIHwKKwkJCQkgUjEyOF9HTUNfQlJVU0hfU09MSURfQ09MT1IgfAorCQkJCSAoZGV2X3ByaXYtPmNvbG9yX2ZtdCA8PCA4KSB8CisJCQkJIFIxMjhfR01DX1NSQ19EQVRBVFlQRV9DT0xPUiB8CisJCQkJIFIxMjhfUk9QM19QIHwKKwkJCQkgUjEyOF9HTUNfQ0xSX0NNUF9DTlRMX0RJUyB8CisJCQkJIFIxMjhfR01DX0FVWF9DTElQX0RJUyk7CiAKLQkJCU9VVF9SSU5HKCBkZXZfcHJpdi0+YmFja19waXRjaF9vZmZzZXRfYyApOwotCQkJT1VUX1JJTkcoIGNsZWFyLT5jbGVhcl9jb2xvciApOworCQkJT1VUX1JJTkcoZGV2X3ByaXYtPmJhY2tfcGl0Y2hfb2Zmc2V0X2MpOworCQkJT1VUX1JJTkcoY2xlYXItPmNsZWFyX2NvbG9yKTsKIAotCQkJT1VUX1JJTkcoICh4IDw8IDE2KSB8IHkgKTsKLQkJCU9VVF9SSU5HKCAodyA8PCAxNikgfCBoICk7CisJCQlPVVRfUklORygoeCA8PCAxNikgfCB5KTsKKwkJCU9VVF9SSU5HKCh3IDw8IDE2KSB8IGgpOwogCiAJCQlBRFZBTkNFX1JJTkcoKTsKIAkJfQogCi0JCWlmICggZmxhZ3MgJiBSMTI4X0RFUFRIICkgewotCQkJQkVHSU5fUklORyggNiApOworCQlpZiAoZmxhZ3MgJiBSMTI4X0RFUFRIKSB7CisJCQlCRUdJTl9SSU5HKDYpOwogCi0JCQlPVVRfUklORyggQ0NFX1BBQ0tFVDMoIFIxMjhfQ05UTF9QQUlOVF9NVUxUSSwgNCApICk7Ci0JCQlPVVRfUklORyggUjEyOF9HTUNfRFNUX1BJVENIX09GRlNFVF9DTlRMIHwKLQkJCQkgIFIxMjhfR01DX0JSVVNIX1NPTElEX0NPTE9SIHwKLQkJCQkgIChkZXZfcHJpdi0+ZGVwdGhfZm10IDw8IDgpIHwKLQkJCQkgIFIxMjhfR01DX1NSQ19EQVRBVFlQRV9DT0xPUiB8Ci0JCQkJICBSMTI4X1JPUDNfUCB8Ci0JCQkJICBSMTI4X0dNQ19DTFJfQ01QX0NOVExfRElTIHwKLQkJCQkgIFIxMjhfR01DX0FVWF9DTElQX0RJUyB8Ci0JCQkJICBSMTI4X0dNQ19XUl9NU0tfRElTICk7CisJCQlPVVRfUklORyhDQ0VfUEFDS0VUMyhSMTI4X0NOVExfUEFJTlRfTVVMVEksIDQpKTsKKwkJCU9VVF9SSU5HKFIxMjhfR01DX0RTVF9QSVRDSF9PRkZTRVRfQ05UTCB8CisJCQkJIFIxMjhfR01DX0JSVVNIX1NPTElEX0NPTE9SIHwKKwkJCQkgKGRldl9wcml2LT5kZXB0aF9mbXQgPDwgOCkgfAorCQkJCSBSMTI4X0dNQ19TUkNfREFUQVRZUEVfQ09MT1IgfAorCQkJCSBSMTI4X1JPUDNfUCB8CisJCQkJIFIxMjhfR01DX0NMUl9DTVBfQ05UTF9ESVMgfAorCQkJCSBSMTI4X0dNQ19BVVhfQ0xJUF9ESVMgfCBSMTI4X0dNQ19XUl9NU0tfRElTKTsKIAotCQkJT1VUX1JJTkcoIGRldl9wcml2LT5kZXB0aF9waXRjaF9vZmZzZXRfYyApOwotCQkJT1VUX1JJTkcoIGNsZWFyLT5jbGVhcl9kZXB0aCApOworCQkJT1VUX1JJTkcoZGV2X3ByaXYtPmRlcHRoX3BpdGNoX29mZnNldF9jKTsKKwkJCU9VVF9SSU5HKGNsZWFyLT5jbGVhcl9kZXB0aCk7CiAKLQkJCU9VVF9SSU5HKCAoeCA8PCAxNikgfCB5ICk7Ci0JCQlPVVRfUklORyggKHcgPDwgMTYpIHwgaCApOworCQkJT1VUX1JJTkcoKHggPDwgMTYpIHwgeSk7CisJCQlPVVRfUklORygodyA8PCAxNikgfCBoKTsKIAogCQkJQURWQU5DRV9SSU5HKCk7CiAJCX0KIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHIxMjhfY2NlX2Rpc3BhdGNoX3N3YXAoIGRybV9kZXZpY2VfdCAqZGV2ICkKK3N0YXRpYyB2b2lkIHIxMjhfY2NlX2Rpc3BhdGNoX3N3YXAoZHJtX2RldmljZV90ICogZGV2KQogewogCWRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWRybV9yMTI4X3NhcmVhX3QgKnNhcmVhX3ByaXYgPSBkZXZfcHJpdi0+c2FyZWFfcHJpdjsKQEAgLTQ3MSw0OCArNDY1LDQ2IEBACiAJZHJtX2NsaXBfcmVjdF90ICpwYm94ID0gc2FyZWFfcHJpdi0+Ym94ZXM7CiAJaW50IGk7CiAJUklOR19MT0NBTFM7Ci0JRFJNX0RFQlVHKCAiJXNcbiIsIF9fRlVOQ1RJT05fXyApOworCURSTV9ERUJVRygiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CiAKICNpZiBSMTI4X1BFUkZPUk1BTkNFX0JPWEVTCiAJLyogRG8gc29tZSB0cml2aWFsIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcuLi4KIAkgKi8KLQlyMTI4X2NjZV9wZXJmb3JtYW5jZV9ib3hlcyggZGV2X3ByaXYgKTsKKwlyMTI4X2NjZV9wZXJmb3JtYW5jZV9ib3hlcyhkZXZfcHJpdik7CiAjZW5kaWYKIAotCWZvciAoIGkgPSAwIDsgaSA8IG5ib3ggOyBpKysgKSB7CisJZm9yIChpID0gMDsgaSA8IG5ib3g7IGkrKykgewogCQlpbnQgeCA9IHBib3hbaV0ueDE7CiAJCWludCB5ID0gcGJveFtpXS55MTsKIAkJaW50IHcgPSBwYm94W2ldLngyIC0geDsKIAkJaW50IGggPSBwYm94W2ldLnkyIC0geTsKIAotCQlCRUdJTl9SSU5HKCA3ICk7CisJCUJFR0lOX1JJTkcoNyk7CiAKLQkJT1VUX1JJTkcoIENDRV9QQUNLRVQzKCBSMTI4X0NOVExfQklUQkxUX01VTFRJLCA1ICkgKTsKLQkJT1VUX1JJTkcoIFIxMjhfR01DX1NSQ19QSVRDSF9PRkZTRVRfQ05UTCB8Ci0JCQkgIFIxMjhfR01DX0RTVF9QSVRDSF9PRkZTRVRfQ05UTCB8Ci0JCQkgIFIxMjhfR01DX0JSVVNIX05PTkUgfAotCQkJICAoZGV2X3ByaXYtPmNvbG9yX2ZtdCA8PCA4KSB8Ci0JCQkgIFIxMjhfR01DX1NSQ19EQVRBVFlQRV9DT0xPUiB8Ci0JCQkgIFIxMjhfUk9QM19TIHwKLQkJCSAgUjEyOF9EUF9TUkNfU09VUkNFX01FTU9SWSB8Ci0JCQkgIFIxMjhfR01DX0NMUl9DTVBfQ05UTF9ESVMgfAotCQkJICBSMTI4X0dNQ19BVVhfQ0xJUF9ESVMgfAotCQkJICBSMTI4X0dNQ19XUl9NU0tfRElTICk7CisJCU9VVF9SSU5HKENDRV9QQUNLRVQzKFIxMjhfQ05UTF9CSVRCTFRfTVVMVEksIDUpKTsKKwkJT1VUX1JJTkcoUjEyOF9HTUNfU1JDX1BJVENIX09GRlNFVF9DTlRMIHwKKwkJCSBSMTI4X0dNQ19EU1RfUElUQ0hfT0ZGU0VUX0NOVEwgfAorCQkJIFIxMjhfR01DX0JSVVNIX05PTkUgfAorCQkJIChkZXZfcHJpdi0+Y29sb3JfZm10IDw8IDgpIHwKKwkJCSBSMTI4X0dNQ19TUkNfREFUQVRZUEVfQ09MT1IgfAorCQkJIFIxMjhfUk9QM19TIHwKKwkJCSBSMTI4X0RQX1NSQ19TT1VSQ0VfTUVNT1JZIHwKKwkJCSBSMTI4X0dNQ19DTFJfQ01QX0NOVExfRElTIHwKKwkJCSBSMTI4X0dNQ19BVVhfQ0xJUF9ESVMgfCBSMTI4X0dNQ19XUl9NU0tfRElTKTsKIAogCQkvKiBNYWtlIHRoaXMgd29yayBldmVuIGlmIGZyb250ICYgYmFjayBhcmUgZmxpcHBlZDoKIAkJICovCiAJCWlmIChkZXZfcHJpdi0+Y3VycmVudF9wYWdlID09IDApIHsKLQkJCU9VVF9SSU5HKCBkZXZfcHJpdi0+YmFja19waXRjaF9vZmZzZXRfYyApOwotCQkJT1VUX1JJTkcoIGRldl9wcml2LT5mcm9udF9waXRjaF9vZmZzZXRfYyApOwotCQl9IAotCQllbHNlIHsKLQkJCU9VVF9SSU5HKCBkZXZfcHJpdi0+ZnJvbnRfcGl0Y2hfb2Zmc2V0X2MgKTsKLQkJCU9VVF9SSU5HKCBkZXZfcHJpdi0+YmFja19waXRjaF9vZmZzZXRfYyApOworCQkJT1VUX1JJTkcoZGV2X3ByaXYtPmJhY2tfcGl0Y2hfb2Zmc2V0X2MpOworCQkJT1VUX1JJTkcoZGV2X3ByaXYtPmZyb250X3BpdGNoX29mZnNldF9jKTsKKwkJfSBlbHNlIHsKKwkJCU9VVF9SSU5HKGRldl9wcml2LT5mcm9udF9waXRjaF9vZmZzZXRfYyk7CisJCQlPVVRfUklORyhkZXZfcHJpdi0+YmFja19waXRjaF9vZmZzZXRfYyk7CiAJCX0KIAotCQlPVVRfUklORyggKHggPDwgMTYpIHwgeSApOwotCQlPVVRfUklORyggKHggPDwgMTYpIHwgeSApOwotCQlPVVRfUklORyggKHcgPDwgMTYpIHwgaCApOworCQlPVVRfUklORygoeCA8PCAxNikgfCB5KTsKKwkJT1VUX1JJTkcoKHggPDwgMTYpIHwgeSk7CisJCU9VVF9SSU5HKCh3IDw8IDE2KSB8IGgpOwogCiAJCUFEVkFOQ0VfUklORygpOwogCX0KQEAgLTUyMywzOCArNTE1LDM3IEBACiAJICovCiAJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZnJhbWUrKzsKIAotCUJFR0lOX1JJTkcoIDIgKTsKKwlCRUdJTl9SSU5HKDIpOwogCi0JT1VUX1JJTkcoIENDRV9QQUNLRVQwKCBSMTI4X0xBU1RfRlJBTUVfUkVHLCAwICkgKTsKLQlPVVRfUklORyggZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZnJhbWUgKTsKKwlPVVRfUklORyhDQ0VfUEFDS0VUMChSMTI4X0xBU1RfRlJBTUVfUkVHLCAwKSk7CisJT1VUX1JJTkcoZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZnJhbWUpOwogCiAJQURWQU5DRV9SSU5HKCk7CiB9CiAKLXN0YXRpYyB2b2lkIHIxMjhfY2NlX2Rpc3BhdGNoX2ZsaXAoIGRybV9kZXZpY2VfdCAqZGV2ICkKK3N0YXRpYyB2b2lkIHIxMjhfY2NlX2Rpc3BhdGNoX2ZsaXAoZHJtX2RldmljZV90ICogZGV2KQogewogCWRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCVJJTkdfTE9DQUxTOwotCURSTV9ERUJVRygiJXM6IHBhZ2U9JWQgcGZDdXJyZW50UGFnZT0lZFxuIiwgCi0JCV9fRlVOQ1RJT05fXywKLQkJZGV2X3ByaXYtPmN1cnJlbnRfcGFnZSwKLQkJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPnBmQ3VycmVudFBhZ2UpOworCURSTV9ERUJVRygiJXM6IHBhZ2U9JWQgcGZDdXJyZW50UGFnZT0lZFxuIiwKKwkJICBfX0ZVTkNUSU9OX18sCisJCSAgZGV2X3ByaXYtPmN1cnJlbnRfcGFnZSwgZGV2X3ByaXYtPnNhcmVhX3ByaXYtPnBmQ3VycmVudFBhZ2UpOwogCiAjaWYgUjEyOF9QRVJGT1JNQU5DRV9CT1hFUwogCS8qIERvIHNvbWUgdHJpdmlhbCBwZXJmb3JtYW5jZSBtb25pdG9yaW5nLi4uCiAJICovCi0JcjEyOF9jY2VfcGVyZm9ybWFuY2VfYm94ZXMoIGRldl9wcml2ICk7CisJcjEyOF9jY2VfcGVyZm9ybWFuY2VfYm94ZXMoZGV2X3ByaXYpOwogI2VuZGlmCiAKLQlCRUdJTl9SSU5HKCA0ICk7CisJQkVHSU5fUklORyg0KTsKIAogCVIxMjhfV0FJVF9VTlRJTF9QQUdFX0ZMSVBQRUQoKTsKLQlPVVRfUklORyggQ0NFX1BBQ0tFVDAoIFIxMjhfQ1JUQ19PRkZTRVQsIDAgKSApOworCU9VVF9SSU5HKENDRV9QQUNLRVQwKFIxMjhfQ1JUQ19PRkZTRVQsIDApKTsKIAotCWlmICggZGV2X3ByaXYtPmN1cnJlbnRfcGFnZSA9PSAwICkgewotCQlPVVRfUklORyggZGV2X3ByaXYtPmJhY2tfb2Zmc2V0ICk7CisJaWYgKGRldl9wcml2LT5jdXJyZW50X3BhZ2UgPT0gMCkgeworCQlPVVRfUklORyhkZXZfcHJpdi0+YmFja19vZmZzZXQpOwogCX0gZWxzZSB7Ci0JCU9VVF9SSU5HKCBkZXZfcHJpdi0+ZnJvbnRfb2Zmc2V0ICk7CisJCU9VVF9SSU5HKGRldl9wcml2LT5mcm9udF9vZmZzZXQpOwogCX0KIAogCUFEVkFOQ0VfUklORygpOwpAQCAtNTY1LDE4ICs1NTYsMTcgQEAKIAkgKi8KIAlkZXZfcHJpdi0+c2FyZWFfcHJpdi0+bGFzdF9mcmFtZSsrOwogCWRldl9wcml2LT5zYXJlYV9wcml2LT5wZkN1cnJlbnRQYWdlID0gZGV2X3ByaXYtPmN1cnJlbnRfcGFnZSA9Ci0JCQkJCSAgICAgIDEgLSBkZXZfcHJpdi0+Y3VycmVudF9wYWdlOworCSAgICAxIC0gZGV2X3ByaXYtPmN1cnJlbnRfcGFnZTsKIAotCUJFR0lOX1JJTkcoIDIgKTsKKwlCRUdJTl9SSU5HKDIpOwogCi0JT1VUX1JJTkcoIENDRV9QQUNLRVQwKCBSMTI4X0xBU1RfRlJBTUVfUkVHLCAwICkgKTsKLQlPVVRfUklORyggZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZnJhbWUgKTsKKwlPVVRfUklORyhDQ0VfUEFDS0VUMChSMTI4X0xBU1RfRlJBTUVfUkVHLCAwKSk7CisJT1VUX1JJTkcoZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZnJhbWUpOwogCiAJQURWQU5DRV9SSU5HKCk7CiB9CiAKLXN0YXRpYyB2b2lkIHIxMjhfY2NlX2Rpc3BhdGNoX3ZlcnRleCggZHJtX2RldmljZV90ICpkZXYsCi0JCQkJICAgICAgZHJtX2J1Zl90ICpidWYgKQorc3RhdGljIHZvaWQgcjEyOF9jY2VfZGlzcGF0Y2hfdmVydGV4KGRybV9kZXZpY2VfdCAqIGRldiwgZHJtX2J1Zl90ICogYnVmKQogewogCWRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWRybV9yMTI4X2J1Zl9wcml2X3QgKmJ1Zl9wcml2ID0gYnVmLT5kZXZfcHJpdmF0ZTsKQEAgLTU4Nyw1MCArNTc3LDUwIEBACiAJaW50IHByaW0gPSBidWZfcHJpdi0+cHJpbTsKIAlpbnQgaSA9IDA7CiAJUklOR19MT0NBTFM7Ci0JRFJNX0RFQlVHKCAiYnVmPSVkIG5ib3g9JWRcbiIsIGJ1Zi0+aWR4LCBzYXJlYV9wcml2LT5uYm94ICk7CisJRFJNX0RFQlVHKCJidWY9JWQgbmJveD0lZFxuIiwgYnVmLT5pZHgsIHNhcmVhX3ByaXYtPm5ib3gpOwogCi0JaWYgKCAwICkKLQkJcjEyOF9wcmludF9kaXJ0eSggImRpc3BhdGNoX3ZlcnRleCIsIHNhcmVhX3ByaXYtPmRpcnR5ICk7CisJaWYgKDApCisJCXIxMjhfcHJpbnRfZGlydHkoImRpc3BhdGNoX3ZlcnRleCIsIHNhcmVhX3ByaXYtPmRpcnR5KTsKIAotCWlmICggYnVmLT51c2VkICkgeworCWlmIChidWYtPnVzZWQpIHsKIAkJYnVmX3ByaXYtPmRpc3BhdGNoZWQgPSAxOwogCi0JCWlmICggc2FyZWFfcHJpdi0+ZGlydHkgJiB+UjEyOF9VUExPQURfQ0xJUFJFQ1RTICkgewotCQkJcjEyOF9lbWl0X3N0YXRlKCBkZXZfcHJpdiApOworCQlpZiAoc2FyZWFfcHJpdi0+ZGlydHkgJiB+UjEyOF9VUExPQURfQ0xJUFJFQ1RTKSB7CisJCQlyMTI4X2VtaXRfc3RhdGUoZGV2X3ByaXYpOwogCQl9CiAKIAkJZG8gewogCQkJLyogRW1pdCB0aGUgbmV4dCBzZXQgb2YgdXAgdG8gdGhyZWUgY2xpcHJlY3RzICovCi0JCQlpZiAoIGkgPCBzYXJlYV9wcml2LT5uYm94ICkgewotCQkJCXIxMjhfZW1pdF9jbGlwX3JlY3RzKCBkZXZfcHJpdiwKLQkJCQkJCSAgICAgICZzYXJlYV9wcml2LT5ib3hlc1tpXSwKLQkJCQkJCSAgICAgIHNhcmVhX3ByaXYtPm5ib3ggLSBpICk7CisJCQlpZiAoaSA8IHNhcmVhX3ByaXYtPm5ib3gpIHsKKwkJCQlyMTI4X2VtaXRfY2xpcF9yZWN0cyhkZXZfcHJpdiwKKwkJCQkJCSAgICAgJnNhcmVhX3ByaXYtPmJveGVzW2ldLAorCQkJCQkJICAgICBzYXJlYV9wcml2LT5uYm94IC0gaSk7CiAJCQl9CiAKIAkJCS8qIEVtaXQgdGhlIHZlcnRleCBidWZmZXIgcmVuZGVyaW5nIGNvbW1hbmRzICovCi0JCQlCRUdJTl9SSU5HKCA1ICk7CisJCQlCRUdJTl9SSU5HKDUpOwogCi0JCQlPVVRfUklORyggQ0NFX1BBQ0tFVDMoIFIxMjhfM0RfUk5EUl9HRU5fSU5EWF9QUklNLCAzICkgKTsKLQkJCU9VVF9SSU5HKCBvZmZzZXQgKTsKLQkJCU9VVF9SSU5HKCBzaXplICk7Ci0JCQlPVVRfUklORyggZm9ybWF0ICk7Ci0JCQlPVVRfUklORyggcHJpbSB8IFIxMjhfQ0NFX1ZDX0NOVExfUFJJTV9XQUxLX0xJU1QgfAotCQkJCSAgKHNpemUgPDwgUjEyOF9DQ0VfVkNfQ05UTF9OVU1fU0hJRlQpICk7CisJCQlPVVRfUklORyhDQ0VfUEFDS0VUMyhSMTI4XzNEX1JORFJfR0VOX0lORFhfUFJJTSwgMykpOworCQkJT1VUX1JJTkcob2Zmc2V0KTsKKwkJCU9VVF9SSU5HKHNpemUpOworCQkJT1VUX1JJTkcoZm9ybWF0KTsKKwkJCU9VVF9SSU5HKHByaW0gfCBSMTI4X0NDRV9WQ19DTlRMX1BSSU1fV0FMS19MSVNUIHwKKwkJCQkgKHNpemUgPDwgUjEyOF9DQ0VfVkNfQ05UTF9OVU1fU0hJRlQpKTsKIAogCQkJQURWQU5DRV9SSU5HKCk7CiAKIAkJCWkgKz0gMzsKLQkJfSB3aGlsZSAoIGkgPCBzYXJlYV9wcml2LT5uYm94ICk7CisJCX0gd2hpbGUgKGkgPCBzYXJlYV9wcml2LT5uYm94KTsKIAl9CiAKLQlpZiAoIGJ1Zl9wcml2LT5kaXNjYXJkICkgeworCWlmIChidWZfcHJpdi0+ZGlzY2FyZCkgewogCQlidWZfcHJpdi0+YWdlID0gZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZGlzcGF0Y2g7CiAKIAkJLyogRW1pdCB0aGUgdmVydGV4IGJ1ZmZlciBhZ2UgKi8KLQkJQkVHSU5fUklORyggMiApOworCQlCRUdJTl9SSU5HKDIpOwogCi0JCU9VVF9SSU5HKCBDQ0VfUEFDS0VUMCggUjEyOF9MQVNUX0RJU1BBVENIX1JFRywgMCApICk7Ci0JCU9VVF9SSU5HKCBidWZfcHJpdi0+YWdlICk7CisJCU9VVF9SSU5HKENDRV9QQUNLRVQwKFIxMjhfTEFTVF9ESVNQQVRDSF9SRUcsIDApKTsKKwkJT1VUX1JJTkcoYnVmX3ByaXYtPmFnZSk7CiAKIAkJQURWQU5DRV9SSU5HKCk7CiAKQEAgLTY0NiwxNyArNjM2LDE1IEBACiAJc2FyZWFfcHJpdi0+bmJveCA9IDA7CiB9CiAKLXN0YXRpYyB2b2lkIHIxMjhfY2NlX2Rpc3BhdGNoX2luZGlyZWN0KCBkcm1fZGV2aWNlX3QgKmRldiwKLQkJCQkJZHJtX2J1Zl90ICpidWYsCi0JCQkJCWludCBzdGFydCwgaW50IGVuZCApCitzdGF0aWMgdm9pZCByMTI4X2NjZV9kaXNwYXRjaF9pbmRpcmVjdChkcm1fZGV2aWNlX3QgKiBkZXYsCisJCQkJICAgICAgIGRybV9idWZfdCAqIGJ1ZiwgaW50IHN0YXJ0LCBpbnQgZW5kKQogewogCWRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWRybV9yMTI4X2J1Zl9wcml2X3QgKmJ1Zl9wcml2ID0gYnVmLT5kZXZfcHJpdmF0ZTsKIAlSSU5HX0xPQ0FMUzsKLQlEUk1fREVCVUcoICJpbmRpcmVjdDogYnVmPSVkIHM9MHgleCBlPTB4JXhcbiIsCi0JCSAgIGJ1Zi0+aWR4LCBzdGFydCwgZW5kICk7CisJRFJNX0RFQlVHKCJpbmRpcmVjdDogYnVmPSVkIHM9MHgleCBlPTB4JXhcbiIsIGJ1Zi0+aWR4LCBzdGFydCwgZW5kKTsKIAotCWlmICggc3RhcnQgIT0gZW5kICkgeworCWlmIChzdGFydCAhPSBlbmQpIHsKIAkJaW50IG9mZnNldCA9IGJ1Zi0+YnVzX2FkZHJlc3MgKyBzdGFydDsKIAkJaW50IGR3b3JkcyA9IChlbmQgLSBzdGFydCArIDMpIC8gc2l6ZW9mKHUzMik7CiAKQEAgLTY2NCwzMyArNjUyLDMzIEBACiAJCSAqIGR3b3Jkcywgc28gaWYgd2UndmUgYmVlbiBnaXZlbiBhbiBvZGQgbnVtYmVyIHdlIG11c3QKIAkJICogcGFkIHRoZSBkYXRhIHdpdGggYSBUeXBlLTIgQ0NFIHBhY2tldC4KIAkJICovCi0JCWlmICggZHdvcmRzICYgMSApIHsKKwkJaWYgKGR3b3JkcyAmIDEpIHsKIAkJCXUzMiAqZGF0YSA9ICh1MzIgKikKLQkJCQkoKGNoYXIgKilkZXYtPmFncF9idWZmZXJfbWFwLT5oYW5kbGUKLQkJCQkgKyBidWYtPm9mZnNldCArIHN0YXJ0KTsKLQkJCWRhdGFbZHdvcmRzKytdID0gY3B1X3RvX2xlMzIoIFIxMjhfQ0NFX1BBQ0tFVDIgKTsKKwkJCSAgICAoKGNoYXIgKilkZXYtPmFncF9idWZmZXJfbWFwLT5oYW5kbGUKKwkJCSAgICAgKyBidWYtPm9mZnNldCArIHN0YXJ0KTsKKwkJCWRhdGFbZHdvcmRzKytdID0gY3B1X3RvX2xlMzIoUjEyOF9DQ0VfUEFDS0VUMik7CiAJCX0KIAogCQlidWZfcHJpdi0+ZGlzcGF0Y2hlZCA9IDE7CiAKIAkJLyogRmlyZSBvZmYgdGhlIGluZGlyZWN0IGJ1ZmZlciAqLwotCQlCRUdJTl9SSU5HKCAzICk7CisJCUJFR0lOX1JJTkcoMyk7CiAKLQkJT1VUX1JJTkcoIENDRV9QQUNLRVQwKCBSMTI4X1BNNF9JV19JTkRPRkYsIDEgKSApOwotCQlPVVRfUklORyggb2Zmc2V0ICk7Ci0JCU9VVF9SSU5HKCBkd29yZHMgKTsKKwkJT1VUX1JJTkcoQ0NFX1BBQ0tFVDAoUjEyOF9QTTRfSVdfSU5ET0ZGLCAxKSk7CisJCU9VVF9SSU5HKG9mZnNldCk7CisJCU9VVF9SSU5HKGR3b3Jkcyk7CiAKIAkJQURWQU5DRV9SSU5HKCk7CiAJfQogCi0JaWYgKCBidWZfcHJpdi0+ZGlzY2FyZCApIHsKKwlpZiAoYnVmX3ByaXYtPmRpc2NhcmQpIHsKIAkJYnVmX3ByaXYtPmFnZSA9IGRldl9wcml2LT5zYXJlYV9wcml2LT5sYXN0X2Rpc3BhdGNoOwogCiAJCS8qIEVtaXQgdGhlIGluZGlyZWN0IGJ1ZmZlciBhZ2UgKi8KLQkJQkVHSU5fUklORyggMiApOworCQlCRUdJTl9SSU5HKDIpOwogCi0JCU9VVF9SSU5HKCBDQ0VfUEFDS0VUMCggUjEyOF9MQVNUX0RJU1BBVENIX1JFRywgMCApICk7Ci0JCU9VVF9SSU5HKCBidWZfcHJpdi0+YWdlICk7CisJCU9VVF9SSU5HKENDRV9QQUNLRVQwKFIxMjhfTEFTVF9ESVNQQVRDSF9SRUcsIDApKTsKKwkJT1VUX1JJTkcoYnVmX3ByaXYtPmFnZSk7CiAKIAkJQURWQU5DRV9SSU5HKCk7CiAKQEAgLTcwMywxMCArNjkxLDkgQEAKIAlkZXZfcHJpdi0+c2FyZWFfcHJpdi0+bGFzdF9kaXNwYXRjaCsrOwogfQogCi1zdGF0aWMgdm9pZCByMTI4X2NjZV9kaXNwYXRjaF9pbmRpY2VzKCBkcm1fZGV2aWNlX3QgKmRldiwKLQkJCQkgICAgICAgZHJtX2J1Zl90ICpidWYsCi0JCQkJICAgICAgIGludCBzdGFydCwgaW50IGVuZCwKLQkJCQkgICAgICAgaW50IGNvdW50ICkKK3N0YXRpYyB2b2lkIHIxMjhfY2NlX2Rpc3BhdGNoX2luZGljZXMoZHJtX2RldmljZV90ICogZGV2LAorCQkJCSAgICAgIGRybV9idWZfdCAqIGJ1ZiwKKwkJCQkgICAgICBpbnQgc3RhcnQsIGludCBlbmQsIGludCBjb3VudCkKIHsKIAlkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlkcm1fcjEyOF9idWZfcHJpdl90ICpidWZfcHJpdiA9IGJ1Zi0+ZGV2X3ByaXZhdGU7CkBAIC03MTgsNjIgKzcwNSw2MiBAQAogCWludCBkd29yZHM7CiAJaW50IGkgPSAwOwogCVJJTkdfTE9DQUxTOwotCURSTV9ERUJVRyggImluZGljZXM6IHM9JWQgZT0lZCBjPSVkXG4iLCBzdGFydCwgZW5kLCBjb3VudCApOworCURSTV9ERUJVRygiaW5kaWNlczogcz0lZCBlPSVkIGM9JWRcbiIsIHN0YXJ0LCBlbmQsIGNvdW50KTsKIAotCWlmICggMCApCi0JCXIxMjhfcHJpbnRfZGlydHkoICJkaXNwYXRjaF9pbmRpY2VzIiwgc2FyZWFfcHJpdi0+ZGlydHkgKTsKKwlpZiAoMCkKKwkJcjEyOF9wcmludF9kaXJ0eSgiZGlzcGF0Y2hfaW5kaWNlcyIsIHNhcmVhX3ByaXYtPmRpcnR5KTsKIAotCWlmICggc3RhcnQgIT0gZW5kICkgeworCWlmIChzdGFydCAhPSBlbmQpIHsKIAkJYnVmX3ByaXYtPmRpc3BhdGNoZWQgPSAxOwogCi0JCWlmICggc2FyZWFfcHJpdi0+ZGlydHkgJiB+UjEyOF9VUExPQURfQ0xJUFJFQ1RTICkgewotCQkJcjEyOF9lbWl0X3N0YXRlKCBkZXZfcHJpdiApOworCQlpZiAoc2FyZWFfcHJpdi0+ZGlydHkgJiB+UjEyOF9VUExPQURfQ0xJUFJFQ1RTKSB7CisJCQlyMTI4X2VtaXRfc3RhdGUoZGV2X3ByaXYpOwogCQl9CiAKIAkJZHdvcmRzID0gKGVuZCAtIHN0YXJ0ICsgMykgLyBzaXplb2YodTMyKTsKIAotCQlkYXRhID0gKHUzMiAqKSgoY2hhciAqKWRldi0+YWdwX2J1ZmZlcl9tYXAtPmhhbmRsZQotCQkJICAgICAgICsgYnVmLT5vZmZzZXQgKyBzdGFydCk7CisJCWRhdGEgPSAodTMyICopICgoY2hhciAqKWRldi0+YWdwX2J1ZmZlcl9tYXAtPmhhbmRsZQorCQkJCSsgYnVmLT5vZmZzZXQgKyBzdGFydCk7CiAKLQkJZGF0YVswXSA9IGNwdV90b19sZTMyKCBDQ0VfUEFDS0VUMyggUjEyOF8zRF9STkRSX0dFTl9JTkRYX1BSSU0sCi0JCQkJCQkgICAgZHdvcmRzLTIgKSApOworCQlkYXRhWzBdID0gY3B1X3RvX2xlMzIoQ0NFX1BBQ0tFVDMoUjEyOF8zRF9STkRSX0dFTl9JTkRYX1BSSU0sCisJCQkJCQkgIGR3b3JkcyAtIDIpKTsKIAotCQlkYXRhWzFdID0gY3B1X3RvX2xlMzIoIG9mZnNldCApOwotCQlkYXRhWzJdID0gY3B1X3RvX2xlMzIoIFIxMjhfTUFYX1ZCX1ZFUlRTICk7Ci0JCWRhdGFbM10gPSBjcHVfdG9fbGUzMiggZm9ybWF0ICk7Ci0JCWRhdGFbNF0gPSBjcHVfdG9fbGUzMiggKHByaW0gfCBSMTI4X0NDRV9WQ19DTlRMX1BSSU1fV0FMS19JTkQgfAotCQkJCQkoY291bnQgPDwgMTYpKSApOworCQlkYXRhWzFdID0gY3B1X3RvX2xlMzIob2Zmc2V0KTsKKwkJZGF0YVsyXSA9IGNwdV90b19sZTMyKFIxMjhfTUFYX1ZCX1ZFUlRTKTsKKwkJZGF0YVszXSA9IGNwdV90b19sZTMyKGZvcm1hdCk7CisJCWRhdGFbNF0gPSBjcHVfdG9fbGUzMigocHJpbSB8IFIxMjhfQ0NFX1ZDX0NOVExfUFJJTV9XQUxLX0lORCB8CisJCQkJICAgICAgIChjb3VudCA8PCAxNikpKTsKIAotCQlpZiAoIGNvdW50ICYgMHgxICkgeworCQlpZiAoY291bnQgJiAweDEpIHsKICNpZmRlZiBfX0xJVFRMRV9FTkRJQU4KLQkJCWRhdGFbZHdvcmRzLTFdICY9IDB4MDAwMGZmZmY7CisJCQlkYXRhW2R3b3JkcyAtIDFdICY9IDB4MDAwMGZmZmY7CiAjZWxzZQotCQkJZGF0YVtkd29yZHMtMV0gJj0gMHhmZmZmMDAwMDsKKwkJCWRhdGFbZHdvcmRzIC0gMV0gJj0gMHhmZmZmMDAwMDsKICNlbmRpZgogCQl9CiAKIAkJZG8gewogCQkJLyogRW1pdCB0aGUgbmV4dCBzZXQgb2YgdXAgdG8gdGhyZWUgY2xpcHJlY3RzICovCi0JCQlpZiAoIGkgPCBzYXJlYV9wcml2LT5uYm94ICkgewotCQkJCXIxMjhfZW1pdF9jbGlwX3JlY3RzKCBkZXZfcHJpdiwKLQkJCQkJCSAgICAgICZzYXJlYV9wcml2LT5ib3hlc1tpXSwKLQkJCQkJCSAgICAgIHNhcmVhX3ByaXYtPm5ib3ggLSBpICk7CisJCQlpZiAoaSA8IHNhcmVhX3ByaXYtPm5ib3gpIHsKKwkJCQlyMTI4X2VtaXRfY2xpcF9yZWN0cyhkZXZfcHJpdiwKKwkJCQkJCSAgICAgJnNhcmVhX3ByaXYtPmJveGVzW2ldLAorCQkJCQkJICAgICBzYXJlYV9wcml2LT5uYm94IC0gaSk7CiAJCQl9CiAKLQkJCXIxMjhfY2NlX2Rpc3BhdGNoX2luZGlyZWN0KCBkZXYsIGJ1Ziwgc3RhcnQsIGVuZCApOworCQkJcjEyOF9jY2VfZGlzcGF0Y2hfaW5kaXJlY3QoZGV2LCBidWYsIHN0YXJ0LCBlbmQpOwogCiAJCQlpICs9IDM7Ci0JCX0gd2hpbGUgKCBpIDwgc2FyZWFfcHJpdi0+bmJveCApOworCQl9IHdoaWxlIChpIDwgc2FyZWFfcHJpdi0+bmJveCk7CiAJfQogCi0JaWYgKCBidWZfcHJpdi0+ZGlzY2FyZCApIHsKKwlpZiAoYnVmX3ByaXYtPmRpc2NhcmQpIHsKIAkJYnVmX3ByaXYtPmFnZSA9IGRldl9wcml2LT5zYXJlYV9wcml2LT5sYXN0X2Rpc3BhdGNoOwogCiAJCS8qIEVtaXQgdGhlIHZlcnRleCBidWZmZXIgYWdlICovCi0JCUJFR0lOX1JJTkcoIDIgKTsKKwkJQkVHSU5fUklORygyKTsKIAotCQlPVVRfUklORyggQ0NFX1BBQ0tFVDAoIFIxMjhfTEFTVF9ESVNQQVRDSF9SRUcsIDAgKSApOwotCQlPVVRfUklORyggYnVmX3ByaXYtPmFnZSApOworCQlPVVRfUklORyhDQ0VfUEFDS0VUMChSMTI4X0xBU1RfRElTUEFUQ0hfUkVHLCAwKSk7CisJCU9VVF9SSU5HKGJ1Zl9wcml2LT5hZ2UpOwogCiAJCUFEVkFOQ0VfUklORygpOwogCkBAIC03ODgsOSArNzc1LDggQEAKIAlzYXJlYV9wcml2LT5uYm94ID0gMDsKIH0KIAotc3RhdGljIGludCByMTI4X2NjZV9kaXNwYXRjaF9ibGl0KCBEUk1GSUxFIGZpbHAsCi0JCQkJICAgZHJtX2RldmljZV90ICpkZXYsCi0JCQkJICAgZHJtX3IxMjhfYmxpdF90ICpibGl0ICkKK3N0YXRpYyBpbnQgcjEyOF9jY2VfZGlzcGF0Y2hfYmxpdChEUk1GSUxFIGZpbHAsCisJCQkJICBkcm1fZGV2aWNlX3QgKiBkZXYsIGRybV9yMTI4X2JsaXRfdCAqIGJsaXQpCiB7CiAJZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJZHJtX2RldmljZV9kbWFfdCAqZG1hID0gZGV2LT5kbWE7CkBAIC03OTksMTMgKzc4NSwxMyBAQAogCXUzMiAqZGF0YTsKIAlpbnQgZHdvcmRfc2hpZnQsIGR3b3JkczsKIAlSSU5HX0xPQ0FMUzsKLQlEUk1fREVCVUcoICJcbiIgKTsKKwlEUk1fREVCVUcoIlxuIik7CiAKIAkvKiBUaGUgY29tcGlsZXIgd29uJ3Qgb3B0aW1pemUgYXdheSBhIGRpdmlzaW9uIGJ5IGEgdmFyaWFibGUsCiAJICogZXZlbiBpZiB0aGUgb25seSBsZWdhbCB2YWx1ZXMgYXJlIHBvd2VycyBvZiB0d28uICBUaHVzLCB3ZSdsbAogCSAqIHVzZSBhIHNoaWZ0IGluc3RlYWQuCiAJICovCi0Jc3dpdGNoICggYmxpdC0+Zm9ybWF0ICkgeworCXN3aXRjaCAoYmxpdC0+Zm9ybWF0KSB7CiAJY2FzZSBSMTI4X0RBVEFUWVBFX0FSR0I4ODg4OgogCQlkd29yZF9zaGlmdCA9IDA7CiAJCWJyZWFrOwpAQCAtODIxLDcgKzgwNyw3IEBACiAJCWR3b3JkX3NoaWZ0ID0gMjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJRFJNX0VSUk9SKCAiaW52YWxpZCBibGl0IGZvcm1hdCAlZFxuIiwgYmxpdC0+Zm9ybWF0ICk7CisJCURSTV9FUlJPUigiaW52YWxpZCBibGl0IGZvcm1hdCAlZFxuIiwgYmxpdC0+Zm9ybWF0KTsKIAkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAl9CiAKQEAgLTgzMCwxMCArODE2LDEwIEBACiAJICogZGF0YSBmcm9tIHRoZSBob3N0IGRhdGEgYmxpdCwgb3RoZXJ3aXNlIHBhcnQgb2YgdGhlIHRleHR1cmUKIAkgKiBpbWFnZSBtYXkgYmUgY29ycnVwdGVkLgogCSAqLwotCUJFR0lOX1JJTkcoIDIgKTsKKwlCRUdJTl9SSU5HKDIpOwogCi0JT1VUX1JJTkcoIENDRV9QQUNLRVQwKCBSMTI4X1BDX0dVSV9DVExTVEFULCAwICkgKTsKLQlPVVRfUklORyggUjEyOF9QQ19SSV9HVUkgfCBSMTI4X1BDX0ZMVVNIX0dVSSApOworCU9VVF9SSU5HKENDRV9QQUNLRVQwKFIxMjhfUENfR1VJX0NUTFNUQVQsIDApKTsKKwlPVVRfUklORyhSMTI4X1BDX1JJX0dVSSB8IFIxMjhfUENfRkxVU0hfR1VJKTsKIAogCUFEVkFOQ0VfUklORygpOwogCkBAIC04NDIsMTMgKzgyOCwxMyBAQAogCWJ1ZiA9IGRtYS0+YnVmbGlzdFtibGl0LT5pZHhdOwogCWJ1Zl9wcml2ID0gYnVmLT5kZXZfcHJpdmF0ZTsKIAotCWlmICggYnVmLT5maWxwICE9IGZpbHAgKSB7Ci0JCURSTV9FUlJPUiggInByb2Nlc3MgJWQgdXNpbmcgYnVmZmVyIG93bmVkIGJ5ICVwXG4iLAotCQkJICAgRFJNX0NVUlJFTlRQSUQsIGJ1Zi0+ZmlscCApOworCWlmIChidWYtPmZpbHAgIT0gZmlscCkgeworCQlEUk1fRVJST1IoInByb2Nlc3MgJWQgdXNpbmcgYnVmZmVyIG93bmVkIGJ5ICVwXG4iLAorCQkJICBEUk1fQ1VSUkVOVFBJRCwgYnVmLT5maWxwKTsKIAkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAl9Ci0JaWYgKCBidWYtPnBlbmRpbmcgKSB7Ci0JCURSTV9FUlJPUiggInNlbmRpbmcgcGVuZGluZyBidWZmZXIgJWRcbiIsIGJsaXQtPmlkeCApOworCWlmIChidWYtPnBlbmRpbmcpIHsKKwkJRFJNX0VSUk9SKCJzZW5kaW5nIHBlbmRpbmcgYnVmZmVyICVkXG4iLCBibGl0LT5pZHgpOwogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCX0KIApAQCAtODU2LDQ1ICs4NDIsNDMgQEAKIAogCWR3b3JkcyA9IChibGl0LT53aWR0aCAqIGJsaXQtPmhlaWdodCkgPj4gZHdvcmRfc2hpZnQ7CiAKLQlkYXRhID0gKHUzMiAqKSgoY2hhciAqKWRldi0+YWdwX2J1ZmZlcl9tYXAtPmhhbmRsZSArIGJ1Zi0+b2Zmc2V0KTsKKwlkYXRhID0gKHUzMiAqKSAoKGNoYXIgKilkZXYtPmFncF9idWZmZXJfbWFwLT5oYW5kbGUgKyBidWYtPm9mZnNldCk7CiAKLQlkYXRhWzBdID0gY3B1X3RvX2xlMzIoIENDRV9QQUNLRVQzKCBSMTI4X0NOVExfSE9TVERBVEFfQkxULCBkd29yZHMgKyA2ICkgKTsKLQlkYXRhWzFdID0gY3B1X3RvX2xlMzIoIChSMTI4X0dNQ19EU1RfUElUQ0hfT0ZGU0VUX0NOVEwgfAotCQkJCVIxMjhfR01DX0JSVVNIX05PTkUgfAotCQkJCShibGl0LT5mb3JtYXQgPDwgOCkgfAotCQkJCVIxMjhfR01DX1NSQ19EQVRBVFlQRV9DT0xPUiB8Ci0JCQkJUjEyOF9ST1AzX1MgfAotCQkJCVIxMjhfRFBfU1JDX1NPVVJDRV9IT1NUX0RBVEEgfAotCQkJCVIxMjhfR01DX0NMUl9DTVBfQ05UTF9ESVMgfAotCQkJCVIxMjhfR01DX0FVWF9DTElQX0RJUyB8Ci0JCQkJUjEyOF9HTUNfV1JfTVNLX0RJUykgKTsKKwlkYXRhWzBdID0gY3B1X3RvX2xlMzIoQ0NFX1BBQ0tFVDMoUjEyOF9DTlRMX0hPU1REQVRBX0JMVCwgZHdvcmRzICsgNikpOworCWRhdGFbMV0gPSBjcHVfdG9fbGUzMigoUjEyOF9HTUNfRFNUX1BJVENIX09GRlNFVF9DTlRMIHwKKwkJCSAgICAgICBSMTI4X0dNQ19CUlVTSF9OT05FIHwKKwkJCSAgICAgICAoYmxpdC0+Zm9ybWF0IDw8IDgpIHwKKwkJCSAgICAgICBSMTI4X0dNQ19TUkNfREFUQVRZUEVfQ09MT1IgfAorCQkJICAgICAgIFIxMjhfUk9QM19TIHwKKwkJCSAgICAgICBSMTI4X0RQX1NSQ19TT1VSQ0VfSE9TVF9EQVRBIHwKKwkJCSAgICAgICBSMTI4X0dNQ19DTFJfQ01QX0NOVExfRElTIHwKKwkJCSAgICAgICBSMTI4X0dNQ19BVVhfQ0xJUF9ESVMgfCBSMTI4X0dNQ19XUl9NU0tfRElTKSk7CiAKLQlkYXRhWzJdID0gY3B1X3RvX2xlMzIoIChibGl0LT5waXRjaCA8PCAyMSkgfCAoYmxpdC0+b2Zmc2V0ID4+IDUpICk7Ci0JZGF0YVszXSA9IGNwdV90b19sZTMyKCAweGZmZmZmZmZmICk7Ci0JZGF0YVs0XSA9IGNwdV90b19sZTMyKCAweGZmZmZmZmZmICk7Ci0JZGF0YVs1XSA9IGNwdV90b19sZTMyKCAoYmxpdC0+eSA8PCAxNikgfCBibGl0LT54ICk7Ci0JZGF0YVs2XSA9IGNwdV90b19sZTMyKCAoYmxpdC0+aGVpZ2h0IDw8IDE2KSB8IGJsaXQtPndpZHRoICk7Ci0JZGF0YVs3XSA9IGNwdV90b19sZTMyKCBkd29yZHMgKTsKKwlkYXRhWzJdID0gY3B1X3RvX2xlMzIoKGJsaXQtPnBpdGNoIDw8IDIxKSB8IChibGl0LT5vZmZzZXQgPj4gNSkpOworCWRhdGFbM10gPSBjcHVfdG9fbGUzMigweGZmZmZmZmZmKTsKKwlkYXRhWzRdID0gY3B1X3RvX2xlMzIoMHhmZmZmZmZmZik7CisJZGF0YVs1XSA9IGNwdV90b19sZTMyKChibGl0LT55IDw8IDE2KSB8IGJsaXQtPngpOworCWRhdGFbNl0gPSBjcHVfdG9fbGUzMigoYmxpdC0+aGVpZ2h0IDw8IDE2KSB8IGJsaXQtPndpZHRoKTsKKwlkYXRhWzddID0gY3B1X3RvX2xlMzIoZHdvcmRzKTsKIAogCWJ1Zi0+dXNlZCA9IChkd29yZHMgKyA4KSAqIHNpemVvZih1MzIpOwogCi0JcjEyOF9jY2VfZGlzcGF0Y2hfaW5kaXJlY3QoIGRldiwgYnVmLCAwLCBidWYtPnVzZWQgKTsKKwlyMTI4X2NjZV9kaXNwYXRjaF9pbmRpcmVjdChkZXYsIGJ1ZiwgMCwgYnVmLT51c2VkKTsKIAogCS8qIEZsdXNoIHRoZSBwaXhlbCBjYWNoZSBhZnRlciB0aGUgYmxpdCBjb21wbGV0ZXMuICBUaGlzIGVuc3VyZXMKIAkgKiB0aGUgdGV4dHVyZSBkYXRhIGlzIHdyaXR0ZW4gb3V0IHRvIG1lbW9yeSBiZWZvcmUgcmVuZGVyaW5nCiAJICogY29udGludWVzLgogCSAqLwotCUJFR0lOX1JJTkcoIDIgKTsKKwlCRUdJTl9SSU5HKDIpOwogCi0JT1VUX1JJTkcoIENDRV9QQUNLRVQwKCBSMTI4X1BDX0dVSV9DVExTVEFULCAwICkgKTsKLQlPVVRfUklORyggUjEyOF9QQ19GTFVTSF9HVUkgKTsKKwlPVVRfUklORyhDQ0VfUEFDS0VUMChSMTI4X1BDX0dVSV9DVExTVEFULCAwKSk7CisJT1VUX1JJTkcoUjEyOF9QQ19GTFVTSF9HVUkpOwogCiAJQURWQU5DRV9SSU5HKCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiBUaWxlZCBkZXB0aCBidWZmZXIgbWFuYWdlbWVudAogICoKQEAgLTkwMiw4ICs4ODYsOCBAQAogICogaGF2ZSBoYXJkd2FyZSBzdGVuY2lsIHN1cHBvcnQuCiAgKi8KIAotc3RhdGljIGludCByMTI4X2NjZV9kaXNwYXRjaF93cml0ZV9zcGFuKCBkcm1fZGV2aWNlX3QgKmRldiwKLQkJCQkJIGRybV9yMTI4X2RlcHRoX3QgKmRlcHRoICkKK3N0YXRpYyBpbnQgcjEyOF9jY2VfZGlzcGF0Y2hfd3JpdGVfc3Bhbihkcm1fZGV2aWNlX3QgKiBkZXYsCisJCQkJCWRybV9yMTI4X2RlcHRoX3QgKiBkZXB0aCkKIHsKIAlkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlpbnQgY291bnQsIHgsIHk7CkBAIC05MTEsOTUgKzg5NSw5NSBAQAogCXU4ICptYXNrOwogCWludCBpLCBidWZmZXJfc2l6ZSwgbWFza19zaXplOwogCVJJTkdfTE9DQUxTOwotCURSTV9ERUJVRyggIlxuIiApOworCURSTV9ERUJVRygiXG4iKTsKIAogCWNvdW50ID0gZGVwdGgtPm47CiAJaWYgKGNvdW50ID4gNDA5NiB8fCBjb3VudCA8PSAwKQogCQlyZXR1cm4gRFJNX0VSUihFTVNHU0laRSk7CiAKLQlpZiAoIERSTV9DT1BZX0ZST01fVVNFUiggJngsIGRlcHRoLT54LCBzaXplb2YoeCkgKSApIHsKKwlpZiAoRFJNX0NPUFlfRlJPTV9VU0VSKCZ4LCBkZXB0aC0+eCwgc2l6ZW9mKHgpKSkgewogCQlyZXR1cm4gRFJNX0VSUihFRkFVTFQpOwogCX0KLQlpZiAoIERSTV9DT1BZX0ZST01fVVNFUiggJnksIGRlcHRoLT55LCBzaXplb2YoeSkgKSApIHsKKwlpZiAoRFJNX0NPUFlfRlJPTV9VU0VSKCZ5LCBkZXB0aC0+eSwgc2l6ZW9mKHkpKSkgewogCQlyZXR1cm4gRFJNX0VSUihFRkFVTFQpOwogCX0KIAogCWJ1ZmZlcl9zaXplID0gZGVwdGgtPm4gKiBzaXplb2YodTMyKTsKLQlidWZmZXIgPSBkcm1fYWxsb2MoIGJ1ZmZlcl9zaXplLCBEUk1fTUVNX0JVRlMgKTsKLQlpZiAoIGJ1ZmZlciA9PSBOVUxMICkKKwlidWZmZXIgPSBkcm1fYWxsb2MoYnVmZmVyX3NpemUsIERSTV9NRU1fQlVGUyk7CisJaWYgKGJ1ZmZlciA9PSBOVUxMKQogCQlyZXR1cm4gRFJNX0VSUihFTk9NRU0pOwotCWlmICggRFJNX0NPUFlfRlJPTV9VU0VSKCBidWZmZXIsIGRlcHRoLT5idWZmZXIsIGJ1ZmZlcl9zaXplICkgKSB7Ci0JCWRybV9mcmVlKCBidWZmZXIsIGJ1ZmZlcl9zaXplLCBEUk1fTUVNX0JVRlMpOworCWlmIChEUk1fQ09QWV9GUk9NX1VTRVIoYnVmZmVyLCBkZXB0aC0+YnVmZmVyLCBidWZmZXJfc2l6ZSkpIHsKKwkJZHJtX2ZyZWUoYnVmZmVyLCBidWZmZXJfc2l6ZSwgRFJNX01FTV9CVUZTKTsKIAkJcmV0dXJuIERSTV9FUlIoRUZBVUxUKTsKIAl9CiAKIAltYXNrX3NpemUgPSBkZXB0aC0+biAqIHNpemVvZih1OCk7Ci0JaWYgKCBkZXB0aC0+bWFzayApIHsKLQkJbWFzayA9IGRybV9hbGxvYyggbWFza19zaXplLCBEUk1fTUVNX0JVRlMgKTsKLQkJaWYgKCBtYXNrID09IE5VTEwgKSB7Ci0JCQlkcm1fZnJlZSggYnVmZmVyLCBidWZmZXJfc2l6ZSwgRFJNX01FTV9CVUZTICk7CisJaWYgKGRlcHRoLT5tYXNrKSB7CisJCW1hc2sgPSBkcm1fYWxsb2MobWFza19zaXplLCBEUk1fTUVNX0JVRlMpOworCQlpZiAobWFzayA9PSBOVUxMKSB7CisJCQlkcm1fZnJlZShidWZmZXIsIGJ1ZmZlcl9zaXplLCBEUk1fTUVNX0JVRlMpOwogCQkJcmV0dXJuIERSTV9FUlIoRU5PTUVNKTsKIAkJfQotCQlpZiAoIERSTV9DT1BZX0ZST01fVVNFUiggbWFzaywgZGVwdGgtPm1hc2ssIG1hc2tfc2l6ZSApICkgewotCQkJZHJtX2ZyZWUoIGJ1ZmZlciwgYnVmZmVyX3NpemUsIERSTV9NRU1fQlVGUyApOwotCQkJZHJtX2ZyZWUoIG1hc2ssIG1hc2tfc2l6ZSwgRFJNX01FTV9CVUZTICk7CisJCWlmIChEUk1fQ09QWV9GUk9NX1VTRVIobWFzaywgZGVwdGgtPm1hc2ssIG1hc2tfc2l6ZSkpIHsKKwkJCWRybV9mcmVlKGJ1ZmZlciwgYnVmZmVyX3NpemUsIERSTV9NRU1fQlVGUyk7CisJCQlkcm1fZnJlZShtYXNrLCBtYXNrX3NpemUsIERSTV9NRU1fQlVGUyk7CiAJCQlyZXR1cm4gRFJNX0VSUihFRkFVTFQpOwogCQl9CiAKLQkJZm9yICggaSA9IDAgOyBpIDwgY291bnQgOyBpKyssIHgrKyApIHsKLQkJCWlmICggbWFza1tpXSApIHsKLQkJCQlCRUdJTl9SSU5HKCA2ICk7CisJCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrLCB4KyspIHsKKwkJCWlmIChtYXNrW2ldKSB7CisJCQkJQkVHSU5fUklORyg2KTsKIAotCQkJCU9VVF9SSU5HKCBDQ0VfUEFDS0VUMyggUjEyOF9DTlRMX1BBSU5UX01VTFRJLCA0ICkgKTsKLQkJCQlPVVRfUklORyggUjEyOF9HTUNfRFNUX1BJVENIX09GRlNFVF9DTlRMIHwKLQkJCQkJICBSMTI4X0dNQ19CUlVTSF9TT0xJRF9DT0xPUiB8Ci0JCQkJCSAgKGRldl9wcml2LT5kZXB0aF9mbXQgPDwgOCkgfAotCQkJCQkgIFIxMjhfR01DX1NSQ19EQVRBVFlQRV9DT0xPUiB8Ci0JCQkJCSAgUjEyOF9ST1AzX1AgfAotCQkJCQkgIFIxMjhfR01DX0NMUl9DTVBfQ05UTF9ESVMgfAotCQkJCQkgIFIxMjhfR01DX1dSX01TS19ESVMgKTsKKwkJCQlPVVRfUklORyhDQ0VfUEFDS0VUMyhSMTI4X0NOVExfUEFJTlRfTVVMVEksIDQpKTsKKwkJCQlPVVRfUklORyhSMTI4X0dNQ19EU1RfUElUQ0hfT0ZGU0VUX0NOVEwgfAorCQkJCQkgUjEyOF9HTUNfQlJVU0hfU09MSURfQ09MT1IgfAorCQkJCQkgKGRldl9wcml2LT5kZXB0aF9mbXQgPDwgOCkgfAorCQkJCQkgUjEyOF9HTUNfU1JDX0RBVEFUWVBFX0NPTE9SIHwKKwkJCQkJIFIxMjhfUk9QM19QIHwKKwkJCQkJIFIxMjhfR01DX0NMUl9DTVBfQ05UTF9ESVMgfAorCQkJCQkgUjEyOF9HTUNfV1JfTVNLX0RJUyk7CiAKLQkJCQlPVVRfUklORyggZGV2X3ByaXYtPmRlcHRoX3BpdGNoX29mZnNldF9jICk7Ci0JCQkJT1VUX1JJTkcoIGJ1ZmZlcltpXSApOworCQkJCU9VVF9SSU5HKGRldl9wcml2LT5kZXB0aF9waXRjaF9vZmZzZXRfYyk7CisJCQkJT1VUX1JJTkcoYnVmZmVyW2ldKTsKIAotCQkJCU9VVF9SSU5HKCAoeCA8PCAxNikgfCB5ICk7Ci0JCQkJT1VUX1JJTkcoICgxIDw8IDE2KSB8IDEgKTsKKwkJCQlPVVRfUklORygoeCA8PCAxNikgfCB5KTsKKwkJCQlPVVRfUklORygoMSA8PCAxNikgfCAxKTsKIAogCQkJCUFEVkFOQ0VfUklORygpOwogCQkJfQogCQl9CiAKLQkJZHJtX2ZyZWUoIG1hc2ssIG1hc2tfc2l6ZSwgRFJNX01FTV9CVUZTICk7CisJCWRybV9mcmVlKG1hc2ssIG1hc2tfc2l6ZSwgRFJNX01FTV9CVUZTKTsKIAl9IGVsc2UgewotCQlmb3IgKCBpID0gMCA7IGkgPCBjb3VudCA7IGkrKywgeCsrICkgewotCQkJQkVHSU5fUklORyggNiApOworCQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKywgeCsrKSB7CisJCQlCRUdJTl9SSU5HKDYpOwogCi0JCQlPVVRfUklORyggQ0NFX1BBQ0tFVDMoIFIxMjhfQ05UTF9QQUlOVF9NVUxUSSwgNCApICk7Ci0JCQlPVVRfUklORyggUjEyOF9HTUNfRFNUX1BJVENIX09GRlNFVF9DTlRMIHwKLQkJCQkgIFIxMjhfR01DX0JSVVNIX1NPTElEX0NPTE9SIHwKLQkJCQkgIChkZXZfcHJpdi0+ZGVwdGhfZm10IDw8IDgpIHwKLQkJCQkgIFIxMjhfR01DX1NSQ19EQVRBVFlQRV9DT0xPUiB8Ci0JCQkJICBSMTI4X1JPUDNfUCB8Ci0JCQkJICBSMTI4X0dNQ19DTFJfQ01QX0NOVExfRElTIHwKLQkJCQkgIFIxMjhfR01DX1dSX01TS19ESVMgKTsKKwkJCU9VVF9SSU5HKENDRV9QQUNLRVQzKFIxMjhfQ05UTF9QQUlOVF9NVUxUSSwgNCkpOworCQkJT1VUX1JJTkcoUjEyOF9HTUNfRFNUX1BJVENIX09GRlNFVF9DTlRMIHwKKwkJCQkgUjEyOF9HTUNfQlJVU0hfU09MSURfQ09MT1IgfAorCQkJCSAoZGV2X3ByaXYtPmRlcHRoX2ZtdCA8PCA4KSB8CisJCQkJIFIxMjhfR01DX1NSQ19EQVRBVFlQRV9DT0xPUiB8CisJCQkJIFIxMjhfUk9QM19QIHwKKwkJCQkgUjEyOF9HTUNfQ0xSX0NNUF9DTlRMX0RJUyB8CisJCQkJIFIxMjhfR01DX1dSX01TS19ESVMpOwogCi0JCQlPVVRfUklORyggZGV2X3ByaXYtPmRlcHRoX3BpdGNoX29mZnNldF9jICk7Ci0JCQlPVVRfUklORyggYnVmZmVyW2ldICk7CisJCQlPVVRfUklORyhkZXZfcHJpdi0+ZGVwdGhfcGl0Y2hfb2Zmc2V0X2MpOworCQkJT1VUX1JJTkcoYnVmZmVyW2ldKTsKIAotCQkJT1VUX1JJTkcoICh4IDw8IDE2KSB8IHkgKTsKLQkJCU9VVF9SSU5HKCAoMSA8PCAxNikgfCAxICk7CisJCQlPVVRfUklORygoeCA8PCAxNikgfCB5KTsKKwkJCU9VVF9SSU5HKCgxIDw8IDE2KSB8IDEpOwogCiAJCQlBRFZBTkNFX1JJTkcoKTsKIAkJfQogCX0KIAotCWRybV9mcmVlKCBidWZmZXIsIGJ1ZmZlcl9zaXplLCBEUk1fTUVNX0JVRlMgKTsKKwlkcm1fZnJlZShidWZmZXIsIGJ1ZmZlcl9zaXplLCBEUk1fTUVNX0JVRlMpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcjEyOF9jY2VfZGlzcGF0Y2hfd3JpdGVfcGl4ZWxzKCBkcm1fZGV2aWNlX3QgKmRldiwKLQkJCQkJICAgZHJtX3IxMjhfZGVwdGhfdCAqZGVwdGggKQorc3RhdGljIGludCByMTI4X2NjZV9kaXNwYXRjaF93cml0ZV9waXhlbHMoZHJtX2RldmljZV90ICogZGV2LAorCQkJCQkgIGRybV9yMTI4X2RlcHRoX3QgKiBkZXB0aCkKIHsKIAlkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlpbnQgY291bnQsICp4LCAqeTsKQEAgLTEwMDcsNyArOTkxLDcgQEAKIAl1OCAqbWFzazsKIAlpbnQgaSwgeGJ1Zl9zaXplLCB5YnVmX3NpemUsIGJ1ZmZlcl9zaXplLCBtYXNrX3NpemU7CiAJUklOR19MT0NBTFM7Ci0JRFJNX0RFQlVHKCAiXG4iICk7CisJRFJNX0RFQlVHKCJcbiIpOwogCiAJY291bnQgPSBkZXB0aC0+bjsKIAlpZiAoY291bnQgPiA0MDk2IHx8IGNvdW50IDw9IDApCkBAIC0xMDE1LDI3MCArOTk5LDI2NiBAQAogCiAJeGJ1Zl9zaXplID0gY291bnQgKiBzaXplb2YoKngpOwogCXlidWZfc2l6ZSA9IGNvdW50ICogc2l6ZW9mKCp5KTsKLQl4ID0gZHJtX2FsbG9jKCB4YnVmX3NpemUsIERSTV9NRU1fQlVGUyApOwotCWlmICggeCA9PSBOVUxMICkgeworCXggPSBkcm1fYWxsb2MoeGJ1Zl9zaXplLCBEUk1fTUVNX0JVRlMpOworCWlmICh4ID09IE5VTEwpIHsKIAkJcmV0dXJuIERSTV9FUlIoRU5PTUVNKTsKIAl9Ci0JeSA9IGRybV9hbGxvYyggeWJ1Zl9zaXplLCBEUk1fTUVNX0JVRlMgKTsKLQlpZiAoIHkgPT0gTlVMTCApIHsKLQkJZHJtX2ZyZWUoIHgsIHhidWZfc2l6ZSwgRFJNX01FTV9CVUZTICk7CisJeSA9IGRybV9hbGxvYyh5YnVmX3NpemUsIERSTV9NRU1fQlVGUyk7CisJaWYgKHkgPT0gTlVMTCkgeworCQlkcm1fZnJlZSh4LCB4YnVmX3NpemUsIERSTV9NRU1fQlVGUyk7CiAJCXJldHVybiBEUk1fRVJSKEVOT01FTSk7CiAJfQotCWlmICggRFJNX0NPUFlfRlJPTV9VU0VSKCB4LCBkZXB0aC0+eCwgeGJ1Zl9zaXplICkgKSB7Ci0JCWRybV9mcmVlKCB4LCB4YnVmX3NpemUsIERSTV9NRU1fQlVGUyApOwotCQlkcm1fZnJlZSggeSwgeWJ1Zl9zaXplLCBEUk1fTUVNX0JVRlMgKTsKKwlpZiAoRFJNX0NPUFlfRlJPTV9VU0VSKHgsIGRlcHRoLT54LCB4YnVmX3NpemUpKSB7CisJCWRybV9mcmVlKHgsIHhidWZfc2l6ZSwgRFJNX01FTV9CVUZTKTsKKwkJZHJtX2ZyZWUoeSwgeWJ1Zl9zaXplLCBEUk1fTUVNX0JVRlMpOwogCQlyZXR1cm4gRFJNX0VSUihFRkFVTFQpOwogCX0KLQlpZiAoIERSTV9DT1BZX0ZST01fVVNFUiggeSwgZGVwdGgtPnksIHhidWZfc2l6ZSApICkgewotCQlkcm1fZnJlZSggeCwgeGJ1Zl9zaXplLCBEUk1fTUVNX0JVRlMgKTsKLQkJZHJtX2ZyZWUoIHksIHlidWZfc2l6ZSwgRFJNX01FTV9CVUZTICk7CisJaWYgKERSTV9DT1BZX0ZST01fVVNFUih5LCBkZXB0aC0+eSwgeGJ1Zl9zaXplKSkgeworCQlkcm1fZnJlZSh4LCB4YnVmX3NpemUsIERSTV9NRU1fQlVGUyk7CisJCWRybV9mcmVlKHksIHlidWZfc2l6ZSwgRFJNX01FTV9CVUZTKTsKIAkJcmV0dXJuIERSTV9FUlIoRUZBVUxUKTsKIAl9CiAKIAlidWZmZXJfc2l6ZSA9IGRlcHRoLT5uICogc2l6ZW9mKHUzMik7Ci0JYnVmZmVyID0gZHJtX2FsbG9jKCBidWZmZXJfc2l6ZSwgRFJNX01FTV9CVUZTICk7Ci0JaWYgKCBidWZmZXIgPT0gTlVMTCApIHsKLQkJZHJtX2ZyZWUoIHgsIHhidWZfc2l6ZSwgRFJNX01FTV9CVUZTICk7Ci0JCWRybV9mcmVlKCB5LCB5YnVmX3NpemUsIERSTV9NRU1fQlVGUyApOworCWJ1ZmZlciA9IGRybV9hbGxvYyhidWZmZXJfc2l6ZSwgRFJNX01FTV9CVUZTKTsKKwlpZiAoYnVmZmVyID09IE5VTEwpIHsKKwkJZHJtX2ZyZWUoeCwgeGJ1Zl9zaXplLCBEUk1fTUVNX0JVRlMpOworCQlkcm1fZnJlZSh5LCB5YnVmX3NpemUsIERSTV9NRU1fQlVGUyk7CiAJCXJldHVybiBEUk1fRVJSKEVOT01FTSk7CiAJfQotCWlmICggRFJNX0NPUFlfRlJPTV9VU0VSKCBidWZmZXIsIGRlcHRoLT5idWZmZXIsIGJ1ZmZlcl9zaXplICkgKSB7Ci0JCWRybV9mcmVlKCB4LCB4YnVmX3NpemUsIERSTV9NRU1fQlVGUyApOwotCQlkcm1fZnJlZSggeSwgeWJ1Zl9zaXplLCBEUk1fTUVNX0JVRlMgKTsKLQkJZHJtX2ZyZWUoIGJ1ZmZlciwgYnVmZmVyX3NpemUsIERSTV9NRU1fQlVGUyApOworCWlmIChEUk1fQ09QWV9GUk9NX1VTRVIoYnVmZmVyLCBkZXB0aC0+YnVmZmVyLCBidWZmZXJfc2l6ZSkpIHsKKwkJZHJtX2ZyZWUoeCwgeGJ1Zl9zaXplLCBEUk1fTUVNX0JVRlMpOworCQlkcm1fZnJlZSh5LCB5YnVmX3NpemUsIERSTV9NRU1fQlVGUyk7CisJCWRybV9mcmVlKGJ1ZmZlciwgYnVmZmVyX3NpemUsIERSTV9NRU1fQlVGUyk7CiAJCXJldHVybiBEUk1fRVJSKEVGQVVMVCk7CiAJfQogCi0JaWYgKCBkZXB0aC0+bWFzayApIHsKKwlpZiAoZGVwdGgtPm1hc2spIHsKIAkJbWFza19zaXplID0gZGVwdGgtPm4gKiBzaXplb2YodTgpOwotCQltYXNrID0gZHJtX2FsbG9jKCBtYXNrX3NpemUsIERSTV9NRU1fQlVGUyApOwotCQlpZiAoIG1hc2sgPT0gTlVMTCApIHsKLQkJCWRybV9mcmVlKCB4LCB4YnVmX3NpemUsIERSTV9NRU1fQlVGUyApOwotCQkJZHJtX2ZyZWUoIHksIHlidWZfc2l6ZSwgRFJNX01FTV9CVUZTICk7Ci0JCQlkcm1fZnJlZSggYnVmZmVyLCBidWZmZXJfc2l6ZSwgRFJNX01FTV9CVUZTICk7CisJCW1hc2sgPSBkcm1fYWxsb2MobWFza19zaXplLCBEUk1fTUVNX0JVRlMpOworCQlpZiAobWFzayA9PSBOVUxMKSB7CisJCQlkcm1fZnJlZSh4LCB4YnVmX3NpemUsIERSTV9NRU1fQlVGUyk7CisJCQlkcm1fZnJlZSh5LCB5YnVmX3NpemUsIERSTV9NRU1fQlVGUyk7CisJCQlkcm1fZnJlZShidWZmZXIsIGJ1ZmZlcl9zaXplLCBEUk1fTUVNX0JVRlMpOwogCQkJcmV0dXJuIERSTV9FUlIoRU5PTUVNKTsKIAkJfQotCQlpZiAoIERSTV9DT1BZX0ZST01fVVNFUiggbWFzaywgZGVwdGgtPm1hc2ssIG1hc2tfc2l6ZSApICkgewotCQkJZHJtX2ZyZWUoIHgsIHhidWZfc2l6ZSwgRFJNX01FTV9CVUZTICApOwotCQkJZHJtX2ZyZWUoIHksIHlidWZfc2l6ZSwgRFJNX01FTV9CVUZTICApOwotCQkJZHJtX2ZyZWUoIGJ1ZmZlciwgYnVmZmVyX3NpemUsIERSTV9NRU1fQlVGUyAgKTsKLQkJCWRybV9mcmVlKCBtYXNrLCBtYXNrX3NpemUsIERSTV9NRU1fQlVGUyAgKTsKKwkJaWYgKERSTV9DT1BZX0ZST01fVVNFUihtYXNrLCBkZXB0aC0+bWFzaywgbWFza19zaXplKSkgeworCQkJZHJtX2ZyZWUoeCwgeGJ1Zl9zaXplLCBEUk1fTUVNX0JVRlMpOworCQkJZHJtX2ZyZWUoeSwgeWJ1Zl9zaXplLCBEUk1fTUVNX0JVRlMpOworCQkJZHJtX2ZyZWUoYnVmZmVyLCBidWZmZXJfc2l6ZSwgRFJNX01FTV9CVUZTKTsKKwkJCWRybV9mcmVlKG1hc2ssIG1hc2tfc2l6ZSwgRFJNX01FTV9CVUZTKTsKIAkJCXJldHVybiBEUk1fRVJSKEVGQVVMVCk7CiAJCX0KIAotCQlmb3IgKCBpID0gMCA7IGkgPCBjb3VudCA7IGkrKyApIHsKLQkJCWlmICggbWFza1tpXSApIHsKLQkJCQlCRUdJTl9SSU5HKCA2ICk7CisJCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCQlpZiAobWFza1tpXSkgeworCQkJCUJFR0lOX1JJTkcoNik7CiAKLQkJCQlPVVRfUklORyggQ0NFX1BBQ0tFVDMoIFIxMjhfQ05UTF9QQUlOVF9NVUxUSSwgNCApICk7Ci0JCQkJT1VUX1JJTkcoIFIxMjhfR01DX0RTVF9QSVRDSF9PRkZTRVRfQ05UTCB8Ci0JCQkJCSAgUjEyOF9HTUNfQlJVU0hfU09MSURfQ09MT1IgfAotCQkJCQkgIChkZXZfcHJpdi0+ZGVwdGhfZm10IDw8IDgpIHwKLQkJCQkJICBSMTI4X0dNQ19TUkNfREFUQVRZUEVfQ09MT1IgfAotCQkJCQkgIFIxMjhfUk9QM19QIHwKLQkJCQkJICBSMTI4X0dNQ19DTFJfQ01QX0NOVExfRElTIHwKLQkJCQkJICBSMTI4X0dNQ19XUl9NU0tfRElTICk7CisJCQkJT1VUX1JJTkcoQ0NFX1BBQ0tFVDMoUjEyOF9DTlRMX1BBSU5UX01VTFRJLCA0KSk7CisJCQkJT1VUX1JJTkcoUjEyOF9HTUNfRFNUX1BJVENIX09GRlNFVF9DTlRMIHwKKwkJCQkJIFIxMjhfR01DX0JSVVNIX1NPTElEX0NPTE9SIHwKKwkJCQkJIChkZXZfcHJpdi0+ZGVwdGhfZm10IDw8IDgpIHwKKwkJCQkJIFIxMjhfR01DX1NSQ19EQVRBVFlQRV9DT0xPUiB8CisJCQkJCSBSMTI4X1JPUDNfUCB8CisJCQkJCSBSMTI4X0dNQ19DTFJfQ01QX0NOVExfRElTIHwKKwkJCQkJIFIxMjhfR01DX1dSX01TS19ESVMpOwogCi0JCQkJT1VUX1JJTkcoIGRldl9wcml2LT5kZXB0aF9waXRjaF9vZmZzZXRfYyApOwotCQkJCU9VVF9SSU5HKCBidWZmZXJbaV0gKTsKKwkJCQlPVVRfUklORyhkZXZfcHJpdi0+ZGVwdGhfcGl0Y2hfb2Zmc2V0X2MpOworCQkJCU9VVF9SSU5HKGJ1ZmZlcltpXSk7CiAKLQkJCQlPVVRfUklORyggKHhbaV0gPDwgMTYpIHwgeVtpXSApOwotCQkJCU9VVF9SSU5HKCAoMSA8PCAxNikgfCAxICk7CisJCQkJT1VUX1JJTkcoKHhbaV0gPDwgMTYpIHwgeVtpXSk7CisJCQkJT1VUX1JJTkcoKDEgPDwgMTYpIHwgMSk7CiAKIAkJCQlBRFZBTkNFX1JJTkcoKTsKIAkJCX0KIAkJfQogCi0JCWRybV9mcmVlKCBtYXNrLCBtYXNrX3NpemUsIERSTV9NRU1fQlVGUyApOworCQlkcm1fZnJlZShtYXNrLCBtYXNrX3NpemUsIERSTV9NRU1fQlVGUyk7CiAJfSBlbHNlIHsKLQkJZm9yICggaSA9IDAgOyBpIDwgY291bnQgOyBpKysgKSB7Ci0JCQlCRUdJTl9SSU5HKCA2ICk7CisJCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCQlCRUdJTl9SSU5HKDYpOwogCi0JCQlPVVRfUklORyggQ0NFX1BBQ0tFVDMoIFIxMjhfQ05UTF9QQUlOVF9NVUxUSSwgNCApICk7Ci0JCQlPVVRfUklORyggUjEyOF9HTUNfRFNUX1BJVENIX09GRlNFVF9DTlRMIHwKLQkJCQkgIFIxMjhfR01DX0JSVVNIX1NPTElEX0NPTE9SIHwKLQkJCQkgIChkZXZfcHJpdi0+ZGVwdGhfZm10IDw8IDgpIHwKLQkJCQkgIFIxMjhfR01DX1NSQ19EQVRBVFlQRV9DT0xPUiB8Ci0JCQkJICBSMTI4X1JPUDNfUCB8Ci0JCQkJICBSMTI4X0dNQ19DTFJfQ01QX0NOVExfRElTIHwKLQkJCQkgIFIxMjhfR01DX1dSX01TS19ESVMgKTsKKwkJCU9VVF9SSU5HKENDRV9QQUNLRVQzKFIxMjhfQ05UTF9QQUlOVF9NVUxUSSwgNCkpOworCQkJT1VUX1JJTkcoUjEyOF9HTUNfRFNUX1BJVENIX09GRlNFVF9DTlRMIHwKKwkJCQkgUjEyOF9HTUNfQlJVU0hfU09MSURfQ09MT1IgfAorCQkJCSAoZGV2X3ByaXYtPmRlcHRoX2ZtdCA8PCA4KSB8CisJCQkJIFIxMjhfR01DX1NSQ19EQVRBVFlQRV9DT0xPUiB8CisJCQkJIFIxMjhfUk9QM19QIHwKKwkJCQkgUjEyOF9HTUNfQ0xSX0NNUF9DTlRMX0RJUyB8CisJCQkJIFIxMjhfR01DX1dSX01TS19ESVMpOwogCi0JCQlPVVRfUklORyggZGV2X3ByaXYtPmRlcHRoX3BpdGNoX29mZnNldF9jICk7Ci0JCQlPVVRfUklORyggYnVmZmVyW2ldICk7CisJCQlPVVRfUklORyhkZXZfcHJpdi0+ZGVwdGhfcGl0Y2hfb2Zmc2V0X2MpOworCQkJT1VUX1JJTkcoYnVmZmVyW2ldKTsKIAotCQkJT1VUX1JJTkcoICh4W2ldIDw8IDE2KSB8IHlbaV0gKTsKLQkJCU9VVF9SSU5HKCAoMSA8PCAxNikgfCAxICk7CisJCQlPVVRfUklORygoeFtpXSA8PCAxNikgfCB5W2ldKTsKKwkJCU9VVF9SSU5HKCgxIDw8IDE2KSB8IDEpOwogCiAJCQlBRFZBTkNFX1JJTkcoKTsKIAkJfQogCX0KIAotCWRybV9mcmVlKCB4LCB4YnVmX3NpemUsIERSTV9NRU1fQlVGUyApOwotCWRybV9mcmVlKCB5LCB5YnVmX3NpemUsIERSTV9NRU1fQlVGUyApOwotCWRybV9mcmVlKCBidWZmZXIsIGJ1ZmZlcl9zaXplLCBEUk1fTUVNX0JVRlMgKTsKKwlkcm1fZnJlZSh4LCB4YnVmX3NpemUsIERSTV9NRU1fQlVGUyk7CisJZHJtX2ZyZWUoeSwgeWJ1Zl9zaXplLCBEUk1fTUVNX0JVRlMpOworCWRybV9mcmVlKGJ1ZmZlciwgYnVmZmVyX3NpemUsIERSTV9NRU1fQlVGUyk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCByMTI4X2NjZV9kaXNwYXRjaF9yZWFkX3NwYW4oIGRybV9kZXZpY2VfdCAqZGV2LAotCQkJCQlkcm1fcjEyOF9kZXB0aF90ICpkZXB0aCApCitzdGF0aWMgaW50IHIxMjhfY2NlX2Rpc3BhdGNoX3JlYWRfc3Bhbihkcm1fZGV2aWNlX3QgKiBkZXYsCisJCQkJICAgICAgIGRybV9yMTI4X2RlcHRoX3QgKiBkZXB0aCkKIHsKIAlkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlpbnQgY291bnQsIHgsIHk7CiAJUklOR19MT0NBTFM7Ci0JRFJNX0RFQlVHKCAiXG4iICk7CisJRFJNX0RFQlVHKCJcbiIpOwogCiAJY291bnQgPSBkZXB0aC0+bjsKIAlpZiAoY291bnQgPiA0MDk2IHx8IGNvdW50IDw9IDApCiAJCXJldHVybiBEUk1fRVJSKEVNU0dTSVpFKTsKIAotCWlmICggRFJNX0NPUFlfRlJPTV9VU0VSKCAmeCwgZGVwdGgtPngsIHNpemVvZih4KSApICkgeworCWlmIChEUk1fQ09QWV9GUk9NX1VTRVIoJngsIGRlcHRoLT54LCBzaXplb2YoeCkpKSB7CiAJCXJldHVybiBEUk1fRVJSKEVGQVVMVCk7CiAJfQotCWlmICggRFJNX0NPUFlfRlJPTV9VU0VSKCAmeSwgZGVwdGgtPnksIHNpemVvZih5KSApICkgeworCWlmIChEUk1fQ09QWV9GUk9NX1VTRVIoJnksIGRlcHRoLT55LCBzaXplb2YoeSkpKSB7CiAJCXJldHVybiBEUk1fRVJSKEVGQVVMVCk7CiAJfQogCi0JQkVHSU5fUklORyggNyApOworCUJFR0lOX1JJTkcoNyk7CiAKLQlPVVRfUklORyggQ0NFX1BBQ0tFVDMoIFIxMjhfQ05UTF9CSVRCTFRfTVVMVEksIDUgKSApOwotCU9VVF9SSU5HKCBSMTI4X0dNQ19TUkNfUElUQ0hfT0ZGU0VUX0NOVEwgfAotCQkgIFIxMjhfR01DX0RTVF9QSVRDSF9PRkZTRVRfQ05UTCB8Ci0JCSAgUjEyOF9HTUNfQlJVU0hfTk9ORSB8Ci0JCSAgKGRldl9wcml2LT5kZXB0aF9mbXQgPDwgOCkgfAotCQkgIFIxMjhfR01DX1NSQ19EQVRBVFlQRV9DT0xPUiB8Ci0JCSAgUjEyOF9ST1AzX1MgfAotCQkgIFIxMjhfRFBfU1JDX1NPVVJDRV9NRU1PUlkgfAotCQkgIFIxMjhfR01DX0NMUl9DTVBfQ05UTF9ESVMgfAotCQkgIFIxMjhfR01DX1dSX01TS19ESVMgKTsKKwlPVVRfUklORyhDQ0VfUEFDS0VUMyhSMTI4X0NOVExfQklUQkxUX01VTFRJLCA1KSk7CisJT1VUX1JJTkcoUjEyOF9HTUNfU1JDX1BJVENIX09GRlNFVF9DTlRMIHwKKwkJIFIxMjhfR01DX0RTVF9QSVRDSF9PRkZTRVRfQ05UTCB8CisJCSBSMTI4X0dNQ19CUlVTSF9OT05FIHwKKwkJIChkZXZfcHJpdi0+ZGVwdGhfZm10IDw8IDgpIHwKKwkJIFIxMjhfR01DX1NSQ19EQVRBVFlQRV9DT0xPUiB8CisJCSBSMTI4X1JPUDNfUyB8CisJCSBSMTI4X0RQX1NSQ19TT1VSQ0VfTUVNT1JZIHwKKwkJIFIxMjhfR01DX0NMUl9DTVBfQ05UTF9ESVMgfCBSMTI4X0dNQ19XUl9NU0tfRElTKTsKIAotCU9VVF9SSU5HKCBkZXZfcHJpdi0+ZGVwdGhfcGl0Y2hfb2Zmc2V0X2MgKTsKLQlPVVRfUklORyggZGV2X3ByaXYtPnNwYW5fcGl0Y2hfb2Zmc2V0X2MgKTsKKwlPVVRfUklORyhkZXZfcHJpdi0+ZGVwdGhfcGl0Y2hfb2Zmc2V0X2MpOworCU9VVF9SSU5HKGRldl9wcml2LT5zcGFuX3BpdGNoX29mZnNldF9jKTsKIAotCU9VVF9SSU5HKCAoeCA8PCAxNikgfCB5ICk7Ci0JT1VUX1JJTkcoICgwIDw8IDE2KSB8IDAgKTsKLQlPVVRfUklORyggKGNvdW50IDw8IDE2KSB8IDEgKTsKKwlPVVRfUklORygoeCA8PCAxNikgfCB5KTsKKwlPVVRfUklORygoMCA8PCAxNikgfCAwKTsKKwlPVVRfUklORygoY291bnQgPDwgMTYpIHwgMSk7CiAKIAlBRFZBTkNFX1JJTkcoKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHIxMjhfY2NlX2Rpc3BhdGNoX3JlYWRfcGl4ZWxzKCBkcm1fZGV2aWNlX3QgKmRldiwKLQkJCQkJICBkcm1fcjEyOF9kZXB0aF90ICpkZXB0aCApCitzdGF0aWMgaW50IHIxMjhfY2NlX2Rpc3BhdGNoX3JlYWRfcGl4ZWxzKGRybV9kZXZpY2VfdCAqIGRldiwKKwkJCQkJIGRybV9yMTI4X2RlcHRoX3QgKiBkZXB0aCkKIHsKIAlkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlpbnQgY291bnQsICp4LCAqeTsKIAlpbnQgaSwgeGJ1Zl9zaXplLCB5YnVmX3NpemU7CiAJUklOR19MT0NBTFM7Ci0JRFJNX0RFQlVHKCAiJXNcbiIsIF9fRlVOQ1RJT05fXyApOworCURSTV9ERUJVRygiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CiAKIAljb3VudCA9IGRlcHRoLT5uOwogCWlmIChjb3VudCA+IDQwOTYgfHwgY291bnQgPD0gMCkKIAkJcmV0dXJuIERSTV9FUlIoRU1TR1NJWkUpOwogCi0JaWYgKCBjb3VudCA+IGRldl9wcml2LT5kZXB0aF9waXRjaCApIHsKKwlpZiAoY291bnQgPiBkZXZfcHJpdi0+ZGVwdGhfcGl0Y2gpIHsKIAkJY291bnQgPSBkZXZfcHJpdi0+ZGVwdGhfcGl0Y2g7CiAJfQogCiAJeGJ1Zl9zaXplID0gY291bnQgKiBzaXplb2YoKngpOwogCXlidWZfc2l6ZSA9IGNvdW50ICogc2l6ZW9mKCp5KTsKLQl4ID0gZHJtX2FsbG9jKCB4YnVmX3NpemUsIERSTV9NRU1fQlVGUyApOwotCWlmICggeCA9PSBOVUxMICkgeworCXggPSBkcm1fYWxsb2MoeGJ1Zl9zaXplLCBEUk1fTUVNX0JVRlMpOworCWlmICh4ID09IE5VTEwpIHsKIAkJcmV0dXJuIERSTV9FUlIoRU5PTUVNKTsKIAl9Ci0JeSA9IGRybV9hbGxvYyggeWJ1Zl9zaXplLCBEUk1fTUVNX0JVRlMgKTsKLQlpZiAoIHkgPT0gTlVMTCApIHsKLQkJZHJtX2ZyZWUoIHgsIHhidWZfc2l6ZSwgRFJNX01FTV9CVUZTICk7CisJeSA9IGRybV9hbGxvYyh5YnVmX3NpemUsIERSTV9NRU1fQlVGUyk7CisJaWYgKHkgPT0gTlVMTCkgeworCQlkcm1fZnJlZSh4LCB4YnVmX3NpemUsIERSTV9NRU1fQlVGUyk7CiAJCXJldHVybiBEUk1fRVJSKEVOT01FTSk7CiAJfQotCWlmICggRFJNX0NPUFlfRlJPTV9VU0VSKCB4LCBkZXB0aC0+eCwgeGJ1Zl9zaXplICkgKSB7Ci0JCWRybV9mcmVlKCB4LCB4YnVmX3NpemUsIERSTV9NRU1fQlVGUyApOwotCQlkcm1fZnJlZSggeSwgeWJ1Zl9zaXplLCBEUk1fTUVNX0JVRlMgKTsKKwlpZiAoRFJNX0NPUFlfRlJPTV9VU0VSKHgsIGRlcHRoLT54LCB4YnVmX3NpemUpKSB7CisJCWRybV9mcmVlKHgsIHhidWZfc2l6ZSwgRFJNX01FTV9CVUZTKTsKKwkJZHJtX2ZyZWUoeSwgeWJ1Zl9zaXplLCBEUk1fTUVNX0JVRlMpOwogCQlyZXR1cm4gRFJNX0VSUihFRkFVTFQpOwogCX0KLQlpZiAoIERSTV9DT1BZX0ZST01fVVNFUiggeSwgZGVwdGgtPnksIHlidWZfc2l6ZSApICkgewotCQlkcm1fZnJlZSggeCwgeGJ1Zl9zaXplLCBEUk1fTUVNX0JVRlMgKTsKLQkJZHJtX2ZyZWUoIHksIHlidWZfc2l6ZSwgRFJNX01FTV9CVUZTICk7CisJaWYgKERSTV9DT1BZX0ZST01fVVNFUih5LCBkZXB0aC0+eSwgeWJ1Zl9zaXplKSkgeworCQlkcm1fZnJlZSh4LCB4YnVmX3NpemUsIERSTV9NRU1fQlVGUyk7CisJCWRybV9mcmVlKHksIHlidWZfc2l6ZSwgRFJNX01FTV9CVUZTKTsKIAkJcmV0dXJuIERSTV9FUlIoRUZBVUxUKTsKIAl9CiAKLQlmb3IgKCBpID0gMCA7IGkgPCBjb3VudCA7IGkrKyApIHsKLQkJQkVHSU5fUklORyggNyApOworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCUJFR0lOX1JJTkcoNyk7CiAKLQkJT1VUX1JJTkcoIENDRV9QQUNLRVQzKCBSMTI4X0NOVExfQklUQkxUX01VTFRJLCA1ICkgKTsKLQkJT1VUX1JJTkcoIFIxMjhfR01DX1NSQ19QSVRDSF9PRkZTRVRfQ05UTCB8Ci0JCQkgIFIxMjhfR01DX0RTVF9QSVRDSF9PRkZTRVRfQ05UTCB8Ci0JCQkgIFIxMjhfR01DX0JSVVNIX05PTkUgfAotCQkJICAoZGV2X3ByaXYtPmRlcHRoX2ZtdCA8PCA4KSB8Ci0JCQkgIFIxMjhfR01DX1NSQ19EQVRBVFlQRV9DT0xPUiB8Ci0JCQkgIFIxMjhfUk9QM19TIHwKLQkJCSAgUjEyOF9EUF9TUkNfU09VUkNFX01FTU9SWSB8Ci0JCQkgIFIxMjhfR01DX0NMUl9DTVBfQ05UTF9ESVMgfAotCQkJICBSMTI4X0dNQ19XUl9NU0tfRElTICk7CisJCU9VVF9SSU5HKENDRV9QQUNLRVQzKFIxMjhfQ05UTF9CSVRCTFRfTVVMVEksIDUpKTsKKwkJT1VUX1JJTkcoUjEyOF9HTUNfU1JDX1BJVENIX09GRlNFVF9DTlRMIHwKKwkJCSBSMTI4X0dNQ19EU1RfUElUQ0hfT0ZGU0VUX0NOVEwgfAorCQkJIFIxMjhfR01DX0JSVVNIX05PTkUgfAorCQkJIChkZXZfcHJpdi0+ZGVwdGhfZm10IDw8IDgpIHwKKwkJCSBSMTI4X0dNQ19TUkNfREFUQVRZUEVfQ09MT1IgfAorCQkJIFIxMjhfUk9QM19TIHwKKwkJCSBSMTI4X0RQX1NSQ19TT1VSQ0VfTUVNT1JZIHwKKwkJCSBSMTI4X0dNQ19DTFJfQ01QX0NOVExfRElTIHwgUjEyOF9HTUNfV1JfTVNLX0RJUyk7CiAKLQkJT1VUX1JJTkcoIGRldl9wcml2LT5kZXB0aF9waXRjaF9vZmZzZXRfYyApOwotCQlPVVRfUklORyggZGV2X3ByaXYtPnNwYW5fcGl0Y2hfb2Zmc2V0X2MgKTsKKwkJT1VUX1JJTkcoZGV2X3ByaXYtPmRlcHRoX3BpdGNoX29mZnNldF9jKTsKKwkJT1VUX1JJTkcoZGV2X3ByaXYtPnNwYW5fcGl0Y2hfb2Zmc2V0X2MpOwogCi0JCU9VVF9SSU5HKCAoeFtpXSA8PCAxNikgfCB5W2ldICk7Ci0JCU9VVF9SSU5HKCAoaSA8PCAxNikgfCAwICk7Ci0JCU9VVF9SSU5HKCAoMSA8PCAxNikgfCAxICk7CisJCU9VVF9SSU5HKCh4W2ldIDw8IDE2KSB8IHlbaV0pOworCQlPVVRfUklORygoaSA8PCAxNikgfCAwKTsKKwkJT1VUX1JJTkcoKDEgPDwgMTYpIHwgMSk7CiAKIAkJQURWQU5DRV9SSU5HKCk7CiAJfQogCi0JZHJtX2ZyZWUoIHgsIHhidWZfc2l6ZSwgRFJNX01FTV9CVUZTICk7Ci0JZHJtX2ZyZWUoIHksIHlidWZfc2l6ZSwgRFJNX01FTV9CVUZTICk7CisJZHJtX2ZyZWUoeCwgeGJ1Zl9zaXplLCBEUk1fTUVNX0JVRlMpOworCWRybV9mcmVlKHksIHlidWZfc2l6ZSwgRFJNX01FTV9CVUZTKTsKIAogCXJldHVybiAwOwogfQogCi0KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqIFBvbHlnb24gc3RpcHBsZQogICovCiAKLXN0YXRpYyB2b2lkIHIxMjhfY2NlX2Rpc3BhdGNoX3N0aXBwbGUoIGRybV9kZXZpY2VfdCAqZGV2LCB1MzIgKnN0aXBwbGUgKQorc3RhdGljIHZvaWQgcjEyOF9jY2VfZGlzcGF0Y2hfc3RpcHBsZShkcm1fZGV2aWNlX3QgKiBkZXYsIHUzMiAqIHN0aXBwbGUpCiB7CiAJZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJaW50IGk7CiAJUklOR19MT0NBTFM7Ci0JRFJNX0RFQlVHKCAiJXNcbiIsIF9fRlVOQ1RJT05fXyApOworCURSTV9ERUJVRygiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CiAKLQlCRUdJTl9SSU5HKCAzMyApOworCUJFR0lOX1JJTkcoMzMpOwogCi0JT1VUX1JJTkcoIENDRV9QQUNLRVQwKCBSMTI4X0JSVVNIX0RBVEEwLCAzMSApICk7Ci0JZm9yICggaSA9IDAgOyBpIDwgMzIgOyBpKysgKSB7Ci0JCU9VVF9SSU5HKCBzdGlwcGxlW2ldICk7CisJT1VUX1JJTkcoQ0NFX1BBQ0tFVDAoUjEyOF9CUlVTSF9EQVRBMCwgMzEpKTsKKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQlPVVRfUklORyhzdGlwcGxlW2ldKTsKIAl9CiAKIAlBRFZBTkNFX1JJTkcoKTsKIH0KIAotCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiBJT0NUTCBmdW5jdGlvbnMKICAqLwogCi1zdGF0aWMgaW50IHIxMjhfY2NlX2NsZWFyKCBEUk1fSU9DVExfQVJHUyApCitzdGF0aWMgaW50IHIxMjhfY2NlX2NsZWFyKERSTV9JT0NUTF9BUkdTKQogewogCURSTV9ERVZJQ0U7CiAJZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJZHJtX3IxMjhfc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9wcml2OwogCWRybV9yMTI4X2NsZWFyX3QgY2xlYXI7Ci0JRFJNX0RFQlVHKCAiXG4iICk7CisJRFJNX0RFQlVHKCJcbiIpOwogCi0JTE9DS19URVNUX1dJVEhfUkVUVVJOKCBkZXYsIGZpbHAgKTsKKwlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxwKTsKIAotCURSTV9DT1BZX0ZST01fVVNFUl9JT0NUTCggY2xlYXIsIChkcm1fcjEyOF9jbGVhcl90IF9fdXNlciAqKSBkYXRhLAotCQkJICAgICBzaXplb2YoY2xlYXIpICk7CisJRFJNX0NPUFlfRlJPTV9VU0VSX0lPQ1RMKGNsZWFyLCAoZHJtX3IxMjhfY2xlYXJfdCBfX3VzZXIgKikgZGF0YSwKKwkJCQkgc2l6ZW9mKGNsZWFyKSk7CiAKLQlSSU5HX1NQQUNFX1RFU1RfV0lUSF9SRVRVUk4oIGRldl9wcml2ICk7CisJUklOR19TUEFDRV9URVNUX1dJVEhfUkVUVVJOKGRldl9wcml2KTsKIAotCWlmICggc2FyZWFfcHJpdi0+bmJveCA+IFIxMjhfTlJfU0FSRUFfQ0xJUFJFQ1RTICkKKwlpZiAoc2FyZWFfcHJpdi0+bmJveCA+IFIxMjhfTlJfU0FSRUFfQ0xJUFJFQ1RTKQogCQlzYXJlYV9wcml2LT5uYm94ID0gUjEyOF9OUl9TQVJFQV9DTElQUkVDVFM7CiAKLQlyMTI4X2NjZV9kaXNwYXRjaF9jbGVhciggZGV2LCAmY2xlYXIgKTsKKwlyMTI4X2NjZV9kaXNwYXRjaF9jbGVhcihkZXYsICZjbGVhcik7CiAJQ09NTUlUX1JJTkcoKTsKIAogCS8qIE1ha2Ugc3VyZSB3ZSByZXN0b3JlIHRoZSAzRCBzdGF0ZSBuZXh0IHRpbWUuCkBAIC0xMjg4LDE3ICsxMjY4LDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcjEyOF9kb19pbml0X3BhZ2VmbGlwKCBkcm1fZGV2aWNlX3QgKmRldiApCitzdGF0aWMgaW50IHIxMjhfZG9faW5pdF9wYWdlZmxpcChkcm1fZGV2aWNlX3QgKiBkZXYpCiB7CiAJZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JRFJNX0RFQlVHKCAiXG4iICk7CisJRFJNX0RFQlVHKCJcbiIpOwogCi0JZGV2X3ByaXYtPmNydGNfb2Zmc2V0ID0gICAgICBSMTI4X1JFQUQoIFIxMjhfQ1JUQ19PRkZTRVQgKTsKLQlkZXZfcHJpdi0+Y3J0Y19vZmZzZXRfY250bCA9IFIxMjhfUkVBRCggUjEyOF9DUlRDX09GRlNFVF9DTlRMICk7CisJZGV2X3ByaXYtPmNydGNfb2Zmc2V0ID0gUjEyOF9SRUFEKFIxMjhfQ1JUQ19PRkZTRVQpOworCWRldl9wcml2LT5jcnRjX29mZnNldF9jbnRsID0gUjEyOF9SRUFEKFIxMjhfQ1JUQ19PRkZTRVRfQ05UTCk7CiAKLQlSMTI4X1dSSVRFKCBSMTI4X0NSVENfT0ZGU0VULCBkZXZfcHJpdi0+ZnJvbnRfb2Zmc2V0ICk7Ci0JUjEyOF9XUklURSggUjEyOF9DUlRDX09GRlNFVF9DTlRMLAotCQkgICAgZGV2X3ByaXYtPmNydGNfb2Zmc2V0X2NudGwgfCBSMTI4X0NSVENfT0ZGU0VUX0ZMSVBfQ05UTCApOworCVIxMjhfV1JJVEUoUjEyOF9DUlRDX09GRlNFVCwgZGV2X3ByaXYtPmZyb250X29mZnNldCk7CisJUjEyOF9XUklURShSMTI4X0NSVENfT0ZGU0VUX0NOVEwsCisJCSAgIGRldl9wcml2LT5jcnRjX29mZnNldF9jbnRsIHwgUjEyOF9DUlRDX09GRlNFVF9GTElQX0NOVEwpOwogCiAJZGV2X3ByaXYtPnBhZ2VfZmxpcHBpbmcgPSAxOwogCWRldl9wcml2LT5jdXJyZW50X3BhZ2UgPSAwOwpAQCAtMTMwNywxNiArMTI4NywxNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHIxMjhfZG9fY2xlYW51cF9wYWdlZmxpcCggZHJtX2RldmljZV90ICpkZXYgKQorc3RhdGljIGludCByMTI4X2RvX2NsZWFudXBfcGFnZWZsaXAoZHJtX2RldmljZV90ICogZGV2KQogewogCWRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCURSTV9ERUJVRyggIlxuIiApOworCURSTV9ERUJVRygiXG4iKTsKIAotCVIxMjhfV1JJVEUoIFIxMjhfQ1JUQ19PRkZTRVQsICAgICAgZGV2X3ByaXYtPmNydGNfb2Zmc2V0ICk7Ci0JUjEyOF9XUklURSggUjEyOF9DUlRDX09GRlNFVF9DTlRMLCBkZXZfcHJpdi0+Y3J0Y19vZmZzZXRfY250bCApOworCVIxMjhfV1JJVEUoUjEyOF9DUlRDX09GRlNFVCwgZGV2X3ByaXYtPmNydGNfb2Zmc2V0KTsKKwlSMTI4X1dSSVRFKFIxMjhfQ1JUQ19PRkZTRVRfQ05UTCwgZGV2X3ByaXYtPmNydGNfb2Zmc2V0X2NudGwpOwogCiAJaWYgKGRldl9wcml2LT5jdXJyZW50X3BhZ2UgIT0gMCkgewotCQlyMTI4X2NjZV9kaXNwYXRjaF9mbGlwKCBkZXYgKTsKKwkJcjEyOF9jY2VfZGlzcGF0Y2hfZmxpcChkZXYpOwogCQlDT01NSVRfUklORygpOwogCX0KIApAQCAtMTMyNSw0MyArMTMwNSw0MyBAQAogfQogCiAvKiBTd2FwcGluZyBhbmQgZmxpcHBpbmcgYXJlIGRpZmZlcmVudCBvcGVyYXRpb25zLCBuZWVkIGRpZmZlcmVudCBpb2N0bHMuCi0gKiBUaGV5IGNhbiAmIHNob3VsZCBiZSBpbnRlcm1peGVkIHRvIHN1cHBvcnQgbXVsdGlwbGUgM2Qgd2luZG93cy4gIAorICogVGhleSBjYW4gJiBzaG91bGQgYmUgaW50ZXJtaXhlZCB0byBzdXBwb3J0IG11bHRpcGxlIDNkIHdpbmRvd3MuCiAgKi8KIAotc3RhdGljIGludCByMTI4X2NjZV9mbGlwKCBEUk1fSU9DVExfQVJHUyApCitzdGF0aWMgaW50IHIxMjhfY2NlX2ZsaXAoRFJNX0lPQ1RMX0FSR1MpCiB7CiAJRFJNX0RFVklDRTsKIAlkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlEUk1fREVCVUcoICIlc1xuIiwgX19GVU5DVElPTl9fICk7CisJRFJNX0RFQlVHKCIlc1xuIiwgX19GVU5DVElPTl9fKTsKIAotCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTiggZGV2LCBmaWxwICk7CisJTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlscCk7CiAKLQlSSU5HX1NQQUNFX1RFU1RfV0lUSF9SRVRVUk4oIGRldl9wcml2ICk7CisJUklOR19TUEFDRV9URVNUX1dJVEhfUkVUVVJOKGRldl9wcml2KTsKIAotCWlmICghZGV2X3ByaXYtPnBhZ2VfZmxpcHBpbmcpIAotCQlyMTI4X2RvX2luaXRfcGFnZWZsaXAoIGRldiApOworCWlmICghZGV2X3ByaXYtPnBhZ2VfZmxpcHBpbmcpCisJCXIxMjhfZG9faW5pdF9wYWdlZmxpcChkZXYpOwogCi0JcjEyOF9jY2VfZGlzcGF0Y2hfZmxpcCggZGV2ICk7CisJcjEyOF9jY2VfZGlzcGF0Y2hfZmxpcChkZXYpOwogCiAJQ09NTUlUX1JJTkcoKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCByMTI4X2NjZV9zd2FwKCBEUk1fSU9DVExfQVJHUyApCitzdGF0aWMgaW50IHIxMjhfY2NlX3N3YXAoRFJNX0lPQ1RMX0FSR1MpCiB7CiAJRFJNX0RFVklDRTsKIAlkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlkcm1fcjEyOF9zYXJlYV90ICpzYXJlYV9wcml2ID0gZGV2X3ByaXYtPnNhcmVhX3ByaXY7Ci0JRFJNX0RFQlVHKCAiJXNcbiIsIF9fRlVOQ1RJT05fXyApOworCURSTV9ERUJVRygiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CiAKLQlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oIGRldiwgZmlscCApOworCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbHApOwogCi0JUklOR19TUEFDRV9URVNUX1dJVEhfUkVUVVJOKCBkZXZfcHJpdiApOworCVJJTkdfU1BBQ0VfVEVTVF9XSVRIX1JFVFVSTihkZXZfcHJpdik7CiAKLQlpZiAoIHNhcmVhX3ByaXYtPm5ib3ggPiBSMTI4X05SX1NBUkVBX0NMSVBSRUNUUyApCisJaWYgKHNhcmVhX3ByaXYtPm5ib3ggPiBSMTI4X05SX1NBUkVBX0NMSVBSRUNUUykKIAkJc2FyZWFfcHJpdi0+bmJveCA9IFIxMjhfTlJfU0FSRUFfQ0xJUFJFQ1RTOwogCi0JcjEyOF9jY2VfZGlzcGF0Y2hfc3dhcCggZGV2ICk7CisJcjEyOF9jY2VfZGlzcGF0Y2hfc3dhcChkZXYpOwogCWRldl9wcml2LT5zYXJlYV9wcml2LT5kaXJ0eSB8PSAoUjEyOF9VUExPQURfQ09OVEVYVCB8CiAJCQkJCVIxMjhfVVBMT0FEX01BU0tTKTsKIApAQCAtMTM2OSw3ICsxMzQ5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCByMTI4X2NjZV92ZXJ0ZXgoIERSTV9JT0NUTF9BUkdTICkKK3N0YXRpYyBpbnQgcjEyOF9jY2VfdmVydGV4KERSTV9JT0NUTF9BUkdTKQogewogCURSTV9ERVZJQ0U7CiAJZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CkBAIC0xMzc4LDQ0ICsxMzU4LDQzIEBACiAJZHJtX3IxMjhfYnVmX3ByaXZfdCAqYnVmX3ByaXY7CiAJZHJtX3IxMjhfdmVydGV4X3QgdmVydGV4OwogCi0JTE9DS19URVNUX1dJVEhfUkVUVVJOKCBkZXYsIGZpbHAgKTsKKwlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxwKTsKIAotCWlmICggIWRldl9wcml2ICkgewotCQlEUk1fRVJST1IoICIlcyBjYWxsZWQgd2l0aCBubyBpbml0aWFsaXphdGlvblxuIiwgX19GVU5DVElPTl9fICk7CisJaWYgKCFkZXZfcHJpdikgeworCQlEUk1fRVJST1IoIiVzIGNhbGxlZCB3aXRoIG5vIGluaXRpYWxpemF0aW9uXG4iLCBfX0ZVTkNUSU9OX18pOwogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCX0KIAotCURSTV9DT1BZX0ZST01fVVNFUl9JT0NUTCggdmVydGV4LCAoZHJtX3IxMjhfdmVydGV4X3QgX191c2VyICopIGRhdGEsCi0JCQkgICAgIHNpemVvZih2ZXJ0ZXgpICk7CisJRFJNX0NPUFlfRlJPTV9VU0VSX0lPQ1RMKHZlcnRleCwgKGRybV9yMTI4X3ZlcnRleF90IF9fdXNlciAqKSBkYXRhLAorCQkJCSBzaXplb2YodmVydGV4KSk7CiAKLQlEUk1fREVCVUcoICJwaWQ9JWQgaW5kZXg9JWQgY291bnQ9JWQgZGlzY2FyZD0lZFxuIiwKLQkJICAgRFJNX0NVUlJFTlRQSUQsCi0JCSAgIHZlcnRleC5pZHgsIHZlcnRleC5jb3VudCwgdmVydGV4LmRpc2NhcmQgKTsKKwlEUk1fREVCVUcoInBpZD0lZCBpbmRleD0lZCBjb3VudD0lZCBkaXNjYXJkPSVkXG4iLAorCQkgIERSTV9DVVJSRU5UUElELCB2ZXJ0ZXguaWR4LCB2ZXJ0ZXguY291bnQsIHZlcnRleC5kaXNjYXJkKTsKIAotCWlmICggdmVydGV4LmlkeCA8IDAgfHwgdmVydGV4LmlkeCA+PSBkbWEtPmJ1Zl9jb3VudCApIHsKLQkJRFJNX0VSUk9SKCAiYnVmZmVyIGluZGV4ICVkIChvZiAlZCBtYXgpXG4iLAotCQkJICAgdmVydGV4LmlkeCwgZG1hLT5idWZfY291bnQgLSAxICk7CisJaWYgKHZlcnRleC5pZHggPCAwIHx8IHZlcnRleC5pZHggPj0gZG1hLT5idWZfY291bnQpIHsKKwkJRFJNX0VSUk9SKCJidWZmZXIgaW5kZXggJWQgKG9mICVkIG1heClcbiIsCisJCQkgIHZlcnRleC5pZHgsIGRtYS0+YnVmX2NvdW50IC0gMSk7CiAJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiAJfQotCWlmICggdmVydGV4LnByaW0gPCAwIHx8Ci0JICAgICB2ZXJ0ZXgucHJpbSA+IFIxMjhfQ0NFX1ZDX0NOVExfUFJJTV9UWVBFX1RSSV9UWVBFMiApIHsKLQkJRFJNX0VSUk9SKCAiYnVmZmVyIHByaW0gJWRcbiIsIHZlcnRleC5wcmltICk7CisJaWYgKHZlcnRleC5wcmltIDwgMCB8fAorCSAgICB2ZXJ0ZXgucHJpbSA+IFIxMjhfQ0NFX1ZDX0NOVExfUFJJTV9UWVBFX1RSSV9UWVBFMikgeworCQlEUk1fRVJST1IoImJ1ZmZlciBwcmltICVkXG4iLCB2ZXJ0ZXgucHJpbSk7CiAJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiAJfQogCi0JUklOR19TUEFDRV9URVNUX1dJVEhfUkVUVVJOKCBkZXZfcHJpdiApOwotCVZCX0FHRV9URVNUX1dJVEhfUkVUVVJOKCBkZXZfcHJpdiApOworCVJJTkdfU1BBQ0VfVEVTVF9XSVRIX1JFVFVSTihkZXZfcHJpdik7CisJVkJfQUdFX1RFU1RfV0lUSF9SRVRVUk4oZGV2X3ByaXYpOwogCiAJYnVmID0gZG1hLT5idWZsaXN0W3ZlcnRleC5pZHhdOwogCWJ1Zl9wcml2ID0gYnVmLT5kZXZfcHJpdmF0ZTsKIAotCWlmICggYnVmLT5maWxwICE9IGZpbHAgKSB7Ci0JCURSTV9FUlJPUiggInByb2Nlc3MgJWQgdXNpbmcgYnVmZmVyIG93bmVkIGJ5ICVwXG4iLAotCQkJICAgRFJNX0NVUlJFTlRQSUQsIGJ1Zi0+ZmlscCApOworCWlmIChidWYtPmZpbHAgIT0gZmlscCkgeworCQlEUk1fRVJST1IoInByb2Nlc3MgJWQgdXNpbmcgYnVmZmVyIG93bmVkIGJ5ICVwXG4iLAorCQkJICBEUk1fQ1VSUkVOVFBJRCwgYnVmLT5maWxwKTsKIAkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAl9Ci0JaWYgKCBidWYtPnBlbmRpbmcgKSB7Ci0JCURSTV9FUlJPUiggInNlbmRpbmcgcGVuZGluZyBidWZmZXIgJWRcbiIsIHZlcnRleC5pZHggKTsKKwlpZiAoYnVmLT5wZW5kaW5nKSB7CisJCURSTV9FUlJPUigic2VuZGluZyBwZW5kaW5nIGJ1ZmZlciAlZFxuIiwgdmVydGV4LmlkeCk7CiAJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiAJfQogCkBAIC0xNDIzLDEzICsxNDAyLDEzIEBACiAJYnVmX3ByaXYtPnByaW0gPSB2ZXJ0ZXgucHJpbTsKIAlidWZfcHJpdi0+ZGlzY2FyZCA9IHZlcnRleC5kaXNjYXJkOwogCi0JcjEyOF9jY2VfZGlzcGF0Y2hfdmVydGV4KCBkZXYsIGJ1ZiApOworCXIxMjhfY2NlX2Rpc3BhdGNoX3ZlcnRleChkZXYsIGJ1Zik7CiAKIAlDT01NSVRfUklORygpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHIxMjhfY2NlX2luZGljZXMoIERSTV9JT0NUTF9BUkdTICkKK3N0YXRpYyBpbnQgcjEyOF9jY2VfaW5kaWNlcyhEUk1fSU9DVExfQVJHUykKIHsKIAlEUk1fREVWSUNFOwogCWRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwpAQCAtMTQzOSw1NSArMTQxOCw1NCBAQAogCWRybV9yMTI4X2luZGljZXNfdCBlbHRzOwogCWludCBjb3VudDsKIAotCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTiggZGV2LCBmaWxwICk7CisJTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlscCk7CiAKLQlpZiAoICFkZXZfcHJpdiApIHsKLQkJRFJNX0VSUk9SKCAiJXMgY2FsbGVkIHdpdGggbm8gaW5pdGlhbGl6YXRpb25cbiIsIF9fRlVOQ1RJT05fXyApOworCWlmICghZGV2X3ByaXYpIHsKKwkJRFJNX0VSUk9SKCIlcyBjYWxsZWQgd2l0aCBubyBpbml0aWFsaXphdGlvblxuIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAl9CiAKLQlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwoIGVsdHMsIChkcm1fcjEyOF9pbmRpY2VzX3QgX191c2VyICopIGRhdGEsCi0JCQkgICAgIHNpemVvZihlbHRzKSApOworCURSTV9DT1BZX0ZST01fVVNFUl9JT0NUTChlbHRzLCAoZHJtX3IxMjhfaW5kaWNlc190IF9fdXNlciAqKSBkYXRhLAorCQkJCSBzaXplb2YoZWx0cykpOwogCi0JRFJNX0RFQlVHKCAicGlkPSVkIGJ1Zj0lZCBzPSVkIGU9JWQgZD0lZFxuIiwgRFJNX0NVUlJFTlRQSUQsCi0JCSAgIGVsdHMuaWR4LCBlbHRzLnN0YXJ0LCBlbHRzLmVuZCwgZWx0cy5kaXNjYXJkICk7CisJRFJNX0RFQlVHKCJwaWQ9JWQgYnVmPSVkIHM9JWQgZT0lZCBkPSVkXG4iLCBEUk1fQ1VSUkVOVFBJRCwKKwkJICBlbHRzLmlkeCwgZWx0cy5zdGFydCwgZWx0cy5lbmQsIGVsdHMuZGlzY2FyZCk7CiAKLQlpZiAoIGVsdHMuaWR4IDwgMCB8fCBlbHRzLmlkeCA+PSBkbWEtPmJ1Zl9jb3VudCApIHsKLQkJRFJNX0VSUk9SKCAiYnVmZmVyIGluZGV4ICVkIChvZiAlZCBtYXgpXG4iLAotCQkJICAgZWx0cy5pZHgsIGRtYS0+YnVmX2NvdW50IC0gMSApOworCWlmIChlbHRzLmlkeCA8IDAgfHwgZWx0cy5pZHggPj0gZG1hLT5idWZfY291bnQpIHsKKwkJRFJNX0VSUk9SKCJidWZmZXIgaW5kZXggJWQgKG9mICVkIG1heClcbiIsCisJCQkgIGVsdHMuaWR4LCBkbWEtPmJ1Zl9jb3VudCAtIDEpOwogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCX0KLQlpZiAoIGVsdHMucHJpbSA8IDAgfHwKLQkgICAgIGVsdHMucHJpbSA+IFIxMjhfQ0NFX1ZDX0NOVExfUFJJTV9UWVBFX1RSSV9UWVBFMiApIHsKLQkJRFJNX0VSUk9SKCAiYnVmZmVyIHByaW0gJWRcbiIsIGVsdHMucHJpbSApOworCWlmIChlbHRzLnByaW0gPCAwIHx8IGVsdHMucHJpbSA+IFIxMjhfQ0NFX1ZDX0NOVExfUFJJTV9UWVBFX1RSSV9UWVBFMikgeworCQlEUk1fRVJST1IoImJ1ZmZlciBwcmltICVkXG4iLCBlbHRzLnByaW0pOwogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCX0KIAotCVJJTkdfU1BBQ0VfVEVTVF9XSVRIX1JFVFVSTiggZGV2X3ByaXYgKTsKLQlWQl9BR0VfVEVTVF9XSVRIX1JFVFVSTiggZGV2X3ByaXYgKTsKKwlSSU5HX1NQQUNFX1RFU1RfV0lUSF9SRVRVUk4oZGV2X3ByaXYpOworCVZCX0FHRV9URVNUX1dJVEhfUkVUVVJOKGRldl9wcml2KTsKIAogCWJ1ZiA9IGRtYS0+YnVmbGlzdFtlbHRzLmlkeF07CiAJYnVmX3ByaXYgPSBidWYtPmRldl9wcml2YXRlOwogCi0JaWYgKCBidWYtPmZpbHAgIT0gZmlscCApIHsKLQkJRFJNX0VSUk9SKCAicHJvY2VzcyAlZCB1c2luZyBidWZmZXIgb3duZWQgYnkgJXBcbiIsCi0JCQkgICBEUk1fQ1VSUkVOVFBJRCwgYnVmLT5maWxwICk7CisJaWYgKGJ1Zi0+ZmlscCAhPSBmaWxwKSB7CisJCURSTV9FUlJPUigicHJvY2VzcyAlZCB1c2luZyBidWZmZXIgb3duZWQgYnkgJXBcbiIsCisJCQkgIERSTV9DVVJSRU5UUElELCBidWYtPmZpbHApOwogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCX0KLQlpZiAoIGJ1Zi0+cGVuZGluZyApIHsKLQkJRFJNX0VSUk9SKCAic2VuZGluZyBwZW5kaW5nIGJ1ZmZlciAlZFxuIiwgZWx0cy5pZHggKTsKKwlpZiAoYnVmLT5wZW5kaW5nKSB7CisJCURSTV9FUlJPUigic2VuZGluZyBwZW5kaW5nIGJ1ZmZlciAlZFxuIiwgZWx0cy5pZHgpOwogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCX0KIAogCWNvdW50ID0gKGVsdHMuZW5kIC0gZWx0cy5zdGFydCkgLyBzaXplb2YodTE2KTsKIAllbHRzLnN0YXJ0IC09IFIxMjhfSU5ERVhfUFJJTV9PRkZTRVQ7CiAKLQlpZiAoIGVsdHMuc3RhcnQgJiAweDcgKSB7Ci0JCURSTV9FUlJPUiggIm1pc2FsaWduZWQgYnVmZmVyIDB4JXhcbiIsIGVsdHMuc3RhcnQgKTsKKwlpZiAoZWx0cy5zdGFydCAmIDB4NykgeworCQlEUk1fRVJST1IoIm1pc2FsaWduZWQgYnVmZmVyIDB4JXhcbiIsIGVsdHMuc3RhcnQpOwogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCX0KLQlpZiAoIGVsdHMuc3RhcnQgPCBidWYtPnVzZWQgKSB7Ci0JCURSTV9FUlJPUiggIm5vIGhlYWRlciAweCV4IC0gMHgleFxuIiwgZWx0cy5zdGFydCwgYnVmLT51c2VkICk7CisJaWYgKGVsdHMuc3RhcnQgPCBidWYtPnVzZWQpIHsKKwkJRFJNX0VSUk9SKCJubyBoZWFkZXIgMHgleCAtIDB4JXhcbiIsIGVsdHMuc3RhcnQsIGJ1Zi0+dXNlZCk7CiAJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiAJfQogCkBAIC0xNDk1LDEzICsxNDczLDEzIEBACiAJYnVmX3ByaXYtPnByaW0gPSBlbHRzLnByaW07CiAJYnVmX3ByaXYtPmRpc2NhcmQgPSBlbHRzLmRpc2NhcmQ7CiAKLQlyMTI4X2NjZV9kaXNwYXRjaF9pbmRpY2VzKCBkZXYsIGJ1ZiwgZWx0cy5zdGFydCwgZWx0cy5lbmQsIGNvdW50ICk7CisJcjEyOF9jY2VfZGlzcGF0Y2hfaW5kaWNlcyhkZXYsIGJ1ZiwgZWx0cy5zdGFydCwgZWx0cy5lbmQsIGNvdW50KTsKIAogCUNPTU1JVF9SSU5HKCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcjEyOF9jY2VfYmxpdCggRFJNX0lPQ1RMX0FSR1MgKQorc3RhdGljIGludCByMTI4X2NjZV9ibGl0KERSTV9JT0NUTF9BUkdTKQogewogCURSTV9ERVZJQ0U7CiAJZHJtX2RldmljZV9kbWFfdCAqZG1hID0gZGV2LT5kbWE7CkBAIC0xNTA5LDU1ICsxNDg3LDU1IEBACiAJZHJtX3IxMjhfYmxpdF90IGJsaXQ7CiAJaW50IHJldDsKIAotCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTiggZGV2LCBmaWxwICk7CisJTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlscCk7CiAKLQlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwoIGJsaXQsIChkcm1fcjEyOF9ibGl0X3QgX191c2VyICopIGRhdGEsCi0JCQkgICAgIHNpemVvZihibGl0KSApOworCURSTV9DT1BZX0ZST01fVVNFUl9JT0NUTChibGl0LCAoZHJtX3IxMjhfYmxpdF90IF9fdXNlciAqKSBkYXRhLAorCQkJCSBzaXplb2YoYmxpdCkpOwogCi0JRFJNX0RFQlVHKCAicGlkPSVkIGluZGV4PSVkXG4iLCBEUk1fQ1VSUkVOVFBJRCwgYmxpdC5pZHggKTsKKwlEUk1fREVCVUcoInBpZD0lZCBpbmRleD0lZFxuIiwgRFJNX0NVUlJFTlRQSUQsIGJsaXQuaWR4KTsKIAotCWlmICggYmxpdC5pZHggPCAwIHx8IGJsaXQuaWR4ID49IGRtYS0+YnVmX2NvdW50ICkgewotCQlEUk1fRVJST1IoICJidWZmZXIgaW5kZXggJWQgKG9mICVkIG1heClcbiIsCi0JCQkgICBibGl0LmlkeCwgZG1hLT5idWZfY291bnQgLSAxICk7CisJaWYgKGJsaXQuaWR4IDwgMCB8fCBibGl0LmlkeCA+PSBkbWEtPmJ1Zl9jb3VudCkgeworCQlEUk1fRVJST1IoImJ1ZmZlciBpbmRleCAlZCAob2YgJWQgbWF4KVxuIiwKKwkJCSAgYmxpdC5pZHgsIGRtYS0+YnVmX2NvdW50IC0gMSk7CiAJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiAJfQogCi0JUklOR19TUEFDRV9URVNUX1dJVEhfUkVUVVJOKCBkZXZfcHJpdiApOwotCVZCX0FHRV9URVNUX1dJVEhfUkVUVVJOKCBkZXZfcHJpdiApOworCVJJTkdfU1BBQ0VfVEVTVF9XSVRIX1JFVFVSTihkZXZfcHJpdik7CisJVkJfQUdFX1RFU1RfV0lUSF9SRVRVUk4oZGV2X3ByaXYpOwogCi0JcmV0ID0gcjEyOF9jY2VfZGlzcGF0Y2hfYmxpdCggZmlscCwgZGV2LCAmYmxpdCApOworCXJldCA9IHIxMjhfY2NlX2Rpc3BhdGNoX2JsaXQoZmlscCwgZGV2LCAmYmxpdCk7CiAKIAlDT01NSVRfUklORygpOwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgcjEyOF9jY2VfZGVwdGgoIERSTV9JT0NUTF9BUkdTICkKK3N0YXRpYyBpbnQgcjEyOF9jY2VfZGVwdGgoRFJNX0lPQ1RMX0FSR1MpCiB7CiAJRFJNX0RFVklDRTsKIAlkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlkcm1fcjEyOF9kZXB0aF90IGRlcHRoOwogCWludCByZXQ7CiAKLQlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oIGRldiwgZmlscCApOworCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbHApOwogCi0JRFJNX0NPUFlfRlJPTV9VU0VSX0lPQ1RMKCBkZXB0aCwgKGRybV9yMTI4X2RlcHRoX3QgX191c2VyICopIGRhdGEsCi0JCQkgICAgIHNpemVvZihkZXB0aCkgKTsKKwlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwoZGVwdGgsIChkcm1fcjEyOF9kZXB0aF90IF9fdXNlciAqKSBkYXRhLAorCQkJCSBzaXplb2YoZGVwdGgpKTsKIAotCVJJTkdfU1BBQ0VfVEVTVF9XSVRIX1JFVFVSTiggZGV2X3ByaXYgKTsKKwlSSU5HX1NQQUNFX1RFU1RfV0lUSF9SRVRVUk4oZGV2X3ByaXYpOwogCiAJcmV0ID0gRFJNX0VSUihFSU5WQUwpOwotCXN3aXRjaCAoIGRlcHRoLmZ1bmMgKSB7CisJc3dpdGNoIChkZXB0aC5mdW5jKSB7CiAJY2FzZSBSMTI4X1dSSVRFX1NQQU46Ci0JCXJldCA9IHIxMjhfY2NlX2Rpc3BhdGNoX3dyaXRlX3NwYW4oIGRldiwgJmRlcHRoICk7CisJCXJldCA9IHIxMjhfY2NlX2Rpc3BhdGNoX3dyaXRlX3NwYW4oZGV2LCAmZGVwdGgpOwogCQlicmVhazsKIAljYXNlIFIxMjhfV1JJVEVfUElYRUxTOgotCQlyZXQgPSByMTI4X2NjZV9kaXNwYXRjaF93cml0ZV9waXhlbHMoIGRldiwgJmRlcHRoICk7CisJCXJldCA9IHIxMjhfY2NlX2Rpc3BhdGNoX3dyaXRlX3BpeGVscyhkZXYsICZkZXB0aCk7CiAJCWJyZWFrOwogCWNhc2UgUjEyOF9SRUFEX1NQQU46Ci0JCXJldCA9IHIxMjhfY2NlX2Rpc3BhdGNoX3JlYWRfc3BhbiggZGV2LCAmZGVwdGggKTsKKwkJcmV0ID0gcjEyOF9jY2VfZGlzcGF0Y2hfcmVhZF9zcGFuKGRldiwgJmRlcHRoKTsKIAkJYnJlYWs7CiAJY2FzZSBSMTI4X1JFQURfUElYRUxTOgotCQlyZXQgPSByMTI4X2NjZV9kaXNwYXRjaF9yZWFkX3BpeGVscyggZGV2LCAmZGVwdGggKTsKKwkJcmV0ID0gcjEyOF9jY2VfZGlzcGF0Y2hfcmVhZF9waXhlbHMoZGV2LCAmZGVwdGgpOwogCQlicmVhazsKIAl9CiAKQEAgLTE1NjUsMzEgKzE1NDMsMzAgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHIxMjhfY2NlX3N0aXBwbGUoIERSTV9JT0NUTF9BUkdTICkKK3N0YXRpYyBpbnQgcjEyOF9jY2Vfc3RpcHBsZShEUk1fSU9DVExfQVJHUykKIHsKIAlEUk1fREVWSUNFOwogCWRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWRybV9yMTI4X3N0aXBwbGVfdCBzdGlwcGxlOwogCXUzMiBtYXNrWzMyXTsKIAotCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTiggZGV2LCBmaWxwICk7CisJTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlscCk7CiAKLQlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwoIHN0aXBwbGUsIChkcm1fcjEyOF9zdGlwcGxlX3QgX191c2VyICopIGRhdGEsCi0JCQkgICAgIHNpemVvZihzdGlwcGxlKSApOworCURSTV9DT1BZX0ZST01fVVNFUl9JT0NUTChzdGlwcGxlLCAoZHJtX3IxMjhfc3RpcHBsZV90IF9fdXNlciAqKSBkYXRhLAorCQkJCSBzaXplb2Yoc3RpcHBsZSkpOwogCi0JaWYgKCBEUk1fQ09QWV9GUk9NX1VTRVIoICZtYXNrLCBzdGlwcGxlLm1hc2ssCi0JCQkgICAgIDMyICogc2l6ZW9mKHUzMikgKSApCi0JCXJldHVybiBEUk1fRVJSKCBFRkFVTFQgKTsKKwlpZiAoRFJNX0NPUFlfRlJPTV9VU0VSKCZtYXNrLCBzdGlwcGxlLm1hc2ssIDMyICogc2l6ZW9mKHUzMikpKQorCQlyZXR1cm4gRFJNX0VSUihFRkFVTFQpOwogCi0JUklOR19TUEFDRV9URVNUX1dJVEhfUkVUVVJOKCBkZXZfcHJpdiApOworCVJJTkdfU1BBQ0VfVEVTVF9XSVRIX1JFVFVSTihkZXZfcHJpdik7CiAKLQlyMTI4X2NjZV9kaXNwYXRjaF9zdGlwcGxlKCBkZXYsIG1hc2sgKTsKKwlyMTI4X2NjZV9kaXNwYXRjaF9zdGlwcGxlKGRldiwgbWFzayk7CiAKIAlDT01NSVRfUklORygpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHIxMjhfY2NlX2luZGlyZWN0KCBEUk1fSU9DVExfQVJHUyApCitzdGF0aWMgaW50IHIxMjhfY2NlX2luZGlyZWN0KERSTV9JT0NUTF9BUkdTKQogewogCURSTV9ERVZJQ0U7CiAJZHJtX3IxMjhfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CkBAIC0xNjAxLDQ3ICsxNTc4LDQ2IEBACiAJUklOR19MT0NBTFM7CiAjZW5kaWYKIAotCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTiggZGV2LCBmaWxwICk7CisJTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlscCk7CiAKLQlpZiAoICFkZXZfcHJpdiApIHsKLQkJRFJNX0VSUk9SKCAiJXMgY2FsbGVkIHdpdGggbm8gaW5pdGlhbGl6YXRpb25cbiIsIF9fRlVOQ1RJT05fXyApOworCWlmICghZGV2X3ByaXYpIHsKKwkJRFJNX0VSUk9SKCIlcyBjYWxsZWQgd2l0aCBubyBpbml0aWFsaXphdGlvblxuIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAl9CiAKLQlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwoIGluZGlyZWN0LCAoZHJtX3IxMjhfaW5kaXJlY3RfdCBfX3VzZXIgKikgZGF0YSwKLQkJCSAgICAgc2l6ZW9mKGluZGlyZWN0KSApOworCURSTV9DT1BZX0ZST01fVVNFUl9JT0NUTChpbmRpcmVjdCwgKGRybV9yMTI4X2luZGlyZWN0X3QgX191c2VyICopIGRhdGEsCisJCQkJIHNpemVvZihpbmRpcmVjdCkpOwogCi0JRFJNX0RFQlVHKCAiaW5kaXJlY3Q6IGlkeD0lZCBzPSVkIGU9JWQgZD0lZFxuIiwKLQkJICAgaW5kaXJlY3QuaWR4LCBpbmRpcmVjdC5zdGFydCwKLQkJICAgaW5kaXJlY3QuZW5kLCBpbmRpcmVjdC5kaXNjYXJkICk7CisJRFJNX0RFQlVHKCJpbmRpcmVjdDogaWR4PSVkIHM9JWQgZT0lZCBkPSVkXG4iLAorCQkgIGluZGlyZWN0LmlkeCwgaW5kaXJlY3Quc3RhcnQsIGluZGlyZWN0LmVuZCwgaW5kaXJlY3QuZGlzY2FyZCk7CiAKLQlpZiAoIGluZGlyZWN0LmlkeCA8IDAgfHwgaW5kaXJlY3QuaWR4ID49IGRtYS0+YnVmX2NvdW50ICkgewotCQlEUk1fRVJST1IoICJidWZmZXIgaW5kZXggJWQgKG9mICVkIG1heClcbiIsCi0JCQkgICBpbmRpcmVjdC5pZHgsIGRtYS0+YnVmX2NvdW50IC0gMSApOworCWlmIChpbmRpcmVjdC5pZHggPCAwIHx8IGluZGlyZWN0LmlkeCA+PSBkbWEtPmJ1Zl9jb3VudCkgeworCQlEUk1fRVJST1IoImJ1ZmZlciBpbmRleCAlZCAob2YgJWQgbWF4KVxuIiwKKwkJCSAgaW5kaXJlY3QuaWR4LCBkbWEtPmJ1Zl9jb3VudCAtIDEpOwogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCX0KIAogCWJ1ZiA9IGRtYS0+YnVmbGlzdFtpbmRpcmVjdC5pZHhdOwogCWJ1Zl9wcml2ID0gYnVmLT5kZXZfcHJpdmF0ZTsKIAotCWlmICggYnVmLT5maWxwICE9IGZpbHAgKSB7Ci0JCURSTV9FUlJPUiggInByb2Nlc3MgJWQgdXNpbmcgYnVmZmVyIG93bmVkIGJ5ICVwXG4iLAotCQkJICAgRFJNX0NVUlJFTlRQSUQsIGJ1Zi0+ZmlscCApOworCWlmIChidWYtPmZpbHAgIT0gZmlscCkgeworCQlEUk1fRVJST1IoInByb2Nlc3MgJWQgdXNpbmcgYnVmZmVyIG93bmVkIGJ5ICVwXG4iLAorCQkJICBEUk1fQ1VSUkVOVFBJRCwgYnVmLT5maWxwKTsKIAkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAl9Ci0JaWYgKCBidWYtPnBlbmRpbmcgKSB7Ci0JCURSTV9FUlJPUiggInNlbmRpbmcgcGVuZGluZyBidWZmZXIgJWRcbiIsIGluZGlyZWN0LmlkeCApOworCWlmIChidWYtPnBlbmRpbmcpIHsKKwkJRFJNX0VSUk9SKCJzZW5kaW5nIHBlbmRpbmcgYnVmZmVyICVkXG4iLCBpbmRpcmVjdC5pZHgpOwogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCX0KIAotCWlmICggaW5kaXJlY3Quc3RhcnQgPCBidWYtPnVzZWQgKSB7Ci0JCURSTV9FUlJPUiggInJldXNpbmcgaW5kaXJlY3Q6IHN0YXJ0PTB4JXggYWN0dWFsPTB4JXhcbiIsCi0JCQkgICBpbmRpcmVjdC5zdGFydCwgYnVmLT51c2VkICk7CisJaWYgKGluZGlyZWN0LnN0YXJ0IDwgYnVmLT51c2VkKSB7CisJCURSTV9FUlJPUigicmV1c2luZyBpbmRpcmVjdDogc3RhcnQ9MHgleCBhY3R1YWw9MHgleFxuIiwKKwkJCSAgaW5kaXJlY3Quc3RhcnQsIGJ1Zi0+dXNlZCk7CiAJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiAJfQogCi0JUklOR19TUEFDRV9URVNUX1dJVEhfUkVUVVJOKCBkZXZfcHJpdiApOwotCVZCX0FHRV9URVNUX1dJVEhfUkVUVVJOKCBkZXZfcHJpdiApOworCVJJTkdfU1BBQ0VfVEVTVF9XSVRIX1JFVFVSTihkZXZfcHJpdik7CisJVkJfQUdFX1RFU1RfV0lUSF9SRVRVUk4oZGV2X3ByaXYpOwogCiAJYnVmLT51c2VkID0gaW5kaXJlY3QuZW5kOwogCWJ1Zl9wcml2LT5kaXNjYXJkID0gaW5kaXJlY3QuZGlzY2FyZDsKQEAgLTE2NTAsNyArMTYyNiw3IEBACiAJLyogV2FpdCBmb3IgdGhlIDNEIHN0cmVhbSB0byBpZGxlIGJlZm9yZSB0aGUgaW5kaXJlY3QgYnVmZmVyCiAJICogY29udGFpbmluZyAyRCBhY2NlbGVyYXRpb24gY29tbWFuZHMgaXMgcHJvY2Vzc2VkLgogCSAqLwotCUJFR0lOX1JJTkcoIDIgKTsKKwlCRUdJTl9SSU5HKDIpOwogCVJBREVPTl9XQUlUX1VOVElMXzNEX0lETEUoKTsKIAlBRFZBTkNFX1JJTkcoKTsKICNlbmRpZgpAQCAtMTY1OSwzMCArMTYzNSwzMCBAQAogCSAqIFggc2VydmVyLiAgVGhpcyBpcyBpbnNlY3VyZSBhbmQgaXMgdGh1cyBvbmx5IGF2YWlsYWJsZSB0bwogCSAqIHByaXZpbGVnZWQgY2xpZW50cy4KIAkgKi8KLQlyMTI4X2NjZV9kaXNwYXRjaF9pbmRpcmVjdCggZGV2LCBidWYsIGluZGlyZWN0LnN0YXJ0LCBpbmRpcmVjdC5lbmQgKTsKKwlyMTI4X2NjZV9kaXNwYXRjaF9pbmRpcmVjdChkZXYsIGJ1ZiwgaW5kaXJlY3Quc3RhcnQsIGluZGlyZWN0LmVuZCk7CiAKIAlDT01NSVRfUklORygpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHIxMjhfZ2V0cGFyYW0oIERSTV9JT0NUTF9BUkdTICkKK3N0YXRpYyBpbnQgcjEyOF9nZXRwYXJhbShEUk1fSU9DVExfQVJHUykKIHsKIAlEUk1fREVWSUNFOwogCWRybV9yMTI4X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWRybV9yMTI4X2dldHBhcmFtX3QgcGFyYW07CiAJaW50IHZhbHVlOwogCi0JaWYgKCAhZGV2X3ByaXYgKSB7Ci0JCURSTV9FUlJPUiggIiVzIGNhbGxlZCB3aXRoIG5vIGluaXRpYWxpemF0aW9uXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwlpZiAoIWRldl9wcml2KSB7CisJCURSTV9FUlJPUigiJXMgY2FsbGVkIHdpdGggbm8gaW5pdGlhbGl6YXRpb25cbiIsIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiAJfQogCi0JRFJNX0NPUFlfRlJPTV9VU0VSX0lPQ1RMKCBwYXJhbSwgKGRybV9yMTI4X2dldHBhcmFtX3QgX191c2VyICopZGF0YSwKLQkJCSAgICAgc2l6ZW9mKHBhcmFtKSApOworCURSTV9DT1BZX0ZST01fVVNFUl9JT0NUTChwYXJhbSwgKGRybV9yMTI4X2dldHBhcmFtX3QgX191c2VyICopIGRhdGEsCisJCQkJIHNpemVvZihwYXJhbSkpOwogCi0JRFJNX0RFQlVHKCAicGlkPSVkXG4iLCBEUk1fQ1VSUkVOVFBJRCApOworCURSTV9ERUJVRygicGlkPSVkXG4iLCBEUk1fQ1VSUkVOVFBJRCk7CiAKLQlzd2l0Y2goIHBhcmFtLnBhcmFtICkgeworCXN3aXRjaCAocGFyYW0ucGFyYW0pIHsKIAljYXNlIFIxMjhfUEFSQU1fSVJRX05SOgogCQl2YWx1ZSA9IGRldi0+aXJxOwogCQlicmVhazsKQEAgLTE2OTAsNDcgKzE2NjYsNDcgQEAKIAkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAl9CiAKLQlpZiAoIERSTV9DT1BZX1RPX1VTRVIoIHBhcmFtLnZhbHVlLCAmdmFsdWUsIHNpemVvZihpbnQpICkgKSB7Ci0JCURSTV9FUlJPUiggImNvcHlfdG9fdXNlclxuIiApOworCWlmIChEUk1fQ09QWV9UT19VU0VSKHBhcmFtLnZhbHVlLCAmdmFsdWUsIHNpemVvZihpbnQpKSkgeworCQlEUk1fRVJST1IoImNvcHlfdG9fdXNlclxuIik7CiAJCXJldHVybiBEUk1fRVJSKEVGQVVMVCk7CiAJfQotCQorCiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgcjEyOF9kcml2ZXJfcHJlcmVsZWFzZShkcm1fZGV2aWNlX3QgKmRldiwgRFJNRklMRSBmaWxwKQordm9pZCByMTI4X2RyaXZlcl9wcmVyZWxlYXNlKGRybV9kZXZpY2VfdCAqIGRldiwgRFJNRklMRSBmaWxwKQogewotCWlmICggZGV2LT5kZXZfcHJpdmF0ZSApIHsKKwlpZiAoZGV2LT5kZXZfcHJpdmF0ZSkgewogCQlkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQkJaWYgKCBkZXZfcHJpdi0+cGFnZV9mbGlwcGluZyApIHsKLQkJCXIxMjhfZG9fY2xlYW51cF9wYWdlZmxpcCggZGV2ICk7CisJCWlmIChkZXZfcHJpdi0+cGFnZV9mbGlwcGluZykgeworCQkJcjEyOF9kb19jbGVhbnVwX3BhZ2VmbGlwKGRldik7CiAJCX0KLQl9CQkJCisJfQogfQogCi12b2lkIHIxMjhfZHJpdmVyX3ByZXRha2Vkb3duKGRybV9kZXZpY2VfdCAqZGV2KQordm9pZCByMTI4X2RyaXZlcl9wcmV0YWtlZG93bihkcm1fZGV2aWNlX3QgKiBkZXYpCiB7Ci0JcjEyOF9kb19jbGVhbnVwX2NjZSggZGV2ICk7CisJcjEyOF9kb19jbGVhbnVwX2NjZShkZXYpOwogfQogCiBkcm1faW9jdGxfZGVzY190IHIxMjhfaW9jdGxzW10gPSB7Ci0JW0RSTV9JT0NUTF9OUihEUk1fUjEyOF9JTklUKV0gICAgICAgPSB7IHIxMjhfY2NlX2luaXQsICAgICAxLCAxIH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fUjEyOF9DQ0VfU1RBUlQpXSAgPSB7IHIxMjhfY2NlX3N0YXJ0LCAgICAxLCAxIH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fUjEyOF9DQ0VfU1RPUCldICAgPSB7IHIxMjhfY2NlX3N0b3AsICAgICAxLCAxIH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fUjEyOF9DQ0VfUkVTRVQpXSAgPSB7IHIxMjhfY2NlX3Jlc2V0LCAgICAxLCAxIH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fUjEyOF9DQ0VfSURMRSldICAgPSB7IHIxMjhfY2NlX2lkbGUsICAgICAxLCAwIH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fUjEyOF9SRVNFVCldICAgICAgPSB7IHIxMjhfZW5naW5lX3Jlc2V0LCAxLCAwIH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fUjEyOF9GVUxMU0NSRUVOKV0gPSB7IHIxMjhfZnVsbHNjcmVlbiwgICAxLCAwIH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fUjEyOF9TV0FQKV0gICAgICAgPSB7IHIxMjhfY2NlX3N3YXAsICAgICAxLCAwIH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fUjEyOF9GTElQKV0gICAgICAgPSB7IHIxMjhfY2NlX2ZsaXAsICAgICAxLCAwIH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fUjEyOF9DTEVBUildICAgICAgPSB7IHIxMjhfY2NlX2NsZWFyLCAgICAxLCAwIH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fUjEyOF9WRVJURVgpXSAgICAgPSB7IHIxMjhfY2NlX3ZlcnRleCwgICAxLCAwIH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fUjEyOF9JTkRJQ0VTKV0gICAgPSB7IHIxMjhfY2NlX2luZGljZXMsICAxLCAwIH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fUjEyOF9CTElUKV0gICAgICAgPSB7IHIxMjhfY2NlX2JsaXQsICAgICAxLCAwIH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fUjEyOF9ERVBUSCldICAgICAgPSB7IHIxMjhfY2NlX2RlcHRoLCAgICAxLCAwIH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fUjEyOF9TVElQUExFKV0gICAgPSB7IHIxMjhfY2NlX3N0aXBwbGUsICAxLCAwIH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fUjEyOF9JTkRJUkVDVCldICAgPSB7IHIxMjhfY2NlX2luZGlyZWN0LCAxLCAxIH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fUjEyOF9HRVRQQVJBTSldICAgPSB7IHIxMjhfZ2V0cGFyYW0sIDEsIDAgfSwKKwlbRFJNX0lPQ1RMX05SKERSTV9SMTI4X0lOSVQpXSA9IHtyMTI4X2NjZV9pbml0LCAxLCAxfSwKKwlbRFJNX0lPQ1RMX05SKERSTV9SMTI4X0NDRV9TVEFSVCldID0ge3IxMjhfY2NlX3N0YXJ0LCAxLCAxfSwKKwlbRFJNX0lPQ1RMX05SKERSTV9SMTI4X0NDRV9TVE9QKV0gPSB7cjEyOF9jY2Vfc3RvcCwgMSwgMX0sCisJW0RSTV9JT0NUTF9OUihEUk1fUjEyOF9DQ0VfUkVTRVQpXSA9IHtyMTI4X2NjZV9yZXNldCwgMSwgMX0sCisJW0RSTV9JT0NUTF9OUihEUk1fUjEyOF9DQ0VfSURMRSldID0ge3IxMjhfY2NlX2lkbGUsIDEsIDB9LAorCVtEUk1fSU9DVExfTlIoRFJNX1IxMjhfUkVTRVQpXSA9IHtyMTI4X2VuZ2luZV9yZXNldCwgMSwgMH0sCisJW0RSTV9JT0NUTF9OUihEUk1fUjEyOF9GVUxMU0NSRUVOKV0gPSB7cjEyOF9mdWxsc2NyZWVuLCAxLCAwfSwKKwlbRFJNX0lPQ1RMX05SKERSTV9SMTI4X1NXQVApXSA9IHtyMTI4X2NjZV9zd2FwLCAxLCAwfSwKKwlbRFJNX0lPQ1RMX05SKERSTV9SMTI4X0ZMSVApXSA9IHtyMTI4X2NjZV9mbGlwLCAxLCAwfSwKKwlbRFJNX0lPQ1RMX05SKERSTV9SMTI4X0NMRUFSKV0gPSB7cjEyOF9jY2VfY2xlYXIsIDEsIDB9LAorCVtEUk1fSU9DVExfTlIoRFJNX1IxMjhfVkVSVEVYKV0gPSB7cjEyOF9jY2VfdmVydGV4LCAxLCAwfSwKKwlbRFJNX0lPQ1RMX05SKERSTV9SMTI4X0lORElDRVMpXSA9IHtyMTI4X2NjZV9pbmRpY2VzLCAxLCAwfSwKKwlbRFJNX0lPQ1RMX05SKERSTV9SMTI4X0JMSVQpXSA9IHtyMTI4X2NjZV9ibGl0LCAxLCAwfSwKKwlbRFJNX0lPQ1RMX05SKERSTV9SMTI4X0RFUFRIKV0gPSB7cjEyOF9jY2VfZGVwdGgsIDEsIDB9LAorCVtEUk1fSU9DVExfTlIoRFJNX1IxMjhfU1RJUFBMRSldID0ge3IxMjhfY2NlX3N0aXBwbGUsIDEsIDB9LAorCVtEUk1fSU9DVExfTlIoRFJNX1IxMjhfSU5ESVJFQ1QpXSA9IHtyMTI4X2NjZV9pbmRpcmVjdCwgMSwgMX0sCisJW0RSTV9JT0NUTF9OUihEUk1fUjEyOF9HRVRQQVJBTSldID0ge3IxMjhfZ2V0cGFyYW0sIDEsIDB9LAogfTsKIAogaW50IHIxMjhfbWF4X2lvY3RsID0gRFJNX0FSUkFZX1NJWkUocjEyOF9pb2N0bHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9yMzAwX2NtZGJ1Zi5jIGIvZHJpdmVycy9jaGFyL2RybS9yMzAwX2NtZGJ1Zi5jCmluZGV4IDYyM2YxZjQuLmFhNjZmNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vcjMwMF9jbWRidWYuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL3IzMDBfY21kYnVmLmMKQEAgLTM3LDcgKzM3LDYgQEAKICNpbmNsdWRlICJyYWRlb25fZHJ2LmgiCiAjaW5jbHVkZSAicjMwMF9yZWcuaCIKIAotCiAjZGVmaW5lIFIzMDBfU0lNVUxUQU5FT1VTX0NMSVBSRUNUUwkJNAogCiAvKiBWYWx1ZXMgZm9yIFIzMDBfUkVfQ0xJUFJFQ1RfQ05UTCBkZXBlbmRpbmcgb24gdGhlIG51bWJlciBvZiBjbGlwcmVjdHMKQEAgLTQ5LDE0ICs0OCwxMiBAQAogCTB4RkZGRQogfTsKIAotCiAvKioKICAqIEVtaXQgdXAgdG8gUjMwMF9TSU1VTFRBTkVPVVNfQ0xJUFJFQ1RTIGNsaXByZWN0cyBmcm9tIHRoZSBnaXZlbiBjb21tYW5kCiAgKiBidWZmZXIsIHN0YXJ0aW5nIHdpdGggaW5kZXggbi4KICAqLwotc3RhdGljIGludCByMzAwX2VtaXRfY2xpcHJlY3RzKGRybV9yYWRlb25fcHJpdmF0ZV90KiBkZXZfcHJpdiwKLQkJCSAgICAgICBkcm1fcmFkZW9uX2NtZF9idWZmZXJfdCogY21kYnVmLAotCQkJICAgICAgIGludCBuKQorc3RhdGljIGludCByMzAwX2VtaXRfY2xpcHJlY3RzKGRybV9yYWRlb25fcHJpdmF0ZV90ICogZGV2X3ByaXYsCisJCQkgICAgICAgZHJtX3JhZGVvbl9jbWRfYnVmZmVyX3QgKiBjbWRidWYsIGludCBuKQogewogCWRybV9jbGlwX3JlY3RfdCBib3g7CiAJaW50IG5yOwpAQCAtNzAsMzggKzY3LDQ3IEBACiAJRFJNX0RFQlVHKCIlaSBjbGlwcmVjdHNcbiIsIG5yKTsKIAogCWlmIChucikgewotCQlCRUdJTl9SSU5HKDYgKyBucioyKTsKLQkJT1VUX1JJTkcoIENQX1BBQ0tFVDAoIFIzMDBfUkVfQ0xJUFJFQ1RfVExfMCwgbnIqMiAtIDEgKSApOworCQlCRUdJTl9SSU5HKDYgKyBuciAqIDIpOworCQlPVVRfUklORyhDUF9QQUNLRVQwKFIzMDBfUkVfQ0xJUFJFQ1RfVExfMCwgbnIgKiAyIC0gMSkpOwogCi0JCWZvcihpID0gMDsgaSA8IG5yOyArK2kpIHsKLQkJCWlmIChEUk1fQ09QWV9GUk9NX1VTRVJfVU5DSEVDS0VEKCZib3gsICZjbWRidWYtPmJveGVzW24raV0sIHNpemVvZihib3gpKSkgeworCQlmb3IgKGkgPSAwOyBpIDwgbnI7ICsraSkgeworCQkJaWYgKERSTV9DT1BZX0ZST01fVVNFUl9VTkNIRUNLRUQKKwkJCSAgICAoJmJveCwgJmNtZGJ1Zi0+Ym94ZXNbbiArIGldLCBzaXplb2YoYm94KSkpIHsKIAkJCQlEUk1fRVJST1IoImNvcHkgY2xpcHJlY3QgZmF1bHRlZFxuIik7CiAJCQkJcmV0dXJuIERSTV9FUlIoRUZBVUxUKTsKIAkJCX0KIAotCQkJYm94LngxID0gKGJveC54MSArIFIzMDBfQ0xJUFJFQ1RfT0ZGU0VUKSAmIFIzMDBfQ0xJUFJFQ1RfTUFTSzsKLQkJCWJveC55MSA9IChib3gueTEgKyBSMzAwX0NMSVBSRUNUX09GRlNFVCkgJiBSMzAwX0NMSVBSRUNUX01BU0s7Ci0JCQlib3gueDIgPSAoYm94LngyICsgUjMwMF9DTElQUkVDVF9PRkZTRVQpICYgUjMwMF9DTElQUkVDVF9NQVNLOwotCQkJYm94LnkyID0gKGJveC55MiArIFIzMDBfQ0xJUFJFQ1RfT0ZGU0VUKSAmIFIzMDBfQ0xJUFJFQ1RfTUFTSzsKKwkJCWJveC54MSA9CisJCQkgICAgKGJveC54MSArCisJCQkgICAgIFIzMDBfQ0xJUFJFQ1RfT0ZGU0VUKSAmIFIzMDBfQ0xJUFJFQ1RfTUFTSzsKKwkJCWJveC55MSA9CisJCQkgICAgKGJveC55MSArCisJCQkgICAgIFIzMDBfQ0xJUFJFQ1RfT0ZGU0VUKSAmIFIzMDBfQ0xJUFJFQ1RfTUFTSzsKKwkJCWJveC54MiA9CisJCQkgICAgKGJveC54MiArCisJCQkgICAgIFIzMDBfQ0xJUFJFQ1RfT0ZGU0VUKSAmIFIzMDBfQ0xJUFJFQ1RfTUFTSzsKKwkJCWJveC55MiA9CisJCQkgICAgKGJveC55MiArCisJCQkgICAgIFIzMDBfQ0xJUFJFQ1RfT0ZGU0VUKSAmIFIzMDBfQ0xJUFJFQ1RfTUFTSzsKIAogCQkJT1VUX1JJTkcoKGJveC54MSA8PCBSMzAwX0NMSVBSRUNUX1hfU0hJRlQpIHwKLQkJCQkJKGJveC55MSA8PCBSMzAwX0NMSVBSRUNUX1lfU0hJRlQpKTsKKwkJCQkgKGJveC55MSA8PCBSMzAwX0NMSVBSRUNUX1lfU0hJRlQpKTsKIAkJCU9VVF9SSU5HKChib3gueDIgPDwgUjMwMF9DTElQUkVDVF9YX1NISUZUKSB8Ci0JCQkJCShib3gueTIgPDwgUjMwMF9DTElQUkVDVF9ZX1NISUZUKSk7CisJCQkJIChib3gueTIgPDwgUjMwMF9DTElQUkVDVF9ZX1NISUZUKSk7CiAJCX0KIAotCQlPVVRfUklOR19SRUcoIFIzMDBfUkVfQ0xJUFJFQ1RfQ05UTCwgcjMwMF9jbGlwcmVjdF9jbnRsW25yLTFdICk7CisJCU9VVF9SSU5HX1JFRyhSMzAwX1JFX0NMSVBSRUNUX0NOVEwsIHIzMDBfY2xpcHJlY3RfY250bFtuciAtIDFdKTsKIAogCQkvKiBUT0RPL1NFQ1VSSVRZOiBGb3JjZSBzY2lzc29ycyB0byBhIHNhZmUgdmFsdWUsIG90aGVyd2lzZSB0aGUKLQkJKiBjbGllbnQgbWlnaHQgYmUgYWJsZSB0byB0cmFtcGxlIG92ZXIgbWVtb3J5LgotCQkqIFRoZSBpbXBhY3Qgc2hvdWxkIGJlIHZlcnkgbGltaXRlZCwgYnV0IEknZCByYXRoZXIgYmUgc2FmZSB0aGFuCi0JCSogc29ycnkuCi0JCSovCi0JCU9VVF9SSU5HKCBDUF9QQUNLRVQwKCBSMzAwX1JFX1NDSVNTT1JTX1RMLCAxICkgKTsKLQkJT1VUX1JJTkcoIDAgKTsKLQkJT1VUX1JJTkcoIFIzMDBfU0NJU1NPUlNfWF9NQVNLIHwgUjMwMF9TQ0lTU09SU19ZX01BU0sgKTsKKwkJICogY2xpZW50IG1pZ2h0IGJlIGFibGUgdG8gdHJhbXBsZSBvdmVyIG1lbW9yeS4KKwkJICogVGhlIGltcGFjdCBzaG91bGQgYmUgdmVyeSBsaW1pdGVkLCBidXQgSSdkIHJhdGhlciBiZSBzYWZlIHRoYW4KKwkJICogc29ycnkuCisJCSAqLworCQlPVVRfUklORyhDUF9QQUNLRVQwKFIzMDBfUkVfU0NJU1NPUlNfVEwsIDEpKTsKKwkJT1VUX1JJTkcoMCk7CisJCU9VVF9SSU5HKFIzMDBfU0NJU1NPUlNfWF9NQVNLIHwgUjMwMF9TQ0lTU09SU19ZX01BU0spOwogCQlBRFZBTkNFX1JJTkcoKTsKLQkJfSBlbHNlIHsKKwl9IGVsc2UgewogCQkvKiBXaHkgd2UgYWxsb3cgemVybyBjbGlwcmVjdCByZW5kZXJpbmc6CiAJCSAqIFRoZXJlIGFyZSBzb21lIGNvbW1hbmRzIGluIGEgY29tbWFuZCBidWZmZXIgdGhhdCBtdXN0IGJlIHN1Ym1pdHRlZAogCQkgKiBldmVuIHdoZW4gdGhlcmUgYXJlIG5vIGNsaXByZWN0cywgZS5nLiBETUEgYnVmZmVyIGRpc2NhcmQKQEAgLTExOCwyOCArMTI0LDI3IEBACiAJCSAqIGNhbid0IHByb2R1Y2UgYW55IGZyYWdtZW50cy4KIAkJICovCiAJCUJFR0lOX1JJTkcoMik7Ci0JCU9VVF9SSU5HX1JFRyggUjMwMF9SRV9DTElQUkVDVF9DTlRMLCAwICk7CisJCU9VVF9SSU5HX1JFRyhSMzAwX1JFX0NMSVBSRUNUX0NOVEwsIDApOwogCQlBRFZBTkNFX1JJTkcoKTsKLQkJfQorCX0KIAogCXJldHVybiAwOwogfQogCi11OCAgcjMwMF9yZWdfZmxhZ3NbMHgxMDAwMD4+Ml07Ci0KK3U4IHIzMDBfcmVnX2ZsYWdzWzB4MTAwMDAgPj4gMl07CiAKIHZvaWQgcjMwMF9pbml0X3JlZ19mbGFncyh2b2lkKQogewogCWludCBpOwotCW1lbXNldChyMzAwX3JlZ19mbGFncywgMCwgMHgxMDAwMD4+Mik7Ci0JI2RlZmluZSBBRERfUkFOR0VfTUFSSyhyZWcsIGNvdW50LG1hcmspIFwKKwltZW1zZXQocjMwMF9yZWdfZmxhZ3MsIDAsIDB4MTAwMDAgPj4gMik7CisjZGVmaW5lIEFERF9SQU5HRV9NQVJLKHJlZywgY291bnQsbWFyaykgXAogCQlmb3IoaT0oKHJlZyk+PjIpO2k8KChyZWcpPj4yKSsoY291bnQpO2krKylcCiAJCQlyMzAwX3JlZ19mbGFnc1tpXXw9KG1hcmspOwotCQotCSNkZWZpbmUgTUFSS19TQUZFCQkxCi0JI2RlZmluZSBNQVJLX0NIRUNLX09GRlNFVAkyCi0JCi0JI2RlZmluZSBBRERfUkFOR0UocmVnLCBjb3VudCkJQUREX1JBTkdFX01BUksocmVnLCBjb3VudCwgTUFSS19TQUZFKQorCisjZGVmaW5lIE1BUktfU0FGRQkJMQorI2RlZmluZSBNQVJLX0NIRUNLX09GRlNFVAkyCisKKyNkZWZpbmUgQUREX1JBTkdFKHJlZywgY291bnQpCUFERF9SQU5HRV9NQVJLKHJlZywgY291bnQsIE1BUktfU0FGRSkKIAogCS8qIHRoZXNlIG1hdGNoIGNtZHVjcygpIGNvbW1hbmQgaW4gcjMwMF9kcml2ZXIvcjMwMC9yMzAwX2NtZGJ1Zi5jICovCiAJQUREX1JBTkdFKFIzMDBfU0VfVlBPUlRfWFNDQUxFLCA2KTsKQEAgLTE5MywxNSArMTk4LDE1IEBACiAJQUREX1JBTkdFKFIzMDBfUkIzRF9DQkxFTkQsIDIpOwogCUFERF9SQU5HRShSMzAwX1JCM0RfQ09MT1JNQVNLLCAxKTsKIAlBRERfUkFOR0UoMHg0RTEwLCAzKTsKLQlBRERfUkFOR0VfTUFSSyhSMzAwX1JCM0RfQ09MT1JPRkZTRVQwLCAxLCBNQVJLX0NIRUNLX09GRlNFVCk7IC8qIGNoZWNrIG9mZnNldCAqLworCUFERF9SQU5HRV9NQVJLKFIzMDBfUkIzRF9DT0xPUk9GRlNFVDAsIDEsIE1BUktfQ0hFQ0tfT0ZGU0VUKTsJLyogY2hlY2sgb2Zmc2V0ICovCiAJQUREX1JBTkdFKFIzMDBfUkIzRF9DT0xPUlBJVENIMCwgMSk7CiAJQUREX1JBTkdFKDB4NEU1MCwgOSk7CiAJQUREX1JBTkdFKDB4NEU4OCwgMSk7CiAJQUREX1JBTkdFKDB4NEVBMCwgMik7CiAJQUREX1JBTkdFKFIzMDBfUkIzRF9aU1RFTkNJTF9DTlRMXzAsIDMpOwogCUFERF9SQU5HRSgweDRGMTAsIDQpOwotCUFERF9SQU5HRV9NQVJLKFIzMDBfUkIzRF9ERVBUSE9GRlNFVCwgMSwgTUFSS19DSEVDS19PRkZTRVQpOyAvKiBjaGVjayBvZmZzZXQgKi8KLQlBRERfUkFOR0UoUjMwMF9SQjNEX0RFUFRIUElUQ0gsIDEpOyAKKwlBRERfUkFOR0VfTUFSSyhSMzAwX1JCM0RfREVQVEhPRkZTRVQsIDEsIE1BUktfQ0hFQ0tfT0ZGU0VUKTsJLyogY2hlY2sgb2Zmc2V0ICovCisJQUREX1JBTkdFKFIzMDBfUkIzRF9ERVBUSFBJVENILCAxKTsKIAlBRERfUkFOR0UoMHg0RjI4LCAxKTsKIAlBRERfUkFOR0UoMHg0RjMwLCAyKTsKIAlBRERfUkFOR0UoMHg0RjQ0LCAxKTsKQEAgLTIxMSw3ICsyMTYsNyBAQAogCUFERF9SQU5HRShSMzAwX1RYX1VOSzFfMCwgMTYpOwogCUFERF9SQU5HRShSMzAwX1RYX1NJWkVfMCwgMTYpOwogCUFERF9SQU5HRShSMzAwX1RYX0ZPUk1BVF8wLCAxNik7Ci0JCS8qIFRleHR1cmUgb2Zmc2V0IGlzIGRhbmdlcm91cyBhbmQgbmVlZHMgbW9yZSBjaGVja2luZyAqLworCS8qIFRleHR1cmUgb2Zmc2V0IGlzIGRhbmdlcm91cyBhbmQgbmVlZHMgbW9yZSBjaGVja2luZyAqLwogCUFERF9SQU5HRV9NQVJLKFIzMDBfVFhfT0ZGU0VUXzAsIDE2LCBNQVJLX0NIRUNLX09GRlNFVCk7CiAJQUREX1JBTkdFKFIzMDBfVFhfVU5LNF8wLCAxNik7CiAJQUREX1JBTkdFKFIzMDBfVFhfQk9SREVSX0NPTE9SXzAsIDE2KTsKQEAgLTIyNCwzMyArMjI5LDQxIEBACiAKIH0KIAotc3RhdGljIF9faW5saW5lX18gaW50IHIzMDBfY2hlY2tfcmFuZ2UodW5zaWduZWQgIHJlZywgaW50IGNvdW50KQorc3RhdGljIF9faW5saW5lX18gaW50IHIzMDBfY2hlY2tfcmFuZ2UodW5zaWduZWQgcmVnLCBpbnQgY291bnQpCiB7CiAJaW50IGk7Ci0JaWYocmVnICYgfjB4ZmZmZilyZXR1cm4gLTE7Ci0JZm9yKGk9KHJlZz4+Mik7aTwocmVnPj4yKStjb3VudDtpKyspCi0JCWlmKHIzMDBfcmVnX2ZsYWdzW2ldIT1NQVJLX1NBRkUpcmV0dXJuIDE7CisJaWYgKHJlZyAmIH4weGZmZmYpCisJCXJldHVybiAtMTsKKwlmb3IgKGkgPSAocmVnID4+IDIpOyBpIDwgKHJlZyA+PiAyKSArIGNvdW50OyBpKyspCisJCWlmIChyMzAwX3JlZ19mbGFnc1tpXSAhPSBNQVJLX1NBRkUpCisJCQlyZXR1cm4gMTsKIAlyZXR1cm4gMDsKIH0KIAogICAvKiB3ZSBleHBlY3Qgb2Zmc2V0cyBwYXNzZWQgdG8gdGhlIGZyYW1lYnVmZmVyIHRvIGJlIGVpdGhlciB3aXRoaW4gdmlkZW8gbWVtb3J5IG9yCi0gICAgICB3aXRoaW4gQUdQIHNwYWNlICovCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgcjMwMF9jaGVja19vZmZzZXQoZHJtX3JhZGVvbl9wcml2YXRlX3QqIGRldl9wcml2LCB1MzIgb2Zmc2V0KQorICAgICB3aXRoaW4gQUdQIHNwYWNlICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgcjMwMF9jaGVja19vZmZzZXQoZHJtX3JhZGVvbl9wcml2YXRlX3QgKiBkZXZfcHJpdiwKKwkJCQkJdTMyIG9mZnNldCkKIHsKIAkvKiB3ZSByZWFseSB3YW50IHRvIGNoZWNrIGFnYWluc3QgZW5kIG9mIHZpZGVvIGFwZXJ0dXJlCi0JCWJ1dCB0aGlzIHZhbHVlIGlzIG5vdCBiZWluZyBrZXB0LiAKLQkJVGhpcyBjb2RlIGlzIGNvcnJlY3QgZm9yIG5vdyAoZG9lcyB0aGUgc2FtZSB0aGluZyBhcyB0aGUKLQkJY29kZSB0aGF0IHNldHMgTUNfRkJfTE9DQVRJT04pIGluIHJhZGVvbl9jcC5jICovCi0JaWYoKG9mZnNldD49ZGV2X3ByaXYtPmZiX2xvY2F0aW9uKSAmJiAKLQkJKG9mZnNldDxkZXZfcHJpdi0+Z2FydF92bV9zdGFydCkpcmV0dXJuIDA7Ci0JaWYoKG9mZnNldD49ZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQpICYmCi0JCSAob2Zmc2V0PGRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0K2Rldl9wcml2LT5nYXJ0X3NpemUpKXJldHVybiAwOworCSAgIGJ1dCB0aGlzIHZhbHVlIGlzIG5vdCBiZWluZyBrZXB0LgorCSAgIFRoaXMgY29kZSBpcyBjb3JyZWN0IGZvciBub3cgKGRvZXMgdGhlIHNhbWUgdGhpbmcgYXMgdGhlCisJICAgY29kZSB0aGF0IHNldHMgTUNfRkJfTE9DQVRJT04pIGluIHJhZGVvbl9jcC5jICovCisJaWYgKChvZmZzZXQgPj0gZGV2X3ByaXYtPmZiX2xvY2F0aW9uKSAmJgorCSAgICAob2Zmc2V0IDwgZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQpKQorCQlyZXR1cm4gMDsKKwlpZiAoKG9mZnNldCA+PSBkZXZfcHJpdi0+Z2FydF92bV9zdGFydCkgJiYKKwkgICAgKG9mZnNldCA8IGRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0ICsgZGV2X3ByaXYtPmdhcnRfc2l6ZSkpCisJCXJldHVybiAwOwogCXJldHVybiAxOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgcjMwMF9lbWl0X2NhcmVmdWxseV9jaGVja2VkX3BhY2tldDAoZHJtX3JhZGVvbl9wcml2YXRlX3QqIGRldl9wcml2LAotCQkJCQkJZHJtX3JhZGVvbl9jbWRfYnVmZmVyX3QqIGNtZGJ1ZiwKLQkJCQkJCWRybV9yMzAwX2NtZF9oZWFkZXJfdCBoZWFkZXIpCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgcjMwMF9lbWl0X2NhcmVmdWxseV9jaGVja2VkX3BhY2tldDAoZHJtX3JhZGVvbl9wcml2YXRlX3QgKgorCQkJCQkJCSAgZGV2X3ByaXYsCisJCQkJCQkJICBkcm1fcmFkZW9uX2NtZF9idWZmZXJfdAorCQkJCQkJCSAgKiBjbWRidWYsCisJCQkJCQkJICBkcm1fcjMwMF9jbWRfaGVhZGVyX3QKKwkJCQkJCQkgIGhlYWRlcikKIHsKIAlpbnQgcmVnOwogCWludCBzejsKQEAgLTI2MCwzNSArMjczLDQwIEBACiAKIAlzeiA9IGhlYWRlci5wYWNrZXQwLmNvdW50OwogCXJlZyA9IChoZWFkZXIucGFja2V0MC5yZWdoaSA8PCA4KSB8IGhlYWRlci5wYWNrZXQwLnJlZ2xvOwotCQotCWlmKChzej42NCl8fChzejwwKSl7Ci0JCURSTV9FUlJPUigiQ2Fubm90IGVtaXQgbW9yZSB0aGFuIDY0IHZhbHVlcyBhdCBhIHRpbWUgKHJlZz0lMDR4IHN6PSVkKVxuIiwgcmVnLCBzeik7CisKKwlpZiAoKHN6ID4gNjQpIHx8IChzeiA8IDApKSB7CisJCURSTV9FUlJPUgorCQkgICAgKCJDYW5ub3QgZW1pdCBtb3JlIHRoYW4gNjQgdmFsdWVzIGF0IGEgdGltZSAocmVnPSUwNHggc3o9JWQpXG4iLAorCQkgICAgIHJlZywgc3opOwogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwotCQl9Ci0JZm9yKGk9MDtpPHN6O2krKyl7Ci0JCXZhbHVlc1tpXT0oKGludCBfX3VzZXIqKWNtZGJ1Zi0+YnVmKVtpXTsKLQkJc3dpdGNoKHIzMDBfcmVnX2ZsYWdzWyhyZWc+PjIpK2ldKXsKKwl9CisJZm9yIChpID0gMDsgaSA8IHN6OyBpKyspIHsKKwkJdmFsdWVzW2ldID0gKChpbnQgX191c2VyICopY21kYnVmLT5idWYpW2ldOworCQlzd2l0Y2ggKHIzMDBfcmVnX2ZsYWdzWyhyZWcgPj4gMikgKyBpXSkgewogCQljYXNlIE1BUktfU0FGRToKIAkJCWJyZWFrOwogCQljYXNlIE1BUktfQ0hFQ0tfT0ZGU0VUOgotCQkJaWYocjMwMF9jaGVja19vZmZzZXQoZGV2X3ByaXYsICh1MzIpdmFsdWVzW2ldKSl7Ci0JCQkJRFJNX0VSUk9SKCJPZmZzZXQgZmFpbGVkIHJhbmdlIGNoZWNrIChyZWc9JTA0eCBzej0lZClcbiIsIHJlZywgc3opOworCQkJaWYgKHIzMDBfY2hlY2tfb2Zmc2V0KGRldl9wcml2LCAodTMyKSB2YWx1ZXNbaV0pKSB7CisJCQkJRFJNX0VSUk9SCisJCQkJICAgICgiT2Zmc2V0IGZhaWxlZCByYW5nZSBjaGVjayAocmVnPSUwNHggc3o9JWQpXG4iLAorCQkJCSAgICAgcmVnLCBzeik7CiAJCQkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKLQkJCQl9CisJCQl9CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCURSTV9FUlJPUigiUmVnaXN0ZXIgJTA0eCBmYWlsZWQgY2hlY2sgYXMgZmxhZz0lMDJ4XG4iLCByZWcraSo0LCByMzAwX3JlZ19mbGFnc1socmVnPj4yKStpXSk7CisJCQlEUk1fRVJST1IoIlJlZ2lzdGVyICUwNHggZmFpbGVkIGNoZWNrIGFzIGZsYWc9JTAyeFxuIiwKKwkJCQkgIHJlZyArIGkgKiA0LCByMzAwX3JlZ19mbGFnc1socmVnID4+IDIpICsgaV0pOwogCQkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKLQkJCX0KIAkJfQotCQkKLQlCRUdJTl9SSU5HKDErc3opOwotCU9VVF9SSU5HKCBDUF9QQUNLRVQwKCByZWcsIHN6LTEgKSApOwotCU9VVF9SSU5HX1RBQkxFKCB2YWx1ZXMsIHN6ICk7CisJfQorCisJQkVHSU5fUklORygxICsgc3opOworCU9VVF9SSU5HKENQX1BBQ0tFVDAocmVnLCBzeiAtIDEpKTsKKwlPVVRfUklOR19UQUJMRSh2YWx1ZXMsIHN6KTsKIAlBRFZBTkNFX1JJTkcoKTsKIAotCWNtZGJ1Zi0+YnVmICs9IHN6KjQ7Ci0JY21kYnVmLT5idWZzeiAtPSBzeio0OworCWNtZGJ1Zi0+YnVmICs9IHN6ICogNDsKKwljbWRidWYtPmJ1ZnN6IC09IHN6ICogNDsKIAogCXJldHVybiAwOwogfQpAQCAtMjk5LDkgKzMxNyw5IEBACiAgKgogICogTm90ZSB0aGF0IGNoZWNrcyBhcmUgcGVyZm9ybWVkIG9uIGNvbnRlbnRzIGFuZCBhZGRyZXNzZXMgb2YgdGhlIHJlZ2lzdGVycwogICovCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgcjMwMF9lbWl0X3BhY2tldDAoZHJtX3JhZGVvbl9wcml2YXRlX3QqIGRldl9wcml2LAotCQkJCQkJZHJtX3JhZGVvbl9jbWRfYnVmZmVyX3QqIGNtZGJ1ZiwKLQkJCQkJCWRybV9yMzAwX2NtZF9oZWFkZXJfdCBoZWFkZXIpCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgcjMwMF9lbWl0X3BhY2tldDAoZHJtX3JhZGVvbl9wcml2YXRlX3QgKiBkZXZfcHJpdiwKKwkJCQkJZHJtX3JhZGVvbl9jbWRfYnVmZmVyX3QgKiBjbWRidWYsCisJCQkJCWRybV9yMzAwX2NtZF9oZWFkZXJfdCBoZWFkZXIpCiB7CiAJaW50IHJlZzsKIAlpbnQgc3o7CkBAIC0zMTMsMzkgKzMzMSw0MCBAQAogCWlmICghc3opCiAJCXJldHVybiAwOwogCi0JaWYgKHN6KjQgPiBjbWRidWYtPmJ1ZnN6KQorCWlmIChzeiAqIDQgPiBjbWRidWYtPmJ1ZnN6KQogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwotCQkKLQlpZiAocmVnK3N6KjQgPj0gMHgxMDAwMCl7Ci0JCURSTV9FUlJPUigiTm8gc3VjaCByZWdpc3RlcnMgaW4gaGFyZHdhcmUgcmVnPSUwNHggc3o9JWRcbiIsIHJlZywgc3opOwotCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwotCQl9CiAKLQlpZihyMzAwX2NoZWNrX3JhbmdlKHJlZywgc3opKXsKKwlpZiAocmVnICsgc3ogKiA0ID49IDB4MTAwMDApIHsKKwkJRFJNX0VSUk9SKCJObyBzdWNoIHJlZ2lzdGVycyBpbiBoYXJkd2FyZSByZWc9JTA0eCBzej0lZFxuIiwgcmVnLAorCQkJICBzeik7CisJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CisJfQorCisJaWYgKHIzMDBfY2hlY2tfcmFuZ2UocmVnLCBzeikpIHsKIAkJLyogZ28gYW5kIGNoZWNrIGV2ZXJ5dGhpbmcgKi8KLQkJcmV0dXJuIHIzMDBfZW1pdF9jYXJlZnVsbHlfY2hlY2tlZF9wYWNrZXQwKGRldl9wcml2LCBjbWRidWYsIGhlYWRlcik7Ci0JCX0KKwkJcmV0dXJuIHIzMDBfZW1pdF9jYXJlZnVsbHlfY2hlY2tlZF9wYWNrZXQwKGRldl9wcml2LCBjbWRidWYsCisJCQkJCQkJICAgaGVhZGVyKTsKKwl9CiAJLyogdGhlIHJlc3Qgb2YgdGhlIGRhdGEgaXMgc2FmZSB0byBlbWl0LCB3aGF0ZXZlciB0aGUgdmFsdWVzIHRoZSB1c2VyIHBhc3NlZCAqLwogCi0JQkVHSU5fUklORygxK3N6KTsKLQlPVVRfUklORyggQ1BfUEFDS0VUMCggcmVnLCBzei0xICkgKTsKLQlPVVRfUklOR19UQUJMRSggKGludCBfX3VzZXIqKWNtZGJ1Zi0+YnVmLCBzeiApOworCUJFR0lOX1JJTkcoMSArIHN6KTsKKwlPVVRfUklORyhDUF9QQUNLRVQwKHJlZywgc3ogLSAxKSk7CisJT1VUX1JJTkdfVEFCTEUoKGludCBfX3VzZXIgKiljbWRidWYtPmJ1Ziwgc3opOwogCUFEVkFOQ0VfUklORygpOwogCi0JY21kYnVmLT5idWYgKz0gc3oqNDsKLQljbWRidWYtPmJ1ZnN6IC09IHN6KjQ7CisJY21kYnVmLT5idWYgKz0gc3ogKiA0OworCWNtZGJ1Zi0+YnVmc3ogLT0gc3ogKiA0OwogCiAJcmV0dXJuIDA7CiB9CiAKLQogLyoqCiAgKiBVcGxvYWRzIHVzZXItc3VwcGxpZWQgdmVydGV4IHByb2dyYW0gaW5zdHJ1Y3Rpb25zIG9yIHBhcmFtZXRlcnMgb250bwogICogdGhlIGdyYXBoaWNzIGNhcmQuCiAgKiBDYWxsZWQgYnkgcjMwMF9kb19jcF9jbWRidWYuCiAgKi8KLXN0YXRpYyBfX2lubGluZV9fIGludCByMzAwX2VtaXRfdnB1KGRybV9yYWRlb25fcHJpdmF0ZV90KiBkZXZfcHJpdiwKLQkJCQkgICAgZHJtX3JhZGVvbl9jbWRfYnVmZmVyX3QqIGNtZGJ1ZiwKK3N0YXRpYyBfX2lubGluZV9fIGludCByMzAwX2VtaXRfdnB1KGRybV9yYWRlb25fcHJpdmF0ZV90ICogZGV2X3ByaXYsCisJCQkJICAgIGRybV9yYWRlb25fY21kX2J1ZmZlcl90ICogY21kYnVmLAogCQkJCSAgICBkcm1fcjMwMF9jbWRfaGVhZGVyX3QgaGVhZGVyKQogewogCWludCBzejsKQEAgLTM1NywxMTQgKzM3NiwxMjEgQEAKIAogCWlmICghc3opCiAJCXJldHVybiAwOwotCWlmIChzeioxNiA+IGNtZGJ1Zi0+YnVmc3opCisJaWYgKHN6ICogMTYgPiBjbWRidWYtPmJ1ZnN6KQogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCi0JQkVHSU5fUklORyg1K3N6KjQpOworCUJFR0lOX1JJTkcoNSArIHN6ICogNCk7CiAJLyogV2FpdCBmb3IgVkFQIHRvIGNvbWUgdG8gc2Vuc2VzLi4gKi8KIAkvKiB0aGVyZSBpcyBubyBuZWVkIHRvIGVtaXQgaXQgbXVsdGlwbGUgdGltZXMsIChvbmx5IG9uY2UgYmVmb3JlIFZBUCBpcyBwcm9ncmFtbWVkLAogCSAgIGJ1dCB0aGlzIG9wdGltaXphdGlvbiBpcyBmb3IgbGF0ZXIgKi8KLQlPVVRfUklOR19SRUcoIFIzMDBfVkFQX1BWU19XQUlUSURMRSwgMCApOwotCU9VVF9SSU5HX1JFRyggUjMwMF9WQVBfUFZTX1VQTE9BRF9BRERSRVNTLCBhZGRyICk7Ci0JT1VUX1JJTkcoIENQX1BBQ0tFVDBfVEFCTEUoIFIzMDBfVkFQX1BWU19VUExPQURfREFUQSwgc3oqNCAtIDEgKSApOwotCU9VVF9SSU5HX1RBQkxFKCAoaW50IF9fdXNlciopY21kYnVmLT5idWYsIHN6KjQgKTsKKwlPVVRfUklOR19SRUcoUjMwMF9WQVBfUFZTX1dBSVRJRExFLCAwKTsKKwlPVVRfUklOR19SRUcoUjMwMF9WQVBfUFZTX1VQTE9BRF9BRERSRVNTLCBhZGRyKTsKKwlPVVRfUklORyhDUF9QQUNLRVQwX1RBQkxFKFIzMDBfVkFQX1BWU19VUExPQURfREFUQSwgc3ogKiA0IC0gMSkpOworCU9VVF9SSU5HX1RBQkxFKChpbnQgX191c2VyICopY21kYnVmLT5idWYsIHN6ICogNCk7CiAKIAlBRFZBTkNFX1JJTkcoKTsKIAotCWNtZGJ1Zi0+YnVmICs9IHN6KjE2OwotCWNtZGJ1Zi0+YnVmc3ogLT0gc3oqMTY7CisJY21kYnVmLT5idWYgKz0gc3ogKiAxNjsKKwljbWRidWYtPmJ1ZnN6IC09IHN6ICogMTY7CiAKIAlyZXR1cm4gMDsKIH0KIAotCiAvKioKICAqIEVtaXQgYSBjbGVhciBwYWNrZXQgZnJvbSB1c2Vyc3BhY2UuCiAgKiBDYWxsZWQgYnkgcjMwMF9lbWl0X3BhY2tldDMuCiAgKi8KLXN0YXRpYyBfX2lubGluZV9fIGludCByMzAwX2VtaXRfY2xlYXIoZHJtX3JhZGVvbl9wcml2YXRlX3QqIGRldl9wcml2LAotCQkJCSAgICAgIGRybV9yYWRlb25fY21kX2J1ZmZlcl90KiBjbWRidWYpCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgcjMwMF9lbWl0X2NsZWFyKGRybV9yYWRlb25fcHJpdmF0ZV90ICogZGV2X3ByaXYsCisJCQkJICAgICAgZHJtX3JhZGVvbl9jbWRfYnVmZmVyX3QgKiBjbWRidWYpCiB7CiAJUklOR19MT0NBTFM7CiAKLQlpZiAoOCo0ID4gY21kYnVmLT5idWZzeikKKwlpZiAoOCAqIDQgPiBjbWRidWYtPmJ1ZnN6KQogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCiAJQkVHSU5fUklORygxMCk7Ci0JT1VUX1JJTkcoIENQX1BBQ0tFVDMoIFIyMDBfM0RfRFJBV19JTU1EXzIsIDggKSApOwotCU9VVF9SSU5HKCBSMzAwX1BSSU1fVFlQRV9QT0lOVHxSMzAwX1BSSU1fV0FMS19SSU5HfAotCSAgICAgICAgICAoMTw8UjMwMF9QUklNX05VTV9WRVJUSUNFU19TSElGVCkgKTsKLQlPVVRfUklOR19UQUJMRSggKGludCBfX3VzZXIqKWNtZGJ1Zi0+YnVmLCA4ICk7CisJT1VUX1JJTkcoQ1BfUEFDS0VUMyhSMjAwXzNEX0RSQVdfSU1NRF8yLCA4KSk7CisJT1VUX1JJTkcoUjMwMF9QUklNX1RZUEVfUE9JTlQgfCBSMzAwX1BSSU1fV0FMS19SSU5HIHwKKwkJICgxIDw8IFIzMDBfUFJJTV9OVU1fVkVSVElDRVNfU0hJRlQpKTsKKwlPVVRfUklOR19UQUJMRSgoaW50IF9fdXNlciAqKWNtZGJ1Zi0+YnVmLCA4KTsKIAlBRFZBTkNFX1JJTkcoKTsKIAotCWNtZGJ1Zi0+YnVmICs9IDgqNDsKLQljbWRidWYtPmJ1ZnN6IC09IDgqNDsKKwljbWRidWYtPmJ1ZiArPSA4ICogNDsKKwljbWRidWYtPmJ1ZnN6IC09IDggKiA0OwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIGludCByMzAwX2VtaXRfM2RfbG9hZF92YnBudHIoZHJtX3JhZGVvbl9wcml2YXRlX3QqIGRldl9wcml2LAotCQkJCSAgICAgIGRybV9yYWRlb25fY21kX2J1ZmZlcl90KiBjbWRidWYsCi0JCQkJICAgICAgdTMyIGhlYWRlcikKK3N0YXRpYyBfX2lubGluZV9fIGludCByMzAwX2VtaXRfM2RfbG9hZF92YnBudHIoZHJtX3JhZGVvbl9wcml2YXRlX3QgKiBkZXZfcHJpdiwKKwkJCQkJICAgICAgIGRybV9yYWRlb25fY21kX2J1ZmZlcl90ICogY21kYnVmLAorCQkJCQkgICAgICAgdTMyIGhlYWRlcikKIHsKLQlpbnQgY291bnQsIGksazsKLQkjZGVmaW5lIE1BWF9BUlJBWV9QQUNLRVQgIDY0CisJaW50IGNvdW50LCBpLCBrOworI2RlZmluZSBNQVhfQVJSQVlfUEFDS0VUICA2NAogCXUzMiBwYXlsb2FkW01BWF9BUlJBWV9QQUNLRVRdOwogCXUzMiBuYXJyYXlzOwogCVJJTkdfTE9DQUxTOwogCi0JY291bnQ9KGhlYWRlcj4+MTYpICYgMHgzZmZmOwotCQotCWlmKChjb3VudCsxKT5NQVhfQVJSQVlfUEFDS0VUKXsKLQkJRFJNX0VSUk9SKCJUb28gbGFyZ2UgcGF5bG9hZCBpbiAzRF9MT0FEX1ZCUE5UUiAoY291bnQ9JWQpXG4iLCBjb3VudCk7CisJY291bnQgPSAoaGVhZGVyID4+IDE2KSAmIDB4M2ZmZjsKKworCWlmICgoY291bnQgKyAxKSA+IE1BWF9BUlJBWV9QQUNLRVQpIHsKKwkJRFJNX0VSUk9SKCJUb28gbGFyZ2UgcGF5bG9hZCBpbiAzRF9MT0FEX1ZCUE5UUiAoY291bnQ9JWQpXG4iLAorCQkJICBjb3VudCk7CiAJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7Ci0JCX0KLQltZW1zZXQocGF5bG9hZCwgMCwgTUFYX0FSUkFZX1BBQ0tFVCo0KTsKLQltZW1jcHkocGF5bG9hZCwgY21kYnVmLT5idWYrNCwgKGNvdW50KzEpKjQpOwkKLQkKKwl9CisJbWVtc2V0KHBheWxvYWQsIDAsIE1BWF9BUlJBWV9QQUNLRVQgKiA0KTsKKwltZW1jcHkocGF5bG9hZCwgY21kYnVmLT5idWYgKyA0LCAoY291bnQgKyAxKSAqIDQpOworCiAJLyogY2FyZWZ1bGx5IGNoZWNrIHBhY2tldCBjb250ZW50cyAqLwotCQotCW5hcnJheXM9cGF5bG9hZFswXTsKLQlrPTA7Ci0JaT0xOwotCXdoaWxlKChrPG5hcnJheXMpICYmIChpPChjb3VudCsxKSkpewotCQlpKys7IC8qIHNraXAgYXR0cmlidXRlIGZpZWxkICovCi0JCWlmKHIzMDBfY2hlY2tfb2Zmc2V0KGRldl9wcml2LCBwYXlsb2FkW2ldKSl7Ci0JCQlEUk1fRVJST1IoIk9mZnNldCBmYWlsZWQgcmFuZ2UgY2hlY2sgKGs9JWQgaT0lZCkgd2hpbGUgcHJvY2Vzc2luZyAzRF9MT0FEX1ZCUE5UUiBwYWNrZXQuXG4iLCBrLCBpKTsKKworCW5hcnJheXMgPSBwYXlsb2FkWzBdOworCWsgPSAwOworCWkgPSAxOworCXdoaWxlICgoayA8IG5hcnJheXMpICYmIChpIDwgKGNvdW50ICsgMSkpKSB7CisJCWkrKzsJCS8qIHNraXAgYXR0cmlidXRlIGZpZWxkICovCisJCWlmIChyMzAwX2NoZWNrX29mZnNldChkZXZfcHJpdiwgcGF5bG9hZFtpXSkpIHsKKwkJCURSTV9FUlJPUgorCQkJICAgICgiT2Zmc2V0IGZhaWxlZCByYW5nZSBjaGVjayAoaz0lZCBpPSVkKSB3aGlsZSBwcm9jZXNzaW5nIDNEX0xPQURfVkJQTlRSIHBhY2tldC5cbiIsCisJCQkgICAgIGssIGkpOwogCQkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKLQkJCX0KKwkJfQogCQlrKys7CiAJCWkrKzsKLQkJaWYoaz09bmFycmF5cylicmVhazsKKwkJaWYgKGsgPT0gbmFycmF5cykKKwkJCWJyZWFrOwogCQkvKiBoYXZlIG9uZSBtb3JlIHRvIHByb2Nlc3MsIHRoZXkgY29tZSBpbiBwYWlycyAqLwotCQlpZihyMzAwX2NoZWNrX29mZnNldChkZXZfcHJpdiwgcGF5bG9hZFtpXSkpewotCQkJRFJNX0VSUk9SKCJPZmZzZXQgZmFpbGVkIHJhbmdlIGNoZWNrIChrPSVkIGk9JWQpIHdoaWxlIHByb2Nlc3NpbmcgM0RfTE9BRF9WQlBOVFIgcGFja2V0LlxuIiwgaywgaSk7CisJCWlmIChyMzAwX2NoZWNrX29mZnNldChkZXZfcHJpdiwgcGF5bG9hZFtpXSkpIHsKKwkJCURSTV9FUlJPUgorCQkJICAgICgiT2Zmc2V0IGZhaWxlZCByYW5nZSBjaGVjayAoaz0lZCBpPSVkKSB3aGlsZSBwcm9jZXNzaW5nIDNEX0xPQURfVkJQTlRSIHBhY2tldC5cbiIsCisJCQkgICAgIGssIGkpOwogCQkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKLQkJCX0KKwkJfQogCQlrKys7Ci0JCWkrKzsJCQkKLQkJfQorCQlpKys7CisJfQogCS8qIGRvIHRoZSBjb3VudHMgbWF0Y2ggd2hhdCB3ZSBleHBlY3QgPyAqLwotCWlmKChrIT1uYXJyYXlzKSB8fCAoaSE9KGNvdW50KzEpKSl7Ci0JCURSTV9FUlJPUigiTWFsZm9ybWVkIDNEX0xPQURfVkJQTlRSIHBhY2tldCAoaz0lZCBpPSVkIG5hcnJheXM9JWQgY291bnQrMT0lZCkuXG4iLCBrLCBpLCBuYXJyYXlzLCBjb3VudCsxKTsKKwlpZiAoKGsgIT0gbmFycmF5cykgfHwgKGkgIT0gKGNvdW50ICsgMSkpKSB7CisJCURSTV9FUlJPUgorCQkgICAgKCJNYWxmb3JtZWQgM0RfTE9BRF9WQlBOVFIgcGFja2V0IChrPSVkIGk9JWQgbmFycmF5cz0lZCBjb3VudCsxPSVkKS5cbiIsCisJCSAgICAgaywgaSwgbmFycmF5cywgY291bnQgKyAxKTsKIAkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKLQkJfQorCX0KIAogCS8qIGFsbCBjbGVhciwgb3V0cHV0IHBhY2tldCAqLwogCi0JQkVHSU5fUklORyhjb3VudCsyKTsKKwlCRUdJTl9SSU5HKGNvdW50ICsgMik7CiAJT1VUX1JJTkcoaGVhZGVyKTsKLQlPVVRfUklOR19UQUJMRShwYXlsb2FkLCBjb3VudCsxKTsKKwlPVVRfUklOR19UQUJMRShwYXlsb2FkLCBjb3VudCArIDEpOwogCUFEVkFOQ0VfUklORygpOwogCi0JY21kYnVmLT5idWYgKz0gKGNvdW50KzIpKjQ7Ci0JY21kYnVmLT5idWZzeiAtPSAoY291bnQrMikqNDsKKwljbWRidWYtPmJ1ZiArPSAoY291bnQgKyAyKSAqIDQ7CisJY21kYnVmLT5idWZzeiAtPSAoY291bnQgKyAyKSAqIDQ7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIF9faW5saW5lX18gaW50IHIzMDBfZW1pdF9yYXdfcGFja2V0Myhkcm1fcmFkZW9uX3ByaXZhdGVfdCogZGV2X3ByaXYsCi0JCQkJICAgICAgZHJtX3JhZGVvbl9jbWRfYnVmZmVyX3QqIGNtZGJ1ZikKK3N0YXRpYyBfX2lubGluZV9fIGludCByMzAwX2VtaXRfcmF3X3BhY2tldDMoZHJtX3JhZGVvbl9wcml2YXRlX3QgKiBkZXZfcHJpdiwKKwkJCQkJICAgIGRybV9yYWRlb25fY21kX2J1ZmZlcl90ICogY21kYnVmKQogewogCXUzMiBoZWFkZXI7CiAJaW50IGNvdW50OwpAQCAtNDczLDM2ICs0OTksMzcgQEAKIAlpZiAoNCA+IGNtZGJ1Zi0+YnVmc3opCiAJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiAKLSAgICAgICAgLyogRml4bWUgISEgVGhpcyBzaW1wbHkgZW1pdHMgYSBwYWNrZXQgd2l0aG91dCBtdWNoIGNoZWNraW5nLgorCS8qIEZpeG1lICEhIFRoaXMgc2ltcGx5IGVtaXRzIGEgcGFja2V0IHdpdGhvdXQgbXVjaCBjaGVja2luZy4KIAkgICBXZSBuZWVkIHRvIGJlIHNtYXJ0ZXIuICovCiAKIAkvKiBvYnRhaW4gZmlyc3Qgd29yZCAtIGFjdHVhbCBwYWNrZXQzIGhlYWRlciAqLwotCWhlYWRlciA9ICoodTMyIF9fdXNlciopY21kYnVmLT5idWY7CisJaGVhZGVyID0gKih1MzIgX191c2VyICopIGNtZGJ1Zi0+YnVmOwogCiAJLyogSXMgaXQgcGFja2V0IDMgPyAqLwotCWlmKCAoaGVhZGVyPj4zMCkhPTB4MyApIHsKKwlpZiAoKGhlYWRlciA+PiAzMCkgIT0gMHgzKSB7CiAJCURSTV9FUlJPUigiTm90IGEgcGFja2V0MyBoZWFkZXIgKDB4JTA4eClcbiIsIGhlYWRlcik7CiAJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7Ci0JCX0KKwl9CiAKLQljb3VudD0oaGVhZGVyPj4xNikgJiAweDNmZmY7CisJY291bnQgPSAoaGVhZGVyID4+IDE2KSAmIDB4M2ZmZjsKIAogCS8qIENoZWNrIGFnYWluIG5vdyB0aGF0IHdlIGtub3cgaG93IG11Y2ggZGF0YSB0byBleHBlY3QgKi8KLQlpZiAoKGNvdW50KzIpKjQgPiBjbWRidWYtPmJ1ZnN6KXsKLQkJRFJNX0VSUk9SKCJFeHBlY3RlZCBwYWNrZXQzIG9mIGxlbmd0aCAlZCBidXQgaGF2ZSBvbmx5ICVkIGJ5dGVzIGxlZnRcbiIsCi0JCQkoY291bnQrMikqNCwgY21kYnVmLT5idWZzeik7CisJaWYgKChjb3VudCArIDIpICogNCA+IGNtZGJ1Zi0+YnVmc3opIHsKKwkJRFJNX0VSUk9SCisJCSAgICAoIkV4cGVjdGVkIHBhY2tldDMgb2YgbGVuZ3RoICVkIGJ1dCBoYXZlIG9ubHkgJWQgYnl0ZXMgbGVmdFxuIiwKKwkJICAgICAoY291bnQgKyAyKSAqIDQsIGNtZGJ1Zi0+YnVmc3opOwogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwotCQl9CisJfQogCiAJLyogSXMgaXQgYSBwYWNrZXQgdHlwZSB3ZSBrbm93IGFib3V0ID8gKi8KLQlzd2l0Y2goaGVhZGVyICYgMHhmZjAwKXsKLQljYXNlIFJBREVPTl8zRF9MT0FEX1ZCUE5UUjogLyogbG9hZCB2ZXJ0ZXggYXJyYXkgcG9pbnRlcnMgKi8KKwlzd2l0Y2ggKGhlYWRlciAmIDB4ZmYwMCkgeworCWNhc2UgUkFERU9OXzNEX0xPQURfVkJQTlRSOgkvKiBsb2FkIHZlcnRleCBhcnJheSBwb2ludGVycyAqLwogCQlyZXR1cm4gcjMwMF9lbWl0XzNkX2xvYWRfdmJwbnRyKGRldl9wcml2LCBjbWRidWYsIGhlYWRlcik7CiAKLQljYXNlIFJBREVPTl9DUF8zRF9EUkFXX0lNTURfMjogLyogdHJpZ2dlcnMgZHJhd2luZyB1c2luZyBpbi1wYWNrZXQgdmVydGV4IGRhdGEgKi8KLQljYXNlIFJBREVPTl9DUF8zRF9EUkFXX1ZCVUZfMjogLyogdHJpZ2dlcnMgZHJhd2luZyBvZiB2ZXJ0ZXggYnVmZmVycyBzZXR1cCBlbHNld2hlcmUgKi8KLQljYXNlIFJBREVPTl9DUF8zRF9EUkFXX0lORFhfMjogLyogdHJpZ2dlcnMgZHJhd2luZyB1c2luZyBpbmRpY2VzIHRvIHZlcnRleCBidWZmZXIgKi8KLQljYXNlIFJBREVPTl9DUF9JTkRYX0JVRkZFUjogLyogRFJBV19JTkRYXzIgd2l0aG91dCBJTkRYX0JVRkZFUiBzZWVtcyB0byBsb2NrIHVwIHRoZSBncHUgKi8KKwljYXNlIFJBREVPTl9DUF8zRF9EUkFXX0lNTURfMjoJLyogdHJpZ2dlcnMgZHJhd2luZyB1c2luZyBpbi1wYWNrZXQgdmVydGV4IGRhdGEgKi8KKwljYXNlIFJBREVPTl9DUF8zRF9EUkFXX1ZCVUZfMjoJLyogdHJpZ2dlcnMgZHJhd2luZyBvZiB2ZXJ0ZXggYnVmZmVycyBzZXR1cCBlbHNld2hlcmUgKi8KKwljYXNlIFJBREVPTl9DUF8zRF9EUkFXX0lORFhfMjoJLyogdHJpZ2dlcnMgZHJhd2luZyB1c2luZyBpbmRpY2VzIHRvIHZlcnRleCBidWZmZXIgKi8KKwljYXNlIFJBREVPTl9DUF9JTkRYX0JVRkZFUjoJLyogRFJBV19JTkRYXzIgd2l0aG91dCBJTkRYX0JVRkZFUiBzZWVtcyB0byBsb2NrIHVwIHRoZSBncHUgKi8KIAljYXNlIFJBREVPTl9XQUlUX0ZPUl9JRExFOgogCWNhc2UgUkFERU9OX0NQX05PUDoKIAkJLyogdGhlc2UgcGFja2V0cyBhcmUgc2FmZSAqLwpAQCAtNTEwLDMyICs1MzcsMzAgQEAKIAlkZWZhdWx0OgogCQlEUk1fRVJST1IoIlVua25vd24gcGFja2V0MyBoZWFkZXIgKDB4JTA4eClcbiIsIGhlYWRlcik7CiAJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7Ci0JCX0KKwl9CiAKLQotCUJFR0lOX1JJTkcoY291bnQrMik7CisJQkVHSU5fUklORyhjb3VudCArIDIpOwogCU9VVF9SSU5HKGhlYWRlcik7Ci0JT1VUX1JJTkdfVEFCTEUoIChpbnQgX191c2VyKikoY21kYnVmLT5idWYrNCksIGNvdW50KzEpOworCU9VVF9SSU5HX1RBQkxFKChpbnQgX191c2VyICopKGNtZGJ1Zi0+YnVmICsgNCksIGNvdW50ICsgMSk7CiAJQURWQU5DRV9SSU5HKCk7CiAKLQljbWRidWYtPmJ1ZiArPSAoY291bnQrMikqNDsKLQljbWRidWYtPmJ1ZnN6IC09IChjb3VudCsyKSo0OworCWNtZGJ1Zi0+YnVmICs9IChjb3VudCArIDIpICogNDsKKwljbWRidWYtPmJ1ZnN6IC09IChjb3VudCArIDIpICogNDsKIAogCXJldHVybiAwOwogfQogCi0KIC8qKgogICogRW1pdCBhIHJlbmRlcmluZyBwYWNrZXQzIGZyb20gdXNlcnNwYWNlLgogICogQ2FsbGVkIGJ5IHIzMDBfZG9fY3BfY21kYnVmLgogICovCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgcjMwMF9lbWl0X3BhY2tldDMoZHJtX3JhZGVvbl9wcml2YXRlX3QqIGRldl9wcml2LAotCQkJCQlkcm1fcmFkZW9uX2NtZF9idWZmZXJfdCogY21kYnVmLAorc3RhdGljIF9faW5saW5lX18gaW50IHIzMDBfZW1pdF9wYWNrZXQzKGRybV9yYWRlb25fcHJpdmF0ZV90ICogZGV2X3ByaXYsCisJCQkJCWRybV9yYWRlb25fY21kX2J1ZmZlcl90ICogY21kYnVmLAogCQkJCQlkcm1fcjMwMF9jbWRfaGVhZGVyX3QgaGVhZGVyKQogewogCWludCBuOwogCWludCByZXQ7Ci0JY2hhciBfX3VzZXIqIG9yaWdfYnVmID0gY21kYnVmLT5idWY7CisJY2hhciBfX3VzZXIgKm9yaWdfYnVmID0gY21kYnVmLT5idWY7CiAJaW50IG9yaWdfYnVmc3ogPSBjbWRidWYtPmJ1ZnN6OwogCiAJLyogVGhpcyBpcyBhIGRvLXdoaWxlLWxvb3Agc28gdGhhdCB3ZSBydW4gdGhlIGludGVyaW9yIGF0IGxlYXN0IG9uY2UsCkBAIC01NTAsMTYgKzU3NSwxNiBAQAogCiAJCQljbWRidWYtPmJ1ZiA9IG9yaWdfYnVmOwogCQkJY21kYnVmLT5idWZzeiA9IG9yaWdfYnVmc3o7Ci0JCQl9CisJCX0KIAotCQlzd2l0Y2goaGVhZGVyLnBhY2tldDMucGFja2V0KSB7CisJCXN3aXRjaCAoaGVhZGVyLnBhY2tldDMucGFja2V0KSB7CiAJCWNhc2UgUjMwMF9DTURfUEFDS0VUM19DTEVBUjoKIAkJCURSTV9ERUJVRygiUjMwMF9DTURfUEFDS0VUM19DTEVBUlxuIik7CiAJCQlyZXQgPSByMzAwX2VtaXRfY2xlYXIoZGV2X3ByaXYsIGNtZGJ1Zik7CiAJCQlpZiAocmV0KSB7CiAJCQkJRFJNX0VSUk9SKCJyMzAwX2VtaXRfY2xlYXIgZmFpbGVkXG4iKTsKIAkJCQlyZXR1cm4gcmV0OwotCQkJCX0KKwkJCX0KIAkJCWJyZWFrOwogCiAJCWNhc2UgUjMwMF9DTURfUEFDS0VUM19SQVc6CkBAIC01NjgsMTggKzU5MywxOCBAQAogCQkJaWYgKHJldCkgewogCQkJCURSTV9FUlJPUigicjMwMF9lbWl0X3Jhd19wYWNrZXQzIGZhaWxlZFxuIik7CiAJCQkJcmV0dXJuIHJldDsKLQkJCQl9CisJCQl9CiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgogCQkJRFJNX0VSUk9SKCJiYWQgcGFja2V0MyB0eXBlICVpIGF0ICVwXG4iLAotCQkJCWhlYWRlci5wYWNrZXQzLnBhY2tldCwKLQkJCQljbWRidWYtPmJ1ZiAtIHNpemVvZihoZWFkZXIpKTsKKwkJCQkgIGhlYWRlci5wYWNrZXQzLnBhY2tldCwKKwkJCQkgIGNtZGJ1Zi0+YnVmIC0gc2l6ZW9mKGhlYWRlcikpOwogCQkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKLQkJCX0KKwkJfQogCiAJCW4gKz0gUjMwMF9TSU1VTFRBTkVPVVNfQ0xJUFJFQ1RTOwotCX0gd2hpbGUobiA8IGNtZGJ1Zi0+bmJveCk7CisJfSB3aGlsZSAobiA8IGNtZGJ1Zi0+bmJveCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTU5OCwyMSArNjIzLDIwIEBACiAvKioKICAqIEVtaXQgdGhlIHNlcXVlbmNlIHRvIHBhY2lmeSBSMzAwLgogICovCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIHIzMDBfcGFjaWZ5KGRybV9yYWRlb25fcHJpdmF0ZV90KiBkZXZfcHJpdikKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgcjMwMF9wYWNpZnkoZHJtX3JhZGVvbl9wcml2YXRlX3QgKiBkZXZfcHJpdikKIHsKIAlSSU5HX0xPQ0FMUzsKIAogCUJFR0lOX1JJTkcoNik7Ci0JT1VUX1JJTkcoIENQX1BBQ0tFVDAoIFIzMDBfUkIzRF9EU1RDQUNIRV9DVExTVEFULCAwICkgKTsKLQlPVVRfUklORyggMHhhICk7Ci0JT1VUX1JJTkcoIENQX1BBQ0tFVDAoIDB4NGYxOCwgMCApICk7Ci0JT1VUX1JJTkcoIDB4MyApOwotCU9VVF9SSU5HKCBDUF9QQUNLRVQzKCBSQURFT05fQ1BfTk9QLCAwICkgKTsKLQlPVVRfUklORyggMHgwICk7CisJT1VUX1JJTkcoQ1BfUEFDS0VUMChSMzAwX1JCM0RfRFNUQ0FDSEVfQ1RMU1RBVCwgMCkpOworCU9VVF9SSU5HKDB4YSk7CisJT1VUX1JJTkcoQ1BfUEFDS0VUMCgweDRmMTgsIDApKTsKKwlPVVRfUklORygweDMpOworCU9VVF9SSU5HKENQX1BBQ0tFVDMoUkFERU9OX0NQX05PUCwgMCkpOworCU9VVF9SSU5HKDB4MCk7CiAJQURWQU5DRV9SSU5HKCk7CiB9CiAKLQogLyoqCiAgKiBDYWxsZWQgYnkgcjMwMF9kb19jcF9jbWRidWYgdG8gdXBkYXRlIHRoZSBpbnRlcm5hbCBidWZmZXIgYWdlIGFuZCBzdGF0ZS4KICAqIFRoZSBhY3R1YWwgYWdlIGVtaXQgaXMgZG9uZSBieSByMzAwX2RvX2NwX2NtZGJ1Ziwgd2hpY2ggaXMgd2h5IHlvdSBtdXN0CkBAIC02MjgsMjAgKzY1MiwxOCBAQAogCWJ1Zi0+dXNlZCA9IDA7CiB9CiAKLQogLyoqCiAgKiBQYXJzZXMgYW5kIHZhbGlkYXRlcyBhIHVzZXItc3VwcGxpZWQgY29tbWFuZCBidWZmZXIgYW5kIGVtaXRzIGFwcHJvcHJpYXRlCiAgKiBjb21tYW5kcyBvbiB0aGUgRE1BIHJpbmcgYnVmZmVyLgogICogQ2FsbGVkIGJ5IHRoZSBpb2N0bCBoYW5kbGVyIGZ1bmN0aW9uIHJhZGVvbl9jcF9jbWRidWYuCiAgKi8KLWludCByMzAwX2RvX2NwX2NtZGJ1Zihkcm1fZGV2aWNlX3QqIGRldiwKLQkJCSAgRFJNRklMRSBmaWxwLAotCQkgICAgICBkcm1fZmlsZV90KiBmaWxwX3ByaXYsCi0JCSAgICAgIGRybV9yYWRlb25fY21kX2J1ZmZlcl90KiBjbWRidWYpCitpbnQgcjMwMF9kb19jcF9jbWRidWYoZHJtX2RldmljZV90ICogZGV2LAorCQkgICAgICBEUk1GSUxFIGZpbHAsCisJCSAgICAgIGRybV9maWxlX3QgKiBmaWxwX3ByaXYsIGRybV9yYWRlb25fY21kX2J1ZmZlcl90ICogY21kYnVmKQogewogCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0gICAgICAgIGRybV9kZXZpY2VfZG1hX3QgKmRtYSA9IGRldi0+ZG1hOwotICAgICAgICBkcm1fYnVmX3QgKmJ1ZiA9IE5VTEw7CisJZHJtX2RldmljZV9kbWFfdCAqZG1hID0gZGV2LT5kbWE7CisJZHJtX2J1Zl90ICpidWYgPSBOVUxMOwogCWludCBlbWl0X2Rpc3BhdGNoX2FnZSA9IDA7CiAJaW50IHJldCA9IDA7CiAKQEAgLTY1NSw5ICs2NzcsOSBAQAogCQlyZXQgPSByMzAwX2VtaXRfY2xpcHJlY3RzKGRldl9wcml2LCBjbWRidWYsIDApOwogCQlpZiAocmV0KQogCQkJZ290byBjbGVhbnVwOwotCQl9CisJfQogCi0Jd2hpbGUoY21kYnVmLT5idWZzeiA+PSBzaXplb2YoZHJtX3IzMDBfY21kX2hlYWRlcl90KSkgeworCXdoaWxlIChjbWRidWYtPmJ1ZnN6ID49IHNpemVvZihkcm1fcjMwMF9jbWRfaGVhZGVyX3QpKSB7CiAJCWludCBpZHg7CiAJCWRybV9yMzAwX2NtZF9oZWFkZXJfdCBoZWFkZXI7CiAKQEAgLTY2NiwxNCArNjg4LDE0IEBACiAJCWNtZGJ1Zi0+YnVmICs9IHNpemVvZihoZWFkZXIpOwogCQljbWRidWYtPmJ1ZnN6IC09IHNpemVvZihoZWFkZXIpOwogCi0JCXN3aXRjaChoZWFkZXIuaGVhZGVyLmNtZF90eXBlKSB7Ci0JCWNhc2UgUjMwMF9DTURfUEFDS0VUMDogCisJCXN3aXRjaCAoaGVhZGVyLmhlYWRlci5jbWRfdHlwZSkgeworCQljYXNlIFIzMDBfQ01EX1BBQ0tFVDA6CiAJCQlEUk1fREVCVUcoIlIzMDBfQ01EX1BBQ0tFVDBcbiIpOwogCQkJcmV0ID0gcjMwMF9lbWl0X3BhY2tldDAoZGV2X3ByaXYsIGNtZGJ1ZiwgaGVhZGVyKTsKIAkJCWlmIChyZXQpIHsKIAkJCQlEUk1fRVJST1IoInIzMDBfZW1pdF9wYWNrZXQwIGZhaWxlZFxuIik7CiAJCQkJZ290byBjbGVhbnVwOwotCQkJCX0KKwkJCX0KIAkJCWJyZWFrOwogCiAJCWNhc2UgUjMwMF9DTURfVlBVOgpAQCAtNjgyLDcgKzcwNCw3IEBACiAJCQlpZiAocmV0KSB7CiAJCQkJRFJNX0VSUk9SKCJyMzAwX2VtaXRfdnB1IGZhaWxlZFxuIik7CiAJCQkJZ290byBjbGVhbnVwOwotCQkJCX0KKwkJCX0KIAkJCWJyZWFrOwogCiAJCWNhc2UgUjMwMF9DTURfUEFDS0VUMzoKQEAgLTY5MSwyNiArNzEzLDI2IEBACiAJCQlpZiAocmV0KSB7CiAJCQkJRFJNX0VSUk9SKCJyMzAwX2VtaXRfcGFja2V0MyBmYWlsZWRcbiIpOwogCQkJCWdvdG8gY2xlYW51cDsKLQkJCQl9CisJCQl9CiAJCQlicmVhazsKIAogCQljYXNlIFIzMDBfQ01EX0VORDNEOgogCQkJRFJNX0RFQlVHKCJSMzAwX0NNRF9FTkQzRFxuIik7Ci0JCQkvKiBUT0RPOiAKLQkJCQlJZGVhbGx5IHVzZXJzcGFjZSBkcml2ZXIgc2hvdWxkIG5vdCBuZWVkIHRvIGlzc3VlIHRoaXMgY2FsbCwgCi0JCQkJaS5lLiB0aGUgZHJtIGRyaXZlciBzaG91bGQgaXNzdWUgaXQgYXV0b21hdGljYWxseSBhbmQgcHJldmVudAotCQkJCWxvY2t1cHMuCi0JCQkJCi0JCQkJSW4gcHJhY3RpY2UsIHdlIGRvIG5vdCB1bmRlcnN0YW5kIHdoeSB0aGlzIGNhbGwgaXMgbmVlZGVkIGFuZCB3aGF0Ci0JCQkJaXQgZG9lcyAoZXhjZXB0IGZvciBzb21lIHZhZ3VlIGd1ZXNzZXMgdGhhdCBpdCBoYXMgdG8gZG8gd2l0aCBjYWNoZQotCQkJCWNvaGVyZW5jZSkgYW5kIHNvIHRoZSB1c2VyIHNwYWNlIGRyaXZlciBkb2VzIGl0LiAKLQkJCQkKLQkJCQlPbmNlIHdlIGFyZSBzdXJlIHdoaWNoIHVzZXMgcHJldmVudCBsb2NrdXBzIHRoZSBjb2RlIGNvdWxkIGJlIG1vdmVkCi0JCQkJaW50byB0aGUga2VybmVsIGFuZCB0aGUgdXNlcnNwYWNlIGRyaXZlciB3aWxsIG5vdAotCQkJCW5lZWQgdG8gdXNlIHRoaXMgY29tbWFuZC4KKwkJCS8qIFRPRE86CisJCQkgICBJZGVhbGx5IHVzZXJzcGFjZSBkcml2ZXIgc2hvdWxkIG5vdCBuZWVkIHRvIGlzc3VlIHRoaXMgY2FsbCwKKwkJCSAgIGkuZS4gdGhlIGRybSBkcml2ZXIgc2hvdWxkIGlzc3VlIGl0IGF1dG9tYXRpY2FsbHkgYW5kIHByZXZlbnQKKwkJCSAgIGxvY2t1cHMuCiAKLQkJCQlOb3RlIHRoYXQgaXNzdWluZyB0aGlzIGNvbW1hbmQgZG9lcyBub3QgaHVydCBhbnl0aGluZwotCQkJCWV4Y2VwdCwgcG9zc2libHksIHBlcmZvcm1hbmNlICovCisJCQkgICBJbiBwcmFjdGljZSwgd2UgZG8gbm90IHVuZGVyc3RhbmQgd2h5IHRoaXMgY2FsbCBpcyBuZWVkZWQgYW5kIHdoYXQKKwkJCSAgIGl0IGRvZXMgKGV4Y2VwdCBmb3Igc29tZSB2YWd1ZSBndWVzc2VzIHRoYXQgaXQgaGFzIHRvIGRvIHdpdGggY2FjaGUKKwkJCSAgIGNvaGVyZW5jZSkgYW5kIHNvIHRoZSB1c2VyIHNwYWNlIGRyaXZlciBkb2VzIGl0LgorCisJCQkgICBPbmNlIHdlIGFyZSBzdXJlIHdoaWNoIHVzZXMgcHJldmVudCBsb2NrdXBzIHRoZSBjb2RlIGNvdWxkIGJlIG1vdmVkCisJCQkgICBpbnRvIHRoZSBrZXJuZWwgYW5kIHRoZSB1c2Vyc3BhY2UgZHJpdmVyIHdpbGwgbm90CisJCQkgICBuZWVkIHRvIHVzZSB0aGlzIGNvbW1hbmQuCisKKwkJCSAgIE5vdGUgdGhhdCBpc3N1aW5nIHRoaXMgY29tbWFuZCBkb2VzIG5vdCBodXJ0IGFueXRoaW5nCisJCQkgICBleGNlcHQsIHBvc3NpYmx5LCBwZXJmb3JtYW5jZSAqLwogCQkJcjMwMF9wYWNpZnkoZGV2X3ByaXYpOwogCQkJYnJlYWs7CiAKQEAgLTcyMiw3ICs3NDQsNyBAQAogCQkJCVJJTkdfTE9DQUxTOwogCiAJCQkJQkVHSU5fUklORyhoZWFkZXIuZGVsYXkuY291bnQpOwotCQkJCWZvcihpPTA7aTxoZWFkZXIuZGVsYXkuY291bnQ7aSsrKQorCQkJCWZvciAoaSA9IDA7IGkgPCBoZWFkZXIuZGVsYXkuY291bnQ7IGkrKykKIAkJCQkJT1VUX1JJTkcoUkFERU9OX0NQX1BBQ0tFVDIpOwogCQkJCUFEVkFOQ0VfUklORygpOwogCQkJfQpAQCAtNzMwLDUzICs3NTIsNTQgQEAKIAogCQljYXNlIFIzMDBfQ01EX0RNQV9ESVNDQVJEOgogCQkJRFJNX0RFQlVHKCJSQURFT05fQ01EX0RNQV9ESVNDQVJEXG4iKTsKLSAgICAgICAgICAgIAkJaWR4ID0gaGVhZGVyLmRtYS5idWZfaWR4OwotICAgICAgICAgICAgCQlpZiAoaWR4IDwgMCB8fCBpZHggPj0gZG1hLT5idWZfY291bnQpIHsKLSAgICAgICAgICAgICAgICAJCURSTV9FUlJPUigiYnVmZmVyIGluZGV4ICVkIChvZiAlZCBtYXgpXG4iLAotICAgICAgICAgICAgICAgICAgICAgIAkJCWlkeCwgZG1hLT5idWZfY291bnQgLSAxKTsKKwkJCWlkeCA9IGhlYWRlci5kbWEuYnVmX2lkeDsKKwkJCWlmIChpZHggPCAwIHx8IGlkeCA+PSBkbWEtPmJ1Zl9jb3VudCkgeworCQkJCURSTV9FUlJPUigiYnVmZmVyIGluZGV4ICVkIChvZiAlZCBtYXgpXG4iLAorCQkJCQkgIGlkeCwgZG1hLT5idWZfY291bnQgLSAxKTsKIAkJCQlyZXQgPSBEUk1fRVJSKEVJTlZBTCk7Ci0gICAgICAgICAgICAgICAgCQlnb3RvIGNsZWFudXA7Ci0gICAgICAgICAgICAJCQl9Ci0KLQkgICAgICAgICAgICAgICAgYnVmID0gZG1hLT5idWZsaXN0W2lkeF07Ci0gICAgICAgICAgICAJCWlmIChidWYtPmZpbHAgIT0gZmlscCB8fCBidWYtPnBlbmRpbmcpIHsKLSAgICAgICAgICAgICAgICAJCURSTV9FUlJPUigiYmFkIGJ1ZmZlciAlcCAlcCAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAJCWJ1Zi0+ZmlscCwgZmlscCwgYnVmLT5wZW5kaW5nKTsKLSAgICAgICAgICAgICAgICAJCXJldCA9IERSTV9FUlIoRUlOVkFMKTsKIAkJCQlnb3RvIGNsZWFudXA7Ci0gICAgICAgICAgICAJCQl9CisJCQl9CisKKwkJCWJ1ZiA9IGRtYS0+YnVmbGlzdFtpZHhdOworCQkJaWYgKGJ1Zi0+ZmlscCAhPSBmaWxwIHx8IGJ1Zi0+cGVuZGluZykgeworCQkJCURSTV9FUlJPUigiYmFkIGJ1ZmZlciAlcCAlcCAlZFxuIiwKKwkJCQkJICBidWYtPmZpbHAsIGZpbHAsIGJ1Zi0+cGVuZGluZyk7CisJCQkJcmV0ID0gRFJNX0VSUihFSU5WQUwpOworCQkJCWdvdG8gY2xlYW51cDsKKwkJCX0KIAogCQkJZW1pdF9kaXNwYXRjaF9hZ2UgPSAxOwogCQkJcjMwMF9kaXNjYXJkX2J1ZmZlcihkZXYsIGJ1Zik7Ci0gICAgICAgICAgICAJCWJyZWFrOworCQkJYnJlYWs7CiAKIAkJY2FzZSBSMzAwX0NNRF9XQUlUOgogCQkJLyogc2ltcGxlIGVub3VnaCwgd2UgY2FuIGRvIGl0IGhlcmUgKi8KIAkJCURSTV9ERUJVRygiUjMwMF9DTURfV0FJVFxuIik7Ci0JCQlpZihoZWFkZXIud2FpdC5mbGFncz09MClicmVhazsgLyogbm90aGluZyB0byBkbyAqLworCQkJaWYgKGhlYWRlci53YWl0LmZsYWdzID09IDApCisJCQkJYnJlYWs7CS8qIG5vdGhpbmcgdG8gZG8gKi8KIAogCQkJewogCQkJCVJJTkdfTE9DQUxTOwogCiAJCQkJQkVHSU5fUklORygyKTsKLQkJCQlPVVRfUklORyggQ1BfUEFDS0VUMCggUkFERU9OX1dBSVRfVU5USUwsIDAgKSApOwotCQkJCU9VVF9SSU5HKCAoaGVhZGVyLndhaXQuZmxhZ3MgJiAweGYpPDwxNCApOworCQkJCU9VVF9SSU5HKENQX1BBQ0tFVDAoUkFERU9OX1dBSVRfVU5USUwsIDApKTsKKwkJCQlPVVRfUklORygoaGVhZGVyLndhaXQuZmxhZ3MgJiAweGYpIDw8IDE0KTsKIAkJCQlBRFZBTkNFX1JJTkcoKTsKIAkJCX0KIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6CiAJCQlEUk1fRVJST1IoImJhZCBjbWRfdHlwZSAlaSBhdCAlcFxuIiwKLQkJCSAgICAgICAgICBoZWFkZXIuaGVhZGVyLmNtZF90eXBlLAorCQkJCSAgaGVhZGVyLmhlYWRlci5jbWRfdHlwZSwKIAkJCQkgIGNtZGJ1Zi0+YnVmIC0gc2l6ZW9mKGhlYWRlcikpOwogCQkJcmV0ID0gRFJNX0VSUihFSU5WQUwpOwogCQkJZ290byBjbGVhbnVwOwotCQkJfQorCQl9CiAJfQogCiAJRFJNX0RFQlVHKCJFTkRcbiIpOwogCi1jbGVhbnVwOgorICAgICAgY2xlYW51cDoKIAlyMzAwX3BhY2lmeShkZXZfcHJpdik7CiAKIAkvKiBXZSBlbWl0IHRoZSB2ZXJ0ZXggYnVmZmVyIGFnZSBoZXJlLCBvdXRzaWRlIHRoZSBwYWNpZmllciAiYnJhY2tldHMiCkBAIC03OTIsMTAgKzgxNSw5IEBACiAJCUJFR0lOX1JJTkcoMik7CiAJCVJBREVPTl9ESVNQQVRDSF9BR0UoZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZGlzcGF0Y2gpOwogCQlBRFZBTkNFX1JJTkcoKTsKLQkJfQorCX0KIAogCUNPTU1JVF9SSU5HKCk7CiAKIAlyZXR1cm4gcmV0OwogfQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3IzMDBfcmVnLmggYi9kcml2ZXJzL2NoYXIvZHJtL3IzMDBfcmVnLmgKaW5kZXggYzNlN2NhMy4uZTViNzNjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9yMzAwX3JlZy5oCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vcjMwMF9yZWcuaApAQCAtMzYsNyArMzYsNiBAQAogIwlkZWZpbmUgUjMwMF9NQ19NSVNDX19NQ19TQU1FX1BBR0VfUFJJT19TSElGVAkyNAogIwlkZWZpbmUgUjMwMF9NQ19NSVNDX19NQ19HTE9CV19JTklUX0xBVF9TSElGVAkyOAogCi0KICNkZWZpbmUgUjMwMF9NQ19JTklUX0dGWF9MQVRfVElNRVIJMHgxNTQKICMJZGVmaW5lIFIzMDBfTUNfTUlTQ19fTUNfRzNEMFJfSU5JVF9MQVRfU0hJRlQJMAogIwlkZWZpbmUgUjMwMF9NQ19NSVNDX19NQ19HM0QxUl9JTklUX0xBVF9TSElGVAk0CkBAIC02Miw3ICs2MSw2IEBACiAjZGVmaW5lIFIzMDBfU0VfVlBPUlRfWlNDQUxFICAgICAgICAgICAgICAgIDB4MURBOAogI2RlZmluZSBSMzAwX1NFX1ZQT1JUX1pPRkZTRVQgICAgICAgICAgICAgICAweDFEQUMKIAotCiAvKiBUaGlzIHJlZ2lzdGVyIGlzIHdyaXR0ZW4gZGlyZWN0bHkgYW5kIGFsc28gc3RhcnRzIGRhdGEgc2VjdGlvbiBpbiBtYW55IDNkIENQX1BBQ0tFVDMncyAqLwogI2RlZmluZSBSMzAwX1ZBUF9WRl9DTlRMCTB4MjA4NAogCkBAIC05MywxNyArOTEsMTcgQEAKIAogCQkvKiBpbmRleCBzaXplIC0gd2hlbiBub3Qgc2V0IHRoZSBpbmRpY2VzIGFyZSBhc3N1bWVkIHRvIGJlIDE2IGJpdCAqLwogIwlkZWZpbmUJUjMwMF9WQVBfVkZfQ05UTF9fSU5ERVhfU0laRV8zMmJpdCAgICAgICAgICAgICAgICAgICAgICAoMTw8MTEpCi0gICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHZlcnRpY2VzICovCisJCS8qIG51bWJlciBvZiB2ZXJ0aWNlcyAqLwogIwlkZWZpbmUJUjMwMF9WQVBfVkZfQ05UTF9fTlVNX1ZFUlRJQ0VTX19TSElGVCAgICAgICAgICAgICAgICAgICAgMTYKIAogLyogQkVHSU46IFdpbGQgZ3Vlc3NlcyAqLwogI2RlZmluZSBSMzAwX1ZBUF9PVVRQVVRfVlRYX0ZNVF8wICAgICAgICAgICAweDIwOTAKICMgICAgICAgZGVmaW5lIFIzMDBfVkFQX09VVFBVVF9WVFhfRk1UXzBfX1BPU19QUkVTRU5UICAgICAoMTw8MCkKICMgICAgICAgZGVmaW5lIFIzMDBfVkFQX09VVFBVVF9WVFhfRk1UXzBfX0NPTE9SX1BSRVNFTlQgICAoMTw8MSkKLSMgICAgICAgZGVmaW5lIFIzMDBfVkFQX09VVFBVVF9WVFhfRk1UXzBfX0NPTE9SXzFfUFJFU0VOVCAoMTw8MikgLyogR1VFU1MgKi8KLSMgICAgICAgZGVmaW5lIFIzMDBfVkFQX09VVFBVVF9WVFhfRk1UXzBfX0NPTE9SXzJfUFJFU0VOVCAoMTw8MykgLyogR1VFU1MgKi8KLSMgICAgICAgZGVmaW5lIFIzMDBfVkFQX09VVFBVVF9WVFhfRk1UXzBfX0NPTE9SXzNfUFJFU0VOVCAoMTw8NCkgLyogR1VFU1MgKi8KLSMgICAgICAgZGVmaW5lIFIzMDBfVkFQX09VVFBVVF9WVFhfRk1UXzBfX1BUX1NJWkVfUFJFU0VOVCAoMTw8MTYpIC8qIEdVRVNTICovCisjICAgICAgIGRlZmluZSBSMzAwX1ZBUF9PVVRQVVRfVlRYX0ZNVF8wX19DT0xPUl8xX1BSRVNFTlQgKDE8PDIpCS8qIEdVRVNTICovCisjICAgICAgIGRlZmluZSBSMzAwX1ZBUF9PVVRQVVRfVlRYX0ZNVF8wX19DT0xPUl8yX1BSRVNFTlQgKDE8PDMpCS8qIEdVRVNTICovCisjICAgICAgIGRlZmluZSBSMzAwX1ZBUF9PVVRQVVRfVlRYX0ZNVF8wX19DT0xPUl8zX1BSRVNFTlQgKDE8PDQpCS8qIEdVRVNTICovCisjICAgICAgIGRlZmluZSBSMzAwX1ZBUF9PVVRQVVRfVlRYX0ZNVF8wX19QVF9TSVpFX1BSRVNFTlQgKDE8PDE2KQkvKiBHVUVTUyAqLwogCiAjZGVmaW5lIFIzMDBfVkFQX09VVFBVVF9WVFhfRk1UXzEgICAgICAgICAgIDB4MjA5NAogIyAgICAgICBkZWZpbmUgUjMwMF9WQVBfT1VUUFVUX1ZUWF9GTVRfMV9fVEVYXzBfQ09NUF9DTlRfU0hJRlQgMApAQCAtMTU5LDE0ICsxNTcsMTQgQEAKICMgICAgICAgZGVmaW5lIFIzMDBfSU5QVVRfUk9VVEVfQ09NUE9ORU5UU18yICAgICAoMSA8PCAwKQogIyAgICAgICBkZWZpbmUgUjMwMF9JTlBVVF9ST1VURV9DT01QT05FTlRTXzMgICAgICgyIDw8IDApCiAjICAgICAgIGRlZmluZSBSMzAwX0lOUFVUX1JPVVRFX0NPTVBPTkVOVFNfNCAgICAgKDMgPDwgMCkKLSMgICAgICAgZGVmaW5lIFIzMDBfSU5QVVRfUk9VVEVfQ09NUE9ORU5UU19SR0JBICAoNCA8PCAwKSAvKiBHVUVTUyAqLworIyAgICAgICBkZWZpbmUgUjMwMF9JTlBVVF9ST1VURV9DT01QT05FTlRTX1JHQkEgICg0IDw8IDApCS8qIEdVRVNTICovCiAjICAgICAgIGRlZmluZSBSMzAwX1ZBUF9JTlBVVF9ST1VURV9JRFhfU0hJRlQgICAgOAotIyAgICAgICBkZWZpbmUgUjMwMF9WQVBfSU5QVVRfUk9VVEVfSURYX01BU0sgICAgICgzMSA8PCA4KSAvKiBHVUVTUyAqLworIyAgICAgICBkZWZpbmUgUjMwMF9WQVBfSU5QVVRfUk9VVEVfSURYX01BU0sgICAgICgzMSA8PCA4KQkvKiBHVUVTUyAqLwogIyAgICAgICBkZWZpbmUgUjMwMF9WQVBfSU5QVVRfUk9VVEVfRU5EICAgICAgICAgICgxIDw8IDEzKQotIyAgICAgICBkZWZpbmUgUjMwMF9JTlBVVF9ST1VURV9JTU1FRElBVEVfTU9ERSAgICgwIDw8IDE0KSAvKiBHVUVTUyAqLwotIyAgICAgICBkZWZpbmUgUjMwMF9JTlBVVF9ST1VURV9GTE9BVCAgICAgICAgICAgICgxIDw8IDE0KSAvKiBHVUVTUyAqLwotIyAgICAgICBkZWZpbmUgUjMwMF9JTlBVVF9ST1VURV9VTlNJR05FRF9CWVRFICAgICgyIDw8IDE0KSAvKiBHVUVTUyAqLwotIyAgICAgICBkZWZpbmUgUjMwMF9JTlBVVF9ST1VURV9GTE9BVF9DT0xPUiAgICAgICgzIDw8IDE0KSAvKiBHVUVTUyAqLworIyAgICAgICBkZWZpbmUgUjMwMF9JTlBVVF9ST1VURV9JTU1FRElBVEVfTU9ERSAgICgwIDw8IDE0KQkvKiBHVUVTUyAqLworIyAgICAgICBkZWZpbmUgUjMwMF9JTlBVVF9ST1VURV9GTE9BVCAgICAgICAgICAgICgxIDw8IDE0KQkvKiBHVUVTUyAqLworIyAgICAgICBkZWZpbmUgUjMwMF9JTlBVVF9ST1VURV9VTlNJR05FRF9CWVRFICAgICgyIDw8IDE0KQkvKiBHVUVTUyAqLworIyAgICAgICBkZWZpbmUgUjMwMF9JTlBVVF9ST1VURV9GTE9BVF9DT0xPUiAgICAgICgzIDw8IDE0KQkvKiBHVUVTUyAqLwogI2RlZmluZSBSMzAwX1ZBUF9JTlBVVF9ST1VURV8wXzEgICAgICAgICAgICAweDIxNTQKICNkZWZpbmUgUjMwMF9WQVBfSU5QVVRfUk9VVEVfMF8yICAgICAgICAgICAgMHgyMTU4CiAjZGVmaW5lIFIzMDBfVkFQX0lOUFVUX1JPVVRFXzBfMyAgICAgICAgICAgIDB4MjE1QwpAQCAtMTg4LDEyICsxODYsMTIgQEAKICMgICAgICAgZGVmaW5lIFIzMDBfSU5QVVRfQ05UTF9DT0xPUiAgICAgICAgICAgICAweDAwMDAwMDA0CiAjICAgICAgIGRlZmluZSBSMzAwX0lOUFVUX0NOVExfVEMwICAgICAgICAgICAgICAgMHgwMDAwMDQwMAogIyAgICAgICBkZWZpbmUgUjMwMF9JTlBVVF9DTlRMX1RDMSAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKLSMgICAgICAgZGVmaW5lIFIzMDBfSU5QVVRfQ05UTF9UQzIgICAgICAgICAgICAgICAweDAwMDAxMDAwIC8qIEdVRVNTICovCi0jICAgICAgIGRlZmluZSBSMzAwX0lOUFVUX0NOVExfVEMzICAgICAgICAgICAgICAgMHgwMDAwMjAwMCAvKiBHVUVTUyAqLwotIyAgICAgICBkZWZpbmUgUjMwMF9JTlBVVF9DTlRMX1RDNCAgICAgICAgICAgICAgIDB4MDAwMDQwMDAgLyogR1VFU1MgKi8KLSMgICAgICAgZGVmaW5lIFIzMDBfSU5QVVRfQ05UTF9UQzUgICAgICAgICAgICAgICAweDAwMDA4MDAwIC8qIEdVRVNTICovCi0jICAgICAgIGRlZmluZSBSMzAwX0lOUFVUX0NOVExfVEM2ICAgICAgICAgICAgICAgMHgwMDAxMDAwMCAvKiBHVUVTUyAqLwotIyAgICAgICBkZWZpbmUgUjMwMF9JTlBVVF9DTlRMX1RDNyAgICAgICAgICAgICAgIDB4MDAwMjAwMDAgLyogR1VFU1MgKi8KKyMgICAgICAgZGVmaW5lIFIzMDBfSU5QVVRfQ05UTF9UQzIgICAgICAgICAgICAgICAweDAwMDAxMDAwCS8qIEdVRVNTICovCisjICAgICAgIGRlZmluZSBSMzAwX0lOUFVUX0NOVExfVEMzICAgICAgICAgICAgICAgMHgwMDAwMjAwMAkvKiBHVUVTUyAqLworIyAgICAgICBkZWZpbmUgUjMwMF9JTlBVVF9DTlRMX1RDNCAgICAgICAgICAgICAgIDB4MDAwMDQwMDAJLyogR1VFU1MgKi8KKyMgICAgICAgZGVmaW5lIFIzMDBfSU5QVVRfQ05UTF9UQzUgICAgICAgICAgICAgICAweDAwMDA4MDAwCS8qIEdVRVNTICovCisjICAgICAgIGRlZmluZSBSMzAwX0lOUFVUX0NOVExfVEM2ICAgICAgICAgICAgICAgMHgwMDAxMDAwMAkvKiBHVUVTUyAqLworIyAgICAgICBkZWZpbmUgUjMwMF9JTlBVVF9DTlRMX1RDNyAgICAgICAgICAgICAgIDB4MDAwMjAwMDAJLyogR1VFU1MgKi8KIAogLyogZ2FwICovCiAvKiBXb3JkcyBwYXJhbGxlbCB0byBJTlBVVF9ST1VURV8wOyBBbGwgd29yZHMgdGhhdCBhcmUgYWN0aXZlIGluIElOUFVUX1JPVVRFXzAKQEAgLTI3MCwxMiArMjY4LDEyIEBACiAvLyByZW5kZXJpbmcgY29tbWFuZHMgYW5kIG92ZXJ3cml0aW5nIHZlcnRleCBwcm9ncmFtIHBhcmFtZXRlcnMuCiAvLyBUaGVyZWZvcmUsIEkgc3VzcGVjdCB3cml0aW5nIHplcm8gdG8gMHgyMjg0IHN5bmNocm9uaXplcyB0aGUgZW5naW5lIGFuZAogLy8gYXZvaWRzIGJ1Z3MgY2F1c2VkIGJ5IHN0aWxsIHJ1bm5pbmcgc2hhZGVycyByZWFkaW5nIGJhZCBkYXRhIGZyb20gbWVtb3J5LiAqLwotI2RlZmluZSBSMzAwX1ZBUF9QVlNfV0FJVElETEUgICAgICAgICAgICAgICAweDIyODQgLyogR1VFU1MgKi8KKyNkZWZpbmUgUjMwMF9WQVBfUFZTX1dBSVRJRExFICAgICAgICAgICAgICAgMHgyMjg0CS8qIEdVRVNTICovCiAKIC8qIEFic29sdXRlbHkgbm8gY2x1ZSB3aGF0IHRoaXMgcmVnaXN0ZXIgaXMgYWJvdXQuICovCiAjZGVmaW5lIFIzMDBfVkFQX1VOS05PV05fMjI4OCAgICAgICAgICAgICAgIDB4MjI4OAotIyAgICAgICBkZWZpbmUgUjMwMF8yMjg4X1IzMDAgICAgICAgICAgICAgICAgICAgIDB4MDA3NTAwMDAgLyogLS0gbmggKi8KLSMgICAgICAgZGVmaW5lIFIzMDBfMjI4OF9SVjM1MCAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGIC8qIC0tIFZsYWRpbWlyICovCisjICAgICAgIGRlZmluZSBSMzAwXzIyODhfUjMwMCAgICAgICAgICAgICAgICAgICAgMHgwMDc1MDAwMAkvKiAtLSBuaCAqLworIyAgICAgICBkZWZpbmUgUjMwMF8yMjg4X1JWMzUwICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYJLyogLS0gVmxhZGltaXIgKi8KIAogLyogZ2FwICovCiAvKiBBZGRyZXNzZXMgYXJlIHJlbGF0aXZlIHRvIHRoZSB2ZXJ0ZXggcHJvZ3JhbSBpbnN0cnVjdGlvbiBhcmVhIG9mIHRoZQpAQCAtMjg2LDEwICsyODQsMTAgQEAKIC8vIGV4cGVyaW1lbnRzIHNvIGZhciBoYXZlIHNob3duIHRoYXQgYm90aCAqbXVzdCogcG9pbnQgdG8gYW4gaW5zdHJ1Y3Rpb24KIC8vIGluc2lkZSB0aGUgdmVydGV4IHByb2dyYW0sIG90aGVyd2lzZSB0aGUgR1BVIGxvY2tzIHVwLgogLy8gZmdscnggdXN1YWxseSBzZXRzIENOVExfM19VTktOT1dOIHRvIHRoZSBlbmQgb2YgdGhlIHByb2dyYW0gYW5kCi0vLyBDTlRMXzFfVU5LTk9XTiBwb2ludHMgdG8gaW5zdHJ1Y3Rpb24gd2hlcmUgbGFzdCB3cml0ZSB0byBwb3NpdGlvbiB0YWtlcyBwbGFjZS4gCisvLyBDTlRMXzFfVU5LTk9XTiBwb2ludHMgdG8gaW5zdHJ1Y3Rpb24gd2hlcmUgbGFzdCB3cml0ZSB0byBwb3NpdGlvbiB0YWtlcyBwbGFjZS4KIC8vIE1vc3QgbGlrZWx5IHRoaXMgaXMgdXNlZCB0byBpZ25vcmUgcmVzdCBvZiB0aGUgcHJvZ3JhbSBpbiBjYXNlcyB3aGVyZSBncm91cCBvZiB2ZXJ0cyBhcmVudCB2aXNpYmxlLgogLy8gRm9yIHNvbWUgcmVhc29uIHRoaXMgInNlY3Rpb24iIGlzIHNvbWV0aW1lcyBhY2NlcHRlZCBvdGhlciBpbnN0cnVjdGlvbiB0aGF0IGhhdmUKLS8vIG5vIHJlbGF0aW9uc2hpcCB3aXRoIHBvc2l0aW9uIGNhbGN1bGF0aW9ucy4gCisvLyBubyByZWxhdGlvbnNoaXAgd2l0aCBwb3NpdGlvbiBjYWxjdWxhdGlvbnMuCiAqLwogI2RlZmluZSBSMzAwX1ZBUF9QVlNfQ05UTF8xICAgICAgICAgICAgICAgICAweDIyRDAKICMgICAgICAgZGVmaW5lIFIzMDBfUFZTX0NOVExfMV9QUk9HUkFNX1NUQVJUX1NISUZUICAgMApAQCAtMzA4LDEzICszMDYsMTMgQEAKICNkZWZpbmUgUjMwMF9WQVBfVlRYX0NPTE9SX1IgICAgICAgICAgICAgICAgMHgyNDY0CiAjZGVmaW5lIFIzMDBfVkFQX1ZUWF9DT0xPUl9HICAgICAgICAgICAgICAgIDB4MjQ2OAogI2RlZmluZSBSMzAwX1ZBUF9WVFhfQ09MT1JfQiAgICAgICAgICAgICAgICAweDI0NkMKLSNkZWZpbmUgUjMwMF9WQVBfVlRYX1BPU18wX1hfMSAgICAgICAgICAgICAgMHgyNDkwIC8qIHVzZWQgZm9yIGdsVmVydGV4MiooKSAqLworI2RlZmluZSBSMzAwX1ZBUF9WVFhfUE9TXzBfWF8xICAgICAgICAgICAgICAweDI0OTAJLyogdXNlZCBmb3IgZ2xWZXJ0ZXgyKigpICovCiAjZGVmaW5lIFIzMDBfVkFQX1ZUWF9QT1NfMF9ZXzEgICAgICAgICAgICAgIDB4MjQ5NAotI2RlZmluZSBSMzAwX1ZBUF9WVFhfQ09MT1JfUEtEICAgICAgICAgICAgICAweDI0OUMgLyogUkdCQSAqLwotI2RlZmluZSBSMzAwX1ZBUF9WVFhfUE9TXzBfWF8yICAgICAgICAgICAgICAweDI0QTAgLyogdXNlZCBmb3IgZ2xWZXJ0ZXgzKigpICovCisjZGVmaW5lIFIzMDBfVkFQX1ZUWF9DT0xPUl9QS0QgICAgICAgICAgICAgIDB4MjQ5QwkvKiBSR0JBICovCisjZGVmaW5lIFIzMDBfVkFQX1ZUWF9QT1NfMF9YXzIgICAgICAgICAgICAgIDB4MjRBMAkvKiB1c2VkIGZvciBnbFZlcnRleDMqKCkgKi8KICNkZWZpbmUgUjMwMF9WQVBfVlRYX1BPU18wX1lfMiAgICAgICAgICAgICAgMHgyNEE0CiAjZGVmaW5lIFIzMDBfVkFQX1ZUWF9QT1NfMF9aXzIgICAgICAgICAgICAgIDB4MjRBOAotI2RlZmluZSBSMzAwX1ZBUF9WVFhfRU5EX09GX1BLVCAgICAgICAgICAgICAweDI0QUMgLyogd3JpdGUgMCB0byBpbmRpY2F0ZSBlbmQgb2YgcGFja2V0PyAqLworI2RlZmluZSBSMzAwX1ZBUF9WVFhfRU5EX09GX1BLVCAgICAgICAgICAgICAweDI0QUMJLyogd3JpdGUgMCB0byBpbmRpY2F0ZSBlbmQgb2YgcGFja2V0PyAqLwogCiAvKiBnYXAgKi8KIApAQCAtMzg1LDcgKzM4Myw2IEBACiAjCWRlZmluZSBSMzAwX0dCX01TUE9TMV9fTVNfWTVfU0hJRlQJMjAKICMJZGVmaW5lIFIzMDBfR0JfTVNQT1MxX19NU0JEMQkJMjQKIAotCiAjZGVmaW5lIFIzMDBfR0JfVElMRV9DT05GSUcJMHg0MDE4CiAjCWRlZmluZSBSMzAwX0dCX1RJTEVfRU5BQkxFCSgxPDwwKQogIwlkZWZpbmUgUjMwMF9HQl9USUxFX1BJUEVfQ09VTlRfUlYzMDAJMApAQCAtNDc4LDkgKzQ3NSw5IEBACiAvLyBmcmFtZWJ1ZmZlci4gKi8KICNkZWZpbmUgUjMwMF9SRV9QT0lOVFNJWkUgICAgICAgICAgICAgICAgICAgMHg0MjFDCiAjICAgICAgIGRlZmluZSBSMzAwX1BPSU5UU0laRV9ZX1NISUZUICAgICAgICAgICAgMAotIyAgICAgICBkZWZpbmUgUjMwMF9QT0lOVFNJWkVfWV9NQVNLICAgICAgICAgICAgICgweEZGRkYgPDwgMCkgLyogR1VFU1MgKi8KKyMgICAgICAgZGVmaW5lIFIzMDBfUE9JTlRTSVpFX1lfTUFTSyAgICAgICAgICAgICAoMHhGRkZGIDw8IDApCS8qIEdVRVNTICovCiAjICAgICAgIGRlZmluZSBSMzAwX1BPSU5UU0laRV9YX1NISUZUICAgICAgICAgICAgMTYKLSMgICAgICAgZGVmaW5lIFIzMDBfUE9JTlRTSVpFX1hfTUFTSyAgICAgICAgICAgICAoMHhGRkZGIDw8IDE2KSAvKiBHVUVTUyAqLworIyAgICAgICBkZWZpbmUgUjMwMF9QT0lOVFNJWkVfWF9NQVNLICAgICAgICAgICAgICgweEZGRkYgPDwgMTYpCS8qIEdVRVNTICovCiAjICAgICAgIGRlZmluZSBSMzAwX1BPSU5UU0laRV9NQVggICAgICAgICAgICAgKFIzMDBfUE9JTlRTSVpFX1lfTUFTSyAvIDYpCiAKIC8qIFRoZSBsaW5lIHdpZHRoIGlzIGdpdmVuIGluIG11bHRpcGxlcyBvZiA2LgpAQCAtNDkxLDcgKzQ4OCw3IEBACiAqLwogI2RlZmluZSBSMzAwX1JFX0xJTkVfQ05UICAgICAgICAgICAgICAgICAgICAgIDB4NDIzNAogIyAgICAgICBkZWZpbmUgUjMwMF9MSU5FU0laRV9TSElGVCAgICAgICAgICAgIDAKLSMgICAgICAgZGVmaW5lIFIzMDBfTElORVNJWkVfTUFTSyAgICAgICAgICAgICAoMHhGRkZGIDw8IDApIC8qIEdVRVNTICovCisjICAgICAgIGRlZmluZSBSMzAwX0xJTkVTSVpFX01BU0sgICAgICAgICAgICAgKDB4RkZGRiA8PCAwKQkvKiBHVUVTUyAqLwogIyAgICAgICBkZWZpbmUgUjMwMF9MSU5FU0laRV9NQVggICAgICAgICAgICAgKFIzMDBfTElORVNJWkVfTUFTSyAvIDYpCiAjICAgICAgIGRlZmluZSBSMzAwX0xJTkVfQ05UX0hPICAgICAgICAgICAgICAgKDEgPDwgMTYpCiAjICAgICAgIGRlZmluZSBSMzAwX0xJTkVfQ05UX1ZFICAgICAgICAgICAgICAgKDEgPDwgMTcpCkBAIC01MTMsOCArNTEwLDggQEAKICMJZGVmaW5lIFIzMDBfUE1fQkFDS19MSU5FICAgICAgICAgICAgICAoMSA8PCA3KQogIwlkZWZpbmUgUjMwMF9QTV9CQUNLX0ZJTEwgICAgICAgICAgICAgICgxIDw8IDgpCiAKLS8qIE5vdCBzdXJlIHdoeSB0aGVyZSBhcmUgZHVwbGljYXRlIG9mIGZhY3RvciBhbmQgY29uc3RhbnQgdmFsdWVzLiAKLSAgIE15IGJlc3QgZ3Vlc3Mgc28gZmFyIGlzIHRoYXQgdGhlcmUgYXJlIHNlcGVyYXRlIHpiaWFzZXMgZm9yIHRlc3QgYW5kIHdyaXRlLiAKKy8qIE5vdCBzdXJlIHdoeSB0aGVyZSBhcmUgZHVwbGljYXRlIG9mIGZhY3RvciBhbmQgY29uc3RhbnQgdmFsdWVzLgorICAgTXkgYmVzdCBndWVzcyBzbyBmYXIgaXMgdGhhdCB0aGVyZSBhcmUgc2VwZXJhdGUgemJpYXNlcyBmb3IgdGVzdCBhbmQgd3JpdGUuCiAgICBPcmRlcmluZyBtaWdodCBiZSB3cm9uZy4KICAgIFNvbWUgb2YgdGhlIHRlc3RzIGluZGljYXRlIHRoYXQgZmdsIGhhcyBhIGZhbGxiYWNrIGltcGxlbWVudGF0aW9uIG9mIHpiaWFzCiAgICB2aWEgcGl4ZWwgc2hhZGVycy4gKi8KQEAgLTU0MCw3ICs1MzcsNiBAQAogIyAgICAgICBkZWZpbmUgUjMwMF9GUk9OVF9GQUNFX0NDVyAgICAgICAgICAgICAgICgwIDw8IDIpCiAjICAgICAgIGRlZmluZSBSMzAwX0ZST05UX0ZBQ0VfQ1cgICAgICAgICAgICAgICAgKDEgPDwgMikKIAotCiAvKiBCRUdJTjogUmFzdGVyaXphdGlvbiAvIEludGVycG9sYXRvcnMgLSBtYW55IGd1ZXNzZXMKIC8vIDBfVU5LTk9XTl8xOCBoYXMgYWx3YXlzIGJlZW4gc2V0IGV4Y2VwdCBmb3IgY2xlYXIgb3BlcmF0aW9ucy4KIC8vIFRDX0NOVCBpcyB0aGUgbnVtYmVyIG9mIGluY29taW5nIHRleHR1cmUgY29vcmRpbmF0ZSBzZXRzIChpLmUuIGl0IGRlcGVuZHMKQEAgLTU0OCw3ICs1NDQsNyBAQAogI2RlZmluZSBSMzAwX1JTX0NOVExfMCAgICAgICAgICAgICAgICAgICAgICAweDQzMDAKICMgICAgICAgZGVmaW5lIFIzMDBfUlNfQ05UTF9UQ19DTlRfU0hJRlQgICAgICAgICAyCiAjICAgICAgIGRlZmluZSBSMzAwX1JTX0NOVExfVENfQ05UX01BU0sgICAgICAgICAgKDcgPDwgMikKLSMJCWRlZmluZSBSMzAwX1JTX0NOVExfQ0lfQ05UX1NISUZUICAgICAgICAgNyAvKiBudW1iZXIgb2YgY29sb3IgaW50ZXJwb2xhdG9ycyB1c2VkICovCisjCQlkZWZpbmUgUjMwMF9SU19DTlRMX0NJX0NOVF9TSElGVCAgICAgICAgIDcJLyogbnVtYmVyIG9mIGNvbG9yIGludGVycG9sYXRvcnMgdXNlZCAqLwogIyAgICAgICBkZWZpbmUgUjMwMF9SU19DTlRMXzBfVU5LTk9XTl8xOCAgICAgICAgICgxIDw8IDE4KQogLyogR3Vlc3M6IFJTX0NOVExfMSBob2xkcyB0aGUgaW5kZXggb2YgdGhlIGhpZ2hlc3QgdXNlZCBSU19ST1VURV9uIHJlZ2lzdGVyLiAqLwogI2RlZmluZSBSMzAwX1JTX0NOVExfMSAgICAgICAgICAgICAgICAgICAgICAweDQzMDQKQEAgLTU4NSwyOSArNTgxLDI5IEBACiAjZGVmaW5lIFIzMDBfUlNfUk9VVEVfMCAgICAgICAgICAgICAgICAgICAgIDB4NDMzMAogI2RlZmluZSBSMzAwX1JTX1JPVVRFXzEgICAgICAgICAgICAgICAgICAgICAweDQzMzQKICNkZWZpbmUgUjMwMF9SU19ST1VURV8yICAgICAgICAgICAgICAgICAgICAgMHg0MzM4Ci0jZGVmaW5lIFIzMDBfUlNfUk9VVEVfMyAgICAgICAgICAgICAgICAgICAgIDB4NDMzQyAvKiBHVUVTUyAqLwotI2RlZmluZSBSMzAwX1JTX1JPVVRFXzQgICAgICAgICAgICAgICAgICAgICAweDQzNDAgLyogR1VFU1MgKi8KLSNkZWZpbmUgUjMwMF9SU19ST1VURV81ICAgICAgICAgICAgICAgICAgICAgMHg0MzQ0IC8qIEdVRVNTICovCi0jZGVmaW5lIFIzMDBfUlNfUk9VVEVfNiAgICAgICAgICAgICAgICAgICAgIDB4NDM0OCAvKiBHVUVTUyAqLwotI2RlZmluZSBSMzAwX1JTX1JPVVRFXzcgICAgICAgICAgICAgICAgICAgICAweDQzNEMgLyogR1VFU1MgKi8KKyNkZWZpbmUgUjMwMF9SU19ST1VURV8zICAgICAgICAgICAgICAgICAgICAgMHg0MzNDCS8qIEdVRVNTICovCisjZGVmaW5lIFIzMDBfUlNfUk9VVEVfNCAgICAgICAgICAgICAgICAgICAgIDB4NDM0MAkvKiBHVUVTUyAqLworI2RlZmluZSBSMzAwX1JTX1JPVVRFXzUgICAgICAgICAgICAgICAgICAgICAweDQzNDQJLyogR1VFU1MgKi8KKyNkZWZpbmUgUjMwMF9SU19ST1VURV82ICAgICAgICAgICAgICAgICAgICAgMHg0MzQ4CS8qIEdVRVNTICovCisjZGVmaW5lIFIzMDBfUlNfUk9VVEVfNyAgICAgICAgICAgICAgICAgICAgIDB4NDM0QwkvKiBHVUVTUyAqLwogIyAgICAgICBkZWZpbmUgUjMwMF9SU19ST1VURV9TT1VSQ0VfSU5URVJQXzAgICAgIDAKICMgICAgICAgZGVmaW5lIFIzMDBfUlNfUk9VVEVfU09VUkNFX0lOVEVSUF8xICAgICAxCiAjICAgICAgIGRlZmluZSBSMzAwX1JTX1JPVVRFX1NPVVJDRV9JTlRFUlBfMiAgICAgMgogIyAgICAgICBkZWZpbmUgUjMwMF9SU19ST1VURV9TT1VSQ0VfSU5URVJQXzMgICAgIDMKICMgICAgICAgZGVmaW5lIFIzMDBfUlNfUk9VVEVfU09VUkNFX0lOVEVSUF80ICAgICA0Ci0jICAgICAgIGRlZmluZSBSMzAwX1JTX1JPVVRFX1NPVVJDRV9JTlRFUlBfNSAgICAgNSAvKiBHVUVTUyAqLwotIyAgICAgICBkZWZpbmUgUjMwMF9SU19ST1VURV9TT1VSQ0VfSU5URVJQXzYgICAgIDYgLyogR1VFU1MgKi8KLSMgICAgICAgZGVmaW5lIFIzMDBfUlNfUk9VVEVfU09VUkNFX0lOVEVSUF83ICAgICA3IC8qIEdVRVNTICovCi0jICAgICAgIGRlZmluZSBSMzAwX1JTX1JPVVRFX0VOQUJMRSAgICAgICAgICAgICAgKDEgPDwgMykgLyogR1VFU1MgKi8KKyMgICAgICAgZGVmaW5lIFIzMDBfUlNfUk9VVEVfU09VUkNFX0lOVEVSUF81ICAgICA1CS8qIEdVRVNTICovCisjICAgICAgIGRlZmluZSBSMzAwX1JTX1JPVVRFX1NPVVJDRV9JTlRFUlBfNiAgICAgNgkvKiBHVUVTUyAqLworIyAgICAgICBkZWZpbmUgUjMwMF9SU19ST1VURV9TT1VSQ0VfSU5URVJQXzcgICAgIDcJLyogR1VFU1MgKi8KKyMgICAgICAgZGVmaW5lIFIzMDBfUlNfUk9VVEVfRU5BQkxFICAgICAgICAgICAgICAoMSA8PCAzKQkvKiBHVUVTUyAqLwogIyAgICAgICBkZWZpbmUgUjMwMF9SU19ST1VURV9ERVNUX1NISUZUICAgICAgICAgIDYKLSMgICAgICAgZGVmaW5lIFIzMDBfUlNfUk9VVEVfREVTVF9NQVNLICAgICAgICAgICAoMzEgPDwgNikgLyogR1VFU1MgKi8KKyMgICAgICAgZGVmaW5lIFIzMDBfUlNfUk9VVEVfREVTVF9NQVNLICAgICAgICAgICAoMzEgPDwgNikJLyogR1VFU1MgKi8KIAogLyogU3BlY2lhbCBoYW5kbGluZyBmb3IgY29sb3I6IFdoZW4gdGhlIGZyYWdtZW50IHByb2dyYW0gdXNlcyBjb2xvciwKIC8vIHRoZSBST1VURV8wX0NPTE9SIGJpdCBpcyBzZXQgYW5kIFJPVVRFXzBfQ09MT1JfREVTVCBjb250YWlucyB0aGUKIC8vIGNvbG9yIHJlZ2lzdGVyIGluZGV4LiAqLwogIyAgICAgICBkZWZpbmUgUjMwMF9SU19ST1VURV8wX0NPTE9SICAgICAgICAgICAgICgxIDw8IDE0KQogIyAgICAgICBkZWZpbmUgUjMwMF9SU19ST1VURV8wX0NPTE9SX0RFU1RfU0hJRlQgIDE3Ci0jICAgICAgIGRlZmluZSBSMzAwX1JTX1JPVVRFXzBfQ09MT1JfREVTVF9NQVNLICAgKDMxIDw8IDE3KSAvKiBHVUVTUyAqLworIyAgICAgICBkZWZpbmUgUjMwMF9SU19ST1VURV8wX0NPTE9SX0RFU1RfTUFTSyAgICgzMSA8PCAxNykJLyogR1VFU1MgKi8KIC8qIEFzIGFib3ZlLCBidXQgZm9yIHNlY29uZGFyeSBjb2xvciAqLwogIwkJZGVmaW5lIFIzMDBfUlNfUk9VVEVfMV9DT0xPUjEgICAgICAgICAgICAoMSA8PCAxNCkKICMJCWRlZmluZSBSMzAwX1JTX1JPVVRFXzFfQ09MT1IxX0RFU1RfU0hJRlQgMTcKQEAgLTcyMSw3ICs3MTcsNyBAQAogIyAgICAgICBkZWZpbmUgUjMwMF9UWF9IRUlHSFRNQVNLX1NISUZUICAgICAgICAgIDExCiAjICAgICAgIGRlZmluZSBSMzAwX1RYX0hFSUdIVE1BU0tfTUFTSyAgICAgICAgICAgKDIwNDcgPDwgMTEpCiAjICAgICAgIGRlZmluZSBSMzAwX1RYX1VOSzIzICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjMpCi0jICAgICAgIGRlZmluZSBSMzAwX1RYX1NJWkVfU0hJRlQgICAgICAgICAgICAgICAgMjYgLyogbGFyZ2VzdCBvZiB3aWR0aCwgaGVpZ2h0ICovCisjICAgICAgIGRlZmluZSBSMzAwX1RYX1NJWkVfU0hJRlQgICAgICAgICAgICAgICAgMjYJLyogbGFyZ2VzdCBvZiB3aWR0aCwgaGVpZ2h0ICovCiAjICAgICAgIGRlZmluZSBSMzAwX1RYX1NJWkVfTUFTSyAgICAgICAgICAgICAgICAgKDE1IDw8IDI2KQogI2RlZmluZSBSMzAwX1RYX0ZPUk1BVF8wICAgICAgICAgICAgICAgICAgICAweDQ0QzAKIAkvKiBUaGUgaW50ZXJwcmV0YXRpb24gb2YgdGhlIGZvcm1hdCB3b3JkIGJ5IFdsYWRpbWlyIHZhbiBkZXIgTGFhbiAqLwpAQCAtNzQ2LDEyICs3NDIsMTIgQEAKICMJZGVmaW5lIFIzMDBfVFhfRk9STUFUX0RYVDEJICAgIAkgICAgMHhGCiAjCWRlZmluZSBSMzAwX1RYX0ZPUk1BVF9EWFQzCSAgICAJICAgIDB4MTAKICMJZGVmaW5lIFIzMDBfVFhfRk9STUFUX0RYVDUJICAgIAkgICAgMHgxMQotIwlkZWZpbmUgUjMwMF9UWF9GT1JNQVRfRDNETUZUX0N4VjhVOAkgICAgMHgxMiAgICAgLyogbm8gc3dpenpsZSAqLwotIwlkZWZpbmUgUjMwMF9UWF9GT1JNQVRfQThSOEc4QjgJICAgIAkgICAgMHgxMyAgICAgLyogbm8gc3dpenpsZSAqLwotIwlkZWZpbmUgUjMwMF9UWF9GT1JNQVRfQjhHOF9COEc4CSAgICAJICAgIDB4MTQgICAgIC8qIG5vIHN3aXp6bGUgKi8KLSMJZGVmaW5lIFIzMDBfVFhfRk9STUFUX0c4UjhfRzhCOAkgICAgCSAgICAweDE1ICAgICAvKiBubyBzd2l6emxlICovCisjCWRlZmluZSBSMzAwX1RYX0ZPUk1BVF9EM0RNRlRfQ3hWOFU4CSAgICAweDEyCS8qIG5vIHN3aXp6bGUgKi8KKyMJZGVmaW5lIFIzMDBfVFhfRk9STUFUX0E4UjhHOEI4CSAgICAJICAgIDB4MTMJLyogbm8gc3dpenpsZSAqLworIwlkZWZpbmUgUjMwMF9UWF9GT1JNQVRfQjhHOF9COEc4CSAgICAJICAgIDB4MTQJLyogbm8gc3dpenpsZSAqLworIwlkZWZpbmUgUjMwMF9UWF9GT1JNQVRfRzhSOF9HOEI4CSAgICAJICAgIDB4MTUJLyogbm8gc3dpenpsZSAqLwogCQkJCQkJICAvKiAweDE2IC0gc29tZSAxNiBiaXQgZ3JlZW4gZm9ybWF0Li4gPz8gKi8KLSMJZGVmaW5lIFIzMDBfVFhfRk9STUFUX1VOSzI1CQkgICAoMSA8PCAyNSkgLyogbm8gc3dpenpsZSAqLworIwlkZWZpbmUgUjMwMF9UWF9GT1JNQVRfVU5LMjUJCSAgICgxIDw8IDI1KQkvKiBubyBzd2l6emxlICovCiAKIAkvKiBnYXAgKi8KIAkvKiBGbG9hdGluZyBwb2ludCBmb3JtYXRzICovCkBAIC03NzcsOCArNzczLDggQEAKICMJZGVmaW5lIFIzMDBfVFhfRk9STUFUX1cJCTMKICMJZGVmaW5lIFIzMDBfVFhfRk9STUFUX1pFUk8JNAogIwlkZWZpbmUgUjMwMF9UWF9GT1JNQVRfT05FCTUKLSMJZGVmaW5lIFIzMDBfVFhfRk9STUFUX0NVVF9aCTYJCS8qIDIuMCpaLCBldmVyeXRoaW5nIGFib3ZlIDEuMCBpcyBzZXQgdG8gMC4wICovCi0jCWRlZmluZSBSMzAwX1RYX0ZPUk1BVF9DVVRfVwk3CQkvKiAyLjAqVywgZXZlcnl0aGluZyBhYm92ZSAxLjAgaXMgc2V0IHRvIDAuMCAqLworIwlkZWZpbmUgUjMwMF9UWF9GT1JNQVRfQ1VUX1oJNgkvKiAyLjAqWiwgZXZlcnl0aGluZyBhYm92ZSAxLjAgaXMgc2V0IHRvIDAuMCAqLworIwlkZWZpbmUgUjMwMF9UWF9GT1JNQVRfQ1VUX1cJNwkvKiAyLjAqVywgZXZlcnl0aGluZyBhYm92ZSAxLjAgaXMgc2V0IHRvIDAuMCAqLwogCiAjCWRlZmluZSBSMzAwX1RYX0ZPUk1BVF9CX1NISUZUCTE4CiAjCWRlZmluZSBSMzAwX1RYX0ZPUk1BVF9HX1NISUZUCTE1CkBAIC04MTEsNyArODA3LDcgQEAKICMgICAgICAgZGVmaW5lIFIzMDBfVFhPX09GRlNFVF9TSElGVCAgICAgICAgICAgICA1CiAvKiBFTkQgKi8KICNkZWZpbmUgUjMwMF9UWF9VTks0XzAgICAgICAgICAgICAgICAgICAgICAgMHg0NTgwCi0jZGVmaW5lIFIzMDBfVFhfQk9SREVSX0NPTE9SXzAgICAgICAgICAgICAgIDB4NDVDMCAvL2ZmMDBmZjAwID09IHsgMCwgMS4wLCAwLCAxLjAgfQorI2RlZmluZSBSMzAwX1RYX0JPUkRFUl9DT0xPUl8wICAgICAgICAgICAgICAweDQ1QzAJLy9mZjAwZmYwMCA9PSB7IDAsIDEuMCwgMCwgMS4wIH0KIAogLyogRU5EICovCiAKQEAgLTg0NCw5ICs4NDAsOSBAQAogIyAgICAgICBkZWZpbmUgUjMwMF9QRlNfQ05UTF9BTFVfRU5EX1NISUZUICAgICAgIDYKICMgICAgICAgZGVmaW5lIFIzMDBfUEZTX0NOVExfQUxVX0VORF9NQVNLICAgICAgICAoNjMgPDwgMCkKICMgICAgICAgZGVmaW5lIFIzMDBfUEZTX0NOVExfVEVYX09GRlNFVF9TSElGVCAgICAxMgotIyAgICAgICBkZWZpbmUgUjMwMF9QRlNfQ05UTF9URVhfT0ZGU0VUX01BU0sgICAgICgzMSA8PCAxMikgLyogR1VFU1MgKi8KKyMgICAgICAgZGVmaW5lIFIzMDBfUEZTX0NOVExfVEVYX09GRlNFVF9NQVNLICAgICAoMzEgPDwgMTIpCS8qIEdVRVNTICovCiAjICAgICAgIGRlZmluZSBSMzAwX1BGU19DTlRMX1RFWF9FTkRfU0hJRlQgICAgICAgMTgKLSMgICAgICAgZGVmaW5lIFIzMDBfUEZTX0NOVExfVEVYX0VORF9NQVNLICAgICAgICAoMzEgPDwgMTgpIC8qIEdVRVNTICovCisjICAgICAgIGRlZmluZSBSMzAwX1BGU19DTlRMX1RFWF9FTkRfTUFTSyAgICAgICAgKDMxIDw8IDE4KQkvKiBHVUVTUyAqLwogCiAvKiBnYXAgKi8KIC8qIE5vZGVzIGFyZSBzdG9yZWQgYmFja3dhcmRzLiBUaGUgbGFzdCBhY3RpdmUgbm9kZSBpcyBhbHdheXMgc3RvcmVkIGluCkBAIC04NzcsMTEgKzg3MywxMSBAQAogI2RlZmluZSBSMzAwX1BGU19URVhJXzAgICAgICAgICAgICAgICAgICAgICAweDQ2MjAKICMgICAgICAgZGVmaW5lIFIzMDBfRlBJVFhfU1JDX1NISUZUICAgICAgICAgICAgICAwCiAjICAgICAgIGRlZmluZSBSMzAwX0ZQSVRYX1NSQ19NQVNLICAgICAgICAgICAgICAgKDMxIDw8IDApCi0jICAgICAgIGRlZmluZSBSMzAwX0ZQSVRYX1NSQ19DT05TVCAgICAgICAgICAgICAgKDEgPDwgNSkgLyogR1VFU1MgKi8KKyMgICAgICAgZGVmaW5lIFIzMDBfRlBJVFhfU1JDX0NPTlNUICAgICAgICAgICAgICAoMSA8PCA1KQkvKiBHVUVTUyAqLwogIyAgICAgICBkZWZpbmUgUjMwMF9GUElUWF9EU1RfU0hJRlQgICAgICAgICAgICAgIDYKICMgICAgICAgZGVmaW5lIFIzMDBfRlBJVFhfRFNUX01BU0sgICAgICAgICAgICAgICAoMzEgPDwgNikKICMgICAgICAgZGVmaW5lIFIzMDBfRlBJVFhfSU1BR0VfU0hJRlQgICAgICAgICAgICAxMQotIyAgICAgICBkZWZpbmUgUjMwMF9GUElUWF9JTUFHRV9NQVNLICAgICAgICAgICAgICgxNSA8PCAxMSkgLyogR1VFU1MgYmFzZWQgb24gbGF5b3V0IGFuZCBuYXRpdmUgbGltaXRzICovCisjICAgICAgIGRlZmluZSBSMzAwX0ZQSVRYX0lNQUdFX01BU0sgICAgICAgICAgICAgKDE1IDw8IDExKQkvKiBHVUVTUyBiYXNlZCBvbiBsYXlvdXQgYW5kIG5hdGl2ZSBsaW1pdHMgKi8KIC8qIFVuc3VyZSBpZiB0aGVzZSBhcmUgb3Bjb2Rlcywgb3Igc29tZSBraW5kIG9mIGJpdGZpZWxkLCBidXQgdGhpcyBpcyBob3cKICAqIHRoZXkgd2VyZSBzZXQgd2hlbiBJIGNoZWNrZWQKICAqLwpAQCAtMTAwMyw3ICs5OTksNyBAQAogIyAgICAgICBkZWZpbmUgUjMwMF9GUEkwX0FSR0NfU1JDMUNfTFJQICAgICAgICAgIDE1CiAjICAgICAgIGRlZmluZSBSMzAwX0ZQSTBfQVJHQ19aRVJPICAgICAgICAgICAgICAgMjAKICMgICAgICAgZGVmaW5lIFIzMDBfRlBJMF9BUkdDX09ORSAgICAgICAgICAgICAgICAyMQotIyAgICAgICBkZWZpbmUgUjMwMF9GUEkwX0FSR0NfSEFMRiAgICAgICAgICAgICAgIDIyIC8qIEdVRVNTICovCisjICAgICAgIGRlZmluZSBSMzAwX0ZQSTBfQVJHQ19IQUxGICAgICAgICAgICAgICAgMjIJLyogR1VFU1MgKi8KICMgICAgICAgZGVmaW5lIFIzMDBfRlBJMF9BUkdDX1NSQzBDX1laWCAgICAgICAgICAyMwogIyAgICAgICBkZWZpbmUgUjMwMF9GUEkwX0FSR0NfU1JDMUNfWVpYICAgICAgICAgIDI0CiAjICAgICAgIGRlZmluZSBSMzAwX0ZQSTBfQVJHQ19TUkMyQ19ZWlggICAgICAgICAgMjUKQEAgLTEwNTQsMjAgKzEwNTAsMjAgQEAKICMgICAgICAgZGVmaW5lIFIzMDBfRlBJMl9BUkdBX1NSQzFBX0xSUCAgICAgICAgICAxNQogIyAgICAgICBkZWZpbmUgUjMwMF9GUEkyX0FSR0FfWkVSTyAgICAgICAgICAgICAgIDE2CiAjICAgICAgIGRlZmluZSBSMzAwX0ZQSTJfQVJHQV9PTkUgICAgICAgICAgICAgICAgMTcKLSMgICAgICAgZGVmaW5lIFIzMDBfRlBJMl9BUkdBX0hBTEYgICAgICAgICAgICAgICAxOCAvKiBHVUVTUyAqLworIyAgICAgICBkZWZpbmUgUjMwMF9GUEkyX0FSR0FfSEFMRiAgICAgICAgICAgICAgIDE4CS8qIEdVRVNTICovCiAKICMgICAgICAgZGVmaW5lIFIzMDBfRlBJMl9BUkcwQV9TSElGVCAgICAgICAgICAgICAwCiAjICAgICAgIGRlZmluZSBSMzAwX0ZQSTJfQVJHMEFfTUFTSyAgICAgICAgICAgICAgKDMxIDw8IDApCiAjICAgICAgIGRlZmluZSBSMzAwX0ZQSTJfQVJHMEFfTkVHICAgICAgICAgICAgICAgKDEgPDwgNSkKLSMJCWRlZmluZSBSMzAwX0ZQSTJfQVJHMEFfQUJTCQkJCSAoMSA8PCA2KSAvKiBHVUVTUyAqLworIwkJZGVmaW5lIFIzMDBfRlBJMl9BUkcwQV9BQlMJCQkJICgxIDw8IDYpCS8qIEdVRVNTICovCiAjICAgICAgIGRlZmluZSBSMzAwX0ZQSTJfQVJHMUFfU0hJRlQgICAgICAgICAgICAgNwogIyAgICAgICBkZWZpbmUgUjMwMF9GUEkyX0FSRzFBX01BU0sgICAgICAgICAgICAgICgzMSA8PCA3KQogIyAgICAgICBkZWZpbmUgUjMwMF9GUEkyX0FSRzFBX05FRyAgICAgICAgICAgICAgICgxIDw8IDEyKQotIwkJZGVmaW5lIFIzMDBfRlBJMl9BUkcxQV9BQlMJCQkJICgxIDw8IDEzKSAvKiBHVUVTUyAqLworIwkJZGVmaW5lIFIzMDBfRlBJMl9BUkcxQV9BQlMJCQkJICgxIDw8IDEzKQkvKiBHVUVTUyAqLwogIyAgICAgICBkZWZpbmUgUjMwMF9GUEkyX0FSRzJBX1NISUZUICAgICAgICAgICAgIDE0CiAjICAgICAgIGRlZmluZSBSMzAwX0ZQSTJfQVJHMkFfTUFTSyAgICAgICAgICAgICAgKDMxIDw8IDE0KQogIyAgICAgICBkZWZpbmUgUjMwMF9GUEkyX0FSRzJBX05FRyAgICAgICAgICAgICAgICgxIDw8IDE5KQotIwkJZGVmaW5lIFIzMDBfRlBJMl9BUkcyQV9BQlMJCQkJICgxIDw8IDIwKSAvKiBHVUVTUyAqLworIwkJZGVmaW5lIFIzMDBfRlBJMl9BUkcyQV9BQlMJCQkJICgxIDw8IDIwKQkvKiBHVUVTUyAqLwogIyAgICAgICBkZWZpbmUgUjMwMF9GUEkyX1NQRUNJQUxfTFJQICAgICAgICAgICAgICgxIDw8IDIxKQogIyAgICAgICBkZWZpbmUgUjMwMF9GUEkyX09VVEFfTUFEICAgICAgICAgICAgICAgICgwIDw8IDIzKQogIyAgICAgICBkZWZpbmUgUjMwMF9GUEkyX09VVEFfRFA0ICAgICAgICAgICAgICAgICgxIDw8IDIzKQpAQCAtMTE1NywyNiArMTE1MywyNiBAQAogCiAvKiBnYXAgKi8KICNkZWZpbmUgUjMwMF9SQjNEX0NPTE9ST0ZGU0VUMCAgICAgICAgICAgICAgMHg0RTI4Ci0jICAgICAgIGRlZmluZSBSMzAwX0NPTE9ST0ZGU0VUX01BU0sgICAgICAgICAgICAgMHhGRkZGRkZGMCAvKiBHVUVTUyAqLwotI2RlZmluZSBSMzAwX1JCM0RfQ09MT1JPRkZTRVQxICAgICAgICAgICAgICAweDRFMkMgLyogR1VFU1MgKi8KLSNkZWZpbmUgUjMwMF9SQjNEX0NPTE9ST0ZGU0VUMiAgICAgICAgICAgICAgMHg0RTMwIC8qIEdVRVNTICovCi0jZGVmaW5lIFIzMDBfUkIzRF9DT0xPUk9GRlNFVDMgICAgICAgICAgICAgIDB4NEUzNCAvKiBHVUVTUyAqLworIyAgICAgICBkZWZpbmUgUjMwMF9DT0xPUk9GRlNFVF9NQVNLICAgICAgICAgICAgIDB4RkZGRkZGRjAJLyogR1VFU1MgKi8KKyNkZWZpbmUgUjMwMF9SQjNEX0NPTE9ST0ZGU0VUMSAgICAgICAgICAgICAgMHg0RTJDCS8qIEdVRVNTICovCisjZGVmaW5lIFIzMDBfUkIzRF9DT0xPUk9GRlNFVDIgICAgICAgICAgICAgIDB4NEUzMAkvKiBHVUVTUyAqLworI2RlZmluZSBSMzAwX1JCM0RfQ09MT1JPRkZTRVQzICAgICAgICAgICAgICAweDRFMzQJLyogR1VFU1MgKi8KIC8qIGdhcCAqLwogLyogQml0IDE2OiBMYXJnZXIgdGlsZXMKIC8vIEJpdCAxNzogNHgyIHRpbGVzCiAvLyBCaXQgMTg6IEV4dHJlbWVseSB3ZWlyZCB0aWxlIGxpa2UsIGJ1dCBzb21lIHBpeGVscyBkdXBsaWNhdGVkPyAqLwogI2RlZmluZSBSMzAwX1JCM0RfQ09MT1JQSVRDSDAgICAgICAgICAgICAgICAweDRFMzgKLSMgICAgICAgZGVmaW5lIFIzMDBfQ09MT1JQSVRDSF9NQVNLICAgICAgICAgICAgICAweDAwMDAxRkY4IC8qIEdVRVNTICovCi0jICAgICAgIGRlZmluZSBSMzAwX0NPTE9SX1RJTEVfRU5BQkxFICAgICAgICAgICAgKDEgPDwgMTYpIC8qIEdVRVNTICovCi0jICAgICAgIGRlZmluZSBSMzAwX0NPTE9SX01JQ1JPVElMRV9FTkFCTEUgICAgICAgKDEgPDwgMTcpIC8qIEdVRVNTICovCi0jICAgICAgIGRlZmluZSBSMzAwX0NPTE9SX0VORElBTl9OT19TV0FQICAgICAgICAgKDAgPDwgMTgpIC8qIEdVRVNTICovCi0jICAgICAgIGRlZmluZSBSMzAwX0NPTE9SX0VORElBTl9XT1JEX1NXQVAgICAgICAgKDEgPDwgMTgpIC8qIEdVRVNTICovCi0jICAgICAgIGRlZmluZSBSMzAwX0NPTE9SX0VORElBTl9EV09SRF9TV0FQICAgICAgKDIgPDwgMTgpIC8qIEdVRVNTICovCisjICAgICAgIGRlZmluZSBSMzAwX0NPTE9SUElUQ0hfTUFTSyAgICAgICAgICAgICAgMHgwMDAwMUZGOAkvKiBHVUVTUyAqLworIyAgICAgICBkZWZpbmUgUjMwMF9DT0xPUl9USUxFX0VOQUJMRSAgICAgICAgICAgICgxIDw8IDE2KQkvKiBHVUVTUyAqLworIyAgICAgICBkZWZpbmUgUjMwMF9DT0xPUl9NSUNST1RJTEVfRU5BQkxFICAgICAgICgxIDw8IDE3KQkvKiBHVUVTUyAqLworIyAgICAgICBkZWZpbmUgUjMwMF9DT0xPUl9FTkRJQU5fTk9fU1dBUCAgICAgICAgICgwIDw8IDE4KQkvKiBHVUVTUyAqLworIyAgICAgICBkZWZpbmUgUjMwMF9DT0xPUl9FTkRJQU5fV09SRF9TV0FQICAgICAgICgxIDw8IDE4KQkvKiBHVUVTUyAqLworIyAgICAgICBkZWZpbmUgUjMwMF9DT0xPUl9FTkRJQU5fRFdPUkRfU1dBUCAgICAgICgyIDw8IDE4KQkvKiBHVUVTUyAqLwogIyAgICAgICBkZWZpbmUgUjMwMF9DT0xPUl9GT1JNQVRfUkdCNTY1ICAgICAgICAgICgyIDw8IDIyKQogIyAgICAgICBkZWZpbmUgUjMwMF9DT0xPUl9GT1JNQVRfQVJHQjg4ODggICAgICAgICgzIDw8IDIyKQotI2RlZmluZSBSMzAwX1JCM0RfQ09MT1JQSVRDSDEgICAgICAgICAgICAgICAweDRFM0MgLyogR1VFU1MgKi8KLSNkZWZpbmUgUjMwMF9SQjNEX0NPTE9SUElUQ0gyICAgICAgICAgICAgICAgMHg0RTQwIC8qIEdVRVNTICovCi0jZGVmaW5lIFIzMDBfUkIzRF9DT0xPUlBJVENIMyAgICAgICAgICAgICAgIDB4NEU0NCAvKiBHVUVTUyAqLworI2RlZmluZSBSMzAwX1JCM0RfQ09MT1JQSVRDSDEgICAgICAgICAgICAgICAweDRFM0MJLyogR1VFU1MgKi8KKyNkZWZpbmUgUjMwMF9SQjNEX0NPTE9SUElUQ0gyICAgICAgICAgICAgICAgMHg0RTQwCS8qIEdVRVNTICovCisjZGVmaW5lIFIzMDBfUkIzRF9DT0xPUlBJVENIMyAgICAgICAgICAgICAgIDB4NEU0NAkvKiBHVUVTUyAqLwogCiAvKiBnYXAgKi8KIC8qIEd1ZXNzIGJ5IFZsYWRpbWlyLgpAQCAtMTE4OSw4ICsxMTg1LDggQEAKIC8qIFRoZXJlIHNlZW1zIHRvIGJlIG5vICJ3cml0ZSBvbmx5IiBzZXR0aW5nLCBzbyB1c2UgWi10ZXN0ID0gQUxXQVlTIGZvciB0aGlzLiAqLwogLyogQml0ICgxPDw4KSBpcyB0aGUgInRlc3QiIGJpdC4gc28gcGxhaW4gd3JpdGUgaXMgNiAgLSB2ZCAqLwogI2RlZmluZSBSMzAwX1JCM0RfWlNURU5DSUxfQ05UTF8wICAgICAgICAgICAgICAgICAgIDB4NEYwMAotIyAgICAgICBkZWZpbmUgUjMwMF9SQjNEX1pfRElTQUJMRURfMSAgICAgICAgICAgIDB4MDAwMDAwMTAgLyogR1VFU1MgKi8KLSMgICAgICAgZGVmaW5lIFIzMDBfUkIzRF9aX0RJU0FCTEVEXzIgICAgICAgICAgICAweDAwMDAwMDE0IC8qIEdVRVNTICovCisjICAgICAgIGRlZmluZSBSMzAwX1JCM0RfWl9ESVNBQkxFRF8xICAgICAgICAgICAgMHgwMDAwMDAxMAkvKiBHVUVTUyAqLworIyAgICAgICBkZWZpbmUgUjMwMF9SQjNEX1pfRElTQUJMRURfMiAgICAgICAgICAgIDB4MDAwMDAwMTQJLyogR1VFU1MgKi8KICMgICAgICAgZGVmaW5lIFIzMDBfUkIzRF9aX1RFU1QgICAgICAgICAgICAgICAgICAweDAwMDAwMDEyCiAjICAgICAgIGRlZmluZSBSMzAwX1JCM0RfWl9URVNUX0FORF9XUklURSAgICAgICAgMHgwMDAwMDAxNgogIyAgICAgICBkZWZpbmUgUjMwMF9SQjNEX1pfV1JJVEVfT05MWSAgICAgICAgCSAweDAwMDAwMDA2CkBAIC0xMjMzLDggKzEyMjksNiBAQAogIwlkZWZpbmUgUjMwMF9SQjNEX1pTMV9CQUNLX1pQQVNTX09QX1NISUZUICAgICAgIDIxCiAjCWRlZmluZSBSMzAwX1JCM0RfWlMxX0JBQ0tfWkZBSUxfT1BfU0hJRlQgICAgICAgMjQKIAotCi0KICNkZWZpbmUgUjMwMF9SQjNEX1pTVEVOQ0lMX0NOVExfMiAgICAgICAgICAgICAgICAgICAweDRGMDgKICMJZGVmaW5lIFIzMDBfUkIzRF9aUzJfU1RFTkNJTF9SRUZfU0hJRlQJCTAKICMJZGVmaW5lIFIzMDBfUkIzRF9aUzJfU1RFTkNJTF9NQVNLCQkweEZGCkBAIC0xMjUwLDEyICsxMjQ0LDEyIEBACiAvKiBnYXAgKi8KICNkZWZpbmUgUjMwMF9SQjNEX0RFUFRIT0ZGU0VUICAgICAgICAgICAgICAgMHg0RjIwCiAjZGVmaW5lIFIzMDBfUkIzRF9ERVBUSFBJVENIICAgICAgICAgICAgICAgIDB4NEYyNAotIyAgICAgICBkZWZpbmUgUjMwMF9ERVBUSFBJVENIX01BU0sgICAgICAgICAgICAgIDB4MDAwMDFGRjggLyogR1VFU1MgKi8KLSMgICAgICAgZGVmaW5lIFIzMDBfREVQVEhfVElMRV9FTkFCTEUgICAgICAgICAgICAoMSA8PCAxNikgLyogR1VFU1MgKi8KLSMgICAgICAgZGVmaW5lIFIzMDBfREVQVEhfTUlDUk9USUxFX0VOQUJMRSAgICAgICAoMSA8PCAxNykgLyogR1VFU1MgKi8KLSMgICAgICAgZGVmaW5lIFIzMDBfREVQVEhfRU5ESUFOX05PX1NXQVAgICAgICAgICAoMCA8PCAxOCkgLyogR1VFU1MgKi8KLSMgICAgICAgZGVmaW5lIFIzMDBfREVQVEhfRU5ESUFOX1dPUkRfU1dBUCAgICAgICAoMSA8PCAxOCkgLyogR1VFU1MgKi8KLSMgICAgICAgZGVmaW5lIFIzMDBfREVQVEhfRU5ESUFOX0RXT1JEX1NXQVAgICAgICAoMiA8PCAxOCkgLyogR1VFU1MgKi8KKyMgICAgICAgZGVmaW5lIFIzMDBfREVQVEhQSVRDSF9NQVNLICAgICAgICAgICAgICAweDAwMDAxRkY4CS8qIEdVRVNTICovCisjICAgICAgIGRlZmluZSBSMzAwX0RFUFRIX1RJTEVfRU5BQkxFICAgICAgICAgICAgKDEgPDwgMTYpCS8qIEdVRVNTICovCisjICAgICAgIGRlZmluZSBSMzAwX0RFUFRIX01JQ1JPVElMRV9FTkFCTEUgICAgICAgKDEgPDwgMTcpCS8qIEdVRVNTICovCisjICAgICAgIGRlZmluZSBSMzAwX0RFUFRIX0VORElBTl9OT19TV0FQICAgICAgICAgKDAgPDwgMTgpCS8qIEdVRVNTICovCisjICAgICAgIGRlZmluZSBSMzAwX0RFUFRIX0VORElBTl9XT1JEX1NXQVAgICAgICAgKDEgPDwgMTgpCS8qIEdVRVNTICovCisjICAgICAgIGRlZmluZSBSMzAwX0RFUFRIX0VORElBTl9EV09SRF9TV0FQICAgICAgKDIgPDwgMTgpCS8qIEdVRVNTICovCiAKIC8qIEJFR0lOOiBWZXJ0ZXggcHJvZ3JhbSBpbnN0cnVjdGlvbiBzZXQKIC8vIEV2ZXJ5IGluc3RydWN0aW9uIGlzIGZvdXIgZHdvcmRzIGxvbmc6CkBAIC0xMjk1LDI2ICsxMjg5LDI2IEBACiAjZGVmaW5lIFIzMDBfVlBJX09VVF9PUF9NSU4gICAgICAgICAgICAgICAgICAgICAoOCA8PCAwKQogI2RlZmluZSBSMzAwX1ZQSV9PVVRfT1BfU0dFICAgICAgICAgICAgICAgICAgICAgKDkgPDwgMCkKICNkZWZpbmUgUjMwMF9WUElfT1VUX09QX1NMVCAgICAgICAgICAgICAgICAgICAgICgxMCA8PCAwKQotI2RlZmluZSBSMzAwX1ZQSV9PVVRfT1BfVU5LMTIgICAgICAgICAgICAgICAgICAgKDEyIDw8IDApIC8qIFVzZWQgaW4gR0xfUE9JTlRfRElTVEFOQ0VfQVRURU5VQVRJT05fQVJCLCB2ZWN0b3Ioc2NhbGFyLCB2ZWN0b3IpICovCisjZGVmaW5lIFIzMDBfVlBJX09VVF9PUF9VTksxMiAgICAgICAgICAgICAgICAgICAoMTIgPDwgMCkJLyogVXNlZCBpbiBHTF9QT0lOVF9ESVNUQU5DRV9BVFRFTlVBVElPTl9BUkIsIHZlY3RvcihzY2FsYXIsIHZlY3RvcikgKi8KICNkZWZpbmUgUjMwMF9WUElfT1VUX09QX0VYUCAgICAgICAgICAgICAgICAgICAgICg2NSA8PCAwKQogI2RlZmluZSBSMzAwX1ZQSV9PVVRfT1BfTE9HICAgICAgICAgICAgICAgICAgICAgKDY2IDw8IDApCi0jZGVmaW5lIFIzMDBfVlBJX09VVF9PUF9VTks2NyAgICAgICAgICAgICAgICAgICAoNjcgPDwgMCkgLyogVXNlZCBpbiBmb2cgY29tcHV0YXRpb25zLCBzY2FsYXIoc2NhbGFyKSAqLworI2RlZmluZSBSMzAwX1ZQSV9PVVRfT1BfVU5LNjcgICAgICAgICAgICAgICAgICAgKDY3IDw8IDApCS8qIFVzZWQgaW4gZm9nIGNvbXB1dGF0aW9ucywgc2NhbGFyKHNjYWxhcikgKi8KICNkZWZpbmUgUjMwMF9WUElfT1VUX09QX0xJVCAgICAgICAgICAgICAgICAgICAgICg2OCA8PCAwKQogI2RlZmluZSBSMzAwX1ZQSV9PVVRfT1BfUE9XICAgICAgICAgICAgICAgICAgICAgKDY5IDw8IDApCiAjZGVmaW5lIFIzMDBfVlBJX09VVF9PUF9SQ1AgICAgICAgICAgICAgICAgICAgICAoNzAgPDwgMCkKICNkZWZpbmUgUjMwMF9WUElfT1VUX09QX1JTUSAgICAgICAgICAgICAgICAgICAgICg3MiA8PCAwKQotI2RlZmluZSBSMzAwX1ZQSV9PVVRfT1BfVU5LNzMgICAgICAgICAgICAgICAgICAgKDczIDw8IDApIC8qIFVzZWQgaW4gR0xfUE9JTlRfRElTVEFOQ0VfQVRURU5VQVRJT05fQVJCLCBzY2FsYXIoc2NhbGFyKSAqLworI2RlZmluZSBSMzAwX1ZQSV9PVVRfT1BfVU5LNzMgICAgICAgICAgICAgICAgICAgKDczIDw8IDApCS8qIFVzZWQgaW4gR0xfUE9JTlRfRElTVEFOQ0VfQVRURU5VQVRJT05fQVJCLCBzY2FsYXIoc2NhbGFyKSAqLwogI2RlZmluZSBSMzAwX1ZQSV9PVVRfT1BfRVgyICAgICAgICAgICAgICAgICAgICAgKDc1IDw8IDApCiAjZGVmaW5lIFIzMDBfVlBJX09VVF9PUF9MRzIgICAgICAgICAgICAgICAgICAgICAoNzYgPDwgMCkKICNkZWZpbmUgUjMwMF9WUElfT1VUX09QX01BRF8yICAgICAgICAgICAgICAgICAgICgxMjggPDwgMCkKLSNkZWZpbmUgUjMwMF9WUElfT1VUX09QX1VOSzEyOSAgICAgICAgICAgICAgICAgICgxMjkgPDwgMCkgLyogYWxsIHRlbXBzLCB2ZWN0b3Ioc2NhbGFyLCB2ZWN0b3IsIHZlY3RvcikgKi8KKyNkZWZpbmUgUjMwMF9WUElfT1VUX09QX1VOSzEyOSAgICAgICAgICAgICAgICAgICgxMjkgPDwgMCkJLyogYWxsIHRlbXBzLCB2ZWN0b3Ioc2NhbGFyLCB2ZWN0b3IsIHZlY3RvcikgKi8KIAogI2RlZmluZSBSMzAwX1ZQSV9PVVRfUkVHX0NMQVNTX1RFTVBPUkFSWSAgICAgICAgKDAgPDwgOCkKICNkZWZpbmUgUjMwMF9WUElfT1VUX1JFR19DTEFTU19SRVNVTFQgICAgICAgICAgICgyIDw8IDgpCiAjZGVmaW5lIFIzMDBfVlBJX09VVF9SRUdfQ0xBU1NfTUFTSyAgICAgICAgICAgICAoMzEgPDwgOCkKIAogI2RlZmluZSBSMzAwX1ZQSV9PVVRfUkVHX0lOREVYX1NISUZUICAgICAgICAgICAgMTMKLSNkZWZpbmUgUjMwMF9WUElfT1VUX1JFR19JTkRFWF9NQVNLICAgICAgICAgICAgICgzMSA8PCAxMykgLyogR1VFU1MgYmFzZWQgb24gZmdscnggbmF0aXZlIGxpbWl0cyAqLworI2RlZmluZSBSMzAwX1ZQSV9PVVRfUkVHX0lOREVYX01BU0sgICAgICAgICAgICAgKDMxIDw8IDEzKQkvKiBHVUVTUyBiYXNlZCBvbiBmZ2xyeCBuYXRpdmUgbGltaXRzICovCiAKICNkZWZpbmUgUjMwMF9WUElfT1VUX1dSSVRFX1ggICAgICAgICAgICAgICAgICAgICgxIDw8IDIwKQogI2RlZmluZSBSMzAwX1ZQSV9PVVRfV1JJVEVfWSAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjEpCkBAIC0xMzI1LDEwICsxMzE5LDEwIEBACiAjZGVmaW5lIFIzMDBfVlBJX0lOX1JFR19DTEFTU19BVFRSSUJVVEUgICAgICAgICAoMSA8PCAwKQogI2RlZmluZSBSMzAwX1ZQSV9JTl9SRUdfQ0xBU1NfUEFSQU1FVEVSICAgICAgICAgKDIgPDwgMCkKICNkZWZpbmUgUjMwMF9WUElfSU5fUkVHX0NMQVNTX05PTkUgICAgICAgICAgICAgICg5IDw8IDApCi0jZGVmaW5lIFIzMDBfVlBJX0lOX1JFR19DTEFTU19NQVNLICAgICAgICAgICAgICAoMzEgPDwgMCkgLyogR1VFU1MgKi8KKyNkZWZpbmUgUjMwMF9WUElfSU5fUkVHX0NMQVNTX01BU0sgICAgICAgICAgICAgICgzMSA8PCAwKQkvKiBHVUVTUyAqLwogCiAjZGVmaW5lIFIzMDBfVlBJX0lOX1JFR19JTkRFWF9TSElGVCAgICAgICAgICAgICA1Ci0jZGVmaW5lIFIzMDBfVlBJX0lOX1JFR19JTkRFWF9NQVNLICAgICAgICAgICAgICAoMjU1IDw8IDUpIC8qIEdVRVNTIGJhc2VkIG9uIGZnbHJ4IG5hdGl2ZSBsaW1pdHMgKi8KKyNkZWZpbmUgUjMwMF9WUElfSU5fUkVHX0lOREVYX01BU0sgICAgICAgICAgICAgICgyNTUgPDwgNSkJLyogR1VFU1MgYmFzZWQgb24gZmdscnggbmF0aXZlIGxpbWl0cyAqLwogCiAvKiBUaGUgUjMwMCBjYW4gc2VsZWN0IGNvbXBvbmVudHMgZnJvbSB0aGUgaW5wdXQgcmVnaXN0ZXIgYXJiaXRyYXJpbHkuCiAvLyBVc2UgdGhlIGZvbGxvd2luZyBjb25zdGFudHMsIHNoaWZ0ZWQgYnkgdGhlIGNvbXBvbmVudCBzaGlmdCB5b3UKQEAgLTEzNjYsNyArMTM2MCw3IEBACiAjZGVmaW5lIFIzMDBfUFJJTV9UWVBFX1JFQ1RfTElTVCAgICAgICAgICAgICAgICAoOCA8PCAwKQogI2RlZmluZSBSMzAwX1BSSU1fVFlQRV8zVlJUX1BPSU5UX0xJU1QgICAgICAgICAgKDkgPDwgMCkKICNkZWZpbmUgUjMwMF9QUklNX1RZUEVfM1ZSVF9MSU5FX0xJU1QgICAgICAgICAgICgxMCA8PCAwKQotI2RlZmluZSBSMzAwX1BSSU1fVFlQRV9QT0lOVF9TUFJJVEVTICAgICAgICAgICAgKDExIDw8IDApIC8vIEdVRVNTIChiYXNlZCBvbiByMjAwKQorI2RlZmluZSBSMzAwX1BSSU1fVFlQRV9QT0lOVF9TUFJJVEVTICAgICAgICAgICAgKDExIDw8IDApCS8vIEdVRVNTIChiYXNlZCBvbiByMjAwKQogI2RlZmluZSBSMzAwX1BSSU1fVFlQRV9MSU5FX0xPT1AgICAgICAgICAgICAgICAgKDEyIDw8IDApCiAjZGVmaW5lIFIzMDBfUFJJTV9UWVBFX1FVQURTICAgICAgICAgICAgICAgICAgICAoMTMgPDwgMCkKICNkZWZpbmUgUjMwMF9QUklNX1RZUEVfUVVBRF9TVFJJUCAgICAgICAgICAgICAgICgxNCA8PCAwKQpAQCAtMTM3Niw4ICsxMzcwLDggQEAKICNkZWZpbmUgUjMwMF9QUklNX1dBTEtfTElTVCAgICAgICAgICAgICAgICAgICAgICgyIDw8IDQpCiAjZGVmaW5lIFIzMDBfUFJJTV9XQUxLX1JJTkcgICAgICAgICAgICAgICAgICAgICAoMyA8PCA0KQogI2RlZmluZSBSMzAwX1BSSU1fV0FMS19NQVNLICAgICAgICAgICAgICAgICAgICAgKDMgPDwgNCkKLSNkZWZpbmUgUjMwMF9QUklNX0NPTE9SX09SREVSX0JHUkEgICAgICAgICAgICAgICgwIDw8IDYpIC8vIEdVRVNTIChiYXNlZCBvbiByMjAwKQotI2RlZmluZSBSMzAwX1BSSU1fQ09MT1JfT1JERVJfUkdCQSAgICAgICAgICAgICAgKDEgPDwgNikgLy8gR1VFU1MKKyNkZWZpbmUgUjMwMF9QUklNX0NPTE9SX09SREVSX0JHUkEgICAgICAgICAgICAgICgwIDw8IDYpCS8vIEdVRVNTIChiYXNlZCBvbiByMjAwKQorI2RlZmluZSBSMzAwX1BSSU1fQ09MT1JfT1JERVJfUkdCQSAgICAgICAgICAgICAgKDEgPDwgNikJLy8gR1VFU1MKICNkZWZpbmUgUjMwMF9QUklNX05VTV9WRVJUSUNFU19TSElGVCAgICAgICAgICAgIDE2CiAKIC8vIERyYXcgYSBwcmltaXRpdmUgZnJvbSB2ZXJ0ZXggZGF0YSBpbiBhcnJheXMgbG9hZGVkIHZpYSAzRF9MT0FEX1ZCUE5UUi4KQEAgLTE0MDksNCArMTQwMyw0IEBACiAKIC8vRU5ECiAKLSNlbmRpZiAvKiBfUjMwMF9SRUdfSCAqLworI2VuZGlmCQkJCS8qIF9SMzAwX1JFR19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3JhZGVvbl9jcC5jIGIvZHJpdmVycy9jaGFyL2RybS9yYWRlb25fY3AuYwppbmRleCA2ZGZmNWU0Li40NDdiZmJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL3JhZGVvbl9jcC5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX2NwLmMKQEAgLTM2LDc4OCArMzYsNzg3IEBACiAKICNkZWZpbmUgUkFERU9OX0ZJRk9fREVCVUcJMAogCi1zdGF0aWMgaW50IHJhZGVvbl9kb19jbGVhbnVwX2NwKCBkcm1fZGV2aWNlX3QgKmRldiApOworc3RhdGljIGludCByYWRlb25fZG9fY2xlYW51cF9jcChkcm1fZGV2aWNlX3QgKiBkZXYpOwogCiAvKiBDUCBtaWNyb2NvZGUgKGZyb20gQVRJKSAqLwogc3RhdGljIHUzMiBSMjAwX2NwX21pY3JvY29kZVtdWzJdID0gewotCXsgMHgyMTAwNzAwMCwgMDAwMDAwMDAwMCB9LCAgICAgICAgCi0JeyAweDIwMDA3MDAwLCAwMDAwMDAwMDAwIH0sIAotCXsgMHgwMDAwMDBhYiwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDAwMDBhZiwgMHgwMDAwMDAwNCB9LAotCXsgMHg2NjU0NGE0OSwgMDAwMDAwMDAwMCB9LAotCXsgMHg0OTQ5NDE3NCwgMDAwMDAwMDAwMCB9LAotCXsgMHg1NDUxN2Q4MywgMDAwMDAwMDAwMCB9LAotCXsgMHg0OThkOGI2NCwgMDAwMDAwMDAwMCB9LAotCXsgMHg0OTQ5NDk0OSwgMDAwMDAwMDAwMCB9LAotCXsgMHg0OWRhNDkzYywgMDAwMDAwMDAwMCB9LAotCXsgMHg0OTk4OTg5OCwgMDAwMDAwMDAwMCB9LAotCXsgMHhkMzQ5NDlkNSwgMDAwMDAwMDAwMCB9LAotCXsgMHg5ZGM5MGUxMSwgMDAwMDAwMDAwMCB9LAotCXsgMHhjZTliOWI5YiwgMDAwMDAwMDAwMCB9LAotCXsgMHgwMDBmMDAwMCwgMHgwMDAwMDAxNiB9LAotCXsgMHgzNTJlMjMyYywgMDAwMDAwMDAwMCB9LAotCXsgMHgwMDAwMDAxMywgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDBmMDAwMCwgMHgwMDAwMDAxNiB9LAotCXsgMHgzNTJlMjcyYywgMDAwMDAwMDAwMCB9LAotCXsgMHgwMDBmMDAwMSwgMHgwMDAwMDAxNiB9LAotCXsgMHgzMjM5MzYyZiwgMDAwMDAwMDAwMCB9LAotCXsgMHgwMDAwNzdlZiwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDA2MTAwMCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDAwMDAyMCwgMHgwMDAwMDAxYSB9LAotCXsgMHgwMDAwNDAwMCwgMHgwMDAwMDAxZSB9LAotCXsgMHgwMDA2MTAwMCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDAwMDAyMCwgMHgwMDAwMDAxYSB9LAotCXsgMHgwMDAwNDAwMCwgMHgwMDAwMDAxZSB9LAotCXsgMHgwMDA2MTAwMCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDAwMDAyMCwgMHgwMDAwMDAxYSB9LAotCXsgMHgwMDAwNDAwMCwgMHgwMDAwMDAxZSB9LAotCXsgMHgwMDAwMDAxNiwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDAzODAyYSwgMHgwMDAwMDAwMiB9LAotCXsgMHgwNDAwNjdlMCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDAwMDAxNiwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDAwNzdlMCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDA2NTAwMCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDAwMzdlMSwgMHgwMDAwMDAwMiB9LAotCXsgMHgwNDAwNjdlMSwgMHgwMDAwMDAwNiB9LAotCXsgMHgwMDAwNzdlMCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDAwNzdlMSwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDAwNzdlMSwgMHgwMDAwMDAwNiB9LAotCXsgMHhmZmZmZmZmZiwgMDAwMDAwMDAwMCB9LAotCXsgMHgxMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMHgwMDAzODAyYSwgMHgwMDAwMDAwMiB9LAotCXsgMHgwNDAwNjdlMCwgMHgwMDAwMDAwNiB9LAotCXsgMHgwMDAwNzY3NSwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDAwNzY3NiwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDAwNzY3NywgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDAwNzY3OCwgMHgwMDAwMDAwNiB9LAotCXsgMHgwMDAzODAyYiwgMHgwMDAwMDAwMiB9LAotCXsgMHgwNDAwMjY3NiwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDAwNzY3NywgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDAwNzY3OCwgMHgwMDAwMDAwNiB9LAotCXsgMHgwMDAwMDAyZSwgMHgwMDAwMDAxOCB9LAotCXsgMHgwMDAwMDAyZSwgMHgwMDAwMDAxOCB9LAotCXsgMDAwMDAwMDAwMCwgMHgwMDAwMDAwNiB9LAotCXsgMHgwMDAwMDAyZiwgMHgwMDAwMDAxOCB9LAotCXsgMHgwMDAwMDAyZiwgMHgwMDAwMDAxOCB9LAotCXsgMDAwMDAwMDAwMCwgMHgwMDAwMDAwNiB9LAotCXsgMHgwMTYwNTAwMCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDA2NTAwMCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDA5ODAwMCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDA2MTAwMCwgMHgwMDAwMDAwMiB9LAotCXsgMHg2NGMwNjAzZCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDA4MDAwMCwgMHgwMDAwMDAxNiB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMHgwNDAwMjUxZCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDAwNzU4MCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDA2NzU4MSwgMHgwMDAwMDAwMiB9LAotCXsgMHgwNDAwMjU4MCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDA2NzU4MSwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDAwMDA0NiwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDAwNTAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMHgwMDA2MTAwMCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDAwNzUwZSwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDAxOTAwMCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDAxMTA1NSwgMHgwMDAwMDAxNCB9LAotCXsgMHgwMDAwMDA1NSwgMHgwMDAwMDAxMiB9LAotCXsgMHgwNDAwMjUwZiwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDAwNTA0YSwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDAwNzU2NSwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDAwNzU2NiwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDAwMDA1MSwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMWU2NTViNCwgMHgwMDAwMDAwMiB9LAotCXsgMHg0NDAxYjBkYywgMHgwMDAwMDAwMiB9LAotCXsgMHgwMWMxMTBkYywgMHgwMDAwMDAwMiB9LAotCXsgMHgyNjY2NzA1ZCwgMHgwMDAwMDAxOCB9LAotCXsgMHgwNDBjMjU2NSwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDAwMDA1ZCwgMHgwMDAwMDAxOCB9LAotCXsgMHgwNDAwMjU2NCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDAwNzU2NiwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDAwMDA1NCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDQwMTA2MCwgMHgwMDAwMDAwOCB9LAotCXsgMHgwMDEwMTAwMCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDBkODBmZiwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDgwMDA2MywgMHgwMDAwMDAwOCB9LAotCXsgMHgwMDBmOTAwMCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDBlMDBmZiwgMHgwMDAwMDAwMiB9LAotCXsgMDAwMDAwMDAwMCwgMHgwMDAwMDAwNiB9LAotCXsgMHgwMDAwMDA4MCwgMHgwMDAwMDAxOCB9LAotCXsgMHgwMDAwMDA1NCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDAwNzU3NiwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDA2NTAwMCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDAwOTAwMCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDA0MTAwMCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwYzAwMzUwZSwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDA0OTAwMCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDA1MTAwMCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMWU3ODVmOCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDIwMDAwMCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDYwMDA3MywgMHgwMDAwMDAwYyB9LAotCXsgMHgwMDAwNzU2MywgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDYwNzVmMCwgMHgwMDAwMDAyMSB9LAotCXsgMHgyMDAwNzA2OCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDAwNTA2OCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDAwNzU3NiwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDAwNzU3NywgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDAwNzUwZSwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDAwNzUwZiwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMGEwNTAwMCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDYwMDA3NiwgMHgwMDAwMDAwYyB9LAotCXsgMHgwMDYwNzVmMCwgMHgwMDAwMDAyMSB9LAotCXsgMHgwMDAwNzVmOCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDAwMDA3NiwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDBhNzUwZSwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDIwNzUwZiwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDYwMDA3OSwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDAwNzU3MCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDAwNzU3MSwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDAwNzU3MiwgMHgwMDAwMDAwNiB9LAotCXsgMHgwMDAwNTAwMCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMGEwNTAwMCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDAwNzU2OCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDA2MTAwMCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDAwMDA4NCwgMHgwMDAwMDAwYyB9LAotCXsgMHgwMDA1ODAwMCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwYzYwNzU2MiwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDAwMDA4NiwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDYwMDA4NSwgMHgwMDAwMDAwNCB9LAotCXsgMHg0MDAwNzBkZCwgMDAwMDAwMDAwMCB9LAotCXsgMHgwMDAzODBkZCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDAwMDA5MywgMHgwMDAwMDAxYyB9LAotCXsgMHgwMDA2NTA5NSwgMHgwMDAwMDAxOCB9LAotCXsgMHgwNDAwMjViYiwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDA2MTA5NiwgMHgwMDAwMDAxOCB9LAotCXsgMHgwNDAwNzViYywgMDAwMDAwMDAwMCB9LAotCXsgMHgwMDAwNzViYiwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDAwNzViYywgMDAwMDAwMDAwMCB9LAotCXsgMHgwMDA5MDAwMCwgMHgwMDAwMDAwNiB9LAotCXsgMHgwMDA5MDAwMCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDBkODAwMiwgMHgwMDAwMDAwNiB9LAotCXsgMHgwMDAwNTAwMCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDAwNzgyMSwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDAwNzgwMCwgMDAwMDAwMDAwMCB9LAotCXsgMHgwMDAwNzgyMSwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDAwNzgwMCwgMDAwMDAwMDAwMCB9LAotCXsgMHgwMTY2NTAwMCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDBhMDAwMCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDA2NzFjYywgMHgwMDAwMDAwMiB9LAotCXsgMHgwMjg2ZjFjZCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDAwMDBhMywgMHgwMDAwMDAxMCB9LAotCXsgMHgyMTAwNzAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMHgwMDAwMDBhYSwgMHgwMDAwMDAxYyB9LAotCXsgMHgwMDA2NTAwMCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDBhMDAwMCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDA2MTAwMCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDBiMDAwMCwgMHgwMDAwMDAwMiB9LAotCXsgMHgzODA2NzAwMCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDBhMDBhNiwgMHgwMDAwMDAwNCB9LAotCXsgMHgyMDAwNzAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMHgwMTIwMDAwMCwgMHgwMDAwMDAwMiB9LAotCXsgMHgyMDA3NzAwMCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMTIwMDAwMCwgMHgwMDAwMDAwMiB9LAotCXsgMHgyMDAwNzAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMHgwMDA2MTAwMCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMTIwNzUxYiwgMHgwMDAwMDAwMiB9LAotCXsgMHg4MDQwNzUwYSwgMHgwMDAwMDAwMiB9LAotCXsgMHg4MDQwNzUwYiwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDExMDAwMCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDAzODBkZCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDAwMDBiZCwgMHgwMDAwMDAxYyB9LAotCXsgMHgwMDA2MTA5NiwgMHgwMDAwMDAxOCB9LAotCXsgMHg4NDQwNzViZCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDA2MTA5NSwgMHgwMDAwMDAxOCB9LAotCXsgMHg4NDAwNzViYiwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDA2MTA5NiwgMHgwMDAwMDAxOCB9LAotCXsgMHg4NDQwNzViYywgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDAwMDBjMCwgMHgwMDAwMDAwNCB9LAotCXsgMHg4MDQwNzViZCwgMHgwMDAwMDAwMiB9LAotCXsgMHg4MDAwNzViYiwgMHgwMDAwMDAwMiB9LAotCXsgMHg4MDQwNzViYywgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDEwODAwMCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMTQwMDAwMCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDYwMDBjNCwgMHgwMDAwMDAwYyB9LAotCXsgMHgyMGMwNzAwMCwgMHgwMDAwMDAyMCB9LAotCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDAxMiB9LAotCXsgMHgwMDgwMDAwMCwgMHgwMDAwMDAwNiB9LAotCXsgMHgwMDgwNzUxZCwgMHgwMDAwMDAwNiB9LAotCXsgMHgwMDAwMjViYiwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDAwNDBjMCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDAwNzc1YywgMHgwMDAwMDAwMiB9LAotCXsgMHgwMGEwNTAwMCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDY2MTAwMCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwNDYwMjc1ZCwgMHgwMDAwMDAyMCB9LAotCXsgMHgwMDAwNDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMHgwMDAwNzk5OSwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMGEwNTAwMCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDY2MTAwMCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwNDYwMjk5YiwgMHgwMDAwMDAyMCB9LAotCXsgMHgwMDAwNDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMHgwMWUwMDgzMCwgMHgwMDAwMDAwMiB9LAotCXsgMHgyMTAwNzAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMHgwMDAwNTAwMCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDAzODA0MiwgMHgwMDAwMDAwMiB9LAotCXsgMHgwNDAwMjVlMCwgMHgwMDAwMDAwMiB9LAotCXsgMHgwMDAwNzVlMSwgMDAwMDAwMDAwMCB9LAotCXsgMHgwMDAwMDAwMSwgMDAwMDAwMDAwMCB9LAotCXsgMHgwMDAzODBkOSwgMHgwMDAwMDAwMiB9LAotCXsgMHgwNDAwNzM5NCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAorCXsweDIxMDA3MDAwLCAwMDAwMDAwMDAwfSwKKwl7MHgyMDAwNzAwMCwgMDAwMDAwMDAwMH0sCisJezB4MDAwMDAwYWIsIDB4MDAwMDAwMDR9LAorCXsweDAwMDAwMGFmLCAweDAwMDAwMDA0fSwKKwl7MHg2NjU0NGE0OSwgMDAwMDAwMDAwMH0sCisJezB4NDk0OTQxNzQsIDAwMDAwMDAwMDB9LAorCXsweDU0NTE3ZDgzLCAwMDAwMDAwMDAwfSwKKwl7MHg0OThkOGI2NCwgMDAwMDAwMDAwMH0sCisJezB4NDk0OTQ5NDksIDAwMDAwMDAwMDB9LAorCXsweDQ5ZGE0OTNjLCAwMDAwMDAwMDAwfSwKKwl7MHg0OTk4OTg5OCwgMDAwMDAwMDAwMH0sCisJezB4ZDM0OTQ5ZDUsIDAwMDAwMDAwMDB9LAorCXsweDlkYzkwZTExLCAwMDAwMDAwMDAwfSwKKwl7MHhjZTliOWI5YiwgMDAwMDAwMDAwMH0sCisJezB4MDAwZjAwMDAsIDB4MDAwMDAwMTZ9LAorCXsweDM1MmUyMzJjLCAwMDAwMDAwMDAwfSwKKwl7MHgwMDAwMDAxMywgMHgwMDAwMDAwNH0sCisJezB4MDAwZjAwMDAsIDB4MDAwMDAwMTZ9LAorCXsweDM1MmUyNzJjLCAwMDAwMDAwMDAwfSwKKwl7MHgwMDBmMDAwMSwgMHgwMDAwMDAxNn0sCisJezB4MzIzOTM2MmYsIDAwMDAwMDAwMDB9LAorCXsweDAwMDA3N2VmLCAweDAwMDAwMDAyfSwKKwl7MHgwMDA2MTAwMCwgMHgwMDAwMDAwMn0sCisJezB4MDAwMDAwMjAsIDB4MDAwMDAwMWF9LAorCXsweDAwMDA0MDAwLCAweDAwMDAwMDFlfSwKKwl7MHgwMDA2MTAwMCwgMHgwMDAwMDAwMn0sCisJezB4MDAwMDAwMjAsIDB4MDAwMDAwMWF9LAorCXsweDAwMDA0MDAwLCAweDAwMDAwMDFlfSwKKwl7MHgwMDA2MTAwMCwgMHgwMDAwMDAwMn0sCisJezB4MDAwMDAwMjAsIDB4MDAwMDAwMWF9LAorCXsweDAwMDA0MDAwLCAweDAwMDAwMDFlfSwKKwl7MHgwMDAwMDAxNiwgMHgwMDAwMDAwNH0sCisJezB4MDAwMzgwMmEsIDB4MDAwMDAwMDJ9LAorCXsweDA0MDA2N2UwLCAweDAwMDAwMDAyfSwKKwl7MHgwMDAwMDAxNiwgMHgwMDAwMDAwNH0sCisJezB4MDAwMDc3ZTAsIDB4MDAwMDAwMDJ9LAorCXsweDAwMDY1MDAwLCAweDAwMDAwMDAyfSwKKwl7MHgwMDAwMzdlMSwgMHgwMDAwMDAwMn0sCisJezB4MDQwMDY3ZTEsIDB4MDAwMDAwMDZ9LAorCXsweDAwMDA3N2UwLCAweDAwMDAwMDAyfSwKKwl7MHgwMDAwNzdlMSwgMHgwMDAwMDAwMn0sCisJezB4MDAwMDc3ZTEsIDB4MDAwMDAwMDZ9LAorCXsweGZmZmZmZmZmLCAwMDAwMDAwMDAwfSwKKwl7MHgxMDAwMDAwMCwgMDAwMDAwMDAwMH0sCisJezB4MDAwMzgwMmEsIDB4MDAwMDAwMDJ9LAorCXsweDA0MDA2N2UwLCAweDAwMDAwMDA2fSwKKwl7MHgwMDAwNzY3NSwgMHgwMDAwMDAwMn0sCisJezB4MDAwMDc2NzYsIDB4MDAwMDAwMDJ9LAorCXsweDAwMDA3Njc3LCAweDAwMDAwMDAyfSwKKwl7MHgwMDAwNzY3OCwgMHgwMDAwMDAwNn0sCisJezB4MDAwMzgwMmIsIDB4MDAwMDAwMDJ9LAorCXsweDA0MDAyNjc2LCAweDAwMDAwMDAyfSwKKwl7MHgwMDAwNzY3NywgMHgwMDAwMDAwMn0sCisJezB4MDAwMDc2NzgsIDB4MDAwMDAwMDZ9LAorCXsweDAwMDAwMDJlLCAweDAwMDAwMDE4fSwKKwl7MHgwMDAwMDAyZSwgMHgwMDAwMDAxOH0sCisJezAwMDAwMDAwMDAsIDB4MDAwMDAwMDZ9LAorCXsweDAwMDAwMDJmLCAweDAwMDAwMDE4fSwKKwl7MHgwMDAwMDAyZiwgMHgwMDAwMDAxOH0sCisJezAwMDAwMDAwMDAsIDB4MDAwMDAwMDZ9LAorCXsweDAxNjA1MDAwLCAweDAwMDAwMDAyfSwKKwl7MHgwMDA2NTAwMCwgMHgwMDAwMDAwMn0sCisJezB4MDAwOTgwMDAsIDB4MDAwMDAwMDJ9LAorCXsweDAwMDYxMDAwLCAweDAwMDAwMDAyfSwKKwl7MHg2NGMwNjAzZCwgMHgwMDAwMDAwNH0sCisJezB4MDAwODAwMDAsIDB4MDAwMDAwMTZ9LAorCXswMDAwMDAwMDAwLCAwMDAwMDAwMDAwfSwKKwl7MHgwNDAwMjUxZCwgMHgwMDAwMDAwMn0sCisJezB4MDAwMDc1ODAsIDB4MDAwMDAwMDJ9LAorCXsweDAwMDY3NTgxLCAweDAwMDAwMDAyfSwKKwl7MHgwNDAwMjU4MCwgMHgwMDAwMDAwMn0sCisJezB4MDAwNjc1ODEsIDB4MDAwMDAwMDJ9LAorCXsweDAwMDAwMDQ2LCAweDAwMDAwMDA0fSwKKwl7MHgwMDAwNTAwMCwgMDAwMDAwMDAwMH0sCisJezB4MDAwNjEwMDAsIDB4MDAwMDAwMDJ9LAorCXsweDAwMDA3NTBlLCAweDAwMDAwMDAyfSwKKwl7MHgwMDAxOTAwMCwgMHgwMDAwMDAwMn0sCisJezB4MDAwMTEwNTUsIDB4MDAwMDAwMTR9LAorCXsweDAwMDAwMDU1LCAweDAwMDAwMDEyfSwKKwl7MHgwNDAwMjUwZiwgMHgwMDAwMDAwMn0sCisJezB4MDAwMDUwNGEsIDB4MDAwMDAwMDR9LAorCXsweDAwMDA3NTY1LCAweDAwMDAwMDAyfSwKKwl7MHgwMDAwNzU2NiwgMHgwMDAwMDAwMn0sCisJezB4MDAwMDAwNTEsIDB4MDAwMDAwMDR9LAorCXsweDAxZTY1NWI0LCAweDAwMDAwMDAyfSwKKwl7MHg0NDAxYjBkYywgMHgwMDAwMDAwMn0sCisJezB4MDFjMTEwZGMsIDB4MDAwMDAwMDJ9LAorCXsweDI2NjY3MDVkLCAweDAwMDAwMDE4fSwKKwl7MHgwNDBjMjU2NSwgMHgwMDAwMDAwMn0sCisJezB4MDAwMDAwNWQsIDB4MDAwMDAwMTh9LAorCXsweDA0MDAyNTY0LCAweDAwMDAwMDAyfSwKKwl7MHgwMDAwNzU2NiwgMHgwMDAwMDAwMn0sCisJezB4MDAwMDAwNTQsIDB4MDAwMDAwMDR9LAorCXsweDAwNDAxMDYwLCAweDAwMDAwMDA4fSwKKwl7MHgwMDEwMTAwMCwgMHgwMDAwMDAwMn0sCisJezB4MDAwZDgwZmYsIDB4MDAwMDAwMDJ9LAorCXsweDAwODAwMDYzLCAweDAwMDAwMDA4fSwKKwl7MHgwMDBmOTAwMCwgMHgwMDAwMDAwMn0sCisJezB4MDAwZTAwZmYsIDB4MDAwMDAwMDJ9LAorCXswMDAwMDAwMDAwLCAweDAwMDAwMDA2fSwKKwl7MHgwMDAwMDA4MCwgMHgwMDAwMDAxOH0sCisJezB4MDAwMDAwNTQsIDB4MDAwMDAwMDR9LAorCXsweDAwMDA3NTc2LCAweDAwMDAwMDAyfSwKKwl7MHgwMDA2NTAwMCwgMHgwMDAwMDAwMn0sCisJezB4MDAwMDkwMDAsIDB4MDAwMDAwMDJ9LAorCXsweDAwMDQxMDAwLCAweDAwMDAwMDAyfSwKKwl7MHgwYzAwMzUwZSwgMHgwMDAwMDAwMn0sCisJezB4MDAwNDkwMDAsIDB4MDAwMDAwMDJ9LAorCXsweDAwMDUxMDAwLCAweDAwMDAwMDAyfSwKKwl7MHgwMWU3ODVmOCwgMHgwMDAwMDAwMn0sCisJezB4MDAyMDAwMDAsIDB4MDAwMDAwMDJ9LAorCXsweDAwNjAwMDczLCAweDAwMDAwMDBjfSwKKwl7MHgwMDAwNzU2MywgMHgwMDAwMDAwMn0sCisJezB4MDA2MDc1ZjAsIDB4MDAwMDAwMjF9LAorCXsweDIwMDA3MDY4LCAweDAwMDAwMDA0fSwKKwl7MHgwMDAwNTA2OCwgMHgwMDAwMDAwNH0sCisJezB4MDAwMDc1NzYsIDB4MDAwMDAwMDJ9LAorCXsweDAwMDA3NTc3LCAweDAwMDAwMDAyfSwKKwl7MHgwMDAwNzUwZSwgMHgwMDAwMDAwMn0sCisJezB4MDAwMDc1MGYsIDB4MDAwMDAwMDJ9LAorCXsweDAwYTA1MDAwLCAweDAwMDAwMDAyfSwKKwl7MHgwMDYwMDA3NiwgMHgwMDAwMDAwY30sCisJezB4MDA2MDc1ZjAsIDB4MDAwMDAwMjF9LAorCXsweDAwMDA3NWY4LCAweDAwMDAwMDAyfSwKKwl7MHgwMDAwMDA3NiwgMHgwMDAwMDAwNH0sCisJezB4MDAwYTc1MGUsIDB4MDAwMDAwMDJ9LAorCXsweDAwMjA3NTBmLCAweDAwMDAwMDAyfSwKKwl7MHgwMDYwMDA3OSwgMHgwMDAwMDAwNH0sCisJezB4MDAwMDc1NzAsIDB4MDAwMDAwMDJ9LAorCXsweDAwMDA3NTcxLCAweDAwMDAwMDAyfSwKKwl7MHgwMDAwNzU3MiwgMHgwMDAwMDAwNn0sCisJezB4MDAwMDUwMDAsIDB4MDAwMDAwMDJ9LAorCXsweDAwYTA1MDAwLCAweDAwMDAwMDAyfSwKKwl7MHgwMDAwNzU2OCwgMHgwMDAwMDAwMn0sCisJezB4MDAwNjEwMDAsIDB4MDAwMDAwMDJ9LAorCXsweDAwMDAwMDg0LCAweDAwMDAwMDBjfSwKKwl7MHgwMDA1ODAwMCwgMHgwMDAwMDAwMn0sCisJezB4MGM2MDc1NjIsIDB4MDAwMDAwMDJ9LAorCXsweDAwMDAwMDg2LCAweDAwMDAwMDA0fSwKKwl7MHgwMDYwMDA4NSwgMHgwMDAwMDAwNH0sCisJezB4NDAwMDcwZGQsIDAwMDAwMDAwMDB9LAorCXsweDAwMDM4MGRkLCAweDAwMDAwMDAyfSwKKwl7MHgwMDAwMDA5MywgMHgwMDAwMDAxY30sCisJezB4MDAwNjUwOTUsIDB4MDAwMDAwMTh9LAorCXsweDA0MDAyNWJiLCAweDAwMDAwMDAyfSwKKwl7MHgwMDA2MTA5NiwgMHgwMDAwMDAxOH0sCisJezB4MDQwMDc1YmMsIDAwMDAwMDAwMDB9LAorCXsweDAwMDA3NWJiLCAweDAwMDAwMDAyfSwKKwl7MHgwMDAwNzViYywgMDAwMDAwMDAwMH0sCisJezB4MDAwOTAwMDAsIDB4MDAwMDAwMDZ9LAorCXsweDAwMDkwMDAwLCAweDAwMDAwMDAyfSwKKwl7MHgwMDBkODAwMiwgMHgwMDAwMDAwNn0sCisJezB4MDAwMDUwMDAsIDB4MDAwMDAwMDJ9LAorCXsweDAwMDA3ODIxLCAweDAwMDAwMDAyfSwKKwl7MHgwMDAwNzgwMCwgMDAwMDAwMDAwMH0sCisJezB4MDAwMDc4MjEsIDB4MDAwMDAwMDJ9LAorCXsweDAwMDA3ODAwLCAwMDAwMDAwMDAwfSwKKwl7MHgwMTY2NTAwMCwgMHgwMDAwMDAwMn0sCisJezB4MDAwYTAwMDAsIDB4MDAwMDAwMDJ9LAorCXsweDAwMDY3MWNjLCAweDAwMDAwMDAyfSwKKwl7MHgwMjg2ZjFjZCwgMHgwMDAwMDAwMn0sCisJezB4MDAwMDAwYTMsIDB4MDAwMDAwMTB9LAorCXsweDIxMDA3MDAwLCAwMDAwMDAwMDAwfSwKKwl7MHgwMDAwMDBhYSwgMHgwMDAwMDAxY30sCisJezB4MDAwNjUwMDAsIDB4MDAwMDAwMDJ9LAorCXsweDAwMGEwMDAwLCAweDAwMDAwMDAyfSwKKwl7MHgwMDA2MTAwMCwgMHgwMDAwMDAwMn0sCisJezB4MDAwYjAwMDAsIDB4MDAwMDAwMDJ9LAorCXsweDM4MDY3MDAwLCAweDAwMDAwMDAyfSwKKwl7MHgwMDBhMDBhNiwgMHgwMDAwMDAwNH0sCisJezB4MjAwMDcwMDAsIDAwMDAwMDAwMDB9LAorCXsweDAxMjAwMDAwLCAweDAwMDAwMDAyfSwKKwl7MHgyMDA3NzAwMCwgMHgwMDAwMDAwMn0sCisJezB4MDEyMDAwMDAsIDB4MDAwMDAwMDJ9LAorCXsweDIwMDA3MDAwLCAwMDAwMDAwMDAwfSwKKwl7MHgwMDA2MTAwMCwgMHgwMDAwMDAwMn0sCisJezB4MDEyMDc1MWIsIDB4MDAwMDAwMDJ9LAorCXsweDgwNDA3NTBhLCAweDAwMDAwMDAyfSwKKwl7MHg4MDQwNzUwYiwgMHgwMDAwMDAwMn0sCisJezB4MDAxMTAwMDAsIDB4MDAwMDAwMDJ9LAorCXsweDAwMDM4MGRkLCAweDAwMDAwMDAyfSwKKwl7MHgwMDAwMDBiZCwgMHgwMDAwMDAxY30sCisJezB4MDAwNjEwOTYsIDB4MDAwMDAwMTh9LAorCXsweDg0NDA3NWJkLCAweDAwMDAwMDAyfSwKKwl7MHgwMDA2MTA5NSwgMHgwMDAwMDAxOH0sCisJezB4ODQwMDc1YmIsIDB4MDAwMDAwMDJ9LAorCXsweDAwMDYxMDk2LCAweDAwMDAwMDE4fSwKKwl7MHg4NDQwNzViYywgMHgwMDAwMDAwMn0sCisJezB4MDAwMDAwYzAsIDB4MDAwMDAwMDR9LAorCXsweDgwNDA3NWJkLCAweDAwMDAwMDAyfSwKKwl7MHg4MDAwNzViYiwgMHgwMDAwMDAwMn0sCisJezB4ODA0MDc1YmMsIDB4MDAwMDAwMDJ9LAorCXsweDAwMTA4MDAwLCAweDAwMDAwMDAyfSwKKwl7MHgwMTQwMDAwMCwgMHgwMDAwMDAwMn0sCisJezB4MDA2MDAwYzQsIDB4MDAwMDAwMGN9LAorCXsweDIwYzA3MDAwLCAweDAwMDAwMDIwfSwKKwl7MHgwMDAwMDBjNiwgMHgwMDAwMDAxMn0sCisJezB4MDA4MDAwMDAsIDB4MDAwMDAwMDZ9LAorCXsweDAwODA3NTFkLCAweDAwMDAwMDA2fSwKKwl7MHgwMDAwMjViYiwgMHgwMDAwMDAwMn0sCisJezB4MDAwMDQwYzAsIDB4MDAwMDAwMDR9LAorCXsweDAwMDA3NzVjLCAweDAwMDAwMDAyfSwKKwl7MHgwMGEwNTAwMCwgMHgwMDAwMDAwMn0sCisJezB4MDA2NjEwMDAsIDB4MDAwMDAwMDJ9LAorCXsweDA0NjAyNzVkLCAweDAwMDAwMDIwfSwKKwl7MHgwMDAwNDAwMCwgMDAwMDAwMDAwMH0sCisJezB4MDAwMDc5OTksIDB4MDAwMDAwMDJ9LAorCXsweDAwYTA1MDAwLCAweDAwMDAwMDAyfSwKKwl7MHgwMDY2MTAwMCwgMHgwMDAwMDAwMn0sCisJezB4MDQ2MDI5OWIsIDB4MDAwMDAwMjB9LAorCXsweDAwMDA0MDAwLCAwMDAwMDAwMDAwfSwKKwl7MHgwMWUwMDgzMCwgMHgwMDAwMDAwMn0sCisJezB4MjEwMDcwMDAsIDAwMDAwMDAwMDB9LAorCXsweDAwMDA1MDAwLCAweDAwMDAwMDAyfSwKKwl7MHgwMDAzODA0MiwgMHgwMDAwMDAwMn0sCisJezB4MDQwMDI1ZTAsIDB4MDAwMDAwMDJ9LAorCXsweDAwMDA3NWUxLCAwMDAwMDAwMDAwfSwKKwl7MHgwMDAwMDAwMSwgMDAwMDAwMDAwMH0sCisJezB4MDAwMzgwZDksIDB4MDAwMDAwMDJ9LAorCXsweDA0MDA3Mzk0LCAwMDAwMDAwMDAwfSwKKwl7MDAwMDAwMDAwMCwgMDAwMDAwMDAwMH0sCisJezAwMDAwMDAwMDAsIDAwMDAwMDAwMDB9LAorCXswMDAwMDAwMDAwLCAwMDAwMDAwMDAwfSwKKwl7MDAwMDAwMDAwMCwgMDAwMDAwMDAwMH0sCisJezAwMDAwMDAwMDAsIDAwMDAwMDAwMDB9LAorCXswMDAwMDAwMDAwLCAwMDAwMDAwMDAwfSwKKwl7MDAwMDAwMDAwMCwgMDAwMDAwMDAwMH0sCisJezAwMDAwMDAwMDAsIDAwMDAwMDAwMDB9LAorCXswMDAwMDAwMDAwLCAwMDAwMDAwMDAwfSwKKwl7MDAwMDAwMDAwMCwgMDAwMDAwMDAwMH0sCisJezAwMDAwMDAwMDAsIDAwMDAwMDAwMDB9LAorCXswMDAwMDAwMDAwLCAwMDAwMDAwMDAwfSwKKwl7MDAwMDAwMDAwMCwgMDAwMDAwMDAwMH0sCisJezAwMDAwMDAwMDAsIDAwMDAwMDAwMDB9LAorCXswMDAwMDAwMDAwLCAwMDAwMDAwMDAwfSwKKwl7MDAwMDAwMDAwMCwgMDAwMDAwMDAwMH0sCisJezAwMDAwMDAwMDAsIDAwMDAwMDAwMDB9LAorCXswMDAwMDAwMDAwLCAwMDAwMDAwMDAwfSwKKwl7MDAwMDAwMDAwMCwgMDAwMDAwMDAwMH0sCisJezAwMDAwMDAwMDAsIDAwMDAwMDAwMDB9LAorCXswMDAwMDAwMDAwLCAwMDAwMDAwMDAwfSwKKwl7MDAwMDAwMDAwMCwgMDAwMDAwMDAwMH0sCisJezAwMDAwMDAwMDAsIDAwMDAwMDAwMDB9LAorCXswMDAwMDAwMDAwLCAwMDAwMDAwMDAwfSwKKwl7MDAwMDAwMDAwMCwgMDAwMDAwMDAwMH0sCisJezAwMDAwMDAwMDAsIDAwMDAwMDAwMDB9LAorCXswMDAwMDAwMDAwLCAwMDAwMDAwMDAwfSwKKwl7MDAwMDAwMDAwMCwgMDAwMDAwMDAwMH0sCisJezAwMDAwMDAwMDAsIDAwMDAwMDAwMDB9LAorCXswMDAwMDAwMDAwLCAwMDAwMDAwMDAwfSwKKwl7MDAwMDAwMDAwMCwgMDAwMDAwMDAwMH0sCisJezAwMDAwMDAwMDAsIDAwMDAwMDAwMDB9LAorCXswMDAwMDAwMDAwLCAwMDAwMDAwMDAwfSwKKwl7MDAwMDAwMDAwMCwgMDAwMDAwMDAwMH0sCisJezAwMDAwMDAwMDAsIDAwMDAwMDAwMDB9LAorCXswMDAwMDAwMDAwLCAwMDAwMDAwMDAwfSwKIH07CiAKLQogc3RhdGljIHUzMiByYWRlb25fY3BfbWljcm9jb2RlW11bMl0gPSB7Ci0JeyAweDIxMDA3MDAwLCAwMDAwMDAwMDAwIH0sCi0JeyAweDIwMDA3MDAwLCAwMDAwMDAwMDAwIH0sCi0JeyAweDAwMDAwMGI0LCAweDAwMDAwMDA0IH0sCi0JeyAweDAwMDAwMGI4LCAweDAwMDAwMDA0IH0sCi0JeyAweDZmNWI0ZDRjLCAwMDAwMDAwMDAwIH0sCi0JeyAweDRjNGM0MjdmLCAwMDAwMDAwMDAwIH0sCi0JeyAweDViNTY4YTkyLCAwMDAwMDAwMDAwIH0sCi0JeyAweDRjYTA5YzZkLCAwMDAwMDAwMDAwIH0sCi0JeyAweGFkNGM0YzRjLCAwMDAwMDAwMDAwIH0sCi0JeyAweDRjZTFhZjNkLCAwMDAwMDAwMDAwIH0sCi0JeyAweGQ4YWZhZmFmLCAwMDAwMDAwMDAwIH0sCi0JeyAweGQ2NGM0Y2RjLCAwMDAwMDAwMDAwIH0sCi0JeyAweDRjZDEwZDEwLCAwMDAwMDAwMDAwIH0sCi0JeyAweDAwMGYwMDAwLCAweDAwMDAwMDE2IH0sCi0JeyAweDM2MmYyNDJkLCAwMDAwMDAwMDAwIH0sCi0JeyAweDAwMDAwMDEyLCAweDAwMDAwMDA0IH0sCi0JeyAweDAwMGYwMDAwLCAweDAwMDAwMDE2IH0sCi0JeyAweDM2MmYyODJkLCAwMDAwMDAwMDAwIH0sCi0JeyAweDAwMDM4MGU3LCAweDAwMDAwMDAyIH0sCi0JeyAweDA0MDAyYzk3LCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMGYwMDAxLCAweDAwMDAwMDE2IH0sCi0JeyAweDMzM2EzNzMwLCAwMDAwMDAwMDAwIH0sCi0JeyAweDAwMDA3N2VmLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDYxMDAwLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDAwMDIxLCAweDAwMDAwMDFhIH0sCi0JeyAweDAwMDA0MDAwLCAweDAwMDAwMDFlIH0sCi0JeyAweDAwMDYxMDAwLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDAwMDIxLCAweDAwMDAwMDFhIH0sCi0JeyAweDAwMDA0MDAwLCAweDAwMDAwMDFlIH0sCi0JeyAweDAwMDYxMDAwLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDAwMDIxLCAweDAwMDAwMDFhIH0sCi0JeyAweDAwMDA0MDAwLCAweDAwMDAwMDFlIH0sCi0JeyAweDAwMDAwMDE3LCAweDAwMDAwMDA0IH0sCi0JeyAweDAwMDM4MDJiLCAweDAwMDAwMDAyIH0sCi0JeyAweDA0MDA2N2UwLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDAwMDE3LCAweDAwMDAwMDA0IH0sCi0JeyAweDAwMDA3N2UwLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDY1MDAwLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDAzN2UxLCAweDAwMDAwMDAyIH0sCi0JeyAweDA0MDA2N2UxLCAweDAwMDAwMDA2IH0sCi0JeyAweDAwMDA3N2UwLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDA3N2UxLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDA3N2UxLCAweDAwMDAwMDA2IH0sCi0JeyAweGZmZmZmZmZmLCAwMDAwMDAwMDAwIH0sCi0JeyAweDEwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0JeyAweDAwMDM4MDJiLCAweDAwMDAwMDAyIH0sCi0JeyAweDA0MDA2N2UwLCAweDAwMDAwMDA2IH0sCi0JeyAweDAwMDA3Njc1LCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDA3Njc2LCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDA3Njc3LCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDA3Njc4LCAweDAwMDAwMDA2IH0sCi0JeyAweDAwMDM4MDJjLCAweDAwMDAwMDAyIH0sCi0JeyAweDA0MDAyNjc2LCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDA3Njc3LCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDA3Njc4LCAweDAwMDAwMDA2IH0sCi0JeyAweDAwMDAwMDJmLCAweDAwMDAwMDE4IH0sCi0JeyAweDAwMDAwMDJmLCAweDAwMDAwMDE4IH0sCi0JeyAwMDAwMDAwMDAwLCAweDAwMDAwMDA2IH0sCi0JeyAweDAwMDAwMDMwLCAweDAwMDAwMDE4IH0sCi0JeyAweDAwMDAwMDMwLCAweDAwMDAwMDE4IH0sCi0JeyAwMDAwMDAwMDAwLCAweDAwMDAwMDA2IH0sCi0JeyAweDAxNjA1MDAwLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDY1MDAwLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDk4MDAwLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDYxMDAwLCAweDAwMDAwMDAyIH0sCi0JeyAweDY0YzA2MDNlLCAweDAwMDAwMDA0IH0sCi0JeyAweDAwMDM4MGU2LCAweDAwMDAwMDAyIH0sCi0JeyAweDA0MDAyNWM1LCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDgwMDAwLCAweDAwMDAwMDE2IH0sCi0JeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0JeyAweDA0MDAyNTFkLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDA3NTgwLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDY3NTgxLCAweDAwMDAwMDAyIH0sCi0JeyAweDA0MDAyNTgwLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDY3NTgxLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDAwMDQ5LCAweDAwMDAwMDA0IH0sCi0JeyAweDAwMDA1MDAwLCAwMDAwMDAwMDAwIH0sCi0JeyAweDAwMDM4MGU2LCAweDAwMDAwMDAyIH0sCi0JeyAweDA0MDAyNWM1LCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDYxMDAwLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDA3NTBlLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDE5MDAwLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDExMDU1LCAweDAwMDAwMDE0IH0sCi0JeyAweDAwMDAwMDU1LCAweDAwMDAwMDEyIH0sCi0JeyAweDA0MDAyNTBmLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDA1MDRmLCAweDAwMDAwMDA0IH0sCi0JeyAweDAwMDM4MGU2LCAweDAwMDAwMDAyIH0sCi0JeyAweDA0MDAyNWM1LCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDA3NTY1LCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDA3NTY2LCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDAwMDU4LCAweDAwMDAwMDA0IH0sCi0JeyAweDAwMDM4MGU2LCAweDAwMDAwMDAyIH0sCi0JeyAweDA0MDAyNWM1LCAweDAwMDAwMDAyIH0sCi0JeyAweDAxZTY1NWI0LCAweDAwMDAwMDAyIH0sCi0JeyAweDQ0MDFiMGU0LCAweDAwMDAwMDAyIH0sCi0JeyAweDAxYzExMGU0LCAweDAwMDAwMDAyIH0sCi0JeyAweDI2NjY3MDY2LCAweDAwMDAwMDE4IH0sCi0JeyAweDA0MGMyNTY1LCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDAwMDY2LCAweDAwMDAwMDE4IH0sCi0JeyAweDA0MDAyNTY0LCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDA3NTY2LCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDAwMDVkLCAweDAwMDAwMDA0IH0sCi0JeyAweDAwNDAxMDY5LCAweDAwMDAwMDA4IH0sCi0JeyAweDAwMTAxMDAwLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMGQ4MGZmLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwODAwMDZjLCAweDAwMDAwMDA4IH0sCi0JeyAweDAwMGY5MDAwLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMGUwMGZmLCAweDAwMDAwMDAyIH0sCi0JeyAwMDAwMDAwMDAwLCAweDAwMDAwMDA2IH0sCi0JeyAweDAwMDAwMDhmLCAweDAwMDAwMDE4IH0sCi0JeyAweDAwMDAwMDViLCAweDAwMDAwMDA0IH0sCi0JeyAweDAwMDM4MGU2LCAweDAwMDAwMDAyIH0sCi0JeyAweDA0MDAyNWM1LCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDA3NTc2LCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDY1MDAwLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDA5MDAwLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDQxMDAwLCAweDAwMDAwMDAyIH0sCi0JeyAweDBjMDAzNTBlLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDQ5MDAwLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDUxMDAwLCAweDAwMDAwMDAyIH0sCi0JeyAweDAxZTc4NWY4LCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMjAwMDAwLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwNjAwMDdlLCAweDAwMDAwMDBjIH0sCi0JeyAweDAwMDA3NTYzLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwNjA3NWYwLCAweDAwMDAwMDIxIH0sCi0JeyAweDIwMDA3MDczLCAweDAwMDAwMDA0IH0sCi0JeyAweDAwMDA1MDczLCAweDAwMDAwMDA0IH0sCi0JeyAweDAwMDM4MGU2LCAweDAwMDAwMDAyIH0sCi0JeyAweDA0MDAyNWM1LCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDA3NTc2LCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDA3NTc3LCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDA3NTBlLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDA3NTBmLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwYTA1MDAwLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwNjAwMDgzLCAweDAwMDAwMDBjIH0sCi0JeyAweDAwNjA3NWYwLCAweDAwMDAwMDIxIH0sCi0JeyAweDAwMDA3NWY4LCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDAwMDgzLCAweDAwMDAwMDA0IH0sCi0JeyAweDAwMGE3NTBlLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDM4MGU2LCAweDAwMDAwMDAyIH0sCi0JeyAweDA0MDAyNWM1LCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMjA3NTBmLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwNjAwMDg2LCAweDAwMDAwMDA0IH0sCi0JeyAweDAwMDA3NTcwLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDA3NTcxLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDA3NTcyLCAweDAwMDAwMDA2IH0sCi0JeyAweDAwMDM4MGU2LCAweDAwMDAwMDAyIH0sCi0JeyAweDA0MDAyNWM1LCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDA1MDAwLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwYTA1MDAwLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDA3NTY4LCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDYxMDAwLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDAwMDk1LCAweDAwMDAwMDBjIH0sCi0JeyAweDAwMDU4MDAwLCAweDAwMDAwMDAyIH0sCi0JeyAweDBjNjA3NTYyLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDAwMDk3LCAweDAwMDAwMDA0IH0sCi0JeyAweDAwMDM4MGU2LCAweDAwMDAwMDAyIH0sCi0JeyAweDA0MDAyNWM1LCAweDAwMDAwMDAyIH0sCi0JeyAweDAwNjAwMDk2LCAweDAwMDAwMDA0IH0sCi0JeyAweDQwMDA3MGU1LCAwMDAwMDAwMDAwIH0sCi0JeyAweDAwMDM4MGU2LCAweDAwMDAwMDAyIH0sCi0JeyAweDA0MDAyNWM1LCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDM4MGU1LCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDAwMGE4LCAweDAwMDAwMDFjIH0sCi0JeyAweDAwMDY1MGFhLCAweDAwMDAwMDE4IH0sCi0JeyAweDA0MDAyNWJiLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDYxMGFiLCAweDAwMDAwMDE4IH0sCi0JeyAweDA0MDA3NWJjLCAwMDAwMDAwMDAwIH0sCi0JeyAweDAwMDA3NWJiLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDA3NWJjLCAwMDAwMDAwMDAwIH0sCi0JeyAweDAwMDkwMDAwLCAweDAwMDAwMDA2IH0sCi0JeyAweDAwMDkwMDAwLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMGQ4MDAyLCAweDAwMDAwMDA2IH0sCi0JeyAweDAwMDA3ODMyLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDA1MDAwLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDM4MGU3LCAweDAwMDAwMDAyIH0sCi0JeyAweDA0MDAyYzk3LCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDA3ODIwLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDA3ODIxLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDA3ODAwLCAwMDAwMDAwMDAwIH0sCi0JeyAweDAxMjAwMDAwLCAweDAwMDAwMDAyIH0sCi0JeyAweDIwMDc3MDAwLCAweDAwMDAwMDAyIH0sCi0JeyAweDAxMjAwMDAwLCAweDAwMDAwMDAyIH0sCi0JeyAweDIwMDA3MDAwLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDYxMDAwLCAweDAwMDAwMDAyIH0sCi0JeyAweDAxMjA3NTFiLCAweDAwMDAwMDAyIH0sCi0JeyAweDgwNDA3NTBhLCAweDAwMDAwMDAyIH0sCi0JeyAweDgwNDA3NTBiLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMTEwMDAwLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDM4MGU1LCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDAwMGM2LCAweDAwMDAwMDFjIH0sCi0JeyAweDAwMDYxMGFiLCAweDAwMDAwMDE4IH0sCi0JeyAweDg0NDA3NWJkLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDYxMGFhLCAweDAwMDAwMDE4IH0sCi0JeyAweDg0MDA3NWJiLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDYxMGFiLCAweDAwMDAwMDE4IH0sCi0JeyAweDg0NDA3NWJjLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDAwMGM5LCAweDAwMDAwMDA0IH0sCi0JeyAweDgwNDA3NWJkLCAweDAwMDAwMDAyIH0sCi0JeyAweDgwMDA3NWJiLCAweDAwMDAwMDAyIH0sCi0JeyAweDgwNDA3NWJjLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMTA4MDAwLCAweDAwMDAwMDAyIH0sCi0JeyAweDAxNDAwMDAwLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwNjAwMGNkLCAweDAwMDAwMDBjIH0sCi0JeyAweDIwYzA3MDAwLCAweDAwMDAwMDIwIH0sCi0JeyAweDAwMDAwMGNmLCAweDAwMDAwMDEyIH0sCi0JeyAweDAwODAwMDAwLCAweDAwMDAwMDA2IH0sCi0JeyAweDAwODA3NTFkLCAweDAwMDAwMDA2IH0sCi0JeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0JeyAweDAwMDA3NzVjLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwYTA1MDAwLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwNjYxMDAwLCAweDAwMDAwMDAyIH0sCi0JeyAweDA0NjAyNzVkLCAweDAwMDAwMDIwIH0sCi0JeyAweDAwMDA0MDAwLCAwMDAwMDAwMDAwIH0sCi0JeyAweDAxZTAwODMwLCAweDAwMDAwMDAyIH0sCi0JeyAweDIxMDA3MDAwLCAwMDAwMDAwMDAwIH0sCi0JeyAweDY0NjQ2MTRkLCAwMDAwMDAwMDAwIH0sCi0JeyAweDY5Njg3NDIwLCAwMDAwMDAwMDAwIH0sCi0JeyAweDAwMDAwMDczLCAwMDAwMDAwMDAwIH0sCi0JeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0JeyAweDAwMDA1MDAwLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDM4MGQwLCAweDAwMDAwMDAyIH0sCi0JeyAweDA0MDAyNWUwLCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDA3NWUxLCAwMDAwMDAwMDAwIH0sCi0JeyAweDAwMDAwMDAxLCAwMDAwMDAwMDAwIH0sCi0JeyAweDAwMDM4MGUwLCAweDAwMDAwMDAyIH0sCi0JeyAweDA0MDAyMzk0LCAweDAwMDAwMDAyIH0sCi0JeyAweDAwMDA1MDAwLCAwMDAwMDAwMDAwIH0sCi0JeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0JeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0JeyAweDAwMDAwMDA4LCAwMDAwMDAwMDAwIH0sCi0JeyAweDAwMDAwMDA0LCAwMDAwMDAwMDAwIH0sCi0JeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0JeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0JeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0JeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0JeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0JeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0JeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0JeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0JeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0JeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0JeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0JeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0JeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0JeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0JeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0JeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0JeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0JeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0JeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0JeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0JeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0JeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0JeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCi0JeyAwMDAwMDAwMDAwLCAwMDAwMDAwMDAwIH0sCisJezB4MjEwMDcwMDAsIDAwMDAwMDAwMDB9LAorCXsweDIwMDA3MDAwLCAwMDAwMDAwMDAwfSwKKwl7MHgwMDAwMDBiNCwgMHgwMDAwMDAwNH0sCisJezB4MDAwMDAwYjgsIDB4MDAwMDAwMDR9LAorCXsweDZmNWI0ZDRjLCAwMDAwMDAwMDAwfSwKKwl7MHg0YzRjNDI3ZiwgMDAwMDAwMDAwMH0sCisJezB4NWI1NjhhOTIsIDAwMDAwMDAwMDB9LAorCXsweDRjYTA5YzZkLCAwMDAwMDAwMDAwfSwKKwl7MHhhZDRjNGM0YywgMDAwMDAwMDAwMH0sCisJezB4NGNlMWFmM2QsIDAwMDAwMDAwMDB9LAorCXsweGQ4YWZhZmFmLCAwMDAwMDAwMDAwfSwKKwl7MHhkNjRjNGNkYywgMDAwMDAwMDAwMH0sCisJezB4NGNkMTBkMTAsIDAwMDAwMDAwMDB9LAorCXsweDAwMGYwMDAwLCAweDAwMDAwMDE2fSwKKwl7MHgzNjJmMjQyZCwgMDAwMDAwMDAwMH0sCisJezB4MDAwMDAwMTIsIDB4MDAwMDAwMDR9LAorCXsweDAwMGYwMDAwLCAweDAwMDAwMDE2fSwKKwl7MHgzNjJmMjgyZCwgMDAwMDAwMDAwMH0sCisJezB4MDAwMzgwZTcsIDB4MDAwMDAwMDJ9LAorCXsweDA0MDAyYzk3LCAweDAwMDAwMDAyfSwKKwl7MHgwMDBmMDAwMSwgMHgwMDAwMDAxNn0sCisJezB4MzMzYTM3MzAsIDAwMDAwMDAwMDB9LAorCXsweDAwMDA3N2VmLCAweDAwMDAwMDAyfSwKKwl7MHgwMDA2MTAwMCwgMHgwMDAwMDAwMn0sCisJezB4MDAwMDAwMjEsIDB4MDAwMDAwMWF9LAorCXsweDAwMDA0MDAwLCAweDAwMDAwMDFlfSwKKwl7MHgwMDA2MTAwMCwgMHgwMDAwMDAwMn0sCisJezB4MDAwMDAwMjEsIDB4MDAwMDAwMWF9LAorCXsweDAwMDA0MDAwLCAweDAwMDAwMDFlfSwKKwl7MHgwMDA2MTAwMCwgMHgwMDAwMDAwMn0sCisJezB4MDAwMDAwMjEsIDB4MDAwMDAwMWF9LAorCXsweDAwMDA0MDAwLCAweDAwMDAwMDFlfSwKKwl7MHgwMDAwMDAxNywgMHgwMDAwMDAwNH0sCisJezB4MDAwMzgwMmIsIDB4MDAwMDAwMDJ9LAorCXsweDA0MDA2N2UwLCAweDAwMDAwMDAyfSwKKwl7MHgwMDAwMDAxNywgMHgwMDAwMDAwNH0sCisJezB4MDAwMDc3ZTAsIDB4MDAwMDAwMDJ9LAorCXsweDAwMDY1MDAwLCAweDAwMDAwMDAyfSwKKwl7MHgwMDAwMzdlMSwgMHgwMDAwMDAwMn0sCisJezB4MDQwMDY3ZTEsIDB4MDAwMDAwMDZ9LAorCXsweDAwMDA3N2UwLCAweDAwMDAwMDAyfSwKKwl7MHgwMDAwNzdlMSwgMHgwMDAwMDAwMn0sCisJezB4MDAwMDc3ZTEsIDB4MDAwMDAwMDZ9LAorCXsweGZmZmZmZmZmLCAwMDAwMDAwMDAwfSwKKwl7MHgxMDAwMDAwMCwgMDAwMDAwMDAwMH0sCisJezB4MDAwMzgwMmIsIDB4MDAwMDAwMDJ9LAorCXsweDA0MDA2N2UwLCAweDAwMDAwMDA2fSwKKwl7MHgwMDAwNzY3NSwgMHgwMDAwMDAwMn0sCisJezB4MDAwMDc2NzYsIDB4MDAwMDAwMDJ9LAorCXsweDAwMDA3Njc3LCAweDAwMDAwMDAyfSwKKwl7MHgwMDAwNzY3OCwgMHgwMDAwMDAwNn0sCisJezB4MDAwMzgwMmMsIDB4MDAwMDAwMDJ9LAorCXsweDA0MDAyNjc2LCAweDAwMDAwMDAyfSwKKwl7MHgwMDAwNzY3NywgMHgwMDAwMDAwMn0sCisJezB4MDAwMDc2NzgsIDB4MDAwMDAwMDZ9LAorCXsweDAwMDAwMDJmLCAweDAwMDAwMDE4fSwKKwl7MHgwMDAwMDAyZiwgMHgwMDAwMDAxOH0sCisJezAwMDAwMDAwMDAsIDB4MDAwMDAwMDZ9LAorCXsweDAwMDAwMDMwLCAweDAwMDAwMDE4fSwKKwl7MHgwMDAwMDAzMCwgMHgwMDAwMDAxOH0sCisJezAwMDAwMDAwMDAsIDB4MDAwMDAwMDZ9LAorCXsweDAxNjA1MDAwLCAweDAwMDAwMDAyfSwKKwl7MHgwMDA2NTAwMCwgMHgwMDAwMDAwMn0sCisJezB4MDAwOTgwMDAsIDB4MDAwMDAwMDJ9LAorCXsweDAwMDYxMDAwLCAweDAwMDAwMDAyfSwKKwl7MHg2NGMwNjAzZSwgMHgwMDAwMDAwNH0sCisJezB4MDAwMzgwZTYsIDB4MDAwMDAwMDJ9LAorCXsweDA0MDAyNWM1LCAweDAwMDAwMDAyfSwKKwl7MHgwMDA4MDAwMCwgMHgwMDAwMDAxNn0sCisJezAwMDAwMDAwMDAsIDAwMDAwMDAwMDB9LAorCXsweDA0MDAyNTFkLCAweDAwMDAwMDAyfSwKKwl7MHgwMDAwNzU4MCwgMHgwMDAwMDAwMn0sCisJezB4MDAwNjc1ODEsIDB4MDAwMDAwMDJ9LAorCXsweDA0MDAyNTgwLCAweDAwMDAwMDAyfSwKKwl7MHgwMDA2NzU4MSwgMHgwMDAwMDAwMn0sCisJezB4MDAwMDAwNDksIDB4MDAwMDAwMDR9LAorCXsweDAwMDA1MDAwLCAwMDAwMDAwMDAwfSwKKwl7MHgwMDAzODBlNiwgMHgwMDAwMDAwMn0sCisJezB4MDQwMDI1YzUsIDB4MDAwMDAwMDJ9LAorCXsweDAwMDYxMDAwLCAweDAwMDAwMDAyfSwKKwl7MHgwMDAwNzUwZSwgMHgwMDAwMDAwMn0sCisJezB4MDAwMTkwMDAsIDB4MDAwMDAwMDJ9LAorCXsweDAwMDExMDU1LCAweDAwMDAwMDE0fSwKKwl7MHgwMDAwMDA1NSwgMHgwMDAwMDAxMn0sCisJezB4MDQwMDI1MGYsIDB4MDAwMDAwMDJ9LAorCXsweDAwMDA1MDRmLCAweDAwMDAwMDA0fSwKKwl7MHgwMDAzODBlNiwgMHgwMDAwMDAwMn0sCisJezB4MDQwMDI1YzUsIDB4MDAwMDAwMDJ9LAorCXsweDAwMDA3NTY1LCAweDAwMDAwMDAyfSwKKwl7MHgwMDAwNzU2NiwgMHgwMDAwMDAwMn0sCisJezB4MDAwMDAwNTgsIDB4MDAwMDAwMDR9LAorCXsweDAwMDM4MGU2LCAweDAwMDAwMDAyfSwKKwl7MHgwNDAwMjVjNSwgMHgwMDAwMDAwMn0sCisJezB4MDFlNjU1YjQsIDB4MDAwMDAwMDJ9LAorCXsweDQ0MDFiMGU0LCAweDAwMDAwMDAyfSwKKwl7MHgwMWMxMTBlNCwgMHgwMDAwMDAwMn0sCisJezB4MjY2NjcwNjYsIDB4MDAwMDAwMTh9LAorCXsweDA0MGMyNTY1LCAweDAwMDAwMDAyfSwKKwl7MHgwMDAwMDA2NiwgMHgwMDAwMDAxOH0sCisJezB4MDQwMDI1NjQsIDB4MDAwMDAwMDJ9LAorCXsweDAwMDA3NTY2LCAweDAwMDAwMDAyfSwKKwl7MHgwMDAwMDA1ZCwgMHgwMDAwMDAwNH0sCisJezB4MDA0MDEwNjksIDB4MDAwMDAwMDh9LAorCXsweDAwMTAxMDAwLCAweDAwMDAwMDAyfSwKKwl7MHgwMDBkODBmZiwgMHgwMDAwMDAwMn0sCisJezB4MDA4MDAwNmMsIDB4MDAwMDAwMDh9LAorCXsweDAwMGY5MDAwLCAweDAwMDAwMDAyfSwKKwl7MHgwMDBlMDBmZiwgMHgwMDAwMDAwMn0sCisJezAwMDAwMDAwMDAsIDB4MDAwMDAwMDZ9LAorCXsweDAwMDAwMDhmLCAweDAwMDAwMDE4fSwKKwl7MHgwMDAwMDA1YiwgMHgwMDAwMDAwNH0sCisJezB4MDAwMzgwZTYsIDB4MDAwMDAwMDJ9LAorCXsweDA0MDAyNWM1LCAweDAwMDAwMDAyfSwKKwl7MHgwMDAwNzU3NiwgMHgwMDAwMDAwMn0sCisJezB4MDAwNjUwMDAsIDB4MDAwMDAwMDJ9LAorCXsweDAwMDA5MDAwLCAweDAwMDAwMDAyfSwKKwl7MHgwMDA0MTAwMCwgMHgwMDAwMDAwMn0sCisJezB4MGMwMDM1MGUsIDB4MDAwMDAwMDJ9LAorCXsweDAwMDQ5MDAwLCAweDAwMDAwMDAyfSwKKwl7MHgwMDA1MTAwMCwgMHgwMDAwMDAwMn0sCisJezB4MDFlNzg1ZjgsIDB4MDAwMDAwMDJ9LAorCXsweDAwMjAwMDAwLCAweDAwMDAwMDAyfSwKKwl7MHgwMDYwMDA3ZSwgMHgwMDAwMDAwY30sCisJezB4MDAwMDc1NjMsIDB4MDAwMDAwMDJ9LAorCXsweDAwNjA3NWYwLCAweDAwMDAwMDIxfSwKKwl7MHgyMDAwNzA3MywgMHgwMDAwMDAwNH0sCisJezB4MDAwMDUwNzMsIDB4MDAwMDAwMDR9LAorCXsweDAwMDM4MGU2LCAweDAwMDAwMDAyfSwKKwl7MHgwNDAwMjVjNSwgMHgwMDAwMDAwMn0sCisJezB4MDAwMDc1NzYsIDB4MDAwMDAwMDJ9LAorCXsweDAwMDA3NTc3LCAweDAwMDAwMDAyfSwKKwl7MHgwMDAwNzUwZSwgMHgwMDAwMDAwMn0sCisJezB4MDAwMDc1MGYsIDB4MDAwMDAwMDJ9LAorCXsweDAwYTA1MDAwLCAweDAwMDAwMDAyfSwKKwl7MHgwMDYwMDA4MywgMHgwMDAwMDAwY30sCisJezB4MDA2MDc1ZjAsIDB4MDAwMDAwMjF9LAorCXsweDAwMDA3NWY4LCAweDAwMDAwMDAyfSwKKwl7MHgwMDAwMDA4MywgMHgwMDAwMDAwNH0sCisJezB4MDAwYTc1MGUsIDB4MDAwMDAwMDJ9LAorCXsweDAwMDM4MGU2LCAweDAwMDAwMDAyfSwKKwl7MHgwNDAwMjVjNSwgMHgwMDAwMDAwMn0sCisJezB4MDAyMDc1MGYsIDB4MDAwMDAwMDJ9LAorCXsweDAwNjAwMDg2LCAweDAwMDAwMDA0fSwKKwl7MHgwMDAwNzU3MCwgMHgwMDAwMDAwMn0sCisJezB4MDAwMDc1NzEsIDB4MDAwMDAwMDJ9LAorCXsweDAwMDA3NTcyLCAweDAwMDAwMDA2fSwKKwl7MHgwMDAzODBlNiwgMHgwMDAwMDAwMn0sCisJezB4MDQwMDI1YzUsIDB4MDAwMDAwMDJ9LAorCXsweDAwMDA1MDAwLCAweDAwMDAwMDAyfSwKKwl7MHgwMGEwNTAwMCwgMHgwMDAwMDAwMn0sCisJezB4MDAwMDc1NjgsIDB4MDAwMDAwMDJ9LAorCXsweDAwMDYxMDAwLCAweDAwMDAwMDAyfSwKKwl7MHgwMDAwMDA5NSwgMHgwMDAwMDAwY30sCisJezB4MDAwNTgwMDAsIDB4MDAwMDAwMDJ9LAorCXsweDBjNjA3NTYyLCAweDAwMDAwMDAyfSwKKwl7MHgwMDAwMDA5NywgMHgwMDAwMDAwNH0sCisJezB4MDAwMzgwZTYsIDB4MDAwMDAwMDJ9LAorCXsweDA0MDAyNWM1LCAweDAwMDAwMDAyfSwKKwl7MHgwMDYwMDA5NiwgMHgwMDAwMDAwNH0sCisJezB4NDAwMDcwZTUsIDAwMDAwMDAwMDB9LAorCXsweDAwMDM4MGU2LCAweDAwMDAwMDAyfSwKKwl7MHgwNDAwMjVjNSwgMHgwMDAwMDAwMn0sCisJezB4MDAwMzgwZTUsIDB4MDAwMDAwMDJ9LAorCXsweDAwMDAwMGE4LCAweDAwMDAwMDFjfSwKKwl7MHgwMDA2NTBhYSwgMHgwMDAwMDAxOH0sCisJezB4MDQwMDI1YmIsIDB4MDAwMDAwMDJ9LAorCXsweDAwMDYxMGFiLCAweDAwMDAwMDE4fSwKKwl7MHgwNDAwNzViYywgMDAwMDAwMDAwMH0sCisJezB4MDAwMDc1YmIsIDB4MDAwMDAwMDJ9LAorCXsweDAwMDA3NWJjLCAwMDAwMDAwMDAwfSwKKwl7MHgwMDA5MDAwMCwgMHgwMDAwMDAwNn0sCisJezB4MDAwOTAwMDAsIDB4MDAwMDAwMDJ9LAorCXsweDAwMGQ4MDAyLCAweDAwMDAwMDA2fSwKKwl7MHgwMDAwNzgzMiwgMHgwMDAwMDAwMn0sCisJezB4MDAwMDUwMDAsIDB4MDAwMDAwMDJ9LAorCXsweDAwMDM4MGU3LCAweDAwMDAwMDAyfSwKKwl7MHgwNDAwMmM5NywgMHgwMDAwMDAwMn0sCisJezB4MDAwMDc4MjAsIDB4MDAwMDAwMDJ9LAorCXsweDAwMDA3ODIxLCAweDAwMDAwMDAyfSwKKwl7MHgwMDAwNzgwMCwgMDAwMDAwMDAwMH0sCisJezB4MDEyMDAwMDAsIDB4MDAwMDAwMDJ9LAorCXsweDIwMDc3MDAwLCAweDAwMDAwMDAyfSwKKwl7MHgwMTIwMDAwMCwgMHgwMDAwMDAwMn0sCisJezB4MjAwMDcwMDAsIDB4MDAwMDAwMDJ9LAorCXsweDAwMDYxMDAwLCAweDAwMDAwMDAyfSwKKwl7MHgwMTIwNzUxYiwgMHgwMDAwMDAwMn0sCisJezB4ODA0MDc1MGEsIDB4MDAwMDAwMDJ9LAorCXsweDgwNDA3NTBiLCAweDAwMDAwMDAyfSwKKwl7MHgwMDExMDAwMCwgMHgwMDAwMDAwMn0sCisJezB4MDAwMzgwZTUsIDB4MDAwMDAwMDJ9LAorCXsweDAwMDAwMGM2LCAweDAwMDAwMDFjfSwKKwl7MHgwMDA2MTBhYiwgMHgwMDAwMDAxOH0sCisJezB4ODQ0MDc1YmQsIDB4MDAwMDAwMDJ9LAorCXsweDAwMDYxMGFhLCAweDAwMDAwMDE4fSwKKwl7MHg4NDAwNzViYiwgMHgwMDAwMDAwMn0sCisJezB4MDAwNjEwYWIsIDB4MDAwMDAwMTh9LAorCXsweDg0NDA3NWJjLCAweDAwMDAwMDAyfSwKKwl7MHgwMDAwMDBjOSwgMHgwMDAwMDAwNH0sCisJezB4ODA0MDc1YmQsIDB4MDAwMDAwMDJ9LAorCXsweDgwMDA3NWJiLCAweDAwMDAwMDAyfSwKKwl7MHg4MDQwNzViYywgMHgwMDAwMDAwMn0sCisJezB4MDAxMDgwMDAsIDB4MDAwMDAwMDJ9LAorCXsweDAxNDAwMDAwLCAweDAwMDAwMDAyfSwKKwl7MHgwMDYwMDBjZCwgMHgwMDAwMDAwY30sCisJezB4MjBjMDcwMDAsIDB4MDAwMDAwMjB9LAorCXsweDAwMDAwMGNmLCAweDAwMDAwMDEyfSwKKwl7MHgwMDgwMDAwMCwgMHgwMDAwMDAwNn0sCisJezB4MDA4MDc1MWQsIDB4MDAwMDAwMDZ9LAorCXswMDAwMDAwMDAwLCAwMDAwMDAwMDAwfSwKKwl7MHgwMDAwNzc1YywgMHgwMDAwMDAwMn0sCisJezB4MDBhMDUwMDAsIDB4MDAwMDAwMDJ9LAorCXsweDAwNjYxMDAwLCAweDAwMDAwMDAyfSwKKwl7MHgwNDYwMjc1ZCwgMHgwMDAwMDAyMH0sCisJezB4MDAwMDQwMDAsIDAwMDAwMDAwMDB9LAorCXsweDAxZTAwODMwLCAweDAwMDAwMDAyfSwKKwl7MHgyMTAwNzAwMCwgMDAwMDAwMDAwMH0sCisJezB4NjQ2NDYxNGQsIDAwMDAwMDAwMDB9LAorCXsweDY5Njg3NDIwLCAwMDAwMDAwMDAwfSwKKwl7MHgwMDAwMDA3MywgMDAwMDAwMDAwMH0sCisJezAwMDAwMDAwMDAsIDAwMDAwMDAwMDB9LAorCXsweDAwMDA1MDAwLCAweDAwMDAwMDAyfSwKKwl7MHgwMDAzODBkMCwgMHgwMDAwMDAwMn0sCisJezB4MDQwMDI1ZTAsIDB4MDAwMDAwMDJ9LAorCXsweDAwMDA3NWUxLCAwMDAwMDAwMDAwfSwKKwl7MHgwMDAwMDAwMSwgMDAwMDAwMDAwMH0sCisJezB4MDAwMzgwZTAsIDB4MDAwMDAwMDJ9LAorCXsweDA0MDAyMzk0LCAweDAwMDAwMDAyfSwKKwl7MHgwMDAwNTAwMCwgMDAwMDAwMDAwMH0sCisJezAwMDAwMDAwMDAsIDAwMDAwMDAwMDB9LAorCXswMDAwMDAwMDAwLCAwMDAwMDAwMDAwfSwKKwl7MHgwMDAwMDAwOCwgMDAwMDAwMDAwMH0sCisJezB4MDAwMDAwMDQsIDAwMDAwMDAwMDB9LAorCXswMDAwMDAwMDAwLCAwMDAwMDAwMDAwfSwKKwl7MDAwMDAwMDAwMCwgMDAwMDAwMDAwMH0sCisJezAwMDAwMDAwMDAsIDAwMDAwMDAwMDB9LAorCXswMDAwMDAwMDAwLCAwMDAwMDAwMDAwfSwKKwl7MDAwMDAwMDAwMCwgMDAwMDAwMDAwMH0sCisJezAwMDAwMDAwMDAsIDAwMDAwMDAwMDB9LAorCXswMDAwMDAwMDAwLCAwMDAwMDAwMDAwfSwKKwl7MDAwMDAwMDAwMCwgMDAwMDAwMDAwMH0sCisJezAwMDAwMDAwMDAsIDAwMDAwMDAwMDB9LAorCXswMDAwMDAwMDAwLCAwMDAwMDAwMDAwfSwKKwl7MDAwMDAwMDAwMCwgMDAwMDAwMDAwMH0sCisJezAwMDAwMDAwMDAsIDAwMDAwMDAwMDB9LAorCXswMDAwMDAwMDAwLCAwMDAwMDAwMDAwfSwKKwl7MDAwMDAwMDAwMCwgMDAwMDAwMDAwMH0sCisJezAwMDAwMDAwMDAsIDAwMDAwMDAwMDB9LAorCXswMDAwMDAwMDAwLCAwMDAwMDAwMDAwfSwKKwl7MDAwMDAwMDAwMCwgMDAwMDAwMDAwMH0sCisJezAwMDAwMDAwMDAsIDAwMDAwMDAwMDB9LAorCXswMDAwMDAwMDAwLCAwMDAwMDAwMDAwfSwKKwl7MDAwMDAwMDAwMCwgMDAwMDAwMDAwMH0sCisJezAwMDAwMDAwMDAsIDAwMDAwMDAwMDB9LAorCXswMDAwMDAwMDAwLCAwMDAwMDAwMDAwfSwKKwl7MDAwMDAwMDAwMCwgMDAwMDAwMDAwMH0sCisJezAwMDAwMDAwMDAsIDAwMDAwMDAwMDB9LAogfTsKIAogc3RhdGljIHUzMiBSMzAwX2NwX21pY3JvY29kZVtdWzJdID0gewotCXsgMHg0MjAwZTAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMHg0MDAwZTAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMHgwMDAwMDBhZiwgMHgwMDAwMDAwOCB9LAotCXsgMHgwMDAwMDBiMywgMHgwMDAwMDAwOCB9LAotCXsgMHg2YzVhNTA0ZiwgMDAwMDAwMDAwMCB9LAotCXsgMHg0ZjRmNDk3YSwgMDAwMDAwMDAwMCB9LAotCXsgMHg1YTU3ODI4OCwgMDAwMDAwMDAwMCB9LAotCXsgMHg0ZjkxOTA2YSwgMDAwMDAwMDAwMCB9LAotCXsgMHg0ZjRmNGY0ZiwgMDAwMDAwMDAwMCB9LAotCXsgMHg0ZmUyNGY0NCwgMDAwMDAwMDAwMCB9LAotCXsgMHg0ZjljOWM5YywgMDAwMDAwMDAwMCB9LAotCXsgMHhkYzRmNGZkZSwgMDAwMDAwMDAwMCB9LAotCXsgMHhhMWNkNGY0ZiwgMDAwMDAwMDAwMCB9LAotCXsgMHhkMjlkOWQ5ZCwgMDAwMDAwMDAwMCB9LAotCXsgMHg0ZjBmOWZkNywgMDAwMDAwMDAwMCB9LAotCXsgMHgwMDBjYTAwMCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDBkMDAxMiwgMHgwMDAwMDAzOCB9LAotCXsgMHgwMDAwZThiNCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDBkMDAxNCwgMHgwMDAwMDAzOCB9LAotCXsgMHgwMDAwZThiNiwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDBkMDAxNiwgMHgwMDAwMDAzOCB9LAotCXsgMHgwMDAwZTg1NCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDBkMDAxOCwgMHgwMDAwMDAzOCB9LAotCXsgMHgwMDAwZTg1NSwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDBkMDAxYSwgMHgwMDAwMDAzOCB9LAotCXsgMHgwMDAwZTg1NiwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDBkMDAxYywgMHgwMDAwMDAzOCB9LAotCXsgMHgwMDAwZTg1NywgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDBkMDAxZSwgMHgwMDAwMDAzOCB9LAotCXsgMHgwMDAwZTgyNCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDBkMDAyMCwgMHgwMDAwMDAzOCB9LAotCXsgMHgwMDAwZTgyNSwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDBkMDAyMiwgMHgwMDAwMDAzOCB9LAotCXsgMHgwMDAwZTgzMCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDBkMDAyNCwgMHgwMDAwMDAzOCB9LAotCXsgMHgwMDAwZjBjMCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDBkMDAyNiwgMHgwMDAwMDAzOCB9LAotCXsgMHgwMDAwZjBjMSwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDBkMDAyOCwgMHgwMDAwMDAzOCB9LAotCXsgMHgwMDAwZjA0MSwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDBkMDAyYSwgMHgwMDAwMDAzOCB9LAotCXsgMHgwMDAwZjE4NCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDBkMDAyYywgMHgwMDAwMDAzOCB9LAotCXsgMHgwMDAwZjE4NSwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDBkMDAyZSwgMHgwMDAwMDAzOCB9LAotCXsgMHgwMDAwZjE4NiwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDBkMDAzMCwgMHgwMDAwMDAzOCB9LAotCXsgMHgwMDAwZjE4NywgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDBkMDAzMiwgMHgwMDAwMDAzOCB9LAotCXsgMHgwMDAwZjE4MCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDBkMDAzNCwgMHgwMDAwMDAzOCB9LAotCXsgMHgwMDAwZjM5MywgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDBkMDAzNiwgMHgwMDAwMDAzOCB9LAotCXsgMHgwMDAwZjM4YSwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDBkMDAzOCwgMHgwMDAwMDAzOCB9LAotCXsgMHgwMDAwZjM4ZSwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDAwZTgyMSwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMTQwYTAwMCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDAwMDA0MywgMHgwMDAwMDAxOCB9LAotCXsgMHgwMGNjZTgwMCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDFiMDAwMSwgMHgwMDAwMDAwNCB9LAotCXsgMHgwODAwNDgwMCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDFiMDAwMSwgMHgwMDAwMDAwNCB9LAotCXsgMHgwODAwNDgwMCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDFiMDAwMSwgMHgwMDAwMDAwNCB9LAotCXsgMHgwODAwNDgwMCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDAwMDAzYSwgMHgwMDAwMDAwOCB9LAotCXsgMHgwMDAwYTAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMHgwMmMwYTAwMCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDBjYTAwMCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDEzMDAwMCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDBjMjAwMCwgMHgwMDAwMDAwNCB9LAotCXsgMHhjOTgwYzA0NSwgMHgwMDAwMDAwOCB9LAotCXsgMHgyMDAwNDUxZCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDAwZTU4MCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDBjZTU4MSwgMHgwMDAwMDAwNCB9LAotCXsgMHgwODAwNDU4MCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDBjZTU4MSwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDAwMDA0YywgMHgwMDAwMDAwOCB9LAotCXsgMHgwMDAwYTAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMHgwMDBjMjAwMCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDAwZTUwZSwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDAzMjAwMCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDAyMjA1NiwgMHgwMDAwMDAyOCB9LAotCXsgMHgwMDAwMDA1NiwgMHgwMDAwMDAyNCB9LAotCXsgMHgwODAwNDUwZiwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDAwYTA1MCwgMHgwMDAwMDAwOCB9LAotCXsgMHgwMDAwZTU2NSwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDAwZTU2NiwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDAwMDA1NywgMHgwMDAwMDAwOCB9LAotCXsgMHgwM2NjYTViNCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwNTQzMjAwMCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDAyMjAwMCwgMHgwMDAwMDAwNCB9LAotCXsgMHg0Y2NjZTA2MywgMHgwMDAwMDAzMCB9LAotCXsgMHgwODI3NDU2NSwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDAwMDA2MywgMHgwMDAwMDAzMCB9LAotCXsgMHgwODAwNDU2NCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDAwZTU2NiwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDAwMDA1YSwgMHgwMDAwMDAwOCB9LAotCXsgMHgwMDgwMjA2NiwgMHgwMDAwMDAxMCB9LAotCXsgMHgwMDIwMjAwMCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDFiMDBmZiwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMTAwMDA2OSwgMHgwMDAwMDAxMCB9LAotCXsgMHgwMDFmMjAwMCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDFjMDBmZiwgMHgwMDAwMDAwNCB9LAotCXsgMDAwMDAwMDAwMCwgMHgwMDAwMDAwYyB9LAotCXsgMHgwMDAwMDA4NSwgMHgwMDAwMDAzMCB9LAotCXsgMHgwMDAwMDA1YSwgMHgwMDAwMDAwOCB9LAotCXsgMHgwMDAwZTU3NiwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDBjYTAwMCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDAxMjAwMCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDA4MjAwMCwgMHgwMDAwMDAwNCB9LAotCXsgMHgxODAwNjUwZSwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDA5MjAwMCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDBhMjAwMCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDBmMDAwMCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDQwMDAwMCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDAwMDA3OSwgMHgwMDAwMDAxOCB9LAotCXsgMHgwMDAwZTU2MywgMHgwMDAwMDAwNCB9LAotCXsgMHgwMGMwZTVmOSwgMHgwMDAwMDBjMiB9LAotCXsgMHgwMDAwMDA2ZSwgMHgwMDAwMDAwOCB9LAotCXsgMHgwMDAwYTA2ZSwgMHgwMDAwMDAwOCB9LAotCXsgMHgwMDAwZTU3NiwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDAwZTU3NywgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDAwZTUwZSwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDAwZTUwZiwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMTQwYTAwMCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDAwMDA3YywgMHgwMDAwMDAxOCB9LAotCXsgMHgwMGMwZTVmOSwgMHgwMDAwMDBjMiB9LAotCXsgMHgwMDAwMDA3YywgMHgwMDAwMDAwOCB9LAotCXsgMHgwMDE0ZTUwZSwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDQwZTUwZiwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMGMwMDA3ZiwgMHgwMDAwMDAwOCB9LAotCXsgMHgwMDAwZTU3MCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDAwZTU3MSwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDAwZTU3MiwgMHgwMDAwMDAwYyB9LAotCXsgMHgwMDAwYTAwMCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMTQwYTAwMCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDAwZTU2OCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDBjMjAwMCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDAwMDA4OSwgMHgwMDAwMDAxOCB9LAotCXsgMHgwMDBiMDAwMCwgMHgwMDAwMDAwNCB9LAotCXsgMHgxOGMwZTU2MiwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDAwMDA4YiwgMHgwMDAwMDAwOCB9LAotCXsgMHgwMGMwMDA4YSwgMHgwMDAwMDAwOCB9LAotCXsgMHgwMDA3MDBlNCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDAwMDA5NywgMHgwMDAwMDAzOCB9LAotCXsgMHgwMDBjYTA5OSwgMHgwMDAwMDAzMCB9LAotCXsgMHgwODAwNDViYiwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDBjMjA5YSwgMHgwMDAwMDAzMCB9LAotCXsgMHgwODAwZTViYywgMDAwMDAwMDAwMCB9LAotCXsgMHgwMDAwZTViYiwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDAwZTViYywgMDAwMDAwMDAwMCB9LAotCXsgMHgwMDEyMDAwMCwgMHgwMDAwMDAwYyB9LAotCXsgMHgwMDEyMDAwMCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDFiMDAwMiwgMHgwMDAwMDAwYyB9LAotCXsgMHgwMDAwYTAwMCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDAwZTgyMSwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDAwZTgwMCwgMDAwMDAwMDAwMCB9LAotCXsgMHgwMDAwZTgyMSwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDAwZTgyZSwgMDAwMDAwMDAwMCB9LAotCXsgMHgwMmNjYTAwMCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDE0MDAwMCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDBjZTFjYywgMHgwMDAwMDAwNCB9LAotCXsgMHgwNTBkZTFjZCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDAwMDBhNywgMHgwMDAwMDAyMCB9LAotCXsgMHg0MjAwZTAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMHgwMDAwMDBhZSwgMHgwMDAwMDAzOCB9LAotCXsgMHgwMDBjYTAwMCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDE0MDAwMCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDBjMjAwMCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDE2MDAwMCwgMHgwMDAwMDAwNCB9LAotCXsgMHg3MDBjZTAwMCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDE0MDBhYSwgMHgwMDAwMDAwOCB9LAotCXsgMHg0MDAwZTAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMHgwMjQwMDAwMCwgMHgwMDAwMDAwNCB9LAotCXsgMHg0MDBlZTAwMCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMjQwMDAwMCwgMHgwMDAwMDAwNCB9LAotCXsgMHg0MDAwZTAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMHgwMDBjMjAwMCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMjQwZTUxYiwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDgwZTUwYSwgMHgwMDAwMDAwNSB9LAotCXsgMHgwMDgwZTUwYiwgMHgwMDAwMDAwNSB9LAotCXsgMHgwMDIyMDAwMCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDA3MDBlNCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDAwMDBjMSwgMHgwMDAwMDAzOCB9LAotCXsgMHgwMDBjMjA5YSwgMHgwMDAwMDAzMCB9LAotCXsgMHgwODgwZTViZCwgMHgwMDAwMDAwNSB9LAotCXsgMHgwMDBjMjA5OSwgMHgwMDAwMDAzMCB9LAotCXsgMHgwODAwZTViYiwgMHgwMDAwMDAwNSB9LAotCXsgMHgwMDBjMjA5YSwgMHgwMDAwMDAzMCB9LAotCXsgMHgwODgwZTViYywgMHgwMDAwMDAwNSB9LAotCXsgMHgwMDAwMDBjNCwgMHgwMDAwMDAwOCB9LAotCXsgMHgwMDgwZTViZCwgMHgwMDAwMDAwNSB9LAotCXsgMHgwMDAwZTViYiwgMHgwMDAwMDAwNSB9LAotCXsgMHgwMDgwZTViYywgMHgwMDAwMDAwNSB9LAotCXsgMHgwMDIxMDAwMCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMjgwMDAwMCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMGMwMDBjOCwgMHgwMDAwMDAxOCB9LAotCXsgMHg0MTgwZTAwMCwgMHgwMDAwMDA0MCB9LAotCXsgMHgwMDAwMDBjYSwgMHgwMDAwMDAyNCB9LAotCXsgMHgwMTAwMDAwMCwgMHgwMDAwMDAwYyB9LAotCXsgMHgwMTAwZTUxZCwgMHgwMDAwMDAwYyB9LAotCXsgMHgwMDAwNDViYiwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDAwODBjNCwgMHgwMDAwMDAwOCB9LAotCXsgMHgwMDAwZjNjZSwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMTQwYTAwMCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMGNjMjAwMCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwOGMwNTNjZiwgMHgwMDAwMDA0MCB9LAotCXsgMHgwMDAwODAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMHgwMDAwZjNkMiwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMTQwYTAwMCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMGNjMjAwMCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwOGMwNTNkMywgMHgwMDAwMDA0MCB9LAotCXsgMHgwMDAwODAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMHgwMDAwZjM5ZCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMTQwYTAwMCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMGNjMjAwMCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwOGMwNTM5ZSwgMHgwMDAwMDA0MCB9LAotCXsgMHgwMDAwODAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMHgwM2MwMDgzMCwgMHgwMDAwMDAwNCB9LAotCXsgMHg0MjAwZTAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMHgwMDAwYTAwMCwgMHgwMDAwMDAwNCB9LAotCXsgMHgyMDAwNDVlMCwgMHgwMDAwMDAwNCB9LAotCXsgMHgwMDAwZTVlMSwgMDAwMDAwMDAwMCB9LAotCXsgMHgwMDAwMDAwMSwgMDAwMDAwMDAwMCB9LAotCXsgMHgwMDA3MDBlMSwgMHgwMDAwMDAwNCB9LAotCXsgMHgwODAwZTM5NCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAotCXsgMDAwMDAwMDAwMCwgMDAwMDAwMDAwMCB9LAorCXsweDQyMDBlMDAwLCAwMDAwMDAwMDAwfSwKKwl7MHg0MDAwZTAwMCwgMDAwMDAwMDAwMH0sCisJezB4MDAwMDAwYWYsIDB4MDAwMDAwMDh9LAorCXsweDAwMDAwMGIzLCAweDAwMDAwMDA4fSwKKwl7MHg2YzVhNTA0ZiwgMDAwMDAwMDAwMH0sCisJezB4NGY0ZjQ5N2EsIDAwMDAwMDAwMDB9LAorCXsweDVhNTc4Mjg4LCAwMDAwMDAwMDAwfSwKKwl7MHg0ZjkxOTA2YSwgMDAwMDAwMDAwMH0sCisJezB4NGY0ZjRmNGYsIDAwMDAwMDAwMDB9LAorCXsweDRmZTI0ZjQ0LCAwMDAwMDAwMDAwfSwKKwl7MHg0ZjljOWM5YywgMDAwMDAwMDAwMH0sCisJezB4ZGM0ZjRmZGUsIDAwMDAwMDAwMDB9LAorCXsweGExY2Q0ZjRmLCAwMDAwMDAwMDAwfSwKKwl7MHhkMjlkOWQ5ZCwgMDAwMDAwMDAwMH0sCisJezB4NGYwZjlmZDcsIDAwMDAwMDAwMDB9LAorCXsweDAwMGNhMDAwLCAweDAwMDAwMDA0fSwKKwl7MHgwMDBkMDAxMiwgMHgwMDAwMDAzOH0sCisJezB4MDAwMGU4YjQsIDB4MDAwMDAwMDR9LAorCXsweDAwMGQwMDE0LCAweDAwMDAwMDM4fSwKKwl7MHgwMDAwZThiNiwgMHgwMDAwMDAwNH0sCisJezB4MDAwZDAwMTYsIDB4MDAwMDAwMzh9LAorCXsweDAwMDBlODU0LCAweDAwMDAwMDA0fSwKKwl7MHgwMDBkMDAxOCwgMHgwMDAwMDAzOH0sCisJezB4MDAwMGU4NTUsIDB4MDAwMDAwMDR9LAorCXsweDAwMGQwMDFhLCAweDAwMDAwMDM4fSwKKwl7MHgwMDAwZTg1NiwgMHgwMDAwMDAwNH0sCisJezB4MDAwZDAwMWMsIDB4MDAwMDAwMzh9LAorCXsweDAwMDBlODU3LCAweDAwMDAwMDA0fSwKKwl7MHgwMDBkMDAxZSwgMHgwMDAwMDAzOH0sCisJezB4MDAwMGU4MjQsIDB4MDAwMDAwMDR9LAorCXsweDAwMGQwMDIwLCAweDAwMDAwMDM4fSwKKwl7MHgwMDAwZTgyNSwgMHgwMDAwMDAwNH0sCisJezB4MDAwZDAwMjIsIDB4MDAwMDAwMzh9LAorCXsweDAwMDBlODMwLCAweDAwMDAwMDA0fSwKKwl7MHgwMDBkMDAyNCwgMHgwMDAwMDAzOH0sCisJezB4MDAwMGYwYzAsIDB4MDAwMDAwMDR9LAorCXsweDAwMGQwMDI2LCAweDAwMDAwMDM4fSwKKwl7MHgwMDAwZjBjMSwgMHgwMDAwMDAwNH0sCisJezB4MDAwZDAwMjgsIDB4MDAwMDAwMzh9LAorCXsweDAwMDBmMDQxLCAweDAwMDAwMDA0fSwKKwl7MHgwMDBkMDAyYSwgMHgwMDAwMDAzOH0sCisJezB4MDAwMGYxODQsIDB4MDAwMDAwMDR9LAorCXsweDAwMGQwMDJjLCAweDAwMDAwMDM4fSwKKwl7MHgwMDAwZjE4NSwgMHgwMDAwMDAwNH0sCisJezB4MDAwZDAwMmUsIDB4MDAwMDAwMzh9LAorCXsweDAwMDBmMTg2LCAweDAwMDAwMDA0fSwKKwl7MHgwMDBkMDAzMCwgMHgwMDAwMDAzOH0sCisJezB4MDAwMGYxODcsIDB4MDAwMDAwMDR9LAorCXsweDAwMGQwMDMyLCAweDAwMDAwMDM4fSwKKwl7MHgwMDAwZjE4MCwgMHgwMDAwMDAwNH0sCisJezB4MDAwZDAwMzQsIDB4MDAwMDAwMzh9LAorCXsweDAwMDBmMzkzLCAweDAwMDAwMDA0fSwKKwl7MHgwMDBkMDAzNiwgMHgwMDAwMDAzOH0sCisJezB4MDAwMGYzOGEsIDB4MDAwMDAwMDR9LAorCXsweDAwMGQwMDM4LCAweDAwMDAwMDM4fSwKKwl7MHgwMDAwZjM4ZSwgMHgwMDAwMDAwNH0sCisJezB4MDAwMGU4MjEsIDB4MDAwMDAwMDR9LAorCXsweDAxNDBhMDAwLCAweDAwMDAwMDA0fSwKKwl7MHgwMDAwMDA0MywgMHgwMDAwMDAxOH0sCisJezB4MDBjY2U4MDAsIDB4MDAwMDAwMDR9LAorCXsweDAwMWIwMDAxLCAweDAwMDAwMDA0fSwKKwl7MHgwODAwNDgwMCwgMHgwMDAwMDAwNH0sCisJezB4MDAxYjAwMDEsIDB4MDAwMDAwMDR9LAorCXsweDA4MDA0ODAwLCAweDAwMDAwMDA0fSwKKwl7MHgwMDFiMDAwMSwgMHgwMDAwMDAwNH0sCisJezB4MDgwMDQ4MDAsIDB4MDAwMDAwMDR9LAorCXsweDAwMDAwMDNhLCAweDAwMDAwMDA4fSwKKwl7MHgwMDAwYTAwMCwgMDAwMDAwMDAwMH0sCisJezB4MDJjMGEwMDAsIDB4MDAwMDAwMDR9LAorCXsweDAwMGNhMDAwLCAweDAwMDAwMDA0fSwKKwl7MHgwMDEzMDAwMCwgMHgwMDAwMDAwNH0sCisJezB4MDAwYzIwMDAsIDB4MDAwMDAwMDR9LAorCXsweGM5ODBjMDQ1LCAweDAwMDAwMDA4fSwKKwl7MHgyMDAwNDUxZCwgMHgwMDAwMDAwNH0sCisJezB4MDAwMGU1ODAsIDB4MDAwMDAwMDR9LAorCXsweDAwMGNlNTgxLCAweDAwMDAwMDA0fSwKKwl7MHgwODAwNDU4MCwgMHgwMDAwMDAwNH0sCisJezB4MDAwY2U1ODEsIDB4MDAwMDAwMDR9LAorCXsweDAwMDAwMDRjLCAweDAwMDAwMDA4fSwKKwl7MHgwMDAwYTAwMCwgMDAwMDAwMDAwMH0sCisJezB4MDAwYzIwMDAsIDB4MDAwMDAwMDR9LAorCXsweDAwMDBlNTBlLCAweDAwMDAwMDA0fSwKKwl7MHgwMDAzMjAwMCwgMHgwMDAwMDAwNH0sCisJezB4MDAwMjIwNTYsIDB4MDAwMDAwMjh9LAorCXsweDAwMDAwMDU2LCAweDAwMDAwMDI0fSwKKwl7MHgwODAwNDUwZiwgMHgwMDAwMDAwNH0sCisJezB4MDAwMGEwNTAsIDB4MDAwMDAwMDh9LAorCXsweDAwMDBlNTY1LCAweDAwMDAwMDA0fSwKKwl7MHgwMDAwZTU2NiwgMHgwMDAwMDAwNH0sCisJezB4MDAwMDAwNTcsIDB4MDAwMDAwMDh9LAorCXsweDAzY2NhNWI0LCAweDAwMDAwMDA0fSwKKwl7MHgwNTQzMjAwMCwgMHgwMDAwMDAwNH0sCisJezB4MDAwMjIwMDAsIDB4MDAwMDAwMDR9LAorCXsweDRjY2NlMDYzLCAweDAwMDAwMDMwfSwKKwl7MHgwODI3NDU2NSwgMHgwMDAwMDAwNH0sCisJezB4MDAwMDAwNjMsIDB4MDAwMDAwMzB9LAorCXsweDA4MDA0NTY0LCAweDAwMDAwMDA0fSwKKwl7MHgwMDAwZTU2NiwgMHgwMDAwMDAwNH0sCisJezB4MDAwMDAwNWEsIDB4MDAwMDAwMDh9LAorCXsweDAwODAyMDY2LCAweDAwMDAwMDEwfSwKKwl7MHgwMDIwMjAwMCwgMHgwMDAwMDAwNH0sCisJezB4MDAxYjAwZmYsIDB4MDAwMDAwMDR9LAorCXsweDAxMDAwMDY5LCAweDAwMDAwMDEwfSwKKwl7MHgwMDFmMjAwMCwgMHgwMDAwMDAwNH0sCisJezB4MDAxYzAwZmYsIDB4MDAwMDAwMDR9LAorCXswMDAwMDAwMDAwLCAweDAwMDAwMDBjfSwKKwl7MHgwMDAwMDA4NSwgMHgwMDAwMDAzMH0sCisJezB4MDAwMDAwNWEsIDB4MDAwMDAwMDh9LAorCXsweDAwMDBlNTc2LCAweDAwMDAwMDA0fSwKKwl7MHgwMDBjYTAwMCwgMHgwMDAwMDAwNH0sCisJezB4MDAwMTIwMDAsIDB4MDAwMDAwMDR9LAorCXsweDAwMDgyMDAwLCAweDAwMDAwMDA0fSwKKwl7MHgxODAwNjUwZSwgMHgwMDAwMDAwNH0sCisJezB4MDAwOTIwMDAsIDB4MDAwMDAwMDR9LAorCXsweDAwMGEyMDAwLCAweDAwMDAwMDA0fSwKKwl7MHgwMDBmMDAwMCwgMHgwMDAwMDAwNH0sCisJezB4MDA0MDAwMDAsIDB4MDAwMDAwMDR9LAorCXsweDAwMDAwMDc5LCAweDAwMDAwMDE4fSwKKwl7MHgwMDAwZTU2MywgMHgwMDAwMDAwNH0sCisJezB4MDBjMGU1ZjksIDB4MDAwMDAwYzJ9LAorCXsweDAwMDAwMDZlLCAweDAwMDAwMDA4fSwKKwl7MHgwMDAwYTA2ZSwgMHgwMDAwMDAwOH0sCisJezB4MDAwMGU1NzYsIDB4MDAwMDAwMDR9LAorCXsweDAwMDBlNTc3LCAweDAwMDAwMDA0fSwKKwl7MHgwMDAwZTUwZSwgMHgwMDAwMDAwNH0sCisJezB4MDAwMGU1MGYsIDB4MDAwMDAwMDR9LAorCXsweDAxNDBhMDAwLCAweDAwMDAwMDA0fSwKKwl7MHgwMDAwMDA3YywgMHgwMDAwMDAxOH0sCisJezB4MDBjMGU1ZjksIDB4MDAwMDAwYzJ9LAorCXsweDAwMDAwMDdjLCAweDAwMDAwMDA4fSwKKwl7MHgwMDE0ZTUwZSwgMHgwMDAwMDAwNH0sCisJezB4MDA0MGU1MGYsIDB4MDAwMDAwMDR9LAorCXsweDAwYzAwMDdmLCAweDAwMDAwMDA4fSwKKwl7MHgwMDAwZTU3MCwgMHgwMDAwMDAwNH0sCisJezB4MDAwMGU1NzEsIDB4MDAwMDAwMDR9LAorCXsweDAwMDBlNTcyLCAweDAwMDAwMDBjfSwKKwl7MHgwMDAwYTAwMCwgMHgwMDAwMDAwNH0sCisJezB4MDE0MGEwMDAsIDB4MDAwMDAwMDR9LAorCXsweDAwMDBlNTY4LCAweDAwMDAwMDA0fSwKKwl7MHgwMDBjMjAwMCwgMHgwMDAwMDAwNH0sCisJezB4MDAwMDAwODksIDB4MDAwMDAwMTh9LAorCXsweDAwMGIwMDAwLCAweDAwMDAwMDA0fSwKKwl7MHgxOGMwZTU2MiwgMHgwMDAwMDAwNH0sCisJezB4MDAwMDAwOGIsIDB4MDAwMDAwMDh9LAorCXsweDAwYzAwMDhhLCAweDAwMDAwMDA4fSwKKwl7MHgwMDA3MDBlNCwgMHgwMDAwMDAwNH0sCisJezB4MDAwMDAwOTcsIDB4MDAwMDAwMzh9LAorCXsweDAwMGNhMDk5LCAweDAwMDAwMDMwfSwKKwl7MHgwODAwNDViYiwgMHgwMDAwMDAwNH0sCisJezB4MDAwYzIwOWEsIDB4MDAwMDAwMzB9LAorCXsweDA4MDBlNWJjLCAwMDAwMDAwMDAwfSwKKwl7MHgwMDAwZTViYiwgMHgwMDAwMDAwNH0sCisJezB4MDAwMGU1YmMsIDAwMDAwMDAwMDB9LAorCXsweDAwMTIwMDAwLCAweDAwMDAwMDBjfSwKKwl7MHgwMDEyMDAwMCwgMHgwMDAwMDAwNH0sCisJezB4MDAxYjAwMDIsIDB4MDAwMDAwMGN9LAorCXsweDAwMDBhMDAwLCAweDAwMDAwMDA0fSwKKwl7MHgwMDAwZTgyMSwgMHgwMDAwMDAwNH0sCisJezB4MDAwMGU4MDAsIDAwMDAwMDAwMDB9LAorCXsweDAwMDBlODIxLCAweDAwMDAwMDA0fSwKKwl7MHgwMDAwZTgyZSwgMDAwMDAwMDAwMH0sCisJezB4MDJjY2EwMDAsIDB4MDAwMDAwMDR9LAorCXsweDAwMTQwMDAwLCAweDAwMDAwMDA0fSwKKwl7MHgwMDBjZTFjYywgMHgwMDAwMDAwNH0sCisJezB4MDUwZGUxY2QsIDB4MDAwMDAwMDR9LAorCXsweDAwMDAwMGE3LCAweDAwMDAwMDIwfSwKKwl7MHg0MjAwZTAwMCwgMDAwMDAwMDAwMH0sCisJezB4MDAwMDAwYWUsIDB4MDAwMDAwMzh9LAorCXsweDAwMGNhMDAwLCAweDAwMDAwMDA0fSwKKwl7MHgwMDE0MDAwMCwgMHgwMDAwMDAwNH0sCisJezB4MDAwYzIwMDAsIDB4MDAwMDAwMDR9LAorCXsweDAwMTYwMDAwLCAweDAwMDAwMDA0fSwKKwl7MHg3MDBjZTAwMCwgMHgwMDAwMDAwNH0sCisJezB4MDAxNDAwYWEsIDB4MDAwMDAwMDh9LAorCXsweDQwMDBlMDAwLCAwMDAwMDAwMDAwfSwKKwl7MHgwMjQwMDAwMCwgMHgwMDAwMDAwNH0sCisJezB4NDAwZWUwMDAsIDB4MDAwMDAwMDR9LAorCXsweDAyNDAwMDAwLCAweDAwMDAwMDA0fSwKKwl7MHg0MDAwZTAwMCwgMDAwMDAwMDAwMH0sCisJezB4MDAwYzIwMDAsIDB4MDAwMDAwMDR9LAorCXsweDAyNDBlNTFiLCAweDAwMDAwMDA0fSwKKwl7MHgwMDgwZTUwYSwgMHgwMDAwMDAwNX0sCisJezB4MDA4MGU1MGIsIDB4MDAwMDAwMDV9LAorCXsweDAwMjIwMDAwLCAweDAwMDAwMDA0fSwKKwl7MHgwMDA3MDBlNCwgMHgwMDAwMDAwNH0sCisJezB4MDAwMDAwYzEsIDB4MDAwMDAwMzh9LAorCXsweDAwMGMyMDlhLCAweDAwMDAwMDMwfSwKKwl7MHgwODgwZTViZCwgMHgwMDAwMDAwNX0sCisJezB4MDAwYzIwOTksIDB4MDAwMDAwMzB9LAorCXsweDA4MDBlNWJiLCAweDAwMDAwMDA1fSwKKwl7MHgwMDBjMjA5YSwgMHgwMDAwMDAzMH0sCisJezB4MDg4MGU1YmMsIDB4MDAwMDAwMDV9LAorCXsweDAwMDAwMGM0LCAweDAwMDAwMDA4fSwKKwl7MHgwMDgwZTViZCwgMHgwMDAwMDAwNX0sCisJezB4MDAwMGU1YmIsIDB4MDAwMDAwMDV9LAorCXsweDAwODBlNWJjLCAweDAwMDAwMDA1fSwKKwl7MHgwMDIxMDAwMCwgMHgwMDAwMDAwNH0sCisJezB4MDI4MDAwMDAsIDB4MDAwMDAwMDR9LAorCXsweDAwYzAwMGM4LCAweDAwMDAwMDE4fSwKKwl7MHg0MTgwZTAwMCwgMHgwMDAwMDA0MH0sCisJezB4MDAwMDAwY2EsIDB4MDAwMDAwMjR9LAorCXsweDAxMDAwMDAwLCAweDAwMDAwMDBjfSwKKwl7MHgwMTAwZTUxZCwgMHgwMDAwMDAwY30sCisJezB4MDAwMDQ1YmIsIDB4MDAwMDAwMDR9LAorCXsweDAwMDA4MGM0LCAweDAwMDAwMDA4fSwKKwl7MHgwMDAwZjNjZSwgMHgwMDAwMDAwNH0sCisJezB4MDE0MGEwMDAsIDB4MDAwMDAwMDR9LAorCXsweDAwY2MyMDAwLCAweDAwMDAwMDA0fSwKKwl7MHgwOGMwNTNjZiwgMHgwMDAwMDA0MH0sCisJezB4MDAwMDgwMDAsIDAwMDAwMDAwMDB9LAorCXsweDAwMDBmM2QyLCAweDAwMDAwMDA0fSwKKwl7MHgwMTQwYTAwMCwgMHgwMDAwMDAwNH0sCisJezB4MDBjYzIwMDAsIDB4MDAwMDAwMDR9LAorCXsweDA4YzA1M2QzLCAweDAwMDAwMDQwfSwKKwl7MHgwMDAwODAwMCwgMDAwMDAwMDAwMH0sCisJezB4MDAwMGYzOWQsIDB4MDAwMDAwMDR9LAorCXsweDAxNDBhMDAwLCAweDAwMDAwMDA0fSwKKwl7MHgwMGNjMjAwMCwgMHgwMDAwMDAwNH0sCisJezB4MDhjMDUzOWUsIDB4MDAwMDAwNDB9LAorCXsweDAwMDA4MDAwLCAwMDAwMDAwMDAwfSwKKwl7MHgwM2MwMDgzMCwgMHgwMDAwMDAwNH0sCisJezB4NDIwMGUwMDAsIDAwMDAwMDAwMDB9LAorCXsweDAwMDBhMDAwLCAweDAwMDAwMDA0fSwKKwl7MHgyMDAwNDVlMCwgMHgwMDAwMDAwNH0sCisJezB4MDAwMGU1ZTEsIDAwMDAwMDAwMDB9LAorCXsweDAwMDAwMDAxLCAwMDAwMDAwMDAwfSwKKwl7MHgwMDA3MDBlMSwgMHgwMDAwMDAwNH0sCisJezB4MDgwMGUzOTQsIDAwMDAwMDAwMDB9LAorCXswMDAwMDAwMDAwLCAwMDAwMDAwMDAwfSwKKwl7MDAwMDAwMDAwMCwgMDAwMDAwMDAwMH0sCisJezAwMDAwMDAwMDAsIDAwMDAwMDAwMDB9LAorCXswMDAwMDAwMDAwLCAwMDAwMDAwMDAwfSwKKwl7MDAwMDAwMDAwMCwgMDAwMDAwMDAwMH0sCisJezAwMDAwMDAwMDAsIDAwMDAwMDAwMDB9LAorCXswMDAwMDAwMDAwLCAwMDAwMDAwMDAwfSwKKwl7MDAwMDAwMDAwMCwgMDAwMDAwMDAwMH0sCisJezAwMDAwMDAwMDAsIDAwMDAwMDAwMDB9LAorCXswMDAwMDAwMDAwLCAwMDAwMDAwMDAwfSwKKwl7MDAwMDAwMDAwMCwgMDAwMDAwMDAwMH0sCisJezAwMDAwMDAwMDAsIDAwMDAwMDAwMDB9LAorCXswMDAwMDAwMDAwLCAwMDAwMDAwMDAwfSwKKwl7MDAwMDAwMDAwMCwgMDAwMDAwMDAwMH0sCisJezAwMDAwMDAwMDAsIDAwMDAwMDAwMDB9LAorCXswMDAwMDAwMDAwLCAwMDAwMDAwMDAwfSwKKwl7MDAwMDAwMDAwMCwgMDAwMDAwMDAwMH0sCisJezAwMDAwMDAwMDAsIDAwMDAwMDAwMDB9LAorCXswMDAwMDAwMDAwLCAwMDAwMDAwMDAwfSwKKwl7MDAwMDAwMDAwMCwgMDAwMDAwMDAwMH0sCisJezAwMDAwMDAwMDAsIDAwMDAwMDAwMDB9LAorCXswMDAwMDAwMDAwLCAwMDAwMDAwMDAwfSwKKwl7MDAwMDAwMDAwMCwgMDAwMDAwMDAwMH0sCisJezAwMDAwMDAwMDAsIDAwMDAwMDAwMDB9LAorCXswMDAwMDAwMDAwLCAwMDAwMDAwMDAwfSwKKwl7MDAwMDAwMDAwMCwgMDAwMDAwMDAwMH0sCisJezAwMDAwMDAwMDAsIDAwMDAwMDAwMDB9LAorCXswMDAwMDAwMDAwLCAwMDAwMDAwMDAwfSwKIH07CiAKLXN0YXRpYyBpbnQgUkFERU9OX1JFQURfUExMKGRybV9kZXZpY2VfdCAqZGV2LCBpbnQgYWRkcikKK3N0YXRpYyBpbnQgUkFERU9OX1JFQURfUExMKGRybV9kZXZpY2VfdCAqIGRldiwgaW50IGFkZHIpCiB7CiAJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIApAQCAtODI1LDE1MSArODI0LDE0OCBAQAogCXJldHVybiBSQURFT05fUkVBRChSQURFT05fQ0xPQ0tfQ05UTF9EQVRBKTsKIH0KIAotc3RhdGljIGludCBSQURFT05fUkVBRF9QQ0lFKGRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiwgaW50IGFkZHIpCitzdGF0aWMgaW50IFJBREVPTl9SRUFEX1BDSUUoZHJtX3JhZGVvbl9wcml2YXRlX3QgKiBkZXZfcHJpdiwgaW50IGFkZHIpCiB7CiAJUkFERU9OX1dSSVRFOChSQURFT05fUENJRV9JTkRFWCwgYWRkciAmIDB4ZmYpOwogCXJldHVybiBSQURFT05fUkVBRChSQURFT05fUENJRV9EQVRBKTsKIH0KIAogI2lmIFJBREVPTl9GSUZPX0RFQlVHCi1zdGF0aWMgdm9pZCByYWRlb25fc3RhdHVzKCBkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgKQorc3RhdGljIHZvaWQgcmFkZW9uX3N0YXR1cyhkcm1fcmFkZW9uX3ByaXZhdGVfdCAqIGRldl9wcml2KQogewotCXByaW50ayggIiVzOlxuIiwgX19GVU5DVElPTl9fICk7Ci0JcHJpbnRrKCAiUkJCTV9TVEFUVVMgPSAweCUwOHhcbiIsCi0JCSh1bnNpZ25lZCBpbnQpUkFERU9OX1JFQUQoIFJBREVPTl9SQkJNX1NUQVRVUyApICk7Ci0JcHJpbnRrKCAiQ1BfUkJfUlRQUiA9IDB4JTA4eFxuIiwKLQkJKHVuc2lnbmVkIGludClSQURFT05fUkVBRCggUkFERU9OX0NQX1JCX1JQVFIgKSApOwotCXByaW50ayggIkNQX1JCX1dUUFIgPSAweCUwOHhcbiIsCi0JCSh1bnNpZ25lZCBpbnQpUkFERU9OX1JFQUQoIFJBREVPTl9DUF9SQl9XUFRSICkgKTsKLQlwcmludGsoICJBSUNfQ05UTCA9IDB4JTA4eFxuIiwKLQkJKHVuc2lnbmVkIGludClSQURFT05fUkVBRCggUkFERU9OX0FJQ19DTlRMICkgKTsKLQlwcmludGsoICJBSUNfU1RBVCA9IDB4JTA4eFxuIiwKLQkJKHVuc2lnbmVkIGludClSQURFT05fUkVBRCggUkFERU9OX0FJQ19TVEFUICkgKTsKLQlwcmludGsoICJBSUNfUFRfQkFTRSA9IDB4JTA4eFxuIiwKLQkJKHVuc2lnbmVkIGludClSQURFT05fUkVBRCggUkFERU9OX0FJQ19QVF9CQVNFICkgKTsKLQlwcmludGsoICJUTEJfQUREUiA9IDB4JTA4eFxuIiwKLQkJKHVuc2lnbmVkIGludClSQURFT05fUkVBRCggUkFERU9OX0FJQ19UTEJfQUREUiApICk7Ci0JcHJpbnRrKCAiVExCX0RBVEEgPSAweCUwOHhcbiIsCi0JCSh1bnNpZ25lZCBpbnQpUkFERU9OX1JFQUQoIFJBREVPTl9BSUNfVExCX0RBVEEgKSApOworCXByaW50aygiJXM6XG4iLCBfX0ZVTkNUSU9OX18pOworCXByaW50aygiUkJCTV9TVEFUVVMgPSAweCUwOHhcbiIsCisJICAgICAgICh1bnNpZ25lZCBpbnQpUkFERU9OX1JFQUQoUkFERU9OX1JCQk1fU1RBVFVTKSk7CisJcHJpbnRrKCJDUF9SQl9SVFBSID0gMHglMDh4XG4iLAorCSAgICAgICAodW5zaWduZWQgaW50KVJBREVPTl9SRUFEKFJBREVPTl9DUF9SQl9SUFRSKSk7CisJcHJpbnRrKCJDUF9SQl9XVFBSID0gMHglMDh4XG4iLAorCSAgICAgICAodW5zaWduZWQgaW50KVJBREVPTl9SRUFEKFJBREVPTl9DUF9SQl9XUFRSKSk7CisJcHJpbnRrKCJBSUNfQ05UTCA9IDB4JTA4eFxuIiwKKwkgICAgICAgKHVuc2lnbmVkIGludClSQURFT05fUkVBRChSQURFT05fQUlDX0NOVEwpKTsKKwlwcmludGsoIkFJQ19TVEFUID0gMHglMDh4XG4iLAorCSAgICAgICAodW5zaWduZWQgaW50KVJBREVPTl9SRUFEKFJBREVPTl9BSUNfU1RBVCkpOworCXByaW50aygiQUlDX1BUX0JBU0UgPSAweCUwOHhcbiIsCisJICAgICAgICh1bnNpZ25lZCBpbnQpUkFERU9OX1JFQUQoUkFERU9OX0FJQ19QVF9CQVNFKSk7CisJcHJpbnRrKCJUTEJfQUREUiA9IDB4JTA4eFxuIiwKKwkgICAgICAgKHVuc2lnbmVkIGludClSQURFT05fUkVBRChSQURFT05fQUlDX1RMQl9BRERSKSk7CisJcHJpbnRrKCJUTEJfREFUQSA9IDB4JTA4eFxuIiwKKwkgICAgICAgKHVuc2lnbmVkIGludClSQURFT05fUkVBRChSQURFT05fQUlDX1RMQl9EQVRBKSk7CiB9CiAjZW5kaWYKIAotCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiBFbmdpbmUsIEZJRk8gY29udHJvbAogICovCiAKLXN0YXRpYyBpbnQgcmFkZW9uX2RvX3BpeGNhY2hlX2ZsdXNoKCBkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgKQorc3RhdGljIGludCByYWRlb25fZG9fcGl4Y2FjaGVfZmx1c2goZHJtX3JhZGVvbl9wcml2YXRlX3QgKiBkZXZfcHJpdikKIHsKIAl1MzIgdG1wOwogCWludCBpOwogCiAJZGV2X3ByaXYtPnN0YXRzLmJveGVzIHw9IFJBREVPTl9CT1hfV0FJVF9JRExFOwogCi0JdG1wICA9IFJBREVPTl9SRUFEKCBSQURFT05fUkIyRF9EU1RDQUNIRV9DVExTVEFUICk7CisJdG1wID0gUkFERU9OX1JFQUQoUkFERU9OX1JCMkRfRFNUQ0FDSEVfQ1RMU1RBVCk7CiAJdG1wIHw9IFJBREVPTl9SQjJEX0RDX0ZMVVNIX0FMTDsKLQlSQURFT05fV1JJVEUoIFJBREVPTl9SQjJEX0RTVENBQ0hFX0NUTFNUQVQsIHRtcCApOworCVJBREVPTl9XUklURShSQURFT05fUkIyRF9EU1RDQUNIRV9DVExTVEFULCB0bXApOwogCi0JZm9yICggaSA9IDAgOyBpIDwgZGV2X3ByaXYtPnVzZWNfdGltZW91dCA7IGkrKyApIHsKLQkJaWYgKCAhKFJBREVPTl9SRUFEKCBSQURFT05fUkIyRF9EU1RDQUNIRV9DVExTVEFUICkKLQkJICAgICAgICYgUkFERU9OX1JCMkRfRENfQlVTWSkgKSB7CisJZm9yIChpID0gMDsgaSA8IGRldl9wcml2LT51c2VjX3RpbWVvdXQ7IGkrKykgeworCQlpZiAoIShSQURFT05fUkVBRChSQURFT05fUkIyRF9EU1RDQUNIRV9DVExTVEFUKQorCQkgICAgICAmIFJBREVPTl9SQjJEX0RDX0JVU1kpKSB7CiAJCQlyZXR1cm4gMDsKIAkJfQotCQlEUk1fVURFTEFZKCAxICk7CisJCURSTV9VREVMQVkoMSk7CiAJfQogCiAjaWYgUkFERU9OX0ZJRk9fREVCVUcKLQlEUk1fRVJST1IoICJmYWlsZWQhXG4iICk7Ci0JcmFkZW9uX3N0YXR1cyggZGV2X3ByaXYgKTsKKwlEUk1fRVJST1IoImZhaWxlZCFcbiIpOworCXJhZGVvbl9zdGF0dXMoZGV2X3ByaXYpOwogI2VuZGlmCiAJcmV0dXJuIERSTV9FUlIoRUJVU1kpOwogfQogCi1zdGF0aWMgaW50IHJhZGVvbl9kb193YWl0X2Zvcl9maWZvKCBkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsCi0JCQkJICAgIGludCBlbnRyaWVzICkKK3N0YXRpYyBpbnQgcmFkZW9uX2RvX3dhaXRfZm9yX2ZpZm8oZHJtX3JhZGVvbl9wcml2YXRlX3QgKiBkZXZfcHJpdiwgaW50IGVudHJpZXMpCiB7CiAJaW50IGk7CiAKIAlkZXZfcHJpdi0+c3RhdHMuYm94ZXMgfD0gUkFERU9OX0JPWF9XQUlUX0lETEU7CiAKLQlmb3IgKCBpID0gMCA7IGkgPCBkZXZfcHJpdi0+dXNlY190aW1lb3V0IDsgaSsrICkgewotCQlpbnQgc2xvdHMgPSAoIFJBREVPTl9SRUFEKCBSQURFT05fUkJCTV9TVEFUVVMgKQotCQkJICAgICAgJiBSQURFT05fUkJCTV9GSUZPQ05UX01BU0sgKTsKLQkJaWYgKCBzbG90cyA+PSBlbnRyaWVzICkgcmV0dXJuIDA7Ci0JCURSTV9VREVMQVkoIDEgKTsKKwlmb3IgKGkgPSAwOyBpIDwgZGV2X3ByaXYtPnVzZWNfdGltZW91dDsgaSsrKSB7CisJCWludCBzbG90cyA9IChSQURFT05fUkVBRChSQURFT05fUkJCTV9TVEFUVVMpCisJCQkgICAgICYgUkFERU9OX1JCQk1fRklGT0NOVF9NQVNLKTsKKwkJaWYgKHNsb3RzID49IGVudHJpZXMpCisJCQlyZXR1cm4gMDsKKwkJRFJNX1VERUxBWSgxKTsKIAl9CiAKICNpZiBSQURFT05fRklGT19ERUJVRwotCURSTV9FUlJPUiggImZhaWxlZCFcbiIgKTsKLQlyYWRlb25fc3RhdHVzKCBkZXZfcHJpdiApOworCURSTV9FUlJPUigiZmFpbGVkIVxuIik7CisJcmFkZW9uX3N0YXR1cyhkZXZfcHJpdik7CiAjZW5kaWYKIAlyZXR1cm4gRFJNX0VSUihFQlVTWSk7CiB9CiAKLXN0YXRpYyBpbnQgcmFkZW9uX2RvX3dhaXRfZm9yX2lkbGUoIGRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiApCitzdGF0aWMgaW50IHJhZGVvbl9kb193YWl0X2Zvcl9pZGxlKGRybV9yYWRlb25fcHJpdmF0ZV90ICogZGV2X3ByaXYpCiB7CiAJaW50IGksIHJldDsKIAogCWRldl9wcml2LT5zdGF0cy5ib3hlcyB8PSBSQURFT05fQk9YX1dBSVRfSURMRTsKIAotCXJldCA9IHJhZGVvbl9kb193YWl0X2Zvcl9maWZvKCBkZXZfcHJpdiwgNjQgKTsKLQlpZiAoIHJldCApIHJldHVybiByZXQ7CisJcmV0ID0gcmFkZW9uX2RvX3dhaXRfZm9yX2ZpZm8oZGV2X3ByaXYsIDY0KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCi0JZm9yICggaSA9IDAgOyBpIDwgZGV2X3ByaXYtPnVzZWNfdGltZW91dCA7IGkrKyApIHsKLQkJaWYgKCAhKFJBREVPTl9SRUFEKCBSQURFT05fUkJCTV9TVEFUVVMgKQotCQkgICAgICAgJiBSQURFT05fUkJCTV9BQ1RJVkUpICkgewotCQkJcmFkZW9uX2RvX3BpeGNhY2hlX2ZsdXNoKCBkZXZfcHJpdiApOworCWZvciAoaSA9IDA7IGkgPCBkZXZfcHJpdi0+dXNlY190aW1lb3V0OyBpKyspIHsKKwkJaWYgKCEoUkFERU9OX1JFQUQoUkFERU9OX1JCQk1fU1RBVFVTKQorCQkgICAgICAmIFJBREVPTl9SQkJNX0FDVElWRSkpIHsKKwkJCXJhZGVvbl9kb19waXhjYWNoZV9mbHVzaChkZXZfcHJpdik7CiAJCQlyZXR1cm4gMDsKIAkJfQotCQlEUk1fVURFTEFZKCAxICk7CisJCURSTV9VREVMQVkoMSk7CiAJfQogCiAjaWYgUkFERU9OX0ZJRk9fREVCVUcKLQlEUk1fRVJST1IoICJmYWlsZWQhXG4iICk7Ci0JcmFkZW9uX3N0YXR1cyggZGV2X3ByaXYgKTsKKwlEUk1fRVJST1IoImZhaWxlZCFcbiIpOworCXJhZGVvbl9zdGF0dXMoZGV2X3ByaXYpOwogI2VuZGlmCiAJcmV0dXJuIERSTV9FUlIoRUJVU1kpOwogfQogCi0KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqIENQIGNvbnRyb2wsIGluaXRpYWxpemF0aW9uCiAgKi8KIAogLyogTG9hZCB0aGUgbWljcm9jb2RlIGZvciB0aGUgQ1AgKi8KLXN0YXRpYyB2b2lkIHJhZGVvbl9jcF9sb2FkX21pY3JvY29kZSggZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ICkKK3N0YXRpYyB2b2lkIHJhZGVvbl9jcF9sb2FkX21pY3JvY29kZShkcm1fcmFkZW9uX3ByaXZhdGVfdCAqIGRldl9wcml2KQogewogCWludCBpOwotCURSTV9ERUJVRyggIlxuIiApOworCURSTV9ERUJVRygiXG4iKTsKIAotCXJhZGVvbl9kb193YWl0X2Zvcl9pZGxlKCBkZXZfcHJpdiApOworCXJhZGVvbl9kb193YWl0X2Zvcl9pZGxlKGRldl9wcml2KTsKIAotCVJBREVPTl9XUklURSggUkFERU9OX0NQX01FX1JBTV9BRERSLCAwICk7CisJUkFERU9OX1dSSVRFKFJBREVPTl9DUF9NRV9SQU1fQUREUiwgMCk7CiAKLQlpZiAoZGV2X3ByaXYtPm1pY3JvY29kZV92ZXJzaW9uPT1VQ09ERV9SMjAwKSB7CisJaWYgKGRldl9wcml2LT5taWNyb2NvZGVfdmVyc2lvbiA9PSBVQ09ERV9SMjAwKSB7CiAJCURSTV9JTkZPKCJMb2FkaW5nIFIyMDAgTWljcm9jb2RlXG4iKTsKLQkJZm9yICggaSA9IDAgOyBpIDwgMjU2IDsgaSsrICkgCi0JCXsKLQkJCVJBREVPTl9XUklURSggUkFERU9OX0NQX01FX1JBTV9EQVRBSCwKLQkJCQkgICAgICBSMjAwX2NwX21pY3JvY29kZVtpXVsxXSApOwotCQkJUkFERU9OX1dSSVRFKCBSQURFT05fQ1BfTUVfUkFNX0RBVEFMLAotCQkJCSAgICAgIFIyMDBfY3BfbWljcm9jb2RlW2ldWzBdICk7CisJCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCQkJUkFERU9OX1dSSVRFKFJBREVPTl9DUF9NRV9SQU1fREFUQUgsCisJCQkJICAgICBSMjAwX2NwX21pY3JvY29kZVtpXVsxXSk7CisJCQlSQURFT05fV1JJVEUoUkFERU9OX0NQX01FX1JBTV9EQVRBTCwKKwkJCQkgICAgIFIyMDBfY3BfbWljcm9jb2RlW2ldWzBdKTsKIAkJfQotCX0gZWxzZSBpZiAoZGV2X3ByaXYtPm1pY3JvY29kZV92ZXJzaW9uPT1VQ09ERV9SMzAwKSB7CisJfSBlbHNlIGlmIChkZXZfcHJpdi0+bWljcm9jb2RlX3ZlcnNpb24gPT0gVUNPREVfUjMwMCkgewogCQlEUk1fSU5GTygiTG9hZGluZyBSMzAwIE1pY3JvY29kZVxuIik7Ci0JCWZvciAoIGkgPSAwIDsgaSA8IDI1NiA7IGkrKyApIAotCQl7Ci0JCQlSQURFT05fV1JJVEUoIFJBREVPTl9DUF9NRV9SQU1fREFUQUgsCi0JCQkJICAgICAgUjMwMF9jcF9taWNyb2NvZGVbaV1bMV0gKTsKLQkJCVJBREVPTl9XUklURSggUkFERU9OX0NQX01FX1JBTV9EQVRBTCwKLQkJCQkgICAgICBSMzAwX2NwX21pY3JvY29kZVtpXVswXSApOworCQlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKwkJCVJBREVPTl9XUklURShSQURFT05fQ1BfTUVfUkFNX0RBVEFILAorCQkJCSAgICAgUjMwMF9jcF9taWNyb2NvZGVbaV1bMV0pOworCQkJUkFERU9OX1dSSVRFKFJBREVPTl9DUF9NRV9SQU1fREFUQUwsCisJCQkJICAgICBSMzAwX2NwX21pY3JvY29kZVtpXVswXSk7CiAJCX0KIAl9IGVsc2UgewotCQlmb3IgKCBpID0gMCA7IGkgPCAyNTYgOyBpKysgKSB7Ci0JCQlSQURFT05fV1JJVEUoIFJBREVPTl9DUF9NRV9SQU1fREFUQUgsCi0JCQkJICAgICAgcmFkZW9uX2NwX21pY3JvY29kZVtpXVsxXSApOwotCQkJUkFERU9OX1dSSVRFKCBSQURFT05fQ1BfTUVfUkFNX0RBVEFMLAotCQkJCSAgICAgIHJhZGVvbl9jcF9taWNyb2NvZGVbaV1bMF0gKTsKKwkJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisJCQlSQURFT05fV1JJVEUoUkFERU9OX0NQX01FX1JBTV9EQVRBSCwKKwkJCQkgICAgIHJhZGVvbl9jcF9taWNyb2NvZGVbaV1bMV0pOworCQkJUkFERU9OX1dSSVRFKFJBREVPTl9DUF9NRV9SQU1fREFUQUwsCisJCQkJICAgICByYWRlb25fY3BfbWljcm9jb2RlW2ldWzBdKTsKIAkJfQogCX0KIH0KQEAgLTk3OCwyNSArOTc0LDI1IEBACiAgKiBwcmlvciB0byBhIHdhaXQgZm9yIGlkbGUsIGFzIGl0IGluZm9ybXMgdGhlIGVuZ2luZSB0aGF0IHRoZSBjb21tYW5kCiAgKiBzdHJlYW0gaXMgZW5kaW5nLgogICovCi1zdGF0aWMgdm9pZCByYWRlb25fZG9fY3BfZmx1c2goIGRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiApCitzdGF0aWMgdm9pZCByYWRlb25fZG9fY3BfZmx1c2goZHJtX3JhZGVvbl9wcml2YXRlX3QgKiBkZXZfcHJpdikKIHsKLQlEUk1fREVCVUcoICJcbiIgKTsKKwlEUk1fREVCVUcoIlxuIik7CiAjaWYgMAogCXUzMiB0bXA7CiAKLQl0bXAgPSBSQURFT05fUkVBRCggUkFERU9OX0NQX1JCX1dQVFIgKSB8ICgxIDw8IDMxKTsKLQlSQURFT05fV1JJVEUoIFJBREVPTl9DUF9SQl9XUFRSLCB0bXAgKTsKKwl0bXAgPSBSQURFT05fUkVBRChSQURFT05fQ1BfUkJfV1BUUikgfCAoMSA8PCAzMSk7CisJUkFERU9OX1dSSVRFKFJBREVPTl9DUF9SQl9XUFRSLCB0bXApOwogI2VuZGlmCiB9CiAKIC8qIFdhaXQgZm9yIHRoZSBDUCB0byBnbyBpZGxlLgogICovCi1pbnQgcmFkZW9uX2RvX2NwX2lkbGUoIGRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiApCitpbnQgcmFkZW9uX2RvX2NwX2lkbGUoZHJtX3JhZGVvbl9wcml2YXRlX3QgKiBkZXZfcHJpdikKIHsKIAlSSU5HX0xPQ0FMUzsKLQlEUk1fREVCVUcoICJcbiIgKTsKKwlEUk1fREVCVUcoIlxuIik7CiAKLQlCRUdJTl9SSU5HKCA2ICk7CisJQkVHSU5fUklORyg2KTsKIAogCVJBREVPTl9QVVJHRV9DQUNIRSgpOwogCVJBREVPTl9QVVJHRV9aQ0FDSEUoKTsKQEAgLTEwMDUsMjMgKzEwMDEsMjMgQEAKIAlBRFZBTkNFX1JJTkcoKTsKIAlDT01NSVRfUklORygpOwogCi0JcmV0dXJuIHJhZGVvbl9kb193YWl0X2Zvcl9pZGxlKCBkZXZfcHJpdiApOworCXJldHVybiByYWRlb25fZG9fd2FpdF9mb3JfaWRsZShkZXZfcHJpdik7CiB9CiAKIC8qIFN0YXJ0IHRoZSBDb21tYW5kIFByb2Nlc3Nvci4KICAqLwotc3RhdGljIHZvaWQgcmFkZW9uX2RvX2NwX3N0YXJ0KCBkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgKQorc3RhdGljIHZvaWQgcmFkZW9uX2RvX2NwX3N0YXJ0KGRybV9yYWRlb25fcHJpdmF0ZV90ICogZGV2X3ByaXYpCiB7CiAJUklOR19MT0NBTFM7Ci0JRFJNX0RFQlVHKCAiXG4iICk7CisJRFJNX0RFQlVHKCJcbiIpOwogCi0JcmFkZW9uX2RvX3dhaXRfZm9yX2lkbGUoIGRldl9wcml2ICk7CisJcmFkZW9uX2RvX3dhaXRfZm9yX2lkbGUoZGV2X3ByaXYpOwogCi0JUkFERU9OX1dSSVRFKCBSQURFT05fQ1BfQ1NRX0NOVEwsIGRldl9wcml2LT5jcF9tb2RlICk7CisJUkFERU9OX1dSSVRFKFJBREVPTl9DUF9DU1FfQ05UTCwgZGV2X3ByaXYtPmNwX21vZGUpOwogCiAJZGV2X3ByaXYtPmNwX3J1bm5pbmcgPSAxOwogCi0JQkVHSU5fUklORyggNiApOworCUJFR0lOX1JJTkcoNik7CiAKIAlSQURFT05fUFVSR0VfQ0FDSEUoKTsKIAlSQURFT05fUFVSR0VfWkNBQ0hFKCk7CkBAIC0xMDM1LDE0ICsxMDMxLDE0IEBACiAgKiBjb21tYW5kcywgc28geW91IG11c3Qgd2FpdCBmb3IgdGhlIENQIGNvbW1hbmQgc3RyZWFtIHRvIGNvbXBsZXRlCiAgKiBiZWZvcmUgY2FsbGluZyB0aGlzIHJvdXRpbmUuCiAgKi8KLXN0YXRpYyB2b2lkIHJhZGVvbl9kb19jcF9yZXNldCggZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ICkKK3N0YXRpYyB2b2lkIHJhZGVvbl9kb19jcF9yZXNldChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqIGRldl9wcml2KQogewogCXUzMiBjdXJfcmVhZF9wdHI7Ci0JRFJNX0RFQlVHKCAiXG4iICk7CisJRFJNX0RFQlVHKCJcbiIpOwogCi0JY3VyX3JlYWRfcHRyID0gUkFERU9OX1JFQUQoIFJBREVPTl9DUF9SQl9SUFRSICk7Ci0JUkFERU9OX1dSSVRFKCBSQURFT05fQ1BfUkJfV1BUUiwgY3VyX3JlYWRfcHRyICk7Ci0JU0VUX1JJTkdfSEVBRCggZGV2X3ByaXYsIGN1cl9yZWFkX3B0ciApOworCWN1cl9yZWFkX3B0ciA9IFJBREVPTl9SRUFEKFJBREVPTl9DUF9SQl9SUFRSKTsKKwlSQURFT05fV1JJVEUoUkFERU9OX0NQX1JCX1dQVFIsIGN1cl9yZWFkX3B0cik7CisJU0VUX1JJTkdfSEVBRChkZXZfcHJpdiwgY3VyX3JlYWRfcHRyKTsKIAlkZXZfcHJpdi0+cmluZy50YWlsID0gY3VyX3JlYWRfcHRyOwogfQogCkBAIC0xMDUwLDEyMCArMTA0NiwxMTYgQEAKICAqIGNvbW1hbmRzLCBzbyB5b3UgbXVzdCBmbHVzaCB0aGUgY29tbWFuZCBzdHJlYW0gYW5kIHdhaXQgZm9yIHRoZSBDUAogICogdG8gZ28gaWRsZSBiZWZvcmUgY2FsbGluZyB0aGlzIHJvdXRpbmUuCiAgKi8KLXN0YXRpYyB2b2lkIHJhZGVvbl9kb19jcF9zdG9wKCBkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgKQorc3RhdGljIHZvaWQgcmFkZW9uX2RvX2NwX3N0b3AoZHJtX3JhZGVvbl9wcml2YXRlX3QgKiBkZXZfcHJpdikKIHsKLQlEUk1fREVCVUcoICJcbiIgKTsKKwlEUk1fREVCVUcoIlxuIik7CiAKLQlSQURFT05fV1JJVEUoIFJBREVPTl9DUF9DU1FfQ05UTCwgUkFERU9OX0NTUV9QUklESVNfSU5ERElTICk7CisJUkFERU9OX1dSSVRFKFJBREVPTl9DUF9DU1FfQ05UTCwgUkFERU9OX0NTUV9QUklESVNfSU5ERElTKTsKIAogCWRldl9wcml2LT5jcF9ydW5uaW5nID0gMDsKIH0KIAogLyogUmVzZXQgdGhlIGVuZ2luZS4gIFRoaXMgd2lsbCBzdG9wIHRoZSBDUCBpZiBpdCBpcyBydW5uaW5nLgogICovCi1zdGF0aWMgaW50IHJhZGVvbl9kb19lbmdpbmVfcmVzZXQoIGRybV9kZXZpY2VfdCAqZGV2ICkKK3N0YXRpYyBpbnQgcmFkZW9uX2RvX2VuZ2luZV9yZXNldChkcm1fZGV2aWNlX3QgKiBkZXYpCiB7CiAJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAl1MzIgY2xvY2tfY250bF9pbmRleCwgbWNsa19jbnRsLCByYmJtX3NvZnRfcmVzZXQ7Ci0JRFJNX0RFQlVHKCAiXG4iICk7CisJRFJNX0RFQlVHKCJcbiIpOwogCi0JcmFkZW9uX2RvX3BpeGNhY2hlX2ZsdXNoKCBkZXZfcHJpdiApOworCXJhZGVvbl9kb19waXhjYWNoZV9mbHVzaChkZXZfcHJpdik7CiAKLQljbG9ja19jbnRsX2luZGV4ID0gUkFERU9OX1JFQUQoIFJBREVPTl9DTE9DS19DTlRMX0lOREVYICk7Ci0JbWNsa19jbnRsID0gUkFERU9OX1JFQURfUExMKCBkZXYsIFJBREVPTl9NQ0xLX0NOVEwgKTsKKwljbG9ja19jbnRsX2luZGV4ID0gUkFERU9OX1JFQUQoUkFERU9OX0NMT0NLX0NOVExfSU5ERVgpOworCW1jbGtfY250bCA9IFJBREVPTl9SRUFEX1BMTChkZXYsIFJBREVPTl9NQ0xLX0NOVEwpOwogCi0JUkFERU9OX1dSSVRFX1BMTCggUkFERU9OX01DTEtfQ05UTCwgKCBtY2xrX2NudGwgfAotCQkJCQkgICAgICBSQURFT05fRk9SQ0VPTl9NQ0xLQSB8Ci0JCQkJCSAgICAgIFJBREVPTl9GT1JDRU9OX01DTEtCIHwKLSAJCQkJCSAgICAgIFJBREVPTl9GT1JDRU9OX1lDTEtBIHwKLQkJCQkJICAgICAgUkFERU9OX0ZPUkNFT05fWUNMS0IgfAotCQkJCQkgICAgICBSQURFT05fRk9SQ0VPTl9NQyB8Ci0JCQkJCSAgICAgIFJBREVPTl9GT1JDRU9OX0FJQyApICk7CisJUkFERU9OX1dSSVRFX1BMTChSQURFT05fTUNMS19DTlRMLCAobWNsa19jbnRsIHwKKwkJCQkJICAgIFJBREVPTl9GT1JDRU9OX01DTEtBIHwKKwkJCQkJICAgIFJBREVPTl9GT1JDRU9OX01DTEtCIHwKKwkJCQkJICAgIFJBREVPTl9GT1JDRU9OX1lDTEtBIHwKKwkJCQkJICAgIFJBREVPTl9GT1JDRU9OX1lDTEtCIHwKKwkJCQkJICAgIFJBREVPTl9GT1JDRU9OX01DIHwKKwkJCQkJICAgIFJBREVPTl9GT1JDRU9OX0FJQykpOwogCi0JcmJibV9zb2Z0X3Jlc2V0ID0gUkFERU9OX1JFQUQoIFJBREVPTl9SQkJNX1NPRlRfUkVTRVQgKTsKKwlyYmJtX3NvZnRfcmVzZXQgPSBSQURFT05fUkVBRChSQURFT05fUkJCTV9TT0ZUX1JFU0VUKTsKIAotCVJBREVPTl9XUklURSggUkFERU9OX1JCQk1fU09GVF9SRVNFVCwgKCByYmJtX3NvZnRfcmVzZXQgfAotCQkJCQkJUkFERU9OX1NPRlRfUkVTRVRfQ1AgfAorCVJBREVPTl9XUklURShSQURFT05fUkJCTV9TT0ZUX1JFU0VULCAocmJibV9zb2Z0X3Jlc2V0IHwKKwkJCQkJICAgICAgUkFERU9OX1NPRlRfUkVTRVRfQ1AgfAorCQkJCQkgICAgICBSQURFT05fU09GVF9SRVNFVF9ISSB8CisJCQkJCSAgICAgIFJBREVPTl9TT0ZUX1JFU0VUX1NFIHwKKwkJCQkJICAgICAgUkFERU9OX1NPRlRfUkVTRVRfUkUgfAorCQkJCQkgICAgICBSQURFT05fU09GVF9SRVNFVF9QUCB8CisJCQkJCSAgICAgIFJBREVPTl9TT0ZUX1JFU0VUX0UyIHwKKwkJCQkJICAgICAgUkFERU9OX1NPRlRfUkVTRVRfUkIpKTsKKwlSQURFT05fUkVBRChSQURFT05fUkJCTV9TT0ZUX1JFU0VUKTsKKwlSQURFT05fV1JJVEUoUkFERU9OX1JCQk1fU09GVF9SRVNFVCwgKHJiYm1fc29mdF9yZXNldCAmCisJCQkJCSAgICAgIH4oUkFERU9OX1NPRlRfUkVTRVRfQ1AgfAogCQkJCQkJUkFERU9OX1NPRlRfUkVTRVRfSEkgfAogCQkJCQkJUkFERU9OX1NPRlRfUkVTRVRfU0UgfAogCQkJCQkJUkFERU9OX1NPRlRfUkVTRVRfUkUgfAogCQkJCQkJUkFERU9OX1NPRlRfUkVTRVRfUFAgfAogCQkJCQkJUkFERU9OX1NPRlRfUkVTRVRfRTIgfAotCQkJCQkJUkFERU9OX1NPRlRfUkVTRVRfUkIgKSApOwotCVJBREVPTl9SRUFEKCBSQURFT05fUkJCTV9TT0ZUX1JFU0VUICk7Ci0JUkFERU9OX1dSSVRFKCBSQURFT05fUkJCTV9TT0ZUX1JFU0VULCAoIHJiYm1fc29mdF9yZXNldCAmCi0JCQkJCQl+KCBSQURFT05fU09GVF9SRVNFVF9DUCB8Ci0JCQkJCQkgICBSQURFT05fU09GVF9SRVNFVF9ISSB8Ci0JCQkJCQkgICBSQURFT05fU09GVF9SRVNFVF9TRSB8Ci0JCQkJCQkgICBSQURFT05fU09GVF9SRVNFVF9SRSB8Ci0JCQkJCQkgICBSQURFT05fU09GVF9SRVNFVF9QUCB8Ci0JCQkJCQkgICBSQURFT05fU09GVF9SRVNFVF9FMiB8Ci0JCQkJCQkgICBSQURFT05fU09GVF9SRVNFVF9SQiApICkgKTsKLQlSQURFT05fUkVBRCggUkFERU9OX1JCQk1fU09GVF9SRVNFVCApOworCQkJCQkJUkFERU9OX1NPRlRfUkVTRVRfUkIpKSk7CisJUkFERU9OX1JFQUQoUkFERU9OX1JCQk1fU09GVF9SRVNFVCk7CiAKLQotCVJBREVPTl9XUklURV9QTEwoIFJBREVPTl9NQ0xLX0NOVEwsIG1jbGtfY250bCApOwotCVJBREVPTl9XUklURSggUkFERU9OX0NMT0NLX0NOVExfSU5ERVgsIGNsb2NrX2NudGxfaW5kZXggKTsKLQlSQURFT05fV1JJVEUoIFJBREVPTl9SQkJNX1NPRlRfUkVTRVQsICByYmJtX3NvZnRfcmVzZXQgKTsKKwlSQURFT05fV1JJVEVfUExMKFJBREVPTl9NQ0xLX0NOVEwsIG1jbGtfY250bCk7CisJUkFERU9OX1dSSVRFKFJBREVPTl9DTE9DS19DTlRMX0lOREVYLCBjbG9ja19jbnRsX2luZGV4KTsKKwlSQURFT05fV1JJVEUoUkFERU9OX1JCQk1fU09GVF9SRVNFVCwgcmJibV9zb2Z0X3Jlc2V0KTsKIAogCS8qIFJlc2V0IHRoZSBDUCByaW5nICovCi0JcmFkZW9uX2RvX2NwX3Jlc2V0KCBkZXZfcHJpdiApOworCXJhZGVvbl9kb19jcF9yZXNldChkZXZfcHJpdik7CiAKIAkvKiBUaGUgQ1AgaXMgbm8gbG9uZ2VyIHJ1bm5pbmcgYWZ0ZXIgYW4gZW5naW5lIHJlc2V0ICovCiAJZGV2X3ByaXYtPmNwX3J1bm5pbmcgPSAwOwogCiAJLyogUmVzZXQgYW55IHBlbmRpbmcgdmVydGV4LCBpbmRpcmVjdCBidWZmZXJzICovCi0JcmFkZW9uX2ZyZWVsaXN0X3Jlc2V0KCBkZXYgKTsKKwlyYWRlb25fZnJlZWxpc3RfcmVzZXQoZGV2KTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCByYWRlb25fY3BfaW5pdF9yaW5nX2J1ZmZlciggZHJtX2RldmljZV90ICpkZXYsCi0JCQkJICAgICAgICBkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgKQorc3RhdGljIHZvaWQgcmFkZW9uX2NwX2luaXRfcmluZ19idWZmZXIoZHJtX2RldmljZV90ICogZGV2LAorCQkJCSAgICAgICBkcm1fcmFkZW9uX3ByaXZhdGVfdCAqIGRldl9wcml2KQogewogCXUzMiByaW5nX3N0YXJ0LCBjdXJfcmVhZF9wdHI7CiAJdTMyIHRtcDsKIAogCS8qIEluaXRpYWxpemUgdGhlIG1lbW9yeSBjb250cm9sbGVyICovCi0JUkFERU9OX1dSSVRFKCBSQURFT05fTUNfRkJfTE9DQVRJT04sCi0JCSAgICAgICggKCBkZXZfcHJpdi0+Z2FydF92bV9zdGFydCAtIDEgKSAmIDB4ZmZmZjAwMDAgKQotCQkgICAgfCAoIGRldl9wcml2LT5mYl9sb2NhdGlvbiA+PiAxNiApICk7CisJUkFERU9OX1dSSVRFKFJBREVPTl9NQ19GQl9MT0NBVElPTiwKKwkJICAgICAoKGRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0IC0gMSkgJiAweGZmZmYwMDAwKQorCQkgICAgIHwgKGRldl9wcml2LT5mYl9sb2NhdGlvbiA+PiAxNikpOwogCiAjaWYgX19PU19IQVNfQUdQCi0JaWYgKCAhZGV2X3ByaXYtPmlzX3BjaSApIHsKLQkJUkFERU9OX1dSSVRFKCBSQURFT05fTUNfQUdQX0xPQ0FUSU9OLAotCQkJICAgICAgKCgoZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQgLSAxICsKLQkJCQkgZGV2X3ByaXYtPmdhcnRfc2l6ZSkgJiAweGZmZmYwMDAwKSB8Ci0JCQkgICAgICAgKGRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0ID4+IDE2KSkgKTsKKwlpZiAoIWRldl9wcml2LT5pc19wY2kpIHsKKwkJUkFERU9OX1dSSVRFKFJBREVPTl9NQ19BR1BfTE9DQVRJT04sCisJCQkgICAgICgoKGRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0IC0gMSArCisJCQkJZGV2X3ByaXYtPmdhcnRfc2l6ZSkgJiAweGZmZmYwMDAwKSB8CisJCQkgICAgICAoZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQgPj4gMTYpKSk7CiAKIAkJcmluZ19zdGFydCA9IChkZXZfcHJpdi0+Y3BfcmluZy0+b2Zmc2V0Ci0JCQkgICAgICAtIGRldi0+YWdwLT5iYXNlCi0JCQkgICAgICArIGRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0KTsKLSAgICAgICB9IGVsc2UKKwkJCSAgICAgIC0gZGV2LT5hZ3AtPmJhc2UgKyBkZXZfcHJpdi0+Z2FydF92bV9zdGFydCk7CisJfSBlbHNlCiAjZW5kaWYKIAkJcmluZ19zdGFydCA9IChkZXZfcHJpdi0+Y3BfcmluZy0+b2Zmc2V0Ci0JCQkgICAgICAtIGRldi0+c2ctPmhhbmRsZQotCQkJICAgICAgKyBkZXZfcHJpdi0+Z2FydF92bV9zdGFydCk7CisJCQkgICAgICAtIGRldi0+c2ctPmhhbmRsZSArIGRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0KTsKIAotCVJBREVPTl9XUklURSggUkFERU9OX0NQX1JCX0JBU0UsIHJpbmdfc3RhcnQgKTsKKwlSQURFT05fV1JJVEUoUkFERU9OX0NQX1JCX0JBU0UsIHJpbmdfc3RhcnQpOwogCiAJLyogU2V0IHRoZSB3cml0ZSBwb2ludGVyIGRlbGF5ICovCi0JUkFERU9OX1dSSVRFKCBSQURFT05fQ1BfUkJfV1BUUl9ERUxBWSwgMCApOworCVJBREVPTl9XUklURShSQURFT05fQ1BfUkJfV1BUUl9ERUxBWSwgMCk7CiAKIAkvKiBJbml0aWFsaXplIHRoZSByaW5nIGJ1ZmZlcidzIHJlYWQgYW5kIHdyaXRlIHBvaW50ZXJzICovCi0JY3VyX3JlYWRfcHRyID0gUkFERU9OX1JFQUQoIFJBREVPTl9DUF9SQl9SUFRSICk7Ci0JUkFERU9OX1dSSVRFKCBSQURFT05fQ1BfUkJfV1BUUiwgY3VyX3JlYWRfcHRyICk7Ci0JU0VUX1JJTkdfSEVBRCggZGV2X3ByaXYsIGN1cl9yZWFkX3B0ciApOworCWN1cl9yZWFkX3B0ciA9IFJBREVPTl9SRUFEKFJBREVPTl9DUF9SQl9SUFRSKTsKKwlSQURFT05fV1JJVEUoUkFERU9OX0NQX1JCX1dQVFIsIGN1cl9yZWFkX3B0cik7CisJU0VUX1JJTkdfSEVBRChkZXZfcHJpdiwgY3VyX3JlYWRfcHRyKTsKIAlkZXZfcHJpdi0+cmluZy50YWlsID0gY3VyX3JlYWRfcHRyOwogCiAjaWYgX19PU19IQVNfQUdQCi0JaWYgKCAhZGV2X3ByaXYtPmlzX3BjaSApIHsKKwlpZiAoIWRldl9wcml2LT5pc19wY2kpIHsKIAkJLyogc2V0IFJBREVPTl9BR1BfQkFTRSBoZXJlIGluc3RlYWQgb2YgcmVseWluZyBvbiBYIGZyb20gdXNlciBzcGFjZSAqLwogCQlSQURFT05fV1JJVEUoUkFERU9OX0FHUF9CQVNFLCAodW5zaWduZWQgaW50KWRldi0+YWdwLT5iYXNlKTsKLQkJUkFERU9OX1dSSVRFKCBSQURFT05fQ1BfUkJfUlBUUl9BRERSLAotCQkJICAgICAgZGV2X3ByaXYtPnJpbmdfcnB0ci0+b2Zmc2V0Ci0JCQkgICAgICAtIGRldi0+YWdwLT5iYXNlCi0JCQkgICAgICArIGRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0KTsKKwkJUkFERU9OX1dSSVRFKFJBREVPTl9DUF9SQl9SUFRSX0FERFIsCisJCQkgICAgIGRldl9wcml2LT5yaW5nX3JwdHItPm9mZnNldAorCQkJICAgICAtIGRldi0+YWdwLT5iYXNlICsgZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQpOwogCX0gZWxzZQogI2VuZGlmCiAJewpAQCAtMTE3MywxMSArMTE2NSwxMCBAQAogCQl0bXBfb2ZzID0gZGV2X3ByaXYtPnJpbmdfcnB0ci0+b2Zmc2V0IC0gZGV2LT5zZy0+aGFuZGxlOwogCQlwYWdlX29mcyA9IHRtcF9vZnMgPj4gUEFHRV9TSElGVDsKIAotCQlSQURFT05fV1JJVEUoIFJBREVPTl9DUF9SQl9SUFRSX0FERFIsCi0JCQkgICAgIGVudHJ5LT5idXNhZGRyW3BhZ2Vfb2ZzXSk7Ci0JCURSTV9ERUJVRyggInJpbmcgcnB0cjogb2Zmc2V0PTB4JTA4bHggaGFuZGxlPTB4JTA4bHhcbiIsCi0JCQkgICAodW5zaWduZWQgbG9uZykgZW50cnktPmJ1c2FkZHJbcGFnZV9vZnNdLAotCQkJICAgZW50cnktPmhhbmRsZSArIHRtcF9vZnMgKTsKKwkJUkFERU9OX1dSSVRFKFJBREVPTl9DUF9SQl9SUFRSX0FERFIsIGVudHJ5LT5idXNhZGRyW3BhZ2Vfb2ZzXSk7CisJCURSTV9ERUJVRygicmluZyBycHRyOiBvZmZzZXQ9MHglMDhseCBoYW5kbGU9MHglMDhseFxuIiwKKwkJCSAgKHVuc2lnbmVkIGxvbmcpZW50cnktPmJ1c2FkZHJbcGFnZV9vZnNdLAorCQkJICBlbnRyeS0+aGFuZGxlICsgdG1wX29mcyk7CiAJfQogCiAJLyogSW5pdGlhbGl6ZSB0aGUgc2NyYXRjaCByZWdpc3RlciBwb2ludGVyLiAgVGhpcyB3aWxsIGNhdXNlCkBAIC0xMTg3LDY0ICsxMTc4LDY0IEBACiAJICogV2Ugc2ltcGx5IHB1dCB0aGlzIGJlaGluZCB0aGUgcmluZyByZWFkIHBvaW50ZXIsIHRoaXMgd29ya3MKIAkgKiB3aXRoIFBDSSBHQVJUIGFzIHdlbGwgYXMgKHdoYXRldmVyIGtpbmQgb2YpIEFHUCBHQVJUCiAJICovCi0JUkFERU9OX1dSSVRFKCBSQURFT05fU0NSQVRDSF9BRERSLCBSQURFT05fUkVBRCggUkFERU9OX0NQX1JCX1JQVFJfQUREUiApCi0JCQkJCSArIFJBREVPTl9TQ1JBVENIX1JFR19PRkZTRVQgKTsKKwlSQURFT05fV1JJVEUoUkFERU9OX1NDUkFUQ0hfQUREUiwgUkFERU9OX1JFQUQoUkFERU9OX0NQX1JCX1JQVFJfQUREUikKKwkJICAgICArIFJBREVPTl9TQ1JBVENIX1JFR19PRkZTRVQpOwogCiAJZGV2X3ByaXYtPnNjcmF0Y2ggPSAoKF9fdm9sYXRpbGVfXyB1MzIgKikKIAkJCSAgICAgZGV2X3ByaXYtPnJpbmdfcnB0ci0+aGFuZGxlICsKIAkJCSAgICAgKFJBREVPTl9TQ1JBVENIX1JFR19PRkZTRVQgLyBzaXplb2YodTMyKSkpOwogCi0JUkFERU9OX1dSSVRFKCBSQURFT05fU0NSQVRDSF9VTVNLLCAweDcgKTsKKwlSQURFT05fV1JJVEUoUkFERU9OX1NDUkFUQ0hfVU1TSywgMHg3KTsKIAogCS8qIFdyaXRlYmFjayBkb2Vzbid0IHNlZW0gdG8gd29yayBldmVyeXdoZXJlLCB0ZXN0IGl0IGZpcnN0ICovCi0JRFJNX1dSSVRFMzIoIGRldl9wcml2LT5yaW5nX3JwdHIsIFJBREVPTl9TQ1JBVENIT0ZGKDEpLCAwICk7Ci0JUkFERU9OX1dSSVRFKCBSQURFT05fU0NSQVRDSF9SRUcxLCAweGRlYWRiZWVmICk7CisJRFJNX1dSSVRFMzIoZGV2X3ByaXYtPnJpbmdfcnB0ciwgUkFERU9OX1NDUkFUQ0hPRkYoMSksIDApOworCVJBREVPTl9XUklURShSQURFT05fU0NSQVRDSF9SRUcxLCAweGRlYWRiZWVmKTsKIAotCWZvciAoIHRtcCA9IDAgOyB0bXAgPCBkZXZfcHJpdi0+dXNlY190aW1lb3V0IDsgdG1wKysgKSB7Ci0JCWlmICggRFJNX1JFQUQzMiggZGV2X3ByaXYtPnJpbmdfcnB0ciwgUkFERU9OX1NDUkFUQ0hPRkYoMSkgKSA9PSAweGRlYWRiZWVmICkKKwlmb3IgKHRtcCA9IDA7IHRtcCA8IGRldl9wcml2LT51c2VjX3RpbWVvdXQ7IHRtcCsrKSB7CisJCWlmIChEUk1fUkVBRDMyKGRldl9wcml2LT5yaW5nX3JwdHIsIFJBREVPTl9TQ1JBVENIT0ZGKDEpKSA9PQorCQkgICAgMHhkZWFkYmVlZikKIAkJCWJyZWFrOwotCQlEUk1fVURFTEFZKCAxICk7CisJCURSTV9VREVMQVkoMSk7CiAJfQogCi0JaWYgKCB0bXAgPCBkZXZfcHJpdi0+dXNlY190aW1lb3V0ICkgeworCWlmICh0bXAgPCBkZXZfcHJpdi0+dXNlY190aW1lb3V0KSB7CiAJCWRldl9wcml2LT53cml0ZWJhY2tfd29ya3MgPSAxOwotCQlEUk1fREVCVUcoICJ3cml0ZWJhY2sgdGVzdCBzdWNjZWVkZWQsIHRtcD0lZFxuIiwgdG1wICk7CisJCURSTV9ERUJVRygid3JpdGViYWNrIHRlc3Qgc3VjY2VlZGVkLCB0bXA9JWRcbiIsIHRtcCk7CiAJfSBlbHNlIHsKIAkJZGV2X3ByaXYtPndyaXRlYmFja193b3JrcyA9IDA7Ci0JCURSTV9ERUJVRyggIndyaXRlYmFjayB0ZXN0IGZhaWxlZFxuIiApOworCQlEUk1fREVCVUcoIndyaXRlYmFjayB0ZXN0IGZhaWxlZFxuIik7CiAJfQogCiAJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZnJhbWUgPSBkZXZfcHJpdi0+c2NyYXRjaFswXSA9IDA7Ci0JUkFERU9OX1dSSVRFKCBSQURFT05fTEFTVF9GUkFNRV9SRUcsCi0JCSAgICAgIGRldl9wcml2LT5zYXJlYV9wcml2LT5sYXN0X2ZyYW1lICk7CisJUkFERU9OX1dSSVRFKFJBREVPTl9MQVNUX0ZSQU1FX1JFRywgZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZnJhbWUpOwogCiAJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZGlzcGF0Y2ggPSBkZXZfcHJpdi0+c2NyYXRjaFsxXSA9IDA7Ci0JUkFERU9OX1dSSVRFKCBSQURFT05fTEFTVF9ESVNQQVRDSF9SRUcsCi0JCSAgICAgIGRldl9wcml2LT5zYXJlYV9wcml2LT5sYXN0X2Rpc3BhdGNoICk7CisJUkFERU9OX1dSSVRFKFJBREVPTl9MQVNUX0RJU1BBVENIX1JFRywKKwkJICAgICBkZXZfcHJpdi0+c2FyZWFfcHJpdi0+bGFzdF9kaXNwYXRjaCk7CiAKIAlkZXZfcHJpdi0+c2FyZWFfcHJpdi0+bGFzdF9jbGVhciA9IGRldl9wcml2LT5zY3JhdGNoWzJdID0gMDsKLQlSQURFT05fV1JJVEUoIFJBREVPTl9MQVNUX0NMRUFSX1JFRywKLQkJICAgICAgZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfY2xlYXIgKTsKKwlSQURFT05fV1JJVEUoUkFERU9OX0xBU1RfQ0xFQVJfUkVHLCBkZXZfcHJpdi0+c2FyZWFfcHJpdi0+bGFzdF9jbGVhcik7CiAKIAkvKiBTZXQgcmluZyBidWZmZXIgc2l6ZSAqLwogI2lmZGVmIF9fQklHX0VORElBTgotCVJBREVPTl9XUklURSggUkFERU9OX0NQX1JCX0NOVEwsIGRldl9wcml2LT5yaW5nLnNpemVfbDJxdyB8IFJBREVPTl9CVUZfU1dBUF8zMkJJVCApOworCVJBREVPTl9XUklURShSQURFT05fQ1BfUkJfQ05UTCwKKwkJICAgICBkZXZfcHJpdi0+cmluZy5zaXplX2wycXcgfCBSQURFT05fQlVGX1NXQVBfMzJCSVQpOwogI2Vsc2UKLQlSQURFT05fV1JJVEUoIFJBREVPTl9DUF9SQl9DTlRMLCBkZXZfcHJpdi0+cmluZy5zaXplX2wycXcgKTsKKwlSQURFT05fV1JJVEUoUkFERU9OX0NQX1JCX0NOVEwsIGRldl9wcml2LT5yaW5nLnNpemVfbDJxdyk7CiAjZW5kaWYKIAotCXJhZGVvbl9kb193YWl0X2Zvcl9pZGxlKCBkZXZfcHJpdiApOworCXJhZGVvbl9kb193YWl0X2Zvcl9pZGxlKGRldl9wcml2KTsKIAogCS8qIFR1cm4gb24gYnVzIG1hc3RlcmluZyAqLwotCXRtcCA9IFJBREVPTl9SRUFEKCBSQURFT05fQlVTX0NOVEwgKSAmIH5SQURFT05fQlVTX01BU1RFUl9ESVM7Ci0JUkFERU9OX1dSSVRFKCBSQURFT05fQlVTX0NOVEwsIHRtcCApOworCXRtcCA9IFJBREVPTl9SRUFEKFJBREVPTl9CVVNfQ05UTCkgJiB+UkFERU9OX0JVU19NQVNURVJfRElTOworCVJBREVPTl9XUklURShSQURFT05fQlVTX0NOVEwsIHRtcCk7CiAKIAkvKiBTeW5jIGV2ZXJ5dGhpbmcgdXAgKi8KLQlSQURFT05fV1JJVEUoIFJBREVPTl9JU1lOQ19DTlRMLAotCQkgICAgICAoUkFERU9OX0lTWU5DX0FOWTJEX0lETEUzRCB8Ci0JCSAgICAgICBSQURFT05fSVNZTkNfQU5ZM0RfSURMRTJEIHwKLQkJICAgICAgIFJBREVPTl9JU1lOQ19XQUlUX0lETEVHVUkgfAotCQkgICAgICAgUkFERU9OX0lTWU5DX0NQU0NSQVRDSF9JRExFR1VJKSApOworCVJBREVPTl9XUklURShSQURFT05fSVNZTkNfQ05UTCwKKwkJICAgICAoUkFERU9OX0lTWU5DX0FOWTJEX0lETEUzRCB8CisJCSAgICAgIFJBREVPTl9JU1lOQ19BTlkzRF9JRExFMkQgfAorCQkgICAgICBSQURFT05fSVNZTkNfV0FJVF9JRExFR1VJIHwKKwkJICAgICAgUkFERU9OX0lTWU5DX0NQU0NSQVRDSF9JRExFR1VJKSk7CiB9CiAKIC8qIEVuYWJsZSBvciBkaXNhYmxlIFBDSS1FIEdBUlQgb24gdGhlIGNoaXAgKi8KQEAgLTEyNTQsMzUgKzEyNDUsNDIgQEAKIAlpZiAob24pIHsKIAogCQlEUk1fREVCVUcoInByb2dyYW1taW5nIHBjaWUgJTA4WCAlMDhsWCAlMDhYXG4iLAotCQkJICBkZXZfcHJpdi0+Z2FydF92bV9zdGFydCwgKGxvbmcpZGV2X3ByaXYtPmdhcnRfaW5mby5idXNfYWRkciwKKwkJCSAgZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQsCisJCQkgIChsb25nKWRldl9wcml2LT5nYXJ0X2luZm8uYnVzX2FkZHIsCiAJCQkgIGRldl9wcml2LT5nYXJ0X3NpemUpOwotCQlSQURFT05fV1JJVEVfUENJRShSQURFT05fUENJRV9UWF9ESVNDQVJEX1JEX0FERFJfTE8sIGRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0KTsKLQkJUkFERU9OX1dSSVRFX1BDSUUoUkFERU9OX1BDSUVfVFhfR0FSVF9CQVNFLCBkZXZfcHJpdi0+Z2FydF9pbmZvLmJ1c19hZGRyKTsKLQkJUkFERU9OX1dSSVRFX1BDSUUoUkFERU9OX1BDSUVfVFhfR0FSVF9TVEFSVF9MTywgZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQpOwotCQlSQURFT05fV1JJVEVfUENJRShSQURFT05fUENJRV9UWF9HQVJUX0VORF9MTywgZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQKLQkJCQkgICsgZGV2X3ByaXYtPmdhcnRfc2l6ZSAtIDEpOwotCQkKKwkJUkFERU9OX1dSSVRFX1BDSUUoUkFERU9OX1BDSUVfVFhfRElTQ0FSRF9SRF9BRERSX0xPLAorCQkJCSAgZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQpOworCQlSQURFT05fV1JJVEVfUENJRShSQURFT05fUENJRV9UWF9HQVJUX0JBU0UsCisJCQkJICBkZXZfcHJpdi0+Z2FydF9pbmZvLmJ1c19hZGRyKTsKKwkJUkFERU9OX1dSSVRFX1BDSUUoUkFERU9OX1BDSUVfVFhfR0FSVF9TVEFSVF9MTywKKwkJCQkgIGRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0KTsKKwkJUkFERU9OX1dSSVRFX1BDSUUoUkFERU9OX1BDSUVfVFhfR0FSVF9FTkRfTE8sCisJCQkJICBkZXZfcHJpdi0+Z2FydF92bV9zdGFydCArCisJCQkJICBkZXZfcHJpdi0+Z2FydF9zaXplIC0gMSk7CisKIAkJUkFERU9OX1dSSVRFKFJBREVPTl9NQ19BR1BfTE9DQVRJT04sIDB4ZmZmZmZmYzApOwkvKiA/PyAqLwotCQkKLQkJUkFERU9OX1dSSVRFX1BDSUUoUkFERU9OX1BDSUVfVFhfR0FSVF9DTlRMLCBSQURFT05fUENJRV9UWF9HQVJUX0VOKTsKKworCQlSQURFT05fV1JJVEVfUENJRShSQURFT05fUENJRV9UWF9HQVJUX0NOVEwsCisJCQkJICBSQURFT05fUENJRV9UWF9HQVJUX0VOKTsKIAl9IGVsc2UgewotCQlSQURFT05fV1JJVEVfUENJRShSQURFT05fUENJRV9UWF9HQVJUX0NOVEwsIHRtcCAmIH5SQURFT05fUENJRV9UWF9HQVJUX0VOKTsKKwkJUkFERU9OX1dSSVRFX1BDSUUoUkFERU9OX1BDSUVfVFhfR0FSVF9DTlRMLAorCQkJCSAgdG1wICYgflJBREVPTl9QQ0lFX1RYX0dBUlRfRU4pOwogCX0KIH0KIAogLyogRW5hYmxlIG9yIGRpc2FibGUgUENJIEdBUlQgb24gdGhlIGNoaXAgKi8KLXN0YXRpYyB2b2lkIHJhZGVvbl9zZXRfcGNpZ2FydCggZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2LCBpbnQgb24gKQorc3RhdGljIHZvaWQgcmFkZW9uX3NldF9wY2lnYXJ0KGRybV9yYWRlb25fcHJpdmF0ZV90ICogZGV2X3ByaXYsIGludCBvbikKIHsKLQl1MzIgdG1wCT0gUkFERU9OX1JFQUQoIFJBREVPTl9BSUNfQ05UTCApOworCXUzMiB0bXAgPSBSQURFT05fUkVBRChSQURFT05fQUlDX0NOVEwpOwogCi0JaWYgKGRldl9wcml2LT5mbGFncyAmIENISVBfSVNfUENJRSkKLQl7CisJaWYgKGRldl9wcml2LT5mbGFncyAmIENISVBfSVNfUENJRSkgewogCQlyYWRlb25fc2V0X3BjaWVnYXJ0KGRldl9wcml2LCBvbik7CiAJCXJldHVybjsKIAl9CiAKLQlpZiAoIG9uICkgewotCQlSQURFT05fV1JJVEUoIFJBREVPTl9BSUNfQ05UTCwgdG1wIHwgUkFERU9OX1BDSUdBUlRfVFJBTlNMQVRFX0VOICk7CisJaWYgKG9uKSB7CisJCVJBREVPTl9XUklURShSQURFT05fQUlDX0NOVEwsCisJCQkgICAgIHRtcCB8IFJBREVPTl9QQ0lHQVJUX1RSQU5TTEFURV9FTik7CiAKIAkJLyogc2V0IFBDSSBHQVJUIHBhZ2UtdGFibGUgYmFzZSBhZGRyZXNzCiAJCSAqLwpAQCAtMTI5MCw1MyArMTI4OCw1NCBAQAogCiAJCS8qIHNldCBhZGRyZXNzIHJhbmdlIGZvciBQQ0kgYWRkcmVzcyB0cmFuc2xhdGUKIAkJICovCi0JCVJBREVPTl9XUklURSggUkFERU9OX0FJQ19MT19BRERSLCBkZXZfcHJpdi0+Z2FydF92bV9zdGFydCApOwotCQlSQURFT05fV1JJVEUoIFJBREVPTl9BSUNfSElfQUREUiwgZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQKLQkJCQkJCSAgKyBkZXZfcHJpdi0+Z2FydF9zaXplIC0gMSk7CisJCVJBREVPTl9XUklURShSQURFT05fQUlDX0xPX0FERFIsIGRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0KTsKKwkJUkFERU9OX1dSSVRFKFJBREVPTl9BSUNfSElfQUREUiwgZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQKKwkJCSAgICAgKyBkZXZfcHJpdi0+Z2FydF9zaXplIC0gMSk7CiAKIAkJLyogVHVybiBvZmYgQUdQIGFwZXJ0dXJlIC0tIGlzIHRoaXMgcmVxdWlyZWQgZm9yIFBDSSBHQVJUPwogCQkgKi8KLQkJUkFERU9OX1dSSVRFKCBSQURFT05fTUNfQUdQX0xPQ0FUSU9OLCAweGZmZmZmZmMwICk7IC8qID8/ICovCi0JCVJBREVPTl9XUklURSggUkFERU9OX0FHUF9DT01NQU5ELCAwICk7IC8qIGNsZWFyIEFHUF9DT01NQU5EICovCisJCVJBREVPTl9XUklURShSQURFT05fTUNfQUdQX0xPQ0FUSU9OLCAweGZmZmZmZmMwKTsJLyogPz8gKi8KKwkJUkFERU9OX1dSSVRFKFJBREVPTl9BR1BfQ09NTUFORCwgMCk7CS8qIGNsZWFyIEFHUF9DT01NQU5EICovCiAJfSBlbHNlIHsKLQkJUkFERU9OX1dSSVRFKCBSQURFT05fQUlDX0NOVEwsIHRtcCAmIH5SQURFT05fUENJR0FSVF9UUkFOU0xBVEVfRU4gKTsKKwkJUkFERU9OX1dSSVRFKFJBREVPTl9BSUNfQ05UTCwKKwkJCSAgICAgdG1wICYgflJBREVPTl9QQ0lHQVJUX1RSQU5TTEFURV9FTik7CiAJfQogfQogCi1zdGF0aWMgaW50IHJhZGVvbl9kb19pbml0X2NwKCBkcm1fZGV2aWNlX3QgKmRldiwgZHJtX3JhZGVvbl9pbml0X3QgKmluaXQgKQorc3RhdGljIGludCByYWRlb25fZG9faW5pdF9jcChkcm1fZGV2aWNlX3QgKiBkZXYsIGRybV9yYWRlb25faW5pdF90ICogaW5pdCkKIHsKIAlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOzsKLQlEUk1fREVCVUcoICJcbiIgKTsKKwlEUk1fREVCVUcoIlxuIik7CiAKIAlkZXZfcHJpdi0+aXNfcGNpID0gaW5pdC0+aXNfcGNpOwogCi0JaWYgKCBkZXZfcHJpdi0+aXNfcGNpICYmICFkZXYtPnNnICkgewotCQlEUk1fRVJST1IoICJQQ0kgR0FSVCBtZW1vcnkgbm90IGFsbG9jYXRlZCFcbiIgKTsKKwlpZiAoZGV2X3ByaXYtPmlzX3BjaSAmJiAhZGV2LT5zZykgeworCQlEUk1fRVJST1IoIlBDSSBHQVJUIG1lbW9yeSBub3QgYWxsb2NhdGVkIVxuIik7CiAJCWRldi0+ZGV2X3ByaXZhdGUgPSAodm9pZCAqKWRldl9wcml2OwogCQlyYWRlb25fZG9fY2xlYW51cF9jcChkZXYpOwogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCX0KIAogCWRldl9wcml2LT51c2VjX3RpbWVvdXQgPSBpbml0LT51c2VjX3RpbWVvdXQ7Ci0JaWYgKCBkZXZfcHJpdi0+dXNlY190aW1lb3V0IDwgMSB8fAotCSAgICAgZGV2X3ByaXYtPnVzZWNfdGltZW91dCA+IFJBREVPTl9NQVhfVVNFQ19USU1FT1VUICkgewotCQlEUk1fREVCVUcoICJUSU1FT1VUIHByb2JsZW0hXG4iICk7CisJaWYgKGRldl9wcml2LT51c2VjX3RpbWVvdXQgPCAxIHx8CisJICAgIGRldl9wcml2LT51c2VjX3RpbWVvdXQgPiBSQURFT05fTUFYX1VTRUNfVElNRU9VVCkgeworCQlEUk1fREVCVUcoIlRJTUVPVVQgcHJvYmxlbSFcbiIpOwogCQlkZXYtPmRldl9wcml2YXRlID0gKHZvaWQgKilkZXZfcHJpdjsKIAkJcmFkZW9uX2RvX2NsZWFudXBfY3AoZGV2KTsKIAkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAl9CiAKLQlzd2l0Y2goaW5pdC0+ZnVuYykgeworCXN3aXRjaCAoaW5pdC0+ZnVuYykgewogCWNhc2UgUkFERU9OX0lOSVRfUjIwMF9DUDoKLQkJZGV2X3ByaXYtPm1pY3JvY29kZV92ZXJzaW9uPVVDT0RFX1IyMDA7CisJCWRldl9wcml2LT5taWNyb2NvZGVfdmVyc2lvbiA9IFVDT0RFX1IyMDA7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX0lOSVRfUjMwMF9DUDoKLQkJZGV2X3ByaXYtPm1pY3JvY29kZV92ZXJzaW9uPVVDT0RFX1IzMDA7CisJCWRldl9wcml2LT5taWNyb2NvZGVfdmVyc2lvbiA9IFVDT0RFX1IzMDA7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWRldl9wcml2LT5taWNyb2NvZGVfdmVyc2lvbj1VQ09ERV9SMTAwOworCQlkZXZfcHJpdi0+bWljcm9jb2RlX3ZlcnNpb24gPSBVQ09ERV9SMTAwOwogCX0KLQkKKwogCWRldl9wcml2LT5kb19ib3hlcyA9IDA7CiAJZGV2X3ByaXYtPmNwX21vZGUgPSBpbml0LT5jcF9tb2RlOwogCkBAIC0xMzQ0LDE1ICsxMzQzLDE1IEBACiAJICogYnV0IHRoZSByaW5nIGNhbiBiZSBpbiBlaXRoZXIgQUdQIG9yIFBDSSBzcGFjZSBmb3IgdGhlIHJpbmcKIAkgKiByZWFkIHBvaW50ZXIuCiAJICovCi0JaWYgKCAoIGluaXQtPmNwX21vZGUgIT0gUkFERU9OX0NTUV9QUklCTV9JTkRESVMgKSAmJgotCSAgICAgKCBpbml0LT5jcF9tb2RlICE9IFJBREVPTl9DU1FfUFJJQk1fSU5EQk0gKSApIHsKLQkJRFJNX0RFQlVHKCAiQkFEIGNwX21vZGUgKCV4KSFcbiIsIGluaXQtPmNwX21vZGUgKTsKKwlpZiAoKGluaXQtPmNwX21vZGUgIT0gUkFERU9OX0NTUV9QUklCTV9JTkRESVMpICYmCisJICAgIChpbml0LT5jcF9tb2RlICE9IFJBREVPTl9DU1FfUFJJQk1fSU5EQk0pKSB7CisJCURSTV9ERUJVRygiQkFEIGNwX21vZGUgKCV4KSFcbiIsIGluaXQtPmNwX21vZGUpOwogCQlkZXYtPmRldl9wcml2YXRlID0gKHZvaWQgKilkZXZfcHJpdjsKIAkJcmFkZW9uX2RvX2NsZWFudXBfY3AoZGV2KTsKIAkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAl9CiAKLQlzd2l0Y2ggKCBpbml0LT5mYl9icHAgKSB7CisJc3dpdGNoIChpbml0LT5mYl9icHApIHsKIAljYXNlIDE2OgogCQlkZXZfcHJpdi0+Y29sb3JfZm10ID0gUkFERU9OX0NPTE9SX0ZPUk1BVF9SR0I1NjU7CiAJCWJyZWFrOwpAQCAtMTM2MSwxMiArMTM2MCwxMiBAQAogCQlkZXZfcHJpdi0+Y29sb3JfZm10ID0gUkFERU9OX0NPTE9SX0ZPUk1BVF9BUkdCODg4ODsKIAkJYnJlYWs7CiAJfQotCWRldl9wcml2LT5mcm9udF9vZmZzZXQJPSBpbml0LT5mcm9udF9vZmZzZXQ7Ci0JZGV2X3ByaXYtPmZyb250X3BpdGNoCT0gaW5pdC0+ZnJvbnRfcGl0Y2g7Ci0JZGV2X3ByaXYtPmJhY2tfb2Zmc2V0CT0gaW5pdC0+YmFja19vZmZzZXQ7Ci0JZGV2X3ByaXYtPmJhY2tfcGl0Y2gJPSBpbml0LT5iYWNrX3BpdGNoOworCWRldl9wcml2LT5mcm9udF9vZmZzZXQgPSBpbml0LT5mcm9udF9vZmZzZXQ7CisJZGV2X3ByaXYtPmZyb250X3BpdGNoID0gaW5pdC0+ZnJvbnRfcGl0Y2g7CisJZGV2X3ByaXYtPmJhY2tfb2Zmc2V0ID0gaW5pdC0+YmFja19vZmZzZXQ7CisJZGV2X3ByaXYtPmJhY2tfcGl0Y2ggPSBpbml0LT5iYWNrX3BpdGNoOwogCi0Jc3dpdGNoICggaW5pdC0+ZGVwdGhfYnBwICkgeworCXN3aXRjaCAoaW5pdC0+ZGVwdGhfYnBwKSB7CiAJY2FzZSAxNjoKIAkJZGV2X3ByaXYtPmRlcHRoX2ZtdCA9IFJBREVPTl9ERVBUSF9GT1JNQVRfMTZCSVRfSU5UX1o7CiAJCWJyZWFrOwpAQCAtMTM3NSw4ICsxMzc0LDggQEAKIAkJZGV2X3ByaXYtPmRlcHRoX2ZtdCA9IFJBREVPTl9ERVBUSF9GT1JNQVRfMjRCSVRfSU5UX1o7CiAJCWJyZWFrOwogCX0KLQlkZXZfcHJpdi0+ZGVwdGhfb2Zmc2V0CT0gaW5pdC0+ZGVwdGhfb2Zmc2V0OwotCWRldl9wcml2LT5kZXB0aF9waXRjaAk9IGluaXQtPmRlcHRoX3BpdGNoOworCWRldl9wcml2LT5kZXB0aF9vZmZzZXQgPSBpbml0LT5kZXB0aF9vZmZzZXQ7CisJZGV2X3ByaXYtPmRlcHRoX3BpdGNoID0gaW5pdC0+ZGVwdGhfcGl0Y2g7CiAKIAkvKiBIYXJkd2FyZSBzdGF0ZSBmb3IgZGVwdGggY2xlYXJzLiAgUmVtb3ZlIHRoaXMgaWYvd2hlbiB3ZSBubwogCSAqIGxvbmdlciBjbGVhciB0aGUgZGVwdGggYnVmZmVyIHdpdGggYSAzRCByZWN0YW5nbGUuICBIYXJkLWNvZGUKQEAgLTEzODUsMTYgKzEzODQsMTYgQEAKIAkgKi8KIAlkZXZfcHJpdi0+ZGVwdGhfY2xlYXIucmIzZF9jbnRsID0gKFJBREVPTl9QTEFORV9NQVNLX0VOQUJMRSB8CiAJCQkJCSAgIChkZXZfcHJpdi0+Y29sb3JfZm10IDw8IDEwKSB8Ci0JCQkJCSAgIChkZXZfcHJpdi0+bWljcm9jb2RlX3ZlcnNpb24gPT0gVUNPREVfUjEwMCA/IFJBREVPTl9aQkxPQ0sxNiA6IDApKTsKKwkJCQkJICAgKGRldl9wcml2LT5taWNyb2NvZGVfdmVyc2lvbiA9PQorCQkJCQkgICAgVUNPREVfUjEwMCA/IFJBREVPTl9aQkxPQ0sxNiA6IDApKTsKIAotCWRldl9wcml2LT5kZXB0aF9jbGVhci5yYjNkX3pzdGVuY2lsY250bCA9IAotCQkoZGV2X3ByaXYtPmRlcHRoX2ZtdCB8Ci0JCSBSQURFT05fWl9URVNUX0FMV0FZUyB8Ci0JCSBSQURFT05fU1RFTkNJTF9URVNUX0FMV0FZUyB8Ci0JCSBSQURFT05fU1RFTkNJTF9TX0ZBSUxfUkVQTEFDRSB8Ci0JCSBSQURFT05fU1RFTkNJTF9aUEFTU19SRVBMQUNFIHwKLQkJIFJBREVPTl9TVEVOQ0lMX1pGQUlMX1JFUExBQ0UgfAotCQkgUkFERU9OX1pfV1JJVEVfRU5BQkxFKTsKKwlkZXZfcHJpdi0+ZGVwdGhfY2xlYXIucmIzZF96c3RlbmNpbGNudGwgPQorCSAgICAoZGV2X3ByaXYtPmRlcHRoX2ZtdCB8CisJICAgICBSQURFT05fWl9URVNUX0FMV0FZUyB8CisJICAgICBSQURFT05fU1RFTkNJTF9URVNUX0FMV0FZUyB8CisJICAgICBSQURFT05fU1RFTkNJTF9TX0ZBSUxfUkVQTEFDRSB8CisJICAgICBSQURFT05fU1RFTkNJTF9aUEFTU19SRVBMQUNFIHwKKwkgICAgIFJBREVPTl9TVEVOQ0lMX1pGQUlMX1JFUExBQ0UgfCBSQURFT05fWl9XUklURV9FTkFCTEUpOwogCiAJZGV2X3ByaXYtPmRlcHRoX2NsZWFyLnNlX2NudGwgPSAoUkFERU9OX0ZGQUNFX0NVTExfQ1cgfAogCQkJCQkgUkFERU9OX0JGQUNFX1NPTElEIHwKQEAgLTE0MTYsOCArMTQxNSw4IEBACiAJZGV2X3ByaXYtPnJpbmdfcnB0cl9vZmZzZXQgPSBpbml0LT5yaW5nX3JwdHJfb2Zmc2V0OwogCWRldl9wcml2LT5idWZmZXJzX29mZnNldCA9IGluaXQtPmJ1ZmZlcnNfb2Zmc2V0OwogCWRldl9wcml2LT5nYXJ0X3RleHR1cmVzX29mZnNldCA9IGluaXQtPmdhcnRfdGV4dHVyZXNfb2Zmc2V0OwotCQotCWlmKCFkZXZfcHJpdi0+c2FyZWEpIHsKKworCWlmICghZGV2X3ByaXYtPnNhcmVhKSB7CiAJCURSTV9FUlJPUigiY291bGQgbm90IGZpbmQgc2FyZWEhXG4iKTsKIAkJZGV2LT5kZXZfcHJpdmF0ZSA9ICh2b2lkICopZGV2X3ByaXY7CiAJCXJhZGVvbl9kb19jbGVhbnVwX2NwKGRldik7CkBAIC0xNDI1LDIxICsxNDI0LDIxIEBACiAJfQogCiAJZGV2X3ByaXYtPm1taW8gPSBkcm1fY29yZV9maW5kbWFwKGRldiwgaW5pdC0+bW1pb19vZmZzZXQpOwotCWlmKCFkZXZfcHJpdi0+bW1pbykgeworCWlmICghZGV2X3ByaXYtPm1taW8pIHsKIAkJRFJNX0VSUk9SKCJjb3VsZCBub3QgZmluZCBtbWlvIHJlZ2lvbiFcbiIpOwogCQlkZXYtPmRldl9wcml2YXRlID0gKHZvaWQgKilkZXZfcHJpdjsKIAkJcmFkZW9uX2RvX2NsZWFudXBfY3AoZGV2KTsKIAkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAl9CiAJZGV2X3ByaXYtPmNwX3JpbmcgPSBkcm1fY29yZV9maW5kbWFwKGRldiwgaW5pdC0+cmluZ19vZmZzZXQpOwotCWlmKCFkZXZfcHJpdi0+Y3BfcmluZykgeworCWlmICghZGV2X3ByaXYtPmNwX3JpbmcpIHsKIAkJRFJNX0VSUk9SKCJjb3VsZCBub3QgZmluZCBjcCByaW5nIHJlZ2lvbiFcbiIpOwogCQlkZXYtPmRldl9wcml2YXRlID0gKHZvaWQgKilkZXZfcHJpdjsKIAkJcmFkZW9uX2RvX2NsZWFudXBfY3AoZGV2KTsKIAkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAl9CiAJZGV2X3ByaXYtPnJpbmdfcnB0ciA9IGRybV9jb3JlX2ZpbmRtYXAoZGV2LCBpbml0LT5yaW5nX3JwdHJfb2Zmc2V0KTsKLQlpZighZGV2X3ByaXYtPnJpbmdfcnB0cikgeworCWlmICghZGV2X3ByaXYtPnJpbmdfcnB0cikgewogCQlEUk1fRVJST1IoImNvdWxkIG5vdCBmaW5kIHJpbmcgcmVhZCBwb2ludGVyIVxuIik7CiAJCWRldi0+ZGV2X3ByaXZhdGUgPSAodm9pZCAqKWRldl9wcml2OwogCQlyYWRlb25fZG9fY2xlYW51cF9jcChkZXYpOwpAQCAtMTQ0NywxNiArMTQ0NiwxNyBAQAogCX0KIAlkZXYtPmFncF9idWZmZXJfdG9rZW4gPSBpbml0LT5idWZmZXJzX29mZnNldDsKIAlkZXYtPmFncF9idWZmZXJfbWFwID0gZHJtX2NvcmVfZmluZG1hcChkZXYsIGluaXQtPmJ1ZmZlcnNfb2Zmc2V0KTsKLQlpZighZGV2LT5hZ3BfYnVmZmVyX21hcCkgeworCWlmICghZGV2LT5hZ3BfYnVmZmVyX21hcCkgewogCQlEUk1fRVJST1IoImNvdWxkIG5vdCBmaW5kIGRtYSBidWZmZXIgcmVnaW9uIVxuIik7CiAJCWRldi0+ZGV2X3ByaXZhdGUgPSAodm9pZCAqKWRldl9wcml2OwogCQlyYWRlb25fZG9fY2xlYW51cF9jcChkZXYpOwogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCX0KIAotCWlmICggaW5pdC0+Z2FydF90ZXh0dXJlc19vZmZzZXQgKSB7Ci0JCWRldl9wcml2LT5nYXJ0X3RleHR1cmVzID0gZHJtX2NvcmVfZmluZG1hcChkZXYsIGluaXQtPmdhcnRfdGV4dHVyZXNfb2Zmc2V0KTsKLQkJaWYgKCAhZGV2X3ByaXYtPmdhcnRfdGV4dHVyZXMgKSB7CisJaWYgKGluaXQtPmdhcnRfdGV4dHVyZXNfb2Zmc2V0KSB7CisJCWRldl9wcml2LT5nYXJ0X3RleHR1cmVzID0KKwkJICAgIGRybV9jb3JlX2ZpbmRtYXAoZGV2LCBpbml0LT5nYXJ0X3RleHR1cmVzX29mZnNldCk7CisJCWlmICghZGV2X3ByaXYtPmdhcnRfdGV4dHVyZXMpIHsKIAkJCURSTV9FUlJPUigiY291bGQgbm90IGZpbmQgR0FSVCB0ZXh0dXJlIHJlZ2lvbiFcbiIpOwogCQkJZGV2LT5kZXZfcHJpdmF0ZSA9ICh2b2lkICopZGV2X3ByaXY7CiAJCQlyYWRlb25fZG9fY2xlYW51cF9jcChkZXYpOwpAQCAtMTQ2NSwxNyArMTQ2NSwxNyBAQAogCX0KIAogCWRldl9wcml2LT5zYXJlYV9wcml2ID0KLQkJKGRybV9yYWRlb25fc2FyZWFfdCAqKSgodTggKilkZXZfcHJpdi0+c2FyZWEtPmhhbmRsZSArCi0JCQkJICAgICAgIGluaXQtPnNhcmVhX3ByaXZfb2Zmc2V0KTsKKwkgICAgKGRybV9yYWRlb25fc2FyZWFfdCAqKSAoKHU4ICopIGRldl9wcml2LT5zYXJlYS0+aGFuZGxlICsKKwkJCQkgICAgaW5pdC0+c2FyZWFfcHJpdl9vZmZzZXQpOwogCiAjaWYgX19PU19IQVNfQUdQCi0JaWYgKCAhZGV2X3ByaXYtPmlzX3BjaSApIHsKLQkJZHJtX2NvcmVfaW9yZW1hcCggZGV2X3ByaXYtPmNwX3JpbmcsIGRldiApOwotCQlkcm1fY29yZV9pb3JlbWFwKCBkZXZfcHJpdi0+cmluZ19ycHRyLCBkZXYgKTsKLQkJZHJtX2NvcmVfaW9yZW1hcCggZGV2LT5hZ3BfYnVmZmVyX21hcCwgZGV2ICk7Ci0JCWlmKCFkZXZfcHJpdi0+Y3BfcmluZy0+aGFuZGxlIHx8Ci0JCSAgICFkZXZfcHJpdi0+cmluZ19ycHRyLT5oYW5kbGUgfHwKLQkJICAgIWRldi0+YWdwX2J1ZmZlcl9tYXAtPmhhbmRsZSkgeworCWlmICghZGV2X3ByaXYtPmlzX3BjaSkgeworCQlkcm1fY29yZV9pb3JlbWFwKGRldl9wcml2LT5jcF9yaW5nLCBkZXYpOworCQlkcm1fY29yZV9pb3JlbWFwKGRldl9wcml2LT5yaW5nX3JwdHIsIGRldik7CisJCWRybV9jb3JlX2lvcmVtYXAoZGV2LT5hZ3BfYnVmZmVyX21hcCwgZGV2KTsKKwkJaWYgKCFkZXZfcHJpdi0+Y3BfcmluZy0+aGFuZGxlIHx8CisJCSAgICAhZGV2X3ByaXYtPnJpbmdfcnB0ci0+aGFuZGxlIHx8CisJCSAgICAhZGV2LT5hZ3BfYnVmZmVyX21hcC0+aGFuZGxlKSB7CiAJCQlEUk1fRVJST1IoImNvdWxkIG5vdCBmaW5kIGlvcmVtYXAgYWdwIHJlZ2lvbnMhXG4iKTsKIAkJCWRldi0+ZGV2X3ByaXZhdGUgPSAodm9pZCAqKWRldl9wcml2OwogCQkJcmFkZW9uX2RvX2NsZWFudXBfY3AoZGV2KTsKQEAgLTE0ODQsMTQwICsxNDg0LDE0NiBAQAogCX0gZWxzZQogI2VuZGlmCiAJewotCQlkZXZfcHJpdi0+Y3BfcmluZy0+aGFuZGxlID0KLQkJCSh2b2lkICopZGV2X3ByaXYtPmNwX3JpbmctPm9mZnNldDsKKwkJZGV2X3ByaXYtPmNwX3JpbmctPmhhbmRsZSA9ICh2b2lkICopZGV2X3ByaXYtPmNwX3JpbmctPm9mZnNldDsKIAkJZGV2X3ByaXYtPnJpbmdfcnB0ci0+aGFuZGxlID0KLQkJCSh2b2lkICopZGV2X3ByaXYtPnJpbmdfcnB0ci0+b2Zmc2V0OwotCQlkZXYtPmFncF9idWZmZXJfbWFwLT5oYW5kbGUgPSAodm9pZCAqKWRldi0+YWdwX2J1ZmZlcl9tYXAtPm9mZnNldDsKKwkJICAgICh2b2lkICopZGV2X3ByaXYtPnJpbmdfcnB0ci0+b2Zmc2V0OworCQlkZXYtPmFncF9idWZmZXJfbWFwLT5oYW5kbGUgPQorCQkgICAgKHZvaWQgKilkZXYtPmFncF9idWZmZXJfbWFwLT5vZmZzZXQ7CiAKLQkJRFJNX0RFQlVHKCAiZGV2X3ByaXYtPmNwX3JpbmctPmhhbmRsZSAlcFxuIiwKLQkJCSAgIGRldl9wcml2LT5jcF9yaW5nLT5oYW5kbGUgKTsKLQkJRFJNX0RFQlVHKCAiZGV2X3ByaXYtPnJpbmdfcnB0ci0+aGFuZGxlICVwXG4iLAotCQkJICAgZGV2X3ByaXYtPnJpbmdfcnB0ci0+aGFuZGxlICk7Ci0JCURSTV9ERUJVRyggImRldi0+YWdwX2J1ZmZlcl9tYXAtPmhhbmRsZSAlcFxuIiwKLQkJCSAgIGRldi0+YWdwX2J1ZmZlcl9tYXAtPmhhbmRsZSApOworCQlEUk1fREVCVUcoImRldl9wcml2LT5jcF9yaW5nLT5oYW5kbGUgJXBcbiIsCisJCQkgIGRldl9wcml2LT5jcF9yaW5nLT5oYW5kbGUpOworCQlEUk1fREVCVUcoImRldl9wcml2LT5yaW5nX3JwdHItPmhhbmRsZSAlcFxuIiwKKwkJCSAgZGV2X3ByaXYtPnJpbmdfcnB0ci0+aGFuZGxlKTsKKwkJRFJNX0RFQlVHKCJkZXYtPmFncF9idWZmZXJfbWFwLT5oYW5kbGUgJXBcbiIsCisJCQkgIGRldi0+YWdwX2J1ZmZlcl9tYXAtPmhhbmRsZSk7CiAJfQogCi0JZGV2X3ByaXYtPmZiX2xvY2F0aW9uID0gKCBSQURFT05fUkVBRCggUkFERU9OX01DX0ZCX0xPQ0FUSU9OICkKLQkJCQkmIDB4ZmZmZiApIDw8IDE2OworCWRldl9wcml2LT5mYl9sb2NhdGlvbiA9IChSQURFT05fUkVBRChSQURFT05fTUNfRkJfTE9DQVRJT04pCisJCQkJICYgMHhmZmZmKSA8PCAxNjsKIAotCWRldl9wcml2LT5mcm9udF9waXRjaF9vZmZzZXQgPSAoKChkZXZfcHJpdi0+ZnJvbnRfcGl0Y2gvNjQpIDw8IDIyKSB8Ci0JCQkJCSggKCBkZXZfcHJpdi0+ZnJvbnRfb2Zmc2V0Ci0JCQkJCSAgKyBkZXZfcHJpdi0+ZmJfbG9jYXRpb24gKSA+PiAxMCApICk7CisJZGV2X3ByaXYtPmZyb250X3BpdGNoX29mZnNldCA9ICgoKGRldl9wcml2LT5mcm9udF9waXRjaCAvIDY0KSA8PCAyMikgfAorCQkJCQkoKGRldl9wcml2LT5mcm9udF9vZmZzZXQKKwkJCQkJICArIGRldl9wcml2LT5mYl9sb2NhdGlvbikgPj4gMTApKTsKIAotCWRldl9wcml2LT5iYWNrX3BpdGNoX29mZnNldCA9ICgoKGRldl9wcml2LT5iYWNrX3BpdGNoLzY0KSA8PCAyMikgfAotCQkJCSAgICAgICAoICggZGV2X3ByaXYtPmJhY2tfb2Zmc2V0Ci0JCQkJCSArIGRldl9wcml2LT5mYl9sb2NhdGlvbiApID4+IDEwICkgKTsKKwlkZXZfcHJpdi0+YmFja19waXRjaF9vZmZzZXQgPSAoKChkZXZfcHJpdi0+YmFja19waXRjaCAvIDY0KSA8PCAyMikgfAorCQkJCSAgICAgICAoKGRldl9wcml2LT5iYWNrX29mZnNldAorCQkJCQkgKyBkZXZfcHJpdi0+ZmJfbG9jYXRpb24pID4+IDEwKSk7CiAKLQlkZXZfcHJpdi0+ZGVwdGhfcGl0Y2hfb2Zmc2V0ID0gKCgoZGV2X3ByaXYtPmRlcHRoX3BpdGNoLzY0KSA8PCAyMikgfAotCQkJCQkoICggZGV2X3ByaXYtPmRlcHRoX29mZnNldAotCQkJCQkgICsgZGV2X3ByaXYtPmZiX2xvY2F0aW9uICkgPj4gMTAgKSApOwotCisJZGV2X3ByaXYtPmRlcHRoX3BpdGNoX29mZnNldCA9ICgoKGRldl9wcml2LT5kZXB0aF9waXRjaCAvIDY0KSA8PCAyMikgfAorCQkJCQkoKGRldl9wcml2LT5kZXB0aF9vZmZzZXQKKwkJCQkJICArIGRldl9wcml2LT5mYl9sb2NhdGlvbikgPj4gMTApKTsKIAogCWRldl9wcml2LT5nYXJ0X3NpemUgPSBpbml0LT5nYXJ0X3NpemU7CiAJZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQgPSBkZXZfcHJpdi0+ZmJfbG9jYXRpb24KLQkJCQkrIFJBREVPTl9SRUFEKCBSQURFT05fQ09ORklHX0FQRVJfU0laRSApOworCSAgICArIFJBREVPTl9SRUFEKFJBREVPTl9DT05GSUdfQVBFUl9TSVpFKTsKIAogI2lmIF9fT1NfSEFTX0FHUAotCWlmICggIWRldl9wcml2LT5pc19wY2kgKQorCWlmICghZGV2X3ByaXYtPmlzX3BjaSkKIAkJZGV2X3ByaXYtPmdhcnRfYnVmZmVyc19vZmZzZXQgPSAoZGV2LT5hZ3BfYnVmZmVyX21hcC0+b2Zmc2V0Ci0JCQkJCQktIGRldi0+YWdwLT5iYXNlCi0JCQkJCQkrIGRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0KTsKKwkJCQkJCSAtIGRldi0+YWdwLT5iYXNlCisJCQkJCQkgKyBkZXZfcHJpdi0+Z2FydF92bV9zdGFydCk7CiAJZWxzZQogI2VuZGlmCiAJCWRldl9wcml2LT5nYXJ0X2J1ZmZlcnNfb2Zmc2V0ID0gKGRldi0+YWdwX2J1ZmZlcl9tYXAtPm9mZnNldAotCQkJCQkJLSBkZXYtPnNnLT5oYW5kbGUKLQkJCQkJCSsgZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQpOworCQkJCQkJIC0gZGV2LT5zZy0+aGFuZGxlCisJCQkJCQkgKyBkZXZfcHJpdi0+Z2FydF92bV9zdGFydCk7CiAKLQlEUk1fREVCVUcoICJkZXZfcHJpdi0+Z2FydF9zaXplICVkXG4iLAotCQkgICBkZXZfcHJpdi0+Z2FydF9zaXplICk7Ci0JRFJNX0RFQlVHKCAiZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQgMHgleFxuIiwKLQkJICAgZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQgKTsKLQlEUk1fREVCVUcoICJkZXZfcHJpdi0+Z2FydF9idWZmZXJzX29mZnNldCAweCVseFxuIiwKLQkJICAgZGV2X3ByaXYtPmdhcnRfYnVmZmVyc19vZmZzZXQgKTsKKwlEUk1fREVCVUcoImRldl9wcml2LT5nYXJ0X3NpemUgJWRcbiIsIGRldl9wcml2LT5nYXJ0X3NpemUpOworCURSTV9ERUJVRygiZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQgMHgleFxuIiwgZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQpOworCURSTV9ERUJVRygiZGV2X3ByaXYtPmdhcnRfYnVmZmVyc19vZmZzZXQgMHglbHhcbiIsCisJCSAgZGV2X3ByaXYtPmdhcnRfYnVmZmVyc19vZmZzZXQpOwogCi0JZGV2X3ByaXYtPnJpbmcuc3RhcnQgPSAodTMyICopZGV2X3ByaXYtPmNwX3JpbmctPmhhbmRsZTsKLQlkZXZfcHJpdi0+cmluZy5lbmQgPSAoKHUzMiAqKWRldl9wcml2LT5jcF9yaW5nLT5oYW5kbGUKKwlkZXZfcHJpdi0+cmluZy5zdGFydCA9ICh1MzIgKikgZGV2X3ByaXYtPmNwX3JpbmctPmhhbmRsZTsKKwlkZXZfcHJpdi0+cmluZy5lbmQgPSAoKHUzMiAqKSBkZXZfcHJpdi0+Y3BfcmluZy0+aGFuZGxlCiAJCQkgICAgICArIGluaXQtPnJpbmdfc2l6ZSAvIHNpemVvZih1MzIpKTsKIAlkZXZfcHJpdi0+cmluZy5zaXplID0gaW5pdC0+cmluZ19zaXplOwotCWRldl9wcml2LT5yaW5nLnNpemVfbDJxdyA9IGRybV9vcmRlciggaW5pdC0+cmluZ19zaXplIC8gOCApOworCWRldl9wcml2LT5yaW5nLnNpemVfbDJxdyA9IGRybV9vcmRlcihpbml0LT5yaW5nX3NpemUgLyA4KTsKIAotCWRldl9wcml2LT5yaW5nLnRhaWxfbWFzayA9Ci0JCShkZXZfcHJpdi0+cmluZy5zaXplIC8gc2l6ZW9mKHUzMikpIC0gMTsKKwlkZXZfcHJpdi0+cmluZy50YWlsX21hc2sgPSAoZGV2X3ByaXYtPnJpbmcuc2l6ZSAvIHNpemVvZih1MzIpKSAtIDE7CiAKIAlkZXZfcHJpdi0+cmluZy5oaWdoX21hcmsgPSBSQURFT05fUklOR19ISUdIX01BUks7CiAKICNpZiBfX09TX0hBU19BR1AKLQlpZiAoICFkZXZfcHJpdi0+aXNfcGNpICkgeworCWlmICghZGV2X3ByaXYtPmlzX3BjaSkgewogCQkvKiBUdXJuIG9mZiBQQ0kgR0FSVCAqLwotCQlyYWRlb25fc2V0X3BjaWdhcnQoIGRldl9wcml2LCAwICk7CisJCXJhZGVvbl9zZXRfcGNpZ2FydChkZXZfcHJpdiwgMCk7CiAJfSBlbHNlCiAjZW5kaWYKIAl7CiAJCS8qIGlmIHdlIGhhdmUgYW4gb2Zmc2V0IHNldCBmcm9tIHVzZXJzcGFjZSAqLwogCQlpZiAoZGV2X3ByaXYtPnBjaWdhcnRfb2Zmc2V0KSB7Ci0JCQlkZXZfcHJpdi0+Z2FydF9pbmZvLmJ1c19hZGRyID0gZGV2X3ByaXYtPnBjaWdhcnRfb2Zmc2V0ICsgZGV2X3ByaXYtPmZiX2xvY2F0aW9uOwotCQkJZGV2X3ByaXYtPmdhcnRfaW5mby5hZGRyID0gKHVuc2lnbmVkIGxvbmcpZHJtX2lvcmVtYXAoZGV2X3ByaXYtPmdhcnRfaW5mby5idXNfYWRkciwgUkFERU9OX1BDSUdBUlRfVEFCTEVfU0laRSwgZGV2KTsKKwkJCWRldl9wcml2LT5nYXJ0X2luZm8uYnVzX2FkZHIgPQorCQkJICAgIGRldl9wcml2LT5wY2lnYXJ0X29mZnNldCArIGRldl9wcml2LT5mYl9sb2NhdGlvbjsKKwkJCWRldl9wcml2LT5nYXJ0X2luZm8uYWRkciA9CisJCQkgICAgKHVuc2lnbmVkIGxvbmcpZHJtX2lvcmVtYXAoZGV2X3ByaXYtPmdhcnRfaW5mby4KKwkJCQkJCSAgICAgICBidXNfYWRkciwKKwkJCQkJCSAgICAgICBSQURFT05fUENJR0FSVF9UQUJMRV9TSVpFLAorCQkJCQkJICAgICAgIGRldik7CiAKLQkJCWRldl9wcml2LT5nYXJ0X2luZm8uaXNfcGNpZSA9ICEhKGRldl9wcml2LT5mbGFncyAmIENISVBfSVNfUENJRSk7Ci0JCQlkZXZfcHJpdi0+Z2FydF9pbmZvLmdhcnRfdGFibGVfbG9jYXRpb24gPSBEUk1fQVRJX0dBUlRfRkI7Ci0JCQkKLQkJCURSTV9ERUJVRygiU2V0dGluZyBwaHlzX3BjaV9nYXJ0IHRvICUwOGxYICUwOGxYXG4iLCBkZXZfcHJpdi0+Z2FydF9pbmZvLmFkZHIsIGRldl9wcml2LT5wY2lnYXJ0X29mZnNldCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlkZXZfcHJpdi0+Z2FydF9pbmZvLmdhcnRfdGFibGVfbG9jYXRpb24gPSBEUk1fQVRJX0dBUlRfTUFJTjsKLQkJCWRldl9wcml2LT5nYXJ0X2luZm8uYWRkciA9IGRldl9wcml2LT5nYXJ0X2luZm8uYnVzX2FkZHI9IDA7Ci0JCQlpZiAoZGV2X3ByaXYtPmZsYWdzICYgQ0hJUF9JU19QQ0lFKQotCQkJewotCQkJCURSTV9FUlJPUigiQ2Fubm90IHVzZSBQQ0kgRXhwcmVzcyB3aXRob3V0IEdBUlQgaW4gRkIgbWVtb3J5XG4iKTsKKwkJCWRldl9wcml2LT5nYXJ0X2luZm8uaXNfcGNpZSA9CisJCQkgICAgISEoZGV2X3ByaXYtPmZsYWdzICYgQ0hJUF9JU19QQ0lFKTsKKwkJCWRldl9wcml2LT5nYXJ0X2luZm8uZ2FydF90YWJsZV9sb2NhdGlvbiA9CisJCQkgICAgRFJNX0FUSV9HQVJUX0ZCOworCisJCQlEUk1fREVCVUcoIlNldHRpbmcgcGh5c19wY2lfZ2FydCB0byAlMDhsWCAlMDhsWFxuIiwKKwkJCQkgIGRldl9wcml2LT5nYXJ0X2luZm8uYWRkciwKKwkJCQkgIGRldl9wcml2LT5wY2lnYXJ0X29mZnNldCk7CisJCX0gZWxzZSB7CisJCQlkZXZfcHJpdi0+Z2FydF9pbmZvLmdhcnRfdGFibGVfbG9jYXRpb24gPQorCQkJICAgIERSTV9BVElfR0FSVF9NQUlOOworCQkJZGV2X3ByaXYtPmdhcnRfaW5mby5hZGRyID0KKwkJCSAgICBkZXZfcHJpdi0+Z2FydF9pbmZvLmJ1c19hZGRyID0gMDsKKwkJCWlmIChkZXZfcHJpdi0+ZmxhZ3MgJiBDSElQX0lTX1BDSUUpIHsKKwkJCQlEUk1fRVJST1IKKwkJCQkgICAgKCJDYW5ub3QgdXNlIFBDSSBFeHByZXNzIHdpdGhvdXQgR0FSVCBpbiBGQiBtZW1vcnlcbiIpOwogCQkJCXJhZGVvbl9kb19jbGVhbnVwX2NwKGRldik7CiAJCQkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAkJCX0KIAkJfQogCiAJCWlmICghZHJtX2F0aV9wY2lnYXJ0X2luaXQoZGV2LCAmZGV2X3ByaXYtPmdhcnRfaW5mbykpIHsKLQkJCURSTV9FUlJPUiggImZhaWxlZCB0byBpbml0IFBDSSBHQVJUIVxuIiApOworCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gaW5pdCBQQ0kgR0FSVCFcbiIpOwogCQkJZGV2LT5kZXZfcHJpdmF0ZSA9ICh2b2lkICopZGV2X3ByaXY7CiAJCQlyYWRlb25fZG9fY2xlYW51cF9jcChkZXYpOwogCQkJcmV0dXJuIERSTV9FUlIoRU5PTUVNKTsKIAkJfQogCiAJCS8qIFR1cm4gb24gUENJIEdBUlQgKi8KLQkJcmFkZW9uX3NldF9wY2lnYXJ0KCBkZXZfcHJpdiwgMSApOworCQlyYWRlb25fc2V0X3BjaWdhcnQoZGV2X3ByaXYsIDEpOwogCX0KIAotCXJhZGVvbl9jcF9sb2FkX21pY3JvY29kZSggZGV2X3ByaXYgKTsKLQlyYWRlb25fY3BfaW5pdF9yaW5nX2J1ZmZlciggZGV2LCBkZXZfcHJpdiApOworCXJhZGVvbl9jcF9sb2FkX21pY3JvY29kZShkZXZfcHJpdik7CisJcmFkZW9uX2NwX2luaXRfcmluZ19idWZmZXIoZGV2LCBkZXZfcHJpdik7CiAKIAlkZXZfcHJpdi0+bGFzdF9idWYgPSAwOwogCiAJZGV2LT5kZXZfcHJpdmF0ZSA9ICh2b2lkICopZGV2X3ByaXY7CiAKLQlyYWRlb25fZG9fZW5naW5lX3Jlc2V0KCBkZXYgKTsKKwlyYWRlb25fZG9fZW5naW5lX3Jlc2V0KGRldik7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCByYWRlb25fZG9fY2xlYW51cF9jcCggZHJtX2RldmljZV90ICpkZXYgKQorc3RhdGljIGludCByYWRlb25fZG9fY2xlYW51cF9jcChkcm1fZGV2aWNlX3QgKiBkZXYpCiB7CiAJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlEUk1fREVCVUcoICJcbiIgKTsKKwlEUk1fREVCVUcoIlxuIik7CiAKIAkvKiBNYWtlIHN1cmUgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgaGVyZSBiZWNhdXNlIHRoZSB1bmluc3RhbGwgaW9jdGwKIAkgKiBtYXkgbm90IGhhdmUgYmVlbiBjYWxsZWQgZnJvbSB1c2Vyc3BhY2UgYW5kIGFmdGVyIGRldl9wcml2YXRlCiAJICogaXMgZnJlZWQsIGl0J3MgdG9vIGxhdGUuCiAJICovCi0JaWYgKCBkZXYtPmlycV9lbmFibGVkICkgZHJtX2lycV91bmluc3RhbGwoZGV2KTsKKwlpZiAoZGV2LT5pcnFfZW5hYmxlZCkKKwkJZHJtX2lycV91bmluc3RhbGwoZGV2KTsKIAogI2lmIF9fT1NfSEFTX0FHUAotCWlmICggIWRldl9wcml2LT5pc19wY2kgKSB7Ci0JCWlmICggZGV2X3ByaXYtPmNwX3JpbmcgIT0gTlVMTCApCi0JCQlkcm1fY29yZV9pb3JlbWFwZnJlZSggZGV2X3ByaXYtPmNwX3JpbmcsIGRldiApOwotCQlpZiAoIGRldl9wcml2LT5yaW5nX3JwdHIgIT0gTlVMTCApCi0JCQlkcm1fY29yZV9pb3JlbWFwZnJlZSggZGV2X3ByaXYtPnJpbmdfcnB0ciwgZGV2ICk7Ci0JCWlmICggZGV2LT5hZ3BfYnVmZmVyX21hcCAhPSBOVUxMICkKLQkJewotCQkJZHJtX2NvcmVfaW9yZW1hcGZyZWUoIGRldi0+YWdwX2J1ZmZlcl9tYXAsIGRldiApOworCWlmICghZGV2X3ByaXYtPmlzX3BjaSkgeworCQlpZiAoZGV2X3ByaXYtPmNwX3JpbmcgIT0gTlVMTCkKKwkJCWRybV9jb3JlX2lvcmVtYXBmcmVlKGRldl9wcml2LT5jcF9yaW5nLCBkZXYpOworCQlpZiAoZGV2X3ByaXYtPnJpbmdfcnB0ciAhPSBOVUxMKQorCQkJZHJtX2NvcmVfaW9yZW1hcGZyZWUoZGV2X3ByaXYtPnJpbmdfcnB0ciwgZGV2KTsKKwkJaWYgKGRldi0+YWdwX2J1ZmZlcl9tYXAgIT0gTlVMTCkgeworCQkJZHJtX2NvcmVfaW9yZW1hcGZyZWUoZGV2LT5hZ3BfYnVmZmVyX21hcCwgZGV2KTsKIAkJCWRldi0+YWdwX2J1ZmZlcl9tYXAgPSBOVUxMOwogCQl9CiAJfSBlbHNlCkBAIC0xNjI2LDEwMyArMTYzMiwxMDMgQEAKIAkJaWYgKGRldl9wcml2LT5nYXJ0X2luZm8uYnVzX2FkZHIpCiAJCQlpZiAoIWRybV9hdGlfcGNpZ2FydF9jbGVhbnVwKGRldiwgJmRldl9wcml2LT5nYXJ0X2luZm8pKQogCQkJCURSTV9FUlJPUigiZmFpbGVkIHRvIGNsZWFudXAgUENJIEdBUlQhXG4iKTsKLQkJCi0JCWlmIChkZXZfcHJpdi0+Z2FydF9pbmZvLmdhcnRfdGFibGVfbG9jYXRpb24gPT0gRFJNX0FUSV9HQVJUX0ZCKQotCQl7Ci0JCQlkcm1faW9yZW1hcGZyZWUoKHZvaWQgKilkZXZfcHJpdi0+Z2FydF9pbmZvLmFkZHIsIFJBREVPTl9QQ0lHQVJUX1RBQkxFX1NJWkUsIGRldik7CisKKwkJaWYgKGRldl9wcml2LT5nYXJ0X2luZm8uZ2FydF90YWJsZV9sb2NhdGlvbiA9PSBEUk1fQVRJX0dBUlRfRkIpIHsKKwkJCWRybV9pb3JlbWFwZnJlZSgodm9pZCAqKWRldl9wcml2LT5nYXJ0X2luZm8uYWRkciwKKwkJCQkJUkFERU9OX1BDSUdBUlRfVEFCTEVfU0laRSwgZGV2KTsKIAkJCWRldl9wcml2LT5nYXJ0X2luZm8uYWRkciA9IDA7CiAJCX0KIAl9Ci0JCisKIAkvKiBvbmx5IGNsZWFyIHRvIHRoZSBzdGFydCBvZiBmbGFncyAqLwogCW1lbXNldChkZXZfcHJpdiwgMCwgb2Zmc2V0b2YoZHJtX3JhZGVvbl9wcml2YXRlX3QsIGZsYWdzKSk7CiAKIAlyZXR1cm4gMDsKIH0KIAotLyogVGhpcyBjb2RlIHdpbGwgcmVpbml0IHRoZSBSYWRlb24gQ1AgaGFyZHdhcmUgYWZ0ZXIgYSByZXN1bWUgZnJvbSBkaXNjLiAgCi0gKiBBRkFJSywgaXQgd291bGQgYmUgdmVyeSBkaWZmaWN1bHQgdG8gcGlja2xlIHRoZSBzdGF0ZSBhdCBzdXNwZW5kIHRpbWUsIHNvIAorLyogVGhpcyBjb2RlIHdpbGwgcmVpbml0IHRoZSBSYWRlb24gQ1AgaGFyZHdhcmUgYWZ0ZXIgYSByZXN1bWUgZnJvbSBkaXNjLgorICogQUZBSUssIGl0IHdvdWxkIGJlIHZlcnkgZGlmZmljdWx0IHRvIHBpY2tsZSB0aGUgc3RhdGUgYXQgc3VzcGVuZCB0aW1lLCBzbwogICogaGVyZSB3ZSBtYWtlIHN1cmUgdGhhdCBhbGwgUmFkZW9uIGhhcmR3YXJlIGluaXRpYWxpc2F0aW9uIGlzIHJlLWRvbmUgd2l0aG91dAogICogYWZmZWN0aW5nIHJ1bm5pbmcgYXBwbGljYXRpb25zLgogICoKICAqIENoYXJsIFAuIEJvdGhhIDxodHRwOi8vY3Bib3RoYS5uZXQ+CiAgKi8KLXN0YXRpYyBpbnQgcmFkZW9uX2RvX3Jlc3VtZV9jcCggZHJtX2RldmljZV90ICpkZXYgKQorc3RhdGljIGludCByYWRlb25fZG9fcmVzdW1lX2NwKGRybV9kZXZpY2VfdCAqIGRldikKIHsKIAlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCi0JaWYgKCAhZGV2X3ByaXYgKSB7Ci0JCURSTV9FUlJPUiggIkNhbGxlZCB3aXRoIG5vIGluaXRpYWxpemF0aW9uXG4iICk7Ci0JCXJldHVybiBEUk1fRVJSKCBFSU5WQUwgKTsKKwlpZiAoIWRldl9wcml2KSB7CisJCURSTV9FUlJPUigiQ2FsbGVkIHdpdGggbm8gaW5pdGlhbGl6YXRpb25cbiIpOworCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCX0KIAogCURSTV9ERUJVRygiU3RhcnRpbmcgcmFkZW9uX2RvX3Jlc3VtZV9jcCgpXG4iKTsKIAogI2lmIF9fT1NfSEFTX0FHUAotCWlmICggIWRldl9wcml2LT5pc19wY2kgKSB7CisJaWYgKCFkZXZfcHJpdi0+aXNfcGNpKSB7CiAJCS8qIFR1cm4gb2ZmIFBDSSBHQVJUICovCi0JCXJhZGVvbl9zZXRfcGNpZ2FydCggZGV2X3ByaXYsIDAgKTsKKwkJcmFkZW9uX3NldF9wY2lnYXJ0KGRldl9wcml2LCAwKTsKIAl9IGVsc2UKICNlbmRpZgogCXsKIAkJLyogVHVybiBvbiBQQ0kgR0FSVCAqLwotCQlyYWRlb25fc2V0X3BjaWdhcnQoIGRldl9wcml2LCAxICk7CisJCXJhZGVvbl9zZXRfcGNpZ2FydChkZXZfcHJpdiwgMSk7CiAJfQogCi0JcmFkZW9uX2NwX2xvYWRfbWljcm9jb2RlKCBkZXZfcHJpdiApOwotCXJhZGVvbl9jcF9pbml0X3JpbmdfYnVmZmVyKCBkZXYsIGRldl9wcml2ICk7CisJcmFkZW9uX2NwX2xvYWRfbWljcm9jb2RlKGRldl9wcml2KTsKKwlyYWRlb25fY3BfaW5pdF9yaW5nX2J1ZmZlcihkZXYsIGRldl9wcml2KTsKIAotCXJhZGVvbl9kb19lbmdpbmVfcmVzZXQoIGRldiApOworCXJhZGVvbl9kb19lbmdpbmVfcmVzZXQoZGV2KTsKIAogCURSTV9ERUJVRygicmFkZW9uX2RvX3Jlc3VtZV9jcCgpIGNvbXBsZXRlXG4iKTsKIAogCXJldHVybiAwOwogfQogCi0KLWludCByYWRlb25fY3BfaW5pdCggRFJNX0lPQ1RMX0FSR1MgKQoraW50IHJhZGVvbl9jcF9pbml0KERSTV9JT0NUTF9BUkdTKQogewogCURSTV9ERVZJQ0U7CiAJZHJtX3JhZGVvbl9pbml0X3QgaW5pdDsKIAotCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTiggZGV2LCBmaWxwICk7CisJTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlscCk7CiAKLQlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwoIGluaXQsIChkcm1fcmFkZW9uX2luaXRfdCBfX3VzZXIgKilkYXRhLCBzaXplb2YoaW5pdCkgKTsKKwlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwoaW5pdCwgKGRybV9yYWRlb25faW5pdF90IF9fdXNlciAqKSBkYXRhLAorCQkJCSBzaXplb2YoaW5pdCkpOwogCi0JaWYoaW5pdC5mdW5jID09IFJBREVPTl9JTklUX1IzMDBfQ1ApCisJaWYgKGluaXQuZnVuYyA9PSBSQURFT05fSU5JVF9SMzAwX0NQKQogCQlyMzAwX2luaXRfcmVnX2ZsYWdzKCk7CiAKLQlzd2l0Y2ggKCBpbml0LmZ1bmMgKSB7CisJc3dpdGNoIChpbml0LmZ1bmMpIHsKIAljYXNlIFJBREVPTl9JTklUX0NQOgogCWNhc2UgUkFERU9OX0lOSVRfUjIwMF9DUDoKIAljYXNlIFJBREVPTl9JTklUX1IzMDBfQ1A6Ci0JCXJldHVybiByYWRlb25fZG9faW5pdF9jcCggZGV2LCAmaW5pdCApOworCQlyZXR1cm4gcmFkZW9uX2RvX2luaXRfY3AoZGV2LCAmaW5pdCk7CiAJY2FzZSBSQURFT05fQ0xFQU5VUF9DUDoKLQkJcmV0dXJuIHJhZGVvbl9kb19jbGVhbnVwX2NwKCBkZXYgKTsKKwkJcmV0dXJuIHJhZGVvbl9kb19jbGVhbnVwX2NwKGRldik7CiAJfQogCiAJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIH0KIAotaW50IHJhZGVvbl9jcF9zdGFydCggRFJNX0lPQ1RMX0FSR1MgKQoraW50IHJhZGVvbl9jcF9zdGFydChEUk1fSU9DVExfQVJHUykKIHsKIAlEUk1fREVWSUNFOwogCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JRFJNX0RFQlVHKCAiXG4iICk7CisJRFJNX0RFQlVHKCJcbiIpOwogCi0JTE9DS19URVNUX1dJVEhfUkVUVVJOKCBkZXYsIGZpbHAgKTsKKwlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxwKTsKIAotCWlmICggZGV2X3ByaXYtPmNwX3J1bm5pbmcgKSB7Ci0JCURSTV9ERUJVRyggIiVzIHdoaWxlIENQIHJ1bm5pbmdcbiIsIF9fRlVOQ1RJT05fXyApOworCWlmIChkZXZfcHJpdi0+Y3BfcnVubmluZykgeworCQlEUk1fREVCVUcoIiVzIHdoaWxlIENQIHJ1bm5pbmdcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybiAwOwogCX0KLQlpZiAoIGRldl9wcml2LT5jcF9tb2RlID09IFJBREVPTl9DU1FfUFJJRElTX0lORERJUyApIHsKLQkJRFJNX0RFQlVHKCAiJXMgY2FsbGVkIHdpdGggYm9ndXMgQ1AgbW9kZSAoJWQpXG4iLAotCQkJICAgX19GVU5DVElPTl9fLCBkZXZfcHJpdi0+Y3BfbW9kZSApOworCWlmIChkZXZfcHJpdi0+Y3BfbW9kZSA9PSBSQURFT05fQ1NRX1BSSURJU19JTkRESVMpIHsKKwkJRFJNX0RFQlVHKCIlcyBjYWxsZWQgd2l0aCBib2d1cyBDUCBtb2RlICglZClcbiIsCisJCQkgIF9fRlVOQ1RJT05fXywgZGV2X3ByaXYtPmNwX21vZGUpOwogCQlyZXR1cm4gMDsKIAl9CiAKLQlyYWRlb25fZG9fY3Bfc3RhcnQoIGRldl9wcml2ICk7CisJcmFkZW9uX2RvX2NwX3N0YXJ0KGRldl9wcml2KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTczMCwxNyArMTczNiwxOCBAQAogLyogU3RvcCB0aGUgQ1AuICBUaGUgZW5naW5lIG11c3QgaGF2ZSBiZWVuIGlkbGVkIGJlZm9yZSBjYWxsaW5nIHRoaXMKICAqIHJvdXRpbmUuCiAgKi8KLWludCByYWRlb25fY3Bfc3RvcCggRFJNX0lPQ1RMX0FSR1MgKQoraW50IHJhZGVvbl9jcF9zdG9wKERSTV9JT0NUTF9BUkdTKQogewogCURSTV9ERVZJQ0U7CiAJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlkcm1fcmFkZW9uX2NwX3N0b3BfdCBzdG9wOwogCWludCByZXQ7Ci0JRFJNX0RFQlVHKCAiXG4iICk7CisJRFJNX0RFQlVHKCJcbiIpOwogCi0JTE9DS19URVNUX1dJVEhfUkVUVVJOKCBkZXYsIGZpbHAgKTsKKwlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxwKTsKIAotCURSTV9DT1BZX0ZST01fVVNFUl9JT0NUTCggc3RvcCwgKGRybV9yYWRlb25fY3Bfc3RvcF90IF9fdXNlciAqKWRhdGEsIHNpemVvZihzdG9wKSApOworCURSTV9DT1BZX0ZST01fVVNFUl9JT0NUTChzdG9wLCAoZHJtX3JhZGVvbl9jcF9zdG9wX3QgX191c2VyICopIGRhdGEsCisJCQkJIHNpemVvZihzdG9wKSk7CiAKIAlpZiAoIWRldl9wcml2LT5jcF9ydW5uaW5nKQogCQlyZXR1cm4gMDsKQEAgLTE3NDgsMzIgKzE3NTUsMzIgQEAKIAkvKiBGbHVzaCBhbnkgcGVuZGluZyBDUCBjb21tYW5kcy4gIFRoaXMgZW5zdXJlcyBhbnkgb3V0c3RhbmRpbmcKIAkgKiBjb21tYW5kcyBhcmUgZXhlY3R1dGVkIGJ5IHRoZSBlbmdpbmUgYmVmb3JlIHdlIHR1cm4gaXQgb2ZmLgogCSAqLwotCWlmICggc3RvcC5mbHVzaCApIHsKLQkJcmFkZW9uX2RvX2NwX2ZsdXNoKCBkZXZfcHJpdiApOworCWlmIChzdG9wLmZsdXNoKSB7CisJCXJhZGVvbl9kb19jcF9mbHVzaChkZXZfcHJpdik7CiAJfQogCiAJLyogSWYgd2UgZmFpbCB0byBtYWtlIHRoZSBlbmdpbmUgZ28gaWRsZSwgd2UgcmV0dXJuIGFuIGVycm9yCiAJICogY29kZSBzbyB0aGF0IHRoZSBEUk0gaW9jdGwgd3JhcHBlciBjYW4gdHJ5IGFnYWluLgogCSAqLwotCWlmICggc3RvcC5pZGxlICkgewotCQlyZXQgPSByYWRlb25fZG9fY3BfaWRsZSggZGV2X3ByaXYgKTsKLQkJaWYgKCByZXQgKSByZXR1cm4gcmV0OworCWlmIChzdG9wLmlkbGUpIHsKKwkJcmV0ID0gcmFkZW9uX2RvX2NwX2lkbGUoZGV2X3ByaXYpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKIAl9CiAKIAkvKiBGaW5hbGx5LCB3ZSBjYW4gdHVybiBvZmYgdGhlIENQLiAgSWYgdGhlIGVuZ2luZSBpc24ndCBpZGxlLAogCSAqIHdlIHdpbGwgZ2V0IHNvbWUgZHJvcHBlZCB0cmlhbmdsZXMgYXMgdGhleSB3b24ndCBiZSBmdWxseQogCSAqIHJlbmRlcmVkIGJlZm9yZSB0aGUgQ1AgaXMgc2h1dCBkb3duLgogCSAqLwotCXJhZGVvbl9kb19jcF9zdG9wKCBkZXZfcHJpdiApOworCXJhZGVvbl9kb19jcF9zdG9wKGRldl9wcml2KTsKIAogCS8qIFJlc2V0IHRoZSBlbmdpbmUgKi8KLQlyYWRlb25fZG9fZW5naW5lX3Jlc2V0KCBkZXYgKTsKKwlyYWRlb25fZG9fZW5naW5lX3Jlc2V0KGRldik7CiAKIAlyZXR1cm4gMDsKIH0KIAotCi12b2lkIHJhZGVvbl9kb19yZWxlYXNlKCBkcm1fZGV2aWNlX3QgKmRldiApCit2b2lkIHJhZGVvbl9kb19yZWxlYXNlKGRybV9kZXZpY2VfdCAqIGRldikKIHsKIAlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWludCBpLCByZXQ7CkBAIC0xNzgxLDcgKzE3ODgsNyBAQAogCWlmIChkZXZfcHJpdikgewogCQlpZiAoZGV2X3ByaXYtPmNwX3J1bm5pbmcpIHsKIAkJCS8qIFN0b3AgdGhlIGNwICovCi0JCQl3aGlsZSAoKHJldCA9IHJhZGVvbl9kb19jcF9pZGxlKCBkZXZfcHJpdiApKSAhPSAwKSB7CisJCQl3aGlsZSAoKHJldCA9IHJhZGVvbl9kb19jcF9pZGxlKGRldl9wcml2KSkgIT0gMCkgewogCQkJCURSTV9ERUJVRygicmFkZW9uX2RvX2NwX2lkbGUgJWRcbiIsIHJldCk7CiAjaWZkZWYgX19saW51eF9fCiAJCQkJc2NoZWR1bGUoKTsKQEAgLTE3ODksNDcgKzE3OTYsNDkgQEAKIAkJCQl0c2xlZXAoJnJldCwgUFpFUk8sICJyZG5yZWwiLCAxKTsKICNlbmRpZgogCQkJfQotCQkJcmFkZW9uX2RvX2NwX3N0b3AoIGRldl9wcml2ICk7Ci0JCQlyYWRlb25fZG9fZW5naW5lX3Jlc2V0KCBkZXYgKTsKKwkJCXJhZGVvbl9kb19jcF9zdG9wKGRldl9wcml2KTsKKwkJCXJhZGVvbl9kb19lbmdpbmVfcmVzZXQoZGV2KTsKIAkJfQogCiAJCS8qIERpc2FibGUgKmFsbCogaW50ZXJydXB0cyAqLwogCQlpZiAoZGV2X3ByaXYtPm1taW8pCS8qIHJlbW92ZSB0aGlzIGFmdGVyIHBlcm1hbmVudCBhZGRtYXBzICovCi0JCQlSQURFT05fV1JJVEUoIFJBREVPTl9HRU5fSU5UX0NOVEwsIDAgKTsKKwkJCVJBREVPTl9XUklURShSQURFT05fR0VOX0lOVF9DTlRMLCAwKTsKIAotCQlpZiAoZGV2X3ByaXYtPm1taW8pIHsvKiByZW1vdmUgYWxsIHN1cmZhY2VzICovCisJCWlmIChkZXZfcHJpdi0+bW1pbykgewkvKiByZW1vdmUgYWxsIHN1cmZhY2VzICovCiAJCQlmb3IgKGkgPSAwOyBpIDwgUkFERU9OX01BWF9TVVJGQUNFUzsgaSsrKSB7Ci0JCQkJUkFERU9OX1dSSVRFKFJBREVPTl9TVVJGQUNFMF9JTkZPICsgMTYqaSwgMCk7Ci0JCQkJUkFERU9OX1dSSVRFKFJBREVPTl9TVVJGQUNFMF9MT1dFUl9CT1VORCArIDE2KmksIDApOwotCQkJCVJBREVPTl9XUklURShSQURFT05fU1VSRkFDRTBfVVBQRVJfQk9VTkQgKyAxNippLCAwKTsKKwkJCQlSQURFT05fV1JJVEUoUkFERU9OX1NVUkZBQ0UwX0lORk8gKyAxNiAqIGksIDApOworCQkJCVJBREVPTl9XUklURShSQURFT05fU1VSRkFDRTBfTE9XRVJfQk9VTkQgKworCQkJCQkgICAgIDE2ICogaSwgMCk7CisJCQkJUkFERU9OX1dSSVRFKFJBREVPTl9TVVJGQUNFMF9VUFBFUl9CT1VORCArCisJCQkJCSAgICAgMTYgKiBpLCAwKTsKIAkJCX0KIAkJfQogCiAJCS8qIEZyZWUgbWVtb3J5IGhlYXAgc3RydWN0dXJlcyAqLwotCQlyYWRlb25fbWVtX3Rha2Vkb3duKCAmKGRldl9wcml2LT5nYXJ0X2hlYXApICk7Ci0JCXJhZGVvbl9tZW1fdGFrZWRvd24oICYoZGV2X3ByaXYtPmZiX2hlYXApICk7CisJCXJhZGVvbl9tZW1fdGFrZWRvd24oJihkZXZfcHJpdi0+Z2FydF9oZWFwKSk7CisJCXJhZGVvbl9tZW1fdGFrZWRvd24oJihkZXZfcHJpdi0+ZmJfaGVhcCkpOwogCiAJCS8qIGRlYWxsb2NhdGUga2VybmVsIHJlc291cmNlcyAqLwotCQlyYWRlb25fZG9fY2xlYW51cF9jcCggZGV2ICk7CisJCXJhZGVvbl9kb19jbGVhbnVwX2NwKGRldik7CiAJfQogfQogCiAvKiBKdXN0IHJlc2V0IHRoZSBDUCByaW5nLiAgQ2FsbGVkIGFzIHBhcnQgb2YgYW4gWCBTZXJ2ZXIgZW5naW5lIHJlc2V0LgogICovCi1pbnQgcmFkZW9uX2NwX3Jlc2V0KCBEUk1fSU9DVExfQVJHUyApCitpbnQgcmFkZW9uX2NwX3Jlc2V0KERSTV9JT0NUTF9BUkdTKQogewogCURSTV9ERVZJQ0U7CiAJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlEUk1fREVCVUcoICJcbiIgKTsKKwlEUk1fREVCVUcoIlxuIik7CiAKLQlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oIGRldiwgZmlscCApOworCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbHApOwogCi0JaWYgKCAhZGV2X3ByaXYgKSB7Ci0JCURSTV9ERUJVRyggIiVzIGNhbGxlZCBiZWZvcmUgaW5pdCBkb25lXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwlpZiAoIWRldl9wcml2KSB7CisJCURSTV9ERUJVRygiJXMgY2FsbGVkIGJlZm9yZSBpbml0IGRvbmVcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiAJfQogCi0JcmFkZW9uX2RvX2NwX3Jlc2V0KCBkZXZfcHJpdiApOworCXJhZGVvbl9kb19jcF9yZXNldChkZXZfcHJpdik7CiAKIAkvKiBUaGUgQ1AgaXMgbm8gbG9uZ2VyIHJ1bm5pbmcgYWZ0ZXIgYW4gZW5naW5lIHJlc2V0ICovCiAJZGV2X3ByaXYtPmNwX3J1bm5pbmcgPSAwOwpAQCAtMTgzNyw1MCArMTg0Niw0NyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgcmFkZW9uX2NwX2lkbGUoIERSTV9JT0NUTF9BUkdTICkKK2ludCByYWRlb25fY3BfaWRsZShEUk1fSU9DVExfQVJHUykKIHsKIAlEUk1fREVWSUNFOwogCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JRFJNX0RFQlVHKCAiXG4iICk7CisJRFJNX0RFQlVHKCJcbiIpOwogCi0JTE9DS19URVNUX1dJVEhfUkVUVVJOKCBkZXYsIGZpbHAgKTsKKwlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxwKTsKIAotCXJldHVybiByYWRlb25fZG9fY3BfaWRsZSggZGV2X3ByaXYgKTsKKwlyZXR1cm4gcmFkZW9uX2RvX2NwX2lkbGUoZGV2X3ByaXYpOwogfQogCiAvKiBBZGRlZCBieSBDaGFybCBQLiBCb3RoYSB0byBjYWxsIHJhZGVvbl9kb19yZXN1bWVfY3AoKS4KICAqLwotaW50IHJhZGVvbl9jcF9yZXN1bWUoIERSTV9JT0NUTF9BUkdTICkKK2ludCByYWRlb25fY3BfcmVzdW1lKERSTV9JT0NUTF9BUkdTKQogewogCURSTV9ERVZJQ0U7CiAKIAlyZXR1cm4gcmFkZW9uX2RvX3Jlc3VtZV9jcChkZXYpOwogfQogCi0KLWludCByYWRlb25fZW5naW5lX3Jlc2V0KCBEUk1fSU9DVExfQVJHUyApCitpbnQgcmFkZW9uX2VuZ2luZV9yZXNldChEUk1fSU9DVExfQVJHUykKIHsKIAlEUk1fREVWSUNFOwotCURSTV9ERUJVRyggIlxuIiApOworCURSTV9ERUJVRygiXG4iKTsKIAotCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTiggZGV2LCBmaWxwICk7CisJTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlscCk7CiAKLQlyZXR1cm4gcmFkZW9uX2RvX2VuZ2luZV9yZXNldCggZGV2ICk7CisJcmV0dXJuIHJhZGVvbl9kb19lbmdpbmVfcmVzZXQoZGV2KTsKIH0KIAotCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiBGdWxsc2NyZWVuIG1vZGUKICAqLwogCiAvKiBLVzogRGVwcmVjYXRlZCB0byBzYXkgdGhlIGxlYXN0OgogICovCi1pbnQgcmFkZW9uX2Z1bGxzY3JlZW4oIERSTV9JT0NUTF9BUkdTICkKK2ludCByYWRlb25fZnVsbHNjcmVlbihEUk1fSU9DVExfQVJHUykKIHsKIAlyZXR1cm4gMDsKIH0KIAotCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiBGcmVlbGlzdCBtYW5hZ2VtZW50CiAgKi8KQEAgLTE4ODksMjAgKzE4OTUsMjAgQEAKICAqICAgYnVmcyB1bnRpbCBmcmVlbGlzdCBjb2RlIGlzIHVzZWQuICBOb3RlIHRoaXMgaGlkZXMgYSBwcm9ibGVtIHdpdGgKICAqICAgdGhlIHNjcmF0Y2ggcmVnaXN0ZXIgKiAodXNlZCB0byBrZWVwIHRyYWNrIG9mIGxhc3QgYnVmZmVyCiAgKiAgIGNvbXBsZXRlZCkgYmVpbmcgd3JpdHRlbiB0byBiZWZvcmUgKiB0aGUgbGFzdCBidWZmZXIgaGFzIGFjdHVhbGx5Ci0gKiAgIGNvbXBsZXRlZCByZW5kZXJpbmcuICAKKyAqICAgY29tcGxldGVkIHJlbmRlcmluZy4KICAqCiAgKiBLVzogIEl0J3MgYWxzbyBhIGdvb2Qgd2F5IHRvIGZpbmQgZnJlZSBidWZmZXJzIHF1aWNrbHkuCiAgKgogICogS1c6IElkZWFsbHkgdGhpcyBsb29wIHdvdWxkbid0IGV4aXN0LCBhbmQgZnJlZWxpc3RfZ2V0IHdvdWxkbid0CiAgKiBzbGVlcC4gIEhvd2V2ZXIsIGJ1Z3MgaW4gb2xkZXIgdmVyc2lvbnMgb2YgcmFkZW9uX2FjY2VsLmMgbWVhbiB0aGF0CiAgKiB3ZSBlc3NlbnRpYWxseSBoYXZlIHRvIGRvIHRoaXMsIGVsc2Ugb2xkIGNsaWVudHMgd2lsbCBicmVhay4KLSAqIAorICoKICAqIEhvd2V2ZXIsIGl0IGRvZXMgbGVhdmUgb3BlbiBhIHBvdGVudGlhbCBkZWFkbG9jayB3aGVyZSBhbGwgdGhlCiAgKiBidWZmZXJzIGFyZSBoZWxkIGJ5IG90aGVyIGNsaWVudHMsIHdoaWNoIGNhbid0IHJlbGVhc2UgdGhlbSBiZWNhdXNlCi0gKiB0aGV5IGNhbid0IGdldCB0aGUgbG9jay4gIAorICogdGhleSBjYW4ndCBnZXQgdGhlIGxvY2suCiAgKi8KIAotZHJtX2J1Zl90ICpyYWRlb25fZnJlZWxpc3RfZ2V0KCBkcm1fZGV2aWNlX3QgKmRldiApCitkcm1fYnVmX3QgKnJhZGVvbl9mcmVlbGlzdF9nZXQoZHJtX2RldmljZV90ICogZGV2KQogewogCWRybV9kZXZpY2VfZG1hX3QgKmRtYSA9IGRldi0+ZG1hOwogCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CkBAIC0xOTExLDE5ICsxOTE3LDE5IEBACiAJaW50IGksIHQ7CiAJaW50IHN0YXJ0OwogCi0JaWYgKCArK2Rldl9wcml2LT5sYXN0X2J1ZiA+PSBkbWEtPmJ1Zl9jb3VudCApCisJaWYgKCsrZGV2X3ByaXYtPmxhc3RfYnVmID49IGRtYS0+YnVmX2NvdW50KQogCQlkZXZfcHJpdi0+bGFzdF9idWYgPSAwOwogCiAJc3RhcnQgPSBkZXZfcHJpdi0+bGFzdF9idWY7CiAKLQlmb3IgKCB0ID0gMCA7IHQgPCBkZXZfcHJpdi0+dXNlY190aW1lb3V0IDsgdCsrICkgewotCQl1MzIgZG9uZV9hZ2UgPSBHRVRfU0NSQVRDSCggMSApOwotCQlEUk1fREVCVUcoImRvbmVfYWdlID0gJWRcbiIsZG9uZV9hZ2UpOwotCQlmb3IgKCBpID0gc3RhcnQgOyBpIDwgZG1hLT5idWZfY291bnQgOyBpKysgKSB7CisJZm9yICh0ID0gMDsgdCA8IGRldl9wcml2LT51c2VjX3RpbWVvdXQ7IHQrKykgeworCQl1MzIgZG9uZV9hZ2UgPSBHRVRfU0NSQVRDSCgxKTsKKwkJRFJNX0RFQlVHKCJkb25lX2FnZSA9ICVkXG4iLCBkb25lX2FnZSk7CisJCWZvciAoaSA9IHN0YXJ0OyBpIDwgZG1hLT5idWZfY291bnQ7IGkrKykgewogCQkJYnVmID0gZG1hLT5idWZsaXN0W2ldOwogCQkJYnVmX3ByaXYgPSBidWYtPmRldl9wcml2YXRlOwotCQkJaWYgKCBidWYtPmZpbHAgPT0gMCB8fCAoYnVmLT5wZW5kaW5nICYmIAotCQkJCQkgICAgICAgYnVmX3ByaXYtPmFnZSA8PSBkb25lX2FnZSkgKSB7CisJCQlpZiAoYnVmLT5maWxwID09IDAgfHwgKGJ1Zi0+cGVuZGluZyAmJgorCQkJCQkgICAgICAgYnVmX3ByaXYtPmFnZSA8PSBkb25lX2FnZSkpIHsKIAkJCQlkZXZfcHJpdi0+c3RhdHMucmVxdWVzdGVkX2J1ZnMrKzsKIAkJCQlidWYtPnBlbmRpbmcgPSAwOwogCQkJCXJldHVybiBidWY7CkBAIC0xOTMyLDE2ICsxOTM4LDE3IEBACiAJCX0KIAogCQlpZiAodCkgewotCQkJRFJNX1VERUxBWSggMSApOworCQkJRFJNX1VERUxBWSgxKTsKIAkJCWRldl9wcml2LT5zdGF0cy5mcmVlbGlzdF9sb29wcysrOwogCQl9CiAJfQogCi0JRFJNX0RFQlVHKCAicmV0dXJuaW5nIE5VTEwhXG4iICk7CisJRFJNX0RFQlVHKCJyZXR1cm5pbmcgTlVMTCFcbiIpOwogCXJldHVybiBOVUxMOwogfQorCiAjaWYgMAotZHJtX2J1Zl90ICpyYWRlb25fZnJlZWxpc3RfZ2V0KCBkcm1fZGV2aWNlX3QgKmRldiApCitkcm1fYnVmX3QgKnJhZGVvbl9mcmVlbGlzdF9nZXQoZHJtX2RldmljZV90ICogZGV2KQogewogCWRybV9kZXZpY2VfZG1hX3QgKmRtYSA9IGRldi0+ZG1hOwogCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CkBAIC0xOTUxLDE4ICsxOTU4LDE4IEBACiAJaW50IHN0YXJ0OwogCXUzMiBkb25lX2FnZSA9IERSTV9SRUFEMzIoZGV2X3ByaXYtPnJpbmdfcnB0ciwgUkFERU9OX1NDUkFUQ0hPRkYoMSkpOwogCi0JaWYgKCArK2Rldl9wcml2LT5sYXN0X2J1ZiA+PSBkbWEtPmJ1Zl9jb3VudCApCisJaWYgKCsrZGV2X3ByaXYtPmxhc3RfYnVmID49IGRtYS0+YnVmX2NvdW50KQogCQlkZXZfcHJpdi0+bGFzdF9idWYgPSAwOwogCiAJc3RhcnQgPSBkZXZfcHJpdi0+bGFzdF9idWY7CiAJZGV2X3ByaXYtPnN0YXRzLmZyZWVsaXN0X2xvb3BzKys7Ci0JCi0JZm9yICggdCA9IDAgOyB0IDwgMiA7IHQrKyApIHsKLQkJZm9yICggaSA9IHN0YXJ0IDsgaSA8IGRtYS0+YnVmX2NvdW50IDsgaSsrICkgeworCisJZm9yICh0ID0gMDsgdCA8IDI7IHQrKykgeworCQlmb3IgKGkgPSBzdGFydDsgaSA8IGRtYS0+YnVmX2NvdW50OyBpKyspIHsKIAkJCWJ1ZiA9IGRtYS0+YnVmbGlzdFtpXTsKIAkJCWJ1Zl9wcml2ID0gYnVmLT5kZXZfcHJpdmF0ZTsKLQkJCWlmICggYnVmLT5maWxwID09IDAgfHwgKGJ1Zi0+cGVuZGluZyAmJiAKLQkJCQkJICAgICAgIGJ1Zl9wcml2LT5hZ2UgPD0gZG9uZV9hZ2UpICkgeworCQkJaWYgKGJ1Zi0+ZmlscCA9PSAwIHx8IChidWYtPnBlbmRpbmcgJiYKKwkJCQkJICAgICAgIGJ1Zl9wcml2LT5hZ2UgPD0gZG9uZV9hZ2UpKSB7CiAJCQkJZGV2X3ByaXYtPnN0YXRzLnJlcXVlc3RlZF9idWZzKys7CiAJCQkJYnVmLT5wZW5kaW5nID0gMDsKIAkJCQlyZXR1cm4gYnVmOwpAQCAtMTk3NSw3MyArMTk4Miw3NCBAQAogfQogI2VuZGlmCiAKLXZvaWQgcmFkZW9uX2ZyZWVsaXN0X3Jlc2V0KCBkcm1fZGV2aWNlX3QgKmRldiApCit2b2lkIHJhZGVvbl9mcmVlbGlzdF9yZXNldChkcm1fZGV2aWNlX3QgKiBkZXYpCiB7CiAJZHJtX2RldmljZV9kbWFfdCAqZG1hID0gZGV2LT5kbWE7CiAJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlpbnQgaTsKIAogCWRldl9wcml2LT5sYXN0X2J1ZiA9IDA7Ci0JZm9yICggaSA9IDAgOyBpIDwgZG1hLT5idWZfY291bnQgOyBpKysgKSB7CisJZm9yIChpID0gMDsgaSA8IGRtYS0+YnVmX2NvdW50OyBpKyspIHsKIAkJZHJtX2J1Zl90ICpidWYgPSBkbWEtPmJ1Zmxpc3RbaV07CiAJCWRybV9yYWRlb25fYnVmX3ByaXZfdCAqYnVmX3ByaXYgPSBidWYtPmRldl9wcml2YXRlOwogCQlidWZfcHJpdi0+YWdlID0gMDsKIAl9CiB9CiAKLQogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogQ1AgY29tbWFuZCBzdWJtaXNzaW9uCiAgKi8KIAotaW50IHJhZGVvbl93YWl0X3JpbmcoIGRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiwgaW50IG4gKQoraW50IHJhZGVvbl93YWl0X3JpbmcoZHJtX3JhZGVvbl9wcml2YXRlX3QgKiBkZXZfcHJpdiwgaW50IG4pCiB7CiAJZHJtX3JhZGVvbl9yaW5nX2J1ZmZlcl90ICpyaW5nID0gJmRldl9wcml2LT5yaW5nOwogCWludCBpOwotCXUzMiBsYXN0X2hlYWQgPSBHRVRfUklOR19IRUFEKCBkZXZfcHJpdiApOworCXUzMiBsYXN0X2hlYWQgPSBHRVRfUklOR19IRUFEKGRldl9wcml2KTsKIAotCWZvciAoIGkgPSAwIDsgaSA8IGRldl9wcml2LT51c2VjX3RpbWVvdXQgOyBpKysgKSB7Ci0JCXUzMiBoZWFkID0gR0VUX1JJTkdfSEVBRCggZGV2X3ByaXYgKTsKKwlmb3IgKGkgPSAwOyBpIDwgZGV2X3ByaXYtPnVzZWNfdGltZW91dDsgaSsrKSB7CisJCXUzMiBoZWFkID0gR0VUX1JJTkdfSEVBRChkZXZfcHJpdik7CiAKIAkJcmluZy0+c3BhY2UgPSAoaGVhZCAtIHJpbmctPnRhaWwpICogc2l6ZW9mKHUzMik7Ci0JCWlmICggcmluZy0+c3BhY2UgPD0gMCApCisJCWlmIChyaW5nLT5zcGFjZSA8PSAwKQogCQkJcmluZy0+c3BhY2UgKz0gcmluZy0+c2l6ZTsKLQkJaWYgKCByaW5nLT5zcGFjZSA+IG4gKQorCQlpZiAocmluZy0+c3BhY2UgPiBuKQogCQkJcmV0dXJuIDA7Ci0JCQorCiAJCWRldl9wcml2LT5zdGF0cy5ib3hlcyB8PSBSQURFT05fQk9YX1dBSVRfSURMRTsKIAogCQlpZiAoaGVhZCAhPSBsYXN0X2hlYWQpCiAJCQlpID0gMDsKIAkJbGFzdF9oZWFkID0gaGVhZDsKIAotCQlEUk1fVURFTEFZKCAxICk7CisJCURSTV9VREVMQVkoMSk7CiAJfQogCiAJLyogRklYTUU6IFRoaXMgcmV0dXJuIHZhbHVlIGlzIGlnbm9yZWQgaW4gdGhlIEJFR0lOX1JJTkcgbWFjcm8hICovCiAjaWYgUkFERU9OX0ZJRk9fREVCVUcKLQlyYWRlb25fc3RhdHVzKCBkZXZfcHJpdiApOwotCURSTV9FUlJPUiggImZhaWxlZCFcbiIgKTsKKwlyYWRlb25fc3RhdHVzKGRldl9wcml2KTsKKwlEUk1fRVJST1IoImZhaWxlZCFcbiIpOwogI2VuZGlmCiAJcmV0dXJuIERSTV9FUlIoRUJVU1kpOwogfQogCi1zdGF0aWMgaW50IHJhZGVvbl9jcF9nZXRfYnVmZmVycyggRFJNRklMRSBmaWxwLCBkcm1fZGV2aWNlX3QgKmRldiwgZHJtX2RtYV90ICpkICkKK3N0YXRpYyBpbnQgcmFkZW9uX2NwX2dldF9idWZmZXJzKERSTUZJTEUgZmlscCwgZHJtX2RldmljZV90ICogZGV2LAorCQkJCSBkcm1fZG1hX3QgKiBkKQogewogCWludCBpOwogCWRybV9idWZfdCAqYnVmOwogCi0JZm9yICggaSA9IGQtPmdyYW50ZWRfY291bnQgOyBpIDwgZC0+cmVxdWVzdF9jb3VudCA7IGkrKyApIHsKLQkJYnVmID0gcmFkZW9uX2ZyZWVsaXN0X2dldCggZGV2ICk7Ci0JCWlmICggIWJ1ZiApIHJldHVybiBEUk1fRVJSKEVCVVNZKTsgLyogTk9URTogYnJva2VuIGNsaWVudCAqLworCWZvciAoaSA9IGQtPmdyYW50ZWRfY291bnQ7IGkgPCBkLT5yZXF1ZXN0X2NvdW50OyBpKyspIHsKKwkJYnVmID0gcmFkZW9uX2ZyZWVsaXN0X2dldChkZXYpOworCQlpZiAoIWJ1ZikKKwkJCXJldHVybiBEUk1fRVJSKEVCVVNZKTsJLyogTk9URTogYnJva2VuIGNsaWVudCAqLwogCiAJCWJ1Zi0+ZmlscCA9IGZpbHA7CiAKLQkJaWYgKCBEUk1fQ09QWV9UT19VU0VSKCAmZC0+cmVxdWVzdF9pbmRpY2VzW2ldLCAmYnVmLT5pZHgsCi0JCQkJICAgc2l6ZW9mKGJ1Zi0+aWR4KSApICkKKwkJaWYgKERSTV9DT1BZX1RPX1VTRVIoJmQtPnJlcXVlc3RfaW5kaWNlc1tpXSwgJmJ1Zi0+aWR4LAorCQkJCSAgICAgc2l6ZW9mKGJ1Zi0+aWR4KSkpCiAJCQlyZXR1cm4gRFJNX0VSUihFRkFVTFQpOwotCQlpZiAoIERSTV9DT1BZX1RPX1VTRVIoICZkLT5yZXF1ZXN0X3NpemVzW2ldLCAmYnVmLT50b3RhbCwKLQkJCQkgICBzaXplb2YoYnVmLT50b3RhbCkgKSApCisJCWlmIChEUk1fQ09QWV9UT19VU0VSKCZkLT5yZXF1ZXN0X3NpemVzW2ldLCAmYnVmLT50b3RhbCwKKwkJCQkgICAgIHNpemVvZihidWYtPnRvdGFsKSkpCiAJCQlyZXR1cm4gRFJNX0VSUihFRkFVTFQpOwogCiAJCWQtPmdyYW50ZWRfY291bnQrKzsKQEAgLTIwNDksNyArMjA1Nyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCByYWRlb25fY3BfYnVmZmVycyggRFJNX0lPQ1RMX0FSR1MgKQoraW50IHJhZGVvbl9jcF9idWZmZXJzKERSTV9JT0NUTF9BUkdTKQogewogCURSTV9ERVZJQ0U7CiAJZHJtX2RldmljZV9kbWFfdCAqZG1hID0gZGV2LT5kbWE7CkBAIC0yMDU3LDMzICsyMDY1LDMzIEBACiAJZHJtX2RtYV90IF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWRhdGE7CiAJZHJtX2RtYV90IGQ7CiAKLQlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oIGRldiwgZmlscCApOworCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbHApOwogCi0JRFJNX0NPUFlfRlJPTV9VU0VSX0lPQ1RMKCBkLCBhcmdwLCBzaXplb2YoZCkgKTsKKwlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwoZCwgYXJncCwgc2l6ZW9mKGQpKTsKIAogCS8qIFBsZWFzZSBkb24ndCBzZW5kIHVzIGJ1ZmZlcnMuCiAJICovCi0JaWYgKCBkLnNlbmRfY291bnQgIT0gMCApIHsKLQkJRFJNX0VSUk9SKCAiUHJvY2VzcyAlZCB0cnlpbmcgdG8gc2VuZCAlZCBidWZmZXJzIHZpYSBkcm1ETUFcbiIsCi0JCQkgICBEUk1fQ1VSUkVOVFBJRCwgZC5zZW5kX2NvdW50ICk7CisJaWYgKGQuc2VuZF9jb3VudCAhPSAwKSB7CisJCURSTV9FUlJPUigiUHJvY2VzcyAlZCB0cnlpbmcgdG8gc2VuZCAlZCBidWZmZXJzIHZpYSBkcm1ETUFcbiIsCisJCQkgIERSTV9DVVJSRU5UUElELCBkLnNlbmRfY291bnQpOwogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCX0KIAogCS8qIFdlJ2xsIHNlbmQgeW91IGJ1ZmZlcnMuCiAJICovCi0JaWYgKCBkLnJlcXVlc3RfY291bnQgPCAwIHx8IGQucmVxdWVzdF9jb3VudCA+IGRtYS0+YnVmX2NvdW50ICkgewotCQlEUk1fRVJST1IoICJQcm9jZXNzICVkIHRyeWluZyB0byBnZXQgJWQgYnVmZmVycyAob2YgJWQgbWF4KVxuIiwKLQkJCSAgIERSTV9DVVJSRU5UUElELCBkLnJlcXVlc3RfY291bnQsIGRtYS0+YnVmX2NvdW50ICk7CisJaWYgKGQucmVxdWVzdF9jb3VudCA8IDAgfHwgZC5yZXF1ZXN0X2NvdW50ID4gZG1hLT5idWZfY291bnQpIHsKKwkJRFJNX0VSUk9SKCJQcm9jZXNzICVkIHRyeWluZyB0byBnZXQgJWQgYnVmZmVycyAob2YgJWQgbWF4KVxuIiwKKwkJCSAgRFJNX0NVUlJFTlRQSUQsIGQucmVxdWVzdF9jb3VudCwgZG1hLT5idWZfY291bnQpOwogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCX0KIAogCWQuZ3JhbnRlZF9jb3VudCA9IDA7CiAKLQlpZiAoIGQucmVxdWVzdF9jb3VudCApIHsKLQkJcmV0ID0gcmFkZW9uX2NwX2dldF9idWZmZXJzKCBmaWxwLCBkZXYsICZkICk7CisJaWYgKGQucmVxdWVzdF9jb3VudCkgeworCQlyZXQgPSByYWRlb25fY3BfZ2V0X2J1ZmZlcnMoZmlscCwgZGV2LCAmZCk7CiAJfQogCi0JRFJNX0NPUFlfVE9fVVNFUl9JT0NUTCggYXJncCwgZCwgc2l6ZW9mKGQpICk7CisJRFJNX0NPUFlfVE9fVVNFUl9JT0NUTChhcmdwLCBkLCBzaXplb2YoZCkpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTIxMTAsMTMgKzIxMTgsMTMgQEAKIAkJZGV2X3ByaXYtPmZsYWdzIHw9IENISVBfSEFTX0hJRVJaOwogCQlicmVhazsKIAlkZWZhdWx0OgotCS8qIGFsbCBvdGhlciBjaGlwcyBoYXZlIG5vIGhpZXJhcmNoaWNhbCB6IGJ1ZmZlciAqLworCQkvKiBhbGwgb3RoZXIgY2hpcHMgaGF2ZSBubyBoaWVyYXJjaGljYWwgeiBidWZmZXIgKi8KIAkJYnJlYWs7CiAJfQogCiAJaWYgKGRybV9kZXZpY2VfaXNfYWdwKGRldikpCiAJCWRldl9wcml2LT5mbGFncyB8PSBDSElQX0lTX0FHUDsKLQkKKwogCWlmIChkcm1fZGV2aWNlX2lzX3BjaWUoZGV2KSkKIAkJZGV2X3ByaXYtPmZsYWdzIHw9IENISVBfSVNfUENJRTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9yYWRlb25fZHJtLmggYi9kcml2ZXJzL2NoYXIvZHJtL3JhZGVvbl9kcm0uaAppbmRleCBkZDUyNjYxLi4xY2Q4MWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL3JhZGVvbl9kcm0uaAorKysgYi9kcml2ZXJzL2NoYXIvZHJtL3JhZGVvbl9kcm0uaApAQCAtNTcsNzggKzU3LDc3IEBACiAjZGVmaW5lIFJBREVPTl9VUExPQURfVEVYMElNQUdFUwkweDAwMDAxMDAwCiAjZGVmaW5lIFJBREVPTl9VUExPQURfVEVYMUlNQUdFUwkweDAwMDAyMDAwCiAjZGVmaW5lIFJBREVPTl9VUExPQURfVEVYMklNQUdFUwkweDAwMDA0MDAwCi0jZGVmaW5lIFJBREVPTl9VUExPQURfQ0xJUFJFQ1RTCQkweDAwMDA4MDAwIC8qIGhhbmRsZWQgY2xpZW50LXNpZGUgKi8KKyNkZWZpbmUgUkFERU9OX1VQTE9BRF9DTElQUkVDVFMJCTB4MDAwMDgwMDAJLyogaGFuZGxlZCBjbGllbnQtc2lkZSAqLwogI2RlZmluZSBSQURFT05fUkVRVUlSRV9RVUlFU0NFTkNFCTB4MDAwMTAwMDAKLSNkZWZpbmUgUkFERU9OX1VQTE9BRF9aQklBUwkJMHgwMDAyMDAwMCAvKiB2ZXJzaW9uIDEuMiBhbmQgbmV3ZXIgKi8KKyNkZWZpbmUgUkFERU9OX1VQTE9BRF9aQklBUwkJMHgwMDAyMDAwMAkvKiB2ZXJzaW9uIDEuMiBhbmQgbmV3ZXIgKi8KICNkZWZpbmUgUkFERU9OX1VQTE9BRF9BTEwJCTB4MDAzZWZmZmYKICNkZWZpbmUgUkFERU9OX1VQTE9BRF9DT05URVhUX0FMTCAgICAgICAweDAwM2UwMWZmCiAKLQogLyogTmV3IHN0eWxlIHBlci1wYWNrZXQgaWRlbnRpZmllcnMgZm9yIHVzZSBpbiBjbWRfYnVmZmVyIGlvY3RsIHdpdGgKICAqIHRoZSBSQURFT05fRU1JVF9QQUNLRVQgY29tbWFuZC4gIENvbW1lbnRzIHJlbGF0ZSBuZXcgcGFja2V0cyB0byBvbGQKICAqIHN0YXRlIGJpdHMgYW5kIHRoZSBwYWNrZXQgc2l6ZToKICAqLwotI2RlZmluZSBSQURFT05fRU1JVF9QUF9NSVNDICAgICAgICAgICAgICAgICAgICAgICAgIDAgLyogY29udGV4dC83ICovCi0jZGVmaW5lIFJBREVPTl9FTUlUX1BQX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgMSAvKiBjb250ZXh0LzMgKi8KLSNkZWZpbmUgUkFERU9OX0VNSVRfUkIzRF9DT0xPUlBJVENIICAgICAgICAgICAgICAgICAyIC8qIGNvbnRleHQvMSAqLwotI2RlZmluZSBSQURFT05fRU1JVF9SRV9MSU5FX1BBVFRFUk4gICAgICAgICAgICAgICAgIDMgLyogbGluZS8yICovCi0jZGVmaW5lIFJBREVPTl9FTUlUX1NFX0xJTkVfV0lEVEggICAgICAgICAgICAgICAgICAgNCAvKiBsaW5lLzEgKi8KLSNkZWZpbmUgUkFERU9OX0VNSVRfUFBfTFVNX01BVFJJWCAgICAgICAgICAgICAgICAgICA1IC8qIGJ1bXBtYXAvMSAqLwotI2RlZmluZSBSQURFT05fRU1JVF9QUF9ST1RfTUFUUklYXzAgICAgICAgICAgICAgICAgIDYgLyogYnVtcG1hcC8yICovCi0jZGVmaW5lIFJBREVPTl9FTUlUX1JCM0RfU1RFTkNJTFJFRk1BU0sgICAgICAgICAgICAgNyAvKiBtYXNrcy8zICovCi0jZGVmaW5lIFJBREVPTl9FTUlUX1NFX1ZQT1JUX1hTQ0FMRSAgICAgICAgICAgICAgICAgOCAvKiB2aWV3cG9ydC82ICovCi0jZGVmaW5lIFJBREVPTl9FTUlUX1NFX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgOSAvKiBzZXR1cC8yICovCi0jZGVmaW5lIFJBREVPTl9FTUlUX1NFX0NOVExfU1RBVFVTICAgICAgICAgICAgICAgICAgMTAgLyogc2V0dXAvMSAqLwotI2RlZmluZSBSQURFT05fRU1JVF9SRV9NSVNDICAgICAgICAgICAgICAgICAgICAgICAgIDExIC8qIG1pc2MvMSAqLwotI2RlZmluZSBSQURFT05fRU1JVF9QUF9UWEZJTFRFUl8wICAgICAgICAgICAgICAgICAgIDEyIC8qIHRleDAvNiAqLwotI2RlZmluZSBSQURFT05fRU1JVF9QUF9CT1JERVJfQ09MT1JfMCAgICAgICAgICAgICAgIDEzIC8qIHRleDAvMSAqLwotI2RlZmluZSBSQURFT05fRU1JVF9QUF9UWEZJTFRFUl8xICAgICAgICAgICAgICAgICAgIDE0IC8qIHRleDEvNiAqLwotI2RlZmluZSBSQURFT05fRU1JVF9QUF9CT1JERVJfQ09MT1JfMSAgICAgICAgICAgICAgIDE1IC8qIHRleDEvMSAqLwotI2RlZmluZSBSQURFT05fRU1JVF9QUF9UWEZJTFRFUl8yICAgICAgICAgICAgICAgICAgIDE2IC8qIHRleDIvNiAqLwotI2RlZmluZSBSQURFT05fRU1JVF9QUF9CT1JERVJfQ09MT1JfMiAgICAgICAgICAgICAgIDE3IC8qIHRleDIvMSAqLwotI2RlZmluZSBSQURFT05fRU1JVF9TRV9aQklBU19GQUNUT1IgICAgICAgICAgICAgICAgIDE4IC8qIHpiaWFzLzIgKi8KLSNkZWZpbmUgUkFERU9OX0VNSVRfU0VfVENMX09VVFBVVF9WVFhfRk1UICAgICAgICAgICAxOSAvKiB0Y2wvMTEgKi8KLSNkZWZpbmUgUkFERU9OX0VNSVRfU0VfVENMX01BVEVSSUFMX0VNTUlTU0lWRV9SRUQgICAyMCAvKiBtYXRlcmlhbC8xNyAqLwotI2RlZmluZSBSMjAwX0VNSVRfUFBfVFhDQkxFTkRfMCAgICAgICAgICAgICAgICAgICAgIDIxIC8qIHRleDAvNCAqLwotI2RlZmluZSBSMjAwX0VNSVRfUFBfVFhDQkxFTkRfMSAgICAgICAgICAgICAgICAgICAgIDIyIC8qIHRleDEvNCAqLwotI2RlZmluZSBSMjAwX0VNSVRfUFBfVFhDQkxFTkRfMiAgICAgICAgICAgICAgICAgICAgIDIzIC8qIHRleDIvNCAqLwotI2RlZmluZSBSMjAwX0VNSVRfUFBfVFhDQkxFTkRfMyAgICAgICAgICAgICAgICAgICAgIDI0IC8qIHRleDMvNCAqLwotI2RlZmluZSBSMjAwX0VNSVRfUFBfVFhDQkxFTkRfNCAgICAgICAgICAgICAgICAgICAgIDI1IC8qIHRleDQvNCAqLwotI2RlZmluZSBSMjAwX0VNSVRfUFBfVFhDQkxFTkRfNSAgICAgICAgICAgICAgICAgICAgIDI2IC8qIHRleDUvNCAqLwotI2RlZmluZSBSMjAwX0VNSVRfUFBfVFhDQkxFTkRfNiAgICAgICAgICAgICAgICAgICAgIDI3IC8qIC80ICovCi0jZGVmaW5lIFIyMDBfRU1JVF9QUF9UWENCTEVORF83ICAgICAgICAgICAgICAgICAgICAgMjggLyogLzQgKi8KLSNkZWZpbmUgUjIwMF9FTUlUX1RDTF9MSUdIVF9NT0RFTF9DVExfMCAgICAgICAgICAgICAyOSAvKiB0Y2wvNyAqLwotI2RlZmluZSBSMjAwX0VNSVRfVEZBQ1RPUl8wICAgICAgICAgICAgICAgICAgICAgICAgIDMwIC8qIHRmLzcgKi8KLSNkZWZpbmUgUjIwMF9FTUlUX1ZUWF9GTVRfMCAgICAgICAgICAgICAgICAgICAgICAgICAzMSAvKiB2dHgvNSAqLwotI2RlZmluZSBSMjAwX0VNSVRfVkFQX0NUTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyIC8qIHZhcC8xICovCi0jZGVmaW5lIFIyMDBfRU1JVF9NQVRSSVhfU0VMRUNUXzAgICAgICAgICAgICAgICAgICAgMzMgLyogbXNsLzUgKi8KLSNkZWZpbmUgUjIwMF9FTUlUX1RFWF9QUk9DX0NUTF8yICAgICAgICAgICAgICAgICAgICAzNCAvKiB0Y2cvNSAqLwotI2RlZmluZSBSMjAwX0VNSVRfVENMX1VDUF9WRVJUX0JMRU5EX0NUTCAgICAgICAgICAgIDM1IC8qIHRjbC8xICovCi0jZGVmaW5lIFIyMDBfRU1JVF9QUF9UWEZJTFRFUl8wICAgICAgICAgICAgICAgICAgICAgMzYgLyogdGV4MC82ICovCi0jZGVmaW5lIFIyMDBfRU1JVF9QUF9UWEZJTFRFUl8xICAgICAgICAgICAgICAgICAgICAgMzcgLyogdGV4MS82ICovCi0jZGVmaW5lIFIyMDBfRU1JVF9QUF9UWEZJTFRFUl8yICAgICAgICAgICAgICAgICAgICAgMzggLyogdGV4Mi82ICovCi0jZGVmaW5lIFIyMDBfRU1JVF9QUF9UWEZJTFRFUl8zICAgICAgICAgICAgICAgICAgICAgMzkgLyogdGV4My82ICovCi0jZGVmaW5lIFIyMDBfRU1JVF9QUF9UWEZJTFRFUl80ICAgICAgICAgICAgICAgICAgICAgNDAgLyogdGV4NC82ICovCi0jZGVmaW5lIFIyMDBfRU1JVF9QUF9UWEZJTFRFUl81ICAgICAgICAgICAgICAgICAgICAgNDEgLyogdGV4NS82ICovCi0jZGVmaW5lIFIyMDBfRU1JVF9QUF9UWE9GRlNFVF8wICAgICAgICAgICAgICAgICAgICAgNDIgLyogdGV4MC8xICovCi0jZGVmaW5lIFIyMDBfRU1JVF9QUF9UWE9GRlNFVF8xICAgICAgICAgICAgICAgICAgICAgNDMgLyogdGV4MS8xICovCi0jZGVmaW5lIFIyMDBfRU1JVF9QUF9UWE9GRlNFVF8yICAgICAgICAgICAgICAgICAgICAgNDQgLyogdGV4Mi8xICovCi0jZGVmaW5lIFIyMDBfRU1JVF9QUF9UWE9GRlNFVF8zICAgICAgICAgICAgICAgICAgICAgNDUgLyogdGV4My8xICovCi0jZGVmaW5lIFIyMDBfRU1JVF9QUF9UWE9GRlNFVF80ICAgICAgICAgICAgICAgICAgICAgNDYgLyogdGV4NC8xICovCi0jZGVmaW5lIFIyMDBfRU1JVF9QUF9UWE9GRlNFVF81ICAgICAgICAgICAgICAgICAgICAgNDcgLyogdGV4NS8xICovCi0jZGVmaW5lIFIyMDBfRU1JVF9WVEVfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgNDggLyogdnRlLzEgKi8KLSNkZWZpbmUgUjIwMF9FTUlUX09VVFBVVF9WVFhfQ09NUF9TRUwgICAgICAgICAgICAgICA0OSAvKiB2dHgvMSAqLwotI2RlZmluZSBSMjAwX0VNSVRfUFBfVEFNX0RFQlVHMyAgICAgICAgICAgICAgICAgICAgIDUwIC8qIHRhbS8xICovCi0jZGVmaW5lIFIyMDBfRU1JVF9QUF9DTlRMX1ggICAgICAgICAgICAgICAgICAgICAgICAgNTEgLyogY3N0LzEgKi8KLSNkZWZpbmUgUjIwMF9FTUlUX1JCM0RfREVQVEhYWV9PRkZTRVQgICAgICAgICAgICAgICA1MiAvKiBjc3QvMSAqLwotI2RlZmluZSBSMjAwX0VNSVRfUkVfQVVYX1NDSVNTT1JfQ05UTCAgICAgICAgICAgICAgIDUzIC8qIGNzdC8xICovCi0jZGVmaW5lIFIyMDBfRU1JVF9SRV9TQ0lTU09SX1RMXzAgICAgICAgICAgICAgICAgICAgNTQgLyogY3N0LzIgKi8KLSNkZWZpbmUgUjIwMF9FTUlUX1JFX1NDSVNTT1JfVExfMSAgICAgICAgICAgICAgICAgICA1NSAvKiBjc3QvMiAqLwotI2RlZmluZSBSMjAwX0VNSVRfUkVfU0NJU1NPUl9UTF8yICAgICAgICAgICAgICAgICAgIDU2IC8qIGNzdC8yICovCi0jZGVmaW5lIFIyMDBfRU1JVF9TRV9WQVBfQ05UTF9TVEFUVVMgICAgICAgICAgICAgICAgNTcgLyogY3N0LzEgKi8KLSNkZWZpbmUgUjIwMF9FTUlUX1NFX1ZUWF9TVEFURV9DTlRMICAgICAgICAgICAgICAgICA1OCAvKiBjc3QvMSAqLwotI2RlZmluZSBSMjAwX0VNSVRfUkVfUE9JTlRTSVpFICAgICAgICAgICAgICAgICAgICAgIDU5IC8qIGNzdC8xICovCi0jZGVmaW5lIFIyMDBfRU1JVF9UQ0xfSU5QVVRfVlRYX1ZFQ1RPUl9BRERSXzAgICAgICAgNjAgLyogY3N0LzQgKi8KKyNkZWZpbmUgUkFERU9OX0VNSVRfUFBfTUlTQyAgICAgICAgICAgICAgICAgICAgICAgICAwCS8qIGNvbnRleHQvNyAqLworI2RlZmluZSBSQURFT05fRU1JVF9QUF9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgIDEJLyogY29udGV4dC8zICovCisjZGVmaW5lIFJBREVPTl9FTUlUX1JCM0RfQ09MT1JQSVRDSCAgICAgICAgICAgICAgICAgMgkvKiBjb250ZXh0LzEgKi8KKyNkZWZpbmUgUkFERU9OX0VNSVRfUkVfTElORV9QQVRURVJOICAgICAgICAgICAgICAgICAzCS8qIGxpbmUvMiAqLworI2RlZmluZSBSQURFT05fRU1JVF9TRV9MSU5FX1dJRFRIICAgICAgICAgICAgICAgICAgIDQJLyogbGluZS8xICovCisjZGVmaW5lIFJBREVPTl9FTUlUX1BQX0xVTV9NQVRSSVggICAgICAgICAgICAgICAgICAgNQkvKiBidW1wbWFwLzEgKi8KKyNkZWZpbmUgUkFERU9OX0VNSVRfUFBfUk9UX01BVFJJWF8wICAgICAgICAgICAgICAgICA2CS8qIGJ1bXBtYXAvMiAqLworI2RlZmluZSBSQURFT05fRU1JVF9SQjNEX1NURU5DSUxSRUZNQVNLICAgICAgICAgICAgIDcJLyogbWFza3MvMyAqLworI2RlZmluZSBSQURFT05fRU1JVF9TRV9WUE9SVF9YU0NBTEUgICAgICAgICAgICAgICAgIDgJLyogdmlld3BvcnQvNiAqLworI2RlZmluZSBSQURFT05fRU1JVF9TRV9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgIDkJLyogc2V0dXAvMiAqLworI2RlZmluZSBSQURFT05fRU1JVF9TRV9DTlRMX1NUQVRVUyAgICAgICAgICAgICAgICAgIDEwCS8qIHNldHVwLzEgKi8KKyNkZWZpbmUgUkFERU9OX0VNSVRfUkVfTUlTQyAgICAgICAgICAgICAgICAgICAgICAgICAxMQkvKiBtaXNjLzEgKi8KKyNkZWZpbmUgUkFERU9OX0VNSVRfUFBfVFhGSUxURVJfMCAgICAgICAgICAgICAgICAgICAxMgkvKiB0ZXgwLzYgKi8KKyNkZWZpbmUgUkFERU9OX0VNSVRfUFBfQk9SREVSX0NPTE9SXzAgICAgICAgICAgICAgICAxMwkvKiB0ZXgwLzEgKi8KKyNkZWZpbmUgUkFERU9OX0VNSVRfUFBfVFhGSUxURVJfMSAgICAgICAgICAgICAgICAgICAxNAkvKiB0ZXgxLzYgKi8KKyNkZWZpbmUgUkFERU9OX0VNSVRfUFBfQk9SREVSX0NPTE9SXzEgICAgICAgICAgICAgICAxNQkvKiB0ZXgxLzEgKi8KKyNkZWZpbmUgUkFERU9OX0VNSVRfUFBfVFhGSUxURVJfMiAgICAgICAgICAgICAgICAgICAxNgkvKiB0ZXgyLzYgKi8KKyNkZWZpbmUgUkFERU9OX0VNSVRfUFBfQk9SREVSX0NPTE9SXzIgICAgICAgICAgICAgICAxNwkvKiB0ZXgyLzEgKi8KKyNkZWZpbmUgUkFERU9OX0VNSVRfU0VfWkJJQVNfRkFDVE9SICAgICAgICAgICAgICAgICAxOAkvKiB6Ymlhcy8yICovCisjZGVmaW5lIFJBREVPTl9FTUlUX1NFX1RDTF9PVVRQVVRfVlRYX0ZNVCAgICAgICAgICAgMTkJLyogdGNsLzExICovCisjZGVmaW5lIFJBREVPTl9FTUlUX1NFX1RDTF9NQVRFUklBTF9FTU1JU1NJVkVfUkVEICAgMjAJLyogbWF0ZXJpYWwvMTcgKi8KKyNkZWZpbmUgUjIwMF9FTUlUX1BQX1RYQ0JMRU5EXzAgICAgICAgICAgICAgICAgICAgICAyMQkvKiB0ZXgwLzQgKi8KKyNkZWZpbmUgUjIwMF9FTUlUX1BQX1RYQ0JMRU5EXzEgICAgICAgICAgICAgICAgICAgICAyMgkvKiB0ZXgxLzQgKi8KKyNkZWZpbmUgUjIwMF9FTUlUX1BQX1RYQ0JMRU5EXzIgICAgICAgICAgICAgICAgICAgICAyMwkvKiB0ZXgyLzQgKi8KKyNkZWZpbmUgUjIwMF9FTUlUX1BQX1RYQ0JMRU5EXzMgICAgICAgICAgICAgICAgICAgICAyNAkvKiB0ZXgzLzQgKi8KKyNkZWZpbmUgUjIwMF9FTUlUX1BQX1RYQ0JMRU5EXzQgICAgICAgICAgICAgICAgICAgICAyNQkvKiB0ZXg0LzQgKi8KKyNkZWZpbmUgUjIwMF9FTUlUX1BQX1RYQ0JMRU5EXzUgICAgICAgICAgICAgICAgICAgICAyNgkvKiB0ZXg1LzQgKi8KKyNkZWZpbmUgUjIwMF9FTUlUX1BQX1RYQ0JMRU5EXzYgICAgICAgICAgICAgICAgICAgICAyNwkvKiAvNCAqLworI2RlZmluZSBSMjAwX0VNSVRfUFBfVFhDQkxFTkRfNyAgICAgICAgICAgICAgICAgICAgIDI4CS8qIC80ICovCisjZGVmaW5lIFIyMDBfRU1JVF9UQ0xfTElHSFRfTU9ERUxfQ1RMXzAgICAgICAgICAgICAgMjkJLyogdGNsLzcgKi8KKyNkZWZpbmUgUjIwMF9FTUlUX1RGQUNUT1JfMCAgICAgICAgICAgICAgICAgICAgICAgICAzMAkvKiB0Zi83ICovCisjZGVmaW5lIFIyMDBfRU1JVF9WVFhfRk1UXzAgICAgICAgICAgICAgICAgICAgICAgICAgMzEJLyogdnR4LzUgKi8KKyNkZWZpbmUgUjIwMF9FTUlUX1ZBUF9DVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgkvKiB2YXAvMSAqLworI2RlZmluZSBSMjAwX0VNSVRfTUFUUklYX1NFTEVDVF8wICAgICAgICAgICAgICAgICAgIDMzCS8qIG1zbC81ICovCisjZGVmaW5lIFIyMDBfRU1JVF9URVhfUFJPQ19DVExfMiAgICAgICAgICAgICAgICAgICAgMzQJLyogdGNnLzUgKi8KKyNkZWZpbmUgUjIwMF9FTUlUX1RDTF9VQ1BfVkVSVF9CTEVORF9DVEwgICAgICAgICAgICAzNQkvKiB0Y2wvMSAqLworI2RlZmluZSBSMjAwX0VNSVRfUFBfVFhGSUxURVJfMCAgICAgICAgICAgICAgICAgICAgIDM2CS8qIHRleDAvNiAqLworI2RlZmluZSBSMjAwX0VNSVRfUFBfVFhGSUxURVJfMSAgICAgICAgICAgICAgICAgICAgIDM3CS8qIHRleDEvNiAqLworI2RlZmluZSBSMjAwX0VNSVRfUFBfVFhGSUxURVJfMiAgICAgICAgICAgICAgICAgICAgIDM4CS8qIHRleDIvNiAqLworI2RlZmluZSBSMjAwX0VNSVRfUFBfVFhGSUxURVJfMyAgICAgICAgICAgICAgICAgICAgIDM5CS8qIHRleDMvNiAqLworI2RlZmluZSBSMjAwX0VNSVRfUFBfVFhGSUxURVJfNCAgICAgICAgICAgICAgICAgICAgIDQwCS8qIHRleDQvNiAqLworI2RlZmluZSBSMjAwX0VNSVRfUFBfVFhGSUxURVJfNSAgICAgICAgICAgICAgICAgICAgIDQxCS8qIHRleDUvNiAqLworI2RlZmluZSBSMjAwX0VNSVRfUFBfVFhPRkZTRVRfMCAgICAgICAgICAgICAgICAgICAgIDQyCS8qIHRleDAvMSAqLworI2RlZmluZSBSMjAwX0VNSVRfUFBfVFhPRkZTRVRfMSAgICAgICAgICAgICAgICAgICAgIDQzCS8qIHRleDEvMSAqLworI2RlZmluZSBSMjAwX0VNSVRfUFBfVFhPRkZTRVRfMiAgICAgICAgICAgICAgICAgICAgIDQ0CS8qIHRleDIvMSAqLworI2RlZmluZSBSMjAwX0VNSVRfUFBfVFhPRkZTRVRfMyAgICAgICAgICAgICAgICAgICAgIDQ1CS8qIHRleDMvMSAqLworI2RlZmluZSBSMjAwX0VNSVRfUFBfVFhPRkZTRVRfNCAgICAgICAgICAgICAgICAgICAgIDQ2CS8qIHRleDQvMSAqLworI2RlZmluZSBSMjAwX0VNSVRfUFBfVFhPRkZTRVRfNSAgICAgICAgICAgICAgICAgICAgIDQ3CS8qIHRleDUvMSAqLworI2RlZmluZSBSMjAwX0VNSVRfVlRFX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgIDQ4CS8qIHZ0ZS8xICovCisjZGVmaW5lIFIyMDBfRU1JVF9PVVRQVVRfVlRYX0NPTVBfU0VMICAgICAgICAgICAgICAgNDkJLyogdnR4LzEgKi8KKyNkZWZpbmUgUjIwMF9FTUlUX1BQX1RBTV9ERUJVRzMgICAgICAgICAgICAgICAgICAgICA1MAkvKiB0YW0vMSAqLworI2RlZmluZSBSMjAwX0VNSVRfUFBfQ05UTF9YICAgICAgICAgICAgICAgICAgICAgICAgIDUxCS8qIGNzdC8xICovCisjZGVmaW5lIFIyMDBfRU1JVF9SQjNEX0RFUFRIWFlfT0ZGU0VUICAgICAgICAgICAgICAgNTIJLyogY3N0LzEgKi8KKyNkZWZpbmUgUjIwMF9FTUlUX1JFX0FVWF9TQ0lTU09SX0NOVEwgICAgICAgICAgICAgICA1MwkvKiBjc3QvMSAqLworI2RlZmluZSBSMjAwX0VNSVRfUkVfU0NJU1NPUl9UTF8wICAgICAgICAgICAgICAgICAgIDU0CS8qIGNzdC8yICovCisjZGVmaW5lIFIyMDBfRU1JVF9SRV9TQ0lTU09SX1RMXzEgICAgICAgICAgICAgICAgICAgNTUJLyogY3N0LzIgKi8KKyNkZWZpbmUgUjIwMF9FTUlUX1JFX1NDSVNTT1JfVExfMiAgICAgICAgICAgICAgICAgICA1NgkvKiBjc3QvMiAqLworI2RlZmluZSBSMjAwX0VNSVRfU0VfVkFQX0NOVExfU1RBVFVTICAgICAgICAgICAgICAgIDU3CS8qIGNzdC8xICovCisjZGVmaW5lIFIyMDBfRU1JVF9TRV9WVFhfU1RBVEVfQ05UTCAgICAgICAgICAgICAgICAgNTgJLyogY3N0LzEgKi8KKyNkZWZpbmUgUjIwMF9FTUlUX1JFX1BPSU5UU0laRSAgICAgICAgICAgICAgICAgICAgICA1OQkvKiBjc3QvMSAqLworI2RlZmluZSBSMjAwX0VNSVRfVENMX0lOUFVUX1ZUWF9WRUNUT1JfQUREUl8wICAgICAgIDYwCS8qIGNzdC80ICovCiAjZGVmaW5lIFIyMDBfRU1JVF9QUF9DVUJJQ19GQUNFU18wICAgICAgICAgICAgICAgICAgNjEKICNkZWZpbmUgUjIwMF9FTUlUX1BQX0NVQklDX09GRlNFVFNfMCAgICAgICAgICAgICAgICA2MgogI2RlZmluZSBSMjAwX0VNSVRfUFBfQ1VCSUNfRkFDRVNfMSAgICAgICAgICAgICAgICAgIDYzCkBAIC0xNjcsMzcgKzE2NiwzNiBAQAogLyogQ29tbWFuZHMgdW5kZXJzdG9vZCBieSBjbWRfYnVmZmVyIGlvY3RsLiAgTW9yZSBjYW4gYmUgYWRkZWQgYnV0CiAgKiBvYnZpb3VzbHkgdGhlc2UgY2FuJ3QgYmUgcmVtb3ZlZCBvciBjaGFuZ2VkOgogICovCi0jZGVmaW5lIFJBREVPTl9DTURfUEFDS0VUICAgICAgMSAvKiBlbWl0IG9uZSBvZiB0aGUgcmVnaXN0ZXIgcGFja2V0cyBhYm92ZSAqLwotI2RlZmluZSBSQURFT05fQ01EX1NDQUxBUlMgICAgIDIgLyogZW1pdCBzY2FsYXIgZGF0YSAqLwotI2RlZmluZSBSQURFT05fQ01EX1ZFQ1RPUlMgICAgIDMgLyogZW1pdCB2ZWN0b3IgZGF0YSAqLwotI2RlZmluZSBSQURFT05fQ01EX0RNQV9ESVNDQVJEIDQgLyogZGlzY2FyZCBjdXJyZW50IGRtYSBidWYgKi8KLSNkZWZpbmUgUkFERU9OX0NNRF9QQUNLRVQzICAgICA1IC8qIGVtaXQgaHcgcGFja2V0ICovCi0jZGVmaW5lIFJBREVPTl9DTURfUEFDS0VUM19DTElQIDYgLyogZW1pdCBodyBwYWNrZXQgd3JhcHBlZCBpbiBjbGlwcmVjdHMgKi8KLSNkZWZpbmUgUkFERU9OX0NNRF9TQ0FMQVJTMiAgICAgNyAvKiByMjAwIHN0b3BnYXAgKi8KLSNkZWZpbmUgUkFERU9OX0NNRF9XQUlUICAgICAgICAgOCAvKiBlbWl0IGh3IHdhaXQgY29tbWFuZHMgLS0gbm90ZToKLQkJCQkgICAqICBkb2Vzbid0IG1ha2UgdGhlIGNwdSB3YWl0LCBqdXN0Ci0JCQkJICAgKiAgdGhlIGdyYXBoaWNzIGhhcmR3YXJlICovCi0KKyNkZWZpbmUgUkFERU9OX0NNRF9QQUNLRVQgICAgICAxCS8qIGVtaXQgb25lIG9mIHRoZSByZWdpc3RlciBwYWNrZXRzIGFib3ZlICovCisjZGVmaW5lIFJBREVPTl9DTURfU0NBTEFSUyAgICAgMgkvKiBlbWl0IHNjYWxhciBkYXRhICovCisjZGVmaW5lIFJBREVPTl9DTURfVkVDVE9SUyAgICAgMwkvKiBlbWl0IHZlY3RvciBkYXRhICovCisjZGVmaW5lIFJBREVPTl9DTURfRE1BX0RJU0NBUkQgNAkvKiBkaXNjYXJkIGN1cnJlbnQgZG1hIGJ1ZiAqLworI2RlZmluZSBSQURFT05fQ01EX1BBQ0tFVDMgICAgIDUJLyogZW1pdCBodyBwYWNrZXQgKi8KKyNkZWZpbmUgUkFERU9OX0NNRF9QQUNLRVQzX0NMSVAgNgkvKiBlbWl0IGh3IHBhY2tldCB3cmFwcGVkIGluIGNsaXByZWN0cyAqLworI2RlZmluZSBSQURFT05fQ01EX1NDQUxBUlMyICAgICA3CS8qIHIyMDAgc3RvcGdhcCAqLworI2RlZmluZSBSQURFT05fQ01EX1dBSVQgICAgICAgICA4CS8qIGVtaXQgaHcgd2FpdCBjb21tYW5kcyAtLSBub3RlOgorCQkJCQkgKiAgZG9lc24ndCBtYWtlIHRoZSBjcHUgd2FpdCwganVzdAorCQkJCQkgKiAgdGhlIGdyYXBoaWNzIGhhcmR3YXJlICovCiAKIHR5cGVkZWYgdW5pb24gewogCWludCBpOwotCXN0cnVjdCB7IAorCXN0cnVjdCB7CiAJCXVuc2lnbmVkIGNoYXIgY21kX3R5cGUsIHBhZDAsIHBhZDEsIHBhZDI7CiAJfSBoZWFkZXI7Ci0Jc3RydWN0IHsgCisJc3RydWN0IHsKIAkJdW5zaWduZWQgY2hhciBjbWRfdHlwZSwgcGFja2V0X2lkLCBwYWQwLCBwYWQxOwogCX0gcGFja2V0OwotCXN0cnVjdCB7IAotCQl1bnNpZ25lZCBjaGFyIGNtZF90eXBlLCBvZmZzZXQsIHN0cmlkZSwgY291bnQ7IAorCXN0cnVjdCB7CisJCXVuc2lnbmVkIGNoYXIgY21kX3R5cGUsIG9mZnNldCwgc3RyaWRlLCBjb3VudDsKIAl9IHNjYWxhcnM7Ci0Jc3RydWN0IHsgCi0JCXVuc2lnbmVkIGNoYXIgY21kX3R5cGUsIG9mZnNldCwgc3RyaWRlLCBjb3VudDsgCisJc3RydWN0IHsKKwkJdW5zaWduZWQgY2hhciBjbWRfdHlwZSwgb2Zmc2V0LCBzdHJpZGUsIGNvdW50OwogCX0gdmVjdG9yczsKLQlzdHJ1Y3QgeyAKLQkJdW5zaWduZWQgY2hhciBjbWRfdHlwZSwgYnVmX2lkeCwgcGFkMCwgcGFkMTsgCisJc3RydWN0IHsKKwkJdW5zaWduZWQgY2hhciBjbWRfdHlwZSwgYnVmX2lkeCwgcGFkMCwgcGFkMTsKIAl9IGRtYTsKLQlzdHJ1Y3QgeyAKLQkJdW5zaWduZWQgY2hhciBjbWRfdHlwZSwgZmxhZ3MsIHBhZDAsIHBhZDE7IAorCXN0cnVjdCB7CisJCXVuc2lnbmVkIGNoYXIgY21kX3R5cGUsIGZsYWdzLCBwYWQwLCBwYWQxOwogCX0gd2FpdDsKIH0gZHJtX3JhZGVvbl9jbWRfaGVhZGVyX3Q7CiAKQEAgLTIxMywxMCArMjExLDEwIEBACiAgKiBUaGUgaW50ZXJmYWNlIGhhcyBub3QgYmVlbiBzdGFiaWxpemVkLCBzbyBzb21lIG9mIHRoZXNlIG1heSBiZSByZW1vdmVkCiAgKiBhbmQgZXZlbnR1YWxseSByZW9yZGVyZWQgYmVmb3JlIHN0YWJpbGl6YXRpb24uCiAgKi8KLSNkZWZpbmUgUjMwMF9DTURfUEFDS0VUMAkJMSAKLSNkZWZpbmUgUjMwMF9DTURfVlBVCQkJMiAvKiBlbWl0IHZlcnRleCBwcm9ncmFtIHVwbG9hZCAqLwotI2RlZmluZSBSMzAwX0NNRF9QQUNLRVQzCQkzIC8qIGVtaXQgYSBwYWNrZXQzICovCi0jZGVmaW5lIFIzMDBfQ01EX0VORDNECQkJNCAvKiBlbWl0IHNlcXVlbmNlIGVuZGluZyAzZCByZW5kZXJpbmcgKi8KKyNkZWZpbmUgUjMwMF9DTURfUEFDS0VUMAkJMQorI2RlZmluZSBSMzAwX0NNRF9WUFUJCQkyCS8qIGVtaXQgdmVydGV4IHByb2dyYW0gdXBsb2FkICovCisjZGVmaW5lIFIzMDBfQ01EX1BBQ0tFVDMJCTMJLyogZW1pdCBhIHBhY2tldDMgKi8KKyNkZWZpbmUgUjMwMF9DTURfRU5EM0QJCQk0CS8qIGVtaXQgc2VxdWVuY2UgZW5kaW5nIDNkIHJlbmRlcmluZyAqLwogI2RlZmluZSBSMzAwX0NNRF9DUF9ERUxBWQkJNQogI2RlZmluZSBSMzAwX0NNRF9ETUFfRElTQ0FSRAkJNgogI2RlZmluZSBSMzAwX0NNRF9XQUlUCQkJNwpAQCAtMjQxLDEzICsyMzksMTMgQEAKIAl9IHBhY2tldDM7CiAJc3RydWN0IHsKIAkJdW5zaWduZWQgY2hhciBjbWRfdHlwZSwgcGFja2V0OwotCQl1bnNpZ25lZCBzaG9ydCBjb3VudDsgLyogYW1vdW50IG9mIHBhY2tldDIgdG8gZW1pdCAqLworCQl1bnNpZ25lZCBzaG9ydCBjb3VudDsJLyogYW1vdW50IG9mIHBhY2tldDIgdG8gZW1pdCAqLwogCX0gZGVsYXk7CiAJc3RydWN0IHsKIAkJdW5zaWduZWQgY2hhciBjbWRfdHlwZSwgYnVmX2lkeCwgcGFkMCwgcGFkMTsKIAl9IGRtYTsKIAlzdHJ1Y3QgewotCQl1bnNpZ25lZCBjaGFyIGNtZF90eXBlLCBmbGFncywgcGFkMCwgcGFkMTsJCisJCXVuc2lnbmVkIGNoYXIgY21kX3R5cGUsIGZsYWdzLCBwYWQwLCBwYWQxOwogCX0gd2FpdDsKIH0gZHJtX3IzMDBfY21kX2hlYWRlcl90OwogCkBAIC0zMDEsNyArMjk5LDcgQEAKICNkZWZpbmUgUkFERU9OX09GRlNFVF9BTElHTiAgICAgICAgICAgICAoMSA8PCBSQURFT05fT0ZGU0VUX1NISUZUKQogI2RlZmluZSBSQURFT05fT0ZGU0VUX01BU0sgICAgICAgICAgICAgIChSQURFT05fT0ZGU0VUX0FMSUdOIC0gMSkKIAotI2VuZGlmIC8qIF9fUkFERU9OX1NBUkVBX0RFRklORVNfXyAqLworI2VuZGlmCQkJCS8qIF9fUkFERU9OX1NBUkVBX0RFRklORVNfXyAqLwogCiB0eXBlZGVmIHN0cnVjdCB7CiAJdW5zaWduZWQgaW50IHJlZDsKQEAgLTMxMiw3ICszMTAsNyBAQAogCiB0eXBlZGVmIHN0cnVjdCB7CiAJLyogQ29udGV4dCBzdGF0ZSAqLwotCXVuc2lnbmVkIGludCBwcF9taXNjOwkJCQkvKiAweDFjMTQgKi8KKwl1bnNpZ25lZCBpbnQgcHBfbWlzYzsJLyogMHgxYzE0ICovCiAJdW5zaWduZWQgaW50IHBwX2ZvZ19jb2xvcjsKIAl1bnNpZ25lZCBpbnQgcmVfc29saWRfY29sb3I7CiAJdW5zaWduZWQgaW50IHJiM2RfYmxlbmRjbnRsOwpAQCAtMzIwLDcgKzMxOCw3IEBACiAJdW5zaWduZWQgaW50IHJiM2RfZGVwdGhwaXRjaDsKIAl1bnNpZ25lZCBpbnQgcmIzZF96c3RlbmNpbGNudGw7CiAKLQl1bnNpZ25lZCBpbnQgcHBfY250bDsJCQkJLyogMHgxYzM4ICovCisJdW5zaWduZWQgaW50IHBwX2NudGw7CS8qIDB4MWMzOCAqLwogCXVuc2lnbmVkIGludCByYjNkX2NudGw7CiAJdW5zaWduZWQgaW50IHJiM2RfY29sb3JvZmZzZXQ7CiAJdW5zaWduZWQgaW50IHJlX3dpZHRoX2hlaWdodDsKQEAgLTMyOCwyNyArMzI2LDI3IEBACiAJdW5zaWduZWQgaW50IHNlX2NudGw7CiAKIAkvKiBWZXJ0ZXggZm9ybWF0IHN0YXRlICovCi0JdW5zaWduZWQgaW50IHNlX2Nvb3JkX2ZtdDsJCQkvKiAweDFjNTAgKi8KKwl1bnNpZ25lZCBpbnQgc2VfY29vcmRfZm10OwkvKiAweDFjNTAgKi8KIAogCS8qIExpbmUgc3RhdGUgKi8KLQl1bnNpZ25lZCBpbnQgcmVfbGluZV9wYXR0ZXJuOwkJCS8qIDB4MWNkMCAqLworCXVuc2lnbmVkIGludCByZV9saW5lX3BhdHRlcm47CS8qIDB4MWNkMCAqLwogCXVuc2lnbmVkIGludCByZV9saW5lX3N0YXRlOwogCi0JdW5zaWduZWQgaW50IHNlX2xpbmVfd2lkdGg7CQkJLyogMHgxZGI4ICovCisJdW5zaWduZWQgaW50IHNlX2xpbmVfd2lkdGg7CS8qIDB4MWRiOCAqLwogCiAJLyogQnVtcG1hcCBzdGF0ZSAqLwotCXVuc2lnbmVkIGludCBwcF9sdW1fbWF0cml4OwkJCS8qIDB4MWQwMCAqLworCXVuc2lnbmVkIGludCBwcF9sdW1fbWF0cml4OwkvKiAweDFkMDAgKi8KIAotCXVuc2lnbmVkIGludCBwcF9yb3RfbWF0cml4XzA7CQkJLyogMHgxZDU4ICovCisJdW5zaWduZWQgaW50IHBwX3JvdF9tYXRyaXhfMDsJLyogMHgxZDU4ICovCiAJdW5zaWduZWQgaW50IHBwX3JvdF9tYXRyaXhfMTsKIAogCS8qIE1hc2sgc3RhdGUgKi8KLQl1bnNpZ25lZCBpbnQgcmIzZF9zdGVuY2lscmVmbWFzazsJCS8qIDB4MWQ3YyAqLworCXVuc2lnbmVkIGludCByYjNkX3N0ZW5jaWxyZWZtYXNrOwkvKiAweDFkN2MgKi8KIAl1bnNpZ25lZCBpbnQgcmIzZF9yb3BjbnRsOwogCXVuc2lnbmVkIGludCByYjNkX3BsYW5lbWFzazsKIAogCS8qIFZpZXdwb3J0IHN0YXRlICovCi0JdW5zaWduZWQgaW50IHNlX3Zwb3J0X3hzY2FsZTsJCQkvKiAweDFkOTggKi8KKwl1bnNpZ25lZCBpbnQgc2VfdnBvcnRfeHNjYWxlOwkvKiAweDFkOTggKi8KIAl1bnNpZ25lZCBpbnQgc2VfdnBvcnRfeG9mZnNldDsKIAl1bnNpZ25lZCBpbnQgc2VfdnBvcnRfeXNjYWxlOwogCXVuc2lnbmVkIGludCBzZV92cG9ydF95b2Zmc2V0OwpAQCAtMzU2LDIwICszNTQsMTkgQEAKIAl1bnNpZ25lZCBpbnQgc2VfdnBvcnRfem9mZnNldDsKIAogCS8qIFNldHVwIHN0YXRlICovCi0JdW5zaWduZWQgaW50IHNlX2NudGxfc3RhdHVzOwkJCS8qIDB4MjE0MCAqLworCXVuc2lnbmVkIGludCBzZV9jbnRsX3N0YXR1czsJLyogMHgyMTQwICovCiAKIAkvKiBNaXNjIHN0YXRlICovCi0JdW5zaWduZWQgaW50IHJlX3RvcF9sZWZ0OwkJCS8qIDB4MjZjMCAqLworCXVuc2lnbmVkIGludCByZV90b3BfbGVmdDsJLyogMHgyNmMwICovCiAJdW5zaWduZWQgaW50IHJlX21pc2M7CiB9IGRybV9yYWRlb25fY29udGV4dF9yZWdzX3Q7CiAKIHR5cGVkZWYgc3RydWN0IHsKIAkvKiBaYmlhcyBzdGF0ZSAqLwotCXVuc2lnbmVkIGludCBzZV96Ymlhc19mYWN0b3I7CQkJLyogMHgxZGFjICovCisJdW5zaWduZWQgaW50IHNlX3piaWFzX2ZhY3RvcjsJLyogMHgxZGFjICovCiAJdW5zaWduZWQgaW50IHNlX3piaWFzX2NvbnN0YW50OwogfSBkcm1fcmFkZW9uX2NvbnRleHQyX3JlZ3NfdDsKIAotCiAvKiBTZXR1cCByZWdpc3RlcnMgZm9yIGVhY2ggdGV4dHVyZSB1bml0CiAgKi8KIHR5cGVkZWYgc3RydWN0IHsKQEAgLTM4NywxMSArMzg0LDEwIEBACiAJdW5zaWduZWQgaW50IGZpbmlzaDsKIAl1bnNpZ25lZCBpbnQgcHJpbTo4OwogCXVuc2lnbmVkIGludCBzdGF0ZWlkeDo4OwotCXVuc2lnbmVkIGludCBudW12ZXJ0czoxNjsgLyogb3ZlcmxvYWRlZCBhcyBvZmZzZXQvNjQgZm9yIGVsdCBwcmltcyAqLwotICAgICAgICB1bnNpZ25lZCBpbnQgdmNfZm9ybWF0OyAgIC8qIHZlcnRleCBmb3JtYXQgKi8KKwl1bnNpZ25lZCBpbnQgbnVtdmVydHM6MTY7CS8qIG92ZXJsb2FkZWQgYXMgb2Zmc2V0LzY0IGZvciBlbHQgcHJpbXMgKi8KKwl1bnNpZ25lZCBpbnQgdmNfZm9ybWF0OwkvKiB2ZXJ0ZXggZm9ybWF0ICovCiB9IGRybV9yYWRlb25fcHJpbV90OwogCi0KIHR5cGVkZWYgc3RydWN0IHsKIAlkcm1fcmFkZW9uX2NvbnRleHRfcmVnc190IGNvbnRleHQ7CiAJZHJtX3JhZGVvbl90ZXh0dXJlX3JlZ3NfdCB0ZXhbUkFERU9OX01BWF9URVhUVVJFX1VOSVRTXTsKQEAgLTM5OSw3ICszOTUsNiBAQAogCXVuc2lnbmVkIGludCBkaXJ0eTsKIH0gZHJtX3JhZGVvbl9zdGF0ZV90OwogCi0KIHR5cGVkZWYgc3RydWN0IHsKIAkvKiBUaGUgY2hhbm5lbCBmb3IgY29tbXVuaWNhdGlvbiBvZiBzdGF0ZSBpbmZvcm1hdGlvbiB0byB0aGUKIAkgKiBrZXJuZWwgb24gZmlyaW5nIGEgdmVydGV4IGJ1ZmZlciB3aXRoIGVpdGhlciBvZiB0aGUKQEAgLTQyMiwxNiArNDE3LDE2IEBACiAJdW5zaWduZWQgaW50IGxhc3RfZGlzcGF0Y2g7CiAJdW5zaWduZWQgaW50IGxhc3RfY2xlYXI7CiAKLQlkcm1fdGV4X3JlZ2lvbl90IHRleF9saXN0W1JBREVPTl9OUl9URVhfSEVBUFNdW1JBREVPTl9OUl9URVhfUkVHSU9OUysxXTsKKwlkcm1fdGV4X3JlZ2lvbl90IHRleF9saXN0W1JBREVPTl9OUl9URVhfSEVBUFNdW1JBREVPTl9OUl9URVhfUkVHSU9OUyArCisJCQkJCQkgICAgICAgMV07CiAJdW5zaWduZWQgaW50IHRleF9hZ2VbUkFERU9OX05SX1RFWF9IRUFQU107CiAJaW50IGN0eF9vd25lcjsKLSAgICAgICAgaW50IHBmU3RhdGU7ICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiAzZCB3aW5kb3dzICgwLDEsMm9ybW9yZSkgKi8KLSAgICAgICAgaW50IHBmQ3VycmVudFBhZ2U7CSAgICAvKiB3aGljaCBidWZmZXIgaXMgYmVpbmcgZGlzcGxheWVkPyAqLwotCWludCBjcnRjMl9iYXNlOwkJICAgIC8qIENSVEMyIGZyYW1lIG9mZnNldCAqLworCWludCBwZlN0YXRlOwkJLyogbnVtYmVyIG9mIDNkIHdpbmRvd3MgKDAsMSwyb3Jtb3JlKSAqLworCWludCBwZkN1cnJlbnRQYWdlOwkvKiB3aGljaCBidWZmZXIgaXMgYmVpbmcgZGlzcGxheWVkPyAqLworCWludCBjcnRjMl9iYXNlOwkJLyogQ1JUQzIgZnJhbWUgb2Zmc2V0ICovCiAJaW50IHRpbGluZ19lbmFibGVkOwkvKiBzZXQgYnkgZHJtLCByZWFkIGJ5IDJkICsgM2QgY2xpZW50cyAqLwogfSBkcm1fcmFkZW9uX3NhcmVhX3Q7CiAKLQogLyogV0FSTklORzogSWYgeW91IGNoYW5nZSBhbnkgb2YgdGhlc2UgZGVmaW5lcywgbWFrZSBzdXJlIHRvIGNoYW5nZSB0aGUKICAqIGRlZmluZXMgaW4gdGhlIFhzZXJ2ZXIgZmlsZSAoeGY4NmRybVJhZGVvbi5oKQogICoKQEAgLTQ0MSwxNSArNDM2LDE1IEBACiAvKiBSYWRlb24gc3BlY2lmaWMgaW9jdGxzCiAgKiBUaGUgZGV2aWNlIHNwZWNpZmljIGlvY3RsIHJhbmdlIGlzIDB4NDAgdG8gMHg3OS4KICAqLwotI2RlZmluZSBEUk1fUkFERU9OX0NQX0lOSVQgICAgMHgwMCAKLSNkZWZpbmUgRFJNX1JBREVPTl9DUF9TVEFSVCAgIDB4MDEgCisjZGVmaW5lIERSTV9SQURFT05fQ1BfSU5JVCAgICAweDAwCisjZGVmaW5lIERSTV9SQURFT05fQ1BfU1RBUlQgICAweDAxCiAjZGVmaW5lIERSTV9SQURFT05fQ1BfU1RPUCAgICAweDAyCiAjZGVmaW5lIERSTV9SQURFT05fQ1BfUkVTRVQgICAweDAzCiAjZGVmaW5lIERSTV9SQURFT05fQ1BfSURMRSAgICAweDA0Ci0jZGVmaW5lIERSTV9SQURFT05fUkVTRVQgICAgICAweDA1IAorI2RlZmluZSBEUk1fUkFERU9OX1JFU0VUICAgICAgMHgwNQogI2RlZmluZSBEUk1fUkFERU9OX0ZVTExTQ1JFRU4gMHgwNgotI2RlZmluZSBEUk1fUkFERU9OX1NXQVAgICAgICAgMHgwNyAKLSNkZWZpbmUgRFJNX1JBREVPTl9DTEVBUiAgICAgIDB4MDggCisjZGVmaW5lIERSTV9SQURFT05fU1dBUCAgICAgICAweDA3CisjZGVmaW5lIERSTV9SQURFT05fQ0xFQVIgICAgICAweDA4CiAjZGVmaW5lIERSTV9SQURFT05fVkVSVEVYICAgICAweDA5CiAjZGVmaW5lIERSTV9SQURFT05fSU5ESUNFUyAgICAweDBBCiAjZGVmaW5lIERSTV9SQURFT05fTk9UX1VTRUQKQEAgLTUwMCw3ICs0OTUsNyBAQAogCiB0eXBlZGVmIHN0cnVjdCBkcm1fcmFkZW9uX2luaXQgewogCWVudW0gewotCQlSQURFT05fSU5JVF9DUCAgICA9IDB4MDEsCisJCVJBREVPTl9JTklUX0NQID0gMHgwMSwKIAkJUkFERU9OX0NMRUFOVVBfQ1AgPSAweDAyLAogCQlSQURFT05fSU5JVF9SMjAwX0NQID0gMHgwMywKIAkJUkFERU9OX0lOSVRfUjMwMF9DUCA9IDB4MDQKQEAgLTUzMyw3ICs1MjgsNyBAQAogCiB0eXBlZGVmIHN0cnVjdCBkcm1fcmFkZW9uX2Z1bGxzY3JlZW4gewogCWVudW0gewotCQlSQURFT05fSU5JVF9GVUxMU0NSRUVOICAgID0gMHgwMSwKKwkJUkFERU9OX0lOSVRfRlVMTFNDUkVFTiA9IDB4MDEsCiAJCVJBREVPTl9DTEVBTlVQX0ZVTExTQ1JFRU4gPSAweDAyCiAJfSBmdW5jOwogfSBkcm1fcmFkZW9uX2Z1bGxzY3JlZW5fdDsKQEAgLTU1NCwxNSArNTQ5LDE1IEBACiAJdW5zaWduZWQgaW50IGNsZWFyX2NvbG9yOwogCXVuc2lnbmVkIGludCBjbGVhcl9kZXB0aDsKIAl1bnNpZ25lZCBpbnQgY29sb3JfbWFzazsKLQl1bnNpZ25lZCBpbnQgZGVwdGhfbWFzazsgICAvKiBtaXNuYW1lZCBmaWVsZDogIHNob3VsZCBiZSBzdGVuY2lsICovCisJdW5zaWduZWQgaW50IGRlcHRoX21hc2s7CS8qIG1pc25hbWVkIGZpZWxkOiAgc2hvdWxkIGJlIHN0ZW5jaWwgKi8KIAlkcm1fcmFkZW9uX2NsZWFyX3JlY3RfdCBfX3VzZXIgKmRlcHRoX2JveGVzOwogfSBkcm1fcmFkZW9uX2NsZWFyX3Q7CiAKIHR5cGVkZWYgc3RydWN0IGRybV9yYWRlb25fdmVydGV4IHsKIAlpbnQgcHJpbTsKLQlpbnQgaWR4OwkJCS8qIEluZGV4IG9mIHZlcnRleCBidWZmZXIgKi8KLQlpbnQgY291bnQ7CQkJLyogTnVtYmVyIG9mIHZlcnRpY2VzIGluIGJ1ZmZlciAqLwotCWludCBkaXNjYXJkOwkJCS8qIENsaWVudCBmaW5pc2hlZCB3aXRoIGJ1ZmZlcj8gKi8KKwlpbnQgaWR4OwkJLyogSW5kZXggb2YgdmVydGV4IGJ1ZmZlciAqLworCWludCBjb3VudDsJCS8qIE51bWJlciBvZiB2ZXJ0aWNlcyBpbiBidWZmZXIgKi8KKwlpbnQgZGlzY2FyZDsJCS8qIENsaWVudCBmaW5pc2hlZCB3aXRoIGJ1ZmZlcj8gKi8KIH0gZHJtX3JhZGVvbl92ZXJ0ZXhfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX3JhZGVvbl9pbmRpY2VzIHsKQEAgLTU3MCw3ICs1NjUsNyBAQAogCWludCBpZHg7CiAJaW50IHN0YXJ0OwogCWludCBlbmQ7Ci0JaW50IGRpc2NhcmQ7CQkJLyogQ2xpZW50IGZpbmlzaGVkIHdpdGggYnVmZmVyPyAqLworCWludCBkaXNjYXJkOwkJLyogQ2xpZW50IGZpbmlzaGVkIHdpdGggYnVmZmVyPyAqLwogfSBkcm1fcmFkZW9uX2luZGljZXNfdDsKIAogLyogdjEuMiAtIG9ic29sZXRlcyBkcm1fcmFkZW9uX3ZlcnRleCBhbmQgZHJtX3JhZGVvbl9pbmRpY2VzCkBAIC01NzgsOCArNTczLDggQEAKICAqICAgICAgLSBzdXBwb3J0cyBkcml2ZXIgY2hhbmdlIHRvIGVtaXQgbmF0aXZlIHByaW1pdGl2ZXMKICAqLwogdHlwZWRlZiBzdHJ1Y3QgZHJtX3JhZGVvbl92ZXJ0ZXgyIHsKLQlpbnQgaWR4OwkJCS8qIEluZGV4IG9mIHZlcnRleCBidWZmZXIgKi8KLQlpbnQgZGlzY2FyZDsJCQkvKiBDbGllbnQgZmluaXNoZWQgd2l0aCBidWZmZXI/ICovCisJaW50IGlkeDsJCS8qIEluZGV4IG9mIHZlcnRleCBidWZmZXIgKi8KKwlpbnQgZGlzY2FyZDsJCS8qIENsaWVudCBmaW5pc2hlZCB3aXRoIGJ1ZmZlcj8gKi8KIAlpbnQgbnJfc3RhdGVzOwogCWRybV9yYWRlb25fc3RhdGVfdCBfX3VzZXIgKnN0YXRlOwogCWludCBucl9wcmltczsKQEAgLTU4NywxMCArNTgyLDEwIEBACiB9IGRybV9yYWRlb25fdmVydGV4Ml90OwogCiAvKiB2MS4zIC0gb2Jzb2xldGVzIGRybV9yYWRlb25fdmVydGV4MgotICogICAgICAtIGFsbG93cyBhcmJpdGFyaWx5IGxhcmdlIGNsaXByZWN0IGxpc3QgCisgKiAgICAgIC0gYWxsb3dzIGFyYml0YXJpbHkgbGFyZ2UgY2xpcHJlY3QgbGlzdAogICogICAgICAtIGFsbG93cyB1cGRhdGluZyBvZiB0Y2wgcGFja2V0LCB2ZWN0b3IgYW5kIHNjYWxhciBzdGF0ZQogICogICAgICAtIGFsbG93cyBtZW1vcnktZWZmaWNpZW50IGRlc2NyaXB0aW9uIG9mIHN0YXRlIHVwZGF0ZXMKLSAqICAgICAgLSBhbGxvd3Mgc3RhdGUgdG8gYmUgZW1pdHRlZCB3aXRob3V0IGEgcHJpbWl0aXZlIAorICogICAgICAtIGFsbG93cyBzdGF0ZSB0byBiZSBlbWl0dGVkIHdpdGhvdXQgYSBwcmltaXRpdmUKICAqICAgICAgICAgICAoZm9yIGNsZWFycywgY3R4IHN3aXRjaGVzKQogICogICAgICAtIGFsbG93cyBtb3JlIHRoYW4gb25lIGRtYSBidWZmZXIgdG8gYmUgcmVmZXJlbmNlZCBwZXIgaW9jdGwKICAqICAgICAgLSBzdXBwb3J0cyB0Y2wgZHJpdmVyCkBAIC02MDQsNyArNTk5LDcgQEAKIH0gZHJtX3JhZGVvbl9jbWRfYnVmZmVyX3Q7CiAKIHR5cGVkZWYgc3RydWN0IGRybV9yYWRlb25fdGV4X2ltYWdlIHsKLQl1bnNpZ25lZCBpbnQgeCwgeTsJCS8qIEJsaXQgY29vcmRpbmF0ZXMgKi8KKwl1bnNpZ25lZCBpbnQgeCwgeTsJLyogQmxpdCBjb29yZGluYXRlcyAqLwogCXVuc2lnbmVkIGludCB3aWR0aCwgaGVpZ2h0OwogCWNvbnN0IHZvaWQgX191c2VyICpkYXRhOwogfSBkcm1fcmFkZW9uX3RleF9pbWFnZV90OwpAQCAtNjEzLDcgKzYwOCw3IEBACiAJdW5zaWduZWQgaW50IG9mZnNldDsKIAlpbnQgcGl0Y2g7CiAJaW50IGZvcm1hdDsKLQlpbnQgd2lkdGg7CQkJLyogVGV4dHVyZSBpbWFnZSBjb29yZGluYXRlcyAqLworCWludCB3aWR0aDsJCS8qIFRleHR1cmUgaW1hZ2UgY29vcmRpbmF0ZXMgKi8KIAlpbnQgaGVpZ2h0OwogCWRybV9yYWRlb25fdGV4X2ltYWdlX3QgX191c2VyICppbWFnZTsKIH0gZHJtX3JhZGVvbl90ZXh0dXJlX3Q7CkBAIC02MjksMTkgKzYyNCwxOCBAQAogCWludCBkaXNjYXJkOwogfSBkcm1fcmFkZW9uX2luZGlyZWN0X3Q7CiAKLQogLyogMS4zOiBBbiBpb2N0bCB0byBnZXQgcGFyYW1ldGVycyB0aGF0IGFyZW4ndCBhdmFpbGFibGUgdG8gdGhlIDNkCi0gKiBjbGllbnQgYW55IG90aGVyIHdheS4gIAorICogY2xpZW50IGFueSBvdGhlciB3YXkuCiAgKi8KLSNkZWZpbmUgUkFERU9OX1BBUkFNX0dBUlRfQlVGRkVSX09GRlNFVCAgICAxIC8qIGNhcmQgb2Zmc2V0IG9mIDFzdCBHQVJUIGJ1ZmZlciAqLworI2RlZmluZSBSQURFT05fUEFSQU1fR0FSVF9CVUZGRVJfT0ZGU0VUICAgIDEJLyogY2FyZCBvZmZzZXQgb2YgMXN0IEdBUlQgYnVmZmVyICovCiAjZGVmaW5lIFJBREVPTl9QQVJBTV9MQVNUX0ZSQU1FICAgICAgICAgICAgMgogI2RlZmluZSBSQURFT05fUEFSQU1fTEFTVF9ESVNQQVRDSCAgICAgICAgIDMKICNkZWZpbmUgUkFERU9OX1BBUkFNX0xBU1RfQ0xFQVIgICAgICAgICAgICA0CiAvKiBBZGRlZCB3aXRoIERSTSB2ZXJzaW9uIDEuNi4gKi8KICNkZWZpbmUgUkFERU9OX1BBUkFNX0lSUV9OUiAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFJBREVPTl9QQVJBTV9HQVJUX0JBU0UgICAgICAgICAgICAgNiAvKiBjYXJkIG9mZnNldCBvZiBHQVJUIGJhc2UgKi8KKyNkZWZpbmUgUkFERU9OX1BBUkFNX0dBUlRfQkFTRSAgICAgICAgICAgICA2CS8qIGNhcmQgb2Zmc2V0IG9mIEdBUlQgYmFzZSAqLwogLyogQWRkZWQgd2l0aCBEUk0gdmVyc2lvbiAxLjguICovCi0jZGVmaW5lIFJBREVPTl9QQVJBTV9SRUdJU1RFUl9IQU5ETEUgICAgICAgNyAvKiBmb3IgZHJtTWFwKCkgKi8KKyNkZWZpbmUgUkFERU9OX1BBUkFNX1JFR0lTVEVSX0hBTkRMRSAgICAgICA3CS8qIGZvciBkcm1NYXAoKSAqLwogI2RlZmluZSBSQURFT05fUEFSQU1fU1RBVFVTX0hBTkRMRSAgICAgICAgIDgKICNkZWZpbmUgUkFERU9OX1BBUkFNX1NBUkVBX0hBTkRMRSAgICAgICAgICA5CiAjZGVmaW5lIFJBREVPTl9QQVJBTV9HQVJUX1RFWF9IQU5ETEUgICAgICAgMTAKQEAgLTY3MiwxMCArNjY2LDkgQEAKIHR5cGVkZWYgc3RydWN0IGRybV9yYWRlb25fbWVtX2luaXRfaGVhcCB7CiAJaW50IHJlZ2lvbjsKIAlpbnQgc2l6ZTsKLQlpbnQgc3RhcnQ7CQorCWludCBzdGFydDsKIH0gZHJtX3JhZGVvbl9tZW1faW5pdF9oZWFwX3Q7CiAKLQogLyogMS42OiBVc2Vyc3BhY2UgY2FuIHJlcXVlc3QgJiB3YWl0IG9uIGlycSdzOgogICovCiB0eXBlZGVmIHN0cnVjdCBkcm1fcmFkZW9uX2lycV9lbWl0IHsKQEAgLTY4NiwxOSArNjc5LDE4IEBACiAJaW50IGlycV9zZXE7CiB9IGRybV9yYWRlb25faXJxX3dhaXRfdDsKIAotCiAvKiAxLjEwOiBDbGllbnRzIHRlbGwgdGhlIERSTSB3aGVyZSB0aGV5IHRoaW5rIHRoZSBmcmFtZWJ1ZmZlciBpcyBsb2NhdGVkIGluCiAgKiB0aGUgY2FyZCdzIGFkZHJlc3Mgc3BhY2UsIHZpYSBhIG5ldyBnZW5lcmljIGlvY3RsIHRvIHNldCBwYXJhbWV0ZXJzCiAgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX3JhZGVvbl9zZXRwYXJhbSB7CiAJdW5zaWduZWQgaW50IHBhcmFtOwotCWludDY0X3QgICAgICB2YWx1ZTsKKwlpbnQ2NF90IHZhbHVlOwogfSBkcm1fcmFkZW9uX3NldHBhcmFtX3Q7CiAKICNkZWZpbmUgUkFERU9OX1NFVFBBUkFNX0ZCX0xPQ0FUSU9OICAgIDEJLyogZGV0ZXJtaW5lZCBmcmFtZWJ1ZmZlciBsb2NhdGlvbiAqLwogI2RlZmluZSBSQURFT05fU0VUUEFSQU1fU1dJVENIX1RJTElORyAgMgkvKiBlbmFibGUvZGlzYWJsZSBjb2xvciB0aWxpbmcgKi8KLSNkZWZpbmUgUkFERU9OX1NFVFBBUkFNX1BDSUdBUlRfTE9DQVRJT04gMyAgICAgIC8qIFBDSSBHYXJ0IExvY2F0aW9uICovCisjZGVmaW5lIFJBREVPTl9TRVRQQVJBTV9QQ0lHQVJUX0xPQ0FUSU9OIDMJLyogUENJIEdhcnQgTG9jYXRpb24gKi8KIAogLyogMS4xNDogQ2xpZW50cyBjYW4gYWxsb2NhdGUvZnJlZSBhIHN1cmZhY2UKICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9yYWRlb25fZHJ2LmMgYi9kcml2ZXJzL2NoYXIvZHJtL3JhZGVvbl9kcnYuYwppbmRleCBlMDY4MmY2Li42YzE3NjYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL3JhZGVvbl9kcnYuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL3JhZGVvbl9kcnYuYwpAQCAtMjksNyArMjksNiBAQAogICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogICovCiAKLQogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgImRybVAuaCIKICNpbmNsdWRlICJkcm0uaCIKQEAgLTM4LDMwICszNywyOCBAQAogCiAjaW5jbHVkZSAiZHJtX3BjaWlkcy5oIgogCi1zdGF0aWMgaW50IHBvc3Rpbml0KCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzICkKK3N0YXRpYyBpbnQgcG9zdGluaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKLQlEUk1fSU5GTyggIkluaXRpYWxpemVkICVzICVkLiVkLiVkICVzIG9uIG1pbm9yICVkOiAlc1xuIiwKLQkJRFJJVkVSX05BTUUsCi0JCURSSVZFUl9NQUpPUiwKLQkJRFJJVkVSX01JTk9SLAotCQlEUklWRVJfUEFUQ0hMRVZFTCwKLQkJRFJJVkVSX0RBVEUsCi0JCWRldi0+cHJpbWFyeS5taW5vciwKLQkJcGNpX3ByZXR0eV9uYW1lKGRldi0+cGRldikKLQkJKTsKKwlEUk1fSU5GTygiSW5pdGlhbGl6ZWQgJXMgJWQuJWQuJWQgJXMgb24gbWlub3IgJWQ6ICVzXG4iLAorCQkgRFJJVkVSX05BTUUsCisJCSBEUklWRVJfTUFKT1IsCisJCSBEUklWRVJfTUlOT1IsCisJCSBEUklWRVJfUEFUQ0hMRVZFTCwKKwkJIERSSVZFUl9EQVRFLCBkZXYtPnByaW1hcnkubWlub3IsIHBjaV9wcmV0dHlfbmFtZShkZXYtPnBkZXYpCisJICAgICk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmVyc2lvbiggZHJtX3ZlcnNpb25fdCAqdmVyc2lvbiApCitzdGF0aWMgaW50IHZlcnNpb24oZHJtX3ZlcnNpb25fdCAqIHZlcnNpb24pCiB7CiAJaW50IGxlbjsKIAogCXZlcnNpb24tPnZlcnNpb25fbWFqb3IgPSBEUklWRVJfTUFKT1I7CiAJdmVyc2lvbi0+dmVyc2lvbl9taW5vciA9IERSSVZFUl9NSU5PUjsKIAl2ZXJzaW9uLT52ZXJzaW9uX3BhdGNobGV2ZWwgPSBEUklWRVJfUEFUQ0hMRVZFTDsKLQlEUk1fQ09QWSggdmVyc2lvbi0+bmFtZSwgRFJJVkVSX05BTUUgKTsKLQlEUk1fQ09QWSggdmVyc2lvbi0+ZGF0ZSwgRFJJVkVSX0RBVEUgKTsKLQlEUk1fQ09QWSggdmVyc2lvbi0+ZGVzYywgRFJJVkVSX0RFU0MgKTsKKwlEUk1fQ09QWSh2ZXJzaW9uLT5uYW1lLCBEUklWRVJfTkFNRSk7CisJRFJNX0NPUFkodmVyc2lvbi0+ZGF0ZSwgRFJJVkVSX0RBVEUpOworCURSTV9DT1BZKHZlcnNpb24tPmRlc2MsIERSSVZFUl9ERVNDKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzMsNyArNzAsMTAgQEAKIGV4dGVybiBpbnQgcmFkZW9uX21heF9pb2N0bDsKIAogc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIGRyaXZlciA9IHsKLQkuZHJpdmVyX2ZlYXR1cmVzID0gRFJJVkVSX1VTRV9BR1AgfCBEUklWRVJfVVNFX01UUlIgfCBEUklWRVJfUENJX0RNQSB8IERSSVZFUl9TRyB8IERSSVZFUl9IQVZFX0lSUSB8IERSSVZFUl9IQVZFX0RNQSB8IERSSVZFUl9JUlFfU0hBUkVEIHwgRFJJVkVSX0lSUV9WQkwsCisJLmRyaXZlcl9mZWF0dXJlcyA9CisJICAgIERSSVZFUl9VU0VfQUdQIHwgRFJJVkVSX1VTRV9NVFJSIHwgRFJJVkVSX1BDSV9ETUEgfCBEUklWRVJfU0cgfAorCSAgICBEUklWRVJfSEFWRV9JUlEgfCBEUklWRVJfSEFWRV9ETUEgfCBEUklWRVJfSVJRX1NIQVJFRCB8CisJICAgIERSSVZFUl9JUlFfVkJMLAogCS5kZXZfcHJpdl9zaXplID0gc2l6ZW9mKGRybV9yYWRlb25fYnVmX3ByaXZfdCksCiAJLnByZWluaXQgPSByYWRlb25fZHJpdmVyX3ByZWluaXQsCiAJLnByZXNldHVwID0gcmFkZW9uX3ByZXNldHVwLApAQCAtOTUsMjEgKzk1LDIyIEBACiAJLmlvY3RscyA9IHJhZGVvbl9pb2N0bHMsCiAJLmRtYV9pb2N0bCA9IHJhZGVvbl9jcF9idWZmZXJzLAogCS5mb3BzID0gewotCQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkJLm9wZW4gPSBkcm1fb3BlbiwKLQkJLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKLQkJLmlvY3RsID0gZHJtX2lvY3RsLAotCQkubW1hcCA9IGRybV9tbWFwLAotCQkucG9sbCA9IGRybV9wb2xsLAotCQkuZmFzeW5jID0gZHJtX2Zhc3luYywKKwkJIC5vd25lciA9IFRISVNfTU9EVUxFLAorCQkgLm9wZW4gPSBkcm1fb3BlbiwKKwkJIC5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCisJCSAuaW9jdGwgPSBkcm1faW9jdGwsCisJCSAubW1hcCA9IGRybV9tbWFwLAorCQkgLnBvbGwgPSBkcm1fcG9sbCwKKwkJIC5mYXN5bmMgPSBkcm1fZmFzeW5jLAogI2lmZGVmIENPTkZJR19DT01QQVQKLQkJLmNvbXBhdF9pb2N0bCA9IHJhZGVvbl9jb21wYXRfaW9jdGwsCisJCSAuY29tcGF0X2lvY3RsID0gcmFkZW9uX2NvbXBhdF9pb2N0bCwKICNlbmRpZgotCX0sCisJCSB9CisJLAogCS5wY2lfZHJpdmVyID0gewotCQkubmFtZSAgICAgICAgICA9IERSSVZFUl9OQU1FLAotCQkuaWRfdGFibGUgICAgICA9IHBjaWlkbGlzdCwKLQl9CisJCSAgICAgICAubmFtZSA9IERSSVZFUl9OQU1FLAorCQkgICAgICAgLmlkX3RhYmxlID0gcGNpaWRsaXN0LAorCQkgICAgICAgfQogfTsKIAogc3RhdGljIGludCBfX2luaXQgcmFkZW9uX2luaXQodm9pZCkKQEAgLTEyNiw2ICsxMjcsNiBAQAogbW9kdWxlX2luaXQocmFkZW9uX2luaXQpOwogbW9kdWxlX2V4aXQocmFkZW9uX2V4aXQpOwogCi1NT0RVTEVfQVVUSE9SKCBEUklWRVJfQVVUSE9SICk7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIERSSVZFUl9ERVNDICk7CitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgYW5kIGFkZGl0aW9uYWwgcmlnaHRzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3JhZGVvbl9kcnYuaCBiL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX2Rydi5oCmluZGV4IDljMTAxNDEuLmUzNjA3NjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX2Rydi5oCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX2Rydi5oCkBAIC02OCw3ICs2OCw3IEBACiAgKiAxLjkgLSBBZGQgRFJNX0lPQ1RMX1JBREVPTl9DUF9SRVNVTUUgaW9jdGwuCiAgKiAgICAgICBBZGQgdGV4dHVyZSByZWN0YW5nbGUgc3VwcG9ydCBmb3IgcjEwMC4KICAqIDEuMTAtIEFkZCBTRVRQQVJBTSBpb2N0bDsgZmlyc3QgcGFyYW1ldGVyIHRvIHNldCBpcyBGQl9MT0NBVElPTiwgd2hpY2gKLSAqICAgICAgIGNsaWVudHMgdXNlIHRvIHRlbGwgdGhlIERSTSB3aGVyZSB0aGV5IHRoaW5rIHRoZSBmcmFtZWJ1ZmZlciBpcyAKKyAqICAgICAgIGNsaWVudHMgdXNlIHRvIHRlbGwgdGhlIERSTSB3aGVyZSB0aGV5IHRoaW5rIHRoZSBmcmFtZWJ1ZmZlciBpcwogICogICAgICAgbG9jYXRlZCBpbiB0aGUgY2FyZCdzIGFkZHJlc3Mgc3BhY2UKICAqIDEuMTEtIEFkZCBwYWNrZXQgUjIwMF9FTUlUX1JCM0RfQkxFTkRDT0xPUiB0byBzdXBwb3J0IEdMX0VYVF9ibGVuZF9jb2xvcgogICogICAgICAgYW5kIEdMX0VYVF9ibGVuZF9bZnVuY3xlcXVhdGlvbl1fc2VwYXJhdGUgb24gcjIwMApAQCAtMTM0LDE1ICsxMzQsMTUgQEAKIAlDSElQX0lTX0lHUCA9IDB4MDAwMjAwMDBVTCwKIAlDSElQX1NJTkdMRV9DUlRDID0gMHgwMDA0MDAwMFVMLAogCUNISVBfSVNfQUdQID0gMHgwMDA4MDAwMFVMLAotCUNISVBfSEFTX0hJRVJaID0gMHgwMDEwMDAwMFVMLCAKKwlDSElQX0hBU19ISUVSWiA9IDB4MDAxMDAwMDBVTCwKIAlDSElQX0lTX1BDSUUgPSAweDAwMjAwMDAwVUwsCiB9OwogCiB0eXBlZGVmIHN0cnVjdCBkcm1fcmFkZW9uX2ZyZWVsaXN0IHsKLSAgIAl1bnNpZ25lZCBpbnQgYWdlOwotICAgCWRybV9idWZfdCAqYnVmOwotICAgCXN0cnVjdCBkcm1fcmFkZW9uX2ZyZWVsaXN0ICpuZXh0OwotICAgCXN0cnVjdCBkcm1fcmFkZW9uX2ZyZWVsaXN0ICpwcmV2OworCXVuc2lnbmVkIGludCBhZ2U7CisJZHJtX2J1Zl90ICpidWY7CisJc3RydWN0IGRybV9yYWRlb25fZnJlZWxpc3QgKm5leHQ7CisJc3RydWN0IGRybV9yYWRlb25fZnJlZWxpc3QgKnByZXY7CiB9IGRybV9yYWRlb25fZnJlZWxpc3RfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX3JhZGVvbl9yaW5nX2J1ZmZlciB7CkBAIC0yMDQsOCArMjA0LDggQEAKIAlpbnQgY3BfbW9kZTsKIAlpbnQgY3BfcnVubmluZzsKIAotICAgCWRybV9yYWRlb25fZnJlZWxpc3RfdCAqaGVhZDsKLSAgIAlkcm1fcmFkZW9uX2ZyZWVsaXN0X3QgKnRhaWw7CisJZHJtX3JhZGVvbl9mcmVlbGlzdF90ICpoZWFkOworCWRybV9yYWRlb25fZnJlZWxpc3RfdCAqdGFpbDsKIAlpbnQgbGFzdF9idWY7CiAJdm9sYXRpbGUgdTMyICpzY3JhdGNoOwogCWludCB3cml0ZWJhY2tfd29ya3M7CkBAIC0yNDYsNyArMjQ2LDcgQEAKIAl1MzIgZGVwdGhfcGl0Y2hfb2Zmc2V0OwogCiAJZHJtX3JhZGVvbl9kZXB0aF9jbGVhcl90IGRlcHRoX2NsZWFyOwotCQorCiAJdW5zaWduZWQgbG9uZyBmYl9vZmZzZXQ7CiAJdW5zaWduZWQgbG9uZyBtbWlvX29mZnNldDsKIAl1bnNpZ25lZCBsb25nIHJpbmdfb2Zmc2V0OwpAQCAtMjY0LDE0ICsyNjQsMTQgQEAKIAlzdHJ1Y3QgbWVtX2Jsb2NrICpmYl9oZWFwOwogCiAJLyogU1cgaW50ZXJydXB0ICovCi0gICAJd2FpdF9xdWV1ZV9oZWFkX3Qgc3dpX3F1ZXVlOwotICAgCWF0b21pY190IHN3aV9lbWl0dGVkOworCXdhaXRfcXVldWVfaGVhZF90IHN3aV9xdWV1ZTsKKwlhdG9taWNfdCBzd2lfZW1pdHRlZDsKIAogCXN0cnVjdCByYWRlb25fc3VyZmFjZSBzdXJmYWNlc1tSQURFT05fTUFYX1NVUkZBQ0VTXTsKLQlzdHJ1Y3QgcmFkZW9uX3ZpcnRfc3VyZmFjZSB2aXJ0X3N1cmZhY2VzWzIqUkFERU9OX01BWF9TVVJGQUNFU107CisJc3RydWN0IHJhZGVvbl92aXJ0X3N1cmZhY2UgdmlydF9zdXJmYWNlc1syICogUkFERU9OX01BWF9TVVJGQUNFU107CiAKLSAJdW5zaWduZWQgbG9uZyBwY2lnYXJ0X29mZnNldDsKLSAJZHJtX2F0aV9wY2lnYXJ0X2luZm8gZ2FydF9pbmZvOworCXVuc2lnbmVkIGxvbmcgcGNpZ2FydF9vZmZzZXQ7CisJZHJtX2F0aV9wY2lnYXJ0X2luZm8gZ2FydF9pbmZvOwogCiAJLyogc3RhcnRpbmcgZnJvbSBoZXJlIG9uLCBkYXRhIGlzIHByZXNlcnZlZCBhY2Nyb3NzIGFuIG9wZW4gKi8KIAl1aW50MzJfdCBmbGFnczsJCS8qIHNlZSByYWRlb25fY2hpcF9mbGFncyAqLwpAQCAtMjgyLDYyICsyODIsNjQgQEAKIH0gZHJtX3JhZGVvbl9idWZfcHJpdl90OwogCiAJCQkJLyogcmFkZW9uX2NwLmMgKi8KLWV4dGVybiBpbnQgcmFkZW9uX2NwX2luaXQoIERSTV9JT0NUTF9BUkdTICk7Ci1leHRlcm4gaW50IHJhZGVvbl9jcF9zdGFydCggRFJNX0lPQ1RMX0FSR1MgKTsKLWV4dGVybiBpbnQgcmFkZW9uX2NwX3N0b3AoIERSTV9JT0NUTF9BUkdTICk7Ci1leHRlcm4gaW50IHJhZGVvbl9jcF9yZXNldCggRFJNX0lPQ1RMX0FSR1MgKTsKLWV4dGVybiBpbnQgcmFkZW9uX2NwX2lkbGUoIERSTV9JT0NUTF9BUkdTICk7Ci1leHRlcm4gaW50IHJhZGVvbl9jcF9yZXN1bWUoIERSTV9JT0NUTF9BUkdTICk7Ci1leHRlcm4gaW50IHJhZGVvbl9lbmdpbmVfcmVzZXQoIERSTV9JT0NUTF9BUkdTICk7Ci1leHRlcm4gaW50IHJhZGVvbl9mdWxsc2NyZWVuKCBEUk1fSU9DVExfQVJHUyApOwotZXh0ZXJuIGludCByYWRlb25fY3BfYnVmZmVycyggRFJNX0lPQ1RMX0FSR1MgKTsKK2V4dGVybiBpbnQgcmFkZW9uX2NwX2luaXQoRFJNX0lPQ1RMX0FSR1MpOworZXh0ZXJuIGludCByYWRlb25fY3Bfc3RhcnQoRFJNX0lPQ1RMX0FSR1MpOworZXh0ZXJuIGludCByYWRlb25fY3Bfc3RvcChEUk1fSU9DVExfQVJHUyk7CitleHRlcm4gaW50IHJhZGVvbl9jcF9yZXNldChEUk1fSU9DVExfQVJHUyk7CitleHRlcm4gaW50IHJhZGVvbl9jcF9pZGxlKERSTV9JT0NUTF9BUkdTKTsKK2V4dGVybiBpbnQgcmFkZW9uX2NwX3Jlc3VtZShEUk1fSU9DVExfQVJHUyk7CitleHRlcm4gaW50IHJhZGVvbl9lbmdpbmVfcmVzZXQoRFJNX0lPQ1RMX0FSR1MpOworZXh0ZXJuIGludCByYWRlb25fZnVsbHNjcmVlbihEUk1fSU9DVExfQVJHUyk7CitleHRlcm4gaW50IHJhZGVvbl9jcF9idWZmZXJzKERSTV9JT0NUTF9BUkdTKTsKIAotZXh0ZXJuIHZvaWQgcmFkZW9uX2ZyZWVsaXN0X3Jlc2V0KCBkcm1fZGV2aWNlX3QgKmRldiApOwotZXh0ZXJuIGRybV9idWZfdCAqcmFkZW9uX2ZyZWVsaXN0X2dldCggZHJtX2RldmljZV90ICpkZXYgKTsKK2V4dGVybiB2b2lkIHJhZGVvbl9mcmVlbGlzdF9yZXNldChkcm1fZGV2aWNlX3QgKiBkZXYpOworZXh0ZXJuIGRybV9idWZfdCAqcmFkZW9uX2ZyZWVsaXN0X2dldChkcm1fZGV2aWNlX3QgKiBkZXYpOwogCi1leHRlcm4gaW50IHJhZGVvbl93YWl0X3JpbmcoIGRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiwgaW50IG4gKTsKK2V4dGVybiBpbnQgcmFkZW9uX3dhaXRfcmluZyhkcm1fcmFkZW9uX3ByaXZhdGVfdCAqIGRldl9wcml2LCBpbnQgbik7CiAKLWV4dGVybiBpbnQgcmFkZW9uX2RvX2NwX2lkbGUoIGRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiApOworZXh0ZXJuIGludCByYWRlb25fZG9fY3BfaWRsZShkcm1fcmFkZW9uX3ByaXZhdGVfdCAqIGRldl9wcml2KTsKIAogZXh0ZXJuIGludCByYWRlb25fZHJpdmVyX3ByZWluaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmbGFncyk7CiBleHRlcm4gaW50IHJhZGVvbl9wcmVzZXR1cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiBpbnQgcmFkZW9uX2RyaXZlcl9wb3N0Y2xlYW51cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIAotZXh0ZXJuIGludCByYWRlb25fbWVtX2FsbG9jKCBEUk1fSU9DVExfQVJHUyApOwotZXh0ZXJuIGludCByYWRlb25fbWVtX2ZyZWUoIERSTV9JT0NUTF9BUkdTICk7Ci1leHRlcm4gaW50IHJhZGVvbl9tZW1faW5pdF9oZWFwKCBEUk1fSU9DVExfQVJHUyApOwotZXh0ZXJuIHZvaWQgcmFkZW9uX21lbV90YWtlZG93biggc3RydWN0IG1lbV9ibG9jayAqKmhlYXAgKTsKLWV4dGVybiB2b2lkIHJhZGVvbl9tZW1fcmVsZWFzZSggRFJNRklMRSBmaWxwLCBzdHJ1Y3QgbWVtX2Jsb2NrICpoZWFwICk7CitleHRlcm4gaW50IHJhZGVvbl9tZW1fYWxsb2MoRFJNX0lPQ1RMX0FSR1MpOworZXh0ZXJuIGludCByYWRlb25fbWVtX2ZyZWUoRFJNX0lPQ1RMX0FSR1MpOworZXh0ZXJuIGludCByYWRlb25fbWVtX2luaXRfaGVhcChEUk1fSU9DVExfQVJHUyk7CitleHRlcm4gdm9pZCByYWRlb25fbWVtX3Rha2Vkb3duKHN0cnVjdCBtZW1fYmxvY2sgKipoZWFwKTsKK2V4dGVybiB2b2lkIHJhZGVvbl9tZW1fcmVsZWFzZShEUk1GSUxFIGZpbHAsIHN0cnVjdCBtZW1fYmxvY2sgKmhlYXApOwogCiAJCQkJLyogcmFkZW9uX2lycS5jICovCi1leHRlcm4gaW50IHJhZGVvbl9pcnFfZW1pdCggRFJNX0lPQ1RMX0FSR1MgKTsKLWV4dGVybiBpbnQgcmFkZW9uX2lycV93YWl0KCBEUk1fSU9DVExfQVJHUyApOworZXh0ZXJuIGludCByYWRlb25faXJxX2VtaXQoRFJNX0lPQ1RMX0FSR1MpOworZXh0ZXJuIGludCByYWRlb25faXJxX3dhaXQoRFJNX0lPQ1RMX0FSR1MpOwogCi1leHRlcm4gdm9pZCByYWRlb25fZG9fcmVsZWFzZShkcm1fZGV2aWNlX3QgKmRldik7Ci1leHRlcm4gaW50IHJhZGVvbl9kcml2ZXJfdmJsYW5rX3dhaXQoZHJtX2RldmljZV90ICpkZXYsIHVuc2lnbmVkIGludCAqc2VxdWVuY2UpOwotZXh0ZXJuIGlycXJldHVybl90IHJhZGVvbl9kcml2ZXJfaXJxX2hhbmRsZXIoIERSTV9JUlFfQVJHUyApOwotZXh0ZXJuIHZvaWQgcmFkZW9uX2RyaXZlcl9pcnFfcHJlaW5zdGFsbCggZHJtX2RldmljZV90ICpkZXYgKTsKLWV4dGVybiB2b2lkIHJhZGVvbl9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsKCBkcm1fZGV2aWNlX3QgKmRldiApOwotZXh0ZXJuIHZvaWQgcmFkZW9uX2RyaXZlcl9pcnFfdW5pbnN0YWxsKCBkcm1fZGV2aWNlX3QgKmRldiApOwotZXh0ZXJuIHZvaWQgcmFkZW9uX2RyaXZlcl9wcmVyZWxlYXNlKGRybV9kZXZpY2VfdCAqZGV2LCBEUk1GSUxFIGZpbHApOwotZXh0ZXJuIHZvaWQgcmFkZW9uX2RyaXZlcl9wcmV0YWtlZG93bihkcm1fZGV2aWNlX3QgKmRldik7Ci1leHRlcm4gaW50IHJhZGVvbl9kcml2ZXJfb3Blbl9oZWxwZXIoZHJtX2RldmljZV90ICpkZXYsIGRybV9maWxlX3QgKmZpbHBfcHJpdik7Ci1leHRlcm4gdm9pZCByYWRlb25fZHJpdmVyX2ZyZWVfZmlscF9wcml2KGRybV9kZXZpY2VfdCAqZGV2LCBkcm1fZmlsZV90ICpmaWxwX3ByaXYpOworZXh0ZXJuIHZvaWQgcmFkZW9uX2RvX3JlbGVhc2UoZHJtX2RldmljZV90ICogZGV2KTsKK2V4dGVybiBpbnQgcmFkZW9uX2RyaXZlcl92Ymxhbmtfd2FpdChkcm1fZGV2aWNlX3QgKiBkZXYsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKTsKK2V4dGVybiBpcnFyZXR1cm5fdCByYWRlb25fZHJpdmVyX2lycV9oYW5kbGVyKERSTV9JUlFfQVJHUyk7CitleHRlcm4gdm9pZCByYWRlb25fZHJpdmVyX2lycV9wcmVpbnN0YWxsKGRybV9kZXZpY2VfdCAqIGRldik7CitleHRlcm4gdm9pZCByYWRlb25fZHJpdmVyX2lycV9wb3N0aW5zdGFsbChkcm1fZGV2aWNlX3QgKiBkZXYpOworZXh0ZXJuIHZvaWQgcmFkZW9uX2RyaXZlcl9pcnFfdW5pbnN0YWxsKGRybV9kZXZpY2VfdCAqIGRldik7CitleHRlcm4gdm9pZCByYWRlb25fZHJpdmVyX3ByZXJlbGVhc2UoZHJtX2RldmljZV90ICogZGV2LCBEUk1GSUxFIGZpbHApOworZXh0ZXJuIHZvaWQgcmFkZW9uX2RyaXZlcl9wcmV0YWtlZG93bihkcm1fZGV2aWNlX3QgKiBkZXYpOworZXh0ZXJuIGludCByYWRlb25fZHJpdmVyX29wZW5faGVscGVyKGRybV9kZXZpY2VfdCAqIGRldiwKKwkJCQkgICAgIGRybV9maWxlX3QgKiBmaWxwX3ByaXYpOworZXh0ZXJuIHZvaWQgcmFkZW9uX2RyaXZlcl9mcmVlX2ZpbHBfcHJpdihkcm1fZGV2aWNlX3QgKiBkZXYsCisJCQkJCSBkcm1fZmlsZV90ICogZmlscF9wcml2KTsKIAotZXh0ZXJuIGludCByYWRlb25fcHJlaW5pdCggc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmbGFncyApOwotZXh0ZXJuIGludCByYWRlb25fcG9zdGluaXQoIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MgKTsKLWV4dGVybiBpbnQgcmFkZW9uX3Bvc3RjbGVhbnVwKCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ICk7CitleHRlcm4gaW50IHJhZGVvbl9wcmVpbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOworZXh0ZXJuIGludCByYWRlb25fcG9zdGluaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmbGFncyk7CitleHRlcm4gaW50IHJhZGVvbl9wb3N0Y2xlYW51cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIAogZXh0ZXJuIGxvbmcgcmFkZW9uX2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwKIAkJCQl1bnNpZ25lZCBsb25nIGFyZyk7CiAKLQogLyogcjMwMF9jbWRidWYuYyAqLwogZXh0ZXJuIHZvaWQgcjMwMF9pbml0X3JlZ19mbGFncyh2b2lkKTsKIAotZXh0ZXJuIGludCByMzAwX2RvX2NwX2NtZGJ1Zihkcm1fZGV2aWNlX3QqIGRldiwgRFJNRklMRSBmaWxwLAotCQkJICAgICBkcm1fZmlsZV90KiBmaWxwX3ByaXYsCi0JCQkgICAgIGRybV9yYWRlb25fY21kX2J1ZmZlcl90KiBjbWRidWYpOworZXh0ZXJuIGludCByMzAwX2RvX2NwX2NtZGJ1Zihkcm1fZGV2aWNlX3QgKiBkZXYsIERSTUZJTEUgZmlscCwKKwkJCSAgICAgZHJtX2ZpbGVfdCAqIGZpbHBfcHJpdiwKKwkJCSAgICAgZHJtX3JhZGVvbl9jbWRfYnVmZmVyX3QgKiBjbWRidWYpOwogCiAvKiBGbGFncyBmb3Igc3RhdHMuYm94ZXMKICAqLwpAQCAtMzQ3LDggKzM0OSw2IEBACiAjZGVmaW5lIFJBREVPTl9CT1hfV0FJVF9JRExFICAgICAweDgKICNkZWZpbmUgUkFERU9OX0JPWF9URVhUVVJFX0xPQUQgIDB4MTAKIAotCi0KIC8qIFJlZ2lzdGVyIGRlZmluaXRpb25zLCByZWdpc3RlciBhY2Nlc3MgbWFjcm9zIGFuZCBkcm1BZGRNYXAgY29uc3RhbnRzCiAgKiBmb3IgUmFkZW9uIGtlcm5lbCBkcml2ZXIuCiAgKi8KQEAgLTQ0Miw3ICs0NDIsNiBAQAogCQkJCT8gRFJNX1JFQUQzMiggZGV2X3ByaXYtPnJpbmdfcnB0ciwgUkFERU9OX1NDUkFUQ0hPRkYoeCkgKSBcCiAJCQkJOiBSQURFT05fUkVBRCggUkFERU9OX1NDUkFUQ0hfUkVHMCArIDQqKHgpICkgKQogCi0KICNkZWZpbmUgUkFERU9OX0dFTl9JTlRfQ05UTAkJMHgwMDQwCiAjCWRlZmluZSBSQURFT05fQ1JUQ19WQkxBTktfTUFTSwkJKDEgPDwgMCkKICMJZGVmaW5lIFJBREVPTl9HVUlfSURMRV9JTlRfRU5BQkxFCSgxIDw8IDE5KQpAQCAtNjUwLDcgKzY0OSw2IEBACiAjCWRlZmluZSBSQURFT05fREVQVEhfRk9STUFUXzE2QklUX0lOVF9aCSgwIDw8IDApCiAjCWRlZmluZSBSQURFT05fREVQVEhfRk9STUFUXzI0QklUX0lOVF9aCSgyIDw8IDApCiAKLQogLyogQ1AgcmVnaXN0ZXJzICovCiAjZGVmaW5lIFJBREVPTl9DUF9NRV9SQU1fQUREUgkJMHgwN2Q0CiAjZGVmaW5lIFJBREVPTl9DUF9NRV9SQU1fUkFERFIJCTB4MDdkOApAQCAtNjk4LDcgKzY5Niw3IEBACiAjICAgICAgIGRlZmluZSBSQURFT05fQ1BfTkVYVF9DSEFSICAgICAgICAgICAgICAweDAwMDAxOTAwCiAjICAgICAgIGRlZmluZSBSQURFT05fQ1BfUExZX05FWFRTQ0FOICAgICAgICAgICAweDAwMDAxRDAwCiAjICAgICAgIGRlZmluZSBSQURFT05fQ1BfU0VUX1NDSVNTT1JTICAgICAgICAgICAweDAwMDAxRTAwCi0gICAgICAgICAgICAgLyogR0VOX0lORFhfUFJJTSBpcyB1bnN1cHBvcnRlZCBzdGFydGluZyB3aXRoIFIzMDAgKi8KKwkgICAgIC8qIEdFTl9JTkRYX1BSSU0gaXMgdW5zdXBwb3J0ZWQgc3RhcnRpbmcgd2l0aCBSMzAwICovCiAjCWRlZmluZSBSQURFT05fM0RfUk5EUl9HRU5fSU5EWF9QUklNCTB4MDAwMDIzMDAKICMJZGVmaW5lIFJBREVPTl9XQUlUX0ZPUl9JRExFCQkweDAwMDAyNjAwCiAjCWRlZmluZSBSQURFT05fM0RfRFJBV19WQlVGCQkweDAwMDAyODAwCkBAIC03ODIsMTkgKzc4MCwxOSBAQAogI2RlZmluZSBSMjAwX1BQX1RYQ0JMRU5EXzUgICAgICAgICAgICAgICAgMHgyZjUwCiAjZGVmaW5lIFIyMDBfUFBfVFhDQkxFTkRfNiAgICAgICAgICAgICAgICAweDJmNjAKICNkZWZpbmUgUjIwMF9QUF9UWENCTEVORF83ICAgICAgICAgICAgICAgIDB4MmY3MAotI2RlZmluZSBSMjAwX1NFX1RDTF9MSUdIVF9NT0RFTF9DVExfMCAgICAgMHgyMjY4IAorI2RlZmluZSBSMjAwX1NFX1RDTF9MSUdIVF9NT0RFTF9DVExfMCAgICAgMHgyMjY4CiAjZGVmaW5lIFIyMDBfUFBfVEZBQ1RPUl8wICAgICAgICAgICAgICAgICAweDJlZTAKICNkZWZpbmUgUjIwMF9TRV9WVFhfRk1UXzAgICAgICAgICAgICAgICAgIDB4MjA4OAogI2RlZmluZSBSMjAwX1NFX1ZBUF9DTlRMICAgICAgICAgICAgICAgICAgMHgyMDgwCiAjZGVmaW5lIFIyMDBfU0VfVENMX01BVFJJWF9TRUxfMCAgICAgICAgICAweDIyMzAKLSNkZWZpbmUgUjIwMF9TRV9UQ0xfVEVYX1BST0NfQ1RMXzIgICAgICAgIDB4MjJhOCAKLSNkZWZpbmUgUjIwMF9TRV9UQ0xfVUNQX1ZFUlRfQkxFTkRfQ1RMICAgIDB4MjJjMCAKLSNkZWZpbmUgUjIwMF9QUF9UWEZJTFRFUl81ICAgICAgICAgICAgICAgIDB4MmNhMCAKLSNkZWZpbmUgUjIwMF9QUF9UWEZJTFRFUl80ICAgICAgICAgICAgICAgIDB4MmM4MCAKLSNkZWZpbmUgUjIwMF9QUF9UWEZJTFRFUl8zICAgICAgICAgICAgICAgIDB4MmM2MCAKLSNkZWZpbmUgUjIwMF9QUF9UWEZJTFRFUl8yICAgICAgICAgICAgICAgIDB4MmM0MCAKLSNkZWZpbmUgUjIwMF9QUF9UWEZJTFRFUl8xICAgICAgICAgICAgICAgIDB4MmMyMCAKLSNkZWZpbmUgUjIwMF9QUF9UWEZJTFRFUl8wICAgICAgICAgICAgICAgIDB4MmMwMCAKKyNkZWZpbmUgUjIwMF9TRV9UQ0xfVEVYX1BST0NfQ1RMXzIgICAgICAgIDB4MjJhOAorI2RlZmluZSBSMjAwX1NFX1RDTF9VQ1BfVkVSVF9CTEVORF9DVEwgICAgMHgyMmMwCisjZGVmaW5lIFIyMDBfUFBfVFhGSUxURVJfNSAgICAgICAgICAgICAgICAweDJjYTAKKyNkZWZpbmUgUjIwMF9QUF9UWEZJTFRFUl80ICAgICAgICAgICAgICAgIDB4MmM4MAorI2RlZmluZSBSMjAwX1BQX1RYRklMVEVSXzMgICAgICAgICAgICAgICAgMHgyYzYwCisjZGVmaW5lIFIyMDBfUFBfVFhGSUxURVJfMiAgICAgICAgICAgICAgICAweDJjNDAKKyNkZWZpbmUgUjIwMF9QUF9UWEZJTFRFUl8xICAgICAgICAgICAgICAgIDB4MmMyMAorI2RlZmluZSBSMjAwX1BQX1RYRklMVEVSXzAgICAgICAgICAgICAgICAgMHgyYzAwCiAjZGVmaW5lIFIyMDBfUFBfVFhPRkZTRVRfNSAgICAgICAgICAgICAgICAweDJkNzgKICNkZWZpbmUgUjIwMF9QUF9UWE9GRlNFVF80ICAgICAgICAgICAgICAgIDB4MmQ2MAogI2RlZmluZSBSMjAwX1BQX1RYT0ZGU0VUXzMgICAgICAgICAgICAgICAgMHgyZDQ4CkBAIC04NDgsMTMgKzg0NiwxMyBAQAogI2RlZmluZSBSMjAwX1JFX1NDSVNTT1JfVExfMCAgICAgICAgICAgICAgMHgxY2Q4CiAjZGVmaW5lIFIyMDBfUkVfU0NJU1NPUl9UTF8xICAgICAgICAgICAgICAweDFjZTAKICNkZWZpbmUgUjIwMF9SRV9TQ0lTU09SX1RMXzIgICAgICAgICAgICAgIDB4MWNlOAotI2RlZmluZSBSMjAwX1JCM0RfREVQVEhYWV9PRkZTRVQgICAgICAgICAgMHgxZDYwIAorI2RlZmluZSBSMjAwX1JCM0RfREVQVEhYWV9PRkZTRVQgICAgICAgICAgMHgxZDYwCiAjZGVmaW5lIFIyMDBfUkVfQVVYX1NDSVNTT1JfQ05UTCAgICAgICAgICAweDI2ZjAKICNkZWZpbmUgUjIwMF9TRV9WVFhfU1RBVEVfQ05UTCAgICAgICAgICAgIDB4MjE4MAogI2RlZmluZSBSMjAwX1JFX1BPSU5UU0laRSAgICAgICAgICAgICAgICAgMHgyNjQ4CiAjZGVmaW5lIFIyMDBfU0VfVENMX0lOUFVUX1ZUWF9WRUNUT1JfQUREUl8wIDB4MjI1NAogCi0jZGVmaW5lIFJBREVPTl9QUF9URVhfU0laRV8wICAgICAgICAgICAgICAgIDB4MWQwNCAgLyogTlBPVCAqLworI2RlZmluZSBSQURFT05fUFBfVEVYX1NJWkVfMCAgICAgICAgICAgICAgICAweDFkMDQJLyogTlBPVCAqLwogI2RlZmluZSBSQURFT05fUFBfVEVYX1NJWkVfMSAgICAgICAgICAgICAgICAweDFkMGMKICNkZWZpbmUgUkFERU9OX1BQX1RFWF9TSVpFXzIgICAgICAgICAgICAgICAgMHgxZDE0CiAKQEAgLTg3NSw3ICs4NzMsNyBAQAogI2RlZmluZSBTRV9WVFhfRk1UXzBfX1ZUWF9DT0xPUl8wX0ZNVF9fU0hJRlQgICAgICAgICAgICAgICAweDAwMDAwMDBiCiAjZGVmaW5lIFIyMDBfM0RfRFJBV19JTU1EXzIgICAgICAweEMwMDAzNTAwCiAjZGVmaW5lIFIyMDBfU0VfVlRYX0ZNVF8xICAgICAgICAgICAgICAgICAweDIwOGMKLSNkZWZpbmUgUjIwMF9SRV9DTlRMICAgICAgICAgICAgICAgICAgICAgIDB4MWM1MCAKKyNkZWZpbmUgUjIwMF9SRV9DTlRMICAgICAgICAgICAgICAgICAgICAgIDB4MWM1MAogCiAjZGVmaW5lIFIyMDBfUkIzRF9CTEVORENPTE9SICAgICAgICAgICAgICAweDMyMTgKIApAQCAtODg0LDcgKzg4Miw3IEBACiAjZGVmaW5lIFIyMDBfUFBfVFJJX1BFUkYgMHgyY2Y4CiAKICNkZWZpbmUgUjIwMF9QUF9BRlNfMCAgICAgICAgICAgICAgICAgICAgIDB4MmY4MAotI2RlZmluZSBSMjAwX1BQX0FGU18xICAgICAgICAgICAgICAgICAgICAgMHgyZjAwIC8qIHNhbWUgYXMgdHhjYmxlbmRfMCAqLworI2RlZmluZSBSMjAwX1BQX0FGU18xICAgICAgICAgICAgICAgICAgICAgMHgyZjAwCS8qIHNhbWUgYXMgdHhjYmxlbmRfMCAqLwogCiAvKiBDb25zdGFudHMgKi8KICNkZWZpbmUgUkFERU9OX01BWF9VU0VDX1RJTUVPVVQJCTEwMDAwMAkvKiAxMDAgbXMgKi8KQEAgLTkzMiw3ICs5MzAsNiBAQAogI2RlZmluZSBDUF9QQUNLRVQzKCBwa3QsIG4gKQkJCQkJCVwKIAkoUkFERU9OX0NQX1BBQ0tFVDMgfCAocGt0KSB8ICgobikgPDwgMTYpKQogCi0KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqIEVuZ2luZSBjb250cm9sIGhlbHBlciBtYWNyb3MKICAqLwpAQCAtOTgxLDEyICs5NzgsMTEgQEAKIAlPVVRfUklORyggUkFERU9OX1JCM0RfWkNfRkxVU0hfQUxMICk7CQkJCVwKIH0gd2hpbGUgKDApCiAKLQogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogTWlzYyBoZWxwZXIgbWFjcm9zCiAgKi8KIAotLyogUGVyZmJveCBmdW5jdGlvbmFsaXR5IG9ubHkuICAKKy8qIFBlcmZib3ggZnVuY3Rpb25hbGl0eSBvbmx5LgogICovCiAjZGVmaW5lIFJJTkdfU1BBQ0VfVEVTVF9XSVRIX1JFVFVSTiggZGV2X3ByaXYgKQkJCQlcCiBkbyB7CQkJCQkJCQkJXApAQCAtMTAyMyw3ICsxMDE5LDYgQEAKIAlPVVRfUklORyggYWdlICk7CQkJCQkJXAogfSB3aGlsZSAoMCkKIAotCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiBSaW5nIGNvbnRyb2wKICAqLwpAQCAtMTA4NCw3ICsxMDc5LDYgQEAKIAlPVVRfUklORyggdmFsICk7CQkJCQkJXAogfSB3aGlsZSAoMCkKIAotCiAjZGVmaW5lIE9VVF9SSU5HX1RBQkxFKCB0YWIsIHN6ICkgZG8gewkJCQkJXAogCWludCBfc2l6ZSA9IChzeik7CQkJCQlcCiAJaW50ICpfdGFiID0gKGludCAqKSh0YWIpOwkJCQlcCkBAIC0xMTA5LDUgKzExMDMsNCBAQAogCXdyaXRlICY9IG1hc2s7CQkJCQkJXAogfSB3aGlsZSAoMCkKIAotCi0jZW5kaWYgLyogX19SQURFT05fRFJWX0hfXyAqLworI2VuZGlmCQkJCS8qIF9fUkFERU9OX0RSVl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX2lvYzMyLmMgYi9kcml2ZXJzL2NoYXIvZHJtL3JhZGVvbl9pb2MzMi5jCmluZGV4IGJmZTYxMjIuLmZlZjRhMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX2lvYzMyLmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9yYWRlb25faW9jMzIuYwpAQCAtOTQsNyArOTQsNyBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAogCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQkgRFJNX0lPQ1RMX1JBREVPTl9DUF9JTklULCAodW5zaWduZWQgbG9uZykgaW5pdCk7CisJCQkgRFJNX0lPQ1RMX1JBREVPTl9DUF9JTklULCAodW5zaWduZWQgbG9uZylpbml0KTsKIH0KIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX3JhZGVvbl9jbGVhcjMyIHsKQEAgLTEwMiw4ICsxMDIsOCBAQAogCXVuc2lnbmVkIGludCBjbGVhcl9jb2xvcjsKIAl1bnNpZ25lZCBpbnQgY2xlYXJfZGVwdGg7CiAJdW5zaWduZWQgaW50IGNvbG9yX21hc2s7Ci0JdW5zaWduZWQgaW50IGRlcHRoX21hc2s7ICAgLyogbWlzbmFtZWQgZmllbGQ6ICBzaG91bGQgYmUgc3RlbmNpbCAqLwotCXUzMgkgICAgIGRlcHRoX2JveGVzOworCXVuc2lnbmVkIGludCBkZXB0aF9tYXNrOwkvKiBtaXNuYW1lZCBmaWVsZDogIHNob3VsZCBiZSBzdGVuY2lsICovCisJdTMyIGRlcHRoX2JveGVzOwogfSBkcm1fcmFkZW9uX2NsZWFyMzJfdDsKIAogc3RhdGljIGludCBjb21wYXRfcmFkZW9uX2NwX2NsZWFyKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLApAQCAtMTI3LDcgKzEyNyw3IEBACiAJCXJldHVybiAtRUZBVUxUOwogCiAJcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfUkFERU9OX0NMRUFSLCAodW5zaWduZWQgbG9uZykgY2xyKTsKKwkJCSBEUk1fSU9DVExfUkFERU9OX0NMRUFSLCAodW5zaWduZWQgbG9uZyljbHIpOwogfQogCiB0eXBlZGVmIHN0cnVjdCBkcm1fcmFkZW9uX3N0aXBwbGUzMiB7CkBAIC0xMzcsNyArMTM3LDcgQEAKIHN0YXRpYyBpbnQgY29tcGF0X3JhZGVvbl9jcF9zdGlwcGxlKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAogCQkJCSAgICB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlkcm1fcmFkZW9uX3N0aXBwbGUzMl90IF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKSBhcmc7CisJZHJtX3JhZGVvbl9zdGlwcGxlMzJfdCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAJZHJtX3JhZGVvbl9zdGlwcGxlX3QgX191c2VyICpyZXF1ZXN0OwogCXUzMiBtYXNrOwogCkBAIC0xNDYsMTYgKzE0NiwxNiBAQAogCiAJcmVxdWVzdCA9IGNvbXBhdF9hbGxvY191c2VyX3NwYWNlKHNpemVvZigqcmVxdWVzdCkpOwogCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgcmVxdWVzdCwgc2l6ZW9mKCpyZXF1ZXN0KSkKLQkgICAgfHwgX19wdXRfdXNlcigodW5zaWduZWQgaW50IF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKSBtYXNrLAorCSAgICB8fCBfX3B1dF91c2VyKCh1bnNpZ25lZCBpbnQgX191c2VyICopKHVuc2lnbmVkIGxvbmcpbWFzaywKIAkJCSAgJnJlcXVlc3QtPm1hc2spKQogCQlyZXR1cm4gLUVGQVVMVDsKIAogCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQkgRFJNX0lPQ1RMX1JBREVPTl9TVElQUExFLCAodW5zaWduZWQgbG9uZykgcmVxdWVzdCk7CisJCQkgRFJNX0lPQ1RMX1JBREVPTl9TVElQUExFLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKIH0KIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX3JhZGVvbl90ZXhfaW1hZ2UzMiB7Ci0JdW5zaWduZWQgaW50IHgsIHk7CQkvKiBCbGl0IGNvb3JkaW5hdGVzICovCisJdW5zaWduZWQgaW50IHgsIHk7CS8qIEJsaXQgY29vcmRpbmF0ZXMgKi8KIAl1bnNpZ25lZCBpbnQgd2lkdGgsIGhlaWdodDsKIAl1MzIgZGF0YTsKIH0gZHJtX3JhZGVvbl90ZXhfaW1hZ2UzMl90OwpAQCAtMTY0LDcgKzE2NCw3IEBACiAJdW5zaWduZWQgaW50IG9mZnNldDsKIAlpbnQgcGl0Y2g7CiAJaW50IGZvcm1hdDsKLQlpbnQgd2lkdGg7CQkJLyogVGV4dHVyZSBpbWFnZSBjb29yZGluYXRlcyAqLworCWludCB3aWR0aDsJCS8qIFRleHR1cmUgaW1hZ2UgY29vcmRpbmF0ZXMgKi8KIAlpbnQgaGVpZ2h0OwogCXUzMiBpbWFnZTsKIH0gZHJtX3JhZGVvbl90ZXh0dXJlMzJfdDsKQEAgLTE3Nyw3ICsxNzcsNyBAQAogCWRybV9yYWRlb25fdGV4X2ltYWdlMzJfdCBpbWczMjsKIAlkcm1fcmFkZW9uX3RleF9pbWFnZV90IF9fdXNlciAqaW1hZ2U7CiAKLQlpZiAoY29weV9mcm9tX3VzZXIoJnJlcTMyLCAodm9pZCBfX3VzZXIgKikgYXJnLCBzaXplb2YocmVxMzIpKSkKKwlpZiAoY29weV9mcm9tX3VzZXIoJnJlcTMyLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihyZXEzMikpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAlpZiAocmVxMzIuaW1hZ2UgPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yMDYsMTIgKzIwNiwxMiBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAogCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQkgRFJNX0lPQ1RMX1JBREVPTl9URVhUVVJFLCAodW5zaWduZWQgbG9uZykgcmVxdWVzdCk7CisJCQkgRFJNX0lPQ1RMX1JBREVPTl9URVhUVVJFLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKIH0KIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX3JhZGVvbl92ZXJ0ZXgyXzMyIHsKLQlpbnQgaWR4OwkJCS8qIEluZGV4IG9mIHZlcnRleCBidWZmZXIgKi8KLQlpbnQgZGlzY2FyZDsJCQkvKiBDbGllbnQgZmluaXNoZWQgd2l0aCBidWZmZXI/ICovCisJaW50IGlkeDsJCS8qIEluZGV4IG9mIHZlcnRleCBidWZmZXIgKi8KKwlpbnQgZGlzY2FyZDsJCS8qIENsaWVudCBmaW5pc2hlZCB3aXRoIGJ1ZmZlcj8gKi8KIAlpbnQgbnJfc3RhdGVzOwogCXUzMiBzdGF0ZTsKIAlpbnQgbnJfcHJpbXM7CkBAIC0yMjQsNyArMjI0LDcgQEAKIAlkcm1fcmFkZW9uX3ZlcnRleDJfMzJfdCByZXEzMjsKIAlkcm1fcmFkZW9uX3ZlcnRleDJfdCBfX3VzZXIgKnJlcXVlc3Q7CiAKLQlpZiAoY29weV9mcm9tX3VzZXIoJnJlcTMyLCAodm9pZCBfX3VzZXIgKikgYXJnLCBzaXplb2YocmVxMzIpKSkKKwlpZiAoY29weV9mcm9tX3VzZXIoJnJlcTMyLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihyZXEzMikpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAogCXJlcXVlc3QgPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShzaXplb2YoKnJlcXVlc3QpKTsKQEAgLTI0MCw3ICsyNDAsNyBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAogCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQkgRFJNX0lPQ1RMX1JBREVPTl9WRVJURVgyLCAodW5zaWduZWQgbG9uZykgcmVxdWVzdCk7CisJCQkgRFJNX0lPQ1RMX1JBREVPTl9WRVJURVgyLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKIH0KIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX3JhZGVvbl9jbWRfYnVmZmVyMzIgewpAQCAtMjU2LDcgKzI1Niw3IEBACiAJZHJtX3JhZGVvbl9jbWRfYnVmZmVyMzJfdCByZXEzMjsKIAlkcm1fcmFkZW9uX2NtZF9idWZmZXJfdCBfX3VzZXIgKnJlcXVlc3Q7CiAKLQlpZiAoY29weV9mcm9tX3VzZXIoJnJlcTMyLCAodm9pZCBfX3VzZXIgKikgYXJnLCBzaXplb2YocmVxMzIpKSkKKwlpZiAoY29weV9mcm9tX3VzZXIoJnJlcTMyLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihyZXEzMikpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAogCXJlcXVlc3QgPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShzaXplb2YoKnJlcXVlc3QpKTsKQEAgLTI3MCw3ICsyNzAsNyBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAogCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQkgRFJNX0lPQ1RMX1JBREVPTl9DTURCVUYsICh1bnNpZ25lZCBsb25nKSByZXF1ZXN0KTsKKwkJCSBEUk1fSU9DVExfUkFERU9OX0NNREJVRiwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiB9CiAKIHR5cGVkZWYgc3RydWN0IGRybV9yYWRlb25fZ2V0cGFyYW0zMiB7CkBAIC0yODQsNyArMjg0LDcgQEAKIAlkcm1fcmFkZW9uX2dldHBhcmFtMzJfdCByZXEzMjsKIAlkcm1fcmFkZW9uX2dldHBhcmFtX3QgX191c2VyICpyZXF1ZXN0OwogCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZyZXEzMiwgKHZvaWQgX191c2VyICopIGFyZywgc2l6ZW9mKHJlcTMyKSkpCisJaWYgKGNvcHlfZnJvbV91c2VyKCZyZXEzMiwgKHZvaWQgX191c2VyICopYXJnLCBzaXplb2YocmVxMzIpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlyZXF1ZXN0ID0gY29tcGF0X2FsbG9jX3VzZXJfc3BhY2Uoc2l6ZW9mKCpyZXF1ZXN0KSk7CkBAIC0yOTUsNyArMjk1LDcgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJIERSTV9JT0NUTF9SQURFT05fR0VUUEFSQU0sICh1bnNpZ25lZCBsb25nKSByZXF1ZXN0KTsKKwkJCSBEUk1fSU9DVExfUkFERU9OX0dFVFBBUkFNLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKIH0KIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX3JhZGVvbl9tZW1fYWxsb2MzMiB7CkBAIC0zMTEsNyArMzExLDcgQEAKIAlkcm1fcmFkZW9uX21lbV9hbGxvYzMyX3QgcmVxMzI7CiAJZHJtX3JhZGVvbl9tZW1fYWxsb2NfdCBfX3VzZXIgKnJlcXVlc3Q7CiAKLQlpZiAoY29weV9mcm9tX3VzZXIoJnJlcTMyLCAodm9pZCBfX3VzZXIgKikgYXJnLCBzaXplb2YocmVxMzIpKSkKKwlpZiAoY29weV9mcm9tX3VzZXIoJnJlcTMyLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihyZXEzMikpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAogCXJlcXVlc3QgPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShzaXplb2YoKnJlcXVlc3QpKTsKQEAgLTMyNCw3ICszMjQsNyBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAogCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQkgRFJNX0lPQ1RMX1JBREVPTl9BTExPQywgKHVuc2lnbmVkIGxvbmcpIHJlcXVlc3QpOworCQkJIERSTV9JT0NUTF9SQURFT05fQUxMT0MsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOwogfQogCiB0eXBlZGVmIHN0cnVjdCBkcm1fcmFkZW9uX2lycV9lbWl0MzIgewpAQCAtMzM3LDcgKzMzNyw3IEBACiAJZHJtX3JhZGVvbl9pcnFfZW1pdDMyX3QgcmVxMzI7CiAJZHJtX3JhZGVvbl9pcnFfZW1pdF90IF9fdXNlciAqcmVxdWVzdDsKIAotCWlmIChjb3B5X2Zyb21fdXNlcigmcmVxMzIsICh2b2lkIF9fdXNlciAqKSBhcmcsIHNpemVvZihyZXEzMikpKQorCWlmIChjb3B5X2Zyb21fdXNlcigmcmVxMzIsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKHJlcTMyKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJcmVxdWVzdCA9IGNvbXBhdF9hbGxvY191c2VyX3NwYWNlKHNpemVvZigqcmVxdWVzdCkpOwpAQCAtMzQ3LDcgKzM0Nyw3IEBACiAJCXJldHVybiAtRUZBVUxUOwogCiAJcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfUkFERU9OX0lSUV9FTUlULCAodW5zaWduZWQgbG9uZykgcmVxdWVzdCk7CisJCQkgRFJNX0lPQ1RMX1JBREVPTl9JUlFfRU1JVCwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiB9CiAKIGRybV9pb2N0bF9jb21wYXRfdCAqcmFkZW9uX2NvbXBhdF9pb2N0bHNbXSA9IHsKQEAgLTM3MSw4ICszNzEsNyBAQAogICogXHBhcmFtIGFyZyB1c2VyIGFyZ3VtZW50LgogICogXHJldHVybiB6ZXJvIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgbnVtYmVyIG9uIGZhaWx1cmUuCiAgKi8KLWxvbmcgcmFkZW9uX2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwKLQkJCSB1bnNpZ25lZCBsb25nIGFyZykKK2xvbmcgcmFkZW9uX2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJdW5zaWduZWQgaW50IG5yID0gRFJNX0lPQ1RMX05SKGNtZCk7CiAJZHJtX2lvY3RsX2NvbXBhdF90ICpmbiA9IE5VTEw7CkBAIC0zODYsNyArMzg1LDcgQEAKIAogCWxvY2tfa2VybmVsKCk7CQkvKiBYWFggZm9yIG5vdyAqLwogCWlmIChmbiAhPSBOVUxMKQotCQlyZXQgPSAoKmZuKShmaWxwLCBjbWQsIGFyZyk7CisJCXJldCA9ICgqZm4pIChmaWxwLCBjbWQsIGFyZyk7CiAJZWxzZQogCQlyZXQgPSBkcm1faW9jdGwoZmlscC0+Zl9kZW50cnktPmRfaW5vZGUsIGZpbHAsIGNtZCwgYXJnKTsKIAl1bmxvY2tfa2VybmVsKCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3JhZGVvbl9pcnEuYyBiL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX2lycS5jCmluZGV4IDQwNDc0YTYuLmQ2MDUxOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX2lycS5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX2lycS5jCkBAIC0xLDcgKzEsNyBAQAogLyogcmFkZW9uX2lycS5jIC0tIElSUSBoYW5kbGluZyBmb3IgcmFkZW9uIC0qLSBsaW51eC1jIC0qLQogICoKICAqIENvcHlyaWdodCAoQykgVGhlIFdlYXRoZXIgQ2hhbm5lbCwgSW5jLiAgMjAwMi4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiAKKyAqCiAgKiBUaGUgV2VhdGhlciBDaGFubmVsIChUTSkgZnVuZGVkIFR1bmdzdGVuIEdyYXBoaWNzIHRvIGRldmVsb3AgdGhlCiAgKiBpbml0aWFsIHJlbGVhc2Ugb2YgdGhlIFJhZGVvbiA4NTAwIGRyaXZlciB1bmRlciB0aGUgWEZyZWU4NiBsaWNlbnNlLgogICogVGhpcyBub3RpY2UgbXVzdCBiZSBwcmVzZXJ2ZWQuCkBAIC0zNSw3ICszNSw4IEBACiAjaW5jbHVkZSAicmFkZW9uX2RybS5oIgogI2luY2x1ZGUgInJhZGVvbl9kcnYuaCIKIAotc3RhdGljIF9faW5saW5lX18gdTMyIHJhZGVvbl9hY2tub3dsZWRnZV9pcnFzKGRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiwgdTMyIG1hc2spCitzdGF0aWMgX19pbmxpbmVfXyB1MzIgcmFkZW9uX2Fja25vd2xlZGdlX2lycXMoZHJtX3JhZGVvbl9wcml2YXRlX3QgKiBkZXZfcHJpdiwKKwkJCQkJICAgICAgdTMyIG1hc2spCiB7CiAJdTMyIGlycXMgPSBSQURFT05fUkVBRChSQURFT05fR0VOX0lOVF9TVEFUVVMpICYgbWFzazsKIAlpZiAoaXJxcykKQEAgLTYxLDM3ICs2MiwzNyBAQAogICogdGllZCB0byBkbWEgYXQgYWxsLCB0aGlzIGlzIGp1c3QgYSBoYW5nb3ZlciBmcm9tIGRyaSBwcmVoaXN0b3J5LgogICovCiAKLWlycXJldHVybl90IHJhZGVvbl9kcml2ZXJfaXJxX2hhbmRsZXIoIERSTV9JUlFfQVJHUyApCitpcnFyZXR1cm5fdCByYWRlb25fZHJpdmVyX2lycV9oYW5kbGVyKERSTV9JUlFfQVJHUykKIHsKIAlkcm1fZGV2aWNlX3QgKmRldiA9IChkcm1fZGV2aWNlX3QgKikgYXJnOwotCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IAotCSAgIChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqKWRldi0+ZGV2X3ByaXZhdGU7Ci0gICAJdTMyIHN0YXQ7CisJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0KKwkgICAgKGRybV9yYWRlb25fcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisJdTMyIHN0YXQ7CiAKIAkvKiBPbmx5IGNvbnNpZGVyIHRoZSBiaXRzIHdlJ3JlIGludGVyZXN0ZWQgaW4gLSBvdGhlcnMgY291bGQgYmUgdXNlZAogCSAqIG91dHNpZGUgdGhlIERSTQogCSAqLwotCXN0YXQgPSByYWRlb25fYWNrbm93bGVkZ2VfaXJxcyhkZXZfcHJpdiwgKFJBREVPTl9TV19JTlRfVEVTVF9BQ0sgfCAKKwlzdGF0ID0gcmFkZW9uX2Fja25vd2xlZGdlX2lycXMoZGV2X3ByaXYsIChSQURFT05fU1dfSU5UX1RFU1RfQUNLIHwKIAkJCQkJCSAgUkFERU9OX0NSVENfVkJMQU5LX1NUQVQpKTsKIAlpZiAoIXN0YXQpCiAJCXJldHVybiBJUlFfTk9ORTsKIAogCS8qIFNXIGludGVycnVwdCAqLwogCWlmIChzdGF0ICYgUkFERU9OX1NXX0lOVF9URVNUKSB7Ci0JCURSTV9XQUtFVVAoICZkZXZfcHJpdi0+c3dpX3F1ZXVlICk7CisJCURSTV9XQUtFVVAoJmRldl9wcml2LT5zd2lfcXVldWUpOwogCX0KIAogCS8qIFZCTEFOSyBpbnRlcnJ1cHQgKi8KIAlpZiAoc3RhdCAmIFJBREVPTl9DUlRDX1ZCTEFOS19TVEFUKSB7CiAJCWF0b21pY19pbmMoJmRldi0+dmJsX3JlY2VpdmVkKTsKIAkJRFJNX1dBS0VVUCgmZGV2LT52YmxfcXVldWUpOwotCQlkcm1fdmJsX3NlbmRfc2lnbmFscyggZGV2ICk7CisJCWRybV92Ymxfc2VuZF9zaWduYWxzKGRldik7CiAJfQogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgaW50IHJhZGVvbl9lbWl0X2lycShkcm1fZGV2aWNlX3QgKmRldikKK3N0YXRpYyBpbnQgcmFkZW9uX2VtaXRfaXJxKGRybV9kZXZpY2VfdCAqIGRldikKIHsKIAlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXVuc2lnbmVkIGludCByZXQ7CkBAIC0xMDAsNDIgKzEwMSw0MSBAQAogCWF0b21pY19pbmMoJmRldl9wcml2LT5zd2lfZW1pdHRlZCk7CiAJcmV0ID0gYXRvbWljX3JlYWQoJmRldl9wcml2LT5zd2lfZW1pdHRlZCk7CiAKLQlCRUdJTl9SSU5HKCA0ICk7Ci0JT1VUX1JJTkdfUkVHKCBSQURFT05fTEFTVF9TV0lfUkVHLCByZXQgKTsKLQlPVVRfUklOR19SRUcoIFJBREVPTl9HRU5fSU5UX1NUQVRVUywgUkFERU9OX1NXX0lOVF9GSVJFICk7Ci0JQURWQU5DRV9SSU5HKCk7IAotIAlDT01NSVRfUklORygpOworCUJFR0lOX1JJTkcoNCk7CisJT1VUX1JJTkdfUkVHKFJBREVPTl9MQVNUX1NXSV9SRUcsIHJldCk7CisJT1VUX1JJTkdfUkVHKFJBREVPTl9HRU5fSU5UX1NUQVRVUywgUkFERU9OX1NXX0lOVF9GSVJFKTsKKwlBRFZBTkNFX1JJTkcoKTsKKwlDT01NSVRfUklORygpOwogCiAJcmV0dXJuIHJldDsKIH0KIAotCi1zdGF0aWMgaW50IHJhZGVvbl93YWl0X2lycShkcm1fZGV2aWNlX3QgKmRldiwgaW50IHN3aV9ucikKK3N0YXRpYyBpbnQgcmFkZW9uX3dhaXRfaXJxKGRybV9kZXZpY2VfdCAqIGRldiwgaW50IHN3aV9ucikKIHsKLSAgCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IAotCSAgIChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqKWRldi0+ZGV2X3ByaXZhdGU7CisJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0KKwkgICAgKGRybV9yYWRlb25fcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CiAJaW50IHJldCA9IDA7CiAKLSAJaWYgKFJBREVPTl9SRUFEKCBSQURFT05fTEFTVF9TV0lfUkVHICkgPj0gc3dpX25yKSAgCi0gCQlyZXR1cm4gMDsgCisJaWYgKFJBREVPTl9SRUFEKFJBREVPTl9MQVNUX1NXSV9SRUcpID49IHN3aV9ucikKKwkJcmV0dXJuIDA7CiAKIAlkZXZfcHJpdi0+c3RhdHMuYm94ZXMgfD0gUkFERU9OX0JPWF9XQUlUX0lETEU7CiAKLQlEUk1fV0FJVF9PTiggcmV0LCBkZXZfcHJpdi0+c3dpX3F1ZXVlLCAzICogRFJNX0haLCAKLQkJICAgICBSQURFT05fUkVBRCggUkFERU9OX0xBU1RfU1dJX1JFRyApID49IHN3aV9uciApOworCURSTV9XQUlUX09OKHJldCwgZGV2X3ByaXYtPnN3aV9xdWV1ZSwgMyAqIERSTV9IWiwKKwkJICAgIFJBREVPTl9SRUFEKFJBREVPTl9MQVNUX1NXSV9SRUcpID49IHN3aV9ucik7CiAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgcmFkZW9uX2RyaXZlcl92Ymxhbmtfd2FpdChkcm1fZGV2aWNlX3QgKmRldiwgdW5zaWduZWQgaW50ICpzZXF1ZW5jZSkKK2ludCByYWRlb25fZHJpdmVyX3ZibGFua193YWl0KGRybV9kZXZpY2VfdCAqIGRldiwgdW5zaWduZWQgaW50ICpzZXF1ZW5jZSkKIHsKLSAgCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IAotCSAgIChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqKWRldi0+ZGV2X3ByaXZhdGU7CisJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0KKwkgICAgKGRybV9yYWRlb25fcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CiAJdW5zaWduZWQgaW50IGN1cl92Ymxhbms7CiAJaW50IHJldCA9IDA7CiAKLQlpZiAoICFkZXZfcHJpdiApIHsKLQkJRFJNX0VSUk9SKCAiJXMgY2FsbGVkIHdpdGggbm8gaW5pdGlhbGl6YXRpb25cbiIsIF9fRlVOQ1RJT05fXyApOworCWlmICghZGV2X3ByaXYpIHsKKwkJRFJNX0VSUk9SKCIlcyBjYWxsZWQgd2l0aCBubyBpbml0aWFsaXphdGlvblxuIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAl9CiAKQEAgLTE0NSwxMDEgKzE0NSwxMDAgQEAKIAogCS8qIEFzc3VtZSB0aGF0IHRoZSB1c2VyIGhhcyBtaXNzZWQgdGhlIGN1cnJlbnQgc2VxdWVuY2UgbnVtYmVyCiAJICogYnkgYWJvdXQgYSBkYXkgcmF0aGVyIHRoYW4gc2hlIHdhbnRzIHRvIHdhaXQgZm9yIHllYXJzCi0JICogdXNpbmcgdmVydGljYWwgYmxhbmtzLi4uIAorCSAqIHVzaW5nIHZlcnRpY2FsIGJsYW5rcy4uLgogCSAqLwotCURSTV9XQUlUX09OKCByZXQsIGRldi0+dmJsX3F1ZXVlLCAzKkRSTV9IWiwgCi0JCSAgICAgKCAoICggY3VyX3ZibGFuayA9IGF0b21pY19yZWFkKCZkZXYtPnZibF9yZWNlaXZlZCApICkKLQkJCSAtICpzZXF1ZW5jZSApIDw9ICgxPDwyMykgKSApOworCURSTV9XQUlUX09OKHJldCwgZGV2LT52YmxfcXVldWUsIDMgKiBEUk1fSFosCisJCSAgICAoKChjdXJfdmJsYW5rID0gYXRvbWljX3JlYWQoJmRldi0+dmJsX3JlY2VpdmVkKSkKKwkJICAgICAgLSAqc2VxdWVuY2UpIDw9ICgxIDw8IDIzKSkpOwogCiAJKnNlcXVlbmNlID0gY3VyX3ZibGFuazsKIAogCXJldHVybiByZXQ7CiB9CiAKLQogLyogTmVlZHMgdGhlIGxvY2sgYXMgaXQgdG91Y2hlcyB0aGUgcmluZy4KICAqLwotaW50IHJhZGVvbl9pcnFfZW1pdCggRFJNX0lPQ1RMX0FSR1MgKQoraW50IHJhZGVvbl9pcnFfZW1pdChEUk1fSU9DVExfQVJHUykKIHsKIAlEUk1fREVWSUNFOwogCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJZHJtX3JhZGVvbl9pcnFfZW1pdF90IGVtaXQ7CiAJaW50IHJlc3VsdDsKIAotCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTiggZGV2LCBmaWxwICk7CisJTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlscCk7CiAKLQlpZiAoICFkZXZfcHJpdiApIHsKLQkJRFJNX0VSUk9SKCAiJXMgY2FsbGVkIHdpdGggbm8gaW5pdGlhbGl6YXRpb25cbiIsIF9fRlVOQ1RJT05fXyApOworCWlmICghZGV2X3ByaXYpIHsKKwkJRFJNX0VSUk9SKCIlcyBjYWxsZWQgd2l0aCBubyBpbml0aWFsaXphdGlvblxuIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAl9CiAKLQlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwoIGVtaXQsIChkcm1fcmFkZW9uX2lycV9lbWl0X3QgX191c2VyICopZGF0YSwKLQkJCQkgIHNpemVvZihlbWl0KSApOworCURSTV9DT1BZX0ZST01fVVNFUl9JT0NUTChlbWl0LCAoZHJtX3JhZGVvbl9pcnFfZW1pdF90IF9fdXNlciAqKSBkYXRhLAorCQkJCSBzaXplb2YoZW1pdCkpOwogCi0JcmVzdWx0ID0gcmFkZW9uX2VtaXRfaXJxKCBkZXYgKTsKKwlyZXN1bHQgPSByYWRlb25fZW1pdF9pcnEoZGV2KTsKIAotCWlmICggRFJNX0NPUFlfVE9fVVNFUiggZW1pdC5pcnFfc2VxLCAmcmVzdWx0LCBzaXplb2YoaW50KSApICkgewotCQlEUk1fRVJST1IoICJjb3B5X3RvX3VzZXJcbiIgKTsKKwlpZiAoRFJNX0NPUFlfVE9fVVNFUihlbWl0LmlycV9zZXEsICZyZXN1bHQsIHNpemVvZihpbnQpKSkgeworCQlEUk1fRVJST1IoImNvcHlfdG9fdXNlclxuIik7CiAJCXJldHVybiBEUk1fRVJSKEVGQVVMVCk7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLQogLyogRG9lc24ndCBuZWVkIHRoZSBoYXJkd2FyZSBsb2NrLgogICovCi1pbnQgcmFkZW9uX2lycV93YWl0KCBEUk1fSU9DVExfQVJHUyApCitpbnQgcmFkZW9uX2lycV93YWl0KERSTV9JT0NUTF9BUkdTKQogewogCURSTV9ERVZJQ0U7CiAJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlkcm1fcmFkZW9uX2lycV93YWl0X3QgaXJxd2FpdDsKIAotCWlmICggIWRldl9wcml2ICkgewotCQlEUk1fRVJST1IoICIlcyBjYWxsZWQgd2l0aCBubyBpbml0aWFsaXphdGlvblxuIiwgX19GVU5DVElPTl9fICk7CisJaWYgKCFkZXZfcHJpdikgeworCQlEUk1fRVJST1IoIiVzIGNhbGxlZCB3aXRoIG5vIGluaXRpYWxpemF0aW9uXG4iLCBfX0ZVTkNUSU9OX18pOwogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCX0KIAotCURSTV9DT1BZX0ZST01fVVNFUl9JT0NUTCggaXJxd2FpdCwgKGRybV9yYWRlb25faXJxX3dhaXRfdCBfX3VzZXIqKWRhdGEsCi0JCQkJICBzaXplb2YoaXJxd2FpdCkgKTsKKwlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwoaXJxd2FpdCwgKGRybV9yYWRlb25faXJxX3dhaXRfdCBfX3VzZXIgKikgZGF0YSwKKwkJCQkgc2l6ZW9mKGlycXdhaXQpKTsKIAotCXJldHVybiByYWRlb25fd2FpdF9pcnEoIGRldiwgaXJxd2FpdC5pcnFfc2VxICk7CisJcmV0dXJuIHJhZGVvbl93YWl0X2lycShkZXYsIGlycXdhaXQuaXJxX3NlcSk7CiB9CiAKLQogLyogZHJtX2RtYS5oIGhvb2tzCiAqLwotdm9pZCByYWRlb25fZHJpdmVyX2lycV9wcmVpbnN0YWxsKCBkcm1fZGV2aWNlX3QgKmRldiApIHsKK3ZvaWQgcmFkZW9uX2RyaXZlcl9pcnFfcHJlaW5zdGFsbChkcm1fZGV2aWNlX3QgKiBkZXYpCit7CiAJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0KLQkJKGRybV9yYWRlb25fcHJpdmF0ZV90ICopZGV2LT5kZXZfcHJpdmF0ZTsKKwkgICAgKGRybV9yYWRlb25fcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CiAKLSAJLyogRGlzYWJsZSAqYWxsKiBpbnRlcnJ1cHRzICovCi0gICAgICAJUkFERU9OX1dSSVRFKCBSQURFT05fR0VOX0lOVF9DTlRMLCAwICk7CisJLyogRGlzYWJsZSAqYWxsKiBpbnRlcnJ1cHRzICovCisJUkFERU9OX1dSSVRFKFJBREVPTl9HRU5fSU5UX0NOVEwsIDApOwogCiAJLyogQ2xlYXIgYml0cyBpZiB0aGV5J3JlIGFscmVhZHkgaGlnaCAqLwogCXJhZGVvbl9hY2tub3dsZWRnZV9pcnFzKGRldl9wcml2LCAoUkFERU9OX1NXX0lOVF9URVNUX0FDSyB8CiAJCQkJCSAgIFJBREVPTl9DUlRDX1ZCTEFOS19TVEFUKSk7CiB9CiAKLXZvaWQgcmFkZW9uX2RyaXZlcl9pcnFfcG9zdGluc3RhbGwoIGRybV9kZXZpY2VfdCAqZGV2ICkgewordm9pZCByYWRlb25fZHJpdmVyX2lycV9wb3N0aW5zdGFsbChkcm1fZGV2aWNlX3QgKiBkZXYpCit7CiAJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0KLQkJKGRybV9yYWRlb25fcHJpdmF0ZV90ICopZGV2LT5kZXZfcHJpdmF0ZTsKKwkgICAgKGRybV9yYWRlb25fcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CiAKLSAgIAlhdG9taWNfc2V0KCZkZXZfcHJpdi0+c3dpX2VtaXR0ZWQsIDApOwotCURSTV9JTklUX1dBSVRRVUVVRSggJmRldl9wcml2LT5zd2lfcXVldWUgKTsKKwlhdG9taWNfc2V0KCZkZXZfcHJpdi0+c3dpX2VtaXR0ZWQsIDApOworCURSTV9JTklUX1dBSVRRVUVVRSgmZGV2X3ByaXYtPnN3aV9xdWV1ZSk7CiAKIAkvKiBUdXJuIG9uIFNXIGFuZCBWQkwgaW50cyAqLwotICAgCVJBREVPTl9XUklURSggUkFERU9OX0dFTl9JTlRfQ05UTCwKLQkJICAgICAgUkFERU9OX0NSVENfVkJMQU5LX01BU0sgfAkKLQkJICAgICAgUkFERU9OX1NXX0lOVF9FTkFCTEUgKTsKKwlSQURFT05fV1JJVEUoUkFERU9OX0dFTl9JTlRfQ05UTCwKKwkJICAgICBSQURFT05fQ1JUQ19WQkxBTktfTUFTSyB8IFJBREVPTl9TV19JTlRfRU5BQkxFKTsKIH0KIAotdm9pZCByYWRlb25fZHJpdmVyX2lycV91bmluc3RhbGwoIGRybV9kZXZpY2VfdCAqZGV2ICkgewordm9pZCByYWRlb25fZHJpdmVyX2lycV91bmluc3RhbGwoZHJtX2RldmljZV90ICogZGV2KQorewogCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9Ci0JCShkcm1fcmFkZW9uX3ByaXZhdGVfdCAqKWRldi0+ZGV2X3ByaXZhdGU7CisJICAgIChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwogCWlmICghZGV2X3ByaXYpCiAJCXJldHVybjsKIAogCS8qIERpc2FibGUgKmFsbCogaW50ZXJydXB0cyAqLwotCVJBREVPTl9XUklURSggUkFERU9OX0dFTl9JTlRfQ05UTCwgMCApOworCVJBREVPTl9XUklURShSQURFT05fR0VOX0lOVF9DTlRMLCAwKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX21lbS5jIGIvZHJpdmVycy9jaGFyL2RybS9yYWRlb25fbWVtLmMKaW5kZXggMTM0Zjg5NC4uMDMwYTZmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9yYWRlb25fbWVtLmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9yYWRlb25fbWVtLmMKQEAgLTEsNyArMSw3IEBACiAvKiByYWRlb25fbWVtLmMgLS0gU2ltcGxlIEdBUlQvZmIgbWVtb3J5IG1hbmFnZXIgZm9yIHJhZGVvbiAtKi0gbGludXgtYyAtKi0KICAqCiAgKiBDb3B5cmlnaHQgKEMpIFRoZSBXZWF0aGVyIENoYW5uZWwsIEluYy4gIDIwMDIuICBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogCisgKgogICogVGhlIFdlYXRoZXIgQ2hhbm5lbCAoVE0pIGZ1bmRlZCBUdW5nc3RlbiBHcmFwaGljcyB0byBkZXZlbG9wIHRoZQogICogaW5pdGlhbCByZWxlYXNlIG9mIHRoZSBSYWRlb24gODUwMCBkcml2ZXIgdW5kZXIgdGhlIFhGcmVlODYgbGljZW5zZS4KICAqIFRoaXMgbm90aWNlIG11c3QgYmUgcHJlc2VydmVkLgpAQCAtMzUsMTYgKzM1LDE3IEBACiAjaW5jbHVkZSAicmFkZW9uX2Rydi5oIgogCiAvKiBWZXJ5IHNpbXBsZSBhbGxvY2F0b3IgZm9yIEdBUlQgbWVtb3J5LCB3b3JraW5nIG9uIGEgc3RhdGljIHJhbmdlCi0gKiBhbHJlYWR5IG1hcHBlZCBpbnRvIGVhY2ggY2xpZW50J3MgYWRkcmVzcyBzcGFjZS4gIAorICogYWxyZWFkeSBtYXBwZWQgaW50byBlYWNoIGNsaWVudCdzIGFkZHJlc3Mgc3BhY2UuCiAgKi8KIAogc3RhdGljIHN0cnVjdCBtZW1fYmxvY2sgKnNwbGl0X2Jsb2NrKHN0cnVjdCBtZW1fYmxvY2sgKnAsIGludCBzdGFydCwgaW50IHNpemUsCi0JCQkJICAgICBEUk1GSUxFIGZpbHAgKQorCQkJCSAgICAgRFJNRklMRSBmaWxwKQogewogCS8qIE1heWJlIGN1dCBvZmYgdGhlIHN0YXJ0IG9mIGFuIGV4aXN0aW5nIGJsb2NrICovCiAJaWYgKHN0YXJ0ID4gcC0+c3RhcnQpIHsKLQkJc3RydWN0IG1lbV9ibG9jayAqbmV3YmxvY2sgPSBkcm1fYWxsb2Moc2l6ZW9mKCpuZXdibG9jayksIERSTV9NRU1fQlVGUyApOwotCQlpZiAoIW5ld2Jsb2NrKSAKKwkJc3RydWN0IG1lbV9ibG9jayAqbmV3YmxvY2sgPQorCQkgICAgZHJtX2FsbG9jKHNpemVvZigqbmV3YmxvY2spLCBEUk1fTUVNX0JVRlMpOworCQlpZiAoIW5ld2Jsb2NrKQogCQkJZ290byBvdXQ7CiAJCW5ld2Jsb2NrLT5zdGFydCA9IHN0YXJ0OwogCQluZXdibG9jay0+c2l6ZSA9IHAtPnNpemUgLSAoc3RhcnQgLSBwLT5zdGFydCk7CkBAIC01NiwxMCArNTcsMTEgQEAKIAkJcC0+c2l6ZSAtPSBuZXdibG9jay0+c2l6ZTsKIAkJcCA9IG5ld2Jsb2NrOwogCX0KLSAgIAorCiAJLyogTWF5YmUgY3V0IG9mZiB0aGUgZW5kIG9mIGFuIGV4aXN0aW5nIGJsb2NrICovCiAJaWYgKHNpemUgPCBwLT5zaXplKSB7Ci0JCXN0cnVjdCBtZW1fYmxvY2sgKm5ld2Jsb2NrID0gZHJtX2FsbG9jKHNpemVvZigqbmV3YmxvY2spLCBEUk1fTUVNX0JVRlMgKTsKKwkJc3RydWN0IG1lbV9ibG9jayAqbmV3YmxvY2sgPQorCQkgICAgZHJtX2FsbG9jKHNpemVvZigqbmV3YmxvY2spLCBEUk1fTUVNX0JVRlMpOwogCQlpZiAoIW5ld2Jsb2NrKQogCQkJZ290byBvdXQ7CiAJCW5ld2Jsb2NrLT5zdGFydCA9IHN0YXJ0ICsgc2l6ZTsKQEAgLTcyLDQwICs3NCwzOSBAQAogCQlwLT5zaXplID0gc2l6ZTsKIAl9CiAKLSBvdXQ6CisgICAgICBvdXQ6CiAJLyogT3VyIGJsb2NrIGlzIGluIHRoZSBtaWRkbGUgKi8KIAlwLT5maWxwID0gZmlscDsKIAlyZXR1cm4gcDsKIH0KIAotc3RhdGljIHN0cnVjdCBtZW1fYmxvY2sgKmFsbG9jX2Jsb2NrKCBzdHJ1Y3QgbWVtX2Jsb2NrICpoZWFwLCBpbnQgc2l6ZSwgCi0JCQkJICAgICAgaW50IGFsaWduMiwgRFJNRklMRSBmaWxwICkKK3N0YXRpYyBzdHJ1Y3QgbWVtX2Jsb2NrICphbGxvY19ibG9jayhzdHJ1Y3QgbWVtX2Jsb2NrICpoZWFwLCBpbnQgc2l6ZSwKKwkJCQkgICAgIGludCBhbGlnbjIsIERSTUZJTEUgZmlscCkKIHsKIAlzdHJ1Y3QgbWVtX2Jsb2NrICpwOwotCWludCBtYXNrID0gKDEgPDwgYWxpZ24yKS0xOworCWludCBtYXNrID0gKDEgPDwgYWxpZ24yKSAtIDE7CiAKIAlsaXN0X2Zvcl9lYWNoKHAsIGhlYXApIHsKIAkJaW50IHN0YXJ0ID0gKHAtPnN0YXJ0ICsgbWFzaykgJiB+bWFzazsKIAkJaWYgKHAtPmZpbHAgPT0gMCAmJiBzdGFydCArIHNpemUgPD0gcC0+c3RhcnQgKyBwLT5zaXplKQotCQkJcmV0dXJuIHNwbGl0X2Jsb2NrKCBwLCBzdGFydCwgc2l6ZSwgZmlscCApOworCQkJcmV0dXJuIHNwbGl0X2Jsb2NrKHAsIHN0YXJ0LCBzaXplLCBmaWxwKTsKIAl9CiAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIHN0cnVjdCBtZW1fYmxvY2sgKmZpbmRfYmxvY2soIHN0cnVjdCBtZW1fYmxvY2sgKmhlYXAsIGludCBzdGFydCApCitzdGF0aWMgc3RydWN0IG1lbV9ibG9jayAqZmluZF9ibG9jayhzdHJ1Y3QgbWVtX2Jsb2NrICpoZWFwLCBpbnQgc3RhcnQpCiB7CiAJc3RydWN0IG1lbV9ibG9jayAqcDsKIAogCWxpc3RfZm9yX2VhY2gocCwgaGVhcCkKLQkJaWYgKHAtPnN0YXJ0ID09IHN0YXJ0KQotCQkJcmV0dXJuIHA7CisJICAgIGlmIChwLT5zdGFydCA9PSBzdGFydCkKKwkJcmV0dXJuIHA7CiAKIAlyZXR1cm4gTlVMTDsKIH0KIAotCi1zdGF0aWMgdm9pZCBmcmVlX2Jsb2NrKCBzdHJ1Y3QgbWVtX2Jsb2NrICpwICkKK3N0YXRpYyB2b2lkIGZyZWVfYmxvY2soc3RydWN0IG1lbV9ibG9jayAqcCkKIHsKIAlwLT5maWxwID0gTlVMTDsKIApAQCAtMTE3LDcgKzExOCw3IEBACiAJCXAtPnNpemUgKz0gcS0+c2l6ZTsKIAkJcC0+bmV4dCA9IHEtPm5leHQ7CiAJCXAtPm5leHQtPnByZXYgPSBwOwotCQlkcm1fZnJlZShxLCBzaXplb2YoKnEpLCBEUk1fTUVNX0JVRlMgKTsKKwkJZHJtX2ZyZWUocSwgc2l6ZW9mKCpxKSwgRFJNX01FTV9CVUZTKTsKIAl9CiAKIAlpZiAocC0+cHJldi0+ZmlscCA9PSAwKSB7CkBAIC0xMjUsNyArMTI2LDcgQEAKIAkJcS0+c2l6ZSArPSBwLT5zaXplOwogCQlxLT5uZXh0ID0gcC0+bmV4dDsKIAkJcS0+bmV4dC0+cHJldiA9IHE7Ci0JCWRybV9mcmVlKHAsIHNpemVvZigqcSksIERSTV9NRU1fQlVGUyApOworCQlkcm1fZnJlZShwLCBzaXplb2YoKnEpLCBEUk1fTUVNX0JVRlMpOwogCX0KIH0KIApAQCAtMTMzLDE0ICsxMzQsMTQgQEAKICAqLwogc3RhdGljIGludCBpbml0X2hlYXAoc3RydWN0IG1lbV9ibG9jayAqKmhlYXAsIGludCBzdGFydCwgaW50IHNpemUpCiB7Ci0Jc3RydWN0IG1lbV9ibG9jayAqYmxvY2tzID0gZHJtX2FsbG9jKHNpemVvZigqYmxvY2tzKSwgRFJNX01FTV9CVUZTICk7CisJc3RydWN0IG1lbV9ibG9jayAqYmxvY2tzID0gZHJtX2FsbG9jKHNpemVvZigqYmxvY2tzKSwgRFJNX01FTV9CVUZTKTsKIAotCWlmICghYmxvY2tzKSAKKwlpZiAoIWJsb2NrcykKIAkJcmV0dXJuIERSTV9FUlIoRU5PTUVNKTsKLQkKLQkqaGVhcCA9IGRybV9hbGxvYyhzaXplb2YoKipoZWFwKSwgRFJNX01FTV9CVUZTICk7CisKKwkqaGVhcCA9IGRybV9hbGxvYyhzaXplb2YoKipoZWFwKSwgRFJNX01FTV9CVUZTKTsKIAlpZiAoISpoZWFwKSB7Ci0JCWRybV9mcmVlKCBibG9ja3MsIHNpemVvZigqYmxvY2tzKSwgRFJNX01FTV9CVUZTICk7CisJCWRybV9mcmVlKGJsb2Nrcywgc2l6ZW9mKCpibG9ja3MpLCBEUk1fTUVNX0JVRlMpOwogCQlyZXR1cm4gRFJNX0VSUihFTk9NRU0pOwogCX0KIApAQCAtMTQ5LDE2ICsxNTAsMTUgQEAKIAlibG9ja3MtPmZpbHAgPSBOVUxMOwogCWJsb2Nrcy0+bmV4dCA9IGJsb2Nrcy0+cHJldiA9ICpoZWFwOwogCi0JbWVtc2V0KCAqaGVhcCwgMCwgc2l6ZW9mKCoqaGVhcCkgKTsKLQkoKmhlYXApLT5maWxwID0gKERSTUZJTEUpIC0xOworCW1lbXNldCgqaGVhcCwgMCwgc2l6ZW9mKCoqaGVhcCkpOworCSgqaGVhcCktPmZpbHAgPSAoRFJNRklMRSkgLSAxOwogCSgqaGVhcCktPm5leHQgPSAoKmhlYXApLT5wcmV2ID0gYmxvY2tzOwogCXJldHVybiAwOwogfQogCi0KIC8qIEZyZWUgYWxsIGJsb2NrcyBhc3NvY2lhdGVkIHdpdGggdGhlIHJlbGVhc2luZyBmaWxlLgogICovCi12b2lkIHJhZGVvbl9tZW1fcmVsZWFzZSggRFJNRklMRSBmaWxwLCBzdHJ1Y3QgbWVtX2Jsb2NrICpoZWFwICkKK3ZvaWQgcmFkZW9uX21lbV9yZWxlYXNlKERSTUZJTEUgZmlscCwgc3RydWN0IG1lbV9ibG9jayAqaGVhcCkKIHsKIAlzdHJ1Y3QgbWVtX2Jsb2NrICpwOwogCkBAIC0xNjYsNyArMTY2LDcgQEAKIAkJcmV0dXJuOwogCiAJbGlzdF9mb3JfZWFjaChwLCBoZWFwKSB7Ci0JCWlmIChwLT5maWxwID09IGZpbHApIAorCQlpZiAocC0+ZmlscCA9PSBmaWxwKQogCQkJcC0+ZmlscCA9IE5VTEw7CiAJfQogCkBAIC0xNzksNDAgKzE3OSwzNyBAQAogCQkJcC0+c2l6ZSArPSBxLT5zaXplOwogCQkJcC0+bmV4dCA9IHEtPm5leHQ7CiAJCQlwLT5uZXh0LT5wcmV2ID0gcDsKLQkJCWRybV9mcmVlKHEsIHNpemVvZigqcSksRFJNX01FTV9EUklWRVIpOworCQkJZHJtX2ZyZWUocSwgc2l6ZW9mKCpxKSwgRFJNX01FTV9EUklWRVIpOwogCQl9CiAJfQogfQogCiAvKiBTaHV0ZG93bi4KICAqLwotdm9pZCByYWRlb25fbWVtX3Rha2Vkb3duKCBzdHJ1Y3QgbWVtX2Jsb2NrICoqaGVhcCApCit2b2lkIHJhZGVvbl9tZW1fdGFrZWRvd24oc3RydWN0IG1lbV9ibG9jayAqKmhlYXApCiB7CiAJc3RydWN0IG1lbV9ibG9jayAqcDsKLQkKKwogCWlmICghKmhlYXApCiAJCXJldHVybjsKIAotCWZvciAocCA9ICgqaGVhcCktPm5leHQgOyBwICE9ICpoZWFwIDsgKSB7CisJZm9yIChwID0gKCpoZWFwKS0+bmV4dDsgcCAhPSAqaGVhcDspIHsKIAkJc3RydWN0IG1lbV9ibG9jayAqcSA9IHA7CiAJCXAgPSBwLT5uZXh0OwotCQlkcm1fZnJlZShxLCBzaXplb2YoKnEpLERSTV9NRU1fRFJJVkVSKTsKKwkJZHJtX2ZyZWUocSwgc2l6ZW9mKCpxKSwgRFJNX01FTV9EUklWRVIpOwogCX0KIAotCWRybV9mcmVlKCAqaGVhcCwgc2l6ZW9mKCoqaGVhcCksRFJNX01FTV9EUklWRVIgKTsKKwlkcm1fZnJlZSgqaGVhcCwgc2l6ZW9mKCoqaGVhcCksIERSTV9NRU1fRFJJVkVSKTsKIAkqaGVhcCA9IE5VTEw7CiB9CiAKLQotCiAvKiBJT0NUTCBIQU5ETEVSUyAqLwogCi1zdGF0aWMgc3RydWN0IG1lbV9ibG9jayAqKmdldF9oZWFwKCBkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsCi0JCQkJICAgaW50IHJlZ2lvbiApCitzdGF0aWMgc3RydWN0IG1lbV9ibG9jayAqKmdldF9oZWFwKGRybV9yYWRlb25fcHJpdmF0ZV90ICogZGV2X3ByaXYsIGludCByZWdpb24pCiB7Ci0Jc3dpdGNoKCByZWdpb24gKSB7CisJc3dpdGNoIChyZWdpb24pIHsKIAljYXNlIFJBREVPTl9NRU1fUkVHSU9OX0dBUlQ6Ci0gCQlyZXR1cm4gJmRldl9wcml2LT5nYXJ0X2hlYXA7IAorCQlyZXR1cm4gJmRldl9wcml2LT5nYXJ0X2hlYXA7CiAJY2FzZSBSQURFT05fTUVNX1JFR0lPTl9GQjoKIAkJcmV0dXJuICZkZXZfcHJpdi0+ZmJfaGVhcDsKIAlkZWZhdWx0OgpAQCAtMjIwLDEwMyArMjE3LDk4IEBACiAJfQogfQogCi1pbnQgcmFkZW9uX21lbV9hbGxvYyggRFJNX0lPQ1RMX0FSR1MgKQoraW50IHJhZGVvbl9tZW1fYWxsb2MoRFJNX0lPQ1RMX0FSR1MpCiB7CiAJRFJNX0RFVklDRTsKIAlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWRybV9yYWRlb25fbWVtX2FsbG9jX3QgYWxsb2M7CiAJc3RydWN0IG1lbV9ibG9jayAqYmxvY2ssICoqaGVhcDsKIAotCWlmICggIWRldl9wcml2ICkgewotCQlEUk1fRVJST1IoICIlcyBjYWxsZWQgd2l0aCBubyBpbml0aWFsaXphdGlvblxuIiwgX19GVU5DVElPTl9fICk7CisJaWYgKCFkZXZfcHJpdikgeworCQlEUk1fRVJST1IoIiVzIGNhbGxlZCB3aXRoIG5vIGluaXRpYWxpemF0aW9uXG4iLCBfX0ZVTkNUSU9OX18pOwogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCX0KIAotCURSTV9DT1BZX0ZST01fVVNFUl9JT0NUTCggYWxsb2MsIChkcm1fcmFkZW9uX21lbV9hbGxvY190IF9fdXNlciAqKWRhdGEsCi0JCQkJICBzaXplb2YoYWxsb2MpICk7CisJRFJNX0NPUFlfRlJPTV9VU0VSX0lPQ1RMKGFsbG9jLCAoZHJtX3JhZGVvbl9tZW1fYWxsb2NfdCBfX3VzZXIgKikgZGF0YSwKKwkJCQkgc2l6ZW9mKGFsbG9jKSk7CiAKLQloZWFwID0gZ2V0X2hlYXAoIGRldl9wcml2LCBhbGxvYy5yZWdpb24gKTsKKwloZWFwID0gZ2V0X2hlYXAoZGV2X3ByaXYsIGFsbG9jLnJlZ2lvbik7CiAJaWYgKCFoZWFwIHx8ICEqaGVhcCkKIAkJcmV0dXJuIERSTV9FUlIoRUZBVUxUKTsKLQkKKwogCS8qIE1ha2UgdGhpbmdzIGVhc2llciBvbiBvdXJzZWx2ZXM6IGFsbCBhbGxvY2F0aW9ucyBhdCBsZWFzdAogCSAqIDRrIGFsaWduZWQuCiAJICovCiAJaWYgKGFsbG9jLmFsaWdubWVudCA8IDEyKQogCQlhbGxvYy5hbGlnbm1lbnQgPSAxMjsKIAotCWJsb2NrID0gYWxsb2NfYmxvY2soICpoZWFwLCBhbGxvYy5zaXplLCBhbGxvYy5hbGlnbm1lbnQsCi0JCQkgICAgIGZpbHAgKTsKKwlibG9jayA9IGFsbG9jX2Jsb2NrKCpoZWFwLCBhbGxvYy5zaXplLCBhbGxvYy5hbGlnbm1lbnQsIGZpbHApOwogCi0JaWYgKCFibG9jaykgCisJaWYgKCFibG9jaykKIAkJcmV0dXJuIERSTV9FUlIoRU5PTUVNKTsKIAotCWlmICggRFJNX0NPUFlfVE9fVVNFUiggYWxsb2MucmVnaW9uX29mZnNldCwgJmJsb2NrLT5zdGFydCwgCi0JCQkgICAgICAgc2l6ZW9mKGludCkgKSApIHsKLQkJRFJNX0VSUk9SKCAiY29weV90b191c2VyXG4iICk7CisJaWYgKERSTV9DT1BZX1RPX1VTRVIoYWxsb2MucmVnaW9uX29mZnNldCwgJmJsb2NrLT5zdGFydCwgc2l6ZW9mKGludCkpKSB7CisJCURSTV9FUlJPUigiY29weV90b191c2VyXG4iKTsKIAkJcmV0dXJuIERSTV9FUlIoRUZBVUxUKTsKIAl9Ci0JCisKIAlyZXR1cm4gMDsKIH0KIAotCi0KLWludCByYWRlb25fbWVtX2ZyZWUoIERSTV9JT0NUTF9BUkdTICkKK2ludCByYWRlb25fbWVtX2ZyZWUoRFJNX0lPQ1RMX0FSR1MpCiB7CiAJRFJNX0RFVklDRTsKIAlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWRybV9yYWRlb25fbWVtX2ZyZWVfdCBtZW1mcmVlOwogCXN0cnVjdCBtZW1fYmxvY2sgKmJsb2NrLCAqKmhlYXA7CiAKLQlpZiAoICFkZXZfcHJpdiApIHsKLQkJRFJNX0VSUk9SKCAiJXMgY2FsbGVkIHdpdGggbm8gaW5pdGlhbGl6YXRpb25cbiIsIF9fRlVOQ1RJT05fXyApOworCWlmICghZGV2X3ByaXYpIHsKKwkJRFJNX0VSUk9SKCIlcyBjYWxsZWQgd2l0aCBubyBpbml0aWFsaXphdGlvblxuIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAl9CiAKLQlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwoIG1lbWZyZWUsIChkcm1fcmFkZW9uX21lbV9mcmVlX3QgX191c2VyICopZGF0YSwKLQkJCQkgIHNpemVvZihtZW1mcmVlKSApOworCURSTV9DT1BZX0ZST01fVVNFUl9JT0NUTChtZW1mcmVlLCAoZHJtX3JhZGVvbl9tZW1fZnJlZV90IF9fdXNlciAqKSBkYXRhLAorCQkJCSBzaXplb2YobWVtZnJlZSkpOwogCi0JaGVhcCA9IGdldF9oZWFwKCBkZXZfcHJpdiwgbWVtZnJlZS5yZWdpb24gKTsKKwloZWFwID0gZ2V0X2hlYXAoZGV2X3ByaXYsIG1lbWZyZWUucmVnaW9uKTsKIAlpZiAoIWhlYXAgfHwgISpoZWFwKQogCQlyZXR1cm4gRFJNX0VSUihFRkFVTFQpOwotCQotCWJsb2NrID0gZmluZF9ibG9jayggKmhlYXAsIG1lbWZyZWUucmVnaW9uX29mZnNldCApOworCisJYmxvY2sgPSBmaW5kX2Jsb2NrKCpoZWFwLCBtZW1mcmVlLnJlZ2lvbl9vZmZzZXQpOwogCWlmICghYmxvY2spCiAJCXJldHVybiBEUk1fRVJSKEVGQVVMVCk7CiAKIAlpZiAoYmxvY2stPmZpbHAgIT0gZmlscCkKIAkJcmV0dXJuIERSTV9FUlIoRVBFUk0pOwogCi0JZnJlZV9ibG9jayggYmxvY2sgKTsJCisJZnJlZV9ibG9jayhibG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKLWludCByYWRlb25fbWVtX2luaXRfaGVhcCggRFJNX0lPQ1RMX0FSR1MgKQoraW50IHJhZGVvbl9tZW1faW5pdF9oZWFwKERSTV9JT0NUTF9BUkdTKQogewogCURSTV9ERVZJQ0U7CiAJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlkcm1fcmFkZW9uX21lbV9pbml0X2hlYXBfdCBpbml0aGVhcDsKIAlzdHJ1Y3QgbWVtX2Jsb2NrICoqaGVhcDsKIAotCWlmICggIWRldl9wcml2ICkgewotCQlEUk1fRVJST1IoICIlcyBjYWxsZWQgd2l0aCBubyBpbml0aWFsaXphdGlvblxuIiwgX19GVU5DVElPTl9fICk7CisJaWYgKCFkZXZfcHJpdikgeworCQlEUk1fRVJST1IoIiVzIGNhbGxlZCB3aXRoIG5vIGluaXRpYWxpemF0aW9uXG4iLCBfX0ZVTkNUSU9OX18pOwogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCX0KIAotCURSTV9DT1BZX0ZST01fVVNFUl9JT0NUTCggaW5pdGhlYXAsIChkcm1fcmFkZW9uX21lbV9pbml0X2hlYXBfdCBfX3VzZXIgKilkYXRhLAotCQkJCSAgc2l6ZW9mKGluaXRoZWFwKSApOworCURSTV9DT1BZX0ZST01fVVNFUl9JT0NUTChpbml0aGVhcCwKKwkJCQkgKGRybV9yYWRlb25fbWVtX2luaXRfaGVhcF90IF9fdXNlciAqKSBkYXRhLAorCQkJCSBzaXplb2YoaW5pdGhlYXApKTsKIAotCWhlYXAgPSBnZXRfaGVhcCggZGV2X3ByaXYsIGluaXRoZWFwLnJlZ2lvbiApOwotCWlmICghaGVhcCkgCisJaGVhcCA9IGdldF9oZWFwKGRldl9wcml2LCBpbml0aGVhcC5yZWdpb24pOworCWlmICghaGVhcCkKIAkJcmV0dXJuIERSTV9FUlIoRUZBVUxUKTsKLQkKKwogCWlmICgqaGVhcCkgewogCQlEUk1fRVJST1IoImhlYXAgYWxyZWFkeSBpbml0aWFsaXplZD8iKTsKIAkJcmV0dXJuIERSTV9FUlIoRUZBVUxUKTsKIAl9Ci0JCQotCXJldHVybiBpbml0X2hlYXAoIGhlYXAsIGluaXRoZWFwLnN0YXJ0LCBpbml0aGVhcC5zaXplICk7CisKKwlyZXR1cm4gaW5pdF9oZWFwKGhlYXAsIGluaXRoZWFwLnN0YXJ0LCBpbml0aGVhcC5zaXplKTsKIH0KLQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3JhZGVvbl9zdGF0ZS5jIGIvZHJpdmVycy9jaGFyL2RybS9yYWRlb25fc3RhdGUuYwppbmRleCA3NGMyZmU4Li40MmU4Y2U0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL3JhZGVvbl9zdGF0ZS5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX3N0YXRlLmMKQEAgLTM3LDUxICszNyw1OCBAQAogICogSGVscGVyIGZ1bmN0aW9ucyBmb3IgY2xpZW50IHN0YXRlIGNoZWNraW5nIGFuZCBmaXh1cAogICovCiAKLXN0YXRpYyBfX2lubGluZV9fIGludCByYWRlb25fY2hlY2tfYW5kX2ZpeHVwX29mZnNldCggZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2LAotCQkJCQkJICAgICBkcm1fZmlsZV90ICpmaWxwX3ByaXYsCi0JCQkJCQkgICAgIHUzMiAqb2Zmc2V0ICkgeworc3RhdGljIF9faW5saW5lX18gaW50IHJhZGVvbl9jaGVja19hbmRfZml4dXBfb2Zmc2V0KGRybV9yYWRlb25fcHJpdmF0ZV90ICoKKwkJCQkJCSAgICBkZXZfcHJpdiwKKwkJCQkJCSAgICBkcm1fZmlsZV90ICogZmlscF9wcml2LAorCQkJCQkJICAgIHUzMiAqIG9mZnNldCkKK3sKIAl1MzIgb2ZmID0gKm9mZnNldDsKIAlzdHJ1Y3QgZHJtX3JhZGVvbl9kcml2ZXJfZmlsZV9maWVsZHMgKnJhZGVvbl9wcml2OwogCi0JaWYgKCBvZmYgPj0gZGV2X3ByaXYtPmZiX2xvY2F0aW9uICYmCi0JICAgICBvZmYgPCAoIGRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0ICsgZGV2X3ByaXYtPmdhcnRfc2l6ZSApICkKKwlpZiAob2ZmID49IGRldl9wcml2LT5mYl9sb2NhdGlvbiAmJgorCSAgICBvZmYgPCAoZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQgKyBkZXZfcHJpdi0+Z2FydF9zaXplKSkKIAkJcmV0dXJuIDA7CiAKIAlyYWRlb25fcHJpdiA9IGZpbHBfcHJpdi0+ZHJpdmVyX3ByaXY7CiAJb2ZmICs9IHJhZGVvbl9wcml2LT5yYWRlb25fZmJfZGVsdGE7CiAKLQlEUk1fREVCVUcoICJvZmZzZXQgZml4ZWQgdXAgdG8gMHgleFxuIiwgb2ZmICk7CisJRFJNX0RFQlVHKCJvZmZzZXQgZml4ZWQgdXAgdG8gMHgleFxuIiwgb2ZmKTsKIAotCWlmICggb2ZmIDwgZGV2X3ByaXYtPmZiX2xvY2F0aW9uIHx8Ci0JICAgICBvZmYgPj0gKCBkZXZfcHJpdi0+Z2FydF92bV9zdGFydCArIGRldl9wcml2LT5nYXJ0X3NpemUgKSApCi0JCXJldHVybiBEUk1fRVJSKCBFSU5WQUwgKTsKKwlpZiAob2ZmIDwgZGV2X3ByaXYtPmZiX2xvY2F0aW9uIHx8CisJICAgIG9mZiA+PSAoZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQgKyBkZXZfcHJpdi0+Z2FydF9zaXplKSkKKwkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAogCSpvZmZzZXQgPSBvZmY7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIF9faW5saW5lX18gaW50IHJhZGVvbl9jaGVja19hbmRfZml4dXBfcGFja2V0cyggZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2LAotCQkJCQkJICAgICAgZHJtX2ZpbGVfdCAqZmlscF9wcml2LAotCQkJCQkJICAgICAgaW50IGlkLAotCQkJCQkJICAgICAgdTMyIF9fdXNlciAqZGF0YSApIHsKLQlzd2l0Y2ggKCBpZCApIHsKK3N0YXRpYyBfX2lubGluZV9fIGludCByYWRlb25fY2hlY2tfYW5kX2ZpeHVwX3BhY2tldHMoZHJtX3JhZGVvbl9wcml2YXRlX3QgKgorCQkJCQkJICAgICBkZXZfcHJpdiwKKwkJCQkJCSAgICAgZHJtX2ZpbGVfdCAqIGZpbHBfcHJpdiwKKwkJCQkJCSAgICAgaW50IGlkLCB1MzIgX191c2VyICogZGF0YSkKK3sKKwlzd2l0Y2ggKGlkKSB7CiAKIAljYXNlIFJBREVPTl9FTUlUX1BQX01JU0M6Ci0JCWlmICggcmFkZW9uX2NoZWNrX2FuZF9maXh1cF9vZmZzZXQoIGRldl9wcml2LCBmaWxwX3ByaXYsCi0JCQkJCQkgICAgJmRhdGFbKCBSQURFT05fUkIzRF9ERVBUSE9GRlNFVAotCQkJCQkJCSAgICAtIFJBREVPTl9QUF9NSVNDICkgLyA0XSApICkgewotCQkJRFJNX0VSUk9SKCAiSW52YWxpZCBkZXB0aCBidWZmZXIgb2Zmc2V0XG4iICk7Ci0JCQlyZXR1cm4gRFJNX0VSUiggRUlOVkFMICk7CisJCWlmIChyYWRlb25fY2hlY2tfYW5kX2ZpeHVwX29mZnNldChkZXZfcHJpdiwgZmlscF9wcml2LAorCQkJCQkJICAmZGF0YVsoUkFERU9OX1JCM0RfREVQVEhPRkZTRVQKKwkJCQkJCQkgLQorCQkJCQkJCSBSQURFT05fUFBfTUlTQykgLworCQkJCQkJCTRdKSkgeworCQkJRFJNX0VSUk9SKCJJbnZhbGlkIGRlcHRoIGJ1ZmZlciBvZmZzZXRcbiIpOworCQkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAkJfQogCQlicmVhazsKIAogCWNhc2UgUkFERU9OX0VNSVRfUFBfQ05UTDoKLQkJaWYgKCByYWRlb25fY2hlY2tfYW5kX2ZpeHVwX29mZnNldCggZGV2X3ByaXYsIGZpbHBfcHJpdiwKLQkJCQkJCSAgICAmZGF0YVsoIFJBREVPTl9SQjNEX0NPTE9ST0ZGU0VUCi0JCQkJCQkJICAgIC0gUkFERU9OX1BQX0NOVEwgKSAvIDRdICkgKSB7Ci0JCQlEUk1fRVJST1IoICJJbnZhbGlkIGNvbG91ciBidWZmZXIgb2Zmc2V0XG4iICk7Ci0JCQlyZXR1cm4gRFJNX0VSUiggRUlOVkFMICk7CisJCWlmIChyYWRlb25fY2hlY2tfYW5kX2ZpeHVwX29mZnNldChkZXZfcHJpdiwgZmlscF9wcml2LAorCQkJCQkJICAmZGF0YVsoUkFERU9OX1JCM0RfQ09MT1JPRkZTRVQKKwkJCQkJCQkgLQorCQkJCQkJCSBSQURFT05fUFBfQ05UTCkgLworCQkJCQkJCTRdKSkgeworCQkJRFJNX0VSUk9SKCJJbnZhbGlkIGNvbG91ciBidWZmZXIgb2Zmc2V0XG4iKTsKKwkJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiAJCX0KIAkJYnJlYWs7CiAKQEAgLTkxLDIxICs5OCwyMyBAQAogCWNhc2UgUjIwMF9FTUlUX1BQX1RYT0ZGU0VUXzM6CiAJY2FzZSBSMjAwX0VNSVRfUFBfVFhPRkZTRVRfNDoKIAljYXNlIFIyMDBfRU1JVF9QUF9UWE9GRlNFVF81OgotCQlpZiAoIHJhZGVvbl9jaGVja19hbmRfZml4dXBfb2Zmc2V0KCBkZXZfcHJpdiwgZmlscF9wcml2LAotCQkJCQkJICAgICZkYXRhWzBdICkgKSB7Ci0JCQlEUk1fRVJST1IoICJJbnZhbGlkIFIyMDAgdGV4dHVyZSBvZmZzZXRcbiIgKTsKLQkJCXJldHVybiBEUk1fRVJSKCBFSU5WQUwgKTsKKwkJaWYgKHJhZGVvbl9jaGVja19hbmRfZml4dXBfb2Zmc2V0KGRldl9wcml2LCBmaWxwX3ByaXYsCisJCQkJCQkgICZkYXRhWzBdKSkgeworCQkJRFJNX0VSUk9SKCJJbnZhbGlkIFIyMDAgdGV4dHVyZSBvZmZzZXRcbiIpOworCQkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAkJfQogCQlicmVhazsKIAogCWNhc2UgUkFERU9OX0VNSVRfUFBfVFhGSUxURVJfMDoKIAljYXNlIFJBREVPTl9FTUlUX1BQX1RYRklMVEVSXzE6CiAJY2FzZSBSQURFT05fRU1JVF9QUF9UWEZJTFRFUl8yOgotCQlpZiAoIHJhZGVvbl9jaGVja19hbmRfZml4dXBfb2Zmc2V0KCBkZXZfcHJpdiwgZmlscF9wcml2LAotCQkJCQkJICAgICZkYXRhWyggUkFERU9OX1BQX1RYT0ZGU0VUXzAKLQkJCQkJCQkgICAgLSBSQURFT05fUFBfVFhGSUxURVJfMCApIC8gNF0gKSApIHsKLQkJCURSTV9FUlJPUiggIkludmFsaWQgUjEwMCB0ZXh0dXJlIG9mZnNldFxuIiApOwotCQkJcmV0dXJuIERSTV9FUlIoIEVJTlZBTCApOworCQlpZiAocmFkZW9uX2NoZWNrX2FuZF9maXh1cF9vZmZzZXQoZGV2X3ByaXYsIGZpbHBfcHJpdiwKKwkJCQkJCSAgJmRhdGFbKFJBREVPTl9QUF9UWE9GRlNFVF8wCisJCQkJCQkJIC0KKwkJCQkJCQkgUkFERU9OX1BQX1RYRklMVEVSXzApIC8KKwkJCQkJCQk0XSkpIHsKKwkJCURSTV9FUlJPUigiSW52YWxpZCBSMTAwIHRleHR1cmUgb2Zmc2V0XG4iKTsKKwkJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiAJCX0KIAkJYnJlYWs7CiAKQEAgLTExNCwxNyArMTIzLDE4IEBACiAJY2FzZSBSMjAwX0VNSVRfUFBfQ1VCSUNfT0ZGU0VUU18yOgogCWNhc2UgUjIwMF9FTUlUX1BQX0NVQklDX09GRlNFVFNfMzoKIAljYXNlIFIyMDBfRU1JVF9QUF9DVUJJQ19PRkZTRVRTXzQ6Ci0JY2FzZSBSMjAwX0VNSVRfUFBfQ1VCSUNfT0ZGU0VUU181OiB7Ci0JCWludCBpOwotCQlmb3IgKCBpID0gMDsgaSA8IDU7IGkrKyApIHsKLQkJCWlmICggcmFkZW9uX2NoZWNrX2FuZF9maXh1cF9vZmZzZXQoIGRldl9wcml2LCBmaWxwX3ByaXYsCi0JCQkJCQkJICAgICZkYXRhW2ldICkgKSB7Ci0JCQkJRFJNX0VSUk9SKCAiSW52YWxpZCBSMjAwIGN1YmljIHRleHR1cmUgb2Zmc2V0XG4iICk7Ci0JCQkJcmV0dXJuIERSTV9FUlIoIEVJTlZBTCApOworCWNhc2UgUjIwMF9FTUlUX1BQX0NVQklDX09GRlNFVFNfNTp7CisJCQlpbnQgaTsKKwkJCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKKwkJCQlpZiAocmFkZW9uX2NoZWNrX2FuZF9maXh1cF9vZmZzZXQKKwkJCQkgICAgKGRldl9wcml2LCBmaWxwX3ByaXYsICZkYXRhW2ldKSkgeworCQkJCQlEUk1fRVJST1IKKwkJCQkJICAgICgiSW52YWxpZCBSMjAwIGN1YmljIHRleHR1cmUgb2Zmc2V0XG4iKTsKKwkJCQkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKKwkJCQl9CiAJCQl9CisJCQlicmVhazsKIAkJfQotCQlicmVhazsKLQl9CiAKIAljYXNlIFJBREVPTl9FTUlUX1BQX0NVQklDX09GRlNFVFNfVDA6CiAJY2FzZSBSQURFT05fRU1JVF9QUF9DVUJJQ19PRkZTRVRTX1QxOgpAQCAtMjIwLDI0MyArMjMwLDI0NyBAQAogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCURSTV9FUlJPUiggIlVua25vd24gc3RhdGUgcGFja2V0IElEICVkXG4iLCBpZCApOwotCQlyZXR1cm4gRFJNX0VSUiggRUlOVkFMICk7CisJCURSTV9FUlJPUigiVW5rbm93biBzdGF0ZSBwYWNrZXQgSUQgJWRcbiIsIGlkKTsKKwkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIF9faW5saW5lX18gaW50IHJhZGVvbl9jaGVja19hbmRfZml4dXBfcGFja2V0MyggZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2LAotCQkJCQkJICAgICAgZHJtX2ZpbGVfdCAqZmlscF9wcml2LAotCQkJCQkJICAgICAgZHJtX3JhZGVvbl9jbWRfYnVmZmVyX3QgKmNtZGJ1ZiwKLQkJCQkJCSAgICAgIHVuc2lnbmVkIGludCAqY21kc3ogKSB7CitzdGF0aWMgX19pbmxpbmVfXyBpbnQgcmFkZW9uX2NoZWNrX2FuZF9maXh1cF9wYWNrZXQzKGRybV9yYWRlb25fcHJpdmF0ZV90ICoKKwkJCQkJCSAgICAgZGV2X3ByaXYsCisJCQkJCQkgICAgIGRybV9maWxlX3QgKiBmaWxwX3ByaXYsCisJCQkJCQkgICAgIGRybV9yYWRlb25fY21kX2J1ZmZlcl90ICoKKwkJCQkJCSAgICAgY21kYnVmLAorCQkJCQkJICAgICB1bnNpZ25lZCBpbnQgKmNtZHN6KQorewogCXUzMiAqY21kID0gKHUzMiAqKSBjbWRidWYtPmJ1ZjsKIAotCSpjbWRzeiA9IDIgKyAoICggY21kWzBdICYgUkFERU9OX0NQX1BBQ0tFVF9DT1VOVF9NQVNLICkgPj4gMTYgKTsKKwkqY21kc3ogPSAyICsgKChjbWRbMF0gJiBSQURFT05fQ1BfUEFDS0VUX0NPVU5UX01BU0spID4+IDE2KTsKIAotCWlmICggKCBjbWRbMF0gJiAweGMwMDAwMDAwICkgIT0gUkFERU9OX0NQX1BBQ0tFVDMgKSB7Ci0JCURSTV9FUlJPUiggIk5vdCBhIHR5cGUgMyBwYWNrZXRcbiIgKTsKLQkJcmV0dXJuIERSTV9FUlIoIEVJTlZBTCApOworCWlmICgoY21kWzBdICYgMHhjMDAwMDAwMCkgIT0gUkFERU9OX0NQX1BBQ0tFVDMpIHsKKwkJRFJNX0VSUk9SKCJOb3QgYSB0eXBlIDMgcGFja2V0XG4iKTsKKwkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAl9CiAKLQlpZiAoIDQgKiAqY21kc3ogPiBjbWRidWYtPmJ1ZnN6ICkgewotCQlEUk1fRVJST1IoICJQYWNrZXQgc2l6ZSBsYXJnZXIgdGhhbiBzaXplIG9mIGRhdGEgcHJvdmlkZWRcbiIgKTsKLQkJcmV0dXJuIERSTV9FUlIoIEVJTlZBTCApOworCWlmICg0ICogKmNtZHN6ID4gY21kYnVmLT5idWZzeikgeworCQlEUk1fRVJST1IoIlBhY2tldCBzaXplIGxhcmdlciB0aGFuIHNpemUgb2YgZGF0YSBwcm92aWRlZFxuIik7CisJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiAJfQogCiAJLyogQ2hlY2sgY2xpZW50IHN0YXRlIGFuZCBmaXggaXQgdXAgaWYgbmVjZXNzYXJ5ICovCi0JaWYgKCBjbWRbMF0gJiAweDgwMDAgKSB7IC8qIE1TQiBvZiBvcGNvZGU6IG5leHQgRFdPUkQgR1VJX0NOVEwgKi8KKwlpZiAoY21kWzBdICYgMHg4MDAwKSB7CS8qIE1TQiBvZiBvcGNvZGU6IG5leHQgRFdPUkQgR1VJX0NOVEwgKi8KIAkJdTMyIG9mZnNldDsKIAotCQlpZiAoIGNtZFsxXSAmICggUkFERU9OX0dNQ19TUkNfUElUQ0hfT0ZGU0VUX0NOVEwKLQkJCSAgICAgIHwgUkFERU9OX0dNQ19EU1RfUElUQ0hfT0ZGU0VUX0NOVEwgKSApIHsKKwkJaWYgKGNtZFsxXSAmIChSQURFT05fR01DX1NSQ19QSVRDSF9PRkZTRVRfQ05UTAorCQkJICAgICAgfCBSQURFT05fR01DX0RTVF9QSVRDSF9PRkZTRVRfQ05UTCkpIHsKIAkJCW9mZnNldCA9IGNtZFsyXSA8PCAxMDsKLQkJCWlmICggcmFkZW9uX2NoZWNrX2FuZF9maXh1cF9vZmZzZXQoIGRldl9wcml2LCBmaWxwX3ByaXYsICZvZmZzZXQgKSApIHsKLQkJCQlEUk1fRVJST1IoICJJbnZhbGlkIGZpcnN0IHBhY2tldCBvZmZzZXRcbiIgKTsKLQkJCQlyZXR1cm4gRFJNX0VSUiggRUlOVkFMICk7CisJCQlpZiAocmFkZW9uX2NoZWNrX2FuZF9maXh1cF9vZmZzZXQKKwkJCSAgICAoZGV2X3ByaXYsIGZpbHBfcHJpdiwgJm9mZnNldCkpIHsKKwkJCQlEUk1fRVJST1IoIkludmFsaWQgZmlyc3QgcGFja2V0IG9mZnNldFxuIik7CisJCQkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAkJCX0KLQkJCWNtZFsyXSA9ICggY21kWzJdICYgMHhmZmMwMDAwMCApIHwgb2Zmc2V0ID4+IDEwOworCQkJY21kWzJdID0gKGNtZFsyXSAmIDB4ZmZjMDAwMDApIHwgb2Zmc2V0ID4+IDEwOwogCQl9CiAKLQkJaWYgKCAoIGNtZFsxXSAmIFJBREVPTl9HTUNfU1JDX1BJVENIX09GRlNFVF9DTlRMICkgJiYKLQkJICAgICAoIGNtZFsxXSAmIFJBREVPTl9HTUNfRFNUX1BJVENIX09GRlNFVF9DTlRMICkgKSB7CisJCWlmICgoY21kWzFdICYgUkFERU9OX0dNQ19TUkNfUElUQ0hfT0ZGU0VUX0NOVEwpICYmCisJCSAgICAoY21kWzFdICYgUkFERU9OX0dNQ19EU1RfUElUQ0hfT0ZGU0VUX0NOVEwpKSB7CiAJCQlvZmZzZXQgPSBjbWRbM10gPDwgMTA7Ci0JCQlpZiAoIHJhZGVvbl9jaGVja19hbmRfZml4dXBfb2Zmc2V0KCBkZXZfcHJpdiwgZmlscF9wcml2LCAmb2Zmc2V0ICkgKSB7Ci0JCQkJRFJNX0VSUk9SKCAiSW52YWxpZCBzZWNvbmQgcGFja2V0IG9mZnNldFxuIiApOwotCQkJCXJldHVybiBEUk1fRVJSKCBFSU5WQUwgKTsKKwkJCWlmIChyYWRlb25fY2hlY2tfYW5kX2ZpeHVwX29mZnNldAorCQkJICAgIChkZXZfcHJpdiwgZmlscF9wcml2LCAmb2Zmc2V0KSkgeworCQkJCURSTV9FUlJPUigiSW52YWxpZCBzZWNvbmQgcGFja2V0IG9mZnNldFxuIik7CisJCQkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAkJCX0KLQkJCWNtZFszXSA9ICggY21kWzNdICYgMHhmZmMwMDAwMCApIHwgb2Zmc2V0ID4+IDEwOworCQkJY21kWzNdID0gKGNtZFszXSAmIDB4ZmZjMDAwMDApIHwgb2Zmc2V0ID4+IDEwOwogCQl9CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLQogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogQ1AgaGFyZHdhcmUgc3RhdGUgcHJvZ3JhbW1pbmcgZnVuY3Rpb25zCiAgKi8KIAotc3RhdGljIF9faW5saW5lX18gdm9pZCByYWRlb25fZW1pdF9jbGlwX3JlY3QoIGRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiwKLQkJCQkJICBkcm1fY2xpcF9yZWN0X3QgKmJveCApCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHJhZGVvbl9lbWl0X2NsaXBfcmVjdChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqIGRldl9wcml2LAorCQkJCQkgICAgIGRybV9jbGlwX3JlY3RfdCAqIGJveCkKIHsKIAlSSU5HX0xPQ0FMUzsKIAotCURSTV9ERUJVRyggIiAgIGJveDogIHgxPSVkIHkxPSVkICB4Mj0lZCB5Mj0lZFxuIiwKLQkJICAgYm94LT54MSwgYm94LT55MSwgYm94LT54MiwgYm94LT55MiApOworCURSTV9ERUJVRygiICAgYm94OiAgeDE9JWQgeTE9JWQgIHgyPSVkIHkyPSVkXG4iLAorCQkgIGJveC0+eDEsIGJveC0+eTEsIGJveC0+eDIsIGJveC0+eTIpOwogCi0JQkVHSU5fUklORyggNCApOwotCU9VVF9SSU5HKCBDUF9QQUNLRVQwKCBSQURFT05fUkVfVE9QX0xFRlQsIDAgKSApOwotCU9VVF9SSU5HKCAoYm94LT55MSA8PCAxNikgfCBib3gtPngxICk7Ci0JT1VUX1JJTkcoIENQX1BBQ0tFVDAoIFJBREVPTl9SRV9XSURUSF9IRUlHSFQsIDAgKSApOwotCU9VVF9SSU5HKCAoKGJveC0+eTIgLSAxKSA8PCAxNikgfCAoYm94LT54MiAtIDEpICk7CisJQkVHSU5fUklORyg0KTsKKwlPVVRfUklORyhDUF9QQUNLRVQwKFJBREVPTl9SRV9UT1BfTEVGVCwgMCkpOworCU9VVF9SSU5HKChib3gtPnkxIDw8IDE2KSB8IGJveC0+eDEpOworCU9VVF9SSU5HKENQX1BBQ0tFVDAoUkFERU9OX1JFX1dJRFRIX0hFSUdIVCwgMCkpOworCU9VVF9SSU5HKCgoYm94LT55MiAtIDEpIDw8IDE2KSB8IChib3gtPngyIC0gMSkpOwogCUFEVkFOQ0VfUklORygpOwogfQogCiAvKiBFbWl0IDEuMSBzdGF0ZQogICovCi1zdGF0aWMgaW50IHJhZGVvbl9lbWl0X3N0YXRlKCBkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsCi0JCQkgICAgICBkcm1fZmlsZV90ICpmaWxwX3ByaXYsCi0JCQkgICAgICBkcm1fcmFkZW9uX2NvbnRleHRfcmVnc190ICpjdHgsCi0JCQkgICAgICBkcm1fcmFkZW9uX3RleHR1cmVfcmVnc190ICp0ZXgsCi0JCQkgICAgICB1bnNpZ25lZCBpbnQgZGlydHkgKQorc3RhdGljIGludCByYWRlb25fZW1pdF9zdGF0ZShkcm1fcmFkZW9uX3ByaXZhdGVfdCAqIGRldl9wcml2LAorCQkJICAgICBkcm1fZmlsZV90ICogZmlscF9wcml2LAorCQkJICAgICBkcm1fcmFkZW9uX2NvbnRleHRfcmVnc190ICogY3R4LAorCQkJICAgICBkcm1fcmFkZW9uX3RleHR1cmVfcmVnc190ICogdGV4LAorCQkJICAgICB1bnNpZ25lZCBpbnQgZGlydHkpCiB7CiAJUklOR19MT0NBTFM7Ci0JRFJNX0RFQlVHKCAiZGlydHk9MHglMDh4XG4iLCBkaXJ0eSApOworCURSTV9ERUJVRygiZGlydHk9MHglMDh4XG4iLCBkaXJ0eSk7CiAKLQlpZiAoIGRpcnR5ICYgUkFERU9OX1VQTE9BRF9DT05URVhUICkgewotCQlpZiAoIHJhZGVvbl9jaGVja19hbmRfZml4dXBfb2Zmc2V0KCBkZXZfcHJpdiwgZmlscF9wcml2LAotCQkJCQkJICAgICZjdHgtPnJiM2RfZGVwdGhvZmZzZXQgKSApIHsKLQkJCURSTV9FUlJPUiggIkludmFsaWQgZGVwdGggYnVmZmVyIG9mZnNldFxuIiApOwotCQkJcmV0dXJuIERSTV9FUlIoIEVJTlZBTCApOworCWlmIChkaXJ0eSAmIFJBREVPTl9VUExPQURfQ09OVEVYVCkgeworCQlpZiAocmFkZW9uX2NoZWNrX2FuZF9maXh1cF9vZmZzZXQoZGV2X3ByaXYsIGZpbHBfcHJpdiwKKwkJCQkJCSAgJmN0eC0+cmIzZF9kZXB0aG9mZnNldCkpIHsKKwkJCURSTV9FUlJPUigiSW52YWxpZCBkZXB0aCBidWZmZXIgb2Zmc2V0XG4iKTsKKwkJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiAJCX0KIAotCQlpZiAoIHJhZGVvbl9jaGVja19hbmRfZml4dXBfb2Zmc2V0KCBkZXZfcHJpdiwgZmlscF9wcml2LAotCQkJCQkJICAgICZjdHgtPnJiM2RfY29sb3JvZmZzZXQgKSApIHsKLQkJCURSTV9FUlJPUiggIkludmFsaWQgZGVwdGggYnVmZmVyIG9mZnNldFxuIiApOwotCQkJcmV0dXJuIERSTV9FUlIoIEVJTlZBTCApOworCQlpZiAocmFkZW9uX2NoZWNrX2FuZF9maXh1cF9vZmZzZXQoZGV2X3ByaXYsIGZpbHBfcHJpdiwKKwkJCQkJCSAgJmN0eC0+cmIzZF9jb2xvcm9mZnNldCkpIHsKKwkJCURSTV9FUlJPUigiSW52YWxpZCBkZXB0aCBidWZmZXIgb2Zmc2V0XG4iKTsKKwkJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiAJCX0KIAotCQlCRUdJTl9SSU5HKCAxNCApOwotCQlPVVRfUklORyggQ1BfUEFDS0VUMCggUkFERU9OX1BQX01JU0MsIDYgKSApOwotCQlPVVRfUklORyggY3R4LT5wcF9taXNjICk7Ci0JCU9VVF9SSU5HKCBjdHgtPnBwX2ZvZ19jb2xvciApOwotCQlPVVRfUklORyggY3R4LT5yZV9zb2xpZF9jb2xvciApOwotCQlPVVRfUklORyggY3R4LT5yYjNkX2JsZW5kY250bCApOwotCQlPVVRfUklORyggY3R4LT5yYjNkX2RlcHRob2Zmc2V0ICk7Ci0JCU9VVF9SSU5HKCBjdHgtPnJiM2RfZGVwdGhwaXRjaCApOwotCQlPVVRfUklORyggY3R4LT5yYjNkX3pzdGVuY2lsY250bCApOwotCQlPVVRfUklORyggQ1BfUEFDS0VUMCggUkFERU9OX1BQX0NOVEwsIDIgKSApOwotCQlPVVRfUklORyggY3R4LT5wcF9jbnRsICk7Ci0JCU9VVF9SSU5HKCBjdHgtPnJiM2RfY250bCApOwotCQlPVVRfUklORyggY3R4LT5yYjNkX2NvbG9yb2Zmc2V0ICk7Ci0JCU9VVF9SSU5HKCBDUF9QQUNLRVQwKCBSQURFT05fUkIzRF9DT0xPUlBJVENILCAwICkgKTsKLQkJT1VUX1JJTkcoIGN0eC0+cmIzZF9jb2xvcnBpdGNoICk7CisJCUJFR0lOX1JJTkcoMTQpOworCQlPVVRfUklORyhDUF9QQUNLRVQwKFJBREVPTl9QUF9NSVNDLCA2KSk7CisJCU9VVF9SSU5HKGN0eC0+cHBfbWlzYyk7CisJCU9VVF9SSU5HKGN0eC0+cHBfZm9nX2NvbG9yKTsKKwkJT1VUX1JJTkcoY3R4LT5yZV9zb2xpZF9jb2xvcik7CisJCU9VVF9SSU5HKGN0eC0+cmIzZF9ibGVuZGNudGwpOworCQlPVVRfUklORyhjdHgtPnJiM2RfZGVwdGhvZmZzZXQpOworCQlPVVRfUklORyhjdHgtPnJiM2RfZGVwdGhwaXRjaCk7CisJCU9VVF9SSU5HKGN0eC0+cmIzZF96c3RlbmNpbGNudGwpOworCQlPVVRfUklORyhDUF9QQUNLRVQwKFJBREVPTl9QUF9DTlRMLCAyKSk7CisJCU9VVF9SSU5HKGN0eC0+cHBfY250bCk7CisJCU9VVF9SSU5HKGN0eC0+cmIzZF9jbnRsKTsKKwkJT1VUX1JJTkcoY3R4LT5yYjNkX2NvbG9yb2Zmc2V0KTsKKwkJT1VUX1JJTkcoQ1BfUEFDS0VUMChSQURFT05fUkIzRF9DT0xPUlBJVENILCAwKSk7CisJCU9VVF9SSU5HKGN0eC0+cmIzZF9jb2xvcnBpdGNoKTsKIAkJQURWQU5DRV9SSU5HKCk7CiAJfQogCi0JaWYgKCBkaXJ0eSAmIFJBREVPTl9VUExPQURfVkVSVEZNVCApIHsKLQkJQkVHSU5fUklORyggMiApOwotCQlPVVRfUklORyggQ1BfUEFDS0VUMCggUkFERU9OX1NFX0NPT1JEX0ZNVCwgMCApICk7Ci0JCU9VVF9SSU5HKCBjdHgtPnNlX2Nvb3JkX2ZtdCApOworCWlmIChkaXJ0eSAmIFJBREVPTl9VUExPQURfVkVSVEZNVCkgeworCQlCRUdJTl9SSU5HKDIpOworCQlPVVRfUklORyhDUF9QQUNLRVQwKFJBREVPTl9TRV9DT09SRF9GTVQsIDApKTsKKwkJT1VUX1JJTkcoY3R4LT5zZV9jb29yZF9mbXQpOwogCQlBRFZBTkNFX1JJTkcoKTsKIAl9CiAKLQlpZiAoIGRpcnR5ICYgUkFERU9OX1VQTE9BRF9MSU5FICkgewotCQlCRUdJTl9SSU5HKCA1ICk7Ci0JCU9VVF9SSU5HKCBDUF9QQUNLRVQwKCBSQURFT05fUkVfTElORV9QQVRURVJOLCAxICkgKTsKLQkJT1VUX1JJTkcoIGN0eC0+cmVfbGluZV9wYXR0ZXJuICk7Ci0JCU9VVF9SSU5HKCBjdHgtPnJlX2xpbmVfc3RhdGUgKTsKLQkJT1VUX1JJTkcoIENQX1BBQ0tFVDAoIFJBREVPTl9TRV9MSU5FX1dJRFRILCAwICkgKTsKLQkJT1VUX1JJTkcoIGN0eC0+c2VfbGluZV93aWR0aCApOworCWlmIChkaXJ0eSAmIFJBREVPTl9VUExPQURfTElORSkgeworCQlCRUdJTl9SSU5HKDUpOworCQlPVVRfUklORyhDUF9QQUNLRVQwKFJBREVPTl9SRV9MSU5FX1BBVFRFUk4sIDEpKTsKKwkJT1VUX1JJTkcoY3R4LT5yZV9saW5lX3BhdHRlcm4pOworCQlPVVRfUklORyhjdHgtPnJlX2xpbmVfc3RhdGUpOworCQlPVVRfUklORyhDUF9QQUNLRVQwKFJBREVPTl9TRV9MSU5FX1dJRFRILCAwKSk7CisJCU9VVF9SSU5HKGN0eC0+c2VfbGluZV93aWR0aCk7CiAJCUFEVkFOQ0VfUklORygpOwogCX0KIAotCWlmICggZGlydHkgJiBSQURFT05fVVBMT0FEX0JVTVBNQVAgKSB7Ci0JCUJFR0lOX1JJTkcoIDUgKTsKLQkJT1VUX1JJTkcoIENQX1BBQ0tFVDAoIFJBREVPTl9QUF9MVU1fTUFUUklYLCAwICkgKTsKLQkJT1VUX1JJTkcoIGN0eC0+cHBfbHVtX21hdHJpeCApOwotCQlPVVRfUklORyggQ1BfUEFDS0VUMCggUkFERU9OX1BQX1JPVF9NQVRSSVhfMCwgMSApICk7Ci0JCU9VVF9SSU5HKCBjdHgtPnBwX3JvdF9tYXRyaXhfMCApOwotCQlPVVRfUklORyggY3R4LT5wcF9yb3RfbWF0cml4XzEgKTsKKwlpZiAoZGlydHkgJiBSQURFT05fVVBMT0FEX0JVTVBNQVApIHsKKwkJQkVHSU5fUklORyg1KTsKKwkJT1VUX1JJTkcoQ1BfUEFDS0VUMChSQURFT05fUFBfTFVNX01BVFJJWCwgMCkpOworCQlPVVRfUklORyhjdHgtPnBwX2x1bV9tYXRyaXgpOworCQlPVVRfUklORyhDUF9QQUNLRVQwKFJBREVPTl9QUF9ST1RfTUFUUklYXzAsIDEpKTsKKwkJT1VUX1JJTkcoY3R4LT5wcF9yb3RfbWF0cml4XzApOworCQlPVVRfUklORyhjdHgtPnBwX3JvdF9tYXRyaXhfMSk7CiAJCUFEVkFOQ0VfUklORygpOwogCX0KIAotCWlmICggZGlydHkgJiBSQURFT05fVVBMT0FEX01BU0tTICkgewotCQlCRUdJTl9SSU5HKCA0ICk7Ci0JCU9VVF9SSU5HKCBDUF9QQUNLRVQwKCBSQURFT05fUkIzRF9TVEVOQ0lMUkVGTUFTSywgMiApICk7Ci0JCU9VVF9SSU5HKCBjdHgtPnJiM2Rfc3RlbmNpbHJlZm1hc2sgKTsKLQkJT1VUX1JJTkcoIGN0eC0+cmIzZF9yb3BjbnRsICk7Ci0JCU9VVF9SSU5HKCBjdHgtPnJiM2RfcGxhbmVtYXNrICk7CisJaWYgKGRpcnR5ICYgUkFERU9OX1VQTE9BRF9NQVNLUykgeworCQlCRUdJTl9SSU5HKDQpOworCQlPVVRfUklORyhDUF9QQUNLRVQwKFJBREVPTl9SQjNEX1NURU5DSUxSRUZNQVNLLCAyKSk7CisJCU9VVF9SSU5HKGN0eC0+cmIzZF9zdGVuY2lscmVmbWFzayk7CisJCU9VVF9SSU5HKGN0eC0+cmIzZF9yb3BjbnRsKTsKKwkJT1VUX1JJTkcoY3R4LT5yYjNkX3BsYW5lbWFzayk7CiAJCUFEVkFOQ0VfUklORygpOwogCX0KIAotCWlmICggZGlydHkgJiBSQURFT05fVVBMT0FEX1ZJRVdQT1JUICkgewotCQlCRUdJTl9SSU5HKCA3ICk7Ci0JCU9VVF9SSU5HKCBDUF9QQUNLRVQwKCBSQURFT05fU0VfVlBPUlRfWFNDQUxFLCA1ICkgKTsKLQkJT1VUX1JJTkcoIGN0eC0+c2VfdnBvcnRfeHNjYWxlICk7Ci0JCU9VVF9SSU5HKCBjdHgtPnNlX3Zwb3J0X3hvZmZzZXQgKTsKLQkJT1VUX1JJTkcoIGN0eC0+c2VfdnBvcnRfeXNjYWxlICk7Ci0JCU9VVF9SSU5HKCBjdHgtPnNlX3Zwb3J0X3lvZmZzZXQgKTsKLQkJT1VUX1JJTkcoIGN0eC0+c2VfdnBvcnRfenNjYWxlICk7Ci0JCU9VVF9SSU5HKCBjdHgtPnNlX3Zwb3J0X3pvZmZzZXQgKTsKKwlpZiAoZGlydHkgJiBSQURFT05fVVBMT0FEX1ZJRVdQT1JUKSB7CisJCUJFR0lOX1JJTkcoNyk7CisJCU9VVF9SSU5HKENQX1BBQ0tFVDAoUkFERU9OX1NFX1ZQT1JUX1hTQ0FMRSwgNSkpOworCQlPVVRfUklORyhjdHgtPnNlX3Zwb3J0X3hzY2FsZSk7CisJCU9VVF9SSU5HKGN0eC0+c2VfdnBvcnRfeG9mZnNldCk7CisJCU9VVF9SSU5HKGN0eC0+c2VfdnBvcnRfeXNjYWxlKTsKKwkJT1VUX1JJTkcoY3R4LT5zZV92cG9ydF95b2Zmc2V0KTsKKwkJT1VUX1JJTkcoY3R4LT5zZV92cG9ydF96c2NhbGUpOworCQlPVVRfUklORyhjdHgtPnNlX3Zwb3J0X3pvZmZzZXQpOwogCQlBRFZBTkNFX1JJTkcoKTsKIAl9CiAKLQlpZiAoIGRpcnR5ICYgUkFERU9OX1VQTE9BRF9TRVRVUCApIHsKLQkJQkVHSU5fUklORyggNCApOwotCQlPVVRfUklORyggQ1BfUEFDS0VUMCggUkFERU9OX1NFX0NOVEwsIDAgKSApOwotCQlPVVRfUklORyggY3R4LT5zZV9jbnRsICk7Ci0JCU9VVF9SSU5HKCBDUF9QQUNLRVQwKCBSQURFT05fU0VfQ05UTF9TVEFUVVMsIDAgKSApOwotCQlPVVRfUklORyggY3R4LT5zZV9jbnRsX3N0YXR1cyApOworCWlmIChkaXJ0eSAmIFJBREVPTl9VUExPQURfU0VUVVApIHsKKwkJQkVHSU5fUklORyg0KTsKKwkJT1VUX1JJTkcoQ1BfUEFDS0VUMChSQURFT05fU0VfQ05UTCwgMCkpOworCQlPVVRfUklORyhjdHgtPnNlX2NudGwpOworCQlPVVRfUklORyhDUF9QQUNLRVQwKFJBREVPTl9TRV9DTlRMX1NUQVRVUywgMCkpOworCQlPVVRfUklORyhjdHgtPnNlX2NudGxfc3RhdHVzKTsKIAkJQURWQU5DRV9SSU5HKCk7CiAJfQogCi0JaWYgKCBkaXJ0eSAmIFJBREVPTl9VUExPQURfTUlTQyApIHsKLQkJQkVHSU5fUklORyggMiApOwotCQlPVVRfUklORyggQ1BfUEFDS0VUMCggUkFERU9OX1JFX01JU0MsIDAgKSApOwotCQlPVVRfUklORyggY3R4LT5yZV9taXNjICk7CisJaWYgKGRpcnR5ICYgUkFERU9OX1VQTE9BRF9NSVNDKSB7CisJCUJFR0lOX1JJTkcoMik7CisJCU9VVF9SSU5HKENQX1BBQ0tFVDAoUkFERU9OX1JFX01JU0MsIDApKTsKKwkJT1VUX1JJTkcoY3R4LT5yZV9taXNjKTsKIAkJQURWQU5DRV9SSU5HKCk7CiAJfQogCi0JaWYgKCBkaXJ0eSAmIFJBREVPTl9VUExPQURfVEVYMCApIHsKLQkJaWYgKCByYWRlb25fY2hlY2tfYW5kX2ZpeHVwX29mZnNldCggZGV2X3ByaXYsIGZpbHBfcHJpdiwKLQkJCQkJCSAgICAmdGV4WzBdLnBwX3R4b2Zmc2V0ICkgKSB7Ci0JCQlEUk1fRVJST1IoICJJbnZhbGlkIHRleHR1cmUgb2Zmc2V0IGZvciB1bml0IDBcbiIgKTsKLQkJCXJldHVybiBEUk1fRVJSKCBFSU5WQUwgKTsKKwlpZiAoZGlydHkgJiBSQURFT05fVVBMT0FEX1RFWDApIHsKKwkJaWYgKHJhZGVvbl9jaGVja19hbmRfZml4dXBfb2Zmc2V0KGRldl9wcml2LCBmaWxwX3ByaXYsCisJCQkJCQkgICZ0ZXhbMF0ucHBfdHhvZmZzZXQpKSB7CisJCQlEUk1fRVJST1IoIkludmFsaWQgdGV4dHVyZSBvZmZzZXQgZm9yIHVuaXQgMFxuIik7CisJCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCQl9CiAKLQkJQkVHSU5fUklORyggOSApOwotCQlPVVRfUklORyggQ1BfUEFDS0VUMCggUkFERU9OX1BQX1RYRklMVEVSXzAsIDUgKSApOwotCQlPVVRfUklORyggdGV4WzBdLnBwX3R4ZmlsdGVyICk7Ci0JCU9VVF9SSU5HKCB0ZXhbMF0ucHBfdHhmb3JtYXQgKTsKLQkJT1VUX1JJTkcoIHRleFswXS5wcF90eG9mZnNldCApOwotCQlPVVRfUklORyggdGV4WzBdLnBwX3R4Y2JsZW5kICk7Ci0JCU9VVF9SSU5HKCB0ZXhbMF0ucHBfdHhhYmxlbmQgKTsKLQkJT1VUX1JJTkcoIHRleFswXS5wcF90ZmFjdG9yICk7Ci0JCU9VVF9SSU5HKCBDUF9QQUNLRVQwKCBSQURFT05fUFBfQk9SREVSX0NPTE9SXzAsIDAgKSApOwotCQlPVVRfUklORyggdGV4WzBdLnBwX2JvcmRlcl9jb2xvciApOworCQlCRUdJTl9SSU5HKDkpOworCQlPVVRfUklORyhDUF9QQUNLRVQwKFJBREVPTl9QUF9UWEZJTFRFUl8wLCA1KSk7CisJCU9VVF9SSU5HKHRleFswXS5wcF90eGZpbHRlcik7CisJCU9VVF9SSU5HKHRleFswXS5wcF90eGZvcm1hdCk7CisJCU9VVF9SSU5HKHRleFswXS5wcF90eG9mZnNldCk7CisJCU9VVF9SSU5HKHRleFswXS5wcF90eGNibGVuZCk7CisJCU9VVF9SSU5HKHRleFswXS5wcF90eGFibGVuZCk7CisJCU9VVF9SSU5HKHRleFswXS5wcF90ZmFjdG9yKTsKKwkJT1VUX1JJTkcoQ1BfUEFDS0VUMChSQURFT05fUFBfQk9SREVSX0NPTE9SXzAsIDApKTsKKwkJT1VUX1JJTkcodGV4WzBdLnBwX2JvcmRlcl9jb2xvcik7CiAJCUFEVkFOQ0VfUklORygpOwogCX0KIAotCWlmICggZGlydHkgJiBSQURFT05fVVBMT0FEX1RFWDEgKSB7Ci0JCWlmICggcmFkZW9uX2NoZWNrX2FuZF9maXh1cF9vZmZzZXQoIGRldl9wcml2LCBmaWxwX3ByaXYsCi0JCQkJCQkgICAgJnRleFsxXS5wcF90eG9mZnNldCApICkgewotCQkJRFJNX0VSUk9SKCAiSW52YWxpZCB0ZXh0dXJlIG9mZnNldCBmb3IgdW5pdCAxXG4iICk7Ci0JCQlyZXR1cm4gRFJNX0VSUiggRUlOVkFMICk7CisJaWYgKGRpcnR5ICYgUkFERU9OX1VQTE9BRF9URVgxKSB7CisJCWlmIChyYWRlb25fY2hlY2tfYW5kX2ZpeHVwX29mZnNldChkZXZfcHJpdiwgZmlscF9wcml2LAorCQkJCQkJICAmdGV4WzFdLnBwX3R4b2Zmc2V0KSkgeworCQkJRFJNX0VSUk9SKCJJbnZhbGlkIHRleHR1cmUgb2Zmc2V0IGZvciB1bml0IDFcbiIpOworCQkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAkJfQogCi0JCUJFR0lOX1JJTkcoIDkgKTsKLQkJT1VUX1JJTkcoIENQX1BBQ0tFVDAoIFJBREVPTl9QUF9UWEZJTFRFUl8xLCA1ICkgKTsKLQkJT1VUX1JJTkcoIHRleFsxXS5wcF90eGZpbHRlciApOwotCQlPVVRfUklORyggdGV4WzFdLnBwX3R4Zm9ybWF0ICk7Ci0JCU9VVF9SSU5HKCB0ZXhbMV0ucHBfdHhvZmZzZXQgKTsKLQkJT1VUX1JJTkcoIHRleFsxXS5wcF90eGNibGVuZCApOwotCQlPVVRfUklORyggdGV4WzFdLnBwX3R4YWJsZW5kICk7Ci0JCU9VVF9SSU5HKCB0ZXhbMV0ucHBfdGZhY3RvciApOwotCQlPVVRfUklORyggQ1BfUEFDS0VUMCggUkFERU9OX1BQX0JPUkRFUl9DT0xPUl8xLCAwICkgKTsKLQkJT1VUX1JJTkcoIHRleFsxXS5wcF9ib3JkZXJfY29sb3IgKTsKKwkJQkVHSU5fUklORyg5KTsKKwkJT1VUX1JJTkcoQ1BfUEFDS0VUMChSQURFT05fUFBfVFhGSUxURVJfMSwgNSkpOworCQlPVVRfUklORyh0ZXhbMV0ucHBfdHhmaWx0ZXIpOworCQlPVVRfUklORyh0ZXhbMV0ucHBfdHhmb3JtYXQpOworCQlPVVRfUklORyh0ZXhbMV0ucHBfdHhvZmZzZXQpOworCQlPVVRfUklORyh0ZXhbMV0ucHBfdHhjYmxlbmQpOworCQlPVVRfUklORyh0ZXhbMV0ucHBfdHhhYmxlbmQpOworCQlPVVRfUklORyh0ZXhbMV0ucHBfdGZhY3Rvcik7CisJCU9VVF9SSU5HKENQX1BBQ0tFVDAoUkFERU9OX1BQX0JPUkRFUl9DT0xPUl8xLCAwKSk7CisJCU9VVF9SSU5HKHRleFsxXS5wcF9ib3JkZXJfY29sb3IpOwogCQlBRFZBTkNFX1JJTkcoKTsKIAl9CiAKLQlpZiAoIGRpcnR5ICYgUkFERU9OX1VQTE9BRF9URVgyICkgewotCQlpZiAoIHJhZGVvbl9jaGVja19hbmRfZml4dXBfb2Zmc2V0KCBkZXZfcHJpdiwgZmlscF9wcml2LAotCQkJCQkJICAgICZ0ZXhbMl0ucHBfdHhvZmZzZXQgKSApIHsKLQkJCURSTV9FUlJPUiggIkludmFsaWQgdGV4dHVyZSBvZmZzZXQgZm9yIHVuaXQgMlxuIiApOwotCQkJcmV0dXJuIERSTV9FUlIoIEVJTlZBTCApOworCWlmIChkaXJ0eSAmIFJBREVPTl9VUExPQURfVEVYMikgeworCQlpZiAocmFkZW9uX2NoZWNrX2FuZF9maXh1cF9vZmZzZXQoZGV2X3ByaXYsIGZpbHBfcHJpdiwKKwkJCQkJCSAgJnRleFsyXS5wcF90eG9mZnNldCkpIHsKKwkJCURSTV9FUlJPUigiSW52YWxpZCB0ZXh0dXJlIG9mZnNldCBmb3IgdW5pdCAyXG4iKTsKKwkJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiAJCX0KIAotCQlCRUdJTl9SSU5HKCA5ICk7Ci0JCU9VVF9SSU5HKCBDUF9QQUNLRVQwKCBSQURFT05fUFBfVFhGSUxURVJfMiwgNSApICk7Ci0JCU9VVF9SSU5HKCB0ZXhbMl0ucHBfdHhmaWx0ZXIgKTsKLQkJT1VUX1JJTkcoIHRleFsyXS5wcF90eGZvcm1hdCApOwotCQlPVVRfUklORyggdGV4WzJdLnBwX3R4b2Zmc2V0ICk7Ci0JCU9VVF9SSU5HKCB0ZXhbMl0ucHBfdHhjYmxlbmQgKTsKLQkJT1VUX1JJTkcoIHRleFsyXS5wcF90eGFibGVuZCApOwotCQlPVVRfUklORyggdGV4WzJdLnBwX3RmYWN0b3IgKTsKLQkJT1VUX1JJTkcoIENQX1BBQ0tFVDAoIFJBREVPTl9QUF9CT1JERVJfQ09MT1JfMiwgMCApICk7Ci0JCU9VVF9SSU5HKCB0ZXhbMl0ucHBfYm9yZGVyX2NvbG9yICk7CisJCUJFR0lOX1JJTkcoOSk7CisJCU9VVF9SSU5HKENQX1BBQ0tFVDAoUkFERU9OX1BQX1RYRklMVEVSXzIsIDUpKTsKKwkJT1VUX1JJTkcodGV4WzJdLnBwX3R4ZmlsdGVyKTsKKwkJT1VUX1JJTkcodGV4WzJdLnBwX3R4Zm9ybWF0KTsKKwkJT1VUX1JJTkcodGV4WzJdLnBwX3R4b2Zmc2V0KTsKKwkJT1VUX1JJTkcodGV4WzJdLnBwX3R4Y2JsZW5kKTsKKwkJT1VUX1JJTkcodGV4WzJdLnBwX3R4YWJsZW5kKTsKKwkJT1VUX1JJTkcodGV4WzJdLnBwX3RmYWN0b3IpOworCQlPVVRfUklORyhDUF9QQUNLRVQwKFJBREVPTl9QUF9CT1JERVJfQ09MT1JfMiwgMCkpOworCQlPVVRfUklORyh0ZXhbMl0ucHBfYm9yZGVyX2NvbG9yKTsKIAkJQURWQU5DRV9SSU5HKCk7CiAJfQogCkBAIC00NjUsMTM4ICs0NzksMTM3IEBACiAKIC8qIEVtaXQgMS4yIHN0YXRlCiAgKi8KLXN0YXRpYyBpbnQgcmFkZW9uX2VtaXRfc3RhdGUyKCBkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsCi0JCQkgICAgICAgZHJtX2ZpbGVfdCAqZmlscF9wcml2LAotCQkJICAgICAgIGRybV9yYWRlb25fc3RhdGVfdCAqc3RhdGUgKQorc3RhdGljIGludCByYWRlb25fZW1pdF9zdGF0ZTIoZHJtX3JhZGVvbl9wcml2YXRlX3QgKiBkZXZfcHJpdiwKKwkJCSAgICAgIGRybV9maWxlX3QgKiBmaWxwX3ByaXYsCisJCQkgICAgICBkcm1fcmFkZW9uX3N0YXRlX3QgKiBzdGF0ZSkKIHsKIAlSSU5HX0xPQ0FMUzsKIAogCWlmIChzdGF0ZS0+ZGlydHkgJiBSQURFT05fVVBMT0FEX1pCSUFTKSB7Ci0JCUJFR0lOX1JJTkcoIDMgKTsKLQkJT1VUX1JJTkcoIENQX1BBQ0tFVDAoIFJBREVPTl9TRV9aQklBU19GQUNUT1IsIDEgKSApOwotCQlPVVRfUklORyggc3RhdGUtPmNvbnRleHQyLnNlX3piaWFzX2ZhY3RvciApOyAKLQkJT1VUX1JJTkcoIHN0YXRlLT5jb250ZXh0Mi5zZV96Ymlhc19jb25zdGFudCApOyAKKwkJQkVHSU5fUklORygzKTsKKwkJT1VUX1JJTkcoQ1BfUEFDS0VUMChSQURFT05fU0VfWkJJQVNfRkFDVE9SLCAxKSk7CisJCU9VVF9SSU5HKHN0YXRlLT5jb250ZXh0Mi5zZV96Ymlhc19mYWN0b3IpOworCQlPVVRfUklORyhzdGF0ZS0+Y29udGV4dDIuc2VfemJpYXNfY29uc3RhbnQpOwogCQlBRFZBTkNFX1JJTkcoKTsKIAl9CiAKLQlyZXR1cm4gcmFkZW9uX2VtaXRfc3RhdGUoIGRldl9wcml2LCBmaWxwX3ByaXYsICZzdGF0ZS0+Y29udGV4dCwKLQkJCSAgIHN0YXRlLT50ZXgsIHN0YXRlLT5kaXJ0eSApOworCXJldHVybiByYWRlb25fZW1pdF9zdGF0ZShkZXZfcHJpdiwgZmlscF9wcml2LCAmc3RhdGUtPmNvbnRleHQsCisJCQkJIHN0YXRlLT50ZXgsIHN0YXRlLT5kaXJ0eSk7CiB9CiAKIC8qIE5ldyAoMS4zKSBzdGF0ZSBtZWNoYW5pc20uICAzIGNvbW1hbmRzIChwYWNrZXQsIHNjYWxhciwgdmVjdG9yKSBpbgogICogMS4zIGNtZGJ1ZmZlcnMgYWxsb3cgYWxsIHByZXZpb3VzIHN0YXRlIHRvIGJlIHVwZGF0ZWQgYXMgd2VsbCBhcwotICogdGhlIHRjbCBzY2FsYXIgYW5kIHZlY3RvciBhcmVhcy4gIAorICogdGhlIHRjbCBzY2FsYXIgYW5kIHZlY3RvciBhcmVhcy4KICAqLwotc3RhdGljIHN0cnVjdCB7IAotCWludCBzdGFydDsgCi0JaW50IGxlbjsgCitzdGF0aWMgc3RydWN0IHsKKwlpbnQgc3RhcnQ7CisJaW50IGxlbjsKIAljb25zdCBjaGFyICpuYW1lOwogfSBwYWNrZXRbUkFERU9OX01BWF9TVEFURV9QQUNLRVRTXSA9IHsKLQl7IFJBREVPTl9QUF9NSVNDLDcsIlJBREVPTl9QUF9NSVNDIiB9LAotCXsgUkFERU9OX1BQX0NOVEwsMywiUkFERU9OX1BQX0NOVEwiIH0sCi0JeyBSQURFT05fUkIzRF9DT0xPUlBJVENILDEsIlJBREVPTl9SQjNEX0NPTE9SUElUQ0giIH0sCi0JeyBSQURFT05fUkVfTElORV9QQVRURVJOLDIsIlJBREVPTl9SRV9MSU5FX1BBVFRFUk4iIH0sCi0JeyBSQURFT05fU0VfTElORV9XSURUSCwxLCJSQURFT05fU0VfTElORV9XSURUSCIgfSwKLQl7IFJBREVPTl9QUF9MVU1fTUFUUklYLDEsIlJBREVPTl9QUF9MVU1fTUFUUklYIiB9LAotCXsgUkFERU9OX1BQX1JPVF9NQVRSSVhfMCwyLCJSQURFT05fUFBfUk9UX01BVFJJWF8wIiB9LAotCXsgUkFERU9OX1JCM0RfU1RFTkNJTFJFRk1BU0ssMywiUkFERU9OX1JCM0RfU1RFTkNJTFJFRk1BU0siIH0sCi0JeyBSQURFT05fU0VfVlBPUlRfWFNDQUxFLDYsIlJBREVPTl9TRV9WUE9SVF9YU0NBTEUiIH0sCi0JeyBSQURFT05fU0VfQ05UTCwyLCJSQURFT05fU0VfQ05UTCIgfSwKLQl7IFJBREVPTl9TRV9DTlRMX1NUQVRVUywxLCJSQURFT05fU0VfQ05UTF9TVEFUVVMiIH0sCi0JeyBSQURFT05fUkVfTUlTQywxLCJSQURFT05fUkVfTUlTQyIgfSwKLQl7IFJBREVPTl9QUF9UWEZJTFRFUl8wLDYsIlJBREVPTl9QUF9UWEZJTFRFUl8wIiB9LAotCXsgUkFERU9OX1BQX0JPUkRFUl9DT0xPUl8wLDEsIlJBREVPTl9QUF9CT1JERVJfQ09MT1JfMCIgfSwKLQl7IFJBREVPTl9QUF9UWEZJTFRFUl8xLDYsIlJBREVPTl9QUF9UWEZJTFRFUl8xIiB9LAotCXsgUkFERU9OX1BQX0JPUkRFUl9DT0xPUl8xLDEsIlJBREVPTl9QUF9CT1JERVJfQ09MT1JfMSIgfSwKLQl7IFJBREVPTl9QUF9UWEZJTFRFUl8yLDYsIlJBREVPTl9QUF9UWEZJTFRFUl8yIiB9LAotCXsgUkFERU9OX1BQX0JPUkRFUl9DT0xPUl8yLDEsIlJBREVPTl9QUF9CT1JERVJfQ09MT1JfMiIgfSwKLQl7IFJBREVPTl9TRV9aQklBU19GQUNUT1IsMiwiUkFERU9OX1NFX1pCSUFTX0ZBQ1RPUiIgfSwKLQl7IFJBREVPTl9TRV9UQ0xfT1VUUFVUX1ZUWF9GTVQsMTEsIlJBREVPTl9TRV9UQ0xfT1VUUFVUX1ZUWF9GTVQiIH0sCi0JeyBSQURFT05fU0VfVENMX01BVEVSSUFMX0VNTUlTU0lWRV9SRUQsMTcsIlJBREVPTl9TRV9UQ0xfTUFURVJJQUxfRU1NSVNTSVZFX1JFRCIgfSwKLQl7IFIyMDBfUFBfVFhDQkxFTkRfMCwgNCwgIlIyMDBfUFBfVFhDQkxFTkRfMCIgfSwKLQl7IFIyMDBfUFBfVFhDQkxFTkRfMSwgNCwgIlIyMDBfUFBfVFhDQkxFTkRfMSIgfSwKLQl7IFIyMDBfUFBfVFhDQkxFTkRfMiwgNCwgIlIyMDBfUFBfVFhDQkxFTkRfMiIgfSwKLQl7IFIyMDBfUFBfVFhDQkxFTkRfMywgNCwgIlIyMDBfUFBfVFhDQkxFTkRfMyIgfSwKLQl7IFIyMDBfUFBfVFhDQkxFTkRfNCwgNCwgIlIyMDBfUFBfVFhDQkxFTkRfNCIgfSwKLQl7IFIyMDBfUFBfVFhDQkxFTkRfNSwgNCwgIlIyMDBfUFBfVFhDQkxFTkRfNSIgfSwKLQl7IFIyMDBfUFBfVFhDQkxFTkRfNiwgNCwgIlIyMDBfUFBfVFhDQkxFTkRfNiIgfSwKLQl7IFIyMDBfUFBfVFhDQkxFTkRfNywgNCwgIlIyMDBfUFBfVFhDQkxFTkRfNyIgfSwKLQl7IFIyMDBfU0VfVENMX0xJR0hUX01PREVMX0NUTF8wLCA2LCAiUjIwMF9TRV9UQ0xfTElHSFRfTU9ERUxfQ1RMXzAiIH0sCi0JeyBSMjAwX1BQX1RGQUNUT1JfMCwgNiwgIlIyMDBfUFBfVEZBQ1RPUl8wIiB9LAotCXsgUjIwMF9TRV9WVFhfRk1UXzAsIDQsICJSMjAwX1NFX1ZUWF9GTVRfMCIgfSwKLQl7IFIyMDBfU0VfVkFQX0NOVEwsIDEsICJSMjAwX1NFX1ZBUF9DTlRMIiB9LAotCXsgUjIwMF9TRV9UQ0xfTUFUUklYX1NFTF8wLCA1LCAiUjIwMF9TRV9UQ0xfTUFUUklYX1NFTF8wIiB9LAotCXsgUjIwMF9TRV9UQ0xfVEVYX1BST0NfQ1RMXzIsIDUsICJSMjAwX1NFX1RDTF9URVhfUFJPQ19DVExfMiIgfSwKLQl7IFIyMDBfU0VfVENMX1VDUF9WRVJUX0JMRU5EX0NUTCwgMSwgIlIyMDBfU0VfVENMX1VDUF9WRVJUX0JMRU5EX0NUTCIgfSwKLQl7IFIyMDBfUFBfVFhGSUxURVJfMCwgNiwgIlIyMDBfUFBfVFhGSUxURVJfMCIgfSwKLQl7IFIyMDBfUFBfVFhGSUxURVJfMSwgNiwgIlIyMDBfUFBfVFhGSUxURVJfMSIgfSwKLQl7IFIyMDBfUFBfVFhGSUxURVJfMiwgNiwgIlIyMDBfUFBfVFhGSUxURVJfMiIgfSwKLQl7IFIyMDBfUFBfVFhGSUxURVJfMywgNiwgIlIyMDBfUFBfVFhGSUxURVJfMyIgfSwKLQl7IFIyMDBfUFBfVFhGSUxURVJfNCwgNiwgIlIyMDBfUFBfVFhGSUxURVJfNCIgfSwKLQl7IFIyMDBfUFBfVFhGSUxURVJfNSwgNiwgIlIyMDBfUFBfVFhGSUxURVJfNSIgfSwKLQl7IFIyMDBfUFBfVFhPRkZTRVRfMCwgMSwgIlIyMDBfUFBfVFhPRkZTRVRfMCIgfSwKLQl7IFIyMDBfUFBfVFhPRkZTRVRfMSwgMSwgIlIyMDBfUFBfVFhPRkZTRVRfMSIgfSwKLQl7IFIyMDBfUFBfVFhPRkZTRVRfMiwgMSwgIlIyMDBfUFBfVFhPRkZTRVRfMiIgfSwKLQl7IFIyMDBfUFBfVFhPRkZTRVRfMywgMSwgIlIyMDBfUFBfVFhPRkZTRVRfMyIgfSwKLQl7IFIyMDBfUFBfVFhPRkZTRVRfNCwgMSwgIlIyMDBfUFBfVFhPRkZTRVRfNCIgfSwKLQl7IFIyMDBfUFBfVFhPRkZTRVRfNSwgMSwgIlIyMDBfUFBfVFhPRkZTRVRfNSIgfSwKLQl7IFIyMDBfU0VfVlRFX0NOVEwsIDEsICJSMjAwX1NFX1ZURV9DTlRMIiB9LAotCXsgUjIwMF9TRV9UQ0xfT1VUUFVUX1ZUWF9DT01QX1NFTCwgMSwgIlIyMDBfU0VfVENMX09VVFBVVF9WVFhfQ09NUF9TRUwiIH0sCi0JeyBSMjAwX1BQX1RBTV9ERUJVRzMsIDEsICJSMjAwX1BQX1RBTV9ERUJVRzMiIH0sCi0JeyBSMjAwX1BQX0NOVExfWCwgMSwgIlIyMDBfUFBfQ05UTF9YIiB9LCAKLQl7IFIyMDBfUkIzRF9ERVBUSFhZX09GRlNFVCwgMSwgIlIyMDBfUkIzRF9ERVBUSFhZX09GRlNFVCIgfSwgCi0JeyBSMjAwX1JFX0FVWF9TQ0lTU09SX0NOVEwsIDEsICJSMjAwX1JFX0FVWF9TQ0lTU09SX0NOVEwiIH0sIAotCXsgUjIwMF9SRV9TQ0lTU09SX1RMXzAsIDIsICJSMjAwX1JFX1NDSVNTT1JfVExfMCIgfSwgCi0JeyBSMjAwX1JFX1NDSVNTT1JfVExfMSwgMiwgIlIyMDBfUkVfU0NJU1NPUl9UTF8xIiB9LCAKLQl7IFIyMDBfUkVfU0NJU1NPUl9UTF8yLCAyLCAiUjIwMF9SRV9TQ0lTU09SX1RMXzIiIH0sIAotCXsgUjIwMF9TRV9WQVBfQ05UTF9TVEFUVVMsIDEsICJSMjAwX1NFX1ZBUF9DTlRMX1NUQVRVUyIgfSwgCi0JeyBSMjAwX1NFX1ZUWF9TVEFURV9DTlRMLCAxLCAiUjIwMF9TRV9WVFhfU1RBVEVfQ05UTCIgfSwgCi0JeyBSMjAwX1JFX1BPSU5UU0laRSwgMSwgIlIyMDBfUkVfUE9JTlRTSVpFIiB9LCAKLQl7IFIyMDBfU0VfVENMX0lOUFVUX1ZUWF9WRUNUT1JfQUREUl8wLCA0LCAiUjIwMF9TRV9UQ0xfSU5QVVRfVlRYX1ZFQ1RPUl9BRERSXzAiIH0sCi0JeyBSMjAwX1BQX0NVQklDX0ZBQ0VTXzAsIDEsICJSMjAwX1BQX0NVQklDX0ZBQ0VTXzAiIH0sIC8qIDYxICovCi0JeyBSMjAwX1BQX0NVQklDX09GRlNFVF9GMV8wLCA1LCAiUjIwMF9QUF9DVUJJQ19PRkZTRVRfRjFfMCIgfSwgLyogNjIgKi8KLQl7IFIyMDBfUFBfQ1VCSUNfRkFDRVNfMSwgMSwgIlIyMDBfUFBfQ1VCSUNfRkFDRVNfMSIgfSwKLQl7IFIyMDBfUFBfQ1VCSUNfT0ZGU0VUX0YxXzEsIDUsICJSMjAwX1BQX0NVQklDX09GRlNFVF9GMV8xIiB9LAotCXsgUjIwMF9QUF9DVUJJQ19GQUNFU18yLCAxLCAiUjIwMF9QUF9DVUJJQ19GQUNFU18yIiB9LAotCXsgUjIwMF9QUF9DVUJJQ19PRkZTRVRfRjFfMiwgNSwgIlIyMDBfUFBfQ1VCSUNfT0ZGU0VUX0YxXzIiIH0sCi0JeyBSMjAwX1BQX0NVQklDX0ZBQ0VTXzMsIDEsICJSMjAwX1BQX0NVQklDX0ZBQ0VTXzMiIH0sCi0JeyBSMjAwX1BQX0NVQklDX09GRlNFVF9GMV8zLCA1LCAiUjIwMF9QUF9DVUJJQ19PRkZTRVRfRjFfMyIgfSwKLQl7IFIyMDBfUFBfQ1VCSUNfRkFDRVNfNCwgMSwgIlIyMDBfUFBfQ1VCSUNfRkFDRVNfNCIgfSwKLQl7IFIyMDBfUFBfQ1VCSUNfT0ZGU0VUX0YxXzQsIDUsICJSMjAwX1BQX0NVQklDX09GRlNFVF9GMV80IiB9LAotCXsgUjIwMF9QUF9DVUJJQ19GQUNFU181LCAxLCAiUjIwMF9QUF9DVUJJQ19GQUNFU181IiB9LAotCXsgUjIwMF9QUF9DVUJJQ19PRkZTRVRfRjFfNSwgNSwgIlIyMDBfUFBfQ1VCSUNfT0ZGU0VUX0YxXzUiIH0sCi0JeyBSQURFT05fUFBfVEVYX1NJWkVfMCwgMiwgIlJBREVPTl9QUF9URVhfU0laRV8wIiB9LAotCXsgUkFERU9OX1BQX1RFWF9TSVpFXzEsIDIsICJSQURFT05fUFBfVEVYX1NJWkVfMSIgfSwKLQl7IFJBREVPTl9QUF9URVhfU0laRV8yLCAyLCAiUkFERU9OX1BQX1RFWF9TSVpFXzIiIH0sCi0JeyBSMjAwX1JCM0RfQkxFTkRDT0xPUiwgMywgIlIyMDBfUkIzRF9CTEVORENPTE9SIiB9LAotCXsgUjIwMF9TRV9UQ0xfUE9JTlRfU1BSSVRFX0NOVEwsIDEsICJSMjAwX1NFX1RDTF9QT0lOVF9TUFJJVEVfQ05UTCIgfSwKLQl7IFJBREVPTl9QUF9DVUJJQ19GQUNFU18wLCAxLCAiUkFERU9OX1BQX0NVQklDX0ZBQ0VTXzAifSwKLQl7IFJBREVPTl9QUF9DVUJJQ19PRkZTRVRfVDBfMCwgNSwgIlJBREVPTl9QUF9DVUJJQ19PRkZTRVRfVDBfMCJ9LAotCXsgUkFERU9OX1BQX0NVQklDX0ZBQ0VTXzEsIDEsICJSQURFT05fUFBfQ1VCSUNfRkFDRVNfMSJ9LAotCXsgUkFERU9OX1BQX0NVQklDX09GRlNFVF9UMV8wLCA1LCAiUkFERU9OX1BQX0NVQklDX09GRlNFVF9UMV8wIn0sCi0JeyBSQURFT05fUFBfQ1VCSUNfRkFDRVNfMiwgMSwgIlJBREVPTl9QUF9DVUJJQ19GQUNFU18yIn0sCi0JeyBSQURFT05fUFBfQ1VCSUNfT0ZGU0VUX1QyXzAsIDUsICJSQURFT05fUFBfQ1VCSUNfT0ZGU0VUX1QyXzAifSwKLQl7IFIyMDBfUFBfVFJJX1BFUkYsIDIsICJSMjAwX1BQX1RSSV9QRVJGIn0sCi0JeyBSMjAwX1BQX0FGU18wLCAzMiwgIlIyMDBfUFBfQUZTXzAifSwgICAgIC8qIDg1ICovCi0JeyBSMjAwX1BQX0FGU18xLCAzMiwgIlIyMDBfUFBfQUZTXzEifSwKLQl7IFIyMDBfUFBfVEZBQ1RPUl8wLCA4LCAiUjIwMF9BVEZfVEZBQ1RPUiJ9LAotCXsgUjIwMF9QUF9UWEZJTFRFUl8wLCA4LCAiUjIwMF9QUF9UWENUTEFMTF8wIn0sCi0JeyBSMjAwX1BQX1RYRklMVEVSXzEsIDgsICJSMjAwX1BQX1RYQ1RMQUxMXzEifSwKLQl7IFIyMDBfUFBfVFhGSUxURVJfMiwgOCwgIlIyMDBfUFBfVFhDVExBTExfMiJ9LAotCXsgUjIwMF9QUF9UWEZJTFRFUl8zLCA4LCAiUjIwMF9QUF9UWENUTEFMTF8zIn0sCi0JeyBSMjAwX1BQX1RYRklMVEVSXzQsIDgsICJSMjAwX1BQX1RYQ1RMQUxMXzQifSwgCi0JeyBSMjAwX1BQX1RYRklMVEVSXzUsIDgsICJSMjAwX1BQX1RYQ1RMQUxMXzUifSwKKwl7UkFERU9OX1BQX01JU0MsIDcsICJSQURFT05fUFBfTUlTQyJ9LAorCXtSQURFT05fUFBfQ05UTCwgMywgIlJBREVPTl9QUF9DTlRMIn0sCisJe1JBREVPTl9SQjNEX0NPTE9SUElUQ0gsIDEsICJSQURFT05fUkIzRF9DT0xPUlBJVENIIn0sCisJe1JBREVPTl9SRV9MSU5FX1BBVFRFUk4sIDIsICJSQURFT05fUkVfTElORV9QQVRURVJOIn0sCisJe1JBREVPTl9TRV9MSU5FX1dJRFRILCAxLCAiUkFERU9OX1NFX0xJTkVfV0lEVEgifSwKKwl7UkFERU9OX1BQX0xVTV9NQVRSSVgsIDEsICJSQURFT05fUFBfTFVNX01BVFJJWCJ9LAorCXtSQURFT05fUFBfUk9UX01BVFJJWF8wLCAyLCAiUkFERU9OX1BQX1JPVF9NQVRSSVhfMCJ9LAorCXtSQURFT05fUkIzRF9TVEVOQ0lMUkVGTUFTSywgMywgIlJBREVPTl9SQjNEX1NURU5DSUxSRUZNQVNLIn0sCisJe1JBREVPTl9TRV9WUE9SVF9YU0NBTEUsIDYsICJSQURFT05fU0VfVlBPUlRfWFNDQUxFIn0sCisJe1JBREVPTl9TRV9DTlRMLCAyLCAiUkFERU9OX1NFX0NOVEwifSwKKwl7UkFERU9OX1NFX0NOVExfU1RBVFVTLCAxLCAiUkFERU9OX1NFX0NOVExfU1RBVFVTIn0sCisJe1JBREVPTl9SRV9NSVNDLCAxLCAiUkFERU9OX1JFX01JU0MifSwKKwl7UkFERU9OX1BQX1RYRklMVEVSXzAsIDYsICJSQURFT05fUFBfVFhGSUxURVJfMCJ9LAorCXtSQURFT05fUFBfQk9SREVSX0NPTE9SXzAsIDEsICJSQURFT05fUFBfQk9SREVSX0NPTE9SXzAifSwKKwl7UkFERU9OX1BQX1RYRklMVEVSXzEsIDYsICJSQURFT05fUFBfVFhGSUxURVJfMSJ9LAorCXtSQURFT05fUFBfQk9SREVSX0NPTE9SXzEsIDEsICJSQURFT05fUFBfQk9SREVSX0NPTE9SXzEifSwKKwl7UkFERU9OX1BQX1RYRklMVEVSXzIsIDYsICJSQURFT05fUFBfVFhGSUxURVJfMiJ9LAorCXtSQURFT05fUFBfQk9SREVSX0NPTE9SXzIsIDEsICJSQURFT05fUFBfQk9SREVSX0NPTE9SXzIifSwKKwl7UkFERU9OX1NFX1pCSUFTX0ZBQ1RPUiwgMiwgIlJBREVPTl9TRV9aQklBU19GQUNUT1IifSwKKwl7UkFERU9OX1NFX1RDTF9PVVRQVVRfVlRYX0ZNVCwgMTEsICJSQURFT05fU0VfVENMX09VVFBVVF9WVFhfRk1UIn0sCisJe1JBREVPTl9TRV9UQ0xfTUFURVJJQUxfRU1NSVNTSVZFX1JFRCwgMTcsCisJCSAgICAiUkFERU9OX1NFX1RDTF9NQVRFUklBTF9FTU1JU1NJVkVfUkVEIn0sCisJe1IyMDBfUFBfVFhDQkxFTkRfMCwgNCwgIlIyMDBfUFBfVFhDQkxFTkRfMCJ9LAorCXtSMjAwX1BQX1RYQ0JMRU5EXzEsIDQsICJSMjAwX1BQX1RYQ0JMRU5EXzEifSwKKwl7UjIwMF9QUF9UWENCTEVORF8yLCA0LCAiUjIwMF9QUF9UWENCTEVORF8yIn0sCisJe1IyMDBfUFBfVFhDQkxFTkRfMywgNCwgIlIyMDBfUFBfVFhDQkxFTkRfMyJ9LAorCXtSMjAwX1BQX1RYQ0JMRU5EXzQsIDQsICJSMjAwX1BQX1RYQ0JMRU5EXzQifSwKKwl7UjIwMF9QUF9UWENCTEVORF81LCA0LCAiUjIwMF9QUF9UWENCTEVORF81In0sCisJe1IyMDBfUFBfVFhDQkxFTkRfNiwgNCwgIlIyMDBfUFBfVFhDQkxFTkRfNiJ9LAorCXtSMjAwX1BQX1RYQ0JMRU5EXzcsIDQsICJSMjAwX1BQX1RYQ0JMRU5EXzcifSwKKwl7UjIwMF9TRV9UQ0xfTElHSFRfTU9ERUxfQ1RMXzAsIDYsICJSMjAwX1NFX1RDTF9MSUdIVF9NT0RFTF9DVExfMCJ9LAorCXtSMjAwX1BQX1RGQUNUT1JfMCwgNiwgIlIyMDBfUFBfVEZBQ1RPUl8wIn0sCisJe1IyMDBfU0VfVlRYX0ZNVF8wLCA0LCAiUjIwMF9TRV9WVFhfRk1UXzAifSwKKwl7UjIwMF9TRV9WQVBfQ05UTCwgMSwgIlIyMDBfU0VfVkFQX0NOVEwifSwKKwl7UjIwMF9TRV9UQ0xfTUFUUklYX1NFTF8wLCA1LCAiUjIwMF9TRV9UQ0xfTUFUUklYX1NFTF8wIn0sCisJe1IyMDBfU0VfVENMX1RFWF9QUk9DX0NUTF8yLCA1LCAiUjIwMF9TRV9UQ0xfVEVYX1BST0NfQ1RMXzIifSwKKwl7UjIwMF9TRV9UQ0xfVUNQX1ZFUlRfQkxFTkRfQ1RMLCAxLCAiUjIwMF9TRV9UQ0xfVUNQX1ZFUlRfQkxFTkRfQ1RMIn0sCisJe1IyMDBfUFBfVFhGSUxURVJfMCwgNiwgIlIyMDBfUFBfVFhGSUxURVJfMCJ9LAorCXtSMjAwX1BQX1RYRklMVEVSXzEsIDYsICJSMjAwX1BQX1RYRklMVEVSXzEifSwKKwl7UjIwMF9QUF9UWEZJTFRFUl8yLCA2LCAiUjIwMF9QUF9UWEZJTFRFUl8yIn0sCisJe1IyMDBfUFBfVFhGSUxURVJfMywgNiwgIlIyMDBfUFBfVFhGSUxURVJfMyJ9LAorCXtSMjAwX1BQX1RYRklMVEVSXzQsIDYsICJSMjAwX1BQX1RYRklMVEVSXzQifSwKKwl7UjIwMF9QUF9UWEZJTFRFUl81LCA2LCAiUjIwMF9QUF9UWEZJTFRFUl81In0sCisJe1IyMDBfUFBfVFhPRkZTRVRfMCwgMSwgIlIyMDBfUFBfVFhPRkZTRVRfMCJ9LAorCXtSMjAwX1BQX1RYT0ZGU0VUXzEsIDEsICJSMjAwX1BQX1RYT0ZGU0VUXzEifSwKKwl7UjIwMF9QUF9UWE9GRlNFVF8yLCAxLCAiUjIwMF9QUF9UWE9GRlNFVF8yIn0sCisJe1IyMDBfUFBfVFhPRkZTRVRfMywgMSwgIlIyMDBfUFBfVFhPRkZTRVRfMyJ9LAorCXtSMjAwX1BQX1RYT0ZGU0VUXzQsIDEsICJSMjAwX1BQX1RYT0ZGU0VUXzQifSwKKwl7UjIwMF9QUF9UWE9GRlNFVF81LCAxLCAiUjIwMF9QUF9UWE9GRlNFVF81In0sCisJe1IyMDBfU0VfVlRFX0NOVEwsIDEsICJSMjAwX1NFX1ZURV9DTlRMIn0sCisJe1IyMDBfU0VfVENMX09VVFBVVF9WVFhfQ09NUF9TRUwsIDEsICJSMjAwX1NFX1RDTF9PVVRQVVRfVlRYX0NPTVBfU0VMIn0sCisJe1IyMDBfUFBfVEFNX0RFQlVHMywgMSwgIlIyMDBfUFBfVEFNX0RFQlVHMyJ9LAorCXtSMjAwX1BQX0NOVExfWCwgMSwgIlIyMDBfUFBfQ05UTF9YIn0sCisJe1IyMDBfUkIzRF9ERVBUSFhZX09GRlNFVCwgMSwgIlIyMDBfUkIzRF9ERVBUSFhZX09GRlNFVCJ9LAorCXtSMjAwX1JFX0FVWF9TQ0lTU09SX0NOVEwsIDEsICJSMjAwX1JFX0FVWF9TQ0lTU09SX0NOVEwifSwKKwl7UjIwMF9SRV9TQ0lTU09SX1RMXzAsIDIsICJSMjAwX1JFX1NDSVNTT1JfVExfMCJ9LAorCXtSMjAwX1JFX1NDSVNTT1JfVExfMSwgMiwgIlIyMDBfUkVfU0NJU1NPUl9UTF8xIn0sCisJe1IyMDBfUkVfU0NJU1NPUl9UTF8yLCAyLCAiUjIwMF9SRV9TQ0lTU09SX1RMXzIifSwKKwl7UjIwMF9TRV9WQVBfQ05UTF9TVEFUVVMsIDEsICJSMjAwX1NFX1ZBUF9DTlRMX1NUQVRVUyJ9LAorCXtSMjAwX1NFX1ZUWF9TVEFURV9DTlRMLCAxLCAiUjIwMF9TRV9WVFhfU1RBVEVfQ05UTCJ9LAorCXtSMjAwX1JFX1BPSU5UU0laRSwgMSwgIlIyMDBfUkVfUE9JTlRTSVpFIn0sCisJe1IyMDBfU0VfVENMX0lOUFVUX1ZUWF9WRUNUT1JfQUREUl8wLCA0LAorCQkgICAgIlIyMDBfU0VfVENMX0lOUFVUX1ZUWF9WRUNUT1JfQUREUl8wIn0sCisJe1IyMDBfUFBfQ1VCSUNfRkFDRVNfMCwgMSwgIlIyMDBfUFBfQ1VCSUNfRkFDRVNfMCJ9LAkvKiA2MSAqLworCXtSMjAwX1BQX0NVQklDX09GRlNFVF9GMV8wLCA1LCAiUjIwMF9QUF9DVUJJQ19PRkZTRVRfRjFfMCJ9LAkvKiA2MiAqLworCXtSMjAwX1BQX0NVQklDX0ZBQ0VTXzEsIDEsICJSMjAwX1BQX0NVQklDX0ZBQ0VTXzEifSwKKwl7UjIwMF9QUF9DVUJJQ19PRkZTRVRfRjFfMSwgNSwgIlIyMDBfUFBfQ1VCSUNfT0ZGU0VUX0YxXzEifSwKKwl7UjIwMF9QUF9DVUJJQ19GQUNFU18yLCAxLCAiUjIwMF9QUF9DVUJJQ19GQUNFU18yIn0sCisJe1IyMDBfUFBfQ1VCSUNfT0ZGU0VUX0YxXzIsIDUsICJSMjAwX1BQX0NVQklDX09GRlNFVF9GMV8yIn0sCisJe1IyMDBfUFBfQ1VCSUNfRkFDRVNfMywgMSwgIlIyMDBfUFBfQ1VCSUNfRkFDRVNfMyJ9LAorCXtSMjAwX1BQX0NVQklDX09GRlNFVF9GMV8zLCA1LCAiUjIwMF9QUF9DVUJJQ19PRkZTRVRfRjFfMyJ9LAorCXtSMjAwX1BQX0NVQklDX0ZBQ0VTXzQsIDEsICJSMjAwX1BQX0NVQklDX0ZBQ0VTXzQifSwKKwl7UjIwMF9QUF9DVUJJQ19PRkZTRVRfRjFfNCwgNSwgIlIyMDBfUFBfQ1VCSUNfT0ZGU0VUX0YxXzQifSwKKwl7UjIwMF9QUF9DVUJJQ19GQUNFU181LCAxLCAiUjIwMF9QUF9DVUJJQ19GQUNFU181In0sCisJe1IyMDBfUFBfQ1VCSUNfT0ZGU0VUX0YxXzUsIDUsICJSMjAwX1BQX0NVQklDX09GRlNFVF9GMV81In0sCisJe1JBREVPTl9QUF9URVhfU0laRV8wLCAyLCAiUkFERU9OX1BQX1RFWF9TSVpFXzAifSwKKwl7UkFERU9OX1BQX1RFWF9TSVpFXzEsIDIsICJSQURFT05fUFBfVEVYX1NJWkVfMSJ9LAorCXtSQURFT05fUFBfVEVYX1NJWkVfMiwgMiwgIlJBREVPTl9QUF9URVhfU0laRV8yIn0sCisJe1IyMDBfUkIzRF9CTEVORENPTE9SLCAzLCAiUjIwMF9SQjNEX0JMRU5EQ09MT1IifSwKKwl7UjIwMF9TRV9UQ0xfUE9JTlRfU1BSSVRFX0NOVEwsIDEsICJSMjAwX1NFX1RDTF9QT0lOVF9TUFJJVEVfQ05UTCJ9LAorCXtSQURFT05fUFBfQ1VCSUNfRkFDRVNfMCwgMSwgIlJBREVPTl9QUF9DVUJJQ19GQUNFU18wIn0sCisJe1JBREVPTl9QUF9DVUJJQ19PRkZTRVRfVDBfMCwgNSwgIlJBREVPTl9QUF9DVUJJQ19PRkZTRVRfVDBfMCJ9LAorCXtSQURFT05fUFBfQ1VCSUNfRkFDRVNfMSwgMSwgIlJBREVPTl9QUF9DVUJJQ19GQUNFU18xIn0sCisJe1JBREVPTl9QUF9DVUJJQ19PRkZTRVRfVDFfMCwgNSwgIlJBREVPTl9QUF9DVUJJQ19PRkZTRVRfVDFfMCJ9LAorCXtSQURFT05fUFBfQ1VCSUNfRkFDRVNfMiwgMSwgIlJBREVPTl9QUF9DVUJJQ19GQUNFU18yIn0sCisJe1JBREVPTl9QUF9DVUJJQ19PRkZTRVRfVDJfMCwgNSwgIlJBREVPTl9QUF9DVUJJQ19PRkZTRVRfVDJfMCJ9LAorCXtSMjAwX1BQX1RSSV9QRVJGLCAyLCAiUjIwMF9QUF9UUklfUEVSRiJ9LAorCXtSMjAwX1BQX0FGU18wLCAzMiwgIlIyMDBfUFBfQUZTXzAifSwJLyogODUgKi8KKwl7UjIwMF9QUF9BRlNfMSwgMzIsICJSMjAwX1BQX0FGU18xIn0sCisJe1IyMDBfUFBfVEZBQ1RPUl8wLCA4LCAiUjIwMF9BVEZfVEZBQ1RPUiJ9LAorCXtSMjAwX1BQX1RYRklMVEVSXzAsIDgsICJSMjAwX1BQX1RYQ1RMQUxMXzAifSwKKwl7UjIwMF9QUF9UWEZJTFRFUl8xLCA4LCAiUjIwMF9QUF9UWENUTEFMTF8xIn0sCisJe1IyMDBfUFBfVFhGSUxURVJfMiwgOCwgIlIyMDBfUFBfVFhDVExBTExfMiJ9LAorCXtSMjAwX1BQX1RYRklMVEVSXzMsIDgsICJSMjAwX1BQX1RYQ1RMQUxMXzMifSwKKwl7UjIwMF9QUF9UWEZJTFRFUl80LCA4LCAiUjIwMF9QUF9UWENUTEFMTF80In0sCisJe1IyMDBfUFBfVFhGSUxURVJfNSwgOCwgIlIyMDBfUFBfVFhDVExBTExfNSJ9LAogfTsKIAotCi0KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqIFBlcmZvcm1hbmNlIG1vbml0b3JpbmcgZnVuY3Rpb25zCiAgKi8KIAotc3RhdGljIHZvaWQgcmFkZW9uX2NsZWFyX2JveCggZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2LAotCQkJICAgICAgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgsCi0JCQkgICAgICBpbnQgciwgaW50IGcsIGludCBiICkKK3N0YXRpYyB2b2lkIHJhZGVvbl9jbGVhcl9ib3goZHJtX3JhZGVvbl9wcml2YXRlX3QgKiBkZXZfcHJpdiwKKwkJCSAgICAgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgsIGludCByLCBpbnQgZywgaW50IGIpCiB7CiAJdTMyIGNvbG9yOwogCVJJTkdfTE9DQUxTOwpAQCAtNjA0LDQ5ICs2MTcsNDcgQEAKIAl4ICs9IGRldl9wcml2LT5zYXJlYV9wcml2LT5ib3hlc1swXS54MTsKIAl5ICs9IGRldl9wcml2LT5zYXJlYV9wcml2LT5ib3hlc1swXS55MTsKIAotCXN3aXRjaCAoIGRldl9wcml2LT5jb2xvcl9mbXQgKSB7CisJc3dpdGNoIChkZXZfcHJpdi0+Y29sb3JfZm10KSB7CiAJY2FzZSBSQURFT05fQ09MT1JfRk9STUFUX1JHQjU2NToKIAkJY29sb3IgPSAoKChyICYgMHhmOCkgPDwgOCkgfAotCQkJICgoZyAmIDB4ZmMpIDw8IDMpIHwKLQkJCSAoKGIgJiAweGY4KSA+PiAzKSk7CisJCQkgKChnICYgMHhmYykgPDwgMykgfCAoKGIgJiAweGY4KSA+PiAzKSk7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX0NPTE9SX0ZPUk1BVF9BUkdCODg4ODoKIAlkZWZhdWx0OgotCQljb2xvciA9ICgoKDB4ZmYpIDw8IDI0KSB8IChyIDw8IDE2KSB8IChnIDw8ICA4KSB8IGIpOworCQljb2xvciA9ICgoKDB4ZmYpIDw8IDI0KSB8IChyIDw8IDE2KSB8IChnIDw8IDgpIHwgYik7CiAJCWJyZWFrOwogCX0KIAotCUJFR0lOX1JJTkcoIDQgKTsKLQlSQURFT05fV0FJVF9VTlRJTF8zRF9JRExFKCk7CQkKLQlPVVRfUklORyggQ1BfUEFDS0VUMCggUkFERU9OX0RQX1dSSVRFX01BU0ssIDAgKSApOwotCU9VVF9SSU5HKCAweGZmZmZmZmZmICk7CisJQkVHSU5fUklORyg0KTsKKwlSQURFT05fV0FJVF9VTlRJTF8zRF9JRExFKCk7CisJT1VUX1JJTkcoQ1BfUEFDS0VUMChSQURFT05fRFBfV1JJVEVfTUFTSywgMCkpOworCU9VVF9SSU5HKDB4ZmZmZmZmZmYpOwogCUFEVkFOQ0VfUklORygpOwogCi0JQkVHSU5fUklORyggNiApOworCUJFR0lOX1JJTkcoNik7CiAKLQlPVVRfUklORyggQ1BfUEFDS0VUMyggUkFERU9OX0NOVExfUEFJTlRfTVVMVEksIDQgKSApOwotCU9VVF9SSU5HKCBSQURFT05fR01DX0RTVF9QSVRDSF9PRkZTRVRfQ05UTCB8Ci0JCSAgUkFERU9OX0dNQ19CUlVTSF9TT0xJRF9DT0xPUiB8Ci0JCSAgKGRldl9wcml2LT5jb2xvcl9mbXQgPDwgOCkgfAotCQkgIFJBREVPTl9HTUNfU1JDX0RBVEFUWVBFX0NPTE9SIHwKLQkJICBSQURFT05fUk9QM19QIHwKLQkJICBSQURFT05fR01DX0NMUl9DTVBfQ05UTF9ESVMgKTsKKwlPVVRfUklORyhDUF9QQUNLRVQzKFJBREVPTl9DTlRMX1BBSU5UX01VTFRJLCA0KSk7CisJT1VUX1JJTkcoUkFERU9OX0dNQ19EU1RfUElUQ0hfT0ZGU0VUX0NOVEwgfAorCQkgUkFERU9OX0dNQ19CUlVTSF9TT0xJRF9DT0xPUiB8CisJCSAoZGV2X3ByaXYtPmNvbG9yX2ZtdCA8PCA4KSB8CisJCSBSQURFT05fR01DX1NSQ19EQVRBVFlQRV9DT0xPUiB8CisJCSBSQURFT05fUk9QM19QIHwgUkFERU9OX0dNQ19DTFJfQ01QX0NOVExfRElTKTsKIAotIAlpZiAoIGRldl9wcml2LT5wYWdlX2ZsaXBwaW5nICYmIGRldl9wcml2LT5jdXJyZW50X3BhZ2UgPT0gMSApIHsgCi0JCU9VVF9SSU5HKCBkZXZfcHJpdi0+ZnJvbnRfcGl0Y2hfb2Zmc2V0ICk7Ci0gCX0gZWxzZSB7CSAKLQkJT1VUX1JJTkcoIGRldl9wcml2LT5iYWNrX3BpdGNoX29mZnNldCApOwotIAl9IAorCWlmIChkZXZfcHJpdi0+cGFnZV9mbGlwcGluZyAmJiBkZXZfcHJpdi0+Y3VycmVudF9wYWdlID09IDEpIHsKKwkJT1VUX1JJTkcoZGV2X3ByaXYtPmZyb250X3BpdGNoX29mZnNldCk7CisJfSBlbHNlIHsKKwkJT1VUX1JJTkcoZGV2X3ByaXYtPmJhY2tfcGl0Y2hfb2Zmc2V0KTsKKwl9CiAKLQlPVVRfUklORyggY29sb3IgKTsKKwlPVVRfUklORyhjb2xvcik7CiAKLQlPVVRfUklORyggKHggPDwgMTYpIHwgeSApOwotCU9VVF9SSU5HKCAodyA8PCAxNikgfCBoICk7CisJT1VUX1JJTkcoKHggPDwgMTYpIHwgeSk7CisJT1VUX1JJTkcoKHcgPDwgMTYpIHwgaCk7CiAKIAlBRFZBTkNFX1JJTkcoKTsKIH0KIAotc3RhdGljIHZvaWQgcmFkZW9uX2NwX3BlcmZvcm1hbmNlX2JveGVzKCBkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgKQorc3RhdGljIHZvaWQgcmFkZW9uX2NwX3BlcmZvcm1hbmNlX2JveGVzKGRybV9yYWRlb25fcHJpdmF0ZV90ICogZGV2X3ByaXYpCiB7CiAJLyogQ29sbGFwc2UgdmFyaW91cyB0aGluZ3MgaW50byBhIHdhaXQgZmxhZyAtLSB0cnlpbmcgdG8KIAkgKiBndWVzcyBpZiB1c2Vyc3Bhc2Ugc2xlcHQgLS0gYmV0dGVyIGp1c3QgdG8gaGF2ZSB0aGVtIHRlbGwgdXMuCkBAIC02NjIsNTAgKzY3Myw1MCBAQAogCiAJLyogUHVycGxlIGJveCBmb3IgcGFnZSBmbGlwcGluZwogCSAqLwotCWlmICggZGV2X3ByaXYtPnN0YXRzLmJveGVzICYgUkFERU9OX0JPWF9GTElQICkgCi0JCXJhZGVvbl9jbGVhcl9ib3goIGRldl9wcml2LCA0LCA0LCA4LCA4LCAyNTUsIDAsIDI1NSApOworCWlmIChkZXZfcHJpdi0+c3RhdHMuYm94ZXMgJiBSQURFT05fQk9YX0ZMSVApCisJCXJhZGVvbl9jbGVhcl9ib3goZGV2X3ByaXYsIDQsIDQsIDgsIDgsIDI1NSwgMCwgMjU1KTsKIAogCS8qIFJlZCBib3ggaWYgd2UgaGF2ZSB0byB3YWl0IGZvciBpZGxlIGF0IGFueSBwb2ludAogCSAqLwotCWlmICggZGV2X3ByaXYtPnN0YXRzLmJveGVzICYgUkFERU9OX0JPWF9XQUlUX0lETEUgKSAKLQkJcmFkZW9uX2NsZWFyX2JveCggZGV2X3ByaXYsIDE2LCA0LCA4LCA4LCAyNTUsIDAsIDAgKTsKKwlpZiAoZGV2X3ByaXYtPnN0YXRzLmJveGVzICYgUkFERU9OX0JPWF9XQUlUX0lETEUpCisJCXJhZGVvbl9jbGVhcl9ib3goZGV2X3ByaXYsIDE2LCA0LCA4LCA4LCAyNTUsIDAsIDApOwogCiAJLyogQmx1ZSBib3g6IGxvc3QgY29udGV4dD8KIAkgKi8KIAogCS8qIFllbGxvdyBib3ggZm9yIHRleHR1cmUgc3dhcHMKIAkgKi8KLQlpZiAoIGRldl9wcml2LT5zdGF0cy5ib3hlcyAmIFJBREVPTl9CT1hfVEVYVFVSRV9MT0FEICkgCi0JCXJhZGVvbl9jbGVhcl9ib3goIGRldl9wcml2LCA0MCwgNCwgOCwgOCwgMjU1LCAyNTUsIDAgKTsKKwlpZiAoZGV2X3ByaXYtPnN0YXRzLmJveGVzICYgUkFERU9OX0JPWF9URVhUVVJFX0xPQUQpCisJCXJhZGVvbl9jbGVhcl9ib3goZGV2X3ByaXYsIDQwLCA0LCA4LCA4LCAyNTUsIDI1NSwgMCk7CiAKIAkvKiBHcmVlbiBib3ggaWYgaGFyZHdhcmUgbmV2ZXIgaWRsZXMgKGFzIGZhciBhcyB3ZSBjYW4gdGVsbCkKIAkgKi8KLQlpZiAoICEoZGV2X3ByaXYtPnN0YXRzLmJveGVzICYgUkFERU9OX0JPWF9ETUFfSURMRSkgKSAKLQkJcmFkZW9uX2NsZWFyX2JveCggZGV2X3ByaXYsIDY0LCA0LCA4LCA4LCAwLCAyNTUsIDAgKTsKKwlpZiAoIShkZXZfcHJpdi0+c3RhdHMuYm94ZXMgJiBSQURFT05fQk9YX0RNQV9JRExFKSkKKwkJcmFkZW9uX2NsZWFyX2JveChkZXZfcHJpdiwgNjQsIDQsIDgsIDgsIDAsIDI1NSwgMCk7CiAKLQotCS8qIERyYXcgYmFycyBpbmRpY2F0aW5nIG51bWJlciBvZiBidWZmZXJzIGFsbG9jYXRlZCAKKwkvKiBEcmF3IGJhcnMgaW5kaWNhdGluZyBudW1iZXIgb2YgYnVmZmVycyBhbGxvY2F0ZWQKIAkgKiAobm90IGEgZ3JlYXQgbWVhc3VyZSwgZWFzaWx5IGNvbmZ1c2VkKQogCSAqLwogCWlmIChkZXZfcHJpdi0+c3RhdHMucmVxdWVzdGVkX2J1ZnMpIHsKIAkJaWYgKGRldl9wcml2LT5zdGF0cy5yZXF1ZXN0ZWRfYnVmcyA+IDEwMCkKIAkJCWRldl9wcml2LT5zdGF0cy5yZXF1ZXN0ZWRfYnVmcyA9IDEwMDsKIAotCQlyYWRlb25fY2xlYXJfYm94KCBkZXZfcHJpdiwgNCwgMTYsICAKLQkJCQkgIGRldl9wcml2LT5zdGF0cy5yZXF1ZXN0ZWRfYnVmcywgNCwKLQkJCQkgIDE5NiwgMTI4LCAxMjggKTsKKwkJcmFkZW9uX2NsZWFyX2JveChkZXZfcHJpdiwgNCwgMTYsCisJCQkJIGRldl9wcml2LT5zdGF0cy5yZXF1ZXN0ZWRfYnVmcywgNCwKKwkJCQkgMTk2LCAxMjgsIDEyOCk7CiAJfQogCi0JbWVtc2V0KCAmZGV2X3ByaXYtPnN0YXRzLCAwLCBzaXplb2YoZGV2X3ByaXYtPnN0YXRzKSApOworCW1lbXNldCgmZGV2X3ByaXYtPnN0YXRzLCAwLCBzaXplb2YoZGV2X3ByaXYtPnN0YXRzKSk7CiAKIH0KKwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogQ1AgY29tbWFuZCBkaXNwYXRjaCBmdW5jdGlvbnMKICAqLwogCi1zdGF0aWMgdm9pZCByYWRlb25fY3BfZGlzcGF0Y2hfY2xlYXIoIGRybV9kZXZpY2VfdCAqZGV2LAotCQkJCSAgICAgIGRybV9yYWRlb25fY2xlYXJfdCAqY2xlYXIsCi0JCQkJICAgICAgZHJtX3JhZGVvbl9jbGVhcl9yZWN0X3QgKmRlcHRoX2JveGVzICkKK3N0YXRpYyB2b2lkIHJhZGVvbl9jcF9kaXNwYXRjaF9jbGVhcihkcm1fZGV2aWNlX3QgKiBkZXYsCisJCQkJICAgICBkcm1fcmFkZW9uX2NsZWFyX3QgKiBjbGVhciwKKwkJCQkgICAgIGRybV9yYWRlb25fY2xlYXJfcmVjdF90ICogZGVwdGhfYm94ZXMpCiB7CiAJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlkcm1fcmFkZW9uX3NhcmVhX3QgKnNhcmVhX3ByaXYgPSBkZXZfcHJpdi0+c2FyZWFfcHJpdjsKQEAgLTcxMywzMiArNzI0LDM0IEBACiAJaW50IG5ib3ggPSBzYXJlYV9wcml2LT5uYm94OwogCWRybV9jbGlwX3JlY3RfdCAqcGJveCA9IHNhcmVhX3ByaXYtPmJveGVzOwogCXVuc2lnbmVkIGludCBmbGFncyA9IGNsZWFyLT5mbGFnczsKLQl1MzIgcmIzZF9jbnRsID0gMCwgcmIzZF9zdGVuY2lscmVmbWFzaz0gMDsKKwl1MzIgcmIzZF9jbnRsID0gMCwgcmIzZF9zdGVuY2lscmVmbWFzayA9IDA7CiAJaW50IGk7CiAJUklOR19MT0NBTFM7Ci0JRFJNX0RFQlVHKCAiZmxhZ3MgPSAweCV4XG4iLCBmbGFncyApOworCURSTV9ERUJVRygiZmxhZ3MgPSAweCV4XG4iLCBmbGFncyk7CiAKIAlkZXZfcHJpdi0+c3RhdHMuY2xlYXJzKys7CiAKLQlpZiAoIGRldl9wcml2LT5wYWdlX2ZsaXBwaW5nICYmIGRldl9wcml2LT5jdXJyZW50X3BhZ2UgPT0gMSApIHsKKwlpZiAoZGV2X3ByaXYtPnBhZ2VfZmxpcHBpbmcgJiYgZGV2X3ByaXYtPmN1cnJlbnRfcGFnZSA9PSAxKSB7CiAJCXVuc2lnbmVkIGludCB0bXAgPSBmbGFnczsKIAogCQlmbGFncyAmPSB+KFJBREVPTl9GUk9OVCB8IFJBREVPTl9CQUNLKTsKLQkJaWYgKCB0bXAgJiBSQURFT05fRlJPTlQgKSBmbGFncyB8PSBSQURFT05fQkFDSzsKLQkJaWYgKCB0bXAgJiBSQURFT05fQkFDSyApICBmbGFncyB8PSBSQURFT05fRlJPTlQ7CisJCWlmICh0bXAgJiBSQURFT05fRlJPTlQpCisJCQlmbGFncyB8PSBSQURFT05fQkFDSzsKKwkJaWYgKHRtcCAmIFJBREVPTl9CQUNLKQorCQkJZmxhZ3MgfD0gUkFERU9OX0ZST05UOwogCX0KIAotCWlmICggZmxhZ3MgJiAoUkFERU9OX0ZST05UIHwgUkFERU9OX0JBQ0spICkgeworCWlmIChmbGFncyAmIChSQURFT05fRlJPTlQgfCBSQURFT05fQkFDSykpIHsKIAotCQlCRUdJTl9SSU5HKCA0ICk7CisJCUJFR0lOX1JJTkcoNCk7CiAKIAkJLyogRW5zdXJlIHRoZSAzRCBzdHJlYW0gaXMgaWRsZSBiZWZvcmUgZG9pbmcgYQogCQkgKiAyRCBmaWxsIHRvIGNsZWFyIHRoZSBmcm9udCBvciBiYWNrIGJ1ZmZlci4KIAkJICovCiAJCVJBREVPTl9XQUlUX1VOVElMXzNEX0lETEUoKTsKLQkJCi0JCU9VVF9SSU5HKCBDUF9QQUNLRVQwKCBSQURFT05fRFBfV1JJVEVfTUFTSywgMCApICk7Ci0JCU9VVF9SSU5HKCBjbGVhci0+Y29sb3JfbWFzayApOworCisJCU9VVF9SSU5HKENQX1BBQ0tFVDAoUkFERU9OX0RQX1dSSVRFX01BU0ssIDApKTsKKwkJT1VUX1JJTkcoY2xlYXItPmNvbG9yX21hc2spOwogCiAJCUFEVkFOQ0VfUklORygpOwogCkBAIC03NDYsMTIxICs3NTksMTMwIEBACiAJCSAqLwogCQlkZXZfcHJpdi0+c2FyZWFfcHJpdi0+Y3R4X293bmVyID0gMDsKIAotCQlmb3IgKCBpID0gMCA7IGkgPCBuYm94IDsgaSsrICkgeworCQlmb3IgKGkgPSAwOyBpIDwgbmJveDsgaSsrKSB7CiAJCQlpbnQgeCA9IHBib3hbaV0ueDE7CiAJCQlpbnQgeSA9IHBib3hbaV0ueTE7CiAJCQlpbnQgdyA9IHBib3hbaV0ueDIgLSB4OwogCQkJaW50IGggPSBwYm94W2ldLnkyIC0geTsKIAotCQkJRFJNX0RFQlVHKCAiZGlzcGF0Y2ggY2xlYXIgJWQsJWQtJWQsJWQgZmxhZ3MgMHgleFxuIiwKLQkJCQkgICB4LCB5LCB3LCBoLCBmbGFncyApOworCQkJRFJNX0RFQlVHKCJkaXNwYXRjaCBjbGVhciAlZCwlZC0lZCwlZCBmbGFncyAweCV4XG4iLAorCQkJCSAgeCwgeSwgdywgaCwgZmxhZ3MpOwogCi0JCQlpZiAoIGZsYWdzICYgUkFERU9OX0ZST05UICkgewotCQkJCUJFR0lOX1JJTkcoIDYgKTsKLQkJCQkKLQkJCQlPVVRfUklORyggQ1BfUEFDS0VUMyggUkFERU9OX0NOVExfUEFJTlRfTVVMVEksIDQgKSApOwotCQkJCU9VVF9SSU5HKCBSQURFT05fR01DX0RTVF9QSVRDSF9PRkZTRVRfQ05UTCB8Ci0JCQkJCSAgUkFERU9OX0dNQ19CUlVTSF9TT0xJRF9DT0xPUiB8Ci0JCQkJCSAgKGRldl9wcml2LT5jb2xvcl9mbXQgPDwgOCkgfAotCQkJCQkgIFJBREVPTl9HTUNfU1JDX0RBVEFUWVBFX0NPTE9SIHwKLQkJCQkJICBSQURFT05fUk9QM19QIHwKLQkJCQkJICBSQURFT05fR01DX0NMUl9DTVBfQ05UTF9ESVMgKTsKKwkJCWlmIChmbGFncyAmIFJBREVPTl9GUk9OVCkgeworCQkJCUJFR0lOX1JJTkcoNik7CiAKLQkJCQlPVVRfUklORyggZGV2X3ByaXYtPmZyb250X3BpdGNoX29mZnNldCApOwotCQkJCU9VVF9SSU5HKCBjbGVhci0+Y2xlYXJfY29sb3IgKTsKLQkJCQkKLQkJCQlPVVRfUklORyggKHggPDwgMTYpIHwgeSApOwotCQkJCU9VVF9SSU5HKCAodyA8PCAxNikgfCBoICk7Ci0JCQkJCisJCQkJT1VUX1JJTkcoQ1BfUEFDS0VUMworCQkJCQkgKFJBREVPTl9DTlRMX1BBSU5UX01VTFRJLCA0KSk7CisJCQkJT1VUX1JJTkcoUkFERU9OX0dNQ19EU1RfUElUQ0hfT0ZGU0VUX0NOVEwgfAorCQkJCQkgUkFERU9OX0dNQ19CUlVTSF9TT0xJRF9DT0xPUiB8CisJCQkJCSAoZGV2X3ByaXYtPgorCQkJCQkgIGNvbG9yX2ZtdCA8PCA4KSB8CisJCQkJCSBSQURFT05fR01DX1NSQ19EQVRBVFlQRV9DT0xPUiB8CisJCQkJCSBSQURFT05fUk9QM19QIHwKKwkJCQkJIFJBREVPTl9HTUNfQ0xSX0NNUF9DTlRMX0RJUyk7CisKKwkJCQlPVVRfUklORyhkZXZfcHJpdi0+ZnJvbnRfcGl0Y2hfb2Zmc2V0KTsKKwkJCQlPVVRfUklORyhjbGVhci0+Y2xlYXJfY29sb3IpOworCisJCQkJT1VUX1JJTkcoKHggPDwgMTYpIHwgeSk7CisJCQkJT1VUX1JJTkcoKHcgPDwgMTYpIHwgaCk7CisKIAkJCQlBRFZBTkNFX1JJTkcoKTsKIAkJCX0KLQkJCQotCQkJaWYgKCBmbGFncyAmIFJBREVPTl9CQUNLICkgewotCQkJCUJFR0lOX1JJTkcoIDYgKTsKLQkJCQkKLQkJCQlPVVRfUklORyggQ1BfUEFDS0VUMyggUkFERU9OX0NOVExfUEFJTlRfTVVMVEksIDQgKSApOwotCQkJCU9VVF9SSU5HKCBSQURFT05fR01DX0RTVF9QSVRDSF9PRkZTRVRfQ05UTCB8Ci0JCQkJCSAgUkFERU9OX0dNQ19CUlVTSF9TT0xJRF9DT0xPUiB8Ci0JCQkJCSAgKGRldl9wcml2LT5jb2xvcl9mbXQgPDwgOCkgfAotCQkJCQkgIFJBREVPTl9HTUNfU1JDX0RBVEFUWVBFX0NPTE9SIHwKLQkJCQkJICBSQURFT05fUk9QM19QIHwKLQkJCQkJICBSQURFT05fR01DX0NMUl9DTVBfQ05UTF9ESVMgKTsKLQkJCQkKLQkJCQlPVVRfUklORyggZGV2X3ByaXYtPmJhY2tfcGl0Y2hfb2Zmc2V0ICk7Ci0JCQkJT1VUX1JJTkcoIGNsZWFyLT5jbGVhcl9jb2xvciApOwogCi0JCQkJT1VUX1JJTkcoICh4IDw8IDE2KSB8IHkgKTsKLQkJCQlPVVRfUklORyggKHcgPDwgMTYpIHwgaCApOworCQkJaWYgKGZsYWdzICYgUkFERU9OX0JBQ0spIHsKKwkJCQlCRUdJTl9SSU5HKDYpOworCisJCQkJT1VUX1JJTkcoQ1BfUEFDS0VUMworCQkJCQkgKFJBREVPTl9DTlRMX1BBSU5UX01VTFRJLCA0KSk7CisJCQkJT1VUX1JJTkcoUkFERU9OX0dNQ19EU1RfUElUQ0hfT0ZGU0VUX0NOVEwgfAorCQkJCQkgUkFERU9OX0dNQ19CUlVTSF9TT0xJRF9DT0xPUiB8CisJCQkJCSAoZGV2X3ByaXYtPgorCQkJCQkgIGNvbG9yX2ZtdCA8PCA4KSB8CisJCQkJCSBSQURFT05fR01DX1NSQ19EQVRBVFlQRV9DT0xPUiB8CisJCQkJCSBSQURFT05fUk9QM19QIHwKKwkJCQkJIFJBREVPTl9HTUNfQ0xSX0NNUF9DTlRMX0RJUyk7CisKKwkJCQlPVVRfUklORyhkZXZfcHJpdi0+YmFja19waXRjaF9vZmZzZXQpOworCQkJCU9VVF9SSU5HKGNsZWFyLT5jbGVhcl9jb2xvcik7CisKKwkJCQlPVVRfUklORygoeCA8PCAxNikgfCB5KTsKKwkJCQlPVVRfUklORygodyA8PCAxNikgfCBoKTsKIAogCQkJCUFEVkFOQ0VfUklORygpOwogCQkJfQogCQl9CiAJfQotCQorCiAJLyogaHlwZXIgeiBjbGVhciAqLwogCS8qIG5vIGRvY3MgYXZhaWxhYmxlLCBiYXNlZCBvbiByZXZlcnNlIGVuZ2VuZWVyaW5nIGJ5IFN0ZXBoYW5lIE1hcmNoZXNpbiAqLwotCWlmICgoZmxhZ3MgJiAoUkFERU9OX0RFUFRIIHwgUkFERU9OX1NURU5DSUwpKSAmJiAoZmxhZ3MgJiBSQURFT05fQ0xFQVJfRkFTVFopKSB7CisJaWYgKChmbGFncyAmIChSQURFT05fREVQVEggfCBSQURFT05fU1RFTkNJTCkpCisJICAgICYmIChmbGFncyAmIFJBREVPTl9DTEVBUl9GQVNUWikpIHsKIAogCQlpbnQgaTsKLQkJaW50IGRlcHRocGl4cGVybGluZSA9IGRldl9wcml2LT5kZXB0aF9mbXQ9PVJBREVPTl9ERVBUSF9GT1JNQVRfMTZCSVRfSU5UX1o/IAotCQkJKGRldl9wcml2LT5kZXB0aF9waXRjaCAvIDIpOiAoZGV2X3ByaXYtPmRlcHRoX3BpdGNoIC8gNCk7Ci0JCQorCQlpbnQgZGVwdGhwaXhwZXJsaW5lID0KKwkJICAgIGRldl9wcml2LT5kZXB0aF9mbXQgPT0KKwkJICAgIFJBREVPTl9ERVBUSF9GT1JNQVRfMTZCSVRfSU5UX1ogPyAoZGV2X3ByaXYtPmRlcHRoX3BpdGNoIC8KKwkJCQkJCSAgICAgICAyKSA6IChkZXZfcHJpdi0+CisJCQkJCQkJICAgICBkZXB0aF9waXRjaCAvIDQpOworCiAJCXUzMiBjbGVhcm1hc2s7CiAKIAkJdTMyIHRlbXBSQjNEX0RFUFRIQ0xFQVJWQUxVRSA9IGNsZWFyLT5jbGVhcl9kZXB0aCB8Ci0JCQkoKGNsZWFyLT5kZXB0aF9tYXNrICYgMHhmZikgPDwgMjQpOwotCQotCQkKKwkJICAgICgoY2xlYXItPmRlcHRoX21hc2sgJiAweGZmKSA8PCAyNCk7CisKIAkJLyogTWFrZSBzdXJlIHdlIHJlc3RvcmUgdGhlIDNEIHN0YXRlIG5leHQgdGltZS4KIAkJICogd2UgaGF2ZW4ndCB0b3VjaGVkIGFueSAibm9ybWFsIiBzdGF0ZSAtIHN0aWxsIG5lZWQgdGhpcz8KIAkJICovCiAJCWRldl9wcml2LT5zYXJlYV9wcml2LT5jdHhfb3duZXIgPSAwOwogCi0JCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgQ0hJUF9IQVNfSElFUlopICYmIChmbGFncyAmIFJBREVPTl9VU0VfSElFUlopKSB7Ci0JCS8qIEZJWE1FIDogcmV2ZXJzZSBlbmdpbmVlciB0aGF0IGZvciBSeDAwIGNhcmRzICovCi0JCS8qIEZJWE1FIDogdGhlIG1hc2sgc3VwcG9zZWRseSBjb250YWlucyBsb3ctcmVzIHogdmFsdWVzLiBTbyBjYW4ndCBzZXQKLQkJICAganVzdCB0byB0aGUgbWF4ICgweGZmPyBvciBhY3R1YWxseSAweDNmZmY/KSwgbmVlZCB0byB0YWtlIHogY2xlYXIKLQkJICAgdmFsdWUgaW50byBhY2NvdW50PyAqLwotCQkvKiBwYXR0ZXJuIHNlZW1zIHRvIHdvcmsgZm9yIHIxMDAsIHRob3VnaCBnZXQgc2xpZ2h0Ci0JCSAgIHJlbmRlcmluZyBlcnJvcnMgd2l0aCBnbHhnZWFycy4gSWYgaGllcnogaXMgbm90IGVuYWJsZWQgZm9yIHIxMDAsCi0JCSAgIG9ubHkgNCBiaXRzIHdoaWNoIGluZGljYXRlIGNsZWFyICgxNSwxNiwzMSwzMiwgYWxsIHplcm8pIG1hdHRlciwgdGhlCi0JCSAgIG90aGVyIG9uZXMgYXJlIGlnbm9yZWQsIGFuZCB0aGUgc2FtZSBjbGVhciBtYXNrIGNhbiBiZSB1c2VkLiBUaGF0J3MKLQkJICAgdmVyeSBkaWZmZXJlbnQgYmVoYXZpb3VyIHRoYW4gUjIwMCB3aGljaCBuZWVkcyBkaWZmZXJlbnQgY2xlYXIgbWFzawotCQkgICBhbmQgZGlmZmVyZW50IG51bWJlciBvZiB0aWxlcyB0byBjbGVhciBpZiBoaWVyeiBpcyBlbmFibGVkIG9yIG5vdCAhPyEKLQkJKi8KLQkJCWNsZWFybWFzayA9ICgweGZmPDwyMil8KDB4ZmY8PDYpfCAweDAwM2YwMDNmOwotCQl9Ci0JCWVsc2UgewotCQkvKiBjbGVhciBtYXNrIDogY2hvb3NlcyB0aGUgY2xlYXJpbmcgcGF0dGVybi4KLQkJICAgcnYyNTA6IGNvdWxkIGJlIHVzZWQgdG8gY2xlYXIgb25seSBwYXJ0cyBvZiBtYWNyb3RpbGVzCi0JCSAgIChidXQgdGhhdCB3b3VsZCBnZXQgcmVhbGx5IGNvbXBsaWNhdGVkLi4uKT8KLQkJICAgYml0IDAgYW5kIDEgKGVpdGhlciBvciBib3RoIG9mIHRoZW0gPyE/ISkgYXJlIHVzZWQgdG8KLQkJICAgbm90IGNsZWFyIHRpbGUgKG9yIG1heWJlIG9uZSBvZiB0aGUgYml0cyBpbmRpY2F0ZXMgaWYgdGhlIHRpbGUgaXMKLQkJICAgY29tcHJlc3NlZCBvciBub3QpLCBiaXQgMiBhbmQgMyB0byBub3QgY2xlYXIgdGlsZSAxLC4uLiwuCi0JCSAgIFBhdHRlcm4gaXMgYXMgZm9sbG93czoKLQkJICAgICAgICB8IDAsMSB8IDQsNSB8IDgsOSB8MTIsMTN8MTYsMTd8MjAsMjF8MjQsMjV8MjgsMjl8Ci0JCSAgIGJpdHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCQkgICAgICAgIHwgMiwzIHwgNiw3IHwxMCwxMXwxNCwxNXwxOCwxOXwyMiwyM3wyNiwyN3wzMCwzMXwKLQkJICAgcnYxMDA6IGNsZWFybWFzayBjb3ZlcnMgMng4IDR4MSB0aWxlcywgYnV0IG9uZSBjbGVhciBzdGlsbAotCQkgICBjb3ZlcnMgMjU2IHBpeGVscyA/IT8KLQkJKi8KKwkJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBDSElQX0hBU19ISUVSWikKKwkJICAgICYmIChmbGFncyAmIFJBREVPTl9VU0VfSElFUlopKSB7CisJCQkvKiBGSVhNRSA6IHJldmVyc2UgZW5naW5lZXIgdGhhdCBmb3IgUngwMCBjYXJkcyAqLworCQkJLyogRklYTUUgOiB0aGUgbWFzayBzdXBwb3NlZGx5IGNvbnRhaW5zIGxvdy1yZXMgeiB2YWx1ZXMuIFNvIGNhbid0IHNldAorCQkJICAganVzdCB0byB0aGUgbWF4ICgweGZmPyBvciBhY3R1YWxseSAweDNmZmY/KSwgbmVlZCB0byB0YWtlIHogY2xlYXIKKwkJCSAgIHZhbHVlIGludG8gYWNjb3VudD8gKi8KKwkJCS8qIHBhdHRlcm4gc2VlbXMgdG8gd29yayBmb3IgcjEwMCwgdGhvdWdoIGdldCBzbGlnaHQKKwkJCSAgIHJlbmRlcmluZyBlcnJvcnMgd2l0aCBnbHhnZWFycy4gSWYgaGllcnogaXMgbm90IGVuYWJsZWQgZm9yIHIxMDAsCisJCQkgICBvbmx5IDQgYml0cyB3aGljaCBpbmRpY2F0ZSBjbGVhciAoMTUsMTYsMzEsMzIsIGFsbCB6ZXJvKSBtYXR0ZXIsIHRoZQorCQkJICAgb3RoZXIgb25lcyBhcmUgaWdub3JlZCwgYW5kIHRoZSBzYW1lIGNsZWFyIG1hc2sgY2FuIGJlIHVzZWQuIFRoYXQncworCQkJICAgdmVyeSBkaWZmZXJlbnQgYmVoYXZpb3VyIHRoYW4gUjIwMCB3aGljaCBuZWVkcyBkaWZmZXJlbnQgY2xlYXIgbWFzaworCQkJICAgYW5kIGRpZmZlcmVudCBudW1iZXIgb2YgdGlsZXMgdG8gY2xlYXIgaWYgaGllcnogaXMgZW5hYmxlZCBvciBub3QgIT8hCisJCQkgKi8KKwkJCWNsZWFybWFzayA9ICgweGZmIDw8IDIyKSB8ICgweGZmIDw8IDYpIHwgMHgwMDNmMDAzZjsKKwkJfSBlbHNlIHsKKwkJCS8qIGNsZWFyIG1hc2sgOiBjaG9vc2VzIHRoZSBjbGVhcmluZyBwYXR0ZXJuLgorCQkJICAgcnYyNTA6IGNvdWxkIGJlIHVzZWQgdG8gY2xlYXIgb25seSBwYXJ0cyBvZiBtYWNyb3RpbGVzCisJCQkgICAoYnV0IHRoYXQgd291bGQgZ2V0IHJlYWxseSBjb21wbGljYXRlZC4uLik/CisJCQkgICBiaXQgMCBhbmQgMSAoZWl0aGVyIG9yIGJvdGggb2YgdGhlbSA/IT8hKSBhcmUgdXNlZCB0bworCQkJICAgbm90IGNsZWFyIHRpbGUgKG9yIG1heWJlIG9uZSBvZiB0aGUgYml0cyBpbmRpY2F0ZXMgaWYgdGhlIHRpbGUgaXMKKwkJCSAgIGNvbXByZXNzZWQgb3Igbm90KSwgYml0IDIgYW5kIDMgdG8gbm90IGNsZWFyIHRpbGUgMSwuLi4sLgorCQkJICAgUGF0dGVybiBpcyBhcyBmb2xsb3dzOgorCQkJICAgfCAwLDEgfCA0LDUgfCA4LDkgfDEyLDEzfDE2LDE3fDIwLDIxfDI0LDI1fDI4LDI5fAorCQkJICAgYml0cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQkgICB8IDIsMyB8IDYsNyB8MTAsMTF8MTQsMTV8MTgsMTl8MjIsMjN8MjYsMjd8MzAsMzF8CisJCQkgICBydjEwMDogY2xlYXJtYXNrIGNvdmVycyAyeDggNHgxIHRpbGVzLCBidXQgb25lIGNsZWFyIHN0aWxsCisJCQkgICBjb3ZlcnMgMjU2IHBpeGVscyA/IT8KKwkJCSAqLwogCQkJY2xlYXJtYXNrID0gMHgwOwogCQl9CiAKLQkJQkVHSU5fUklORyggOCApOworCQlCRUdJTl9SSU5HKDgpOwogCQlSQURFT05fV0FJVF9VTlRJTF8yRF9JRExFKCk7Ci0JCU9VVF9SSU5HX1JFRyggUkFERU9OX1JCM0RfREVQVEhDTEVBUlZBTFVFLAotCQkJdGVtcFJCM0RfREVQVEhDTEVBUlZBTFVFKTsKKwkJT1VUX1JJTkdfUkVHKFJBREVPTl9SQjNEX0RFUFRIQ0xFQVJWQUxVRSwKKwkJCSAgICAgdGVtcFJCM0RfREVQVEhDTEVBUlZBTFVFKTsKIAkJLyogd2hhdCBvZmZzZXQgaXMgdGhpcyBleGFjdGx5ID8gKi8KLQkJT1VUX1JJTkdfUkVHKCBSQURFT05fUkIzRF9aTUFTS09GRlNFVCwgMCApOworCQlPVVRfUklOR19SRUcoUkFERU9OX1JCM0RfWk1BU0tPRkZTRVQsIDApOwogCQkvKiBuZWVkIGN0bHN0YXQsIG90aGVyd2lzZSBnZXQgc29tZSBzdHJhbmdlIGJsYWNrIGZsaWNrZXJpbmcgKi8KLQkJT1VUX1JJTkdfUkVHKCBSQURFT05fUkIzRF9aQ0FDSEVfQ1RMU1RBVCwgUkFERU9OX1JCM0RfWkNfRkxVU0hfQUxMICk7CisJCU9VVF9SSU5HX1JFRyhSQURFT05fUkIzRF9aQ0FDSEVfQ1RMU1RBVCwKKwkJCSAgICAgUkFERU9OX1JCM0RfWkNfRkxVU0hfQUxMKTsKIAkJQURWQU5DRV9SSU5HKCk7CiAKIAkJZm9yIChpID0gMDsgaSA8IG5ib3g7IGkrKykgewogCQkJaW50IHRpbGVvZmZzZXQsIG5ydGlsZXN4LCBucnRpbGVzeSwgajsKIAkJCS8qIGl0IGxvb2tzIGxpa2UgcjIwMCBuZWVkcyBydi1zdHlsZSBjbGVhcnMsIGF0IGxlYXN0IGlmIGhpZXJ6IGlzIG5vdCBlbmFibGVkPyAqLwotCQkJaWYgKChkZXZfcHJpdi0+ZmxhZ3MmQ0hJUF9IQVNfSElFUlopICYmICEoZGV2X3ByaXYtPm1pY3JvY29kZV92ZXJzaW9uPT1VQ09ERV9SMjAwKSkgeworCQkJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBDSElQX0hBU19ISUVSWikKKwkJCSAgICAmJiAhKGRldl9wcml2LT5taWNyb2NvZGVfdmVyc2lvbiA9PSBVQ09ERV9SMjAwKSkgewogCQkJCS8qIEZJWE1FIDogZmlndXJlIHRoaXMgb3V0IGZvciByMjAwICh3aGVuIGhpZXJ6IGlzIGVuYWJsZWQpLiBPcgogCQkJCSAgIG1heWJlIHIyMDAgYWN0dWFsbHkgZG9lc24ndCBuZWVkIHRvIHB1dCB0aGUgbG93LXJlcyB6IHZhbHVlIGludG8KIAkJCQkgICB0aGUgdGlsZSBjYWNoZSBsaWtlIHIxMDAsIGJ1dCBqdXN0IG5lZWRzIHRvIGNsZWFyIHRoZSBoaS1sZXZlbCB6LWJ1ZmZlcj8KQEAgLTg2OCw1OSArODkwLDc0IEBACiAJCQkJICAgUjEwMCBzZWVtcyB0byBvcGVyYXRlIG9uIDJ4MSA4eDggdGlsZXMsIGJ1dC4uLgogCQkJCSAgIG9kZDogb2Zmc2V0L25ydGlsZXMgbmVlZCB0byBiZSA2NCBwaXggKDQgYmxvY2spIGFsaWduZWQ/IFBvdGVudGlhbGx5CiAJCQkJICAgcHJvYmxlbWF0aWMgd2l0aCByZXNvbHV0aW9ucyB3aGljaCBhcmUgbm90IDY0IHBpeCBhbGlnbmVkPyAqLwotCQkJCXRpbGVvZmZzZXQgPSAoKHBib3hbaV0ueTEgPj4gMykgKiBkZXB0aHBpeHBlcmxpbmUgKyBwYm94W2ldLngxKSA+PiA2OwotCQkJCW5ydGlsZXN4ID0gKChwYm94W2ldLngyICYgfjYzKSAtIChwYm94W2ldLngxICYgfjYzKSkgPj4gNDsKLQkJCQlucnRpbGVzeSA9IChwYm94W2ldLnkyID4+IDMpIC0gKHBib3hbaV0ueTEgPj4gMyk7CisJCQkJdGlsZW9mZnNldCA9CisJCQkJICAgICgocGJveFtpXS55MSA+PiAzKSAqIGRlcHRocGl4cGVybGluZSArCisJCQkJICAgICBwYm94W2ldLngxKSA+PiA2OworCQkJCW5ydGlsZXN4ID0KKwkJCQkgICAgKChwYm94W2ldLngyICYgfjYzKSAtCisJCQkJICAgICAocGJveFtpXS54MSAmIH42MykpID4+IDQ7CisJCQkJbnJ0aWxlc3kgPQorCQkJCSAgICAocGJveFtpXS55MiA+PiAzKSAtIChwYm94W2ldLnkxID4+IDMpOwogCQkJCWZvciAoaiA9IDA7IGogPD0gbnJ0aWxlc3k7IGorKykgewotCQkJCQlCRUdJTl9SSU5HKCA0ICk7Ci0JCQkJCU9VVF9SSU5HKCBDUF9QQUNLRVQzKCBSQURFT05fM0RfQ0xFQVJfWk1BU0ssIDIgKSApOworCQkJCQlCRUdJTl9SSU5HKDQpOworCQkJCQlPVVRfUklORyhDUF9QQUNLRVQzCisJCQkJCQkgKFJBREVPTl8zRF9DTEVBUl9aTUFTSywgMikpOwogCQkJCQkvKiBmaXJzdCB0aWxlICovCi0JCQkJCU9VVF9SSU5HKCB0aWxlb2Zmc2V0ICogOCApOworCQkJCQlPVVRfUklORyh0aWxlb2Zmc2V0ICogOCk7CiAJCQkJCS8qIHRoZSBudW1iZXIgb2YgdGlsZXMgdG8gY2xlYXIgKi8KLQkJCQkJT1VUX1JJTkcoIG5ydGlsZXN4ICsgNCApOworCQkJCQlPVVRfUklORyhucnRpbGVzeCArIDQpOwogCQkJCQkvKiBjbGVhciBtYXNrIDogY2hvb3NlcyB0aGUgY2xlYXJpbmcgcGF0dGVybi4gKi8KLQkJCQkJT1VUX1JJTkcoIGNsZWFybWFzayApOworCQkJCQlPVVRfUklORyhjbGVhcm1hc2spOwogCQkJCQlBRFZBTkNFX1JJTkcoKTsKIAkJCQkJdGlsZW9mZnNldCArPSBkZXB0aHBpeHBlcmxpbmUgPj4gNjsKIAkJCQl9Ci0JCQl9Ci0JCQllbHNlIGlmIChkZXZfcHJpdi0+bWljcm9jb2RlX3ZlcnNpb249PVVDT0RFX1IyMDApIHsKKwkJCX0gZWxzZSBpZiAoZGV2X3ByaXYtPm1pY3JvY29kZV92ZXJzaW9uID09IFVDT0RFX1IyMDApIHsKIAkJCQkvKiB3b3JrcyBmb3IgcnYyNTAuICovCiAJCQkJLyogZmluZCBmaXJzdCBtYWNybyB0aWxlICg4eDIgNHg0IHotcGl4ZWxzIG9uIHJ2MjUwKSAqLwotCQkJCXRpbGVvZmZzZXQgPSAoKHBib3hbaV0ueTEgPj4gMykgKiBkZXB0aHBpeHBlcmxpbmUgKyBwYm94W2ldLngxKSA+PiA1OwotCQkJCW5ydGlsZXN4ID0gKHBib3hbaV0ueDIgPj4gNSkgLSAocGJveFtpXS54MSA+PiA1KTsKLQkJCQlucnRpbGVzeSA9IChwYm94W2ldLnkyID4+IDMpIC0gKHBib3hbaV0ueTEgPj4gMyk7CisJCQkJdGlsZW9mZnNldCA9CisJCQkJICAgICgocGJveFtpXS55MSA+PiAzKSAqIGRlcHRocGl4cGVybGluZSArCisJCQkJICAgICBwYm94W2ldLngxKSA+PiA1OworCQkJCW5ydGlsZXN4ID0KKwkJCQkgICAgKHBib3hbaV0ueDIgPj4gNSkgLSAocGJveFtpXS54MSA+PiA1KTsKKwkJCQlucnRpbGVzeSA9CisJCQkJICAgIChwYm94W2ldLnkyID4+IDMpIC0gKHBib3hbaV0ueTEgPj4gMyk7CiAJCQkJZm9yIChqID0gMDsgaiA8PSBucnRpbGVzeTsgaisrKSB7Ci0JCQkJCUJFR0lOX1JJTkcoIDQgKTsKLQkJCQkJT1VUX1JJTkcoIENQX1BBQ0tFVDMoIFJBREVPTl8zRF9DTEVBUl9aTUFTSywgMiApICk7CisJCQkJCUJFR0lOX1JJTkcoNCk7CisJCQkJCU9VVF9SSU5HKENQX1BBQ0tFVDMKKwkJCQkJCSAoUkFERU9OXzNEX0NMRUFSX1pNQVNLLCAyKSk7CiAJCQkJCS8qIGZpcnN0IHRpbGUgKi8KIAkJCQkJLyoganVkZ2luZyBieSB0aGUgZmlyc3QgdGlsZSBvZmZzZXQgbmVlZGVkLCBjb3VsZCBwb3NzaWJseQogCQkJCQkgICBkaXJlY3RseSBhZGRyZXNzL2NsZWFyIDR4NCB0aWxlcyBpbnN0ZWFkIG9mIDh4MiAqIDR4NAogCQkJCQkgICBtYWNybyB0aWxlcywgdGhvdWdoIHdvdWxkIHN0aWxsIG5lZWQgY2xlYXIgbWFzayBmb3IKIAkJCQkJICAgcmlnaHQvYm90dG9tIGlmIHRydWVseSA0eDQgZ3JhbnVsYXJpdHkgaXMgZGVzaXJlZCA/ICovCi0JCQkJCU9VVF9SSU5HKCB0aWxlb2Zmc2V0ICogMTYgKTsKKwkJCQkJT1VUX1JJTkcodGlsZW9mZnNldCAqIDE2KTsKIAkJCQkJLyogdGhlIG51bWJlciBvZiB0aWxlcyB0byBjbGVhciAqLwotCQkJCQlPVVRfUklORyggbnJ0aWxlc3ggKyAxICk7CisJCQkJCU9VVF9SSU5HKG5ydGlsZXN4ICsgMSk7CiAJCQkJCS8qIGNsZWFyIG1hc2sgOiBjaG9vc2VzIHRoZSBjbGVhcmluZyBwYXR0ZXJuLiAqLwotCQkJCQlPVVRfUklORyggY2xlYXJtYXNrICk7CisJCQkJCU9VVF9SSU5HKGNsZWFybWFzayk7CiAJCQkJCUFEVkFOQ0VfUklORygpOwogCQkJCQl0aWxlb2Zmc2V0ICs9IGRlcHRocGl4cGVybGluZSA+PiA1OwogCQkJCX0KLQkJCX0KLQkJCWVsc2UgeyAvKiBydiAxMDAgKi8KKwkJCX0gZWxzZSB7CS8qIHJ2IDEwMCAqLwogCQkJCS8qIHJ2MTAwIG1pZ2h0IG5vdCBuZWVkIDY0IHBpeCBhbGlnbm1lbnQsIHdobyBrbm93cyAqLwogCQkJCS8qIG9mZnNldHMgYXJlLCBobW0sIHdlaXJkICovCi0JCQkJdGlsZW9mZnNldCA9ICgocGJveFtpXS55MSA+PiA0KSAqIGRlcHRocGl4cGVybGluZSArIHBib3hbaV0ueDEpID4+IDY7Ci0JCQkJbnJ0aWxlc3ggPSAoKHBib3hbaV0ueDIgJiB+NjMpIC0gKHBib3hbaV0ueDEgJiB+NjMpKSA+PiA0OwotCQkJCW5ydGlsZXN5ID0gKHBib3hbaV0ueTIgPj4gNCkgLSAocGJveFtpXS55MSA+PiA0KTsKKwkJCQl0aWxlb2Zmc2V0ID0KKwkJCQkgICAgKChwYm94W2ldLnkxID4+IDQpICogZGVwdGhwaXhwZXJsaW5lICsKKwkJCQkgICAgIHBib3hbaV0ueDEpID4+IDY7CisJCQkJbnJ0aWxlc3ggPQorCQkJCSAgICAoKHBib3hbaV0ueDIgJiB+NjMpIC0KKwkJCQkgICAgIChwYm94W2ldLngxICYgfjYzKSkgPj4gNDsKKwkJCQlucnRpbGVzeSA9CisJCQkJICAgIChwYm94W2ldLnkyID4+IDQpIC0gKHBib3hbaV0ueTEgPj4gNCk7CiAJCQkJZm9yIChqID0gMDsgaiA8PSBucnRpbGVzeTsgaisrKSB7Ci0JCQkJCUJFR0lOX1JJTkcoIDQgKTsKLQkJCQkJT1VUX1JJTkcoIENQX1BBQ0tFVDMoIFJBREVPTl8zRF9DTEVBUl9aTUFTSywgMiApICk7Ci0JCQkJCU9VVF9SSU5HKCB0aWxlb2Zmc2V0ICogMTI4ICk7CisJCQkJCUJFR0lOX1JJTkcoNCk7CisJCQkJCU9VVF9SSU5HKENQX1BBQ0tFVDMKKwkJCQkJCSAoUkFERU9OXzNEX0NMRUFSX1pNQVNLLCAyKSk7CisJCQkJCU9VVF9SSU5HKHRpbGVvZmZzZXQgKiAxMjgpOwogCQkJCQkvKiB0aGUgbnVtYmVyIG9mIHRpbGVzIHRvIGNsZWFyICovCi0JCQkJCU9VVF9SSU5HKCBucnRpbGVzeCArIDQgKTsKKwkJCQkJT1VUX1JJTkcobnJ0aWxlc3ggKyA0KTsKIAkJCQkJLyogY2xlYXIgbWFzayA6IGNob29zZXMgdGhlIGNsZWFyaW5nIHBhdHRlcm4uICovCi0JCQkJCU9VVF9SSU5HKCBjbGVhcm1hc2sgKTsKKwkJCQkJT1VUX1JJTkcoY2xlYXJtYXNrKTsKIAkJCQkJQURWQU5DRV9SSU5HKCk7CiAJCQkJCXRpbGVvZmZzZXQgKz0gZGVwdGhwaXhwZXJsaW5lID4+IDY7CiAJCQkJfQpAQCAtOTI4LDE4ICs5NjUsMTkgQEAKIAkJfQogCiAJCS8qIFRPRE8gZG9uJ3QgYWx3YXlzIGNsZWFyIGFsbCBoaS1sZXZlbCB6IHRpbGVzICovCi0JCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgQ0hJUF9IQVNfSElFUlopICYmIChkZXZfcHJpdi0+bWljcm9jb2RlX3ZlcnNpb249PVVDT0RFX1IyMDApCi0JCQkmJiAoZmxhZ3MgJiBSQURFT05fVVNFX0hJRVJaKSkKLQkJLyogcjEwMCBhbmQgY2FyZHMgd2l0aG91dCBoaWVyYXJjaGljYWwgei1idWZmZXIgaGF2ZSBubyBoaWdoLWxldmVsIHotYnVmZmVyICovCi0JCS8qIEZJWE1FIDogdGhlIG1hc2sgc3VwcG9zZWRseSBjb250YWlucyBsb3ctcmVzIHogdmFsdWVzLiBTbyBjYW4ndCBzZXQKLQkJICAganVzdCB0byB0aGUgbWF4ICgweGZmPyBvciBhY3R1YWxseSAweDNmZmY/KSwgbmVlZCB0byB0YWtlIHogY2xlYXIKLQkJICAgdmFsdWUgaW50byBhY2NvdW50PyAqLworCQlpZiAoKGRldl9wcml2LT5mbGFncyAmIENISVBfSEFTX0hJRVJaKQorCQkgICAgJiYgKGRldl9wcml2LT5taWNyb2NvZGVfdmVyc2lvbiA9PSBVQ09ERV9SMjAwKQorCQkgICAgJiYgKGZsYWdzICYgUkFERU9OX1VTRV9ISUVSWikpCisJCQkvKiByMTAwIGFuZCBjYXJkcyB3aXRob3V0IGhpZXJhcmNoaWNhbCB6LWJ1ZmZlciBoYXZlIG5vIGhpZ2gtbGV2ZWwgei1idWZmZXIgKi8KKwkJCS8qIEZJWE1FIDogdGhlIG1hc2sgc3VwcG9zZWRseSBjb250YWlucyBsb3ctcmVzIHogdmFsdWVzLiBTbyBjYW4ndCBzZXQKKwkJCSAgIGp1c3QgdG8gdGhlIG1heCAoMHhmZj8gb3IgYWN0dWFsbHkgMHgzZmZmPyksIG5lZWQgdG8gdGFrZSB6IGNsZWFyCisJCQkgICB2YWx1ZSBpbnRvIGFjY291bnQ/ICovCiAJCXsKLQkJCUJFR0lOX1JJTkcoIDQgKTsKLQkJCU9VVF9SSU5HKCBDUF9QQUNLRVQzKCBSQURFT05fM0RfQ0xFQVJfSElaLCAyICkgKTsKLQkJCU9VVF9SSU5HKCAweDAgKTsgLyogRmlyc3QgdGlsZSAqLwotCQkJT1VUX1JJTkcoIDB4M2NjMCApOwotCQkJT1VUX1JJTkcoICgweGZmPDwyMil8KDB4ZmY8PDYpfCAweDAwM2YwMDNmKTsKKwkJCUJFR0lOX1JJTkcoNCk7CisJCQlPVVRfUklORyhDUF9QQUNLRVQzKFJBREVPTl8zRF9DTEVBUl9ISVosIDIpKTsKKwkJCU9VVF9SSU5HKDB4MCk7CS8qIEZpcnN0IHRpbGUgKi8KKwkJCU9VVF9SSU5HKDB4M2NjMCk7CisJCQlPVVRfUklORygoMHhmZiA8PCAyMikgfCAoMHhmZiA8PCA2KSB8IDB4MDAzZjAwM2YpOwogCQkJQURWQU5DRV9SSU5HKCk7CiAJCX0KIAl9CkBAIC05NzQsMzAgKzEwMTIsMjcgQEAKIAogCQl0ZW1wU0VfQ05UTCA9IGRlcHRoX2NsZWFyLT5zZV9jbnRsOwogCi0KLQogCQkvKiBEaXNhYmxlIFRDTCAqLwogCi0JCXRlbXBTRV9WQVBfQ05UTCA9ICgvKiBTRV9WQVBfQ05UTF9fRk9SQ0VfV19UT19PTkVfTUFTSyB8ICAqLwotCQkJCSAgICgweDkgPDwgU0VfVkFQX0NOVExfX1ZGX01BWF9WVFhfTlVNX19TSElGVCkpOworCQl0ZW1wU0VfVkFQX0NOVEwgPSAoCS8qIFNFX1ZBUF9DTlRMX19GT1JDRV9XX1RPX09ORV9NQVNLIHwgICovCisJCQkJCSAgKDB4OSA8PAorCQkJCQkgICBTRV9WQVBfQ05UTF9fVkZfTUFYX1ZUWF9OVU1fX1NISUZUKSk7CiAKIAkJdGVtcFJCM0RfUExBTkVNQVNLID0gMHgwOwogCiAJCXRlbXBSRV9BVVhfU0NJU1NPUl9DTlRMID0gMHgwOwogCiAJCXRlbXBTRV9WVEVfQ05UTCA9Ci0JCQlTRV9WVEVfQ05UTF9fVlRYX1hZX0ZNVF9NQVNLIHwKLQkJCVNFX1ZURV9DTlRMX19WVFhfWl9GTVRfTUFTSzsKKwkJICAgIFNFX1ZURV9DTlRMX19WVFhfWFlfRk1UX01BU0sgfCBTRV9WVEVfQ05UTF9fVlRYX1pfRk1UX01BU0s7CiAKLQkJLyogVmVydGV4IGZvcm1hdCAoWCwgWSwgWiwgVykqLworCQkvKiBWZXJ0ZXggZm9ybWF0IChYLCBZLCBaLCBXKSAqLwogCQl0ZW1wU0VfVlRYX0ZNVF8wID0KLQkJCVNFX1ZUWF9GTVRfMF9fVlRYX1owX1BSRVNFTlRfTUFTSyB8Ci0JCQlTRV9WVFhfRk1UXzBfX1ZUWF9XMF9QUkVTRU5UX01BU0s7CisJCSAgICBTRV9WVFhfRk1UXzBfX1ZUWF9aMF9QUkVTRU5UX01BU0sgfAorCQkgICAgU0VfVlRYX0ZNVF8wX19WVFhfVzBfUFJFU0VOVF9NQVNLOwogCQl0ZW1wU0VfVlRYX0ZNVF8xID0gMHgwOwogCi0KLQkJLyogCi0JCSAqIERlcHRoIGJ1ZmZlciBzcGVjaWZpYyBlbmFibGVzIAorCQkvKgorCQkgKiBEZXB0aCBidWZmZXIgc3BlY2lmaWMgZW5hYmxlcwogCQkgKi8KIAkJaWYgKGZsYWdzICYgUkFERU9OX0RFUFRIKSB7CiAJCQkvKiBFbmFibGUgZGVwdGggYnVmZmVyICovCkBAIC0xMDA3LDEyICsxMDQyLDEyIEBACiAJCQl0ZW1wUkIzRF9DTlRMICY9IH5SQURFT05fWl9FTkFCTEU7CiAJCX0KIAotCQkvKiAKKwkJLyoKIAkJICogU3RlbmNpbCBidWZmZXIgc3BlY2lmaWMgZW5hYmxlcwogCQkgKi8KLQkJaWYgKCBmbGFncyAmIFJBREVPTl9TVEVOQ0lMICkgewotCQkJdGVtcFJCM0RfQ05UTCB8PSAgUkFERU9OX1NURU5DSUxfRU5BQkxFOwotCQkJdGVtcFJCM0RfU1RFTkNJTFJFRk1BU0sgPSBjbGVhci0+ZGVwdGhfbWFzazsgCisJCWlmIChmbGFncyAmIFJBREVPTl9TVEVOQ0lMKSB7CisJCQl0ZW1wUkIzRF9DTlRMIHw9IFJBREVPTl9TVEVOQ0lMX0VOQUJMRTsKKwkJCXRlbXBSQjNEX1NURU5DSUxSRUZNQVNLID0gY2xlYXItPmRlcHRoX21hc2s7CiAJCX0gZWxzZSB7CiAJCQl0ZW1wUkIzRF9DTlRMICY9IH5SQURFT05fU1RFTkNJTF9FTkFCTEU7CiAJCQl0ZW1wUkIzRF9TVEVOQ0lMUkVGTUFTSyA9IDB4MDAwMDAwMDA7CkBAIC0xMDIwLDc5ICsxMDU1LDc1IEBACiAKIAkJaWYgKGZsYWdzICYgUkFERU9OX1VTRV9DT01QX1pCVUYpIHsKIAkJCXRlbXBSQjNEX1pTVEVOQ0lMQ05UTCB8PSBSQURFT05fWl9DT01QUkVTU0lPTl9FTkFCTEUgfAotCQkJCVJBREVPTl9aX0RFQ09NUFJFU1NJT05fRU5BQkxFOworCQkJICAgIFJBREVPTl9aX0RFQ09NUFJFU1NJT05fRU5BQkxFOwogCQl9CiAJCWlmIChmbGFncyAmIFJBREVPTl9VU0VfSElFUlopIHsKIAkJCXRlbXBSQjNEX1pTVEVOQ0lMQ05UTCB8PSBSQURFT05fWl9ISUVSQVJDSFlfRU5BQkxFOwogCQl9CiAKLQkJQkVHSU5fUklORyggMjYgKTsKKwkJQkVHSU5fUklORygyNik7CiAJCVJBREVPTl9XQUlUX1VOVElMXzJEX0lETEUoKTsKIAotCQlPVVRfUklOR19SRUcoIFJBREVPTl9QUF9DTlRMLCB0ZW1wUFBfQ05UTCApOwotCQlPVVRfUklOR19SRUcoIFIyMDBfUkVfQ05UTCwgdGVtcFJFX0NOVEwgKTsKLQkJT1VUX1JJTkdfUkVHKCBSQURFT05fUkIzRF9DTlRMLCB0ZW1wUkIzRF9DTlRMICk7Ci0JCU9VVF9SSU5HX1JFRyggUkFERU9OX1JCM0RfWlNURU5DSUxDTlRMLAotCQkJICAgICAgdGVtcFJCM0RfWlNURU5DSUxDTlRMICk7Ci0JCU9VVF9SSU5HX1JFRyggUkFERU9OX1JCM0RfU1RFTkNJTFJFRk1BU0ssIAotCQkJICAgICAgdGVtcFJCM0RfU1RFTkNJTFJFRk1BU0sgKTsKLQkJT1VUX1JJTkdfUkVHKCBSQURFT05fUkIzRF9QTEFORU1BU0ssIHRlbXBSQjNEX1BMQU5FTUFTSyApOwotCQlPVVRfUklOR19SRUcoIFJBREVPTl9TRV9DTlRMLCB0ZW1wU0VfQ05UTCApOwotCQlPVVRfUklOR19SRUcoIFIyMDBfU0VfVlRFX0NOVEwsIHRlbXBTRV9WVEVfQ05UTCApOwotCQlPVVRfUklOR19SRUcoIFIyMDBfU0VfVlRYX0ZNVF8wLCB0ZW1wU0VfVlRYX0ZNVF8wICk7Ci0JCU9VVF9SSU5HX1JFRyggUjIwMF9TRV9WVFhfRk1UXzEsIHRlbXBTRV9WVFhfRk1UXzEgKTsKLQkJT1VUX1JJTkdfUkVHKCBSMjAwX1NFX1ZBUF9DTlRMLCB0ZW1wU0VfVkFQX0NOVEwgKTsKLQkJT1VUX1JJTkdfUkVHKCBSMjAwX1JFX0FVWF9TQ0lTU09SX0NOVEwsIAotCQkJICAgICAgdGVtcFJFX0FVWF9TQ0lTU09SX0NOVEwgKTsKKwkJT1VUX1JJTkdfUkVHKFJBREVPTl9QUF9DTlRMLCB0ZW1wUFBfQ05UTCk7CisJCU9VVF9SSU5HX1JFRyhSMjAwX1JFX0NOVEwsIHRlbXBSRV9DTlRMKTsKKwkJT1VUX1JJTkdfUkVHKFJBREVPTl9SQjNEX0NOVEwsIHRlbXBSQjNEX0NOVEwpOworCQlPVVRfUklOR19SRUcoUkFERU9OX1JCM0RfWlNURU5DSUxDTlRMLCB0ZW1wUkIzRF9aU1RFTkNJTENOVEwpOworCQlPVVRfUklOR19SRUcoUkFERU9OX1JCM0RfU1RFTkNJTFJFRk1BU0ssCisJCQkgICAgIHRlbXBSQjNEX1NURU5DSUxSRUZNQVNLKTsKKwkJT1VUX1JJTkdfUkVHKFJBREVPTl9SQjNEX1BMQU5FTUFTSywgdGVtcFJCM0RfUExBTkVNQVNLKTsKKwkJT1VUX1JJTkdfUkVHKFJBREVPTl9TRV9DTlRMLCB0ZW1wU0VfQ05UTCk7CisJCU9VVF9SSU5HX1JFRyhSMjAwX1NFX1ZURV9DTlRMLCB0ZW1wU0VfVlRFX0NOVEwpOworCQlPVVRfUklOR19SRUcoUjIwMF9TRV9WVFhfRk1UXzAsIHRlbXBTRV9WVFhfRk1UXzApOworCQlPVVRfUklOR19SRUcoUjIwMF9TRV9WVFhfRk1UXzEsIHRlbXBTRV9WVFhfRk1UXzEpOworCQlPVVRfUklOR19SRUcoUjIwMF9TRV9WQVBfQ05UTCwgdGVtcFNFX1ZBUF9DTlRMKTsKKwkJT1VUX1JJTkdfUkVHKFIyMDBfUkVfQVVYX1NDSVNTT1JfQ05UTCwgdGVtcFJFX0FVWF9TQ0lTU09SX0NOVEwpOwogCQlBRFZBTkNFX1JJTkcoKTsKIAogCQkvKiBNYWtlIHN1cmUgd2UgcmVzdG9yZSB0aGUgM0Qgc3RhdGUgbmV4dCB0aW1lLgogCQkgKi8KIAkJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmN0eF9vd25lciA9IDA7CiAKLQkJZm9yICggaSA9IDAgOyBpIDwgbmJveCA7IGkrKyApIHsKLQkJCQotCQkJLyogRnVubnkgdGhhdCB0aGlzIHNob3VsZCBiZSByZXF1aXJlZCAtLSAKKwkJZm9yIChpID0gMDsgaSA8IG5ib3g7IGkrKykgeworCisJCQkvKiBGdW5ueSB0aGF0IHRoaXMgc2hvdWxkIGJlIHJlcXVpcmVkIC0tCiAJCQkgKiAgc2V0cyB0b3AtbGVmdD8KIAkJCSAqLwotCQkJcmFkZW9uX2VtaXRfY2xpcF9yZWN0KCBkZXZfcHJpdiwKLQkJCQkJICAgICAgICZzYXJlYV9wcml2LT5ib3hlc1tpXSApOworCQkJcmFkZW9uX2VtaXRfY2xpcF9yZWN0KGRldl9wcml2LCAmc2FyZWFfcHJpdi0+Ym94ZXNbaV0pOwogCi0JCQlCRUdJTl9SSU5HKCAxNCApOwotCQkJT1VUX1JJTkcoIENQX1BBQ0tFVDMoIFIyMDBfM0RfRFJBV19JTU1EXzIsIDEyICkgKTsKLQkJCU9VVF9SSU5HKCAoUkFERU9OX1BSSU1fVFlQRV9SRUNUX0xJU1QgfAotCQkJCSAgIFJBREVPTl9QUklNX1dBTEtfUklORyB8Ci0JCQkJICAgKDMgPDwgUkFERU9OX05VTV9WRVJUSUNFU19TSElGVCkpICk7Ci0JCQlPVVRfUklORyggZGVwdGhfYm94ZXNbaV0udWlbQ0xFQVJfWDFdICk7Ci0JCQlPVVRfUklORyggZGVwdGhfYm94ZXNbaV0udWlbQ0xFQVJfWTFdICk7Ci0JCQlPVVRfUklORyggZGVwdGhfYm94ZXNbaV0udWlbQ0xFQVJfREVQVEhdICk7Ci0JCQlPVVRfUklORyggMHgzZjgwMDAwMCApOwotCQkJT1VUX1JJTkcoIGRlcHRoX2JveGVzW2ldLnVpW0NMRUFSX1gxXSApOwotCQkJT1VUX1JJTkcoIGRlcHRoX2JveGVzW2ldLnVpW0NMRUFSX1kyXSApOwotCQkJT1VUX1JJTkcoIGRlcHRoX2JveGVzW2ldLnVpW0NMRUFSX0RFUFRIXSApOwotCQkJT1VUX1JJTkcoIDB4M2Y4MDAwMDAgKTsKLQkJCU9VVF9SSU5HKCBkZXB0aF9ib3hlc1tpXS51aVtDTEVBUl9YMl0gKTsKLQkJCU9VVF9SSU5HKCBkZXB0aF9ib3hlc1tpXS51aVtDTEVBUl9ZMl0gKTsKLQkJCU9VVF9SSU5HKCBkZXB0aF9ib3hlc1tpXS51aVtDTEVBUl9ERVBUSF0gKTsKLQkJCU9VVF9SSU5HKCAweDNmODAwMDAwICk7CisJCQlCRUdJTl9SSU5HKDE0KTsKKwkJCU9VVF9SSU5HKENQX1BBQ0tFVDMoUjIwMF8zRF9EUkFXX0lNTURfMiwgMTIpKTsKKwkJCU9VVF9SSU5HKChSQURFT05fUFJJTV9UWVBFX1JFQ1RfTElTVCB8CisJCQkJICBSQURFT05fUFJJTV9XQUxLX1JJTkcgfAorCQkJCSAgKDMgPDwgUkFERU9OX05VTV9WRVJUSUNFU19TSElGVCkpKTsKKwkJCU9VVF9SSU5HKGRlcHRoX2JveGVzW2ldLnVpW0NMRUFSX1gxXSk7CisJCQlPVVRfUklORyhkZXB0aF9ib3hlc1tpXS51aVtDTEVBUl9ZMV0pOworCQkJT1VUX1JJTkcoZGVwdGhfYm94ZXNbaV0udWlbQ0xFQVJfREVQVEhdKTsKKwkJCU9VVF9SSU5HKDB4M2Y4MDAwMDApOworCQkJT1VUX1JJTkcoZGVwdGhfYm94ZXNbaV0udWlbQ0xFQVJfWDFdKTsKKwkJCU9VVF9SSU5HKGRlcHRoX2JveGVzW2ldLnVpW0NMRUFSX1kyXSk7CisJCQlPVVRfUklORyhkZXB0aF9ib3hlc1tpXS51aVtDTEVBUl9ERVBUSF0pOworCQkJT1VUX1JJTkcoMHgzZjgwMDAwMCk7CisJCQlPVVRfUklORyhkZXB0aF9ib3hlc1tpXS51aVtDTEVBUl9YMl0pOworCQkJT1VUX1JJTkcoZGVwdGhfYm94ZXNbaV0udWlbQ0xFQVJfWTJdKTsKKwkJCU9VVF9SSU5HKGRlcHRoX2JveGVzW2ldLnVpW0NMRUFSX0RFUFRIXSk7CisJCQlPVVRfUklORygweDNmODAwMDAwKTsKIAkJCUFEVkFOQ0VfUklORygpOwogCQl9Ci0JfSAKLQllbHNlIGlmICggKGZsYWdzICYgKFJBREVPTl9ERVBUSCB8IFJBREVPTl9TVEVOQ0lMKSkgKSB7CisJfSBlbHNlIGlmICgoZmxhZ3MgJiAoUkFERU9OX0RFUFRIIHwgUkFERU9OX1NURU5DSUwpKSkgewogCiAJCWludCB0ZW1wUkIzRF9aU1RFTkNJTENOVEwgPSBkZXB0aF9jbGVhci0+cmIzZF96c3RlbmNpbGNudGw7CiAKIAkJcmIzZF9jbnRsID0gZGVwdGhfY2xlYXItPnJiM2RfY250bDsKIAotCQlpZiAoIGZsYWdzICYgUkFERU9OX0RFUFRIICkgewotCQkJcmIzZF9jbnRsIHw9ICBSQURFT05fWl9FTkFCTEU7CisJCWlmIChmbGFncyAmIFJBREVPTl9ERVBUSCkgeworCQkJcmIzZF9jbnRsIHw9IFJBREVPTl9aX0VOQUJMRTsKIAkJfSBlbHNlIHsKIAkJCXJiM2RfY250bCAmPSB+UkFERU9OX1pfRU5BQkxFOwogCQl9CiAKLQkJaWYgKCBmbGFncyAmIFJBREVPTl9TVEVOQ0lMICkgewotCQkJcmIzZF9jbnRsIHw9ICBSQURFT05fU1RFTkNJTF9FTkFCTEU7Ci0JCQlyYjNkX3N0ZW5jaWxyZWZtYXNrID0gY2xlYXItPmRlcHRoX21hc2s7IC8qIG1pc25hbWVkIGZpZWxkICovCisJCWlmIChmbGFncyAmIFJBREVPTl9TVEVOQ0lMKSB7CisJCQlyYjNkX2NudGwgfD0gUkFERU9OX1NURU5DSUxfRU5BQkxFOworCQkJcmIzZF9zdGVuY2lscmVmbWFzayA9IGNsZWFyLT5kZXB0aF9tYXNrOwkvKiBtaXNuYW1lZCBmaWVsZCAqLwogCQl9IGVsc2UgewogCQkJcmIzZF9jbnRsICY9IH5SQURFT05fU1RFTkNJTF9FTkFCTEU7CiAJCQlyYjNkX3N0ZW5jaWxyZWZtYXNrID0gMHgwMDAwMDAwMDsKQEAgLTExMDAsNjYgKzExMzEsNjEgQEAKIAogCQlpZiAoZmxhZ3MgJiBSQURFT05fVVNFX0NPTVBfWkJVRikgewogCQkJdGVtcFJCM0RfWlNURU5DSUxDTlRMIHw9IFJBREVPTl9aX0NPTVBSRVNTSU9OX0VOQUJMRSB8Ci0JCQkJUkFERU9OX1pfREVDT01QUkVTU0lPTl9FTkFCTEU7CisJCQkgICAgUkFERU9OX1pfREVDT01QUkVTU0lPTl9FTkFCTEU7CiAJCX0KIAkJaWYgKGZsYWdzICYgUkFERU9OX1VTRV9ISUVSWikgewogCQkJdGVtcFJCM0RfWlNURU5DSUxDTlRMIHw9IFJBREVPTl9aX0hJRVJBUkNIWV9FTkFCTEU7CiAJCX0KIAotCQlCRUdJTl9SSU5HKCAxMyApOworCQlCRUdJTl9SSU5HKDEzKTsKIAkJUkFERU9OX1dBSVRfVU5USUxfMkRfSURMRSgpOwogCi0JCU9VVF9SSU5HKCBDUF9QQUNLRVQwKCBSQURFT05fUFBfQ05UTCwgMSApICk7Ci0JCU9VVF9SSU5HKCAweDAwMDAwMDAwICk7Ci0JCU9VVF9SSU5HKCByYjNkX2NudGwgKTsKLQkJCi0JCU9VVF9SSU5HX1JFRyggUkFERU9OX1JCM0RfWlNURU5DSUxDTlRMLCB0ZW1wUkIzRF9aU1RFTkNJTENOVEwgKTsKLQkJT1VUX1JJTkdfUkVHKCBSQURFT05fUkIzRF9TVEVOQ0lMUkVGTUFTSywKLQkJCSAgICAgIHJiM2Rfc3RlbmNpbHJlZm1hc2sgKTsKLQkJT1VUX1JJTkdfUkVHKCBSQURFT05fUkIzRF9QTEFORU1BU0ssCi0JCQkgICAgICAweDAwMDAwMDAwICk7Ci0JCU9VVF9SSU5HX1JFRyggUkFERU9OX1NFX0NOVEwsCi0JCQkgICAgICBkZXB0aF9jbGVhci0+c2VfY250bCApOworCQlPVVRfUklORyhDUF9QQUNLRVQwKFJBREVPTl9QUF9DTlRMLCAxKSk7CisJCU9VVF9SSU5HKDB4MDAwMDAwMDApOworCQlPVVRfUklORyhyYjNkX2NudGwpOworCisJCU9VVF9SSU5HX1JFRyhSQURFT05fUkIzRF9aU1RFTkNJTENOVEwsIHRlbXBSQjNEX1pTVEVOQ0lMQ05UTCk7CisJCU9VVF9SSU5HX1JFRyhSQURFT05fUkIzRF9TVEVOQ0lMUkVGTUFTSywgcmIzZF9zdGVuY2lscmVmbWFzayk7CisJCU9VVF9SSU5HX1JFRyhSQURFT05fUkIzRF9QTEFORU1BU0ssIDB4MDAwMDAwMDApOworCQlPVVRfUklOR19SRUcoUkFERU9OX1NFX0NOVEwsIGRlcHRoX2NsZWFyLT5zZV9jbnRsKTsKIAkJQURWQU5DRV9SSU5HKCk7CiAKIAkJLyogTWFrZSBzdXJlIHdlIHJlc3RvcmUgdGhlIDNEIHN0YXRlIG5leHQgdGltZS4KIAkJICovCiAJCWRldl9wcml2LT5zYXJlYV9wcml2LT5jdHhfb3duZXIgPSAwOwogCi0JCWZvciAoIGkgPSAwIDsgaSA8IG5ib3ggOyBpKysgKSB7Ci0JCQkKLQkJCS8qIEZ1bm55IHRoYXQgdGhpcyBzaG91bGQgYmUgcmVxdWlyZWQgLS0gCisJCWZvciAoaSA9IDA7IGkgPCBuYm94OyBpKyspIHsKKworCQkJLyogRnVubnkgdGhhdCB0aGlzIHNob3VsZCBiZSByZXF1aXJlZCAtLQogCQkJICogIHNldHMgdG9wLWxlZnQ/CiAJCQkgKi8KLQkJCXJhZGVvbl9lbWl0X2NsaXBfcmVjdCggZGV2X3ByaXYsCi0JCQkJCSAgICAgICAmc2FyZWFfcHJpdi0+Ym94ZXNbaV0gKTsKKwkJCXJhZGVvbl9lbWl0X2NsaXBfcmVjdChkZXZfcHJpdiwgJnNhcmVhX3ByaXYtPmJveGVzW2ldKTsKIAotCQkJQkVHSU5fUklORyggMTUgKTsKKwkJCUJFR0lOX1JJTkcoMTUpOwogCi0JCQlPVVRfUklORyggQ1BfUEFDS0VUMyggUkFERU9OXzNEX0RSQVdfSU1NRCwgMTMgKSApOwotCQkJT1VUX1JJTkcoIFJBREVPTl9WVFhfWl9QUkVTRU5UIHwKLQkJCQkgIFJBREVPTl9WVFhfUEtDT0xPUl9QUkVTRU5UKTsKLQkJCU9VVF9SSU5HKCAoUkFERU9OX1BSSU1fVFlQRV9SRUNUX0xJU1QgfAotCQkJCSAgIFJBREVPTl9QUklNX1dBTEtfUklORyB8Ci0JCQkJICAgUkFERU9OX01BT1NfRU5BQkxFIHwKLQkJCQkgICBSQURFT05fVlRYX0ZNVF9SQURFT05fTU9ERSB8Ci0JCQkJICAgKDMgPDwgUkFERU9OX05VTV9WRVJUSUNFU19TSElGVCkpICk7CisJCQlPVVRfUklORyhDUF9QQUNLRVQzKFJBREVPTl8zRF9EUkFXX0lNTUQsIDEzKSk7CisJCQlPVVRfUklORyhSQURFT05fVlRYX1pfUFJFU0VOVCB8CisJCQkJIFJBREVPTl9WVFhfUEtDT0xPUl9QUkVTRU5UKTsKKwkJCU9VVF9SSU5HKChSQURFT05fUFJJTV9UWVBFX1JFQ1RfTElTVCB8CisJCQkJICBSQURFT05fUFJJTV9XQUxLX1JJTkcgfAorCQkJCSAgUkFERU9OX01BT1NfRU5BQkxFIHwKKwkJCQkgIFJBREVPTl9WVFhfRk1UX1JBREVPTl9NT0RFIHwKKwkJCQkgICgzIDw8IFJBREVPTl9OVU1fVkVSVElDRVNfU0hJRlQpKSk7CiAKKwkJCU9VVF9SSU5HKGRlcHRoX2JveGVzW2ldLnVpW0NMRUFSX1gxXSk7CisJCQlPVVRfUklORyhkZXB0aF9ib3hlc1tpXS51aVtDTEVBUl9ZMV0pOworCQkJT1VUX1JJTkcoZGVwdGhfYm94ZXNbaV0udWlbQ0xFQVJfREVQVEhdKTsKKwkJCU9VVF9SSU5HKDB4MCk7CiAKLQkJCU9VVF9SSU5HKCBkZXB0aF9ib3hlc1tpXS51aVtDTEVBUl9YMV0gKTsKLQkJCU9VVF9SSU5HKCBkZXB0aF9ib3hlc1tpXS51aVtDTEVBUl9ZMV0gKTsKLQkJCU9VVF9SSU5HKCBkZXB0aF9ib3hlc1tpXS51aVtDTEVBUl9ERVBUSF0gKTsKLQkJCU9VVF9SSU5HKCAweDAgKTsKKwkJCU9VVF9SSU5HKGRlcHRoX2JveGVzW2ldLnVpW0NMRUFSX1gxXSk7CisJCQlPVVRfUklORyhkZXB0aF9ib3hlc1tpXS51aVtDTEVBUl9ZMl0pOworCQkJT1VUX1JJTkcoZGVwdGhfYm94ZXNbaV0udWlbQ0xFQVJfREVQVEhdKTsKKwkJCU9VVF9SSU5HKDB4MCk7CiAKLQkJCU9VVF9SSU5HKCBkZXB0aF9ib3hlc1tpXS51aVtDTEVBUl9YMV0gKTsKLQkJCU9VVF9SSU5HKCBkZXB0aF9ib3hlc1tpXS51aVtDTEVBUl9ZMl0gKTsKLQkJCU9VVF9SSU5HKCBkZXB0aF9ib3hlc1tpXS51aVtDTEVBUl9ERVBUSF0gKTsKLQkJCU9VVF9SSU5HKCAweDAgKTsKLQotCQkJT1VUX1JJTkcoIGRlcHRoX2JveGVzW2ldLnVpW0NMRUFSX1gyXSApOwotCQkJT1VUX1JJTkcoIGRlcHRoX2JveGVzW2ldLnVpW0NMRUFSX1kyXSApOwotCQkJT1VUX1JJTkcoIGRlcHRoX2JveGVzW2ldLnVpW0NMRUFSX0RFUFRIXSApOwotCQkJT1VUX1JJTkcoIDB4MCApOworCQkJT1VUX1JJTkcoZGVwdGhfYm94ZXNbaV0udWlbQ0xFQVJfWDJdKTsKKwkJCU9VVF9SSU5HKGRlcHRoX2JveGVzW2ldLnVpW0NMRUFSX1kyXSk7CisJCQlPVVRfUklORyhkZXB0aF9ib3hlc1tpXS51aVtDTEVBUl9ERVBUSF0pOworCQkJT1VUX1JJTkcoMHgwKTsKIAogCQkJQURWQU5DRV9SSU5HKCk7CiAJCX0KQEAgLTExNzEsMTUgKzExOTcsMTUgQEAKIAkgKi8KIAlkZXZfcHJpdi0+c2FyZWFfcHJpdi0+bGFzdF9jbGVhcisrOwogCi0JQkVHSU5fUklORyggNCApOworCUJFR0lOX1JJTkcoNCk7CiAKLQlSQURFT05fQ0xFQVJfQUdFKCBkZXZfcHJpdi0+c2FyZWFfcHJpdi0+bGFzdF9jbGVhciApOworCVJBREVPTl9DTEVBUl9BR0UoZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfY2xlYXIpOwogCVJBREVPTl9XQUlUX1VOVElMX0lETEUoKTsKIAogCUFEVkFOQ0VfUklORygpOwogfQogCi1zdGF0aWMgdm9pZCByYWRlb25fY3BfZGlzcGF0Y2hfc3dhcCggZHJtX2RldmljZV90ICpkZXYgKQorc3RhdGljIHZvaWQgcmFkZW9uX2NwX2Rpc3BhdGNoX3N3YXAoZHJtX2RldmljZV90ICogZGV2KQogewogCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJZHJtX3JhZGVvbl9zYXJlYV90ICpzYXJlYV9wcml2ID0gZGV2X3ByaXYtPnNhcmVhX3ByaXY7CkBAIC0xMTg3LDU5ICsxMjEzLDU1IEBACiAJZHJtX2NsaXBfcmVjdF90ICpwYm94ID0gc2FyZWFfcHJpdi0+Ym94ZXM7CiAJaW50IGk7CiAJUklOR19MT0NBTFM7Ci0JRFJNX0RFQlVHKCAiXG4iICk7CisJRFJNX0RFQlVHKCJcbiIpOwogCiAJLyogRG8gc29tZSB0cml2aWFsIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcuLi4KIAkgKi8KIAlpZiAoZGV2X3ByaXYtPmRvX2JveGVzKQotCQlyYWRlb25fY3BfcGVyZm9ybWFuY2VfYm94ZXMoIGRldl9wcml2ICk7Ci0KKwkJcmFkZW9uX2NwX3BlcmZvcm1hbmNlX2JveGVzKGRldl9wcml2KTsKIAogCS8qIFdhaXQgZm9yIHRoZSAzRCBzdHJlYW0gdG8gaWRsZSBiZWZvcmUgZGlzcGF0Y2hpbmcgdGhlIGJpdGJsdC4KIAkgKiBUaGlzIHdpbGwgcHJldmVudCBkYXRhIGNvcnJ1cHRpb24gYmV0d2VlbiB0aGUgdHdvIHN0cmVhbXMuCiAJICovCi0JQkVHSU5fUklORyggMiApOworCUJFR0lOX1JJTkcoMik7CiAKIAlSQURFT05fV0FJVF9VTlRJTF8zRF9JRExFKCk7CiAKIAlBRFZBTkNFX1JJTkcoKTsKIAotCWZvciAoIGkgPSAwIDsgaSA8IG5ib3ggOyBpKysgKSB7CisJZm9yIChpID0gMDsgaSA8IG5ib3g7IGkrKykgewogCQlpbnQgeCA9IHBib3hbaV0ueDE7CiAJCWludCB5ID0gcGJveFtpXS55MTsKIAkJaW50IHcgPSBwYm94W2ldLngyIC0geDsKIAkJaW50IGggPSBwYm94W2ldLnkyIC0geTsKIAotCQlEUk1fREVCVUcoICJkaXNwYXRjaCBzd2FwICVkLCVkLSVkLCVkXG4iLAotCQkJICAgeCwgeSwgdywgaCApOworCQlEUk1fREVCVUcoImRpc3BhdGNoIHN3YXAgJWQsJWQtJWQsJWRcbiIsIHgsIHksIHcsIGgpOwogCi0JCUJFR0lOX1JJTkcoIDcgKTsKKwkJQkVHSU5fUklORyg3KTsKIAotCQlPVVRfUklORyggQ1BfUEFDS0VUMyggUkFERU9OX0NOVExfQklUQkxUX01VTFRJLCA1ICkgKTsKLQkJT1VUX1JJTkcoIFJBREVPTl9HTUNfU1JDX1BJVENIX09GRlNFVF9DTlRMIHwKLQkJCSAgUkFERU9OX0dNQ19EU1RfUElUQ0hfT0ZGU0VUX0NOVEwgfAotCQkJICBSQURFT05fR01DX0JSVVNIX05PTkUgfAotCQkJICAoZGV2X3ByaXYtPmNvbG9yX2ZtdCA8PCA4KSB8Ci0JCQkgIFJBREVPTl9HTUNfU1JDX0RBVEFUWVBFX0NPTE9SIHwKLQkJCSAgUkFERU9OX1JPUDNfUyB8Ci0JCQkgIFJBREVPTl9EUF9TUkNfU09VUkNFX01FTU9SWSB8Ci0JCQkgIFJBREVPTl9HTUNfQ0xSX0NNUF9DTlRMX0RJUyB8Ci0JCQkgIFJBREVPTl9HTUNfV1JfTVNLX0RJUyApOwotCQkKKwkJT1VUX1JJTkcoQ1BfUEFDS0VUMyhSQURFT05fQ05UTF9CSVRCTFRfTVVMVEksIDUpKTsKKwkJT1VUX1JJTkcoUkFERU9OX0dNQ19TUkNfUElUQ0hfT0ZGU0VUX0NOVEwgfAorCQkJIFJBREVPTl9HTUNfRFNUX1BJVENIX09GRlNFVF9DTlRMIHwKKwkJCSBSQURFT05fR01DX0JSVVNIX05PTkUgfAorCQkJIChkZXZfcHJpdi0+Y29sb3JfZm10IDw8IDgpIHwKKwkJCSBSQURFT05fR01DX1NSQ19EQVRBVFlQRV9DT0xPUiB8CisJCQkgUkFERU9OX1JPUDNfUyB8CisJCQkgUkFERU9OX0RQX1NSQ19TT1VSQ0VfTUVNT1JZIHwKKwkJCSBSQURFT05fR01DX0NMUl9DTVBfQ05UTF9ESVMgfCBSQURFT05fR01DX1dSX01TS19ESVMpOworCiAJCS8qIE1ha2UgdGhpcyB3b3JrIGV2ZW4gaWYgZnJvbnQgJiBiYWNrIGFyZSBmbGlwcGVkOgogCQkgKi8KIAkJaWYgKGRldl9wcml2LT5jdXJyZW50X3BhZ2UgPT0gMCkgewotCQkJT1VUX1JJTkcoIGRldl9wcml2LT5iYWNrX3BpdGNoX29mZnNldCApOwotCQkJT1VUX1JJTkcoIGRldl9wcml2LT5mcm9udF9waXRjaF9vZmZzZXQgKTsKLQkJfSAKLQkJZWxzZSB7Ci0JCQlPVVRfUklORyggZGV2X3ByaXYtPmZyb250X3BpdGNoX29mZnNldCApOwotCQkJT1VUX1JJTkcoIGRldl9wcml2LT5iYWNrX3BpdGNoX29mZnNldCApOworCQkJT1VUX1JJTkcoZGV2X3ByaXYtPmJhY2tfcGl0Y2hfb2Zmc2V0KTsKKwkJCU9VVF9SSU5HKGRldl9wcml2LT5mcm9udF9waXRjaF9vZmZzZXQpOworCQl9IGVsc2UgeworCQkJT1VUX1JJTkcoZGV2X3ByaXYtPmZyb250X3BpdGNoX29mZnNldCk7CisJCQlPVVRfUklORyhkZXZfcHJpdi0+YmFja19waXRjaF9vZmZzZXQpOwogCQl9CiAKLQkJT1VUX1JJTkcoICh4IDw8IDE2KSB8IHkgKTsKLQkJT1VUX1JJTkcoICh4IDw8IDE2KSB8IHkgKTsKLQkJT1VUX1JJTkcoICh3IDw8IDE2KSB8IGggKTsKKwkJT1VUX1JJTkcoKHggPDwgMTYpIHwgeSk7CisJCU9VVF9SSU5HKCh4IDw8IDE2KSB8IHkpOworCQlPVVRfUklORygodyA8PCAxNikgfCBoKTsKIAogCQlBRFZBTkNFX1JJTkcoKTsKIAl9CkBAIC0xMjUwLDQ0ICsxMjcyLDQzIEBACiAJICovCiAJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZnJhbWUrKzsKIAotCUJFR0lOX1JJTkcoIDQgKTsKKwlCRUdJTl9SSU5HKDQpOwogCi0JUkFERU9OX0ZSQU1FX0FHRSggZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZnJhbWUgKTsKKwlSQURFT05fRlJBTUVfQUdFKGRldl9wcml2LT5zYXJlYV9wcml2LT5sYXN0X2ZyYW1lKTsKIAlSQURFT05fV0FJVF9VTlRJTF8yRF9JRExFKCk7CiAKIAlBRFZBTkNFX1JJTkcoKTsKIH0KIAotc3RhdGljIHZvaWQgcmFkZW9uX2NwX2Rpc3BhdGNoX2ZsaXAoIGRybV9kZXZpY2VfdCAqZGV2ICkKK3N0YXRpYyB2b2lkIHJhZGVvbl9jcF9kaXNwYXRjaF9mbGlwKGRybV9kZXZpY2VfdCAqIGRldikKIHsKIAlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCWRybV9zYXJlYV90ICpzYXJlYSA9IChkcm1fc2FyZWFfdCAqKWRldl9wcml2LT5zYXJlYS0+aGFuZGxlOworCWRybV9zYXJlYV90ICpzYXJlYSA9IChkcm1fc2FyZWFfdCAqKSBkZXZfcHJpdi0+c2FyZWEtPmhhbmRsZTsKIAlpbnQgb2Zmc2V0ID0gKGRldl9wcml2LT5jdXJyZW50X3BhZ2UgPT0gMSkKLQkJICAgPyBkZXZfcHJpdi0+ZnJvbnRfb2Zmc2V0IDogZGV2X3ByaXYtPmJhY2tfb2Zmc2V0OworCSAgICA/IGRldl9wcml2LT5mcm9udF9vZmZzZXQgOiBkZXZfcHJpdi0+YmFja19vZmZzZXQ7CiAJUklOR19MT0NBTFM7Ci0JRFJNX0RFQlVHKCAiJXM6IHBhZ2U9JWQgcGZDdXJyZW50UGFnZT0lZFxuIiwgCi0JCV9fRlVOQ1RJT05fXywgCi0JCWRldl9wcml2LT5jdXJyZW50X3BhZ2UsCi0JCWRldl9wcml2LT5zYXJlYV9wcml2LT5wZkN1cnJlbnRQYWdlKTsKKwlEUk1fREVCVUcoIiVzOiBwYWdlPSVkIHBmQ3VycmVudFBhZ2U9JWRcbiIsCisJCSAgX19GVU5DVElPTl9fLAorCQkgIGRldl9wcml2LT5jdXJyZW50X3BhZ2UsIGRldl9wcml2LT5zYXJlYV9wcml2LT5wZkN1cnJlbnRQYWdlKTsKIAogCS8qIERvIHNvbWUgdHJpdmlhbCBwZXJmb3JtYW5jZSBtb25pdG9yaW5nLi4uCiAJICovCiAJaWYgKGRldl9wcml2LT5kb19ib3hlcykgewogCQlkZXZfcHJpdi0+c3RhdHMuYm94ZXMgfD0gUkFERU9OX0JPWF9GTElQOwotCQlyYWRlb25fY3BfcGVyZm9ybWFuY2VfYm94ZXMoIGRldl9wcml2ICk7CisJCXJhZGVvbl9jcF9wZXJmb3JtYW5jZV9ib3hlcyhkZXZfcHJpdik7CiAJfQogCiAJLyogVXBkYXRlIHRoZSBmcmFtZSBvZmZzZXRzIGZvciBib3RoIENSVENzCiAJICovCi0JQkVHSU5fUklORyggNiApOworCUJFR0lOX1JJTkcoNik7CiAKIAlSQURFT05fV0FJVF9VTlRJTF8zRF9JRExFKCk7Ci0JT1VUX1JJTkdfUkVHKCBSQURFT05fQ1JUQ19PRkZTRVQsICggKCBzYXJlYS0+ZnJhbWUueSAqIGRldl9wcml2LT5mcm9udF9waXRjaAotCQkJCQkgICAgICArIHNhcmVhLT5mcmFtZS54IAotCQkJCQkgICAgICAqICggZGV2X3ByaXYtPmNvbG9yX2ZtdCAtIDIgKSApICYgfjcgKQotCQkJCQkgICsgb2Zmc2V0ICk7Ci0JT1VUX1JJTkdfUkVHKCBSQURFT05fQ1JUQzJfT0ZGU0VULCBkZXZfcHJpdi0+c2FyZWFfcHJpdi0+Y3J0YzJfYmFzZQotCQkJCQkgICArIG9mZnNldCApOworCU9VVF9SSU5HX1JFRyhSQURFT05fQ1JUQ19PRkZTRVQsCisJCSAgICAgKChzYXJlYS0+ZnJhbWUueSAqIGRldl9wcml2LT5mcm9udF9waXRjaCArCisJCSAgICAgICBzYXJlYS0+ZnJhbWUueCAqIChkZXZfcHJpdi0+Y29sb3JfZm10IC0gMikpICYgfjcpCisJCSAgICAgKyBvZmZzZXQpOworCU9VVF9SSU5HX1JFRyhSQURFT05fQ1JUQzJfT0ZGU0VULCBkZXZfcHJpdi0+c2FyZWFfcHJpdi0+Y3J0YzJfYmFzZQorCQkgICAgICsgb2Zmc2V0KTsKIAogCUFEVkFOQ0VfUklORygpOwogCkBAIC0xMjk3LDE2ICsxMzE4LDE2IEBACiAJICovCiAJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZnJhbWUrKzsKIAlkZXZfcHJpdi0+c2FyZWFfcHJpdi0+cGZDdXJyZW50UGFnZSA9IGRldl9wcml2LT5jdXJyZW50X3BhZ2UgPQotCQkJCQkgICAgICAxIC0gZGV2X3ByaXYtPmN1cnJlbnRfcGFnZTsKKwkgICAgMSAtIGRldl9wcml2LT5jdXJyZW50X3BhZ2U7CiAKLQlCRUdJTl9SSU5HKCAyICk7CisJQkVHSU5fUklORygyKTsKIAotCVJBREVPTl9GUkFNRV9BR0UoIGRldl9wcml2LT5zYXJlYV9wcml2LT5sYXN0X2ZyYW1lICk7CisJUkFERU9OX0ZSQU1FX0FHRShkZXZfcHJpdi0+c2FyZWFfcHJpdi0+bGFzdF9mcmFtZSk7CiAKIAlBRFZBTkNFX1JJTkcoKTsKIH0KIAotc3RhdGljIGludCBiYWRfcHJpbV92ZXJ0ZXhfbnIoIGludCBwcmltaXRpdmUsIGludCBuciApCitzdGF0aWMgaW50IGJhZF9wcmltX3ZlcnRleF9ucihpbnQgcHJpbWl0aXZlLCBpbnQgbnIpCiB7CiAJc3dpdGNoIChwcmltaXRpdmUgJiBSQURFT05fUFJJTV9UWVBFX01BU0spIHsKIAljYXNlIFJBREVPTl9QUklNX1RZUEVfTk9ORToKQEAgLTEzMjYsMjQgKzEzNDcsMjEgQEAKIAkJcmV0dXJuIG5yIDwgMzsKIAlkZWZhdWx0OgogCQlyZXR1cm4gMTsKLQl9CQorCX0KIH0KIAotCi0KIHR5cGVkZWYgc3RydWN0IHsKIAl1bnNpZ25lZCBpbnQgc3RhcnQ7CiAJdW5zaWduZWQgaW50IGZpbmlzaDsKIAl1bnNpZ25lZCBpbnQgcHJpbTsKIAl1bnNpZ25lZCBpbnQgbnVtdmVydHM7Ci0JdW5zaWduZWQgaW50IG9mZnNldDsgICAKLSAgICAgICAgdW5zaWduZWQgaW50IHZjX2Zvcm1hdDsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0OworCXVuc2lnbmVkIGludCB2Y19mb3JtYXQ7CiB9IGRybV9yYWRlb25fdGNsX3ByaW1fdDsKIAotc3RhdGljIHZvaWQgcmFkZW9uX2NwX2Rpc3BhdGNoX3ZlcnRleCggZHJtX2RldmljZV90ICpkZXYsCi0JCQkJICAgICAgIGRybV9idWZfdCAqYnVmLAotCQkJCSAgICAgICBkcm1fcmFkZW9uX3RjbF9wcmltX3QgKnByaW0gKQotCitzdGF0aWMgdm9pZCByYWRlb25fY3BfZGlzcGF0Y2hfdmVydGV4KGRybV9kZXZpY2VfdCAqIGRldiwKKwkJCQkgICAgICBkcm1fYnVmX3QgKiBidWYsCisJCQkJICAgICAgZHJtX3JhZGVvbl90Y2xfcHJpbV90ICogcHJpbSkKIHsKIAlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWRybV9yYWRlb25fc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9wcml2OwpAQCAtMTM1NSw0NSArMTM3MywzOSBAQAogCiAJRFJNX0RFQlVHKCJod3ByaW0gMHgleCB2Zm10IDB4JXggJWQuLiVkICVkIHZlcnRzXG4iLAogCQkgIHByaW0tPnByaW0sCi0JCSAgcHJpbS0+dmNfZm9ybWF0LAotCQkgIHByaW0tPnN0YXJ0LAotCQkgIHByaW0tPmZpbmlzaCwKLQkJICBwcmltLT5udW12ZXJ0cyk7CisJCSAgcHJpbS0+dmNfZm9ybWF0LCBwcmltLT5zdGFydCwgcHJpbS0+ZmluaXNoLCBwcmltLT5udW12ZXJ0cyk7CiAKLQlpZiAoYmFkX3ByaW1fdmVydGV4X25yKCBwcmltLT5wcmltLCBwcmltLT5udW12ZXJ0cyApKSB7Ci0JCURSTV9FUlJPUiggImJhZCBwcmltICV4IG51bXZlcnRzICVkXG4iLCAKLQkJCSAgIHByaW0tPnByaW0sIHByaW0tPm51bXZlcnRzICk7CisJaWYgKGJhZF9wcmltX3ZlcnRleF9ucihwcmltLT5wcmltLCBwcmltLT5udW12ZXJ0cykpIHsKKwkJRFJNX0VSUk9SKCJiYWQgcHJpbSAleCBudW12ZXJ0cyAlZFxuIiwKKwkJCSAgcHJpbS0+cHJpbSwgcHJpbS0+bnVtdmVydHMpOwogCQlyZXR1cm47CiAJfQogCiAJZG8gewogCQkvKiBFbWl0IHRoZSBuZXh0IGNsaXByZWN0ICovCi0JCWlmICggaSA8IG5ib3ggKSB7Ci0JCQlyYWRlb25fZW1pdF9jbGlwX3JlY3QoIGRldl9wcml2LCAKLQkJCQkJICAgICAgICZzYXJlYV9wcml2LT5ib3hlc1tpXSApOworCQlpZiAoaSA8IG5ib3gpIHsKKwkJCXJhZGVvbl9lbWl0X2NsaXBfcmVjdChkZXZfcHJpdiwgJnNhcmVhX3ByaXYtPmJveGVzW2ldKTsKIAkJfQogCiAJCS8qIEVtaXQgdGhlIHZlcnRleCBidWZmZXIgcmVuZGVyaW5nIGNvbW1hbmRzICovCi0JCUJFR0lOX1JJTkcoIDUgKTsKKwkJQkVHSU5fUklORyg1KTsKIAotCQlPVVRfUklORyggQ1BfUEFDS0VUMyggUkFERU9OXzNEX1JORFJfR0VOX0lORFhfUFJJTSwgMyApICk7Ci0JCU9VVF9SSU5HKCBvZmZzZXQgKTsKLQkJT1VUX1JJTkcoIG51bXZlcnRzICk7Ci0JCU9VVF9SSU5HKCBwcmltLT52Y19mb3JtYXQgKTsKLQkJT1VUX1JJTkcoIHByaW0tPnByaW0gfCBSQURFT05fUFJJTV9XQUxLX0xJU1QgfAotCQkJICBSQURFT05fQ09MT1JfT1JERVJfUkdCQSB8Ci0JCQkgIFJBREVPTl9WVFhfRk1UX1JBREVPTl9NT0RFIHwKLQkJCSAgKG51bXZlcnRzIDw8IFJBREVPTl9OVU1fVkVSVElDRVNfU0hJRlQpICk7CisJCU9VVF9SSU5HKENQX1BBQ0tFVDMoUkFERU9OXzNEX1JORFJfR0VOX0lORFhfUFJJTSwgMykpOworCQlPVVRfUklORyhvZmZzZXQpOworCQlPVVRfUklORyhudW12ZXJ0cyk7CisJCU9VVF9SSU5HKHByaW0tPnZjX2Zvcm1hdCk7CisJCU9VVF9SSU5HKHByaW0tPnByaW0gfCBSQURFT05fUFJJTV9XQUxLX0xJU1QgfAorCQkJIFJBREVPTl9DT0xPUl9PUkRFUl9SR0JBIHwKKwkJCSBSQURFT05fVlRYX0ZNVF9SQURFT05fTU9ERSB8CisJCQkgKG51bXZlcnRzIDw8IFJBREVPTl9OVU1fVkVSVElDRVNfU0hJRlQpKTsKIAogCQlBRFZBTkNFX1JJTkcoKTsKIAogCQlpKys7Ci0JfSB3aGlsZSAoIGkgPCBuYm94ICk7CisJfSB3aGlsZSAoaSA8IG5ib3gpOwogfQogCi0KLQotc3RhdGljIHZvaWQgcmFkZW9uX2NwX2Rpc2NhcmRfYnVmZmVyKCBkcm1fZGV2aWNlX3QgKmRldiwgZHJtX2J1Zl90ICpidWYgKQorc3RhdGljIHZvaWQgcmFkZW9uX2NwX2Rpc2NhcmRfYnVmZmVyKGRybV9kZXZpY2VfdCAqIGRldiwgZHJtX2J1Zl90ICogYnVmKQogewogCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJZHJtX3JhZGVvbl9idWZfcHJpdl90ICpidWZfcHJpdiA9IGJ1Zi0+ZGV2X3ByaXZhdGU7CkBAIC0xNDAyLDI0ICsxNDE0LDIyIEBACiAJYnVmX3ByaXYtPmFnZSA9ICsrZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZGlzcGF0Y2g7CiAKIAkvKiBFbWl0IHRoZSB2ZXJ0ZXggYnVmZmVyIGFnZSAqLwotCUJFR0lOX1JJTkcoIDIgKTsKLQlSQURFT05fRElTUEFUQ0hfQUdFKCBidWZfcHJpdi0+YWdlICk7CisJQkVHSU5fUklORygyKTsKKwlSQURFT05fRElTUEFUQ0hfQUdFKGJ1Zl9wcml2LT5hZ2UpOwogCUFEVkFOQ0VfUklORygpOwogCiAJYnVmLT5wZW5kaW5nID0gMTsKIAlidWYtPnVzZWQgPSAwOwogfQogCi1zdGF0aWMgdm9pZCByYWRlb25fY3BfZGlzcGF0Y2hfaW5kaXJlY3QoIGRybV9kZXZpY2VfdCAqZGV2LAotCQkJCQkgZHJtX2J1Zl90ICpidWYsCi0JCQkJCSBpbnQgc3RhcnQsIGludCBlbmQgKQorc3RhdGljIHZvaWQgcmFkZW9uX2NwX2Rpc3BhdGNoX2luZGlyZWN0KGRybV9kZXZpY2VfdCAqIGRldiwKKwkJCQkJZHJtX2J1Zl90ICogYnVmLCBpbnQgc3RhcnQsIGludCBlbmQpCiB7CiAJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlSSU5HX0xPQ0FMUzsKLQlEUk1fREVCVUcoICJpbmRpcmVjdDogYnVmPSVkIHM9MHgleCBlPTB4JXhcbiIsCi0JCSAgIGJ1Zi0+aWR4LCBzdGFydCwgZW5kICk7CisJRFJNX0RFQlVHKCJpbmRpcmVjdDogYnVmPSVkIHM9MHgleCBlPTB4JXhcbiIsIGJ1Zi0+aWR4LCBzdGFydCwgZW5kKTsKIAotCWlmICggc3RhcnQgIT0gZW5kICkgeworCWlmIChzdGFydCAhPSBlbmQpIHsKIAkJaW50IG9mZnNldCA9IChkZXZfcHJpdi0+Z2FydF9idWZmZXJzX29mZnNldAogCQkJICAgICAgKyBidWYtPm9mZnNldCArIHN0YXJ0KTsKIAkJaW50IGR3b3JkcyA9IChlbmQgLSBzdGFydCArIDMpIC8gc2l6ZW9mKHUzMik7CkBAIC0xNDI4LDI4ICsxNDM4LDI3IEBACiAJCSAqIGR3b3Jkcywgc28gaWYgd2UndmUgYmVlbiBnaXZlbiBhbiBvZGQgbnVtYmVyIHdlIG11c3QKIAkJICogcGFkIHRoZSBkYXRhIHdpdGggYSBUeXBlLTIgQ1AgcGFja2V0LgogCQkgKi8KLQkJaWYgKCBkd29yZHMgJiAxICkgeworCQlpZiAoZHdvcmRzICYgMSkgewogCQkJdTMyICpkYXRhID0gKHUzMiAqKQotCQkJCSgoY2hhciAqKWRldi0+YWdwX2J1ZmZlcl9tYXAtPmhhbmRsZQotCQkJCSArIGJ1Zi0+b2Zmc2V0ICsgc3RhcnQpOworCQkJICAgICgoY2hhciAqKWRldi0+YWdwX2J1ZmZlcl9tYXAtPmhhbmRsZQorCQkJICAgICArIGJ1Zi0+b2Zmc2V0ICsgc3RhcnQpOwogCQkJZGF0YVtkd29yZHMrK10gPSBSQURFT05fQ1BfUEFDS0VUMjsKIAkJfQogCiAJCS8qIEZpcmUgb2ZmIHRoZSBpbmRpcmVjdCBidWZmZXIgKi8KLQkJQkVHSU5fUklORyggMyApOworCQlCRUdJTl9SSU5HKDMpOwogCi0JCU9VVF9SSU5HKCBDUF9QQUNLRVQwKCBSQURFT05fQ1BfSUJfQkFTRSwgMSApICk7Ci0JCU9VVF9SSU5HKCBvZmZzZXQgKTsKLQkJT1VUX1JJTkcoIGR3b3JkcyApOworCQlPVVRfUklORyhDUF9QQUNLRVQwKFJBREVPTl9DUF9JQl9CQVNFLCAxKSk7CisJCU9VVF9SSU5HKG9mZnNldCk7CisJCU9VVF9SSU5HKGR3b3Jkcyk7CiAKIAkJQURWQU5DRV9SSU5HKCk7CiAJfQogfQogCi0KLXN0YXRpYyB2b2lkIHJhZGVvbl9jcF9kaXNwYXRjaF9pbmRpY2VzKCBkcm1fZGV2aWNlX3QgKmRldiwKLQkJCQkJZHJtX2J1Zl90ICplbHRfYnVmLAotCQkJCQlkcm1fcmFkZW9uX3RjbF9wcmltX3QgKnByaW0gKQorc3RhdGljIHZvaWQgcmFkZW9uX2NwX2Rpc3BhdGNoX2luZGljZXMoZHJtX2RldmljZV90ICogZGV2LAorCQkJCSAgICAgICBkcm1fYnVmX3QgKiBlbHRfYnVmLAorCQkJCSAgICAgICBkcm1fcmFkZW9uX3RjbF9wcmltX3QgKiBwcmltKQogewogCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJZHJtX3JhZGVvbl9zYXJlYV90ICpzYXJlYV9wcml2ID0gZGV2X3ByaXYtPnNhcmVhX3ByaXY7CkBAIC0xNDY0LDMwICsxNDczLDI0IEBACiAJRFJNX0RFQlVHKCJod3ByaW0gMHgleCB2Zm10IDB4JXggJWQuLiVkIG9mZnNldDogJXggbnIgJWRcbiIsCiAJCSAgcHJpbS0+cHJpbSwKIAkJICBwcmltLT52Y19mb3JtYXQsCi0JCSAgcHJpbS0+c3RhcnQsCi0JCSAgcHJpbS0+ZmluaXNoLAotCQkgIHByaW0tPm9mZnNldCwKLQkJICBwcmltLT5udW12ZXJ0cyk7CisJCSAgcHJpbS0+c3RhcnQsIHByaW0tPmZpbmlzaCwgcHJpbS0+b2Zmc2V0LCBwcmltLT5udW12ZXJ0cyk7CiAKLQlpZiAoYmFkX3ByaW1fdmVydGV4X25yKCBwcmltLT5wcmltLCBjb3VudCApKSB7Ci0JCURSTV9FUlJPUiggImJhZCBwcmltICV4IGNvdW50ICVkXG4iLCAKLQkJCSAgIHByaW0tPnByaW0sIGNvdW50ICk7CisJaWYgKGJhZF9wcmltX3ZlcnRleF9ucihwcmltLT5wcmltLCBjb3VudCkpIHsKKwkJRFJNX0VSUk9SKCJiYWQgcHJpbSAleCBjb3VudCAlZFxuIiwgcHJpbS0+cHJpbSwgY291bnQpOwogCQlyZXR1cm47CiAJfQogCi0KLQlpZiAoIHN0YXJ0ID49IHByaW0tPmZpbmlzaCB8fAotCSAgICAgKHByaW0tPnN0YXJ0ICYgMHg3KSApIHsKLQkJRFJNX0VSUk9SKCAiYnVmZmVyIHByaW0gJWRcbiIsIHByaW0tPnByaW0gKTsKKwlpZiAoc3RhcnQgPj0gcHJpbS0+ZmluaXNoIHx8IChwcmltLT5zdGFydCAmIDB4NykpIHsKKwkJRFJNX0VSUk9SKCJidWZmZXIgcHJpbSAlZFxuIiwgcHJpbS0+cHJpbSk7CiAJCXJldHVybjsKIAl9CiAKIAlkd29yZHMgPSAocHJpbS0+ZmluaXNoIC0gcHJpbS0+c3RhcnQgKyAzKSAvIHNpemVvZih1MzIpOwogCi0JZGF0YSA9ICh1MzIgKikoKGNoYXIgKilkZXYtPmFncF9idWZmZXJfbWFwLT5oYW5kbGUgKwotCQkgICAgICAgZWx0X2J1Zi0+b2Zmc2V0ICsgcHJpbS0+c3RhcnQpOworCWRhdGEgPSAodTMyICopICgoY2hhciAqKWRldi0+YWdwX2J1ZmZlcl9tYXAtPmhhbmRsZSArCisJCQllbHRfYnVmLT5vZmZzZXQgKyBwcmltLT5zdGFydCk7CiAKLQlkYXRhWzBdID0gQ1BfUEFDS0VUMyggUkFERU9OXzNEX1JORFJfR0VOX0lORFhfUFJJTSwgZHdvcmRzLTIgKTsKKwlkYXRhWzBdID0gQ1BfUEFDS0VUMyhSQURFT05fM0RfUk5EUl9HRU5fSU5EWF9QUklNLCBkd29yZHMgLSAyKTsKIAlkYXRhWzFdID0gb2Zmc2V0OwogCWRhdGFbMl0gPSBwcmltLT5udW12ZXJ0czsKIAlkYXRhWzNdID0gcHJpbS0+dmNfZm9ybWF0OwpAQCAtMTQ5NSwyOCArMTQ5OCwyNiBAQAogCQkgICBSQURFT05fUFJJTV9XQUxLX0lORCB8CiAJCSAgIFJBREVPTl9DT0xPUl9PUkRFUl9SR0JBIHwKIAkJICAgUkFERU9OX1ZUWF9GTVRfUkFERU9OX01PREUgfAotCQkgICAoY291bnQgPDwgUkFERU9OX05VTV9WRVJUSUNFU19TSElGVCkgKTsKKwkJICAgKGNvdW50IDw8IFJBREVPTl9OVU1fVkVSVElDRVNfU0hJRlQpKTsKIAogCWRvIHsKLQkJaWYgKCBpIDwgbmJveCApIAotCQkJcmFkZW9uX2VtaXRfY2xpcF9yZWN0KCBkZXZfcHJpdiwgCi0JCQkJCSAgICAgICAmc2FyZWFfcHJpdi0+Ym94ZXNbaV0gKTsKKwkJaWYgKGkgPCBuYm94KQorCQkJcmFkZW9uX2VtaXRfY2xpcF9yZWN0KGRldl9wcml2LCAmc2FyZWFfcHJpdi0+Ym94ZXNbaV0pOwogCi0JCXJhZGVvbl9jcF9kaXNwYXRjaF9pbmRpcmVjdCggZGV2LCBlbHRfYnVmLAotCQkJCQkgICAgIHByaW0tPnN0YXJ0LAotCQkJCQkgICAgIHByaW0tPmZpbmlzaCApOworCQlyYWRlb25fY3BfZGlzcGF0Y2hfaW5kaXJlY3QoZGV2LCBlbHRfYnVmLAorCQkJCQkgICAgcHJpbS0+c3RhcnQsIHByaW0tPmZpbmlzaCk7CiAKIAkJaSsrOwotCX0gd2hpbGUgKCBpIDwgbmJveCApOworCX0gd2hpbGUgKGkgPCBuYm94KTsKIAogfQogCiAjZGVmaW5lIFJBREVPTl9NQVhfVEVYVFVSRV9TSVpFIFJBREVPTl9CVUZGRVJfU0laRQogCi1zdGF0aWMgaW50IHJhZGVvbl9jcF9kaXNwYXRjaF90ZXh0dXJlKCBEUk1GSUxFIGZpbHAsCi0JCQkJICAgICAgIGRybV9kZXZpY2VfdCAqZGV2LAotCQkJCSAgICAgICBkcm1fcmFkZW9uX3RleHR1cmVfdCAqdGV4LAotCQkJCSAgICAgICBkcm1fcmFkZW9uX3RleF9pbWFnZV90ICppbWFnZSApCitzdGF0aWMgaW50IHJhZGVvbl9jcF9kaXNwYXRjaF90ZXh0dXJlKERSTUZJTEUgZmlscCwKKwkJCQkgICAgICBkcm1fZGV2aWNlX3QgKiBkZXYsCisJCQkJICAgICAgZHJtX3JhZGVvbl90ZXh0dXJlX3QgKiB0ZXgsCisJCQkJICAgICAgZHJtX3JhZGVvbl90ZXhfaW1hZ2VfdCAqIGltYWdlKQogewogCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJZHJtX2ZpbGVfdCAqZmlscF9wcml2OwpAQCAtMTUzMSwxMSArMTUzMiwxMSBAQAogCXUzMiBvZmZzZXQ7CiAJUklOR19MT0NBTFM7CiAKLQlEUk1fR0VUX1BSSVZfV0lUSF9SRVRVUk4oIGZpbHBfcHJpdiwgZmlscCApOworCURSTV9HRVRfUFJJVl9XSVRIX1JFVFVSTihmaWxwX3ByaXYsIGZpbHApOwogCi0JaWYgKCByYWRlb25fY2hlY2tfYW5kX2ZpeHVwX29mZnNldCggZGV2X3ByaXYsIGZpbHBfcHJpdiwgJnRleC0+b2Zmc2V0ICkgKSB7Ci0JCURSTV9FUlJPUiggIkludmFsaWQgZGVzdGluYXRpb24gb2Zmc2V0XG4iICk7Ci0JCXJldHVybiBEUk1fRVJSKCBFSU5WQUwgKTsKKwlpZiAocmFkZW9uX2NoZWNrX2FuZF9maXh1cF9vZmZzZXQoZGV2X3ByaXYsIGZpbHBfcHJpdiwgJnRleC0+b2Zmc2V0KSkgeworCQlEUk1fRVJST1IoIkludmFsaWQgZGVzdGluYXRpb24gb2Zmc2V0XG4iKTsKKwkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAl9CiAKIAlkZXZfcHJpdi0+c3RhdHMuYm94ZXMgfD0gUkFERU9OX0JPWF9URVhUVVJFX0xPQUQ7CkBAIC0xNTQ0LDcgKzE1NDUsNyBAQAogCSAqIHVwIHdpdGggdGhlIHRleHR1cmUgZGF0YSBmcm9tIHRoZSBob3N0IGRhdGEgYmxpdCwgb3RoZXJ3aXNlCiAJICogcGFydCBvZiB0aGUgdGV4dHVyZSBpbWFnZSBtYXkgYmUgY29ycnVwdGVkLgogCSAqLwotCUJFR0lOX1JJTkcoIDQgKTsKKwlCRUdJTl9SSU5HKDQpOwogCVJBREVPTl9GTFVTSF9DQUNIRSgpOwogCVJBREVPTl9XQUlUX1VOVElMX0lETEUoKTsKIAlBRFZBTkNFX1JJTkcoKTsKQEAgLTE1NTMsNyArMTU1NCw3IEBACiAJICogZXZlbiBpZiB0aGUgb25seSBsZWdhbCB2YWx1ZXMgYXJlIHBvd2VycyBvZiB0d28uICBUaHVzLCB3ZSdsbAogCSAqIHVzZSBhIHNoaWZ0IGluc3RlYWQuCiAJICovCi0Jc3dpdGNoICggdGV4LT5mb3JtYXQgKSB7CisJc3dpdGNoICh0ZXgtPmZvcm1hdCkgewogCWNhc2UgUkFERU9OX1RYRk9STUFUX0FSR0I4ODg4OgogCWNhc2UgUkFERU9OX1RYRk9STUFUX1JHQkE4ODg4OgogCQlmb3JtYXQgPSBSQURFT05fQ09MT1JfRk9STUFUX0FSR0I4ODg4OwpAQCAtMTU3Nyw3ICsxNTc4LDcgQEAKIAkJYmxpdF93aWR0aCA9IGltYWdlLT53aWR0aCAqIDE7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCURSTV9FUlJPUiggImludmFsaWQgdGV4dHVyZSBmb3JtYXQgJWRcbiIsIHRleC0+Zm9ybWF0ICk7CisJCURSTV9FUlJPUigiaW52YWxpZCB0ZXh0dXJlIGZvcm1hdCAlZFxuIiwgdGV4LT5mb3JtYXQpOwogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCX0KIAlzcGl0Y2ggPSBibGl0X3dpZHRoID4+IDY7CkBAIC0xNTkyLDQ5ICsxNTkzLDQ5IEBACiAJCQkvKiB3ZSBnb3QgdGlsZWQgY29vcmRpbmF0ZXMsIHVudGlsZSB0aGVtICovCiAJCQlpbWFnZS0+eCAqPSAyOwogCQl9Ci0JfQotCWVsc2UgbWljcm90aWxlID0gMDsKKwl9IGVsc2UKKwkJbWljcm90aWxlID0gMDsKIAotCURSTV9ERUJVRygidGV4PSVkeCVkIGJsaXQ9JWRcbiIsIHRleF93aWR0aCwgdGV4LT5oZWlnaHQsIGJsaXRfd2lkdGggKTsKKwlEUk1fREVCVUcoInRleD0lZHglZCBibGl0PSVkXG4iLCB0ZXhfd2lkdGgsIHRleC0+aGVpZ2h0LCBibGl0X3dpZHRoKTsKIAogCWRvIHsKLQkJRFJNX0RFQlVHKCAidGV4OiBvZnM9MHgleCBwPSVkIGY9JWQgeD0laGQgeT0laGQgdz0laGQgaD0laGRcbiIsCi0JCQkgICB0ZXgtPm9mZnNldCA+PiAxMCwgdGV4LT5waXRjaCwgdGV4LT5mb3JtYXQsCi0JCQkgICBpbWFnZS0+eCwgaW1hZ2UtPnksIGltYWdlLT53aWR0aCwgaW1hZ2UtPmhlaWdodCApOworCQlEUk1fREVCVUcoInRleDogb2ZzPTB4JXggcD0lZCBmPSVkIHg9JWhkIHk9JWhkIHc9JWhkIGg9JWhkXG4iLAorCQkJICB0ZXgtPm9mZnNldCA+PiAxMCwgdGV4LT5waXRjaCwgdGV4LT5mb3JtYXQsCisJCQkgIGltYWdlLT54LCBpbWFnZS0+eSwgaW1hZ2UtPndpZHRoLCBpbWFnZS0+aGVpZ2h0KTsKIAogCQkvKiBNYWtlIGEgY29weSBvZiBzb21lIHBhcmFtZXRlcnMgaW4gY2FzZSB3ZSBoYXZlIHRvCiAJCSAqIHVwZGF0ZSB0aGVtIGZvciBhIG11bHRpLXBhc3MgdGV4dHVyZSBibGl0LgogCQkgKi8KIAkJaGVpZ2h0ID0gaW1hZ2UtPmhlaWdodDsKIAkJZGF0YSA9IChjb25zdCB1OCBfX3VzZXIgKilpbWFnZS0+ZGF0YTsKLQkJCisKIAkJc2l6ZSA9IGhlaWdodCAqIGJsaXRfd2lkdGg7CiAKLQkJaWYgKCBzaXplID4gUkFERU9OX01BWF9URVhUVVJFX1NJWkUgKSB7CisJCWlmIChzaXplID4gUkFERU9OX01BWF9URVhUVVJFX1NJWkUpIHsKIAkJCWhlaWdodCA9IFJBREVPTl9NQVhfVEVYVFVSRV9TSVpFIC8gYmxpdF93aWR0aDsKIAkJCXNpemUgPSBoZWlnaHQgKiBibGl0X3dpZHRoOwotCQl9IGVsc2UgaWYgKCBzaXplIDwgNCAmJiBzaXplID4gMCApIHsKKwkJfSBlbHNlIGlmIChzaXplIDwgNCAmJiBzaXplID4gMCkgewogCQkJc2l6ZSA9IDQ7Ci0JCX0gZWxzZSBpZiAoIHNpemUgPT0gMCApIHsKKwkJfSBlbHNlIGlmIChzaXplID09IDApIHsKIAkJCXJldHVybiAwOwogCQl9CiAKLQkJYnVmID0gcmFkZW9uX2ZyZWVsaXN0X2dldCggZGV2ICk7Ci0JCWlmICggMCAmJiAhYnVmICkgewotCQkJcmFkZW9uX2RvX2NwX2lkbGUoIGRldl9wcml2ICk7Ci0JCQlidWYgPSByYWRlb25fZnJlZWxpc3RfZ2V0KCBkZXYgKTsKKwkJYnVmID0gcmFkZW9uX2ZyZWVsaXN0X2dldChkZXYpOworCQlpZiAoMCAmJiAhYnVmKSB7CisJCQlyYWRlb25fZG9fY3BfaWRsZShkZXZfcHJpdik7CisJCQlidWYgPSByYWRlb25fZnJlZWxpc3RfZ2V0KGRldik7CiAJCX0KLQkJaWYgKCAhYnVmICkgeworCQlpZiAoIWJ1ZikgewogCQkJRFJNX0RFQlVHKCJyYWRlb25fY3BfZGlzcGF0Y2hfdGV4dHVyZTogRUFHQUlOXG4iKTsKLQkJCWlmIChEUk1fQ09QWV9UT19VU0VSKCB0ZXgtPmltYWdlLCBpbWFnZSwgc2l6ZW9mKCppbWFnZSkgKSkKKwkJCWlmIChEUk1fQ09QWV9UT19VU0VSKHRleC0+aW1hZ2UsIGltYWdlLCBzaXplb2YoKmltYWdlKSkpCiAJCQkJcmV0dXJuIERSTV9FUlIoRUZBVUxUKTsKIAkJCXJldHVybiBEUk1fRVJSKEVBR0FJTik7CiAJCX0KIAotCiAJCS8qIERpc3BhdGNoIHRoZSBpbmRpcmVjdCBidWZmZXIuCiAJCSAqLwotCQlidWZmZXIgPSAodTMyKikoKGNoYXIqKWRldi0+YWdwX2J1ZmZlcl9tYXAtPmhhbmRsZSArIGJ1Zi0+b2Zmc2V0KTsKKwkJYnVmZmVyID0KKwkJICAgICh1MzIgKikgKChjaGFyICopZGV2LT5hZ3BfYnVmZmVyX21hcC0+aGFuZGxlICsgYnVmLT5vZmZzZXQpOwogCQlkd29yZHMgPSBzaXplIC8gNDsKIAogCQlpZiAobWljcm90aWxlKSB7CkBAIC0xNjQ5LDIwICsxNjUwLDI2IEBACiAJCQlpZiAodGV4LT5oZWlnaHQgPT0gMSkgewogCQkJCWlmICh0ZXhfd2lkdGggPj0gNjQgfHwgdGV4X3dpZHRoIDw9IDE2KSB7CiAJCQkJCWlmIChEUk1fQ09QWV9GUk9NX1VTRVIoYnVmZmVyLCBkYXRhLAotCQkJCQkJCSAgICAgICB0ZXhfd2lkdGggKiBzaXplb2YodTMyKSkpIHsKLQkJCQkJCURSTV9FUlJPUigiRUZBVUxUIG9uIHBhZCwgJWQgYnl0ZXNcbiIsCi0JCQkJCQkJICB0ZXhfd2lkdGgpOworCQkJCQkJCSAgICAgICB0ZXhfd2lkdGggKgorCQkJCQkJCSAgICAgICBzaXplb2YodTMyKSkpIHsKKwkJCQkJCURSTV9FUlJPUgorCQkJCQkJICAgICgiRUZBVUxUIG9uIHBhZCwgJWQgYnl0ZXNcbiIsCisJCQkJCQkgICAgIHRleF93aWR0aCk7CiAJCQkJCQlyZXR1cm4gRFJNX0VSUihFRkFVTFQpOwogCQkJCQl9CiAJCQkJfSBlbHNlIGlmICh0ZXhfd2lkdGggPT0gMzIpIHsKLQkJCQkJaWYgKERSTV9DT1BZX0ZST01fVVNFUihidWZmZXIsIGRhdGEsIDE2KSkgewotCQkJCQkJRFJNX0VSUk9SKCJFRkFVTFQgb24gcGFkLCAlZCBieXRlc1xuIiwKLQkJCQkJCQkgIHRleF93aWR0aCk7CisJCQkJCWlmIChEUk1fQ09QWV9GUk9NX1VTRVIKKwkJCQkJICAgIChidWZmZXIsIGRhdGEsIDE2KSkgeworCQkJCQkJRFJNX0VSUk9SCisJCQkJCQkgICAgKCJFRkFVTFQgb24gcGFkLCAlZCBieXRlc1xuIiwKKwkJCQkJCSAgICAgdGV4X3dpZHRoKTsKIAkJCQkJCXJldHVybiBEUk1fRVJSKEVGQVVMVCk7CiAJCQkJCX0KLQkJCQkJaWYgKERSTV9DT1BZX0ZST01fVVNFUihidWZmZXIgKyA4LCBkYXRhICsgMTYsIDE2KSkgewotCQkJCQkJRFJNX0VSUk9SKCJFRkFVTFQgb24gcGFkLCAlZCBieXRlc1xuIiwKLQkJCQkJCQkgIHRleF93aWR0aCk7CisJCQkJCWlmIChEUk1fQ09QWV9GUk9NX1VTRVIKKwkJCQkJICAgIChidWZmZXIgKyA4LCBkYXRhICsgMTYsIDE2KSkgeworCQkJCQkJRFJNX0VSUk9SCisJCQkJCQkgICAgKCJFRkFVTFQgb24gcGFkLCAlZCBieXRlc1xuIiwKKwkJCQkJCSAgICAgdGV4X3dpZHRoKTsKIAkJCQkJCXJldHVybiBEUk1fRVJSKEVGQVVMVCk7CiAJCQkJCX0KIAkJCQl9CkBAIC0xNjc1LDkgKzE2ODIsMTEgQEAKIAkJCQl9CiAJCQl9IGVsc2UgaWYgKHRleF93aWR0aCA8IDE2KSB7CiAJCQkJZm9yIChpID0gMDsgaSA8IHRleC0+aGVpZ2h0OyBpKyspIHsKLQkJCQkJaWYgKERSTV9DT1BZX0ZST01fVVNFUihidWZmZXIsIGRhdGEsIHRleF93aWR0aCkpIHsKLQkJCQkJCURSTV9FUlJPUigiRUZBVUxUIG9uIHBhZCwgJWQgYnl0ZXNcbiIsCi0JCQkJCQkJICB0ZXhfd2lkdGgpOworCQkJCQlpZiAoRFJNX0NPUFlfRlJPTV9VU0VSCisJCQkJCSAgICAoYnVmZmVyLCBkYXRhLCB0ZXhfd2lkdGgpKSB7CisJCQkJCQlEUk1fRVJST1IKKwkJCQkJCSAgICAoIkVGQVVMVCBvbiBwYWQsICVkIGJ5dGVzXG4iLAorCQkJCQkJICAgICB0ZXhfd2lkdGgpOwogCQkJCQkJcmV0dXJuIERSTV9FUlIoRUZBVUxUKTsKIAkJCQkJfQogCQkJCQlidWZmZXIgKz0gNDsKQEAgLTE2ODcsMzUgKzE2OTYsNDIgQEAKIAkJCQkvKiBUT0RPOiBtYWtlIHN1cmUgdGhpcyB3b3JrcyB3aGVuIG5vdCBmaXR0aW5nIGluIG9uZSBidWZmZXIKIAkJCQkgICAoaS5lLiAzMmJ5dGVzIHggMjA0OC4uLikgKi8KIAkJCQlmb3IgKGkgPSAwOyBpIDwgdGV4LT5oZWlnaHQ7IGkgKz0gMikgewotCQkJCQlpZiAoRFJNX0NPUFlfRlJPTV9VU0VSKGJ1ZmZlciwgZGF0YSwgMTYpKSB7Ci0JCQkJCQlEUk1fRVJST1IoIkVGQVVMVCBvbiBwYWQsICVkIGJ5dGVzXG4iLAotCQkJCQkJCSAgdGV4X3dpZHRoKTsKKwkJCQkJaWYgKERSTV9DT1BZX0ZST01fVVNFUgorCQkJCQkgICAgKGJ1ZmZlciwgZGF0YSwgMTYpKSB7CisJCQkJCQlEUk1fRVJST1IKKwkJCQkJCSAgICAoIkVGQVVMVCBvbiBwYWQsICVkIGJ5dGVzXG4iLAorCQkJCQkJICAgICB0ZXhfd2lkdGgpOwogCQkJCQkJcmV0dXJuIERSTV9FUlIoRUZBVUxUKTsKIAkJCQkJfQogCQkJCQlkYXRhICs9IDE2OwotCQkJCQlpZiAoRFJNX0NPUFlfRlJPTV9VU0VSKGJ1ZmZlciArIDgsIGRhdGEsIDE2KSkgewotCQkJCQkJRFJNX0VSUk9SKCJFRkFVTFQgb24gcGFkLCAlZCBieXRlc1xuIiwKLQkJCQkJCQkgIHRleF93aWR0aCk7CisJCQkJCWlmIChEUk1fQ09QWV9GUk9NX1VTRVIKKwkJCQkJICAgIChidWZmZXIgKyA4LCBkYXRhLCAxNikpIHsKKwkJCQkJCURSTV9FUlJPUgorCQkJCQkJICAgICgiRUZBVUxUIG9uIHBhZCwgJWQgYnl0ZXNcbiIsCisJCQkJCQkgICAgIHRleF93aWR0aCk7CiAJCQkJCQlyZXR1cm4gRFJNX0VSUihFRkFVTFQpOwogCQkJCQl9CiAJCQkJCWRhdGEgKz0gMTY7Ci0JCQkJCWlmIChEUk1fQ09QWV9GUk9NX1VTRVIoYnVmZmVyICsgNCwgZGF0YSwgMTYpKSB7Ci0JCQkJCQlEUk1fRVJST1IoIkVGQVVMVCBvbiBwYWQsICVkIGJ5dGVzXG4iLAotCQkJCQkJCSAgdGV4X3dpZHRoKTsKKwkJCQkJaWYgKERSTV9DT1BZX0ZST01fVVNFUgorCQkJCQkgICAgKGJ1ZmZlciArIDQsIGRhdGEsIDE2KSkgeworCQkJCQkJRFJNX0VSUk9SCisJCQkJCQkgICAgKCJFRkFVTFQgb24gcGFkLCAlZCBieXRlc1xuIiwKKwkJCQkJCSAgICAgdGV4X3dpZHRoKTsKIAkJCQkJCXJldHVybiBEUk1fRVJSKEVGQVVMVCk7CiAJCQkJCX0KIAkJCQkJZGF0YSArPSAxNjsKLQkJCQkJaWYgKERSTV9DT1BZX0ZST01fVVNFUihidWZmZXIgKyAxMiwgZGF0YSwgMTYpKSB7Ci0JCQkJCQlEUk1fRVJST1IoIkVGQVVMVCBvbiBwYWQsICVkIGJ5dGVzXG4iLAotCQkJCQkJCSAgdGV4X3dpZHRoKTsKKwkJCQkJaWYgKERSTV9DT1BZX0ZST01fVVNFUgorCQkJCQkgICAgKGJ1ZmZlciArIDEyLCBkYXRhLCAxNikpIHsKKwkJCQkJCURSTV9FUlJPUgorCQkJCQkJICAgICgiRUZBVUxUIG9uIHBhZCwgJWQgYnl0ZXNcbiIsCisJCQkJCQkgICAgIHRleF93aWR0aCk7CiAJCQkJCQlyZXR1cm4gRFJNX0VSUihFRkFVTFQpOwogCQkJCQl9CiAJCQkJCWRhdGEgKz0gMTY7CiAJCQkJCWJ1ZmZlciArPSAxNjsKIAkJCQl9CiAJCQl9Ci0JCX0KLQkJZWxzZSB7CisJCX0gZWxzZSB7CiAJCQlpZiAodGV4X3dpZHRoID49IDMyKSB7CiAJCQkJLyogVGV4dHVyZSBpbWFnZSB3aWR0aCBpcyBsYXJnZXIgdGhhbiB0aGUgbWluaW11bSwgc28gd2UKIAkJCQkgKiBjYW4gdXBsb2FkIGl0IGRpcmVjdGx5LgpAQCAtMTczMSw5ICsxNzQ3LDEyIEBACiAJCQkJICogbmVlZCB0byBwYWQgb3V0IGVhY2ggaW1hZ2Ugc2NhbmxpbmUgdG8gdGhlIG1pbmltdW0KIAkJCQkgKiB3aWR0aC4KIAkJCQkgKi8KLQkJCQlmb3IgKGkgPSAwIDsgaSA8IHRleC0+aGVpZ2h0IDsgaSsrKSB7Ci0JCQkJCWlmIChEUk1fQ09QWV9GUk9NX1VTRVIoYnVmZmVyLCBkYXRhLCB0ZXhfd2lkdGggKSkgewotCQkJCQkJRFJNX0VSUk9SKCJFRkFVTFQgb24gcGFkLCAlZCBieXRlc1xuIiwgdGV4X3dpZHRoKTsKKwkJCQlmb3IgKGkgPSAwOyBpIDwgdGV4LT5oZWlnaHQ7IGkrKykgeworCQkJCQlpZiAoRFJNX0NPUFlfRlJPTV9VU0VSCisJCQkJCSAgICAoYnVmZmVyLCBkYXRhLCB0ZXhfd2lkdGgpKSB7CisJCQkJCQlEUk1fRVJST1IKKwkJCQkJCSAgICAoIkVGQVVMVCBvbiBwYWQsICVkIGJ5dGVzXG4iLAorCQkJCQkJICAgICB0ZXhfd2lkdGgpOwogCQkJCQkJcmV0dXJuIERSTV9FUlIoRUZBVUxUKTsKIAkJCQkJfQogCQkJCQlidWZmZXIgKz0gODsKQEAgLTE3NTQsOCArMTc3Myw3IEBACiAJCQkgUkFERU9OX0dNQ19TUkNfREFUQVRZUEVfQ09MT1IgfAogCQkJIFJBREVPTl9ST1AzX1MgfAogCQkJIFJBREVPTl9EUF9TUkNfU09VUkNFX01FTU9SWSB8Ci0JCQkgUkFERU9OX0dNQ19DTFJfQ01QX0NOVExfRElTIHwKLQkJCSBSQURFT05fR01DX1dSX01TS19ESVMgKTsKKwkJCSBSQURFT05fR01DX0NMUl9DTVBfQ05UTF9ESVMgfCBSQURFT05fR01DX1dSX01TS19ESVMpOwogCQlPVVRfUklORygoc3BpdGNoIDw8IDIyKSB8IChvZmZzZXQgPj4gMTApKTsKIAkJT1VUX1JJTkcoKHRleHBpdGNoIDw8IDIyKSB8ICh0ZXgtPm9mZnNldCA+PiAxMCkpOwogCQlPVVRfUklORygwKTsKQEAgLTE3NzYsNjIgKzE3OTQsNjIgQEAKIAkgKiB0aGUgdGV4dHVyZSBkYXRhIGlzIHdyaXR0ZW4gb3V0IHRvIG1lbW9yeSBiZWZvcmUgcmVuZGVyaW5nCiAJICogY29udGludWVzLgogCSAqLwotCUJFR0lOX1JJTkcoIDQgKTsKKwlCRUdJTl9SSU5HKDQpOwogCVJBREVPTl9GTFVTSF9DQUNIRSgpOwogCVJBREVPTl9XQUlUX1VOVElMXzJEX0lETEUoKTsKIAlBRFZBTkNFX1JJTkcoKTsKIAlyZXR1cm4gMDsKIH0KIAotCi1zdGF0aWMgdm9pZCByYWRlb25fY3BfZGlzcGF0Y2hfc3RpcHBsZSggZHJtX2RldmljZV90ICpkZXYsIHUzMiAqc3RpcHBsZSApCitzdGF0aWMgdm9pZCByYWRlb25fY3BfZGlzcGF0Y2hfc3RpcHBsZShkcm1fZGV2aWNlX3QgKiBkZXYsIHUzMiAqIHN0aXBwbGUpCiB7CiAJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlpbnQgaTsKIAlSSU5HX0xPQ0FMUzsKLQlEUk1fREVCVUcoICJcbiIgKTsKKwlEUk1fREVCVUcoIlxuIik7CiAKLQlCRUdJTl9SSU5HKCAzNSApOworCUJFR0lOX1JJTkcoMzUpOwogCi0JT1VUX1JJTkcoIENQX1BBQ0tFVDAoIFJBREVPTl9SRV9TVElQUExFX0FERFIsIDAgKSApOwotCU9VVF9SSU5HKCAweDAwMDAwMDAwICk7CisJT1VUX1JJTkcoQ1BfUEFDS0VUMChSQURFT05fUkVfU1RJUFBMRV9BRERSLCAwKSk7CisJT1VUX1JJTkcoMHgwMDAwMDAwMCk7CiAKLQlPVVRfUklORyggQ1BfUEFDS0VUMF9UQUJMRSggUkFERU9OX1JFX1NUSVBQTEVfREFUQSwgMzEgKSApOwotCWZvciAoIGkgPSAwIDsgaSA8IDMyIDsgaSsrICkgewotCQlPVVRfUklORyggc3RpcHBsZVtpXSApOworCU9VVF9SSU5HKENQX1BBQ0tFVDBfVEFCTEUoUkFERU9OX1JFX1NUSVBQTEVfREFUQSwgMzEpKTsKKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQlPVVRfUklORyhzdGlwcGxlW2ldKTsKIAl9CiAKIAlBRFZBTkNFX1JJTkcoKTsKIH0KIAotc3RhdGljIHZvaWQgcmFkZW9uX2FwcGx5X3N1cmZhY2VfcmVncyhpbnQgc3VyZl9pbmRleCwgZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2KQorc3RhdGljIHZvaWQgcmFkZW9uX2FwcGx5X3N1cmZhY2VfcmVncyhpbnQgc3VyZl9pbmRleCwKKwkJCQkgICAgICBkcm1fcmFkZW9uX3ByaXZhdGVfdCAqIGRldl9wcml2KQogewogCWlmICghZGV2X3ByaXYtPm1taW8pCiAJCXJldHVybjsKIAogCXJhZGVvbl9kb19jcF9pZGxlKGRldl9wcml2KTsKIAotCVJBREVPTl9XUklURShSQURFT05fU1VSRkFDRTBfSU5GTyArIDE2KnN1cmZfaW5kZXgsCi0JCWRldl9wcml2LT5zdXJmYWNlc1tzdXJmX2luZGV4XS5mbGFncyk7Ci0JUkFERU9OX1dSSVRFKFJBREVPTl9TVVJGQUNFMF9MT1dFUl9CT1VORCArIDE2KnN1cmZfaW5kZXgsCi0JCWRldl9wcml2LT5zdXJmYWNlc1tzdXJmX2luZGV4XS5sb3dlcik7Ci0JUkFERU9OX1dSSVRFKFJBREVPTl9TVVJGQUNFMF9VUFBFUl9CT1VORCArIDE2KnN1cmZfaW5kZXgsCi0JCWRldl9wcml2LT5zdXJmYWNlc1tzdXJmX2luZGV4XS51cHBlcik7CisJUkFERU9OX1dSSVRFKFJBREVPTl9TVVJGQUNFMF9JTkZPICsgMTYgKiBzdXJmX2luZGV4LAorCQkgICAgIGRldl9wcml2LT5zdXJmYWNlc1tzdXJmX2luZGV4XS5mbGFncyk7CisJUkFERU9OX1dSSVRFKFJBREVPTl9TVVJGQUNFMF9MT1dFUl9CT1VORCArIDE2ICogc3VyZl9pbmRleCwKKwkJICAgICBkZXZfcHJpdi0+c3VyZmFjZXNbc3VyZl9pbmRleF0ubG93ZXIpOworCVJBREVPTl9XUklURShSQURFT05fU1VSRkFDRTBfVVBQRVJfQk9VTkQgKyAxNiAqIHN1cmZfaW5kZXgsCisJCSAgICAgZGV2X3ByaXYtPnN1cmZhY2VzW3N1cmZfaW5kZXhdLnVwcGVyKTsKIH0KIAotCiAvKiBBbGxvY2F0ZXMgYSB2aXJ0dWFsIHN1cmZhY2UKLSAqIGRvZXNuJ3QgYWx3YXlzIGFsbG9jYXRlIGEgcmVhbCBzdXJmYWNlLCB3aWxsIHN0cmV0Y2ggYW4gZXhpc3RpbmcgCisgKiBkb2Vzbid0IGFsd2F5cyBhbGxvY2F0ZSBhIHJlYWwgc3VyZmFjZSwgd2lsbCBzdHJldGNoIGFuIGV4aXN0aW5nCiAgKiBzdXJmYWNlIHdoZW4gcG9zc2libGUuCiAgKgogICogTm90ZSB0aGF0IHJlZmNvdW50IGNhbiBiZSBhdCBtb3N0IDIsIHNpbmNlIGR1cmluZyBhIGZyZWUgcmVmY291bnQ9MwogICogbWlnaHQgbWVhbiB3ZSBoYXZlIHRvIGFsbG9jYXRlIGEgbmV3IHN1cmZhY2Ugd2hpY2ggbWlnaHQgbm90IGFsd2F5cwogICogYmUgYXZhaWxhYmxlLgotICogRm9yIGV4YW1wbGUgOiB3ZSBhbGxvY2F0ZSB0aHJlZSBjb250aWdvdXMgc3VyZmFjZXMgQUJDLiBJZiBCIGlzIAorICogRm9yIGV4YW1wbGUgOiB3ZSBhbGxvY2F0ZSB0aHJlZSBjb250aWdvdXMgc3VyZmFjZXMgQUJDLiBJZiBCIGlzCiAgKiBmcmVlZCwgd2Ugc3VkZGVubHkgbmVlZCB0d28gc3VyZmFjZXMgdG8gc3RvcmUgQSBhbmQgQywgd2hpY2ggbWlnaHQKICAqIG5vdCBhbHdheXMgYmUgYXZhaWxhYmxlLgogICovCi1zdGF0aWMgaW50IGFsbG9jX3N1cmZhY2UoZHJtX3JhZGVvbl9zdXJmYWNlX2FsbG9jX3QqIG5ldywgZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2LCBEUk1GSUxFIGZpbHApCitzdGF0aWMgaW50IGFsbG9jX3N1cmZhY2UoZHJtX3JhZGVvbl9zdXJmYWNlX2FsbG9jX3QgKiBuZXcsCisJCQkgZHJtX3JhZGVvbl9wcml2YXRlX3QgKiBkZXZfcHJpdiwgRFJNRklMRSBmaWxwKQogewogCXN0cnVjdCByYWRlb25fdmlydF9zdXJmYWNlICpzOwogCWludCBpOwpAQCAtMTg0MywzNCArMTg2MSwzNyBAQAogCiAJLyogc2FuaXR5IGNoZWNrICovCiAJaWYgKChuZXdfbG93ZXIgPj0gbmV3X3VwcGVyKSB8fCAobmV3LT5mbGFncyA9PSAwKSB8fCAobmV3LT5zaXplID09IDApIHx8Ci0JCSgobmV3X3VwcGVyICYgUkFERU9OX1NVUkZfQUREUkVTU19GSVhFRF9NQVNLKSAhPSBSQURFT05fU1VSRl9BRERSRVNTX0ZJWEVEX01BU0spIHx8Ci0JCSgobmV3X2xvd2VyICYgUkFERU9OX1NVUkZfQUREUkVTU19GSVhFRF9NQVNLKSAhPSAwKSkKKwkgICAgKChuZXdfdXBwZXIgJiBSQURFT05fU1VSRl9BRERSRVNTX0ZJWEVEX01BU0spICE9CisJICAgICBSQURFT05fU1VSRl9BRERSRVNTX0ZJWEVEX01BU0spCisJICAgIHx8ICgobmV3X2xvd2VyICYgUkFERU9OX1NVUkZfQUREUkVTU19GSVhFRF9NQVNLKSAhPSAwKSkKIAkJcmV0dXJuIC0xOwogCiAJLyogbWFrZSBzdXJlIHRoZXJlIGlzIG5vIG92ZXJsYXAgd2l0aCBleGlzdGluZyBzdXJmYWNlcyAqLwogCWZvciAoaSA9IDA7IGkgPCBSQURFT05fTUFYX1NVUkZBQ0VTOyBpKyspIHsKIAkJaWYgKChkZXZfcHJpdi0+c3VyZmFjZXNbaV0ucmVmY291bnQgIT0gMCkgJiYKLQkJKCggKG5ld19sb3dlciA+PSBkZXZfcHJpdi0+c3VyZmFjZXNbaV0ubG93ZXIpICYmCi0JCQkobmV3X2xvd2VyIDwgZGV2X3ByaXYtPnN1cmZhY2VzW2ldLnVwcGVyKSApIHx8Ci0JCSAoIChuZXdfbG93ZXIgPCBkZXZfcHJpdi0+c3VyZmFjZXNbaV0ubG93ZXIpICYmCi0JCQkobmV3X3VwcGVyID4gZGV2X3ByaXYtPnN1cmZhY2VzW2ldLmxvd2VyKSApKSApewotCQlyZXR1cm4gLTE7fQorCQkgICAgKCgobmV3X2xvd2VyID49IGRldl9wcml2LT5zdXJmYWNlc1tpXS5sb3dlcikgJiYKKwkJICAgICAgKG5ld19sb3dlciA8IGRldl9wcml2LT5zdXJmYWNlc1tpXS51cHBlcikpIHx8CisJCSAgICAgKChuZXdfbG93ZXIgPCBkZXZfcHJpdi0+c3VyZmFjZXNbaV0ubG93ZXIpICYmCisJCSAgICAgIChuZXdfdXBwZXIgPiBkZXZfcHJpdi0+c3VyZmFjZXNbaV0ubG93ZXIpKSkpIHsKKwkJCXJldHVybiAtMTsKKwkJfQogCX0KIAogCS8qIGZpbmQgYSB2aXJ0dWFsIHN1cmZhY2UgKi8KLQlmb3IgKGkgPSAwOyBpIDwgMipSQURFT05fTUFYX1NVUkZBQ0VTOyBpKyspCisJZm9yIChpID0gMDsgaSA8IDIgKiBSQURFT05fTUFYX1NVUkZBQ0VTOyBpKyspCiAJCWlmIChkZXZfcHJpdi0+dmlydF9zdXJmYWNlc1tpXS5maWxwID09IDApCiAJCQlicmVhazsKLQlpZiAoaSA9PSAyKlJBREVPTl9NQVhfU1VSRkFDRVMpIHsKLQkJcmV0dXJuIC0xO30KKwlpZiAoaSA9PSAyICogUkFERU9OX01BWF9TVVJGQUNFUykgeworCQlyZXR1cm4gLTE7CisJfQogCXZpcnRfc3VyZmFjZV9pbmRleCA9IGk7CiAKIAkvKiB0cnkgdG8gcmV1c2UgYW4gZXhpc3Rpbmcgc3VyZmFjZSAqLwogCWZvciAoaSA9IDA7IGkgPCBSQURFT05fTUFYX1NVUkZBQ0VTOyBpKyspIHsKIAkJLyogZXh0ZW5kIGJlZm9yZSAqLwogCQlpZiAoKGRldl9wcml2LT5zdXJmYWNlc1tpXS5yZWZjb3VudCA9PSAxKSAmJgotCQkgIChuZXctPmZsYWdzID09IGRldl9wcml2LT5zdXJmYWNlc1tpXS5mbGFncykgJiYKLQkJICAobmV3X3VwcGVyICsgMSA9PSBkZXZfcHJpdi0+c3VyZmFjZXNbaV0ubG93ZXIpKSB7CisJCSAgICAobmV3LT5mbGFncyA9PSBkZXZfcHJpdi0+c3VyZmFjZXNbaV0uZmxhZ3MpICYmCisJCSAgICAobmV3X3VwcGVyICsgMSA9PSBkZXZfcHJpdi0+c3VyZmFjZXNbaV0ubG93ZXIpKSB7CiAJCQlzID0gJihkZXZfcHJpdi0+dmlydF9zdXJmYWNlc1t2aXJ0X3N1cmZhY2VfaW5kZXhdKTsKIAkJCXMtPnN1cmZhY2VfaW5kZXggPSBpOwogCQkJcy0+bG93ZXIgPSBuZXdfbG93ZXI7CkBAIC0xODg1LDggKzE5MDYsOCBAQAogCiAJCS8qIGV4dGVuZCBhZnRlciAqLwogCQlpZiAoKGRldl9wcml2LT5zdXJmYWNlc1tpXS5yZWZjb3VudCA9PSAxKSAmJgotCQkgIChuZXctPmZsYWdzID09IGRldl9wcml2LT5zdXJmYWNlc1tpXS5mbGFncykgJiYKLQkJICAobmV3X2xvd2VyID09IGRldl9wcml2LT5zdXJmYWNlc1tpXS51cHBlciArIDEpKSB7CisJCSAgICAobmV3LT5mbGFncyA9PSBkZXZfcHJpdi0+c3VyZmFjZXNbaV0uZmxhZ3MpICYmCisJCSAgICAobmV3X2xvd2VyID09IGRldl9wcml2LT5zdXJmYWNlc1tpXS51cHBlciArIDEpKSB7CiAJCQlzID0gJihkZXZfcHJpdi0+dmlydF9zdXJmYWNlc1t2aXJ0X3N1cmZhY2VfaW5kZXhdKTsKIAkJCXMtPnN1cmZhY2VfaW5kZXggPSBpOwogCQkJcy0+bG93ZXIgPSBuZXdfbG93ZXI7CkBAIC0xOTIyLDI2ICsxOTQzLDM0IEBACiAJcmV0dXJuIC0xOwogfQogCi1zdGF0aWMgaW50IGZyZWVfc3VyZmFjZShEUk1GSUxFIGZpbHAsIGRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiwgaW50IGxvd2VyKQorc3RhdGljIGludCBmcmVlX3N1cmZhY2UoRFJNRklMRSBmaWxwLCBkcm1fcmFkZW9uX3ByaXZhdGVfdCAqIGRldl9wcml2LAorCQkJaW50IGxvd2VyKQogewogCXN0cnVjdCByYWRlb25fdmlydF9zdXJmYWNlICpzOwogCWludCBpOwogCS8qIGZpbmQgdGhlIHZpcnR1YWwgc3VyZmFjZSAqLwotCWZvcihpID0gMDsgaSA8IDIqUkFERU9OX01BWF9TVVJGQUNFUzsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IDIgKiBSQURFT05fTUFYX1NVUkZBQ0VTOyBpKyspIHsKIAkJcyA9ICYoZGV2X3ByaXYtPnZpcnRfc3VyZmFjZXNbaV0pOwogCQlpZiAocy0+ZmlscCkgewogCQkJaWYgKChsb3dlciA9PSBzLT5sb3dlcikgJiYgKGZpbHAgPT0gcy0+ZmlscCkpIHsKLQkJCQlpZiAoZGV2X3ByaXYtPnN1cmZhY2VzW3MtPnN1cmZhY2VfaW5kZXhdLmxvd2VyID09IHMtPmxvd2VyKQotCQkJCQlkZXZfcHJpdi0+c3VyZmFjZXNbcy0+c3VyZmFjZV9pbmRleF0ubG93ZXIgPSBzLT51cHBlcjsKKwkJCQlpZiAoZGV2X3ByaXYtPnN1cmZhY2VzW3MtPnN1cmZhY2VfaW5kZXhdLgorCQkJCSAgICBsb3dlciA9PSBzLT5sb3dlcikKKwkJCQkJZGV2X3ByaXYtPnN1cmZhY2VzW3MtPnN1cmZhY2VfaW5kZXhdLgorCQkJCQkgICAgbG93ZXIgPSBzLT51cHBlcjsKIAotCQkJCWlmIChkZXZfcHJpdi0+c3VyZmFjZXNbcy0+c3VyZmFjZV9pbmRleF0udXBwZXIgPT0gcy0+dXBwZXIpCi0JCQkJCWRldl9wcml2LT5zdXJmYWNlc1tzLT5zdXJmYWNlX2luZGV4XS51cHBlciA9IHMtPmxvd2VyOworCQkJCWlmIChkZXZfcHJpdi0+c3VyZmFjZXNbcy0+c3VyZmFjZV9pbmRleF0uCisJCQkJICAgIHVwcGVyID09IHMtPnVwcGVyKQorCQkJCQlkZXZfcHJpdi0+c3VyZmFjZXNbcy0+c3VyZmFjZV9pbmRleF0uCisJCQkJCSAgICB1cHBlciA9IHMtPmxvd2VyOwogCiAJCQkJZGV2X3ByaXYtPnN1cmZhY2VzW3MtPnN1cmZhY2VfaW5kZXhdLnJlZmNvdW50LS07Ci0JCQkJaWYgKGRldl9wcml2LT5zdXJmYWNlc1tzLT5zdXJmYWNlX2luZGV4XS5yZWZjb3VudCA9PSAwKQotCQkJCQlkZXZfcHJpdi0+c3VyZmFjZXNbcy0+c3VyZmFjZV9pbmRleF0uZmxhZ3MgPSAwOworCQkJCWlmIChkZXZfcHJpdi0+c3VyZmFjZXNbcy0+c3VyZmFjZV9pbmRleF0uCisJCQkJICAgIHJlZmNvdW50ID09IDApCisJCQkJCWRldl9wcml2LT5zdXJmYWNlc1tzLT5zdXJmYWNlX2luZGV4XS4KKwkJCQkJICAgIGZsYWdzID0gMDsKIAkJCQlzLT5maWxwID0gTlVMTDsKLQkJCQlyYWRlb25fYXBwbHlfc3VyZmFjZV9yZWdzKHMtPnN1cmZhY2VfaW5kZXgsIGRldl9wcml2KTsKKwkJCQlyYWRlb25fYXBwbHlfc3VyZmFjZV9yZWdzKHMtPnN1cmZhY2VfaW5kZXgsCisJCQkJCQkJICBkZXZfcHJpdik7CiAJCQkJcmV0dXJuIDA7CiAJCQl9CiAJCX0KQEAgLTE5NDksMTMgKzE5NzgsMTQgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHZvaWQgcmFkZW9uX3N1cmZhY2VzX3JlbGVhc2UoRFJNRklMRSBmaWxwLCBkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYpCitzdGF0aWMgdm9pZCByYWRlb25fc3VyZmFjZXNfcmVsZWFzZShEUk1GSUxFIGZpbHAsCisJCQkJICAgIGRybV9yYWRlb25fcHJpdmF0ZV90ICogZGV2X3ByaXYpCiB7CiAJaW50IGk7Ci0JZm9yKCBpID0gMDsgaSA8IDIqUkFERU9OX01BWF9TVVJGQUNFUzsgaSsrKQotCXsKKwlmb3IgKGkgPSAwOyBpIDwgMiAqIFJBREVPTl9NQVhfU1VSRkFDRVM7IGkrKykgewogCQlpZiAoZGV2X3ByaXYtPnZpcnRfc3VyZmFjZXNbaV0uZmlscCA9PSBmaWxwKQotCQkJZnJlZV9zdXJmYWNlKGZpbHAsIGRldl9wcml2LCBkZXZfcHJpdi0+dmlydF9zdXJmYWNlc1tpXS5sb3dlcik7CisJCQlmcmVlX3N1cmZhY2UoZmlscCwgZGV2X3ByaXYsCisJCQkJICAgICBkZXZfcHJpdi0+dmlydF9zdXJmYWNlc1tpXS5sb3dlcik7CiAJfQogfQogCkBAIC0xOTY5LDEyICsxOTk5LDEzIEBACiAJZHJtX3JhZGVvbl9zdXJmYWNlX2FsbG9jX3QgYWxsb2M7CiAKIAlpZiAoIWRldl9wcml2KSB7Ci0JCURSTV9FUlJPUiggIiVzIGNhbGxlZCB3aXRoIG5vIGluaXRpYWxpemF0aW9uXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwkJRFJNX0VSUk9SKCIlcyBjYWxsZWQgd2l0aCBubyBpbml0aWFsaXphdGlvblxuIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAl9CiAKLQlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwoYWxsb2MsIChkcm1fcmFkZW9uX3N1cmZhY2VfYWxsb2NfdCBfX3VzZXIgKilkYXRhLAotCQkJCSAgc2l6ZW9mKGFsbG9jKSk7CisJRFJNX0NPUFlfRlJPTV9VU0VSX0lPQ1RMKGFsbG9jLAorCQkJCSAoZHJtX3JhZGVvbl9zdXJmYWNlX2FsbG9jX3QgX191c2VyICopIGRhdGEsCisJCQkJIHNpemVvZihhbGxvYykpOwogCiAJaWYgKGFsbG9jX3N1cmZhY2UoJmFsbG9jLCBkZXZfcHJpdiwgZmlscCkgPT0gLTEpCiAJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CkBAIC0xOTg5LDEyICsyMDIwLDEyIEBACiAJZHJtX3JhZGVvbl9zdXJmYWNlX2ZyZWVfdCBtZW1mcmVlOwogCiAJaWYgKCFkZXZfcHJpdikgewotCQlEUk1fRVJST1IoICIlcyBjYWxsZWQgd2l0aCBubyBpbml0aWFsaXphdGlvblxuIiwgX19GVU5DVElPTl9fICk7CisJCURSTV9FUlJPUigiJXMgY2FsbGVkIHdpdGggbm8gaW5pdGlhbGl6YXRpb25cbiIsIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiAJfQogCi0JRFJNX0NPUFlfRlJPTV9VU0VSX0lPQ1RMKG1lbWZyZWUsIChkcm1fcmFkZW9uX21lbV9mcmVlX3QgX191c2VyICopZGF0YSwKLQkJCQkgIHNpemVvZihtZW1mcmVlKSApOworCURSTV9DT1BZX0ZST01fVVNFUl9JT0NUTChtZW1mcmVlLCAoZHJtX3JhZGVvbl9tZW1fZnJlZV90IF9fdXNlciAqKSBkYXRhLAorCQkJCSBzaXplb2YobWVtZnJlZSkpOwogCiAJaWYgKGZyZWVfc3VyZmFjZShmaWxwLCBkZXZfcHJpdiwgbWVtZnJlZS5hZGRyZXNzKSkKIAkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKQEAgLTIwMDIsNTEgKzIwMzMsNTIgQEAKIAkJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcmFkZW9uX2NwX2NsZWFyKCBEUk1fSU9DVExfQVJHUyApCitzdGF0aWMgaW50IHJhZGVvbl9jcF9jbGVhcihEUk1fSU9DVExfQVJHUykKIHsKIAlEUk1fREVWSUNFOwogCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJZHJtX3JhZGVvbl9zYXJlYV90ICpzYXJlYV9wcml2ID0gZGV2X3ByaXYtPnNhcmVhX3ByaXY7CiAJZHJtX3JhZGVvbl9jbGVhcl90IGNsZWFyOwogCWRybV9yYWRlb25fY2xlYXJfcmVjdF90IGRlcHRoX2JveGVzW1JBREVPTl9OUl9TQVJFQV9DTElQUkVDVFNdOwotCURSTV9ERUJVRyggIlxuIiApOworCURSTV9ERUJVRygiXG4iKTsKIAotCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTiggZGV2LCBmaWxwICk7CisJTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlscCk7CiAKLQlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwoIGNsZWFyLCAoZHJtX3JhZGVvbl9jbGVhcl90IF9fdXNlciAqKWRhdGEsCi0JCQkgICAgIHNpemVvZihjbGVhcikgKTsKKwlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwoY2xlYXIsIChkcm1fcmFkZW9uX2NsZWFyX3QgX191c2VyICopIGRhdGEsCisJCQkJIHNpemVvZihjbGVhcikpOwogCi0JUklOR19TUEFDRV9URVNUX1dJVEhfUkVUVVJOKCBkZXZfcHJpdiApOworCVJJTkdfU1BBQ0VfVEVTVF9XSVRIX1JFVFVSTihkZXZfcHJpdik7CiAKLQlpZiAoIHNhcmVhX3ByaXYtPm5ib3ggPiBSQURFT05fTlJfU0FSRUFfQ0xJUFJFQ1RTICkKKwlpZiAoc2FyZWFfcHJpdi0+bmJveCA+IFJBREVPTl9OUl9TQVJFQV9DTElQUkVDVFMpCiAJCXNhcmVhX3ByaXYtPm5ib3ggPSBSQURFT05fTlJfU0FSRUFfQ0xJUFJFQ1RTOwogCi0JaWYgKCBEUk1fQ09QWV9GUk9NX1VTRVIoICZkZXB0aF9ib3hlcywgY2xlYXIuZGVwdGhfYm94ZXMsCi0JCQkgICAgIHNhcmVhX3ByaXYtPm5ib3ggKiBzaXplb2YoZGVwdGhfYm94ZXNbMF0pICkgKQorCWlmIChEUk1fQ09QWV9GUk9NX1VTRVIoJmRlcHRoX2JveGVzLCBjbGVhci5kZXB0aF9ib3hlcywKKwkJCSAgICAgICBzYXJlYV9wcml2LT5uYm94ICogc2l6ZW9mKGRlcHRoX2JveGVzWzBdKSkpCiAJCXJldHVybiBEUk1fRVJSKEVGQVVMVCk7CiAKLQlyYWRlb25fY3BfZGlzcGF0Y2hfY2xlYXIoIGRldiwgJmNsZWFyLCBkZXB0aF9ib3hlcyApOworCXJhZGVvbl9jcF9kaXNwYXRjaF9jbGVhcihkZXYsICZjbGVhciwgZGVwdGhfYm94ZXMpOwogCiAJQ09NTUlUX1JJTkcoKTsKIAlyZXR1cm4gMDsKIH0KIAotCiAvKiBOb3Qgc3VyZSB3aHkgdGhpcyBpc24ndCBzZXQgYWxsIHRoZSB0aW1lOgotICovIAotc3RhdGljIGludCByYWRlb25fZG9faW5pdF9wYWdlZmxpcCggZHJtX2RldmljZV90ICpkZXYgKQorICovCitzdGF0aWMgaW50IHJhZGVvbl9kb19pbml0X3BhZ2VmbGlwKGRybV9kZXZpY2VfdCAqIGRldikKIHsKIAlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCVJJTkdfTE9DQUxTOwogCi0JRFJNX0RFQlVHKCAiXG4iICk7CisJRFJNX0RFQlVHKCJcbiIpOwogCi0JQkVHSU5fUklORyggNiApOworCUJFR0lOX1JJTkcoNik7CiAJUkFERU9OX1dBSVRfVU5USUxfM0RfSURMRSgpOwotCU9VVF9SSU5HKCBDUF9QQUNLRVQwKCBSQURFT05fQ1JUQ19PRkZTRVRfQ05UTCwgMCApICk7Ci0JT1VUX1JJTkcoIFJBREVPTl9SRUFEKCBSQURFT05fQ1JUQ19PRkZTRVRfQ05UTCApIHwgUkFERU9OX0NSVENfT0ZGU0VUX0ZMSVBfQ05UTCApOwotCU9VVF9SSU5HKCBDUF9QQUNLRVQwKCBSQURFT05fQ1JUQzJfT0ZGU0VUX0NOVEwsIDAgKSApOwotCU9VVF9SSU5HKCBSQURFT05fUkVBRCggUkFERU9OX0NSVEMyX09GRlNFVF9DTlRMICkgfCBSQURFT05fQ1JUQ19PRkZTRVRfRkxJUF9DTlRMICk7CisJT1VUX1JJTkcoQ1BfUEFDS0VUMChSQURFT05fQ1JUQ19PRkZTRVRfQ05UTCwgMCkpOworCU9VVF9SSU5HKFJBREVPTl9SRUFEKFJBREVPTl9DUlRDX09GRlNFVF9DTlRMKSB8CisJCSBSQURFT05fQ1JUQ19PRkZTRVRfRkxJUF9DTlRMKTsKKwlPVVRfUklORyhDUF9QQUNLRVQwKFJBREVPTl9DUlRDMl9PRkZTRVRfQ05UTCwgMCkpOworCU9VVF9SSU5HKFJBREVPTl9SRUFEKFJBREVPTl9DUlRDMl9PRkZTRVRfQ05UTCkgfAorCQkgUkFERU9OX0NSVENfT0ZGU0VUX0ZMSVBfQ05UTCk7CiAJQURWQU5DRV9SSU5HKCk7CiAKIAlkZXZfcHJpdi0+cGFnZV9mbGlwcGluZyA9IDE7CkBAIC0yMDU5LDYyICsyMDkxLDYyIEBACiAvKiBDYWxsZWQgd2hlbmV2ZXIgYSBjbGllbnQgZGllcywgZnJvbSBkcm1fcmVsZWFzZS4KICAqIE5PVEU6ICBMb2NrIGlzbid0IG5lY2Vzc2FyaWx5IGhlbGQgd2hlbiB0aGlzIGlzIGNhbGxlZCEKICAqLwotc3RhdGljIGludCByYWRlb25fZG9fY2xlYW51cF9wYWdlZmxpcCggZHJtX2RldmljZV90ICpkZXYgKQorc3RhdGljIGludCByYWRlb25fZG9fY2xlYW51cF9wYWdlZmxpcChkcm1fZGV2aWNlX3QgKiBkZXYpCiB7CiAJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlEUk1fREVCVUcoICJcbiIgKTsKKwlEUk1fREVCVUcoIlxuIik7CiAKIAlpZiAoZGV2X3ByaXYtPmN1cnJlbnRfcGFnZSAhPSAwKQotCQlyYWRlb25fY3BfZGlzcGF0Y2hfZmxpcCggZGV2ICk7CisJCXJhZGVvbl9jcF9kaXNwYXRjaF9mbGlwKGRldik7CiAKIAlkZXZfcHJpdi0+cGFnZV9mbGlwcGluZyA9IDA7CiAJcmV0dXJuIDA7CiB9CiAKIC8qIFN3YXBwaW5nIGFuZCBmbGlwcGluZyBhcmUgZGlmZmVyZW50IG9wZXJhdGlvbnMsIG5lZWQgZGlmZmVyZW50IGlvY3Rscy4KLSAqIFRoZXkgY2FuICYgc2hvdWxkIGJlIGludGVybWl4ZWQgdG8gc3VwcG9ydCBtdWx0aXBsZSAzZCB3aW5kb3dzLiAgCisgKiBUaGV5IGNhbiAmIHNob3VsZCBiZSBpbnRlcm1peGVkIHRvIHN1cHBvcnQgbXVsdGlwbGUgM2Qgd2luZG93cy4KICAqLwotc3RhdGljIGludCByYWRlb25fY3BfZmxpcCggRFJNX0lPQ1RMX0FSR1MgKQorc3RhdGljIGludCByYWRlb25fY3BfZmxpcChEUk1fSU9DVExfQVJHUykKIHsKIAlEUk1fREVWSUNFOwogCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JRFJNX0RFQlVHKCAiXG4iICk7CisJRFJNX0RFQlVHKCJcbiIpOwogCi0JTE9DS19URVNUX1dJVEhfUkVUVVJOKCBkZXYsIGZpbHAgKTsKKwlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxwKTsKIAotCVJJTkdfU1BBQ0VfVEVTVF9XSVRIX1JFVFVSTiggZGV2X3ByaXYgKTsKKwlSSU5HX1NQQUNFX1RFU1RfV0lUSF9SRVRVUk4oZGV2X3ByaXYpOwogCi0JaWYgKCFkZXZfcHJpdi0+cGFnZV9mbGlwcGluZykgCi0JCXJhZGVvbl9kb19pbml0X3BhZ2VmbGlwKCBkZXYgKTsKLQkJCi0JcmFkZW9uX2NwX2Rpc3BhdGNoX2ZsaXAoIGRldiApOworCWlmICghZGV2X3ByaXYtPnBhZ2VfZmxpcHBpbmcpCisJCXJhZGVvbl9kb19pbml0X3BhZ2VmbGlwKGRldik7CisKKwlyYWRlb25fY3BfZGlzcGF0Y2hfZmxpcChkZXYpOwogCiAJQ09NTUlUX1JJTkcoKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCByYWRlb25fY3Bfc3dhcCggRFJNX0lPQ1RMX0FSR1MgKQorc3RhdGljIGludCByYWRlb25fY3Bfc3dhcChEUk1fSU9DVExfQVJHUykKIHsKIAlEUk1fREVWSUNFOwogCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJZHJtX3JhZGVvbl9zYXJlYV90ICpzYXJlYV9wcml2ID0gZGV2X3ByaXYtPnNhcmVhX3ByaXY7Ci0JRFJNX0RFQlVHKCAiXG4iICk7CisJRFJNX0RFQlVHKCJcbiIpOwogCi0JTE9DS19URVNUX1dJVEhfUkVUVVJOKCBkZXYsIGZpbHAgKTsKKwlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxwKTsKIAotCVJJTkdfU1BBQ0VfVEVTVF9XSVRIX1JFVFVSTiggZGV2X3ByaXYgKTsKKwlSSU5HX1NQQUNFX1RFU1RfV0lUSF9SRVRVUk4oZGV2X3ByaXYpOwogCi0JaWYgKCBzYXJlYV9wcml2LT5uYm94ID4gUkFERU9OX05SX1NBUkVBX0NMSVBSRUNUUyApCisJaWYgKHNhcmVhX3ByaXYtPm5ib3ggPiBSQURFT05fTlJfU0FSRUFfQ0xJUFJFQ1RTKQogCQlzYXJlYV9wcml2LT5uYm94ID0gUkFERU9OX05SX1NBUkVBX0NMSVBSRUNUUzsKIAotCXJhZGVvbl9jcF9kaXNwYXRjaF9zd2FwKCBkZXYgKTsKKwlyYWRlb25fY3BfZGlzcGF0Y2hfc3dhcChkZXYpOwogCWRldl9wcml2LT5zYXJlYV9wcml2LT5jdHhfb3duZXIgPSAwOwogCiAJQ09NTUlUX1JJTkcoKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCByYWRlb25fY3BfdmVydGV4KCBEUk1fSU9DVExfQVJHUyApCitzdGF0aWMgaW50IHJhZGVvbl9jcF92ZXJ0ZXgoRFJNX0lPQ1RMX0FSR1MpCiB7CiAJRFJNX0RFVklDRTsKIAlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwpAQCAtMjEyNSw1NSArMjE1Nyw1MyBAQAogCWRybV9yYWRlb25fdmVydGV4X3QgdmVydGV4OwogCWRybV9yYWRlb25fdGNsX3ByaW1fdCBwcmltOwogCi0JTE9DS19URVNUX1dJVEhfUkVUVVJOKCBkZXYsIGZpbHAgKTsKKwlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxwKTsKIAotCURSTV9HRVRfUFJJVl9XSVRIX1JFVFVSTiggZmlscF9wcml2LCBmaWxwICk7CisJRFJNX0dFVF9QUklWX1dJVEhfUkVUVVJOKGZpbHBfcHJpdiwgZmlscCk7CiAKLQlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwoIHZlcnRleCwgKGRybV9yYWRlb25fdmVydGV4X3QgX191c2VyICopZGF0YSwKLQkJCSAgICAgc2l6ZW9mKHZlcnRleCkgKTsKKwlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwodmVydGV4LCAoZHJtX3JhZGVvbl92ZXJ0ZXhfdCBfX3VzZXIgKikgZGF0YSwKKwkJCQkgc2l6ZW9mKHZlcnRleCkpOwogCi0JRFJNX0RFQlVHKCAicGlkPSVkIGluZGV4PSVkIGNvdW50PSVkIGRpc2NhcmQ9JWRcbiIsCi0JCSAgIERSTV9DVVJSRU5UUElELAotCQkgICB2ZXJ0ZXguaWR4LCB2ZXJ0ZXguY291bnQsIHZlcnRleC5kaXNjYXJkICk7CisJRFJNX0RFQlVHKCJwaWQ9JWQgaW5kZXg9JWQgY291bnQ9JWQgZGlzY2FyZD0lZFxuIiwKKwkJICBEUk1fQ1VSUkVOVFBJRCwgdmVydGV4LmlkeCwgdmVydGV4LmNvdW50LCB2ZXJ0ZXguZGlzY2FyZCk7CiAKLQlpZiAoIHZlcnRleC5pZHggPCAwIHx8IHZlcnRleC5pZHggPj0gZG1hLT5idWZfY291bnQgKSB7Ci0JCURSTV9FUlJPUiggImJ1ZmZlciBpbmRleCAlZCAob2YgJWQgbWF4KVxuIiwKLQkJCSAgIHZlcnRleC5pZHgsIGRtYS0+YnVmX2NvdW50IC0gMSApOworCWlmICh2ZXJ0ZXguaWR4IDwgMCB8fCB2ZXJ0ZXguaWR4ID49IGRtYS0+YnVmX2NvdW50KSB7CisJCURSTV9FUlJPUigiYnVmZmVyIGluZGV4ICVkIChvZiAlZCBtYXgpXG4iLAorCQkJICB2ZXJ0ZXguaWR4LCBkbWEtPmJ1Zl9jb3VudCAtIDEpOwogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCX0KLQlpZiAoIHZlcnRleC5wcmltIDwgMCB8fAotCSAgICAgdmVydGV4LnByaW0gPiBSQURFT05fUFJJTV9UWVBFXzNWUlRfTElORV9MSVNUICkgewotCQlEUk1fRVJST1IoICJidWZmZXIgcHJpbSAlZFxuIiwgdmVydGV4LnByaW0gKTsKKwlpZiAodmVydGV4LnByaW0gPCAwIHx8IHZlcnRleC5wcmltID4gUkFERU9OX1BSSU1fVFlQRV8zVlJUX0xJTkVfTElTVCkgeworCQlEUk1fRVJST1IoImJ1ZmZlciBwcmltICVkXG4iLCB2ZXJ0ZXgucHJpbSk7CiAJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiAJfQogCi0JUklOR19TUEFDRV9URVNUX1dJVEhfUkVUVVJOKCBkZXZfcHJpdiApOwotCVZCX0FHRV9URVNUX1dJVEhfUkVUVVJOKCBkZXZfcHJpdiApOworCVJJTkdfU1BBQ0VfVEVTVF9XSVRIX1JFVFVSTihkZXZfcHJpdik7CisJVkJfQUdFX1RFU1RfV0lUSF9SRVRVUk4oZGV2X3ByaXYpOwogCiAJYnVmID0gZG1hLT5idWZsaXN0W3ZlcnRleC5pZHhdOwogCi0JaWYgKCBidWYtPmZpbHAgIT0gZmlscCApIHsKLQkJRFJNX0VSUk9SKCAicHJvY2VzcyAlZCB1c2luZyBidWZmZXIgb3duZWQgYnkgJXBcbiIsCi0JCQkgICBEUk1fQ1VSUkVOVFBJRCwgYnVmLT5maWxwICk7CisJaWYgKGJ1Zi0+ZmlscCAhPSBmaWxwKSB7CisJCURSTV9FUlJPUigicHJvY2VzcyAlZCB1c2luZyBidWZmZXIgb3duZWQgYnkgJXBcbiIsCisJCQkgIERSTV9DVVJSRU5UUElELCBidWYtPmZpbHApOwogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCX0KLQlpZiAoIGJ1Zi0+cGVuZGluZyApIHsKLQkJRFJNX0VSUk9SKCAic2VuZGluZyBwZW5kaW5nIGJ1ZmZlciAlZFxuIiwgdmVydGV4LmlkeCApOworCWlmIChidWYtPnBlbmRpbmcpIHsKKwkJRFJNX0VSUk9SKCJzZW5kaW5nIHBlbmRpbmcgYnVmZmVyICVkXG4iLCB2ZXJ0ZXguaWR4KTsKIAkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAl9CiAKIAkvKiBCdWlsZCB1cCBhIHByaW1fdCByZWNvcmQ6CiAJICovCiAJaWYgKHZlcnRleC5jb3VudCkgewotCQlidWYtPnVzZWQgPSB2ZXJ0ZXguY291bnQ7IC8qIG5vdCB1c2VkPyAqLworCQlidWYtPnVzZWQgPSB2ZXJ0ZXguY291bnQ7CS8qIG5vdCB1c2VkPyAqLwogCi0JCWlmICggc2FyZWFfcHJpdi0+ZGlydHkgJiB+UkFERU9OX1VQTE9BRF9DTElQUkVDVFMgKSB7Ci0JCQlpZiAoIHJhZGVvbl9lbWl0X3N0YXRlKCBkZXZfcHJpdiwgZmlscF9wcml2LAotCQkJCQkJJnNhcmVhX3ByaXYtPmNvbnRleHRfc3RhdGUsCi0JCQkJCQlzYXJlYV9wcml2LT50ZXhfc3RhdGUsCi0JCQkJCQlzYXJlYV9wcml2LT5kaXJ0eSApICkgewotCQkJCURSTV9FUlJPUiggInJhZGVvbl9lbWl0X3N0YXRlIGZhaWxlZFxuIiApOwotCQkJCXJldHVybiBEUk1fRVJSKCBFSU5WQUwgKTsKKwkJaWYgKHNhcmVhX3ByaXYtPmRpcnR5ICYgflJBREVPTl9VUExPQURfQ0xJUFJFQ1RTKSB7CisJCQlpZiAocmFkZW9uX2VtaXRfc3RhdGUoZGV2X3ByaXYsIGZpbHBfcHJpdiwKKwkJCQkJICAgICAgJnNhcmVhX3ByaXYtPmNvbnRleHRfc3RhdGUsCisJCQkJCSAgICAgIHNhcmVhX3ByaXYtPnRleF9zdGF0ZSwKKwkJCQkJICAgICAgc2FyZWFfcHJpdi0+ZGlydHkpKSB7CisJCQkJRFJNX0VSUk9SKCJyYWRlb25fZW1pdF9zdGF0ZSBmYWlsZWRcbiIpOworCQkJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiAJCQl9CiAKIAkJCXNhcmVhX3ByaXYtPmRpcnR5ICY9IH4oUkFERU9OX1VQTE9BRF9URVgwSU1BR0VTIHwKQEAgLTIxODMsMjMgKzIyMTMsMjMgQEAKIAkJfQogCiAJCXByaW0uc3RhcnQgPSAwOwotCQlwcmltLmZpbmlzaCA9IHZlcnRleC5jb3VudDsgLyogdW51c2VkICovCisJCXByaW0uZmluaXNoID0gdmVydGV4LmNvdW50OwkvKiB1bnVzZWQgKi8KIAkJcHJpbS5wcmltID0gdmVydGV4LnByaW07CiAJCXByaW0ubnVtdmVydHMgPSB2ZXJ0ZXguY291bnQ7CiAJCXByaW0udmNfZm9ybWF0ID0gZGV2X3ByaXYtPnNhcmVhX3ByaXYtPnZjX2Zvcm1hdDsKLQkJCi0JCXJhZGVvbl9jcF9kaXNwYXRjaF92ZXJ0ZXgoIGRldiwgYnVmLCAmcHJpbSApOworCisJCXJhZGVvbl9jcF9kaXNwYXRjaF92ZXJ0ZXgoZGV2LCBidWYsICZwcmltKTsKIAl9CiAKIAlpZiAodmVydGV4LmRpc2NhcmQpIHsKLQkJcmFkZW9uX2NwX2Rpc2NhcmRfYnVmZmVyKCBkZXYsIGJ1ZiApOworCQlyYWRlb25fY3BfZGlzY2FyZF9idWZmZXIoZGV2LCBidWYpOwogCX0KIAogCUNPTU1JVF9SSU5HKCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcmFkZW9uX2NwX2luZGljZXMoIERSTV9JT0NUTF9BUkdTICkKK3N0YXRpYyBpbnQgcmFkZW9uX2NwX2luZGljZXMoRFJNX0lPQ1RMX0FSR1MpCiB7CiAJRFJNX0RFVklDRTsKIAlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwpAQCAtMjIxMSw2OSArMjI0MSw2NyBAQAogCWRybV9yYWRlb25fdGNsX3ByaW1fdCBwcmltOwogCWludCBjb3VudDsKIAotCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTiggZGV2LCBmaWxwICk7CisJTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlscCk7CiAKLQlpZiAoICFkZXZfcHJpdiApIHsKLQkJRFJNX0VSUk9SKCAiJXMgY2FsbGVkIHdpdGggbm8gaW5pdGlhbGl6YXRpb25cbiIsIF9fRlVOQ1RJT05fXyApOworCWlmICghZGV2X3ByaXYpIHsKKwkJRFJNX0VSUk9SKCIlcyBjYWxsZWQgd2l0aCBubyBpbml0aWFsaXphdGlvblxuIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAl9CiAKLQlEUk1fR0VUX1BSSVZfV0lUSF9SRVRVUk4oIGZpbHBfcHJpdiwgZmlscCApOworCURSTV9HRVRfUFJJVl9XSVRIX1JFVFVSTihmaWxwX3ByaXYsIGZpbHApOwogCi0JRFJNX0NPUFlfRlJPTV9VU0VSX0lPQ1RMKCBlbHRzLCAoZHJtX3JhZGVvbl9pbmRpY2VzX3QgX191c2VyICopZGF0YSwKLQkJCSAgICAgc2l6ZW9mKGVsdHMpICk7CisJRFJNX0NPUFlfRlJPTV9VU0VSX0lPQ1RMKGVsdHMsIChkcm1fcmFkZW9uX2luZGljZXNfdCBfX3VzZXIgKikgZGF0YSwKKwkJCQkgc2l6ZW9mKGVsdHMpKTsKIAotCURSTV9ERUJVRyggInBpZD0lZCBpbmRleD0lZCBzdGFydD0lZCBlbmQ9JWQgZGlzY2FyZD0lZFxuIiwKLQkJICAgRFJNX0NVUlJFTlRQSUQsCi0JCSAgIGVsdHMuaWR4LCBlbHRzLnN0YXJ0LCBlbHRzLmVuZCwgZWx0cy5kaXNjYXJkICk7CisJRFJNX0RFQlVHKCJwaWQ9JWQgaW5kZXg9JWQgc3RhcnQ9JWQgZW5kPSVkIGRpc2NhcmQ9JWRcbiIsCisJCSAgRFJNX0NVUlJFTlRQSUQsIGVsdHMuaWR4LCBlbHRzLnN0YXJ0LCBlbHRzLmVuZCwgZWx0cy5kaXNjYXJkKTsKIAotCWlmICggZWx0cy5pZHggPCAwIHx8IGVsdHMuaWR4ID49IGRtYS0+YnVmX2NvdW50ICkgewotCQlEUk1fRVJST1IoICJidWZmZXIgaW5kZXggJWQgKG9mICVkIG1heClcbiIsCi0JCQkgICBlbHRzLmlkeCwgZG1hLT5idWZfY291bnQgLSAxICk7CisJaWYgKGVsdHMuaWR4IDwgMCB8fCBlbHRzLmlkeCA+PSBkbWEtPmJ1Zl9jb3VudCkgeworCQlEUk1fRVJST1IoImJ1ZmZlciBpbmRleCAlZCAob2YgJWQgbWF4KVxuIiwKKwkJCSAgZWx0cy5pZHgsIGRtYS0+YnVmX2NvdW50IC0gMSk7CiAJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiAJfQotCWlmICggZWx0cy5wcmltIDwgMCB8fAotCSAgICAgZWx0cy5wcmltID4gUkFERU9OX1BSSU1fVFlQRV8zVlJUX0xJTkVfTElTVCApIHsKLQkJRFJNX0VSUk9SKCAiYnVmZmVyIHByaW0gJWRcbiIsIGVsdHMucHJpbSApOworCWlmIChlbHRzLnByaW0gPCAwIHx8IGVsdHMucHJpbSA+IFJBREVPTl9QUklNX1RZUEVfM1ZSVF9MSU5FX0xJU1QpIHsKKwkJRFJNX0VSUk9SKCJidWZmZXIgcHJpbSAlZFxuIiwgZWx0cy5wcmltKTsKIAkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAl9CiAKLQlSSU5HX1NQQUNFX1RFU1RfV0lUSF9SRVRVUk4oIGRldl9wcml2ICk7Ci0JVkJfQUdFX1RFU1RfV0lUSF9SRVRVUk4oIGRldl9wcml2ICk7CisJUklOR19TUEFDRV9URVNUX1dJVEhfUkVUVVJOKGRldl9wcml2KTsKKwlWQl9BR0VfVEVTVF9XSVRIX1JFVFVSTihkZXZfcHJpdik7CiAKIAlidWYgPSBkbWEtPmJ1Zmxpc3RbZWx0cy5pZHhdOwogCi0JaWYgKCBidWYtPmZpbHAgIT0gZmlscCApIHsKLQkJRFJNX0VSUk9SKCAicHJvY2VzcyAlZCB1c2luZyBidWZmZXIgb3duZWQgYnkgJXBcbiIsCi0JCQkgICBEUk1fQ1VSUkVOVFBJRCwgYnVmLT5maWxwICk7CisJaWYgKGJ1Zi0+ZmlscCAhPSBmaWxwKSB7CisJCURSTV9FUlJPUigicHJvY2VzcyAlZCB1c2luZyBidWZmZXIgb3duZWQgYnkgJXBcbiIsCisJCQkgIERSTV9DVVJSRU5UUElELCBidWYtPmZpbHApOwogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCX0KLQlpZiAoIGJ1Zi0+cGVuZGluZyApIHsKLQkJRFJNX0VSUk9SKCAic2VuZGluZyBwZW5kaW5nIGJ1ZmZlciAlZFxuIiwgZWx0cy5pZHggKTsKKwlpZiAoYnVmLT5wZW5kaW5nKSB7CisJCURSTV9FUlJPUigic2VuZGluZyBwZW5kaW5nIGJ1ZmZlciAlZFxuIiwgZWx0cy5pZHgpOwogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCX0KIAogCWNvdW50ID0gKGVsdHMuZW5kIC0gZWx0cy5zdGFydCkgLyBzaXplb2YodTE2KTsKIAllbHRzLnN0YXJ0IC09IFJBREVPTl9JTkRFWF9QUklNX09GRlNFVDsKIAotCWlmICggZWx0cy5zdGFydCAmIDB4NyApIHsKLQkJRFJNX0VSUk9SKCAibWlzYWxpZ25lZCBidWZmZXIgMHgleFxuIiwgZWx0cy5zdGFydCApOworCWlmIChlbHRzLnN0YXJ0ICYgMHg3KSB7CisJCURSTV9FUlJPUigibWlzYWxpZ25lZCBidWZmZXIgMHgleFxuIiwgZWx0cy5zdGFydCk7CiAJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiAJfQotCWlmICggZWx0cy5zdGFydCA8IGJ1Zi0+dXNlZCApIHsKLQkJRFJNX0VSUk9SKCAibm8gaGVhZGVyIDB4JXggLSAweCV4XG4iLCBlbHRzLnN0YXJ0LCBidWYtPnVzZWQgKTsKKwlpZiAoZWx0cy5zdGFydCA8IGJ1Zi0+dXNlZCkgeworCQlEUk1fRVJST1IoIm5vIGhlYWRlciAweCV4IC0gMHgleFxuIiwgZWx0cy5zdGFydCwgYnVmLT51c2VkKTsKIAkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAl9CiAKIAlidWYtPnVzZWQgPSBlbHRzLmVuZDsKIAotCWlmICggc2FyZWFfcHJpdi0+ZGlydHkgJiB+UkFERU9OX1VQTE9BRF9DTElQUkVDVFMgKSB7Ci0JCWlmICggcmFkZW9uX2VtaXRfc3RhdGUoIGRldl9wcml2LCBmaWxwX3ByaXYsCi0JCQkJCSZzYXJlYV9wcml2LT5jb250ZXh0X3N0YXRlLAotCQkJCQlzYXJlYV9wcml2LT50ZXhfc3RhdGUsCi0JCQkJCXNhcmVhX3ByaXYtPmRpcnR5ICkgKSB7Ci0JCQlEUk1fRVJST1IoICJyYWRlb25fZW1pdF9zdGF0ZSBmYWlsZWRcbiIgKTsKLQkJCXJldHVybiBEUk1fRVJSKCBFSU5WQUwgKTsKKwlpZiAoc2FyZWFfcHJpdi0+ZGlydHkgJiB+UkFERU9OX1VQTE9BRF9DTElQUkVDVFMpIHsKKwkJaWYgKHJhZGVvbl9lbWl0X3N0YXRlKGRldl9wcml2LCBmaWxwX3ByaXYsCisJCQkJICAgICAgJnNhcmVhX3ByaXYtPmNvbnRleHRfc3RhdGUsCisJCQkJICAgICAgc2FyZWFfcHJpdi0+dGV4X3N0YXRlLAorCQkJCSAgICAgIHNhcmVhX3ByaXYtPmRpcnR5KSkgeworCQkJRFJNX0VSUk9SKCJyYWRlb25fZW1pdF9zdGF0ZSBmYWlsZWRcbiIpOworCQkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAkJfQogCiAJCXNhcmVhX3ByaXYtPmRpcnR5ICY9IH4oUkFERU9OX1VQTE9BRF9URVgwSU1BR0VTIHwKQEAgLTIyODIsMjYgKzIzMTAsMjUgQEAKIAkJCQkgICAgICAgUkFERU9OX1JFUVVJUkVfUVVJRVNDRU5DRSk7CiAJfQogCi0KIAkvKiBCdWlsZCB1cCBhIHByaW1fdCByZWNvcmQ6CiAJICovCiAJcHJpbS5zdGFydCA9IGVsdHMuc3RhcnQ7Ci0JcHJpbS5maW5pc2ggPSBlbHRzLmVuZDsgCisJcHJpbS5maW5pc2ggPSBlbHRzLmVuZDsKIAlwcmltLnByaW0gPSBlbHRzLnByaW07CiAJcHJpbS5vZmZzZXQgPSAwOwkvKiBvZmZzZXQgZnJvbSBzdGFydCBvZiBkbWEgYnVmZmVycyAqLwotCXByaW0ubnVtdmVydHMgPSBSQURFT05fTUFYX1ZCX1ZFUlRTOyAvKiBkdWggKi8KKwlwcmltLm51bXZlcnRzID0gUkFERU9OX01BWF9WQl9WRVJUUzsJLyogZHVoICovCiAJcHJpbS52Y19mb3JtYXQgPSBkZXZfcHJpdi0+c2FyZWFfcHJpdi0+dmNfZm9ybWF0OwotCQotCXJhZGVvbl9jcF9kaXNwYXRjaF9pbmRpY2VzKCBkZXYsIGJ1ZiwgJnByaW0gKTsKKworCXJhZGVvbl9jcF9kaXNwYXRjaF9pbmRpY2VzKGRldiwgYnVmLCAmcHJpbSk7CiAJaWYgKGVsdHMuZGlzY2FyZCkgewotCQlyYWRlb25fY3BfZGlzY2FyZF9idWZmZXIoIGRldiwgYnVmICk7CisJCXJhZGVvbl9jcF9kaXNjYXJkX2J1ZmZlcihkZXYsIGJ1Zik7CiAJfQogCiAJQ09NTUlUX1JJTkcoKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCByYWRlb25fY3BfdGV4dHVyZSggRFJNX0lPQ1RMX0FSR1MgKQorc3RhdGljIGludCByYWRlb25fY3BfdGV4dHVyZShEUk1fSU9DVExfQVJHUykKIHsKIAlEUk1fREVWSUNFOwogCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CkBAIC0yMzA5LDUzICsyMzM2LDU0IEBACiAJZHJtX3JhZGVvbl90ZXhfaW1hZ2VfdCBpbWFnZTsKIAlpbnQgcmV0OwogCi0JTE9DS19URVNUX1dJVEhfUkVUVVJOKCBkZXYsIGZpbHAgKTsKKwlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxwKTsKIAotCURSTV9DT1BZX0ZST01fVVNFUl9JT0NUTCggdGV4LCAoZHJtX3JhZGVvbl90ZXh0dXJlX3QgX191c2VyICopZGF0YSwgc2l6ZW9mKHRleCkgKTsKKwlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwodGV4LCAoZHJtX3JhZGVvbl90ZXh0dXJlX3QgX191c2VyICopIGRhdGEsCisJCQkJIHNpemVvZih0ZXgpKTsKIAotCWlmICggdGV4LmltYWdlID09IE5VTEwgKSB7Ci0JCURSTV9FUlJPUiggIm51bGwgdGV4dHVyZSBpbWFnZSFcbiIgKTsKKwlpZiAodGV4LmltYWdlID09IE5VTEwpIHsKKwkJRFJNX0VSUk9SKCJudWxsIHRleHR1cmUgaW1hZ2UhXG4iKTsKIAkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAl9CiAKLQlpZiAoIERSTV9DT1BZX0ZST01fVVNFUiggJmltYWdlLAotCQkJICAgICAoZHJtX3JhZGVvbl90ZXhfaW1hZ2VfdCBfX3VzZXIgKil0ZXguaW1hZ2UsCi0JCQkgICAgIHNpemVvZihpbWFnZSkgKSApCisJaWYgKERSTV9DT1BZX0ZST01fVVNFUigmaW1hZ2UsCisJCQkgICAgICAgKGRybV9yYWRlb25fdGV4X2ltYWdlX3QgX191c2VyICopIHRleC5pbWFnZSwKKwkJCSAgICAgICBzaXplb2YoaW1hZ2UpKSkKIAkJcmV0dXJuIERSTV9FUlIoRUZBVUxUKTsKIAotCVJJTkdfU1BBQ0VfVEVTVF9XSVRIX1JFVFVSTiggZGV2X3ByaXYgKTsKLQlWQl9BR0VfVEVTVF9XSVRIX1JFVFVSTiggZGV2X3ByaXYgKTsKKwlSSU5HX1NQQUNFX1RFU1RfV0lUSF9SRVRVUk4oZGV2X3ByaXYpOworCVZCX0FHRV9URVNUX1dJVEhfUkVUVVJOKGRldl9wcml2KTsKIAotCXJldCA9IHJhZGVvbl9jcF9kaXNwYXRjaF90ZXh0dXJlKCBmaWxwLCBkZXYsICZ0ZXgsICZpbWFnZSApOworCXJldCA9IHJhZGVvbl9jcF9kaXNwYXRjaF90ZXh0dXJlKGZpbHAsIGRldiwgJnRleCwgJmltYWdlKTsKIAogCUNPTU1JVF9SSU5HKCk7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCByYWRlb25fY3Bfc3RpcHBsZSggRFJNX0lPQ1RMX0FSR1MgKQorc3RhdGljIGludCByYWRlb25fY3Bfc3RpcHBsZShEUk1fSU9DVExfQVJHUykKIHsKIAlEUk1fREVWSUNFOwogCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJZHJtX3JhZGVvbl9zdGlwcGxlX3Qgc3RpcHBsZTsKIAl1MzIgbWFza1szMl07CiAKLQlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oIGRldiwgZmlscCApOworCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbHApOwogCi0JRFJNX0NPUFlfRlJPTV9VU0VSX0lPQ1RMKCBzdGlwcGxlLCAoZHJtX3JhZGVvbl9zdGlwcGxlX3QgX191c2VyICopZGF0YSwKLQkJCSAgICAgc2l6ZW9mKHN0aXBwbGUpICk7CisJRFJNX0NPUFlfRlJPTV9VU0VSX0lPQ1RMKHN0aXBwbGUsIChkcm1fcmFkZW9uX3N0aXBwbGVfdCBfX3VzZXIgKikgZGF0YSwKKwkJCQkgc2l6ZW9mKHN0aXBwbGUpKTsKIAotCWlmICggRFJNX0NPUFlfRlJPTV9VU0VSKCAmbWFzaywgc3RpcHBsZS5tYXNrLCAzMiAqIHNpemVvZih1MzIpICkgKQorCWlmIChEUk1fQ09QWV9GUk9NX1VTRVIoJm1hc2ssIHN0aXBwbGUubWFzaywgMzIgKiBzaXplb2YodTMyKSkpCiAJCXJldHVybiBEUk1fRVJSKEVGQVVMVCk7CiAKLQlSSU5HX1NQQUNFX1RFU1RfV0lUSF9SRVRVUk4oIGRldl9wcml2ICk7CisJUklOR19TUEFDRV9URVNUX1dJVEhfUkVUVVJOKGRldl9wcml2KTsKIAotCXJhZGVvbl9jcF9kaXNwYXRjaF9zdGlwcGxlKCBkZXYsIG1hc2sgKTsKKwlyYWRlb25fY3BfZGlzcGF0Y2hfc3RpcHBsZShkZXYsIG1hc2spOwogCiAJQ09NTUlUX1JJTkcoKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCByYWRlb25fY3BfaW5kaXJlY3QoIERSTV9JT0NUTF9BUkdTICkKK3N0YXRpYyBpbnQgcmFkZW9uX2NwX2luZGlyZWN0KERSTV9JT0NUTF9BUkdTKQogewogCURSTV9ERVZJQ0U7CiAJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKQEAgLTIzNjQsNTMgKzIzOTIsNTMgQEAKIAlkcm1fcmFkZW9uX2luZGlyZWN0X3QgaW5kaXJlY3Q7CiAJUklOR19MT0NBTFM7CiAKLQlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oIGRldiwgZmlscCApOworCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbHApOwogCi0JaWYgKCAhZGV2X3ByaXYgKSB7Ci0JCURSTV9FUlJPUiggIiVzIGNhbGxlZCB3aXRoIG5vIGluaXRpYWxpemF0aW9uXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwlpZiAoIWRldl9wcml2KSB7CisJCURSTV9FUlJPUigiJXMgY2FsbGVkIHdpdGggbm8gaW5pdGlhbGl6YXRpb25cbiIsIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiAJfQogCi0JRFJNX0NPUFlfRlJPTV9VU0VSX0lPQ1RMKCBpbmRpcmVjdCwgKGRybV9yYWRlb25faW5kaXJlY3RfdCBfX3VzZXIgKilkYXRhLAotCQkJICAgICBzaXplb2YoaW5kaXJlY3QpICk7CisJRFJNX0NPUFlfRlJPTV9VU0VSX0lPQ1RMKGluZGlyZWN0LAorCQkJCSAoZHJtX3JhZGVvbl9pbmRpcmVjdF90IF9fdXNlciAqKSBkYXRhLAorCQkJCSBzaXplb2YoaW5kaXJlY3QpKTsKIAotCURSTV9ERUJVRyggImluZGlyZWN0OiBpZHg9JWQgcz0lZCBlPSVkIGQ9JWRcbiIsCi0JCSAgIGluZGlyZWN0LmlkeCwgaW5kaXJlY3Quc3RhcnQsCi0JCSAgIGluZGlyZWN0LmVuZCwgaW5kaXJlY3QuZGlzY2FyZCApOworCURSTV9ERUJVRygiaW5kaXJlY3Q6IGlkeD0lZCBzPSVkIGU9JWQgZD0lZFxuIiwKKwkJICBpbmRpcmVjdC5pZHgsIGluZGlyZWN0LnN0YXJ0LCBpbmRpcmVjdC5lbmQsIGluZGlyZWN0LmRpc2NhcmQpOwogCi0JaWYgKCBpbmRpcmVjdC5pZHggPCAwIHx8IGluZGlyZWN0LmlkeCA+PSBkbWEtPmJ1Zl9jb3VudCApIHsKLQkJRFJNX0VSUk9SKCAiYnVmZmVyIGluZGV4ICVkIChvZiAlZCBtYXgpXG4iLAotCQkJICAgaW5kaXJlY3QuaWR4LCBkbWEtPmJ1Zl9jb3VudCAtIDEgKTsKKwlpZiAoaW5kaXJlY3QuaWR4IDwgMCB8fCBpbmRpcmVjdC5pZHggPj0gZG1hLT5idWZfY291bnQpIHsKKwkJRFJNX0VSUk9SKCJidWZmZXIgaW5kZXggJWQgKG9mICVkIG1heClcbiIsCisJCQkgIGluZGlyZWN0LmlkeCwgZG1hLT5idWZfY291bnQgLSAxKTsKIAkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAl9CiAKIAlidWYgPSBkbWEtPmJ1Zmxpc3RbaW5kaXJlY3QuaWR4XTsKIAotCWlmICggYnVmLT5maWxwICE9IGZpbHAgKSB7Ci0JCURSTV9FUlJPUiggInByb2Nlc3MgJWQgdXNpbmcgYnVmZmVyIG93bmVkIGJ5ICVwXG4iLAotCQkJICAgRFJNX0NVUlJFTlRQSUQsIGJ1Zi0+ZmlscCApOworCWlmIChidWYtPmZpbHAgIT0gZmlscCkgeworCQlEUk1fRVJST1IoInByb2Nlc3MgJWQgdXNpbmcgYnVmZmVyIG93bmVkIGJ5ICVwXG4iLAorCQkJICBEUk1fQ1VSUkVOVFBJRCwgYnVmLT5maWxwKTsKIAkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAl9Ci0JaWYgKCBidWYtPnBlbmRpbmcgKSB7Ci0JCURSTV9FUlJPUiggInNlbmRpbmcgcGVuZGluZyBidWZmZXIgJWRcbiIsIGluZGlyZWN0LmlkeCApOworCWlmIChidWYtPnBlbmRpbmcpIHsKKwkJRFJNX0VSUk9SKCJzZW5kaW5nIHBlbmRpbmcgYnVmZmVyICVkXG4iLCBpbmRpcmVjdC5pZHgpOwogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCX0KIAotCWlmICggaW5kaXJlY3Quc3RhcnQgPCBidWYtPnVzZWQgKSB7Ci0JCURSTV9FUlJPUiggInJldXNpbmcgaW5kaXJlY3Q6IHN0YXJ0PTB4JXggYWN0dWFsPTB4JXhcbiIsCi0JCQkgICBpbmRpcmVjdC5zdGFydCwgYnVmLT51c2VkICk7CisJaWYgKGluZGlyZWN0LnN0YXJ0IDwgYnVmLT51c2VkKSB7CisJCURSTV9FUlJPUigicmV1c2luZyBpbmRpcmVjdDogc3RhcnQ9MHgleCBhY3R1YWw9MHgleFxuIiwKKwkJCSAgaW5kaXJlY3Quc3RhcnQsIGJ1Zi0+dXNlZCk7CiAJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiAJfQogCi0JUklOR19TUEFDRV9URVNUX1dJVEhfUkVUVVJOKCBkZXZfcHJpdiApOwotCVZCX0FHRV9URVNUX1dJVEhfUkVUVVJOKCBkZXZfcHJpdiApOworCVJJTkdfU1BBQ0VfVEVTVF9XSVRIX1JFVFVSTihkZXZfcHJpdik7CisJVkJfQUdFX1RFU1RfV0lUSF9SRVRVUk4oZGV2X3ByaXYpOwogCiAJYnVmLT51c2VkID0gaW5kaXJlY3QuZW5kOwogCiAJLyogV2FpdCBmb3IgdGhlIDNEIHN0cmVhbSB0byBpZGxlIGJlZm9yZSB0aGUgaW5kaXJlY3QgYnVmZmVyCiAJICogY29udGFpbmluZyAyRCBhY2NlbGVyYXRpb24gY29tbWFuZHMgaXMgcHJvY2Vzc2VkLgogCSAqLwotCUJFR0lOX1JJTkcoIDIgKTsKKwlCRUdJTl9SSU5HKDIpOwogCiAJUkFERU9OX1dBSVRfVU5USUxfM0RfSURMRSgpOwogCkBAIC0yNDIwLDE3ICsyNDQ4LDE2IEBACiAJICogWCBzZXJ2ZXIuICBUaGlzIGlzIGluc2VjdXJlIGFuZCBpcyB0aHVzIG9ubHkgYXZhaWxhYmxlIHRvCiAJICogcHJpdmlsZWdlZCBjbGllbnRzLgogCSAqLwotCXJhZGVvbl9jcF9kaXNwYXRjaF9pbmRpcmVjdCggZGV2LCBidWYsIGluZGlyZWN0LnN0YXJ0LCBpbmRpcmVjdC5lbmQgKTsKKwlyYWRlb25fY3BfZGlzcGF0Y2hfaW5kaXJlY3QoZGV2LCBidWYsIGluZGlyZWN0LnN0YXJ0LCBpbmRpcmVjdC5lbmQpOwogCWlmIChpbmRpcmVjdC5kaXNjYXJkKSB7Ci0JCXJhZGVvbl9jcF9kaXNjYXJkX2J1ZmZlciggZGV2LCBidWYgKTsKKwkJcmFkZW9uX2NwX2Rpc2NhcmRfYnVmZmVyKGRldiwgYnVmKTsKIAl9CiAKLQogCUNPTU1JVF9SSU5HKCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcmFkZW9uX2NwX3ZlcnRleDIoIERSTV9JT0NUTF9BUkdTICkKK3N0YXRpYyBpbnQgcmFkZW9uX2NwX3ZlcnRleDIoRFJNX0lPQ1RMX0FSR1MpCiB7CiAJRFJNX0RFVklDRTsKIAlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwpAQCAtMjQ0Miw2NSArMjQ2OSw2NCBAQAogCWludCBpOwogCXVuc2lnbmVkIGNoYXIgbGFzdHN0YXRlOwogCi0JTE9DS19URVNUX1dJVEhfUkVUVVJOKCBkZXYsIGZpbHAgKTsKKwlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxwKTsKIAotCWlmICggIWRldl9wcml2ICkgewotCQlEUk1fRVJST1IoICIlcyBjYWxsZWQgd2l0aCBubyBpbml0aWFsaXphdGlvblxuIiwgX19GVU5DVElPTl9fICk7CisJaWYgKCFkZXZfcHJpdikgeworCQlEUk1fRVJST1IoIiVzIGNhbGxlZCB3aXRoIG5vIGluaXRpYWxpemF0aW9uXG4iLCBfX0ZVTkNUSU9OX18pOwogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCX0KIAotCURSTV9HRVRfUFJJVl9XSVRIX1JFVFVSTiggZmlscF9wcml2LCBmaWxwICk7CisJRFJNX0dFVF9QUklWX1dJVEhfUkVUVVJOKGZpbHBfcHJpdiwgZmlscCk7CiAKLQlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwoIHZlcnRleCwgKGRybV9yYWRlb25fdmVydGV4Ml90IF9fdXNlciAqKWRhdGEsCi0JCQkgICAgIHNpemVvZih2ZXJ0ZXgpICk7CisJRFJNX0NPUFlfRlJPTV9VU0VSX0lPQ1RMKHZlcnRleCwgKGRybV9yYWRlb25fdmVydGV4Ml90IF9fdXNlciAqKSBkYXRhLAorCQkJCSBzaXplb2YodmVydGV4KSk7CiAKLQlEUk1fREVCVUcoICJwaWQ9JWQgaW5kZXg9JWQgZGlzY2FyZD0lZFxuIiwKLQkJICAgRFJNX0NVUlJFTlRQSUQsCi0JCSAgIHZlcnRleC5pZHgsIHZlcnRleC5kaXNjYXJkICk7CisJRFJNX0RFQlVHKCJwaWQ9JWQgaW5kZXg9JWQgZGlzY2FyZD0lZFxuIiwKKwkJICBEUk1fQ1VSUkVOVFBJRCwgdmVydGV4LmlkeCwgdmVydGV4LmRpc2NhcmQpOwogCi0JaWYgKCB2ZXJ0ZXguaWR4IDwgMCB8fCB2ZXJ0ZXguaWR4ID49IGRtYS0+YnVmX2NvdW50ICkgewotCQlEUk1fRVJST1IoICJidWZmZXIgaW5kZXggJWQgKG9mICVkIG1heClcbiIsCi0JCQkgICB2ZXJ0ZXguaWR4LCBkbWEtPmJ1Zl9jb3VudCAtIDEgKTsKKwlpZiAodmVydGV4LmlkeCA8IDAgfHwgdmVydGV4LmlkeCA+PSBkbWEtPmJ1Zl9jb3VudCkgeworCQlEUk1fRVJST1IoImJ1ZmZlciBpbmRleCAlZCAob2YgJWQgbWF4KVxuIiwKKwkJCSAgdmVydGV4LmlkeCwgZG1hLT5idWZfY291bnQgLSAxKTsKIAkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAl9CiAKLQlSSU5HX1NQQUNFX1RFU1RfV0lUSF9SRVRVUk4oIGRldl9wcml2ICk7Ci0JVkJfQUdFX1RFU1RfV0lUSF9SRVRVUk4oIGRldl9wcml2ICk7CisJUklOR19TUEFDRV9URVNUX1dJVEhfUkVUVVJOKGRldl9wcml2KTsKKwlWQl9BR0VfVEVTVF9XSVRIX1JFVFVSTihkZXZfcHJpdik7CiAKIAlidWYgPSBkbWEtPmJ1Zmxpc3RbdmVydGV4LmlkeF07CiAKLQlpZiAoIGJ1Zi0+ZmlscCAhPSBmaWxwICkgewotCQlEUk1fRVJST1IoICJwcm9jZXNzICVkIHVzaW5nIGJ1ZmZlciBvd25lZCBieSAlcFxuIiwKLQkJCSAgIERSTV9DVVJSRU5UUElELCBidWYtPmZpbHAgKTsKKwlpZiAoYnVmLT5maWxwICE9IGZpbHApIHsKKwkJRFJNX0VSUk9SKCJwcm9jZXNzICVkIHVzaW5nIGJ1ZmZlciBvd25lZCBieSAlcFxuIiwKKwkJCSAgRFJNX0NVUlJFTlRQSUQsIGJ1Zi0+ZmlscCk7CiAJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiAJfQogCi0JaWYgKCBidWYtPnBlbmRpbmcgKSB7Ci0JCURSTV9FUlJPUiggInNlbmRpbmcgcGVuZGluZyBidWZmZXIgJWRcbiIsIHZlcnRleC5pZHggKTsKKwlpZiAoYnVmLT5wZW5kaW5nKSB7CisJCURSTV9FUlJPUigic2VuZGluZyBwZW5kaW5nIGJ1ZmZlciAlZFxuIiwgdmVydGV4LmlkeCk7CiAJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiAJfQotCQorCiAJaWYgKHNhcmVhX3ByaXYtPm5ib3ggPiBSQURFT05fTlJfU0FSRUFfQ0xJUFJFQ1RTKQogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCi0JZm9yIChsYXN0c3RhdGUgPSAweGZmLCBpID0gMCA7IGkgPCB2ZXJ0ZXgubnJfcHJpbXMgOyBpKyspIHsKKwlmb3IgKGxhc3RzdGF0ZSA9IDB4ZmYsIGkgPSAwOyBpIDwgdmVydGV4Lm5yX3ByaW1zOyBpKyspIHsKIAkJZHJtX3JhZGVvbl9wcmltX3QgcHJpbTsKIAkJZHJtX3JhZGVvbl90Y2xfcHJpbV90IHRjbHByaW07Ci0JCQotCQlpZiAoIERSTV9DT1BZX0ZST01fVVNFUiggJnByaW0sICZ2ZXJ0ZXgucHJpbVtpXSwgc2l6ZW9mKHByaW0pICkgKQorCisJCWlmIChEUk1fQ09QWV9GUk9NX1VTRVIoJnByaW0sICZ2ZXJ0ZXgucHJpbVtpXSwgc2l6ZW9mKHByaW0pKSkKIAkJCXJldHVybiBEUk1fRVJSKEVGQVVMVCk7Ci0JCQotCQlpZiAoIHByaW0uc3RhdGVpZHggIT0gbGFzdHN0YXRlICkgewotCQkJZHJtX3JhZGVvbl9zdGF0ZV90IHN0YXRlOwkJCSAgICAgICAKLQkJCQkKLQkJCWlmICggRFJNX0NPUFlfRlJPTV9VU0VSKCAmc3RhdGUsIAotCQkJCQkgICAgICZ2ZXJ0ZXguc3RhdGVbcHJpbS5zdGF0ZWlkeF0sIAotCQkJCQkgICAgIHNpemVvZihzdGF0ZSkgKSApCisKKwkJaWYgKHByaW0uc3RhdGVpZHggIT0gbGFzdHN0YXRlKSB7CisJCQlkcm1fcmFkZW9uX3N0YXRlX3Qgc3RhdGU7CisKKwkJCWlmIChEUk1fQ09QWV9GUk9NX1VTRVIoJnN0YXRlLAorCQkJCQkgICAgICAgJnZlcnRleC5zdGF0ZVtwcmltLnN0YXRlaWR4XSwKKwkJCQkJICAgICAgIHNpemVvZihzdGF0ZSkpKQogCQkJCXJldHVybiBEUk1fRVJSKEVGQVVMVCk7CiAKLQkJCWlmICggcmFkZW9uX2VtaXRfc3RhdGUyKCBkZXZfcHJpdiwgZmlscF9wcml2LCAmc3RhdGUgKSApIHsKLQkJCQlEUk1fRVJST1IoICJyYWRlb25fZW1pdF9zdGF0ZTIgZmFpbGVkXG4iICk7Ci0JCQkJcmV0dXJuIERSTV9FUlIoIEVJTlZBTCApOworCQkJaWYgKHJhZGVvbl9lbWl0X3N0YXRlMihkZXZfcHJpdiwgZmlscF9wcml2LCAmc3RhdGUpKSB7CisJCQkJRFJNX0VSUk9SKCJyYWRlb25fZW1pdF9zdGF0ZTIgZmFpbGVkXG4iKTsKKwkJCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCQkJfQogCiAJCQlsYXN0c3RhdGUgPSBwcmltLnN0YXRlaWR4OwpAQCAtMjUxMSw0MiArMjUzNyw0MCBAQAogCQl0Y2xwcmltLnByaW0gPSBwcmltLnByaW07CiAJCXRjbHByaW0udmNfZm9ybWF0ID0gcHJpbS52Y19mb3JtYXQ7CiAKLQkJaWYgKCBwcmltLnByaW0gJiBSQURFT05fUFJJTV9XQUxLX0lORCApIHsKKwkJaWYgKHByaW0ucHJpbSAmIFJBREVPTl9QUklNX1dBTEtfSU5EKSB7CiAJCQl0Y2xwcmltLm9mZnNldCA9IHByaW0ubnVtdmVydHMgKiA2NDsKLQkJCXRjbHByaW0ubnVtdmVydHMgPSBSQURFT05fTUFYX1ZCX1ZFUlRTOyAvKiBkdWggKi8KKwkJCXRjbHByaW0ubnVtdmVydHMgPSBSQURFT05fTUFYX1ZCX1ZFUlRTOwkvKiBkdWggKi8KIAotCQkJcmFkZW9uX2NwX2Rpc3BhdGNoX2luZGljZXMoIGRldiwgYnVmLCAmdGNscHJpbSApOworCQkJcmFkZW9uX2NwX2Rpc3BhdGNoX2luZGljZXMoZGV2LCBidWYsICZ0Y2xwcmltKTsKIAkJfSBlbHNlIHsKIAkJCXRjbHByaW0ubnVtdmVydHMgPSBwcmltLm51bXZlcnRzOwotCQkJdGNscHJpbS5vZmZzZXQgPSAwOyAvKiBub3QgdXNlZCAqLworCQkJdGNscHJpbS5vZmZzZXQgPSAwOwkvKiBub3QgdXNlZCAqLwogCi0JCQlyYWRlb25fY3BfZGlzcGF0Y2hfdmVydGV4KCBkZXYsIGJ1ZiwgJnRjbHByaW0gKTsKKwkJCXJhZGVvbl9jcF9kaXNwYXRjaF92ZXJ0ZXgoZGV2LCBidWYsICZ0Y2xwcmltKTsKIAkJfQotCQkKKwogCQlpZiAoc2FyZWFfcHJpdi0+bmJveCA9PSAxKQogCQkJc2FyZWFfcHJpdi0+bmJveCA9IDA7CiAJfQogCi0JaWYgKCB2ZXJ0ZXguZGlzY2FyZCApIHsKLQkJcmFkZW9uX2NwX2Rpc2NhcmRfYnVmZmVyKCBkZXYsIGJ1ZiApOworCWlmICh2ZXJ0ZXguZGlzY2FyZCkgeworCQlyYWRlb25fY3BfZGlzY2FyZF9idWZmZXIoZGV2LCBidWYpOwogCX0KIAogCUNPTU1JVF9SSU5HKCk7CiAJcmV0dXJuIDA7CiB9CiAKLQotc3RhdGljIGludCByYWRlb25fZW1pdF9wYWNrZXRzKCAKLQlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsCi0JZHJtX2ZpbGVfdCAqZmlscF9wcml2LAotCWRybV9yYWRlb25fY21kX2hlYWRlcl90IGhlYWRlciwKLQlkcm1fcmFkZW9uX2NtZF9idWZmZXJfdCAqY21kYnVmICkKK3N0YXRpYyBpbnQgcmFkZW9uX2VtaXRfcGFja2V0cyhkcm1fcmFkZW9uX3ByaXZhdGVfdCAqIGRldl9wcml2LAorCQkJICAgICAgIGRybV9maWxlX3QgKiBmaWxwX3ByaXYsCisJCQkgICAgICAgZHJtX3JhZGVvbl9jbWRfaGVhZGVyX3QgaGVhZGVyLAorCQkJICAgICAgIGRybV9yYWRlb25fY21kX2J1ZmZlcl90ICogY21kYnVmKQogewogCWludCBpZCA9IChpbnQpaGVhZGVyLnBhY2tldC5wYWNrZXRfaWQ7CiAJaW50IHN6LCByZWc7CiAJaW50ICpkYXRhID0gKGludCAqKWNtZGJ1Zi0+YnVmOwogCVJJTkdfTE9DQUxTOwotICAgCisKIAlpZiAoaWQgPj0gUkFERU9OX01BWF9TVEFURV9QQUNLRVRTKQogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCkBAIC0yNTU0LDE4ICsyNTc4LDE4IEBACiAJcmVnID0gcGFja2V0W2lkXS5zdGFydDsKIAogCWlmIChzeiAqIHNpemVvZihpbnQpID4gY21kYnVmLT5idWZzeikgewotCQlEUk1fRVJST1IoICJQYWNrZXQgc2l6ZSBwcm92aWRlZCBsYXJnZXIgdGhhbiBkYXRhIHByb3ZpZGVkXG4iICk7CisJCURSTV9FUlJPUigiUGFja2V0IHNpemUgcHJvdmlkZWQgbGFyZ2VyIHRoYW4gZGF0YSBwcm92aWRlZFxuIik7CiAJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiAJfQogCi0JaWYgKCByYWRlb25fY2hlY2tfYW5kX2ZpeHVwX3BhY2tldHMoIGRldl9wcml2LCBmaWxwX3ByaXYsIGlkLCBkYXRhICkgKSB7Ci0JCURSTV9FUlJPUiggIlBhY2tldCB2ZXJpZmljYXRpb24gZmFpbGVkXG4iICk7Ci0JCXJldHVybiBEUk1fRVJSKCBFSU5WQUwgKTsKKwlpZiAocmFkZW9uX2NoZWNrX2FuZF9maXh1cF9wYWNrZXRzKGRldl9wcml2LCBmaWxwX3ByaXYsIGlkLCBkYXRhKSkgeworCQlEUk1fRVJST1IoIlBhY2tldCB2ZXJpZmljYXRpb24gZmFpbGVkXG4iKTsKKwkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAl9CiAKLQlCRUdJTl9SSU5HKHN6KzEpOwotCU9VVF9SSU5HKCBDUF9QQUNLRVQwKCByZWcsIChzei0xKSApICk7Ci0JT1VUX1JJTkdfVEFCTEUoIGRhdGEsIHN6ICk7CisJQkVHSU5fUklORyhzeiArIDEpOworCU9VVF9SSU5HKENQX1BBQ0tFVDAocmVnLCAoc3ogLSAxKSkpOworCU9VVF9SSU5HX1RBQkxFKGRhdGEsIHN6KTsKIAlBRFZBTkNFX1JJTkcoKTsKIAogCWNtZGJ1Zi0+YnVmICs9IHN6ICogc2l6ZW9mKGludCk7CkBAIC0yNTczLDIxICsyNTk3LDIwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIGludCByYWRlb25fZW1pdF9zY2FsYXJzKCAKLQlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsCi0JZHJtX3JhZGVvbl9jbWRfaGVhZGVyX3QgaGVhZGVyLAotCWRybV9yYWRlb25fY21kX2J1ZmZlcl90ICpjbWRidWYgKQorc3RhdGljIF9faW5saW5lX18gaW50IHJhZGVvbl9lbWl0X3NjYWxhcnMoZHJtX3JhZGVvbl9wcml2YXRlX3QgKiBkZXZfcHJpdiwKKwkJCQkJICBkcm1fcmFkZW9uX2NtZF9oZWFkZXJfdCBoZWFkZXIsCisJCQkJCSAgZHJtX3JhZGVvbl9jbWRfYnVmZmVyX3QgKiBjbWRidWYpCiB7CiAJaW50IHN6ID0gaGVhZGVyLnNjYWxhcnMuY291bnQ7CiAJaW50IHN0YXJ0ID0gaGVhZGVyLnNjYWxhcnMub2Zmc2V0OwogCWludCBzdHJpZGUgPSBoZWFkZXIuc2NhbGFycy5zdHJpZGU7CiAJUklOR19MT0NBTFM7CiAKLQlCRUdJTl9SSU5HKCAzK3N6ICk7Ci0JT1VUX1JJTkcoIENQX1BBQ0tFVDAoIFJBREVPTl9TRV9UQ0xfU0NBTEFSX0lORFhfUkVHLCAwICkgKTsKLQlPVVRfUklORyggc3RhcnQgfCAoc3RyaWRlIDw8IFJBREVPTl9TQ0FMX0lORFhfRFdPUkRfU1RSSURFX1NISUZUKSk7Ci0JT1VUX1JJTkcoIENQX1BBQ0tFVDBfVEFCTEUoIFJBREVPTl9TRV9UQ0xfU0NBTEFSX0RBVEFfUkVHLCBzei0xICkgKTsKLQlPVVRfUklOR19UQUJMRSggY21kYnVmLT5idWYsIHN6ICk7CisJQkVHSU5fUklORygzICsgc3opOworCU9VVF9SSU5HKENQX1BBQ0tFVDAoUkFERU9OX1NFX1RDTF9TQ0FMQVJfSU5EWF9SRUcsIDApKTsKKwlPVVRfUklORyhzdGFydCB8IChzdHJpZGUgPDwgUkFERU9OX1NDQUxfSU5EWF9EV09SRF9TVFJJREVfU0hJRlQpKTsKKwlPVVRfUklORyhDUF9QQUNLRVQwX1RBQkxFKFJBREVPTl9TRV9UQ0xfU0NBTEFSX0RBVEFfUkVHLCBzeiAtIDEpKTsKKwlPVVRfUklOR19UQUJMRShjbWRidWYtPmJ1Ziwgc3opOwogCUFEVkFOQ0VfUklORygpOwogCWNtZGJ1Zi0+YnVmICs9IHN6ICogc2l6ZW9mKGludCk7CiAJY21kYnVmLT5idWZzeiAtPSBzeiAqIHNpemVvZihpbnQpOwpAQCAtMjU5Niw0MiArMjYxOSw0MCBAQAogCiAvKiBHb2QgdGhpcyBpcyB1Z2x5CiAgKi8KLXN0YXRpYyBfX2lubGluZV9fIGludCByYWRlb25fZW1pdF9zY2FsYXJzMiggCi0JZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2LAotCWRybV9yYWRlb25fY21kX2hlYWRlcl90IGhlYWRlciwKLQlkcm1fcmFkZW9uX2NtZF9idWZmZXJfdCAqY21kYnVmICkKK3N0YXRpYyBfX2lubGluZV9fIGludCByYWRlb25fZW1pdF9zY2FsYXJzMihkcm1fcmFkZW9uX3ByaXZhdGVfdCAqIGRldl9wcml2LAorCQkJCQkgICBkcm1fcmFkZW9uX2NtZF9oZWFkZXJfdCBoZWFkZXIsCisJCQkJCSAgIGRybV9yYWRlb25fY21kX2J1ZmZlcl90ICogY21kYnVmKQogewogCWludCBzeiA9IGhlYWRlci5zY2FsYXJzLmNvdW50OwogCWludCBzdGFydCA9ICgodW5zaWduZWQgaW50KWhlYWRlci5zY2FsYXJzLm9mZnNldCkgKyAweDEwMDsKIAlpbnQgc3RyaWRlID0gaGVhZGVyLnNjYWxhcnMuc3RyaWRlOwogCVJJTkdfTE9DQUxTOwogCi0JQkVHSU5fUklORyggMytzeiApOwotCU9VVF9SSU5HKCBDUF9QQUNLRVQwKCBSQURFT05fU0VfVENMX1NDQUxBUl9JTkRYX1JFRywgMCApICk7Ci0JT1VUX1JJTkcoIHN0YXJ0IHwgKHN0cmlkZSA8PCBSQURFT05fU0NBTF9JTkRYX0RXT1JEX1NUUklERV9TSElGVCkpOwotCU9VVF9SSU5HKCBDUF9QQUNLRVQwX1RBQkxFKCBSQURFT05fU0VfVENMX1NDQUxBUl9EQVRBX1JFRywgc3otMSApICk7Ci0JT1VUX1JJTkdfVEFCTEUoIGNtZGJ1Zi0+YnVmLCBzeiApOworCUJFR0lOX1JJTkcoMyArIHN6KTsKKwlPVVRfUklORyhDUF9QQUNLRVQwKFJBREVPTl9TRV9UQ0xfU0NBTEFSX0lORFhfUkVHLCAwKSk7CisJT1VUX1JJTkcoc3RhcnQgfCAoc3RyaWRlIDw8IFJBREVPTl9TQ0FMX0lORFhfRFdPUkRfU1RSSURFX1NISUZUKSk7CisJT1VUX1JJTkcoQ1BfUEFDS0VUMF9UQUJMRShSQURFT05fU0VfVENMX1NDQUxBUl9EQVRBX1JFRywgc3ogLSAxKSk7CisJT1VUX1JJTkdfVEFCTEUoY21kYnVmLT5idWYsIHN6KTsKIAlBRFZBTkNFX1JJTkcoKTsKIAljbWRidWYtPmJ1ZiArPSBzeiAqIHNpemVvZihpbnQpOwogCWNtZGJ1Zi0+YnVmc3ogLT0gc3ogKiBzaXplb2YoaW50KTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIF9faW5saW5lX18gaW50IHJhZGVvbl9lbWl0X3ZlY3RvcnMoIAotCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiwKLQlkcm1fcmFkZW9uX2NtZF9oZWFkZXJfdCBoZWFkZXIsCi0JZHJtX3JhZGVvbl9jbWRfYnVmZmVyX3QgKmNtZGJ1ZiApCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgcmFkZW9uX2VtaXRfdmVjdG9ycyhkcm1fcmFkZW9uX3ByaXZhdGVfdCAqIGRldl9wcml2LAorCQkJCQkgIGRybV9yYWRlb25fY21kX2hlYWRlcl90IGhlYWRlciwKKwkJCQkJICBkcm1fcmFkZW9uX2NtZF9idWZmZXJfdCAqIGNtZGJ1ZikKIHsKIAlpbnQgc3ogPSBoZWFkZXIudmVjdG9ycy5jb3VudDsKIAlpbnQgc3RhcnQgPSBoZWFkZXIudmVjdG9ycy5vZmZzZXQ7CiAJaW50IHN0cmlkZSA9IGhlYWRlci52ZWN0b3JzLnN0cmlkZTsKIAlSSU5HX0xPQ0FMUzsKIAotCUJFR0lOX1JJTkcoIDMrc3ogKTsKLQlPVVRfUklORyggQ1BfUEFDS0VUMCggUkFERU9OX1NFX1RDTF9WRUNUT1JfSU5EWF9SRUcsIDAgKSApOwotCU9VVF9SSU5HKCBzdGFydCB8IChzdHJpZGUgPDwgUkFERU9OX1ZFQ19JTkRYX09DVFdPUkRfU1RSSURFX1NISUZUKSk7Ci0JT1VUX1JJTkcoIENQX1BBQ0tFVDBfVEFCTEUoIFJBREVPTl9TRV9UQ0xfVkVDVE9SX0RBVEFfUkVHLCAoc3otMSkgKSApOwotCU9VVF9SSU5HX1RBQkxFKCBjbWRidWYtPmJ1Ziwgc3ogKTsKKwlCRUdJTl9SSU5HKDMgKyBzeik7CisJT1VUX1JJTkcoQ1BfUEFDS0VUMChSQURFT05fU0VfVENMX1ZFQ1RPUl9JTkRYX1JFRywgMCkpOworCU9VVF9SSU5HKHN0YXJ0IHwgKHN0cmlkZSA8PCBSQURFT05fVkVDX0lORFhfT0NUV09SRF9TVFJJREVfU0hJRlQpKTsKKwlPVVRfUklORyhDUF9QQUNLRVQwX1RBQkxFKFJBREVPTl9TRV9UQ0xfVkVDVE9SX0RBVEFfUkVHLCAoc3ogLSAxKSkpOworCU9VVF9SSU5HX1RBQkxFKGNtZGJ1Zi0+YnVmLCBzeik7CiAJQURWQU5DRV9SSU5HKCk7CiAKIAljbWRidWYtPmJ1ZiArPSBzeiAqIHNpemVvZihpbnQpOwpAQCAtMjYzOSwxMCArMjY2MCw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLQotc3RhdGljIGludCByYWRlb25fZW1pdF9wYWNrZXQzKCBkcm1fZGV2aWNlX3QgKmRldiwKLQkJCQlkcm1fZmlsZV90ICpmaWxwX3ByaXYsCi0JCQkJZHJtX3JhZGVvbl9jbWRfYnVmZmVyX3QgKmNtZGJ1ZiApCitzdGF0aWMgaW50IHJhZGVvbl9lbWl0X3BhY2tldDMoZHJtX2RldmljZV90ICogZGV2LAorCQkJICAgICAgIGRybV9maWxlX3QgKiBmaWxwX3ByaXYsCisJCQkgICAgICAgZHJtX3JhZGVvbl9jbWRfYnVmZmVyX3QgKiBjbWRidWYpCiB7CiAJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAl1bnNpZ25lZCBpbnQgY21kc3o7CkBAIC0yNjUxLDE0ICsyNjcxLDE0IEBACiAKIAlEUk1fREVCVUcoIlxuIik7CiAKLQlpZiAoICggcmV0ID0gcmFkZW9uX2NoZWNrX2FuZF9maXh1cF9wYWNrZXQzKCBkZXZfcHJpdiwgZmlscF9wcml2LAotCQkJCQkJICAgICBjbWRidWYsICZjbWRzeiApICkgKSB7Ci0JCURSTV9FUlJPUiggIlBhY2tldCB2ZXJpZmljYXRpb24gZmFpbGVkXG4iICk7CisJaWYgKChyZXQgPSByYWRlb25fY2hlY2tfYW5kX2ZpeHVwX3BhY2tldDMoZGV2X3ByaXYsIGZpbHBfcHJpdiwKKwkJCQkJCSAgY21kYnVmLCAmY21kc3opKSkgeworCQlEUk1fRVJST1IoIlBhY2tldCB2ZXJpZmljYXRpb24gZmFpbGVkXG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlCRUdJTl9SSU5HKCBjbWRzeiApOwotCU9VVF9SSU5HX1RBQkxFKCBjbWRidWYtPmJ1ZiwgY21kc3ogKTsKKwlCRUdJTl9SSU5HKGNtZHN6KTsKKwlPVVRfUklOR19UQUJMRShjbWRidWYtPmJ1ZiwgY21kc3opOwogCUFEVkFOQ0VfUklORygpOwogCiAJY21kYnVmLT5idWYgKz0gY21kc3ogKiA0OwpAQCAtMjY2NiwxMSArMjY4NiwxMCBAQAogCXJldHVybiAwOwogfQogCi0KLXN0YXRpYyBpbnQgcmFkZW9uX2VtaXRfcGFja2V0M19jbGlwcmVjdCggZHJtX2RldmljZV90ICpkZXYsCi0JCQkJCSBkcm1fZmlsZV90ICpmaWxwX3ByaXYsCi0JCQkJCSBkcm1fcmFkZW9uX2NtZF9idWZmZXJfdCAqY21kYnVmLAotCQkJCQkgaW50IG9yaWdfbmJveCApCitzdGF0aWMgaW50IHJhZGVvbl9lbWl0X3BhY2tldDNfY2xpcHJlY3QoZHJtX2RldmljZV90ICogZGV2LAorCQkJCQlkcm1fZmlsZV90ICogZmlscF9wcml2LAorCQkJCQlkcm1fcmFkZW9uX2NtZF9idWZmZXJfdCAqIGNtZGJ1ZiwKKwkJCQkJaW50IG9yaWdfbmJveCkKIHsKIAlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWRybV9jbGlwX3JlY3RfdCBib3g7CkBAIC0yNjgyLDkgKzI3MDEsOSBAQAogCiAJRFJNX0RFQlVHKCJcbiIpOwogCi0JaWYgKCAoIHJldCA9IHJhZGVvbl9jaGVja19hbmRfZml4dXBfcGFja2V0MyggZGV2X3ByaXYsIGZpbHBfcHJpdiwKLQkJCQkJCSAgICAgY21kYnVmLCAmY21kc3ogKSApICkgewotCQlEUk1fRVJST1IoICJQYWNrZXQgdmVyaWZpY2F0aW9uIGZhaWxlZFxuIiApOworCWlmICgocmV0ID0gcmFkZW9uX2NoZWNrX2FuZF9maXh1cF9wYWNrZXQzKGRldl9wcml2LCBmaWxwX3ByaXYsCisJCQkJCQkgIGNtZGJ1ZiwgJmNtZHN6KSkpIHsKKwkJRFJNX0VSUk9SKCJQYWNrZXQgdmVyaWZpY2F0aW9uIGZhaWxlZFxuIik7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC0yNjkyLDggKzI3MTEsOCBAQAogCQlnb3RvIG91dDsKIAogCWRvIHsKLQkJaWYgKCBpIDwgY21kYnVmLT5uYm94ICkgewotCQkJaWYgKERSTV9DT1BZX0ZST01fVVNFUiggJmJveCwgJmJveGVzW2ldLCBzaXplb2YoYm94KSApKQorCQlpZiAoaSA8IGNtZGJ1Zi0+bmJveCkgeworCQkJaWYgKERSTV9DT1BZX0ZST01fVVNFUigmYm94LCAmYm94ZXNbaV0sIHNpemVvZihib3gpKSkKIAkJCQlyZXR1cm4gRFJNX0VSUihFRkFVTFQpOwogCQkJLyogRklYTUUgVGhlIHNlY29uZCBhbmQgc3Vic2VxdWVudCB0aW1lcyByb3VuZAogCQkJICogdGhpcyBsb29wLCBzZW5kIGEgV0FJVF9VTlRJTF8zRF9JRExFIGJlZm9yZQpAQCAtMjcwNywzMCArMjcyNiwyOSBAQAogCQkJICogdGhlIGNvcnJlY3QgcGxhY2UgdG8gZml4IGl0IGJ1dCB0aGlzIHdvcmtzCiAJCQkgKiBhcm91bmQgaXQgdW50aWwgSSBjYW4gZmlndXJlIHRoYXQgb3V0IC0gVGltCiAJCQkgKiBTbWl0aCAqLwotCQkJaWYgKCBpICkgewotCQkJCUJFR0lOX1JJTkcoIDIgKTsKKwkJCWlmIChpKSB7CisJCQkJQkVHSU5fUklORygyKTsKIAkJCQlSQURFT05fV0FJVF9VTlRJTF8zRF9JRExFKCk7CiAJCQkJQURWQU5DRV9SSU5HKCk7CiAJCQl9Ci0JCQlyYWRlb25fZW1pdF9jbGlwX3JlY3QoIGRldl9wcml2LCAmYm94ICk7CisJCQlyYWRlb25fZW1pdF9jbGlwX3JlY3QoZGV2X3ByaXYsICZib3gpOwogCQl9Ci0JCQotCQlCRUdJTl9SSU5HKCBjbWRzeiApOwotCQlPVVRfUklOR19UQUJMRSggY21kYnVmLT5idWYsIGNtZHN6ICk7CisKKwkJQkVHSU5fUklORyhjbWRzeik7CisJCU9VVF9SSU5HX1RBQkxFKGNtZGJ1Zi0+YnVmLCBjbWRzeik7CiAJCUFEVkFOQ0VfUklORygpOwogCi0JfSB3aGlsZSAoICsraSA8IGNtZGJ1Zi0+bmJveCApOwotIAlpZiAoY21kYnVmLT5uYm94ID09IDEpCisJfSB3aGlsZSAoKytpIDwgY21kYnVmLT5uYm94KTsKKwlpZiAoY21kYnVmLT5uYm94ID09IDEpCiAJCWNtZGJ1Zi0+bmJveCA9IDA7CiAKLSBvdXQ6CisgICAgICBvdXQ6CiAJY21kYnVmLT5idWYgKz0gY21kc3ogKiA0OwogCWNtZGJ1Zi0+YnVmc3ogLT0gY21kc3ogKiA0OwogCXJldHVybiAwOwogfQogCi0KLXN0YXRpYyBpbnQgcmFkZW9uX2VtaXRfd2FpdCggZHJtX2RldmljZV90ICpkZXYsIGludCBmbGFncyApCitzdGF0aWMgaW50IHJhZGVvbl9lbWl0X3dhaXQoZHJtX2RldmljZV90ICogZGV2LCBpbnQgZmxhZ3MpCiB7CiAJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlSSU5HX0xPQ0FMUzsKQEAgLTI3MzgsMTggKzI3NTYsMTggQEAKIAlEUk1fREVCVUcoIiVzOiAleFxuIiwgX19GVU5DVElPTl9fLCBmbGFncyk7CiAJc3dpdGNoIChmbGFncykgewogCWNhc2UgUkFERU9OX1dBSVRfMkQ6Ci0JCUJFR0lOX1JJTkcoIDIgKTsKLQkJUkFERU9OX1dBSVRfVU5USUxfMkRfSURMRSgpOyAKKwkJQkVHSU5fUklORygyKTsKKwkJUkFERU9OX1dBSVRfVU5USUxfMkRfSURMRSgpOwogCQlBRFZBTkNFX1JJTkcoKTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fV0FJVF8zRDoKLQkJQkVHSU5fUklORyggMiApOwotCQlSQURFT05fV0FJVF9VTlRJTF8zRF9JRExFKCk7IAorCQlCRUdJTl9SSU5HKDIpOworCQlSQURFT05fV0FJVF9VTlRJTF8zRF9JRExFKCk7CiAJCUFEVkFOQ0VfUklORygpOwogCQlicmVhazsKLQljYXNlIFJBREVPTl9XQUlUXzJEfFJBREVPTl9XQUlUXzNEOgotCQlCRUdJTl9SSU5HKCAyICk7Ci0JCVJBREVPTl9XQUlUX1VOVElMX0lETEUoKTsgCisJY2FzZSBSQURFT05fV0FJVF8yRCB8IFJBREVPTl9XQUlUXzNEOgorCQlCRUdJTl9SSU5HKDIpOworCQlSQURFT05fV0FJVF9VTlRJTF9JRExFKCk7CiAJCUFEVkFOQ0VfUklORygpOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMjc1OSw3ICsyNzc3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCByYWRlb25fY3BfY21kYnVmKCBEUk1fSU9DVExfQVJHUyApCitzdGF0aWMgaW50IHJhZGVvbl9jcF9jbWRidWYoRFJNX0lPQ1RMX0FSR1MpCiB7CiAJRFJNX0RFVklDRTsKIAlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwpAQCAtMjc3MCwyNCArMjc4OCwyNSBAQAogCWRybV9yYWRlb25fY21kX2J1ZmZlcl90IGNtZGJ1ZjsKIAlkcm1fcmFkZW9uX2NtZF9oZWFkZXJfdCBoZWFkZXI7CiAJaW50IG9yaWdfbmJveCwgb3JpZ19idWZzejsKLQljaGFyICprYnVmPU5VTEw7CisJY2hhciAqa2J1ZiA9IE5VTEw7CiAKLQlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oIGRldiwgZmlscCApOworCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbHApOwogCi0JaWYgKCAhZGV2X3ByaXYgKSB7Ci0JCURSTV9FUlJPUiggIiVzIGNhbGxlZCB3aXRoIG5vIGluaXRpYWxpemF0aW9uXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwlpZiAoIWRldl9wcml2KSB7CisJCURSTV9FUlJPUigiJXMgY2FsbGVkIHdpdGggbm8gaW5pdGlhbGl6YXRpb25cbiIsIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiAJfQogCi0JRFJNX0dFVF9QUklWX1dJVEhfUkVUVVJOKCBmaWxwX3ByaXYsIGZpbHAgKTsKKwlEUk1fR0VUX1BSSVZfV0lUSF9SRVRVUk4oZmlscF9wcml2LCBmaWxwKTsKIAotCURSTV9DT1BZX0ZST01fVVNFUl9JT0NUTCggY21kYnVmLCAoZHJtX3JhZGVvbl9jbWRfYnVmZmVyX3QgX191c2VyICopZGF0YSwKLQkJCSAgICAgc2l6ZW9mKGNtZGJ1ZikgKTsKKwlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwoY21kYnVmLAorCQkJCSAoZHJtX3JhZGVvbl9jbWRfYnVmZmVyX3QgX191c2VyICopIGRhdGEsCisJCQkJIHNpemVvZihjbWRidWYpKTsKIAotCVJJTkdfU1BBQ0VfVEVTVF9XSVRIX1JFVFVSTiggZGV2X3ByaXYgKTsKLQlWQl9BR0VfVEVTVF9XSVRIX1JFVFVSTiggZGV2X3ByaXYgKTsKKwlSSU5HX1NQQUNFX1RFU1RfV0lUSF9SRVRVUk4oZGV2X3ByaXYpOworCVZCX0FHRV9URVNUX1dJVEhfUkVUVVJOKGRldl9wcml2KTsKIAotCWlmIChjbWRidWYuYnVmc3ogPiA2NCoxMDI0IHx8IGNtZGJ1Zi5idWZzejwwKSB7CisJaWYgKGNtZGJ1Zi5idWZzeiA+IDY0ICogMTAyNCB8fCBjbWRidWYuYnVmc3ogPCAwKSB7CiAJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiAJfQogCkBAIC0yODA5LDI3ICsyODI4LDI4IEBACiAKIAlvcmlnX25ib3ggPSBjbWRidWYubmJveDsKIAotCWlmKGRldl9wcml2LT5taWNyb2NvZGVfdmVyc2lvbiA9PSBVQ09ERV9SMzAwKSB7CisJaWYgKGRldl9wcml2LT5taWNyb2NvZGVfdmVyc2lvbiA9PSBVQ09ERV9SMzAwKSB7CiAJCWludCB0ZW1wOwotCQl0ZW1wPXIzMDBfZG9fY3BfY21kYnVmKGRldiwgZmlscCwgZmlscF9wcml2LCAmY21kYnVmKTsKLQkKKwkJdGVtcCA9IHIzMDBfZG9fY3BfY21kYnVmKGRldiwgZmlscCwgZmlscF9wcml2LCAmY21kYnVmKTsKKwogCQlpZiAob3JpZ19idWZzeiAhPSAwKQogCQkJZHJtX2ZyZWUoa2J1Ziwgb3JpZ19idWZzeiwgRFJNX01FTV9EUklWRVIpOwotCQorCiAJCXJldHVybiB0ZW1wOwogCX0KIAogCS8qIG1pY3JvY29kZV92ZXJzaW9uICE9IHIzMDAgKi8KLQl3aGlsZSAoIGNtZGJ1Zi5idWZzeiA+PSBzaXplb2YoaGVhZGVyKSApIHsKKwl3aGlsZSAoY21kYnVmLmJ1ZnN6ID49IHNpemVvZihoZWFkZXIpKSB7CiAKIAkJaGVhZGVyLmkgPSAqKGludCAqKWNtZGJ1Zi5idWY7CiAJCWNtZGJ1Zi5idWYgKz0gc2l6ZW9mKGhlYWRlcik7CiAJCWNtZGJ1Zi5idWZzeiAtPSBzaXplb2YoaGVhZGVyKTsKIAogCQlzd2l0Y2ggKGhlYWRlci5oZWFkZXIuY21kX3R5cGUpIHsKLQkJY2FzZSBSQURFT05fQ01EX1BBQ0tFVDogCisJCWNhc2UgUkFERU9OX0NNRF9QQUNLRVQ6CiAJCQlEUk1fREVCVUcoIlJBREVPTl9DTURfUEFDS0VUXG4iKTsKLQkJCWlmIChyYWRlb25fZW1pdF9wYWNrZXRzKCBkZXZfcHJpdiwgZmlscF9wcml2LCBoZWFkZXIsICZjbWRidWYgKSkgeworCQkJaWYgKHJhZGVvbl9lbWl0X3BhY2tldHMKKwkJCSAgICAoZGV2X3ByaXYsIGZpbHBfcHJpdiwgaGVhZGVyLCAmY21kYnVmKSkgewogCQkJCURSTV9FUlJPUigicmFkZW9uX2VtaXRfcGFja2V0cyBmYWlsZWRcbiIpOwogCQkJCWdvdG8gZXJyOwogCQkJfQpAQCAtMjgzNyw3ICsyODU3LDcgQEAKIAogCQljYXNlIFJBREVPTl9DTURfU0NBTEFSUzoKIAkJCURSTV9ERUJVRygiUkFERU9OX0NNRF9TQ0FMQVJTXG4iKTsKLQkJCWlmIChyYWRlb25fZW1pdF9zY2FsYXJzKCBkZXZfcHJpdiwgaGVhZGVyLCAmY21kYnVmICkpIHsKKwkJCWlmIChyYWRlb25fZW1pdF9zY2FsYXJzKGRldl9wcml2LCBoZWFkZXIsICZjbWRidWYpKSB7CiAJCQkJRFJNX0VSUk9SKCJyYWRlb25fZW1pdF9zY2FsYXJzIGZhaWxlZFxuIik7CiAJCQkJZ290byBlcnI7CiAJCQl9CkBAIC0yODQ1LDcgKzI4NjUsNyBAQAogCiAJCWNhc2UgUkFERU9OX0NNRF9WRUNUT1JTOgogCQkJRFJNX0RFQlVHKCJSQURFT05fQ01EX1ZFQ1RPUlNcbiIpOwotCQkJaWYgKHJhZGVvbl9lbWl0X3ZlY3RvcnMoIGRldl9wcml2LCBoZWFkZXIsICZjbWRidWYgKSkgeworCQkJaWYgKHJhZGVvbl9lbWl0X3ZlY3RvcnMoZGV2X3ByaXYsIGhlYWRlciwgJmNtZGJ1ZikpIHsKIAkJCQlEUk1fRVJST1IoInJhZGVvbl9lbWl0X3ZlY3RvcnMgZmFpbGVkXG4iKTsKIAkJCQlnb3RvIGVycjsKIAkJCX0KQEAgLTI4NTQsMjUgKzI4NzQsMjUgQEAKIAkJY2FzZSBSQURFT05fQ01EX0RNQV9ESVNDQVJEOgogCQkJRFJNX0RFQlVHKCJSQURFT05fQ01EX0RNQV9ESVNDQVJEXG4iKTsKIAkJCWlkeCA9IGhlYWRlci5kbWEuYnVmX2lkeDsKLQkJCWlmICggaWR4IDwgMCB8fCBpZHggPj0gZG1hLT5idWZfY291bnQgKSB7Ci0JCQkJRFJNX0VSUk9SKCAiYnVmZmVyIGluZGV4ICVkIChvZiAlZCBtYXgpXG4iLAotCQkJCQkgICBpZHgsIGRtYS0+YnVmX2NvdW50IC0gMSApOworCQkJaWYgKGlkeCA8IDAgfHwgaWR4ID49IGRtYS0+YnVmX2NvdW50KSB7CisJCQkJRFJNX0VSUk9SKCJidWZmZXIgaW5kZXggJWQgKG9mICVkIG1heClcbiIsCisJCQkJCSAgaWR4LCBkbWEtPmJ1Zl9jb3VudCAtIDEpOwogCQkJCWdvdG8gZXJyOwogCQkJfQogCiAJCQlidWYgPSBkbWEtPmJ1Zmxpc3RbaWR4XTsKLQkJCWlmICggYnVmLT5maWxwICE9IGZpbHAgfHwgYnVmLT5wZW5kaW5nICkgewotCQkJCURSTV9FUlJPUiggImJhZCBidWZmZXIgJXAgJXAgJWRcbiIsCi0JCQkJCSAgIGJ1Zi0+ZmlscCwgZmlscCwgYnVmLT5wZW5kaW5nKTsKKwkJCWlmIChidWYtPmZpbHAgIT0gZmlscCB8fCBidWYtPnBlbmRpbmcpIHsKKwkJCQlEUk1fRVJST1IoImJhZCBidWZmZXIgJXAgJXAgJWRcbiIsCisJCQkJCSAgYnVmLT5maWxwLCBmaWxwLCBidWYtPnBlbmRpbmcpOwogCQkJCWdvdG8gZXJyOwogCQkJfQogCi0JCQlyYWRlb25fY3BfZGlzY2FyZF9idWZmZXIoIGRldiwgYnVmICk7CisJCQlyYWRlb25fY3BfZGlzY2FyZF9idWZmZXIoZGV2LCBidWYpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBSQURFT05fQ01EX1BBQ0tFVDM6CiAJCQlEUk1fREVCVUcoIlJBREVPTl9DTURfUEFDS0VUM1xuIik7Ci0JCQlpZiAocmFkZW9uX2VtaXRfcGFja2V0MyggZGV2LCBmaWxwX3ByaXYsICZjbWRidWYgKSkgeworCQkJaWYgKHJhZGVvbl9lbWl0X3BhY2tldDMoZGV2LCBmaWxwX3ByaXYsICZjbWRidWYpKSB7CiAJCQkJRFJNX0VSUk9SKCJyYWRlb25fZW1pdF9wYWNrZXQzIGZhaWxlZFxuIik7CiAJCQkJZ290byBlcnI7CiAJCQl9CkBAIC0yODgwLDcgKzI5MDAsOCBAQAogCiAJCWNhc2UgUkFERU9OX0NNRF9QQUNLRVQzX0NMSVA6CiAJCQlEUk1fREVCVUcoIlJBREVPTl9DTURfUEFDS0VUM19DTElQXG4iKTsKLQkJCWlmIChyYWRlb25fZW1pdF9wYWNrZXQzX2NsaXByZWN0KCBkZXYsIGZpbHBfcHJpdiwgJmNtZGJ1Ziwgb3JpZ19uYm94ICkpIHsKKwkJCWlmIChyYWRlb25fZW1pdF9wYWNrZXQzX2NsaXByZWN0CisJCQkgICAgKGRldiwgZmlscF9wcml2LCAmY21kYnVmLCBvcmlnX25ib3gpKSB7CiAJCQkJRFJNX0VSUk9SKCJyYWRlb25fZW1pdF9wYWNrZXQzX2NsaXAgZmFpbGVkXG4iKTsKIAkJCQlnb3RvIGVycjsKIAkJCX0KQEAgLTI4ODgsNyArMjkwOSw3IEBACiAKIAkJY2FzZSBSQURFT05fQ01EX1NDQUxBUlMyOgogCQkJRFJNX0RFQlVHKCJSQURFT05fQ01EX1NDQUxBUlMyXG4iKTsKLQkJCWlmIChyYWRlb25fZW1pdF9zY2FsYXJzMiggZGV2X3ByaXYsIGhlYWRlciwgJmNtZGJ1ZiApKSB7CisJCQlpZiAocmFkZW9uX2VtaXRfc2NhbGFyczIoZGV2X3ByaXYsIGhlYWRlciwgJmNtZGJ1ZikpIHsKIAkJCQlEUk1fRVJST1IoInJhZGVvbl9lbWl0X3NjYWxhcnMyIGZhaWxlZFxuIik7CiAJCQkJZ290byBlcnI7CiAJCQl9CkBAIC0yODk2LDEzICsyOTE3LDEzIEBACiAKIAkJY2FzZSBSQURFT05fQ01EX1dBSVQ6CiAJCQlEUk1fREVCVUcoIlJBREVPTl9DTURfV0FJVFxuIik7Ci0JCQlpZiAocmFkZW9uX2VtaXRfd2FpdCggZGV2LCBoZWFkZXIud2FpdC5mbGFncyApKSB7CisJCQlpZiAocmFkZW9uX2VtaXRfd2FpdChkZXYsIGhlYWRlci53YWl0LmZsYWdzKSkgewogCQkJCURSTV9FUlJPUigicmFkZW9uX2VtaXRfd2FpdCBmYWlsZWRcbiIpOwogCQkJCWdvdG8gZXJyOwogCQkJfQogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlEUk1fRVJST1IoImJhZCBjbWRfdHlwZSAlZCBhdCAlcFxuIiwgCisJCQlEUk1fRVJST1IoImJhZCBjbWRfdHlwZSAlZCBhdCAlcFxuIiwKIAkJCQkgIGhlYWRlci5oZWFkZXIuY21kX3R5cGUsCiAJCQkJICBjbWRidWYuYnVmIC0gc2l6ZW9mKGhlYWRlcikpOwogCQkJZ290byBlcnI7CkBAIC0yOTE2LDQ1ICsyOTM3LDQzIEBACiAJQ09NTUlUX1JJTkcoKTsKIAlyZXR1cm4gMDsKIAotZXJyOgorICAgICAgZXJyOgogCWlmIChvcmlnX2J1ZnN6ICE9IDApCiAJCWRybV9mcmVlKGtidWYsIG9yaWdfYnVmc3osIERSTV9NRU1fRFJJVkVSKTsKIAlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogfQogCi0KLQotc3RhdGljIGludCByYWRlb25fY3BfZ2V0cGFyYW0oIERSTV9JT0NUTF9BUkdTICkKK3N0YXRpYyBpbnQgcmFkZW9uX2NwX2dldHBhcmFtKERSTV9JT0NUTF9BUkdTKQogewogCURSTV9ERVZJQ0U7CiAJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlkcm1fcmFkZW9uX2dldHBhcmFtX3QgcGFyYW07CiAJaW50IHZhbHVlOwogCi0JaWYgKCAhZGV2X3ByaXYgKSB7Ci0JCURSTV9FUlJPUiggIiVzIGNhbGxlZCB3aXRoIG5vIGluaXRpYWxpemF0aW9uXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwlpZiAoIWRldl9wcml2KSB7CisJCURSTV9FUlJPUigiJXMgY2FsbGVkIHdpdGggbm8gaW5pdGlhbGl6YXRpb25cbiIsIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiAJfQogCi0JRFJNX0NPUFlfRlJPTV9VU0VSX0lPQ1RMKCBwYXJhbSwgKGRybV9yYWRlb25fZ2V0cGFyYW1fdCBfX3VzZXIgKilkYXRhLAotCQkJICAgICBzaXplb2YocGFyYW0pICk7CisJRFJNX0NPUFlfRlJPTV9VU0VSX0lPQ1RMKHBhcmFtLCAoZHJtX3JhZGVvbl9nZXRwYXJhbV90IF9fdXNlciAqKSBkYXRhLAorCQkJCSBzaXplb2YocGFyYW0pKTsKIAotCURSTV9ERUJVRyggInBpZD0lZFxuIiwgRFJNX0NVUlJFTlRQSUQgKTsKKwlEUk1fREVCVUcoInBpZD0lZFxuIiwgRFJNX0NVUlJFTlRQSUQpOwogCi0Jc3dpdGNoKCBwYXJhbS5wYXJhbSApIHsKKwlzd2l0Y2ggKHBhcmFtLnBhcmFtKSB7CiAJY2FzZSBSQURFT05fUEFSQU1fR0FSVF9CVUZGRVJfT0ZGU0VUOgogCQl2YWx1ZSA9IGRldl9wcml2LT5nYXJ0X2J1ZmZlcnNfb2Zmc2V0OwogCQlicmVhazsKIAljYXNlIFJBREVPTl9QQVJBTV9MQVNUX0ZSQU1FOgogCQlkZXZfcHJpdi0+c3RhdHMubGFzdF9mcmFtZV9yZWFkcysrOwotCQl2YWx1ZSA9IEdFVF9TQ1JBVENIKCAwICk7CisJCXZhbHVlID0gR0VUX1NDUkFUQ0goMCk7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1BBUkFNX0xBU1RfRElTUEFUQ0g6Ci0JCXZhbHVlID0gR0VUX1NDUkFUQ0goIDEgKTsKKwkJdmFsdWUgPSBHRVRfU0NSQVRDSCgxKTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUEFSQU1fTEFTVF9DTEVBUjoKIAkJZGV2X3ByaXYtPnN0YXRzLmxhc3RfY2xlYXJfcmVhZHMrKzsKLQkJdmFsdWUgPSBHRVRfU0NSQVRDSCggMiApOworCQl2YWx1ZSA9IEdFVF9TQ1JBVENIKDIpOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9QQVJBTV9JUlFfTlI6CiAJCXZhbHVlID0gZGV2LT5pcnE7CkBAIC0yOTY5LDE1ICsyOTg4LDE1IEBACiAJCXZhbHVlID0gZGV2X3ByaXYtPnJpbmdfcnB0cl9vZmZzZXQ7CiAJCWJyZWFrOwogI2lmIEJJVFNfUEVSX0xPTkcgPT0gMzIKLQkvKgotCSAqIFRoaXMgaW9jdGwoKSBkb2Vzbid0IHdvcmsgb24gNjQtYml0IHBsYXRmb3JtcyBiZWNhdXNlIGh3X2xvY2sgaXMgYQotCSAqIHBvaW50ZXIgd2hpY2ggY2FuJ3QgZml0IGludG8gYW4gaW50LXNpemVkIHZhcmlhYmxlLiAgQWNjb3JkaW5nIHRvCi0JICogTWljaGVsIETkbnplciwgdGhlIGlvY3RsKCkgaXMgb25seSB1c2VkIG9uIGVtYmVkZGVkIHBsYXRmb3Jtcywgc28KLQkgKiBub3Qgc3VwcG9ydGluZyBpdCBzaG91bGRuJ3QgYmUgYSBwcm9ibGVtLiAgSWYgdGhlIHNhbWUgZnVuY3Rpb25hbGl0eQotCSAqIGlzIG5lZWRlZCBvbiA2NC1iaXQgcGxhdGZvcm1zLCBhIG5ldyBpb2N0bCgpIHdvdWxkIGhhdmUgdG8gYmUgYWRkZWQsCi0JICogc28gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZm9yIHRoZSBlbWJlZGRlZCBwbGF0Zm9ybXMgY2FuIGJlCi0JICogbWFpbnRhaW5lZC4gIC0tZGF2aWRtIDQtRmViLTIwMDQuCi0JICovCisJCS8qCisJCSAqIFRoaXMgaW9jdGwoKSBkb2Vzbid0IHdvcmsgb24gNjQtYml0IHBsYXRmb3JtcyBiZWNhdXNlIGh3X2xvY2sgaXMgYQorCQkgKiBwb2ludGVyIHdoaWNoIGNhbid0IGZpdCBpbnRvIGFuIGludC1zaXplZCB2YXJpYWJsZS4gIEFjY29yZGluZyB0bworCQkgKiBNaWNoZWwgRORuemVyLCB0aGUgaW9jdGwoKSBpcyBvbmx5IHVzZWQgb24gZW1iZWRkZWQgcGxhdGZvcm1zLCBzbworCQkgKiBub3Qgc3VwcG9ydGluZyBpdCBzaG91bGRuJ3QgYmUgYSBwcm9ibGVtLiAgSWYgdGhlIHNhbWUgZnVuY3Rpb25hbGl0eQorCQkgKiBpcyBuZWVkZWQgb24gNjQtYml0IHBsYXRmb3JtcywgYSBuZXcgaW9jdGwoKSB3b3VsZCBoYXZlIHRvIGJlIGFkZGVkLAorCQkgKiBzbyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBmb3IgdGhlIGVtYmVkZGVkIHBsYXRmb3JtcyBjYW4gYmUKKwkJICogbWFpbnRhaW5lZC4gIC0tZGF2aWRtIDQtRmViLTIwMDQuCisJCSAqLwogCWNhc2UgUkFERU9OX1BBUkFNX1NBUkVBX0hBTkRMRToKIAkJLyogVGhlIGxvY2sgaXMgdGhlIGZpcnN0IGR3b3JkIGluIHRoZSBzYXJlYS4gKi8KIAkJdmFsdWUgPSAobG9uZylkZXYtPmxvY2suaHdfbG9jazsKQEAgLTI5OTAsNTYgKzMwMDksNTYgQEAKIAkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAl9CiAKLQlpZiAoIERSTV9DT1BZX1RPX1VTRVIoIHBhcmFtLnZhbHVlLCAmdmFsdWUsIHNpemVvZihpbnQpICkgKSB7Ci0JCURSTV9FUlJPUiggImNvcHlfdG9fdXNlclxuIiApOworCWlmIChEUk1fQ09QWV9UT19VU0VSKHBhcmFtLnZhbHVlLCAmdmFsdWUsIHNpemVvZihpbnQpKSkgeworCQlEUk1fRVJST1IoImNvcHlfdG9fdXNlclxuIik7CiAJCXJldHVybiBEUk1fRVJSKEVGQVVMVCk7CiAJfQotCQorCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcmFkZW9uX2NwX3NldHBhcmFtKCBEUk1fSU9DVExfQVJHUyApIHsKK3N0YXRpYyBpbnQgcmFkZW9uX2NwX3NldHBhcmFtKERSTV9JT0NUTF9BUkdTKQorewogCURSTV9ERVZJQ0U7CiAJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlkcm1fZmlsZV90ICpmaWxwX3ByaXY7CiAJZHJtX3JhZGVvbl9zZXRwYXJhbV90IHNwOwogCXN0cnVjdCBkcm1fcmFkZW9uX2RyaXZlcl9maWxlX2ZpZWxkcyAqcmFkZW9uX3ByaXY7CiAKLQlpZiAoICFkZXZfcHJpdiApIHsKLQkJRFJNX0VSUk9SKCAiJXMgY2FsbGVkIHdpdGggbm8gaW5pdGlhbGl6YXRpb25cbiIsIF9fRlVOQ1RJT05fXyApOwotCQlyZXR1cm4gRFJNX0VSUiggRUlOVkFMICk7CisJaWYgKCFkZXZfcHJpdikgeworCQlEUk1fRVJST1IoIiVzIGNhbGxlZCB3aXRoIG5vIGluaXRpYWxpemF0aW9uXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCX0KIAotCURSTV9HRVRfUFJJVl9XSVRIX1JFVFVSTiggZmlscF9wcml2LCBmaWxwICk7CisJRFJNX0dFVF9QUklWX1dJVEhfUkVUVVJOKGZpbHBfcHJpdiwgZmlscCk7CiAKLQlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwoIHNwLCAoIGRybV9yYWRlb25fc2V0cGFyYW1fdCBfX3VzZXIgKiApZGF0YSwKLQkJCQkgIHNpemVvZiggc3AgKSApOworCURSTV9DT1BZX0ZST01fVVNFUl9JT0NUTChzcCwgKGRybV9yYWRlb25fc2V0cGFyYW1fdCBfX3VzZXIgKikgZGF0YSwKKwkJCQkgc2l6ZW9mKHNwKSk7CiAKLQlzd2l0Y2goIHNwLnBhcmFtICkgeworCXN3aXRjaCAoc3AucGFyYW0pIHsKIAljYXNlIFJBREVPTl9TRVRQQVJBTV9GQl9MT0NBVElPTjoKIAkJcmFkZW9uX3ByaXYgPSBmaWxwX3ByaXYtPmRyaXZlcl9wcml2OwogCQlyYWRlb25fcHJpdi0+cmFkZW9uX2ZiX2RlbHRhID0gZGV2X3ByaXYtPmZiX2xvY2F0aW9uIC0gc3AudmFsdWU7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1NFVFBBUkFNX1NXSVRDSF9USUxJTkc6CiAJCWlmIChzcC52YWx1ZSA9PSAwKSB7Ci0JCQlEUk1fREVCVUcoICJjb2xvciB0aWxpbmcgZGlzYWJsZWRcbiIgKTsKKwkJCURSTV9ERUJVRygiY29sb3IgdGlsaW5nIGRpc2FibGVkXG4iKTsKIAkJCWRldl9wcml2LT5mcm9udF9waXRjaF9vZmZzZXQgJj0gflJBREVPTl9EU1RfVElMRV9NQUNSTzsKIAkJCWRldl9wcml2LT5iYWNrX3BpdGNoX29mZnNldCAmPSB+UkFERU9OX0RTVF9USUxFX01BQ1JPOwogCQkJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPnRpbGluZ19lbmFibGVkID0gMDsKLQkJfQotCQllbHNlIGlmIChzcC52YWx1ZSA9PSAxKSB7Ci0JCQlEUk1fREVCVUcoICJjb2xvciB0aWxpbmcgZW5hYmxlZFxuIiApOworCQl9IGVsc2UgaWYgKHNwLnZhbHVlID09IDEpIHsKKwkJCURSTV9ERUJVRygiY29sb3IgdGlsaW5nIGVuYWJsZWRcbiIpOwogCQkJZGV2X3ByaXYtPmZyb250X3BpdGNoX29mZnNldCB8PSBSQURFT05fRFNUX1RJTEVfTUFDUk87CiAJCQlkZXZfcHJpdi0+YmFja19waXRjaF9vZmZzZXQgfD0gUkFERU9OX0RTVF9USUxFX01BQ1JPOwogCQkJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPnRpbGluZ19lbmFibGVkID0gMTsKIAkJfQotCQlicmVhazsJCisJCWJyZWFrOwogCWNhc2UgUkFERU9OX1NFVFBBUkFNX1BDSUdBUlRfTE9DQVRJT046CiAJCWRldl9wcml2LT5wY2lnYXJ0X29mZnNldCA9IHNwLnZhbHVlOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlEUk1fREVCVUcoICJJbnZhbGlkIHBhcmFtZXRlciAlZFxuIiwgc3AucGFyYW0gKTsKLQkJcmV0dXJuIERSTV9FUlIoIEVJTlZBTCApOworCQlEUk1fREVCVUcoIkludmFsaWQgcGFyYW1ldGVyICVkXG4iLCBzcC5wYXJhbSk7CisJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0zMDUxLDc4ICszMDcwLDEwNiBAQAogICoKICAqIERSTSBpbmZyYXN0cnVjdHVyZSB0YWtlcyBjYXJlIG9mIHJlY2xhaW1pbmcgZG1hIGJ1ZmZlcnMuCiAgKi8KLXZvaWQgcmFkZW9uX2RyaXZlcl9wcmVyZWxlYXNlKGRybV9kZXZpY2VfdCAqZGV2LCBEUk1GSUxFIGZpbHApCit2b2lkIHJhZGVvbl9kcml2ZXJfcHJlcmVsZWFzZShkcm1fZGV2aWNlX3QgKiBkZXYsIERSTUZJTEUgZmlscCkKIHsKLQlpZiAoIGRldi0+ZGV2X3ByaXZhdGUgKSB7CQkJCQotCQlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOyAKLQkJaWYgKCBkZXZfcHJpdi0+cGFnZV9mbGlwcGluZyApIHsJCQotCQkJcmFkZW9uX2RvX2NsZWFudXBfcGFnZWZsaXAoIGRldiApOwkKLQkJfQkJCQkJCQotCQlyYWRlb25fbWVtX3JlbGVhc2UoIGZpbHAsIGRldl9wcml2LT5nYXJ0X2hlYXAgKTsgCi0JCXJhZGVvbl9tZW1fcmVsZWFzZSggZmlscCwgZGV2X3ByaXYtPmZiX2hlYXAgKTsJCisJaWYgKGRldi0+ZGV2X3ByaXZhdGUpIHsKKwkJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwkJaWYgKGRldl9wcml2LT5wYWdlX2ZsaXBwaW5nKSB7CisJCQlyYWRlb25fZG9fY2xlYW51cF9wYWdlZmxpcChkZXYpOworCQl9CisJCXJhZGVvbl9tZW1fcmVsZWFzZShmaWxwLCBkZXZfcHJpdi0+Z2FydF9oZWFwKTsKKwkJcmFkZW9uX21lbV9yZWxlYXNlKGZpbHAsIGRldl9wcml2LT5mYl9oZWFwKTsKIAkJcmFkZW9uX3N1cmZhY2VzX3JlbGVhc2UoZmlscCwgZGV2X3ByaXYpOwotCX0JCQkJCisJfQogfQogCi12b2lkIHJhZGVvbl9kcml2ZXJfcHJldGFrZWRvd24oZHJtX2RldmljZV90ICpkZXYpCit2b2lkIHJhZGVvbl9kcml2ZXJfcHJldGFrZWRvd24oZHJtX2RldmljZV90ICogZGV2KQogewogCXJhZGVvbl9kb19yZWxlYXNlKGRldik7CiB9CiAKLWludCByYWRlb25fZHJpdmVyX29wZW5faGVscGVyKGRybV9kZXZpY2VfdCAqZGV2LCBkcm1fZmlsZV90ICpmaWxwX3ByaXYpCitpbnQgcmFkZW9uX2RyaXZlcl9vcGVuX2hlbHBlcihkcm1fZGV2aWNlX3QgKiBkZXYsIGRybV9maWxlX3QgKiBmaWxwX3ByaXYpCiB7CiAJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgZHJtX3JhZGVvbl9kcml2ZXJfZmlsZV9maWVsZHMgKnJhZGVvbl9wcml2OwotCQotCXJhZGVvbl9wcml2ID0gKHN0cnVjdCBkcm1fcmFkZW9uX2RyaXZlcl9maWxlX2ZpZWxkcyAqKWRybV9hbGxvYyhzaXplb2YoKnJhZGVvbl9wcml2KSwgRFJNX01FTV9GSUxFUyk7Ci0JCisKKwlyYWRlb25fcHJpdiA9CisJICAgIChzdHJ1Y3QgZHJtX3JhZGVvbl9kcml2ZXJfZmlsZV9maWVsZHMgKikKKwkgICAgZHJtX2FsbG9jKHNpemVvZigqcmFkZW9uX3ByaXYpLCBEUk1fTUVNX0ZJTEVTKTsKKwogCWlmICghcmFkZW9uX3ByaXYpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJZmlscF9wcml2LT5kcml2ZXJfcHJpdiA9IHJhZGVvbl9wcml2OwotCWlmICggZGV2X3ByaXYgKQorCWlmIChkZXZfcHJpdikKIAkJcmFkZW9uX3ByaXYtPnJhZGVvbl9mYl9kZWx0YSA9IGRldl9wcml2LT5mYl9sb2NhdGlvbjsKIAllbHNlCiAJCXJhZGVvbl9wcml2LT5yYWRlb25fZmJfZGVsdGEgPSAwOwogCXJldHVybiAwOwogfQogCi0KLXZvaWQgcmFkZW9uX2RyaXZlcl9mcmVlX2ZpbHBfcHJpdihkcm1fZGV2aWNlX3QgKmRldiwgZHJtX2ZpbGVfdCAqZmlscF9wcml2KQordm9pZCByYWRlb25fZHJpdmVyX2ZyZWVfZmlscF9wcml2KGRybV9kZXZpY2VfdCAqIGRldiwgZHJtX2ZpbGVfdCAqIGZpbHBfcHJpdikKIHsKLQkgc3RydWN0IGRybV9yYWRlb25fZHJpdmVyX2ZpbGVfZmllbGRzICpyYWRlb25fcHJpdiA9IGZpbHBfcHJpdi0+ZHJpdmVyX3ByaXY7Ci0JIAotCSBkcm1fZnJlZShyYWRlb25fcHJpdiwgc2l6ZW9mKCpyYWRlb25fcHJpdiksIERSTV9NRU1fRklMRVMpOworCXN0cnVjdCBkcm1fcmFkZW9uX2RyaXZlcl9maWxlX2ZpZWxkcyAqcmFkZW9uX3ByaXYgPQorCSAgICBmaWxwX3ByaXYtPmRyaXZlcl9wcml2OworCisJZHJtX2ZyZWUocmFkZW9uX3ByaXYsIHNpemVvZigqcmFkZW9uX3ByaXYpLCBEUk1fTUVNX0ZJTEVTKTsKIH0KIAogZHJtX2lvY3RsX2Rlc2NfdCByYWRlb25faW9jdGxzW10gPSB7Ci0JW0RSTV9JT0NUTF9OUihEUk1fUkFERU9OX0NQX0lOSVQpXSAgICA9IHsgcmFkZW9uX2NwX2luaXQsICAgICAgMSwgMSB9LAotCVtEUk1fSU9DVExfTlIoRFJNX1JBREVPTl9DUF9TVEFSVCldICAgPSB7IHJhZGVvbl9jcF9zdGFydCwgICAgIDEsIDEgfSwKLQlbRFJNX0lPQ1RMX05SKERSTV9SQURFT05fQ1BfU1RPUCldICAgID0geyByYWRlb25fY3Bfc3RvcCwgICAgICAxLCAxIH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fUkFERU9OX0NQX1JFU0VUKV0gICA9IHsgcmFkZW9uX2NwX3Jlc2V0LCAgICAgMSwgMSB9LAotCVtEUk1fSU9DVExfTlIoRFJNX1JBREVPTl9DUF9JRExFKV0gICAgPSB7IHJhZGVvbl9jcF9pZGxlLCAgICAgIDEsIDAgfSwKLQlbRFJNX0lPQ1RMX05SKERSTV9SQURFT05fQ1BfUkVTVU1FKV0gID0geyByYWRlb25fY3BfcmVzdW1lLCAgICAxLCAwIH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fUkFERU9OX1JFU0VUKV0gICAgICA9IHsgcmFkZW9uX2VuZ2luZV9yZXNldCwgMSwgMCB9LAotCVtEUk1fSU9DVExfTlIoRFJNX1JBREVPTl9GVUxMU0NSRUVOKV0gPSB7IHJhZGVvbl9mdWxsc2NyZWVuLCAgIDEsIDAgfSwKLQlbRFJNX0lPQ1RMX05SKERSTV9SQURFT05fU1dBUCldICAgICAgID0geyByYWRlb25fY3Bfc3dhcCwgICAgICAxLCAwIH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fUkFERU9OX0NMRUFSKV0gICAgICA9IHsgcmFkZW9uX2NwX2NsZWFyLCAgICAgMSwgMCB9LAotCVtEUk1fSU9DVExfTlIoRFJNX1JBREVPTl9WRVJURVgpXSAgICAgPSB7IHJhZGVvbl9jcF92ZXJ0ZXgsICAgIDEsIDAgfSwKLQlbRFJNX0lPQ1RMX05SKERSTV9SQURFT05fSU5ESUNFUyldICAgID0geyByYWRlb25fY3BfaW5kaWNlcywgICAxLCAwIH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fUkFERU9OX1RFWFRVUkUpXSAgICA9IHsgcmFkZW9uX2NwX3RleHR1cmUsICAgMSwgMCB9LAotCVtEUk1fSU9DVExfTlIoRFJNX1JBREVPTl9TVElQUExFKV0gICAgPSB7IHJhZGVvbl9jcF9zdGlwcGxlLCAgIDEsIDAgfSwKLQlbRFJNX0lPQ1RMX05SKERSTV9SQURFT05fSU5ESVJFQ1QpXSAgID0geyByYWRlb25fY3BfaW5kaXJlY3QsICAxLCAxIH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fUkFERU9OX1ZFUlRFWDIpXSAgICA9IHsgcmFkZW9uX2NwX3ZlcnRleDIsICAgMSwgMCB9LAotCVtEUk1fSU9DVExfTlIoRFJNX1JBREVPTl9DTURCVUYpXSAgICAgPSB7IHJhZGVvbl9jcF9jbWRidWYsICAgIDEsIDAgfSwKLQlbRFJNX0lPQ1RMX05SKERSTV9SQURFT05fR0VUUEFSQU0pXSAgID0geyByYWRlb25fY3BfZ2V0cGFyYW0sICAxLCAwIH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fUkFERU9OX0ZMSVApXSAgICAgICA9IHsgcmFkZW9uX2NwX2ZsaXAsICAgICAgMSwgMCB9LAotCVtEUk1fSU9DVExfTlIoRFJNX1JBREVPTl9BTExPQyldICAgICAgPSB7IHJhZGVvbl9tZW1fYWxsb2MsICAgIDEsIDAgfSwKLQlbRFJNX0lPQ1RMX05SKERSTV9SQURFT05fRlJFRSldICAgICAgID0geyByYWRlb25fbWVtX2ZyZWUsICAgICAxLCAwIH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fUkFERU9OX0lOSVRfSEVBUCldICA9IHsgcmFkZW9uX21lbV9pbml0X2hlYXAsMSwgMSB9LAotCVtEUk1fSU9DVExfTlIoRFJNX1JBREVPTl9JUlFfRU1JVCldICAgPSB7IHJhZGVvbl9pcnFfZW1pdCwgICAgIDEsIDAgfSwKLQlbRFJNX0lPQ1RMX05SKERSTV9SQURFT05fSVJRX1dBSVQpXSAgID0geyByYWRlb25faXJxX3dhaXQsICAgICAxLCAwIH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fUkFERU9OX1NFVFBBUkFNKV0gICA9IHsgcmFkZW9uX2NwX3NldHBhcmFtLCAgMSwgMCB9LAotCVtEUk1fSU9DVExfTlIoRFJNX1JBREVPTl9TVVJGX0FMTE9DKV0gPSB7IHJhZGVvbl9zdXJmYWNlX2FsbG9jLDEsIDAgfSwKLQlbRFJNX0lPQ1RMX05SKERSTV9SQURFT05fU1VSRl9GUkVFKV0gID0geyByYWRlb25fc3VyZmFjZV9mcmVlLCAxLCAwIH0KKwlbRFJNX0lPQ1RMX05SKERSTV9SQURFT05fQ1BfSU5JVCldID0ge3JhZGVvbl9jcF9pbml0LCAxLCAxfQorCSwKKwlbRFJNX0lPQ1RMX05SKERSTV9SQURFT05fQ1BfU1RBUlQpXSA9IHtyYWRlb25fY3Bfc3RhcnQsIDEsIDF9CisJLAorCVtEUk1fSU9DVExfTlIoRFJNX1JBREVPTl9DUF9TVE9QKV0gPSB7cmFkZW9uX2NwX3N0b3AsIDEsIDF9CisJLAorCVtEUk1fSU9DVExfTlIoRFJNX1JBREVPTl9DUF9SRVNFVCldID0ge3JhZGVvbl9jcF9yZXNldCwgMSwgMX0KKwksCisJW0RSTV9JT0NUTF9OUihEUk1fUkFERU9OX0NQX0lETEUpXSA9IHtyYWRlb25fY3BfaWRsZSwgMSwgMH0KKwksCisJW0RSTV9JT0NUTF9OUihEUk1fUkFERU9OX0NQX1JFU1VNRSldID0ge3JhZGVvbl9jcF9yZXN1bWUsIDEsIDB9CisJLAorCVtEUk1fSU9DVExfTlIoRFJNX1JBREVPTl9SRVNFVCldID0ge3JhZGVvbl9lbmdpbmVfcmVzZXQsIDEsIDB9CisJLAorCVtEUk1fSU9DVExfTlIoRFJNX1JBREVPTl9GVUxMU0NSRUVOKV0gPSB7cmFkZW9uX2Z1bGxzY3JlZW4sIDEsIDB9CisJLAorCVtEUk1fSU9DVExfTlIoRFJNX1JBREVPTl9TV0FQKV0gPSB7cmFkZW9uX2NwX3N3YXAsIDEsIDB9CisJLAorCVtEUk1fSU9DVExfTlIoRFJNX1JBREVPTl9DTEVBUildID0ge3JhZGVvbl9jcF9jbGVhciwgMSwgMH0KKwksCisJW0RSTV9JT0NUTF9OUihEUk1fUkFERU9OX1ZFUlRFWCldID0ge3JhZGVvbl9jcF92ZXJ0ZXgsIDEsIDB9CisJLAorCVtEUk1fSU9DVExfTlIoRFJNX1JBREVPTl9JTkRJQ0VTKV0gPSB7cmFkZW9uX2NwX2luZGljZXMsIDEsIDB9CisJLAorCVtEUk1fSU9DVExfTlIoRFJNX1JBREVPTl9URVhUVVJFKV0gPSB7cmFkZW9uX2NwX3RleHR1cmUsIDEsIDB9CisJLAorCVtEUk1fSU9DVExfTlIoRFJNX1JBREVPTl9TVElQUExFKV0gPSB7cmFkZW9uX2NwX3N0aXBwbGUsIDEsIDB9CisJLAorCVtEUk1fSU9DVExfTlIoRFJNX1JBREVPTl9JTkRJUkVDVCldID0ge3JhZGVvbl9jcF9pbmRpcmVjdCwgMSwgMX0KKwksCisJW0RSTV9JT0NUTF9OUihEUk1fUkFERU9OX1ZFUlRFWDIpXSA9IHtyYWRlb25fY3BfdmVydGV4MiwgMSwgMH0KKwksCisJW0RSTV9JT0NUTF9OUihEUk1fUkFERU9OX0NNREJVRildID0ge3JhZGVvbl9jcF9jbWRidWYsIDEsIDB9CisJLAorCVtEUk1fSU9DVExfTlIoRFJNX1JBREVPTl9HRVRQQVJBTSldID0ge3JhZGVvbl9jcF9nZXRwYXJhbSwgMSwgMH0KKwksCisJW0RSTV9JT0NUTF9OUihEUk1fUkFERU9OX0ZMSVApXSA9IHtyYWRlb25fY3BfZmxpcCwgMSwgMH0KKwksCisJW0RSTV9JT0NUTF9OUihEUk1fUkFERU9OX0FMTE9DKV0gPSB7cmFkZW9uX21lbV9hbGxvYywgMSwgMH0KKwksCisJW0RSTV9JT0NUTF9OUihEUk1fUkFERU9OX0ZSRUUpXSA9IHtyYWRlb25fbWVtX2ZyZWUsIDEsIDB9CisJLAorCVtEUk1fSU9DVExfTlIoRFJNX1JBREVPTl9JTklUX0hFQVApXSA9IHtyYWRlb25fbWVtX2luaXRfaGVhcCwgMSwgMX0KKwksCisJW0RSTV9JT0NUTF9OUihEUk1fUkFERU9OX0lSUV9FTUlUKV0gPSB7cmFkZW9uX2lycV9lbWl0LCAxLCAwfQorCSwKKwlbRFJNX0lPQ1RMX05SKERSTV9SQURFT05fSVJRX1dBSVQpXSA9IHtyYWRlb25faXJxX3dhaXQsIDEsIDB9CisJLAorCVtEUk1fSU9DVExfTlIoRFJNX1JBREVPTl9TRVRQQVJBTSldID0ge3JhZGVvbl9jcF9zZXRwYXJhbSwgMSwgMH0KKwksCisJW0RSTV9JT0NUTF9OUihEUk1fUkFERU9OX1NVUkZfQUxMT0MpXSA9IHtyYWRlb25fc3VyZmFjZV9hbGxvYywgMSwgMH0KKwksCisJW0RSTV9JT0NUTF9OUihEUk1fUkFERU9OX1NVUkZfRlJFRSldID0ge3JhZGVvbl9zdXJmYWNlX2ZyZWUsIDEsIDB9CiB9OwogCiBpbnQgcmFkZW9uX21heF9pb2N0bCA9IERSTV9BUlJBWV9TSVpFKHJhZGVvbl9pb2N0bHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9zYXZhZ2VfYmNpLmMgYi9kcml2ZXJzL2NoYXIvZHJtL3NhdmFnZV9iY2kuYwppbmRleCAyZmQ0MGJhLi4wYWQ5MjAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL3NhdmFnZV9iY2kuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL3NhdmFnZV9iY2kuYwpAQCAtMjgsMTIgKzI4LDEyIEBACiAKIC8qIE5lZWQgYSBsb25nIHRpbWVvdXQgZm9yIHNoYWRvdyBzdGF0dXMgdXBkYXRlcyBjYW4gdGFrZSBhIHdoaWxlCiAgKiBhbmQgc28gY2FuIHdhaXRpbmcgZm9yIGV2ZW50cyB3aGVuIHRoZSBxdWV1ZSBpcyBmdWxsLiAqLwotI2RlZmluZSBTQVZBR0VfREVGQVVMVF9VU0VDX1RJTUVPVVQJMTAwMDAwMCAvKiAxcyAqLwotI2RlZmluZSBTQVZBR0VfRVZFTlRfVVNFQ19USU1FT1VUCTUwMDAwMDAgLyogNXMgKi8KKyNkZWZpbmUgU0FWQUdFX0RFRkFVTFRfVVNFQ19USU1FT1VUCTEwMDAwMDAJLyogMXMgKi8KKyNkZWZpbmUgU0FWQUdFX0VWRU5UX1VTRUNfVElNRU9VVAk1MDAwMDAwCS8qIDVzICovCiAjZGVmaW5lIFNBVkFHRV9GUkVFTElTVF9ERUJVRwkJMAogCiBzdGF0aWMgaW50Ci1zYXZhZ2VfYmNpX3dhaXRfZmlmb19zaGFkb3coZHJtX3NhdmFnZV9wcml2YXRlX3QgKmRldl9wcml2LCB1bnNpZ25lZCBpbnQgbikKK3NhdmFnZV9iY2lfd2FpdF9maWZvX3NoYWRvdyhkcm1fc2F2YWdlX3ByaXZhdGVfdCAqIGRldl9wcml2LCB1bnNpZ25lZCBpbnQgbikKIHsKIAl1aW50MzJfdCBtYXNrID0gZGV2X3ByaXYtPnN0YXR1c191c2VkX21hc2s7CiAJdWludDMyX3QgdGhyZXNob2xkID0gZGV2X3ByaXYtPmJjaV90aHJlc2hvbGRfaGk7CkBAIC02Miw3ICs2Miw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLXNhdmFnZV9iY2lfd2FpdF9maWZvX3MzZChkcm1fc2F2YWdlX3ByaXZhdGVfdCAqZGV2X3ByaXYsIHVuc2lnbmVkIGludCBuKQorc2F2YWdlX2JjaV93YWl0X2ZpZm9fczNkKGRybV9zYXZhZ2VfcHJpdmF0ZV90ICogZGV2X3ByaXYsIHVuc2lnbmVkIGludCBuKQogewogCXVpbnQzMl90IG1heFVzZWQgPSBkZXZfcHJpdi0+Y29iX3NpemUgKyBTQVZBR0VfQkNJX0ZJRk9fU0laRSAtIG47CiAJdWludDMyX3Qgc3RhdHVzOwpAQCAtODMsNyArODMsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1zYXZhZ2VfYmNpX3dhaXRfZmlmb19zNChkcm1fc2F2YWdlX3ByaXZhdGVfdCAqZGV2X3ByaXYsIHVuc2lnbmVkIGludCBuKQorc2F2YWdlX2JjaV93YWl0X2ZpZm9fczQoZHJtX3NhdmFnZV9wcml2YXRlX3QgKiBkZXZfcHJpdiwgdW5zaWduZWQgaW50IG4pCiB7CiAJdWludDMyX3QgbWF4VXNlZCA9IGRldl9wcml2LT5jb2Jfc2l6ZSArIFNBVkFHRV9CQ0lfRklGT19TSVpFIC0gbjsKIAl1aW50MzJfdCBzdGF0dXM7CkBAIC0xMTUsNyArMTE1LDcgQEAKICAqIHJ1bGUuIE90aGVyd2lzZSB0aGVyZSBtYXkgYmUgZ2xpdGNoZXMgZXZlcnkgMl4xNiBldmVudHMuCiAgKi8KIHN0YXRpYyBpbnQKLXNhdmFnZV9iY2lfd2FpdF9ldmVudF9zaGFkb3coZHJtX3NhdmFnZV9wcml2YXRlX3QgKmRldl9wcml2LCB1aW50MTZfdCBlKQorc2F2YWdlX2JjaV93YWl0X2V2ZW50X3NoYWRvdyhkcm1fc2F2YWdlX3ByaXZhdGVfdCAqIGRldl9wcml2LCB1aW50MTZfdCBlKQogewogCXVpbnQzMl90IHN0YXR1czsKIAlpbnQgaTsKQEAgLTEzOCw3ICsxMzgsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1zYXZhZ2VfYmNpX3dhaXRfZXZlbnRfcmVnKGRybV9zYXZhZ2VfcHJpdmF0ZV90ICpkZXZfcHJpdiwgdWludDE2X3QgZSkKK3NhdmFnZV9iY2lfd2FpdF9ldmVudF9yZWcoZHJtX3NhdmFnZV9wcml2YXRlX3QgKiBkZXZfcHJpdiwgdWludDE2X3QgZSkKIHsKIAl1aW50MzJfdCBzdGF0dXM7CiAJaW50IGk7CkBAIC0xNTksNyArMTU5LDcgQEAKIAlyZXR1cm4gRFJNX0VSUihFQlVTWSk7CiB9CiAKLXVpbnQxNl90IHNhdmFnZV9iY2lfZW1pdF9ldmVudChkcm1fc2F2YWdlX3ByaXZhdGVfdCAqZGV2X3ByaXYsCit1aW50MTZfdCBzYXZhZ2VfYmNpX2VtaXRfZXZlbnQoZHJtX3NhdmFnZV9wcml2YXRlX3QgKiBkZXZfcHJpdiwKIAkJCSAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAJdWludDE2X3QgY291bnQ7CkBAIC0xNzUsMTIgKzE3NSwxMiBAQAogCX0KIAljb3VudCA9IChjb3VudCArIDEpICYgMHhmZmZmOwogCWlmIChjb3VudCA9PSAwKSB7Ci0JCWNvdW50Kys7IC8qIFNlZSB0aGUgY29tbWVudCBhYm92ZSBzYXZhZ2Vfd2FpdF9ldmVudF8qLiAqLworCQljb3VudCsrOwkvKiBTZWUgdGhlIGNvbW1lbnQgYWJvdmUgc2F2YWdlX3dhaXRfZXZlbnRfKi4gKi8KIAkJZGV2X3ByaXYtPmV2ZW50X3dyYXArKzsKIAl9CiAJZGV2X3ByaXYtPmV2ZW50X2NvdW50ZXIgPSBjb3VudDsKIAlpZiAoZGV2X3ByaXYtPnN0YXR1c19wdHIpCi0JCWRldl9wcml2LT5zdGF0dXNfcHRyWzEwMjNdID0gKHVpbnQzMl90KWNvdW50OworCQlkZXZfcHJpdi0+c3RhdHVzX3B0clsxMDIzXSA9ICh1aW50MzJfdCkgY291bnQ7CiAKIAlpZiAoKGZsYWdzICYgKFNBVkFHRV9XQUlUXzJEIHwgU0FWQUdFX1dBSVRfM0QpKSkgewogCQl1bnNpZ25lZCBpbnQgd2FpdF9jbWQgPSBCQ0lfQ01EX1dBSVQ7CkBAIC0xOTMsNyArMTkzLDcgQEAKIAl9IGVsc2UgewogCQlCRUdJTl9CQ0koMSk7CiAJfQotCUJDSV9XUklURShCQ0lfQ01EX1VQREFURV9FVkVOVF9UQUcgfCAodWludDMyX3QpY291bnQpOworCUJDSV9XUklURShCQ0lfQ01EX1VQREFURV9FVkVOVF9UQUcgfCAodWludDMyX3QpIGNvdW50KTsKIAogCXJldHVybiBjb3VudDsKIH0KQEAgLTIwMSw3ICsyMDEsNyBAQAogLyoKICAqIEZyZWVsaXN0IG1hbmFnZW1lbnQKICAqLwotc3RhdGljIGludCBzYXZhZ2VfZnJlZWxpc3RfaW5pdChkcm1fZGV2aWNlX3QgKmRldikKK3N0YXRpYyBpbnQgc2F2YWdlX2ZyZWVsaXN0X2luaXQoZHJtX2RldmljZV90ICogZGV2KQogewogCWRybV9zYXZhZ2VfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJZHJtX2RldmljZV9kbWFfdCAqZG1hID0gZGV2LT5kbWE7CkBAIC0yMzQsNyArMjM0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGRybV9idWZfdCAqc2F2YWdlX2ZyZWVsaXN0X2dldChkcm1fZGV2aWNlX3QgKmRldikKK3N0YXRpYyBkcm1fYnVmX3QgKnNhdmFnZV9mcmVlbGlzdF9nZXQoZHJtX2RldmljZV90ICogZGV2KQogewogCWRybV9zYXZhZ2VfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJZHJtX3NhdmFnZV9idWZfcHJpdl90ICp0YWlsID0gZGV2X3ByaXYtPnRhaWwucHJldjsKQEAgLTI0OSw3ICsyNDksNyBAQAogCQlldmVudCA9IFNBVkFHRV9SRUFEKFNBVkFHRV9TVEFUVVNfV09SRDEpICYgMHhmZmZmOwogCXdyYXAgPSBkZXZfcHJpdi0+ZXZlbnRfd3JhcDsKIAlpZiAoZXZlbnQgPiBkZXZfcHJpdi0+ZXZlbnRfY291bnRlcikKLQkJd3JhcC0tOyAvKiBoYXJkd2FyZSBoYXNuJ3QgcGFzc2VkIHRoZSBsYXN0IHdyYXAgeWV0ICovCisJCXdyYXAtLTsJCS8qIGhhcmR3YXJlIGhhc24ndCBwYXNzZWQgdGhlIGxhc3Qgd3JhcCB5ZXQgKi8KIAogCURSTV9ERUJVRygiICAgdGFpbD0weCUwNHggJWRcbiIsIHRhaWwtPmFnZS5ldmVudCwgdGFpbC0+YWdlLndyYXApOwogCURSTV9ERUJVRygiICAgaGVhZD0weCUwNHggJWRcbiIsIGV2ZW50LCB3cmFwKTsKQEAgLTI2Nyw3ICsyNjcsNyBAQAogCXJldHVybiBOVUxMOwogfQogCi12b2lkIHNhdmFnZV9mcmVlbGlzdF9wdXQoZHJtX2RldmljZV90ICpkZXYsIGRybV9idWZfdCAqYnVmKQordm9pZCBzYXZhZ2VfZnJlZWxpc3RfcHV0KGRybV9kZXZpY2VfdCAqIGRldiwgZHJtX2J1Zl90ICogYnVmKQogewogCWRybV9zYXZhZ2VfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJZHJtX3NhdmFnZV9idWZfcHJpdl90ICplbnRyeSA9IGJ1Zi0+ZGV2X3ByaXZhdGUsICpwcmV2LCAqbmV4dDsKQEAgLTI5MCwxNSArMjkwLDE0IEBACiAvKgogICogQ29tbWFuZCBETUEKICAqLwotc3RhdGljIGludCBzYXZhZ2VfZG1hX2luaXQoZHJtX3NhdmFnZV9wcml2YXRlX3QgKmRldl9wcml2KQorc3RhdGljIGludCBzYXZhZ2VfZG1hX2luaXQoZHJtX3NhdmFnZV9wcml2YXRlX3QgKiBkZXZfcHJpdikKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAogCWRldl9wcml2LT5ucl9kbWFfcGFnZXMgPSBkZXZfcHJpdi0+Y21kX2RtYS0+c2l6ZSAvCi0JCShTQVZBR0VfRE1BX1BBR0VfU0laRSo0KTsKKwkgICAgKFNBVkFHRV9ETUFfUEFHRV9TSVpFICogNCk7CiAJZGV2X3ByaXYtPmRtYV9wYWdlcyA9IGRybV9hbGxvYyhzaXplb2YoZHJtX3NhdmFnZV9kbWFfcGFnZV90KSAqCi0JCQkJCWRldl9wcml2LT5ucl9kbWFfcGFnZXMsCi0JCQkJCURSTV9NRU1fRFJJVkVSKTsKKwkJCQkJZGV2X3ByaXYtPm5yX2RtYV9wYWdlcywgRFJNX01FTV9EUklWRVIpOwogCWlmIChkZXZfcHJpdi0+ZG1hX3BhZ2VzID09IE5VTEwpCiAJCXJldHVybiBEUk1fRVJSKEVOT01FTSk7CiAKQEAgLTMxNSw3ICszMTQsNyBAQAogCXJldHVybiAwOwogfQogCi12b2lkIHNhdmFnZV9kbWFfcmVzZXQoZHJtX3NhdmFnZV9wcml2YXRlX3QgKmRldl9wcml2KQordm9pZCBzYXZhZ2VfZG1hX3Jlc2V0KGRybV9zYXZhZ2VfcHJpdmF0ZV90ICogZGV2X3ByaXYpCiB7CiAJdWludDE2X3QgZXZlbnQ7CiAJdW5zaWduZWQgaW50IHdyYXAsIGk7CkBAIC0zMzAsNyArMzI5LDcgQEAKIAlkZXZfcHJpdi0+Zmlyc3RfZG1hX3BhZ2UgPSBkZXZfcHJpdi0+Y3VycmVudF9kbWFfcGFnZSA9IDA7CiB9CiAKLXZvaWQgc2F2YWdlX2RtYV93YWl0KGRybV9zYXZhZ2VfcHJpdmF0ZV90ICpkZXZfcHJpdiwgdW5zaWduZWQgaW50IHBhZ2UpCit2b2lkIHNhdmFnZV9kbWFfd2FpdChkcm1fc2F2YWdlX3ByaXZhdGVfdCAqIGRldl9wcml2LCB1bnNpZ25lZCBpbnQgcGFnZSkKIHsKIAl1aW50MTZfdCBldmVudDsKIAl1bnNpZ25lZCBpbnQgd3JhcDsKQEAgLTM0Niw3ICszNDUsNyBAQAogCQlldmVudCA9IFNBVkFHRV9SRUFEKFNBVkFHRV9TVEFUVVNfV09SRDEpICYgMHhmZmZmOwogCXdyYXAgPSBkZXZfcHJpdi0+ZXZlbnRfd3JhcDsKIAlpZiAoZXZlbnQgPiBkZXZfcHJpdi0+ZXZlbnRfY291bnRlcikKLQkJd3JhcC0tOyAvKiBoYXJkd2FyZSBoYXNuJ3QgcGFzc2VkIHRoZSBsYXN0IHdyYXAgeWV0ICovCisJCXdyYXAtLTsJCS8qIGhhcmR3YXJlIGhhc24ndCBwYXNzZWQgdGhlIGxhc3Qgd3JhcCB5ZXQgKi8KIAogCWlmIChkZXZfcHJpdi0+ZG1hX3BhZ2VzW3BhZ2VdLmFnZS53cmFwID4gd3JhcCB8fAogCSAgICAoZGV2X3ByaXYtPmRtYV9wYWdlc1twYWdlXS5hZ2Uud3JhcCA9PSB3cmFwICYmCkBAIC0zNTgsMTMgKzM1NywxMyBAQAogCX0KIH0KIAotdWludDMyX3QgKnNhdmFnZV9kbWFfYWxsb2MoZHJtX3NhdmFnZV9wcml2YXRlX3QgKmRldl9wcml2LCB1bnNpZ25lZCBpbnQgbikKK3VpbnQzMl90ICpzYXZhZ2VfZG1hX2FsbG9jKGRybV9zYXZhZ2VfcHJpdmF0ZV90ICogZGV2X3ByaXYsIHVuc2lnbmVkIGludCBuKQogewogCXVuc2lnbmVkIGludCBjdXIgPSBkZXZfcHJpdi0+Y3VycmVudF9kbWFfcGFnZTsKIAl1bnNpZ25lZCBpbnQgcmVzdCA9IFNBVkFHRV9ETUFfUEFHRV9TSVpFIC0KLQkJZGV2X3ByaXYtPmRtYV9wYWdlc1tjdXJdLnVzZWQ7Ci0JdW5zaWduZWQgaW50IG5yX3BhZ2VzID0gKG4gLSByZXN0ICsgU0FWQUdFX0RNQV9QQUdFX1NJWkUtMSkgLwotCQlTQVZBR0VfRE1BX1BBR0VfU0laRTsKKwkgICAgZGV2X3ByaXYtPmRtYV9wYWdlc1tjdXJdLnVzZWQ7CisJdW5zaWduZWQgaW50IG5yX3BhZ2VzID0gKG4gLSByZXN0ICsgU0FWQUdFX0RNQV9QQUdFX1NJWkUgLSAxKSAvCisJICAgIFNBVkFHRV9ETUFfUEFHRV9TSVpFOwogCXVpbnQzMl90ICpkbWFfcHRyOwogCXVuc2lnbmVkIGludCBpOwogCkBAIC0zNzIsOSArMzcxLDggQEAKIAkJICBjdXIsIGRldl9wcml2LT5kbWFfcGFnZXNbY3VyXS51c2VkLCBuLCByZXN0LCBucl9wYWdlcyk7CiAKIAlpZiAoY3VyICsgbnJfcGFnZXMgPCBkZXZfcHJpdi0+bnJfZG1hX3BhZ2VzKSB7Ci0JCWRtYV9wdHIgPSAodWludDMyX3QgKilkZXZfcHJpdi0+Y21kX2RtYS0+aGFuZGxlICsKLQkJCWN1cipTQVZBR0VfRE1BX1BBR0VfU0laRSArCi0JCQlkZXZfcHJpdi0+ZG1hX3BhZ2VzW2N1cl0udXNlZDsKKwkJZG1hX3B0ciA9ICh1aW50MzJfdCAqKSBkZXZfcHJpdi0+Y21kX2RtYS0+aGFuZGxlICsKKwkJICAgIGN1ciAqIFNBVkFHRV9ETUFfUEFHRV9TSVpFICsgZGV2X3ByaXYtPmRtYV9wYWdlc1tjdXJdLnVzZWQ7CiAJCWlmIChuIDwgcmVzdCkKIAkJCXJlc3QgPSBuOwogCQlkZXZfcHJpdi0+ZG1hX3BhZ2VzW2N1cl0udXNlZCArPSByZXN0OwpAQCAtMzgyLDEzICszODAsMTQgQEAKIAkJY3VyKys7CiAJfSBlbHNlIHsKIAkJZGV2X3ByaXYtPmRtYV9mbHVzaChkZXZfcHJpdik7Ci0JCW5yX3BhZ2VzID0gKG4gKyBTQVZBR0VfRE1BX1BBR0VfU0laRS0xKSAvIFNBVkFHRV9ETUFfUEFHRV9TSVpFOworCQlucl9wYWdlcyA9CisJCSAgICAobiArIFNBVkFHRV9ETUFfUEFHRV9TSVpFIC0gMSkgLyBTQVZBR0VfRE1BX1BBR0VfU0laRTsKIAkJZm9yIChpID0gY3VyOyBpIDwgZGV2X3ByaXYtPm5yX2RtYV9wYWdlczsgKytpKSB7CiAJCQlkZXZfcHJpdi0+ZG1hX3BhZ2VzW2ldLmFnZSA9IGRldl9wcml2LT5sYXN0X2RtYV9hZ2U7CiAJCQlkZXZfcHJpdi0+ZG1hX3BhZ2VzW2ldLnVzZWQgPSAwOwogCQkJZGV2X3ByaXYtPmRtYV9wYWdlc1tpXS5mbHVzaGVkID0gMDsKIAkJfQotCQlkbWFfcHRyID0gKHVpbnQzMl90ICopZGV2X3ByaXYtPmNtZF9kbWEtPmhhbmRsZTsKKwkJZG1hX3B0ciA9ICh1aW50MzJfdCAqKSBkZXZfcHJpdi0+Y21kX2RtYS0+aGFuZGxlOwogCQlkZXZfcHJpdi0+Zmlyc3RfZG1hX3BhZ2UgPSBjdXIgPSAwOwogCX0KIAlmb3IgKGkgPSBjdXI7IG5yX3BhZ2VzID4gMDsgKytpLCAtLW5yX3BhZ2VzKSB7CkBAIC00MTQsNyArNDEzLDcgQEAKIAlyZXR1cm4gZG1hX3B0cjsKIH0KIAotc3RhdGljIHZvaWQgc2F2YWdlX2RtYV9mbHVzaChkcm1fc2F2YWdlX3ByaXZhdGVfdCAqZGV2X3ByaXYpCitzdGF0aWMgdm9pZCBzYXZhZ2VfZG1hX2ZsdXNoKGRybV9zYXZhZ2VfcHJpdmF0ZV90ICogZGV2X3ByaXYpCiB7CiAJdW5zaWduZWQgaW50IGZpcnN0ID0gZGV2X3ByaXYtPmZpcnN0X2RtYV9wYWdlOwogCXVuc2lnbmVkIGludCBjdXIgPSBkZXZfcHJpdi0+Y3VycmVudF9kbWFfcGFnZTsKQEAgLTQzOSwxMSArNDM4LDEwIEBACiAKIAkvKiBwYWQgd2l0aCBub29wcyAqLwogCWlmIChwYWQpIHsKLQkJdWludDMyX3QgKmRtYV9wdHIgPSAodWludDMyX3QgKilkZXZfcHJpdi0+Y21kX2RtYS0+aGFuZGxlICsKLQkJCWN1ciAqIFNBVkFHRV9ETUFfUEFHRV9TSVpFICsKLQkJCWRldl9wcml2LT5kbWFfcGFnZXNbY3VyXS51c2VkOworCQl1aW50MzJfdCAqZG1hX3B0ciA9ICh1aW50MzJfdCAqKSBkZXZfcHJpdi0+Y21kX2RtYS0+aGFuZGxlICsKKwkJICAgIGN1ciAqIFNBVkFHRV9ETUFfUEFHRV9TSVpFICsgZGV2X3ByaXYtPmRtYV9wYWdlc1tjdXJdLnVzZWQ7CiAJCWRldl9wcml2LT5kbWFfcGFnZXNbY3VyXS51c2VkICs9IHBhZDsKLQkJd2hpbGUocGFkICE9IDApIHsKKwkJd2hpbGUgKHBhZCAhPSAwKSB7CiAJCQkqZG1hX3B0cisrID0gQkNJX0NNRF9XQUlUOwogCQkJcGFkLS07CiAJCX0KQEAgLTQ1MywxMSArNDUxLDEwIEBACiAKIAkvKiBkbyBmbHVzaCAuLi4gKi8KIAlwaHlzX2FkZHIgPSBkZXZfcHJpdi0+Y21kX2RtYS0+b2Zmc2V0ICsKLQkJKGZpcnN0ICogU0FWQUdFX0RNQV9QQUdFX1NJWkUgKwotCQkgZGV2X3ByaXYtPmRtYV9wYWdlc1tmaXJzdF0uZmx1c2hlZCkgKiA0OworCSAgICAoZmlyc3QgKiBTQVZBR0VfRE1BX1BBR0VfU0laRSArCisJICAgICBkZXZfcHJpdi0+ZG1hX3BhZ2VzW2ZpcnN0XS5mbHVzaGVkKSAqIDQ7CiAJbGVuID0gKGN1ciAtIGZpcnN0KSAqIFNBVkFHRV9ETUFfUEFHRV9TSVpFICsKLQkJZGV2X3ByaXYtPmRtYV9wYWdlc1tjdXJdLnVzZWQgLQotCQlkZXZfcHJpdi0+ZG1hX3BhZ2VzW2ZpcnN0XS5mbHVzaGVkOworCSAgICBkZXZfcHJpdi0+ZG1hX3BhZ2VzW2N1cl0udXNlZCAtIGRldl9wcml2LT5kbWFfcGFnZXNbZmlyc3RdLmZsdXNoZWQ7CiAKIAlEUk1fREVCVUcoInBoeXNfYWRkcj0lbHgsIGxlbj0ldVxuIiwKIAkJICBwaHlzX2FkZHIgfCBkZXZfcHJpdi0+ZG1hX3R5cGUsIGxlbik7CkBAIC00OTksNyArNDk2LDcgQEAKIAkJICBkZXZfcHJpdi0+ZG1hX3BhZ2VzW2N1cl0uZmx1c2hlZCk7CiB9CiAKLXN0YXRpYyB2b2lkIHNhdmFnZV9mYWtlX2RtYV9mbHVzaChkcm1fc2F2YWdlX3ByaXZhdGVfdCAqZGV2X3ByaXYpCitzdGF0aWMgdm9pZCBzYXZhZ2VfZmFrZV9kbWFfZmx1c2goZHJtX3NhdmFnZV9wcml2YXRlX3QgKiBkZXZfcHJpdikKIHsKIAl1bnNpZ25lZCBpbnQgaSwgajsKIAlCQ0lfTE9DQUxTOwpAQCAtNTE1LDggKzUxMiw4IEBACiAJZm9yIChpID0gZGV2X3ByaXYtPmZpcnN0X2RtYV9wYWdlOwogCSAgICAgaSA8PSBkZXZfcHJpdi0+Y3VycmVudF9kbWFfcGFnZSAmJiBkZXZfcHJpdi0+ZG1hX3BhZ2VzW2ldLnVzZWQ7CiAJICAgICArK2kpIHsKLQkJdWludDMyX3QgKmRtYV9wdHIgPSAodWludDMyX3QgKilkZXZfcHJpdi0+Y21kX2RtYS0+aGFuZGxlICsKLQkJCWkgKiBTQVZBR0VfRE1BX1BBR0VfU0laRTsKKwkJdWludDMyX3QgKmRtYV9wdHIgPSAodWludDMyX3QgKikgZGV2X3ByaXYtPmNtZF9kbWEtPmhhbmRsZSArCisJCSAgICBpICogU0FWQUdFX0RNQV9QQUdFX1NJWkU7CiAjaWYgU0FWQUdFX0RNQV9ERUJVRwogCQkvKiBTYW5pdHkgY2hlY2s6IGFsbCBwYWdlcyBleGNlcHQgdGhlIGxhc3Qgb25lIG11c3QgYmUgZnVsbC4gKi8KIAkJaWYgKGkgPCBkZXZfcHJpdi0+Y3VycmVudF9kbWFfcGFnZSAmJgpAQCAtNTQzLDcgKzU0MCw3IEBACiAgKiBpbml0aWFsaXplZC4gV2UgYWxzbyBuZWVkIHRvIHRha2UgY2FyZSBvZiBkZWxldGluZyB0aGUgTVRSUnMgaW4KICAqIHBvc3RjbGVhbnVwLgogICovCi1pbnQgc2F2YWdlX3ByZWluaXQoZHJtX2RldmljZV90ICpkZXYsIHVuc2lnbmVkIGxvbmcgY2hpcHNldCkKK2ludCBzYXZhZ2VfcHJlaW5pdChkcm1fZGV2aWNlX3QgKiBkZXYsIHVuc2lnbmVkIGxvbmcgY2hpcHNldCkKIHsKIAlkcm1fc2F2YWdlX3ByaXZhdGVfdCAqZGV2X3ByaXY7CiAJdW5zaWduZWQgbG9uZyBtbWlvX2Jhc2UsIGZiX2Jhc2UsIGZiX3NpemUsIGFwZXJ0dXJlX2Jhc2U7CkBAIC01NzgsMTkgKzU3NSwyMiBAQAogCQkJICogTVRSUnMuICovCiAJCQlkZXZfcHJpdi0+bXRyclswXS5iYXNlID0gZmJfYmFzZTsKIAkJCWRldl9wcml2LT5tdHJyWzBdLnNpemUgPSAweDAxMDAwMDAwOwotCQkJZGV2X3ByaXYtPm10cnJbMF0uaGFuZGxlID0gbXRycl9hZGQoCi0JCQkJZGV2X3ByaXYtPm10cnJbMF0uYmFzZSwgZGV2X3ByaXYtPm10cnJbMF0uc2l6ZSwKLQkJCQlNVFJSX1RZUEVfV1JDT01CLCAxKTsKLQkJCWRldl9wcml2LT5tdHJyWzFdLmJhc2UgPSBmYl9iYXNlKzB4MDIwMDAwMDA7CisJCQlkZXZfcHJpdi0+bXRyclswXS5oYW5kbGUgPQorCQkJICAgIG10cnJfYWRkKGRldl9wcml2LT5tdHJyWzBdLmJhc2UsCisJCQkJICAgICBkZXZfcHJpdi0+bXRyclswXS5zaXplLCBNVFJSX1RZUEVfV1JDT01CLAorCQkJCSAgICAgMSk7CisJCQlkZXZfcHJpdi0+bXRyclsxXS5iYXNlID0gZmJfYmFzZSArIDB4MDIwMDAwMDA7CiAJCQlkZXZfcHJpdi0+bXRyclsxXS5zaXplID0gMHgwMjAwMDAwMDsKLQkJCWRldl9wcml2LT5tdHJyWzFdLmhhbmRsZSA9IG10cnJfYWRkKAotCQkJCWRldl9wcml2LT5tdHJyWzFdLmJhc2UsIGRldl9wcml2LT5tdHJyWzFdLnNpemUsCi0JCQkJTVRSUl9UWVBFX1dSQ09NQiwgMSk7Ci0JCQlkZXZfcHJpdi0+bXRyclsyXS5iYXNlID0gZmJfYmFzZSsweDA0MDAwMDAwOworCQkJZGV2X3ByaXYtPm10cnJbMV0uaGFuZGxlID0KKwkJCSAgICBtdHJyX2FkZChkZXZfcHJpdi0+bXRyclsxXS5iYXNlLAorCQkJCSAgICAgZGV2X3ByaXYtPm10cnJbMV0uc2l6ZSwgTVRSUl9UWVBFX1dSQ09NQiwKKwkJCQkgICAgIDEpOworCQkJZGV2X3ByaXYtPm10cnJbMl0uYmFzZSA9IGZiX2Jhc2UgKyAweDA0MDAwMDAwOwogCQkJZGV2X3ByaXYtPm10cnJbMl0uc2l6ZSA9IDB4MDQwMDAwMDA7Ci0JCQlkZXZfcHJpdi0+bXRyclsyXS5oYW5kbGUgPSBtdHJyX2FkZCgKLQkJCQlkZXZfcHJpdi0+bXRyclsyXS5iYXNlLCBkZXZfcHJpdi0+bXRyclsyXS5zaXplLAotCQkJCU1UUlJfVFlQRV9XUkNPTUIsIDEpOworCQkJZGV2X3ByaXYtPm10cnJbMl0uaGFuZGxlID0KKwkJCSAgICBtdHJyX2FkZChkZXZfcHJpdi0+bXRyclsyXS5iYXNlLAorCQkJCSAgICAgZGV2X3ByaXYtPm10cnJbMl0uc2l6ZSwgTVRSUl9UWVBFX1dSQ09NQiwKKwkJCQkgICAgIDEpOwogCQl9IGVsc2UgewogCQkJRFJNX0VSUk9SKCJzdHJhbmdlIHBjaV9yZXNvdXJjZV9sZW4gJTA4bHhcbiIsCiAJCQkJICBkcm1fZ2V0X3Jlc291cmNlX2xlbihkZXYsIDApKTsKQEAgLTYwOCw5ICs2MDgsMTAgQEAKIAkJCSAqIGFwZXJ0dXJlLiAqLwogCQkJZGV2X3ByaXYtPm10cnJbMF0uYmFzZSA9IGZiX2Jhc2U7CiAJCQlkZXZfcHJpdi0+bXRyclswXS5zaXplID0gMHgwODAwMDAwMDsKLQkJCWRldl9wcml2LT5tdHJyWzBdLmhhbmRsZSA9IG10cnJfYWRkKAotCQkJCWRldl9wcml2LT5tdHJyWzBdLmJhc2UsIGRldl9wcml2LT5tdHJyWzBdLnNpemUsCi0JCQkJTVRSUl9UWVBFX1dSQ09NQiwgMSk7CisJCQlkZXZfcHJpdi0+bXRyclswXS5oYW5kbGUgPQorCQkJICAgIG10cnJfYWRkKGRldl9wcml2LT5tdHJyWzBdLmJhc2UsCisJCQkJICAgICBkZXZfcHJpdi0+bXRyclswXS5zaXplLCBNVFJSX1RZUEVfV1JDT01CLAorCQkJCSAgICAgMSk7CiAJCX0gZWxzZSB7CiAJCQlEUk1fRVJST1IoInN0cmFuZ2UgcGNpX3Jlc291cmNlX2xlbiAlMDhseFxuIiwKIAkJCQkgIGRybV9nZXRfcmVzb3VyY2VfbGVuKGRldiwgMSkpOwpAQCAtNjQ3LDcgKzY0OCw3IEBACiAvKgogICogRGVsZXRlIE1UUlJzIGFuZCBmcmVlIGRldmljZS1wcml2YXRlIGRhdGEuCiAgKi8KLWludCBzYXZhZ2VfcG9zdGNsZWFudXAoZHJtX2RldmljZV90ICpkZXYpCitpbnQgc2F2YWdlX3Bvc3RjbGVhbnVwKGRybV9kZXZpY2VfdCAqIGRldikKIHsKIAlkcm1fc2F2YWdlX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWludCBpOwpAQCAtNjYzLDcgKzY2NCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2F2YWdlX2RvX2luaXRfYmNpKGRybV9kZXZpY2VfdCAqZGV2LCBkcm1fc2F2YWdlX2luaXRfdCAqaW5pdCkKK3N0YXRpYyBpbnQgc2F2YWdlX2RvX2luaXRfYmNpKGRybV9kZXZpY2VfdCAqIGRldiwgZHJtX3NhdmFnZV9pbml0X3QgKiBpbml0KQogewogCWRybV9zYXZhZ2VfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKQEAgLTczMSw3ICs3MzIsNyBAQAogCX0KIAlpZiAoaW5pdC0+YWdwX3RleHR1cmVzX29mZnNldCkgewogCQlkZXZfcHJpdi0+YWdwX3RleHR1cmVzID0KLQkJCWRybV9jb3JlX2ZpbmRtYXAoZGV2LCBpbml0LT5hZ3BfdGV4dHVyZXNfb2Zmc2V0KTsKKwkJICAgIGRybV9jb3JlX2ZpbmRtYXAoZGV2LCBpbml0LT5hZ3BfdGV4dHVyZXNfb2Zmc2V0KTsKIAkJaWYgKCFkZXZfcHJpdi0+YWdwX3RleHR1cmVzKSB7CiAJCQlEUk1fRVJST1IoImNvdWxkIG5vdCBmaW5kIGFncCB0ZXh0dXJlIHJlZ2lvbiFcbiIpOwogCQkJc2F2YWdlX2RvX2NsZWFudXBfYmNpKGRldik7CkBAIC04MDIsOCArODAzLDggQEAKIAl9CiAKIAlkZXZfcHJpdi0+c2FyZWFfcHJpdiA9Ci0JCShkcm1fc2F2YWdlX3NhcmVhX3QgKikoKHVpbnQ4X3QgKilkZXZfcHJpdi0+c2FyZWEtPmhhbmRsZSArCi0JCQkJICAgICAgIGluaXQtPnNhcmVhX3ByaXZfb2Zmc2V0KTsKKwkgICAgKGRybV9zYXZhZ2Vfc2FyZWFfdCAqKSAoKHVpbnQ4X3QgKikgZGV2X3ByaXYtPnNhcmVhLT5oYW5kbGUgKworCQkJCSAgICBpbml0LT5zYXJlYV9wcml2X29mZnNldCk7CiAKIAkvKiBzZXR1cCBiaXRtYXAgZGVzY3JpcHRvcnMgKi8KIAl7CkBAIC04MTIsMzUgKzgxMywzNiBAQAogCQl1bnNpZ25lZCBpbnQgZnJvbnRfc3RyaWRlLCBiYWNrX3N0cmlkZSwgZGVwdGhfc3RyaWRlOwogCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPD0gUzNfU0FWQUdFNCkgewogCQkJY29sb3JfdGlsZV9mb3JtYXQgPSBkZXZfcHJpdi0+ZmJfYnBwID09IDE2ID8KLQkJCQlTQVZBR0VfQkRfVElMRV8xNkJQUCA6IFNBVkFHRV9CRF9USUxFXzMyQlBQOworCQkJICAgIFNBVkFHRV9CRF9USUxFXzE2QlBQIDogU0FWQUdFX0JEX1RJTEVfMzJCUFA7CiAJCQlkZXB0aF90aWxlX2Zvcm1hdCA9IGRldl9wcml2LT5kZXB0aF9icHAgPT0gMTYgPwotCQkJCVNBVkFHRV9CRF9USUxFXzE2QlBQIDogU0FWQUdFX0JEX1RJTEVfMzJCUFA7CisJCQkgICAgU0FWQUdFX0JEX1RJTEVfMTZCUFAgOiBTQVZBR0VfQkRfVElMRV8zMkJQUDsKIAkJfSBlbHNlIHsKIAkJCWNvbG9yX3RpbGVfZm9ybWF0ID0gU0FWQUdFX0JEX1RJTEVfREVTVDsKIAkJCWRlcHRoX3RpbGVfZm9ybWF0ID0gU0FWQUdFX0JEX1RJTEVfREVTVDsKIAkJfQotCQlmcm9udF9zdHJpZGUgPSBkZXZfcHJpdi0+ZnJvbnRfcGl0Y2ggLyAoZGV2X3ByaXYtPmZiX2JwcC84KTsKLQkJYmFja19zdHJpZGUgID0gZGV2X3ByaXYtPiBiYWNrX3BpdGNoIC8gKGRldl9wcml2LT5mYl9icHAvOCk7Ci0JCWRlcHRoX3N0cmlkZSA9IGRldl9wcml2LT5kZXB0aF9waXRjaCAvIChkZXZfcHJpdi0+ZGVwdGhfYnBwLzgpOworCQlmcm9udF9zdHJpZGUgPSBkZXZfcHJpdi0+ZnJvbnRfcGl0Y2ggLyAoZGV2X3ByaXYtPmZiX2JwcCAvIDgpOworCQliYWNrX3N0cmlkZSA9IGRldl9wcml2LT5iYWNrX3BpdGNoIC8gKGRldl9wcml2LT5mYl9icHAgLyA4KTsKKwkJZGVwdGhfc3RyaWRlID0KKwkJICAgIGRldl9wcml2LT5kZXB0aF9waXRjaCAvIChkZXZfcHJpdi0+ZGVwdGhfYnBwIC8gOCk7CiAKIAkJZGV2X3ByaXYtPmZyb250X2JkID0gZnJvbnRfc3RyaWRlIHwgU0FWQUdFX0JEX0JXX0RJU0FCTEUgfAotCQkJKGRldl9wcml2LT5mYl9icHAgPDwgU0FWQUdFX0JEX0JQUF9TSElGVCkgfAotCQkJKGNvbG9yX3RpbGVfZm9ybWF0IDw8IFNBVkFHRV9CRF9USUxFX1NISUZUKTsKKwkJICAgIChkZXZfcHJpdi0+ZmJfYnBwIDw8IFNBVkFHRV9CRF9CUFBfU0hJRlQpIHwKKwkJICAgIChjb2xvcl90aWxlX2Zvcm1hdCA8PCBTQVZBR0VfQkRfVElMRV9TSElGVCk7CiAKLQkJZGV2X3ByaXYtPiBiYWNrX2JkID0gIGJhY2tfc3RyaWRlIHwgU0FWQUdFX0JEX0JXX0RJU0FCTEUgfAotCQkJKGRldl9wcml2LT5mYl9icHAgPDwgU0FWQUdFX0JEX0JQUF9TSElGVCkgfAotCQkJKGNvbG9yX3RpbGVfZm9ybWF0IDw8IFNBVkFHRV9CRF9USUxFX1NISUZUKTsKKwkJZGV2X3ByaXYtPmJhY2tfYmQgPSBiYWNrX3N0cmlkZSB8IFNBVkFHRV9CRF9CV19ESVNBQkxFIHwKKwkJICAgIChkZXZfcHJpdi0+ZmJfYnBwIDw8IFNBVkFHRV9CRF9CUFBfU0hJRlQpIHwKKwkJICAgIChjb2xvcl90aWxlX2Zvcm1hdCA8PCBTQVZBR0VfQkRfVElMRV9TSElGVCk7CiAKIAkJZGV2X3ByaXYtPmRlcHRoX2JkID0gZGVwdGhfc3RyaWRlIHwgU0FWQUdFX0JEX0JXX0RJU0FCTEUgfAotCQkJKGRldl9wcml2LT5kZXB0aF9icHAgPDwgU0FWQUdFX0JEX0JQUF9TSElGVCkgfAotCQkJKGRlcHRoX3RpbGVfZm9ybWF0IDw8IFNBVkFHRV9CRF9USUxFX1NISUZUKTsKKwkJICAgIChkZXZfcHJpdi0+ZGVwdGhfYnBwIDw8IFNBVkFHRV9CRF9CUFBfU0hJRlQpIHwKKwkJICAgIChkZXB0aF90aWxlX2Zvcm1hdCA8PCBTQVZBR0VfQkRfVElMRV9TSElGVCk7CiAJfQogCiAJLyogc2V0dXAgc3RhdHVzIGFuZCBiY2kgcHRyICovCiAJZGV2X3ByaXYtPmV2ZW50X2NvdW50ZXIgPSAwOwogCWRldl9wcml2LT5ldmVudF93cmFwID0gMDsKIAlkZXZfcHJpdi0+YmNpX3B0ciA9ICh2b2xhdGlsZSB1aW50MzJfdCAqKQotCSAgICAoKHVpbnQ4X3QgKilkZXZfcHJpdi0+bW1pby0+aGFuZGxlICsgU0FWQUdFX0JDSV9PRkZTRVQpOworCSAgICAoKHVpbnQ4X3QgKikgZGV2X3ByaXYtPm1taW8tPmhhbmRsZSArIFNBVkFHRV9CQ0lfT0ZGU0VUKTsKIAlpZiAoUzNfU0FWQUdFM0RfU0VSSUVTKGRldl9wcml2LT5jaGlwc2V0KSkgewogCQlkZXZfcHJpdi0+c3RhdHVzX3VzZWRfbWFzayA9IFNBVkFHRV9GSUZPX1VTRURfTUFTS19TM0Q7CiAJfSBlbHNlIHsKQEAgLTg0OCw3ICs4NTAsNyBAQAogCX0KIAlpZiAoZGV2X3ByaXYtPnN0YXR1cyAhPSBOVUxMKSB7CiAJCWRldl9wcml2LT5zdGF0dXNfcHRyID0KLQkJCSh2b2xhdGlsZSB1aW50MzJfdCAqKWRldl9wcml2LT5zdGF0dXMtPmhhbmRsZTsKKwkJICAgICh2b2xhdGlsZSB1aW50MzJfdCAqKWRldl9wcml2LT5zdGF0dXMtPmhhbmRsZTsKIAkJZGV2X3ByaXYtPndhaXRfZmlmbyA9IHNhdmFnZV9iY2lfd2FpdF9maWZvX3NoYWRvdzsKIAkJZGV2X3ByaXYtPndhaXRfZXZudCA9IHNhdmFnZV9iY2lfd2FpdF9ldmVudF9zaGFkb3c7CiAJCWRldl9wcml2LT5zdGF0dXNfcHRyWzEwMjNdID0gZGV2X3ByaXYtPmV2ZW50X2NvdW50ZXI7CkBAIC04NzQsNyArODc2LDcgQEAKIAkJcmV0dXJuIERSTV9FUlIoRU5PTUVNKTsKIAl9CiAKLQlpZiAoc2F2YWdlX2RtYV9pbml0KGRldl9wcml2KSA8ICAwKSB7CisJaWYgKHNhdmFnZV9kbWFfaW5pdChkZXZfcHJpdikgPCAwKSB7CiAJCURSTV9FUlJPUigiY291bGQgbm90IGluaXRpYWxpemUgY29tbWFuZCBETUFcbiIpOwogCQlzYXZhZ2VfZG9fY2xlYW51cF9iY2koZGV2KTsKIAkJcmV0dXJuIERSTV9FUlIoRU5PTUVNKTsKQEAgLTg4Myw3ICs4ODUsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgc2F2YWdlX2RvX2NsZWFudXBfYmNpKGRybV9kZXZpY2VfdCAqZGV2KQoraW50IHNhdmFnZV9kb19jbGVhbnVwX2JjaShkcm1fZGV2aWNlX3QgKiBkZXYpCiB7CiAJZHJtX3NhdmFnZV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIApAQCAtOTA3LDcgKzkwOSw3IEBACiAKIAlpZiAoZGV2X3ByaXYtPmRtYV9wYWdlcykKIAkJZHJtX2ZyZWUoZGV2X3ByaXYtPmRtYV9wYWdlcywKLQkJCSBzaXplb2YoZHJtX3NhdmFnZV9kbWFfcGFnZV90KSpkZXZfcHJpdi0+bnJfZG1hX3BhZ2VzLAorCQkJIHNpemVvZihkcm1fc2F2YWdlX2RtYV9wYWdlX3QpICogZGV2X3ByaXYtPm5yX2RtYV9wYWdlcywKIAkJCSBEUk1fTUVNX0RSSVZFUik7CiAKIAlyZXR1cm4gMDsKQEAgLTkyMCw3ICs5MjIsNyBAQAogCiAJTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlscCk7CiAKLQlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwoaW5pdCwgKGRybV9zYXZhZ2VfaW5pdF90IF9fdXNlciAqKWRhdGEsCisJRFJNX0NPUFlfRlJPTV9VU0VSX0lPQ1RMKGluaXQsIChkcm1fc2F2YWdlX2luaXRfdCBfX3VzZXIgKikgZGF0YSwKIAkJCQkgc2l6ZW9mKGluaXQpKTsKIAogCXN3aXRjaCAoaW5pdC5mdW5jKSB7CkBAIC05NDMsMTMgKzk0NSwxMyBAQAogCiAJTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlscCk7CiAKLQlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwoZXZlbnQsIChkcm1fc2F2YWdlX2V2ZW50X2VtaXRfdCBfX3VzZXIgKilkYXRhLAorCURSTV9DT1BZX0ZST01fVVNFUl9JT0NUTChldmVudCwgKGRybV9zYXZhZ2VfZXZlbnRfZW1pdF90IF9fdXNlciAqKSBkYXRhLAogCQkJCSBzaXplb2YoZXZlbnQpKTsKIAogCWV2ZW50LmNvdW50ID0gc2F2YWdlX2JjaV9lbWl0X2V2ZW50KGRldl9wcml2LCBldmVudC5mbGFncyk7CiAJZXZlbnQuY291bnQgfD0gZGV2X3ByaXYtPmV2ZW50X3dyYXAgPDwgMTY7Ci0JRFJNX0NPUFlfVE9fVVNFUl9JT0NUTCgmKChkcm1fc2F2YWdlX2V2ZW50X2VtaXRfdCBfX3VzZXIgKilkYXRhKS0+Y291bnQsCi0JCQkgICAgICAgZXZlbnQuY291bnQsIHNpemVvZihldmVudC5jb3VudCkpOworCURSTV9DT1BZX1RPX1VTRVJfSU9DVEwoJigoZHJtX3NhdmFnZV9ldmVudF9lbWl0X3QgX191c2VyICopIGRhdGEpLT4KKwkJCSAgICAgICBjb3VudCwgZXZlbnQuY291bnQsIHNpemVvZihldmVudC5jb3VudCkpOwogCXJldHVybiAwOwogfQogCkBAIC05NjMsNyArOTY1LDcgQEAKIAogCURSTV9ERUJVRygiXG4iKTsKIAotCURSTV9DT1BZX0ZST01fVVNFUl9JT0NUTChldmVudCwgKGRybV9zYXZhZ2VfZXZlbnRfd2FpdF90IF9fdXNlciAqKWRhdGEsCisJRFJNX0NPUFlfRlJPTV9VU0VSX0lPQ1RMKGV2ZW50LCAoZHJtX3NhdmFnZV9ldmVudF93YWl0X3QgX191c2VyICopIGRhdGEsCiAJCQkJIHNpemVvZihldmVudCkpOwogCiAJVVBEQVRFX0VWRU5UX0NPVU5URVIoKTsKQEAgLTk3Myw3ICs5NzUsNyBAQAogCQlod19lID0gU0FWQUdFX1JFQUQoU0FWQUdFX1NUQVRVU19XT1JEMSkgJiAweGZmZmY7CiAJaHdfdyA9IGRldl9wcml2LT5ldmVudF93cmFwOwogCWlmIChod19lID4gZGV2X3ByaXYtPmV2ZW50X2NvdW50ZXIpCi0JCWh3X3ctLTsgLyogaGFyZHdhcmUgaGFzbid0IHBhc3NlZCB0aGUgbGFzdCB3cmFwIHlldCAqLworCQlod193LS07CQkvKiBoYXJkd2FyZSBoYXNuJ3QgcGFzc2VkIHRoZSBsYXN0IHdyYXAgeWV0ICovCiAKIAlldmVudF9lID0gZXZlbnQuY291bnQgJiAweGZmZmY7CiAJZXZlbnRfdyA9IGV2ZW50LmNvdW50ID4+IDE2OwpAQCAtOTgyLDcgKzk4NCw3IEBACiAJICogLSBldmVudCBjb3VudGVyIHdyYXBwZWQgc2luY2UgdGhlIGV2ZW50IHdhcyBlbWl0dGVkIG9yCiAJICogLSB0aGUgaGFyZHdhcmUgaGFzIGFkdmFuY2VkIHVwIHRvIG9yIG92ZXIgdGhlIGV2ZW50IHRvIHdhaXQgZm9yLgogCSAqLwotCWlmIChldmVudF93IDwgaHdfdyB8fCAoZXZlbnRfdyA9PSBod193ICYmIGV2ZW50X2UgPD0gaHdfZSkgKQorCWlmIChldmVudF93IDwgaHdfdyB8fCAoZXZlbnRfdyA9PSBod193ICYmIGV2ZW50X2UgPD0gaHdfZSkpCiAJCXJldHVybiAwOwogCWVsc2UKIAkJcmV0dXJuIGRldl9wcml2LT53YWl0X2V2bnQoZGV2X3ByaXYsIGV2ZW50X2UpOwpAQCAtOTkyLDcgKzk5NCw4IEBACiAgKiBETUEgYnVmZmVyIG1hbmFnZW1lbnQKICAqLwogCi1zdGF0aWMgaW50IHNhdmFnZV9iY2lfZ2V0X2J1ZmZlcnMoRFJNRklMRSBmaWxwLCBkcm1fZGV2aWNlX3QgKmRldiwgZHJtX2RtYV90ICpkKQorc3RhdGljIGludCBzYXZhZ2VfYmNpX2dldF9idWZmZXJzKERSTUZJTEUgZmlscCwgZHJtX2RldmljZV90ICogZGV2LAorCQkJCSAgZHJtX2RtYV90ICogZCkKIHsKIAlkcm1fYnVmX3QgKmJ1ZjsKIAlpbnQgaTsKQEAgLTEwMjUsNyArMTAyOCw3IEBACiAKIAlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxwKTsKIAotCURSTV9DT1BZX0ZST01fVVNFUl9JT0NUTChkLCAoZHJtX2RtYV90IF9fdXNlciAqKWRhdGEsIHNpemVvZihkKSk7CisJRFJNX0NPUFlfRlJPTV9VU0VSX0lPQ1RMKGQsIChkcm1fZG1hX3QgX191c2VyICopIGRhdGEsIHNpemVvZihkKSk7CiAKIAkvKiBQbGVhc2UgZG9uJ3Qgc2VuZCB1cyBidWZmZXJzLgogCSAqLwpAQCAtMTA0OSwxMiArMTA1MiwxMyBAQAogCQlyZXQgPSBzYXZhZ2VfYmNpX2dldF9idWZmZXJzKGZpbHAsIGRldiwgJmQpOwogCX0KIAotCURSTV9DT1BZX1RPX1VTRVJfSU9DVEwoKGRybV9kbWFfdCBfX3VzZXIgKilkYXRhLCBkLCBzaXplb2YoZCkpOworCURSTV9DT1BZX1RPX1VTRVJfSU9DVEwoKGRybV9kbWFfdCBfX3VzZXIgKikgZGF0YSwgZCwgc2l6ZW9mKGQpKTsKIAogCXJldHVybiByZXQ7CiB9CiAKLXZvaWQgc2F2YWdlX3JlY2xhaW1fYnVmZmVycyhkcm1fZGV2aWNlX3QgKmRldiwgRFJNRklMRSBmaWxwKSB7Cit2b2lkIHNhdmFnZV9yZWNsYWltX2J1ZmZlcnMoZHJtX2RldmljZV90ICogZGV2LCBEUk1GSUxFIGZpbHApCit7CiAJZHJtX2RldmljZV9kbWFfdCAqZG1hID0gZGV2LT5kbWE7CiAJZHJtX3NhdmFnZV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlpbnQgaTsKQEAgLTEwNjYsNyArMTA3MCw3IEBACiAJaWYgKCFkbWEtPmJ1Zmxpc3QpCiAJCXJldHVybjsKIAotCS8qaTgzMF9mbHVzaF9xdWV1ZShkZXYpOyovCisJLyppODMwX2ZsdXNoX3F1ZXVlKGRldik7ICovCiAKIAlmb3IgKGkgPSAwOyBpIDwgZG1hLT5idWZfY291bnQ7IGkrKykgewogCQlkcm1fYnVmX3QgKmJ1ZiA9IGRtYS0+YnVmbGlzdFtpXTsKQEAgLTEwODUsMTIgKzEwODksMTUgQEAKIAlkcm1fY29yZV9yZWNsYWltX2J1ZmZlcnMoZGV2LCBmaWxwKTsKIH0KIAotCiBkcm1faW9jdGxfZGVzY190IHNhdmFnZV9pb2N0bHNbXSA9IHsKLQlbRFJNX0lPQ1RMX05SKERSTV9TQVZBR0VfQkNJX0lOSVQpXSA9IHtzYXZhZ2VfYmNpX2luaXQsIDEsIDF9LAotCVtEUk1fSU9DVExfTlIoRFJNX1NBVkFHRV9CQ0lfQ01EQlVGKV0gPSB7c2F2YWdlX2JjaV9jbWRidWYsIDEsIDB9LAotCVtEUk1fSU9DVExfTlIoRFJNX1NBVkFHRV9CQ0lfRVZFTlRfRU1JVCldID0ge3NhdmFnZV9iY2lfZXZlbnRfZW1pdCwgMSwgMH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fU0FWQUdFX0JDSV9FVkVOVF9XQUlUKV0gPSB7c2F2YWdlX2JjaV9ldmVudF93YWl0LCAxLCAwfSwKKwlbRFJNX0lPQ1RMX05SKERSTV9TQVZBR0VfQkNJX0lOSVQpXSA9IHtzYXZhZ2VfYmNpX2luaXQsIDEsIDF9CisJLAorCVtEUk1fSU9DVExfTlIoRFJNX1NBVkFHRV9CQ0lfQ01EQlVGKV0gPSB7c2F2YWdlX2JjaV9jbWRidWYsIDEsIDB9CisJLAorCVtEUk1fSU9DVExfTlIoRFJNX1NBVkFHRV9CQ0lfRVZFTlRfRU1JVCldID0ge3NhdmFnZV9iY2lfZXZlbnRfZW1pdCwgMSwgMH0KKwksCisJW0RSTV9JT0NUTF9OUihEUk1fU0FWQUdFX0JDSV9FVkVOVF9XQUlUKV0gPSB7c2F2YWdlX2JjaV9ldmVudF93YWl0LCAxLCAwfQorCSwKIH07CiAKIGludCBzYXZhZ2VfbWF4X2lvY3RsID0gRFJNX0FSUkFZX1NJWkUoc2F2YWdlX2lvY3Rscyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3NhdmFnZV9kcm0uaCBiL2RyaXZlcnMvY2hhci9kcm0vc2F2YWdlX2RybS5oCmluZGV4IDY1MjZjOWEuLmUxMTQ4ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vc2F2YWdlX2RybS5oCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vc2F2YWdlX2RybS5oCkBAIC00MiwxMiArNDIsMTMgQEAKICNkZWZpbmUgU0FWQUdFX05SX1RFWF9SRUdJT05TCQkxNgogI2RlZmluZSBTQVZBR0VfTE9HX01JTl9URVhfUkVHSU9OX1NJWkUJMTYKIAotI2VuZGlmIC8qIF9fU0FWQUdFX1NBUkVBX0RFRklORVNfXyAqLworI2VuZGlmCQkJCS8qIF9fU0FWQUdFX1NBUkVBX0RFRklORVNfXyAqLwogCiB0eXBlZGVmIHN0cnVjdCBfZHJtX3NhdmFnZV9zYXJlYSB7CiAJLyogTFJVIGxpc3RzIGZvciB0ZXh0dXJlIG1lbW9yeSBpbiBhZ3Agc3BhY2UgYW5kIG9uIHRoZSBjYXJkLgogCSAqLwotCWRybV90ZXhfcmVnaW9uX3QgdGV4TGlzdFtTQVZBR0VfTlJfVEVYX0hFQVBTXVtTQVZBR0VfTlJfVEVYX1JFR0lPTlMrMV07CisJZHJtX3RleF9yZWdpb25fdCB0ZXhMaXN0W1NBVkFHRV9OUl9URVhfSEVBUFNdW1NBVkFHRV9OUl9URVhfUkVHSU9OUyArCisJCQkJCQkgICAgICAxXTsKIAl1bnNpZ25lZCBpbnQgdGV4QWdlW1NBVkFHRV9OUl9URVhfSEVBUFNdOwogCiAJLyogTWVjaGFuaXNtIHRvIHZhbGlkYXRlIGNhcmQgc3RhdGUuCkBAIC0xMDEsMjQgKzEwMiwyNCBAQAogCiB0eXBlZGVmIHVuaW9uIGRybV9zYXZhZ2VfY21kX2hlYWRlciBkcm1fc2F2YWdlX2NtZF9oZWFkZXJfdDsKIHR5cGVkZWYgc3RydWN0IGRybV9zYXZhZ2VfY21kYnVmIHsKLQkJCQkvKiBjb21tYW5kIGJ1ZmZlciBpbiBjbGllbnQncyBhZGRyZXNzIHNwYWNlICovCisJLyogY29tbWFuZCBidWZmZXIgaW4gY2xpZW50J3MgYWRkcmVzcyBzcGFjZSAqLwogCWRybV9zYXZhZ2VfY21kX2hlYWRlcl90IF9fdXNlciAqY21kX2FkZHI7CiAJdW5zaWduZWQgaW50IHNpemU7CS8qIHNpemUgb2YgdGhlIGNvbW1hbmQgYnVmZmVyIGluIDY0Yml0IHVuaXRzICovCiAKIAl1bnNpZ25lZCBpbnQgZG1hX2lkeDsJLyogRE1BIGJ1ZmZlciBpbmRleCB0byB1c2UgKi8KIAlpbnQgZGlzY2FyZDsJCS8qIGRpc2NhcmQgRE1BIGJ1ZmZlciB3aGVuIGRvbmUgKi8KLQkJCQkvKiB2ZXJ0ZXggYnVmZmVyIGluIGNsaWVudCdzIGFkZHJlc3Mgc3BhY2UgKi8KKwkvKiB2ZXJ0ZXggYnVmZmVyIGluIGNsaWVudCdzIGFkZHJlc3Mgc3BhY2UgKi8KIAl1bnNpZ25lZCBpbnQgX191c2VyICp2Yl9hZGRyOwogCXVuc2lnbmVkIGludCB2Yl9zaXplOwkvKiBzaXplIG9mIGNsaWVudCB2ZXJ0ZXggYnVmZmVyIGluIGJ5dGVzICovCiAJdW5zaWduZWQgaW50IHZiX3N0cmlkZTsJLyogc3RyaWRlIG9mIHZlcnRpY2VzIGluIDMyYml0IHdvcmRzICovCi0JCQkJLyogYm94ZXMgaW4gY2xpZW50J3MgYWRkcmVzcyBzcGFjZSAqLworCS8qIGJveGVzIGluIGNsaWVudCdzIGFkZHJlc3Mgc3BhY2UgKi8KIAlkcm1fY2xpcF9yZWN0X3QgX191c2VyICpib3hfYWRkcjsKIAl1bnNpZ25lZCBpbnQgbmJveDsJLyogbnVtYmVyIG9mIGNsaXBwaW5nIGJveGVzICovCiB9IGRybV9zYXZhZ2VfY21kYnVmX3Q7CiAKLSNkZWZpbmUgU0FWQUdFX1dBSVRfMkQgIDB4MSAvKiB3YWl0IGZvciAyRCBpZGxlIGJlZm9yZSB1cGRhdGluZyBldmVudCB0YWcgKi8KLSNkZWZpbmUgU0FWQUdFX1dBSVRfM0QgIDB4MiAvKiB3YWl0IGZvciAzRCBpZGxlIGJlZm9yZSB1cGRhdGluZyBldmVudCB0YWcgKi8KLSNkZWZpbmUgU0FWQUdFX1dBSVRfSVJRIDB4NCAvKiBlbWl0IG9yIHdhaXQgZm9yIElSUSwgbm90IGltcGxlbWVudGVkIHlldCAqLworI2RlZmluZSBTQVZBR0VfV0FJVF8yRCAgMHgxCS8qIHdhaXQgZm9yIDJEIGlkbGUgYmVmb3JlIHVwZGF0aW5nIGV2ZW50IHRhZyAqLworI2RlZmluZSBTQVZBR0VfV0FJVF8zRCAgMHgyCS8qIHdhaXQgZm9yIDNEIGlkbGUgYmVmb3JlIHVwZGF0aW5nIGV2ZW50IHRhZyAqLworI2RlZmluZSBTQVZBR0VfV0FJVF9JUlEgMHg0CS8qIGVtaXQgb3Igd2FpdCBmb3IgSVJRLCBub3QgaW1wbGVtZW50ZWQgeWV0ICovCiB0eXBlZGVmIHN0cnVjdCBkcm1fc2F2YWdlX2V2ZW50IHsKIAl1bnNpZ25lZCBpbnQgY291bnQ7CiAJdW5zaWduZWQgaW50IGZsYWdzOwpAQCAtMTI2LDIxICsxMjcsMjEgQEAKIAogLyogQ29tbWFuZHMgZm9yIHRoZSBjbWRidWYgaW9jdGwKICAqLwotI2RlZmluZSBTQVZBR0VfQ01EX1NUQVRFCTAgIC8qIGEgcmFuZ2Ugb2Ygc3RhdGUgcmVnaXN0ZXJzICovCi0jZGVmaW5lIFNBVkFHRV9DTURfRE1BX1BSSU0JMSAgLyogdmVydGljZXMgZnJvbSBETUEgYnVmZmVyICovCi0jZGVmaW5lIFNBVkFHRV9DTURfVkJfUFJJTQkyICAvKiB2ZXJ0aWNlcyBmcm9tIGNsaWVudCB2ZXJ0ZXggYnVmZmVyICovCi0jZGVmaW5lIFNBVkFHRV9DTURfRE1BX0lEWAkzICAvKiBpbmRleGVkIHZlcnRpY2VzIGZyb20gRE1BIGJ1ZmZlciAqLwotI2RlZmluZSBTQVZBR0VfQ01EX1ZCX0lEWAk0ICAvKiBpbmRleGVkIHZlcnRpY2VzIGNsaWVudCB2ZXJ0ZXggYnVmZmVyICovCi0jZGVmaW5lIFNBVkFHRV9DTURfQ0xFQVIJNSAgLyogY2xlYXIgYnVmZmVycyAqLwotI2RlZmluZSBTQVZBR0VfQ01EX1NXQVAJCTYgIC8qIHN3YXAgYnVmZmVycyAqLworI2RlZmluZSBTQVZBR0VfQ01EX1NUQVRFCTAJLyogYSByYW5nZSBvZiBzdGF0ZSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgU0FWQUdFX0NNRF9ETUFfUFJJTQkxCS8qIHZlcnRpY2VzIGZyb20gRE1BIGJ1ZmZlciAqLworI2RlZmluZSBTQVZBR0VfQ01EX1ZCX1BSSU0JMgkvKiB2ZXJ0aWNlcyBmcm9tIGNsaWVudCB2ZXJ0ZXggYnVmZmVyICovCisjZGVmaW5lIFNBVkFHRV9DTURfRE1BX0lEWAkzCS8qIGluZGV4ZWQgdmVydGljZXMgZnJvbSBETUEgYnVmZmVyICovCisjZGVmaW5lIFNBVkFHRV9DTURfVkJfSURYCTQJLyogaW5kZXhlZCB2ZXJ0aWNlcyBjbGllbnQgdmVydGV4IGJ1ZmZlciAqLworI2RlZmluZSBTQVZBR0VfQ01EX0NMRUFSCTUJLyogY2xlYXIgYnVmZmVycyAqLworI2RlZmluZSBTQVZBR0VfQ01EX1NXQVAJCTYJLyogc3dhcCBidWZmZXJzICovCiAKIC8qIFByaW1pdGl2ZSB0eXBlcwogKi8KLSNkZWZpbmUgU0FWQUdFX1BSSU1fVFJJTElTVAkwICAvKiB0cmlhbmdsZSBsaXN0ICovCi0jZGVmaW5lIFNBVkFHRV9QUklNX1RSSVNUUklQCTEgIC8qIHRyaWFuZ2xlIHN0cmlwICovCi0jZGVmaW5lIFNBVkFHRV9QUklNX1RSSUZBTgkyICAvKiB0cmlhbmdsZSBmYW4gKi8KLSNkZWZpbmUgU0FWQUdFX1BSSU1fVFJJTElTVF8yMDEJMyAgLyogcmVvcmRlciB2ZXJ0cyBmb3IgY29ycmVjdCBmbGF0Ci0JCQkJICAgICogc2hhZGluZyBvbiBzM2QgKi8KKyNkZWZpbmUgU0FWQUdFX1BSSU1fVFJJTElTVAkwCS8qIHRyaWFuZ2xlIGxpc3QgKi8KKyNkZWZpbmUgU0FWQUdFX1BSSU1fVFJJU1RSSVAJMQkvKiB0cmlhbmdsZSBzdHJpcCAqLworI2RlZmluZSBTQVZBR0VfUFJJTV9UUklGQU4JMgkvKiB0cmlhbmdsZSBmYW4gKi8KKyNkZWZpbmUgU0FWQUdFX1BSSU1fVFJJTElTVF8yMDEJMwkvKiByZW9yZGVyIHZlcnRzIGZvciBjb3JyZWN0IGZsYXQKKwkJCQkJICogc2hhZGluZyBvbiBzM2QgKi8KIAogLyogU2tpcCBmbGFncyAodmVydGV4IGZvcm1hdCkKICAqLwpAQCAtMTcyLDM4ICsxNzMsMzggQEAKIAkJdW5zaWduZWQgc2hvcnQgcGFkMTsKIAkJdW5zaWduZWQgc2hvcnQgcGFkMjsKIAkJdW5zaWduZWQgc2hvcnQgcGFkMzsKLQl9IGNtZDsgLyogZ2VuZXJpYyAqLworCX0gY21kOwkJCS8qIGdlbmVyaWMgKi8KIAlzdHJ1Y3QgewogCQl1bnNpZ25lZCBjaGFyIGNtZDsKIAkJdW5zaWduZWQgY2hhciBnbG9iYWw7CS8qIG5lZWQgaWRsZSBlbmdpbmU/ICovCiAJCXVuc2lnbmVkIHNob3J0IGNvdW50OwkvKiBudW1iZXIgb2YgY29uc2VjdXRpdmUgcmVnaXN0ZXJzICovCiAJCXVuc2lnbmVkIHNob3J0IHN0YXJ0OwkvKiBmaXJzdCByZWdpc3RlciAqLwogCQl1bnNpZ25lZCBzaG9ydCBwYWQzOwotCX0gc3RhdGU7IC8qIFNBVkFHRV9DTURfU1RBVEUgKi8KKwl9IHN0YXRlOwkJLyogU0FWQUdFX0NNRF9TVEFURSAqLwogCXN0cnVjdCB7CiAJCXVuc2lnbmVkIGNoYXIgY21kOwogCQl1bnNpZ25lZCBjaGFyIHByaW07CS8qIHByaW1pdGl2ZSB0eXBlICovCiAJCXVuc2lnbmVkIHNob3J0IHNraXA7CS8qIHZlcnRleCBmb3JtYXQgKHNraXAgZmxhZ3MpICovCiAJCXVuc2lnbmVkIHNob3J0IGNvdW50OwkvKiBudW1iZXIgb2YgdmVydGljZXMgKi8KIAkJdW5zaWduZWQgc2hvcnQgc3RhcnQ7CS8qIGZpcnN0IHZlcnRleCBpbiBETUEvdmVydGV4IGJ1ZmZlciAqLwotCX0gcHJpbTsgLyogU0FWQUdFX0NNRF9ETUFfUFJJTSwgU0FWQUdFX0NNRF9WQl9QUklNICovCisJfSBwcmltOwkJCS8qIFNBVkFHRV9DTURfRE1BX1BSSU0sIFNBVkFHRV9DTURfVkJfUFJJTSAqLwogCXN0cnVjdCB7CiAJCXVuc2lnbmVkIGNoYXIgY21kOwogCQl1bnNpZ25lZCBjaGFyIHByaW07CiAJCXVuc2lnbmVkIHNob3J0IHNraXA7CiAJCXVuc2lnbmVkIHNob3J0IGNvdW50OwkvKiBudW1iZXIgb2YgaW5kaWNlcyB0aGF0IGZvbGxvdyAqLwogCQl1bnNpZ25lZCBzaG9ydCBwYWQzOwotCX0gaWR4OyAvKiBTQVZBR0VfQ01EX0RNQV9JRFgsIFNBVkFHRV9DTURfVkJfSURYICovCisJfSBpZHg7CQkJLyogU0FWQUdFX0NNRF9ETUFfSURYLCBTQVZBR0VfQ01EX1ZCX0lEWCAqLwogCXN0cnVjdCB7CiAJCXVuc2lnbmVkIGNoYXIgY21kOwogCQl1bnNpZ25lZCBjaGFyIHBhZDA7CiAJCXVuc2lnbmVkIHNob3J0IHBhZDE7CiAJCXVuc2lnbmVkIGludCBmbGFnczsKLQl9IGNsZWFyMDsgLyogU0FWQUdFX0NNRF9DTEVBUiAqLworCX0gY2xlYXIwOwkJLyogU0FWQUdFX0NNRF9DTEVBUiAqLwogCXN0cnVjdCB7CiAJCXVuc2lnbmVkIGludCBtYXNrOwogCQl1bnNpZ25lZCBpbnQgdmFsdWU7Ci0JfSBjbGVhcjE7IC8qIFNBVkFHRV9DTURfQ0xFQVIgZGF0YSAqLworCX0gY2xlYXIxOwkJLyogU0FWQUdFX0NNRF9DTEVBUiBkYXRhICovCiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vc2F2YWdlX2Rydi5jIGIvZHJpdmVycy9jaGFyL2RybS9zYXZhZ2VfZHJ2LmMKaW5kZXggYWM4ZDI3MC4uMDkwNmY5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9zYXZhZ2VfZHJ2LmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9zYXZhZ2VfZHJ2LmMKQEAgLTMwLDMwICszMCwyOCBAQAogCiAjaW5jbHVkZSAiZHJtX3BjaWlkcy5oIgogCi1zdGF0aWMgaW50IHBvc3Rpbml0KCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzICkKK3N0YXRpYyBpbnQgcG9zdGluaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKLQlEUk1fSU5GTyggIkluaXRpYWxpemVkICVzICVkLiVkLiVkICVzIG9uIG1pbm9yICVkOiAlc1xuIiwKLQkJRFJJVkVSX05BTUUsCi0JCURSSVZFUl9NQUpPUiwKLQkJRFJJVkVSX01JTk9SLAotCQlEUklWRVJfUEFUQ0hMRVZFTCwKLQkJRFJJVkVSX0RBVEUsCi0JCWRldi0+cHJpbWFyeS5taW5vciwKLQkJcGNpX3ByZXR0eV9uYW1lKGRldi0+cGRldikKLQkJKTsKKwlEUk1fSU5GTygiSW5pdGlhbGl6ZWQgJXMgJWQuJWQuJWQgJXMgb24gbWlub3IgJWQ6ICVzXG4iLAorCQkgRFJJVkVSX05BTUUsCisJCSBEUklWRVJfTUFKT1IsCisJCSBEUklWRVJfTUlOT1IsCisJCSBEUklWRVJfUEFUQ0hMRVZFTCwKKwkJIERSSVZFUl9EQVRFLCBkZXYtPnByaW1hcnkubWlub3IsIHBjaV9wcmV0dHlfbmFtZShkZXYtPnBkZXYpCisJICAgICk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmVyc2lvbiggZHJtX3ZlcnNpb25fdCAqdmVyc2lvbiApCitzdGF0aWMgaW50IHZlcnNpb24oZHJtX3ZlcnNpb25fdCAqIHZlcnNpb24pCiB7CiAJaW50IGxlbjsKIAogCXZlcnNpb24tPnZlcnNpb25fbWFqb3IgPSBEUklWRVJfTUFKT1I7CiAJdmVyc2lvbi0+dmVyc2lvbl9taW5vciA9IERSSVZFUl9NSU5PUjsKIAl2ZXJzaW9uLT52ZXJzaW9uX3BhdGNobGV2ZWwgPSBEUklWRVJfUEFUQ0hMRVZFTDsKLQlEUk1fQ09QWSggdmVyc2lvbi0+bmFtZSwgRFJJVkVSX05BTUUgKTsKLQlEUk1fQ09QWSggdmVyc2lvbi0+ZGF0ZSwgRFJJVkVSX0RBVEUgKTsKLQlEUk1fQ09QWSggdmVyc2lvbi0+ZGVzYywgRFJJVkVSX0RFU0MgKTsKKwlEUk1fQ09QWSh2ZXJzaW9uLT5uYW1lLCBEUklWRVJfTkFNRSk7CisJRFJNX0NPUFkodmVyc2lvbi0+ZGF0ZSwgRFJJVkVSX0RBVEUpOworCURSTV9DT1BZKHZlcnNpb24tPmRlc2MsIERSSVZFUl9ERVNDKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjYsOCArNjQsNyBAQAogCiBzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIgZHJpdmVyID0gewogCS5kcml2ZXJfZmVhdHVyZXMgPQotCSAgICBEUklWRVJfVVNFX0FHUCB8IERSSVZFUl9VU0VfTVRSUiB8Ci0JICAgIERSSVZFUl9IQVZFX0RNQSB8IERSSVZFUl9QQ0lfRE1BLAorCSAgICBEUklWRVJfVVNFX0FHUCB8IERSSVZFUl9VU0VfTVRSUiB8IERSSVZFUl9IQVZFX0RNQSB8IERSSVZFUl9QQ0lfRE1BLAogCS5kZXZfcHJpdl9zaXplID0gc2l6ZW9mKGRybV9zYXZhZ2VfYnVmX3ByaXZfdCksCiAJLnByZWluaXQgPSBzYXZhZ2VfcHJlaW5pdCwKIAkucG9zdGluaXQgPSBwb3N0aW5pdCwKQEAgLTc5LDE4ICs3NiwxOSBAQAogCS5pb2N0bHMgPSBzYXZhZ2VfaW9jdGxzLAogCS5kbWFfaW9jdGwgPSBzYXZhZ2VfYmNpX2J1ZmZlcnMsCiAJLmZvcHMgPSB7Ci0JCS5vd25lciAgID0gVEhJU19NT0RVTEUsCi0JCS5vcGVuCSA9IGRybV9vcGVuLAotCQkucmVsZWFzZSA9IGRybV9yZWxlYXNlLAotCQkuaW9jdGwJID0gZHJtX2lvY3RsLAotCQkubW1hcAkgPSBkcm1fbW1hcCwKLQkJLnBvbGwgPSBkcm1fcG9sbCwKLQkJLmZhc3luYyAgPSBkcm1fZmFzeW5jLAotCX0sCisJCSAub3duZXIgPSBUSElTX01PRFVMRSwKKwkJIC5vcGVuID0gZHJtX29wZW4sCisJCSAucmVsZWFzZSA9IGRybV9yZWxlYXNlLAorCQkgLmlvY3RsID0gZHJtX2lvY3RsLAorCQkgLm1tYXAgPSBkcm1fbW1hcCwKKwkJIC5wb2xsID0gZHJtX3BvbGwsCisJCSAuZmFzeW5jID0gZHJtX2Zhc3luYywKKwkJIH0KKwksCiAJLnBjaV9kcml2ZXIgPSB7Ci0JCS5uYW1lICAgICAgICAgID0gRFJJVkVSX05BTUUsCi0JCS5pZF90YWJsZSAgICAgID0gcGNpaWRsaXN0LAotCX0KKwkJICAgICAgIC5uYW1lID0gRFJJVkVSX05BTUUsCisJCSAgICAgICAuaWRfdGFibGUgPSBwY2lpZGxpc3QsCisJCSAgICAgICB9CiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBzYXZhZ2VfaW5pdCh2b2lkKQpAQCAtMTA3LDYgKzEwNSw2IEBACiBtb2R1bGVfaW5pdChzYXZhZ2VfaW5pdCk7CiBtb2R1bGVfZXhpdChzYXZhZ2VfZXhpdCk7CiAKLU1PRFVMRV9BVVRIT1IoIERSSVZFUl9BVVRIT1IgKTsKLU1PRFVMRV9ERVNDUklQVElPTiggRFJJVkVSX0RFU0MgKTsKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCBhbmQgYWRkaXRpb25hbCByaWdodHMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vc2F2YWdlX2Rydi5oIGIvZHJpdmVycy9jaGFyL2RybS9zYXZhZ2VfZHJ2LmgKaW5kZXggYTQ1NDM0OS4uMzU4ZjRmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9zYXZhZ2VfZHJ2LmgKKysrIGIvZHJpdmVycy9jaGFyL2RybS9zYXZhZ2VfZHJ2LmgKQEAgLTY1LDcgKzY1LDcgQEAKIAlkcm1fc2F2YWdlX2FnZV90IGFnZTsKIAl1bnNpZ25lZCBpbnQgdXNlZCwgZmx1c2hlZDsKIH0gZHJtX3NhdmFnZV9kbWFfcGFnZV90OwotI2RlZmluZSBTQVZBR0VfRE1BX1BBR0VfU0laRSAxMDI0IC8qIGluIGR3b3JkcyAqLworI2RlZmluZSBTQVZBR0VfRE1BX1BBR0VfU0laRSAxMDI0CS8qIGluIGR3b3JkcyAqLwogLyogRmFrZSBETUEgYnVmZmVyIHNpemUgaW4gYnl0ZXMuIDQgcGFnZXMuIEFsbG93cyBhIG1heGltdW0gY29tbWFuZAogICogc2l6ZSBvZiAxNmtieXRlcyBvciA0ayBlbnRyaWVzLiBNaW5pbXVtIHJlcXVpcmVtZW50IHdvdWxkIGJlCiAgKiAxMGtieXRlcyBmb3IgMjU1IDQwLWJ5dGUgdmVydGljZXMgaW4gb25lIGRyYXdpbmcgY29tbWFuZC4gKi8KQEAgLTE4NCwxMyArMTg0LDEzIEBACiAJdW5zaWduZWQgaW50IHdhaXRpbmc7CiAKIAkvKiBjb25maWcvaGFyZHdhcmUtZGVwZW5kZW50IGZ1bmN0aW9uIHBvaW50ZXJzICovCi0JaW50ICgqd2FpdF9maWZvKShzdHJ1Y3QgZHJtX3NhdmFnZV9wcml2YXRlICpkZXZfcHJpdiwgdW5zaWduZWQgaW50IG4pOwotCWludCAoKndhaXRfZXZudCkoc3RydWN0IGRybV9zYXZhZ2VfcHJpdmF0ZSAqZGV2X3ByaXYsIHVpbnQxNl90IGUpOworCWludCAoKndhaXRfZmlmbykgKHN0cnVjdCBkcm1fc2F2YWdlX3ByaXZhdGUgKiBkZXZfcHJpdiwgdW5zaWduZWQgaW50IG4pOworCWludCAoKndhaXRfZXZudCkgKHN0cnVjdCBkcm1fc2F2YWdlX3ByaXZhdGUgKiBkZXZfcHJpdiwgdWludDE2X3QgZSk7CiAJLyogRXJyLCB0aGVyZSBpcyBhIG1hY3JvIHdhaXRfZXZlbnQgaW4gaW5jbHVkZS9saW51eC93YWl0LmguCiAJICogQXZvaWQgdW53YW50ZWQgbWFjcm8gZXhwYW5zaW9uLiAqLwotCXZvaWQgKCplbWl0X2NsaXBfcmVjdCkoc3RydWN0IGRybV9zYXZhZ2VfcHJpdmF0ZSAqZGV2X3ByaXYsCi0JCQkgICAgICAgZHJtX2NsaXBfcmVjdF90ICpwYm94KTsKLQl2b2lkICgqZG1hX2ZsdXNoKShzdHJ1Y3QgZHJtX3NhdmFnZV9wcml2YXRlICpkZXZfcHJpdik7CisJdm9pZCAoKmVtaXRfY2xpcF9yZWN0KSAoc3RydWN0IGRybV9zYXZhZ2VfcHJpdmF0ZSAqIGRldl9wcml2LAorCQkJCWRybV9jbGlwX3JlY3RfdCAqIHBib3gpOworCXZvaWQgKCpkbWFfZmx1c2gpIChzdHJ1Y3QgZHJtX3NhdmFnZV9wcml2YXRlICogZGV2X3ByaXYpOwogfSBkcm1fc2F2YWdlX3ByaXZhdGVfdDsKIAogLyogaW9jdGxzICovCkBAIC0xOTgsMjMgKzE5OCwyMyBAQAogZXh0ZXJuIGludCBzYXZhZ2VfYmNpX2J1ZmZlcnMoRFJNX0lPQ1RMX0FSR1MpOwogCiAvKiBCQ0kgZnVuY3Rpb25zICovCi1leHRlcm4gdWludDE2X3Qgc2F2YWdlX2JjaV9lbWl0X2V2ZW50KGRybV9zYXZhZ2VfcHJpdmF0ZV90ICpkZXZfcHJpdiwKK2V4dGVybiB1aW50MTZfdCBzYXZhZ2VfYmNpX2VtaXRfZXZlbnQoZHJtX3NhdmFnZV9wcml2YXRlX3QgKiBkZXZfcHJpdiwKIAkJCQkgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpOwotZXh0ZXJuIHZvaWQgc2F2YWdlX2ZyZWVsaXN0X3B1dChkcm1fZGV2aWNlX3QgKmRldiwgZHJtX2J1Zl90ICpidWYpOwotZXh0ZXJuIHZvaWQgc2F2YWdlX2RtYV9yZXNldChkcm1fc2F2YWdlX3ByaXZhdGVfdCAqZGV2X3ByaXYpOwotZXh0ZXJuIHZvaWQgc2F2YWdlX2RtYV93YWl0KGRybV9zYXZhZ2VfcHJpdmF0ZV90ICpkZXZfcHJpdiwgdW5zaWduZWQgaW50IHBhZ2UpOwotZXh0ZXJuIHVpbnQzMl90ICpzYXZhZ2VfZG1hX2FsbG9jKGRybV9zYXZhZ2VfcHJpdmF0ZV90ICpkZXZfcHJpdiwKK2V4dGVybiB2b2lkIHNhdmFnZV9mcmVlbGlzdF9wdXQoZHJtX2RldmljZV90ICogZGV2LCBkcm1fYnVmX3QgKiBidWYpOworZXh0ZXJuIHZvaWQgc2F2YWdlX2RtYV9yZXNldChkcm1fc2F2YWdlX3ByaXZhdGVfdCAqIGRldl9wcml2KTsKK2V4dGVybiB2b2lkIHNhdmFnZV9kbWFfd2FpdChkcm1fc2F2YWdlX3ByaXZhdGVfdCAqIGRldl9wcml2LCB1bnNpZ25lZCBpbnQgcGFnZSk7CitleHRlcm4gdWludDMyX3QgKnNhdmFnZV9kbWFfYWxsb2MoZHJtX3NhdmFnZV9wcml2YXRlX3QgKiBkZXZfcHJpdiwKIAkJCQkgIHVuc2lnbmVkIGludCBuKTsKLWV4dGVybiBpbnQgc2F2YWdlX3ByZWluaXQoZHJtX2RldmljZV90ICpkZXYsIHVuc2lnbmVkIGxvbmcgY2hpcHNldCk7Ci1leHRlcm4gaW50IHNhdmFnZV9wb3N0Y2xlYW51cChkcm1fZGV2aWNlX3QgKmRldik7Ci1leHRlcm4gaW50IHNhdmFnZV9kb19jbGVhbnVwX2JjaShkcm1fZGV2aWNlX3QgKmRldik7Ci1leHRlcm4gdm9pZCBzYXZhZ2VfcmVjbGFpbV9idWZmZXJzKGRybV9kZXZpY2VfdCAqZGV2LCBEUk1GSUxFIGZpbHApOworZXh0ZXJuIGludCBzYXZhZ2VfcHJlaW5pdChkcm1fZGV2aWNlX3QgKiBkZXYsIHVuc2lnbmVkIGxvbmcgY2hpcHNldCk7CitleHRlcm4gaW50IHNhdmFnZV9wb3N0Y2xlYW51cChkcm1fZGV2aWNlX3QgKiBkZXYpOworZXh0ZXJuIGludCBzYXZhZ2VfZG9fY2xlYW51cF9iY2koZHJtX2RldmljZV90ICogZGV2KTsKK2V4dGVybiB2b2lkIHNhdmFnZV9yZWNsYWltX2J1ZmZlcnMoZHJtX2RldmljZV90ICogZGV2LCBEUk1GSUxFIGZpbHApOwogCiAvKiBzdGF0ZSBmdW5jdGlvbnMgKi8KLWV4dGVybiB2b2lkIHNhdmFnZV9lbWl0X2NsaXBfcmVjdF9zM2QoZHJtX3NhdmFnZV9wcml2YXRlX3QgKmRldl9wcml2LAotCQkJCSAgICAgIGRybV9jbGlwX3JlY3RfdCAqcGJveCk7Ci1leHRlcm4gdm9pZCBzYXZhZ2VfZW1pdF9jbGlwX3JlY3RfczQoZHJtX3NhdmFnZV9wcml2YXRlX3QgKmRldl9wcml2LAotCQkJCSAgICAgZHJtX2NsaXBfcmVjdF90ICpwYm94KTsKK2V4dGVybiB2b2lkIHNhdmFnZV9lbWl0X2NsaXBfcmVjdF9zM2QoZHJtX3NhdmFnZV9wcml2YXRlX3QgKiBkZXZfcHJpdiwKKwkJCQkgICAgICBkcm1fY2xpcF9yZWN0X3QgKiBwYm94KTsKK2V4dGVybiB2b2lkIHNhdmFnZV9lbWl0X2NsaXBfcmVjdF9zNChkcm1fc2F2YWdlX3ByaXZhdGVfdCAqIGRldl9wcml2LAorCQkJCSAgICAgZHJtX2NsaXBfcmVjdF90ICogcGJveCk7CiAKICNkZWZpbmUgU0FWQUdFX0ZCX1NJWkVfUzMJMHgwMTAwMDAwMAkvKiAgMTZNQiAqLwogI2RlZmluZSBTQVZBR0VfRkJfU0laRV9TNAkweDAyMDAwMDAwCS8qICAzMk1CICovCkBAIC0yMjIsMTAgKzIyMiwxMCBAQAogI2RlZmluZSBTQVZBR0VfQVBFUlRVUkVfT0ZGU0VUICAweDAyMDAwMDAwCS8qICAzMk1CICovCiAjZGVmaW5lIFNBVkFHRV9BUEVSVFVSRV9TSVpFICAgIDB4MDUwMDAwMDAJLyogNSB0aWxlZCBzdXJmYWNlcywgMTZNQiBlYWNoICovCiAKLSNkZWZpbmUgU0FWQUdFX0JDSV9PRkZTRVQgICAgICAgMHgwMDAxMDAwMCAgICAgIC8qIG9mZnNldCBvZiB0aGUgQkNJIHJlZ2lvbgorI2RlZmluZSBTQVZBR0VfQkNJX09GRlNFVCAgICAgICAweDAwMDEwMDAwCS8qIG9mZnNldCBvZiB0aGUgQkNJIHJlZ2lvbgogCQkJCQkJICogaW5zaWRlIHRoZSBNTUlPIHJlZ2lvbiAqLwotI2RlZmluZSBTQVZBR0VfQkNJX0ZJRk9fU0laRQkzMgkJLyogbnVtYmVyIG9mIGVudHJpZXMgaW4gb24tY2hpcAotCQkJCQkJICogQkNJIEZJRk8gKi8KKyNkZWZpbmUgU0FWQUdFX0JDSV9GSUZPX1NJWkUJMzIJLyogbnVtYmVyIG9mIGVudHJpZXMgaW4gb24tY2hpcAorCQkJCQkgKiBCQ0kgRklGTyAqLwogCiAvKgogICogTU1JTyByZWdpc3RlcnMKQEAgLTI3OCw3ICsyNzgsNyBAQAogI2RlZmluZSBTQVZBR0VfVEVYQUREUjFfUzQJCTB4MjMKICNkZWZpbmUgU0FWQUdFX1RFWEJMRU5EMF9TNAkJMHgyNAogI2RlZmluZSBTQVZBR0VfVEVYQkxFTkQxX1M0CQkweDI1Ci0jZGVmaW5lIFNBVkFHRV9URVhYUFJDTFJfUzQJCTB4MjYgLyogbmV2ZXIgdXNlZCAqLworI2RlZmluZSBTQVZBR0VfVEVYWFBSQ0xSX1M0CQkweDI2CS8qIG5ldmVyIHVzZWQgKi8KICNkZWZpbmUgU0FWQUdFX1RFWERFU0NSX1M0CQkweDI3CiAjZGVmaW5lIFNBVkFHRV9GT0dUQUJMRV9TNAkJMHgyOAogI2RlZmluZSBTQVZBR0VfRk9HQ1RSTF9TNAkJMHgzMApAQCAtMjkzLDcgKzI5Myw3IEBACiAjZGVmaW5lIFNBVkFHRV9URVhCTEVORENPTE9SX1M0CQkweDM5CiAvKiBTYXZhZ2UzRC9NWC9JWCAzRCByZWdpc3RlcnMgKi8KICNkZWZpbmUgU0FWQUdFX1RFWFBBTEFERFJfUzNECQkweDE4Ci0jZGVmaW5lIFNBVkFHRV9URVhYUFJDTFJfUzNECQkweDE5IC8qIG5ldmVyIHVzZWQgKi8KKyNkZWZpbmUgU0FWQUdFX1RFWFhQUkNMUl9TM0QJCTB4MTkJLyogbmV2ZXIgdXNlZCAqLwogI2RlZmluZSBTQVZBR0VfVEVYQUREUl9TM0QJCTB4MUEKICNkZWZpbmUgU0FWQUdFX1RFWERFU0NSX1MzRAkJMHgxQgogI2RlZmluZSBTQVZBR0VfVEVYQ1RSTF9TM0QJCTB4MUMKQEAgLTMwNSw3ICszMDUsNyBAQAogI2RlZmluZSBTQVZBR0VfREVTVENUUkxfUzNECQkweDM0CiAjZGVmaW5lIFNBVkFHRV9TQ1NUQVJUX1MzRAkJMHgzNQogI2RlZmluZSBTQVZBR0VfU0NFTkRfUzNECQkweDM2Ci0jZGVmaW5lIFNBVkFHRV9aV0FURVJNQVJLX1MzRAkJMHgzNyAKKyNkZWZpbmUgU0FWQUdFX1pXQVRFUk1BUktfUzNECQkweDM3CiAjZGVmaW5lIFNBVkFHRV9ERVNUVEVYUldXQVRFUk1BUktfUzNECTB4MzgKIC8qIGNvbW1vbiBzdHVmZiAqLwogI2RlZmluZSBTQVZBR0VfVkVSVEJVRkFERFIJCTB4M2UKQEAgLTMxMyw5ICszMTMsOSBAQAogI2RlZmluZSBTQVZBR0VfRE1BQlVGQUREUgkJMHg1MQogCiAvKiB0ZXh0dXJlIGVuYWJsZSBiaXRzIChuZWVkZWQgZm9yIHRleCBhZGRyIGNoZWNraW5nKSAqLwotI2RlZmluZSBTQVZBR0VfVEVYQ1RSTF9URVhFTl9NQVNLCTB4MDAwMTAwMDAgLyogUzNEICovCi0jZGVmaW5lIFNBVkFHRV9URVhERVNDUl9URVgwRU5fTUFTSwkweDAyMDAwMDAwIC8qIFM0ICovCi0jZGVmaW5lIFNBVkFHRV9URVhERVNDUl9URVgxRU5fTUFTSwkweDA0MDAwMDAwIC8qIFM0ICovCisjZGVmaW5lIFNBVkFHRV9URVhDVFJMX1RFWEVOX01BU0sJMHgwMDAxMDAwMAkvKiBTM0QgKi8KKyNkZWZpbmUgU0FWQUdFX1RFWERFU0NSX1RFWDBFTl9NQVNLCTB4MDIwMDAwMDAJLyogUzQgKi8KKyNkZWZpbmUgU0FWQUdFX1RFWERFU0NSX1RFWDFFTl9NQVNLCTB4MDQwMDAwMDAJLyogUzQgKi8KIAogLyogR2xvYmFsIGZpZWxkcyBpbiBTYXZhZ2U0L1R3aXN0ZXIvUHJvU2F2YWdlIDNEIHJlZ2lzdGVyczoKICAqCkBAIC01NzYsNCArNTc2LDQgQEAKICNkZWZpbmUgVEVTVF9BR0UoIGFnZSwgZSwgdyApCQkJCVwKIAkoIChhZ2UpLT53cmFwIDwgKHcpIHx8ICggKGFnZSktPndyYXAgPT0gKHcpICYmIChhZ2UpLT5ldmVudCA8PSAoZSkgKSApCiAKLSNlbmRpZiAvKiBfX1NBVkFHRV9EUlZfSF9fICovCisjZW5kaWYJCQkJLyogX19TQVZBR0VfRFJWX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9zYXZhZ2Vfc3RhdGUuYyBiL2RyaXZlcnMvY2hhci9kcm0vc2F2YWdlX3N0YXRlLmMKaW5kZXggNDc1Njk1YS4uMzk2NTRjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9zYXZhZ2Vfc3RhdGUuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL3NhdmFnZV9zdGF0ZS5jCkBAIC0yNiw0OCArMjYsNDggQEAKICNpbmNsdWRlICJzYXZhZ2VfZHJtLmgiCiAjaW5jbHVkZSAic2F2YWdlX2Rydi5oIgogCi12b2lkIHNhdmFnZV9lbWl0X2NsaXBfcmVjdF9zM2QoZHJtX3NhdmFnZV9wcml2YXRlX3QgKmRldl9wcml2LAotCQkJICAgICAgIGRybV9jbGlwX3JlY3RfdCAqcGJveCkKK3ZvaWQgc2F2YWdlX2VtaXRfY2xpcF9yZWN0X3MzZChkcm1fc2F2YWdlX3ByaXZhdGVfdCAqIGRldl9wcml2LAorCQkJICAgICAgIGRybV9jbGlwX3JlY3RfdCAqIHBib3gpCiB7CiAJdWludDMyX3Qgc2NzdGFydCA9IGRldl9wcml2LT5zdGF0ZS5zM2QubmV3X3Njc3RhcnQ7Ci0JdWludDMyX3Qgc2NlbmQgICA9IGRldl9wcml2LT5zdGF0ZS5zM2QubmV3X3NjZW5kOworCXVpbnQzMl90IHNjZW5kID0gZGV2X3ByaXYtPnN0YXRlLnMzZC5uZXdfc2NlbmQ7CiAJc2NzdGFydCA9IChzY3N0YXJ0ICYgflNBVkFHRV9TQ0lTU09SX01BU0tfUzNEKSB8Ci0JCSgodWludDMyX3QpcGJveC0+eDEgJiAweDAwMDAwN2ZmKSB8IAotCQkoKCh1aW50MzJfdClwYm94LT55MSA8PCAxNikgJiAweDA3ZmYwMDAwKTsKLQlzY2VuZCAgID0gKHNjZW5kICAgJiB+U0FWQUdFX1NDSVNTT1JfTUFTS19TM0QpIHwKLQkJKCgodWludDMyX3QpcGJveC0+eDItMSkgJiAweDAwMDAwN2ZmKSB8Ci0JCSgoKCh1aW50MzJfdClwYm94LT55Mi0xKSA8PCAxNikgJiAweDA3ZmYwMDAwKTsKKwkgICAgKCh1aW50MzJfdCkgcGJveC0+eDEgJiAweDAwMDAwN2ZmKSB8CisJICAgICgoKHVpbnQzMl90KSBwYm94LT55MSA8PCAxNikgJiAweDA3ZmYwMDAwKTsKKwlzY2VuZCA9IChzY2VuZCAmIH5TQVZBR0VfU0NJU1NPUl9NQVNLX1MzRCkgfAorCSAgICAoKCh1aW50MzJfdCkgcGJveC0+eDIgLSAxKSAmIDB4MDAwMDA3ZmYpIHwKKwkgICAgKCgoKHVpbnQzMl90KSBwYm94LT55MiAtIDEpIDw8IDE2KSAmIDB4MDdmZjAwMDApOwogCWlmIChzY3N0YXJ0ICE9IGRldl9wcml2LT5zdGF0ZS5zM2Quc2NzdGFydCB8fAotCSAgICBzY2VuZCAgICE9IGRldl9wcml2LT5zdGF0ZS5zM2Quc2NlbmQpIHsKKwkgICAgc2NlbmQgIT0gZGV2X3ByaXYtPnN0YXRlLnMzZC5zY2VuZCkgewogCQlETUFfTE9DQUxTOwogCQlCRUdJTl9ETUEoNCk7Ci0JCURNQV9XUklURShCQ0lfQ01EX1dBSVR8QkNJX0NNRF9XQUlUXzNEKTsKKwkJRE1BX1dSSVRFKEJDSV9DTURfV0FJVCB8IEJDSV9DTURfV0FJVF8zRCk7CiAJCURNQV9TRVRfUkVHSVNURVJTKFNBVkFHRV9TQ1NUQVJUX1MzRCwgMik7CiAJCURNQV9XUklURShzY3N0YXJ0KTsKIAkJRE1BX1dSSVRFKHNjZW5kKTsKIAkJZGV2X3ByaXYtPnN0YXRlLnMzZC5zY3N0YXJ0ID0gc2NzdGFydDsKLQkJZGV2X3ByaXYtPnN0YXRlLnMzZC5zY2VuZCAgID0gc2NlbmQ7CisJCWRldl9wcml2LT5zdGF0ZS5zM2Quc2NlbmQgPSBzY2VuZDsKIAkJZGV2X3ByaXYtPndhaXRpbmcgPSAxOwogCQlETUFfQ09NTUlUKCk7CiAJfQogfQogCi12b2lkIHNhdmFnZV9lbWl0X2NsaXBfcmVjdF9zNChkcm1fc2F2YWdlX3ByaXZhdGVfdCAqZGV2X3ByaXYsCi0JCQkgICAgICBkcm1fY2xpcF9yZWN0X3QgKnBib3gpCit2b2lkIHNhdmFnZV9lbWl0X2NsaXBfcmVjdF9zNChkcm1fc2F2YWdlX3ByaXZhdGVfdCAqIGRldl9wcml2LAorCQkJICAgICAgZHJtX2NsaXBfcmVjdF90ICogcGJveCkKIHsKIAl1aW50MzJfdCBkcmF3Y3RybDAgPSBkZXZfcHJpdi0+c3RhdGUuczQubmV3X2RyYXdjdHJsMDsKIAl1aW50MzJfdCBkcmF3Y3RybDEgPSBkZXZfcHJpdi0+c3RhdGUuczQubmV3X2RyYXdjdHJsMTsKIAlkcmF3Y3RybDAgPSAoZHJhd2N0cmwwICYgflNBVkFHRV9TQ0lTU09SX01BU0tfUzQpIHwKLQkJKCh1aW50MzJfdClwYm94LT54MSAmIDB4MDAwMDA3ZmYpIHwKLQkJKCgodWludDMyX3QpcGJveC0+eTEgPDwgMTIpICYgMHgwMGZmZjAwMCk7CisJICAgICgodWludDMyX3QpIHBib3gtPngxICYgMHgwMDAwMDdmZikgfAorCSAgICAoKCh1aW50MzJfdCkgcGJveC0+eTEgPDwgMTIpICYgMHgwMGZmZjAwMCk7CiAJZHJhd2N0cmwxID0gKGRyYXdjdHJsMSAmIH5TQVZBR0VfU0NJU1NPUl9NQVNLX1M0KSB8Ci0JCSgoKHVpbnQzMl90KXBib3gtPngyLTEpICYgMHgwMDAwMDdmZikgfAotCQkoKCgodWludDMyX3QpcGJveC0+eTItMSkgPDwgMTIpICYgMHgwMGZmZjAwMCk7CisJICAgICgoKHVpbnQzMl90KSBwYm94LT54MiAtIDEpICYgMHgwMDAwMDdmZikgfAorCSAgICAoKCgodWludDMyX3QpIHBib3gtPnkyIC0gMSkgPDwgMTIpICYgMHgwMGZmZjAwMCk7CiAJaWYgKGRyYXdjdHJsMCAhPSBkZXZfcHJpdi0+c3RhdGUuczQuZHJhd2N0cmwwIHx8CiAJICAgIGRyYXdjdHJsMSAhPSBkZXZfcHJpdi0+c3RhdGUuczQuZHJhd2N0cmwxKSB7CiAJCURNQV9MT0NBTFM7CiAJCUJFR0lOX0RNQSg0KTsKLQkJRE1BX1dSSVRFKEJDSV9DTURfV0FJVHxCQ0lfQ01EX1dBSVRfM0QpOworCQlETUFfV1JJVEUoQkNJX0NNRF9XQUlUIHwgQkNJX0NNRF9XQUlUXzNEKTsKIAkJRE1BX1NFVF9SRUdJU1RFUlMoU0FWQUdFX0RSQVdDVFJMMF9TNCwgMik7CiAJCURNQV9XUklURShkcmF3Y3RybDApOwogCQlETUFfV1JJVEUoZHJhd2N0cmwxKTsKQEAgLTc4LDIyICs3OCwyMyBAQAogCX0KIH0KIAotc3RhdGljIGludCBzYXZhZ2VfdmVyaWZ5X3RleGFkZHIoZHJtX3NhdmFnZV9wcml2YXRlX3QgKmRldl9wcml2LCBpbnQgdW5pdCwKK3N0YXRpYyBpbnQgc2F2YWdlX3ZlcmlmeV90ZXhhZGRyKGRybV9zYXZhZ2VfcHJpdmF0ZV90ICogZGV2X3ByaXYsIGludCB1bml0LAogCQkJCSB1aW50MzJfdCBhZGRyKQogewotCWlmICgoYWRkciAmIDYpICE9IDIpIHsgLyogcmVzZXJ2ZWQgYml0cyAqLworCWlmICgoYWRkciAmIDYpICE9IDIpIHsJLyogcmVzZXJ2ZWQgYml0cyAqLwogCQlEUk1fRVJST1IoImJhZCB0ZXhBZGRyJWQgJTA4eCAocmVzZXJ2ZWQgYml0cylcbiIsIHVuaXQsIGFkZHIpOwogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCX0KLQlpZiAoIShhZGRyICYgMSkpIHsgLyogbG9jYWwgKi8KKwlpZiAoIShhZGRyICYgMSkpIHsJLyogbG9jYWwgKi8KIAkJYWRkciAmPSB+NzsKLQkJaWYgKGFkZHIgPCAgZGV2X3ByaXYtPnRleHR1cmVfb2Zmc2V0IHx8Ci0JCSAgICBhZGRyID49IGRldl9wcml2LT50ZXh0dXJlX29mZnNldCtkZXZfcHJpdi0+dGV4dHVyZV9zaXplKSB7Ci0JCQlEUk1fRVJST1IoImJhZCB0ZXhBZGRyJWQgJTA4eCAobG9jYWwgYWRkciBvdXQgb2YgcmFuZ2UpXG4iLAotCQkJCSAgdW5pdCwgYWRkcik7CisJCWlmIChhZGRyIDwgZGV2X3ByaXYtPnRleHR1cmVfb2Zmc2V0IHx8CisJCSAgICBhZGRyID49IGRldl9wcml2LT50ZXh0dXJlX29mZnNldCArIGRldl9wcml2LT50ZXh0dXJlX3NpemUpIHsKKwkJCURSTV9FUlJPUgorCQkJICAgICgiYmFkIHRleEFkZHIlZCAlMDh4IChsb2NhbCBhZGRyIG91dCBvZiByYW5nZSlcbiIsCisJCQkgICAgIHVuaXQsIGFkZHIpOwogCQkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAkJfQotCX0gZWxzZSB7IC8qIEFHUCAqLworCX0gZWxzZSB7CQkvKiBBR1AgKi8KIAkJaWYgKCFkZXZfcHJpdi0+YWdwX3RleHR1cmVzKSB7CiAJCQlEUk1fRVJST1IoImJhZCB0ZXhBZGRyJWQgJTA4eCAoQUdQIG5vdCBhdmFpbGFibGUpXG4iLAogCQkJCSAgdW5pdCwgYWRkcik7CkBAIC0xMDMsOCArMTA0LDkgQEAKIAkJaWYgKGFkZHIgPCBkZXZfcHJpdi0+YWdwX3RleHR1cmVzLT5vZmZzZXQgfHwKIAkJICAgIGFkZHIgPj0gKGRldl9wcml2LT5hZ3BfdGV4dHVyZXMtPm9mZnNldCArCiAJCQkgICAgIGRldl9wcml2LT5hZ3BfdGV4dHVyZXMtPnNpemUpKSB7Ci0JCQlEUk1fRVJST1IoImJhZCB0ZXhBZGRyJWQgJTA4eCAoQUdQIGFkZHIgb3V0IG9mIHJhbmdlKVxuIiwKLQkJCQkgIHVuaXQsIGFkZHIpOworCQkJRFJNX0VSUk9SCisJCQkgICAgKCJiYWQgdGV4QWRkciVkICUwOHggKEFHUCBhZGRyIG91dCBvZiByYW5nZSlcbiIsCisJCQkgICAgIHVuaXQsIGFkZHIpOwogCQkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAkJfQogCX0KQEAgLTEyMiwxNCArMTI0LDE0IEBACiAJCQkoZGV2X3ByaXYtPnN0YXRlLndoZXJlICYgfihtYXNrKSk7CVwKIAl9CQkJCQkJCVwKIH0gd2hpbGUgKDApCi1zdGF0aWMgaW50IHNhdmFnZV92ZXJpZnlfc3RhdGVfczNkKGRybV9zYXZhZ2VfcHJpdmF0ZV90ICpkZXZfcHJpdiwKK3N0YXRpYyBpbnQgc2F2YWdlX3ZlcmlmeV9zdGF0ZV9zM2QoZHJtX3NhdmFnZV9wcml2YXRlX3QgKiBkZXZfcHJpdiwKIAkJCQkgICB1bnNpZ25lZCBpbnQgc3RhcnQsIHVuc2lnbmVkIGludCBjb3VudCwKLQkJCQkgICBjb25zdCB1aW50MzJfdCBfX3VzZXIgKnJlZ3MpCisJCQkJICAgY29uc3QgdWludDMyX3QgX191c2VyICogcmVncykKIHsKIAlpZiAoc3RhcnQgPCBTQVZBR0VfVEVYUEFMQUREUl9TM0QgfHwKLQkgICAgc3RhcnQrY291bnQtMSA+IFNBVkFHRV9ERVNUVEVYUldXQVRFUk1BUktfUzNEKSB7CisJICAgIHN0YXJ0ICsgY291bnQgLSAxID4gU0FWQUdFX0RFU1RURVhSV1dBVEVSTUFSS19TM0QpIHsKIAkJRFJNX0VSUk9SKCJpbnZhbGlkIHJlZ2lzdGVyIHJhbmdlICgweCUwNHgtMHglMDR4KVxuIiwKLQkJCSAgc3RhcnQsIHN0YXJ0K2NvdW50LTEpOworCQkJICBzdGFydCwgc3RhcnQgKyBjb3VudCAtIDEpOwogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCX0KIApAQCAtMTQwLDI4ICsxNDIsMjkgQEAKIAogCS8qIGlmIGFueSB0ZXh0dXJlIHJlZ3Mgd2VyZSBjaGFuZ2VkIC4uLiAqLwogCWlmIChzdGFydCA8PSBTQVZBR0VfVEVYQ1RSTF9TM0QgJiYKLQkgICAgc3RhcnQrY291bnQgPiBTQVZBR0VfVEVYUEFMQUREUl9TM0QpIHsKKwkgICAgc3RhcnQgKyBjb3VudCA+IFNBVkFHRV9URVhQQUxBRERSX1MzRCkgewogCQkvKiAuLi4gY2hlY2sgdGV4dHVyZSBzdGF0ZSAqLwogCQlTQVZFX1NUQVRFKFNBVkFHRV9URVhDVFJMX1MzRCwgczNkLnRleGN0cmwpOwogCQlTQVZFX1NUQVRFKFNBVkFHRV9URVhBRERSX1MzRCwgczNkLnRleGFkZHIpOwogCQlpZiAoZGV2X3ByaXYtPnN0YXRlLnMzZC50ZXhjdHJsICYgU0FWQUdFX1RFWENUUkxfVEVYRU5fTUFTSykKLQkJCXJldHVybiBzYXZhZ2VfdmVyaWZ5X3RleGFkZHIoCi0JCQkJZGV2X3ByaXYsIDAsIGRldl9wcml2LT5zdGF0ZS5zM2QudGV4YWRkcik7CisJCQlyZXR1cm4gc2F2YWdlX3ZlcmlmeV90ZXhhZGRyKGRldl9wcml2LCAwLAorCQkJCQkJICAgICBkZXZfcHJpdi0+c3RhdGUuczNkLgorCQkJCQkJICAgICB0ZXhhZGRyKTsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzYXZhZ2VfdmVyaWZ5X3N0YXRlX3M0KGRybV9zYXZhZ2VfcHJpdmF0ZV90ICpkZXZfcHJpdiwKK3N0YXRpYyBpbnQgc2F2YWdlX3ZlcmlmeV9zdGF0ZV9zNChkcm1fc2F2YWdlX3ByaXZhdGVfdCAqIGRldl9wcml2LAogCQkJCSAgdW5zaWduZWQgaW50IHN0YXJ0LCB1bnNpZ25lZCBpbnQgY291bnQsCi0JCQkJICBjb25zdCB1aW50MzJfdCBfX3VzZXIgKnJlZ3MpCisJCQkJICBjb25zdCB1aW50MzJfdCBfX3VzZXIgKiByZWdzKQogewogCWludCByZXQgPSAwOwogCiAJaWYgKHN0YXJ0IDwgU0FWQUdFX0RSQVdMT0NBTENUUkxfUzQgfHwKLQkgICAgc3RhcnQrY291bnQtMSA+IFNBVkFHRV9URVhCTEVORENPTE9SX1M0KSB7CisJICAgIHN0YXJ0ICsgY291bnQgLSAxID4gU0FWQUdFX1RFWEJMRU5EQ09MT1JfUzQpIHsKIAkJRFJNX0VSUk9SKCJpbnZhbGlkIHJlZ2lzdGVyIHJhbmdlICgweCUwNHgtMHglMDR4KVxuIiwKLQkJCSAgc3RhcnQsIHN0YXJ0K2NvdW50LTEpOworCQkJICBzdGFydCwgc3RhcnQgKyBjb3VudCAtIDEpOwogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCX0KIApAQCAtMTcxLDI4ICsxNzQsMzAgQEAKIAkJCX5TQVZBR0VfU0NJU1NPUl9NQVNLX1M0KTsKIAogCS8qIGlmIGFueSB0ZXh0dXJlIHJlZ3Mgd2VyZSBjaGFuZ2VkIC4uLiAqLwotCWlmIChzdGFydCA8PSBTQVZBR0VfVEVYREVTQ1JfUzQgJiYKLQkgICAgc3RhcnQrY291bnQgPiBTQVZBR0VfVEVYUEFMQUREUl9TNCkgeworCWlmIChzdGFydCA8PSBTQVZBR0VfVEVYREVTQ1JfUzQgJiYgc3RhcnQgKyBjb3VudCA+IFNBVkFHRV9URVhQQUxBRERSX1M0KSB7CiAJCS8qIC4uLiBjaGVjayB0ZXh0dXJlIHN0YXRlICovCiAJCVNBVkVfU1RBVEUoU0FWQUdFX1RFWERFU0NSX1M0LCBzNC50ZXhkZXNjcik7CiAJCVNBVkVfU1RBVEUoU0FWQUdFX1RFWEFERFIwX1M0LCBzNC50ZXhhZGRyMCk7CiAJCVNBVkVfU1RBVEUoU0FWQUdFX1RFWEFERFIxX1M0LCBzNC50ZXhhZGRyMSk7CiAJCWlmIChkZXZfcHJpdi0+c3RhdGUuczQudGV4ZGVzY3IgJiBTQVZBR0VfVEVYREVTQ1JfVEVYMEVOX01BU0spCi0JCQlyZXQgfD0gc2F2YWdlX3ZlcmlmeV90ZXhhZGRyKAotCQkJCWRldl9wcml2LCAwLCBkZXZfcHJpdi0+c3RhdGUuczQudGV4YWRkcjApOworCQkJcmV0IHw9CisJCQkgICAgc2F2YWdlX3ZlcmlmeV90ZXhhZGRyKGRldl9wcml2LCAwLAorCQkJCQkJICBkZXZfcHJpdi0+c3RhdGUuczQudGV4YWRkcjApOwogCQlpZiAoZGV2X3ByaXYtPnN0YXRlLnM0LnRleGRlc2NyICYgU0FWQUdFX1RFWERFU0NSX1RFWDFFTl9NQVNLKQotCQkJcmV0IHw9IHNhdmFnZV92ZXJpZnlfdGV4YWRkcigKLQkJCQlkZXZfcHJpdiwgMSwgZGV2X3ByaXYtPnN0YXRlLnM0LnRleGFkZHIxKTsKKwkJCXJldCB8PQorCQkJICAgIHNhdmFnZV92ZXJpZnlfdGV4YWRkcihkZXZfcHJpdiwgMSwKKwkJCQkJCSAgZGV2X3ByaXYtPnN0YXRlLnM0LnRleGFkZHIxKTsKIAl9CiAKIAlyZXR1cm4gcmV0OwogfQorCiAjdW5kZWYgU0FWRV9TVEFURQogI3VuZGVmIFNBVkVfU1RBVEVfTUFTSwogCi1zdGF0aWMgaW50IHNhdmFnZV9kaXNwYXRjaF9zdGF0ZShkcm1fc2F2YWdlX3ByaXZhdGVfdCAqZGV2X3ByaXYsCi0JCQkJIGNvbnN0IGRybV9zYXZhZ2VfY21kX2hlYWRlcl90ICpjbWRfaGVhZGVyLAotCQkJCSBjb25zdCB1aW50MzJfdCBfX3VzZXIgKnJlZ3MpCitzdGF0aWMgaW50IHNhdmFnZV9kaXNwYXRjaF9zdGF0ZShkcm1fc2F2YWdlX3ByaXZhdGVfdCAqIGRldl9wcml2LAorCQkJCSBjb25zdCBkcm1fc2F2YWdlX2NtZF9oZWFkZXJfdCAqIGNtZF9oZWFkZXIsCisJCQkJIGNvbnN0IHVpbnQzMl90IF9fdXNlciAqIHJlZ3MpCiB7CiAJdW5zaWduZWQgaW50IGNvdW50ID0gY21kX2hlYWRlci0+c3RhdGUuY291bnQ7CiAJdW5zaWduZWQgaW50IHN0YXJ0ID0gY21kX2hlYWRlci0+c3RhdGUuc3RhcnQ7CkBAIC0yMDQsNyArMjA5LDcgQEAKIAlpZiAoIWNvdW50KQogCQlyZXR1cm4gMDsKIAotCWlmIChEUk1fVkVSSUZZQVJFQV9SRUFEKHJlZ3MsIGNvdW50KjQpKQorCWlmIChEUk1fVkVSSUZZQVJFQV9SRUFEKHJlZ3MsIGNvdW50ICogNCkpCiAJCXJldHVybiBEUk1fRVJSKEVGQVVMVCk7CiAKIAlpZiAoUzNfU0FWQUdFM0RfU0VSSUVTKGRldl9wcml2LT5jaGlwc2V0KSkgewpAQCAtMjEzLDE0ICsyMTgsMTQgQEAKIAkJCXJldHVybiByZXQ7CiAJCS8qIHNjaXNzb3IgcmVncyBhcmUgZW1pdHRlZCBpbiBzYXZhZ2VfZGlzcGF0Y2hfZHJhdyAqLwogCQlpZiAoc3RhcnQgPCBTQVZBR0VfU0NTVEFSVF9TM0QpIHsKLQkJCWlmIChzdGFydCtjb3VudCA+IFNBVkFHRV9TQ0VORF9TM0QrMSkKLQkJCQljb3VudDIgPSBjb3VudCAtIChTQVZBR0VfU0NFTkRfUzNEKzEgLSBzdGFydCk7Ci0JCQlpZiAoc3RhcnQrY291bnQgPiBTQVZBR0VfU0NTVEFSVF9TM0QpCisJCQlpZiAoc3RhcnQgKyBjb3VudCA+IFNBVkFHRV9TQ0VORF9TM0QgKyAxKQorCQkJCWNvdW50MiA9IGNvdW50IC0gKFNBVkFHRV9TQ0VORF9TM0QgKyAxIC0gc3RhcnQpOworCQkJaWYgKHN0YXJ0ICsgY291bnQgPiBTQVZBR0VfU0NTVEFSVF9TM0QpCiAJCQkJY291bnQgPSBTQVZBR0VfU0NTVEFSVF9TM0QgLSBzdGFydDsKIAkJfSBlbHNlIGlmIChzdGFydCA8PSBTQVZBR0VfU0NFTkRfUzNEKSB7Ci0JCQlpZiAoc3RhcnQrY291bnQgPiBTQVZBR0VfU0NFTkRfUzNEKzEpIHsKLQkJCQljb3VudCAtPSBTQVZBR0VfU0NFTkRfUzNEKzEgLSBzdGFydDsKLQkJCQlzdGFydCA9IFNBVkFHRV9TQ0VORF9TM0QrMTsKKwkJCWlmIChzdGFydCArIGNvdW50ID4gU0FWQUdFX1NDRU5EX1MzRCArIDEpIHsKKwkJCQljb3VudCAtPSBTQVZBR0VfU0NFTkRfUzNEICsgMSAtIHN0YXJ0OworCQkJCXN0YXJ0ID0gU0FWQUdFX1NDRU5EX1MzRCArIDE7CiAJCQl9IGVsc2UKIAkJCQlyZXR1cm4gMDsKIAkJfQpAQCAtMjMwLDIzICsyMzUsMjQgQEAKIAkJCXJldHVybiByZXQ7CiAJCS8qIHNjaXNzb3IgcmVncyBhcmUgZW1pdHRlZCBpbiBzYXZhZ2VfZGlzcGF0Y2hfZHJhdyAqLwogCQlpZiAoc3RhcnQgPCBTQVZBR0VfRFJBV0NUUkwwX1M0KSB7Ci0JCQlpZiAoc3RhcnQrY291bnQgPiBTQVZBR0VfRFJBV0NUUkwxX1M0KzEpCi0JCQkJY291bnQyID0gY291bnQgLSAoU0FWQUdFX0RSQVdDVFJMMV9TNCsxIC0gc3RhcnQpOwotCQkJaWYgKHN0YXJ0K2NvdW50ID4gU0FWQUdFX0RSQVdDVFJMMF9TNCkKKwkJCWlmIChzdGFydCArIGNvdW50ID4gU0FWQUdFX0RSQVdDVFJMMV9TNCArIDEpCisJCQkJY291bnQyID0KKwkJCQkgICAgY291bnQgLSAoU0FWQUdFX0RSQVdDVFJMMV9TNCArIDEgLSBzdGFydCk7CisJCQlpZiAoc3RhcnQgKyBjb3VudCA+IFNBVkFHRV9EUkFXQ1RSTDBfUzQpCiAJCQkJY291bnQgPSBTQVZBR0VfRFJBV0NUUkwwX1M0IC0gc3RhcnQ7CiAJCX0gZWxzZSBpZiAoc3RhcnQgPD0gU0FWQUdFX0RSQVdDVFJMMV9TNCkgewotCQkJaWYgKHN0YXJ0K2NvdW50ID4gU0FWQUdFX0RSQVdDVFJMMV9TNCsxKSB7Ci0JCQkJY291bnQgLT0gU0FWQUdFX0RSQVdDVFJMMV9TNCsxIC0gc3RhcnQ7Ci0JCQkJc3RhcnQgPSBTQVZBR0VfRFJBV0NUUkwxX1M0KzE7CisJCQlpZiAoc3RhcnQgKyBjb3VudCA+IFNBVkFHRV9EUkFXQ1RSTDFfUzQgKyAxKSB7CisJCQkJY291bnQgLT0gU0FWQUdFX0RSQVdDVFJMMV9TNCArIDEgLSBzdGFydDsKKwkJCQlzdGFydCA9IFNBVkFHRV9EUkFXQ1RSTDFfUzQgKyAxOwogCQkJfSBlbHNlCiAJCQkJcmV0dXJuIDA7CiAJCX0KIAl9CiAKLQliY2lfc2l6ZSA9IGNvdW50ICsgKGNvdW50KzI1NCkvMjU1ICsgY291bnQyICsgKGNvdW50MisyNTQpLzI1NTsKKwliY2lfc2l6ZSA9IGNvdW50ICsgKGNvdW50ICsgMjU0KSAvIDI1NSArIGNvdW50MiArIChjb3VudDIgKyAyNTQpIC8gMjU1OwogCiAJaWYgKGNtZF9oZWFkZXItPnN0YXRlLmdsb2JhbCkgewotCQlCRUdJTl9ETUEoYmNpX3NpemUrMSk7CisJCUJFR0lOX0RNQShiY2lfc2l6ZSArIDEpOwogCQlETUFfV1JJVEUoQkNJX0NNRF9XQUlUIHwgQkNJX0NNRF9XQUlUXzNEKTsKIAkJZGV2X3ByaXYtPndhaXRpbmcgPSAxOwogCX0gZWxzZSB7CkBAIC0yNzMsOSArMjc5LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzYXZhZ2VfZGlzcGF0Y2hfZG1hX3ByaW0oZHJtX3NhdmFnZV9wcml2YXRlX3QgKmRldl9wcml2LAotCQkJCSAgICBjb25zdCBkcm1fc2F2YWdlX2NtZF9oZWFkZXJfdCAqY21kX2hlYWRlciwKLQkJCQkgICAgY29uc3QgZHJtX2J1Zl90ICpkbWFidWYpCitzdGF0aWMgaW50IHNhdmFnZV9kaXNwYXRjaF9kbWFfcHJpbShkcm1fc2F2YWdlX3ByaXZhdGVfdCAqIGRldl9wcml2LAorCQkJCSAgICBjb25zdCBkcm1fc2F2YWdlX2NtZF9oZWFkZXJfdCAqIGNtZF9oZWFkZXIsCisJCQkJICAgIGNvbnN0IGRybV9idWZfdCAqIGRtYWJ1ZikKIHsKIAl1bnNpZ25lZCBjaGFyIHJlb3JkZXIgPSAwOwogCXVuc2lnbmVkIGludCBwcmltID0gY21kX2hlYWRlci0+cHJpbS5wcmltOwpAQCAtMjg2LDggKzI5Miw4IEBACiAJQkNJX0xPQ0FMUzsKIAogCWlmICghZG1hYnVmKSB7Ci0JICAgIERSTV9FUlJPUigiY2FsbGVkIHdpdGhvdXQgZG1hIGJ1ZmZlcnMhXG4iKTsKLQkgICAgcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKKwkJRFJNX0VSUk9SKCJjYWxsZWQgd2l0aG91dCBkbWEgYnVmZmVycyFcbiIpOworCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCX0KIAogCWlmICghbikKQEAgLTMwNyw4ICszMTMsOSBAQAogCWNhc2UgU0FWQUdFX1BSSU1fVFJJU1RSSVA6CiAJY2FzZSBTQVZBR0VfUFJJTV9UUklGQU46CiAJCWlmIChuIDwgMykgewotCQkJRFJNX0VSUk9SKCJ3cm9uZyBudW1iZXIgb2YgdmVydGljZXMgJXUgaW4gVFJJRkFOL1NUUklQXG4iLAotCQkJCSAgbik7CisJCQlEUk1fRVJST1IKKwkJCSAgICAoIndyb25nIG51bWJlciBvZiB2ZXJ0aWNlcyAldSBpbiBUUklGQU4vU1RSSVBcbiIsCisJCQkgICAgIG4pOwogCQkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAkJfQogCQlicmVhazsKQEAgLTMxOSwxNyArMzI2LDE1IEBACiAKIAlpZiAoUzNfU0FWQUdFM0RfU0VSSUVTKGRldl9wcml2LT5jaGlwc2V0KSkgewogCQlpZiAoc2tpcCAhPSAwKSB7Ci0JCQlEUk1fRVJST1IoImludmFsaWQgc2tpcCBmbGFncyAweCUwNHggZm9yIERNQVxuIiwKLQkJCQkgIHNraXApOworCQkJRFJNX0VSUk9SKCJpbnZhbGlkIHNraXAgZmxhZ3MgMHglMDR4IGZvciBETUFcbiIsIHNraXApOwogCQkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAkJfQogCX0gZWxzZSB7CiAJCXVuc2lnbmVkIGludCBzaXplID0gMTAgLSAoc2tpcCAmIDEpIC0gKHNraXAgPj4gMSAmIDEpIC0KLQkJCShza2lwID4+IDIgJiAxKSAtIChza2lwID4+IDMgJiAxKSAtIChza2lwID4+IDQgJiAxKSAtCi0JCQkoc2tpcCA+PiA1ICYgMSkgLSAoc2tpcCA+PiA2ICYgMSkgLSAoc2tpcCA+PiA3ICYgMSk7CisJCSAgICAoc2tpcCA+PiAyICYgMSkgLSAoc2tpcCA+PiAzICYgMSkgLSAoc2tpcCA+PiA0ICYgMSkgLQorCQkgICAgKHNraXAgPj4gNSAmIDEpIC0gKHNraXAgPj4gNiAmIDEpIC0gKHNraXAgPj4gNyAmIDEpOwogCQlpZiAoc2tpcCA+IFNBVkFHRV9TS0lQX0FMTF9TNCB8fCBzaXplICE9IDgpIHsKLQkJCURSTV9FUlJPUigiaW52YWxpZCBza2lwIGZsYWdzIDB4JTA0eCBmb3IgRE1BXG4iLAotCQkJCSAgc2tpcCk7CisJCQlEUk1fRVJST1IoImludmFsaWQgc2tpcCBmbGFncyAweCUwNHggZm9yIERNQVxuIiwgc2tpcCk7CiAJCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCQl9CiAJCWlmIChyZW9yZGVyKSB7CkBAIC0zMzgsOSArMzQzLDkgQEAKIAkJfQogCX0KIAotCWlmIChzdGFydCArIG4gPiBkbWFidWYtPnRvdGFsLzMyKSB7CisJaWYgKHN0YXJ0ICsgbiA+IGRtYWJ1Zi0+dG90YWwgLyAzMikgewogCQlEUk1fRVJST1IoInZlcnRleCBpbmRpY2VzICgldS0ldSkgb3V0IG9mIHJhbmdlICgwLSV1KVxuIiwKLQkJCSAgc3RhcnQsIHN0YXJ0ICsgbiAtIDEsIGRtYWJ1Zi0+dG90YWwvMzIpOworCQkJICBzdGFydCwgc3RhcnQgKyBuIC0gMSwgZG1hYnVmLT50b3RhbCAvIDMyKTsKIAkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAl9CiAKQEAgLTM3NSwzMiArMzgwLDMzIEBACiAJCQkvKiBOZWVkIHRvIHJlb3JkZXIgaW5kaWNlcyBmb3IgY29ycmVjdCBmbGF0CiAJCQkgKiBzaGFkaW5nIHdoaWxlIHByZXNlcnZpbmcgdGhlIGNsb2NrIHNlbnNlCiAJCQkgKiBmb3IgY29ycmVjdCBjdWxsaW5nLiBPbmx5IG9uIFNhdmFnZTNELiAqLwotCQkJaW50IHJlb3JkZXJbM10gPSB7LTEsIC0xLCAtMX07Ci0JCQlyZW9yZGVyW3N0YXJ0JTNdID0gMjsKKwkJCWludCByZW9yZGVyWzNdID0geyAtMSwgLTEsIC0xIH07CisJCQlyZW9yZGVyW3N0YXJ0ICUgM10gPSAyOwogCi0JCQlCRUdJTl9CQ0koKGNvdW50KzErMSkvMik7Ci0JCQlCQ0lfRFJBV19JTkRJQ0VTX1MzRChjb3VudCwgcHJpbSwgc3RhcnQrMik7CisJCQlCRUdJTl9CQ0koKGNvdW50ICsgMSArIDEpIC8gMik7CisJCQlCQ0lfRFJBV19JTkRJQ0VTX1MzRChjb3VudCwgcHJpbSwgc3RhcnQgKyAyKTsKIAotCQkJZm9yIChpID0gc3RhcnQrMTsgaSsxIDwgc3RhcnQrY291bnQ7IGkgKz0gMikKKwkJCWZvciAoaSA9IHN0YXJ0ICsgMTsgaSArIDEgPCBzdGFydCArIGNvdW50OyBpICs9IDIpCiAJCQkJQkNJX1dSSVRFKChpICsgcmVvcmRlcltpICUgM10pIHwKLQkJCQkJICAoKGkrMSArIHJlb3JkZXJbKGkrMSkgJSAzXSkgPDwgMTYpKTsKLQkJCWlmIChpIDwgc3RhcnQrY291bnQpCi0JCQkJQkNJX1dSSVRFKGkgKyByZW9yZGVyW2klM10pOworCQkJCQkgICgoaSArIDEgKworCQkJCQkgICAgcmVvcmRlclsoaSArIDEpICUgM10pIDw8IDE2KSk7CisJCQlpZiAoaSA8IHN0YXJ0ICsgY291bnQpCisJCQkJQkNJX1dSSVRFKGkgKyByZW9yZGVyW2kgJSAzXSk7CiAJCX0gZWxzZSBpZiAoUzNfU0FWQUdFM0RfU0VSSUVTKGRldl9wcml2LT5jaGlwc2V0KSkgewotCQkJQkVHSU5fQkNJKChjb3VudCsxKzEpLzIpOworCQkJQkVHSU5fQkNJKChjb3VudCArIDEgKyAxKSAvIDIpOwogCQkJQkNJX0RSQVdfSU5ESUNFU19TM0QoY291bnQsIHByaW0sIHN0YXJ0KTsKIAotCQkJZm9yIChpID0gc3RhcnQrMTsgaSsxIDwgc3RhcnQrY291bnQ7IGkgKz0gMikKLQkJCQlCQ0lfV1JJVEUoaSB8ICgoaSsxKSA8PCAxNikpOwotCQkJaWYgKGkgPCBzdGFydCtjb3VudCkKKwkJCWZvciAoaSA9IHN0YXJ0ICsgMTsgaSArIDEgPCBzdGFydCArIGNvdW50OyBpICs9IDIpCisJCQkJQkNJX1dSSVRFKGkgfCAoKGkgKyAxKSA8PCAxNikpOworCQkJaWYgKGkgPCBzdGFydCArIGNvdW50KQogCQkJCUJDSV9XUklURShpKTsKIAkJfSBlbHNlIHsKLQkJCUJFR0lOX0JDSSgoY291bnQrMisxKS8yKTsKKwkJCUJFR0lOX0JDSSgoY291bnQgKyAyICsgMSkgLyAyKTsKIAkJCUJDSV9EUkFXX0lORElDRVNfUzQoY291bnQsIHByaW0sIHNraXApOwogCi0JCQlmb3IgKGkgPSBzdGFydDsgaSsxIDwgc3RhcnQrY291bnQ7IGkgKz0gMikKLQkJCQlCQ0lfV1JJVEUoaSB8ICgoaSsxKSA8PCAxNikpOwotCQkJaWYgKGkgPCBzdGFydCtjb3VudCkKKwkJCWZvciAoaSA9IHN0YXJ0OyBpICsgMSA8IHN0YXJ0ICsgY291bnQ7IGkgKz0gMikKKwkJCQlCQ0lfV1JJVEUoaSB8ICgoaSArIDEpIDw8IDE2KSk7CisJCQlpZiAoaSA8IHN0YXJ0ICsgY291bnQpCiAJCQkJQkNJX1dSSVRFKGkpOwogCQl9CiAKQEAgLTQxMywxMSArNDE5LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2F2YWdlX2Rpc3BhdGNoX3ZiX3ByaW0oZHJtX3NhdmFnZV9wcml2YXRlX3QgKmRldl9wcml2LAotCQkJCSAgIGNvbnN0IGRybV9zYXZhZ2VfY21kX2hlYWRlcl90ICpjbWRfaGVhZGVyLAotCQkJCSAgIGNvbnN0IHVpbnQzMl90IF9fdXNlciAqdnR4YnVmLAotCQkJCSAgIHVuc2lnbmVkIGludCB2Yl9zaXplLAotCQkJCSAgIHVuc2lnbmVkIGludCB2Yl9zdHJpZGUpCitzdGF0aWMgaW50IHNhdmFnZV9kaXNwYXRjaF92Yl9wcmltKGRybV9zYXZhZ2VfcHJpdmF0ZV90ICogZGV2X3ByaXYsCisJCQkJICAgY29uc3QgZHJtX3NhdmFnZV9jbWRfaGVhZGVyX3QgKiBjbWRfaGVhZGVyLAorCQkJCSAgIGNvbnN0IHVpbnQzMl90IF9fdXNlciAqIHZ0eGJ1ZiwKKwkJCQkgICB1bnNpZ25lZCBpbnQgdmJfc2l6ZSwgdW5zaWduZWQgaW50IHZiX3N0cmlkZSkKIHsKIAl1bnNpZ25lZCBjaGFyIHJlb3JkZXIgPSAwOwogCXVuc2lnbmVkIGludCBwcmltID0gY21kX2hlYWRlci0+cHJpbS5wcmltOwpAQCAtNDQ1LDggKzQ1MCw5IEBACiAJY2FzZSBTQVZBR0VfUFJJTV9UUklTVFJJUDoKIAljYXNlIFNBVkFHRV9QUklNX1RSSUZBTjoKIAkJaWYgKG4gPCAzKSB7Ci0JCQlEUk1fRVJST1IoIndyb25nIG51bWJlciBvZiB2ZXJ0aWNlcyAldSBpbiBUUklGQU4vU1RSSVBcbiIsCi0JCQkJICBuKTsKKwkJCURSTV9FUlJPUgorCQkJICAgICgid3JvbmcgbnVtYmVyIG9mIHZlcnRpY2VzICV1IGluIFRSSUZBTi9TVFJJUFxuIiwKKwkJCSAgICAgbik7CiAJCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCQl9CiAJCWJyZWFrOwpAQCAtNDYwLDE4ICs0NjYsMTggQEAKIAkJCURSTV9FUlJPUigiaW52YWxpZCBza2lwIGZsYWdzIDB4JTA0eFxuIiwgc2tpcCk7CiAJCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCQl9Ci0JCXZ0eF9zaXplID0gODsgLyogZnVsbCB2ZXJ0ZXggKi8KKwkJdnR4X3NpemUgPSA4OwkvKiBmdWxsIHZlcnRleCAqLwogCX0gZWxzZSB7CiAJCWlmIChza2lwID4gU0FWQUdFX1NLSVBfQUxMX1M0KSB7CiAJCQlEUk1fRVJST1IoImludmFsaWQgc2tpcCBmbGFncyAweCUwNHhcbiIsIHNraXApOwogCQkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAkJfQotCQl2dHhfc2l6ZSA9IDEwOyAvKiBmdWxsIHZlcnRleCAqLworCQl2dHhfc2l6ZSA9IDEwOwkvKiBmdWxsIHZlcnRleCAqLwogCX0KIAogCXZ0eF9zaXplIC09IChza2lwICYgMSkgKyAoc2tpcCA+PiAxICYgMSkgKwotCQkoc2tpcCA+PiAyICYgMSkgKyAoc2tpcCA+PiAzICYgMSkgKyAoc2tpcCA+PiA0ICYgMSkgKwotCQkoc2tpcCA+PiA1ICYgMSkgKyAoc2tpcCA+PiA2ICYgMSkgKyAoc2tpcCA+PiA3ICYgMSk7CisJICAgIChza2lwID4+IDIgJiAxKSArIChza2lwID4+IDMgJiAxKSArIChza2lwID4+IDQgJiAxKSArCisJICAgIChza2lwID4+IDUgJiAxKSArIChza2lwID4+IDYgJiAxKSArIChza2lwID4+IDcgJiAxKTsKIAogCWlmICh2dHhfc2l6ZSA+IHZiX3N0cmlkZSkgewogCQlEUk1fRVJST1IoInZlcnRleCBzaXplIGdyZWF0ZXIgdGhhbiB2YiBzdHJpZGUgKCV1ID4gJXUpXG4iLApAQCAtNDc5LDkgKzQ4NSw5IEBACiAJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiAJfQogCi0JaWYgKHN0YXJ0ICsgbiA+IHZiX3NpemUgLyAodmJfc3RyaWRlKjQpKSB7CisJaWYgKHN0YXJ0ICsgbiA+IHZiX3NpemUgLyAodmJfc3RyaWRlICogNCkpIHsKIAkJRFJNX0VSUk9SKCJ2ZXJ0ZXggaW5kaWNlcyAoJXUtJXUpIG91dCBvZiByYW5nZSAoMC0ldSlcbiIsCi0JCQkgIHN0YXJ0LCBzdGFydCArIG4gLSAxLCB2Yl9zaXplIC8gKHZiX3N0cmlkZSo0KSk7CisJCQkgIHN0YXJ0LCBzdGFydCArIG4gLSAxLCB2Yl9zaXplIC8gKHZiX3N0cmlkZSAqIDQpKTsKIAkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAl9CiAKQEAgLTQ5MywzMSArNDk5LDMxIEBACiAJCQkvKiBOZWVkIHRvIHJlb3JkZXIgdmVydGljZXMgZm9yIGNvcnJlY3QgZmxhdAogCQkJICogc2hhZGluZyB3aGlsZSBwcmVzZXJ2aW5nIHRoZSBjbG9jayBzZW5zZQogCQkJICogZm9yIGNvcnJlY3QgY3VsbGluZy4gT25seSBvbiBTYXZhZ2UzRC4gKi8KLQkJCWludCByZW9yZGVyWzNdID0gey0xLCAtMSwgLTF9OwotCQkJcmVvcmRlcltzdGFydCUzXSA9IDI7CisJCQlpbnQgcmVvcmRlclszXSA9IHsgLTEsIC0xLCAtMSB9OworCQkJcmVvcmRlcltzdGFydCAlIDNdID0gMjsKIAotCQkJQkVHSU5fRE1BKGNvdW50KnZ0eF9zaXplKzEpOworCQkJQkVHSU5fRE1BKGNvdW50ICogdnR4X3NpemUgKyAxKTsKIAkJCURNQV9EUkFXX1BSSU1JVElWRShjb3VudCwgcHJpbSwgc2tpcCk7CiAKLQkJCWZvciAoaSA9IHN0YXJ0OyBpIDwgc3RhcnQrY291bnQ7ICsraSkgeworCQkJZm9yIChpID0gc3RhcnQ7IGkgPCBzdGFydCArIGNvdW50OyArK2kpIHsKIAkJCQl1bnNpZ25lZCBpbnQgaiA9IGkgKyByZW9yZGVyW2kgJSAzXTsKLQkJCQlETUFfQ09QWV9GUk9NX1VTRVIoJnZ0eGJ1Zlt2Yl9zdHJpZGUqal0sCisJCQkJRE1BX0NPUFlfRlJPTV9VU0VSKCZ2dHhidWZbdmJfc3RyaWRlICogal0sCiAJCQkJCQkgICB2dHhfc2l6ZSk7CiAJCQl9CiAKIAkJCURNQV9DT01NSVQoKTsKIAkJfSBlbHNlIHsKLQkJCUJFR0lOX0RNQShjb3VudCp2dHhfc2l6ZSsxKTsKKwkJCUJFR0lOX0RNQShjb3VudCAqIHZ0eF9zaXplICsgMSk7CiAJCQlETUFfRFJBV19QUklNSVRJVkUoY291bnQsIHByaW0sIHNraXApOwogCiAJCQlpZiAodmJfc3RyaWRlID09IHZ0eF9zaXplKSB7Ci0JCQkJRE1BX0NPUFlfRlJPTV9VU0VSKCZ2dHhidWZbdmJfc3RyaWRlKnN0YXJ0XSwKLQkJCQkJCSAgIHZ0eF9zaXplKmNvdW50KTsKKwkJCQlETUFfQ09QWV9GUk9NX1VTRVIoJnZ0eGJ1Zlt2Yl9zdHJpZGUgKiBzdGFydF0sCisJCQkJCQkgICB2dHhfc2l6ZSAqIGNvdW50KTsKIAkJCX0gZWxzZSB7Ci0JCQkJZm9yIChpID0gc3RhcnQ7IGkgPCBzdGFydCtjb3VudDsgKytpKSB7Ci0JCQkJCURNQV9DT1BZX0ZST01fVVNFUigKLQkJCQkJCSZ2dHhidWZbdmJfc3RyaWRlKmldLAotCQkJCQkJdnR4X3NpemUpOworCQkJCWZvciAoaSA9IHN0YXJ0OyBpIDwgc3RhcnQgKyBjb3VudDsgKytpKSB7CisJCQkJCURNQV9DT1BZX0ZST01fVVNFUigmdnR4YnVmCisJCQkJCQkJICAgW3ZiX3N0cmlkZSAqIGldLAorCQkJCQkJCSAgIHZ0eF9zaXplKTsKIAkJCQl9CiAJCQl9CiAKQEAgLTUzMywxMCArNTM5LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2F2YWdlX2Rpc3BhdGNoX2RtYV9pZHgoZHJtX3NhdmFnZV9wcml2YXRlX3QgKmRldl9wcml2LAotCQkJCSAgIGNvbnN0IGRybV9zYXZhZ2VfY21kX2hlYWRlcl90ICpjbWRfaGVhZGVyLAotCQkJCSAgIGNvbnN0IHVpbnQxNl90IF9fdXNlciAqdXNyX2lkeCwKLQkJCQkgICBjb25zdCBkcm1fYnVmX3QgKmRtYWJ1ZikKK3N0YXRpYyBpbnQgc2F2YWdlX2Rpc3BhdGNoX2RtYV9pZHgoZHJtX3NhdmFnZV9wcml2YXRlX3QgKiBkZXZfcHJpdiwKKwkJCQkgICBjb25zdCBkcm1fc2F2YWdlX2NtZF9oZWFkZXJfdCAqIGNtZF9oZWFkZXIsCisJCQkJICAgY29uc3QgdWludDE2X3QgX191c2VyICogdXNyX2lkeCwKKwkJCQkgICBjb25zdCBkcm1fYnVmX3QgKiBkbWFidWYpCiB7CiAJdW5zaWduZWQgY2hhciByZW9yZGVyID0gMDsKIAl1bnNpZ25lZCBpbnQgcHJpbSA9IGNtZF9oZWFkZXItPmlkeC5wcmltOwpAQCAtNTQ2LDggKzU1Miw4IEBACiAJQkNJX0xPQ0FMUzsKIAogCWlmICghZG1hYnVmKSB7Ci0JICAgIERSTV9FUlJPUigiY2FsbGVkIHdpdGhvdXQgZG1hIGJ1ZmZlcnMhXG4iKTsKLQkgICAgcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKKwkJRFJNX0VSUk9SKCJjYWxsZWQgd2l0aG91dCBkbWEgYnVmZmVycyFcbiIpOworCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCX0KIAogCWlmICghbikKQEAgLTU1OSwxNiArNTY1LDE1IEBACiAJCXByaW0gPSBTQVZBR0VfUFJJTV9UUklMSVNUOwogCWNhc2UgU0FWQUdFX1BSSU1fVFJJTElTVDoKIAkJaWYgKG4gJSAzICE9IDApIHsKLQkJCURSTV9FUlJPUigid3JvbmcgbnVtYmVyIG9mIGluZGljZXMgJXUgaW4gVFJJTElTVFxuIiwKLQkJCQkgIG4pOworCQkJRFJNX0VSUk9SKCJ3cm9uZyBudW1iZXIgb2YgaW5kaWNlcyAldSBpbiBUUklMSVNUXG4iLCBuKTsKIAkJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBTQVZBR0VfUFJJTV9UUklTVFJJUDoKIAljYXNlIFNBVkFHRV9QUklNX1RSSUZBTjoKIAkJaWYgKG4gPCAzKSB7Ci0JCQlEUk1fRVJST1IoIndyb25nIG51bWJlciBvZiBpbmRpY2VzICV1IGluIFRSSUZBTi9TVFJJUFxuIiwKLQkJCQkgIG4pOworCQkJRFJNX0VSUk9SCisJCQkgICAgKCJ3cm9uZyBudW1iZXIgb2YgaW5kaWNlcyAldSBpbiBUUklGQU4vU1RSSVBcbiIsIG4pOwogCQkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAkJfQogCQlicmVhazsKQEAgLTU3OSwxNyArNTg0LDE1IEBACiAKIAlpZiAoUzNfU0FWQUdFM0RfU0VSSUVTKGRldl9wcml2LT5jaGlwc2V0KSkgewogCQlpZiAoc2tpcCAhPSAwKSB7Ci0JCQlEUk1fRVJST1IoImludmFsaWQgc2tpcCBmbGFncyAweCUwNHggZm9yIERNQVxuIiwKLQkJCQkgIHNraXApOworCQkJRFJNX0VSUk9SKCJpbnZhbGlkIHNraXAgZmxhZ3MgMHglMDR4IGZvciBETUFcbiIsIHNraXApOwogCQkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAkJfQogCX0gZWxzZSB7CiAJCXVuc2lnbmVkIGludCBzaXplID0gMTAgLSAoc2tpcCAmIDEpIC0gKHNraXAgPj4gMSAmIDEpIC0KLQkJCShza2lwID4+IDIgJiAxKSAtIChza2lwID4+IDMgJiAxKSAtIChza2lwID4+IDQgJiAxKSAtCi0JCQkoc2tpcCA+PiA1ICYgMSkgLSAoc2tpcCA+PiA2ICYgMSkgLSAoc2tpcCA+PiA3ICYgMSk7CisJCSAgICAoc2tpcCA+PiAyICYgMSkgLSAoc2tpcCA+PiAzICYgMSkgLSAoc2tpcCA+PiA0ICYgMSkgLQorCQkgICAgKHNraXAgPj4gNSAmIDEpIC0gKHNraXAgPj4gNiAmIDEpIC0gKHNraXAgPj4gNyAmIDEpOwogCQlpZiAoc2tpcCA+IFNBVkFHRV9TS0lQX0FMTF9TNCB8fCBzaXplICE9IDgpIHsKLQkJCURSTV9FUlJPUigiaW52YWxpZCBza2lwIGZsYWdzIDB4JTA0eCBmb3IgRE1BXG4iLAotCQkJCSAgc2tpcCk7CisJCQlEUk1fRVJST1IoImludmFsaWQgc2tpcCBmbGFncyAweCUwNHggZm9yIERNQVxuIiwgc2tpcCk7CiAJCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCQl9CiAJCWlmIChyZW9yZGVyKSB7CkBAIC02MjksMTEgKzYzMiwxMSBAQAogCQl1aW50MTZfdCBpZHhbMjU1XTsKIAogCQkvKiBDb3B5IGFuZCBjaGVjayBpbmRpY2VzICovCi0JCURSTV9DT1BZX0ZST01fVVNFUl9VTkNIRUNLRUQoaWR4LCB1c3JfaWR4LCBjb3VudCoyKTsKKwkJRFJNX0NPUFlfRlJPTV9VU0VSX1VOQ0hFQ0tFRChpZHgsIHVzcl9pZHgsIGNvdW50ICogMik7CiAJCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0JCQlpZiAoaWR4W2ldID4gZG1hYnVmLT50b3RhbC8zMikgeworCQkJaWYgKGlkeFtpXSA+IGRtYWJ1Zi0+dG90YWwgLyAzMikgewogCQkJCURSTV9FUlJPUigiaWR4WyV1XT0ldSBvdXQgb2YgcmFuZ2UgKDAtJXUpXG4iLAotCQkJCQkgIGksIGlkeFtpXSwgZG1hYnVmLT50b3RhbC8zMik7CisJCQkJCSAgaSwgaWR4W2ldLCBkbWFidWYtPnRvdGFsIC8gMzIpOwogCQkJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiAJCQl9CiAJCX0KQEAgLTY0MiwzMCArNjQ1LDMxIEBACiAJCQkvKiBOZWVkIHRvIHJlb3JkZXIgaW5kaWNlcyBmb3IgY29ycmVjdCBmbGF0CiAJCQkgKiBzaGFkaW5nIHdoaWxlIHByZXNlcnZpbmcgdGhlIGNsb2NrIHNlbnNlCiAJCQkgKiBmb3IgY29ycmVjdCBjdWxsaW5nLiBPbmx5IG9uIFNhdmFnZTNELiAqLwotCQkJaW50IHJlb3JkZXJbM10gPSB7MiwgLTEsIC0xfTsKKwkJCWludCByZW9yZGVyWzNdID0geyAyLCAtMSwgLTEgfTsKIAotCQkJQkVHSU5fQkNJKChjb3VudCsxKzEpLzIpOworCQkJQkVHSU5fQkNJKChjb3VudCArIDEgKyAxKSAvIDIpOwogCQkJQkNJX0RSQVdfSU5ESUNFU19TM0QoY291bnQsIHByaW0sIGlkeFsyXSk7CiAKLQkJCWZvciAoaSA9IDE7IGkrMSA8IGNvdW50OyBpICs9IDIpCisJCQlmb3IgKGkgPSAxOyBpICsgMSA8IGNvdW50OyBpICs9IDIpCiAJCQkJQkNJX1dSSVRFKGlkeFtpICsgcmVvcmRlcltpICUgM11dIHwKLQkJCQkJICAoaWR4W2krMSArIHJlb3JkZXJbKGkrMSkgJSAzXV0gPDwgMTYpKTsKKwkJCQkJICAoaWR4W2kgKyAxICsgcmVvcmRlclsoaSArIDEpICUgM11dIDw8CisJCQkJCSAgIDE2KSk7CiAJCQlpZiAoaSA8IGNvdW50KQotCQkJCUJDSV9XUklURShpZHhbaSArIHJlb3JkZXJbaSUzXV0pOworCQkJCUJDSV9XUklURShpZHhbaSArIHJlb3JkZXJbaSAlIDNdXSk7CiAJCX0gZWxzZSBpZiAoUzNfU0FWQUdFM0RfU0VSSUVTKGRldl9wcml2LT5jaGlwc2V0KSkgewotCQkJQkVHSU5fQkNJKChjb3VudCsxKzEpLzIpOworCQkJQkVHSU5fQkNJKChjb3VudCArIDEgKyAxKSAvIDIpOwogCQkJQkNJX0RSQVdfSU5ESUNFU19TM0QoY291bnQsIHByaW0sIGlkeFswXSk7CiAKLQkJCWZvciAoaSA9IDE7IGkrMSA8IGNvdW50OyBpICs9IDIpCi0JCQkJQkNJX1dSSVRFKGlkeFtpXSB8IChpZHhbaSsxXSA8PCAxNikpOworCQkJZm9yIChpID0gMTsgaSArIDEgPCBjb3VudDsgaSArPSAyKQorCQkJCUJDSV9XUklURShpZHhbaV0gfCAoaWR4W2kgKyAxXSA8PCAxNikpOwogCQkJaWYgKGkgPCBjb3VudCkKIAkJCQlCQ0lfV1JJVEUoaWR4W2ldKTsKIAkJfSBlbHNlIHsKLQkJCUJFR0lOX0JDSSgoY291bnQrMisxKS8yKTsKKwkJCUJFR0lOX0JDSSgoY291bnQgKyAyICsgMSkgLyAyKTsKIAkJCUJDSV9EUkFXX0lORElDRVNfUzQoY291bnQsIHByaW0sIHNraXApOwogCi0JCQlmb3IgKGkgPSAwOyBpKzEgPCBjb3VudDsgaSArPSAyKQotCQkJCUJDSV9XUklURShpZHhbaV0gfCAoaWR4W2krMV0gPDwgMTYpKTsKKwkJCWZvciAoaSA9IDA7IGkgKyAxIDwgY291bnQ7IGkgKz0gMikKKwkJCQlCQ0lfV1JJVEUoaWR4W2ldIHwgKGlkeFtpICsgMV0gPDwgMTYpKTsKIAkJCWlmIChpIDwgY291bnQpCiAJCQkJQkNJX1dSSVRFKGlkeFtpXSk7CiAJCX0KQEAgLTY3OSwxMiArNjgzLDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2F2YWdlX2Rpc3BhdGNoX3ZiX2lkeChkcm1fc2F2YWdlX3ByaXZhdGVfdCAqZGV2X3ByaXYsCi0JCQkJICBjb25zdCBkcm1fc2F2YWdlX2NtZF9oZWFkZXJfdCAqY21kX2hlYWRlciwKLQkJCQkgIGNvbnN0IHVpbnQxNl90IF9fdXNlciAqdXNyX2lkeCwKLQkJCQkgIGNvbnN0IHVpbnQzMl90IF9fdXNlciAqdnR4YnVmLAotCQkJCSAgdW5zaWduZWQgaW50IHZiX3NpemUsCi0JCQkJICB1bnNpZ25lZCBpbnQgdmJfc3RyaWRlKQorc3RhdGljIGludCBzYXZhZ2VfZGlzcGF0Y2hfdmJfaWR4KGRybV9zYXZhZ2VfcHJpdmF0ZV90ICogZGV2X3ByaXYsCisJCQkJICBjb25zdCBkcm1fc2F2YWdlX2NtZF9oZWFkZXJfdCAqIGNtZF9oZWFkZXIsCisJCQkJICBjb25zdCB1aW50MTZfdCBfX3VzZXIgKiB1c3JfaWR4LAorCQkJCSAgY29uc3QgdWludDMyX3QgX191c2VyICogdnR4YnVmLAorCQkJCSAgdW5zaWduZWQgaW50IHZiX3NpemUsIHVuc2lnbmVkIGludCB2Yl9zdHJpZGUpCiB7CiAJdW5zaWduZWQgY2hhciByZW9yZGVyID0gMDsKIAl1bnNpZ25lZCBpbnQgcHJpbSA9IGNtZF9oZWFkZXItPmlkeC5wcmltOwpAQCAtNzAzLDE2ICs3MDYsMTUgQEAKIAkJcHJpbSA9IFNBVkFHRV9QUklNX1RSSUxJU1Q7CiAJY2FzZSBTQVZBR0VfUFJJTV9UUklMSVNUOgogCQlpZiAobiAlIDMgIT0gMCkgewotCQkJRFJNX0VSUk9SKCJ3cm9uZyBudW1iZXIgb2YgaW5kaWNlcyAldSBpbiBUUklMSVNUXG4iLAotCQkJCSAgbik7CisJCQlEUk1fRVJST1IoIndyb25nIG51bWJlciBvZiBpbmRpY2VzICV1IGluIFRSSUxJU1RcbiIsIG4pOwogCQkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAkJfQogCQlicmVhazsKIAljYXNlIFNBVkFHRV9QUklNX1RSSVNUUklQOgogCWNhc2UgU0FWQUdFX1BSSU1fVFJJRkFOOgogCQlpZiAobiA8IDMpIHsKLQkJCURSTV9FUlJPUigid3JvbmcgbnVtYmVyIG9mIGluZGljZXMgJXUgaW4gVFJJRkFOL1NUUklQXG4iLAotCQkJCSAgbik7CisJCQlEUk1fRVJST1IKKwkJCSAgICAoIndyb25nIG51bWJlciBvZiBpbmRpY2VzICV1IGluIFRSSUZBTi9TVFJJUFxuIiwgbik7CiAJCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCQl9CiAJCWJyZWFrOwpAQCAtNzI2LDE4ICs3MjgsMTggQEAKIAkJCURSTV9FUlJPUigiaW52YWxpZCBza2lwIGZsYWdzIDB4JTA0eFxuIiwgc2tpcCk7CiAJCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCQl9Ci0JCXZ0eF9zaXplID0gODsgLyogZnVsbCB2ZXJ0ZXggKi8KKwkJdnR4X3NpemUgPSA4OwkvKiBmdWxsIHZlcnRleCAqLwogCX0gZWxzZSB7CiAJCWlmIChza2lwID4gU0FWQUdFX1NLSVBfQUxMX1M0KSB7CiAJCQlEUk1fRVJST1IoImludmFsaWQgc2tpcCBmbGFncyAweCUwNHhcbiIsIHNraXApOwogCQkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAkJfQotCQl2dHhfc2l6ZSA9IDEwOyAvKiBmdWxsIHZlcnRleCAqLworCQl2dHhfc2l6ZSA9IDEwOwkvKiBmdWxsIHZlcnRleCAqLwogCX0KIAogCXZ0eF9zaXplIC09IChza2lwICYgMSkgKyAoc2tpcCA+PiAxICYgMSkgKwotCQkoc2tpcCA+PiAyICYgMSkgKyAoc2tpcCA+PiAzICYgMSkgKyAoc2tpcCA+PiA0ICYgMSkgKwotCQkoc2tpcCA+PiA1ICYgMSkgKyAoc2tpcCA+PiA2ICYgMSkgKyAoc2tpcCA+PiA3ICYgMSk7CisJICAgIChza2lwID4+IDIgJiAxKSArIChza2lwID4+IDMgJiAxKSArIChza2lwID4+IDQgJiAxKSArCisJICAgIChza2lwID4+IDUgJiAxKSArIChza2lwID4+IDYgJiAxKSArIChza2lwID4+IDcgJiAxKTsKIAogCWlmICh2dHhfc2l6ZSA+IHZiX3N0cmlkZSkgewogCQlEUk1fRVJST1IoInZlcnRleCBzaXplIGdyZWF0ZXIgdGhhbiB2YiBzdHJpZGUgKCV1ID4gJXUpXG4iLApAQCAtNzUzLDExICs3NTUsMTEgQEAKIAkJdWludDE2X3QgaWR4WzI1NV07CiAKIAkJLyogQ29weSBhbmQgY2hlY2sgaW5kaWNlcyAqLwotCQlEUk1fQ09QWV9GUk9NX1VTRVJfVU5DSEVDS0VEKGlkeCwgdXNyX2lkeCwgY291bnQqMik7CisJCURSTV9DT1BZX0ZST01fVVNFUl9VTkNIRUNLRUQoaWR4LCB1c3JfaWR4LCBjb3VudCAqIDIpOwogCQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotCQkJaWYgKGlkeFtpXSA+IHZiX3NpemUgLyAodmJfc3RyaWRlKjQpKSB7CisJCQlpZiAoaWR4W2ldID4gdmJfc2l6ZSAvICh2Yl9zdHJpZGUgKiA0KSkgewogCQkJCURSTV9FUlJPUigiaWR4WyV1XT0ldSBvdXQgb2YgcmFuZ2UgKDAtJXUpXG4iLAotCQkJCQkgIGksIGlkeFtpXSwgIHZiX3NpemUgLyAodmJfc3RyaWRlKjQpKTsKKwkJCQkJICBpLCBpZHhbaV0sIHZiX3NpemUgLyAodmJfc3RyaWRlICogNCkpOwogCQkJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiAJCQl9CiAJCX0KQEAgLTc2NiwyNSArNzY4LDI1IEBACiAJCQkvKiBOZWVkIHRvIHJlb3JkZXIgdmVydGljZXMgZm9yIGNvcnJlY3QgZmxhdAogCQkJICogc2hhZGluZyB3aGlsZSBwcmVzZXJ2aW5nIHRoZSBjbG9jayBzZW5zZQogCQkJICogZm9yIGNvcnJlY3QgY3VsbGluZy4gT25seSBvbiBTYXZhZ2UzRC4gKi8KLQkJCWludCByZW9yZGVyWzNdID0gezIsIC0xLCAtMX07CisJCQlpbnQgcmVvcmRlclszXSA9IHsgMiwgLTEsIC0xIH07CiAKLQkJCUJFR0lOX0RNQShjb3VudCp2dHhfc2l6ZSsxKTsKKwkJCUJFR0lOX0RNQShjb3VudCAqIHZ0eF9zaXplICsgMSk7CiAJCQlETUFfRFJBV19QUklNSVRJVkUoY291bnQsIHByaW0sIHNraXApOwogCiAJCQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewogCQkJCXVuc2lnbmVkIGludCBqID0gaWR4W2kgKyByZW9yZGVyW2kgJSAzXV07Ci0JCQkJRE1BX0NPUFlfRlJPTV9VU0VSKCZ2dHhidWZbdmJfc3RyaWRlKmpdLAorCQkJCURNQV9DT1BZX0ZST01fVVNFUigmdnR4YnVmW3ZiX3N0cmlkZSAqIGpdLAogCQkJCQkJICAgdnR4X3NpemUpOwogCQkJfQogCiAJCQlETUFfQ09NTUlUKCk7CiAJCX0gZWxzZSB7Ci0JCQlCRUdJTl9ETUEoY291bnQqdnR4X3NpemUrMSk7CisJCQlCRUdJTl9ETUEoY291bnQgKiB2dHhfc2l6ZSArIDEpOwogCQkJRE1BX0RSQVdfUFJJTUlUSVZFKGNvdW50LCBwcmltLCBza2lwKTsKIAogCQkJZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKIAkJCQl1bnNpZ25lZCBpbnQgaiA9IGlkeFtpXTsKLQkJCQlETUFfQ09QWV9GUk9NX1VTRVIoJnZ0eGJ1Zlt2Yl9zdHJpZGUqal0sCisJCQkJRE1BX0NPUFlfRlJPTV9VU0VSKCZ2dHhidWZbdmJfc3RyaWRlICogal0sCiAJCQkJCQkgICB2dHhfc2l6ZSk7CiAJCQl9CiAKQEAgLTgwMCwxMSArODAyLDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2F2YWdlX2Rpc3BhdGNoX2NsZWFyKGRybV9zYXZhZ2VfcHJpdmF0ZV90ICpkZXZfcHJpdiwKLQkJCQkgY29uc3QgZHJtX3NhdmFnZV9jbWRfaGVhZGVyX3QgKmNtZF9oZWFkZXIsCi0JCQkJIGNvbnN0IGRybV9zYXZhZ2VfY21kX2hlYWRlcl90IF9fdXNlciAqZGF0YSwKK3N0YXRpYyBpbnQgc2F2YWdlX2Rpc3BhdGNoX2NsZWFyKGRybV9zYXZhZ2VfcHJpdmF0ZV90ICogZGV2X3ByaXYsCisJCQkJIGNvbnN0IGRybV9zYXZhZ2VfY21kX2hlYWRlcl90ICogY21kX2hlYWRlciwKKwkJCQkgY29uc3QgZHJtX3NhdmFnZV9jbWRfaGVhZGVyX3QgX191c2VyICogZGF0YSwKIAkJCQkgdW5zaWduZWQgaW50IG5ib3gsCi0JCQkJIGNvbnN0IGRybV9jbGlwX3JlY3RfdCBfX3VzZXIgKnVzcl9ib3hlcykKKwkJCQkgY29uc3QgZHJtX2NsaXBfcmVjdF90IF9fdXNlciAqIHVzcl9ib3hlcykKIHsKIAl1bnNpZ25lZCBpbnQgZmxhZ3MgPSBjbWRfaGVhZGVyLT5jbGVhcjAuZmxhZ3MsIG1hc2ssIHZhbHVlOwogCXVuc2lnbmVkIGludCBjbGVhcl9jbWQ7CkBAIC04MTQsMTggKzgxNiwxNyBAQAogCWlmIChuYm94ID09IDApCiAJCXJldHVybiAwOwogCi0JRFJNX0dFVF9VU0VSX1VOQ0hFQ0tFRChtYXNrLCAmKChjb25zdCBkcm1fc2F2YWdlX2NtZF9oZWFkZXJfdCopZGF0YSkKKwlEUk1fR0VUX1VTRVJfVU5DSEVDS0VEKG1hc2ssICYoKGNvbnN0IGRybV9zYXZhZ2VfY21kX2hlYWRlcl90ICopZGF0YSkKIAkJCSAgICAgICAtPmNsZWFyMS5tYXNrKTsKLQlEUk1fR0VUX1VTRVJfVU5DSEVDS0VEKHZhbHVlLCAmKChjb25zdCBkcm1fc2F2YWdlX2NtZF9oZWFkZXJfdCopZGF0YSkKKwlEUk1fR0VUX1VTRVJfVU5DSEVDS0VEKHZhbHVlLCAmKChjb25zdCBkcm1fc2F2YWdlX2NtZF9oZWFkZXJfdCAqKWRhdGEpCiAJCQkgICAgICAgLT5jbGVhcjEudmFsdWUpOwogCiAJY2xlYXJfY21kID0gQkNJX0NNRF9SRUNUIHwgQkNJX0NNRF9SRUNUX1hQIHwgQkNJX0NNRF9SRUNUX1lQIHwKLQkJQkNJX0NNRF9TRU5EX0NPTE9SIHwgQkNJX0NNRF9ERVNUX1BCRF9ORVc7Ci0JQkNJX0NNRF9TRVRfUk9QKGNsZWFyX2NtZCwweENDKTsKKwkgICAgQkNJX0NNRF9TRU5EX0NPTE9SIHwgQkNJX0NNRF9ERVNUX1BCRF9ORVc7CisJQkNJX0NNRF9TRVRfUk9QKGNsZWFyX2NtZCwgMHhDQyk7CiAKIAluYnVmcyA9ICgoZmxhZ3MgJiBTQVZBR0VfRlJPTlQpID8gMSA6IDApICsKLQkJKChmbGFncyAmIFNBVkFHRV9CQUNLKSA/IDEgOiAwKSArCi0JCSgoZmxhZ3MgJiBTQVZBR0VfREVQVEgpID8gMSA6IDApOworCSAgICAoKGZsYWdzICYgU0FWQUdFX0JBQ0spID8gMSA6IDApICsgKChmbGFncyAmIFNBVkFHRV9ERVBUSCkgPyAxIDogMCk7CiAJaWYgKG5idWZzID09IDApCiAJCXJldHVybiAwOwogCkBAIC04NDQsMTIgKzg0NSwxMiBAQAogCQl4ID0gYm94LngxLCB5ID0gYm94LnkxOwogCQl3ID0gYm94LngyIC0gYm94LngxOwogCQloID0gYm94LnkyIC0gYm94LnkxOwotCQlCRUdJTl9ETUEobmJ1ZnMqNik7CisJCUJFR0lOX0RNQShuYnVmcyAqIDYpOwogCQlmb3IgKGJ1ZiA9IFNBVkFHRV9GUk9OVDsgYnVmIDw9IFNBVkFHRV9ERVBUSDsgYnVmIDw8PSAxKSB7CiAJCQlpZiAoIShmbGFncyAmIGJ1ZikpCiAJCQkJY29udGludWU7CiAJCQlETUFfV1JJVEUoY2xlYXJfY21kKTsKLQkJCXN3aXRjaChidWYpIHsKKwkJCXN3aXRjaCAoYnVmKSB7CiAJCQljYXNlIFNBVkFHRV9GUk9OVDoKIAkJCQlETUFfV1JJVEUoZGV2X3ByaXYtPmZyb250X29mZnNldCk7CiAJCQkJRE1BX1dSSVRFKGRldl9wcml2LT5mcm9udF9iZCk7CkBAIC04ODAsOSArODgxLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzYXZhZ2VfZGlzcGF0Y2hfc3dhcChkcm1fc2F2YWdlX3ByaXZhdGVfdCAqZGV2X3ByaXYsCitzdGF0aWMgaW50IHNhdmFnZV9kaXNwYXRjaF9zd2FwKGRybV9zYXZhZ2VfcHJpdmF0ZV90ICogZGV2X3ByaXYsCiAJCQkJdW5zaWduZWQgaW50IG5ib3gsCi0JCQkJY29uc3QgZHJtX2NsaXBfcmVjdF90IF9fdXNlciAqdXNyX2JveGVzKQorCQkJCWNvbnN0IGRybV9jbGlwX3JlY3RfdCBfX3VzZXIgKiB1c3JfYm94ZXMpCiB7CiAJdW5zaWduZWQgaW50IHN3YXBfY21kOwogCXVuc2lnbmVkIGludCBpOwpAQCAtODkyLDggKzg5Myw4IEBACiAJCXJldHVybiAwOwogCiAJc3dhcF9jbWQgPSBCQ0lfQ01EX1JFQ1QgfCBCQ0lfQ01EX1JFQ1RfWFAgfCBCQ0lfQ01EX1JFQ1RfWVAgfAotCQlCQ0lfQ01EX1NSQ19QQkRfQ09MT1JfTkVXIHwgQkNJX0NNRF9ERVNUX0dCRDsKLQlCQ0lfQ01EX1NFVF9ST1Aoc3dhcF9jbWQsMHhDQyk7CisJICAgIEJDSV9DTURfU1JDX1BCRF9DT0xPUl9ORVcgfCBCQ0lfQ01EX0RFU1RfR0JEOworCUJDSV9DTURfU0VUX1JPUChzd2FwX2NtZCwgMHhDQyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbmJveDsgKytpKSB7CiAJCWRybV9jbGlwX3JlY3RfdCBib3g7CkBAIC05MDUsMjEgKzkwNiwyMSBAQAogCQlETUFfV1JJVEUoZGV2X3ByaXYtPmJhY2tfYmQpOwogCQlETUFfV1JJVEUoQkNJX1hfWShib3gueDEsIGJveC55MSkpOwogCQlETUFfV1JJVEUoQkNJX1hfWShib3gueDEsIGJveC55MSkpOwotCQlETUFfV1JJVEUoQkNJX1dfSChib3gueDItYm94LngxLCBib3gueTItYm94LnkxKSk7CisJCURNQV9XUklURShCQ0lfV19IKGJveC54MiAtIGJveC54MSwgYm94LnkyIC0gYm94LnkxKSk7CiAJCURNQV9DT01NSVQoKTsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzYXZhZ2VfZGlzcGF0Y2hfZHJhdyhkcm1fc2F2YWdlX3ByaXZhdGVfdCAqZGV2X3ByaXYsCi0JCQkJY29uc3QgZHJtX3NhdmFnZV9jbWRfaGVhZGVyX3QgX191c2VyICpzdGFydCwKLQkJCQljb25zdCBkcm1fc2F2YWdlX2NtZF9oZWFkZXJfdCBfX3VzZXIgKmVuZCwKLQkJCQljb25zdCBkcm1fYnVmX3QgKmRtYWJ1ZiwKLQkJCQljb25zdCB1bnNpZ25lZCBpbnQgX191c2VyICp1c3JfdnR4YnVmLAorc3RhdGljIGludCBzYXZhZ2VfZGlzcGF0Y2hfZHJhdyhkcm1fc2F2YWdlX3ByaXZhdGVfdCAqIGRldl9wcml2LAorCQkJCWNvbnN0IGRybV9zYXZhZ2VfY21kX2hlYWRlcl90IF9fdXNlciAqIHN0YXJ0LAorCQkJCWNvbnN0IGRybV9zYXZhZ2VfY21kX2hlYWRlcl90IF9fdXNlciAqIGVuZCwKKwkJCQljb25zdCBkcm1fYnVmX3QgKiBkbWFidWYsCisJCQkJY29uc3QgdW5zaWduZWQgaW50IF9fdXNlciAqIHVzcl92dHhidWYsCiAJCQkJdW5zaWduZWQgaW50IHZiX3NpemUsIHVuc2lnbmVkIGludCB2Yl9zdHJpZGUsCiAJCQkJdW5zaWduZWQgaW50IG5ib3gsCi0JCQkJY29uc3QgZHJtX2NsaXBfcmVjdF90IF9fdXNlciAqdXNyX2JveGVzKQorCQkJCWNvbnN0IGRybV9jbGlwX3JlY3RfdCBfX3VzZXIgKiB1c3JfYm94ZXMpCiB7CiAJdW5zaWduZWQgaW50IGksIGo7CiAJaW50IHJldDsKQEAgLTkzOCwzMiArOTM5LDQyIEBACiAJCQl1c3JfY21kYnVmKys7CiAJCQlzd2l0Y2ggKGNtZF9oZWFkZXIuY21kLmNtZCkgewogCQkJY2FzZSBTQVZBR0VfQ01EX0RNQV9QUklNOgotCQkJCXJldCA9IHNhdmFnZV9kaXNwYXRjaF9kbWFfcHJpbSgKLQkJCQkJZGV2X3ByaXYsICZjbWRfaGVhZGVyLCBkbWFidWYpOworCQkJCXJldCA9CisJCQkJICAgIHNhdmFnZV9kaXNwYXRjaF9kbWFfcHJpbShkZXZfcHJpdiwKKwkJCQkJCQkgICAgICZjbWRfaGVhZGVyLAorCQkJCQkJCSAgICAgZG1hYnVmKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgU0FWQUdFX0NNRF9WQl9QUklNOgotCQkJCXJldCA9IHNhdmFnZV9kaXNwYXRjaF92Yl9wcmltKAotCQkJCQlkZXZfcHJpdiwgJmNtZF9oZWFkZXIsCi0JCQkJCShjb25zdCB1aW50MzJfdCBfX3VzZXIgKil1c3JfdnR4YnVmLAotCQkJCQl2Yl9zaXplLCB2Yl9zdHJpZGUpOworCQkJCXJldCA9CisJCQkJICAgIHNhdmFnZV9kaXNwYXRjaF92Yl9wcmltKGRldl9wcml2LAorCQkJCQkJCSAgICAmY21kX2hlYWRlciwKKwkJCQkJCQkgICAgKGNvbnN0IHVpbnQzMl90CisJCQkJCQkJICAgICBfX3VzZXIgKikKKwkJCQkJCQkgICAgdXNyX3Z0eGJ1ZiwgdmJfc2l6ZSwKKwkJCQkJCQkgICAgdmJfc3RyaWRlKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgU0FWQUdFX0NNRF9ETUFfSURYOgogCQkJCWogPSAoY21kX2hlYWRlci5pZHguY291bnQgKyAzKSAvIDQ7CiAJCQkJLyogaiB3YXMgY2hlY2sgaW4gc2F2YWdlX2JjaV9jbWRidWYgKi8KLQkJCQlyZXQgPSBzYXZhZ2VfZGlzcGF0Y2hfZG1hX2lkeCgKLQkJCQkJZGV2X3ByaXYsICZjbWRfaGVhZGVyLAotCQkJCQkoY29uc3QgdWludDE2X3QgX191c2VyICopdXNyX2NtZGJ1ZiwKLQkJCQkJZG1hYnVmKTsKKwkJCQlyZXQgPQorCQkJCSAgICBzYXZhZ2VfZGlzcGF0Y2hfZG1hX2lkeChkZXZfcHJpdiwKKwkJCQkJCQkgICAgJmNtZF9oZWFkZXIsCisJCQkJCQkJICAgIChjb25zdCB1aW50MTZfdAorCQkJCQkJCSAgICAgX191c2VyICopCisJCQkJCQkJICAgIHVzcl9jbWRidWYsIGRtYWJ1Zik7CiAJCQkJdXNyX2NtZGJ1ZiArPSBqOwogCQkJCWJyZWFrOwogCQkJY2FzZSBTQVZBR0VfQ01EX1ZCX0lEWDoKIAkJCQlqID0gKGNtZF9oZWFkZXIuaWR4LmNvdW50ICsgMykgLyA0OwogCQkJCS8qIGogd2FzIGNoZWNrIGluIHNhdmFnZV9iY2lfY21kYnVmICovCi0JCQkJcmV0ID0gc2F2YWdlX2Rpc3BhdGNoX3ZiX2lkeCgKLQkJCQkJZGV2X3ByaXYsICZjbWRfaGVhZGVyLAotCQkJCQkoY29uc3QgdWludDE2X3QgX191c2VyICopdXNyX2NtZGJ1ZiwKLQkJCQkJKGNvbnN0IHVpbnQzMl90IF9fdXNlciAqKXVzcl92dHhidWYsCi0JCQkJCXZiX3NpemUsIHZiX3N0cmlkZSk7CisJCQkJcmV0ID0KKwkJCQkgICAgc2F2YWdlX2Rpc3BhdGNoX3ZiX2lkeChkZXZfcHJpdiwKKwkJCQkJCQkgICAmY21kX2hlYWRlciwKKwkJCQkJCQkgICAoY29uc3QgdWludDE2X3QKKwkJCQkJCQkgICAgX191c2VyICopdXNyX2NtZGJ1ZiwKKwkJCQkJCQkgICAoY29uc3QgdWludDMyX3QKKwkJCQkJCQkgICAgX191c2VyICopdXNyX3Z0eGJ1ZiwKKwkJCQkJCQkgICB2Yl9zaXplLCB2Yl9zdHJpZGUpOwogCQkJCXVzcl9jbWRidWYgKz0gajsKIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CkBAIC05OTcsMTYgKzEwMDgsMTcgQEAKIAlpbnQgcmV0ID0gMDsKIAogCURSTV9ERUJVRygiXG4iKTsKLQkKKwogCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbHApOwogCi0JRFJNX0NPUFlfRlJPTV9VU0VSX0lPQ1RMKGNtZGJ1ZiwgKGRybV9zYXZhZ2VfY21kYnVmX3QgX191c2VyICopZGF0YSwKKwlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwoY21kYnVmLCAoZHJtX3NhdmFnZV9jbWRidWZfdCBfX3VzZXIgKikgZGF0YSwKIAkJCQkgc2l6ZW9mKGNtZGJ1ZikpOwogCiAJaWYgKGRtYSAmJiBkbWEtPmJ1Zmxpc3QpIHsKIAkJaWYgKGNtZGJ1Zi5kbWFfaWR4ID4gZG1hLT5idWZfY291bnQpIHsKLQkJCURSTV9FUlJPUigidmVydGV4IGJ1ZmZlciBpbmRleCAldSBvdXQgb2YgcmFuZ2UgKDAtJXUpXG4iLAotCQkJCSAgY21kYnVmLmRtYV9pZHgsIGRtYS0+YnVmX2NvdW50LTEpOworCQkJRFJNX0VSUk9SCisJCQkgICAgKCJ2ZXJ0ZXggYnVmZmVyIGluZGV4ICV1IG91dCBvZiByYW5nZSAoMC0ldSlcbiIsCisJCQkgICAgIGNtZGJ1Zi5kbWFfaWR4LCBkbWEtPmJ1Zl9jb3VudCAtIDEpOwogCQkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAkJfQogCQlkbWFidWYgPSBkbWEtPmJ1Zmxpc3RbY21kYnVmLmRtYV9pZHhdOwpAQCAtMTAxNCwxNCArMTAyNiwxNCBAQAogCQlkbWFidWYgPSBOVUxMOwogCX0KIAotCXVzcl9jbWRidWYgPSAoZHJtX3NhdmFnZV9jbWRfaGVhZGVyX3QgX191c2VyICopY21kYnVmLmNtZF9hZGRyOworCXVzcl9jbWRidWYgPSAoZHJtX3NhdmFnZV9jbWRfaGVhZGVyX3QgX191c2VyICopIGNtZGJ1Zi5jbWRfYWRkcjsKIAl1c3JfdnR4YnVmID0gKHVuc2lnbmVkIGludCBfX3VzZXIgKiljbWRidWYudmJfYWRkcjsKLQl1c3JfYm94ZXMgPSAoZHJtX2NsaXBfcmVjdF90IF9fdXNlciAqKWNtZGJ1Zi5ib3hfYWRkcjsKLQlpZiAoKGNtZGJ1Zi5zaXplICYmIERSTV9WRVJJRllBUkVBX1JFQUQodXNyX2NtZGJ1ZiwgY21kYnVmLnNpemUqOCkpIHx8Ci0JICAgIChjbWRidWYudmJfc2l6ZSAmJiBEUk1fVkVSSUZZQVJFQV9SRUFEKAotCQkgICAgdXNyX3Z0eGJ1ZiwgY21kYnVmLnZiX3NpemUpKSB8fAotCSAgICAoY21kYnVmLm5ib3ggJiYgRFJNX1ZFUklGWUFSRUFfUkVBRCgKLQkJICAgIHVzcl9ib3hlcywgY21kYnVmLm5ib3gqc2l6ZW9mKGRybV9jbGlwX3JlY3RfdCkpKSkKKwl1c3JfYm94ZXMgPSAoZHJtX2NsaXBfcmVjdF90IF9fdXNlciAqKSBjbWRidWYuYm94X2FkZHI7CisJaWYgKChjbWRidWYuc2l6ZSAmJiBEUk1fVkVSSUZZQVJFQV9SRUFEKHVzcl9jbWRidWYsIGNtZGJ1Zi5zaXplICogOCkpIHx8CisJICAgIChjbWRidWYudmJfc2l6ZSAmJiBEUk1fVkVSSUZZQVJFQV9SRUFEKHVzcl92dHhidWYsIGNtZGJ1Zi52Yl9zaXplKSkKKwkgICAgfHwgKGNtZGJ1Zi5uYm94CisJCSYmIERSTV9WRVJJRllBUkVBX1JFQUQodXNyX2JveGVzLAorCQkJCSAgICAgICBjbWRidWYubmJveCAqIHNpemVvZihkcm1fY2xpcF9yZWN0X3QpKSkpCiAJCXJldHVybiBEUk1fRVJSKEVGQVVMVCk7CiAKIAkvKiBNYWtlIHN1cmUgd3JpdGVzIHRvIERNQSBidWZmZXJzIGFyZSBmaW5pc2hlZCBiZWZvcmUgc2VuZGluZwpAQCAtMTA1OCwxNyArMTA3MCwyMSBAQAogCQljYXNlIFNBVkFHRV9DTURfRE1BX1BSSU06CiAJCWNhc2UgU0FWQUdFX0NNRF9WQl9QUklNOgogCQkJaWYgKCFmaXJzdF9kcmF3X2NtZCkKLQkJCQlmaXJzdF9kcmF3X2NtZCA9IHVzcl9jbWRidWYtMTsKKwkJCQlmaXJzdF9kcmF3X2NtZCA9IHVzcl9jbWRidWYgLSAxOwogCQkJdXNyX2NtZGJ1ZiArPSBqOwogCQkJaSArPSBqOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlpZiAoZmlyc3RfZHJhd19jbWQpIHsKLQkJCQlyZXQgPSBzYXZhZ2VfZGlzcGF0Y2hfZHJhdyAoCi0JCQkJCWRldl9wcml2LCBmaXJzdF9kcmF3X2NtZCwgdXNyX2NtZGJ1Zi0xLAotCQkJCQlkbWFidWYsIHVzcl92dHhidWYsIGNtZGJ1Zi52Yl9zaXplLAotCQkJCQljbWRidWYudmJfc3RyaWRlLAotCQkJCQljbWRidWYubmJveCwgdXNyX2JveGVzKTsKKwkJCQlyZXQgPQorCQkJCSAgICBzYXZhZ2VfZGlzcGF0Y2hfZHJhdyhkZXZfcHJpdiwKKwkJCQkJCQkgZmlyc3RfZHJhd19jbWQsCisJCQkJCQkJIHVzcl9jbWRidWYgLSAxLCBkbWFidWYsCisJCQkJCQkJIHVzcl92dHhidWYsCisJCQkJCQkJIGNtZGJ1Zi52Yl9zaXplLAorCQkJCQkJCSBjbWRidWYudmJfc3RyaWRlLAorCQkJCQkJCSBjbWRidWYubmJveCwKKwkJCQkJCQkgdXNyX2JveGVzKTsKIAkJCQlpZiAocmV0ICE9IDApCiAJCQkJCXJldHVybiByZXQ7CiAJCQkJZmlyc3RfZHJhd19jbWQgPSBOVUxMOwpAQCAtMTA4Niw5ICsxMTAyLDkgQEAKIAkJCQlETUFfRkxVU0goKTsKIAkJCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCQkJfQotCQkJcmV0ID0gc2F2YWdlX2Rpc3BhdGNoX3N0YXRlKAotCQkJCWRldl9wcml2LCAmY21kX2hlYWRlciwKLQkJCQkodWludDMyX3QgX191c2VyICopdXNyX2NtZGJ1Zik7CisJCQlyZXQgPSBzYXZhZ2VfZGlzcGF0Y2hfc3RhdGUoZGV2X3ByaXYsICZjbWRfaGVhZGVyLAorCQkJCQkJICAgICh1aW50MzJfdCBfX3VzZXIgKikKKwkJCQkJCSAgICB1c3JfY21kYnVmKTsKIAkJCXVzcl9jbWRidWYgKz0gajsKIAkJCWkgKz0gajsKIAkJCWJyZWFrOwpAQCAtMTEyMiwxMCArMTEzOCwxMSBAQAogCX0KIAogCWlmIChmaXJzdF9kcmF3X2NtZCkgewotCQlyZXQgPSBzYXZhZ2VfZGlzcGF0Y2hfZHJhdyAoCi0JCQlkZXZfcHJpdiwgZmlyc3RfZHJhd19jbWQsIHVzcl9jbWRidWYsIGRtYWJ1ZiwKLQkJCXVzcl92dHhidWYsIGNtZGJ1Zi52Yl9zaXplLCBjbWRidWYudmJfc3RyaWRlLAotCQkJY21kYnVmLm5ib3gsIHVzcl9ib3hlcyk7CisJCXJldCA9CisJCSAgICBzYXZhZ2VfZGlzcGF0Y2hfZHJhdyhkZXZfcHJpdiwgZmlyc3RfZHJhd19jbWQsIHVzcl9jbWRidWYsCisJCQkJCSBkbWFidWYsIHVzcl92dHhidWYsIGNtZGJ1Zi52Yl9zaXplLAorCQkJCQkgY21kYnVmLnZiX3N0cmlkZSwgY21kYnVmLm5ib3gsCisJCQkJCSB1c3JfYm94ZXMpOwogCQlpZiAocmV0ICE9IDApIHsKIAkJCURNQV9GTFVTSCgpOwogCQkJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vc2lzX2RybS5oIGIvZHJpdmVycy9jaGFyL2RybS9zaXNfZHJtLmgKaW5kZXggZTk5YzNhNC4uOGYyNzNkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9zaXNfZHJtLmgKKysrIGIvZHJpdmVycy9jaGFyL2RybS9zaXNfZHJtLmgKQEAgLTM5LDQgKzM5LDQgQEAKIAl1bnNpZ25lZCBpbnQgb2Zmc2V0LCBzaXplOwogfSBkcm1fc2lzX2ZiX3Q7CiAKLSNlbmRpZiAvKiBfX1NJU19EUk1fSF9fICovCisjZW5kaWYJCQkJLyogX19TSVNfRFJNX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9zaXNfZHJ2LmMgYi9kcml2ZXJzL2NoYXIvZHJtL3Npc19kcnYuYwppbmRleCBmNDQxNzE0Li42ZDBjYjIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL3Npc19kcnYuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL3Npc19kcnYuYwpAQCAtMTAsMTEgKzEwLDExIEBACiAgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKICAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQogICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqIAorICoKICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKICAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKICAqIFNvZnR3YXJlLgotICogCisgKgogICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKICAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAogICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCkBAIC0zMSwzMSArMzEsMjkgQEAKICNpbmNsdWRlICJzaXNfZHJ2LmgiCiAKICNpbmNsdWRlICJkcm1fcGNpaWRzLmgiCi0gIAotc3RhdGljIGludCBwb3N0aW5pdCggc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmbGFncyApCisKK3N0YXRpYyBpbnQgcG9zdGluaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKLQlEUk1fSU5GTyggIkluaXRpYWxpemVkICVzICVkLiVkLiVkICVzIG9uIG1pbm9yICVkOiAlc1xuIiwKLQkJRFJJVkVSX05BTUUsCi0JCURSSVZFUl9NQUpPUiwKLQkJRFJJVkVSX01JTk9SLAotCQlEUklWRVJfUEFUQ0hMRVZFTCwKLQkJRFJJVkVSX0RBVEUsCi0JCWRldi0+cHJpbWFyeS5taW5vciwKLQkJcGNpX3ByZXR0eV9uYW1lKGRldi0+cGRldikKLQkJKTsKKwlEUk1fSU5GTygiSW5pdGlhbGl6ZWQgJXMgJWQuJWQuJWQgJXMgb24gbWlub3IgJWQ6ICVzXG4iLAorCQkgRFJJVkVSX05BTUUsCisJCSBEUklWRVJfTUFKT1IsCisJCSBEUklWRVJfTUlOT1IsCisJCSBEUklWRVJfUEFUQ0hMRVZFTCwKKwkJIERSSVZFUl9EQVRFLCBkZXYtPnByaW1hcnkubWlub3IsIHBjaV9wcmV0dHlfbmFtZShkZXYtPnBkZXYpCisJICAgICk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmVyc2lvbiggZHJtX3ZlcnNpb25fdCAqdmVyc2lvbiApCitzdGF0aWMgaW50IHZlcnNpb24oZHJtX3ZlcnNpb25fdCAqIHZlcnNpb24pCiB7CiAJaW50IGxlbjsKIAogCXZlcnNpb24tPnZlcnNpb25fbWFqb3IgPSBEUklWRVJfTUFKT1I7CiAJdmVyc2lvbi0+dmVyc2lvbl9taW5vciA9IERSSVZFUl9NSU5PUjsKIAl2ZXJzaW9uLT52ZXJzaW9uX3BhdGNobGV2ZWwgPSBEUklWRVJfUEFUQ0hMRVZFTDsKLQlEUk1fQ09QWSggdmVyc2lvbi0+bmFtZSwgRFJJVkVSX05BTUUgKTsKLQlEUk1fQ09QWSggdmVyc2lvbi0+ZGF0ZSwgRFJJVkVSX0RBVEUgKTsKLQlEUk1fQ09QWSggdmVyc2lvbi0+ZGVzYywgRFJJVkVSX0RFU0MgKTsKKwlEUk1fQ09QWSh2ZXJzaW9uLT5uYW1lLCBEUklWRVJfTkFNRSk7CisJRFJNX0NPUFkodmVyc2lvbi0+ZGF0ZSwgRFJJVkVSX0RBVEUpOworCURSTV9DT1BZKHZlcnNpb24tPmRlc2MsIERSSVZFUl9ERVNDKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzcsMTggKzc1LDE4IEBACiAJLnZlcnNpb24gPSB2ZXJzaW9uLAogCS5pb2N0bHMgPSBzaXNfaW9jdGxzLAogCS5mb3BzID0gewotCQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkJLm9wZW4gPSBkcm1fb3BlbiwKLQkJLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKLQkJLmlvY3RsID0gZHJtX2lvY3RsLAotCQkubW1hcCA9IGRybV9tbWFwLAotCQkucG9sbCA9IGRybV9wb2xsLAotCQkuZmFzeW5jID0gZHJtX2Zhc3luYywKLQl9LAorCQkgLm93bmVyID0gVEhJU19NT0RVTEUsCisJCSAub3BlbiA9IGRybV9vcGVuLAorCQkgLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKKwkJIC5pb2N0bCA9IGRybV9pb2N0bCwKKwkJIC5tbWFwID0gZHJtX21tYXAsCisJCSAucG9sbCA9IGRybV9wb2xsLAorCQkgLmZhc3luYyA9IGRybV9mYXN5bmMsCisJCSB9LAogCS5wY2lfZHJpdmVyID0gewotCQkubmFtZSAgICAgICAgICA9IERSSVZFUl9OQU1FLAotCQkuaWRfdGFibGUgICAgICA9IHBjaWlkbGlzdCwKLQl9CisJCSAgICAgICAubmFtZSA9IERSSVZFUl9OQU1FLAorCQkgICAgICAgLmlkX3RhYmxlID0gcGNpaWRsaXN0LAorCQkgICAgICAgfQogfTsKIAogc3RhdGljIGludCBfX2luaXQgc2lzX2luaXQodm9pZCkKQEAgLTEwNSw2ICsxMDMsNiBAQAogbW9kdWxlX2luaXQoc2lzX2luaXQpOwogbW9kdWxlX2V4aXQoc2lzX2V4aXQpOwogCi1NT0RVTEVfQVVUSE9SKCBEUklWRVJfQVVUSE9SICk7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIERSSVZFUl9ERVNDICk7CitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgYW5kIGFkZGl0aW9uYWwgcmlnaHRzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3Npc19kcnYuaCBiL2RyaXZlcnMvY2hhci9kcm0vc2lzX2Rydi5oCmluZGV4IDViZTM2YjUuLjRlZjNkNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vc2lzX2Rydi5oCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vc2lzX2Rydi5oCkBAIC0xMCwxMSArMTAsMTEgQEAKICAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAogICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCiAgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICogCisgKgogICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAogICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQogICogU29mdHdhcmUuCi0gKiAKKyAqCiAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgogICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCiAgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKQEAgLTIyLDcgKzIyLDcgQEAKICAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAogICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCiAgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCi0gKiAKKyAqCiAgKi8KIAogI2lmbmRlZiBfU0lTX0RSVl9IXwpAQCAtNDYsNyArNDYsNyBAQAogCW1lbUhlYXBfdCAqRkJIZWFwOwogfSBkcm1fc2lzX3ByaXZhdGVfdDsKIAotZXh0ZXJuIGludCBzaXNfaW5pdF9jb250ZXh0KGRybV9kZXZpY2VfdCAqZGV2LCBpbnQgY29udGV4dCk7Ci1leHRlcm4gaW50IHNpc19maW5hbF9jb250ZXh0KGRybV9kZXZpY2VfdCAqZGV2LCBpbnQgY29udGV4dCk7CitleHRlcm4gaW50IHNpc19pbml0X2NvbnRleHQoZHJtX2RldmljZV90ICogZGV2LCBpbnQgY29udGV4dCk7CitleHRlcm4gaW50IHNpc19maW5hbF9jb250ZXh0KGRybV9kZXZpY2VfdCAqIGRldiwgaW50IGNvbnRleHQpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vc2lzX2RzLmMgYi9kcml2ZXJzL2NoYXIvZHJtL3Npc19kcy5jCmluZGV4IGUzN2VkOGMuLjJlNDg1ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vc2lzX2RzLmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9zaXNfZHMuYwpAQCAtMTAsMTEgKzEwLDExIEBACiAgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKICAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQogICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqIAorICoKICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKICAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKICAqIFNvZnR3YXJlLgotICogCisgKgogICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKICAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAogICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCkBAIC0yMiwxMCArMjIsMTAgQEAKICAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAogICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCiAgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCi0gKiAKKyAqCiAgKiBBdXRob3JzOgogICogICAgU3VuZy1DaGluZyBMaW4gPHNjbGluQHNpcy5jb20udHc+Ci0gKiAKKyAqCiAgKi8KIAogI2luY2x1ZGUgImRybVAuaCIKQEAgLTQxLDEzICs0MSwxMyBAQAogCWludCBpOwogCXNldF90ICpzZXQ7CiAKLQlzZXQgPSAoc2V0X3QgKilkcm1fYWxsb2Moc2l6ZW9mKHNldF90KSwgRFJNX01FTV9EUklWRVIpOworCXNldCA9IChzZXRfdCAqKSBkcm1fYWxsb2Moc2l6ZW9mKHNldF90KSwgRFJNX01FTV9EUklWRVIpOwogCWlmIChzZXQgIT0gTlVMTCkgewogCQlmb3IgKGkgPSAwOyBpIDwgU0VUX1NJWkU7IGkrKykgewotCQkJc2V0LT5saXN0W2ldLmZyZWVfbmV4dCA9IGkgKyAxOyAgICAKKwkJCXNldC0+bGlzdFtpXS5mcmVlX25leHQgPSBpICsgMTsKIAkJCXNldC0+bGlzdFtpXS5hbGxvY19uZXh0ID0gLTE7CiAJCX0KLQkJc2V0LT5saXN0W1NFVF9TSVpFLTFdLmZyZWVfbmV4dCA9IC0xOworCQlzZXQtPmxpc3RbU0VUX1NJWkUgLSAxXS5mcmVlX25leHQgPSAtMTsKIAkJc2V0LT5mcmVlID0gMDsKIAkJc2V0LT5hbGxvYyA9IC0xOwogCQlzZXQtPnRyYWNlID0gLTE7CkBAIC01NSwxMCArNTUsMTAgQEAKIAlyZXR1cm4gc2V0OwogfQogCi1pbnQgc2V0QWRkKHNldF90ICpzZXQsIElURU1fVFlQRSBpdGVtKQoraW50IHNldEFkZChzZXRfdCAqIHNldCwgSVRFTV9UWVBFIGl0ZW0pCiB7CiAJaW50IGZyZWUgPSBzZXQtPmZyZWU7Ci0gIAorCiAJaWYgKGZyZWUgIT0gLTEpIHsKIAkJc2V0LT5saXN0W2ZyZWVdLnZhbCA9IGl0ZW07CiAJCXNldC0+ZnJlZSA9IHNldC0+bGlzdFtmcmVlXS5mcmVlX25leHQ7CkBAIC02NywxNiArNjcsMTYgQEAKIAl9CiAKIAlzZXQtPmxpc3RbZnJlZV0uYWxsb2NfbmV4dCA9IHNldC0+YWxsb2M7Ci0Jc2V0LT5hbGxvYyA9IGZyZWU7ICAKLQlzZXQtPmxpc3RbZnJlZV0uZnJlZV9uZXh0ID0gLTE7ICAgIAorCXNldC0+YWxsb2MgPSBmcmVlOworCXNldC0+bGlzdFtmcmVlXS5mcmVlX25leHQgPSAtMTsKIAogCXJldHVybiAxOwogfQogCi1pbnQgc2V0RGVsKHNldF90ICpzZXQsIElURU1fVFlQRSBpdGVtKQoraW50IHNldERlbChzZXRfdCAqIHNldCwgSVRFTV9UWVBFIGl0ZW0pCiB7CiAJaW50IGFsbG9jID0gc2V0LT5hbGxvYzsKLQlpbnQgcHJldiA9IC0xOyAgCisJaW50IHByZXYgPSAtMTsKIAogCXdoaWxlIChhbGxvYyAhPSAtMSkgewogCQlpZiAoc2V0LT5saXN0W2FsbG9jXS52YWwgPT0gaXRlbSkgewpAQCAtMTAzLDcgKzEwMyw3IEBACiAKIC8qIHNldEZpcnN0IC0+IHNldEFkZCAtPiBzZXROZXh0IGlzIHdyb25nICovCiAKLWludCBzZXRGaXJzdChzZXRfdCAqc2V0LCBJVEVNX1RZUEUgKml0ZW0pCitpbnQgc2V0Rmlyc3Qoc2V0X3QgKiBzZXQsIElURU1fVFlQRSAqIGl0ZW0pCiB7CiAJaWYgKHNldC0+YWxsb2MgPT0gLTEpCiAJCXJldHVybiAwOwpAQCAtMTE0LDcgKzExNCw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLWludCBzZXROZXh0KHNldF90ICpzZXQsIElURU1fVFlQRSAqaXRlbSkKK2ludCBzZXROZXh0KHNldF90ICogc2V0LCBJVEVNX1RZUEUgKiBpdGVtKQogewogCWlmIChzZXQtPnRyYWNlID09IC0xKQogCQlyZXR1cm4gMDsKQEAgLTEyNSw3ICsxMjUsNyBAQAogCXJldHVybiAxOwogfQogCi1pbnQgc2V0RGVzdHJveShzZXRfdCAqc2V0KQoraW50IHNldERlc3Ryb3koc2V0X3QgKiBzZXQpCiB7CiAJZHJtX2ZyZWUoc2V0LCBzaXplb2Yoc2V0X3QpLCBEUk1fTUVNX0RSSVZFUik7CiAKQEAgLTE0OSwzNSArMTQ5LDM0IEBACiAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUwogICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCiAgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKLSAqIFdJVFRBV0FUIFlBTVdPTkcsIE9SIEFOWSBPVEhFUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIAotICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIAotICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIAorICogV0lUVEFXQVQgWUFNV09ORywgT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFCiAgKiBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KICAqCiAgKi8KIAogI2RlZmluZSBJU0ZSRUUoYnB0cikgKChicHRyKS0+ZnJlZSkKIAotbWVtSGVhcF90ICptbUluaXQoaW50IG9mcywKLQkJICBpbnQgc2l6ZSkKK21lbUhlYXBfdCAqbW1Jbml0KGludCBvZnMsIGludCBzaXplKQogewogCVBNZW1CbG9jayBibG9ja3M7CiAKIAlpZiAoc2l6ZSA8PSAwKQogCQlyZXR1cm4gTlVMTDsKIAotCWJsb2NrcyA9IChUTWVtQmxvY2sgKilkcm1fY2FsbG9jKDEsIHNpemVvZihUTWVtQmxvY2spLCBEUk1fTUVNX0RSSVZFUik7CisJYmxvY2tzID0gKFRNZW1CbG9jayAqKSBkcm1fY2FsbG9jKDEsIHNpemVvZihUTWVtQmxvY2spLCBEUk1fTUVNX0RSSVZFUik7CiAJaWYgKGJsb2NrcyAhPSBOVUxMKSB7CiAJCWJsb2Nrcy0+b2ZzID0gb2ZzOwogCQlibG9ja3MtPnNpemUgPSBzaXplOwogCQlibG9ja3MtPmZyZWUgPSAxOwotCQlyZXR1cm4gKG1lbUhlYXBfdCAqKWJsb2NrczsKKwkJcmV0dXJuIChtZW1IZWFwX3QgKikgYmxvY2tzOwogCX0gZWxzZQogCQlyZXR1cm4gTlVMTDsKIH0KIAogLyogQ2hlY2tzIGlmIGEgcG9pbnRlciAnYicgaXMgcGFydCBvZiB0aGUgaGVhcCAnaGVhcCcgKi8KLWludCBtbUJsb2NrSW5IZWFwKG1lbUhlYXBfdCAqaGVhcCwgUE1lbUJsb2NrIGIpCitpbnQgbW1CbG9ja0luSGVhcChtZW1IZWFwX3QgKiBoZWFwLCBQTWVtQmxvY2sgYikKIHsKIAlUTWVtQmxvY2sgKnA7CiAKQEAgLTE5NCwxNiArMTkzLDE2IEBACiAJCXJldHVybiAwOwogfQogCi1zdGF0aWMgVE1lbUJsb2NrKiBTbGljZUJsb2NrKFRNZW1CbG9jayAqcCwgCi0JCQkgICAgIGludCBzdGFydG9mcywgaW50IHNpemUsIAorc3RhdGljIFRNZW1CbG9jayAqU2xpY2VCbG9jayhUTWVtQmxvY2sgKiBwLAorCQkJICAgICBpbnQgc3RhcnRvZnMsIGludCBzaXplLAogCQkJICAgICBpbnQgcmVzZXJ2ZWQsIGludCBhbGlnbm1lbnQpCiB7CiAJVE1lbUJsb2NrICpuZXdibG9jazsKIAogCS8qIGJyZWFrIGxlZnQgKi8KIAlpZiAoc3RhcnRvZnMgPiBwLT5vZnMpIHsKLQkJbmV3YmxvY2sgPSAoVE1lbUJsb2NrKikgZHJtX2NhbGxvYygxLCBzaXplb2YoVE1lbUJsb2NrKSwKLQkJICAgIERSTV9NRU1fRFJJVkVSKTsKKwkJbmV3YmxvY2sgPSAoVE1lbUJsb2NrICopIGRybV9jYWxsb2MoMSwgc2l6ZW9mKFRNZW1CbG9jayksCisJCQkJCQkgICAgRFJNX01FTV9EUklWRVIpOwogCQluZXdibG9jay0+b2ZzID0gc3RhcnRvZnM7CiAJCW5ld2Jsb2NrLT5zaXplID0gcC0+c2l6ZSAtIChzdGFydG9mcyAtIHAtPm9mcyk7CiAJCW5ld2Jsb2NrLT5mcmVlID0gMTsKQEAgLTIxNSw4ICsyMTQsOCBAQAogCiAJLyogYnJlYWsgcmlnaHQgKi8KIAlpZiAoc2l6ZSA8IHAtPnNpemUpIHsKLQkJbmV3YmxvY2sgPSAoVE1lbUJsb2NrKikgZHJtX2NhbGxvYygxLCBzaXplb2YoVE1lbUJsb2NrKSwKLQkJICAgIERSTV9NRU1fRFJJVkVSKTsKKwkJbmV3YmxvY2sgPSAoVE1lbUJsb2NrICopIGRybV9jYWxsb2MoMSwgc2l6ZW9mKFRNZW1CbG9jayksCisJCQkJCQkgICAgRFJNX01FTV9EUklWRVIpOwogCQluZXdibG9jay0+b2ZzID0gc3RhcnRvZnMgKyBzaXplOwogCQluZXdibG9jay0+c2l6ZSA9IHAtPnNpemUgLSBzaXplOwogCQluZXdibG9jay0+ZnJlZSA9IDE7CkBAIC0yMzIsMzcgKzIzMSwzNyBAQAogCXJldHVybiBwOwogfQogCi1QTWVtQmxvY2sgbW1BbGxvY01lbSggbWVtSGVhcF90ICpoZWFwLCBpbnQgc2l6ZSwgaW50IGFsaWduMiwgaW50IHN0YXJ0U2VhcmNoKQorUE1lbUJsb2NrIG1tQWxsb2NNZW0obWVtSGVhcF90ICogaGVhcCwgaW50IHNpemUsIGludCBhbGlnbjIsIGludCBzdGFydFNlYXJjaCkKIHsKLQlpbnQgbWFzayxzdGFydG9mcywgZW5kb2ZzOworCWludCBtYXNrLCBzdGFydG9mcywgZW5kb2ZzOwogCVRNZW1CbG9jayAqcDsKLQkKKwogCWlmIChoZWFwID09IE5VTEwgfHwgYWxpZ24yIDwgMCB8fCBzaXplIDw9IDApCiAJCXJldHVybiBOVUxMOwogCi0JbWFzayA9ICgxIDw8IGFsaWduMiktMTsKKwltYXNrID0gKDEgPDwgYWxpZ24yKSAtIDE7CiAJc3RhcnRvZnMgPSAwOwotCXAgPSAoVE1lbUJsb2NrICopaGVhcDsKKwlwID0gKFRNZW1CbG9jayAqKSBoZWFwOwogCXdoaWxlIChwICE9IE5VTEwpIHsKIAkJaWYgKElTRlJFRShwKSkgewogCQkJc3RhcnRvZnMgPSAocC0+b2ZzICsgbWFzaykgJiB+bWFzazsKLQkJCWlmICggc3RhcnRvZnMgPCBzdGFydFNlYXJjaCApIHsKKwkJCWlmIChzdGFydG9mcyA8IHN0YXJ0U2VhcmNoKSB7CiAJCQkJc3RhcnRvZnMgPSBzdGFydFNlYXJjaDsKIAkJCX0KLQkJCWVuZG9mcyA9IHN0YXJ0b2ZzK3NpemU7Ci0JCQlpZiAoZW5kb2ZzIDw9IChwLT5vZnMrcC0+c2l6ZSkpCisJCQllbmRvZnMgPSBzdGFydG9mcyArIHNpemU7CisJCQlpZiAoZW5kb2ZzIDw9IChwLT5vZnMgKyBwLT5zaXplKSkKIAkJCQlicmVhazsKIAkJfQogCQlwID0gcC0+bmV4dDsKIAl9CiAJaWYgKHAgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7Ci0JcCA9IFNsaWNlQmxvY2socCxzdGFydG9mcyxzaXplLDAsbWFzaysxKTsKKwlwID0gU2xpY2VCbG9jayhwLCBzdGFydG9mcywgc2l6ZSwgMCwgbWFzayArIDEpOwogCXAtPmhlYXAgPSBoZWFwOwogCXJldHVybiBwOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgSm9pbjJCbG9ja3MoVE1lbUJsb2NrICpwKQorc3RhdGljIF9faW5saW5lX18gaW50IEpvaW4yQmxvY2tzKFRNZW1CbG9jayAqIHApCiB7CiAJaWYgKHAtPmZyZWUgJiYgcC0+bmV4dCAmJiBwLT5uZXh0LT5mcmVlKSB7CiAJCVRNZW1CbG9jayAqcSA9IHAtPm5leHQ7CkBAIC0yOTUsNyArMjk0LDYgQEAKIAlwLT5mcmVlID0gMTsKIAlKb2luMkJsb2NrcyhwKTsKIAlpZiAocHJldikKLQlKb2luMkJsb2NrcyhwcmV2KTsKKwkJSm9pbjJCbG9ja3MocHJldik7CiAJcmV0dXJuIDA7CiB9Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vc2lzX2RzLmggYi9kcml2ZXJzL2NoYXIvZHJtL3Npc19kcy5oCmluZGV4IDE3MWVlNzUuLmRhODUwYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vc2lzX2RzLmgKKysrIGIvZHJpdmVycy9jaGFyL2RybS9zaXNfZHMuaApAQCAtMTAsMTEgKzEwLDExIEBACiAgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKICAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQogICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqIAorICoKICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKICAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKICAqIFNvZnR3YXJlLgotICogCisgKgogICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKICAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAogICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCkBAIC0yMiwxMCArMjIsMTAgQEAKICAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAogICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCiAgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCi0gKiAKKyAqCiAgKiBBdXRob3JzOgogICogICAgU3VuZy1DaGluZyBMaW4gPHNjbGluQHNpcy5jb20udHc+Ci0gKiAKKyAqCiAgKi8KIAogI2lmbmRlZiBfX1NJU19EU19IX18KQEAgLTUwLDExICs1MCwxMSBAQAogfSBzZXRfdDsKIAogc2V0X3QgKnNldEluaXQodm9pZCk7Ci1pbnQgc2V0QWRkKHNldF90ICpzZXQsIElURU1fVFlQRSBpdGVtKTsKLWludCBzZXREZWwoc2V0X3QgKnNldCwgSVRFTV9UWVBFIGl0ZW0pOwotaW50IHNldEZpcnN0KHNldF90ICpzZXQsIElURU1fVFlQRSAqaXRlbSk7Ci1pbnQgc2V0TmV4dChzZXRfdCAqc2V0LCBJVEVNX1RZUEUgKml0ZW0pOwotaW50IHNldERlc3Ryb3koc2V0X3QgKnNldCk7CitpbnQgc2V0QWRkKHNldF90ICogc2V0LCBJVEVNX1RZUEUgaXRlbSk7CitpbnQgc2V0RGVsKHNldF90ICogc2V0LCBJVEVNX1RZUEUgaXRlbSk7CitpbnQgc2V0Rmlyc3Qoc2V0X3QgKiBzZXQsIElURU1fVFlQRSAqIGl0ZW0pOworaW50IHNldE5leHQoc2V0X3QgKiBzZXQsIElURU1fVFlQRSAqIGl0ZW0pOworaW50IHNldERlc3Ryb3koc2V0X3QgKiBzZXQpOwogCiAvKgogICogR0xYIEhhcmR3YXJlIERldmljZSBEcml2ZXIgY29tbW9uIGNvZGUKQEAgLTczLDkgKzczLDkgQEAKICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCiAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKICAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAotICogV0lUVEFXQVQgWUFNV09ORywgT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgCi0gKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgCi0gKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgCisgKiBXSVRUQVdBVCBZQU1XT05HLCBPUiBBTlkgT1RIRVIgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLAorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUKICAqIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogICoKICAqLwpAQCAtODMsNyArODMsNyBAQAogc3RydWN0IG1lbV9ibG9ja190IHsKIAlzdHJ1Y3QgbWVtX2Jsb2NrX3QgKm5leHQ7CiAJc3RydWN0IG1lbV9ibG9ja190ICpoZWFwOwotCWludCBvZnMsc2l6ZTsKKwlpbnQgb2ZzLCBzaXplOwogCWludCBhbGlnbjsKIAl1bnNpZ25lZCBpbnQgZnJlZToxOwogCXVuc2lnbmVkIGludCByZXNlcnZlZDoxOwpAQCAtMTA5LDExICsxMDksMTEgQEAKIAliLT5yZXNlcnZlZCA9IDE7CiB9CiAKLS8qIAorLyoKICAqIGlucHV0OiB0b3RhbCBzaXplIGluIGJ5dGVzCiAgKiByZXR1cm46IGEgaGVhcCBwb2ludGVyIGlmIE9LLCBOVUxMIGlmIGVycm9yCiAgKi8KLW1lbUhlYXBfdCAqbW1Jbml0KCBpbnQgb2ZzLCBpbnQgc2l6ZSApOworbWVtSGVhcF90ICptbUluaXQoaW50IG9mcywgaW50IHNpemUpOwogCiAvKgogICogQWxsb2NhdGUgJ3NpemUnIGJ5dGVzIHdpdGggMl5hbGlnbjIgYnl0ZXMgYWxpZ25tZW50LApAQCAtMTI1LDIxICsxMjUsMjEgQEAKICAqCQlzdGFydFNlYXJjaCA9IGxpbmVhciBvZmZzZXQgZnJvbSBzdGFydCBvZiBoZWFwIHRvIGJlZ2luIHNlYXJjaAogICogcmV0dXJuOiBwb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgYmxvY2ssIDAgaWYgZXJyb3IKICAqLwotUE1lbUJsb2NrIG1tQWxsb2NNZW0oIG1lbUhlYXBfdCAqaGVhcCwgaW50IHNpemUsIGludCBhbGlnbjIsIGludCBzdGFydFNlYXJjaCApOworUE1lbUJsb2NrIG1tQWxsb2NNZW0obWVtSGVhcF90ICogaGVhcCwgaW50IHNpemUsIGludCBhbGlnbjIsIGludCBzdGFydFNlYXJjaCk7CiAKIC8qCiAgKiBSZXR1cm5zIDEgaWYgdGhlIGJsb2NrICdiJyBpcyBwYXJ0IG9mIHRoZSBoZWFwICdoZWFwJwogICovCi1pbnQgbW1CbG9ja0luSGVhcCggUE1lbUJsb2NrIGhlYXAsIFBNZW1CbG9jayBiICk7CitpbnQgbW1CbG9ja0luSGVhcChQTWVtQmxvY2sgaGVhcCwgUE1lbUJsb2NrIGIpOwogCiAvKgogICogRnJlZSBibG9jayBzdGFydHMgYXQgb2Zmc2V0CiAgKiBpbnB1dDogcG9pbnRlciB0byBhIGJsb2NrCiAgKiByZXR1cm46IDAgaWYgT0ssIC0xIGlmIGVycm9yCiAgKi8KLWludCBtbUZyZWVNZW0oIFBNZW1CbG9jayBiICk7CitpbnQgbW1GcmVlTWVtKFBNZW1CbG9jayBiKTsKIAogLyogRm9yIGRlYnVnaW5nIHB1cnBvc2UuICovCi12b2lkIG1tRHVtcE1lbUluZm8oIG1lbUhlYXBfdCAqbW1Jbml0ICk7Cit2b2lkIG1tRHVtcE1lbUluZm8obWVtSGVhcF90ICogbW1Jbml0KTsKIAotI2VuZGlmIC8qIF9fU0lTX0RTX0hfXyAqLworI2VuZGlmCQkJCS8qIF9fU0lTX0RTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9zaXNfbW0uYyBiL2RyaXZlcnMvY2hhci9kcm0vc2lzX21tLmMKaW5kZXggNjYxMGM1NS4uNTBlMzIzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9zaXNfbW0uYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL3Npc19tbS5jCkBAIC0xMCwxMSArMTAsMTEgQEAKICAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAogICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCiAgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICogCisgKgogICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAogICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQogICogU29mdHdhcmUuCi0gKiAKKyAqCiAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgogICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCiAgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKQEAgLTIyLDEwICsyMiwxMCBAQAogICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCiAgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKICAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KLSAqIAorICoKICAqIEF1dGhvcnM6CiAgKiAgICBTdW5nLUNoaW5nIExpbiA8c2NsaW5Ac2lzLmNvbS50dz4KLSAqIAorICoKICAqLwogCiAjaW5jbHVkZSAiZHJtUC5oIgpAQCAtMzcsMjUgKzM3LDIzIEBACiAjZW5kaWYKIAogI2RlZmluZSBNQVhfQ09OVEVYVCAxMDAKLSNkZWZpbmUgVklERU9fVFlQRSAwIAorI2RlZmluZSBWSURFT19UWVBFIDAKICNkZWZpbmUgQUdQX1RZUEUgMQogCiB0eXBlZGVmIHN0cnVjdCB7CiAJaW50IHVzZWQ7CiAJaW50IGNvbnRleHQ7Ci0Jc2V0X3QgKnNldHNbMl07IC8qIDAgZm9yIHZpZGVvLCAxIGZvciBBR1AgKi8KKwlzZXRfdCAqc2V0c1syXTsJCS8qIDAgZm9yIHZpZGVvLCAxIGZvciBBR1AgKi8KIH0gc2lzX2NvbnRleHRfdDsKIAogc3RhdGljIHNpc19jb250ZXh0X3QgZ2xvYmFsX3Bwcml2W01BWF9DT05URVhUXTsKIAotCiBzdGF0aWMgaW50IGFkZF9hbGxvY19zZXQoaW50IGNvbnRleHQsIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgdmFsKQogewogCWludCBpLCByZXR2YWwgPSAwOwotCQorCiAJZm9yIChpID0gMDsgaSA8IE1BWF9DT05URVhUOyBpKyspIHsKLQkJaWYgKGdsb2JhbF9wcHJpdltpXS51c2VkICYmIGdsb2JhbF9wcHJpdltpXS5jb250ZXh0ID09IGNvbnRleHQpCi0JCXsKKwkJaWYgKGdsb2JhbF9wcHJpdltpXS51c2VkICYmIGdsb2JhbF9wcHJpdltpXS5jb250ZXh0ID09IGNvbnRleHQpIHsKIAkJCXJldHZhbCA9IHNldEFkZChnbG9iYWxfcHByaXZbaV0uc2V0c1t0eXBlXSwgdmFsKTsKIAkJCWJyZWFrOwogCQl9CkBAIC02NCwxMiArNjIsMTEgQEAKIH0KIAogc3RhdGljIGludCBkZWxfYWxsb2Nfc2V0KGludCBjb250ZXh0LCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IHZhbCkKLXsgIAorewogCWludCBpLCByZXR2YWwgPSAwOwogCiAJZm9yIChpID0gMDsgaSA8IE1BWF9DT05URVhUOyBpKyspIHsKLQkJaWYgKGdsb2JhbF9wcHJpdltpXS51c2VkICYmIGdsb2JhbF9wcHJpdltpXS5jb250ZXh0ID09IGNvbnRleHQpCi0JCXsKKwkJaWYgKGdsb2JhbF9wcHJpdltpXS51c2VkICYmIGdsb2JhbF9wcHJpdltpXS5jb250ZXh0ID09IGNvbnRleHQpIHsKIAkJCXJldHZhbCA9IHNldERlbChnbG9iYWxfcHByaXZbaV0uc2V0c1t0eXBlXSwgdmFsKTsKIAkJCWJyZWFrOwogCQl9CkBAIC03NywxNSArNzQsMTUgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi0vKiBmYiBtYW5hZ2VtZW50IHZpYSBmYiBkZXZpY2UgKi8gCisvKiBmYiBtYW5hZ2VtZW50IHZpYSBmYiBkZXZpY2UgKi8KICNpZiBkZWZpbmVkKF9fbGludXhfXykgJiYgZGVmaW5lZChDT05GSUdfRkJfU0lTKQogCi1zdGF0aWMgaW50IHNpc19mYl9pbml0KCBEUk1fSU9DVExfQVJHUyApCitzdGF0aWMgaW50IHNpc19mYl9pbml0KERSTV9JT0NUTF9BUkdTKQogewogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNpc19mYl9hbGxvYyggRFJNX0lPQ1RMX0FSR1MgKQorc3RhdGljIGludCBzaXNfZmJfYWxsb2MoRFJNX0lPQ1RMX0FSR1MpCiB7CiAJZHJtX3Npc19tZW1fdCBmYjsKIAlzdHJ1Y3Qgc2lzX21lbXJlcSByZXE7CkBAIC0xMDUsNyArMTAyLDcgQEAKIAkJCXNpc19mcmVlKHJlcS5vZmZzZXQpOwogCQkJcmV0dmFsID0gRFJNX0VSUihFSU5WQUwpOwogCQl9Ci0JfSBlbHNlIHsgIAorCX0gZWxzZSB7CiAJCWZiLm9mZnNldCA9IDA7CiAJCWZiLnNpemUgPSAwOwogCQlmYi5mcmVlID0gMDsKQEAgLTExOCwxOSArMTE1LDE5IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIGludCBzaXNfZmJfZnJlZSggRFJNX0lPQ1RMX0FSR1MgKQorc3RhdGljIGludCBzaXNfZmJfZnJlZShEUk1fSU9DVExfQVJHUykKIHsKIAlkcm1fc2lzX21lbV90IGZiOwogCWludCByZXR2YWwgPSAwOwogCi0JRFJNX0NPUFlfRlJPTV9VU0VSX0lPQ1RMKGZiLCAoZHJtX3Npc19tZW1fdCBfX3VzZXIgKilkYXRhLCBzaXplb2YoZmIpKTsKKwlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwoZmIsIChkcm1fc2lzX21lbV90IF9fdXNlciAqKSBkYXRhLCBzaXplb2YoZmIpKTsKIAogCWlmICghZmIuZnJlZSkKIAkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAogCWlmICghZGVsX2FsbG9jX3NldChmYi5jb250ZXh0LCBWSURFT19UWVBFLCBmYi5mcmVlKSkKIAkJcmV0dmFsID0gRFJNX0VSUihFSU5WQUwpOwotCXNpc19mcmVlKCh1MzIpZmIuZnJlZSk7CisJc2lzX2ZyZWUoKHUzMikgZmIuZnJlZSk7CiAKIAlEUk1fREVCVUcoImZyZWUgZmIsIG9mZnNldCA9ICVsdVxuIiwgZmIuZnJlZSk7CiAKQEAgLTE0OSwxNyArMTQ2LDE3IEBACiAgKiAgICBYIGRyaXZlci9zaXNmYiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIVy0gICBDb21tYW5kLQogICogIGZyYW1lYnVmZmVyIG1lbW9yeSAgICAgICAgICAgRFJJIGhlYXAgICAgICAgICAgIEN1cnNvciAgIHF1ZXVlCiAgKi8KLXN0YXRpYyBpbnQgc2lzX2ZiX2luaXQoIERSTV9JT0NUTF9BUkdTICkKK3N0YXRpYyBpbnQgc2lzX2ZiX2luaXQoRFJNX0lPQ1RMX0FSR1MpCiB7CiAJRFJNX0RFVklDRTsKIAlkcm1fc2lzX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWRybV9zaXNfZmJfdCBmYjsKIAotCURSTV9DT1BZX0ZST01fVVNFUl9JT0NUTChmYiwgKGRybV9zaXNfZmJfdCBfX3VzZXIgKilkYXRhLCBzaXplb2YoZmIpKTsKKwlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwoZmIsIChkcm1fc2lzX2ZiX3QgX191c2VyICopIGRhdGEsIHNpemVvZihmYikpOwogCiAJaWYgKGRldl9wcml2ID09IE5VTEwpIHsKIAkJZGV2LT5kZXZfcHJpdmF0ZSA9IGRybV9jYWxsb2MoMSwgc2l6ZW9mKGRybV9zaXNfcHJpdmF0ZV90KSwKLQkJICAgIERSTV9NRU1fRFJJVkVSKTsKKwkJCQkJICAgICAgRFJNX01FTV9EUklWRVIpOwogCQlkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJCWlmIChkZXZfcHJpdiA9PSBOVUxMKQogCQkJcmV0dXJuIEVOT01FTTsKQEAgLTE3NSw3ICsxNzIsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNpc19mYl9hbGxvYyggRFJNX0lPQ1RMX0FSR1MgKQorc3RhdGljIGludCBzaXNfZmJfYWxsb2MoRFJNX0lPQ1RMX0FSR1MpCiB7CiAJRFJNX0RFVklDRTsKIAlkcm1fc2lzX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwpAQCAtMTg2LDkgKzE4Myw5IEBACiAKIAlpZiAoZGV2X3ByaXYgPT0gTlVMTCB8fCBkZXZfcHJpdi0+RkJIZWFwID09IE5VTEwpCiAJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7Ci0gIAorCiAJRFJNX0NPUFlfRlJPTV9VU0VSX0lPQ1RMKGZiLCBhcmdwLCBzaXplb2YoZmIpKTsKLSAgCisKIAlibG9jayA9IG1tQWxsb2NNZW0oZGV2X3ByaXYtPkZCSGVhcCwgZmIuc2l6ZSwgMCwgMCk7CiAJaWYgKGJsb2NrKSB7CiAJCS8qIFRPRE8gKi8KQEAgLTE5Niw3ICsxOTMsNyBAQAogCQlmYi5mcmVlID0gKHVuc2lnbmVkIGxvbmcpYmxvY2s7CiAJCWlmICghYWRkX2FsbG9jX3NldChmYi5jb250ZXh0LCBWSURFT19UWVBFLCBmYi5mcmVlKSkgewogCQkJRFJNX0RFQlVHKCJhZGRpbmcgdG8gYWxsb2NhdGlvbiBzZXQgZmFpbHNcbiIpOwotCQkJbW1GcmVlTWVtKChQTWVtQmxvY2spZmIuZnJlZSk7CisJCQltbUZyZWVNZW0oKFBNZW1CbG9jaykgZmIuZnJlZSk7CiAJCQlyZXR2YWwgPSBEUk1fRVJSKEVJTlZBTCk7CiAJCX0KIAl9IGVsc2UgewpAQCAtMjEyLDcgKzIwOSw3IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIGludCBzaXNfZmJfZnJlZSggRFJNX0lPQ1RMX0FSR1MgKQorc3RhdGljIGludCBzaXNfZmJfZnJlZShEUk1fSU9DVExfQVJHUykKIHsKIAlEUk1fREVWSUNFOwogCWRybV9zaXNfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CkBAIC0yMjEsMTQgKzIxOCwxNCBAQAogCWlmIChkZXZfcHJpdiA9PSBOVUxMIHx8IGRldl9wcml2LT5GQkhlYXAgPT0gTlVMTCkKIAkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAotCURSTV9DT1BZX0ZST01fVVNFUl9JT0NUTChmYiwgKGRybV9zaXNfbWVtX3QgX191c2VyICopZGF0YSwgc2l6ZW9mKGZiKSk7CisJRFJNX0NPUFlfRlJPTV9VU0VSX0lPQ1RMKGZiLCAoZHJtX3Npc19tZW1fdCBfX3VzZXIgKikgZGF0YSwgc2l6ZW9mKGZiKSk7CiAKLQlpZiAoIW1tQmxvY2tJbkhlYXAoZGV2X3ByaXYtPkZCSGVhcCwgKFBNZW1CbG9jaylmYi5mcmVlKSkKKwlpZiAoIW1tQmxvY2tJbkhlYXAoZGV2X3ByaXYtPkZCSGVhcCwgKFBNZW1CbG9jaykgZmIuZnJlZSkpCiAJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiAKIAlpZiAoIWRlbF9hbGxvY19zZXQoZmIuY29udGV4dCwgVklERU9fVFlQRSwgZmIuZnJlZSkpCiAJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7Ci0JbW1GcmVlTWVtKChQTWVtQmxvY2spZmIuZnJlZSk7CisJbW1GcmVlTWVtKChQTWVtQmxvY2spIGZiLmZyZWUpOwogCiAJRFJNX0RFQlVHKCJmcmVlIGZiLCBmcmVlID0gMHglbHhcbiIsIGZiLmZyZWUpOwogCkBAIC0yMzcsOSArMjM0LDkgQEAKIAogI2VuZGlmCiAKLS8qIGFncCBtZW1vcnkgbWFuYWdlbWVudCAqLyAKKy8qIGFncCBtZW1vcnkgbWFuYWdlbWVudCAqLwogCi1zdGF0aWMgaW50IHNpc19pb2N0bF9hZ3BfaW5pdCggRFJNX0lPQ1RMX0FSR1MgKQorc3RhdGljIGludCBzaXNfaW9jdGxfYWdwX2luaXQoRFJNX0lPQ1RMX0FSR1MpCiB7CiAJRFJNX0RFVklDRTsKIAlkcm1fc2lzX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwpAQCAtMjQ3LDcgKzI0NCw3IEBACiAKIAlpZiAoZGV2X3ByaXYgPT0gTlVMTCkgewogCQlkZXYtPmRldl9wcml2YXRlID0gZHJtX2NhbGxvYygxLCBzaXplb2YoZHJtX3Npc19wcml2YXRlX3QpLAotCQkgICAgRFJNX01FTV9EUklWRVIpOworCQkJCQkgICAgICBEUk1fTUVNX0RSSVZFUik7CiAJCWRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAkJaWYgKGRldl9wcml2ID09IE5VTEwpCiAJCQlyZXR1cm4gRU5PTUVNOwpAQCAtMjU2LDE2ICsyNTMsMTcgQEAKIAlpZiAoZGV2X3ByaXYtPkFHUEhlYXAgIT0gTlVMTCkKIAkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAotCURSTV9DT1BZX0ZST01fVVNFUl9JT0NUTChhZ3AsIChkcm1fc2lzX2FncF90IF9fdXNlciAqKWRhdGEsIHNpemVvZihhZ3ApKTsKKwlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwoYWdwLCAoZHJtX3Npc19hZ3BfdCBfX3VzZXIgKikgZGF0YSwKKwkJCQkgc2l6ZW9mKGFncCkpOwogCiAJZGV2X3ByaXYtPkFHUEhlYXAgPSBtbUluaXQoYWdwLm9mZnNldCwgYWdwLnNpemUpOwogCiAJRFJNX0RFQlVHKCJvZmZzZXQgPSAldSwgc2l6ZSA9ICV1IiwgYWdwLm9mZnNldCwgYWdwLnNpemUpOwotICAKKwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNpc19pb2N0bF9hZ3BfYWxsb2MoIERSTV9JT0NUTF9BUkdTICkKK3N0YXRpYyBpbnQgc2lzX2lvY3RsX2FncF9hbGxvYyhEUk1fSU9DVExfQVJHUykKIHsKIAlEUk1fREVWSUNFOwogCWRybV9zaXNfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CkBAIC0yNzMsMTIgKzI3MSwxMiBAQAogCWRybV9zaXNfbWVtX3QgYWdwOwogCVBNZW1CbG9jayBibG9jazsKIAlpbnQgcmV0dmFsID0gMDsKLSAgIAorCiAJaWYgKGRldl9wcml2ID09IE5VTEwgfHwgZGV2X3ByaXYtPkFHUEhlYXAgPT0gTlVMTCkKIAkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKLSAgCisKIAlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwoYWdwLCBhcmdwLCBzaXplb2YoYWdwKSk7Ci0gIAorCiAJYmxvY2sgPSBtbUFsbG9jTWVtKGRldl9wcml2LT5BR1BIZWFwLCBhZ3Auc2l6ZSwgMCwgMCk7CiAJaWYgKGJsb2NrKSB7CiAJCS8qIFRPRE8gKi8KQEAgLTI4NiwxMCArMjg0LDEwIEBACiAJCWFncC5mcmVlID0gKHVuc2lnbmVkIGxvbmcpYmxvY2s7CiAJCWlmICghYWRkX2FsbG9jX3NldChhZ3AuY29udGV4dCwgQUdQX1RZUEUsIGFncC5mcmVlKSkgewogCQkJRFJNX0RFQlVHKCJhZGRpbmcgdG8gYWxsb2NhdGlvbiBzZXQgZmFpbHNcbiIpOwotCQkJbW1GcmVlTWVtKChQTWVtQmxvY2spYWdwLmZyZWUpOworCQkJbW1GcmVlTWVtKChQTWVtQmxvY2spIGFncC5mcmVlKTsKIAkJCXJldHZhbCA9IC0xOwogCQl9Ci0JfSBlbHNlIHsgIAorCX0gZWxzZSB7CiAJCWFncC5vZmZzZXQgPSAwOwogCQlhZ3Auc2l6ZSA9IDA7CiAJCWFncC5mcmVlID0gMDsKQEAgLTMwMiw3ICszMDAsNyBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyBpbnQgc2lzX2lvY3RsX2FncF9mcmVlKCBEUk1fSU9DVExfQVJHUyApCitzdGF0aWMgaW50IHNpc19pb2N0bF9hZ3BfZnJlZShEUk1fSU9DVExfQVJHUykKIHsKIAlEUk1fREVWSUNFOwogCWRybV9zaXNfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CkBAIC0zMTEsMTIgKzMwOSwxMyBAQAogCWlmIChkZXZfcHJpdiA9PSBOVUxMIHx8IGRldl9wcml2LT5BR1BIZWFwID09IE5VTEwpCiAJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiAKLQlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwoYWdwLCAoZHJtX3Npc19tZW1fdCBfX3VzZXIgKilkYXRhLCBzaXplb2YoYWdwKSk7CisJRFJNX0NPUFlfRlJPTV9VU0VSX0lPQ1RMKGFncCwgKGRybV9zaXNfbWVtX3QgX191c2VyICopIGRhdGEsCisJCQkJIHNpemVvZihhZ3ApKTsKIAotCWlmICghbW1CbG9ja0luSGVhcChkZXZfcHJpdi0+QUdQSGVhcCwgKFBNZW1CbG9jaylhZ3AuZnJlZSkpCisJaWYgKCFtbUJsb2NrSW5IZWFwKGRldl9wcml2LT5BR1BIZWFwLCAoUE1lbUJsb2NrKSBhZ3AuZnJlZSkpCiAJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiAKLQltbUZyZWVNZW0oKFBNZW1CbG9jaylhZ3AuZnJlZSk7CisJbW1GcmVlTWVtKChQTWVtQmxvY2spIGFncC5mcmVlKTsKIAlpZiAoIWRlbF9hbGxvY19zZXQoYWdwLmNvbnRleHQsIEFHUF9UWVBFLCBhZ3AuZnJlZSkpCiAJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiAKQEAgLTMyOSwzMSArMzI4LDMwIEBACiB7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTUFYX0NPTlRFWFQgOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0NPTlRFWFQ7IGkrKykgewogCQlpZiAoZ2xvYmFsX3Bwcml2W2ldLnVzZWQgJiYKIAkJICAgIChnbG9iYWxfcHByaXZbaV0uY29udGV4dCA9PSBjb250ZXh0KSkKIAkJCWJyZWFrOwogCX0KIAogCWlmIChpID49IE1BWF9DT05URVhUKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBNQVhfQ09OVEVYVCA7IGkrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgTUFYX0NPTlRFWFQ7IGkrKykgewogCQkJaWYgKCFnbG9iYWxfcHByaXZbaV0udXNlZCkgewogCQkJCWdsb2JhbF9wcHJpdltpXS5jb250ZXh0ID0gY29udGV4dDsKIAkJCQlnbG9iYWxfcHByaXZbaV0udXNlZCA9IDE7CiAJCQkJZ2xvYmFsX3Bwcml2W2ldLnNldHNbMF0gPSBzZXRJbml0KCk7CiAJCQkJZ2xvYmFsX3Bwcml2W2ldLnNldHNbMV0gPSBzZXRJbml0KCk7CiAJCQkJRFJNX0RFQlVHKCJpbml0IGFsbG9jYXRpb24gc2V0LCBzb2NrZXQ9JWQsICIKLQkJCQkgICAgImNvbnRleHQgPSAlZFxuIiwgaSwgY29udGV4dCk7CisJCQkJCSAgImNvbnRleHQgPSAlZFxuIiwgaSwgY29udGV4dCk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KIAkJaWYgKChpID49IE1BWF9DT05URVhUKSB8fCAoZ2xvYmFsX3Bwcml2W2ldLnNldHNbMF0gPT0gTlVMTCkgfHwKLQkJICAgIChnbG9iYWxfcHByaXZbaV0uc2V0c1sxXSA9PSBOVUxMKSkKLQkJeworCQkgICAgKGdsb2JhbF9wcHJpdltpXS5zZXRzWzFdID09IE5VTEwpKSB7CiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KLQkKKwogCXJldHVybiAxOwogfQogCkBAIC0zNjEsNyArMzU5LDcgQEAKIHsKIAlpbnQgaTsKIAotCWZvciAoaT0wOyBpPE1BWF9DT05URVhUOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0NPTlRFWFQ7IGkrKykgewogCQlpZiAoZ2xvYmFsX3Bwcml2W2ldLnVzZWQgJiYKIAkJICAgIChnbG9iYWxfcHByaXZbaV0uY29udGV4dCA9PSBjb250ZXh0KSkKIAkJCWJyZWFrOwpAQCAtMzgyLDcgKzM4MCw3IEBACiAjaWYgZGVmaW5lZChfX2xpbnV4X18pICYmIGRlZmluZWQoQ09ORklHX0ZCX1NJUykKIAkJCXNpc19mcmVlKGl0ZW0pOwogI2Vsc2UKLQkJCW1tRnJlZU1lbSgoUE1lbUJsb2NrKWl0ZW0pOworCQkJbW1GcmVlTWVtKChQTWVtQmxvY2spIGl0ZW0pOwogI2VuZGlmCiAJCQlyZXR2YWwgPSBzZXROZXh0KHNldCwgJml0ZW0pOwogCQl9CkBAIC0zOTMsMjUgKzM5MSwyOSBAQAogCQlyZXR2YWwgPSBzZXRGaXJzdChzZXQsICZpdGVtKTsKIAkJd2hpbGUgKHJldHZhbCkgewogCQkJRFJNX0RFQlVHKCJmcmVlIGFncCBtZW1vcnkgMHgleFxuIiwgaXRlbSk7Ci0JCQltbUZyZWVNZW0oKFBNZW1CbG9jaylpdGVtKTsKKwkJCW1tRnJlZU1lbSgoUE1lbUJsb2NrKSBpdGVtKTsKIAkJCXJldHZhbCA9IHNldE5leHQoc2V0LCAmaXRlbSk7CiAJCX0KIAkJc2V0RGVzdHJveShzZXQpOwogCi0JCWdsb2JhbF9wcHJpdltpXS51c2VkID0gMDsJICAKLSAgICAgICAgfQotCQorCQlnbG9iYWxfcHByaXZbaV0udXNlZCA9IDA7CisJfQorCiAJcmV0dXJuIDE7CiB9CiAKIGRybV9pb2N0bF9kZXNjX3Qgc2lzX2lvY3Rsc1tdID0gewotCVtEUk1fSU9DVExfTlIoRFJNX1NJU19GQl9BTExPQyldICA9IHsgc2lzX2ZiX2FsbG9jLCAgICAgICAgMSwgMCB9LAotCVtEUk1fSU9DVExfTlIoRFJNX1NJU19GQl9GUkVFKV0gICA9IHsgc2lzX2ZiX2ZyZWUsICAgICAgICAgMSwgMCB9LAotCVtEUk1fSU9DVExfTlIoRFJNX1NJU19BR1BfSU5JVCldICA9IHsgc2lzX2lvY3RsX2FncF9pbml0LCAgMSwgMSB9LAotCVtEUk1fSU9DVExfTlIoRFJNX1NJU19BR1BfQUxMT0MpXSA9IHsgc2lzX2lvY3RsX2FncF9hbGxvYywgMSwgMCB9LAotCVtEUk1fSU9DVExfTlIoRFJNX1NJU19BR1BfRlJFRSldICA9IHsgc2lzX2lvY3RsX2FncF9mcmVlLCAgMSwgMCB9LAotCVtEUk1fSU9DVExfTlIoRFJNX1NJU19GQl9JTklUKV0gICA9IHsgc2lzX2ZiX2luaXQsICAgICAgICAgMSwgMSB9CisJW0RSTV9JT0NUTF9OUihEUk1fU0lTX0ZCX0FMTE9DKV0gPSB7c2lzX2ZiX2FsbG9jLCAxLCAwfQorCSwKKwlbRFJNX0lPQ1RMX05SKERSTV9TSVNfRkJfRlJFRSldID0ge3Npc19mYl9mcmVlLCAxLCAwfQorCSwKKwlbRFJNX0lPQ1RMX05SKERSTV9TSVNfQUdQX0lOSVQpXSA9IHtzaXNfaW9jdGxfYWdwX2luaXQsIDEsIDF9CisJLAorCVtEUk1fSU9DVExfTlIoRFJNX1NJU19BR1BfQUxMT0MpXSA9IHtzaXNfaW9jdGxfYWdwX2FsbG9jLCAxLCAwfQorCSwKKwlbRFJNX0lPQ1RMX05SKERSTV9TSVNfQUdQX0ZSRUUpXSA9IHtzaXNfaW9jdGxfYWdwX2ZyZWUsIDEsIDB9CisJLAorCVtEUk1fSU9DVExfTlIoRFJNX1NJU19GQl9JTklUKV0gPSB7c2lzX2ZiX2luaXQsIDEsIDF9CiB9OwogCiBpbnQgc2lzX21heF9pb2N0bCA9IERSTV9BUlJBWV9TSVpFKHNpc19pb2N0bHMpOwotCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3RkZnhfZHJ2LmMgYi9kcml2ZXJzL2NoYXIvZHJtL3RkZnhfZHJ2LmMKaW5kZXggMGU3OTQzZS4uYzI3NWNiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS90ZGZ4X2Rydi5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vdGRmeF9kcnYuYwpAQCAtMzYsMzAgKzM2LDI4IEBACiAKICNpbmNsdWRlICJkcm1fcGNpaWRzLmgiCiAKLXN0YXRpYyBpbnQgcG9zdGluaXQoIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MgKQorc3RhdGljIGludCBwb3N0aW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewotCURSTV9JTkZPKCAiSW5pdGlhbGl6ZWQgJXMgJWQuJWQuJWQgJXMgb24gbWlub3IgJWQ6ICVzXG4iLAotCQlEUklWRVJfTkFNRSwKLQkJRFJJVkVSX01BSk9SLAotCQlEUklWRVJfTUlOT1IsCi0JCURSSVZFUl9QQVRDSExFVkVMLAotCQlEUklWRVJfREFURSwKLQkJZGV2LT5wcmltYXJ5Lm1pbm9yLAotCQlwY2lfcHJldHR5X25hbWUoZGV2LT5wZGV2KQotCQkpOworCURSTV9JTkZPKCJJbml0aWFsaXplZCAlcyAlZC4lZC4lZCAlcyBvbiBtaW5vciAlZDogJXNcbiIsCisJCSBEUklWRVJfTkFNRSwKKwkJIERSSVZFUl9NQUpPUiwKKwkJIERSSVZFUl9NSU5PUiwKKwkJIERSSVZFUl9QQVRDSExFVkVMLAorCQkgRFJJVkVSX0RBVEUsIGRldi0+cHJpbWFyeS5taW5vciwgcGNpX3ByZXR0eV9uYW1lKGRldi0+cGRldikKKwkgICAgKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2ZXJzaW9uKCBkcm1fdmVyc2lvbl90ICp2ZXJzaW9uICkKK3N0YXRpYyBpbnQgdmVyc2lvbihkcm1fdmVyc2lvbl90ICogdmVyc2lvbikKIHsKIAlpbnQgbGVuOwogCiAJdmVyc2lvbi0+dmVyc2lvbl9tYWpvciA9IERSSVZFUl9NQUpPUjsKIAl2ZXJzaW9uLT52ZXJzaW9uX21pbm9yID0gRFJJVkVSX01JTk9SOwogCXZlcnNpb24tPnZlcnNpb25fcGF0Y2hsZXZlbCA9IERSSVZFUl9QQVRDSExFVkVMOwotCURSTV9DT1BZKCB2ZXJzaW9uLT5uYW1lLCBEUklWRVJfTkFNRSApOwotCURSTV9DT1BZKCB2ZXJzaW9uLT5kYXRlLCBEUklWRVJfREFURSApOwotCURSTV9DT1BZKCB2ZXJzaW9uLT5kZXNjLCBEUklWRVJfREVTQyApOworCURSTV9DT1BZKHZlcnNpb24tPm5hbWUsIERSSVZFUl9OQU1FKTsKKwlEUk1fQ09QWSh2ZXJzaW9uLT5kYXRlLCBEUklWRVJfREFURSk7CisJRFJNX0NPUFkodmVyc2lvbi0+ZGVzYywgRFJJVkVSX0RFU0MpOwogCXJldHVybiAwOwogfQogCkBAIC03NSwxOCArNzMsMTggQEAKIAkucG9zdGluaXQgPSBwb3N0aW5pdCwKIAkudmVyc2lvbiA9IHZlcnNpb24sCiAJLmZvcHMgPSB7Ci0JCS5vd25lciA9IFRISVNfTU9EVUxFLAotCQkub3BlbiA9IGRybV9vcGVuLAotCQkucmVsZWFzZSA9IGRybV9yZWxlYXNlLAotCQkuaW9jdGwgPSBkcm1faW9jdGwsCi0JCS5tbWFwID0gZHJtX21tYXAsCi0JCS5wb2xsID0gZHJtX3BvbGwsCi0JCS5mYXN5bmMgPSBkcm1fZmFzeW5jLAotCX0sCisJCSAub3duZXIgPSBUSElTX01PRFVMRSwKKwkJIC5vcGVuID0gZHJtX29wZW4sCisJCSAucmVsZWFzZSA9IGRybV9yZWxlYXNlLAorCQkgLmlvY3RsID0gZHJtX2lvY3RsLAorCQkgLm1tYXAgPSBkcm1fbW1hcCwKKwkJIC5wb2xsID0gZHJtX3BvbGwsCisJCSAuZmFzeW5jID0gZHJtX2Zhc3luYywKKwkJIH0sCiAJLnBjaV9kcml2ZXIgPSB7Ci0JCS5uYW1lICAgICAgICAgID0gRFJJVkVSX05BTUUsCi0JCS5pZF90YWJsZSAgICAgID0gcGNpaWRsaXN0LAotCX0KKwkJICAgICAgIC5uYW1lID0gRFJJVkVSX05BTUUsCisJCSAgICAgICAuaWRfdGFibGUgPSBwY2lpZGxpc3QsCisJCSAgICAgICB9CiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCB0ZGZ4X2luaXQodm9pZCkKQEAgLTEwMiw2ICsxMDAsNiBAQAogbW9kdWxlX2luaXQodGRmeF9pbml0KTsKIG1vZHVsZV9leGl0KHRkZnhfZXhpdCk7CiAKLU1PRFVMRV9BVVRIT1IoIERSSVZFUl9BVVRIT1IgKTsKLU1PRFVMRV9ERVNDUklQVElPTiggRFJJVkVSX0RFU0MgKTsKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCBhbmQgYWRkaXRpb25hbCByaWdodHMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vdmlhXzNkX3JlZy5oIGIvZHJpdmVycy9jaGFyL2RybS92aWFfM2RfcmVnLmgKaW5kZXggY2Y2MWJiNS4uNDYyMzc1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS92aWFfM2RfcmVnLmgKKysrIGIvZHJpdmVycy9jaGFyL2RybS92aWFfM2RfcmVnLmgKQEAgLTE2NDMsNyArMTY0Myw2IEBACiAjZGVmaW5lIEhDX0hBR1BCcElEX1NUT1AgICAgICAgIDB4MDAwMDAwMDIKICNkZWZpbmUgSENfSEFHUEJwSF9NQVNLICAgICAgICAgMHgwMGZmZmZmZgogCi0KICNkZWZpbmUgVklBX1ZJREVPX0hFQURFUjUgICAgICAgMHhGRTA0MDAwMAogI2RlZmluZSBWSUFfVklERU9fSEVBREVSNiAgICAgICAweEZFMDUwMDAwCiAjZGVmaW5lIFZJQV9WSURFT19IRUFERVI3ICAgICAgIDB4RkUwNjAwMDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vdmlhX2RtYS5jIGIvZHJpdmVycy9jaGFyL2RybS92aWFfZG1hLmMKaW5kZXggNGY2MGY3Zi4uZDRiMTc2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS92aWFfZG1hLmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS92aWFfZG1hLmMKQEAgLTEsMTEgKzEsMTEgQEAKIC8qIHZpYV9kbWEuYyAtLSBETUEgc3VwcG9ydCBmb3IgdGhlIFZJQSBVbmljaHJvbWUvUHJvCi0gKiAKKyAqCiAgKiBDb3B5cmlnaHQgMjAwMyBUdW5nc3RlbiBHcmFwaGljcywgSW5jLiwgQ2VkYXIgUGFyaywgVGV4YXMuCiAgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIENvcHlyaWdodCAyMDA0IERpZ2VvLCBJbmMuLCBQYWxvIEFsdG8sIENBLCBVLlMuQS4KICAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiAKKyAqCiAgKiBDb3B5cmlnaHQgMjAwNCBUaGUgVW5pY2hyb21lIHByb2plY3QuCiAgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKQEAgLTIzLDE0ICsyMywxNCBAQAogICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKICAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAogICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCi0gKiBUSEUgQ09QWVJJR0hUIEhPTERFUlMsIEFVVEhPUlMgQU5EL09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIAotICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIAotICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSAKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSUywgQVVUSE9SUyBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRQogICogVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KICAqCi0gKiBBdXRob3JzOiAKLSAqICAgIFR1bmdzdGVuIEdyYXBoaWNzLCAKLSAqICAgIEVyZGkgQ2hlbiwgCisgKiBBdXRob3JzOgorICogICAgVHVuZ3N0ZW4gR3JhcGhpY3MsCisgKiAgICBFcmRpIENoZW4sCiAgKiAgICBUaG9tYXMgSGVsbHN0cm9tLgogICovCiAKQEAgLTYxLDM0ICs2MSwzMSBAQAogCWRldl9wcml2LT5kbWFfbG93ICs9ODsJCQkJCVwKIH0KIAotI2RlZmluZSB2aWFfZmx1c2hfd3JpdGVfY29tYmluZSgpIERSTV9NRU1PUllCQVJSSUVSKCkgCisjZGVmaW5lIHZpYV9mbHVzaF93cml0ZV9jb21iaW5lKCkgRFJNX01FTU9SWUJBUlJJRVIoKQogCiAjZGVmaW5lIFZJQV9PVVRfUklOR19RVyh3MSx3MikJCQlcCiAJKnZiKysgPSAodzEpOwkJCQlcCiAJKnZiKysgPSAodzIpOwkJCQlcCi0JZGV2X3ByaXYtPmRtYV9sb3cgKz0gODsgCisJZGV2X3ByaXYtPmRtYV9sb3cgKz0gODsKIAogc3RhdGljIHZvaWQgdmlhX2NtZGJ1Zl9zdGFydChkcm1fdmlhX3ByaXZhdGVfdCAqIGRldl9wcml2KTsKIHN0YXRpYyB2b2lkIHZpYV9jbWRidWZfcGF1c2UoZHJtX3ZpYV9wcml2YXRlX3QgKiBkZXZfcHJpdik7CiBzdGF0aWMgdm9pZCB2aWFfY21kYnVmX3Jlc2V0KGRybV92aWFfcHJpdmF0ZV90ICogZGV2X3ByaXYpOwogc3RhdGljIHZvaWQgdmlhX2NtZGJ1Zl9yZXdpbmQoZHJtX3ZpYV9wcml2YXRlX3QgKiBkZXZfcHJpdik7CiBzdGF0aWMgaW50IHZpYV93YWl0X2lkbGUoZHJtX3ZpYV9wcml2YXRlX3QgKiBkZXZfcHJpdik7Ci1zdGF0aWMgdm9pZCB2aWFfcGFkX2NhY2hlKGRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiwgaW50IHF3b3Jkcyk7Ci0KK3N0YXRpYyB2b2lkIHZpYV9wYWRfY2FjaGUoZHJtX3ZpYV9wcml2YXRlX3QgKiBkZXZfcHJpdiwgaW50IHF3b3Jkcyk7CiAKIC8qCiAgKiBGcmVlIHNwYWNlIGluIGNvbW1hbmQgYnVmZmVyLgogICovCiAKLXN0YXRpYyB1aW50MzJfdAotdmlhX2NtZGJ1Zl9zcGFjZShkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYpCitzdGF0aWMgdWludDMyX3QgdmlhX2NtZGJ1Zl9zcGFjZShkcm1fdmlhX3ByaXZhdGVfdCAqIGRldl9wcml2KQogewotCXVpbnQzMl90IGFncF9iYXNlID0gZGV2X3ByaXYtPmRtYV9vZmZzZXQgKyAKLQkJKHVpbnQzMl90KSBkZXZfcHJpdi0+YWdwQWRkcjsKKwl1aW50MzJfdCBhZ3BfYmFzZSA9IGRldl9wcml2LT5kbWFfb2Zmc2V0ICsgKHVpbnQzMl90KSBkZXZfcHJpdi0+YWdwQWRkcjsKIAl1aW50MzJfdCBod19hZGRyID0gKihkZXZfcHJpdi0+aHdfYWRkcl9wdHIpIC0gYWdwX2Jhc2U7Ci0JCi0JcmV0dXJuICgoaHdfYWRkciA8PSBkZXZfcHJpdi0+ZG1hX2xvdykgPyAKLQkJKGRldl9wcml2LT5kbWFfaGlnaCArIGh3X2FkZHIgLSBkZXZfcHJpdi0+ZG1hX2xvdykgOiAKKworCXJldHVybiAoKGh3X2FkZHIgPD0gZGV2X3ByaXYtPmRtYV9sb3cpID8KKwkJKGRldl9wcml2LT5kbWFfaGlnaCArIGh3X2FkZHIgLSBkZXZfcHJpdi0+ZG1hX2xvdykgOgogCQkoaHdfYWRkciAtIGRldl9wcml2LT5kbWFfbG93KSk7CiB9CiAKQEAgLTk2LDE1ICs5MywxMyBAQAogICogSG93IG11Y2ggZG9lcyB0aGUgY29tbWFuZCByZWd1bGF0b3IgbGFnIGJlaGluZD8KICAqLwogCi1zdGF0aWMgdWludDMyX3QKLXZpYV9jbWRidWZfbGFnKGRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdikKK3N0YXRpYyB1aW50MzJfdCB2aWFfY21kYnVmX2xhZyhkcm1fdmlhX3ByaXZhdGVfdCAqIGRldl9wcml2KQogewotCXVpbnQzMl90IGFncF9iYXNlID0gZGV2X3ByaXYtPmRtYV9vZmZzZXQgKyAKLQkJKHVpbnQzMl90KSBkZXZfcHJpdi0+YWdwQWRkcjsKKwl1aW50MzJfdCBhZ3BfYmFzZSA9IGRldl9wcml2LT5kbWFfb2Zmc2V0ICsgKHVpbnQzMl90KSBkZXZfcHJpdi0+YWdwQWRkcjsKIAl1aW50MzJfdCBod19hZGRyID0gKihkZXZfcHJpdi0+aHdfYWRkcl9wdHIpIC0gYWdwX2Jhc2U7Ci0JCi0JcmV0dXJuICgoaHdfYWRkciA8PSBkZXZfcHJpdi0+ZG1hX2xvdykgPyAKLQkJKGRldl9wcml2LT5kbWFfbG93IC0gaHdfYWRkcikgOiAKKworCXJldHVybiAoKGh3X2FkZHIgPD0gZGV2X3ByaXYtPmRtYV9sb3cpID8KKwkJKGRldl9wcml2LT5kbWFfbG93IC0gaHdfYWRkcikgOgogCQkoZGV2X3ByaXYtPmRtYV93cmFwICsgZGV2X3ByaXYtPmRtYV9sb3cgLSBod19hZGRyKSk7CiB9CiAKQEAgLTEyMSwyMCArMTE2LDIwIEBACiAJdWludDMyX3QgY291bnQ7CiAJaHdfYWRkcl9wdHIgPSBkZXZfcHJpdi0+aHdfYWRkcl9wdHI7CiAJY3VyX2FkZHIgPSBkZXZfcHJpdi0+ZG1hX2xvdzsKLQluZXh0X2FkZHIgPSBjdXJfYWRkciArIHNpemUgKyA1MTIqMTAyNDsKKwluZXh0X2FkZHIgPSBjdXJfYWRkciArIHNpemUgKyA1MTIgKiAxMDI0OwogCWNvdW50ID0gMTAwMDAwMDsKIAlkbyB7Ci0JICAgICAgICBod19hZGRyID0gKmh3X2FkZHJfcHRyIC0gYWdwX2Jhc2U7CisJCWh3X2FkZHIgPSAqaHdfYWRkcl9wdHIgLSBhZ3BfYmFzZTsKIAkJaWYgKGNvdW50LS0gPT0gMCkgewotCQkJRFJNX0VSUk9SKCJ2aWFfY21kYnVmX3dhaXQgdGltZWQgb3V0IGh3ICV4IGN1cl9hZGRyICV4IG5leHRfYWRkciAleFxuIiwKLQkJCQkgIGh3X2FkZHIsIGN1cl9hZGRyLCBuZXh0X2FkZHIpOworCQkJRFJNX0VSUk9SCisJCQkgICAgKCJ2aWFfY21kYnVmX3dhaXQgdGltZWQgb3V0IGh3ICV4IGN1cl9hZGRyICV4IG5leHRfYWRkciAleFxuIiwKKwkJCSAgICAgaHdfYWRkciwgY3VyX2FkZHIsIG5leHRfYWRkcik7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAl9IHdoaWxlICgoY3VyX2FkZHIgPCBod19hZGRyKSAmJiAobmV4dF9hZGRyID49IGh3X2FkZHIpKTsKIAlyZXR1cm4gMDsKIH0KIAotCiAvKgogICogQ2hlY2tzIHdoZXRoZXIgYnVmZmVyIGhlYWQgaGFzIHJlYWNoIHRoZSBlbmQuIFJld2luZCB0aGUgcmluZyBidWZmZXIKICAqIHdoZW4gbmVjZXNzYXJ5LgpAQCAtMTQ1LDcgKzE0MCw4IEBACiBzdGF0aWMgaW5saW5lIHVpbnQzMl90ICp2aWFfY2hlY2tfZG1hKGRybV92aWFfcHJpdmF0ZV90ICogZGV2X3ByaXYsCiAJCQkJICAgICAgdW5zaWduZWQgaW50IHNpemUpCiB7Ci0JaWYgKChkZXZfcHJpdi0+ZG1hX2xvdyArIHNpemUgKyA0KkNNREJVRl9BTElHTk1FTlRfU0laRSkgPiBkZXZfcHJpdi0+ZG1hX2hpZ2gpIHsKKwlpZiAoKGRldl9wcml2LT5kbWFfbG93ICsgc2l6ZSArIDQgKiBDTURCVUZfQUxJR05NRU5UX1NJWkUpID4KKwkgICAgZGV2X3ByaXYtPmRtYV9oaWdoKSB7CiAJCXZpYV9jbWRidWZfcmV3aW5kKGRldl9wcml2KTsKIAl9CiAJaWYgKHZpYV9jbWRidWZfd2FpdChkZXZfcHJpdiwgc2l6ZSkgIT0gMCkgewpAQCAtMTU5LDcgKzE1NSw3IEBACiB7CiAJaWYgKGRldi0+ZGV2X3ByaXZhdGUpIHsKIAkJZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2ID0KLQkJCShkcm1fdmlhX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOworCQkgICAgKGRybV92aWFfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CiAKIAkJaWYgKGRldl9wcml2LT5yaW5nLnZpcnR1YWxfc3RhcnQpIHsKIAkJCXZpYV9jbWRidWZfcmVzZXQoZGV2X3ByaXYpOwpAQCAtMTg5LDcgKzE4NSw3IEBACiAJfQogCiAJaWYgKCFkZXYtPmFncCB8fCAhZGV2LT5hZ3AtPmJhc2UpIHsKLQkJRFJNX0VSUk9SKCIlcyBjYWxsZWQgd2l0aCBubyBhZ3AgbWVtb3J5IGF2YWlsYWJsZVxuIiwgCisJCURSTV9FUlJPUigiJXMgY2FsbGVkIHdpdGggbm8gYWdwIG1lbW9yeSBhdmFpbGFibGVcbiIsCiAJCQkgIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybiBEUk1fRVJSKEVGQVVMVCk7CiAJfQpAQCAtMjQ3LDEwICsyNDMsMTAgQEAKIAkJZWxzZQogCQkJcmV0Y29kZSA9IHZpYV9kbWFfY2xlYW51cChkZXYpOwogCQlicmVhazsKLSAgICAgICAgY2FzZSBWSUFfRE1BX0lOSVRJQUxJWkVEOgotCQlyZXRjb2RlID0gKGRldl9wcml2LT5yaW5nLnZpcnR1YWxfc3RhcnQgIT0gTlVMTCkgPyAKLQkJCTA6IERSTV9FUlIoIEVGQVVMVCApOwotCSAgICAgICAgYnJlYWs7CisJY2FzZSBWSUFfRE1BX0lOSVRJQUxJWkVEOgorCQlyZXRjb2RlID0gKGRldl9wcml2LT5yaW5nLnZpcnR1YWxfc3RhcnQgIT0gTlVMTCkgPworCQkgICAgMCA6IERSTV9FUlIoRUZBVUxUKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0Y29kZSA9IERSTV9FUlIoRUlOVkFMKTsKIAkJYnJlYWs7CkBAIC0yNTksOCArMjU1LDYgQEAKIAlyZXR1cm4gcmV0Y29kZTsKIH0KIAotCi0KIHN0YXRpYyBpbnQgdmlhX2Rpc3BhdGNoX2NtZGJ1ZmZlcihkcm1fZGV2aWNlX3QgKiBkZXYsIGRybV92aWFfY21kYnVmZmVyX3QgKiBjbWQpCiB7CiAJZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2OwpAQCAtMjc3LDggKzI3MSw3IEBACiAKIAlpZiAoY21kLT5zaXplID4gVklBX1BDSV9CVUZfU0laRSkgewogCQlyZXR1cm4gRFJNX0VSUihFTk9NRU0pOwotCX0gCi0KKwl9CiAKIAlpZiAoRFJNX0NPUFlfRlJPTV9VU0VSKGRldl9wcml2LT5wY2lfYnVmLCBjbWQtPmJ1ZiwgY21kLT5zaXplKSkKIAkJcmV0dXJuIERSTV9FUlIoRUZBVUxUKTsKQEAgLTI4OSwxOSArMjgyLDE5IEBACiAJICogY29weSBpdCB0byBBR1AgbWVtb3J5IHdoZW4gcmVhZHkuCiAJICovCiAKLQkJCi0JaWYgKChyZXQgPSB2aWFfdmVyaWZ5X2NvbW1hbmRfc3RyZWFtKCh1aW50MzJfdCAqKWRldl9wcml2LT5wY2lfYnVmLCBjbWQtPnNpemUsIGRldiwgMSkpKSB7CisJaWYgKChyZXQgPQorCSAgICAgdmlhX3ZlcmlmeV9jb21tYW5kX3N0cmVhbSgodWludDMyX3QgKikgZGV2X3ByaXYtPnBjaV9idWYsCisJCQkJICAgICAgIGNtZC0+c2l6ZSwgZGV2LCAxKSkpIHsKIAkJcmV0dXJuIHJldDsKIAl9Ci0gICAgICAgCQotCQorCiAJdmIgPSB2aWFfY2hlY2tfZG1hKGRldl9wcml2LCAoY21kLT5zaXplIDwgMHgxMDApID8gMHgxMDIgOiBjbWQtPnNpemUpOwogCWlmICh2YiA9PSBOVUxMKSB7CiAJCXJldHVybiBEUk1fRVJSKEVBR0FJTik7CiAJfQogCiAJbWVtY3B5KHZiLCBkZXZfcHJpdi0+cGNpX2J1ZiwgY21kLT5zaXplKTsKLQkKKwogCWRldl9wcml2LT5kbWFfbG93ICs9IGNtZC0+c2l6ZTsKIAogCS8qCkBAIC0zMTAsNyArMzAzLDcgQEAKIAkgKi8KIAogCWlmIChjbWQtPnNpemUgPCAweDEwMCkKLQkgIHZpYV9wYWRfY2FjaGUoZGV2X3ByaXYsKDB4MTAwIC0gY21kLT5zaXplKSA+PiAzKTsKKwkJdmlhX3BhZF9jYWNoZShkZXZfcHJpdiwgKDB4MTAwIC0gY21kLT5zaXplKSA+PiAzKTsKIAl2aWFfY21kYnVmX3BhdXNlKGRldl9wcml2KTsKIAogCXJldHVybiAwOwpAQCAtMzMwLDcgKzMyMyw3IEBACiB7CiAJRFJNX0RFVklDRTsKIAotCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTiggZGV2LCBmaWxwICk7CisJTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlscCk7CiAKIAlyZXR1cm4gdmlhX2RyaXZlcl9kbWFfcXVpZXNjZW50KGRldik7CiB9CkBAIC0zNDEsNyArMzM0LDcgQEAKIAlkcm1fdmlhX2NtZGJ1ZmZlcl90IGNtZGJ1ZjsKIAlpbnQgcmV0OwogCi0JTE9DS19URVNUX1dJVEhfUkVUVVJOKCBkZXYsIGZpbHAgKTsKKwlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxwKTsKIAogCURSTV9DT1BZX0ZST01fVVNFUl9JT0NUTChjbWRidWYsIChkcm1fdmlhX2NtZGJ1ZmZlcl90IF9fdXNlciAqKSBkYXRhLAogCQkJCSBzaXplb2YoY21kYnVmKSk7CkBAIC0zNTYsOCArMzQ5LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotZXh0ZXJuIGludCAKLXZpYV9wYXJzZV9jb21tYW5kX3N0cmVhbShkcm1fZGV2aWNlX3QgKmRldiwgY29uc3QgdWludDMyX3QgKiBidWYsIHVuc2lnbmVkIGludCBzaXplKTsKK2V4dGVybiBpbnQKK3ZpYV9wYXJzZV9jb21tYW5kX3N0cmVhbShkcm1fZGV2aWNlX3QgKiBkZXYsIGNvbnN0IHVpbnQzMl90ICogYnVmLAorCQkJIHVuc2lnbmVkIGludCBzaXplKTsKIHN0YXRpYyBpbnQgdmlhX2Rpc3BhdGNoX3BjaV9jbWRidWZmZXIoZHJtX2RldmljZV90ICogZGV2LAogCQkJCSAgICAgIGRybV92aWFfY21kYnVmZmVyX3QgKiBjbWQpCiB7CkBAIC0zNjYsMTUgKzM2MCwxOSBAQAogCiAJaWYgKGNtZC0+c2l6ZSA+IFZJQV9QQ0lfQlVGX1NJWkUpIHsKIAkJcmV0dXJuIERSTV9FUlIoRU5PTUVNKTsKLQl9IAorCX0KIAlpZiAoRFJNX0NPUFlfRlJPTV9VU0VSKGRldl9wcml2LT5wY2lfYnVmLCBjbWQtPmJ1ZiwgY21kLT5zaXplKSkKIAkJcmV0dXJuIERSTV9FUlIoRUZBVUxUKTsKLQkKLQlpZiAoKHJldCA9IHZpYV92ZXJpZnlfY29tbWFuZF9zdHJlYW0oKHVpbnQzMl90ICopZGV2X3ByaXYtPnBjaV9idWYsIGNtZC0+c2l6ZSwgZGV2LCAwKSkpIHsKKworCWlmICgocmV0ID0KKwkgICAgIHZpYV92ZXJpZnlfY29tbWFuZF9zdHJlYW0oKHVpbnQzMl90ICopIGRldl9wcml2LT5wY2lfYnVmLAorCQkJCSAgICAgICBjbWQtPnNpemUsIGRldiwgMCkpKSB7CiAJCXJldHVybiByZXQ7CiAJfQotCQotCXJldCA9IHZpYV9wYXJzZV9jb21tYW5kX3N0cmVhbShkZXYsIChjb25zdCB1aW50MzJfdCAqKWRldl9wcml2LT5wY2lfYnVmLCBjbWQtPnNpemUpOworCisJcmV0ID0KKwkgICAgdmlhX3BhcnNlX2NvbW1hbmRfc3RyZWFtKGRldiwgKGNvbnN0IHVpbnQzMl90ICopZGV2X3ByaXYtPnBjaV9idWYsCisJCQkJICAgICBjbWQtPnNpemUpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTM4NCw3ICszODIsNyBAQAogCWRybV92aWFfY21kYnVmZmVyX3QgY21kYnVmOwogCWludCByZXQ7CiAKLQlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oIGRldiwgZmlscCApOworCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbHApOwogCiAJRFJNX0NPUFlfRlJPTV9VU0VSX0lPQ1RMKGNtZGJ1ZiwgKGRybV92aWFfY21kYnVmZmVyX3QgX191c2VyICopIGRhdGEsCiAJCQkJIHNpemVvZihjbWRidWYpKTsKQEAgLTQwMCwxNyArMzk4LDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKLQogc3RhdGljIGlubGluZSB1aW50MzJfdCAqdmlhX2FsaWduX2J1ZmZlcihkcm1fdmlhX3ByaXZhdGVfdCAqIGRldl9wcml2LAogCQkJCQkgdWludDMyX3QgKiB2YiwgaW50IHF3X2NvdW50KQogewotICAgICAgICBmb3IgKDsgcXdfY291bnQgPiAwOyAtLXF3X2NvdW50KSB7CisJZm9yICg7IHF3X2NvdW50ID4gMDsgLS1xd19jb3VudCkgewogCQlWSUFfT1VUX1JJTkdfUVcoSENfRFVNTVksIEhDX0RVTU1ZKTsKIAl9CiAJcmV0dXJuIHZiOwogfQogCi0KIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgaW50ZXJuYWxseSBieSByaW5nIGJ1ZmZlciBtYW5nZW1lbnQgY29kZS4KICAqCkBAIC00MjYsNyArNDIyLDcgQEAKICAqIG1vZGlmeWluZyB0aGUgcGF1c2UgYWRkcmVzcyBzdG9yZWQgaW4gdGhlIGJ1ZmZlciBpdHNlbGYuIElmCiAgKiB0aGUgcmVndWxhdG9yIGhhcyBhbHJlYWR5IHBhdXNlZCwgcmVzdGFydCBpdC4KICAqLwotc3RhdGljIGludCB2aWFfaG9va19zZWdtZW50KGRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiwKK3N0YXRpYyBpbnQgdmlhX2hvb2tfc2VnbWVudChkcm1fdmlhX3ByaXZhdGVfdCAqIGRldl9wcml2LAogCQkJICAgIHVpbnQzMl90IHBhdXNlX2FkZHJfaGksIHVpbnQzMl90IHBhdXNlX2FkZHJfbG8sCiAJCQkgICAgaW50IG5vX3BjaV9maXJlKQogewpAQCAtNDM0LDcgKzQzMCw3IEBACiAJdm9sYXRpbGUgdWludDMyX3QgKnBhdXNlZF9hdCA9IGRldl9wcml2LT5sYXN0X3BhdXNlX3B0cjsKIAogCXZpYV9mbHVzaF93cml0ZV9jb21iaW5lKCk7Ci0Jd2hpbGUoISAqKHZpYV9nZXRfZG1hKGRldl9wcml2KS0xKSk7CisJd2hpbGUgKCEqKHZpYV9nZXRfZG1hKGRldl9wcml2KSAtIDEpKSA7CiAJKmRldl9wcml2LT5sYXN0X3BhdXNlX3B0ciA9IHBhdXNlX2FkZHJfbG87CiAJdmlhX2ZsdXNoX3dyaXRlX2NvbWJpbmUoKTsKIApAQCAtNDQzLDU1ICs0MzksNTMgQEAKIAkgKiBOb3Qgc3VyZSBpdCBpcyBuZWVkZWQuCiAJICovCiAKLQl3aGlsZSghICpkZXZfcHJpdi0+bGFzdF9wYXVzZV9wdHIpOworCXdoaWxlICghKmRldl9wcml2LT5sYXN0X3BhdXNlX3B0cikgOwogCWRldl9wcml2LT5sYXN0X3BhdXNlX3B0ciA9IHZpYV9nZXRfZG1hKGRldl9wcml2KSAtIDE7Ci0Jd2hpbGUoISAqZGV2X3ByaXYtPmxhc3RfcGF1c2VfcHRyKTsKLQorCXdoaWxlICghKmRldl9wcml2LT5sYXN0X3BhdXNlX3B0cikgOwogCiAJcGF1c2VkID0gMDsKLQljb3VudCA9IDIwOyAKKwljb3VudCA9IDIwOwogCi0Jd2hpbGUgKCEocGF1c2VkID0gKFZJQV9SRUFEKDB4NDFjKSAmIDB4ODAwMDAwMDApKSAmJiBjb3VudC0tKTsKKwl3aGlsZSAoIShwYXVzZWQgPSAoVklBX1JFQUQoMHg0MWMpICYgMHg4MDAwMDAwMCkpICYmIGNvdW50LS0pIDsKIAlpZiAoKGNvdW50IDw9IDgpICYmIChjb3VudCA+PSAwKSkgewogCQl1aW50MzJfdCByZ3RyLCBwdHI7CiAJCXJndHIgPSAqKGRldl9wcml2LT5od19hZGRyX3B0cik7Ci0JCXB0ciA9ICgoY2hhciAqKWRldl9wcml2LT5sYXN0X3BhdXNlX3B0ciAtIGRldl9wcml2LT5kbWFfcHRyKSArIAotCQkJZGV2X3ByaXYtPmRtYV9vZmZzZXQgKyAodWludDMyX3QpIGRldl9wcml2LT5hZ3BBZGRyICsgNCAtIAotCQkJQ01EQlVGX0FMSUdOTUVOVF9TSVpFOworCQlwdHIgPSAoKGNoYXIgKilkZXZfcHJpdi0+bGFzdF9wYXVzZV9wdHIgLSBkZXZfcHJpdi0+ZG1hX3B0cikgKworCQkgICAgZGV2X3ByaXYtPmRtYV9vZmZzZXQgKyAodWludDMyX3QpIGRldl9wcml2LT5hZ3BBZGRyICsgNCAtCisJCSAgICBDTURCVUZfQUxJR05NRU5UX1NJWkU7CiAJCWlmIChyZ3RyIDw9IHB0cikgewotCQkJRFJNX0VSUk9SKCJDb21tYW5kIHJlZ3VsYXRvclxucGF1c2VkIGF0IGNvdW50ICVkLCBhZGRyZXNzICV4LCAiCi0JCQkJICAid2hpbGUgY3VycmVudCBwYXVzZSBhZGRyZXNzIGlzICV4LlxuIgotCQkJCSAgIlBsZWFzZSBtYWlsIHRoaXMgbWVzc2FnZSB0byAiCi0JCQkJICAiPHVuaWNocm9tZS1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+XG4iLAotCQkJCSAgY291bnQsIHJndHIsIHB0cik7CisJCQlEUk1fRVJST1IKKwkJCSAgICAoIkNvbW1hbmQgcmVndWxhdG9yXG5wYXVzZWQgYXQgY291bnQgJWQsIGFkZHJlc3MgJXgsICIKKwkJCSAgICAgIndoaWxlIGN1cnJlbnQgcGF1c2UgYWRkcmVzcyBpcyAleC5cbiIKKwkJCSAgICAgIlBsZWFzZSBtYWlsIHRoaXMgbWVzc2FnZSB0byAiCisJCQkgICAgICI8dW5pY2hyb21lLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIsIGNvdW50LAorCQkJICAgICByZ3RyLCBwdHIpOwogCQl9CiAJfQotCQkKKwogCWlmIChwYXVzZWQgJiYgIW5vX3BjaV9maXJlKSB7Ci0JICAgICAgICB1aW50MzJfdCByZ3RyLHB0cjsKKwkJdWludDMyX3Qgcmd0ciwgcHRyOwogCQl1aW50MzJfdCBwdHJfbG93OwogCiAJCWNvdW50ID0gMTAwMDAwMDsKLQkJd2hpbGUgKChWSUFfUkVBRChWSUFfUkVHX1NUQVRVUykgJiBWSUFfQ01EX1JHVFJfQlVTWSkgJiYgY291bnQtLSk7Ci0JCQotCQlyZ3RyID0gKihkZXZfcHJpdi0+aHdfYWRkcl9wdHIpOwotCQlwdHIgPSAoKGNoYXIgKilwYXVzZWRfYXQgLSBkZXZfcHJpdi0+ZG1hX3B0cikgKyAKLQkJCWRldl9wcml2LT5kbWFfb2Zmc2V0ICsgKHVpbnQzMl90KSBkZXZfcHJpdi0+YWdwQWRkciArIDQ7Ci0JCQorCQl3aGlsZSAoKFZJQV9SRUFEKFZJQV9SRUdfU1RBVFVTKSAmIFZJQV9DTURfUkdUUl9CVVNZKQorCQkgICAgICAgJiYgY291bnQtLSkgOwogCi0JCXB0cl9sb3cgPSAocHRyID4gMypDTURCVUZfQUxJR05NRU5UX1NJWkUpID8gCi0JCQlwdHIgLSAzKkNNREJVRl9BTElHTk1FTlRfU0laRSA6IDA7CisJCXJndHIgPSAqKGRldl9wcml2LT5od19hZGRyX3B0cik7CisJCXB0ciA9ICgoY2hhciAqKXBhdXNlZF9hdCAtIGRldl9wcml2LT5kbWFfcHRyKSArCisJCSAgICBkZXZfcHJpdi0+ZG1hX29mZnNldCArICh1aW50MzJfdCkgZGV2X3ByaXYtPmFncEFkZHIgKyA0OworCisJCXB0cl9sb3cgPSAocHRyID4gMyAqIENNREJVRl9BTElHTk1FTlRfU0laRSkgPworCQkgICAgcHRyIC0gMyAqIENNREJVRl9BTElHTk1FTlRfU0laRSA6IDA7CiAJCWlmIChyZ3RyIDw9IHB0ciAmJiByZ3RyID49IHB0cl9sb3cpIHsKIAkJCVZJQV9XUklURShWSUFfUkVHX1RSQU5TRVQsIChIQ19QYXJhVHlwZV9QcmVDUiA8PCAxNikpOwogCQkJVklBX1dSSVRFKFZJQV9SRUdfVFJBTlNQQUNFLCBwYXVzZV9hZGRyX2hpKTsKIAkJCVZJQV9XUklURShWSUFfUkVHX1RSQU5TUEFDRSwgcGF1c2VfYWRkcl9sbyk7Ci0JCX0gCisJCX0KIAl9CiAJcmV0dXJuIHBhdXNlZDsKIH0KIAotCi0KIHN0YXRpYyBpbnQgdmlhX3dhaXRfaWRsZShkcm1fdmlhX3ByaXZhdGVfdCAqIGRldl9wcml2KQogewogCWludCBjb3VudCA9IDEwMDAwMDAwOwpAQCAtNTAyLDkgKzQ5Niw4IEBACiB9CiAKIHN0YXRpYyB1aW50MzJfdCAqdmlhX2FsaWduX2NtZChkcm1fdmlhX3ByaXZhdGVfdCAqIGRldl9wcml2LCB1aW50MzJfdCBjbWRfdHlwZSwKLQkJCSAgICAgICB1aW50MzJfdCBhZGRyLCB1aW50MzJfdCAqY21kX2FkZHJfaGksIAotCQkJICAgICAgIHVpbnQzMl90ICpjbWRfYWRkcl9sbywKLQkJCSAgICAgICBpbnQgc2tpcF93YWl0KQorCQkJICAgICAgIHVpbnQzMl90IGFkZHIsIHVpbnQzMl90ICogY21kX2FkZHJfaGksCisJCQkgICAgICAgdWludDMyX3QgKiBjbWRfYWRkcl9sbywgaW50IHNraXBfd2FpdCkKIHsKIAl1aW50MzJfdCBhZ3BfYmFzZTsKIAl1aW50MzJfdCBjbWRfYWRkciwgYWRkcl9sbywgYWRkcl9oaTsKQEAgLTUxMiwzMSArNTA1LDI2IEBACiAJdWludDMyX3QgcXdfcGFkX2NvdW50OwogCiAJaWYgKCFza2lwX3dhaXQpCi0JCXZpYV9jbWRidWZfd2FpdChkZXZfcHJpdiwgMipDTURCVUZfQUxJR05NRU5UX1NJWkUpOworCQl2aWFfY21kYnVmX3dhaXQoZGV2X3ByaXYsIDIgKiBDTURCVUZfQUxJR05NRU5UX1NJWkUpOwogCiAJdmIgPSB2aWFfZ2V0X2RtYShkZXZfcHJpdik7Ci0JVklBX09VVF9SSU5HX1FXKCBIQ19IRUFERVIyIHwgKChWSUFfUkVHX1RSQU5TRVQgPj4gMikgPDwgMTIpIHwKLQkJCSAoVklBX1JFR19UUkFOU1BBQ0UgPj4gMiksIEhDX1BhcmFUeXBlX1ByZUNSIDw8IDE2KTsgCisJVklBX09VVF9SSU5HX1FXKEhDX0hFQURFUjIgfCAoKFZJQV9SRUdfVFJBTlNFVCA+PiAyKSA8PCAxMikgfAorCQkJKFZJQV9SRUdfVFJBTlNQQUNFID4+IDIpLCBIQ19QYXJhVHlwZV9QcmVDUiA8PCAxNik7CiAJYWdwX2Jhc2UgPSBkZXZfcHJpdi0+ZG1hX29mZnNldCArICh1aW50MzJfdCkgZGV2X3ByaXYtPmFncEFkZHI7CiAJcXdfcGFkX2NvdW50ID0gKENNREJVRl9BTElHTk1FTlRfU0laRSA+PiAzKSAtCi0JCSgoZGV2X3ByaXYtPmRtYV9sb3cgJiBDTURCVUZfQUxJR05NRU5UX01BU0spID4+IDMpOworCSAgICAoKGRldl9wcml2LT5kbWFfbG93ICYgQ01EQlVGX0FMSUdOTUVOVF9NQVNLKSA+PiAzKTsKIAotCQotCWNtZF9hZGRyID0gKGFkZHIpID8gYWRkciA6IAotCQlhZ3BfYmFzZSArIGRldl9wcml2LT5kbWFfbG93IC0gOCArIChxd19wYWRfY291bnQgPDwgMyk7CisJY21kX2FkZHIgPSAoYWRkcikgPyBhZGRyIDoKKwkgICAgYWdwX2Jhc2UgKyBkZXZfcHJpdi0+ZG1hX2xvdyAtIDggKyAocXdfcGFkX2NvdW50IDw8IDMpOwogCWFkZHJfbG8gPSAoKEhDX1N1YkFfSEFHUEJwTCA8PCAyNCkgfCAoY21kX3R5cGUgJiBIQ19IQUdQQnBJRF9NQVNLKSB8CiAJCSAgIChjbWRfYWRkciAmIEhDX0hBR1BCcExfTUFTSykpOwogCWFkZHJfaGkgPSAoKEhDX1N1YkFfSEFHUEJwSCA8PCAyNCkgfCAoY21kX2FkZHIgPj4gMjQpKTsKIAogCXZiID0gdmlhX2FsaWduX2J1ZmZlcihkZXZfcHJpdiwgdmIsIHF3X3BhZF9jb3VudCAtIDEpOwotCVZJQV9PVVRfUklOR19RVygqY21kX2FkZHJfaGkgPSBhZGRyX2hpLCAKLQkJCSpjbWRfYWRkcl9sbyA9IGFkZHJfbG8pOworCVZJQV9PVVRfUklOR19RVygqY21kX2FkZHJfaGkgPSBhZGRyX2hpLCAqY21kX2FkZHJfbG8gPSBhZGRyX2xvKTsKIAlyZXR1cm4gdmI7CiB9CiAKLQotCi0KIHN0YXRpYyB2b2lkIHZpYV9jbWRidWZfc3RhcnQoZHJtX3ZpYV9wcml2YXRlX3QgKiBkZXZfcHJpdikKIHsKIAl1aW50MzJfdCBwYXVzZV9hZGRyX2xvLCBwYXVzZV9hZGRyX2hpOwpAQCAtNTQ1LDcgKzUzMyw2IEBACiAJdWludDMyX3QgY29tbWFuZDsKIAl1aW50MzJfdCBhZ3BfYmFzZTsKIAotCiAJZGV2X3ByaXYtPmRtYV9sb3cgPSAwOwogCiAJYWdwX2Jhc2UgPSBkZXZfcHJpdi0+ZG1hX29mZnNldCArICh1aW50MzJfdCkgZGV2X3ByaXYtPmFncEFkZHI7CkBAIC01NTcsMTIgKzU0NCwxMiBAQAogCWNvbW1hbmQgPSAoKEhDX1N1YkFfSEFHUENNTlQgPDwgMjQpIHwgKHN0YXJ0X2FkZHIgPj4gMjQpIHwKIAkJICAgKChlbmRfYWRkciAmIDB4ZmYwMDAwMDApID4+IDE2KSk7CiAKLQlkZXZfcHJpdi0+bGFzdF9wYXVzZV9wdHIgPSAKLQkJdmlhX2FsaWduX2NtZChkZXZfcHJpdiwgSENfSEFHUEJwSURfUEFVU0UsIDAsIAotCQkJICAgICAgJnBhdXNlX2FkZHJfaGksICYgcGF1c2VfYWRkcl9sbywgMSkgLSAxOworCWRldl9wcml2LT5sYXN0X3BhdXNlX3B0ciA9CisJICAgIHZpYV9hbGlnbl9jbWQoZGV2X3ByaXYsIEhDX0hBR1BCcElEX1BBVVNFLCAwLAorCQkJICAmcGF1c2VfYWRkcl9oaSwgJnBhdXNlX2FkZHJfbG8sIDEpIC0gMTsKIAogCXZpYV9mbHVzaF93cml0ZV9jb21iaW5lKCk7Ci0Jd2hpbGUoISAqZGV2X3ByaXYtPmxhc3RfcGF1c2VfcHRyKTsKKwl3aGlsZSAoISpkZXZfcHJpdi0+bGFzdF9wYXVzZV9wdHIpIDsKIAogCVZJQV9XUklURShWSUFfUkVHX1RSQU5TRVQsIChIQ19QYXJhVHlwZV9QcmVDUiA8PCAxNikpOwogCVZJQV9XUklURShWSUFfUkVHX1RSQU5TUEFDRSwgY29tbWFuZCk7CkBAIC01NzUsMTQgKzU2MiwxNCBAQAogCVZJQV9XUklURShWSUFfUkVHX1RSQU5TUEFDRSwgY29tbWFuZCB8IEhDX0hBR1BDTU5UX01BU0spOwogfQogCi1zdGF0aWMgdm9pZCB2aWFfcGFkX2NhY2hlKGRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiwgaW50IHF3b3JkcykKK3N0YXRpYyB2b2lkIHZpYV9wYWRfY2FjaGUoZHJtX3ZpYV9wcml2YXRlX3QgKiBkZXZfcHJpdiwgaW50IHF3b3JkcykKIHsKIAl1aW50MzJfdCAqdmI7CiAKIAl2aWFfY21kYnVmX3dhaXQoZGV2X3ByaXYsIHF3b3JkcyArIDIpOwogCXZiID0gdmlhX2dldF9kbWEoZGV2X3ByaXYpOwotCVZJQV9PVVRfUklOR19RVyggSENfSEVBREVSMiwgSENfUGFyYVR5cGVfTm90VGV4IDw8IDE2KTsKLQl2aWFfYWxpZ25fYnVmZmVyKGRldl9wcml2LHZiLHF3b3Jkcyk7CisJVklBX09VVF9SSU5HX1FXKEhDX0hFQURFUjIsIEhDX1BhcmFUeXBlX05vdFRleCA8PCAxNik7CisJdmlhX2FsaWduX2J1ZmZlcihkZXZfcHJpdiwgdmIsIHF3b3Jkcyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB2aWFfZHVtbXlfYml0Ymx0KGRybV92aWFfcHJpdmF0ZV90ICogZGV2X3ByaXYpCkBAIC01OTAsMTAgKzU3Nyw5IEBACiAJdWludDMyX3QgKnZiID0gdmlhX2dldF9kbWEoZGV2X3ByaXYpOwogCVNldFJlZzJEQUdQKDB4MEMsICgwIHwgKDAgPDwgMTYpKSk7CiAJU2V0UmVnMkRBR1AoMHgxMCwgMCB8ICgwIDw8IDE2KSk7Ci0JU2V0UmVnMkRBR1AoMHgwLCAweDEgfCAweDIwMDAgfCAweEFBMDAwMDAwKTsgCisJU2V0UmVnMkRBR1AoMHgwLCAweDEgfCAweDIwMDAgfCAweEFBMDAwMDAwKTsKIH0KIAotCiBzdGF0aWMgdm9pZCB2aWFfY21kYnVmX2p1bXAoZHJtX3ZpYV9wcml2YXRlX3QgKiBkZXZfcHJpdikKIHsKIAl1aW50MzJfdCBhZ3BfYmFzZTsKQEAgLTYwMywxMSArNTg5LDEwIEBACiAJdWludDMyX3QgZG1hX2xvd19zYXZlMSwgZG1hX2xvd19zYXZlMjsKIAogCWFncF9iYXNlID0gZGV2X3ByaXYtPmRtYV9vZmZzZXQgKyAodWludDMyX3QpIGRldl9wcml2LT5hZ3BBZGRyOwotCXZpYV9hbGlnbl9jbWQoZGV2X3ByaXYsICBIQ19IQUdQQnBJRF9KVU1QLCAwLCAmanVtcF9hZGRyX2hpLCAKKwl2aWFfYWxpZ25fY21kKGRldl9wcml2LCBIQ19IQUdQQnBJRF9KVU1QLCAwLCAmanVtcF9hZGRyX2hpLAogCQkgICAgICAmanVtcF9hZGRyX2xvLCAwKTsKLQkKLQlkZXZfcHJpdi0+ZG1hX3dyYXAgPSBkZXZfcHJpdi0+ZG1hX2xvdzsKIAorCWRldl9wcml2LT5kbWFfd3JhcCA9IGRldl9wcml2LT5kbWFfbG93OwogCiAJLyoKIAkgKiBXcmFwIGNvbW1hbmQgYnVmZmVyIHRvIHRoZSBiZWdpbm5pbmcuCkBAIC02MTksMTEgKzYwNCwxMiBAQAogCX0KIAogCXZpYV9kdW1teV9iaXRibHQoZGV2X3ByaXYpOwotCXZpYV9kdW1teV9iaXRibHQoZGV2X3ByaXYpOyAKKwl2aWFfZHVtbXlfYml0Ymx0KGRldl9wcml2KTsKIAotCWxhc3RfcGF1c2VfcHRyID0gdmlhX2FsaWduX2NtZChkZXZfcHJpdiwgIEhDX0hBR1BCcElEX1BBVVNFLCAwLCAmcGF1c2VfYWRkcl9oaSwgCi0JCQkJICAgICAgICZwYXVzZV9hZGRyX2xvLCAwKSAtMTsKLQl2aWFfYWxpZ25fY21kKGRldl9wcml2LCAgSENfSEFHUEJwSURfUEFVU0UsIDAsICZwYXVzZV9hZGRyX2hpLCAKKwlsYXN0X3BhdXNlX3B0ciA9CisJICAgIHZpYV9hbGlnbl9jbWQoZGV2X3ByaXYsIEhDX0hBR1BCcElEX1BBVVNFLCAwLCAmcGF1c2VfYWRkcl9oaSwKKwkJCSAgJnBhdXNlX2FkZHJfbG8sIDApIC0gMTsKKwl2aWFfYWxpZ25fY21kKGRldl9wcml2LCBIQ19IQUdQQnBJRF9QQVVTRSwgMCwgJnBhdXNlX2FkZHJfaGksCiAJCSAgICAgICZwYXVzZV9hZGRyX2xvLCAwKTsKIAogCSpsYXN0X3BhdXNlX3B0ciA9IHBhdXNlX2FkZHJfbG87CkBAIC02MzgsMjMgKzYyNCwyMyBAQAogCSAqIGRvZXMgbm90IHNlZW0gdG8gZ2V0IHVwZGF0ZWQgaW1tZWRpYXRlbHkgd2hlbiBhIGp1bXAgb2NjdXJzLgogCSAqLwogCi0JbGFzdF9wYXVzZV9wdHIgPSB2aWFfYWxpZ25fY21kKGRldl9wcml2LCAgSENfSEFHUEJwSURfUEFVU0UsIDAsICZwYXVzZV9hZGRyX2hpLCAKLQkJCQkgICAgICAgJnBhdXNlX2FkZHJfbG8sIDApIC0xOwotCXZpYV9hbGlnbl9jbWQoZGV2X3ByaXYsICBIQ19IQUdQQnBJRF9QQVVTRSwgMCwgJnBhdXNlX2FkZHJfaGksIAorCWxhc3RfcGF1c2VfcHRyID0KKwkgICAgdmlhX2FsaWduX2NtZChkZXZfcHJpdiwgSENfSEFHUEJwSURfUEFVU0UsIDAsICZwYXVzZV9hZGRyX2hpLAorCQkJICAmcGF1c2VfYWRkcl9sbywgMCkgLSAxOworCXZpYV9hbGlnbl9jbWQoZGV2X3ByaXYsIEhDX0hBR1BCcElEX1BBVVNFLCAwLCAmcGF1c2VfYWRkcl9oaSwKIAkJICAgICAgJnBhdXNlX2FkZHJfbG8sIDApOwogCSpsYXN0X3BhdXNlX3B0ciA9IHBhdXNlX2FkZHJfbG87CiAKIAlkbWFfbG93X3NhdmUyID0gZGV2X3ByaXYtPmRtYV9sb3c7Ci0JZGV2X3ByaXYtPmRtYV9sb3cgPSBkbWFfbG93X3NhdmUxOwkKLQl2aWFfaG9va19zZWdtZW50KCBkZXZfcHJpdiwganVtcF9hZGRyX2hpLCBqdW1wX2FkZHJfbG8sIDApOworCWRldl9wcml2LT5kbWFfbG93ID0gZG1hX2xvd19zYXZlMTsKKwl2aWFfaG9va19zZWdtZW50KGRldl9wcml2LCBqdW1wX2FkZHJfaGksIGp1bXBfYWRkcl9sbywgMCk7CiAJZGV2X3ByaXYtPmRtYV9sb3cgPSBkbWFfbG93X3NhdmUyOwotCXZpYV9ob29rX3NlZ21lbnQoIGRldl9wcml2LCBwYXVzZV9hZGRyX2hpLCBwYXVzZV9hZGRyX2xvLCAwKTsKKwl2aWFfaG9va19zZWdtZW50KGRldl9wcml2LCBwYXVzZV9hZGRyX2hpLCBwYXVzZV9hZGRyX2xvLCAwKTsKIH0KIAotCiBzdGF0aWMgdm9pZCB2aWFfY21kYnVmX3Jld2luZChkcm1fdmlhX3ByaXZhdGVfdCAqIGRldl9wcml2KQogewotCXZpYV9jbWRidWZfanVtcChkZXZfcHJpdik7IAorCXZpYV9jbWRidWZfanVtcChkZXZfcHJpdik7CiB9CiAKIHN0YXRpYyB2b2lkIHZpYV9jbWRidWZfZmx1c2goZHJtX3ZpYV9wcml2YXRlX3QgKiBkZXZfcHJpdiwgdWludDMyX3QgY21kX3R5cGUpCkBAIC02NjIsMTAgKzY0OCw5IEBACiAJdWludDMyX3QgcGF1c2VfYWRkcl9sbywgcGF1c2VfYWRkcl9oaTsKIAogCXZpYV9hbGlnbl9jbWQoZGV2X3ByaXYsIGNtZF90eXBlLCAwLCAmcGF1c2VfYWRkcl9oaSwgJnBhdXNlX2FkZHJfbG8sIDApOwotCXZpYV9ob29rX3NlZ21lbnQoIGRldl9wcml2LCBwYXVzZV9hZGRyX2hpLCBwYXVzZV9hZGRyX2xvLCAwKTsKKwl2aWFfaG9va19zZWdtZW50KGRldl9wcml2LCBwYXVzZV9hZGRyX2hpLCBwYXVzZV9hZGRyX2xvLCAwKTsKIH0KIAotCiBzdGF0aWMgdm9pZCB2aWFfY21kYnVmX3BhdXNlKGRybV92aWFfcHJpdmF0ZV90ICogZGV2X3ByaXYpCiB7CiAJdmlhX2NtZGJ1Zl9mbHVzaChkZXZfcHJpdiwgSENfSEFHUEJwSURfUEFVU0UpOwpAQCAtNjgxLDggKzY2Niw3IEBACiAgKiBVc2VyIGludGVyZmFjZSB0byB0aGUgc3BhY2UgYW5kIGxhZyBmdW5jdGlvbnMuCiAgKi8KIAotaW50IAotdmlhX2NtZGJ1Zl9zaXplKERSTV9JT0NUTF9BUkdTKQoraW50IHZpYV9jbWRidWZfc2l6ZShEUk1fSU9DVExfQVJHUykKIHsKIAlEUk1fREVWSUNFOwogCWRybV92aWFfY21kYnVmX3NpemVfdCBkX3NpejsKQEAgLTY5MSw3ICs2NzUsNyBAQAogCWRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdjsKIAogCURSTV9ERUJVRygidmlhIGNtZGJ1Zl9zaXplXG4iKTsKLQlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oIGRldiwgZmlscCApOworCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbHApOwogCiAJZGV2X3ByaXYgPSAoZHJtX3ZpYV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKIApAQCAtNzA0LDEyICs2ODgsMTIgQEAKIAlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwoZF9zaXosIChkcm1fdmlhX2NtZGJ1Zl9zaXplX3QgX191c2VyICopIGRhdGEsCiAJCQkJIHNpemVvZihkX3NpeikpOwogCi0KIAljb3VudCA9IDEwMDAwMDA7CiAJdG1wX3NpemUgPSBkX3Npei5zaXplOwotCXN3aXRjaChkX3Npei5mdW5jKSB7CisJc3dpdGNoIChkX3Npei5mdW5jKSB7CiAJY2FzZSBWSUFfQ01EQlVGX1NQQUNFOgotCQl3aGlsZSAoKCh0bXBfc2l6ZSA9IHZpYV9jbWRidWZfc3BhY2UoZGV2X3ByaXYpKSA8IGRfc2l6LnNpemUpICYmIGNvdW50LS0pIHsKKwkJd2hpbGUgKCgodG1wX3NpemUgPSB2aWFfY21kYnVmX3NwYWNlKGRldl9wcml2KSkgPCBkX3Npei5zaXplKQorCQkgICAgICAgJiYgY291bnQtLSkgewogCQkJaWYgKCFkX3Npei53YWl0KSB7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC03MjAsNyArNzA0LDggQEAKIAkJfQogCQlicmVhazsKIAljYXNlIFZJQV9DTURCVUZfTEFHOgotCQl3aGlsZSAoKCh0bXBfc2l6ZSA9IHZpYV9jbWRidWZfbGFnKGRldl9wcml2KSkgPiBkX3Npei5zaXplKSAmJiBjb3VudC0tKSB7CisJCXdoaWxlICgoKHRtcF9zaXplID0gdmlhX2NtZGJ1Zl9sYWcoZGV2X3ByaXYpKSA+IGRfc2l6LnNpemUpCisJCSAgICAgICAmJiBjb3VudC0tKSB7CiAJCQlpZiAoIWRfc2l6LndhaXQpIHsKIAkJCQlicmVhazsKIAkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vdmlhX2RybS5oIGIvZHJpdmVycy9jaGFyL2RybS92aWFfZHJtLmgKaW5kZXggYmUzNDZiYi4uZWJkZTkyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS92aWFfZHJtLmgKKysrIGIvZHJpdmVycy9jaGFyL2RybS92aWFfZHJtLmgKQEAgLTE0OSw3ICsxNDksNyBAQAogCWVudW0gewogCQlWSUFfSU5JVF9ETUEgPSAweDAxLAogCQlWSUFfQ0xFQU5VUF9ETUEgPSAweDAyLAotICAgICAgICAgICAgICAgIFZJQV9ETUFfSU5JVElBTElaRUQgPSAweDAzCisJCVZJQV9ETUFfSU5JVElBTElaRUQgPSAweDAzCiAJfSBmdW5jOwogCiAJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CkBAIC0yMTIsNyArMjEyLDcgQEAKIAogI2RlZmluZSBWSUFfSVJRX0ZMQUdTX01BU0sgMHhGMDAwMDAwMAogCi1zdHJ1Y3QgZHJtX3ZpYV93YWl0X2lycV9yZXF1ZXN0eworc3RydWN0IGRybV92aWFfd2FpdF9pcnFfcmVxdWVzdCB7CiAJdW5zaWduZWQgaXJxOwogCXZpYV9pcnFfc2VxX3R5cGVfdCB0eXBlOwogCXVpbnQzMl90IHNlcXVlbmNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS92aWFfZHJ2LmMgYi9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9kcnYuYwppbmRleCAyNzVlZWZjLi4wMTY2NjVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9kcnYuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9kcnYuYwpAQCAtOTMsMTggKzkzLDE4IEBACiAJLmlvY3RscyA9IGlvY3RscywKIAkubnVtX2lvY3RscyA9IERSTV9BUlJBWV9TSVpFKGlvY3RscyksCiAJLmZvcHMgPSB7Ci0JCS5vd25lciA9IFRISVNfTU9EVUxFLAotCQkub3BlbiA9IGRybV9vcGVuLAotCQkucmVsZWFzZSA9IGRybV9yZWxlYXNlLAotCQkuaW9jdGwgPSBkcm1faW9jdGwsCi0JCS5tbWFwID0gZHJtX21tYXAsCi0JCS5wb2xsID0gZHJtX3BvbGwsCi0JCS5mYXN5bmMgPSBkcm1fZmFzeW5jLAotCQl9LAorCQkgLm93bmVyID0gVEhJU19NT0RVTEUsCisJCSAub3BlbiA9IGRybV9vcGVuLAorCQkgLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKKwkJIC5pb2N0bCA9IGRybV9pb2N0bCwKKwkJIC5tbWFwID0gZHJtX21tYXAsCisJCSAucG9sbCA9IGRybV9wb2xsLAorCQkgLmZhc3luYyA9IGRybV9mYXN5bmMsCisJCSB9LAogCS5wY2lfZHJpdmVyID0gewotCQkubmFtZSA9IERSSVZFUl9OQU1FLAotCQkuaWRfdGFibGUgPSBwY2lpZGxpc3QsCi0JfQorCQkgICAgICAgLm5hbWUgPSBEUklWRVJfTkFNRSwKKwkJICAgICAgIC5pZF90YWJsZSA9IHBjaWlkbGlzdCwKKwkJICAgICAgIH0KIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHZpYV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9kcnYuaCBiL2RyaXZlcnMvY2hhci9kcm0vdmlhX2Rydi5oCmluZGV4IDRlYWE4YjcuLmQ5MDJkYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vdmlhX2Rydi5oCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vdmlhX2Rydi5oCkBAIC00MCw4ICs0MCw2IEBACiAjZGVmaW5lIFZJQV9GSVJFX0JVRl9TSVpFICAxMDI0CiAjZGVmaW5lIFZJQV9OVU1fSVJRUyAyCiAKLQotCiB0eXBlZGVmIHN0cnVjdCBkcm1fdmlhX3JpbmdfYnVmZmVyIHsKIAlkcm1fbWFwX3QgbWFwOwogCWNoYXIgKnZpcnR1YWxfc3RhcnQ7CkBAIC01NSw3ICs1Myw3IEBACiAJdWludDMyX3QgZW5hYmxlX21hc2s7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgaXJxX3F1ZXVlOwogfSBkcm1fdmlhX2lycV90OwotCQorCiB0eXBlZGVmIHN0cnVjdCBkcm1fdmlhX3ByaXZhdGUgewogCWRybV92aWFfc2FyZWFfdCAqc2FyZWFfcHJpdjsKIAlkcm1fbWFwX3QgKnNhcmVhOwpAQCAtNzEsOSArNjksOSBAQAogCXZvbGF0aWxlIHVpbnQzMl90ICpsYXN0X3BhdXNlX3B0cjsKIAl2b2xhdGlsZSB1aW50MzJfdCAqaHdfYWRkcl9wdHI7CiAJZHJtX3ZpYV9yaW5nX2J1ZmZlcl90IHJpbmc7Ci0gICAgICAgIHN0cnVjdCB0aW1ldmFsIGxhc3RfdmJsYW5rOwotICAgICAgICBpbnQgbGFzdF92YmxhbmtfdmFsaWQ7Ci0gICAgICAgIHVuc2lnbmVkIHVzZWNfcGVyX3ZibGFuazsKKwlzdHJ1Y3QgdGltZXZhbCBsYXN0X3ZibGFuazsKKwlpbnQgbGFzdF92YmxhbmtfdmFsaWQ7CisJdW5zaWduZWQgdXNlY19wZXJfdmJsYW5rOwogCWRybV92aWFfc3RhdGVfdCBoY19zdGF0ZTsKIAljaGFyIHBjaV9idWZbVklBX1BDSV9CVUZfU0laRV07CiAJY29uc3QgdWludDMyX3QgKmZpcmVfb2Zmc2V0c1tWSUFfRklSRV9CVUZfU0laRV07CkBAIC04Miw4ICs4MCw4IEBACiAJZHJtX3ZpYV9pcnFfdCB2aWFfaXJxc1tWSUFfTlVNX0lSUVNdOwogCXVuc2lnbmVkIG51bV9pcnFzOwogCW1hc2thcnJheV90ICppcnFfbWFza3M7Ci0JdWludDMyX3QgaXJxX2VuYWJsZV9tYXNrOyAKLQl1aW50MzJfdCBpcnFfcGVuZGluZ19tYXNrOwkKKwl1aW50MzJfdCBpcnFfZW5hYmxlX21hc2s7CisJdWludDMyX3QgaXJxX3BlbmRpbmdfbWFzazsKIH0gZHJtX3ZpYV9wcml2YXRlX3Q7CiAKIC8qIFZJQSBNTUlPIHJlZ2lzdGVyIGFjY2VzcyAqLwpAQCAtMTEwLDkgKzEwOCw4IEBACiBleHRlcm4gaW50IHZpYV9kbWFfY2xlYW51cChkcm1fZGV2aWNlX3QgKiBkZXYpOwogZXh0ZXJuIHZvaWQgdmlhX2luaXRfY29tbWFuZF92ZXJpZmllcih2b2lkKTsKIGV4dGVybiBpbnQgdmlhX2RyaXZlcl9kbWFfcXVpZXNjZW50KGRybV9kZXZpY2VfdCAqIGRldik7Ci1leHRlcm4gdm9pZCB2aWFfaW5pdF9mdXRleChkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYpOwotZXh0ZXJuIHZvaWQgdmlhX2NsZWFudXBfZnV0ZXgoZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2KTsKLWV4dGVybiB2b2lkIHZpYV9yZWxlYXNlX2Z1dGV4KGRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiwgaW50IGNvbnRleHQpOwotCitleHRlcm4gdm9pZCB2aWFfaW5pdF9mdXRleChkcm1fdmlhX3ByaXZhdGVfdCAqIGRldl9wcml2KTsKK2V4dGVybiB2b2lkIHZpYV9jbGVhbnVwX2Z1dGV4KGRybV92aWFfcHJpdmF0ZV90ICogZGV2X3ByaXYpOworZXh0ZXJuIHZvaWQgdmlhX3JlbGVhc2VfZnV0ZXgoZHJtX3ZpYV9wcml2YXRlX3QgKiBkZXZfcHJpdiwgaW50IGNvbnRleHQpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vdmlhX2lycS5jIGIvZHJpdmVycy9jaGFyL2RybS92aWFfaXJxLmMKaW5kZXggZTgwMjdmMy4uZDAyM2FkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS92aWFfaXJxLmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS92aWFfaXJxLmMKQEAgLTU0LDIzICs1NCwyNiBAQAogLyoKICAqIERldmljZS1zcGVjaWZpYyBJUlFzIGdvIGhlcmUuIFRoaXMgdHlwZSBtaWdodCBuZWVkIHRvIGJlIGV4dGVuZGVkIHdpdGgKICAqIHRoZSByZWdpc3RlciBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgSVJRIGNvbnRyb2wgcmVnaXN0ZXJzLgotICogQ3VycmVudGx5IHdlIGFjdGl2YXRlIHRoZSBIUVYgaW50ZXJydXB0cyBvZiAgVW5pY2hyb21lIFBybyBncm91cCBBLiAKKyAqIEN1cnJlbnRseSB3ZSBhY3RpdmF0ZSB0aGUgSFFWIGludGVycnVwdHMgb2YgIFVuaWNocm9tZSBQcm8gZ3JvdXAgQS4KICAqLwogCiBzdGF0aWMgbWFza2FycmF5X3QgdmlhX3Byb19ncm91cF9hX2lycXNbXSA9IHsKLQl7VklBX0lSUV9IUVYwX0VOQUJMRSwgVklBX0lSUV9IUVYwX1BFTkRJTkcsIDB4MDAwMDAzRDAsIDB4MDAwMDgwMTAsIDB4MDAwMDAwMDAgfSwKLQl7VklBX0lSUV9IUVYxX0VOQUJMRSwgVklBX0lSUV9IUVYxX1BFTkRJTkcsIDB4MDAwMDEzRDAsIDB4MDAwMDgwMTAsIDB4MDAwMDAwMDAgfX07Ci1zdGF0aWMgaW50IHZpYV9udW1fcHJvX2dyb3VwX2EgPSBzaXplb2YodmlhX3Byb19ncm91cF9hX2lycXMpL3NpemVvZihtYXNrYXJyYXlfdCk7CisJe1ZJQV9JUlFfSFFWMF9FTkFCTEUsIFZJQV9JUlFfSFFWMF9QRU5ESU5HLCAweDAwMDAwM0QwLCAweDAwMDA4MDEwLAorCSAweDAwMDAwMDAwfSwKKwl7VklBX0lSUV9IUVYxX0VOQUJMRSwgVklBX0lSUV9IUVYxX1BFTkRJTkcsIDB4MDAwMDEzRDAsIDB4MDAwMDgwMTAsCisJIDB4MDAwMDAwMDB9Cit9Oworc3RhdGljIGludCB2aWFfbnVtX3Byb19ncm91cF9hID0KKyAgICBzaXplb2YodmlhX3Byb19ncm91cF9hX2lycXMpIC8gc2l6ZW9mKG1hc2thcnJheV90KTsKIAotc3RhdGljIG1hc2thcnJheV90IHZpYV91bmljaHJvbWVfaXJxc1tdID0ge307Ci1zdGF0aWMgaW50IHZpYV9udW1fdW5pY2hyb21lID0gc2l6ZW9mKHZpYV91bmljaHJvbWVfaXJxcykvc2l6ZW9mKG1hc2thcnJheV90KTsKK3N0YXRpYyBtYXNrYXJyYXlfdCB2aWFfdW5pY2hyb21lX2lycXNbXSA9IHsgfTsKK3N0YXRpYyBpbnQgdmlhX251bV91bmljaHJvbWUgPSBzaXplb2YodmlhX3VuaWNocm9tZV9pcnFzKSAvIHNpemVvZihtYXNrYXJyYXlfdCk7CiAKLQotc3RhdGljIHVuc2lnbmVkIHRpbWVfZGlmZihzdHJ1Y3QgdGltZXZhbCAqbm93LHN0cnVjdCB0aW1ldmFsICp0aGVuKSAKK3N0YXRpYyB1bnNpZ25lZCB0aW1lX2RpZmYoc3RydWN0IHRpbWV2YWwgKm5vdywgc3RydWN0IHRpbWV2YWwgKnRoZW4pCiB7Ci0gICAgcmV0dXJuIChub3ctPnR2X3VzZWMgPj0gdGhlbi0+dHZfdXNlYykgPwotICAgICAgICBub3ctPnR2X3VzZWMgLSB0aGVuLT50dl91c2VjIDoKLSAgICAgICAgMTAwMDAwMCAtICh0aGVuLT50dl91c2VjIC0gbm93LT50dl91c2VjKTsKKwlyZXR1cm4gKG5vdy0+dHZfdXNlYyA+PSB0aGVuLT50dl91c2VjKSA/CisJICAgIG5vdy0+dHZfdXNlYyAtIHRoZW4tPnR2X3VzZWMgOgorCSAgICAxMDAwMDAwIC0gKHRoZW4tPnR2X3VzZWMgLSBub3ctPnR2X3VzZWMpOwogfQogCiBpcnFyZXR1cm5fdCB2aWFfZHJpdmVyX2lycV9oYW5kbGVyKERSTV9JUlFfQVJHUykKQEAgLTg2LDM4ICs4OSwzNyBAQAogCXN0YXR1cyA9IFZJQV9SRUFEKFZJQV9SRUdfSU5URVJSVVBUKTsKIAlpZiAoc3RhdHVzICYgVklBX0lSUV9WQkxBTktfUEVORElORykgewogCQlhdG9taWNfaW5jKCZkZXYtPnZibF9yZWNlaXZlZCk7Ci0gICAgICAgICAgICAgICAgaWYgKCEoYXRvbWljX3JlYWQoJmRldi0+dmJsX3JlY2VpdmVkKSAmIDB4MEYpKSB7CisJCWlmICghKGF0b21pY19yZWFkKCZkZXYtPnZibF9yZWNlaXZlZCkgJiAweDBGKSkgewogCQkJZG9fZ2V0dGltZW9mZGF5KCZjdXJfdmJsYW5rKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXZfcHJpdi0+bGFzdF92YmxhbmtfdmFsaWQpIHsKLQkJCQlkZXZfcHJpdi0+dXNlY19wZXJfdmJsYW5rID0gCi0JCQkJCXRpbWVfZGlmZiggJmN1cl92YmxhbmssJmRldl9wcml2LT5sYXN0X3ZibGFuaykgPj4gNDsKKwkJCWlmIChkZXZfcHJpdi0+bGFzdF92YmxhbmtfdmFsaWQpIHsKKwkJCQlkZXZfcHJpdi0+dXNlY19wZXJfdmJsYW5rID0KKwkJCQkgICAgdGltZV9kaWZmKCZjdXJfdmJsYW5rLAorCQkJCQkgICAgICAmZGV2X3ByaXYtPmxhc3RfdmJsYW5rKSA+PiA0OwogCQkJfQogCQkJZGV2X3ByaXYtPmxhc3RfdmJsYW5rID0gY3VyX3ZibGFuazsKIAkJCWRldl9wcml2LT5sYXN0X3ZibGFua192YWxpZCA9IDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICghKGF0b21pY19yZWFkKCZkZXYtPnZibF9yZWNlaXZlZCkgJiAweEZGKSkgeworCQl9CisJCWlmICghKGF0b21pY19yZWFkKCZkZXYtPnZibF9yZWNlaXZlZCkgJiAweEZGKSkgewogCQkJRFJNX0RFQlVHKCJVUyBwZXIgdmJsYW5rIGlzOiAldVxuIiwKLQkJCQlkZXZfcHJpdi0+dXNlY19wZXJfdmJsYW5rKTsKKwkJCQkgIGRldl9wcml2LT51c2VjX3Blcl92YmxhbmspOwogCQl9CiAJCURSTV9XQUtFVVAoJmRldi0+dmJsX3F1ZXVlKTsKIAkJZHJtX3ZibF9zZW5kX3NpZ25hbHMoZGV2KTsKIAkJaGFuZGxlZCA9IDE7CiAJfQotCQogCi0JZm9yIChpPTA7IGk8ZGV2X3ByaXYtPm51bV9pcnFzOyArK2kpIHsKKwlmb3IgKGkgPSAwOyBpIDwgZGV2X3ByaXYtPm51bV9pcnFzOyArK2kpIHsKIAkJaWYgKHN0YXR1cyAmIGN1cl9pcnEtPnBlbmRpbmdfbWFzaykgewotCQkJYXRvbWljX2luYyggJmN1cl9pcnEtPmlycV9yZWNlaXZlZCApOwotCQkJRFJNX1dBS0VVUCggJmN1cl9pcnEtPmlycV9xdWV1ZSApOworCQkJYXRvbWljX2luYygmY3VyX2lycS0+aXJxX3JlY2VpdmVkKTsKKwkJCURSTV9XQUtFVVAoJmN1cl9pcnEtPmlycV9xdWV1ZSk7CiAJCQloYW5kbGVkID0gMTsKIAkJfQogCQljdXJfaXJxKys7CiAJfQotCQorCiAJLyogQWNrbm93bGVnZSBpbnRlcnJ1cHRzICovCiAJVklBX1dSSVRFKFZJQV9SRUdfSU5URVJSVVBULCBzdGF0dXMpOwogCi0KIAlpZiAoaGFuZGxlZCkKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCWVsc2UKQEAgLTEzMSw3ICsxMzMsNyBAQAogCWlmIChkZXZfcHJpdikgewogCQkvKiBBY2tub3dsZWdlIGludGVycnVwdHMgKi8KIAkJc3RhdHVzID0gVklBX1JFQUQoVklBX1JFR19JTlRFUlJVUFQpOwotCQlWSUFfV1JJVEUoVklBX1JFR19JTlRFUlJVUFQsIHN0YXR1cyB8IAorCQlWSUFfV1JJVEUoVklBX1JFR19JTlRFUlJVUFQsIHN0YXR1cyB8CiAJCQkgIGRldl9wcml2LT5pcnFfcGVuZGluZ19tYXNrKTsKIAl9CiB9CkBAIC0xNTgsMTIgKzE2MCwxMiBAQAogCURSTV9XQUlUX09OKHJldCwgZGV2LT52YmxfcXVldWUsIDMgKiBEUk1fSFosCiAJCSAgICAoKChjdXJfdmJsYW5rID0gYXRvbWljX3JlYWQoJmRldi0+dmJsX3JlY2VpdmVkKSkgLQogCQkgICAgICAqc2VxdWVuY2UpIDw9ICgxIDw8IDIzKSkpOwotCQorCiAJKnNlcXVlbmNlID0gY3VyX3ZibGFuazsKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IAorc3RhdGljIGludAogdmlhX2RyaXZlcl9pcnFfd2FpdChkcm1fZGV2aWNlX3QgKiBkZXYsIHVuc2lnbmVkIGludCBpcnEsIGludCBmb3JjZV9zZXF1ZW5jZSwKIAkJICAgIHVuc2lnbmVkIGludCAqc2VxdWVuY2UpCiB7CkBAIC0xODAsMjcgKzE4MiwyOSBAQAogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCX0KIAotCWlmIChpcnEgPj0gZGV2X3ByaXYtPm51bV9pcnFzICkgewotCQlEUk1fRVJST1IoIiVzIFRyeWluZyB0byB3YWl0IG9uIHVua25vd24gaXJxICVkXG4iLCBfX0ZVTkNUSU9OX18sIGlycSk7CisJaWYgKGlycSA+PSBkZXZfcHJpdi0+bnVtX2lycXMpIHsKKwkJRFJNX0VSUk9SKCIlcyBUcnlpbmcgdG8gd2FpdCBvbiB1bmtub3duIGlycSAlZFxuIiwgX19GVU5DVElPTl9fLAorCQkJICBpcnEpOwogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCX0KLQkJCisKIAljdXJfaXJxICs9IGlycTsKIAogCWlmIChtYXNrc1tpcnFdWzJdICYmICFmb3JjZV9zZXF1ZW5jZSkgewogCQlEUk1fV0FJVF9PTihyZXQsIGN1cl9pcnEtPmlycV9xdWV1ZSwgMyAqIERSTV9IWiwKLQkJCSAgICAoKFZJQV9SRUFEKG1hc2tzW2lycV1bMl0pICYgbWFza3NbaXJxXVszXSkgPT0gbWFza3NbaXJxXVs0XSkpOworCQkJICAgICgoVklBX1JFQUQobWFza3NbaXJxXVsyXSkgJiBtYXNrc1tpcnFdWzNdKSA9PQorCQkJICAgICBtYXNrc1tpcnFdWzRdKSk7CiAJCWN1cl9pcnFfc2VxdWVuY2UgPSBhdG9taWNfcmVhZCgmY3VyX2lycS0+aXJxX3JlY2VpdmVkKTsKIAl9IGVsc2UgewogCQlEUk1fV0FJVF9PTihyZXQsIGN1cl9pcnEtPmlycV9xdWV1ZSwgMyAqIERSTV9IWiwKLQkJCSAgICAoKChjdXJfaXJxX3NlcXVlbmNlID0gYXRvbWljX3JlYWQoJmN1cl9pcnEtPmlycV9yZWNlaXZlZCkpIC0KLQkJCSAgICAgICpzZXF1ZW5jZSkgPD0gKDEgPDwgMjMpKSk7CQkKKwkJCSAgICAoKChjdXJfaXJxX3NlcXVlbmNlID0KKwkJCSAgICAgICBhdG9taWNfcmVhZCgmY3VyX2lycS0+aXJxX3JlY2VpdmVkKSkgLQorCQkJICAgICAgKnNlcXVlbmNlKSA8PSAoMSA8PCAyMykpKTsKIAl9CiAJKnNlcXVlbmNlID0gY3VyX2lycV9zZXF1ZW5jZTsKIAlyZXR1cm4gcmV0OwogfQogCi0KIC8qCiAgKiBkcm1fZG1hLmggaG9va3MKICAqLwpAQCAtMjE5LDI5ICsyMjMsMjkgQEAKIAkJZGV2X3ByaXYtPmlycV9wZW5kaW5nX21hc2sgPSBWSUFfSVJRX1ZCTEFOS19QRU5ESU5HOwogCiAJCWRldl9wcml2LT5pcnFfbWFza3MgPSAoZGV2X3ByaXYtPnByb19ncm91cF9hKSA/Ci0JCQl2aWFfcHJvX2dyb3VwX2FfaXJxcyA6IHZpYV91bmljaHJvbWVfaXJxczsKKwkJICAgIHZpYV9wcm9fZ3JvdXBfYV9pcnFzIDogdmlhX3VuaWNocm9tZV9pcnFzOwogCQlkZXZfcHJpdi0+bnVtX2lycXMgPSAoZGV2X3ByaXYtPnByb19ncm91cF9hKSA/Ci0JCQl2aWFfbnVtX3Byb19ncm91cF9hIDogdmlhX251bV91bmljaHJvbWU7Ci0JCQotCQlmb3IoaT0wOyBpIDwgZGV2X3ByaXYtPm51bV9pcnFzOyArK2kpIHsKKwkJICAgIHZpYV9udW1fcHJvX2dyb3VwX2EgOiB2aWFfbnVtX3VuaWNocm9tZTsKKworCQlmb3IgKGkgPSAwOyBpIDwgZGV2X3ByaXYtPm51bV9pcnFzOyArK2kpIHsKIAkJCWF0b21pY19zZXQoJmN1cl9pcnEtPmlycV9yZWNlaXZlZCwgMCk7Ci0JCQljdXJfaXJxLT5lbmFibGVfbWFzayA9IGRldl9wcml2LT5pcnFfbWFza3NbaV1bMF07IAorCQkJY3VyX2lycS0+ZW5hYmxlX21hc2sgPSBkZXZfcHJpdi0+aXJxX21hc2tzW2ldWzBdOwogCQkJY3VyX2lycS0+cGVuZGluZ19tYXNrID0gZGV2X3ByaXYtPmlycV9tYXNrc1tpXVsxXTsKLQkJCURSTV9JTklUX1dBSVRRVUVVRSggJmN1cl9pcnEtPmlycV9xdWV1ZSApOworCQkJRFJNX0lOSVRfV0FJVFFVRVVFKCZjdXJfaXJxLT5pcnFfcXVldWUpOwogCQkJZGV2X3ByaXYtPmlycV9lbmFibGVfbWFzayB8PSBjdXJfaXJxLT5lbmFibGVfbWFzazsKIAkJCWRldl9wcml2LT5pcnFfcGVuZGluZ19tYXNrIHw9IGN1cl9pcnEtPnBlbmRpbmdfbWFzazsKIAkJCWN1cl9pcnErKzsKLQkJCQorCiAJCQlEUk1fREVCVUcoIkluaXRpYWxpemluZyBJUlEgJWRcbiIsIGkpOwogCQl9Ci0JCQkKLQkgICAgICAgIGRldl9wcml2LT5sYXN0X3ZibGFua192YWxpZCA9IDA7CisKKwkJZGV2X3ByaXYtPmxhc3RfdmJsYW5rX3ZhbGlkID0gMDsKIAogCQkvLyBDbGVhciBWU3luYyBpbnRlcnJ1cHQgcmVncwogCQlzdGF0dXMgPSBWSUFfUkVBRChWSUFfUkVHX0lOVEVSUlVQVCk7Ci0JCVZJQV9XUklURShWSUFfUkVHX0lOVEVSUlVQVCwgc3RhdHVzICYgCisJCVZJQV9XUklURShWSUFfUkVHX0lOVEVSUlVQVCwgc3RhdHVzICYKIAkJCSAgfihkZXZfcHJpdi0+aXJxX2VuYWJsZV9tYXNrKSk7Ci0JCQorCiAJCS8qIENsZWFyIGJpdHMgaWYgdGhleSdyZSBhbHJlYWR5IGhpZ2ggKi8KIAkJdmlhZHJ2X2Fja25vd2xlZGdlX2lycXMoZGV2X3ByaXYpOwogCX0KQEAgLTI2Miw3ICsyNjYsNyBAQAogCiAJCVZJQV9XUklURTgoMHg4M2Q0LCAweDExKTsKIAkJVklBX1dSSVRFOCgweDgzZDUsIFZJQV9SRUFEOCgweDgzZDUpIHwgMHgzMCk7Ci0JCQorCiAJfQogfQogCkBAIC0yODAsNyArMjg0LDcgQEAKIAkJVklBX1dSSVRFOCgweDgzZDUsIFZJQV9SRUFEOCgweDgzZDUpICYgfjB4MzApOwogCiAJCXN0YXR1cyA9IFZJQV9SRUFEKFZJQV9SRUdfSU5URVJSVVBUKTsKLQkJVklBX1dSSVRFKFZJQV9SRUdfSU5URVJSVVBULCBzdGF0dXMgJiAKKwkJVklBX1dSSVRFKFZJQV9SRUdfSU5URVJSVVBULCBzdGF0dXMgJgogCQkJICB+KFZJQV9JUlFfVkJMQU5LX0VOQUJMRSB8IGRldl9wcml2LT5pcnFfZW5hYmxlX21hc2spKTsKIAl9CiB9CkBAIC0zMDIsNyArMzA2LDcgQEAKIAogCURSTV9DT1BZX0ZST01fVVNFUl9JT0NUTChpcnF3YWl0LCBhcmdwLCBzaXplb2YoaXJxd2FpdCkpOwogCWlmIChpcnF3YWl0LnJlcXVlc3QuaXJxID49IGRldl9wcml2LT5udW1faXJxcykgewotCQlEUk1fRVJST1IoIiVzIFRyeWluZyB0byB3YWl0IG9uIHVua25vd24gaXJxICVkXG4iLCBfX0ZVTkNUSU9OX18sIAorCQlEUk1fRVJST1IoIiVzIFRyeWluZyB0byB3YWl0IG9uIHVua25vd24gaXJxICVkXG4iLCBfX0ZVTkNUSU9OX18sCiAJCQkgIGlycXdhaXQucmVxdWVzdC5pcnEpOwogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCX0KQEAgLTMyMCw3ICszMjQsNyBAQAogCX0KIAogCWlmIChpcnF3YWl0LnJlcXVlc3QudHlwZSAmIFZJQV9JUlFfU0lHTkFMKSB7Ci0JCURSTV9FUlJPUigiJXMgU2lnbmFscyBvbiBWaWEgSVJRcyBub3QgaW1wbGVtZW50ZWQgeWV0LlxuIiwgCisJCURSTV9FUlJPUigiJXMgU2lnbmFscyBvbiBWaWEgSVJRcyBub3QgaW1wbGVtZW50ZWQgeWV0LlxuIiwKIAkJCSAgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9tYXAuYyBiL2RyaXZlcnMvY2hhci9kcm0vdmlhX21hcC5jCmluZGV4IGJiMTcxMTMuLjZiZDZhYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vdmlhX21hcC5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vdmlhX21hcC5jCkBAIC02Niw3ICs2Niw3IEBACiAKIAlkZXZfcHJpdi0+YWdwQWRkciA9IGluaXQtPmFncEFkZHI7CiAKLQl2aWFfaW5pdF9mdXRleCggZGV2X3ByaXYgKTsKKwl2aWFfaW5pdF9mdXRleChkZXZfcHJpdik7CiAJZGV2X3ByaXYtPnByb19ncm91cF9hID0gKGRldi0+cGRldi0+ZGV2aWNlID09IDB4MzExOCk7CiAKIAlkZXYtPmRldl9wcml2YXRlID0gKHZvaWQgKilkZXZfcHJpdjsKQEAgLTEwNyw1ICsxMDcsMyBAQAogCiAJcmV0dXJuIC1FSU5WQUw7CiB9Ci0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS92aWFfbW0uYyBiL2RyaXZlcnMvY2hhci9kcm0vdmlhX21tLmMKaW5kZXggMTM5MjFmMy4uM2JhZGRhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS92aWFfbW0uYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9tbS5jCkBAIC04MSw3ICs4MSw4IEBACiAKIAlBZ3BIZWFwID0gdmlhX21tSW5pdChhZ3Aub2Zmc2V0LCBhZ3Auc2l6ZSk7CiAKLQlEUk1fREVCVUcoIm9mZnNldCA9ICVsdSwgc2l6ZSA9ICVsdSIsICh1bnNpZ25lZCBsb25nKWFncC5vZmZzZXQsICh1bnNpZ25lZCBsb25nKWFncC5zaXplKTsKKwlEUk1fREVCVUcoIm9mZnNldCA9ICVsdSwgc2l6ZSA9ICVsdSIsICh1bnNpZ25lZCBsb25nKWFncC5vZmZzZXQsCisJCSAgKHVuc2lnbmVkIGxvbmcpYWdwLnNpemUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC05Nyw3ICs5OCw4IEBACiAKIAlGQkhlYXAgPSB2aWFfbW1Jbml0KGZiLm9mZnNldCwgZmIuc2l6ZSk7CiAKLQlEUk1fREVCVUcoIm9mZnNldCA9ICVsdSwgc2l6ZSA9ICVsdSIsICh1bnNpZ25lZCBsb25nKWZiLm9mZnNldCwgKHVuc2lnbmVkIGxvbmcpZmIuc2l6ZSk7CisJRFJNX0RFQlVHKCJvZmZzZXQgPSAlbHUsIHNpemUgPSAlbHUiLCAodW5zaWduZWQgbG9uZylmYi5vZmZzZXQsCisJCSAgKHVuc2lnbmVkIGxvbmcpZmIuc2l6ZSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEzNCw4ICsxMzYsOCBAQAogfQogCiBpbnQgdmlhX2ZpbmFsX2NvbnRleHQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNvbnRleHQpCi17CQotICAgICAgICBpbnQgaTsKK3sKKwlpbnQgaTsKIAlkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX3ZpYV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKIAogCWZvciAoaSA9IDA7IGkgPCBNQVhfQ09OVEVYVDsgaSsrKQpAQCAtMTcxLDE0ICsxNzMsMTMgQEAKIAkJdmlhX3NldERlc3Ryb3koc2V0KTsKIAkJZ2xvYmFsX3Bwcml2W2ldLnVzZWQgPSAwOwogCX0KLQl2aWFfcmVsZWFzZV9mdXRleChkZXZfcHJpdiwgY29udGV4dCk7IAotCQotCQkJCisJdmlhX3JlbGVhc2VfZnV0ZXgoZGV2X3ByaXYsIGNvbnRleHQpOworCiAjaWYgZGVmaW5lZChfX2xpbnV4X18pCiAJLyogTGludXggc3BlY2lmaWMgdW50aWwgY29udGV4dCB0cmFja2luZyBjb2RlIGdldHMgcG9ydGVkIHRvIEJTRCAqLwogCS8qIExhc3QgY29udGV4dCwgcGVyZm9ybSBjbGVhbnVwICovCiAJaWYgKGRldi0+Y3R4X2NvdW50ID09IDEgJiYgZGV2LT5kZXZfcHJpdmF0ZSkgewotCSAgICAgICAgRFJNX0RFQlVHKCJMYXN0IENvbnRleHRcbiIpOworCQlEUk1fREVCVUcoIkxhc3QgQ29udGV4dFxuIik7CiAJCWlmIChkZXYtPmlycSkKIAkJCWRybV9pcnFfdW5pbnN0YWxsKGRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vdmlhX3ZlcmlmaWVyLmMgYi9kcml2ZXJzL2NoYXIvZHJtL3ZpYV92ZXJpZmllci5jCmluZGV4IDA3OTIzYjAuLjRhYzQ5NWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vdmlhX3ZlcmlmaWVyLmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS92aWFfdmVyaWZpZXIuYwpAQCAtMjgsNyArMjgsNiBAQAogICogYmUgdmVyeSBzbG93LgogICovCiAKLQogI2luY2x1ZGUgInZpYV8zZF9yZWcuaCIKICNpbmNsdWRlICJkcm1QLmgiCiAjaW5jbHVkZSAiZHJtLmgiCkBAIC0zNiw3ICszNSw3IEBACiAjaW5jbHVkZSAidmlhX3ZlcmlmaWVyLmgiCiAjaW5jbHVkZSAidmlhX2Rydi5oIgogCi10eXBlZGVmIGVudW17Cit0eXBlZGVmIGVudW0gewogCXN0YXRlX2NvbW1hbmQsCiAJc3RhdGVfaGVhZGVyMiwKIAlzdGF0ZV9oZWFkZXIxLApAQCAtNDUsOCArNDQsNyBAQAogCXN0YXRlX2Vycm9yCiB9IHZlcmlmaWVyX3N0YXRlX3Q7CiAKLQotdHlwZWRlZiBlbnVtewordHlwZWRlZiBlbnVtIHsKIAlub19jaGVjayA9IDAsCiAJY2hlY2tfZm9yX2hlYWRlcjIsCiAJY2hlY2tfZm9yX2hlYWRlcjEsCkBAIC03NCwxNiArNzIsMTYgQEAKIAljaGVja19mb3JfdmVydGV4X2NvdW50LAogCWNoZWNrX251bWJlcl90ZXh1bml0cywKIAlmb3JiaWRkZW5fY29tbWFuZAotfWhhemFyZF90OworfSBoYXphcmRfdDsKIAogLyoKICAqIEFzc29jaWF0ZXMgZWFjaCBoYXphcmQgYWJvdmUgd2l0aCBhIHBvc3NpYmxlIG11bHRpLWNvbW1hbmQKICAqIHNlcXVlbmNlLiBGb3IgZXhhbXBsZSBhbiBhZGRyZXNzIHRoYXQgaXMgc3BsaXQgb3ZlciBtdWx0aXBsZQotICogY29tbWFuZHMgYW5kIHRoYXQgbmVlZHMgdG8gYmUgY2hlY2tlZCBhdCB0aGUgZmlyc3QgY29tbWFuZCAKKyAqIGNvbW1hbmRzIGFuZCB0aGF0IG5lZWRzIHRvIGJlIGNoZWNrZWQgYXQgdGhlIGZpcnN0IGNvbW1hbmQKICAqIHRoYXQgZG9lcyBub3QgaW5jbHVkZSBhbnkgcGFydCBvZiB0aGUgYWRkcmVzcy4KICAqLwogCi1zdGF0aWMgZHJtX3ZpYV9zZXF1ZW5jZV90IHNlcXNbXSA9IHsgCitzdGF0aWMgZHJtX3ZpYV9zZXF1ZW5jZV90IHNlcXNbXSA9IHsKIAlub19zZXF1ZW5jZSwKIAlub19zZXF1ZW5jZSwKIAlub19zZXF1ZW5jZSwKQEAgLTExMCwxNCArMTA4LDEyIEBACiAJdGV4X2FkZHJlc3MsCiAJbm9fc2VxdWVuY2UKIH07Ci0gICAgCi10eXBlZGVmIHN0cnVjdHsKKwordHlwZWRlZiBzdHJ1Y3QgewogCXVuc2lnbmVkIGludCBjb2RlOwogCWhhemFyZF90IGh6OwogfSBoel9pbml0X3Q7CiAKLQotCiBzdGF0aWMgaHpfaW5pdF90IGluaXRfdGFibGUxW10gPSB7CiAJezB4ZjIsIGNoZWNrX2Zvcl9oZWFkZXIyX2Vycn0sCiAJezB4ZjAsIGNoZWNrX2Zvcl9oZWFkZXIxX2Vycn0sCkBAIC0xNjksOCArMTY1LDYgQEAKIAl7MHg3RCwgY2hlY2tfZm9yX3ZlcnRleF9jb3VudH0KIH07CiAKLSAgIAotCQkgICAgICAgCiBzdGF0aWMgaHpfaW5pdF90IGluaXRfdGFibGUyW10gPSB7CiAJezB4ZjIsIGNoZWNrX2Zvcl9oZWFkZXIyX2Vycn0sCiAJezB4ZjAsIGNoZWNrX2Zvcl9oZWFkZXIxX2Vycn0sCkBAIC0yMzUsNDkgKzIyOSw0OSBAQAogCXsweGNjLCBjaGVja19mb3JfZHVtbXl9LAogCXsweDAwLCBjaGVja19udW1iZXJfdGV4dW5pdHN9CiB9OwotICAgCi0JCSAgICAgICAKLXN0YXRpYyBoYXphcmRfdCB0YWJsZTFbMjU2XTsgCi1zdGF0aWMgaGF6YXJkX3QgdGFibGUyWzI1Nl07IAotc3RhdGljIGhhemFyZF90IHRhYmxlM1syNTZdOyAKIAotCitzdGF0aWMgaGF6YXJkX3QgdGFibGUxWzI1Nl07CitzdGF0aWMgaGF6YXJkX3QgdGFibGUyWzI1Nl07CitzdGF0aWMgaGF6YXJkX3QgdGFibGUzWzI1Nl07CiAKIHN0YXRpYyBfX2lubGluZV9fIGludAotZWF0X3dvcmRzKGNvbnN0IHVpbnQzMl90ICoqYnVmLCBjb25zdCB1aW50MzJfdCAqYnVmX2VuZCwgdW5zaWduZWQgbnVtX3dvcmRzKQorZWF0X3dvcmRzKGNvbnN0IHVpbnQzMl90ICoqIGJ1ZiwgY29uc3QgdWludDMyX3QgKiBidWZfZW5kLCB1bnNpZ25lZCBudW1fd29yZHMpCiB7CiAJaWYgKCgqYnVmIC0gYnVmX2VuZCkgPj0gbnVtX3dvcmRzKSB7CiAJCSpidWYgKz0gbnVtX3dvcmRzOwogCQlyZXR1cm4gMDsKLQl9IAorCX0KIAlEUk1fRVJST1IoIklsbGVnYWwgdGVybWluYXRpb24gb2YgRE1BIGNvbW1hbmQgYnVmZmVyXG4iKTsKIAlyZXR1cm4gMTsKIH0KIAotCiAvKgogICogUGFydGlhbGx5IHN0b2xlbiBmcm9tIGRybV9tZW1vcnkuaAogICovCiAKLXN0YXRpYyBfX2lubGluZV9fIGRybV9tYXBfdCAqCi12aWFfZHJtX2xvb2t1cF9hZ3BfbWFwIChkcm1fdmlhX3N0YXRlX3QgKnNlcSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgCi0JCQlkcm1fZGV2aWNlX3QgKmRldikKK3N0YXRpYyBfX2lubGluZV9fIGRybV9tYXBfdCAqdmlhX2RybV9sb29rdXBfYWdwX21hcChkcm1fdmlhX3N0YXRlX3QgKiBzZXEsCisJCQkJCQkgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkJCQkgICAgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJCQkJICAgIGRybV9kZXZpY2VfdCAqIGRldikKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OwogCWRybV9tYXBfbGlzdF90ICpyX2xpc3Q7CiAJZHJtX21hcF90ICptYXAgPSBzZXEtPm1hcF9jYWNoZTsKIAotCWlmIChtYXAgJiYgbWFwLT5vZmZzZXQgPD0gb2Zmc2V0ICYmIChvZmZzZXQgKyBzaXplKSA8PSAobWFwLT5vZmZzZXQgKyBtYXAtPnNpemUpKSB7CisJaWYgKG1hcCAmJiBtYXAtPm9mZnNldCA8PSBvZmZzZXQKKwkgICAgJiYgKG9mZnNldCArIHNpemUpIDw9IChtYXAtPm9mZnNldCArIG1hcC0+c2l6ZSkpIHsKIAkJcmV0dXJuIG1hcDsKIAl9Ci0JCQorCiAJbGlzdF9mb3JfZWFjaChsaXN0LCAmZGV2LT5tYXBsaXN0LT5oZWFkKSB7CiAJCXJfbGlzdCA9IChkcm1fbWFwX2xpc3RfdCAqKSBsaXN0OwogCQltYXAgPSByX2xpc3QtPm1hcDsKIAkJaWYgKCFtYXApCiAJCQljb250aW51ZTsKLQkJaWYgKG1hcC0+b2Zmc2V0IDw9IG9mZnNldCAmJiAob2Zmc2V0ICsgc2l6ZSkgPD0gKG1hcC0+b2Zmc2V0ICsgbWFwLT5zaXplKSAmJiAKLQkJICAgICEobWFwLT5mbGFncyAmIF9EUk1fUkVTVFJJQ1RFRCkgJiYgKG1hcC0+dHlwZSA9PSBfRFJNX0FHUCkpIHsKKwkJaWYgKG1hcC0+b2Zmc2V0IDw9IG9mZnNldAorCQkgICAgJiYgKG9mZnNldCArIHNpemUpIDw9IChtYXAtPm9mZnNldCArIG1hcC0+c2l6ZSkKKwkJICAgICYmICEobWFwLT5mbGFncyAmIF9EUk1fUkVTVFJJQ1RFRCkKKwkJICAgICYmIChtYXAtPnR5cGUgPT0gX0RSTV9BR1ApKSB7CiAJCQlzZXEtPm1hcF9jYWNoZSA9IG1hcDsKIAkJCXJldHVybiBtYXA7CiAJCX0KQEAgLTI4NSw1NCArMjc5LDYwIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLQogLyoKLSAqIFJlcXVpcmUgdGhhdCBhbGwgQUdQIHRleHR1cmUgbGV2ZWxzIHJlc2lkZSBpbiB0aGUgc2FtZSBBR1AgbWFwIHdoaWNoIHNob3VsZCAKKyAqIFJlcXVpcmUgdGhhdCBhbGwgQUdQIHRleHR1cmUgbGV2ZWxzIHJlc2lkZSBpbiB0aGUgc2FtZSBBR1AgbWFwIHdoaWNoIHNob3VsZAogICogYmUgbWFwcGFibGUgYnkgdGhlIGNsaWVudC4gVGhpcyBpcyBub3QgYSBiaWcgcmVzdHJpY3Rpb24uCi0gKiBGSVhNRTogVG8gYWN0dWFsbHkgZW5mb3JjZSB0aGlzIHNlY3VyaXR5IHBvbGljeSBzdHJpY3RseSwgZHJtX3JtbWFwIAotICogd291bGQgaGF2ZSB0byB3YWl0IGZvciBkbWEgcXVpZXNjZW50IGJlZm9yZSByZW1vdmluZyBhbiBBR1AgbWFwLiAKKyAqIEZJWE1FOiBUbyBhY3R1YWxseSBlbmZvcmNlIHRoaXMgc2VjdXJpdHkgcG9saWN5IHN0cmljdGx5LCBkcm1fcm1tYXAKKyAqIHdvdWxkIGhhdmUgdG8gd2FpdCBmb3IgZG1hIHF1aWVzY2VudCBiZWZvcmUgcmVtb3ZpbmcgYW4gQUdQIG1hcC4KICAqIFRoZSB2aWFfZHJtX2xvb2t1cF9hZ3BfbWFwIGNhbGwgaW4gcmVhbGl0eSBzZWVtcyB0byB0YWtlCiAgKiB2ZXJ5IGxpdHRsZSBDUFUgdGltZS4KICAqLwogCi0KLXN0YXRpYyBfX2lubGluZV9fIGludAotZmluaXNoX2N1cnJlbnRfc2VxdWVuY2UoZHJtX3ZpYV9zdGF0ZV90ICpjdXJfc2VxKSAKK3N0YXRpYyBfX2lubGluZV9fIGludCBmaW5pc2hfY3VycmVudF9zZXF1ZW5jZShkcm1fdmlhX3N0YXRlX3QgKiBjdXJfc2VxKQogewotCXN3aXRjaChjdXJfc2VxLT51bmZpbmlzaGVkKSB7CisJc3dpdGNoIChjdXJfc2VxLT51bmZpbmlzaGVkKSB7CiAJY2FzZSB6X2FkZHJlc3M6CiAJCURSTV9ERUJVRygiWiBCdWZmZXIgc3RhcnQgYWRkcmVzcyBpcyAweCV4XG4iLCBjdXJfc2VxLT56X2FkZHIpOwogCQlicmVhazsKIAljYXNlIGRlc3RfYWRkcmVzczoKLQkJRFJNX0RFQlVHKCJEZXN0aW5hdGlvbiBzdGFydCBhZGRyZXNzIGlzIDB4JXhcbiIsIGN1cl9zZXEtPmRfYWRkcik7CisJCURSTV9ERUJVRygiRGVzdGluYXRpb24gc3RhcnQgYWRkcmVzcyBpcyAweCV4XG4iLAorCQkJICBjdXJfc2VxLT5kX2FkZHIpOwogCQlicmVhazsKIAljYXNlIHRleF9hZGRyZXNzOgotCQlpZiAoY3VyX3NlcS0+YWdwX3RleHR1cmUpIHsJCQkgCi0JCQl1bnNpZ25lZCBzdGFydCA9IGN1cl9zZXEtPnRleF9sZXZlbF9sb1tjdXJfc2VxLT50ZXh0dXJlXTsKKwkJaWYgKGN1cl9zZXEtPmFncF90ZXh0dXJlKSB7CisJCQl1bnNpZ25lZCBzdGFydCA9CisJCQkgICAgY3VyX3NlcS0+dGV4X2xldmVsX2xvW2N1cl9zZXEtPnRleHR1cmVdOwogCQkJdW5zaWduZWQgZW5kID0gY3VyX3NlcS0+dGV4X2xldmVsX2hpW2N1cl9zZXEtPnRleHR1cmVdOwotCQkJdW5zaWduZWQgbG9uZyBsbz1+MCwgaGk9MCwgdG1wOworCQkJdW5zaWduZWQgbG9uZyBsbyA9IH4wLCBoaSA9IDAsIHRtcDsKIAkJCXVpbnQzMl90ICphZGRyLCAqcGl0Y2gsICpoZWlnaHQsIHRleDsKIAkJCXVuc2lnbmVkIGk7CiAKLQkJCWlmIChlbmQgPiA5KSBlbmQgPSA5OwotCQkJaWYgKHN0YXJ0ID4gOSkgc3RhcnQgPSA5OworCQkJaWYgKGVuZCA+IDkpCisJCQkJZW5kID0gOTsKKwkJCWlmIChzdGFydCA+IDkpCisJCQkJc3RhcnQgPSA5OwogCi0JCQlhZGRyID0mKGN1cl9zZXEtPnRfYWRkclt0ZXggPSBjdXJfc2VxLT50ZXh0dXJlXVtzdGFydF0pOworCQkJYWRkciA9CisJCQkgICAgJihjdXJfc2VxLT50X2FkZHJbdGV4ID0gY3VyX3NlcS0+dGV4dHVyZV1bc3RhcnRdKTsKIAkJCXBpdGNoID0gJihjdXJfc2VxLT5waXRjaFt0ZXhdW3N0YXJ0XSk7CiAJCQloZWlnaHQgPSAmKGN1cl9zZXEtPmhlaWdodFt0ZXhdW3N0YXJ0XSk7CiAKLQkJCWZvciAoaT1zdGFydDsgaTw9IGVuZDsgKytpKSB7CisJCQlmb3IgKGkgPSBzdGFydDsgaSA8PSBlbmQ7ICsraSkgewogCQkJCXRtcCA9ICphZGRyKys7Ci0JCQkJaWYgKHRtcCA8IGxvKSBsbyA9IHRtcDsKKwkJCQlpZiAodG1wIDwgbG8pCisJCQkJCWxvID0gdG1wOwogCQkJCXRtcCArPSAoKmhlaWdodCsrIDw8ICpwaXRjaCsrKTsKLQkJCQlpZiAodG1wID4gaGkpIGhpID0gdG1wOworCQkJCWlmICh0bXAgPiBoaSkKKwkJCQkJaGkgPSB0bXA7CiAJCQl9CiAKLQkJCWlmICghIHZpYV9kcm1fbG9va3VwX2FncF9tYXAgKGN1cl9zZXEsIGxvLCBoaSAtIGxvLCBjdXJfc2VxLT5kZXYpKSB7Ci0JCQkJRFJNX0VSUk9SKCJBR1AgdGV4dHVyZSBpcyBub3QgaW4gYWxsb3dlZCBtYXBcbiIpOworCQkJaWYgKCF2aWFfZHJtX2xvb2t1cF9hZ3BfbWFwCisJCQkgICAgKGN1cl9zZXEsIGxvLCBoaSAtIGxvLCBjdXJfc2VxLT5kZXYpKSB7CisJCQkJRFJNX0VSUk9SCisJCQkJICAgICgiQUdQIHRleHR1cmUgaXMgbm90IGluIGFsbG93ZWQgbWFwXG4iKTsKIAkJCQlyZXR1cm4gMjsKIAkJCX0KLQkJfQkKKwkJfQogCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKQEAgLTM0MSw3MyArMzQxLDg0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIGludCAKLWludmVzdGlnYXRlX2hhemFyZCggdWludDMyX3QgY21kLCBoYXphcmRfdCBoeiwgZHJtX3ZpYV9zdGF0ZV90ICpjdXJfc2VxKQorc3RhdGljIF9faW5saW5lX18gaW50CitpbnZlc3RpZ2F0ZV9oYXphcmQodWludDMyX3QgY21kLCBoYXphcmRfdCBoeiwgZHJtX3ZpYV9zdGF0ZV90ICogY3VyX3NlcSkKIHsKIAlyZWdpc3RlciB1aW50MzJfdCB0bXAsICp0bXBfYWRkcjsKIAogCWlmIChjdXJfc2VxLT51bmZpbmlzaGVkICYmIChjdXJfc2VxLT51bmZpbmlzaGVkICE9IHNlcXNbaHpdKSkgewogCQlpbnQgcmV0OwotCQlpZiAoKHJldCA9IGZpbmlzaF9jdXJyZW50X3NlcXVlbmNlKGN1cl9zZXEpKSkgcmV0dXJuIHJldDsKKwkJaWYgKChyZXQgPSBmaW5pc2hfY3VycmVudF9zZXF1ZW5jZShjdXJfc2VxKSkpCisJCQlyZXR1cm4gcmV0OwogCX0KIAotCXN3aXRjaChoeikgeworCXN3aXRjaCAoaHopIHsKIAljYXNlIGNoZWNrX2Zvcl9oZWFkZXIyOgotCQlpZiAoY21kID09IEhBTENZT05fSEVBREVSMikgcmV0dXJuIDE7CisJCWlmIChjbWQgPT0gSEFMQ1lPTl9IRUFERVIyKQorCQkJcmV0dXJuIDE7CiAJCXJldHVybiAwOwogCWNhc2UgY2hlY2tfZm9yX2hlYWRlcjE6Ci0JCWlmICgoY21kICYgSEFMQ1lPTl9IRUFERVIxTUFTSykgPT0gSEFMQ1lPTl9IRUFERVIxKSByZXR1cm4gMTsKKwkJaWYgKChjbWQgJiBIQUxDWU9OX0hFQURFUjFNQVNLKSA9PSBIQUxDWU9OX0hFQURFUjEpCisJCQlyZXR1cm4gMTsKIAkJcmV0dXJuIDA7CiAJY2FzZSBjaGVja19mb3JfaGVhZGVyMl9lcnI6Ci0JCWlmIChjbWQgPT0gSEFMQ1lPTl9IRUFERVIyKSByZXR1cm4gMTsKKwkJaWYgKGNtZCA9PSBIQUxDWU9OX0hFQURFUjIpCisJCQlyZXR1cm4gMTsKIAkJRFJNX0VSUk9SKCJJbGxlZ2FsIERNQSBIQUxDWU9OX0hFQURFUjIgY29tbWFuZFxuIik7CiAJCWJyZWFrOwogCWNhc2UgY2hlY2tfZm9yX2hlYWRlcjFfZXJyOgotCQlpZiAoKGNtZCAmIEhBTENZT05fSEVBREVSMU1BU0spID09IEhBTENZT05fSEVBREVSMSkgcmV0dXJuIDE7CisJCWlmICgoY21kICYgSEFMQ1lPTl9IRUFERVIxTUFTSykgPT0gSEFMQ1lPTl9IRUFERVIxKQorCQkJcmV0dXJuIDE7CiAJCURSTV9FUlJPUigiSWxsZWdhbCBETUEgSEFMQ1lPTl9IRUFERVIxIGNvbW1hbmRcbiIpOwogCQlicmVhazsKIAljYXNlIGNoZWNrX2Zvcl9maXJlOgotCQlpZiAoKGNtZCAmIEhBTENZT05fRklSRU1BU0spID09IEhBTENZT05fRklSRUNNRCkgcmV0dXJuIDE7IAorCQlpZiAoKGNtZCAmIEhBTENZT05fRklSRU1BU0spID09IEhBTENZT05fRklSRUNNRCkKKwkJCXJldHVybiAxOwogCQlEUk1fRVJST1IoIklsbGVnYWwgRE1BIEhBTENZT05fRklSRUNNRCBjb21tYW5kXG4iKTsKIAkJYnJlYWs7CiAJY2FzZSBjaGVja19mb3JfZHVtbXk6Ci0JCWlmIChIQ19EVU1NWSA9PSBjbWQpIHJldHVybiAwOworCQlpZiAoSENfRFVNTVkgPT0gY21kKQorCQkJcmV0dXJuIDA7CiAJCURSTV9FUlJPUigiSWxsZWdhbCBETUEgSENfRFVNTVkgY29tbWFuZFxuIik7CiAJCWJyZWFrOwogCWNhc2UgY2hlY2tfZm9yX2RkOgotCQlpZiAoMHhkZGRkZGRkZCA9PSBjbWQpIHJldHVybiAwOworCQlpZiAoMHhkZGRkZGRkZCA9PSBjbWQpCisJCQlyZXR1cm4gMDsKIAkJRFJNX0VSUk9SKCJJbGxlZ2FsIERNQSAweGRkZGRkZGRkIGNvbW1hbmRcbiIpOwogCQlicmVhazsKIAljYXNlIGNoZWNrX3pfYnVmZmVyX2FkZHIwOgogCQljdXJfc2VxLT51bmZpbmlzaGVkID0gel9hZGRyZXNzOwogCQljdXJfc2VxLT56X2FkZHIgPSAoY3VyX3NlcS0+el9hZGRyICYgMHhGRjAwMDAwMCkgfAotCQkJKGNtZCAmIDB4MDBGRkZGRkYpOworCQkgICAgKGNtZCAmIDB4MDBGRkZGRkYpOwogCQlyZXR1cm4gMDsKIAljYXNlIGNoZWNrX3pfYnVmZmVyX2FkZHIxOgogCQljdXJfc2VxLT51bmZpbmlzaGVkID0gel9hZGRyZXNzOwogCQljdXJfc2VxLT56X2FkZHIgPSAoY3VyX3NlcS0+el9hZGRyICYgMHgwMEZGRkZGRikgfAotCQkJKChjbWQgJiAweEZGKSA8PCAyNCk7CisJCSAgICAoKGNtZCAmIDB4RkYpIDw8IDI0KTsKIAkJcmV0dXJuIDA7CiAJY2FzZSBjaGVja196X2J1ZmZlcl9hZGRyX21vZGU6CiAJCWN1cl9zZXEtPnVuZmluaXNoZWQgPSB6X2FkZHJlc3M7Ci0JCWlmICgoY21kICYgMHgwMDAwQzAwMCkgPT0gMCkgcmV0dXJuIDA7CisJCWlmICgoY21kICYgMHgwMDAwQzAwMCkgPT0gMCkKKwkJCXJldHVybiAwOwogCQlEUk1fRVJST1IoIkF0dGVtcHQgdG8gcGxhY2UgWiBidWZmZXIgaW4gc3lzdGVtIG1lbW9yeVxuIik7CiAJCXJldHVybiAyOwogCWNhc2UgY2hlY2tfZGVzdGluYXRpb25fYWRkcjA6CiAJCWN1cl9zZXEtPnVuZmluaXNoZWQgPSBkZXN0X2FkZHJlc3M7CiAJCWN1cl9zZXEtPmRfYWRkciA9IChjdXJfc2VxLT5kX2FkZHIgJiAweEZGMDAwMDAwKSB8Ci0JCQkoY21kICYgMHgwMEZGRkZGRik7CisJCSAgICAoY21kICYgMHgwMEZGRkZGRik7CiAJCXJldHVybiAwOwogCWNhc2UgY2hlY2tfZGVzdGluYXRpb25fYWRkcjE6CiAJCWN1cl9zZXEtPnVuZmluaXNoZWQgPSBkZXN0X2FkZHJlc3M7CiAJCWN1cl9zZXEtPmRfYWRkciA9IChjdXJfc2VxLT5kX2FkZHIgJiAweDAwRkZGRkZGKSB8Ci0JCQkoKGNtZCAmIDB4RkYpIDw8IDI0KTsKKwkJICAgICgoY21kICYgMHhGRikgPDwgMjQpOwogCQlyZXR1cm4gMDsKIAljYXNlIGNoZWNrX2Rlc3RpbmF0aW9uX2FkZHJfbW9kZToKIAkJY3VyX3NlcS0+dW5maW5pc2hlZCA9IGRlc3RfYWRkcmVzczsKLQkJaWYgKChjbWQgJiAweDAwMDBDMDAwKSA9PSAwKSByZXR1cm4gMDsKLQkJRFJNX0VSUk9SKCJBdHRlbXB0IHRvIHBsYWNlIDNEIGRyYXdpbmcgYnVmZmVyIGluIHN5c3RlbSBtZW1vcnlcbiIpOwotCQlyZXR1cm4gMjsJICAgIAorCQlpZiAoKGNtZCAmIDB4MDAwMEMwMDApID09IDApCisJCQlyZXR1cm4gMDsKKwkJRFJNX0VSUk9SCisJCSAgICAoIkF0dGVtcHQgdG8gcGxhY2UgM0QgZHJhd2luZyBidWZmZXIgaW4gc3lzdGVtIG1lbW9yeVxuIik7CisJCXJldHVybiAyOwogCWNhc2UgY2hlY2tfdGV4dHVyZV9hZGRyMDoKIAkJY3VyX3NlcS0+dW5maW5pc2hlZCA9IHRleF9hZGRyZXNzOwogCQl0bXAgPSAoY21kID4+IDI0KTsKQEAgLTQzMyw5ICs0NDQsMTEgQEAKIAljYXNlIGNoZWNrX3RleHR1cmVfYWRkcjM6CiAJCWN1cl9zZXEtPnVuZmluaXNoZWQgPSB0ZXhfYWRkcmVzczsKIAkJdG1wID0gKChjbWQgPj4gMjQpIC0gMHgyQik7Ci0JCWN1cl9zZXEtPnBpdGNoW2N1cl9zZXEtPnRleHR1cmVdW3RtcF0gPSAoY21kICYgMHgwMEYwMDAwMCkgPj4gMjA7CisJCWN1cl9zZXEtPnBpdGNoW2N1cl9zZXEtPnRleHR1cmVdW3RtcF0gPQorCQkgICAgKGNtZCAmIDB4MDBGMDAwMDApID4+IDIwOwogCQlpZiAoIXRtcCAmJiAoY21kICYgMHgwMDBGRkZGRikpIHsKLQkJCURSTV9FUlJPUigiVW5pbXBsZW1lbnRlZCB0ZXh0dXJlIGxldmVsIDAgcGl0Y2ggbW9kZS5cbiIpOworCQkJRFJNX0VSUk9SCisJCQkgICAgKCJVbmltcGxlbWVudGVkIHRleHR1cmUgbGV2ZWwgMCBwaXRjaCBtb2RlLlxuIik7CiAJCQlyZXR1cm4gMjsKIAkJfQogCQlyZXR1cm4gMDsKQEAgLTQ0OSw3ICs0NjIsNyBAQAogCQljdXJfc2VxLT51bmZpbmlzaGVkID0gdGV4X2FkZHJlc3M7CiAJCS8qCiAJCSAqIFRleHR1cmUgd2lkdGguIFdlIGRvbid0IGNhcmUgc2luY2Ugd2UgaGF2ZSB0aGUgcGl0Y2guCi0JCSAqLyAgCisJCSAqLwogCQlyZXR1cm4gMDsKIAljYXNlIGNoZWNrX3RleHR1cmVfYWRkcjc6CiAJCWN1cl9zZXEtPnVuZmluaXNoZWQgPSB0ZXhfYWRkcmVzczsKQEAgLTQ2NSwyNSArNDc4LDI2IEBACiAJCWN1cl9zZXEtPnVuZmluaXNoZWQgPSB0ZXhfYWRkcmVzczsKIAkJdG1wX2FkZHIgPSAmKGN1cl9zZXEtPmhlaWdodFtjdXJfc2VxLT50ZXh0dXJlXVswXSk7CiAJCXRtcF9hZGRyWzldID0gMSA8PCAoKGNtZCAmIDB4MDAwMEYwMDApID4+IDEyKTsKLQkgICAgICAgIHRtcF9hZGRyWzhdID0gMSA8PCAoKGNtZCAmIDB4MDAwMDBGMDApID4+IDgpOworCQl0bXBfYWRkcls4XSA9IDEgPDwgKChjbWQgJiAweDAwMDAwRjAwKSA+PiA4KTsKIAkJdG1wX2FkZHJbN10gPSAxIDw8ICgoY21kICYgMHgwMDAwMDBGMCkgPj4gNCk7CiAJCXRtcF9hZGRyWzZdID0gMSA8PCAoY21kICYgMHgwMDAwMDAwRik7CiAJCXJldHVybiAwOwogCWNhc2UgY2hlY2tfdGV4dHVyZV9hZGRyX21vZGU6CiAJCWN1cl9zZXEtPnVuZmluaXNoZWQgPSB0ZXhfYWRkcmVzczsKLQkJaWYgKCAyID09ICh0bXAgPSBjbWQgJiAweDAwMDAwMDAzKSkgewotCQkJRFJNX0VSUk9SKCJBdHRlbXB0IHRvIGZldGNoIHRleHR1cmUgZnJvbSBzeXN0ZW0gbWVtb3J5LlxuIik7IAorCQlpZiAoMiA9PSAodG1wID0gY21kICYgMHgwMDAwMDAwMykpIHsKKwkJCURSTV9FUlJPUgorCQkJICAgICgiQXR0ZW1wdCB0byBmZXRjaCB0ZXh0dXJlIGZyb20gc3lzdGVtIG1lbW9yeS5cbiIpOwogCQkJcmV0dXJuIDI7CiAJCX0KIAkJY3VyX3NlcS0+YWdwX3RleHR1cmUgPSAodG1wID09IDMpOwotCQljdXJfc2VxLT50ZXhfcGFsZXR0ZV9zaXplW2N1cl9zZXEtPnRleHR1cmVdID0gCi0JCQkoY21kID4+IDE2KSAmIDB4MDAwMDAwMDA3OworCQljdXJfc2VxLT50ZXhfcGFsZXR0ZV9zaXplW2N1cl9zZXEtPnRleHR1cmVdID0KKwkJICAgIChjbWQgPj4gMTYpICYgMHgwMDAwMDAwMDc7CiAJCXJldHVybiAwOwogCWNhc2UgY2hlY2tfZm9yX3ZlcnRleF9jb3VudDoKIAkJY3VyX3NlcS0+dmVydGV4X2NvdW50ID0gY21kICYgMHgwMDAwRkZGRjsKIAkJcmV0dXJuIDA7CiAJY2FzZSBjaGVja19udW1iZXJfdGV4dW5pdHM6Ci0JICAgICAgICBjdXJfc2VxLT5tdWx0aXRleCA9IChjbWQgPj4gMykgJiAxOworCQljdXJfc2VxLT5tdWx0aXRleCA9IChjbWQgPj4gMykgJiAxOwogCQlyZXR1cm4gMDsKIAlkZWZhdWx0OgogCQlEUk1fRVJST1IoIklsbGVnYWwgRE1BIGRhdGE6IDB4JXhcbiIsIGNtZCk7CkBAIC00OTIsMjUgKzUwNiwyNyBAQAogCXJldHVybiAyOwogfQogCi0KIHN0YXRpYyBfX2lubGluZV9fIGludAotdmlhX2NoZWNrX3ByaW1fbGlzdCh1aW50MzJfdCBjb25zdCAqKmJ1ZmZlciwgY29uc3QgdWludDMyX3QgKmJ1Zl9lbmQsCi0JCSAgICBkcm1fdmlhX3N0YXRlX3QgKmN1cl9zZXEpCit2aWFfY2hlY2tfcHJpbV9saXN0KHVpbnQzMl90IGNvbnN0ICoqYnVmZmVyLCBjb25zdCB1aW50MzJfdCAqIGJ1Zl9lbmQsCisJCSAgICBkcm1fdmlhX3N0YXRlX3QgKiBjdXJfc2VxKQogewotCWRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1fdmlhX3ByaXZhdGVfdCAqKSBjdXJfc2VxLT5kZXYtPmRldl9wcml2YXRlOwotCXVpbnQzMl90IGFfZmlyZSwgYmNtZCAsIGR3X2NvdW50OworCWRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiA9CisJICAgIChkcm1fdmlhX3ByaXZhdGVfdCAqKSBjdXJfc2VxLT5kZXYtPmRldl9wcml2YXRlOworCXVpbnQzMl90IGFfZmlyZSwgYmNtZCwgZHdfY291bnQ7CiAJaW50IHJldCA9IDA7CiAJaW50IGhhdmVfZmlyZTsKIAljb25zdCB1aW50MzJfdCAqYnVmID0gKmJ1ZmZlcjsKIAotCXdoaWxlKGJ1ZiA8IGJ1Zl9lbmQpIHsKLQkgICAgICAgIGhhdmVfZmlyZSA9IDA7CisJd2hpbGUgKGJ1ZiA8IGJ1Zl9lbmQpIHsKKwkJaGF2ZV9maXJlID0gMDsKIAkJaWYgKChidWZfZW5kIC0gYnVmKSA8IDIpIHsKLQkJCURSTV9FUlJPUigiVW5leHBlY3RlZCB0ZXJtaW5hdGlvbiBvZiBwcmltaXRpdmUgbGlzdC5cbiIpOworCQkJRFJNX0VSUk9SCisJCQkgICAgKCJVbmV4cGVjdGVkIHRlcm1pbmF0aW9uIG9mIHByaW1pdGl2ZSBsaXN0LlxuIik7CiAJCQlyZXQgPSAxOwogCQkJYnJlYWs7CiAJCX0KLQkJaWYgKCgqYnVmICYgSENfQUNNRF9NQVNLKSAhPSBIQ19BQ01EX0hDbWRCKSBicmVhazsKKwkJaWYgKCgqYnVmICYgSENfQUNNRF9NQVNLKSAhPSBIQ19BQ01EX0hDbWRCKQorCQkJYnJlYWs7CiAJCWJjbWQgPSAqYnVmKys7CiAJCWlmICgoKmJ1ZiAmIEhDX0FDTURfTUFTSykgIT0gSENfQUNNRF9IQ21kQSkgewogCQkJRFJNX0VSUk9SKCJFeHBlY3RlZCBWZXJ0ZXggTGlzdCBBIGNvbW1hbmQsIGdvdCAweCV4XG4iLApAQCAtNTE4LDQzICs1MzQsNTYgQEAKIAkJCXJldCA9IDE7CiAJCQlicmVhazsKIAkJfQotCQlhX2ZpcmUgPSAqYnVmKysgfCBIQ19IUExFTkRfTUFTSyB8IEhDX0hQTVZhbGlkTl9NQVNLIHwgSENfSEUzRmlyZV9NQVNLOwkKLQkKKwkJYV9maXJlID0KKwkJICAgICpidWYrKyB8IEhDX0hQTEVORF9NQVNLIHwgSENfSFBNVmFsaWROX01BU0sgfAorCQkgICAgSENfSEUzRmlyZV9NQVNLOworCiAJCS8qCiAJCSAqIEhvdyBtYW55IGR3b3JkcyBwZXIgdmVydGV4ID8KLQkJICovIAotCQkKKwkJICovCisKIAkJaWYgKGN1cl9zZXEtPmFncCAmJiAoKGJjbWQgJiAoMHhGIDw8IDExKSkgPT0gMCkpIHsKIAkJCURSTV9FUlJPUigiSWxsZWdhbCBCIGNvbW1hbmQgdmVydGV4IGRhdGEgZm9yIEFHUC5cbiIpOwogCQkJcmV0ID0gMTsKIAkJCWJyZWFrOwotCQl9IAorCQl9CiAKIAkJZHdfY291bnQgPSAwOwotCQlpZiAoYmNtZCAmICgxIDw8IDcpKSBkd19jb3VudCArPSAoY3VyX3NlcS0+bXVsdGl0ZXgpID8gMjoxOwotCQlpZiAoYmNtZCAmICgxIDw8IDgpKSBkd19jb3VudCArPSAoY3VyX3NlcS0+bXVsdGl0ZXgpID8gMjoxOwotCQlpZiAoYmNtZCAmICgxIDw8IDkpKSBkd19jb3VudCsrOwotCQlpZiAoYmNtZCAmICgxIDw8IDEwKSkgZHdfY291bnQrKzsKLQkJaWYgKGJjbWQgJiAoMSA8PCAxMSkpIGR3X2NvdW50Kys7Ci0JCWlmIChiY21kICYgKDEgPDwgMTIpKSBkd19jb3VudCsrOwotCQlpZiAoYmNtZCAmICgxIDw8IDEzKSkgZHdfY291bnQrKzsKLQkJaWYgKGJjbWQgJiAoMSA8PCAxNCkpIGR3X2NvdW50Kys7CisJCWlmIChiY21kICYgKDEgPDwgNykpCisJCQlkd19jb3VudCArPSAoY3VyX3NlcS0+bXVsdGl0ZXgpID8gMiA6IDE7CisJCWlmIChiY21kICYgKDEgPDwgOCkpCisJCQlkd19jb3VudCArPSAoY3VyX3NlcS0+bXVsdGl0ZXgpID8gMiA6IDE7CisJCWlmIChiY21kICYgKDEgPDwgOSkpCisJCQlkd19jb3VudCsrOworCQlpZiAoYmNtZCAmICgxIDw8IDEwKSkKKwkJCWR3X2NvdW50Kys7CisJCWlmIChiY21kICYgKDEgPDwgMTEpKQorCQkJZHdfY291bnQrKzsKKwkJaWYgKGJjbWQgJiAoMSA8PCAxMikpCisJCQlkd19jb3VudCsrOworCQlpZiAoYmNtZCAmICgxIDw8IDEzKSkKKwkJCWR3X2NvdW50Kys7CisJCWlmIChiY21kICYgKDEgPDwgMTQpKQorCQkJZHdfY291bnQrKzsKIAotCQl3aGlsZShidWYgPCBidWZfZW5kKSB7CisJCXdoaWxlIChidWYgPCBidWZfZW5kKSB7CiAJCQlpZiAoKmJ1ZiA9PSBhX2ZpcmUpIHsKLQkJCQlpZiAoZGV2X3ByaXYtPm51bV9maXJlX29mZnNldHMgPj0gVklBX0ZJUkVfQlVGX1NJWkUpIHsKKwkJCQlpZiAoZGV2X3ByaXYtPm51bV9maXJlX29mZnNldHMgPj0KKwkJCQkgICAgVklBX0ZJUkVfQlVGX1NJWkUpIHsKIAkJCQkJRFJNX0VSUk9SKCJGaXJlIG9mZnNldCBidWZmZXIgZnVsbC5cbiIpOwogCQkJCQlyZXQgPSAxOwogCQkJCQlicmVhazsKIAkJCQl9Ci0JCQkJZGV2X3ByaXYtPmZpcmVfb2Zmc2V0c1tkZXZfcHJpdi0+bnVtX2ZpcmVfb2Zmc2V0cysrXSA9IGJ1ZjsKLQkJCSAgICAgICAgaGF2ZV9maXJlID0gMTsKKwkJCQlkZXZfcHJpdi0+ZmlyZV9vZmZzZXRzW2Rldl9wcml2LT4KKwkJCQkJCSAgICAgICBudW1fZmlyZV9vZmZzZXRzKytdID0KKwkJCQkgICAgYnVmOworCQkJCWhhdmVfZmlyZSA9IDE7CiAJCQkJYnVmKys7Ci0JCQkJaWYgKGJ1ZiA8IGJ1Zl9lbmQgJiYgKmJ1ZiA9PSBhX2ZpcmUpIAorCQkJCWlmIChidWYgPCBidWZfZW5kICYmICpidWYgPT0gYV9maXJlKQogCQkJCQlidWYrKzsKIAkJCQlicmVhazsKIAkJCX0KLQkJCWlmICgoKmJ1ZiA9PSBIQUxDWU9OX0hFQURFUjIpIHx8IAorCQkJaWYgKCgqYnVmID09IEhBTENZT05fSEVBREVSMikgfHwKIAkJCSAgICAoKCpidWYgJiBIQUxDWU9OX0ZJUkVNQVNLKSA9PSBIQUxDWU9OX0ZJUkVDTUQpKSB7CiAJCQkJRFJNX0VSUk9SKCJNaXNzaW5nIFZlcnRleCBGaXJlIGNvbW1hbmQsICIKIAkJCQkJICAiU3RyYXkgVmVydGV4IEZpcmUgY29tbWFuZCAgb3IgdmVyaWZpZXIgIgpAQCAtNTc2LDE4ICs2MDUsMTQgQEAKIAkJCXJldCA9IDE7CiAJCQlicmVhazsKIAkJfQotCX0gCisJfQogCSpidWZmZXIgPSBidWY7CiAJcmV0dXJuIHJldDsKIH0KIAotCi0JCSAgICAgICAKLQotCiBzdGF0aWMgX19pbmxpbmVfXyB2ZXJpZmllcl9zdGF0ZV90Ci12aWFfY2hlY2tfaGVhZGVyMiggdWludDMyX3QgY29uc3QgKipidWZmZXIsIGNvbnN0IHVpbnQzMl90ICpidWZfZW5kLCAKLQkJICAgZHJtX3ZpYV9zdGF0ZV90ICpoY19zdGF0ZSkKK3ZpYV9jaGVja19oZWFkZXIyKHVpbnQzMl90IGNvbnN0ICoqYnVmZmVyLCBjb25zdCB1aW50MzJfdCAqIGJ1Zl9lbmQsCisJCSAgZHJtX3ZpYV9zdGF0ZV90ICogaGNfc3RhdGUpCiB7CiAJdWludDMyX3QgY21kOwogCWludCBoel9tb2RlOwpAQCAtNTk1LDE3ICs2MjAsMTcgQEAKIAljb25zdCB1aW50MzJfdCAqYnVmID0gKmJ1ZmZlcjsKIAljb25zdCBoYXphcmRfdCAqaHpfdGFibGU7CiAKLQogCWlmICgoYnVmX2VuZCAtIGJ1ZikgPCAyKSB7Ci0JCURSTV9FUlJPUigiSWxsZWdhbCB0ZXJtaW5hdGlvbiBvZiBETUEgSEFMQ1lPTl9IRUFERVIyIHNlcXVlbmNlLlxuIik7CisJCURSTV9FUlJPUgorCQkgICAgKCJJbGxlZ2FsIHRlcm1pbmF0aW9uIG9mIERNQSBIQUxDWU9OX0hFQURFUjIgc2VxdWVuY2UuXG4iKTsKIAkJcmV0dXJuIHN0YXRlX2Vycm9yOwogCX0KIAlidWYrKzsKIAljbWQgPSAoKmJ1ZisrICYgMHhGRkZGMDAwMCkgPj4gMTY7CiAKLQlzd2l0Y2goY21kKSB7CisJc3dpdGNoIChjbWQpIHsKIAljYXNlIEhDX1BhcmFUeXBlX0NtZFZkYXRhOgotCQlpZiAodmlhX2NoZWNrX3ByaW1fbGlzdCgmYnVmLCBidWZfZW5kLCBoY19zdGF0ZSApKSAKKwkJaWYgKHZpYV9jaGVja19wcmltX2xpc3QoJmJ1ZiwgYnVmX2VuZCwgaGNfc3RhdGUpKQogCQkJcmV0dXJuIHN0YXRlX2Vycm9yOwogCQkqYnVmZmVyID0gYnVmOwogCQlyZXR1cm4gc3RhdGVfY29tbWFuZDsKQEAgLTY1MCwxMyArNjc1LDEzIEBACiAJCSAqLwogCiAJCURSTV9FUlJPUigiSW52YWxpZCBvciB1bmltcGxlbWVudGVkIEhBTENZT05fSEVBREVSMiAiCi0JCQkgICJETUEgc3ViY29tbWFuZDogMHgleC4gUHJldmlvdXMgZHdvcmQ6IDB4JXhcbiIsIAotCQkJICBjbWQsICooYnVmIC0yKSk7CisJCQkgICJETUEgc3ViY29tbWFuZDogMHgleC4gUHJldmlvdXMgZHdvcmQ6IDB4JXhcbiIsCisJCQkgIGNtZCwgKihidWYgLSAyKSk7CiAJCSpidWZmZXIgPSBidWY7CiAJCXJldHVybiBzdGF0ZV9lcnJvcjsKIAl9CiAKLQl3aGlsZShidWYgPCBidWZfZW5kKSB7CisJd2hpbGUgKGJ1ZiA8IGJ1Zl9lbmQpIHsKIAkJY21kID0gKmJ1ZisrOwogCQlpZiAoKGh6ID0gaHpfdGFibGVbY21kID4+IDI0XSkpIHsKIAkJCWlmICgoaHpfbW9kZSA9IGludmVzdGlnYXRlX2hhemFyZChjbWQsIGh6LCBoY19zdGF0ZSkpKSB7CkBAIC02NjYsNyArNjkxLDcgQEAKIAkJCQl9CiAJCQkJcmV0dXJuIHN0YXRlX2Vycm9yOwogCQkJfQotCQl9IGVsc2UgaWYgKGhjX3N0YXRlLT51bmZpbmlzaGVkICYmIAorCQl9IGVsc2UgaWYgKGhjX3N0YXRlLT51bmZpbmlzaGVkICYmCiAJCQkgICBmaW5pc2hfY3VycmVudF9zZXF1ZW5jZShoY19zdGF0ZSkpIHsKIAkJCXJldHVybiBzdGF0ZV9lcnJvcjsKIAkJfQpAQCAtNjc5LDY0ICs3MDQsNjUgQEAKIH0KIAogc3RhdGljIF9faW5saW5lX18gdmVyaWZpZXJfc3RhdGVfdAotdmlhX3BhcnNlX2hlYWRlcjIoIGRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiwgdWludDMyX3QgY29uc3QgKipidWZmZXIsIGNvbnN0IHVpbnQzMl90ICpidWZfZW5kLAotCQkgICBpbnQgKmZpcmVfY291bnQpCit2aWFfcGFyc2VfaGVhZGVyMihkcm1fdmlhX3ByaXZhdGVfdCAqIGRldl9wcml2LCB1aW50MzJfdCBjb25zdCAqKmJ1ZmZlciwKKwkJICBjb25zdCB1aW50MzJfdCAqIGJ1Zl9lbmQsIGludCAqZmlyZV9jb3VudCkKIHsKIAl1aW50MzJfdCBjbWQ7CiAJY29uc3QgdWludDMyX3QgKmJ1ZiA9ICpidWZmZXI7Ci0JY29uc3QgdWludDMyX3QgKm5leHRfZmlyZTsgCisJY29uc3QgdWludDMyX3QgKm5leHRfZmlyZTsKIAlpbnQgYnVyc3QgPSAwOwogCiAJbmV4dF9maXJlID0gZGV2X3ByaXYtPmZpcmVfb2Zmc2V0c1sqZmlyZV9jb3VudF07CiAJYnVmKys7CiAJY21kID0gKCpidWYgJiAweEZGRkYwMDAwKSA+PiAxNjsKIAlWSUFfV1JJVEUoSENfUkVHX1RSQU5TX1NFVCArIEhDX1JFR19CQVNFLCAqYnVmKyspOwotCXN3aXRjaChjbWQpIHsKKwlzd2l0Y2ggKGNtZCkgewogCWNhc2UgSENfUGFyYVR5cGVfQ21kVmRhdGE6CiAJCXdoaWxlICgoYnVmIDwgYnVmX2VuZCkgJiYKLQkJICAgICAgICgqZmlyZV9jb3VudCA8IGRldl9wcml2LT5udW1fZmlyZV9vZmZzZXRzKSAmJiAKLQkJICAgICAgICgqYnVmICYgSENfQUNNRF9NQVNLKSA9PSBIQ19BQ01EX0hDbWRCICkgewotCQkJd2hpbGUoYnVmIDw9IG5leHRfZmlyZSkgewotCQkJCVZJQV9XUklURShIQ19SRUdfVFJBTlNfU1BBQ0UgKyBIQ19SRUdfQkFTRSArIChidXJzdCAmIDYzKSwgKmJ1ZisrKTsKKwkJICAgICAgICgqZmlyZV9jb3VudCA8IGRldl9wcml2LT5udW1fZmlyZV9vZmZzZXRzKSAmJgorCQkgICAgICAgKCpidWYgJiBIQ19BQ01EX01BU0spID09IEhDX0FDTURfSENtZEIpIHsKKwkJCXdoaWxlIChidWYgPD0gbmV4dF9maXJlKSB7CisJCQkJVklBX1dSSVRFKEhDX1JFR19UUkFOU19TUEFDRSArIEhDX1JFR19CQVNFICsKKwkJCQkJICAoYnVyc3QgJiA2MyksICpidWYrKyk7CiAJCQkJYnVyc3QgKz0gNDsKIAkJCX0KLQkJCWlmICggKCBidWYgPCBidWZfZW5kICkgJiYgKCgqYnVmICYgSEFMQ1lPTl9GSVJFTUFTSykgPT0gSEFMQ1lPTl9GSVJFQ01EKSkKKwkJCWlmICgoYnVmIDwgYnVmX2VuZCkKKwkJCSAgICAmJiAoKCpidWYgJiBIQUxDWU9OX0ZJUkVNQVNLKSA9PSBIQUxDWU9OX0ZJUkVDTUQpKQogCQkJCWJ1ZisrOwogCi0JCQlpZiAoKysoKmZpcmVfY291bnQpIDwgZGV2X3ByaXYtPm51bV9maXJlX29mZnNldHMpIAorCQkJaWYgKCsrKCpmaXJlX2NvdW50KSA8IGRldl9wcml2LT5udW1fZmlyZV9vZmZzZXRzKQogCQkJCW5leHRfZmlyZSA9IGRldl9wcml2LT5maXJlX29mZnNldHNbKmZpcmVfY291bnRdOwogCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXdoaWxlKGJ1ZiA8IGJ1Zl9lbmQpIHsKLQkJCQotCQkJaWYgKCAqYnVmID09IEhDX0hFQURFUjIgfHwKLQkJCSAgICAgKCpidWYgJiBIQUxDWU9OX0hFQURFUjFNQVNLKSA9PSBIQUxDWU9OX0hFQURFUjEgIHx8Ci0JCQkgICAgICgqYnVmICYgVklBX1ZJREVPTUFTSykgPT0gVklBX1ZJREVPX0hFQURFUjUgfHwKLQkJCSAgICAgKCpidWYgJiBWSUFfVklERU9NQVNLKSA9PSBWSUFfVklERU9fSEVBREVSNiApIGJyZWFrOwotCQkJCi0JCQlWSUFfV1JJVEUoSENfUkVHX1RSQU5TX1NQQUNFICsgSENfUkVHX0JBU0UgKyAoYnVyc3QgJiA2MyksICpidWYrKyk7Ci0JCQlidXJzdCArPTQ7CisJCXdoaWxlIChidWYgPCBidWZfZW5kKSB7CisKKwkJCWlmICgqYnVmID09IEhDX0hFQURFUjIgfHwKKwkJCSAgICAoKmJ1ZiAmIEhBTENZT05fSEVBREVSMU1BU0spID09IEhBTENZT05fSEVBREVSMSB8fAorCQkJICAgICgqYnVmICYgVklBX1ZJREVPTUFTSykgPT0gVklBX1ZJREVPX0hFQURFUjUgfHwKKwkJCSAgICAoKmJ1ZiAmIFZJQV9WSURFT01BU0spID09IFZJQV9WSURFT19IRUFERVI2KQorCQkJCWJyZWFrOworCisJCQlWSUFfV1JJVEUoSENfUkVHX1RSQU5TX1NQQUNFICsgSENfUkVHX0JBU0UgKworCQkJCSAgKGJ1cnN0ICYgNjMpLCAqYnVmKyspOworCQkJYnVyc3QgKz0gNDsKIAkJfQogCX0KIAkqYnVmZmVyID0gYnVmOwogCXJldHVybiBzdGF0ZV9jb21tYW5kOwogfQogCi0KLQotc3RhdGljIF9faW5saW5lX18gaW50Ci12ZXJpZnlfbW1pb19hZGRyZXNzKCB1aW50MzJfdCBhZGRyZXNzKQorc3RhdGljIF9faW5saW5lX18gaW50IHZlcmlmeV9tbWlvX2FkZHJlc3ModWludDMyX3QgYWRkcmVzcykKIHsKLQlpZiAoKGFkZHJlc3MgPiAweDNGRikgJiYgKGFkZHJlc3MgPCAweEMwMCApKSB7CisJaWYgKChhZGRyZXNzID4gMHgzRkYpICYmIChhZGRyZXNzIDwgMHhDMDApKSB7CiAJCURSTV9FUlJPUigiSW52YWxpZCBWSURFTyBETUEgY29tbWFuZC4gIgogCQkJICAiQXR0ZW1wdCB0byBhY2Nlc3MgM0QtIG9yIGNvbW1hbmQgYnVyc3QgYXJlYS5cbiIpOwogCQlyZXR1cm4gMTsKIAl9IGVsc2UgaWYgKChhZGRyZXNzID4gMHhDRkYpICYmIChhZGRyZXNzIDwgMHgxMzAwKSkgewogCQlEUk1fRVJST1IoIkludmFsaWQgVklERU8gRE1BIGNvbW1hbmQuICIKIAkJCSAgIkF0dGVtcHQgdG8gYWNjZXNzIFBDSSBETUEgYXJlYS5cbiIpOwotCQlyZXR1cm4gMTsJCQotCX0gZWxzZSBpZiAoYWRkcmVzcyA+IDB4MTNGRiApIHsKKwkJcmV0dXJuIDE7CisJfSBlbHNlIGlmIChhZGRyZXNzID4gMHgxM0ZGKSB7CiAJCURSTV9FUlJPUigiSW52YWxpZCBWSURFTyBETUEgY29tbWFuZC4gIgogCQkJICAiQXR0ZW1wdCB0byBhY2Nlc3MgVkdBIHJlZ2lzdGVycy5cbiIpOwogCQlyZXR1cm4gMTsKQEAgLTc0NSw3ICs3NzEsOCBAQAogfQogCiBzdGF0aWMgX19pbmxpbmVfXyBpbnQKLXZlcmlmeV92aWRlb190YWlsKCB1aW50MzJfdCBjb25zdCAqKmJ1ZmZlciwgY29uc3QgdWludDMyX3QgKmJ1Zl9lbmQsIHVpbnQzMl90IGR3b3JkcykgCit2ZXJpZnlfdmlkZW9fdGFpbCh1aW50MzJfdCBjb25zdCAqKmJ1ZmZlciwgY29uc3QgdWludDMyX3QgKiBidWZfZW5kLAorCQkgIHVpbnQzMl90IGR3b3JkcykKIHsKIAljb25zdCB1aW50MzJfdCAqYnVmID0gKmJ1ZmZlcjsKIApAQCAtNzYyLDEwICs3ODksOSBAQAogCSpidWZmZXIgPSBidWY7CiAJcmV0dXJuIDA7CiB9Ci0JCQogCiBzdGF0aWMgX19pbmxpbmVfXyB2ZXJpZmllcl9zdGF0ZV90Ci12aWFfY2hlY2tfaGVhZGVyMSggdWludDMyX3QgY29uc3QgKipidWZmZXIsIGNvbnN0IHVpbnQzMl90ICpidWZfZW5kICkKK3ZpYV9jaGVja19oZWFkZXIxKHVpbnQzMl90IGNvbnN0ICoqYnVmZmVyLCBjb25zdCB1aW50MzJfdCAqIGJ1Zl9lbmQpCiB7CiAJdWludDMyX3QgY21kOwogCWNvbnN0IHVpbnQzMl90ICpidWYgPSAqYnVmZmVyOwpAQCAtNzc0LDIxICs4MDAsMjEgQEAKIAl3aGlsZSAoYnVmIDwgYnVmX2VuZCkgewogCQljbWQgPSAqYnVmOwogCQlpZiAoKGNtZCA+ICgoMHgzRkYgPj4gMikgfCBIQUxDWU9OX0hFQURFUjEpKSAmJgotCQkgICAgKGNtZCA8ICgoMHhDMDAgPj4gMikgfCBIQUxDWU9OX0hFQURFUjEpKSkgewkJCQotCQkJaWYgKChjbWQgJiBIQUxDWU9OX0hFQURFUjFNQVNLKSAhPSBIQUxDWU9OX0hFQURFUjEpIAorCQkgICAgKGNtZCA8ICgoMHhDMDAgPj4gMikgfCBIQUxDWU9OX0hFQURFUjEpKSkgeworCQkJaWYgKChjbWQgJiBIQUxDWU9OX0hFQURFUjFNQVNLKSAhPSBIQUxDWU9OX0hFQURFUjEpCiAJCQkJYnJlYWs7CiAJCQlEUk1fRVJST1IoIkludmFsaWQgSEFMQ1lPTl9IRUFERVIxIGNvbW1hbmQuICIKIAkJCQkgICJBdHRlbXB0IHRvIGFjY2VzcyAzRC0gb3IgY29tbWFuZCBidXJzdCBhcmVhLlxuIik7CiAJCQlyZXQgPSBzdGF0ZV9lcnJvcjsKIAkJCWJyZWFrOwogCQl9IGVsc2UgaWYgKGNtZCA+ICgoMHhDRkYgPj4gMikgfCBIQUxDWU9OX0hFQURFUjEpKSB7Ci0JCQlpZiAoKGNtZCAmIEhBTENZT05fSEVBREVSMU1BU0spICE9IEhBTENZT05fSEVBREVSMSkgCisJCQlpZiAoKGNtZCAmIEhBTENZT05fSEVBREVSMU1BU0spICE9IEhBTENZT05fSEVBREVSMSkKIAkJCQlicmVhazsKIAkJCURSTV9FUlJPUigiSW52YWxpZCBIQUxDWU9OX0hFQURFUjEgY29tbWFuZC4gIgogCQkJCSAgIkF0dGVtcHQgdG8gYWNjZXNzIFZHQSByZWdpc3RlcnMuXG4iKTsKIAkJCXJldCA9IHN0YXRlX2Vycm9yOwotCQkJYnJlYWs7CQkJCi0JCX0gZWxzZSB7CQkJCisJCQlicmVhazsKKwkJfSBlbHNlIHsKIAkJCWJ1ZiArPSAyOwogCQl9CiAJfQpAQCAtNzk3LDE1ICs4MjMsMTcgQEAKIH0KIAogc3RhdGljIF9faW5saW5lX18gdmVyaWZpZXJfc3RhdGVfdAotdmlhX3BhcnNlX2hlYWRlcjEoIGRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiwgdWludDMyX3QgY29uc3QgKipidWZmZXIsIGNvbnN0IHVpbnQzMl90ICpidWZfZW5kICkKK3ZpYV9wYXJzZV9oZWFkZXIxKGRybV92aWFfcHJpdmF0ZV90ICogZGV2X3ByaXYsIHVpbnQzMl90IGNvbnN0ICoqYnVmZmVyLAorCQkgIGNvbnN0IHVpbnQzMl90ICogYnVmX2VuZCkKIHsKIAlyZWdpc3RlciB1aW50MzJfdCBjbWQ7CiAJY29uc3QgdWludDMyX3QgKmJ1ZiA9ICpidWZmZXI7CiAKIAl3aGlsZSAoYnVmIDwgYnVmX2VuZCkgewogCQljbWQgPSAqYnVmOwotCQlpZiAoKGNtZCAmIEhBTENZT05fSEVBREVSMU1BU0spICE9IEhBTENZT05fSEVBREVSMSkgYnJlYWs7Ci0JCVZJQV9XUklURSggKGNtZCAmIH5IQUxDWU9OX0hFQURFUjFNQVNLKSA8PCAyLCAqKytidWYpOyAKKwkJaWYgKChjbWQgJiBIQUxDWU9OX0hFQURFUjFNQVNLKSAhPSBIQUxDWU9OX0hFQURFUjEpCisJCQlicmVhazsKKwkJVklBX1dSSVRFKChjbWQgJiB+SEFMQ1lPTl9IRUFERVIxTUFTSykgPDwgMiwgKisrYnVmKTsKIAkJYnVmKys7CiAJfQogCSpidWZmZXIgPSBidWY7CkBAIC04MTMsNyArODQxLDcgQEAKIH0KIAogc3RhdGljIF9faW5saW5lX18gdmVyaWZpZXJfc3RhdGVfdAotdmlhX2NoZWNrX3ZoZWFkZXI1KCB1aW50MzJfdCBjb25zdCAqKmJ1ZmZlciwgY29uc3QgdWludDMyX3QgKmJ1Zl9lbmQgKQordmlhX2NoZWNrX3ZoZWFkZXI1KHVpbnQzMl90IGNvbnN0ICoqYnVmZmVyLCBjb25zdCB1aW50MzJfdCAqIGJ1Zl9lbmQpCiB7CiAJdWludDMyX3QgZGF0YTsKIAljb25zdCB1aW50MzJfdCAqYnVmID0gKmJ1ZmZlcjsKQEAgLTgzNiw0MSArODY0LDQxIEBACiAJCURSTV9FUlJPUigiSWxsZWdhbCBoZWFkZXI1IGhlYWRlciBkYXRhXG4iKTsKIAkJcmV0dXJuIHN0YXRlX2Vycm9yOwogCX0KLQlpZiAoZWF0X3dvcmRzKCZidWYsIGJ1Zl9lbmQsIGRhdGEpKSAKKwlpZiAoZWF0X3dvcmRzKCZidWYsIGJ1Zl9lbmQsIGRhdGEpKQogCQlyZXR1cm4gc3RhdGVfZXJyb3I7Ci0JaWYgKChkYXRhICYgMykgJiYgdmVyaWZ5X3ZpZGVvX3RhaWwoJmJ1ZiwgYnVmX2VuZCwgNCAtIChkYXRhICYgMykpKSAKKwlpZiAoKGRhdGEgJiAzKSAmJiB2ZXJpZnlfdmlkZW9fdGFpbCgmYnVmLCBidWZfZW5kLCA0IC0gKGRhdGEgJiAzKSkpCiAJCXJldHVybiBzdGF0ZV9lcnJvcjsKIAkqYnVmZmVyID0gYnVmOwogCXJldHVybiBzdGF0ZV9jb21tYW5kOwotCSAgICAgICAKLX0gCisKK30KIAogc3RhdGljIF9faW5saW5lX18gdmVyaWZpZXJfc3RhdGVfdAotdmlhX3BhcnNlX3ZoZWFkZXI1KCBkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYsIHVpbnQzMl90IGNvbnN0ICoqYnVmZmVyLCBjb25zdCB1aW50MzJfdCAqYnVmX2VuZCApCit2aWFfcGFyc2VfdmhlYWRlcjUoZHJtX3ZpYV9wcml2YXRlX3QgKiBkZXZfcHJpdiwgdWludDMyX3QgY29uc3QgKipidWZmZXIsCisJCSAgIGNvbnN0IHVpbnQzMl90ICogYnVmX2VuZCkKIHsKLSAgdWludDMyX3QgYWRkciwgY291bnQsIGk7CisJdWludDMyX3QgYWRkciwgY291bnQsIGk7CiAJY29uc3QgdWludDMyX3QgKmJ1ZiA9ICpidWZmZXI7Ci0JCisKIAlhZGRyID0gKmJ1ZisrICYgflZJQV9WSURFT01BU0s7CiAJaSA9IGNvdW50ID0gKmJ1ZjsKIAlidWYgKz0gMzsKLQl3aGlsZShpLS0pIHsKKwl3aGlsZSAoaS0tKSB7CiAJCVZJQV9XUklURShhZGRyLCAqYnVmKyspOwogCX0KLQlpZiAoY291bnQgJiAzKSBidWYgKz0gNCAtIChjb3VudCAmIDMpOworCWlmIChjb3VudCAmIDMpCisJCWJ1ZiArPSA0IC0gKGNvdW50ICYgMyk7CiAJKmJ1ZmZlciA9IGJ1ZjsKLQlyZXR1cm4gc3RhdGVfY29tbWFuZDsJICAgICAgIAotfSAKLQorCXJldHVybiBzdGF0ZV9jb21tYW5kOworfQogCiBzdGF0aWMgX19pbmxpbmVfXyB2ZXJpZmllcl9zdGF0ZV90Ci12aWFfY2hlY2tfdmhlYWRlcjYoIHVpbnQzMl90IGNvbnN0ICoqYnVmZmVyLCBjb25zdCB1aW50MzJfdCAqYnVmX2VuZCApCit2aWFfY2hlY2tfdmhlYWRlcjYodWludDMyX3QgY29uc3QgKipidWZmZXIsIGNvbnN0IHVpbnQzMl90ICogYnVmX2VuZCkKIHsKIAl1aW50MzJfdCBkYXRhOwogCWNvbnN0IHVpbnQzMl90ICpidWYgPSAqYnVmZmVyOwogCXVpbnQzMl90IGk7CiAKLQogCWlmIChidWZfZW5kIC0gYnVmIDwgNCkgewogCQlEUk1fRVJST1IoIklsbGVnYWwgdGVybWluYXRpb24gb2YgdmlkZW8gaGVhZGVyNiBjb21tYW5kXG4iKTsKIAkJcmV0dXJuIHN0YXRlX2Vycm9yOwpAQCAtODg5LDcgKzkxNyw3IEBACiAJCURSTV9FUlJPUigiSWxsZWdhbCB0ZXJtaW5hdGlvbiBvZiB2aWRlbyBoZWFkZXI2IGNvbW1hbmRcbiIpOwogCQlyZXR1cm4gc3RhdGVfZXJyb3I7CiAJfQotCWZvciAoaT0wOyBpPGRhdGE7ICsraSkgeworCWZvciAoaSA9IDA7IGkgPCBkYXRhOyArK2kpIHsKIAkJaWYgKHZlcmlmeV9tbWlvX2FkZHJlc3MoKmJ1ZisrKSkKIAkJCXJldHVybiBzdGF0ZV9lcnJvcjsKIAkJYnVmKys7CkBAIC04OTksNDIgKzkyNyw0MiBAQAogCQlyZXR1cm4gc3RhdGVfZXJyb3I7CiAJKmJ1ZmZlciA9IGJ1ZjsKIAlyZXR1cm4gc3RhdGVfY29tbWFuZDsKLX0gCit9CiAKIHN0YXRpYyBfX2lubGluZV9fIHZlcmlmaWVyX3N0YXRlX3QKLXZpYV9wYXJzZV92aGVhZGVyNiggZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2LCB1aW50MzJfdCBjb25zdCAqKmJ1ZmZlciwgY29uc3QgdWludDMyX3QgKmJ1Zl9lbmQgKQordmlhX3BhcnNlX3ZoZWFkZXI2KGRybV92aWFfcHJpdmF0ZV90ICogZGV2X3ByaXYsIHVpbnQzMl90IGNvbnN0ICoqYnVmZmVyLAorCQkgICBjb25zdCB1aW50MzJfdCAqIGJ1Zl9lbmQpCiB7CiAKLSAgdWludDMyX3QgYWRkciwgY291bnQsIGk7CisJdWludDMyX3QgYWRkciwgY291bnQsIGk7CiAJY29uc3QgdWludDMyX3QgKmJ1ZiA9ICpidWZmZXI7CiAKIAlpID0gY291bnQgPSAqKytidWY7CiAJYnVmICs9IDM7Ci0Jd2hpbGUoaS0tKSB7CisJd2hpbGUgKGktLSkgewogCQlhZGRyID0gKmJ1ZisrOwogCQlWSUFfV1JJVEUoYWRkciwgKmJ1ZisrKTsKIAl9CiAJY291bnQgPDw9IDE7Ci0JaWYgKGNvdW50ICYgMykgYnVmICs9IDQgLSAoY291bnQgJiAzKTsKKwlpZiAoY291bnQgJiAzKQorCQlidWYgKz0gNCAtIChjb3VudCAmIDMpOwogCSpidWZmZXIgPSBidWY7CiAJcmV0dXJuIHN0YXRlX2NvbW1hbmQ7Ci19IAorfQogCi0KLQotaW50IAotdmlhX3ZlcmlmeV9jb21tYW5kX3N0cmVhbShjb25zdCB1aW50MzJfdCAqIGJ1ZiwgdW5zaWduZWQgaW50IHNpemUsIGRybV9kZXZpY2VfdCAqZGV2LAotCQkJICBpbnQgYWdwKQoraW50Cit2aWFfdmVyaWZ5X2NvbW1hbmRfc3RyZWFtKGNvbnN0IHVpbnQzMl90ICogYnVmLCB1bnNpZ25lZCBpbnQgc2l6ZSwKKwkJCSAgZHJtX2RldmljZV90ICogZGV2LCBpbnQgYWdwKQogewogCiAJZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV92aWFfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CiAJZHJtX3ZpYV9zdGF0ZV90ICpoY19zdGF0ZSA9ICZkZXZfcHJpdi0+aGNfc3RhdGU7CiAJZHJtX3ZpYV9zdGF0ZV90IHNhdmVkX3N0YXRlID0gKmhjX3N0YXRlOwogCXVpbnQzMl90IGNtZDsKLQljb25zdCB1aW50MzJfdCAqYnVmX2VuZCA9IGJ1ZiArICggc2l6ZSA+PiAyICk7CisJY29uc3QgdWludDMyX3QgKmJ1Zl9lbmQgPSBidWYgKyAoc2l6ZSA+PiAyKTsKIAl2ZXJpZmllcl9zdGF0ZV90IHN0YXRlID0gc3RhdGVfY29tbWFuZDsKIAlpbnQgcHJvX2dyb3VwX2EgPSBkZXZfcHJpdi0+cHJvX2dyb3VwX2E7Ci0JCisKIAloY19zdGF0ZS0+ZGV2ID0gZGV2OwogCWhjX3N0YXRlLT51bmZpbmlzaGVkID0gbm9fc2VxdWVuY2U7CiAJaGNfc3RhdGUtPm1hcF9jYWNoZSA9IE5VTEw7CkBAIC05NDYsMzggKzk3NCw0MSBAQAogCiAJCXN3aXRjaCAoc3RhdGUpIHsKIAkJY2FzZSBzdGF0ZV9oZWFkZXIyOgotCQkgIHN0YXRlID0gdmlhX2NoZWNrX2hlYWRlcjIoICZidWYsIGJ1Zl9lbmQsIGhjX3N0YXRlICk7CisJCQlzdGF0ZSA9IHZpYV9jaGVja19oZWFkZXIyKCZidWYsIGJ1Zl9lbmQsIGhjX3N0YXRlKTsKIAkJCWJyZWFrOwogCQljYXNlIHN0YXRlX2hlYWRlcjE6Ci0JCQlzdGF0ZSA9IHZpYV9jaGVja19oZWFkZXIxKCAmYnVmLCBidWZfZW5kICk7CisJCQlzdGF0ZSA9IHZpYV9jaGVja19oZWFkZXIxKCZidWYsIGJ1Zl9lbmQpOwogCQkJYnJlYWs7CiAJCWNhc2Ugc3RhdGVfdmhlYWRlcjU6Ci0JCQlzdGF0ZSA9IHZpYV9jaGVja192aGVhZGVyNSggJmJ1ZiwgYnVmX2VuZCApOworCQkJc3RhdGUgPSB2aWFfY2hlY2tfdmhlYWRlcjUoJmJ1ZiwgYnVmX2VuZCk7CiAJCQlicmVhazsKIAkJY2FzZSBzdGF0ZV92aGVhZGVyNjoKLQkJCXN0YXRlID0gdmlhX2NoZWNrX3ZoZWFkZXI2KCAmYnVmLCBidWZfZW5kICk7CisJCQlzdGF0ZSA9IHZpYV9jaGVja192aGVhZGVyNigmYnVmLCBidWZfZW5kKTsKIAkJCWJyZWFrOwogCQljYXNlIHN0YXRlX2NvbW1hbmQ6Ci0JCQlpZiAoSEFMQ1lPTl9IRUFERVIyID09IChjbWQgPSAqYnVmKSkgCisJCQlpZiAoSEFMQ1lPTl9IRUFERVIyID09IChjbWQgPSAqYnVmKSkKIAkJCQlzdGF0ZSA9IHN0YXRlX2hlYWRlcjI7Ci0JCQllbHNlIGlmICgoY21kICYgSEFMQ1lPTl9IRUFERVIxTUFTSykgPT0gSEFMQ1lPTl9IRUFERVIxKSAKKwkJCWVsc2UgaWYgKChjbWQgJiBIQUxDWU9OX0hFQURFUjFNQVNLKSA9PSBIQUxDWU9OX0hFQURFUjEpCiAJCQkJc3RhdGUgPSBzdGF0ZV9oZWFkZXIxOwotCQkJZWxzZSBpZiAocHJvX2dyb3VwX2EgJiYgKGNtZCAmIFZJQV9WSURFT01BU0spID09IFZJQV9WSURFT19IRUFERVI1KQorCQkJZWxzZSBpZiAocHJvX2dyb3VwX2EKKwkJCQkgJiYgKGNtZCAmIFZJQV9WSURFT01BU0spID09IFZJQV9WSURFT19IRUFERVI1KQogCQkJCXN0YXRlID0gc3RhdGVfdmhlYWRlcjU7Ci0JCQllbHNlIGlmIChwcm9fZ3JvdXBfYSAmJiAoY21kICYgVklBX1ZJREVPTUFTSykgPT0gVklBX1ZJREVPX0hFQURFUjYpCisJCQllbHNlIGlmIChwcm9fZ3JvdXBfYQorCQkJCSAmJiAoY21kICYgVklBX1ZJREVPTUFTSykgPT0gVklBX1ZJREVPX0hFQURFUjYpCiAJCQkJc3RhdGUgPSBzdGF0ZV92aGVhZGVyNjsKIAkJCWVsc2UgewotCQkJCURSTV9FUlJPUigiSW52YWxpZCAvIFVuaW1wbGVtZW50ZWQgRE1BIEhFQURFUiBjb21tYW5kLiAweCV4XG4iLAotCQkJCQkgIGNtZCk7CisJCQkJRFJNX0VSUk9SCisJCQkJICAgICgiSW52YWxpZCAvIFVuaW1wbGVtZW50ZWQgRE1BIEhFQURFUiBjb21tYW5kLiAweCV4XG4iLAorCQkJCSAgICAgY21kKTsKIAkJCQlzdGF0ZSA9IHN0YXRlX2Vycm9yOwogCQkJfQogCQkJYnJlYWs7CiAJCWNhc2Ugc3RhdGVfZXJyb3I6CiAJCWRlZmF1bHQ6CiAJCQkqaGNfc3RhdGUgPSBzYXZlZF9zdGF0ZTsKLQkJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CQkJCisJCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCQl9Ci0JfQkKKwl9CiAJaWYgKHN0YXRlID09IHN0YXRlX2Vycm9yKSB7CiAJCSpoY19zdGF0ZSA9IHNhdmVkX3N0YXRlOwogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwpAQCAtOTg1LDc3ICsxMDE2LDgxIEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCAKLXZpYV9wYXJzZV9jb21tYW5kX3N0cmVhbShkcm1fZGV2aWNlX3QgKmRldiwgY29uc3QgdWludDMyX3QgKiBidWYsIHVuc2lnbmVkIGludCBzaXplKQoraW50Cit2aWFfcGFyc2VfY29tbWFuZF9zdHJlYW0oZHJtX2RldmljZV90ICogZGV2LCBjb25zdCB1aW50MzJfdCAqIGJ1ZiwKKwkJCSB1bnNpZ25lZCBpbnQgc2l6ZSkKIHsKIAogCWRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1fdmlhX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwogCXVpbnQzMl90IGNtZDsKLQljb25zdCB1aW50MzJfdCAqYnVmX2VuZCA9IGJ1ZiArICggc2l6ZSA+PiAyICk7CisJY29uc3QgdWludDMyX3QgKmJ1Zl9lbmQgPSBidWYgKyAoc2l6ZSA+PiAyKTsKIAl2ZXJpZmllcl9zdGF0ZV90IHN0YXRlID0gc3RhdGVfY29tbWFuZDsKIAlpbnQgZmlyZV9jb3VudCA9IDA7Ci0JCisKIAl3aGlsZSAoYnVmIDwgYnVmX2VuZCkgewogCiAJCXN3aXRjaCAoc3RhdGUpIHsKIAkJY2FzZSBzdGF0ZV9oZWFkZXIyOgotCQkgIHN0YXRlID0gdmlhX3BhcnNlX2hlYWRlcjIoIGRldl9wcml2LCAmYnVmLCBidWZfZW5kLCAmZmlyZV9jb3VudCApOworCQkJc3RhdGUgPQorCQkJICAgIHZpYV9wYXJzZV9oZWFkZXIyKGRldl9wcml2LCAmYnVmLCBidWZfZW5kLAorCQkJCQkgICAgICAmZmlyZV9jb3VudCk7CiAJCQlicmVhazsKIAkJY2FzZSBzdGF0ZV9oZWFkZXIxOgotCQkJc3RhdGUgPSB2aWFfcGFyc2VfaGVhZGVyMSggZGV2X3ByaXYsICZidWYsIGJ1Zl9lbmQgKTsKKwkJCXN0YXRlID0gdmlhX3BhcnNlX2hlYWRlcjEoZGV2X3ByaXYsICZidWYsIGJ1Zl9lbmQpOwogCQkJYnJlYWs7CiAJCWNhc2Ugc3RhdGVfdmhlYWRlcjU6Ci0JCQlzdGF0ZSA9IHZpYV9wYXJzZV92aGVhZGVyNSggZGV2X3ByaXYsICZidWYsIGJ1Zl9lbmQgKTsKKwkJCXN0YXRlID0gdmlhX3BhcnNlX3ZoZWFkZXI1KGRldl9wcml2LCAmYnVmLCBidWZfZW5kKTsKIAkJCWJyZWFrOwogCQljYXNlIHN0YXRlX3ZoZWFkZXI2OgotCQkJc3RhdGUgPSB2aWFfcGFyc2VfdmhlYWRlcjYoIGRldl9wcml2LCAmYnVmLCBidWZfZW5kICk7CisJCQlzdGF0ZSA9IHZpYV9wYXJzZV92aGVhZGVyNihkZXZfcHJpdiwgJmJ1ZiwgYnVmX2VuZCk7CiAJCQlicmVhazsKIAkJY2FzZSBzdGF0ZV9jb21tYW5kOgotCQkJaWYgKEhBTENZT05fSEVBREVSMiA9PSAoY21kID0gKmJ1ZikpIAorCQkJaWYgKEhBTENZT05fSEVBREVSMiA9PSAoY21kID0gKmJ1ZikpCiAJCQkJc3RhdGUgPSBzdGF0ZV9oZWFkZXIyOwotCQkJZWxzZSBpZiAoKGNtZCAmIEhBTENZT05fSEVBREVSMU1BU0spID09IEhBTENZT05fSEVBREVSMSkgCisJCQllbHNlIGlmICgoY21kICYgSEFMQ1lPTl9IRUFERVIxTUFTSykgPT0gSEFMQ1lPTl9IRUFERVIxKQogCQkJCXN0YXRlID0gc3RhdGVfaGVhZGVyMTsKIAkJCWVsc2UgaWYgKChjbWQgJiBWSUFfVklERU9NQVNLKSA9PSBWSUFfVklERU9fSEVBREVSNSkKIAkJCQlzdGF0ZSA9IHN0YXRlX3ZoZWFkZXI1OwogCQkJZWxzZSBpZiAoKGNtZCAmIFZJQV9WSURFT01BU0spID09IFZJQV9WSURFT19IRUFERVI2KQogCQkJCXN0YXRlID0gc3RhdGVfdmhlYWRlcjY7CiAJCQllbHNlIHsKLQkJCQlEUk1fRVJST1IoIkludmFsaWQgLyBVbmltcGxlbWVudGVkIERNQSBIRUFERVIgY29tbWFuZC4gMHgleFxuIiwKLQkJCQkJICBjbWQpOworCQkJCURSTV9FUlJPUgorCQkJCSAgICAoIkludmFsaWQgLyBVbmltcGxlbWVudGVkIERNQSBIRUFERVIgY29tbWFuZC4gMHgleFxuIiwKKwkJCQkgICAgIGNtZCk7CiAJCQkJc3RhdGUgPSBzdGF0ZV9lcnJvcjsKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIHN0YXRlX2Vycm9yOgogCQlkZWZhdWx0OgotCQkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsJCQkKKwkJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiAJCX0KLQl9CQorCX0KIAlpZiAoc3RhdGUgPT0gc3RhdGVfZXJyb3IpIHsKIAkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKLQotCi1zdGF0aWMgdm9pZCAKK3N0YXRpYyB2b2lkCiBzZXR1cF9oYXphcmRfdGFibGUoaHpfaW5pdF90IGluaXRfdGFibGVbXSwgaGF6YXJkX3QgdGFibGVbXSwgaW50IHNpemUpCiB7CiAJaW50IGk7CiAKLQlmb3IoaT0wOyBpPDI1NjsgKytpKSB7CisJZm9yIChpID0gMDsgaSA8IDI1NjsgKytpKSB7CiAJCXRhYmxlW2ldID0gZm9yYmlkZGVuX2NvbW1hbmQ7CiAJfQogCi0JZm9yKGk9MDsgaTxzaXplOyArK2kpIHsKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAJCXRhYmxlW2luaXRfdGFibGVbaV0uY29kZV0gPSBpbml0X3RhYmxlW2ldLmh6OwogCX0KIH0KIAotdm9pZCAKLXZpYV9pbml0X2NvbW1hbmRfdmVyaWZpZXIoIHZvaWQgKQordm9pZCB2aWFfaW5pdF9jb21tYW5kX3ZlcmlmaWVyKHZvaWQpCiB7Ci0Jc2V0dXBfaGF6YXJkX3RhYmxlKGluaXRfdGFibGUxLCB0YWJsZTEsIHNpemVvZihpbml0X3RhYmxlMSkgLyBzaXplb2YoaHpfaW5pdF90KSk7Ci0Jc2V0dXBfaGF6YXJkX3RhYmxlKGluaXRfdGFibGUyLCB0YWJsZTIsIHNpemVvZihpbml0X3RhYmxlMikgLyBzaXplb2YoaHpfaW5pdF90KSk7Ci0Jc2V0dXBfaGF6YXJkX3RhYmxlKGluaXRfdGFibGUzLCB0YWJsZTMsIHNpemVvZihpbml0X3RhYmxlMykgLyBzaXplb2YoaHpfaW5pdF90KSk7CisJc2V0dXBfaGF6YXJkX3RhYmxlKGluaXRfdGFibGUxLCB0YWJsZTEsCisJCQkgICBzaXplb2YoaW5pdF90YWJsZTEpIC8gc2l6ZW9mKGh6X2luaXRfdCkpOworCXNldHVwX2hhemFyZF90YWJsZShpbml0X3RhYmxlMiwgdGFibGUyLAorCQkJICAgc2l6ZW9mKGluaXRfdGFibGUyKSAvIHNpemVvZihoel9pbml0X3QpKTsKKwlzZXR1cF9oYXphcmRfdGFibGUoaW5pdF90YWJsZTMsIHRhYmxlMywKKwkJCSAgIHNpemVvZihpbml0X3RhYmxlMykgLyBzaXplb2YoaHpfaW5pdF90KSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3ZpYV92ZXJpZmllci5oIGIvZHJpdmVycy9jaGFyL2RybS92aWFfdmVyaWZpZXIuaAppbmRleCBhOGUxMzU5Li5lYjRlZGEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL3ZpYV92ZXJpZmllci5oCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vdmlhX3ZlcmlmaWVyLmgKQEAgLTI2LDIzICsyNiwyMSBAQAogI2lmbmRlZiBfVklBX1ZFUklGSUVSX0hfCiAjZGVmaW5lIF9WSUFfVkVSSUZJRVJfSF8KIAotdHlwZWRlZiBlbnVtewotCW5vX3NlcXVlbmNlID0gMCwgCit0eXBlZGVmIGVudW0geworCW5vX3NlcXVlbmNlID0gMCwKIAl6X2FkZHJlc3MsCiAJZGVzdF9hZGRyZXNzLAogCXRleF9hZGRyZXNzCi19ZHJtX3ZpYV9zZXF1ZW5jZV90OworfSBkcm1fdmlhX3NlcXVlbmNlX3Q7CiAKLQotCi10eXBlZGVmIHN0cnVjdHsKK3R5cGVkZWYgc3RydWN0IHsKIAl1bnNpZ25lZCB0ZXh0dXJlOwotCXVpbnQzMl90IHpfYWRkcjsgCi0JdWludDMyX3QgZF9hZGRyOyAKLSAgICAgICAgdWludDMyX3QgdF9hZGRyWzJdWzEwXTsKKwl1aW50MzJfdCB6X2FkZHI7CisJdWludDMyX3QgZF9hZGRyOworCXVpbnQzMl90IHRfYWRkclsyXVsxMF07CiAJdWludDMyX3QgcGl0Y2hbMl1bMTBdOwogCXVpbnQzMl90IGhlaWdodFsyXVsxMF07Ci0JdWludDMyX3QgdGV4X2xldmVsX2xvWzJdOyAKKwl1aW50MzJfdCB0ZXhfbGV2ZWxfbG9bMl07CiAJdWludDMyX3QgdGV4X2xldmVsX2hpWzJdOwogCXVpbnQzMl90IHRleF9wYWxldHRlX3NpemVbMl07CiAJZHJtX3ZpYV9zZXF1ZW5jZV90IHVuZmluaXNoZWQ7CkBAIC01NSw3ICs1Myw3IEBACiAJY29uc3QgdWludDMyX3QgKmJ1Zl9zdGFydDsKIH0gZHJtX3ZpYV9zdGF0ZV90OwogCi1leHRlcm4gaW50IHZpYV92ZXJpZnlfY29tbWFuZF9zdHJlYW0oY29uc3QgdWludDMyX3QgKiBidWYsIHVuc2lnbmVkIGludCBzaXplLCAKLQkJCQkgICAgIGRybV9kZXZpY2VfdCAqZGV2LCBpbnQgYWdwKTsKK2V4dGVybiBpbnQgdmlhX3ZlcmlmeV9jb21tYW5kX3N0cmVhbShjb25zdCB1aW50MzJfdCAqIGJ1ZiwgdW5zaWduZWQgaW50IHNpemUsCisJCQkJICAgICBkcm1fZGV2aWNlX3QgKiBkZXYsIGludCBhZ3ApOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vdmlhX3ZpZGVvLmMgYi9kcml2ZXJzL2NoYXIvZHJtL3ZpYV92aWRlby5jCmluZGV4IDFlMmQ0NDQuLjdmYWI5ZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vdmlhX3ZpZGVvLmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS92aWFfdmlkZW8uYwpAQCAtMjksOCArMjksNyBAQAogI2luY2x1ZGUgInZpYV9kcm0uaCIKICNpbmNsdWRlICJ2aWFfZHJ2LmgiCiAKLXZvaWQKLXZpYV9pbml0X2Z1dGV4KGRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdikKK3ZvaWQgdmlhX2luaXRfZnV0ZXgoZHJtX3ZpYV9wcml2YXRlX3QgKiBkZXZfcHJpdikKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIApAQCAtNDIsMzAgKzQxLDI4IEBACiAJfQogfQogCi12b2lkCi12aWFfY2xlYW51cF9mdXRleChkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYpCit2b2lkIHZpYV9jbGVhbnVwX2Z1dGV4KGRybV92aWFfcHJpdmF0ZV90ICogZGV2X3ByaXYpCiB7Ci19CQorfQogCi12b2lkCi12aWFfcmVsZWFzZV9mdXRleChkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYsIGludCBjb250ZXh0KQordm9pZCB2aWFfcmVsZWFzZV9mdXRleChkcm1fdmlhX3ByaXZhdGVfdCAqIGRldl9wcml2LCBpbnQgY29udGV4dCkKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAl2b2xhdGlsZSBpbnQgKmxvY2s7CiAKLQlmb3IgKGk9MDsgaSA8IFZJQV9OUl9YVk1DX0xPQ0tTOyArK2kpIHsKLQkgICAgICAgIGxvY2sgPSAoaW50ICopIFhWTUNMT0NLUFRSKGRldl9wcml2LT5zYXJlYV9wcml2LCBpKTsKLQkJaWYgKCAoX0RSTV9MT0NLSU5HX0NPTlRFWFQoICpsb2NrICkgPT0gY29udGV4dCkpIHsKLQkJCWlmIChfRFJNX0xPQ0tfSVNfSEVMRCggKmxvY2sgKSAmJiAoKmxvY2sgJiBfRFJNX0xPQ0tfQ09OVCkpIHsKLQkJCQlEUk1fV0FLRVVQKCAmKGRldl9wcml2LT5kZWNvZGVyX3F1ZXVlW2ldKSk7CisJZm9yIChpID0gMDsgaSA8IFZJQV9OUl9YVk1DX0xPQ0tTOyArK2kpIHsKKwkJbG9jayA9IChpbnQgKilYVk1DTE9DS1BUUihkZXZfcHJpdi0+c2FyZWFfcHJpdiwgaSk7CisJCWlmICgoX0RSTV9MT0NLSU5HX0NPTlRFWFQoKmxvY2spID09IGNvbnRleHQpKSB7CisJCQlpZiAoX0RSTV9MT0NLX0lTX0hFTEQoKmxvY2spCisJCQkgICAgJiYgKCpsb2NrICYgX0RSTV9MT0NLX0NPTlQpKSB7CisJCQkJRFJNX1dBS0VVUCgmKGRldl9wcml2LT5kZWNvZGVyX3F1ZXVlW2ldKSk7CiAJCQl9CiAJCQkqbG9jayA9IDA7CiAJCX0KLQl9CQotfQkKKwl9Cit9CiAKLWludCAKLXZpYV9kZWNvZGVyX2Z1dGV4KERSTV9JT0NUTF9BUkdTKQoraW50IHZpYV9kZWNvZGVyX2Z1dGV4KERSTV9JT0NUTF9BUkdTKQogewogCURSTV9ERVZJQ0U7CiAJZHJtX3ZpYV9mdXRleF90IGZ4OwpAQCAtOTUsNCArOTIsMyBAQAogCX0KIAlyZXR1cm4gMDsKIH0KLQo=