ZGlmZiAtLWdpdCBhL2F1dG8vY2MvaWNjIGIvYXV0by9jYy9pY2MKaW5kZXggMWM1OWM1NS4uYjgyYTE3ZCAxMDA2NDQKLS0tIGEvYXV0by9jYy9pY2MKKysrIGIvYXV0by9jYy9pY2MKQEAgLTk3LDcgKzk3LDcgQEAKICAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC13ZDE0NjkiCiAKICAgICAgICAgIyBTVFVCCi0gICAgICAgICMgbm9uLVBPRCBjbGFzcyB0eXBlIHBhc3NlZCB0aHJvdWdoIGVsbGlwc2lzCisgICAgICAgICMgbm9uLVBPRCBjbGFzcyB0eXBlIHBhc3NlZCB0aHJvdWdoIGVsbGlwc2lzLCBMaW51eCBvbmx5ID8KICAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC13ZDE1OTUiCiAgICAgOzsKIApkaWZmIC0tZ2l0IGEvYXV0by9saWIvcGNyZS9jb25mIGIvYXV0by9saWIvcGNyZS9jb25mCmluZGV4IDY1MTYzMjcuLjFiNzlmOTQgMTAwNjQ0Ci0tLSBhL2F1dG8vbGliL3BjcmUvY29uZgorKysgYi9hdXRvL2xpYi9wY3JlL2NvbmYKQEAgLTIzLDExICsyMywzMCBAQAogCiAgICAgICAgICAgICBMSU5LX0RFUFM9IiRMSU5LX0RFUFMgJFBDUkUvLmxpYnMvbGlicGNyZS5hIgogCisgICAgICAgICAgICBlY2hvICRuZ3hfbiAiY2hlY2tpbmcgZm9yIFBDUkUgbGlicmFyeSAuLi4kbmd4X2MiCisKKyAgICAgICAgICAgIG5neF9wY3JlX3Zlcj1gZ3JlcCBQQ1JFX01BSk9SPSAkUENSRS9jb25maWd1cmUuaW4gXAorICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNlZCAtZSAncy9eLio9XCguKlwpJC9cMS8nYAorCisgICAgICAgICAgICBlY2hvICIgJG5neF9wY3JlX3ZlciBtYWpvciB2ZXJzaW9uIGZvdW5kIgorCiAgICAgICAgICAgICAjIHRvIGFsbG93IC1pcG8gb3B0aW1pemF0aW9uIHdlIGxpbmsgd2l0aCB0aGUgKi5vIGJ1dCBub3QgbGlicmFyeQotICAgICAgICAgICAgQ09SRV9MSUJTPSIkQ09SRV9MSUJTICRQQ1JFL21ha2V0YWJsZXMubyIKLSAgICAgICAgICAgIENPUkVfTElCUz0iJENPUkVfTElCUyAkUENSRS9nZXQubyIKLSAgICAgICAgICAgIENPUkVfTElCUz0iJENPUkVfTElCUyAkUENSRS9zdHVkeS5vIgotICAgICAgICAgICAgQ09SRV9MSUJTPSIkQ09SRV9MSUJTICRQQ1JFL3BjcmUubyIKKworICAgICAgICAgICAgY2FzZSAiJG5neF9wY3JlX3ZlciIgaW4KKyAgICAgICAgICAgICAgICA2KQorICAgICAgICAgICAgICAgICAgICBDT1JFX0xJQlM9IiRDT1JFX0xJQlMgJFBDUkUvcGNyZV9jaGFydGFibGVzLm8iCisgICAgICAgICAgICAgICAgICAgIENPUkVfTElCUz0iJENPUkVfTElCUyAkUENSRS9wY3JlX2NvbXBpbGUubyIKKyAgICAgICAgICAgICAgICAgICAgQ09SRV9MSUJTPSIkQ09SRV9MSUJTICRQQ1JFL3BjcmVfZXhlYy5vIgorICAgICAgICAgICAgICAgICAgICBDT1JFX0xJQlM9IiRDT1JFX0xJQlMgJFBDUkUvcGNyZV9mdWxsaW5mby5vIgorICAgICAgICAgICAgICAgICAgICBDT1JFX0xJQlM9IiRDT1JFX0xJQlMgJFBDUkUvcGNyZV9nbG9iYWxzLm8iCisgICAgICAgICAgICAgICAgICAgIENPUkVfTElCUz0iJENPUkVfTElCUyAkUENSRS9wY3JlX3RhYmxlcy5vIgorICAgICAgICAgICAgICAgICAgICBDT1JFX0xJQlM9IiRDT1JFX0xJQlMgJFBDUkUvcGNyZV90cnlfZmxpcHBlZC5vIgorICAgICAgICAgICAgICAgIDs7CisKKyAgICAgICAgICAgICAgICAqKQorICAgICAgICAgICAgICAgICAgICBDT1JFX0xJQlM9IiRDT1JFX0xJQlMgJFBDUkUvcGNyZS5vIgorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBlc2FjCiAgICAgICAgIDs7CiAKICAgICAgICAgKikKZGlmZiAtLWdpdCBhL2F1dG8vbGliL3BjcmUvbWFrZSBiL2F1dG8vbGliL3BjcmUvbWFrZQppbmRleCBmNTdmN2Q5Li5mNTcyM2M4IDEwMDY0NAotLS0gYS9hdXRvL2xpYi9wY3JlL21ha2UKKysrIGIvYXV0by9saWIvcGNyZS9tYWtlCkBAIC01NSw5ICs1NSw3IEBACiAKICRQQ1JFL3BjcmUuaDoJJE5HWF9NQUtFRklMRQogCWNkICRQQ1JFIFxcCi0JJiYgaWYgWyAtZiBNYWtlZmlsZSBdOyB0aGVuIFwkKE1BS0UpIGRpc3RjbGVhbjsgZmkKLQotCWNkICRQQ1JFIFxcCisJJiYgaWYgWyAtZiBNYWtlZmlsZSBdOyB0aGVuIFwkKE1BS0UpIGRpc3RjbGVhbjsgZmkgXFwKIAkmJiBDQz0iXCQoQ0MpIiBDRkxBR1M9IiRQQ1JFX09QVCIgXFwKIAkuL2NvbmZpZ3VyZSAtLWRpc2FibGUtc2hhcmVkCiAKZGlmZiAtLWdpdCBhL2NvbmYvbmdpbnguY29uZiBiL2NvbmYvbmdpbnguY29uZgppbmRleCA0NDFmZDBjLi5mZmUxYmY2IDEwMDY0NAotLS0gYS9jb25mL25naW54LmNvbmYKKysrIGIvY29uZi9uZ2lueC5jb25mCkBAIC0xNiw5ICsxNiw5IEBACiAgICAgZGVmYXVsdF90eXBlICBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07CiAKICAgICBzZW5kZmlsZSAgICAgICAgb247Ci0gICAgIyB0Y3Bfbm9kZWxheSAgIG9uOworICAgICN0Y3Bfbm9kZWxheSAgICBvbjsKIAotICAgICMga2VlcGFsaXZlX3RpbWVvdXQgIDA7CisgICAgI2tlZXBhbGl2ZV90aW1lb3V0ICAwOwogCiAgICAgI2d6aXAgIG9uOwogCmRpZmYgLS1naXQgYS9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbCBiL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sCmluZGV4IDQwYzM4ZGMuLjE2Y2E2NGIgMTAwNjQ0Ci0tLSBhL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sCisrKyBiL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sCkBAIC05LDYgKzksNzkgQEAKIDx0aXRsZSBsYW5nPSJlbiI+bmdpbnggY2hhbmdlbG9nPC90aXRsZT4KIAogCis8Y2hhbmdlcyB2ZXI9IjAuMS4zNiIgZGF0ZT0iMTUuMDYuMjAwNSI+CisKKzxjaGFuZ2UgdHlwZT0iY2hhbmdlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK8XTzMkg1yDawcfPzM/Xy8Ug2sHQ0s/TxSDF09TYIMTVwszJ0tXA3cnF09Eg09TSz8vJICJIb3N0IiwgIkNvbm5lY3Rpb24iLAorIkNvbnRlbnQtTGVuZ3RoIiDJICJBdXRob3JpemF0aW9uIiwg1M8gbmdpbngg1MXQxdLYINfZxMGj1CDP28nCy9UgNDAwLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgoraWYgdGhlIHJlcXVlc3QgaGVhZGVyIGhhcyBkdXBsaWNhdGUgdGhlICJIb3N0IiwgIkNvbm5lY3Rpb24iLCAiQ29udGVudC1MZW5ndGgiLAorb3IgIkF1dGhvcml6YXRpb24iIGxpbmVzLCB0aGVuIG5naW54IG5vdyByZXR1cm5zIHRoZSA0MDAgZXJyb3IuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJjaGFuZ2UiPgorPHBhcmEgbGFuZz0icnUiPgorxMnSxcvUydfBIHBvc3RfYWNjZXB0X3RpbWVvdXQg1dDSwdrEzsXOwS4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK1RoZSAicG9zdF9hY2NlcHRfdGltZW91dCIgZGlyZWN0aXZlIHdhcyBjYW5jZWxlZC4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImZlYXR1cmUiPgorPHBhcmEgbGFuZz0icnUiPgor0MHSwc3F1NLZIGRlZmF1bHQsIGFmPSwgYmw9LCBkZWZlcnJlZCDJIGJpbmQg1yDEydLFy9TJ18UgbGlzdGVuLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlICJkZWZhdWx0IiwgImFmPSIsICJibD0iLCAiZGVmZXJyZWQiLCBhbmQgImJpbmQiIHBhcmFtZXRlcnMKK29mIHRoZSAibGlzdGVuIiBkaXJlY3RpdmUuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK9DPxMTF0tbLwSBhY2NlcHQgxsnM2NTSz9cg188gRnJlZUJTRC4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3RoZSBGcmVlQlNEIGFjY2VwdCBmaWx0ZXJzIHN1cHBvcnQuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK9DPxMTF0tbLwSBUQ1BfREVGRVJfQUNDRVBUINcgTGludXguCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgTGludXggVENQX0RFRkVSX0FDQ0VQVCBzdXBwb3J0LgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KKzxwYXJhIGxhbmc9InJ1Ij4KK83PxNXM2CBuZ3hfaHR0cF9hdXRvaW5kZXhfbW9kdWxlIM7FINDPxMTF0tbJ18HMIMnNxc7BIMbByszP1yDXIFVURi04LgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlIG5neF9odHRwX2F1dG9pbmRleF9tb2R1bGUgZGlkIG5vdCBzdXBwb3J0IHRoZSBmaWxlIG5hbWVzIGluIFVURi04LgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KKzxwYXJhIGxhbmc9InJ1Ij4KK9DP08zFIMTPwsHXzMXOydEgzs/X2cogzM/HLcbByswg0s/UwcPJ0SDc1M/HzyDMz8fBINDPINPJx87BzNUgLVVTUjEKK9fZ0M/MztHMwdPYLCDUz8zYy88gxdPMySDQxdLFy8/OxsnH1dLJ0s/XwdTYIG5naW54IMTXwSDSwdrBINDPINPJx87BzNUgLUhVUC4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3RoZSBuZXcgbG9nIGZpbGUgY2FuIGJlIHJvdGF0ZWQgYnkgdGhlIC1VU1IxIHNpZ25hbCBvbmx5IGlmCit0aGUgcmVjb25maWd1cmF0aW9uIGJ5IHRoZSAtSFVQIHNpZ25hbCB3YXMgbWFkZSB0d2ljZS4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8L2NoYW5nZXM+CisKKwogPGNoYW5nZXMgdmVyPSIwLjEuMzUiIGRhdGU9IjA3LjA2LjIwMDUiPgogCiA8Y2hhbmdlIHR5cGU9ImZlYXR1cmUiPgpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmdpbnguYyBiL3NyYy9jb3JlL25naW54LmMKaW5kZXggNGEwMWFjZC4uZDA0ZDk1NCAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmdpbnguYworKysgYi9zcmMvY29yZS9uZ2lueC5jCkBAIC0zMDEsNiArMzAxLDggQEAKICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBuZ3hfbWVtemVybyhscywgc2l6ZW9mKG5neF9saXN0ZW5pbmdfdCkpOworCiAgICAgICAgICAgICBscy0+ZmQgPSAobmd4X3NvY2tldF90KSBzOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmdpbnguaCBiL3NyYy9jb3JlL25naW54LmgKaW5kZXggOTRiNmRhMy4uNGU5ZmY3OSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmdpbnguaAorKysgYi9zcmMvY29yZS9uZ2lueC5oCkBAIC04LDcgKzgsNyBAQAogI2RlZmluZSBfTkdJTlhfSF9JTkNMVURFRF8KIAogCi0jZGVmaW5lIE5HSU5YX1ZFUiAgICAgICAgICAibmdpbngvMC4xLjM1IgorI2RlZmluZSBOR0lOWF9WRVIgICAgICAgICAgIm5naW54LzAuMS4zNiIKIAogI2RlZmluZSBOR0lOWF9WQVIgICAgICAgICAgIk5HSU5YIgogI2RlZmluZSBOR1hfTkVXUElEX0VYVCAgICAgIi5uZXdiaW4iCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfY29ubmVjdGlvbi5jIGIvc3JjL2NvcmUvbmd4X2Nvbm5lY3Rpb24uYwppbmRleCBmZjljMTY0Li5iODczZGIyIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfY29ubmVjdGlvbi5jCisrKyBiL3NyYy9jb3JlL25neF9jb25uZWN0aW9uLmMKQEAgLTYyLDEwICs2MiwxOCBAQAogbmd4X2ludF90CiBuZ3hfc2V0X2luaGVyaXRlZF9zb2NrZXRzKG5neF9jeWNsZV90ICpjeWNsZSkKIHsKLSAgICBzaXplX3QgICAgICAgICAgICAgICBsZW47Ci0gICAgbmd4X3VpbnRfdCAgICAgICAgICAgaTsKLSAgICBuZ3hfbGlzdGVuaW5nX3QgICAgICpsczsKLSAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gICpzaW47CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgbGVuOworICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgIGk7CisgICAgbmd4X2xpc3RlbmluZ190ICAgICAgICAgICAqbHM7CisgICAgc3RydWN0IHNvY2thZGRyX2luICAgICAgICAqc2luOworI2lmIChOR1hfSEFWRV9ERUZFUlJFRF9BQ0NFUFQgJiYgZGVmaW5lZCBTT19BQ0NFUFRGSUxURVIpCisgICAgc29ja2xlbl90ICAgICAgICAgICAgICAgICAgYWZsZW47CisgICAgc3RydWN0IGFjY2VwdF9maWx0ZXJfYXJnICAgYWY7CisjZW5kaWYKKyNpZiAoTkdYX0hBVkVfREVGRVJSRURfQUNDRVBUICYmIGRlZmluZWQgVENQX0RFRkVSX0FDQ0VQVCkKKyAgICBzb2NrbGVuX3QgICAgICAgICAgICAgICAgICB0bGVuOworICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ7CisjZW5kaWYKIAogICAgIGxzID0gY3ljbGUtPmxpc3RlbmluZy5lbHRzOwogICAgIGZvciAoaSA9IDA7IGkgPCBjeWNsZS0+bGlzdGVuaW5nLm5lbHRzOyBpKyspIHsKQEAgLTk4LDcgKzEwNiw2IEBACiAKICAgICAgICAgbHNbaV0uYWRkcl90ZXh0X21heF9sZW4gPSBJTkVUX0FERFJTVFJMRU47CiAKLQogICAgICAgICBsc1tpXS5hZGRyX3RleHQuZGF0YSA9IG5neF9wYWxsb2MoY3ljbGUtPnBvb2wsIElORVRfQUREUlNUUkxFTiAtIDEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHNpemVvZigiOjY1NTM1IikgLSAxKTsKICAgICAgICAgaWYgKGxzW2ldLmFkZHJfdGV4dC5kYXRhID09IE5VTEwpIHsKQEAgLTExNSw2ICsxMjIsNTQgQEAKICAgICAgICAgbHNbaV0uYWRkcl90ZXh0LmxlbiA9IG5neF9zcHJpbnRmKGxzW2ldLmFkZHJfdGV4dC5kYXRhICsgbGVuLCAiOiVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG50b2hzKHNpbi0+c2luX3BvcnQpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBsc1tpXS5hZGRyX3RleHQuZGF0YTsKKworI2lmIChOR1hfSEFWRV9ERUZFUlJFRF9BQ0NFUFQgJiYgZGVmaW5lZCBTT19BQ0NFUFRGSUxURVIpCisKKyAgICAgICAgbmd4X21lbXplcm8oJmFmLCBzaXplb2Yoc3RydWN0IGFjY2VwdF9maWx0ZXJfYXJnKSk7CisgICAgICAgIGFmbGVuID0gc2l6ZW9mKHN0cnVjdCBhY2NlcHRfZmlsdGVyX2FyZyk7CisKKyAgICAgICAgaWYgKGdldHNvY2tvcHQobHNbaV0uZmQsIFNPTF9TT0NLRVQsIFNPX0FDQ0VQVEZJTFRFUiwgJmFmLCAmYWZsZW4pCisgICAgICAgICAgICA9PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX05PVElDRSwgY3ljbGUtPmxvZywgbmd4X2Vycm5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiZ2V0c29ja29wdChTT19BQ0NFUFRGSUxURVIpIGZvciAlViBmYWlsZWQsIGlnbm9yZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmbHNbaV0uYWRkcl90ZXh0KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFmbGVuIDwgc2l6ZW9mKHN0cnVjdCBhY2NlcHRfZmlsdGVyX2FyZykgfHwgYWYuYWZfbmFtZVswXSA9PSAnXDAnKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGxzW2ldLmFjY2VwdF9maWx0ZXIgPSBuZ3hfcGFsbG9jKGN5Y2xlLT5wb29sLCAxNik7CisgICAgICAgIGlmIChsc1tpXS5hY2NlcHRfZmlsdGVyID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgICAgIH0KKworICAgICAgICAodm9pZCkgbmd4X2NweXN0cm4oKHVfY2hhciAqKSBsc1tpXS5hY2NlcHRfZmlsdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSBhZi5hZl9uYW1lLCAxNik7CisjZW5kaWYKKworI2lmIChOR1hfSEFWRV9ERUZFUlJFRF9BQ0NFUFQgJiYgZGVmaW5lZCBUQ1BfREVGRVJfQUNDRVBUKQorCisgICAgICAgIHRpbWVvdXQgPSAwOworICAgICAgICB0bGVuID0gc2l6ZW9mKGludCk7CisKKyAgICAgICAgaWYgKGdldHNvY2tvcHQobHNbaV0uZmQsIElQUFJPVE9fVENQLCBUQ1BfREVGRVJfQUNDRVBULCAmdGltZW91dCwgJnRsZW4pCisgICAgICAgICAgICA9PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX05PVElDRSwgY3ljbGUtPmxvZywgbmd4X2Vycm5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiZ2V0c29ja29wdChUQ1BfREVGRVJfQUNDRVBUKSBmb3IgJVYgZmFpbGVkLCBpZ25vcmVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmxzW2ldLmFkZHJfdGV4dCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0bGVuIDwgc2l6ZW9mKGludCkgfHwgdGltZW91dCA9PSAwKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGxzW2ldLmRlZmVycmVkX2FjY2VwdCA9IDE7CisjZW5kaWYKICAgICB9CiAKICAgICByZXR1cm4gTkdYX09LOwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2Nvbm5lY3Rpb24uaCBiL3NyYy9jb3JlL25neF9jb25uZWN0aW9uLmgKaW5kZXggOGZiNjcwNS4uMDIyNGQ5OCAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2Nvbm5lY3Rpb24uaAorKysgYi9zcmMvY29yZS9uZ3hfY29ubmVjdGlvbi5oCkBAIC00NywxMSArNDcsMTcgQEAKICAgICB1bnNpZ25lZCAgICAgICAgICBub25ibG9ja2luZ19hY2NlcHQ6MTsKICAgICB1bnNpZ25lZCAgICAgICAgICBub25ibG9ja2luZzoxOwogICAgIHVuc2lnbmVkICAgICAgICAgIHNoYXJlZDoxOyAgICAvKiBzaGFyZWQgYmV0d2VlbiB0aHJlYWRzIG9yIHByb2Nlc3NlcyAqLworICAgIHVuc2lnbmVkICAgICAgICAgIGFkZHJfbnRvcDoxOworCiAjaWYgKE5HWF9IQVZFX0RFRkVSUkVEX0FDQ0VQVCkKICAgICB1bnNpZ25lZCAgICAgICAgICBkZWZlcnJlZF9hY2NlcHQ6MTsKKyAgICB1bnNpZ25lZCAgICAgICAgICBkZWxldGVfZGVmZXJyZWQ6MTsKKyAgICB1bnNpZ25lZCAgICAgICAgICBhZGRfZGVmZXJyZWQ6MTsKKyNpZmRlZiBTT19BQ0NFUFRGSUxURVIKKyAgICBjaGFyICAgICAgICAgICAgICphY2NlcHRfZmlsdGVyOworI2VuZGlmCiAjZW5kaWYKIAotICAgIHVuc2lnbmVkICAgICAgICAgIGFkZHJfbnRvcDoxOwogfSBuZ3hfbGlzdGVuaW5nX3Q7CiAKIApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2N5Y2xlLmMgYi9zcmMvY29yZS9uZ3hfY3ljbGUuYwppbmRleCAzYTFjMDBlLi41NzgwNjQzIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfY3ljbGUuYworKysgYi9zcmMvY29yZS9uZ3hfY3ljbGUuYwpAQCAtMzksMTggKzM5LDI0IEBACiAKIG5neF9jeWNsZV90ICpuZ3hfaW5pdF9jeWNsZShuZ3hfY3ljbGVfdCAqb2xkX2N5Y2xlKQogewotICAgIHZvaWQgICAgICAgICAgICAgICAqcnY7Ci0gICAgbmd4X3VpbnRfdCAgICAgICAgICBpLCBuLCBmYWlsZWQ7Ci0gICAgbmd4X2xvZ190ICAgICAgICAgICpsb2c7Ci0gICAgbmd4X2NvbmZfdCAgICAgICAgICBjb25mOwotICAgIG5neF9wb29sX3QgICAgICAgICAqcG9vbDsKLSAgICBuZ3hfY3ljbGVfdCAgICAgICAgKmN5Y2xlLCAqKm9sZDsKLSAgICBuZ3hfc29ja2V0X3QgICAgICAgIGZkOwotICAgIG5neF9saXN0X3BhcnRfdCAgICAqcGFydDsKLSAgICBuZ3hfb3Blbl9maWxlX3QgICAgKmZpbGU7Ci0gICAgbmd4X2xpc3RlbmluZ190ICAgICpscywgKm5sczsKLSAgICBuZ3hfY29yZV9jb25mX3QgICAgKmNjZjsKLSAgICBuZ3hfY29yZV9tb2R1bGVfdCAgKm1vZHVsZTsKKyAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICpydjsKKyAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICBpLCBuLCBmYWlsZWQ7CisgICAgbmd4X2xvZ190ICAgICAgICAgICAgICAgICAqbG9nOworICAgIG5neF9jb25mX3QgICAgICAgICAgICAgICAgIGNvbmY7CisgICAgbmd4X3Bvb2xfdCAgICAgICAgICAgICAgICAqcG9vbDsKKyAgICBuZ3hfY3ljbGVfdCAgICAgICAgICAgICAgICpjeWNsZSwgKipvbGQ7CisgICAgbmd4X3NvY2tldF90ICAgICAgICAgICAgICAgZmQ7CisgICAgbmd4X2xpc3RfcGFydF90ICAgICAgICAgICAqcGFydDsKKyAgICBuZ3hfb3Blbl9maWxlX3QgICAgICAgICAgICpmaWxlOworICAgIG5neF9saXN0ZW5pbmdfdCAgICAgICAgICAgKmxzLCAqbmxzOworICAgIG5neF9jb3JlX2NvbmZfdCAgICAgICAgICAgKmNjZjsKKyAgICBuZ3hfY29yZV9tb2R1bGVfdCAgICAgICAgICptb2R1bGU7CisjaWYgKE5HWF9IQVZFX0RFRkVSUkVEX0FDQ0VQVCAmJiBkZWZpbmVkIFNPX0FDQ0VQVEZJTFRFUikKKyAgICBzdHJ1Y3QgYWNjZXB0X2ZpbHRlcl9hcmcgICBhZjsKKyNlbmRpZgorI2lmIChOR1hfSEFWRV9ERUZFUlJFRF9BQ0NFUFQgJiYgZGVmaW5lZCBUQ1BfREVGRVJfQUNDRVBUKQorICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ7CisjZW5kaWYKIAogICAgIGxvZyA9IG9sZF9jeWNsZS0+bG9nOwogCkBAIC0zMDcsNyArMzEzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgIGlmIChuZ3hfY21wX3NvY2thZGRyKG5sc1tuXS5zb2NrYWRkciwgbHNbaV0uc29ja2FkZHIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSBOR1hfT0spCisgICAgICAgICAgICAgICAgICAgICAgICA9PSBOR1hfT0spCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGZkID0gbHNbaV0uZmQ7CiAjaWYgKE5HWF9XSU4zMikKQEAgLTMzMCw4ICszMzYsNDQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAgICAgbmxzW25dLmZkID0gbHNbaV0uZmQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBubHNbaV0ucmVtYWluID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5sc1tuXS5yZW1haW4gPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgbHNbaV0ucmVtYWluID0gMTsKKworI2lmIChOR1hfSEFWRV9ERUZFUlJFRF9BQ0NFUFQgJiYgZGVmaW5lZCBTT19BQ0NFUFRGSUxURVIpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICAgICAgKiBGcmVlQlNELCBleGNlcHQgdGhlIG1vc3QgcmVjZW50IHZlcnNpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICogY2FuIG5vdCByZW1vdmUgYWNjZXB0IGZpbHRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICBubHNbbl0uZGVmZXJyZWRfYWNjZXB0ID0gbHNbaV0uZGVmZXJyZWRfYWNjZXB0OworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobHNbaV0uYWNjZXB0X2ZpbHRlciAmJiBubHNbbl0uYWNjZXB0X2ZpbHRlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZ3hfc3RyY21wKGxzW2ldLmFjY2VwdF9maWx0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmxzW25dLmFjY2VwdF9maWx0ZXIpICE9IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBubHNbbl0uZGVsZXRlX2RlZmVycmVkID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmxzW25dLmFkZF9kZWZlcnJlZCA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxzW2ldLmFjY2VwdF9maWx0ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBubHNbbl0uZGVsZXRlX2RlZmVycmVkID0gMTsKKworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChubHNbbl0uYWNjZXB0X2ZpbHRlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5sc1tuXS5hZGRfZGVmZXJyZWQgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgfQorI2VuZGlmCisKKyNpZiAoTkdYX0hBVkVfREVGRVJSRURfQUNDRVBUICYmIGRlZmluZWQgVENQX0RFRkVSX0FDQ0VQVCkKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxzW25dLmRlZmVycmVkX2FjY2VwdCAmJiAhbmxzW25dLmRlZmVycmVkX2FjY2VwdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5sc1tuXS5kZWxldGVfZGVmZXJyZWQgPSAxOworCisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxzW2ldLmRlZmVycmVkX2FjY2VwdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhPSBubHNbbl0uZGVmZXJyZWRfYWNjZXB0KQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5sc1tuXS5hZGRfZGVmZXJyZWQgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgfQorI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTM0NSw2ICszODcsMTYgQEAKICAgICAgICAgICAgIGxzID0gY3ljbGUtPmxpc3RlbmluZy5lbHRzOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGN5Y2xlLT5saXN0ZW5pbmcubmVsdHM7IGkrKykgewogICAgICAgICAgICAgICAgIGxzW2ldLm9wZW4gPSAxOworI2lmIChOR1hfSEFWRV9ERUZFUlJFRF9BQ0NFUFQgJiYgZGVmaW5lZCBTT19BQ0NFUFRGSUxURVIpCisgICAgICAgICAgICAgICAgaWYgKGxzW2ldLmFjY2VwdF9maWx0ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgbHNbaV0uYWRkX2RlZmVycmVkID0gMTsKKyAgICAgICAgICAgICAgICB9CisjZW5kaWYKKyNpZiAoTkdYX0hBVkVfREVGRVJSRURfQUNDRVBUICYmIGRlZmluZWQgVENQX0RFRkVSX0FDQ0VQVCkKKyAgICAgICAgICAgICAgICBpZiAobHNbaV0uZGVmZXJyZWRfYWNjZXB0KSB7CisgICAgICAgICAgICAgICAgICAgIGxzW2ldLmFkZF9kZWZlcnJlZCA9IDE7CisgICAgICAgICAgICAgICAgfQorI2VuZGlmCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtMzUyLDYgKzQwNCw4MSBAQAogICAgICAgICAgICAgaWYgKG5neF9vcGVuX2xpc3RlbmluZ19zb2NrZXRzKGN5Y2xlKSA9PSBOR1hfRVJST1IpIHsKICAgICAgICAgICAgICAgICBmYWlsZWQgPSAxOwogICAgICAgICAgICAgfQorCisjaWYgKE5HWF9IQVZFX0RFRkVSUkVEX0FDQ0VQVCkKKworICAgICAgICAgICAgaWYgKCFmYWlsZWQpIHsKKyAgICAgICAgICAgICAgICBscyA9IGN5Y2xlLT5saXN0ZW5pbmcuZWx0czsKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY3ljbGUtPmxpc3RlbmluZy5uZWx0czsgaSsrKSB7CisKKyNpZmRlZiBTT19BQ0NFUFRGSUxURVIKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxzW2ldLmRlbGV0ZV9kZWZlcnJlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNldHNvY2tvcHQobHNbaV0uZmQsIFNPTF9TT0NLRVQsIFNPX0FDQ0VQVEZJTFRFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDApID09IC0xKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgbG9nLCBuZ3hfZXJybm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNldHNvY2tvcHQoU09fQUNDRVBURklMVEVSLCBOVUxMKSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvciAlViBmYWlsZWQsIGlnbm9yZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsc1tpXS5hZGRyX3RleHQpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxzW2ldLmFjY2VwdF9maWx0ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBsb2csIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBjaGFuZ2UgdGhlIGFjY2VwdCBmaWx0ZXIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0byBcIiVzXCIgZm9yICVWLCBpZ25vcmVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsc1tpXS5hY2NlcHRfZmlsdGVyLCAmbHNbaV0uYWRkcl90ZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgbHNbaV0uZGVmZXJyZWRfYWNjZXB0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmIChsc1tpXS5hZGRfZGVmZXJyZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5neF9tZW16ZXJvKCZhZiwgc2l6ZW9mKHN0cnVjdCBhY2NlcHRfZmlsdGVyX2FyZykpOworICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpIG5neF9jcHlzdHJuKCh1X2NoYXIgKikgYWYuYWZfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopIGxzW2ldLmFjY2VwdF9maWx0ZXIsIDE2KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNldHNvY2tvcHQobHNbaV0uZmQsIFNPTF9TT0NLRVQsIFNPX0FDQ0VQVEZJTFRFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhZiwgc2l6ZW9mKHN0cnVjdCBhY2NlcHRfZmlsdGVyX2FyZykpID09IC0xKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgbG9nLCBuZ3hfZXJybm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNldHNvY2tvcHQoU09fQUNDRVBURklMVEVSLCBcIiVzXCIpICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9yICVWIGZhaWxlZCwgaWdub3JlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHNbaV0uYWNjZXB0X2ZpbHRlciwgJmxzW2ldLmFkZHJfdGV4dCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGxzW2ldLmRlZmVycmVkX2FjY2VwdCA9IDE7CisgICAgICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorCisjaWZkZWYgVENQX0RFRkVSX0FDQ0VQVAorICAgICAgICAgICAgICAgICAgICBpZiAobHNbaV0uYWRkX2RlZmVycmVkIHx8IGxzW2ldLmRlbGV0ZV9kZWZlcnJlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCA9IDA7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsc1tpXS5hZGRfZGVmZXJyZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0ID0gKGludCkgKGxzW2ldLnBvc3RfYWNjZXB0X3RpbWVvdXQgLyAxMDAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNldHNvY2tvcHQobHNbaV0uZmQsIElQUFJPVE9fVENQLCBUQ1BfREVGRVJfQUNDRVBULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRpbWVvdXQsIHNpemVvZihpbnQpKSA9PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGxvZywgbmd4X2Vycm5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXRzb2Nrb3B0KFRDUF9ERUZFUl9BQ0NFUFQsICVkKSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvciAlViBmYWlsZWQsIGlnbm9yZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQsICZsc1tpXS5hZGRyX3RleHQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxzW2ldLmFkZF9kZWZlcnJlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbHNbaV0uZGVmZXJyZWRfYWNjZXB0ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorI2VuZGlmCiAgICAgICAgIH0KICAgICB9CiAKQEAgLTY4Miw2ICs4MDksNyBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcGFydCA9IHBhcnQtPm5leHQ7CisgICAgICAgICAgICBmaWxlID0gcGFydC0+ZWx0czsKICAgICAgICAgICAgIGkgPSAwOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9zdHJpbmcuYyBiL3NyYy9jb3JlL25neF9zdHJpbmcuYwppbmRleCBhY2M0YmQzLi45Y2JmM2M5IDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfc3RyaW5nLmMKKysrIGIvc3JjL2NvcmUvbmd4X3N0cmluZy5jCkBAIC03MjgsNiArNzI4LDM1IEBACiB9CiAKIAorc2l6ZV90CituZ3hfdXRmX2xlbmd0aChuZ3hfc3RyX3QgKnV0ZikKK3sKKyAgICB1X2NoYXIgICAgICBjOworICAgIHNpemVfdCAgICAgIGxlbjsKKyAgICBuZ3hfdWludF90ICBpOworCisgICAgZm9yIChsZW4gPSAwLCBpID0gMDsgaSA8IHV0Zi0+bGVuOyBsZW4rKywgaSsrKSB7CisKKyAgICAgICAgYyA9IHV0Zi0+ZGF0YVtpXTsKKworICAgICAgICBpZiAoYyA8IDB4ODApIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGMgPCAweEMwKSB7CisgICAgICAgICAgICAvKiBpbnZhbGlkIHV0ZiAqLworICAgICAgICAgICAgcmV0dXJuIHV0Zi0+bGVuOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChjIDw8PSAxOyBjICYgMHg4MDsgYyA8PD0gMSkgeworICAgICAgICAgICAgaSsrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGxlbjsKK30KKworCiB1aW50cHRyX3QKIG5neF9lc2NhcGVfdXJpKHVfY2hhciAqZHN0LCB1X2NoYXIgKnNyYywgc2l6ZV90IHNpemUsIG5neF91aW50X3QgdHlwZSkKIHsKQEAgLTc5MiwzMCArODIxLDggQEAKICAgICAgICAgICAweGZmZmZmZmZmLCAvKiAxMTExIDExMTEgMTExMSAxMTExICAxMTExIDExMTEgMTExMSAxMTExICovCiAgICAgICAgICAgMHhmZmZmZmZmZiAgLyogMTExMSAxMTExIDExMTEgMTExMSAgMTExMSAxMTExIDExMTEgMTExMSAqLyB9OwogCi0gICAgICAgICAgICAgICAgICAgICAgLyogIiAiLCAiIiIsICIlIiwgIiciLCAlMDAtJTFGLCAlN0YtJUZGICovCi0KLSAgICBzdGF0aWMgdWludDMyX3QgICB1dGZbXSA9Ci0gICAgICAgIHsgMHhmZmZmZmZmZiwgLyogMTExMSAxMTExIDExMTEgMTExMSAgMTExMSAxMTExIDExMTEgMTExMSAqLwotCi0gICAgICAgICAgICAgICAgICAgICAgLyogPz49PCA7Ojk4IDc2NTQgMzIxMCAgLy4tLCArKikoICcmJSQgIyIhICAqLwotICAgICAgICAgIDB4ODAwMDAwYWQsIC8qIDAwMDAgMDAwMCAwMDAwIDAwMDAgIDAwMDAgMDAwMCAxMDEwIDExMDEgKi8KLQotICAgICAgICAgICAgICAgICAgICAgIC8qIF9eXVwgW1pZWCBXVlVUIFNSUVAgIE9OTUwgS0pJSCBHRkVEIENCQUAgKi8KLSAgICAgICAgICAweDAwMDAwMDAwLCAvKiAwMDAwIDAwMDAgMDAwMCAwMDAwICAwMDAwIDAwMDAgMDAwMCAwMDAwICovCi0KLSAgICAgICAgICAgICAgICAgICAgICAvKiAgfn18IHt6eXggd3Z1dCBzcnFwICBvbm1sIGtqaWggZ2ZlZCBjYmFgICovCi0gICAgICAgICAgMHg4MDAwMDAwMCwgLyogMTAwMCAwMDAwIDAwMDAgMDAwMCAgMDAwMCAwMDAwIDAwMDAgMDAwMCAqLwotCi0gICAgICAgICAgMHgwMDAwMDAwMCwgLyogMDAwMCAwMDAwIDAwMDAgMDAwMCAgMDAwMCAwMDAwIDAwMDAgMDAwMCAqLwotICAgICAgICAgIDB4MDAwMDAwMDAsIC8qIDAwMDAgMDAwMCAwMDAwIDAwMDAgIDAwMDAgMDAwMCAwMDAwIDAwMDAgKi8KLSAgICAgICAgICAweDAwMDAwMDAwLCAvKiAwMDAwIDAwMDAgMDAwMCAwMDAwICAwMDAwIDAwMDAgMDAwMCAwMDAwICovCi0gICAgICAgICAgMHgwMDAwMDAwMCAgLyogMDAwMCAwMDAwIDAwMDAgMDAwMCAgMDAwMCAwMDAwIDAwMDAgMDAwMCAqLyB9OwotCiAKICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIE5HWF9FU0NBUEVfVVRGOgotICAgICAgICBlc2NhcGUgPSB1dGY7Ci0gICAgICAgIGJyZWFrOwogICAgIGNhc2UgTkdYX0VTQ0FQRV9IVE1MOgogICAgICAgICBlc2NhcGUgPSBodG1sOwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9zdHJpbmcuaCBiL3NyYy9jb3JlL25neF9zdHJpbmcuaAppbmRleCBlMmUyMGUxLi5mZjIxNjE5IDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfc3RyaW5nLmgKKysrIGIvc3JjL2NvcmUvbmd4X3N0cmluZy5oCkBAIC05NiwxMSArOTYsMTEgQEAKIHZvaWQgbmd4X2VuY29kZV9iYXNlNjQobmd4X3N0cl90ICpkc3QsIG5neF9zdHJfdCAqc3JjKTsKIG5neF9pbnRfdCBuZ3hfZGVjb2RlX2Jhc2U2NChuZ3hfc3RyX3QgKmRzdCwgbmd4X3N0cl90ICpzcmMpOwogCitzaXplX3Qgbmd4X3V0Zl9sZW5ndGgobmd4X3N0cl90ICp1dGYpOwogCiAjZGVmaW5lIE5HWF9FU0NBUEVfVVJJICAgMAogI2RlZmluZSBOR1hfRVNDQVBFX0FSR1MgIDEKICNkZWZpbmUgTkdYX0VTQ0FQRV9IVE1MICAyCi0jZGVmaW5lIE5HWF9FU0NBUEVfVVRGICAgMwogCiB1aW50cHRyX3Qgbmd4X2VzY2FwZV91cmkodV9jaGFyICpkc3QsIHVfY2hhciAqc3JjLCBzaXplX3Qgc2l6ZSwKICAgICBuZ3hfdWludF90IHR5cGUpOwpkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L25neF9ldmVudF9hY2NlcHQuYyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfYWNjZXB0LmMKaW5kZXggZTMxMjUzMy4uMGMyMWU3MiAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L25neF9ldmVudF9hY2NlcHQuYworKysgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X2FjY2VwdC5jCkBAIC0yNDcsNiArMjQ3LDkgQEAKIAogICAgICAgICBpZiAoZXYtPmRlZmVycmVkX2FjY2VwdCkgewogICAgICAgICAgICAgcmV2LT5yZWFkeSA9IDE7CisjaWYgKE5HWF9IQVZFX0tRVUVVRSkKKyAgICAgICAgICAgIHJldi0+YXZhaWxhYmxlID0gMTsKKyNlbmRpZgogICAgICAgICB9CiAKICAgICAgICAgYy0+Y3R4ID0gbHMtPmN0eDsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfYXV0b2luZGV4X21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9hdXRvaW5kZXhfbW9kdWxlLmMKaW5kZXggOTZhYjgxZS4uYWI0NDE4ZiAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9hdXRvaW5kZXhfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9hdXRvaW5kZXhfbW9kdWxlLmMKQEAgLTIxNyw2ICsyMTcsMTYgQEAKICAgICAgICAgcmV0dXJuIG5neF9odHRwX2F1dG9pbmRleF9lcnJvcihyLCAmZGlyLCBkbmFtZS5kYXRhKTsKICAgICB9CiAKKyAgICByLT5oZWFkZXJzX291dC5zdGF0dXMgPSBOR1hfSFRUUF9PSzsKKyAgICByLT5oZWFkZXJzX291dC5jb250ZW50X3R5cGUubGVuID0gc2l6ZW9mKCJ0ZXh0L2h0bWwiKSAtIDE7CisgICAgci0+aGVhZGVyc19vdXQuY29udGVudF90eXBlLmRhdGEgPSAodV9jaGFyICopICJ0ZXh0L2h0bWwiOworCisgICAgcmMgPSBuZ3hfaHR0cF9zZW5kX2hlYWRlcihyKTsKKworICAgIGlmIChyYyA9PSBOR1hfRVJST1IgfHwgcmMgPiBOR1hfT0sgfHwgci0+aGVhZGVyX29ubHkpIHsKKyAgICAgICAgcmV0dXJuIHJjOworICAgIH0KKwogICAgIGZuYW1lLmxlbiA9IDA7CiAjaWYgKE5HWF9TVVBQUkVTU19XQVJOKQogICAgIGZuYW1lLmRhdGEgPSBOVUxMOwpAQCAtMzM0LDYgKzM0NCwxMCBAQAogICAgICAgICAgICAgICAgKyBzaXplb2YoIiAyOC1TZXAtMTk3MCAxMjowMCAiKSAtIDEKICAgICAgICAgICAgICAgICsgMTkKICAgICAgICAgICAgICAgICsgMjsKKworICAgICAgICBpZiAoci0+dXRmOCkgeworICAgICAgICAgICAgbGVuICs9IGVudHJ5W2ldLm5hbWUubGVuIC0gbmd4X3V0Zl9sZW5ndGgoJmVudHJ5W2ldLm5hbWUpOworICAgICAgICB9CiAgICAgfQogCiAgICAgYiA9IG5neF9jcmVhdGVfdGVtcF9idWYoci0+cG9vbCwgbGVuKTsKQEAgLTM4MCw3ICszOTQsMTEgQEAKICAgICAgICAgYi0+bGFzdCA9IG5neF9jcHlzdHJuKGItPmxhc3QsIGVudHJ5W2ldLm5hbWUuZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HWF9IVFRQX0FVVE9JTkRFWF9OQU1FX0xFTiArIDEpOwogCi0gICAgICAgIGxlbiA9IGVudHJ5W2ldLm5hbWUubGVuOworICAgICAgICBpZiAoci0+dXRmOCkgeworICAgICAgICAgICAgbGVuID0gbmd4X3V0Zl9sZW5ndGgoJmVudHJ5W2ldLm5hbWUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbGVuID0gZW50cnlbaV0ubmFtZS5sZW47CisgICAgICAgIH0KIAogICAgICAgICBpZiAobGVuID4gTkdYX0hUVFBfQVVUT0lOREVYX05BTUVfTEVOKSB7CiAgICAgICAgICAgICBiLT5sYXN0ID0gbmd4X2NweW1lbShiLT5sYXN0IC0gMywgIi4uJmd0OzwvYT4iLApAQCAtNDI2LDE3ICs0NDQsNiBAQAogCiAgICAgYi0+bGFzdCA9IG5neF9jcHltZW0oYi0+bGFzdCwgdGFpbCwgc2l6ZW9mKHRhaWwpIC0gMSk7CiAKLSAgICByLT5oZWFkZXJzX291dC5zdGF0dXMgPSBOR1hfSFRUUF9PSzsKLSAgICByLT5oZWFkZXJzX291dC5jb250ZW50X2xlbmd0aF9uID0gYi0+bGFzdCAtIGItPnBvczsKLSAgICByLT5oZWFkZXJzX291dC5jb250ZW50X3R5cGUubGVuID0gc2l6ZW9mKCJ0ZXh0L2h0bWwiKSAtIDE7Ci0gICAgci0+aGVhZGVyc19vdXQuY29udGVudF90eXBlLmRhdGEgPSAodV9jaGFyICopICJ0ZXh0L2h0bWwiOwotCi0gICAgcmMgPSBuZ3hfaHR0cF9zZW5kX2hlYWRlcihyKTsKLQotICAgIGlmIChyYyA9PSBOR1hfRVJST1IgfHwgcmMgPiBOR1hfT0sgfHwgci0+aGVhZGVyX29ubHkpIHsKLSAgICAgICAgcmV0dXJuIHJjOwotICAgIH0KLQogICAgIGlmIChyLT5tYWluID09IE5VTEwpIHsKICAgICAgICAgYi0+bGFzdF9idWYgPSAxOwogICAgIH0KZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfY2hhcnNldF9maWx0ZXJfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2NoYXJzZXRfZmlsdGVyX21vZHVsZS5jCmluZGV4IDBjNzZhNWYuLjExNzI4MWMgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfY2hhcnNldF9maWx0ZXJfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9jaGFyc2V0X2ZpbHRlcl9tb2R1bGUuYwpAQCAtMTIsMTUgKzEyLDE3IEBACiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgY2hhciAgICAgICAqKnRhYmxlczsKICAgICBuZ3hfc3RyX3QgICAgbmFtZTsKLSAgICBuZ3hfdWludF90ICAgc2VydmVyOyAgLyogdW5zaWduZWQgICAgIHNlcnZlcjoxOyAqLworCisgICAgdW5zaWduZWQgICAgIHNlcnZlcjoxOworICAgIHVuc2lnbmVkICAgICB1dGY4OjE7CiB9IG5neF9odHRwX2NoYXJzZXRfdDsKIAogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgbmd4X2ludF90ICAgc3JjOwotICAgIG5neF9pbnRfdCAgIGRzdDsKLSAgICBjaGFyICAgICAgICpzcmMyZHN0OwotICAgIGNoYXIgICAgICAgKmRzdDJzcmM7CisgICAgbmd4X2ludF90ICAgIHNyYzsKKyAgICBuZ3hfaW50X3QgICAgZHN0OworICAgIGNoYXIgICAgICAgICpzcmMyZHN0OworICAgIGNoYXIgICAgICAgICpkc3Qyc3JjOwogfSBuZ3hfaHR0cF9jaGFyc2V0X3RhYmxlc190OwogCiAKQEAgLTMxLDE3ICszMywxNyBAQAogCiAKIHR5cGVkZWYgc3RydWN0IHsKLSAgICBuZ3hfZmxhZ190ICBlbmFibGU7Ci0gICAgbmd4X2ZsYWdfdCAgYXV0b2RldGVjdDsKKyAgICBuZ3hfZmxhZ190ICAgZW5hYmxlOworICAgIG5neF9mbGFnX3QgICBhdXRvZGV0ZWN0OwogCi0gICAgbmd4X2ludF90ICAgZGVmYXVsdF9jaGFyc2V0OwotICAgIG5neF9pbnRfdCAgIHNvdXJjZV9jaGFyc2V0OworICAgIG5neF9pbnRfdCAgICBkZWZhdWx0X2NoYXJzZXQ7CisgICAgbmd4X2ludF90ICAgIHNvdXJjZV9jaGFyc2V0OwogfSBuZ3hfaHR0cF9jaGFyc2V0X2xvY19jb25mX3Q7CiAKIAogdHlwZWRlZiBzdHJ1Y3QgewotICAgIG5neF9pbnRfdCAgIHNlcnZlcjsKLSAgICBuZ3hfaW50X3QgICBjbGllbnQ7CisgICAgbmd4X2ludF90ICAgIHNlcnZlcjsKKyAgICBuZ3hfaW50X3QgICAgY2xpZW50OwogfSBuZ3hfaHR0cF9jaGFyc2V0X2N0eF90OwogCiAKQEAgLTE4Myw2ICsxODUsNyBAQAogCiAgICAgY2hhcnNldHMgPSBtY2YtPmNoYXJzZXRzLmVsdHM7CiAgICAgci0+aGVhZGVyc19vdXQuY2hhcnNldCA9IGNoYXJzZXRzW2xjZi0+ZGVmYXVsdF9jaGFyc2V0XS5uYW1lOworICAgIHItPnV0ZjggPSBjaGFyc2V0c1tsY2YtPmRlZmF1bHRfY2hhcnNldF0udXRmODsKIAogICAgIGlmIChsY2YtPmRlZmF1bHRfY2hhcnNldCA9PSBsY2YtPnNvdXJjZV9jaGFyc2V0KSB7CiAgICAgICAgIHJldHVybiBuZ3hfaHR0cF9uZXh0X2hlYWRlcl9maWx0ZXIocik7CkBAIC00NDgsNiArNDUxLDEwIEBACiAgICAgYy0+bmFtZSA9ICpuYW1lOwogICAgIGMtPnNlcnZlciA9IDA7CiAKKyAgICBpZiAobmd4X3N0cmNhc2VjbXAobmFtZS0+ZGF0YSwgInV0Zi04IikgPT0gMCkgeworICAgICAgICBjLT51dGY4ID0gMTsKKyAgICB9CisKICAgICByZXR1cm4gaTsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHAuYyBiL3NyYy9odHRwL25neF9odHRwLmMKaW5kZXggMGZiMDU3NS4uMGY2ZjJmMSAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHAuYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cC5jCkBAIC02Niw4ICs2Niw5IEBACiBuZ3hfaHR0cF9ibG9jayhuZ3hfY29uZl90ICpjZiwgbmd4X2NvbW1hbmRfdCAqY21kLCB2b2lkICpjb25mKQogewogICAgIGNoYXIgICAgICAgICAgICAgICAgICAgICAgICAqcnY7Ci0gICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgICBtaSwgbSwgcywgbCwgcCwgYSwgbjsKLSAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgIHBvcnRfZm91bmQsIGFkZHJfZm91bmQsIHZpcnR1YWxfbmFtZXMsIGtleTsKKyAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgIG1pLCBtLCBzLCBsLCBwLCBhLCBuLCBrZXk7CisgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgICBwb3J0X2ZvdW5kLCBhZGRyX2ZvdW5kOworICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgICAgdmlydHVhbF9uYW1lcywgc2VwYXJhdGVfYmluZGluZzsKICAgICBuZ3hfY29uZl90ICAgICAgICAgICAgICAgICAgIHBjZjsKICAgICBuZ3hfYXJyYXlfdCAgICAgICAgICAgICAgICAgIGluX3BvcnRzOwogICAgIG5neF9saXN0ZW5pbmdfdCAgICAgICAgICAgICAqbHM7CkBAIC00MDgsOSArNDA5LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBmb3IgdGhpcyBhZGRyZXNzOnBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsc2NmW2xdLmRlZmF1bHRfc2VydmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxzY2ZbbF0uY29uZi5kZWZhdWx0X3NlcnZlcikgewogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbl9hZGRyW2FdLmRlZmF1bHRfc2VydmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbl9hZGRyW2FdLmNvbmYuZGVmYXVsdF9zZXJ2ZXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FUlIsIGNmLT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRoZSBkdXBsaWNhdGUgZGVmYXVsdCBzZXJ2ZXIgaW4gJVY6JWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsc2NmW2xdLmZpbGVfbmFtZSwgbHNjZltsXS5saW5lKTsKQEAgLTQxOSw3ICs0MjAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5fYWRkclthXS5jb3JlX3Nydl9jb25mID0gY3NjZnBbc107Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluX2FkZHJbYV0uZGVmYXVsdF9zZXJ2ZXIgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbl9hZGRyW2FdLmNvbmYuZGVmYXVsdF9zZXJ2ZXIgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfZm91bmQgPSAxOwpAQCAtNDQ5LDggKzQ1MCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5fYWRkclthXS5uYW1lcy5lbHRzID0gTlVMTDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbl9hZGRyW2FdLmhhc2ggPSBOVUxMOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluX2FkZHJbYV0ud2lsZGNhcmRzLmVsdHMgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluX2FkZHJbYV0uZGVmYXVsdF9zZXJ2ZXIgPSBsc2NmW2xdLmRlZmF1bHRfc2VydmVyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluX2FkZHJbYV0uY29yZV9zcnZfY29uZiA9IGNzY2ZwW3NdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluX2FkZHJbYV0uY29uZiA9IGxzY2ZbbF0uY29uZjsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZ3hfaHR0cF9hZGRfbmFtZXMoY2YsICZpbl9hZGRyW2FdLCBjc2NmcFtzXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIT0gTkdYX09LKQpAQCAtNTE4LDYgKzUxOSw4IEBACiAgICAgaW5fcG9ydCA9IGluX3BvcnRzLmVsdHM7CiAgICAgZm9yIChwID0gMDsgcCA8IGluX3BvcnRzLm5lbHRzOyBwKyspIHsKIAorICAgICAgICBzZXBhcmF0ZV9iaW5kaW5nID0gMDsKKwogICAgICAgICAvKgogICAgICAgICAgKiBjaGVjayB3aGV0aGVyIGFsbCBuYW1lLWJhc2VkIHNlcnZlcnMgaGF2ZSB0aGUgc2FtZSBjb25maWd1cmFpdG9uCiAgICAgICAgICAqIGFzIHRoZSBkZWZhdWx0IHNlcnZlciwgb3Igc29tZSBzZXJ2ZXJzIHJlc3RyaWN0IHRoZSBob3N0IG5hbWVzCkBAIC01MjYsNiArNTI5LDEwIEBACiAgICAgICAgIGluX2FkZHIgPSBpbl9wb3J0W3BdLmFkZHJzLmVsdHM7CiAgICAgICAgIGZvciAoYSA9IDA7IGEgPCBpbl9wb3J0W3BdLmFkZHJzLm5lbHRzOyBhKyspIHsKIAorICAgICAgICAgICAgaWYgKGluX2FkZHJbYV0uY29uZi5iaW5kKSB7CisgICAgICAgICAgICAgICAgc2VwYXJhdGVfYmluZGluZyA9IDE7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIHZpcnR1YWxfbmFtZXMgPSAwOwogCiAgICAgICAgICAgICBuYW1lID0gaW5fYWRkclthXS5uYW1lcy5lbHRzOwpAQCAtNjA4LDcgKzYxNSw3IEBACiAgICAgICAgICAqIHRvIHRoZSAiKjpwb3J0IiBvbmx5IGFuZCBpZ25vcmUgdGhlIG90aGVyIGJpbmRpbmdzCiAgICAgICAgICAqLwogCi0gICAgICAgIGlmIChpbl9hZGRyW2EgLSAxXS5hZGRyID09IElOQUREUl9BTlkpIHsKKyAgICAgICAgaWYgKGluX2FkZHJbYSAtIDFdLmFkZHIgPT0gSU5BRERSX0FOWSAmJiAhc2VwYXJhdGVfYmluZGluZykgewogICAgICAgICAgICAgYS0tOwogCiAgICAgICAgIH0gZWxzZSB7CkBAIC02MjQsMTUgKzYzMSwxMyBAQAogICAgICAgICAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgbHMtPmJhY2tsb2cgPSAtMTsKLQogICAgICAgICAgICAgbHMtPmFkZHJfbnRvcCA9IDE7CiAKICAgICAgICAgICAgIGxzLT5oYW5kbGVyID0gbmd4X2h0dHBfaW5pdF9jb25uZWN0aW9uOwogCiAgICAgICAgICAgICBjc2NmID0gaW5fYWRkclthXS5jb3JlX3Nydl9jb25mOwogICAgICAgICAgICAgbHMtPnBvb2xfc2l6ZSA9IGNzY2YtPmNvbm5lY3Rpb25fcG9vbF9zaXplOwotICAgICAgICAgICAgbHMtPnBvc3RfYWNjZXB0X3RpbWVvdXQgPSBjc2NmLT5wb3N0X2FjY2VwdF90aW1lb3V0OworICAgICAgICAgICAgbHMtPnBvc3RfYWNjZXB0X3RpbWVvdXQgPSBjc2NmLT5jbGllbnRfaGVhZGVyX3RpbWVvdXQ7CiAKICAgICAgICAgICAgIGNsY2YgPSBjc2NmLT5jdHgtPmxvY19jb25mW25neF9odHRwX2NvcmVfbW9kdWxlLmN0eF9pbmRleF07CiAgICAgICAgICAgICBscy0+bG9nID0gY2xjZi0+ZXJyX2xvZzsKQEAgLTY0NCw2ICs2NDksMTYgQEAKICAgICAgICAgICAgIH0KICNlbmRpZgogCisgICAgICAgICAgICBscy0+YmFja2xvZyA9IGluX2FkZHJbYV0uY29uZi5iYWNrbG9nOworCisjaWYgKE5HWF9IQVZFX0RFRkVSUkVEX0FDQ0VQVCAmJiBkZWZpbmVkIFNPX0FDQ0VQVEZJTFRFUikKKyAgICAgICAgICAgIGxzLT5hY2NlcHRfZmlsdGVyID0gaW5fYWRkclthXS5jb25mLmFjY2VwdF9maWx0ZXI7CisjZW5kaWYKKworI2lmIChOR1hfSEFWRV9ERUZFUlJFRF9BQ0NFUFQgJiYgZGVmaW5lZCBUQ1BfREVGRVJfQUNDRVBUKQorICAgICAgICAgICAgbHMtPmRlZmVycmVkX2FjY2VwdCA9IGluX2FkZHJbYV0uY29uZi5kZWZlcnJlZF9hY2NlcHQ7CisjZW5kaWYKKwogICAgICAgICAgICAgbHMtPmN0eCA9IGN0eDsKIAogICAgICAgICAgICAgaWYgKGluX3BvcnRbcF0uYWRkcnMubmVsdHMgPiAxKSB7CkBAIC03NjYsOCArNzgxLDggQEAKICAgICBpbl9hZGRyLT5uYW1lcy5lbHRzID0gTlVMTDsKICAgICBpbl9hZGRyLT5oYXNoID0gTlVMTDsKICAgICBpbl9hZGRyLT53aWxkY2FyZHMuZWx0cyA9IE5VTEw7Ci0gICAgaW5fYWRkci0+ZGVmYXVsdF9zZXJ2ZXIgPSBsc2NmLT5kZWZhdWx0X3NlcnZlcjsKICAgICBpbl9hZGRyLT5jb3JlX3Nydl9jb25mID0gY3NjZjsKKyAgICBpbl9hZGRyLT5jb25mID0gbHNjZi0+Y29uZjsKIAogI2lmIChOR1hfREVCVUcpCiAgICAgewpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuYyBiL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMKaW5kZXggMDI3OTU3OS4uMWQzOTk3MCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5jCkBAIC0xMDIsMTMgKzEwMiw2IEBACiAgICAgICBvZmZzZXRvZihuZ3hfaHR0cF9jb3JlX3Nydl9jb25mX3QsIGNvbm5lY3Rpb25fcG9vbF9zaXplKSwKICAgICAgIE5VTEwgfSwKIAotICAgIHsgbmd4X3N0cmluZygicG9zdF9hY2NlcHRfdGltZW91dCIpLAotICAgICAgTkdYX0hUVFBfTUFJTl9DT05GfE5HWF9IVFRQX1NSVl9DT05GfE5HWF9DT05GX1RBS0UxLAotICAgICAgbmd4X2NvbmZfc2V0X21zZWNfc2xvdCwKLSAgICAgIE5HWF9IVFRQX1NSVl9DT05GX09GRlNFVCwKLSAgICAgIG9mZnNldG9mKG5neF9odHRwX2NvcmVfc3J2X2NvbmZfdCwgcG9zdF9hY2NlcHRfdGltZW91dCksCi0gICAgICBOVUxMIH0sCi0KICAgICB7IG5neF9zdHJpbmcoInJlcXVlc3RfcG9vbF9zaXplIiksCiAgICAgICBOR1hfSFRUUF9NQUlOX0NPTkZ8TkdYX0hUVFBfU1JWX0NPTkZ8TkdYX0NPTkZfVEFLRTEsCiAgICAgICBuZ3hfY29uZl9zZXRfc2l6ZV9zbG90LApAQCAtMTYwLDkgKzE1Myw5IEBACiAKICAgICB7IG5neF9zdHJpbmcoImxpc3RlbiIpLAogI2lmIDAKLSAgICAgIE5HWF9IVFRQX01BSU5fQ09ORnxOR1hfSFRUUF9TUlZfQ09ORnxOR1hfQ09ORl9UQUtFMSwKKyAgICAgIE5HWF9IVFRQX01BSU5fQ09ORnxOR1hfSFRUUF9TUlZfQ09ORnxOR1hfQ09ORl8xTU9SRSwKICNlbHNlCi0gICAgICBOR1hfSFRUUF9TUlZfQ09ORnxOR1hfQ09ORl9UQUtFMTIsCisgICAgICBOR1hfSFRUUF9TUlZfQ09ORnxOR1hfQ09ORl8xTU9SRSwKICNlbmRpZgogICAgICAgbmd4X2h0dHBfY29yZV9saXN0ZW4sCiAgICAgICBOR1hfSFRUUF9TUlZfQ09ORl9PRkZTRVQsCkBAIC0xNTkyLDcgKzE1ODUsNiBAQAogICAgIH0KIAogICAgIGNzY2YtPmNvbm5lY3Rpb25fcG9vbF9zaXplID0gTkdYX0NPTkZfVU5TRVRfU0laRTsKLSAgICBjc2NmLT5wb3N0X2FjY2VwdF90aW1lb3V0ID0gTkdYX0NPTkZfVU5TRVRfTVNFQzsKICAgICBjc2NmLT5yZXF1ZXN0X3Bvb2xfc2l6ZSA9IE5HWF9DT05GX1VOU0VUX1NJWkU7CiAgICAgY3NjZi0+Y2xpZW50X2hlYWRlcl90aW1lb3V0ID0gTkdYX0NPTkZfVU5TRVRfTVNFQzsKICAgICBjc2NmLT5jbGllbnRfaGVhZGVyX2J1ZmZlcl9zaXplID0gTkdYX0NPTkZfVU5TRVRfU0laRTsKQEAgLTE2MjEsNiArMTYxMyw4IEBACiAgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CiAgICAgICAgIH0KIAorICAgICAgICBuZ3hfbWVtemVybyhscywgc2l6ZW9mKG5neF9odHRwX2xpc3Rlbl90KSk7CisKICAgICAgICAgbHMtPmFkZHIgPSBJTkFERFJfQU5ZOwogI2lmIChOR1hfV0lOMzIpCiAgICAgICAgIGxzLT5wb3J0ID0gODA7CkBAIC0xNjI5LDcgKzE2MjMsNiBAQAogICAgICAgICBscy0+cG9ydCA9IChnZXR1aWQoKSA9PSAwKSA/IDgwIDogODAwMDsKICNlbmRpZgogICAgICAgICBscy0+ZmFtaWx5ID0gQUZfSU5FVDsKLSAgICAgICAgbHMtPmRlZmF1bHRfc2VydmVyID0gMDsKICAgICB9CiAKICAgICBpZiAoY29uZi0+c2VydmVyX25hbWVzLm5lbHRzID09IDApIHsKQEAgLTE2NjIsOCArMTY1NSw2IEBACiAKICAgICBuZ3hfY29uZl9tZXJnZV9zaXplX3ZhbHVlKGNvbmYtPmNvbm5lY3Rpb25fcG9vbF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldi0+Y29ubmVjdGlvbl9wb29sX3NpemUsIDI1Nik7Ci0gICAgbmd4X2NvbmZfbWVyZ2VfbXNlY192YWx1ZShjb25mLT5wb3N0X2FjY2VwdF90aW1lb3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldi0+cG9zdF9hY2NlcHRfdGltZW91dCwgNjAwMDApOwogICAgIG5neF9jb25mX21lcmdlX3NpemVfdmFsdWUoY29uZi0+cmVxdWVzdF9wb29sX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2LT5yZXF1ZXN0X3Bvb2xfc2l6ZSwgNDA5Nik7CiAgICAgbmd4X2NvbmZfbWVyZ2VfbXNlY192YWx1ZShjb25mLT5jbGllbnRfaGVhZGVyX3RpbWVvdXQsCkBAIC0xODU5LDg5ICsxODUwLDE0NSBAQAogfQogCiAKKy8qIEFGX0lORVQgb25seSAqLworCiBzdGF0aWMgY2hhciAqCiBuZ3hfaHR0cF9jb3JlX2xpc3RlbihuZ3hfY29uZl90ICpjZiwgbmd4X2NvbW1hbmRfdCAqY21kLCB2b2lkICpjb25mKQogewogICAgIG5neF9odHRwX2NvcmVfc3J2X2NvbmZfdCAqc2NmID0gY29uZjsKIAotICAgIHVfY2hhciAgICAgICAgICAgICAqYWRkcjsKLSAgICBuZ3hfaW50X3QgICAgICAgICAgIHBvcnQ7Ci0gICAgbmd4X3VpbnRfdCAgICAgICAgICBwOwotICAgIG5neF9zdHJfdCAgICAgICAgICAqYXJnczsKLSAgICBzdHJ1Y3QgaG9zdGVudCAgICAgKmg7Ci0gICAgbmd4X2h0dHBfbGlzdGVuX3QgICpsczsKKyAgICBjaGFyICAgICAgICAgICAgICAgICAqZXJyOworICAgIG5neF9zdHJfdCAgICAgICAgICAgICp2YWx1ZTsKKyAgICBuZ3hfdWludF90ICAgICAgICAgICAgbjsKKyAgICBzdHJ1Y3QgaG9zdGVudCAgICAgICAqaDsKKyAgICBuZ3hfaHR0cF9saXN0ZW5fdCAgICAqbHM7CisgICAgbmd4X2luZXRfdXBzdHJlYW1fdCAgIGluZXRfdXBzdHJlYW07CiAKICAgICAvKgogICAgICAqIFRPRE86IGNoZWNrIGR1cGxpY2F0ZSAnbGlzdGVuJyBkaXJlY3RpdmVzLAogICAgICAqICAgICAgIGFkZCByZXNvbHZlZCBuYW1lIHRvIHNlcnZlciBuYW1lcyA/Pz8KICAgICAgKi8KIAorICAgIHZhbHVlID0gY2YtPmFyZ3MtPmVsdHM7CisgICAgCisgICAgbmd4X21lbXplcm8oJmluZXRfdXBzdHJlYW0sIHNpemVvZihuZ3hfaW5ldF91cHN0cmVhbV90KSk7CisKKyAgICBpbmV0X3Vwc3RyZWFtLnVybCA9IHZhbHVlWzFdOworICAgIGluZXRfdXBzdHJlYW0ucG9ydF9vbmx5ID0gMTsKKworICAgIGVyciA9IG5neF9pbmV0X3BhcnNlX2hvc3RfcG9ydCgmaW5ldF91cHN0cmVhbSk7CisKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIG5neF9jb25mX2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjZiwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyBpbiBcIiVWXCIgb2YgdGhlIFwibGlzdGVuXCIgZGlyZWN0aXZlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciwgJmluZXRfdXBzdHJlYW0udXJsKTsKKyAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOyAKKyAgICB9CisKICAgICBscyA9IG5neF9hcnJheV9wdXNoKCZzY2YtPmxpc3Rlbik7CiAgICAgaWYgKGxzID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogICAgIH0KIAotICAgIC8qIEFGX0lORVQgb25seSAqLworICAgIG5neF9tZW16ZXJvKGxzLCBzaXplb2Yobmd4X2h0dHBfbGlzdGVuX3QpKTsKIAogICAgIGxzLT5mYW1pbHkgPSBBRl9JTkVUOworICAgIGxzLT5wb3J0ID0gKGluX3BvcnRfdCkgKGluZXRfdXBzdHJlYW0uZGVmYXVsdF9wb3J0ID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgwIDogaW5ldF91cHN0cmVhbS5wb3J0KTsKICAgICBscy0+ZmlsZV9uYW1lID0gY2YtPmNvbmZfZmlsZS0+ZmlsZS5uYW1lOwogICAgIGxzLT5saW5lID0gY2YtPmNvbmZfZmlsZS0+bGluZTsKLSAgICBscy0+ZGVmYXVsdF9zZXJ2ZXIgPSAwOworICAgIGxzLT5jb25mLmJhY2tsb2cgPSAtMTsKIAotICAgIGFyZ3MgPSBjZi0+YXJncy0+ZWx0czsKLSAgICBhZGRyID0gYXJnc1sxXS5kYXRhOworICAgIGlmIChpbmV0X3Vwc3RyZWFtLmhvc3QubGVuKSB7CisgICAgICAgIGluZXRfdXBzdHJlYW0uaG9zdC5kYXRhW2luZXRfdXBzdHJlYW0uaG9zdC5sZW5dID0gJ1wwJzsKIAotICAgIGZvciAocCA9IDA7IHAgPCBhcmdzWzFdLmxlbjsgcCsrKSB7Ci0gICAgICAgIGlmIChhZGRyW3BdID09ICc6JykgewotICAgICAgICAgICAgYWRkcltwKytdID0gJ1wwJzsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBscy0+YWRkciA9IGluZXRfYWRkcigoY29uc3QgY2hhciAqKSBpbmV0X3Vwc3RyZWFtLmhvc3QuZGF0YSk7CisKKyAgICAgICAgaWYgKGxzLT5hZGRyID09IElOQUREUl9OT05FKSB7CisgICAgICAgICAgICBoID0gZ2V0aG9zdGJ5bmFtZSgoY29uc3QgY2hhciAqKSBpbmV0X3Vwc3RyZWFtLmhvc3QuZGF0YSk7CisKKyAgICAgICAgICAgIGlmIChoID09IE5VTEwgfHwgaC0+aF9hZGRyX2xpc3RbMF0gPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIG5neF9jb25mX2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjZiwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhbiBub3QgcmVzb2x2ZSBob3N0IFwiJXNcIiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbiB0aGUgXCJsaXN0ZW5cIiBkaXJlY3RpdmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmV0X3Vwc3RyZWFtLmhvc3QuZGF0YSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOworICAgICAgICAgICAgfQorICAgIAorICAgICAgICAgICAgbHMtPmFkZHIgPSAqKGluX2FkZHJfdCAqKShoLT5oX2FkZHJfbGlzdFswXSk7CiAgICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocCA9PSBhcmdzWzFdLmxlbikgewotICAgICAgICAvKiBubyAiOiIgaW4gdGhlICJsaXN0ZW4iICovCi0gICAgICAgIHAgPSAwOwotICAgIH0KLQotICAgIHBvcnQgPSBuZ3hfYXRvaSgmYWRkcltwXSwgYXJnc1sxXS5sZW4gLSBwKTsKLQotICAgIGlmIChwb3J0ID09IE5HWF9FUlJPUiAmJiBwID09IDApIHsKLQotICAgICAgICAvKiAibGlzdGVuIGhvc3QiICovCi0gICAgICAgIGxzLT5wb3J0ID0gODA7Ci0KLSAgICB9IGVsc2UgaWYgKChwb3J0ID09IE5HWF9FUlJPUiAmJiBwICE9IDApIC8qICJsaXN0ZW4gaG9zdDpOT05OVU1CRVIiICovCi0gICAgICAgICAgICAgICB8fCAocG9ydCA8IDEgfHwgcG9ydCA+IDY1NTM2KSkgeyAvKiAibGlzdGVuIDk5OTk5IiAqLwotCi0gICAgICAgIG5neF9jb25mX2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjZiwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIHBvcnQgXCIlc1wiIGluIFwiJVZcIiBkaXJlY3RpdmUsICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJpdCBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gMSBhbmQgNjU1MzUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFkZHJbcF0sICZjbWQtPm5hbWUpOwotCi0gICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKLQotICAgIH0gZWxzZSBpZiAocCA9PSAwKSB7Ci0gICAgICAgIGxzLT5hZGRyID0gSU5BRERSX0FOWTsKLSAgICAgICAgbHMtPnBvcnQgPSAoaW5fcG9ydF90KSBwb3J0OwotICAgICAgICByZXR1cm4gTkdYX0NPTkZfT0s7CiAKICAgICB9IGVsc2UgewotICAgICAgICBscy0+cG9ydCA9IChpbl9wb3J0X3QpIHBvcnQ7CisgICAgICAgIGxzLT5hZGRyID0gSU5BRERSX0FOWTsKICAgICB9CiAKLSAgICBscy0+YWRkciA9IGluZXRfYWRkcigoY29uc3QgY2hhciAqKSBhZGRyKTsKKyAgICBpZiAoY2YtPmFyZ3MtPm5lbHRzID09IDIpIHsKKyAgICAgICAgcmV0dXJuIE5HWF9DT05GX09LOworICAgIH0KIAotICAgIGlmIChscy0+YWRkciA9PSBJTkFERFJfTk9ORSkgewotICAgICAgICBoID0gZ2V0aG9zdGJ5bmFtZSgoY29uc3QgY2hhciAqKSBhZGRyKTsKKyAgICBpZiAobmd4X3N0cmNtcCh2YWx1ZVsyXS5kYXRhLCAiZGVmYXVsdCIpID09IDApIHsKKyAgICAgICAgbHMtPmNvbmYuZGVmYXVsdF9zZXJ2ZXIgPSAxOworICAgICAgICBuID0gMzsKKyAgICB9IGVsc2UgeworICAgICAgICBuID0gMjsKKyAgICB9CiAKLSAgICAgICAgaWYgKGggPT0gTlVMTCB8fCBoLT5oX2FkZHJfbGlzdFswXSA9PSBOVUxMKSB7CisgICAgZm9yICggLyogdm9pZCAqLyA7IG4gPCBjZi0+YXJncy0+bmVsdHM7IG4rKykgeworCisgICAgICAgIGlmIChscy0+Y29uZi5kZWZhdWx0X3NlcnZlciA9PSAwKSB7CiAgICAgICAgICAgICBuZ3hfY29uZl9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY2YsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2FuIG5vdCByZXNvbHZlIGhvc3QgXCIlc1wiICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbiBcIiVWXCIgZGlyZWN0aXZlIiwgYWRkciwgJmNtZC0+bmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwiJVZcIiBwYXJhbWV0ZXIgY2FuIGJlIHNwZWNpZmllZCBmb3IgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgZGVmYXVsdCBcImxpc3RlblwiIGRpcmVjdGl2ZSBvbmx5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdmFsdWVbbl0pOwogICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogICAgICAgICB9CiAKLSAgICAgICAgbHMtPmFkZHIgPSAqKGluX2FkZHJfdCAqKShoLT5oX2FkZHJfbGlzdFswXSk7CisgICAgICAgIGlmIChuZ3hfc3RyY21wKHZhbHVlW25dLmRhdGEsICJiaW5kIikgPT0gMCkgeworICAgICAgICAgICAgbHMtPmNvbmYuYmluZCA9IDE7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChuZ3hfc3RybmNtcCh2YWx1ZVtuXS5kYXRhLCAiYmw9IiwgMykgPT0gMCkgeworICAgICAgICAgICAgbHMtPmNvbmYuYmFja2xvZyA9IG5neF9hdG9pKHZhbHVlW25dLmRhdGEgKyAzLCB2YWx1ZVtuXS5sZW4gLSAzKTsKKyAgICAgICAgICAgIGxzLT5jb25mLmJpbmQgPSAxOworCisgICAgICAgICAgICBpZiAobHMtPmNvbmYuYmFja2xvZyA9PSBOR1hfRVJST1IgfHwgbHMtPmNvbmYuYmFja2xvZyA9PSAwKSB7CisgICAgICAgICAgICAgICAgbmd4X2NvbmZfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCBiYWNrbG9nIFwiJVZcIiIsICZ2YWx1ZVtuXSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChuZ3hfc3RybmNtcCh2YWx1ZVtuXS5kYXRhLCAiYWY9IiwgMykgPT0gMCkgeworI2lmIChOR1hfSEFWRV9ERUZFUlJFRF9BQ0NFUFQgJiYgZGVmaW5lZCBTT19BQ0NFUFRGSUxURVIpCisgICAgICAgICAgICBscy0+Y29uZi5hY2NlcHRfZmlsdGVyID0gKGNoYXIgKikgJnZhbHVlW25dLmRhdGFbM107CisgICAgICAgICAgICBscy0+Y29uZi5iaW5kID0gMTsKKyNlbHNlCisgICAgICAgICAgICBuZ3hfY29uZl9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY2YsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFjY2VwdCBmaWx0ZXJzIFwiJVZcIiBhcmUgbm90IHN1cHBvcnRlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9uIHRoaXMgcGxhdGZvcm0sIGlnbm9yZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2YWx1ZVtuXSk7CisjZW5kaWYKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG5neF9zdHJjbXAodmFsdWVbbl0uZGF0YSwgImRlZmVycmVkIikgPT0gMCkgeworI2lmIChOR1hfSEFWRV9ERUZFUlJFRF9BQ0NFUFQgJiYgZGVmaW5lZCBUQ1BfREVGRVJfQUNDRVBUKQorICAgICAgICAgICAgbHMtPmNvbmYuZGVmZXJyZWRfYWNjZXB0ID0gMTsKKyAgICAgICAgICAgIGxzLT5jb25mLmJpbmQgPSAxOworI2Vsc2UKKyAgICAgICAgICAgIG5neF9jb25mX2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjZiwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGhlIGRlZmVycmVkIGFjY2VwdCBpcyBub3Qgc3VwcG9ydGVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib24gdGhpcyBwbGF0Zm9ybSwgaWdub3JlZCIpOworI2VuZGlmCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIG5neF9jb25mX2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjZiwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgaW52YWxpZCBcIiVWXCIgcGFyYW1ldGVyIiwgJnZhbHVlW25dKTsKKyAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogICAgIH0KIAogICAgIHJldHVybiBOR1hfQ09ORl9PSzsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmggYi9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5oCmluZGV4IDE0MDkwYjkuLjExNjQwNDYgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmgKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuaApAQCAtMTQsMTMgKzE0LDMwIEBACiAKIAogdHlwZWRlZiBzdHJ1Y3QgeworICAgIHVuc2lnbmVkICAgICAgICAgICAgICAgICAgIGRlZmF1bHRfc2VydmVyOjE7CisgICAgdW5zaWduZWQgICAgICAgICAgICAgICAgICAgYmluZDoxOworCisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgYmFja2xvZzsKKworI2lmIChOR1hfSEFWRV9ERUZFUlJFRF9BQ0NFUFQgJiYgZGVmaW5lZCBTT19BQ0NFUFRGSUxURVIpCisgICAgY2hhciAgICAgICAgICAgICAgICAgICAgICAqYWNjZXB0X2ZpbHRlcjsKKyNlbmRpZgorI2lmIChOR1hfSEFWRV9ERUZFUlJFRF9BQ0NFUFQgJiYgZGVmaW5lZCBUQ1BfREVGRVJfQUNDRVBUKQorICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgIGRlZmVycmVkX2FjY2VwdDsKKyNlbmRpZgorCit9IG5neF9odHRwX2xpc3Rlbl9jb25mX3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QgewogICAgIGluX2FkZHJfdCAgICAgICAgICAgICAgICAgIGFkZHI7CiAgICAgaW5fcG9ydF90ICAgICAgICAgICAgICAgICAgcG9ydDsKICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICBmYW1pbHk7CisKICAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAgICBmaWxlX25hbWU7CiAgICAgbmd4X2ludF90ICAgICAgICAgICAgICAgICAgbGluZTsKIAotICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgIGRlZmF1bHRfc2VydmVyOyAvKiB1bnNpZ25lZCAgZGVmYXVsdF9zZXJ2ZXI6MTsgKi8KKyAgICBuZ3hfaHR0cF9saXN0ZW5fY29uZl90ICAgICBjb25mOwogfSBuZ3hfaHR0cF9saXN0ZW5fdDsKIAogCkBAIC04Myw3ICsxMDAsNiBAQAogCiAgICAgbmd4X2J1ZnNfdCAgICAgICAgICAgICAgICAgbGFyZ2VfY2xpZW50X2hlYWRlcl9idWZmZXJzOwogCi0gICAgbmd4X21zZWNfdCAgICAgICAgICAgICAgICAgcG9zdF9hY2NlcHRfdGltZW91dDsKICAgICBuZ3hfbXNlY190ICAgICAgICAgICAgICAgICBjbGllbnRfaGVhZGVyX3RpbWVvdXQ7CiAKICAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICByZXN0cmljdF9ob3N0X25hbWVzOwpAQCAtMTExLDcgKzEyNyw3IEBACiAgICAgLyogdGhlIGRlZmF1bHQgc2VydmVyIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgYWRkcmVzczpwb3J0ICovCiAgICAgbmd4X2h0dHBfY29yZV9zcnZfY29uZl90ICAqY29yZV9zcnZfY29uZjsKIAotICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgIGRlZmF1bHRfc2VydmVyOyAvKiB1bnNpZ25lZCAgZGVmYXVsdF9zZXJ2ZXI6MTsgKi8KKyAgICBuZ3hfaHR0cF9saXN0ZW5fY29uZl90ICAgICBjb25mOwogfTsKIAogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMKaW5kZXggZjA0YzE3Zi4uYzNlMWFiNyAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuYwpAQCAtMjIsNiArMjIsOCBAQAogCiBzdGF0aWMgbmd4X2ludF90IG5neF9odHRwX3Byb2Nlc3NfaGVhZGVyX2xpbmUobmd4X2h0dHBfcmVxdWVzdF90ICpyLAogICAgIG5neF90YWJsZV9lbHRfdCAqaCwgbmd4X3VpbnRfdCBvZmZzZXQpOworc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF9wcm9jZXNzX3VuaXF1ZV9oZWFkZXJfbGluZShuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsCisgICAgbmd4X3RhYmxlX2VsdF90ICpoLCBuZ3hfdWludF90IG9mZnNldCk7CiBzdGF0aWMgbmd4X2ludF90IG5neF9odHRwX3Byb2Nlc3NfY29va2llKG5neF9odHRwX3JlcXVlc3RfdCAqciwKICAgICBuZ3hfdGFibGVfZWx0X3QgKmgsIG5neF91aW50X3Qgb2Zmc2V0KTsKIApAQCAtNjIsMTAgKzY0LDEwIEBACiAKIG5neF9odHRwX2hlYWRlcl90ICBuZ3hfaHR0cF9oZWFkZXJzX2luW10gPSB7CiAgICAgeyBuZ3hfc3RyaW5nKCJIb3N0IiksIG9mZnNldG9mKG5neF9odHRwX2hlYWRlcnNfaW5fdCwgaG9zdCksCi0gICAgICAgICAgICAgICAgIG5neF9odHRwX3Byb2Nlc3NfaGVhZGVyX2xpbmUgfSwKKyAgICAgICAgICAgICAgICAgbmd4X2h0dHBfcHJvY2Vzc191bmlxdWVfaGVhZGVyX2xpbmUgfSwKIAogICAgIHsgbmd4X3N0cmluZygiQ29ubmVjdGlvbiIpLCBvZmZzZXRvZihuZ3hfaHR0cF9oZWFkZXJzX2luX3QsIGNvbm5lY3Rpb24pLAotICAgICAgICAgICAgICAgICBuZ3hfaHR0cF9wcm9jZXNzX2hlYWRlcl9saW5lIH0sCisgICAgICAgICAgICAgICAgIG5neF9odHRwX3Byb2Nlc3NfdW5pcXVlX2hlYWRlcl9saW5lIH0sCiAKICAgICB7IG5neF9zdHJpbmcoIklmLU1vZGlmaWVkLVNpbmNlIiksCiAgICAgICAgICAgICAgICAgIG9mZnNldG9mKG5neF9odHRwX2hlYWRlcnNfaW5fdCwgaWZfbW9kaWZpZWRfc2luY2UpLApAQCAtNzksNyArODEsNyBAQAogCiAgICAgeyBuZ3hfc3RyaW5nKCJDb250ZW50LUxlbmd0aCIpLAogICAgICAgICAgICAgICAgICBvZmZzZXRvZihuZ3hfaHR0cF9oZWFkZXJzX2luX3QsIGNvbnRlbnRfbGVuZ3RoKSwKLSAgICAgICAgICAgICAgICAgbmd4X2h0dHBfcHJvY2Vzc19oZWFkZXJfbGluZSB9LAorICAgICAgICAgICAgICAgICBuZ3hfaHR0cF9wcm9jZXNzX3VuaXF1ZV9oZWFkZXJfbGluZSB9LAogCiAgICAgeyBuZ3hfc3RyaW5nKCJDb250ZW50LVR5cGUiKSwKICAgICAgICAgICAgICAgICAgb2Zmc2V0b2Yobmd4X2h0dHBfaGVhZGVyc19pbl90LCBjb250ZW50X3R5cGUpLApAQCAtMTA0LDcgKzEwNiw3IEBACiAKICAgICB7IG5neF9zdHJpbmcoIkF1dGhvcml6YXRpb24iKSwKICAgICAgICAgICAgICAgICAgb2Zmc2V0b2Yobmd4X2h0dHBfaGVhZGVyc19pbl90LCBhdXRob3JpemF0aW9uKSwKLSAgICAgICAgICAgICAgICAgbmd4X2h0dHBfcHJvY2Vzc19oZWFkZXJfbGluZSB9LAorICAgICAgICAgICAgICAgICBuZ3hfaHR0cF9wcm9jZXNzX3VuaXF1ZV9oZWFkZXJfbGluZSB9LAogCiAgICAgeyBuZ3hfc3RyaW5nKCJLZWVwLUFsaXZlIiksIG9mZnNldG9mKG5neF9odHRwX2hlYWRlcnNfaW5fdCwga2VlcF9hbGl2ZSksCiAgICAgICAgICAgICAgICAgIG5neF9odHRwX3Byb2Nlc3NfaGVhZGVyX2xpbmUgfSwKQEAgLTExMywxMiArMTE1LDYgQEAKICAgICB7IG5neF9zdHJpbmcoIlgtRm9yd2FyZGVkLUZvciIpLAogICAgICAgICAgICAgICAgICBvZmZzZXRvZihuZ3hfaHR0cF9oZWFkZXJzX2luX3QsIHhfZm9yd2FyZGVkX2ZvciksCiAgICAgICAgICAgICAgICAgIG5neF9odHRwX3Byb2Nlc3NfaGVhZGVyX2xpbmUgfSwKLQotICAgIHsgbmd4X3N0cmluZygiWC1SZWFsLUlQIiksIG9mZnNldG9mKG5neF9odHRwX2hlYWRlcnNfaW5fdCwgeF9yZWFsX2lwKSwKLSAgICAgICAgICAgICAgICAgbmd4X2h0dHBfcHJvY2Vzc19oZWFkZXJfbGluZSB9LAotCi0gICAgeyBuZ3hfc3RyaW5nKCJYLVVSTCIpLCBvZmZzZXRvZihuZ3hfaHR0cF9oZWFkZXJzX2luX3QsIHhfdXJsKSwKLSAgICAgICAgICAgICAgICAgbmd4X2h0dHBfcHJvY2Vzc19oZWFkZXJfbGluZSB9LAogI2VuZGlmCiAKICNpZiAoTkdYX0hUVFBfSEVBREVSUykKQEAgLTkwNiwxMyArOTAyLDEzIEBACiAgICAgICAgIHJldHVybiBuOwogICAgIH0KIAotICAgIGlmICghcmV2LT5yZWFkeSkgewotICAgICAgICByZXR1cm4gTkdYX0FHQUlOOworICAgIGlmIChyZXYtPnJlYWR5KSB7CisgICAgICAgIG4gPSByLT5jb25uZWN0aW9uLT5yZWN2KHItPmNvbm5lY3Rpb24sIHItPmhlYWRlcl9pbi0+bGFzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0+aGVhZGVyX2luLT5lbmQgLSByLT5oZWFkZXJfaW4tPmxhc3QpOworICAgIH0gZWxzZSB7CisgICAgICAgIG4gPSBOR1hfQUdBSU47CiAgICAgfQogCi0gICAgbiA9IHItPmNvbm5lY3Rpb24tPnJlY3Yoci0+Y29ubmVjdGlvbiwgci0+aGVhZGVyX2luLT5sYXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHItPmhlYWRlcl9pbi0+ZW5kIC0gci0+aGVhZGVyX2luLT5sYXN0KTsKLQogICAgIGlmIChuID09IE5HWF9BR0FJTikgewogICAgICAgICBpZiAoIXItPmhlYWRlcl90aW1lb3V0X3NldCkgewogICAgICAgICAgICAgY3NjZiA9IG5neF9odHRwX2dldF9tb2R1bGVfc3J2X2NvbmYociwgbmd4X2h0dHBfY29yZV9tb2R1bGUpOwpAQCAtMTEwNywyMSArMTEwMyw0NCBAQAogCiAKIHN0YXRpYyBuZ3hfaW50X3QKK25neF9odHRwX3Byb2Nlc3NfdW5pcXVlX2hlYWRlcl9saW5lKG5neF9odHRwX3JlcXVlc3RfdCAqciwgbmd4X3RhYmxlX2VsdF90ICpoLAorICAgIG5neF91aW50X3Qgb2Zmc2V0KQoreworICAgIG5neF90YWJsZV9lbHRfdCAgKipwaDsKKworICAgIHBoID0gKG5neF90YWJsZV9lbHRfdCAqKikgKChjaGFyICopICZyLT5oZWFkZXJzX2luICsgb2Zmc2V0KTsKKworICAgIGlmICgqcGggPT0gTlVMTCkgeworICAgICAgICAqcGggPSBoOworICAgICAgICByZXR1cm4gTkdYX09LOworICAgIH0KKworICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19JTkZPLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAiY2xpZW50IHNlbnQgZHVwbGljYXRlIGhlYWRlciBsaW5lOiBcIiVWOiAlVlwiIiwKKyAgICAgICAgICAgICAgICAgICZoLT5rZXksICZoLT52YWx1ZSk7CisKKyAgICBuZ3hfaHR0cF9maW5hbGl6ZV9yZXF1ZXN0KHIsIE5HWF9IVFRQX0JBRF9SRVFVRVNUKTsKKworICAgIHJldHVybiBOR1hfRVJST1I7Cit9CisKKworc3RhdGljIG5neF9pbnRfdAogbmd4X2h0dHBfcHJvY2Vzc19jb29raWUobmd4X2h0dHBfcmVxdWVzdF90ICpyLCBuZ3hfdGFibGVfZWx0X3QgKmgsCiAgICAgbmd4X3VpbnRfdCBvZmZzZXQpCiB7CiAgICAgbmd4X3RhYmxlX2VsdF90ICAqKmNvb2tpZTsKIAogICAgIGNvb2tpZSA9IG5neF9hcnJheV9wdXNoKCZyLT5oZWFkZXJzX2luLmNvb2tpZXMpOwotICAgIGlmIChjb29raWUgPT0gTlVMTCkgewotICAgICAgICBuZ3hfaHR0cF9jbG9zZV9yZXF1ZXN0KHIsIE5HWF9IVFRQX0lOVEVSTkFMX1NFUlZFUl9FUlJPUik7Ci0gICAgICAgIG5neF9odHRwX2Nsb3NlX2Nvbm5lY3Rpb24oci0+Y29ubmVjdGlvbik7Ci0gICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgaWYgKGNvb2tpZSkgeworICAgICAgICAqY29va2llID0gaDsKKyAgICAgICAgcmV0dXJuIE5HWF9PSzsKICAgICB9CiAKLSAgICAqY29va2llID0gaDsKKyAgICBuZ3hfaHR0cF9jbG9zZV9yZXF1ZXN0KHIsIE5HWF9IVFRQX0lOVEVSTkFMX1NFUlZFUl9FUlJPUik7CisgICAgbmd4X2h0dHBfY2xvc2VfY29ubmVjdGlvbihyLT5jb25uZWN0aW9uKTsKIAotICAgIHJldHVybiBOR1hfT0s7CisgICAgcmV0dXJuIE5HWF9FUlJPUjsKIH0KIAogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmggYi9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmgKaW5kZXggZTJmMzAzMy4uNDcwZjU4NCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5oCisrKyBiL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuaApAQCAtMTUyLDggKzE1Miw2IEBACiAKICNpZiAoTkdYX0hUVFBfUFJPWFkpCiAgICAgbmd4X3RhYmxlX2VsdF90ICAgICAgICAgICAgICAgICAgKnhfZm9yd2FyZGVkX2ZvcjsKLSAgICBuZ3hfdGFibGVfZWx0X3QgICAgICAgICAgICAgICAgICAqeF9yZWFsX2lwOwotICAgIG5neF90YWJsZV9lbHRfdCAgICAgICAgICAgICAgICAgICp4X3VybDsKICNlbmRpZgogCiAjaWYgKE5HWF9IVFRQX0hFQURFUlMpCkBAIC0zNjUsNiArMzYzLDcgQEAKICAgICB1bnNpZ25lZCAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWw6MTsKICAgICB1bnNpZ25lZCAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VkOjE7CiAgICAgdW5zaWduZWQgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmU6MTsKKyAgICB1bnNpZ25lZCAgICAgICAgICAgICAgICAgICAgICAgICAgdXRmODoxOwogCiAgICAgdW5zaWduZWQgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5fZmlsdGVyX25lZWRfaW5fbWVtb3J5OjE7CiAgICAgdW5zaWduZWQgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcl9uZWVkX2luX21lbW9yeToxOwpkaWZmIC0tZ2l0IGEvc3JjL2ltYXAvbmd4X2ltYXBfY29yZV9tb2R1bGUuYyBiL3NyYy9pbWFwL25neF9pbWFwX2NvcmVfbW9kdWxlLmMKaW5kZXggM2U3NzVmMy4uYjRiZGU1MiAxMDA2NDQKLS0tIGEvc3JjL2ltYXAvbmd4X2ltYXBfY29yZV9tb2R1bGUuYworKysgYi9zcmMvaW1hcC9uZ3hfaW1hcF9jb3JlX21vZHVsZS5jCkBAIC0yNDksNyArMjQ5LDggQEAKIAogICAgIGlmIChlcnIpIHsKICAgICAgICAgbmd4X2NvbmZfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIGluIFwiJVZcIiBvZiB0aGUgXCJsaXN0ZW5cIiBkaXJlY3RpdmUiLCBlcnIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIGluIFwiJVZcIiBvZiB0aGUgXCJsaXN0ZW5cIiBkaXJlY3RpdmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyLCAmaW5ldF91cHN0cmVhbS51cmwpOwogICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CiAgICAgfQogCmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfZnJlZWJzZF9jb25maWcuaCBiL3NyYy9vcy91bml4L25neF9mcmVlYnNkX2NvbmZpZy5oCmluZGV4IDhkMGU5ODMuLjdiMzQ1OTAgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9mcmVlYnNkX2NvbmZpZy5oCisrKyBiL3NyYy9vcy91bml4L25neF9mcmVlYnNkX2NvbmZpZy5oCkBAIC03Niw3ICs3Niw3IEBACiAjZW5kaWYKIAogCi0jaWYgZGVmaW5lZCBTT19BQ0NFUFRGSUxURVIgJiYgIWRlZmluZWQgTkdYX0hBVkVfREVGRVJSRURfQUNDRVBUCisjaWYgKGRlZmluZWQgU09fQUNDRVBURklMVEVSICYmICFkZWZpbmVkIE5HWF9IQVZFX0RFRkVSUkVEX0FDQ0VQVCkKICNkZWZpbmUgTkdYX0hBVkVfREVGRVJSRURfQUNDRVBUICAxCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X3Byb2Nlc3NfY3ljbGUuYyBiL3NyYy9vcy91bml4L25neF9wcm9jZXNzX2N5Y2xlLmMKaW5kZXggMmExNjViZi4uZDNjOTJhMSAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X3Byb2Nlc3NfY3ljbGUuYworKysgYi9zcmMvb3MvdW5peC9uZ3hfcHJvY2Vzc19jeWNsZS5jCkBAIC04MzksNyArODM5LDcgQEAKICNlbmRpZgogCiAgICAgaWYgKGNjZi0+d29ya2luZ19kaXJlY3RvcnkubGVuKSB7Ci0gICAgICAgIGlmIChjaGRpcihjY2YtPndvcmtpbmdfZGlyZWN0b3J5LmRhdGEpID09IC0xKSB7CisgICAgICAgIGlmIChjaGRpcigoY2hhciAqKSBjY2YtPndvcmtpbmdfZGlyZWN0b3J5LmRhdGEpID09IC0xKSB7CiAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGN5Y2xlLT5sb2csIG5neF9lcnJubywKICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoZGlyKFwiJXNcIikgZmFpbGVkIiwgY2NmLT53b3JraW5nX2RpcmVjdG9yeS5kYXRhKTsKICAgICAgICAgICAgIC8qIGZhdGFsICovCg==