ZGlmZiAtLWdpdCBhL29zcGY2ZC9DaGFuZ2VMb2cgYi9vc3BmNmQvQ2hhbmdlTG9nCmluZGV4IDI3NTkzYjMuLjA0NGQxZmEgMTAwNjQ0Ci0tLSBhL29zcGY2ZC9DaGFuZ2VMb2cKKysrIGIvb3NwZjZkL0NoYW5nZUxvZwpAQCAtNDksNiArNDksMTUgQEAKIAkKIDIwMDQtMTAtMDYgIFlhc3VoaXJvIE9oYXJhICA8eWFzdUBzZmMud2lkZS5hZC5qcD4KIAorCSogb3NwZjZfc25tcC5jOiBhZGQgcGFydGlhbCBzdXBwb3J0IGZvciBTTk1QCisJKGkuZS4gb3NwZnYzQXJlYUxzZGJUYWJsZSkuCisJKiBPU1BGdjMtTUlCLnR4dDogTmV0LVNOTVAgdHJhbnNsYXRlIFVuc2lnbmVkMzIgcmFuZ2UKKwkoMC4uJ0ZGRkZGRkZGJ2gpIGluY29ycmVjdGx5IHRvICgwLi4tMSkuIFRob3NlIHBhcnRzIGZvcgorCVVuc2lnbmVkMzIgcmFuZ2UgYXJlIGNoYW5nZWQgdG8gKDAuLjQyOTQ5NjcyOTUpLgorCUFsc28sIGRvdWJ0ZnVsICdub3QtYWNjZXNzaWJsZSdzIGFyZSBjaGFuZ2VkIHRvIHJlYWQtb25seS4KKworMjAwNC0xMC0wNiAgWWFzdWhpcm8gT2hhcmEgIDx5YXN1QHNmYy53aWRlLmFkLmpwPgorCiAJKiBvc3BmNl9zbm1wLltjaF0sIE9TUEZWMy1NSUIudHh0OiBzdGFydCBzdXBwb3J0aW5nIFNOTVAuCiAJaXQgZm9sbG93cyBkcmFmdC1pZXRmLW9zcGYtb3NwZnYzLW1pYi0wOC50eHQsIGJ1dCBjaGFuZ2UKIAlPU1BGdjMgdHJlZSB0byB7ZXhwZXJpbWVudGFsIDEwMn0gYmFzZWQgb24KZGlmZiAtLWdpdCBhL29zcGY2ZC9PU1BGVjMtTUlCLnR4dCBiL29zcGY2ZC9PU1BGdjMtTUlCLnR4dApzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSBvc3BmNmQvT1NQRlYzLU1JQi50eHQKcmVuYW1lIHRvIG9zcGY2ZC9PU1BGdjMtTUlCLnR4dAppbmRleCBlZTY2Y2ZmLi44MGU2Y2IyIDEwMDY0NAotLS0gYS9vc3BmNmQvT1NQRlYzLU1JQi50eHQKKysrIGIvb3NwZjZkL09TUEZ2My1NSUIudHh0CkBAIC0xLDcgKzEsNyBAQAogT1NQRlYzLU1JQiBERUZJTklUSU9OUyA6Oj0gQkVHSU4gCiAgCiBJTVBPUlRTIAotICAgICAgICBNT0RVTEUtSURFTlRJVFksIE9CSkVDVC1UWVBFLCBtaWItMiwgCisgICAgICAgIE1PRFVMRS1JREVOVElUWSwgT0JKRUNULVRZUEUsIG1pYi0yLCBleHBlcmltZW50YWwsCiAgICAgICAgIENvdW50ZXIzMiwgR2F1Z2UzMiwgSW50ZWdlcjMyLCBJcEFkZHJlc3MsIAogICAgICAgICBVbnNpZ25lZDMyIAogICAgICAgICAgICAgICAgIEZST00gU05NUHYyLVNNSSAKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAgICAgIFJFVklTSU9OICIyMDA0MDQwODEyMDBaIiAKICAgICAgICAgIERFU0NSSVBUSU9OIC0tIFJGQyBFZGl0b3IgYXNzaWducyBSRkMgeHh4eCAKICAgICAgICAgICAgICAiSW5pdGlhbCB2ZXJzaW9uLCBwdWJsaXNoZWQgYXMgUkZDIHh4eHgiIAotICAgICAgICAgOjo9IHsgbWliLTIgeHggfSAtLSBJQU5BIGFzc2lnbnMgeHggCisgICAgICAgICA6Oj0geyBleHBlcmltZW50YWwgMTAyIH0gLS0gSUFOQSBhc3NpZ25zIHh4IAogIAogLS0gVGV4dWFsIGNvbnZlbnRpb25zIAogIApAQCAtNjIsNyArNjIsNyBAQAogICAgICAgICAgICAgIlRoZSByYW5nZSBvZiBpbnRlcnZhbHMgaW4gc2Vjb25kcyB0aGF0IGEgcm91dGVycyBoZWxsbyAKICAgICAgICAgICAgIG11c3QgaGF2ZSBub3QgYmVlbiBzZWVuIGJlZm9yZSBhIG5laWdoYm9yIGRlY2xhcmVzIHRoZSAKICAgICAgICAgICAgIHJvdXRlciBkb3duIiAKLSAgICAgICAgIFNZTlRBWCAgICAgICAgSW50ZWdlcjMyICgxLi7GRkZGRsZoKSAKKyAgICAgICAgIFNZTlRBWCAgICAgICAgSW50ZWdlcjMyICgxLi4nRkZGRidoKSAKIAogIAogLS0gVG9wLWxldmVsIHN0cnVjdHVyZSBvZiBNSUIgCkBAIC00MjAsNyArNDIwLDcgQEAKICAKIG9zcGZ2M0FyZWFJZCBPQkpFQ1QtVFlQRSAKICAgICAgICAgU1lOVEFYICAgICAgICAgIEFyZWFJRCAKLSAgICAgICAgTUFYLUFDQ0VTUyAgICAgIG5vdC1hY2Nlc3NpYmxlIAorICAgICAgICBNQVgtQUNDRVNTICAgICAgcmVhZC1vbmx5IAogICAgICAgICBTVEFUVVMgICAgICAgICAgY3VycmVudCAKICAgICAgICAgREVTQ1JJUFRJT04gCiAgICAgICAgICAgICAiQSAzMi1iaXQgaW50ZWdlciB1bmlxdWVseSBpZGVudGlmeWluZyBhbiBhcmVhLiAKQEAgLTY1NCw4ICs2NTQsOCBAQAogICAgICAgICB9IAogIAogb3NwZnYzQXNMc2RiVHlwZSBPQkpFQ1QtVFlQRSAKLSAgICAgICAgU1lOVEFYICAgICAgICAgIFVuc2lnbmVkMzIoMC4uJ0ZGRkZGRkZGJ2gpIAotICAgICAgICBNQVgtQUNDRVNTICAgICAgbm90LWFjY2Vzc2libGUgCisgICAgICAgIFNZTlRBWCAgICAgICAgICBVbnNpZ25lZDMyICgwLi40Mjk0OTY3Mjk1KQorICAgICAgICBNQVgtQUNDRVNTICAgICAgcmVhZC1vbmx5IAogICAgICAgICBTVEFUVVMgICAgICAgICAgY3VycmVudCAKICAgICAgICAgREVTQ1JJUFRJT04gCiAgICAgICAgICAgICAiVGhlIHR5cGUgb2YgdGhlIGxpbmsgc3RhdGUgYWR2ZXJ0aXNlbWVudC4gCkBAIC02NjYsNyArNjY2LDcgQEAKICAKIG9zcGZ2M0FzTHNkYlJvdXRlcklkIE9CSkVDVC1UWVBFIAogICAgICAgICBTWU5UQVggICAgICAgICAgUm91dGVySUQgCi0gICAgICAgIE1BWC1BQ0NFU1MgICAgICBub3QtYWNjZXNzaWJsZSAKKyAgICAgICAgTUFYLUFDQ0VTUyAgICAgIHJlYWQtb25seSAKICAgICAgICAgU1RBVFVTICAgICAgICAgIGN1cnJlbnQgCiAgICAgICAgIERFU0NSSVBUSU9OIAogICAgICAgICAgICAgIlRoZSAzMiBiaXQgbnVtYmVyIHRoYXQgdW5pcXVlbHkgaWRlbnRpZmllcyB0aGUgCkBAIC02NzcsNyArNjc3LDcgQEAKICAKIG9zcGZ2M0FzTHNkYkxzaWQgT0JKRUNULVRZUEUgCiAgICAgICAgIFNZTlRBWCAgICAgICAgICBJcEFkZHJlc3MgCi0gICAgICAgIE1BWC1BQ0NFU1MgICAgICBub3QtYWNjZXNzaWJsZSAKKyAgICAgICAgTUFYLUFDQ0VTUyAgICAgIHJlYWQtb25seSAKICAgICAgICAgU1RBVFVTICAgICAgICAgIGN1cnJlbnQgCiAgICAgICAgIERFU0NSSVBUSU9OIAogICAgICAgICAgICAgIlRoZSBMaW5rIFN0YXRlIElEIGlzIGFuIExTIFR5cGUgU3BlY2lmaWMgZmllbGQgCkBAIC04MDYsNyArODA2LDcgQEAKICAKIG9zcGZ2M0FyZWFMc2RiQXJlYUlkIE9CSkVDVC1UWVBFIAogICAgICAgICBTWU5UQVggICAgICAgICAgQXJlYUlEIAotICAgICAgICBNQVgtQUNDRVNTICAgICAgbm90LWFjY2Vzc2libGUgCisgICAgICAgIE1BWC1BQ0NFU1MgICAgICByZWFkLW9ubHkgCiAgICAgICAgIFNUQVRVUyAgICAgICAgICBjdXJyZW50IAogICAgICAgICBERVNDUklQVElPTiAKICAgICAgICAgICAgICJUaGUgMzIgYml0IGlkZW50aWZpZXIgb2YgdGhlIEFyZWEgZnJvbSB3aGljaCB0aGUgCkBAIC04MTYsOCArODE2LDggQEAKICAgICAgICAgOjo9IHsgb3NwZnYzQXJlYUxzZGJFbnRyeSAxIH0gCiAgCiBvc3BmdjNBcmVhTHNkYlR5cGUgT0JKRUNULVRZUEUgCi0gICAgICAgIFNZTlRBWCAgICAgICAgICBVbnNpZ25lZDMyKDAuLidGRkZGRkZGRidoKSAKLSAgICAgICAgTUFYLUFDQ0VTUyAgICAgIG5vdC1hY2Nlc3NpYmxlIAorICAgICAgICBTWU5UQVggICAgICAgICAgVW5zaWduZWQzMiAoMC4uNDI5NDk2NzI5NSkKKyAgICAgICAgTUFYLUFDQ0VTUyAgICAgIHJlYWQtb25seSAKICAgICAgICAgU1RBVFVTICAgICAgICAgIGN1cnJlbnQgCiAgICAgICAgIERFU0NSSVBUSU9OIAogICAgICAgICAgICAgIlRoZSB0eXBlICBvZiAgdGhlICBsaW5rICBzdGF0ZSAgYWR2ZXJ0aXNlbWVudC4gCkBAIC04MjgsNyArODI4LDcgQEAKICAKIG9zcGZ2M0FyZWFMc2RiUm91dGVySWQgT0JKRUNULVRZUEUgCiAgICAgICAgIFNZTlRBWCAgICAgICAgICBSb3V0ZXJJRCAKLSAgICAgICAgTUFYLUFDQ0VTUyAgICAgIG5vdC1hY2Nlc3NpYmxlIAorICAgICAgICBNQVgtQUNDRVNTICAgICAgcmVhZC1vbmx5IAogICAgICAgICBTVEFUVVMgICAgICAgICAgY3VycmVudCAKICAgICAgICAgREVTQ1JJUFRJT04gCiAgICAgICAgICAgICAiVGhlIDMyIGJpdCBudW1iZXIgdGhhdCB1bmlxdWVseSBpZGVudGlmaWVzIHRoZSAKQEAgLTgzOSw3ICs4MzksNyBAQAogIAogb3NwZnYzQXJlYUxzZGJMc2lkIE9CSkVDVC1UWVBFIAogICAgICAgICBTWU5UQVggICAgICAgICAgSXBBZGRyZXNzIAotICAgICAgICBNQVgtQUNDRVNTICAgICAgbm90LWFjY2Vzc2libGUgCisgICAgICAgIE1BWC1BQ0NFU1MgICAgICByZWFkLW9ubHkgCiAgICAgICAgIFNUQVRVUyAgICAgICAgICBjdXJyZW50IAogICAgICAgICBERVNDUklQVElPTiAKICAgICAgICAgICAgICJUaGUgTGluayBTdGF0ZSBJRCBpcyBhbiBMUyBUeXBlIFNwZWNpZmljIGZpZWxkIApAQCAtOTY3LDcgKzk2Nyw3IEBACiAgCiBvc3BmdjNMaW5rTHNkYklmSW5kZXggT0JKRUNULVRZUEUgCiAgICAgICAgIFNZTlRBWCAgICAgICAgIEludGVyZmFjZUluZGV4IAotICAgICAgICBNQVgtQUNDRVNTICAgICBub3QtYWNjZXNzaWJsZSAKKyAgICAgICAgTUFYLUFDQ0VTUyAgICAgcmVhZC1vbmx5IAogICAgICAgICBTVEFUVVMgICAgICAgICBjdXJyZW50IAogICAgICAgICBERVNDUklQVElPTiAKICAgICAgICAgICAgICJUaGUgaWRlbnRpZmllciBvZiB0aGUgbGluayBmcm9tIHdoaWNoIHRoZSBMU0EgCkBAIC05NzcsOCArOTc3LDggQEAKICAgICAgICAgOjo9IHsgb3NwZnYzTGlua0xzZGJFbnRyeSAxIH0gCiAgCiBvc3BmdjNMaW5rTHNkYlR5cGUgT0JKRUNULVRZUEUgCi0gICAgICAgIFNZTlRBWCAgICAgICAgICBVbnNpZ25lZDMyKDAuLidGRkZGRkZGRidoKSAKLSAgICAgICAgTUFYLUFDQ0VTUyAgICAgIG5vdC1hY2Nlc3NpYmxlIAorICAgICAgICBTWU5UQVggICAgICAgICAgVW5zaWduZWQzMiAoMC4uNDI5NDk2NzI5NSkKKyAgICAgICAgTUFYLUFDQ0VTUyAgICAgIHJlYWQtb25seSAKICAgICAgICAgU1RBVFVTICAgICAgICAgIGN1cnJlbnQgCiAgICAgICAgIERFU0NSSVBUSU9OIAogICAgICAgICAgICAgIlRoZSB0eXBlIG9mIHRoZSBsaW5rIHN0YXRlIGFkdmVydGlzZW1lbnQuIApAQCAtOTg5LDcgKzk4OSw3IEBACiAgCiBvc3BmdjNMaW5rTHNkYlJvdXRlcklkIE9CSkVDVC1UWVBFIAogICAgICAgICBTWU5UQVggICAgICAgICAgUm91dGVySUQgCi0gICAgICAgIE1BWC1BQ0NFU1MgICAgICBub3QtYWNjZXNzaWJsZSAKKyAgICAgICAgTUFYLUFDQ0VTUyAgICAgIHJlYWQtb25seSAKICAgICAgICAgU1RBVFVTICAgICAgICAgIGN1cnJlbnQgCiAgICAgICAgIERFU0NSSVBUSU9OIAogICAgICAgICAgICAgIlRoZSAzMiBiaXQgbnVtYmVyIHRoYXQgdW5pcXVlbHkgaWRlbnRpZmllcyB0aGUgCkBAIC0xMDAwLDcgKzEwMDAsNyBAQAogIAogb3NwZnYzTGlua0xzZGJMc2lkIE9CSkVDVC1UWVBFIAogICAgICAgICBTWU5UQVggICAgICAgIElwQWRkcmVzcyAKLSAgICAgICAgTUFYLUFDQ0VTUyAgICBub3QtYWNjZXNzaWJsZSAKKyAgICAgICAgTUFYLUFDQ0VTUyAgICByZWFkLW9ubHkgCiAgICAgICAgIFNUQVRVUyAgICAgICAgY3VycmVudCAKICAgICAgICAgREVTQ1JJUFRJT04gCiAgICAgICAgICAgICAiVGhlIExpbmsgU3RhdGUgSUQgaXMgYW4gTFMgVHlwZSBTcGVjaWZpYyBmaWVsZCAKQEAgLTExMjUsNyArMTEyNSw3IEBACiAgCiBvc3BmdjNIb3N0QWRkcmVzc1R5cGUgT0JKRUNULVRZUEUgCiAgICAgICAgIFNZTlRBWCAgICAgICAgICBJbmV0QWRkcmVzc1R5cGUgCi0gICAgICAgIE1BWC1BQ0NFU1MgICAgICBub3QtYWNjZXNzaWJsZSAKKyAgICAgICAgTUFYLUFDQ0VTUyAgICAgIHJlYWQtb25seSAKICAgICAgICAgU1RBVFVTICAgICAgICAgIGN1cnJlbnQgCiAgICAgICAgIERFU0NSSVBUSU9OIAogICAgICAgICAgICAgIlRoZSBhZGRyZXNzIHR5cGUgb2Ygb3NwZnYzSG9zdEFkZHJlc3MuIE9ubHkgSVB2NiAKQEAgLTExMzgsNyArMTEzOCw3IEBACiAgCiBvc3BmdjNIb3N0QWRkcmVzcyBPQkpFQ1QtVFlQRSAKICAgICAgICAgU1lOVEFYICAgICAgICAgIEluZXRBZGRyZXNzIChTSVpFICgxNikpIAotICAgICAgICBNQVgtQUNDRVNTICAgICAgbm90LWFjY2Vzc2libGUgCisgICAgICAgIE1BWC1BQ0NFU1MgICAgICByZWFkLW9ubHkgCiAgICAgICAgIFNUQVRVUyAgICAgICAgICBjdXJyZW50IAogICAgICAgICBERVNDUklQVElPTiAKICAgICAgICAgICAgICJUaGUgSVB2NiBBZGRyZXNzIG9mIHRoZSBIb3N0LiBNdXN0IGJlIGEgR2xvYmFsIApAQCAtMTI1OSw3ICsxMjU5LDcgQEAKICAKIG9zcGZ2M0lmSW5kZXggT0JKRUNULVRZUEUgCiAgICAgICAgIFNZTlRBWCAgICAgICAgICBJbnRlcmZhY2VJbmRleCAKLSAgICAgICAgTUFYLUFDQ0VTUyAgICAgIG5vdC1hY2Nlc3NpYmxlIAorICAgICAgICBNQVgtQUNDRVNTICAgICAgcmVhZC1vbmx5IAogICAgICAgICBTVEFUVVMgICAgICAgICAgY3VycmVudCAKICAgICAgICAgREVTQ1JJUFRJT04gCiAgICAgICAgICAgICAiVGhlIGludGVyZmFjZSBpbmRleCBvZiB0aGlzIE9TUEZ2MyBpbnRlcmZhY2UuIApAQCAtMTYwOCw3ICsxNjA4LDcgQEAKICAKIG9zcGZ2M1ZpcnRJZkFyZWFJZCBPQkpFQ1QtVFlQRSAKICAgICAgICAgU1lOVEFYICAgICAgICAgIEFyZWFJRCAKLSAgICAgICAgTUFYLUFDQ0VTUyAgICAgIG5vdC1hY2Nlc3NpYmxlIAorICAgICAgICBNQVgtQUNDRVNTICAgICAgcmVhZC1vbmx5IAogICAgICAgICBTVEFUVVMgICAgICAgICAgY3VycmVudCAKICAgICAgICAgREVTQ1JJUFRJT04gCiAgICAgICAgICAgICAiVGhlICBUcmFuc2l0ICBBcmVhICB0aGF0ICB0aGUgICBWaXJ0dWFsICAgTGluayAKQEAgLTE2MTcsNyArMTYxNyw3IEBACiAgCiBvc3BmdjNWaXJ0SWZOZWlnaGJvciBPQkpFQ1QtVFlQRSAKICAgICAgICAgU1lOVEFYICAgICAgICAgIFJvdXRlcklEIAotICAgICAgICBNQVgtQUNDRVNTICAgICAgbm90LWFjY2Vzc2libGUgCisgICAgICAgIE1BWC1BQ0NFU1MgICAgICByZWFkLW9ubHkgCiAgICAgICAgIFNUQVRVUyAgICAgICAgICBjdXJyZW50IAogICAgICAgICBERVNDUklQVElPTiAKICAgICAgICAgICAgICJUaGUgUm91dGVyIElEIG9mIHRoZSBWaXJ0dWFsIE5laWdoYm9yLiIgCkBAIC0xODA1LDcgKzE4MDUsNyBAQAogIAogb3NwZnYzTmJySWZJbmRleCBPQkpFQ1QtVFlQRSAKICAgICAgICAgU1lOVEFYICAgICAgICAgIEludGVyZmFjZUluZGV4IAotICAgICAgICBNQVgtQUNDRVNTICAgICAgbm90LWFjY2Vzc2libGUgCisgICAgICAgIE1BWC1BQ0NFU1MgICAgICByZWFkLW9ubHkgCiAgICAgICAgIFNUQVRVUyAgICAgICAgICBjdXJyZW50IAogICAgICAgICBERVNDUklQVElPTiAKICAgICAgICAgICAgICJUaGUgbG9jYWwgbGluayBJRCBvZiB0aGUgbGluayBvdmVyIHdoaWNoIHRoZSAKQEAgLTE4MTQsNyArMTgxNCw3IEBACiAgCiBvc3BmdjNOYnJSdHJJZCBPQkpFQ1QtVFlQRSAKICAgICAgICAgU1lOVEFYICAgICAgICAgIFJvdXRlcklEIAotICAgICAgICBNQVgtQUNDRVNTICAgICAgbm90LWFjY2Vzc2libGUgCisgICAgICAgIE1BWC1BQ0NFU1MgICAgICByZWFkLW9ubHkgCiAgICAgICAgIFNUQVRVUyAgICAgICAgICBjdXJyZW50IAogICAgICAgICBERVNDUklQVElPTiAKICAgICAgICAgICAgICJBIDMyLWJpdCBpbnRlZ2VyIChyZXByZXNlbnRlZCBhcyBhIHR5cGUgIElwQWQtIApAQCAtMjAxOCw3ICsyMDE4LDcgQEAKICAKIG9zcGZ2M05ibWFOYnJJZkluZGV4IE9CSkVDVC1UWVBFIAogICAgICAgICBTWU5UQVggICAgICAgICAgSW50ZXJmYWNlSW5kZXggCi0gICAgICAgIE1BWC1BQ0NFU1MgICAgICBub3QtYWNjZXNzaWJsZSAKKyAgICAgICAgTUFYLUFDQ0VTUyAgICAgIHJlYWQtb25seSAKICAgICAgICAgU1RBVFVTICAgICAgICAgIGN1cnJlbnQgCiAgICAgICAgIERFU0NSSVBUSU9OIAogICAgICAgICAgICAgIlRoZSBsb2NhbCBsaW5rIElEIG9mIHRoZSBsaW5rIG92ZXIgd2hpY2ggdGhlIApAQCAtMjAyNyw3ICsyMDI3LDcgQEAKICAKIG9zcGZ2M05ibWFOYnJBZGRyZXNzVHlwZSBPQkpFQ1QtVFlQRSAKICAgICAgICAgU1lOVEFYICAgICAgICAgIEluZXRBZGRyZXNzVHlwZSAKLSAgICAgICAgTUFYLUFDQ0VTUyAgICAgIG5vdC1hY2Nlc3NpYmxlIAorICAgICAgICBNQVgtQUNDRVNTICAgICAgcmVhZC1vbmx5IAogICAgICAgICBTVEFUVVMgICAgICAgICAgY3VycmVudCAKICAgICAgICAgREVTQ1JJUFRJT04gCiAgICAgICAgICAgICAiVGhlIGFkZHJlc3MgdHlwZSBvZiBvc3BmdjNOYnJBZGRyZXNzLiBPbmx5IElQdjYgCkBAIC0yMDM2LDcgKzIwMzYsNyBAQAogIAogb3NwZnYzTmJtYU5ickFkZHJlc3MgT0JKRUNULVRZUEUgCiAgICAgICAgIFNZTlRBWCAgICAgICAgICBJbmV0QWRkcmVzcyAoU0laRSAoMTYpKSAKLSAgICAgICAgTUFYLUFDQ0VTUyAgICAgIG5vdC1hY2Nlc3NpYmxlIAorICAgICAgICBNQVgtQUNDRVNTICAgICAgcmVhZC1vbmx5IAogICAgICAgICBTVEFUVVMgICAgICAgICAgY3VycmVudCAKICAgICAgICAgREVTQ1JJUFRJT04gCiAgICAgICAgICAgICAiVGhlIElQdjYgYWRkcmVzcyBvZiB0aGUgbmVpZ2hib3IgYXNzb2NpYXRlZCB3aXRoIApAQCAtMjE3Myw3ICsyMTczLDcgQEAKICAKIG9zcGZ2M1ZpcnROYnJBcmVhIE9CSkVDVC1UWVBFIAogICAgICAgICBTWU5UQVggICAgICAgICAgQXJlYUlEIAotICAgICAgICBNQVgtQUNDRVNTICAgICAgbm90LWFjY2Vzc2libGUgCisgICAgICAgIE1BWC1BQ0NFU1MgICAgICByZWFkLW9ubHkgCiAgICAgICAgIFNUQVRVUyAgICAgICAgICBjdXJyZW50IAogICAgICAgICBERVNDUklQVElPTiAKICAgICAgICAgICAgICJUaGUgVHJhbnNpdCBBcmVhIElkZW50aWZpZXIuIiAKQEAgLTIxODEsNyArMjE4MSw3IEBACiAgCiBvc3BmdjNWaXJ0TmJyUnRySWQgT0JKRUNULVRZUEUgCiAgICAgICAgIFNZTlRBWCAgICAgICAgICBSb3V0ZXJJRCAKLSAgICAgICAgTUFYLUFDQ0VTUyAgICAgIG5vdC1hY2Nlc3NpYmxlIAorICAgICAgICBNQVgtQUNDRVNTICAgICAgcmVhZC1vbmx5IAogICAgICAgICBTVEFUVVMgICAgICAgICAgY3VycmVudCAKICAgICAgICAgREVTQ1JJUFRJT04gCiAgICAgICAgICAgICAiQSAgMzItYml0ICBpbnRlZ2VyICB1bmlxdWVseSAgaWRlbnRpZnlpbmcgIHRoZSAKQEAgLTIzNzgsNyArMjM3OCw3IEBACiAgCiBvc3BmdjNBcmVhQWdncmVnYXRlQXJlYUlEIE9CSkVDVC1UWVBFIAogICAgICAgICBTWU5UQVggICAgICAgICAgQXJlYUlEIAotICAgICAgICBNQVgtQUNDRVNTICAgICAgbm90LWFjY2Vzc2libGUgCisgICAgICAgIE1BWC1BQ0NFU1MgICAgICByZWFkLW9ubHkgCiAgICAgICAgIFNUQVRVUyAgICAgICAgICBjdXJyZW50IAogICAgICAgICBERVNDUklQVElPTiAKICAgICAgICAgICAgICJUaGUgQXJlYSB0aGUgQWRkcmVzcyBBZ2dyZWdhdGUgaXMgdG8gYmUgIGZvdW5kIApAQCAtMjM5Miw3ICsyMzkyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyQXJlYVByZWZpeExzYSg4MTk1KSwgLS0gMHgyMDAzIAogICAgICAgICAgICAgICAgICAgICAgICAgbnNzYUV4dGVybmFsTHNhKDgxOTkpICAgICAtLSAweDIwMDcgCiAgICAgICAgICAgICAgICAgICAgICAgICB9IAotICAgICAgICBNQVgtQUNDRVNTICAgICAgbm90LWFjY2Vzc2libGUgCisgICAgICAgIE1BWC1BQ0NFU1MgICAgICByZWFkLW9ubHkgCiAgICAgICAgIFNUQVRVUyAgICAgICAgICBjdXJyZW50IAogICAgICAgICBERVNDUklQVElPTiAKICAgICAgICAgICAgICJUaGUgdHlwZSBvZiB0aGUgQWRkcmVzcyBBZ2dyZWdhdGUuICBUaGlzIGZpZWxkIApAQCAtMjQwNSw3ICsyNDA1LDcgQEAKICAKIG9zcGZ2M0FyZWFBZ2dyZWdhdGVQcmVmaXhUeXBlIE9CSkVDVC1UWVBFIAogICAgICAgICBTWU5UQVggICAgICAgICAgSW5ldEFkZHJlc3NUeXBlIAotICAgICAgICBNQVgtQUNDRVNTICAgICAgbm90LWFjY2Vzc2libGUgCisgICAgICAgIE1BWC1BQ0NFU1MgICAgICByZWFkLW9ubHkgCiAgICAgICAgIFNUQVRVUyAgICAgICAgICBjdXJyZW50IAogICAgICAgICBERVNDUklQVElPTiAKICAgICAgICAgICAgICJUaGUgcHJlZml4IHR5cGUgb2Ygb3NwZnYzQXJlYUFnZ3JlZ2F0ZVByZWZpeC4gT25seSAKQEAgLTI0MTQsNyArMjQxNCw3IEBACiAgCiBvc3BmdjNBcmVhQWdncmVnYXRlUHJlZml4IE9CSkVDVC1UWVBFIAogICAgICAgICBTWU5UQVggICAgICAgICAgSW5ldEFkZHJlc3MgKFNJWkUgKDAuLjE2KSkgCi0gICAgICAgIE1BWC1BQ0NFU1MgICAgICBub3QtYWNjZXNzaWJsZSAKKyAgICAgICAgTUFYLUFDQ0VTUyAgICAgIHJlYWQtb25seSAKICAgICAgICAgU1RBVFVTICAgICAgICAgIGN1cnJlbnQgCiAgICAgICAgIERFU0NSSVBUSU9OIAogICAgICAgICAgICAgIlRoZSBJUHY2IFByZWZpeC4iIApAQCAtMjQyNSw3ICsyNDI1LDcgQEAKIG9zcGZ2M0FyZWFBZ2dyZWdhdGVQcmVmaXhMZW5ndGggT0JKRUNULVRZUEUgCiAgICAgICAgIFNZTlRBWCAgICAgICAgICBJbmV0QWRkcmVzc1ByZWZpeExlbmd0aCAoMy4uMTI4KSAKICAgICAgICAgVU5JVFMgICAgICAgICAgICJiaXRzIiAKLSAgICAgICAgTUFYLUFDQ0VTUyAgICAgIG5vdC1hY2Nlc3NpYmxlIAorICAgICAgICBNQVgtQUNDRVNTICAgICAgcmVhZC1vbmx5IAogICAgICAgICBTVEFUVVMgICAgICAgICAgY3VycmVudCAKICAgICAgICAgREVTQ1JJUFRJT04gCiAgICAgICAgICAgICAiVGhlIGxlbmd0aCBvZiB0aGUgcHJlZml4IChpbiBiaXRzKS4gQSBwcmVmaXggY2FuIApkaWZmIC0tZ2l0IGEvb3NwZjZkL29zcGY2X2xzYS5jIGIvb3NwZjZkL29zcGY2X2xzYS5jCmluZGV4IDQ4Zjc5YWYuLjRkMzI4N2QgMTAwNjQ0Ci0tLSBhL29zcGY2ZC9vc3BmNl9sc2EuYworKysgYi9vc3BmNmQvb3NwZjZfbHNhLmMKQEAgLTk3LDYgKzk3LDkgQEAKICAgZWxzZQogICAgIGhhbmRsZXIgPSB2ZWN0b3Jfc2xvdCAob3NwZjZfbHNhX2hhbmRsZXJfdmVjdG9yLCBpbmRleCk7CiAKKyAgaWYgKGhhbmRsZXIgPT0gTlVMTCkKKyAgICBoYW5kbGVyID0gJnVua25vd25faGFuZGxlcjsKKwogICByZXR1cm4gaGFuZGxlcjsKIH0KIApkaWZmIC0tZ2l0IGEvb3NwZjZkL29zcGY2X2xzYS5oIGIvb3NwZjZkL29zcGY2X2xzYS5oCmluZGV4IGMyM2Q2ZjcuLjAxNGQ0MjMgMTAwNjQ0Ci0tLSBhL29zcGY2ZC9vc3BmNl9sc2EuaAorKysgYi9vc3BmNmQvb3NwZjZfbHNhLmgKQEAgLTE0OCw2ICsxNDgsMTAgQEAKICAgdV9jaGFyIGRlYnVnOwogfTsKIAorZXh0ZXJuIHN0cnVjdCBvc3BmNl9sc2FfaGFuZGxlciB1bmtub3duX2hhbmRsZXI7CisjZGVmaW5lIE9TUEY2X0xTQV9JU19LTk9XTih0eXBlKSBcCisgIChvc3BmNl9nZXRfbHNhX2hhbmRsZXIgKHR5cGUpICE9ICZ1bmtub3duX2hhbmRsZXIgPyAxIDogMCkKKwogLyogTWFjcm8gZm9yIExTQSBPcmlnaW5hdGlvbiAqLwogLyogYWRkciBpcyAoc3RydWN0IHByZWZpeCAqKSAqLwogI2RlZmluZSBDT05USU5VRV9JRl9BRERSRVNTX0xJTktMT0NBTChkZWJ1ZyxhZGRyKSAgICAgIFwKQEAgLTIzNiw2ICsyNDAsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludDMyX3QgYWR2X3JvdXRlciwgdm9pZCAqc2NvcGUpOwogCiB2b2lkIG9zcGY2X2luc3RhbGxfbHNhX2hhbmRsZXIgKHN0cnVjdCBvc3BmNl9sc2FfaGFuZGxlciAqaGFuZGxlcik7CitzdHJ1Y3Qgb3NwZjZfbHNhX2hhbmRsZXIgKm9zcGY2X2dldF9sc2FfaGFuZGxlciAodV9pbnQxNl90IHR5cGUpOworCiB2b2lkIG9zcGY2X2xzYV9pbml0ICgpOwogdm9pZCBvc3BmNl9sc2FfY21kX2luaXQgKCk7CiAKZGlmZiAtLWdpdCBhL29zcGY2ZC9vc3BmNl9sc2RiLmMgYi9vc3BmNmQvb3NwZjZfbHNkYi5jCmluZGV4IGQyMGU5YTEuLmFhZDZjZmMgMTAwNjQ0Ci0tLSBhL29zcGY2ZC9vc3BmNl9sc2RiLmMKKysrIGIvb3NwZjZkL29zcGY2X2xzZGIuYwpAQCAtMjU4LDYgKzI1OCw4MSBAQAogICByZXR1cm4gKHN0cnVjdCBvc3BmNl9sc2EgKikgbm9kZS0+aW5mbzsKIH0KIAorLyogTWFjcm8gdmVyc2lvbiBvZiBjaGVja19iaXQgKCkuICovCisjZGVmaW5lIENIRUNLX0JJVChYLFApICgoKCh1X2NoYXIgKikoWCkpWyhQKSAvIDhdKSA+PiAoNyAtICgoUCkgJSA4KSkgJiAxKQorCitzdHJ1Y3Qgb3NwZjZfbHNhICoKK29zcGY2X2xzZGJfbG9va3VwX25leHQgKHVfaW50MTZfdCB0eXBlLCB1X2ludDMyX3QgaWQsIHVfaW50MzJfdCBhZHZfcm91dGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG9zcGY2X2xzZGIgKmxzZGIpCit7CisgIHN0cnVjdCByb3V0ZV9ub2RlICpub2RlOworICBzdHJ1Y3Qgcm91dGVfbm9kZSAqbWF0Y2hlZCA9IE5VTEw7CisgIHN0cnVjdCBwcmVmaXhfaXB2NiBrZXk7CisgIHN0cnVjdCBwcmVmaXggKnA7CisKKyAgaWYgKGxzZGIgPT0gTlVMTCkKKyAgICByZXR1cm4gTlVMTDsKKworICBtZW1zZXQgKCZrZXksIDAsIHNpemVvZiAoa2V5KSk7CisgIG9zcGY2X2xzZGJfc2V0X2tleSAoJmtleSwgJnR5cGUsIHNpemVvZiAodHlwZSkpOworICBvc3BmNl9sc2RiX3NldF9rZXkgKCZrZXksICZhZHZfcm91dGVyLCBzaXplb2YgKGFkdl9yb3V0ZXIpKTsKKyAgb3NwZjZfbHNkYl9zZXRfa2V5ICgma2V5LCAmaWQsIHNpemVvZiAoaWQpKTsKKyAgcCA9IChzdHJ1Y3QgcHJlZml4ICopICZrZXk7CisKKyAgeworICAgIGNoYXIgYnVmWzY0XTsKKyAgICBwcmVmaXgyc3RyIChwLCBidWYsIHNpemVvZiAoYnVmKSk7CisgICAgemxvZ19pbmZvICgibHNkYl9sb29rdXBfbmV4dDoga2V5OiAlcyIsIGJ1Zik7CisgIH0KKworICBub2RlID0gbHNkYi0+dGFibGUtPnRvcDsKKyAgLyogd2FsayBkb3duIHRyZWUuICovCisgIHdoaWxlIChub2RlICYmIG5vZGUtPnAucHJlZml4bGVuIDw9IHAtPnByZWZpeGxlbiAmJgorICAgICAgICAgcHJlZml4X21hdGNoICgmbm9kZS0+cCwgcCkpCisgICAgeworICAgICAgbWF0Y2hlZCA9IG5vZGU7CisgICAgICBub2RlID0gbm9kZS0+bGlua1tDSEVDS19CSVQoJnAtPnUucHJlZml4LCBub2RlLT5wLnByZWZpeGxlbildOworICAgIH0KKworICBpZiAobWF0Y2hlZCkKKyAgICBub2RlID0gbWF0Y2hlZDsKKyAgZWxzZQorICAgIG5vZGUgPSBsc2RiLT50YWJsZS0+dG9wOworICByb3V0ZV9sb2NrX25vZGUgKG5vZGUpOworCisgIC8qIHNraXAgdG8gcmVhbCBleGlzdGluZyBlbnRyeSAqLworICB3aGlsZSAobm9kZSAmJiBub2RlLT5pbmZvID09IE5VTEwpCisgICAgbm9kZSA9IHJvdXRlX25leHQgKG5vZGUpOworCisgIGlmICghIG5vZGUpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgaWYgKHByZWZpeF9zYW1lICgmbm9kZS0+cCwgcCkpCisgICAgeworICAgICAgc3RydWN0IHJvdXRlX25vZGUgKnByZXYgPSBub2RlOworICAgICAgc3RydWN0IG9zcGY2X2xzYSAqbHNhX3ByZXY7CisgICAgICBzdHJ1Y3Qgb3NwZjZfbHNhICpsc2FfbmV4dDsKKworICAgICAgbm9kZSA9IHJvdXRlX25leHQgKG5vZGUpOworICAgICAgd2hpbGUgKG5vZGUgJiYgbm9kZS0+aW5mbyA9PSBOVUxMKQorICAgICAgICBub2RlID0gcm91dGVfbmV4dCAobm9kZSk7CisKKyAgICAgIGxzYV9wcmV2ID0gcHJldi0+aW5mbzsKKyAgICAgIGxzYV9uZXh0ID0gKG5vZGUgPyBub2RlLT5pbmZvIDogTlVMTCk7CisgICAgICBhc3NlcnQgKGxzYV9wcmV2KTsKKyAgICAgIGFzc2VydCAobHNhX3ByZXYtPm5leHQgPT0gbHNhX25leHQpOworICAgICAgaWYgKGxzYV9uZXh0KQorICAgICAgICBhc3NlcnQgKGxzYV9uZXh0LT5wcmV2ID09IGxzYV9wcmV2KTsKKyAgICAgIHpsb2dfaW5mbyAoImxzZGJfbG9va3VwX25leHQ6IGFzc2VydCBPSyB3aXRoIHByZXZpb3VzIExTQSIpOworICAgIH0KKworICBpZiAoISBub2RlKQorICAgIHJldHVybiBOVUxMOworCisgIHJvdXRlX3VubG9ja19ub2RlIChub2RlKTsKKyAgcmV0dXJuIChzdHJ1Y3Qgb3NwZjZfbHNhICopIG5vZGUtPmluZm87Cit9CisKIC8qIEl0ZXJhdGlvbiBmdW5jdGlvbiAqLwogc3RydWN0IG9zcGY2X2xzYSAqCiBvc3BmNl9sc2RiX2hlYWQgKHN0cnVjdCBvc3BmNl9sc2RiICpsc2RiKQpAQCAtMjkyLDkgKzM2Nyw2IEBACiAgIHJldHVybiBuZXh0OwogfQogCi0vKiBNYWNybyB2ZXJzaW9uIG9mIGNoZWNrX2JpdCAoKS4gKi8KLSNkZWZpbmUgQ0hFQ0tfQklUKFgsUCkgKCgoKHVfY2hhciAqKShYKSlbKFApIC8gOF0pID4+ICg3IC0gKChQKSAlIDgpKSAmIDEpCi0KIHN0cnVjdCBvc3BmNl9sc2EgKgogb3NwZjZfbHNkYl90eXBlX3JvdXRlcl9oZWFkICh1X2ludDE2X3QgdHlwZSwgdV9pbnQzMl90IGFkdl9yb3V0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBvc3BmNl9sc2RiICpsc2RiKQpkaWZmIC0tZ2l0IGEvb3NwZjZkL29zcGY2X2xzZGIuaCBiL29zcGY2ZC9vc3BmNl9sc2RiLmgKaW5kZXggZDMyZjc4ZC4uNjMzMGI5MSAxMDA2NDQKLS0tIGEvb3NwZjZkL29zcGY2X2xzZGIuaAorKysgYi9vc3BmNmQvb3NwZjZfbHNkYi5oCkBAIC01Myw5ICs1MywxMiBAQAogc3RydWN0IG9zcGY2X2xzZGIgKm9zcGY2X2xzZGJfY3JlYXRlICh2b2lkICpkYXRhKTsKIHZvaWQgb3NwZjZfbHNkYl9kZWxldGUgKHN0cnVjdCBvc3BmNl9sc2RiICpsc2RiKTsKIAotc3RydWN0IG9zcGY2X2xzYSAqb3NwZjZfbHNkYl9sb29rdXAgKHVfaW50MTZfdCB0eXBlLCB1X2ludDMyX3QgaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQzMl90IGFkdl9yb3V0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG9zcGY2X2xzZGIgKmxzZGIpOworc3RydWN0IG9zcGY2X2xzYSAqCitvc3BmNl9sc2RiX2xvb2t1cCAodV9pbnQxNl90IHR5cGUsIHVfaW50MzJfdCBpZCwgdV9pbnQzMl90IGFkdl9yb3V0ZXIsCisgICAgICAgICAgICAgICAgICAgc3RydWN0IG9zcGY2X2xzZGIgKmxzZGIpOworc3RydWN0IG9zcGY2X2xzYSAqCitvc3BmNl9sc2RiX2xvb2t1cF9uZXh0ICh1X2ludDE2X3QgdHlwZSwgdV9pbnQzMl90IGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQzMl90IGFkdl9yb3V0ZXIsIHN0cnVjdCBvc3BmNl9sc2RiICpsc2RiKTsKIAogdm9pZCBvc3BmNl9sc2RiX2FkZCAoc3RydWN0IG9zcGY2X2xzYSAqbHNhLCBzdHJ1Y3Qgb3NwZjZfbHNkYiAqbHNkYik7CiB2b2lkIG9zcGY2X2xzZGJfcmVtb3ZlIChzdHJ1Y3Qgb3NwZjZfbHNhICpsc2EsIHN0cnVjdCBvc3BmNl9sc2RiICpsc2RiKTsKZGlmZiAtLWdpdCBhL29zcGY2ZC9vc3BmNl9zbm1wLmMgYi9vc3BmNmQvb3NwZjZfc25tcC5jCmluZGV4IGVkYzhiYzQuLmFlODhhOWYgMTAwNjQ0Ci0tLSBhL29zcGY2ZC9vc3BmNl9zbm1wLmMKKysrIGIvb3NwZjZkL29zcGY2X3NubXAuYwpAQCAtNzYsNiArNzYsMzAgQEAKIC8qIE9TUEZ2MyBNSUIgQXJlYSBUYWJsZSB2YWx1ZXMuICovCiAjZGVmaW5lIE9TUEZ2M0FSRUFJRCAgICAgICAgICAgICAgICAgICAgIDEKICNkZWZpbmUgT1NQRnYzSU1QT1JUQVNFWFRFUk4gICAgICAgICAgICAgMgorI2RlZmluZSBPU1BGdjNBUkVBU1BGUlVOUyAgICAgICAgICAgICAgICAzCisjZGVmaW5lIE9TUEZ2M0FSRUFCRFJSVFJDT1VOVCAgICAgICAgICAgIDQKKyNkZWZpbmUgT1NQRnYzQVJFQUFTQkRSUlRSQ09VTlQgICAgICAgICAgNQorI2RlZmluZSBPU1BGdjNBUkVBU0NPUEVMU0FDT1VOVCAgICAgICAgICA2CisjZGVmaW5lIE9TUEZ2M0FSRUFTQ09QRUxTQUNLU1VNU1VNICAgICAgIDcKKyNkZWZpbmUgT1NQRnYzQVJFQVNVTU1BUlkgICAgICAgICAgICAgICAgOAorI2RlZmluZSBPU1BGdjNBUkVBU1RBVFVTICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIE9TUEZ2M1NUVUJNRVRSSUMgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgT1NQRnYzQVJFQU5TU0FUUkFOU0xBVE9SUk9MRSAgICAxMQorI2RlZmluZSBPU1BGdjNBUkVBTlNTQVRSQU5TTEFUT1JTVEFURSAgIDEyCisjZGVmaW5lIE9TUEZ2M0FSRUFOU1NBVFJBTlNMQVRPUlNUQUJJTElUWUlOVEVSVkFMICAgIDEzCisjZGVmaW5lIE9TUEZ2M0FSRUFOU1NBVFJBTlNMQVRPUkVWRU5UUyAgMTQKKyNkZWZpbmUgT1NQRnYzQVJFQVNUVUJNRVRSSUNUWVBFICAgICAgICAxNQorCisvKiBPU1BGdjMgTUlCIEFyZWEgTHNkYiBUYWJsZSB2YWx1ZXMuICovCisjZGVmaW5lIE9TUEZ2M0FSRUFMU0RCQVJFQUlEICAgICAgICAgICAgIDEKKyNkZWZpbmUgT1NQRnYzQVJFQUxTREJUWVBFICAgICAgICAgICAgICAgMgorI2RlZmluZSBPU1BGdjNBUkVBTFNEQlJPVVRFUklEICAgICAgICAgICAzCisjZGVmaW5lIE9TUEZ2M0FSRUFMU0RCTFNJRCAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgT1NQRnYzQVJFQUxTREJTRVFVRU5DRSAgICAgICAgICAgNQorI2RlZmluZSBPU1BGdjNBUkVBTFNEQkFHRSAgICAgICAgICAgICAgICA2CisjZGVmaW5lIE9TUEZ2M0FSRUFMU0RCQ0hFQ0tTVU0gICAgICAgICAgIDcKKyNkZWZpbmUgT1NQRnYzQVJFQUxTREJBRFZFUlRJU0VNRU5UICAgICAgOAorI2RlZmluZSBPU1BGdjNBUkVBTFNEQlRZUEVLTk9XTiAgICAgICAgICA5CiAKIC8qIFNZTlRBWCBTdGF0dXMgZnJvbSBPU1BGLU1JQi4gKi8KICNkZWZpbmUgT1NQRl9TVEFUVVNfRU5BQkxFRCAgMQpAQCAtMTA1LDYgKzEyOSw3IEBACiAvKiBIb29rIGZ1bmN0aW9ucy4gKi8KIHN0YXRpYyB1X2NoYXIgKm9zcGZ2M0dlbmVyYWxHcm91cCAoKTsKIHN0YXRpYyB1X2NoYXIgKm9zcGZ2M0FyZWFFbnRyeSAoKTsKK3N0YXRpYyB1X2NoYXIgKm9zcGZ2M0FyZWFMc2RiRW50cnkgKCk7CiAKIHN0cnVjdCB2YXJpYWJsZSBvc3BmdjNfdmFyaWFibGVzW10gPQogewpAQCAtMTU1LDggKzE4MCw1NCBAQAogICAvKiBPU1BGdjMgQXJlYSBEYXRhIFN0cnVjdHVyZSAqLwogICB7T1NQRnYzQVJFQUlELCAgICAgICAgICAgICAgICBJUEFERFJFU1MsIFJPTkxZLCAgb3NwZnYzQXJlYUVudHJ5LAogICAgNCwgezEsIDIsIDEsIDF9fSwKLSAge09TUEZ2M0lNUE9SVEFTRVhURVJOLCAgICAgICAgSU5URUdFUiwgICBST05MWSwgIG9zcGZ2M0FyZWFFbnRyeSwKKyAge09TUEZ2M0lNUE9SVEFTRVhURVJOLCAgICAgICAgSU5URUdFUiwgICBSV1JJVEUsIG9zcGZ2M0FyZWFFbnRyeSwKICAgIDQsIHsxLCAyLCAxLCAyfX0sCisgIHtPU1BGdjNBUkVBU1BGUlVOUywgICAgICAgICAgIENPVU5URVIsICAgUk9OTFksICBvc3BmdjNBcmVhRW50cnksCisgICA0LCB7MSwgMiwgMSwgM319LAorICB7T1NQRnYzQVJFQUJEUlJUUkNPVU5ULCAgICAgICBHQVVHRSwgICAgIFJPTkxZLCAgb3NwZnYzQXJlYUVudHJ5LAorICAgNCwgezEsIDIsIDEsIDR9fSwKKyAge09TUEZ2M0FSRUFBU0JEUlJUUkNPVU5ULCAgICAgR0FVR0UsICAgICBST05MWSwgIG9zcGZ2M0FyZWFFbnRyeSwKKyAgIDQsIHsxLCAyLCAxLCA1fX0sCisgIHtPU1BGdjNBUkVBU0NPUEVMU0FDT1VOVCwgICAgIEdBVUdFLCAgICAgUk9OTFksICBvc3BmdjNBcmVhRW50cnksCisgICA0LCB7MSwgMiwgMSwgNn19LAorICB7T1NQRnYzQVJFQVNDT1BFTFNBQ0tTVU1TVU0sICBJTlRFR0VSLCAgIFJPTkxZLCAgb3NwZnYzQXJlYUVudHJ5LAorICAgNCwgezEsIDIsIDEsIDd9fSwKKyAge09TUEZ2M0FSRUFTVU1NQVJZLCAgICAgICAgICAgSU5URUdFUiwgICBSV1JJVEUsIG9zcGZ2M0FyZWFFbnRyeSwKKyAgIDQsIHsxLCAyLCAxLCA4fX0sCisgIHtPU1BGdjNBUkVBU1RBVFVTLCAgICAgICAgICAgIElOVEVHRVIsICAgUldSSVRFLCBvc3BmdjNBcmVhRW50cnksCisgICA0LCB7MSwgMiwgMSwgOX19LAorICB7T1NQRnYzU1RVQk1FVFJJQywgICAgICAgICAgICBJTlRFR0VSLCAgIFJXUklURSwgb3NwZnYzQXJlYUVudHJ5LAorICAgNCwgezEsIDIsIDEsIDEwfX0sCisgIHtPU1BGdjNBUkVBTlNTQVRSQU5TTEFUT1JST0xFLCBJTlRFR0VSLCAgUldSSVRFLCBvc3BmdjNBcmVhRW50cnksCisgICA0LCB7MSwgMiwgMSwgMTF9fSwKKyAge09TUEZ2M0FSRUFOU1NBVFJBTlNMQVRPUlNUQVRFLCBJTlRFR0VSLCBST05MWSwgIG9zcGZ2M0FyZWFFbnRyeSwKKyAgIDQsIHsxLCAyLCAxLCAxMn19LAorICB7T1NQRnYzQVJFQU5TU0FUUkFOU0xBVE9SU1RBQklMSVRZSU5URVJWQUwsIElOVEVHRVIsIFJXUklURSwgb3NwZnYzQXJlYUVudHJ5LAorICAgNCwgezEsIDIsIDEsIDEzfX0sCisgIHtPU1BGdjNBUkVBTlNTQVRSQU5TTEFUT1JFVkVOVFMsIENPVU5URVIsIFJPTkxZLCBvc3BmdjNBcmVhRW50cnksCisgICA0LCB7MSwgMiwgMSwgMTR9fSwKKyAge09TUEZ2M0FSRUFTVFVCTUVUUklDVFlQRSwgICAgSU5URUdFUiwgUldSSVRFLCBvc3BmdjNBcmVhRW50cnksCisgICA0LCB7MSwgMiwgMSwgMTV9fSwKKworICB7T1NQRnYzQVJFQUxTREJBUkVBSUQsICAgICAgICBJUEFERFJFU1MsIFJPTkxZLCAgb3NwZnYzQXJlYUxzZGJFbnRyeSwKKyAgIDQsIHsxLCA0LCAxLCAxfX0sCisgIHtPU1BGdjNBUkVBTFNEQlRZUEUsICAgICAgICAgIEdBVUdFLCAgICAgUk9OTFksICBvc3BmdjNBcmVhTHNkYkVudHJ5LAorICAgNCwgezEsIDQsIDEsIDJ9fSwKKyAge09TUEZ2M0FSRUFMU0RCUk9VVEVSSUQsICAgICAgSVBBRERSRVNTLCBST05MWSwgIG9zcGZ2M0FyZWFMc2RiRW50cnksCisgICA0LCB7MSwgNCwgMSwgM319LAorICB7T1NQRnYzQVJFQUxTREJMU0lELCAgICAgICAgICBJUEFERFJFU1MsIFJPTkxZLCAgb3NwZnYzQXJlYUxzZGJFbnRyeSwKKyAgIDQsIHsxLCA0LCAxLCA0fX0sCisgIHtPU1BGdjNBUkVBTFNEQlNFUVVFTkNFLCAgICAgIElOVEVHRVIsICAgUk9OTFksICBvc3BmdjNBcmVhTHNkYkVudHJ5LAorICAgNCwgezEsIDQsIDEsIDV9fSwKKyAge09TUEZ2M0FSRUFMU0RCQUdFLCAgICAgICAgICAgSU5URUdFUiwgICBST05MWSwgIG9zcGZ2M0FyZWFMc2RiRW50cnksCisgICA0LCB7MSwgNCwgMSwgNn19LAorICB7T1NQRnYzQVJFQUxTREJDSEVDS1NVTSwgICAgICBJTlRFR0VSLCAgIFJPTkxZLCAgb3NwZnYzQXJlYUxzZGJFbnRyeSwKKyAgIDQsIHsxLCA0LCAxLCA3fX0sCisgIHtPU1BGdjNBUkVBTFNEQkFEVkVSVElTRU1FTlQsIFNUUklORywgICAgUk9OTFksICBvc3BmdjNBcmVhTHNkYkVudHJ5LAorICAgNCwgezEsIDQsIDEsIDh9fSwKKyAge09TUEZ2M0FSRUFMU0RCVFlQRUtOT1dOLCAgICAgSU5URUdFUiwgICBST05MWSwgIG9zcGZ2M0FyZWFMc2RiRW50cnksCisgICA0LCB7MSwgNCwgMSwgOX19LAorCiB9OwogCiBzdGF0aWMgdV9jaGFyICoKQEAgLTI4Nyw2ICszNTgsMTY5IEBACiAgIHJldHVybiBOVUxMOwogfQogCitzdGF0aWMgdV9jaGFyICoKK29zcGZ2M0FyZWFMc2RiRW50cnkgKHN0cnVjdCB2YXJpYWJsZSAqdiwgb2lkICpuYW1lLCBzaXplX3QgKmxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgIGludCBleGFjdCwgc2l6ZV90ICp2YXJfbGVuLCBXcml0ZU1ldGhvZCAqKndyaXRlX21ldGhvZCkKK3sKKyAgc3RydWN0IG9zcGY2X2xzYSAqbHNhID0gTlVMTDsKKyAgc3RydWN0IGluX2FkZHIgYXJlYV9pZDsKKyAgdV9pbnQxNl90IHR5cGU7CisgIHN0cnVjdCBpbl9hZGRyIGlkOworICBzdHJ1Y3QgaW5fYWRkciBhZHZfcm91dGVyOworICBpbnQgbGVuOworICBvaWQgKm9mZnNldDsKKyAgaW50IG9mZnNldGxlbjsKKyAgY2hhciBhWzE2XSwgYlsxNl0sIGNbMTZdOworICBzdHJ1Y3Qgb3NwZjZfYXJlYSAqb2E7CisgIGxpc3Rub2RlIG5vZGU7CisKKyAgbWVtc2V0ICgmYXJlYV9pZCwgMCwgc2l6ZW9mIChzdHJ1Y3QgaW5fYWRkcikpOworICB0eXBlID0gMDsKKyAgbWVtc2V0ICgmaWQsIDAsIHNpemVvZiAoc3RydWN0IGluX2FkZHIpKTsKKyAgbWVtc2V0ICgmYWR2X3JvdXRlciwgMCwgc2l6ZW9mIChzdHJ1Y3QgaW5fYWRkcikpOworCisgIC8qIENoZWNrIE9TUEZ2MyBpbnN0YW5jZS4gKi8KKyAgaWYgKG9zcGY2ID09IE5VTEwpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgLyogR2V0IHZhcmlhYmxlIGxlbmd0aC4gKi8KKyAgb2Zmc2V0ID0gbmFtZSArIHYtPm5hbWVsZW47CisgIG9mZnNldGxlbiA9ICpsZW5ndGggLSB2LT5uYW1lbGVuOworCisjZGVmaW5lIE9TUEZWM19BUkVBX0xTREJfRU5UUllfRVhBQ1RfT0ZGU0VUIFwKKyAgKElOX0FERFJfU0laRSArIDEgKyBJTl9BRERSX1NJWkUgKyBJTl9BRERSX1NJWkUpCisKKyAgaWYgKGV4YWN0ICYmIG9mZnNldGxlbiAhPSBPU1BGVjNfQVJFQV9MU0RCX0VOVFJZX0VYQUNUX09GRlNFVCkKKyAgICByZXR1cm4gTlVMTDsKKworICAvKiBQYXJzZSBhcmVhLWlkICovCisgIGxlbiA9IChvZmZzZXRsZW4gPCBJTl9BRERSX1NJWkUgPyBvZmZzZXRsZW4gOiBJTl9BRERSX1NJWkUpOworICBpZiAobGVuKQorICAgIG9pZDJpbl9hZGRyIChvZmZzZXQsIGxlbiwgJmFyZWFfaWQpOworICBvZmZzZXQgKz0gbGVuOworICBvZmZzZXRsZW4gLT0gbGVuOworCisgIC8qIFBhcnNlIHR5cGUgKi8KKyAgbGVuID0gKG9mZnNldGxlbiA8IDEgPyBvZmZzZXRsZW4gOiAxKTsKKyAgaWYgKGxlbikKKyAgICB0eXBlID0gaHRvbnMgKCpvZmZzZXQpOworICBvZmZzZXQgKz0gbGVuOworICBvZmZzZXRsZW4gLT0gbGVuOworCisgIC8qIFBhcnNlIFJvdXRlci1JRCAqLworICBsZW4gPSAob2Zmc2V0bGVuIDwgSU5fQUREUl9TSVpFID8gb2Zmc2V0bGVuIDogSU5fQUREUl9TSVpFKTsKKyAgaWYgKGxlbikKKyAgICBvaWQyaW5fYWRkciAob2Zmc2V0LCBsZW4sICZhZHZfcm91dGVyKTsKKyAgb2Zmc2V0ICs9IGxlbjsKKyAgb2Zmc2V0bGVuIC09IGxlbjsKKworICAvKiBQYXJzZSBMUy1JRCAqLworICBsZW4gPSAob2Zmc2V0bGVuIDwgSU5fQUREUl9TSVpFID8gb2Zmc2V0bGVuIDogSU5fQUREUl9TSVpFKTsKKyAgaWYgKGxlbikKKyAgICBvaWQyaW5fYWRkciAob2Zmc2V0LCBsZW4sICZpZCk7CisgIG9mZnNldCArPSBsZW47CisgIG9mZnNldGxlbiAtPSBsZW47CisKKyAgaW5ldF9udG9wIChBRl9JTkVULCAmYXJlYV9pZCwgYSwgc2l6ZW9mIChhKSk7CisgIGluZXRfbnRvcCAoQUZfSU5FVCwgJmFkdl9yb3V0ZXIsIGIsIHNpemVvZiAoYikpOworICBpbmV0X250b3AgKEFGX0lORVQsICZpZCwgYywgc2l6ZW9mIChjKSk7CisgIHpsb2dfaW5mbyAoIlNOTVAgYWNjZXNzIGJ5IGxzZGI6IGFyZWE9JXMgZXhhY3Q9JWQgbGVuZ3RoPSVkIG1hZ2ljPSVkIgorICAgICAgICAgICAgICIgdHlwZT0lI3ggYWR2X3JvdXRlcj0lcyBpZD0lcyIsCisgICAgICAgICAgICAgYSwgZXhhY3QsICpsZW5ndGgsIHYtPm1hZ2ljLCBudG9ocyAodHlwZSksIGIsIGMpOworCisgIGlmIChleGFjdCkKKyAgICB7CisgICAgICBvYSA9IG9zcGY2X2FyZWFfbG9va3VwIChhcmVhX2lkLnNfYWRkciwgb3NwZjYpOworICAgICAgbHNhID0gb3NwZjZfbHNkYl9sb29rdXAgKHR5cGUsIGlkLnNfYWRkciwgYWR2X3JvdXRlci5zX2FkZHIsIG9hLT5sc2RiKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBmb3IgKG5vZGUgPSBsaXN0aGVhZCAob3NwZjYtPmFyZWFfbGlzdCk7IG5vZGU7IG5leHRub2RlIChub2RlKSkKKyAgICAgICAgeworICAgICAgICAgIG9hID0gKHN0cnVjdCBvc3BmNl9hcmVhICopIGdldGRhdGEgKG5vZGUpOworCisgICAgICAgICAgaWYgKGxzYSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIGlmIChudG9obCAob2EtPmFyZWFfaWQpIDwgbnRvaGwgKGFyZWFfaWQuc19hZGRyKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgbHNhID0gb3NwZjZfbHNkYl9sb29rdXBfbmV4dCAodHlwZSwgaWQuc19hZGRyLCBhZHZfcm91dGVyLnNfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYS0+bHNkYik7CisgICAgICAgICAgaWYgKCEgbHNhKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB0eXBlID0gMDsKKyAgICAgICAgICAgICAgbWVtc2V0ICgmaWQsIDAsIHNpemVvZiAoc3RydWN0IGluX2FkZHIpKTsKKyAgICAgICAgICAgICAgbWVtc2V0ICgmYWR2X3JvdXRlciwgMCwgc2l6ZW9mIChzdHJ1Y3QgaW5fYWRkcikpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgIGlmICghIGxzYSkKKyAgICB7CisgICAgICB6bG9nX2luZm8gKCJTTk1QIHJlc3BvbmQ6IE5vIExTQSB0byByZXR1cm4iKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgb2EgPSBPU1BGNl9BUkVBIChsc2EtPmxzZGItPmRhdGEpOworCisgIHpsb2dfaW5mbyAoIlNOTVAgcmVzcG9uZDogYXJlYTogJXMgbHNhOiAlcyIsIG9hLT5uYW1lLCBsc2EtPm5hbWUpOworCisgIC8qIEFkZCBJbmRleCAoQXJlYUlkLCBUeXBlLCBSb3V0ZXJJZCwgTHNpZCkgKi8KKyAgKmxlbmd0aCA9IHYtPm5hbWVsZW4gKyBPU1BGVjNfQVJFQV9MU0RCX0VOVFJZX0VYQUNUX09GRlNFVDsKKyAgb2Zmc2V0ID0gbmFtZSArIHYtPm5hbWVsZW47CisgIG9pZF9jb3B5X2FkZHIgKG9mZnNldCwgKHN0cnVjdCBpbl9hZGRyICopICZvYS0+YXJlYV9pZCwgSU5fQUREUl9TSVpFKTsKKyAgb2Zmc2V0ICs9IElOX0FERFJfU0laRTsKKyAgKm9mZnNldCA9IG50b2hzIChsc2EtPmhlYWRlci0+dHlwZSk7CisgIG9mZnNldCsrOworICBvaWRfY29weV9hZGRyIChvZmZzZXQsIChzdHJ1Y3QgaW5fYWRkciAqKSAmbHNhLT5oZWFkZXItPmFkdl9yb3V0ZXIsCisgICAgICAgICAgICAgICAgIElOX0FERFJfU0laRSk7CisgIG9mZnNldCArPSBJTl9BRERSX1NJWkU7CisgIG9pZF9jb3B5X2FkZHIgKG9mZnNldCwgKHN0cnVjdCBpbl9hZGRyICopICZsc2EtPmhlYWRlci0+aWQsIElOX0FERFJfU0laRSk7CisgIG9mZnNldCArPSBJTl9BRERSX1NJWkU7CisKKyAgLyogUmV0dXJuIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSB2YXJpYWJsZSAqLworICBzd2l0Y2ggKHYtPm1hZ2ljKQorICAgIHsKKyAgICBjYXNlIE9TUEZ2M0FSRUFMU0RCQVJFQUlEOiAgICAgICAgLyogMSAqLworICAgICAgYXJlYV9pZC5zX2FkZHIgPSBPU1BGNl9BUkVBIChsc2EtPmxzZGItPmRhdGEpLT5hcmVhX2lkOworICAgICAgcmV0dXJuIFNOTVBfSVBBRERSRVNTIChhcmVhX2lkKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgT1NQRnYzQVJFQUxTREJUWVBFOiAgICAgICAgICAvKiAyICovCisgICAgICByZXR1cm4gU05NUF9JTlRFR0VSIChudG9ocyAobHNhLT5oZWFkZXItPnR5cGUpKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgT1NQRnYzQVJFQUxTREJST1VURVJJRDogICAgICAvKiAzICovCisgICAgICBhZHZfcm91dGVyLnNfYWRkciA9IGxzYS0+aGVhZGVyLT5hZHZfcm91dGVyOworICAgICAgcmV0dXJuIFNOTVBfSVBBRERSRVNTIChhZHZfcm91dGVyKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgT1NQRnYzQVJFQUxTREJMU0lEOiAgICAgICAgICAvKiA0ICovCisgICAgICBpZC5zX2FkZHIgPSBsc2EtPmhlYWRlci0+aWQ7CisgICAgICByZXR1cm4gU05NUF9JUEFERFJFU1MgKGlkKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgT1NQRnYzQVJFQUxTREJTRVFVRU5DRTogICAgICAvKiA1ICovCisgICAgICByZXR1cm4gU05NUF9JTlRFR0VSIChsc2EtPmhlYWRlci0+c2VxbnVtKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgT1NQRnYzQVJFQUxTREJBR0U6ICAgICAgICAgICAvKiA2ICovCisgICAgICBvc3BmNl9sc2FfYWdlX2N1cnJlbnQgKGxzYSk7CisgICAgICByZXR1cm4gU05NUF9JTlRFR0VSIChsc2EtPmhlYWRlci0+YWdlKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgT1NQRnYzQVJFQUxTREJDSEVDS1NVTTogICAgICAvKiA3ICovCisgICAgICByZXR1cm4gU05NUF9JTlRFR0VSIChsc2EtPmhlYWRlci0+Y2hlY2tzdW0pOworICAgICAgYnJlYWs7CisgICAgY2FzZSBPU1BGdjNBUkVBTFNEQkFEVkVSVElTRU1FTlQ6IC8qIDggKi8KKyAgICAgICp2YXJfbGVuID0gbnRvaHMgKGxzYS0+aGVhZGVyLT5sZW5ndGgpOworICAgICAgcmV0dXJuICh1X2NoYXIgKikgbHNhLT5oZWFkZXI7CisgICAgICBicmVhazsKKyAgICBjYXNlIE9TUEZ2M0FSRUFMU0RCVFlQRUtOT1dOOiAgICAgLyogOSAqLworICAgICAgcmV0dXJuIFNOTVBfSU5URUdFUiAoT1NQRjZfTFNBX0lTX0tOT1dOIChsc2EtPmhlYWRlci0+dHlwZSkgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9UUlVFIDogU05NUF9GQUxTRSk7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIE5VTEw7CisgICAgICBicmVhazsKKyAgICB9CisgIHJldHVybiBOVUxMOworfQorCisKIC8qIFJlZ2lzdGVyIE9TUEZ2My1NSUIuICovCiB2b2lkCiBvc3BmNl9zbm1wX2luaXQgKHN0cnVjdCB0aHJlYWRfbWFzdGVyICptYXN0ZXIpCmRpZmYgLS1naXQgYS9vc3BmNmQvb3NwZjZfc3BmLmMgYi9vc3BmNmQvb3NwZjZfc3BmLmMKaW5kZXggNGYzYWY3Yy4uNDAxMGE1ZSAxMDA2NDQKLS0tIGEvb3NwZjZkL29zcGY2X3NwZi5jCisrKyBiL29zcGY2ZC9vc3BmNl9zcGYuYwpAQCAtNDg3LDYgKzQ4NywzMiBAQAogICBwcXVldWVfZGVsZXRlIChjYW5kaWRhdGVfbGlzdCk7CiB9CiAKK3ZvaWQKK29zcGY2X3NwZl9sb2dfZGF0YWJhc2UgKHN0cnVjdCBvc3BmNl9hcmVhICpvYSkKK3sKKyAgY2hhciAqcCwgKmVuZCwgYnVmZmVyWzI1Nl07CisgIHN0cnVjdCBsaXN0bm9kZSAqbm9kZTsKKyAgc3RydWN0IG9zcGY2X2ludGVyZmFjZSAqb2k7CisKKyAgcCA9IGJ1ZmZlcjsKKyAgZW5kID0gYnVmZmVyICsgc2l6ZW9mIChidWZmZXIpOworCisgIHNucHJpbnRmIChwLCBlbmQgLSBwLCAiU1BGIG9uIERCICgjTFNBcyk6Iik7CisgIHAgPSAoYnVmZmVyICsgc3RybGVuIChidWZmZXIpIDwgZW5kID8gYnVmZmVyICsgc3RybGVuIChidWZmZXIpIDogZW5kKTsKKyAgc25wcmludGYgKHAsIGVuZCAtIHAsICIgQXJlYSAlczogJWQiLCBvYS0+bmFtZSwgb2EtPmxzZGItPmNvdW50KTsKKyAgcCA9IChidWZmZXIgKyBzdHJsZW4gKGJ1ZmZlcikgPCBlbmQgPyBidWZmZXIgKyBzdHJsZW4gKGJ1ZmZlcikgOiBlbmQpOworCisgIGZvciAobm9kZSA9IGxpc3RoZWFkIChvYS0+aWZfbGlzdCk7IG5vZGU7IG5leHRub2RlIChub2RlKSkKKyAgICB7CisgICAgICBvaSA9IChzdHJ1Y3Qgb3NwZjZfaW50ZXJmYWNlICopIGdldGRhdGEgKG5vZGUpOworICAgICAgc25wcmludGYgKHAsIGVuZCAtIHAsICIgSS9GICVzOiAlZCIsCisgICAgICAgICAgICAgICAgb2ktPmludGVyZmFjZS0+bmFtZSwgb2ktPmxzZGItPmNvdW50KTsKKyAgICAgIHAgPSAoYnVmZmVyICsgc3RybGVuIChidWZmZXIpIDwgZW5kID8gYnVmZmVyICsgc3RybGVuIChidWZmZXIpIDogZW5kKTsKKyAgICB9CisKKyAgemxvZ19pbmZvICgiJXMiLCBidWZmZXIpOworfQorCiBpbnQKIG9zcGY2X3NwZl9jYWxjdWxhdGlvbl90aHJlYWQgKHN0cnVjdCB0aHJlYWQgKnQpCiB7CkBAIC00OTYsMjAgKzUyMiwyMCBAQAogICBvYSA9IChzdHJ1Y3Qgb3NwZjZfYXJlYSAqKSBUSFJFQURfQVJHICh0KTsKICAgb2EtPnRocmVhZF9zcGZfY2FsY3VsYXRpb24gPSBOVUxMOwogCi0gIGlmIChJU19PU1BGNl9ERUJVR19TUEYgKFBST0NFU1MpIHx8IElTX09TUEY2X0RFQlVHX1NQRiAoVElNRSkpCi0gICAgemxvZ19pbmZvICgiU1BGIGNhbGN1bGF0aW9uIGZvciBhcmVhICVzIiwgb2EtPm5hbWUpOworICBpZiAoSVNfT1NQRjZfREVCVUdfU1BGIChQUk9DRVNTKSkKKyAgICB6bG9nX2luZm8gKCJTUEYgY2FsY3VsYXRpb24gZm9yIEFyZWEgJXMiLCBvYS0+bmFtZSk7CisgIGlmIChJU19PU1BGNl9ERUJVR19TUEYgKERBVEFCQVNFKSkKKyAgICBvc3BmNl9zcGZfbG9nX2RhdGFiYXNlIChvYSk7CiAKICAgLyogZXhlY3V0ZSBTUEYgY2FsY3VsYXRpb24gKi8KICAgZ2V0dGltZW9mZGF5ICgmc3RhcnQsIChzdHJ1Y3QgdGltZXpvbmUgKikgTlVMTCk7CiAgIG9zcGY2X3NwZl9jYWxjdWxhdGlvbiAob2EtPm9zcGY2LT5yb3V0ZXJfaWQsIG9hLT5zcGZfdGFibGUsIG9hKTsKICAgZ2V0dGltZW9mZGF5ICgmZW5kLCAoc3RydWN0IHRpbWV6b25lICopIE5VTEwpOworICB0aW1lcnN1YiAoJmVuZCwgJnN0YXJ0LCAmcnVudGltZSk7CiAKICAgaWYgKElTX09TUEY2X0RFQlVHX1NQRiAoUFJPQ0VTUykgfHwgSVNfT1NQRjZfREVCVUdfU1BGIChUSU1FKSkKLSAgICB7Ci0gICAgICB0aW1lcnN1YiAoJmVuZCwgJnN0YXJ0LCAmcnVudGltZSk7Ci0gICAgICB6bG9nX2luZm8gKCJTUEYgY2FsY3VsYXRpb24gZm9yIGFyZWEgJXM6IHJ1bnRpbWUgJWxkIHNlYyAlbGQgdXNlYyIsCi0gICAgICAgICAgICAgICAgIG9hLT5uYW1lLCBydW50aW1lLnR2X3NlYywgcnVudGltZS50dl91c2VjKTsKLSAgICB9CisgICAgemxvZ19pbmZvICgiU1BGIHJ1bnRpbWU6ICVsZCBzZWMgJWxkIHVzZWMiLAorICAgICAgICAgICAgICAgcnVudGltZS50dl9zZWMsIHJ1bnRpbWUudHZfdXNlYyk7CiAKICAgb3NwZjZfaW50cmFfcm91dGVfY2FsY3VsYXRpb24gKG9hKTsKICAgb3NwZjZfaW50cmFfYnJvdXRlcl9jYWxjdWxhdGlvbiAob2EpOwpAQCAtNTg4LDYgKzYxNCwyMSBAQAogICByZXR1cm4gQ01EX1NVQ0NFU1M7CiB9CiAKK0RFRlVOIChkZWJ1Z19vc3BmNl9zcGZfZGF0YWJhc2UsCisgICAgICAgZGVidWdfb3NwZjZfc3BmX2RhdGFiYXNlX2NtZCwKKyAgICAgICAiZGVidWcgb3NwZjYgc3BmIGRhdGFiYXNlIiwKKyAgICAgICBERUJVR19TVFIKKyAgICAgICBPU1BGNl9TVFIKKyAgICAgICAiRGVidWcgU1BGIENhbGN1bGF0aW9uXG4iCisgICAgICAgIkxvZyBudW1iZXIgb2YgTFNBcyBhdCBTUEYgQ2FsY3VsYXRpb24gdGltZVxuIgorICAgICAgKQoreworICB1bnNpZ25lZCBjaGFyIGxldmVsID0gMDsKKyAgbGV2ZWwgPSBPU1BGNl9ERUJVR19TUEZfREFUQUJBU0U7CisgIE9TUEY2X0RFQlVHX1NQRl9PTiAobGV2ZWwpOworICByZXR1cm4gQ01EX1NVQ0NFU1M7Cit9CisKIERFRlVOIChub19kZWJ1Z19vc3BmNl9zcGZfcHJvY2VzcywKICAgICAgICBub19kZWJ1Z19vc3BmNl9zcGZfcHJvY2Vzc19jbWQsCiAgICAgICAgIm5vIGRlYnVnIG9zcGY2IHNwZiBwcm9jZXNzIiwKQEAgLTYyMCw2ICs2NjEsMjIgQEAKICAgcmV0dXJuIENNRF9TVUNDRVNTOwogfQogCitERUZVTiAobm9fZGVidWdfb3NwZjZfc3BmX2RhdGFiYXNlLAorICAgICAgIG5vX2RlYnVnX29zcGY2X3NwZl9kYXRhYmFzZV9jbWQsCisgICAgICAgIm5vIGRlYnVnIG9zcGY2IHNwZiBkYXRhYmFzZSIsCisgICAgICAgTk9fU1RSCisgICAgICAgREVCVUdfU1RSCisgICAgICAgT1NQRjZfU1RSCisgICAgICAgIkRlYnVnIFNQRiBDYWxjdWxhdGlvblxuIgorICAgICAgICJRdWl0IExvZ2dpbmcgbnVtYmVyIG9mIExTQXMgYXQgU1BGIENhbGN1bGF0aW9uIHRpbWVcbiIKKyAgICAgICkKK3sKKyAgdW5zaWduZWQgY2hhciBsZXZlbCA9IDA7CisgIGxldmVsID0gT1NQRjZfREVCVUdfU1BGX0RBVEFCQVNFOworICBPU1BGNl9ERUJVR19TUEZfT0ZGIChsZXZlbCk7CisgIHJldHVybiBDTURfU1VDQ0VTUzsKK30KKwogaW50CiBjb25maWdfd3JpdGVfb3NwZjZfZGVidWdfc3BmIChzdHJ1Y3QgdnR5ICp2dHkpCiB7CkBAIC02MjcsNiArNjg0LDggQEAKICAgICB2dHlfb3V0ICh2dHksICJkZWJ1ZyBvc3BmNiBzcGYgcHJvY2VzcyVzIiwgVk5MKTsKICAgaWYgKElTX09TUEY2X0RFQlVHX1NQRiAoVElNRSkpCiAgICAgdnR5X291dCAodnR5LCAiZGVidWcgb3NwZjYgc3BmIHRpbWUlcyIsIFZOTCk7CisgIGlmIChJU19PU1BGNl9ERUJVR19TUEYgKERBVEFCQVNFKSkKKyAgICB2dHlfb3V0ICh2dHksICJkZWJ1ZyBvc3BmNiBzcGYgZGF0YWJhc2UlcyIsIFZOTCk7CiAgIHJldHVybiAwOwogfQogCkBAIC02MzUsMTIgKzY5NCwxNiBAQAogewogICBpbnN0YWxsX2VsZW1lbnQgKEVOQUJMRV9OT0RFLCAmZGVidWdfb3NwZjZfc3BmX3Byb2Nlc3NfY21kKTsKICAgaW5zdGFsbF9lbGVtZW50IChFTkFCTEVfTk9ERSwgJmRlYnVnX29zcGY2X3NwZl90aW1lX2NtZCk7CisgIGluc3RhbGxfZWxlbWVudCAoRU5BQkxFX05PREUsICZkZWJ1Z19vc3BmNl9zcGZfZGF0YWJhc2VfY21kKTsKICAgaW5zdGFsbF9lbGVtZW50IChFTkFCTEVfTk9ERSwgJm5vX2RlYnVnX29zcGY2X3NwZl9wcm9jZXNzX2NtZCk7CiAgIGluc3RhbGxfZWxlbWVudCAoRU5BQkxFX05PREUsICZub19kZWJ1Z19vc3BmNl9zcGZfdGltZV9jbWQpOworICBpbnN0YWxsX2VsZW1lbnQgKEVOQUJMRV9OT0RFLCAmbm9fZGVidWdfb3NwZjZfc3BmX2RhdGFiYXNlX2NtZCk7CiAgIGluc3RhbGxfZWxlbWVudCAoQ09ORklHX05PREUsICZkZWJ1Z19vc3BmNl9zcGZfcHJvY2Vzc19jbWQpOwogICBpbnN0YWxsX2VsZW1lbnQgKENPTkZJR19OT0RFLCAmZGVidWdfb3NwZjZfc3BmX3RpbWVfY21kKTsKKyAgaW5zdGFsbF9lbGVtZW50IChDT05GSUdfTk9ERSwgJmRlYnVnX29zcGY2X3NwZl9kYXRhYmFzZV9jbWQpOwogICBpbnN0YWxsX2VsZW1lbnQgKENPTkZJR19OT0RFLCAmbm9fZGVidWdfb3NwZjZfc3BmX3Byb2Nlc3NfY21kKTsKICAgaW5zdGFsbF9lbGVtZW50IChDT05GSUdfTk9ERSwgJm5vX2RlYnVnX29zcGY2X3NwZl90aW1lX2NtZCk7CisgIGluc3RhbGxfZWxlbWVudCAoQ09ORklHX05PREUsICZub19kZWJ1Z19vc3BmNl9zcGZfZGF0YWJhc2VfY21kKTsKIH0KIAogdm9pZApkaWZmIC0tZ2l0IGEvb3NwZjZkL29zcGY2X3NwZi5oIGIvb3NwZjZkL29zcGY2X3NwZi5oCmluZGV4IGM5ZTAzMWIuLjcyOGVlYzUgMTAwNjQ0Ci0tLSBhL29zcGY2ZC9vc3BmNl9zcGYuaAorKysgYi9vc3BmNmQvb3NwZjZfc3BmLmgKQEAgLTI2LDYgKzI2LDcgQEAKIGV4dGVybiB1bnNpZ25lZCBjaGFyIGNvbmZfZGVidWdfb3NwZjZfc3BmOwogI2RlZmluZSBPU1BGNl9ERUJVR19TUEZfUFJPQ0VTUyAgIDB4MDEKICNkZWZpbmUgT1NQRjZfREVCVUdfU1BGX1RJTUUgICAgICAweDAyCisjZGVmaW5lIE9TUEY2X0RFQlVHX1NQRl9EQVRBQkFTRSAgMHgwNAogI2RlZmluZSBPU1BGNl9ERUJVR19TUEZfT04obGV2ZWwpIFwKICAgKGNvbmZfZGVidWdfb3NwZjZfc3BmIHw9IChsZXZlbCkpCiAjZGVmaW5lIE9TUEY2X0RFQlVHX1NQRl9PRkYobGV2ZWwpIFwK