From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: Tvrtko Ursulin Date: Fri, 8 Feb 2019 10:26:12 +0000 Message-Id: <20190208102612.17217-1-tvrtko.ursulin@linux.intel.com> MIME-Version: 1.0 Subject: [igt-dev] [IGT] 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 CmlzIGRldGVjdGVkLgoKU2lnbmVkLW9mZi1ieTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1 bGluQGludGVsLmNvbT4KUmVmZXJlbmNlczogaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9z aG93X2J1Zy5jZ2k/aWQ9MTA4Njg5CkNjOiBFZXJvIFRhbW1pbmVuIDxlZXJvLnQudGFtbWluZW5A aW50ZWwuY29tPgpDYzogMy4xNHBpQHVrci5uZXQKLS0tCiBtYW4vaW50ZWxfZ3B1X3RvcC5yc3Qg fCAgIDkgKy0KIHRvb2xzL2ludGVsX2dwdV90b3AuYyB8IDc0MiArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKy0tLS0tLS0KIDIgZmlsZXMgY2hhbmdlZCwgNjMwIGluc2VydGlvbnMo KyksIDEyMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9tYW4vaW50ZWxfZ3B1X3RvcC5yc3Qg Yi9tYW4vaW50ZWxfZ3B1X3RvcC5yc3QKaW5kZXggMTljNzEyMzA3ZDI4Li5kNWJkYTA5M2M4ZTgg MTAwNjQ0Ci0tLSBhL21hbi9pbnRlbF9ncHVfdG9wLnJzdAorKysgYi9tYW4vaW50ZWxfZ3B1X3Rv cC5yc3QKQEAgLTcsOSArNyw5IEBAIERpc3BsYXkgYSB0b3AtbGlrZSBzdW1tYXJ5IG9mIEludGVs IEdQVSB1c2FnZQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CiAuLiBpbmNsdWRlOjogZGVmcy5yc3QKIDpBdXRob3I6IElHVCBEZXZlbG9wZXJzIDxpZ3QtZGV2 QGxpc3RzLmZyZWVkZXNrdG9wLm9yZz4KLTpEYXRlOiAyMDE4LTA0LTA0Cis6RGF0ZTogMjAxOS0w Mi0wOAogOlZlcnNpb246IHxQQUNLQUdFX1NUUklOR3wKLTpDb3B5cmlnaHQ6IDIwMDksMjAxMSwy MDEyLDIwMTYsMjAxOCBJbnRlbCBDb3Jwb3JhdGlvbgorOkNvcHlyaWdodDogMjAwOSwyMDExLDIw MTIsMjAxNiwyMDE4LDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KIDpNYW51YWwgc2VjdGlvbjogfE1B TlVBTF9TRUNUSU9OfAogOk1hbnVhbCBncm91cDogfE1BTlVBTF9HUk9VUHwKIApAQCAtMzEsNiAr MzEsMTEgQEAgT1BUSU9OUwogLXMgPG1zPgogICAgIFJlZnJlc2ggcGVyaW9kIGluIG1pbGxpc2Vj b25kcy4KIAorLWwKKyAgICBMaXN0IHRleHQgZGF0YSB0byBzdGFuZGFyZCBvdXQuCisKKy1KCisg ICAgT3V0cHV0IEpTT04gZm9ybWF0dGVkIGRhdGEgdG8gc3RhbmRhcmQgb3V0cHV0LgogLWgKICAg ICBTaG93IGhlbHAgdGV4dC4KIApkaWZmIC0tZ2l0IGEvdG9vbHMvaW50ZWxfZ3B1X3RvcC5jIGIv dG9vbHMvaW50ZWxfZ3B1X3RvcC5jCmluZGV4IGI5MjNjM2NmYmU5Ny4uMTMxM2UwZDQ2YjVlIDEw MDY0NAotLS0gYS90b29scy9pbnRlbF9ncHVfdG9wLmMKKysrIGIvdG9vbHMvaW50ZWxfZ3B1X3Rv cC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCDCqSAyMDA3LTIwMTggSW50ZWwg Q29ycG9yYXRpb24KKyAqIENvcHlyaWdodCDCqSAyMDA3LTIwMTkgSW50ZWwgQ29ycG9yYXRpb24K ICAqCiAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8g YW55IHBlcnNvbiBvYnRhaW5pbmcgYQogICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3Nv Y2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKQEAgLTE5LDEwICsx OSw2IEBACiAgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBU T1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwogICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJ T04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgogICogREVBTElOR1MgSU4g VEhFIFNPRlRXQVJFLgotICoKLSAqIEF1dGhvcnM6Ci0gKiAgICBFcmljIEFuaG9sdCA8ZXJpY0Bh bmhvbHQubmV0PgotICogICAgRXVnZW5pIERvZG9ub3YgPGV1Z2VuaS5kb2Rvbm92QGludGVsLmNv bT4KICAqLwogCiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTQxLDYgKzM3LDcgQEAKICNpbmNsdWRl IDxlcnJuby5oPgogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDxsb2NhbGUuaD4KKyNpbmNs dWRlIDxsaW1pdHMuaD4KIAogI2luY2x1ZGUgImlndF9wZXJmLmgiCiAKQEAgLTU5LDYgKzU2LDcg QEAgc3RydWN0IHBtdV9jb3VudGVyIHsKIHN0cnVjdCBlbmdpbmUgewogCWNvbnN0IGNoYXIgKm5h bWU7CiAJY29uc3QgY2hhciAqZGlzcGxheV9uYW1lOworCWNvbnN0IGNoYXIgKnNob3J0X25hbWU7 CiAKIAl1bnNpZ25lZCBpbnQgY2xhc3M7CiAJdW5zaWduZWQgaW50IGluc3RhbmNlOwpAQCAtMTQy LDYgKzE0MCwyMiBAQCBzdGF0aWMgY29uc3QgY2hhciAqY2xhc3NfZGlzcGxheV9uYW1lKHVuc2ln bmVkIGludCBjbGFzcykKIAl9CiB9CiAKK3N0YXRpYyBjb25zdCBjaGFyICpjbGFzc19zaG9ydF9u YW1lKHVuc2lnbmVkIGludCBjbGFzcykKK3sKKwlzd2l0Y2ggKGNsYXNzKSB7CisJY2FzZSBJOTE1 X0VOR0lORV9DTEFTU19SRU5ERVI6CisJCXJldHVybiAiUkNTIjsKKwljYXNlIEk5MTVfRU5HSU5F X0NMQVNTX0NPUFk6CisJCXJldHVybiAiQkNTIjsKKwljYXNlIEk5MTVfRU5HSU5FX0NMQVNTX1ZJ REVPOgorCQlyZXR1cm4gIlZDUyI7CisJY2FzZSBJOTE1X0VOR0lORV9DTEFTU19WSURFT19FTkhB TkNFOgorCQlyZXR1cm4gIlZFQ1MiOworCWRlZmF1bHQ6CisJCXJldHVybiAiVU5LTiI7CisJfQor fQorCiBzdGF0aWMgaW50IGVuZ2luZV9jbXAoY29uc3Qgdm9pZCAqX19hLCBjb25zdCB2b2lkICpf X2IpCiB7CiAJY29uc3Qgc3RydWN0IGVuZ2luZSAqYSA9IChzdHJ1Y3QgZW5naW5lICopX19hOwpA QCAtMjI3LDcgKzI0MSw2IEBAIHN0YXRpYyBzdHJ1Y3QgZW5naW5lcyAqZGlzY292ZXJfZW5naW5l cyh2b2lkKQogCQkJcmV0ID0gRU5PQlVGUzsKIAkJCWJyZWFrOwogCQl9Ci0JCXJldCA9IDA7CiAK IAkJZW5naW5lLT5kaXNwbGF5X25hbWUgPSBzdHJkdXAoYnVmKTsKIAkJaWYgKCFlbmdpbmUtPmRp c3BsYXlfbmFtZSkgewpAQCAtMjM1LDYgKzI0OCwyMCBAQCBzdGF0aWMgc3RydWN0IGVuZ2luZXMg KmRpc2NvdmVyX2VuZ2luZXModm9pZCkKIAkJCWJyZWFrOwogCQl9CiAKKwkJcmV0ID0gc25wcmlu dGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzLyV1IiwKKwkJCSAgICAgICBjbGFzc19zaG9ydF9uYW1l KGVuZ2luZS0+Y2xhc3MpLAorCQkJICAgICAgIGVuZ2luZS0+aW5zdGFuY2UpOworCQlpZiAocmV0 IDwgMCB8fCByZXQgPT0gc2l6ZW9mKGJ1ZikpIHsKKwkJCXJldCA9IEVOT0JVRlM7CisJCQlicmVh azsKKwkJfQorCisJCWVuZ2luZS0+c2hvcnRfbmFtZSA9IHN0cmR1cChidWYpOworCQlpZiAoIWVu Z2luZS0+c2hvcnRfbmFtZSkgeworCQkJcmV0ID0gZXJybm87CisJCQlicmVhazsKKwkJfQorCiAJ CWVuZ2luZXMtPm51bV9lbmdpbmVzKys7CiAJCWVuZ2luZXMgPSByZWFsbG9jKGVuZ2luZXMsIHNp emVvZihzdHJ1Y3QgZW5naW5lcykgKwogCQkJCSAgZW5naW5lcy0+bnVtX2VuZ2luZXMgKiBzaXpl b2Yoc3RydWN0IGVuZ2luZSkpOwpAQCAtMjQyLDYgKzI2OSw4IEBAIHN0YXRpYyBzdHJ1Y3QgZW5n aW5lcyAqZGlzY292ZXJfZW5naW5lcyh2b2lkKQogCQkJcmV0ID0gZXJybm87CiAJCQlicmVhazsK IAkJfQorCisJCXJldCA9IDA7CiAJfQogCiAJaWYgKHJldCkgewpAQCAtNTUxLDcgKzU4MCw3IEBA IHN0YXRpYyB1aW50NjRfdCBwbXVfcmVhZF9tdWx0aShpbnQgZmQsIHVuc2lnbmVkIGludCBudW0s IHVpbnQ2NF90ICp2YWwpCiAJcmV0dXJuIGJ1ZlsxXTsKIH0KIAotc3RhdGljIGRvdWJsZSBfX3Bt dV9jYWxjKHN0cnVjdCBwbXVfcGFpciAqcCwgZG91YmxlIGQsIGRvdWJsZSB0LCBkb3VibGUgcykK K3N0YXRpYyBkb3VibGUgcG11X2NhbGMoc3RydWN0IHBtdV9wYWlyICpwLCBkb3VibGUgZCwgZG91 YmxlIHQsIGRvdWJsZSBzKQogewogCWRvdWJsZSB2OwogCkBAIC01NzYsMzAgKzYwNSw2IEBAIHN0 YXRpYyB2b2lkIGZpbGxfc3RyKGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGJ1ZnN6LCBjaGFyIGMs IHVuc2lnbmVkIGludCBudW0pCiAJKmJ1ZiA9IDA7CiB9CiAKLXN0YXRpYyB2b2lkIHBtdV9jYWxj KHN0cnVjdCBwbXVfY291bnRlciAqY250LAotCQkgICAgIGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50 IGJ1ZnN6LAotCQkgICAgIHVuc2lnbmVkIGludCB3aWR0aCwgdW5zaWduZWQgd2lkdGhfZGVjLAot CQkgICAgIGRvdWJsZSBkLCBkb3VibGUgdCwgZG91YmxlIHMpCi17Ci0JZG91YmxlIHZhbDsKLQlp bnQgbGVuOwotCi0JYXNzZXJ0KGJ1ZnN6ID49ICh3aWR0aCArIHdpZHRoX2RlYyArIDEpKTsKLQot CWlmICghY250LT5wcmVzZW50KSB7Ci0JCWZpbGxfc3RyKGJ1ZiwgYnVmc3osICctJywgd2lkdGgg KyB3aWR0aF9kZWMpOwotCQlyZXR1cm47Ci0JfQotCi0JdmFsID0gX19wbXVfY2FsYygmY250LT52 YWwsIGQsIHQsIHMpOwotCi0JbGVuID0gc25wcmludGYoYnVmLCBidWZzeiwgIiUqLipmIiwgd2lk dGggKyB3aWR0aF9kZWMsIHdpZHRoX2RlYywgdmFsKTsKLQlpZiAobGVuIDwgMCB8fCBsZW4gPT0g YnVmc3opIHsKLQkJZmlsbF9zdHIoYnVmLCBidWZzeiwgJ1gnLCB3aWR0aCArIHdpZHRoX2RlYyk7 Ci0JCXJldHVybjsKLQl9Ci19Ci0KIHN0YXRpYyB1aW50NjRfdCBfX3BtdV9yZWFkX3NpbmdsZShp bnQgZmQsIHVpbnQ2NF90ICp0cykKIHsKIAl1aW50NjRfdCBkYXRhWzJdID0geyB9OwpAQCAtNjk3 LDExICs3MDIsNTUyIEBAIHVzYWdlKGNvbnN0IGNoYXIgKmFwcG5hbWUpCiAJCSJcbiIKIAkJIlx0 VGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIGFyZSBvcHRpb25hbDpcblxuIgogCQkiXHRbLXMgPG1z Pl0gICAgICAgUmVmcmVzaCBwZXJpb2QgaW4gbWlsbGlzZWNvbmRzIChkZWZhdWx0ICV1bXMpLlxu IgorCQkiXHRbLWxdICAgICAgICAgICAgTGlzdCBkYXRhIHRvIHN0YW5kYXJkIG91dC5cbiIKKwkJ Ilx0Wy1KXSAgICAgICAgICAgIEpTT04gZGF0YSB0byBzdGFuZGFyZCBvdXQuXG4iCiAJCSJcdFst aF0gICAgICAgICAgICBTaG93IHRoaXMgaGVscCB0ZXh0LlxuIgogCQkiXG4iLAogCQlhcHBuYW1l LCBERUZBVUxUX1BFUklPRF9NUyk7CiB9CiAKK3N0YXRpYyBlbnVtIHsKKwlJTlRFUkFDVElWRSwK KwlTVERPVVQsCisJSlNPTgorfSBvdXRwdXRfbW9kZTsKKworc3RydWN0IGNudF9pdGVtIHsKKwlz dHJ1Y3QgcG11X2NvdW50ZXIgKnBtdTsKKwl1bnNpZ25lZCBpbnQgZm10X2Q7CisJdW5zaWduZWQg aW50IGZtdF9kZDsKKwlkb3VibGUgZDsKKwlkb3VibGUgdDsKKwlkb3VibGUgczsKKwljb25zdCBj aGFyICpuYW1lOworCWNvbnN0IGNoYXIgKnVuaXQ7CisKKwkvKiBJbnRlcm5hbCBmaWVsZHMuICov CisJY2hhciBidWZbMTZdOworfTsKKworc3RydWN0IGNudF9ncm91cCB7CisJY29uc3QgY2hhciAq bmFtZTsKKwljb25zdCBjaGFyICpkaXNwbGF5X25hbWU7CisJc3RydWN0IGNudF9pdGVtICppdGVt czsKK307CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQganNvbl9pbmRlbnRfbGV2ZWw7CisKK3N0YXRp YyBjb25zdCBjaGFyICpqc29uX2luZGVudFtdID0geworCSIiLAorCSJcdCIsCisJIlx0XHQiLAor CSJcdFx0XHQiLAorCSJcdFx0XHRcdCIsCisJIlx0XHRcdFx0XHQiLAorfTsKKworI2RlZmluZSBB UlJBWV9TSVpFKGFycikgKHNpemVvZihhcnIpL3NpemVvZihhcnJbMF0pKQorCitzdGF0aWMgdW5z aWduZWQgaW50IGpzb25fcHJldl9zdHJ1Y3RfbWVtYmVyczsKK3N0YXRpYyB1bnNpZ25lZCBpbnQg anNvbl9zdHJ1Y3RfbWVtYmVyczsKKworc3RhdGljIHZvaWQKK2pzb25fb3Blbl9zdHJ1Y3QoY29u c3QgY2hhciAqbmFtZSkKK3sKKwlhc3NlcnQoanNvbl9pbmRlbnRfbGV2ZWwgPCBBUlJBWV9TSVpF KGpzb25faW5kZW50KSk7CisKKwlqc29uX3ByZXZfc3RydWN0X21lbWJlcnMgPSBqc29uX3N0cnVj dF9tZW1iZXJzOworCWpzb25fc3RydWN0X21lbWJlcnMgPSAwOworCisJaWYgKG5hbWUpCisJCXBy aW50ZigiJXMlc1wiJXNcIjoge1xuIiwKKwkJICAgICAgIGpzb25fcHJldl9zdHJ1Y3RfbWVtYmVy cyA/ICIsXG4iIDogIiIsCisJCSAgICAgICBqc29uX2luZGVudFtqc29uX2luZGVudF9sZXZlbF0s CisJCSAgICAgICBuYW1lKTsKKwllbHNlCisJCXByaW50ZigiJXNcbiVze1xuIiwKKwkJICAgICAg IGpzb25fcHJldl9zdHJ1Y3RfbWVtYmVycyA/ICIsIiA6ICIiLAorCQkgICAgICAganNvbl9pbmRl bnRbanNvbl9pbmRlbnRfbGV2ZWxdKTsKKworCWpzb25faW5kZW50X2xldmVsKys7Cit9CisKK3N0 YXRpYyB2b2lkCitqc29uX2Nsb3NlX3N0cnVjdCh2b2lkKQoreworCWFzc2VydChqc29uX2luZGVu dF9sZXZlbCA+IDApOworCisJcHJpbnRmKCJcbiVzfSIsIGpzb25faW5kZW50Wy0tanNvbl9pbmRl bnRfbGV2ZWxdKTsKKworCWlmIChqc29uX2luZGVudF9sZXZlbCA9PSAwKQorCQlmZmx1c2goc3Rk b3V0KTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludAoranNvbl9hZGRfbWVtYmVyKGNvbnN0IHN0 cnVjdCBjbnRfZ3JvdXAgKnBhcmVudCwgc3RydWN0IGNudF9pdGVtICppdGVtLAorCQl1bnNpZ25l ZCBpbnQgaGVhZGVycykKK3sKKwlhc3NlcnQoanNvbl9pbmRlbnRfbGV2ZWwgPCBBUlJBWV9TSVpF KGpzb25faW5kZW50KSk7CisKKwlwcmludGYoIiVzJXNcIiVzXCI6ICIsCisJCWpzb25fc3RydWN0 X21lbWJlcnMgPyAiLFxuIiA6ICIiLAorCQlqc29uX2luZGVudFtqc29uX2luZGVudF9sZXZlbF0s IGl0ZW0tPm5hbWUpOworCisJanNvbl9zdHJ1Y3RfbWVtYmVycysrOworCisJaWYgKCFzdHJjbXAo aXRlbS0+bmFtZSwgInVuaXQiKSkKKwkJcHJpbnRmKCJcIiVzXCIiLCBpdGVtLT51bml0KTsKKwll bHNlCisJCXByaW50ZigiJWYiLAorCQkgICAgICAgcG11X2NhbGMoJml0ZW0tPnBtdS0+dmFsLCBp dGVtLT5kLCBpdGVtLT50LCBpdGVtLT5zKSk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHVu c2lnbmVkIGludCBzdGRvdXRfbGV2ZWw7CisKKyNkZWZpbmUgU1RET1VUX0hFQURFUl9SRVBFQVQg MjAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3Rkb3V0X2xpbmVzID0gU1RET1VUX0hFQURFUl9SRVBF QVQ7CisKK3N0YXRpYyB2b2lkCitzdGRvdXRfb3Blbl9zdHJ1Y3QoY29uc3QgY2hhciAqbmFtZSkK K3sKKwlzdGRvdXRfbGV2ZWwrKzsKKwlhc3NlcnQoc3Rkb3V0X2xldmVsID4gMCk7Cit9CisKK3N0 YXRpYyB2b2lkCitzdGRvdXRfY2xvc2Vfc3RydWN0KHZvaWQpCit7CisJYXNzZXJ0KHN0ZG91dF9s ZXZlbCA+IDApOworCWlmICgtLXN0ZG91dF9sZXZlbCA9PSAwKSB7CisJCXN0ZG91dF9saW5lcysr OworCQlwcmludGYoIlxuIik7CisJCWZmbHVzaChzdGRvdXQpOworCX0KK30KKworc3RhdGljIHVu c2lnbmVkIGludAorc3Rkb3V0X2FkZF9tZW1iZXIoY29uc3Qgc3RydWN0IGNudF9ncm91cCAqcGFy ZW50LCBzdHJ1Y3QgY250X2l0ZW0gKml0ZW0sCisJCSAgdW5zaWduZWQgaW50IGhlYWRlcnMpCit7 CisJdW5zaWduZWQgaW50IGZtdF90b3QgPSBpdGVtLT5mbXRfZCArIChpdGVtLT5mbXRfZGQgPyAx IDogMCk7CisJY2hhciBidWZbZm10X3RvdCArIDFdOworCWRvdWJsZSB2YWw7CisJaW50IGxlbjsK KworCWlmICghaXRlbS0+cG11KQorCQlyZXR1cm4gMDsKKwllbHNlIGlmICghaXRlbS0+cG11LT5w cmVzZW50KQorCQlyZXR1cm4gMDsKKworCWlmIChoZWFkZXJzID09IDEpIHsKKwkJdW5zaWduZWQg aW50IGdycF90b3QgPSAwOworCQlzdHJ1Y3QgY250X2l0ZW0gKml0OworCisJCWlmIChpdGVtICE9 IHBhcmVudC0+aXRlbXMpCisJCQlyZXR1cm4gMDsKKworCQlmb3IgKGl0ID0gcGFyZW50LT5pdGVt czsgaXQtPnBtdTsgaXQrKykgeworCQkJaWYgKCFpdC0+cG11LT5wcmVzZW50KQorCQkJCWNvbnRp bnVlOworCisJCQlncnBfdG90ICs9IDEgKyBpdC0+Zm10X2QgKyAoaXQtPmZtdF9kZCA/IDEgOiAw KTsKKwkJfQorCisJCXByaW50ZigiJSpzICIsIGdycF90b3QgLSAxLCBwYXJlbnQtPmRpc3BsYXlf bmFtZSk7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoaGVhZGVycyA9PSAyKSB7CisJCXByaW50 ZigiJSpzICIsIGZtdF90b3QsIGl0ZW0tPnVuaXQgPzogaXRlbS0+bmFtZSk7CisJCXJldHVybiAw OworCX0KKworCXZhbCA9IHBtdV9jYWxjKCZpdGVtLT5wbXUtPnZhbCwgaXRlbS0+ZCwgaXRlbS0+ dCwgaXRlbS0+cyk7CisKKwlsZW4gPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJSouKmYi LCBmbXRfdG90LCBpdGVtLT5mbXRfZGQsIHZhbCk7CisJaWYgKGxlbiA8IDAgfHwgbGVuID09IHNp emVvZihidWYpKQorCQlmaWxsX3N0cihidWYsIHNpemVvZihidWYpLCAnWCcsIGZtdF90b3QpOwor CisJbGVuID0gcHJpbnRmKCIlcyAiLCBidWYpOworCisJcmV0dXJuIGxlbiA+IDAgPyBsZW4gOiAw OworfQorCitzdGF0aWMgdm9pZAordGVybV9vcGVuX3N0cnVjdChjb25zdCBjaGFyICpuYW1lKQor eworfQorCitzdGF0aWMgdm9pZAordGVybV9jbG9zZV9zdHJ1Y3Qodm9pZCkKK3sKK30KKworc3Rh dGljIHVuc2lnbmVkIGludAordGVybV9hZGRfbWVtYmVyKGNvbnN0IHN0cnVjdCBjbnRfZ3JvdXAg KnBhcmVudCwgc3RydWN0IGNudF9pdGVtICppdGVtLAorCQl1bnNpZ25lZCBpbnQgaGVhZGVycykK K3sKKwl1bnNpZ25lZCBpbnQgZm10X3RvdCA9IGl0ZW0tPmZtdF9kICsgKGl0ZW0tPmZtdF9kZCA/ IDEgOiAwKTsKKwlkb3VibGUgdmFsOworCWludCBsZW47CisKKwlpZiAoIWl0ZW0tPnBtdSkKKwkJ cmV0dXJuIDA7CisKKwlhc3NlcnQoZm10X3RvdCA8PSBzaXplb2YoaXRlbS0+YnVmKSk7CisKKwlp ZiAoIWl0ZW0tPnBtdS0+cHJlc2VudCkgeworCQlmaWxsX3N0cihpdGVtLT5idWYsIHNpemVvZihp dGVtLT5idWYpLCAnLScsIGZtdF90b3QpOworCQlyZXR1cm4gMTsKKwl9CisKKwl2YWwgPSBwbXVf Y2FsYygmaXRlbS0+cG11LT52YWwsIGl0ZW0tPmQsIGl0ZW0tPnQsIGl0ZW0tPnMpOworCWxlbiA9 IHNucHJpbnRmKGl0ZW0tPmJ1Ziwgc2l6ZW9mKGl0ZW0tPmJ1ZiksCisJCSAgICAgICAiJSouKmYi LAorCQkgICAgICAgZm10X3RvdCwgaXRlbS0+Zm10X2RkLCB2YWwpOworCisJaWYgKGxlbiA8IDAg fHwgbGVuID09IHNpemVvZihpdGVtLT5idWYpKQorCQlmaWxsX3N0cihpdGVtLT5idWYsIHNpemVv ZihpdGVtLT5idWYpLCAnWCcsIGZtdF90b3QpOworCisJcmV0dXJuIDE7Cit9CisKK3N0cnVjdCBw cmludF9vcGVyYXRpb25zIHsKKwl2b2lkICgqb3Blbl9zdHJ1Y3QpKGNvbnN0IGNoYXIgKm5hbWUp OworCXZvaWQgKCpjbG9zZV9zdHJ1Y3QpKHZvaWQpOworCXVuc2lnbmVkIGludCAoKmFkZF9tZW1i ZXIpKGNvbnN0IHN0cnVjdCBjbnRfZ3JvdXAgKnBhcmVudCwKKwkJCQkgICBzdHJ1Y3QgY250X2l0 ZW0gKml0ZW0sCisJCQkJICAgdW5zaWduZWQgaW50IGhlYWRlcnMpOworCWJvb2wgKCpwcmludF9n cm91cCkoc3RydWN0IGNudF9ncm91cCAqZ3JvdXAsIHVuc2lnbmVkIGludCBoZWFkZXJzKTsKK307 CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHJpbnRfb3BlcmF0aW9ucyAqcG9wczsKKworc3RhdGlj IHVuc2lnbmVkIGludAorcHJlc2VudF9pbl9ncm91cChjb25zdCBzdHJ1Y3QgY250X2dyb3VwICpn cnApCit7CisJdW5zaWduZWQgaW50IHByZXNlbnQgPSAwOworCXN0cnVjdCBjbnRfaXRlbSAqaXRl bTsKKworCWZvciAoaXRlbSA9IGdycC0+aXRlbXM7IGl0ZW0tPm5hbWU7IGl0ZW0rKykgeworCQlp ZiAoaXRlbS0+cG11ICYmIGl0ZW0tPnBtdS0+cHJlc2VudCkKKwkJCXByZXNlbnQrKzsKKwl9CisK KwlyZXR1cm4gcHJlc2VudDsKK30KKworc3RhdGljIGJvb2wKK3ByaW50X2dyb3VwKHN0cnVjdCBj bnRfZ3JvdXAgKmdycCwgdW5zaWduZWQgaW50IGhlYWRlcnMpCit7CisJdW5zaWduZWQgaW50IGNv bnN1bWVkID0gMDsKKwlzdHJ1Y3QgY250X2l0ZW0gKml0ZW07CisKKwlpZiAoIXByZXNlbnRfaW5f Z3JvdXAoZ3JwKSkKKwkJcmV0dXJuIGZhbHNlOworCisJcG9wcy0+b3Blbl9zdHJ1Y3QoZ3JwLT5u YW1lKTsKKworCWZvciAoaXRlbSA9IGdycC0+aXRlbXM7IGl0ZW0tPm5hbWU7IGl0ZW0rKykKKwkJ Y29uc3VtZWQgKz0gcG9wcy0+YWRkX21lbWJlcihncnAsIGl0ZW0sIGhlYWRlcnMpOworCisJcG9w cy0+Y2xvc2Vfc3RydWN0KCk7CisKKwlyZXR1cm4gY29uc3VtZWQ7Cit9CisKK3N0YXRpYyBib29s Cit0ZXJtX3ByaW50X2dyb3VwKHN0cnVjdCBjbnRfZ3JvdXAgKmdycCwgdW5zaWduZWQgaW50IGhl YWRlcnMpCit7CisJdW5zaWduZWQgaW50IGNvbnN1bWVkID0gMDsKKwlzdHJ1Y3QgY250X2l0ZW0g Kml0ZW07CisKKwlwb3BzLT5vcGVuX3N0cnVjdChncnAtPm5hbWUpOworCisJZm9yIChpdGVtID0g Z3JwLT5pdGVtczsgaXRlbS0+bmFtZTsgaXRlbSsrKQorCQljb25zdW1lZCArPSBwb3BzLT5hZGRf bWVtYmVyKGdycCwgaXRlbSwgaGVhZGVycyk7CisKKwlwb3BzLT5jbG9zZV9zdHJ1Y3QoKTsKKwor CXJldHVybiBjb25zdW1lZDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBwcmludF9vcGVyYXRp b25zIGpzb25fcG9wcyA9IHsKKwkub3Blbl9zdHJ1Y3QgPSBqc29uX29wZW5fc3RydWN0LAorCS5j bG9zZV9zdHJ1Y3QgPSBqc29uX2Nsb3NlX3N0cnVjdCwKKwkuYWRkX21lbWJlciA9IGpzb25fYWRk X21lbWJlciwKKwkucHJpbnRfZ3JvdXAgPSBwcmludF9ncm91cCwKK307CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgcHJpbnRfb3BlcmF0aW9ucyBzdGRvdXRfcG9wcyA9IHsKKwkub3Blbl9zdHJ1Y3Qg PSBzdGRvdXRfb3Blbl9zdHJ1Y3QsCisJLmNsb3NlX3N0cnVjdCA9IHN0ZG91dF9jbG9zZV9zdHJ1 Y3QsCisJLmFkZF9tZW1iZXIgPSBzdGRvdXRfYWRkX21lbWJlciwKKwkucHJpbnRfZ3JvdXAgPSBw cmludF9ncm91cCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHJpbnRfb3BlcmF0aW9ucyB0 ZXJtX3BvcHMgPSB7CisJLm9wZW5fc3RydWN0ID0gdGVybV9vcGVuX3N0cnVjdCwKKwkuY2xvc2Vf c3RydWN0ID0gdGVybV9jbG9zZV9zdHJ1Y3QsCisJLmFkZF9tZW1iZXIgPSB0ZXJtX2FkZF9tZW1i ZXIsCisJLnByaW50X2dyb3VwID0gdGVybV9wcmludF9ncm91cCwKK307CisKK3N0YXRpYyBib29s IHByaW50X2dyb3VwcyhzdHJ1Y3QgY250X2dyb3VwICoqZ3JvdXBzKQoreworCXVuc2lnbmVkIGlu dCBoZWFkZXJzID0gc3Rkb3V0X2xpbmVzICUgU1RET1VUX0hFQURFUl9SRVBFQVQgKyAxOworCWJv b2wgcHJpbnRfZGF0YSA9IHRydWU7CisKKwlpZiAob3V0cHV0X21vZGUgPT0gU1RET1VUICYmICho ZWFkZXJzID09IDEgfHwgaGVhZGVycyA9PSAyKSkgeworCQlmb3IgKHN0cnVjdCBjbnRfZ3JvdXAg KipncnAgPSBncm91cHM7ICpncnA7IGdycCsrKQorCQkJcHJpbnRfZGF0YSA9IHBvcHMtPnByaW50 X2dyb3VwKCpncnAsIGhlYWRlcnMpOworCX0KKworCWZvciAoc3RydWN0IGNudF9ncm91cCAqKmdy cCA9IGdyb3VwczsgcHJpbnRfZGF0YSAmJiAqZ3JwOyBncnArKykKKwkJcG9wcy0+cHJpbnRfZ3Jv dXAoKmdycCwgZmFsc2UpOworCisJcmV0dXJuIHByaW50X2RhdGE7Cit9CisKK3N0YXRpYyBpbnQK K3ByaW50X2hlYWRlcihzdHJ1Y3QgZW5naW5lcyAqZW5naW5lcywgZG91YmxlIHQsCisJICAgICBp bnQgbGluZXMsIGludCBjb25fdywgaW50IGNvbl9oLCBib29sICpjb25zdW1lZCkKK3sKKwlzdHJ1 Y3QgcG11X2NvdW50ZXIgZmFrZV9wbXUgPSB7CisJCS5wcmVzZW50ID0gdHJ1ZSwKKwkJLnZhbC5j dXIgPSAxLAorCX07CisJc3RydWN0IGNudF9pdGVtIHBlcmlvZF9pdGVtc1tdID0geworCQl7ICZm YWtlX3BtdSwgMCwgMCwgMS4wLCAxLjAsIHQgKiAxZTMsICJkdXJhdGlvbiIgfSwKKwkJeyBOVUxM LCAwLCAwLCAwLjAsIDAuMCwgMC4wLCAidW5pdCIsICJtcyIgfSwKKwkJeyB9LAorCX07CisJc3Ry dWN0IGNudF9ncm91cCBwZXJpb2RfZ3JvdXAgPSB7CisJCS5uYW1lID0gInBlcmlvZCIsCisJCS5p dGVtcyA9IHBlcmlvZF9pdGVtcywKKwl9OworCXN0cnVjdCBjbnRfaXRlbSBmcmVxX2l0ZW1zW10g PSB7CisJCXsgJmVuZ2luZXMtPmZyZXFfcmVxLCA0LCAwLCAxLjAsIHQsIDEsICJyZXF1ZXN0ZWQi LCAicmVxIiB9LAorCQl7ICZlbmdpbmVzLT5mcmVxX2FjdCwgNCwgMCwgMS4wLCB0LCAxLCAiYWN0 dWFsIiwgImFjdCIgfSwKKwkJeyBOVUxMLCAwLCAwLCAwLjAsIDAuMCwgMC4wLCAidW5pdCIsICJN SHoiIH0sCisJCXsgfSwKKwl9OworCXN0cnVjdCBjbnRfZ3JvdXAgZnJlcV9ncm91cCA9IHsKKwkJ Lm5hbWUgPSAiZnJlcXVlbmN5IiwKKwkJLmRpc3BsYXlfbmFtZSA9ICJGcmVxIE1IeiIsCisJCS5p dGVtcyA9IGZyZXFfaXRlbXMsCisJfTsKKwlzdHJ1Y3QgY250X2l0ZW0gaXJxX2l0ZW1zW10gPSB7 CisJCXsgJmVuZ2luZXMtPmlycSwgOCwgMCwgMS4wLCB0LCAxLCAiY291bnQiLCAiL3MiIH0sCisJ CXsgTlVMTCwgMCwgMCwgMC4wLCAwLjAsIDAuMCwgInVuaXQiLCAiaXJxL3MiIH0sCisJCXsgfSwK Kwl9OworCXN0cnVjdCBjbnRfZ3JvdXAgaXJxX2dyb3VwID0geworCQkubmFtZSA9ICJpbnRlcnJ1 cHRzIiwKKwkJLmRpc3BsYXlfbmFtZSA9ICJJUlEiLAorCQkuaXRlbXMgPSBpcnFfaXRlbXMsCisJ fTsKKwlzdHJ1Y3QgY250X2l0ZW0gcmM2X2l0ZW1zW10gPSB7CisJCXsgJmVuZ2luZXMtPnJjNiwg MywgMCwgMWU5LCB0LCAxMDAsICJ2YWx1ZSIsICIlIiB9LAorCQl7IE5VTEwsIDAsIDAsIDAuMCwg MC4wLCAwLjAsICJ1bml0IiwgIiUiIH0sCisJCXsgfSwKKwl9OworCXN0cnVjdCBjbnRfZ3JvdXAg cmM2X2dyb3VwID0geworCQkubmFtZSA9ICJyYzYiLAorCQkuZGlzcGxheV9uYW1lID0gIlJDNiIs CisJCS5pdGVtcyA9IHJjNl9pdGVtcywKKwl9OworCXN0cnVjdCBjbnRfaXRlbSBwb3dlcl9pdGVt c1tdID0geworCQl7ICZlbmdpbmVzLT5yYXBsLCA0LCAyLCAxLjAsIHQsIGVuZ2luZXMtPnJhcGxf c2NhbGUsICJ2YWx1ZSIsCisJCSAgIlciIH0sCisJCXsgTlVMTCwgMCwgMCwgMC4wLCAwLjAsIDAu MCwgInVuaXQiLCAiVyIgfSwKKwkJeyB9LAorCX07CisJc3RydWN0IGNudF9ncm91cCBwb3dlcl9n cm91cCA9IHsKKwkJLm5hbWUgPSAicG93ZXIiLAorCQkuZGlzcGxheV9uYW1lID0gIlBvd2VyIiwK KwkJLml0ZW1zID0gcG93ZXJfaXRlbXMsCisJfTsKKwlzdHJ1Y3QgY250X2dyb3VwICpncm91cHNb XSA9IHsKKwkJJnBlcmlvZF9ncm91cCwKKwkJJmZyZXFfZ3JvdXAsCisJCSZpcnFfZ3JvdXAsCisJ CSZyYzZfZ3JvdXAsCisJCSZwb3dlcl9ncm91cCwKKwkJTlVMTAorCX07CisKKwlpZiAob3V0cHV0 X21vZGUgIT0gSlNPTikKKwkJbWVtbW92ZSgmZ3JvdXBzWzBdLCAmZ3JvdXBzWzFdLAorCQkJc2l6 ZW9mKGdyb3VwcykgLSBzaXplb2YoZ3JvdXBzWzBdKSk7CisKKwlwb3BzLT5vcGVuX3N0cnVjdChO VUxMKTsKKworCSpjb25zdW1lZCA9IHByaW50X2dyb3Vwcyhncm91cHMpOworCisJaWYgKG91dHB1 dF9tb2RlID09IElOVEVSQUNUSVZFKSB7CisJCXByaW50ZigiXDAzM1tIXDAzM1tKIik7CisKKwkJ aWYgKGxpbmVzKysgPCBjb25faCkKKwkJCXByaW50ZigiaW50ZWwtZ3B1LXRvcCAtICVzLyVzIE1I ejsgICVzJSUgUkM2OyAlcyAlczsgJXMgaXJxcy9zXG4iLAorCQkJICAgICAgIGZyZXFfaXRlbXNb MV0uYnVmLCBmcmVxX2l0ZW1zWzBdLmJ1ZiwKKwkJCSAgICAgICByYzZfaXRlbXNbMF0uYnVmLCBw b3dlcl9pdGVtc1swXS5idWYsCisJCQkgICAgICAgZW5naW5lcy0+cmFwbF91bml0LAorCQkJICAg ICAgIGlycV9pdGVtc1swXS5idWYpOworCisJCWlmIChsaW5lcysrIDwgY29uX2gpCisJCQlwcmlu dGYoIlxuIik7CisJfQorCisJcmV0dXJuIGxpbmVzOworfQorCitzdGF0aWMgaW50CitwcmludF9p bWMoc3RydWN0IGVuZ2luZXMgKmVuZ2luZXMsIGRvdWJsZSB0LCBpbnQgbGluZXMsIGludCBjb25f dywgaW50IGNvbl9oKQoreworCXN0cnVjdCBjbnRfaXRlbSBpbWNfaXRlbXNbXSA9IHsKKwkJeyAm ZW5naW5lcy0+aW1jX3JlYWRzLCA2LCAwLCAxLjAsIHQsIGVuZ2luZXMtPmltY19yZWFkc19zY2Fs ZSwKKwkJICAicmVhZHMiLCAicmQiIH0sCisJCXsgJmVuZ2luZXMtPmltY193cml0ZXMsIDYsIDAs IDEuMCwgdCwgZW5naW5lcy0+aW1jX3dyaXRlc19zY2FsZSwKKwkJICAid3JpdGVzIiwgIndyIiB9 LAorCQl7IE5VTEwsIDAsIDAsIDAuMCwgMC4wLCAwLjAsICJ1bml0IiB9LAorCQl7IH0sCisJfTsK KwlzdHJ1Y3QgY250X2dyb3VwIGltY19ncm91cCA9IHsKKwkJLm5hbWUgPSAiaW1jLWJhbmR3aWR0 aCIsCisJCS5pdGVtcyA9IGltY19pdGVtcywKKwl9OworCXN0cnVjdCBjbnRfZ3JvdXAgKmdyb3Vw c1tdID0geworCQkmaW1jX2dyb3VwLAorCQlOVUxMCisJfTsKKwlpbnQgcmV0OworCisJcmV0ID0g YXNwcmludGYoKGNoYXIgKiopJmltY19ncm91cC5kaXNwbGF5X25hbWUsICJJTUMgJXMvcyIsCisJ CQllbmdpbmVzLT5pbWNfcmVhZHNfdW5pdCk7CisJYXNzZXJ0KHJldCA+PSAwKTsKKworCXJldCA9 IGFzcHJpbnRmKChjaGFyICoqKSZpbWNfaXRlbXNbMl0udW5pdCwgIiVzL3MiLAorCQkJZW5naW5l cy0+aW1jX3JlYWRzX3VuaXQpOworCWFzc2VydChyZXQgPj0gMCk7CisKKwlwcmludF9ncm91cHMo Z3JvdXBzKTsKKworCWZyZWUoKHZvaWQgKilpbWNfZ3JvdXAuZGlzcGxheV9uYW1lKTsKKwlmcmVl KCh2b2lkICopaW1jX2l0ZW1zWzJdLnVuaXQpOworCisJaWYgKG91dHB1dF9tb2RlID09IElOVEVS QUNUSVZFKSB7CisJCWlmIChsaW5lcysrIDwgY29uX2gpCisJCQlwcmludGYoIiAgICAgIElNQyBy ZWFkczogICAlcyAlcy9zXG4iLAorCQkJICAgICAgIGltY19pdGVtc1swXS5idWYsIGVuZ2luZXMt PmltY19yZWFkc191bml0KTsKKworCQlpZiAobGluZXMrKyA8IGNvbl9oKQorCQkJcHJpbnRmKCIg ICAgIElNQyB3cml0ZXM6ICAgJXMgJXMvc1xuIiwKKwkJCSAgICAgICBpbWNfaXRlbXNbMV0uYnVm LCBlbmdpbmVzLT5pbWNfd3JpdGVzX3VuaXQpOworCisJCWlmIChsaW5lcysrIDwgY29uX2gpCisJ CQlwcmludGYoIlxuIik7CisJfQorCisJcmV0dXJuIGxpbmVzOworfQorCitzdGF0aWMgaW50Citw cmludF9lbmdpbmVzX2hlYWRlcihzdHJ1Y3QgZW5naW5lcyAqZW5naW5lcywgZG91YmxlIHQsCisJ CSAgICAgaW50IGxpbmVzLCBpbnQgY29uX3csIGludCBjb25faCkKK3sKKwlmb3IgKHVuc2lnbmVk IGludCBpID0gMDsKKwkgICAgIGkgPCBlbmdpbmVzLT5udW1fZW5naW5lcyAmJiBsaW5lcyA8IGNv bl9oOworCSAgICAgaSsrKSB7CisJCXN0cnVjdCBlbmdpbmUgKmVuZ2luZSA9IGVuZ2luZV9wdHIo ZW5naW5lcywgaSk7CisKKwkJaWYgKCFlbmdpbmUtPm51bV9jb3VudGVycykKKwkJCWNvbnRpbnVl OworCisJCXBvcHMtPm9wZW5fc3RydWN0KCJlbmdpbmVzIik7CisKKwkJaWYgKG91dHB1dF9tb2Rl ID09IElOVEVSQUNUSVZFKSB7CisJCQljb25zdCBjaGFyICphID0gIiAgICAgICAgICBFTkdJTkUg ICAgICBCVVNZICI7CisJCQljb25zdCBjaGFyICpiID0gIiBNSV9TRU1BIE1JX1dBSVQiOworCisJ CQlwcmludGYoIlwwMzNbN20lcyUqcyVzXDAzM1swbVxuIiwKKwkJCSAgICAgICBhLCAoaW50KShj b25fdyAtIDEgLSBzdHJsZW4oYSkgLSBzdHJsZW4oYikpLAorCQkJICAgICAgICIgIiwgYik7CisK KwkJCWxpbmVzKys7CisJCX0KKworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gbGluZXM7Cit9CisK K3N0YXRpYyBpbnQKK3ByaW50X2VuZ2luZShzdHJ1Y3QgZW5naW5lcyAqZW5naW5lcywgdW5zaWdu ZWQgaW50IGksIGRvdWJsZSB0LAorCSAgICAgaW50IGxpbmVzLCBpbnQgY29uX3csIGludCBjb25f aCkKK3sKKwlzdHJ1Y3QgZW5naW5lICplbmdpbmUgPSBlbmdpbmVfcHRyKGVuZ2luZXMsIGkpOwor CXN0cnVjdCBjbnRfaXRlbSBlbmdpbmVfaXRlbXNbXSA9IHsKKwkJeyAmZW5naW5lLT5idXN5LCA2 LCAyLCAxZTksIHQsIDEwMCwgImJ1c3kiLCAiJSIgfSwKKwkJeyAmZW5naW5lLT5zZW1hLCAzLCAw LCAxZTksIHQsIDEwMCwgInNlbWEiLCAic2UiIH0sCisJCXsgJmVuZ2luZS0+d2FpdCwgMywgMCwg MWU5LCB0LCAxMDAsICJ3YWl0IiwgIndhIiB9LAorCQl7IE5VTEwsIDAsIDAsIDAuMCwgMC4wLCAw LjAsICJ1bml0IiwgIiUiIH0sCisJCXsgfSwKKwl9OworCXN0cnVjdCBjbnRfZ3JvdXAgZW5naW5l X2dyb3VwID0geworCQkubmFtZSA9IGVuZ2luZS0+ZGlzcGxheV9uYW1lLAorCQkuZGlzcGxheV9u YW1lID0gZW5naW5lLT5zaG9ydF9uYW1lLAorCQkuaXRlbXMgPSBlbmdpbmVfaXRlbXMsCisJfTsK KwlzdHJ1Y3QgY250X2dyb3VwICpncm91cHNbXSA9IHsKKwkJJmVuZ2luZV9ncm91cCwKKwkJTlVM TAorCX07CisKKwlpZiAoIWVuZ2luZS0+bnVtX2NvdW50ZXJzKQorCQlyZXR1cm4gbGluZXM7CisK KwlwcmludF9ncm91cHMoZ3JvdXBzKTsKKworCWlmIChvdXRwdXRfbW9kZSA9PSBJTlRFUkFDVElW RSkgeworCQl1bnNpZ25lZCBpbnQgbWF4X3cgPSBjb25fdyAtIDE7CisJCXVuc2lnbmVkIGludCBs ZW47CisJCWNoYXIgYnVmWzEyOF07CisJCWRvdWJsZSB2YWw7CisKKwkJbGVuID0gc25wcmludGYo YnVmLCBzaXplb2YoYnVmKSwgIiAgICAlcyUlICAgICVzJSUiLAorCQkJICAgICAgIGVuZ2luZV9p dGVtc1sxXS5idWYsIGVuZ2luZV9pdGVtc1syXS5idWYpOworCisJCWxlbiArPSBwcmludGYoIiUx NnMgJXMlJSAiLAorCQkJICAgICAgZW5naW5lLT5kaXNwbGF5X25hbWUsIGVuZ2luZV9pdGVtc1sw XS5idWYpOworCisJCXZhbCA9IHBtdV9jYWxjKCZlbmdpbmUtPmJ1c3kudmFsLCAxZTksIHQsIDEw MCk7CisJCXByaW50X3BlcmNlbnRhZ2VfYmFyKHZhbCwgbWF4X3cgLSBsZW4pOworCisJCXByaW50 ZigiJXNcbiIsIGJ1Zik7CisKKwkJbGluZXMrKzsKKwl9CisKKwlyZXR1cm4gbGluZXM7Cit9CisK K3N0YXRpYyBpbnQKK3ByaW50X2VuZ2luZXNfZm9vdGVyKHN0cnVjdCBlbmdpbmVzICplbmdpbmVz LCBkb3VibGUgdCwKKwkJICAgICBpbnQgbGluZXMsIGludCBjb25fdywgaW50IGNvbl9oKQorewor CXBvcHMtPmNsb3NlX3N0cnVjdCgpOworCXBvcHMtPmNsb3NlX3N0cnVjdCgpOworCisJaWYgKG91 dHB1dF9tb2RlID09IElOVEVSQUNUSVZFKSB7CisJCWlmIChsaW5lcysrIDwgY29uX2gpCisJCQlw cmludGYoIlxuIik7CisJfQorCisJcmV0dXJuIGxpbmVzOworfQorCiBpbnQgbWFpbihpbnQgYXJn YywgY2hhciAqKmFyZ3YpCiB7CiAJdW5zaWduZWQgaW50IHBlcmlvZF91cyA9IERFRkFVTFRfUEVS SU9EX01TICogMTAwMDsKQEAgLTcxMSwxMSArMTI1NywxNyBAQCBpbnQgbWFpbihpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCiAJaW50IHJldCwgY2g7CiAKIAkvKiBQYXJzZSBvcHRpb25zICovCi0Jd2hp bGUgKChjaCA9IGdldG9wdChhcmdjLCBhcmd2LCAiczpoIikpICE9IC0xKSB7CisJd2hpbGUgKChj aCA9IGdldG9wdChhcmdjLCBhcmd2LCAiczpKbGgiKSkgIT0gLTEpIHsKIAkJc3dpdGNoIChjaCkg ewogCQljYXNlICdzJzoKIAkJCXBlcmlvZF91cyA9IGF0b2kob3B0YXJnKSAqIDEwMDA7CiAJCQli cmVhazsKKwkJY2FzZSAnSic6CisJCQlvdXRwdXRfbW9kZSA9IEpTT047CisJCQlicmVhazsKKwkJ Y2FzZSAnbCc6CisJCQlvdXRwdXRfbW9kZSA9IFNURE9VVDsKKwkJCWJyZWFrOwogCQljYXNlICdo JzoKIAkJCXVzYWdlKGFyZ3ZbMF0pOwogCQkJZXhpdCgwKTsKQEAgLTcyNiw2ICsxMjc4LDI0IEBA IGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJfQogCX0KIAorCWlmIChvdXRwdXRf bW9kZSA9PSBJTlRFUkFDVElWRSAmJiBpc2F0dHkoMSkgIT0gMSkKKwkJb3V0cHV0X21vZGUgPSBT VERPVVQ7CisKKwlzd2l0Y2ggKG91dHB1dF9tb2RlKSB7CisJY2FzZSBJTlRFUkFDVElWRToKKwkJ cG9wcyA9ICZ0ZXJtX3BvcHM7CisJCWJyZWFrOworCWNhc2UgU1RET1VUOgorCQlwb3BzID0gJnN0 ZG91dF9wb3BzOworCQlicmVhazsKKwljYXNlIEpTT046CisJCXBvcHMgPSAmanNvbl9wb3BzOwor CQlicmVhazsKKwlkZWZhdWx0OgorCQlhc3NlcnQoMCk7CisJCWJyZWFrOworCX07CisKIAllbmdp bmVzID0gZGlzY292ZXJfZW5naW5lcygpOwogCWlmICghZW5naW5lcykgewogCQlmcHJpbnRmKHN0 ZGVyciwKQEAgLTc0NCwyMCArMTMxNCwxNSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFy Z3YpCiAJcG11X3NhbXBsZShlbmdpbmVzKTsKIAogCWZvciAoOzspIHsKLQkJZG91YmxlIHQ7Ci0j ZGVmaW5lIEJVRlNaIDE2Ci0JCWNoYXIgZnJlcVtCVUZTWl07Ci0JCWNoYXIgZmFjdFtCVUZTWl07 Ci0JCWNoYXIgaXJxW0JVRlNaXTsKLQkJY2hhciByYzZbQlVGU1pdOwotCQljaGFyIHBvd2VyW0JV RlNaXTsKLQkJY2hhciByZWFkc1tCVUZTWl07Ci0JCWNoYXIgd3JpdGVzW0JVRlNaXTsKLQkJc3Ry dWN0IHdpbnNpemUgd3M7CisJCWJvb2wgY29uc3VtZWQgPSBmYWxzZTsKIAkJaW50IGxpbmVzID0g MDsKKwkJc3RydWN0IHdpbnNpemUgd3M7CisJCWRvdWJsZSB0OwogCiAJCS8qIFVwZGF0ZSB0ZXJt aW5hbCBzaXplLiAqLwotCQlpZiAoaW9jdGwoMCwgVElPQ0dXSU5TWiwgJndzKSAhPSAtMSkgewor CQlpZiAob3V0cHV0X21vZGUgIT0gSU5URVJBQ1RJVkUpIHsKKwkJCWNvbl93ID0gY29uX2ggPSBJ TlRfTUFYOworCQl9IGVsc2UgaWYgKGlvY3RsKDAsIFRJT0NHV0lOU1osICZ3cykgIT0gLTEpIHsK IAkJCWNvbl93ID0gd3Mud3NfY29sOwogCQkJY29uX2ggPSB3cy53c19yb3c7CiAJCX0KQEAgLTc2 NSw4OCArMTMzMCwyNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCXBtdV9z YW1wbGUoZW5naW5lcyk7CiAJCXQgPSAoZG91YmxlKShlbmdpbmVzLT50cy5jdXIgLSBlbmdpbmVz LT50cy5wcmV2KSAvIDFlOTsKIAotCQlwcmludGYoIlwwMzNbSFwwMzNbSiIpOwotCi0JCXBtdV9j YWxjKCZlbmdpbmVzLT5mcmVxX3JlcSwgZnJlcSwgQlVGU1osIDQsIDAsIDEuMCwgdCwgMSk7Ci0J CXBtdV9jYWxjKCZlbmdpbmVzLT5mcmVxX2FjdCwgZmFjdCwgQlVGU1osIDQsIDAsIDEuMCwgdCwg MSk7Ci0JCXBtdV9jYWxjKCZlbmdpbmVzLT5pcnEsIGlycSwgQlVGU1osIDgsIDAsIDEuMCwgdCwg MSk7Ci0JCXBtdV9jYWxjKCZlbmdpbmVzLT5yYzYsIHJjNiwgQlVGU1osIDMsIDAsIDFlOSwgdCwg MTAwKTsKLQkJcG11X2NhbGMoJmVuZ2luZXMtPnJhcGwsIHBvd2VyLCBCVUZTWiwgNCwgMiwgMS4w LCB0LAotCQkJIGVuZ2luZXMtPnJhcGxfc2NhbGUpOwotCQlwbXVfY2FsYygmZW5naW5lcy0+aW1j X3JlYWRzLCByZWFkcywgQlVGU1osIDYsIDAsIDEuMCwgdCwKLQkJCSBlbmdpbmVzLT5pbWNfcmVh ZHNfc2NhbGUpOwotCQlwbXVfY2FsYygmZW5naW5lcy0+aW1jX3dyaXRlcywgd3JpdGVzLCBCVUZT WiwgNiwgMCwgMS4wLCB0LAotCQkJIGVuZ2luZXMtPmltY193cml0ZXNfc2NhbGUpOwotCi0JCWlm IChsaW5lcysrIDwgY29uX2gpCi0JCQlwcmludGYoImludGVsLWdwdS10b3AgLSAlcy8lcyBNSHo7 ICAlcyUlIFJDNjsgJXMgJXM7ICVzIGlycXMvc1xuIiwKLQkJCSAgICAgICBmYWN0LCBmcmVxLCBy YzYsIHBvd2VyLCBlbmdpbmVzLT5yYXBsX3VuaXQsIGlycSk7CisJCXdoaWxlICghY29uc3VtZWQp IHsKKwkJCWxpbmVzID0gcHJpbnRfaGVhZGVyKGVuZ2luZXMsIHQsIGxpbmVzLCBjb25fdywgY29u X2gsCisJCQkJCSAgICAgJmNvbnN1bWVkKTsKIAotCQlpZiAobGluZXMrKyA8IGNvbl9oKQotCQkJ cHJpbnRmKCJcbiIpOworCQkJaWYgKGVuZ2luZXMtPmltY19mZCkKKwkJCQlsaW5lcyA9IHByaW50 X2ltYyhlbmdpbmVzLCB0LCBsaW5lcywgY29uX3csCisJCQkJCQkgIGNvbl9oKTsKIAotCQlpZiAo ZW5naW5lcy0+aW1jX2ZkKSB7Ci0JCQlpZiAobGluZXMrKyA8IGNvbl9oKQotCQkJCXByaW50Zigi ICAgICAgSU1DIHJlYWRzOiAgICVzICVzL3NcbiIsCi0JCQkJICAgICAgIHJlYWRzLCBlbmdpbmVz LT5pbWNfcmVhZHNfdW5pdCk7CisJCQlsaW5lcyA9IHByaW50X2VuZ2luZXNfaGVhZGVyKGVuZ2lu ZXMsIHQsIGxpbmVzLCBjb25fdywKKwkJCQkJCSAgICAgY29uX2gpOwogCi0JCQlpZiAobGluZXMr KyA8IGNvbl9oKQotCQkJCXByaW50ZigiICAgICBJTUMgd3JpdGVzOiAgICVzICVzL3NcbiIsCi0J CQkJICAgICAgIHdyaXRlcywgZW5naW5lcy0+aW1jX3dyaXRlc191bml0KTsKKwkJCWZvciAoaSA9 IDA7CisJCQkgICAgIGkgPCBlbmdpbmVzLT5udW1fZW5naW5lcyAmJiBsaW5lcyA8IGNvbl9oOwor CQkJICAgICBpKyspCisJCQkJbGluZXMgPSBwcmludF9lbmdpbmUoZW5naW5lcywgaSwgdCwgbGlu ZXMsCisJCQkJCQkgICAgIGNvbl93LCBjb25faCk7CiAKLQkJCWlmICgrK2xpbmVzIDwgY29uX2gp Ci0JCQkJcHJpbnRmKCJcbiIpOworCQkJbGluZXMgPSBwcmludF9lbmdpbmVzX2Zvb3Rlcihlbmdp bmVzLCB0LCBsaW5lcywgY29uX3csCisJCQkJCQkgICAgIGNvbl9oKTsKIAkJfQogCi0JCWZvciAo aSA9IDA7IGkgPCBlbmdpbmVzLT5udW1fZW5naW5lczsgaSsrKSB7Ci0JCQlzdHJ1Y3QgZW5naW5l ICplbmdpbmUgPSBlbmdpbmVfcHRyKGVuZ2luZXMsIGkpOwotCi0JCQlpZiAoZW5naW5lLT5udW1f Y291bnRlcnMgJiYgbGluZXMgPCBjb25faCkgewotCQkJCWNvbnN0IGNoYXIgKmEgPSAiICAgICAg ICAgIEVOR0lORSAgICAgIEJVU1kgIjsKLQkJCQljb25zdCBjaGFyICpiID0gIiBNSV9TRU1BIE1J X1dBSVQiOwotCi0JCQkJcHJpbnRmKCJcMDMzWzdtJXMlKnMlc1wwMzNbMG1cbiIsCi0JCQkJICAg ICAgIGEsCi0JCQkJICAgICAgIChpbnQpKGNvbl93IC0gMSAtIHN0cmxlbihhKSAtIHN0cmxlbihi KSksCi0JCQkJICAgICAgICIgIiwgYik7Ci0JCQkJbGluZXMrKzsKLQkJCQlicmVhazsKLQkJCX0K LQkJfQotCi0JCWZvciAoaSA9IDA7IGkgPCBlbmdpbmVzLT5udW1fZW5naW5lcyAmJiBsaW5lcyA8 IGNvbl9oOyBpKyspIHsKLQkJCXN0cnVjdCBlbmdpbmUgKmVuZ2luZSA9IGVuZ2luZV9wdHIoZW5n aW5lcywgaSk7Ci0JCQl1bnNpZ25lZCBpbnQgbWF4X3cgPSBjb25fdyAtIDE7Ci0JCQl1bnNpZ25l ZCBpbnQgbGVuOwotCQkJY2hhciBzZW1hW0JVRlNaXTsKLQkJCWNoYXIgd2FpdFtCVUZTWl07Ci0J CQljaGFyIGJ1c3lbQlVGU1pdOwotCQkJY2hhciBidWZbMTI4XTsKLQkJCWRvdWJsZSB2YWw7Ci0K LQkJCWlmICghZW5naW5lLT5udW1fY291bnRlcnMpCi0JCQkJY29udGludWU7Ci0KLQkJCXBtdV9j YWxjKCZlbmdpbmUtPnNlbWEsIHNlbWEsIEJVRlNaLCAzLCAwLCAxZTksIHQsIDEwMCk7Ci0JCQlw bXVfY2FsYygmZW5naW5lLT53YWl0LCB3YWl0LCBCVUZTWiwgMywgMCwgMWU5LCB0LCAxMDApOwot CQkJbGVuID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiAgICAlcyUlICAgICVzJSUiLAot CQkJCSAgICAgICBzZW1hLCB3YWl0KTsKLQotCQkJcG11X2NhbGMoJmVuZ2luZS0+YnVzeSwgYnVz eSwgQlVGU1osIDYsIDIsIDFlOSwgdCwKLQkJCQkgMTAwKTsKLQkJCWxlbiArPSBwcmludGYoIiUx NnMgJXMlJSAiLCBlbmdpbmUtPmRpc3BsYXlfbmFtZSwgYnVzeSk7Ci0KLQkJCXZhbCA9IF9fcG11 X2NhbGMoJmVuZ2luZS0+YnVzeS52YWwsIDFlOSwgdCwgMTAwKTsKLQkJCXByaW50X3BlcmNlbnRh Z2VfYmFyKHZhbCwgbWF4X3cgLSBsZW4pOwotCi0JCQlwcmludGYoIiVzXG4iLCBidWYpOwotCi0J CQlsaW5lcysrOwotCQl9Ci0KLQkJaWYgKGxpbmVzKysgPCBjb25faCkKLQkJCXByaW50ZigiXG4i KTsKLQogCQl1c2xlZXAocGVyaW9kX3VzKTsKIAl9CiAKLS0gCjIuMTkuMQoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KaWd0LWRldiBtYWlsaW5nIGxpc3QK aWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2Cg==