From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id 60A4E6E140 for ; Mon, 19 Aug 2019 14:19:11 +0000 (UTC) From: Stanislav Lisovskiy Date: Mon, 19 Aug 2019 17:17:05 +0300 Message-Id: <20190819141705.22366-1-stanislav.lisovskiy@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v10] igt/tests: kms_plane_stress: Add plane stress test 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: stanislav.lisovskiy@intel.com, ville.syrjala@intel.com, martin.peres@intel.com List-ID: VGhpcyB0ZXN0IGF0dGVtcHRzIHRvIHV0aWxpemUgYWxsIGNvbm5lY3RlZApvdXRwdXRzIGF0IHRo ZSBzYW1lIHRpbWUsIHVzaW5nIG1heGltdW0gcG9zc2libGUKcmVzb2x1dGlvbiBhbmQgYW1vdW50 IG9mIHBsYW5lcywgdG8gY2hlY2sgd2hldGhlcgp3ZSBhcmUgaGl0aW5nIGFueSBraW5kIG9mIGJh bmR3aWR0aCwgd2F0ZXJtYXJrIG9yCm90aGVyIGxpbWl0YXRpb25zLgoKdjI6IEFkZGVkIGNwdSBh bmQgZ3B1IGxvYWQgdGhyZWFkcywgd2hpY2ggY29uc3VtZQogICAgYWRkaXRpb25hbCBiYW5kd2lk dGguCgp2MzogUmVtb3ZlZCBiaW5hcnkgcGljdHVyZSBmaWxlLCB1c2luZyBwYXR0ZXJuIGZiCiAg ICBpbnN0ZWFkLgoKdjQ6IE1vdmVkIEZCIGNyZWF0aW9uL3JlbW92YWwgdG8gYmV0dGVyIHBsYWNl LgoKdjU6IEZpeGVkIHJlYmFzZSBjb25mbGljdCBhbmQgY2hhbmdlZCAiZmItPnRpbGluZyIKICAg IHRvICJmYi0+bW9kaWZpZXIiLgoKdjY6IFJlbW92ZWQgdW5uZWNlc3NhcnkgbmV3IG1hY3JvIGZv ciBpdGVyYXRpbmcgb24KICAgIHBpcGVzLiBUYWtlbiBpbnRvIHVzZSBpZ3RfZ2V0dGltZSBpbnN0 ZWFkIG9mCiAgICBjbG9ja19nZXR0aW1lLgoKdjc6IFB1dCBmYiByZWluaXQgaW50byBpZ3RfZml4 dHVyZSB0byBhdm9pZCBwcm9ibGVtcy4KICAgIE1vdmUgc3RyZXNzIGZ1bmN0aW9uIHVuZGVyIGln dF9zdWJ0ZXN0LiBSZWxlYXNlIHBsYW5lcywKICAgIHJlbW92ZSByZWR1bmRhbnQgY29tbWl0LCBh c3NlcnQgaWYgbm8gcGxhbmVzIGNhbiBiZSB1c2VkLgoKdjg6IC0gQWRkIGJsaXR0aW5nIGFsc28s IHRvIGhhdmUgbW9yZSBmdW4KICAgIC0gTm93IHVzaW5nIHNlcGFyYXRlIGZyYW1lYnVmZmVyIHBl ciBlYWNoIHBsYW5lLgogICAgLSBGaXhlZCBtYWdpYyBudW1iZXIgZm9yIGJwcCB2YWx1ZShub3cg YmFzZWQgb24gZm9ybWF0KQogICAgLSBTb21lIG9wdGltaXphdGlvbnMsIGxpa2Ugbm90IGFwcGx5 aW5nIHNhbWUgbW9kZSBpZiBpdAogICAgICBoYXNuJ3QgY2hhbmdlLCBhbHNvIGRvbid0IGRvIGhp Z2hlc3QgbW9kZSBzZWFyY2ggb24KICAgICAgZWFjaCBpdGVyYXRpb24sIGp1c3QgY2FsY3VsYXRl IG9uY2UgYW5kIHVzZSBpdC4KICAgIC0gU29tZSBjb2RlIHJlZmFjdG9yaW5nOiBleHRyYWN0ZWQg c29tZSBsZW5ndGh5IGNvZGUKICAgICAgdG8gc2VwYXJhdGUgZnVuY3Rpb25zLgogICAgLSBGaXhl ZCB3cm9uZyBpbmRleCBmb3IgY3Vyc29yIEZCKGN1cnNvciBGQiBpcyBvbmUgcGVyIHBpcGUpCgp2 OToKICAgIC0gTW9yZSBoZWxwZXIgZnVuY3Rpb25zKHN0YXJ0L3N0b3AgdGhyZWFkcywgdGVzdCBp bml0KQogICAgLSBOb3cgZG9pbmcgR1BVIHdvcmsgaW4gcHRocmVhZHMgYWxzbwogICAgLSBEbyBH UFUgd29yayBpbiBhIHNlcGFyYXRlIGZyYW1lYnVmZmVyKG5vdCBkaXNwbGF5ZWQpCgp2MTA6CiAg ICAtIEZpeCBpc3N1ZSBpbiBtYWluIHRlc3RpbmcgY3ljbGUsIGNvZGUgcmVmYWN0b3JpbmcKClNp Z25lZC1vZmYtYnk6IFN0YW5pc2xhdiBMaXNvdnNraXkgPHN0YW5pc2xhdi5saXNvdnNraXlAaW50 ZWwuY29tPgotLS0KIGxpYi9ncHVfY21kcy5jICAgICAgICAgICB8ICAgNCArLQogdGVzdHMvTWFr ZWZpbGUuc291cmNlcyAgIHwgICAxICsKIHRlc3RzL2ttc19wbGFuZV9zdHJlc3MuYyB8IDg4NyAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHRlc3RzL21lc29uLmJ1aWxk ICAgICAgICB8ICAgMSArCiA0IGZpbGVzIGNoYW5nZWQsIDg5MSBpbnNlcnRpb25zKCspLCAyIGRl bGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL2ttc19wbGFuZV9zdHJlc3MuYwoK ZGlmZiAtLWdpdCBhL2xpYi9ncHVfY21kcy5jIGIvbGliL2dwdV9jbWRzLmMKaW5kZXggOGQyNzBl ZTguLjQ4ZGRmYTBjIDEwMDY0NAotLS0gYS9saWIvZ3B1X2NtZHMuYworKysgYi9saWIvZ3B1X2Nt ZHMuYwpAQCAtNjgxLDEyICs2ODEsMTIgQEAgZ2VuOF9lbWl0X2dwZ3B1X3dhbGsoc3RydWN0IGlu dGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKIAkJICAwKTsgLyogd2lkdGg6MSAqLwogCiAJLyogdGhy ZWFkIGdyb3VwIFggKi8KLQlPVVRfQkFUQ0goMCk7CisJT1VUX0JBVENIKHgpOwogCU9VVF9CQVRD SCgwKTsKIAlPVVRfQkFUQ0goeF9kaW0pOwogCiAJLyogdGhyZWFkIGdyb3VwIFkgKi8KLQlPVVRf QkFUQ0goMCk7CisJT1VUX0JBVENIKHkpOwogCU9VVF9CQVRDSCgwKTsKIAlPVVRfQkFUQ0goeV9k aW0pOwogCmRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIGIvdGVzdHMvTWFrZWZp bGUuc291cmNlcwppbmRleCAyNTBkYmQzMy4uMzNhZTc1ZTAgMTAwNjQ0Ci0tLSBhL3Rlc3RzL01h a2VmaWxlLnNvdXJjZXMKKysrIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwpAQCAtNjMsNiArNjMs NyBAQCBURVNUU19wcm9ncyA9IFwKIAlrbXNfcGxhbmVfbG93cmVzIFwKIAlrbXNfcGxhbmVfbXVs dGlwbGUgXAogCWttc19wbGFuZV9zY2FsaW5nIFwKKwlrbXNfcGxhbmVfc3RyZXNzIFwKIAlrbXNf cHJvcF9ibG9iIFwKIAlrbXNfcHJvcGVydGllcyBcCiAJa21zX3BzciBcCmRpZmYgLS1naXQgYS90 ZXN0cy9rbXNfcGxhbmVfc3RyZXNzLmMgYi90ZXN0cy9rbXNfcGxhbmVfc3RyZXNzLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjIzYjNmOTZmCi0tLSAvZGV2L251bGwKKysr IGIvdGVzdHMva21zX3BsYW5lX3N0cmVzcy5jCkBAIC0wLDAgKzEsODg3IEBACisvKgorICogQ29w eXJpZ2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhl cmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQor ICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmls ZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQg cmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMg dG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNl bnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1p dCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28s IHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBj b3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhl IG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBz dWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZU V0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBF WFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhF IEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERB TUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09O VFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4g Q09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdT CisgKiBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgImlndC5oIgorI2luY2x1ZGUg ImlndF9yYW5kLmgiCisjaW5jbHVkZSAiZ3BncHVfZmlsbC5oIgorI2luY2x1ZGUgImRybXRlc3Qu aCIKKyNpbmNsdWRlICJzd19zeW5jLmgiCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxw dGhyZWFkLmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5j bHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHBvbGwuaD4KKyNp bmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8c2VtYXBob3JlLmg+CisKKyNpZm5kZWYgRFJN X0NBUF9DVVJTT1JfV0lEVEgKKyNkZWZpbmUgRFJNX0NBUF9DVVJTT1JfV0lEVEggMHg4CisjZW5k aWYKKyNpZm5kZWYgRFJNX0NBUF9DVVJTT1JfSEVJR0hUCisjZGVmaW5lIERSTV9DQVBfQ1VSU09S X0hFSUdIVCAweDkKKyNlbmRpZgorCisKK2RybU1vZGVNb2RlSW5mbyB1aGRfbW9kZV82MGh6ID0g eworCS5uYW1lID0gIjM4NDB4MjE2MEA2MGh6IiwKKwkudnJlZnJlc2ggPSA2MCwKKwkuY2xvY2sg PSAxNDI2NjcqMiwKKwkuaGRpc3BsYXkgPSAzODQwLAorCS5oc3luY19zdGFydCA9IDE5MzYqMiwK KwkuaHN5bmNfZW5kID0gMTk1MioyLAorCS5odG90YWwgPSAyMTA0KjIsCisJLnZkaXNwbGF5ID0g MjE2MCwKKwkudnN5bmNfc3RhcnQgPSAxMDgzKjIsCisJLnZzeW5jX2VuZCA9IDEwOTcqMiwKKwku dnRvdGFsID0gMTEyOCoyLAorCS5mbGFncyA9IDB4YSwKK307CisKKyNkZWZpbmUgTl9GT1JNQVRT IDMKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBmb3JtYXRzW05fRk9STUFUU10gPSB7CisJRFJNX0ZP Uk1BVF9YUkdCODg4OCwKKwlEUk1fRk9STUFUX1JHQjU2NSwKKwlEUk1fRk9STUFUX1hSR0IyMTAx MDEwLAorfTsKKworI2RlZmluZSBOX1RJTElOR19NRVRIT0RTIDMKK3N0YXRpYyBjb25zdCB1aW50 NjRfdCB0aWxpbmdzW05fVElMSU5HX01FVEhPRFNdID0geworCURSTV9GT1JNQVRfTU9EX0xJTkVB UiwKKwlJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCwKKwlJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCwK K307CisKK3N0YXRpYyBjb25zdCBjaGFyICpmb3JtYXRfc3RyKGludCBmb3JtYXRfaW5kZXgpCit7 CisJc3dpdGNoIChmb3JtYXRzW2Zvcm1hdF9pbmRleF0pIHsKKwljYXNlIERSTV9GT1JNQVRfUkdC NTY1OgorCQlyZXR1cm4gInJnYjU2NSI7CisJY2FzZSBEUk1fRk9STUFUX1hSR0I4ODg4OgorCQly ZXR1cm4gInhyZ2I4ODg4IjsKKwljYXNlIERSTV9GT1JNQVRfWFJHQjIxMDEwMTA6CisJCXJldHVy biAieHJnYjIxMDEwMTAiOworCWRlZmF1bHQ6CisJCWlndF9hc3NlcnQoZmFsc2UpOworCX0KK30K Kworc3RhdGljIGNvbnN0IGNoYXIgKnRpbGluZ19zdHIoaW50IHRpbGluZ19pbmRleCkKK3sKKwlz d2l0Y2ggKHRpbGluZ3NbdGlsaW5nX2luZGV4XSkgeworCWNhc2UgRFJNX0ZPUk1BVF9NT0RfTElO RUFSOgorCQlyZXR1cm4gInVudGlsZWQiOworCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQ6 CisJCXJldHVybiAieHRpbGVkIjsKKwljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEOgorCQly ZXR1cm4gInl0aWxlZCI7CisJZGVmYXVsdDoKKwkJaWd0X2Fzc2VydChmYWxzZSk7CisJfQorfQor CisKKyNkZWZpbmUgTUFYX0NPUkVTIDgKKyNkZWZpbmUgTUFYX1BMQU5FUyAxNgorCitzdHJ1Y3Qg ZGF0YTsKKworc3RydWN0IHRocmVhZF9jb250ZXh0IHsKKwlzdHJ1Y3QgZGF0YSAqZGF0YTsKKwlp bnQgaWQ7CisJdm9pZCAqYnVmMTsKKwl2b2lkICpidWYyOworfTsKKworc3RydWN0IHJlY3Qgewor CWludCB4OworCWludCB5OworCWludCB3OworCWludCBoOworfTsKKworc3RydWN0IGdwdV9jb250 ZXh0IHsKKwlzdHJ1Y3QgZGF0YSAqZGF0YTsKKwlpbnQgcGlwZTsKKwlpbnQgY29sb3I7CisJc3Ry dWN0IGlndF9mYiAqZmJfcHRyOworCXN0cnVjdCByZWN0IGJsdF9yZWN0OworCXN0cnVjdCBpbnRl bF9iYXRjaGJ1ZmZlciAqYmF0Y2g7Cit9OworCitlbnVtIHsKKwlSVU5OSU5HLAorCVNUT1BQRUQs CisJUEFVU0VELAorfSB0aHJlYWRfc3RhdGU7CisKK3N0cnVjdCBkYXRhIHsKKwlpbnQgZHJtX2Zk OworCWlndF9kaXNwbGF5X3QgZGlzcGxheTsKKwlpbnQgbnVtX3BsYW5lc1tJR1RfTUFYX1BJUEVT XTsKKwl1aW50MzJfdCBmb3JtYXQ7CisJdWludDY0X3QgbW9kaWZpZXI7CisJdWludDMyX3QgZGV2 aWQ7CisJZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdyOworCWRybU1vZGVNb2RlSW5mbyAqbGFzdF9t b2RlW0lHVF9NQVhfUElQRVNdOworCXN0cnVjdCBpZ3RfZmIgZmJbSUdUX01BWF9QSVBFUyAqIE1B WF9QTEFORVNdOworCXN0cnVjdCBpZ3RfZmIgY3Vyc29yX2ZiW0lHVF9NQVhfUElQRVNdOworCXB0 aHJlYWRfdCBjcHVfdGhyZWFkW01BWF9DT1JFU107CisJcHRocmVhZF90IGdwdV90aHJlYWRbSUdU X01BWF9QSVBFU107CisJYm9vbCBjcHVfdGhyZWFkX3N0b3BbTUFYX0NPUkVTXTsKKwlpbnQgZ3B1 X3RocmVhZF9zdGF0ZVtJR1RfTUFYX1BJUEVTXTsKKwlzZW1fdCBncHVfdGhyZWFkX3BhdXNlX2Fj a1tJR1RfTUFYX1BJUEVTXTsKKwlzdHJ1Y3QgdGhyZWFkX2NvbnRleHQgY3B1X2NvbnRleHRbTUFY X0NPUkVTXTsKKwlzdHJ1Y3QgZ3B1X2NvbnRleHQgZ3B1X2NvbnRleHRbSUdUX01BWF9QSVBFU107 CisJZHJtTW9kZU1vZGVJbmZvICpoaWdoZXN0X21vZGVbSUdUX01BWF9QSVBFU107CisJZHJtTW9k ZUNvbm5lY3RvclB0ciBjb25uZWN0b3JzW0lHVF9NQVhfUElQRVNdOworCWRybU1vZGVSZXMgKm1v ZGVfcmVzb3VyY2VzOworCWludCBudW1iZXJfb2ZfY29yZXM7Cit9OworCisKK3N0YXRpYyB2b2lk IHBhdXNlX2dwdV90aHJlYWRzKHN0cnVjdCBkYXRhICpkYXRhKTsKKworc3RhdGljIHZvaWQgcmVz dW1lX2dwdV90aHJlYWRzKHN0cnVjdCBkYXRhICpkYXRhKTsKKworc3RhdGljIHZvaWQgc3RvcF9n cHVfdGhyZWFkcyhzdHJ1Y3QgZGF0YSAqZGF0YSk7CisKK3N0YXRpYyB2b2lkIHN0YXJ0X2dwdV90 aHJlYWRzKHN0cnVjdCBkYXRhICpkYXRhKTsKKworc3RydWN0IGJhc2VfY3JjIHsKKwlib29sIHNl dDsKKwlpZ3RfY3JjX3QgY3JjOworfTsKKworaWd0X3BpcGVfY3JjX3QgKnBpcGVfY3JjOworCisj ZGVmaW5lIEJVRl9TSVpFIDEyOCoxMDI0KjEwMjQKKworc3RhdGljIHZvaWQgKmNwdV9sb2FkKHZv aWQgKmQpCit7CisJY2hhciAqYnVmMSwgKmJ1ZjI7CisJc3RydWN0IHRocmVhZF9jb250ZXh0ICpj b250ZXh0ID0gKHN0cnVjdCB0aHJlYWRfY29udGV4dCAqKWQ7CisJc3RydWN0IGRhdGEgKmRhdGEg PSBjb250ZXh0LT5kYXRhOworCisJYnVmMSA9IGNvbnRleHQtPmJ1ZjE7CisJYnVmMiA9IGNvbnRl eHQtPmJ1ZjI7CisKKwlkYXRhLT5jcHVfdGhyZWFkX3N0b3BbY29udGV4dC0+aWRdID0gZmFsc2U7 CisKKwlpZ3RfaW5mbygiQ1BVIHRocmVhZCBjcHUgaWQgJWQgc3RhcnRcbiIsIGNvbnRleHQtPmlk KTsKKworCS8qIEp1c3QgdG8gbWFrZSBDUFUgYnVzeS4uLiAqLworCXdoaWxlKCFkYXRhLT5jcHVf dGhyZWFkX3N0b3BbY29udGV4dC0+aWRdKSB7CisJCW1lbWNweShidWYxLCBidWYyLCBCVUZfU0la RSk7CisJCW1lbWNweShidWYyLCBidWYxLCBCVUZfU0laRSk7CisJfQorCisJaWd0X2luZm8oIkNQ VSB0aHJlYWQgY3B1IGlkICVkIHN0b3BcbiIsIGNvbnRleHQtPmlkKTsKKworCXJldHVybiBOVUxM OworfQorCisKK3N0YXRpYyB2b2lkIHNjcmF0Y2hfYnVmX2luaXQoc3RydWN0IGlndF9idWYgKmJ1 ZiwKKwkJCWRybV9pbnRlbF9ibyAqYm8sIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IHN0cmlk ZSwgaW50IHRpbGluZywgaW50IGJwcCkKK3sKKwlidWYtPmJvID0gYm87CisJYnVmLT5zdHJpZGUg PSBzdHJpZGU7CisJYnVmLT50aWxpbmcgPSB0aWxpbmc7CisJYnVmLT5zaXplID0gd2lkdGggKiBo ZWlnaHQgKiBicHAgLyA4OworCWJ1Zi0+YnBwID0gYnBwOworfQorCitzdGF0aWMgdm9pZCAqZ3B1 X2xvYWQodm9pZCAqcHRyKQoreworCXN0cnVjdCBncHVfY29udGV4dCAqY29udGV4dCA9IChzdHJ1 Y3QgZ3B1X2NvbnRleHQgKilwdHI7CisJc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCA9 IE5VTEw7CisJc3RydWN0IGlndF9idWYgZHN0OworCXN0cnVjdCBkYXRhICpkYXRhID0gY29udGV4 dC0+ZGF0YTsKKwlpbnQgcGlwZSA9IGNvbnRleHQtPnBpcGU7CisJaWd0X2ZpbGxmdW5jX3QgZ3Bn cHVfZmlsbCA9IE5VTEw7CisJZHJtX2ludGVsX2JvICpibyA9IE5VTEw7CisJc3RydWN0IGlndF9m YiBmYiwgKmZiX3B0ciA9IE5VTEwsICpsYXN0X2ZiX3B0ciA9IE5VTEw7CisJaW50IHJlY3RfZGl2 aXNvcjsKKwlpbnQgcmVjdF93aWR0aDsKKwlpbnQgcmVjdF9oZWlnaHQ7CisJaW50IGZyYW1lX3dp ZHRoOworCWludCBmcmFtZV9oZWlnaHQ7CisJaW50IGJ5dGVzX3Blcl9waXhlbDsKKwlkcm1Nb2Rl TW9kZUluZm8gKm1vZGU7CisJaW50IGZyYW1lID0gMDsKKwlpbnQgeCwgeTsKKwlpbnQgbGFzdF9z dGF0ZTsKKworCWdwZ3B1X2ZpbGwgPSBpZ3RfZ2V0X2dwZ3B1X2ZpbGxmdW5jKGRhdGEtPmRldmlk KTsKKworCWlndF9yZXF1aXJlX2YoZ3BncHVfZmlsbCwKKwkgICAgICAibm8gZ3BncHUtZmlsbCBm dW5jdGlvblxuIik7CisKKwliYXRjaCA9IGNvbnRleHQtPmJhdGNoOworCWlndF9hc3NlcnQoYmF0 Y2gpOworCisJbW9kZSA9IGRhdGEtPmhpZ2hlc3RfbW9kZVtwaXBlXTsKKwlpZ3RfYXNzZXJ0KG1v ZGUpOworCisJaWd0X2NyZWF0ZV9jb2xvcl9wYXR0ZXJuX2ZiKGRhdGEtPmRybV9mZCwgbW9kZS0+ aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5LAorCQkgICAgZGF0YS0+Zm9ybWF0LAorCQkgICAgZGF0 YS0+bW9kaWZpZXIsCisJCSAgICAwLjAsIDEuMCwgMC4wLCAmZmIpOworCisJaWd0X2luZm8oIkdQ VSB0aHJlYWQgcGlwZSAlZCBzdGFydFxuIiwgcGlwZSk7CisKKwlsYXN0X3N0YXRlID0gUlVOTklO RzsKKworCXdoaWxlIChkYXRhLT5ncHVfdGhyZWFkX3N0YXRlW3BpcGVdICE9IFNUT1BQRUQpIHsK KwkJaWYgKGxhc3Rfc3RhdGUgIT0gZGF0YS0+Z3B1X3RocmVhZF9zdGF0ZVtwaXBlXSkgeworCQkJ bGFzdF9zdGF0ZSA9IGRhdGEtPmdwdV90aHJlYWRfc3RhdGVbcGlwZV07CisJCQlzZW1fcG9zdCgm ZGF0YS0+Z3B1X3RocmVhZF9wYXVzZV9hY2tbcGlwZV0pOworCQl9CisJCWlmIChkYXRhLT5ncHVf dGhyZWFkX3N0YXRlW3BpcGVdID09IFBBVVNFRCkKKwkJCWNvbnRpbnVlOworCisJCWlmICghY29u dGV4dC0+ZmJfcHRyKSB7CisJCQlmYl9wdHIgPSAmZmI7CisJCX0KKwkJZWxzZSB7CisJCQlmYl9w dHIgPSBjb250ZXh0LT5mYl9wdHI7CisJCX0KKworCQlpZiAobGFzdF9mYl9wdHIgIT0gZmJfcHRy KSB7CisJCQlpZ3RfaW5mbygiR1BVIHRocmVhZCBwaXBlICVkOiBDaGFuZ2UgZnJvbSBGQiAleCB0 byBGQiAleFxuIiwgcGlwZSwgbGFzdF9mYl9wdHIsIGZiX3B0cik7CisJCQlmcmFtZV93aWR0aCA9 IGZiX3B0ci0+d2lkdGg7CisJCQlmcmFtZV9oZWlnaHQgPSBmYl9wdHItPmhlaWdodDsKKwkJCWJ5 dGVzX3Blcl9waXhlbCA9IGZiX3B0ci0+cGxhbmVfYnBwWzBdIC8gODsKKwkJCWJvID0gZ2VtX2hh bmRsZV90b19saWJkcm1fYm8oZGF0YS0+YnVmbWdyLCBkYXRhLT5kcm1fZmQsICIiLCBmYl9wdHIt PmdlbV9oYW5kbGUpOworCQkJaWd0X2Fzc2VydChibyk7CisKKwkJCXNjcmF0Y2hfYnVmX2luaXQo JmRzdCwgYm8sIGZyYW1lX3dpZHRoLCBmcmFtZV9oZWlnaHQsIGZiX3B0ci0+c3RyaWRlc1swXSwg ZmJfcHRyLT5tb2RpZmllciwgZmJfcHRyLT5wbGFuZV9icHBbMF0pOworCQl9CisJCWxhc3RfZmJf cHRyID0gZmJfcHRyOworCisJCS8qIGRpdmlkZSBhdCBsZWFzdCBieSAyIGFuZCB1cCB0byA4ICov CisJCXJlY3RfZGl2aXNvciA9IDEgPDwgKGhhcnNfcGV0cnVza2FfZjU0XzFfcmFuZG9tX3Vuc2Fm ZV9tYXgoMykgKyAxKTsKKworCQlyZWN0X3dpZHRoID0gZnJhbWVfd2lkdGggLyByZWN0X2Rpdmlz b3I7CisJCXJlY3RfaGVpZ2h0ID0gZnJhbWVfaGVpZ2h0IC8gcmVjdF9kaXZpc29yOworCisJCS8q IEZpbGwgdGhlIGZyYW1lYnVmZmVyIHVzaW5nIHNoYWRlciAqLworCQl4ID0gMDsKKwkJeSA9IGZy YW1lX2hlaWdodCAvIDI7CisKKwkJZ3BncHVfZmlsbChiYXRjaCwKKwkJICAgJmRzdCwgeCwgeSwg KGZyYW1lX3dpZHRoICogYnl0ZXNfcGVyX3BpeGVsKSwgZnJhbWVfaGVpZ2h0LAorCQkgICBjb250 ZXh0LT5jb2xvcik7CisKKwkJY29udGV4dC0+Ymx0X3JlY3QueCA9IHggKyAoY29udGV4dC0+Ymx0 X3JlY3QueCArIHJlY3Rfd2lkdGgpICUgKGZyYW1lX3dpZHRoIC0gcmVjdF93aWR0aCk7CisJCWNv bnRleHQtPmJsdF9yZWN0LnkgPSB5ICsgKGNvbnRleHQtPmJsdF9yZWN0LnkgKyByZWN0X2hlaWdo dCkgJSAoZnJhbWVfaGVpZ2h0IC0gcmVjdF9oZWlnaHQpOworCisJCS8qIEJsaXQgcmFuZG9tIHNp emVkIGFuZCBwb3NpdGlvbmVkIHJlY3RhbmdsZSAqLworCisJCWdwZ3B1X2ZpbGwoYmF0Y2gsCisJ CSAgICZkc3QsIGNvbnRleHQtPmJsdF9yZWN0LngsIGNvbnRleHQtPmJsdF9yZWN0LnksICgoY29u dGV4dC0+Ymx0X3JlY3QueCArIHJlY3Rfd2lkdGgpICogYnl0ZXNfcGVyX3BpeGVsKSwgY29udGV4 dC0+Ymx0X3JlY3QueSArIHJlY3RfaGVpZ2h0LAorCQkgICBjb250ZXh0LT5jb2xvciArIDB4ODAp OworCisJCWNvbnRleHQtPmNvbG9yICs9IDQ7CisKKwkJZnJhbWUrKzsKKwl9CisKKwlkcm1faW50 ZWxfYm9fdW5yZWZlcmVuY2UoYm8pOworCisJaWd0X3JlbW92ZV9mYihkYXRhLT5kaXNwbGF5LmRy bV9mZCwgJmZiKTsKKworCWlndF9pbmZvKCJHUFUgdGhyZWFkIHBpcGUgJWQgc3RvcC4gRnJhbWVz IHJlbmRlcmVkOiAlZFxuIiwgcGlwZSwgZnJhbWUpOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0 YXRpYyBpbmxpbmUgdWludDMyX3QgcGlwZV9zZWxlY3QoZW51bSBwaXBlIHBpcGUpCit7CisJaWYg KHBpcGUgPiAxKQorCQlyZXR1cm4gcGlwZSA8PCBEUk1fVkJMQU5LX0hJR0hfQ1JUQ19TSElGVDsK KwllbHNlIGlmIChwaXBlID4gMCkKKwkJcmV0dXJuIERSTV9WQkxBTktfU0VDT05EQVJZOworCWVs c2UKKwkJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBnZXRfdmJsYW5rKGludCBmZCwg ZW51bSBwaXBlIHBpcGUsIHVuc2lnbmVkIGZsYWdzKQoreworCXVuaW9uIGRybV93YWl0X3ZibGFu ayB2Ymw7CisKKwltZW1zZXQoJnZibCwgMCwgc2l6ZW9mKHZibCkpOworCXZibC5yZXF1ZXN0LnR5 cGUgPSBEUk1fVkJMQU5LX1JFTEFUSVZFIHwgcGlwZV9zZWxlY3QocGlwZSkgfCBmbGFnczsKKwlp ZiAoZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9XQUlUX1ZCTEFOSywgJnZibCkpCisJCXJldHVybiAw OworCisJcmV0dXJuIHZibC5yZXBseS5zZXF1ZW5jZTsKK30KKworCitzdGF0aWMgaW50IHBsYW5l X3N0cmVzcyhzdHJ1Y3QgZGF0YSAqZGF0YSwgaWd0X291dHB1dF90ICpvdXRwdXQsIGVudW0gcGlw ZSBwaXBlLCBkcm1Nb2RlTW9kZUluZm8gKm1vZGUpCit7CisJaWd0X3BsYW5lX3QgKnBsYW5lOwor CWludCBpOworCWludCByZXQ7CisJaW50IGxhc3RfcGxhbmU7CisJYm9vbCBuZXdfbW9kZSA9IGZh bHNlOworCXVpbnQ2NF90IGN1cnNvcl93aWR0aCwgY3Vyc29yX2hlaWdodDsKKworCWRvX29yX2Rp ZShkcm1HZXRDYXAoZGF0YS0+ZHJtX2ZkLCBEUk1fQ0FQX0NVUlNPUl9XSURUSCwgJmN1cnNvcl93 aWR0aCkpOworCWRvX29yX2RpZShkcm1HZXRDYXAoZGF0YS0+ZHJtX2ZkLCBEUk1fQ0FQX0NVUlNP Ul9IRUlHSFQsICZjdXJzb3JfaGVpZ2h0KSk7CisKKwlpZiAoZGF0YS0+bGFzdF9tb2RlW3BpcGVd ICE9IG1vZGUpIHsKKwkJaWd0X291dHB1dF9vdmVycmlkZV9tb2RlKG91dHB1dCwgbW9kZSk7CisJ CWlndF9vdXRwdXRfc2V0X3BpcGUob3V0cHV0LCBwaXBlKTsKKworCQlyZXQgPSBpZ3RfZGlzcGxh eV90cnlfY29tbWl0X2F0b21pYygmZGF0YS0+ZGlzcGxheSwKKwkJCQlEUk1fTU9ERV9BVE9NSUNf VEVTVF9PTkxZIHwgRFJNX01PREVfQVRPTUlDX0FMTE9XX01PREVTRVQsIE5VTEwpOworCQlpZiAo cmV0KSB7CisJCQlpZ3Rfd2FybigiQ291bGQgbm90IGNvbW1pdCBtb2RlOiBcbiIpOworCQkJa21z dGVzdF9kdW1wX21vZGUobW9kZSk7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJaWd0X2Rpc3Bs YXlfY29tbWl0MigmZGF0YS0+ZGlzcGxheSwgQ09NTUlUX0FUT01JQyk7CisJCWRhdGEtPmxhc3Rf bW9kZVtwaXBlXSA9IG1vZGU7CisJCW5ld19tb2RlID0gdHJ1ZTsKKwl9CisKKwkvKgorCSAqIExv b2tzIGxpa2Ugd2UgY2FuJ3QgaGF2ZSBwbGFuZXMgb24gdGhhdCBwaXBlIGF0IGFsbAorCSAqLwor CWlmICghZGF0YS0+bnVtX3BsYW5lc1twaXBlXSkKKwkJcmV0dXJuIDA7CisKKwltb2RlID0gaWd0 X291dHB1dF9nZXRfbW9kZShvdXRwdXQpOworCisJaWYgKG5ld19tb2RlKSB7CisJCWkgPSAwOwor CQlmb3JfZWFjaF9wbGFuZV9vbl9waXBlKCZkYXRhLT5kaXNwbGF5LCBwaXBlLCBwbGFuZSkgewor CQkJaW50IHBsYW5lX3dpZHRoLCBwbGFuZV9oZWlnaHQ7CisJCQlpZiAocGxhbmUtPnR5cGUgPT0g RFJNX1BMQU5FX1RZUEVfQ1VSU09SKSB7CisJCQkJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgJmRh dGEtPmN1cnNvcl9mYltwaXBlXSk7CisJCQkJaWd0X2ZiX3NldF9zaXplKCZkYXRhLT5jdXJzb3Jf ZmJbcGlwZV0sIHBsYW5lLCBjdXJzb3Jfd2lkdGgsIGN1cnNvcl9oZWlnaHQpOworCQkJCWlndF9w bGFuZV9zZXRfc2l6ZShwbGFuZSwgY3Vyc29yX3dpZHRoLCBjdXJzb3JfaGVpZ2h0KTsKKwkJCQlw bGFuZV93aWR0aCA9IGN1cnNvcl93aWR0aDsKKwkJCQlwbGFuZV9oZWlnaHQgPSBjdXJzb3JfaGVp Z2h0OworCQkJfSBlbHNlIHsKKwkJCQlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCAmZGF0YS0+ZmJb cGlwZSAqIE1BWF9QTEFORVMgKyBpXSk7CisJCQkJaWd0X3BsYW5lX3NldF9wb3NpdGlvbihwbGFu ZSwgMCwgMCk7CisJCQkJaWd0X2ZiX3NldF9zaXplKCZkYXRhLT5mYltwaXBlICogTUFYX1BMQU5F UyArIGldLCBwbGFuZSwgbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5KTsKKwkJCQlpZ3Rf cGxhbmVfc2V0X3NpemUocGxhbmUsIG1vZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxheSk7CisJ CQkJcGxhbmVfd2lkdGggPSBtb2RlLT5oZGlzcGxheTsKKwkJCQlwbGFuZV9oZWlnaHQgPSBtb2Rl LT52ZGlzcGxheTsKKwkJCX0KKworCQkJcmV0ID0gaWd0X2Rpc3BsYXlfdHJ5X2NvbW1pdF9hdG9t aWMoJmRhdGEtPmRpc3BsYXksIERSTV9NT0RFX0FUT01JQ19URVNUX09OTFkgfCBEUk1fTU9ERV9B VE9NSUNfQUxMT1dfTU9ERVNFVCwgTlVMTCk7CisJCQl3aGlsZSAocmV0KSB7CisJCQkJaWYgKHBs YW5lX3dpZHRoIDw9IGN1cnNvcl93aWR0aCB8fCBwbGFuZV9oZWlnaHQgPD0gY3Vyc29yX2hlaWdo dCkKKwkJCQkJYnJlYWs7CisJCQkJcGxhbmVfd2lkdGggLz0gMjsKKwkJCQlwbGFuZV9oZWlnaHQg Lz0gMjsKKwkJCQlpZ3RfcGxhbmVfc2V0X3NpemUocGxhbmUsIHBsYW5lX3dpZHRoLCBwbGFuZV9o ZWlnaHQpOworCQkJCWlndF9pbmZvKCJSZWR1Y2VkIHBsYW5lICVkIHNpemUgdG8gJWR4JWRcbiIs IHBsYW5lLT5pbmRleCwgcGxhbmVfd2lkdGgsIHBsYW5lX2hlaWdodCk7CisJCQkJcmV0ID0gaWd0 X2Rpc3BsYXlfdHJ5X2NvbW1pdF9hdG9taWMoJmRhdGEtPmRpc3BsYXksIERSTV9NT0RFX0FUT01J Q19URVNUX09OTFkgfCBEUk1fTU9ERV9BVE9NSUNfQUxMT1dfTU9ERVNFVCwgTlVMTCk7CisJCQl9 CisJCQlpZiAocmV0KSB7CisJCQkJaWd0X2luZm8oIlBsYW5lICVkIHBpcGUgJWQgdHJ5IGNvbW1p dCBmYWlsZWQsIGV4aXRpbmdcbiIsIGksIHBpcGUpOworCQkJCWRhdGEtPm51bV9wbGFuZXNbcGlw ZV0gPSBpOworCQkJCS8qCisJCQkJICogV2UgaGF2ZSBub3cgZGV0ZXJtaW5lZCBtYXggYW1vdW50 IG9mIGZ1bGwgc2l6ZWQgcGxhbmVzLCB3ZSB3aWxsIGp1c3QKKwkJCQkgKiBrZWVwIGl0IGluIG1p bmQgYW5kIGJlIHNtYXJ0ZXIgbmV4dCB0aW1lLiBBbHNvIGxldHMgcmVtb3ZlIHVubmVlZGVkIGZi cy4KKwkJCQkgKiBEb24ndCBkZXN0cm95IGN1cnNvcl9mYiBhcyB3aWxsIHRha2UgY2FyZSBhYm91 dCBpdCBhdCB0aGUgZW5kLgorCQkJCSAqLworCQkJCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsIE5V TEwpOworCQkJCXdoaWxlIChpIDwgTUFYX1BMQU5FUykgeworCQkJCQlpZ3RfcmVtb3ZlX2ZiKGRh dGEtPmRpc3BsYXkuZHJtX2ZkLCAmZGF0YS0+ZmJbcGlwZSAqIE1BWF9QTEFORVMgKyBpXSk7CisJ CQkJCWRhdGEtPmZiW3BpcGUgKiBNQVhfUExBTkVTICsgaV0uZmJfaWQgPSAwOworCQkJCQlpKys7 CisJCQkJfQorCQkJCWkgPSBkYXRhLT5udW1fcGxhbmVzW3BpcGVdOworCQkJfQorCQkJaWYgKCsr aSA+PSBkYXRhLT5udW1fcGxhbmVzW3BpcGVdKQorCQkJCWJyZWFrOworCQl9CisJCWlndF9kaXNw bGF5X2NvbW1pdDIoJmRhdGEtPmRpc3BsYXksIENPTU1JVF9BVE9NSUMpOworCX0KKworCWxhc3Rf cGxhbmUgPSBkYXRhLT5udW1fcGxhbmVzW3BpcGVdIC0gMTsKKwlpZiAobGFzdF9wbGFuZSA+PSA3 KQorCQlsYXN0X3BsYW5lID0gNjsKKworCWlmIChkYXRhLT5ncHVfY29udGV4dFtwaXBlXS5mYl9w dHIgIT0gJmRhdGEtPmZiW3BpcGUgKiBNQVhfUExBTkVTICsgbGFzdF9wbGFuZV0pIHsKKwkJZGF0 YS0+Z3B1X2NvbnRleHRbcGlwZV0uZmJfcHRyID0gJmRhdGEtPmZiW3BpcGUgKiBNQVhfUExBTkVT ICsgbGFzdF9wbGFuZV07CisJCWlndF9pbmZvKCJQbGFuZSBzdHJlc3MgZm9yIHBpcGUgJWQ6IFNl dCBjb250ZXh0IGZiIHB0ciAleFxuIiwgcGlwZSwgZGF0YS0+Z3B1X2NvbnRleHRbcGlwZV0uZmJf cHRyKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgZHJtTW9kZU1vZGVJbmZvICog ZmluZF9oaWdoZXN0X21vZGUoZHJtTW9kZUNvbm5lY3RvciAqY29ubmVjdG9yKQoreworCWRybU1v ZGVNb2RlSW5mbyAqaGlnaGVzdF9tb2RlID0gTlVMTDsKKwlpbnQgajsKKworCWZvciAoaiA9IDA7 IGogPCBjb25uZWN0b3ItPmNvdW50X21vZGVzOyBqKyspIHsKKwkJaWYgKCFoaWdoZXN0X21vZGUp IHsKKwkJCWhpZ2hlc3RfbW9kZSA9ICZjb25uZWN0b3ItPm1vZGVzW2pdOworCQl9CisJCWVsc2Ug aWYgKGNvbm5lY3Rvci0+bW9kZXNbal0udmRpc3BsYXkgJiYgY29ubmVjdG9yLT5tb2Rlc1tqXS5o ZGlzcGxheSkgeworCQkJaWYgKGhpZ2hlc3RfbW9kZS0+aGRpc3BsYXkgPCBjb25uZWN0b3ItPm1v ZGVzW2pdLmhkaXNwbGF5KQorCQkJCWhpZ2hlc3RfbW9kZSA9ICZjb25uZWN0b3ItPm1vZGVzW2pd OworCQkJfQorCX0KKworCXJldHVybiBoaWdoZXN0X21vZGU7Cit9CisKK3R5cGVkZWYgZHJtTW9k ZUNvbm5lY3RvciAqIGRybU1vZGVDb25uZWN0b3JQdHI7CisKK3N0YXRpYyB2b2lkIGZpbGxfY29u bmVjdG9yX3RvX3BpcGVfYXJyYXkoc3RydWN0IGRhdGEgKmRhdGEsIGRybU1vZGVSZXMgKm1vZGVf cmVzb3VyY2VzLCBkcm1Nb2RlQ29ubmVjdG9yUHRyICpjb25uZWN0b3JzKQoreworCWludCBwaXBl ID0gMCwgY3J0Y19pZDsKKwlpZ3Rfb3V0cHV0X3QgKm91dHB1dDsKKwlpbnQgaTsKKworCW1lbXNl dChjb25uZWN0b3JzLCAwLCBzaXplb2YoZHJtTW9kZUNvbm5lY3RvclB0cikgKiBJR1RfTUFYX1BJ UEVTKTsKKworCWZvcl9lYWNoX2Nvbm5lY3RlZF9vdXRwdXQoJmRhdGEtPmRpc3BsYXksIG91dHB1 dCkgeworCQljcnRjX2lkID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IG1vZGVfcmVzb3VyY2VzLT5j b3VudF9jb25uZWN0b3JzOyBpKyspIHsKKwkJCWRybU1vZGVDb25uZWN0b3IgKmNvbm5lY3RvcjsK KworCQkJY29ubmVjdG9yID0gZHJtTW9kZUdldENvbm5lY3RvckN1cnJlbnQoZGF0YS0+ZHJtX2Zk LAorCQkJCSAgICAgICBtb2RlX3Jlc291cmNlcy0+Y29ubmVjdG9yc1tpXSk7CisKKwkJCWlmICgh Y29ubmVjdG9yKSB7CisJCQkJaWd0X3dhcm4oImNvdWxkIG5vdCBnZXQgY29ubmVjdG9yICVpOiAl c1xuIiwKKwkJCQkJbW9kZV9yZXNvdXJjZXMtPmNvbm5lY3RvcnNbaV0sIHN0cmVycm9yKGVycm5v KSk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWlmIChjb25uZWN0b3ItPmNvbm5lY3Rpb24g PT0gRFJNX01PREVfQ09OTkVDVEVEKSB7CisJCQkJaWYgKGNydGNfaWQgPT0gcGlwZSkgeworCQkJ CQljb25uZWN0b3JzW3BpcGVdID0gKGRybU1vZGVDb25uZWN0b3JQdHIpY29ubmVjdG9yOworCQkJ CX0KKwkJCQljcnRjX2lkKys7CisJCQl9CisJCQllbHNlCisJCQkJZHJtTW9kZUZyZWVDb25uZWN0 b3IoY29ubmVjdG9yKTsKKwkJfQorCQlpZiAoKCsrcGlwZSkgPT0gSUdUX01BWF9QSVBFUykKKwkJ CWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgcmVsZWFzZV9jb25uZWN0b3JzKGRybU1vZGVD b25uZWN0b3JQdHIgKmNvbm5lY3RvcnMpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IElH VF9NQVhfUElQRVM7IGkrKykgeworCQlpZiAoY29ubmVjdG9yc1tpXSkKKwkJCWRybU1vZGVGcmVl Q29ubmVjdG9yKGNvbm5lY3RvcnNbaV0pOworCX0KK30KKworI2RlZmluZSBNSU5fRFVSQVRJT05f U0VDIDUuMDAKKyNkZWZpbmUgTUlOX0lURVJBVElPTlMgMjAKKworc3RhdGljIHZvaWQgc3RyZXNz KHN0cnVjdCBkYXRhICpkYXRhKQoreworCXN0cnVjdCB0aW1lc3BlYyBzdGFydCwgZW5kOworCWln dF9vdXRwdXRfdCAqb3V0cHV0OworCWludCByZXQ7CisJaW50IHBpcGU7CisJaW50IGl0ZXJhdGlv bnMgPSAwOworCWJvb2wgbmVlZF9jb250aW51ZTsKKwlpZ3RfY3JjX3QgY3JjLCBjcmMyOworCisJ aWd0X2dldHRpbWUoJnN0YXJ0KTsKKworCWRvIHsKKwkJLyoKKwkJICogSW5jcmVtZW50IHBpcGUg b25seSBmb3IgY29ubmVjdGVkIG91dHB1dHMsCisJCSAqIGZvciBlYWNoIGNvbm5lY3RlZCBvdXRw dXQgd2Ugc2hvdWxkIGFzc2lnbiBhCisJCSAqIGRpZmZlcmVudCBwaXBlLgorCQkgKi8KKwkJcGlw ZSA9IDA7CisJCWZvcl9lYWNoX2Nvbm5lY3RlZF9vdXRwdXQoJmRhdGEtPmRpc3BsYXksIG91dHB1 dCkgeworCQkJaWd0X2Fzc2VydF9mKGRhdGEtPmRpc3BsYXkucGlwZXNbcGlwZV0ubl9wbGFuZXMg PCBNQVhfUExBTkVTLAorCQkJCSJDdXJyZW50bHkgd2UgZG9uJ3Qgc3VwcG9ydCBtb3JlIHRoYW4g JWQgcGxhbmVzISIsIE1BWF9QTEFORVMpOworCisJCQlwaXBlX2NyYyA9IGlndF9waXBlX2NyY19u ZXcoZGF0YS0+ZHJtX2ZkLCBwaXBlLAorCQkJCUlOVEVMX1BJUEVfQ1JDX1NPVVJDRV9BVVRPKTsK KworCQkJcmV0ID0gcGxhbmVfc3RyZXNzKGRhdGEsIG91dHB1dCwgcGlwZSwgZGF0YS0+aGlnaGVz dF9tb2RlW3BpcGVdKTsKKworCQkJaWYgKCEoKGludClpZ3RfdGltZV9lbGFwc2VkKCZzdGFydCwg JmVuZCkgJSAoKGludClNSU5fRFVSQVRJT05fU0VDLzQpKSkgeworCQkJCXBhdXNlX2dwdV90aHJl YWRzKGRhdGEpOworCQkJCWdldF92YmxhbmsoZGF0YS0+ZGlzcGxheS5kcm1fZmQsIHBpcGUsIERS TV9WQkxBTktfTkVYVE9OTUlTUyk7CisKKwkJCQlpZ3RfcGlwZV9jcmNfY29sbGVjdF9jcmMocGlw ZV9jcmMsICZjcmMpOworCisJCQkJZ2V0X3ZibGFuayhkYXRhLT5kaXNwbGF5LmRybV9mZCwgcGlw ZSwgRFJNX1ZCTEFOS19ORVhUT05NSVNTKTsKKworCQkJCWlndF9waXBlX2NyY19jb2xsZWN0X2Ny YyhwaXBlX2NyYywgJmNyYzIpOworCQkJCXJlc3VtZV9ncHVfdGhyZWFkcyhkYXRhKTsKKwkJCQlp Z3RfYXNzZXJ0X2NyY19lcXVhbCgmY3JjLCAmY3JjMik7CisJCQl9CisKKwkJCWlndF9waXBlX2Ny Y19mcmVlKHBpcGVfY3JjKTsKKworCQkJaWYgKHJldCB8fCAoKytwaXBlID09IElHVF9NQVhfUElQ RVMpKQorCQkJCWJyZWFrOworCQl9CisJCWlndF9nZXR0aW1lKCZlbmQpOworCQlpdGVyYXRpb25z Kys7CisJCW5lZWRfY29udGludWUgPSBpZ3RfdGltZV9lbGFwc2VkKCZzdGFydCwgJmVuZCkgPCBN SU5fRFVSQVRJT05fU0VDOworCX0gd2hpbGUgKChuZWVkX2NvbnRpbnVlIHx8IGl0ZXJhdGlvbnMg PCBNSU5fSVRFUkFUSU9OUykpOworCisKK30KKworc3RhdGljIHZvaWQgc3RhcnRfZ3B1X3RocmVh ZHMoc3RydWN0IGRhdGEgKmRhdGEpCit7CisJaW50IGkgPSAwOworCWlndF9vdXRwdXRfdCAqb3V0 cHV0OworCisJaWYgKCFkYXRhLT5kZXZpZCkgeworCQlkYXRhLT5kZXZpZCA9IGludGVsX2dldF9k cm1fZGV2aWQoZGF0YS0+ZHJtX2ZkKTsKKwkJaWd0X3JlcXVpcmVfZ2VtKGRhdGEtPmRybV9mZCk7 CisKKwkJZGF0YS0+YnVmbWdyID0gZHJtX2ludGVsX2J1Zm1ncl9nZW1faW5pdChkYXRhLT5kcm1f ZmQsIDQwOTYpOworCQlpZ3RfYXNzZXJ0KGRhdGEtPmJ1Zm1ncik7CisJfQorCisJZm9yX2VhY2hf Y29ubmVjdGVkX291dHB1dCgmZGF0YS0+ZGlzcGxheSwgb3V0cHV0KSB7CisJCWRhdGEtPmdwdV9j b250ZXh0W2ldLmRhdGEgPSBkYXRhOworCQlkYXRhLT5ncHVfY29udGV4dFtpXS5waXBlID0gaTsK KwkJZGF0YS0+Z3B1X2NvbnRleHRbaV0uZmJfcHRyID0gTlVMTDsKKwkJZGF0YS0+Z3B1X2NvbnRl eHRbaV0uYmx0X3JlY3QueCA9IDA7CisJCWRhdGEtPmdwdV9jb250ZXh0W2ldLmJsdF9yZWN0Lnkg PSAwOworCQlkYXRhLT5ncHVfY29udGV4dFtpXS5ibHRfcmVjdC53ID0gMDsKKwkJZGF0YS0+Z3B1 X2NvbnRleHRbaV0uYmx0X3JlY3QuaCA9IDA7CisJCWRhdGEtPmdwdV90aHJlYWRfc3RhdGVbaV0g PSBSVU5OSU5HOworCQlpZ3RfaW5mbygiU3RhcnRpbmcgR1BVIHRocmVhZCAlZFxuIiwgaSk7CisJ CWRhdGEtPmdwdV9jb250ZXh0W2ldLmJhdGNoID0gaW50ZWxfYmF0Y2hidWZmZXJfYWxsb2MoZGF0 YS0+YnVmbWdyLCBkYXRhLT5kZXZpZCk7CisJCXB0aHJlYWRfY3JlYXRlKCZkYXRhLT5ncHVfdGhy ZWFkW2ldLCBOVUxMLCBncHVfbG9hZCwgKHZvaWQqKSZkYXRhLT5ncHVfY29udGV4dFtpXSk7CisJ CWlmICgrK2kgPT0gSUdUX01BWF9QSVBFUykKKwkJCWJyZWFrOworCX0KK30KKworCitzdGF0aWMg dm9pZCBwYXVzZV9ncHVfdGhyZWFkcyhzdHJ1Y3QgZGF0YSAqZGF0YSkKK3sKKwlpbnQgaSA9IDA7 CisJaWd0X291dHB1dF90ICpvdXRwdXQ7CisJZm9yX2VhY2hfY29ubmVjdGVkX291dHB1dCgmZGF0 YS0+ZGlzcGxheSwgb3V0cHV0KSB7CisJCWlmIChkYXRhLT5ncHVfdGhyZWFkX3N0YXRlW2ldICE9 IFJVTk5JTkcpIHsKKwkJCSsraTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlndF9pbmZvKCJQYXVz aW5nIEdQVSB0aHJlYWQgJWRcbiIsIGkpOworCQlkYXRhLT5ncHVfdGhyZWFkX3N0YXRlW2ldID0g UEFVU0VEOworCQlzZW1fd2FpdCgmZGF0YS0+Z3B1X3RocmVhZF9wYXVzZV9hY2tbaV0pOworCQlp Z3RfaW5mbygiR1BVIHRocmVhZCAlZCBwYXVzZWRcbiIsIGkpOworCQlpZiAoKytpID09IElHVF9N QVhfUElQRVMpCisJCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJlc3VtZV9ncHVfdGhy ZWFkcyhzdHJ1Y3QgZGF0YSAqZGF0YSkKK3sKKwlpbnQgaSA9IDA7CisJaWd0X291dHB1dF90ICpv dXRwdXQ7CisJZm9yX2VhY2hfY29ubmVjdGVkX291dHB1dCgmZGF0YS0+ZGlzcGxheSwgb3V0cHV0 KSB7CisJCWlmIChkYXRhLT5ncHVfdGhyZWFkX3N0YXRlW2ldICE9IFBBVVNFRCkgeworCQkJKytp OworCQkJY29udGludWU7CisJCX0KKwkJZGF0YS0+Z3B1X3RocmVhZF9zdGF0ZVtpXSA9IFJVTk5J Tkc7CisJCWlndF9pbmZvKCJSZXN1bWluZyBHUFUgdGhyZWFkICVkXG4iLCBpKTsKKwkJc2VtX3dh aXQoJmRhdGEtPmdwdV90aHJlYWRfcGF1c2VfYWNrW2ldKTsKKwkJaWd0X2luZm8oIkdQVSB0aHJl YWQgJWQgcmVzdW1lZFxuIiwgaSk7CisJCWlmICgrK2kgPT0gSUdUX01BWF9QSVBFUykKKwkJCWJy ZWFrOworCX0KK30KKworCitzdGF0aWMgdm9pZCBzdG9wX2dwdV90aHJlYWRzKHN0cnVjdCBkYXRh ICpkYXRhKQoreworCWludCBpID0gMDsKKwlpZ3Rfb3V0cHV0X3QgKm91dHB1dDsKKwlmb3JfZWFj aF9jb25uZWN0ZWRfb3V0cHV0KCZkYXRhLT5kaXNwbGF5LCBvdXRwdXQpIHsKKwkJZGF0YS0+Z3B1 X3RocmVhZF9zdGF0ZVtpXSA9IFNUT1BQRUQ7CisJCWlndF9pbmZvKCJTdG9waW5nIEdQVSB0aHJl YWQgJWRcbiIsIGkpOworCQlwdGhyZWFkX2pvaW4oZGF0YS0+Z3B1X3RocmVhZFtpXSwgTlVMTCk7 CisJCWRhdGEtPmdwdV9jb250ZXh0W2ldLmZiX3B0ciA9IE5VTEw7CisJCWludGVsX2JhdGNoYnVm ZmVyX2ZyZWUoZGF0YS0+Z3B1X2NvbnRleHRbaV0uYmF0Y2gpOworCQlpZiAoKytpID09IElHVF9N QVhfUElQRVMpCisJCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHN0YXJ0X2NwdV90aHJl YWRzKHN0cnVjdCBkYXRhICpkYXRhKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBkYXRh LT5udW1iZXJfb2ZfY29yZXM7aSsrKSB7CisJCWRhdGEtPmNwdV9jb250ZXh0W2ldLmJ1ZjEgPSBt YWxsb2MoQlVGX1NJWkUpOworCQlkYXRhLT5jcHVfY29udGV4dFtpXS5idWYyID0gbWFsbG9jKEJV Rl9TSVpFKTsKKwkJZGF0YS0+Y3B1X2NvbnRleHRbaV0uaWQgPSBpOworCQlkYXRhLT5jcHVfY29u dGV4dFtpXS5kYXRhID0gZGF0YTsKKwkJcHRocmVhZF9jcmVhdGUoJmRhdGEtPmNwdV90aHJlYWRb aV0sIE5VTEwsIGNwdV9sb2FkLCAodm9pZCopJmRhdGEtPmNwdV9jb250ZXh0W2ldKTsKKwl9Cit9 CisKK3N0YXRpYyB2b2lkIHN0b3BfY3B1X3RocmVhZHMoc3RydWN0IGRhdGEgKmRhdGEpCit7CisJ aW50IGk7CisJZm9yIChpID0gMDsgaSA8IGRhdGEtPm51bWJlcl9vZl9jb3JlcztpKyspIHsKKwkJ ZGF0YS0+Y3B1X3RocmVhZF9zdG9wW2ldID0gdHJ1ZTsKKwkJcHRocmVhZF9qb2luKGRhdGEtPmNw dV90aHJlYWRbaV0sIE5VTEwpOworCQlmcmVlKGRhdGEtPmNwdV9jb250ZXh0W2ldLmJ1ZjEpOwor CQlmcmVlKGRhdGEtPmNwdV9jb250ZXh0W2ldLmJ1ZjIpOworCX0KK30KKworc3RhdGljIHZvaWQg Y3JlYXRlX2ZyYW1lYnVmZmVycyhzdHJ1Y3QgZGF0YSAqZGF0YSkKK3sKKwlpbnQgaSwgajsKKwl1 aW50NjRfdCBjdXJzb3Jfd2lkdGgsIGN1cnNvcl9oZWlnaHQ7CisJaWd0X291dHB1dF90ICpvdXRw dXQ7CisKKwlkb19vcl9kaWUoZHJtR2V0Q2FwKGRhdGEtPmRybV9mZCwgRFJNX0NBUF9DVVJTT1Jf V0lEVEgsICZjdXJzb3Jfd2lkdGgpKTsKKwlkb19vcl9kaWUoZHJtR2V0Q2FwKGRhdGEtPmRybV9m ZCwgRFJNX0NBUF9DVVJTT1JfSEVJR0hULCAmY3Vyc29yX2hlaWdodCkpOworCisJaSA9IDA7CisJ Zm9yX2VhY2hfY29ubmVjdGVkX291dHB1dCgmZGF0YS0+ZGlzcGxheSwgb3V0cHV0KSB7CisJCWlm ICghZGF0YS0+Y3Vyc29yX2ZiW2ldLmZiX2lkKSB7CisJCQlpZ3RfY3JlYXRlX2NvbG9yX2ZiKGRh dGEtPmRybV9mZCwgY3Vyc29yX3dpZHRoLCBjdXJzb3JfaGVpZ2h0LAorCQkJCQlEUk1fRk9STUFU X0FSR0I4ODg4LAorCQkJCQlMT0NBTF9EUk1fRk9STUFUX01PRF9OT05FLAorCQkJCQkxLjAsMC4w LDAuMCwKKwkJCQkJJmRhdGEtPmN1cnNvcl9mYltpXSk7CisJCX0KKwkJZm9yIChqID0gMDsgaiA8 IGRhdGEtPm51bV9wbGFuZXNbaV07aisrKSB7CisJCQlpZiAoIWRhdGEtPmZiW2kgKiBNQVhfUExB TkVTICsgal0uZmJfaWQpIHsKKwkJCQlpZ3RfY3JlYXRlX2NvbG9yX3BhdHRlcm5fZmIoZGF0YS0+ ZHJtX2ZkLAorCQkJCSAgICBkYXRhLT5oaWdoZXN0X21vZGVbaV0tPmhkaXNwbGF5LAorCQkJCSAg ICBkYXRhLT5oaWdoZXN0X21vZGVbaV0tPnZkaXNwbGF5LAorCQkJCSAgICBkYXRhLT5mb3JtYXQs CisJCQkJICAgIGRhdGEtPm1vZGlmaWVyLAorCQkJCSAgICAwLjAsIDEuMCwgMC4wLCAmZGF0YS0+ ZmJbaSAqIE1BWF9QTEFORVMgKyBqXSk7CisJCQl9CisJCX0KKwkJaWYgKCsraSA9PSBJR1RfTUFY X1BJUEVTKQorCQkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBkZXN0cm95X2ZyYW1lYnVm ZmVycyhzdHJ1Y3QgZGF0YSAqZGF0YSkKK3sKKwlpbnQgaSwgajsKKwlpZ3Rfb3V0cHV0X3QgKm91 dHB1dDsKKworCWkgPSAwOworCWZvcl9lYWNoX2Nvbm5lY3RlZF9vdXRwdXQoJmRhdGEtPmRpc3Bs YXksIG91dHB1dCkgeworCQlmb3IgKGogPSAwO2ogPCBNQVhfUExBTkVTOyBqKyspIHsKKwkJCWlm IChkYXRhLT5mYltpICogTUFYX1BMQU5FUyArIGpdLmZiX2lkKSB7CisJCQkJaWd0X3BsYW5lX3Nl dF9mYigmZGF0YS0+ZGlzcGxheS5waXBlc1tpXS5wbGFuZXNbal0sIE5VTEwpOworCQkJCWlndF9y ZW1vdmVfZmIoZGF0YS0+ZGlzcGxheS5kcm1fZmQsICZkYXRhLT5mYltpICogTUFYX1BMQU5FUyAr IGpdKTsKKwkJCQlkYXRhLT5mYltpICogTUFYX1BMQU5FUyArIGpdLmZiX2lkID0gMDsKKwkJCX0K KwkJfQorCQlpZiAoZGF0YS0+Y3Vyc29yX2ZiW2ldLmZiX2lkKSB7CisJCQlpZ3RfcmVtb3ZlX2Zi KGRhdGEtPmRpc3BsYXkuZHJtX2ZkLCAmZGF0YS0+Y3Vyc29yX2ZiW2ldKTsKKwkJCWRhdGEtPmN1 cnNvcl9mYltpXS5mYl9pZCA9IDA7CisJCX0KKwkJaWYgKCsraSA9PSBJR1RfTUFYX1BJUEVTKQor CQkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBwcmVwYXJlX3Rlc3Qoc3RydWN0IGRhdGEg KmRhdGEsIGJvb2wgb3ZlcnJpZGUsIGJvb2wgY3B1LCBib29sIGdwdSkKK3sKKwlpbnQgaSxqOwor CWlndF9vdXRwdXRfdCAqb3V0cHV0OworCisJZGF0YS0+bnVtYmVyX29mX2NvcmVzID0gbWluKHN5 c2NvbmYoX1NDX05QUk9DRVNTT1JTX09OTE4pLCBNQVhfQ09SRVMpOworCisJZm9yIChpID0gMDsg aSA8IElHVF9NQVhfUElQRVM7IGkrKykgeworCQlmb3IgKGogPSAwO2ogPCBNQVhfUExBTkVTOyBq KyspCisJCQlkYXRhLT5mYltpICogTUFYX1BMQU5FUyArIGpdLmZiX2lkID0gMDsKKwkJZGF0YS0+ Y3Vyc29yX2ZiW2ldLmZiX2lkID0gMDsKKwkJZGF0YS0+bnVtX3BsYW5lc1tpXSA9IC0xOworCQlk YXRhLT5sYXN0X21vZGVbaV0gPSBOVUxMOworCQlzZW1faW5pdCgmZGF0YS0+Z3B1X3RocmVhZF9w YXVzZV9hY2tbaV0sIDAsIDApOworCX0KKwlpZiAoY3B1KSB7CisJCXN0YXJ0X2NwdV90aHJlYWRz KGRhdGEpOworCX0KKworCWRhdGEtPm1vZGVfcmVzb3VyY2VzID0gZHJtTW9kZUdldFJlc291cmNl cyhkYXRhLT5kcm1fZmQpOworCWlmICghZGF0YS0+bW9kZV9yZXNvdXJjZXMpIHsKKwkJaWd0X3dh cm4oImRybU1vZGVHZXRSZXNvdXJjZXMgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsK KwkJcmV0dXJuOworCX0KKworCW1lbXNldChkYXRhLT5oaWdoZXN0X21vZGUsIDAsIHNpemVvZihk cm1Nb2RlTW9kZUluZm8gKikgKiBJR1RfTUFYX1BJUEVTKTsKKworCWZpbGxfY29ubmVjdG9yX3Rv X3BpcGVfYXJyYXkoZGF0YSwgZGF0YS0+bW9kZV9yZXNvdXJjZXMsIGRhdGEtPmNvbm5lY3RvcnMp OworCisJaSA9IDA7CisJZm9yX2VhY2hfY29ubmVjdGVkX291dHB1dCgmZGF0YS0+ZGlzcGxheSwg b3V0cHV0KSB7CisJCWRybU1vZGVDb25uZWN0b3IgKmNvbm5lY3RvciA9IChkcm1Nb2RlQ29ubmVj dG9yICopZGF0YS0+Y29ubmVjdG9yc1tpXTsKKwkJaWYgKCFjb25uZWN0b3IpCisJCQljb250aW51 ZTsKKwkJaWYgKCFkYXRhLT5oaWdoZXN0X21vZGVbaV0pIHsKKwkJCWlmICghb3ZlcnJpZGUgJiYg Y29ubmVjdG9yLT5jb3VudF9tb2RlcykgeworCQkJCWRhdGEtPmhpZ2hlc3RfbW9kZVtpXSA9IGZp bmRfaGlnaGVzdF9tb2RlKGNvbm5lY3Rvcik7CisJCQl9CisJCQllbHNlCisJCQkJZGF0YS0+aGln aGVzdF9tb2RlW2ldID0gJnVoZF9tb2RlXzYwaHo7CisJCX0KKwkJaWYgKCsraSA9PSBJR1RfTUFY X1BJUEVTKQorCQkJYnJlYWs7CisJfQorCisJLyoKKwkgKiBVbnRpbCB3ZSBmaWd1cmUgb3V0IG1h eGltdW0gYW1vdW50IG9mIHBsYW5lcywKKwkgKiB1c2UgdGhlIG9uZSBkZWNsYXJlZCBieSBrZXJu ZWwuCisJICovCisJZm9yIChpID0gMDsgaSA8IElHVF9NQVhfUElQRVM7IGkrKykgeworCQlpZiAo ZGF0YS0+bnVtX3BsYW5lc1tpXSA9PSAtMSkKKwkJCWRhdGEtPm51bV9wbGFuZXNbaV0gPSBkYXRh LT5kaXNwbGF5LnBpcGVzW2ldLm5fcGxhbmVzOworCX0KKwljcmVhdGVfZnJhbWVidWZmZXJzKGRh dGEpOworCWlmIChncHUpIHsKKwkJc3RhcnRfZ3B1X3RocmVhZHMoZGF0YSk7CisJfQorfQorCitz dGF0aWMgdm9pZCBmaW5pc2hfdGVzdChzdHJ1Y3QgZGF0YSAqZGF0YSwgYm9vbCBvdmVycmlkZSwg Ym9vbCBjcHUsIGJvb2wgZ3B1KQoreworCWludCBpOworCisJaWYgKGdwdSkgeworCQlzdG9wX2dw dV90aHJlYWRzKGRhdGEpOworCX0KKwkvKgorCSAqIEFzIHdlIGNoYW5nZSB0aWxpbmcvZm9ybWF0 IHdlIG5lZWQgYSBuZXcgRkIKKwkgKi8KKwlkZXN0cm95X2ZyYW1lYnVmZmVycyhkYXRhKTsKKwlm b3IgKGkgPSAwOyBpIDwgSUdUX01BWF9QSVBFUzsgaSsrKSB7CisJCWRhdGEtPm51bV9wbGFuZXNb aV0gPSAtMTsKKwkJZGF0YS0+bGFzdF9tb2RlW2ldID0gTlVMTDsKKwl9CisJaWYgKGNwdSkgewor CQlzdG9wX2NwdV90aHJlYWRzKGRhdGEpOworCX0KKwlyZWxlYXNlX2Nvbm5lY3RvcnMoZGF0YS0+ Y29ubmVjdG9ycyk7CisKKwlkcm1Nb2RlRnJlZVJlc291cmNlcyhkYXRhLT5tb2RlX3Jlc291cmNl cyk7Cit9CisKK3N0cnVjdCBkYXRhIGRhdGEgPSB7CisJLmZvcm1hdCA9IERSTV9GT1JNQVRfWFJH Qjg4ODgsCisJLm1vZGlmaWVyID0gRFJNX0ZPUk1BVF9NT0RfTElORUFSLAorCS5kZXZpZCA9IDAs Cit9OworCitlbnVtIHsKKyAgICBQTEFORVNfT05MWSA9IDAsCisgICAgQ1BVX0xPQUQsCisgICAg R1BVX0xPQUQsCisgICAgTU9ERV9PVkVSUklERSwKK30gdGVzdF9iaXRzOworCitzdGF0aWMgdm9p ZCBzZXRfcGFyYW1zKHVpbnQ4X3QgYml0cywgYm9vbCAqbW9kZV9vdmVycmlkZSwgYm9vbCAqY3B1 X2xvYWQsIGJvb2wgKmdwdV9sb2FkKQoreworCSpjcHVfbG9hZCA9IChiaXRzICYgKDEgPDwgQ1BV X0xPQUQpKSAhPSAwID8gdHJ1ZSA6IGZhbHNlOworCSpncHVfbG9hZCA9IChiaXRzICYgKDEgPDwg R1BVX0xPQUQpKSAhPSAwID8gdHJ1ZSA6IGZhbHNlOworCSptb2RlX292ZXJyaWRlID0gKGJpdHMg JiAoMSA8PCBNT0RFX09WRVJSSURFKSkgIT0gMCA/IHRydWUgOiBmYWxzZTsKK30KKworCitpZ3Rf bWFpbgoreworCWJvb2wgbW9kZV9vdmVycmlkZTsKKwlib29sIGNwdV9sb2FkOworCWJvb2wgZ3B1 X2xvYWQ7CisJdWludDhfdCBmb3JtYXRfaWR4ID0gMCwgdGlsaW5nX2lkeCA9IDA7CisJdWludDY0 X3QgbWF4X2NvbWJpbmF0aW9ucyA9IDEgPDwgKE1PREVfT1ZFUlJJREUgKyAxKTsKKwlpbnQ4X3Qg dGVzdF9jb21iID0gbWF4X2NvbWJpbmF0aW9ucyAtIDE7CisKKwlpZ3RfZml4dHVyZSB7CisJCWRh dGEuZHJtX2ZkID0gZGF0YS5kaXNwbGF5LmRybV9mZCA9IGRybV9vcGVuX2RyaXZlcl9tYXN0ZXIo RFJJVkVSX0FOWSk7CisKKwkJa21zdGVzdF9zZXRfdnRfZ3JhcGhpY3NfbW9kZSgpOworCisJCWln dF9kaXNwbGF5X3JlcXVpcmUoJmRhdGEuZGlzcGxheSwgZGF0YS5kaXNwbGF5LmRybV9mZCk7CisJ CWlndF9yZXF1aXJlKGRhdGEuZGlzcGxheS5pc19hdG9taWMpOworCQlpZ3RfZGlzcGxheV9yZXF1 aXJlX291dHB1dCgmZGF0YS5kaXNwbGF5KTsKKwl9CisKKwlkbyB7CisJCXNldF9wYXJhbXModGVz dF9jb21iLCAmbW9kZV9vdmVycmlkZSwgJmNwdV9sb2FkLCAmZ3B1X2xvYWQpOworCQkvKgorCQkg KiBEbyBhbGwgY29tYmluYXRpb25zIG9mIG1vZGVfb3ZlcnJpZGUsIGNwdV9sb2FkLCBncHVfbG9h ZCBhbmQKKwkJICogYWxsIGZvcm1hdCBhbmQgdGlsaW5nIGZvciBlYWNoIG9mIHRob3NlLgorCQkg Ki8KKwkJZm9yIChmb3JtYXRfaWR4ID0gMDsgZm9ybWF0X2lkeCA8IE5fRk9STUFUUzsgZm9ybWF0 X2lkeCsrKQorCQkJZm9yICh0aWxpbmdfaWR4ID0gMDsgdGlsaW5nX2lkeCA8IE5fVElMSU5HX01F VEhPRFM7IHRpbGluZ19pZHgrKykgeworCQkJCWRhdGEuZm9ybWF0ID0gZm9ybWF0c1tmb3JtYXRf aWR4XTsKKwkJCQlkYXRhLm1vZGlmaWVyID0gdGlsaW5nc1t0aWxpbmdfaWR4XTsKKworCQkJCWln dF9maXh0dXJlIHsKKwkJCQkJcHJlcGFyZV90ZXN0KCZkYXRhLCBtb2RlX292ZXJyaWRlLCBjcHVf bG9hZCwgZ3B1X2xvYWQpOworCQkJCX0KKworCQkJCWlndF9zdWJ0ZXN0X2YoInN0cmVzcyVzJXMl cy0lcy0lcyIsCisJCQkJICAgICAgbW9kZV9vdmVycmlkZSA9PSBmYWxzZSA/ICIiIDogIi1tb2Rl LW92ZXJyaWRlIiwKKwkJCQkgICAgICBjcHVfbG9hZCA9PSBmYWxzZSA/ICIiIDogIi1jcHUtbG9h ZCIsCisJCQkJICAgICAgZ3B1X2xvYWQgPT0gZmFsc2UgPyAiIiA6ICItZ3B1LWxvYWQiLAorCQkJ CSAgICAgIGZvcm1hdF9zdHIoZm9ybWF0X2lkeCksCisJCQkJICAgICAgdGlsaW5nX3N0cih0aWxp bmdfaWR4KSkgeworCisJCQkJCXN0cmVzcygmZGF0YSk7CisKKwkJCQl9CisKKwkJCQlpZ3RfZml4 dHVyZSB7CisJCQkJCWZpbmlzaF90ZXN0KCZkYXRhLCBtb2RlX292ZXJyaWRlLCBjcHVfbG9hZCwg Z3B1X2xvYWQpOworCQkJCX0KKwkJCX0KKwl9IHdoaWxlICgtLXRlc3RfY29tYiA+IDAgKTsKKwor CWlndF9maXh0dXJlIHsKKworCQlpZ3RfZGlzcGxheV9maW5pKCZkYXRhLmRpc3BsYXkpOworCX0K K30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9tZXNvbi5i dWlsZCBiL3Rlc3RzL21lc29uLmJ1aWxkCmluZGV4IDM0YTc0MDI1Li42ZTQyNDAyYyAxMDA2NDQK LS0tIGEvdGVzdHMvbWVzb24uYnVpbGQKKysrIGIvdGVzdHMvbWVzb24uYnVpbGQKQEAgLTQ4LDYg KzQ4LDcgQEAgdGVzdF9wcm9ncyA9IFsKIAkna21zX3BsYW5lX2xvd3JlcycsCiAJJ2ttc19wbGFu ZV9tdWx0aXBsZScsCiAJJ2ttc19wbGFuZV9zY2FsaW5nJywKKwkna21zX3BsYW5lX3N0cmVzcycs CiAJJ2ttc19wcm9wX2Jsb2InLAogCSdrbXNfcHJvcGVydGllcycsCiAJJ2ttc19wc3InLAotLSAK Mi4xNy4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpp Z3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXY=