From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mirela Simonovic Subject: Re: [PATCH 10/18] xen/arm: Implement GIC suspend/resume functions (gicv2 only) Date: Wed, 14 Nov 2018 12:57:21 +0100 Message-ID: References: <1542022244-22977-1-git-send-email-mirela.simonovic@aggios.com> <1542022244-22977-11-git-send-email-mirela.simonovic@aggios.com> <42c2bded-957a-c2db-ab82-e628278efa83@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <42c2bded-957a-c2db-ab82-e628278efa83@arm.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Julien Grall Cc: Stefano Stabellini , Xen Devel , Davorin Mista , Saeed Nowshadi , xen-devel , Stefano Stabellini List-Id: xen-devel@lists.xenproject.org T24gV2VkLCBOb3YgMTQsIDIwMTggYXQgMTA6MTMgQU0gSnVsaWVuIEdyYWxsIDxqdWxpZW4uZ3Jh bGxAYXJtLmNvbT4gd3JvdGU6Cj4KPiBIaSBTdGVmYW5vLAo+Cj4gT24gMTEvMTMvMTggMTE6NDEg UE0sIFN0ZWZhbm8gU3RhYmVsbGluaSB3cm90ZToKPiA+IE9uIE1vbiwgMTIgTm92IDIwMTgsIE1p cmVsYSBTaW1vbm92aWMgd3JvdGU6Cj4gPj4gU3lzdGVtIHN1c3BlbmQgbWF5IGxlYWQgdG8gYSBz dGF0ZSB3aGVyZSBHSUMgd291bGQgYmUgcG93ZXJlZCBkb3duLgo+ID4+IFRoZXJlZm9yZSwgWGVu IHNob3VsZCBzYXZlL3Jlc3RvcmUgdGhlIGNvbnRleHQgb2YgR0lDIG9uIHN1c3BlbmQvcmVzdW1l Lgo+ID4+IE5vdGUgdGhhdCB0aGUgY29udGV4dCBjb25zaXN0cyBvZiBzdGF0ZXMgb2YgcmVnaXN0 ZXJzIHdoaWNoIGFyZQo+ID4+IGNvbnRyb2xsZWQgYnkgdGhlIGh5cGVydmlzb3IuIE90aGVyIEdJ QyByZWdpc3RlcnMgd2hpY2ggYXJlIGFjY2Vzc2libGUKPiA+PiBieSBndWVzdHMgYXJlIHNhdmVk L3Jlc3RvcmVkIG9uIGNvbnRleHQgc3dpdGNoLgo+ID4+IFRlc3RlZCBvbiBYaWxpbnggVWx0cmFz Y2FsZSsgTVBTb0Mgd2l0aCAoYW5kIHdpdGhvdXQpIHBvd2VyaW5nIGRvd24KPiA+PiB0aGUgR0lD Lgo+ID4+Cj4gPj4gU2lnbmVkLW9mZi1ieTogTWlyZWxhIFNpbW9ub3ZpYyA8bWlyZWxhLnNpbW9u b3ZpY0BhZ2dpb3MuY29tPgo+ID4+IFNpZ25lZC1vZmYtYnk6IFNhZWVkIE5vd3NoYWRpIDxzYWVl ZC5ub3dzaGFkaUB4aWxpbnguY29tPgo+ID4+IC0tLQo+ID4+ICAgeGVuL2FyY2gvYXJtL2dpYy12 Mi5jICAgICB8IDE0NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrCj4gPj4gICB4ZW4vYXJjaC9hcm0vZ2ljLmMgICAgICAgIHwgIDI3ICsrKysrKysrKwo+ID4+ ICAgeGVuL2luY2x1ZGUvYXNtLWFybS9naWMuaCB8ICAgOCArKysKPiA+PiAgIDMgZmlsZXMgY2hh bmdlZCwgMTgyIGluc2VydGlvbnMoKykKPiA+Pgo+ID4+IGRpZmYgLS1naXQgYS94ZW4vYXJjaC9h cm0vZ2ljLXYyLmMgYi94ZW4vYXJjaC9hcm0vZ2ljLXYyLmMKPiA+PiBpbmRleCBlN2ViMDFmMzBh Li5iYjUyYjY0ZWNiIDEwMDY0NAo+ID4+IC0tLSBhL3hlbi9hcmNoL2FybS9naWMtdjIuYwo+ID4+ ICsrKyBiL3hlbi9hcmNoL2FybS9naWMtdjIuYwo+ID4+IEBAIC0xMjMsNiArMTIzLDI1IEBAIHN0 YXRpYyBERUZJTkVfUEVSX0NQVSh1OCwgZ2ljX2NwdV9pZCk7Cj4gPj4gICAvKiBNYXhpbXVtIGNw dSBpbnRlcmZhY2UgcGVyIEdJQyAqLwo+ID4+ICAgI2RlZmluZSBOUl9HSUNfQ1BVX0lGIDgKPiA+ Pgo+ID4+ICsvKiBHSUN2MiByZWdpc3RlcnMgdG8gYmUgc2F2ZWQvcmVzdG9yZWQgb24gc3lzdGVt IHN1c3BlbmQvcmVzdW1lICovCj4gPj4gK3N0cnVjdCBnaWN2Ml9jb250ZXh0IHsKPiA+PiArICAg IC8qIEdJQ0MgY29udGV4dCAqLwo+ID4+ICsgICAgdWludDMyX3QgZ2ljY19jdGxyOwo+ID4+ICsg ICAgdWludDMyX3QgZ2ljY19wbXI7Cj4gPj4gKyAgICB1aW50MzJfdCBnaWNjX2JwcjsKPiA+PiAr ICAgIC8qIEdJQ0QgY29udGV4dCAqLwo+ID4+ICsgICAgdWludDMyX3QgZ2ljZF9jdGxyOwo+ID4+ ICsgICAgdWludDMyX3QgKmdpY2RfaXNlbmFibGVyOwo+ID4+ICsgICAgdWludDMyX3QgKmdpY2Rf aXNhY3RpdmVyOwo+ID4+ICsgICAgdWludDMyX3QgKmdpY2RfaXByaW9yaXR5cjsKPiA+PiArICAg IHVpbnQzMl90ICpnaWNkX2l0YXJnZXRzcjsKPiA+PiArICAgIHVpbnQzMl90ICpnaWNkX2ljZmdy Owo+ID4+ICt9Owo+ID4+ICsKPiA+PiArc3RhdGljIHN0cnVjdCBnaWN2Ml9jb250ZXh0IGdpY3Yy X2NvbnRleHQ7Cj4gPj4gKwo+ID4+ICtzdGF0aWMgdm9pZCBnaWN2Ml9hbGxvY19jb250ZXh0KHN0 cnVjdCBnaWN2Ml9jb250ZXh0ICpnYyk7Cj4gPj4gKwo+ID4+ICAgc3RhdGljIGlubGluZSB2b2lk IHdyaXRlYl9naWNkKHVpbnQ4X3QgdmFsLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQo+ID4+ICAgewo+ ID4+ICAgICAgIHdyaXRlYl9yZWxheGVkKHZhbCwgZ2ljdjIubWFwX2RiYXNlICsgb2Zmc2V0KTsK PiA+PiBAQCAtMTMxMCw2ICsxMzI5LDkgQEAgc3RhdGljIGludCBfX2luaXQgZ2ljdjJfaW5pdCh2 b2lkKQo+ID4+Cj4gPj4gICAgICAgc3Bpbl91bmxvY2soJmdpY3YyLmxvY2spOwo+ID4+Cj4gPj4g KyAgICAvKiBBbGxvY2F0ZSBtZW1vcnkgdG8gYmUgdXNlZCBmb3Igc2F2aW5nIEdJQyBjb250ZXh0 IGR1cmluZyB0aGUgc3VzcGVuZCAqLwo+ID4+ICsgICAgZ2ljdjJfYWxsb2NfY29udGV4dCgmZ2lj djJfY29udGV4dCk7Cj4gPgo+ID4gUGxlYXNlIGNoZWNrIGZvciB0aGUgcmV0dXJuIG9mIGdpY3Yy X2FsbG9jX2NvbnRleHQgYW5kIHJldHVybiBlcnJvcgo+ID4gYWNjb3JkaW5nbHkuCj4KPiBTdXNw ZW5kL3Jlc3VtZSBpcyBub3QgYSBjcml0aWNhbCBmZWF0dXJlIGluIGNvbW1vbiBjYXNlLiBTbyBJ IHdvdWxkCj4gcHJlZmVyIGlmIHdlIGRpc2FibGUgaXQgd2hlbiB3ZSBjYW4ndCBhbGxvYyBtZW1v cnkuCj4KPiBJIHdvdWxkIGFsc28gYmUgdGVtcHQgdG8gI2lmZGVmIGFsbCByZWxhdGVkIHN1c3Bl bmQvcmVzdW1lIGNvZGUgdG8gYWxsb3cKPiB0aGUgaW50ZWdyYXRvciBkaXNhYmxpbmcgdGhlIGZl YXR1cmUgd2hlbiB0aGV5IGRvbid0IHdhbnQgaXQuCj4KPiA+Cj4gPgo+ID4+ICAgICAgIHJldHVy biAwOwo+ID4+ICAgfQo+ID4+Cj4gPj4gQEAgLTEzMTksNiArMTM0MSwxMjkgQEAgc3RhdGljIHZv aWQgZ2ljdjJfZG9fTFBJKHVuc2lnbmVkIGludCBscGkpCj4gPj4gICAgICAgQlVHKCk7Cj4gPj4g ICB9Cj4gPj4KPiA+PiArc3RhdGljIHZvaWQgZ2ljdjJfYWxsb2NfY29udGV4dChzdHJ1Y3QgZ2lj djJfY29udGV4dCAqZ2MpCj4gPj4gK3sKPiA+PiArICAgIHVpbnQzMl90IG4gPSBnaWN2Ml9pbmZv Lm5yX2xpbmVzOwo+ID4+ICsKPiA+PiArICAgIGdjLT5naWNkX2lzZW5hYmxlciA9IHh6YWxsb2Nf YXJyYXkodWludDMyX3QsIERJVl9ST1VORF9VUChuLCAzMikpOwo+ID4+ICsgICAgaWYgKCAhZ2Mt PmdpY2RfaXNlbmFibGVyICkKPiA+PiArICAgICAgICByZXR1cm47Cj4gPgo+ID4gSSB3b3VsZCBy ZXR1cm4gZXJyb3IgYW5kIHJldHVybiBlcnJvciBhbHNvIGJlbG93IGZvciBhbGwgdGhlIG90aGVy Cj4gPiBzaW1pbGFyIGNhc2VzLgo+ID4KPiA+Cj4gPj4gKyAgICBnYy0+Z2ljZF9pc2FjdGl2ZXIg PSB4emFsbG9jX2FycmF5KHVpbnQzMl90LCBESVZfUk9VTkRfVVAobiwgMzIpKTsKPiA+PiArICAg IGlmICggIWdjLT5naWNkX2lzYWN0aXZlciApCj4gPj4gKyAgICAgICAgZ290byBmcmVlX2dpY2Rf aXNlbmFibGVyOwo+ID4+ICsKPiA+PiArICAgIGdjLT5naWNkX2l0YXJnZXRzciA9IHh6YWxsb2Nf YXJyYXkodWludDMyX3QsIERJVl9ST1VORF9VUChuLCA0KSk7Cj4gPj4gKyAgICBpZiAoICFnYy0+ Z2ljZF9pdGFyZ2V0c3IgKQo+ID4+ICsgICAgICAgIGdvdG8gZnJlZV9naWNkX2lzYWN0aXZlcjsK PiA+PiArCj4gPj4gKyAgICBnYy0+Z2ljZF9pcHJpb3JpdHlyID0geHphbGxvY19hcnJheSh1aW50 MzJfdCwgRElWX1JPVU5EX1VQKG4sIDQpKTsKPiA+PiArICAgIGlmICggIWdjLT5naWNkX2lwcmlv cml0eXIgKQo+ID4+ICsgICAgICAgIGdvdG8gZnJlZV9naWNkX2l0YXJnZXRzcjsKPiA+PiArCj4g Pj4gKyAgICBnYy0+Z2ljZF9pY2ZnciA9IHh6YWxsb2NfYXJyYXkodWludDMyX3QsIERJVl9ST1VO RF9VUChuLCAxNikpOwo+ID4+ICsgICAgaWYgKCBnYy0+Z2ljZF9pY2ZnciApCj4gPj4gKyAgICAg ICAgcmV0dXJuOwo+ID4+ICsKPiA+PiArICAgIHhmcmVlKGdjLT5naWNkX2lwcmlvcml0eXIpOwo+ ID4+ICsKPiA+PiArZnJlZV9naWNkX2l0YXJnZXRzcjoKPiA+Cj4gPiBZb3UgY2FuIGhhdmUganVz dCBvbmUgbGFiZWwgdGhhdCBmcmVlcyBldmVyeXRoaW5nLCBhcyB5b3UgY2FuIHJlbHkgb24KPiA+ IHhmcmVlIHdvcmtpbmcgZmluZSAoZG9pbmcgbm90aGluZykgZm9yIE5VTEwgcG9pbnRlcnMuCj4g Pgo+ID4KPiA+PiArICAgIHhmcmVlKGdjLT5naWNkX2l0YXJnZXRzcik7Cj4gPj4gKwo+ID4+ICtm cmVlX2dpY2RfaXNhY3RpdmVyOgo+ID4+ICsgICAgeGZyZWUoZ2MtPmdpY2RfaXNhY3RpdmVyKTsK PiA+PiArCj4gPj4gK2ZyZWVfZ2ljZF9pc2VuYWJsZXI6Cj4gPj4gKyAgICB4ZnJlZShnYy0+Z2lj ZF9pc2VuYWJsZXIpOwo+ID4+ICsgICAgZ2MtPmdpY2RfaXNlbmFibGVyID0gTlVMTDsKPiA+PiAr fQo+ID4+ICsKPiA+PiArc3RhdGljIGludCBnaWN2Ml9zdXNwZW5kKHZvaWQpCj4gPj4gK3sKPiA+ PiArICAgIGludCBpOwo+ID4+ICsKPiA+PiArICAgIC8qIFNhdmUgR0lDQyBjb25maWd1cmF0aW9u ICovCj4gPj4gKyAgICBnaWN2Ml9jb250ZXh0LmdpY2NfY3RsciA9IHJlYWRsX2dpY2MoR0lDQ19D VExSKTsKPiA+PiArICAgIGdpY3YyX2NvbnRleHQuZ2ljY19wbXIgPSByZWFkbF9naWNjKEdJQ0Nf UE1SKTsKPiA+PiArICAgIGdpY3YyX2NvbnRleHQuZ2ljY19icHIgPSByZWFkbF9naWNjKEdJQ0Nf QlBSKTsKPiA+PiArCj4gPj4gKyAgICAvKiBJZiBnaWN2Ml9hbGxvY19jb250ZXh0KCkgaGFzbid0 IGFsbG9jYXRlZCBtZW1vcnksIHJldHVybiAqLwo+ID4+ICsgICAgaWYgKCAhZ2ljdjJfY29udGV4 dC5naWNkX2lzZW5hYmxlciApCj4gPj4gKyAgICAgICAgcmV0dXJuIC1FTk9NRU07Cj4gPgo+ID4g SWYgeW91IGFyZSBnb2luZyB0byBjaGVjayBmb3IgdGhpcywgdGhlbiBwbGVhc2UgY2hlY2sgZm9y IGFsbCB0aGUgb3RoZXJzCj4gPiBhcyB3ZWxsIChnaWNkX2lzYWN0aXZlciwgZ2ljZF9pcHJpb3Jp dHlyLCBldGMuKSBCdXQgaWYgeW91IGZvbGxvdyBteQo+ID4gb3RoZXIgc3VnZ2VzdGlvbiB0byBy ZXR1cm4gZXJyb3IgaWYgd2UgZmFpbCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gYXQKPiA+IGluaXQs IHRoZW4gdGhpcyBjYW4gYmVjb21lIGFuIEFTU0VSVC4gQWxzbywgQVNTRVJUUyBvciBjaGVja3Mg c2hvdWxkIGJlCj4gPiBhdCB0aGUgdmVyeSBiZWdpbm5pbmcgb2YgdGhpcyBmdW5jdGlvbi4KPiA+ Cj4gPgo+ID4+ICsgICAgLyogU2F2ZSBHSUNEIGNvbmZpZ3VyYXRpb24gKi8KPiA+PiArICAgIGdp Y3YyX2NvbnRleHQuZ2ljZF9jdGxyID0gcmVhZGxfZ2ljZChHSUNEX0NUTFIpOwo+ID4+ICsKPiA+ PiArICAgIGZvciAoIGkgPSAwOyBpIDwgRElWX1JPVU5EX1VQKGdpY3YyX2luZm8ubnJfbGluZXMs IDMyKTsgaSsrICkKPiA+PiArICAgICAgICBnaWN2Ml9jb250ZXh0LmdpY2RfaXNlbmFibGVyW2ld ID0gcmVhZGxfZ2ljZChHSUNEX0lTRU5BQkxFUiArIGkgKiA0KTsKPiA+PiArCj4gPj4gKyAgICBm b3IgKCBpID0gMDsgaSA8IERJVl9ST1VORF9VUChnaWN2Ml9pbmZvLm5yX2xpbmVzLCAzMik7IGkr KyApCj4gPj4gKyAgICAgICAgZ2ljdjJfY29udGV4dC5naWNkX2lzYWN0aXZlcltpXSA9IHJlYWRs X2dpY2QoR0lDRF9JU0FDVElWRVIgKyBpICogNCk7Cj4gPj4gKwo+ID4+ICsgICAgZm9yICggaSA9 IDA7IGkgPCBESVZfUk9VTkRfVVAoZ2ljdjJfaW5mby5ucl9saW5lcywgNCk7IGkrKyApCj4gPj4g KyAgICAgICAgZ2ljdjJfY29udGV4dC5naWNkX2lwcmlvcml0eXJbaV0gPSByZWFkbF9naWNkKEdJ Q0RfSVBSSU9SSVRZUiArIGkgKiA0KTsKPiA+PiArCj4gPj4gKyAgICBmb3IgKCBpID0gMDsgaSA8 IERJVl9ST1VORF9VUChnaWN2Ml9pbmZvLm5yX2xpbmVzLCA0KTsgaSsrICkKPiA+PiArICAgICAg ICBnaWN2Ml9jb250ZXh0LmdpY2RfaXRhcmdldHNyW2ldID0gcmVhZGxfZ2ljZChHSUNEX0lUQVJH RVRTUiArIGkgKiA0KTsKPiA+PiArCj4gPj4gKyAgICBmb3IgKCBpID0gMDsgaSA8IERJVl9ST1VO RF9VUChnaWN2Ml9pbmZvLm5yX2xpbmVzLCAxNik7IGkrKyApCj4gPj4gKyAgICAgICAgZ2ljdjJf Y29udGV4dC5naWNkX2ljZmdyW2ldID0gcmVhZGxfZ2ljZChHSUNEX0lDRkdSICsgaSAqIDQpOwo+ ID4KPiA+IFRlY2huaWNhbGx5LCBHSUNEX0lDRkdSIGRvZXNuJ3QgbmVlZCB0byBiZSBzYXZlZCBi ZWNhdXNlIGl0IGNvdWxkIGJlCj4gPiBlbnRpcmVseSByZWNvbnN0cnVjdGVkIGZyb20gdGhlIGlu Zm9ybWF0aW9ucyB3ZSBoYXZlLCBidXQgSSBpbWFnaW5lIGl0Cj4gPiBjb3VsZCBiZSBkaWZmaWN1 bHQgdG8gY2FsbCB0aGUgcmlnaHQgc2V0IG9mIHJvdXRlX2lycV90b19ndWVzdC94ZW4gY2FsbHMK PiA+IGF0IHJlc3VtZSB0aW1lLCBzbyBJIHRoaW5rIGl0IGlzIE9LLgo+ID4KPiA+Cj4gPj4gKyAg ICByZXR1cm4gMDsKPiA+PiArfQo+ID4+ICsKPiA+PiArc3RhdGljIHZvaWQgZ2ljdjJfcmVzdW1l KHZvaWQpCj4gPj4gK3sKPiA+PiArICAgIGludCBpOwo+ID4+ICsKPiA+PiArICAgIEFTU0VSVChn aWN2Ml9jb250ZXh0LmdpY2RfaXNlbmFibGVyKTsKPiA+PiArICAgIEFTU0VSVChnaWN2Ml9jb250 ZXh0LmdpY2RfaXNhY3RpdmVyKTsKPiA+PiArICAgIEFTU0VSVChnaWN2Ml9jb250ZXh0LmdpY2Rf aXByaW9yaXR5cik7Cj4gPj4gKyAgICBBU1NFUlQoZ2ljdjJfY29udGV4dC5naWNkX2l0YXJnZXRz cik7Cj4gPj4gKyAgICBBU1NFUlQoZ2ljdjJfY29udGV4dC5naWNkX2ljZmdyKTsKPiA+PiArCj4g Pj4gKyAgICAvKiBEaXNhYmxlIENQVSBpbnRlcmZhY2UgYW5kIGRpc3RyaWJ1dG9yICovCj4gPj4g KyAgICB3cml0ZWxfZ2ljYygwLCBHSUNDX0NUTFIpOwo+ID4+ICsgICAgd3JpdGVsX2dpY2QoMCwg R0lDRF9DVExSKTsKPiA+PiArICAgIGlzYigpOwo+ID4+ICsKPiA+PiArICAgIC8qIFJlc3RvcmUg R0lDRCBjb25maWd1cmF0aW9uICovCj4gPj4gKyAgICBmb3IgKCBpID0gMDsgaSA8IERJVl9ST1VO RF9VUChnaWN2Ml9pbmZvLm5yX2xpbmVzLCAzMik7IGkrKyApCj4gPj4gKyAgICAgICAgd3JpdGVs X2dpY2QoMHhmZmZmZmZmZiwgR0lDRF9JQ0VOQUJMRVIgKyBpICogNCk7Cj4gPj4gKwo+ID4+ICsg ICAgZm9yICggaSA9IDA7IGkgPCBESVZfUk9VTkRfVVAoZ2ljdjJfaW5mby5ucl9saW5lcywgMzIp OyBpKysgKQo+ID4+ICsgICAgICAgIHdyaXRlbF9naWNkKGdpY3YyX2NvbnRleHQuZ2ljZF9pc2Vu YWJsZXJbaV0sIEdJQ0RfSVNFTkFCTEVSICsgaSAqIDQpOwo+ID4+ICsKPiA+PiArICAgIGZvciAo IGkgPSAwOyBpIDwgRElWX1JPVU5EX1VQKGdpY3YyX2luZm8ubnJfbGluZXMsIDMyKTsgaSsrICkK PiA+PiArICAgICAgICB3cml0ZWxfZ2ljZCgweGZmZmZmZmZmLCBHSUNEX0lDQUNUSVZFUiArIGkg KiA0KTsKPiA+PiArCj4gPj4gKyAgICBmb3IgKCBpID0gMDsgaSA8IERJVl9ST1VORF9VUChnaWN2 Ml9pbmZvLm5yX2xpbmVzLCAzMik7IGkrKyApCj4gPj4gKyAgICAgICAgd3JpdGVsX2dpY2QoZ2lj djJfY29udGV4dC5naWNkX2lzYWN0aXZlcltpXSwgR0lDRF9JU0FDVElWRVIgKyBpICogNCk7Cj4g Pj4gKwo+ID4+ICsgICAgZm9yICggaSA9IDA7IGkgPCBESVZfUk9VTkRfVVAoZ2ljdjJfaW5mby5u cl9saW5lcywgNCk7IGkrKyApCj4gPj4gKyAgICAgICAgd3JpdGVsX2dpY2QoZ2ljdjJfY29udGV4 dC5naWNkX2lwcmlvcml0eXJbaV0sIEdJQ0RfSVBSSU9SSVRZUiArIGkgKiA0KTsKPiA+PiArCj4g Pj4gKyAgICBmb3IgKCBpID0gMDsgaSA8IERJVl9ST1VORF9VUChnaWN2Ml9pbmZvLm5yX2xpbmVz LCA0KTsgaSsrICkKPiA+PiArICAgICAgICB3cml0ZWxfZ2ljZChnaWN2Ml9jb250ZXh0LmdpY2Rf aXRhcmdldHNyW2ldLCBHSUNEX0lUQVJHRVRTUiArIGkgKiA0KTsKPiA+PiArCj4gPj4gKyAgICBm b3IgKCBpID0gMDsgaSA8IERJVl9ST1VORF9VUChnaWN2Ml9pbmZvLm5yX2xpbmVzLCAxNik7IGkr KyApCj4gPj4gKyAgICAgICAgd3JpdGVsX2dpY2QoZ2ljdjJfY29udGV4dC5naWNkX2ljZmdyW2ld LCBHSUNEX0lDRkdSICsgaSAqIDQpOwo+ID4+ICsKPiA+PiArICAgIC8qIE1ha2Ugc3VyZSBhbGwg cmVnaXN0ZXJzIGFyZSByZXN0b3JlZCBhbmQgZW5hYmxlIGRpc3RyaWJ1dG9yICovCj4gPj4gKyAg ICBpc2IoKTsKPiA+PiArICAgIHdyaXRlbF9naWNkKGdpY3YyX2NvbnRleHQuZ2ljZF9jdGxyIHwg R0lDRF9DVExfRU5BQkxFLCBHSUNEX0NUTFIpOwo+ID4+ICsKPiA+PiArICAgIC8qIFJlc3RvcmUg R0lDIENQVSBpbnRlcmZhY2UgY29uZmlndXJhdGlvbiAqLwo+ID4+ICsgICAgd3JpdGVsX2dpY2Mo Z2ljdjJfY29udGV4dC5naWNjX3BtciwgR0lDQ19QTVIpOwo+ID4+ICsgICAgd3JpdGVsX2dpY2Mo Z2ljdjJfY29udGV4dC5naWNjX2JwciwgR0lDQ19CUFIpOwo+ID4+ICsgICAgaXNiKCk7Cj4gPgo+ ID4gSSBkb24ndCB0aGluayB3ZSBuZWVkIGFsbCB0aGVzZSBpc2IoKSdzIGluIHRoaXMgZnVuY3Rp b24uIE1heWJlIG9ubHkgb25lCj4gPiBhdCB0aGUgZW5kLCBidXQgcHJvYmFibHkgbm90IGV2ZW4g dGhhdC4gSnVsaWVuLCB3aGF0IGRvIHlvdSB0aGluaz8KPgo+IEkgZG9uJ3QgdGhpbmsgYW55IG9m IHRoZSBpc2IoKSBpbiB0aGUgY29kZSBhcmUgbmVjZXNzYXJ5LiBXaGF0IGFyZSB3ZQo+IHRyeWlu ZyB0byBwcmV2ZW50IHdpdGggdGhlbT8KPgoKSSBhbHNvIHRoaW5rIGl0J3Mgbm90IG5lZWRlZCAt IGFueXdoZXJlCgo+IENoZWVycywKPgo+IC0tCj4gSnVsaWVuIEdyYWxsCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0 Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qu b3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs