ZGlmZiAtLWdpdCBhL2NhcC96eDI5NzUyMHYzL3p4aWNfY29kZS96eGljX3NvdXJjZS9saW51eC01LjEwL2FyY2gvYXJtL2Jvb3QvZHRzL3p4Mjk3NTIwdjMtdmVoaWNsZV9kY19yZWYuZHRzIGIvY2FwL3p4Mjk3NTIwdjMvenhpY19jb2RlL3p4aWNfc291cmNlL2xpbnV4LTUuMTAvYXJjaC9hcm0vYm9vdC9kdHMvengyOTc1MjB2My12ZWhpY2xlX2RjX3JlZi5kdHMKaW5kZXggNmY3Y2Y2OS4uNTZmYmE1YyAxMDA3NTUKLS0tIGEvY2FwL3p4Mjk3NTIwdjMvenhpY19jb2RlL3p4aWNfc291cmNlL2xpbnV4LTUuMTAvYXJjaC9hcm0vYm9vdC9kdHMvengyOTc1MjB2My12ZWhpY2xlX2RjX3JlZi5kdHMKKysrIGIvY2FwL3p4Mjk3NTIwdjMvenhpY19jb2RlL3p4aWNfc291cmNlL2xpbnV4LTUuMTAvYXJjaC9hcm0vYm9vdC9kdHMvengyOTc1MjB2My12ZWhpY2xlX2RjX3JlZi5kdHMKQEAgLTE3NCw3ICsxNzQsNyBAQAogCiAmeHAyeHAgewogCS8vd2hpbGUgdXNpbmcgdGhpcyBtb2R1bGUsc2hvdWxkIGNoYW5nZSBncGlvCi0gICAgc3RhdHVzID0gImRpc2FibGVkIjsKKyAgICBzdGF0dXMgPSAib2theSI7Ly9qYi5xaSBjaGFuZ2UgZm9yIGR0ciBvbiAyMDIzMTIwNAogfTsKIAogJmdwaW9fa2V5MCB7CmRpZmYgLS1naXQgYS9jYXAvengyOTc1MjB2My96eGljX2NvZGUvenhpY19zb3VyY2UvbGludXgtNS4xMC9hcmNoL2FybS9ib290L2R0cy96eDI5NzUyMHYzLmR0c2kgYi9jYXAvengyOTc1MjB2My96eGljX2NvZGUvenhpY19zb3VyY2UvbGludXgtNS4xMC9hcmNoL2FybS9ib290L2R0cy96eDI5NzUyMHYzLmR0c2kKaW5kZXggYjVkNGJjNi4uM2JiNzU5ZSAxMDA3NTUKLS0tIGEvY2FwL3p4Mjk3NTIwdjMvenhpY19jb2RlL3p4aWNfc291cmNlL2xpbnV4LTUuMTAvYXJjaC9hcm0vYm9vdC9kdHMvengyOTc1MjB2My5kdHNpCisrKyBiL2NhcC96eDI5NzUyMHYzL3p4aWNfY29kZS96eGljX3NvdXJjZS9saW51eC01LjEwL2FyY2gvYXJtL2Jvb3QvZHRzL3p4Mjk3NTIwdjMuZHRzaQpAQCAtMzEyLDEyICszMTIsMTEgQEAKIAkJCXBpbmN0cmwtbmFtZXMgPSAiZ3BpbzUwIiwgImV4dF9pbnQzIjsKIAkJCXBpbmN0cmwtMCA9IDwmZ3Bpb181MF9waW5zPjsKIAkJCXBpbmN0cmwtMSA9IDwmZXh0X2ludDNfcGlucz47CisJCQkvKmpiLnFpIGNoYW5nZSBmb3IgZHRyIG9uIDIwMjMxMjA0IHN0YXJ0Ki8KIAkJCWdwaW9zID0gPCZiZ3BpbyA1MCBHUElPX0FDVElWRV9ISUdICi0JCQkJCSAmYmdwaW8gNTMgR1BJT19BQ1RJVkVfSElHSAotCQkJCQkgJmJncGlvIDEzMCBHUElPX0FDVElWRV9ISUdICi0JCQkJCSAmYmdwaW8gMTMxIEdQSU9fQUNUSVZFX0hJR0g+OwotCQkJLy9pbnRlcnJ1cHQtcGFyZW50ID0gPCZleHQ4aW4xPjsKLQkJCWludGVycnVwdHMgPSA8R0lDX1NQSSBFWDNfSU5UIElSUV9UWVBFX0VER0VfUklTSU5HPjsKKwkJCQkJICZiZ3BpbyAxMTkgR1BJT19BQ1RJVkVfSElHSD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgRVgzX0lOVCBJUlFfVFlQRV9MRVZFTF9MT1c+OworCQkJLypqYi5xaSBjaGFuZ2UgZm9yIGR0ciBvbiAyMDIzMTIwNCBlbmQqLwogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJfTsKIAkJCmRpZmYgLS1naXQgYS9jYXAvengyOTc1MjB2My96eGljX2NvZGUvenhpY19zb3VyY2UvbGludXgtNS4xMC9kcml2ZXJzL3NvYy9zYy9wb3dlcl80bGluZS9oYWxfeHAyeHAuYyBiL2NhcC96eDI5NzUyMHYzL3p4aWNfY29kZS96eGljX3NvdXJjZS9saW51eC01LjEwL2RyaXZlcnMvc29jL3NjL3Bvd2VyXzRsaW5lL2hhbF94cDJ4cC5jCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggYmE0MDAzOC4uNWUxNGI3ZAotLS0gYS9jYXAvengyOTc1MjB2My96eGljX2NvZGUvenhpY19zb3VyY2UvbGludXgtNS4xMC9kcml2ZXJzL3NvYy9zYy9wb3dlcl80bGluZS9oYWxfeHAyeHAuYworKysgYi9jYXAvengyOTc1MjB2My96eGljX2NvZGUvenhpY19zb3VyY2UvbGludXgtNS4xMC9kcml2ZXJzL3NvYy9zYy9wb3dlcl80bGluZS9oYWxfeHAyeHAuYwpAQCAtNTksOCArNTksOCBAQAogI2RlZmluZSBBUF9TTEVFUF9TVEFUVVMgICAgIDAJLypBUMuvw9/KsbjD0v29xc6qMCovDQogI2RlZmluZSBBUF9XQUtFX1NUQVRVUyAgICAgIDEJLypBULu90NHKsbjD0v29xc6qMSovDQogDQotI2RlZmluZSBDUF9TTEVFUF9TVEFUVVMgICAgIDAJLypDUMuvw9/KsbjD0v29xc6qMCovDQotI2RlZmluZSBDUF9XQUtFX1NUQVRVUyAgICAgIDEJLypDULu90NHKsbjD0v29xc6qMSovDQorI2RlZmluZSBDUF9TTEVFUF9TVEFUVVMgICAgIDEJLy9qYi5xIGFkZCBmb3IgZHRyIG9uIDIwMjMxMjA0DQorI2RlZmluZSBDUF9XQUtFX1NUQVRVUyAgICAgIDAJLy9qYi5xIGFkZCBmb3IgZHRyIG9uIDIwMjMxMjA0DQogDQogI2lmZGVmIEJUUlVOS19TVVBQT1JUDQogI2RlZmluZSBDUF9XQUtFX0FQX0lOVF9TRVQgICAgMQ0KQEAgLTc3LDcgKzc3LDcgQEAKICNpZm5kZWYgRkFMU0UNCiAjZGVmaW5lIEZBTFNFIDANCiAjZW5kaWYNCi0jZGVmaW5lIEhBTF9YUDJYUF9QTQkJCTANCisjZGVmaW5lIEhBTF9YUDJYUF9QTQkJCTEgLy9qYi5xaSBhZGQgZm9yIGR0ciBvbiAyMDIzMTIwNA0KIA0KIA0KICNkZWZpbmUgWFAyWFBfREVCVUcNCkBAIC0xMTEsNyArMTExLDcgQEAKIA0KIA0KIHN0cnVjdCBoYWxfeHAyeHBfZGV2DQoteworew0KIAlzdHJ1Y3QgZGV2aWNlCSpkZXY7DQogCXN0cnVjdCBwaW5jdHJsCQkgICpwY3RybF93a19pbnQ7DQogCXN0cnVjdCBwaW5jdHJsX3N0YXRlICAqc3RfZ3BpbzsNCkBAIC0xMjcsMTUgKzEyNywxNSBAQAogCWludAkJCQkJCWFwX3NscF9zdF9ncGlvOw0KIAlpbnQJCQkJCQl3YWtlX2FwX2dwaW87DQogCWludAkJCQkJCXdha2VfbWVfZ3BpbzsNCi0Jc3RydWN0IGdwaW9fZGVzYyAJCSpnZDsKKwlzdHJ1Y3QgZ3Bpb19kZXNjIAkJKmdkOw0KIA0KLQlpbnQJCQkJCQllaW50X2lycTsKKwlpbnQJCQkJCQllaW50X2lycTsNCiAJaW50CQkJCQkJeHAyeHBfaXJxX3N0YXRlOw0KIAlpbnQJCQkJCQl3YWtlX2NudDsNCiAJaW50CQkJCQkJc2xlZXBfY250Ow0KIAlzdHJ1Y3Qgd2FrZXVwX3NvdXJjZSAqeHAyeHBfd3M7DQogDQotfTsKK307DQogDQogDQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCkBAIC0xNTYsNyArMTU2LDcgQEAKIHN0cnVjdCBrc2V0ICprc2V0X3hwMnhwOw0KIC8vc3RydWN0IGtzZXQga3NldF9jOw0KIHN0cnVjdCBrb2JqZWN0ICp4cDJ4cGtvYmogPSBOVUxMOw0KLQorDQogc3RydWN0IGhhbF94cDJ4cF9kZXYgZ194cDJ4cCA9IHswfTsNCiANCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSB4cDJ4cF9zdGF0ZV9hdHRyID0NCkBAIC0xOTUsNyArMTk1LDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgc3lzZnNfb3BzIHhwMnhwX29ial9zeXNvcHMgPQ0KIHsNCiAgICAgICAgIC5zaG93ID0geHAyeHBfb2JqX3Nob3csDQotICAgICAgICAuc3RvcmUgPSB4cDJ4cF9vYmpfc3RvcmUsICAgICAgICANCisgICAgICAgIC5zdG9yZSA9IHhwMnhwX29ial9zdG9yZSwNCiB9Ow0KIA0KIA0KQEAgLTQwNywyMCArNDA3LDIxIEBACiAqDQogKiBPdGhlcnM6DQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorLypqYi5xaSBhZGQgZm9yIGR0ciBvbiAyMDIzMTMwNCBzdGFydCovDQogaXJxcmV0dXJuX3QgeHAyeHBfd2tjcF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKnByaXYpDQogew0KIAl1bnNpZ25lZCBsb25nIGZsYWdzOw0KIAlpbnQgZ3Bpb192YWx1ZTsNCi0gCXVuc2lnbmVkIGludCBpcnFfdHlwZTsNCisJdW5zaWduZWQgaW50IGlycV90eXBlOw0KIAlzdHJ1Y3QgaGFsX3hwMnhwX2RldiAqeHAyeHBfZGV2ID0gKHN0cnVjdCBoYWxfeHAyeHBfZGV2ICopcHJpdjsNCi0JDQorDQogCWRpc2FibGVfaXJxX25vc3luYyhpcnEpOw0KLQl4cDJ4cF9kZXYtPnhwMnhwX2lycV9zdGF0ZSA9IDA7CQ0KKwl4cDJ4cF9kZXYtPnhwMnhwX2lycV9zdGF0ZSA9IDA7DQogCWdwaW9fdmFsdWUgPSAwIDsNCi0gICAgLy9wbV9zdGF5X2F3YWtlKHhwMnhwX2Rldi0+ZGV2KTsNCisNCiAJaWYoeHAyeHBfZGV2LT54cDJ4cF93cyl7DQogCQlfX3BtX3dha2V1cF9ldmVudCh4cDJ4cF9kZXYtPnhwMnhwX3dzLCAyMDAwKTsNCi0JfQkNCisJfQ0KICAJaWYgKHBpbmN0cmxfc2VsZWN0X3N0YXRlKHhwMnhwX2Rldi0+cGN0cmxfd2tfaW50LCB4cDJ4cF9kZXYtPnN0X2dwaW8pIDwgMCkgew0KIAkJcHJpbnRrKCJzZXR0aW5nIGNhcmQgZGV0ZWN0IGdwaW8gZmFpbGVkXG4iKTsNCiAJfQ0KQEAgLTQzMywyNiArNDM0LDIzIEBACiAJfQ0KIAkNCiAJaWYoMSA9PSBncGlvX3ZhbHVlKXsNCi0JCWlycV90eXBlID0gSVJRRl9UUklHR0VSX0ZBTExJTkc7DQotCQl4cDJ4cF9kZXYtPndha2Vfc3RhdGUgPSAxOw0KLQkJeHAyeHBfZGV2LT5jdXJyX2dwaW9fdmFsdWUgPSAxOw0KLSAgICAgICAgLy9wbV9yZWxheChjZG5zX2Rldi0+ZGV2KTsNCisgICAgICAgIGlycV90eXBlID0gSVJRRl9UUklHR0VSX0xPVzsNCisgICAgICAgIHByaW50aygiZ3Bpb192YWx1ZSBpcyAxICwgcmVsZWFzZSB3YWtlbG9ja1xuIik7DQorICAgICAgICBwbV9yZWxheChnX3hwMnhwLmRldik7DQogCX1lbHNlew0KLQkJaXJxX3R5cGUgPSBJUlFGX1RSSUdHRVJfUklTSU5HOw0KLQkJeHAyeHBfZGV2LT53YWtlX3N0YXRlID0gMDsNCi0JCXhwMnhwX2Rldi0+Y3Vycl9ncGlvX3ZhbHVlID0gMDsNCisgICAgICAgIGlycV90eXBlID0gSVJRRl9UUklHR0VSX0hJR0g7DQorICAgICAgICBwcmludGsoImdwaW9fdmFsdWUgaXMgMCAsIGxvY2sgd2FrZWxvY2tcbiIpOw0KKyAgICAgICAgcG1fc3RheV9hd2FrZShnX3hwMnhwLmRldik7DQogCX0NCiANCiAJaWYgKHBpbmN0cmxfc2VsZWN0X3N0YXRlKHhwMnhwX2Rldi0+cGN0cmxfd2tfaW50LCB4cDJ4cF9kZXYtPnN0X2ludCkgPCAwKSB7DQogCQlwcmludGsoICJzZXR0aW5nIGNhcmQgZGV0ZWN0IGlycSBmYWlsZWRcbiIpOw0KIAl9DQotCQ0KIAlpcnFfc2V0X2lycV90eXBlKGlycSxpcnFfdHlwZSk7DQotCQkNCiAJdXAoJnhwMnhwX2Rldi0+d2tfc2VtKTsNCi0JcmV0dXJuIElSUV9IQU5ETEVEOwkNCisJcmV0dXJuIElSUV9IQU5ETEVEOw0KIH0NCi0NCisvKmpiLnFpIGFkZCBmb3IgZHRyIG9uIDIwMjMxMzA0IGVuZCovDQogDQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIEZ1bmN0aW9uOg0KQEAgLTY2Nyw3MSArNjY1LDcxIEBACiB9DQogDQogI2lmIEhBTF9YUDJYUF9QTQ0KLQorDQogc3RhdGljIGludCBoYWxfeHAyeHBfcG1fcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikNCi17Ci0JLy9wbV9zdGF5X2F3YWtlKGRldik7Ci0KK3sNCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGdfeHAyeHAuYXBfc2xwX3N0X2dwaW8sIENQX1dBS0VfU1RBVFVTKTsvL2piLnEgYWRkIGZvciBkdHIgb24gMjAyMzEyMDQNCiAJcHJfaW5mbygiaGFsX3hwMnhwX3BtX3Jlc3VtZVxuIik7DQotCXJldHVybiAwOwotfQotCisJcmV0dXJuIDA7DQorfQ0KKw0KIHN0YXRpYyBpbnQgaGFsX3hwMnhwX3BtX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQ0KLXsKLQkvL3BtX3JlbGF4KGRldik7DQorew0KKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ194cDJ4cC5hcF9zbHBfc3RfZ3BpbywgQ1BfU0xFRVBfU1RBVFVTKTsvL2piLnEgYWRkIGZvciBkdHIgb24gMjAyMzEyMDQNCiAJcHJfaW5mbygiaGFsX3hwMnhwX3BtX3N1c3BlbmRcbiIpOw0KLQlyZXR1cm4gMDsKLX0KLQorCXJldHVybiAwOw0KK30NCisNCiBzdGF0aWMgaW50IGhhbF94cDJ4cF9wbV9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpDQotewotCS8qIGVuYWJsZSBjbGsgYW5kIHJlc3RvcmUgcmVncyAqLworew0KKwkvKiBlbmFibGUgY2xrIGFuZCByZXN0b3JlIHJlZ3MgKi8NCiAJcHJfaW5mbygiaGFsX3hwMnhwX3BtX3J1bnRpbWVfcmVzdW1lXG4iKTsNCi0JcmV0dXJuIDA7Ci19Ci0KKwlyZXR1cm4gMDsNCit9DQorDQogc3RhdGljIGludCBoYWxfeHAyeHBfcG1fcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikNCi17Ci0JLyogYmFja3VwIHJlZ3MgYW5kIGRpc2FibGUgY2xrICovCit7DQorCS8qIGJhY2t1cCByZWdzIGFuZCBkaXNhYmxlIGNsayAqLw0KIAlwcl9pbmZvKCJoYWxfeHAyeHBfcG1fcnVudGltZV9zdXNwZW5kXG4iKTsNCi0JcmV0dXJuIDA7Ci19Ci0KKwlyZXR1cm4gMDsNCit9DQorDQogc3RhdGljIGludCBoYWxfeHAyeHBfcG1fcnVudGltZV9pZGxlKHN0cnVjdCBkZXZpY2UgKmRldikNCi17Cit7DQogCXByX2luZm8oImhhbF94cDJ4cF9wbV9ydW50aW1lX2lkbGVcbiIpOw0KLQlyZXR1cm4gMDsKLX0KLQorCXJldHVybiAwOw0KK30NCisNCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgaGFsX3hwMnhwX3BtID0gew0KIAkucmVzdW1lID0gaGFsX3hwMnhwX3BtX3Jlc3VtZSwNCiAJLnN1c3BlbmQgPSBoYWxfeHAyeHBfcG1fc3VzcGVuZCwNCiAJLnJ1bnRpbWVfcmVzdW1lID0gaGFsX3hwMnhwX3BtX3J1bnRpbWVfcmVzdW1lLA0KIAkucnVudGltZV9zdXNwZW5kID0gaGFsX3hwMnhwX3BtX3J1bnRpbWVfc3VzcGVuZCwNCiAJLnJ1bnRpbWVfaWRsZSA9IGhhbF94cDJ4cF9wbV9ydW50aW1lX2lkbGUNCi19OwotI2VuZGlmCit9Ow0KKyNlbmRpZg0KIA0KLQorDQogc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgaGFsX3hwMnhwX21hdGNoW10gPSB7DQogCXsgLmNvbXBhdGlibGUgPSAienRlLGhhbF94cDJ4cCIsIH0sDQotCXsgfQotfTsKKwl7IH0NCit9Ow0KIA0KLQorDQogaW50IGhhbF94cDJ4cF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KLXsKLQlpbnQgZ3BpbzsKLQlpbnQgaXJxOwotCWVudW0gb2ZfZ3Bpb19mbGFncyBmbGFnczsKK3sNCisJaW50IGdwaW87DQorCWludCBpcnE7DQorCWludCBncGlvX3ZhbHVlOy8vamIucSBhZGQgZm9yIGR0ciBvbiAyMDIzMTIwNA0KKwllbnVtIG9mX2dwaW9fZmxhZ3MgZmxhZ3M7DQogCWludCByZXQgPSAwOw0KIAlnX3hwMnhwLmRldiA9ICZwZGV2LT5kZXY7DQogDQogCXNlbWFfaW5pdCgmZ194cDJ4cC53a19zZW0sMCk7DQogCXNwaW5fbG9ja19pbml0KCZnX3hwMnhwLndrX2xvY2spOw0KLQkNCi0JLy9kZXZpY2VfaW5pdF93YWtldXAoJnBkZXYtPmRldiwgdHJ1ZSk7Ci0JLy9wbV9zdGF5X2F3YWtlKGdfeHAyeHAuZGV2KTsNCisNCisJZGV2aWNlX2luaXRfd2FrZXVwKCZwZGV2LT5kZXYsIHRydWUpOy8vamIucSBhZGQgZm9yIGR0ciBvbiAyMDIzMTIwNA0KKw0KIAlnX3hwMnhwLnhwMnhwX3dzID0gd2FrZXVwX3NvdXJjZV9yZWdpc3RlcihOVUxMLCAieHAyeHAiKTsNCiAJaWYoZ194cDJ4cC54cDJ4cF93cyAgPT0gTlVMTCl7DQogCQlwcmludGsoImFkYl9zZXR1cCB3YWtldXBfc291cmNlX2NyZWF0ZSBmYWlsXG4iKTsNCkBAIC03NDMsMTEgKzc0MSwxMSBAQAogCQlnX3hwMnhwLnBjdHJsX3drX2ludCA9IE5VTEw7DQogCQlyZXQgPSAtRU5PTUVNOw0KIAkJZ290byBwaW5jdHJsX2luaXRfZmFpbDsNCi0JfQorCX0NCiAJZ194cDJ4cC5zdF9ncGlvID0gcGluY3RybF9sb29rdXBfc3RhdGUoZ194cDJ4cC5wY3RybF93a19pbnQsICJncGlvNTAiKTsNCiAJaWYgKElTX0VSUihnX3hwMnhwLnN0X2dwaW8pKSB7DQogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJoYWxfeHAyeHBfcHJvYmU6IG1pc3Npbmcgc3RfZ3Bpb1xuIik7DQotCX0KKwl9DQogCWdfeHAyeHAuc3RfaW50ID0gcGluY3RybF9sb29rdXBfc3RhdGUoZ194cDJ4cC5wY3RybF93a19pbnQsICJleHRfaW50MyIpOw0KIAlpZiAoSVNfRVJSKGdfeHAyeHAuc3RfaW50KSkgew0KIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiaGFsX3hwMnhwX3Byb2JlOiBtaXNzaW5nIGV4dF9pbnQzXG4iKTsNCkBAIC03NTUsNyArNzUzLDcgQEAKICNpZiAwCQ0KIAlpZiAoIHBpbmN0cmxfc2VsZWN0X3N0YXRlKGdfeHAyeHAucGN0cmxfd2tfaW50LCBnX3hwMnhwLnN0X2dwaW8pIDwgMCkgew0KIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiaGFsX3hwMnhwX3Byb2JlIHN0YXRlMCBmYWlsZWRcbiIpOw0KLQl9CisJfQ0KICNlbmRpZg0KIAkvKiBlaW50MyAqLw0KIAlpZiAoIHBpbmN0cmxfc2VsZWN0X3N0YXRlKGdfeHAyeHAucGN0cmxfd2tfaW50LCBnX3hwMnhwLnN0X2ludCkgPCAwKSB7DQpAQCAtNzY0LDI5ICs3NjIsNTEgQEAKIAkNCiAJLyogZ3BpbyByZXF1ZXN0ICovDQogCWdwaW8gPSBvZl9nZXRfZ3Bpb19mbGFncyhwZGV2LT5kZXYub2Zfbm9kZSwgMCwgJmZsYWdzKTsNCi0JaWYgKCFncGlvX2lzX3ZhbGlkKGdwaW8pKSB7CisJaWYgKCFncGlvX2lzX3ZhbGlkKGdwaW8pKSB7DQogCQlwcmludGsoImhhbF94cDJ4cF9wcm9iZSBncGlvIDUwIG5vIGZvdW5kXG4iKTsNCiAJCXJldCA9IC1FTk9ERVY7DQogCQlnb3RvIGdwaW81MF9pbml0X2ZhaWw7DQotCX0KLQkvKiBwcl9pbmZvKCJ0ZXN0IGdwaW8gOiVkIGZsYWc9MHgleFxuIiwgZ3BpbywgZmxhZ3MpOyAqLwotDQorCX0NCisJLyogcHJfaW5mbygidGVzdCBncGlvIDolZCBmbGFnPTB4JXhcbiIsIGdwaW8sIGZsYWdzKTsgKi8NCiANCiAJZ194cDJ4cC53YWtlX21lX2dwaW8gPSBncGlvOw0KLQkNCiANCiAJZ194cDJ4cC5laW50X2lycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKHBkZXYtPmRldi5vZl9ub2RlLCAwKTsNCi0JIHByaW50aygid2FrZV9tZV9ncGlvOiVkLCBlaW50X2lycTolZFxuIiwgZ194cDJ4cC53YWtlX21lX2dwaW8sIGdfeHAyeHAuZWludF9pcnEpOw0KKwlwcmludGsoIndha2VfbWVfZ3BpbzolZCwgZWludF9pcnE6JWRcbiIsIGdfeHAyeHAud2FrZV9tZV9ncGlvLCBnX3hwMnhwLmVpbnRfaXJxKTsNCisJLyovL2piLnEgYWRkIGZvciBkdHIgb24gMjAyMzEyMDQgc3RhcnQqLw0KKwlpZiAoIHBpbmN0cmxfc2VsZWN0X3N0YXRlKGdfeHAyeHAucGN0cmxfd2tfaW50LCBnX3hwMnhwLnN0X2dwaW8pIDwgMCkgew0KKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiaGFsX3hwMnhwX3Byb2JlIHN0YXRlMCBmYWlsZWRcbiIpOw0KKwl9DQorCXNwaW5fbG9ja19pcnFzYXZlKCZnX3hwMnhwLndrX2xvY2ssIGZsYWdzKTsNCisJZ3Bpb192YWx1ZSA9IGdwaW9fZ2V0X3ZhbHVlKGdfeHAyeHAud2FrZV9tZV9ncGlvKSA7DQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdfeHAyeHAud2tfbG9jaywgZmxhZ3MpOw0KKwlpZihncGlvX3ZhbHVlIDwgMCkNCisJew0KKyAgICAgICAgcHJpbnRrKCAiWyVzLSVkXTogZ3BpbyBnZXQgc3RhdGUgZmFpbGVkXG4iLF9fZnVuY19fLF9fTElORV9fKTsNCisJfQ0KIA0KKwlpZigxID09IGdwaW9fdmFsdWUpDQorCXsNCisJCXBtX3JlbGF4KGdfeHAyeHAuZGV2KTsNCisJfQ0KKwllbHNlDQorCXsNCisJCXBtX3N0YXlfYXdha2UoZ194cDJ4cC5kZXYpOw0KKwl9DQorDQorCWlmICggcGluY3RybF9zZWxlY3Rfc3RhdGUoZ194cDJ4cC5wY3RybF93a19pbnQsIGdfeHAyeHAuc3RfaW50KSA8IDApIHsNCisJCWRldl9lcnIoJnBkZXYtPmRldiwgImhhbF94cDJ4cF9wcm9iZSBlaW50MyBmYWlsZWRcbiIpOw0KKwl9DQorCS8qLy9qYi5xIGFkZCBmb3IgZHRyIG9uIDIwMjMxMjA0IGVuZCovDQogCXJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoZ194cDJ4cC5kZXYsIGdfeHAyeHAuZWludF9pcnEsDQogCQkJCQkJeHAyeHBfd2tjcF9oYW5kbGVyLA0KIAkJCQkJCU5VTEwsIElSUUZfT05FU0hPVCwNCi0JCQkJCQkieHAyeHBfd2FrZSBpbnQiLCAmZ194cDJ4cCk7CQ0KLQkNCi0JDQorCQkJCQkJInhwMnhwX3dha2UgaW50IiwgJmdfeHAyeHApOw0KKw0KIAlpZihyZXQ8MCl7DQogCQlwYW5pYygiaGFsX3hwMnhwX3Byb2JlIHJlcXVlc3RfaXJxIGZhaWwsICVkIiwgcmV0KTsNCi0JfQkNCisJfQ0KKw0KIA0KIAlnX3hwMnhwLndha2VfaW50X3RocmVhZCA9IGt0aHJlYWRfcnVuKHhwMnhwX3drY3BfdGhyZWFkLCAodm9pZCAqKSZnX3hwMnhwLCAieHAyeHBfd2FrZV90aHJlYWQiKTsNCiAJDQpAQCAtNzk0LDM4ICs4MTQsMzggQEAKIAkJcHJpbnRrKCJDYW4ndCBzdGFydCB1cCBvdXIgdGhyZWFkIik7DQogCQlyZXR1cm4gUFRSX0VSUihnX3hwMnhwLndha2VfaW50X3RocmVhZCk7DQogCX0JDQotCQ0KKw0KIAllbmFibGVfaXJxX3dha2UoZ194cDJ4cC5laW50X2lycSk7DQotCQ0KLSNpZmRlZiBDT05GSUdfS0VSTkVMX0NPTlRST0xfV0FLRVVQDQorLypqYi5xIGFkZCBmb3IgZHRyIG9uIDIwMjMxMjA0IHN0YXJ0Ki8NCiAJLyogZ3BpbyByZXF1ZXN0ICovDQotCS8vZ3Bpb181MyxhcCBzbGVlcF9zdGF0ZQ0KKwkvL2dwaW9fMTE5LGFwIHNsZWVwX3N0YXRlDQogCWdwaW8gPSBvZl9nZXRfZ3Bpb19mbGFncyhwZGV2LT5kZXYub2Zfbm9kZSwgMSwgJmZsYWdzKTsNCi0JaWYgKCFncGlvX2lzX3ZhbGlkKGdwaW8pKSB7CisJaWYgKCFncGlvX2lzX3ZhbGlkKGdwaW8pKSB7DQogCQlwcmludGsoImhhbF94cDJ4cF9wcm9iZSBncGlvIG5vIGZvdW5kXG4iKTsNCiAJCXJldCA9IC1FTk9ERVY7DQotCQlnb3RvIGdwaW81M19pbml0X2ZhaWw7DQotCX0KLQkvKiBwcl9pbmZvKCJ0ZXN0IGdwaW8gOiVkIGZsYWc9MHgleFxuIiwgZ3BpbywgZmxhZ3MpOyAqLworCQlnb3RvIGdwaW8xMTlfaW5pdF9mYWlsOw0KKwl9DQorCS8qIHByX2luZm8oInRlc3QgZ3BpbyA6JWQgZmxhZz0weCV4XG4iLCBncGlvLCBmbGFncyk7ICovDQogDQogCWdfeHAyeHAuYXBfc2xwX3N0X2dwaW8gPSBncGlvOw0KLQlncGlvX2RpcmVjdGlvbl9pbnB1dChnX3hwMnhwLmFwX3NscF9zdF9ncGlvKTsNCi0JDQorCWdwaW9fZGlyZWN0aW9uX291dHB1dChnX3hwMnhwLmFwX3NscF9zdF9ncGlvLCBDUF9TTEVFUF9TVEFUVVMpOw0KKw0KKyNpZiAwDQorDQogCS8vZ3Bpb18xMzAsbXkgc2xlZXBfc3RhdGUNCiAJZ3BpbyA9IG9mX2dldF9ncGlvX2ZsYWdzKHBkZXYtPmRldi5vZl9ub2RlLCAyLCAmZmxhZ3MpOw0KLQlpZiAoIWdwaW9faXNfdmFsaWQoZ3BpbykpIHsKKwlpZiAoIWdwaW9faXNfdmFsaWQoZ3BpbykpIHsNCiAJCXByaW50aygiaGFsX3hwMnhwX3Byb2JlIGdwaW8gbm8gZm91bmRcbiIpOw0KIAkJcmV0ID0gLUVOT0RFVjsNCiAJCWdvdG8gZ3BpbzEzMF9pbml0X2ZhaWw7DQogCX0NCiANCi0NCi0JZ194cDJ4cC5teV9zbHBfc3RfZ3BpbyA9IGdwaW87CQ0KLWdwaW9fZGlyZWN0aW9uX291dHB1dChnX3hwMnhwLm15X3NscF9zdF9ncGlvLCBDUF9TTEVFUF9TVEFUVVMpOw0KKwlnX3hwMnhwLm15X3NscF9zdF9ncGlvID0gZ3BpbzsNCisgICAgZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGdfeHAyeHAubXlfc2xwX3N0X2dwaW8sIENQX1NMRUVQX1NUQVRVUyk7DQogDQogCS8vZ3Bpb18xMzEsd2FrZSBhcCBncGlvDQogCWdwaW8gPSBvZl9nZXRfZ3Bpb19mbGFncyhwZGV2LT5kZXYub2Zfbm9kZSwgMywgJmZsYWdzKTsNCi0JaWYgKCFncGlvX2lzX3ZhbGlkKGdwaW8pKSB7CisJaWYgKCFncGlvX2lzX3ZhbGlkKGdwaW8pKSB7DQogCQlwcmludGsoImhhbF94cDJ4cF9wcm9iZSBncGlvIG5vIGZvdW5kXG4iKTsNCiAJCXJldCA9IC1FTk9ERVY7DQogCQlnb3RvIGdwaW8xMzFfaW5pdF9mYWlsOw0KQEAgLTgzMywyNyArODUzLDMwIEBACiAJZ194cDJ4cC53YWtlX2FwX2dwaW8gPSBncGlvOw0KIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ194cDJ4cC5teV9zbHBfc3RfZ3BpbywgQ1BfV0FLRV9BUF9JTlRfQ0xFQVIpOw0KIA0KKyAgICBncGlvMTMxX2luaXRfZmFpbDoNCisgICAgICAgIGlmKHJldCl7DQorICAgICAgICAgICAgcHJpbnRrKCJcbiIpOw0KKyAgICAgICAgfQ0KKyAgICBncGlvMTMwX2luaXRfZmFpbDoNCisgICAgICAgIGlmKHJldCl7DQorICAgICAgICAgICAgcHJpbnRrKCJcbiIpOw0KKyAgICAgICAgfQ0KKw0KKw0KICNlbmRpZg0KKy8qamIucSBhZGQgZm9yIGR0ciBvbiAyMDIzMTIwNCBlbmQqLw0KIAlnX3hwMnhwLndha2VfY250ID0gMDsNCiAJZ194cDJ4cC5zbGVlcF9jbnQgPSAwOw0KIA0KLWdwaW8xMzFfaW5pdF9mYWlsOg0KKw0KK2dwaW8xMTlfaW5pdF9mYWlsOg0KIAlpZihyZXQpew0KLQkJcHJpbnRrKCJcbiIpOw0KLQl9DQotZ3BpbzEzMF9pbml0X2ZhaWw6DQotCWlmKHJldCl7DQotCQlwcmludGsoIlxuIik7DQotCX0NCi0JDQotZ3BpbzUzX2luaXRfZmFpbDoNCi0JaWYocmV0KXsNCi0JCXByaW50aygiXG4iKTsNCisJCXByaW50aygiZ3BpbyAxMTkgaW5pdCBmYWlsXG4iKTsvL2piLnEgYWRkIGZvciBkdHIgb24gMjAyMzEyMDQNCiAJfQ0KIAkNCiBncGlvNTBfaW5pdF9mYWlsOg0KIAlpZihyZXQpew0KLQkJcHJpbnRrKCJcbiIpOw0KKwkJcHJpbnRrKCJncGlvIDUwIGluaXQgZmFpbFxuIik7Ly9qYi5xIGFkZCBmb3IgZHRyIG9uIDIwMjMxMjA0DQogCX0NCiANCiBwaW5jdHJsX2luaXRfZmFpbDoNCkBAIC04NjIsMTkgKzg4NSwxOSBAQAogCX0NCiB3YWtlX3NvdXJjZV9pbml0X2ZhaWw6DQogCQ0KLQkvL3BtX3JlbGF4KGdfeHAyeHAuZGV2KTsKLQlyZXR1cm4gcmV0OwotfQorCS8vcG1fcmVsYXgoZ194cDJ4cC5kZXYpOw0KKwlyZXR1cm4gcmV0Ow0KK30NCiANCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBoYWxfeHAyeHBfZHJpdmVyID0gew0KIAkucHJvYmUgPSBoYWxfeHAyeHBfcHJvYmUsDQotCS5kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsNCiAJCS5uYW1lID0gImhhbF94cDJ4cCIsDQogI2lmCUhBTF9YUDJYUF9QTQ0KIAkJLnBtID0gJmhhbF94cDJ4cF9wbSwNCi0jZW5kaWYJCQorI2VuZGlmCQkNCiAJCS5vZl9tYXRjaF90YWJsZSA9IGhhbF94cDJ4cF9tYXRjaCwNCi0JfSwKKwl9LA0KIH07DQogDQogDQpAQCAtODk2LDcgKzkxOSw3IEBACiAJaW50IGVyckNvZGUgPSAtMTsNCiAJa3NldF94cDJ4cF9pbml0KCk7DQogCS8veHAyeHBfaW5pdF9mbGFnID0gMTsNCi0KKw0KIAlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmhhbF94cDJ4cF9kcml2ZXIpOw0KIAlpZiAocmV0ICE9IDApew0KIAkJa3NldF94cDJ4cF9leGl0KCk7DQo=