From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: Re: [RFC PATCH v2 6/8] arm/mem_access: Add long-descriptor based gpt Date: Fri, 2 Jun 2017 13:55:05 +0100 Message-ID: <2201fe61-d5d8-8568-9e11-2139b5547601@arm.com> References: <20170601151906.10213-1-proskurin@sec.in.tum.de> <20170601151906.10213-7-proskurin@sec.in.tum.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dGm6n-00066Z-5y for xen-devel@lists.xenproject.org; Fri, 02 Jun 2017 12:55:17 +0000 In-Reply-To: <20170601151906.10213-7-proskurin@sec.in.tum.de> Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Sergej Proskurin , xen-devel@lists.xenproject.org Cc: Stefano Stabellini List-Id: xen-devel@lists.xenproject.org SGkgU2VyZ2VqLAoKT24gMDYvMDEvMjAxNyAwNDoxOCBQTSwgU2VyZ2VqIFByb3NrdXJpbiB3cm90 ZToKPiBUaGlzIGNvbW1pdCBhZGRzIGZ1bmN0aW9uYWxpdHkgdG8gd2FsayB0aGUgZ3Vlc3QncyBw YWdlIHRhYmxlcyB1c2luZyB0aGUKPiBsb25nLWRlc2NyaXB0b3IgdHJhbnNsYXRpb24gdGFibGUg Zm9ybWF0IGZvciBib3RoIEFSTXY3IGFuZCBBUk12OC4KPiBTaW1pbGFyIHRvIHRoZSBoYXJkd2Fy ZSBhcmNoaXRlY3R1cmUsIHRoZSBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cwo+IGRpZmZlcmVudCBw YWdlIGdyYW51bGFyaXRpZXMgKDRLLCAxNkssIGFuZCA2NEspLiBUaGUgaW1wbGVtZW50YXRpb24g aXMKPiBiYXNlZCBvbiBBUk0gRERJIDA0ODdBLWcgSjExLTU2MDgsIEoxMS01Njc5LCBhbmQgQVJN IERESSAwNDA2Qy1iCj4gQjMtMTUxMC4KClBsZWFzZSB1c2UgdGhlIG1vc3QgcmVjZW50IEFSTSBB Uk0uCgo+IAo+IE5vdGUgdGhhdCB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBsYWNrcyBzdXBw b3J0IGZvciAzMi1iaXQgRUwwCj4gcnVubmluZyBvbiB0b3Agb2YgNjQtYml0IEVMMS4gVGhlIGFz c29jaWF0ZWQgbG9jYXRpb24gaW4gdGhlIGNvZGUgaXMKPiBtYXJrZWQgYXBwcm9wcmlhdGVseS4K PiAKPiBTaWduZWQtb2ZmLWJ5OiBTZXJnZWogUHJvc2t1cmluIDxwcm9za3VyaW5Ac2VjLmluLnR1 bS5kZT4KPiAtLS0KPiBDYzogU3RlZmFubyBTdGFiZWxsaW5pIDxzc3RhYmVsbGluaUBrZXJuZWwu b3JnPgo+IENjOiBKdWxpZW4gR3JhbGwgPGp1bGllbi5ncmFsbEBhcm0uY29tPgo+IC0tLQo+IHYy OiBVc2UgVENSX1NaX01BU0sgaW5zdGVhZCBvZiBUVEJDUl9TWl9NQVNLIGZvciBBUk0gMzItYml0 IGd1ZXN0cyB1c2luZwo+ICAgICAgdGhlIGxvbmctZGVzY3JpcHRvciB0cmFuc2xhdGlvbiB0YWJs ZSBmb3JtYXQuCj4gCj4gICAgICBDb3NtZXRpYyBmaXhlcy4KPiAtLS0KPiAgIHhlbi9hcmNoL2Fy bS9wMm0uYyB8IDI3MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrLQo+ICAgMSBmaWxlIGNoYW5nZWQsIDI2OSBpbnNlcnRpb25zKCspLCAyIGRlbGV0 aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS94ZW4vYXJjaC9hcm0vcDJtLmMgYi94ZW4vYXJjaC9h cm0vcDJtLmMKPiBpbmRleCAwMzM3ZDgzNTgxLi5lYTNiZTZmMDUwIDEwMDY0NAo+IC0tLSBhL3hl bi9hcmNoL2FybS9wMm0uYwo+ICsrKyBiL3hlbi9hcmNoL2FybS9wMm0uYwo+IEBAIC0xNTczLDgg KzE1NzMsMjc1IEBAIHN0YXRpYyBpbnQgX19wMm1fd2Fsa19ncHRfbGQoc3RydWN0IHAybV9kb21h aW4gKnAybSwKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFkZHJfdCBndmEsIHBh ZGRyX3QgKmlwYSwKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50 ICpwZXJtX3JvKQo+ICAgewo+IC0gICAgLyogTm90IGltcGxlbWVudGVkIHlldC4gKi8KPiAtICAg IHJldHVybiAtRUZBVUxUOwo+ICsgICAgaW50IHQwX3N6LCB0MV9zeiwgZGlzYWJsZWQgPSAxOwoK TG9va2luZyBhdCB0aGUgd2F5IHlvdSB1c2UgdDBfc3ogYW5kIHQxX3N6LCB0aGV5IHdpbGwgbmV2 ZXIgYmUgPCAwIHNvIEkgCnRoaW4gc2hvdWxkIGJlIHVuc2lnbmVkLgoKQWxzbywgSSB0aGluayBk aXNhYmxlZCBpcyBhbHdheXMgMCBvciAxLiBJZiB0aGF0IGlzIHRydWUsIHBsZWFzZSB1c2UgCmJv b2wvdHJ1ZS9mYWxzZS4KCj4gKyAgICB1bnNpZ25lZCBpbnQgbGV2ZWwsIGdyYW47Cj4gKyAgICB1 bnNpZ25lZCBpbnQgdG9wYml0ID0gMCwgaW5wdXRfc2l6ZSA9IDAsIG91dHB1dF9zaXplOwo+ICsg ICAgdWludDY0X3QgdHRiciA9IDAsIGlwczsKPiArICAgIHBhZGRyX3QgbWFzazsKPiArICAgIGxw YWVfdCBwdGUsICp0YWJsZTsKPiArICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2U7Cj4gKyAgICBy ZWdpc3Rlcl90IHRjciA9IFJFQURfU1lTUkVHKFRDUl9FTDEpOwo+ICsgICAgc3RydWN0IGRvbWFp biAqZCA9IHAybS0+ZG9tYWluOwo+ICsKPiArICAgIGNvbnN0IHZhZGRyX3Qgb2Zmc2V0c1s0XVsz XSA9IHsKPiArICAgICAgICB7Cj4gKyNpZmRlZiBDT05GSUdfQVJNXzY0Cj4gKyAgICAgICAgICAg IHplcm9ldGhfZ3Vlc3RfdGFibGVfb2Zmc2V0XzRrKGd2YSksCj4gKyAgICAgICAgICAgIHplcm9l dGhfZ3Vlc3RfdGFibGVfb2Zmc2V0XzE2ayhndmEpLAo+ICsgICAgICAgICAgICAwLCAvKiBUaGVy ZSBpcyBubyB6ZXJvZXRoIGxvb2t1cCBsZXZlbCB3aXRoIGEgNjRLIGdyYW51bGUgc2l6ZS4gKi8K PiArI2VuZGlmCj4gKyAgICAgICAgfSwKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAgIGZpcnN0 X2d1ZXN0X3RhYmxlX29mZnNldF80ayhndmEpLAo+ICsjaWZkZWYgQ09ORklHX0FSTV82NAo+ICsg ICAgICAgICAgICBmaXJzdF9ndWVzdF90YWJsZV9vZmZzZXRfMTZrKGd2YSksCj4gKyAgICAgICAg ICAgIGZpcnN0X2d1ZXN0X3RhYmxlX29mZnNldF82NGsoZ3ZhKSwKPiArI2VuZGlmCj4gKyAgICAg ICAgfSwKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAgIHNlY29uZF9ndWVzdF90YWJsZV9vZmZz ZXRfNGsoZ3ZhKSwKPiArI2lmZGVmIENPTkZJR19BUk1fNjQKPiArICAgICAgICAgICAgc2Vjb25k X2d1ZXN0X3RhYmxlX29mZnNldF8xNmsoZ3ZhKSwKPiArICAgICAgICAgICAgc2Vjb25kX2d1ZXN0 X3RhYmxlX29mZnNldF82NGsoZ3ZhKSwKPiArI2VuZGlmCj4gKyAgICAgICAgfSwKPiArICAgICAg ICB7Cj4gKyAgICAgICAgICAgIHRoaXJkX2d1ZXN0X3RhYmxlX29mZnNldF80ayhndmEpLAo+ICsj aWZkZWYgQ09ORklHX0FSTV82NAo+ICsgICAgICAgICAgICB0aGlyZF9ndWVzdF90YWJsZV9vZmZz ZXRfMTZrKGd2YSksCj4gKyAgICAgICAgICAgIHRoaXJkX2d1ZXN0X3RhYmxlX29mZnNldF82NGso Z3ZhKSwKPiArI2VuZGlmCj4gKyAgICAgICAgfQo+ICsgICAgfTsKPiArCj4gKyAgICBjb25zdCBw YWRkcl90IG1hc2tzWzRdWzNdID0gewo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAgWkVST0VU SF9TSVpFXzRLIC0gMSwKPiArICAgICAgICAgICAgWkVST0VUSF9TSVpFXzE2SyAtIDEsCj4gKyAg ICAgICAgICAgIDAgLyogVGhlcmUgaXMgbm8gemVyb2V0aCBsb29rdXAgbGV2ZWwgd2l0aCBhIDY0 SyBncmFudWxlIHNpemUuICovCj4gKyAgICAgICAgfSwKPiArICAgICAgICB7Cj4gKyAgICAgICAg ICAgIEZJUlNUX1NJWkVfNEsgLSAxLAo+ICsgICAgICAgICAgICBGSVJTVF9TSVpFXzE2SyAtIDEs Cj4gKyAgICAgICAgICAgIEZJUlNUX1NJWkVfNjRLIC0gMQo+ICsgICAgICAgIH0sCj4gKyAgICAg ICAgewo+ICsgICAgICAgICAgICBTRUNPTkRfU0laRV80SyAtIDEsCj4gKyAgICAgICAgICAgIFNF Q09ORF9TSVpFXzE2SyAtIDEsCj4gKyAgICAgICAgICAgIFNFQ09ORF9TSVpFXzY0SyAtIDEKPiAr ICAgICAgICB9LAo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAgVEhJUkRfU0laRV80SyAtIDEs Cj4gKyAgICAgICAgICAgIFRISVJEX1NJWkVfMTZLIC0gMSwKPiArICAgICAgICAgICAgVEhJUkRf U0laRV82NEsgLSAxCj4gKyAgICAgICAgfQo+ICsgICAgfTsKClBsZWFzZSBkZWZpbmUgdGhlbSBh cyBzdGF0aWMuIEl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gaGF2ZSB0aGVtIG9uIHRoZSAKc3RhY2sg ZXZlcnl0aW1lLgoKPiArCj4gKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZ3JhaW5zaXplc1szXSA9 IHsKPiArICAgICAgICBQQUdFX1NISUZUXzRLLAo+ICsgICAgICAgIFBBR0VfU0hJRlRfMTZLLAo+ ICsgICAgICAgIFBBR0VfU0hJRlRfNjRLID4gKyAgICB9OwoKRGl0dG8uCgo+ICsKPiArICAgIGNv bnN0IHVuc2lnbmVkIGludCBzdHJpZGVzWzNdID0gewo+ICsgICAgICAgIExQQUVfU0hJRlRfNEss Cj4gKyAgICAgICAgTFBBRV9TSElGVF8xNkssCj4gKyAgICAgICAgTFBBRV9TSElGVF82NEsKPiAr ICAgIH07CgpEaXR0by4gQWxzbywgdGhlIHN0cmlkZSBjYW4gYmUgZm91bmQgZnJvbSB0aGUgcGFn ZSBzaGlmdC4gU28gSSBhbSBub3QgCmNvbnZpbmNlZCB5b3UgbmVlZCB0aGF0LgoKPiArCj4gKyAg ICB0MF9zeiA9ICh0Y3IgPj4gVENSX1QwU1pfU0hJRlQpICYgVENSX1NaX01BU0s7Cj4gKyAgICB0 MV9zeiA9ICh0Y3IgPj4gVENSX1QxU1pfU0hJRlQpICYgVENSX1NaX01BU0s7Cj4gKwo+ICsgICAg LyoKPiArICAgICAqIEdldCB0aGUgTVNCIG51bWJlciBvZiB0aGUgZ3ZhLCBhY2NvcmRpbmcgdG8g IkFkZHJUb3AiIHBzZXVkb2NvZGUKClRoYXQncyBhIGNhbGwgdG8gaGF2ZSBhIHNlcGFyYXRlIGhl bHBlciBmb3IgQWRkclRvcCByYXRoZXIgdGhhbiAKb3Blbi1jb2RpbmcgaW4gdGhpcyBmdW5jdGlv bi4KCkkgdGhpbmsgdGhpcyBmdW5jdGlvbiBjb3VsZCBiZSBzcGxpdCBpbiBtdWx0aXBsZSBwYXJ0 LCBtYWtpbmcgZWFzaWVyIHRoZSAKcmV2aWV3LiBGb3IgaW5zdGFuY2UsIHlvdSBoYXZlIGEgbG90 IG9mICJpZiBpc18qYml0X2RvbWFpbiIuCgo+ICsgICAgICogaW1wbGVtZW50YXRpb24gaW4gQVJN IERESSAwNDg3QS1nIEoxMS01NzM5Lgo+ICsgICAgICoKPiArICAgICAqIFhYWDogV2UgZG8gbm90 IGNoZWNrIHdoZXRoZXIgdGhlIDY0Yml0IGRvbWFpbiB1c2VzIGEgMzItYml0IEVMMC4gSW4gdGhp cwo+ICsgICAgICogY2FzZSwgd2UgbmVlZCB0byBzZXQgdG9wYml0IHRvIDMxLCBhcyB3ZWxsLgpJ IHRoaW5rIGNoZWNraW5nIDMyLWJpdCBFTDAgaXMgc3RyYWlnaC1mb3J3YXJkIGVub3VnaCB0byBn ZXQgaXQgZG9uZSAKbm93LiBIYXZlIGEgbG9vayBhdCBwc3JfbW9zdF9pc18zMmJpdC4KCj4gKyAg ICAgKi8KPiArICAgIGlmICggaXNfMzJiaXRfZG9tYWluKGQpICkKPiArICAgICAgICB0b3BiaXQg PSBUQ1JfVEJfMzE7Cj4gKyNpZmRlZiBDT05GSUdfQVJNXzY0Cj4gKyAgICBlbHNlIGlmICggaXNf NjRiaXRfZG9tYWluKGQpICkKPiArICAgIHsKPiArICAgICAgICBpZiAoICgoZ3ZhICYgKDFVTCA8 PCBUQ1JfVEJfNTUpKSAmJiAodGNyICYgVENSX1RCSTEpKSB8fAoKUGxlYXNlIHVzZSBCSVQoLi4u KSBpbnN0ZWFkIG9mICgxVUwgPDwgLi4uKS4KCj4gKyAgICAgICAgICAgICAoIShndmEgJiAoMVVM IDw8IFRDUl9UQl81NSkpICYmICh0Y3IgJiBUQ1JfVEJJMCkpICkKCkRpdHRvLgoKPiArICAgICAg ICAgICAgdG9wYml0ID0gVENSX1RCXzU1OwoKVGhpcyBpcyByZWFsbHkgY29uZnVzaW5nLiBZb3Ug ZGVmaW5lIFRDUl9UQl8qIHRvICogYnV0IGl0IGlzIG5vdCBldmVuIApwYXJ0IG9mIHRoZSByZWdp c3RlciBUQ1JfLiBUQkgsIEkgZG9uJ3QgdGhpbmsgdGhleSBoZW5jZSB0aGUgY29kZSBhbmQgCndv dWxkIGp1c3QgaGFyZGNvZGVkIHRoZSA1NSBoZXJlLiBBZnRlcmFsbCBpdCBpcyBpbiB0aGUgbmFt ZSA6KS4KCj4gKyAgICAgICAgZWxzZQo+ICsgICAgICAgICAgICB0b3BiaXQgPSBUQ1JfVEJfNjMK CkRpdHRvLgoKPiArICAgIH0KPiArI2VuZGlmCj4gKwo+ICsjaWZkZWYgQ09ORklHX0FSTV82NAo+ ICsgICAgaWYgKCBpc182NGJpdF9kb21haW4oZCkgKQo+ICsgICAgewoKTGlrZWx5IGEgY29tbWVu dCBpcyBtaXNzaW5nIGhlcmUgdG8gZXhwbGFpbiB3aGF0IHlvdSBhcmUgZG9pbmcgYmVsb3cuIE15 IAp1bmRlcnN0YW5kIGlzIHlvdSBhcmUgc2VsZWN0aW5nIFRUQlIqX0VMMS4gQW5kIGxvb2tpbmcg YXQgdGhlIGNvZGUsIHRoaXMgCmNvdWxkIGJlIGFic3RyYWN0ZWQgYXMgYm90aCBicmFuY2hlcyBh cmUgbmVhcmx5IHRoZSBzYW1lLgoKPiArICAgICAgICBpZiAoIChndmEgJiAoMVVMIDw8IHRvcGJp dCkpID09IDAgKQoKQklUKC4uLikKCj4gKyAgICAgICAgewo+ICsgICAgICAgICAgICBpbnB1dF9z aXplID0gUkVHSVNURVJfV0lEVEhfNjRfQklUIC0gdDBfc3o7Cj4gKwo+ICsgICAgICAgICAgICBp ZiAoIGlucHV0X3NpemUgPiBJUFNfTUFYICkKPiArICAgICAgICAgICAgICAgIC8qIFdlIGxpbWl0 IHRoZSBpbnB1dF9zaXplIHRvIGJlIG1heCA0OCBiaXQuICovCj4gKyAgICAgICAgICAgICAgICBp bnB1dF9zaXplID0gSVBTX01BWDsKPiArICAgICAgICAgICAgZWxzZSBpZiAoIGlucHV0X3NpemUg PCBJUFNfTUlOICkKPiArICAgICAgICAgICAgICAgIC8qIFdlIGxpbWl0IHRoZSBpbnB1dF9zaXpl IHRvIGJlIG1heCAyNSBiaXQuICovCj4gKyAgICAgICAgICAgICAgICBpbnB1dF9zaXplID0gSVBT X01JTjsKCmxpa2UgdGhpcyBjb3VsZCBiZSBzaW1wbGlmaWVkIGJ5IHVzaW5nIG1pbi9tYXguIEJ1 dCBJIHRoaW5rIHdlIHNob3VsZCAKYmFpbCBvdXQgaGVyZS4gTGlrZWx5IHNvbWV0aGluZyBpbiB0 aGUgcGFnZSB0YWJsZSBpcyB3cm9uZyBhbmQgaWdub3JpbmcgCmlzIHRoZSB3b3JzdCB0aGluZyB0 byBkby4KCkZvciBpbnN0YW5jZSBBUk12OC4yIGhhcyBleHRlbmRlZCB0aGUgaW5wdXQgc2l6ZSB0 byA1MiBiaXRzLiBJdCB3b3VsZCBiZSAKZGlmZmljdWx0IHRvIGNhdGNoIHdoYXQgaXMgbWlzc2lu ZyBiZWNhdXNlIG9mIHRoYXQsIG5vdCBtZW50aW9uaW5nIHRoYXQgCnRoZSBvbmx5IGNhbGxlciB0 b2RheSB3aWxsIGJlIG1lbWFjY2VzcyB0aGF0IGlzIG5vdCBlbmFibGVkIGJ5IGRlZmF1bHQuCgo+ ICsKPiArICAgICAgICAgICAgLyogTm9ybWFsaXplIGdyYW51bGUgc2l6ZS4gKi8KCkkgdGhpbmsg MCwgMSwgMiBpcyBtb3JlIGNvbmZ1c2luZyB0byByZWFkLiBJdCB3b3VsZCBiZSBiZXR0ZXIgdG8g dXNlIApkaXJlY3RseSBUQ1JfVEcwXyouCgo+ICsgICAgICAgICAgICBzd2l0Y2ggKCB0Y3IgJiBU Q1JfVEcwX01BU0sgKSB7CgpDb2Rpbmcgc3R5bGUsIHRoZSBicmFjZSBzaG91bGQgYmUgb24gYSBu ZXdsaW5lLgoKPiArICAgICAgICAgICAgY2FzZSBUQ1JfVEcwXzE2SzoKPiArICAgICAgICAgICAg ICAgIGdyYW4gPSAxOwo+ICsgICAgICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgICAgIGNh c2UgVENSX1RHMF82NEs6Cj4gKyAgICAgICAgICAgICAgICBncmFuID0gMjsKPiArICAgICAgICAg ICAgICAgIGJyZWFrOwo+ICsgICAgICAgICAgICBkZWZhdWx0Ogo+ICsgICAgICAgICAgICAgICAg Z3JhbiA9IDA7Cj4gKyAgICAgICAgICAgIH0gPiArCj4gKyAgICAgICAgICAgIC8qIFVzZSBUVEJS MCBmb3IgR1ZBIHRvIElQQSB0cmFuc2xhdGlvbi4gKi8KPiArICAgICAgICAgICAgdHRiciA9IFJF QURfU1lTUkVHNjQoVFRCUjBfRUwxKTsKPiArCj4gKyAgICAgICAgICAgIC8qIElmIFRDUi5FUEQw IGlzIHNldCwgdHJhbnNsYXRpb25zIHVzaW5nIFRUQlIwIGFyZSBkaXNhYmxlZC4gKi8KPiArICAg ICAgICAgICAgZGlzYWJsZWQgPSAoIHRjciAmIFRDUl9FUEQwICkgPyAxIDogMDsKCmRpc2FibGVk ID0gISEodGNyICYgVENSX0VQRDApOwoKb3IgaWYgeW91IGFyZSB1c2luZyBib29sIGFzIHJlcXVl c3RlZCBhYm92ZToKCmRpc2FibGVkID0gIHRjciAmIFRDUl9FUEQwOwoKPiArICAgICAgICB9Cj4g KyAgICAgICAgZWxzZQo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAgaW5wdXRfc2l6ZSA9IFJF R0lTVEVSX1dJRFRIXzY0X0JJVCAtIHQxX3N6Owo+ICsKPiArICAgICAgICAgICAgaWYgKCBpbnB1 dF9zaXplID4gSVBTX01BWCApCj4gKyAgICAgICAgICAgICAgICAvKiBXZSBsaW1pdCB0aGUgaW5w dXRfc2l6ZSB0byBiZSBtYXggNDggYml0LiAqLwo+ICsgICAgICAgICAgICAgICAgaW5wdXRfc2l6 ZSA9IElQU19NQVg7Cj4gKyAgICAgICAgICAgIGVsc2UgaWYgKCBpbnB1dF9zaXplIDwgSVBTX01J TiApCj4gKyAgICAgICAgICAgICAgICAvKiBXZSBsaW1pdCB0aGUgaW5wdXRfc2l6ZSB0byBiZSBt YXggMjUgYml0LiAqLwo+ICsgICAgICAgICAgICAgICAgaW5wdXRfc2l6ZSA9IElQU19NSU47Cj4g Kwo+ICsgICAgICAgICAgICAvKiBOb3JtYWxpemUgZ3JhbnVsZSBzaXplLiAqLwo+ICsgICAgICAg ICAgICBzd2l0Y2ggKCB0Y3IgJiBUQ1JfVEcxX01BU0sgKSB7CgpDb2Rpbmcgc3R5bGUuCgo+ICsg ICAgICAgICAgICBjYXNlIFRDUl9URzFfMTZLOgpJZiB5b3Ugc2hpZnQgeW91ciB0Y3IgYnkgVENS X1RHMV9TSElGVCB0aGVuIGFsbCB0aGlzIGNvZGUgY2FuIGJlY29tZSAKZ2VuZXJpYy4gQXZvaWRp bmcgZHVwbGljYXRpb24sIHJldmlld2luZyB0d2ljZSBzaW1pbGFyIGNvZGUgYW5kIApwb3RlbnRp YWwgYnVnLgoKPiArICAgICAgICAgICAgICAgIGdyYW4gPSAxOwo+ICsgICAgICAgICAgICAgICAg YnJlYWs7Cj4gKyAgICAgICAgICAgIGNhc2UgVENSX1RHMV82NEs6Cj4gKyAgICAgICAgICAgICAg ICBncmFuID0gMjsKPiArICAgICAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgICAgICBkZWZh dWx0Ogo+ICsgICAgICAgICAgICAgICAgZ3JhbiA9IDA7Cj4gKyAgICAgICAgICAgIH0KPiArCj4g KyAgICAgICAgICAgIC8qIFVzZSBUVEJSMSBmb3IgR1ZBIHRvIElQQSB0cmFuc2xhdGlvbi4gKi8K PiArICAgICAgICAgICAgdHRiciA9IFJFQURfU1lTUkVHNjQoVFRCUjFfRUwxKTsKPiArCj4gKyAg ICAgICAgICAgIC8qIElmIFRDUi5FUEQxIGlzIHNldCwgdHJhbnNsYXRpb25zIHVzaW5nIFRUQlIx IGFyZSBkaXNhYmxlZC4gKi8KPiArICAgICAgICAgICAgZGlzYWJsZWQgPSAoIHRjciAmIFRDUl9F UEQxICkgPyAxIDogMDsKClNhbWUgYXMgYWJvdmUuCgo+ICsgICAgICAgIH0KPiArICAgIH0KPiAr ICAgIGVsc2UKPiArI2VuZGlmCj4gKyAgICB7Cj4gKyAgICAgICAgLyogR3JhbnVsZSBzaXplIG9m IEFhcmNoMzIgb3IgQVJNdjcgYXJjaGl0ZWN0dXJlcyBpcyBhbHdheXMgNEssIGluZGV4ZWQgYnkg MC4gKi8KCk5JVDogSXQgaXMgbm90IG5lY2Vzc2FyaWx5IHRvIG1lbnRpb24gQVJNdjcuIEFSTXY3 IGlzIGFsd2F5cyBBQXJjaDMyLgoKQWxzbyBzL0FhcmNoMzIvQWFyY2gzMi8KCj4gKyAgICAgICAg Z3JhbiA9IDA7Cj4gKwo+ICsgICAgICAgIG1hc2sgPSAoKDFVTEwgPDwgUkVHSVNURVJfV0lEVEhf MzJfQklUKSAtIDEpICYKPiArICAgICAgICAgICAgICAgfigoMVVMTCA8PCAoUkVHSVNURVJfV0lE VEhfMzJfQklUIC0gdDBfc3opKSAtIDEpOwoKSSBkb24ndCB1bmRlcnN0YW5kIHRoaXMgbWFzay4g V2h5IGRvIHlvdSBuZWVkIGl0PwoKPiArCj4gKyAgICAgICAgaWYgKCB0MF9zeiA9PSAwIHx8ICEo Z3ZhICYgbWFzaykgKQo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAgaW5wdXRfc2l6ZSA9IFJF R0lTVEVSX1dJRFRIXzMyX0JJVCAtIHQwX3N6Owo+ICsKPiArICAgICAgICAgICAgLyogVXNlIFRU QlIwIGZvciBHVkEgdG8gSVBBIHRyYW5zbGF0aW9uLiAqLwo+ICsgICAgICAgICAgICB0dGJyID0g UkVBRF9TWVNSRUc2NChUVEJSMF9FTDEpOwo+ICsKPiArICAgICAgICAgICAgLyogSWYgVENSLkVQ RDAgaXMgc2V0LCB0cmFuc2xhdGlvbnMgdXNpbmcgVFRCUjAgYXJlIGRpc2FibGVkLiAqLwo+ICsg ICAgICAgICAgICBkaXNhYmxlZCA9ICggdGNyICYgVENSX0VQRDAgKSA/IDEgOiAwOwoKQXMgZm9y IHRoZSBBQXJjaDY0LCB0aGVyZSBpcyBhIGNhbGwgdG8gYWJzdHJhY3QgaGVyZS4KCj4gKyAgICAg ICAgfQo+ICsKPiArICAgICAgICBtYXNrID0gKCgxVUxMIDw8IFJFR0lTVEVSX1dJRFRIXzMyX0JJ VCkgLSAxKSAmCj4gKyAgICAgICAgICAgICAgIH4oKDFVTEwgPDwgKFJFR0lTVEVSX1dJRFRIXzMy X0JJVCAtIHQxX3N6KSkgLSAxKTsKPiArCj4gKyAgICAgICAgaWYgKCAoKHQxX3N6ID09IDApICYm ICF0dGJyKSB8fCAodDFfc3ogJiYgKGd2YSAmIG1hc2spID09IG1hc2spICkKPiArICAgICAgICB7 Cj4gKyAgICAgICAgICAgIGlucHV0X3NpemUgPSBSRUdJU1RFUl9XSURUSF8zMl9CSVQgLSB0MV9z ejsKPiArCj4gKyAgICAgICAgICAgIC8qIFVzZSBUVEJSMSBmb3IgR1ZBIHRvIElQQSB0cmFuc2xh dGlvbi4gKi8KPiArICAgICAgICAgICAgdHRiciA9IFJFQURfU1lTUkVHNjQoVFRCUjFfRUwxKTsK PiArCj4gKyAgICAgICAgICAgIC8qIElmIFRDUi5FUEQxIGlzIHNldCwgdHJhbnNsYXRpb25zIHVz aW5nIFRUQlIxIGFyZSBkaXNhYmxlZC4gKi8KPiArICAgICAgICAgICAgZGlzYWJsZWQgPSAoIHRj ciAmIFRDUl9FUEQxICkgPyAxIDogMDsKCkRpdHRvLgoKPiArICAgICAgICB9Cj4gKyAgICB9Cj4g Kwo+ICsgICAgaWYgKCBkaXNhYmxlZCApCj4gKyAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Cj4gKwo+ ICsgICAgbGV2ZWwgPSA0IC0gRElWX1JPVU5EX1VQKChpbnB1dF9zaXplIC0gZ3JhaW5zaXplc1tn cmFuXSksIHN0cmlkZXNbZ3Jhbl0pOwoKSXQgdG9vayBtZSBhIGJpdCB0byB1bmRlcnN0YW5kIHRo aXMuIFRoZSBjb21tZW50IGluIHRoZSBBUk0gQVJNIApwc2V1ZG8tY29kZSB3b3VsZCBiZSB1c2Vm dWwgdG8ga2VlcCBpdCBoZXJlLgoKPiArCj4gKyAgICAvKiBYWFg6IFdlIGRvIG5vdCBjb25zaWRl ciAzMmJpdCBFTDAgcnVubmluZyBvbiBBYXJjaDY0LCB5ZXQuICovCgpTZWUgbXkgY29tbWVudCBh Ym92ZSBhYm91dCAzMmJpdCBFTDAgc3VwcG9ydC4KCj4gKyAgICBpZiAoIGlzXzY0Yml0X2RvbWFp bihkKSApCj4gKyAgICB7Cj4gKyAgICAgICAgLyogR2V0IHRoZSBpbnRlcm1lZGlhdGUgcGh5c2lj YWwgYWRkcmVzcyBzaXplLiAqLwo+ICsgICAgICAgIGlwcyA9ICh0Y3IgJiBUQ1JfSVBTX01BU0sp ID4+IFRDUl9JUFNfU0hJRlQ7Cj4gKwo+ICsgICAgICAgIHN3aXRjaCAoaXBzKSB7Cj4gKyAgICAg ICAgY2FzZSBUQ1JfSVBTXzMyX0JJVDoKPiArICAgICAgICAgICAgb3V0cHV0X3NpemUgPSBJUFNf MzJfQklUOwo+ICsgICAgICAgICAgICBicmVhazsKPiArICAgICAgICBjYXNlIFRDUl9JUFNfMzZf QklUOgo+ICsgICAgICAgICAgICBvdXRwdXRfc2l6ZSA9IElQU18zNl9CSVQ7Cj4gKyAgICAgICAg ICAgIGJyZWFrOwo+ICsgICAgICAgIGNhc2UgVENSX0lQU180MF9CSVQ6Cj4gKyAgICAgICAgICAg IG91dHB1dF9zaXplID0gSVBTXzQwX0JJVDsKPiArICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAg ICAgY2FzZSBUQ1JfSVBTXzQyX0JJVDoKPiArICAgICAgICAgICAgb3V0cHV0X3NpemUgPSBJUFNf NDJfQklUOwo+ICsgICAgICAgICAgICBicmVhazsKPiArICAgICAgICBjYXNlIFRDUl9JUFNfNDRf QklUOgo+ICsgICAgICAgICAgICBvdXRwdXRfc2l6ZSA9IElQU180NF9CSVQ7Cj4gKyAgICAgICAg ICAgIGJyZWFrOwo+ICsgICAgICAgIGNhc2UgVENSX0lQU180OF9CSVQ6Cj4gKyAgICAgICAgZGVm YXVsdDoKPiArICAgICAgICAgICAgb3V0cHV0X3NpemUgPSBJUFNfNDhfQklUOwo+ICsgICAgICAg IH0KPiArICAgIH0KPiArICAgIGVsc2UKPiArICAgICAgICBvdXRwdXRfc2l6ZSA9IElQU180MF9C SVQ7Cj4gKwo+ICsgICAgLyogTWFrZSBzdXJlIHRoZSBiYXNlIGFkZHJlc3MgZG9lcyBub3QgZXhj ZWVkIGl0cyBjb25maWd1cmVkIHNpemUuICovCj4gKyAgICBtYXNrID0gKCgxVUxMIDw8IElQU180 OF9CSVQpIC0gMSkgJiB+KCgxVUxMIDw8IG91dHB1dF9zaXplKSAtIDEpOwo+ICsgICAgaWYgKCBv dXRwdXRfc2l6ZSAhPSBJUFNfNDhfQklUICYmICh0dGJyICYgbWFzaykgKQo+ICsgICAgICAgIHJl dHVybiAtRUZBVUxUOwo+ICsKPiArICAgIG1hc2sgPSAoKDFVTEwgPDwgb3V0cHV0X3NpemUpIC0g MSk7Cj4gKyAgICBwYWdlID0gZ2V0X3BhZ2VfZnJvbV9nZm4oZCwgcGFkZHJfdG9fcGZuKHR0YnIg JiBtYXNrKSwgTlVMTCwgUDJNX0FMTE9DKTsKPiArICAgIGlmICggIXBhZ2UgKQo+ICsgICAgICAg IHJldHVybiAtRUZBVUxUOwo+ICsKPiArICAgIHRhYmxlID0gX19tYXBfZG9tYWluX3BhZ2UocGFn ZSk7Cj4gKwo+ICsgICAgZm9yICggOyA7IGxldmVsKysgKQo+ICsgICAgewo+ICsgICAgICAgIHB0 ZSA9IHRhYmxlW29mZnNldHNbbGV2ZWxdW2dyYW5dXTsKPiArCj4gKyAgICAgICAgdW5tYXBfZG9t YWluX3BhZ2UodGFibGUpOwo+ICsgICAgICAgIHB1dF9wYWdlKHBhZ2UpOwo+ICsKPiArICAgICAg ICBpZiAoIGxldmVsID09IDMgfHwgIXB0ZS53YWxrLnZhbGlkIHx8ICFwdGUud2Fsay50YWJsZSAp CgpQbGVhc2UgY29tbWVudCB0aGlzIGxpbmUuCgo+ICsgICAgICAgICAgICBicmVhazsKPiArCj4g KyAgICAgICAgcGFnZSA9IGdldF9wYWdlX2Zyb21fZ2ZuKGQsIHB0ZS53YWxrLmJhc2UsIE5VTEws IFAyTV9BTExPQyk7CgpJdCBpcyBhIGJpdCBjb25mdXNpbmcuIFlvdSBjYXJlIGFib3V0IHRoZSBv dXRwdXRfc2l6ZSBmb3IgdGhlIHdoZW4gCmdldHRpbmcgdGhlIFRCQlIgYnV0IG5vdCB0aGUgcmVz dCBvZiB0aGUgdGFibGVzLiBJcyBpdCBub3JtYWw/Cgo+ICsgICAgICAgIGlmICggIXBhZ2UgKQo+ ICsgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKPiArCj4gKyAgICAgICAgdGFibGUgPSBfX21h cF9kb21haW5fcGFnZShwYWdlKTsKPiArICAgIH0KPiArCj4gKyAgICBpZiAoICFwdGUud2Fsay52 YWxpZCB8fCAoKGxldmVsID09IDMpICYgIXB0ZS53YWxrLnRhYmxlKSApCgpUaGVyZSBpcyBhIGNh bGwgdG8gbGV2ZXJhZ2UgdGhlIHAybV90YWJsZS9wMm1fdmFsaWQgaGVscGVycyBoZXJlLgoKPiAr ICAgICAgICByZXR1cm4gLUVGQVVMVDsKPiArCj4gKyAgICAqaXBhID0gcGZuX3RvX3BhZGRyKHB0 ZS53YWxrLmJhc2UpIHwgKGd2YSAmIG1hc2tzW2xldmVsXVtncmFuXSk7Cj4gKwo+ICsgICAgKnBl cm1fcm8gPSBwdGUucHQucm87Cj4gKwo+ICsgICAgLyogUmV0dXJuIHRoZSBlbnRpcmUgcHRlIHNv IHRoYXQgdGhlIGNhbGxlciBjYW4gY2hlY2sgZmxhZ3MgYnkgaGVyc2VsZi4gKi8KCkhtbW0/IFlv dSBkb24ndCByZXR1cm4gdGhlIGVudGlyZSBwdGUgYnV0IHRoZSBvbmx5IHdoZXRoZXIgdGhlIHBh Z2UgaXMgCndyaXRhYmxlIG9yIHJlYWRhYmxlLW9ubHkuCgpJbiBnZW5lcmFsIHdlIHdhbnQgdG8g aGF2ZSBtb3JlIGluZm9ybWF0aW9uIGJhY2sgc3VjaCBhcyBleGVjdXRlLW5ldmVyIApiaXQuLi4K Cj4gKyAgICByZXR1cm4gMDsKPiAgIH0KPiAgIAo+ICAgaW50IHAybV93YWxrX2dwdChzdHJ1Y3Qg cDJtX2RvbWFpbiAqcDJtLCB2YWRkcl90IGd2YSwKPiAKCkNoZWVycywKCi0tIApKdWxpZW4gR3Jh bGwKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1k ZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54 ZW4ub3JnL3hlbi1kZXZlbAo=