From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?Q?Roger_Pau_Monn=C3=A9?= Subject: Re: [PATCH v3 09/15] argo: implement the sendv op; evtchn: expose send_guest_global_virq Date: Thu, 10 Jan 2019 13:01:05 +0100 Message-ID: References: <1546846968-7372-1-git-send-email-christopher.w.clark@gmail.com> <1546846968-7372-10-git-send-email-christopher.w.clark@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1ghZ1S-0006yQ-13 for xen-devel@lists.xenproject.org; Thu, 10 Jan 2019 12:01:18 +0000 Received: by mail-ot1-f67.google.com with SMTP id 32so9658415ota.12 for ; Thu, 10 Jan 2019 04:01:16 -0800 (PST) In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Christopher Clark Cc: Stefano Stabellini , Wei Liu , Ross Philipson , Konrad Rzeszutek Wilk , George Dunlap , Andrew Cooper , Jason Andryuk , Ian Jackson , Julien Grall , Tim Deegan , Daniel Smith , Rich Persaud , Paul Durrant , Jan Beulich , xen-devel , James McKenzie , Eric Chanudet , Roger Pau Monne List-Id: xen-devel@lists.xenproject.org T24gVGh1LCBKYW4gMTAsIDIwMTkgYXQgNDoxMCBBTSBDaHJpc3RvcGhlciBDbGFyawo8Y2hyaXN0 b3BoZXIudy5jbGFya0BnbWFpbC5jb20+IHdyb3RlOgo+Cj4gVGhhbmtzIGZvciB0aGUgcmV2aWV3 LCBSb2dlci4gUmVwbGllcyBpbmxpbmUgYmVsb3cuCj4KPiBPbiBXZWQsIEphbiA5LCAyMDE5IGF0 IDEwOjU3IEFNIFJvZ2VyIFBhdSBNb25uw6kgPHJveWdlckBmcmVlYnNkLm9yZz4gd3JvdGU6Cj4g Pgo+ID4gIHRvLk9uIE1vbiwgSmFuIDcsIDIwMTkgYXQgODo0NCBBTSBDaHJpc3RvcGhlciBDbGFy awo+ID4gPGNocmlzdG9waGVyLncuY2xhcmtAZ21haWwuY29tPiB3cm90ZToKPiA+ID4KPiA+ID4g c2VuZHYgb3BlcmF0aW9uIGlzIGludm9rZWQgdG8gcGVyZm9ybSBhIHN5bmNocm9ub3VzIHNlbmQg b2YgYnVmZmVycwo+ID4gPiBjb250YWluZWQgaW4gaW92cyB0byBhIHJlbW90ZSBkb21haW4ncyBy ZWdpc3RlcmVkIHJpbmcuCj4gPiA+Cj4gPiA+IGRpZmYgLS1naXQgYS94ZW4vY29tbW9uL2FyZ28u YyBiL3hlbi9jb21tb24vYXJnby5jCj4gPiA+IGluZGV4IDU5Y2U4YzQuLjQ1NDg0MzUgMTAwNjQ0 Cj4gPiA+IC0tLSBhL3hlbi9jb21tb24vYXJnby5jCj4gPiA+ICsrKyBiL3hlbi9jb21tb24vYXJn by5jCj4KPiA+ID4KPiA+ID4gK3N0YXRpYyBpbnQKPiA+ID4gK21lbWNweV90b19ndWVzdF9yaW5n KHN0cnVjdCBhcmdvX3JpbmdfaW5mbyAqcmluZ19pbmZvLCB1aW50MzJfdCBvZmZzZXQsCj4gPiA+ ICsgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpzcmMsIFhFTl9HVUVTVF9IQU5ETEUo dWludDhfdCkgc3JjX2huZCwKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGxl bikKPiA+ID4gK3sKPiA+ID4gKyAgICB1bnNpZ25lZCBpbnQgbWZuc19pbmRleCA9IG9mZnNldCA+ PiBQQUdFX1NISUZUOwo+ID4gPiArICAgIHZvaWQgKmRzdDsKPiA+ID4gKyAgICBpbnQgcmV0Owo+ ID4gPiArICAgIHVuc2lnbmVkIGludCBzcmNfb2Zmc2V0ID0gMDsKPiA+ID4gKwo+ID4gPiArICAg IEFTU0VSVChzcGluX2lzX2xvY2tlZCgmcmluZ19pbmZvLT5sb2NrKSk7Cj4gPiA+ICsKPiA+ID4g KyAgICBvZmZzZXQgJj0gflBBR0VfTUFTSzsKPiA+ID4gKwo+ID4gPiArICAgIGlmICggKGxlbiA+ IFhFTl9BUkdPX01BWF9SSU5HX1NJWkUpIHx8IChvZmZzZXQgPiBYRU5fQVJHT19NQVhfUklOR19T SVpFKSApCj4gPiA+ICsgICAgICAgIHJldHVybiAtRUZBVUxUOwo+ID4gPiArCj4gPiA+ICsgICAg d2hpbGUgKCAob2Zmc2V0ICsgbGVuKSA+IFBBR0VfU0laRSApCj4gPgo+ID4gSSB0aGluayB5b3Ug Y291bGQgbWFwIHRoZSB3aG9sZSByaW5nIGluIGNvbnRpZ3VvdXMgdmlydHVhbCBhZGRyZXNzCj4g PiBzcGFjZSBhbmQgdGhlbiB3cml0aW5nIHRvIGl0IHdvdWxkIGJlIG11Y2ggbW9yZSBlYXN5LCB5 b3Ugd291bGRuJ3QKPiA+IG5lZWQgdG8gaXRlcmF0ZSB3aXRoIG1lbWNweSBvciBjb3B5X2Zyb21f Z3Vlc3QsIHRha2UgYSBsb29rIGF0IF9fdm1hcC4KPiA+IFlvdSBjb3VsZCBsaWtlbHkgbWFwIHRo aXMgd2hlbiB0aGUgcmluZyBnZXRzIHNldHVwIGFuZCBrZWVwIGl0IG1hcHBlZAo+ID4gZm9yIHRo ZSBsaWZldGltZSBvZiB0aGUgcmluZy4KPgo+IFlvdSdyZSByaWdodCBhYm91dCB0aGF0LCBiZWNh dXNlIG1hcF9kb21haW5fcGFnZV9nbG9iYWwsIHdoaWNoIHRoZQo+IGN1cnJlbnQgY29kZSB1c2Vz LCB1c2VzIHZtYXAgaXRzZWxmLiBJIHRoaW5rIHRoZXJlJ3MgYSBjb3VwbGUgb2YKPiByZWFzb25z IHdoeSB0aGUgY29kZSBoYXMgYmVlbiBpbXBsZW1lbnRlZCB0aGUgaXRlcmF0aXZlIHdheSB0aG91 Z2guCj4KPiBUaGUgZmlyc3QgaXMgdGhhdCBJIHRoaW5rIHJpbmcgcmVzaXplIGhhcyBiZWVuIGEg Y29uc2lkZXJhdGlvbjogaXQncwo+IHVzZWZ1bCB0byBiZSBhYmxlIHRvIGluY3JlYXNlIHRoZSBz aXplIG9mIGEgbGl2ZSBhbmQgYWN0aXZlIHJpbmcgdGhhdAo+IGlzIHVuZGVyIGxvYWQgd2l0aG91 dCBoYXZpbmcgdG8gdGVhciBkb3duIHRoZSBtYXBwaW5ncywgZmluZCBhIG5ldwo+IHZpcnR1YWwg YWRkcmVzcyByZWdpb24gb2YgdGhlIHJpZ2h0IHNpemUgYW5kIHRoZW4gcmVtYXAgaXQ6IHlvdSBj YW4KPiBqdXN0IHN1cHBseSBzb21lIG1vcmUgbWVtb3J5IGFuZCBtYXAgdGhvc2UgcGFnZXMgb250 byB0aGUgZW5kIG9mIHRoZQo+IHJpbmcsIGFuZCBlbnN1cmUgYm90aCBzaWRlcyBrbm93IGFib3V0 IHRoZSBuZXcgcmluZyBzaXplLiBTaW1pbGFybHksCj4gc2hyaW5raW5nIGEgcXVpZXQgcmluZyBj YW4gYmUgdXNlZnVsLgoKSXMgc3VjaCBvbiB0aGUgZmx5IGV4cGFuc2lvbiBzb21ldGhpbmcgY29t bW9uIHdpdGggYXJnbz8KCkknbSBub3Qgc2F5aW5nIGl0J3Mgc29tZXRoaW5nIHRoYXQgc2hvdWxk bid0IGJlIHN1cHBvcnRlZCwgYnV0IHRoZQpidXJkZW4gb2YgYWxsb3dpbmcgc3VjaCByZXNpemlu ZyBkb2Vzbid0IHNlZW0gdHJpdmlhbC4gWW91IHdpbGwgaGF2ZQp0byByZWRpbWVuc2lvbiBhIGxv dCBvZiB0aGUgYXJyYXlzIHVzZWQgdG8gc3RvcmUgdGhlIHBhZ2VzIHVzZWQsIGFuZAphdCB0aGF0 IHBvaW50IEkgd29uZGVyIHdoZXRoZXIgcmVtYXBwaW5nIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgc3Bh Y2UgaXMKcmVhbGx5IHRoZSBiaWdnZXN0IGlzc3VlIHlvdSBhcmUgZ29pbmcgdG8gaGF2ZSBpZiB5 b3UgYWxsb3cgc3VjaCBydW4KdGltZSByZXNpemluZy4KCj4gSG93ZXZlciwgdGhlICJnZm4gcmFj ZSIgdGhhdCB5b3UgKGNvcnJlY3RseSkgcG9pbnRlZCBvdXQgaW4gYW4gZWFybGllcgo+IHJldmll dywgYW5kIEphbidzIHJlbGF0ZWQgcmVxdWVzdCB0byBkcm9wIHRoZSAicmV2YWxpZGF0ZSBhbiBl eGlzdGluZwo+IG1hcHBpbmcgb24gcmluZyByZXJlZ2lzdGVyIiBtb3RpdmF0ZWQgcmVtb3ZhbCBv ZiBhIHNlY3Rpb24gb2YgdGhlIGNvZGUKPiBpbnZvbHZlZCwgYW5kIHRoZW4gaW4gdjMgb2YgdGhl IHNlcmllcywgSSd2ZSBhY3R1YWxseSBqdXN0IGJsb2NrZWQKPiByaW5nIHJlc2l6ZSBiZWNhdXNl IGl0J3MgbWlzc2luZyBhIHdhbGsgdGhyb3VnaCB0aGUgcGVuZGluZwo+IG5vdGlmaWNhdGlvbnMg dG8gZmluZCBhbnkgdGhhdCBoYXZlIGJlY29tZSB1bnRyaWdnZXJhYmxlIHdpdGggdGhlIG5ldwo+ IHJpbmcgc2l6ZSB3aGVuIGEgcmluZyBpcyBzaHJ1bmsgYW5kIEknZCBsaWtlIHRvIGRlZmVyIGlt cGxlbWVudGluZwo+IHRoYXQgZm9yIG5vdy4gU28gdGhlIHJpbmcgcmVzaXplIHJlYXNvbiBpcyBt b3JlIG9mIGEgY29uc2lkZXJhdGlvbiBmb3IKPiBhIHBvc3NpYmxlIGxhdGVyIHZlcnNpb24gb2Yg QXJnbyB0aGFuIHRoZSBjdXJyZW50IG9uZS4KPgo+IFRoZSBzZWNvbmQgcmVhc29uIGlzIGFib3V0 IGF2b2lkaW5nIGV4cG9zaW5nIHRoZSBYZW4gdmlydHVhbCBtZW1vcnkKPiBhbGxvY2F0b3IgZGly ZWN0bHkgdG8gZnJlcXVlbnQgZ3Vlc3Qtc3VwcGxpZWQgc2l6ZSByZXF1ZXN0cyBmb3IKPiBjb250 aWd1b3VzIHJlZ2lvbnMgKG9mIHVwIHRvIDE2R0IpLgoKQXMgc2FpZCBpbiBhbm90aGVyIHJlcGx5 LCBJJ20gbm90IHN1cmUgYWxsb3dpbmcgMTZHQiByaW5ncyBpcyBzYWZlLgpUaGUgYW1vdW50IG9m IGludGVybmFsIG1lbW9yeSByZXF1aXJlZCB0byB0cmFjayBzdWNoIHJpbmdzIGlzIG5vdAp0cml2 aWFsIGdpdmVuIHRoZSBhcnJheXMgdG8gc3RvcmUgdGhlIG1mbnMsIHRoZSBwYWdlcywgYW5kIHRo ZSB2aXJ0dWFsCm1hcHBpbmdzLgoKPiBXaXRoIHNpbmdsZS1wYWdlIGFsbG9jYXRpb25zIHRvCj4g YnVpbGQgYSByaW5nLCBmcmFnbWVudGF0aW9uIGlzIG5vdCBhIHByb2JsZW0sIGFuZCBtaXNjaGll ZiBieSBhIGd1ZXN0Cj4gc2VlbXMgZGlmZmljdWx0LgoKSG0sIHRoZXJlJ3Mgc3RpbGwgYSBsb3Qg b2YgYmlnIGR5bmFtaWMgbWVtb3J5IGFsbG9jYXRpb25zIGluIG9yZGVyIHRvCnN1cHBvcnQgYSAx NkdCIHJpbmcsIHdoaWNoIG1ha2VzIG1lIHRoaW5rIHRoYXQgdmlydHVhbCBhZGRyZXNzIHNwYWNl CmlzIG5vdCB0aGUgb25seSBwcm9ibGVtIGlmIHlvdSBhbGxvdyAxNkdCIHJpbmdzLgoKPiBDaGFu Z2luZyBpdCB0byBpc3N1ZSByZXF1ZXN0cyBmb3IgY29udGlndW91cyByZWdpb25zLAo+IHdpdGgg dmFyaWFibGUgcmluZyBzaXplcyB1cCB0byB0aGUgbWF4aW11bSBvZiAxNkdCLCBpdCBzZWVtcyBs aWtlCj4gc2lnbmlmaWNhbnQgZnJhZ21lbnRhdGlvbiBtYXkgYmUgYWNoaWV2YWJsZS4gSSBkb24n dCBrbm93IHRoZQo+IHByYWN0aWNhbCBpbXBhY3Qgb2YgdGhhdCBidXQgaXQgc2VlbXMgd29ydGgg YXZvaWRpbmcuIEFyZSB0aGUgb3RoZXIKPiB1c2VycyBvZiBfX3ZtYXAgKG9yIHZtYXApIGZvciBt dWx0aS1naWdhYnl0ZSByZWdpb25zIG9ubHkgZWl0aGVyCj4gYm9vdC10aW1lLCBpbmZyZXF1ZW50 IG9wZXJhdGlvbnMgKGxpdmVwYXRjaCksIG9yIGZvciBhY3Rpb25zIGJ5Cj4gcHJpdmlsZWdlZCAo aWUuIHNvbWV3aGF0IHRydXN0ZWQpIGRvbWFpbnMgKGlvcmVtYXApLCBvciBpcyBpdCBhbHJlYWR5 Cj4gYSBmcmVxdWVudCBvcGVyYXRpb24gc29tZXdoZXJlIGVsc2U/CgpJIGhhdmVuJ3QgY2hlY2tl ZCwgYnV0IEkgd291bGQgYmUgcXVpdGUgc3VycHJpc2VkIHRvIGZpbmQgYW55IHZtYXAKdXNhZ2Ug d2l0aCBzdWNoIHNpemUgKDE2R0IpLiBNYXliZSBzb21lb25lIG1vcmUgZmFtaWxpYXIgd2l0aCB0 aGUgbW0Kc3Vic3lzdGVtIGNhbiBwcm92aWRlIHNvbWUgaW5zaWdodCBoZXJlLgoKPiBHaXZlbiB0 aGUgY29udGV4dCBhYm92ZSwgYW5kIEphc29uJ3Mgc2ltcGxpZmljYXRpb24gdG8gdGhlCj4gbWVt Y3B5X3RvX2d1ZXN0X3JpbmcgZnVuY3Rpb24sIHBsdXMgdGhlIGltbWluZW50IG1lcmdlIGZyZWV6 ZQo+IGRlYWRsaW5lLCBhbmQgdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCB0aGlzIGxvb3AgYW5kIHRo ZSByZWxhdGVkIGRhdGEKPiBzdHJ1Y3R1cmVzIHN1cHBvcnRpbmcgaXQgaGF2ZSBiZWVuIHRlc3Rl ZCBhbmQgYXJlIHdvcmtpbmcsIHdvdWxkIGl0IGJlCj4gYWNjZXB0YWJsZSB0byBvbWl0IG1ha2lu ZyB0aGlzIGNvbnRpZ3VvdXMgbWFwcGluZyBjaGFuZ2UgZnJvbSB0aGlzCj4gY3VycmVudCBzZXJp ZXM/CgpNeSBvcGluaW9uIHdvdWxkIGJlIHRvIGp1c3QgdXNlIHZtYXAgaWYgaXQgd29ya3MsIGJl Y2F1c2UgdGhhdCBJTU8KZ3JlYXRseSBzaW1wbGlmaWVzIHRoZSBjb2RlIGJ5IGJlaW5nIGFibGUg dG8gaGF2ZSB0aGUgd2hvbGUgcmluZwptYXBwZWQgYXQgYWxsIHRoZSB0aW1lLiBJdCB3b3VsZCBy ZW1vdmUgdGhlIGl0ZXJhdGlvbiB0byBjb3B5CnJlcXVlc3RzLCBhbmQgcmVtb3ZlIHRoZSB1c2Fn ZSBvZiByaW5nX21hcF9wYWdlIGV2ZXJ5d2hlcmUuIFRoYXQgd291bGQKYmUgbXkgcmVjb21tZW5k YXRpb24gY29kZS13aXNlLCBidXQgYXMgc2FpZCBhYm92ZSBzb21lb25lIG1vcmUKZmFtaWxpYXIg d2l0aCB0aGUgbW0gc3Vic3lzdGVtIG1pZ2h0IGhhdmUgb3RoZXIgb3BpbmlvbidzIGFib3V0IGhv dyB0bwpkZWFsIHdpdGggYWNjZXNzZXMgdG8gMTZHQiBvZiBndWVzdCBtZW1vcnksIGFuZCBpbmRl ZWQgeW91ciBpdGVyYXRpdmUKc29sdXRpb24gbWlnaHQgYmUgdGhlIGJlc3QgYXBwcm9hY2guCgo+ ID4gPiArc3RhdGljIGxvbmcKPiA+ID4gK3NlbmR2KHN0cnVjdCBkb21haW4gKnNyY19kLCBjb25z dCB4ZW5fYXJnb19hZGRyX3QgKnNyY19hZGRyLAo+ID4gPiArICAgICAgY29uc3QgeGVuX2FyZ29f YWRkcl90ICpkc3RfYWRkciwKPiA+ID4gKyAgICAgIFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0oeGVu X2FyZ29faW92X3QpIGlvdnNfaG5kLCB1bnNpZ25lZCBsb25nIG5pb3YsCj4gPiA+ICsgICAgICB1 aW50MzJfdCBtZXNzYWdlX3R5cGUpCj4gPiA+ICt7Cj4gPiA+ICsgICAgc3RydWN0IGRvbWFpbiAq ZHN0X2QgPSBOVUxMOwo+ID4gPiArICAgIHN0cnVjdCBhcmdvX3JpbmdfaWQgc3JjX2lkOwo+ID4g PiArICAgIHN0cnVjdCBhcmdvX3JpbmdfaW5mbyAqcmluZ19pbmZvOwo+ID4gPiArICAgIGludCBy ZXQgPSAwOwo+ID4gPiArICAgIHVuc2lnbmVkIGxvbmcgbGVuID0gMDsKPiA+ID4gKwo+ID4gPiAr ICAgIEFTU0VSVChzcmNfZC0+ZG9tYWluX2lkID09IHNyY19hZGRyLT5kb21haW5faWQpOwo+ID4g PiArCj4gPiA+ICsgICAgYXJnb19kcHJpbnRrKCJzZW5kdjogKCVkOiV4KS0+KCVkOiV4KSBuaW92 OiVsdSBpb3Y6JXAgdHlwZToldVxuIiwKPiA+ID4gKyAgICAgICAgICAgICAgICAgc3JjX2FkZHIt PmRvbWFpbl9pZCwgc3JjX2FkZHItPnBvcnQsCj4gPiA+ICsgICAgICAgICAgICAgICAgIGRzdF9h ZGRyLT5kb21haW5faWQsIGRzdF9hZGRyLT5wb3J0LAo+ID4gPiArICAgICAgICAgICAgICAgICBu aW92LCBpb3ZzX2huZC5wLCBtZXNzYWdlX3R5cGUpOwo+ID4gPiArCj4gPiA+ICsgICAgcmVhZF9s b2NrKCZhcmdvX2xvY2spOwo+ID4gPiArCj4gPiA+ICsgICAgaWYgKCAhc3JjX2QtPmFyZ28gKQo+ ID4gPiArICAgIHsKPiA+ID4gKyAgICAgICAgcmV0ID0gLUVOT0RFVjsKPiA+ID4gKyAgICAgICAg Z290byBvdXRfdW5sb2NrOwo+ID4gPiArICAgIH0KPiA+ID4gKwo+ID4gPiArICAgIHNyY19pZC5w b3J0ID0gc3JjX2FkZHItPnBvcnQ7Cj4gPiA+ICsgICAgc3JjX2lkLmRvbWFpbl9pZCA9IHNyY19k LT5kb21haW5faWQ7Cj4gPiA+ICsgICAgc3JjX2lkLnBhcnRuZXJfaWQgPSBkc3RfYWRkci0+ZG9t YWluX2lkOwo+ID4gPiArCj4gPiA+ICsgICAgZHN0X2QgPSBnZXRfZG9tYWluX2J5X2lkKGRzdF9h ZGRyLT5kb21haW5faWQpOwo+ID4gPiArICAgIGlmICggIWRzdF9kICkKPiA+ID4gKyAgICB7Cj4g PiA+ICsgICAgICAgIGFyZ29fZHByaW50aygiIWRzdF9kLCBFU1JDSFxuIik7Cj4gPiA+ICsgICAg ICAgIHJldCA9IC1FU1JDSDsKPiA+ID4gKyAgICAgICAgZ290byBvdXRfdW5sb2NrOwo+ID4gPiAr ICAgIH0KPiA+ID4gKwo+ID4gPiArICAgIGlmICggIWRzdF9kLT5hcmdvICkKPiA+ID4gKyAgICB7 Cj4gPiA+ICsgICAgICAgIGFyZ29fZHByaW50aygiIWRzdF9kLT5hcmdvLCBFQ09OTlJFRlVTRURc biIpOwo+ID4gPiArICAgICAgICByZXQgPSAtRUNPTk5SRUZVU0VEOwo+ID4gPiArICAgICAgICBn b3RvIG91dF91bmxvY2s7Cj4gPgo+ID4gVGhlIHVzYWdlIG9mIG91dF91bmxvY2sgaGVyZSBhbmQg aW4gdGhlIGNvbmRpdGlvbiBhYm92ZSBpcyB3cm9uZywKPiA+IHNpbmNlIGl0IHdpbGwgdW5jb25k aXRpb25hbGx5IGNhbGwgcmVhZF91bmxvY2soJmFyZ29fbG9jayk7IHdoaWNoIGlzCj4gPiB3cm9u ZyBoZXJlIGJlY2F1c2UgdGhlIGxvY2sgaGFzIG5vdCB5ZXQgYmVlbiBhY3F1aXJlZC4KPgo+IFNv cnJ5LCBJIGRvbid0IHRoaW5rIHRoYXQncyBxdWl0ZSByaWdodCAtLSBpZiB5b3Ugc2Nyb2xsIHVw IGEgYml0Cj4gaGVyZSwgeW91IGNhbiBzZWUgd2hlcmUgYXJnb19sb2NrIGlzIHRha2VuIHVuY29u ZGl0aW9uYWxseSwganVzdCBhZnRlcgo+IHRoZSBkcHJpbnRrIGFuZCBiZWZvcmUgY2hlY2tpbmcg d2hldGhlciBzcmNfZCBpcyBhcmdvIGVuYWJsZWQuIFRoZQo+IHNlY29uZCBsb2NrIGhhc24ndCBi ZWVuIHRha2VuIHlldCAtIGJ1dCB0aGF0J3Mgbm90IHRoZSBvbmUgYmVpbmcKPiB1bmxvY2tlZCBv biB0aGF0IG91dF91bmxvY2sgcGF0aC4KCk9wcywgeWVzLCBzb3JyeS4gR290IG1lc3NlZCB1cCB3 aXRoIHNvIG1hbnkgbG9ja3MuCgpUaGFua3MsIFJvZ2VyLgoKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2 ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWls bWFuL2xpc3RpbmZvL3hlbi1kZXZlbA==