From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jobin Raju George Subject: Re: [Qemu-devel] Why I advise against using ivshmem Date: Fri, 13 Jun 2014 15:01:35 +0530 Message-ID: References: <20140610184818.2e490419@nbschild1> <53978375.6090707@6wind.com> <87ppie1v4r.fsf@blackfin.pond.sub.org> <20140612094413.15e56938@nbschild1> <87vbs6qjhj.fsf_-_@blackfin.pond.sub.org> <5399CF09.8030803@6wind.com> <87ppidnqmy.fsf@blackfin.pond.sub.org> <539AC3E0.9090404@6wind.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <539AC3E0.9090404@6wind.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: virtualization-bounces@lists.linux-foundation.org Errors-To: virtualization-bounces@lists.linux-foundation.org To: Vincent JARDIN Cc: Henning Schild , Olivier MATZ , kvm@vger.kernel.org, QEMU Developers , "thomas.monjalon@6wind.com" , Paolo Bonzini , virtualization@lists.linux-foundation.org, David Marchand List-Id: virtualization@lists.linuxfoundation.org TmFoYW5uaSdzIHBvb3IgY3VycmVudCBkZXZlbG9wbWVudCBjb3VwbGVkIHdpdGggdmlydElPJ3Mg cHJvbWlzaW5nCmV4cGFuc2lvbiB3YXMgd2hhdCBlbmNvdXJhZ2VkIHVzIHRvIGV4cGxvcmUgdmly dElPLXNlcmlhbCBbMV0gZm9yCmludGVyLXZpcnR1YWwgbWFjaGluZSBjb21tdW5pY2F0aW9uLiBU aG91Z2ggdmlydElPLXNlcmlhbCBhcyBpdCBpcwppc24ndCBoZWxwZnVsIGZvciBpbnRlci1WTSBj b21tdW5pY2F0aW9uLCBzb21lIHdvcmsgaXMgbmVlZGVkIGZvciB0aGlzCnB1cnBvc2UgYW5kIHRo aXMgaXMgZXhhY3RseSB3aGF0IHdlIChJIGFuZCB0d28gb2YgbXkgZmVsbG93CmNsYXNzbWF0ZXMp IGFjY29tcGxpc2hlZC4KCldlIGhhdmVuJ3QgcHVibGlzaGVkIGl0IHlldCBzaW5jZSB3ZSBkbyBu ZWVkIHRvIHBvbGlzaCB5ZXQgZm9yCnVwc3RyZWFtaW5nIGl0IGFuZCBhcmUgcGxhbm5pbmcgZG8g aXQgaW4gbmVhciBmdXR1cmUuCgpbMV06IGh0dHA6Ly9mZWRvcmFwcm9qZWN0Lm9yZy93aWtpL0Zl YXR1cmVzL1ZpcnRpb1NlcmlhbAoKCk9uIEZyaSwgSnVuIDEzLCAyMDE0IGF0IDI6NTYgUE0sIFZp bmNlbnQgSkFSRElOCjx2aW5jZW50LmphcmRpbkA2d2luZC5jb20+IHdyb3RlOgo+Cj4gKCttZXJn aW5nIHdpdGggUGFvbG8ncyBlbWFpbCBiZWNhdXNlIG9mIG92ZXJsYXBzKQo+Cj4KPj4+IHNlZSBp bmxpbmUgKEkgYW0gbm90IG9uIGFsbCBtYWlsaW5nIGxpc3QsIHBsZWFzZSwga2VlcCB0aGUgY2Mg bGlzdCkuCj4+Pgo+Cj4+Pj4gMS4gaXZzaG1lbSBjb2RlIG5lZWRzIHdvcmssIGJ1dCBoYXMgbm8g bWFpbnRhaW5lcgo+Pj4KPj4+IFNlZSBEYXZpZCdzIGNvbnRyaWJ1dGlvbnM6Cj4+PiAgICBodHRw Oi8vcGF0Y2h3b3JrLm96bGFicy5vcmcvcGF0Y2gvMzU4NzUwLwo+Pgo+Pgo+PiBXZSdyZSBncmF0 ZWZ1bCBmb3IgRGF2aWQncyBwYXRjaCBmb3IgcWVtdS1jaGFyLmMsIGJ1dCB0aGlzIGlzbid0IGl2 c2htZW0KPj4gbWFpbnRlbmFuY2UsIHlldC4KPgo+Cj4gb3RoZXJzIGNhbiBjb21lIChkb2MpLCBz ZWUgYmVsb3cuCj4KPgo+Pj4+IDIuIFRoZXJlIGlzIG5vIGxpYnZpcnQgc3VwcG9ydAo+Pj4KPj4+ Cj4+PiBPbmUgY2FuIHVzZSBxZW11IHdpdGhvdXQgbGlidml2cnQuCj4+Cj4+Cj4+IFlvdSBhc2tl ZCBtZSBmb3IgbXkgcmVhc29ucyBmb3IgZGlzbGlraW5nIGl2c2htZW0uICBUaGlzIGlzIG9uZS4K Pj4KPj4gU3VyZSwgSSBjYW4gZHJpbmsgbXkgd2F0ZXIgdGhyb3VnaCBhIHN0cmF3IHdoaWxlIHN0 YW5kaW5nIG9uIG9uZSBmb290LAo+PiBidXQgdGhhdCBkb2Vzbid0IG1lYW4gSSBoYXZlIHRvIGxp a2UgaXQuICBBbmQgbWUgbm90IGxpa2luZyBpdCBkb2Vzbid0Cj4+IG1lYW4gdGhlIG5leHQgZ3V5 IHNob3VsZG4ndCBsaWtlIGl0LiAgVG8gZWFjaCB0aGVpciBvd24uCj4KPgo+IEkgbGlrZSB1c2lu ZyBxZW11IHdpdGhvdXQgbGlidmlydCwgbGlidmlydCBpcyBub3QgcGFydCBvZiBxZW11Lgo+IExl dCdzIGF2b2lkIHRyb2xsaW5nIGFib3V0IGl0IDspCj4KPgo+PiBCYWNrIHdoZW4gd2UgYWNjZXB0 ZWQgaXZzaG1lbSwgdGhlIG91dC1vZi10cmVlIHBhcnRzIGl0IG5lZWRzIHdlcmUgd2VsbAo+PiBi ZWxvdyB0aGUgImNvbW11bml0eSAmIHBhY2thZ2VkIiBiYXIuICBCdXQgZm9sa3MgaW50ZXJlc3Rl ZCBpbiBpdCB0YWxrZWQKPj4gdG8gdXMsIGFuZCB0aGUgZmFjdCB0aGF0IGl0J3MgaW4gc2hvd3Mg dGhhdCBRRU1VIG1haW50YWluZXJzIGRlY2lkZWQKPj4gd2hhdCB0aGV5IGhhZCB0aGVuIHdhcyBl bm91Z2guCj4+Cj4+IFVuZm9ydHVuYXRlbHksIHdlIG5vdyBoYXZlIGNvbnNpZGVyYWJseSBsZXNz OiBOYWhhbm5pIGFwcGVhcnMgdG8gYmUKPj4gZGVhZC4KPgo+Cj4gYWdyZWUgYW5kIHRvIGJhZCBp dCBpcyBkZWFkLiBXZSBzaG91bGQgbGV0IE5haGFubmkgZGVhZCBzaW5jZSBpdnNobWVtIGlzIGEg UUVNVSB0b3BpYyBub3csIHNlZSBiZWxvdy4gRG9lcyBpdCBtYWtlIHNlbnNlPwo+Cj4KPj4KPj4g QW4gYXBwYXJlbnRseSBkZWFkIGdpdCByZXBvc2l0b3J5IHlvdSBjYW4gc3R1ZHkgaXMgbm90IGVu b3VnaC4gIFRoZSBmYWN0Cj4+IHRoYXQgeW91IGhvbGQgYW4gaW1wcm92ZWQgcmVpbXBsZW1lbnRh dGlvbiBwcml2YXRlbHkgaXMgaW1tYXRlcmlhbC4gIFNvCj4+IGlzIHRoZSAocGxhdXNpYmxlKSBj bGFpbSB0aGF0IG90aGVycyBjb3VsZCBhbHNvIGNyZWF0ZSBhCj4+IHJlaW1wbGVtZW50YXRpb24u Cj4KPgo+IEdvdCB0aGUgcG9pbnQuIFdoYXQncyBhYm91dCBhIHBhdGNoIHRvIGRvY3Mvc3BlY3Mv aXZzaG1lbV9kZXZpY2Vfc3BlYy50eHQgdGhhdCBpbXByb3ZlcyBpdD8KPgo+IEkgY2FuIG1ha2Ug cWVtdSdzIGl2c2htZW0gYmV0dGVyOgo+ICAgLSBrZWVwIGV4cGxhaW5pbmcgbWVtbmljIGZvciBp bnN0YW5jZSwKPiAgIC0gZXhwbGFpbiBob3cgdG8gd3JpdGUgb3RoZXIgaXZzaG1lbS4KPgo+IGRv ZXMgaXQgaGVscD8KPgo+Cj4+Pj4gNC4gT3V0LW9mLXRyZWUga2VybmVsIHVpbyBkcml2ZXIgcmVx dWlyZWQKPj4+Cj4+Pgo+Pj4gTm8sIGl0IGlzIG9wdGlvbmFsLgo+Pgo+Pgo+PiBHb29kIHRvIGtu b3cuICBXb3VsZCB5b3UgYmUgd2lsbGluZyB0byBzZW5kIGEgcGF0Y2ggdG8KPj4gaXZzaG1lbV9k ZXZpY2Vfc3BlYy50eHQgY2xhcmlmeWluZyB0aGF0Pwo+Cj4KPiBnb3QgdGhlIHBvaW50LCB5ZXMs Cj4KPgo+Pj4+ICogR2V0IGFsbCB0aGUgcmVxdWlyZWQgcGFydHMgb3V0c2lkZSBRRU1VIHBhY2th Z2VkIGluIG1ham9yIGRpc3Ryb3MsIG9yCj4+Pj4gICAgIGFic29yYmVkIGludG8gUUVNVQo+Pj4K Pj4+Cj4+PiBSZWRoYXQgZGlkIGRpc2FibGUgaXQuIHdoeT8gaXQgaXMgdGhlcmUgaW4gUUVNVS4K Pj4KPj4KPj4gVXAgdG8gbm93LCBJJ3ZlIGJlZW4gd2VhcmluZyBteSBRRU1VIGhhdC4gIExldCBt ZSBleGNoYW5nZSBpdCBmb3IgbXkgUmVkCj4+IG9uZSBmb3IgYSBiaXQuCj4+Cj4+IFdlIChSZWQg SGF0KSBkb24ndCBqdXN0IHBhY2thZ2UgJiBzaGlwIG1ldHJpYyB0b25zIG9mIHJhbmRvbSBmcmVl Cj4+IHNvZnR3YXJlLiAgV2UgcGFja2FnZSAmIHNoaXAgdXNlZnVsIGZyZWUgc29mdHdhcmUgd2Ug Y2FuIHN1cHBvcnQgZm9yCj4+IG1hbnksIG1hbnkgeWVhcnMuCj4+Cj4+IFNvbWV0aW1lcywgd2Ug ZmluZCB0aGF0IHdlIGhhdmUgdG8gZm9jdXMgc2VyaW91cyBkZXZlbG9wbWVudCByZXNvdXJjZXMK Pj4gb24gbWFraW5nIHNvbWV0aGluZyB1c2VmdWwgc3VwcG9ydGFibGUgKFBhb2xvIG1lbnRpb25l ZCBxY293MikuICBXZQo+PiBvYnZpb3VzbHkgY2FuJ3QgZm9jdXMgb24gZXZlcnl0aGluZywgdGhv dWdoLgo+Cj4KPiBHb29kIG9wZW4gdGVjaG5vbG9neSBzaG91bGQgcnVsZS4gaXZzaG1lbSBoYXMg dXNlIGNhc2VzLiBBbmQgSSBnbyBhZ3JlZSB3aXRoIHlvdSwgaXQgaXMgbGlrZSB0aGUgcGhvZW5p eCwgaXQgaGFzIHRvIGJlIHJlLWV4cGxhaW5lZC9kb2N1bWVudGVkIHRvIGJlIGJhY2sgdG8gbGlm ZS4gSSB3YXMgbm90IGF3YXJlIHRoYXQgdGhlIFFFTVUgY29tbXVuaXR5IHdhcyBtaXNzaW5nIGl2 c2htZW0gY29udHJpYnV0b3JzIChteSBiYWQgSSBkaWQgbm90IGNoZWNrIE1BSU5UQUlORVJTKS4K Pgo+Cj4+IEFueXdheSwgaXZzaG1lbSBkaWRuJ3QgbWFrZSB0aGUgY3V0IGZvciBSSEVMLTcuMC4g IFNvcnJ5IGlmIHRoYXQKPj4gaW5jb252ZW5pZW5jZXMgeW91LiAgVG8gZ2V0IGl0IGludG8gUkhF TCwgeW91IG5lZWQgdG8gc2hvdyBpdCdzIGJvdGgKPj4gdXNlZnVsIGFuZCBzdXBwb3J0YWJsZS4g IEJ1aWxkaW5nIGEgY29tbXVuaXR5IGFyb3VuZCBpdCB3b3VsZCBnbyBhIGxvbmcKPj4gd2F5IHRv d2FyZHMgdGhhdC4KPgo+Cj4gdW5kZXJzdG9vZC4KPgo+Cj4+IElmIHlvdSB3YW50IHRvIGRpc2N1 c3MgdGhpcyBpbiBtb3JlIGRldGFpbCB3aXRoIHVzLCB5b3UgbWF5IHdhbnQgdG8gdHJ5Cj4+IGNv bW11bmljYXRpb24gY2hhbm5lbHMgcHJvdmlkZWQgYnkgeW91ciBSSEVMIHN1YnNjcmlwdGlvbiBp biBhZGRpdGlvbiB0bwo+PiB0aGUgUUVNVSBkZXZlbG9wbWVudCBtYWlsaW5nIGxpc3QuICBEb24n dCBiZSBzaHksIHlvdSdyZSBwYXlpbmcgZm9yIGl0IQo+Cj4KPiBkb25lLiBJIHdhcyBmb2N1c2lu ZyBvbiBEUERLLm9yZyBhbmQgaWdub3JhbnQgb2YgUUVNVSdzIHN0YXR1cywgdGhpbmtpbmcgUmVk aGF0IHdhcyBjb3ZlcmluZyBpdC4gSG93IHRvIGtub3cgd2hpY2ggcGFydCBvZiBhbiBvcGVuc291 cmNlIHNvZnR3YXJlIGFyZSBhbmQgYXJlIG5vdCBpbmNsdWRlZCBpbnRvIFJlZGhhdC4gU2FsZXMg YXJlIGlnbm9yYW50IGFib3V0IGl0IDspLiBSZWRoYXQgcmFuZG9tbHkgZGlzYWJsZXMgc29tZSBm aWxlcyBhdCBjb21waWxhdGlvbiAoZm9yIHNvbWUgZ29vZCByZWFzb25zIEkgZ3Vlc3MsIGJ1dCBu b3QgcHVibGljIHJhdGlvbmFscyBvciBJIGFtIG1pc3Npbmcgc29tZXRoaW5nKS4KPgo+IEZlZWwg ZnJlZSB0byBvcGVuIHRoaXMgUFIgdG8gYW55b25lOgo+ICAgaHR0cHM6Ly9idWd6aWxsYS5yZWRo YXQuY29tL3Nob3dfYnVnLmNnaT9pZD0xMDg4MzMyCj4KPgo+Pj4+IEluIHNob3J0LCBjcmVhdGUg YSB2aWFibGUgY29tbXVuaXR5IGFyb3VuZCBpdnNobWVtLCBlaXRoZXIgd2l0aGluIHRoZQo+Pj4+ IFFFTVUgY29tbXVuaXR5LCBvciBzZXBhcmF0ZWx5IGJ1dCBjb29wZXJhdGluZy4KPj4+Cj4+Pgo+ Pj4gQXQgbGVhc3QsIERQREsub3JnIGNvbW11bml0eSBpcyBhIGNvbW11bml0eSB1c2luZyBpdC4K Pj4KPj4KPj4gVXNpbmcgc29tZXRoaW5nIGlzbid0IHRoZSBzYW1lIGFzIG1haW50YWluaW5nIHNv bWV0aGluZy4gIEJ1dCBpdCdzIGEKPj4gbmVjZXNzYXJ5IGZpcnN0IHN0ZXAuCj4KPgo+IHVuZGVy c3Rvb2QsIGFmdGVyIERhdmlkJ3MgcGF0Y2gsIGRvY3VtZW50YXRpb24gd2lsbCBjb21lLgo+Cj4g KG5vdyBQYW9sbydzIGVtYWlsIHNpbmNlIHRoZXJlIHdlcmUgc29tZSBvdmVybGFwcykKPgo+ID4g TWFya3VzIGVzcGVjaWFsbHkgcmVmZXJyZWQgdG8gcGFydHMgKm91dHNpZGUqIFFFTVU6IHRoZSBz ZXJ2ZXIsIHRoZQo+ID4gdWlvIGRyaXZlciwgZXRjLiAgVGhlc2Ugb3V0LW9mLXRyZWUsIG5vbi1w YWNrYWdlZCBwYXJ0cyBvZiBpdnNobWVtCj4gPiBhcmUgb25lIG9mIHRoZSByZWFzb25zIHdoeSBS ZWQgSGF0IGhhcyBkaXNhYmxlZCBpdnNobWVtIGluIFJIRUw3Lgo+Cj4gWW91IG1hZGUgdGhlIHJp Z2h0IGNob2ljZXMsIHRoZXNlIG91dC1vZi10cmVlIHBhY2thZ2VzIGFyZSBub3QgcmVxdWlyZWQu IFlvdSBjYW4gdXNlIFFFTVUncyBpdnNobWVtIHdpdGhvdXQgYW55IG9mIHRoZSBvdXQtb2YtdHJl ZSBwYWNrYWdlcy4gVGhlIG91dC1vZi10cmVlIHBhY2thZ2VzIGFyZSBqdXN0IHNvbWUgZXhhbXBs ZXMgb2YgdXNpbmcgaXZzaG1lbS4KPgo+ID4gSGUgYWxzbyBsaXN0ZWQgbWFueSBvdGhlcnMuICBC YXNpY2FsbHkgZm9yIHBhcnRzIG9mIFFFTVUgdGhhdCBhcmUgbm90Cj4gPiBvZiBoaWdoIHF1YWxp dHksIHdlIGVpdGhlciBmaXggdGhlbSAodGhpcyBpcyBmb3IgZXhhbXBsZSB3aGF0IHdlIGRpZAo+ ID4gZm9yIHFjb3cyKSBvciBkaXNhYmxlIHRoZW0uICBOb3QganVzdCBpdnNobWVtIHN1ZmZlcmVk IHRoaXMgZmF0ZSwgZm9yCj4gPiBleGFtcGxlIG1hbnkgbmV0d29yayBjYXJkcywgc291bmQgY2Fy ZHMsIFNDU0kgc3RvcmFnZSBhZGFwdGVycy4KPgo+IEkgYW5kIERhdmlkIChjYykgYXJlIHdvcmtp bmcgb24gbWFraW5nIGl0IGJldHRlciBiYXNlZCBvbiB0aGUgaXNzdWVzIHRoYXQgYXJlIGZvdW5k Lgo+Cj4gPiBOb3csIHZob3N0LXVzZXIgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgbWVyZ2Vk IGZvciAyLjEuICBDb21wYXJlZCB0byB0aGUgRFBESyBzb2x1dGlvbjoKPgo+IG5vdywgeW91IGNh bm5vdCBjb21wYXJlIHZob3N0LXVzZXIgdG8gRFBESy9pdnNobWVtOyBib3RoIHNob3VsZCBleHNp dCBiZWNhdXNlIHRoZXkgaGF2ZSBkaWZmZXJlbnQgc2NvcGUgYW5kIHVzZSBjYXNlcy4gSXQgaXMg bGlrZSBjb21wYXJpbmcgdHdvIGRpZmZlcmVudChBKSBtb2RlbHMgb2YgSVBDOgo+ICAgLSB2aG9z dC11c2VyIC0+IG5ldHdvcmtpbmcgdXNlIGNhc2Ugc3BlY2lmaWMKPiAgIC0gaXZzaG1lbSAtPiBm cmFtZXdvcmsgdG8gYmUgZ2VuZXJpYyB0byBoYXZlIHNoYXJlZCBtZW1vcnkgZm9yIG1hbnkgdXNl IGNhc2VzIChIUEMsIGluLW1lbW9yeS1kYXRhYmFzZSwgYSBuZXR3b3JrIHRvbyBsaWtlIG1lbW5p YykuCj4KPiBMYXRlciBvbmUsIHNvbWUgbmV3cyBzZXJ2aWNlcyB3aWxsIGJlIG5lZWRlZCBmb3Ig c2hhcmVkIG1lbW9yeS4gdmlydGlvIHdpbGwgY29tZSBpbiBwaWN0dXJlIChzZWUgVklSVElPX0Zf UklOR19TSE1FTV9BRERSJ3MgdGhyZWFkcykuIEN1cnJlbnRseSwgaXZoc21lbSBpcyB0aGUgb25s eSAic3RhYmxlIiBvcHRpb24gc2luY2UgdGhlcmUgcmVtYWlucyBtYW55IHVuc29sdmVkIGlzc3Vl cyB3aXRoIHZpcnRpbyBhbmQgc2hhcmVkIG1lbW9yeS4KPgo+ID4gKiBpdCBkb2Vzbid0IHJlcXVp cmUgaHVnZXRsYmZzICh3aGljaCBvbmx5IGVuYWJsZWQgc2hhcmVkIG1lbW9yeSBieQo+ID4gY2hh bmNlIGluIG9sZGVyIFFFTVUgcmVsZWFzZXMsIHRoYXQgd2FzIG5ldmVyIGRvY3VtZW50ZWQpCj4K PiBpdmhzbWVtIGRvZXMgbm90IHJlcXVpcmUgaHVnZXRsYmZzLiBJdCBpcyBvcHRpb25hbC4KPgo+ ID4gKiBpdCBkb2Vzbid0IHJlcXVpcmUgaXZzaG1lbSAoaXQgZG9lcyByZXF1aXJlIHNoYXJlZCBt ZW1vcnksIHdoaWNoCj4gPiB3aWxsIGFsc28gYmUgYWRkZWQgdG8gMi4xKQo+Cj4gc29tZWhvdyBJ IGFncmVlOiB3ZSBuZWVkIGJvdGggbW9kZWxzOiB2aG9zdC11c2VyIGFuZCBpdnNobWVtIGJlY2F1 c2Ugb2YgdGhlIHByZXZpb3VzIChBKSBjb21tZW50cy4KPgo+ID4gKiBpdCBkb2Vzbid0IHJlcXVp cmUgdGhlIGtlcm5lbCBkcml2ZXIgZnJvbSB0aGUgRFBESyBzYW1wbGUKPgo+IGl2aHNtZW0gZG9l cyBub3QgcmVxdWlyZSBEUERLIGtlcm5lbCBkcml2ZXIuIHNlZSBtZW1uaWMncyBQTUQ6Cj4gICBo dHRwOi8vZHBkay5vcmcvYnJvd3NlL21lbW5pYy90cmVlL3BtZC9wbWRfbWVtbmljLmMKPgo+ID4g KiBpdCBpcyBub3QganVzdCBzaGFyZWQgbWVtb3J5LCBidXQgYWxzbyBkZWZpbmVzIGFuIGludGVy ZmFjZSB0byB1c2UKPiA+IGl0IChhbm90aGVyIG9mIE1hcmt1cydzIHBvaW50cykKPgo+IGFncmVl ZCBQYW9sbzogYnV0IHlvdSBzaG9ydCBuYXJyb3cgaXQgZm9yIG5ldHdvcmtpbmcgdXNlIGNhc2Vz IG9ubHkuIFNoYXJlZCBtZW1vcnkgw6AgbGEgaXZzaG1lbSBwcm92aWRlcyBvdGhlciBmZWF0dXJl cyAoc2VlIChBKSBhZ2FpbikuCj4KPiA+Cj4gPiB2aG9zdC11c2VyIGlzIHN1cGVyaW9yLCBhbmQg aXQgaXMgc3VwZXJpb3IgYmVjYXVzZSBpdCBoYXMgYmVlbgo+ID4gZGVzaWduZWQKPiA+IGZyb20g dGhlIGdldC1nbyB0aHJvdWdoIGNvb3BlcmF0aW9uIG9mIGFsbCBpbnRlcmVzdGVkIHBhcnRpZXMg KG5hbWVseQo+ID4gUUVNVSBhbmQgc25hYmJzd2l0Y2gpLgo+Cj4gSXQgaXMgbm90IGFuIGFyZ3Vt ZW50LiB2aG9zdC11c2VyIGlzIGEgc3BlY2lmaWMgY2FzZS4KPgo+IEJlc3QgcmVnYXJkcywKPiAg IFZpbmNlbnQKPgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpWaXJ0dWFsaXphdGlvbiBtYWlsaW5nIGxpc3QKVmlydHVhbGl6YXRpb25AbGlzdHMubGludXgt Zm91bmRhdGlvbi5vcmcKaHR0cHM6Ly9saXN0cy5saW51eGZvdW5kYXRpb24ub3JnL21haWxtYW4v bGlzdGluZm8vdmlydHVhbGl6YXRpb24=