From mboxrd@z Thu Jan 1 00:00:00 1970 From: akash.goel@intel.com Subject: [PATCH v3] igt/gem_trtt: Exercise the TRTT hardware Date: Thu, 3 Mar 2016 10:25:59 +0530 Message-ID: <1456980959-29057-1-git-send-email-akash.goel@intel.com> References: <20160122204102.GX16147@nuc-i3427.alporthouse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTP id 1B46E6E9D1 for ; Thu, 3 Mar 2016 04:43:16 +0000 (UTC) In-Reply-To: <20160122204102.GX16147@nuc-i3427.alporthouse.com> 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 Cc: Akash Goel List-Id: intel-gfx@lists.freedesktop.org RnJvbTogQWthc2ggR29lbCA8YWthc2guZ29lbEBpbnRlbC5jb20+CgpUaGlzIHBhdGNoIHByb3Zp ZGVzIHRoZSB0ZXN0Y2FzZSB0byBleGVyY2lzZSB0aGUgVFJUVCBoYXJkd2FyZS4KClNvbWUgcGxh dGZvcm1zIGhhdmUgYW4gYWRkaXRpb25hbCBhZGRyZXNzIHRyYW5zbGF0aW9uIGhhcmR3YXJlIHN1 cHBvcnQgaW4KZm9ybSBvZiBUaWxlZCBSZXNvdXJjZSBUcmFuc2xhdGlvbiBUYWJsZSAoVFItVFQp IHdoaWNoIHByb3ZpZGVzIGFuIGV4dHJhIGxldmVsCm9mIGFic3RyYWN0aW9uIG92ZXIgUFBHVFQu ClRoaXMgaXMgdXNlZnVsIGZvciBtYXBwaW5nIFNwYXJzZS9UaWxlZCB0ZXh0dXJlIHJlc291cmNl cy4KClRSLVRUIGlzIHRpZ2h0bHkgY291cGxlZCB3aXRoIFBQR1RULCBhIG5ldyBpbnN0YW5jZSBv ZiBUUi1UVCB3aWxsIGJlIHJlcXVpcmVkCmZvciBhIG5ldyBQUEdUVCBpbnN0YW5jZSwgYnV0IFRS LVRUIG1heSBub3QgZW5hYmxlZCBmb3IgZXZlcnkgY29udGV4dC4KMS8xNnRoIG9mIHRoZSA0OGJp dCBQUEdUVCBzcGFjZSBpcyBlYXJtYXJrZWQgZm9yIHRoZSB0cmFuc2xhdGlvbiBieSBUUi1UVCwK d2hpY2ggc3VjaCBjaHVuayB0byB1c2UgaXMgY29udmV5ZWQgdG8gSFcgdGhyb3VnaCBhIHJlZ2lz dGVyLgpBbnkgR0ZYIGFkZHJlc3MsIHdoaWNoIGxpZXMgaW4gdGhhdCByZXNlcnZlZCA0NCBiaXQg cmFuZ2Ugd2lsbCBiZSB0cmFuc2xhdGVkCnRocm91Z2ggVFItVFQgZmlyc3QgYW5kIHRoZW4gdGhy b3VnaCBQUEdUVCB0byBnZXQgdGhlIGFjdHVhbCBwaHlzaWNhbCBhZGRyZXNzLgoKVFJUVCBpcyBj b25zdHJ1Y3RlZCBhcyBhIDMgbGV2ZWwgdGlsZSBUYWJsZS4gRWFjaCB0aWxlIGlzIDY0S0IgaXMg c2l6ZSB3aGljaApsZWF2ZXMgYmVoaW5kIDQ0LTE2PTI4IGFkZHJlc3MgYml0cy4gMjhiaXRzIGFy ZSBwYXJ0aXRpb25lZCBhcyA5KzkrMTAsIGFuZAplYWNoIGxldmVsIGlzIGNvbnRhaW5lZCB3aXRo aW4gYSA0S0IgcGFnZSBoZW5jZSBMMyBhbmQgTDIgaXMgY29tcG9zZWQgb2YKNTEyIDY0YiBlbnRy aWVzIGFuZCBMMSBpcyBjb21wb3NlZCBvZiAxMDI0IDMyYiBlbnRyaWVzLgoKVGhlcmUgaXMgYSBw cm92aXNpb24gdG8ga2VlcCBUUi1UVCBUYWJsZXMgaW4gdmlydHVhbCBzcGFjZSwgd2hlcmUgdGhl IHBhZ2VzIG9mClRSVFQgdGFibGVzIHdpbGwgYmUgbWFwcGVkIHRvIFBQR1RULiBUaGlzIGlzIHRo ZSBhZG9wdGVkIG1vZGUsIGFzIGluIHRoaXMgbW9kZQpVTUQgd2lsbCBoYXZlIGEgZnVsbCBjb250 cm9sIG9uIFRSLVRUIG1hbmFnZW1lbnQsIHdpdGggYmFyZSBtaW5pbXVtIHN1cHBvcnQKZnJvbSBL TUQuClNvIHRoZSBlbnRyaWVzIG9mIEwzIHRhYmxlIHdpbGwgY29udGFpbiB0aGUgUFBHVFQgb2Zm c2V0IG9mIEwyIFRhYmxlIHBhZ2VzLApzaW1pbGFybHkgZW50cmllcyBvZiBMMiB0YWJsZSB3aWxs IGNvbnRhaW4gdGhlIFBQR1RUIG9mZnNldCBvZiBMMSBUYWJsZSBwYWdlcy4KVGhlIGVudHJpZXMg b2YgTDEgdGFibGUgd2lsbCBjb250YWluIHRoZSBQUEdUVCBvZmZzZXQgb2YgQk9zIGFjdHVhbGx5 IGJhY2tpbmcKdGhlIFNwYXJzZSByZXNvdXJjZXMuCgpJOTE1X0dFTV9DT05URVhUX1NFVFBBUkFN IGlvY3RsIGlzIHVzZWQgdG8gcmVxdWVzdCBLTUQgdG8gZW5hYmxlIFRSVFQgZm9yIGEKY2VydGFp biBjb250ZXh0LCBhIG5ldyBJOTE1X0NPTlRFWFRfUEFSQU1fRU5BQkxFX1RSVFQgcGFyYW0gaGFz IGJlZW4KYWRkZWQgdG8gdGhlIENPTlRFWFRfU0VUUEFSQU0gaW9jdGwgZm9yIHRoYXQgcHVycG9z ZS4KCnYyOgogLSBBZGQgbmV3IHdyYXBwZXIgZnVuY3Rpb24gX19nZW1fY29udGV4dF9yZXF1aXJl X3BhcmFtIGFuZCB1c2VkIHRoYXQKICAgdG8gZGV0ZWN0IHRoZSBUUi1UVCBzdXBwb3J0CiAtIFVz ZSBpZ3RfbWFpbiBtYWNybywgcmVuYW1lIGNlcnRhaW4gZnVuY3Rpb24sIHJlbW92ZSBleHRyYSB3 aGl0ZSBzcGFjZSwKICAgY2xlYW51cCB0aGUgY29kZSAoQ2hyaXMpCiAtIEVuaGFuY2UgdGhlIGJh c2ljIHN1YnRlc3QgdG8gZXhlcmNpc2UgYWxsIHBvc3NpYmxlIFRSLVRUIHNlZ21lbnQgc3RhcnQK ICAgbG9jYXRpb25zIChpLmUuIDE2IG9mIHRoZW0pICYgZm9yIGV2ZXJ5IGl0ZXJhdGlvbiBjcmVh dGUgYSBuZXcgY29udGV4dC4KCnYzOgogLSBHZXQgcmlkIG9mIHNvbWUgc3VwZXJmbHVvdXMgbG9j YWwgdmFyaWFibGVzIChDaHJpcykKIC0gQWRkIGFzc2VydHMgdG8gdmFsaWRhdGUgd2hldGhlciB0 aGUgR0ZYIGFkZHJlc3MgdXNlZCBpbiBNSV9TVE9SRV9EQVRBX0lNTQogICBjb21tYW5kIGlzIGlu IGNhbm9uaWNhbCBmb3JtICYgaXMgY29ycmVjdGx5IGFsaWduZWQgb3Igbm90IChDaHJpcykKIC0g UmVtb3ZlIGNsZWFyaW5nIG9mIGVycm5vIGluIGhhc190cnR0X3N1cHBvcnQgZnVuY3Rpb24gKENo cmlzKQogLSBVc2UgdGhlIDQ4Ql9BRERSRVNTIGZsYWcgZm9yIGJhdGNoIGJ1ZmZlciBCTyBhbHNv IChDaHJpcykKIC0gUmViYXNlZC4KCkNjOiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNv bi5jby51az4KQ2M6IE1pY2hlbCBUaGllcnJ5IDxtaWNoZWwudGhpZXJyeUBpbnRlbC5jb20+ClNp Z25lZC1vZmYtYnk6IEFrYXNoIEdvZWwgPGFrYXNoLmdvZWxAaW50ZWwuY29tPgotLS0KIGxpYi9p b2N0bF93cmFwcGVycy5jICAgfCAgMjUgKystCiBsaWIvaW9jdGxfd3JhcHBlcnMuaCAgIHwgICAy ICsKIHRlc3RzL01ha2VmaWxlLnNvdXJjZXMgfCAgIDEgKwogdGVzdHMvZ2VtX3RydHQuYyAgICAg ICB8IDQ4MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr CiA0IGZpbGVzIGNoYW5nZWQsIDUwMyBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQogY3Jl YXRlIG1vZGUgMTAwNjQ0IHRlc3RzL2dlbV90cnR0LmMKCmRpZmYgLS1naXQgYS9saWIvaW9jdGxf d3JhcHBlcnMuYyBiL2xpYi9pb2N0bF93cmFwcGVycy5jCmluZGV4IDQwNzEyNjAuLmY2YmE4ZTEg MTAwNjQ0Ci0tLSBhL2xpYi9pb2N0bF93cmFwcGVycy5jCisrKyBiL2xpYi9pb2N0bF93cmFwcGVy cy5jCkBAIC04ODIsNiArODgyLDIyIEBAIHZvaWQgZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGludCBm ZCwgc3RydWN0IGxvY2FsX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW0gKnApCiAJaWd0X2Fzc2VydChf X2dlbV9jb250ZXh0X3NldF9wYXJhbShmZCwgcCkgPT0gMCk7CiB9CiAKK2ludCBfX2dlbV9jb250 ZXh0X3JlcXVpcmVfcGFyYW0oaW50IGZkLCB1aW50NjRfdCBwYXJhbSkKK3sKKwlzdHJ1Y3QgbG9j YWxfaTkxNV9nZW1fY29udGV4dF9wYXJhbSBwOworCWludCByZXQ7CisKKwlwLmNvbnRleHQgPSAw OworCXAucGFyYW0gPSBwYXJhbTsKKwlwLnZhbHVlID0gMDsKKwlwLnNpemUgPSAwOworCisJcmV0 ID0gZHJtSW9jdGwoZmQsIExPQ0FMX0lPQ1RMX0k5MTVfR0VNX0NPTlRFWFRfR0VUUEFSQU0sICZw KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gLWVycm5vOworCXJldHVybiAwOworfQorCiAvKioKICAq IGdlbV9jb250ZXh0X3JlcXVpcmVfcGFyYW06CiAgKiBAZmQ6IG9wZW4gaTkxNSBkcm0gZmlsZSBk ZXNjcmlwdG9yCkBAIC04OTIsMTQgKzkwOCw3IEBAIHZvaWQgZ2VtX2NvbnRleHRfc2V0X3BhcmFt KGludCBmZCwgc3RydWN0IGxvY2FsX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW0gKnApCiAgKi8KIHZv aWQgZ2VtX2NvbnRleHRfcmVxdWlyZV9wYXJhbShpbnQgZmQsIHVpbnQ2NF90IHBhcmFtKQogewot CXN0cnVjdCBsb2NhbF9pOTE1X2dlbV9jb250ZXh0X3BhcmFtIHA7Ci0KLQlwLmNvbnRleHQgPSAw OwotCXAucGFyYW0gPSBwYXJhbTsKLQlwLnZhbHVlID0gMDsKLQlwLnNpemUgPSAwOwotCi0JaWd0 X3JlcXVpcmUoZHJtSW9jdGwoZmQsIExPQ0FMX0lPQ1RMX0k5MTVfR0VNX0NPTlRFWFRfR0VUUEFS QU0sICZwKSA9PSAwKTsKKwlpZ3RfcmVxdWlyZShfX2dlbV9jb250ZXh0X3JlcXVpcmVfcGFyYW0o ZmQsIHBhcmFtKSA9PSAwKTsKIH0KIAogdm9pZCBnZW1fY29udGV4dF9yZXF1aXJlX2Jhbl9wZXJp b2QoaW50IGZkKQpkaWZmIC0tZ2l0IGEvbGliL2lvY3RsX3dyYXBwZXJzLmggYi9saWIvaW9jdGxf d3JhcHBlcnMuaAppbmRleCBkYzA4MjdhLi5iY2FiZTMwIDEwMDY0NAotLS0gYS9saWIvaW9jdGxf d3JhcHBlcnMuaAorKysgYi9saWIvaW9jdGxfd3JhcHBlcnMuaApAQCAtMTA3LDkgKzEwNywxMSBA QCBzdHJ1Y3QgbG9jYWxfaTkxNV9nZW1fY29udGV4dF9wYXJhbSB7CiAjZGVmaW5lIExPQ0FMX0NP TlRFWFRfUEFSQU1fQkFOX1BFUklPRAkweDEKICNkZWZpbmUgTE9DQUxfQ09OVEVYVF9QQVJBTV9O T19aRVJPTUFQCTB4MgogI2RlZmluZSBMT0NBTF9DT05URVhUX1BBUkFNX0dUVF9TSVpFCTB4Mwor I2RlZmluZSBMT0NBTF9DT05URVhUX1BBUkFNX1RSVFQJMHg0CiAJdWludDY0X3QgdmFsdWU7CiB9 Owogdm9pZCBnZW1fY29udGV4dF9yZXF1aXJlX2Jhbl9wZXJpb2QoaW50IGZkKTsKK2ludCBfX2dl bV9jb250ZXh0X3JlcXVpcmVfcGFyYW0oaW50IGZkLCB1aW50NjRfdCBwYXJhbSk7CiB2b2lkIGdl bV9jb250ZXh0X3JlcXVpcmVfcGFyYW0oaW50IGZkLCB1aW50NjRfdCBwYXJhbSk7CiB2b2lkIGdl bV9jb250ZXh0X2dldF9wYXJhbShpbnQgZmQsIHN0cnVjdCBsb2NhbF9pOTE1X2dlbV9jb250ZXh0 X3BhcmFtICpwKTsKIHZvaWQgZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGludCBmZCwgc3RydWN0IGxv Y2FsX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW0gKnApOwpkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZp bGUuc291cmNlcyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKaW5kZXggZjhiMThiMC4uZTYwODFm NiAxMDA2NDQKLS0tIGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcworKysgYi90ZXN0cy9NYWtlZmls ZS5zb3VyY2VzCkBAIC03Myw2ICs3Myw3IEBAIFRFU1RTX3Byb2dzX00gPSBcCiAJZ2VtX3N0cmVh bWluZ193cml0ZXMgXAogCWdlbV90aWxlZF9ibGl0cyBcCiAJZ2VtX3RpbGVkX3BhcnRpYWxfcHdy aXRlX3ByZWFkIFwKKwlnZW1fdHJ0dCBcCiAJZ2VtX3VzZXJwdHJfYmxpdHMgXAogCWdlbV93cml0 ZV9yZWFkX3Jpbmdfc3dpdGNoIFwKIAlrbXNfYWRkZmJfYmFzaWMgXApkaWZmIC0tZ2l0IGEvdGVz dHMvZ2VtX3RydHQuYyBiL3Rlc3RzL2dlbV90cnR0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uZjhhOWMzZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2dlbV90cnR0LmMK QEAgLTAsMCArMSw0ODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxNiBJbnRlbCBDb3Jwb3Jh dGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdl LCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5k IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8g ZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhv dXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2Us IHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMg b2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNv ZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVy bWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBi ZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQor ICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJ VEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xV RElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ LAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVO VC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVS UyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZ LCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFS SVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJF IE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisg KiBBdXRob3JzOgorICogICAgQWthc2ggR29lbCA8YWthc2guZ29lbEBpbnRlbC5jb20+CisgKgor ICovCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRl IDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lu Y2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNpbmNsdWRlIDxlcnJuby5o PgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVk ZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxtYWxsb2MuaD4KKyNpbmNsdWRlICJkcm0uaCIKKyNp bmNsdWRlICJpb2N0bF93cmFwcGVycy5oIgorI2luY2x1ZGUgImRybXRlc3QuaCIKKyNpbmNsdWRl ICJpbnRlbF9jaGlwc2V0LmgiCisjaW5jbHVkZSAiaW50ZWxfaW8uaCIKKyNpbmNsdWRlICJpOTE1 X2RybS5oIgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisjaW5j bHVkZSA8c3lzL2lwYy5oPgorI2luY2x1ZGUgPHN5cy9zaG0uaD4KKyNpbmNsdWRlICJpZ3Rfa21z LmgiCisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNs dWRlIDxzeXMvc3RhdC5oPgorCisjZGVmaW5lIEJPX1NJWkUgNDA5NgorI2RlZmluZSBFWEVDX09C SkVDVF9QSU5ORUQJKDE8PDQpCisjZGVmaW5lIEVYRUNfT0JKRUNUX1NVUFBPUlRTXzQ4Ql9BRERS RVNTICgxPDwzKQorCisvKiBnZW44X2Nhbm9uaWNhbF9hZGRyCisgKiBVc2VkIHRvIGNvbnZlcnQg YW55IGFkZHJlc3MgaW50byBjYW5vbmljYWwgZm9ybSwgaS5lLiBbNjM6NDhdID09IFs0N10uCisg KiBCYXNlZCBvbiBrZXJuZWwncyBzaWduX2V4dGVuZDY0IGltcGxlbWVudGF0aW9uLgorICogQGFk ZHJlc3MgLSBhIHZpcnR1YWwgYWRkcmVzcworICovCisjZGVmaW5lIEdFTjhfSElHSF9BRERSRVNT X0JJVCA0Nworc3RhdGljIHVpbnQ2NF90IGdlbjhfY2Fub25pY2FsX2FkZHIodWludDY0X3QgYWRk cmVzcykKK3sKKwlfX3U4IHNoaWZ0ID0gNjMgLSBHRU44X0hJR0hfQUREUkVTU19CSVQ7CisJcmV0 dXJuIChfX3M2NCkoYWRkcmVzcyA8PCBzaGlmdCkgPj4gc2hpZnQ7Cit9CisKKyNkZWZpbmUgTk9f UFBHVFQgMAorI2RlZmluZSBBTElBU0lOR19QUEdUVCAxCisjZGVmaW5lIEZVTExfMzJfQklUX1BQ R1RUIDIKKyNkZWZpbmUgRlVMTF80OF9CSVRfUFBHVFQgMworLyogdXNlc19mdWxsX3BwZ3R0Cisg KiBGaW5kcyBzdXBwb3J0ZWQgUFBHVFQgZGV0YWlscy4KKyAqIEBmZCBEUk0gZmQKKyAqIEBtaW4g Y2FuIGJlCisgKiAwIC0gTm8gUFBHVFQKKyAqIDEgLSBBbGlhc2luZyBQUEdUVAorICogMiAtIEZ1 bGwgUFBHVFQgKDMyYikKKyAqIDMgLSBGdWxsIFBQR1RUICg0OGIpCisgKiBSRVRVUk5TIHRydWUv ZmFsc2UgaWYgbWluIHN1cHBvcnQgaXMgcHJlc2VudAorICovCitzdGF0aWMgYm9vbCB1c2VzX2Z1 bGxfcHBndHQoaW50IGZkLCBpbnQgbWluKQoreworCXN0cnVjdCBkcm1faTkxNV9nZXRwYXJhbSBn cDsKKwlpbnQgdmFsID0gMDsKKworCW1lbXNldCgmZ3AsIDAsIHNpemVvZihncCkpOworCWdwLnBh cmFtID0gMTg7IC8qIEhBU19BTElBU0lOR19QUEdUVCAqLworCWdwLnZhbHVlID0gJnZhbDsKKwor CWlmIChkcm1Jb2N0bChmZCwgRFJNX0lPQ1RMX0k5MTVfR0VUUEFSQU0sICZncCkpCisJCXJldHVy biAwOworCisJZXJybm8gPSAwOworCXJldHVybiB2YWwgPj0gbWluOworfQorCisvKiBoYXNfc29m dHBpbl9zdXBwb3J0CisgKiBGaW5kcyBpZiBzb2Z0cGluIGZlYXR1cmUgaXMgc3VwcG9ydGVkCisg KiBAZmQgRFJNIGZkCisgKi8KK3N0YXRpYyBib29sIGhhc19zb2Z0cGluX3N1cHBvcnQoaW50IGZk KQoreworCXN0cnVjdCBkcm1faTkxNV9nZXRwYXJhbSBncDsKKwlpbnQgdmFsID0gMDsKKworCW1l bXNldCgmZ3AsIDAsIHNpemVvZihncCkpOworCWdwLnBhcmFtID0gMzc7IC8qIEk5MTVfUEFSQU1f SEFTX0VYRUNfU09GVFBJTiAqLworCWdwLnZhbHVlID0gJnZhbDsKKworCWlmIChkcm1Jb2N0bChm ZCwgRFJNX0lPQ1RMX0k5MTVfR0VUUEFSQU0sICZncCkpCisJCXJldHVybiAwOworCisJZXJybm8g PSAwOworCXJldHVybiAodmFsID09IDEpOworfQorCisvKiBoYXNfdHJ0dF9zdXBwb3J0CisgKiBG aW5kcyBpZiB0cnR0IGh3IGlzIHByZXNlbnQKKyAqIEBmZCBEUk0gZmQKKyAqLworc3RhdGljIGJv b2wgaGFzX3RydHRfc3VwcG9ydChpbnQgZmQpCit7CisJaW50IHJldCA9IF9fZ2VtX2NvbnRleHRf cmVxdWlyZV9wYXJhbShmZCwgTE9DQUxfQ09OVEVYVF9QQVJBTV9UUlRUKTsKKworCXJldHVybiAo cmV0ID09IDApOworfQorCisvKiBtbWFwX2JvCisgKiBoZWxwZXIgZm9yIGNyZWF0aW5nIGEgQ1BV IG1tYXBwaW5nIG9mIHRoZSBidWZmZXIKKyAqIEBmZCAtIGRybSBmZAorICogQGhhbmRsZSAtIGhh bmRsZSBvZiB0aGUgYnVmZmVyIHRvIG1tYXAKKyAqIEBzaXplOiBzaXplIG9mIHRoZSBidWZmZXIK KyAqLworc3RhdGljIHZvaWQqIG1tYXBfYm8oaW50IGZkLCB1aW50MzJfdCBoYW5kbGUsIHVpbnQ2 NF90IHNpemUpCit7CisJdWludDMyX3QgKnB0ciA9IGdlbV9tbWFwX19jcHUoZmQsIGhhbmRsZSwg MCwgc2l6ZSwgUFJPVF9SRUFEKTsKKwlnZW1fc2V0X2RvbWFpbihmZCwgaGFuZGxlLCBJOTE1X0dF TV9ET01BSU5fQ1BVLCAwKTsKKwlyZXR1cm4gcHRyOworfQorCisvKiBlbWl0X3N0b3JlX2R3b3Jk CisgKiBwb3B1bGF0ZSBiYXRjaCBidWZmZXIgd2l0aCBNSV9TVE9SRV9EV09SRF9JTU0gY29tbWFu ZAorICogQGZkOiBkcm0gZmlsZSBkZXNjcmlwdG9yCisgKiBAY21kX2J1ZjogYmF0Y2ggYnVmZmVy CisgKiBAZHdfb2Zmc2V0OiB3cml0ZSBvZmZzZXQgaW4gYmF0Y2ggYnVmZmVyCisgKiBAdmFkZHI6 IGRlc3RpbmF0aW9uIFZpcnR1YWwgYWRkcmVzcworICogQGRhdGE6IHUzMiBkYXRhIHRvIGJlIHN0 b3JlZCBhdCBkZXN0aW5hdGlvbgorICovCitzdGF0aWMgaW50IGVtaXRfc3RvcmVfZHdvcmQoaW50 IGZkLCB1aW50MzJfdCAqY21kX2J1ZiwgdWludDMyX3QgZHdfb2Zmc2V0LAorCQkJICAgIHVpbnQ2 NF90IHZhZGRyLCB1aW50MzJfdCBkYXRhKQoreworCS8qIENoZWNrIHRoYXQgc29mdHBpbiBhZGRy ZXNzZXMgYXJlIGluIHRoZSBjb3JyZWN0IGZvcm0gKi8KKwlhc3NlcnQodmFkZHIgPT0gZ2VuOF9j YW5vbmljYWxfYWRkcih2YWRkcikpOworCisJLyogU0RJIGNhbm5vdCB3cml0ZSB0byB1bmFsaWdu ZWQgYWRkcmVzc2VzICovCisJYXNzZXJ0KCh2YWRkciAmIDMpID09IDApOworCisJY21kX2J1Zltk d19vZmZzZXQrK10gPSBNSV9TVE9SRV9EV09SRF9JTU07CisJY21kX2J1Zltkd19vZmZzZXQrK10g PSB2YWRkciAmIDB4RkZGRkZGRkM7CisJY21kX2J1Zltkd19vZmZzZXQrK10gPSAodmFkZHIgPj4g MzIpICYgMHhGRkZGOyAvKiBiaXRzIDMyOjQ3ICovCisJY21kX2J1Zltkd19vZmZzZXQrK10gPSBk YXRhOworCisJcmV0dXJuIGR3X29mZnNldDsKK30KKworLyogZW1pdF9zdG9yZV9xd29yZAorICog cG9wdWxhdGUgYmF0Y2ggYnVmZmVyIHdpdGggTUlfU1RPUkVfRFdPUkRfSU1NIGNvbW1hbmQKKyAq IEBmZDogZHJtIGZpbGUgZGVzY3JpcHRvcgorICogQGNtZF9idWY6IGJhdGNoIGJ1ZmZlcgorICog QGR3X29mZnNldDogd3JpdGUgb2Zmc2V0IGluIGJhdGNoIGJ1ZmZlcgorICogQHZhZGRyOiBkZXN0 aW5hdGlvbiBWaXJ0dWFsIGFkZHJlc3MKKyAqIEBkYXRhOiB1NjQgZGF0YSB0byBiZSBzdG9yZWQg YXQgZGVzdGluYXRpb24KKyAqLworc3RhdGljIGludCBlbWl0X3N0b3JlX3F3b3JkKGludCBmZCwg dWludDMyX3QgKmNtZF9idWYsIHVpbnQzMl90IGR3X29mZnNldCwKKwkJCSAgICB1aW50NjRfdCB2 YWRkciwgdWludDY0X3QgZGF0YSkKK3sKKwkvKiBDaGVjayB0aGF0IHNvZnRwaW4gYWRkcmVzc2Vz IGFyZSBpbiB0aGUgY29ycmVjdCBmb3JtICovCisJYXNzZXJ0KHZhZGRyID09IGdlbjhfY2Fub25p Y2FsX2FkZHIodmFkZHIpKTsKKworCS8qIFNESSBjYW5ub3Qgd3JpdGUgdG8gdW5hbGlnbmVkIGFk ZHJlc3NlcyAqLworCWFzc2VydCgodmFkZHIgJiAzKSA9PSAwKTsKKworCWNtZF9idWZbZHdfb2Zm c2V0KytdID0gTUlfU1RPUkVfRFdPUkRfSU1NIHwgMHgzOworCWNtZF9idWZbZHdfb2Zmc2V0Kytd ID0gdmFkZHIgJiAweEZGRkZGRkZDOworCWNtZF9idWZbZHdfb2Zmc2V0KytdID0gKHZhZGRyID4+ IDMyKSAmIDB4RkZGRjsgLyogYml0cyAzMjo0NyAqLworCWNtZF9idWZbZHdfb2Zmc2V0KytdID0g ZGF0YTsKKwljbWRfYnVmW2R3X29mZnNldCsrXSA9IGRhdGEgPj4gMzI7CisKKwlyZXR1cm4gZHdf b2Zmc2V0OworfQorCisvKiBlbWl0X2JiX2VuZAorICogcG9wdWxhdGUgYmF0Y2ggYnVmZmVyIHdp dGggTUlfQkFUQ0hfQlVGRkVSX0VORCBjb21tYW5kCisgKiBAZmQ6IGRybSBmaWxlIGRlc2NyaXB0 b3IKKyAqIEBjbWRfYnVmOiBiYXRjaCBidWZmZXIKKyAqIEBkd19vZmZzZXQ6IHdyaXRlIG9mZnNl dCBpbiBiYXRjaCBidWZmZXIKKyAqLworc3RhdGljIGludCBlbWl0X2JiX2VuZChpbnQgZmQsIHVp bnQzMl90ICpjbWRfYnVmLCB1aW50MzJfdCBkd19vZmZzZXQpCit7CisJY21kX2J1Zltkd19vZmZz ZXQrK10gPSBNSV9CQVRDSF9CVUZGRVJfRU5EOworCWNtZF9idWZbZHdfb2Zmc2V0KytdID0gMDsK KworCXJldHVybiBkd19vZmZzZXQ7Cit9CisKKy8qIHNldHVwX2V4ZWNidWZmZXIKKyAqIGhlbHBl ciBmb3IgYnVmZmVyIGV4ZWN1dGlvbgorICogQGV4ZWNidWYgLSBwb2ludGVyIHRvIGV4ZWNidWZm ZXIKKyAqIEBleGVjX29iamVjdCAtIHBvaW50ZXIgdG8gZXhlYyBvYmplY3QyIHN0cnVjdAorICog QHJpbmcgLSByaW5nIHRvIGJlIHVzZWQKKyAqIEBidWZmZXJfY291bnQgLSBob3cgbWFudSBidWZm ZXJzIHRvIHN1Ym1pdAorICogQGJhdGNoX2xlbmd0aCAtIGxlbmd0aCBvZiBiYXRjaCBidWZmZXIK KyAqLworc3RhdGljIHZvaWQgc2V0dXBfZXhlY2J1ZmZlcihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4 ZWNidWZmZXIyICpleGVjYnVmLAorCQkJICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2Jq ZWN0MiAqZXhlY19vYmplY3QsCisJCQkgICAgIHVpbnQzMl90IGN0eF9pZCwgaW50IHJpbmcsIGlu dCBidWZmZXJfY291bnQsIGludCBiYXRjaF9sZW5ndGgpCit7CisJbWVtc2V0KGV4ZWNidWYsIDAs IHNpemVvZigqZXhlY2J1ZikpOworCisJZXhlY2J1Zi0+YnVmZmVyc19wdHIgPSAodW5zaWduZWQg bG9uZylleGVjX29iamVjdDsKKwlleGVjYnVmLT5idWZmZXJfY291bnQgPSBidWZmZXJfY291bnQ7 CisJZXhlY2J1Zi0+YmF0Y2hfbGVuID0gYmF0Y2hfbGVuZ3RoOworCWV4ZWNidWYtPmZsYWdzID0g cmluZzsKKwlpOTE1X2V4ZWNidWZmZXIyX3NldF9jb250ZXh0X2lkKCpleGVjYnVmLCBjdHhfaWQp OworfQorCisjZGVmaW5lIFRBQkxFX1NJWkUgMHgxMDAwCisjZGVmaW5lIFRJTEVfU0laRSAweDEw MDAwCisKKyNkZWZpbmUgVFJUVF9TRUdNRU5UX1NJWkUgKDFVTEwgPDwgNDQpCisjZGVmaW5lIFBQ R1RUX1NJWkUgKDFVTEwgPDwgNDgpCisKKyNkZWZpbmUgTlVMTF9USUxFX1BBVFRFUk4gICAgMHhG RkZGRkZGRgorI2RlZmluZSBJTlZBTElEX1RJTEVfUEFUVEVSTiAweEZGRkZGRkZFCisKK3N0cnVj dCBsb2NhbF9pOTE1X2dlbV9jb250ZXh0X3RydHRfcGFyYW0geworCXVpbnQ2NF90IHNlZ21lbnRf YmFzZV9hZGRyOworCXVpbnQ2NF90IGwzX3RhYmxlX2FkZHJlc3M7CisJdWludDMyX3QgaW52ZF90 aWxlX3ZhbDsKKwl1aW50MzJfdCBudWxsX3RpbGVfdmFsOworfTsKKworLyogc2V0dXBfdHJ0dAor ICogSGVscGVyIGZ1bmN0aW9uIHRvIHJlcXVlc3QgS01EIHRvIGVuYWJsZSBUUlRUCisgKiBAZmQg LSBkcm0gZmQKKyAqIEBjdHhfaWQgLSBpZCBvZiB0aGUgY29udGV4dCBmb3Igd2hpY2ggVFJUVCBp cyB0byBiZSBlbmFibGVkCisgKiBAbDNfdGFibGVfYWRkcmVzcyAtIEdGWCBhZGRyZXNzIG9mIHRo ZSBMMyB0YWJsZQorICogQHNlZ21lbnRfYmFzZV9hZGRyIC0gb2Zmc2V0IG9mIHRoZSBUUlRUIHNl Z21lbnQgaW4gUFBHVFQgc3BhY2UKKyAqLworc3RhdGljIHZvaWQKK3NldHVwX3RydHQoaW50IGZk LCB1aW50MzJfdCBjdHhfaWQsIHVpbnQ2NF90IGwzX3RhYmxlX2FkZHJlc3MsCisJICAgdWludDY0 X3Qgc2VnbWVudF9iYXNlX2FkZHIpCit7CisJc3RydWN0IGxvY2FsX2k5MTVfZ2VtX2NvbnRleHRf cGFyYW0gY3R4X3BhcmFtOworCXN0cnVjdCBsb2NhbF9pOTE1X2dlbV9jb250ZXh0X3RydHRfcGFy YW0gdHJ0dF9wYXJhbTsKKworCW1lbXNldCgmY3R4X3BhcmFtLCAwLCBzaXplb2YoY3R4X3BhcmFt KSk7CisKKwl0cnR0X3BhcmFtLm51bGxfdGlsZV92YWwgPSBOVUxMX1RJTEVfUEFUVEVSTjsKKwl0 cnR0X3BhcmFtLmludmRfdGlsZV92YWwgPSBJTlZBTElEX1RJTEVfUEFUVEVSTjsKKwl0cnR0X3Bh cmFtLmwzX3RhYmxlX2FkZHJlc3MgPSBsM190YWJsZV9hZGRyZXNzOworCXRydHRfcGFyYW0uc2Vn bWVudF9iYXNlX2FkZHIgPSBzZWdtZW50X2Jhc2VfYWRkcjsKKworCWN0eF9wYXJhbS5jb250ZXh0 ID0gY3R4X2lkOworCWN0eF9wYXJhbS5zaXplID0gc2l6ZW9mKHRydHRfcGFyYW0pOworCWN0eF9w YXJhbS5wYXJhbSA9IExPQ0FMX0NPTlRFWFRfUEFSQU1fVFJUVDsKKwljdHhfcGFyYW0udmFsdWUg PSAodWludDY0X3QpJnRydHRfcGFyYW07CisKKwlnZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZj dHhfcGFyYW0pOworfQorCisvKiBib19hbGxvY19zZXR1cAorICogYWxsb2NhdGUgYm8gYW5kIHBv cHVsYXRlIGV4ZWMgb2JqZWN0CisgKiBAZXhlY19vYmplY3QyIC0gcG9pbnRlciB0byBleGVjIG9i amVjdAorICogQGJvX3NpemVlIC0gYnVmZmVyIHNpemUKKyAqIEBmbGFncyAtIGV4ZWMgZmxhZ3MK KyAqIEBib19vZmZzZXQgLSBwb2ludGVyIHRvIHRoZSBjdXJyZW50IFBQR1RUIG9mZnNldAorICov CitzdGF0aWMgdm9pZCBib19hbGxvY19zZXR1cChpbnQgZmQsIHN0cnVjdCBkcm1faTkxNV9nZW1f ZXhlY19vYmplY3QyICpleGVjX29iamVjdDIsCisJCQkgICB1aW50NjRfdCBib19zaXplLCB1aW50 NjRfdCBmbGFncywgdWludDY0X3QgKmJvX29mZnNldCkKK3sKKwltZW1zZXQoZXhlY19vYmplY3Qy LCAwLCBzaXplb2YoKmV4ZWNfb2JqZWN0MikpOworCWV4ZWNfb2JqZWN0Mi0+aGFuZGxlID0gZ2Vt X2NyZWF0ZShmZCwgYm9fc2l6ZSk7CisJZXhlY19vYmplY3QyLT5mbGFncyA9IGZsYWdzOworCisJ aWYgKGJvX29mZnNldCkKKwl7CisJCWV4ZWNfb2JqZWN0Mi0+b2Zmc2V0ID0gKmJvX29mZnNldDsK KwkJKmJvX29mZnNldCArPSBib19zaXplOworCX0KK30KKworLyogc3VibWl0X3RydHRfY29udGV4 dAorICogVGhpcyBoZWxwZXIgZnVuY3Rpb24gd2lsbCBjcmVhdGUgYSBuZXcgY29udGV4dCBpZiB0 aGUgVFItVFQgc2VnbWVudAorICogYmFzZSBhZGRyZXNzIGlzIG5vdCB6ZXJvLCBhbGxvY2F0ZSBh IEwzIHRhYmxlIHBhZ2UsIDIgcGFnZXMgYXBpZWNlCisgKiBmb3IgTDIvTDEgdGFibGVzIGFuZCBj b3VwbGUgb2YgZGF0YSBidWZmZXJzIG9mIDY0S0IgaW4gc2l6ZSwgbWF0Y2hpbmcgdGhlCisgKiBU aWxlIHNpemUuIFRoZSAyIGRhdGEgYnVmZmVycyB3aWxsIGJlIG1hcHBlZCB0byB0aGUgMiBlbmRz IG9mIFRSVFQgdmlydHVhbAorICogc3BhY2UuIFNlcmllcyBvZiBNSV9TVE9SRV9EV09SRF9JTU0g Y29tbWFuZHMgd2lsbCBiZSBhZGRlZCBpbiB0aGUgYmF0Y2gKKyAqIGJ1ZmZlciB0byBmaXJzdCB1 cGRhdGUgdGhlIFRSLVRUIHRhYmxlIGVudHJpZXMgYW5kIHRoZW4gdG8gdXBkYXRlIHRoZSBkYXRh CisgKiBidWZmZXJzIHVzaW5nIHRoZWlyIFRSLVRUIFZBLCBleGVyY2lzaW5nIHRoZSB0YWJsZSBw cm9ncmFtbWluZyBkb25lCisgKiBwcmV2aW91c2x5LgorICogSW52b2tlIENPTlRFWFRfU0VUUEFS QU0gaW9jdGwgdG8gcmVxdWVzdCBLTUQgdG8gZW5hYmxlIFRSVFQuCisgKiBJbnZva2UgZXhlY2J1 ZmZlciB0byBzdWJtaXQgdGhlIGJhdGNoIGJ1ZmZlci4KKyAqIFZlcmlmeSB2YWx1ZSBvZiBmaXJz dCBEV09SRCBpbiB0aGUgMiBkYXRhIGJ1ZmZlciBtYXRjaGVzIHRoZSBkYXRhIGFza2VkCisgKiB0 byBiZSB3cml0dGVuIGJ5IHRoZSBHUFUuCisgKi8KK3N0YXRpYyB2b2lkIHN1Ym1pdF90cnR0X2Nv bnRleHQoaW50IGZkLCB1aW50NjRfdCBzZWdtZW50X2Jhc2VfYWRkcikKK3sKKwllbnVtIHsKKwkJ TDNfVEJMLAorCQlMMl9UQkwxLAorCQlMMl9UQkwyLAorCQlMMV9UQkwxLAorCQlMMV9UQkwyLAor CQlEQVRBMSwKKwkJREFUQTIsCisJCUJBVENILAorCQlOVU1fQlVGRkVSUywKKwl9OworCisJaW50 IHJpbmcsIGxlbiA9IDA7CisJdWludDMyX3QgKnB0cjsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4 ZWNidWZmZXIyIGV4ZWNidWY7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgZXhl Y19vYmplY3QyW05VTV9CVUZGRVJTXTsKKwl1aW50MzJfdCBiYXRjaF9idWZmZXJbQk9fU0laRV07 CisJdWludDMyX3QgY3R4X2lkLCBkYXRhLCBsYXN0X2VudHJ5X29mZnNldDsKKwl1aW50NjRfdCBj dXJfcHBndHRfb2ZmLCBleGVjX2ZsYWdzOworCXVpbnQ2NF90IGZpcnN0X3RpbGVfYWRkciwgbGFz dF90aWxlX2FkZHI7CisKKwlmaXJzdF90aWxlX2FkZHIgPSBzZWdtZW50X2Jhc2VfYWRkcjsKKwls YXN0X3RpbGVfYWRkciAgPSBmaXJzdF90aWxlX2FkZHIgKyBUUlRUX1NFR01FTlRfU0laRSAtIFRJ TEVfU0laRTsKKworCWlmIChzZWdtZW50X2Jhc2VfYWRkciA9PSAwKSB7CisJCS8qIFVzZSB0aGUg ZGVmYXVsdCBjb250ZXh0IGZvciBmaXJzdCBpdGVyYXRpb24gKi8KKwkJY3R4X2lkID0gMDsKKwkJ LyogVG8gYXZvaWQgY29uZmxpY3Qgd2l0aCB0aGUgVFItVFQgc2VnbWVudCAqLworCQljdXJfcHBn dHRfb2ZmID0gVFJUVF9TRUdNRU5UX1NJWkU7CisJfSBlbHNlIHsKKwkJLyogQ3JlYXRlIGEgbmV3 IGNvbnRleHQgdG8gaGF2ZSBkaWZmZXJlbnQgVFJUVCBzZXR0aW5ncworCQkgKiBvbiBldmVyeSBp dGVyYXRpb24uCisJCSAqLworCQljdHhfaWQgPSBnZW1fY29udGV4dF9jcmVhdGUoZmQpOworCQlj dXJfcHBndHRfb2ZmID0gMDsKKwl9CisKKwlleGVjX2ZsYWdzID0gRVhFQ19PQkpFQ1RfU1VQUE9S VFNfNDhCX0FERFJFU1M7CisKKwkvKiBmaXJzdCBhbGxvY2F0ZSBCYXRjaCBidWZmZXIgQk8gKi8K Kwlib19hbGxvY19zZXR1cChmZCwgJmV4ZWNfb2JqZWN0MltCQVRDSF0sIEJPX1NJWkUsIGV4ZWNf ZmxhZ3MsIE5VTEwpOworCisJLyogdGFibGUgQk9zIGFuZCBkYXRhIGJ1ZmZlciBCT3MgYXJlIHdy aXR0ZW4gYnkgR1BVIGFuZCBhcmUgc29mdCBwaW5uZWQgKi8KKwlleGVjX2ZsYWdzIHw9IChFWEVD X09CSkVDVF9XUklURSB8IEVYRUNfT0JKRUNUX1BJTk5FRCk7CisKKwkvKiBBbGxvY2F0ZSBhIEwz IHRhYmxlIEJPICovCisJYm9fYWxsb2Nfc2V0dXAoZmQsICZleGVjX29iamVjdDJbTDNfVEJMXSwg VEFCTEVfU0laRSwgZXhlY19mbGFncywgJmN1cl9wcGd0dF9vZmYpOworCisJLyogQWxsb2NhdGUg dHdvIEwyIHRhYmxlIEJPcyAqLworCWJvX2FsbG9jX3NldHVwKGZkLCAmZXhlY19vYmplY3QyW0wy X1RCTDFdLCBUQUJMRV9TSVpFLCBleGVjX2ZsYWdzLCAmY3VyX3BwZ3R0X29mZik7CisJYm9fYWxs b2Nfc2V0dXAoZmQsICZleGVjX29iamVjdDJbTDJfVEJMMl0sIFRBQkxFX1NJWkUsIGV4ZWNfZmxh Z3MsICZjdXJfcHBndHRfb2ZmKTsKKworCS8qIEFsbG9jYXRlIHR3byBMMSB0YWJsZSBCT3MgKi8K Kwlib19hbGxvY19zZXR1cChmZCwgJmV4ZWNfb2JqZWN0MltMMV9UQkwxXSwgVEFCTEVfU0laRSwg ZXhlY19mbGFncywgJmN1cl9wcGd0dF9vZmYpOworCWJvX2FsbG9jX3NldHVwKGZkLCAmZXhlY19v YmplY3QyW0wxX1RCTDJdLCBUQUJMRV9TSVpFLCBleGVjX2ZsYWdzLCAmY3VyX3BwZ3R0X29mZik7 CisKKwkvKiBBbGlnbiB0aGUgUFBHVFQgb2Zmc2V0cyBmb3IgdGhlIDIgZGF0YSBidWZmZXJzIHRv IG5leHQgNjQgS0IgYm91bmRhcnkgKi8KKwljdXJfcHBndHRfb2ZmID0gQUxJR04oY3VyX3BwZ3R0 X29mZiwgVElMRV9TSVpFKTsKKworCS8qIEFsbG9jYXRlIHR3byBEYXRhIGJ1ZmZlciBCT3MgKi8K Kwlib19hbGxvY19zZXR1cChmZCwgJmV4ZWNfb2JqZWN0MltEQVRBMV0sIFRJTEVfU0laRSwgZXhl Y19mbGFncywgJmN1cl9wcGd0dF9vZmYpOworCWJvX2FsbG9jX3NldHVwKGZkLCAmZXhlY19vYmpl Y3QyW0RBVEEyXSwgVElMRV9TSVpFLCBleGVjX2ZsYWdzLCAmY3VyX3BwZ3R0X29mZik7CisKKwkv KiBBZGQgY29tbWFuZHMgdG8gdXBkYXRlIHRoZSB0d28gTDMgdGFibGUgZW50cmllcyB0byBwb2lu dCB0aGVtIHRvIHRoZSBMMiB0YWJsZXMqLworCWxhc3RfZW50cnlfb2Zmc2V0ID0gNTExKnNpemVv Zih1aW50NjRfdCk7CisKKwlsZW4gPSBlbWl0X3N0b3JlX3F3b3JkKGZkLCBiYXRjaF9idWZmZXIs IGxlbiwKKwkJCSAgICAgICBleGVjX29iamVjdDJbTDNfVEJMXS5vZmZzZXQsCisJCQkgICAgICAg ZXhlY19vYmplY3QyW0wyX1RCTDFdLm9mZnNldCk7CisKKwlsZW4gPSBlbWl0X3N0b3JlX3F3b3Jk KGZkLCBiYXRjaF9idWZmZXIsIGxlbiwKKwkJCSAgICAgICBleGVjX29iamVjdDJbTDNfVEJMXS5v ZmZzZXQgKyBsYXN0X2VudHJ5X29mZnNldCwKKwkJCSAgICAgICBleGVjX29iamVjdDJbTDJfVEJM Ml0ub2Zmc2V0KTsKKworCS8qIEFkZCBjb21tYW5kcyB0byB1cGRhdGUgYW4gZW50cnkgb2YgMiBM MiB0YWJsZXMgdG8gcG9pbnQgdGhlbSB0byB0aGUgTDEgdGFibGVzKi8KKwlsZW4gPSBlbWl0X3N0 b3JlX3F3b3JkKGZkLCBiYXRjaF9idWZmZXIsIGxlbiwKKwkJCSAgICAgICBleGVjX29iamVjdDJb TDJfVEJMMV0ub2Zmc2V0LAorCQkJICAgICAgIGV4ZWNfb2JqZWN0MltMMV9UQkwxXS5vZmZzZXQp OworCisJbGVuID0gZW1pdF9zdG9yZV9xd29yZChmZCwgYmF0Y2hfYnVmZmVyLCBsZW4sCisJCQkg ICAgICAgZXhlY19vYmplY3QyW0wyX1RCTDJdLm9mZnNldCArIGxhc3RfZW50cnlfb2Zmc2V0LAor CQkJICAgICAgIGV4ZWNfb2JqZWN0MltMMV9UQkwyXS5vZmZzZXQpOworCisJLyogQWRkIGNvbW1h bmRzIHRvIHVwZGF0ZSBhbiBlbnRyeSBvZiAyIEwxIHRhYmxlcyB0byBwb2ludCB0aGVtIHRvIHRo ZSBkYXRhIGJ1ZmZlcnMqLworCWxhc3RfZW50cnlfb2Zmc2V0ID0gMTAyMypzaXplb2YodWludDMy X3QpOworCisJbGVuID0gZW1pdF9zdG9yZV9kd29yZChmZCwgYmF0Y2hfYnVmZmVyLCBsZW4sCisJ CQkgICAgICAgZXhlY19vYmplY3QyW0wxX1RCTDFdLm9mZnNldCwKKwkJCSAgICAgICBleGVjX29i amVjdDJbREFUQTFdLm9mZnNldCA+PiAxNik7CisKKwlsZW4gPSBlbWl0X3N0b3JlX2R3b3JkKGZk LCBiYXRjaF9idWZmZXIsIGxlbiwKKwkJCSAgICAgICBleGVjX29iamVjdDJbTDFfVEJMMl0ub2Zm c2V0ICsgbGFzdF9lbnRyeV9vZmZzZXQsCisJCQkgICAgICAgZXhlY19vYmplY3QyW0RBVEEyXS5v ZmZzZXQgPj4gMTYpOworCisJLyogQWRkIGNvbW1hbmRzIHRvIHVwZGF0ZSB0aGUgMiBkYXRhIGJ1 ZmZlcnMsIHVzaW5nIHRoZWlyIFRSVFQgVkEgKi8KKwlkYXRhID0gMHgxMjM0NTY3ODsKKwlsZW4g PSBlbWl0X3N0b3JlX2R3b3JkKGZkLCBiYXRjaF9idWZmZXIsIGxlbiwgZmlyc3RfdGlsZV9hZGRy LCBkYXRhKTsKKwlsZW4gPSBlbWl0X3N0b3JlX2R3b3JkKGZkLCBiYXRjaF9idWZmZXIsIGxlbiwg bGFzdF90aWxlX2FkZHIsIGRhdGEpOworCisJbGVuID0gZW1pdF9iYl9lbmQoZmQsIGJhdGNoX2J1 ZmZlciwgbGVuKTsKKwlnZW1fd3JpdGUoZmQsIGV4ZWNfb2JqZWN0MltCQVRDSF0uaGFuZGxlLCAw LCBiYXRjaF9idWZmZXIsIGxlbio0KTsKKworCS8qIFJlcXVlc3QgS01EIHRvIHNldHVwIHRoZSBU Ui1UVCAqLworCXNldHVwX3RydHQoZmQsIGN0eF9pZCwgZXhlY19vYmplY3QyW0wzX1RCTF0ub2Zm c2V0LCBmaXJzdF90aWxlX2FkZHIpOworCisJcmluZyA9IEk5MTVfRVhFQ19SRU5ERVI7CisJc2V0 dXBfZXhlY2J1ZmZlcigmZXhlY2J1ZiwgZXhlY19vYmplY3QyLCBjdHhfaWQsIHJpbmcsIE5VTV9C VUZGRVJTLCBsZW4qNCk7CisKKwkvKiBzdWJtaXQgY29tbWFuZCBidWZmZXIgKi8KKwlnZW1fZXhl Y2J1ZihmZCwgJmV4ZWNidWYpOworCisJLyogcmVhZCB0aGUgMiBkYXRhIGJ1ZmZlcnMgdG8gY2hl Y2sgZm9yIHRoZSB2YWx1ZSB3cml0dGVuIGJ5IHRoZSBHUFUgKi8KKwlwdHIgPSBtbWFwX2JvKGZk LCBleGVjX29iamVjdDJbREFUQTFdLmhhbmRsZSwgVElMRV9TSVpFKTsKKwlpZ3RfZmFpbF9vbl9m KHB0clswXSAhPSBkYXRhLAorCQkiXG5DUFUgcmVhZCBkb2VzIG5vdCBtYXRjaCBHUFUgd3JpdGUs XAorCQlleHBlY3RlZDogMHgleCwgZ290OiAweCV4XG4iLAorCQlkYXRhLCBwdHJbMF0pOworCisJ cHRyID0gbW1hcF9ibyhmZCwgZXhlY19vYmplY3QyW0RBVEEyXS5oYW5kbGUsIFRJTEVfU0laRSk7 CisJaWd0X2ZhaWxfb25fZihwdHJbMF0gIT0gZGF0YSwKKwkJIlxuQ1BVIHJlYWQgZG9lcyBub3Qg bWF0Y2ggR1BVIHdyaXRlLFwKKwkJZXhwZWN0ZWQ6IDB4JXgsIGdvdDogMHgleFxuIiwKKwkJZGF0 YSwgcHRyWzBdKTsKKworCWdlbV9jbG9zZShmZCwgZXhlY19vYmplY3QyW0wzX1RCTF0uaGFuZGxl KTsKKwlnZW1fY2xvc2UoZmQsIGV4ZWNfb2JqZWN0MltMMl9UQkwxXS5oYW5kbGUpOworCWdlbV9j bG9zZShmZCwgZXhlY19vYmplY3QyW0wyX1RCTDJdLmhhbmRsZSk7CisJZ2VtX2Nsb3NlKGZkLCBl eGVjX29iamVjdDJbTDFfVEJMMV0uaGFuZGxlKTsKKwlnZW1fY2xvc2UoZmQsIGV4ZWNfb2JqZWN0 MltMMV9UQkwyXS5oYW5kbGUpOworCWdlbV9jbG9zZShmZCwgZXhlY19vYmplY3QyW0RBVEExXS5o YW5kbGUpOworCWdlbV9jbG9zZShmZCwgZXhlY19vYmplY3QyW0RBVEEyXS5oYW5kbGUpOworCWdl bV9jbG9zZShmZCwgZXhlY19vYmplY3QyW0JBVENIXS5oYW5kbGUpOworCisJaWYgKGN0eF9pZCkK KwkJZ2VtX2NvbnRleHRfZGVzdHJveShmZCwgY3R4X2lkKTsKK30KKworLyogYmFzaWMgdHJ0dCB0 ZXN0CisgKiBUaGlzIHdpbGwgdGVzdCB0aGUgYmFzaWMgVFItVFQgZnVuY3Rpb25hbGl0eSBieSBk b2luZyBjb3VwbGUgb2Ygc3RvcmUKKyAqIG9wZXJhdGlvbnMgdGhyb3VnaCBpdC4gQWxzbyBpdCB3 aWxsIGV4ZXJjaXNlIGFsbCBwb3NzaWJsZSBUUi1UVCBzZWdtZW50CisgKiBzdGFydCBsb2NhdGlv bnMgKGkuZS4gMTYgb2YgdGhlbSkuCisgKi8KK3N0YXRpYyB2b2lkIGdlbV9iYXNpY190cnR0X3Vz ZSh2b2lkKQoreworCWludCBmZDsKKwl1aW50NjRfdCBzZWdtZW50X2Jhc2VfYWRkcjsKKworCWZk ID0gZHJtX29wZW5fZHJpdmVyKERSSVZFUl9JTlRFTCk7CisJaWd0X3JlcXVpcmUodXNlc19mdWxs X3BwZ3R0KGZkLCBGVUxMXzQ4X0JJVF9QUEdUVCkpOworCWlndF9yZXF1aXJlKGhhc19zb2Z0cGlu X3N1cHBvcnQoZmQpKTsKKwlpZ3RfcmVxdWlyZShoYXNfdHJ0dF9zdXBwb3J0KGZkKSk7CisKKwlm b3IgKHNlZ21lbnRfYmFzZV9hZGRyID0gMDsKKwkgICAgIHNlZ21lbnRfYmFzZV9hZGRyIDwgUFBH VFRfU0laRTsKKwkgICAgIHNlZ21lbnRfYmFzZV9hZGRyICs9IFRSVFRfU0VHTUVOVF9TSVpFKQor CXsKKwkJc3VibWl0X3RydHRfY29udGV4dChmZCwgc2VnbWVudF9iYXNlX2FkZHIpOworCX0KKwor CWNsb3NlKGZkKTsKK30KKworaWd0X21haW4KK3sKKworCS8qIHRlc3QgbmVlZHMgNDggUFBHVFQg JiBTb2Z0IFBpbiBzdXBwb3J0ICovCisJaWd0X3N1YnRlc3QoImJhc2ljIikgeworCQlnZW1fYmFz aWNfdHJ0dF91c2UoKTsKKwl9Cit9CisKLS0gCjEuOS4yCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdm eEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9pbnRlbC1nZngK