From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: Tvrtko Ursulin Date: Mon, 11 Feb 2019 11:45:22 +0000 Message-Id: <20190211114523.22844-1-tvrtko.ursulin@linux.intel.com> MIME-Version: 1.0 Subject: [igt-dev] [IGT 1/2] tools/intel_gpu_top: Add support for stdout logging List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org Cc: Intel-gfx@lists.freedesktop.org, Eero Tamminen , 3.14pi@ukr.net, Tvrtko Ursulin List-ID: RnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KClR3byBuZXcg b3V0cHV0IG1vZGVzIGFyZSBhZGRlZDogbGlzdGluZyBvZiB0ZXh0IGRhdGEgdG8gc3RhbmRhcmQg b3V0ICgtbApvbiB0aGUgY29tbWFuZCBsaW5lKSwgYW5kIGR1bXBpbmcgb2YgSlNPTiBmb3JtYXR0 ZWQgcmVjb3JkcyAoLUopLCBhbHNvIHRvCnN0YW5kYXJkIG91dC4KClRoZSBmaXJzdCBtb2RlIGlz IHNlbGVjdGVkIGF1dG9tYXRpY2FsbHkgd2hlbiBub24taW50ZXJhY3RpdmUgc3RhbmRhcmQgb3V0 CmlzIGRldGVjdGVkLgoKRXhhbXBsZSBvZiB0ZXh0IG91dHB1dDoKCiBGcmVxIE1IeiAgICAgIElS USBSQzYgUG93ZXIgICAgIElNQyBNaUIvcyAgICAgICAgICAgUkNTLzAgICAgICAgICAgIEJDUy8w ICAgICAgICAgICBWQ1MvMCAgICAgICAgICAgVkNTLzEgICAgICAgICAgVkVDUy8wCiByZXEgIGFj dCAgICAgICAvcyAgICUgICAgIFcgICAgIHJkICAgICB3ciAgICAgICAlICBzZSAgd2EgICAgICAg JSAgc2UgIHdhICAgICAgICUgIHNlICB3YSAgICAgICAlICBzZSAgd2EgICAgICAgJSAgc2UgIHdh CiAgIDAgICAgMCAgICAgICAgMCAgIDAgIDAuMDAgICAgMzYwICAgICAgMCAgICAwLjAwICAgMCAg IDAgICAgMC4wMCAgIDAgICAwICAgIDAuMDAgICAwICAgMCAgICAwLjAwICAgMCAgIDAgICAgMC4w MCAgIDAgICAwCiAzNTAgIDM1MCAgICAgICAgMCAxMDAgIDAuMDAgICAgIDM1ICAgICAgMiAgICAw LjAwICAgMCAgIDAgICAgMC4wMCAgIDAgICAwICAgIDAuMDAgICAwICAgMCAgICAwLjAwICAgMCAg IDAgICAgMC4wMCAgIDAgICAwCiAzNTAgIDM1MCAgICAgICAgMCAxMDAgIDAuMDAgICAgIDM0ICAg ICAgMiAgICAwLjAwICAgMCAgIDAgICAgMC4wMCAgIDAgICAwICAgIDAuMDAgICAwICAgMCAgICAw LjAwICAgMCAgIDAgICAgMC4wMCAgIDAgICAwCiAzNTAgIDM1MCAgICAgICAgMCAxMDAgIDAuMDAg ICAgMTQzICAgICAgNiAgICAwLjAwICAgMCAgIDAgICAgMC4wMCAgIDAgICAwICAgIDAuMDAgICAw ICAgMCAgICAwLjAwICAgMCAgIDAgICAgMC4wMCAgIDAgICAwCiAzNTAgIDM1MCAgICAgICAgMCAx MDAgIDAuMDAgICAgMTY5ICAgICAgNyAgICAwLjAwICAgMCAgIDAgICAgMC4wMCAgIDAgICAwICAg IDAuMDAgICAwICAgMCAgICAwLjAwICAgMCAgIDAgICAgMC4wMCAgIDAgICAwCiAzNTAgIDM1MCAg ICAgICAgMCAxMDAgIDAuMDAgICAgMTY5ICAgICAgNyAgICAwLjAwICAgMCAgIDAgICAgMC4wMCAg IDAgICAwICAgIDAuMDAgICAwICAgMCAgICAwLjAwICAgMCAgIDAgICAgMC4wMCAgIDAgICAwCgpF eGFtcGxlIG9mIEpTT04gb3V0cHV0OgoKewogICAgICAgICJwZXJpb2QiOiB7CiAgICAgICAgICAg ICAgICAiZHVyYXRpb24iOiAxMDAyLjUyNTIyNCwKICAgICAgICAgICAgICAgICJ1bml0IjogIm1z IgogICAgICAgIH0sCiAgICAgICAgImZyZXF1ZW5jeSI6IHsKICAgICAgICAgICAgICAgICJyZXF1 ZXN0ZWQiOiAzNDkuMTE4Mzk4LAogICAgICAgICAgICAgICAgImFjdHVhbCI6IDM0OS4xMTgzOTgs CiAgICAgICAgICAgICAgICAidW5pdCI6ICJNSHoiCiAgICAgICAgfSwKICAgICAgICAiaW50ZXJy dXB0cyI6IHsKICAgICAgICAgICAgICAgICJjb3VudCI6IDAuMDAwMDAwLAogICAgICAgICAgICAg ICAgInVuaXQiOiAiaXJxL3MiCiAgICAgICAgfSwKICAgICAgICAicmM2IjogewogICAgICAgICAg ICAgICAgInZhbHVlIjogOTkuODk3NzUyLAogICAgICAgICAgICAgICAgInVuaXQiOiAiJSIKICAg ICAgICB9LAogICAgICAgICJwb3dlciI6IHsKICAgICAgICAgICAgICAgICJ2YWx1ZSI6IDAuMDAw MDAwLAogICAgICAgICAgICAgICAgInVuaXQiOiAiVyIKICAgICAgICB9LAogICAgICAgICJpbWMt YmFuZHdpZHRoIjogewogICAgICAgICAgICAgICAgInJlYWRzIjogMTQ5LjY4Mzg0MywKICAgICAg ICAgICAgICAgICJ3cml0ZXMiOiA2LjEwNDA5MywKICAgICAgICAgICAgICAgICJ1bml0IjogIk1p Qi9zIgogICAgICAgIH0sCiAgICAgICAgImVuZ2luZXMiOiB7CiAgICAgICAgICAgICAgICAiUmVu ZGVyLzNELzAiOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJidXN5IjogMC4wMDAwMDAsCiAg ICAgICAgICAgICAgICAgICAgICAgICJzZW1hIjogMC4wMDAwMDAsCiAgICAgICAgICAgICAgICAg ICAgICAgICJ3YWl0IjogMC4wMDAwMDAsCiAgICAgICAgICAgICAgICAgICAgICAgICJ1bml0Ijog IiUiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgIkJsaXR0ZXIvMCI6IHsKICAg ICAgICAgICAgICAgICAgICAgICAgImJ1c3kiOiAwLjAwMDAwMCwKICAgICAgICAgICAgICAgICAg ICAgICAgInNlbWEiOiAwLjAwMDAwMCwKICAgICAgICAgICAgICAgICAgICAgICAgIndhaXQiOiAw LjAwMDAwMCwKICAgICAgICAgICAgICAgICAgICAgICAgInVuaXQiOiAiJSIKICAgICAgICAgICAg ICAgIH0sCiAgICAgICAgICAgICAgICAiVmlkZW8vMCI6IHsKICAgICAgICAgICAgICAgICAgICAg ICAgImJ1c3kiOiAwLjAwMDAwMCwKICAgICAgICAgICAgICAgICAgICAgICAgInNlbWEiOiAwLjAw MDAwMCwKICAgICAgICAgICAgICAgICAgICAgICAgIndhaXQiOiAwLjAwMDAwMCwKICAgICAgICAg ICAgICAgICAgICAgICAgInVuaXQiOiAiJSIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAg ICAgICAiVmlkZW8vMSI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgImJ1c3kiOiAwLjAwMDAw MCwKICAgICAgICAgICAgICAgICAgICAgICAgInNlbWEiOiAwLjAwMDAwMCwKICAgICAgICAgICAg ICAgICAgICAgICAgIndhaXQiOiAwLjAwMDAwMCwKICAgICAgICAgICAgICAgICAgICAgICAgInVu aXQiOiAiJSIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAiVmlkZW9FbmhhbmNl LzAiOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJidXN5IjogMC4wMDAwMDAsCiAgICAgICAg ICAgICAgICAgICAgICAgICJzZW1hIjogMC4wMDAwMDAsCiAgICAgICAgICAgICAgICAgICAgICAg ICJ3YWl0IjogMC4wMDAwMDAsCiAgICAgICAgICAgICAgICAgICAgICAgICJ1bml0IjogIiUiCiAg ICAgICAgICAgICAgICB9CiAgICAgICAgfQp9Cgp2MjoKICogU2hvdyBleGFtcGxlIG91dHB1dCBp biBjb21taXQgbWVzc2FnZS4KICogSW5zdGFsbCBzaWduYWwgaGFuZGxlciB0byBjb21wbGV0ZSBv dXRwdXQgb24gU0lHSU5ULiAoQ2hyaXMgV2lsc29uKQoKdjM6CiAqIFVzZSBhc3ByaW50ZiB3aGVy ZSBwb3NzaWJsZS4gKENocmlzIFdpbHNvbikKClNpZ25lZC1vZmYtYnk6IFR2cnRrbyBVcnN1bGlu IDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+ClJlZmVyZW5jZXM6IGh0dHBzOi8vYnVncy5mcmVl ZGVza3RvcC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODY4OQpDYzogRWVybyBUYW1taW5lbiA8ZWVy by50LnRhbW1pbmVuQGludGVsLmNvbT4KQ2M6IDMuMTRwaUB1a3IubmV0CkNjOiBDaHJpcyBXaWxz b24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KLS0tCiBtYW4vaW50ZWxfZ3B1X3RvcC5yc3Qg fCAgIDkgKy0KIHRvb2xzL2ludGVsX2dwdV90b3AuYyB8IDc2MSArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKy0tLS0tLS0KIDIgZmlsZXMgY2hhbmdlZCwgNjQ0IGluc2VydGlvbnMo KyksIDEyNiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9tYW4vaW50ZWxfZ3B1X3RvcC5yc3Qg Yi9tYW4vaW50ZWxfZ3B1X3RvcC5yc3QKaW5kZXggMTljNzEyMzA3ZDI4Li5kNWJkYTA5M2M4ZTgg MTAwNjQ0Ci0tLSBhL21hbi9pbnRlbF9ncHVfdG9wLnJzdAorKysgYi9tYW4vaW50ZWxfZ3B1X3Rv cC5yc3QKQEAgLTcsOSArNyw5IEBAIERpc3BsYXkgYSB0b3AtbGlrZSBzdW1tYXJ5IG9mIEludGVs IEdQVSB1c2FnZQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CiAuLiBpbmNsdWRlOjogZGVmcy5yc3QKIDpBdXRob3I6IElHVCBEZXZlbG9wZXJzIDxpZ3QtZGV2 QGxpc3RzLmZyZWVkZXNrdG9wLm9yZz4KLTpEYXRlOiAyMDE4LTA0LTA0Cis6RGF0ZTogMjAxOS0w Mi0wOAogOlZlcnNpb246IHxQQUNLQUdFX1NUUklOR3wKLTpDb3B5cmlnaHQ6IDIwMDksMjAxMSwy MDEyLDIwMTYsMjAxOCBJbnRlbCBDb3Jwb3JhdGlvbgorOkNvcHlyaWdodDogMjAwOSwyMDExLDIw MTIsMjAxNiwyMDE4LDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KIDpNYW51YWwgc2VjdGlvbjogfE1B TlVBTF9TRUNUSU9OfAogOk1hbnVhbCBncm91cDogfE1BTlVBTF9HUk9VUHwKIApAQCAtMzEsNiAr MzEsMTEgQEAgT1BUSU9OUwogLXMgPG1zPgogICAgIFJlZnJlc2ggcGVyaW9kIGluIG1pbGxpc2Vj b25kcy4KIAorLWwKKyAgICBMaXN0IHRleHQgZGF0YSB0byBzdGFuZGFyZCBvdXQuCisKKy1KCisg ICAgT3V0cHV0IEpTT04gZm9ybWF0dGVkIGRhdGEgdG8gc3RhbmRhcmQgb3V0cHV0LgogLWgKICAg ICBTaG93IGhlbHAgdGV4dC4KIApkaWZmIC0tZ2l0IGEvdG9vbHMvaW50ZWxfZ3B1X3RvcC5jIGIv dG9vbHMvaW50ZWxfZ3B1X3RvcC5jCmluZGV4IGI5MjNjM2NmYmU5Ny4uOTAwOTc5ZWVhN2ExIDEw MDY0NAotLS0gYS90b29scy9pbnRlbF9ncHVfdG9wLmMKKysrIGIvdG9vbHMvaW50ZWxfZ3B1X3Rv cC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCDCqSAyMDA3LTIwMTggSW50ZWwg Q29ycG9yYXRpb24KKyAqIENvcHlyaWdodCDCqSAyMDA3LTIwMTkgSW50ZWwgQ29ycG9yYXRpb24K ICAqCiAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8g YW55IHBlcnNvbiBvYnRhaW5pbmcgYQogICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3Nv Y2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKQEAgLTE5LDEwICsx OSw2IEBACiAgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBU T1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwogICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJ T04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgogICogREVBTElOR1MgSU4g VEhFIFNPRlRXQVJFLgotICoKLSAqIEF1dGhvcnM6Ci0gKiAgICBFcmljIEFuaG9sdCA8ZXJpY0Bh bmhvbHQubmV0PgotICogICAgRXVnZW5pIERvZG9ub3YgPGV1Z2VuaS5kb2Rvbm92QGludGVsLmNv bT4KICAqLwogCiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTQxLDYgKzM3LDggQEAKICNpbmNsdWRl IDxlcnJuby5oPgogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDxsb2NhbGUuaD4KKyNpbmNs dWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KIAogI2luY2x1ZGUgImlndF9wZXJm LmgiCiAKQEAgLTU4LDcgKzU2LDggQEAgc3RydWN0IHBtdV9jb3VudGVyIHsKIAogc3RydWN0IGVu Z2luZSB7CiAJY29uc3QgY2hhciAqbmFtZTsKLQljb25zdCBjaGFyICpkaXNwbGF5X25hbWU7CisJ Y2hhciAqZGlzcGxheV9uYW1lOworCWNoYXIgKnNob3J0X25hbWU7CiAKIAl1bnNpZ25lZCBpbnQg Y2xhc3M7CiAJdW5zaWduZWQgaW50IGluc3RhbmNlOwpAQCAtMTQyLDYgKzE0MSwyMiBAQCBzdGF0 aWMgY29uc3QgY2hhciAqY2xhc3NfZGlzcGxheV9uYW1lKHVuc2lnbmVkIGludCBjbGFzcykKIAl9 CiB9CiAKK3N0YXRpYyBjb25zdCBjaGFyICpjbGFzc19zaG9ydF9uYW1lKHVuc2lnbmVkIGludCBj bGFzcykKK3sKKwlzd2l0Y2ggKGNsYXNzKSB7CisJY2FzZSBJOTE1X0VOR0lORV9DTEFTU19SRU5E RVI6CisJCXJldHVybiAiUkNTIjsKKwljYXNlIEk5MTVfRU5HSU5FX0NMQVNTX0NPUFk6CisJCXJl dHVybiAiQkNTIjsKKwljYXNlIEk5MTVfRU5HSU5FX0NMQVNTX1ZJREVPOgorCQlyZXR1cm4gIlZD UyI7CisJY2FzZSBJOTE1X0VOR0lORV9DTEFTU19WSURFT19FTkhBTkNFOgorCQlyZXR1cm4gIlZF Q1MiOworCWRlZmF1bHQ6CisJCXJldHVybiAiVU5LTiI7CisJfQorfQorCiBzdGF0aWMgaW50IGVu Z2luZV9jbXAoY29uc3Qgdm9pZCAqX19hLCBjb25zdCB2b2lkICpfX2IpCiB7CiAJY29uc3Qgc3Ry dWN0IGVuZ2luZSAqYSA9IChzdHJ1Y3QgZW5naW5lICopX19hOwpAQCAtMjIwLDE3ICsyMzUsMTgg QEAgc3RhdGljIHN0cnVjdCBlbmdpbmVzICpkaXNjb3Zlcl9lbmdpbmVzKHZvaWQpCiAJCQkJICAg IEk5MTVfUE1VX1NBTVBMRV9CSVRTKSAmCiAJCQkJICAgICgoMSA8PCBJOTE1X1BNVV9TQU1QTEVf SU5TVEFOQ0VfQklUUykgLSAxKTsKIAotCQlyZXQgPSBzbnByaW50ZihidWYsIHNpemVvZihidWYp LCAiJXMvJXUiLAorCQlyZXQgPSBhc3ByaW50ZigmZW5naW5lLT5kaXNwbGF5X25hbWUsICIlcy8l dSIsCiAJCQkgICAgICAgY2xhc3NfZGlzcGxheV9uYW1lKGVuZ2luZS0+Y2xhc3MpLAogCQkJICAg ICAgIGVuZ2luZS0+aW5zdGFuY2UpOwotCQlpZiAocmV0IDwgMCB8fCByZXQgPT0gc2l6ZW9mKGJ1 ZikpIHsKLQkJCXJldCA9IEVOT0JVRlM7CisJCWlmICghZW5naW5lLT5kaXNwbGF5X25hbWUpIHsK KwkJCXJldCA9IGVycm5vOwogCQkJYnJlYWs7CiAJCX0KLQkJcmV0ID0gMDsKIAotCQllbmdpbmUt PmRpc3BsYXlfbmFtZSA9IHN0cmR1cChidWYpOwotCQlpZiAoIWVuZ2luZS0+ZGlzcGxheV9uYW1l KSB7CisJCXJldCA9IGFzcHJpbnRmKCZlbmdpbmUtPnNob3J0X25hbWUsICIlcy8ldSIsCisJCQkg ICAgICAgY2xhc3Nfc2hvcnRfbmFtZShlbmdpbmUtPmNsYXNzKSwKKwkJCSAgICAgICBlbmdpbmUt Pmluc3RhbmNlKTsKKwkJaWYgKCFlbmdpbmUtPnNob3J0X25hbWUpIHsKIAkJCXJldCA9IGVycm5v OwogCQkJYnJlYWs7CiAJCX0KQEAgLTI0Miw2ICsyNTgsOCBAQCBzdGF0aWMgc3RydWN0IGVuZ2lu ZXMgKmRpc2NvdmVyX2VuZ2luZXModm9pZCkKIAkJCXJldCA9IGVycm5vOwogCQkJYnJlYWs7CiAJ CX0KKworCQlyZXQgPSAwOwogCX0KIAogCWlmIChyZXQpIHsKQEAgLTU1MSw3ICs1NjksNyBAQCBz dGF0aWMgdWludDY0X3QgcG11X3JlYWRfbXVsdGkoaW50IGZkLCB1bnNpZ25lZCBpbnQgbnVtLCB1 aW50NjRfdCAqdmFsKQogCXJldHVybiBidWZbMV07CiB9CiAKLXN0YXRpYyBkb3VibGUgX19wbXVf Y2FsYyhzdHJ1Y3QgcG11X3BhaXIgKnAsIGRvdWJsZSBkLCBkb3VibGUgdCwgZG91YmxlIHMpCitz dGF0aWMgZG91YmxlIHBtdV9jYWxjKHN0cnVjdCBwbXVfcGFpciAqcCwgZG91YmxlIGQsIGRvdWJs ZSB0LCBkb3VibGUgcykKIHsKIAlkb3VibGUgdjsKIApAQCAtNTc2LDMwICs1OTQsNiBAQCBzdGF0 aWMgdm9pZCBmaWxsX3N0cihjaGFyICpidWYsIHVuc2lnbmVkIGludCBidWZzeiwgY2hhciBjLCB1 bnNpZ25lZCBpbnQgbnVtKQogCSpidWYgPSAwOwogfQogCi1zdGF0aWMgdm9pZCBwbXVfY2FsYyhz dHJ1Y3QgcG11X2NvdW50ZXIgKmNudCwKLQkJICAgICBjaGFyICpidWYsIHVuc2lnbmVkIGludCBi dWZzeiwKLQkJICAgICB1bnNpZ25lZCBpbnQgd2lkdGgsIHVuc2lnbmVkIHdpZHRoX2RlYywKLQkJ ICAgICBkb3VibGUgZCwgZG91YmxlIHQsIGRvdWJsZSBzKQotewotCWRvdWJsZSB2YWw7Ci0JaW50 IGxlbjsKLQotCWFzc2VydChidWZzeiA+PSAod2lkdGggKyB3aWR0aF9kZWMgKyAxKSk7Ci0KLQlp ZiAoIWNudC0+cHJlc2VudCkgewotCQlmaWxsX3N0cihidWYsIGJ1ZnN6LCAnLScsIHdpZHRoICsg d2lkdGhfZGVjKTsKLQkJcmV0dXJuOwotCX0KLQotCXZhbCA9IF9fcG11X2NhbGMoJmNudC0+dmFs LCBkLCB0LCBzKTsKLQotCWxlbiA9IHNucHJpbnRmKGJ1ZiwgYnVmc3osICIlKi4qZiIsIHdpZHRo ICsgd2lkdGhfZGVjLCB3aWR0aF9kZWMsIHZhbCk7Ci0JaWYgKGxlbiA8IDAgfHwgbGVuID09IGJ1 ZnN6KSB7Ci0JCWZpbGxfc3RyKGJ1ZiwgYnVmc3osICdYJywgd2lkdGggKyB3aWR0aF9kZWMpOwot CQlyZXR1cm47Ci0JfQotfQotCiBzdGF0aWMgdWludDY0X3QgX19wbXVfcmVhZF9zaW5nbGUoaW50 IGZkLCB1aW50NjRfdCAqdHMpCiB7CiAJdWludDY0X3QgZGF0YVsyXSA9IHsgfTsKQEAgLTY5Nywx MSArNjkxLDU1OSBAQCB1c2FnZShjb25zdCBjaGFyICphcHBuYW1lKQogCQkiXG4iCiAJCSJcdFRo ZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBhcmUgb3B0aW9uYWw6XG5cbiIKIAkJIlx0Wy1zIDxtcz5d ICAgICAgIFJlZnJlc2ggcGVyaW9kIGluIG1pbGxpc2Vjb25kcyAoZGVmYXVsdCAldW1zKS5cbiIK KwkJIlx0Wy1sXSAgICAgICAgICAgIExpc3QgZGF0YSB0byBzdGFuZGFyZCBvdXQuXG4iCisJCSJc dFstSl0gICAgICAgICAgICBKU09OIGRhdGEgdG8gc3RhbmRhcmQgb3V0LlxuIgogCQkiXHRbLWhd ICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHAgdGV4dC5cbiIKIAkJIlxuIiwKIAkJYXBwbmFtZSwg REVGQVVMVF9QRVJJT0RfTVMpOwogfQogCitzdGF0aWMgZW51bSB7CisJSU5URVJBQ1RJVkUsCisJ U1RET1VULAorCUpTT04KK30gb3V0cHV0X21vZGU7CisKK3N0cnVjdCBjbnRfaXRlbSB7CisJc3Ry dWN0IHBtdV9jb3VudGVyICpwbXU7CisJdW5zaWduZWQgaW50IGZtdF9kOworCXVuc2lnbmVkIGlu dCBmbXRfZGQ7CisJZG91YmxlIGQ7CisJZG91YmxlIHQ7CisJZG91YmxlIHM7CisJY29uc3QgY2hh ciAqbmFtZTsKKwljb25zdCBjaGFyICp1bml0OworCisJLyogSW50ZXJuYWwgZmllbGRzLiAqLwor CWNoYXIgYnVmWzE2XTsKK307CisKK3N0cnVjdCBjbnRfZ3JvdXAgeworCWNvbnN0IGNoYXIgKm5h bWU7CisJY29uc3QgY2hhciAqZGlzcGxheV9uYW1lOworCXN0cnVjdCBjbnRfaXRlbSAqaXRlbXM7 Cit9OworCitzdGF0aWMgdW5zaWduZWQgaW50IGpzb25faW5kZW50X2xldmVsOworCitzdGF0aWMg Y29uc3QgY2hhciAqanNvbl9pbmRlbnRbXSA9IHsKKwkiIiwKKwkiXHQiLAorCSJcdFx0IiwKKwki XHRcdFx0IiwKKwkiXHRcdFx0XHQiLAorCSJcdFx0XHRcdFx0IiwKK307CisKKyNkZWZpbmUgQVJS QVlfU0laRShhcnIpIChzaXplb2YoYXJyKS9zaXplb2YoYXJyWzBdKSkKKworc3RhdGljIHVuc2ln bmVkIGludCBqc29uX3ByZXZfc3RydWN0X21lbWJlcnM7CitzdGF0aWMgdW5zaWduZWQgaW50IGpz b25fc3RydWN0X21lbWJlcnM7CisKK3N0YXRpYyB2b2lkCitqc29uX29wZW5fc3RydWN0KGNvbnN0 IGNoYXIgKm5hbWUpCit7CisJYXNzZXJ0KGpzb25faW5kZW50X2xldmVsIDwgQVJSQVlfU0laRShq c29uX2luZGVudCkpOworCisJanNvbl9wcmV2X3N0cnVjdF9tZW1iZXJzID0ganNvbl9zdHJ1Y3Rf bWVtYmVyczsKKwlqc29uX3N0cnVjdF9tZW1iZXJzID0gMDsKKworCWlmIChuYW1lKQorCQlwcmlu dGYoIiVzJXNcIiVzXCI6IHtcbiIsCisJCSAgICAgICBqc29uX3ByZXZfc3RydWN0X21lbWJlcnMg PyAiLFxuIiA6ICIiLAorCQkgICAgICAganNvbl9pbmRlbnRbanNvbl9pbmRlbnRfbGV2ZWxdLAor CQkgICAgICAgbmFtZSk7CisJZWxzZQorCQlwcmludGYoIiVzXG4lc3tcbiIsCisJCSAgICAgICBq c29uX3ByZXZfc3RydWN0X21lbWJlcnMgPyAiLCIgOiAiIiwKKwkJICAgICAgIGpzb25faW5kZW50 W2pzb25faW5kZW50X2xldmVsXSk7CisKKwlqc29uX2luZGVudF9sZXZlbCsrOworfQorCitzdGF0 aWMgdm9pZAoranNvbl9jbG9zZV9zdHJ1Y3Qodm9pZCkKK3sKKwlhc3NlcnQoanNvbl9pbmRlbnRf bGV2ZWwgPiAwKTsKKworCXByaW50ZigiXG4lc30iLCBqc29uX2luZGVudFstLWpzb25faW5kZW50 X2xldmVsXSk7CisKKwlpZiAoanNvbl9pbmRlbnRfbGV2ZWwgPT0gMCkKKwkJZmZsdXNoKHN0ZG91 dCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2pzb25fYWRkX21lbWJlcihjb25zdCBzdHJ1 Y3QgY250X2dyb3VwICpwYXJlbnQsIHN0cnVjdCBjbnRfaXRlbSAqaXRlbSwKKwkJdW5zaWduZWQg aW50IGhlYWRlcnMpCit7CisJYXNzZXJ0KGpzb25faW5kZW50X2xldmVsIDwgQVJSQVlfU0laRShq c29uX2luZGVudCkpOworCisJcHJpbnRmKCIlcyVzXCIlc1wiOiAiLAorCQlqc29uX3N0cnVjdF9t ZW1iZXJzID8gIixcbiIgOiAiIiwKKwkJanNvbl9pbmRlbnRbanNvbl9pbmRlbnRfbGV2ZWxdLCBp dGVtLT5uYW1lKTsKKworCWpzb25fc3RydWN0X21lbWJlcnMrKzsKKworCWlmICghc3RyY21wKGl0 ZW0tPm5hbWUsICJ1bml0IikpCisJCXByaW50ZigiXCIlc1wiIiwgaXRlbS0+dW5pdCk7CisJZWxz ZQorCQlwcmludGYoIiVmIiwKKwkJICAgICAgIHBtdV9jYWxjKCZpdGVtLT5wbXUtPnZhbCwgaXRl bS0+ZCwgaXRlbS0+dCwgaXRlbS0+cykpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB1bnNp Z25lZCBpbnQgc3Rkb3V0X2xldmVsOworCisjZGVmaW5lIFNURE9VVF9IRUFERVJfUkVQRUFUIDIw CitzdGF0aWMgdW5zaWduZWQgaW50IHN0ZG91dF9saW5lcyA9IFNURE9VVF9IRUFERVJfUkVQRUFU OworCitzdGF0aWMgdm9pZAorc3Rkb3V0X29wZW5fc3RydWN0KGNvbnN0IGNoYXIgKm5hbWUpCit7 CisJc3Rkb3V0X2xldmVsKys7CisJYXNzZXJ0KHN0ZG91dF9sZXZlbCA+IDApOworfQorCitzdGF0 aWMgdm9pZAorc3Rkb3V0X2Nsb3NlX3N0cnVjdCh2b2lkKQoreworCWFzc2VydChzdGRvdXRfbGV2 ZWwgPiAwKTsKKwlpZiAoLS1zdGRvdXRfbGV2ZWwgPT0gMCkgeworCQlzdGRvdXRfbGluZXMrKzsK KwkJcHJpbnRmKCJcbiIpOworCQlmZmx1c2goc3Rkb3V0KTsKKwl9Cit9CisKK3N0YXRpYyB1bnNp Z25lZCBpbnQKK3N0ZG91dF9hZGRfbWVtYmVyKGNvbnN0IHN0cnVjdCBjbnRfZ3JvdXAgKnBhcmVu dCwgc3RydWN0IGNudF9pdGVtICppdGVtLAorCQkgIHVuc2lnbmVkIGludCBoZWFkZXJzKQorewor CXVuc2lnbmVkIGludCBmbXRfdG90ID0gaXRlbS0+Zm10X2QgKyAoaXRlbS0+Zm10X2RkID8gMSA6 IDApOworCWNoYXIgYnVmW2ZtdF90b3QgKyAxXTsKKwlkb3VibGUgdmFsOworCWludCBsZW47CisK KwlpZiAoIWl0ZW0tPnBtdSkKKwkJcmV0dXJuIDA7CisJZWxzZSBpZiAoIWl0ZW0tPnBtdS0+cHJl c2VudCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoaGVhZGVycyA9PSAxKSB7CisJCXVuc2lnbmVkIGlu dCBncnBfdG90ID0gMDsKKwkJc3RydWN0IGNudF9pdGVtICppdDsKKworCQlpZiAoaXRlbSAhPSBw YXJlbnQtPml0ZW1zKQorCQkJcmV0dXJuIDA7CisKKwkJZm9yIChpdCA9IHBhcmVudC0+aXRlbXM7 IGl0LT5wbXU7IGl0KyspIHsKKwkJCWlmICghaXQtPnBtdS0+cHJlc2VudCkKKwkJCQljb250aW51 ZTsKKworCQkJZ3JwX3RvdCArPSAxICsgaXQtPmZtdF9kICsgKGl0LT5mbXRfZGQgPyAxIDogMCk7 CisJCX0KKworCQlwcmludGYoIiUqcyAiLCBncnBfdG90IC0gMSwgcGFyZW50LT5kaXNwbGF5X25h bWUpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKGhlYWRlcnMgPT0gMikgeworCQlwcmludGYo IiUqcyAiLCBmbXRfdG90LCBpdGVtLT51bml0ID86IGl0ZW0tPm5hbWUpOworCQlyZXR1cm4gMDsK Kwl9CisKKwl2YWwgPSBwbXVfY2FsYygmaXRlbS0+cG11LT52YWwsIGl0ZW0tPmQsIGl0ZW0tPnQs IGl0ZW0tPnMpOworCisJbGVuID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiUqLipmIiwg Zm10X3RvdCwgaXRlbS0+Zm10X2RkLCB2YWwpOworCWlmIChsZW4gPCAwIHx8IGxlbiA9PSBzaXpl b2YoYnVmKSkKKwkJZmlsbF9zdHIoYnVmLCBzaXplb2YoYnVmKSwgJ1gnLCBmbXRfdG90KTsKKwor CWxlbiA9IHByaW50ZigiJXMgIiwgYnVmKTsKKworCXJldHVybiBsZW4gPiAwID8gbGVuIDogMDsK K30KKworc3RhdGljIHZvaWQKK3Rlcm1fb3Blbl9zdHJ1Y3QoY29uc3QgY2hhciAqbmFtZSkKK3sK K30KKworc3RhdGljIHZvaWQKK3Rlcm1fY2xvc2Vfc3RydWN0KHZvaWQpCit7Cit9CisKK3N0YXRp YyB1bnNpZ25lZCBpbnQKK3Rlcm1fYWRkX21lbWJlcihjb25zdCBzdHJ1Y3QgY250X2dyb3VwICpw YXJlbnQsIHN0cnVjdCBjbnRfaXRlbSAqaXRlbSwKKwkJdW5zaWduZWQgaW50IGhlYWRlcnMpCit7 CisJdW5zaWduZWQgaW50IGZtdF90b3QgPSBpdGVtLT5mbXRfZCArIChpdGVtLT5mbXRfZGQgPyAx IDogMCk7CisJZG91YmxlIHZhbDsKKwlpbnQgbGVuOworCisJaWYgKCFpdGVtLT5wbXUpCisJCXJl dHVybiAwOworCisJYXNzZXJ0KGZtdF90b3QgPD0gc2l6ZW9mKGl0ZW0tPmJ1ZikpOworCisJaWYg KCFpdGVtLT5wbXUtPnByZXNlbnQpIHsKKwkJZmlsbF9zdHIoaXRlbS0+YnVmLCBzaXplb2YoaXRl bS0+YnVmKSwgJy0nLCBmbXRfdG90KTsKKwkJcmV0dXJuIDE7CisJfQorCisJdmFsID0gcG11X2Nh bGMoJml0ZW0tPnBtdS0+dmFsLCBpdGVtLT5kLCBpdGVtLT50LCBpdGVtLT5zKTsKKwlsZW4gPSBz bnByaW50ZihpdGVtLT5idWYsIHNpemVvZihpdGVtLT5idWYpLAorCQkgICAgICAgIiUqLipmIiwK KwkJICAgICAgIGZtdF90b3QsIGl0ZW0tPmZtdF9kZCwgdmFsKTsKKworCWlmIChsZW4gPCAwIHx8 IGxlbiA9PSBzaXplb2YoaXRlbS0+YnVmKSkKKwkJZmlsbF9zdHIoaXRlbS0+YnVmLCBzaXplb2Yo aXRlbS0+YnVmKSwgJ1gnLCBmbXRfdG90KTsKKworCXJldHVybiAxOworfQorCitzdHJ1Y3QgcHJp bnRfb3BlcmF0aW9ucyB7CisJdm9pZCAoKm9wZW5fc3RydWN0KShjb25zdCBjaGFyICpuYW1lKTsK Kwl2b2lkICgqY2xvc2Vfc3RydWN0KSh2b2lkKTsKKwl1bnNpZ25lZCBpbnQgKCphZGRfbWVtYmVy KShjb25zdCBzdHJ1Y3QgY250X2dyb3VwICpwYXJlbnQsCisJCQkJICAgc3RydWN0IGNudF9pdGVt ICppdGVtLAorCQkJCSAgIHVuc2lnbmVkIGludCBoZWFkZXJzKTsKKwlib29sICgqcHJpbnRfZ3Jv dXApKHN0cnVjdCBjbnRfZ3JvdXAgKmdyb3VwLCB1bnNpZ25lZCBpbnQgaGVhZGVycyk7Cit9Owor CitzdGF0aWMgY29uc3Qgc3RydWN0IHByaW50X29wZXJhdGlvbnMgKnBvcHM7CisKK3N0YXRpYyB1 bnNpZ25lZCBpbnQKK3ByZXNlbnRfaW5fZ3JvdXAoY29uc3Qgc3RydWN0IGNudF9ncm91cCAqZ3Jw KQoreworCXVuc2lnbmVkIGludCBwcmVzZW50ID0gMDsKKwlzdHJ1Y3QgY250X2l0ZW0gKml0ZW07 CisKKwlmb3IgKGl0ZW0gPSBncnAtPml0ZW1zOyBpdGVtLT5uYW1lOyBpdGVtKyspIHsKKwkJaWYg KGl0ZW0tPnBtdSAmJiBpdGVtLT5wbXUtPnByZXNlbnQpCisJCQlwcmVzZW50Kys7CisJfQorCisJ cmV0dXJuIHByZXNlbnQ7Cit9CisKK3N0YXRpYyBib29sCitwcmludF9ncm91cChzdHJ1Y3QgY250 X2dyb3VwICpncnAsIHVuc2lnbmVkIGludCBoZWFkZXJzKQoreworCXVuc2lnbmVkIGludCBjb25z dW1lZCA9IDA7CisJc3RydWN0IGNudF9pdGVtICppdGVtOworCisJaWYgKCFwcmVzZW50X2luX2dy b3VwKGdycCkpCisJCXJldHVybiBmYWxzZTsKKworCXBvcHMtPm9wZW5fc3RydWN0KGdycC0+bmFt ZSk7CisKKwlmb3IgKGl0ZW0gPSBncnAtPml0ZW1zOyBpdGVtLT5uYW1lOyBpdGVtKyspCisJCWNv bnN1bWVkICs9IHBvcHMtPmFkZF9tZW1iZXIoZ3JwLCBpdGVtLCBoZWFkZXJzKTsKKworCXBvcHMt PmNsb3NlX3N0cnVjdCgpOworCisJcmV0dXJuIGNvbnN1bWVkOworfQorCitzdGF0aWMgYm9vbAor dGVybV9wcmludF9ncm91cChzdHJ1Y3QgY250X2dyb3VwICpncnAsIHVuc2lnbmVkIGludCBoZWFk ZXJzKQoreworCXVuc2lnbmVkIGludCBjb25zdW1lZCA9IDA7CisJc3RydWN0IGNudF9pdGVtICpp dGVtOworCisJcG9wcy0+b3Blbl9zdHJ1Y3QoZ3JwLT5uYW1lKTsKKworCWZvciAoaXRlbSA9IGdy cC0+aXRlbXM7IGl0ZW0tPm5hbWU7IGl0ZW0rKykKKwkJY29uc3VtZWQgKz0gcG9wcy0+YWRkX21l bWJlcihncnAsIGl0ZW0sIGhlYWRlcnMpOworCisJcG9wcy0+Y2xvc2Vfc3RydWN0KCk7CisKKwly ZXR1cm4gY29uc3VtZWQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHJpbnRfb3BlcmF0aW9u cyBqc29uX3BvcHMgPSB7CisJLm9wZW5fc3RydWN0ID0ganNvbl9vcGVuX3N0cnVjdCwKKwkuY2xv c2Vfc3RydWN0ID0ganNvbl9jbG9zZV9zdHJ1Y3QsCisJLmFkZF9tZW1iZXIgPSBqc29uX2FkZF9t ZW1iZXIsCisJLnByaW50X2dyb3VwID0gcHJpbnRfZ3JvdXAsCit9OworCitzdGF0aWMgY29uc3Qg c3RydWN0IHByaW50X29wZXJhdGlvbnMgc3Rkb3V0X3BvcHMgPSB7CisJLm9wZW5fc3RydWN0ID0g c3Rkb3V0X29wZW5fc3RydWN0LAorCS5jbG9zZV9zdHJ1Y3QgPSBzdGRvdXRfY2xvc2Vfc3RydWN0 LAorCS5hZGRfbWVtYmVyID0gc3Rkb3V0X2FkZF9tZW1iZXIsCisJLnByaW50X2dyb3VwID0gcHJp bnRfZ3JvdXAsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHByaW50X29wZXJhdGlvbnMgdGVy bV9wb3BzID0geworCS5vcGVuX3N0cnVjdCA9IHRlcm1fb3Blbl9zdHJ1Y3QsCisJLmNsb3NlX3N0 cnVjdCA9IHRlcm1fY2xvc2Vfc3RydWN0LAorCS5hZGRfbWVtYmVyID0gdGVybV9hZGRfbWVtYmVy LAorCS5wcmludF9ncm91cCA9IHRlcm1fcHJpbnRfZ3JvdXAsCit9OworCitzdGF0aWMgYm9vbCBw cmludF9ncm91cHMoc3RydWN0IGNudF9ncm91cCAqKmdyb3VwcykKK3sKKwl1bnNpZ25lZCBpbnQg aGVhZGVycyA9IHN0ZG91dF9saW5lcyAlIFNURE9VVF9IRUFERVJfUkVQRUFUICsgMTsKKwlib29s IHByaW50X2RhdGEgPSB0cnVlOworCisJaWYgKG91dHB1dF9tb2RlID09IFNURE9VVCAmJiAoaGVh ZGVycyA9PSAxIHx8IGhlYWRlcnMgPT0gMikpIHsKKwkJZm9yIChzdHJ1Y3QgY250X2dyb3VwICoq Z3JwID0gZ3JvdXBzOyAqZ3JwOyBncnArKykKKwkJCXByaW50X2RhdGEgPSBwb3BzLT5wcmludF9n cm91cCgqZ3JwLCBoZWFkZXJzKTsKKwl9CisKKwlmb3IgKHN0cnVjdCBjbnRfZ3JvdXAgKipncnAg PSBncm91cHM7IHByaW50X2RhdGEgJiYgKmdycDsgZ3JwKyspCisJCXBvcHMtPnByaW50X2dyb3Vw KCpncnAsIGZhbHNlKTsKKworCXJldHVybiBwcmludF9kYXRhOworfQorCitzdGF0aWMgaW50Citw cmludF9oZWFkZXIoc3RydWN0IGVuZ2luZXMgKmVuZ2luZXMsIGRvdWJsZSB0LAorCSAgICAgaW50 IGxpbmVzLCBpbnQgY29uX3csIGludCBjb25faCwgYm9vbCAqY29uc3VtZWQpCit7CisJc3RydWN0 IHBtdV9jb3VudGVyIGZha2VfcG11ID0geworCQkucHJlc2VudCA9IHRydWUsCisJCS52YWwuY3Vy ID0gMSwKKwl9OworCXN0cnVjdCBjbnRfaXRlbSBwZXJpb2RfaXRlbXNbXSA9IHsKKwkJeyAmZmFr ZV9wbXUsIDAsIDAsIDEuMCwgMS4wLCB0ICogMWUzLCAiZHVyYXRpb24iIH0sCisJCXsgTlVMTCwg MCwgMCwgMC4wLCAwLjAsIDAuMCwgInVuaXQiLCAibXMiIH0sCisJCXsgfSwKKwl9OworCXN0cnVj dCBjbnRfZ3JvdXAgcGVyaW9kX2dyb3VwID0geworCQkubmFtZSA9ICJwZXJpb2QiLAorCQkuaXRl bXMgPSBwZXJpb2RfaXRlbXMsCisJfTsKKwlzdHJ1Y3QgY250X2l0ZW0gZnJlcV9pdGVtc1tdID0g eworCQl7ICZlbmdpbmVzLT5mcmVxX3JlcSwgNCwgMCwgMS4wLCB0LCAxLCAicmVxdWVzdGVkIiwg InJlcSIgfSwKKwkJeyAmZW5naW5lcy0+ZnJlcV9hY3QsIDQsIDAsIDEuMCwgdCwgMSwgImFjdHVh bCIsICJhY3QiIH0sCisJCXsgTlVMTCwgMCwgMCwgMC4wLCAwLjAsIDAuMCwgInVuaXQiLCAiTUh6 IiB9LAorCQl7IH0sCisJfTsKKwlzdHJ1Y3QgY250X2dyb3VwIGZyZXFfZ3JvdXAgPSB7CisJCS5u YW1lID0gImZyZXF1ZW5jeSIsCisJCS5kaXNwbGF5X25hbWUgPSAiRnJlcSBNSHoiLAorCQkuaXRl bXMgPSBmcmVxX2l0ZW1zLAorCX07CisJc3RydWN0IGNudF9pdGVtIGlycV9pdGVtc1tdID0gewor CQl7ICZlbmdpbmVzLT5pcnEsIDgsIDAsIDEuMCwgdCwgMSwgImNvdW50IiwgIi9zIiB9LAorCQl7 IE5VTEwsIDAsIDAsIDAuMCwgMC4wLCAwLjAsICJ1bml0IiwgImlycS9zIiB9LAorCQl7IH0sCisJ fTsKKwlzdHJ1Y3QgY250X2dyb3VwIGlycV9ncm91cCA9IHsKKwkJLm5hbWUgPSAiaW50ZXJydXB0 cyIsCisJCS5kaXNwbGF5X25hbWUgPSAiSVJRIiwKKwkJLml0ZW1zID0gaXJxX2l0ZW1zLAorCX07 CisJc3RydWN0IGNudF9pdGVtIHJjNl9pdGVtc1tdID0geworCQl7ICZlbmdpbmVzLT5yYzYsIDMs IDAsIDFlOSwgdCwgMTAwLCAidmFsdWUiLCAiJSIgfSwKKwkJeyBOVUxMLCAwLCAwLCAwLjAsIDAu MCwgMC4wLCAidW5pdCIsICIlIiB9LAorCQl7IH0sCisJfTsKKwlzdHJ1Y3QgY250X2dyb3VwIHJj Nl9ncm91cCA9IHsKKwkJLm5hbWUgPSAicmM2IiwKKwkJLmRpc3BsYXlfbmFtZSA9ICJSQzYiLAor CQkuaXRlbXMgPSByYzZfaXRlbXMsCisJfTsKKwlzdHJ1Y3QgY250X2l0ZW0gcG93ZXJfaXRlbXNb XSA9IHsKKwkJeyAmZW5naW5lcy0+cmFwbCwgNCwgMiwgMS4wLCB0LCBlbmdpbmVzLT5yYXBsX3Nj YWxlLCAidmFsdWUiLAorCQkgICJXIiB9LAorCQl7IE5VTEwsIDAsIDAsIDAuMCwgMC4wLCAwLjAs ICJ1bml0IiwgIlciIH0sCisJCXsgfSwKKwl9OworCXN0cnVjdCBjbnRfZ3JvdXAgcG93ZXJfZ3Jv dXAgPSB7CisJCS5uYW1lID0gInBvd2VyIiwKKwkJLmRpc3BsYXlfbmFtZSA9ICJQb3dlciIsCisJ CS5pdGVtcyA9IHBvd2VyX2l0ZW1zLAorCX07CisJc3RydWN0IGNudF9ncm91cCAqZ3JvdXBzW10g PSB7CisJCSZwZXJpb2RfZ3JvdXAsCisJCSZmcmVxX2dyb3VwLAorCQkmaXJxX2dyb3VwLAorCQkm cmM2X2dyb3VwLAorCQkmcG93ZXJfZ3JvdXAsCisJCU5VTEwKKwl9OworCisJaWYgKG91dHB1dF9t b2RlICE9IEpTT04pCisJCW1lbW1vdmUoJmdyb3Vwc1swXSwgJmdyb3Vwc1sxXSwKKwkJCXNpemVv Zihncm91cHMpIC0gc2l6ZW9mKGdyb3Vwc1swXSkpOworCisJcG9wcy0+b3Blbl9zdHJ1Y3QoTlVM TCk7CisKKwkqY29uc3VtZWQgPSBwcmludF9ncm91cHMoZ3JvdXBzKTsKKworCWlmIChvdXRwdXRf bW9kZSA9PSBJTlRFUkFDVElWRSkgeworCQlwcmludGYoIlwwMzNbSFwwMzNbSiIpOworCisJCWlm IChsaW5lcysrIDwgY29uX2gpCisJCQlwcmludGYoImludGVsLWdwdS10b3AgLSAlcy8lcyBNSHo7 ICAlcyUlIFJDNjsgJXMgJXM7ICVzIGlycXMvc1xuIiwKKwkJCSAgICAgICBmcmVxX2l0ZW1zWzFd LmJ1ZiwgZnJlcV9pdGVtc1swXS5idWYsCisJCQkgICAgICAgcmM2X2l0ZW1zWzBdLmJ1ZiwgcG93 ZXJfaXRlbXNbMF0uYnVmLAorCQkJICAgICAgIGVuZ2luZXMtPnJhcGxfdW5pdCwKKwkJCSAgICAg ICBpcnFfaXRlbXNbMF0uYnVmKTsKKworCQlpZiAobGluZXMrKyA8IGNvbl9oKQorCQkJcHJpbnRm KCJcbiIpOworCX0KKworCXJldHVybiBsaW5lczsKK30KKworc3RhdGljIGludAorcHJpbnRfaW1j KHN0cnVjdCBlbmdpbmVzICplbmdpbmVzLCBkb3VibGUgdCwgaW50IGxpbmVzLCBpbnQgY29uX3cs IGludCBjb25faCkKK3sKKwlzdHJ1Y3QgY250X2l0ZW0gaW1jX2l0ZW1zW10gPSB7CisJCXsgJmVu Z2luZXMtPmltY19yZWFkcywgNiwgMCwgMS4wLCB0LCBlbmdpbmVzLT5pbWNfcmVhZHNfc2NhbGUs CisJCSAgInJlYWRzIiwgInJkIiB9LAorCQl7ICZlbmdpbmVzLT5pbWNfd3JpdGVzLCA2LCAwLCAx LjAsIHQsIGVuZ2luZXMtPmltY193cml0ZXNfc2NhbGUsCisJCSAgIndyaXRlcyIsICJ3ciIgfSwK KwkJeyBOVUxMLCAwLCAwLCAwLjAsIDAuMCwgMC4wLCAidW5pdCIgfSwKKwkJeyB9LAorCX07CisJ c3RydWN0IGNudF9ncm91cCBpbWNfZ3JvdXAgPSB7CisJCS5uYW1lID0gImltYy1iYW5kd2lkdGgi LAorCQkuaXRlbXMgPSBpbWNfaXRlbXMsCisJfTsKKwlzdHJ1Y3QgY250X2dyb3VwICpncm91cHNb XSA9IHsKKwkJJmltY19ncm91cCwKKwkJTlVMTAorCX07CisJaW50IHJldDsKKworCXJldCA9IGFz cHJpbnRmKChjaGFyICoqKSZpbWNfZ3JvdXAuZGlzcGxheV9uYW1lLCAiSU1DICVzL3MiLAorCQkJ ZW5naW5lcy0+aW1jX3JlYWRzX3VuaXQpOworCWFzc2VydChyZXQgPj0gMCk7CisKKwlyZXQgPSBh c3ByaW50ZigoY2hhciAqKikmaW1jX2l0ZW1zWzJdLnVuaXQsICIlcy9zIiwKKwkJCWVuZ2luZXMt PmltY19yZWFkc191bml0KTsKKwlhc3NlcnQocmV0ID49IDApOworCisJcHJpbnRfZ3JvdXBzKGdy b3Vwcyk7CisKKwlmcmVlKCh2b2lkICopaW1jX2dyb3VwLmRpc3BsYXlfbmFtZSk7CisJZnJlZSgo dm9pZCAqKWltY19pdGVtc1syXS51bml0KTsKKworCWlmIChvdXRwdXRfbW9kZSA9PSBJTlRFUkFD VElWRSkgeworCQlpZiAobGluZXMrKyA8IGNvbl9oKQorCQkJcHJpbnRmKCIgICAgICBJTUMgcmVh ZHM6ICAgJXMgJXMvc1xuIiwKKwkJCSAgICAgICBpbWNfaXRlbXNbMF0uYnVmLCBlbmdpbmVzLT5p bWNfcmVhZHNfdW5pdCk7CisKKwkJaWYgKGxpbmVzKysgPCBjb25faCkKKwkJCXByaW50ZigiICAg ICBJTUMgd3JpdGVzOiAgICVzICVzL3NcbiIsCisJCQkgICAgICAgaW1jX2l0ZW1zWzFdLmJ1Ziwg ZW5naW5lcy0+aW1jX3dyaXRlc191bml0KTsKKworCQlpZiAobGluZXMrKyA8IGNvbl9oKQorCQkJ cHJpbnRmKCJcbiIpOworCX0KKworCXJldHVybiBsaW5lczsKK30KKworc3RhdGljIGludAorcHJp bnRfZW5naW5lc19oZWFkZXIoc3RydWN0IGVuZ2luZXMgKmVuZ2luZXMsIGRvdWJsZSB0LAorCQkg ICAgIGludCBsaW5lcywgaW50IGNvbl93LCBpbnQgY29uX2gpCit7CisJZm9yICh1bnNpZ25lZCBp bnQgaSA9IDA7CisJICAgICBpIDwgZW5naW5lcy0+bnVtX2VuZ2luZXMgJiYgbGluZXMgPCBjb25f aDsKKwkgICAgIGkrKykgeworCQlzdHJ1Y3QgZW5naW5lICplbmdpbmUgPSBlbmdpbmVfcHRyKGVu Z2luZXMsIGkpOworCisJCWlmICghZW5naW5lLT5udW1fY291bnRlcnMpCisJCQljb250aW51ZTsK KworCQlwb3BzLT5vcGVuX3N0cnVjdCgiZW5naW5lcyIpOworCisJCWlmIChvdXRwdXRfbW9kZSA9 PSBJTlRFUkFDVElWRSkgeworCQkJY29uc3QgY2hhciAqYSA9ICIgICAgICAgICAgRU5HSU5FICAg ICAgQlVTWSAiOworCQkJY29uc3QgY2hhciAqYiA9ICIgTUlfU0VNQSBNSV9XQUlUIjsKKworCQkJ cHJpbnRmKCJcMDMzWzdtJXMlKnMlc1wwMzNbMG1cbiIsCisJCQkgICAgICAgYSwgKGludCkoY29u X3cgLSAxIC0gc3RybGVuKGEpIC0gc3RybGVuKGIpKSwKKwkJCSAgICAgICAiICIsIGIpOworCisJ CQlsaW5lcysrOworCQl9CisKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGxpbmVzOworfQorCitz dGF0aWMgaW50CitwcmludF9lbmdpbmUoc3RydWN0IGVuZ2luZXMgKmVuZ2luZXMsIHVuc2lnbmVk IGludCBpLCBkb3VibGUgdCwKKwkgICAgIGludCBsaW5lcywgaW50IGNvbl93LCBpbnQgY29uX2gp Cit7CisJc3RydWN0IGVuZ2luZSAqZW5naW5lID0gZW5naW5lX3B0cihlbmdpbmVzLCBpKTsKKwlz dHJ1Y3QgY250X2l0ZW0gZW5naW5lX2l0ZW1zW10gPSB7CisJCXsgJmVuZ2luZS0+YnVzeSwgNiwg MiwgMWU5LCB0LCAxMDAsICJidXN5IiwgIiUiIH0sCisJCXsgJmVuZ2luZS0+c2VtYSwgMywgMCwg MWU5LCB0LCAxMDAsICJzZW1hIiwgInNlIiB9LAorCQl7ICZlbmdpbmUtPndhaXQsIDMsIDAsIDFl OSwgdCwgMTAwLCAid2FpdCIsICJ3YSIgfSwKKwkJeyBOVUxMLCAwLCAwLCAwLjAsIDAuMCwgMC4w LCAidW5pdCIsICIlIiB9LAorCQl7IH0sCisJfTsKKwlzdHJ1Y3QgY250X2dyb3VwIGVuZ2luZV9n cm91cCA9IHsKKwkJLm5hbWUgPSBlbmdpbmUtPmRpc3BsYXlfbmFtZSwKKwkJLmRpc3BsYXlfbmFt ZSA9IGVuZ2luZS0+c2hvcnRfbmFtZSwKKwkJLml0ZW1zID0gZW5naW5lX2l0ZW1zLAorCX07CisJ c3RydWN0IGNudF9ncm91cCAqZ3JvdXBzW10gPSB7CisJCSZlbmdpbmVfZ3JvdXAsCisJCU5VTEwK Kwl9OworCisJaWYgKCFlbmdpbmUtPm51bV9jb3VudGVycykKKwkJcmV0dXJuIGxpbmVzOworCisJ cHJpbnRfZ3JvdXBzKGdyb3Vwcyk7CisKKwlpZiAob3V0cHV0X21vZGUgPT0gSU5URVJBQ1RJVkUp IHsKKwkJdW5zaWduZWQgaW50IG1heF93ID0gY29uX3cgLSAxOworCQl1bnNpZ25lZCBpbnQgbGVu OworCQljaGFyIGJ1ZlsxMjhdOworCQlkb3VibGUgdmFsOworCisJCWxlbiA9IHNucHJpbnRmKGJ1 Ziwgc2l6ZW9mKGJ1ZiksICIgICAgJXMlJSAgICAlcyUlIiwKKwkJCSAgICAgICBlbmdpbmVfaXRl bXNbMV0uYnVmLCBlbmdpbmVfaXRlbXNbMl0uYnVmKTsKKworCQlsZW4gKz0gcHJpbnRmKCIlMTZz ICVzJSUgIiwKKwkJCSAgICAgIGVuZ2luZS0+ZGlzcGxheV9uYW1lLCBlbmdpbmVfaXRlbXNbMF0u YnVmKTsKKworCQl2YWwgPSBwbXVfY2FsYygmZW5naW5lLT5idXN5LnZhbCwgMWU5LCB0LCAxMDAp OworCQlwcmludF9wZXJjZW50YWdlX2Jhcih2YWwsIG1heF93IC0gbGVuKTsKKworCQlwcmludGYo IiVzXG4iLCBidWYpOworCisJCWxpbmVzKys7CisJfQorCisJcmV0dXJuIGxpbmVzOworfQorCitz dGF0aWMgaW50CitwcmludF9lbmdpbmVzX2Zvb3RlcihzdHJ1Y3QgZW5naW5lcyAqZW5naW5lcywg ZG91YmxlIHQsCisJCSAgICAgaW50IGxpbmVzLCBpbnQgY29uX3csIGludCBjb25faCkKK3sKKwlw b3BzLT5jbG9zZV9zdHJ1Y3QoKTsKKwlwb3BzLT5jbG9zZV9zdHJ1Y3QoKTsKKworCWlmIChvdXRw dXRfbW9kZSA9PSBJTlRFUkFDVElWRSkgeworCQlpZiAobGluZXMrKyA8IGNvbl9oKQorCQkJcHJp bnRmKCJcbiIpOworCX0KKworCXJldHVybiBsaW5lczsKK30KKworc3RhdGljIGJvb2wgc3RvcF90 b3A7CisKK3N0YXRpYyB2b2lkIHNpZ2ludF9oYW5kbGVyKGludCAgc2lnKQoreworCXN0b3BfdG9w ID0gdHJ1ZTsKK30KKwogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewogCXVuc2ln bmVkIGludCBwZXJpb2RfdXMgPSBERUZBVUxUX1BFUklPRF9NUyAqIDEwMDA7CkBAIC03MTEsMTEg KzEyNTMsMTcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCWludCByZXQsIGNo OwogCiAJLyogUGFyc2Ugb3B0aW9ucyAqLwotCXdoaWxlICgoY2ggPSBnZXRvcHQoYXJnYywgYXJn diwgInM6aCIpKSAhPSAtMSkgeworCXdoaWxlICgoY2ggPSBnZXRvcHQoYXJnYywgYXJndiwgInM6 SmxoIikpICE9IC0xKSB7CiAJCXN3aXRjaCAoY2gpIHsKIAkJY2FzZSAncyc6CiAJCQlwZXJpb2Rf dXMgPSBhdG9pKG9wdGFyZykgKiAxMDAwOwogCQkJYnJlYWs7CisJCWNhc2UgJ0onOgorCQkJb3V0 cHV0X21vZGUgPSBKU09OOworCQkJYnJlYWs7CisJCWNhc2UgJ2wnOgorCQkJb3V0cHV0X21vZGUg PSBTVERPVVQ7CisJCQlicmVhazsKIAkJY2FzZSAnaCc6CiAJCQl1c2FnZShhcmd2WzBdKTsKIAkJ CWV4aXQoMCk7CkBAIC03MjYsNiArMTI3NCwzMSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAq KmFyZ3YpCiAJCX0KIAl9CiAKKwlpZiAob3V0cHV0X21vZGUgPT0gSU5URVJBQ1RJVkUgJiYgaXNh dHR5KDEpICE9IDEpCisJCW91dHB1dF9tb2RlID0gU1RET1VUOworCisJaWYgKG91dHB1dF9tb2Rl ICE9IElOVEVSQUNUSVZFKSB7CisJCXNpZ2hhbmRsZXJfdCBzaWcgPSBzaWduYWwoU0lHSU5ULCBz aWdpbnRfaGFuZGxlcik7CisKKwkJaWYgKHNpZyA9PSBTSUdfRVJSKQorCQkJZnByaW50ZihzdGRl cnIsICJGYWlsZWQgdG8gaW5zdGFsbCBzaWduYWwgaGFuZGxlciFcbiIpOworCX0KKworCXN3aXRj aCAob3V0cHV0X21vZGUpIHsKKwljYXNlIElOVEVSQUNUSVZFOgorCQlwb3BzID0gJnRlcm1fcG9w czsKKwkJYnJlYWs7CisJY2FzZSBTVERPVVQ6CisJCXBvcHMgPSAmc3Rkb3V0X3BvcHM7CisJCWJy ZWFrOworCWNhc2UgSlNPTjoKKwkJcG9wcyA9ICZqc29uX3BvcHM7CisJCWJyZWFrOworCWRlZmF1 bHQ6CisJCWFzc2VydCgwKTsKKwkJYnJlYWs7CisJfTsKKwogCWVuZ2luZXMgPSBkaXNjb3Zlcl9l bmdpbmVzKCk7CiAJaWYgKCFlbmdpbmVzKSB7CiAJCWZwcmludGYoc3RkZXJyLApAQCAtNzQzLDIx ICsxMzE2LDE2IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAogCXBtdV9zYW1w bGUoZW5naW5lcyk7CiAKLQlmb3IgKDs7KSB7Ci0JCWRvdWJsZSB0OwotI2RlZmluZSBCVUZTWiAx NgotCQljaGFyIGZyZXFbQlVGU1pdOwotCQljaGFyIGZhY3RbQlVGU1pdOwotCQljaGFyIGlycVtC VUZTWl07Ci0JCWNoYXIgcmM2W0JVRlNaXTsKLQkJY2hhciBwb3dlcltCVUZTWl07Ci0JCWNoYXIg cmVhZHNbQlVGU1pdOwotCQljaGFyIHdyaXRlc1tCVUZTWl07Ci0JCXN0cnVjdCB3aW5zaXplIHdz OworCXdoaWxlICghc3RvcF90b3ApIHsKKwkJYm9vbCBjb25zdW1lZCA9IGZhbHNlOwogCQlpbnQg bGluZXMgPSAwOworCQlzdHJ1Y3Qgd2luc2l6ZSB3czsKKwkJZG91YmxlIHQ7CiAKIAkJLyogVXBk YXRlIHRlcm1pbmFsIHNpemUuICovCi0JCWlmIChpb2N0bCgwLCBUSU9DR1dJTlNaLCAmd3MpICE9 IC0xKSB7CisJCWlmIChvdXRwdXRfbW9kZSAhPSBJTlRFUkFDVElWRSkgeworCQkJY29uX3cgPSBj b25faCA9IElOVF9NQVg7CisJCX0gZWxzZSBpZiAoaW9jdGwoMCwgVElPQ0dXSU5TWiwgJndzKSAh PSAtMSkgewogCQkJY29uX3cgPSB3cy53c19jb2w7CiAJCQljb25faCA9IHdzLndzX3JvdzsKIAkJ fQpAQCAtNzY1LDg3ICsxMzMzLDMyIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikK IAkJcG11X3NhbXBsZShlbmdpbmVzKTsKIAkJdCA9IChkb3VibGUpKGVuZ2luZXMtPnRzLmN1ciAt IGVuZ2luZXMtPnRzLnByZXYpIC8gMWU5OwogCi0JCXByaW50ZigiXDAzM1tIXDAzM1tKIik7Ci0K LQkJcG11X2NhbGMoJmVuZ2luZXMtPmZyZXFfcmVxLCBmcmVxLCBCVUZTWiwgNCwgMCwgMS4wLCB0 LCAxKTsKLQkJcG11X2NhbGMoJmVuZ2luZXMtPmZyZXFfYWN0LCBmYWN0LCBCVUZTWiwgNCwgMCwg MS4wLCB0LCAxKTsKLQkJcG11X2NhbGMoJmVuZ2luZXMtPmlycSwgaXJxLCBCVUZTWiwgOCwgMCwg MS4wLCB0LCAxKTsKLQkJcG11X2NhbGMoJmVuZ2luZXMtPnJjNiwgcmM2LCBCVUZTWiwgMywgMCwg MWU5LCB0LCAxMDApOwotCQlwbXVfY2FsYygmZW5naW5lcy0+cmFwbCwgcG93ZXIsIEJVRlNaLCA0 LCAyLCAxLjAsIHQsCi0JCQkgZW5naW5lcy0+cmFwbF9zY2FsZSk7Ci0JCXBtdV9jYWxjKCZlbmdp bmVzLT5pbWNfcmVhZHMsIHJlYWRzLCBCVUZTWiwgNiwgMCwgMS4wLCB0LAotCQkJIGVuZ2luZXMt PmltY19yZWFkc19zY2FsZSk7Ci0JCXBtdV9jYWxjKCZlbmdpbmVzLT5pbWNfd3JpdGVzLCB3cml0 ZXMsIEJVRlNaLCA2LCAwLCAxLjAsIHQsCi0JCQkgZW5naW5lcy0+aW1jX3dyaXRlc19zY2FsZSk7 Ci0KLQkJaWYgKGxpbmVzKysgPCBjb25faCkKLQkJCXByaW50ZigiaW50ZWwtZ3B1LXRvcCAtICVz LyVzIE1IejsgICVzJSUgUkM2OyAlcyAlczsgJXMgaXJxcy9zXG4iLAotCQkJICAgICAgIGZhY3Qs IGZyZXEsIHJjNiwgcG93ZXIsIGVuZ2luZXMtPnJhcGxfdW5pdCwgaXJxKTsKLQotCQlpZiAobGlu ZXMrKyA8IGNvbl9oKQotCQkJcHJpbnRmKCJcbiIpOwotCi0JCWlmIChlbmdpbmVzLT5pbWNfZmQp IHsKLQkJCWlmIChsaW5lcysrIDwgY29uX2gpCi0JCQkJcHJpbnRmKCIgICAgICBJTUMgcmVhZHM6 ICAgJXMgJXMvc1xuIiwKLQkJCQkgICAgICAgcmVhZHMsIGVuZ2luZXMtPmltY19yZWFkc191bml0 KTsKLQotCQkJaWYgKGxpbmVzKysgPCBjb25faCkKLQkJCQlwcmludGYoIiAgICAgSU1DIHdyaXRl czogICAlcyAlcy9zXG4iLAotCQkJCSAgICAgICB3cml0ZXMsIGVuZ2luZXMtPmltY193cml0ZXNf dW5pdCk7Ci0KLQkJCWlmICgrK2xpbmVzIDwgY29uX2gpCi0JCQkJcHJpbnRmKCJcbiIpOwotCQl9 Ci0KLQkJZm9yIChpID0gMDsgaSA8IGVuZ2luZXMtPm51bV9lbmdpbmVzOyBpKyspIHsKLQkJCXN0 cnVjdCBlbmdpbmUgKmVuZ2luZSA9IGVuZ2luZV9wdHIoZW5naW5lcywgaSk7Ci0KLQkJCWlmIChl bmdpbmUtPm51bV9jb3VudGVycyAmJiBsaW5lcyA8IGNvbl9oKSB7Ci0JCQkJY29uc3QgY2hhciAq YSA9ICIgICAgICAgICAgRU5HSU5FICAgICAgQlVTWSAiOwotCQkJCWNvbnN0IGNoYXIgKmIgPSAi IE1JX1NFTUEgTUlfV0FJVCI7Ci0KLQkJCQlwcmludGYoIlwwMzNbN20lcyUqcyVzXDAzM1swbVxu IiwKLQkJCQkgICAgICAgYSwKLQkJCQkgICAgICAgKGludCkoY29uX3cgLSAxIC0gc3RybGVuKGEp IC0gc3RybGVuKGIpKSwKLQkJCQkgICAgICAgIiAiLCBiKTsKLQkJCQlsaW5lcysrOwotCQkJCWJy ZWFrOwotCQkJfQotCQl9Ci0KLQkJZm9yIChpID0gMDsgaSA8IGVuZ2luZXMtPm51bV9lbmdpbmVz ICYmIGxpbmVzIDwgY29uX2g7IGkrKykgewotCQkJc3RydWN0IGVuZ2luZSAqZW5naW5lID0gZW5n aW5lX3B0cihlbmdpbmVzLCBpKTsKLQkJCXVuc2lnbmVkIGludCBtYXhfdyA9IGNvbl93IC0gMTsK LQkJCXVuc2lnbmVkIGludCBsZW47Ci0JCQljaGFyIHNlbWFbQlVGU1pdOwotCQkJY2hhciB3YWl0 W0JVRlNaXTsKLQkJCWNoYXIgYnVzeVtCVUZTWl07Ci0JCQljaGFyIGJ1ZlsxMjhdOwotCQkJZG91 YmxlIHZhbDsKLQotCQkJaWYgKCFlbmdpbmUtPm51bV9jb3VudGVycykKLQkJCQljb250aW51ZTsK KwkJaWYgKHN0b3BfdG9wKQorCQkJYnJlYWs7CiAKLQkJCXBtdV9jYWxjKCZlbmdpbmUtPnNlbWEs IHNlbWEsIEJVRlNaLCAzLCAwLCAxZTksIHQsIDEwMCk7Ci0JCQlwbXVfY2FsYygmZW5naW5lLT53 YWl0LCB3YWl0LCBCVUZTWiwgMywgMCwgMWU5LCB0LCAxMDApOwotCQkJbGVuID0gc25wcmludGYo YnVmLCBzaXplb2YoYnVmKSwgIiAgICAlcyUlICAgICVzJSUiLAotCQkJCSAgICAgICBzZW1hLCB3 YWl0KTsKKwkJd2hpbGUgKCFjb25zdW1lZCkgeworCQkJbGluZXMgPSBwcmludF9oZWFkZXIoZW5n aW5lcywgdCwgbGluZXMsIGNvbl93LCBjb25faCwKKwkJCQkJICAgICAmY29uc3VtZWQpOwogCi0J CQlwbXVfY2FsYygmZW5naW5lLT5idXN5LCBidXN5LCBCVUZTWiwgNiwgMiwgMWU5LCB0LAotCQkJ CSAxMDApOwotCQkJbGVuICs9IHByaW50ZigiJTE2cyAlcyUlICIsIGVuZ2luZS0+ZGlzcGxheV9u YW1lLCBidXN5KTsKKwkJCWlmIChlbmdpbmVzLT5pbWNfZmQpCisJCQkJbGluZXMgPSBwcmludF9p bWMoZW5naW5lcywgdCwgbGluZXMsIGNvbl93LAorCQkJCQkJICBjb25faCk7CiAKLQkJCXZhbCA9 IF9fcG11X2NhbGMoJmVuZ2luZS0+YnVzeS52YWwsIDFlOSwgdCwgMTAwKTsKLQkJCXByaW50X3Bl cmNlbnRhZ2VfYmFyKHZhbCwgbWF4X3cgLSBsZW4pOworCQkJbGluZXMgPSBwcmludF9lbmdpbmVz X2hlYWRlcihlbmdpbmVzLCB0LCBsaW5lcywgY29uX3csCisJCQkJCQkgICAgIGNvbl9oKTsKIAot CQkJcHJpbnRmKCIlc1xuIiwgYnVmKTsKKwkJCWZvciAoaSA9IDA7CisJCQkgICAgIGkgPCBlbmdp bmVzLT5udW1fZW5naW5lcyAmJiBsaW5lcyA8IGNvbl9oOworCQkJICAgICBpKyspCisJCQkJbGlu ZXMgPSBwcmludF9lbmdpbmUoZW5naW5lcywgaSwgdCwgbGluZXMsCisJCQkJCQkgICAgIGNvbl93 LCBjb25faCk7CiAKLQkJCWxpbmVzKys7CisJCQlsaW5lcyA9IHByaW50X2VuZ2luZXNfZm9vdGVy KGVuZ2luZXMsIHQsIGxpbmVzLCBjb25fdywKKwkJCQkJCSAgICAgY29uX2gpOwogCQl9CiAKLQkJ aWYgKGxpbmVzKysgPCBjb25faCkKLQkJCXByaW50ZigiXG4iKTsKKwkJaWYgKHN0b3BfdG9wKQor CQkJYnJlYWs7CiAKIAkJdXNsZWVwKHBlcmlvZF91cyk7CiAJfQotLSAKMi4xOS4xCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcg bGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXYK