From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chunming Zhou Subject: [PATCH i-g-t] igt: add timeline test cases v2 Date: Fri, 7 Dec 2018 23:57:50 +0800 Message-ID: <20181207155750.16133-1-david1.zhou@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Christian.Koenig@amd.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, intel-gfx@lists.freedesktop.org Cc: Chunming Zhou List-Id: amd-gfx.lists.freedesktop.org djI6IGFkYXB0IHRvIG5ldyB0cmFuc2ZlciBpb2N0bAoKU2lnbmVkLW9mZi1ieTogQ2h1bm1pbmcg WmhvdSA8ZGF2aWQxLnpob3VAYW1kLmNvbT4KLS0tCiBpbmNsdWRlL2RybS11YXBpL2RybS5oICAg fCAgIDMzICsrCiBsaWIvaWd0X3N5bmNvYmouYyAgICAgICAgfCAgMjA2ICsrKysrKysrCiBsaWIv aWd0X3N5bmNvYmouaCAgICAgICAgfCAgIDE5ICsKIHRlc3RzL21lc29uLmJ1aWxkICAgICAgICB8 ICAgIDEgKwogdGVzdHMvc3luY29ial90aW1lbGluZS5jIHwgMTA1MSArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKwogNSBmaWxlcyBjaGFuZ2VkLCAxMzEwIGluc2VydGlvbnMo KykKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9zeW5jb2JqX3RpbWVsaW5lLmMKCmRpZmYgLS1n aXQgYS9pbmNsdWRlL2RybS11YXBpL2RybS5oIGIvaW5jbHVkZS9kcm0tdWFwaS9kcm0uaAppbmRl eCA4NWM2ODVhMi4uZGNkMjQ1ZDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtLXVhcGkvZHJtLmgK KysrIGIvaW5jbHVkZS9kcm0tdWFwaS9kcm0uaApAQCAtNzMxLDYgKzczMSw4IEBAIHN0cnVjdCBk cm1fc3luY29ial9oYW5kbGUgewogCiAjZGVmaW5lIERSTV9TWU5DT0JKX1dBSVRfRkxBR1NfV0FJ VF9BTEwgKDEgPDwgMCkKICNkZWZpbmUgRFJNX1NZTkNPQkpfV0FJVF9GTEFHU19XQUlUX0ZPUl9T VUJNSVQgKDEgPDwgMSkKKy8qIHdhaXQgZm9yIHRpbWUgcG9pbnQgdG8gYmVjb21lIGF2YWlsYWJs ZSAqLworI2RlZmluZSBEUk1fU1lOQ09CSl9XQUlUX0ZMQUdTX1dBSVRfQVZBSUxBQkxFICgxIDw8 IDIpCiBzdHJ1Y3QgZHJtX3N5bmNvYmpfd2FpdCB7CiAJX191NjQgaGFuZGxlczsKIAkvKiBhYnNv bHV0ZSB0aW1lb3V0ICovCkBAIC03NDEsMTEgKzc0MywzOCBAQCBzdHJ1Y3QgZHJtX3N5bmNvYmpf d2FpdCB7CiAJX191MzIgcGFkOwogfTsKIAorc3RydWN0IGRybV9zeW5jb2JqX3RpbWVsaW5lX3dh aXQgeworICAgICAgICBfX3U2NCBoYW5kbGVzOworICAgICAgICAvKiB3YWl0IG9uIHNwZWNpZmlj IHRpbWVsaW5lIHBvaW50IGZvciBldmVyeSBoYW5kbGVzKi8KKyAgICAgICAgX191NjQgcG9pbnRz OworICAgICAgICAvKiBhYnNvbHV0ZSB0aW1lb3V0ICovCisgICAgICAgIF9fczY0IHRpbWVvdXRf bnNlYzsKKyAgICAgICAgX191MzIgY291bnRfaGFuZGxlczsKKyAgICAgICAgX191MzIgZmxhZ3M7 CisgICAgICAgIF9fdTMyIGZpcnN0X3NpZ25hbGVkOyAvKiBvbmx5IHZhbGlkIHdoZW4gbm90IHdh aXRpbmcgYWxsICovCisgICAgICAgIF9fdTMyIHBhZDsKK307CisKIHN0cnVjdCBkcm1fc3luY29i al9hcnJheSB7CiAJX191NjQgaGFuZGxlczsKIAlfX3UzMiBjb3VudF9oYW5kbGVzOwogCV9fdTMy IHBhZDsKIH07CitzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmVfYXJyYXkgeworICAgICAgIF9f dTY0IGhhbmRsZXM7CisgICAgICAgX191NjQgcG9pbnRzOworICAgICAgIF9fdTMyIGNvdW50X2hh bmRsZXM7CisgICAgICAgX191MzIgcGFkOworfTsKKworc3RydWN0IGRybV9zeW5jb2JqX3RyYW5z ZmVyIHsKKyAgICAgICAgX191MzIgc3JjX2hhbmRsZTsKKyAgICAgICAgX191MzIgZHN0X2hhbmRs ZTsKKyAgICAgICAgX191NjQgc3JjX3BvaW50OworICAgICAgICBfX3U2NCBkc3RfcG9pbnQ7Cisg ICAgICAgIF9fdTMyIGZsYWdzOworICAgICAgICBfX3UzMiBwYWQ7Cit9OwogCiAvKiBRdWVyeSBj dXJyZW50IHNjYW5vdXQgc2VxdWVuY2UgbnVtYmVyICovCiBzdHJ1Y3QgZHJtX2NydGNfZ2V0X3Nl cXVlbmNlIHsKQEAgLTkwMiw2ICs5MzEsMTAgQEAgZXh0ZXJuICJDIiB7CiAjZGVmaW5lIERSTV9J T0NUTF9NT0RFX0xJU1RfTEVTU0VFUwlEUk1fSU9XUigweEM3LCBzdHJ1Y3QgZHJtX21vZGVfbGlz dF9sZXNzZWVzKQogI2RlZmluZSBEUk1fSU9DVExfTU9ERV9HRVRfTEVBU0UJRFJNX0lPV1IoMHhD OCwgc3RydWN0IGRybV9tb2RlX2dldF9sZWFzZSkKICNkZWZpbmUgRFJNX0lPQ1RMX01PREVfUkVW T0tFX0xFQVNFCURSTV9JT1dSKDB4QzksIHN0cnVjdCBkcm1fbW9kZV9yZXZva2VfbGVhc2UpCisj ZGVmaW5lIERSTV9JT0NUTF9TWU5DT0JKX1RJTUVMSU5FX1dBSVQgRFJNX0lPV1IoMHhDQSwgc3Ry dWN0IGRybV9zeW5jb2JqX3RpbWVsaW5lX3dhaXQpCisjZGVmaW5lIERSTV9JT0NUTF9TWU5DT0JK X1FVRVJZICAgICAgICAgRFJNX0lPV1IoMHhDQiwgc3RydWN0IGRybV9zeW5jb2JqX3RpbWVsaW5l X2FycmF5KQorI2RlZmluZSBEUk1fSU9DVExfU1lOQ09CSl9UUkFOU0ZFUiAgICBEUk1fSU9XUigw eENDLCBzdHJ1Y3QgZHJtX3N5bmNvYmpfdHJhbnNmZXIpCisjZGVmaW5lIERSTV9JT0NUTF9TWU5D T0JKX1RJTUVMSU5FX1NJR05BTCAgICBEUk1fSU9XUigweENELCBzdHJ1Y3QgZHJtX3N5bmNvYmpf dGltZWxpbmVfYXJyYXkpCiAKIC8qKgogICogRGV2aWNlIHNwZWNpZmljIGlvY3RscyBzaG91bGQg b25seSBiZSBpbiB0aGVpciByZXNwZWN0aXZlIGhlYWRlcnMKZGlmZiAtLWdpdCBhL2xpYi9pZ3Rf c3luY29iai5jIGIvbGliL2lndF9zeW5jb2JqLmMKaW5kZXggZDkxMTRjYTguLmVmYTJhZGM0IDEw MDY0NAotLS0gYS9saWIvaWd0X3N5bmNvYmouYworKysgYi9saWIvaWd0X3N5bmNvYmouYwpAQCAt Mjg2LDMgKzI4NiwyMDkgQEAgc3luY29ial9zaWduYWwoaW50IGZkLCB1aW50MzJfdCAqaGFuZGxl cywgdWludDMyX3QgY291bnQpCiB7CiAJaWd0X2Fzc2VydF9lcShfX3N5bmNvYmpfc2lnbmFsKGZk LCBoYW5kbGVzLCBjb3VudCksIDApOwogfQorCitzdGF0aWMgaW50CitfX3N5bmNvYmpfdGltZWxp bmVfc2lnbmFsKGludCBmZCwgdWludDMyX3QgKmhhbmRsZXMsIHVpbnQ2NF90ICpwb2ludHMsIHVp bnQzMl90IGNvdW50KQoreworCXN0cnVjdCBkcm1fc3luY29ial90aW1lbGluZV9hcnJheSBhcnJh eSA9IHsgMCB9OworCWludCBlcnIgPSAwOworCisJYXJyYXkuaGFuZGxlcyA9IHRvX3VzZXJfcG9p bnRlcihoYW5kbGVzKTsKKwlhcnJheS5wb2ludHMgPSB0b191c2VyX3BvaW50ZXIocG9pbnRzKTsK KwlhcnJheS5jb3VudF9oYW5kbGVzID0gY291bnQ7CisJaWYgKGRybUlvY3RsKGZkLCBEUk1fSU9D VExfU1lOQ09CSl9USU1FTElORV9TSUdOQUwsICZhcnJheSkpCisJCWVyciA9IC1lcnJubzsKKwly ZXR1cm4gZXJyOworfQorCisvKioKKyAqIHN5bmNvYmpfc2lnbmFsOgorICogQGZkOiBUaGUgRFJN IGZpbGUgZGVzY3JpcHRvci4KKyAqIEBoYW5kbGVzOiBBcnJheSBvZiBzeW5jb2JqIGhhbmRsZXMg dG8gc2lnbmFsCisgKiBAcG9pbnRzOiBMaXN0IG9mIHBvaW50IG9mIGhhbmRsZXMgdG8gc2lnbmFs LgorICogQGNvdW50OiBDb3VudCBvZiBzeW5jb2JqIGhhbmRsZXMuCisgKgorICogU2lnbmFsIGEg c2V0IG9mIHN5bmNvYmpzLgorICovCit2b2lkCitzeW5jb2JqX3RpbWVsaW5lX3NpZ25hbChpbnQg ZmQsIHVpbnQzMl90ICpoYW5kbGVzLCB1aW50NjRfdCAqcG9pbnRzLCB1aW50MzJfdCBjb3VudCkK K3sKKwlpZ3RfYXNzZXJ0X2VxKF9fc3luY29ial90aW1lbGluZV9zaWduYWwoZmQsIGhhbmRsZXMs IHBvaW50cywgY291bnQpLCAwKTsKK30KK2ludAorX19zeW5jb2JqX3RpbWVsaW5lX3dhaXRfaW9j dGwoaW50IGZkLCBzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmVfd2FpdCAqYXJncykKK3sKKwlp bnQgZXJyID0gMDsKKwlpZiAoZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9TWU5DT0JKX1RJTUVMSU5F X1dBSVQsIGFyZ3MpKQorCQllcnIgPSAtZXJybm87CisJcmV0dXJuIGVycjsKK30KK3N0YXRpYyBp bnQKK19fc3luY29ial90aW1lbGluZV93YWl0KGludCBmZCwgdWludDMyX3QgKmhhbmRsZXMsIHVp bnQ2NF90ICpwb2ludHMsCisJCQl1bnNpZ25lZCBudW1faGFuZGxlcywKKwkJCWludDY0X3QgdGlt ZW91dF9uc2VjLCB1bnNpZ25lZCBmbGFncywKKwkJCXVpbnQzMl90ICpmaXJzdF9zaWduYWxlZCkK K3sKKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmVfd2FpdCBhcmdzOworCWludCByZXQ7CisK KwlhcmdzLmhhbmRsZXMgPSB0b191c2VyX3BvaW50ZXIoaGFuZGxlcyk7CisJYXJncy5wb2ludHMg PSAodWludDY0X3QpdG9fdXNlcl9wb2ludGVyKHBvaW50cyk7CisJYXJncy50aW1lb3V0X25zZWMg PSB0aW1lb3V0X25zZWM7CisJYXJncy5jb3VudF9oYW5kbGVzID0gbnVtX2hhbmRsZXM7CisJYXJn cy5mbGFncyA9IGZsYWdzOworCWFyZ3MuZmlyc3Rfc2lnbmFsZWQgPSAwOworCWFyZ3MucGFkID0g MDsKKworCXJldCA9IGRybUlvY3RsKGZkLCBEUk1fSU9DVExfU1lOQ09CSl9USU1FTElORV9XQUlU LCAmYXJncyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiAtZXJybm87CisKKwlpZiAoZmlyc3Rf c2lnbmFsZWQpCisJCSpmaXJzdF9zaWduYWxlZCA9IGFyZ3MuZmlyc3Rfc2lnbmFsZWQ7CisKKwly ZXR1cm4gcmV0OworfQoraW50CitzeW5jb2JqX3RpbWVsaW5lX3dhaXRfZXJyKGludCBmZCwgdWlu dDMyX3QgKmhhbmRsZXMsIHVpbnQ2NF90ICpwb2ludHMsCisJCQkgIHVuc2lnbmVkIG51bV9oYW5k bGVzLAorCQkJICBpbnQ2NF90IHRpbWVvdXRfbnNlYywgdW5zaWduZWQgZmxhZ3MpCit7CisJcmV0 dXJuIF9fc3luY29ial90aW1lbGluZV93YWl0KGZkLCBoYW5kbGVzLCBwb2ludHMsIG51bV9oYW5k bGVzLAorCQkJCSAgICAgICB0aW1lb3V0X25zZWMsIGZsYWdzLCBOVUxMKTsKK30KKworLyoqCisg KiBzeW5jb2JqX3RpbWVsaW5lX3dhaXQ6CisgKiBAZmQ6IFRoZSBEUk0gZmlsZSBkZXNjcmlwdG9y CisgKiBAaGFuZGxlczogTGlzdCBvZiBzeW5jb2JqIGhhbmRsZXMgdG8gd2FpdCBmb3IuCisgKiBA cG9pbnRzOiBMaXN0IG9mIHBvaW50IG9mIGhhbmRsZXMgdG8gd2FpdCBmb3IuCisgKiBAbnVtX2hh bmRsZXM6IENvdW50IG9mIGhhbmRsZXMKKyAqIEB0aW1lb3V0X25zZWM6IEFic29sdXRlIHdhaXQg dGltZW91dCBpbiBuYW5vc2Vjb25kcy4KKyAqIEBmbGFnczogV2FpdCBpb2N0bCBmbGFncy4KKyAq IEBmaXJzdF9zaWduYWxlZDogUmV0dXJuZWQgaGFuZGxlIGZvciBmaXJzdCBzaWduYWxlZCBzeW5j b2JqLgorICoKKyAqIFdhaXRzIGluIHRoZSBrZXJuZWwgZm9yIGFueS9hbGwgdGhlIHJlcXVlc3Rl ZCBzeW5jb2JqcyB0aW1lbGluZSBwb2ludAorICogdXNpbmcgdGhlIHRpbWVvdXQgYW5kIGZsYWdz LgorICogUmV0dXJuczogYm9vbCB2YWx1ZSAtIGZhbHNlID0gdGltZWRvdXQsIHRydWUgPSBzaWdu YWxlZAorICovCitib29sCitzeW5jb2JqX3RpbWVsaW5lX3dhaXQoaW50IGZkLCB1aW50MzJfdCAq aGFuZGxlcywgdWludDY0X3QgKnBvaW50cywKKwkJICAgICAgdW5zaWduZWQgbnVtX2hhbmRsZXMs CisJCSAgICAgIGludDY0X3QgdGltZW91dF9uc2VjLCB1bnNpZ25lZCBmbGFncywKKwkJICAgICAg dWludDMyX3QgKmZpcnN0X3NpZ25hbGVkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBfX3N5bmNv YmpfdGltZWxpbmVfd2FpdChmZCwgaGFuZGxlcywgcG9pbnRzLCBudW1faGFuZGxlcywKKwkJCQkg ICAgICB0aW1lb3V0X25zZWMsIGZsYWdzLCBmaXJzdF9zaWduYWxlZCk7CisJaWYgKHJldCA9PSAt RVRJTUUpCisJCXJldHVybiBmYWxzZTsKKwlpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7CisKKwlyZXR1 cm4gdHJ1ZTsKKworfQorCitzdGF0aWMgaW50CitfX3N5bmNvYmpfdGltZWxpbmVfcXVlcnkoaW50 IGZkLCB1aW50MzJfdCAqaGFuZGxlcywgdWludDY0X3QgKipwb2ludHMsCisJCQkgdWludDMyX3Qg aGFuZGxlX2NvdW50KQoreworCXN0cnVjdCBkcm1fc3luY29ial90aW1lbGluZV9hcnJheSBhcmdz OworCWludCByZXQ7CisKKwlhcmdzLmhhbmRsZXMgPSB0b191c2VyX3BvaW50ZXIoaGFuZGxlcyk7 CisJYXJncy5wb2ludHMgPSAodWludDY0X3QpdG9fdXNlcl9wb2ludGVyKHBvaW50cyk7CisJYXJn cy5jb3VudF9oYW5kbGVzID0gaGFuZGxlX2NvdW50OworCWFyZ3MucGFkID0gMDsKKworCXJldCA9 IGRybUlvY3RsKGZkLCBEUk1fSU9DVExfU1lOQ09CSl9RVUVSWSwgJmFyZ3MpOworCWlmIChyZXQp CisJCXJldHVybiByZXQ7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogc3luY29ial90aW1lbGlu ZV9xdWVyeToKKyAqIEBmZDogVGhlIERSTSBmaWxlIGRlc2NyaXB0b3IuCisgKiBAaGFuZGxlczog QXJyYXkgb2Ygc3luY29iaiBoYW5kbGVzLgorICogQHBvaW50czogQXJyYXkgb2Ygc3luY29iaiBw b2ludHMgcXVlcmllZC4KKyAqIEBjb3VudDogQ291bnQgb2Ygc3luY29iaiBoYW5kbGVzLgorICoK KyAqIHF1ZXJ5IGEgc2V0IG9mIHN5bmNvYmpzLgorICovCit2b2lkCitzeW5jb2JqX3RpbWVsaW5l X3F1ZXJ5KGludCBmZCwgdWludDMyX3QgKmhhbmRsZXMsIHVpbnQ2NF90ICoqcG9pbnRzLAorCQkg ICAgICAgdWludDMyX3QgY291bnQpCit7CisJaWd0X2Fzc2VydF9lcShfX3N5bmNvYmpfdGltZWxp bmVfcXVlcnkoZmQsIGhhbmRsZXMsIHBvaW50cywgY291bnQpLCAwKTsKK30KKworc3RhdGljIGlu dAorX19zeW5jb2JqX2JpbmFyeV90b190aW1lbGluZShpbnQgZmQsIHVpbnQzMl90IHRpbWVsaW5l X2hhbmRsZSwKKwkJCSAgICAgdWludDY0X3QgcG9pbnQsIHVpbnQzMl90IGJpbmFyeV9oYW5kbGUp Cit7CisJc3RydWN0IGRybV9zeW5jb2JqX3RyYW5zZmVyIGFyZ3M7CisKKwlhcmdzLnNyY19oYW5k bGUgPSBiaW5hcnlfaGFuZGxlOworCWFyZ3MuZHN0X2hhbmRsZSA9IHRpbWVsaW5lX2hhbmRsZTsK KwlhcmdzLnNyY19wb2ludCA9IDA7CisJYXJncy5kc3RfcG9pbnQgPSBwb2ludDsKKwlhcmdzLmZs YWdzID0gMDsKKwlhcmdzLnBhZCA9IDA7CisJcmV0dXJuIGRybUlvY3RsKGZkLCBEUk1fSU9DVExf U1lOQ09CSl9UUkFOU0ZFUiwgJmFyZ3MpOworfQorCisvKioKKyAqIHN5bmNvYmpfYmluYXJ5X3Rv X3RpbWVsaW5lOgorICogQGZkOiBUaGUgRFJNIGZpbGUgZGVzY3JpcHRvci4KKyAqIEB0aW1lbGlu ZV9oYW5kbGVzOiBBcnJheSBvZiB0aW1lbGluZSBzeW5jb2JqIGhhbmRsZXMuCisgKiBAcG9pbnQ6 IHN5bmNvYmogcG9pbnQuCisgKiBAYmluYXJ5X2hhbmRsZTogQXJyYXkgb2YgYmluYXJ5IHN5bmNv YmogaGFuZGxlcy4KKyAqCisgKiBxdWVyeSBhIHNldCBvZiBzeW5jb2Jqcy4KKyAqLwordm9pZAor c3luY29ial9iaW5hcnlfdG9fdGltZWxpbmUoaW50IGZkLCB1aW50MzJfdCB0aW1lbGluZV9oYW5k bGUsCisJCQkgICB1aW50NjRfdCBwb2ludCwgdWludDMyX3QgYmluYXJ5X2hhbmRsZSkKK3sKKwlp Z3RfYXNzZXJ0X2VxKF9fc3luY29ial9iaW5hcnlfdG9fdGltZWxpbmUoZmQsIHRpbWVsaW5lX2hh bmRsZSwgcG9pbnQsCisJCQkJCQkgICBiaW5hcnlfaGFuZGxlKSwgMCk7Cit9CisKK3N0YXRpYyBp bnQKK19fc3luY29ial90aW1lbGluZV90b19iaW5hcnkoaW50IGZkLCB1aW50MzJfdCBiaW5hcnlf aGFuZGxlLAorCQkJICAgICB1aW50MzJfdCB0aW1lbGluZV9oYW5kbGUsCisJCQkgICAgIHVpbnQ2 NF90IHBvaW50LAorCQkJICAgICB1aW50MzJfdCBmbGFncykKK3sKKwlzdHJ1Y3QgZHJtX3N5bmNv YmpfdHJhbnNmZXIgYXJnczsKKworCWFyZ3MuZHN0X2hhbmRsZSA9IGJpbmFyeV9oYW5kbGU7CisJ YXJncy5zcmNfaGFuZGxlID0gdGltZWxpbmVfaGFuZGxlOworCWFyZ3MuZHN0X3BvaW50ID0gMDsK KwlhcmdzLnNyY19wb2ludCA9IHBvaW50OworCWFyZ3MuZmxhZ3MgPSBmbGFnczsKKwlhcmdzLnBh ZCA9IDA7CisJcmV0dXJuIGRybUlvY3RsKGZkLCBEUk1fSU9DVExfU1lOQ09CSl9UUkFOU0ZFUiwg JmFyZ3MpOworfQorCisvKioKKyAqIHN5bmNvYmpfYmluYXJ5X3RvX3RpbWVsaW5lOgorICogQGZk OiBUaGUgRFJNIGZpbGUgZGVzY3JpcHRvci4KKyAqIEB0aW1lbGluZV9oYW5kbGVzOiBBcnJheSBv ZiB0aW1lbGluZSBzeW5jb2JqIGhhbmRsZXMuCisgKiBAcG9pbnQ6IHN5bmNvYmogcG9pbnQuCisg KiBAYmluYXJ5X2hhbmRsZTogQXJyYXkgb2YgYmluYXJ5IHN5bmNvYmogaGFuZGxlcy4KKyAqCisg KiBxdWVyeSBhIHNldCBvZiBzeW5jb2Jqcy4KKyAqLwordm9pZAorc3luY29ial90aW1lbGluZV90 b19iaW5hcnkoaW50IGZkLCB1aW50MzJfdCBiaW5hcnlfaGFuZGxlLAorCQkJICAgdWludDMyX3Qg dGltZWxpbmVfaGFuZGxlLAorCQkJICAgdWludDY0X3QgcG9pbnQsCisJCQkgICB1aW50MzJfdCBm bGFncykKK3sKKwlpZ3RfYXNzZXJ0X2VxKF9fc3luY29ial90aW1lbGluZV90b19iaW5hcnkoZmQs IGJpbmFyeV9oYW5kbGUsCisJCQkJCQkgICB0aW1lbGluZV9oYW5kbGUsIHBvaW50LAorCQkJCQkJ ICAgZmxhZ3MpLCAwKTsKK30KZGlmZiAtLWdpdCBhL2xpYi9pZ3Rfc3luY29iai5oIGIvbGliL2ln dF9zeW5jb2JqLmgKaW5kZXggNDRkMTM3OGQuLjE3NWU1MDI3IDEwMDY0NAotLS0gYS9saWIvaWd0 X3N5bmNvYmouaAorKysgYi9saWIvaWd0X3N5bmNvYmouaApAQCAtNjUsNyArNjUsMjYgQEAgaW50 IHN5bmNvYmpfd2FpdF9lcnIoaW50IGZkLCB1aW50MzJfdCAqaGFuZGxlcywgdWludDMyX3QgY291 bnQsCiBib29sIHN5bmNvYmpfd2FpdChpbnQgZmQsIHVpbnQzMl90ICpoYW5kbGVzLCB1aW50MzJf dCBjb3VudCwKIAkJICB1aW50NjRfdCBhYnNfdGltZW91dF9uc2VjLCB1aW50MzJfdCBmbGFncywK IAkJICB1aW50MzJfdCAqZmlyc3Rfc2lnbmFsZWQpOworaW50IF9fc3luY29ial90aW1lbGluZV93 YWl0X2lvY3RsKGludCBmZCwKKwkJCQkgIHN0cnVjdCBkcm1fc3luY29ial90aW1lbGluZV93YWl0 ICphcmdzKTsKK2Jvb2wgc3luY29ial90aW1lbGluZV93YWl0KGludCBmZCwgdWludDMyX3QgKmhh bmRsZXMsIHVpbnQ2NF90ICpwb2ludHMsCisJCQkgICB1bnNpZ25lZCBudW1faGFuZGxlcywKKwkJ CSAgIGludDY0X3QgdGltZW91dF9uc2VjLCB1bnNpZ25lZCBmbGFncywKKwkJCSAgIHVpbnQzMl90 ICpmaXJzdF9zaWduYWxlZCk7CitpbnQgc3luY29ial90aW1lbGluZV93YWl0X2VycihpbnQgZmQs IHVpbnQzMl90ICpoYW5kbGVzLCB1aW50NjRfdCAqcG9pbnRzLAorCQkJICAgICAgdW5zaWduZWQg bnVtX2hhbmRsZXMsCisJCQkgICAgICBpbnQ2NF90IHRpbWVvdXRfbnNlYywgdW5zaWduZWQgZmxh Z3MpOwogdm9pZCBzeW5jb2JqX3Jlc2V0KGludCBmZCwgdWludDMyX3QgKmhhbmRsZXMsIHVpbnQz Ml90IGNvdW50KTsKIHZvaWQgc3luY29ial9zaWduYWwoaW50IGZkLCB1aW50MzJfdCAqaGFuZGxl cywgdWludDMyX3QgY291bnQpOwordm9pZCBzeW5jb2JqX3RpbWVsaW5lX3F1ZXJ5KGludCBmZCwg dWludDMyX3QgKmhhbmRsZXMsIHVpbnQ2NF90ICoqcG9pbnRzLAorCQkJICAgIHVpbnQzMl90IGNv dW50KTsKK3ZvaWQgc3luY29ial9iaW5hcnlfdG9fdGltZWxpbmUoaW50IGZkLCB1aW50MzJfdCB0 aW1lbGluZV9oYW5kbGUsCisJCQkJdWludDY0X3QgcG9pbnQsIHVpbnQzMl90IGJpbmFyeV9oYW5k bGUpOwordm9pZCBzeW5jb2JqX3RpbWVsaW5lX3RvX2JpbmFyeShpbnQgZmQsIHVpbnQzMl90IGJp bmFyeV9oYW5kbGUsCisJCQkJdWludDMyX3QgdGltZWxpbmVfaGFuZGxlLAorCQkJCXVpbnQ2NF90 IHBvaW50LAorCQkJCXVpbnQzMl90IGZsYWdzKTsKK3ZvaWQgc3luY29ial90aW1lbGluZV9zaWdu YWwoaW50IGZkLCB1aW50MzJfdCAqaGFuZGxlcywgdWludDY0X3QgKnBvaW50cywKKwkJCSAgICAg dWludDMyX3QgY291bnQpOwogCiAjZW5kaWYgLyogSUdUX1NZTkNPQkpfSCAqLwpkaWZmIC0tZ2l0 IGEvdGVzdHMvbWVzb24uYnVpbGQgYi90ZXN0cy9tZXNvbi5idWlsZAppbmRleCBiOGE2ZTYxYi4u YmRkYzIyM2MgMTAwNjQ0Ci0tLSBhL3Rlc3RzL21lc29uLmJ1aWxkCisrKyBiL3Rlc3RzL21lc29u LmJ1aWxkCkBAIC03Nyw2ICs3Nyw3IEBAIHRlc3RfcHJvZ3MgPSBbCiAJJ3N3X3N5bmMnLAogCSdz eW5jb2JqX2Jhc2ljJywKIAknc3luY29ial93YWl0JywKKwknc3luY29ial90aW1lbGluZScsCiAJ J3RlbXBsYXRlJywKIAkndG9vbHNfdGVzdCcsCiAJJ3YzZF9nZXRfYm9fb2Zmc2V0JywKZGlmZiAt LWdpdCBhL3Rlc3RzL3N5bmNvYmpfdGltZWxpbmUuYyBiL3Rlc3RzL3N5bmNvYmpfdGltZWxpbmUu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uMzlhOGM0MGUKLS0tIC9kZXYv bnVsbAorKysgYi90ZXN0cy9zeW5jb2JqX3RpbWVsaW5lLmMKQEAgLTAsMCArMSwxMDUxIEBACisv KgorICogQ29weXJpZ2h0IMKpIDIwMTggSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNz aW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRh aW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50 YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJl IHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRo ZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRl LCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5k IHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQg dG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRo ZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNs dWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNv cGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAq IFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFO WSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVE IFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFM TAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkg Q0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJ T04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQg T0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVS IERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgImlndC5oIgor I2luY2x1ZGUgInN3X3N5bmMuaCIKKyNpbmNsdWRlICJpZ3Rfc3luY29iai5oIgorI2luY2x1ZGUg PHVuaXN0ZC5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNp bmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSAiZHJtLmgi CisKK0lHVF9URVNUX0RFU0NSSVBUSU9OKCJUZXN0cyBmb3IgdGhlIGRybSB0aW1lbGluZSBzeW5j IG9iamVjdCBBUEkiKTsKKworLyogT25lIHRlbnRoIG9mIGEgc2Vjb25kICovCisjZGVmaW5lIFNI T1JUX1RJTUVfTlNFQyAxMDAwMDAwMDB1bGwKKworI2RlZmluZSBOU0VDU19QRVJfU0VDIDEwMDAw MDAwMDB1bGwKKworc3RhdGljIHVpbnQ2NF90CitnZXR0aW1lX25zKHZvaWQpCit7CisJc3RydWN0 IHRpbWVzcGVjIGN1cnJlbnQ7CisJY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZjdXJy ZW50KTsKKwlyZXR1cm4gKHVpbnQ2NF90KWN1cnJlbnQudHZfc2VjICogTlNFQ1NfUEVSX1NFQyAr IGN1cnJlbnQudHZfbnNlYzsKK30KKworc3RhdGljIHZvaWQKK3NsZWVwX25zZWModWludDY0X3Qg dGltZV9uc2VjKQoreworCXN0cnVjdCB0aW1lc3BlYyB0OworCXQudHZfc2VjID0gdGltZV9uc2Vj IC8gTlNFQ1NfUEVSX1NFQzsKKwl0LnR2X25zZWMgPSB0aW1lX25zZWMgJSBOU0VDU19QRVJfU0VD OworCWlndF9hc3NlcnRfZXEobmFub3NsZWVwKCZ0LCBOVUxMKSwgMCk7Cit9CisKK3N0YXRpYyB1 aW50NjRfdAorc2hvcnRfdGltZW91dCh2b2lkKQoreworCXJldHVybiBnZXR0aW1lX25zKCkgKyBT SE9SVF9USU1FX05TRUM7Cit9CisKK3N0YXRpYyBpbnQKK3N5bmNvYmpfYXR0YWNoX3N3X3N5bmMo aW50IGZkLCB1aW50MzJfdCBoYW5kbGUsIHVpbnQ2NF90IHBvaW50KQoreworCXN0cnVjdCBkcm1f c3luY29ial9oYW5kbGU7CisJdWludDMyX3Qgc3luY29iaiA9IHN5bmNvYmpfY3JlYXRlKGZkLCAw KTsKKwlpbnQgdGltZWxpbmUsIGZlbmNlOworCisJdGltZWxpbmUgPSBzd19zeW5jX3RpbWVsaW5l X2NyZWF0ZSgpOworCWZlbmNlID0gc3dfc3luY190aW1lbGluZV9jcmVhdGVfZmVuY2UodGltZWxp bmUsIDEpOworCXN5bmNvYmpfaW1wb3J0X3N5bmNfZmlsZShmZCwgc3luY29iaiwgZmVuY2UpOwor CXN5bmNvYmpfYmluYXJ5X3RvX3RpbWVsaW5lKGZkLCBoYW5kbGUsIHBvaW50LCBzeW5jb2JqKTsK KwljbG9zZShmZW5jZSk7CisKKwlzeW5jb2JqX2Rlc3Ryb3koZmQsIHN5bmNvYmopOworCXJldHVy biB0aW1lbGluZTsKK30KKworc3RhdGljIHZvaWQKK3N5bmNvYmpfdHJpZ2dlcihpbnQgZmQsIHVp bnQzMl90IGhhbmRsZSwgdWludDY0X3QgcG9pbnQpCit7CisJaW50IHRpbWVsaW5lID0gc3luY29i al9hdHRhY2hfc3dfc3luYyhmZCwgaGFuZGxlLCBwb2ludCk7CisJc3dfc3luY190aW1lbGluZV9p bmModGltZWxpbmUsIDEpOworCWNsb3NlKHRpbWVsaW5lKTsKK30KKworc3RhdGljIHRpbWVyX3QK K3NldF90aW1lcih2b2lkICgqY2IpKHVuaW9uIHNpZ3ZhbCksIHZvaWQgKnB0ciwgaW50IGksIHVp bnQ2NF90IG5zZWMpCit7CisgICAgICAgIHRpbWVyX3QgdGltZXI7CisgICAgICAgIHN0cnVjdCBz aWdldmVudCBzZXY7CisgICAgICAgIHN0cnVjdCBpdGltZXJzcGVjIGl0czsKKworICAgICAgICBt ZW1zZXQoJnNldiwgMCwgc2l6ZW9mKHNldikpOworICAgICAgICBzZXYuc2lnZXZfbm90aWZ5ID0g U0lHRVZfVEhSRUFEOworCWlmIChwdHIpCisJCXNldi5zaWdldl92YWx1ZS5zaXZhbF9wdHIgPSBw dHI7CisJZWxzZQorCQlzZXYuc2lnZXZfdmFsdWUuc2l2YWxfaW50ID0gaTsKKyAgICAgICAgc2V2 LnNpZ2V2X25vdGlmeV9mdW5jdGlvbiA9IGNiOworICAgICAgICBpZ3RfYXNzZXJ0KHRpbWVyX2Ny ZWF0ZShDTE9DS19NT05PVE9OSUMsICZzZXYsICZ0aW1lcikgPT0gMCk7CisKKyAgICAgICAgbWVt c2V0KCZpdHMsIDAsIHNpemVvZihpdHMpKTsKKyAgICAgICAgaXRzLml0X3ZhbHVlLnR2X3NlYyA9 IG5zZWMgLyBOU0VDX1BFUl9TRUM7CisgICAgICAgIGl0cy5pdF92YWx1ZS50dl9uc2VjID0gbnNl YyAlIE5TRUNfUEVSX1NFQzsKKyAgICAgICAgaWd0X2Fzc2VydCh0aW1lcl9zZXR0aW1lKHRpbWVy LCAwLCAmaXRzLCBOVUxMKSA9PSAwKTsKKworCXJldHVybiB0aW1lcjsKK30KKworc3RydWN0IGZk X2hhbmRsZV9wYWlyIHsKKwlpbnQgZmQ7CisJdWludDMyX3QgaGFuZGxlOworCXVpbnQ2NF90IHBv aW50OworfTsKKworc3RhdGljIHZvaWQKK3RpbWVsaW5lX2luY19mdW5jKHVuaW9uIHNpZ3ZhbCBz aWd2YWwpCit7CisJc3dfc3luY190aW1lbGluZV9pbmMoc2lndmFsLnNpdmFsX2ludCwgMSk7Cit9 CisKK3N0YXRpYyB2b2lkCitzeW5jb2JqX3RyaWdnZXJfZnJlZV9wYWlyX2Z1bmModW5pb24gc2ln dmFsIHNpZ3ZhbCkKK3sKKwlzdHJ1Y3QgZmRfaGFuZGxlX3BhaXIgKnBhaXIgPSBzaWd2YWwuc2l2 YWxfcHRyOworCXN5bmNvYmpfdHJpZ2dlcihwYWlyLT5mZCwgcGFpci0+aGFuZGxlLCBwYWlyLT5w b2ludCk7CisJZnJlZShwYWlyKTsKK30KKworc3RhdGljIHRpbWVyX3QKK3N5bmNvYmpfdHJpZ2dl cl9kZWxheWVkKGludCBmZCwgdWludDMyX3Qgc3luY29iaiwgdWludDY0X3QgcG9pbnQsIHVpbnQ2 NF90IG5zZWMpCit7CisJc3RydWN0IGZkX2hhbmRsZV9wYWlyICpwYWlyID0gbWFsbG9jKHNpemVv ZigqcGFpcikpOworCisJcGFpci0+ZmQgPSBmZDsKKwlwYWlyLT5oYW5kbGUgPSBzeW5jb2JqOwor CXBhaXItPnBvaW50ID0gc3luY29iajsKKworCXJldHVybiBzZXRfdGltZXIoc3luY29ial90cmln Z2VyX2ZyZWVfcGFpcl9mdW5jLCBwYWlyLCAwLCBuc2VjKTsKK30KKworc3RhdGljIHZvaWQKK3Rl c3Rfd2FpdF9iYWRfZmxhZ3MoaW50IGZkKQoreworCXN0cnVjdCBkcm1fc3luY29ial90aW1lbGlu ZV93YWl0IHdhaXQgPSB7IDAgfTsKKwl3YWl0LmZsYWdzID0gMHhkZWFkYmVlZjsKKwlpZ3RfYXNz ZXJ0X2VxKF9fc3luY29ial90aW1lbGluZV93YWl0X2lvY3RsKGZkLCAmd2FpdCksIC1FSU5WQUwp OworfQorCitzdGF0aWMgdm9pZAordGVzdF93YWl0X3plcm9faGFuZGxlcyhpbnQgZmQpCit7CisJ c3RydWN0IGRybV9zeW5jb2JqX3RpbWVsaW5lX3dhaXQgd2FpdCA9IHsgMCB9OworCWlndF9hc3Nl cnRfZXEoX19zeW5jb2JqX3RpbWVsaW5lX3dhaXRfaW9jdGwoZmQsICZ3YWl0KSwgLUVJTlZBTCk7 Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3dhaXRfaWxsZWdhbF9oYW5kbGUoaW50IGZkKQorewor CXN0cnVjdCBkcm1fc3luY29ial90aW1lbGluZV93YWl0IHdhaXQgPSB7IDAgfTsKKwl1aW50MzJf dCBoYW5kbGUgPSAwOworCisJd2FpdC5jb3VudF9oYW5kbGVzID0gMTsKKwl3YWl0LmhhbmRsZXMg PSB0b191c2VyX3BvaW50ZXIoJmhhbmRsZSk7CisJaWd0X2Fzc2VydF9lcShfX3N5bmNvYmpfdGlt ZWxpbmVfd2FpdF9pb2N0bChmZCwgJndhaXQpLCAtRU5PRU5UKTsKK30KKworc3RhdGljIHZvaWQK K3Rlc3RfcXVlcnlfemVyb19oYW5kbGVzKGludCBmZCkKK3sKKwlzdHJ1Y3QgZHJtX3N5bmNvYmpf dGltZWxpbmVfYXJyYXkgYXJncyA9IHsgMCB9OworCWludCByZXQ7CisKKwlyZXQgPSBkcm1Jb2N0 bChmZCwgRFJNX0lPQ1RMX1NZTkNPQkpfUVVFUlksICZhcmdzKTsKKwlpZ3RfYXNzZXJ0KHJldCA9 PSAtMSAmJiBlcnJubyA9PSAgRUlOVkFMKTsKK30KKworc3RhdGljIHZvaWQKK3Rlc3RfcXVlcnlf aWxsZWdhbF9oYW5kbGUoaW50IGZkKQoreworCXN0cnVjdCBkcm1fc3luY29ial90aW1lbGluZV9h cnJheSBhcmdzID0geyAwIH07CisJdWludDMyX3QgaGFuZGxlID0gMDsKKwlpbnQgcmV0OworCisJ YXJncy5jb3VudF9oYW5kbGVzID0gMTsKKwlhcmdzLmhhbmRsZXMgPSB0b191c2VyX3BvaW50ZXIo JmhhbmRsZSk7CisJcmV0ID0gZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9TWU5DT0JKX1FVRVJZLCAm YXJncyk7CisJaWd0X2Fzc2VydChyZXQgPT0gLTEgJiYgZXJybm8gPT0gRU5PRU5UKTsKK30KKwor c3RhdGljIHZvaWQKK3Rlc3RfcXVlcnlfb25lX2lsbGVnYWxfaGFuZGxlKGludCBmZCkKK3sKKwlz dHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmVfYXJyYXkgYXJyYXkgPSB7IDAgfTsKKwl1aW50MzJf dCBzeW5jb2Jqc1szXTsKKwl1aW50NjRfdCBpbml0aWFsX3BvaW50ID0gMTsKKwlpbnQgcmV0Owor CisJc3luY29ianNbMF0gPSBzeW5jb2JqX2NyZWF0ZShmZCwgMCk7CisJc3luY29ianNbMV0gPSAw OworCXN5bmNvYmpzWzJdID0gc3luY29ial9jcmVhdGUoZmQsIDApOworCisJc3luY29ial90aW1l bGluZV9zaWduYWwoZmQsICZzeW5jb2Jqc1swXSwgJmluaXRpYWxfcG9pbnQsIDEpOworCXN5bmNv YmpfdGltZWxpbmVfc2lnbmFsKGZkLCAmc3luY29ianNbMl0sICZpbml0aWFsX3BvaW50LCAxKTsK KwlpZ3RfYXNzZXJ0X2VxKHN5bmNvYmpfdGltZWxpbmVfd2FpdF9lcnIoZmQsICZzeW5jb2Jqc1sw XSwKKwkJCQkJCSZpbml0aWFsX3BvaW50LCAxLCAwLCAwKSwgMCk7CisJaWd0X2Fzc2VydF9lcShz eW5jb2JqX3RpbWVsaW5lX3dhaXRfZXJyKGZkLCAmc3luY29ianNbMl0sCisJCQkJCQkmaW5pdGlh bF9wb2ludCwgMSwgMCwgMCksIDApOworCisJYXJyYXkuY291bnRfaGFuZGxlcyA9IDM7CisJYXJy YXkuaGFuZGxlcyA9IHRvX3VzZXJfcG9pbnRlcihzeW5jb2Jqcyk7CisJcmV0ID0gZHJtSW9jdGwo ZmQsIERSTV9JT0NUTF9TWU5DT0JKX1FVRVJZLCAmYXJyYXkpOworCWlndF9hc3NlcnQocmV0ID09 IC0xICYmIGVycm5vID09IEVOT0VOVCk7CisKKwlzeW5jb2JqX2Rlc3Ryb3koZmQsIHN5bmNvYmpz WzBdKTsKKwlzeW5jb2JqX2Rlc3Ryb3koZmQsIHN5bmNvYmpzWzJdKTsKK30KKworc3RhdGljIHZv aWQKK3Rlc3RfcXVlcnlfYmFkX3BhZChpbnQgZmQpCit7CisJc3RydWN0IGRybV9zeW5jb2JqX3Rp bWVsaW5lX2FycmF5IGFycmF5ID0geyAwIH07CisJdWludDMyX3QgaGFuZGxlID0gMDsKKwlpbnQg cmV0OworCisJYXJyYXkucGFkID0gMHhkZWFkYmVlZjsKKwlhcnJheS5jb3VudF9oYW5kbGVzID0g MTsKKwlhcnJheS5oYW5kbGVzID0gdG9fdXNlcl9wb2ludGVyKCZoYW5kbGUpOworCXJldCA9IGRy bUlvY3RsKGZkLCBEUk1fSU9DVExfU1lOQ09CSl9RVUVSWSwgJmFycmF5KTsKKwlpZ3RfYXNzZXJ0 KHJldCA9PSAtMSAmJiBlcnJubyA9PSBFSU5WQUwpOworfQorCitzdGF0aWMgdm9pZAordGVzdF9z aWduYWxfemVyb19oYW5kbGVzKGludCBmZCkKK3sKKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxp bmVfYXJyYXkgYXJncyA9IHsgMCB9OworCWludCByZXQ7CisKKwlyZXQgPSBkcm1Jb2N0bChmZCwg RFJNX0lPQ1RMX1NZTkNPQkpfVElNRUxJTkVfU0lHTkFMLCAmYXJncyk7CisJaWd0X2Fzc2VydChy ZXQgPT0gLTEgJiYgZXJybm8gPT0gIEVJTlZBTCk7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3Np Z25hbF9pbGxlZ2FsX2hhbmRsZShpbnQgZmQpCit7CisJc3RydWN0IGRybV9zeW5jb2JqX3RpbWVs aW5lX2FycmF5IGFyZ3MgPSB7IDAgfTsKKwl1aW50MzJfdCBoYW5kbGUgPSAwOworCWludCByZXQ7 CisKKwlhcmdzLmNvdW50X2hhbmRsZXMgPSAxOworCWFyZ3MuaGFuZGxlcyA9IHRvX3VzZXJfcG9p bnRlcigmaGFuZGxlKTsKKwlyZXQgPSBkcm1Jb2N0bChmZCwgRFJNX0lPQ1RMX1NZTkNPQkpfVElN RUxJTkVfU0lHTkFMLCAmYXJncyk7CisJaWd0X2Fzc2VydChyZXQgPT0gLTEgJiYgZXJybm8gPT0g RU5PRU5UKTsKK30KKworc3RhdGljIHZvaWQKK3Rlc3Rfc2lnbmFsX2lsbGVnYWxfcG9pbnQoaW50 IGZkKQoreworCXN0cnVjdCBkcm1fc3luY29ial90aW1lbGluZV9hcnJheSBhcmdzID0geyAwIH07 CisJdWludDMyX3QgaGFuZGxlID0gMTsKKwl1aW50NjRfdCBwb2ludCA9IDA7CisJaW50IHJldDsK KworCWFyZ3MuY291bnRfaGFuZGxlcyA9IDE7CisJYXJncy5oYW5kbGVzID0gdG9fdXNlcl9wb2lu dGVyKCZoYW5kbGUpOworCWFyZ3MucG9pbnRzID0gdG9fdXNlcl9wb2ludGVyKCZwb2ludCk7CisJ cmV0ID0gZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9TWU5DT0JKX1RJTUVMSU5FX1NJR05BTCwgJmFy Z3MpOworCWlndF9hc3NlcnQocmV0ID09IC0xICYmIGVycm5vID09IEVOT0VOVCk7Cit9CitzdGF0 aWMgdm9pZAordGVzdF9zaWduYWxfb25lX2lsbGVnYWxfaGFuZGxlKGludCBmZCkKK3sKKwlzdHJ1 Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmVfYXJyYXkgYXJyYXkgPSB7IDAgfTsKKwl1aW50MzJfdCBz eW5jb2Jqc1szXTsKKwl1aW50NjRfdCBpbml0aWFsX3BvaW50ID0gMTsKKwlpbnQgcmV0OworCisJ c3luY29ianNbMF0gPSBzeW5jb2JqX2NyZWF0ZShmZCwgMCk7CisJc3luY29ianNbMV0gPSAwOwor CXN5bmNvYmpzWzJdID0gc3luY29ial9jcmVhdGUoZmQsIDApOworCisJc3luY29ial90aW1lbGlu ZV9zaWduYWwoZmQsICZzeW5jb2Jqc1swXSwgJmluaXRpYWxfcG9pbnQsIDEpOworCXN5bmNvYmpf dGltZWxpbmVfc2lnbmFsKGZkLCAmc3luY29ianNbMl0sICZpbml0aWFsX3BvaW50LCAxKTsKKwlp Z3RfYXNzZXJ0X2VxKHN5bmNvYmpfdGltZWxpbmVfd2FpdF9lcnIoZmQsICZzeW5jb2Jqc1swXSwK KwkJCQkJCSZpbml0aWFsX3BvaW50LCAxLCAwLCAwKSwgMCk7CisJaWd0X2Fzc2VydF9lcShzeW5j b2JqX3RpbWVsaW5lX3dhaXRfZXJyKGZkLCAmc3luY29ianNbMl0sCisJCQkJCQkmaW5pdGlhbF9w b2ludCwgMSwgMCwgMCksIDApOworCisJYXJyYXkuY291bnRfaGFuZGxlcyA9IDM7CisJYXJyYXku aGFuZGxlcyA9IHRvX3VzZXJfcG9pbnRlcihzeW5jb2Jqcyk7CisJcmV0ID0gZHJtSW9jdGwoZmQs IERSTV9JT0NUTF9TWU5DT0JKX1RJTUVMSU5FX1NJR05BTCwgJmFycmF5KTsKKwlpZ3RfYXNzZXJ0 KHJldCA9PSAtMSAmJiBlcnJubyA9PSBFTk9FTlQpOworCisJc3luY29ial9kZXN0cm95KGZkLCBz eW5jb2Jqc1swXSk7CisJc3luY29ial9kZXN0cm95KGZkLCBzeW5jb2Jqc1syXSk7Cit9CisKK3N0 YXRpYyB2b2lkCit0ZXN0X3NpZ25hbF9iYWRfcGFkKGludCBmZCkKK3sKKwlzdHJ1Y3QgZHJtX3N5 bmNvYmpfdGltZWxpbmVfYXJyYXkgYXJyYXkgPSB7IDAgfTsKKwl1aW50MzJfdCBoYW5kbGUgPSAw OworCWludCByZXQ7CisKKwlhcnJheS5wYWQgPSAweGRlYWRiZWVmOworCWFycmF5LmNvdW50X2hh bmRsZXMgPSAxOworCWFycmF5LmhhbmRsZXMgPSB0b191c2VyX3BvaW50ZXIoJmhhbmRsZSk7CisJ cmV0ID0gZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9TWU5DT0JKX1RJTUVMSU5FX1NJR05BTCwgJmFy cmF5KTsKKwlpZ3RfYXNzZXJ0KHJldCA9PSAtMSAmJiBlcnJubyA9PSBFSU5WQUwpOworfQorCitz dGF0aWMgdm9pZAordGVzdF9zaWduYWxfYXJyYXkoaW50IGZkKQoreworCXVpbnQzMl90IHN5bmNv YmpzWzRdOworCXVpbnQ2NF90IHBvaW50c1s0XSA9IHsxLCAxLCAxLCAwfTsKKworCXN5bmNvYmpz WzBdID0gc3luY29ial9jcmVhdGUoZmQsIDApOworCXN5bmNvYmpzWzFdID0gc3luY29ial9jcmVh dGUoZmQsIDApOworCXN5bmNvYmpzWzJdID0gc3luY29ial9jcmVhdGUoZmQsIDApOworCXN5bmNv YmpzWzNdID0gc3luY29ial9jcmVhdGUoZmQsIDApOworCisJc3luY29ial90aW1lbGluZV9zaWdu YWwoZmQsIHN5bmNvYmpzLCBwb2ludHMsIDQpOworCWlndF9hc3NlcnRfZXEoc3luY29ial90aW1l bGluZV93YWl0X2VycihmZCwgc3luY29ianMsCisJCQkJCQlwb2ludHMsIDMsIDAsIDApLCAwKTsK KwlpZ3RfYXNzZXJ0X2VxKHN5bmNvYmpfd2FpdF9lcnIoZmQsICZzeW5jb2Jqc1szXSwgMSwgMCwg MCksIDApOworCisJc3luY29ial9kZXN0cm95KGZkLCBzeW5jb2Jqc1swXSk7CisJc3luY29ial9k ZXN0cm95KGZkLCBzeW5jb2Jqc1sxXSk7CisJc3luY29ial9kZXN0cm95KGZkLCBzeW5jb2Jqc1sy XSk7CisJc3luY29ial9kZXN0cm95KGZkLCBzeW5jb2Jqc1szXSk7Cit9CisKK3N0YXRpYyB2b2lk Cit0ZXN0X3RyYW5zZmVyX2lsbGVnYWxfaGFuZGxlKGludCBmZCkKK3sKKwlzdHJ1Y3QgZHJtX3N5 bmNvYmpfdHJhbnNmZXIgYXJncyA9IHsgMCB9OworCXVpbnQzMl90IGhhbmRsZSA9IDA7CisJaW50 IHJldDsKKworCWFyZ3Muc3JjX2hhbmRsZSA9IHRvX3VzZXJfcG9pbnRlcigmaGFuZGxlKTsKKwlh cmdzLmRzdF9oYW5kbGUgPSB0b191c2VyX3BvaW50ZXIoJmhhbmRsZSk7CisJYXJncy5zcmNfcG9p bnQgPSAxOworCWFyZ3MuZHN0X3BvaW50ID0gMDsKKwlyZXQgPSBkcm1Jb2N0bChmZCwgRFJNX0lP Q1RMX1NZTkNPQkpfVFJBTlNGRVIsICZhcmdzKTsKKwlpZ3RfYXNzZXJ0KHJldCA9PSAtMSAmJiBl cnJubyA9PSBFTk9FTlQpOworfQorCitzdGF0aWMgdm9pZAordGVzdF90cmFuc2Zlcl9pbGxlZ2Fs X3BvaW50KGludCBmZCkKK3sKKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfdHJhbnNmZXIgYXJncyA9IHsg MCB9OworCXVpbnQzMl90IGhhbmRsZTEgPSAxOworCXVpbnQzMl90IGhhbmRsZTIgPSAyOworCWlu dCByZXQ7CisKKwlhcmdzLnNyY19oYW5kbGUgPSB0b191c2VyX3BvaW50ZXIoJmhhbmRsZTEpOwor CWFyZ3MuZHN0X2hhbmRsZSA9IHRvX3VzZXJfcG9pbnRlcigmaGFuZGxlMik7CisJYXJncy5zcmNf cG9pbnQgPSAwOworCWFyZ3MuZHN0X3BvaW50ID0gMDsKKwlyZXQgPSBkcm1Jb2N0bChmZCwgRFJN X0lPQ1RMX1NZTkNPQkpfVFJBTlNGRVIsICZhcmdzKTsKKwlpZ3RfYXNzZXJ0KHJldCA9PSAtMSAm JiBlcnJubyA9PSBFSU5WQUwpOworfQorCitzdGF0aWMgdm9pZAordGVzdF90cmFuc2Zlcl9iYWRf cGFkKGludCBmZCkKK3sKKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfdHJhbnNmZXIgYXJnID0geyAwIH07 CisJdWludDMyX3QgaGFuZGxlID0gMDsKKwlpbnQgcmV0OworCisJYXJnLnBhZCA9IDB4ZGVhZGJl ZWY7CisJYXJnLnNyY19oYW5kbGUgPSB0b191c2VyX3BvaW50ZXIoJmhhbmRsZSk7CisJYXJnLmRz dF9oYW5kbGUgPSB0b191c2VyX3BvaW50ZXIoJmhhbmRsZSk7CisJcmV0ID0gZHJtSW9jdGwoZmQs IERSTV9JT0NUTF9TWU5DT0JKX1RSQU5TRkVSLCAmYXJnKTsKKwlpZ3RfYXNzZXJ0KHJldCA9PSAt MSAmJiBlcnJubyA9PSBFSU5WQUwpOworfQorCisjZGVmaW5lIFdBSVRfRk9SX1NVQk1JVAkJKDEg PDwgMCkKKyNkZWZpbmUgV0FJVF9BTEwJCSgxIDw8IDEpCisjZGVmaW5lIFdBSVRfQVZBSUxBQkxF CQkoMSA8PCAyKQorI2RlZmluZSBXQUlUX1VOU1VCTUlUVEVECSgxIDw8IDMpCisjZGVmaW5lIFdB SVRfU1VCTUlUVEVECQkoMSA8PCA0KQorI2RlZmluZSBXQUlUX1NJR05BTEVECQkoMSA8PCA1KQor I2RlZmluZSBXQUlUX0ZMQUdTX01BWAkJKDEgPDwgNikgLSAxCisKK3N0YXRpYyB1aW50MzJfdAor ZmxhZ3NfZm9yX3Rlc3RfZmxhZ3ModWludDMyX3QgdGVzdF9mbGFncykKK3sKKwl1aW50MzJfdCBm bGFncyA9IDA7CisKKwlpZiAodGVzdF9mbGFncyAmIFdBSVRfRk9SX1NVQk1JVCkKKwkJZmxhZ3Mg fD0gRFJNX1NZTkNPQkpfV0FJVF9GTEFHU19XQUlUX0ZPUl9TVUJNSVQ7CisKKwlpZiAodGVzdF9m bGFncyAmIFdBSVRfQVZBSUxBQkxFKQorCQlmbGFncyB8PSBEUk1fU1lOQ09CSl9XQUlUX0ZMQUdT X1dBSVRfQVZBSUxBQkxFOworCisJaWYgKHRlc3RfZmxhZ3MgJiBXQUlUX0FMTCkKKwkJZmxhZ3Mg fD0gRFJNX1NZTkNPQkpfV0FJVF9GTEFHU19XQUlUX0FMTDsKKworCXJldHVybiBmbGFnczsKK30K Kworc3RhdGljIHZvaWQKK3Rlc3Rfc2luZ2xlX3dhaXQoaW50IGZkLCB1aW50MzJfdCB0ZXN0X2Zs YWdzLCBpbnQgZXhwZWN0KQoreworCXVpbnQzMl90IHN5bmNvYmogPSBzeW5jb2JqX2NyZWF0ZShm ZCwgMCk7CisJdWludDMyX3QgZmxhZ3MgPSBmbGFnc19mb3JfdGVzdF9mbGFncyh0ZXN0X2ZsYWdz KTsKKwl1aW50NjRfdCBwb2ludCA9IDE7CisJaW50IHRpbWVsaW5lID0gLTE7CisKKwlpZiAodGVz dF9mbGFncyAmIChXQUlUX1NVQk1JVFRFRCB8IFdBSVRfU0lHTkFMRUQpKQorCQl0aW1lbGluZSA9 IHN5bmNvYmpfYXR0YWNoX3N3X3N5bmMoZmQsIHN5bmNvYmosIHBvaW50KTsKKworCWlmICh0ZXN0 X2ZsYWdzICYgV0FJVF9TSUdOQUxFRCkKKwkJc3dfc3luY190aW1lbGluZV9pbmModGltZWxpbmUs IDEpOworCisJaWd0X2Fzc2VydF9lcShzeW5jb2JqX3RpbWVsaW5lX3dhaXRfZXJyKGZkLCAmc3lu Y29iaiwgJnBvaW50LCAxLAorCQkJCQkJMCwgZmxhZ3MpLCBleHBlY3QpOworCisJaWd0X2Fzc2Vy dF9lcShzeW5jb2JqX3RpbWVsaW5lX3dhaXRfZXJyKGZkLCAmc3luY29iaiwgJnBvaW50LCAxLAor CQkJCQkJc2hvcnRfdGltZW91dCgpLCBmbGFncyksIGV4cGVjdCk7CisKKwlpZiAoZXhwZWN0ICE9 IC1FVElNRSkgeworCQlpZ3RfYXNzZXJ0X2VxKHN5bmNvYmpfdGltZWxpbmVfd2FpdF9lcnIoZmQs ICZzeW5jb2JqLCAmcG9pbnQsIDEsCisJCQkJCQkJVUlOVDY0X01BWCwgZmxhZ3MpLCBleHBlY3Qp OworCX0KKworCXN5bmNvYmpfZGVzdHJveShmZCwgc3luY29iaik7CisJaWYgKHRpbWVsaW5lICE9 IC0xKQorCQljbG9zZSh0aW1lbGluZSk7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3dhaXRfZGVs YXllZF9zaWduYWwoaW50IGZkLCB1aW50MzJfdCB0ZXN0X2ZsYWdzKQoreworCXVpbnQzMl90IHN5 bmNvYmogPSBzeW5jb2JqX2NyZWF0ZShmZCwgMCk7CisJdWludDMyX3QgZmxhZ3MgPSBmbGFnc19m b3JfdGVzdF9mbGFncyh0ZXN0X2ZsYWdzKTsKKwl1aW50NjRfdCBwb2ludCA9IDE7CisJaW50IHRp bWVsaW5lID0gLTE7CisJdGltZXJfdCB0aW1lcjsKKworCWlmICh0ZXN0X2ZsYWdzICYgV0FJVF9G T1JfU1VCTUlUKSB7CisJCXRpbWVyID0gc3luY29ial90cmlnZ2VyX2RlbGF5ZWQoZmQsIHN5bmNv YmosIHBvaW50LCBTSE9SVF9USU1FX05TRUMpOworCX0gZWxzZSB7CisJCXRpbWVsaW5lID0gc3lu Y29ial9hdHRhY2hfc3dfc3luYyhmZCwgc3luY29iaiwgcG9pbnQpOworCQl0aW1lciA9IHNldF90 aW1lcih0aW1lbGluZV9pbmNfZnVuYywgTlVMTCwKKwkJCQkgIHRpbWVsaW5lLCBTSE9SVF9USU1F X05TRUMpOworCX0KKworCWlndF9hc3NlcnQoc3luY29ial90aW1lbGluZV93YWl0KGZkLCAmc3lu Y29iaiwgJnBvaW50LCAxLAorCQkJCWdldHRpbWVfbnMoKSArIFNIT1JUX1RJTUVfTlNFQyAqIDIs CisJCQkJZmxhZ3MsIE5VTEwpKTsKKworCXRpbWVyX2RlbGV0ZSh0aW1lcik7CisKKwlpZiAodGlt ZWxpbmUgIT0gLTEpCisJCWNsb3NlKHRpbWVsaW5lKTsKKworCXN5bmNvYmpfZGVzdHJveShmZCwg c3luY29iaik7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3Jlc2V0X3Vuc2lnbmFsZWQoaW50IGZk KQoreworCXVpbnQzMl90IHN5bmNvYmogPSBzeW5jb2JqX2NyZWF0ZShmZCwgMCk7CisJdWludDY0 X3QgcG9pbnQgPSAxOworCisJaWd0X2Fzc2VydF9lcShzeW5jb2JqX3RpbWVsaW5lX3dhaXRfZXJy KGZkLCAmc3luY29iaiwgJnBvaW50LAorCQkJCQkJMSwgMCwgMCksIC1FSU5WQUwpOworCisJc3lu Y29ial9yZXNldChmZCwgJnN5bmNvYmosIDEpOworCisJaWd0X2Fzc2VydF9lcShzeW5jb2JqX3Rp bWVsaW5lX3dhaXRfZXJyKGZkLCAmc3luY29iaiwgJnBvaW50LAorCQkJCQkJMSwgMCwgMCksIC1F SU5WQUwpOworCisJc3luY29ial9kZXN0cm95KGZkLCBzeW5jb2JqKTsKK30KKworc3RhdGljIHZv aWQKK3Rlc3RfcmVzZXRfc2lnbmFsZWQoaW50IGZkKQoreworCXVpbnQzMl90IHN5bmNvYmogPSBz eW5jb2JqX2NyZWF0ZShmZCwgMCk7CisJdWludDY0X3QgcG9pbnQgPSAxOworCisJc3luY29ial90 cmlnZ2VyKGZkLCBzeW5jb2JqLCBwb2ludCk7CisKKwlpZ3RfYXNzZXJ0X2VxKHN5bmNvYmpfdGlt ZWxpbmVfd2FpdF9lcnIoZmQsICZzeW5jb2JqLCAmcG9pbnQsCisJCQkJCQkxLCAwLCAwKSwgMCk7 CisKKwlzeW5jb2JqX3Jlc2V0KGZkLCAmc3luY29iaiwgMSk7CisKKwlpZ3RfYXNzZXJ0X2VxKHN5 bmNvYmpfdGltZWxpbmVfd2FpdF9lcnIoZmQsICZzeW5jb2JqLCAmcG9pbnQsCisJCQkJCQkxLCAw LCAwKSwgLUVJTlZBTCk7CisKKwlzeW5jb2JqX2Rlc3Ryb3koZmQsIHN5bmNvYmopOworfQorCitz dGF0aWMgdm9pZAordGVzdF9yZXNldF9tdWx0aXBsZV9zaWduYWxlZChpbnQgZmQpCit7CisJdWlu dDY0X3QgcG9pbnRzWzNdID0gezEsIDEsIDF9OworCXVpbnQzMl90IHN5bmNvYmpzWzNdOworCWlu dCBpOworCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQlzeW5jb2Jqc1tpXSA9IHN5bmNv YmpfY3JlYXRlKGZkLCAwKTsKKwkJc3luY29ial90cmlnZ2VyKGZkLCBzeW5jb2Jqc1tpXSwgcG9p bnRzW2ldKTsKKwl9CisKKwlpZ3RfYXNzZXJ0X2VxKHN5bmNvYmpfdGltZWxpbmVfd2FpdF9lcnIo ZmQsIHN5bmNvYmpzLCBwb2ludHMsIDMsIDAsIDApLCAwKTsKKworCXN5bmNvYmpfcmVzZXQoZmQs IHN5bmNvYmpzLCAzKTsKKworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJaWd0X2Fzc2Vy dF9lcShzeW5jb2JqX3RpbWVsaW5lX3dhaXRfZXJyKGZkLCAmc3luY29ianNbaV0sCisJCQkJCQkJ JnBvaW50c1tpXSwgMSwKKwkJCQkJCQkwLCAwKSwgLUVJTlZBTCk7CisJCXN5bmNvYmpfZGVzdHJv eShmZCwgc3luY29ianNbaV0pOworCX0KK30KKworc3RhdGljIHZvaWQKK3Jlc2V0X2FuZF90cmln Z2VyX2Z1bmModW5pb24gc2lndmFsIHNpZ3ZhbCkKK3sKKwlzdHJ1Y3QgZmRfaGFuZGxlX3BhaXIg KnBhaXIgPSBzaWd2YWwuc2l2YWxfcHRyOworCXN5bmNvYmpfcmVzZXQocGFpci0+ZmQsICZwYWly LT5oYW5kbGUsIDEpOworCXN5bmNvYmpfdHJpZ2dlcihwYWlyLT5mZCwgcGFpci0+aGFuZGxlLCBw YWlyLT5wb2ludCk7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3Jlc2V0X2R1cmluZ193YWl0X2Zv cl9zdWJtaXQoaW50IGZkKQoreworCXVpbnQzMl90IHN5bmNvYmogPSBzeW5jb2JqX2NyZWF0ZShm ZCwgMCk7CisJdWludDMyX3QgZmxhZ3MgPSBMT0NBTF9TWU5DT0JKX1dBSVRfRkxBR1NfV0FJVF9G T1JfU1VCTUlUOworCXN0cnVjdCBmZF9oYW5kbGVfcGFpciBwYWlyOworCXVpbnQ2NF90IHBvaW50 ID0gMTsKKwl0aW1lcl90IHRpbWVyOworCisJcGFpci5mZCA9IGZkOworCXBhaXIuaGFuZGxlID0g c3luY29iajsKKwl0aW1lciA9IHNldF90aW1lcihyZXNldF9hbmRfdHJpZ2dlcl9mdW5jLCAmcGFp ciwgMCwgU0hPUlRfVElNRV9OU0VDKTsKKworCS8qIEEgcmVzZXQgc2hvdWxkIGJlIGEgbm8tb3Ag ZXZlbiBpZiB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIGEgd2FpdCAqLworCWlndF9hc3NlcnQoc3lu Y29ial90aW1lbGluZV93YWl0KGZkLCAmc3luY29iaiwgJnBvaW50LCAxLAorCQkJCWdldHRpbWVf bnMoKSArIFNIT1JUX1RJTUVfTlNFQyAqIDIsCisJCQkJZmxhZ3MsIE5VTEwpKTsKKworCXRpbWVy X2RlbGV0ZSh0aW1lcik7CisKKwlzeW5jb2JqX2Rlc3Ryb3koZmQsIHN5bmNvYmopOworfQorCitz dGF0aWMgdm9pZAordGVzdF9zaWduYWwoaW50IGZkKQoreworCXVpbnQzMl90IHN5bmNvYmogPSBz eW5jb2JqX2NyZWF0ZShmZCwgMCk7CisJdWludDMyX3QgZmxhZ3MgPSBMT0NBTF9TWU5DT0JKX1dB SVRfRkxBR1NfV0FJVF9GT1JfU1VCTUlUOworCXVpbnQ2NF90IHBvaW50ID0gMTsKKworCWlndF9h c3NlcnRfZXEoc3luY29ial90aW1lbGluZV93YWl0X2VycihmZCwgJnN5bmNvYmosICZwb2ludCwK KwkJCQkJCTEsIDAsIDApLCAtRUlOVkFMKTsKKwlpZ3RfYXNzZXJ0X2VxKHN5bmNvYmpfdGltZWxp bmVfd2FpdF9lcnIoZmQsICZzeW5jb2JqLCAmcG9pbnQsCisJCQkJCQkxLCAwLCBmbGFncyksIC1F VElNRSk7CisKKwlzeW5jb2JqX3RpbWVsaW5lX3NpZ25hbChmZCwgJnN5bmNvYmosICZwb2ludCwg MSk7CisKKwlpZ3RfYXNzZXJ0KHN5bmNvYmpfdGltZWxpbmVfd2FpdChmZCwgJnN5bmNvYmosICZw b2ludCwgMSwgMCwgMCwgTlVMTCkpOworCWlndF9hc3NlcnQoc3luY29ial90aW1lbGluZV93YWl0 KGZkLCAmc3luY29iaiwgJnBvaW50LCAxLCAwLCBmbGFncywgTlVMTCkpOworCisJc3luY29ial9k ZXN0cm95KGZkLCBzeW5jb2JqKTsKK30KKworc3RhdGljIHZvaWQKK3Rlc3RfbXVsdGlfd2FpdChp bnQgZmQsIHVpbnQzMl90IHRlc3RfZmxhZ3MsIGludCBleHBlY3QpCit7CisJdWludDMyX3Qgc3lu Y29ianNbM107CisJdWludDMyX3QgdGZsYWcsIGZsYWdzOworCWludCBpLCBmaWR4LCB0aW1lbGlu ZTsKKwl1aW50NjRfdCBwb2ludHNbM10gPSB7MSwgMSwgMX07CisKKwlzeW5jb2Jqc1swXSA9IHN5 bmNvYmpfY3JlYXRlKGZkLCAwKTsKKwlzeW5jb2Jqc1sxXSA9IHN5bmNvYmpfY3JlYXRlKGZkLCAw KTsKKwlzeW5jb2Jqc1syXSA9IHN5bmNvYmpfY3JlYXRlKGZkLCAwKTsKKworCWZsYWdzID0gZmxh Z3NfZm9yX3Rlc3RfZmxhZ3ModGVzdF9mbGFncyk7CisJdGVzdF9mbGFncyAmPSB+KFdBSVRfQUxM IHwgV0FJVF9GT1JfU1VCTUlUIHwgV0FJVF9BVkFJTEFCTEUpOworCisJZm9yIChpID0gMDsgaSA8 IDM7IGkrKykgeworCQlmaWR4ID0gZmZzKHRlc3RfZmxhZ3MpIC0gMTsKKwkJdGZsYWcgPSAoMSA8 PCBmaWR4KTsKKworCQlpZiAodGVzdF9mbGFncyAmIH50ZmxhZykKKwkJCXRlc3RfZmxhZ3MgJj0g fnRmbGFnOworCisJCWlmICh0ZmxhZyAmIChXQUlUX1NVQk1JVFRFRCB8IFdBSVRfU0lHTkFMRUQp KQorCQkJdGltZWxpbmUgPSBzeW5jb2JqX2F0dGFjaF9zd19zeW5jKGZkLCBzeW5jb2Jqc1tpXSwK KwkJCQkJCQkgIHBvaW50c1tpXSk7CisJCWlmICh0ZmxhZyAmIFdBSVRfU0lHTkFMRUQpCisJCQlz d19zeW5jX3RpbWVsaW5lX2luYyh0aW1lbGluZSwgMSk7CisJfQorCisJaWd0X2Fzc2VydF9lcShz eW5jb2JqX3RpbWVsaW5lX3dhaXRfZXJyKGZkLCBzeW5jb2JqcywgcG9pbnRzLCAzLCAwLCBmbGFn cyksIGV4cGVjdCk7CisKKwlpZ3RfYXNzZXJ0X2VxKHN5bmNvYmpfdGltZWxpbmVfd2FpdF9lcnIo ZmQsIHN5bmNvYmpzLCBwb2ludHMsIDMsIHNob3J0X3RpbWVvdXQoKSwKKwkJCQkgICAgICAgZmxh Z3MpLCBleHBlY3QpOworCisJaWYgKGV4cGVjdCAhPSAtRVRJTUUpIHsKKwkJaWd0X2Fzc2VydF9l cShzeW5jb2JqX3RpbWVsaW5lX3dhaXRfZXJyKGZkLCBzeW5jb2JqcywgcG9pbnRzLCAzLCBVSU5U NjRfTUFYLAorCQkJCQkgICAgICAgZmxhZ3MpLCBleHBlY3QpOworCX0KKworCXN5bmNvYmpfZGVz dHJveShmZCwgc3luY29ianNbMF0pOworCXN5bmNvYmpfZGVzdHJveShmZCwgc3luY29ianNbMV0p OworCXN5bmNvYmpfZGVzdHJveShmZCwgc3luY29ianNbMl0pOworfQorCitzdHJ1Y3Qgd2FpdF90 aHJlYWRfZGF0YSB7CisJaW50IGZkOworCXN0cnVjdCBkcm1fc3luY29ial90aW1lbGluZV93YWl0 IHdhaXQ7Cit9OworCitzdGF0aWMgdm9pZCAqCit3YWl0X3RocmVhZF9mdW5jKHZvaWQgKmRhdGEp Cit7CisJc3RydWN0IHdhaXRfdGhyZWFkX2RhdGEgKndhaXQgPSBkYXRhOworCWlndF9hc3NlcnRf ZXEoX19zeW5jb2JqX3RpbWVsaW5lX3dhaXRfaW9jdGwod2FpdC0+ZmQsICZ3YWl0LT53YWl0KSwg MCk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3dhaXRfc25hcHNob3Qo aW50IGZkLCB1aW50MzJfdCB0ZXN0X2ZsYWdzKQoreworCXN0cnVjdCB3YWl0X3RocmVhZF9kYXRh IHdhaXQgPSB7IDAgfTsKKwl1aW50MzJfdCBzeW5jb2Jqc1syXTsKKwl1aW50NjRfdCBwb2ludHNb Ml0gPSB7MSwgMX07CisJaW50IHRpbWVsaW5lc1szXSA9IHsgLTEsIC0xLCAtMSB9OworCXB0aHJl YWRfdCB0aHJlYWQ7CisKKwlzeW5jb2Jqc1swXSA9IHN5bmNvYmpfY3JlYXRlKGZkLCAwKTsKKwlz eW5jb2Jqc1sxXSA9IHN5bmNvYmpfY3JlYXRlKGZkLCAwKTsKKworCWlmICghKHRlc3RfZmxhZ3Mg JiBXQUlUX0ZPUl9TVUJNSVQpKSB7CisJCXRpbWVsaW5lc1swXSA9IHN5bmNvYmpfYXR0YWNoX3N3 X3N5bmMoZmQsIHN5bmNvYmpzWzBdLCBwb2ludHNbMF0pOworCQl0aW1lbGluZXNbMV0gPSBzeW5j b2JqX2F0dGFjaF9zd19zeW5jKGZkLCBzeW5jb2Jqc1sxXSwgcG9pbnRzWzFdKTsKKwl9CisKKwl3 YWl0LmZkID0gZmQ7CisJd2FpdC53YWl0LmhhbmRsZXMgPSB0b191c2VyX3BvaW50ZXIoc3luY29i anMpOworCXdhaXQud2FpdC5jb3VudF9oYW5kbGVzID0gMjsKKwl3YWl0LndhaXQucG9pbnRzID0g dG9fdXNlcl9wb2ludGVyKHBvaW50cyk7CisJd2FpdC53YWl0LnRpbWVvdXRfbnNlYyA9IHNob3J0 X3RpbWVvdXQoKTsKKwl3YWl0LndhaXQuZmxhZ3MgPSBmbGFnc19mb3JfdGVzdF9mbGFncyh0ZXN0 X2ZsYWdzKTsKKworCWlndF9hc3NlcnRfZXEocHRocmVhZF9jcmVhdGUoJnRocmVhZCwgTlVMTCwg d2FpdF90aHJlYWRfZnVuYywgJndhaXQpLCAwKTsKKworCXNsZWVwX25zZWMoU0hPUlRfVElNRV9O U0VDIC8gNSk7CisKKwkvKiBUcnkgdG8gZmFrZSB0aGUga2VybmVsIG91dCBieSB0cmlnZ2VyaW5n IG9yIHBhcnRpYWxseSB0cmlnZ2VyaW5nCisJICogdGhlIGZpcnN0IGZlbmNlLgorCSAqLworCWlm ICh0ZXN0X2ZsYWdzICYgV0FJVF9BTEwpIHsKKwkJLyogSWYgaXQncyBXQUlUX0FMTCwgYWN0dWFs bHkgdHJpZ2dlciBpdCAqLworCQlpZiAodGltZWxpbmVzWzBdID09IC0xKQorCQkJc3luY29ial90 cmlnZ2VyKGZkLCBzeW5jb2Jqc1swXSwgcG9pbnRzWzBdKTsKKwkJZWxzZQorCQkJc3dfc3luY190 aW1lbGluZV9pbmModGltZWxpbmVzWzBdLCAxKTsKKwl9IGVsc2UgaWYgKHRlc3RfZmxhZ3MgJiBX QUlUX0ZPUl9TVUJNSVQpIHsKKwkJdGltZWxpbmVzWzBdID0gc3luY29ial9hdHRhY2hfc3dfc3lu YyhmZCwgc3luY29ianNbMF0sIHBvaW50c1swXSk7CisJfQorCisJc2xlZXBfbnNlYyhTSE9SVF9U SU1FX05TRUMgLyA1KTsKKworCS8qIFRoZW4gcmVzZXQgaXQgKi8KKwlzeW5jb2JqX3Jlc2V0KGZk LCAmc3luY29ianNbMF0sIDEpOworCisJc2xlZXBfbnNlYyhTSE9SVF9USU1FX05TRUMgLyA1KTsK KworCS8qIFRoZW4gInN1Ym1pdCIgaXQgaW4gYSB3YXkgdGhhdCB3aWxsIG5ldmVyIHRyaWdnZXIu ICBUaGlzIHdheSwgaWYKKwkgKiB0aGUga2VybmVsIHBpY2tzIHVwIG9uIHRoZSBuZXcgZmVuY2Ug KGl0IHNob3VsZG4ndCksIHdlJ2xsIGdldCBhCisJICogdGltZW91dC4KKwkgKi8KKwl0aW1lbGlu ZXNbMl0gPSBzeW5jb2JqX2F0dGFjaF9zd19zeW5jKGZkLCBzeW5jb2Jqc1swXSwgcG9pbnRzWzBd KTsKKworCXNsZWVwX25zZWMoU0hPUlRfVElNRV9OU0VDIC8gNSk7CisKKwkvKiBOb3cgdHJpZ2dl ciB0aGUgc2Vjb25kIGZlbmNlIHRvIGNvbXBsZXRlIHRoZSB3YWl0ICovCisKKwlpZiAodGltZWxp bmVzWzFdID09IC0xKQorCQlzeW5jb2JqX3RyaWdnZXIoZmQsIHN5bmNvYmpzWzFdLCBwb2ludHNb MV0pOworCWVsc2UKKwkJc3dfc3luY190aW1lbGluZV9pbmModGltZWxpbmVzWzFdLCAxKTsKKwor CXB0aHJlYWRfam9pbih0aHJlYWQsIE5VTEwpOworCisJaWYgKCEodGVzdF9mbGFncyAmIFdBSVRf QUxMKSkKKwkJaWd0X2Fzc2VydF9lcSh3YWl0LndhaXQuZmlyc3Rfc2lnbmFsZWQsIDEpOworCisJ Y2xvc2UodGltZWxpbmVzWzBdKTsKKwljbG9zZSh0aW1lbGluZXNbMV0pOworCWNsb3NlKHRpbWVs aW5lc1syXSk7CisJc3luY29ial9kZXN0cm95KGZkLCBzeW5jb2Jqc1swXSk7CisJc3luY29ial9k ZXN0cm95KGZkLCBzeW5jb2Jqc1sxXSk7Cit9CisKKy8qIFRoZSBudW1iZXJzIDAtNywgZWFjaCBy ZXBlYXRlZCA1eCBhbmQgc2h1ZmZsZWQuICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2h1ZmZs ZWRfMF83X3g0W10gPSB7CisJMiwgMCwgNiwgMSwgMSwgNCwgNSwgMiwgMCwgNywgMSwgNywgNiwg MywgNCwgNSwKKwkwLCAyLCA3LCAzLCA1LCA0LCAwLCA2LCA3LCAzLCAyLCA1LCA2LCAxLCA0LCAz LAorfTsKKworZW51bSBzeW5jb2JqX3N0YWdlIHsKKwlTVEFHRV9VTlNVQk1JVFRFRCwKKwlTVEFH RV9TVUJNSVRURUQsCisJU1RBR0VfU0lHTkFMRUQsCisJU1RBR0VfUkVTRVQsCisJU1RBR0VfUkVT VUJNSVRURUQsCit9OworCitzdGF0aWMgdm9pZAordGVzdF93YWl0X2NvbXBsZXgoaW50IGZkLCB1 aW50MzJfdCB0ZXN0X2ZsYWdzKQoreworCXN0cnVjdCB3YWl0X3RocmVhZF9kYXRhIHdhaXQgPSB7 IDAgfTsKKwl1aW50MzJfdCBzeW5jb2Jqc1s4XTsKKwl1aW50NjRfdCBwb2ludHNbOF0gPSB7MSwg MSwgMSwgMSwgMSwgMSwgMSwgMX07CisJZW51bSBzeW5jb2JqX3N0YWdlIHN0YWdlWzhdOworCWlu dCBpLCBqLCB0aW1lbGluZXNbOF07CisJdWludDMyX3QgZmlyc3Rfc2lnbmFsZWQgPSAtMSwgbnVt X3NpZ25hbGVkID0gMDsKKwlwdGhyZWFkX3QgdGhyZWFkOworCisJZm9yIChpID0gMDsgaSA8IDg7 IGkrKykgeworCQlzdGFnZVtpXSA9IFNUQUdFX1VOU1VCTUlUVEVEOworCQlzeW5jb2Jqc1tpXSA9 IHN5bmNvYmpfY3JlYXRlKGZkLCAwKTsKKwl9CisKKwlpZiAodGVzdF9mbGFncyAmIFdBSVRfRk9S X1NVQk1JVCkgeworCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCQkJdGltZWxpbmVzW2ldID0g LTE7CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJCXRpbWVsaW5lc1tp XSA9IHN5bmNvYmpfYXR0YWNoX3N3X3N5bmMoZmQsIHN5bmNvYmpzW2ldLAorCQkJCQkJCSAgICAg IHBvaW50c1tpXSk7CisJfQorCisJd2FpdC5mZCA9IGZkOworCXdhaXQud2FpdC5oYW5kbGVzID0g dG9fdXNlcl9wb2ludGVyKHN5bmNvYmpzKTsKKwl3YWl0LndhaXQuY291bnRfaGFuZGxlcyA9IDI7 CisJd2FpdC53YWl0LnBvaW50cyA9IHRvX3VzZXJfcG9pbnRlcihwb2ludHMpOworCXdhaXQud2Fp dC50aW1lb3V0X25zZWMgPSBnZXR0aW1lX25zKCkgKyBOU0VDU19QRVJfU0VDOworCXdhaXQud2Fp dC5mbGFncyA9IGZsYWdzX2Zvcl90ZXN0X2ZsYWdzKHRlc3RfZmxhZ3MpOworCisJaWd0X2Fzc2Vy dF9lcShwdGhyZWFkX2NyZWF0ZSgmdGhyZWFkLCBOVUxMLCB3YWl0X3RocmVhZF9mdW5jLCAmd2Fp dCksIDApOworCisJc2xlZXBfbnNlYyhOU0VDU19QRVJfU0VDIC8gNTApOworCisJbnVtX3NpZ25h bGVkID0gMDsKKwlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShzaHVmZmxlZF8wXzdfeDQpOyBq KyspIHsKKwkJaSA9IHNodWZmbGVkXzBfN194NFtqXTsKKwkJaWd0X2Fzc2VydF9sdChpLCBBUlJB WV9TSVpFKHN5bmNvYmpzKSk7CisKKwkJc3dpdGNoIChzdGFnZVtpXSsrKSB7CisJCWNhc2UgU1RB R0VfVU5TVUJNSVRURUQ6CisJCQkvKiBXZSBuZWVkIHRvIHN1Ym1pdCBhdHRhY2ggYSBmZW5jZSAq LworCQkJaWYgKCEodGVzdF9mbGFncyAmIFdBSVRfRk9SX1NVQk1JVCkpIHsKKwkJCQkvKiBXZSBo YWQgdG8gYXR0YWNoIG9uZSB1cC1mcm9udCAqLworCQkJCWlndF9hc3NlcnRfbmVxKHRpbWVsaW5l c1tpXSwgLTEpOworCQkJCWJyZWFrOworCQkJfQorCQkJdGltZWxpbmVzW2ldID0gc3luY29ial9h dHRhY2hfc3dfc3luYyhmZCwgc3luY29ianNbaV0sCisJCQkJCQkJICAgICAgcG9pbnRzW2ldKTsK KwkJCWJyZWFrOworCisJCWNhc2UgU1RBR0VfU1VCTUlUVEVEOgorCQkJLyogV2UgaGF2ZSBhIGZl bmNlLCB0cmlnZ2VyIGl0ICovCisJCQlpZ3RfYXNzZXJ0X25lcSh0aW1lbGluZXNbaV0sIC0xKTsK KwkJCXN3X3N5bmNfdGltZWxpbmVfaW5jKHRpbWVsaW5lc1tpXSwgMSk7CisJCQljbG9zZSh0aW1l bGluZXNbaV0pOworCQkJdGltZWxpbmVzW2ldID0gLTE7CisJCQlpZiAobnVtX3NpZ25hbGVkID09 IDApCisJCQkJZmlyc3Rfc2lnbmFsZWQgPSBpOworCQkJbnVtX3NpZ25hbGVkKys7CisJCQlicmVh azsKKworCQljYXNlIFNUQUdFX1NJR05BTEVEOgorCQkJLyogV2UncmUgYWxyZWFkeSBzaWduYWxl ZCwgcmVzZXQgKi8KKwkJCXN5bmNvYmpfcmVzZXQoZmQsICZzeW5jb2Jqc1tpXSwgMSk7CisJCQli cmVhazsKKworCQljYXNlIFNUQUdFX1JFU0VUOgorCQkJLyogV2UncmUgcmVzZXQsIHN1Ym1pdCBh bmQgZG9uJ3Qgc2lnbmFsICovCisJCQl0aW1lbGluZXNbaV0gPSBzeW5jb2JqX2F0dGFjaF9zd19z eW5jKGZkLCBzeW5jb2Jqc1tpXSwKKwkJCQkJCQkgICAgICBwb2ludHNbaV0pOworCQkJYnJlYWs7 CisKKwkJY2FzZSBTVEFHRV9SRVNVQk1JVFRFRDoKKwkJCWlndF9hc3NlcnQoISJTaG91bGQgbm90 IHJlYWNoIHRoaXMgc3RhZ2UiKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHRlc3RfZmxhZ3Mg JiBXQUlUX0FMTCkgeworCQkJaWYgKG51bV9zaWduYWxlZCA9PSBBUlJBWV9TSVpFKHN5bmNvYmpz KSkKKwkJCQlicmVhazsKKwkJfSBlbHNlIHsKKwkJCWlmIChudW1fc2lnbmFsZWQgPiAwKQorCQkJ CWJyZWFrOworCQl9CisKKwkJc2xlZXBfbnNlYyhOU0VDU19QRVJfU0VDIC8gMTAwKTsKKwl9CisK KwlwdGhyZWFkX2pvaW4odGhyZWFkLCBOVUxMKTsKKworCWlmICh0ZXN0X2ZsYWdzICYgV0FJVF9B TEwpIHsKKwkJaWd0X2Fzc2VydF9lcShudW1fc2lnbmFsZWQsIEFSUkFZX1NJWkUoc3luY29ianMp KTsKKwl9IGVsc2UgeworCQlpZ3RfYXNzZXJ0X2VxKG51bV9zaWduYWxlZCwgMSk7CisJCWlndF9h c3NlcnRfZXEod2FpdC53YWl0LmZpcnN0X3NpZ25hbGVkLCBmaXJzdF9zaWduYWxlZCk7CisJfQor CisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQljbG9zZSh0aW1lbGluZXNbaV0pOworCQlz eW5jb2JqX2Rlc3Ryb3koZmQsIHN5bmNvYmpzW2ldKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCit0 ZXN0X3dhaXRfaW50ZXJydXB0ZWQoaW50IGZkLCB1aW50MzJfdCB0ZXN0X2ZsYWdzKQoreworCXN0 cnVjdCBkcm1fc3luY29ial90aW1lbGluZV93YWl0IHdhaXQgPSB7IDAgfTsKKwl1aW50MzJfdCBz eW5jb2JqID0gc3luY29ial9jcmVhdGUoZmQsIDApOworCXVpbnQ2NF90IHBvaW50ID0gMTsKKwlp bnQgdGltZWxpbmU7CisKKwl3YWl0LmhhbmRsZXMgPSB0b191c2VyX3BvaW50ZXIoJnN5bmNvYmop OworCXdhaXQucG9pbnRzID0gdG9fdXNlcl9wb2ludGVyKCZwb2ludCk7CisJd2FpdC5jb3VudF9o YW5kbGVzID0gMTsKKwl3YWl0LmZsYWdzID0gZmxhZ3NfZm9yX3Rlc3RfZmxhZ3ModGVzdF9mbGFn cyk7CisKKwlpZiAodGVzdF9mbGFncyAmIFdBSVRfRk9SX1NVQk1JVCkgeworCQl3YWl0LnRpbWVv dXRfbnNlYyA9IHNob3J0X3RpbWVvdXQoKTsKKwkJaWd0X3doaWxlX2ludGVycnVwdGlibGUodHJ1 ZSkKKwkJCWlndF9hc3NlcnRfZXEoX19zeW5jb2JqX3RpbWVsaW5lX3dhaXRfaW9jdGwoZmQsICZ3 YWl0KSwgLUVUSU1FKTsKKwl9CisKKwl0aW1lbGluZSA9IHN5bmNvYmpfYXR0YWNoX3N3X3N5bmMo ZmQsIHN5bmNvYmosIHBvaW50KTsKKworCXdhaXQudGltZW91dF9uc2VjID0gc2hvcnRfdGltZW91 dCgpOworCWlndF93aGlsZV9pbnRlcnJ1cHRpYmxlKHRydWUpCisJCWlndF9hc3NlcnRfZXEoX19z eW5jb2JqX3RpbWVsaW5lX3dhaXRfaW9jdGwoZmQsICZ3YWl0KSwgLUVUSU1FKTsKKworCXN5bmNv YmpfZGVzdHJveShmZCwgc3luY29iaik7CisJY2xvc2UodGltZWxpbmUpOworfQorCitzdGF0aWMg Ym9vbAoraGFzX3N5bmNvYmpfdGltZWxpbmVfd2FpdChpbnQgZmQpCit7CisJc3RydWN0IGRybV9z eW5jb2JqX3RpbWVsaW5lX3dhaXQgd2FpdCA9IHsgMCB9OworCXVpbnQzMl90IGhhbmRsZSA9IDA7 CisJdWludDY0X3QgdmFsdWU7CisJaW50IHJldDsKKworCWlmIChkcm1HZXRDYXAoZmQsIERSTV9D QVBfU1lOQ09CSiwgJnZhbHVlKSkKKwkJcmV0dXJuIGZhbHNlOworCWlmICghdmFsdWUpCisJCXJl dHVybiBmYWxzZTsKKworCS8qIFRyeSB3YWl0aW5nIGZvciB6ZXJvIHN5bmMgb2JqZWN0cyBzaG91 bGQgZmFpbCB3aXRoIEVJTlZBTCAqLworCXdhaXQuY291bnRfaGFuZGxlcyA9IDE7CisJd2FpdC5o YW5kbGVzID0gdG9fdXNlcl9wb2ludGVyKCZoYW5kbGUpOworCXJldCA9IGRybUlvY3RsKGZkLCBE Uk1fSU9DVExfU1lOQ09CSl9USU1FTElORV9XQUlULCAmd2FpdCk7CisJcmV0dXJuIHJldCA9PSAt MSAmJiBlcnJubyA9PSBFTk9FTlQ7Cit9CisKK2lndF9tYWluCit7CisJaW50IGZkID0gLTE7CisK KwlpZ3RfZml4dHVyZSB7CisJCWZkID0gZHJtX29wZW5fZHJpdmVyKERSSVZFUl9BTlkpOworCQlp Z3RfcmVxdWlyZShoYXNfc3luY29ial90aW1lbGluZV93YWl0KGZkKSk7CisJCWlndF9yZXF1aXJl X3N3X3N5bmMoKTsKKwl9CisKKwlpZ3Rfc3VidGVzdCgiaW52YWxpZC13YWl0LWJhZC1mbGFncyIp CisJCXRlc3Rfd2FpdF9iYWRfZmxhZ3MoZmQpOworCisJaWd0X3N1YnRlc3QoImludmFsaWQtd2Fp dC16ZXJvLWhhbmRsZXMiKQorCQl0ZXN0X3dhaXRfemVyb19oYW5kbGVzKGZkKTsKKworCWlndF9z dWJ0ZXN0KCJpbnZhbGlkLXdhaXQtaWxsZWdhbC1oYW5kbGUiKQorCQl0ZXN0X3dhaXRfaWxsZWdh bF9oYW5kbGUoZmQpOworCisJaWd0X3N1YnRlc3QoImludmFsaWQtcXVlcnktemVyby1oYW5kbGVz IikKKwkJdGVzdF9xdWVyeV96ZXJvX2hhbmRsZXMoZmQpOworCisJaWd0X3N1YnRlc3QoImludmFs aWQtcXVlcnktaWxsZWdhbC1oYW5kbGUiKQorCQl0ZXN0X3F1ZXJ5X2lsbGVnYWxfaGFuZGxlKGZk KTsKKworCWlndF9zdWJ0ZXN0KCJpbnZhbGlkLXF1ZXJ5LW9uZS1pbGxlZ2FsLWhhbmRsZSIpCisJ CXRlc3RfcXVlcnlfb25lX2lsbGVnYWxfaGFuZGxlKGZkKTsKKworCWlndF9zdWJ0ZXN0KCJpbnZh bGlkLXF1ZXJ5LWJhZC1wYWQiKQorCQl0ZXN0X3F1ZXJ5X2JhZF9wYWQoZmQpOworCisJaWd0X3N1 YnRlc3QoImludmFsaWQtc2lnbmFsLXplcm8taGFuZGxlcyIpCisJCXRlc3Rfc2lnbmFsX3plcm9f aGFuZGxlcyhmZCk7CisKKwlpZ3Rfc3VidGVzdCgiaW52YWxpZC1zaWduYWwtaWxsZWdhbC1oYW5k bGUiKQorCQl0ZXN0X3NpZ25hbF9pbGxlZ2FsX2hhbmRsZShmZCk7CisKKwlpZ3Rfc3VidGVzdCgi aW52YWxpZC1zaWduYWwtaWxsZWdhbC1wb2ludCIpCisJCXRlc3Rfc2lnbmFsX2lsbGVnYWxfcG9p bnQoZmQpOworCisJaWd0X3N1YnRlc3QoImludmFsaWQtc2lnbmFsLW9uZS1pbGxlZ2FsLWhhbmRs ZSIpCisJCXRlc3Rfc2lnbmFsX29uZV9pbGxlZ2FsX2hhbmRsZShmZCk7CisKKwlpZ3Rfc3VidGVz dCgiaW52YWxpZC1zaWduYWwtYmFkLXBhZCIpCisJCXRlc3Rfc2lnbmFsX2JhZF9wYWQoZmQpOwor CisJaWd0X3N1YnRlc3QoImludmFsaWQtc2lnbmFsLWFycmF5IikKKwkJdGVzdF9zaWduYWxfYXJy YXkoZmQpOworCisJaWd0X3N1YnRlc3QoImludmFsaWQtdHJhbnNmZXItaWxsZWdhbC1oYW5kbGUi KQorCQl0ZXN0X3RyYW5zZmVyX2lsbGVnYWxfaGFuZGxlKGZkKTsKKworCWlndF9zdWJ0ZXN0KCJp bnZhbGlkLXRyYW5zZmVyLWlsbGVnYWwtcG9pbnQiKQorCQl0ZXN0X3RyYW5zZmVyX2lsbGVnYWxf cG9pbnQoZmQpOworCisJaWd0X3N1YnRlc3QoImludmFsaWQtdHJhbnNmZXItYmFkLXBhZCIpCisJ CXRlc3RfdHJhbnNmZXJfYmFkX3BhZChmZCk7CisKKwlmb3IgKHVuc2lnbmVkIGZsYWdzID0gMDsg ZmxhZ3MgPCBXQUlUX0ZMQUdTX01BWDsgZmxhZ3MrKykgeworCQlpbnQgZXJyOworCisJCS8qIE9u bHkgb25lIHdhaXQgbW9kZSBmb3Igc2luZ2xlLXdhaXQgdGVzdHMgKi8KKwkJaWYgKF9fYnVpbHRp bl9wb3Bjb3VudChmbGFncyAmIChXQUlUX1VOU1VCTUlUVEVEIHwKKwkJCQkJCVdBSVRfU1VCTUlU VEVEIHwKKwkJCQkJCVdBSVRfU0lHTkFMRUQpKSAhPSAxKQorCQkJY29udGludWU7CisKKwkJaWYg KChmbGFncyAmIFdBSVRfVU5TVUJNSVRURUQpICYmICEoZmxhZ3MgJiBXQUlUX0ZPUl9TVUJNSVQp KQorCQkJZXJyID0gLUVJTlZBTDsKKwkJZWxzZSBpZiAoIShmbGFncyAmIFdBSVRfU0lHTkFMRUQp ICYmICEoKGZsYWdzICYgV0FJVF9TVUJNSVRURUQpICYmIChmbGFncyAmIFdBSVRfQVZBSUxBQkxF KSkpCisJCQllcnIgPSAtRVRJTUU7CisJCWVsc2UKKwkJCWVyciA9IDA7CisKKwkJaWd0X3N1YnRl c3RfZigiJXNzaW5nbGUtd2FpdCVzJXMlcyVzJXMlcyIsCisJCQkgICAgICBlcnIgPT0gLUVJTlZB TCA/ICJpbnZhbGlkLSIgOiBlcnIgPT0gLUVUSU1FID8gImV0aW1lLSIgOiAiIiwKKwkJCSAgICAg IChmbGFncyAmIFdBSVRfQUxMKSA/ICItYWxsIiA6ICIiLAorCQkJICAgICAgKGZsYWdzICYgV0FJ VF9GT1JfU1VCTUlUKSA/ICItZm9yLXN1Ym1pdCIgOiAiIiwKKwkJCSAgICAgIChmbGFncyAmIFdB SVRfQVZBSUxBQkxFKSA/ICItYXZhaWxhYmxlIiA6ICIiLAorCQkJICAgICAgKGZsYWdzICYgV0FJ VF9VTlNVQk1JVFRFRCkgPyAiLXVuc3VibWl0dGVkIiA6ICIiLAorCQkJICAgICAgKGZsYWdzICYg V0FJVF9TVUJNSVRURUQpID8gIi1zdWJtaXR0ZWQiIDogIiIsCisJCQkgICAgICAoZmxhZ3MgJiBX QUlUX1NJR05BTEVEKSA/ICItc2lnbmFsZWQiIDogIiIpCisJCQl0ZXN0X3NpbmdsZV93YWl0KGZk LCBmbGFncywgZXJyKTsKKwl9CisKKwlpZ3Rfc3VidGVzdCgid2FpdC1kZWxheWVkLXNpZ25hbCIp CisJCXRlc3Rfd2FpdF9kZWxheWVkX3NpZ25hbChmZCwgMCk7CisKKwlpZ3Rfc3VidGVzdCgid2Fp dC1mb3Itc3VibWl0LWRlbGF5ZWQtc3VibWl0IikKKwkJdGVzdF93YWl0X2RlbGF5ZWRfc2lnbmFs KGZkLCBXQUlUX0ZPUl9TVUJNSVQpOworCisJaWd0X3N1YnRlc3QoIndhaXQtYWxsLWRlbGF5ZWQt c2lnbmFsIikKKwkJdGVzdF93YWl0X2RlbGF5ZWRfc2lnbmFsKGZkLCBXQUlUX0FMTCk7CisKKwlp Z3Rfc3VidGVzdCgid2FpdC1hbGwtZm9yLXN1Ym1pdC1kZWxheWVkLXN1Ym1pdCIpCisJCXRlc3Rf d2FpdF9kZWxheWVkX3NpZ25hbChmZCwgV0FJVF9BTEwgfCBXQUlUX0ZPUl9TVUJNSVQpOworCisJ aWd0X3N1YnRlc3QoInJlc2V0LXVuc2lnbmFsZWQiKQorCQl0ZXN0X3Jlc2V0X3Vuc2lnbmFsZWQo ZmQpOworCisJaWd0X3N1YnRlc3QoInJlc2V0LXNpZ25hbGVkIikKKwkJdGVzdF9yZXNldF9zaWdu YWxlZChmZCk7CisKKwlpZ3Rfc3VidGVzdCgicmVzZXQtbXVsdGlwbGUtc2lnbmFsZWQiKQorCQl0 ZXN0X3Jlc2V0X211bHRpcGxlX3NpZ25hbGVkKGZkKTsKKworCWlndF9zdWJ0ZXN0KCJyZXNldC1k dXJpbmctd2FpdC1mb3Itc3VibWl0IikKKwkJdGVzdF9yZXNldF9kdXJpbmdfd2FpdF9mb3Jfc3Vi bWl0KGZkKTsKKworCWlndF9zdWJ0ZXN0KCJzaWduYWwiKQorCQl0ZXN0X3NpZ25hbChmZCk7CisK Kwlmb3IgKHVuc2lnbmVkIGZsYWdzID0gMDsgZmxhZ3MgPCBXQUlUX0ZMQUdTX01BWDsgZmxhZ3Mr KykgeworCQlpbnQgZXJyOworCisJCS8qIEF0IGxlYXN0IG9uZSB3YWl0IG1vZGUgZm9yIG11bHRp LXdhaXQgdGVzdHMgKi8KKwkJaWYgKCEoZmxhZ3MgJiAoV0FJVF9VTlNVQk1JVFRFRCB8CisJCQkg ICAgICAgV0FJVF9TVUJNSVRURUQgfAorCQkJICAgICAgIFdBSVRfU0lHTkFMRUQpKSkKKwkJCWNv bnRpbnVlOworCisJCWVyciA9IDA7CisJCWlmICgoZmxhZ3MgJiBXQUlUX1VOU1VCTUlUVEVEKSAm JiAhKGZsYWdzICYgV0FJVF9GT1JfU1VCTUlUKSkgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJfSBl bHNlIGlmIChmbGFncyAmIFdBSVRfQUxMKSB7CisJCQlpZiAoZmxhZ3MgJiAoV0FJVF9VTlNVQk1J VFRFRCB8IFdBSVRfU1VCTUlUVEVEKSkKKwkJCQllcnIgPSAtRVRJTUU7CisJCQlpZiAoIShmbGFn cyAmIFdBSVRfVU5TVUJNSVRURUQpICYmIChmbGFncyAmIFdBSVRfU1VCTUlUVEVEKSAmJiAoZmxh Z3MgJiBXQUlUX0FWQUlMQUJMRSkpCisJCQkJZXJyID0gMDsKKwkJfSBlbHNlIHsKKwkJCWlmICgh KGZsYWdzICYgV0FJVF9TSUdOQUxFRCkgJiYgISgoZmxhZ3MgJiBXQUlUX1NVQk1JVFRFRCkgJiYg KGZsYWdzICYgV0FJVF9BVkFJTEFCTEUpKSkKKwkJCQllcnIgPSAtRVRJTUU7CisJCX0KKworCQlp Z3Rfc3VidGVzdF9mKCIlc211bHRpLXdhaXQlcyVzJXMlcyVzJXMiLAorCQkJICAgICAgZXJyID09 IC1FSU5WQUwgPyAiaW52YWxpZC0iIDogZXJyID09IC1FVElNRSA/ICJldGltZS0iIDogIiIsCisJ CQkgICAgICAoZmxhZ3MgJiBXQUlUX0FMTCkgPyAiLWFsbCIgOiAiIiwKKwkJCSAgICAgIChmbGFn cyAmIFdBSVRfRk9SX1NVQk1JVCkgPyAiLWZvci1zdWJtaXQiIDogIiIsCisJCQkgICAgICAoZmxh Z3MgJiBXQUlUX0FWQUlMQUJMRSkgPyAiLWF2YWlsYWJsZSIgOiAiIiwKKwkJCSAgICAgIChmbGFn cyAmIFdBSVRfVU5TVUJNSVRURUQpID8gIi11bnN1Ym1pdHRlZCIgOiAiIiwKKwkJCSAgICAgIChm bGFncyAmIFdBSVRfU1VCTUlUVEVEKSA/ICItc3VibWl0dGVkIiA6ICIiLAorCQkJICAgICAgKGZs YWdzICYgV0FJVF9TSUdOQUxFRCkgPyAiLXNpZ25hbGVkIiA6ICIiKQorCQkJdGVzdF9tdWx0aV93 YWl0KGZkLCBmbGFncywgZXJyKTsKKwl9CisJaWd0X3N1YnRlc3QoIndhaXQtYW55LXNuYXBzaG90 IikKKwkJdGVzdF93YWl0X3NuYXBzaG90KGZkLCAwKTsKKworCWlndF9zdWJ0ZXN0KCJ3YWl0LWFs bC1zbmFwc2hvdCIpCisJCXRlc3Rfd2FpdF9zbmFwc2hvdChmZCwgV0FJVF9BTEwpOworCisJaWd0 X3N1YnRlc3QoIndhaXQtZm9yLXN1Ym1pdC1zbmFwc2hvdCIpCisJCXRlc3Rfd2FpdF9zbmFwc2hv dChmZCwgV0FJVF9GT1JfU1VCTUlUKTsKKworCWlndF9zdWJ0ZXN0KCJ3YWl0LWFsbC1mb3Itc3Vi bWl0LXNuYXBzaG90IikKKwkJdGVzdF93YWl0X3NuYXBzaG90KGZkLCBXQUlUX0FMTCB8IFdBSVRf Rk9SX1NVQk1JVCk7CisKKwlpZ3Rfc3VidGVzdCgid2FpdC1hbnktY29tcGxleCIpCisJCXRlc3Rf d2FpdF9jb21wbGV4KGZkLCAwKTsKKworCWlndF9zdWJ0ZXN0KCJ3YWl0LWFsbC1jb21wbGV4IikK KwkJdGVzdF93YWl0X2NvbXBsZXgoZmQsIFdBSVRfQUxMKTsKKworCWlndF9zdWJ0ZXN0KCJ3YWl0 LWZvci1zdWJtaXQtY29tcGxleCIpCisJCXRlc3Rfd2FpdF9jb21wbGV4KGZkLCBXQUlUX0ZPUl9T VUJNSVQpOworCisJaWd0X3N1YnRlc3QoIndhaXQtYWxsLWZvci1zdWJtaXQtY29tcGxleCIpCisJ CXRlc3Rfd2FpdF9jb21wbGV4KGZkLCBXQUlUX0FMTCB8IFdBSVRfRk9SX1NVQk1JVCk7CisKKwlp Z3Rfc3VidGVzdCgid2FpdC1hbnktaW50ZXJydXB0ZWQiKQorCQl0ZXN0X3dhaXRfaW50ZXJydXB0 ZWQoZmQsIDApOworCisJaWd0X3N1YnRlc3QoIndhaXQtYWxsLWludGVycnVwdGVkIikKKwkJdGVz dF93YWl0X2ludGVycnVwdGVkKGZkLCBXQUlUX0FMTCk7Cit9Ci0tIAoyLjE3LjEKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5n IGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=