From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yu Zhang Subject: Re: [PATCH v7 2/5] x86/ioreq server: Add DMOP to map guest ram with p2m_ioreq_server to an ioreq server. Date: Tue, 14 Mar 2017 15:28:15 +0800 Message-ID: <58C79B8F.9030007@linux.intel.com> References: <1488987232-12349-1-git-send-email-yu.c.zhang@linux.intel.com> <1488987232-12349-3-git-send-email-yu.c.zhang@linux.intel.com> <58C2D462020000780014203E@prv-mh.provo.novell.com> <58C3B85F.6060205@linux.intel.com> <58C68E7102000078001426DA@prv-mh.provo.novell.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <58C68E7102000078001426DA@prv-mh.provo.novell.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Jan Beulich , Paul Durrant Cc: Kevin Tian , George Dunlap , Andrew Cooper , Tim Deegan , xen-devel@lists.xen.org, zhiyuan.lv@intel.com, Jun Nakajima List-Id: xen-devel@lists.xenproject.org CgpPbiAzLzEzLzIwMTcgNzoyMCBQTSwgSmFuIEJldWxpY2ggd3JvdGU6Cj4+Pj4gT24gMTEuMDMu MTcgYXQgMDk6NDIsIDx5dS5jLnpoYW5nQGxpbnV4LmludGVsLmNvbT4gd3JvdGU6Cj4+IE9uIDMv MTAvMjAxNyAxMToyOSBQTSwgSmFuIEJldWxpY2ggd3JvdGU6Cj4+Pj4+PiBPbiAwOC4wMy4xNyBh dCAxNjozMywgPHl1LmMuemhhbmdAbGludXguaW50ZWwuY29tPiB3cm90ZToKPj4+PiBjaGFuZ2Vz IGluIHY3Ogo+Pj4+ICAgICAtIFVzZSBuZXcgaW9yZXEgc2VydmVyIGludGVyZmFjZSAtIFhFTl9E TU9QX21hcF9tZW1fdHlwZV90b19pb3JlcV9zZXJ2ZXIuCj4+Pj4gICAgIC0gQWNjb3JkaW5nIHRv IGNvbW1lbnRzIGZyb20gR2VvcmdlOiByZW1vdmVkIGRvbWFpbl9wYXVzZS91bnBhdXNlKCkgaW4K Pj4+PiAgICAgICBodm1fbWFwX21lbV90eXBlX3RvX2lvcmVxX3NlcnZlcigpLCBiZWNhdXNlIGl0 J3MgdG9vIGV4cGVuc2l2ZSwKPj4+PiAgICAgICBhbmQgd2UgY2FuIGF2b2lkIHRoZToKPj4+PiAg ICAgICBhPiBkZWFkbG9jayBiZXR3ZWVuIHAybSBsb2NrIGFuZCBpb3JlcSBzZXJ2ZXIgbG9jayBi eSB1c2luZyB0aGVzZSBsb2Nrcwo+Pj4+ICAgICAgICAgIGluIHRoZSBzYW1lIG9yZGVyIC0gc29s dmVkIGluIHBhdGNoIDQ7Cj4+PiBUaGF0IGlzLCB1bnRpbCBwYXRjaCA0IHRoZXJlIGlzIGRlYWRs b2NrIHBvdGVudGlhbD8gSSB0aGluayB5b3Ugd2FudCB0bwo+Pj4gcmUtb3JkZXIgdGhlIHBhdGNo ZXMgaWYgc28uIE9yIHdhcyBpdCB0aGF0IHRoZSB0eXBlIGNhbid0IHJlYWxseSBiZSB1c2VkCj4+ PiB1bnRpbCB0aGUgbGFzdCBwYXRjaCBvZiB0aGUgc2VyaWVzPyAoSSdtIHNvcnJ5LCBpdCdzIGJl ZW4gcXVpdGUgYSB3aGlsZQo+Pj4gc2luY2UgdGhlIHByZXZpb3VzIHZlcnNpb24uKQo+PiBPaC4g VGhlcmUncyBubyBkZWFkbG9jayBwb3RlbnRpYWwgaW4gdGhpcyB2ZXJzaW9uIHBhdGNoIHNldC4g QnV0IGluIHY2LCB0aGVyZSB3YXMsIGFuZCBJIHVzZWQKPj4gZG9tYWluX3BhdXNlL3VucGF1c2Uo KSB0byBhdm9pZCB0aGlzLiBMYXRlciBvbiwgSSByZWFsaXplZCB0aGF0IGlmIEkgdXNlIGRpZmZl cmVudCBsb2NrcyBpbiB0aGUKPj4gc2FtZSBvcmRlciwgdGhlIGRlYWRsb2NrIHBvdGVudGlhbCBj YW4gYmUgYXZvaWQgYW5kIHdlIGRvIG5vdCBuZWVkIGRvbWFpbl9wYXVzZS91bnBhdXNlCj4+IGlu IHRoaXMgdmVyc2lvbi4KPiBXZWxsLCBva2F5LCBidXQgaW4gdGhlIGZ1dHVyZSBwbGVhc2UgZG9u J3QgYWRkIG1pc2xlYWRpbmcgY2hhbmdlCj4gaW5mbyB0aGVuLgoKR290IGl0LiBUaGFua3MuIDot KQo+Pj4+IEBAIC0zNjUsNiArMzgzLDI0IEBAIHN0YXRpYyBpbnQgZG1fb3AoZG9taWRfdCBkb21p ZCwKPj4+PiAgICAgICAgICAgIGJyZWFrOwo+Pj4+ICAgICAgICB9Cj4+Pj4gICAgCj4+Pj4gKyAg ICBjYXNlIFhFTl9ETU9QX21hcF9tZW1fdHlwZV90b19pb3JlcV9zZXJ2ZXI6Cj4+Pj4gKyAgICB7 Cj4+Pj4gKyAgICAgICAgY29uc3Qgc3RydWN0IHhlbl9kbV9vcF9tYXBfbWVtX3R5cGVfdG9faW9y ZXFfc2VydmVyICpkYXRhID0KPj4+PiArICAgICAgICAgICAgJm9wLnUubWFwX21lbV90eXBlX3Rv X2lvcmVxX3NlcnZlcjsKPj4+PiArCj4+Pj4gKyAgICAgICAgcmMgPSAtRUlOVkFMOwo+Pj4+ICsg ICAgICAgIGlmICggZGF0YS0+cGFkICkKPj4+PiArICAgICAgICAgICAgYnJlYWs7Cj4+Pj4gKwo+ Pj4+ICsgICAgICAgIC8qIE9ubHkgc3VwcG9ydCBmb3IgSEFQIGVuYWJsZWQgaHZtLiAqLwo+Pj4+ ICsgICAgICAgIGlmICggIWhhcF9lbmFibGVkKGQpICkKPj4+PiArICAgICAgICAgICAgYnJlYWs7 Cj4+PiBQZXJoYXBzIGJldHRlciB0byBnaXZlIGFuIGVycm9yIG90aGVyIHRoYW4gLUVJTlZBTCBp biB0aGlzIGNhc2U/Cj4+PiBJZiBzbywgdGhlbiB0aGUgc2FtZSBlcnJvciBzaG91bGQgbGlrZWx5 IGFsc28gYmUgdXNlZCBpbiB5b3VyCj4+PiBzZXRfbWVtX3R5cGUoKSBhZGRpdGlvbi4KPj4gSG93 IGFib3V0IC1FTk9UU1VQPwo+IElmIHlvdSBtZWFuIC1FT1BOT1RTVVBQLCB0aGVuIHllcy4KClll cywgSSBtZWFuIC1FT1BOT1RTVVBQCj4+Pj4gQEAgLTE3Nyw4ICsxNzgsNjUgQEAgc3RhdGljIGlu dCBodm1lbXVsX2RvX2lvKAo+Pj4+ICAgICAgICAgICAgYnJlYWs7Cj4+Pj4gICAgICAgIGNhc2Ug WDg2RU1VTF9VTkhBTkRMRUFCTEU6Cj4+Pj4gICAgICAgIHsKPj4+PiAtICAgICAgICBzdHJ1Y3Qg aHZtX2lvcmVxX3NlcnZlciAqcyA9Cj4+Pj4gLSAgICAgICAgICAgIGh2bV9zZWxlY3RfaW9yZXFf c2VydmVyKGN1cnItPmRvbWFpbiwgJnApOwo+Pj4+ICsgICAgICAgIC8qCj4+Pj4gKyAgICAgICAg ICogWGVuIGlzbid0IGVtdWxhdGluZyB0aGUgaW5zdHJ1Y3Rpb24gaW50ZXJuYWxseSwgc28gc2Vl IGlmCj4+Pj4gKyAgICAgICAgICogdGhlcmUncyBhbiBpb3JlcSBzZXJ2ZXIgdGhhdCBjYW4gaGFu ZGxlIGl0LiBSdWxlczoKPj4+PiArICAgICAgICAgKgo+Pj4+ICsgICAgICAgICAqIC0gUElPIGFu ZCAibm9ybWFsIiBtbWlvIHJ1biB0aHJvdWdoIGh2bV9zZWxlY3RfaW9yZXFfc2VydmVyKCkKPj4+ PiArICAgICAgICAgKiB0byBjaG9vc2UgdGhlIGlvcmVxIHNlcnZlciBieSByYW5nZS4gSWYgbm8g c2VydmVyIGlzIGZvdW5kLAo+Pj4+ICsgICAgICAgICAqIHRoZSBhY2Nlc3MgaXMgaWdub3JlZC4K Pj4+PiArICAgICAgICAgKgo+Pj4+ICsgICAgICAgICAqIC0gcDJtX2lvcmVxX3NlcnZlciBhY2Nl c3NlcyBhcmUgaGFuZGxlZCBieSB0aGUgY3VycmVudAo+Pj4+ICsgICAgICAgICAqIGlvcmVxX3Nl cnZlciBmb3IgdGhlIGRvbWFpbiwgYnV0IHRoZXJlIGFyZSBzb21lIGNvcm5lcgo+Pj4+ICsgICAg ICAgICAqIGNhc2VzOgo+Pj4gV2hvIG9yIHdoYXQgaXMgInRoZSBjdXJyZW50IGlvcmVxX3NlcnZl ciBmb3IgdGhlIGRvbWFpbiI/Cj4+IEl0IG1lYW5zICJ0aGUgY3VycmVudCBpb3JlcV9zZXJ2ZXIg d2hpY2ggbWFwcyB0aGUgcDJtX2lvcmVxX3NlcnZlciB0eXBlCj4+IGZvciB0aGlzIGRvbWFpbiIu Li4KPj4gSSdkIGxpa2UgdG8gdXNlIGEgc3VjY2luY3QgcGhyYXNlLCBidXQgbm93IHNlZW1zIG5v dCBhY2N1cmF0ZSBlbm91Z2guCj4+IEFueSBwcmVmZXJlbmNlPwo+IEp1c3QgYWRkICJkZXNpZ25h dGVkIiBhZnRlciAiY3VycmVudCIsIG9yIHJlcGxhY2luZyAiY3VycmVudCI/CgpSZXBsYWNpbmcg ImN1cnJlbnQiIHdpdGggImRlc2lnbmF0ZWQiIHNvdW5kcyBnb29kIHRvIG1lLiA6LSkKPj4+PiAr ICAgICAgICAgICAgaWYgKCBwMm10ID09IHAybV9pb3JlcV9zZXJ2ZXIgKQo+Pj4+ICsgICAgICAg ICAgICB7Cj4+Pj4gKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3M7Cj4+Pj4gKwo+ Pj4+ICsgICAgICAgICAgICAgICAgcyA9IHAybV9nZXRfaW9yZXFfc2VydmVyKGN1cnJkLCAmZmxh Z3MpOwo+Pj4+ICsKPj4+PiArICAgICAgICAgICAgICAgIC8qCj4+Pj4gKyAgICAgICAgICAgICAg ICAgKiBJZiBwMm10IGlzIGlvcmVxX3NlcnZlciBidXQgaW9yZXFfc2VydmVyIGlzIE5VTEwsCj4+ Pj4gKyAgICAgICAgICAgICAgICAgKiB3ZSBwcm9iYWJseSBsb3N0IGEgcmFjZSB3aXRoIHVuYmlu ZGluZyBvZiBpb3JlcQo+Pj4+ICsgICAgICAgICAgICAgICAgICogc2VydmVyLCBqdXN0IHJldHJ5 IHRoZSBhY2Nlc3MuCj4+Pj4gKyAgICAgICAgICAgICAgICAgKi8KPj4+PiArICAgICAgICAgICAg ICAgIGlmICggcyA9PSBOVUxMICkKPj4+PiArICAgICAgICAgICAgICAgIHsKPj4+PiArICAgICAg ICAgICAgICAgICAgICByYyA9IFg4NkVNVUxfUkVUUlk7Cj4+Pj4gKyAgICAgICAgICAgICAgICAg ICAgdmlvLT5pb19yZXEuc3RhdGUgPSBTVEFURV9JT1JFUV9OT05FOwo+Pj4+ICsgICAgICAgICAg ICAgICAgICAgIGJyZWFrOwo+Pj4+ICsgICAgICAgICAgICAgICAgfQo+Pj4+ICsKPj4+PiArICAg ICAgICAgICAgICAgIC8qCj4+Pj4gKyAgICAgICAgICAgICAgICAgKiBJZiB0aGUgSU9SRVFfTUVN X0FDQ0VTU19XUklURSBmbGFnIGlzIG5vdCBzZXQsCj4+Pj4gKyAgICAgICAgICAgICAgICAgKiB3 ZSBzaG91bGQgc2V0IHMgdG8gTlVMTCwgYW5kIGp1c3QgaWdub3JlIHN1Y2gKPj4+PiArICAgICAg ICAgICAgICAgICAqIGFjY2Vzcy4KPj4+PiArICAgICAgICAgICAgICAgICAqLwo+Pj4+ICsgICAg ICAgICAgICAgICAgaWYgKCAhKGZsYWdzICYgWEVOX0RNT1BfSU9SRVFfTUVNX0FDQ0VTU19XUklU RSkgKQo+Pj4+ICsgICAgICAgICAgICAgICAgICAgIHMgPSBOVUxMOwo+Pj4gV2hhdCBpcyB0aGlz IGFib3V0PyBZb3Ugb25seSBhbGxvdyBXUklURSByZWdpc3RyYXRpb25zLCBzbyB0aGlzIGxvb2tz Cj4+PiB0byBiZSBkZWFkIGNvZGUuIFlldCBpZiBpdCBpcyBtZWFudCB0byBndWFyZCBhZ2FpbnN0 IGZ1dHVyZSBlbmFibGluZwo+Pj4gb2YgUkVBRCwgdGhlbiB0aGlzIGNsZWFybHkgc2hvdWxkIG5v dCBiZSBkb25lIGZvciByZWFkcy4KPj4gSXQncyB0byBndWFyZCBhZ2FpbnN0IGZ1dHVyZSBlbXVs YXRpb24gb2YgUkVBRC4gV2UgY2FuIHJlbW92ZSBpdCBmb3Igbm93Lgo+IEkgZ3Vlc3MgZmlyc3Qg b2YgYWxsIHlvdSBuZWVkIHRvIHNldHRsZSBvbiB3aGF0IHlvdSB3YW50IHRoZSBjb2RlIHRvCj4g bG9vayBsaWtlIGdlbmVyYWxseSB3cnQgcmVhZHM6IERvIHlvdSB3YW50IGl0IHRvIHN1cHBvcnQg dGhlIG9wdGlvbgo+IGFzIG11Y2ggYXMgcG9zc2libGUsIHJlZHVjaW5nIGNvZGUgY2hhbmdlcyB0 byBhIG1pbmltdW0gd2hlbgo+IHNvbWVvbmUgd2FudHMgdG8gYWN0dWFsbHkgYWRkIHN1cHBvcnQs IG9yIGRvIHlvdSB3YW50IHRvIHJlamVjdAo+IHN1Y2ggYXR0ZW1wdHM/IFdoaWNoZXZlciB2YXJp YW50IHlvdSBjaG9vc2UsIHlvdSBzaG91bGQgY2FycnkgaXQKPiBvdXQgY29uc2lzdGVudGx5IHJh dGhlciB0aGFuIG1peGluZyBib3RoLgo+Cj4+Pj4gLS0tIGEveGVuL2FyY2gveDg2L21tL3AybS1l cHQuYwo+Pj4+ICsrKyBiL3hlbi9hcmNoL3g4Ni9tbS9wMm0tZXB0LmMKPj4+PiBAQCAtMTMxLDYg KzEzMSwxMyBAQCBzdGF0aWMgdm9pZCBlcHRfcDJtX3R5cGVfdG9fZmxhZ3Moc3RydWN0IHAybV9k b21haW4gKnAybSwgZXB0X2VudHJ5X3QgKmVudHJ5LAo+Pj4+ICAgICAgICAgICAgICAgIGVudHJ5 LT5yID0gZW50cnktPncgPSBlbnRyeS0+eCA9IDE7Cj4+Pj4gICAgICAgICAgICAgICAgZW50cnkt PmEgPSBlbnRyeS0+ZCA9ICEhY3B1X2hhc192bXhfZXB0X2FkOwo+Pj4+ICAgICAgICAgICAgICAg IGJyZWFrOwo+Pj4+ICsgICAgICAgIGNhc2UgcDJtX2lvcmVxX3NlcnZlcjoKPj4+PiArICAgICAg ICAgICAgZW50cnktPnIgPSAxOwo+Pj4+ICsgICAgICAgICAgICBlbnRyeS0+dyA9ICEocDJtLT5p b3JlcS5mbGFncyAmIFhFTl9ETU9QX0lPUkVRX01FTV9BQ0NFU1NfV1JJVEUpOwo+Pj4gQWxvbmcg dGhlIGxpbmVzIG9mIHRoZSBwcmV2aW91cyBjb21tZW50IC0gaWYgeW91IG1lYW4gdG8gaGF2ZSB0 aGUKPj4+IGNvZGUgY29wZSB3aXRoIFJFQUQsIHBsZWFzZSBhbHNvIHNldCAtPnIgYWNjb3JkaW5n bHksIG9yIGFkZCBhCj4+PiBjb21tZW50IHdoeSB0aGlzIHdvbid0IGhhdmUgdGhlIGludGVuZGVk IGVmZmVjdCAoeWllbGRpbmcgYSBub3QKPj4+IHByZXNlbnQgRVBURSkuCj4+IEhvdyBhYm91dCB3 ZSBrZWVwIHRoaXMgY29kZSBhbmQgZG8gbm90IHN1cHBvcnQgUkVBRD8gSSdsbCByZW1vdmUgYWJv dmUKPj4gZGVhZCBjb2RlIGluIGh2bWVtdWxfZG9faW8oKS4KPiBTdXJlLCBhcyBzYWlkIGFib3Zl OiBBbGwgSSdkIGxpa2UgdG8gcHVzaCBmb3IgaXMgdGhhdCB0aGUgcmVzdWx0IGlzCj4gY29uc2lz dGVudCBhY3Jvc3MgdGhlIGNvZGUgYmFzZS4KClRoYW5rIHlvdSwgSmFuLiBJIHNob3VsZCBoYXZl IGtlZXAgYSBjb25zaXN0ZW50IHByaW5jaXBsZSBpbiB0aGlzIGNvZGUuCk15IHByZWZlcmVuY2Ug aXMgdG8gcmVtb3ZlIHRoZSBwb3NzaWJsZSByZWFkIGVtdWxhdGlvbiBsb2dpYy4gQnV0IGNvdWxk IAp3ZSBzdGlsbCBrZWVwIHRoZQpkZWZpbml0aW9uIG9mIFhFTl9ETU9QX0lPUkVRX01FTV9BQ0NF U1NfUkVBRCwgc28gdGhhdCBwZW9wbGUgY2FuIHN0aWxsIAprbm93IHRoaXMKaW50ZXJmYWNlIGNh biBiZSBleHRlbmRlZCBpbiB0aGUgZnV0dXJlPwoKPj4+PiArc3RydWN0IGh2bV9pb3JlcV9zZXJ2 ZXIgKnAybV9nZXRfaW9yZXFfc2VydmVyKHN0cnVjdCBkb21haW4gKmQsCj4+Pj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmZsYWdz KQo+Pj4+ICt7Cj4+Pj4gKyAgICBzdHJ1Y3QgcDJtX2RvbWFpbiAqcDJtID0gcDJtX2dldF9ob3N0 cDJtKGQpOwo+Pj4+ICsgICAgc3RydWN0IGh2bV9pb3JlcV9zZXJ2ZXIgKnM7Cj4+Pj4gKwo+Pj4+ ICsgICAgc3Bpbl9sb2NrKCZwMm0tPmlvcmVxLmxvY2spOwo+Pj4+ICsKPj4+PiArICAgIHMgPSBw Mm0tPmlvcmVxLnNlcnZlcjsKPj4+PiArICAgICpmbGFncyA9IHAybS0+aW9yZXEuZmxhZ3M7Cj4+ Pj4gKwo+Pj4+ICsgICAgc3Bpbl91bmxvY2soJnAybS0+aW9yZXEubG9jayk7Cj4+Pj4gKyAgICBy ZXR1cm4gczsKPj4+PiArfQo+Pj4gSSdtIGFmcmFpZCB0aGlzIHF1ZXN0aW9uIHdhcyBhc2tlZCBi ZWZvcmUsIGJ1dCBzaW5jZSB0aGVyZSdzIG5vCj4+PiBjb21tZW50IGhlcmUgb3IgYW55d2hlcmUs IEkgY2FuJ3QgcmVjYWxsIGlmIHRoZXJlIHdhcyBhIHJlYXNvbiB3aHkKPj4+IHMgcG90ZW50aWFs bHkgYmVpbmcgc3RhbGUgYnkgdGhlIHRpbWUgdGhlIGNhbGxlciBsb29rcyBhdCBpdCBpcyBub3Qg YQo+Pj4gcHJvYmxlbS4KPj4gV2VsbCwgaXQgaXMgcG9zc2liZSB0aGF0IHMgaXMgc3RhbGUuIEkg ZGlkIG5vdCB0YWtlIGl0IGFzIGEgcHJvYmxlbQo+PiBiZWNhdXNlIHRoZSBkZXZpY2UgbW9kZWwK Pj4gd2lsbCBsYXRlciBkaXNjYXJkIHN1Y2ggaW8gcmVxdWVzdC4gQW5kIEkgYmVsaWV2ZSBjdXJy ZW50Cj4+IGh2bV9zZWxlY3RfaW9yZXFfc2VydmVyKCkgYWxzbwo+PiBoYXMgdGhlIHNhbWUgaXNz dWUgLSB0aGUgcmV0dXJuZWQgcyBzaG91bGQgYmUgY29uc2lkZXJlZCB0byBiZSBzdGFsZSwgaWYK Pj4gdGhlIE1NSU8vUElPCj4+IGFkZHJlc3MgaXMgcmVtb3ZlZCBmcm9tIHRoZSBpb3JlcSBzZXJ2 ZXIncyByYW5nZXNldC4KPj4KPj4gQW5vdGhlciB0aG91Z2h0IGlzLCBpZiB5b3UgdGhpbmsgaXQg aXMgaW5hcHByb3ByaWF0ZSBmb3IgZGV2aWNlIG1vZGVsIHRvCj4+IGRvIHRoZSBjaGVjaywKPj4g d2UgY2FuIHVzZSBzcGluX2xvY2tfcmVjdXJzaXZlIG9uIGlvcmVxX3NlcnZlci5sb2NrIHRvIHBy b3RlY3QgYWxsIHRoZQo+PiBpb3JlcSBzZXJ2ZXIgc2VsZWN0Cj4+IGFuZCByZWxlYXNlIHRoZSBs b2NrIGFmdGVyIHRoZSBpb3JlcSBzZXJ2ZXIgaXMgc2VudCBvdXQuCj4gV2VsbCwgbGV0J3MgZmly c3QgYXNrIFBhdWwgYXMgdG8gd2hhdCBoaXMgcGVyc3BlY3RpdmUgaGVyZSBpcywgYm90aAo+IHNw ZWNpZmljYWxseSBmb3IgdGhpcyBjaGFuZ2UgYW5kIG1vcmUgZ2VuZXJhbGx5IHJlZ2FyZGluZyB3 aGF0Cj4geW91IHNheSBhYm92ZS4KClBhdWwsIGFueSBzdWdnZXN0aW9ucyBvbiB0aGlzIGFuZCB0 aGUgYWJvdmUgb25lPyA6KQoKVGhhbmtzCll1Cj4gSmFuCj4KCgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1k ZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK