ZGlmZiAtLWdpdCBhL2NwL3BzL2RyaXZlci9zcmMvY2hpcHNldHMvc3JjL2F1ZGlvX2Jhc2UvaTJzL2hhbF9pMnMuYyBiL2NwL3BzL2RyaXZlci9zcmMvY2hpcHNldHMvc3JjL2F1ZGlvX2Jhc2UvaTJzL2hhbF9pMnMuYwppbmRleCA1ZWE3YzFkLi4zNzdlNzI2IDEwMDc1NQotLS0gYS9jcC9wcy9kcml2ZXIvc3JjL2NoaXBzZXRzL3NyYy9hdWRpb19iYXNlL2kycy9oYWxfaTJzLmMKKysrIGIvY3AvcHMvZHJpdmVyL3NyYy9jaGlwc2V0cy9zcmMvYXVkaW9fYmFzZS9pMnMvaGFsX2kycy5jCkBAIC0zNjk4LDYgKzM2OTgsMjkgQEAKIAlyZXR1cm4gRFJWX1NVQ0NFU1M7DQogfQ0KIA0KKy8vTFlOUV9NT0RJRllfWlhXX0JVR18zODVfMjAyNDExMDVDNTVGMTY0MF9TVEFSVA0KK1ZPSUQgekRydkkyU19SZWdfUHJpbnRmKFZPSUQpDQorew0KKwl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiKHpEcnZJMlNfUmVnX1ByaW50ZihJMlNfMSB0aW1pbmcgY3RybCkgPSAweCU4eCIsIChzX2kyc0luc3RhbmNlW0kyU18xXS5wdERldiktPnJlZ3MtPnRpbWluZ0N0cmwpOw0KKwl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiKHpEcnZJMlNfUmVnX1ByaW50ZihJMlNfMSBmaWZvIGN0cmwpID0gMHglOHgiLCAoc19pMnNJbnN0YW5jZVtJMlNfMV0ucHREZXYpLT5yZWdzLT5maWZvQ3RybCk7DQorCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICIoekRydkkyU19SZWdfUHJpbnRmKEkyU18xIGZyYW1lIGN0cmwpID0gMHglOHgiLCAoc19pMnNJbnN0YW5jZVtJMlNfMV0ucHREZXYpLT5yZWdzLT5mcmFtZUNudHIpOw0KKwl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiKHpEcnZJMlNfUmVnX1ByaW50ZihJMlNfMSBmaWZvc3RhdHVzKSA9IDB4JTh4IiwgKHNfaTJzSW5zdGFuY2VbSTJTXzFdLnB0RGV2KS0+cmVncy0+Zmlmb1N0YXR1cyk7DQorCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICIoekRydkkyU19SZWdfUHJpbnRmKEkyU18xIHByb2Nlc3MgY3RybCkgPSAweCU4eCIsIChzX2kyc0luc3RhbmNlW0kyU18xXS5wdERldiktPnJlZ3MtPnByb2Nlc3NDdHJsKTsNCisJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgInpEcnZJMlNfUmVnX1ByaW50ZihJMlNfMSByZWcgaW50RW4pID0gMHglOHgiLCAoc19pMnNJbnN0YW5jZVtJMlNfMV0ucHREZXYpLT5yZWdzLT5pbnRFbik7DQorCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJ6RHJ2STJTX1JlZ19QcmludGYoSTJTXzEgcmVnIGludFN0YXR1cykgPSAweCU4eFxuIiwgKHNfaTJzSW5zdGFuY2VbSTJTXzFdLnB0RGV2KS0+cmVncy0+aW50U3RhdHVzKTsNCisJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgInpEcnZJMlNfUmVnX1ByaW50ZihJMlNfMSByZWcgZGF0YSkgPSAweCU4eFxuIiwgKHNfaTJzSW5zdGFuY2VbSTJTXzFdLnB0RGV2KS0+cmVncy0+ZGF0YSk7DQorDQorCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICIoekRydkkyU19SZWdfUHJpbnRmKEkyU18yIHRpbWluZyBjdHJsKSA9IDB4JTh4IiwgKHNfaTJzSW5zdGFuY2VbSTJTXzJdLnB0RGV2KS0+cmVncy0+dGltaW5nQ3RybCk7DQorCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICIoekRydkkyU19SZWdfUHJpbnRmKEkyU18yIGZpZm8gY3RybCkgPSAweCU4eCIsIChzX2kyc0luc3RhbmNlW0kyU18yXS5wdERldiktPnJlZ3MtPmZpZm9DdHJsKTsNCisJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgIih6RHJ2STJTX1JlZ19QcmludGYoSTJTXzIgZnJhbWUgY3RybCkgPSAweCU4eCIsIChzX2kyc0luc3RhbmNlW0kyU18yXS5wdERldiktPnJlZ3MtPmZyYW1lQ250cik7DQorCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICIoekRydkkyU19SZWdfUHJpbnRmKEkyU18yIGZpZm9zdGF0dXMpID0gMHglOHgiLCAoc19pMnNJbnN0YW5jZVtJMlNfMl0ucHREZXYpLT5yZWdzLT5maWZvU3RhdHVzKTsNCisJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgIih6RHJ2STJTX1JlZ19QcmludGYoSTJTXzIgcHJvY2VzcyBjdHJsKSA9IDB4JTh4IiwgKHNfaTJzSW5zdGFuY2VbSTJTXzJdLnB0RGV2KS0+cmVncy0+cHJvY2Vzc0N0cmwpOw0KKwl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiekRydkkyU19SZWdfUHJpbnRmKEkyU18yIHJlZyBpbnRFbikgPSAweCU4eCIsIChzX2kyc0luc3RhbmNlW0kyU18yXS5wdERldiktPnJlZ3MtPmludEVuKTsNCisJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgInpEcnZJMlNfUmVnX1ByaW50ZihJMlNfMiByZWcgaW50U3RhdHVzKSA9IDB4JTh4XG4iLCAoc19pMnNJbnN0YW5jZVtJMlNfMl0ucHREZXYpLT5yZWdzLT5pbnRTdGF0dXMpOw0KKwl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiekRydkkyU19SZWdfUHJpbnRmKEkyU18yIHJlZyBkYXRhKSA9IDB4JTh4XG4iLCAoc19pMnNJbnN0YW5jZVtJMlNfMl0ucHREZXYpLT5yZWdzLT5kYXRhKTsNCit9DQorLy9MWU5RX01PRElGWV9aWFdfQlVHXzM4NV8yMDI0MTEwNUM1NUYxNjQwX0VORA0KKw0KIC8qKg0KICogQGJyaWVmCWkycyByZWFkIHN0YXJ0IGRvLg0KICoNCmRpZmYgLS1naXQgYS9jcC9wcy9kcml2ZXIvc3JjL2NoaXBzZXRzL3NyYy9hdWRpb19iYXNlL3RkbS9oYWxfdGRtLmMgYi9jcC9wcy9kcml2ZXIvc3JjL2NoaXBzZXRzL3NyYy9hdWRpb19iYXNlL3RkbS9oYWxfdGRtLmMKaW5kZXggNTBlMjhkYS4uM2E3NzhhNiAxMDA3NTUKLS0tIGEvY3AvcHMvZHJpdmVyL3NyYy9jaGlwc2V0cy9zcmMvYXVkaW9fYmFzZS90ZG0vaGFsX3RkbS5jCisrKyBiL2NwL3BzL2RyaXZlci9zcmMvY2hpcHNldHMvc3JjL2F1ZGlvX2Jhc2UvdGRtL2hhbF90ZG0uYwpAQCAtMjg2LDcgKzI4NiwxMSBAQAogLy8JekRydkRtYV9DYWxsYmFja0Z1bmMgICAgICAgIGZEbWFDYlR4Ow0KICAgICBTSU5UMzIJCQkJCQkgRG1hUnhJRDsJDQogICAgIFNJTlQzMgkJCQkJCSBEbWFUeElEOwkNCi0gICAgVF9aRHJ2STJzX1RyYW5zTW9kZSAgICAgICAgICB0ZG1UcmFuc01vZGU7ICAgICAgICANCisgICAgVF9aRHJ2STJzX1RyYW5zTW9kZSAgICAgICAgICB0ZG1UcmFuc01vZGU7ICAgDQorLy9MWU5RX01PRElGWV9aWFdfQlVHXzM4NV8yMDI0MTEwNUM1NUYxNjQwX1NUQVJUDQorICAgIFpPU1NfTVVURVhfSUQJCQkJcnhNdXRleDsNCisJWk9TU19NVVRFWF9JRAkJCQl0eE11dGV4Ow0KKy8vTFlOUV9NT0RJRllfWlhXX0JVR18zODVfMjAyNDExMDVDNTVGMTY0MF9FTkQNCiB9IFRfVGRtX0luc3RhbmNlOw0KIA0KIHR5cGVkZWYgc3RydWN0DQpAQCAtMjYxNyw2ICsyNjIxLDE0IEBACiAgICAgc19UZG1EZXYuaW50cHJpbyA9IDE1Ow0KICAgICBzX1RkbURldi5yZWdzID0gKFRfVGRtX1JlZyopVERNX1JFR19CQVNFOyAgICAgICAgICAgIA0KICAgICBzX3RkbUluc3RhbmNlLnB0RGV2ID0gJnNfVGRtRGV2Ow0KKw0KKy8vTFlOUV9NT0RJRllfWlhXX0JVR18zODVfMjAyNDExMDVDNTVGMTY0MF9TVEFSVA0KKyAgICBzX3RkbUluc3RhbmNlLnR4TXV0ZXggPSB6T3NzX0NyZWF0ZU11dGV4KCJ0ZG1UeE11dGV4IiwgMSk7DQorCXpPc3NfQVNTRVJUKHNfdGRtSW5zdGFuY2UudHhNdXRleCAhPSBaT1NTX05VTEwpOw0KKyAgICBzX3RkbUluc3RhbmNlLnJ4TXV0ZXggPSB6T3NzX0NyZWF0ZU11dGV4KCJ0ZG1SeE11dGV4IiwgMSk7DQorCXpPc3NfQVNTRVJUKHNfdGRtSW5zdGFuY2UucnhNdXRleCAhPSBaT1NTX05VTEwpOw0KKy8vTFlOUV9NT0RJRllfWlhXX0JVR18zODVfMjAyNDExMDVDNTVGMTY0MF9FTkQNCisgICAgDQogICAgIHNfYlRkbUluaXRJbnQgPSBUUlVFOw0KIAl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiKHRkbV9Jbml0SW50KFRETV9SRUdfQkFTRSkgPSAleCIsVERNX1JFR19CQVNFKTsgDQogfQ0KQEAgLTMxMTEsNiArMzEyMywyNSBAQAogICAgIHJldHVybiBEUlZfU1VDQ0VTUzsNCiB9DQogDQorLy9MWU5RX01PRElGWV9aWFdfQlVHXzM4NV8yMDI0MTEwNUM1NUYxNjQwX1NUQVJUDQorVk9JRCB6RHJ2VERNX1JlZ19QcmludGYoVk9JRCkNCit7DQorCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICIoekRydlRETV9SZWdfUHJpbnRmIHRpbWluZyBjdHJsKSA9ICV4IiwgIChzX3RkbUluc3RhbmNlLnB0RGV2KS0+cmVncy0+dGltaW5nQ3RybCk7DQorCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICIoekRydlRETV9SZWdfUHJpbnRmIGZyYW1lIGN0cmwpID0gJXgiLChzX3RkbUluc3RhbmNlLnB0RGV2KS0+cmVncy0+ZnJhbWVDbnRyKTsNCisJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgIih6RHJ2VERNX1JlZ19QcmludGYgdHhGaWZvQ3RybCkgPSAleCIsIChzX3RkbUluc3RhbmNlLnB0RGV2KS0+cmVncy0+dHhGaWZvQ3RybCk7DQorICAgIHpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICIoekRydlRETV9SZWdfUHJpbnRmIHJ4Rmlmb0N0cmwpID0gJXgiLCAoc190ZG1JbnN0YW5jZS5wdERldiktPnJlZ3MtPnJ4Rmlmb0N0cmwpOw0KKwl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiKHpEcnZURE1fUmVnX1ByaW50ZiBwcm9jZXNzIGN0cmwpID0gJXgiLCAoc190ZG1JbnN0YW5jZS5wdERldiktPnJlZ3MtPnByb2Nlc3NDdHJsKTsNCisJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgIih6RHJ2VERNX1JlZ19QcmludGYgcmVnIGludEVuKSA9ICV4IiwgIChzX3RkbUluc3RhbmNlLnB0RGV2KS0+cmVncy0+aW50RW4pOw0KKwl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiKHpEcnZURE1fUmVnX1ByaW50ZiByZWcgaW50U3RhdHVzKSA9ICV4XG4iLCAoc190ZG1JbnN0YW5jZS5wdERldiktPnJlZ3MtPmludFN0YXR1cyk7DQorCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICIoekRydlRETV9SZWdfUHJpbnRmIHJlZyB3cml0ZUNudEN0cmwpID0gJXhcbiIsICAoc190ZG1JbnN0YW5jZS5wdERldiktPnJlZ3MtPndyaXRlQ250Q3RybCk7DQorCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICIoekRydlRETV9SZWdfUHJpbnRmIHJlZyB3cml0ZUNudHIpID0gJXhcbiIsICAoc190ZG1JbnN0YW5jZS5wdERldiktPnJlZ3MtPndyaXRlQ250cik7DQorCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICIoekRydlRETV9SZWdfUHJpbnRmIHJlZyB3cml0ZUNudHIyKSA9ICV4XG4iLCAgKHNfdGRtSW5zdGFuY2UucHREZXYpLT5yZWdzLT53cml0ZUNudHIyKTsgICAgDQorICAgIHpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICIoekRydlRETV9SZWdfUHJpbnRmIHJlZyByZWFkQ250Q3RybCkgPSAleFxuIiwgIChzX3RkbUluc3RhbmNlLnB0RGV2KS0+cmVncy0+cmVhZENudEN0cmwpOw0KKyAgICB6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiKHpEcnZURE1fUmVnX1ByaW50ZiByZWcgcmVhZENudHIpID0gJXhcbiIsICAoc190ZG1JbnN0YW5jZS5wdERldiktPnJlZ3MtPnJlYWRDbnRyKTsNCisgICAgekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgIih6RHJ2VERNX1JlZ19QcmludGYgcmVnIHJlYWRDbnRyMikgPSAleFxuIiwgIChzX3RkbUluc3RhbmNlLnB0RGV2KS0+cmVncy0+cmVhZENudHIyKTsNCit9DQorLy9MWU5RX01PRElGWV9aWFdfQlVHXzM4NV8yMDI0MTEwNUM1NUYxNjQwX0VORA0KKw0KIFNJTlQzMiB6RHJ2VERNX1JlYWRfU3RhcnRfRG8oVF9aRHJ2VGRtX1BhcmFtcyAqcGFyYW1zKQ0KIHsNCiANCkBAIC0zMjM0LDYgKzMyNjUsMTAgQEAKICAgICB7DQogICAgICAgICByZXR1cm4gRFJWX0VSUl9OT1RfU1RBUlRFRDsNCiAgICAgfQ0KKw0KKy8vTFlOUV9NT0RJRllfWlhXX0JVR18zODVfMjAyNDExMDVDNTVGMTY0MF9TVEFSVA0KKyAgICB6T3NzX0dldE11dGV4KHB0SW5zdGFuY2UtPnR4TXV0ZXgsIFpPU1NfV0FJVF9GT1JFVkVSKTsNCisvL0xZTlFfTU9ESUZZX1pYV19CVUdfMzg1XzIwMjQxMTA1QzU1RjE2NDBfRU5EDQogICAgIHJldCA9IHRkbV9VcGRhdGVUeEJ1ZmZlclN0YXR1cygoVUlOVDE2ICopcEJ1ZiAsIEJVRkZFUl9GVUxMKTsgICAgICAgLyrJz7LjzfkqcEJ1ZtC0zerK/b7duvOjrLjEseRCVUbXtMyszqpGVUxMKi8NCiAgICAgaWYgKHJldCAhPSBEUlZfU1VDQ0VTUykNCiAgICAgew0KQEAgLTMyNTIsNyArMzI4NywxMCBAQAogCQkJCXJldHVybiBEUlZfRVJST1I7DQogCQkJfSovDQogCX0NCi0JDQorLy9MWU5RX01PRElGWV9aWFdfQlVHXzM4NV8yMDI0MTEwNUM1NUYxNjQwX1NUQVJUDQorICAgIHpPc3NfUHV0TXV0ZXgocHRJbnN0YW5jZS0+dHhNdXRleCk7DQorLy9MWU5RX01PRElGWV9aWFdfQlVHXzM4NV8yMDI0MTEwNUM1NUYxNjQwX0VORA0KKyAgICANCiAgICAgcmV0dXJuIERSVl9TVUNDRVNTOw0KIH0NCiANCkBAIC0zMjk3LDcgKzMzMzUsMTAgQEAKICAgICAgICAgcmV0dXJuIERSVl9FUlJPUjsNCiAgICAgfQ0KICAgICAvL3pEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJ6RHJ2VERNX1JlYWQgek9zc19HZXRTZW1hcGhvcmUgZG9uZSIpOw0KLQ0KKy8vTFlOUV9NT0RJRllfWlhXX0JVR18zODVfMjAyNDExMDVDNTVGMTY0MF9TVEFSVA0KKyAgICB6T3NzX0dldE11dGV4KHB0SW5zdGFuY2UtPnJ4TXV0ZXgsIFpPU1NfV0FJVF9GT1JFVkVSKTsNCisvL0xZTlFfTU9ESUZZX1pYV19CVUdfMzg1XzIwMjQxMTA1QzU1RjE2NDBfRU5EDQorICAgIA0KIAkqcEJ1ZiA9IHRkbVN0cmVhbS0+cnhCdWZmZXJBcnJheVt0ZG1TdHJlYW0tPnJ4UmRJZHhdLmJ1ZjsNCiAJKnVpTGVuID0gdGRtU3RyZWFtLT5yeExlbjsNCiAJdGRtX1VwZGF0ZVJ4QnVmZmVyU3RhdHVzKChVSU5UMTYgKil0ZG1TdHJlYW0tPnJ4QnVmZmVyQXJyYXlbdGRtU3RyZWFtLT5yeFJkSWR4XS5idWYsIEJVRkZFUl9SRUFEKTsNCkBAIC0zMzI3LDcgKzMzNjgsMTAgQEAKICAgICAgICAgcmV0dXJuIERSVl9FUlJPUjsNCiAgICAgfQ0KIAkjZW5kaWYNCi0JDQorLy9MWU5RX01PRElGWV9aWFdfQlVHXzM4NV8yMDI0MTEwNUM1NUYxNjQwX1NUQVJUDQorCXpPc3NfUHV0TXV0ZXgocHRJbnN0YW5jZS0+cnhNdXRleCk7DQorLy9MWU5RX01PRElGWV9aWFdfQlVHXzM4NV8yMDI0MTEwNUM1NUYxNjQwX0VORA0KKyAgICANCiAgICAgcmV0dXJuIERSVl9TVUNDRVNTOw0KIH0NCiANCkBAIC0zMzY4LDYgKzM0MTIsMTAgQEAKICAgICBwdFJlZy0+aW50U3RhdHVzIHw9IFRETV9JTlRfVFhfVEhSRVNIT0xEOw0KICAgICBwdFJlZy0+aW50RW4gJj0gflRETV9JTlRfRU5fVFhfVEhSRVNIT0xEOyAgICAgICAvKiBkaXNhYmxlIHR4IGludGVycnVwdCAqLw0KIA0KKy8vTFlOUV9NT0RJRllfWlhXX0JVR18zODVfMjAyNDExMDVDNTVGMTY0MF9TVEFSVA0KKyAgICB6T3NzX0dldE11dGV4KHB0SW5zdGFuY2UtPnR4TXV0ZXgsIFpPU1NfV0FJVF9GT1JFVkVSKTsNCisvL0xZTlFfTU9ESUZZX1pYV19CVUdfMzg1XzIwMjQxMTA1QzU1RjE2NDBfRU5EDQorDQogICAgIHJldCA9IHRkbV9DbGVhblR4UmVzb3VyY2UoKTsNCiAJLyprbG9jd29yayAzIElOVkFSSUFOVF9DT05ESVRJT04uVU5SRUFDSCAgZGVsZXRlIGlmKi8NCiAJLyoNCkBAIC0zMzc1LDYgKzM0MjMsMTAgQEAKICAgICB7DQogICAgICAgICByZXR1cm4gRFJWX0VSUk9SOw0KICAgICB9Ki8NCisvL0xZTlFfTU9ESUZZX1pYV19CVUdfMzg1XzIwMjQxMTA1QzU1RjE2NDBfU1RBUlQNCisgICAgek9zc19QdXRNdXRleChwdEluc3RhbmNlLT50eE11dGV4KTsNCisvL0xZTlFfTU9ESUZZX1pYV19CVUdfMzg1XzIwMjQxMTA1QzU1RjE2NDBfRU5EDQorDQogICAgIHR4U3RyZWFtLT50eFRyYW5zbWl0ID0gTlVMTDsNCiAgICAgdHhTdHJlYW0tPmNoYW5uZWwgPSBBVURJT19NT05PX0NIQU5ORUw7DQogICAgIHR4U3RyZWFtLT50eExlbiA9IDA7DQpAQCAtMzQyNiw2ICszNDc4LDEwIEBACiAgICAgcHRSZWctPmludFN0YXR1cyB8PSBURE1fSU5UX1JYX1RIUkVTSE9MRDsNCiAgICAgcHRSZWctPmludEVuICY9IH5URE1fSU5UX0VOX1JYX1RIUkVTSE9MRDsgICAgICAgLyogZGlzYWJsZSB0eCBpbnRlcnJ1cHQgKi8NCiANCisvL0xZTlFfTU9ESUZZX1pYV19CVUdfMzg1XzIwMjQxMTA1QzU1RjE2NDBfU1RBUlQNCisgICAgek9zc19HZXRNdXRleChwdEluc3RhbmNlLT5yeE11dGV4LCBaT1NTX1dBSVRfRk9SRVZFUik7DQorLy9MWU5RX01PRElGWV9aWFdfQlVHXzM4NV8yMDI0MTEwNUM1NUYxNjQwX0VORA0KKyAgICANCiAgICAgcmV0ID0gdGRtX0NsZWFuUnhSZXNvdXJjZSgpOw0KIAkvKmtsb2N3b3JrIDMgSU5WQVJJQU5UX0NPTkRJVElPTi5VTlJFQUNIICBkZWxldGUgaWYqLw0KIAkvKg0KQEAgLTM0MzMsNiArMzQ4OSw5IEBACiAgICAgew0KICAgICAgICAgcmV0dXJuIERSVl9FUlJPUjsNCiAgICAgfSovDQorLy9MWU5RX01PRElGWV9aWFdfQlVHXzM4NV8yMDI0MTEwNUM1NUYxNjQwX1NUQVJUDQorICAgIHpPc3NfUHV0TXV0ZXgocHRJbnN0YW5jZS0+cnhNdXRleCk7DQorLy9MWU5RX01PRElGWV9aWFdfQlVHXzM4NV8yMDI0MTEwNUM1NUYxNjQwX0VORA0KIA0KICAgICBpZiAocHRJbnN0YW5jZS0+dGRtU3RhdHVzICE9IFRETV9CT1RIX0lOVVNFKQ0KICAgICB7DQpAQCAtMzQ4Niw3ICszNTQ1LDkgQEAKICAgICAgICAgcmV0dXJuIERSVl9FUlJPUjsNCiAgICAgfQ0KIA0KLQ0KKy8vTFlOUV9NT0RJRllfWlhXX0JVR18zODVfMjAyNDExMDVDNTVGMTY0MF9TVEFSVA0KKyAgICB6T3NzX0dldE11dGV4KHB0SW5zdGFuY2UtPnR4TXV0ZXgsIFpPU1NfV0FJVF9GT1JFVkVSKTsNCisvL0xZTlFfTU9ESUZZX1pYV19CVUdfMzg1XzIwMjQxMTA1QzU1RjE2NDBfRU5EDQogCWlmKHRkbVN0cmVhbS0+dHhCdWZmZXJBcnJheSA9PSBOVUxMKSB7DQogICAgICAgICB6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiekRydlRETV9HZXRCdWYgdGRtU3RyZWFtLT50eEJ1ZmZlckFycmF5ID09IE5VTEwgIFxuICIpOwkNCiAJCXJldHVybiBEUlZfRVJST1I7LyogIL3ivvZQU7X3wctTVE9QuvNMVEW8zND40LTK/b7dt8POyr/V1rjV68vAu/ogKi8NCkBAIC0zNTE2LDYgKzM1NzcsOSBAQAogCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICIoekRydlRETV9HZXRCdWYgcmVnIHJlYWRDbnRyKSA9ICV4XG4iLCAgKHNfdGRtSW5zdGFuY2UucHREZXYpLT5yZWdzLT5yZWFkQ250cik7DQogCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICIoekRydlRETV9HZXRCdWYgcmVnIHJlYWRDbnRyMikgPSAleFxuIiwgIChzX3RkbUluc3RhbmNlLnB0RGV2KS0+cmVncy0+cmVhZENudHIyKTsNCiAjZW5kaWYNCisvL0xZTlFfTU9ESUZZX1pYV19CVUdfMzg1XzIwMjQxMTA1QzU1RjE2NDBfU1RBUlQNCisgICAgek9zc19QdXRNdXRleChwdEluc3RhbmNlLT50eE11dGV4KTsNCisvL0xZTlFfTU9ESUZZX1pYV19CVUdfMzg1XzIwMjQxMTA1QzU1RjE2NDBfRU5EDQogICAgIHJldHVybiBEUlZfU1VDQ0VTUzsNCiB9DQogDQpAQCAtMzU5Nyw3ICszNjYxLDkgQEAKICAgICB7DQogICAgICAgICByZXR1cm4gRFJWX0VSUl9OT1RfU1RBUlRFRDsNCiAgICAgfQ0KLQ0KKy8vTFlOUV9NT0RJRllfWlhXX0JVR18zODVfMjAyNDExMDVDNTVGMTY0MF9TVEFSVA0KKyAgICB6T3NzX0dldE11dGV4KHB0SW5zdGFuY2UtPnJ4TXV0ZXgsIFpPU1NfV0FJVF9GT1JFVkVSKTsNCisvL0xZTlFfTU9ESUZZX1pYV19CVUdfMzg1XzIwMjQxMTA1QzU1RjE2NDBfRU5EDQogCXRkbV9VcGRhdGVSeEJ1ZmZlclN0YXR1cygoVUlOVDE2ICopdGRtU3RyZWFtLT5yeEJ1ZmZlckFycmF5W3RkbVN0cmVhbS0+cnhSZElkeF0uYnVmLCBCVUZGRVJfTlVMTCk7DQogCXRkbVN0cmVhbS0+cnhSZElkeCA9ICh0ZG1TdHJlYW0tPnJ4UmRJZHggKzEpICUgVERNX09VVF9CVUZfTlVNIDsNCiANCkBAIC0zNjE3LDYgKzM2ODMsOSBAQAogICAgICAgICByZXR1cm4gRFJWX0VSUk9SOw0KICAgICB9DQogI2VuZGlmDQorLy9MWU5RX01PRElGWV9aWFdfQlVHXzM4NV8yMDI0MTEwNUM1NUYxNjQwX1NUQVJUDQorICAgIHpPc3NfUHV0TXV0ZXgocHRJbnN0YW5jZS0+cnhNdXRleCk7DQorLy9MWU5RX01PRElGWV9aWFdfQlVHXzM4NV8yMDI0MTEwNUM1NUYxNjQwX0VORA0KICAgICByZXR1cm4gRFJWX1NVQ0NFU1M7DQogfQ0KIA0KZGlmZiAtLWdpdCBhL2NwL3BzL2RyaXZlci9zcmMvY2hpcHNldHMvc3JjL2F1ZGlvX2Jhc2Uvdm9pY2Vwcm9jZXNzL2hhbF92b2ljZXByb2Nlc3MuYyBiL2NwL3BzL2RyaXZlci9zcmMvY2hpcHNldHMvc3JjL2F1ZGlvX2Jhc2Uvdm9pY2Vwcm9jZXNzL2hhbF92b2ljZXByb2Nlc3MuYwppbmRleCAzMjk2ZGFkLi40N2Y2OGY4IDEwMDc1NQotLS0gYS9jcC9wcy9kcml2ZXIvc3JjL2NoaXBzZXRzL3NyYy9hdWRpb19iYXNlL3ZvaWNlcHJvY2Vzcy9oYWxfdm9pY2Vwcm9jZXNzLmMKKysrIGIvY3AvcHMvZHJpdmVyL3NyYy9jaGlwc2V0cy9zcmMvYXVkaW9fYmFzZS92b2ljZXByb2Nlc3MvaGFsX3ZvaWNlcHJvY2Vzcy5jCkBAIC0xMTk1LDYgKzExOTUsMjYgQEAKIAlyZXR1cm4gcmV0Ow0KIH0NCiANCisvL0xZTlFfTU9ESUZZX1pYV19CVUdfMzg1XzIwMjQxMTA1QzU1RjE2NDBfU1RBUlQNCitWT0lEIHpEcnZFeHRBdWRpb19SZWdfUHJpbnRmKFZPSUQpDQorew0KKyAgICBpZiAoZ192b2ljZVZhci51c2VWb2ljZUJ1ZmZlciA9PSAxKXsgDQorCQlyZXR1cm47DQorCX0JDQorI2lmZGVmIENPTkZJR19WT0lDRV9CVUZGRVJfRFJWICANCisjZWxzZQkNCisJaWYgKGdfdm9pY2VWYXIuZ19pc1VzZVRkbSAhPSAxKQ0KKwl7DQorCQl6RHJ2STJTX1JlZ19QcmludGYoKTsNCisJfQ0KKwllbHNlIGlmIChnX3ZvaWNlVmFyLmdfaXNVc2VUZG0gPT0gMSkNCisJew0KKwkJekRydlRETV9SZWdfUHJpbnRmKCk7DQorCX0NCisjZW5kaWYJDQorfQ0KKy8vTFlOUV9NT0RJRllfWlhXX0JVR18zODVfMjAyNDExMDVDNTVGMTY0MF9FTkQNCisNCiBTSU5UMzIgekRydkV4dEF1ZGlvX1JlYWRfU3RhcnQoVF9aRHJ2STJzX1BhcmFtcyAqaTJzUGFyYW1zLCBUX1pEcnZJMlNfQ2ZnICppMnNDZmcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRfWkRydlRkbV9QYXJhbXMgKnRkbVBhcmFtcywgVF9aRHJ2VGRtX0NmZyAqdGRtQ2ZnKQ0KIHsNCkBAIC0zNTAyLDYgKzM1MjIsMTAgQEAKIAlTSU5UMzIgIHJldCA9IERSVl9TVUNDRVNTOw0KIAlVSU5UOCAqcmVhZF9idWYgPSBOVUxMOw0KIAlVSU5UMzIgcmVhZF9sZW4gPSAwOw0KKy8vTFlOUV9NT0RJRllfWlhXX0JVR18zODVfMjAyNDExMDVDNTVGMTY0MF9TVEFSVA0KKyAgICBVSU5UOCAqcmVhZF9idWZfdG1wID0gTlVMTDsNCisJVUlOVDMyIHJlYWRfbGVuX3RtcCA9IDA7DQorLy9MWU5RX01PRElGWV9aWFdfQlVHXzM4NV8yMDI0MTEwNUM1NUYxNjQwX0VORA0KIA0KIAlVSU5UMzIgaSA9IDAsIGogPSAwOw0KICNpZmRlZiBDT05GSUdfQVJDSF9aWDI5NzUyMFYzX0NQRV9TV0lUQ0gNCkBAIC0zNTg4LDcgKzM2MTIsOSBAQAogCQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgInZwIHZwX1JlYWREYXRhRnJvbUNvZGVjIGVjYWxsX0dldFJ4QnVmIGVyciByZXQ9JWRcbiIsIHJldCk7DQogCQkJcmV0dXJuIERSVl9FUlJPUjsNCiAJCX0NCi0JCQ0KKy8vTFlOUV9NT0RJRllfWlhXX0JVR18zODVfMjAyNDExMDVDNTVGMTY0MF9TVEFSVA0KKwkJcmV0ID0gekRydkV4dEF1ZGlvX1JlYWQoJnJlYWRfYnVmX3RtcCwgJnJlYWRfbGVuX3RtcCk7IA0KKy8vTFlOUV9NT0RJRllfWlhXX0JVR18zODVfMjAyNDExMDVDNTVGMTY0MF9FTkQJCQ0KIAkJcmV0ID0gZWNhbGxfUmVhZCgmcmVhZF9idWYsICZyZWFkX2xlbik7DQogCQkvL3JldCA9IHpEcnZFeHRBdWRpb19SZWFkKCZyZWFkX2J1ZiwgJnJlYWRfbGVuKTsNCiANCkBAIC0zNjY3LDggKzM2OTMsMTggQEAKIAkJCQlyZXR1cm4gRFJWX0VSUk9SOw0KIAkJCX0NCiAJCQlleHRfYVJkRkJ1ZkNvdW50ICsrOwkJCQkNCi0JCX0JCQ0KLSAgICAgIA0KKwkJfQkNCisvL0xZTlFfTU9ESUZZX1pYV19CVUdfMzg1XzIwMjQxMTA1QzU1RjE2NDBfU1RBUlQgICANCisgICAgCWlmICgoZV9yZWdfZmxhZyA9PSAxKSYmKGdfdm9pY2VWYXIuZWNhbGxEYXRhLmVjYWxsVHhTdGEgPT0gRUNBTExfU1RfVFhfSU5VU0UpKQkJDQorICAgIAl7ICANCisgICAgICAgICAgICByZXQgPSB6RHJ2RXh0QXVkaW9fRnJlZUJ1ZihyZWFkX2J1Zl90bXApOw0KKyAgICAJCWlmIChyZXQgICE9IERSVl9TVUNDRVNTKQ0KKyAgICAJCXsNCisgICAgCQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgInZwIHZwX1JlYWREYXRhRnJvbUNvZGVjIGVyciByZXQ9JWRcbiIsIHJldCk7DQorICAgIAkJCXJldHVybiBEUlZfRVJST1I7DQorICAgIAkJfQ0KKyAgICAJfQ0KKy8vTFlOUV9NT0RJRllfWlhXX0JVR18zODVfMjAyNDExMDVDNTVGMTY0MF9FTkQgICAgDQogCQkjZWxzZSAvL25vdCBFQ0FMTF9TVVBQT1JUDQogCQlyZXQgPSB6RHJ2RXh0QXVkaW9fRnJlZUJ1ZihyZWFkX2J1Zik7DQogCQlpZiAocmV0ICAhPSBEUlZfU1VDQ0VTUykNCg==