From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: Re: [PATCH v5 5/7] xen/arm: zynqmp: eemi access control Date: Tue, 11 Dec 2018 15:37:51 +0000 Message-ID: References: <1543871021-315-5-git-send-email-sstabellini@kernel.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1543871021-315-5-git-send-email-sstabellini@kernel.org> Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Stefano Stabellini , xen-devel@lists.xen.org Cc: edgar.iglesias@xilinx.com, Stefano Stabellini , saeed.nowshadi@xilinx.com List-Id: xen-devel@lists.xenproject.org SGksCgpPbiAwMy8xMi8yMDE4IDIxOjAzLCBTdGVmYW5vIFN0YWJlbGxpbmkgd3JvdGU6Cj4gRnJv bTogIkVkZ2FyIEUuIElnbGVzaWFzIiA8ZWRnYXIuaWdsZXNpYXNAeGlsaW54LmNvbT4KPiAKPiBG cm9tOiBFZGdhciBFLiBJZ2xlc2lhcyA8ZWRnYXIuaWdsZXNpYXNAeGlsaW54LmNvbT4KPiAKPiBJ bnRyb2R1Y2UgZGF0YSBzdHJ1Y3RzIHRvIGltcGxlbWVudCBiYXNpYyBhY2Nlc3MgY29udHJvbHMu Cj4gSW50cm9kdWNlIHRoZSBmb2xsb3dpbmcgdGhyZWUgZnVuY3Rpb25zOgo+IAo+IGRvbWFpbl9o YXNfbm9kZV9hY2Nlc3M6IGNoZWNrIGFjY2VzcyB0byB0aGUgbm9kZQo+IGRvbWFpbl9oYXNfcmVz ZXRfYWNjZXNzOiBjaGVjayBhY2Nlc3MgdG8gdGhlIHJlc2V0IGxpbmUKPiBkb21haW5faGFzX21t aW9fYWNjZXNzOiBjaGVjayBhY2Nlc3MgdG8gdGhlIHJlZ2lzdGVyCj4gCj4gU2lnbmVkLW9mZi1i eTogRWRnYXIgRS4gSWdsZXNpYXMgPGVkZ2FyLmlnbGVzaWFzQHhpbGlueC5jb20+Cj4gU2lnbmVk LW9mZi1ieTogU3RlZmFubyBTdGFiZWxsaW5pIDxzdGVmYW5vc0B4aWxpbnguY29tPgo+IAo+IC0t LQo+IFN0YXRpY2FsbHkgZGVmaW5lczoKPiAKPiAtIHBtX25vZGVfYWNjZXNzCj4gSXQgZW5jb2Rl cyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYSBub2RlIGlkIGFuZCB0aGUgc3RhcnQgb2YgdGhl IE1NSU8KPiByZWdpb24gb2YgYSBkZXZpY2UgaW4gdGhlIGNvcnJlc3BvbmRpbmcgcG93ZXIgZG9t YWluLiBJdCBpcyB1c2VkIGZvcgo+IHBlcm1pc3Npb24gY2hlY2tpbmcuIEFsdGhvdWdoIHRoZSBN TUlPIHJlZ2lvbiBzdGFydCBhZGRyZXNzIGlzIGF2YWlsYWJsZQo+IG9uIGRldmljZSB0cmVlIGFu ZCBjb3VsZCBiZSBkZXJpdmVkIGZyb20gdGhlcmUgKHdlIHBsYW4gdG8gaW1wcm92ZSB0aGF0Cj4g aW4gdGhlIGZ1dHVyZSksIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBhIG5vZGUgaWQgYW5kIGNv cnJlc3BvbmRpbmcKPiBkZXZpY2VzIGlzIG5vdCBkZXNjcmliZWQgYW5kIG5lZWRzIHRvIGJlIGhh cmRjb2RlZC4KPiAKPiAtIHBtX3Jlc2V0X2FjY2Vzcwo+IFNhbWUgYXMgcG1fbm9kZV9hY2Nlc3Mg Zm9yIHJlc2V0IGxpbmVzLgo+IAo+IC0tLQo+IENoYW5nZXMgaW4gdjU6Cj4gLSBpbXByb3ZlIGlu LWNvZGUgY29tbWVudHMKPiAtIHVzZSBtZm5fdCBpbiBzdHJ1Y3QgcG1fYWNjZXNzCj4gLSByZW1v dmUgbW1pb19hY2Nlc3MgdGFibGUKPiAKPiBDaGFuZ2VzIGluIHY0Ogo+IC0gYWRkICNpbmNsdWRl IGFzIG5lZWRlZAo+IC0gYWRkICNpZiAwIGZvciBiaXNlY3RhYmlsaXR5Cj4gLSB1c2UgbWZuX3Qg aW4gcG1fY2hlY2tfYWNjZXNzCj4gLSBhZGQgd3JhcC1hcm91bmQgQVNTRVJUIGluIGRvbWFpbl9o YXNfbW1pb19hY2Nlc3MKPiAtIHVzZSBHRU5NQVNLIGluIGRvbWFpbl9oYXNfbW1pb19hY2Nlc3MK PiAtIHByb3BlciBib3VuZCBjaGVja3MgKD09IEFSUkFZX1NJWkUgaXMgb3V0IG9mIGJvdW5kKQo+ IC0tLQo+ICAgeGVuL2FyY2gvYXJtL3BsYXRmb3Jtcy94aWxpbngtenlucW1wLWVlbWkuYyB8IDM0 OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gICAxIGZpbGUgY2hhbmdlZCwgMzQ4IGlu c2VydGlvbnMoKykKPiAKPiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gvYXJtL3BsYXRmb3Jtcy94aWxp bngtenlucW1wLWVlbWkuYyBiL3hlbi9hcmNoL2FybS9wbGF0Zm9ybXMveGlsaW54LXp5bnFtcC1l ZW1pLmMKPiBpbmRleCAzNjliYjNmLi45MmEwMmRmIDEwMDY0NAo+IC0tLSBhL3hlbi9hcmNoL2Fy bS9wbGF0Zm9ybXMveGlsaW54LXp5bnFtcC1lZW1pLmMKPiArKysgYi94ZW4vYXJjaC9hcm0vcGxh dGZvcm1zL3hpbGlueC16eW5xbXAtZWVtaS5jCj4gQEAgLTE2LDkgKzE2LDM1NyBAQAo+ICAgICog R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiAgICAqLwo+ICAg Cj4gKy8qCj4gKyAqICBFRU1JIFBvd2VyIE1hbmFnZW1lbnQgQVBJIGFjY2Vzcwo+ICsgKgo+ICsg KiBSZWZzOgo+ICsgKiBodHRwczovL3d3dy54aWxpbnguY29tL3N1cHBvcnQvZG9jdW1lbnRhdGlv bi91c2VyX2d1aWRlcy91ZzEyMDAtZWVtaS1hcGkucGRmCj4gKyAqCj4gKyAqIEJhY2tncm91bmQ6 Cj4gKyAqIFRoZSBaeW5xTVAgaGFzIGEgc3Vic3lzdGVtIG5hbWVkIHRoZSBQTVUgd2l0aCBhIENQ VSBhbmQgc3BlY2lhbCBkZXZpY2VzCj4gKyAqIGRlZGljYXRlZCB0byBydW5uaW5nIFBvd2VyIE1h bmFnZW1lbnQgRmlybXdhcmUuIE90aGVyIG1hc3RlcnMgaW4gdGhlCj4gKyAqIHN5c3RlbSBuZWVk IHRvIHNlbmQgcmVxdWVzdHMgdG8gdGhlIFBNVSBpbiBvcmRlciB0byBmb3IgZXhhbXBsZToKPiAr ICogKiBNYW5hZ2UgcG93ZXIgc3RhdGUKPiArICogKiBDb25maWd1cmUgY2xvY2tzCj4gKyAqICog UHJvZ3JhbSBiaXRzdHJlYW1zIGZvciB0aGUgcHJvZ3JhbW1hYmxlIGxvZ2ljCj4gKyAqICogZXRj Cj4gKyAqCj4gKyAqIEFsdGhvdWdoIHRoZSBkZXRhaWxzIG9mIHRoZSBzZXR1cCBhcmUgY29uZmln dXJhYmxlLCBpbiB0aGUgY29tbW9uIGNhc2UKPiArICogdGhlIFBNVSBsaXZlcyBpbiB0aGUgU2Vj dXJlIHdvcmxkLiBOUyBXb3JsZCBjYW5ub3QgZGlyZWN0bHkgY29tbXVuaWNhdGUKPiArICogd2l0 aCBpdCBhbmQgbXVzdCB1c2UgcHJveHkgc2VydmljZXMgZnJvbSBBUk0gVHJ1c3RlZCBGaXJtd2Fy ZSB0byByZWFjaAo+ICsgKiB0aGUgUE1VLgo+ICsgKgo+ICsgKiBQb3dlciBNYW5hZ2VtZW50IG9u IHRoZSBaeW5xTVAgaXMgaW1wbGVtZW50ZWQgaW4gYSBsYXllcmVkIG1hbm5lci4KPiArICogVGhl IFBNVSBrbm93cyBhYm91dCB2YXJpb3VzIG1hc3RlcnMgYW5kIHdpbGwgZW5mb3JjZSBhY2Nlc3Mg Y29udHJvbHMKPiArICogYmFzZWQgb24gYSBwcmUtY29uZmlndXJlZCBwYXJ0aXRpb25pbmcuIFRo aXMgY29uZmlndXJhdGlvbiBkaWN0YXRlcwo+ICsgKiB3aGljaCBkZXZpY2VzIGFyZSBvd25lZCBi eSB0aGUgdmFyaW91cyBtYXN0ZXJzIGFuZCB0aGUgUE1VIEZXIG1ha2VzIHN1cmUKPiArICogdGhh dCBhIGdpdmVuIG1hc3RlciBjYW5ub3QgdHVybiBvZmYgYSBkZXZpY2UgdGhhdCBpdCBkb2VzIG5v dCBvd24gb3IgdGhhdAo+ICsgKiBpcyBpbiB1c2UgYnkgb3RoZXIgbWFzdGVycy4KPiArICoKPiAr ICogVGhlIFBNVSBpcyBub3QgYXdhcmUgb2YgbXVsdGlwbGUgZXhlY3V0aW9uIHN0YXRlcyBpbiBt YXN0ZXJzLgo+ICsgKiBGb3IgZXhhbXBsZSwgaXQgdHJlYXRzIHRoZSBBUk12OCBjb3JlcyBhcyBz aW5nbGUgdW5pdHMgYW5kIGRvZXMgbm90Cj4gKyAqIGRpc3Rpbmd1aXNoIGJldHdlZW4gU2VjdXJl IHZzIE5TIE9TJ3Mgbm9yIGRvZXMgaXQga25vdyBhYm91dCBIeXBlcnZpc29ycwo+ICsgKiBhbmQg bXVsdGlwbGUgZ3Vlc3RzLiBJdCBpcyB1cCB0byBzb2Z0d2FyZSBvbiB0aGUgQVJNdjggY29yZXMg dG8gcHJlc2VudAo+ICsgKiBhIHVuaWZpZWQgdmlldyBvZiBpdHMgcG93ZXIgcmVxdWlyZW1lbnRz Lgo+ICsgKgo+ICsgKiBUbyBpbXBsZW1lbnQgdGhpcyB1bmlmaWVkIHZpZXcsIEFSTSBUcnVzdGVk IEZpcm13YXJlIGF0IEVMMyBwcm92aWRlcwo+ICsgKiBhY2Nlc3MgdG8gdGhlIFBNIEFQSSB2aWEg U01DIGNhbGxzLiBBUk0gVHJ1c3RlZCBGaXJtd2FyZSBpcyByZXNwb25zaWJsZQo+ICsgKiBmb3Ig bWVkaWF0aW5nIGJldHdlZW4gdGhlIFNlY3VyZSBhbmQgdGhlIE5TIHdvcmxkLCByZWplY3Rpbmcg U01DIGNhbGxzCj4gKyAqIHRoYXQgcmVxdWVzdCBjaGFuZ2VzIHRoYXQgYXJlIG5vdCBhbGxvd2Vk Lgo+ICsgKgo+ICsgKiBYZW4gcnVubmluZyBhYm92ZSBBVEYgb3ducyB0aGUgTlMgd29ybGQgYW5k IGlzIHJlc3BvbnNpYmxlIGZvciBwcmVzZW50aW5nCj4gKyAqIHVuaWZpZWQgUE0gcmVxdWVzdHMg dGFraW5nIGFsbCBndWVzdHMgYW5kIHRoZSBoeXBlcnZpc29yIGludG8gYWNjb3VudC4KPiArICoK PiArICogSW1wbGVtZW50YXRpb246Cj4gKyAqIFRoZSBQTSBBUEkgY29udGFpbnMgZGlmZmVyZW50 IGNsYXNzZXMgb2YgY2FsbHMuCj4gKyAqIENlcnRhaW4gY2FsbHMgYXJlIGhhcm1sZXNzIHRvIGV4 cG9zZSB0byBhbnkgZ3Vlc3QuCj4gKyAqIFRoZXNlIGluY2x1ZGUgY2FsbHMgdG8gZ2V0IHRoZSBQ TSBBUEkgVmVyc2lvbiwgb3IgdG8gcmVhZCBvdXQgdGhlIHZlcnNpb24KPiArICogb2YgdGhlIGNo aXAgd2UncmUgcnVubmluZyBvbi4KPiArICoKPiArICogSW4gb3JkZXIgdG8gY29ycmVjdGx5IHZp cnR1YWxpemUgdGhlc2UgY2FsbHMsIHdlIG5lZWQgdG8ga25vdyBpZgo+ICsgKiBndWVzdHMgaXNz dWluZyB0aGVzZSBjYWxscyBoYXZlIG93bmVyc2hpcCBvZiB0aGUgZ2l2ZW4gZGV2aWNlLgo+ICsg KiBUaGUgYXBwcm9hY2ggdGFrZW4gaGVyZSBpcyB0byBtYXAgUE0gQVBJIE5vZGVzIGlkZW50aWZ5 aW5nCj4gKyAqIGEgZGV2aWNlIGludG8gYmFzZSBhZGRyZXNzZXMgZm9yIHJlZ2lzdGVycyB0aGF0 IGJlbG9uZyB0byB0aGF0Cj4gKyAqIHNhbWUgZGV2aWNlLgo+ICsgKgo+ICsgKiBJZiB0aGUgZ3Vl c3QgaGFzIGFjY2VzcyB0byBkZXZpY2VzIHJlZ2lzdGVycywgd2UgZ2l2ZSB0aGUgZ3Vlc3QKPiAr ICogYWNjZXNzIHRvIFBNIEFQSSBjYWxscyB0aGF0IGFmZmVjdCB0aGF0IGRldmljZS4gVGhpcyBp cyBpbXBsZW1lbnRlZAo+ICsgKiBieSBwbV9ub2RlX2FjY2VzcyBhbmQgZG9tYWluX2hhc19ub2Rl X2FjY2VzcygpLgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDx4ZW4vaW9jYXAuaD4KPiArI2luY2x1 ZGUgPHhlbi9zY2hlZC5oPgo+ICAgI2luY2x1ZGUgPGFzbS9yZWdzLmg+Cj4gICAjaW5jbHVkZSA8 YXNtL3BsYXRmb3Jtcy94aWxpbngtenlucW1wLWVlbWkuaD4KPiAgIAo+ICsjaWYgMAo+ICtzdHJ1 Y3QgcG1fYWNjZXNzCj4gK3sKPiArICAgIG1mbl90IG1mbjsKPiArICAgIGJvb2wgaHdkb21fYWNj ZXNzOyAgICAvKiBIVyBkb21haW4gZ2V0cyBhY2Nlc3MgcmVnYXJkbGVzcy4gICovCj4gK307Cj4g Kwo+ICsvKgo+ICsgKiBUaGlzIHRhYmxlIG1hcHMgYSBub2RlIGludG8gYSBtZW1vcnkgYWRkcmVz cy4KClNvbWUgb2YgdGhlIG5vZGVzIGJlbG93IGRvbid0IGhhdmUgbWVtb3J5IGFkZHJlc3MuIFNv IHRoaXMgY29tbWVudCBoYXMgdG8gYmUgCnVwZGF0ZWQuCgo+ICsgKiBJZiBhIGd1ZXN0IGhhcyBh Y2Nlc3MgdG8gdGhlIGFkZHJlc3MsIGl0IGhhcyBlbm91Z2ggY29udHJvbAo+ICsgKiBvdmVyIHRo ZSBub2RlIHRvIGdyYW50IGl0IGFjY2VzcyB0byBFRU1JIGNhbGxzIGZvciB0aGF0IG5vZGUuCj4g KyAqLwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHBtX2FjY2VzcyBwbV9ub2RlX2FjY2Vzc1tdID0g ewo+ICsgICAgLyogTU1fUlBVIGdyYW50cyBhY2Nlc3MgdG8gYWxsIFJQVSBOb2Rlcy4gICovCj4g KyAgICBbTk9ERV9SUFVdID0geyBtZm5faW5pdChNTV9SUFUpIH0sCj4gKyAgICBbTk9ERV9SUFVf MF0gPSB7IG1mbl9pbml0KE1NX1JQVSkgfSwKPiArICAgIFtOT0RFX1JQVV8xXSA9IHsgbWZuX2lu aXQoTU1fUlBVKSB9LAo+ICsgICAgW05PREVfSVBJX1JQVV8wXSA9IHsgbWZuX2luaXQoTU1fUlBV KSB9LAo+ICsKPiArICAgIC8qIEdQVSBub2Rlcy4gICovCj4gKyAgICBbTk9ERV9HUFVdID0geyBt Zm5faW5pdChNTV9HUFUpIH0sCj4gKyAgICBbTk9ERV9HUFVfUFBfMF0gPSB7IG1mbl9pbml0KE1N X0dQVSkgfSwKPiArICAgIFtOT0RFX0dQVV9QUF8xXSA9IHsgbWZuX2luaXQoTU1fR1BVKSB9LAo+ ICsKPiArICAgIFtOT0RFX1VTQl8wXSA9IHsgbWZuX2luaXQoTU1fVVNCM18wX1hIQ0kpIH0sCj4g KyAgICBbTk9ERV9VU0JfMV0gPSB7IG1mbl9pbml0KE1NX1VTQjNfMV9YSENJKSB9LAo+ICsgICAg W05PREVfVFRDXzBdID0geyBtZm5faW5pdChNTV9UVEMwKSB9LAo+ICsgICAgW05PREVfVFRDXzFd ID0geyBtZm5faW5pdChNTV9UVEMxKSB9LAo+ICsgICAgW05PREVfVFRDXzJdID0geyBtZm5faW5p dChNTV9UVEMyKSB9LAo+ICsgICAgW05PREVfVFRDXzNdID0geyBtZm5faW5pdChNTV9UVEMzKSB9 LAo+ICsgICAgW05PREVfU0FUQV0gPSB7IG1mbl9pbml0KE1NX1NBVEFfQUhDSV9IQkEpIH0sCj4g KyAgICBbTk9ERV9FVEhfMF0gPSB7IG1mbl9pbml0KE1NX0dFTTApIH0sCj4gKyAgICBbTk9ERV9F VEhfMV0gPSB7IG1mbl9pbml0KE1NX0dFTTEpIH0sCj4gKyAgICBbTk9ERV9FVEhfMl0gPSB7IG1m bl9pbml0KE1NX0dFTTIpIH0sCj4gKyAgICBbTk9ERV9FVEhfM10gPSB7IG1mbl9pbml0KE1NX0dF TTMpIH0sCj4gKyAgICBbTk9ERV9VQVJUXzBdID0geyBtZm5faW5pdChNTV9VQVJUMCkgfSwKPiAr ICAgIFtOT0RFX1VBUlRfMV0gPSB7IG1mbl9pbml0KE1NX1VBUlQxKSB9LAo+ICsgICAgW05PREVf U1BJXzBdID0geyBtZm5faW5pdChNTV9TUEkwKSB9LAo+ICsgICAgW05PREVfU1BJXzFdID0geyBt Zm5faW5pdChNTV9TUEkxKSB9LAo+ICsgICAgW05PREVfSTJDXzBdID0geyBtZm5faW5pdChNTV9J MkMwKSB9LAo+ICsgICAgW05PREVfSTJDXzFdID0geyBtZm5faW5pdChNTV9JMkMxKSB9LAo+ICsg ICAgW05PREVfU0RfMF0gPSB7IG1mbl9pbml0KE1NX1NEMCkgfSwKPiArICAgIFtOT0RFX1NEXzFd ID0geyBtZm5faW5pdChNTV9TRDEpIH0sCj4gKyAgICBbTk9ERV9EUF0gPSB7IG1mbl9pbml0KE1N X0RQKSB9LAo+ICsKPiArICAgIC8qIEd1ZXN0IHdpdGggR0RNQSBDaGFubmVsIDAgZ2V0cyBQTSBh Y2Nlc3MuIE90aGVyIGd1ZXN0cyBkb24ndC4gICovCj4gKyAgICBbTk9ERV9HRE1BXSA9IHsgbWZu X2luaXQoTU1fR0RNQV9DSDApIH0sCj4gKyAgICAvKiBHdWVzdCB3aXRoIEFETUEgQ2hhbm5lbCAw IGdldHMgUE0gYWNjZXNzLiBPdGhlciBndWVzdHMgZG9uJ3QuICAqLwo+ICsgICAgW05PREVfQURN QV0gPSB7IG1mbl9pbml0KE1NX0FETUFfQ0gwKSB9LAo+ICsKPiArICAgIFtOT0RFX05BTkRdID0g eyBtZm5faW5pdChNTV9OQU5EKSB9LAo+ICsgICAgW05PREVfUVNQSV0gPSB7IG1mbl9pbml0KE1N X1FTUEkpIH0sCj4gKyAgICBbTk9ERV9HUElPXSA9IHsgbWZuX2luaXQoTU1fR1BJTykgfSwKPiAr ICAgIFtOT0RFX0NBTl8wXSA9IHsgbWZuX2luaXQoTU1fQ0FOMCkgfSwKPiArICAgIFtOT0RFX0NB Tl8xXSA9IHsgbWZuX2luaXQoTU1fQ0FOMSkgfSwKPiArCj4gKyAgICAvKiBPbmx5IGZvciB0aGUg aGFyZHdhcmUgZG9tYWluLiAgKi8KPiArICAgIFtOT0RFX0FGSV0gPSB7IC5od2RvbV9hY2Nlc3Mg PSB0cnVlIH0sCj4gKyAgICBbTk9ERV9BUExMXSA9IHsgLmh3ZG9tX2FjY2VzcyA9IHRydWUgfSwK PiArICAgIFtOT0RFX1ZQTExdID0geyAuaHdkb21fYWNjZXNzID0gdHJ1ZSB9LAo+ICsgICAgW05P REVfRFBMTF0gPSB7IC5od2RvbV9hY2Nlc3MgPSB0cnVlIH0sCj4gKyAgICBbTk9ERV9SUExMXSA9 IHsgLmh3ZG9tX2FjY2VzcyA9IHRydWUgfSwKPiArICAgIFtOT0RFX0lPUExMXSA9IHsgLmh3ZG9t X2FjY2VzcyA9IHRydWUgfSwKPiArICAgIFtOT0RFX0REUl0gPSB7IC5od2RvbV9hY2Nlc3MgPSB0 cnVlIH0sCj4gKyAgICBbTk9ERV9JUElfQVBVXSA9IHsgLmh3ZG9tX2FjY2VzcyA9IHRydWUgfSwK PiArICAgIFtOT0RFX1BDQVBdID0geyAuaHdkb21fYWNjZXNzID0gdHJ1ZSB9LAo+ICsKPiArICAg IFtOT0RFX1BDSUVdID0geyBtZm5faW5pdChNTV9QQ0lFX0FUVFJJQikgfSwKPiArICAgIFtOT0RF X1JUQ10gPSB7IG1mbl9pbml0KE1NX1JUQykgfSwKPiArfTsKPiArCj4gKy8qCj4gKyAqIFRoaXMg dGFibGUgbWFwcyByZXNldCBsaW5lIElEcyBpbnRvIGEgbWVtb3J5IGFkZHJlc3MuCgpTYW1lIGhl cmUuCgo+ICsgKiBJZiBhIGd1ZXN0IGhhcyBhY2Nlc3MgdG8gdGhlIGFkZHJlc3MsIGl0IGhhcyBl bm91Z2ggY29udHJvbAo+ICsgKiBvdmVyIHRoZSBhZmZlY3RlZCBub2RlIHRvIGdyYW50IGl0IGFj Y2VzcyB0byBFRU1JIGNhbGxzIGZvcgo+ICsgKiByZXNldHRpbmcgdGhhdCBub2RlLgo+ICsgKi8K PiArI2RlZmluZSBYSUxQTV9SRVNFVF9JRFgobikgKG4gLSBYSUxQTV9SRVNFVF9QQ0lFX0NGRykK PiArc3RhdGljIGNvbnN0IHN0cnVjdCBwbV9hY2Nlc3MgcG1fcmVzZXRfYWNjZXNzW10gPSB7Cj4g KyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX1BDSUVfQ0ZHKV0gPSB7IG1mbl9pbml0 KE1NX0FYSVBDSUVfTUFJTikgfSwKPiArICAgIFtYSUxQTV9SRVNFVF9JRFgoWElMUE1fUkVTRVRf UENJRV9CUklER0UpXSA9IHsgbWZuX2luaXQoTU1fUENJRV9BVFRSSUIpIH0sCj4gKyAgICBbWElM UE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX1BDSUVfQ1RSTCldID0geyBtZm5faW5pdChNTV9QQ0lF X0FUVFJJQikgfSwKPiArCj4gKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX0RQKV0g PSB7IG1mbl9pbml0KE1NX0RQKSB9LAo+ICsgICAgW1hJTFBNX1JFU0VUX0lEWChYSUxQTV9SRVNF VF9TV0RUX0NSRildID0geyBtZm5faW5pdChNTV9TV0RUKSB9LAo+ICsgICAgW1hJTFBNX1JFU0VU X0lEWChYSUxQTV9SRVNFVF9BRklfRk01KV0gPSB7IC5od2RvbV9hY2Nlc3MgPSB0cnVlIH0sCj4g KyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX0FGSV9GTTQpXSA9IHsgLmh3ZG9tX2Fj Y2VzcyA9IHRydWUgfSwKPiArICAgIFtYSUxQTV9SRVNFVF9JRFgoWElMUE1fUkVTRVRfQUZJX0ZN MyldID0geyAuaHdkb21fYWNjZXNzID0gdHJ1ZSB9LAo+ICsgICAgW1hJTFBNX1JFU0VUX0lEWChY SUxQTV9SRVNFVF9BRklfRk0yKV0gPSB7IC5od2RvbV9hY2Nlc3MgPSB0cnVlIH0sCj4gKyAgICBb WElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX0FGSV9GTTEpXSA9IHsgLmh3ZG9tX2FjY2VzcyA9 IHRydWUgfSwKPiArICAgIFtYSUxQTV9SRVNFVF9JRFgoWElMUE1fUkVTRVRfQUZJX0ZNMCldID0g eyAuaHdkb21fYWNjZXNzID0gdHJ1ZSB9LAo+ICsKPiArICAgIC8qIENoYW5uZWwgMCBncmFudHMg UE0gYWNjZXNzLiAgKi8KPiArICAgIFtYSUxQTV9SRVNFVF9JRFgoWElMUE1fUkVTRVRfR0RNQSld ID0geyBtZm5faW5pdChNTV9HRE1BX0NIMCkgfSwKPiArICAgIFtYSUxQTV9SRVNFVF9JRFgoWElM UE1fUkVTRVRfR1BVX1BQMSldID0geyBtZm5faW5pdChNTV9HUFUpIH0sCj4gKyAgICBbWElMUE1f UkVTRVRfSURYKFhJTFBNX1JFU0VUX0dQVV9QUDApXSA9IHsgbWZuX2luaXQoTU1fR1BVKSB9LAo+ ICsgICAgW1hJTFBNX1JFU0VUX0lEWChYSUxQTV9SRVNFVF9HVCldID0geyAuaHdkb21fYWNjZXNz ID0gdHJ1ZSB9LAo+ICsgICAgW1hJTFBNX1JFU0VUX0lEWChYSUxQTV9SRVNFVF9TQVRBKV0gPSB7 IG1mbl9pbml0KE1NX1NBVEFfQUhDSV9IQkEpIH0sCj4gKwo+ICsgICAgW1hJTFBNX1JFU0VUX0lE WChYSUxQTV9SRVNFVF9BUE1fRlBEKV0gPSB7IC5od2RvbV9hY2Nlc3MgPSB0cnVlIH0sCj4gKyAg ICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX1NPRlQpXSA9IHsgLmh3ZG9tX2FjY2VzcyA9 IHRydWUgfSwKPiArCj4gKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX0dFTTApXSA9 IHsgbWZuX2luaXQoTU1fR0VNMCkgfSwKPiArICAgIFtYSUxQTV9SRVNFVF9JRFgoWElMUE1fUkVT RVRfR0VNMSldID0geyBtZm5faW5pdChNTV9HRU0xKSB9LAo+ICsgICAgW1hJTFBNX1JFU0VUX0lE WChYSUxQTV9SRVNFVF9HRU0yKV0gPSB7IG1mbl9pbml0KE1NX0dFTTIpIH0sCj4gKyAgICBbWElM UE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX0dFTTMpXSA9IHsgbWZuX2luaXQoTU1fR0VNMykgfSwK PiArCj4gKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX1FTUEkpXSA9IHsgbWZuX2lu aXQoTU1fUVNQSSkgfSwKPiArICAgIFtYSUxQTV9SRVNFVF9JRFgoWElMUE1fUkVTRVRfVUFSVDAp XSA9IHsgbWZuX2luaXQoTU1fVUFSVDApIH0sCj4gKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBN X1JFU0VUX1VBUlQxKV0gPSB7IG1mbl9pbml0KE1NX1VBUlQxKSB9LAo+ICsgICAgW1hJTFBNX1JF U0VUX0lEWChYSUxQTV9SRVNFVF9TUEkwKV0gPSB7IG1mbl9pbml0KE1NX1NQSTApIH0sCj4gKyAg ICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX1NQSTEpXSA9IHsgbWZuX2luaXQoTU1fU1BJ MSkgfSwKPiArICAgIFtYSUxQTV9SRVNFVF9JRFgoWElMUE1fUkVTRVRfU0RJTzApXSA9IHsgbWZu X2luaXQoTU1fU0QwKSB9LAo+ICsgICAgW1hJTFBNX1JFU0VUX0lEWChYSUxQTV9SRVNFVF9TRElP MSldID0geyBtZm5faW5pdChNTV9TRDEpIH0sCj4gKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBN X1JFU0VUX0NBTjApXSA9IHsgbWZuX2luaXQoTU1fQ0FOMCkgfSwKPiArICAgIFtYSUxQTV9SRVNF VF9JRFgoWElMUE1fUkVTRVRfQ0FOMSldID0geyBtZm5faW5pdChNTV9DQU4xKSB9LAo+ICsgICAg W1hJTFBNX1JFU0VUX0lEWChYSUxQTV9SRVNFVF9JMkMwKV0gPSB7IG1mbl9pbml0KE1NX0kyQzAp IH0sCj4gKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX0kyQzEpXSA9IHsgbWZuX2lu aXQoTU1fSTJDMSkgfSwKPiArICAgIFtYSUxQTV9SRVNFVF9JRFgoWElMUE1fUkVTRVRfVFRDMCld ID0geyBtZm5faW5pdChNTV9UVEMwKSB9LAo+ICsgICAgW1hJTFBNX1JFU0VUX0lEWChYSUxQTV9S RVNFVF9UVEMxKV0gPSB7IG1mbl9pbml0KE1NX1RUQzEpIH0sCj4gKyAgICBbWElMUE1fUkVTRVRf SURYKFhJTFBNX1JFU0VUX1RUQzIpXSA9IHsgbWZuX2luaXQoTU1fVFRDMikgfSwKPiArICAgIFtY SUxQTV9SRVNFVF9JRFgoWElMUE1fUkVTRVRfVFRDMyldID0geyBtZm5faW5pdChNTV9UVEMzKSB9 LAo+ICsgICAgW1hJTFBNX1JFU0VUX0lEWChYSUxQTV9SRVNFVF9TV0RUX0NSTCldID0geyBtZm5f aW5pdChNTV9TV0RUKSB9LAo+ICsgICAgW1hJTFBNX1JFU0VUX0lEWChYSUxQTV9SRVNFVF9OQU5E KV0gPSB7IG1mbl9pbml0KE1NX05BTkQpIH0sCj4gKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBN X1JFU0VUX0FETUEpXSA9IHsgbWZuX2luaXQoTU1fQURNQV9DSDApIH0sCj4gKyAgICBbWElMUE1f UkVTRVRfSURYKFhJTFBNX1JFU0VUX0dQSU8pXSA9IHsgbWZuX2luaXQoTU1fR1BJTykgfSwKPiAr ICAgIFtYSUxQTV9SRVNFVF9JRFgoWElMUE1fUkVTRVRfSU9VX0NDKV0gPSB7IC5od2RvbV9hY2Nl c3MgPSB0cnVlIH0sCj4gKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX1RJTUVTVEFN UCldID0geyAuaHdkb21fYWNjZXNzID0gdHJ1ZSB9LAo+ICsgICAgW1hJTFBNX1JFU0VUX0lEWChY SUxQTV9SRVNFVF9SUFVfUjUwKV0gPSB7IG1mbl9pbml0KE1NX1JQVSkgfSwKPiArICAgIFtYSUxQ TV9SRVNFVF9JRFgoWElMUE1fUkVTRVRfUlBVX1I1MSldID0geyBtZm5faW5pdChNTV9SUFUpIH0s Cj4gKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX1JQVV9BTUJBKV0gPSB7IG1mbl9p bml0KE1NX1JQVSkgfSwKPiArICAgIFtYSUxQTV9SRVNFVF9JRFgoWElMUE1fUkVTRVRfT0NNKV0g PSB7IC5od2RvbV9hY2Nlc3MgPSB0cnVlIH0sCj4gKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBN X1JFU0VUX1JQVV9QR0UpXSA9IHsgbWZuX2luaXQoTU1fUlBVKSB9LAo+ICsKPiArICAgIFtYSUxQ TV9SRVNFVF9JRFgoWElMUE1fUkVTRVRfVVNCMF9DT1JFUkVTRVQpXSA9IHsgbWZuX2luaXQoTU1f VVNCM18wX1hIQ0kpIH0sCj4gKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX1VTQjBf SElCRVJSRVNFVCldID0geyBtZm5faW5pdChNTV9VU0IzXzBfWEhDSSkgfSwKPiArICAgIFtYSUxQ TV9SRVNFVF9JRFgoWElMUE1fUkVTRVRfVVNCMF9BUEIpXSA9IHsgbWZuX2luaXQoTU1fVVNCM18w X1hIQ0kpIH0sCj4gKwo+ICsgICAgW1hJTFBNX1JFU0VUX0lEWChYSUxQTV9SRVNFVF9VU0IxX0NP UkVSRVNFVCldID0geyBtZm5faW5pdChNTV9VU0IzXzFfWEhDSSkgfSwKPiArICAgIFtYSUxQTV9S RVNFVF9JRFgoWElMUE1fUkVTRVRfVVNCMV9ISUJFUlJFU0VUKV0gPSB7IG1mbl9pbml0KE1NX1VT QjNfMV9YSENJKSB9LAo+ICsgICAgW1hJTFBNX1JFU0VUX0lEWChYSUxQTV9SRVNFVF9VU0IxX0FQ QildID0geyBtZm5faW5pdChNTV9VU0IzXzFfWEhDSSkgfSwKPiArCj4gKyAgICBbWElMUE1fUkVT RVRfSURYKFhJTFBNX1JFU0VUX0lQSSldID0geyAuaHdkb21fYWNjZXNzID0gdHJ1ZSB9LAo+ICsg ICAgW1hJTFBNX1JFU0VUX0lEWChYSUxQTV9SRVNFVF9BUE1fTFBEKV0gPSB7IC5od2RvbV9hY2Nl c3MgPSB0cnVlIH0sCj4gKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX1JUQyldID0g eyBtZm5faW5pdChNTV9SVEMpIH0sCj4gKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VU X1NZU01PTildID0geyAuaHdkb21fYWNjZXNzID0gdHJ1ZSB9LAo+ICsgICAgW1hJTFBNX1JFU0VU X0lEWChYSUxQTV9SRVNFVF9BRklfRk02KV0gPSB7IC5od2RvbV9hY2Nlc3MgPSB0cnVlIH0sCj4g KyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX0xQRF9TV0RUKV0gPSB7IG1mbl9pbml0 KE1NX1NXRFQpIH0sCj4gKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX0ZQRCldID0g eyAuaHdkb21fYWNjZXNzID0gdHJ1ZSB9LAo+ICsgICAgW1hJTFBNX1JFU0VUX0lEWChYSUxQTV9S RVNFVF9SUFVfREJHMSldID0geyBtZm5faW5pdChNTV9SUFUpIH0sCj4gKyAgICBbWElMUE1fUkVT RVRfSURYKFhJTFBNX1JFU0VUX1JQVV9EQkcwKV0gPSB7IG1mbl9pbml0KE1NX1JQVSkgfSwKPiAr ICAgIFtYSUxQTV9SRVNFVF9JRFgoWElMUE1fUkVTRVRfREJHX0xQRCldID0geyAuaHdkb21fYWNj ZXNzID0gdHJ1ZSB9LAo+ICsgICAgW1hJTFBNX1JFU0VUX0lEWChYSUxQTV9SRVNFVF9EQkdfRlBE KV0gPSB7IC5od2RvbV9hY2Nlc3MgPSB0cnVlIH0sCj4gKyAgICBbWElMUE1fUkVTRVRfSURYKFhJ TFBNX1JFU0VUX0FQTEwpXSA9IHsgLmh3ZG9tX2FjY2VzcyA9IHRydWUgfSwKPiArICAgIFtYSUxQ TV9SRVNFVF9JRFgoWElMUE1fUkVTRVRfRFBMTCldID0geyAuaHdkb21fYWNjZXNzID0gdHJ1ZSB9 LAo+ICsgICAgW1hJTFBNX1JFU0VUX0lEWChYSUxQTV9SRVNFVF9WUExMKV0gPSB7IC5od2RvbV9h Y2Nlc3MgPSB0cnVlIH0sCj4gKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX0lPUExM KV0gPSB7IC5od2RvbV9hY2Nlc3MgPSB0cnVlIH0sCj4gKyAgICBbWElMUE1fUkVTRVRfSURYKFhJ TFBNX1JFU0VUX1JQTEwpXSA9IHsgLmh3ZG9tX2FjY2VzcyA9IHRydWUgfSwKPiArICAgIFtYSUxQ TV9SRVNFVF9JRFgoWElMUE1fUkVTRVRfR1BPM19QTF8wKV0gPSB7IC5od2RvbV9hY2Nlc3MgPSB0 cnVlIH0sCj4gKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX0dQTzNfUExfMSldID0g eyAuaHdkb21fYWNjZXNzID0gdHJ1ZSB9LAo+ICsgICAgW1hJTFBNX1JFU0VUX0lEWChYSUxQTV9S RVNFVF9HUE8zX1BMXzIpXSA9IHsgLmh3ZG9tX2FjY2VzcyA9IHRydWUgfSwKPiArICAgIFtYSUxQ TV9SRVNFVF9JRFgoWElMUE1fUkVTRVRfR1BPM19QTF8zKV0gPSB7IC5od2RvbV9hY2Nlc3MgPSB0 cnVlIH0sCj4gKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX0dQTzNfUExfNCldID0g eyAuaHdkb21fYWNjZXNzID0gdHJ1ZSB9LAo+ICsgICAgW1hJTFBNX1JFU0VUX0lEWChYSUxQTV9S RVNFVF9HUE8zX1BMXzUpXSA9IHsgLmh3ZG9tX2FjY2VzcyA9IHRydWUgfSwKPiArICAgIFtYSUxQ TV9SRVNFVF9JRFgoWElMUE1fUkVTRVRfR1BPM19QTF82KV0gPSB7IC5od2RvbV9hY2Nlc3MgPSB0 cnVlIH0sCj4gKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX0dQTzNfUExfNyldID0g eyAuaHdkb21fYWNjZXNzID0gdHJ1ZSB9LAo+ICsgICAgW1hJTFBNX1JFU0VUX0lEWChYSUxQTV9S RVNFVF9HUE8zX1BMXzgpXSA9IHsgLmh3ZG9tX2FjY2VzcyA9IHRydWUgfSwKPiArICAgIFtYSUxQ TV9SRVNFVF9JRFgoWElMUE1fUkVTRVRfR1BPM19QTF85KV0gPSB7IC5od2RvbV9hY2Nlc3MgPSB0 cnVlIH0sCj4gKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX0dQTzNfUExfMTApXSA9 IHsgLmh3ZG9tX2FjY2VzcyA9IHRydWUgfSwKPiArICAgIFtYSUxQTV9SRVNFVF9JRFgoWElMUE1f UkVTRVRfR1BPM19QTF8xMSldID0geyAuaHdkb21fYWNjZXNzID0gdHJ1ZSB9LAo+ICsgICAgW1hJ TFBNX1JFU0VUX0lEWChYSUxQTV9SRVNFVF9HUE8zX1BMXzEyKV0gPSB7IC5od2RvbV9hY2Nlc3Mg PSB0cnVlIH0sCj4gKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX0dQTzNfUExfMTMp XSA9IHsgLmh3ZG9tX2FjY2VzcyA9IHRydWUgfSwKPiArICAgIFtYSUxQTV9SRVNFVF9JRFgoWElM UE1fUkVTRVRfR1BPM19QTF8xNCldID0geyAuaHdkb21fYWNjZXNzID0gdHJ1ZSB9LAo+ICsgICAg W1hJTFBNX1JFU0VUX0lEWChYSUxQTV9SRVNFVF9HUE8zX1BMXzE1KV0gPSB7IC5od2RvbV9hY2Nl c3MgPSB0cnVlIH0sCj4gKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX0dQTzNfUExf MTYpXSA9IHsgLmh3ZG9tX2FjY2VzcyA9IHRydWUgfSwKPiArICAgIFtYSUxQTV9SRVNFVF9JRFgo WElMUE1fUkVTRVRfR1BPM19QTF8xNyldID0geyAuaHdkb21fYWNjZXNzID0gdHJ1ZSB9LAo+ICsg ICAgW1hJTFBNX1JFU0VUX0lEWChYSUxQTV9SRVNFVF9HUE8zX1BMXzE4KV0gPSB7IC5od2RvbV9h Y2Nlc3MgPSB0cnVlIH0sCj4gKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX0dQTzNf UExfMTkpXSA9IHsgLmh3ZG9tX2FjY2VzcyA9IHRydWUgfSwKPiArICAgIFtYSUxQTV9SRVNFVF9J RFgoWElMUE1fUkVTRVRfR1BPM19QTF8yMCldID0geyAuaHdkb21fYWNjZXNzID0gdHJ1ZSB9LAo+ ICsgICAgW1hJTFBNX1JFU0VUX0lEWChYSUxQTV9SRVNFVF9HUE8zX1BMXzIxKV0gPSB7IC5od2Rv bV9hY2Nlc3MgPSB0cnVlIH0sCj4gKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VUX0dQ TzNfUExfMjIpXSA9IHsgLmh3ZG9tX2FjY2VzcyA9IHRydWUgfSwKPiArICAgIFtYSUxQTV9SRVNF VF9JRFgoWElMUE1fUkVTRVRfR1BPM19QTF8yMyldID0geyAuaHdkb21fYWNjZXNzID0gdHJ1ZSB9 LAo+ICsgICAgW1hJTFBNX1JFU0VUX0lEWChYSUxQTV9SRVNFVF9HUE8zX1BMXzI0KV0gPSB7IC5o d2RvbV9hY2Nlc3MgPSB0cnVlIH0sCj4gKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JFU0VU X0dQTzNfUExfMjUpXSA9IHsgLmh3ZG9tX2FjY2VzcyA9IHRydWUgfSwKPiArICAgIFtYSUxQTV9S RVNFVF9JRFgoWElMUE1fUkVTRVRfR1BPM19QTF8yNildID0geyAuaHdkb21fYWNjZXNzID0gdHJ1 ZSB9LAo+ICsgICAgW1hJTFBNX1JFU0VUX0lEWChYSUxQTV9SRVNFVF9HUE8zX1BMXzI3KV0gPSB7 IC5od2RvbV9hY2Nlc3MgPSB0cnVlIH0sCj4gKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBNX1JF U0VUX0dQTzNfUExfMjgpXSA9IHsgLmh3ZG9tX2FjY2VzcyA9IHRydWUgfSwKPiArICAgIFtYSUxQ TV9SRVNFVF9JRFgoWElMUE1fUkVTRVRfR1BPM19QTF8yOSldID0geyAuaHdkb21fYWNjZXNzID0g dHJ1ZSB9LAo+ICsgICAgW1hJTFBNX1JFU0VUX0lEWChYSUxQTV9SRVNFVF9HUE8zX1BMXzMwKV0g PSB7IC5od2RvbV9hY2Nlc3MgPSB0cnVlIH0sCj4gKyAgICBbWElMUE1fUkVTRVRfSURYKFhJTFBN X1JFU0VUX0dQTzNfUExfMzEpXSA9IHsgLmh3ZG9tX2FjY2VzcyA9IHRydWUgfSwKPiArICAgIFtY SUxQTV9SRVNFVF9JRFgoWElMUE1fUkVTRVRfUlBVX0xTKV0gPSB7IG1mbl9pbml0KE1NX1JQVSkg fSwKPiArICAgIFtYSUxQTV9SRVNFVF9JRFgoWElMUE1fUkVTRVRfUFNfT05MWSldID0geyAuaHdk b21fYWNjZXNzID0gdHJ1ZSB9LAo+ICsgICAgW1hJTFBNX1JFU0VUX0lEWChYSUxQTV9SRVNFVF9Q TCldID0geyAuaHdkb21fYWNjZXNzID0gdHJ1ZSB9LAo+ICt9Owo+ICsKPiArc3RhdGljIGJvb2wg cG1fY2hlY2tfYWNjZXNzKGNvbnN0IHN0cnVjdCBwbV9hY2Nlc3MgKmFjbCwgc3RydWN0IGRvbWFp biAqZCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGlkeCkKPiArewo+ ICsgICAgaWYgKCBhY2xbaWR4XS5od2RvbV9hY2Nlc3MgJiYgaXNfaGFyZHdhcmVfZG9tYWluKGQp ICkKPiArICAgICAgICByZXR1cm4gdHJ1ZTsKPiArCj4gKyAgICBpZiAoICFtZm5feChhY2xbaWR4 XS5tZm4pICkKClRlY2huaWNhbGx5IDAgaXMgYSB2YWxpZCBtZm4uIElmIHlvdSB3YW50IHRvIGVu Y29kZSBhbiBpbnZhbGlkIHZhbHVlIHRoZW4gCk1GTl9JTlZBTElEIGlzIHNhZmVyLgoKQnV0IHdo YXQgYXJlIHlvdSB0cnlpbmcgdG8gcHJldmVudD8gQXJlIHRoZSBub2RlIElEcyBub3QgYWxsb2Nh dGVkIGNvbnRpZ3VvdXNseT8KCj4gKyAgICAgICAgcmV0dXJuIGZhbHNlOwo+ICsKPiArICAgIHJl dHVybiBpb21lbV9hY2Nlc3NfcGVybWl0dGVkKGQsIG1mbl94KGFjbFtpZHhdLm1mbiksIG1mbl94 KGFjbFtpZHhdLm1mbikpOwo+ICt9Cj4gKwo+ICsvKiBDaGVjayBpZiBhIGRvbWFpbiBoYXMgYWNj ZXNzIHRvIGEgbm9kZS4gICovCj4gK3N0YXRpYyBib29sIGRvbWFpbl9oYXNfbm9kZV9hY2Nlc3Mo c3RydWN0IGRvbWFpbiAqZCwgdWludDMyX3Qgbm9kZWlkKQo+ICt7Cj4gKyAgICBpZiAoIG5vZGVp ZCA+PSBBUlJBWV9TSVpFKHBtX25vZGVfYWNjZXNzKSApCj4gKyAgICAgICAgcmV0dXJuIGZhbHNl Owo+ICsKPiArICAgIHJldHVybiBwbV9jaGVja19hY2Nlc3MocG1fbm9kZV9hY2Nlc3MsIGQsIG5v ZGVpZCk7Cj4gK30KPiArCj4gKy8qIENoZWNrIGlmIGEgZG9tYWluIGhhcyBhY2Nlc3MgdG8gYSBy ZXNldCBsaW5lLiAgKi8KPiArc3RhdGljIGJvb2wgZG9tYWluX2hhc19yZXNldF9hY2Nlc3Moc3Ry dWN0IGRvbWFpbiAqZCwgdWludDMyX3QgcnN0KQo+ICt7Cj4gKyAgICBpZiAoIHJzdCA8IFhJTFBN X1JFU0VUX1BDSUVfQ0ZHICkKPiArICAgICAgICByZXR1cm4gZmFsc2U7Cj4gKwo+ICsgICAgcnN0 IC09IFhJTFBNX1JFU0VUX1BDSUVfQ0ZHOwo+ICsKPiArICAgIGlmICggcnN0ID49IEFSUkFZX1NJ WkUocG1fcmVzZXRfYWNjZXNzKSApCj4gKyAgICAgICAgcmV0dXJuIGZhbHNlOwoKSSB0aGluayB5 b3UgY2FuIG1ha2UgdGhpcyBjb2RlIG5vIHJlbHkgYXQgYWxsIG9uIFhJTFBNX1JFU0VUX1BDSUVf Q0ZHIGJ5IHVzaW5nIApYSUxQTV9SRVNFVF9JRFguCgppZiAoIFhJTFBNX1JFU0VUX0lEWChyc3Qp ID49IEFSUkFZX1NJWkUocG1fcmVzZXRfYWNjZXNzKSApCiAgICByZXR1cm4gZmFsc2U7Cgpyc3Qg PSBYSUxQTV9SRVNFVF9JRFgocnN0KTsKCldlIHJlbHkgb24gdGhlIHVuc2lnbmVkIHVuZGVyZmxv dyB0byBjYXRjaCB2YWx1ZSBiZWxvdyBYSUxQTV9SRVNFVF9QQ0lFX0NGRyBhbmQgCm1ha2UgdGhl IGNvZGUgbGVzcyBlcnJvciBwcm9uZSB0byBjaGFuZ2UgdGhlIGFycmF5IHdpdGhvdXQgdGhlIGNv ZGUgaGVyZS4KCj4gKwo+ICsgICAgcmV0dXJuIHBtX2NoZWNrX2FjY2VzcyhwbV9yZXNldF9hY2Nl c3MsIGQsIHJzdCk7Cj4gK30KPiArCj4gKy8qCj4gKyAqIENoZWNrIGlmIGEgZ2l2ZW4gZG9tYWlu IGhhcyBhY2Nlc3MgdG8gcGVyZm9ybSBhbiBpbmRpcmVjdAo+ICsgKiBNTUlPIGFjY2Vzcy4KPiAr ICoKPiArICogSWYgdGhlIHByb3ZpZGVkIG1hc2sgaXMgaW52YWxpZCwgaXQgd2lsbCBiZSBmaXhl ZCB1cC4KPiArICovCj4gK3N0YXRpYyBib29sIGRvbWFpbl9oYXNfbW1pb19hY2Nlc3Moc3RydWN0 IGRvbWFpbiAqZCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHdy aXRlLCBwYWRkcl90IGFkZHIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dWludDMyX3QgKm1hc2spCj4gK3sKPiArICAgIHVuc2lnbmVkIGludCBpOwo+ICsgICAgYm9vbCBy ZXQgPSBmYWxzZTsKPiArICAgIHVpbnQzMl90IHByb3RfbWFzayA9IDA7Cj4gKwo+ICsgICAgLyoK PiArICAgICAqIFRoZSBoYXJkd2FyZSBkb21haW4gZ2V0cyByZWFkIGFjY2VzcyB0byBldmVyeXRo aW5nLgo+ICsgICAgICogTG93ZXIgbGF5ZXJzIHdpbGwgZG8gZnVydGhlciBmaWx0ZXJpbmcuCj4g KyAgICAgKi8KPiArICAgIGlmICggIXdyaXRlICYmIGlzX2hhcmR3YXJlX2RvbWFpbihkKSApCj4g KyAgICAgICAgcmV0dXJuIHRydWU7Cj4gKwo+ICsgICAgLyogU2NhbiB0aGUgQUNMLiAgKi8KPiAr ICAgIGZvciAoIGkgPSAwOyBpIDwgQVJSQVlfU0laRShwbV9tbWlvX2FjY2Vzcyk7IGkrKyApCj4g KyAgICB7Cj4gKyAgICAgICAgQVNTRVJUKHBtX21taW9fYWNjZXNzW2ldLnN0YXJ0ICsgcG1fbW1p b19hY2Nlc3NbaV0uc2l6ZSA+PQo+ICsgICAgICAgICAgICAgICBwbV9tbWlvX2FjY2Vzc1tpXS5z dGFydCk7Cj4gKwo+ICsgICAgICAgIGlmICggYWRkciA8IHBtX21taW9fYWNjZXNzW2ldLnN0YXJ0 ICkKPiArICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwo+ICsgICAgICAgIGlmICggYWRkciA+PSBw bV9tbWlvX2FjY2Vzc1tpXS5zdGFydCArIHBtX21taW9fYWNjZXNzW2ldLnNpemUgKQo+ICsgICAg ICAgICAgICBjb250aW51ZTsKPiArCj4gKyAgICAgICAgaWYgKCB3cml0ZSAmJiBwbV9tbWlvX2Fj Y2Vzc1tpXS5yZWFkb25seSApCj4gKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKPiArICAgICAg ICBpZiAoIHBtX21taW9fYWNjZXNzW2ldLmh3ZG9tX2FjY2VzcyAmJiAhaXNfaGFyZHdhcmVfZG9t YWluKGQpICkKPiArICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwo+ICsgICAgICAgIGlmICggIWRv bWFpbl9oYXNfbm9kZV9hY2Nlc3MoZCwgcG1fbW1pb19hY2Nlc3NbaV0ubm9kZSkgKQo+ICsgICAg ICAgICAgICByZXR1cm4gZmFsc2U7Cj4gKwo+ICsgICAgICAgIC8qIFdlJ3ZlIGdvdCBhY2Nlc3Mg dG8gdGhpcyByZWcgKG9yIHBhcnRzIG9mIGl0KS4gICovCj4gKyAgICAgICAgcmV0ID0gdHJ1ZTsK PiArCj4gKyAgICAgICAgLyogUGVybWl0IHdyaXRlIGFjY2VzcyB0byBzZWxlY3RlZCBiaXRzLiAg Ki8KPiArICAgICAgICBwcm90X21hc2sgfD0gcG1fbW1pb19hY2Nlc3NbaV0ubWFzayA/OiBHRU5N QVNLKDMxLCAwKTsKClRoZSBmaWVsZCBtYXNrIGRvZXMgbm90IHNlZW0gdG8gZXhpc3QuCgo+ICsg ICAgICAgIGJyZWFrOwo+ICsgICAgfQo+ICsKPiArICAgIC8qCj4gKyAgICAgKiBNYXNraW5nIG9u bHkgYXBwbGllcyB0byB3cml0ZXM6IHZhbHVlcyBhcmUgc2FmZSB0byByZWFkLCBidXQgbm90Cj4g KyAgICAgKiBhbGwgYml0cyBhcmUgd3JpdGVhYmxlLgo+ICsgICAgICovCj4gKyAgICBpZiAoIHdy aXRlICkKPiArICAgICAgICAqbWFzayAmPSBwcm90X21hc2s7Cj4gKwo+ICsgICAgcmV0dXJuIHJl dDsKPiArfQo+ICsjZW5kaWYKPiArCj4gICBib29sIHp5bnFtcF9lZW1pKHN0cnVjdCBjcHVfdXNl cl9yZWdzICpyZWdzKQo+ICAgewo+ICAgICAgIHJldHVybiBmYWxzZTsKPiAKCkNoZWVycywKCgot LSAKSnVsaWVuIEdyYWxsCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0 Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRl dmVs