From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH 46/46] drm/i915: Add initial selftests for hang detection and resets Date: Thu, 2 Feb 2017 09:09:05 +0000 Message-ID: <20170202090905.29028-47-chris@chris-wilson.co.uk> References: <20170202090905.29028-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x241.google.com (mail-wm0-x241.google.com [IPv6:2a00:1450:400c:c09::241]) by gabe.freedesktop.org (Postfix) with ESMTPS id 600736E9C9 for ; Thu, 2 Feb 2017 09:09:58 +0000 (UTC) Received: by mail-wm0-x241.google.com with SMTP id v77so2749397wmv.0 for ; Thu, 02 Feb 2017 01:09:58 -0800 (PST) In-Reply-To: <20170202090905.29028-1-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Q2hlY2sgdGhhdCB3ZSBjYW4gcmVzZXQgdGhlIEdQVSBhbmQgY29udGludWUgZXhlY3V0aW5nIGZy b20gdGhlIG5leHQKcmVxdWVzdC4KClNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNA Y2hyaXMtd2lsc29uLmNvLnVrPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2Lmgg ICAgICAgICAgICAgICAgICAgIHwgICA0ICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9o YW5nY2hlY2suYyAgICAgICAgICAgICB8ICAgNCArCiAuLi4vZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0 cy9pOTE1X2xpdmVfc2VsZnRlc3RzLmggICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9z ZWxmdGVzdHMvaW50ZWxfaGFuZ2NoZWNrLmMgICB8IDUzMSArKysrKysrKysrKysrKysrKysrKysK IDQgZmlsZXMgY2hhbmdlZCwgNTM4IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCiBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2ludGVsX2hhbmdj aGVjay5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXggNGE3ZTRiMTBjMGE5Li5mODJjNTk3 NjhmNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtMzM1Niw4ICszMzU2LDggQEAgaW50 IF9fbXVzdF9jaGVjayBpOTE1X2dlbV9pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdik7CiBpbnQgX19tdXN0X2NoZWNrIGk5MTVfZ2VtX2luaXRfaHcoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KTsKIHZvaWQgaTkxNV9nZW1faW5pdF9zd2l6emxpbmcoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKIHZvaWQgaTkxNV9nZW1fY2xlYW51cF9lbmdp bmVzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Ci1pbnQgX19tdXN0X2NoZWNr IGk5MTVfZ2VtX3dhaXRfZm9yX2lkbGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 LAotCQkJCQl1bnNpZ25lZCBpbnQgZmxhZ3MpOworaW50IGk5MTVfZ2VtX3dhaXRfZm9yX2lkbGUo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAorCQkJICAgdW5zaWduZWQgaW50IGZs YWdzKTsKIGludCBfX211c3RfY2hlY2sgaTkxNV9nZW1fc3VzcGVuZChzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYpOwogdm9pZCBpOTE1X2dlbV9yZXN1bWUoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KTsKIGludCBpOTE1X2dlbV9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9z dHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfaGFuZ2NoZWNrLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9oYW5nY2hlY2suYwppbmRleCBmMDU5NzFmNTU4NmYuLmRjZTc0MjI0M2JhNiAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGFuZ2NoZWNrLmMKKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfaGFuZ2NoZWNrLmMKQEAgLTQ4MCwzICs0ODAsNyBAQCB2b2lkIGlu dGVsX2hhbmdjaGVja19pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQogCUlOSVRf REVMQVlFRF9XT1JLKCZpOTE1LT5ncHVfZXJyb3IuaGFuZ2NoZWNrX3dvcmssCiAJCQkgIGk5MTVf aGFuZ2NoZWNrX2VsYXBzZWQpOwogfQorCisjaWYgSVNfRU5BQkxFRChDT05GSUdfRFJNX0k5MTVf U0VMRlRFU1QpCisjaW5jbHVkZSAic2VsZnRlc3RzL2ludGVsX2hhbmdjaGVjay5jIgorI2VuZGlm CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9saXZlX3Nl bGZ0ZXN0cy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfbGl2ZV9zZWxm dGVzdHMuaAppbmRleCAxNWZiNGUwZGQ1MDMuLmQwZDRmNGJjZDgzNyAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfbGl2ZV9zZWxmdGVzdHMuaAorKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9saXZlX3NlbGZ0ZXN0cy5oCkBAIC0x NiwzICsxNiw0IEBAIHNlbGZ0ZXN0KGRtYWJ1ZiwgaTkxNV9nZW1fZG1hYnVmX2xpdmVfc2VsZnRl c3RzKQogc2VsZnRlc3QoY29oZXJlbmN5LCBpOTE1X2dlbV9jb2hlcmVuY3lfbGl2ZV9zZWxmdGVz dHMpCiBzZWxmdGVzdChndHQsIGk5MTVfZ2VtX2d0dF9saXZlX3NlbGZ0ZXN0cykKIHNlbGZ0ZXN0 KGNvbnRleHQsIGk5MTVfZ2VtX2NvbnRleHRfbGl2ZV9zZWxmdGVzdHMpCitzZWxmdGVzdChoYW5n Y2hlY2ssIGludGVsX2hhbmdjaGVja19saXZlX3NlbGZ0ZXN0cykKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF9oYW5nY2hlY2suYyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF9oYW5nY2hlY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMDAuLjIxMzFkODcwN2RmZAotLS0gL2Rldi9udWxsCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF9oYW5nY2hlY2suYwpAQCAtMCwwICsx LDUzMSBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE2IEludGVsIENvcnBvcmF0aW9uCisgKgor ICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBw ZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRl ZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRo ZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0 aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwg ZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29m dHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMg ZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoK KyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5v dGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVk IGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2Fy ZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJS QU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBO T1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8g RVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJM RSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICog RlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVT RSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLworCisjaW5j bHVkZSAiLi4vaTkxNV9zZWxmdGVzdC5oIgorCitzdHJ1Y3QgaGFuZyB7CisJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmk5MTU7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKmh3czsKKwlz dHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOworCXUzMiAqc2Vxbm87CisJdTMyICpiYXRj aDsKK307CisKK3N0YXRpYyBpbnQgaGFuZ19pbml0KHN0cnVjdCBoYW5nICpoLCBzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqaTkxNSkKK3sKKwl2b2lkICp2YWRkcjsKKwlpbnQgZXJyOworCisJbWVt c2V0KGgsIDAsIHNpemVvZigqaCkpOworCWgtPmk5MTUgPSBpOTE1OworCisJaC0+aHdzID0gaTkx NV9nZW1fb2JqZWN0X2NyZWF0ZV9pbnRlcm5hbChpOTE1LCBQQUdFX1NJWkUpOworCWlmIChJU19F UlIoaC0+aHdzKSkKKwkJcmV0dXJuIFBUUl9FUlIoaC0+aHdzKTsKKworCWgtPm9iaiA9IGk5MTVf Z2VtX29iamVjdF9jcmVhdGVfaW50ZXJuYWwoaTkxNSwgUEFHRV9TSVpFKTsKKwlpZiAoSVNfRVJS KGgtPm9iaikpIHsKKwkJZXJyID0gUFRSX0VSUihoLT5vYmopOworCQlnb3RvIGVycl9od3M7CisJ fQorCisJaTkxNV9nZW1fb2JqZWN0X3NldF9jYWNoZV9sZXZlbChoLT5od3MsIEk5MTVfQ0FDSEVf TExDKTsKKwl2YWRkciA9IGk5MTVfZ2VtX29iamVjdF9waW5fbWFwKGgtPmh3cywgSTkxNV9NQVBf V0IpOworCWlmIChJU19FUlIodmFkZHIpKSB7CisJCWVyciA9IFBUUl9FUlIodmFkZHIpOworCQln b3RvIGVycl9vYmo7CisJfQorCWgtPnNlcW5vID0gbWVtc2V0KHZhZGRyLCAweGZmLCBQQUdFX1NJ WkUpOworCisJdmFkZHIgPSBpOTE1X2dlbV9vYmplY3RfcGluX21hcChoLT5vYmosCisJCQkJCUhB U19MTEMoaTkxNSkgPyBJOTE1X01BUF9XQiA6IEk5MTVfTUFQX1dDKTsKKwlpZiAoSVNfRVJSKHZh ZGRyKSkgeworCQllcnIgPSBQVFJfRVJSKHZhZGRyKTsKKwkJZ290byBlcnJfdW5waW5faHdzOwor CX0KKwloLT5iYXRjaCA9IHZhZGRyOworCisJcmV0dXJuIDA7CisKK2Vycl91bnBpbl9od3M6CisJ aTkxNV9nZW1fb2JqZWN0X3VucGluX21hcChoLT5od3MpOworZXJyX29iajoKKwlpOTE1X2dlbV9v YmplY3RfcHV0KGgtPm9iaik7CitlcnJfaHdzOgorCWk5MTVfZ2VtX29iamVjdF9wdXQoaC0+aHdz KTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdTY0IGh3c19hZGRyZXNzKGNvbnN0IHN0cnVj dCBpOTE1X3ZtYSAqaHdzLAorCQkgICAgICAgY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1 ZXN0ICpycSkKK3sKKwlyZXR1cm4gaHdzLT5ub2RlLnN0YXJ0ICsgb2Zmc2V0X2luX3BhZ2Uoc2l6 ZW9mKHUzMikqcnEtPmZlbmNlLmNvbnRleHQpOworfQorCitzdGF0aWMgaW50IGVtaXRfcmVjdXJz ZV9iYXRjaChzdHJ1Y3QgaGFuZyAqaCwKKwkJCSAgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVx dWVzdCAqcnEpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBoLT5pOTE1Owor CXN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtID0gcnEtPmN0eC0+cHBndHQgPyAmcnEtPmN0 eC0+cHBndHQtPmJhc2UgOiAmaTkxNS0+Z2d0dC5iYXNlOworCXN0cnVjdCBpOTE1X3ZtYSAqaHdz LCAqdm1hOworCXVuc2lnbmVkIGludCBmbGFnczsKKwl1MzIgKmJhdGNoOworCWludCBlcnI7CisK Kwl2bWEgPSBpOTE1X3ZtYV9pbnN0YW5jZShoLT5vYmosIHZtLCBOVUxMKTsKKwlpZiAoSVNfRVJS KHZtYSkpCisJCXJldHVybiBQVFJfRVJSKHZtYSk7CisKKwlod3MgPSBpOTE1X3ZtYV9pbnN0YW5j ZShoLT5od3MsIHZtLCBOVUxMKTsKKwlpZiAoSVNfRVJSKGh3cykpCisJCXJldHVybiBQVFJfRVJS KGh3cyk7CisKKwllcnIgPSBpOTE1X3ZtYV9waW4odm1hLCAwLCAwLCBQSU5fVVNFUik7CisJaWYg KGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IGk5MTVfdm1hX3Bpbihod3MsIDAsIDAsIFBJ Tl9VU0VSKTsKKwlpZiAoZXJyKQorCQlnb3RvIHVucGluX3ZtYTsKKworCWVyciA9IHJxLT5lbmdp bmUtPmVtaXRfZmx1c2gocnEsIEVNSVRfSU5WQUxJREFURSk7CisJaWYgKGVycikKKwkJZ290byB1 bnBpbl9od3M7CisKKwllcnIgPSBpOTE1X3N3aXRjaF9jb250ZXh0KHJxKTsKKwlpZiAoZXJyKQor CQlnb3RvIHVucGluX2h3czsKKworCWk5MTVfdm1hX21vdmVfdG9fYWN0aXZlKHZtYSwgcnEsIDAp OworCWlmICghaTkxNV9nZW1fb2JqZWN0X2hhc19hY3RpdmVfcmVmZXJlbmNlKHZtYS0+b2JqKSkg eworCQlpOTE1X2dlbV9vYmplY3RfZ2V0KHZtYS0+b2JqKTsKKwkJaTkxNV9nZW1fb2JqZWN0X3Nl dF9hY3RpdmVfcmVmZXJlbmNlKHZtYS0+b2JqKTsKKwl9CisKKwlpOTE1X3ZtYV9tb3ZlX3RvX2Fj dGl2ZShod3MsIHJxLCAwKTsKKwlpZiAoIWk5MTVfZ2VtX29iamVjdF9oYXNfYWN0aXZlX3JlZmVy ZW5jZShod3MtPm9iaikpIHsKKwkJaTkxNV9nZW1fb2JqZWN0X2dldChod3MtPm9iaik7CisJCWk5 MTVfZ2VtX29iamVjdF9zZXRfYWN0aXZlX3JlZmVyZW5jZShod3MtPm9iaik7CisJfQorCisJYmF0 Y2ggPSBoLT5iYXRjaDsKKwlpZiAoSU5URUxfR0VOKGk5MTUpID49IDgpIHsKKwkJKmJhdGNoKysg PSBNSV9TVE9SRV9EV09SRF9JTU1fR0VONDsKKwkJKmJhdGNoKysgPSBsb3dlcl8zMl9iaXRzKGh3 c19hZGRyZXNzKGh3cywgcnEpKTsKKwkJKmJhdGNoKysgPSB1cHBlcl8zMl9iaXRzKGh3c19hZGRy ZXNzKGh3cywgcnEpKTsKKwkJKmJhdGNoKysgPSBycS0+ZmVuY2Uuc2Vxbm87CisJCSpiYXRjaCsr ID0gTUlfQkFUQ0hfQlVGRkVSX1NUQVJUIHwgMSA8PCA4IHwgMTsKKwkJKmJhdGNoKysgPSBsb3dl cl8zMl9iaXRzKHZtYS0+bm9kZS5zdGFydCk7CisJCSpiYXRjaCsrID0gdXBwZXJfMzJfYml0cyh2 bWEtPm5vZGUuc3RhcnQpOworCX0gZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpID49IDYpIHsKKwkJ KmJhdGNoKysgPSBNSV9TVE9SRV9EV09SRF9JTU1fR0VONDsKKwkJKmJhdGNoKysgPSAwOworCQkq YmF0Y2grKyA9IGxvd2VyXzMyX2JpdHMoaHdzX2FkZHJlc3MoaHdzLCBycSkpOworCQkqYmF0Y2gr KyA9IHJxLT5mZW5jZS5zZXFubzsKKwkJKmJhdGNoKysgPSBNSV9CQVRDSF9CVUZGRVJfU1RBUlQg fCAxIDw8IDg7CisJCSpiYXRjaCsrID0gbG93ZXJfMzJfYml0cyh2bWEtPm5vZGUuc3RhcnQpOwor CX0gZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpID49IDQpIHsKKwkJKmJhdGNoKysgPSBNSV9TVE9S RV9EV09SRF9JTU1fR0VONCB8IDEgPDwgMjI7CisJCSpiYXRjaCsrID0gMDsKKwkJKmJhdGNoKysg PSBsb3dlcl8zMl9iaXRzKGh3c19hZGRyZXNzKGh3cywgcnEpKTsKKwkJKmJhdGNoKysgPSBycS0+ ZmVuY2Uuc2Vxbm87CisJCSpiYXRjaCsrID0gTUlfQkFUQ0hfQlVGRkVSX1NUQVJUIHwgMiA8PCA2 OworCQkqYmF0Y2grKyA9IGxvd2VyXzMyX2JpdHModm1hLT5ub2RlLnN0YXJ0KTsKKwl9IGVsc2Ug eworCQkqYmF0Y2grKyA9IE1JX1NUT1JFX0RXT1JEX0lNTTsKKwkJKmJhdGNoKysgPSBsb3dlcl8z Ml9iaXRzKGh3c19hZGRyZXNzKGh3cywgcnEpKTsKKwkJKmJhdGNoKysgPSBycS0+ZmVuY2Uuc2Vx bm87CisJCSpiYXRjaCsrID0gTUlfQkFUQ0hfQlVGRkVSX1NUQVJUIHwgMiA8PCA2IHwgMTsKKwkJ KmJhdGNoKysgPSBsb3dlcl8zMl9iaXRzKHZtYS0+bm9kZS5zdGFydCk7CisJfQorCSpiYXRjaCsr ID0gTUlfQkFUQ0hfQlVGRkVSX0VORDsgLyogbm90IHJlYWNoZWQgKi8KKworCWZsYWdzID0gMDsK KwlpZiAoSU5URUxfR0VOKHZtLT5pOTE1KSA8PSA1KQorCQlmbGFncyB8PSBJOTE1X0RJU1BBVENI X1NFQ1VSRTsKKworCWVyciA9IHJxLT5lbmdpbmUtPmVtaXRfYmJfc3RhcnQocnEsIHZtYS0+bm9k ZS5zdGFydCwgUEFHRV9TSVpFLCBmbGFncyk7CisKK3VucGluX2h3czoKKwlpOTE1X3ZtYV91bnBp bihod3MpOwordW5waW5fdm1hOgorCWk5MTVfdm1hX3VucGluKHZtYSk7CisJcmV0dXJuIGVycjsK K30KKworc3RhdGljIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqCitoYW5nX2NyZWF0ZV9y ZXF1ZXN0KHN0cnVjdCBoYW5nICpoLAorCQkgICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lLAorCQkgICAgc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCkKK3sKKwlzdHJ1Y3QgZHJt X2k5MTVfZ2VtX3JlcXVlc3QgKnJxOworCWludCBlcnI7CisKKwlpZiAoaTkxNV9nZW1fb2JqZWN0 X2lzX2FjdGl2ZShoLT5vYmopKSB7CisJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7 CisJCXZvaWQgKnZhZGRyOworCisJCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfaW50ZXJu YWwoaC0+aTkxNSwgUEFHRV9TSVpFKTsKKwkJaWYgKElTX0VSUihvYmopKQorCQkJcmV0dXJuIEVS Ul9DQVNUKG9iaik7CisKKwkJdmFkZHIgPSBpOTE1X2dlbV9vYmplY3RfcGluX21hcChvYmosCisJ CQkJCQlIQVNfTExDKGgtPmk5MTUpID8gSTkxNV9NQVBfV0IgOiBJOTE1X01BUF9XQyk7CisJCWlm IChJU19FUlIodmFkZHIpKSB7CisJCQlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7CisJCQlyZXR1 cm4gRVJSX0NBU1QodmFkZHIpOworCQl9CisKKwkJaTkxNV9nZW1fb2JqZWN0X3VucGluX21hcCho LT5vYmopOworCQlpOTE1X2dlbV9vYmplY3RfcHV0KGgtPm9iaik7CisKKwkJaC0+b2JqID0gb2Jq OworCQloLT5iYXRjaCA9IHZhZGRyOworCX0KKworCXJxID0gaTkxNV9nZW1fcmVxdWVzdF9hbGxv YyhlbmdpbmUsIGN0eCk7CisJaWYgKElTX0VSUihycSkpCisJCXJldHVybiBycTsKKworCWVyciA9 IGVtaXRfcmVjdXJzZV9iYXRjaChoLCBycSk7CisJaWYgKGVycikgeworCQlfX2k5MTVfYWRkX3Jl cXVlc3QocnEsIGZhbHNlKTsKKwkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKKwl9CisKKwlyZXR1cm4g cnE7Cit9CisKK3N0YXRpYyB1MzIgaHdzX3NlcW5vKGNvbnN0IHN0cnVjdCBoYW5nICpoLAorCQkg ICAgIGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcnEpCit7CisJcmV0dXJuIFJF QURfT05DRShoLT5zZXFub1tycS0+ZmVuY2UuY29udGV4dCAlIChQQUdFX1NJWkUvc2l6ZW9mKHUz MikpXSk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmdfZmluaShzdHJ1Y3QgaGFuZyAqaCkKK3sKKwkq aC0+YmF0Y2ggPSBNSV9CQVRDSF9CVUZGRVJfRU5EOworCXdtYigpOworCisJaTkxNV9nZW1fb2Jq ZWN0X3VucGluX21hcChoLT5vYmopOworCWk5MTVfZ2VtX29iamVjdF9wdXQoaC0+b2JqKTsKKwor CWk5MTVfZ2VtX29iamVjdF91bnBpbl9tYXAoaC0+aHdzKTsKKwlpOTE1X2dlbV9vYmplY3RfcHV0 KGgtPmh3cyk7CisKKwlpOTE1X2dlbV93YWl0X2Zvcl9pZGxlKGgtPmk5MTUsIEk5MTVfV0FJVF9M T0NLRUQpOworCWk5MTVfZ2VtX3JldGlyZV9yZXF1ZXN0cyhoLT5pOTE1KTsKK30KKworc3RhdGlj IGludCBpZ3RfaGFuZ19zYW5pdHljaGVjayh2b2lkICphcmcpCit7CisJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUgPSBhcmc7CisJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpycTsK KwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7CisJZW51bSBpbnRlbF9lbmdpbmVfaWQg aWQ7CisJc3RydWN0IGhhbmcgaDsKKwlpbnQgZXJyOworCisJLyogQmFzaWMgY2hlY2sgdGhhdCB3 ZSBjYW4gZXhlY3V0ZSBvdXIgaGFuZ2luZyBiYXRjaCAqLworCisJbXV0ZXhfbG9jaygmaTkxNS0+ ZHJtLnN0cnVjdF9tdXRleCk7CisJZXJyID0gaGFuZ19pbml0KCZoLCBpOTE1KTsKKwlpZiAoZXJy KQorCQlnb3RvIHVubG9jazsKKworCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGk5MTUsIGlkKSB7 CisJCWxvbmcgdGltZW91dDsKKworCQlycSA9IGhhbmdfY3JlYXRlX3JlcXVlc3QoJmgsIGVuZ2lu ZSwgaTkxNS0+a2VybmVsX2NvbnRleHQpOworCQlpZiAoSVNfRVJSKHJxKSkgeworCQkJZXJyID0g UFRSX0VSUihycSk7CisJCQlwcl9lcnIoIkZhaWxlZCB0byBjcmVhdGUgcmVxdWVzdCBmb3IgJXMs IGVycj0lZFxuIiwKKwkJCSAgICAgICBlbmdpbmUtPm5hbWUsIGVycik7CisJCQlnb3RvIGZpbmk7 CisJCX0KKworCQlpOTE1X2dlbV9yZXF1ZXN0X2dldChycSk7CisKKwkJKmguYmF0Y2ggPSBNSV9C QVRDSF9CVUZGRVJfRU5EOworCQlfX2k5MTVfYWRkX3JlcXVlc3QocnEsIHRydWUpOworCisJCXRp bWVvdXQgPSBpOTE1X3dhaXRfcmVxdWVzdChycSwKKwkJCQkJICAgIEk5MTVfV0FJVF9MT0NLRUQs CisJCQkJCSAgICBNQVhfU0NIRURVTEVfVElNRU9VVCk7CisJCWk5MTVfZ2VtX3JlcXVlc3RfcHV0 KHJxKTsKKworCQlpZiAodGltZW91dCA8IDApIHsKKwkJCWVyciA9IHRpbWVvdXQ7CisJCQlwcl9l cnIoIldhaXQgZm9yIHJlcXVlc3QgZmFpbGVkIG9uICVzLCBlcnI9JWRcbiIsCisJCQkgICAgICAg ZW5naW5lLT5uYW1lLCBlcnIpOworCQkJZ290byBmaW5pOworCQl9CisJfQorCitmaW5pOgorCWhh bmdfZmluaSgmaCk7Cit1bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211 dGV4KTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGlndF9nbG9iYWxfcmVzZXQodm9p ZCAqYXJnKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gYXJnOworCXVuc2ln bmVkIGludCByZXNldF9jb3VudDsKKwlpbnQgZXJyID0gMDsKKworCS8qIENoZWNrIHRoYXQgd2Ug Y2FuIGlzc3VlIGEgZ2xvYmFsIEdQVSByZXNldCAqLworCisJc2V0X2JpdChJOTE1X1JFU0VUX0lO X1BST0dSRVNTLCAmaTkxNS0+Z3B1X2Vycm9yLmZsYWdzKTsKKworCW11dGV4X2xvY2soJmk5MTUt PmRybS5zdHJ1Y3RfbXV0ZXgpOworCXJlc2V0X2NvdW50ID0gaTkxNV9yZXNldF9jb3VudCgmaTkx NS0+Z3B1X2Vycm9yKTsKKworCWk5MTVfcmVzZXQoaTkxNSk7CisKKwlpZiAoaTkxNV9yZXNldF9j b3VudCgmaTkxNS0+Z3B1X2Vycm9yKSA9PSByZXNldF9jb3VudCkgeworCQlwcl9lcnIoIk5vIEdQ VSByZXNldCByZWNvcmRlZCFcbiIpOworCQllcnIgPSAtRUlOVkFMOworCX0KKwltdXRleF91bmxv Y2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOworCisJR0VNX0JVR19PTih0ZXN0X2JpdChJOTE1 X1JFU0VUX0lOX1BST0dSRVNTLCAmaTkxNS0+Z3B1X2Vycm9yLmZsYWdzKSk7CisJaWYgKGk5MTVf dGVybWluYWxseV93ZWRnZWQoJmk5MTUtPmdwdV9lcnJvcikpCisJCWVyciA9IC1FSU87CisKKwly ZXR1cm4gZXJyOworfQorCitzdGF0aWMgdTMyIGZha2VfaGFuZ2NoZWNrKHN0cnVjdCBkcm1faTkx NV9nZW1fcmVxdWVzdCAqcnEpCit7CisJdTMyIHJlc2V0X2NvdW50OworCisJcnEtPmVuZ2luZS0+ aGFuZ2NoZWNrLnN0YWxsZWQgPSB0cnVlOworCXJxLT5lbmdpbmUtPmhhbmdjaGVjay5zZXFubyA9 IGludGVsX2VuZ2luZV9nZXRfc2Vxbm8ocnEtPmVuZ2luZSk7CisKKwlyZXNldF9jb3VudCA9IGk5 MTVfcmVzZXRfY291bnQoJnJxLT5pOTE1LT5ncHVfZXJyb3IpOworCisJc2V0X2JpdChJOTE1X1JF U0VUX0lOX1BST0dSRVNTLCAmcnEtPmk5MTUtPmdwdV9lcnJvci5mbGFncyk7CisJd2FrZV91cF9h bGwoJnJxLT5pOTE1LT5ncHVfZXJyb3Iud2FpdF9xdWV1ZSk7CisKKwlyZXR1cm4gcmVzZXRfY291 bnQ7Cit9CisKK3N0YXRpYyBib29sIHdhaXRfZm9yX2hhbmcoc3RydWN0IGhhbmcgKmgsIHN0cnVj dCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcnEpCit7CisJcmV0dXJuICEod2FpdF9mb3JfdXMoaTkx NV9zZXFub19wYXNzZWQoaHdzX3NlcW5vKGgsIHJxKSwKKwkJCQkJICAgICAgIHJxLT5mZW5jZS5z ZXFubyksCisJCQkgICAgIDEwKSAmJgorCQkgd2FpdF9mb3IoaTkxNV9zZXFub19wYXNzZWQoaHdz X3NlcW5vKGgsIHJxKSwKKwkJCQkJICAgIHJxLT5mZW5jZS5zZXFubyksCisJCQkgIDEwMDApKTsK K30KKworc3RhdGljIGludCBpZ3Rfd2FpdF9yZXNldCh2b2lkICphcmcpCit7CisJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBhcmc7CisJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0 ICpycTsKKwl1bnNpZ25lZCBpbnQgcmVzZXRfY291bnQ7CisJc3RydWN0IGhhbmcgaDsKKwlsb25n IHRpbWVvdXQ7CisJaW50IGVycjsKKworCS8qIENoZWNrIHRoYXQgd2UgZGV0ZWN0IGEgc3R1Y2sg d2FpdGVyIGFuZCBpc3N1ZSBhIHJlc2V0ICovCisKKwlzZXRfYml0KEk5MTVfUkVTRVRfSU5fUFJP R1JFU1MsICZpOTE1LT5ncHVfZXJyb3IuZmxhZ3MpOworCisJbXV0ZXhfbG9jaygmaTkxNS0+ZHJt LnN0cnVjdF9tdXRleCk7CisJZXJyID0gaGFuZ19pbml0KCZoLCBpOTE1KTsKKwlpZiAoZXJyKQor CQlnb3RvIHVubG9jazsKKworCXJxID0gaGFuZ19jcmVhdGVfcmVxdWVzdCgmaCwgaTkxNS0+ZW5n aW5lW1JDU10sIGk5MTUtPmtlcm5lbF9jb250ZXh0KTsKKwlpZiAoSVNfRVJSKHJxKSkgeworCQll cnIgPSBQVFJfRVJSKHJxKTsKKwkJZ290byBmaW5pOworCX0KKworCWk5MTVfZ2VtX3JlcXVlc3Rf Z2V0KHJxKTsKKwlfX2k5MTVfYWRkX3JlcXVlc3QocnEsIHRydWUpOworCisJaWYgKCF3YWl0X2Zv cl9oYW5nKCZoLCBycSkpIHsKKwkJcHJfZXJyKCJGYWlsZWQgdG8gc3RhcnQgcmVxdWVzdCAleFxu IiwgcnEtPmZlbmNlLnNlcW5vKTsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBvdXRfcnE7CisJfQor CisJcmVzZXRfY291bnQgPSBmYWtlX2hhbmdjaGVjayhycSk7CisKKwl0aW1lb3V0ID0gaTkxNV93 YWl0X3JlcXVlc3QocnEsIEk5MTVfV0FJVF9MT0NLRUQsIDEwKTsKKwlpZiAodGltZW91dCA8IDAp IHsKKwkJcHJfZXJyKCJpOTE1X3dhaXRfcmVxdWVzdCBmYWlsZWQgb24gYSBzdHVjayByZXF1ZXN0 OiBlcnI9JWxkXG4iLAorCQkgICAgICAgdGltZW91dCk7CisJCWVyciA9IHRpbWVvdXQ7CisJCWdv dG8gb3V0X3JxOworCX0KKwlHRU1fQlVHX09OKHRlc3RfYml0KEk5MTVfUkVTRVRfSU5fUFJPR1JF U1MsICZpOTE1LT5ncHVfZXJyb3IuZmxhZ3MpKTsKKworCWlmIChpOTE1X3Jlc2V0X2NvdW50KCZp OTE1LT5ncHVfZXJyb3IpID09IHJlc2V0X2NvdW50KSB7CisJCXByX2VycigiTm8gR1BVIHJlc2V0 IHJlY29yZGVkIVxuIik7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X3JxOworCX0KKwor b3V0X3JxOgorCWk5MTVfZ2VtX3JlcXVlc3RfcHV0KHJxKTsKK2Zpbmk6CisJaGFuZ19maW5pKCZo KTsKK3VubG9jazoKKwltdXRleF91bmxvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOworCisJ aWYgKGk5MTVfdGVybWluYWxseV93ZWRnZWQoJmk5MTUtPmdwdV9lcnJvcikpCisJCXJldHVybiAt RUlPOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBpZ3RfcmVzZXRfcXVldWUodm9p ZCAqYXJnKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gYXJnOworCXN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKKwllbnVtIGludGVsX2VuZ2luZV9pZCBpZDsKKwlz dHJ1Y3QgaGFuZyBoOworCWludCBlcnI7CisKKwkvKiBDaGVjayB0aGF0IHdlIHJlcGxheSBwZW5k aW5nIHJlcXVlc3RzIGZvbGxvd2luZyBhIGhhbmcgKi8KKworCW11dGV4X2xvY2soJmk5MTUtPmRy bS5zdHJ1Y3RfbXV0ZXgpOworCWVyciA9IGhhbmdfaW5pdCgmaCwgaTkxNSk7CisJaWYgKGVycikK KwkJZ290byB1bmxvY2s7CisKKwlmb3JfZWFjaF9lbmdpbmUoZW5naW5lLCBpOTE1LCBpZCkgewor CQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnByZXY7CisJCUlHVF9USU1FT1VUKGVuZF90 aW1lKTsKKwkJdW5zaWduZWQgaW50IGNvdW50OworCisJCXByZXYgPSBoYW5nX2NyZWF0ZV9yZXF1 ZXN0KCZoLCBlbmdpbmUsIGk5MTUtPmtlcm5lbF9jb250ZXh0KTsKKwkJaWYgKElTX0VSUihwcmV2 KSkgeworCQkJZXJyID0gUFRSX0VSUihwcmV2KTsKKwkJCWdvdG8gZmluaTsKKwkJfQorCisJCWk5 MTVfZ2VtX3JlcXVlc3RfZ2V0KHByZXYpOworCQlfX2k5MTVfYWRkX3JlcXVlc3QocHJldiwgdHJ1 ZSk7CisKKwkJY291bnQgPSAwOworCQlkbyB7CisJCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVl c3QgKnJxOworCQkJdW5zaWduZWQgaW50IHJlc2V0X2NvdW50OworCisJCQlycSA9IGhhbmdfY3Jl YXRlX3JlcXVlc3QoJmgsCisJCQkJCQkgZW5naW5lLAorCQkJCQkJIGk5MTUtPmtlcm5lbF9jb250 ZXh0KTsKKwkJCWlmIChJU19FUlIocnEpKSB7CisJCQkJZXJyID0gUFRSX0VSUihycSk7CisJCQkJ Z290byBmaW5pOworCQkJfQorCisJCQlpOTE1X2dlbV9yZXF1ZXN0X2dldChycSk7CisJCQlfX2k5 MTVfYWRkX3JlcXVlc3QocnEsIHRydWUpOworCisJCQlpZiAoIXdhaXRfZm9yX2hhbmcoJmgsIHBy ZXYpKSB7CisJCQkJcHJfZXJyKCJGYWlsZWQgdG8gc3RhcnQgcmVxdWVzdCAleFxuIiwKKwkJCQkg ICAgICAgcHJldi0+ZmVuY2Uuc2Vxbm8pOworCQkJCWk5MTVfZ2VtX3JlcXVlc3RfcHV0KHJxKTsK KwkJCQlpOTE1X2dlbV9yZXF1ZXN0X3B1dChwcmV2KTsKKwkJCQllcnIgPSAtRUlPOworCQkJCWdv dG8gZmluaTsKKwkJCX0KKworCQkJcmVzZXRfY291bnQgPSBmYWtlX2hhbmdjaGVjayhwcmV2KTsK KworCQkJaTkxNV9yZXNldChpOTE1KTsKKworCQkJR0VNX0JVR19PTih0ZXN0X2JpdChJOTE1X1JF U0VUX0lOX1BST0dSRVNTLAorCQkJCQkgICAgJmk5MTUtPmdwdV9lcnJvci5mbGFncykpOworCQkJ aWYgKHByZXYtPmZlbmNlLmVycm9yICE9IC1FSU8pIHsKKwkJCQlwcl9lcnIoIkdQVSByZXNldCBu b3QgcmVjb3JkZWQgb24gaGFuZ2luZyByZXF1ZXN0IFtmZW5jZS5lcnJvcj0lZF0hXG4iLAorCQkJ CSAgICAgICBwcmV2LT5mZW5jZS5lcnJvcik7CisJCQkJaTkxNV9nZW1fcmVxdWVzdF9wdXQocnEp OworCQkJCWk5MTVfZ2VtX3JlcXVlc3RfcHV0KHByZXYpOworCQkJCWVyciA9IC1FSU5WQUw7CisJ CQkJZ290byBmaW5pOworCQkJfQorCisJCQlpZiAocnEtPmZlbmNlLmVycm9yKSB7CisJCQkJcHJf ZXJyKCJGZW5jZSBlcnJvciBzdGF0dXMgbm90IHplcm8gWyVkXSBhZnRlciB1bnJlbGF0ZWQgcmVz ZXRcbiIsCisJCQkJICAgICAgIHJxLT5mZW5jZS5lcnJvcik7CisJCQkJaTkxNV9nZW1fcmVxdWVz dF9wdXQocnEpOworCQkJCWk5MTVfZ2VtX3JlcXVlc3RfcHV0KHByZXYpOworCQkJCWVyciA9IC1F SU5WQUw7CisJCQkJZ290byBmaW5pOworCQkJfQorCisJCQlpZiAoaTkxNV9yZXNldF9jb3VudCgm aTkxNS0+Z3B1X2Vycm9yKSA9PSByZXNldF9jb3VudCkgeworCQkJCXByX2VycigiTm8gR1BVIHJl c2V0IHJlY29yZGVkIVxuIik7CisJCQkJaTkxNV9nZW1fcmVxdWVzdF9wdXQocnEpOworCQkJCWk5 MTVfZ2VtX3JlcXVlc3RfcHV0KHByZXYpOworCQkJCWVyciA9IC1FSU5WQUw7CisJCQkJZ290byBm aW5pOworCQkJfQorCisJCQlpOTE1X2dlbV9yZXF1ZXN0X3B1dChwcmV2KTsKKwkJCXByZXYgPSBy cTsKKwkJCWNvdW50Kys7CisJCX0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGVuZF90aW1l KSk7CisJCXByX2luZm8oIiVzOiBDb21wbGV0ZWQgJWQgcmVzZXRzXG4iLCBlbmdpbmUtPm5hbWUs IGNvdW50KTsKKworCQkqaC5iYXRjaCA9IE1JX0JBVENIX0JVRkZFUl9FTkQ7CisJCXdtYigpOwor CisJCWk5MTVfZ2VtX3JlcXVlc3RfcHV0KHByZXYpOworCX0KKworZmluaToKKwloYW5nX2Zpbmko JmgpOwordW5sb2NrOgorCW11dGV4X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7CisK KwlpZiAoaTkxNV90ZXJtaW5hbGx5X3dlZGdlZCgmaTkxNS0+Z3B1X2Vycm9yKSkKKwkJcmV0dXJu IC1FSU87CisKKwlyZXR1cm4gZXJyOworfQorCitpbnQgaW50ZWxfaGFuZ2NoZWNrX2xpdmVfc2Vs ZnRlc3RzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQoreworCXN0YXRpYyBjb25zdCBz dHJ1Y3QgaTkxNV9zdWJ0ZXN0IHRlc3RzW10gPSB7CisJCVNVQlRFU1QoaWd0X2hhbmdfc2FuaXR5 Y2hlY2spLAorCQlTVUJURVNUKGlndF9nbG9iYWxfcmVzZXQpLAorCQlTVUJURVNUKGlndF93YWl0 X3Jlc2V0KSwKKwkJU1VCVEVTVChpZ3RfcmVzZXRfcXVldWUpLAorCX07CisKKwlpZiAoIWludGVs X2hhc19ncHVfcmVzZXQoaTkxNSkpCisJCXJldHVybiAwOworCisJcmV0dXJuIGk5MTVfc3VidGVz dHModGVzdHMsIGk5MTUpOworfQotLSAKMi4xMS4wCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9pbnRlbC1nZngK