From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: [PATCH v5 06/21] xen/x86: Improvements to in-hypervisor cpuid sanity checks Date: Thu, 7 Apr 2016 12:57:11 +0100 Message-ID: <1460030246-30153-7-git-send-email-andrew.cooper3@citrix.com> References: <1460030246-30153-1-git-send-email-andrew.cooper3@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1460030246-30153-1-git-send-email-andrew.cooper3@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Xen-devel Cc: Andrew Cooper , Jan Beulich List-Id: xen-devel@lists.xenproject.org Q3VycmVudGx5LCB7cHYsaHZtfV9jcHVpZCgpIGhhcyBhIGxhcmdlIHF1YW50aXR5IG9mIGVzc2Vu dGlhbGx5LXN0YXRpYyBsb2dpYwpmb3IgbW9kaWZ5aW5nIHRoZSBmZWF0dXJlcyB2aXNpYmxlIHRv IGEgZ3Vlc3QuICBBIGxvdCBvZiB0aGlzIGNhbiBiZSBzdWJzdW1lZApieSB7cHYsaHZtfV9mZWF0 dXJlbWFzaywgd2hpY2ggaWRlbnRpZnkgdGhlIGZlYXR1cmVzIGF2YWlsYWJsZSBvbiB0aGlzCmhh cmR3YXJlIHdoaWNoIGNvdWxkIGJlIGdpdmVuIHRvIGEgUFYgb3IgSFZNIGd1ZXN0LgoKVGhpcyBp cyBhIHN0ZXAgaW4gdGhlIGRpcmVjdGlvbiBvZiBmdWxsIHBlci1kb21haW4gY3B1aWQgcG9saWNp ZXMsIGJ1dCBsb3RzCm1vcmUgZGV2ZWxvcG1lbnQgaXMgbmVlZGVkIGZvciB0aGF0LiAgQXMgYSBy ZXN1bHQsIHRoZSBzdGF0aWMgY2hlY2tzIGFyZQpzaW1wbGlmaWVkLCBidXQgdGhlIGR5bmFtaWMg Y2hlY2tzIG5lZWQgdG8gcmVtYWluIGZvciBub3cuCgpBcyBhIHNpZGUgZWZmZWN0LCBzb21lIG9m IHRoZSBsb2dpYyBmb3Igc3BlY2lhbCBmZWF0dXJlcyBjYW4gYmUgaW1wcm92ZWQuCk9TWFNBVkUg YW5kIE9TUEtFIHdpbGwgYmUgYXV0b21hdGljYWxseSBjbGVhcmVkIGJlY2F1c2Ugb2YgYmVpbmcg YWJzZW50IGluIHRoZQpmZWF0dXJlbWFzay4gIFRoaXMgYWxsb3dzIHRoZSBmYXN0LWZvcndhcmQg bG9naWMgdG8gYmUgbW9yZSBzaW1wbGUuCgpJbiBhZGRpdGlvbiwgdGhlcmUgYXJlIHNvbWUgY29y cmVjdGlvbnMgdG8gdGhlIGV4aXN0aW5nIGxvZ2ljOgoKICogSGlkaW5nIFBTRTM2IG91dCBvZiBQ QUUgbW9kZSBpcyBhcmNoaXRlY3R1cmFsbHkgd3JvbmcuICBJdCB0dXJucyBvdXQgdGhhdAogICBp dCB3YXMgYSBidWdmaXggZm9yIHJ1bm5pbmcgSHlwZXJWIHVuZGVyIFhlbiwgd2hpY2ggd2FudGVk IHRvIHNlZSBQU0UzNgogICBldmVuIGFmdGVyIGNob29zaW5nIHRvIHVzZSBQQUUgcGFnaW5nLiAg UFNFMzYgaXMgbm90IHN1cHBvcnRlZCBieSBzaGFkb3cKICAgcGFnaW5nLCBzbyBpcyBoaWRkZW4g ZnJvbSBub24tSEFQIGd1ZXN0cywgYnV0IGlzIHN0aWxsIHZpc2libGUgZm9yIEhBUAogICBndWVz dHMuICBJdCBpcyBhbHNvIGxlYWtlZCBpbnRvIG5vbi1IQVAgZ3Vlc3RzIHdoZW4gdGhlIGd1ZXN0 IGlzIGFscmVhZHkKICAgcnVubmluZyBpbiBQQUUgbW9kZS4KICogQ2hhbmdpbmcgdGhlIHZpc2li aWxpdHkgb2YgUkRUU0NQIGJhc2VkIG9uIGhvc3QgVFNDIHN0YWJpbGl0eSBvciB2aXJ0dWFsCiAg IFRTQyBtb2RlIGlzIGJvZ3VzLCBzbyBkcm9wcGVkLgogKiBXaGVuIGVtdWxhdGluZyBJbnRlbCB0 byBhIGd1ZXN0LCB0aGUgY29tbW9uIGZlYXR1cmVzIGluIGUxZCBzaG91bGQgYmUKICAgY2xlYXJl ZC4KICogVGhlIEFQSUMgYml0IGluIGUxZCAob24gbm9uLUludGVsKSBpcyBhbHNvIGEgZmFzdC1m b3J3YXJkIGZyb20gdGhlCiAgIEFQSUNfQkFTRSBNU1IuCgpBcyBhIHNtYWxsIGltcHJvdmVtZW50 LCB1c2UgY29tcGlsZXItdmlzaWJsZSAmJ3MgYW5kIHwncywgcmF0aGVyIHRoYW4Ke2NsZWFyLHNl dH1fYml0KCkuCgpTaWduZWQtb2ZmLWJ5OiBBbmRyZXcgQ29vcGVyIDxhbmRyZXcuY29vcGVyM0Bj aXRyaXguY29tPgotLS0KQ0M6IEphbiBCZXVsaWNoIDxKQmV1bGljaEBzdXNlLmNvbT4KCnYyOgog KiBSZWluc3RhdGUgc29tZSBvZiB0aGUgZHluYW1pYyBjaGVja3MgZm9yIG5vdy4gIEZ1dHVyZSBk ZXZlbG9wbWVudCB3b3JrIHdpbGwKICAgaW5zdGF0ZSBhIGNvbXBsZXRlIHBlci1kb21haW4gcG9s aWN5LgogKiBGaXggT1NYU0FWRSBoYW5kbGluZyBmb3IgUFYgZ3Vlc3RzLgp2MzoKICogQmV0dGVy IGhhbmRsaW5nIG9mIHRoZSBjcm9zcy12ZW5kb3IgY2FzZS4KICogSW1wcm92ZW1lbnRzIHRvIHRo ZSBoYW5kbGluZyBvZiBzcGVjaWFsIGZlYXR1cmVzLgogKiBDb3JyZWN0IFBTRTM2IHRvIGJlaW5n IGEgSEFQLW9ubHkgZmVhdHVyZS4KICogWWV0IG1vcmUgT1NYU0FWRSBmaXhlcyBmb3IgUFYgZ3Vl c3RzLgp2NDoKICogTGVhayBQU0UzNiBpbnRvIHNoYWRvdyBndWVzdHMgdG8gZml4IGJ1Z2d5IHZl cnNpb25zIG9mIEh5cGVyLVYuCiAqIExlYWsgTVRSUiBpbnRvIHRoZSBoYXJkd2FyZSBkb21haW4g dG8gZml4IFhlbm9saW51eCBkb20wLgogKiBDaGFuZ2UgY3Jvc3MtdmVuZG9yIDFEIGRpc2FibGlu ZyBsb2dpYy4KICogQXZvaWQgcmVhZGluZyBhcmNoLnB2X3ZjcHUgZm9yIFBWSCBndWVzdHMuCnY1 OgogKiBDbGFyaWZ5IHRoZSBjb21taXQgbWVzc2FnZSByZWdhcmRpbmcgUFNFMzYuCiAqIERyb3Ag cmVkdW5kYW50IGlzX3B2X2RvbWFpbigpLgogKiBGaXggZGVlcC1DIGFuZCBQIHN0YXRlcyB3aXRo IG1vZGVybiBMaW51eCBQVk9wcyBvbiBmYXVsdGluZy1jYXBhYmxlIGhhcmR3YXJlLgotLS0KIHhl bi9hcmNoL3g4Ni9odm0vaHZtLmMgICAgICAgICAgIHwgMTI1ICsrKysrKysrKysrKy0tLS0tLS0K IHhlbi9hcmNoL3g4Ni90cmFwcy5jICAgICAgICAgICAgIHwgMjU0ICsrKysrKysrKysrKysrKysr KysrKysrKysrKy0tLS0tLS0tLS0tLQogeGVuL2luY2x1ZGUvYXNtLXg4Ni9jcHVmZWF0dXJlLmgg fCAgIDIgKwogMyBmaWxlcyBjaGFuZ2VkLCAyNjMgaW5zZXJ0aW9ucygrKSwgMTE4IGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9odm0vaHZtLmMgYi94ZW4vYXJjaC94ODYv aHZtL2h2bS5jCmluZGV4IGIyMzlmNzQuLjljZTYxY2MgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4 Ni9odm0vaHZtLmMKKysrIGIveGVuL2FyY2gveDg2L2h2bS9odm0uYwpAQCAtNzIsNiArNzIsNyBA QAogI2luY2x1ZGUgPHB1YmxpYy9tZW1vcnkuaD4KICNpbmNsdWRlIDxwdWJsaWMvdm1fZXZlbnQu aD4KICNpbmNsdWRlIDxwdWJsaWMvYXJjaC14ODYvY3B1aWQuaD4KKyNpbmNsdWRlIDxhc20vY3B1 aWQuaD4KIAogYm9vbF90IF9fcmVhZF9tb3N0bHkgaHZtX2VuYWJsZWQ7CiAKQEAgLTMzNTgsNjIg KzMzNTksNzEgQEAgdm9pZCBodm1fY3B1aWQodW5zaWduZWQgaW50IGlucHV0LCB1bnNpZ25lZCBp bnQgKmVheCwgdW5zaWduZWQgaW50ICplYngsCiAgICAgICAgIC8qIEZpeCB1cCBWTEFQSUMgZGV0 YWlscy4gKi8KICAgICAgICAgKmVieCAmPSAweDAwRkZGRkZGdTsKICAgICAgICAgKmVieCB8PSAo di0+dmNwdV9pZCAqIDIpIDw8IDI0OworCisgICAgICAgICplY3ggJj0gaHZtX2ZlYXR1cmVzZXRb RkVBVFVSRVNFVF8xY107CisgICAgICAgICplZHggJj0gaHZtX2ZlYXR1cmVzZXRbRkVBVFVSRVNF VF8xZF07CisKKyAgICAgICAgLyogQVBJQyBleHBvc2VkIHRvIGd1ZXN0cywgYnV0IEZhc3QtZm9y d2FyZCBNU1JfQVBJQ19CQVNFLkVOIGJhY2sgaW4uICovCiAgICAgICAgIGlmICggdmxhcGljX2h3 X2Rpc2FibGVkKHZjcHVfdmxhcGljKHYpKSApCi0gICAgICAgICAgICBfX2NsZWFyX2JpdChYODZf RkVBVFVSRV9BUElDICYgMzEsIGVkeCk7CisgICAgICAgICAgICAqZWR4ICY9IH5jcHVmZWF0X2Jp dChYODZfRkVBVFVSRV9BUElDKTsKIAotICAgICAgICAvKiBGaXggdXAgT1NYU0FWRS4gKi8KLSAg ICAgICAgaWYgKCAqZWN4ICYgY3B1ZmVhdF9tYXNrKFg4Nl9GRUFUVVJFX1hTQVZFKSAmJgotICAg ICAgICAgICAgICh2LT5hcmNoLmh2bV92Y3B1Lmd1ZXN0X2NyWzRdICYgWDg2X0NSNF9PU1hTQVZF KSApCisgICAgICAgIC8qIE9TWFNBVkUgY2xlYXJlZCBieSBodm1fZmVhdHVyZXNldC4gIEZhc3Qt Zm9yd2FyZCBDUjQgYmFjayBpbi4gKi8KKyAgICAgICAgaWYgKCB2LT5hcmNoLmh2bV92Y3B1Lmd1 ZXN0X2NyWzRdICYgWDg2X0NSNF9PU1hTQVZFICkKICAgICAgICAgICAgICplY3ggfD0gY3B1ZmVh dF9tYXNrKFg4Nl9GRUFUVVJFX09TWFNBVkUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICAq ZWN4ICY9IH5jcHVmZWF0X21hc2soWDg2X0ZFQVRVUkVfT1NYU0FWRSk7CiAKLSAgICAgICAgLyog RG9uJ3QgZXhwb3NlIFBDSUQgdG8gbm9uLWhhcCBodm0uICovCisgICAgICAgIC8qIERvbid0IGV4 cG9zZSBIQVAtb25seSBmZWF0dXJlcyB0byBub24taGFwIGd1ZXN0cy4gKi8KICAgICAgICAgaWYg KCAhaGFwX2VuYWJsZWQoZCkgKQorICAgICAgICB7CiAgICAgICAgICAgICAqZWN4ICY9IH5jcHVm ZWF0X21hc2soWDg2X0ZFQVRVUkVfUENJRCk7CiAKLSAgICAgICAgLyogT25seSBwcm92aWRlIFBT RTM2IHdoZW4gZ3Vlc3QgcnVucyBpbiAzMmJpdCBQQUUgb3IgaW4gbG9uZyBtb2RlICovCi0gICAg ICAgIGlmICggIShodm1fcGFlX2VuYWJsZWQodikgfHwgaHZtX2xvbmdfbW9kZV9lbmFibGVkKHYp KSApCi0gICAgICAgICAgICAqZWR4ICY9IH5jcHVmZWF0X21hc2soWDg2X0ZFQVRVUkVfUFNFMzYp OworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIFBTRTM2IGlzIG5vdCBzdXBwb3J0ZWQg aW4gc2hhZG93IG1vZGUuICBUaGlzIGJpdCBzaG91bGQgYmUKKyAgICAgICAgICAgICAqIHVuaWxh dGVyYWxseSBjbGVhcmVkLgorICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqIEhvd2V2ZXIs IGFuIHVuc3BlY2lmaWVkIHZlcnNpb24gb2YgSHlwZXItViBmcm9tIDIwMTEgcmVmdXNlcworICAg ICAgICAgICAgICogdG8gc3RhcnQgYXMgdGhlICJjcHUgZG9lcyBub3QgcHJvdmlkZSByZXF1aXJl ZCBodyBmZWF0dXJlcyIgaWYKKyAgICAgICAgICAgICAqIGl0IGNhbid0IHNlZSBQU0UzNi4KKyAg ICAgICAgICAgICAqCisgICAgICAgICAgICAgKiBBcyBhIHdvcmthcm91bmQsIGxlYWsgdGhlIHRv b2xzdGFjay1wcm92aWRlZCBQU0UzNiB2YWx1ZSBpbnRvIGEKKyAgICAgICAgICAgICAqIHNoYWRv dyBndWVzdCBpZiB0aGUgZ3Vlc3QgaXMgYWxyZWFkeSB1c2luZyBQQUUgcGFnaW5nIChhbmQKKyAg ICAgICAgICAgICAqIHdvbid0IGNhcmUgYWJvdXQgcmV2ZXJ0aW5nIGJhY2sgdG8gUFNFIHBhZ2lu ZykuICBPdGhlcndpc2UsCisgICAgICAgICAgICAgKiBrbm9ibGUgaXQsIHNvIGEgMzJiaXQgZ3Vl c3QgZG9lc24ndCBnZXQgdGhlIGltcHJlc3Npb24gdGhhdCBpdAorICAgICAgICAgICAgICogY291 bGQgdHJ5IHRvIHVzZSBQU0UzNiBwYWdpbmcuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAg IGlmICggIShodm1fcGFlX2VuYWJsZWQodikgfHwgaHZtX2xvbmdfbW9kZV9lbmFibGVkKHYpKSAp CisgICAgICAgICAgICAgICAgKmVkeCAmPSB+Y3B1ZmVhdF9tYXNrKFg4Nl9GRUFUVVJFX1BTRTM2 KTsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKKwogICAgIGNhc2UgMHg3OgogICAgICAgICBp ZiAoIGNvdW50ID09IDAgKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoICFjcHVfaGFzX3Nt ZXAgKQotICAgICAgICAgICAgICAgICplYnggJj0gfmNwdWZlYXRfbWFzayhYODZfRkVBVFVSRV9T TUVQKTsKLQotICAgICAgICAgICAgaWYgKCAhY3B1X2hhc19zbWFwICkKLSAgICAgICAgICAgICAg ICAqZWJ4ICY9IH5jcHVmZWF0X21hc2soWDg2X0ZFQVRVUkVfU01BUCk7CisgICAgICAgICAgICAv KiBGb2xkIGhvc3QncyBGRFBfRVhDUF9PTkxZIGFuZCBOT19GUFVfU0VMIGludG8gZ3Vlc3QncyB2 aWV3LiAqLworICAgICAgICAgICAgKmVieCAmPSAoaHZtX2ZlYXR1cmVzZXRbRkVBVFVSRVNFVF83 YjBdICYKKyAgICAgICAgICAgICAgICAgICAgIH5zcGVjaWFsX2ZlYXR1cmVzW0ZFQVRVUkVTRVRf N2IwXSk7CisgICAgICAgICAgICAqZWJ4IHw9IChob3N0X2ZlYXR1cmVzZXRbRkVBVFVSRVNFVF83 YjBdICYKKyAgICAgICAgICAgICAgICAgICAgIHNwZWNpYWxfZmVhdHVyZXNbRkVBVFVSRVNFVF83 YjBdKTsKIAotICAgICAgICAgICAgLyogRG9uJ3QgZXhwb3NlIE1QWCB0byBodm0gd2hlbiBWTVgg c3VwcG9ydCBpcyBub3QgYXZhaWxhYmxlLiAqLwotICAgICAgICAgICAgaWYgKCAhKHZteF92bWV4 aXRfY29udHJvbCAmIFZNX0VYSVRfQ0xFQVJfQk5EQ0ZHUykgfHwKLSAgICAgICAgICAgICAgICAg ISh2bXhfdm1lbnRyeV9jb250cm9sICYgVk1fRU5UUllfTE9BRF9CTkRDRkdTKSApCi0gICAgICAg ICAgICAgICAgKmVieCAmPSB+Y3B1ZmVhdF9tYXNrKFg4Nl9GRUFUVVJFX01QWCk7CisgICAgICAg ICAgICAqZWN4ICY9IGh2bV9mZWF0dXJlc2V0W0ZFQVRVUkVTRVRfN2MwXTsKIAorICAgICAgICAg ICAgLyogRG9uJ3QgZXhwb3NlIEhBUC1vbmx5IGZlYXR1cmVzIHRvIG5vbi1oYXAgZ3Vlc3RzLiAq LwogICAgICAgICAgICAgaWYgKCAhaGFwX2VuYWJsZWQoZCkgKQogICAgICAgICAgICAgewotICAg ICAgICAgICAgICAgICAvKiBEb24ndCBleHBvc2UgSU5WUENJRCB0byBub24taGFwIGh2bS4gKi8K ICAgICAgICAgICAgICAgICAgKmVieCAmPSB+Y3B1ZmVhdF9tYXNrKFg4Nl9GRUFUVVJFX0lOVlBD SUQpOwotICAgICAgICAgICAgICAgICAvKiBYODZfRkVBVFVSRV9QS1UgaXMgbm90IHlldCBpbXBs ZW1lbnRlZCBmb3Igc2hhZG93IHBhZ2luZy4gKi8KICAgICAgICAgICAgICAgICAgKmVjeCAmPSB+ Y3B1ZmVhdF9tYXNrKFg4Nl9GRUFUVVJFX1BLVSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg ICAgIGlmICggKCplY3ggJiBjcHVmZWF0X21hc2soWDg2X0ZFQVRVUkVfUEtVKSkgJiYKLSAgICAg ICAgICAgICAgICAgKHYtPmFyY2guaHZtX3ZjcHUuZ3Vlc3RfY3JbNF0gJiBYODZfQ1I0X1BLRSkg KQorICAgICAgICAgICAgLyogT1NQS0UgY2xlYXJlZCBieSBodm1fZmVhdHVyZXNldC4gIEZhc3Qt Zm9yd2FyZCBDUjQgYmFjayBpbi4gKi8KKyAgICAgICAgICAgIGlmICggdi0+YXJjaC5odm1fdmNw dS5ndWVzdF9jcls0XSAmIFg4Nl9DUjRfUEtFICkKICAgICAgICAgICAgICAgICAqZWN4IHw9IGNw dWZlYXRfbWFzayhYODZfRkVBVFVSRV9PU1BLRSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg ICAgICAgICAgKmVjeCAmPSB+Y3B1ZmVhdF9tYXNrKFg4Nl9GRUFUVVJFX09TUEtFKTsKLQotICAg ICAgICAgICAgLyogRG9uJ3QgZXhwb3NlIFBDT01NSVQgdG8gaHZtIHdoZW4gVk1YIHN1cHBvcnQg aXMgbm90IGF2YWlsYWJsZS4gKi8KLSAgICAgICAgICAgIGlmICggIWNwdV9oYXNfdm14X3Bjb21t aXQgKQotICAgICAgICAgICAgICAgICplYnggJj0gfmNwdWZlYXRfbWFzayhYODZfRkVBVFVSRV9Q Q09NTUlUKTsKICAgICAgICAgfQotCiAgICAgICAgIGJyZWFrOworCiAgICAgY2FzZSAweGI6CiAg ICAgICAgIC8qIEZpeCB0aGUgeDJBUElDIGlkZW50aWZpZXIuICovCiAgICAgICAgICplZHggPSB2 LT52Y3B1X2lkICogMjsKICAgICAgICAgYnJlYWs7CisKICAgICBjYXNlIDB4ZDoKICAgICAgICAg LyogRUJYIHZhbHVlIG9mIG1haW4gbGVhZiAwIGRlcGVuZHMgb24gZW5hYmxlZCB4c2F2ZSBmZWF0 dXJlcyAqLwogICAgICAgICBpZiAoIGNvdW50ID09IDAgJiYgdi0+YXJjaC54Y3IwICkgCkBAIC0z NDMwLDkgKzM0NDAsMTIgQEAgdm9pZCBodm1fY3B1aWQodW5zaWduZWQgaW50IGlucHV0LCB1bnNp Z25lZCBpbnQgKmVheCwgdW5zaWduZWQgaW50ICplYngsCiAgICAgICAgICAgICAgICAgICAgICpl YnggPSBfZWF4ICsgX2VieDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorCiAgICAgICAgIGlm ICggY291bnQgPT0gMSApCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICggY3B1X2hhc194c2F2 ZXMgJiYgY3B1X2hhc192bXhfeHNhdmVzICkKKyAgICAgICAgICAgICplYXggJj0gaHZtX2ZlYXR1 cmVzZXRbRkVBVFVSRVNFVF9EYTFdOworCisgICAgICAgICAgICBpZiAoICplYXggJiBjcHVmZWF0 X21hc2soWDg2X0ZFQVRVUkVfWFNBVkVTKSApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg ICAgKmVieCA9IFhTVEFURV9BUkVBX01JTl9TSVpFOwogICAgICAgICAgICAgICAgIGlmICggdi0+ YXJjaC54Y3IwIHwgdi0+YXJjaC5odm1fdmNwdS5tc3JfeHNzICkKQEAgLTM0NDcsMjAgKzM0NjAs NDIgQEAgdm9pZCBodm1fY3B1aWQodW5zaWduZWQgaW50IGlucHV0LCB1bnNpZ25lZCBpbnQgKmVh eCwgdW5zaWduZWQgaW50ICplYngsCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSAweDgwMDAw MDAxOgotICAgICAgICAvKiBXZSBleHBvc2UgUkRUU0NQIGZlYXR1cmUgdG8gZ3Vlc3Qgb25seSB3 aGVuCi0gICAgICAgICAgIHRzY19tb2RlID09IFRTQ19NT0RFX0RFRkFVTFQgYW5kIGhvc3RfdHNj X2lzX3NhZmUoKSByZXR1cm5zIDEgKi8KLSAgICAgICAgaWYgKCBkLT5hcmNoLnRzY19tb2RlICE9 IFRTQ19NT0RFX0RFRkFVTFQgfHwKLSAgICAgICAgICAgICAhaG9zdF90c2NfaXNfc2FmZSgpICkK LSAgICAgICAgICAgICplZHggJj0gfmNwdWZlYXRfbWFzayhYODZfRkVBVFVSRV9SRFRTQ1ApOwot ICAgICAgICAvKiBIaWRlIDFHQi1zdXBlcnBhZ2UgZmVhdHVyZSBpZiB3ZSBjYW4ndCBlbXVsYXRl IGl0LiAqLwotICAgICAgICBpZiAoIWh2bV9wc2UxZ2Jfc3VwcG9ydGVkKGQpKQorICAgICAgICAq ZWN4ICY9IGh2bV9mZWF0dXJlc2V0W0ZFQVRVUkVTRVRfZTFjXTsKKyAgICAgICAgKmVkeCAmPSBo dm1fZmVhdHVyZXNldFtGRUFUVVJFU0VUX2UxZF07CisKKyAgICAgICAgLyogSWYgbm90IGVtdWxh dGluZyBBTUQsIGNsZWFyIHRoZSBkdXBsaWNhdGVkIGZlYXR1cmVzIGluIGUxZC4gKi8KKyAgICAg ICAgaWYgKCBkLT5hcmNoLng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9BTUQgKQorICAgICAgICAg ICAgKmVkeCAmPSB+Q1BVSURfQ09NTU9OXzFEX0ZFQVRVUkVTOworICAgICAgICAvKiBmYXN0LWZv cndhcmQgTVNSX0FQSUNfQkFTRS5FTiBpZiBpdCBoYXNuJ3QgYWxyZWFkeSBiZWVuIGNsb2JiZXJl ZC4gKi8KKyAgICAgICAgZWxzZSBpZiAoIHZsYXBpY19od19kaXNhYmxlZCh2Y3B1X3ZsYXBpYyh2 KSkgKQorICAgICAgICAgICAgKmVkeCAmPSB+Y3B1ZmVhdF9iaXQoWDg2X0ZFQVRVUkVfQVBJQyk7 CisKKyAgICAgICAgLyogRG9uJ3QgZXhwb3NlIEhBUC1vbmx5IGZlYXR1cmVzIHRvIG5vbi1oYXAg Z3Vlc3RzLiAqLworICAgICAgICBpZiAoICFoYXBfZW5hYmxlZChkKSApCisgICAgICAgIHsKICAg ICAgICAgICAgICplZHggJj0gfmNwdWZlYXRfbWFzayhYODZfRkVBVFVSRV9QQUdFMUdCKTsKLSAg ICAgICAgLyogT25seSBwcm92aWRlIFBTRTM2IHdoZW4gZ3Vlc3QgcnVucyBpbiAzMmJpdCBQQUUg b3IgaW4gbG9uZyBtb2RlICovCi0gICAgICAgIGlmICggIShodm1fcGFlX2VuYWJsZWQodikgfHwg aHZtX2xvbmdfbW9kZV9lbmFibGVkKHYpKSApCi0gICAgICAgICAgICAqZWR4ICY9IH5jcHVmZWF0 X21hc2soWDg2X0ZFQVRVUkVfUFNFMzYpOwotICAgICAgICAvKiBIaWRlIGRhdGEgYnJlYWtwb2lu dCBleHRlbnNpb25zIGlmIHRoZSBoYXJkd2FyZSBoYXMgbm8gc3VwcG9ydC4gKi8KLSAgICAgICAg aWYgKCAhYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0RCRVhUKSApCi0gICAgICAgICAgICAqZWN4 ICY9IH5jcHVmZWF0X21hc2soWDg2X0ZFQVRVUkVfREJFWFQpOworCisgICAgICAgICAgICAvKgor ICAgICAgICAgICAgICogUFNFMzYgaXMgbm90IHN1cHBvcnRlZCBpbiBzaGFkb3cgbW9kZS4gIFRo aXMgYml0IHNob3VsZCBiZQorICAgICAgICAgICAgICogdW5pbGF0ZXJhbGx5IGNsZWFyZWQuCisg ICAgICAgICAgICAgKgorICAgICAgICAgICAgICogSG93ZXZlciwgYW4gdW5zcGVjaWZpZWQgdmVy c2lvbiBvZiBIeXBlci1WIGZyb20gMjAxMSByZWZ1c2VzCisgICAgICAgICAgICAgKiB0byBzdGFy dCBhcyB0aGUgImNwdSBkb2VzIG5vdCBwcm92aWRlIHJlcXVpcmVkIGh3IGZlYXR1cmVzIiBpZgor ICAgICAgICAgICAgICogaXQgY2FuJ3Qgc2VlIFBTRTM2LgorICAgICAgICAgICAgICoKKyAgICAg ICAgICAgICAqIEFzIGEgd29ya2Fyb3VuZCwgbGVhayB0aGUgdG9vbHN0YWNrLXByb3ZpZGVkIFBT RTM2IHZhbHVlIGludG8gYQorICAgICAgICAgICAgICogc2hhZG93IGd1ZXN0IGlmIHRoZSBndWVz dCBpcyBhbHJlYWR5IHVzaW5nIFBBRSBwYWdpbmcgKGFuZAorICAgICAgICAgICAgICogd29uJ3Qg Y2FyZSBhYm91dCByZXZlcnRpbmcgYmFjayB0byBQU0UgcGFnaW5nKS4gIE90aGVyd2lzZSwKKyAg ICAgICAgICAgICAqIGtub2JsZSBpdCwgc28gYSAzMmJpdCBndWVzdCBkb2Vzbid0IGdldCB0aGUg aW1wcmVzc2lvbiB0aGF0IGl0CisgICAgICAgICAgICAgKiBjb3VsZCB0cnkgdG8gdXNlIFBTRTM2 IHBhZ2luZy4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKCAhKGh2bV9wYWVfZW5h YmxlZCh2KSB8fCBodm1fbG9uZ19tb2RlX2VuYWJsZWQodikpICkKKyAgICAgICAgICAgICAgICAq ZWR4ICY9IH5jcHVmZWF0X21hc2soWDg2X0ZFQVRVUkVfUFNFMzYpOworICAgICAgICB9CisgICAg ICAgIGJyZWFrOworCisgICAgY2FzZSAweDgwMDAwMDA3OgorICAgICAgICAqZWR4ICY9IGh2bV9m ZWF0dXJlc2V0W0ZFQVRVUkVTRVRfZTdkXTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIDB4 ODAwMDAwMDg6CkBAIC0zNDc4LDYgKzM1MTMsOCBAQCB2b2lkIGh2bV9jcHVpZCh1bnNpZ25lZCBp bnQgaW5wdXQsIHVuc2lnbmVkIGludCAqZWF4LCB1bnNpZ25lZCBpbnQgKmVieCwKICAgICAgICAg aHZtX2NwdWlkKDB4ODAwMDAwMDEsIE5VTEwsIE5VTEwsIE5VTEwsICZfZWR4KTsKICAgICAgICAg KmVheCA9ICgqZWF4ICYgfjB4ZmZmZjAwKSB8IChfZWR4ICYgY3B1ZmVhdF9tYXNrKFg4Nl9GRUFU VVJFX0xNKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gMHgzMDAwIDog MHgyMDAwKTsKKworICAgICAgICAqZWJ4ICY9IGh2bV9mZWF0dXJlc2V0W0ZFQVRVUkVTRVRfZThi XTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L3Ry YXBzLmMgYi94ZW4vYXJjaC94ODYvdHJhcHMuYwppbmRleCA2ZmJiMWNmLi5iZDJmNjdiIDEwMDY0 NAotLS0gYS94ZW4vYXJjaC94ODYvdHJhcHMuYworKysgYi94ZW4vYXJjaC94ODYvdHJhcHMuYwpA QCAtNzMsNiArNzMsNyBAQAogI2luY2x1ZGUgPGFzbS9ocGV0Lmg+CiAjaW5jbHVkZSA8YXNtL3Zw bXUuaD4KICNpbmNsdWRlIDxwdWJsaWMvYXJjaC14ODYvY3B1aWQuaD4KKyNpbmNsdWRlIDxhc20v Y3B1aWQuaD4KICNpbmNsdWRlIDx4c20veHNtLmg+CiAKIC8qCkBAIC05MzIsNjkgKzkzMywxNjIg QEAgdm9pZCBwdl9jcHVpZChzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncykKICAgICBlbHNlCiAg ICAgICAgIGNwdWlkX2NvdW50KGxlYWYsIHN1YmxlYWYsICZhLCAmYiwgJmMsICZkKTsKIAotICAg IGlmICggKGxlYWYgJiAweDdmZmZmZmZmKSA9PSAweDAwMDAwMDAxICkKLSAgICB7Ci0gICAgICAg IC8qIE1vZGlmeSBGZWF0dXJlIEluZm9ybWF0aW9uLiAqLwotICAgICAgICBpZiAoICFjcHVfaGFz X2FwaWMgKQotICAgICAgICAgICAgX19jbGVhcl9iaXQoWDg2X0ZFQVRVUkVfQVBJQywgJmQpOwot Ci0gICAgICAgIGlmICggIWlzX3B2aF9kb21haW4oY3VycmQpICkKLSAgICAgICAgewotICAgICAg ICAgICAgX19jbGVhcl9iaXQoWDg2X0ZFQVRVUkVfUFNFLCAmZCk7Ci0gICAgICAgICAgICBfX2Ns ZWFyX2JpdChYODZfRkVBVFVSRV9QR0UsICZkKTsKLSAgICAgICAgICAgIF9fY2xlYXJfYml0KFg4 Nl9GRUFUVVJFX1BTRTM2LCAmZCk7Ci0gICAgICAgICAgICBfX2NsZWFyX2JpdChYODZfRkVBVFVS RV9WTUUsICZkKTsKLSAgICAgICAgfQotICAgIH0KLQogICAgIHN3aXRjaCAoIGxlYWYgKQogICAg IHsKICAgICBjYXNlIDB4MDAwMDAwMDE6Ci0gICAgICAgIC8qIE1vZGlmeSBGZWF0dXJlIEluZm9y bWF0aW9uLiAqLwotICAgICAgICBpZiAoICFjcHVfaGFzX3NlcCApCi0gICAgICAgICAgICBfX2Ns ZWFyX2JpdChYODZfRkVBVFVSRV9TRVAsICZkKTsKLSAgICAgICAgX19jbGVhcl9iaXQoWDg2X0ZF QVRVUkVfRFMsICZkKTsKLSAgICAgICAgX19jbGVhcl9iaXQoWDg2X0ZFQVRVUkVfVE0xLCAmZCk7 Ci0gICAgICAgIF9fY2xlYXJfYml0KFg4Nl9GRUFUVVJFX1BCRSwgJmQpOwotICAgICAgICBpZiAo IGlzX3B2aF9kb21haW4oY3VycmQpICkKLSAgICAgICAgICAgIF9fY2xlYXJfYml0KFg4Nl9GRUFU VVJFX01UUlIsICZkKTsKLQotICAgICAgICBfX2NsZWFyX2JpdChYODZfRkVBVFVSRV9EVEVTNjQg JSAzMiwgJmMpOwotICAgICAgICBfX2NsZWFyX2JpdChYODZfRkVBVFVSRV9NT05JVE9SICUgMzIs ICZjKTsKLSAgICAgICAgX19jbGVhcl9iaXQoWDg2X0ZFQVRVUkVfRFNDUEwgJSAzMiwgJmMpOwot ICAgICAgICBfX2NsZWFyX2JpdChYODZfRkVBVFVSRV9WTVggJSAzMiwgJmMpOwotICAgICAgICBf X2NsZWFyX2JpdChYODZfRkVBVFVSRV9TTVggJSAzMiwgJmMpOwotICAgICAgICBfX2NsZWFyX2Jp dChYODZfRkVBVFVSRV9UTTIgJSAzMiwgJmMpOworICAgICAgICBjICY9IHB2X2ZlYXR1cmVzZXRb RkVBVFVSRVNFVF8xY107CisgICAgICAgIGQgJj0gcHZfZmVhdHVyZXNldFtGRUFUVVJFU0VUXzFk XTsKKwogICAgICAgICBpZiAoIGlzX3B2XzMyYml0X2RvbWFpbihjdXJyZCkgKQotICAgICAgICAg ICAgX19jbGVhcl9iaXQoWDg2X0ZFQVRVUkVfQ1gxNiAlIDMyLCAmYyk7Ci0gICAgICAgIF9fY2xl YXJfYml0KFg4Nl9GRUFUVVJFX1hUUFIgJSAzMiwgJmMpOwotICAgICAgICBfX2NsZWFyX2JpdChY ODZfRkVBVFVSRV9QRENNICUgMzIsICZjKTsKLSAgICAgICAgX19jbGVhcl9iaXQoWDg2X0ZFQVRV UkVfUENJRCAlIDMyLCAmYyk7Ci0gICAgICAgIF9fY2xlYXJfYml0KFg4Nl9GRUFUVVJFX0RDQSAl IDMyLCAmYyk7Ci0gICAgICAgIGlmICggIWNwdV9oYXNfeHNhdmUgKQorICAgICAgICAgICAgYyAm PSB+Y3B1ZmVhdF9tYXNrKFg4Nl9GRUFUVVJFX0NYMTYpOworCisgICAgICAgIGlmICggIWlzX3B2 aF9kb21haW4oY3VycmQpICkKICAgICAgICAgewotICAgICAgICAgICAgX19jbGVhcl9iaXQoWDg2 X0ZFQVRVUkVfWFNBVkUgJSAzMiwgJmMpOwotICAgICAgICAgICAgX19jbGVhcl9iaXQoWDg2X0ZF QVRVUkVfQVZYICUgMzIsICZjKTsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBEZWxl dGUgdGhlIFBWSCBjb25kaXRpb24gd2hlbiBIVk1MaXRlIGZvcm1hbGx5IHJlcGxhY2VzIFBWSCwK KyAgICAgICAgICAgICAqIGFuZCBIVk0gZ3Vlc3RzIG5vIGxvbmdlciBlbnRlciBhIFBWIGNvZGVw YXRoLgorICAgICAgICAgICAgICovCisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiAh ISEgT1NYU0FWRSBoYW5kbGluZyBmb3IgUFYgZ3Vlc3RzIGlzIG5vbi1hcmNoaXRlY3R1cmFsICEh IQorICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqIEFyY2hpdGVjdHVyYWxseSwgdGhlIGNv cnJlY3QgY29kZSBoZXJlIGlzIHNpbXBseToKKyAgICAgICAgICAgICAqCisgICAgICAgICAgICAg KiAgIGlmICggY3Vyci0+YXJjaC5wdl92Y3B1LmN0cmxyZWdbNF0gJiBYODZfQ1I0X09TWFNBVkUg KQorICAgICAgICAgICAgICogICAgICAgYyB8PSBjcHVmZWF0X21hc2soWDg2X0ZFQVRVUkVfT1NY U0FWRSk7CisgICAgICAgICAgICAgKgorICAgICAgICAgICAgICogSG93ZXZlciBiZWNhdXNlIG9m IGJ1Z3MgaW4gWGVuIChiZWZvcmUgYy9zIGJkMTkwODBiLCBOb3YgMjAxMCwKKyAgICAgICAgICAg ICAqIHRoZSBYU0FWRSBjcHVpZCBmbGFnIGxlYWtlZCBpbnRvIGd1ZXN0cyBkZXNwaXRlIHRoZSBm ZWF0dXJlIG5vdAorICAgICAgICAgICAgICogYmVpbmcgYXZhaWxhYmxlIGZvciB1c2UpLCBidWdn eSB3b3JrYXJvdW5kcyB3aGVyZSBpbnRyb2R1Y2VkIHRvCisgICAgICAgICAgICAgKiBMaW51eCAo Yy9zIDk0N2NjZjljLCBhbHNvIE5vdiAyMDEwKSB3aGljaCByZWxpZWQgb24gdGhlIGZhY3QKKyAg ICAgICAgICAgICAqIHRoYXQgWGVuIGFsc28gaW5jb3JyZWN0bHkgbGVha2VkIE9TWFNBVkUgaW50 byB0aGUgZ3Vlc3QuCisgICAgICAgICAgICAgKgorICAgICAgICAgICAgICogRnVydGhlcm1vcmUs IHByb3ZpZGluZyBhcmNoaXRlY3R1cmFsIE9TWFNBVkUgYmVoYXZpb3VyIHRvIGEKKyAgICAgICAg ICAgICAqIG1hbnkgTGludXggUFYgZ3Vlc3RzIHRyaWdnZXJlZCBhIGZ1cnRoZXIga2VybmVsIGJ1 ZyB3aGVuIHRoZQorICAgICAgICAgICAgICogZnB1IGNvZGUgb2JzZXJ2ZXMgdGhhdCBYU0FWRU9Q VCBpcyBhdmFpbGFibGUsIGFzc3VtZXMgdGhhdAorICAgICAgICAgICAgICogeHNhdmUgc3RhdGUg aGFkIGJlZW4gc2V0IHVwIGZvciB0aGUgdGFzaywgYW5kIGZvbGxvd3MgYSB3aWxkCisgICAgICAg ICAgICAgKiBwb2ludGVyLgorICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqIE9sZGVyIExp bnV4IFBWT1BTIGtlcm5lbHMgaG93ZXZlciBkbyByZXF1aXJlIGFyY2hpdGVjdHVyYWwKKyAgICAg ICAgICAgICAqIGJlaGF2aW91ci4gIFRoZXkgb2JzZXJ2ZSBYZW4ncyBsZWFrZWQgT1NYU0FWRSBh bmQgYXNzdW1lIHRoZXkKKyAgICAgICAgICAgICAqIGNhbiBhbHJlYWR5IHVzZSBYU0VUQlYsIGR5 aW5nIHdpdGggYSAjVUQgYmVjYXVzZSB0aGUgc2hhZG93ZWQKKyAgICAgICAgICAgICAqIENSNC5P U1hTQVZFIGlzIGNsZWFyLiAgVGhpcyBiZWhhdmlvdXIgaGFzIGJlZW4gYWRqdXN0ZWQgaW4gYWxs CisgICAgICAgICAgICAgKiBvYnNlcnZlZCBjYXNlcyB2aWEgc3RhYmxlIGJhY2twb3J0cyBvZiB0 aGUgYWJvdmUgY2hhbmdlc2V0LgorICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqIFRoZXJl Zm9yZSwgdGhlIGxlYWtpbmcgb2YgWGVuJ3MgT1NYU0FWRSBzZXR0aW5nIGhhcyBiZWNvbWUgYQor ICAgICAgICAgICAgICogZGVmYWN0byBwYXJ0IG9mIHRoZSBQViBBQkkgYW5kIGNhbid0IHJlYXNv bmFibHkgYmUgY29ycmVjdGVkLgorICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqIFRoZSBm b2xsb3dpbmcgc2l0dWF0aW9ucyBhbmQgbG9naWMgbm93IGFwcGxpZXM6CisgICAgICAgICAgICAg KgorICAgICAgICAgICAgICogLSBIYXJkd2FyZSB3aXRob3V0IENQVUlEIGZhdWx0aW5nIHN1cHBv cnQgYW5kIG5hdGl2ZSBDUFVJRDoKKyAgICAgICAgICAgICAqICAgIFRoZXJlIGlzIG5vdGhpbmcg WGVuIGNhbiBkbyBoZXJlLiAgVGhlIGhvc3RzIFhTQVZFIGZsYWcgd2lsbAorICAgICAgICAgICAg ICogICAgbGVhayB0aHJvdWdoIGFuZCBYZW4ncyBPU1hTQVZFIGNob2ljZSB3aWxsIGxlYWsgdGhy b3VnaC4KKyAgICAgICAgICAgICAqCisgICAgICAgICAgICAgKiAgICBJbiB0aGUgY2FzZSB0aGF0 IHRoZSBndWVzdCBrZXJuZWwgaGFzIG5vdCBzZXQgdXAgT1NYU0FWRSwgb25seQorICAgICAgICAg ICAgICogICAgU1NFIHdpbGwgYmUgc2V0IGluIHhjcjAsIGFuZCBndWVzdCB1c2Vyc3BhY2UgY2Fu J3QgZG8gdG9vIG11Y2gKKyAgICAgICAgICAgICAqICAgIGRhbWFnZSBpdHNlbGYuCisgICAgICAg ICAgICAgKgorICAgICAgICAgICAgICogLSBFbmxpZ2h0ZW5lZCBDUFVJRCBvciBDUFVJRCBmYXVs dGluZyBhdmFpbGFibGU6CisgICAgICAgICAgICAgKiAgICBYZW4gY2FuIGZ1bGx5IGNvbnRyb2wg d2hhdCBpcyBzZWVuIGhlcmUuICBHdWVzdCBrZXJuZWxzIG5lZWQKKyAgICAgICAgICAgICAqICAg IHRvIHNlZSB0aGUgbGVha2VkIE9TWFNBVkUsIGJ1dCBndWVzdCB1c2Vyc3BhY2UgaXMgZ2l2ZW4K KyAgICAgICAgICAgICAqICAgIGFyY2hpdGVjdHVyYWwgYmVoYXZpb3VyLCB0byByZWZsZWN0IHRo ZSBndWVzdCBrZXJuZWxzCisgICAgICAgICAgICAgKiAgICBpbnRlbnRpb25zLgorICAgICAgICAg ICAgICovCisgICAgICAgICAgICAvKiBPU1hTQVZFIGNsZWFyZWQgYnkgcHZfZmVhdHVyZXNldC4g IEZhc3QtZm9yd2FyZCBDUjQgYmFjayBpbi4gKi8KKyAgICAgICAgICAgIGlmICggKGd1ZXN0X2tl cm5lbF9tb2RlKGN1cnIsIHJlZ3MpICYmCisgICAgICAgICAgICAgICAgICAocmVhZF9jcjQoKSAm IFg4Nl9DUjRfT1NYU0FWRSkpIHx8CisgICAgICAgICAgICAgICAgIChjdXJyLT5hcmNoLnB2X3Zj cHUuY3RybHJlZ1s0XSAmIFg4Nl9DUjRfT1NYU0FWRSkgKQorICAgICAgICAgICAgICAgIGMgfD0g Y3B1ZmVhdF9tYXNrKFg4Nl9GRUFUVVJFX09TWFNBVkUpOworCisgICAgICAgICAgICAvKgorICAg ICAgICAgICAgICogQXQgdGhlIHRpbWUgb2Ygd3JpdGluZywgYSBQViBkb21haW4gaXMgdGhlIG9u bHkgdmlhYmxlIG9wdGlvbgorICAgICAgICAgICAgICogZm9yIERvbTAuICBTZXZlcmFsIGludGVy YWN0aW9ucyBiZXR3ZWVuIGRvbTAgYW5kIFhlbiBmb3IgcmVhbAorICAgICAgICAgICAgICogaGFy ZHdhcmUgc2V0dXAgaGF2ZSB1bmZvcnR1bmF0ZWx5IGJlZW4gaW1wbGVtZW50ZWQgYmFzZWQgb24K KyAgICAgICAgICAgICAqIHN0YXRlIHdoaWNoIGluY29ycmVjdGx5IGxlYWtlZCBpbnRvIGRvbTAu CisgICAgICAgICAgICAgKgorICAgICAgICAgICAgICogVGhlc2UgbGVha3MgYXJlIHJldGFpbmVk IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgYnV0CisgICAgICAgICAgICAgKiByZXN0cmlj dGVkIHRvIHRoZSBoYXJkd2FyZSBkb21haW5zIGtlcm5lbCBvbmx5LgorICAgICAgICAgICAgICov CisgICAgICAgICAgICBpZiAoIGlzX2hhcmR3YXJlX2RvbWFpbihjdXJyZCkgJiYgZ3Vlc3Rfa2Vy bmVsX21vZGUoY3VyciwgcmVncykgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8q CisgICAgICAgICAgICAgICAgICogTVRSUiB1c2VkIHRvIHVuY29uZGl0aW9uYWxseSBsZWFrIGlu dG8gUFYgZ3Vlc3RzLiAgVGhleQorICAgICAgICAgICAgICAgICAqIGNhbm5vdCBNVFJSIGluZnJh c3RydWN0dXJlIGF0IGFsbCwgYW5kIHNob3VsZG4ndCBiZSBhYmxlIHRvCisgICAgICAgICAgICAg ICAgICogc2VlIHRoZSBmZWF0dXJlLgorICAgICAgICAgICAgICAgICAqCisgICAgICAgICAgICAg ICAgICogTW9kZXJuIFBWT1BTIExpbnV4IHNlbGYtY2xvYmJlcnMgdGhlIE1UUlIgZmVhdHVyZSwg dG8gYXZvaWQKKyAgICAgICAgICAgICAgICAgKiB0cnlpbmcgdG8gdXNlIHRoZSBhc3NvY2lhdGVk IE1TUnMuICBYZW5vbGludXgtYmFzZWQgUFYgZG9tMCdzCisgICAgICAgICAgICAgICAgICogaG93 ZXZlciB1c2UgdGhlIE1UUlIgZmVhdHVyZSBhcyBhbiBpbmRpY2F0aW9uIG9mIHRoZSBwcmVzZW5j ZQorICAgICAgICAgICAgICAgICAqIG9mIHRoZSBYRU5QRl97YWRkLGRlbCxyZWFkfV9tZW10eXBl IGh5cGVyY2FsbHMuCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgaWYgKCBj cHVfaGFzX210cnIgKQorICAgICAgICAgICAgICAgICAgICBkIHw9IGNwdWZlYXRfbWFzayhYODZf RkVBVFVSRV9NVFJSKTsKKworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICog TU9OSVRPUiBuZXZlciBsZWFrZWQgaW50byBQViBndWVzdHMsIGFzIFBWIGd1ZXN0cyBjYW5ub3QK KyAgICAgICAgICAgICAgICAgKiB1c2UgdGhlIE1PTklUT1IvTVdBSVQgaW5zdHJ1Y3Rpb25zLiAg QXMgc3VjaCwgdGhleSByZXF1aXJlCisgICAgICAgICAgICAgICAgICogdGhlIGZlYXR1cmUgdG8g bm90IGJlaW5nIHByZXNlbnQgaW4gZW11bGF0ZWQgQ1BVSUQuCisgICAgICAgICAgICAgICAgICoK KyAgICAgICAgICAgICAgICAgKiBNb2Rlcm4gUFZPUFMgTGludXggdHJ5IHRvIGJlIGN1bm5pbmcg YW5kIHVzZSBuYXRpdmUgQ1BVSUQKKyAgICAgICAgICAgICAgICAgKiB0byBzZWUgaWYgdGhlIGhh cmR3YXJlIGFjdHVhbGx5IHN1cHBvcnRzIE1PTklUT1IsIGFuZCBieQorICAgICAgICAgICAgICAg ICAqIGV4dGVuc2lvbiwgZGVlcCBDIHN0YXRlcy4KKyAgICAgICAgICAgICAgICAgKgorICAgICAg ICAgICAgICAgICAqIElmIHRoZSBmZWF0dXJlIGlzIHNlZW4sIGRlZXAtQyBzdGF0ZSBpbmZvcm1h dGlvbiBpcworICAgICAgICAgICAgICAgICAqIG9idGFpbmVkIGZyb20gdGhlIERTRFQgYW5kIGhh bmRlZCBiYWNrIHRvIFhlbiB2aWEgdGhlCisgICAgICAgICAgICAgICAgICogWEVOUEZfc2V0X3By b2Nlc3Nvcl9wbWluZm8gaHlwZXJjYWxsLgorICAgICAgICAgICAgICAgICAqCisgICAgICAgICAg ICAgICAgICogVGhpcyBtZWNoYW5pc20gaXMgaW5jb21wYXRpYmxlIHdpdGggYW4gSFZNLWJhc2Vk IGhhcmR3YXJlCisgICAgICAgICAgICAgICAgICogZG9tYWluLCBhbmQgYWxzbyB3aXRoIENQVUlE IEZhdWx0aW5nLgorICAgICAgICAgICAgICAgICAqCisgICAgICAgICAgICAgICAgICogTHVja2ls eSwgWGVuIGNhbiBiZSBqdXN0IGFzICdjdW5uaW5nJywgYW5kIGRpc3Rpbmd1aXNoIGFuCisgICAg ICAgICAgICAgICAgICogZW11bGF0ZWQgQ1BVSUQgZnJvbSBhIGZhdWx0ZWQgQ1BVSUQgYnkgd2hl dGhlciBhICNVRCBvciAjR1AKKyAgICAgICAgICAgICAgICAgKiBmYXVsdCBpcyBjdXJyZW50bHkg YmVpbmcgc2VydmljZWQuICBZdWNrLi4uCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAg ICAgICAgaWYgKCBjcHVfaGFzX21vbml0b3IgJiYgcmVncy0+ZW50cnlfdmVjdG9yID09IFRSQVBf Z3BfZmF1bHQgKQorICAgICAgICAgICAgICAgICAgICBjIHw9IGNwdWZlYXRfbWFzayhYODZfRkVB VFVSRV9NT05JVE9SKTsKKworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICog V2hpbGUgTU9OSVRPUiBuZXZlciBsZWFrZWQgaW50byBQViBndWVzdHMsIEVJU1QgYWx3YXlzIHVz ZWQKKyAgICAgICAgICAgICAgICAgKiB0by4KKyAgICAgICAgICAgICAgICAgKgorICAgICAgICAg ICAgICAgICAqIE1vZGVybiBQVk9QUyB3aWxsIG9ubHkgcGFyc2UgUCBzdGF0ZSBpbmZvcm1hdGlv biBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAqIERTRFQgYW5kIHJldHVybiBpdCB0byBYZW4g aWYgRUlTVCBpcyBzZWVuIGluIHRoZSBlbXVsYXRlZAorICAgICAgICAgICAgICAgICAqIENQVUlE IGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGlmICgg Y3B1X2hhc19laXN0ICkKKyAgICAgICAgICAgICAgICAgICAgYyB8PSBjcHVmZWF0X21hc2soWDg2 X0ZFQVRVUkVfRUlTVCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCAh Y3B1X2hhc19hcGljICkKLSAgICAgICAgICAgX19jbGVhcl9iaXQoWDg2X0ZFQVRVUkVfWDJBUElD ICUgMzIsICZjKTsKLSAgICAgICAgX19zZXRfYml0KFg4Nl9GRUFUVVJFX0hZUEVSVklTT1IgJSAz MiwgJmMpOworCisgICAgICAgIGMgfD0gY3B1ZmVhdF9tYXNrKFg4Nl9GRUFUVVJFX0hZUEVSVklT T1IpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgMHgwMDAwMDAwNzoKICAgICAgICAgaWYg KCBzdWJsZWFmID09IDAgKQotICAgICAgICAgICAgYiAmPSAoY3B1ZmVhdF9tYXNrKFg4Nl9GRUFU VVJFX0JNSTEpIHwKLSAgICAgICAgICAgICAgICAgIGNwdWZlYXRfbWFzayhYODZfRkVBVFVSRV9I TEUpICB8Ci0gICAgICAgICAgICAgICAgICBjcHVmZWF0X21hc2soWDg2X0ZFQVRVUkVfQVZYMikg fAotICAgICAgICAgICAgICAgICAgY3B1ZmVhdF9tYXNrKFg4Nl9GRUFUVVJFX0JNSTIpIHwKLSAg ICAgICAgICAgICAgICAgIGNwdWZlYXRfbWFzayhYODZfRkVBVFVSRV9FUk1TKSB8Ci0gICAgICAg ICAgICAgICAgICBjcHVmZWF0X21hc2soWDg2X0ZFQVRVUkVfUlRNKSAgfAotICAgICAgICAgICAg ICAgICAgY3B1ZmVhdF9tYXNrKFg4Nl9GRUFUVVJFX1JEU0VFRCkgIHwKLSAgICAgICAgICAgICAg ICAgIGNwdWZlYXRfbWFzayhYODZfRkVBVFVSRV9BRFgpICB8Ci0gICAgICAgICAgICAgICAgICBj cHVmZWF0X21hc2soWDg2X0ZFQVRVUkVfRlNHU0JBU0UpKTsKKyAgICAgICAgeworICAgICAgICAg ICAgLyogRm9sZCBob3N0J3MgRkRQX0VYQ1BfT05MWSBhbmQgTk9fRlBVX1NFTCBpbnRvIGd1ZXN0 J3Mgdmlldy4gKi8KKyAgICAgICAgICAgIGIgJj0gKHB2X2ZlYXR1cmVzZXRbRkVBVFVSRVNFVF83 YjBdICYKKyAgICAgICAgICAgICAgICAgIH5zcGVjaWFsX2ZlYXR1cmVzW0ZFQVRVUkVTRVRfN2Iw XSk7CisgICAgICAgICAgICBiIHw9IChob3N0X2ZlYXR1cmVzZXRbRkVBVFVSRVNFVF83YjBdICYK KyAgICAgICAgICAgICAgICAgIHNwZWNpYWxfZmVhdHVyZXNbRkVBVFVSRVNFVF83YjBdKTsKKwor ICAgICAgICAgICAgYyAmPSBwdl9mZWF0dXJlc2V0W0ZFQVRVUkVTRVRfN2MwXTsKKworICAgICAg ICAgICAgaWYgKCAhaXNfcHZoX2RvbWFpbihjdXJyZCkgKQorICAgICAgICAgICAgeworICAgICAg ICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogRGVsZXRlIHRoZSBQVkggY29uZGl0aW9u IHdoZW4gSFZNTGl0ZSBmb3JtYWxseSByZXBsYWNlcyBQVkgsCisgICAgICAgICAgICAgICAgICog YW5kIEhWTSBndWVzdHMgbm8gbG9uZ2VyIGVudGVyIGEgUFYgY29kZXBhdGguCisgICAgICAgICAg ICAgICAgICovCisKKyAgICAgICAgICAgICAgICAvKiBPU1BLRSBjbGVhcmVkIGJ5IHB2X2ZlYXR1 cmVzZXQuICBGYXN0LWZvcndhcmQgQ1I0IGJhY2sgaW4uICovCisgICAgICAgICAgICAgICAgaWYg KCBjdXJyLT5hcmNoLnB2X3ZjcHUuY3RybHJlZ1s0XSAmIFg4Nl9DUjRfUEtFICkKKyAgICAgICAg ICAgICAgICAgICAgYyB8PSBjcHVmZWF0X21hc2soWDg2X0ZFQVRVUkVfT1NQS0UpOworICAgICAg ICAgICAgfQorICAgICAgICB9CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGIgPSAwOwotICAg ICAgICBhID0gYyA9IGQgPSAwOworICAgICAgICAgICAgYiA9IGMgPSAwOworICAgICAgICBhID0g ZCA9IDA7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBYU1RBVEVfQ1BVSUQ6CkBAIC0xMDE3 LDM3ICsxMTExLDQ5IEBAIHZvaWQgcHZfY3B1aWQoc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3Mp CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICBhICY9IChib290X2Nw dV9kYXRhLng4Nl9jYXBhYmlsaXR5W2NwdWZlYXRfd29yZChYODZfRkVBVFVSRV9YU0FWRU9QVCld ICYKLSAgICAgICAgICAgICAgICAgIH5jcHVmZWF0X21hc2soWDg2X0ZFQVRVUkVfWFNBVkVTKSk7 CisgICAgICAgICAgICBhICY9IHB2X2ZlYXR1cmVzZXRbRkVBVFVSRVNFVF9EYTFdOwogICAgICAg ICAgICAgYiA9IGMgPSBkID0gMDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg ICAgIGJyZWFrOwogCiAgICAgY2FzZSAweDgwMDAwMDAxOgotICAgICAgICAvKiBNb2RpZnkgRmVh dHVyZSBJbmZvcm1hdGlvbi4gKi8KKyAgICAgICAgYyAmPSBwdl9mZWF0dXJlc2V0W0ZFQVRVUkVT RVRfZTFjXTsKKyAgICAgICAgZCAmPSBwdl9mZWF0dXJlc2V0W0ZFQVRVUkVTRVRfZTFkXTsKKwor ICAgICAgICAvKiBJZiBub3QgZW11bGF0aW5nIEFNRCwgY2xlYXIgdGhlIGR1cGxpY2F0ZWQgZmVh dHVyZXMgaW4gZTFkLiAqLworICAgICAgICBpZiAoIGN1cnJkLT5hcmNoLng4Nl92ZW5kb3IgIT0g WDg2X1ZFTkRPUl9BTUQgKQorICAgICAgICAgICAgZCAmPSB+Q1BVSURfQ09NTU9OXzFEX0ZFQVRV UkVTOworCisgICAgICAgIC8qCisgICAgICAgICAqIE1UUlIgdXNlZCB0byB1bmNvbmRpdGlvbmFs bHkgbGVhayBpbnRvIFBWIGd1ZXN0cy4gIFRoZXkgY2Fubm90IE1UUlIKKyAgICAgICAgICogaW5m cmFzdHJ1Y3R1cmUgYXQgYWxsLCBhbmQgc2hvdWxkbid0IGJlIGFibGUgdG8gc2VlIHRoZSBmZWF0 dXJlLgorICAgICAgICAgKgorICAgICAgICAgKiBNb2Rlcm4gUFZPUFMgTGludXggc2VsZi1jbG9i YmVycyB0aGUgTVRSUiBmZWF0dXJlLCB0byBhdm9pZCB0cnlpbmcKKyAgICAgICAgICogdG8gdXNl IHRoZSBhc3NvY2lhdGVkIE1TUnMuICBYZW5vbGludXgtYmFzZWQgUFYgZG9tMCdzIGhvd2V2ZXIg dXNlCisgICAgICAgICAqIHRoZSBNVFJSIGZlYXR1cmUgYXMgYW4gaW5kaWNhdGlvbiBvZiB0aGUg cHJlc2VuY2Ugb2YgdGhlCisgICAgICAgICAqIFhFTlBGX3thZGQsZGVsLHJlYWR9X21lbXR5cGUg aHlwZXJjYWxscy4KKyAgICAgICAgICovCisgICAgICAgIGlmICggaXNfaGFyZHdhcmVfZG9tYWlu KGN1cnJkKSAmJiBndWVzdF9rZXJuZWxfbW9kZShjdXJyLCByZWdzKSAmJgorICAgICAgICAgICAg IGNwdV9oYXNfbXRyciApCisgICAgICAgICAgICBkIHw9IGNwdWZlYXRfbWFzayhYODZfRkVBVFVS RV9NVFJSKTsKKwogICAgICAgICBpZiAoIGlzX3B2XzMyYml0X2RvbWFpbihjdXJyZCkgKQogICAg ICAgICB7Ci0gICAgICAgICAgICBfX2NsZWFyX2JpdChYODZfRkVBVFVSRV9MTSAlIDMyLCAmZCk7 Ci0gICAgICAgICAgICBfX2NsZWFyX2JpdChYODZfRkVBVFVSRV9MQUhGX0xNICUgMzIsICZjKTsK KyAgICAgICAgICAgIGQgJj0gfmNwdWZlYXRfbWFzayhYODZfRkVBVFVSRV9MTSk7CisgICAgICAg ICAgICBjICY9IH5jcHVmZWF0X21hc2soWDg2X0ZFQVRVUkVfTEFIRl9MTSk7CisKKyAgICAgICAg ICAgIGlmICggYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfQU1EICkKKyAg ICAgICAgICAgICAgICBkICY9IH5jcHVmZWF0X21hc2soWDg2X0ZFQVRVUkVfU1lTQ0FMTCk7CiAg ICAgICAgIH0KLSAgICAgICAgaWYgKCBpc19wdl8zMmJpdF9kb21haW4oY3VycmQpICYmCi0gICAg ICAgICAgICAgYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfQU1EICkKLSAg ICAgICAgICAgIF9fY2xlYXJfYml0KFg4Nl9GRUFUVVJFX1NZU0NBTEwgJSAzMiwgJmQpOwotICAg ICAgICBfX2NsZWFyX2JpdChYODZfRkVBVFVSRV9QQUdFMUdCICUgMzIsICZkKTsKLSAgICAgICAg X19jbGVhcl9iaXQoWDg2X0ZFQVRVUkVfUkRUU0NQICUgMzIsICZkKTsKLQotICAgICAgICBfX2Ns ZWFyX2JpdChYODZfRkVBVFVSRV9TVk0gJSAzMiwgJmMpOwotICAgICAgICBpZiAoICFjcHVfaGFz X2FwaWMgKQotICAgICAgICAgICBfX2NsZWFyX2JpdChYODZfRkVBVFVSRV9FWFRBUElDICUgMzIs ICZjKTsKLSAgICAgICAgX19jbGVhcl9iaXQoWDg2X0ZFQVRVUkVfT1NWVyAlIDMyLCAmYyk7Ci0g ICAgICAgIF9fY2xlYXJfYml0KFg4Nl9GRUFUVVJFX0lCUyAlIDMyLCAmYyk7Ci0gICAgICAgIF9f Y2xlYXJfYml0KFg4Nl9GRUFUVVJFX1NLSU5JVCAlIDMyLCAmYyk7Ci0gICAgICAgIF9fY2xlYXJf Yml0KFg4Nl9GRUFUVVJFX1dEVCAlIDMyLCAmYyk7Ci0gICAgICAgIF9fY2xlYXJfYml0KFg4Nl9G RUFUVVJFX0xXUCAlIDMyLCAmYyk7Ci0gICAgICAgIF9fY2xlYXJfYml0KFg4Nl9GRUFUVVJFX05P REVJRF9NU1IgJSAzMiwgJmMpOwotICAgICAgICBfX2NsZWFyX2JpdChYODZfRkVBVFVSRV9UT1BP RVhUICUgMzIsICZjKTsKLSAgICAgICAgX19jbGVhcl9iaXQoWDg2X0ZFQVRVUkVfTU9OSVRPUlgg JSAzMiwgJmMpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgMHg4MDAwMDAwNzoKKyAgICAg ICAgZCAmPSBwdl9mZWF0dXJlc2V0W0ZFQVRVUkVTRVRfZTdkXTsKKyAgICAgICAgYnJlYWs7CisK KyAgICBjYXNlIDB4ODAwMDAwMDg6CisgICAgICAgIGIgJj0gcHZfZmVhdHVyZXNldFtGRUFUVVJF U0VUX2U4Yl07CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSAweDAwMDAwMDBhOiAvKiBBcmNo aXRlY3R1cmFsIFBlcmZvcm1hbmNlIE1vbml0b3IgRmVhdHVyZXMgKEludGVsKSAqLwpkaWZmIC0t Z2l0IGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9jcHVmZWF0dXJlLmggYi94ZW4vaW5jbHVkZS9hc20t eDg2L2NwdWZlYXR1cmUuaAppbmRleCBlMjliMDI0Li42YTA4NTc5IDEwMDY0NAotLS0gYS94ZW4v aW5jbHVkZS9hc20teDg2L2NwdWZlYXR1cmUuaAorKysgYi94ZW4vaW5jbHVkZS9hc20teDg2L2Nw dWZlYXR1cmUuaApAQCAtODEsNiArODEsOCBAQAogI2RlZmluZSBjcHVfaGFzX3hzYXZlYwkJYm9v dF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1hTQVZFQykKICNkZWZpbmUgY3B1X2hhc194Z2V0YnYxCQli b290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfWEdFVEJWMSkKICNkZWZpbmUgY3B1X2hhc194c2F2ZXMJ CWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9YU0FWRVMpCisjZGVmaW5lIGNwdV9oYXNfbW9uaXRv cgkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX01PTklUT1IpCisjZGVmaW5lIGNwdV9oYXNfZWlz dAkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0VJU1QpCiAKIGVudW0gX2NhY2hlX3R5cGUgewog ICAgIENBQ0hFX1RZUEVfTlVMTCA9IDAsCi0tIAoyLjEuNAoKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRl dmVsQGxpc3RzLnhlbi5vcmcKaHR0cDovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==