From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5640B6FF5B for ; Wed, 4 Dec 2019 09:38:51 +0000 (UTC) From: Stanislav Lisovskiy Date: Wed, 4 Dec 2019 11:35:57 +0200 Message-Id: <20191204093557.3404-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 ICB8ICAgMSArCiB0ZXN0cy9rbXNfcGxhbmVfc3RyZXNzLmMgfCA5MTYgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrCiB0ZXN0cy9tZXNvbi5idWlsZCAgICAgICAgfCAgIDEg KwogMyBmaWxlcyBjaGFuZ2VkLCA5MTggaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IHRlc3RzL2ttc19wbGFuZV9zdHJlc3MuYwoKZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLnNv dXJjZXMgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCmluZGV4IDM0M2JlMDUwLi4wNDY3YWVhZSAx MDA2NDQKLS0tIGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcworKysgYi90ZXN0cy9NYWtlZmlsZS5z b3VyY2VzCkBAIC02Niw2ICs2Niw3IEBAIFRFU1RTX3Byb2dzID0gXAogCWttc19wbGFuZV9tdWx0 aXBsZSBcCiAJa21zX3BsYW5lX3NjYWxpbmcgXAogCWttc19wcmltZSBcCisJa21zX3BsYW5lX3N0 cmVzcyBcCiAJa21zX3Byb3BfYmxvYiBcCiAJa21zX3Byb3BlcnRpZXMgXAogCWttc19wc3IgXApk aWZmIC0tZ2l0IGEvdGVzdHMva21zX3BsYW5lX3N0cmVzcy5jIGIvdGVzdHMva21zX3BsYW5lX3N0 cmVzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi5kYWNlYTAwYgotLS0g L2Rldi9udWxsCisrKyBiL3Rlc3RzL2ttc19wbGFuZV9zdHJlc3MuYwpAQCAtMCwwICsxLDkxNiBA 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 YXZlcyBpZiBtYXhpbXVtIGFtb3VudCBvZiBwbGFuZXMsICIKKwkJICAgICAiY3B1IGFuZCBncHUg dXRpbGl6YXRpb24gaXMgYWNoaWV2ZWQgaW4gb3JkZXIgdG8gcmV2ZWFsIHBvc3NpYmxlICIKKwkJ ICAgICAiYmFuZHdpZHRoL3dhdGVybWFyayBhbmQgc2ltaWxhciBwcm9ibGVtcyAiKTsKKworI2lm bmRlZiBEUk1fQ0FQX0NVUlNPUl9XSURUSAorI2RlZmluZSBEUk1fQ0FQX0NVUlNPUl9XSURUSCAw eDgKKyNlbmRpZgorI2lmbmRlZiBEUk1fQ0FQX0NVUlNPUl9IRUlHSFQKKyNkZWZpbmUgRFJNX0NB UF9DVVJTT1JfSEVJR0hUIDB4OQorI2VuZGlmCisKKyNkZWZpbmUgTl9CTElUUyAzCisKKyNkZWZp bmUgTl9GT1JNQVRTIDEKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBmb3JtYXRzW05fRk9STUFUU10g PSB7CisJRFJNX0ZPUk1BVF9YUkdCODg4OCwKKy8qCisgKiBXaXRoIHRob3NlIGVuYWJsZWQgd2ls bCB0YWtlIHNpZ25pZmljYW50bHkgbW9yZSB0aW1lLgorICovCisvLwlEUk1fRk9STUFUX1JHQjU2 NSwKKy8vCURSTV9GT1JNQVRfWFJHQjIxMDEwMTAsCit9OworCisjZGVmaW5lIE5fVElMSU5HX01F VEhPRFMgMQorc3RhdGljIGNvbnN0IHVpbnQ2NF90IHRpbGluZ3NbTl9USUxJTkdfTUVUSE9EU10g PSB7CisJRFJNX0ZPUk1BVF9NT0RfTElORUFSLAorCUk5MTVfRk9STUFUX01PRF9YX1RJTEVELAor CUk5MTVfRk9STUFUX01PRF9ZX1RJTEVELAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmZvcm1h dF9zdHIoaW50IGZvcm1hdF9pbmRleCkKK3sKKwlzd2l0Y2ggKGZvcm1hdHNbZm9ybWF0X2luZGV4 XSkgeworCWNhc2UgRFJNX0ZPUk1BVF9SR0I1NjU6CisJCXJldHVybiAicmdiNTY1IjsKKwljYXNl IERSTV9GT1JNQVRfWFJHQjg4ODg6CisJCXJldHVybiAieHJnYjg4ODgiOworCWNhc2UgRFJNX0ZP Uk1BVF9YUkdCMjEwMTAxMDoKKwkJcmV0dXJuICJ4cmdiMjEwMTAxMCI7CisJZGVmYXVsdDoKKwkJ aWd0X2Fzc2VydChmYWxzZSk7CisJfQorfQorCitzdGF0aWMgY29uc3QgY2hhciAqdGlsaW5nX3N0 cihpbnQgdGlsaW5nX2luZGV4KQoreworCXN3aXRjaCAodGlsaW5nc1t0aWxpbmdfaW5kZXhdKSB7 CisJY2FzZSBEUk1fRk9STUFUX01PRF9MSU5FQVI6CisJCXJldHVybiAidW50aWxlZCI7CisJY2Fz ZSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRDoKKwkJcmV0dXJuICJ4dGlsZWQiOworCWNhc2UgSTkx NV9GT1JNQVRfTU9EX1lfVElMRUQ6CisJCXJldHVybiAieXRpbGVkIjsKKwlkZWZhdWx0OgorCQlp Z3RfYXNzZXJ0KGZhbHNlKTsKKwl9Cit9CisKKworI2RlZmluZSBNQVhfQ09SRVMgOAorI2RlZmlu ZSBNQVhfUExBTkVTIDE2CisKK3N0cnVjdCBkYXRhOworCitzdHJ1Y3QgdGhyZWFkX2NvbnRleHQg eworCXN0cnVjdCBkYXRhICpkYXRhOworCWludCBpZDsKKwl2b2lkICpidWYxOworCXZvaWQgKmJ1 ZjI7Cit9OworCitzdHJ1Y3QgcmVjdCB7CisJaW50IHg7CisJaW50IHk7CisJaW50IHc7CisJaW50 IGg7Cit9OworCitzdHJ1Y3QgZ3B1X2NvbnRleHQgeworCXN0cnVjdCBkYXRhICpkYXRhOworCWlu dCBwaXBlOworCWludCBjb2xvcjsKKwlpbnQgbnVtX3JlY3RhbmdsZXM7CisJc3RydWN0IGlndF9m YiAqZmJfcHRyOworCXN0cnVjdCByZWN0IGJsdF9yZWN0OworCXN0cnVjdCBpbnRlbF9iYXRjaGJ1 ZmZlciAqYmF0Y2g7Cit9OworCitlbnVtIHsKKwlSVU5OSU5HLAorCVNUT1BQRUQsCisJUEFVU0VE LAorCUxBU1RfU1RBVEUgPSBQQVVTRUQKK30gdGhyZWFkX3N0YXRlOworCitzdHJ1Y3QgZGF0YSB7 CisJaW50IGRybV9mZDsKKwlpZ3RfZGlzcGxheV90IGRpc3BsYXk7CisJaW50IG51bV9wbGFuZXNb SUdUX01BWF9QSVBFU107CisJdWludDMyX3QgZm9ybWF0OworCXVpbnQ2NF90IG1vZGlmaWVyOwor CXVpbnQzMl90IGRldmlkOworCWRybV9pbnRlbF9idWZtZ3IgKmJ1Zm1ncjsKKwlkcm1Nb2RlTW9k ZUluZm8gKmxhc3RfbW9kZVtJR1RfTUFYX1BJUEVTXTsKKwlzdHJ1Y3QgaWd0X2ZiIGZiW0lHVF9N QVhfUElQRVMgKiBNQVhfUExBTkVTXTsKKwlzdHJ1Y3QgaWd0X2ZiIGN1cnNvcl9mYltJR1RfTUFY X1BJUEVTXTsKKwlwdGhyZWFkX3QgY3B1X3RocmVhZFtNQVhfQ09SRVNdOworCXB0aHJlYWRfdCBn cHVfdGhyZWFkW0lHVF9NQVhfUElQRVNdOworCWJvb2wgY3B1X3RocmVhZF9zdG9wW01BWF9DT1JF U107CisJaW50IGdwdV90aHJlYWRfc3RhdGVbSUdUX01BWF9QSVBFU107CisJc2VtX3QgZ3B1X3Ro cmVhZF9wYXVzZV9hY2tbSUdUX01BWF9QSVBFU107CisJc3RydWN0IHRocmVhZF9jb250ZXh0IGNw dV9jb250ZXh0W01BWF9DT1JFU107CisJc3RydWN0IGdwdV9jb250ZXh0IGdwdV9jb250ZXh0W0lH VF9NQVhfUElQRVNdOworCWRybU1vZGVNb2RlSW5mbyAqaGlnaGVzdF9tb2RlW0lHVF9NQVhfUElQ RVNdOworCWRybU1vZGVDb25uZWN0b3JQdHIgKmNvbm5lY3RvcnM7CisJZHJtTW9kZVJlcyAqbW9k ZV9yZXNvdXJjZXM7CisJaW50IG51bWJlcl9vZl9jb3JlczsKK307CisKKworc3RhdGljIHZvaWQg cGF1c2VfZ3B1X3RocmVhZHMoc3RydWN0IGRhdGEgKmRhdGEpOworCitzdGF0aWMgdm9pZCByZXN1 bWVfZ3B1X3RocmVhZHMoc3RydWN0IGRhdGEgKmRhdGEpOworCitzdGF0aWMgdm9pZCBzdG9wX2dw dV90aHJlYWRzKHN0cnVjdCBkYXRhICpkYXRhKTsKKworc3RhdGljIHZvaWQgc3RhcnRfZ3B1X3Ro cmVhZHMoc3RydWN0IGRhdGEgKmRhdGEpOworCitzdHJ1Y3QgYmFzZV9jcmMgeworCWJvb2wgc2V0 OworCWlndF9jcmNfdCBjcmM7Cit9OworCitpZ3RfcGlwZV9jcmNfdCAqcGlwZV9jcmM7CisKKyNk ZWZpbmUgQlVGX1NJWkUgMTI4KjEwMjQqMTAyNAorCitzdGF0aWMgdm9pZCAqY3B1X2xvYWQodm9p ZCAqZCkKK3sKKwljaGFyICpidWYxLCAqYnVmMjsKKwlzdHJ1Y3QgdGhyZWFkX2NvbnRleHQgKmNv bnRleHQgPSAoc3RydWN0IHRocmVhZF9jb250ZXh0ICopZDsKKwlzdHJ1Y3QgZGF0YSAqZGF0YSA9 IGNvbnRleHQtPmRhdGE7CisKKwlidWYxID0gY29udGV4dC0+YnVmMTsKKwlidWYyID0gY29udGV4 dC0+YnVmMjsKKworCWRhdGEtPmNwdV90aHJlYWRfc3RvcFtjb250ZXh0LT5pZF0gPSBmYWxzZTsK KworCWlndF9pbmZvKCJDUFUgdGhyZWFkIGNwdSBpZCAlZCBzdGFydFxuIiwgY29udGV4dC0+aWQp OworCisJLyogSnVzdCB0byBtYWtlIENQVSBidXN5Li4uICovCisJd2hpbGUoIWRhdGEtPmNwdV90 aHJlYWRfc3RvcFtjb250ZXh0LT5pZF0pIHsKKwkJbWVtY3B5KGJ1ZjEsIGJ1ZjIsIEJVRl9TSVpF KTsKKwkJbWVtY3B5KGJ1ZjIsIGJ1ZjEsIEJVRl9TSVpFKTsKKwl9CisKKwlpZ3RfaW5mbygiQ1BV IHRocmVhZCBjcHUgaWQgJWQgc3RvcFxuIiwgY29udGV4dC0+aWQpOworCisJcmV0dXJuIE5VTEw7 Cit9CisKKworc3RhdGljIHZvaWQgc2NyYXRjaF9idWZfaW5pdChzdHJ1Y3QgaWd0X2J1ZiAqYnVm LAorCQkJZHJtX2ludGVsX2JvICpibywgaW50IHdpZHRoLAorCQkJaW50IGhlaWdodCwgaW50IHN0 cmlkZSwgaW50IHRpbGluZywgaW50IGJwcCkKK3sKKwlidWYtPmJvID0gYm87CisJYnVmLT5zdHJp ZGUgPSBzdHJpZGU7CisJYnVmLT50aWxpbmcgPSB0aWxpbmc7CisJYnVmLT5zaXplID0gd2lkdGgg KiBoZWlnaHQgKiBicHAgLyA4OworCWJ1Zi0+YnBwID0gYnBwOworfQorCitjaGFyICpzdGF0ZV9z dHJpbmdzIFtdID0gCit7CisJIlJVTk5JTkciLAorCSJTVE9QUEVEIiwKKwkiUEFVU0VEIiwKK307 CisKK2NoYXIgKmdldF9zdGF0ZV9zdHJpbmcoaW50IHN0YXRlKQoreworCWlmIChzdGF0ZSA8IDAg fHwgc3RhdGUgPiBMQVNUX1NUQVRFKQorCQlyZXR1cm4gIj8iOworCisJcmV0dXJuIHN0YXRlX3N0 cmluZ3Nbc3RhdGVdOworfQorCitzdGF0aWMgdm9pZCAqZ3B1X2xvYWQodm9pZCAqcHRyKQorewor CXN0cnVjdCBncHVfY29udGV4dCAqY29udGV4dCA9IChzdHJ1Y3QgZ3B1X2NvbnRleHQgKilwdHI7 CisJc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCA9IE5VTEw7CisJc3RydWN0IGlndF9i dWYgZHN0OworCXN0cnVjdCBkYXRhICpkYXRhID0gY29udGV4dC0+ZGF0YTsKKwlpbnQgcGlwZSA9 IGNvbnRleHQtPnBpcGU7CisJaWd0X2ZpbGxmdW5jX3QgZ3BncHVfZmlsbCA9IE5VTEw7CisJZHJt X2ludGVsX2JvICpibyA9IE5VTEw7CisJc3RydWN0IGlndF9mYiBmYiwgKmZiX3B0ciA9IE5VTEws ICpsYXN0X2ZiX3B0ciA9IE5VTEw7CisJaW50IHJlY3RfZGl2aXNvcjsKKwlpbnQgcmVjdF93aWR0 aDsKKwlpbnQgcmVjdF9oZWlnaHQ7CisJaW50IGZyYW1lX3dpZHRoOworCWludCBmcmFtZV9oZWln aHQ7CisJaW50IGJ5dGVzX3Blcl9waXhlbDsKKwlkcm1Nb2RlTW9kZUluZm8gKm1vZGU7CisJaW50 IGZyYW1lID0gMDsKKwlpbnQgeCwgeTsKKwlpbnQgbGFzdF9zdGF0ZSA9IC0xOworCWludCByZWN0 OworCisJZ3BncHVfZmlsbCA9IGlndF9nZXRfZ3BncHVfZmlsbGZ1bmMoZGF0YS0+ZGV2aWQpOwor CisJaWd0X3JlcXVpcmVfZihncGdwdV9maWxsLAorCSAgICAgICJubyBncGdwdS1maWxsIGZ1bmN0 aW9uXG4iKTsKKworCWJhdGNoID0gY29udGV4dC0+YmF0Y2g7CisJaWd0X2Fzc2VydChiYXRjaCk7 CisKKwltb2RlID0gZGF0YS0+aGlnaGVzdF9tb2RlW3BpcGVdOworCWlmICghbW9kZSkKKwkJcmV0 dXJuOworCisJaWd0X2NyZWF0ZV9jb2xvcl9wYXR0ZXJuX2ZiKGRhdGEtPmRybV9mZCwgbW9kZS0+ aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5LAorCQkgICAgZGF0YS0+Zm9ybWF0LAorCQkgICAgZGF0 YS0+bW9kaWZpZXIsCisJCSAgICAwLjAsIDEuMCwgMC4wLCAmZmIpOworCisJaWd0X2luZm8oIkdQ VSB0aHJlYWQgcGlwZSAlZCBzdGFydFxuIiwgcGlwZSk7CisJd2hpbGUgKGRhdGEtPmdwdV90aHJl YWRfc3RhdGVbcGlwZV0gIT0gU1RPUFBFRCkgeworCQlpZiAobGFzdF9zdGF0ZSAhPSBkYXRhLT5n cHVfdGhyZWFkX3N0YXRlW3BpcGVdKSB7CisJCQlsYXN0X3N0YXRlID0gZGF0YS0+Z3B1X3RocmVh ZF9zdGF0ZVtwaXBlXTsKKwkJCXNlbV9wb3N0KCZkYXRhLT5ncHVfdGhyZWFkX3BhdXNlX2Fja1tw aXBlXSk7CisJCX0KKwkJaWYgKGRhdGEtPmdwdV90aHJlYWRfc3RhdGVbcGlwZV0gPT0gUEFVU0VE KSB7CisJCQlzbGVlcCgwKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCFjb250ZXh0LT5m Yl9wdHIpIHsKKwkJCWZiX3B0ciA9ICZmYjsKKwkJfQorCQllbHNlIHsKKwkJCWZiX3B0ciA9IGNv bnRleHQtPmZiX3B0cjsKKwkJfQorCisJCWlmIChsYXN0X2ZiX3B0ciAhPSBmYl9wdHIpIHsKKwkJ CWZyYW1lX3dpZHRoID0gZmJfcHRyLT53aWR0aDsKKwkJCWZyYW1lX2hlaWdodCA9IGZiX3B0ci0+ aGVpZ2h0OworCQkJYnl0ZXNfcGVyX3BpeGVsID0gZmJfcHRyLT5wbGFuZV9icHBbMF0gLyA4Owor CQkJYm8gPSBnZW1faGFuZGxlX3RvX2xpYmRybV9ibyhkYXRhLT5idWZtZ3IsIGRhdGEtPmRybV9m ZCwgIiIsCisJCQkJZmJfcHRyLT5nZW1faGFuZGxlKTsKKwkJCWlndF9hc3NlcnQoYm8pOworCisJ CQlzY3JhdGNoX2J1Zl9pbml0KCZkc3QsIGJvLCBmcmFtZV93aWR0aCwgZnJhbWVfaGVpZ2h0LAor CQkJCWZiX3B0ci0+c3RyaWRlc1swXSwgZmJfcHRyLT5tb2RpZmllciwKKwkJCQlmYl9wdHItPnBs YW5lX2JwcFswXSk7CisJCX0KKwkJbGFzdF9mYl9wdHIgPSBmYl9wdHI7CisKKwkJLyogRmlsbCB0 aGUgZnJhbWVidWZmZXIgdXNpbmcgc2hhZGVyICovCisJCXggPSAwOworCQl5ID0gZnJhbWVfaGVp Z2h0IC8gNDsKKworCQlncGdwdV9maWxsKGJhdGNoLAorCQkJICAgJmRzdCwgeCwgeSwgKGZyYW1l X3dpZHRoICogYnl0ZXNfcGVyX3BpeGVsKSwKKwkJCSAgIGZyYW1lX2hlaWdodCAvIDIsCisJCQkg ICBjb250ZXh0LT5jb2xvcik7CisKKwkJcmVjdCA9IDA7CisKKwkJd2hpbGUgKHJlY3QgPCBjb250 ZXh0LT5udW1fcmVjdGFuZ2xlcykgeworCQkJLyogZGl2aWRlIGF0IGxlYXN0IGJ5IDIgYW5kIHVw IHRvIDggKi8KKwkJCWludCB4X3JhbmQsIHlfcmFuZDsKKwkJCXJlY3RfZGl2aXNvciA9IDEgPDwg KGhhcnNfcGV0cnVza2FfZjU0XzFfcmFuZG9tX3Vuc2FmZV9tYXgoMykgKyAxKTsKKworCQkJcmVj dF93aWR0aCA9IGZyYW1lX3dpZHRoIC8gcmVjdF9kaXZpc29yOworCQkJcmVjdF9oZWlnaHQgPSBm cmFtZV9oZWlnaHQgLyByZWN0X2Rpdmlzb3I7CisKKwkJCXhfcmFuZCA9IGhhcnNfcGV0cnVza2Ff ZjU0XzFfcmFuZG9tX3Vuc2FmZV9tYXgoZnJhbWVfd2lkdGggLSByZWN0X3dpZHRoKTsKKwkJCXlf cmFuZCA9IGhhcnNfcGV0cnVza2FfZjU0XzFfcmFuZG9tX3Vuc2FmZV9tYXgoZnJhbWVfaGVpZ2h0 LzIgLSByZWN0X2hlaWdodCk7CisKKwkJCWNvbnRleHQtPmJsdF9yZWN0LnggPSB4ICsgeF9yYW5k OworCQkJY29udGV4dC0+Ymx0X3JlY3QueSA9IHkgKyB5X3JhbmQ7CisKKwkJCS8qIEZpbGwgcmFu ZG9tbHkgc2l6ZWQgYW5kIHBvc2l0aW9uZWQgcmVjdGFuZ2xlcyAqLworCQkJZ3BncHVfZmlsbChi YXRjaCwKKwkJCSAgICZkc3QsIGNvbnRleHQtPmJsdF9yZWN0LngsIGNvbnRleHQtPmJsdF9yZWN0 LnksCisJCQkgICAoKGNvbnRleHQtPmJsdF9yZWN0LnggKyByZWN0X3dpZHRoKSAqIGJ5dGVzX3Bl cl9waXhlbCksCisJCQkgICBjb250ZXh0LT5ibHRfcmVjdC55ICsgcmVjdF9oZWlnaHQsCisJCQkg ICBjb250ZXh0LT5jb2xvciArIDB4ODApOworCisJCQljb250ZXh0LT5jb2xvciArPSA0OworCisJ CQkrK3JlY3Q7CisJCX0KKwkJZnJhbWUrKzsKKwl9CisKKwlkcm1faW50ZWxfYm9fdW5yZWZlcmVu Y2UoYm8pOworCisJaWd0X3JlbW92ZV9mYihkYXRhLT5kaXNwbGF5LmRybV9mZCwgJmZiKTsKKwor CWlndF9pbmZvKCJHUFUgdGhyZWFkIHBpcGUgJWQgc3RvcC4gRnJhbWVzIHJlbmRlcmVkOiAlZFxu IiwgcGlwZSwgZnJhbWUpOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWlu dDMyX3QgcGlwZV9zZWxlY3QoZW51bSBwaXBlIHBpcGUpCit7CisJaWYgKHBpcGUgPiAxKQorCQly ZXR1cm4gcGlwZSA8PCBEUk1fVkJMQU5LX0hJR0hfQ1JUQ19TSElGVDsKKwllbHNlIGlmIChwaXBl ID4gMCkKKwkJcmV0dXJuIERSTV9WQkxBTktfU0VDT05EQVJZOworCWVsc2UKKwkJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBnZXRfdmJsYW5rKGludCBmZCwgZW51bSBwaXBlIHBpcGUs IHVuc2lnbmVkIGZsYWdzKQoreworCXVuaW9uIGRybV93YWl0X3ZibGFuayB2Ymw7CisKKwltZW1z ZXQoJnZibCwgMCwgc2l6ZW9mKHZibCkpOworCXZibC5yZXF1ZXN0LnR5cGUgPSBEUk1fVkJMQU5L X1JFTEFUSVZFIHwgcGlwZV9zZWxlY3QocGlwZSkgfCBmbGFnczsKKwlpZiAoZHJtSW9jdGwoZmQs IERSTV9JT0NUTF9XQUlUX1ZCTEFOSywgJnZibCkpCisJCXJldHVybiAwOworCisJcmV0dXJuIHZi bC5yZXBseS5zZXF1ZW5jZTsKK30KKworCitzdGF0aWMgaW50IHBpcGVfc3RyZXNzKHN0cnVjdCBk YXRhICpkYXRhLCBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwKKwkJICAgICAgIGVudW0gcGlwZSBwaXBl LCBkcm1Nb2RlTW9kZUluZm8gKm1vZGUpCit7CisJaWd0X3BsYW5lX3QgKnBsYW5lOworCWludCBp OworCWludCByZXQ7CisJaW50IGxhc3RfcGxhbmU7CisJYm9vbCBuZXdfbW9kZSA9IGZhbHNlOwor CXVpbnQ2NF90IGN1cnNvcl93aWR0aCwgY3Vyc29yX2hlaWdodDsKKworCWRvX29yX2RpZShkcm1H ZXRDYXAoZGF0YS0+ZHJtX2ZkLCBEUk1fQ0FQX0NVUlNPUl9XSURUSCwgJmN1cnNvcl93aWR0aCkp OworCWRvX29yX2RpZShkcm1HZXRDYXAoZGF0YS0+ZHJtX2ZkLCBEUk1fQ0FQX0NVUlNPUl9IRUlH SFQsICZjdXJzb3JfaGVpZ2h0KSk7CisKKwlpZiAoZGF0YS0+bGFzdF9tb2RlW3BpcGVdICE9IG1v ZGUpIHsKKwkJaWd0X291dHB1dF9vdmVycmlkZV9tb2RlKG91dHB1dCwgbW9kZSk7CisJCWlndF9v dXRwdXRfc2V0X3BpcGUob3V0cHV0LCBwaXBlKTsKKworCQlyZXQgPSBpZ3RfZGlzcGxheV90cnlf Y29tbWl0X2F0b21pYygmZGF0YS0+ZGlzcGxheSwKKwkJCQlEUk1fTU9ERV9BVE9NSUNfVEVTVF9P TkxZIHwKKwkJCQlEUk1fTU9ERV9BVE9NSUNfQUxMT1dfTU9ERVNFVCwgTlVMTCk7CisJCWlmIChy ZXQpIHsKKwkJCWlndF93YXJuKCJDb3VsZCBub3QgY29tbWl0IG1vZGU6IFxuIik7CisJCQlrbXN0 ZXN0X2R1bXBfbW9kZShtb2RlKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlpZ3RfZGlzcGxh eV9jb21taXQyKCZkYXRhLT5kaXNwbGF5LCBDT01NSVRfQVRPTUlDKTsKKwkJZGF0YS0+bGFzdF9t b2RlW3BpcGVdID0gbW9kZTsKKwkJbmV3X21vZGUgPSB0cnVlOworCX0KKworCS8qCisJICogTG9v a3MgbGlrZSB3ZSBjYW4ndCBoYXZlIHBsYW5lcyBvbiB0aGF0IHBpcGUgYXQgYWxsCisJICovCisJ aWYgKCFkYXRhLT5udW1fcGxhbmVzW3BpcGVdKQorCQlyZXR1cm4gMDsKKworCW1vZGUgPSBpZ3Rf b3V0cHV0X2dldF9tb2RlKG91dHB1dCk7CisKKwlpZiAobmV3X21vZGUpIHsKKwkJaSA9IDA7CisJ CWZvcl9lYWNoX3BsYW5lX29uX3BpcGUoJmRhdGEtPmRpc3BsYXksIHBpcGUsIHBsYW5lKSB7CisJ CQlpbnQgcGxhbmVfd2lkdGgsIHBsYW5lX2hlaWdodDsKKwkJCWlmIChwbGFuZS0+dHlwZSA9PSBE Uk1fUExBTkVfVFlQRV9DVVJTT1IpIHsKKwkJCQlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCAmZGF0 YS0+Y3Vyc29yX2ZiW3BpcGVdKTsKKworCQkJCWlndF9mYl9zZXRfc2l6ZSgmZGF0YS0+Y3Vyc29y X2ZiW3BpcGVdLAorCQkJCQlwbGFuZSwgY3Vyc29yX3dpZHRoLCBjdXJzb3JfaGVpZ2h0KTsKKwor CQkJCWlndF9wbGFuZV9zZXRfc2l6ZShwbGFuZSwgY3Vyc29yX3dpZHRoLCBjdXJzb3JfaGVpZ2h0 KTsKKwkJCQlwbGFuZV93aWR0aCA9IGN1cnNvcl93aWR0aDsKKwkJCQlwbGFuZV9oZWlnaHQgPSBj dXJzb3JfaGVpZ2h0OworCQkJfSBlbHNlIHsKKwkJCQlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCAm ZGF0YS0+ZmJbcGlwZSAqIE1BWF9QTEFORVMgKyBpXSk7CisJCQkJaWd0X3BsYW5lX3NldF9wb3Np dGlvbihwbGFuZSwgMCwgMCk7CisKKwkJCQlpZ3RfZmJfc2V0X3NpemUoJmRhdGEtPmZiW3BpcGUg KiBNQVhfUExBTkVTICsgaV0sCisJCQkJCXBsYW5lLCBtb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRp c3BsYXkpOworCisJCQkJaWd0X3BsYW5lX3NldF9zaXplKHBsYW5lLCBtb2RlLT5oZGlzcGxheSwg bW9kZS0+dmRpc3BsYXkpOworCQkJCXBsYW5lX3dpZHRoID0gbW9kZS0+aGRpc3BsYXk7CisJCQkJ cGxhbmVfaGVpZ2h0ID0gbW9kZS0+dmRpc3BsYXk7CisJCQl9CisKKwkJCXJldCA9IGlndF9kaXNw bGF5X3RyeV9jb21taXRfYXRvbWljKCZkYXRhLT5kaXNwbGF5LAorCQkJCURSTV9NT0RFX0FUT01J Q19URVNUX09OTFkgfCBEUk1fTU9ERV9BVE9NSUNfQUxMT1dfTU9ERVNFVCwgTlVMTCk7CisKKwkJ CXdoaWxlIChyZXQpIHsKKwkJCQlpZiAocGxhbmVfd2lkdGggPD0gY3Vyc29yX3dpZHRoIHx8IHBs YW5lX2hlaWdodCA8PSBjdXJzb3JfaGVpZ2h0KQorCQkJCQlicmVhazsKKwkJCQlwbGFuZV93aWR0 aCAvPSAyOworCQkJCXBsYW5lX2hlaWdodCAvPSAyOworCQkJCWlndF9wbGFuZV9zZXRfc2l6ZShw bGFuZSwgcGxhbmVfd2lkdGgsIHBsYW5lX2hlaWdodCk7CisKKwkJCQlpZ3RfaW5mbygiUmVkdWNl ZCBwbGFuZSAlZCBzaXplIHRvICVkeCVkXG4iLAorCQkJCQlwbGFuZS0+aW5kZXgsIHBsYW5lX3dp ZHRoLCBwbGFuZV9oZWlnaHQpOworCisJCQkJcmV0ID0gaWd0X2Rpc3BsYXlfdHJ5X2NvbW1pdF9h dG9taWMoJmRhdGEtPmRpc3BsYXksCisJCQkJCURSTV9NT0RFX0FUT01JQ19URVNUX09OTFkgfCBE Uk1fTU9ERV9BVE9NSUNfQUxMT1dfTU9ERVNFVCwgTlVMTCk7CisJCQl9CisJCQlpZiAocmV0KSB7 CisJCQkJaWd0X2luZm8oIlBsYW5lICVkIHBpcGUgJWQgdHJ5IGNvbW1pdCBmYWlsZWQsIGV4aXRp bmdcbiIsIGksIHBpcGUpOworCQkJCWRhdGEtPm51bV9wbGFuZXNbcGlwZV0gPSBpOworCQkJCWln dF9pbmZvKCJNYXggbnVtIHBsYW5lcyBmb3IgcGlwZSAlZCBzZXQgdG8gJWRcbiIsIHBpcGUsIGkp OworCQkJCS8qCisJCQkJICogV2UgaGF2ZSBub3cgZGV0ZXJtaW5lZCBtYXggYW1vdW50IG9mIGZ1 bGwgc2l6ZWQgcGxhbmVzLCB3ZSB3aWxsIGp1c3QKKwkJCQkgKiBrZWVwIGl0IGluIG1pbmQgYW5k IGJlIHNtYXJ0ZXIgbmV4dCB0aW1lLiBBbHNvIGxldHMgcmVtb3ZlIHVubmVlZGVkIGZicy4KKwkJ CQkgKiBEb24ndCBkZXN0cm95IGN1cnNvcl9mYiBhcyB3aWxsIHRha2UgY2FyZSBhYm91dCBpdCBh dCB0aGUgZW5kLgorCQkJCSAqLworCQkJCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsIE5VTEwpOwor CQkJCXdoaWxlIChpIDwgTUFYX1BMQU5FUykgeworCQkJCQlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmRp c3BsYXkuZHJtX2ZkLCAmZGF0YS0+ZmJbcGlwZSAqIE1BWF9QTEFORVMgKyBpXSk7CisJCQkJCWRh dGEtPmZiW3BpcGUgKiBNQVhfUExBTkVTICsgaV0uZmJfaWQgPSAwOworCQkJCQlpKys7CisJCQkJ fQorCQkJCWkgPSBkYXRhLT5udW1fcGxhbmVzW3BpcGVdOworCQkJfQorCQkJaWYgKCsraSA+PSBk YXRhLT5udW1fcGxhbmVzW3BpcGVdKQorCQkJCWJyZWFrOworCQl9CisJCWlndF9kaXNwbGF5X2Nv bW1pdDIoJmRhdGEtPmRpc3BsYXksIENPTU1JVF9BVE9NSUMpOworCX0KKworCXJldHVybiAwOwor fQorCisKK3N0YXRpYyBkcm1Nb2RlTW9kZUluZm8gKiBmaW5kX2hpZ2hlc3RfbW9kZShkcm1Nb2Rl Q29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJZHJtTW9kZU1vZGVJbmZvICpoaWdoZXN0X21vZGUg PSBOVUxMOworCWludCBqOworCisJZm9yIChqID0gMDsgaiA8IGNvbm5lY3Rvci0+Y291bnRfbW9k ZXM7IGorKykgeworCQlpZiAoIWhpZ2hlc3RfbW9kZSkgeworCQkJaGlnaGVzdF9tb2RlID0gJmNv bm5lY3Rvci0+bW9kZXNbal07CisJCX0KKwkJZWxzZSBpZiAoY29ubmVjdG9yLT5tb2Rlc1tqXS52 ZGlzcGxheSAmJiBjb25uZWN0b3ItPm1vZGVzW2pdLmhkaXNwbGF5KSB7CisJCQlpZiAoaGlnaGVz dF9tb2RlLT5oZGlzcGxheSA8IGNvbm5lY3Rvci0+bW9kZXNbal0uaGRpc3BsYXkpCisJCQkJaGln aGVzdF9tb2RlID0gJmNvbm5lY3Rvci0+bW9kZXNbal07CisJCQl9CisJfQorCisJcmV0dXJuIGhp Z2hlc3RfbW9kZTsKK30KKwordHlwZWRlZiBkcm1Nb2RlQ29ubmVjdG9yICogZHJtTW9kZUNvbm5l Y3RvclB0cjsKKworc3RhdGljIHZvaWQgZmlsbF9jb25uZWN0b3JfdG9fcGlwZV9hcnJheShzdHJ1 Y3QgZGF0YSAqZGF0YSwKKwkJCQkJIGRybU1vZGVSZXMgKm1vZGVfcmVzb3VyY2VzLAorCQkJCQkg ZHJtTW9kZUNvbm5lY3RvclB0ciAqY29ubmVjdG9ycykKK3sKKwlpbnQgcGlwZSA9IDA7CisJaWd0 X291dHB1dF90ICpvdXRwdXQ7CisJaW50IGk7CisKKwltZW1zZXQoY29ubmVjdG9ycywgMCwgc2l6 ZW9mKGRybU1vZGVDb25uZWN0b3JQdHIpICogbW9kZV9yZXNvdXJjZXMtPmNvdW50X2Nvbm5lY3Rv cnMpOworCisJaWd0X2luZm8oIkdvdCAlZCBjb25uZWN0b3JzXG4iLCBtb2RlX3Jlc291cmNlcy0+ Y291bnRfY29ubmVjdG9ycyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbW9kZV9yZXNvdXJjZXMtPmNv dW50X2Nvbm5lY3RvcnM7IGkrKykgeworCQlkcm1Nb2RlQ29ubmVjdG9yICpjb25uZWN0b3I7CisK KwkJY29ubmVjdG9yID0gZHJtTW9kZUdldENvbm5lY3RvcihkYXRhLT5kcm1fZmQsCisJCQkgICAg ICAgbW9kZV9yZXNvdXJjZXMtPmNvbm5lY3RvcnNbaV0pOworCisJCWlmICghY29ubmVjdG9yKSB7 CisJCQlpZ3Rfd2FybigiY291bGQgbm90IGdldCBjb25uZWN0b3IgJWk6ICVzXG4iLAorCQkJCW1v ZGVfcmVzb3VyY2VzLT5jb25uZWN0b3JzW2ldLCBzdHJlcnJvcihlcnJubykpOworCQkJY29udGlu dWU7CisJCX0KKworCQlpZiAoY29ubmVjdG9yLT5jb25uZWN0aW9uID09IERSTV9NT0RFX0NPTk5F Q1RFRCkgeworCQkJaWd0X2luZm8oIkNvbm5lY3RvciAlZCBjb25uZWN0ZWQgdG8gcGlwZSAlZFxu IiwgaSwgcGlwZSk7CisJCQljb25uZWN0b3JzW3BpcGVdID0gKGRybU1vZGVDb25uZWN0b3JQdHIp Y29ubmVjdG9yOworCQkJKytwaXBlOworCQkJaWYgKHBpcGUgPT0gSUdUX01BWF9QSVBFUykKKwkJ CQlicmVhazsKKwkJfQorCQllbHNlIHsKKwkJCWlndF9pbmZvKCJDb25uZWN0b3IgJWQgY29ubmVj dGlvbiBzdGF0dXMgJWRcbiIsCisJCQkJaSwgY29ubmVjdG9yLT5jb25uZWN0aW9uKTsKKwkJCWRy bU1vZGVGcmVlQ29ubmVjdG9yKGNvbm5lY3Rvcik7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lk IHJlbGVhc2VfY29ubmVjdG9ycyhkcm1Nb2RlQ29ubmVjdG9yUHRyICpjb25uZWN0b3JzKQorewor CWludCBpOworCWZvciAoaSA9IDA7IGkgPCBJR1RfTUFYX1BJUEVTOyBpKyspIHsKKwkJaWYgKGNv bm5lY3RvcnNbaV0pCisJCQlkcm1Nb2RlRnJlZUNvbm5lY3Rvcihjb25uZWN0b3JzW2ldKTsKKwl9 CisJZnJlZShjb25uZWN0b3JzKTsKK30KKworI2RlZmluZSBNSU5fRFVSQVRJT05fU0VDIDEwLjAw CisjZGVmaW5lIE1JTl9JVEVSQVRJT05TIDIwCisKK3N0YXRpYyB2b2lkIHN0cmVzcyhzdHJ1Y3Qg ZGF0YSAqZGF0YSkKK3sKKwlzdHJ1Y3QgdGltZXNwZWMgc3RhcnQsIGVuZDsKKwlpZ3Rfb3V0cHV0 X3QgKm91dHB1dDsKKwlpbnQgcmV0OworCWludCBwaXBlOworCWludCBpdGVyYXRpb25zID0gMDsK Kwlib29sIG5lZWRfY29udGludWU7CisJaWd0X2NyY190IGNyYywgY3JjMjsKKworCWlndF9nZXR0 aW1lKCZzdGFydCk7CisKKwlkbyB7CisJCS8qCisJCSAqIEluY3JlbWVudCBwaXBlIG9ubHkgZm9y IGNvbm5lY3RlZCBvdXRwdXRzLAorCQkgKiBmb3IgZWFjaCBjb25uZWN0ZWQgb3V0cHV0IHdlIHNo b3VsZCBhc3NpZ24gYQorCQkgKiBkaWZmZXJlbnQgcGlwZS4KKwkJICovCisJCWZvciAocGlwZSA9 IDA7IHBpcGUgPCBJR1RfTUFYX1BJUEVTOyBwaXBlKyspIHsKKworCQkJaWYgKCFkYXRhLT5oaWdo ZXN0X21vZGVbcGlwZV0pCisJCQkJY29udGludWU7CisKKwkJCWlndF9hc3NlcnRfZihkYXRhLT5k aXNwbGF5LnBpcGVzW3BpcGVdLm5fcGxhbmVzIDwgTUFYX1BMQU5FUywKKwkJCQkiQ3VycmVudGx5 IHdlIGRvbid0IHN1cHBvcnQgbW9yZSB0aGFuICVkIHBsYW5lcyEiLCBNQVhfUExBTkVTKTsKKwor CQkJcGlwZV9jcmMgPSBpZ3RfcGlwZV9jcmNfbmV3KGRhdGEtPmRybV9mZCwgcGlwZSwKKwkJCQlJ TlRFTF9QSVBFX0NSQ19TT1VSQ0VfQVVUTyk7CisKKwkJCW91dHB1dCA9IGlndF9vdXRwdXRfZnJv bV9jb25uZWN0b3IoJmRhdGEtPmRpc3BsYXksIGRhdGEtPmNvbm5lY3RvcnNbcGlwZV0pOworCisJ CQlpZiAob3V0cHV0KQorCQkJCXJldCA9IHBpcGVfc3RyZXNzKGRhdGEsIG91dHB1dCwgcGlwZSwg ZGF0YS0+aGlnaGVzdF9tb2RlW3BpcGVdKTsKKworCQkJaWYgKCEoKGludClpZ3RfdGltZV9lbGFw c2VkKCZzdGFydCwgJmVuZCkgJSAoKGludClNSU5fRFVSQVRJT05fU0VDLzQpKSkgeworCisJCQkJ Z2V0X3ZibGFuayhkYXRhLT5kaXNwbGF5LmRybV9mZCwgcGlwZSwgRFJNX1ZCTEFOS19ORVhUT05N SVNTKTsKKworCQkJCWlndF9waXBlX2NyY19jb2xsZWN0X2NyYyhwaXBlX2NyYywgJmNyYyk7CisK KwkJCQlnZXRfdmJsYW5rKGRhdGEtPmRpc3BsYXkuZHJtX2ZkLCBwaXBlLCBEUk1fVkJMQU5LX05F WFRPTk1JU1MpOworCisJCQkJaWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKHBpcGVfY3JjLCAmY3Jj Mik7CisKKwkJCQlpZ3RfYXNzZXJ0X2NyY19lcXVhbCgmY3JjLCAmY3JjMik7CisJCQl9CisKKwkJ CWlndF9waXBlX2NyY19mcmVlKHBpcGVfY3JjKTsKKworCQkJaWYgKHJldCkKKwkJCQlicmVhazsK KwkJfQorCQlpZ3RfZ2V0dGltZSgmZW5kKTsKKwkJaXRlcmF0aW9ucysrOworCQluZWVkX2NvbnRp bnVlID0gaWd0X3RpbWVfZWxhcHNlZCgmc3RhcnQsICZlbmQpIDwgTUlOX0RVUkFUSU9OX1NFQzsK Kwl9IHdoaWxlICgobmVlZF9jb250aW51ZSB8fCBpdGVyYXRpb25zIDwgTUlOX0lURVJBVElPTlMp KTsKKworCit9CisKK3N0YXRpYyB2b2lkIHN0YXJ0X2dwdV90aHJlYWRzKHN0cnVjdCBkYXRhICpk YXRhKQoreworCWludCBpID0gMDsKKwlpZ3Rfb3V0cHV0X3QgKm91dHB1dDsKKworCWlmICghZGF0 YS0+ZGV2aWQpIHsKKwkJZGF0YS0+ZGV2aWQgPSBpbnRlbF9nZXRfZHJtX2RldmlkKGRhdGEtPmRy bV9mZCk7CisJCWlndF9yZXF1aXJlX2dlbShkYXRhLT5kcm1fZmQpOworCisJCWRhdGEtPmJ1Zm1n ciA9IGRybV9pbnRlbF9idWZtZ3JfZ2VtX2luaXQoZGF0YS0+ZHJtX2ZkLCA0MDk2KTsKKwkJaWd0 X2Fzc2VydChkYXRhLT5idWZtZ3IpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBJR1RfTUFYX1BJ UEVTOyBpKyspIHsKKwkJaWYgKCFkYXRhLT5oaWdoZXN0X21vZGVbaV0pCisJCQljb250aW51ZTsK KwkJZGF0YS0+Z3B1X2NvbnRleHRbaV0uZGF0YSA9IGRhdGE7CisJCWRhdGEtPmdwdV9jb250ZXh0 W2ldLnBpcGUgPSBpOworCQlkYXRhLT5ncHVfY29udGV4dFtpXS5mYl9wdHIgPSBOVUxMOworCQlk YXRhLT5ncHVfY29udGV4dFtpXS5ibHRfcmVjdC54ID0gMDsKKwkJZGF0YS0+Z3B1X2NvbnRleHRb aV0uYmx0X3JlY3QueSA9IDA7CisJCWRhdGEtPmdwdV9jb250ZXh0W2ldLmJsdF9yZWN0LncgPSAw OworCQlkYXRhLT5ncHVfY29udGV4dFtpXS5ibHRfcmVjdC5oID0gMDsKKwkJZGF0YS0+Z3B1X2Nv bnRleHRbaV0ubnVtX3JlY3RhbmdsZXMgPSBOX0JMSVRTOworCQlkYXRhLT5ncHVfdGhyZWFkX3N0 YXRlW2ldID0gUlVOTklORzsKKwkJaWd0X2luZm8oIlN0YXJ0aW5nIEdQVSB0aHJlYWQgJWRcbiIs IGkpOworCQlkYXRhLT5ncHVfY29udGV4dFtpXS5iYXRjaCA9IGludGVsX2JhdGNoYnVmZmVyX2Fs bG9jKGRhdGEtPmJ1Zm1nciwgZGF0YS0+ZGV2aWQpOworCQlwdGhyZWFkX2NyZWF0ZSgmZGF0YS0+ Z3B1X3RocmVhZFtpXSwgTlVMTCwgZ3B1X2xvYWQsICh2b2lkKikmZGF0YS0+Z3B1X2NvbnRleHRb aV0pOworCQlzZW1fd2FpdCgmZGF0YS0+Z3B1X3RocmVhZF9wYXVzZV9hY2tbaV0pOworCQlpZ3Rf aW5mbygiR1BVIHRocmVhZCAlZCBzdGFydGVkXG4iLCBpKTsKKwl9Cit9CisKKworc3RhdGljIHZv aWQgcGF1c2VfZ3B1X3RocmVhZHMoc3RydWN0IGRhdGEgKmRhdGEpCit7CisJaW50IGkgPSAwOwor CWlndF9vdXRwdXRfdCAqb3V0cHV0OworCWZvciAoaSA9IDA7IGkgPCBJR1RfTUFYX1BJUEVTOyBp KyspIHsKKwkJaWYgKCFkYXRhLT5oaWdoZXN0X21vZGVbaV0pCisJCQljb250aW51ZTsKKwkJaWYg KGRhdGEtPmdwdV90aHJlYWRfc3RhdGVbaV0gIT0gUlVOTklORykgeworCQkJKytpOworCQkJY29u dGludWU7CisJCX0KKwkJaWd0X2luZm8oIlBhdXNpbmcgR1BVIHRocmVhZCAlZCBcbiIsIGkpOwor CQlkYXRhLT5ncHVfdGhyZWFkX3N0YXRlW2ldID0gUEFVU0VEOworCQlzZW1fd2FpdCgmZGF0YS0+ Z3B1X3RocmVhZF9wYXVzZV9hY2tbaV0pOworCQlpZ3RfaW5mbygiR1BVIHRocmVhZCAlZCBwYXVz ZWRcbiIsIGkpOworCX0KK30KKworc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXygob3B0aW1pemUo Ik8wIikpKSByZXN1bWVfZ3B1X3RocmVhZHMoc3RydWN0IGRhdGEgKmRhdGEpCit7CisJaW50IGkg PSAwOworCWlndF9vdXRwdXRfdCAqb3V0cHV0OworCWZvciAoaSA9IDA7IGkgPCBJR1RfTUFYX1BJ UEVTOyBpKyspIHsKKwkJaWYgKCFkYXRhLT5oaWdoZXN0X21vZGVbaV0pCisJCQljb250aW51ZTsK KwkJaWYgKGRhdGEtPmdwdV90aHJlYWRfc3RhdGVbaV0gIT0gUEFVU0VEKSB7CisJCQkrK2k7CisJ CQljb250aW51ZTsKKwkJfQorCQlpZ3RfaW5mbygiUmVzdW1pbmcgR1BVIHRocmVhZCAlZFxuIiwg aSk7CisJCWRhdGEtPmdwdV90aHJlYWRfc3RhdGVbaV0gPSBSVU5OSU5HOworCQlzZW1fd2FpdCgm ZGF0YS0+Z3B1X3RocmVhZF9wYXVzZV9hY2tbaV0pOworCQlpZ3RfaW5mbygiR1BVIHRocmVhZCAl ZCByZXN1bWVkXG4iLCBpKTsKKwl9Cit9CisKKworc3RhdGljIHZvaWQgc3RvcF9ncHVfdGhyZWFk cyhzdHJ1Y3QgZGF0YSAqZGF0YSkKK3sKKwlpbnQgaSA9IDA7CisJaWd0X291dHB1dF90ICpvdXRw dXQ7CisJZm9yIChpID0gMDsgaSA8IElHVF9NQVhfUElQRVM7IGkrKykgeworCQlpZiAoIWRhdGEt PmhpZ2hlc3RfbW9kZVtpXSkKKwkJCWNvbnRpbnVlOworCQlpZ3RfaW5mbygiU3RvcGluZyBHUFUg dGhyZWFkICVkXG4iLCBpKTsKKwkJZGF0YS0+Z3B1X3RocmVhZF9zdGF0ZVtpXSA9IFNUT1BQRUQ7 CisJCXB0aHJlYWRfam9pbihkYXRhLT5ncHVfdGhyZWFkW2ldLCBOVUxMKTsKKwkJZGF0YS0+Z3B1 X2NvbnRleHRbaV0uZmJfcHRyID0gTlVMTDsKKwkJaW50ZWxfYmF0Y2hidWZmZXJfZnJlZShkYXRh LT5ncHVfY29udGV4dFtpXS5iYXRjaCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzdGFydF9jcHVf dGhyZWFkcyhzdHJ1Y3QgZGF0YSAqZGF0YSkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwg ZGF0YS0+bnVtYmVyX29mX2NvcmVzO2krKykgeworCQlkYXRhLT5jcHVfY29udGV4dFtpXS5idWYx ID0gbWFsbG9jKEJVRl9TSVpFKTsKKwkJZGF0YS0+Y3B1X2NvbnRleHRbaV0uYnVmMiA9IG1hbGxv YyhCVUZfU0laRSk7CisJCWRhdGEtPmNwdV9jb250ZXh0W2ldLmlkID0gaTsKKwkJZGF0YS0+Y3B1 X2NvbnRleHRbaV0uZGF0YSA9IGRhdGE7CisJCXB0aHJlYWRfY3JlYXRlKCZkYXRhLT5jcHVfdGhy ZWFkW2ldLCBOVUxMLCBjcHVfbG9hZCwgKHZvaWQqKSZkYXRhLT5jcHVfY29udGV4dFtpXSk7CisJ fQorfQorCitzdGF0aWMgdm9pZCBzdG9wX2NwdV90aHJlYWRzKHN0cnVjdCBkYXRhICpkYXRhKQor eworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5udW1iZXJfb2ZfY29yZXM7aSsrKSB7 CisJCWRhdGEtPmNwdV90aHJlYWRfc3RvcFtpXSA9IHRydWU7CisJCXB0aHJlYWRfam9pbihkYXRh LT5jcHVfdGhyZWFkW2ldLCBOVUxMKTsKKwkJZnJlZShkYXRhLT5jcHVfY29udGV4dFtpXS5idWYx KTsKKwkJZnJlZShkYXRhLT5jcHVfY29udGV4dFtpXS5idWYyKTsKKwl9Cit9CisKK3N0YXRpYyB2 b2lkIGNyZWF0ZV9mcmFtZWJ1ZmZlcnMoc3RydWN0IGRhdGEgKmRhdGEpCit7CisJaW50IGksIGo7 CisJdWludDY0X3QgY3Vyc29yX3dpZHRoLCBjdXJzb3JfaGVpZ2h0OworCWlndF9vdXRwdXRfdCAq b3V0cHV0OworCisJZG9fb3JfZGllKGRybUdldENhcChkYXRhLT5kcm1fZmQsIERSTV9DQVBfQ1VS U09SX1dJRFRILCAmY3Vyc29yX3dpZHRoKSk7CisJZG9fb3JfZGllKGRybUdldENhcChkYXRhLT5k cm1fZmQsIERSTV9DQVBfQ1VSU09SX0hFSUdIVCwgJmN1cnNvcl9oZWlnaHQpKTsKKworCWkgPSAw OworCWZvciAoaSA9IDA7IGkgPCBJR1RfTUFYX1BJUEVTOyBpKyspIHsKKwkJaWYgKCFkYXRhLT5o aWdoZXN0X21vZGVbaV0pCisJCQljb250aW51ZTsKKwkJaWYgKCFkYXRhLT5jdXJzb3JfZmJbaV0u ZmJfaWQpIHsKKwkJCWlndF9jcmVhdGVfY29sb3JfZmIoZGF0YS0+ZHJtX2ZkLCBjdXJzb3Jfd2lk dGgsIGN1cnNvcl9oZWlnaHQsCisJCQkJCWRhdGEtPmZvcm1hdCwKKwkJCQkJZGF0YS0+bW9kaWZp ZXIsCisJCQkJCTEuMCwwLjAsMC4wLAorCQkJCQkmZGF0YS0+Y3Vyc29yX2ZiW2ldKTsKKwkJfQor CQlmb3IgKGogPSAwOyBqIDwgZGF0YS0+bnVtX3BsYW5lc1tpXTtqKyspIHsKKwkJCWlmIChpID09 IDEpIHsKKwkJCWlmICghZGF0YS0+ZmJbaSAqIE1BWF9QTEFORVMgKyBqXS5mYl9pZCkgeworCQkJ CWlndF9jcmVhdGVfY29sb3JfcGF0dGVybl9mYihkYXRhLT5kcm1fZmQsCisJCQkJICAgIGRhdGEt PmhpZ2hlc3RfbW9kZVtpXS0+aGRpc3BsYXksCisJCQkJICAgIGRhdGEtPmhpZ2hlc3RfbW9kZVtp XS0+dmRpc3BsYXksCisJCQkJICAgIGRhdGEtPmZvcm1hdCwKKwkJCQkgICAgZGF0YS0+bW9kaWZp ZXIsCisJCQkJICAgIDAuMCwgMC4wLCAxLjAsICZkYXRhLT5mYltpICogTUFYX1BMQU5FUyArIGpd KTsKKwkJCX0KKwkJCX0gZWxzZSB7CisJCQlpZiAoIWRhdGEtPmZiW2kgKiBNQVhfUExBTkVTICsg al0uZmJfaWQpIHsKKwkJCQlpZ3RfY3JlYXRlX2NvbG9yX3BhdHRlcm5fZmIoZGF0YS0+ZHJtX2Zk LAorCQkJCSAgICBkYXRhLT5oaWdoZXN0X21vZGVbaV0tPmhkaXNwbGF5LAorCQkJCSAgICBkYXRh LT5oaWdoZXN0X21vZGVbaV0tPnZkaXNwbGF5LAorCQkJCSAgICBkYXRhLT5mb3JtYXQsCisJCQkJ ICAgIGRhdGEtPm1vZGlmaWVyLAorCQkJCSAgICAwLjAsIDEuMCwgMC4wLCAmZGF0YS0+ZmJbaSAq IE1BWF9QTEFORVMgKyBqXSk7CisJCQl9CisJCQl9CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lk IGRlc3Ryb3lfZnJhbWVidWZmZXJzKHN0cnVjdCBkYXRhICpkYXRhKQoreworCWludCBpLCBqOwor CWlndF9vdXRwdXRfdCAqb3V0cHV0OworCisJaSA9IDA7CisJZm9yIChpID0gMDsgaSA8IElHVF9N QVhfUElQRVM7IGkrKykgeworCQlpZiAoIWRhdGEtPmhpZ2hlc3RfbW9kZVtpXSkKKwkJCWNvbnRp bnVlOworCQlmb3IgKGogPSAwO2ogPCBNQVhfUExBTkVTOyBqKyspIHsKKwkJCWlmIChkYXRhLT5m YltpICogTUFYX1BMQU5FUyArIGpdLmZiX2lkKSB7CisJCQkJaWd0X3BsYW5lX3NldF9mYigmZGF0 YS0+ZGlzcGxheS5waXBlc1tpXS5wbGFuZXNbal0sIE5VTEwpOworCQkJCWlndF9yZW1vdmVfZmIo ZGF0YS0+ZGlzcGxheS5kcm1fZmQsICZkYXRhLT5mYltpICogTUFYX1BMQU5FUyArIGpdKTsKKwkJ CQlkYXRhLT5mYltpICogTUFYX1BMQU5FUyArIGpdLmZiX2lkID0gMDsKKwkJCX0KKwkJfQorCQlp ZiAoZGF0YS0+Y3Vyc29yX2ZiW2ldLmZiX2lkKSB7CisJCQlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmRp c3BsYXkuZHJtX2ZkLCAmZGF0YS0+Y3Vyc29yX2ZiW2ldKTsKKwkJCWRhdGEtPmN1cnNvcl9mYltp XS5mYl9pZCA9IDA7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHByZXBhcmVfdGVzdChzdHJ1 Y3QgZGF0YSAqZGF0YSkKK3sKKwlpbnQgaSxqOworCWlndF9vdXRwdXRfdCAqb3V0cHV0OworCWlu dCBudW1fY29ubmVjdG9yczsKKworCWRhdGEtPm51bWJlcl9vZl9jb3JlcyA9IG1pbihzeXNjb25m KF9TQ19OUFJPQ0VTU09SU19PTkxOKSwgTUFYX0NPUkVTKTsKKworCWZvciAoaSA9IDA7IGkgPCBJ R1RfTUFYX1BJUEVTOyBpKyspIHsKKwkJZm9yIChqID0gMDtqIDwgTUFYX1BMQU5FUzsgaisrKQor CQkJZGF0YS0+ZmJbaSAqIE1BWF9QTEFORVMgKyBqXS5mYl9pZCA9IDA7CisJCWRhdGEtPmN1cnNv cl9mYltpXS5mYl9pZCA9IDA7CisJCWRhdGEtPm51bV9wbGFuZXNbaV0gPSAtMTsKKwkJZGF0YS0+ bGFzdF9tb2RlW2ldID0gTlVMTDsKKwkJc2VtX2luaXQoJmRhdGEtPmdwdV90aHJlYWRfcGF1c2Vf YWNrW2ldLCAwLCAwKTsKKwl9CisKKwlzdGFydF9jcHVfdGhyZWFkcyhkYXRhKTsKKworCWRhdGEt Pm1vZGVfcmVzb3VyY2VzID0gZHJtTW9kZUdldFJlc291cmNlcyhkYXRhLT5kcm1fZmQpOworCWlm ICghZGF0YS0+bW9kZV9yZXNvdXJjZXMpIHsKKwkJaWd0X3dhcm4oImRybU1vZGVHZXRSZXNvdXJj ZXMgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJcmV0dXJuOworCX0KKworCW51 bV9jb25uZWN0b3JzID0gZGF0YS0+bW9kZV9yZXNvdXJjZXMtPmNvdW50X2Nvbm5lY3RvcnM7CisK KwltZW1zZXQoZGF0YS0+aGlnaGVzdF9tb2RlLCAwLCBzaXplb2YoZHJtTW9kZU1vZGVJbmZvICop ICogSUdUX01BWF9QSVBFUyk7CisKKwlkYXRhLT5jb25uZWN0b3JzID0gXAorCSAgICAoZHJtTW9k ZUNvbm5lY3RvclB0ciAqKW1hbGxvYyhzaXplb2YoZHJtTW9kZUNvbm5lY3RvclB0cikqbnVtX2Nv bm5lY3RvcnMpOworCisJZmlsbF9jb25uZWN0b3JfdG9fcGlwZV9hcnJheShkYXRhLCBkYXRhLT5t b2RlX3Jlc291cmNlcywgZGF0YS0+Y29ubmVjdG9ycyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgSUdU X01BWF9QSVBFUzsgaSsrKSB7CisJCWRybU1vZGVDb25uZWN0b3IgKmNvbm5lY3RvciA9IChkcm1N b2RlQ29ubmVjdG9yICopZGF0YS0+Y29ubmVjdG9yc1tpXTsKKwkJaWYgKCFjb25uZWN0b3IpCisJ CQljb250aW51ZTsKKwkJaWYgKCFkYXRhLT5oaWdoZXN0X21vZGVbaV0pIHsKKwkJCWlmIChjb25u ZWN0b3ItPmNvdW50X21vZGVzKQorCQkJCWRhdGEtPmhpZ2hlc3RfbW9kZVtpXSA9IGZpbmRfaGln aGVzdF9tb2RlKGNvbm5lY3Rvcik7CisJCX0KKwkJaWd0X2Fzc2VydChkYXRhLT5oaWdoZXN0X21v ZGVbaV0pOworCisJCWlmIChkYXRhLT5oaWdoZXN0X21vZGVbaV0pIHsKKwkJCWlndF9pbmZvKCJV c2luZyBtb2RlOiBcbiIpOworCQkJa21zdGVzdF9kdW1wX21vZGUoZGF0YS0+aGlnaGVzdF9tb2Rl W2ldKTsKKwkJfQorCisJCWlmIChkYXRhLT5udW1fcGxhbmVzW2ldID09IC0xKQorCQkJZGF0YS0+ bnVtX3BsYW5lc1tpXSA9IGRhdGEtPmRpc3BsYXkucGlwZXNbaV0ubl9wbGFuZXM7CisKKwkJaWd0 X2luZm8oIk1heCBudW1iZXIgb2YgcGxhbmVzIGlzICVkIGZvciBwaXBlICVkXG4iLCBkYXRhLT5u dW1fcGxhbmVzW2ldLCBpKTsKKwl9CisKKwljcmVhdGVfZnJhbWVidWZmZXJzKGRhdGEpOworCisJ c3RhcnRfZ3B1X3RocmVhZHMoZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbmlzaF90ZXN0KHN0 cnVjdCBkYXRhICpkYXRhKQoreworCWludCBpOworCisJc3RvcF9ncHVfdGhyZWFkcyhkYXRhKTsK KworCS8qCisJICogQXMgd2UgY2hhbmdlIHRpbGluZy9mb3JtYXQgd2UgbmVlZCBhIG5ldyBGQgor CSAqLworCWRlc3Ryb3lfZnJhbWVidWZmZXJzKGRhdGEpOworCisJZm9yIChpID0gMDsgaSA8IElH VF9NQVhfUElQRVM7IGkrKykgeworCQlkYXRhLT5udW1fcGxhbmVzW2ldID0gLTE7CisJCWRhdGEt Pmxhc3RfbW9kZVtpXSA9IE5VTEw7CisJfQorCisJc3RvcF9jcHVfdGhyZWFkcyhkYXRhKTsKKwor CXJlbGVhc2VfY29ubmVjdG9ycyhkYXRhLT5jb25uZWN0b3JzKTsKKworCWRybU1vZGVGcmVlUmVz b3VyY2VzKGRhdGEtPm1vZGVfcmVzb3VyY2VzKTsKK30KKworc3RydWN0IGRhdGEgZGF0YSA9IHsK KwkuZm9ybWF0ID0gRFJNX0ZPUk1BVF9YUkdCODg4OCwKKwkubW9kaWZpZXIgPSBEUk1fRk9STUFU X01PRF9MSU5FQVIsCisJLmRldmlkID0gMCwKK307CisKK2lndF9tYWluCit7CisJdWludDhfdCBm b3JtYXRfaWR4ID0gMCwgdGlsaW5nX2lkeCA9IDA7CisKKwlpZ3RfZml4dHVyZSB7CisJCWRhdGEu ZHJtX2ZkID0gZGF0YS5kaXNwbGF5LmRybV9mZCA9IGRybV9vcGVuX2RyaXZlcl9tYXN0ZXIoRFJJ VkVSX0FOWSk7CisKKwkJa21zdGVzdF9zZXRfdnRfZ3JhcGhpY3NfbW9kZSgpOworCisJCWlndF9k aXNwbGF5X3JlcXVpcmUoJmRhdGEuZGlzcGxheSwgZGF0YS5kaXNwbGF5LmRybV9mZCk7CisJCWln dF9yZXF1aXJlKGRhdGEuZGlzcGxheS5pc19hdG9taWMpOworCQlpZ3RfZGlzcGxheV9yZXF1aXJl X291dHB1dCgmZGF0YS5kaXNwbGF5KTsKKwl9CisKKwlmb3IgKGZvcm1hdF9pZHggPSAwOyBmb3Jt YXRfaWR4IDwgTl9GT1JNQVRTOyBmb3JtYXRfaWR4KyspCisJCWZvciAodGlsaW5nX2lkeCA9IDA7 IHRpbGluZ19pZHggPCBOX1RJTElOR19NRVRIT0RTOyB0aWxpbmdfaWR4KyspIHsKKwkJCWRhdGEu Zm9ybWF0ID0gZm9ybWF0c1tmb3JtYXRfaWR4XTsKKwkJCWRhdGEubW9kaWZpZXIgPSB0aWxpbmdz W3RpbGluZ19pZHhdOworCisJCQlpZ3RfZml4dHVyZSB7CisJCQkJcHJlcGFyZV90ZXN0KCZkYXRh KTsKKwkJCX0KKworCQkJaWd0X2Rlc2NyaWJlKCJTdGFydCBwaXBlIHN0cmVzcyB0ZXN0LCB1dGls aXppbmcgY3B1IGFuZCBncHUgIgorCQkJCSAgICAgInNpbXVsdGFuZW91c2x5IHdpdGggbWF4aW11 bSBhbW91bnQgb2YgcGxhbmVzICIKKwkJCQkgICAgICJhbmQgcmVzb2x1dGlvbiAiKTsKKwkJCWln dF9zdWJ0ZXN0X2YoInN0cmVzcy0lcy0lcyIsCisJCQkgICAgICBmb3JtYXRfc3RyKGZvcm1hdF9p ZHgpLAorCQkJICAgICAgdGlsaW5nX3N0cih0aWxpbmdfaWR4KSkgeworCisJCQkJc3RyZXNzKCZk YXRhKTsKKworCQkJfQorCisJCQlpZ3RfZml4dHVyZSB7CisJCQkJZmluaXNoX3Rlc3QoJmRhdGEp OworCQkJfQorCQl9CisKKwlpZ3RfZml4dHVyZSB7CisJCWlndF9kaXNwbGF5X2ZpbmkoJmRhdGEu ZGlzcGxheSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvdGVzdHMvbWVzb24uYnVpbGQgYi90ZXN0cy9t ZXNvbi5idWlsZAppbmRleCA3ZTNmOWUwYS4uZTkxNDdkYjAgMTAwNjQ0Ci0tLSBhL3Rlc3RzL21l c29uLmJ1aWxkCisrKyBiL3Rlc3RzL21lc29uLmJ1aWxkCkBAIC01MSw2ICs1MSw3IEBAIHRlc3Rf cHJvZ3MgPSBbCiAJJ2ttc19wbGFuZV9tdWx0aXBsZScsCiAJJ2ttc19wbGFuZV9zY2FsaW5nJywK IAkna21zX3ByaW1lJywKKwkna21zX3BsYW5lX3N0cmVzcycsCiAJJ2ttc19wcm9wX2Jsb2InLAog CSdrbXNfcHJvcGVydGllcycsCiAJJ2ttc19wc3InLAotLSAKMi4xNy4xCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdApp Z3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXY=