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 CF9F58914B for ; Thu, 16 May 2019 14:40:03 +0000 (UTC) From: Lionel Landwerlin Date: Thu, 16 May 2019 15:39:49 +0100 Message-Id: <20190516143950.2379-5-lionel.g.landwerlin@intel.com> In-Reply-To: <20190516143950.2379-1-lionel.g.landwerlin@intel.com> References: <20190516143950.2379-1-lionel.g.landwerlin@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t 4/5] igt: add timeline test cases 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: Chunming Zhou List-ID: RnJvbTogQ2h1bm1pbmcgWmhvdSA8ZGF2aWQxLnpob3VAYW1kLmNvbT4KCnYyOiBhZGFwdCB0byBu ZXcgdHJhbnNmZXIgaW9jdGwKCnYzOiBEcm9wIHVzZWxlc3MgdWludDY0X3QgY2FzdHMgKExpb25l bCkKICAgIEZpeCB0aW1lbGluZSBxdWVyeSBwcm90b3R5cGVzIChMaW9uZWwpCiAgICBUZXN0IG11 bHRpIHdhaXQgd2l0aCB0aW1lbGluZSAmIGJpbmFyeSBzeW5jb2JqcyAoTGlvbmVsKQoKU2lnbmVk LW9mZi1ieTogQ2h1bm1pbmcgWmhvdSA8ZGF2aWQxLnpob3VAYW1kLmNvbT4KU2lnbmVkLW9mZi1i eTogTGlvbmVsIExhbmR3ZXJsaW4gPGxpb25lbC5nLmxhbmR3ZXJsaW5AaW50ZWwuY29tPgotLS0K IGxpYi9pZ3Rfc3luY29iai5jICAgICAgICB8ICAyMDYgKysrKysrKysKIGxpYi9pZ3Rfc3luY29i ai5oICAgICAgICB8ICAgMTkgKwogdGVzdHMvbWVzb24uYnVpbGQgICAgICAgIHwgICAgMSArCiB0 ZXN0cy9zeW5jb2JqX3RpbWVsaW5lLmMgfCAxMDQ5ICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrCiA0IGZpbGVzIGNoYW5nZWQsIDEyNzUgaW5zZXJ0aW9ucygrKQogY3JlYXRl IG1vZGUgMTAwNjQ0IHRlc3RzL3N5bmNvYmpfdGltZWxpbmUuYwoKZGlmZiAtLWdpdCBhL2xpYi9p Z3Rfc3luY29iai5jIGIvbGliL2lndF9zeW5jb2JqLmMKaW5kZXggZjY1OWJjMjQuLjMwOWM3Y2Uw IDEwMDY0NAotLS0gYS9saWIvaWd0X3N5bmNvYmouYworKysgYi9saWIvaWd0X3N5bmNvYmouYwpA QCAtMjg2LDMgKzI4NiwyMDkgQEAgc3luY29ial9zaWduYWwoaW50IGZkLCB1aW50MzJfdCAqaGFu ZGxlcywgdWludDMyX3QgY291bnQpCiB7CiAJaWd0X2Fzc2VydF9lcShfX3N5bmNvYmpfc2lnbmFs KGZkLCBoYW5kbGVzLCBjb3VudCksIDApOwogfQorCitzdGF0aWMgaW50CitfX3N5bmNvYmpfdGlt ZWxpbmVfc2lnbmFsKGludCBmZCwgdWludDMyX3QgKmhhbmRsZXMsIHVpbnQ2NF90ICpwb2ludHMs IHVpbnQzMl90IGNvdW50KQoreworCXN0cnVjdCBkcm1fc3luY29ial90aW1lbGluZV9hcnJheSBh cnJheSA9IHsgMCB9OworCWludCBlcnIgPSAwOworCisJYXJyYXkuaGFuZGxlcyA9IHRvX3VzZXJf cG9pbnRlcihoYW5kbGVzKTsKKwlhcnJheS5wb2ludHMgPSB0b191c2VyX3BvaW50ZXIocG9pbnRz KTsKKwlhcnJheS5jb3VudF9oYW5kbGVzID0gY291bnQ7CisJaWYgKGRybUlvY3RsKGZkLCBEUk1f SU9DVExfU1lOQ09CSl9USU1FTElORV9TSUdOQUwsICZhcnJheSkpCisJCWVyciA9IC1lcnJubzsK KwlyZXR1cm4gZXJyOworfQorCisvKioKKyAqIHN5bmNvYmpfc2lnbmFsOgorICogQGZkOiBUaGUg RFJNIGZpbGUgZGVzY3JpcHRvci4KKyAqIEBoYW5kbGVzOiBBcnJheSBvZiBzeW5jb2JqIGhhbmRs ZXMgdG8gc2lnbmFsCisgKiBAcG9pbnRzOiBMaXN0IG9mIHBvaW50IG9mIGhhbmRsZXMgdG8gc2ln bmFsLgorICogQGNvdW50OiBDb3VudCBvZiBzeW5jb2JqIGhhbmRsZXMuCisgKgorICogU2lnbmFs IGEgc2V0IG9mIHN5bmNvYmpzLgorICovCit2b2lkCitzeW5jb2JqX3RpbWVsaW5lX3NpZ25hbChp bnQgZmQsIHVpbnQzMl90ICpoYW5kbGVzLCB1aW50NjRfdCAqcG9pbnRzLCB1aW50MzJfdCBjb3Vu dCkKK3sKKwlpZ3RfYXNzZXJ0X2VxKF9fc3luY29ial90aW1lbGluZV9zaWduYWwoZmQsIGhhbmRs ZXMsIHBvaW50cywgY291bnQpLCAwKTsKK30KK2ludAorX19zeW5jb2JqX3RpbWVsaW5lX3dhaXRf aW9jdGwoaW50IGZkLCBzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmVfd2FpdCAqYXJncykKK3sK KwlpbnQgZXJyID0gMDsKKwlpZiAoZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9TWU5DT0JKX1RJTUVM SU5FX1dBSVQsIGFyZ3MpKQorCQllcnIgPSAtZXJybm87CisJcmV0dXJuIGVycjsKK30KK3N0YXRp YyBpbnQKK19fc3luY29ial90aW1lbGluZV93YWl0KGludCBmZCwgdWludDMyX3QgKmhhbmRsZXMs IHVpbnQ2NF90ICpwb2ludHMsCisJCQl1bnNpZ25lZCBudW1faGFuZGxlcywKKwkJCWludDY0X3Qg dGltZW91dF9uc2VjLCB1bnNpZ25lZCBmbGFncywKKwkJCXVpbnQzMl90ICpmaXJzdF9zaWduYWxl ZCkKK3sKKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmVfd2FpdCBhcmdzOworCWludCByZXQ7 CisKKwlhcmdzLmhhbmRsZXMgPSB0b191c2VyX3BvaW50ZXIoaGFuZGxlcyk7CisJYXJncy5wb2lu dHMgPSB0b191c2VyX3BvaW50ZXIocG9pbnRzKTsKKwlhcmdzLnRpbWVvdXRfbnNlYyA9IHRpbWVv dXRfbnNlYzsKKwlhcmdzLmNvdW50X2hhbmRsZXMgPSBudW1faGFuZGxlczsKKwlhcmdzLmZsYWdz ID0gZmxhZ3M7CisJYXJncy5maXJzdF9zaWduYWxlZCA9IDA7CisJYXJncy5wYWQgPSAwOworCisJ cmV0ID0gZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9TWU5DT0JKX1RJTUVMSU5FX1dBSVQsICZhcmdz KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIC1lcnJubzsKKworCWlmIChmaXJzdF9zaWduYWxl ZCkKKwkJKmZpcnN0X3NpZ25hbGVkID0gYXJncy5maXJzdF9zaWduYWxlZDsKKworCXJldHVybiBy ZXQ7Cit9CitpbnQKK3N5bmNvYmpfdGltZWxpbmVfd2FpdF9lcnIoaW50IGZkLCB1aW50MzJfdCAq aGFuZGxlcywgdWludDY0X3QgKnBvaW50cywKKwkJCSAgdW5zaWduZWQgbnVtX2hhbmRsZXMsCisJ CQkgIGludDY0X3QgdGltZW91dF9uc2VjLCB1bnNpZ25lZCBmbGFncykKK3sKKwlyZXR1cm4gX19z eW5jb2JqX3RpbWVsaW5lX3dhaXQoZmQsIGhhbmRsZXMsIHBvaW50cywgbnVtX2hhbmRsZXMsCisJ CQkJICAgICAgIHRpbWVvdXRfbnNlYywgZmxhZ3MsIE5VTEwpOworfQorCisvKioKKyAqIHN5bmNv YmpfdGltZWxpbmVfd2FpdDoKKyAqIEBmZDogVGhlIERSTSBmaWxlIGRlc2NyaXB0b3IKKyAqIEBo YW5kbGVzOiBMaXN0IG9mIHN5bmNvYmogaGFuZGxlcyB0byB3YWl0IGZvci4KKyAqIEBwb2ludHM6 IExpc3Qgb2YgcG9pbnQgb2YgaGFuZGxlcyB0byB3YWl0IGZvci4KKyAqIEBudW1faGFuZGxlczog Q291bnQgb2YgaGFuZGxlcworICogQHRpbWVvdXRfbnNlYzogQWJzb2x1dGUgd2FpdCB0aW1lb3V0 IGluIG5hbm9zZWNvbmRzLgorICogQGZsYWdzOiBXYWl0IGlvY3RsIGZsYWdzLgorICogQGZpcnN0 X3NpZ25hbGVkOiBSZXR1cm5lZCBoYW5kbGUgZm9yIGZpcnN0IHNpZ25hbGVkIHN5bmNvYmouCisg KgorICogV2FpdHMgaW4gdGhlIGtlcm5lbCBmb3IgYW55L2FsbCB0aGUgcmVxdWVzdGVkIHN5bmNv YmpzIHRpbWVsaW5lIHBvaW50CisgKiB1c2luZyB0aGUgdGltZW91dCBhbmQgZmxhZ3MuCisgKiBS ZXR1cm5zOiBib29sIHZhbHVlIC0gZmFsc2UgPSB0aW1lZG91dCwgdHJ1ZSA9IHNpZ25hbGVkCisg Ki8KK2Jvb2wKK3N5bmNvYmpfdGltZWxpbmVfd2FpdChpbnQgZmQsIHVpbnQzMl90ICpoYW5kbGVz LCB1aW50NjRfdCAqcG9pbnRzLAorCQkgICAgICB1bnNpZ25lZCBudW1faGFuZGxlcywKKwkJICAg ICAgaW50NjRfdCB0aW1lb3V0X25zZWMsIHVuc2lnbmVkIGZsYWdzLAorCQkgICAgICB1aW50MzJf dCAqZmlyc3Rfc2lnbmFsZWQpCit7CisJaW50IHJldDsKKworCXJldCA9IF9fc3luY29ial90aW1l bGluZV93YWl0KGZkLCBoYW5kbGVzLCBwb2ludHMsIG51bV9oYW5kbGVzLAorCQkJCSAgICAgIHRp bWVvdXRfbnNlYywgZmxhZ3MsIGZpcnN0X3NpZ25hbGVkKTsKKwlpZiAocmV0ID09IC1FVElNRSkK KwkJcmV0dXJuIGZhbHNlOworCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKKworCXJldHVybiB0cnVl OworCit9CisKK3N0YXRpYyBpbnQKK19fc3luY29ial90aW1lbGluZV9xdWVyeShpbnQgZmQsIHVp bnQzMl90ICpoYW5kbGVzLCB1aW50NjRfdCAqcG9pbnRzLAorCQkJIHVpbnQzMl90IGhhbmRsZV9j b3VudCkKK3sKKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmVfYXJyYXkgYXJnczsKKwlpbnQg cmV0OworCisJYXJncy5oYW5kbGVzID0gdG9fdXNlcl9wb2ludGVyKGhhbmRsZXMpOworCWFyZ3Mu cG9pbnRzID0gdG9fdXNlcl9wb2ludGVyKHBvaW50cyk7CisJYXJncy5jb3VudF9oYW5kbGVzID0g aGFuZGxlX2NvdW50OworCWFyZ3MucGFkID0gMDsKKworCXJldCA9IGRybUlvY3RsKGZkLCBEUk1f SU9DVExfU1lOQ09CSl9RVUVSWSwgJmFyZ3MpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJ cmV0dXJuIDA7Cit9CisKKy8qKgorICogc3luY29ial90aW1lbGluZV9xdWVyeToKKyAqIEBmZDog VGhlIERSTSBmaWxlIGRlc2NyaXB0b3IuCisgKiBAaGFuZGxlczogQXJyYXkgb2Ygc3luY29iaiBo YW5kbGVzLgorICogQHBvaW50czogQXJyYXkgb2Ygc3luY29iaiBwb2ludHMgcXVlcmllZC4KKyAq IEBjb3VudDogQ291bnQgb2Ygc3luY29iaiBoYW5kbGVzLgorICoKKyAqIHF1ZXJ5IGEgc2V0IG9m IHN5bmNvYmpzLgorICovCit2b2lkCitzeW5jb2JqX3RpbWVsaW5lX3F1ZXJ5KGludCBmZCwgdWlu dDMyX3QgKmhhbmRsZXMsIHVpbnQ2NF90ICpwb2ludHMsCisJCSAgICAgICB1aW50MzJfdCBjb3Vu dCkKK3sKKwlpZ3RfYXNzZXJ0X2VxKF9fc3luY29ial90aW1lbGluZV9xdWVyeShmZCwgaGFuZGxl cywgcG9pbnRzLCBjb3VudCksIDApOworfQorCitzdGF0aWMgaW50CitfX3N5bmNvYmpfYmluYXJ5 X3RvX3RpbWVsaW5lKGludCBmZCwgdWludDMyX3QgdGltZWxpbmVfaGFuZGxlLAorCQkJICAgICB1 aW50NjRfdCBwb2ludCwgdWludDMyX3QgYmluYXJ5X2hhbmRsZSkKK3sKKwlzdHJ1Y3QgZHJtX3N5 bmNvYmpfdHJhbnNmZXIgYXJnczsKKworCWFyZ3Muc3JjX2hhbmRsZSA9IGJpbmFyeV9oYW5kbGU7 CisJYXJncy5kc3RfaGFuZGxlID0gdGltZWxpbmVfaGFuZGxlOworCWFyZ3Muc3JjX3BvaW50ID0g MDsKKwlhcmdzLmRzdF9wb2ludCA9IHBvaW50OworCWFyZ3MuZmxhZ3MgPSAwOworCWFyZ3MucGFk ID0gMDsKKwlyZXR1cm4gZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9TWU5DT0JKX1RSQU5TRkVSLCAm YXJncyk7Cit9CisKKy8qKgorICogc3luY29ial9iaW5hcnlfdG9fdGltZWxpbmU6CisgKiBAZmQ6 IFRoZSBEUk0gZmlsZSBkZXNjcmlwdG9yLgorICogQHRpbWVsaW5lX2hhbmRsZXM6IEFycmF5IG9m IHRpbWVsaW5lIHN5bmNvYmogaGFuZGxlcy4KKyAqIEBwb2ludDogc3luY29iaiBwb2ludC4KKyAq IEBiaW5hcnlfaGFuZGxlOiBBcnJheSBvZiBiaW5hcnkgc3luY29iaiBoYW5kbGVzLgorICoKKyAq IHF1ZXJ5IGEgc2V0IG9mIHN5bmNvYmpzLgorICovCit2b2lkCitzeW5jb2JqX2JpbmFyeV90b190 aW1lbGluZShpbnQgZmQsIHVpbnQzMl90IHRpbWVsaW5lX2hhbmRsZSwKKwkJCSAgIHVpbnQ2NF90 IHBvaW50LCB1aW50MzJfdCBiaW5hcnlfaGFuZGxlKQoreworCWlndF9hc3NlcnRfZXEoX19zeW5j b2JqX2JpbmFyeV90b190aW1lbGluZShmZCwgdGltZWxpbmVfaGFuZGxlLCBwb2ludCwKKwkJCQkJ CSAgIGJpbmFyeV9oYW5kbGUpLCAwKTsKK30KKworc3RhdGljIGludAorX19zeW5jb2JqX3RpbWVs aW5lX3RvX2JpbmFyeShpbnQgZmQsIHVpbnQzMl90IGJpbmFyeV9oYW5kbGUsCisJCQkgICAgIHVp bnQzMl90IHRpbWVsaW5lX2hhbmRsZSwKKwkJCSAgICAgdWludDY0X3QgcG9pbnQsCisJCQkgICAg IHVpbnQzMl90IGZsYWdzKQoreworCXN0cnVjdCBkcm1fc3luY29ial90cmFuc2ZlciBhcmdzOwor CisJYXJncy5kc3RfaGFuZGxlID0gYmluYXJ5X2hhbmRsZTsKKwlhcmdzLnNyY19oYW5kbGUgPSB0 aW1lbGluZV9oYW5kbGU7CisJYXJncy5kc3RfcG9pbnQgPSAwOworCWFyZ3Muc3JjX3BvaW50ID0g cG9pbnQ7CisJYXJncy5mbGFncyA9IGZsYWdzOworCWFyZ3MucGFkID0gMDsKKwlyZXR1cm4gZHJt SW9jdGwoZmQsIERSTV9JT0NUTF9TWU5DT0JKX1RSQU5TRkVSLCAmYXJncyk7Cit9CisKKy8qKgor ICogc3luY29ial9iaW5hcnlfdG9fdGltZWxpbmU6CisgKiBAZmQ6IFRoZSBEUk0gZmlsZSBkZXNj cmlwdG9yLgorICogQHRpbWVsaW5lX2hhbmRsZXM6IEFycmF5IG9mIHRpbWVsaW5lIHN5bmNvYmog aGFuZGxlcy4KKyAqIEBwb2ludDogc3luY29iaiBwb2ludC4KKyAqIEBiaW5hcnlfaGFuZGxlOiBB cnJheSBvZiBiaW5hcnkgc3luY29iaiBoYW5kbGVzLgorICoKKyAqIHF1ZXJ5IGEgc2V0IG9mIHN5 bmNvYmpzLgorICovCit2b2lkCitzeW5jb2JqX3RpbWVsaW5lX3RvX2JpbmFyeShpbnQgZmQsIHVp bnQzMl90IGJpbmFyeV9oYW5kbGUsCisJCQkgICB1aW50MzJfdCB0aW1lbGluZV9oYW5kbGUsCisJ CQkgICB1aW50NjRfdCBwb2ludCwKKwkJCSAgIHVpbnQzMl90IGZsYWdzKQoreworCWlndF9hc3Nl cnRfZXEoX19zeW5jb2JqX3RpbWVsaW5lX3RvX2JpbmFyeShmZCwgYmluYXJ5X2hhbmRsZSwKKwkJ CQkJCSAgIHRpbWVsaW5lX2hhbmRsZSwgcG9pbnQsCisJCQkJCQkgICBmbGFncyksIDApOworfQpk aWZmIC0tZ2l0IGEvbGliL2lndF9zeW5jb2JqLmggYi9saWIvaWd0X3N5bmNvYmouaAppbmRleCA1 MWFkMjM2NC4uMjBmMWYxOGYgMTAwNjQ0Ci0tLSBhL2xpYi9pZ3Rfc3luY29iai5oCisrKyBiL2xp Yi9pZ3Rfc3luY29iai5oCkBAIC00MSw3ICs0MSwyNiBAQCBpbnQgc3luY29ial93YWl0X2Vycihp bnQgZmQsIHVpbnQzMl90ICpoYW5kbGVzLCB1aW50MzJfdCBjb3VudCwKIGJvb2wgc3luY29ial93 YWl0KGludCBmZCwgdWludDMyX3QgKmhhbmRsZXMsIHVpbnQzMl90IGNvdW50LAogCQkgIHVpbnQ2 NF90IGFic190aW1lb3V0X25zZWMsIHVpbnQzMl90IGZsYWdzLAogCQkgIHVpbnQzMl90ICpmaXJz dF9zaWduYWxlZCk7CitpbnQgX19zeW5jb2JqX3RpbWVsaW5lX3dhaXRfaW9jdGwoaW50IGZkLAor CQkJCSAgc3RydWN0IGRybV9zeW5jb2JqX3RpbWVsaW5lX3dhaXQgKmFyZ3MpOworYm9vbCBzeW5j b2JqX3RpbWVsaW5lX3dhaXQoaW50IGZkLCB1aW50MzJfdCAqaGFuZGxlcywgdWludDY0X3QgKnBv aW50cywKKwkJCSAgIHVuc2lnbmVkIG51bV9oYW5kbGVzLAorCQkJICAgaW50NjRfdCB0aW1lb3V0 X25zZWMsIHVuc2lnbmVkIGZsYWdzLAorCQkJICAgdWludDMyX3QgKmZpcnN0X3NpZ25hbGVkKTsK K2ludCBzeW5jb2JqX3RpbWVsaW5lX3dhaXRfZXJyKGludCBmZCwgdWludDMyX3QgKmhhbmRsZXMs IHVpbnQ2NF90ICpwb2ludHMsCisJCQkgICAgICB1bnNpZ25lZCBudW1faGFuZGxlcywKKwkJCSAg ICAgIGludDY0X3QgdGltZW91dF9uc2VjLCB1bnNpZ25lZCBmbGFncyk7CiB2b2lkIHN5bmNvYmpf cmVzZXQoaW50IGZkLCB1aW50MzJfdCAqaGFuZGxlcywgdWludDMyX3QgY291bnQpOwogdm9pZCBz eW5jb2JqX3NpZ25hbChpbnQgZmQsIHVpbnQzMl90ICpoYW5kbGVzLCB1aW50MzJfdCBjb3VudCk7 Cit2b2lkIHN5bmNvYmpfdGltZWxpbmVfcXVlcnkoaW50IGZkLCB1aW50MzJfdCAqaGFuZGxlcywg dWludDY0X3QgKnBvaW50cywKKwkJCSAgICB1aW50MzJfdCBjb3VudCk7Cit2b2lkIHN5bmNvYmpf YmluYXJ5X3RvX3RpbWVsaW5lKGludCBmZCwgdWludDMyX3QgdGltZWxpbmVfaGFuZGxlLAorCQkJ CXVpbnQ2NF90IHBvaW50LCB1aW50MzJfdCBiaW5hcnlfaGFuZGxlKTsKK3ZvaWQgc3luY29ial90 aW1lbGluZV90b19iaW5hcnkoaW50IGZkLCB1aW50MzJfdCBiaW5hcnlfaGFuZGxlLAorCQkJCXVp bnQzMl90IHRpbWVsaW5lX2hhbmRsZSwKKwkJCQl1aW50NjRfdCBwb2ludCwKKwkJCQl1aW50MzJf dCBmbGFncyk7Cit2b2lkIHN5bmNvYmpfdGltZWxpbmVfc2lnbmFsKGludCBmZCwgdWludDMyX3Qg KmhhbmRsZXMsIHVpbnQ2NF90ICpwb2ludHMsCisJCQkgICAgIHVpbnQzMl90IGNvdW50KTsKIAog I2VuZGlmIC8qIElHVF9TWU5DT0JKX0ggKi8KZGlmZiAtLWdpdCBhL3Rlc3RzL21lc29uLmJ1aWxk IGIvdGVzdHMvbWVzb24uYnVpbGQKaW5kZXggMzUxNTk0ZmEuLmFjYTQ5OGYyIDEwMDY0NAotLS0g YS90ZXN0cy9tZXNvbi5idWlsZAorKysgYi90ZXN0cy9tZXNvbi5idWlsZApAQCAtNzgsNiArNzgs NyBAQCB0ZXN0X3Byb2dzID0gWwogCSdzd19zeW5jJywKIAknc3luY29ial9iYXNpYycsCiAJJ3N5 bmNvYmpfd2FpdCcsCisJJ3N5bmNvYmpfdGltZWxpbmUnLAogCSd0ZW1wbGF0ZScsCiAJJ3Rvb2xz X3Rlc3QnLAogCSd2M2RfZ2V0X2JvX29mZnNldCcsCmRpZmYgLS1naXQgYS90ZXN0cy9zeW5jb2Jq X3RpbWVsaW5lLmMgYi90ZXN0cy9zeW5jb2JqX3RpbWVsaW5lLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAuLjdlNDZlMTc3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc3lu Y29ial90aW1lbGluZS5jCkBAIC0wLDAgKzEsMTA0OSBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAy MDE4IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRl ZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2Yg dGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNv ZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9u LCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29w eSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFu ZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0 byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRv IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5v dGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBw YXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwg cG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJP VklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgor ICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB TkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9S IENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9U SEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JU IE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04g V0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhF IFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlICJpZ3QuaCIKKyNpbmNsdWRlICJzd19zeW5jLmgi CisjaW5jbHVkZSAiaWd0X3N5bmNvYmouaCIKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRl IDx0aW1lLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgor I2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgImRybS5oIgorCitJR1RfVEVTVF9ERVNDUklQ VElPTigiVGVzdHMgZm9yIHRoZSBkcm0gdGltZWxpbmUgc3luYyBvYmplY3QgQVBJIik7CisKKy8q IE9uZSB0ZW50aCBvZiBhIHNlY29uZCAqLworI2RlZmluZSBTSE9SVF9USU1FX05TRUMgMTAwMDAw MDAwdWxsCisKKyNkZWZpbmUgTlNFQ1NfUEVSX1NFQyAxMDAwMDAwMDAwdWxsCisKK3N0YXRpYyB1 aW50NjRfdAorZ2V0dGltZV9ucyh2b2lkKQoreworCXN0cnVjdCB0aW1lc3BlYyBjdXJyZW50Owor CWNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAmY3VycmVudCk7CisJcmV0dXJuICh1aW50 NjRfdCljdXJyZW50LnR2X3NlYyAqIE5TRUNTX1BFUl9TRUMgKyBjdXJyZW50LnR2X25zZWM7Cit9 CisKK3N0YXRpYyB2b2lkCitzbGVlcF9uc2VjKHVpbnQ2NF90IHRpbWVfbnNlYykKK3sKKwlzdHJ1 Y3QgdGltZXNwZWMgdDsKKwl0LnR2X3NlYyA9IHRpbWVfbnNlYyAvIE5TRUNTX1BFUl9TRUM7CisJ dC50dl9uc2VjID0gdGltZV9uc2VjICUgTlNFQ1NfUEVSX1NFQzsKKwlpZ3RfYXNzZXJ0X2VxKG5h bm9zbGVlcCgmdCwgTlVMTCksIDApOworfQorCitzdGF0aWMgdWludDY0X3QKK3Nob3J0X3RpbWVv dXQodm9pZCkKK3sKKwlyZXR1cm4gZ2V0dGltZV9ucygpICsgU0hPUlRfVElNRV9OU0VDOworfQor CitzdGF0aWMgaW50CitzeW5jb2JqX2F0dGFjaF9zd19zeW5jKGludCBmZCwgdWludDMyX3QgaGFu ZGxlLCB1aW50NjRfdCBwb2ludCkKK3sKKwlpbnQgdGltZWxpbmUsIGZlbmNlOworCisJdGltZWxp bmUgPSBzd19zeW5jX3RpbWVsaW5lX2NyZWF0ZSgpOworCWZlbmNlID0gc3dfc3luY190aW1lbGlu ZV9jcmVhdGVfZmVuY2UodGltZWxpbmUsIDEpOworCisJaWYgKHBvaW50ID09IDApIHsKKwkJc3lu Y29ial9pbXBvcnRfc3luY19maWxlKGZkLCBoYW5kbGUsIGZlbmNlKTsKKwl9IGVsc2UgeworCQl1 aW50MzJfdCBzeW5jb2JqID0gc3luY29ial9jcmVhdGUoZmQsIDApOworCisJCXN5bmNvYmpfaW1w b3J0X3N5bmNfZmlsZShmZCwgc3luY29iaiwgZmVuY2UpOworCQlzeW5jb2JqX2JpbmFyeV90b190 aW1lbGluZShmZCwgaGFuZGxlLCBwb2ludCwgc3luY29iaik7CisJCXN5bmNvYmpfZGVzdHJveShm ZCwgc3luY29iaik7CisJfQorCisJY2xvc2UoZmVuY2UpOworCisJcmV0dXJuIHRpbWVsaW5lOwor fQorCitzdGF0aWMgdm9pZAorc3luY29ial90cmlnZ2VyKGludCBmZCwgdWludDMyX3QgaGFuZGxl LCB1aW50NjRfdCBwb2ludCkKK3sKKwlpbnQgdGltZWxpbmUgPSBzeW5jb2JqX2F0dGFjaF9zd19z eW5jKGZkLCBoYW5kbGUsIHBvaW50KTsKKwlzd19zeW5jX3RpbWVsaW5lX2luYyh0aW1lbGluZSwg MSk7CisJY2xvc2UodGltZWxpbmUpOworfQorCitzdGF0aWMgdGltZXJfdAorc2V0X3RpbWVyKHZv aWQgKCpjYikodW5pb24gc2lndmFsKSwgdm9pZCAqcHRyLCBpbnQgaSwgdWludDY0X3QgbnNlYykK K3sKKyAgICAgICAgdGltZXJfdCB0aW1lcjsKKyAgICAgICAgc3RydWN0IHNpZ2V2ZW50IHNldjsK KyAgICAgICAgc3RydWN0IGl0aW1lcnNwZWMgaXRzOworCisgICAgICAgIG1lbXNldCgmc2V2LCAw LCBzaXplb2Yoc2V2KSk7CisgICAgICAgIHNldi5zaWdldl9ub3RpZnkgPSBTSUdFVl9USFJFQUQ7 CisJaWYgKHB0cikKKwkJc2V2LnNpZ2V2X3ZhbHVlLnNpdmFsX3B0ciA9IHB0cjsKKwllbHNlCisJ CXNldi5zaWdldl92YWx1ZS5zaXZhbF9pbnQgPSBpOworICAgICAgICBzZXYuc2lnZXZfbm90aWZ5 X2Z1bmN0aW9uID0gY2I7CisgICAgICAgIGlndF9hc3NlcnQodGltZXJfY3JlYXRlKENMT0NLX01P Tk9UT05JQywgJnNldiwgJnRpbWVyKSA9PSAwKTsKKworICAgICAgICBtZW1zZXQoJml0cywgMCwg c2l6ZW9mKGl0cykpOworICAgICAgICBpdHMuaXRfdmFsdWUudHZfc2VjID0gbnNlYyAvIE5TRUNf UEVSX1NFQzsKKyAgICAgICAgaXRzLml0X3ZhbHVlLnR2X25zZWMgPSBuc2VjICUgTlNFQ19QRVJf U0VDOworICAgICAgICBpZ3RfYXNzZXJ0KHRpbWVyX3NldHRpbWUodGltZXIsIDAsICZpdHMsIE5V TEwpID09IDApOworCisJcmV0dXJuIHRpbWVyOworfQorCitzdHJ1Y3QgZmRfaGFuZGxlX3BhaXIg eworCWludCBmZDsKKwl1aW50MzJfdCBoYW5kbGU7CisJdWludDY0X3QgcG9pbnQ7Cit9OworCitz dGF0aWMgdm9pZAordGltZWxpbmVfaW5jX2Z1bmModW5pb24gc2lndmFsIHNpZ3ZhbCkKK3sKKwlz d19zeW5jX3RpbWVsaW5lX2luYyhzaWd2YWwuc2l2YWxfaW50LCAxKTsKK30KKworc3RhdGljIHZv aWQKK3N5bmNvYmpfdHJpZ2dlcl9mcmVlX3BhaXJfZnVuYyh1bmlvbiBzaWd2YWwgc2lndmFsKQor eworCXN0cnVjdCBmZF9oYW5kbGVfcGFpciAqcGFpciA9IHNpZ3ZhbC5zaXZhbF9wdHI7CisJc3lu Y29ial90cmlnZ2VyKHBhaXItPmZkLCBwYWlyLT5oYW5kbGUsIHBhaXItPnBvaW50KTsKKwlmcmVl KHBhaXIpOworfQorCitzdGF0aWMgdGltZXJfdAorc3luY29ial90cmlnZ2VyX2RlbGF5ZWQoaW50 IGZkLCB1aW50MzJfdCBzeW5jb2JqLCB1aW50NjRfdCBwb2ludCwgdWludDY0X3QgbnNlYykKK3sK KwlzdHJ1Y3QgZmRfaGFuZGxlX3BhaXIgKnBhaXIgPSBtYWxsb2Moc2l6ZW9mKCpwYWlyKSk7CisK KwlwYWlyLT5mZCA9IGZkOworCXBhaXItPmhhbmRsZSA9IHN5bmNvYmo7CisJcGFpci0+cG9pbnQg PSBwb2ludDsKKworCXJldHVybiBzZXRfdGltZXIoc3luY29ial90cmlnZ2VyX2ZyZWVfcGFpcl9m dW5jLCBwYWlyLCAwLCBuc2VjKTsKK30KKworc3RhdGljIHZvaWQKK3Rlc3Rfd2FpdF9iYWRfZmxh Z3MoaW50IGZkKQoreworCXN0cnVjdCBkcm1fc3luY29ial90aW1lbGluZV93YWl0IHdhaXQgPSB7 IDAgfTsKKwl3YWl0LmZsYWdzID0gMHhkZWFkYmVlZjsKKwlpZ3RfYXNzZXJ0X2VxKF9fc3luY29i al90aW1lbGluZV93YWl0X2lvY3RsKGZkLCAmd2FpdCksIC1FSU5WQUwpOworfQorCitzdGF0aWMg dm9pZAordGVzdF93YWl0X3plcm9faGFuZGxlcyhpbnQgZmQpCit7CisJc3RydWN0IGRybV9zeW5j b2JqX3RpbWVsaW5lX3dhaXQgd2FpdCA9IHsgMCB9OworCWlndF9hc3NlcnRfZXEoX19zeW5jb2Jq X3RpbWVsaW5lX3dhaXRfaW9jdGwoZmQsICZ3YWl0KSwgLUVJTlZBTCk7Cit9CisKK3N0YXRpYyB2 b2lkCit0ZXN0X3dhaXRfaWxsZWdhbF9oYW5kbGUoaW50IGZkKQoreworCXN0cnVjdCBkcm1fc3lu Y29ial90aW1lbGluZV93YWl0IHdhaXQgPSB7IDAgfTsKKwl1aW50MzJfdCBoYW5kbGUgPSAwOwor CisJd2FpdC5jb3VudF9oYW5kbGVzID0gMTsKKwl3YWl0LmhhbmRsZXMgPSB0b191c2VyX3BvaW50 ZXIoJmhhbmRsZSk7CisJaWd0X2Fzc2VydF9lcShfX3N5bmNvYmpfdGltZWxpbmVfd2FpdF9pb2N0 bChmZCwgJndhaXQpLCAtRU5PRU5UKTsKK30KKworc3RhdGljIHZvaWQKK3Rlc3RfcXVlcnlfemVy b19oYW5kbGVzKGludCBmZCkKK3sKKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmVfYXJyYXkg YXJncyA9IHsgMCB9OworCWludCByZXQ7CisKKwlyZXQgPSBkcm1Jb2N0bChmZCwgRFJNX0lPQ1RM X1NZTkNPQkpfUVVFUlksICZhcmdzKTsKKwlpZ3RfYXNzZXJ0KHJldCA9PSAtMSAmJiBlcnJubyA9 PSAgRUlOVkFMKTsKK30KKworc3RhdGljIHZvaWQKK3Rlc3RfcXVlcnlfaWxsZWdhbF9oYW5kbGUo aW50IGZkKQoreworCXN0cnVjdCBkcm1fc3luY29ial90aW1lbGluZV9hcnJheSBhcmdzID0geyAw IH07CisJdWludDMyX3QgaGFuZGxlID0gMDsKKwlpbnQgcmV0OworCisJYXJncy5jb3VudF9oYW5k bGVzID0gMTsKKwlhcmdzLmhhbmRsZXMgPSB0b191c2VyX3BvaW50ZXIoJmhhbmRsZSk7CisJcmV0 ID0gZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9TWU5DT0JKX1FVRVJZLCAmYXJncyk7CisJaWd0X2Fz c2VydChyZXQgPT0gLTEgJiYgZXJybm8gPT0gRU5PRU5UKTsKK30KKworc3RhdGljIHZvaWQKK3Rl c3RfcXVlcnlfb25lX2lsbGVnYWxfaGFuZGxlKGludCBmZCkKK3sKKwlzdHJ1Y3QgZHJtX3N5bmNv YmpfdGltZWxpbmVfYXJyYXkgYXJyYXkgPSB7IDAgfTsKKwl1aW50MzJfdCBzeW5jb2Jqc1szXTsK Kwl1aW50NjRfdCBpbml0aWFsX3BvaW50ID0gMTsKKwlpbnQgcmV0OworCisJc3luY29ianNbMF0g PSBzeW5jb2JqX2NyZWF0ZShmZCwgMCk7CisJc3luY29ianNbMV0gPSAwOworCXN5bmNvYmpzWzJd ID0gc3luY29ial9jcmVhdGUoZmQsIDApOworCisJc3luY29ial90aW1lbGluZV9zaWduYWwoZmQs ICZzeW5jb2Jqc1swXSwgJmluaXRpYWxfcG9pbnQsIDEpOworCXN5bmNvYmpfdGltZWxpbmVfc2ln bmFsKGZkLCAmc3luY29ianNbMl0sICZpbml0aWFsX3BvaW50LCAxKTsKKwlpZ3RfYXNzZXJ0X2Vx KHN5bmNvYmpfdGltZWxpbmVfd2FpdF9lcnIoZmQsICZzeW5jb2Jqc1swXSwKKwkJCQkJCSZpbml0 aWFsX3BvaW50LCAxLCAwLCAwKSwgMCk7CisJaWd0X2Fzc2VydF9lcShzeW5jb2JqX3RpbWVsaW5l X3dhaXRfZXJyKGZkLCAmc3luY29ianNbMl0sCisJCQkJCQkmaW5pdGlhbF9wb2ludCwgMSwgMCwg MCksIDApOworCisJYXJyYXkuY291bnRfaGFuZGxlcyA9IDM7CisJYXJyYXkuaGFuZGxlcyA9IHRv X3VzZXJfcG9pbnRlcihzeW5jb2Jqcyk7CisJcmV0ID0gZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9T WU5DT0JKX1FVRVJZLCAmYXJyYXkpOworCWlndF9hc3NlcnQocmV0ID09IC0xICYmIGVycm5vID09 IEVOT0VOVCk7CisKKwlzeW5jb2JqX2Rlc3Ryb3koZmQsIHN5bmNvYmpzWzBdKTsKKwlzeW5jb2Jq X2Rlc3Ryb3koZmQsIHN5bmNvYmpzWzJdKTsKK30KKworc3RhdGljIHZvaWQKK3Rlc3RfcXVlcnlf YmFkX3BhZChpbnQgZmQpCit7CisJc3RydWN0IGRybV9zeW5jb2JqX3RpbWVsaW5lX2FycmF5IGFy cmF5ID0geyAwIH07CisJdWludDMyX3QgaGFuZGxlID0gMDsKKwlpbnQgcmV0OworCisJYXJyYXku cGFkID0gMHhkZWFkYmVlZjsKKwlhcnJheS5jb3VudF9oYW5kbGVzID0gMTsKKwlhcnJheS5oYW5k bGVzID0gdG9fdXNlcl9wb2ludGVyKCZoYW5kbGUpOworCXJldCA9IGRybUlvY3RsKGZkLCBEUk1f SU9DVExfU1lOQ09CSl9RVUVSWSwgJmFycmF5KTsKKwlpZ3RfYXNzZXJ0KHJldCA9PSAtMSAmJiBl cnJubyA9PSBFSU5WQUwpOworfQorCitzdGF0aWMgdm9pZAordGVzdF9zaWduYWxfemVyb19oYW5k bGVzKGludCBmZCkKK3sKKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmVfYXJyYXkgYXJncyA9 IHsgMCB9OworCWludCByZXQ7CisKKwlyZXQgPSBkcm1Jb2N0bChmZCwgRFJNX0lPQ1RMX1NZTkNP QkpfVElNRUxJTkVfU0lHTkFMLCAmYXJncyk7CisJaWd0X2Fzc2VydChyZXQgPT0gLTEgJiYgZXJy bm8gPT0gIEVJTlZBTCk7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3NpZ25hbF9pbGxlZ2FsX2hh bmRsZShpbnQgZmQpCit7CisJc3RydWN0IGRybV9zeW5jb2JqX3RpbWVsaW5lX2FycmF5IGFyZ3Mg PSB7IDAgfTsKKwl1aW50MzJfdCBoYW5kbGUgPSAwOworCWludCByZXQ7CisKKwlhcmdzLmNvdW50 X2hhbmRsZXMgPSAxOworCWFyZ3MuaGFuZGxlcyA9IHRvX3VzZXJfcG9pbnRlcigmaGFuZGxlKTsK KwlyZXQgPSBkcm1Jb2N0bChmZCwgRFJNX0lPQ1RMX1NZTkNPQkpfVElNRUxJTkVfU0lHTkFMLCAm YXJncyk7CisJaWd0X2Fzc2VydChyZXQgPT0gLTEgJiYgZXJybm8gPT0gRU5PRU5UKTsKK30KKwor c3RhdGljIHZvaWQKK3Rlc3Rfc2lnbmFsX2lsbGVnYWxfcG9pbnQoaW50IGZkKQoreworCXN0cnVj dCBkcm1fc3luY29ial90aW1lbGluZV9hcnJheSBhcmdzID0geyAwIH07CisJdWludDMyX3QgaGFu ZGxlID0gMTsKKwl1aW50NjRfdCBwb2ludCA9IDA7CisJaW50IHJldDsKKworCWFyZ3MuY291bnRf aGFuZGxlcyA9IDE7CisJYXJncy5oYW5kbGVzID0gdG9fdXNlcl9wb2ludGVyKCZoYW5kbGUpOwor CWFyZ3MucG9pbnRzID0gdG9fdXNlcl9wb2ludGVyKCZwb2ludCk7CisJcmV0ID0gZHJtSW9jdGwo ZmQsIERSTV9JT0NUTF9TWU5DT0JKX1RJTUVMSU5FX1NJR05BTCwgJmFyZ3MpOworCWlndF9hc3Nl cnQocmV0ID09IC0xICYmIGVycm5vID09IEVOT0VOVCk7Cit9CitzdGF0aWMgdm9pZAordGVzdF9z aWduYWxfb25lX2lsbGVnYWxfaGFuZGxlKGludCBmZCkKK3sKKwlzdHJ1Y3QgZHJtX3N5bmNvYmpf dGltZWxpbmVfYXJyYXkgYXJyYXkgPSB7IDAgfTsKKwl1aW50MzJfdCBzeW5jb2Jqc1szXTsKKwl1 aW50NjRfdCBpbml0aWFsX3BvaW50ID0gMTsKKwlpbnQgcmV0OworCisJc3luY29ianNbMF0gPSBz eW5jb2JqX2NyZWF0ZShmZCwgMCk7CisJc3luY29ianNbMV0gPSAwOworCXN5bmNvYmpzWzJdID0g c3luY29ial9jcmVhdGUoZmQsIDApOworCisJc3luY29ial90aW1lbGluZV9zaWduYWwoZmQsICZz eW5jb2Jqc1swXSwgJmluaXRpYWxfcG9pbnQsIDEpOworCXN5bmNvYmpfdGltZWxpbmVfc2lnbmFs KGZkLCAmc3luY29ianNbMl0sICZpbml0aWFsX3BvaW50LCAxKTsKKwlpZ3RfYXNzZXJ0X2VxKHN5 bmNvYmpfdGltZWxpbmVfd2FpdF9lcnIoZmQsICZzeW5jb2Jqc1swXSwKKwkJCQkJCSZpbml0aWFs X3BvaW50LCAxLCAwLCAwKSwgMCk7CisJaWd0X2Fzc2VydF9lcShzeW5jb2JqX3RpbWVsaW5lX3dh aXRfZXJyKGZkLCAmc3luY29ianNbMl0sCisJCQkJCQkmaW5pdGlhbF9wb2ludCwgMSwgMCwgMCks IDApOworCisJYXJyYXkuY291bnRfaGFuZGxlcyA9IDM7CisJYXJyYXkuaGFuZGxlcyA9IHRvX3Vz ZXJfcG9pbnRlcihzeW5jb2Jqcyk7CisJcmV0ID0gZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9TWU5D T0JKX1RJTUVMSU5FX1NJR05BTCwgJmFycmF5KTsKKwlpZ3RfYXNzZXJ0KHJldCA9PSAtMSAmJiBl cnJubyA9PSBFTk9FTlQpOworCisJc3luY29ial9kZXN0cm95KGZkLCBzeW5jb2Jqc1swXSk7CisJ c3luY29ial9kZXN0cm95KGZkLCBzeW5jb2Jqc1syXSk7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0 X3NpZ25hbF9iYWRfcGFkKGludCBmZCkKK3sKKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmVf YXJyYXkgYXJyYXkgPSB7IDAgfTsKKwl1aW50MzJfdCBoYW5kbGUgPSAwOworCWludCByZXQ7CisK KwlhcnJheS5wYWQgPSAweGRlYWRiZWVmOworCWFycmF5LmNvdW50X2hhbmRsZXMgPSAxOworCWFy cmF5LmhhbmRsZXMgPSB0b191c2VyX3BvaW50ZXIoJmhhbmRsZSk7CisJcmV0ID0gZHJtSW9jdGwo ZmQsIERSTV9JT0NUTF9TWU5DT0JKX1RJTUVMSU5FX1NJR05BTCwgJmFycmF5KTsKKwlpZ3RfYXNz ZXJ0KHJldCA9PSAtMSAmJiBlcnJubyA9PSBFSU5WQUwpOworfQorCitzdGF0aWMgdm9pZAordGVz dF9zaWduYWxfYXJyYXkoaW50IGZkKQoreworCXVpbnQzMl90IHN5bmNvYmpzWzRdOworCXVpbnQ2 NF90IHBvaW50c1s0XSA9IHsxLCAxLCAxLCAwfTsKKworCXN5bmNvYmpzWzBdID0gc3luY29ial9j cmVhdGUoZmQsIDApOworCXN5bmNvYmpzWzFdID0gc3luY29ial9jcmVhdGUoZmQsIDApOworCXN5 bmNvYmpzWzJdID0gc3luY29ial9jcmVhdGUoZmQsIDApOworCXN5bmNvYmpzWzNdID0gc3luY29i al9jcmVhdGUoZmQsIDApOworCisJc3luY29ial90aW1lbGluZV9zaWduYWwoZmQsIHN5bmNvYmpz LCBwb2ludHMsIDQpOworCWlndF9hc3NlcnRfZXEoc3luY29ial90aW1lbGluZV93YWl0X2Vycihm ZCwgc3luY29ianMsCisJCQkJCQlwb2ludHMsIDMsIDAsIDApLCAwKTsKKwlpZ3RfYXNzZXJ0X2Vx KHN5bmNvYmpfd2FpdF9lcnIoZmQsICZzeW5jb2Jqc1szXSwgMSwgMCwgMCksIDApOworCisJc3lu Y29ial9kZXN0cm95KGZkLCBzeW5jb2Jqc1swXSk7CisJc3luY29ial9kZXN0cm95KGZkLCBzeW5j b2Jqc1sxXSk7CisJc3luY29ial9kZXN0cm95KGZkLCBzeW5jb2Jqc1syXSk7CisJc3luY29ial9k ZXN0cm95KGZkLCBzeW5jb2Jqc1szXSk7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3RyYW5zZmVy X2lsbGVnYWxfaGFuZGxlKGludCBmZCkKK3sKKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfdHJhbnNmZXIg YXJncyA9IHsgMCB9OworCXVpbnQzMl90IGhhbmRsZSA9IDA7CisJaW50IHJldDsKKworCWFyZ3Mu c3JjX2hhbmRsZSA9IHRvX3VzZXJfcG9pbnRlcigmaGFuZGxlKTsKKwlhcmdzLmRzdF9oYW5kbGUg PSB0b191c2VyX3BvaW50ZXIoJmhhbmRsZSk7CisJYXJncy5zcmNfcG9pbnQgPSAxOworCWFyZ3Mu ZHN0X3BvaW50ID0gMDsKKwlyZXQgPSBkcm1Jb2N0bChmZCwgRFJNX0lPQ1RMX1NZTkNPQkpfVFJB TlNGRVIsICZhcmdzKTsKKwlpZ3RfYXNzZXJ0KHJldCA9PSAtMSAmJiBlcnJubyA9PSBFTk9FTlQp OworfQorCitzdGF0aWMgdm9pZAordGVzdF90cmFuc2Zlcl9iYWRfcGFkKGludCBmZCkKK3sKKwlz dHJ1Y3QgZHJtX3N5bmNvYmpfdHJhbnNmZXIgYXJnID0geyAwIH07CisJdWludDMyX3QgaGFuZGxl ID0gMDsKKwlpbnQgcmV0OworCisJYXJnLnBhZCA9IDB4ZGVhZGJlZWY7CisJYXJnLnNyY19oYW5k bGUgPSB0b191c2VyX3BvaW50ZXIoJmhhbmRsZSk7CisJYXJnLmRzdF9oYW5kbGUgPSB0b191c2Vy X3BvaW50ZXIoJmhhbmRsZSk7CisJcmV0ID0gZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9TWU5DT0JK X1RSQU5TRkVSLCAmYXJnKTsKKwlpZ3RfYXNzZXJ0KHJldCA9PSAtMSAmJiBlcnJubyA9PSBFSU5W QUwpOworfQorCisjZGVmaW5lIFdBSVRfRk9SX1NVQk1JVAkJKDEgPDwgMCkKKyNkZWZpbmUgV0FJ VF9BTEwJCSgxIDw8IDEpCisjZGVmaW5lIFdBSVRfQVZBSUxBQkxFCQkoMSA8PCAyKQorI2RlZmlu ZSBXQUlUX1VOU1VCTUlUVEVECSgxIDw8IDMpCisjZGVmaW5lIFdBSVRfU1VCTUlUVEVECQkoMSA8 PCA0KQorI2RlZmluZSBXQUlUX1NJR05BTEVECQkoMSA8PCA1KQorI2RlZmluZSBXQUlUX0ZMQUdT X01BWAkJKDEgPDwgNikgLSAxCisKK3N0YXRpYyB1aW50MzJfdAorZmxhZ3NfZm9yX3Rlc3RfZmxh Z3ModWludDMyX3QgdGVzdF9mbGFncykKK3sKKwl1aW50MzJfdCBmbGFncyA9IDA7CisKKwlpZiAo dGVzdF9mbGFncyAmIFdBSVRfRk9SX1NVQk1JVCkKKwkJZmxhZ3MgfD0gRFJNX1NZTkNPQkpfV0FJ VF9GTEFHU19XQUlUX0ZPUl9TVUJNSVQ7CisKKwlpZiAodGVzdF9mbGFncyAmIFdBSVRfQVZBSUxB QkxFKQorCQlmbGFncyB8PSBEUk1fU1lOQ09CSl9XQUlUX0ZMQUdTX1dBSVRfQVZBSUxBQkxFOwor CisJaWYgKHRlc3RfZmxhZ3MgJiBXQUlUX0FMTCkKKwkJZmxhZ3MgfD0gRFJNX1NZTkNPQkpfV0FJ VF9GTEFHU19XQUlUX0FMTDsKKworCXJldHVybiBmbGFnczsKK30KKworc3RhdGljIHZvaWQKK3Rl c3Rfc2luZ2xlX3dhaXQoaW50IGZkLCB1aW50MzJfdCB0ZXN0X2ZsYWdzLCBpbnQgZXhwZWN0KQor eworCXVpbnQzMl90IHN5bmNvYmogPSBzeW5jb2JqX2NyZWF0ZShmZCwgMCk7CisJdWludDMyX3Qg ZmxhZ3MgPSBmbGFnc19mb3JfdGVzdF9mbGFncyh0ZXN0X2ZsYWdzKTsKKwl1aW50NjRfdCBwb2lu dCA9IDE7CisJaW50IHRpbWVsaW5lID0gLTE7CisKKwlpZiAodGVzdF9mbGFncyAmIChXQUlUX1NV Qk1JVFRFRCB8IFdBSVRfU0lHTkFMRUQpKQorCQl0aW1lbGluZSA9IHN5bmNvYmpfYXR0YWNoX3N3 X3N5bmMoZmQsIHN5bmNvYmosIHBvaW50KTsKKworCWlmICh0ZXN0X2ZsYWdzICYgV0FJVF9TSUdO QUxFRCkKKwkJc3dfc3luY190aW1lbGluZV9pbmModGltZWxpbmUsIDEpOworCisJaWd0X2Fzc2Vy dF9lcShzeW5jb2JqX3RpbWVsaW5lX3dhaXRfZXJyKGZkLCAmc3luY29iaiwgJnBvaW50LCAxLAor CQkJCQkJMCwgZmxhZ3MpLCBleHBlY3QpOworCisJaWd0X2Fzc2VydF9lcShzeW5jb2JqX3RpbWVs aW5lX3dhaXRfZXJyKGZkLCAmc3luY29iaiwgJnBvaW50LCAxLAorCQkJCQkJc2hvcnRfdGltZW91 dCgpLCBmbGFncyksIGV4cGVjdCk7CisKKwlpZiAoZXhwZWN0ICE9IC1FVElNRSkgeworCQlpZ3Rf YXNzZXJ0X2VxKHN5bmNvYmpfdGltZWxpbmVfd2FpdF9lcnIoZmQsICZzeW5jb2JqLCAmcG9pbnQs IDEsCisJCQkJCQkJVUlOVDY0X01BWCwgZmxhZ3MpLCBleHBlY3QpOworCX0KKworCXN5bmNvYmpf ZGVzdHJveShmZCwgc3luY29iaik7CisJaWYgKHRpbWVsaW5lICE9IC0xKQorCQljbG9zZSh0aW1l bGluZSk7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3dhaXRfZGVsYXllZF9zaWduYWwoaW50IGZk LCB1aW50MzJfdCB0ZXN0X2ZsYWdzKQoreworCXVpbnQzMl90IHN5bmNvYmogPSBzeW5jb2JqX2Ny ZWF0ZShmZCwgMCk7CisJdWludDMyX3QgZmxhZ3MgPSBmbGFnc19mb3JfdGVzdF9mbGFncyh0ZXN0 X2ZsYWdzKTsKKwl1aW50NjRfdCBwb2ludCA9IDE7CisJaW50IHRpbWVsaW5lID0gLTE7CisJdGlt ZXJfdCB0aW1lcjsKKworCWlmICh0ZXN0X2ZsYWdzICYgV0FJVF9GT1JfU1VCTUlUKSB7CisJCXRp bWVyID0gc3luY29ial90cmlnZ2VyX2RlbGF5ZWQoZmQsIHN5bmNvYmosIHBvaW50LCBTSE9SVF9U SU1FX05TRUMpOworCX0gZWxzZSB7CisJCXRpbWVsaW5lID0gc3luY29ial9hdHRhY2hfc3dfc3lu YyhmZCwgc3luY29iaiwgcG9pbnQpOworCQl0aW1lciA9IHNldF90aW1lcih0aW1lbGluZV9pbmNf ZnVuYywgTlVMTCwKKwkJCQkgIHRpbWVsaW5lLCBTSE9SVF9USU1FX05TRUMpOworCX0KKworCWln dF9hc3NlcnQoc3luY29ial90aW1lbGluZV93YWl0KGZkLCAmc3luY29iaiwgJnBvaW50LCAxLAor CQkJCWdldHRpbWVfbnMoKSArIFNIT1JUX1RJTUVfTlNFQyAqIDIsCisJCQkJZmxhZ3MsIE5VTEwp KTsKKworCXRpbWVyX2RlbGV0ZSh0aW1lcik7CisKKwlpZiAodGltZWxpbmUgIT0gLTEpCisJCWNs b3NlKHRpbWVsaW5lKTsKKworCXN5bmNvYmpfZGVzdHJveShmZCwgc3luY29iaik7Cit9CisKK3N0 YXRpYyB2b2lkCit0ZXN0X3Jlc2V0X3Vuc2lnbmFsZWQoaW50IGZkKQoreworCXVpbnQzMl90IHN5 bmNvYmogPSBzeW5jb2JqX2NyZWF0ZShmZCwgMCk7CisJdWludDY0X3QgcG9pbnQgPSAxOworCisJ aWd0X2Fzc2VydF9lcShzeW5jb2JqX3RpbWVsaW5lX3dhaXRfZXJyKGZkLCAmc3luY29iaiwgJnBv aW50LAorCQkJCQkJMSwgMCwgMCksIC1FSU5WQUwpOworCisJc3luY29ial9yZXNldChmZCwgJnN5 bmNvYmosIDEpOworCisJaWd0X2Fzc2VydF9lcShzeW5jb2JqX3RpbWVsaW5lX3dhaXRfZXJyKGZk LCAmc3luY29iaiwgJnBvaW50LAorCQkJCQkJMSwgMCwgMCksIC1FSU5WQUwpOworCisJc3luY29i al9kZXN0cm95KGZkLCBzeW5jb2JqKTsKK30KKworc3RhdGljIHZvaWQKK3Rlc3RfcmVzZXRfc2ln bmFsZWQoaW50IGZkKQoreworCXVpbnQzMl90IHN5bmNvYmogPSBzeW5jb2JqX2NyZWF0ZShmZCwg MCk7CisJdWludDY0X3QgcG9pbnQgPSAxOworCisJc3luY29ial90cmlnZ2VyKGZkLCBzeW5jb2Jq LCBwb2ludCk7CisKKwlpZ3RfYXNzZXJ0X2VxKHN5bmNvYmpfdGltZWxpbmVfd2FpdF9lcnIoZmQs ICZzeW5jb2JqLCAmcG9pbnQsCisJCQkJCQkxLCAwLCAwKSwgMCk7CisKKwlzeW5jb2JqX3Jlc2V0 KGZkLCAmc3luY29iaiwgMSk7CisKKwlpZ3RfYXNzZXJ0X2VxKHN5bmNvYmpfdGltZWxpbmVfd2Fp dF9lcnIoZmQsICZzeW5jb2JqLCAmcG9pbnQsCisJCQkJCQkxLCAwLCAwKSwgLUVJTlZBTCk7CisK KwlzeW5jb2JqX2Rlc3Ryb3koZmQsIHN5bmNvYmopOworfQorCitzdGF0aWMgdm9pZAordGVzdF9y ZXNldF9tdWx0aXBsZV9zaWduYWxlZChpbnQgZmQpCit7CisJdWludDY0X3QgcG9pbnRzWzNdID0g ezEsIDEsIDF9OworCXVpbnQzMl90IHN5bmNvYmpzWzNdOworCWludCBpOworCisJZm9yIChpID0g MDsgaSA8IDM7IGkrKykgeworCQlzeW5jb2Jqc1tpXSA9IHN5bmNvYmpfY3JlYXRlKGZkLCAwKTsK KwkJc3luY29ial90cmlnZ2VyKGZkLCBzeW5jb2Jqc1tpXSwgcG9pbnRzW2ldKTsKKwl9CisKKwlp Z3RfYXNzZXJ0X2VxKHN5bmNvYmpfdGltZWxpbmVfd2FpdF9lcnIoZmQsIHN5bmNvYmpzLCBwb2lu dHMsIDMsIDAsIDApLCAwKTsKKworCXN5bmNvYmpfcmVzZXQoZmQsIHN5bmNvYmpzLCAzKTsKKwor CWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJaWd0X2Fzc2VydF9lcShzeW5jb2JqX3RpbWVs aW5lX3dhaXRfZXJyKGZkLCAmc3luY29ianNbaV0sCisJCQkJCQkJJnBvaW50c1tpXSwgMSwKKwkJ CQkJCQkwLCAwKSwgLUVJTlZBTCk7CisJCXN5bmNvYmpfZGVzdHJveShmZCwgc3luY29ianNbaV0p OworCX0KK30KKworc3RhdGljIHZvaWQKK3Jlc2V0X2FuZF90cmlnZ2VyX2Z1bmModW5pb24gc2ln dmFsIHNpZ3ZhbCkKK3sKKwlzdHJ1Y3QgZmRfaGFuZGxlX3BhaXIgKnBhaXIgPSBzaWd2YWwuc2l2 YWxfcHRyOworCXN5bmNvYmpfcmVzZXQocGFpci0+ZmQsICZwYWlyLT5oYW5kbGUsIDEpOworCXN5 bmNvYmpfdHJpZ2dlcihwYWlyLT5mZCwgcGFpci0+aGFuZGxlLCBwYWlyLT5wb2ludCk7Cit9CisK K3N0YXRpYyB2b2lkCit0ZXN0X3Jlc2V0X2R1cmluZ193YWl0X2Zvcl9zdWJtaXQoaW50IGZkKQor eworCXVpbnQzMl90IHN5bmNvYmogPSBzeW5jb2JqX2NyZWF0ZShmZCwgMCk7CisJdWludDMyX3Qg ZmxhZ3MgPSBEUk1fU1lOQ09CSl9XQUlUX0ZMQUdTX1dBSVRfRk9SX1NVQk1JVDsKKwlzdHJ1Y3Qg ZmRfaGFuZGxlX3BhaXIgcGFpcjsKKwl1aW50NjRfdCBwb2ludCA9IDE7CisJdGltZXJfdCB0aW1l cjsKKworCXBhaXIuZmQgPSBmZDsKKwlwYWlyLmhhbmRsZSA9IHN5bmNvYmo7CisJdGltZXIgPSBz ZXRfdGltZXIocmVzZXRfYW5kX3RyaWdnZXJfZnVuYywgJnBhaXIsIDAsIFNIT1JUX1RJTUVfTlNF Qyk7CisKKwkvKiBBIHJlc2V0IHNob3VsZCBiZSBhIG5vLW9wIGV2ZW4gaWYgd2UncmUgaW4gdGhl IG1pZGRsZSBvZiBhIHdhaXQgKi8KKwlpZ3RfYXNzZXJ0KHN5bmNvYmpfdGltZWxpbmVfd2FpdChm ZCwgJnN5bmNvYmosICZwb2ludCwgMSwKKwkJCQlnZXR0aW1lX25zKCkgKyBTSE9SVF9USU1FX05T RUMgKiAyLAorCQkJCWZsYWdzLCBOVUxMKSk7CisKKwl0aW1lcl9kZWxldGUodGltZXIpOworCisJ c3luY29ial9kZXN0cm95KGZkLCBzeW5jb2JqKTsKK30KKworc3RhdGljIHZvaWQKK3Rlc3Rfc2ln bmFsKGludCBmZCkKK3sKKwl1aW50MzJfdCBzeW5jb2JqID0gc3luY29ial9jcmVhdGUoZmQsIDAp OworCXVpbnQzMl90IGZsYWdzID0gRFJNX1NZTkNPQkpfV0FJVF9GTEFHU19XQUlUX0ZPUl9TVUJN SVQ7CisJdWludDY0X3QgcG9pbnQgPSAxOworCisJaWd0X2Fzc2VydF9lcShzeW5jb2JqX3RpbWVs aW5lX3dhaXRfZXJyKGZkLCAmc3luY29iaiwgJnBvaW50LAorCQkJCQkJMSwgMCwgMCksIC1FSU5W QUwpOworCWlndF9hc3NlcnRfZXEoc3luY29ial90aW1lbGluZV93YWl0X2VycihmZCwgJnN5bmNv YmosICZwb2ludCwKKwkJCQkJCTEsIDAsIGZsYWdzKSwgLUVUSU1FKTsKKworCXN5bmNvYmpfdGlt ZWxpbmVfc2lnbmFsKGZkLCAmc3luY29iaiwgJnBvaW50LCAxKTsKKworCWlndF9hc3NlcnQoc3lu Y29ial90aW1lbGluZV93YWl0KGZkLCAmc3luY29iaiwgJnBvaW50LCAxLCAwLCAwLCBOVUxMKSk7 CisJaWd0X2Fzc2VydChzeW5jb2JqX3RpbWVsaW5lX3dhaXQoZmQsICZzeW5jb2JqLCAmcG9pbnQs IDEsIDAsIGZsYWdzLCBOVUxMKSk7CisKKwlzeW5jb2JqX2Rlc3Ryb3koZmQsIHN5bmNvYmopOwor fQorCitzdGF0aWMgdm9pZAordGVzdF9tdWx0aV93YWl0KGludCBmZCwgdWludDMyX3QgdGVzdF9m bGFncywgaW50IGV4cGVjdCkKK3sKKwl1aW50MzJfdCB0ZmxhZywgZmxhZ3M7CisJaW50IGksIGZp ZHgsIHRpbWVsaW5lOworCXVpbnQ2NF90IHBvaW50c1s1XSA9IHsKKwkJMSArIHJhbmQoKSAlIDEw MDAsCisJCTAsIC8qIG5vbiB0aW1lbGluZSBzeW5jb2JqICovCisJCTEgKyByYW5kKCkgJSAxMDAw LAorCQkxICsgcmFuZCgpICUgMTAwMCwKKwkJMCwgLyogbm9uIHRpbWVsaW5lIHN5bmNvYmogKi8K Kwl9OworCXVpbnQzMl90IHN5bmNvYmpzW0FSUkFZX1NJWkUocG9pbnRzKV07CisKKwlmb3IgKGkg PSAwOyBpIDwgQVJSQVlfU0laRShwb2ludHMpOyBpKyspCisJCXN5bmNvYmpzW2ldID0gc3luY29i al9jcmVhdGUoZmQsIDApOworCisJZmxhZ3MgPSBmbGFnc19mb3JfdGVzdF9mbGFncyh0ZXN0X2Zs YWdzKTsKKwl0ZXN0X2ZsYWdzICY9IH4oV0FJVF9BTEwgfCBXQUlUX0ZPUl9TVUJNSVQgfCBXQUlU X0FWQUlMQUJMRSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwb2ludHMpOyBpKysp IHsKKwkJZmlkeCA9IGZmcyh0ZXN0X2ZsYWdzKSAtIDE7CisJCXRmbGFnID0gKDEgPDwgZmlkeCk7 CisKKwkJaWYgKHRlc3RfZmxhZ3MgJiB+dGZsYWcpCisJCQl0ZXN0X2ZsYWdzICY9IH50ZmxhZzsK KworCQlpZiAodGZsYWcgJiAoV0FJVF9TVUJNSVRURUQgfCBXQUlUX1NJR05BTEVEKSkgeworCQkJ dGltZWxpbmUgPSBzeW5jb2JqX2F0dGFjaF9zd19zeW5jKGZkLCBzeW5jb2Jqc1tpXSwKKwkJCQkJ CQkgIHBvaW50c1tpXSk7CisJCX0KKwkJaWYgKHRmbGFnICYgV0FJVF9TSUdOQUxFRCkKKwkJCXN3 X3N5bmNfdGltZWxpbmVfaW5jKHRpbWVsaW5lLCAxKTsKKwl9CisKKwlpZ3RfYXNzZXJ0X2VxKHN5 bmNvYmpfdGltZWxpbmVfd2FpdF9lcnIoZmQsIHN5bmNvYmpzLAorCQkJCQkJcG9pbnRzLCBBUlJB WV9TSVpFKHBvaW50cyksCisJCQkJCQkwLCBmbGFncyksIGV4cGVjdCk7CisKKwlpZ3RfYXNzZXJ0 X2VxKHN5bmNvYmpfdGltZWxpbmVfd2FpdF9lcnIoZmQsIHN5bmNvYmpzLAorCQkJCQkJcG9pbnRz LCBBUlJBWV9TSVpFKHBvaW50cyksCisJCQkJCQlzaG9ydF90aW1lb3V0KCksCisJCQkJCQlmbGFn cyksIGV4cGVjdCk7CisKKwlpZiAoZXhwZWN0ICE9IC1FVElNRSkgeworCQlpZ3RfYXNzZXJ0X2Vx KHN5bmNvYmpfdGltZWxpbmVfd2FpdF9lcnIoZmQsIHN5bmNvYmpzLAorCQkJCQkJCXBvaW50cywg QVJSQVlfU0laRShwb2ludHMpLAorCQkJCQkJCVVJTlQ2NF9NQVgsCisJCQkJCQkJZmxhZ3MpLCBl eHBlY3QpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBvaW50cyk7IGkrKykK KwkJc3luY29ial9kZXN0cm95KGZkLCBzeW5jb2Jqc1tpXSk7Cit9CisKK3N0cnVjdCB3YWl0X3Ro cmVhZF9kYXRhIHsKKwlpbnQgZmQ7CisJc3RydWN0IGRybV9zeW5jb2JqX3RpbWVsaW5lX3dhaXQg d2FpdDsKK307CisKK3N0YXRpYyB2b2lkICoKK3dhaXRfdGhyZWFkX2Z1bmModm9pZCAqZGF0YSkK K3sKKwlzdHJ1Y3Qgd2FpdF90aHJlYWRfZGF0YSAqd2FpdCA9IGRhdGE7CisJaWd0X2Fzc2VydF9l cShfX3N5bmNvYmpfdGltZWxpbmVfd2FpdF9pb2N0bCh3YWl0LT5mZCwgJndhaXQtPndhaXQpLCAw KTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQKK3Rlc3Rfd2FpdF9zbmFwc2hvdChp bnQgZmQsIHVpbnQzMl90IHRlc3RfZmxhZ3MpCit7CisJc3RydWN0IHdhaXRfdGhyZWFkX2RhdGEg d2FpdCA9IHsgMCB9OworCXVpbnQzMl90IHN5bmNvYmpzWzJdOworCXVpbnQ2NF90IHBvaW50c1sy XSA9IHsxLCAxfTsKKwlpbnQgdGltZWxpbmVzWzNdID0geyAtMSwgLTEsIC0xIH07CisJcHRocmVh ZF90IHRocmVhZDsKKworCXN5bmNvYmpzWzBdID0gc3luY29ial9jcmVhdGUoZmQsIDApOworCXN5 bmNvYmpzWzFdID0gc3luY29ial9jcmVhdGUoZmQsIDApOworCisJaWYgKCEodGVzdF9mbGFncyAm IFdBSVRfRk9SX1NVQk1JVCkpIHsKKwkJdGltZWxpbmVzWzBdID0gc3luY29ial9hdHRhY2hfc3df c3luYyhmZCwgc3luY29ianNbMF0sIHBvaW50c1swXSk7CisJCXRpbWVsaW5lc1sxXSA9IHN5bmNv YmpfYXR0YWNoX3N3X3N5bmMoZmQsIHN5bmNvYmpzWzFdLCBwb2ludHNbMV0pOworCX0KKworCXdh aXQuZmQgPSBmZDsKKwl3YWl0LndhaXQuaGFuZGxlcyA9IHRvX3VzZXJfcG9pbnRlcihzeW5jb2Jq cyk7CisJd2FpdC53YWl0LmNvdW50X2hhbmRsZXMgPSAyOworCXdhaXQud2FpdC5wb2ludHMgPSB0 b191c2VyX3BvaW50ZXIocG9pbnRzKTsKKwl3YWl0LndhaXQudGltZW91dF9uc2VjID0gc2hvcnRf dGltZW91dCgpOworCXdhaXQud2FpdC5mbGFncyA9IGZsYWdzX2Zvcl90ZXN0X2ZsYWdzKHRlc3Rf ZmxhZ3MpOworCisJaWd0X2Fzc2VydF9lcShwdGhyZWFkX2NyZWF0ZSgmdGhyZWFkLCBOVUxMLCB3 YWl0X3RocmVhZF9mdW5jLCAmd2FpdCksIDApOworCisJc2xlZXBfbnNlYyhTSE9SVF9USU1FX05T RUMgLyA1KTsKKworCS8qIFRyeSB0byBmYWtlIHRoZSBrZXJuZWwgb3V0IGJ5IHRyaWdnZXJpbmcg b3IgcGFydGlhbGx5IHRyaWdnZXJpbmcKKwkgKiB0aGUgZmlyc3QgZmVuY2UuCisJICovCisJaWYg KHRlc3RfZmxhZ3MgJiBXQUlUX0FMTCkgeworCQkvKiBJZiBpdCdzIFdBSVRfQUxMLCBhY3R1YWxs eSB0cmlnZ2VyIGl0ICovCisJCWlmICh0aW1lbGluZXNbMF0gPT0gLTEpCisJCQlzeW5jb2JqX3Ry aWdnZXIoZmQsIHN5bmNvYmpzWzBdLCBwb2ludHNbMF0pOworCQllbHNlCisJCQlzd19zeW5jX3Rp bWVsaW5lX2luYyh0aW1lbGluZXNbMF0sIDEpOworCX0gZWxzZSBpZiAodGVzdF9mbGFncyAmIFdB SVRfRk9SX1NVQk1JVCkgeworCQl0aW1lbGluZXNbMF0gPSBzeW5jb2JqX2F0dGFjaF9zd19zeW5j KGZkLCBzeW5jb2Jqc1swXSwgcG9pbnRzWzBdKTsKKwl9CisKKwlzbGVlcF9uc2VjKFNIT1JUX1RJ TUVfTlNFQyAvIDUpOworCisJLyogVGhlbiByZXNldCBpdCAqLworCXN5bmNvYmpfcmVzZXQoZmQs ICZzeW5jb2Jqc1swXSwgMSk7CisKKwlzbGVlcF9uc2VjKFNIT1JUX1RJTUVfTlNFQyAvIDUpOwor CisJLyogVGhlbiAic3VibWl0IiBpdCBpbiBhIHdheSB0aGF0IHdpbGwgbmV2ZXIgdHJpZ2dlci4g IFRoaXMgd2F5LCBpZgorCSAqIHRoZSBrZXJuZWwgcGlja3MgdXAgb24gdGhlIG5ldyBmZW5jZSAo aXQgc2hvdWxkbid0KSwgd2UnbGwgZ2V0IGEKKwkgKiB0aW1lb3V0LgorCSAqLworCXRpbWVsaW5l c1syXSA9IHN5bmNvYmpfYXR0YWNoX3N3X3N5bmMoZmQsIHN5bmNvYmpzWzBdLCBwb2ludHNbMF0p OworCisJc2xlZXBfbnNlYyhTSE9SVF9USU1FX05TRUMgLyA1KTsKKworCS8qIE5vdyB0cmlnZ2Vy IHRoZSBzZWNvbmQgZmVuY2UgdG8gY29tcGxldGUgdGhlIHdhaXQgKi8KKworCWlmICh0aW1lbGlu ZXNbMV0gPT0gLTEpCisJCXN5bmNvYmpfdHJpZ2dlcihmZCwgc3luY29ianNbMV0sIHBvaW50c1sx XSk7CisJZWxzZQorCQlzd19zeW5jX3RpbWVsaW5lX2luYyh0aW1lbGluZXNbMV0sIDEpOworCisJ cHRocmVhZF9qb2luKHRocmVhZCwgTlVMTCk7CisKKwlpZiAoISh0ZXN0X2ZsYWdzICYgV0FJVF9B TEwpKQorCQlpZ3RfYXNzZXJ0X2VxKHdhaXQud2FpdC5maXJzdF9zaWduYWxlZCwgMSk7CisKKwlj bG9zZSh0aW1lbGluZXNbMF0pOworCWNsb3NlKHRpbWVsaW5lc1sxXSk7CisJY2xvc2UodGltZWxp bmVzWzJdKTsKKwlzeW5jb2JqX2Rlc3Ryb3koZmQsIHN5bmNvYmpzWzBdKTsKKwlzeW5jb2JqX2Rl c3Ryb3koZmQsIHN5bmNvYmpzWzFdKTsKK30KKworLyogVGhlIG51bWJlcnMgMC03LCBlYWNoIHJl cGVhdGVkIDV4IGFuZCBzaHVmZmxlZC4gKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaHVmZmxl ZF8wXzdfeDRbXSA9IHsKKwkyLCAwLCA2LCAxLCAxLCA0LCA1LCAyLCAwLCA3LCAxLCA3LCA2LCAz LCA0LCA1LAorCTAsIDIsIDcsIDMsIDUsIDQsIDAsIDYsIDcsIDMsIDIsIDUsIDYsIDEsIDQsIDMs Cit9OworCitlbnVtIHN5bmNvYmpfc3RhZ2UgeworCVNUQUdFX1VOU1VCTUlUVEVELAorCVNUQUdF X1NVQk1JVFRFRCwKKwlTVEFHRV9TSUdOQUxFRCwKKwlTVEFHRV9SRVNFVCwKKwlTVEFHRV9SRVNV Qk1JVFRFRCwKK307CisKK3N0YXRpYyB2b2lkCit0ZXN0X3dhaXRfY29tcGxleChpbnQgZmQsIHVp bnQzMl90IHRlc3RfZmxhZ3MpCit7CisJc3RydWN0IHdhaXRfdGhyZWFkX2RhdGEgd2FpdCA9IHsg MCB9OworCXVpbnQzMl90IHN5bmNvYmpzWzhdOworCXVpbnQ2NF90IHBvaW50c1s4XSA9IHsxLCAx LCAxLCAxLCAxLCAxLCAxLCAxfTsKKwllbnVtIHN5bmNvYmpfc3RhZ2Ugc3RhZ2VbOF07CisJaW50 IGksIGosIHRpbWVsaW5lc1s4XTsKKwl1aW50MzJfdCBmaXJzdF9zaWduYWxlZCA9IC0xLCBudW1f c2lnbmFsZWQgPSAwOworCXB0aHJlYWRfdCB0aHJlYWQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgODsg aSsrKSB7CisJCXN0YWdlW2ldID0gU1RBR0VfVU5TVUJNSVRURUQ7CisJCXN5bmNvYmpzW2ldID0g c3luY29ial9jcmVhdGUoZmQsIDApOworCX0KKworCWlmICh0ZXN0X2ZsYWdzICYgV0FJVF9GT1Jf U1VCTUlUKSB7CisJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCQl0aW1lbGluZXNbaV0gPSAt MTsKKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCQkJdGltZWxpbmVzW2ld ID0gc3luY29ial9hdHRhY2hfc3dfc3luYyhmZCwgc3luY29ianNbaV0sCisJCQkJCQkJICAgICAg cG9pbnRzW2ldKTsKKwl9CisKKwl3YWl0LmZkID0gZmQ7CisJd2FpdC53YWl0LmhhbmRsZXMgPSB0 b191c2VyX3BvaW50ZXIoc3luY29ianMpOworCXdhaXQud2FpdC5jb3VudF9oYW5kbGVzID0gMjsK Kwl3YWl0LndhaXQucG9pbnRzID0gdG9fdXNlcl9wb2ludGVyKHBvaW50cyk7CisJd2FpdC53YWl0 LnRpbWVvdXRfbnNlYyA9IGdldHRpbWVfbnMoKSArIE5TRUNTX1BFUl9TRUM7CisJd2FpdC53YWl0 LmZsYWdzID0gZmxhZ3NfZm9yX3Rlc3RfZmxhZ3ModGVzdF9mbGFncyk7CisKKwlpZ3RfYXNzZXJ0 X2VxKHB0aHJlYWRfY3JlYXRlKCZ0aHJlYWQsIE5VTEwsIHdhaXRfdGhyZWFkX2Z1bmMsICZ3YWl0 KSwgMCk7CisKKwlzbGVlcF9uc2VjKE5TRUNTX1BFUl9TRUMgLyA1MCk7CisKKwludW1fc2lnbmFs ZWQgPSAwOworCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKHNodWZmbGVkXzBfN194NCk7IGor KykgeworCQlpID0gc2h1ZmZsZWRfMF83X3g0W2pdOworCQlpZ3RfYXNzZXJ0X2x0KGksIEFSUkFZ X1NJWkUoc3luY29ianMpKTsKKworCQlzd2l0Y2ggKHN0YWdlW2ldKyspIHsKKwkJY2FzZSBTVEFH RV9VTlNVQk1JVFRFRDoKKwkJCS8qIFdlIG5lZWQgdG8gc3VibWl0IGF0dGFjaCBhIGZlbmNlICov CisJCQlpZiAoISh0ZXN0X2ZsYWdzICYgV0FJVF9GT1JfU1VCTUlUKSkgeworCQkJCS8qIFdlIGhh ZCB0byBhdHRhY2ggb25lIHVwLWZyb250ICovCisJCQkJaWd0X2Fzc2VydF9uZXEodGltZWxpbmVz W2ldLCAtMSk7CisJCQkJYnJlYWs7CisJCQl9CisJCQl0aW1lbGluZXNbaV0gPSBzeW5jb2JqX2F0 dGFjaF9zd19zeW5jKGZkLCBzeW5jb2Jqc1tpXSwKKwkJCQkJCQkgICAgICBwb2ludHNbaV0pOwor CQkJYnJlYWs7CisKKwkJY2FzZSBTVEFHRV9TVUJNSVRURUQ6CisJCQkvKiBXZSBoYXZlIGEgZmVu Y2UsIHRyaWdnZXIgaXQgKi8KKwkJCWlndF9hc3NlcnRfbmVxKHRpbWVsaW5lc1tpXSwgLTEpOwor CQkJc3dfc3luY190aW1lbGluZV9pbmModGltZWxpbmVzW2ldLCAxKTsKKwkJCWNsb3NlKHRpbWVs aW5lc1tpXSk7CisJCQl0aW1lbGluZXNbaV0gPSAtMTsKKwkJCWlmIChudW1fc2lnbmFsZWQgPT0g MCkKKwkJCQlmaXJzdF9zaWduYWxlZCA9IGk7CisJCQludW1fc2lnbmFsZWQrKzsKKwkJCWJyZWFr OworCisJCWNhc2UgU1RBR0VfU0lHTkFMRUQ6CisJCQkvKiBXZSdyZSBhbHJlYWR5IHNpZ25hbGVk LCByZXNldCAqLworCQkJc3luY29ial9yZXNldChmZCwgJnN5bmNvYmpzW2ldLCAxKTsKKwkJCWJy ZWFrOworCisJCWNhc2UgU1RBR0VfUkVTRVQ6CisJCQkvKiBXZSdyZSByZXNldCwgc3VibWl0IGFu ZCBkb24ndCBzaWduYWwgKi8KKwkJCXRpbWVsaW5lc1tpXSA9IHN5bmNvYmpfYXR0YWNoX3N3X3N5 bmMoZmQsIHN5bmNvYmpzW2ldLAorCQkJCQkJCSAgICAgIHBvaW50c1tpXSk7CisJCQlicmVhazsK KworCQljYXNlIFNUQUdFX1JFU1VCTUlUVEVEOgorCQkJaWd0X2Fzc2VydCghIlNob3VsZCBub3Qg cmVhY2ggdGhpcyBzdGFnZSIpOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAodGVzdF9mbGFncyAm IFdBSVRfQUxMKSB7CisJCQlpZiAobnVtX3NpZ25hbGVkID09IEFSUkFZX1NJWkUoc3luY29ianMp KQorCQkJCWJyZWFrOworCQl9IGVsc2UgeworCQkJaWYgKG51bV9zaWduYWxlZCA+IDApCisJCQkJ YnJlYWs7CisJCX0KKworCQlzbGVlcF9uc2VjKE5TRUNTX1BFUl9TRUMgLyAxMDApOworCX0KKwor CXB0aHJlYWRfam9pbih0aHJlYWQsIE5VTEwpOworCisJaWYgKHRlc3RfZmxhZ3MgJiBXQUlUX0FM TCkgeworCQlpZ3RfYXNzZXJ0X2VxKG51bV9zaWduYWxlZCwgQVJSQVlfU0laRShzeW5jb2Jqcykp OworCX0gZWxzZSB7CisJCWlndF9hc3NlcnRfZXEobnVtX3NpZ25hbGVkLCAxKTsKKwkJaWd0X2Fz c2VydF9lcSh3YWl0LndhaXQuZmlyc3Rfc2lnbmFsZWQsIGZpcnN0X3NpZ25hbGVkKTsKKwl9CisK Kwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCWNsb3NlKHRpbWVsaW5lc1tpXSk7CisJCXN5 bmNvYmpfZGVzdHJveShmZCwgc3luY29ianNbaV0pOworCX0KK30KKworc3RhdGljIHZvaWQKK3Rl c3Rfd2FpdF9pbnRlcnJ1cHRlZChpbnQgZmQsIHVpbnQzMl90IHRlc3RfZmxhZ3MpCit7CisJc3Ry dWN0IGRybV9zeW5jb2JqX3RpbWVsaW5lX3dhaXQgd2FpdCA9IHsgMCB9OworCXVpbnQzMl90IHN5 bmNvYmogPSBzeW5jb2JqX2NyZWF0ZShmZCwgMCk7CisJdWludDY0X3QgcG9pbnQgPSAxOworCWlu dCB0aW1lbGluZTsKKworCXdhaXQuaGFuZGxlcyA9IHRvX3VzZXJfcG9pbnRlcigmc3luY29iaik7 CisJd2FpdC5wb2ludHMgPSB0b191c2VyX3BvaW50ZXIoJnBvaW50KTsKKwl3YWl0LmNvdW50X2hh bmRsZXMgPSAxOworCXdhaXQuZmxhZ3MgPSBmbGFnc19mb3JfdGVzdF9mbGFncyh0ZXN0X2ZsYWdz KTsKKworCWlmICh0ZXN0X2ZsYWdzICYgV0FJVF9GT1JfU1VCTUlUKSB7CisJCXdhaXQudGltZW91 dF9uc2VjID0gc2hvcnRfdGltZW91dCgpOworCQlpZ3Rfd2hpbGVfaW50ZXJydXB0aWJsZSh0cnVl KQorCQkJaWd0X2Fzc2VydF9lcShfX3N5bmNvYmpfdGltZWxpbmVfd2FpdF9pb2N0bChmZCwgJndh aXQpLCAtRVRJTUUpOworCX0KKworCXRpbWVsaW5lID0gc3luY29ial9hdHRhY2hfc3dfc3luYyhm ZCwgc3luY29iaiwgcG9pbnQpOworCisJd2FpdC50aW1lb3V0X25zZWMgPSBzaG9ydF90aW1lb3V0 KCk7CisJaWd0X3doaWxlX2ludGVycnVwdGlibGUodHJ1ZSkKKwkJaWd0X2Fzc2VydF9lcShfX3N5 bmNvYmpfdGltZWxpbmVfd2FpdF9pb2N0bChmZCwgJndhaXQpLCAtRVRJTUUpOworCisJc3luY29i al9kZXN0cm95KGZkLCBzeW5jb2JqKTsKKwljbG9zZSh0aW1lbGluZSk7Cit9CisKK3N0YXRpYyBi b29sCitoYXNfc3luY29ial90aW1lbGluZV93YWl0KGludCBmZCkKK3sKKwlzdHJ1Y3QgZHJtX3N5 bmNvYmpfdGltZWxpbmVfd2FpdCB3YWl0ID0geyAwIH07CisJdWludDMyX3QgaGFuZGxlID0gMDsK Kwl1aW50NjRfdCB2YWx1ZTsKKwlpbnQgcmV0OworCisJaWYgKGRybUdldENhcChmZCwgRFJNX0NB UF9TWU5DT0JKX1RJTUVMSU5FLCAmdmFsdWUpKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKCF2YWx1 ZSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogVHJ5IHdhaXRpbmcgZm9yIHplcm8gc3luYyBvYmpl Y3RzIHNob3VsZCBmYWlsIHdpdGggRUlOVkFMICovCisJd2FpdC5jb3VudF9oYW5kbGVzID0gMTsK Kwl3YWl0LmhhbmRsZXMgPSB0b191c2VyX3BvaW50ZXIoJmhhbmRsZSk7CisJcmV0ID0gZHJtSW9j dGwoZmQsIERSTV9JT0NUTF9TWU5DT0JKX1RJTUVMSU5FX1dBSVQsICZ3YWl0KTsKKwlyZXR1cm4g cmV0ID09IC0xICYmIGVycm5vID09IEVOT0VOVDsKK30KKworaWd0X21haW4KK3sKKwlpbnQgZmQg PSAtMTsKKworCWlndF9maXh0dXJlIHsKKwkJZmQgPSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVSX0FO WSk7CisJCWlndF9yZXF1aXJlKGhhc19zeW5jb2JqX3RpbWVsaW5lX3dhaXQoZmQpKTsKKwkJaWd0 X3JlcXVpcmVfc3dfc3luYygpOworCX0KKworCWlndF9zdWJ0ZXN0KCJpbnZhbGlkLXdhaXQtYmFk LWZsYWdzIikKKwkJdGVzdF93YWl0X2JhZF9mbGFncyhmZCk7CisKKwlpZ3Rfc3VidGVzdCgiaW52 YWxpZC13YWl0LXplcm8taGFuZGxlcyIpCisJCXRlc3Rfd2FpdF96ZXJvX2hhbmRsZXMoZmQpOwor CisJaWd0X3N1YnRlc3QoImludmFsaWQtd2FpdC1pbGxlZ2FsLWhhbmRsZSIpCisJCXRlc3Rfd2Fp dF9pbGxlZ2FsX2hhbmRsZShmZCk7CisKKwlpZ3Rfc3VidGVzdCgiaW52YWxpZC1xdWVyeS16ZXJv LWhhbmRsZXMiKQorCQl0ZXN0X3F1ZXJ5X3plcm9faGFuZGxlcyhmZCk7CisKKwlpZ3Rfc3VidGVz dCgiaW52YWxpZC1xdWVyeS1pbGxlZ2FsLWhhbmRsZSIpCisJCXRlc3RfcXVlcnlfaWxsZWdhbF9o YW5kbGUoZmQpOworCisJaWd0X3N1YnRlc3QoImludmFsaWQtcXVlcnktb25lLWlsbGVnYWwtaGFu ZGxlIikKKwkJdGVzdF9xdWVyeV9vbmVfaWxsZWdhbF9oYW5kbGUoZmQpOworCisJaWd0X3N1YnRl c3QoImludmFsaWQtcXVlcnktYmFkLXBhZCIpCisJCXRlc3RfcXVlcnlfYmFkX3BhZChmZCk7CisK KwlpZ3Rfc3VidGVzdCgiaW52YWxpZC1zaWduYWwtemVyby1oYW5kbGVzIikKKwkJdGVzdF9zaWdu YWxfemVyb19oYW5kbGVzKGZkKTsKKworCWlndF9zdWJ0ZXN0KCJpbnZhbGlkLXNpZ25hbC1pbGxl Z2FsLWhhbmRsZSIpCisJCXRlc3Rfc2lnbmFsX2lsbGVnYWxfaGFuZGxlKGZkKTsKKworCWlndF9z dWJ0ZXN0KCJpbnZhbGlkLXNpZ25hbC1pbGxlZ2FsLXBvaW50IikKKwkJdGVzdF9zaWduYWxfaWxs ZWdhbF9wb2ludChmZCk7CisKKwlpZ3Rfc3VidGVzdCgiaW52YWxpZC1zaWduYWwtb25lLWlsbGVn YWwtaGFuZGxlIikKKwkJdGVzdF9zaWduYWxfb25lX2lsbGVnYWxfaGFuZGxlKGZkKTsKKworCWln dF9zdWJ0ZXN0KCJpbnZhbGlkLXNpZ25hbC1iYWQtcGFkIikKKwkJdGVzdF9zaWduYWxfYmFkX3Bh ZChmZCk7CisKKwlpZ3Rfc3VidGVzdCgiaW52YWxpZC1zaWduYWwtYXJyYXkiKQorCQl0ZXN0X3Np Z25hbF9hcnJheShmZCk7CisKKwlpZ3Rfc3VidGVzdCgiaW52YWxpZC10cmFuc2Zlci1pbGxlZ2Fs LWhhbmRsZSIpCisJCXRlc3RfdHJhbnNmZXJfaWxsZWdhbF9oYW5kbGUoZmQpOworCisJaWd0X3N1 YnRlc3QoImludmFsaWQtdHJhbnNmZXItYmFkLXBhZCIpCisJCXRlc3RfdHJhbnNmZXJfYmFkX3Bh ZChmZCk7CisKKwlmb3IgKHVuc2lnbmVkIGZsYWdzID0gMDsgZmxhZ3MgPCBXQUlUX0ZMQUdTX01B WDsgZmxhZ3MrKykgeworCQlpbnQgZXJyOworCisJCS8qIE9ubHkgb25lIHdhaXQgbW9kZSBmb3Ig c2luZ2xlLXdhaXQgdGVzdHMgKi8KKwkJaWYgKF9fYnVpbHRpbl9wb3Bjb3VudChmbGFncyAmIChX QUlUX1VOU1VCTUlUVEVEIHwKKwkJCQkJCVdBSVRfU1VCTUlUVEVEIHwKKwkJCQkJCVdBSVRfU0lH TkFMRUQpKSAhPSAxKQorCQkJY29udGludWU7CisKKwkJaWYgKChmbGFncyAmIFdBSVRfVU5TVUJN SVRURUQpICYmICEoZmxhZ3MgJiBXQUlUX0ZPUl9TVUJNSVQpKQorCQkJZXJyID0gLUVJTlZBTDsK KwkJZWxzZSBpZiAoIShmbGFncyAmIFdBSVRfU0lHTkFMRUQpICYmICEoKGZsYWdzICYgV0FJVF9T VUJNSVRURUQpICYmIChmbGFncyAmIFdBSVRfQVZBSUxBQkxFKSkpCisJCQllcnIgPSAtRVRJTUU7 CisJCWVsc2UKKwkJCWVyciA9IDA7CisKKwkJaWd0X3N1YnRlc3RfZigiJXNzaW5nbGUtd2FpdCVz JXMlcyVzJXMlcyIsCisJCQkgICAgICBlcnIgPT0gLUVJTlZBTCA/ICJpbnZhbGlkLSIgOiBlcnIg PT0gLUVUSU1FID8gImV0aW1lLSIgOiAiIiwKKwkJCSAgICAgIChmbGFncyAmIFdBSVRfQUxMKSA/ ICItYWxsIiA6ICIiLAorCQkJICAgICAgKGZsYWdzICYgV0FJVF9GT1JfU1VCTUlUKSA/ICItZm9y LXN1Ym1pdCIgOiAiIiwKKwkJCSAgICAgIChmbGFncyAmIFdBSVRfQVZBSUxBQkxFKSA/ICItYXZh aWxhYmxlIiA6ICIiLAorCQkJICAgICAgKGZsYWdzICYgV0FJVF9VTlNVQk1JVFRFRCkgPyAiLXVu c3VibWl0dGVkIiA6ICIiLAorCQkJICAgICAgKGZsYWdzICYgV0FJVF9TVUJNSVRURUQpID8gIi1z dWJtaXR0ZWQiIDogIiIsCisJCQkgICAgICAoZmxhZ3MgJiBXQUlUX1NJR05BTEVEKSA/ICItc2ln bmFsZWQiIDogIiIpCisJCQl0ZXN0X3NpbmdsZV93YWl0KGZkLCBmbGFncywgZXJyKTsKKwl9CisK KwlpZ3Rfc3VidGVzdCgid2FpdC1kZWxheWVkLXNpZ25hbCIpCisJCXRlc3Rfd2FpdF9kZWxheWVk X3NpZ25hbChmZCwgMCk7CisKKwlpZ3Rfc3VidGVzdCgid2FpdC1mb3Itc3VibWl0LWRlbGF5ZWQt c3VibWl0IikKKwkJdGVzdF93YWl0X2RlbGF5ZWRfc2lnbmFsKGZkLCBXQUlUX0ZPUl9TVUJNSVQp OworCisJaWd0X3N1YnRlc3QoIndhaXQtYWxsLWRlbGF5ZWQtc2lnbmFsIikKKwkJdGVzdF93YWl0 X2RlbGF5ZWRfc2lnbmFsKGZkLCBXQUlUX0FMTCk7CisKKwlpZ3Rfc3VidGVzdCgid2FpdC1hbGwt Zm9yLXN1Ym1pdC1kZWxheWVkLXN1Ym1pdCIpCisJCXRlc3Rfd2FpdF9kZWxheWVkX3NpZ25hbChm ZCwgV0FJVF9BTEwgfCBXQUlUX0ZPUl9TVUJNSVQpOworCisJaWd0X3N1YnRlc3QoInJlc2V0LXVu c2lnbmFsZWQiKQorCQl0ZXN0X3Jlc2V0X3Vuc2lnbmFsZWQoZmQpOworCisJaWd0X3N1YnRlc3Qo InJlc2V0LXNpZ25hbGVkIikKKwkJdGVzdF9yZXNldF9zaWduYWxlZChmZCk7CisKKwlpZ3Rfc3Vi dGVzdCgicmVzZXQtbXVsdGlwbGUtc2lnbmFsZWQiKQorCQl0ZXN0X3Jlc2V0X211bHRpcGxlX3Np Z25hbGVkKGZkKTsKKworCWlndF9zdWJ0ZXN0KCJyZXNldC1kdXJpbmctd2FpdC1mb3Itc3VibWl0 IikKKwkJdGVzdF9yZXNldF9kdXJpbmdfd2FpdF9mb3Jfc3VibWl0KGZkKTsKKworCWlndF9zdWJ0 ZXN0KCJzaWduYWwiKQorCQl0ZXN0X3NpZ25hbChmZCk7CisKKwlmb3IgKHVuc2lnbmVkIGZsYWdz ID0gMDsgZmxhZ3MgPCBXQUlUX0ZMQUdTX01BWDsgZmxhZ3MrKykgeworCQlpbnQgZXJyOworCisJ CS8qIEF0IGxlYXN0IG9uZSB3YWl0IG1vZGUgZm9yIG11bHRpLXdhaXQgdGVzdHMgKi8KKwkJaWYg KCEoZmxhZ3MgJiAoV0FJVF9VTlNVQk1JVFRFRCB8CisJCQkgICAgICAgV0FJVF9TVUJNSVRURUQg fAorCQkJICAgICAgIFdBSVRfU0lHTkFMRUQpKSkKKwkJCWNvbnRpbnVlOworCisJCWVyciA9IDA7 CisJCWlmICgoZmxhZ3MgJiBXQUlUX1VOU1VCTUlUVEVEKSAmJiAhKGZsYWdzICYgV0FJVF9GT1Jf U1VCTUlUKSkgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJfSBlbHNlIGlmIChmbGFncyAmIFdBSVRf QUxMKSB7CisJCQlpZiAoZmxhZ3MgJiAoV0FJVF9VTlNVQk1JVFRFRCB8IFdBSVRfU1VCTUlUVEVE KSkKKwkJCQllcnIgPSAtRVRJTUU7CisJCQlpZiAoIShmbGFncyAmIFdBSVRfVU5TVUJNSVRURUQp ICYmIChmbGFncyAmIFdBSVRfU1VCTUlUVEVEKSAmJiAoZmxhZ3MgJiBXQUlUX0FWQUlMQUJMRSkp CisJCQkJZXJyID0gMDsKKwkJfSBlbHNlIHsKKwkJCWlmICghKGZsYWdzICYgV0FJVF9TSUdOQUxF RCkgJiYgISgoZmxhZ3MgJiBXQUlUX1NVQk1JVFRFRCkgJiYgKGZsYWdzICYgV0FJVF9BVkFJTEFC TEUpKSkKKwkJCQllcnIgPSAtRVRJTUU7CisJCX0KKworCQlpZ3Rfc3VidGVzdF9mKCIlc211bHRp LXdhaXQlcyVzJXMlcyVzJXMiLAorCQkJICAgICAgZXJyID09IC1FSU5WQUwgPyAiaW52YWxpZC0i IDogZXJyID09IC1FVElNRSA/ICJldGltZS0iIDogIiIsCisJCQkgICAgICAoZmxhZ3MgJiBXQUlU X0FMTCkgPyAiLWFsbCIgOiAiIiwKKwkJCSAgICAgIChmbGFncyAmIFdBSVRfRk9SX1NVQk1JVCkg PyAiLWZvci1zdWJtaXQiIDogIiIsCisJCQkgICAgICAoZmxhZ3MgJiBXQUlUX0FWQUlMQUJMRSkg PyAiLWF2YWlsYWJsZSIgOiAiIiwKKwkJCSAgICAgIChmbGFncyAmIFdBSVRfVU5TVUJNSVRURUQp ID8gIi11bnN1Ym1pdHRlZCIgOiAiIiwKKwkJCSAgICAgIChmbGFncyAmIFdBSVRfU1VCTUlUVEVE KSA/ICItc3VibWl0dGVkIiA6ICIiLAorCQkJICAgICAgKGZsYWdzICYgV0FJVF9TSUdOQUxFRCkg PyAiLXNpZ25hbGVkIiA6ICIiKQorCQkJdGVzdF9tdWx0aV93YWl0KGZkLCBmbGFncywgZXJyKTsK Kwl9CisJaWd0X3N1YnRlc3QoIndhaXQtYW55LXNuYXBzaG90IikKKwkJdGVzdF93YWl0X3NuYXBz aG90KGZkLCAwKTsKKworCWlndF9zdWJ0ZXN0KCJ3YWl0LWFsbC1zbmFwc2hvdCIpCisJCXRlc3Rf d2FpdF9zbmFwc2hvdChmZCwgV0FJVF9BTEwpOworCisJaWd0X3N1YnRlc3QoIndhaXQtZm9yLXN1 Ym1pdC1zbmFwc2hvdCIpCisJCXRlc3Rfd2FpdF9zbmFwc2hvdChmZCwgV0FJVF9GT1JfU1VCTUlU KTsKKworCWlndF9zdWJ0ZXN0KCJ3YWl0LWFsbC1mb3Itc3VibWl0LXNuYXBzaG90IikKKwkJdGVz dF93YWl0X3NuYXBzaG90KGZkLCBXQUlUX0FMTCB8IFdBSVRfRk9SX1NVQk1JVCk7CisKKwlpZ3Rf c3VidGVzdCgid2FpdC1hbnktY29tcGxleCIpCisJCXRlc3Rfd2FpdF9jb21wbGV4KGZkLCAwKTsK KworCWlndF9zdWJ0ZXN0KCJ3YWl0LWFsbC1jb21wbGV4IikKKwkJdGVzdF93YWl0X2NvbXBsZXgo ZmQsIFdBSVRfQUxMKTsKKworCWlndF9zdWJ0ZXN0KCJ3YWl0LWZvci1zdWJtaXQtY29tcGxleCIp CisJCXRlc3Rfd2FpdF9jb21wbGV4KGZkLCBXQUlUX0ZPUl9TVUJNSVQpOworCisJaWd0X3N1YnRl c3QoIndhaXQtYWxsLWZvci1zdWJtaXQtY29tcGxleCIpCisJCXRlc3Rfd2FpdF9jb21wbGV4KGZk LCBXQUlUX0FMTCB8IFdBSVRfRk9SX1NVQk1JVCk7CisKKwlpZ3Rfc3VidGVzdCgid2FpdC1hbnkt aW50ZXJydXB0ZWQiKQorCQl0ZXN0X3dhaXRfaW50ZXJydXB0ZWQoZmQsIDApOworCisJaWd0X3N1 YnRlc3QoIndhaXQtYWxsLWludGVycnVwdGVkIikKKwkJdGVzdF93YWl0X2ludGVycnVwdGVkKGZk LCBXQUlUX0FMTCk7Cit9Ci0tIAoyLjIxLjAuMzkyLmdmOGY2Nzg3MTU5ZQoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KaWd0LWRldiBtYWlsaW5nIGxpc3QK aWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2