From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id E7C5B72AFA for ; Wed, 4 Dec 2019 09:41:33 +0000 (UTC) From: Stanislav Lisovskiy Date: Wed, 4 Dec 2019 11:38:40 +0200 Message-Id: <20191204093840.3649-1-stanislav.lisovskiy@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v13] 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: martin.peres@intel.com, juha-pekka.heikkila@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 ICAtIEZpeCBpc3N1ZSBpbiBtYWluIHRlc3RpbmcgY3ljbGUsIGNvZGUgcmVmYWN0b3JpbmcKICAg IC0gUmViYXNlZAoKdjExOgogICAgLSBGaXhlZCBpc3N1ZSB3aXRoIHN1c3BlbmRpbmcvcmVzdW1p bmcgR1BVIHRocmVhZHMKICAgICAgdG8gZ2V0IGNyYy4gQWRkZWQgbnVtX3JlY3RhbmdsZXMgdG8g YmUgYWJsZSB0byBjdXN0b21pemUKICAgICAgbnVtYmVyIG9mIGdwZ3B1X2ZpbGwgY2FsbHMuCgp2 MTI6CiAgICAtIFJlbW92ZWQgdW5uZWVkZWQgc2hhcmVkIGZiIGZ1bmN0aW9uYWxpdHkgYW5kIGdw dSB0aHJlYWQKICAgICAgcGF1c2UvcmVzdW1lLgogICAgLSBOb3cgYWxzbyB1c2luZyBkaWZmZXJl bnQgZm9ybWF0cyBmb3IgY3Vyc29yIGZiLgogICAgLSBSZW1vdmVkIHVubmVjZXNzYXJ5IHBhcmFt ZXRlcnMgZm9yIHN0cmVzcyBmdW5jdGlvbi4KICAgIC0gQ2hhbmdlZCBwbGFuZV9zdHJlc3MgZnVu Y3Rpb24gbmFtZSB0byBwaXBlX3N0cmVzcyhtYWtlcyBzZW5zZSkKICAgIC0gUHV0IGdwZ3B1X3dh bGsgeCBhbmQgeSBidWcgZml4IGludG8gc2VwYXJhdGUgcGF0Y2guCgp2MTM6CiAgICAtIEFkZGVk IHRlc3RzIGRvY3VtZW50YXRpb24uCgpDaGFuZ2UtSWQ6IEk3OWFkNzU2Njg1ODAxYWJkYzg2ZWRk OWE4M2EwMzgxNjM5OWQ0YThkClNpZ25lZC1vZmYtYnk6IFN0YW5pc2xhdiBMaXNvdnNraXkgPHN0 YW5pc2xhdi5saXNvdnNraXlAaW50ZWwuY29tPgotLS0KIHRlc3RzL01ha2VmaWxlLnNvdXJjZXMg ICB8ICAgMSArCiB0ZXN0cy9rbXNfcGxhbmVfc3RyZXNzLmMgfCA4NjYgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrCiB0ZXN0cy9tZXNvbi5idWlsZCAgICAgICAgfCAgIDEg KwogMyBmaWxlcyBjaGFuZ2VkLCA4NjggaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IHRlc3RzL2ttc19wbGFuZV9zdHJlc3MuYwoKZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLnNv dXJjZXMgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCmluZGV4IDE3OTgwZWQ2Li5kZDJlNDM0MSAx MDA2NDQKLS0tIGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcworKysgYi90ZXN0cy9NYWtlZmlsZS5z b3VyY2VzCkBAIC02OCw2ICs2OCw3IEBAIFRFU1RTX3Byb2dzID0gXAogCWttc19wbGFuZV9tdWx0 aXBsZSBcCiAJa21zX3BsYW5lX3NjYWxpbmcgXAogCWttc19wcmltZSBcCisJa21zX3BsYW5lX3N0 cmVzcyBcCiAJa21zX3Byb3BfYmxvYiBcCiAJa21zX3Byb3BlcnRpZXMgXAogCWttc19wc3IgXApk aWZmIC0tZ2l0IGEvdGVzdHMva21zX3BsYW5lX3N0cmVzcy5jIGIvdGVzdHMva21zX3BsYW5lX3N0 cmVzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi5kZDg4MWNkNwotLS0g L2Rldi9udWxsCisrKyBiL3Rlc3RzL2ttc19wbGFuZV9zdHJlc3MuYwpAQCAtMCwwICsxLDg2NiBA QAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVy bWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24g b2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1 bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0 d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisg KiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJp YnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUs IGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlz aGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisg KiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAo aW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFs bCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAq CisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBP RiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElN SVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQg U0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1Ig QU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4g QUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwg T1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBP VEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlICJpZ3Qu aCIKKyNpbmNsdWRlICJpZ3RfcmFuZC5oIgorI2luY2x1ZGUgImdwZ3B1X2ZpbGwuaCIKKyNpbmNs dWRlICJkcm10ZXN0LmgiCisjaW5jbHVkZSAic3dfc3luYy5oIgorI2luY2x1ZGUgPGVycm5vLmg+ CisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxz dGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRl IDxwb2xsLmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgPHNlbWFwaG9yZS5oPgor CisKK0lHVF9URVNUX0RFU0NSSVBUSU9OKCJTdHJlc3MgdGVzdCBob3cgZ3B1IGFuZCBjcHUgYmVo YXZlcyBpZiBtYXhpbXVtIGFtb3VudCBvZiBwbGFuZXMsICIKKyAgICAgICAgICAgICAgICAgICAg ICJjcHUgYW5kIGdwdSB1dGlsaXphdGlvbiBpcyBhY2hpZXZlZCBpbiBvcmRlciB0byByZXZlYWwg cG9zc2libGUgIgorICAgICAgICAgICAgICAgICAgICAgImJhbmR3aWR0aC93YXRlcm1hcmsgYW5k IHNpbWlsYXIgcHJvYmxlbXMgIik7CisKKyNpZm5kZWYgRFJNX0NBUF9DVVJTT1JfV0lEVEgKKyNk ZWZpbmUgRFJNX0NBUF9DVVJTT1JfV0lEVEggMHg4CisjZW5kaWYKKyNpZm5kZWYgRFJNX0NBUF9D VVJTT1JfSEVJR0hUCisjZGVmaW5lIERSTV9DQVBfQ1VSU09SX0hFSUdIVCAweDkKKyNlbmRpZgor CisjZGVmaW5lIE5fQkxJVFMgMworCisjZGVmaW5lIE5fRk9STUFUUyAxCitzdGF0aWMgY29uc3Qg dWludDMyX3QgZm9ybWF0c1tOX0ZPUk1BVFNdID0geworCURSTV9GT1JNQVRfWFJHQjg4ODgsCisJ LyoKKwkgKiBXaXRoIHRob3NlIGVuYWJsZWQgd2lsbCB0YWtlIHNpZ25pZmljYW50bHkgbW9yZSB0 aW1lLgorCSAqLworLy8JRFJNX0ZPUk1BVF9SR0I1NjUsCisvLwlEUk1fRk9STUFUX1hSR0IyMTAx MDEwLAorfTsKKworI2RlZmluZSBOX1RJTElOR19NRVRIT0RTIDEKK3N0YXRpYyBjb25zdCB1aW50 NjRfdCB0aWxpbmdzW05fVElMSU5HX01FVEhPRFNdID0geworCURSTV9GT1JNQVRfTU9EX0xJTkVB UiwKKwlJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCwKKwlJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCwK K307CisKK3N0YXRpYyBjb25zdCBjaGFyICpmb3JtYXRfc3RyKGludCBmb3JtYXRfaW5kZXgpCit7 CisJc3dpdGNoIChmb3JtYXRzW2Zvcm1hdF9pbmRleF0pIHsKKwljYXNlIERSTV9GT1JNQVRfUkdC NTY1OgorCQlyZXR1cm4gInJnYjU2NSI7CisJY2FzZSBEUk1fRk9STUFUX1hSR0I4ODg4OgorCQly ZXR1cm4gInhyZ2I4ODg4IjsKKwljYXNlIERSTV9GT1JNQVRfWFJHQjIxMDEwMTA6CisJCXJldHVy biAieHJnYjIxMDEwMTAiOworCWRlZmF1bHQ6CisJCWlndF9hc3NlcnQoZmFsc2UpOworCX0KK30K Kworc3RhdGljIGNvbnN0IGNoYXIgKnRpbGluZ19zdHIoaW50IHRpbGluZ19pbmRleCkKK3sKKwlz d2l0Y2ggKHRpbGluZ3NbdGlsaW5nX2luZGV4XSkgeworCWNhc2UgRFJNX0ZPUk1BVF9NT0RfTElO RUFSOgorCQlyZXR1cm4gInVudGlsZWQiOworCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQ6 CisJCXJldHVybiAieHRpbGVkIjsKKwljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEOgorCQly ZXR1cm4gInl0aWxlZCI7CisJZGVmYXVsdDoKKwkJaWd0X2Fzc2VydChmYWxzZSk7CisJfQorfQor CisKKyNkZWZpbmUgTUFYX0NPUkVTIDgKKyNkZWZpbmUgTUFYX1BMQU5FUyAxNgorCitzdHJ1Y3Qg ZGF0YTsKKworc3RydWN0IHRocmVhZF9jb250ZXh0IHsKKwlzdHJ1Y3QgZGF0YSAqZGF0YTsKKwlp bnQgaWQ7CisJdm9pZCAqYnVmMTsKKwl2b2lkICpidWYyOworfTsKKworc3RydWN0IHJlY3Qgewor CWludCB4OworCWludCB5OworCWludCB3OworCWludCBoOworfTsKKworc3RydWN0IGdwdV9jb250 ZXh0IHsKKwlzdHJ1Y3QgZGF0YSAqZGF0YTsKKwlpbnQgcGlwZTsKKwlpbnQgY29sb3I7CisJaW50 IG51bV9yZWN0YW5nbGVzOworCXN0cnVjdCBpZ3RfZmIgKmZiX3B0cjsKKwlzdHJ1Y3QgcmVjdCBi bHRfcmVjdDsKKwlzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoOworfTsKKworZW51bSB7 CisJUlVOTklORywKKwlTVE9QUEVELAorCVBBVVNFRCwKKwlMQVNUX1NUQVRFID0gUEFVU0VECit9 IHRocmVhZF9zdGF0ZTsKKworc3RydWN0IGRhdGEgeworCWludCBkcm1fZmQ7CisJaWd0X2Rpc3Bs YXlfdCBkaXNwbGF5OworCWludCBudW1fcGxhbmVzW0lHVF9NQVhfUElQRVNdOworCXVpbnQzMl90 IGZvcm1hdDsKKwl1aW50NjRfdCBtb2RpZmllcjsKKwl1aW50MzJfdCBkZXZpZDsKKwlkcm1faW50 ZWxfYnVmbWdyICpidWZtZ3I7CisJZHJtTW9kZU1vZGVJbmZvICpsYXN0X21vZGVbSUdUX01BWF9Q SVBFU107CisJc3RydWN0IGlndF9mYiBmYltJR1RfTUFYX1BJUEVTICogTUFYX1BMQU5FU107CisJ c3RydWN0IGlndF9mYiBjdXJzb3JfZmJbSUdUX01BWF9QSVBFU107CisJcHRocmVhZF90IGNwdV90 aHJlYWRbTUFYX0NPUkVTXTsKKwlwdGhyZWFkX3QgZ3B1X3RocmVhZFtJR1RfTUFYX1BJUEVTXTsK Kwlib29sIGNwdV90aHJlYWRfc3RvcFtNQVhfQ09SRVNdOworCWludCBncHVfdGhyZWFkX3N0YXRl W0lHVF9NQVhfUElQRVNdOworCXNlbV90IGdwdV90aHJlYWRfcGF1c2VfYWNrW0lHVF9NQVhfUElQ RVNdOworCXN0cnVjdCB0aHJlYWRfY29udGV4dCBjcHVfY29udGV4dFtNQVhfQ09SRVNdOworCXN0 cnVjdCBncHVfY29udGV4dCBncHVfY29udGV4dFtJR1RfTUFYX1BJUEVTXTsKKwlkcm1Nb2RlTW9k ZUluZm8gKmhpZ2hlc3RfbW9kZVtJR1RfTUFYX1BJUEVTXTsKKwlkcm1Nb2RlQ29ubmVjdG9yUHRy ICpjb25uZWN0b3JzOworCWRybU1vZGVSZXMgKm1vZGVfcmVzb3VyY2VzOworCWludCBudW1iZXJf b2ZfY29yZXM7Cit9OworCitzdGF0aWMgdm9pZCBzdG9wX2dwdV90aHJlYWRzKHN0cnVjdCBkYXRh ICpkYXRhKTsKK3N0YXRpYyB2b2lkIHN0YXJ0X2dwdV90aHJlYWRzKHN0cnVjdCBkYXRhICpkYXRh KTsKKworc3RydWN0IGJhc2VfY3JjIHsKKwlib29sIHNldDsKKwlpZ3RfY3JjX3QgY3JjOworfTsK KworaWd0X3BpcGVfY3JjX3QgKnBpcGVfY3JjOworCisjZGVmaW5lIEJVRl9TSVpFIDEyOCoxMDI0 KjEwMjQKKworc3RhdGljIHZvaWQgKmNwdV9sb2FkKHZvaWQgKmQpCit7CisJY2hhciAqYnVmMSwg KmJ1ZjI7CisJc3RydWN0IHRocmVhZF9jb250ZXh0ICpjb250ZXh0ID0gKHN0cnVjdCB0aHJlYWRf Y29udGV4dCAqKWQ7CisJc3RydWN0IGRhdGEgKmRhdGEgPSBjb250ZXh0LT5kYXRhOworCisJYnVm MSA9IGNvbnRleHQtPmJ1ZjE7CisJYnVmMiA9IGNvbnRleHQtPmJ1ZjI7CisKKwlkYXRhLT5jcHVf dGhyZWFkX3N0b3BbY29udGV4dC0+aWRdID0gZmFsc2U7CisKKwlpZ3RfaW5mbygiQ1BVIHRocmVh ZCBjcHUgaWQgJWQgc3RhcnRcbiIsIGNvbnRleHQtPmlkKTsKKworCS8qIEp1c3QgdG8gbWFrZSBD UFUgYnVzeS4uLiAqLworCXdoaWxlKCFkYXRhLT5jcHVfdGhyZWFkX3N0b3BbY29udGV4dC0+aWRd KSB7CisJCW1lbWNweShidWYxLCBidWYyLCBCVUZfU0laRSk7CisJCW1lbWNweShidWYyLCBidWYx LCBCVUZfU0laRSk7CisJfQorCisJaWd0X2luZm8oIkNQVSB0aHJlYWQgY3B1IGlkICVkIHN0b3Bc biIsIGNvbnRleHQtPmlkKTsKKworCXJldHVybiBOVUxMOworfQorCisKK3N0YXRpYyB2b2lkIHNj cmF0Y2hfYnVmX2luaXQoc3RydWN0IGlndF9idWYgKmJ1ZiwKKwkJCSAgICAgZHJtX2ludGVsX2Jv ICpibywgaW50IHdpZHRoLAorCQkJICAgICBpbnQgaGVpZ2h0LCBpbnQgc3RyaWRlLCBpbnQgdGls aW5nLCBpbnQgYnBwKQoreworCWJ1Zi0+Ym8gPSBibzsKKwlidWYtPnN0cmlkZSA9IHN0cmlkZTsK KwlidWYtPnRpbGluZyA9IHRpbGluZzsKKwlidWYtPnNpemUgPSB3aWR0aCAqIGhlaWdodCAqIGJw cCAvIDg7CisJYnVmLT5icHAgPSBicHA7Cit9CisKK3N0YXRpYyB2b2lkICpncHVfbG9hZCh2b2lk ICpwdHIpCit7CisJc3RydWN0IGdwdV9jb250ZXh0ICpjb250ZXh0ID0gKHN0cnVjdCBncHVfY29u dGV4dCAqKXB0cjsKKwlzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoID0gTlVMTDsKKwlz dHJ1Y3QgaWd0X2J1ZiBkc3Q7CisJc3RydWN0IGRhdGEgKmRhdGEgPSBjb250ZXh0LT5kYXRhOwor CWludCBwaXBlID0gY29udGV4dC0+cGlwZTsKKwlpZ3RfZmlsbGZ1bmNfdCBncGdwdV9maWxsID0g TlVMTDsKKwlkcm1faW50ZWxfYm8gKmJvID0gTlVMTDsKKwlzdHJ1Y3QgaWd0X2ZiIGZiLCAqZmJf cHRyID0gTlVMTCwgKmxhc3RfZmJfcHRyID0gTlVMTDsKKwlpbnQgcmVjdF9kaXZpc29yOworCWlu dCByZWN0X3dpZHRoOworCWludCByZWN0X2hlaWdodDsKKwlpbnQgZnJhbWVfd2lkdGg7CisJaW50 IGZyYW1lX2hlaWdodDsKKwlpbnQgYnl0ZXNfcGVyX3BpeGVsOworCWRybU1vZGVNb2RlSW5mbyAq bW9kZTsKKwlpbnQgZnJhbWUgPSAwOworCWludCB4LCB5OworCWludCBsYXN0X3N0YXRlID0gLTE7 CisJaW50IHJlY3Q7CisKKwlncGdwdV9maWxsID0gaWd0X2dldF9ncGdwdV9maWxsZnVuYyhkYXRh LT5kZXZpZCk7CisKKwlpZ3RfcmVxdWlyZV9mKGdwZ3B1X2ZpbGwsCisJICAgICAgICAgICAgICAi bm8gZ3BncHUtZmlsbCBmdW5jdGlvblxuIik7CisKKwliYXRjaCA9IGNvbnRleHQtPmJhdGNoOwor CWlndF9hc3NlcnQoYmF0Y2gpOworCisJbW9kZSA9IGRhdGEtPmhpZ2hlc3RfbW9kZVtwaXBlXTsK KwlpZiAoIW1vZGUpCisJCXJldHVybiBOVUxMOworCisJaWd0X2NyZWF0ZV9jb2xvcl9wYXR0ZXJu X2ZiKGRhdGEtPmRybV9mZCwgbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5LAorCSAgICAg ICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5mb3JtYXQsCisJICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGRhdGEtPm1vZGlmaWVyLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAw LjAsIDEuMCwgMC4wLCAmZmIpOworCisJaWd0X2luZm8oIkdQVSB0aHJlYWQgcGlwZSAlZCBzdGFy dFxuIiwgcGlwZSk7CisJd2hpbGUgKGRhdGEtPmdwdV90aHJlYWRfc3RhdGVbcGlwZV0gIT0gU1RP UFBFRCkgeworCQlpZiAobGFzdF9zdGF0ZSAhPSBkYXRhLT5ncHVfdGhyZWFkX3N0YXRlW3BpcGVd KSB7CisJCQlsYXN0X3N0YXRlID0gZGF0YS0+Z3B1X3RocmVhZF9zdGF0ZVtwaXBlXTsKKwkJCXNl bV9wb3N0KCZkYXRhLT5ncHVfdGhyZWFkX3BhdXNlX2Fja1twaXBlXSk7CisJCX0KKwkJaWYgKGRh dGEtPmdwdV90aHJlYWRfc3RhdGVbcGlwZV0gPT0gUEFVU0VEKSB7CisJCQlzbGVlcCgwKTsKKwkJ CWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCFjb250ZXh0LT5mYl9wdHIpIHsKKwkJCWZiX3B0ciA9 ICZmYjsKKwkJfSBlbHNlIHsKKwkJCWZiX3B0ciA9IGNvbnRleHQtPmZiX3B0cjsKKwkJfQorCisJ CWlmIChsYXN0X2ZiX3B0ciAhPSBmYl9wdHIpIHsKKwkJCWZyYW1lX3dpZHRoID0gZmJfcHRyLT53 aWR0aDsKKwkJCWZyYW1lX2hlaWdodCA9IGZiX3B0ci0+aGVpZ2h0OworCQkJYnl0ZXNfcGVyX3Bp eGVsID0gZmJfcHRyLT5wbGFuZV9icHBbMF0gLyA4OworCQkJYm8gPSBnZW1faGFuZGxlX3RvX2xp YmRybV9ibyhkYXRhLT5idWZtZ3IsIGRhdGEtPmRybV9mZCwgIiIsCisJCQkJCQkgICAgIGZiX3B0 ci0+Z2VtX2hhbmRsZSk7CisJCQlpZ3RfYXNzZXJ0KGJvKTsKKworCQkJc2NyYXRjaF9idWZfaW5p dCgmZHN0LCBibywgZnJhbWVfd2lkdGgsIGZyYW1lX2hlaWdodCwKKwkJCQkJIGZiX3B0ci0+c3Ry aWRlc1swXSwgZmJfcHRyLT5tb2RpZmllciwKKwkJCQkJIGZiX3B0ci0+cGxhbmVfYnBwWzBdKTsK KwkJfQorCQlsYXN0X2ZiX3B0ciA9IGZiX3B0cjsKKworCQkvKiBGaWxsIHRoZSBmcmFtZWJ1ZmZl ciB1c2luZyBzaGFkZXIgKi8KKwkJeCA9IDA7CisJCXkgPSBmcmFtZV9oZWlnaHQgLyA0OworCisJ CWdwZ3B1X2ZpbGwoYmF0Y2gsCisJCQkgICAmZHN0LCB4LCB5LCAoZnJhbWVfd2lkdGggKiBieXRl c19wZXJfcGl4ZWwpLAorCQkJICAgZnJhbWVfaGVpZ2h0IC8gMiwKKwkJCSAgIGNvbnRleHQtPmNv bG9yKTsKKworCQlyZWN0ID0gMDsKKworCQl3aGlsZSAocmVjdCA8IGNvbnRleHQtPm51bV9yZWN0 YW5nbGVzKSB7CisJCQkvKiBkaXZpZGUgYXQgbGVhc3QgYnkgMiBhbmQgdXAgdG8gOCAqLworCQkJ aW50IHhfcmFuZCwgeV9yYW5kOworCQkJcmVjdF9kaXZpc29yID0gMSA8PCAoaGFyc19wZXRydXNr YV9mNTRfMV9yYW5kb21fdW5zYWZlX21heCgzKSArIDEpOworCisJCQlyZWN0X3dpZHRoID0gZnJh bWVfd2lkdGggLyByZWN0X2Rpdmlzb3I7CisJCQlyZWN0X2hlaWdodCA9IGZyYW1lX2hlaWdodCAv IHJlY3RfZGl2aXNvcjsKKworCQkJeF9yYW5kID0gaGFyc19wZXRydXNrYV9mNTRfMV9yYW5kb21f dW5zYWZlX21heChmcmFtZV93aWR0aCAtIHJlY3Rfd2lkdGgpOworCQkJeV9yYW5kID0gaGFyc19w ZXRydXNrYV9mNTRfMV9yYW5kb21fdW5zYWZlX21heChmcmFtZV9oZWlnaHQvMiAtIHJlY3RfaGVp Z2h0KTsKKworCQkJY29udGV4dC0+Ymx0X3JlY3QueCA9IHggKyB4X3JhbmQ7CisJCQljb250ZXh0 LT5ibHRfcmVjdC55ID0geSArIHlfcmFuZDsKKworCQkJLyogRmlsbCByYW5kb21seSBzaXplZCBh bmQgcG9zaXRpb25lZCByZWN0YW5nbGVzICovCisJCQlncGdwdV9maWxsKGJhdGNoLAorCQkJCSAg ICZkc3QsIGNvbnRleHQtPmJsdF9yZWN0LngsIGNvbnRleHQtPmJsdF9yZWN0LnksCisJCQkJICAg KChjb250ZXh0LT5ibHRfcmVjdC54ICsgcmVjdF93aWR0aCkgKiBieXRlc19wZXJfcGl4ZWwpLAor CQkJCSAgIGNvbnRleHQtPmJsdF9yZWN0LnkgKyByZWN0X2hlaWdodCwKKwkJCQkgICBjb250ZXh0 LT5jb2xvciArIDB4ODApOworCisJCQljb250ZXh0LT5jb2xvciArPSA0OworCisJCQkrK3JlY3Q7 CisJCX0KKwkJZnJhbWUrKzsKKwl9CisKKwlkcm1faW50ZWxfYm9fdW5yZWZlcmVuY2UoYm8pOwor CisJaWd0X3JlbW92ZV9mYihkYXRhLT5kaXNwbGF5LmRybV9mZCwgJmZiKTsKKworCWlndF9pbmZv KCJHUFUgdGhyZWFkIHBpcGUgJWQgc3RvcC4gRnJhbWVzIHJlbmRlcmVkOiAlZFxuIiwgcGlwZSwg ZnJhbWUpOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgcGlw ZV9zZWxlY3QoZW51bSBwaXBlIHBpcGUpCit7CisJaWYgKHBpcGUgPiAxKQorCQlyZXR1cm4gcGlw ZSA8PCBEUk1fVkJMQU5LX0hJR0hfQ1JUQ19TSElGVDsKKwllbHNlIGlmIChwaXBlID4gMCkKKwkJ cmV0dXJuIERSTV9WQkxBTktfU0VDT05EQVJZOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyB1bnNpZ25lZCBnZXRfdmJsYW5rKGludCBmZCwgZW51bSBwaXBlIHBpcGUsIHVuc2lnbmVk IGZsYWdzKQoreworCXVuaW9uIGRybV93YWl0X3ZibGFuayB2Ymw7CisKKwltZW1zZXQoJnZibCwg MCwgc2l6ZW9mKHZibCkpOworCXZibC5yZXF1ZXN0LnR5cGUgPSBEUk1fVkJMQU5LX1JFTEFUSVZF IHwgcGlwZV9zZWxlY3QocGlwZSkgfCBmbGFnczsKKwlpZiAoZHJtSW9jdGwoZmQsIERSTV9JT0NU TF9XQUlUX1ZCTEFOSywgJnZibCkpCisJCXJldHVybiAwOworCisJcmV0dXJuIHZibC5yZXBseS5z ZXF1ZW5jZTsKK30KKworCitzdGF0aWMgaW50IHBpcGVfc3RyZXNzKHN0cnVjdCBkYXRhICpkYXRh LCBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwKKwkJICAgICAgIGVudW0gcGlwZSBwaXBlLCBkcm1Nb2Rl TW9kZUluZm8gKm1vZGUpCit7CisJaWd0X3BsYW5lX3QgKnBsYW5lOworCWludCBpOworCWludCBy ZXQ7CisJYm9vbCBuZXdfbW9kZSA9IGZhbHNlOworCXVpbnQ2NF90IGN1cnNvcl93aWR0aCwgY3Vy c29yX2hlaWdodDsKKworCWRvX29yX2RpZShkcm1HZXRDYXAoZGF0YS0+ZHJtX2ZkLCBEUk1fQ0FQ X0NVUlNPUl9XSURUSCwgJmN1cnNvcl93aWR0aCkpOworCWRvX29yX2RpZShkcm1HZXRDYXAoZGF0 YS0+ZHJtX2ZkLCBEUk1fQ0FQX0NVUlNPUl9IRUlHSFQsICZjdXJzb3JfaGVpZ2h0KSk7CisKKwlp ZiAoZGF0YS0+bGFzdF9tb2RlW3BpcGVdICE9IG1vZGUpIHsKKwkJaWd0X291dHB1dF9vdmVycmlk ZV9tb2RlKG91dHB1dCwgbW9kZSk7CisJCWlndF9vdXRwdXRfc2V0X3BpcGUob3V0cHV0LCBwaXBl KTsKKworCQlyZXQgPSBpZ3RfZGlzcGxheV90cnlfY29tbWl0X2F0b21pYygmZGF0YS0+ZGlzcGxh eSwKKwkJCQkJCSAgICBEUk1fTU9ERV9BVE9NSUNfVEVTVF9PTkxZIHwKKwkJCQkJCSAgICBEUk1f TU9ERV9BVE9NSUNfQUxMT1dfTU9ERVNFVCwgTlVMTCk7CisJCWlmIChyZXQpIHsKKwkJCWlndF93 YXJuKCJDb3VsZCBub3QgY29tbWl0IG1vZGU6IFxuIik7CisJCQlrbXN0ZXN0X2R1bXBfbW9kZSht b2RlKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlpZ3RfZGlzcGxheV9jb21taXQyKCZkYXRh LT5kaXNwbGF5LCBDT01NSVRfQVRPTUlDKTsKKwkJZGF0YS0+bGFzdF9tb2RlW3BpcGVdID0gbW9k ZTsKKwkJbmV3X21vZGUgPSB0cnVlOworCX0KKworCS8qCisJICogTG9va3MgbGlrZSB3ZSBjYW4n dCBoYXZlIHBsYW5lcyBvbiB0aGF0IHBpcGUgYXQgYWxsCisJICovCisJaWYgKCFkYXRhLT5udW1f cGxhbmVzW3BpcGVdKQorCQlyZXR1cm4gMDsKKworCW1vZGUgPSBpZ3Rfb3V0cHV0X2dldF9tb2Rl KG91dHB1dCk7CisKKwlpZiAobmV3X21vZGUpIHsKKwkJaSA9IDA7CisJCWZvcl9lYWNoX3BsYW5l X29uX3BpcGUoJmRhdGEtPmRpc3BsYXksIHBpcGUsIHBsYW5lKSB7CisJCQlpbnQgcGxhbmVfd2lk dGgsIHBsYW5lX2hlaWdodDsKKwkJCWlmIChwbGFuZS0+dHlwZSA9PSBEUk1fUExBTkVfVFlQRV9D VVJTT1IpIHsKKwkJCQlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCAmZGF0YS0+Y3Vyc29yX2ZiW3Bp cGVdKTsKKworCQkJCWlndF9mYl9zZXRfc2l6ZSgmZGF0YS0+Y3Vyc29yX2ZiW3BpcGVdLAorCQkJ CQkJcGxhbmUsIGN1cnNvcl93aWR0aCwgY3Vyc29yX2hlaWdodCk7CisKKwkJCQlpZ3RfcGxhbmVf c2V0X3NpemUocGxhbmUsIGN1cnNvcl93aWR0aCwgY3Vyc29yX2hlaWdodCk7CisJCQkJcGxhbmVf d2lkdGggPSBjdXJzb3Jfd2lkdGg7CisJCQkJcGxhbmVfaGVpZ2h0ID0gY3Vyc29yX2hlaWdodDsK KwkJCX0gZWxzZSB7CisJCQkJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgJmRhdGEtPmZiW3BpcGUg KiBNQVhfUExBTkVTICsgaV0pOworCQkJCWlndF9wbGFuZV9zZXRfcG9zaXRpb24ocGxhbmUsIDAs IDApOworCisJCQkJaWd0X2ZiX3NldF9zaXplKCZkYXRhLT5mYltwaXBlICogTUFYX1BMQU5FUyAr IGldLAorCQkJCQkJcGxhbmUsIG1vZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxheSk7CisKKwkJ CQlpZ3RfcGxhbmVfc2V0X3NpemUocGxhbmUsIG1vZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxh eSk7CisJCQkJcGxhbmVfd2lkdGggPSBtb2RlLT5oZGlzcGxheTsKKwkJCQlwbGFuZV9oZWlnaHQg PSBtb2RlLT52ZGlzcGxheTsKKwkJCX0KKworCQkJcmV0ID0gaWd0X2Rpc3BsYXlfdHJ5X2NvbW1p dF9hdG9taWMoJmRhdGEtPmRpc3BsYXksCisJCQkJCQkJICAgIERSTV9NT0RFX0FUT01JQ19URVNU X09OTFkgfAorCQkJCQkJCSAgICBEUk1fTU9ERV9BVE9NSUNfQUxMT1dfTU9ERVNFVCwKKwkJCQkJ CQkgICAgTlVMTCk7CisKKwkJCXdoaWxlIChyZXQpIHsKKwkJCQlpZiAocGxhbmVfd2lkdGggPD0g Y3Vyc29yX3dpZHRoIHx8IHBsYW5lX2hlaWdodCA8PSBjdXJzb3JfaGVpZ2h0KQorCQkJCQlicmVh azsKKwkJCQlwbGFuZV93aWR0aCAvPSAyOworCQkJCXBsYW5lX2hlaWdodCAvPSAyOworCQkJCWln dF9wbGFuZV9zZXRfc2l6ZShwbGFuZSwgcGxhbmVfd2lkdGgsIHBsYW5lX2hlaWdodCk7CisKKwkJ CQlpZ3RfaW5mbygiUmVkdWNlZCBwbGFuZSAlZCBzaXplIHRvICVkeCVkXG4iLAorCQkJCSAgICAg ICAgIHBsYW5lLT5pbmRleCwgcGxhbmVfd2lkdGgsIHBsYW5lX2hlaWdodCk7CisKKwkJCQlyZXQg PSBpZ3RfZGlzcGxheV90cnlfY29tbWl0X2F0b21pYygmZGF0YS0+ZGlzcGxheSwKKwkJCQkJCQkJ ICAgIERSTV9NT0RFX0FUT01JQ19URVNUX09OTFkgfAorCQkJCQkJCQkgICAgRFJNX01PREVfQVRP TUlDX0FMTE9XX01PREVTRVQsIE5VTEwpOworCQkJfQorCQkJaWYgKHJldCkgeworCQkJCWlndF9p bmZvKCJQbGFuZSAlZCBwaXBlICVkIHRyeSBjb21taXQgZmFpbGVkLCBleGl0aW5nXG4iLCBpLCBw aXBlKTsKKwkJCQlkYXRhLT5udW1fcGxhbmVzW3BpcGVdID0gaTsKKwkJCQlpZ3RfaW5mbygiTWF4 IG51bSBwbGFuZXMgZm9yIHBpcGUgJWQgc2V0IHRvICVkXG4iLCBwaXBlLCBpKTsKKwkJCQkvKgor CQkJCSAqIFdlIGhhdmUgbm93IGRldGVybWluZWQgbWF4IGFtb3VudCBvZiBmdWxsIHNpemVkIHBs YW5lcywgd2Ugd2lsbCBqdXN0CisJCQkJICoga2VlcCBpdCBpbiBtaW5kIGFuZCBiZSBzbWFydGVy IG5leHQgdGltZS4gQWxzbyBsZXRzIHJlbW92ZSB1bm5lZWRlZCBmYnMuCisJCQkJICogRG9uJ3Qg ZGVzdHJveSBjdXJzb3JfZmIgYXMgd2lsbCB0YWtlIGNhcmUgYWJvdXQgaXQgYXQgdGhlIGVuZC4K KwkJCQkgKi8KKwkJCQlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBOVUxMKTsKKwkJCQl3aGlsZSAo aSA8IE1BWF9QTEFORVMpIHsKKwkJCQkJaWd0X3JlbW92ZV9mYihkYXRhLT5kaXNwbGF5LmRybV9m ZCwKKwkJCQkJCSAgICAgICZkYXRhLT5mYltwaXBlICogTUFYX1BMQU5FUyArIGldKTsKKwkJCQkJ ZGF0YS0+ZmJbcGlwZSAqIE1BWF9QTEFORVMgKyBpXS5mYl9pZCA9IDA7CisJCQkJCWkrKzsKKwkJ CQl9CisJCQkJaSA9IGRhdGEtPm51bV9wbGFuZXNbcGlwZV07CisJCQl9CisJCQlpZiAoKytpID49 IGRhdGEtPm51bV9wbGFuZXNbcGlwZV0pCisJCQkJYnJlYWs7CisJCX0KKwkJaWd0X2Rpc3BsYXlf Y29tbWl0MigmZGF0YS0+ZGlzcGxheSwgQ09NTUlUX0FUT01JQyk7CisJfQorCisJcmV0dXJuIDA7 Cit9CisKKworc3RhdGljIGRybU1vZGVNb2RlSW5mbyAqIGZpbmRfaGlnaGVzdF9tb2RlKGRybU1v ZGVDb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlkcm1Nb2RlTW9kZUluZm8gKmhpZ2hlc3RfbW9k ZSA9IE5VTEw7CisJaW50IGo7CisKKwlmb3IgKGogPSAwOyBqIDwgY29ubmVjdG9yLT5jb3VudF9t b2RlczsgaisrKSB7CisJCWlmICghaGlnaGVzdF9tb2RlKSB7CisJCQloaWdoZXN0X21vZGUgPSAm Y29ubmVjdG9yLT5tb2Rlc1tqXTsKKwkJfSBlbHNlIGlmIChjb25uZWN0b3ItPm1vZGVzW2pdLnZk aXNwbGF5ICYmIGNvbm5lY3Rvci0+bW9kZXNbal0uaGRpc3BsYXkpIHsKKwkJCWlmIChoaWdoZXN0 X21vZGUtPmhkaXNwbGF5IDwgY29ubmVjdG9yLT5tb2Rlc1tqXS5oZGlzcGxheSkKKwkJCQloaWdo ZXN0X21vZGUgPSAmY29ubmVjdG9yLT5tb2Rlc1tqXTsKKwkJfQorCX0KKworCXJldHVybiBoaWdo ZXN0X21vZGU7Cit9CisKK3R5cGVkZWYgZHJtTW9kZUNvbm5lY3RvciAqIGRybU1vZGVDb25uZWN0 b3JQdHI7CisKK3N0YXRpYyB2b2lkIGZpbGxfY29ubmVjdG9yX3RvX3BpcGVfYXJyYXkoc3RydWN0 IGRhdGEgKmRhdGEsCisJCQkJCSBkcm1Nb2RlUmVzICptb2RlX3Jlc291cmNlcywKKwkJCQkJIGRy bU1vZGVDb25uZWN0b3JQdHIgKmNvbm5lY3RvcnMpCit7CisJaW50IHBpcGUgPSAwOworCWludCBp OworCisJbWVtc2V0KGNvbm5lY3RvcnMsIDAsIHNpemVvZihkcm1Nb2RlQ29ubmVjdG9yUHRyKSAq CisJICAgICAgIG1vZGVfcmVzb3VyY2VzLT5jb3VudF9jb25uZWN0b3JzKTsKKworCWlndF9pbmZv KCJHb3QgJWQgY29ubmVjdG9yc1xuIiwgbW9kZV9yZXNvdXJjZXMtPmNvdW50X2Nvbm5lY3RvcnMp OworCisJZm9yIChpID0gMDsgaSA8IG1vZGVfcmVzb3VyY2VzLT5jb3VudF9jb25uZWN0b3JzOyBp KyspIHsKKwkJZHJtTW9kZUNvbm5lY3RvciAqY29ubmVjdG9yOworCisJCWNvbm5lY3RvciA9IGRy bU1vZGVHZXRDb25uZWN0b3IoZGF0YS0+ZHJtX2ZkLAorCQkgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG1vZGVfcmVzb3VyY2VzLT5jb25uZWN0b3JzW2ldKTsKKworCQlpZiAoIWNvbm5l Y3RvcikgeworCQkJaWd0X3dhcm4oImNvdWxkIG5vdCBnZXQgY29ubmVjdG9yICVpOiAlc1xuIiwK KwkJCSAgICAgICAgIG1vZGVfcmVzb3VyY2VzLT5jb25uZWN0b3JzW2ldLCBzdHJlcnJvcihlcnJu bykpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoY29ubmVjdG9yLT5jb25uZWN0aW9uID09 IERSTV9NT0RFX0NPTk5FQ1RFRCkgeworCQkJaWd0X2luZm8oIkNvbm5lY3RvciAlZCBjb25uZWN0 ZWQgdG8gcGlwZSAlZFxuIiwgaSwgcGlwZSk7CisJCQljb25uZWN0b3JzW3BpcGVdID0gKGRybU1v ZGVDb25uZWN0b3JQdHIpY29ubmVjdG9yOworCQkJKytwaXBlOworCQkJaWYgKHBpcGUgPT0gSUdU X01BWF9QSVBFUykKKwkJCQlicmVhazsKKwkJfSBlbHNlIHsKKwkJCWlndF9pbmZvKCJDb25uZWN0 b3IgJWQgY29ubmVjdGlvbiBzdGF0dXMgJWRcbiIsCisJCQkgICAgICAgICBpLCBjb25uZWN0b3It PmNvbm5lY3Rpb24pOworCQkJZHJtTW9kZUZyZWVDb25uZWN0b3IoY29ubmVjdG9yKTsKKwkJfQor CX0KK30KKworc3RhdGljIHZvaWQgcmVsZWFzZV9jb25uZWN0b3JzKGRybU1vZGVDb25uZWN0b3JQ dHIgKmNvbm5lY3RvcnMpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IElHVF9NQVhfUElQ RVM7IGkrKykgeworCQlpZiAoY29ubmVjdG9yc1tpXSkKKwkJCWRybU1vZGVGcmVlQ29ubmVjdG9y KGNvbm5lY3RvcnNbaV0pOworCX0KKwlmcmVlKGNvbm5lY3RvcnMpOworfQorCisjZGVmaW5lIE1J Tl9EVVJBVElPTl9TRUMgMTAKKyNkZWZpbmUgTUlOX0lURVJBVElPTlMgMjAKKworc3RhdGljIHZv aWQgc3RyZXNzX3BpcGVzKHN0cnVjdCBkYXRhICpkYXRhLCBzdHJ1Y3QgdGltZXNwZWMgKnN0YXJ0 LAorCQkJIHN0cnVjdCB0aW1lc3BlYyAqZW5kKQoreworCWludCBwaXBlOworCWludCByZXQ7CisJ aWd0X291dHB1dF90ICpvdXRwdXQ7CisJaW50IHRpbWVfZWxhcHNlZDsKKwlpZ3RfY3JjX3QgY3Jj LCBjcmMyOworCisJLyoKKwkgKiBJbmNyZW1lbnQgcGlwZSBvbmx5IGZvciBjb25uZWN0ZWQgb3V0 cHV0cywKKwkgKiBmb3IgZWFjaCBjb25uZWN0ZWQgb3V0cHV0IHdlIHNob3VsZCBhc3NpZ24gYQor CSAqIGRpZmZlcmVudCBwaXBlLgorCSAqLworCWZvciAocGlwZSA9IDA7IHBpcGUgPCBJR1RfTUFY X1BJUEVTOyBwaXBlKyspIHsKKworCQlpZiAoIWRhdGEtPmhpZ2hlc3RfbW9kZVtwaXBlXSkKKwkJ CWNvbnRpbnVlOworCisJCWlndF9hc3NlcnRfZihkYXRhLT5kaXNwbGF5LnBpcGVzW3BpcGVdLm5f cGxhbmVzIDwgTUFYX1BMQU5FUywKKwkJCSAgICAiQ3VycmVudGx5IHdlIGRvbid0IHN1cHBvcnQg bW9yZSB0aGFuICVkIHBsYW5lcyEiLAorCQkJICAgICBNQVhfUExBTkVTKTsKKworCQlwaXBlX2Ny YyA9IGlndF9waXBlX2NyY19uZXcoZGF0YS0+ZHJtX2ZkLCBwaXBlLAorCQkgICAgICAgICAgICAg ICAgICAgICAgICAgICAgSU5URUxfUElQRV9DUkNfU09VUkNFX0FVVE8pOworCisJCW91dHB1dCA9 IGlndF9vdXRwdXRfZnJvbV9jb25uZWN0b3IoJmRhdGEtPmRpc3BsYXksCisJCQkJCQkgICBkYXRh LT5jb25uZWN0b3JzW3BpcGVdKTsKKworCQlpZiAob3V0cHV0KQorCQkJcmV0ID0gcGlwZV9zdHJl c3MoZGF0YSwgb3V0cHV0LCBwaXBlLAorCQkJCQkgZGF0YS0+aGlnaGVzdF9tb2RlW3BpcGVdKTsK KworCQl0aW1lX2VsYXBzZWQgPSAoaW50KWlndF90aW1lX2VsYXBzZWQoc3RhcnQsIGVuZCk7CisK KwkJaWYgKCEodGltZV9lbGFwc2VkICUgKE1JTl9EVVJBVElPTl9TRUMvNCkpKSB7CisKKwkJCWdl dF92YmxhbmsoZGF0YS0+ZGlzcGxheS5kcm1fZmQsIHBpcGUsCisJCQkJICAgRFJNX1ZCTEFOS19O RVhUT05NSVNTKTsKKworCQkJaWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKHBpcGVfY3JjLCAmY3Jj KTsKKworCQkJZ2V0X3ZibGFuayhkYXRhLT5kaXNwbGF5LmRybV9mZCwgcGlwZSwKKwkJCQkgICBE Uk1fVkJMQU5LX05FWFRPTk1JU1MpOworCisJCQlpZ3RfcGlwZV9jcmNfY29sbGVjdF9jcmMocGlw ZV9jcmMsICZjcmMyKTsKKworCQkJaWd0X2Fzc2VydF9jcmNfZXF1YWwoJmNyYywgJmNyYzIpOwor CQl9CisKKwkJaWd0X3BpcGVfY3JjX2ZyZWUocGlwZV9jcmMpOworCisJCWlmIChyZXQpCisJCQli cmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHN0cmVzcyhzdHJ1Y3QgZGF0YSAqZGF0YSkKK3sK KwlzdHJ1Y3QgdGltZXNwZWMgc3RhcnQsIGVuZDsKKwlpbnQgaXRlcmF0aW9ucyA9IDA7CisJYm9v bCBuZWVkX2NvbnRpbnVlOworCisJaWd0X2dldHRpbWUoJnN0YXJ0KTsKKworCWRvIHsKKwkJaWd0 X2dldHRpbWUoJmVuZCk7CisJCXN0cmVzc19waXBlcyhkYXRhLCAmc3RhcnQsICZlbmQpOworCQlp dGVyYXRpb25zKys7CisJCW5lZWRfY29udGludWUgPQorCQkJKGludClpZ3RfdGltZV9lbGFwc2Vk KCZzdGFydCwgJmVuZCkgPCBNSU5fRFVSQVRJT05fU0VDOworCX0gd2hpbGUgKChuZWVkX2NvbnRp bnVlIHx8IGl0ZXJhdGlvbnMgPCBNSU5fSVRFUkFUSU9OUykpOworCisKK30KKworc3RhdGljIHZv aWQgc3RhcnRfZ3B1X3RocmVhZHMoc3RydWN0IGRhdGEgKmRhdGEpCit7CisJaW50IGk7CisKKwlp ZiAoIWRhdGEtPmRldmlkKSB7CisJCWRhdGEtPmRldmlkID0gaW50ZWxfZ2V0X2RybV9kZXZpZChk YXRhLT5kcm1fZmQpOworCQlpZ3RfcmVxdWlyZV9nZW0oZGF0YS0+ZHJtX2ZkKTsKKworCQlkYXRh LT5idWZtZ3IgPSBkcm1faW50ZWxfYnVmbWdyX2dlbV9pbml0KGRhdGEtPmRybV9mZCwgNDA5Nik7 CisJCWlndF9hc3NlcnQoZGF0YS0+YnVmbWdyKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgSUdU X01BWF9QSVBFUzsgaSsrKSB7CisJCWlmICghZGF0YS0+aGlnaGVzdF9tb2RlW2ldKQorCQkJY29u dGludWU7CisJCWRhdGEtPmdwdV9jb250ZXh0W2ldLmRhdGEgPSBkYXRhOworCQlkYXRhLT5ncHVf Y29udGV4dFtpXS5waXBlID0gaTsKKwkJZGF0YS0+Z3B1X2NvbnRleHRbaV0uZmJfcHRyID0gTlVM TDsKKwkJZGF0YS0+Z3B1X2NvbnRleHRbaV0uYmx0X3JlY3QueCA9IDA7CisJCWRhdGEtPmdwdV9j b250ZXh0W2ldLmJsdF9yZWN0LnkgPSAwOworCQlkYXRhLT5ncHVfY29udGV4dFtpXS5ibHRfcmVj dC53ID0gMDsKKwkJZGF0YS0+Z3B1X2NvbnRleHRbaV0uYmx0X3JlY3QuaCA9IDA7CisJCWRhdGEt PmdwdV9jb250ZXh0W2ldLm51bV9yZWN0YW5nbGVzID0gTl9CTElUUzsKKwkJZGF0YS0+Z3B1X3Ro cmVhZF9zdGF0ZVtpXSA9IFJVTk5JTkc7CisJCWlndF9pbmZvKCJTdGFydGluZyBHUFUgdGhyZWFk ICVkXG4iLCBpKTsKKworCQlkYXRhLT5ncHVfY29udGV4dFtpXS5iYXRjaCA9IGludGVsX2JhdGNo YnVmZmVyX2FsbG9jKGRhdGEtPmJ1Zm1nciwKKwkJCQkJCQkJICAgICBkYXRhLT5kZXZpZCk7CisK KwkJcHRocmVhZF9jcmVhdGUoJmRhdGEtPmdwdV90aHJlYWRbaV0sIE5VTEwsIGdwdV9sb2FkLAor CQkJICAgICAgICh2b2lkKikmZGF0YS0+Z3B1X2NvbnRleHRbaV0pOworCisJCXNlbV93YWl0KCZk YXRhLT5ncHVfdGhyZWFkX3BhdXNlX2Fja1tpXSk7CisJCWlndF9pbmZvKCJHUFUgdGhyZWFkICVk IHN0YXJ0ZWRcbiIsIGkpOworCX0KK30KKworc3RhdGljIHZvaWQgc3RvcF9ncHVfdGhyZWFkcyhz dHJ1Y3QgZGF0YSAqZGF0YSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBJR1RfTUFY X1BJUEVTOyBpKyspIHsKKwkJaWYgKCFkYXRhLT5oaWdoZXN0X21vZGVbaV0pCisJCQljb250aW51 ZTsKKwkJaWd0X2luZm8oIlN0b3BpbmcgR1BVIHRocmVhZCAlZFxuIiwgaSk7CisJCWRhdGEtPmdw dV90aHJlYWRfc3RhdGVbaV0gPSBTVE9QUEVEOworCQlwdGhyZWFkX2pvaW4oZGF0YS0+Z3B1X3Ro cmVhZFtpXSwgTlVMTCk7CisJCWRhdGEtPmdwdV9jb250ZXh0W2ldLmZiX3B0ciA9IE5VTEw7CisJ CWludGVsX2JhdGNoYnVmZmVyX2ZyZWUoZGF0YS0+Z3B1X2NvbnRleHRbaV0uYmF0Y2gpOworCX0K K30KKworc3RhdGljIHZvaWQgc3RhcnRfY3B1X3RocmVhZHMoc3RydWN0IGRhdGEgKmRhdGEpCit7 CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+bnVtYmVyX29mX2NvcmVzOyBpKysp IHsKKwkJZGF0YS0+Y3B1X2NvbnRleHRbaV0uYnVmMSA9IG1hbGxvYyhCVUZfU0laRSk7CisJCWRh dGEtPmNwdV9jb250ZXh0W2ldLmJ1ZjIgPSBtYWxsb2MoQlVGX1NJWkUpOworCQlkYXRhLT5jcHVf Y29udGV4dFtpXS5pZCA9IGk7CisJCWRhdGEtPmNwdV9jb250ZXh0W2ldLmRhdGEgPSBkYXRhOwor CQlwdGhyZWFkX2NyZWF0ZSgmZGF0YS0+Y3B1X3RocmVhZFtpXSwgTlVMTCwgY3B1X2xvYWQsCisJ CQkgICAgICAgKHZvaWQqKSZkYXRhLT5jcHVfY29udGV4dFtpXSk7CisJfQorfQorCitzdGF0aWMg dm9pZCBzdG9wX2NwdV90aHJlYWRzKHN0cnVjdCBkYXRhICpkYXRhKQoreworCWludCBpOworCisJ Zm9yIChpID0gMDsgaSA8IGRhdGEtPm51bWJlcl9vZl9jb3JlczsgaSsrKSB7CisJCWRhdGEtPmNw dV90aHJlYWRfc3RvcFtpXSA9IHRydWU7CisJCXB0aHJlYWRfam9pbihkYXRhLT5jcHVfdGhyZWFk W2ldLCBOVUxMKTsKKwkJZnJlZShkYXRhLT5jcHVfY29udGV4dFtpXS5idWYxKTsKKwkJZnJlZShk YXRhLT5jcHVfY29udGV4dFtpXS5idWYyKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNyZWF0ZV9m cmFtZWJ1ZmZlcnMoc3RydWN0IGRhdGEgKmRhdGEpCit7CisJaW50IGksIGo7CisJdWludDY0X3Qg Y3Vyc29yX3dpZHRoLCBjdXJzb3JfaGVpZ2h0OworCisJZG9fb3JfZGllKGRybUdldENhcChkYXRh LT5kcm1fZmQsIERSTV9DQVBfQ1VSU09SX1dJRFRILCAmY3Vyc29yX3dpZHRoKSk7CisJZG9fb3Jf ZGllKGRybUdldENhcChkYXRhLT5kcm1fZmQsIERSTV9DQVBfQ1VSU09SX0hFSUdIVCwgJmN1cnNv cl9oZWlnaHQpKTsKKworCWZvciAoaSA9IDA7IGkgPCBJR1RfTUFYX1BJUEVTOyBpKyspIHsKKwkJ aWYgKCFkYXRhLT5oaWdoZXN0X21vZGVbaV0pCisJCQljb250aW51ZTsKKwkJaWYgKCFkYXRhLT5j dXJzb3JfZmJbaV0uZmJfaWQpIHsKKwkJCWlndF9jcmVhdGVfY29sb3JfZmIoZGF0YS0+ZHJtX2Zk LAorCQkJCQkgICAgY3Vyc29yX3dpZHRoLCBjdXJzb3JfaGVpZ2h0LAorCQkJCQkgICAgZGF0YS0+ Zm9ybWF0LAorCQkJCQkgICAgZGF0YS0+bW9kaWZpZXIsCisJCQkJCSAgICAxLjAsMC4wLDAuMCwK KwkJCQkJICAgICZkYXRhLT5jdXJzb3JfZmJbaV0pOworCQl9CisJCWZvciAoaiA9IDA7IGogPCBk YXRhLT5udW1fcGxhbmVzW2ldOyBqKyspIHsKKwkJCWlmICghZGF0YS0+ZmJbaSAqIE1BWF9QTEFO RVMgKyBqXS5mYl9pZCkgeworCQkJCWlndF9jcmVhdGVfY29sb3JfcGF0dGVybl9mYihkYXRhLT5k cm1fZmQsCisJCQkJCQkJICAgIGRhdGEtPmhpZ2hlc3RfbW9kZVtpXS0+aGRpc3BsYXksCisJCQkJ CQkJICAgIGRhdGEtPmhpZ2hlc3RfbW9kZVtpXS0+dmRpc3BsYXksCisJCQkJCQkJICAgIGRhdGEt PmZvcm1hdCwKKwkJCQkJCQkgICAgZGF0YS0+bW9kaWZpZXIsCisJCQkJCQkJICAgIDAuMCwgMS4w LCAwLjAsICZkYXRhLT5mYltpICogTUFYX1BMQU5FUyArIGpdKTsKKwkJCX0KKwkJfQorCX0KK30K Kworc3RhdGljIHZvaWQgZGVzdHJveV9mcmFtZWJ1ZmZlcnMoc3RydWN0IGRhdGEgKmRhdGEpCit7 CisJaW50IGksIGo7CisKKwlmb3IgKGkgPSAwOyBpIDwgSUdUX01BWF9QSVBFUzsgaSsrKSB7CisJ CWlmICghZGF0YS0+aGlnaGVzdF9tb2RlW2ldKQorCQkJY29udGludWU7CisJCWZvciAoaiA9IDA7 IGogPCBNQVhfUExBTkVTOyBqKyspIHsKKwkJCWlmIChkYXRhLT5mYltpICogTUFYX1BMQU5FUyAr IGpdLmZiX2lkKSB7CisJCQkJaWd0X3BsYW5lX3NldF9mYigmZGF0YS0+ZGlzcGxheS5waXBlc1tp XS5wbGFuZXNbal0sIE5VTEwpOworCQkJCWlndF9yZW1vdmVfZmIoZGF0YS0+ZGlzcGxheS5kcm1f ZmQsICZkYXRhLT5mYltpICogTUFYX1BMQU5FUyArIGpdKTsKKwkJCQlkYXRhLT5mYltpICogTUFY X1BMQU5FUyArIGpdLmZiX2lkID0gMDsKKwkJCX0KKwkJfQorCQlpZiAoZGF0YS0+Y3Vyc29yX2Zi W2ldLmZiX2lkKSB7CisJCQlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmRpc3BsYXkuZHJtX2ZkLCAmZGF0 YS0+Y3Vyc29yX2ZiW2ldKTsKKwkJCWRhdGEtPmN1cnNvcl9mYltpXS5mYl9pZCA9IDA7CisJCX0K Kwl9Cit9CisKK3N0YXRpYyB2b2lkIHByZXBhcmVfdGVzdChzdHJ1Y3QgZGF0YSAqZGF0YSkKK3sK KwlpbnQgaSxqOworCWludCBudW1fY29ubmVjdG9yczsKKworCWRhdGEtPm51bWJlcl9vZl9jb3Jl cyA9IG1pbihzeXNjb25mKF9TQ19OUFJPQ0VTU09SU19PTkxOKSwgTUFYX0NPUkVTKTsKKworCWZv ciAoaSA9IDA7IGkgPCBJR1RfTUFYX1BJUEVTOyBpKyspIHsKKwkJZm9yIChqID0gMDsgaiA8IE1B WF9QTEFORVM7IGorKykKKwkJCWRhdGEtPmZiW2kgKiBNQVhfUExBTkVTICsgal0uZmJfaWQgPSAw OworCQlkYXRhLT5jdXJzb3JfZmJbaV0uZmJfaWQgPSAwOworCQlkYXRhLT5udW1fcGxhbmVzW2ld ID0gLTE7CisJCWRhdGEtPmxhc3RfbW9kZVtpXSA9IE5VTEw7CisJCXNlbV9pbml0KCZkYXRhLT5n cHVfdGhyZWFkX3BhdXNlX2Fja1tpXSwgMCwgMCk7CisJfQorCisJc3RhcnRfY3B1X3RocmVhZHMo ZGF0YSk7CisKKwlkYXRhLT5tb2RlX3Jlc291cmNlcyA9IGRybU1vZGVHZXRSZXNvdXJjZXMoZGF0 YS0+ZHJtX2ZkKTsKKwlpZiAoIWRhdGEtPm1vZGVfcmVzb3VyY2VzKSB7CisJCWlndF93YXJuKCJk cm1Nb2RlR2V0UmVzb3VyY2VzIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisJCXJl dHVybjsKKwl9CisKKwludW1fY29ubmVjdG9ycyA9IGRhdGEtPm1vZGVfcmVzb3VyY2VzLT5jb3Vu dF9jb25uZWN0b3JzOworCisJbWVtc2V0KGRhdGEtPmhpZ2hlc3RfbW9kZSwgMCwgc2l6ZW9mKGRy bU1vZGVNb2RlSW5mbyAqKSAqIElHVF9NQVhfUElQRVMpOworCisJZGF0YS0+Y29ubmVjdG9ycyA9 CisJCShkcm1Nb2RlQ29ubmVjdG9yUHRyICopbWFsbG9jKHNpemVvZihkcm1Nb2RlQ29ubmVjdG9y UHRyKSAqIG51bV9jb25uZWN0b3JzKTsKKworCWZpbGxfY29ubmVjdG9yX3RvX3BpcGVfYXJyYXko ZGF0YSwgZGF0YS0+bW9kZV9yZXNvdXJjZXMsIGRhdGEtPmNvbm5lY3RvcnMpOworCisJZm9yIChp ID0gMDsgaSA8IElHVF9NQVhfUElQRVM7IGkrKykgeworCQlkcm1Nb2RlQ29ubmVjdG9yICpjb25u ZWN0b3IgPSAoZHJtTW9kZUNvbm5lY3RvciAqKWRhdGEtPmNvbm5lY3RvcnNbaV07CisJCWlmICgh Y29ubmVjdG9yKQorCQkJY29udGludWU7CisJCWlmICghZGF0YS0+aGlnaGVzdF9tb2RlW2ldKSB7 CisJCQlpZiAoY29ubmVjdG9yLT5jb3VudF9tb2RlcykKKwkJCQlkYXRhLT5oaWdoZXN0X21vZGVb aV0gPSBmaW5kX2hpZ2hlc3RfbW9kZShjb25uZWN0b3IpOworCQl9CisJCWlndF9hc3NlcnQoZGF0 YS0+aGlnaGVzdF9tb2RlW2ldKTsKKworCQlpZiAoZGF0YS0+aGlnaGVzdF9tb2RlW2ldKSB7CisJ CQlpZ3RfaW5mbygiVXNpbmcgbW9kZTogXG4iKTsKKwkJCWttc3Rlc3RfZHVtcF9tb2RlKGRhdGEt PmhpZ2hlc3RfbW9kZVtpXSk7CisJCX0KKworCQlpZiAoZGF0YS0+bnVtX3BsYW5lc1tpXSA9PSAt MSkKKwkJCWRhdGEtPm51bV9wbGFuZXNbaV0gPSBkYXRhLT5kaXNwbGF5LnBpcGVzW2ldLm5fcGxh bmVzOworCisJCWlndF9pbmZvKCJNYXggbnVtYmVyIG9mIHBsYW5lcyBpcyAlZCBmb3IgcGlwZSAl ZFxuIiwKKwkJCSBkYXRhLT5udW1fcGxhbmVzW2ldLCBpKTsKKwl9CisKKwljcmVhdGVfZnJhbWVi dWZmZXJzKGRhdGEpOworCisJc3RhcnRfZ3B1X3RocmVhZHMoZGF0YSk7Cit9CisKK3N0YXRpYyB2 b2lkIGZpbmlzaF90ZXN0KHN0cnVjdCBkYXRhICpkYXRhKQoreworCWludCBpOworCisJc3RvcF9n cHVfdGhyZWFkcyhkYXRhKTsKKworCS8qCisJICogQXMgd2UgY2hhbmdlIHRpbGluZy9mb3JtYXQg d2UgbmVlZCBhIG5ldyBGQgorCSAqLworCWRlc3Ryb3lfZnJhbWVidWZmZXJzKGRhdGEpOworCisJ Zm9yIChpID0gMDsgaSA8IElHVF9NQVhfUElQRVM7IGkrKykgeworCQlkYXRhLT5udW1fcGxhbmVz W2ldID0gLTE7CisJCWRhdGEtPmxhc3RfbW9kZVtpXSA9IE5VTEw7CisJfQorCisJc3RvcF9jcHVf dGhyZWFkcyhkYXRhKTsKKworCXJlbGVhc2VfY29ubmVjdG9ycyhkYXRhLT5jb25uZWN0b3JzKTsK KworCWRybU1vZGVGcmVlUmVzb3VyY2VzKGRhdGEtPm1vZGVfcmVzb3VyY2VzKTsKK30KKworc3Ry dWN0IGRhdGEgZGF0YSA9IHsKKwkuZm9ybWF0ID0gRFJNX0ZPUk1BVF9YUkdCODg4OCwKKwkubW9k aWZpZXIgPSBEUk1fRk9STUFUX01PRF9MSU5FQVIsCisJLmRldmlkID0gMCwKK307CisKK2lndF9t YWluIHsKKwl1aW50OF90IGZvcm1hdF9pZHggPSAwLCB0aWxpbmdfaWR4ID0gMDsKKworCWlndF9m aXh0dXJlIHsKKwkJZGF0YS5kcm1fZmQgPSBkYXRhLmRpc3BsYXkuZHJtX2ZkID0gZHJtX29wZW5f ZHJpdmVyX21hc3RlcihEUklWRVJfQU5ZKTsKKworCQlrbXN0ZXN0X3NldF92dF9ncmFwaGljc19t b2RlKCk7CisKKwkJaWd0X2Rpc3BsYXlfcmVxdWlyZSgmZGF0YS5kaXNwbGF5LCBkYXRhLmRpc3Bs YXkuZHJtX2ZkKTsKKwkJaWd0X3JlcXVpcmUoZGF0YS5kaXNwbGF5LmlzX2F0b21pYyk7CisJCWln dF9kaXNwbGF5X3JlcXVpcmVfb3V0cHV0KCZkYXRhLmRpc3BsYXkpOworCX0KKworCWZvciAoZm9y bWF0X2lkeCA9IDA7IGZvcm1hdF9pZHggPCBOX0ZPUk1BVFM7IGZvcm1hdF9pZHgrKykKKwkJZm9y ICh0aWxpbmdfaWR4ID0gMDsgdGlsaW5nX2lkeCA8IE5fVElMSU5HX01FVEhPRFM7IHRpbGluZ19p ZHgrKykKKwkJeworCQkJZGF0YS5mb3JtYXQgPSBmb3JtYXRzW2Zvcm1hdF9pZHhdOworCQkJZGF0 YS5tb2RpZmllciA9IHRpbGluZ3NbdGlsaW5nX2lkeF07CisKKwkJCWlndF9maXh0dXJlIHsKKwkJ CQlwcmVwYXJlX3Rlc3QoJmRhdGEpOworCQkJfQorCisJCQlpZ3RfZGVzY3JpYmUoIlN0YXJ0IHBp cGUgc3RyZXNzIHRlc3QsIHV0aWxpemluZyBjcHUgYW5kIGdwdSAiCisJCQkgICAgICAgICAgICAg InNpbXVsdGFuZW91c2x5IHdpdGggbWF4aW11bSBhbW91bnQgb2YgcGxhbmVzICIKKwkJCSAgICAg ICAgICAgICAiYW5kIHJlc29sdXRpb24gIik7CisJCQlpZ3Rfc3VidGVzdF9mKCJzdHJlc3MtJXMt JXMiLAorCQkJICAgICAgICAgICAgICBmb3JtYXRfc3RyKGZvcm1hdF9pZHgpLAorCQkJICAgICAg ICAgICAgICB0aWxpbmdfc3RyKHRpbGluZ19pZHgpKSB7CisKKwkJCQlzdHJlc3MoJmRhdGEpOwor CisJCQl9CisKKwkJCWlndF9maXh0dXJlIHsKKwkJCQlmaW5pc2hfdGVzdCgmZGF0YSk7CisJCQl9 CisJCX0KKworCWlndF9maXh0dXJlIHsKKwkJaWd0X2Rpc3BsYXlfZmluaSgmZGF0YS5kaXNwbGF5 KTsKKwl9Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9tZXNvbi5idWlsZCBiL3Rlc3RzL21lc29uLmJ1 aWxkCmluZGV4IDBiMTU2MDljLi43OTQ2ZDQ0YSAxMDA2NDQKLS0tIGEvdGVzdHMvbWVzb24uYnVp bGQKKysrIGIvdGVzdHMvbWVzb24uYnVpbGQKQEAgLTUyLDYgKzUyLDcgQEAgdGVzdF9wcm9ncyA9 IFsKIAkna21zX3BsYW5lX211bHRpcGxlJywKIAkna21zX3BsYW5lX3NjYWxpbmcnLAogCSdrbXNf cHJpbWUnLAorCSdrbXNfcGxhbmVfc3RyZXNzJywKIAkna21zX3Byb3BfYmxvYicsCiAJJ2ttc19w cm9wZXJ0aWVzJywKIAkna21zX3BzcicsCi0tIAoyLjE3LjEKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0CmlndC1kZXZA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxt YW4vbGlzdGluZm8vaWd0LWRldg==