ZGlmZiAtLWdpdCBhL2Jvb3QvY29tbW9uL3NyYy9sb2FkZXIvZHJpdmVycy9lZnVzZS5jIGIvYm9vdC9jb21tb24vc3JjL2xvYWRlci9kcml2ZXJzL2VmdXNlLmMKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCBjNGRjMDUxLi4yYjJjYzA4Ci0tLSBhL2Jvb3QvY29tbW9uL3NyYy9sb2FkZXIvZHJpdmVycy9lZnVzZS5jCisrKyBiL2Jvb3QvY29tbW9uL3NyYy9sb2FkZXIvZHJpdmVycy9lZnVzZS5jCkBAIC00Nyw3ICs0Nyw5IEBACiAJCWRkcl9mbGFnID0gQ0hJUF9ERFJfNjRNOwogCX0KIAllbHNlIGlmKCgocHNFZnVzZUluZm8tPnNlY3VyZV9mbGFnID4+IDgpID09IFpYMjk3NTIwVjNFQ09TQ19HV19OWUNfMkdfRERSKQotCQl8fCgocHNFZnVzZUluZm8tPnNlY3VyZV9mbGFnID4+IDgpID09IFpYMjk3NTIwVjNFQ09HR19HV19OWUNfMkdfRERSKSkKKwkJfHwoKHBzRWZ1c2VJbmZvLT5zZWN1cmVfZmxhZyA+PiA4KSA9PSBaWDI5NzUyMFYzRUNPR0dfR1dfTllDXzJHX0REUikKKwkJfHwoKHBzRWZ1c2VJbmZvLT5zZWN1cmVfZmxhZyA+PiA4KSA9PSBaWDI5NzUyMFYzRUNPR0dfR1dfTllDX05PUl8yR19ERFIpCisJCXx8KChwc0VmdXNlSW5mby0+c2VjdXJlX2ZsYWcgPj4gOCkgPT0gWlgyOTc1MjBWM0VDT1NDX0dXX05ZQ19OT1JfMkdfRERSKSkKIAl7CiAJCWRkcl9mbGFnID0gQ0hJUF9ERFJfMjU2TTsKIAl9CmRpZmYgLS1naXQgYS9ib290L2NvbW1vbi9zcmMvbG9hZGVyL2RyaXZlcnMvZWZ1c2UuaCBiL2Jvb3QvY29tbW9uL3NyYy9sb2FkZXIvZHJpdmVycy9lZnVzZS5oCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggNzA4OTk1Mi4uNzkxZjFiOQotLS0gYS9ib290L2NvbW1vbi9zcmMvbG9hZGVyL2RyaXZlcnMvZWZ1c2UuaAorKysgYi9ib290L2NvbW1vbi9zcmMvbG9hZGVyL2RyaXZlcnMvZWZ1c2UuaApAQCAtNDMsNiArNDMsOCBAQAogI2RlZmluZSBaWDI5NzUyMFYzRUNPU0NDX0dXX05ZQl80R19ERFIJCTB4Rjg2MzEzCiAjZGVmaW5lIFpYMjk3NTIwVjNFQ09HR19HV19OWUNfMkdfRERSCQkweEY4NjMxNAogI2RlZmluZSBaWDI5NzUyMFYzRUNPR0dfR1dfTllCXzRHX0REUgkJMHhGODYzMTUKKyNkZWZpbmUgWlgyOTc1MjBWM0VDT0dHX0dXX05ZQ19OT1JfMkdfRERSCTB4Rjg2MzE2CisjZGVmaW5lIFpYMjk3NTIwVjNFQ09TQ19HV19OWUNfTk9SXzJHX0REUgkweEY4NjMxNwogCiAjZGVmaW5lIFpYMjk3NTIwVjNfWldfTllCXzFHX0REUgkJCTB4MUU4NzFFCiAjZGVmaW5lIFpYMjk3NTIwVjNfWldfTllDXzFHX0REUgkJCTB4MUU4NzFGCmRpZmYgLS1naXQgYS9ib290L2NvbW1vbi9zcmMvbG9hZGVyL2RyaXZlcnMvaW1hZ2UuYyBiL2Jvb3QvY29tbW9uL3NyYy9sb2FkZXIvZHJpdmVycy9pbWFnZS5jCmluZGV4IDA5YzI5NmEuLjQ2MTRlYjIgMTAwNzU1Ci0tLSBhL2Jvb3QvY29tbW9uL3NyYy9sb2FkZXIvZHJpdmVycy9pbWFnZS5jCisrKyBiL2Jvb3QvY29tbW9uL3NyYy9sb2FkZXIvZHJpdmVycy9pbWFnZS5jCkBAIC0yMjIsNyArMjIyLDcgQEAKIAl1aW50MzJfdCB1aVBhZ2VTaXplID0gMDsKIAogCXVpbnQzMl90IHVpSW1nSGRyU2l6ZU9sZCA9IHNpemVvZihpbWFnZV9oZWFkZXJfdCk7Ci0JdWludDMyX3QgdWlJbWdIZHJTaXplTmV3ID0gc2l6ZW9mKHNJbWFnZUhlYWRlcik7CisJdWludDMyX3QgdWlJbWdIZHJTaXplTmV3ID0gc2l6ZW9mKHNJbWFnZU5ld0hlYWRlcik7CiAKIAl1aW50MzJfdCB1aVVCb290U2l6ZSA9IDA7CiAJdWludDMyX3QgdWlVQm9vdExvYWRBZGRyID0gMDsKQEAgLTMyOSw3ICszMjksNyBAQAogCXdyaXRlbChyZW1hcCwweDE0MDAwMCk7CiAKIAkvKjOhor3izvZNMLXEsOaxvs23o6y78cih1MvQ0LXY1rfS1LywtPPQoSovCi0JaGVhZGVyID0gKGltYWdlX2hlYWRlcl90ICopQ09ORklHX1NZU19TRFJBTV9URU1QX0JBU0U7CisJaGVhZGVyID0gKGltYWdlX2hlYWRlcl90ICopKENPTkZJR19TWVNfU0RSQU1fVEVNUF9CQVNFICsgc2l6ZW9mKHNJbWFnZU5ld0hlYWRlcikpOwogCW0wX3NpemUgPSBfX19odG9ubChoZWFkZXItPmloX3NpemUpOyAgICAvKiBtMC5iaW4gKi8KIAltMF9sb2FkX2FkZHIgPSBfX19odG9ubChoZWFkZXItPmloX2xvYWQpOwogCSptMF9lbnRyeV9wb2ludCA9IF9fX2h0b25sKGhlYWRlci0+aWhfZXApOyAgIApAQCAtMzQwLDcgKzM0MCw3IEBACiAJfQogCiAJLyo0oaK9q00wtcSw5rG+tNNJUkFNML+9sbS1vWxvYWRfYWRkciovCi0JbWVtY3B5KG0wX2xvYWRfYWRkciwgQ09ORklHX1NZU19TRFJBTV9URU1QX0JBU0UgKyBpbWFnZV9oZWFkZXJfc2l6ZSwgbTBfc2l6ZSk7IAorCW1lbWNweShtMF9sb2FkX2FkZHIsIENPTkZJR19TWVNfU0RSQU1fVEVNUF9CQVNFICsgc2l6ZW9mKHNJbWFnZU5ld0hlYWRlcikrIGltYWdlX2hlYWRlcl9zaXplLCBtMF9zaXplKTsgCiAKIAkvKjWhotDeuMRJUkFNseq8x6OsyrlCT09UvMzQ+M35z8LWtNDQKi8KIAl3cml0ZWwoMCwgTTBfSU1BR0VfUkVBRFlfRkxBR19BRERSKTsKZGlmZiAtLWdpdCBhL2Jvb3QvY29tbW9uL3NyYy9sb2FkZXIvZHJpdmVycy9zZWN1cmVfdmVyaWZ5LmMgYi9ib290L2NvbW1vbi9zcmMvbG9hZGVyL2RyaXZlcnMvc2VjdXJlX3ZlcmlmeS5jCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggOThlZWE1Yy4uMzBlODQ3MwotLS0gYS9ib290L2NvbW1vbi9zcmMvbG9hZGVyL2RyaXZlcnMvc2VjdXJlX3ZlcmlmeS5jCisrKyBiL2Jvb3QvY29tbW9uL3NyYy9sb2FkZXIvZHJpdmVycy9zZWN1cmVfdmVyaWZ5LmMKQEAgLTcsMTQgKzcsMTAgQEAKICNpbmNsdWRlIDxhc20vc3RyaW5nLmg+CiAjaW5jbHVkZSA8c2Rpby5oPgogI2luY2x1ZGUgPGltYWdlLmg+Ci0jaW5jbHVkZSA8a2V5Lmg+Ci0KLQogI2luY2x1ZGUgImVmdXNlLmgiCiAjaW5jbHVkZSAiZHJ2X3JzYS5oIgogI2luY2x1ZGUgImRydl9oYXNoLmgiCiAKLQogI2RlZmluZSBFX05fTEVOIDI1NgogI2RlZmluZSBIQVNIX0xFTiAxMjgKIApAQCAtNjEsMjEgKzU3LDE5IEBACiAJdTMyIHVpTGVuID0gMDsKIAl1MzIgdWlSZXQgPSAtMTsKIAlpbWFnZV9oZWFkZXJfdCAqcHVpTGVnYWN5SW1nQWRkciA9IE5VTEw7Ci0Jc0ltYWdlSGVhZGVyICpwc0ltYWdlSGVhZGVyID0gTlVMTDsKKwlzSW1hZ2VOZXdIZWFkZXIgKnBzSW1hZ2VIZWFkZXIgPSBOVUxMOwogCWVmdXNlX3N0cnVjdCAqcHNFZnVzZUluZm8gPSBOVUxMOwogCiAJdTMyICpwdWlEYXRhTG9hZEFkZHIgPSBOVUxMOwotCXUzMiAqcHVpQXJyUHViS2V5RU4gPSBOVUxMOwogCXUzMiAqcHVpQXJySEFTSCA9IE5VTEw7CiAJdTMyIHVpSGFzaFJlc0Fycls0XSA9IHswfTsKIAl1MzIgdWlIYXNoUmVzTGVuID0gMDsKIAl1MzIgdWlIYXNoVmVyaWZ5U2l6ZSA9IDA7CiAJdTMyIHVpUnNhUmVzQXJyWzMyXSA9IHswfTsKKwl1MzIgcHVpQXJyUHViS2V5WzY0XSA9IHswfTsKIAlpbnQgZ3VpRWZ1c2VTdGF0dXMgPSAxOworCWludCBkZWZhdWx0X2ZsYWcgPSAxOwogCi0JdTMyIHNSYW1LZXlbNV0gPSB7U0VDVVJFX0VOLFNFQ1VSRV9QVUtfSEFTSDAsU0VDVVJFX1BVS19IQVNIMSwKLQkJCQkJICBTRUNVUkVfUFVLX0hBU0gyLFNFQ1VSRV9QVUtfSEFTSDN9OwotCQogCVRfUnNhX1BhcmFtdGVyIHNSU0FJbnB1dDsKIAl1MzIgKnB1aVJzYVJlc0FkZHIgPSBOVUxMOwogCkBAIC04NCwxNSArNzgsMjEgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAotCXBzSW1hZ2VIZWFkZXIgPSAoc0ltYWdlSGVhZGVyICopcHVpU2RybVN0YXJ0QWRkcjsKLQlwdWlMZWdhY3lJbWdBZGRyID0gKGltYWdlX2hlYWRlcl90ICopKHB1aVNkcm1TdGFydEFkZHIgKyBzaXplb2Yoc0ltYWdlSGVhZGVyKSk7CisJcHNJbWFnZUhlYWRlciA9IChzSW1hZ2VOZXdIZWFkZXIgKilwdWlTZHJtU3RhcnRBZGRyOworCXB1aUxlZ2FjeUltZ0FkZHIgPSAoaW1hZ2VfaGVhZGVyX3QgKikocHVpU2RybVN0YXJ0QWRkciArIHNpemVvZihzSW1hZ2VOZXdIZWFkZXIpKTsKIAl1aUhhc2hWZXJpZnlTaXplID0gX19faHRvbmwocHVpTGVnYWN5SW1nQWRkci0+aWhfc2l6ZSkgKyBzaXplb2YoaW1hZ2VfaGVhZGVyX3QpOwogCiAJZ3VpRWZ1c2VTdGF0dXMgPSBnZXRfc2VjdXJlX3ZlcmlmeV9zdGF0dXMoKTsKIAlpZihndWlFZnVzZVN0YXR1cyA9PSAwKSAgICAvL2VmdXNlIHNlY3VyZSB2ZXJpZnkuCiAJCXBzRWZ1c2VJbmZvID0gKGVmdXNlX3N0cnVjdCopRUZVU0VfUkFNX0JBU0U7CiAJZWxzZQotCQlwc0VmdXNlSW5mbyA9IChlZnVzZV9zdHJ1Y3QqKXNSYW1LZXk7CisJeworCQlkZWZhdWx0X2ZsYWcgPSAwOworI2lmIGRlZmluZWQoQ09ORklHX1pYMjk3NTIwVjNFX1ZFSElDTEVfREMpIHx8IGRlZmluZWQoQ09ORklHX1pYMjk3NTIwVjNFX1ZFSElDTEVfRENfUkVGKQorICAgICAgICByZXR1cm4gMDsKKyNlbmRpZgorCX0KKwkJCiAKIAkvKgogCSAqIDAuILzssulQdWJLZXnKx7fxsbu027jEoaMKQEAgLTEwMiwxMSArMTAyLDEyIEBACiAJICogICAgLSCyu82so6y3tbvYMaGjCiAJICovCiAJdWlMZW4gPSBFX05fTEVOOyAgLy+5q9S/RbrNTqOsubIyNTZieXRls6S2yKGjCi0JcHVpQXJyUHViS2V5RU4gPSBwc0ltYWdlSGVhZGVyLT51aVB1YktleVJzYUU7Ci0KKwltZW1jcHkoKHB1aUFyclB1YktleSszMSksIHBzSW1hZ2VIZWFkZXItPnVpUHViS2V5UnNhRSwgNCk7CisJbWVtY3B5KChwdWlBcnJQdWJLZXkrMzIpLCBwc0ltYWdlSGVhZGVyLT51aVB1YktleVJzYU4sIDEyOCk7CisJCiAJdWlSZXQgPSBIYXNoX0NhbGN1bGF0ZShIQVNIX01PREVfTUQ1LCAKIAkJCQkJCSAgIEhBU0hfU01BTExfRU5ESUFOLCAKLQkJCQkJCSAgIHB1aUFyclB1YktleUVOLCAKKwkJCQkJCSAgIHB1aUFyclB1YktleSwgCiAJCQkJCQkgICB1aUxlbiwgCiAJCQkJCQkgICBOVUxMLCAKIAkJCQkJCSAgIDAsIApAQCAtMTE0LDE4ICsxMTUsMjEgQEAKIAkJCQkJCSAgICZ1aUhhc2hSZXNMZW4pOwogCWlmKHVpUmV0ICE9IDApCiAJewotCQlyZXR1cm4gLTE7Ci0JfQotCQotCWlmKGRhdGFfY21wX3dvcmQoKHUzMiAqKXBzRWZ1c2VJbmZvLT5wdWtfaGFzaCwgCi0JCQkJCQl1aUhhc2hSZXNBcnIsIHVpSGFzaFJlc0xlbikpCi0JewotCQlwcmludGYoIlB1ayBoYXNoIHZlcmlmeSBmYWlsIVxuIik7Ci0JCXJldHVybiAtMTsKKwkJcmV0dXJuIDE7CiAJfQogCisJaWYoMSA9PSBkZWZhdWx0X2ZsYWcpCisJeworCQlpZihkYXRhX2NtcF93b3JkKCh1MzIgKilwc0VmdXNlSW5mby0+cHVrX2hhc2gsIAorCQkJCQkJCXVpSGFzaFJlc0FyciwgdWlIYXNoUmVzTGVuKSkKKwkJeworCQkJLy9wcmludGYoIlB1ayBoYXNoIHZlcmlmeSBmYWlsIVxuIik7CisJCQlwcmludGYoIjJcbiIpOworCQkJcmV0dXJuIDI7CisJCX0JCisJfQorCQkJCQkJCiAJcHVpQXJySEFTSCA9IHBzSW1hZ2VIZWFkZXItPnVpSGFzaFk7Ci0JdWlMZW4gPSBIQVNIX0xFTjsKIAogCS8qCiAJICogMS4gwPvTw7mr1L+21HVpSGFzaFknvfjQ0L3iw9yjrLXDtb0xMDI0Yml0veG5+6GjCkBAIC0xMzQsMTUgKzEzOCwxNiBAQAogCXNSU0FJbnB1dC51ZE5iaXRMZW4gPSAxMDI0OwogCXNSU0FJbnB1dC51ZEViaXRMZW4gPSAxMDI0OwogCXNSU0FJbnB1dC5wdWRJbnB1dE0gPSBwdWlBcnJIQVNIOwotCXNSU0FJbnB1dC5wdWRJbnB1dEUgPSBwdWlBcnJQdWJLZXlFTjsKLQlzUlNBSW5wdXQucHVkSW5wdXROID0gKHB1aUFyclB1YktleUVOICsgMzIpOworCXNSU0FJbnB1dC5wdWRJbnB1dEUgPSBwdWlBcnJQdWJLZXk7CisJc1JTQUlucHV0LnB1ZElucHV0TiA9IChwdWlBcnJQdWJLZXkgKyAzMik7CiAJc1JTQUlucHV0LnB1ZE91dHB1dFAgPSB1aVJzYVJlc0FycjsKIAkKIAl1aVJldCA9IFJzYV9DYWxjdWxhdGUoc1JTQUlucHV0KTsKIAlpZih1aVJldCAhPSAwKQogCXsKLQkJcHJpbnRmKCJSc2FfQ2FsY3VsYXRlIGZhaWwhXG4iKTsKLQkJcmV0dXJuIC0xOworCQkvL3ByaW50ZigiUnNhX0NhbGN1bGF0ZSBmYWlsIVxuIik7CisJCXByaW50ZigiM1xuIik7CisJCXJldHVybiAzOwogCX0KIAogCS8vyKHX7rrzNNfWvdrX986qUHViS2V5veLD3LrztcRIQVNIX01ENda1oaMKQEAgLTE2MCw3ICsxNjUsNyBAQAogCS8qIENsZWFudXAgT3V0cHV0IEJ1ZmZlci4gKi8KIAl1aUhhc2hSZXNMZW4gPSAwOwogCW1lbXNldCh1aUhhc2hSZXNBcnIsIDAsIDQqc2l6ZW9mKHVpSGFzaFJlc0FyclswXSkpOwotCQorCQkKIAl1aVJldCA9IEhhc2hfQ2FsY3VsYXRlKEhBU0hfTU9ERV9NRDUsIAogCQkJCQkJICAgSEFTSF9TTUFMTF9FTkRJQU4sIAogCQkJCQkJICAgcHVpRGF0YUxvYWRBZGRyLCAKQEAgLTE3MSwxNiArMTc2LDE3IEBACiAJCQkJCQkgICAmdWlIYXNoUmVzTGVuKTsKIAlpZih1aVJldCAhPSAwKQogCXsKLQkJcHJpbnRmKCJIYXNoX0NhbGN1bGF0ZSBGYWlsIVxuIik7Ci0JCXJldHVybiAtMTsKKwkJLy9wcmludGYoIkhhc2hfQ2FsY3VsYXRlIEZhaWwhXG4iKTsKKwkJcHJpbnRmKCI0XG4iKTsKKwkJcmV0dXJuIDQ7CiAJfQogCiAJaWYoZGF0YV9jbXBfd29yZChwdWlSc2FSZXNBZGRyLCB1aUhhc2hSZXNBcnIsIHVpSGFzaFJlc0xlbikpCiAJewotCQlwcmludGYoIlNpZ25JbWFnZSBWZXJpZnkgRmFpbCFcbiIpOwotCQlyZXR1cm4gLTE7CisJCS8vcHJpbnRmKCJTaWduSW1hZ2UgVmVyaWZ5IEZhaWwhXG4iKTsKKwkJcHJpbnRmKCI1XG4iKTsKKwkJcmV0dXJuIDU7CiAJfQotCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2Jvb3QvY29tbW9uL3NyYy9sb2FkZXIvZHJpdmVycy9zcGlmYy5jIGIvYm9vdC9jb21tb24vc3JjL2xvYWRlci9kcml2ZXJzL3NwaWZjLmMKaW5kZXggNjFlYTE4Ni4uYjQxZWZmYyAxMDA3NTUKLS0tIGEvYm9vdC9jb21tb24vc3JjL2xvYWRlci9kcml2ZXJzL3NwaWZjLmMKKysrIGIvYm9vdC9jb21tb24vc3JjL2xvYWRlci9kcml2ZXJzL3NwaWZjLmMKQEAgLTc3LDYgKzc3LDggQEAKIAl7MHgyQywgMHgzNSwgMHg3NywgNDA5NiwgMTIsIDI1NiwgMTgsIDIwNDgsIDB4NDAwMDAsIDF9LAogCS8qWFRYIFhUMjZRMDREIDUxMk0gU1BJLU5BTkQqLwogCXsweDBCLCAweDUzLCAweDc3LCA0MDk2LCAxMiwgMjU2LCAxOCwgMjA0OCwgMHg0MDAwMCwgMX0sCisJLypVTklNIFVNMTlBMExJU1cgMTI4TSBTUEktTkFORCovCisJezB4QjAsIDB4MTUsIDB4NzcsIDIwNDgsIDExLCA2NCwgMTcsIDEwMjQsIDB4MjAwMDAsIDF9LAogCXswfQogfTsKIApAQCAtODQ3LDEyICs4NDksMTkgQEAKIAlwcmludGYoInNwaS1uYW5kOiIpOwogCQogCWJvb3RfbW9kZSA9IGdldF9ib290X21vZGUoKTsKKyNpZiBkZWZpbmVkKENPTkZJR19aWDI5NzUyMFYzRV9WRUhJQ0xFX0RDKSB8fCBkZWZpbmVkKENPTkZJR19aWDI5NzUyMFYzRV9WRUhJQ0xFX0RDX1JFRikKKyAgICBpZihib290X21vZGUgPT0gTk9SX0JPT1QpCisJeworCQl3cml0ZWwoQ0ZHX1NUQVJUX01PREVfU1BJX05BTkQsIENGR19CT09UX01PREVfU1RBUlRfTU9ERV9GT1JfVUJPT1QpOworCQlyZXR1cm4gMDsgCisJfQorI2Vsc2UKIAlpZihib290X21vZGUgIT0gU1BJX05BTkRfQk9PVCkKIAl7CiAJCXByaW50ZigibW9kZSBlcnIuXG4iKTsKIAkJcmV0dXJuIC0xOyAKIAl9Ci0KKyNlbmRpZgogCXdyaXRlbChDRkdfU1RBUlRfTU9ERV9TUElfTkFORCwgQ0ZHX0JPT1RfTU9ERV9TVEFSVF9NT0RFX0ZPUl9VQk9PVCk7IAogCXJldCA9IHNwaWZjX2luaXQoKTsKIAlpZihyZXQgIT0gMCkK