From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by gabe.freedesktop.org (Postfix) with ESMTPS id E803789349 for ; Tue, 21 May 2019 13:22:56 +0000 (UTC) From: Lionel Landwerlin Date: Tue, 21 May 2019 14:22:47 +0100 Message-Id: <20190521132248.21811-5-lionel.g.landwerlin@intel.com> In-Reply-To: <20190521132248.21811-1-lionel.g.landwerlin@intel.com> References: <20190521132248.21811-1-lionel.g.landwerlin@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v2 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 bHRpIHdhaXQgd2l0aCB0aW1lbGluZSAmIGJpbmFyeSBzeW5jb2JqcyAoTGlvbmVsKQoKdjQ6IFN3 aXRjaCBmcm9tIGRybUlvY3RsIHRvIGlndF9pb2N0bCBpbiB0ZXN0cy8qLmMgKENocmlzKQogICAg Q2xlYXIgb3V0IGVycm5vIGluIGhlbHBlciBmdW5jdGlvbnMgKENocmlzKQoKU2lnbmVkLW9mZi1i eTogQ2h1bm1pbmcgWmhvdSA8ZGF2aWQxLnpob3VAYW1kLmNvbT4KU2lnbmVkLW9mZi1ieTogTGlv bmVsIExhbmR3ZXJsaW4gPGxpb25lbC5nLmxhbmR3ZXJsaW5AaW50ZWwuY29tPgotLS0KIGxpYi9p Z3Rfc3luY29iai5jICAgICAgICB8ICAyMzUgKysrKysrKysrCiBsaWIvaWd0X3N5bmNvYmouaCAg ICAgICAgfCAgIDE5ICsKIHRlc3RzL21lc29uLmJ1aWxkICAgICAgICB8ICAgIDEgKwogdGVzdHMv c3luY29ial90aW1lbGluZS5jIHwgMTA0OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCAxMzA0IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2Rl IDEwMDY0NCB0ZXN0cy9zeW5jb2JqX3RpbWVsaW5lLmMKCmRpZmYgLS1naXQgYS9saWIvaWd0X3N5 bmNvYmouYyBiL2xpYi9pZ3Rfc3luY29iai5jCmluZGV4IGY2NTliYzI0Li5mZjY3NDMwNCAxMDA2 NDQKLS0tIGEvbGliL2lndF9zeW5jb2JqLmMKKysrIGIvbGliL2lndF9zeW5jb2JqLmMKQEAgLTI4 NiwzICsyODYsMjM4IEBAIHN5bmNvYmpfc2lnbmFsKGludCBmZCwgdWludDMyX3QgKmhhbmRsZXMs IHVpbnQzMl90IGNvdW50KQogewogCWlndF9hc3NlcnRfZXEoX19zeW5jb2JqX3NpZ25hbChmZCwg aGFuZGxlcywgY291bnQpLCAwKTsKIH0KKworc3RhdGljIGludAorX19zeW5jb2JqX3RpbWVsaW5l X3NpZ25hbChpbnQgZmQsIHVpbnQzMl90ICpoYW5kbGVzLCB1aW50NjRfdCAqcG9pbnRzLCB1aW50 MzJfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmVfYXJyYXkgYXJyYXkg PSB7IDAgfTsKKwlpbnQgZXJyID0gMDsKKworCWFycmF5LmhhbmRsZXMgPSB0b191c2VyX3BvaW50 ZXIoaGFuZGxlcyk7CisJYXJyYXkucG9pbnRzID0gdG9fdXNlcl9wb2ludGVyKHBvaW50cyk7CisJ YXJyYXkuY291bnRfaGFuZGxlcyA9IGNvdW50OworCWlmIChkcm1Jb2N0bChmZCwgRFJNX0lPQ1RM X1NZTkNPQkpfVElNRUxJTkVfU0lHTkFMLCAmYXJyYXkpKSB7CisJCWVyciA9IC1lcnJubzsKKwkJ aWd0X2Fzc3VtZShlcnIpOworCX0KKwllcnJubyA9IDA7CisJcmV0dXJuIGVycjsKK30KKworLyoq CisgKiBzeW5jb2JqX3NpZ25hbDoKKyAqIEBmZDogVGhlIERSTSBmaWxlIGRlc2NyaXB0b3IuCisg KiBAaGFuZGxlczogQXJyYXkgb2Ygc3luY29iaiBoYW5kbGVzIHRvIHNpZ25hbAorICogQHBvaW50 czogTGlzdCBvZiBwb2ludCBvZiBoYW5kbGVzIHRvIHNpZ25hbC4KKyAqIEBjb3VudDogQ291bnQg b2Ygc3luY29iaiBoYW5kbGVzLgorICoKKyAqIFNpZ25hbCBhIHNldCBvZiBzeW5jb2Jqcy4KKyAq Lwordm9pZAorc3luY29ial90aW1lbGluZV9zaWduYWwoaW50IGZkLCB1aW50MzJfdCAqaGFuZGxl cywgdWludDY0X3QgKnBvaW50cywgdWludDMyX3QgY291bnQpCit7CisJaWd0X2Fzc2VydF9lcShf X3N5bmNvYmpfdGltZWxpbmVfc2lnbmFsKGZkLCBoYW5kbGVzLCBwb2ludHMsIGNvdW50KSwgMCk7 Cit9CitpbnQKK19fc3luY29ial90aW1lbGluZV93YWl0X2lvY3RsKGludCBmZCwgc3RydWN0IGRy bV9zeW5jb2JqX3RpbWVsaW5lX3dhaXQgKmFyZ3MpCit7CisJaW50IGVyciA9IDA7CisJaWYgKGRy bUlvY3RsKGZkLCBEUk1fSU9DVExfU1lOQ09CSl9USU1FTElORV9XQUlULCBhcmdzKSkgeworCQll cnIgPSAtZXJybm87CisJCWlndF9hc3N1bWUoZXJyKTsKKwl9CisJZXJybm8gPSAwOworCXJldHVy biBlcnI7Cit9CitzdGF0aWMgaW50CitfX3N5bmNvYmpfdGltZWxpbmVfd2FpdChpbnQgZmQsIHVp bnQzMl90ICpoYW5kbGVzLCB1aW50NjRfdCAqcG9pbnRzLAorCQkJdW5zaWduZWQgbnVtX2hhbmRs ZXMsCisJCQlpbnQ2NF90IHRpbWVvdXRfbnNlYywgdW5zaWduZWQgZmxhZ3MsCisJCQl1aW50MzJf dCAqZmlyc3Rfc2lnbmFsZWQpCit7CisJc3RydWN0IGRybV9zeW5jb2JqX3RpbWVsaW5lX3dhaXQg YXJnczsKKwlpbnQgcmV0OworCisJYXJncy5oYW5kbGVzID0gdG9fdXNlcl9wb2ludGVyKGhhbmRs ZXMpOworCWFyZ3MucG9pbnRzID0gdG9fdXNlcl9wb2ludGVyKHBvaW50cyk7CisJYXJncy50aW1l b3V0X25zZWMgPSB0aW1lb3V0X25zZWM7CisJYXJncy5jb3VudF9oYW5kbGVzID0gbnVtX2hhbmRs ZXM7CisJYXJncy5mbGFncyA9IGZsYWdzOworCWFyZ3MuZmlyc3Rfc2lnbmFsZWQgPSAwOworCWFy Z3MucGFkID0gMDsKKworCXJldCA9IGRybUlvY3RsKGZkLCBEUk1fSU9DVExfU1lOQ09CSl9USU1F TElORV9XQUlULCAmYXJncyk7CisJaWYgKHJldCA8IDApIHsKKwkJcmV0ID0gLWVycm5vOworCQlp Z3RfYXNzdW1lKHJldCk7CisJfQorCWVycm5vID0gMDsKKworCWlmIChmaXJzdF9zaWduYWxlZCkK KwkJKmZpcnN0X3NpZ25hbGVkID0gYXJncy5maXJzdF9zaWduYWxlZDsKKworCXJldHVybiByZXQ7 Cit9CitpbnQKK3N5bmNvYmpfdGltZWxpbmVfd2FpdF9lcnIoaW50IGZkLCB1aW50MzJfdCAqaGFu ZGxlcywgdWludDY0X3QgKnBvaW50cywKKwkJCSAgdW5zaWduZWQgbnVtX2hhbmRsZXMsCisJCQkg IGludDY0X3QgdGltZW91dF9uc2VjLCB1bnNpZ25lZCBmbGFncykKK3sKKwlyZXR1cm4gX19zeW5j b2JqX3RpbWVsaW5lX3dhaXQoZmQsIGhhbmRsZXMsIHBvaW50cywgbnVtX2hhbmRsZXMsCisJCQkJ ICAgICAgIHRpbWVvdXRfbnNlYywgZmxhZ3MsIE5VTEwpOworfQorCisvKioKKyAqIHN5bmNvYmpf dGltZWxpbmVfd2FpdDoKKyAqIEBmZDogVGhlIERSTSBmaWxlIGRlc2NyaXB0b3IKKyAqIEBoYW5k bGVzOiBMaXN0IG9mIHN5bmNvYmogaGFuZGxlcyB0byB3YWl0IGZvci4KKyAqIEBwb2ludHM6IExp c3Qgb2YgcG9pbnQgb2YgaGFuZGxlcyB0byB3YWl0IGZvci4KKyAqIEBudW1faGFuZGxlczogQ291 bnQgb2YgaGFuZGxlcworICogQHRpbWVvdXRfbnNlYzogQWJzb2x1dGUgd2FpdCB0aW1lb3V0IGlu IG5hbm9zZWNvbmRzLgorICogQGZsYWdzOiBXYWl0IGlvY3RsIGZsYWdzLgorICogQGZpcnN0X3Np Z25hbGVkOiBSZXR1cm5lZCBoYW5kbGUgZm9yIGZpcnN0IHNpZ25hbGVkIHN5bmNvYmouCisgKgor ICogV2FpdHMgaW4gdGhlIGtlcm5lbCBmb3IgYW55L2FsbCB0aGUgcmVxdWVzdGVkIHN5bmNvYmpz IHRpbWVsaW5lIHBvaW50CisgKiB1c2luZyB0aGUgdGltZW91dCBhbmQgZmxhZ3MuCisgKiBSZXR1 cm5zOiBib29sIHZhbHVlIC0gZmFsc2UgPSB0aW1lZG91dCwgdHJ1ZSA9IHNpZ25hbGVkCisgKi8K K2Jvb2wKK3N5bmNvYmpfdGltZWxpbmVfd2FpdChpbnQgZmQsIHVpbnQzMl90ICpoYW5kbGVzLCB1 aW50NjRfdCAqcG9pbnRzLAorCQkgICAgICB1bnNpZ25lZCBudW1faGFuZGxlcywKKwkJICAgICAg aW50NjRfdCB0aW1lb3V0X25zZWMsIHVuc2lnbmVkIGZsYWdzLAorCQkgICAgICB1aW50MzJfdCAq Zmlyc3Rfc2lnbmFsZWQpCit7CisJaW50IHJldDsKKworCXJldCA9IF9fc3luY29ial90aW1lbGlu ZV93YWl0KGZkLCBoYW5kbGVzLCBwb2ludHMsIG51bV9oYW5kbGVzLAorCQkJCSAgICAgIHRpbWVv dXRfbnNlYywgZmxhZ3MsIGZpcnN0X3NpZ25hbGVkKTsKKwlpZiAocmV0ID09IC1FVElNRSkKKwkJ cmV0dXJuIGZhbHNlOworCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKKworCXJldHVybiB0cnVlOwor Cit9CisKK3N0YXRpYyBpbnQKK19fc3luY29ial90aW1lbGluZV9xdWVyeShpbnQgZmQsIHVpbnQz Ml90ICpoYW5kbGVzLCB1aW50NjRfdCAqcG9pbnRzLAorCQkJIHVpbnQzMl90IGhhbmRsZV9jb3Vu dCkKK3sKKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmVfYXJyYXkgYXJnczsKKwlpbnQgcmV0 OworCisJYXJncy5oYW5kbGVzID0gdG9fdXNlcl9wb2ludGVyKGhhbmRsZXMpOworCWFyZ3MucG9p bnRzID0gdG9fdXNlcl9wb2ludGVyKHBvaW50cyk7CisJYXJncy5jb3VudF9oYW5kbGVzID0gaGFu ZGxlX2NvdW50OworCWFyZ3MucGFkID0gMDsKKworCXJldCA9IGRybUlvY3RsKGZkLCBEUk1fSU9D VExfU1lOQ09CSl9RVUVSWSwgJmFyZ3MpOworCWlmIChyZXQpIHsKKwkJcmV0ID0gLWVycm5vOwor CQlpZ3RfYXNzdW1lKHJldCk7CisJfQorCisJZXJybm8gPSAwOworCXJldHVybiByZXQ7Cit9CisK Ky8qKgorICogc3luY29ial90aW1lbGluZV9xdWVyeToKKyAqIEBmZDogVGhlIERSTSBmaWxlIGRl c2NyaXB0b3IuCisgKiBAaGFuZGxlczogQXJyYXkgb2Ygc3luY29iaiBoYW5kbGVzLgorICogQHBv aW50czogQXJyYXkgb2Ygc3luY29iaiBwb2ludHMgcXVlcmllZC4KKyAqIEBjb3VudDogQ291bnQg b2Ygc3luY29iaiBoYW5kbGVzLgorICoKKyAqIHF1ZXJ5IGEgc2V0IG9mIHN5bmNvYmpzLgorICov Cit2b2lkCitzeW5jb2JqX3RpbWVsaW5lX3F1ZXJ5KGludCBmZCwgdWludDMyX3QgKmhhbmRsZXMs IHVpbnQ2NF90ICpwb2ludHMsCisJCSAgICAgICB1aW50MzJfdCBjb3VudCkKK3sKKwlpZ3RfYXNz ZXJ0X2VxKF9fc3luY29ial90aW1lbGluZV9xdWVyeShmZCwgaGFuZGxlcywgcG9pbnRzLCBjb3Vu dCksIDApOworfQorCitzdGF0aWMgaW50CitfX3N5bmNvYmpfYmluYXJ5X3RvX3RpbWVsaW5lKGlu dCBmZCwgdWludDMyX3QgdGltZWxpbmVfaGFuZGxlLAorCQkJICAgICB1aW50NjRfdCBwb2ludCwg dWludDMyX3QgYmluYXJ5X2hhbmRsZSkKK3sKKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfdHJhbnNmZXIg YXJnczsKKwlpbnQgcmV0OworCisJYXJncy5zcmNfaGFuZGxlID0gYmluYXJ5X2hhbmRsZTsKKwlh cmdzLmRzdF9oYW5kbGUgPSB0aW1lbGluZV9oYW5kbGU7CisJYXJncy5zcmNfcG9pbnQgPSAwOwor CWFyZ3MuZHN0X3BvaW50ID0gcG9pbnQ7CisJYXJncy5mbGFncyA9IDA7CisJYXJncy5wYWQgPSAw OworCXJldCA9IGRybUlvY3RsKGZkLCBEUk1fSU9DVExfU1lOQ09CSl9UUkFOU0ZFUiwgJmFyZ3Mp OworCWlmIChyZXQpIHsKKwkJcmV0ID0gLWVycm5vOworCQlpZ3RfYXNzZXJ0KHJldCk7CisJfQor CisJZXJybm8gPSAwOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogc3luY29ial9iaW5hcnlf dG9fdGltZWxpbmU6CisgKiBAZmQ6IFRoZSBEUk0gZmlsZSBkZXNjcmlwdG9yLgorICogQHRpbWVs aW5lX2hhbmRsZXM6IEFycmF5IG9mIHRpbWVsaW5lIHN5bmNvYmogaGFuZGxlcy4KKyAqIEBwb2lu dDogc3luY29iaiBwb2ludC4KKyAqIEBiaW5hcnlfaGFuZGxlOiBBcnJheSBvZiBiaW5hcnkgc3lu Y29iaiBoYW5kbGVzLgorICoKKyAqIHF1ZXJ5IGEgc2V0IG9mIHN5bmNvYmpzLgorICovCit2b2lk CitzeW5jb2JqX2JpbmFyeV90b190aW1lbGluZShpbnQgZmQsIHVpbnQzMl90IHRpbWVsaW5lX2hh bmRsZSwKKwkJCSAgIHVpbnQ2NF90IHBvaW50LCB1aW50MzJfdCBiaW5hcnlfaGFuZGxlKQorewor CWlndF9hc3NlcnRfZXEoX19zeW5jb2JqX2JpbmFyeV90b190aW1lbGluZShmZCwgdGltZWxpbmVf aGFuZGxlLCBwb2ludCwKKwkJCQkJCSAgIGJpbmFyeV9oYW5kbGUpLCAwKTsKK30KKworc3RhdGlj IGludAorX19zeW5jb2JqX3RpbWVsaW5lX3RvX2JpbmFyeShpbnQgZmQsIHVpbnQzMl90IGJpbmFy eV9oYW5kbGUsCisJCQkgICAgIHVpbnQzMl90IHRpbWVsaW5lX2hhbmRsZSwKKwkJCSAgICAgdWlu dDY0X3QgcG9pbnQsCisJCQkgICAgIHVpbnQzMl90IGZsYWdzKQoreworCXN0cnVjdCBkcm1fc3lu Y29ial90cmFuc2ZlciBhcmdzOworCWludCByZXQ7CisKKwlhcmdzLmRzdF9oYW5kbGUgPSBiaW5h cnlfaGFuZGxlOworCWFyZ3Muc3JjX2hhbmRsZSA9IHRpbWVsaW5lX2hhbmRsZTsKKwlhcmdzLmRz dF9wb2ludCA9IDA7CisJYXJncy5zcmNfcG9pbnQgPSBwb2ludDsKKwlhcmdzLmZsYWdzID0gZmxh Z3M7CisJYXJncy5wYWQgPSAwOworCXJldCA9IGRybUlvY3RsKGZkLCBEUk1fSU9DVExfU1lOQ09C Sl9UUkFOU0ZFUiwgJmFyZ3MpOworCWlmIChyZXQpIHsKKwkJcmV0ID0gLWVycm5vOworCQlpZ3Rf YXNzZXJ0KHJldCk7CisJfQorCisJZXJybm8gPSAwOworCXJldHVybiByZXQ7Cit9CisKKy8qKgor 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 IGIvdGVzdHMvbWVzb24uYnVpbGQKaW5kZXggNjQwMDE4YWUuLmRmNGViMDI4IDEwMDY0NAotLS0g YS90ZXN0cy9tZXNvbi5idWlsZAorKysgYi90ZXN0cy9tZXNvbi5idWlsZApAQCAtNzksNiArNzks NyBAQCB0ZXN0X3Byb2dzID0gWwogCSdzd19zeW5jJywKIAknc3luY29ial9iYXNpYycsCiAJJ3N5 bmNvYmpfd2FpdCcsCisJJ3N5bmNvYmpfdGltZWxpbmUnLAogCSd0ZW1wbGF0ZScsCiAJJ3Rvb2xz X3Rlc3QnLAogCSd2M2RfZ2V0X2JvX29mZnNldCcsCmRpZmYgLS1naXQgYS90ZXN0cy9zeW5jb2Jq X3RpbWVsaW5lLmMgYi90ZXN0cy9zeW5jb2JqX3RpbWVsaW5lLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAuLjdmZDYwMmRlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc3lu 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 fTsKKwl3YWl0LmZsYWdzID0gMHhkZWFkYmVlZjsKKwlpZ3RfYXNzZXJ0X2VxKF9fc3luY29ial90 aW1lbGluZV93YWl0X2lvY3RsKGZkLCAmd2FpdCksIC1FSU5WQUwpOworfQorCitzdGF0aWMgdm9p ZAordGVzdF93YWl0X3plcm9faGFuZGxlcyhpbnQgZmQpCit7CisJc3RydWN0IGRybV9zeW5jb2Jq X3RpbWVsaW5lX3dhaXQgd2FpdCA9IHt9OworCWlndF9hc3NlcnRfZXEoX19zeW5jb2JqX3RpbWVs aW5lX3dhaXRfaW9jdGwoZmQsICZ3YWl0KSwgLUVJTlZBTCk7Cit9CisKK3N0YXRpYyB2b2lkCit0 ZXN0X3dhaXRfaWxsZWdhbF9oYW5kbGUoaW50IGZkKQoreworCXN0cnVjdCBkcm1fc3luY29ial90 aW1lbGluZV93YWl0IHdhaXQgPSB7fTsKKwl1aW50MzJfdCBoYW5kbGUgPSAwOworCisJd2FpdC5j b3VudF9oYW5kbGVzID0gMTsKKwl3YWl0LmhhbmRsZXMgPSB0b191c2VyX3BvaW50ZXIoJmhhbmRs ZSk7CisJaWd0X2Fzc2VydF9lcShfX3N5bmNvYmpfdGltZWxpbmVfd2FpdF9pb2N0bChmZCwgJndh aXQpLCAtRU5PRU5UKTsKK30KKworc3RhdGljIHZvaWQKK3Rlc3RfcXVlcnlfemVyb19oYW5kbGVz KGludCBmZCkKK3sKKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmVfYXJyYXkgYXJncyA9IHt9 OworCWludCByZXQ7CisKKwlyZXQgPSBpZ3RfaW9jdGwoZmQsIERSTV9JT0NUTF9TWU5DT0JKX1FV RVJZLCAmYXJncyk7CisJaWd0X2Fzc2VydChyZXQgPT0gLTEgJiYgZXJybm8gPT0gIEVJTlZBTCk7 Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3F1ZXJ5X2lsbGVnYWxfaGFuZGxlKGludCBmZCkKK3sK KwlzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmVfYXJyYXkgYXJncyA9IHt9OworCXVpbnQzMl90 IGhhbmRsZSA9IDA7CisJaW50IHJldDsKKworCWFyZ3MuY291bnRfaGFuZGxlcyA9IDE7CisJYXJn cy5oYW5kbGVzID0gdG9fdXNlcl9wb2ludGVyKCZoYW5kbGUpOworCXJldCA9IGlndF9pb2N0bChm ZCwgRFJNX0lPQ1RMX1NZTkNPQkpfUVVFUlksICZhcmdzKTsKKwlpZ3RfYXNzZXJ0KHJldCA9PSAt MSAmJiBlcnJubyA9PSBFTk9FTlQpOworfQorCitzdGF0aWMgdm9pZAordGVzdF9xdWVyeV9vbmVf aWxsZWdhbF9oYW5kbGUoaW50IGZkKQoreworCXN0cnVjdCBkcm1fc3luY29ial90aW1lbGluZV9h cnJheSBhcnJheSA9IHt9OworCXVpbnQzMl90IHN5bmNvYmpzWzNdOworCXVpbnQ2NF90IGluaXRp YWxfcG9pbnQgPSAxOworCWludCByZXQ7CisKKwlzeW5jb2Jqc1swXSA9IHN5bmNvYmpfY3JlYXRl KGZkLCAwKTsKKwlzeW5jb2Jqc1sxXSA9IDA7CisJc3luY29ianNbMl0gPSBzeW5jb2JqX2NyZWF0 ZShmZCwgMCk7CisKKwlzeW5jb2JqX3RpbWVsaW5lX3NpZ25hbChmZCwgJnN5bmNvYmpzWzBdLCAm aW5pdGlhbF9wb2ludCwgMSk7CisJc3luY29ial90aW1lbGluZV9zaWduYWwoZmQsICZzeW5jb2Jq c1syXSwgJmluaXRpYWxfcG9pbnQsIDEpOworCWlndF9hc3NlcnRfZXEoc3luY29ial90aW1lbGlu ZV93YWl0X2VycihmZCwgJnN5bmNvYmpzWzBdLAorCQkJCQkJJmluaXRpYWxfcG9pbnQsIDEsIDAs IDApLCAwKTsKKwlpZ3RfYXNzZXJ0X2VxKHN5bmNvYmpfdGltZWxpbmVfd2FpdF9lcnIoZmQsICZz eW5jb2Jqc1syXSwKKwkJCQkJCSZpbml0aWFsX3BvaW50LCAxLCAwLCAwKSwgMCk7CisKKwlhcnJh eS5jb3VudF9oYW5kbGVzID0gMzsKKwlhcnJheS5oYW5kbGVzID0gdG9fdXNlcl9wb2ludGVyKHN5 bmNvYmpzKTsKKwlyZXQgPSBpZ3RfaW9jdGwoZmQsIERSTV9JT0NUTF9TWU5DT0JKX1FVRVJZLCAm YXJyYXkpOworCWlndF9hc3NlcnQocmV0ID09IC0xICYmIGVycm5vID09IEVOT0VOVCk7CisKKwlz eW5jb2JqX2Rlc3Ryb3koZmQsIHN5bmNvYmpzWzBdKTsKKwlzeW5jb2JqX2Rlc3Ryb3koZmQsIHN5 bmNvYmpzWzJdKTsKK30KKworc3RhdGljIHZvaWQKK3Rlc3RfcXVlcnlfYmFkX3BhZChpbnQgZmQp Cit7CisJc3RydWN0IGRybV9zeW5jb2JqX3RpbWVsaW5lX2FycmF5IGFycmF5ID0ge307CisJdWlu dDMyX3QgaGFuZGxlID0gMDsKKwlpbnQgcmV0OworCisJYXJyYXkucGFkID0gMHhkZWFkYmVlZjsK KwlhcnJheS5jb3VudF9oYW5kbGVzID0gMTsKKwlhcnJheS5oYW5kbGVzID0gdG9fdXNlcl9wb2lu dGVyKCZoYW5kbGUpOworCXJldCA9IGlndF9pb2N0bChmZCwgRFJNX0lPQ1RMX1NZTkNPQkpfUVVF UlksICZhcnJheSk7CisJaWd0X2Fzc2VydChyZXQgPT0gLTEgJiYgZXJybm8gPT0gRUlOVkFMKTsK K30KKworc3RhdGljIHZvaWQKK3Rlc3Rfc2lnbmFsX3plcm9faGFuZGxlcyhpbnQgZmQpCit7CisJ c3RydWN0IGRybV9zeW5jb2JqX3RpbWVsaW5lX2FycmF5IGFyZ3MgPSB7fTsKKwlpbnQgcmV0Owor CisJcmV0ID0gaWd0X2lvY3RsKGZkLCBEUk1fSU9DVExfU1lOQ09CSl9USU1FTElORV9TSUdOQUws ICZhcmdzKTsKKwlpZ3RfYXNzZXJ0KHJldCA9PSAtMSAmJiBlcnJubyA9PSAgRUlOVkFMKTsKK30K Kworc3RhdGljIHZvaWQKK3Rlc3Rfc2lnbmFsX2lsbGVnYWxfaGFuZGxlKGludCBmZCkKK3sKKwlz dHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmVfYXJyYXkgYXJncyA9IHt9OworCXVpbnQzMl90IGhh bmRsZSA9IDA7CisJaW50IHJldDsKKworCWFyZ3MuY291bnRfaGFuZGxlcyA9IDE7CisJYXJncy5o YW5kbGVzID0gdG9fdXNlcl9wb2ludGVyKCZoYW5kbGUpOworCXJldCA9IGlndF9pb2N0bChmZCwg RFJNX0lPQ1RMX1NZTkNPQkpfVElNRUxJTkVfU0lHTkFMLCAmYXJncyk7CisJaWd0X2Fzc2VydChy ZXQgPT0gLTEgJiYgZXJybm8gPT0gRU5PRU5UKTsKK30KKworc3RhdGljIHZvaWQKK3Rlc3Rfc2ln bmFsX2lsbGVnYWxfcG9pbnQoaW50IGZkKQoreworCXN0cnVjdCBkcm1fc3luY29ial90aW1lbGlu ZV9hcnJheSBhcmdzID0ge307CisJdWludDMyX3QgaGFuZGxlID0gMTsKKwl1aW50NjRfdCBwb2lu dCA9IDA7CisJaW50IHJldDsKKworCWFyZ3MuY291bnRfaGFuZGxlcyA9IDE7CisJYXJncy5oYW5k bGVzID0gdG9fdXNlcl9wb2ludGVyKCZoYW5kbGUpOworCWFyZ3MucG9pbnRzID0gdG9fdXNlcl9w b2ludGVyKCZwb2ludCk7CisJcmV0ID0gaWd0X2lvY3RsKGZkLCBEUk1fSU9DVExfU1lOQ09CSl9U SU1FTElORV9TSUdOQUwsICZhcmdzKTsKKwlpZ3RfYXNzZXJ0KHJldCA9PSAtMSAmJiBlcnJubyA9 PSBFTk9FTlQpOworfQorc3RhdGljIHZvaWQKK3Rlc3Rfc2lnbmFsX29uZV9pbGxlZ2FsX2hhbmRs ZShpbnQgZmQpCit7CisJc3RydWN0IGRybV9zeW5jb2JqX3RpbWVsaW5lX2FycmF5IGFycmF5ID0g e307CisJdWludDMyX3Qgc3luY29ianNbM107CisJdWludDY0X3QgaW5pdGlhbF9wb2ludCA9IDE7 CisJaW50IHJldDsKKworCXN5bmNvYmpzWzBdID0gc3luY29ial9jcmVhdGUoZmQsIDApOworCXN5 bmNvYmpzWzFdID0gMDsKKwlzeW5jb2Jqc1syXSA9IHN5bmNvYmpfY3JlYXRlKGZkLCAwKTsKKwor CXN5bmNvYmpfdGltZWxpbmVfc2lnbmFsKGZkLCAmc3luY29ianNbMF0sICZpbml0aWFsX3BvaW50 LCAxKTsKKwlzeW5jb2JqX3RpbWVsaW5lX3NpZ25hbChmZCwgJnN5bmNvYmpzWzJdLCAmaW5pdGlh bF9wb2ludCwgMSk7CisJaWd0X2Fzc2VydF9lcShzeW5jb2JqX3RpbWVsaW5lX3dhaXRfZXJyKGZk LCAmc3luY29ianNbMF0sCisJCQkJCQkmaW5pdGlhbF9wb2ludCwgMSwgMCwgMCksIDApOworCWln dF9hc3NlcnRfZXEoc3luY29ial90aW1lbGluZV93YWl0X2VycihmZCwgJnN5bmNvYmpzWzJdLAor CQkJCQkJJmluaXRpYWxfcG9pbnQsIDEsIDAsIDApLCAwKTsKKworCWFycmF5LmNvdW50X2hhbmRs ZXMgPSAzOworCWFycmF5LmhhbmRsZXMgPSB0b191c2VyX3BvaW50ZXIoc3luY29ianMpOworCXJl dCA9IGlndF9pb2N0bChmZCwgRFJNX0lPQ1RMX1NZTkNPQkpfVElNRUxJTkVfU0lHTkFMLCAmYXJy YXkpOworCWlndF9hc3NlcnQocmV0ID09IC0xICYmIGVycm5vID09IEVOT0VOVCk7CisKKwlzeW5j b2JqX2Rlc3Ryb3koZmQsIHN5bmNvYmpzWzBdKTsKKwlzeW5jb2JqX2Rlc3Ryb3koZmQsIHN5bmNv YmpzWzJdKTsKK30KKworc3RhdGljIHZvaWQKK3Rlc3Rfc2lnbmFsX2JhZF9wYWQoaW50IGZkKQor eworCXN0cnVjdCBkcm1fc3luY29ial90aW1lbGluZV9hcnJheSBhcnJheSA9IHt9OworCXVpbnQz Ml90IGhhbmRsZSA9IDA7CisJaW50IHJldDsKKworCWFycmF5LnBhZCA9IDB4ZGVhZGJlZWY7CisJ YXJyYXkuY291bnRfaGFuZGxlcyA9IDE7CisJYXJyYXkuaGFuZGxlcyA9IHRvX3VzZXJfcG9pbnRl cigmaGFuZGxlKTsKKwlyZXQgPSBpZ3RfaW9jdGwoZmQsIERSTV9JT0NUTF9TWU5DT0JKX1RJTUVM SU5FX1NJR05BTCwgJmFycmF5KTsKKwlpZ3RfYXNzZXJ0KHJldCA9PSAtMSAmJiBlcnJubyA9PSBF SU5WQUwpOworfQorCitzdGF0aWMgdm9pZAordGVzdF9zaWduYWxfYXJyYXkoaW50IGZkKQorewor CXVpbnQzMl90IHN5bmNvYmpzWzRdOworCXVpbnQ2NF90IHBvaW50c1s0XSA9IHsxLCAxLCAxLCAw fTsKKworCXN5bmNvYmpzWzBdID0gc3luY29ial9jcmVhdGUoZmQsIDApOworCXN5bmNvYmpzWzFd ID0gc3luY29ial9jcmVhdGUoZmQsIDApOworCXN5bmNvYmpzWzJdID0gc3luY29ial9jcmVhdGUo ZmQsIDApOworCXN5bmNvYmpzWzNdID0gc3luY29ial9jcmVhdGUoZmQsIDApOworCisJc3luY29i al90aW1lbGluZV9zaWduYWwoZmQsIHN5bmNvYmpzLCBwb2ludHMsIDQpOworCWlndF9hc3NlcnRf ZXEoc3luY29ial90aW1lbGluZV93YWl0X2VycihmZCwgc3luY29ianMsCisJCQkJCQlwb2ludHMs IDMsIDAsIDApLCAwKTsKKwlpZ3RfYXNzZXJ0X2VxKHN5bmNvYmpfd2FpdF9lcnIoZmQsICZzeW5j b2Jqc1szXSwgMSwgMCwgMCksIDApOworCisJc3luY29ial9kZXN0cm95KGZkLCBzeW5jb2Jqc1sw XSk7CisJc3luY29ial9kZXN0cm95KGZkLCBzeW5jb2Jqc1sxXSk7CisJc3luY29ial9kZXN0cm95 KGZkLCBzeW5jb2Jqc1syXSk7CisJc3luY29ial9kZXN0cm95KGZkLCBzeW5jb2Jqc1szXSk7Cit9 CisKK3N0YXRpYyB2b2lkCit0ZXN0X3RyYW5zZmVyX2lsbGVnYWxfaGFuZGxlKGludCBmZCkKK3sK KwlzdHJ1Y3QgZHJtX3N5bmNvYmpfdHJhbnNmZXIgYXJncyA9IHt9OworCXVpbnQzMl90IGhhbmRs ZSA9IDA7CisJaW50IHJldDsKKworCWFyZ3Muc3JjX2hhbmRsZSA9IHRvX3VzZXJfcG9pbnRlcigm aGFuZGxlKTsKKwlhcmdzLmRzdF9oYW5kbGUgPSB0b191c2VyX3BvaW50ZXIoJmhhbmRsZSk7CisJ YXJncy5zcmNfcG9pbnQgPSAxOworCWFyZ3MuZHN0X3BvaW50ID0gMDsKKwlyZXQgPSBpZ3RfaW9j dGwoZmQsIERSTV9JT0NUTF9TWU5DT0JKX1RSQU5TRkVSLCAmYXJncyk7CisJaWd0X2Fzc2VydChy ZXQgPT0gLTEgJiYgZXJybm8gPT0gRU5PRU5UKTsKK30KKworc3RhdGljIHZvaWQKK3Rlc3RfdHJh bnNmZXJfYmFkX3BhZChpbnQgZmQpCit7CisJc3RydWN0IGRybV9zeW5jb2JqX3RyYW5zZmVyIGFy ZyA9IHt9OworCXVpbnQzMl90IGhhbmRsZSA9IDA7CisJaW50IHJldDsKKworCWFyZy5wYWQgPSAw eGRlYWRiZWVmOworCWFyZy5zcmNfaGFuZGxlID0gdG9fdXNlcl9wb2ludGVyKCZoYW5kbGUpOwor CWFyZy5kc3RfaGFuZGxlID0gdG9fdXNlcl9wb2ludGVyKCZoYW5kbGUpOworCXJldCA9IGlndF9p b2N0bChmZCwgRFJNX0lPQ1RMX1NZTkNPQkpfVFJBTlNGRVIsICZhcmcpOworCWlndF9hc3NlcnQo cmV0ID09IC0xICYmIGVycm5vID09IEVJTlZBTCk7Cit9CisKKyNkZWZpbmUgV0FJVF9GT1JfU1VC TUlUCQkoMSA8PCAwKQorI2RlZmluZSBXQUlUX0FMTAkJKDEgPDwgMSkKKyNkZWZpbmUgV0FJVF9B VkFJTEFCTEUJCSgxIDw8IDIpCisjZGVmaW5lIFdBSVRfVU5TVUJNSVRURUQJKDEgPDwgMykKKyNk ZWZpbmUgV0FJVF9TVUJNSVRURUQJCSgxIDw8IDQpCisjZGVmaW5lIFdBSVRfU0lHTkFMRUQJCSgx IDw8IDUpCisjZGVmaW5lIFdBSVRfRkxBR1NfTUFYCQkoMSA8PCA2KSAtIDEKKworc3RhdGljIHVp bnQzMl90CitmbGFnc19mb3JfdGVzdF9mbGFncyh1aW50MzJfdCB0ZXN0X2ZsYWdzKQoreworCXVp bnQzMl90IGZsYWdzID0gMDsKKworCWlmICh0ZXN0X2ZsYWdzICYgV0FJVF9GT1JfU1VCTUlUKQor CQlmbGFncyB8PSBEUk1fU1lOQ09CSl9XQUlUX0ZMQUdTX1dBSVRfRk9SX1NVQk1JVDsKKworCWlm ICh0ZXN0X2ZsYWdzICYgV0FJVF9BVkFJTEFCTEUpCisJCWZsYWdzIHw9IERSTV9TWU5DT0JKX1dB SVRfRkxBR1NfV0FJVF9BVkFJTEFCTEU7CisKKwlpZiAodGVzdF9mbGFncyAmIFdBSVRfQUxMKQor CQlmbGFncyB8PSBEUk1fU1lOQ09CSl9XQUlUX0ZMQUdTX1dBSVRfQUxMOworCisJcmV0dXJuIGZs YWdzOworfQorCitzdGF0aWMgdm9pZAordGVzdF9zaW5nbGVfd2FpdChpbnQgZmQsIHVpbnQzMl90 IHRlc3RfZmxhZ3MsIGludCBleHBlY3QpCit7CisJdWludDMyX3Qgc3luY29iaiA9IHN5bmNvYmpf Y3JlYXRlKGZkLCAwKTsKKwl1aW50MzJfdCBmbGFncyA9IGZsYWdzX2Zvcl90ZXN0X2ZsYWdzKHRl c3RfZmxhZ3MpOworCXVpbnQ2NF90IHBvaW50ID0gMTsKKwlpbnQgdGltZWxpbmUgPSAtMTsKKwor CWlmICh0ZXN0X2ZsYWdzICYgKFdBSVRfU1VCTUlUVEVEIHwgV0FJVF9TSUdOQUxFRCkpCisJCXRp bWVsaW5lID0gc3luY29ial9hdHRhY2hfc3dfc3luYyhmZCwgc3luY29iaiwgcG9pbnQpOworCisJ aWYgKHRlc3RfZmxhZ3MgJiBXQUlUX1NJR05BTEVEKQorCQlzd19zeW5jX3RpbWVsaW5lX2luYyh0 aW1lbGluZSwgMSk7CisKKwlpZ3RfYXNzZXJ0X2VxKHN5bmNvYmpfdGltZWxpbmVfd2FpdF9lcnIo ZmQsICZzeW5jb2JqLCAmcG9pbnQsIDEsCisJCQkJCQkwLCBmbGFncyksIGV4cGVjdCk7CisKKwlp Z3RfYXNzZXJ0X2VxKHN5bmNvYmpfdGltZWxpbmVfd2FpdF9lcnIoZmQsICZzeW5jb2JqLCAmcG9p bnQsIDEsCisJCQkJCQlzaG9ydF90aW1lb3V0KCksIGZsYWdzKSwgZXhwZWN0KTsKKworCWlmIChl eHBlY3QgIT0gLUVUSU1FKSB7CisJCWlndF9hc3NlcnRfZXEoc3luY29ial90aW1lbGluZV93YWl0 X2VycihmZCwgJnN5bmNvYmosICZwb2ludCwgMSwKKwkJCQkJCQlVSU5UNjRfTUFYLCBmbGFncyks IGV4cGVjdCk7CisJfQorCisJc3luY29ial9kZXN0cm95KGZkLCBzeW5jb2JqKTsKKwlpZiAodGlt ZWxpbmUgIT0gLTEpCisJCWNsb3NlKHRpbWVsaW5lKTsKK30KKworc3RhdGljIHZvaWQKK3Rlc3Rf d2FpdF9kZWxheWVkX3NpZ25hbChpbnQgZmQsIHVpbnQzMl90IHRlc3RfZmxhZ3MpCit7CisJdWlu dDMyX3Qgc3luY29iaiA9IHN5bmNvYmpfY3JlYXRlKGZkLCAwKTsKKwl1aW50MzJfdCBmbGFncyA9 IGZsYWdzX2Zvcl90ZXN0X2ZsYWdzKHRlc3RfZmxhZ3MpOworCXVpbnQ2NF90IHBvaW50ID0gMTsK KwlpbnQgdGltZWxpbmUgPSAtMTsKKwl0aW1lcl90IHRpbWVyOworCisJaWYgKHRlc3RfZmxhZ3Mg JiBXQUlUX0ZPUl9TVUJNSVQpIHsKKwkJdGltZXIgPSBzeW5jb2JqX3RyaWdnZXJfZGVsYXllZChm ZCwgc3luY29iaiwgcG9pbnQsIFNIT1JUX1RJTUVfTlNFQyk7CisJfSBlbHNlIHsKKwkJdGltZWxp bmUgPSBzeW5jb2JqX2F0dGFjaF9zd19zeW5jKGZkLCBzeW5jb2JqLCBwb2ludCk7CisJCXRpbWVy ID0gc2V0X3RpbWVyKHRpbWVsaW5lX2luY19mdW5jLCBOVUxMLAorCQkJCSAgdGltZWxpbmUsIFNI T1JUX1RJTUVfTlNFQyk7CisJfQorCisJaWd0X2Fzc2VydChzeW5jb2JqX3RpbWVsaW5lX3dhaXQo ZmQsICZzeW5jb2JqLCAmcG9pbnQsIDEsCisJCQkJZ2V0dGltZV9ucygpICsgU0hPUlRfVElNRV9O U0VDICogMiwKKwkJCQlmbGFncywgTlVMTCkpOworCisJdGltZXJfZGVsZXRlKHRpbWVyKTsKKwor CWlmICh0aW1lbGluZSAhPSAtMSkKKwkJY2xvc2UodGltZWxpbmUpOworCisJc3luY29ial9kZXN0 cm95KGZkLCBzeW5jb2JqKTsKK30KKworc3RhdGljIHZvaWQKK3Rlc3RfcmVzZXRfdW5zaWduYWxl ZChpbnQgZmQpCit7CisJdWludDMyX3Qgc3luY29iaiA9IHN5bmNvYmpfY3JlYXRlKGZkLCAwKTsK Kwl1aW50NjRfdCBwb2ludCA9IDE7CisKKwlpZ3RfYXNzZXJ0X2VxKHN5bmNvYmpfdGltZWxpbmVf d2FpdF9lcnIoZmQsICZzeW5jb2JqLCAmcG9pbnQsCisJCQkJCQkxLCAwLCAwKSwgLUVJTlZBTCk7 CisKKwlzeW5jb2JqX3Jlc2V0KGZkLCAmc3luY29iaiwgMSk7CisKKwlpZ3RfYXNzZXJ0X2VxKHN5 bmNvYmpfdGltZWxpbmVfd2FpdF9lcnIoZmQsICZzeW5jb2JqLCAmcG9pbnQsCisJCQkJCQkxLCAw LCAwKSwgLUVJTlZBTCk7CisKKwlzeW5jb2JqX2Rlc3Ryb3koZmQsIHN5bmNvYmopOworfQorCitz dGF0aWMgdm9pZAordGVzdF9yZXNldF9zaWduYWxlZChpbnQgZmQpCit7CisJdWludDMyX3Qgc3lu Y29iaiA9IHN5bmNvYmpfY3JlYXRlKGZkLCAwKTsKKwl1aW50NjRfdCBwb2ludCA9IDE7CisKKwlz eW5jb2JqX3RyaWdnZXIoZmQsIHN5bmNvYmosIHBvaW50KTsKKworCWlndF9hc3NlcnRfZXEoc3lu Y29ial90aW1lbGluZV93YWl0X2VycihmZCwgJnN5bmNvYmosICZwb2ludCwKKwkJCQkJCTEsIDAs IDApLCAwKTsKKworCXN5bmNvYmpfcmVzZXQoZmQsICZzeW5jb2JqLCAxKTsKKworCWlndF9hc3Nl cnRfZXEoc3luY29ial90aW1lbGluZV93YWl0X2VycihmZCwgJnN5bmNvYmosICZwb2ludCwKKwkJ CQkJCTEsIDAsIDApLCAtRUlOVkFMKTsKKworCXN5bmNvYmpfZGVzdHJveShmZCwgc3luY29iaik7 Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3Jlc2V0X211bHRpcGxlX3NpZ25hbGVkKGludCBmZCkK K3sKKwl1aW50NjRfdCBwb2ludHNbM10gPSB7MSwgMSwgMX07CisJdWludDMyX3Qgc3luY29ianNb M107CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCXN5bmNvYmpzW2ld ID0gc3luY29ial9jcmVhdGUoZmQsIDApOworCQlzeW5jb2JqX3RyaWdnZXIoZmQsIHN5bmNvYmpz W2ldLCBwb2ludHNbaV0pOworCX0KKworCWlndF9hc3NlcnRfZXEoc3luY29ial90aW1lbGluZV93 YWl0X2VycihmZCwgc3luY29ianMsIHBvaW50cywgMywgMCwgMCksIDApOworCisJc3luY29ial9y ZXNldChmZCwgc3luY29ianMsIDMpOworCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQlp Z3RfYXNzZXJ0X2VxKHN5bmNvYmpfdGltZWxpbmVfd2FpdF9lcnIoZmQsICZzeW5jb2Jqc1tpXSwK KwkJCQkJCQkmcG9pbnRzW2ldLCAxLAorCQkJCQkJCTAsIDApLCAtRUlOVkFMKTsKKwkJc3luY29i al9kZXN0cm95KGZkLCBzeW5jb2Jqc1tpXSk7CisJfQorfQorCitzdGF0aWMgdm9pZAorcmVzZXRf YW5kX3RyaWdnZXJfZnVuYyh1bmlvbiBzaWd2YWwgc2lndmFsKQoreworCXN0cnVjdCBmZF9oYW5k bGVfcGFpciAqcGFpciA9IHNpZ3ZhbC5zaXZhbF9wdHI7CisJc3luY29ial9yZXNldChwYWlyLT5m ZCwgJnBhaXItPmhhbmRsZSwgMSk7CisJc3luY29ial90cmlnZ2VyKHBhaXItPmZkLCBwYWlyLT5o YW5kbGUsIHBhaXItPnBvaW50KTsKK30KKworc3RhdGljIHZvaWQKK3Rlc3RfcmVzZXRfZHVyaW5n X3dhaXRfZm9yX3N1Ym1pdChpbnQgZmQpCit7CisJdWludDMyX3Qgc3luY29iaiA9IHN5bmNvYmpf Y3JlYXRlKGZkLCAwKTsKKwl1aW50MzJfdCBmbGFncyA9IERSTV9TWU5DT0JKX1dBSVRfRkxBR1Nf V0FJVF9GT1JfU1VCTUlUOworCXN0cnVjdCBmZF9oYW5kbGVfcGFpciBwYWlyOworCXVpbnQ2NF90 IHBvaW50ID0gMTsKKwl0aW1lcl90IHRpbWVyOworCisJcGFpci5mZCA9IGZkOworCXBhaXIuaGFu ZGxlID0gc3luY29iajsKKwl0aW1lciA9IHNldF90aW1lcihyZXNldF9hbmRfdHJpZ2dlcl9mdW5j LCAmcGFpciwgMCwgU0hPUlRfVElNRV9OU0VDKTsKKworCS8qIEEgcmVzZXQgc2hvdWxkIGJlIGEg bm8tb3AgZXZlbiBpZiB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIGEgd2FpdCAqLworCWlndF9hc3Nl cnQoc3luY29ial90aW1lbGluZV93YWl0KGZkLCAmc3luY29iaiwgJnBvaW50LCAxLAorCQkJCWdl dHRpbWVfbnMoKSArIFNIT1JUX1RJTUVfTlNFQyAqIDIsCisJCQkJZmxhZ3MsIE5VTEwpKTsKKwor CXRpbWVyX2RlbGV0ZSh0aW1lcik7CisKKwlzeW5jb2JqX2Rlc3Ryb3koZmQsIHN5bmNvYmopOwor fQorCitzdGF0aWMgdm9pZAordGVzdF9zaWduYWwoaW50IGZkKQoreworCXVpbnQzMl90IHN5bmNv YmogPSBzeW5jb2JqX2NyZWF0ZShmZCwgMCk7CisJdWludDMyX3QgZmxhZ3MgPSBEUk1fU1lOQ09C Sl9XQUlUX0ZMQUdTX1dBSVRfRk9SX1NVQk1JVDsKKwl1aW50NjRfdCBwb2ludCA9IDE7CisKKwlp Z3RfYXNzZXJ0X2VxKHN5bmNvYmpfdGltZWxpbmVfd2FpdF9lcnIoZmQsICZzeW5jb2JqLCAmcG9p bnQsCisJCQkJCQkxLCAwLCAwKSwgLUVJTlZBTCk7CisJaWd0X2Fzc2VydF9lcShzeW5jb2JqX3Rp bWVsaW5lX3dhaXRfZXJyKGZkLCAmc3luY29iaiwgJnBvaW50LAorCQkJCQkJMSwgMCwgZmxhZ3Mp LCAtRVRJTUUpOworCisJc3luY29ial90aW1lbGluZV9zaWduYWwoZmQsICZzeW5jb2JqLCAmcG9p bnQsIDEpOworCisJaWd0X2Fzc2VydChzeW5jb2JqX3RpbWVsaW5lX3dhaXQoZmQsICZzeW5jb2Jq LCAmcG9pbnQsIDEsIDAsIDAsIE5VTEwpKTsKKwlpZ3RfYXNzZXJ0KHN5bmNvYmpfdGltZWxpbmVf d2FpdChmZCwgJnN5bmNvYmosICZwb2ludCwgMSwgMCwgZmxhZ3MsIE5VTEwpKTsKKworCXN5bmNv YmpfZGVzdHJveShmZCwgc3luY29iaik7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X211bHRpX3dh aXQoaW50IGZkLCB1aW50MzJfdCB0ZXN0X2ZsYWdzLCBpbnQgZXhwZWN0KQoreworCXVpbnQzMl90 IHRmbGFnLCBmbGFnczsKKwlpbnQgaSwgZmlkeCwgdGltZWxpbmU7CisJdWludDY0X3QgcG9pbnRz WzVdID0geworCQkxICsgcmFuZCgpICUgMTAwMCwKKwkJMCwgLyogbm9uIHRpbWVsaW5lIHN5bmNv YmogKi8KKwkJMSArIHJhbmQoKSAlIDEwMDAsCisJCTEgKyByYW5kKCkgJSAxMDAwLAorCQkwLCAv KiBub24gdGltZWxpbmUgc3luY29iaiAqLworCX07CisJdWludDMyX3Qgc3luY29ianNbQVJSQVlf U0laRShwb2ludHMpXTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBvaW50cyk7IGkr KykKKwkJc3luY29ianNbaV0gPSBzeW5jb2JqX2NyZWF0ZShmZCwgMCk7CisKKwlmbGFncyA9IGZs YWdzX2Zvcl90ZXN0X2ZsYWdzKHRlc3RfZmxhZ3MpOworCXRlc3RfZmxhZ3MgJj0gfihXQUlUX0FM TCB8IFdBSVRfRk9SX1NVQk1JVCB8IFdBSVRfQVZBSUxBQkxFKTsKKworCWZvciAoaSA9IDA7IGkg PCBBUlJBWV9TSVpFKHBvaW50cyk7IGkrKykgeworCQlmaWR4ID0gZmZzKHRlc3RfZmxhZ3MpIC0g MTsKKwkJdGZsYWcgPSAoMSA8PCBmaWR4KTsKKworCQlpZiAodGVzdF9mbGFncyAmIH50ZmxhZykK KwkJCXRlc3RfZmxhZ3MgJj0gfnRmbGFnOworCisJCWlmICh0ZmxhZyAmIChXQUlUX1NVQk1JVFRF RCB8IFdBSVRfU0lHTkFMRUQpKSB7CisJCQl0aW1lbGluZSA9IHN5bmNvYmpfYXR0YWNoX3N3X3N5 bmMoZmQsIHN5bmNvYmpzW2ldLAorCQkJCQkJCSAgcG9pbnRzW2ldKTsKKwkJfQorCQlpZiAodGZs YWcgJiBXQUlUX1NJR05BTEVEKQorCQkJc3dfc3luY190aW1lbGluZV9pbmModGltZWxpbmUsIDEp OworCX0KKworCWlndF9hc3NlcnRfZXEoc3luY29ial90aW1lbGluZV93YWl0X2VycihmZCwgc3lu Y29ianMsCisJCQkJCQlwb2ludHMsIEFSUkFZX1NJWkUocG9pbnRzKSwKKwkJCQkJCTAsIGZsYWdz KSwgZXhwZWN0KTsKKworCWlndF9hc3NlcnRfZXEoc3luY29ial90aW1lbGluZV93YWl0X2Vycihm ZCwgc3luY29ianMsCisJCQkJCQlwb2ludHMsIEFSUkFZX1NJWkUocG9pbnRzKSwKKwkJCQkJCXNo b3J0X3RpbWVvdXQoKSwKKwkJCQkJCWZsYWdzKSwgZXhwZWN0KTsKKworCWlmIChleHBlY3QgIT0g LUVUSU1FKSB7CisJCWlndF9hc3NlcnRfZXEoc3luY29ial90aW1lbGluZV93YWl0X2VycihmZCwg c3luY29ianMsCisJCQkJCQkJcG9pbnRzLCBBUlJBWV9TSVpFKHBvaW50cyksCisJCQkJCQkJVUlO VDY0X01BWCwKKwkJCQkJCQlmbGFncyksIGV4cGVjdCk7CisJfQorCisJZm9yIChpID0gMDsgaSA8 IEFSUkFZX1NJWkUocG9pbnRzKTsgaSsrKQorCQlzeW5jb2JqX2Rlc3Ryb3koZmQsIHN5bmNvYmpz W2ldKTsKK30KKworc3RydWN0IHdhaXRfdGhyZWFkX2RhdGEgeworCWludCBmZDsKKwlzdHJ1Y3Qg ZHJtX3N5bmNvYmpfdGltZWxpbmVfd2FpdCB3YWl0OworfTsKKworc3RhdGljIHZvaWQgKgord2Fp dF90aHJlYWRfZnVuYyh2b2lkICpkYXRhKQoreworCXN0cnVjdCB3YWl0X3RocmVhZF9kYXRhICp3 YWl0ID0gZGF0YTsKKwlpZ3RfYXNzZXJ0X2VxKF9fc3luY29ial90aW1lbGluZV93YWl0X2lvY3Rs KHdhaXQtPmZkLCAmd2FpdC0+d2FpdCksIDApOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMg dm9pZAordGVzdF93YWl0X3NuYXBzaG90KGludCBmZCwgdWludDMyX3QgdGVzdF9mbGFncykKK3sK KwlzdHJ1Y3Qgd2FpdF90aHJlYWRfZGF0YSB3YWl0ID0ge307CisJdWludDMyX3Qgc3luY29ianNb Ml07CisJdWludDY0X3QgcG9pbnRzWzJdID0gezEsIDF9OworCWludCB0aW1lbGluZXNbM10gPSB7 IC0xLCAtMSwgLTEgfTsKKwlwdGhyZWFkX3QgdGhyZWFkOworCisJc3luY29ianNbMF0gPSBzeW5j b2JqX2NyZWF0ZShmZCwgMCk7CisJc3luY29ianNbMV0gPSBzeW5jb2JqX2NyZWF0ZShmZCwgMCk7 CisKKwlpZiAoISh0ZXN0X2ZsYWdzICYgV0FJVF9GT1JfU1VCTUlUKSkgeworCQl0aW1lbGluZXNb MF0gPSBzeW5jb2JqX2F0dGFjaF9zd19zeW5jKGZkLCBzeW5jb2Jqc1swXSwgcG9pbnRzWzBdKTsK KwkJdGltZWxpbmVzWzFdID0gc3luY29ial9hdHRhY2hfc3dfc3luYyhmZCwgc3luY29ianNbMV0s IHBvaW50c1sxXSk7CisJfQorCisJd2FpdC5mZCA9IGZkOworCXdhaXQud2FpdC5oYW5kbGVzID0g dG9fdXNlcl9wb2ludGVyKHN5bmNvYmpzKTsKKwl3YWl0LndhaXQuY291bnRfaGFuZGxlcyA9IDI7 CisJd2FpdC53YWl0LnBvaW50cyA9IHRvX3VzZXJfcG9pbnRlcihwb2ludHMpOworCXdhaXQud2Fp dC50aW1lb3V0X25zZWMgPSBzaG9ydF90aW1lb3V0KCk7CisJd2FpdC53YWl0LmZsYWdzID0gZmxh Z3NfZm9yX3Rlc3RfZmxhZ3ModGVzdF9mbGFncyk7CisKKwlpZ3RfYXNzZXJ0X2VxKHB0aHJlYWRf Y3JlYXRlKCZ0aHJlYWQsIE5VTEwsIHdhaXRfdGhyZWFkX2Z1bmMsICZ3YWl0KSwgMCk7CisKKwlz bGVlcF9uc2VjKFNIT1JUX1RJTUVfTlNFQyAvIDUpOworCisJLyogVHJ5IHRvIGZha2UgdGhlIGtl cm5lbCBvdXQgYnkgdHJpZ2dlcmluZyBvciBwYXJ0aWFsbHkgdHJpZ2dlcmluZworCSAqIHRoZSBm aXJzdCBmZW5jZS4KKwkgKi8KKwlpZiAodGVzdF9mbGFncyAmIFdBSVRfQUxMKSB7CisJCS8qIElm IGl0J3MgV0FJVF9BTEwsIGFjdHVhbGx5IHRyaWdnZXIgaXQgKi8KKwkJaWYgKHRpbWVsaW5lc1sw XSA9PSAtMSkKKwkJCXN5bmNvYmpfdHJpZ2dlcihmZCwgc3luY29ianNbMF0sIHBvaW50c1swXSk7 CisJCWVsc2UKKwkJCXN3X3N5bmNfdGltZWxpbmVfaW5jKHRpbWVsaW5lc1swXSwgMSk7CisJfSBl bHNlIGlmICh0ZXN0X2ZsYWdzICYgV0FJVF9GT1JfU1VCTUlUKSB7CisJCXRpbWVsaW5lc1swXSA9 IHN5bmNvYmpfYXR0YWNoX3N3X3N5bmMoZmQsIHN5bmNvYmpzWzBdLCBwb2ludHNbMF0pOworCX0K KworCXNsZWVwX25zZWMoU0hPUlRfVElNRV9OU0VDIC8gNSk7CisKKwkvKiBUaGVuIHJlc2V0IGl0 ICovCisJc3luY29ial9yZXNldChmZCwgJnN5bmNvYmpzWzBdLCAxKTsKKworCXNsZWVwX25zZWMo U0hPUlRfVElNRV9OU0VDIC8gNSk7CisKKwkvKiBUaGVuICJzdWJtaXQiIGl0IGluIGEgd2F5IHRo YXQgd2lsbCBuZXZlciB0cmlnZ2VyLiAgVGhpcyB3YXksIGlmCisJICogdGhlIGtlcm5lbCBwaWNr cyB1cCBvbiB0aGUgbmV3IGZlbmNlIChpdCBzaG91bGRuJ3QpLCB3ZSdsbCBnZXQgYQorCSAqIHRp bWVvdXQuCisJICovCisJdGltZWxpbmVzWzJdID0gc3luY29ial9hdHRhY2hfc3dfc3luYyhmZCwg c3luY29ianNbMF0sIHBvaW50c1swXSk7CisKKwlzbGVlcF9uc2VjKFNIT1JUX1RJTUVfTlNFQyAv IDUpOworCisJLyogTm93IHRyaWdnZXIgdGhlIHNlY29uZCBmZW5jZSB0byBjb21wbGV0ZSB0aGUg d2FpdCAqLworCisJaWYgKHRpbWVsaW5lc1sxXSA9PSAtMSkKKwkJc3luY29ial90cmlnZ2VyKGZk LCBzeW5jb2Jqc1sxXSwgcG9pbnRzWzFdKTsKKwllbHNlCisJCXN3X3N5bmNfdGltZWxpbmVfaW5j KHRpbWVsaW5lc1sxXSwgMSk7CisKKwlwdGhyZWFkX2pvaW4odGhyZWFkLCBOVUxMKTsKKworCWlm ICghKHRlc3RfZmxhZ3MgJiBXQUlUX0FMTCkpCisJCWlndF9hc3NlcnRfZXEod2FpdC53YWl0LmZp cnN0X3NpZ25hbGVkLCAxKTsKKworCWNsb3NlKHRpbWVsaW5lc1swXSk7CisJY2xvc2UodGltZWxp bmVzWzFdKTsKKwljbG9zZSh0aW1lbGluZXNbMl0pOworCXN5bmNvYmpfZGVzdHJveShmZCwgc3lu Y29ianNbMF0pOworCXN5bmNvYmpfZGVzdHJveShmZCwgc3luY29ianNbMV0pOworfQorCisvKiBU aGUgbnVtYmVycyAwLTcsIGVhY2ggcmVwZWF0ZWQgNXggYW5kIHNodWZmbGVkLiAqLworc3RhdGlj IGNvbnN0IHVuc2lnbmVkIHNodWZmbGVkXzBfN194NFtdID0geworCTIsIDAsIDYsIDEsIDEsIDQs IDUsIDIsIDAsIDcsIDEsIDcsIDYsIDMsIDQsIDUsCisJMCwgMiwgNywgMywgNSwgNCwgMCwgNiwg NywgMywgMiwgNSwgNiwgMSwgNCwgMywKK307CisKK2VudW0gc3luY29ial9zdGFnZSB7CisJU1RB R0VfVU5TVUJNSVRURUQsCisJU1RBR0VfU1VCTUlUVEVELAorCVNUQUdFX1NJR05BTEVELAorCVNU QUdFX1JFU0VULAorCVNUQUdFX1JFU1VCTUlUVEVELAorfTsKKworc3RhdGljIHZvaWQKK3Rlc3Rf d2FpdF9jb21wbGV4KGludCBmZCwgdWludDMyX3QgdGVzdF9mbGFncykKK3sKKwlzdHJ1Y3Qgd2Fp dF90aHJlYWRfZGF0YSB3YWl0ID0ge307CisJdWludDMyX3Qgc3luY29ianNbOF07CisJdWludDY0 X3QgcG9pbnRzWzhdID0gezEsIDEsIDEsIDEsIDEsIDEsIDEsIDF9OworCWVudW0gc3luY29ial9z dGFnZSBzdGFnZVs4XTsKKwlpbnQgaSwgaiwgdGltZWxpbmVzWzhdOworCXVpbnQzMl90IGZpcnN0 X3NpZ25hbGVkID0gLTEsIG51bV9zaWduYWxlZCA9IDA7CisJcHRocmVhZF90IHRocmVhZDsKKwor CWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJc3RhZ2VbaV0gPSBTVEFHRV9VTlNVQk1JVFRF RDsKKwkJc3luY29ianNbaV0gPSBzeW5jb2JqX2NyZWF0ZShmZCwgMCk7CisJfQorCisJaWYgKHRl c3RfZmxhZ3MgJiBXQUlUX0ZPUl9TVUJNSVQpIHsKKwkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykK KwkJCXRpbWVsaW5lc1tpXSA9IC0xOworCX0gZWxzZSB7CisJCWZvciAoaSA9IDA7IGkgPCA4OyBp KyspCisJCQl0aW1lbGluZXNbaV0gPSBzeW5jb2JqX2F0dGFjaF9zd19zeW5jKGZkLCBzeW5jb2Jq c1tpXSwKKwkJCQkJCQkgICAgICBwb2ludHNbaV0pOworCX0KKworCXdhaXQuZmQgPSBmZDsKKwl3 YWl0LndhaXQuaGFuZGxlcyA9IHRvX3VzZXJfcG9pbnRlcihzeW5jb2Jqcyk7CisJd2FpdC53YWl0 LmNvdW50X2hhbmRsZXMgPSAyOworCXdhaXQud2FpdC5wb2ludHMgPSB0b191c2VyX3BvaW50ZXIo cG9pbnRzKTsKKwl3YWl0LndhaXQudGltZW91dF9uc2VjID0gZ2V0dGltZV9ucygpICsgTlNFQ1Nf UEVSX1NFQzsKKwl3YWl0LndhaXQuZmxhZ3MgPSBmbGFnc19mb3JfdGVzdF9mbGFncyh0ZXN0X2Zs YWdzKTsKKworCWlndF9hc3NlcnRfZXEocHRocmVhZF9jcmVhdGUoJnRocmVhZCwgTlVMTCwgd2Fp dF90aHJlYWRfZnVuYywgJndhaXQpLCAwKTsKKworCXNsZWVwX25zZWMoTlNFQ1NfUEVSX1NFQyAv IDUwKTsKKworCW51bV9zaWduYWxlZCA9IDA7CisJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUo c2h1ZmZsZWRfMF83X3g0KTsgaisrKSB7CisJCWkgPSBzaHVmZmxlZF8wXzdfeDRbal07CisJCWln dF9hc3NlcnRfbHQoaSwgQVJSQVlfU0laRShzeW5jb2JqcykpOworCisJCXN3aXRjaCAoc3RhZ2Vb aV0rKykgeworCQljYXNlIFNUQUdFX1VOU1VCTUlUVEVEOgorCQkJLyogV2UgbmVlZCB0byBzdWJt aXQgYXR0YWNoIGEgZmVuY2UgKi8KKwkJCWlmICghKHRlc3RfZmxhZ3MgJiBXQUlUX0ZPUl9TVUJN SVQpKSB7CisJCQkJLyogV2UgaGFkIHRvIGF0dGFjaCBvbmUgdXAtZnJvbnQgKi8KKwkJCQlpZ3Rf YXNzZXJ0X25lcSh0aW1lbGluZXNbaV0sIC0xKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXRpbWVs aW5lc1tpXSA9IHN5bmNvYmpfYXR0YWNoX3N3X3N5bmMoZmQsIHN5bmNvYmpzW2ldLAorCQkJCQkJ CSAgICAgIHBvaW50c1tpXSk7CisJCQlicmVhazsKKworCQljYXNlIFNUQUdFX1NVQk1JVFRFRDoK KwkJCS8qIFdlIGhhdmUgYSBmZW5jZSwgdHJpZ2dlciBpdCAqLworCQkJaWd0X2Fzc2VydF9uZXEo dGltZWxpbmVzW2ldLCAtMSk7CisJCQlzd19zeW5jX3RpbWVsaW5lX2luYyh0aW1lbGluZXNbaV0s IDEpOworCQkJY2xvc2UodGltZWxpbmVzW2ldKTsKKwkJCXRpbWVsaW5lc1tpXSA9IC0xOworCQkJ aWYgKG51bV9zaWduYWxlZCA9PSAwKQorCQkJCWZpcnN0X3NpZ25hbGVkID0gaTsKKwkJCW51bV9z aWduYWxlZCsrOworCQkJYnJlYWs7CisKKwkJY2FzZSBTVEFHRV9TSUdOQUxFRDoKKwkJCS8qIFdl J3JlIGFscmVhZHkgc2lnbmFsZWQsIHJlc2V0ICovCisJCQlzeW5jb2JqX3Jlc2V0KGZkLCAmc3lu Y29ianNbaV0sIDEpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTVEFHRV9SRVNFVDoKKwkJCS8qIFdl J3JlIHJlc2V0LCBzdWJtaXQgYW5kIGRvbid0IHNpZ25hbCAqLworCQkJdGltZWxpbmVzW2ldID0g c3luY29ial9hdHRhY2hfc3dfc3luYyhmZCwgc3luY29ianNbaV0sCisJCQkJCQkJICAgICAgcG9p bnRzW2ldKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU1RBR0VfUkVTVUJNSVRURUQ6CisJCQlpZ3Rf YXNzZXJ0KCEiU2hvdWxkIG5vdCByZWFjaCB0aGlzIHN0YWdlIik7CisJCQlicmVhazsKKwkJfQor CisJCWlmICh0ZXN0X2ZsYWdzICYgV0FJVF9BTEwpIHsKKwkJCWlmIChudW1fc2lnbmFsZWQgPT0g QVJSQVlfU0laRShzeW5jb2JqcykpCisJCQkJYnJlYWs7CisJCX0gZWxzZSB7CisJCQlpZiAobnVt X3NpZ25hbGVkID4gMCkKKwkJCQlicmVhazsKKwkJfQorCisJCXNsZWVwX25zZWMoTlNFQ1NfUEVS X1NFQyAvIDEwMCk7CisJfQorCisJcHRocmVhZF9qb2luKHRocmVhZCwgTlVMTCk7CisKKwlpZiAo dGVzdF9mbGFncyAmIFdBSVRfQUxMKSB7CisJCWlndF9hc3NlcnRfZXEobnVtX3NpZ25hbGVkLCBB UlJBWV9TSVpFKHN5bmNvYmpzKSk7CisJfSBlbHNlIHsKKwkJaWd0X2Fzc2VydF9lcShudW1fc2ln bmFsZWQsIDEpOworCQlpZ3RfYXNzZXJ0X2VxKHdhaXQud2FpdC5maXJzdF9zaWduYWxlZCwgZmly c3Rfc2lnbmFsZWQpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJY2xvc2Uo dGltZWxpbmVzW2ldKTsKKwkJc3luY29ial9kZXN0cm95KGZkLCBzeW5jb2Jqc1tpXSk7CisJfQor fQorCitzdGF0aWMgdm9pZAordGVzdF93YWl0X2ludGVycnVwdGVkKGludCBmZCwgdWludDMyX3Qg dGVzdF9mbGFncykKK3sKKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmVfd2FpdCB3YWl0ID0g e307CisJdWludDMyX3Qgc3luY29iaiA9IHN5bmNvYmpfY3JlYXRlKGZkLCAwKTsKKwl1aW50NjRf dCBwb2ludCA9IDE7CisJaW50IHRpbWVsaW5lOworCisJd2FpdC5oYW5kbGVzID0gdG9fdXNlcl9w b2ludGVyKCZzeW5jb2JqKTsKKwl3YWl0LnBvaW50cyA9IHRvX3VzZXJfcG9pbnRlcigmcG9pbnQp OworCXdhaXQuY291bnRfaGFuZGxlcyA9IDE7CisJd2FpdC5mbGFncyA9IGZsYWdzX2Zvcl90ZXN0 X2ZsYWdzKHRlc3RfZmxhZ3MpOworCisJaWYgKHRlc3RfZmxhZ3MgJiBXQUlUX0ZPUl9TVUJNSVQp IHsKKwkJd2FpdC50aW1lb3V0X25zZWMgPSBzaG9ydF90aW1lb3V0KCk7CisJCWlndF93aGlsZV9p bnRlcnJ1cHRpYmxlKHRydWUpCisJCQlpZ3RfYXNzZXJ0X2VxKF9fc3luY29ial90aW1lbGluZV93 YWl0X2lvY3RsKGZkLCAmd2FpdCksIC1FVElNRSk7CisJfQorCisJdGltZWxpbmUgPSBzeW5jb2Jq X2F0dGFjaF9zd19zeW5jKGZkLCBzeW5jb2JqLCBwb2ludCk7CisKKwl3YWl0LnRpbWVvdXRfbnNl YyA9IHNob3J0X3RpbWVvdXQoKTsKKwlpZ3Rfd2hpbGVfaW50ZXJydXB0aWJsZSh0cnVlKQorCQlp Z3RfYXNzZXJ0X2VxKF9fc3luY29ial90aW1lbGluZV93YWl0X2lvY3RsKGZkLCAmd2FpdCksIC1F VElNRSk7CisKKwlzeW5jb2JqX2Rlc3Ryb3koZmQsIHN5bmNvYmopOworCWNsb3NlKHRpbWVsaW5l KTsKK30KKworc3RhdGljIGJvb2wKK2hhc19zeW5jb2JqX3RpbWVsaW5lX3dhaXQoaW50IGZkKQor eworCXN0cnVjdCBkcm1fc3luY29ial90aW1lbGluZV93YWl0IHdhaXQgPSB7fTsKKwl1aW50MzJf dCBoYW5kbGUgPSAwOworCXVpbnQ2NF90IHZhbHVlOworCWludCByZXQ7CisKKwlpZiAoZHJtR2V0 Q2FwKGZkLCBEUk1fQ0FQX1NZTkNPQkpfVElNRUxJTkUsICZ2YWx1ZSkpCisJCXJldHVybiBmYWxz ZTsKKwlpZiAoIXZhbHVlKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBUcnkgd2FpdGluZyBmb3Ig emVybyBzeW5jIG9iamVjdHMgc2hvdWxkIGZhaWwgd2l0aCBFSU5WQUwgKi8KKwl3YWl0LmNvdW50 X2hhbmRsZXMgPSAxOworCXdhaXQuaGFuZGxlcyA9IHRvX3VzZXJfcG9pbnRlcigmaGFuZGxlKTsK KwlyZXQgPSBpZ3RfaW9jdGwoZmQsIERSTV9JT0NUTF9TWU5DT0JKX1RJTUVMSU5FX1dBSVQsICZ3 YWl0KTsKKwlyZXR1cm4gcmV0ID09IC0xICYmIGVycm5vID09IEVOT0VOVDsKK30KKworaWd0X21h aW4KK3sKKwlpbnQgZmQgPSAtMTsKKworCWlndF9maXh0dXJlIHsKKwkJZmQgPSBkcm1fb3Blbl9k cml2ZXIoRFJJVkVSX0FOWSk7CisJCWlndF9yZXF1aXJlKGhhc19zeW5jb2JqX3RpbWVsaW5lX3dh aXQoZmQpKTsKKwkJaWd0X3JlcXVpcmVfc3dfc3luYygpOworCX0KKworCWlndF9zdWJ0ZXN0KCJp bnZhbGlkLXdhaXQtYmFkLWZsYWdzIikKKwkJdGVzdF93YWl0X2JhZF9mbGFncyhmZCk7CisKKwlp Z3Rfc3VidGVzdCgiaW52YWxpZC13YWl0LXplcm8taGFuZGxlcyIpCisJCXRlc3Rfd2FpdF96ZXJv X2hhbmRsZXMoZmQpOworCisJaWd0X3N1YnRlc3QoImludmFsaWQtd2FpdC1pbGxlZ2FsLWhhbmRs ZSIpCisJCXRlc3Rfd2FpdF9pbGxlZ2FsX2hhbmRsZShmZCk7CisKKwlpZ3Rfc3VidGVzdCgiaW52 YWxpZC1xdWVyeS16ZXJvLWhhbmRsZXMiKQorCQl0ZXN0X3F1ZXJ5X3plcm9faGFuZGxlcyhmZCk7 CisKKwlpZ3Rfc3VidGVzdCgiaW52YWxpZC1xdWVyeS1pbGxlZ2FsLWhhbmRsZSIpCisJCXRlc3Rf cXVlcnlfaWxsZWdhbF9oYW5kbGUoZmQpOworCisJaWd0X3N1YnRlc3QoImludmFsaWQtcXVlcnkt b25lLWlsbGVnYWwtaGFuZGxlIikKKwkJdGVzdF9xdWVyeV9vbmVfaWxsZWdhbF9oYW5kbGUoZmQp OworCisJaWd0X3N1YnRlc3QoImludmFsaWQtcXVlcnktYmFkLXBhZCIpCisJCXRlc3RfcXVlcnlf YmFkX3BhZChmZCk7CisKKwlpZ3Rfc3VidGVzdCgiaW52YWxpZC1zaWduYWwtemVyby1oYW5kbGVz IikKKwkJdGVzdF9zaWduYWxfemVyb19oYW5kbGVzKGZkKTsKKworCWlndF9zdWJ0ZXN0KCJpbnZh bGlkLXNpZ25hbC1pbGxlZ2FsLWhhbmRsZSIpCisJCXRlc3Rfc2lnbmFsX2lsbGVnYWxfaGFuZGxl KGZkKTsKKworCWlndF9zdWJ0ZXN0KCJpbnZhbGlkLXNpZ25hbC1pbGxlZ2FsLXBvaW50IikKKwkJ dGVzdF9zaWduYWxfaWxsZWdhbF9wb2ludChmZCk7CisKKwlpZ3Rfc3VidGVzdCgiaW52YWxpZC1z aWduYWwtb25lLWlsbGVnYWwtaGFuZGxlIikKKwkJdGVzdF9zaWduYWxfb25lX2lsbGVnYWxfaGFu ZGxlKGZkKTsKKworCWlndF9zdWJ0ZXN0KCJpbnZhbGlkLXNpZ25hbC1iYWQtcGFkIikKKwkJdGVz dF9zaWduYWxfYmFkX3BhZChmZCk7CisKKwlpZ3Rfc3VidGVzdCgiaW52YWxpZC1zaWduYWwtYXJy YXkiKQorCQl0ZXN0X3NpZ25hbF9hcnJheShmZCk7CisKKwlpZ3Rfc3VidGVzdCgiaW52YWxpZC10 cmFuc2Zlci1pbGxlZ2FsLWhhbmRsZSIpCisJCXRlc3RfdHJhbnNmZXJfaWxsZWdhbF9oYW5kbGUo ZmQpOworCisJaWd0X3N1YnRlc3QoImludmFsaWQtdHJhbnNmZXItYmFkLXBhZCIpCisJCXRlc3Rf dHJhbnNmZXJfYmFkX3BhZChmZCk7CisKKwlmb3IgKHVuc2lnbmVkIGZsYWdzID0gMDsgZmxhZ3Mg PCBXQUlUX0ZMQUdTX01BWDsgZmxhZ3MrKykgeworCQlpbnQgZXJyOworCisJCS8qIE9ubHkgb25l IHdhaXQgbW9kZSBmb3Igc2luZ2xlLXdhaXQgdGVzdHMgKi8KKwkJaWYgKF9fYnVpbHRpbl9wb3Bj b3VudChmbGFncyAmIChXQUlUX1VOU1VCTUlUVEVEIHwKKwkJCQkJCVdBSVRfU1VCTUlUVEVEIHwK KwkJCQkJCVdBSVRfU0lHTkFMRUQpKSAhPSAxKQorCQkJY29udGludWU7CisKKwkJaWYgKChmbGFn cyAmIFdBSVRfVU5TVUJNSVRURUQpICYmICEoZmxhZ3MgJiBXQUlUX0ZPUl9TVUJNSVQpKQorCQkJ ZXJyID0gLUVJTlZBTDsKKwkJZWxzZSBpZiAoIShmbGFncyAmIFdBSVRfU0lHTkFMRUQpICYmICEo KGZsYWdzICYgV0FJVF9TVUJNSVRURUQpICYmIChmbGFncyAmIFdBSVRfQVZBSUxBQkxFKSkpCisJ CQllcnIgPSAtRVRJTUU7CisJCWVsc2UKKwkJCWVyciA9IDA7CisKKwkJaWd0X3N1YnRlc3RfZigi JXNzaW5nbGUtd2FpdCVzJXMlcyVzJXMlcyIsCisJCQkgICAgICBlcnIgPT0gLUVJTlZBTCA/ICJp bnZhbGlkLSIgOiBlcnIgPT0gLUVUSU1FID8gImV0aW1lLSIgOiAiIiwKKwkJCSAgICAgIChmbGFn cyAmIFdBSVRfQUxMKSA/ICItYWxsIiA6ICIiLAorCQkJICAgICAgKGZsYWdzICYgV0FJVF9GT1Jf U1VCTUlUKSA/ICItZm9yLXN1Ym1pdCIgOiAiIiwKKwkJCSAgICAgIChmbGFncyAmIFdBSVRfQVZB SUxBQkxFKSA/ICItYXZhaWxhYmxlIiA6ICIiLAorCQkJICAgICAgKGZsYWdzICYgV0FJVF9VTlNV Qk1JVFRFRCkgPyAiLXVuc3VibWl0dGVkIiA6ICIiLAorCQkJICAgICAgKGZsYWdzICYgV0FJVF9T VUJNSVRURUQpID8gIi1zdWJtaXR0ZWQiIDogIiIsCisJCQkgICAgICAoZmxhZ3MgJiBXQUlUX1NJ R05BTEVEKSA/ICItc2lnbmFsZWQiIDogIiIpCisJCQl0ZXN0X3NpbmdsZV93YWl0KGZkLCBmbGFn cywgZXJyKTsKKwl9CisKKwlpZ3Rfc3VidGVzdCgid2FpdC1kZWxheWVkLXNpZ25hbCIpCisJCXRl c3Rfd2FpdF9kZWxheWVkX3NpZ25hbChmZCwgMCk7CisKKwlpZ3Rfc3VidGVzdCgid2FpdC1mb3It c3VibWl0LWRlbGF5ZWQtc3VibWl0IikKKwkJdGVzdF93YWl0X2RlbGF5ZWRfc2lnbmFsKGZkLCBX QUlUX0ZPUl9TVUJNSVQpOworCisJaWd0X3N1YnRlc3QoIndhaXQtYWxsLWRlbGF5ZWQtc2lnbmFs IikKKwkJdGVzdF93YWl0X2RlbGF5ZWRfc2lnbmFsKGZkLCBXQUlUX0FMTCk7CisKKwlpZ3Rfc3Vi dGVzdCgid2FpdC1hbGwtZm9yLXN1Ym1pdC1kZWxheWVkLXN1Ym1pdCIpCisJCXRlc3Rfd2FpdF9k ZWxheWVkX3NpZ25hbChmZCwgV0FJVF9BTEwgfCBXQUlUX0ZPUl9TVUJNSVQpOworCisJaWd0X3N1 YnRlc3QoInJlc2V0LXVuc2lnbmFsZWQiKQorCQl0ZXN0X3Jlc2V0X3Vuc2lnbmFsZWQoZmQpOwor CisJaWd0X3N1YnRlc3QoInJlc2V0LXNpZ25hbGVkIikKKwkJdGVzdF9yZXNldF9zaWduYWxlZChm ZCk7CisKKwlpZ3Rfc3VidGVzdCgicmVzZXQtbXVsdGlwbGUtc2lnbmFsZWQiKQorCQl0ZXN0X3Jl c2V0X211bHRpcGxlX3NpZ25hbGVkKGZkKTsKKworCWlndF9zdWJ0ZXN0KCJyZXNldC1kdXJpbmct d2FpdC1mb3Itc3VibWl0IikKKwkJdGVzdF9yZXNldF9kdXJpbmdfd2FpdF9mb3Jfc3VibWl0KGZk KTsKKworCWlndF9zdWJ0ZXN0KCJzaWduYWwiKQorCQl0ZXN0X3NpZ25hbChmZCk7CisKKwlmb3Ig KHVuc2lnbmVkIGZsYWdzID0gMDsgZmxhZ3MgPCBXQUlUX0ZMQUdTX01BWDsgZmxhZ3MrKykgewor CQlpbnQgZXJyOworCisJCS8qIEF0IGxlYXN0IG9uZSB3YWl0IG1vZGUgZm9yIG11bHRpLXdhaXQg dGVzdHMgKi8KKwkJaWYgKCEoZmxhZ3MgJiAoV0FJVF9VTlNVQk1JVFRFRCB8CisJCQkgICAgICAg V0FJVF9TVUJNSVRURUQgfAorCQkJICAgICAgIFdBSVRfU0lHTkFMRUQpKSkKKwkJCWNvbnRpbnVl OworCisJCWVyciA9IDA7CisJCWlmICgoZmxhZ3MgJiBXQUlUX1VOU1VCTUlUVEVEKSAmJiAhKGZs YWdzICYgV0FJVF9GT1JfU1VCTUlUKSkgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJfSBlbHNlIGlm IChmbGFncyAmIFdBSVRfQUxMKSB7CisJCQlpZiAoZmxhZ3MgJiAoV0FJVF9VTlNVQk1JVFRFRCB8 IFdBSVRfU1VCTUlUVEVEKSkKKwkJCQllcnIgPSAtRVRJTUU7CisJCQlpZiAoIShmbGFncyAmIFdB SVRfVU5TVUJNSVRURUQpICYmIChmbGFncyAmIFdBSVRfU1VCTUlUVEVEKSAmJiAoZmxhZ3MgJiBX QUlUX0FWQUlMQUJMRSkpCisJCQkJZXJyID0gMDsKKwkJfSBlbHNlIHsKKwkJCWlmICghKGZsYWdz ICYgV0FJVF9TSUdOQUxFRCkgJiYgISgoZmxhZ3MgJiBXQUlUX1NVQk1JVFRFRCkgJiYgKGZsYWdz ICYgV0FJVF9BVkFJTEFCTEUpKSkKKwkJCQllcnIgPSAtRVRJTUU7CisJCX0KKworCQlpZ3Rfc3Vi dGVzdF9mKCIlc211bHRpLXdhaXQlcyVzJXMlcyVzJXMiLAorCQkJICAgICAgZXJyID09IC1FSU5W QUwgPyAiaW52YWxpZC0iIDogZXJyID09IC1FVElNRSA/ICJldGltZS0iIDogIiIsCisJCQkgICAg ICAoZmxhZ3MgJiBXQUlUX0FMTCkgPyAiLWFsbCIgOiAiIiwKKwkJCSAgICAgIChmbGFncyAmIFdB SVRfRk9SX1NVQk1JVCkgPyAiLWZvci1zdWJtaXQiIDogIiIsCisJCQkgICAgICAoZmxhZ3MgJiBX QUlUX0FWQUlMQUJMRSkgPyAiLWF2YWlsYWJsZSIgOiAiIiwKKwkJCSAgICAgIChmbGFncyAmIFdB SVRfVU5TVUJNSVRURUQpID8gIi11bnN1Ym1pdHRlZCIgOiAiIiwKKwkJCSAgICAgIChmbGFncyAm IFdBSVRfU1VCTUlUVEVEKSA/ICItc3VibWl0dGVkIiA6ICIiLAorCQkJICAgICAgKGZsYWdzICYg V0FJVF9TSUdOQUxFRCkgPyAiLXNpZ25hbGVkIiA6ICIiKQorCQkJdGVzdF9tdWx0aV93YWl0KGZk LCBmbGFncywgZXJyKTsKKwl9CisJaWd0X3N1YnRlc3QoIndhaXQtYW55LXNuYXBzaG90IikKKwkJ dGVzdF93YWl0X3NuYXBzaG90KGZkLCAwKTsKKworCWlndF9zdWJ0ZXN0KCJ3YWl0LWFsbC1zbmFw c2hvdCIpCisJCXRlc3Rfd2FpdF9zbmFwc2hvdChmZCwgV0FJVF9BTEwpOworCisJaWd0X3N1YnRl c3QoIndhaXQtZm9yLXN1Ym1pdC1zbmFwc2hvdCIpCisJCXRlc3Rfd2FpdF9zbmFwc2hvdChmZCwg V0FJVF9GT1JfU1VCTUlUKTsKKworCWlndF9zdWJ0ZXN0KCJ3YWl0LWFsbC1mb3Itc3VibWl0LXNu YXBzaG90IikKKwkJdGVzdF93YWl0X3NuYXBzaG90KGZkLCBXQUlUX0FMTCB8IFdBSVRfRk9SX1NV Qk1JVCk7CisKKwlpZ3Rfc3VidGVzdCgid2FpdC1hbnktY29tcGxleCIpCisJCXRlc3Rfd2FpdF9j b21wbGV4KGZkLCAwKTsKKworCWlndF9zdWJ0ZXN0KCJ3YWl0LWFsbC1jb21wbGV4IikKKwkJdGVz dF93YWl0X2NvbXBsZXgoZmQsIFdBSVRfQUxMKTsKKworCWlndF9zdWJ0ZXN0KCJ3YWl0LWZvci1z dWJtaXQtY29tcGxleCIpCisJCXRlc3Rfd2FpdF9jb21wbGV4KGZkLCBXQUlUX0ZPUl9TVUJNSVQp OworCisJaWd0X3N1YnRlc3QoIndhaXQtYWxsLWZvci1zdWJtaXQtY29tcGxleCIpCisJCXRlc3Rf d2FpdF9jb21wbGV4KGZkLCBXQUlUX0FMTCB8IFdBSVRfRk9SX1NVQk1JVCk7CisKKwlpZ3Rfc3Vi dGVzdCgid2FpdC1hbnktaW50ZXJydXB0ZWQiKQorCQl0ZXN0X3dhaXRfaW50ZXJydXB0ZWQoZmQs IDApOworCisJaWd0X3N1YnRlc3QoIndhaXQtYWxsLWludGVycnVwdGVkIikKKwkJdGVzdF93YWl0 X2ludGVycnVwdGVkKGZkLCBXQUlUX0FMTCk7Cit9Ci0tIAoyLjIxLjAuMzkyLmdmOGY2Nzg3MTU5 ZQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KaWd0LWRl diBtYWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2