From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id 937D96E563 for ; Thu, 20 Jun 2019 18:34:41 +0000 (UTC) From: Carlos Santa Date: Thu, 20 Jun 2019 11:33:18 -0700 Message-Id: <20190620183318.83054-1-carlos.santa@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [RFC v6] tests/gem_watchdog: Initial set of tests for GPU watchdog 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: Ursulin Tvrtko List-ID: VGhpcyB0ZXN0IGFkZHMgYmFzaWMgc2V0IG9mIHRlc3RzIHRvIHJlc2V0IHRoZSBkaWZmZXJlbnQK R1BVIGVuZ2luZXMgdGhyb3VnaCB0aGUgZ3B1IHdhdGNoZG9nIHRpbWVyLgoKQ3JlZGl0cyB0byBB bnRvbmlvIGZvciB0aGUgb3JpZ2luYWwgY29kZWJhc2UgdGhpcyBpcyBiYXNlZCBvbi4KCnYyOiBy ZW1vdmUgZ2VtX2NvbnRleHRfZ2V0X3BhcmFtKCkgZHVyaW5nIHNldCAoQW50b25pbykKICAgIHJl bW92ZSBjbGVhcmluZyBvZiB0aGUgZW5naW5lc190aHJlc2hvbGRbXSBpbiB0aGUgZGVmYXVsdCBj YXNlCiAgICBpbnNpZGUgY29udGV4dF9zZXRfd2F0Y2hkb2coKS4gKEFudG9uaW8pCiAgICBmaXgg aW5kZXhpbmcgd2hlbiBjcmVhdGluZyBsb3cvaGlnaCBwcmlvcml0eSBjb250ZXh0cwogICAgZ2V0 IHJpZCBvZiAyIHRocmVhZHMgaWRlYSAoQW50b25pbykKICAgIGZpeCBjb250ZXh0IHByaW8gYnVn IGR1ZSB0byB3cm9uZyBpbmRleGluZyAoQW50b25pbykKdjM6IG5vIG5lZWQgdG8gZm9yY2UgY2xl YXIgZHJtX2k5MTVfZ2VtX3dhdGNoZG9nX3RpbWVvdXQgc3RydWN0CiAgICB3aGVuIHNldHRpbmcg dGhlIHdhdGNoZG9nIHRpbWVvdXRzIChBbnRvbmlvKQogICAgLXVzZSBnZW1fY29udGV4dF9zZXRf cHJpb3JpdHkoKSBpbnN0ZWFkIHRvIHVzZSBlcnJvciBjaGVja2luZwogICAgLWFsd2F5cyB1c2Ug YSBsb29wZXIgdG8gdGVzdCBhbGwgZW5naW5lcyAoQW50b25pbykKICAgIC1tb2RpZnkgdGVzdCBn cHVfd2F0Y2hvZGdfaGFuZ19sb25nX2JhdGNoX3NpbmdsZV9lbmdpbmUoKQogICAgdG8gdXNlIGEg Y291cGxlIG9mIGJhdGNoZXMgYW5kIHNldCB0aGUgdGltZW91dCBpbiBiZXR3ZWVuIHRoZW0gKEFu dG9uaW8pCiAgICAtbWFrZSB1c2Ugb2YgZm9yX2VhY2hfZW5naW5lX2NsYXNzX2luc3RhbmNlKCkg KEFudG9uaW8pCnY0OiAtdGVzdHMgc2hvdWxkIGJlIGFibGUgdG8gaGFuZGxlIHMvdyB3YXRjaGRv ZyB0aW1lb3V0IChUdnJ0a28pCiAgICAtcmVtb3ZlIGRlYWQgY29kZSBpbnNpZGUgYmF0Y2hfYnVm ZmVyIGZhY3RvcnkgKFR2cnRrbykKICAgIC1zZXRfd2F0Y2hkb2coKSBzaG91bGQgcmV0dXJuIEVO T0RFViBmb3IgZmFpbCBjYXNlcyAoVHZydGtvKQogICAgLWVuY2xvc2UgbmFtZSwgcHJpb3JpdHkg YW5kIHJlc2V0IHBhcmFtcyBpbnNpZGUgYXJyYXkgKFR2cnRrbykKdjU6IC1SZWJhc2VkLiBUZXN0 cyA1LDYgYW5kIDggZnJvbSB0aGUgdGVzdCBwbGFuIGFyZSBub3cgYWRkZWQKdjY6IC1SZWJhc2Vk LiBBZGRlZCBUZXN0ICMxMCBUaW1pbmdfYmF0Y2ggKENocmlzKQogICAgLXVzZSBpOTE1X2VuZ2lu ZV9jbGFzc19pbnN0YW5jZSwgdXNlIHNwaW5uZXIgdG8gdHJhY2sgb3V0X2ZlbmNlLAogICAgLXVz ZSBhIHN0cnVjdCB0byBkZXNjcmliZSAjIG9mIGN0eC9zY3JhdGNoW10sIGluY3JlYXNlICMgb2Yg ZW5naW5lcwogICAgZnJvbSA4IChDaHJpcykKClRlc3QgUGxhbjoKCkFzc3VtcHRpb25zOgoxLiBV c2UgZmVuY2Ugc3RhdHVzIHRvIGZpZ3VyZSBvdXQgd2hpY2ggY3R4IHdhcyByZXNldAoyLiBVc2Ug c3BpbiBiYXRjaGVzIHcvIHVzZXIgc3BhY2UgdGltZXJzIHRvIGNvbnRyb2wgZHVyYXRpb24KYW5k IGNvcmtpbmcgdG8gY29udHJvbCBvcmRlcmluZwozLiBVc2UgY29udGV4dCBwcmlvcml0aWVzIHRv IGZvcmNlIHByZWVtcHRpb24KClRlc3RzOgoxLiBjdHgxLCBsb25nX2JhdGNoIC0+IGV4ZWN1dGUK Mi4gY3R4MSwgc2V0X3dhdGNoZG9nIC0+IHJlc2V0CjMuIGN0eDIvY3R4MSAtPiBleGVjdXRlLCBy ZXNldAo0LiBjdHgxL2N0eDIgLT4gcmVzZXQsIGV4ZWN1dGUKNS4gY3R4MV9qdXN0X2JlbG93X3Ro cmVzaG9sZCAtPiBleGVjdXRlCjYuIGN0eF9vdmVyX3RoZV90aHJlc2hvbGQgLT4gcmVzZXQKNy4g c2V0IHdhdGNoZG9nIG9uIHNvbWUgZW5naW5lcyAtPiBleGVjdXRlCjguIHN1Ym1pdCBsb25nX2Jh dGNoIGFuZCBhZnRlciBoYWxmIG9mIHRoZQpleHBlY3RlZCBydW50aW1lIHN1Ym1pdCBoaWdoZXIg cHJpbyBiYXRjaAo5LiBzdWJtaXQgbG93IHByaW8gYmF0Y2ggdy9vIHdhdGNoZG9nIHRoZW4KaGln aGVyIHByaW8gd2l0aCB3YXRjaGRvZwoxMC4gc3VibWl0IHRpbWluZ19iYXRjaCwgcmVjb3JkIHRp bWVzdGFtcHMKYW5kIGNhbGN1bGF0ZSB0aGUgZGVsdGEgYWZ0ZXIgcmVjdXJzaW5nLgoKVW5zcmVz b2x2ZWQgaXRlbXM6CjEuIFRoZSBjaGVjayBmb3Igc3luY19mZW5jZV9zdGF0dXMoKmZlbmNlKQpy ZXR1cm5zIC0xIGluc3RlYWQgb2YgRUlPLgoKQ2M6IFVyc3VsaW4gVHZydGtvIDx0dnJ0a28udXJz dWxpbkBpbnRlbC5jb20+CkNjOiBBbnRvbmlvIEFyZ2Vuemlhbm8gPGFudG9uaW8uYXJnZW56aWFu b0BpbnRlbC5jb20+CkNjOiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4K U2lnbmVkLW9mZi1ieTogQ2FybG9zIFNhbnRhIDxjYXJsb3Muc2FudGFAaW50ZWwuY29tPgotLS0K IHRlc3RzL01ha2VmaWxlLnNvdXJjZXMgICAgfCAgIDMgKwogdGVzdHMvaTkxNS9nZW1fd2F0Y2hk b2cuYyB8IDczMCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogdGVzdHMv bWVzb24uYnVpbGQgICAgICAgICB8ICAgMSArCiAzIGZpbGVzIGNoYW5nZWQsIDczNCBpbnNlcnRp b25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMvaTkxNS9nZW1fd2F0Y2hkb2cuYwoKZGlm ZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2Vz CmluZGV4IDAyN2VkODJmYzM4YS4uMmNlYWFhMGE0NGFmIDEwMDY0NAotLS0gYS90ZXN0cy9NYWtl ZmlsZS5zb3VyY2VzCisrKyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKQEAgLTQ1OSw2ICs0NTks OSBAQCBnZW1fdXNlcnB0cl9ibGl0c19TT1VSQ0VTID0gaTkxNS9nZW1fdXNlcnB0cl9ibGl0cy5j CiBURVNUU19wcm9ncyArPSBnZW1fd2FpdAogZ2VtX3dhaXRfU09VUkNFUyA9IGk5MTUvZ2VtX3dh aXQuYwogCitURVNUU19wcm9ncyArPSBnZW1fd2F0Y2hkb2cKK2dlbV93YXRjaGRvZ19TT1VSQ0VT ID0gaTkxNS9nZW1fd2F0Y2hkb2cuYworCiBURVNUU19wcm9ncyArPSBnZW1fd29ya2Fyb3VuZHMK IGdlbV93b3JrYXJvdW5kc19TT1VSQ0VTID0gaTkxNS9nZW1fd29ya2Fyb3VuZHMuYwogCmRpZmYg LS1naXQgYS90ZXN0cy9pOTE1L2dlbV93YXRjaGRvZy5jIGIvdGVzdHMvaTkxNS9nZW1fd2F0Y2hk b2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjcxMTllOTg3Nzcw MgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2k5MTUvZ2VtX3dhdGNoZG9nLmMKQEAgLTAsMCAr MSw3MzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgorICoK KyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkg cGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0 ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0 aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRh dGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gs IGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNv ZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlz IGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6 CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBu b3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRl ZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdh cmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FS UkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQg Tk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5P IEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFC TEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVS IElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAq IEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBV U0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworI2luY2x1ZGUg ImlndC5oIgorI2luY2x1ZGUgImlndF9zeXNmcy5oIgorI2luY2x1ZGUgInN3X3N5bmMuaCIKKwor I2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorCisjaW5jbHVkZSA8c3lz L3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxzeXMvcG9sbC5oPgor I2luY2x1ZGUgPHN5cy9zaWduYWwuaD4KKyNpbmNsdWRlICJpOTE1L2dlbV9yaW5nLmgiCisKKyNk ZWZpbmUgTUlfU1RPUkVfUkVHSVNURVJfTUVNIAkJKDB4MjQgPDwgMjMpCisjZGVmaW5lIExPQ0FM X0k5MTVfRVhFQ19CU0RfU0hJRlQJKDEzKQorI2RlZmluZSBMT0NBTF9JOTE1X0VYRUNfQlNEX1JJ TkcxIAkoMSA8PCBMT0NBTF9JOTE1X0VYRUNfQlNEX1NISUZUKQorI2RlZmluZSBMT0NBTF9JOTE1 X0VYRUNfQlNEX1JJTkcyIAkoMiA8PCBMT0NBTF9JOTE1X0VYRUNfQlNEX1NISUZUKQorCisjZGVm aW5lIE1BWF9QUklPIExPQ0FMX0k5MTVfQ09OVEVYVF9NQVhfVVNFUl9QUklPUklUWQorI2RlZmlu ZSBERUZBVUxUX1BSSU8gTE9DQUxfSTkxNV9DT05URVhUX0RFRkFVTFRfUFJJT1JJVFkKKyNkZWZp bmUgTUlOX1BSSU8gTE9DQUxfSTkxNV9DT05URVhUX01JTl9VU0VSX1BSSU9SSVRZCisjZGVmaW5l IEhJR0ggMQorI2RlZmluZSBMT1cgMAorI2RlZmluZSBXQVRDSERPR19PVkVSX1RIUkVTSE9MRCAo MjA3MDAwMCkKKyNkZWZpbmUgV0FUQ0hET0dfQkVMT1dfVEhSRVNIT0xEICgxMjAwMDAwKQorCisj ZGVmaW5lIFdBVENIRE9HX1RIUkVTSE9MRCAoMTAwMDAwMCkKKyNkZWZpbmUgTUFYX0VOR0lORVMg MTYKKyNkZWZpbmUgUkVOREVSX0NMQVNTIDAKKyNkZWZpbmUgVklERU9fREVDT0RFX0NMQVNTIDEK KyNkZWZpbmUgVklERU9fRU5IQU5DRU1FTlRfQ0xBU1MgMgorI2RlZmluZSBDT1BZX0VOR0lORV9D TEFTUyAzCisjZGVmaW5lIExPQ0FMX0k5MTVfQ09OVEVYVF9QQVJBTV9XQVRDSERPRyAweDEwCisK KyNkZWZpbmUgR0VUX1JFU0VUX1NUQVRTX0lPQ1RMIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0Ug KyAweDMyLCBzdHJ1Y3QgbG9jYWxfZHJtX2k5MTVfcmVzZXRfc3RhdHMpCitzdHJ1Y3QgbG9jYWxf ZHJtX2k5MTVfcmVzZXRfc3RhdHMgeworCV9fdTMyIGN0eF9pZDsKKwlfX3UzMiBmbGFnczsKKwlf X3UzMiByZXNldF9jb3VudDsKKwlfX3UzMiBiYXRjaF9hY3RpdmU7CisJX191MzIgYmF0Y2hfcGVu ZGluZzsKKwlfX3UzMiBwYWQ7Cit9OworCitjb25zdCB1aW50NjRfdCB0aW1lb3V0XzEwMG1zID0g MTAwMDAwMDAwTEw7CitmbG9hdCB0aW1lZGlmZmVyZW5jZV9tc2VjKHN0cnVjdCB0aW1ldmFsIHQw LCBzdHJ1Y3QgdGltZXZhbCB0MSk7Cit2b2lkIHNsZWVwX25zZWMoaW50IG1zKTsKKworc3RydWN0 IGRybV9pOTE1X2dlbV93YXRjaGRvZ190aW1lb3V0IHsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJ CQkvKgorCQkJICogRW5naW5lIGNsYXNzICYgaW5zdGFuY2UgdG8gYmUgY29uZmlndXJlZCBvciBx dWVyaWVkLgorCQkJICovCisJCQlfX3UxNiBlbmdpbmVfY2xhc3M7CisJCQlfX3UxNiBpOTE1X2Vu Z2luZV9jbGFzc19pbnN0YW5jZTsKKwkJfTsKKwkJLyogSW5kZXggYmFzZWQgYWRkcmVzc2luZyBt b2RlICovCisJCV9fdTMyIGluZGV4OworCX07CisJLyogR1BVIEVuZ2luZSB3YXRjaGRvZyByZXNl dHMgdGltZW91dCBpbiB1cyAqLworCV9fdTMyIHRpbWVvdXRfdXM7Cit9OworCitzdGF0aWMgdm9p ZCBjbGVhcl9lcnJvcl9zdGF0ZShpbnQgZmQpCit7CisJaW50IGRpcjsKKworCWRpciA9IGlndF9z eXNmc19vcGVuKGZkKTsKKworCWlmIChkaXIgPCAwKQorCQlyZXR1cm47CisKKwkvKiBBbnkgd3Jp dGUgdG8gdGhlIGVycm9yIHN0YXRlIGNsZWFycyBpdCAqLworCWlndF9zeXNmc19zZXQoZGlyLCAi ZXJyb3IiLCAiIik7CisJY2xvc2UoZGlyKTsKK30KKworc3RhdGljIGludCBjb250ZXh0X3NldF93 YXRjaGRvZyhpbnQgZmQsIHVuc2lnbmVkIGVuZ2luZV9pZCwKKwkJCQkgY29uc3QgY2hhciAqZW5n aW5lX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjdHhf aWQsIHVuc2lnbmVkIHRocmVzaG9sZCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3dhdGNoZG9n X3RpbWVvdXQgZW5naW5lc190aHJlc2hvbGRbTUFYX0VOR0lORVNdOworCXN0cnVjdCBkcm1faTkx NV9nZW1fY29udGV4dF9wYXJhbSBhcmcgPSB7CisJCS5wYXJhbSA9IExPQ0FMX0k5MTVfQ09OVEVY VF9QQVJBTV9XQVRDSERPRywKKwkJLmN0eF9pZCA9IGN0eF9pZCwKKwkJLnNpemUgPSBzaXplb2Yo ZW5naW5lc190aHJlc2hvbGQpLAorCQkudmFsdWUgPSAodWludDY0X3QpJmVuZ2luZXNfdGhyZXNo b2xkCisJfTsKKworCXN3aXRjaCAoZW5naW5lX2lkICYgSTkxNV9FWEVDX1JJTkdfTUFTSykgewor CWNhc2UgSTkxNV9FWEVDX1JFTkRFUjoKKwkJZW5naW5lc190aHJlc2hvbGRbMF0udGltZW91dF91 cyA9IHRocmVzaG9sZDsKKwkJZW5naW5lc190aHJlc2hvbGRbMF0uZW5naW5lX2NsYXNzID0gUkVO REVSX0NMQVNTOworCQllbmdpbmVzX3RocmVzaG9sZFswXS5pOTE1X2VuZ2luZV9jbGFzc19pbnN0 YW5jZSA9IDA7CisJCWJyZWFrOworCWNhc2UgSTkxNV9FWEVDX0JMVDoKKwkJaWYgKF9fZ2VtX2Nv bnRleHRfZ2V0X3BhcmFtKGZkLCAmYXJnKSA9PSAtRU5PREVWKQorCQkJcmV0dXJuIC1FTk9ERVY7 CisJCWVsc2UKKwkJCWVuZ2luZXNfdGhyZXNob2xkWzNdLnRpbWVvdXRfdXMgPSB0aHJlc2hvbGQ7 CisJCQllbmdpbmVzX3RocmVzaG9sZFszXS5lbmdpbmVfY2xhc3MgPSBDT1BZX0VOR0lORV9DTEFT UzsKKwkJCWVuZ2luZXNfdGhyZXNob2xkWzNdLmk5MTVfZW5naW5lX2NsYXNzX2luc3RhbmNlID0g MDsKKwkJYnJlYWs7CisJY2FzZSBJOTE1X0VYRUNfQlNEOgorCQllbmdpbmVzX3RocmVzaG9sZFsx XS50aW1lb3V0X3VzID0gdGhyZXNob2xkOworCQllbmdpbmVzX3RocmVzaG9sZFsxXS5lbmdpbmVf Y2xhc3MgPSBWSURFT19ERUNPREVfQ0xBU1M7CisJCWVuZ2luZXNfdGhyZXNob2xkWzFdLmk5MTVf ZW5naW5lX2NsYXNzX2luc3RhbmNlID0gMDsKKwkJYnJlYWs7CisJY2FzZSBJOTE1X0VYRUNfVkVC T1g6CisJCWVuZ2luZXNfdGhyZXNob2xkWzJdLnRpbWVvdXRfdXMgPSB0aHJlc2hvbGQ7CisJCWVu Z2luZXNfdGhyZXNob2xkWzJdLmVuZ2luZV9jbGFzcyA9IFZJREVPX0VOSEFOQ0VNRU5UX0NMQVNT OworCQllbmdpbmVzX3RocmVzaG9sZFsyXS5pOTE1X2VuZ2luZV9jbGFzc19pbnN0YW5jZSA9IDA7 CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWdlbV9jb250ZXh0X3NldF9w YXJhbShmZCwgJmFyZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGRvdWJsZSBjbG9ja3Jh dGUoaW50IGk5MTUsIGludCByZWcpCit7CisJdm9sYXRpbGUgdWludDMyX3QgKm1taW87CisJdWlu dDMyX3Qgcl9zdGFydCwgcl9lbmQ7CisJc3RydWN0IHRpbWVzcGVjIHR2OworCXVpbnQ2NF90IHRf c3RhcnQsIHRfZW5kOworCXVpbnQ2NF90IGVsYXBzZWQ7CisJaW50IGNzX3RpbWVzdGFtcF9mcmVx OworCWRybV9pOTE1X2dldHBhcmFtX3QgZ3AgPSB7CisJCS52YWx1ZSA9ICZjc190aW1lc3RhbXBf ZnJlcSwKKwkJLnBhcmFtID0gSTkxNV9QQVJBTV9DU19USU1FU1RBTVBfRlJFUVVFTkNZLAorCX07 CisKKwlpZiAoaWd0X2lvY3RsKGk5MTUsIERSTV9JT0NUTF9JOTE1X0dFVFBBUkFNLCAmZ3ApID09 IDApCisJCXJldHVybiBjc190aW1lc3RhbXBfZnJlcTsKKworCW1taW8gPSAodm9sYXRpbGUgdWlu dDMyX3QgKikoKHZvbGF0aWxlIGNoYXIgKilpZ3RfZ2xvYmFsX21taW8gKyByZWcpOworCisJdF9z dGFydCA9IGlndF9uc2VjX2VsYXBzZWQoJnR2KTsKKwlyX3N0YXJ0ID0gKm1taW87CisJZWxhcHNl ZCA9IGlndF9uc2VjX2VsYXBzZWQoJnR2KSAtIHRfc3RhcnQ7CisKKwl1c2xlZXAoMTAwMCk7CisK Kwl0X2VuZCA9IGlndF9uc2VjX2VsYXBzZWQoJnR2KTsKKwlyX2VuZCA9ICptbWlvOworCWVsYXBz ZWQgKz0gaWd0X25zZWNfZWxhcHNlZCgmdHYpIC0gdF9lbmQ7CisKKwllbGFwc2VkID0gKHRfZW5k IC0gdF9zdGFydCkgKyBlbGFwc2VkIC8gMjsKKwlyZXR1cm4gKHJfZW5kIC0gcl9zdGFydCkgKiAx ZTkgLyBlbGFwc2VkOworfQorCisjZGVmaW5lIFJDU19USU1FU1RBTVAgKDB4MjAwMCArIDB4MzU4 KQorc3RhdGljIHZvaWQgYmF0Y2hfYnVmZmVyX3RpbWVkKHVpbnQzMl90IGZkLCB1aW50MzJfdCBj dHhfaWQsIHVuc2lnbmVkIGV4ZWNfaWQsCisJCQkJIHVpbnQzMl90IHRhcmdldCwgdWludDMyX3Qg b2Zmc2V0LAorCQkJCSB1aW50MzJfdCAqaGFuZGxlLCB1aW50NjRfdCB0aW1lb3V0LAorCQkJCSBp bnQgKmZlbmNlLCBpbnQgZmVuY2VfaW5kZXgpCit7CisgICAgc3RydWN0IGRybV9pOTE1X2dlbV9l eGVjX29iamVjdDIgb2JqWzJdOworICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9l bnRyeSByZWxvY1szXTsKKyAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNi dWY7CisgICAgdWludDMyX3QgYmF0Y2hbMTZdOworICAgIHVpbnQzMl90ICpiYXRjaF9wdHI7Cisg ICAgdWludDMyX3QgKmJhdGNoX2JvX3B0cjsKKyAgICB1aW50NjRfdCBkZWx0YTsKKyAgICB1aW50 MzJfdCB0aW1lc3RhbXBfb2Zmc2V0OworICAgIGZsb2F0IGVsYXBzZWRfdGltZTsKKyAgICB1aW50 MzJfdCBzdGFydF90aW1lc3RhbXAsIHN0b3BfdGltZXN0YW1wOworICAgIGNvbnN0IGludCBzdGFy dF90aW1lc3RhbXBfcG9zID0gMDsKKyAgICBjb25zdCBpbnQgc3RvcF90aW1lc3RhbXBfcG9zID0g MTsKKyAgICBkb3VibGUgcmNzX2Nsb2NrOworICAgIGludCBpID0gMDsKKworICAgIGdlbV9xdWll c2NlbnRfZ3B1KGZkKTsKKworICAgIHN3aXRjaCAoZXhlY19pZCAmIEk5MTVfRVhFQ19SSU5HX01B U0spIHsKKyAgICBjYXNlIEk5MTVfRVhFQ19SRU5ERVI6CisgICAgICAgICB0aW1lc3RhbXBfb2Zm c2V0ID0gMHgwMjM1ODsKKyAgICAgICAgIGJyZWFrOworICAgIGNhc2UgSTkxNV9FWEVDX0JTRDoK KyAgICAgICAgIHRpbWVzdGFtcF9vZmZzZXQgPSAweDEyMzU4OworICAgICAgICAgYnJlYWs7Cisg ICAgY2FzZSBJOTE1X0VYRUNfVkVCT1g6CisgICAgICAgICB0aW1lc3RhbXBfb2Zmc2V0ID0gMHgx YTM1ODsKKyAgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGlndF9hc3NlcnRf ZigwLCAiTm8gdGltZXN0YW1wIGZvciByaW5nLiIpOworICAgICAgICBicmVhazsKKyAgICB9CisK KyAgICBtZW1zZXQoJmV4ZWNidWYsIDAsIHNpemVvZihleGVjYnVmKSk7CisgICAgbWVtc2V0KCZv YmosIDAsIHNpemVvZihvYmopKTsKKyAgICBtZW1zZXQoJnJlbG9jLCAwLCBzaXplb2YocmVsb2Mp KTsKKworICAgIGV4ZWNidWYuYnVmZmVyc19wdHIgPSB0b191c2VyX3BvaW50ZXIob2JqKTsKKwor ICAgIGV4ZWNidWYuYnVmZmVyX2NvdW50ID0gMjsKKyAgICBleGVjYnVmLmZsYWdzID0gZXhlY19p ZCB8IEk5MTVfRVhFQ19GRU5DRV9PVVQgOworCisgICAgb2JqWzBdLmhhbmRsZSA9IHRhcmdldDsK KyAgICBvYmpbMV0uaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgNDA5Nik7CisgICAgb2JqWzFdLnJl bG9jYXRpb25fY291bnQgPSAzOworICAgIG9ialsxXS5yZWxvY3NfcHRyID0gdG9fdXNlcl9wb2lu dGVyKCZyZWxvYyk7CisKKyAgICBtZW1zZXQoYmF0Y2gsIDB4YzUsIHNpemVvZihiYXRjaCkpOwor CisgICAgYmF0Y2hbaSsrXSA9IE1JX1NUT1JFX1JFR0lTVEVSX01FTSB8ICg0IC0gMik7CisgICAg YmF0Y2hbaSsrXSA9IHRpbWVzdGFtcF9vZmZzZXQ7CisKKyAgICByZWxvY1swXS5vZmZzZXQgPSBp ICogc2l6ZW9mKHVpbnQzMl90KTsKKyAgICBiYXRjaFtpKytdID0gMHgwOworICAgIGJhdGNoW2kr K10gPSAweDA7CisKKyAgICAvKiBGaXJzdCByZWxvY2F0aW9uIG9uIEJ1ZmZlciBPYmplY3QgKi8K KyAgICByZWxvY1swXS50YXJnZXRfaGFuZGxlID0gb2JqWzBdLmhhbmRsZTsKKyAgICByZWxvY1sw XS5yZWFkX2RvbWFpbnMgPSBJOTE1X0dFTV9ET01BSU5fQ09NTUFORDsKKyAgICByZWxvY1swXS53 cml0ZV9kb21haW4gPSBJOTE1X0dFTV9ET01BSU5fQ09NTUFORDsKKworICAgIHJlbG9jWzBdLmRl bHRhID0gc3RhcnRfdGltZXN0YW1wX3BvcyAqIHNpemVvZih1aW50MzJfdCk7CisKKyAgICByZWxv Y1syXS5kZWx0YSA9IGkgKiBzaXplb2YodWludDMyX3QpOworICAgIGJhdGNoW2krK10gPSBNSV9T VE9SRV9SRUdJU1RFUl9NRU0gfCAoNCAtIDIpOworICAgIGJhdGNoW2krK10gPSB0aW1lc3RhbXBf b2Zmc2V0OworCisgICAgcmVsb2NbMV0ub2Zmc2V0ID0gaSAqIHNpemVvZih1aW50MzJfdCk7Cisg ICAgYmF0Y2hbaSsrXSA9IDB4NDsKKyAgICBiYXRjaFtpKytdID0gMHgwOworCisgICAgLyogU2Vj b25kIHJlbG9jYXRpb24gb24gQnVmZmVyIG9iamVjdCAqLworICAgIHJlbG9jWzFdLnRhcmdldF9o YW5kbGUgPSBvYmpbMF0uaGFuZGxlOworICAgIHJlbG9jWzFdLnJlYWRfZG9tYWlucyA9IEk5MTVf R0VNX0RPTUFJTl9DT01NQU5EOworICAgIHJlbG9jWzFdLndyaXRlX2RvbWFpbiA9IEk5MTVfR0VN X0RPTUFJTl9DT01NQU5EOworCisgICAgcmVsb2NbMV0uZGVsdGEgPSBzdG9wX3RpbWVzdGFtcF9w b3MgKiBzaXplb2YodWludDMyX3QpOworCisgICAgYmF0Y2hbaSsrXSA9IE1JX0JBVENIX0JVRkZF Ul9TVEFSVCB8ICgxIDw8IDgpIHwgKDMgLSAyKTsKKyAgICByZWxvY1syXS5vZmZzZXQgPSBpICog c2l6ZW9mKHVpbnQzMl90KTsKKyAgICBiYXRjaFtpKytdID0gTUlfTk9PUDsKKyAgICBiYXRjaFtp KytdID0gTUlfTk9PUDsKKworICAgIGJhdGNoW2krK10gPSBNSV9CQVRDSF9CVUZGRVJfRU5EOwor ICAgIGJhdGNoW2krK10gPSBNSV9OT09QOworCisgICAgZ2VtX3dyaXRlKGZkLCBvYmpbMV0uaGFu ZGxlLCAwLCAmYmF0Y2gsIHNpemVvZihiYXRjaCkpOworCisgICAgcmVsb2NbMl0udGFyZ2V0X2hh bmRsZSA9IG9ialsxXS5oYW5kbGU7CisgICAgcmVsb2NbMl0ucmVhZF9kb21haW5zID0gSTkxNV9H RU1fRE9NQUlOX0NPTU1BTkQ7CisKKyAgICBnZW1fc3luYyhmZCwgb2JqWzFdLmhhbmRsZSk7Cisg ICAgZXhlY2J1Zi5yc3ZkMSA9IGN0eF9pZDsKKyAgICBleGVjYnVmLnJzdmQyID0gLTE7CisKKyAg ICBnZW1fZXhlY2J1Zl93cihmZCwgJmV4ZWNidWYpOworCisgICAgYmF0Y2hfcHRyID0gZ2VtX21t YXBfX2NwdShmZCwgb2JqWzFdLmhhbmRsZSwgMCwgNDA5NiwgUFJPVF9SRUFEKTsKKyAgICBnZW1f c2V0X2RvbWFpbihmZCwgb2JqWzFdLmhhbmRsZSwgSTkxNV9HRU1fRE9NQUlOX0NQVSwgMCk7CisK KyAgICAvKiBSZWFkIHZhbHVlcyBmcm9tIEJPICovCisgICAgYmF0Y2hfYm9fcHRyID0gZ2VtX21t YXBfX2NwdShmZCwgb2JqWzBdLmhhbmRsZSwgMCwgNDA5NiwgUFJPVF9SRUFEKTsKKyAgICBnZW1f c2V0X2RvbWFpbihmZCwgb2JqWzBdLmhhbmRsZSwgSTkxNV9HRU1fRE9NQUlOX0NQVSwgMCk7CisK KyAgICBzdGFydF90aW1lc3RhbXAgPSBiYXRjaF9ib19wdHJbc3RhcnRfdGltZXN0YW1wX3Bvc107 CisgICAgc3RvcF90aW1lc3RhbXAgPSBiYXRjaF9ib19wdHJbc3RvcF90aW1lc3RhbXBfcG9zXTsK KworICAgIGRlbHRhID0gKHVpbnQ2NF90KXN0b3BfdGltZXN0YW1wIC0gKHVpbnQ2NF90KXN0YXJ0 X3RpbWVzdGFtcDsKKworICAgIGRlbHRhICs9IChkZWx0YSA+PSAwKSA/IDAgOiAweEZGRkZGRkZG OworCisgICAgcmNzX2Nsb2NrID0gY2xvY2tyYXRlKGZkLCBSQ1NfVElNRVNUQU1QKTsKKyAgICBp Z3RfaW5mbygiUkNTIHRpbWVzdGFtcCBjbG9jazogJS4wZktIeiwgJS4xZm5zXG4iLCByY3NfY2xv Y2sgLyAxZTMsIDFlOSAvIHJjc19jbG9jayk7CisgICAgcmNzX2Nsb2NrID0gMWU5IC8gcmNzX2Ns b2NrOworICAgIGVsYXBzZWRfdGltZSA9IGRlbHRhICogcmNzX2Nsb2NrOyAvLzEwXi05IFtzXQor ICAgIGVsYXBzZWRfdGltZSAvPSAxMDAwOyAvLzEwXi02IFtzXQorICAgIGVsYXBzZWRfdGltZSAv PSAxMDAwOyAvLzEwXi0zIFtzXQorCisgICAgaWYgKGRlbHRhIDw9IDApCisgICAgICAgIGlndF9h c3NlcnRfZigwLCAiTmVnYXRpdmUgdGltZSBlbGFwc2VkISIpOworCisgICAgcHJpbnRmKCJFbGFw c2VkIHRpbWUgaW4gc3RhcnRfdGltZXN0YW1wOiAlbGx1XG4iLCAodWludDY0X3Qpc3RhcnRfdGlt ZXN0YW1wKTsKKyAgICBwcmludGYoIkVsYXBzZWQgdGltZSBpbiBzdG9wX3RpbWVzdGFtcDogJWxs dVxuIiwgKHVpbnQ2NF90KXN0b3BfdGltZXN0YW1wKTsKKyAgICBwcmludGYoIkVsYXBzZWQgdGlt ZSBpbiBtaWxsaXNlY29uZHM6ICVmXG4iLCBlbGFwc2VkX3RpbWUpOworICAgIGZsb2F0IHRociA9 IFdBVENIRE9HX1RIUkVTSE9MRDsKKyAgICBwcmludGYoIlRvdGFsIFRpbWVvdXQgZHVyaW5nIHRo ZSBoYW5nOiAlZlxuIiwgZWxhcHNlZF90aW1lIC0gdGhyLzEwMDAuICk7CisKKyAgICBmZW5jZVtm ZW5jZV9pbmRleF0gPSBleGVjYnVmLnJzdmQyID4+IDMyOworCisgICAgZ2VtX2Nsb3NlKGZkLCBv YmpbMV0uaGFuZGxlKTsKKyAgICBnZW1fcXVpZXNjZW50X2dwdShmZCk7Cit9CisKK3N0YXRpYyB2 b2lkIGJhdGNoX2J1ZmZlcl9mYWN0b3J5KHVpbnQzMl90IGZkLCB1aW50MzJfdCBjdHhfaWQsIHVu c2lnbmVkIGV4ZWNfaWQsCisJCQkJIHVpbnQzMl90IHRhcmdldCwgdWludDMyX3Qgb2Zmc2V0LAor CQkJCSB1aW50MzJfdCAqaGFuZGxlLCB1aW50NjRfdCB0aW1lb3V0LAorCQkJCSBpbnQgKmZlbmNl LCBpbnQgZmVuY2VfaW5kZXgpCit7CisgICAgc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVj dDIgb2JqWzJdOworICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSByZWxv YzsKKyAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWY7CisgICAgaWd0 X3NwaW5fdCAqc3BpbiA9IE5VTEw7CisgICAgY29uc3QgdWludDMyX3QgYmJlID0gTUlfQkFUQ0hf QlVGRkVSX0VORDsKKyAgICBpbnQgaSA9IDA7CisKKyAgICBnZW1fcXVpZXNjZW50X2dwdShmZCk7 CisKKyAgICBtZW1zZXQoJmV4ZWNidWYsIDAsIHNpemVvZihleGVjYnVmKSk7CisgICAgbWVtc2V0 KCZvYmosIDAsIHNpemVvZihvYmopKTsKKyAgICBtZW1zZXQoJnJlbG9jLCAwLCBzaXplb2YocmVs b2MpKTsKKworICAgIGV4ZWNidWYuYnVmZmVyc19wdHIgPSB0b191c2VyX3BvaW50ZXIob2JqKTsK KworICAgIGV4ZWNidWYuYnVmZmVyX2NvdW50ID0gMjsKKyAgICBleGVjYnVmLmZsYWdzID0gZXhl Y19pZCB8IEk5MTVfRVhFQ19GRU5DRV9PVVQgOworCisgICAgb2JqWzBdLmhhbmRsZSA9IHRhcmdl dDsKKyAgICBvYmpbMV0uaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgNDA5Nik7CisKKyAgICBvYmpb MV0ucmVsb2NhdGlvbl9jb3VudCA9IDE7CisgICAgb2JqWzFdLnJlbG9jc19wdHIgPSB0b191c2Vy X3BvaW50ZXIoJnJlbG9jKTsKKworICAgIHJlbG9jLnRhcmdldF9oYW5kbGUgPSBvYmpbMF0uaGFu ZGxlOworICAgIHJlbG9jLnJlYWRfZG9tYWlucyA9IEk5MTVfR0VNX0RPTUFJTl9DT01NQU5EOwor ICAgIHJlbG9jLndyaXRlX2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9DT01NQU5EOworICAgIHJl bG9jLmRlbHRhID0gb2Zmc2V0ICogc2l6ZW9mKHVpbnQzMl90KTsKKworICAgIHJlbG9jLm9mZnNl dCA9IGkgKiBzaXplb2YodWludDMyX3QpOworICAgIGdlbV93cml0ZShmZCwgb2JqWzFdLmhhbmRs ZSwgMCwgJmJiZSwgc2l6ZW9mKGJiZSkpOworCisgICAgZ2VtX3N5bmMoZmQsIG9ialsxXS5oYW5k bGUpOworICAgIGV4ZWNidWYucnN2ZDEgPSBjdHhfaWQ7CisgICAgZXhlY2J1Zi5yc3ZkMiA9IC0x OworCisgICAgc3BpbiA9IGlndF9zcGluX25ldyhmZCwKKwkJCS5kZXBlbmRlbmN5ID0gb2JqWzBd LmhhbmRsZSwKKwkJCS5lbmdpbmUgPSBleGVjX2lkLAorCQkJLmZsYWdzID0gSUdUX1NQSU5fRkVO Q0VfT1VUKTsKKyAgICBpZ3RfYXNzZXJ0KHNwaW4tPm91dF9mZW5jZSAhPSAtMSk7CisgICAgaWd0 X3NwaW5fc2V0X3RpbWVvdXQoc3BpbiwgdGltZW91dCk7CisgICAgaWd0X2Fzc2VydChnZW1fYm9f YnVzeShmZCwgb2JqWzBdLmhhbmRsZSkpOworCisgICAgZ2VtX2V4ZWNidWZfd3IoZmQsICZleGVj YnVmKTsKKyAgICBpZ3Rfc3Bpbl9mcmVlKGZkLCBzcGluKTsKKworICAgIGZlbmNlW2ZlbmNlX2lu ZGV4XSA9IHNwaW4tPm91dF9mZW5jZTsvL2V4ZWNidWYucnN2ZDIgPj4gMzI7CisKKyAgICBnZW1f Y2xvc2UoZmQsIG9ialsxXS5oYW5kbGUpOworICAgIGdlbV9xdWllc2NlbnRfZ3B1KGZkKTsKK30K Kworc3RhdGljIHZvaWQgaW5qZWN0X2hhbmcodWludDMyX3QgZmQsIHVuc2lnbmVkIGVuZ2luZV9p ZCwgdWludDMyX3QgY3R4X2lkLAorCQkJIHVuc2lnbmVkIGZsYWdzKQoreworCWlndF9oYW5nX3Qg aGFuZzsKKwloYW5nID0gaWd0X2hhbmdfY3R4KGZkLCBjdHhfaWQsIGVuZ2luZV9pZCwgZmxhZ3Mp OworCWdlbV9zeW5jKGZkLCBoYW5nLnNwaW4tPmhhbmRsZSk7Cit9CisKKy8qIAorICogVGVzdCMx OiBXcml0ZSB0aGUgaW5pdGlhbCB0aW1lc3RhbXAgdG8gc2NyYXRjaCwgYW5kIHdyaXRlIGEgc2Vj b25kCisgKiB0aW1lc3RhbXAgYW5kIHJlY3Vyc2UgYmFjayB0byB3cml0aW5nIHRoZSBzZWNvbmQg dGltZXN0YW1wLgorICogQ29tcGFyZSB0aGUgdHdvIHRpbWVzdGFtcHMgdG8gc2VlIGhvdyBsb25n IGl0IGV4ZWN1dGVkIGZvci4gCisgKi8KK3N0YXRpYyB2b2lkIGxvbmdfYmF0Y2hfdGVzdDEoaW50 IGZkLCBpbnQgcHJpbzEsIGludCBwcmlvMiwgaW50IHJlc2V0X2N0eDEsCisJCQlpbnQgcmVzZXRf Y3R4MiwgdW5zaWduZWQgdGhyZXNob2xkKQoreworCXVuc2lnbmVkIGVuZ2luZV9pZCA9IDA7CisJ dW5zaWduZWQgbmVuZ2luZSA9IDA7CisJc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICpl XzsKKwlzdHJ1Y3QgeworCQl1aW50MzJfdCBjdHhbTUFYX0VOR0lORVNdOworCQl1aW50MzJfdCBz Y3JhdGNoW01BWF9FTkdJTkVTXTsKKwl9IGJvWzJdOworCWludCAqZmVuY2UsIGkgPSAwOworCWNv bnN0IHVpbnQ2NF90IGJhdGNoX3RpbWVvdXRfbXMgPSB0aW1lb3V0XzEwMG1zICogNDsKKworCWZl bmNlID0gbWFsbG9jKHNpemVvZihpbnQpICogTUFYX0VOR0lORVMpOworCWlndF9hc3NlcnQoZmVu Y2UpOworCisJX19mb3JfZWFjaF9waHlzaWNhbF9lbmdpbmUoZmQsIGVfKSB7CisJCWVuZ2luZV9p ZCA9IGVfLT5mbGFnczsKKworCQlib1swXS5zY3JhdGNoW25lbmdpbmVdID0gZ2VtX2NyZWF0ZShm ZCwgNDA5Nik7CisJCWJvWzBdLmN0eFtuZW5naW5lXSA9IGdlbV9jb250ZXh0X2NyZWF0ZShmZCk7 CisJCWdlbV9jb250ZXh0X3NldF9wcmlvcml0eShmZCwgYm9bMF0uY3R4W25lbmdpbmVdLCBwcmlv MSk7CisKKwkJaWYobmVuZ2luZSA8IDEpeworCQlpZiAoY29udGV4dF9zZXRfd2F0Y2hkb2coZmQs IGVuZ2luZV9pZCwgZV8tPm5hbWUsCisJCQkJCSBib1swXS5jdHhbbmVuZ2luZV0sCisJCQkJCSB0 aHJlc2hvbGQpID09IC1FTk9ERVYpIHsKKwkJCWlndF9pbmZvKCJObyBzdXBwb3J0IGZvciBncHUg aC93IHdhdGNoZG9nIG9uICVzXG4iLAorCQkJIGVfLT5uYW1lKTsKKwkJCWdvdG8gc2tpcF9jYXNl OworCQl9CisKKwkJYmF0Y2hfYnVmZmVyX3RpbWVkKGZkLCBib1swXS5jdHhbbmVuZ2luZV0sIGVu Z2luZV9pZCwKKwkJCQkgYm9bMF0uc2NyYXRjaFtuZW5naW5lXSwgMCwgTlVMTCwKKwkJCQkgYmF0 Y2hfdGltZW91dF9tcywgZmVuY2UsIG5lbmdpbmUpOworCisJCWlndF9hc3NlcnRfZXEoc3luY19m ZW5jZV9zdGF0dXMoKmZlbmNlKSwgLUVJTyk7CisJCWlndF9pbmZvKCJUZXN0ICMxOiBiYXRjaF9i dWZmZXJfdGltZWQgLS0+IGV4ZWN1dGUgb24gJXNcbiIsZV8tPm5hbWUpOworCQl9Citza2lwX2Nh c2U6CisJCW5lbmdpbmUrKzsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgLypuZW5naW5lKi8xOyBp KyspIHsKKwkJY2xvc2UoZmVuY2VbaV0pOworCQlnZW1fY29udGV4dF9kZXN0cm95KGZkLCBib1sw XS5jdHhbaV0pOworCQlnZW1fY2xvc2UoZmQsIGJvWzBdLnNjcmF0Y2hbaV0pOworCX0KK30KKwor LyoKKyAqIFRlc3QjMjogQ3JlYXRlIHNvbWUgd29yayBhbmQgbGV0IGl0IHJ1biBvbiBhbGwgZW5n aW5lcworICovCitzdGF0aWMgdm9pZCBsb25nX2JhdGNoX3Rlc3QyKGludCBmZCwgaW50IHByaW8x LCBpbnQgcHJpbzIsIGludCByZXNldF9jdHgxLAorCQkJaW50IHJlc2V0X2N0eDIsIHVuc2lnbmVk IHRocmVzaG9sZCkKK3sKKwl1bnNpZ25lZCBlbmdpbmVfaWQgPSAwOworCXVuc2lnbmVkIG5lbmdp bmUgPSAwOworCXN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZV87CisJc3RydWN0IHsK KwkJdWludDMyX3QgY3R4W01BWF9FTkdJTkVTXTsKKwkJdWludDMyX3Qgc2NyYXRjaFtNQVhfRU5H SU5FU107CisJfSBib1syXTsKKwlpbnQgKmZlbmNlLCBpID0gMDsKKwljb25zdCB1aW50NjRfdCBi YXRjaF90aW1lb3V0X21zID0gdGltZW91dF8xMDBtcyAqIDQ7CisKKwlmZW5jZSA9IG1hbGxvYyhz aXplb2YoaW50KSAqIE1BWF9FTkdJTkVTKTsKKwlpZ3RfYXNzZXJ0KGZlbmNlKTsKKworCV9fZm9y X2VhY2hfcGh5c2ljYWxfZW5naW5lKGZkLCBlXykgeworCQllbmdpbmVfaWQgPSBlXy0+ZmxhZ3M7 CisKKwkJYm9bMV0uc2NyYXRjaFtuZW5naW5lXSA9IGdlbV9jcmVhdGUoZmQsIDQwOTYpOworCQli b1sxXS5jdHhbbmVuZ2luZV0gPSBnZW1fY29udGV4dF9jcmVhdGUoZmQpOworCQlnZW1fY29udGV4 dF9zZXRfcHJpb3JpdHkoZmQsIGJvWzFdLmN0eFtuZW5naW5lXSwgcHJpbzIpOworCQliYXRjaF9i dWZmZXJfZmFjdG9yeShmZCwgYm9bMV0uY3R4W25lbmdpbmVdLCBlbmdpbmVfaWQsCisJCQkJIGJv WzFdLnNjcmF0Y2hbbmVuZ2luZV0sIDAsIE5VTEwsCisJCQkJIGJhdGNoX3RpbWVvdXRfbXMsIGZl bmNlLCBuZW5naW5lKTsKKworCQlib1swXS5zY3JhdGNoW25lbmdpbmVdID0gZ2VtX2NyZWF0ZShm ZCwgNDA5Nik7CisJCWJvWzBdLmN0eFtuZW5naW5lXSA9IGdlbV9jb250ZXh0X2NyZWF0ZShmZCk7 CisJCWdlbV9jb250ZXh0X3NldF9wcmlvcml0eShmZCwgYm9bMF0uY3R4W25lbmdpbmVdLCBwcmlv MSk7CisJCWJhdGNoX2J1ZmZlcl9mYWN0b3J5KGZkLCBib1swXS5jdHhbbmVuZ2luZV0sIGVuZ2lu ZV9pZCwKKwkJCQkgYm9bMF0uc2NyYXRjaFtuZW5naW5lXSwgMCwgTlVMTCwKKwkJCQkgYmF0Y2hf dGltZW91dF9tcywgZmVuY2UsIG5lbmdpbmUpOworCQlpZ3RfaW5mbygiVGVzdCAjMjogY3R4MS9j dHgyIC0tPiBleGVjdXRlIG9uICVzIgorCQkJIiB3aXRoIGZlbmNlOiAlZFxuIixlXy0+bmFtZSwg c3luY19mZW5jZV9zdGF0dXMoKmZlbmNlKSk7CisJCW5lbmdpbmUrKzsKKwl9CisKKwlmb3IgKGkg PSAwOyBpIDwgbmVuZ2luZTsgaSsrKSB7CisJCWNsb3NlKGZlbmNlW2ldKTsKKwkJZ2VtX2NvbnRl eHRfZGVzdHJveShmZCwgYm9bMF0uY3R4W2ldKTsKKwkJZ2VtX2NvbnRleHRfZGVzdHJveShmZCwg Ym9bMV0uY3R4W2ldKTsKKwkJZ2VtX2Nsb3NlKGZkLCBib1swXS5zY3JhdGNoW2ldKTsKKwkJZ2Vt X2Nsb3NlKGZkLCBib1sxXS5zY3JhdGNoW2ldKTsKKwl9Cit9CisKK3ZvaWQgc2xlZXBfbnNlYyhp bnQgbXMpIHsKKwlzdHJ1Y3QgdGltZXNwZWMgcmVxID0gezB9OworCXJlcS50dl9zZWMgPSAwOwor CXJlcS50dl9uc2VjID0gbXMgKiAxMDAwMDAwTDsKKwluYW5vc2xlZXAoJnJlcSwgKHN0cnVjdCB0 aW1lc3BlYyAqKU5VTEwpOworfQorCisvKgorICogVGVzdCMzOiBTdWJtaXQgYSBsb25nIGJhdGNo IGFuZCBhZnRlciBoYWxmIG9mIHRoZSBleHBlY3RlZCBydW50aW1lCisgKiBzdWJtaXQgYSBoaWdo ZXIgcHJpb3JpdHkgYmF0Y2ggYW5kIHRoZW4gdHJ5IHRvIGNhbmNlbCB0aGUgZXhlY3V0aW9uCisg Ki8KK3N0YXRpYyB2b2lkIGxvbmdfYmF0Y2hfdGVzdDMoaW50IGZkLCBpbnQgcHJpbzEsIGludCBw cmlvMiwgaW50IHJlc2V0X2N0eDEsCisJCQlpbnQgcmVzZXRfY3R4MiwgdW5zaWduZWQgdGhyZXNo b2xkKQoreworCXVuc2lnbmVkIGVuZ2luZV9pZCA9IDA7CisJdW5zaWduZWQgbmVuZ2luZSA9IDA7 CisJc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplXzsKKwlzdHJ1Y3QgeworCQl1aW50 MzJfdCBjdHhbTUFYX0VOR0lORVNdOworCQl1aW50MzJfdCBzY3JhdGNoW01BWF9FTkdJTkVTXTsK Kwl9IGJvWzJdOworCWludCAqZmVuY2UsIGkgPSAwOworCXVuc2lnbmVkIGZsYWdzID0gSEFOR19B TExPV19DQVBUVVJFOworCWNvbnN0IHVpbnQ2NF90IGJhdGNoX3RpbWVvdXRfbXMgPSB0aW1lb3V0 XzEwMG1zICogNDsKKworCWZlbmNlID0gbWFsbG9jKHNpemVvZihpbnQpICogTUFYX0VOR0lORVMp OworCWlndF9hc3NlcnQoZmVuY2UpOworCisJbmVuZ2luZSA9IDA7CisKKwlfX2Zvcl9lYWNoX3Bo eXNpY2FsX2VuZ2luZShmZCwgZV8pIHsKKwkJZW5naW5lX2lkID0gZV8tPmZsYWdzOworCisJCWJv WzFdLnNjcmF0Y2hbbmVuZ2luZV0gPSBnZW1fY3JlYXRlKGZkLCA0MDk2KTsKKwkJYm9bMV0uY3R4 W25lbmdpbmVdID0gZ2VtX2NvbnRleHRfY3JlYXRlKGZkKTsKKwkJZ2VtX2NvbnRleHRfc2V0X3By aW9yaXR5KGZkLCBib1sxXS5jdHhbbmVuZ2luZV0sIHByaW8yKTsKKwkJYmF0Y2hfYnVmZmVyX2Zh Y3RvcnkoZmQsIGJvWzFdLmN0eFtuZW5naW5lXSwgZW5naW5lX2lkLAorCQkJCSBib1sxXS5zY3Jh dGNoW25lbmdpbmVdLCAwLCBOVUxMLAorCQkJCSBiYXRjaF90aW1lb3V0X21zLCBmZW5jZSwgbmVu Z2luZSk7CisKKwkJc2xlZXBfbnNlYyh0aW1lb3V0XzEwMG1zICogMik7CisKKwkJYm9bMF0uc2Ny YXRjaFtuZW5naW5lXSA9IGdlbV9jcmVhdGUoZmQsIDQwOTYpOworCQlib1swXS5jdHhbbmVuZ2lu ZV0gPSBnZW1fY29udGV4dF9jcmVhdGUoZmQpOworCQlnZW1fY29udGV4dF9zZXRfcHJpb3JpdHko ZmQsIGJvWzBdLmN0eFtuZW5naW5lXSwgcHJpbzEpOworCQliYXRjaF9idWZmZXJfZmFjdG9yeShm ZCwgYm9bMF0uY3R4W25lbmdpbmVdLCBlbmdpbmVfaWQsCisJCQkJIGJvWzBdLnNjcmF0Y2hbbmVu Z2luZV0sIDAsIE5VTEwsCisJCQkJIGJhdGNoX3RpbWVvdXRfbXMsIGZlbmNlLCBuZW5naW5lKTsK KworCQlpZiAoY29udGV4dF9zZXRfd2F0Y2hkb2coZmQsIGVuZ2luZV9pZCwgZV8tPm5hbWUsCisJ CQkJCSBib1swXS5jdHhbbmVuZ2luZV0sCisJCQkJCSB0aHJlc2hvbGQpID09IC1FTk9ERVYpIHsK KwkJCWlndF9pbmZvKCJObyBzdXBwb3J0IGZvciBncHUgaC93IHdhdGNoZG9nIG9uICVzXG4iLAor CQkJIGVfLT5uYW1lKTsKKwkJCWdvdG8gc2tpcF9jYXNlOworCQl9CisJCWNsZWFyX2Vycm9yX3N0 YXRlKGZkKTsKKwkJaW5qZWN0X2hhbmcoZmQsIGVuZ2luZV9pZCwgYm9bMF0uY3R4W25lbmdpbmVd LCBmbGFncyk7CisJCS8qIE5vdyBjaGVjayB0aGUgZW5naW5lIHdhcyByZXNldCBzdWNjZXNzZnVs bHkgKi8KKwkJLy9pZ3RfYXNzZXJ0X2VxKHN5bmNfZmVuY2Vfc3RhdHVzKCpmZW5jZSksIC1FSU8p OworCQlpZ3RfaW5mbygiVGVzdCAjMyBjdHgxL2N0eDIgLS0+IHNldCB3YXRjaGRvZyBhbmQiCisJ CQkJIiBjYW5jZWwgY3R4MiBhdCBoYWxmIGV4cGVjdGVkIHJ1biB3aXRoIGhpZ2hlciIKKwkJCQki IHByaW9yaXR5IGVuZ2luZTogJXMsIGZlbmNlIHN0YXR1czogJWQgXG4iLAorCQkJCQllXy0+bmFt ZSwgc3luY19mZW5jZV9zdGF0dXMoKmZlbmNlKSk7Citza2lwX2Nhc2U6CisJCW5lbmdpbmUrKzsK Kwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbmVuZ2luZTsgaSsrKSB7CisJCWNsb3NlKGZlbmNlW2ld KTsKKwkJZ2VtX2NvbnRleHRfZGVzdHJveShmZCwgYm9bMF0uY3R4W2ldKTsKKwkJZ2VtX2NvbnRl eHRfZGVzdHJveShmZCwgYm9bMV0uY3R4W2ldKTsKKwkJZ2VtX2Nsb3NlKGZkLCBib1swXS5zY3Jh dGNoW2ldKTsKKwkJZ2VtX2Nsb3NlKGZkLCBib1sxXS5zY3JhdGNoW2ldKTsKKwl9Cit9CisKKy8q CisgKiBUZXN0IzQ6IENyZWF0ZSAyIGN0eCwgc2V0IGEgZ3B1IHdhdGNoZG9nIHRpbWVvdXQgb24g Ym90aCwKKyAqIGFuZCBlaXRoZXIgZXhlY3V0ZSBvciBjYW5jZWwgdGhlIGV4ZWN1dGlvbi4KKyAq Lworc3RhdGljIHZvaWQgbG9uZ19iYXRjaF90ZXN0NChpbnQgZmQsIGludCBwcmlvMSwgaW50IHBy aW8yLCBpbnQgcmVzZXRfY3R4MSwKKwkJCWludCByZXNldF9jdHgyLCB1bnNpZ25lZCB0aHJlc2hv bGQpCit7CisJdW5zaWduZWQgZW5naW5lX2lkID0gMDsKKwl1bnNpZ25lZCBuZW5naW5lID0gMDsK KwlzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmVfOworCXN0cnVjdCB7CisJCXVpbnQz Ml90IGN0eFtNQVhfRU5HSU5FU107CisJCXVpbnQzMl90IHNjcmF0Y2hbTUFYX0VOR0lORVNdOwor CX0gYm9bMl07CisJaW50ICpmZW5jZSwgaSA9IDA7CisJdW5zaWduZWQgZmxhZ3MgPSBIQU5HX0FM TE9XX0NBUFRVUkU7CisJY29uc3QgdWludDY0X3QgYmF0Y2hfdGltZW91dF9tcyA9IHRpbWVvdXRf MTAwbXMgKiA0OworCisJZmVuY2UgPSBtYWxsb2Moc2l6ZW9mKGludCkgKiBNQVhfRU5HSU5FUyk7 CisJaWd0X2Fzc2VydChmZW5jZSk7CisKKwluZW5naW5lID0gMDsKKworCV9fZm9yX2VhY2hfcGh5 c2ljYWxfZW5naW5lKGZkLCBlXykgeworCQllbmdpbmVfaWQgPSBlXy0+ZmxhZ3M7CisKKwkJYm9b MV0uc2NyYXRjaFtuZW5naW5lXSA9IGdlbV9jcmVhdGUoZmQsIDQwOTYpOworCQlib1sxXS5jdHhb bmVuZ2luZV0gPSBnZW1fY29udGV4dF9jcmVhdGUoZmQpOworCQlnZW1fY29udGV4dF9zZXRfcHJp b3JpdHkoZmQsIGJvWzFdLmN0eFtuZW5naW5lXSwgcHJpbzIpOworCQliYXRjaF9idWZmZXJfZmFj dG9yeShmZCwgYm9bMV0uY3R4W25lbmdpbmVdLCBlbmdpbmVfaWQsCisJCQkJIGJvWzFdLnNjcmF0 Y2hbbmVuZ2luZV0sIDAsIE5VTEwsCisJCQkJIGJhdGNoX3RpbWVvdXRfbXMsIGZlbmNlLCBuZW5n aW5lKTsKKworCQlib1swXS5zY3JhdGNoW25lbmdpbmVdID0gZ2VtX2NyZWF0ZShmZCwgNDA5Nik7 CisJCWJvWzBdLmN0eFtuZW5naW5lXSA9IGdlbV9jb250ZXh0X2NyZWF0ZShmZCk7CisJCWdlbV9j b250ZXh0X3NldF9wcmlvcml0eShmZCwgYm9bMF0uY3R4W25lbmdpbmVdLCBwcmlvMSk7CisJCWJh dGNoX2J1ZmZlcl9mYWN0b3J5KGZkLCBib1swXS5jdHhbbmVuZ2luZV0sIGVuZ2luZV9pZCwKKwkJ CQkgYm9bMF0uc2NyYXRjaFtuZW5naW5lXSwgMCwgTlVMTCwKKwkJCQkgYmF0Y2hfdGltZW91dF9t cywgZmVuY2UsIG5lbmdpbmUpOworCisJCWlmIChjb250ZXh0X3NldF93YXRjaGRvZyhmZCwgZW5n aW5lX2lkLCBlXy0+bmFtZSwKKwkJCQkJIGJvWzFdLmN0eFtuZW5naW5lXSwKKwkJCQkJIHRocmVz aG9sZCkgPT0gLUVOT0RFVikgeworCQkJaWd0X2luZm8oIk5vIHN1cHBvcnQgZm9yIGdwdSBoL3cg d2F0Y2hkb2cgb24gJXNcbiIsCisJCQkgZV8tPm5hbWUpOworCQkJZ290byBza2lwX2Nhc2U7CisJ CX0KKworCQlpZiAocmVzZXRfY3R4MikgeworCQkJY2xlYXJfZXJyb3Jfc3RhdGUoZmQpOworCQkJ aW5qZWN0X2hhbmcoZmQsIGVuZ2luZV9pZCwgYm9bMV0uY3R4W25lbmdpbmVdLCBmbGFncyk7CisK KwkJCS8qIE5vdyBjaGVjayB0aGUgZW5naW5lIHdhcyByZXNldCBzdWNjZXNzZnVsbHkgKi8KKwkJ CS8vaWd0X2Fzc2VydF9lcSgqZmVuY2UsIEVJTyk7CisJCQlpZ3RfaW5mbygiVGVzdCAjNCBjdHgx L2N0eDIgLS0+IHNldCB3YXRjaGRvZyBhbmQiCisJCQkJIiBjYW5jZWwgY3R4MiBvbiAlcyB3aXRo IGZlbmNlIHN0YXR1czogJWQgXG4iLAorCQkJCQllXy0+bmFtZSwgc3luY19mZW5jZV9zdGF0dXMo KmZlbmNlKSk7CisJCX0KKworCQljb250ZXh0X3NldF93YXRjaGRvZyhmZCwgZW5naW5lX2lkLCBl Xy0+bmFtZSwKKwkJCQkJIGJvWzBdLmN0eFtuZW5naW5lXSwKKwkJCQkJIHRocmVzaG9sZCk7CisJ CWlmIChyZXNldF9jdHgxKSB7CisJCQljbGVhcl9lcnJvcl9zdGF0ZShmZCk7CisJCQlpbmplY3Rf aGFuZyhmZCwgZW5naW5lX2lkLCBib1swXS5jdHhbbmVuZ2luZV0sIGZsYWdzKTsKKworCQkJLyog Tm93IGNoZWNrIHRoZSBlbmdpbmUgd2FzIHJlc2V0IHN1Y2Nlc3NmdWxseSAqLworCQkJLy9pZ3Rf YXNzZXJ0X2VxKCpmZW5jZSwgRUlPKTsKKwkJCWlndF9pbmZvKCJUZXN0ICM0OiBjdHgxL2N0eDIg LS0+IHNldCB3YXRjaGRvZyBhbmQiCisJCQkJIiBjYW5jZWwgY3R4MSBvbiAlcyB3aXRoIGZlbmNl IHN0YXR1czogJWRcbiIsCisJCQkJZV8tPm5hbWUsIHN5bmNfZmVuY2Vfc3RhdHVzKCpmZW5jZSkp OworCQl9Citza2lwX2Nhc2U6CisJCW5lbmdpbmUrKzsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwg bmVuZ2luZTsgaSsrKSB7CisJCWNsb3NlKGZlbmNlW2ldKTsKKwkJZ2VtX2NvbnRleHRfZGVzdHJv eShmZCwgYm9bMF0uY3R4W2ldKTsKKwkJZ2VtX2NvbnRleHRfZGVzdHJveShmZCwgYm9bMV0uY3R4 W2ldKTsKKwkJZ2VtX2Nsb3NlKGZkLCBib1swXS5zY3JhdGNoW2ldKTsKKwkJZ2VtX2Nsb3NlKGZk LCBib1sxXS5zY3JhdGNoW2ldKTsKKwl9Cit9CisKK2lndF9tYWluCit7CisJaW50IGZkOworCXVu c2lnbmVkIGludCBpPTA7CisJc3RydWN0IHsKKwkJY2hhciAqbmFtZTsKKwkJaW50IHByaW9bMl07 CisJCWJvb2wgcmVzZXRbMl07CisJCXVuc2lnbmVkIHRocmVzaG9sZDsKKwl9IHRlc3RzW10gPSB7 CisJCXsiY3R4MS1zY3JhdGNoLXRpbWVzdGFtcCIsCisJCXtERUZBVUxUX1BSSU8sIERFRkFVTFRf UFJJT30sIHtmYWxzZSwgZmFsc2V9LCBXQVRDSERPR19USFJFU0hPTER9LAorCQl7ImN0eDEtZXhl Yy1jdHgyLWV4ZWMtYWxsLWVuZ2luZXMiLAorCQl7REVGQVVMVF9QUklPLCBERUZBVUxUX1BSSU99 LCB7ZmFsc2UsIGZhbHNlfSwgV0FUQ0hET0dfVEhSRVNIT0xEfSwKKwkJeyJjdHgxLWxvdy1wcmlv LWV4ZWMtY3R4Mi1oaWdoLXByaW8tcmVzZXQtYWZ0ZXItaGFsZi10aW1lLWFsbC1lbmdpbmVzIiwK KwkJe01BWF9QUklPLCBNSU5fUFJJT30sIHtmYWxzZSwgZmFsc2V9LCBXQVRDSERPR19USFJFU0hP TER9LAorCQl7ImN0eDEtcmVzZXQtY3R4Mi1leGVjLWFsbC1lbmdpbmVzIiwKKwkJe0RFRkFVTFRf UFJJTywgREVGQVVMVF9QUklPfSwge3RydWUsIGZhbHNlfSwgV0FUQ0hET0dfVEhSRVNIT0xEfSwK KwkJeyJjdHgxLXJlc2V0LWN0eDItZXhlYy1hbGwtZW5naW5lcy1iZWxvdy10aHJlc2hvbGQiLAor CQl7REVGQVVMVF9QUklPLCBERUZBVUxUX1BSSU99LCB7dHJ1ZSwgZmFsc2V9LAorCQkgV0FUQ0hE T0dfQkVMT1dfVEhSRVNIT0xEfSwKKwkJeyJjdHgxLXJlc2V0LWN0eDItZXhlYy1hbGwtZW5naW5l cy1vdmVyLXRocmVzaG9sZCIsCisJCXtERUZBVUxUX1BSSU8sIERFRkFVTFRfUFJJT30sIHt0cnVl LCBmYWxzZX0sCisJCSBXQVRDSERPR19PVkVSX1RIUkVTSE9MRH0sCisJCXsiY3R4Mi1yZXNldC1j dHgxLWV4ZWMtYWxsLWVuZ2luZXMiLAorCQl7REVGQVVMVF9QUklPLCBERUZBVUxUX1BSSU99LCB7 ZmFsc2UsIHRydWV9LCBXQVRDSERPR19USFJFU0hPTER9LAorCQl7ImN0eDItcmVzZXQtY3R4MS1y ZXNldC1hbGwtZW5naW5lcyIsCisJCXtERUZBVUxUX1BSSU8sIERFRkFVTFRfUFJJT30sIHt0cnVl LCB0cnVlfSwgV0FUQ0hET0dfVEhSRVNIT0xEfSwKKwkJeyJjdHgxLWhpZ2gtcHJpby1yZXNldC1j dHgyLWxvdy1wcmlvLWV4ZWMtYWxsLWVuZ2luZXMiLAorCQl7TUFYX1BSSU8sIE1JTl9QUklPfSwg e3RydWUsIGZhbHNlfSwgV0FUQ0hET0dfVEhSRVNIT0xEfSwKKwkJeyJjdHgxLWxvdy1wcmlvLXJl c2V0LWN0eDItaGlnaC1wcmlvLWV4ZWMtYWxsLWVuZ2luZXMiLAorCQl7TUlOX1BSSU8sIE1BWF9Q UklPfSwge3RydWUsIGZhbHNlfSwgV0FUQ0hET0dfVEhSRVNIT0xEfSwKKwkJeyJjdHgxLWxvdy1w cmlvLXJlc2V0LWN0eDItaGlnaC1wcmlvLXJlc2V0LWFsbC1lbmdpbmVzIiwKKwkJe01JTl9QUklP LCBNQVhfUFJJT30sIHt0cnVlLCB0cnVlfSwgV0FUQ0hET0dfVEhSRVNIT0xEfSwKKwl9OworCisJ aWd0X3NraXBfb25fc2ltdWxhdGlvbigpOworCisJaWd0X2ZpeHR1cmUgeworCQlmZCA9IGRybV9v cGVuX2RyaXZlcihEUklWRVJfSU5URUwpOworCQlpZ3RfcmVxdWlyZV9nZW0oZmQpOworCX0KKwor CWlndF9zdWJ0ZXN0X2dyb3VwIHsKKwkJaWd0X3N1YnRlc3RfZigiJXMiLCB0ZXN0c1swXS5uYW1l KSB7CisJCQlsb25nX2JhdGNoX3Rlc3QxKCBmZCwgdGVzdHNbMF0ucHJpb1swXSwKKwkJCQkJdGVz dHNbMF0ucHJpb1sxXSwKKwkJCQkJdGVzdHNbMF0ucmVzZXRbMF0sCisJCQkJCXRlc3RzWzBdLnJl c2V0WzFdLAorCQkJCQl0ZXN0c1swXS50aHJlc2hvbGQpOworCQl9CisKKwkJaWd0X3N1YnRlc3Rf ZigiJXMiLCB0ZXN0c1sxXS5uYW1lKSB7CisJCQlsb25nX2JhdGNoX3Rlc3QyKCBmZCwgdGVzdHNb MF0ucHJpb1swXSwKKwkJCQkJdGVzdHNbMF0ucHJpb1sxXSwKKwkJCQkJdGVzdHNbMF0ucmVzZXRb MF0sCisJCQkJCXRlc3RzWzBdLnJlc2V0WzFdLAorCQkJCQl0ZXN0c1swXS50aHJlc2hvbGQpOwor CQl9CisKKwkJaWd0X3N1YnRlc3RfZigiJXMiLCB0ZXN0c1syXS5uYW1lKSB7CisJCQlsb25nX2Jh dGNoX3Rlc3QzKCBmZCwgdGVzdHNbMV0ucHJpb1swXSwKKwkJCQkJdGVzdHNbMV0ucHJpb1sxXSwK KwkJCQkJdGVzdHNbMV0ucmVzZXRbMF0sCisJCQkJCXRlc3RzWzFdLnJlc2V0WzFdLAorCQkJCQl0 ZXN0c1sxXS50aHJlc2hvbGQpOworCQl9CisKKwkJZm9yKGkgPSAzOyBpIDwgQVJSQVlfU0laRSh0 ZXN0cyk7IGkrKykgeworCQkJaWd0X3N1YnRlc3RfZigiJXMiLCB0ZXN0c1tpXS5uYW1lKSB7CisJ CQkJbG9uZ19iYXRjaF90ZXN0NCggZmQsIHRlc3RzW2ldLnByaW9bMF0sCisJCQkJCQl0ZXN0c1tp XS5wcmlvWzFdLAorCQkJCQkJdGVzdHNbaV0ucmVzZXRbMF0sCisJCQkJCQl0ZXN0c1tpXS5yZXNl dFsxXSwKKwkJCQkJCXRlc3RzW2ldLnRocmVzaG9sZCk7CisJCQl9CisJCX0KKwl9CisKKyAgICBp Z3RfZml4dHVyZSB7CisJY2xvc2UoZmQpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3Rlc3RzL21l c29uLmJ1aWxkIGIvdGVzdHMvbWVzb24uYnVpbGQKaW5kZXggZjE2OGZiYmFlMmE4Li4wMzM4NDJk YmMyZDEgMTAwNjQ0Ci0tLSBhL3Rlc3RzL21lc29uLmJ1aWxkCisrKyBiL3Rlc3RzL21lc29uLmJ1 aWxkCkBAIC0yMjAsNiArMjIwLDcgQEAgaTkxNV9wcm9ncyA9IFsKIAknZ2VtX3VzZXJwdHJfYmxp dHMnLAogCSdnZW1fdm1fY3JlYXRlJywKIAknZ2VtX3dhaXQnLAorICAgICAgICAnZ2VtX3dhdGNo ZG9nJywKIAknZ2VtX3dvcmthcm91bmRzJywKIAknZ2VtX3dyaXRlX3JlYWRfcmluZ19zd2l0Y2gn LAogCSdpOTE1X2ZiX3RpbGluZycsCi0tIAoyLjE5LjEKCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0CmlndC1kZXZAbGlz dHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vaWd0LWRldg==