From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id A895C6EF3D for ; Wed, 18 Sep 2019 13:09:53 +0000 (UTC) From: Stanislav Lisovskiy Date: Wed, 18 Sep 2019 16:07:36 +0300 Message-Id: <20190918130736.5292-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: 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 ICAtIEZpeCBpc3N1ZSBpbiBtYWluIHRlc3RpbmcgY3ljbGUsIGNvZGUgcmVmYWN0b3JpbmcKICAg IC0gUmViYXNlZAoKdjExOgogICAgLSBGaXhlZCBpc3N1ZSB3aXRoIHN1c3BlbmRpbmcvcmVzdW1p bmcgR1BVIHRocmVhZHMKICAgICAgdG8gZ2V0IGNyYy4gQWRkZWQgbnVtX3JlY3RhbmdsZXMgdG8g YmUgYWJsZSB0byBjdXN0b21pemUKICAgICAgbnVtYmVyIG9mIGdwZ3B1X2ZpbGwgY2FsbHMuCgp2 MTI6CiAgICAtIFJlbW92ZWQgdW5uZWVkZWQgc2hhcmVkIGZiIGZ1bmN0aW9uYWxpdHkgYW5kIGdw dSB0aHJlYWQKICAgICAgcGF1c2UvcmVzdW1lLgogICAgLSBOb3cgYWxzbyB1c2luZyBkaWZmZXJl bnQgZm9ybWF0cyBmb3IgY3Vyc29yIGZiLgogICAgLSBSZW1vdmVkIHVubmVjZXNzYXJ5IHBhcmFt ZXRlcnMgZm9yIHN0cmVzcyBmdW5jdGlvbi4KICAgIC0gQ2hhbmdlZCBwbGFuZV9zdHJlc3MgZnVu Y3Rpb24gbmFtZSB0byBwaXBlX3N0cmVzcyhtYWtlcyBzZW5zZSkKICAgIC0gUHV0IGdwZ3B1X3dh bGsgeCBhbmQgeSBidWcgZml4IGludG8gc2VwYXJhdGUgcGF0Y2guCgp2MTM6CiAgICAtIEFkZGVk IHRlc3RzIGRvY3VtZW50YXRpb24uCgpDaGFuZ2UtSWQ6IEk3OWFkNzU2Njg1ODAxYWJkYzg2ZWRk OWE4M2EwMzgxNjM5OWQ0YThkClNpZ25lZC1vZmYtYnk6IFN0YW5pc2xhdiBMaXNvdnNraXkgPHN0 YW5pc2xhdi5saXNvdnNraXlAaW50ZWwuY29tPgotLS0KIHRlc3RzL01ha2VmaWxlLnNvdXJjZXMg ICB8ICAgMSArCiB0ZXN0cy9rbXNfcGxhbmVfc3RyZXNzLmMgfCA4NjEgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrCiB0ZXN0cy9tZXNvbi5idWlsZCAgICAgICAgfCAgIDEg KwogMyBmaWxlcyBjaGFuZ2VkLCA4NjMgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IHRlc3RzL2ttc19wbGFuZV9zdHJlc3MuYwoKZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLnNv dXJjZXMgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCmluZGV4IGMwMmU0ZDk0Li5hNzM3MDc3MyAx MDA2NDQKLS0tIGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcworKysgYi90ZXN0cy9NYWtlZmlsZS5z b3VyY2VzCkBAIC02NSw2ICs2NSw3IEBAIFRFU1RTX3Byb2dzID0gXAogCWttc19wbGFuZV9tdWx0 aXBsZSBcCiAJa21zX3BsYW5lX3NjYWxpbmcgXAogCWttc19wcmltZSBcCisJa21zX3BsYW5lX3N0 cmVzcyBcCiAJa21zX3Byb3BfYmxvYiBcCiAJa21zX3Byb3BlcnRpZXMgXAogCWttc19wc3IgXApk aWZmIC0tZ2l0IGEvdGVzdHMva21zX3BsYW5lX3N0cmVzcy5jIGIvdGVzdHMva21zX3BsYW5lX3N0 cmVzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi4xOGFjMTY3NwotLS0g L2Rldi9udWxsCisrKyBiL3Rlc3RzL2ttc19wbGFuZV9zdHJlc3MuYwpAQCAtMCwwICsxLDg2MSBA 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 UF9DVVJTT1JfSEVJR0hUIDB4OQorI2VuZGlmCisKKworI2RlZmluZSBOX0JMSVRTIDMKKworI2Rl ZmluZSBOX0ZPUk1BVFMgMQorc3RhdGljIGNvbnN0IHVpbnQzMl90IGZvcm1hdHNbTl9GT1JNQVRT XSA9IHsKKwlEUk1fRk9STUFUX1hSR0I4ODg4LAorLyoKKyAqIFdpdGggdGhvc2UgZW5hYmxlZCB3 aWxsIHRha2Ugc2lnbmlmaWNhbnRseSBtb3JlIHRpbWUuCisgKi8KKy8vCURSTV9GT1JNQVRfUkdC NTY1LAorLy8JRFJNX0ZPUk1BVF9YUkdCMjEwMTAxMCwKK307CisKKyNkZWZpbmUgTl9USUxJTkdf TUVUSE9EUyAxCitzdGF0aWMgY29uc3QgdWludDY0X3QgdGlsaW5nc1tOX1RJTElOR19NRVRIT0RT XSA9IHsKKwlEUk1fRk9STUFUX01PRF9MSU5FQVIsCisvLwlJOTE1X0ZPUk1BVF9NT0RfWF9USUxF RCwKKy8vCUk5MTVfRk9STUFUX01PRF9ZX1RJTEVELAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIg KmZvcm1hdF9zdHIoaW50IGZvcm1hdF9pbmRleCkKK3sKKwlzd2l0Y2ggKGZvcm1hdHNbZm9ybWF0 X2luZGV4XSkgeworCWNhc2UgRFJNX0ZPUk1BVF9SR0I1NjU6CisJCXJldHVybiAicmdiNTY1IjsK KwljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6CisJCXJldHVybiAieHJnYjg4ODgiOworCWNhc2Ug RFJNX0ZPUk1BVF9YUkdCMjEwMTAxMDoKKwkJcmV0dXJuICJ4cmdiMjEwMTAxMCI7CisJZGVmYXVs dDoKKwkJaWd0X2Fzc2VydChmYWxzZSk7CisJfQorfQorCitzdGF0aWMgY29uc3QgY2hhciAqdGls aW5nX3N0cihpbnQgdGlsaW5nX2luZGV4KQoreworCXN3aXRjaCAodGlsaW5nc1t0aWxpbmdfaW5k ZXhdKSB7CisJY2FzZSBEUk1fRk9STUFUX01PRF9MSU5FQVI6CisJCXJldHVybiAidW50aWxlZCI7 CisJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRDoKKwkJcmV0dXJuICJ4dGlsZWQiOworCWNh c2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQ6CisJCXJldHVybiAieXRpbGVkIjsKKwlkZWZhdWx0 OgorCQlpZ3RfYXNzZXJ0KGZhbHNlKTsKKwl9Cit9CisKKworI2RlZmluZSBNQVhfQ09SRVMgOAor I2RlZmluZSBNQVhfUExBTkVTIDE2CisKK3N0cnVjdCBkYXRhOworCitzdHJ1Y3QgdGhyZWFkX2Nv bnRleHQgeworCXN0cnVjdCBkYXRhICpkYXRhOworCWludCBpZDsKKwl2b2lkICpidWYxOworCXZv aWQgKmJ1ZjI7Cit9OworCitzdHJ1Y3QgcmVjdCB7CisJaW50IHg7CisJaW50IHk7CisJaW50IHc7 CisJaW50IGg7Cit9OworCitzdHJ1Y3QgZ3B1X2NvbnRleHQgeworCXN0cnVjdCBkYXRhICpkYXRh OworCWludCBwaXBlOworCWludCBjb2xvcjsKKwlpbnQgbnVtX3JlY3RhbmdsZXM7CisJc3RydWN0 IGlndF9mYiAqZmJfcHRyOworCXN0cnVjdCByZWN0IGJsdF9yZWN0OworCXN0cnVjdCBpbnRlbF9i YXRjaGJ1ZmZlciAqYmF0Y2g7Cit9OworCitlbnVtIHsKKwlSVU5OSU5HLAorCVNUT1BQRUQsCisJ UEFVU0VELAorCUxBU1RfU1RBVEUgPSBQQVVTRUQKK30gdGhyZWFkX3N0YXRlOworCitzdHJ1Y3Qg ZGF0YSB7CisJaW50IGRybV9mZDsKKwlpZ3RfZGlzcGxheV90IGRpc3BsYXk7CisJaW50IG51bV9w bGFuZXNbSUdUX01BWF9QSVBFU107CisJdWludDMyX3QgZm9ybWF0OworCXVpbnQ2NF90IG1vZGlm aWVyOworCXVpbnQzMl90IGRldmlkOworCWRybV9pbnRlbF9idWZtZ3IgKmJ1Zm1ncjsKKwlkcm1N b2RlTW9kZUluZm8gKmxhc3RfbW9kZVtJR1RfTUFYX1BJUEVTXTsKKwlzdHJ1Y3QgaWd0X2ZiIGZi W0lHVF9NQVhfUElQRVMgKiBNQVhfUExBTkVTXTsKKwlzdHJ1Y3QgaWd0X2ZiIGN1cnNvcl9mYltJ R1RfTUFYX1BJUEVTXTsKKwlwdGhyZWFkX3QgY3B1X3RocmVhZFtNQVhfQ09SRVNdOworCXB0aHJl YWRfdCBncHVfdGhyZWFkW0lHVF9NQVhfUElQRVNdOworCWJvb2wgY3B1X3RocmVhZF9zdG9wW01B WF9DT1JFU107CisJaW50IGdwdV90aHJlYWRfc3RhdGVbSUdUX01BWF9QSVBFU107CisJc2VtX3Qg Z3B1X3RocmVhZF9wYXVzZV9hY2tbSUdUX01BWF9QSVBFU107CisJc3RydWN0IHRocmVhZF9jb250 ZXh0IGNwdV9jb250ZXh0W01BWF9DT1JFU107CisJc3RydWN0IGdwdV9jb250ZXh0IGdwdV9jb250 ZXh0W0lHVF9NQVhfUElQRVNdOworCWRybU1vZGVNb2RlSW5mbyAqaGlnaGVzdF9tb2RlW0lHVF9N QVhfUElQRVNdOworCWRybU1vZGVDb25uZWN0b3JQdHIgY29ubmVjdG9yc1tJR1RfTUFYX1BJUEVT XTsKKwlkcm1Nb2RlUmVzICptb2RlX3Jlc291cmNlczsKKwlpbnQgbnVtYmVyX29mX2NvcmVzOwor fTsKKworCitzdGF0aWMgdm9pZCBwYXVzZV9ncHVfdGhyZWFkcyhzdHJ1Y3QgZGF0YSAqZGF0YSk7 CisKK3N0YXRpYyB2b2lkIHJlc3VtZV9ncHVfdGhyZWFkcyhzdHJ1Y3QgZGF0YSAqZGF0YSk7CisK K3N0YXRpYyB2b2lkIHN0b3BfZ3B1X3RocmVhZHMoc3RydWN0IGRhdGEgKmRhdGEpOworCitzdGF0 aWMgdm9pZCBzdGFydF9ncHVfdGhyZWFkcyhzdHJ1Y3QgZGF0YSAqZGF0YSk7CisKK3N0cnVjdCBi YXNlX2NyYyB7CisJYm9vbCBzZXQ7CisJaWd0X2NyY190IGNyYzsKK307CisKK2lndF9waXBlX2Ny Y190ICpwaXBlX2NyYzsKKworI2RlZmluZSBCVUZfU0laRSAxMjgqMTAyNCoxMDI0CisKK3N0YXRp YyB2b2lkICpjcHVfbG9hZCh2b2lkICpkKQoreworCWNoYXIgKmJ1ZjEsICpidWYyOworCXN0cnVj dCB0aHJlYWRfY29udGV4dCAqY29udGV4dCA9IChzdHJ1Y3QgdGhyZWFkX2NvbnRleHQgKilkOwor CXN0cnVjdCBkYXRhICpkYXRhID0gY29udGV4dC0+ZGF0YTsKKworCWJ1ZjEgPSBjb250ZXh0LT5i dWYxOworCWJ1ZjIgPSBjb250ZXh0LT5idWYyOworCisJZGF0YS0+Y3B1X3RocmVhZF9zdG9wW2Nv bnRleHQtPmlkXSA9IGZhbHNlOworCisJaWd0X2luZm8oIkNQVSB0aHJlYWQgY3B1IGlkICVkIHN0 YXJ0XG4iLCBjb250ZXh0LT5pZCk7CisKKwkvKiBKdXN0IHRvIG1ha2UgQ1BVIGJ1c3kuLi4gKi8K Kwl3aGlsZSghZGF0YS0+Y3B1X3RocmVhZF9zdG9wW2NvbnRleHQtPmlkXSkgeworCQltZW1jcHko YnVmMSwgYnVmMiwgQlVGX1NJWkUpOworCQltZW1jcHkoYnVmMiwgYnVmMSwgQlVGX1NJWkUpOwor CX0KKworCWlndF9pbmZvKCJDUFUgdGhyZWFkIGNwdSBpZCAlZCBzdG9wXG4iLCBjb250ZXh0LT5p ZCk7CisKKwlyZXR1cm4gTlVMTDsKK30KKworCitzdGF0aWMgdm9pZCBzY3JhdGNoX2J1Zl9pbml0 KHN0cnVjdCBpZ3RfYnVmICpidWYsCisJCQlkcm1faW50ZWxfYm8gKmJvLCBpbnQgd2lkdGgsIGlu dCBoZWlnaHQsIGludCBzdHJpZGUsIGludCB0aWxpbmcsIGludCBicHApCit7CisJYnVmLT5ibyA9 IGJvOworCWJ1Zi0+c3RyaWRlID0gc3RyaWRlOworCWJ1Zi0+dGlsaW5nID0gdGlsaW5nOworCWJ1 Zi0+c2l6ZSA9IHdpZHRoICogaGVpZ2h0ICogYnBwIC8gODsKKwlidWYtPmJwcCA9IGJwcDsKK30K KworY2hhciAqc3RhdGVfc3RyaW5ncyBbXSA9IAoreworCSJSVU5OSU5HIiwKKwkiU1RPUFBFRCIs CisJIlBBVVNFRCIsCit9OworCitjaGFyICpnZXRfc3RhdGVfc3RyaW5nKGludCBzdGF0ZSkKK3sK KwlpZiAoc3RhdGUgPCAwIHx8IHN0YXRlID4gTEFTVF9TVEFURSkKKwkJcmV0dXJuICI/IjsKKwor CXJldHVybiBzdGF0ZV9zdHJpbmdzW3N0YXRlXTsKK30KKworc3RhdGljIHZvaWQgKmdwdV9sb2Fk KHZvaWQgKnB0cikKK3sKKwlzdHJ1Y3QgZ3B1X2NvbnRleHQgKmNvbnRleHQgPSAoc3RydWN0IGdw dV9jb250ZXh0ICopcHRyOworCXN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2ggPSBOVUxM OworCXN0cnVjdCBpZ3RfYnVmIGRzdDsKKwlzdHJ1Y3QgZGF0YSAqZGF0YSA9IGNvbnRleHQtPmRh dGE7CisJaW50IHBpcGUgPSBjb250ZXh0LT5waXBlOworCWlndF9maWxsZnVuY190IGdwZ3B1X2Zp bGwgPSBOVUxMOworCWRybV9pbnRlbF9ibyAqYm8gPSBOVUxMOworCXN0cnVjdCBpZ3RfZmIgZmIs ICpmYl9wdHIgPSBOVUxMLCAqbGFzdF9mYl9wdHIgPSBOVUxMOworCWludCByZWN0X2Rpdmlzb3I7 CisJaW50IHJlY3Rfd2lkdGg7CisJaW50IHJlY3RfaGVpZ2h0OworCWludCBmcmFtZV93aWR0aDsK KwlpbnQgZnJhbWVfaGVpZ2h0OworCWludCBieXRlc19wZXJfcGl4ZWw7CisJZHJtTW9kZU1vZGVJ bmZvICptb2RlOworCWludCBmcmFtZSA9IDA7CisJaW50IHgsIHk7CisJaW50IGxhc3Rfc3RhdGUg PSAtMTsKKwlpbnQgcmVjdDsKKworCWdwZ3B1X2ZpbGwgPSBpZ3RfZ2V0X2dwZ3B1X2ZpbGxmdW5j KGRhdGEtPmRldmlkKTsKKworCWlndF9yZXF1aXJlX2YoZ3BncHVfZmlsbCwKKwkgICAgICAibm8g Z3BncHUtZmlsbCBmdW5jdGlvblxuIik7CisKKwliYXRjaCA9IGNvbnRleHQtPmJhdGNoOworCWln dF9hc3NlcnQoYmF0Y2gpOworCisJbW9kZSA9IGRhdGEtPmhpZ2hlc3RfbW9kZVtwaXBlXTsKKwlp Z3RfYXNzZXJ0KG1vZGUpOworCisJaWd0X2NyZWF0ZV9jb2xvcl9wYXR0ZXJuX2ZiKGRhdGEtPmRy bV9mZCwgbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5LAorCQkgICAgZGF0YS0+Zm9ybWF0 LAorCQkgICAgZGF0YS0+bW9kaWZpZXIsCisJCSAgICAwLjAsIDEuMCwgMC4wLCAmZmIpOworCisJ aWd0X2luZm8oIkdQVSB0aHJlYWQgcGlwZSAlZCBzdGFydFxuIiwgcGlwZSk7CisJd2hpbGUgKGRh dGEtPmdwdV90aHJlYWRfc3RhdGVbcGlwZV0gIT0gU1RPUFBFRCkgeworCQlpZiAobGFzdF9zdGF0 ZSAhPSBkYXRhLT5ncHVfdGhyZWFkX3N0YXRlW3BpcGVdKSB7CisJCQlsYXN0X3N0YXRlID0gZGF0 YS0+Z3B1X3RocmVhZF9zdGF0ZVtwaXBlXTsKKwkJCXNlbV9wb3N0KCZkYXRhLT5ncHVfdGhyZWFk X3BhdXNlX2Fja1twaXBlXSk7CisJCX0KKwkJaWYgKGRhdGEtPmdwdV90aHJlYWRfc3RhdGVbcGlw ZV0gPT0gUEFVU0VEKSB7CisJCQlzbGVlcCgwKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYg KCFjb250ZXh0LT5mYl9wdHIpIHsKKwkJCWZiX3B0ciA9ICZmYjsKKwkJfQorCQllbHNlIHsKKwkJ CWZiX3B0ciA9IGNvbnRleHQtPmZiX3B0cjsKKwkJfQorCisJCWlmIChsYXN0X2ZiX3B0ciAhPSBm Yl9wdHIpIHsKKwkJCWlndF9pbmZvKCJHUFUgdGhyZWFkIHBpcGUgJWQ6IENoYW5nZSBmcm9tIEZC ICV4IHRvIEZCICV4XG4iLCBwaXBlLCBsYXN0X2ZiX3B0ciwgZmJfcHRyKTsKKwkJCWZyYW1lX3dp ZHRoID0gZmJfcHRyLT53aWR0aDsKKwkJCWZyYW1lX2hlaWdodCA9IGZiX3B0ci0+aGVpZ2h0Owor CQkJYnl0ZXNfcGVyX3BpeGVsID0gZmJfcHRyLT5wbGFuZV9icHBbMF0gLyA4OworCQkJYm8gPSBn ZW1faGFuZGxlX3RvX2xpYmRybV9ibyhkYXRhLT5idWZtZ3IsIGRhdGEtPmRybV9mZCwgIiIsIGZi X3B0ci0+Z2VtX2hhbmRsZSk7CisJCQlpZ3RfYXNzZXJ0KGJvKTsKKworCQkJc2NyYXRjaF9idWZf aW5pdCgmZHN0LCBibywgZnJhbWVfd2lkdGgsIGZyYW1lX2hlaWdodCwgZmJfcHRyLT5zdHJpZGVz WzBdLCBmYl9wdHItPm1vZGlmaWVyLCBmYl9wdHItPnBsYW5lX2JwcFswXSk7CisJCX0KKwkJbGFz dF9mYl9wdHIgPSBmYl9wdHI7CisKKwkJLyogRmlsbCB0aGUgZnJhbWVidWZmZXIgdXNpbmcgc2hh ZGVyICovCisJCXggPSAwOworCQl5ID0gZnJhbWVfaGVpZ2h0IC8gNDsKKworCQlncGdwdV9maWxs KGJhdGNoLAorCQkgICAmZHN0LCB4LCB5LCAoZnJhbWVfd2lkdGggKiBieXRlc19wZXJfcGl4ZWwp LCBmcmFtZV9oZWlnaHQgLyAyLAorCQkgICBjb250ZXh0LT5jb2xvcik7CisKKwkJcmVjdCA9IDA7 CisKKwkJd2hpbGUgKHJlY3QgPCBjb250ZXh0LT5udW1fcmVjdGFuZ2xlcykgeworCQkJLyogZGl2 aWRlIGF0IGxlYXN0IGJ5IDIgYW5kIHVwIHRvIDggKi8KKwkJCXJlY3RfZGl2aXNvciA9IDEgPDwg KGhhcnNfcGV0cnVza2FfZjU0XzFfcmFuZG9tX3Vuc2FmZV9tYXgoMykgKyAxKTsKKworCQkJcmVj dF93aWR0aCA9IGZyYW1lX3dpZHRoIC8gcmVjdF9kaXZpc29yOworCQkJcmVjdF9oZWlnaHQgPSBm cmFtZV9oZWlnaHQgLyByZWN0X2Rpdmlzb3I7CisKKwkJCWNvbnRleHQtPmJsdF9yZWN0LnggPSB4 ICsgaGFyc19wZXRydXNrYV9mNTRfMV9yYW5kb21fdW5zYWZlX21heChmcmFtZV93aWR0aCAtIHJl Y3Rfd2lkdGgpOworCQkJY29udGV4dC0+Ymx0X3JlY3QueSA9IHkgKyBoYXJzX3BldHJ1c2thX2Y1 NF8xX3JhbmRvbV91bnNhZmVfbWF4KGZyYW1lX2hlaWdodC8yIC0gcmVjdF9oZWlnaHQpOworCisJ CQkvKiBGaWxsIHJhbmRvbWx5IHNpemVkIGFuZCBwb3NpdGlvbmVkIHJlY3RhbmdsZXMgKi8KKwkJ CWdwZ3B1X2ZpbGwoYmF0Y2gsCisJCQkgICAmZHN0LCBjb250ZXh0LT5ibHRfcmVjdC54LCBjb250 ZXh0LT5ibHRfcmVjdC55LCAoKGNvbnRleHQtPmJsdF9yZWN0LnggKyByZWN0X3dpZHRoKSAqIGJ5 dGVzX3Blcl9waXhlbCksCisJCQkgICBjb250ZXh0LT5ibHRfcmVjdC55ICsgcmVjdF9oZWlnaHQs CisJCQkgICBjb250ZXh0LT5jb2xvciArIDB4ODApOworCisJCQljb250ZXh0LT5jb2xvciArPSA0 OworCisJCQkrK3JlY3Q7CisJCX0KKwkJZnJhbWUrKzsKKwl9CisKKwlkcm1faW50ZWxfYm9fdW5y ZWZlcmVuY2UoYm8pOworCisJaWd0X3JlbW92ZV9mYihkYXRhLT5kaXNwbGF5LmRybV9mZCwgJmZi KTsKKworCWlndF9pbmZvKCJHUFUgdGhyZWFkIHBpcGUgJWQgc3RvcC4gRnJhbWVzIHJlbmRlcmVk OiAlZFxuIiwgcGlwZSwgZnJhbWUpOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbmxp bmUgdWludDMyX3QgcGlwZV9zZWxlY3QoZW51bSBwaXBlIHBpcGUpCit7CisJaWYgKHBpcGUgPiAx KQorCQlyZXR1cm4gcGlwZSA8PCBEUk1fVkJMQU5LX0hJR0hfQ1JUQ19TSElGVDsKKwllbHNlIGlm IChwaXBlID4gMCkKKwkJcmV0dXJuIERSTV9WQkxBTktfU0VDT05EQVJZOworCWVsc2UKKwkJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBnZXRfdmJsYW5rKGludCBmZCwgZW51bSBwaXBl IHBpcGUsIHVuc2lnbmVkIGZsYWdzKQoreworCXVuaW9uIGRybV93YWl0X3ZibGFuayB2Ymw7CisK KwltZW1zZXQoJnZibCwgMCwgc2l6ZW9mKHZibCkpOworCXZibC5yZXF1ZXN0LnR5cGUgPSBEUk1f VkJMQU5LX1JFTEFUSVZFIHwgcGlwZV9zZWxlY3QocGlwZSkgfCBmbGFnczsKKwlpZiAoZHJtSW9j dGwoZmQsIERSTV9JT0NUTF9XQUlUX1ZCTEFOSywgJnZibCkpCisJCXJldHVybiAwOworCisJcmV0 dXJuIHZibC5yZXBseS5zZXF1ZW5jZTsKK30KKworCitzdGF0aWMgaW50IHBpcGVfc3RyZXNzKHN0 cnVjdCBkYXRhICpkYXRhLCBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwgZW51bSBwaXBlIHBpcGUsIGRy bU1vZGVNb2RlSW5mbyAqbW9kZSkKK3sKKwlpZ3RfcGxhbmVfdCAqcGxhbmU7CisJaW50IGk7CisJ aW50IHJldDsKKwlpbnQgbGFzdF9wbGFuZTsKKwlib29sIG5ld19tb2RlID0gZmFsc2U7CisJdWlu dDY0X3QgY3Vyc29yX3dpZHRoLCBjdXJzb3JfaGVpZ2h0OworCisJZG9fb3JfZGllKGRybUdldENh cChkYXRhLT5kcm1fZmQsIERSTV9DQVBfQ1VSU09SX1dJRFRILCAmY3Vyc29yX3dpZHRoKSk7CisJ ZG9fb3JfZGllKGRybUdldENhcChkYXRhLT5kcm1fZmQsIERSTV9DQVBfQ1VSU09SX0hFSUdIVCwg JmN1cnNvcl9oZWlnaHQpKTsKKworCWlmIChkYXRhLT5sYXN0X21vZGVbcGlwZV0gIT0gbW9kZSkg eworCQlpZ3Rfb3V0cHV0X292ZXJyaWRlX21vZGUob3V0cHV0LCBtb2RlKTsKKwkJaWd0X291dHB1 dF9zZXRfcGlwZShvdXRwdXQsIHBpcGUpOworCisJCXJldCA9IGlndF9kaXNwbGF5X3RyeV9jb21t aXRfYXRvbWljKCZkYXRhLT5kaXNwbGF5LAorCQkJCURSTV9NT0RFX0FUT01JQ19URVNUX09OTFkg fCBEUk1fTU9ERV9BVE9NSUNfQUxMT1dfTU9ERVNFVCwgTlVMTCk7CisJCWlmIChyZXQpIHsKKwkJ CWlndF93YXJuKCJDb3VsZCBub3QgY29tbWl0IG1vZGU6IFxuIik7CisJCQlrbXN0ZXN0X2R1bXBf bW9kZShtb2RlKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlpZ3RfZGlzcGxheV9jb21taXQy KCZkYXRhLT5kaXNwbGF5LCBDT01NSVRfQVRPTUlDKTsKKwkJZGF0YS0+bGFzdF9tb2RlW3BpcGVd ID0gbW9kZTsKKwkJbmV3X21vZGUgPSB0cnVlOworCX0KKworCS8qCisJICogTG9va3MgbGlrZSB3 ZSBjYW4ndCBoYXZlIHBsYW5lcyBvbiB0aGF0IHBpcGUgYXQgYWxsCisJICovCisJaWYgKCFkYXRh LT5udW1fcGxhbmVzW3BpcGVdKQorCQlyZXR1cm4gMDsKKworCW1vZGUgPSBpZ3Rfb3V0cHV0X2dl dF9tb2RlKG91dHB1dCk7CisKKwlpZiAobmV3X21vZGUpIHsKKwkJaSA9IDA7CisJCWZvcl9lYWNo X3BsYW5lX29uX3BpcGUoJmRhdGEtPmRpc3BsYXksIHBpcGUsIHBsYW5lKSB7CisJCQlpbnQgcGxh bmVfd2lkdGgsIHBsYW5lX2hlaWdodDsKKwkJCWlmIChwbGFuZS0+dHlwZSA9PSBEUk1fUExBTkVf VFlQRV9DVVJTT1IpIHsKKwkJCQlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCAmZGF0YS0+Y3Vyc29y X2ZiW3BpcGVdKTsKKwkJCQlpZ3RfZmJfc2V0X3NpemUoJmRhdGEtPmN1cnNvcl9mYltwaXBlXSwg cGxhbmUsIGN1cnNvcl93aWR0aCwgY3Vyc29yX2hlaWdodCk7CisJCQkJaWd0X3BsYW5lX3NldF9z aXplKHBsYW5lLCBjdXJzb3Jfd2lkdGgsIGN1cnNvcl9oZWlnaHQpOworCQkJCXBsYW5lX3dpZHRo ID0gY3Vyc29yX3dpZHRoOworCQkJCXBsYW5lX2hlaWdodCA9IGN1cnNvcl9oZWlnaHQ7CisJCQl9 IGVsc2UgeworCQkJCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsICZkYXRhLT5mYltwaXBlICogTUFY X1BMQU5FUyArIGldKTsKKwkJCQlpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9uKHBsYW5lLCAwLCAwKTsK KwkJCQlpZ3RfZmJfc2V0X3NpemUoJmRhdGEtPmZiW3BpcGUgKiBNQVhfUExBTkVTICsgaV0sIHBs YW5lLCBtb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXkpOworCQkJCWlndF9wbGFuZV9zZXRf c2l6ZShwbGFuZSwgbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5KTsKKwkJCQlwbGFuZV93 aWR0aCA9IG1vZGUtPmhkaXNwbGF5OworCQkJCXBsYW5lX2hlaWdodCA9IG1vZGUtPnZkaXNwbGF5 OworCQkJfQorCisJCQlyZXQgPSBpZ3RfZGlzcGxheV90cnlfY29tbWl0X2F0b21pYygmZGF0YS0+ ZGlzcGxheSwgRFJNX01PREVfQVRPTUlDX1RFU1RfT05MWSB8IERSTV9NT0RFX0FUT01JQ19BTExP V19NT0RFU0VULCBOVUxMKTsKKwkJCXdoaWxlIChyZXQpIHsKKwkJCQlpZiAocGxhbmVfd2lkdGgg PD0gY3Vyc29yX3dpZHRoIHx8IHBsYW5lX2hlaWdodCA8PSBjdXJzb3JfaGVpZ2h0KQorCQkJCQli cmVhazsKKwkJCQlwbGFuZV93aWR0aCAvPSAyOworCQkJCXBsYW5lX2hlaWdodCAvPSAyOworCQkJ CWlndF9wbGFuZV9zZXRfc2l6ZShwbGFuZSwgcGxhbmVfd2lkdGgsIHBsYW5lX2hlaWdodCk7CisJ CQkJaWd0X2luZm8oIlJlZHVjZWQgcGxhbmUgJWQgc2l6ZSB0byAlZHglZFxuIiwgcGxhbmUtPmlu ZGV4LCBwbGFuZV93aWR0aCwgcGxhbmVfaGVpZ2h0KTsKKwkJCQlyZXQgPSBpZ3RfZGlzcGxheV90 cnlfY29tbWl0X2F0b21pYygmZGF0YS0+ZGlzcGxheSwgRFJNX01PREVfQVRPTUlDX1RFU1RfT05M WSB8IERSTV9NT0RFX0FUT01JQ19BTExPV19NT0RFU0VULCBOVUxMKTsKKwkJCX0KKwkJCWlmIChy ZXQpIHsKKwkJCQlpZ3RfaW5mbygiUGxhbmUgJWQgcGlwZSAlZCB0cnkgY29tbWl0IGZhaWxlZCwg ZXhpdGluZ1xuIiwgaSwgcGlwZSk7CisJCQkJZGF0YS0+bnVtX3BsYW5lc1twaXBlXSA9IGk7CisJ CQkJaWd0X2luZm8oIk1heCBudW0gcGxhbmVzIGZvciBwaXBlICVkIHNldCB0byAlZFxuIiwgcGlw ZSwgaSk7CisJCQkJLyoKKwkJCQkgKiBXZSBoYXZlIG5vdyBkZXRlcm1pbmVkIG1heCBhbW91bnQg b2YgZnVsbCBzaXplZCBwbGFuZXMsIHdlIHdpbGwganVzdAorCQkJCSAqIGtlZXAgaXQgaW4gbWlu ZCBhbmQgYmUgc21hcnRlciBuZXh0IHRpbWUuIEFsc28gbGV0cyByZW1vdmUgdW5uZWVkZWQgZmJz LgorCQkJCSAqIERvbid0IGRlc3Ryb3kgY3Vyc29yX2ZiIGFzIHdpbGwgdGFrZSBjYXJlIGFib3V0 IGl0IGF0IHRoZSBlbmQuCisJCQkJICovCisJCQkJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgTlVM TCk7CisJCQkJd2hpbGUgKGkgPCBNQVhfUExBTkVTKSB7CisJCQkJCWlndF9yZW1vdmVfZmIoZGF0 YS0+ZGlzcGxheS5kcm1fZmQsICZkYXRhLT5mYltwaXBlICogTUFYX1BMQU5FUyArIGldKTsKKwkJ CQkJZGF0YS0+ZmJbcGlwZSAqIE1BWF9QTEFORVMgKyBpXS5mYl9pZCA9IDA7CisJCQkJCWkrKzsK KwkJCQl9CisJCQkJaSA9IGRhdGEtPm51bV9wbGFuZXNbcGlwZV07CisJCQl9CisJCQlpZiAoKytp ID49IGRhdGEtPm51bV9wbGFuZXNbcGlwZV0pCisJCQkJYnJlYWs7CisJCX0KKwkJaWd0X2Rpc3Bs YXlfY29tbWl0MigmZGF0YS0+ZGlzcGxheSwgQ09NTUlUX0FUT01JQyk7CisJfQorCisJcmV0dXJu IDA7Cit9CisKKworc3RhdGljIGRybU1vZGVNb2RlSW5mbyAqIGZpbmRfaGlnaGVzdF9tb2RlKGRy bU1vZGVDb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlkcm1Nb2RlTW9kZUluZm8gKmhpZ2hlc3Rf bW9kZSA9IE5VTEw7CisJaW50IGo7CisKKwlmb3IgKGogPSAwOyBqIDwgY29ubmVjdG9yLT5jb3Vu dF9tb2RlczsgaisrKSB7CisJCWlmICghaGlnaGVzdF9tb2RlKSB7CisJCQloaWdoZXN0X21vZGUg PSAmY29ubmVjdG9yLT5tb2Rlc1tqXTsKKwkJfQorCQllbHNlIGlmIChjb25uZWN0b3ItPm1vZGVz W2pdLnZkaXNwbGF5ICYmIGNvbm5lY3Rvci0+bW9kZXNbal0uaGRpc3BsYXkpIHsKKwkJCWlmICho aWdoZXN0X21vZGUtPmhkaXNwbGF5IDwgY29ubmVjdG9yLT5tb2Rlc1tqXS5oZGlzcGxheSkKKwkJ CQloaWdoZXN0X21vZGUgPSAmY29ubmVjdG9yLT5tb2Rlc1tqXTsKKwkJCX0KKwl9CisKKwlyZXR1 cm4gaGlnaGVzdF9tb2RlOworfQorCit0eXBlZGVmIGRybU1vZGVDb25uZWN0b3IgKiBkcm1Nb2Rl Q29ubmVjdG9yUHRyOworCitzdGF0aWMgdm9pZCBmaWxsX2Nvbm5lY3Rvcl90b19waXBlX2FycmF5 KHN0cnVjdCBkYXRhICpkYXRhLCBkcm1Nb2RlUmVzICptb2RlX3Jlc291cmNlcywgZHJtTW9kZUNv bm5lY3RvclB0ciAqY29ubmVjdG9ycykKK3sKKwlpbnQgcGlwZSA9IDA7CisJaWd0X291dHB1dF90 ICpvdXRwdXQ7CisJaW50IGk7CisJaW50IG1heF9jb25uZWN0b3JzID0gbWluKG1vZGVfcmVzb3Vy Y2VzLT5jb3VudF9jb25uZWN0b3JzLCBJR1RfTUFYX1BJUEVTKTsKKworCW1lbXNldChjb25uZWN0 b3JzLCAwLCBzaXplb2YoZHJtTW9kZUNvbm5lY3RvclB0cikgKiBJR1RfTUFYX1BJUEVTKTsKKwor CWZvciAoaSA9IDA7IGkgPCBtYXhfY29ubmVjdG9yczsgaSsrKSB7CisJCWRybU1vZGVDb25uZWN0 b3IgKmNvbm5lY3RvcjsKKworCQljb25uZWN0b3IgPSBkcm1Nb2RlR2V0Q29ubmVjdG9yKGRhdGEt PmRybV9mZCwKKwkJCSAgICAgICBtb2RlX3Jlc291cmNlcy0+Y29ubmVjdG9yc1tpXSk7CisKKwkJ aWYgKCFjb25uZWN0b3IpIHsKKwkJCWlndF93YXJuKCJjb3VsZCBub3QgZ2V0IGNvbm5lY3RvciAl aTogJXNcbiIsCisJCQkJbW9kZV9yZXNvdXJjZXMtPmNvbm5lY3RvcnNbaV0sIHN0cmVycm9yKGVy cm5vKSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChjb25uZWN0b3ItPmNvbm5lY3Rpb24g PT0gRFJNX01PREVfQ09OTkVDVEVEKSB7CisJCQljb25uZWN0b3JzW3BpcGVdID0gKGRybU1vZGVD b25uZWN0b3JQdHIpY29ubmVjdG9yOworCQkJKytwaXBlOworCQl9CisJCWVsc2UKKwkJCWRybU1v ZGVGcmVlQ29ubmVjdG9yKGNvbm5lY3Rvcik7CisJfQorfQorCitzdGF0aWMgdm9pZCByZWxlYXNl X2Nvbm5lY3RvcnMoZHJtTW9kZUNvbm5lY3RvclB0ciAqY29ubmVjdG9ycykKK3sKKwlpbnQgaTsK Kwlmb3IgKGkgPSAwOyBpIDwgSUdUX01BWF9QSVBFUzsgaSsrKSB7CisJCWlmIChjb25uZWN0b3Jz W2ldKQorCQkJZHJtTW9kZUZyZWVDb25uZWN0b3IoY29ubmVjdG9yc1tpXSk7CisJfQorfQorCisj ZGVmaW5lIE1JTl9EVVJBVElPTl9TRUMgNS4wMAorI2RlZmluZSBNSU5fSVRFUkFUSU9OUyAyMAor CitzdGF0aWMgdm9pZCBzdHJlc3Moc3RydWN0IGRhdGEgKmRhdGEpCit7CisJc3RydWN0IHRpbWVz cGVjIHN0YXJ0LCBlbmQ7CisJaWd0X291dHB1dF90ICpvdXRwdXQ7CisJaW50IHJldDsKKwlpbnQg cGlwZTsKKwlpbnQgaXRlcmF0aW9ucyA9IDA7CisJYm9vbCBuZWVkX2NvbnRpbnVlOworCWlndF9j cmNfdCBjcmMsIGNyYzI7CisKKwlpZ3RfZ2V0dGltZSgmc3RhcnQpOworCisJZG8geworCQkvKgor CQkgKiBJbmNyZW1lbnQgcGlwZSBvbmx5IGZvciBjb25uZWN0ZWQgb3V0cHV0cywKKwkJICogZm9y IGVhY2ggY29ubmVjdGVkIG91dHB1dCB3ZSBzaG91bGQgYXNzaWduIGEKKwkJICogZGlmZmVyZW50 IHBpcGUuCisJCSAqLworCQlwaXBlID0gMDsKKwkJZm9yX2VhY2hfY29ubmVjdGVkX291dHB1dCgm ZGF0YS0+ZGlzcGxheSwgb3V0cHV0KSB7CisJCQlpZ3RfYXNzZXJ0X2YoZGF0YS0+ZGlzcGxheS5w aXBlc1twaXBlXS5uX3BsYW5lcyA8IE1BWF9QTEFORVMsCisJCQkJIkN1cnJlbnRseSB3ZSBkb24n dCBzdXBwb3J0IG1vcmUgdGhhbiAlZCBwbGFuZXMhIiwgTUFYX1BMQU5FUyk7CisKKwkJCXBpcGVf Y3JjID0gaWd0X3BpcGVfY3JjX25ldyhkYXRhLT5kcm1fZmQsIHBpcGUsCisJCQkJSU5URUxfUElQ RV9DUkNfU09VUkNFX0FVVE8pOworCisJCQlyZXQgPSBwaXBlX3N0cmVzcyhkYXRhLCBvdXRwdXQs IHBpcGUsIGRhdGEtPmhpZ2hlc3RfbW9kZVtwaXBlXSk7CisKKwkJCWlmICghKChpbnQpaWd0X3Rp bWVfZWxhcHNlZCgmc3RhcnQsICZlbmQpICUgKChpbnQpTUlOX0RVUkFUSU9OX1NFQy80KSkpIHsK KworCQkJCWdldF92YmxhbmsoZGF0YS0+ZGlzcGxheS5kcm1fZmQsIHBpcGUsIERSTV9WQkxBTktf TkVYVE9OTUlTUyk7CisKKwkJCQlpZ3RfcGlwZV9jcmNfY29sbGVjdF9jcmMocGlwZV9jcmMsICZj cmMpOworCisJCQkJZ2V0X3ZibGFuayhkYXRhLT5kaXNwbGF5LmRybV9mZCwgcGlwZSwgRFJNX1ZC TEFOS19ORVhUT05NSVNTKTsKKworCQkJCWlndF9waXBlX2NyY19jb2xsZWN0X2NyYyhwaXBlX2Ny YywgJmNyYzIpOworCisJCQkJaWd0X2Fzc2VydF9jcmNfZXF1YWwoJmNyYywgJmNyYzIpOworCQkJ fQorCisJCQlpZ3RfcGlwZV9jcmNfZnJlZShwaXBlX2NyYyk7CisKKwkJCWlmIChyZXQgfHwgKCsr cGlwZSA9PSBJR1RfTUFYX1BJUEVTKSkKKwkJCQlicmVhazsKKwkJfQorCQlpZ3RfZ2V0dGltZSgm ZW5kKTsKKwkJaXRlcmF0aW9ucysrOworCQluZWVkX2NvbnRpbnVlID0gaWd0X3RpbWVfZWxhcHNl ZCgmc3RhcnQsICZlbmQpIDwgTUlOX0RVUkFUSU9OX1NFQzsKKwl9IHdoaWxlICgobmVlZF9jb250 aW51ZSB8fCBpdGVyYXRpb25zIDwgTUlOX0lURVJBVElPTlMpKTsKKworCit9CisKK3N0YXRpYyB2 b2lkIHN0YXJ0X2dwdV90aHJlYWRzKHN0cnVjdCBkYXRhICpkYXRhKQoreworCWludCBpID0gMDsK KwlpZ3Rfb3V0cHV0X3QgKm91dHB1dDsKKworCWlmICghZGF0YS0+ZGV2aWQpIHsKKwkJZGF0YS0+ ZGV2aWQgPSBpbnRlbF9nZXRfZHJtX2RldmlkKGRhdGEtPmRybV9mZCk7CisJCWlndF9yZXF1aXJl X2dlbShkYXRhLT5kcm1fZmQpOworCisJCWRhdGEtPmJ1Zm1nciA9IGRybV9pbnRlbF9idWZtZ3Jf Z2VtX2luaXQoZGF0YS0+ZHJtX2ZkLCA0MDk2KTsKKwkJaWd0X2Fzc2VydChkYXRhLT5idWZtZ3Ip OworCX0KKworCWZvcl9lYWNoX2Nvbm5lY3RlZF9vdXRwdXQoJmRhdGEtPmRpc3BsYXksIG91dHB1 dCkgeworCQlkYXRhLT5ncHVfY29udGV4dFtpXS5kYXRhID0gZGF0YTsKKwkJZGF0YS0+Z3B1X2Nv bnRleHRbaV0ucGlwZSA9IGk7CisJCWRhdGEtPmdwdV9jb250ZXh0W2ldLmZiX3B0ciA9IE5VTEw7 CisJCWRhdGEtPmdwdV9jb250ZXh0W2ldLmJsdF9yZWN0LnggPSAwOworCQlkYXRhLT5ncHVfY29u dGV4dFtpXS5ibHRfcmVjdC55ID0gMDsKKwkJZGF0YS0+Z3B1X2NvbnRleHRbaV0uYmx0X3JlY3Qu dyA9IDA7CisJCWRhdGEtPmdwdV9jb250ZXh0W2ldLmJsdF9yZWN0LmggPSAwOworCQlkYXRhLT5n cHVfY29udGV4dFtpXS5udW1fcmVjdGFuZ2xlcyA9IE5fQkxJVFM7CisJCWRhdGEtPmdwdV90aHJl YWRfc3RhdGVbaV0gPSBSVU5OSU5HOworCQlpZ3RfaW5mbygiU3RhcnRpbmcgR1BVIHRocmVhZCAl ZFxuIiwgaSk7CisJCWRhdGEtPmdwdV9jb250ZXh0W2ldLmJhdGNoID0gaW50ZWxfYmF0Y2hidWZm ZXJfYWxsb2MoZGF0YS0+YnVmbWdyLCBkYXRhLT5kZXZpZCk7CisJCXB0aHJlYWRfY3JlYXRlKCZk YXRhLT5ncHVfdGhyZWFkW2ldLCBOVUxMLCBncHVfbG9hZCwgKHZvaWQqKSZkYXRhLT5ncHVfY29u dGV4dFtpXSk7CisJCXNlbV93YWl0KCZkYXRhLT5ncHVfdGhyZWFkX3BhdXNlX2Fja1tpXSk7CisJ CWlndF9pbmZvKCJHUFUgdGhyZWFkICVkIHN0YXJ0ZWRcbiIsIGkpOworCQlpZiAoKytpID09IElH VF9NQVhfUElQRVMpCisJCQlicmVhazsKKwl9Cit9CisKKworc3RhdGljIHZvaWQgcGF1c2VfZ3B1 X3RocmVhZHMoc3RydWN0IGRhdGEgKmRhdGEpCit7CisJaW50IGkgPSAwOworCWlndF9vdXRwdXRf dCAqb3V0cHV0OworCWZvcl9lYWNoX2Nvbm5lY3RlZF9vdXRwdXQoJmRhdGEtPmRpc3BsYXksIG91 dHB1dCkgeworCQlpZiAoZGF0YS0+Z3B1X3RocmVhZF9zdGF0ZVtpXSAhPSBSVU5OSU5HKSB7CisJ CQkrK2k7CisJCQljb250aW51ZTsKKwkJfQorCQlpZ3RfaW5mbygiUGF1c2luZyBHUFUgdGhyZWFk ICVkIFxuIiwgaSk7CisJCWRhdGEtPmdwdV90aHJlYWRfc3RhdGVbaV0gPSBQQVVTRUQ7CisJCXNl bV93YWl0KCZkYXRhLT5ncHVfdGhyZWFkX3BhdXNlX2Fja1tpXSk7CisJCWlndF9pbmZvKCJHUFUg dGhyZWFkICVkIHBhdXNlZFxuIiwgaSk7CisJCWlmICgrK2kgPT0gSUdUX01BWF9QSVBFUykKKwkJ CWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXygob3B0aW1pemUoIk8w IikpKSByZXN1bWVfZ3B1X3RocmVhZHMoc3RydWN0IGRhdGEgKmRhdGEpCit7CisJaW50IGkgPSAw OworCWlndF9vdXRwdXRfdCAqb3V0cHV0OworCWZvcl9lYWNoX2Nvbm5lY3RlZF9vdXRwdXQoJmRh dGEtPmRpc3BsYXksIG91dHB1dCkgeworCQlpZiAoZGF0YS0+Z3B1X3RocmVhZF9zdGF0ZVtpXSAh PSBQQVVTRUQpIHsKKwkJCSsraTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlndF9pbmZvKCJSZXN1 bWluZyBHUFUgdGhyZWFkICVkXG4iLCBpKTsKKwkJZGF0YS0+Z3B1X3RocmVhZF9zdGF0ZVtpXSA9 IFJVTk5JTkc7CisJCXNlbV93YWl0KCZkYXRhLT5ncHVfdGhyZWFkX3BhdXNlX2Fja1tpXSk7CisJ CWlndF9pbmZvKCJHUFUgdGhyZWFkICVkIHJlc3VtZWRcbiIsIGkpOworCQlpZiAoKytpID09IElH VF9NQVhfUElQRVMpCisJCQlicmVhazsKKwl9Cit9CisKKworc3RhdGljIHZvaWQgc3RvcF9ncHVf dGhyZWFkcyhzdHJ1Y3QgZGF0YSAqZGF0YSkKK3sKKwlpbnQgaSA9IDA7CisJaWd0X291dHB1dF90 ICpvdXRwdXQ7CisJZm9yX2VhY2hfY29ubmVjdGVkX291dHB1dCgmZGF0YS0+ZGlzcGxheSwgb3V0 cHV0KSB7CisJCWlndF9pbmZvKCJTdG9waW5nIEdQVSB0aHJlYWQgJWRcbiIsIGkpOworCQlkYXRh LT5ncHVfdGhyZWFkX3N0YXRlW2ldID0gU1RPUFBFRDsKKwkJcHRocmVhZF9qb2luKGRhdGEtPmdw dV90aHJlYWRbaV0sIE5VTEwpOworCQlkYXRhLT5ncHVfY29udGV4dFtpXS5mYl9wdHIgPSBOVUxM OworCQlpbnRlbF9iYXRjaGJ1ZmZlcl9mcmVlKGRhdGEtPmdwdV9jb250ZXh0W2ldLmJhdGNoKTsK KwkJaWYgKCsraSA9PSBJR1RfTUFYX1BJUEVTKQorCQkJYnJlYWs7CisJfQorfQorCitzdGF0aWMg dm9pZCBzdGFydF9jcHVfdGhyZWFkcyhzdHJ1Y3QgZGF0YSAqZGF0YSkKK3sKKwlpbnQgaTsKKwlm b3IgKGkgPSAwOyBpIDwgZGF0YS0+bnVtYmVyX29mX2NvcmVzO2krKykgeworCQlkYXRhLT5jcHVf Y29udGV4dFtpXS5idWYxID0gbWFsbG9jKEJVRl9TSVpFKTsKKwkJZGF0YS0+Y3B1X2NvbnRleHRb aV0uYnVmMiA9IG1hbGxvYyhCVUZfU0laRSk7CisJCWRhdGEtPmNwdV9jb250ZXh0W2ldLmlkID0g aTsKKwkJZGF0YS0+Y3B1X2NvbnRleHRbaV0uZGF0YSA9IGRhdGE7CisJCXB0aHJlYWRfY3JlYXRl KCZkYXRhLT5jcHVfdGhyZWFkW2ldLCBOVUxMLCBjcHVfbG9hZCwgKHZvaWQqKSZkYXRhLT5jcHVf Y29udGV4dFtpXSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzdG9wX2NwdV90aHJlYWRzKHN0cnVj dCBkYXRhICpkYXRhKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5udW1iZXJf b2ZfY29yZXM7aSsrKSB7CisJCWRhdGEtPmNwdV90aHJlYWRfc3RvcFtpXSA9IHRydWU7CisJCXB0 aHJlYWRfam9pbihkYXRhLT5jcHVfdGhyZWFkW2ldLCBOVUxMKTsKKwkJZnJlZShkYXRhLT5jcHVf Y29udGV4dFtpXS5idWYxKTsKKwkJZnJlZShkYXRhLT5jcHVfY29udGV4dFtpXS5idWYyKTsKKwl9 Cit9CisKK3N0YXRpYyB2b2lkIGNyZWF0ZV9mcmFtZWJ1ZmZlcnMoc3RydWN0IGRhdGEgKmRhdGEp Cit7CisJaW50IGksIGo7CisJdWludDY0X3QgY3Vyc29yX3dpZHRoLCBjdXJzb3JfaGVpZ2h0Owor CWlndF9vdXRwdXRfdCAqb3V0cHV0OworCisJZG9fb3JfZGllKGRybUdldENhcChkYXRhLT5kcm1f ZmQsIERSTV9DQVBfQ1VSU09SX1dJRFRILCAmY3Vyc29yX3dpZHRoKSk7CisJZG9fb3JfZGllKGRy bUdldENhcChkYXRhLT5kcm1fZmQsIERSTV9DQVBfQ1VSU09SX0hFSUdIVCwgJmN1cnNvcl9oZWln aHQpKTsKKworCWkgPSAwOworCWZvcl9lYWNoX2Nvbm5lY3RlZF9vdXRwdXQoJmRhdGEtPmRpc3Bs YXksIG91dHB1dCkgeworCQlpZiAoIWRhdGEtPmN1cnNvcl9mYltpXS5mYl9pZCkgeworCQkJaWd0 X2NyZWF0ZV9jb2xvcl9mYihkYXRhLT5kcm1fZmQsIGN1cnNvcl93aWR0aCwgY3Vyc29yX2hlaWdo dCwKKwkJCQkJZGF0YS0+Zm9ybWF0LAorCQkJCQlkYXRhLT5tb2RpZmllciwKKwkJCQkJMS4wLDAu MCwwLjAsCisJCQkJCSZkYXRhLT5jdXJzb3JfZmJbaV0pOworCQl9CisJCWZvciAoaiA9IDA7IGog PCBkYXRhLT5udW1fcGxhbmVzW2ldO2orKykgeworCQkJaWYgKCFkYXRhLT5mYltpICogTUFYX1BM QU5FUyArIGpdLmZiX2lkKSB7CisJCQkJaWd0X2NyZWF0ZV9jb2xvcl9wYXR0ZXJuX2ZiKGRhdGEt PmRybV9mZCwKKwkJCQkgICAgZGF0YS0+aGlnaGVzdF9tb2RlW2ldLT5oZGlzcGxheSwKKwkJCQkg ICAgZGF0YS0+aGlnaGVzdF9tb2RlW2ldLT52ZGlzcGxheSwKKwkJCQkgICAgZGF0YS0+Zm9ybWF0 LAorCQkJCSAgICBkYXRhLT5tb2RpZmllciwKKwkJCQkgICAgMC4wLCAxLjAsIDAuMCwgJmRhdGEt PmZiW2kgKiBNQVhfUExBTkVTICsgal0pOworCQkJfQorCQl9CisJCWlmICgrK2kgPT0gSUdUX01B WF9QSVBFUykKKwkJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgZGVzdHJveV9mcmFtZWJ1 ZmZlcnMoc3RydWN0IGRhdGEgKmRhdGEpCit7CisJaW50IGksIGo7CisJaWd0X291dHB1dF90ICpv dXRwdXQ7CisKKwlpID0gMDsKKwlmb3JfZWFjaF9jb25uZWN0ZWRfb3V0cHV0KCZkYXRhLT5kaXNw bGF5LCBvdXRwdXQpIHsKKwkJZm9yIChqID0gMDtqIDwgTUFYX1BMQU5FUzsgaisrKSB7CisJCQlp ZiAoZGF0YS0+ZmJbaSAqIE1BWF9QTEFORVMgKyBqXS5mYl9pZCkgeworCQkJCWlndF9wbGFuZV9z ZXRfZmIoJmRhdGEtPmRpc3BsYXkucGlwZXNbaV0ucGxhbmVzW2pdLCBOVUxMKTsKKwkJCQlpZ3Rf cmVtb3ZlX2ZiKGRhdGEtPmRpc3BsYXkuZHJtX2ZkLCAmZGF0YS0+ZmJbaSAqIE1BWF9QTEFORVMg KyBqXSk7CisJCQkJZGF0YS0+ZmJbaSAqIE1BWF9QTEFORVMgKyBqXS5mYl9pZCA9IDA7CisJCQl9 CisJCX0KKwkJaWYgKGRhdGEtPmN1cnNvcl9mYltpXS5mYl9pZCkgeworCQkJaWd0X3JlbW92ZV9m YihkYXRhLT5kaXNwbGF5LmRybV9mZCwgJmRhdGEtPmN1cnNvcl9mYltpXSk7CisJCQlkYXRhLT5j dXJzb3JfZmJbaV0uZmJfaWQgPSAwOworCQl9CisJCWlmICgrK2kgPT0gSUdUX01BWF9QSVBFUykK KwkJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgcHJlcGFyZV90ZXN0KHN0cnVjdCBkYXRh ICpkYXRhKQoreworCWludCBpLGo7CisJaWd0X291dHB1dF90ICpvdXRwdXQ7CisKKwlkYXRhLT5u dW1iZXJfb2ZfY29yZXMgPSBtaW4oc3lzY29uZihfU0NfTlBST0NFU1NPUlNfT05MTiksIE1BWF9D T1JFUyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgSUdUX01BWF9QSVBFUzsgaSsrKSB7CisJCWZvciAo aiA9IDA7aiA8IE1BWF9QTEFORVM7IGorKykKKwkJCWRhdGEtPmZiW2kgKiBNQVhfUExBTkVTICsg al0uZmJfaWQgPSAwOworCQlkYXRhLT5jdXJzb3JfZmJbaV0uZmJfaWQgPSAwOworCQlkYXRhLT5u dW1fcGxhbmVzW2ldID0gLTE7CisJCWRhdGEtPmxhc3RfbW9kZVtpXSA9IE5VTEw7CisJCXNlbV9p bml0KCZkYXRhLT5ncHVfdGhyZWFkX3BhdXNlX2Fja1tpXSwgMCwgMCk7CisJfQorCisJc3RhcnRf Y3B1X3RocmVhZHMoZGF0YSk7CisKKwlkYXRhLT5tb2RlX3Jlc291cmNlcyA9IGRybU1vZGVHZXRS ZXNvdXJjZXMoZGF0YS0+ZHJtX2ZkKTsKKwlpZiAoIWRhdGEtPm1vZGVfcmVzb3VyY2VzKSB7CisJ CWlndF93YXJuKCJkcm1Nb2RlR2V0UmVzb3VyY2VzIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVy cm5vKSk7CisJCXJldHVybjsKKwl9CisKKwltZW1zZXQoZGF0YS0+aGlnaGVzdF9tb2RlLCAwLCBz aXplb2YoZHJtTW9kZU1vZGVJbmZvICopICogSUdUX01BWF9QSVBFUyk7CisKKwlmaWxsX2Nvbm5l Y3Rvcl90b19waXBlX2FycmF5KGRhdGEsIGRhdGEtPm1vZGVfcmVzb3VyY2VzLCBkYXRhLT5jb25u ZWN0b3JzKTsKKworCWkgPSAwOworCWZvcl9lYWNoX2Nvbm5lY3RlZF9vdXRwdXQoJmRhdGEtPmRp c3BsYXksIG91dHB1dCkgeworCQlkcm1Nb2RlQ29ubmVjdG9yICpjb25uZWN0b3IgPSAoZHJtTW9k ZUNvbm5lY3RvciAqKWRhdGEtPmNvbm5lY3RvcnNbaV07CisJCWlmICghY29ubmVjdG9yKQorCQkJ Y29udGludWU7CisJCWlmICghZGF0YS0+aGlnaGVzdF9tb2RlW2ldKSB7CisJCQlpZiAoY29ubmVj dG9yLT5jb3VudF9tb2RlcykgeworCQkJCWRhdGEtPmhpZ2hlc3RfbW9kZVtpXSA9IGZpbmRfaGln aGVzdF9tb2RlKGNvbm5lY3Rvcik7CisJCQl9CisJCX0KKwkJaWd0X2Fzc2VydChkYXRhLT5oaWdo ZXN0X21vZGVbaV0pOworCQlpZ3RfaW5mbygiVXNpbmcgbW9kZTogXG4iKTsKKwkJa21zdGVzdF9k dW1wX21vZGUoZGF0YS0+aGlnaGVzdF9tb2RlW2ldKTsKKworCQlpZiAoZGF0YS0+bnVtX3BsYW5l c1tpXSA9PSAtMSkKKwkJCWRhdGEtPm51bV9wbGFuZXNbaV0gPSBkYXRhLT5kaXNwbGF5LnBpcGVz W2ldLm5fcGxhbmVzOworCisJCWlndF9pbmZvKCJNYXggbnVtYmVyIG9mIHBsYW5lcyBpcyAlZCBm b3IgcGlwZSAlZFxuIiwgZGF0YS0+bnVtX3BsYW5lc1tpXSwgaSk7CisKKwkJaWYgKCsraSA9PSBJ R1RfTUFYX1BJUEVTKQorCQkJYnJlYWs7CisJfQorCisJY3JlYXRlX2ZyYW1lYnVmZmVycyhkYXRh KTsKKworCXN0YXJ0X2dwdV90aHJlYWRzKGRhdGEpOworfQorCitzdGF0aWMgdm9pZCBmaW5pc2hf dGVzdChzdHJ1Y3QgZGF0YSAqZGF0YSkKK3sKKwlpbnQgaTsKKworCXN0b3BfZ3B1X3RocmVhZHMo ZGF0YSk7CisKKwkvKgorCSAqIEFzIHdlIGNoYW5nZSB0aWxpbmcvZm9ybWF0IHdlIG5lZWQgYSBu ZXcgRkIKKwkgKi8KKwlkZXN0cm95X2ZyYW1lYnVmZmVycyhkYXRhKTsKKwlmb3IgKGkgPSAwOyBp IDwgSUdUX01BWF9QSVBFUzsgaSsrKSB7CisJCWRhdGEtPm51bV9wbGFuZXNbaV0gPSAtMTsKKwkJ ZGF0YS0+bGFzdF9tb2RlW2ldID0gTlVMTDsKKwl9CisKKwlzdG9wX2NwdV90aHJlYWRzKGRhdGEp OworCisJcmVsZWFzZV9jb25uZWN0b3JzKGRhdGEtPmNvbm5lY3RvcnMpOworCisJZHJtTW9kZUZy ZWVSZXNvdXJjZXMoZGF0YS0+bW9kZV9yZXNvdXJjZXMpOworfQorCitzdHJ1Y3QgZGF0YSBkYXRh ID0geworCS5mb3JtYXQgPSBEUk1fRk9STUFUX1hSR0I4ODg4LAorCS5tb2RpZmllciA9IERSTV9G T1JNQVRfTU9EX0xJTkVBUiwKKwkuZGV2aWQgPSAwLAorfTsKKworaWd0X21haW4KK3sKKwl1aW50 OF90IGZvcm1hdF9pZHggPSAwLCB0aWxpbmdfaWR4ID0gMDsKKworCWlndF9maXh0dXJlIHsKKwkJ ZGF0YS5kcm1fZmQgPSBkYXRhLmRpc3BsYXkuZHJtX2ZkID0gZHJtX29wZW5fZHJpdmVyX21hc3Rl cihEUklWRVJfQU5ZKTsKKworCQlrbXN0ZXN0X3NldF92dF9ncmFwaGljc19tb2RlKCk7CisKKwkJ aWd0X2Rpc3BsYXlfcmVxdWlyZSgmZGF0YS5kaXNwbGF5LCBkYXRhLmRpc3BsYXkuZHJtX2ZkKTsK KwkJaWd0X3JlcXVpcmUoZGF0YS5kaXNwbGF5LmlzX2F0b21pYyk7CisJCWlndF9kaXNwbGF5X3Jl cXVpcmVfb3V0cHV0KCZkYXRhLmRpc3BsYXkpOworCX0KKworCWZvciAoZm9ybWF0X2lkeCA9IDA7 IGZvcm1hdF9pZHggPCBOX0ZPUk1BVFM7IGZvcm1hdF9pZHgrKykKKwkJZm9yICh0aWxpbmdfaWR4 ID0gMDsgdGlsaW5nX2lkeCA8IE5fVElMSU5HX01FVEhPRFM7IHRpbGluZ19pZHgrKykgeworCQkJ ZGF0YS5mb3JtYXQgPSBmb3JtYXRzW2Zvcm1hdF9pZHhdOworCQkJZGF0YS5tb2RpZmllciA9IHRp bGluZ3NbdGlsaW5nX2lkeF07CisKKwkJCWlndF9maXh0dXJlIHsKKwkJCQlwcmVwYXJlX3Rlc3Qo JmRhdGEpOworCQkJfQorCisJCQlpZ3RfZGVzY3JpYmUoIlN0YXJ0IHBpcGUgc3RyZXNzIHRlc3Qs IHV0aWxpemluZyBjcHUgYW5kIGdwdSAiCisJCQkJICAgICAic2ltdWx0YW5lb3VzbHkgd2l0aCBt YXhpbXVtIGFtb3VudCBvZiBwbGFuZXMgIgorCQkJCSAgICAgImFuZCByZXNvbHV0aW9uICIpOwor CQkJaWd0X3N1YnRlc3RfZigic3RyZXNzLSVzLSVzIiwKKwkJCSAgICAgIGZvcm1hdF9zdHIoZm9y bWF0X2lkeCksCisJCQkgICAgICB0aWxpbmdfc3RyKHRpbGluZ19pZHgpKSB7CisKKwkJCQlzdHJl c3MoJmRhdGEpOworCisJCQl9CisKKwkJCWlndF9maXh0dXJlIHsKKwkJCQlmaW5pc2hfdGVzdCgm ZGF0YSk7CisJCQl9CisJCX0KKworCWlndF9maXh0dXJlIHsKKwkJaWd0X2Rpc3BsYXlfZmluaSgm ZGF0YS5kaXNwbGF5KTsKKwl9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0t Z2l0IGEvdGVzdHMvbWVzb24uYnVpbGQgYi90ZXN0cy9tZXNvbi5idWlsZAppbmRleCBhN2IyYjMy Mi4uYjZkN2VkNDUgMTAwNjQ0Ci0tLSBhL3Rlc3RzL21lc29uLmJ1aWxkCisrKyBiL3Rlc3RzL21l c29uLmJ1aWxkCkBAIC01MCw2ICs1MCw3IEBAIHRlc3RfcHJvZ3MgPSBbCiAJJ2ttc19wbGFuZV9t dWx0aXBsZScsCiAJJ2ttc19wbGFuZV9zY2FsaW5nJywKIAkna21zX3ByaW1lJywKKwkna21zX3Bs YW5lX3N0cmVzcycsCiAJJ2ttc19wcm9wX2Jsb2InLAogCSdrbXNfcHJvcGVydGllcycsCiAJJ2tt c19wc3InLAotLSAKMi4xNy4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1k ZXY=