From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.0 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 67AECC433E1 for ; Mon, 3 Aug 2020 13:58:07 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 1974A206D7 for ; Mon, 3 Aug 2020 13:58:06 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1974A206D7 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=chris-wilson.co.uk Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 682A46E0FD; Mon, 3 Aug 2020 13:58:07 +0000 (UTC) Received: from fireflyinternet.com (unknown [77.68.26.236]) by gabe.freedesktop.org (Postfix) with ESMTPS id 691906E0FD; Mon, 3 Aug 2020 13:58:05 +0000 (UTC) X-Default-Received-SPF: pass (skip=forwardok (res=PASS)) x-ip-name=78.156.65.138; Received: from haswell.alporthouse.com (unverified [78.156.65.138]) by fireflyinternet.com (Firefly Internet (M1)) with ESMTP id 22018289-1500050 for multiple; Mon, 03 Aug 2020 14:57:54 +0100 From: Chris Wilson To: intel-gfx@lists.freedesktop.org Date: Mon, 3 Aug 2020 14:57:53 +0100 Message-Id: <20200803135753.58654-1-chris@chris-wilson.co.uk> X-Mailer: git-send-email 2.28.0 MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH i-g-t] i915/gem_exec_schedule: Try to spot unfairness X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: igt-dev@lists.freedesktop.org, Chris Wilson Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" QW4gaW1wb3J0YW50IHByb3BlcnR5IGZvciBtdWx0aS1jbGllbnQgc3lzdGVtcyBpcyB0aGF0IGVh Y2ggY2xpZW50IGdldHMKYSAnZmFpcicgYWxsb3RtZW50IG9mIHN5c3RlbSB0aW1lLiAoV2hlcmUg ZmFpcm5lc3MgaXMgYXQgdGhlIHdoaW0gb2YgdGhlCmNvbnRleHQgcHJvcGVydGllcywgc3VjaCBh cyBwcmlvcml0aWVzLikgVGhpcyB0ZXN0IGZvcmtzIE4gaW5kZXBlbmRlbnQKY2xpZW50cyAoYWxi ZWl0IHRoZXkgaGFwcGVuIHRvIHNoYXJlIGEgc2luZ2xlIHZtKSwgYW5kIGRvZXMgYW4gZXF1YWwK YW1vdW50IG9mIHdvcmsgaW4gY2xpZW50IGFuZCBhc3NlcnRzIHRoYXQgdGhleSB0YWtlIGFuIGVx dWFsIGFtb3VudCBvZgp0aW1lLgoKVGhvdWdoIHdlIGhhdmUgbmV2ZXIgY2xhaW1lZCB0byBoYXZl IGEgY29tcGxldGVseSBmYWlyIHNjaGVkdWxlciwgdGhhdAppcyB3aGF0IGlzIGV4cGVjdGVkLgoK U2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+CkNj OiBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgpDYzogUmFtYWxpbmdh bSBDIDxyYW1hbGluZ2FtLmNAaW50ZWwuY29tPgotLS0KIHRlc3RzL2k5MTUvZ2VtX2V4ZWNfc2No ZWR1bGUuYyB8IDgxNiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBj aGFuZ2VkLCA4MTYgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL3Rlc3RzL2k5MTUvZ2VtX2V4 ZWNfc2NoZWR1bGUuYyBiL3Rlc3RzL2k5MTUvZ2VtX2V4ZWNfc2NoZWR1bGUuYwppbmRleCA0ODhk OTM1MTEuLjdjOGVhNmQ3MCAxMDA2NDQKLS0tIGEvdGVzdHMvaTkxNS9nZW1fZXhlY19zY2hlZHVs ZS5jCisrKyBiL3Rlc3RzL2k5MTUvZ2VtX2V4ZWNfc2NoZWR1bGUuYwpAQCAtMjksNiArMjksNyBA QAogI2luY2x1ZGUgPHN5cy9wb2xsLmg+CiAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CiAjaW5jbHVk ZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KICNpbmNsdWRlIDxzeXMv c3lzY2FsbC5oPgogI2luY2x1ZGUgPHNjaGVkLmg+CiAjaW5jbHVkZSA8c2lnbmFsLmg+CkBAIC0y NTAzLDYgKzI1MDQsODAwIEBAIHN0YXRpYyB2b2lkIG1lYXN1cmVfc2VtYXBob3JlX3Bvd2VyKGlu dCBpOTE1KQogCXJhcGxfY2xvc2UoJnBrZyk7CiB9CiAKK3N0YXRpYyBpbnQgcmVhZF90aW1lc3Rh bXBfZnJlcXVlbmN5KGludCBpOTE1KQoreworCWludCB2YWx1ZSA9IDA7CisJZHJtX2k5MTVfZ2V0 cGFyYW1fdCBncCA9IHsKKwkJLnZhbHVlID0gJnZhbHVlLAorCQkucGFyYW0gPSBJOTE1X1BBUkFN X0NTX1RJTUVTVEFNUF9GUkVRVUVOQ1ksCisJfTsKKwlpb2N0bChpOTE1LCBEUk1fSU9DVExfSTkx NV9HRVRQQVJBTSwgJmdwKTsKKwlyZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyB1aW50NjRfdCBk aXY2NF91NjRfcm91bmRfdXAodWludDY0X3QgeCwgdWludDY0X3QgeSkKK3sKKwlyZXR1cm4gKHgg KyB5IC0gMSkgLyB5OworfQorCitzdGF0aWMgdWludDY0X3QgbnNfdG9fdGlja3MoaW50IGk5MTUs IHVpbnQ2NF90IG5zKQoreworCXJldHVybiBkaXY2NF91NjRfcm91bmRfdXAobnMgKiByZWFkX3Rp bWVzdGFtcF9mcmVxdWVuY3koaTkxNSksCisJCQkJICBOU0VDX1BFUl9TRUMpOworfQorCitzdGF0 aWMgdWludDY0X3QgdGlja3NfdG9fbnMoaW50IGk5MTUsIHVpbnQ2NF90IHRpY2tzKQoreworCXJl dHVybiBkaXY2NF91NjRfcm91bmRfdXAodGlja3MgKiBOU0VDX1BFUl9TRUMsCisJCQkJICByZWFk X3RpbWVzdGFtcF9mcmVxdWVuY3koaTkxNSkpOworfQorCisjZGVmaW5lIE1JX0lOU1RSKG9wY29k ZSwgZmxhZ3MpICgoKG9wY29kZSkgPDwgMjMpIHwgKGZsYWdzKSkKKworI2RlZmluZSBNSV9NQVRI KHgpICAgICAgICAgICAgICAgICAgICAgIE1JX0lOU1RSKDB4MWEsICh4KSAtIDEpCisjZGVmaW5l IE1JX01BVEhfSU5TVFIob3Bjb2RlLCBvcDEsIG9wMikgKChvcGNvZGUpIDw8IDIwIHwgKG9wMSkg PDwgMTAgfCAob3AyKSkKKy8qIE9wY29kZXMgZm9yIE1JX01BVEhfSU5TVFIgKi8KKyNkZWZpbmUg ICBNSV9NQVRIX05PT1AgICAgICAgICAgICAgICAgICBNSV9NQVRIX0lOU1RSKDB4MDAwLCAweDAs IDB4MCkKKyNkZWZpbmUgICBNSV9NQVRIX0xPQUQob3AxLCBvcDIpICAgICAgICBNSV9NQVRIX0lO U1RSKDB4MDgwLCBvcDEsIG9wMikKKyNkZWZpbmUgICBNSV9NQVRIX0xPQURJTlYob3AxLCBvcDIp ICAgICBNSV9NQVRIX0lOU1RSKDB4NDgwLCBvcDEsIG9wMikKKyNkZWZpbmUgICBNSV9NQVRIX0xP QUQwKG9wMSkgICAgICAgICAgICBNSV9NQVRIX0lOU1RSKDB4MDgxLCBvcDEpCisjZGVmaW5lICAg TUlfTUFUSF9MT0FEMShvcDEpICAgICAgICAgICAgTUlfTUFUSF9JTlNUUigweDQ4MSwgb3AxKQor I2RlZmluZSAgIE1JX01BVEhfQUREICAgICAgICAgICAgICAgICAgIE1JX01BVEhfSU5TVFIoMHgx MDAsIDB4MCwgMHgwKQorI2RlZmluZSAgIE1JX01BVEhfU1VCICAgICAgICAgICAgICAgICAgIE1J X01BVEhfSU5TVFIoMHgxMDEsIDB4MCwgMHgwKQorI2RlZmluZSAgIE1JX01BVEhfQU5EICAgICAg ICAgICAgICAgICAgIE1JX01BVEhfSU5TVFIoMHgxMDIsIDB4MCwgMHgwKQorI2RlZmluZSAgIE1J X01BVEhfT1IgICAgICAgICAgICAgICAgICAgIE1JX01BVEhfSU5TVFIoMHgxMDMsIDB4MCwgMHgw KQorI2RlZmluZSAgIE1JX01BVEhfWE9SICAgICAgICAgICAgICAgICAgIE1JX01BVEhfSU5TVFIo MHgxMDQsIDB4MCwgMHgwKQorI2RlZmluZSAgIE1JX01BVEhfU1RPUkUob3AxLCBvcDIpICAgICAg IE1JX01BVEhfSU5TVFIoMHgxODAsIG9wMSwgb3AyKQorI2RlZmluZSAgIE1JX01BVEhfU1RPUkVJ TlYob3AxLCBvcDIpICAgIE1JX01BVEhfSU5TVFIoMHg1ODAsIG9wMSwgb3AyKQorLyogUmVnaXN0 ZXJzIHVzZWQgYXMgb3BlcmFuZHMgaW4gTUlfTUFUSF9JTlNUUiAqLworI2RlZmluZSAgIE1JX01B VEhfUkVHKHgpICAgICAgICAgICAgICAgICh4KQorI2RlZmluZSAgIE1JX01BVEhfUkVHX1NSQ0Eg ICAgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgICBNSV9NQVRIX1JFR19TUkNCICAgICAgICAgICAg ICAweDIxCisjZGVmaW5lICAgTUlfTUFUSF9SRUdfQUNDVSAgICAgICAgICAgICAgMHgzMQorI2Rl ZmluZSAgIE1JX01BVEhfUkVHX1pGICAgICAgICAgICAgICAgIDB4MzIKKyNkZWZpbmUgICBNSV9N QVRIX1JFR19DRiAgICAgICAgICAgICAgICAweDMzCisKKyNkZWZpbmUgTUlfTE9BRF9SRUdJU1RF Ul9SRUcgICAgTUlfSU5TVFIoMHgyQSwgMSkKKworc3RhdGljIHZvaWQgZGVsYXkoaW50IGk5MTUs CisJCSAgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplLAorCQkgIHVpbnQz Ml90IGhhbmRsZSwKKwkJICB1aW50NjRfdCBhZGRyLAorCQkgIHVpbnQ2NF90IG5zKQoreworCWNv bnN0IGludCB1c2VfNjRiID0gaW50ZWxfZ2VuKGludGVsX2dldF9kcm1fZGV2aWQoaTkxNSkpID49 IDg7CisJY29uc3QgdWludDMyX3QgYmFzZSA9IGdlbV9lbmdpbmVfbW1pb19iYXNlKGk5MTUsIGUt Pm5hbWUpOworI2RlZmluZSBDU19HUFIoeCkgKGJhc2UgKyAweDYwMCArIDggKiAoeCkpCisjZGVm aW5lIFJVTlRJTUUgKGJhc2UgKyAweDNhOCkKKwllbnVtIHsgU1RBUlRfVFMsIE5PV19UUyB9Owor CXVpbnQzMl90ICptYXAsICpjcywgKmptcDsKKworCWlndF9yZXF1aXJlKGJhc2UpOworCisJLyog TG9vcCB1bnRpbCBDVFhfVElNRVNUQU1QIC0gaW5pdGlhbCA+IEBucyAqLworCisJY3MgPSBtYXAg PSBnZW1fbW1hcF9fZGV2aWNlX2NvaGVyZW50KGk5MTUsIGhhbmRsZSwgMCwgNDA5NiwgUFJPVF9X UklURSk7CisKKwkqY3MrKyA9IE1JX0xPQURfUkVHSVNURVJfSU1NOworCSpjcysrID0gQ1NfR1BS KFNUQVJUX1RTKSArIDQ7CisJKmNzKysgPSAwOworCSpjcysrID0gTUlfTE9BRF9SRUdJU1RFUl9S RUc7CisJKmNzKysgPSBSVU5USU1FOworCSpjcysrID0gQ1NfR1BSKFNUQVJUX1RTKTsKKworCXdo aWxlIChvZmZzZXRfaW5fcGFnZShjcykgJiA2MykKKwkJKmNzKysgPSAwOworCWptcCA9IGNzOwor CisJKmNzKysgPSAweDUgPDwgMjM7IC8qIE1JX0FSQl9DSEVDSyAqLworCisJKmNzKysgPSBNSV9M T0FEX1JFR0lTVEVSX0lNTTsKKwkqY3MrKyA9IENTX0dQUihOT1dfVFMpICsgNDsKKwkqY3MrKyA9 IDA7CisJKmNzKysgPSBNSV9MT0FEX1JFR0lTVEVSX1JFRzsKKwkqY3MrKyA9IFJVTlRJTUU7CisJ KmNzKysgPSBDU19HUFIoTk9XX1RTKTsKKworCS8qIGRlbHRhID0gbm93IC0gc3RhcnQ7IGludmVy dGVkIHRvIG1hdGNoIENPTkRfQkJFICovCisJKmNzKysgPSBNSV9NQVRIKDQpOworCSpjcysrID0g TUlfTUFUSF9MT0FEKE1JX01BVEhfUkVHX1NSQ0EsIE1JX01BVEhfUkVHKE5PV19UUykpOworCSpj cysrID0gTUlfTUFUSF9MT0FEKE1JX01BVEhfUkVHX1NSQ0IsIE1JX01BVEhfUkVHKFNUQVJUX1RT KSk7CisJKmNzKysgPSBNSV9NQVRIX1NVQjsKKwkqY3MrKyA9IE1JX01BVEhfU1RPUkVJTlYoTUlf TUFUSF9SRUcoTk9XX1RTKSwgTUlfTUFUSF9SRUdfQUNDVSk7CisKKwkvKiBTYXZlIGRlbHRhIGZv ciByZWFkaW5nIGJ5IENPTkRfQkJFICovCisJKmNzKysgPSAweDI0IDw8IDIzIHwgKDEgKyB1c2Vf NjRiKTsgLyogU1JNICovCisJKmNzKysgPSBDU19HUFIoTk9XX1RTKTsKKwkqY3MrKyA9IGFkZHIg KyA0MDAwOworCSpjcysrID0gYWRkciA+PiAzMjsKKworCS8qIERlbGF5IGJldHdlZW4gU1JNIGFu ZCBDT05EX0JCRSB0byBwb3N0IHRoZSB3cml0ZXMgKi8KKwlmb3IgKGludCBuID0gMDsgbiA8IDg7 IG4rKykgeworCQkqY3MrKyA9IE1JX1NUT1JFX0RXT1JEX0lNTTsKKwkJaWYgKHVzZV82NGIpIHsK KwkJCSpjcysrID0gYWRkciArIDQwNjQ7CisJCQkqY3MrKyA9IGFkZHIgPj4gMzI7CisJCX0gZWxz ZSB7CisJCQkqY3MrKyA9IDA7CisJCQkqY3MrKyA9IGFkZHIgKyA0MDY0OworCQl9CisJCSpjcysr ID0gMDsKKwl9CisKKwkvKiBCcmVhayBpZiBkZWx0YSA+IG5zICovCisJKmNzKysgPSBNSV9DT05E X0JBVENIX0JVRkZFUl9FTkQgfCBNSV9ET19DT01QQVJFIHwgKDEgKyB1c2VfNjRiKTsKKwkqY3Mr KyA9IH5uc190b190aWNrcyhpOTE1LCBucyk7CisJKmNzKysgPSBhZGRyICsgNDAwMDsKKwkqY3Mr KyA9IGFkZHIgPj4gMzI7CisKKwkvKiBPdGhlcndpc2UgYmFjayB0byByZWNhbGN1bGF0aW5nIGRl bHRhICovCisJKmNzKysgPSBNSV9CQVRDSF9CVUZGRVJfU1RBUlQgfCAxIDw8IDggfCB1c2VfNjRi OworCSpjcysrID0gYWRkciArIG9mZnNldF9pbl9wYWdlKGptcCk7CisJKmNzKysgPSBhZGRyID4+ IDMyOworCisJbXVubWFwKG1hcCwgNDA5Nik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2k5MTVf Z2VtX2V4ZWNfb2JqZWN0MgorZGVsYXlfY3JlYXRlKGludCBpOTE1LCB1aW50MzJfdCBjdHgsCisJ ICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUsCisJICAgICB1aW50 NjRfdCB0YXJnZXRfbnMpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2Jq ID0geworCQkuaGFuZGxlID0gYmF0Y2hfY3JlYXRlKGk5MTUpLAorCQkuZmxhZ3MgPSBFWEVDX09C SkVDVF9TVVBQT1JUU180OEJfQUREUkVTUywKKwl9OworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhl Y2J1ZmZlcjIgZXhlY2J1ZiA9IHsKKwkJLmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2ludGVyKCZv YmopLAorCQkuYnVmZmVyX2NvdW50ID0gMSwKKwkJLnJzdmQxID0gY3R4LAorCQkuZmxhZ3MgPSBl LT5mbGFncywKKwl9OworCisJb2JqLm9mZnNldCA9IG9iai5oYW5kbGUgPDwgMTI7CisJZ2VtX2V4 ZWNidWYoaTkxNSwgJmV4ZWNidWYpOworCWdlbV9zeW5jKGk5MTUsIG9iai5oYW5kbGUpOworCisJ ZGVsYXkoaTkxNSwgZSwgb2JqLmhhbmRsZSwgb2JqLm9mZnNldCwgdGFyZ2V0X25zKTsKKworCW9i ai5mbGFncyB8PSBFWEVDX09CSkVDVF9QSU5ORUQ7CisJcmV0dXJuIG9iajsKK30KKworc3RhdGlj IHZvaWQgdHNsb2coaW50IGk5MTUsCisJCSAgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9l bmdpbmUyICplLAorCQkgIHVpbnQzMl90IGhhbmRsZSwKKwkJICB1aW50NjRfdCBhZGRyKQorewor CWNvbnN0IGludCB1c2VfNjRiID0gaW50ZWxfZ2VuKGludGVsX2dldF9kcm1fZGV2aWQoaTkxNSkp ID49IDg7CisJY29uc3QgdWludDMyX3QgYmFzZSA9IGdlbV9lbmdpbmVfbW1pb19iYXNlKGk5MTUs IGUtPm5hbWUpOworI2RlZmluZSBDU19HUFIoeCkgKGJhc2UgKyAweDYwMCArIDggKiAoeCkpCisj ZGVmaW5lIENTX1RJTUVTVEFNUCAoYmFzZSArIDB4MzU4KQorCWVudW0geyBJTkMsIE1BU0ssIEFE RFIgfTsKKwl1aW50MzJfdCAqdGltZXN0YW1wX2xvLCAqYWRkcl9sbzsKKwl1aW50MzJfdCAqbWFw LCAqY3M7CisKKwlpZ3RfcmVxdWlyZShiYXNlKTsKKworCW1hcCA9IGdlbV9tbWFwX19kZXZpY2Vf Y29oZXJlbnQoaTkxNSwgaGFuZGxlLCAwLCA0MDk2LCBQUk9UX1dSSVRFKTsKKwljcyA9IG1hcCAr IDUxMjsKKworCS8qIFJlY29yZCB0aGUgY3VycmVudCBDU19USU1FU1RBTVAgaW50byBhIGpvdXJu YWwgW2EgNTEyIHNsb3QgcmluZ10uICovCisJKmNzKysgPSAweDI0IDw8IDIzIHwgKDEgKyB1c2Vf NjRiKTsgLyogU1JNICovCisJKmNzKysgPSBDU19USU1FU1RBTVA7CisJdGltZXN0YW1wX2xvID0g Y3M7CisJKmNzKysgPSBhZGRyOworCSpjcysrID0gYWRkciA+PiAzMjsKKworCS8qIExvYWQgdGhl IGFkZHJlc3MgKyBpbmMgJiBtYXNrIHZhcmlhYmxlcyAqLworCSpjcysrID0gTUlfTE9BRF9SRUdJ U1RFUl9JTU07CisJKmNzKysgPSBDU19HUFIoQUREUik7CisJYWRkcl9sbyA9IGNzOworCSpjcysr ID0gYWRkcjsKKwkqY3MrKyA9IE1JX0xPQURfUkVHSVNURVJfSU1NOworCSpjcysrID0gQ1NfR1BS KEFERFIpICsgNDsKKwkqY3MrKyA9IGFkZHIgPj4gMzI7CisKKwkqY3MrKyA9IE1JX0xPQURfUkVH SVNURVJfSU1NOworCSpjcysrID0gQ1NfR1BSKElOQyk7CisJKmNzKysgPSA0OworCSpjcysrID0g TUlfTE9BRF9SRUdJU1RFUl9JTU07CisJKmNzKysgPSBDU19HUFIoSU5DKSArIDQ7CisJKmNzKysg PSAwOworCisJKmNzKysgPSBNSV9MT0FEX1JFR0lTVEVSX0lNTTsKKwkqY3MrKyA9IENTX0dQUihN QVNLKTsKKwkqY3MrKyA9IDB4ZmZmZmY3ZmY7CisJKmNzKysgPSBNSV9MT0FEX1JFR0lTVEVSX0lN TTsKKwkqY3MrKyA9IENTX0dQUihNQVNLKSArIDQ7CisJKmNzKysgPSAweGZmZmZmZmZmOworCisJ LyogSW5jcmVtZW50IHRoZSBbcmluZ10gYWRkcmVzcyBmb3Igc2F2aW5nIENTX1RJTUVTVEFNUCAq LworCSpjcysrID0gTUlfTUFUSCg4KTsKKwkqY3MrKyA9IE1JX01BVEhfTE9BRChNSV9NQVRIX1JF R19TUkNBLCBNSV9NQVRIX1JFRyhJTkMpKTsKKwkqY3MrKyA9IE1JX01BVEhfTE9BRChNSV9NQVRI X1JFR19TUkNCLCBNSV9NQVRIX1JFRyhBRERSKSk7CisJKmNzKysgPSBNSV9NQVRIX0FERDsKKwkq Y3MrKyA9IE1JX01BVEhfU1RPUkUoTUlfTUFUSF9SRUcoQUREUiksIE1JX01BVEhfUkVHX0FDQ1Up OworCSpjcysrID0gTUlfTUFUSF9MT0FEKE1JX01BVEhfUkVHX1NSQ0EsIE1JX01BVEhfUkVHKEFE RFIpKTsKKwkqY3MrKyA9IE1JX01BVEhfTE9BRChNSV9NQVRIX1JFR19TUkNCLCBNSV9NQVRIX1JF RyhNQVNLKSk7CisJKmNzKysgPSBNSV9NQVRIX0FORDsKKwkqY3MrKyA9IE1JX01BVEhfU1RPUkUo TUlfTUFUSF9SRUcoQUREUiksIE1JX01BVEhfUkVHX0FDQ1UpOworCisJLyogUmV3cml0ZSB0aGUg YmF0Y2ggYnVmZmVyIGZvciB0aGUgbmV4dCBleGVjdXRpb24gKi8KKwkqY3MrKyA9IDB4MjQgPDwg MjMgfCAoMSArIHVzZV82NGIpOyAvKiBTUk0gKi8KKwkqY3MrKyA9IENTX0dQUihBRERSKTsKKwkq Y3MrKyA9IGFkZHIgKyBvZmZzZXRfaW5fcGFnZSh0aW1lc3RhbXBfbG8pOworCSpjcysrID0gYWRk ciA+PiAzMjsKKwkqY3MrKyA9IDB4MjQgPDwgMjMgfCAoMSArIHVzZV82NGIpOyAvKiBTUk0gKi8K KwkqY3MrKyA9IENTX0dQUihBRERSKTsKKwkqY3MrKyA9IGFkZHIgKyBvZmZzZXRfaW5fcGFnZShh ZGRyX2xvKTsKKwkqY3MrKyA9IGFkZHIgPj4gMzI7CisKKwkqY3MrKyA9IE1JX0JBVENIX0JVRkZF Ul9FTkQ7CisKKwltdW5tYXAobWFwLCA0MDk2KTsKK30KKworc3RhdGljIHN0cnVjdCBkcm1faTkx NV9nZW1fZXhlY19vYmplY3QyCit0c2xvZ19jcmVhdGUoaW50IGk5MTUsIHVpbnQzMl90IGN0eCwg Y29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplKQoreworCXN0cnVjdCBkcm1f aTkxNV9nZW1fZXhlY19vYmplY3QyIG9iaiA9IHsKKwkJLmhhbmRsZSA9IGJhdGNoX2NyZWF0ZShp OTE1KSwKKwkJLmZsYWdzID0gRVhFQ19PQkpFQ1RfU1VQUE9SVFNfNDhCX0FERFJFU1MsCisJfTsK KwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWYgPSB7CisJCS5idWZmZXJz X3B0ciA9IHRvX3VzZXJfcG9pbnRlcigmb2JqKSwKKwkJLmJ1ZmZlcl9jb3VudCA9IDEsCisJCS5y c3ZkMSA9IGN0eCwKKwkJLmZsYWdzID0gZS0+ZmxhZ3MsCisJfTsKKworCW9iai5vZmZzZXQgPSBv YmouaGFuZGxlIDw8IDEyOworCWdlbV9leGVjYnVmKGk5MTUsICZleGVjYnVmKTsKKwlnZW1fc3lu YyhpOTE1LCBvYmouaGFuZGxlKTsKKworCXRzbG9nKGk5MTUsIGUsIG9iai5oYW5kbGUsIG9iai5v ZmZzZXQpOworCisJb2JqLmZsYWdzIHw9IEVYRUNfT0JKRUNUX1BJTk5FRDsKKwlyZXR1cm4gb2Jq OworfQorCitzdGF0aWMgaW50IGNtcF91MzIoY29uc3Qgdm9pZCAqQSwgY29uc3Qgdm9pZCAqQikK K3sKKwljb25zdCB1aW50MzJfdCAqYSA9IEEsICpiID0gQjsKKworCWlmICgqYSA8ICpiKQorCQly ZXR1cm4gLTE7CisJZWxzZSBpZiAoKmEgPiAqYikKKwkJcmV0dXJuIDE7CisJZWxzZQorCQlyZXR1 cm4gMDsKK30KKworc3RhdGljIGJvb2wgaGFzX2N0eF90aW1lc3RhbXAoaW50IGk5MTUsIGNvbnN0 IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSkKK3sKKwljb25zdCBpbnQgZ2VuID0g aW50ZWxfZ2VuKGludGVsX2dldF9kcm1fZGV2aWQoaTkxNSkpOworCisJaWYgKGdlbiA9PSA4ICYm IGUtPmNsYXNzID09IEk5MTVfRU5HSU5FX0NMQVNTX1ZJREVPKQorCQlyZXR1cm4gZmFsc2U7IC8q IGxvb2tzIGZ1YmFyICovCisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHN0cnVjdCBpbnRl bF9leGVjdXRpb25fZW5naW5lMgorcGlja19yYW5kb21fZW5naW5lKGludCBpOTE1LCBjb25zdCBz dHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKm5vdCkKK3sKKwljb25zdCBzdHJ1Y3QgaW50 ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmU7CisJdW5zaWduZWQgaW50IGNvdW50ID0gMDsKKworCV9f Zm9yX2VhY2hfcGh5c2ljYWxfZW5naW5lKGk5MTUsIGUpIHsKKwkJaWYgKGUtPmZsYWdzID09IG5v dC0+ZmxhZ3MpCisJCQljb250aW51ZTsKKwkJaWYgKCFnZW1fY2xhc3NfaGFzX211dGFibGVfc3Vi bWlzc2lvbihpOTE1LCBlLT5jbGFzcykpCisJCQljb250aW51ZTsKKwkJY291bnQrKzsKKwl9CisJ aWYgKCFjb3VudCkKKwkJcmV0dXJuICpub3Q7CisKKwljb3VudCA9IHJhbmQoKSAlIGNvdW50Owor CV9fZm9yX2VhY2hfcGh5c2ljYWxfZW5naW5lKGk5MTUsIGUpIHsKKwkJaWYgKGUtPmZsYWdzID09 IG5vdC0+ZmxhZ3MpCisJCQljb250aW51ZTsKKwkJaWYgKCFnZW1fY2xhc3NfaGFzX211dGFibGVf c3VibWlzc2lvbihpOTE1LCBlLT5jbGFzcykpCisJCQljb250aW51ZTsKKwkJaWYgKCFjb3VudC0t KQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuICplOworfQorCitzdGF0aWMgdm9pZCBmYWlyX2No aWxkKGludCBpOTE1LCB1aW50MzJfdCBjdHgsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxf ZXhlY3V0aW9uX2VuZ2luZTIgKmUsCisJCSAgICAgICB1aW50NjRfdCBmcmFtZV9ucywKKwkJICAg ICAgIGludCB0aW1lbGluZSwKKwkJICAgICAgIHVpbnQzMl90IGNvbW1vbiwKKwkJICAgICAgIHVu c2lnbmVkIGludCBmbGFncywKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgKmN0bCwKKwkJICAgICAg IHVuc2lnbmVkIGxvbmcgKm91dCkKKyNkZWZpbmUgRl9TWU5DCQkoMSA8PCAwKQorI2RlZmluZSBG X1BBQ0UJCSgxIDw8IDEpCisjZGVmaW5lIEZfRkxPVwkJKDEgPDwgMikKKyNkZWZpbmUgRl9IQUxG CQkoMSA8PCAzKQorI2RlZmluZSBGX1NPTE8JCSgxIDw8IDQpCisjZGVmaW5lIEZfU1BBUkUJCSgx IDw8IDUpCisjZGVmaW5lIEZfTkVYVAkJKDEgPDwgNikKKyNkZWZpbmUgRl9WSVAJCSgxIDw8IDcp CisjZGVmaW5lIEZfUlJVTAkJKDEgPDwgOCkKKyNkZWZpbmUgRl9TSEFSRQkJKDEgPDwgOSkKKyNk ZWZpbmUgRl9QSU5HCQkoMSA8PCAxMCkKKyNkZWZpbmUgRl9USFJPVFRMRQkoMSA8PCAxMSkKKyNk ZWZpbmUgRl9JU09MQVRFCSgxIDw8IDEyKQoreworCWNvbnN0IGludCBiYXRjaGVzX3Blcl9mcmFt ZSA9IGZsYWdzICYgRl9TT0xPID8gMSA6IDM7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29i amVjdDIgb2JqWzRdID0geworCQl7fSwKKwkJeworCQkJLmhhbmRsZSA9IGNvbW1vbiA/OiBnZW1f Y3JlYXRlKGk5MTUsIDQwOTYpLAorCQl9LAorCQlkZWxheV9jcmVhdGUoaTkxNSwgY3R4LCBlLCBm cmFtZV9ucyAvIGJhdGNoZXNfcGVyX2ZyYW1lKSwKKwkJZGVsYXlfY3JlYXRlKGk5MTUsIGN0eCwg ZSwgZnJhbWVfbnMgLyBiYXRjaGVzX3Blcl9mcmFtZSksCisJfTsKKwlzdHJ1Y3QgaW50ZWxfZXhl Y3V0aW9uX2VuZ2luZTIgcGluZyA9ICplOworCWludCBwX2ZlbmNlID0gLTEsIG5fZmVuY2UgPSAt MTsKKwl1bnNpZ25lZCBsb25nIGNvdW50ID0gMDsKKwlpbnQgbjsKKworCXNyYW5kb20oZ2V0cGlk KCkpOworCWlmIChmbGFncyAmIEZfUElORykKKwkJcGluZyA9IHBpY2tfcmFuZG9tX2VuZ2luZShp OTE1LCBlKTsKKwlvYmpbMF0gPSB0c2xvZ19jcmVhdGUoaTkxNSwgY3R4LCAmcGluZyk7CisKKwl3 aGlsZSAoIVJFQURfT05DRSgqY3RsKSkgeworCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZm ZXIyIGV4ZWNidWYgPSB7CisJCQkuYnVmZmVyc19wdHIgPSB0b191c2VyX3BvaW50ZXIob2JqKSwK KwkJCS5idWZmZXJfY291bnQgPSA0LAorCQkJLnJzdmQxID0gY3R4LAorCQkJLnJzdmQyID0gLTEs CisJCQkuZmxhZ3MgPSBlLT5mbGFncywKKwkJfTsKKworCQlpZiAoZmxhZ3MgJiBGX0ZMT1cpIHsK KwkJCXVuc2lnbmVkIGludCBzZXE7CisKKwkJCXNlcSA9IGNvdW50OworCQkJaWYgKGZsYWdzICYg Rl9ORVhUKQorCQkJCXNlcSsrOworCisJCQlleGVjYnVmLnJzdmQyID0KKwkJCQlzd19zeW5jX3Rp bWVsaW5lX2NyZWF0ZV9mZW5jZSh0aW1lbGluZSwgc2VxKTsKKwkJCWV4ZWNidWYuZmxhZ3MgfD0g STkxNV9FWEVDX0ZFTkNFX0lOOworCQl9CisKKwkJZXhlY2J1Zi5mbGFncyB8PSBJOTE1X0VYRUNf RkVOQ0VfT1VUOworCQlnZW1fZXhlY2J1Zl93cihpOTE1LCAmZXhlY2J1Zik7CisJCW5fZmVuY2Ug PSBleGVjYnVmLnJzdmQyID4+IDMyOworCQlleGVjYnVmLmZsYWdzICY9IH4oSTkxNV9FWEVDX0ZF TkNFX09VVCB8IEk5MTVfRVhFQ19GRU5DRV9JTik7CisJCWZvciAobiA9IDE7IG4gPCBiYXRjaGVz X3Blcl9mcmFtZTsgbisrKQorCQkJZ2VtX2V4ZWNidWYoaTkxNSwgJmV4ZWNidWYpOworCQljbG9z ZShleGVjYnVmLnJzdmQyKTsKKworCQlleGVjYnVmLmJ1ZmZlcl9jb3VudCA9IDE7CisJCWV4ZWNi dWYuYmF0Y2hfc3RhcnRfb2Zmc2V0ID0gMjA0ODsKKwkJZXhlY2J1Zi5mbGFncyA9IHBpbmcuZmxh Z3MgfCBJOTE1X0VYRUNfRkVOQ0VfSU47CisJCWV4ZWNidWYucnN2ZDIgPSBuX2ZlbmNlOworCQln ZW1fZXhlY2J1ZihpOTE1LCAmZXhlY2J1Zik7CisKKwkJaWYgKGZsYWdzICYgRl9QQUNFICYmIHBf ZmVuY2UgIT0gLTEpIHsKKwkJCXN0cnVjdCBwb2xsZmQgcGZkID0geworCQkJCS5mZCA9IHBfZmVu Y2UsCisJCQkJLmV2ZW50cyA9IFBPTExJTiwKKwkJCX07CisJCQlwb2xsKCZwZmQsIDEsIC0xKTsK KwkJfQorCQljbG9zZShwX2ZlbmNlKTsKKworCQlpZiAoZmxhZ3MgJiBGX1NZTkMpIHsKKwkJCXN0 cnVjdCBwb2xsZmQgcGZkID0geworCQkJCS5mZCA9IG5fZmVuY2UsCisJCQkJLmV2ZW50cyA9IFBP TExJTiwKKwkJCX07CisJCQlwb2xsKCZwZmQsIDEsIC0xKTsKKwkJfQorCisJCWlmIChmbGFncyAm IEZfVEhST1RUTEUpCisJCQlpZ3RfaW9jdGwoaTkxNSwgRFJNX0lPQ1RMX0k5MTVfR0VNX1RIUk9U VExFLCAwKTsKKworCQlpZ3Rfc3dhcChvYmpbMl0sIG9ialszXSk7CisJCWlndF9zd2FwKHBfZmVu Y2UsIG5fZmVuY2UpOworCQljb3VudCsrOworCX0KKwljbG9zZShwX2ZlbmNlKTsKKworCWdlbV9j bG9zZShpOTE1LCBvYmpbM10uaGFuZGxlKTsKKwlnZW1fY2xvc2UoaTkxNSwgb2JqWzJdLmhhbmRs ZSk7CisJaWYgKG9ialsxXS5oYW5kbGUgIT0gY29tbW9uKQorCQlnZW1fY2xvc2UoaTkxNSwgb2Jq WzFdLmhhbmRsZSk7CisKKwlnZW1fc3luYyhpOTE1LCBvYmpbMF0uaGFuZGxlKTsKKwlpZiAob3V0 KSB7CisJCXVpbnQzMl90ICptYXA7CisKKwkJbWFwID0gZ2VtX21tYXBfX2RldmljZV9jb2hlcmVu dChpOTE1LCBvYmpbMF0uaGFuZGxlLAorCQkJCQkJMCwgNDA5NiwgUFJPVF9XUklURSk7CisJCWZv ciAobiA9IDE7IG4gPCBtaW4oY291bnQsIDUxMik7IG4rKykgeworCQkJaWd0X2Fzc2VydChtYXBb bl0pOworCQkJbWFwW24gLSAxXSA9IG1hcFtuXSAtIG1hcFtuIC0gMV07CisJCX0KKwkJcXNvcnQo bWFwLCAtLW4sIHNpemVvZigqbWFwKSwgY21wX3UzMik7CisJCSpvdXQgPSB0aWNrc190b19ucyhp OTE1LCBtYXBbbiAvIDJdKTsKKwkJbXVubWFwKG1hcCwgNDA5Nik7CisJfQorCWdlbV9jbG9zZShp OTE1LCBvYmpbMF0uaGFuZGxlKTsKK30KKworc3RhdGljIGludCBjbXBfdWwoY29uc3Qgdm9pZCAq QSwgY29uc3Qgdm9pZCAqQikKK3sKKwljb25zdCB1bnNpZ25lZCBsb25nICphID0gQSwgKmIgPSBC OworCisJaWYgKCphIDwgKmIpCisJCXJldHVybiAtMTsKKwllbHNlIGlmICgqYSA+ICpiKQorCQly ZXR1cm4gMTsKKwllbHNlCisJCXJldHVybiAwOworfQorCitzdGF0aWMgdWludDY0X3QgZF9jcHVf dGltZShjb25zdCBzdHJ1Y3QgcnVzYWdlICphLCBjb25zdCBzdHJ1Y3QgcnVzYWdlICpiKQorewor CXVpbnQ2NF90IGNwdV90aW1lID0gMDsKKworCWNwdV90aW1lICs9IChhLT5ydV91dGltZS50dl9z ZWMgLSBiLT5ydV91dGltZS50dl9zZWMpICogTlNFQ19QRVJfU0VDOworCWNwdV90aW1lICs9IChh LT5ydV91dGltZS50dl91c2VjIC0gYi0+cnVfdXRpbWUudHZfdXNlYykgKiAxMDAwOworCisJY3B1 X3RpbWUgKz0gKGEtPnJ1X3N0aW1lLnR2X3NlYyAtIGItPnJ1X3N0aW1lLnR2X3NlYykgKiBOU0VD X1BFUl9TRUM7CisJY3B1X3RpbWUgKz0gKGEtPnJ1X3N0aW1lLnR2X3VzZWMgLSBiLT5ydV9zdGlt ZS50dl91c2VjKSAqIDEwMDA7CisKKwlyZXR1cm4gY3B1X3RpbWU7Cit9CisKK3N0YXRpYyB2b2lk IHRpbWVsaW5lX2FkdmFuY2UoaW50IHRpbWVsaW5lLCBpbnQgZGVsYXlfbnMpCit7CisJc3RydWN0 IHRpbWVzcGVjIHR2ID0geyAudHZfbnNlYyA9IGRlbGF5X25zIH07CisJbmFub3NsZWVwKCZ0diwg TlVMTCk7CisJc3dfc3luY190aW1lbGluZV9pbmModGltZWxpbmUsIDEpOworfQorCitzdGF0aWMg dm9pZCBmYWlybmVzcyhpbnQgaTkxNSwKKwkJICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0 aW9uX2VuZ2luZTIgKmUsCisJCSAgICAgaW50IHRpbWVvdXQsIHVuc2lnbmVkIGludCBmbGFncykK K3sKKwljb25zdCBpbnQgZnJhbWVfbnMgPSAxNjY2NiAqIDEwMDA7CisJY29uc3QgaW50IGZlbmNl X25zID0gZmxhZ3MgJiBGX0hBTEYgPyAyICogZnJhbWVfbnMgOiBmcmFtZV9uczsKKwl1bnNpZ25l ZCBsb25nICpyZXN1bHQ7CisJdWludDMyX3QgY29tbW9uID0gMDsKKworCWlndF9yZXF1aXJlKGhh c19jdHhfdGltZXN0YW1wKGk5MTUsIGUpKTsKKwlpZ3RfcmVxdWlyZShnZW1fY2xhc3NfaGFzX211 dGFibGVfc3VibWlzc2lvbihpOTE1LCBlLT5jbGFzcykpOworCisJaWYgKGZsYWdzICYgRl9TSEFS RSkKKwkJY29tbW9uID0gZ2VtX2NyZWF0ZShpOTE1LCA0MDk1KTsKKworCXJlc3VsdCA9IG1tYXAo TlVMTCwgNDA5NiwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCB8IE1BUF9BTk9OLCAtMSwgMCk7CisK Kwlmb3IgKGludCBuID0gMjsgbiA8PSA2NDsgbiA8PD0gMSkgeyAvKiAzMiA9PSA1MDB1cyBwZXIg Y2xpZW50ICovCisJCWludCB0aW1lbGluZSA9IHN3X3N5bmNfdGltZWxpbmVfY3JlYXRlKCk7CisJ CWludCBuZmVuY2VzID0gdGltZW91dCAqIE5TRUNfUEVSX1NFQyAvIGZlbmNlX25zICsgMTsKKwkJ Y29uc3QgaW50IG5jaGlsZCA9IG4gLSAxOyAvKiBvZGQgZm9yIGVhc3kgbWVkaWFucyAqLworCQlj b25zdCBpbnQgY2hpbGRfbnMgPSBmcmFtZV9ucyAvIChuY2hpbGQgKyAhIShmbGFncyAmIEZfU1BB UkUpKTsKKwkJY29uc3QgaW50IGxvID0gbmNoaWxkIC8gNDsKKwkJY29uc3QgaW50IGhpID0gKDMg KiBuY2hpbGQgKyAzKSAvIDQgLSAxOworCQlzdHJ1Y3QgcnVzYWdlIG9sZF91c2FnZSwgdXNhZ2U7 CisJCXVpbnQ2NF90IGNwdV90aW1lLCBkX3RpbWU7CisJCXVuc2lnbmVkIGxvbmcgdmlwID0gLTE7 CisJCXN0cnVjdCB0aW1lc3BlYyB0djsKKwkJc3RydWN0IGlndF9tZWFuIG07CisKKwkJaWYgKGZs YWdzICYgRl9QSU5HKSB7CisJCQlzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKnBpbmc7 CisKKwkJCV9fZm9yX2VhY2hfcGh5c2ljYWxfZW5naW5lKGk5MTUsIHBpbmcpIHsKKwkJCQlpZiAo cGluZy0+ZmxhZ3MgPT0gZS0+ZmxhZ3MpCisJCQkJCWNvbnRpbnVlOworCisJCQkJaWd0X2Zvcmso Y2hpbGQsIDEpIHsKKwkJCQkJdWludDMyX3QgY3R4ID0gZ2VtX2NvbnRleHRfY2xvbmVfd2l0aF9l bmdpbmVzKGk5MTUsIDApOworCisJCQkJCWZhaXJfY2hpbGQoaTkxNSwgY3R4LCBwaW5nLAorCQkJ CQkJICAgY2hpbGRfbnMgLyA4LAorCQkJCQkJICAgLTEsIGNvbW1vbiwKKwkJCQkJCSAgIEZfU09M TyB8IEZfUEFDRSB8IEZfU0hBUkUsCisJCQkJCQkgICAmcmVzdWx0W25jaGlsZF0sCisJCQkJCQkg ICBOVUxMKTsKKworCQkJCQlnZW1fY29udGV4dF9kZXN0cm95KGk5MTUsIGN0eCk7CisJCQkJfQor CQkJfQorCQl9CisKKwkJbWVtc2V0KHJlc3VsdCwgMCwgKG5jaGlsZCArIDEpICogc2l6ZW9mKHJl c3VsdFswXSkpOworCQlnZXRydXNhZ2UoUlVTQUdFX0NISUxEUkVOLCAmb2xkX3VzYWdlKTsKKwkJ aWd0X25zZWNfZWxhcHNlZChtZW1zZXQoJnR2LCAwLCBzaXplb2YodHYpKSk7CisJCWlndF9mb3Jr KGNoaWxkLCBuY2hpbGQpIHsKKwkJCXVpbnQzMl90IGN0eDsKKworCQkJaWYgKGZsYWdzICYgRl9J U09MQVRFKSB7CisJCQkJaW50IGNsb25lLCBkbWFidWYgPSAtMTsKKworCQkJCWlmIChjb21tb24p CisJCQkJCWRtYWJ1ZiA9IHByaW1lX2hhbmRsZV90b19mZChpOTE1LCBjb21tb24pOworCisJCQkJ Y2xvbmUgPSBnZW1fcmVvcGVuX2RyaXZlcihpOTE1KTsKKwkJCQlnZW1fY29udGV4dF9jb3B5X2Vu Z2luZXMoaTkxNSwgMCwgY2xvbmUsIDApOworCQkJCWk5MTUgPSBjbG9uZTsKKworCQkJCWlmIChk bWFidWYgIT0gLTEpCisJCQkJCWNvbW1vbiA9IHByaW1lX2ZkX3RvX2hhbmRsZShpOTE1LCBkbWFi dWYpOworCQkJfQorCisJCQljdHggPSBnZW1fY29udGV4dF9jbG9uZV93aXRoX2VuZ2luZXMoaTkx NSwgMCk7CisKKwkJCWlmIChmbGFncyAmIEZfVklQICYmIGNoaWxkID09IDApIHsKKwkJCQlnZW1f Y29udGV4dF9zZXRfcHJpb3JpdHkoaTkxNSwgY3R4LCBNQVhfUFJJTyk7CisJCQkJZmxhZ3MgfD0g Rl9GTE9XOworCQkJfQorCQkJaWYgKGZsYWdzICYgRl9SUlVMICYmIGNoaWxkID09IDApCisJCQkJ ZmxhZ3MgfD0gRl9TT0xPIHwgRl9GTE9XIHwgRl9TWU5DOworCisJCQlmYWlyX2NoaWxkKGk5MTUs IGN0eCwgZSwgY2hpbGRfbnMsCisJCQkJICAgdGltZWxpbmUsIGNvbW1vbiwgZmxhZ3MsCisJCQkJ ICAgJnJlc3VsdFtuY2hpbGRdLAorCQkJCSAgICZyZXN1bHRbY2hpbGRdKTsKKworCQkJZ2VtX2Nv bnRleHRfZGVzdHJveShpOTE1LCBjdHgpOworCQl9CisKKwkJd2hpbGUgKG5mZW5jZXMtLSkKKwkJ CXRpbWVsaW5lX2FkdmFuY2UodGltZWxpbmUsIGZlbmNlX25zKTsKKworCQlyZXN1bHRbbmNoaWxk XSA9IDE7CisJCWZvciAoaW50IGNoaWxkID0gMDsgY2hpbGQgPCBuY2hpbGQ7IGNoaWxkKyspIHsK KwkJCXdoaWxlICghUkVBRF9PTkNFKHJlc3VsdFtjaGlsZF0pKQorCQkJCXRpbWVsaW5lX2FkdmFu Y2UodGltZWxpbmUsIGZlbmNlX25zKTsKKwkJfQorCisJCWlndF93YWl0Y2hpbGRyZW4oKTsKKwkJ Y2xvc2UodGltZWxpbmUpOworCisJCS8qIEFyZSB3ZSBydW5uaW5nIG91dCBvZiBDUFUgdGltZSwg YW5kIGZhaWwgdG8gc3VibWl0IGZyYW1lcz8gKi8KKwkJZF90aW1lID0gaWd0X25zZWNfZWxhcHNl ZCgmdHYpOworCQlnZXRydXNhZ2UoUlVTQUdFX0NISUxEUkVOLCAmdXNhZ2UpOworCQljcHVfdGlt ZSA9IGRfY3B1X3RpbWUoJnVzYWdlLCAmb2xkX3VzYWdlKTsKKwkJaWYgKDEwICogY3B1X3RpbWUg PiA5ICogZF90aW1lKSB7CisJCQlpZiAobmNoaWxkID4gNykKKwkJCQlicmVhazsKKworCQkJaWd0 X3NraXBfb25fZigxMCAqIGNwdV90aW1lID4gOSAqIGRfdGltZSwKKwkJCQkgICAgICAiJS4wZiUl IENQVSB1c2FnZSwgcHJlc3VtaW5nIGNhcGFjaXR5IGV4Y2VlZGVkXG4iLAorCQkJCSAgICAgIDEw MC4gKiBjcHVfdGltZSAvIGRfdGltZSk7CisJCX0KKworCQlpZ3RfbWVhbl9pbml0KCZtKTsKKwkJ Zm9yIChpbnQgY2hpbGQgPSAwOyBjaGlsZCA8IG5jaGlsZDsgY2hpbGQrKykKKwkJCWlndF9tZWFu X2FkZCgmbSwgcmVzdWx0W2NoaWxkXSk7CisKKwkJaWYgKGZsYWdzICYgKEZfVklQIHwgRl9SUlVM KSkKKwkJCXZpcCA9IHJlc3VsdFswXTsKKworCQlxc29ydChyZXN1bHQsIG5jaGlsZCwgc2l6ZW9m KCpyZXN1bHQpLCBjbXBfdWwpOworCQlpZ3RfaW5mbygiJTJkIGNsaWVudHMsIHJhbmdlOiBbJS4x ZiwgJS4xZl0sIGlxcjogWyUuMWYsICUuMWZdLCBtZWRpYW46ICUuMWYsIG1lYW46ICUuMWYgwrEg JS4yZiBtc1xuIiwKKwkJCSBuY2hpbGQsCisJCQkgMWUtNiAqIHJlc3VsdFswXSwgIDFlLTYgKiBy ZXN1bHRbbmNoaWxkIC0gMV0sCisJCQkgMWUtNiAqIHJlc3VsdFtsb10sIDFlLTYgKiByZXN1bHRb aGldLAorCQkJIDFlLTYgKiByZXN1bHRbbmNoaWxkIC8gMl0sCisJCQkgMWUtNiAqIGlndF9tZWFu X2dldCgmbSksCisJCQkgMWUtNiAqIHNxcnQoaWd0X21lYW5fZ2V0X3ZhcmlhbmNlKCZtKSkpOwor CisJCWlmICh2aXAgIT0gLTEpIHsKKwkJCWlndF9pbmZvKCJWSVAgaW50ZXJ2YWwgJS4yZiBtc1xu IiwgMWUtNiAqIHZpcCk7CisJCQlpZ3RfYXNzZXJ0KDQgKiB2aXAgPiAzICogZmVuY2VfbnMgJiYK KwkJCQkgICAzICogdmlwIDwgNCAqIGZlbmNlX25zKTsKKwkJfQorCisJCS8qIE1heSBiZSBzbG93 ZWQgZHVlIHRvIHNoZWVyIHZvbHVtZSBvZiBjb250ZXh0IHN3aXRjaGVzICovCisJCWlndF9hc3Nl cnQoNCAqIGlndF9tZWFuX2dldCgmbSkgPiAzICogZmVuY2VfbnMgJiYKKwkJCSAgICAgICBpZ3Rf bWVhbl9nZXQoJm0pIDwgMyAqIGZlbmNlX25zKTsKKworCQlpZ3RfYXNzZXJ0KDQgKiBpZ3RfbWVh bl9nZXQoJm0pID4gMyAqIHJlc3VsdFtuY2hpbGQgLyAyXSAmJgorCQkJICAgMyAqIGlndF9tZWFu X2dldCgmbSkgPCA0ICogcmVzdWx0W25jaGlsZCAvIDJdKTsKKworCQlpZ3RfYXNzZXJ0KDIgKiAo cmVzdWx0W2hpXSAtIHJlc3VsdFtsb10pIDwgcmVzdWx0W25jaGlsZCAvIDJdKTsKKwl9CisKKwlt dW5tYXAocmVzdWx0LCA0MDk2KTsKKwlpZiAoY29tbW9uKQorCQlnZW1fY2xvc2UoaTkxNSwgY29t bW9uKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9mYWlybmVzcyhpbnQgaTkxNSwgaW50IHRpbWVv dXQpCit7CisJc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJCWNvbnN0IGNoYXIgKm5hbWU7CisJCXVu c2lnbmVkIGludCBmbGFnczsKKwl9IGZhaXJbXSA9IHsKKwkJLyoKKwkJICogbm9uZSAtIG1heGlt YWwgZ3JlZWQgaW4gZWFjaCBjbGllbnQKKwkJICoKKwkJICogUHVzaCBhcyBtYW55IGZyYW1lcyBm cm9tIGVhY2ggY2xpZW50IGFzIGZhc3QgYXMgcG9zc2libGUKKwkJICovCisJCXsgIm5vbmUiLCAg ICAgICAwIH0sCisJCXsgIm5vbmUtdmlwIiwgICBGX1ZJUCB9LCAvKiBvbmUgdmlwIGNsaWVudCBt dXN0IG1lZXQgZGVhZGxpbmVzICovCisJCXsgIm5vbmUtc29sbyIsICBGX1NPTE8gfSwgLyogMSBi YXRjaCBwZXIgZnJhbWUgcGVyIGNsaWVudCAqLworCQl7ICJub25lLXNoYXJlIiwgRl9TSEFSRSB9 LCAvKiByZWFkIGZyb20gYSBjb21tb24gYnVmZmVyICovCisJCXsgIm5vbmUtcnJ1bCIsICBGX1JS VUwgfSwgLyogInJlYWx0aW1lLXJlc3BvbnNlIHVuZGVyIGxvYWQiICovCisJCXsgIm5vbmUtcGlu ZyIsICBGX1BJTkcgfSwgLyogbWVhc3VyZSBpbnRlci1lbmdpbmUgZmFpcm5lc3MgKi8KKworCQkv KgorCQkgKiB0aHJvdHRsZSAtIG9yaWdpbmFsIHBlciBjbGllbnQgdGhyb3R0bGluZworCQkgKgor CQkgKiBVc2VkIGZvciBmcm9udCBidWZmZXJpbmcgcmVuZGVyaW5nIHdoZXJlIHRoZXJlIGlzIG5v CisJCSAqIGV4dGVuYWwgZnJhbWUgbWFya2VyLiBFYWNoIGNsaWVudCB0cmllcyB0byBvbmx5IGtl ZXAKKwkJICogMjBtcyBvZiB3b3JrIHN1Ym1pdHRlZCwgdGhvdWdoIHRoYXQgbWVhc3VyZW1lbnQg aXMKKwkJICogZmxhd2VkLi4uCisJCSAqCisJCSAqIFRoaXMgaXMgdXNlZCBieSBYb3J5IHRvIHRy eSBhbmQgbWFpbnRhaW4gc29tZSByZXNlbWJhbGFuY2UKKwkJICogb2YgaW5wdXQvb3V0cHV0IGNv bnNpc3RlbmN5IHdoZW4gYmVpbmcgZmVlZCBhIGNvbnRpbnVvdXMKKwkJICogc3RyZWFtIG9mIFgx MSBkcmF3IHJlcXVlc3RzIHN0cmFpZ2h0IGludG8gc2Nhbm91dCwgd2hlcmUKKwkJICogdGhlIGNs aWVudHMgbWF5IHN1Ym1pdCB0aGUgd29yayBmYXN0ZXIgdGhhbiBjYW4gYmUgZHJhd24uCisJCSAq CisJCSAqIFRocm90dGxpbmcgdHJhY2tzIHJlcXVlc3RzIHBlci1maWxlIChhbmQgYXNzdW1lcyB0 aGF0CisJCSAqIGFsbCByZXF1ZXN0cyBhcmUgaW4gc3VibWlzc2lvbiBvcmRlciBhY3Jvc3MgdGhl IHdob2xlIGZpbGUpLAorCQkgKiBzbyB3ZSBzcGxpdCBlYWNoIGNoaWxkIHRvIGl0cyBvd24gZmQu CisJCSAqLworCQl7ICJ0aHJvdHRsZSIsICAgICAgIEZfVEhST1RUTEUgfCBGX0lTT0xBVEUgfSwK KwkJeyAidGhyb3R0bGUtdmlwIiwgICBGX1RIUk9UVExFIHwgRl9JU09MQVRFIHwgRl9WSVAgfSwK KwkJeyAidGhyb3R0bGUtc29sbyIsICBGX1RIUk9UVExFIHwgRl9JU09MQVRFIHwgRl9TT0xPIH0s CisJCXsgInRocm90dGxlLXNoYXJlIiwgRl9USFJPVFRMRSB8IEZfSVNPTEFURSB8IEZfU0hBUkUg fSwKKwkJeyAidGhyb3R0bGUtcnJ1bCIsICBGX1RIUk9UVExFIHwgRl9JU09MQVRFIHwgRl9SUlVM IH0sCisKKwkJLyoKKwkJICogcGFjZSAtIG1lc2EgInN1Ym1pdCBkb3VibGUgYnVmZmVyaW5nIgor CQkgKgorCQkgKiBTdWJtaXQgYSBmcmFtZSwgd2FpdCBmb3IgcHJldmlvdXMgZnJhbWUgdG8gc3Rh cnQuIFRoaXMKKwkJICogcHJldmVudHMgZWFjaCBjbGllbnQgZnJvbSBnZXR0aW5nIHRvbyBmYXIg YWhlYWQgb2YgaXRzCisJCSAqIHJlbmRlcmluZywgbWFpbnRhaW5pbmcgYSBjb25zaXN0ZW50IGlu cHV0L291dHB1dCBsYXRlbmN5LgorCQkgKi8KKwkJeyAicGFjZSIsICAgICAgIEZfUEFDRSB9LAor CQl7ICJwYWNlLXNvbG8iLCAgRl9QQUNFIHwgRl9TT0xPfSwKKwkJeyAicGFjZS1zaGFyZSIsIEZf UEFDRSB8IEZfU0hBUkV9LAorCQl7ICJwYWNlLXBpbmciLCAgRl9QQUNFIHwgRl9TSEFSRSB8IEZf UElOR30sCisKKwkJLyogc3luYyAtIG9ubHkgc3VibWl0IGEgZnJhbWUgYXQgYSB0aW1lICovCisJ CXsgInN5bmMiLCAgICAgIEZfU1lOQyB9LAorCQl7ICJzeW5jLXZpcCIsICBGX1NZTkMgfCBGX1ZJ UCB9LAorCQl7ICJzeW5jLXNvbG8iLCBGX1NZTkMgfCBGX1NPTE8gfSwKKworCQkvKiBmbG93IC0g c3luY2hyb25pc2UgZXhlY3V0aW9uIGFnYWluc3QgdGhlIGNsb2NrICh2YmxhbmspICovCisJCXsg ImZsb3ciLCAgICAgICBGX1BBQ0UgfCBGX0ZMT1cgfSwKKwkJeyAiZmxvdy1zaGFyZSIsIEZfUEFD RSB8IEZfRkxPVyB8IEZfU0hBUkUgfSwKKwkJeyAiZmxvdy1waW5nIiwgIEZfUEFDRSB8IEZfRkxP VyB8IEZfU0hBUkUgfCBGX1BJTkcgfSwKKworCQkvKiBuZXh0IC0gc3VibWl0IGFoZWFkIG9mIHRo ZSBjbG9jayAodmJsYW5rIGRvdWJsZSBidWZmZXJpbmcpICovCisJCXsgIm5leHQiLCAgICAgICBG X1BBQ0UgfCBGX0ZMT1cgfCBGX05FWFQgfSwKKwkJeyAibmV4dC1zaGFyZSIsIEZfUEFDRSB8IEZf RkxPVyB8IEZfTkVYVCB8IEZfU0hBUkUgfSwKKwkJeyAibmV4dC1waW5nIiwgIEZfUEFDRSB8IEZf RkxPVyB8IEZfTkVYVCB8IEZfU0hBUkUgfCBGX1BJTkcgfSwKKworCQkvKiBzcGFyZSAtIHVuZGVy dXRpbGlzZSBieSBhIHNpbmdsZSBjbGllbnQgdGltZXNsaWNlICovCisJCXsgInNwYXJlIiwgRl9Q QUNFIHwgRl9GTE9XIHwgRl9TUEFSRSB9LAorCisJCS8qIGhhbGYgLSBydW4gYXQgaGFsZiBwYWNl IChzdWJtaXQgMTZtcyBvZiB3b3JrIGV2ZXJ5IDMybXMpICovCisJCXsgImhhbGYiLCAgRl9QQUNF IHwgRl9GTE9XIHwgRl9IQUxGIH0sCisKKwkJe30KKwl9OworCisJZm9yICh0eXBlb2YoKmZhaXIp ICpmID0gZmFpcjsgZi0+bmFtZTsgZisrKSB7CisJCWlndF9zdWJ0ZXN0X3dpdGhfZHluYW1pY19m KCJmYWlyLSVzIiwgZi0+bmFtZSkgIHsKKwkJCWNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25f ZW5naW5lMiAqZTsKKworCQkJaWd0X3JlcXVpcmUoaW50ZWxfZ2VuKGludGVsX2dldF9kcm1fZGV2 aWQoaTkxNSkpID49IDgpOworCisJCQlfX2Zvcl9lYWNoX3BoeXNpY2FsX2VuZ2luZShpOTE1LCBl KSB7CisJCQkJaWYgKCFnZW1fY2xhc3NfY2FuX3N0b3JlX2R3b3JkKGk5MTUsIGUtPmNsYXNzKSkK KwkJCQkJY29udGludWU7CisKKwkJCQlpZ3RfZHluYW1pY19mKCIlcyIsIGUtPm5hbWUpCisJCQkJ CWZhaXJuZXNzKGk5MTUsIGUsIHRpbWVvdXQsIGYtPmZsYWdzKTsKKwkJCX0KKwkJfQorCX0KK30K Kworc3RhdGljIHVpbnQzMl90IHJlYWRfY3R4X3RpbWVzdGFtcChpbnQgaTkxNSwKKwkJCQkgICB1 aW50MzJfdCBjdHgsCisJCQkJICAgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUy ICplKQoreworCWNvbnN0IGludCB1c2VfNjRiID0gaW50ZWxfZ2VuKGludGVsX2dldF9kcm1fZGV2 aWQoaTkxNSkpID49IDg7CisJY29uc3QgdWludDMyX3QgYmFzZSA9IGdlbV9lbmdpbmVfbW1pb19i YXNlKGk5MTUsIGUtPm5hbWUpOworCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRy eSByZWxvYzsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBvYmogPSB7CisJCS5o YW5kbGUgPSBnZW1fY3JlYXRlKGk5MTUsIDQwOTYpLAorCQkub2Zmc2V0ID0gMzIgPDwgMjAsCisJ CS5yZWxvY3NfcHRyID0gdG9fdXNlcl9wb2ludGVyKCZyZWxvYyksCisJCS5yZWxvY2F0aW9uX2Nv dW50ID0gMSwKKwl9OworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZiA9 IHsKKwkJLmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2ludGVyKCZvYmopLAorCQkuYnVmZmVyX2Nv dW50ID0gMSwKKwkJLmZsYWdzID0gZS0+ZmxhZ3MsCisJCS5yc3ZkMSA9IGN0eCwKKwl9OworI2Rl ZmluZSBSVU5USU1FIChiYXNlICsgMHgzYTgpCisJdWludDMyX3QgKm1hcCwgKmNzOworCXVpbnQz Ml90IHRzOworCisJaWd0X3JlcXVpcmUoYmFzZSk7CisKKwljcyA9IG1hcCA9IGdlbV9tbWFwX19k ZXZpY2VfY29oZXJlbnQoaTkxNSwgb2JqLmhhbmRsZSwKKwkJCQkJICAgICAwLCA0MDk2LCBQUk9U X1dSSVRFKTsKKworCSpjcysrID0gMHgyNCA8PCAyMyB8ICgxICsgdXNlXzY0Yik7IC8qIFNSTSAq LworCSpjcysrID0gUlVOVElNRTsKKwltZW1zZXQoJnJlbG9jLCAwLCBzaXplb2YocmVsb2MpKTsK KwlyZWxvYy50YXJnZXRfaGFuZGxlID0gb2JqLmhhbmRsZTsKKwlyZWxvYy5wcmVzdW1lZF9vZmZz ZXQgPSBvYmoub2Zmc2V0OworCXJlbG9jLm9mZnNldCA9IG9mZnNldF9pbl9wYWdlKGNzKTsKKwly ZWxvYy5kZWx0YSA9IDQwMDA7CisJKmNzKysgPSBvYmoub2Zmc2V0ICsgNDAwMDsKKwkqY3MrKyA9 IG9iai5vZmZzZXQgPj4gMzI7CisKKwkqY3MrKyA9IE1JX0JBVENIX0JVRkZFUl9FTkQ7CisKKwln ZW1fZXhlY2J1ZihpOTE1LCAmZXhlY2J1Zik7CisJZ2VtX3N5bmMoaTkxNSwgb2JqLmhhbmRsZSk7 CisJZ2VtX2Nsb3NlKGk5MTUsIG9iai5oYW5kbGUpOworCisJdHMgPSBtYXBbMTAwMF07CisJbXVu bWFwKG1hcCwgNDA5Nik7CisKKwlyZXR1cm4gdHM7Cit9CisKK3N0YXRpYyB2b2lkIGZhaXJzbGlj ZShpbnQgaTkxNSwgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplKQorewor CWlndF9zcGluX3QgKnNwaW5bM107CisJdWludDMyX3QgY3R4WzNdOworCXVpbnQzMl90IHRzWzNd OworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGN0eCk7IGkrKykgeworCQljdHhb aV0gPSBnZW1fY29udGV4dF9jbG9uZV93aXRoX2VuZ2luZXMoaTkxNSwgMCk7CisJCXNwaW5baV0g PSBpZ3Rfc3Bpbl9uZXcoaTkxNSwgLmN0eCA9IGN0eFtpXSwgLmVuZ2luZSA9IGUtPmZsYWdzKTsK Kwl9CisKKwlzbGVlcCgyKTsgLyogb3ZlciB0aGUgY291cnNlIG9mIG1hbnkgdGltZXNsaWNlcyAq LworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGN0eCk7IGkrKykgeworCQlpZ3Rf YXNzZXJ0KGdlbV9ib19idXN5KGk5MTUsIHNwaW5baV0tPmhhbmRsZSkpOworCQlpZ3Rfc3Bpbl9l bmQoc3BpbltpXSk7CisKKwkJdHNbaV0gPSByZWFkX2N0eF90aW1lc3RhbXAoaTkxNSwgY3R4W2ld LCBlKTsKKwl9CisKKwlmb3IgKGludCBpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3R4KTsgaSsrKSB7 CisJCWlndF9zcGluX2ZyZWUoaTkxNSwgc3BpbltpXSk7CisJCWdlbV9jb250ZXh0X2Rlc3Ryb3ko aTkxNSwgY3R4W2ldKTsKKwl9CisKKwlxc29ydCh0cywgMywgc2l6ZW9mKCp0cyksIGNtcF91MzIp OworCWlndF9pbmZvKCIlczogWyUuMWYsICUuMWZdIG1zXG4iLCBlLT5uYW1lLAorCQkgMWUtNiAq IHRpY2tzX3RvX25zKGk5MTUsIHRzWzBdKSwKKwkJIDFlLTYgKiB0aWNrc190b19ucyhpOTE1LCB0 c1syXSkpOworCisJaWd0X2Fzc2VydCh0c1swXSAmJiB0c1syXSA+IHRzWzBdKTsKKwlpZ3RfYXNz ZXJ0KDQgKiB0c1swXSA+IDMgKiB0c1syXSk7Cit9CisKICNkZWZpbmUgdGVzdF9lYWNoX2VuZ2lu ZShULCBpOTE1LCBlKSBcCiAJaWd0X3N1YnRlc3Rfd2l0aF9keW5hbWljKFQpIF9fZm9yX2VhY2hf cGh5c2ljYWxfZW5naW5lKGk5MTUsIGUpIFwKIAkJaWd0X2R5bmFtaWNfZigiJXMiLCBlLT5uYW1l KQpAQCAtMjU2OSw2ICszMzY0LDI1IEBAIGlndF9tYWluCiAJCXRlc3RfZWFjaF9lbmdpbmUoImxh dGVzbGljZSIsIGZkLCBlKQogCQkJbGF0ZXNsaWNlKGZkLCBlLT5mbGFncyk7CiAKKwkJaWd0X3N1 YnRlc3RfZ3JvdXAgeworCQkJaWd0X2ZpeHR1cmUgeworCQkJCWlndF9yZXF1aXJlKGdlbV9zY2hl ZHVsZXJfaGFzX3NlbWFwaG9yZXMoZmQpKTsKKwkJCQlpZ3RfcmVxdWlyZShnZW1fc2NoZWR1bGVy X2hhc19wcmVlbXB0aW9uKGZkKSk7CisJCQkJaWd0X3JlcXVpcmUoaW50ZWxfZ2VuKGludGVsX2dl dF9kcm1fZGV2aWQoZmQpKSA+PSA4KTsKKwkJCX0KKworCQkJdGVzdF9lYWNoX2VuZ2luZSgiZmFp cnNsaWNlIiwgZmQsIGUpCisJCQkJZmFpcnNsaWNlKGZkLCBlKTsKKworCQkJaWd0X3N1YnRlc3Qo ImZhaXJzbGljZS1hbGwiKSAgeworCQkJCV9fZm9yX2VhY2hfcGh5c2ljYWxfZW5naW5lKGZkLCBl KSB7CisJCQkJCWlndF9mb3JrKGNoaWxkLCAxKQorCQkJCQkJZmFpcnNsaWNlKGZkLCBlKTsKKwkJ CQl9CisJCQkJaWd0X3dhaXRjaGlsZHJlbigpOworCQkJfQorCQl9CisKIAkJdGVzdF9lYWNoX2Vu Z2luZSgic3VibWl0LWVhcmx5LXNsaWNlIiwgZmQsIGUpCiAJCQlzdWJtaXRfc2xpY2UoZmQsIGUs IEVBUkxZX1NVQk1JVCk7CiAJCXRlc3RfZWFjaF9lbmdpbmUoInN1Ym1pdC1nb2xkZW4tc2xpY2Ui LCBmZCwgZSkKQEAgLTI1OTcsNiArMzQxMSw4IEBAIGlndF9tYWluCiAJCXRlc3RfZWFjaF9lbmdp bmVfc3RvcmUoInByb21vdGlvbiIsIGZkLCBlKQogCQkJcHJvbW90aW9uKGZkLCBlLT5mbGFncyk7 CiAKKwkJdGVzdF9mYWlybmVzcyhmZCwgMik7CisKIAkJaWd0X3N1YnRlc3RfZ3JvdXAgewogCQkJ aWd0X2ZpeHR1cmUgewogCQkJCWlndF9yZXF1aXJlKGdlbV9zY2hlZHVsZXJfaGFzX3ByZWVtcHRp b24oZmQpKTsKLS0gCjIuMjguMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRl c2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8v aW50ZWwtZ2Z4Cg==