From mboxrd@z Thu Jan 1 00:00:00 1970 From: akash.goel@intel.com Subject: [PATCH v4] igt/gem_trtt: Exercise the TRTT hardware Date: Wed, 9 Mar 2016 17:01:00 +0530 Message-ID: <1457523060-12817-1-git-send-email-akash.goel@intel.com> References: <56D86AA7.60307@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTP id 9FF916E056 for ; Wed, 9 Mar 2016 11:18:41 +0000 (UTC) In-Reply-To: <56D86AA7.60307@intel.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 IChDaHJpcykKIC0gUmViYXNlZC4KCnY0OgogLSBBZGQgbmV3IHN1YnRlc3QgZm9yIGludmFsaWQg c2V0dGluZ3MuCiAtIEFkZCBuZXcgbG9jYWwgZnVuY3Rpb24gcXVlcnlfdHJ0dCB0byBjaGVjayB0 aGUgRHJpdmVyIHN0YXRlIChDaHJpcykKIC0gQWRkIG5ldyBoZWxwZXIgZnVuY3Rpb24gZ2VtX3Vz ZXNfNjRiX3BwZ3R0IHRvIGRldGVjdCA2NGJpdCBQUEdUVCBzdXBwb3J0CiAtIFJlbW92ZSBsb2Nh bCBmdW5jdGlvbnMgdXNlc19mdWxsX3BwZ3R0ICYgaGFzX3NvZnRwaW5fc3VwcG9ydCwgaW5zdGVh ZCB1c2UKICAgZXhpc3Rpbmcgd3JhcHBlcnMgZ2VtX2hhc19zb2Z0cGluICYgZ2VtX3VzZXNfNjRi X3BwZ3R0IChDaHJpcykuCiAtIFJlbW92ZSByZWR1bmRhbnQgYml0IG1hc2tpbmcgaW4gZW1pdF9z dG9yZV94eHggZnVuY3Rpb25zIChDaHJpcykuCgpDYzogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJp cy13aWxzb24uY28udWs+CkNjOiBNaWNoZWwgVGhpZXJyeSA8bWljaGVsLnRoaWVycnlAaW50ZWwu Y29tPgpTaWduZWQtb2ZmLWJ5OiBBa2FzaCBHb2VsIDxha2FzaC5nb2VsQGludGVsLmNvbT4KLS0t CiBsaWIvaW9jdGxfd3JhcHBlcnMuYyAgIHwgIDM5ICsrKy0KIGxpYi9pb2N0bF93cmFwcGVycy5o ICAgfCAgIDMgKwogdGVzdHMvTWFrZWZpbGUuc291cmNlcyB8ICAgMSArCiB0ZXN0cy9nZW1fdHJ0 dC5jICAgICAgIHwgNDk4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysKIDQgZmlsZXMgY2hhbmdlZCwgNTMzIGluc2VydGlvbnMoKyksIDggZGVsZXRpb25z KC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMvZ2VtX3RydHQuYwoKZGlmZiAtLWdpdCBhL2xp Yi9pb2N0bF93cmFwcGVycy5jIGIvbGliL2lvY3RsX3dyYXBwZXJzLmMKaW5kZXggNDA3MTI2MC4u ZmI1ZGUwNyAxMDA2NDQKLS0tIGEvbGliL2lvY3RsX3dyYXBwZXJzLmMKKysrIGIvbGliL2lvY3Rs X3dyYXBwZXJzLmMKQEAgLTg4Miw2ICs4ODIsMjIgQEAgdm9pZCBnZW1fY29udGV4dF9zZXRfcGFy YW0oaW50IGZkLCBzdHJ1Y3QgbG9jYWxfaTkxNV9nZW1fY29udGV4dF9wYXJhbSAqcCkKIAlpZ3Rf YXNzZXJ0KF9fZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGZkLCBwKSA9PSAwKTsKIH0KIAoraW50IF9f Z2VtX2NvbnRleHRfcmVxdWlyZV9wYXJhbShpbnQgZmQsIHVpbnQ2NF90IHBhcmFtKQoreworCXN0 cnVjdCBsb2NhbF9pOTE1X2dlbV9jb250ZXh0X3BhcmFtIHA7CisJaW50IHJldDsKKworCXAuY29u dGV4dCA9IDA7CisJcC5wYXJhbSA9IHBhcmFtOworCXAudmFsdWUgPSAwOworCXAuc2l6ZSA9IDA7 CisKKwlyZXQgPSBkcm1Jb2N0bChmZCwgTE9DQUxfSU9DVExfSTkxNV9HRU1fQ09OVEVYVF9HRVRQ QVJBTSwgJnApOworCWlmIChyZXQpCisJCXJldHVybiAtZXJybm87CisJcmV0dXJuIDA7Cit9CisK IC8qKgogICogZ2VtX2NvbnRleHRfcmVxdWlyZV9wYXJhbToKICAqIEBmZDogb3BlbiBpOTE1IGRy bSBmaWxlIGRlc2NyaXB0b3IKQEAgLTg5MiwxNCArOTA4LDcgQEAgdm9pZCBnZW1fY29udGV4dF9z ZXRfcGFyYW0oaW50IGZkLCBzdHJ1Y3QgbG9jYWxfaTkxNV9nZW1fY29udGV4dF9wYXJhbSAqcCkK ICAqLwogdm9pZCBnZW1fY29udGV4dF9yZXF1aXJlX3BhcmFtKGludCBmZCwgdWludDY0X3QgcGFy YW0pCiB7Ci0Jc3RydWN0IGxvY2FsX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW0gcDsKLQotCXAuY29u dGV4dCA9IDA7Ci0JcC5wYXJhbSA9IHBhcmFtOwotCXAudmFsdWUgPSAwOwotCXAuc2l6ZSA9IDA7 Ci0KLQlpZ3RfcmVxdWlyZShkcm1Jb2N0bChmZCwgTE9DQUxfSU9DVExfSTkxNV9HRU1fQ09OVEVY VF9HRVRQQVJBTSwgJnApID09IDApOworCWlndF9yZXF1aXJlKF9fZ2VtX2NvbnRleHRfcmVxdWly ZV9wYXJhbShmZCwgcGFyYW0pID09IDApOwogfQogCiB2b2lkIGdlbV9jb250ZXh0X3JlcXVpcmVf YmFuX3BlcmlvZChpbnQgZmQpCkBAIC0xMDYzLDYgKzEwNzIsMjAgQEAgYm9vbCBnZW1fdXNlc19m dWxsX3BwZ3R0KGludCBmZCkKIH0KIAogLyoqCisgKiBnZW1fdXNlc182NGJfcHBndHQ6CisgKiBA ZmQ6IG9wZW4gaTkxNSBkcm0gZmlsZSBkZXNjcmlwdG9yCisgKgorICogRmVhdHVyZSB0ZXN0IG1h Y3JvIHRvIGNoZWNrIHdoZXRoZXIgdGhlIGtlcm5lbCBpbnRlcm5hbGx5IHVzZXMgZnVsbAorICog NjRiIHBlci1wcm9jZXNzIGd0dCB0byBleGVjdXRlIGJhdGNoZXMuCisgKgorICogUmV0dXJuczog V2hldGhlciBiYXRjaGVzIGFyZSBydW4gdGhyb3VnaCBmdWxsIDY0YiBwcGd0dC4KKyAqLworYm9v bCBnZW1fdXNlc182NGJfcHBndHQoaW50IGZkKQoreworCXJldHVybiBnZW1fZ3R0X3R5cGUoZmQp ID4gMjsKK30KKworLyoqCiAgKiBnZW1fYXZhaWxhYmxlX2ZlbmNlczoKICAqIEBmZDogb3BlbiBp OTE1IGRybSBmaWxlIGRlc2NyaXB0b3IKICAqCmRpZmYgLS1naXQgYS9saWIvaW9jdGxfd3JhcHBl cnMuaCBiL2xpYi9pb2N0bF93cmFwcGVycy5oCmluZGV4IGRjMDgyN2EuLmQyM2ZhOTYgMTAwNjQ0 Ci0tLSBhL2xpYi9pb2N0bF93cmFwcGVycy5oCisrKyBiL2xpYi9pb2N0bF93cmFwcGVycy5oCkBA IC0xMDcsOSArMTA3LDExIEBAIHN0cnVjdCBsb2NhbF9pOTE1X2dlbV9jb250ZXh0X3BhcmFtIHsK ICNkZWZpbmUgTE9DQUxfQ09OVEVYVF9QQVJBTV9CQU5fUEVSSU9ECTB4MQogI2RlZmluZSBMT0NB TF9DT05URVhUX1BBUkFNX05PX1pFUk9NQVAJMHgyCiAjZGVmaW5lIExPQ0FMX0NPTlRFWFRfUEFS QU1fR1RUX1NJWkUJMHgzCisjZGVmaW5lIExPQ0FMX0NPTlRFWFRfUEFSQU1fVFJUVAkweDQKIAl1 aW50NjRfdCB2YWx1ZTsKIH07CiB2b2lkIGdlbV9jb250ZXh0X3JlcXVpcmVfYmFuX3BlcmlvZChp bnQgZmQpOworaW50IF9fZ2VtX2NvbnRleHRfcmVxdWlyZV9wYXJhbShpbnQgZmQsIHVpbnQ2NF90 IHBhcmFtKTsKIHZvaWQgZ2VtX2NvbnRleHRfcmVxdWlyZV9wYXJhbShpbnQgZmQsIHVpbnQ2NF90 IHBhcmFtKTsKIHZvaWQgZ2VtX2NvbnRleHRfZ2V0X3BhcmFtKGludCBmZCwgc3RydWN0IGxvY2Fs X2k5MTVfZ2VtX2NvbnRleHRfcGFyYW0gKnApOwogdm9pZCBnZW1fY29udGV4dF9zZXRfcGFyYW0o aW50IGZkLCBzdHJ1Y3QgbG9jYWxfaTkxNV9nZW1fY29udGV4dF9wYXJhbSAqcCk7CkBAIC0xNDMs NiArMTQ1LDcgQEAgYm9vbCBnZW1faGFzX2JzZDIoaW50IGZkKTsKIGludCBnZW1fZ3R0X3R5cGUo aW50IGZkKTsKIGJvb2wgZ2VtX3VzZXNfcHBndHQoaW50IGZkKTsKIGJvb2wgZ2VtX3VzZXNfZnVs bF9wcGd0dChpbnQgZmQpOworYm9vbCBnZW1fdXNlc182NGJfcHBndHQoaW50IGZkKTsKIGludCBn ZW1fYXZhaWxhYmxlX2ZlbmNlcyhpbnQgZmQpOwogdWludDY0X3QgZ2VtX2F2YWlsYWJsZV9hcGVy dHVyZV9zaXplKGludCBmZCk7CiB1aW50NjRfdCBnZW1fYXBlcnR1cmVfc2l6ZShpbnQgZmQpOwpk aWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJj ZXMKaW5kZXggZjhiMThiMC4uZTYwODFmNiAxMDA2NDQKLS0tIGEvdGVzdHMvTWFrZWZpbGUuc291 cmNlcworKysgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCkBAIC03Myw2ICs3Myw3IEBAIFRFU1RT X3Byb2dzX00gPSBcCiAJZ2VtX3N0cmVhbWluZ193cml0ZXMgXAogCWdlbV90aWxlZF9ibGl0cyBc CiAJZ2VtX3RpbGVkX3BhcnRpYWxfcHdyaXRlX3ByZWFkIFwKKwlnZW1fdHJ0dCBcCiAJZ2VtX3Vz ZXJwdHJfYmxpdHMgXAogCWdlbV93cml0ZV9yZWFkX3Jpbmdfc3dpdGNoIFwKIAlrbXNfYWRkZmJf YmFzaWMgXApkaWZmIC0tZ2l0IGEvdGVzdHMvZ2VtX3RydHQuYyBiL3Rlc3RzL2dlbV90cnR0LmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTliODAzZAotLS0gL2Rldi9udWxs CisrKyBiL3Rlc3RzL2dlbV90cnR0LmMKQEAgLTAsMCArMSw0OTggQEAKKy8qCisgKiBDb3B5cmln aHQgwqkgMjAxNiBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5 IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBj b3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAo dGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0 cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1 c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2Us CisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBl cnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3Vi amVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHly aWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4 dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0 YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJF IElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJF U1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVU SE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdF UyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFD VCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05O RUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAq IElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOgorICogICAgQWthc2ggR29lbCA8YWth c2guZ29lbEBpbnRlbC5jb20+CisgKgorICovCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNs dWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgor I2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8aW50dHlw ZXMuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVk ZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxtYWxsb2Mu aD4KKyNpbmNsdWRlICJkcm0uaCIKKyNpbmNsdWRlICJpb2N0bF93cmFwcGVycy5oIgorI2luY2x1 ZGUgImRybXRlc3QuaCIKKyNpbmNsdWRlICJpbnRlbF9jaGlwc2V0LmgiCisjaW5jbHVkZSAiaW50 ZWxfaW8uaCIKKyNpbmNsdWRlICJpOTE1X2RybS5oIgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2lu Y2x1ZGUgPHN5cy93YWl0Lmg+CisjaW5jbHVkZSA8c3lzL2lwYy5oPgorI2luY2x1ZGUgPHN5cy9z aG0uaD4KKyNpbmNsdWRlICJpZ3Rfa21zLmgiCisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNpbmNs dWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCisjZGVmaW5lIEJPX1NJ WkUgNDA5NgorI2RlZmluZSBFWEVDX09CSkVDVF9QSU5ORUQJKDE8PDQpCisjZGVmaW5lIEVYRUNf T0JKRUNUX1NVUFBPUlRTXzQ4Ql9BRERSRVNTICgxPDwzKQorCisvKiBnZW44X2Nhbm9uaWNhbF9h ZGRyCisgKiBVc2VkIHRvIGNvbnZlcnQgYW55IGFkZHJlc3MgaW50byBjYW5vbmljYWwgZm9ybSwg aS5lLiBbNjM6NDhdID09IFs0N10uCisgKiBCYXNlZCBvbiBrZXJuZWwncyBzaWduX2V4dGVuZDY0 IGltcGxlbWVudGF0aW9uLgorICogQGFkZHJlc3MgLSBhIHZpcnR1YWwgYWRkcmVzcworICovCisj ZGVmaW5lIEdFTjhfSElHSF9BRERSRVNTX0JJVCA0Nworc3RhdGljIHVpbnQ2NF90IGdlbjhfY2Fu b25pY2FsX2FkZHIodWludDY0X3QgYWRkcmVzcykKK3sKKwlfX3U4IHNoaWZ0ID0gNjMgLSBHRU44 X0hJR0hfQUREUkVTU19CSVQ7CisJcmV0dXJuIChfX3M2NCkoYWRkcmVzcyA8PCBzaGlmdCkgPj4g c2hpZnQ7Cit9CisKKy8qIGhhc190cnR0X3N1cHBvcnQKKyAqIEZpbmRzIGlmIHRydHQgaHcgaXMg cHJlc2VudAorICogQGZkIERSTSBmZAorICovCitzdGF0aWMgYm9vbCBoYXNfdHJ0dF9zdXBwb3J0 KGludCBmZCkKK3sKKwlpbnQgcmV0ID0gX19nZW1fY29udGV4dF9yZXF1aXJlX3BhcmFtKGZkLCBM T0NBTF9DT05URVhUX1BBUkFNX1RSVFQpOworCisJcmV0dXJuIChyZXQgPT0gMCk7Cit9CisKKy8q IG1tYXBfYm8KKyAqIGhlbHBlciBmb3IgY3JlYXRpbmcgYSBDUFUgbW1hcHBpbmcgb2YgdGhlIGJ1 ZmZlcgorICogQGZkIC0gZHJtIGZkCisgKiBAaGFuZGxlIC0gaGFuZGxlIG9mIHRoZSBidWZmZXIg dG8gbW1hcAorICogQHNpemU6IHNpemUgb2YgdGhlIGJ1ZmZlcgorICovCitzdGF0aWMgdm9pZCog bW1hcF9ibyhpbnQgZmQsIHVpbnQzMl90IGhhbmRsZSwgdWludDY0X3Qgc2l6ZSkKK3sKKwl1aW50 MzJfdCAqcHRyID0gZ2VtX21tYXBfX2NwdShmZCwgaGFuZGxlLCAwLCBzaXplLCBQUk9UX1JFQUQp OworCWdlbV9zZXRfZG9tYWluKGZkLCBoYW5kbGUsIEk5MTVfR0VNX0RPTUFJTl9DUFUsIDApOwor CXJldHVybiBwdHI7Cit9CisKKy8qIGVtaXRfc3RvcmVfZHdvcmQKKyAqIHBvcHVsYXRlIGJhdGNo IGJ1ZmZlciB3aXRoIE1JX1NUT1JFX0RXT1JEX0lNTSBjb21tYW5kCisgKiBAZmQ6IGRybSBmaWxl IGRlc2NyaXB0b3IKKyAqIEBjbWRfYnVmOiBiYXRjaCBidWZmZXIKKyAqIEBkd19vZmZzZXQ6IHdy aXRlIG9mZnNldCBpbiBiYXRjaCBidWZmZXIKKyAqIEB2YWRkcjogZGVzdGluYXRpb24gVmlydHVh bCBhZGRyZXNzCisgKiBAZGF0YTogdTMyIGRhdGEgdG8gYmUgc3RvcmVkIGF0IGRlc3RpbmF0aW9u CisgKi8KK3N0YXRpYyBpbnQgZW1pdF9zdG9yZV9kd29yZChpbnQgZmQsIHVpbnQzMl90ICpjbWRf YnVmLCB1aW50MzJfdCBkd19vZmZzZXQsCisJCQkgICAgdWludDY0X3QgdmFkZHIsIHVpbnQzMl90 IGRhdGEpCit7CisJLyogQ2hlY2sgdGhhdCBzb2Z0cGluIGFkZHJlc3NlcyBhcmUgaW4gdGhlIGNv cnJlY3QgZm9ybSAqLworCWlndF9hc3NlcnRfZXFfdTY0KHZhZGRyLCBnZW44X2Nhbm9uaWNhbF9h ZGRyKHZhZGRyKSk7CisKKwkvKiBTREkgY2Fubm90IHdyaXRlIHRvIHVuYWxpZ25lZCBhZGRyZXNz ZXMgKi8KKwlpZ3RfYXNzZXJ0KCh2YWRkciAmIDMpID09IDApOworCisJY21kX2J1Zltkd19vZmZz ZXQrK10gPSBNSV9TVE9SRV9EV09SRF9JTU07CisJY21kX2J1Zltkd19vZmZzZXQrK10gPSAodWlu dDMyX3QpdmFkZHI7CisJY21kX2J1Zltkd19vZmZzZXQrK10gPSAodWludDMyX3QpKHZhZGRyID4+ IDMyKTsKKwljbWRfYnVmW2R3X29mZnNldCsrXSA9IGRhdGE7CisKKwlyZXR1cm4gZHdfb2Zmc2V0 OworfQorCisvKiBlbWl0X3N0b3JlX3F3b3JkCisgKiBwb3B1bGF0ZSBiYXRjaCBidWZmZXIgd2l0 aCBNSV9TVE9SRV9EV09SRF9JTU0gY29tbWFuZAorICogQGZkOiBkcm0gZmlsZSBkZXNjcmlwdG9y CisgKiBAY21kX2J1ZjogYmF0Y2ggYnVmZmVyCisgKiBAZHdfb2Zmc2V0OiB3cml0ZSBvZmZzZXQg aW4gYmF0Y2ggYnVmZmVyCisgKiBAdmFkZHI6IGRlc3RpbmF0aW9uIFZpcnR1YWwgYWRkcmVzcwor ICogQGRhdGE6IHU2NCBkYXRhIHRvIGJlIHN0b3JlZCBhdCBkZXN0aW5hdGlvbgorICovCitzdGF0 aWMgaW50IGVtaXRfc3RvcmVfcXdvcmQoaW50IGZkLCB1aW50MzJfdCAqY21kX2J1ZiwgdWludDMy X3QgZHdfb2Zmc2V0LAorCQkJICAgIHVpbnQ2NF90IHZhZGRyLCB1aW50NjRfdCBkYXRhKQorewor CS8qIENoZWNrIHRoYXQgc29mdHBpbiBhZGRyZXNzZXMgYXJlIGluIHRoZSBjb3JyZWN0IGZvcm0g Ki8KKwlpZ3RfYXNzZXJ0X2VxX3U2NCh2YWRkciwgZ2VuOF9jYW5vbmljYWxfYWRkcih2YWRkcikp OworCisJLyogU0RJIGNhbm5vdCB3cml0ZSB0byB1bmFsaWduZWQgYWRkcmVzc2VzICovCisJaWd0 X2Fzc2VydCgodmFkZHIgJiAzKSA9PSAwKTsKKworCWNtZF9idWZbZHdfb2Zmc2V0KytdID0gTUlf U1RPUkVfRFdPUkRfSU1NIHwgMHgzOworCWNtZF9idWZbZHdfb2Zmc2V0KytdID0gKHVpbnQzMl90 KXZhZGRyOworCWNtZF9idWZbZHdfb2Zmc2V0KytdID0gKHVpbnQzMl90KSh2YWRkciA+PiAzMik7 CisJY21kX2J1Zltkd19vZmZzZXQrK10gPSBkYXRhOworCWNtZF9idWZbZHdfb2Zmc2V0KytdID0g ZGF0YSA+PiAzMjsKKworCXJldHVybiBkd19vZmZzZXQ7Cit9CisKKy8qIGVtaXRfYmJfZW5kCisg KiBwb3B1bGF0ZSBiYXRjaCBidWZmZXIgd2l0aCBNSV9CQVRDSF9CVUZGRVJfRU5EIGNvbW1hbmQK KyAqIEBmZDogZHJtIGZpbGUgZGVzY3JpcHRvcgorICogQGNtZF9idWY6IGJhdGNoIGJ1ZmZlcgor ICogQGR3X29mZnNldDogd3JpdGUgb2Zmc2V0IGluIGJhdGNoIGJ1ZmZlcgorICovCitzdGF0aWMg aW50IGVtaXRfYmJfZW5kKGludCBmZCwgdWludDMyX3QgKmNtZF9idWYsIHVpbnQzMl90IGR3X29m ZnNldCkKK3sKKwlkd19vZmZzZXQgPSBBTElHTihkd19vZmZzZXQsIDIpOworCWNtZF9idWZbZHdf b2Zmc2V0KytdID0gTUlfQkFUQ0hfQlVGRkVSX0VORDsKKwlkd19vZmZzZXQrKzsKKworCXJldHVy biBkd19vZmZzZXQ7Cit9CisKKy8qIHNldHVwX2V4ZWNidWZmZXIKKyAqIGhlbHBlciBmb3IgYnVm ZmVyIGV4ZWN1dGlvbgorICogQGV4ZWNidWYgLSBwb2ludGVyIHRvIGV4ZWNidWZmZXIKKyAqIEBl eGVjX29iamVjdCAtIHBvaW50ZXIgdG8gZXhlYyBvYmplY3QyIHN0cnVjdAorICogQHJpbmcgLSBy aW5nIHRvIGJlIHVzZWQKKyAqIEBidWZmZXJfY291bnQgLSBob3cgbWFudSBidWZmZXJzIHRvIHN1 Ym1pdAorICogQGJhdGNoX2xlbmd0aCAtIGxlbmd0aCBvZiBiYXRjaCBidWZmZXIKKyAqLworc3Rh dGljIHZvaWQgc2V0dXBfZXhlY2J1ZmZlcihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIy ICpleGVjYnVmLAorCQkJICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqZXhl Y19vYmplY3QsCisJCQkgICAgIHVpbnQzMl90IGN0eF9pZCwgaW50IHJpbmcsIGludCBidWZmZXJf Y291bnQsIGludCBiYXRjaF9sZW5ndGgpCit7CisJbWVtc2V0KGV4ZWNidWYsIDAsIHNpemVvZigq ZXhlY2J1ZikpOworCisJZXhlY2J1Zi0+YnVmZmVyc19wdHIgPSAodW5zaWduZWQgbG9uZylleGVj X29iamVjdDsKKwlleGVjYnVmLT5idWZmZXJfY291bnQgPSBidWZmZXJfY291bnQ7CisJZXhlY2J1 Zi0+YmF0Y2hfbGVuID0gYmF0Y2hfbGVuZ3RoOworCWV4ZWNidWYtPmZsYWdzID0gcmluZzsKKwlp OTE1X2V4ZWNidWZmZXIyX3NldF9jb250ZXh0X2lkKCpleGVjYnVmLCBjdHhfaWQpOworfQorCisj ZGVmaW5lIFRBQkxFX1NJWkUgMHgxMDAwCisjZGVmaW5lIFRJTEVfU0laRSAweDEwMDAwCisKKyNk ZWZpbmUgVFJUVF9TRUdNRU5UX1NJWkUgKDFVTEwgPDwgNDQpCisjZGVmaW5lIFBQR1RUX1NJWkUg KDFVTEwgPDwgNDgpCisKKyNkZWZpbmUgTlVMTF9USUxFX1BBVFRFUk4gICAgMHhGRkZGRkZGRgor I2RlZmluZSBJTlZBTElEX1RJTEVfUEFUVEVSTiAweEZGRkZGRkZFCisKK3N0cnVjdCBsb2NhbF9p OTE1X2dlbV9jb250ZXh0X3RydHRfcGFyYW0geworCXVpbnQ2NF90IHNlZ21lbnRfYmFzZV9hZGRy OworCXVpbnQ2NF90IGwzX3RhYmxlX2FkZHJlc3M7CisJdWludDMyX3QgaW52ZF90aWxlX3ZhbDsK Kwl1aW50MzJfdCBudWxsX3RpbGVfdmFsOworfTsKKworLyogcXVlcnlfdHJ0dAorICogSGVscGVy IGZ1bmN0aW9uIHRvIGNoZWNrIGlmIHRoZSBUUi1UVCBzZXR0aW5ncyBzdG9yZWQgd2l0aCB0aGUg S01ELAorICogZm9yIGEgY29udGV4dCwgaGF2ZSB0aGUgZXhwZWN0ZWQgdmFsdWVzIChzZXQgcHJl dmlvdXNseSkuCisgKiBAZmQgLSBkcm0gZmQKKyAqIEBjdHhfaWQgLSBpZCBvZiB0aGUgY29udGV4 dCBmb3Igd2hpY2ggVFJUVCBpcyB0byBiZSBlbmFibGVkCisgKiBAbDNfdGFibGVfYWRkcmVzcyAt IEdGWCBhZGRyZXNzIG9mIHRoZSBMMyB0YWJsZQorICogQHNlZ21lbnRfYmFzZV9hZGRyIC0gb2Zm c2V0IG9mIHRoZSBUUlRUIHNlZ21lbnQgaW4gUFBHVFQgc3BhY2UKKyAqLworc3RhdGljIHZvaWQK K3F1ZXJ5X3RydHQoaW50IGZkLCB1aW50MzJfdCBjdHhfaWQsIHVpbnQ2NF90IGwzX3RhYmxlX2Fk ZHJlc3MsCisJICAgdWludDY0X3Qgc2VnbWVudF9iYXNlX2FkZHIpCit7CisJc3RydWN0IGxvY2Fs X2k5MTVfZ2VtX2NvbnRleHRfcGFyYW0gY3R4X3BhcmFtOworCXN0cnVjdCBsb2NhbF9pOTE1X2dl bV9jb250ZXh0X3RydHRfcGFyYW0gdHJ0dF9wYXJhbTsKKworCWN0eF9wYXJhbS5jb250ZXh0ID0g Y3R4X2lkOworCWN0eF9wYXJhbS5zaXplID0gc2l6ZW9mKHRydHRfcGFyYW0pOworCWN0eF9wYXJh bS5wYXJhbSA9IExPQ0FMX0NPTlRFWFRfUEFSQU1fVFJUVDsKKwljdHhfcGFyYW0udmFsdWUgPSAo dWludDY0X3QpJnRydHRfcGFyYW07CisKKwlnZW1fY29udGV4dF9nZXRfcGFyYW0oZmQsICZjdHhf cGFyYW0pOworCisJaWd0X2Fzc2VydF9lcV91NjQodHJ0dF9wYXJhbS5sM190YWJsZV9hZGRyZXNz LCBsM190YWJsZV9hZGRyZXNzKTsKKwlpZ3RfYXNzZXJ0X2VxX3U2NCh0cnR0X3BhcmFtLnNlZ21l bnRfYmFzZV9hZGRyLCBzZWdtZW50X2Jhc2VfYWRkcik7CisJaWd0X2Fzc2VydF9lcV91MzIodHJ0 dF9wYXJhbS5pbnZkX3RpbGVfdmFsLCBJTlZBTElEX1RJTEVfUEFUVEVSTik7CisJaWd0X2Fzc2Vy dF9lcV91MzIodHJ0dF9wYXJhbS5udWxsX3RpbGVfdmFsLCBOVUxMX1RJTEVfUEFUVEVSTik7Cit9 CisKKy8qIHNldHVwX3RydHQKKyAqIEhlbHBlciBmdW5jdGlvbiB0byByZXF1ZXN0IEtNRCB0byBl bmFibGUgVFJUVAorICogQGZkIC0gZHJtIGZkCisgKiBAY3R4X2lkIC0gaWQgb2YgdGhlIGNvbnRl eHQgZm9yIHdoaWNoIFRSVFQgaXMgdG8gYmUgZW5hYmxlZAorICogQGwzX3RhYmxlX2FkZHJlc3Mg LSBHRlggYWRkcmVzcyBvZiB0aGUgTDMgdGFibGUKKyAqIEBzZWdtZW50X2Jhc2VfYWRkciAtIG9m ZnNldCBvZiB0aGUgVFJUVCBzZWdtZW50IGluIFBQR1RUIHNwYWNlCisgKi8KK3N0YXRpYyBpbnQK K3NldHVwX3RydHQoaW50IGZkLCB1aW50MzJfdCBjdHhfaWQsIHVpbnQ2NF90IGwzX3RhYmxlX2Fk ZHJlc3MsCisJICAgdWludDY0X3Qgc2VnbWVudF9iYXNlX2FkZHIpCit7CisJc3RydWN0IGxvY2Fs X2k5MTVfZ2VtX2NvbnRleHRfcGFyYW0gY3R4X3BhcmFtOworCXN0cnVjdCBsb2NhbF9pOTE1X2dl bV9jb250ZXh0X3RydHRfcGFyYW0gdHJ0dF9wYXJhbTsKKworCXRydHRfcGFyYW0ubnVsbF90aWxl X3ZhbCA9IE5VTExfVElMRV9QQVRURVJOOworCXRydHRfcGFyYW0uaW52ZF90aWxlX3ZhbCA9IElO VkFMSURfVElMRV9QQVRURVJOOworCXRydHRfcGFyYW0ubDNfdGFibGVfYWRkcmVzcyA9IGwzX3Rh YmxlX2FkZHJlc3M7CisJdHJ0dF9wYXJhbS5zZWdtZW50X2Jhc2VfYWRkciA9IHNlZ21lbnRfYmFz ZV9hZGRyOworCisJY3R4X3BhcmFtLmNvbnRleHQgPSBjdHhfaWQ7CisJY3R4X3BhcmFtLnNpemUg PSBzaXplb2YodHJ0dF9wYXJhbSk7CisJY3R4X3BhcmFtLnBhcmFtID0gTE9DQUxfQ09OVEVYVF9Q QVJBTV9UUlRUOworCWN0eF9wYXJhbS52YWx1ZSA9ICh1aW50NjRfdCkmdHJ0dF9wYXJhbTsKKwor CXJldHVybiBfX2dlbV9jb250ZXh0X3NldF9wYXJhbShmZCwgJmN0eF9wYXJhbSk7Cit9CisKKy8q IGJvX2FsbG9jX3NldHVwCisgKiBhbGxvY2F0ZSBibyBhbmQgcG9wdWxhdGUgZXhlYyBvYmplY3QK KyAqIEBleGVjX29iamVjdDIgLSBwb2ludGVyIHRvIGV4ZWMgb2JqZWN0CisgKiBAYm9fc2l6ZWUg LSBidWZmZXIgc2l6ZQorICogQGZsYWdzIC0gZXhlYyBmbGFncworICogQGJvX29mZnNldCAtIHBv aW50ZXIgdG8gdGhlIGN1cnJlbnQgUFBHVFQgb2Zmc2V0CisgKi8KK3N0YXRpYyB2b2lkIGJvX2Fs bG9jX3NldHVwKGludCBmZCwgc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgKmV4ZWNf b2JqZWN0MiwKKwkJCSAgIHVpbnQ2NF90IGJvX3NpemUsIHVpbnQ2NF90IGZsYWdzLCB1aW50NjRf dCAqYm9fb2Zmc2V0KQoreworCW1lbXNldChleGVjX29iamVjdDIsIDAsIHNpemVvZigqZXhlY19v YmplY3QyKSk7CisJZXhlY19vYmplY3QyLT5oYW5kbGUgPSBnZW1fY3JlYXRlKGZkLCBib19zaXpl KTsKKwlleGVjX29iamVjdDItPmZsYWdzID0gZmxhZ3M7CisKKwlpZiAoYm9fb2Zmc2V0KQorCXsK KwkJZXhlY19vYmplY3QyLT5vZmZzZXQgPSAqYm9fb2Zmc2V0OworCQkqYm9fb2Zmc2V0ICs9IGJv X3NpemU7CisJfQorfQorCisvKiBzdWJtaXRfdHJ0dF9jb250ZXh0CisgKiBUaGlzIGhlbHBlciBm dW5jdGlvbiB3aWxsIGNyZWF0ZSBhIG5ldyBjb250ZXh0IGlmIHRoZSBUUi1UVCBzZWdtZW50Cisg KiBiYXNlIGFkZHJlc3MgaXMgbm90IHplcm8sIGFsbG9jYXRlIGEgTDMgdGFibGUgcGFnZSwgMiBw YWdlcyBhcGllY2UKKyAqIGZvciBMMi9MMSB0YWJsZXMgYW5kIGNvdXBsZSBvZiBkYXRhIGJ1ZmZl cnMgb2YgNjRLQiBpbiBzaXplLCBtYXRjaGluZyB0aGUKKyAqIFRpbGUgc2l6ZS4gVGhlIDIgZGF0 YSBidWZmZXJzIHdpbGwgYmUgbWFwcGVkIHRvIHRoZSAyIGVuZHMgb2YgVFJUVCB2aXJ0dWFsCisg KiBzcGFjZS4gU2VyaWVzIG9mIE1JX1NUT1JFX0RXT1JEX0lNTSBjb21tYW5kcyB3aWxsIGJlIGFk ZGVkIGluIHRoZSBiYXRjaAorICogYnVmZmVyIHRvIGZpcnN0IHVwZGF0ZSB0aGUgVFItVFQgdGFi bGUgZW50cmllcyBhbmQgdGhlbiB0byB1cGRhdGUgdGhlIGRhdGEKKyAqIGJ1ZmZlcnMgdXNpbmcg dGhlaXIgVFItVFQgVkEsIGV4ZXJjaXNpbmcgdGhlIHRhYmxlIHByb2dyYW1taW5nIGRvbmUKKyAq IHByZXZpb3VzbHkuCisgKiBJbnZva2UgQ09OVEVYVF9TRVRQQVJBTSBpb2N0bCB0byByZXF1ZXN0 IEtNRCB0byBlbmFibGUgVFJUVC4KKyAqIEludm9rZSBleGVjYnVmZmVyIHRvIHN1Ym1pdCB0aGUg YmF0Y2ggYnVmZmVyLgorICogVmVyaWZ5IHZhbHVlIG9mIGZpcnN0IERXT1JEIGluIHRoZSAyIGRh dGEgYnVmZmVyIG1hdGNoZXMgdGhlIGRhdGEgYXNrZWQKKyAqIHRvIGJlIHdyaXR0ZW4gYnkgdGhl IEdQVS4KKyAqLworc3RhdGljIHZvaWQgc3VibWl0X3RydHRfY29udGV4dChpbnQgZmQsIHVpbnQ2 NF90IHNlZ21lbnRfYmFzZV9hZGRyKQoreworCWVudW0geworCQlMM19UQkwsCisJCUwyX1RCTDEs CisJCUwyX1RCTDIsCisJCUwxX1RCTDEsCisJCUwxX1RCTDIsCisJCURBVEExLAorCQlEQVRBMiwK KwkJQkFUQ0gsCisJCU5VTV9CVUZGRVJTLAorCX07CisKKwlpbnQgcmluZywgbGVuID0gMDsKKwl1 aW50MzJfdCAqcHRyOworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZjsK KwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBleGVjX29iamVjdDJbTlVNX0JVRkZF UlNdOworCXVpbnQzMl90IGJhdGNoX2J1ZmZlcltCT19TSVpFXTsKKwl1aW50MzJfdCBjdHhfaWQs IGRhdGEsIGxhc3RfZW50cnlfb2Zmc2V0OworCXVpbnQ2NF90IGN1cl9wcGd0dF9vZmYsIGV4ZWNf ZmxhZ3M7CisJdWludDY0X3QgZmlyc3RfdGlsZV9hZGRyLCBsYXN0X3RpbGVfYWRkcjsKKworCWZp cnN0X3RpbGVfYWRkciA9IHNlZ21lbnRfYmFzZV9hZGRyOworCWxhc3RfdGlsZV9hZGRyICA9IGZp cnN0X3RpbGVfYWRkciArIFRSVFRfU0VHTUVOVF9TSVpFIC0gVElMRV9TSVpFOworCisJaWYgKHNl Z21lbnRfYmFzZV9hZGRyID09IDApIHsKKwkJLyogVXNlIHRoZSBkZWZhdWx0IGNvbnRleHQgZm9y IHRoaXMgY2FzZSAqLworCQljdHhfaWQgPSAwOworCQkvKiBUbyBhdm9pZCBjb25mbGljdCB3aXRo IHRoZSBUUi1UVCBzZWdtZW50ICovCisJCWN1cl9wcGd0dF9vZmYgPSBUUlRUX1NFR01FTlRfU0la RTsKKwl9IGVsc2UgeworCQkvKiBDcmVhdGUgYSBuZXcgY29udGV4dCB0byBoYXZlIGRpZmZlcmVu dCBUUlRUIHNldHRpbmdzICovCisJCWN0eF9pZCA9IGdlbV9jb250ZXh0X2NyZWF0ZShmZCk7CisJ CWN1cl9wcGd0dF9vZmYgPSAwOworCX0KKworCWV4ZWNfZmxhZ3MgPSBFWEVDX09CSkVDVF9TVVBQ T1JUU180OEJfQUREUkVTUzsKKworCS8qIGZpcnN0IGFsbG9jYXRlIEJhdGNoIGJ1ZmZlciBCTyAq LworCWJvX2FsbG9jX3NldHVwKGZkLCAmZXhlY19vYmplY3QyW0JBVENIXSwgQk9fU0laRSwgZXhl Y19mbGFncywgTlVMTCk7CisKKwkvKiB0YWJsZSBCT3MgYW5kIGRhdGEgYnVmZmVyIEJPcyBhcmUg d3JpdHRlbiBieSBHUFUgYW5kIGFyZSBzb2Z0IHBpbm5lZCAqLworCWV4ZWNfZmxhZ3MgfD0gKEVY RUNfT0JKRUNUX1dSSVRFIHwgRVhFQ19PQkpFQ1RfUElOTkVEKTsKKworCS8qIEFsbG9jYXRlIGEg TDMgdGFibGUgQk8gKi8KKwlib19hbGxvY19zZXR1cChmZCwgJmV4ZWNfb2JqZWN0MltMM19UQkxd LCBUQUJMRV9TSVpFLCBleGVjX2ZsYWdzLCAmY3VyX3BwZ3R0X29mZik7CisKKwkvKiBBbGxvY2F0 ZSB0d28gTDIgdGFibGUgQk9zICovCisJYm9fYWxsb2Nfc2V0dXAoZmQsICZleGVjX29iamVjdDJb TDJfVEJMMV0sIFRBQkxFX1NJWkUsIGV4ZWNfZmxhZ3MsICZjdXJfcHBndHRfb2ZmKTsKKwlib19h bGxvY19zZXR1cChmZCwgJmV4ZWNfb2JqZWN0MltMMl9UQkwyXSwgVEFCTEVfU0laRSwgZXhlY19m bGFncywgJmN1cl9wcGd0dF9vZmYpOworCisJLyogQWxsb2NhdGUgdHdvIEwxIHRhYmxlIEJPcyAq LworCWJvX2FsbG9jX3NldHVwKGZkLCAmZXhlY19vYmplY3QyW0wxX1RCTDFdLCBUQUJMRV9TSVpF LCBleGVjX2ZsYWdzLCAmY3VyX3BwZ3R0X29mZik7CisJYm9fYWxsb2Nfc2V0dXAoZmQsICZleGVj X29iamVjdDJbTDFfVEJMMl0sIFRBQkxFX1NJWkUsIGV4ZWNfZmxhZ3MsICZjdXJfcHBndHRfb2Zm KTsKKworCS8qIEFsaWduIHRoZSBQUEdUVCBvZmZzZXRzIGZvciB0aGUgMiBkYXRhIGJ1ZmZlcnMg dG8gbmV4dCA2NCBLQiBib3VuZGFyeSAqLworCWN1cl9wcGd0dF9vZmYgPSBBTElHTihjdXJfcHBn dHRfb2ZmLCBUSUxFX1NJWkUpOworCisJLyogQWxsb2NhdGUgdHdvIERhdGEgYnVmZmVyIEJPcyAq LworCWJvX2FsbG9jX3NldHVwKGZkLCAmZXhlY19vYmplY3QyW0RBVEExXSwgVElMRV9TSVpFLCBl eGVjX2ZsYWdzLCAmY3VyX3BwZ3R0X29mZik7CisJYm9fYWxsb2Nfc2V0dXAoZmQsICZleGVjX29i amVjdDJbREFUQTJdLCBUSUxFX1NJWkUsIGV4ZWNfZmxhZ3MsICZjdXJfcHBndHRfb2ZmKTsKKwor CS8qIEFkZCBjb21tYW5kcyB0byB1cGRhdGUgdGhlIHR3byBMMyB0YWJsZSBlbnRyaWVzIHRvIHBv aW50IHRoZW0gdG8gdGhlIEwyIHRhYmxlcyovCisJbGFzdF9lbnRyeV9vZmZzZXQgPSA1MTEqc2l6 ZW9mKHVpbnQ2NF90KTsKKworCWxlbiA9IGVtaXRfc3RvcmVfcXdvcmQoZmQsIGJhdGNoX2J1ZmZl ciwgbGVuLAorCQkJICAgICAgIGV4ZWNfb2JqZWN0MltMM19UQkxdLm9mZnNldCwKKwkJCSAgICAg ICBleGVjX29iamVjdDJbTDJfVEJMMV0ub2Zmc2V0KTsKKworCWxlbiA9IGVtaXRfc3RvcmVfcXdv cmQoZmQsIGJhdGNoX2J1ZmZlciwgbGVuLAorCQkJICAgICAgIGV4ZWNfb2JqZWN0MltMM19UQkxd Lm9mZnNldCArIGxhc3RfZW50cnlfb2Zmc2V0LAorCQkJICAgICAgIGV4ZWNfb2JqZWN0MltMMl9U QkwyXS5vZmZzZXQpOworCisJLyogQWRkIGNvbW1hbmRzIHRvIHVwZGF0ZSBhbiBlbnRyeSBvZiAy IEwyIHRhYmxlcyB0byBwb2ludCB0aGVtIHRvIHRoZSBMMSB0YWJsZXMqLworCWxlbiA9IGVtaXRf c3RvcmVfcXdvcmQoZmQsIGJhdGNoX2J1ZmZlciwgbGVuLAorCQkJICAgICAgIGV4ZWNfb2JqZWN0 MltMMl9UQkwxXS5vZmZzZXQsCisJCQkgICAgICAgZXhlY19vYmplY3QyW0wxX1RCTDFdLm9mZnNl dCk7CisKKwlsZW4gPSBlbWl0X3N0b3JlX3F3b3JkKGZkLCBiYXRjaF9idWZmZXIsIGxlbiwKKwkJ CSAgICAgICBleGVjX29iamVjdDJbTDJfVEJMMl0ub2Zmc2V0ICsgbGFzdF9lbnRyeV9vZmZzZXQs CisJCQkgICAgICAgZXhlY19vYmplY3QyW0wxX1RCTDJdLm9mZnNldCk7CisKKwkvKiBBZGQgY29t bWFuZHMgdG8gdXBkYXRlIGFuIGVudHJ5IG9mIDIgTDEgdGFibGVzIHRvIHBvaW50IHRoZW0gdG8g dGhlIGRhdGEgYnVmZmVycyovCisJbGFzdF9lbnRyeV9vZmZzZXQgPSAxMDIzKnNpemVvZih1aW50 MzJfdCk7CisKKwlsZW4gPSBlbWl0X3N0b3JlX2R3b3JkKGZkLCBiYXRjaF9idWZmZXIsIGxlbiwK KwkJCSAgICAgICBleGVjX29iamVjdDJbTDFfVEJMMV0ub2Zmc2V0LAorCQkJICAgICAgIGV4ZWNf b2JqZWN0MltEQVRBMV0ub2Zmc2V0ID4+IDE2KTsKKworCWxlbiA9IGVtaXRfc3RvcmVfZHdvcmQo ZmQsIGJhdGNoX2J1ZmZlciwgbGVuLAorCQkJICAgICAgIGV4ZWNfb2JqZWN0MltMMV9UQkwyXS5v ZmZzZXQgKyBsYXN0X2VudHJ5X29mZnNldCwKKwkJCSAgICAgICBleGVjX29iamVjdDJbREFUQTJd Lm9mZnNldCA+PiAxNik7CisKKwkvKiBBZGQgY29tbWFuZHMgdG8gdXBkYXRlIHRoZSAyIGRhdGEg YnVmZmVycywgdXNpbmcgdGhlaXIgVFJUVCBWQSAqLworCWRhdGEgPSAweDEyMzQ1Njc4OworCWxl biA9IGVtaXRfc3RvcmVfZHdvcmQoZmQsIGJhdGNoX2J1ZmZlciwgbGVuLAorCQkJICAgICAgIGdl bjhfY2Fub25pY2FsX2FkZHIoZmlyc3RfdGlsZV9hZGRyKSwKKwkJCSAgICAgICBkYXRhKTsKKwls ZW4gPSBlbWl0X3N0b3JlX2R3b3JkKGZkLCBiYXRjaF9idWZmZXIsIGxlbiwKKwkJCSAgICAgICBn ZW44X2Nhbm9uaWNhbF9hZGRyKGxhc3RfdGlsZV9hZGRyKSwKKwkJCSAgICAgICBkYXRhKTsKKwor CWxlbiA9IGVtaXRfYmJfZW5kKGZkLCBiYXRjaF9idWZmZXIsIGxlbik7CisJZ2VtX3dyaXRlKGZk LCBleGVjX29iamVjdDJbQkFUQ0hdLmhhbmRsZSwgMCwgYmF0Y2hfYnVmZmVyLCBsZW4qNCk7CisK KwkvKiBSZXF1ZXN0IEtNRCB0byBzZXR1cCB0aGUgVFItVFQgKi8KKwlpZ3RfYXNzZXJ0KHNldHVw X3RydHQoZmQsIGN0eF9pZCwgZXhlY19vYmplY3QyW0wzX1RCTF0ub2Zmc2V0LCBmaXJzdF90aWxl X2FkZHIpID09IDApOworCisJcmluZyA9IEk5MTVfRVhFQ19SRU5ERVI7CisJc2V0dXBfZXhlY2J1 ZmZlcigmZXhlY2J1ZiwgZXhlY19vYmplY3QyLCBjdHhfaWQsIHJpbmcsIE5VTV9CVUZGRVJTLCBs ZW4qNCk7CisKKwkvKiBzdWJtaXQgY29tbWFuZCBidWZmZXIgKi8KKwlnZW1fZXhlY2J1ZihmZCwg JmV4ZWNidWYpOworCisJLyogcmVhZCB0aGUgMiBkYXRhIGJ1ZmZlcnMgdG8gY2hlY2sgZm9yIHRo ZSB2YWx1ZSB3cml0dGVuIGJ5IHRoZSBHUFUgKi8KKwlwdHIgPSBtbWFwX2JvKGZkLCBleGVjX29i amVjdDJbREFUQTFdLmhhbmRsZSwgVElMRV9TSVpFKTsKKwlpZ3RfYXNzZXJ0X2VxX3UzMihwdHJb MF0sIGRhdGEpOworCisJcHRyID0gbW1hcF9ibyhmZCwgZXhlY19vYmplY3QyW0RBVEEyXS5oYW5k bGUsIFRJTEVfU0laRSk7CisJaWd0X2Fzc2VydF9lcV91MzIocHRyWzBdLCBkYXRhKTsKKworCWdl bV9jbG9zZShmZCwgZXhlY19vYmplY3QyW0wzX1RCTF0uaGFuZGxlKTsKKwlnZW1fY2xvc2UoZmQs IGV4ZWNfb2JqZWN0MltMMl9UQkwxXS5oYW5kbGUpOworCWdlbV9jbG9zZShmZCwgZXhlY19vYmpl Y3QyW0wyX1RCTDJdLmhhbmRsZSk7CisJZ2VtX2Nsb3NlKGZkLCBleGVjX29iamVjdDJbTDFfVEJM MV0uaGFuZGxlKTsKKwlnZW1fY2xvc2UoZmQsIGV4ZWNfb2JqZWN0MltMMV9UQkwyXS5oYW5kbGUp OworCWdlbV9jbG9zZShmZCwgZXhlY19vYmplY3QyW0RBVEExXS5oYW5kbGUpOworCWdlbV9jbG9z ZShmZCwgZXhlY19vYmplY3QyW0RBVEEyXS5oYW5kbGUpOworCWdlbV9jbG9zZShmZCwgZXhlY19v YmplY3QyW0JBVENIXS5oYW5kbGUpOworCisJLyogQ2hlY2sgaWYgdGhlIFRSVFQgcGFyYW1zIHN0 b3JlZCB3aXRoIHRoZSBEcml2ZXIgYXJlIGludGFjdCBvciBub3QgKi8KKwlxdWVyeV90cnR0KGZk LCBjdHhfaWQsIGV4ZWNfb2JqZWN0MltMM19UQkxdLm9mZnNldCwgZmlyc3RfdGlsZV9hZGRyKTsK KworCWlmIChjdHhfaWQpCisJCWdlbV9jb250ZXh0X2Rlc3Ryb3koZmQsIGN0eF9pZCk7Cit9CisK Ky8qIGJhc2ljIHRydHQgdGVzdAorICogVGhpcyB3aWxsIHRlc3QgdGhlIGJhc2ljIFRSLVRUIGZ1 bmN0aW9uYWxpdHkgYnkgZG9pbmcgY291cGxlIG9mIHN0b3JlCisgKiBvcGVyYXRpb25zIHRocm91 Z2ggaXQuIEFsc28gaXQgd2lsbCBleGVyY2lzZSBhbGwgcG9zc2libGUgVFItVFQgc2VnbWVudAor ICogc3RhcnQgbG9jYXRpb25zIChpLmUuIDE2IG9mIHRoZW0pLgorICovCitzdGF0aWMgdm9pZCB0 ZXN0X2Jhc2ljX3RydHRfdXNlKGludCBmZCkKK3sKKwl1aW50NjRfdCBzZWdtZW50X2Jhc2VfYWRk cjsKKworCWZvciAoc2VnbWVudF9iYXNlX2FkZHIgPSAwOworCSAgICAgc2VnbWVudF9iYXNlX2Fk ZHIgPCBQUEdUVF9TSVpFOworCSAgICAgc2VnbWVudF9iYXNlX2FkZHIgKz0gVFJUVF9TRUdNRU5U X1NJWkUpCisJeworCQlzdWJtaXRfdHJ0dF9jb250ZXh0KGZkLCBzZWdtZW50X2Jhc2VfYWRkcik7 CisJfQorfQorCitzdGF0aWMgdm9pZCB0ZXN0X2ludmFsaWQoaW50IGZkKQoreworCXVpbnQzMl90 IGN0eF9pZDsKKwl1aW50NjRfdCBzZWdtZW50X2Jhc2VfYWRkcjsKKwl1aW50NjRfdCBsM19vZmZz ZXQ7CisKKwljdHhfaWQgPSBnZW1fY29udGV4dF9jcmVhdGUoZmQpOworCisJLyogQ2hlY2sgZm9y IGFuIGluY29ycmVjdGx5IGFsaWduZWQgYmFzZSBsb2NhdGlvbiBmb3IgVFItVFQgc2VnbWVudCAq LworCXNlZ21lbnRfYmFzZV9hZGRyID0gVFJUVF9TRUdNRU5UX1NJWkUgKyAweDEwMDA7CisJbDNf b2Zmc2V0ID0gVElMRV9TSVpFOworCWlndF9hc3NlcnRfZXEoc2V0dXBfdHJ0dChmZCwgY3R4X2lk LCBsM19vZmZzZXQsIHNlZ21lbnRfYmFzZV9hZGRyKSwgLUVJTlZBTCk7CisKKwkvKiBDaGVjayBm b3IgdGhlIHNhbWUvY29uZmxpY3RpbmcgdmFsdWUgZm9yIEwzIHRhYmxlIGFuZCBUUi1UVCBzZWdt ZW50IGxvY2F0aW9uICovCisJc2VnbWVudF9iYXNlX2FkZHIgPSBUUlRUX1NFR01FTlRfU0laRTsK KwlsM19vZmZzZXQgPSBzZWdtZW50X2Jhc2VfYWRkcjsKKwlpZ3RfYXNzZXJ0X2VxKHNldHVwX3Ry dHQoZmQsIGN0eF9pZCwgbDNfb2Zmc2V0LCBzZWdtZW50X2Jhc2VfYWRkciksIC1FSU5WQUwpOwor CisJLyogQ2hlY2sgZm9yIGFuIGluY29ycmVjdGx5IGFsaWduZWQgbG9jYXRpb24gZm9yIEwzIHRh YmxlICovCisJbDNfb2Zmc2V0ID0gVElMRV9TSVpFICsgMHgxMDAwOworCWlndF9hc3NlcnRfZXEo c2V0dXBfdHJ0dChmZCwgY3R4X2lkLCBsM19vZmZzZXQsIHNlZ21lbnRfYmFzZV9hZGRyKSwgLUVJ TlZBTCk7CisKKwkvKiBVc2UgdGhlIGNvcnJlY3Qgc2V0dGluZ3Mgbm93ICovCisJbDNfb2Zmc2V0 ID0gVElMRV9TSVpFOworCWlndF9hc3NlcnQoc2V0dXBfdHJ0dChmZCwgY3R4X2lkLCBsM19vZmZz ZXQsIHNlZ21lbnRfYmFzZV9hZGRyKSA9PSAwKTsKKwkvKiBDaGVjayB0aGUgb3ZlcnJpZGluZyBv ZiBUUi1UVCBzZXR0aW5ncyBmb3IgdGhlIHNhbWUgY29udGV4dCAqLworCXNlZ21lbnRfYmFzZV9h ZGRyICs9IFRSVFRfU0VHTUVOVF9TSVpFOworCWwzX29mZnNldCArPSBUSUxFX1NJWkU7CisJaWd0 X2Fzc2VydF9lcShzZXR1cF90cnR0KGZkLCBjdHhfaWQsIGwzX29mZnNldCwgc2VnbWVudF9iYXNl X2FkZHIpLCAtRUVYSVNUKTsKKworCWdlbV9jb250ZXh0X2Rlc3Ryb3koZmQsIGN0eF9pZCk7Cit9 CisKK2lndF9tYWluCit7CisJaW50IGZkID0gLTE7CisKKwlpZ3RfZml4dHVyZSB7CisJCWZkID0g ZHJtX29wZW5fZHJpdmVyKERSSVZFUl9JTlRFTCk7CisKKwkJLyogdGVzdCBuZWVkcyA0OCBQUEdU VCAmIFNvZnQgUGluIHN1cHBvcnQgKi8KKwkJaWd0X3JlcXVpcmUoZ2VtX2hhc19zb2Z0cGluKGZk KSk7CisJCWlndF9yZXF1aXJlKGdlbV91c2VzXzY0Yl9wcGd0dChmZCkpOworCQlpZ3RfcmVxdWly ZShoYXNfdHJ0dF9zdXBwb3J0KGZkKSk7CisJfQorCisJaWd0X3N1YnRlc3QoImludmFsaWQiKQor CQl0ZXN0X2ludmFsaWQoZmQpOworCisJaWd0X3N1YnRlc3QoImJhc2ljIikKKwkJdGVzdF9iYXNp Y190cnR0X3VzZShmZCk7CisKKwlpZ3RfZml4dHVyZQorCQljbG9zZShmZCk7Cit9CisKLS0gCjEu OS4yCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRl bC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK