From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paul Durrant Subject: RE: [PATCH net-next v1] xen-netback: make copy batch size configurable Date: Mon, 13 Nov 2017 11:58:03 +0000 Message-ID: <40fc53458a524c64af50b48e43bfd251@AMSPEX02CL03.citrite.net> References: <20171110193458.14204-1-joao.m.martins@oracle.com> <8c18502b-11ff-be33-a584-a8bdf8960292@oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: "netdev@vger.kernel.org" , Wei Liu , "xen-devel@lists.xenproject.org" To: 'Joao Martins' Return-path: Received: from smtp.citrix.com.au ([103.14.252.240]:21282 "EHLO SMTP.CITRIX.COM.AU" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752408AbdKML6I (ORCPT ); Mon, 13 Nov 2017 06:58:08 -0500 In-Reply-To: <8c18502b-11ff-be33-a584-a8bdf8960292@oracle.com> Content-Language: en-US Sender: netdev-owner@vger.kernel.org List-ID: PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBKb2FvIE1hcnRpbnMgW21haWx0 bzpqb2FvLm0ubWFydGluc0BvcmFjbGUuY29tXQ0KPiBTZW50OiAxMyBOb3ZlbWJlciAyMDE3IDEx OjU0DQo+IFRvOiBQYXVsIER1cnJhbnQgPFBhdWwuRHVycmFudEBjaXRyaXguY29tPg0KPiBDYzog bmV0ZGV2QHZnZXIua2VybmVsLm9yZzsgV2VpIExpdSA8d2VpLmxpdTJAY2l0cml4LmNvbT47IHhl bi0NCj4gZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcNCj4gU3ViamVjdDogUmU6IFtQQVRDSCBu ZXQtbmV4dCB2MV0geGVuLW5ldGJhY2s6IG1ha2UgY29weSBiYXRjaCBzaXplDQo+IGNvbmZpZ3Vy YWJsZQ0KPiANCj4gT24gMTEvMTMvMjAxNyAxMDozMyBBTSwgUGF1bCBEdXJyYW50IHdyb3RlOg0K PiA+PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+PiBGcm9tOiBKb2FvIE1hcnRpbnMg W21haWx0bzpqb2FvLm0ubWFydGluc0BvcmFjbGUuY29tXQ0KPiA+PiBTZW50OiAxMCBOb3ZlbWJl ciAyMDE3IDE5OjM1DQo+ID4+IFRvOiBuZXRkZXZAdmdlci5rZXJuZWwub3JnDQo+ID4+IENjOiBK b2FvIE1hcnRpbnMgPGpvYW8ubS5tYXJ0aW5zQG9yYWNsZS5jb20+OyBXZWkgTGl1DQo+ID4+IDx3 ZWkubGl1MkBjaXRyaXguY29tPjsgUGF1bCBEdXJyYW50IDxQYXVsLkR1cnJhbnRAY2l0cml4LmNv bT47IHhlbi0NCj4gPj4gZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcNCj4gPj4gU3ViamVjdDog W1BBVENIIG5ldC1uZXh0IHYxXSB4ZW4tbmV0YmFjazogbWFrZSBjb3B5IGJhdGNoIHNpemUNCj4g Pj4gY29uZmlndXJhYmxlDQo+ID4+DQo+ID4+IENvbW1pdCBlYjE3MjNhMjliOWEgKCJ4ZW4tbmV0 YmFjazogcmVmYWN0b3IgZ3Vlc3QgcngiKSByZWZhY3RvcmVkIFJ4DQo+ID4+IGhhbmRsaW5nIGFu ZCBhcyBhIHJlc3VsdCBkZWNyZWFzZWQgbWF4IGdyYW50IGNvcHkgb3BzIGZyb20gNDM1MiB0byA2 NC4NCj4gPj4gQmVmb3JlIHRoaXMgY29tbWl0IGl0IHdvdWxkIGRyYWluIHRoZSByeF9xdWV1ZSAo d2hpbGUgdGhlcmUgYXJlDQo+ID4+IGVub3VnaCBzbG90cyBpbiB0aGUgcmluZyB0byBwdXQgcGFj a2V0cykgdGhlbiBjb3B5IHRvIGFsbCBwYWdlcyBhbmQgd3JpdGUNCj4gPj4gcmVzcG9uc2VzIG9u IHRoZSByaW5nLiBXaXRoIHRoZSByZWZhY3RvciB3ZSBkbyBhbG1vc3QgdGhlIHNhbWUgYWxiZWl0 DQo+ID4+IHRoZSBsYXN0IHR3byBzdGVwcyBhcmUgZG9uZSBldmVyeSBDT1BZX0JBVENIX1NJWkUg KDY0KSBjb3BpZXMuDQo+ID4+DQo+ID4+IEZvciBiaWcgcGFja2V0cywgdGhlIHZhbHVlIG9mIDY0 IG1lYW5zIGNvcHlpbmcgMyBwYWNrZXRzIGJlc3QgY2FzZQ0KPiBzY2VuYXJpbw0KPiA+PiAoMTcg Y29waWVzKSBhbmQgd29yc3QtY2FzZSBvbmx5IDEgcGFja2V0ICgzNCBjb3BpZXMsIGkuZS4gaWYg YWxsIGZyYWdzDQo+ID4+IHBsdXMgaGVhZCBjcm9zcyB0aGUgNGsgZ3JhbnQgYm91bmRhcnkpIHdo aWNoIGNvdWxkIGJlIHRoZSBjYXNlIHdoZW4NCj4gPj4gcGFja2V0cyBnbyBmcm9tIGxvY2FsIGJh Y2tlbmQgcHJvY2Vzcy4NCj4gPj4NCj4gPj4gSW5zdGVhZCBvZiBtYWtpbmcgaXQgc3RhdGljIHRv IDY0IGdyYW50IGNvcGllcywgbGV0cyBhbGxvdyB0aGUgdXNlciB0bw0KPiA+PiBzZWxlY3QgaXRz IHZhbHVlICh3aGlsZSBrZWVwaW5nIHRoZSBjdXJyZW50IGFzIGRlZmF1bHQpIGJ5IGludHJvZHVj aW5nDQo+ID4+IHRoZSBgY29weV9iYXRjaF9zaXplYCBtb2R1bGUgcGFyYW1ldGVyLiBUaGlzIGFs bG93cyB1c2VycyB0byBzZWxlY3QNCj4gPj4gdGhlIGhpZ2hlciBiYXRjaGVzIChpLmUuIGZvciBi ZXR0ZXIgdGhyb3VnaHB1dCB3aXRoIGJpZyBwYWNrZXRzKSBhcyBpdA0KPiA+PiB3YXMgcHJpb3Ig dG8gdGhlIGFib3ZlIG1lbnRpb25lZCBjb21taXQuDQo+ID4+DQo+ID4+IFNpZ25lZC1vZmYtYnk6 IEpvYW8gTWFydGlucyA8am9hby5tLm1hcnRpbnNAb3JhY2xlLmNvbT4NCj4gPj4gLS0tDQo+ID4+ ICBkcml2ZXJzL25ldC94ZW4tbmV0YmFjay9jb21tb24uaCAgICB8ICA2ICsrKystLQ0KPiA+PiAg ZHJpdmVycy9uZXQveGVuLW5ldGJhY2svaW50ZXJmYWNlLmMgfCAyNQ0KPiArKysrKysrKysrKysr KysrKysrKysrKystDQo+ID4+ICBkcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMgICB8 ICA1ICsrKysrDQo+ID4+ICBkcml2ZXJzL25ldC94ZW4tbmV0YmFjay9yeC5jICAgICAgICB8ICA1 ICsrKystDQo+ID4+ICA0IGZpbGVzIGNoYW5nZWQsIDM3IGluc2VydGlvbnMoKyksIDQgZGVsZXRp b25zKC0pDQo+ID4+DQo+ID4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9j b21tb24uaCBiL2RyaXZlcnMvbmV0L3hlbi0NCj4gPj4gbmV0YmFjay9jb21tb24uaA0KPiA+PiBp bmRleCBhNDZhMWU5NDUwNWQuLmE1ZmUzNmUwOThhNyAxMDA2NDQNCj4gPj4gLS0tIGEvZHJpdmVy cy9uZXQveGVuLW5ldGJhY2svY29tbW9uLmgNCj4gPj4gKysrIGIvZHJpdmVycy9uZXQveGVuLW5l dGJhY2svY29tbW9uLmgNCj4gPj4gQEAgLTEyOSw4ICsxMjksOSBAQCBzdHJ1Y3QgeGVudmlmX3N0 YXRzIHsNCj4gPj4gICNkZWZpbmUgQ09QWV9CQVRDSF9TSVpFIDY0DQo+ID4+DQo+ID4+ICBzdHJ1 Y3QgeGVudmlmX2NvcHlfc3RhdGUgew0KPiA+PiAtCXN0cnVjdCBnbnR0YWJfY29weSBvcFtDT1BZ X0JBVENIX1NJWkVdOw0KPiA+PiAtCVJJTkdfSURYIGlkeFtDT1BZX0JBVENIX1NJWkVdOw0KPiA+ PiArCXN0cnVjdCBnbnR0YWJfY29weSAqb3A7DQo+ID4+ICsJUklOR19JRFggKmlkeDsNCj4gPj4g Kwl1bnNpZ25lZCBpbnQgc2l6ZTsNCj4gPg0KPiA+IENvdWxkIHlvdSBuYW1lIHRoaXMgYmF0Y2hf c2l6ZSwgb3Igc29tZXRoaW5nIGxpa2UgdGhhdCB0byBtYWtlIGl0IGNsZWFyDQo+IHdoYXQgaXQg bWVhbnM/DQo+ID4NCj4gWWVhcCwgd2lsbCBjaGFuZ2UgaXQuDQo+IA0KPiA+PiAgCXVuc2lnbmVk IGludCBudW07DQo+ID4+ICAJc3RydWN0IHNrX2J1ZmZfaGVhZCAqY29tcGxldGVkOw0KPiA+PiAg fTsNCj4gPj4gQEAgLTM4MSw2ICszODIsNyBAQCBleHRlcm4gdW5zaWduZWQgaW50IHJ4X2RyYWlu X3RpbWVvdXRfbXNlY3M7DQo+ID4+ICBleHRlcm4gdW5zaWduZWQgaW50IHJ4X3N0YWxsX3RpbWVv dXRfbXNlY3M7DQo+ID4+ICBleHRlcm4gdW5zaWduZWQgaW50IHhlbnZpZl9tYXhfcXVldWVzOw0K PiA+PiAgZXh0ZXJuIHVuc2lnbmVkIGludCB4ZW52aWZfaGFzaF9jYWNoZV9zaXplOw0KPiA+PiAr ZXh0ZXJuIHVuc2lnbmVkIGludCB4ZW52aWZfY29weV9iYXRjaF9zaXplOw0KPiA+Pg0KPiA+PiAg I2lmZGVmIENPTkZJR19ERUJVR19GUw0KPiA+PiAgZXh0ZXJuIHN0cnVjdCBkZW50cnkgKnhlbl9u ZXRiYWNrX2RiZ19yb290Ow0KPiA+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQveGVuLW5ldGJh Y2svaW50ZXJmYWNlLmMgYi9kcml2ZXJzL25ldC94ZW4tDQo+ID4+IG5ldGJhY2svaW50ZXJmYWNl LmMNCj4gPj4gaW5kZXggZDZkZmYzNDdmODk2Li5hNTU4ODY4YTg4M2YgMTAwNjQ0DQo+ID4+IC0t LSBhL2RyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2ludGVyZmFjZS5jDQo+ID4+ICsrKyBiL2RyaXZl cnMvbmV0L3hlbi1uZXRiYWNrL2ludGVyZmFjZS5jDQo+ID4+IEBAIC01MTYsNyArNTE2LDIwIEBA IHN0cnVjdCB4ZW52aWYgKnhlbnZpZl9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsDQo+ID4+ IGRvbWlkX3QgZG9taWQsDQo+ID4+DQo+ID4+ICBpbnQgeGVudmlmX2luaXRfcXVldWUoc3RydWN0 IHhlbnZpZl9xdWV1ZSAqcXVldWUpDQo+ID4+ICB7DQo+ID4+ICsJaW50IHNpemUgPSB4ZW52aWZf Y29weV9iYXRjaF9zaXplOw0KPiA+DQo+ID4gdW5zaWduZWQgaW50DQo+ID4+PiAgCWludCBlcnIs IGk7DQo+ID4+ICsJdm9pZCAqYWRkcjsNCj4gPj4gKw0KPiA+PiArCWFkZHIgPSB2emFsbG9jKHNp emUgKiBzaXplb2Yoc3RydWN0IGdudHRhYl9jb3B5KSk7DQo+ID4NCj4gPiBEb2VzIHRoZSBtZW1v cnkgbmVlZCB0byBiZSB6ZXJvZWQ/DQo+ID4NCj4gSXQgZG9lc24ndCBuZWVkIHRvIGJlIGJ1dCBn aXZlbiB0aGF0IHhlbnZpZl9xdWV1ZSBpcyB6ZXJvZWQgKHdoaWNoIGluY2x1ZGVkDQo+IHRoaXMN Cj4gcmVnaW9uKSB0aHVzIHRob3VnaHQgSSB3b3VsZCBsZWF2ZSB0aGUgc2FtZSB3YXkuDQoNCk9r Lg0KDQo+IA0KPiA+PiArCWlmICghYWRkcikNCj4gPj4gKwkJZ290byBlcnI7DQo+ID4+ICsJcXVl dWUtPnJ4X2NvcHkub3AgPSBhZGRyOw0KPiA+PiArDQo+ID4+ICsJYWRkciA9IHZ6YWxsb2Moc2l6 ZSAqIHNpemVvZihSSU5HX0lEWCkpOw0KPiA+DQo+ID4gTGlrZXdpc2UuDQo+ID4NCj4gPj4gKwlp ZiAoIWFkZHIpDQo+ID4+ICsJCWdvdG8gZXJyOw0KPiA+PiArCXF1ZXVlLT5yeF9jb3B5LmlkeCA9 IGFkZHI7DQo+ID4+ICsJcXVldWUtPnJ4X2NvcHkuc2l6ZSA9IHNpemU7DQo+ID4+DQo+ID4+ICAJ cXVldWUtPmNyZWRpdF9ieXRlcyA9IHF1ZXVlLT5yZW1haW5pbmdfY3JlZGl0ID0gfjBVTDsNCj4g Pj4gIAlxdWV1ZS0+Y3JlZGl0X3VzZWMgID0gMFVMOw0KPiA+PiBAQCAtNTQ0LDcgKzU1Nyw3IEBA IGludCB4ZW52aWZfaW5pdF9xdWV1ZShzdHJ1Y3QgeGVudmlmX3F1ZXVlDQo+ICpxdWV1ZSkNCj4g Pj4gIAkJCQkgcXVldWUtPm1tYXBfcGFnZXMpOw0KPiA+PiAgCWlmIChlcnIpIHsNCj4gPj4gIAkJ bmV0ZGV2X2VycihxdWV1ZS0+dmlmLT5kZXYsICJDb3VsZCBub3QgcmVzZXJ2ZQ0KPiA+PiBtbWFw X3BhZ2VzXG4iKTsNCj4gPj4gLQkJcmV0dXJuIC1FTk9NRU07DQo+ID4+ICsJCWdvdG8gZXJyOw0K PiA+PiAgCX0NCj4gPj4NCj4gPj4gIAlmb3IgKGkgPSAwOyBpIDwgTUFYX1BFTkRJTkdfUkVRUzsg aSsrKSB7DQo+ID4+IEBAIC01NTYsNiArNTY5LDEzIEBAIGludCB4ZW52aWZfaW5pdF9xdWV1ZShz dHJ1Y3QgeGVudmlmX3F1ZXVlDQo+ICpxdWV1ZSkNCj4gPj4gIAl9DQo+ID4+DQo+ID4+ICAJcmV0 dXJuIDA7DQo+ID4+ICsNCj4gPj4gK2VycjoNCj4gPj4gKwlpZiAocXVldWUtPnJ4X2NvcHkub3Ap DQo+ID4+ICsJCXZmcmVlKHF1ZXVlLT5yeF9jb3B5Lm9wKTsNCj4gPg0KPiA+IHZmcmVlIGlzIHNh ZmUgdG8gYmUgY2FsbGVkIHdpdGggTlVMTC4NCj4gPg0KPiBPaCwgYWxtb3N0IGZvcmdvdCAtIHRo YW5rcy4NCj4gDQo+ID4+ICsJaWYgKHF1ZXVlLT5yeF9jb3B5LmlkeCkNCj4gPj4gKwkJdmZyZWUo cXVldWUtPnJ4X2NvcHkuaWR4KTsNCj4gPj4gKwlyZXR1cm4gLUVOT01FTTsNCj4gPj4gIH0NCj4g Pj4NCj4gPj4gIHZvaWQgeGVudmlmX2NhcnJpZXJfb24oc3RydWN0IHhlbnZpZiAqdmlmKQ0KPiA+ PiBAQCAtNzg4LDYgKzgwOCw5IEBAIHZvaWQgeGVudmlmX2Rpc2Nvbm5lY3RfY3RybChzdHJ1Y3Qg eGVudmlmICp2aWYpDQo+ID4+ICAgKi8NCj4gPj4gIHZvaWQgeGVudmlmX2RlaW5pdF9xdWV1ZShz dHJ1Y3QgeGVudmlmX3F1ZXVlICpxdWV1ZSkNCj4gPj4gIHsNCj4gPj4gKwl2ZnJlZShxdWV1ZS0+ cnhfY29weS5vcCk7DQo+ID4+ICsJdmZyZWUocXVldWUtPnJ4X2NvcHkuaWR4KTsNCj4gPj4gKwlx dWV1ZS0+cnhfY29weS5zaXplID0gMDsNCj4gPj4gIAlnbnR0YWJfZnJlZV9wYWdlcyhNQVhfUEVO RElOR19SRVFTLCBxdWV1ZS0+bW1hcF9wYWdlcyk7DQo+ID4+ICB9DQo+ID4+DQo+ID4+IGRpZmYg LS1naXQgYS9kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMgYi9kcml2ZXJzL25ldC94 ZW4tDQo+ID4+IG5ldGJhY2svbmV0YmFjay5jDQo+ID4+IGluZGV4IGEyN2RhYTIzYzlkYy4uM2E1 ZTFkN2FjMmY0IDEwMDY0NA0KPiA+PiAtLS0gYS9kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRi YWNrLmMNCj4gPj4gKysrIGIvZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jDQo+ID4+ IEBAIC05Niw2ICs5NiwxMSBAQCB1bnNpZ25lZCBpbnQgeGVudmlmX2hhc2hfY2FjaGVfc2l6ZSA9 DQo+ID4+IFhFTlZJRl9IQVNIX0NBQ0hFX1NJWkVfREVGQVVMVDsNCj4gPj4gIG1vZHVsZV9wYXJh bV9uYW1lZChoYXNoX2NhY2hlX3NpemUsIHhlbnZpZl9oYXNoX2NhY2hlX3NpemUsIHVpbnQsDQo+ ID4+IDA2NDQpOw0KPiA+PiAgTU9EVUxFX1BBUk1fREVTQyhoYXNoX2NhY2hlX3NpemUsICJOdW1i ZXIgb2YgZmxvd3MgaW4gdGhlIGhhc2gNCj4gPj4gY2FjaGUiKTsNCj4gPj4NCj4gPj4gKy8qIFRo aXMgaXMgdGhlIG1heGltdW0gYmF0Y2ggb2YgZ3JhbnQgY29waWVzIG9uIFJ4ICovDQo+ID4+ICt1 bnNpZ25lZCBpbnQgeGVudmlmX2NvcHlfYmF0Y2hfc2l6ZSA9IENPUFlfQkFUQ0hfU0laRTsNCj4g Pj4gK21vZHVsZV9wYXJhbV9uYW1lZChjb3B5X2JhdGNoX3NpemUsIHhlbnZpZl9jb3B5X2JhdGNo X3NpemUsIHVpbnQsDQo+ID4+IDA2NDQpOw0KPiA+PiArTU9EVUxFX1BBUk1fREVTQyhjb3B5X2Jh dGNoX3NpemUsICJNYXhpbXVtIGJhdGNoIG9mIGdyYW50DQo+IGNvcGllcw0KPiA+PiBvbiBSeCIp Ow0KPiA+PiArDQo+ID4+ICBzdGF0aWMgdm9pZCB4ZW52aWZfaWR4X3JlbGVhc2Uoc3RydWN0IHhl bnZpZl9xdWV1ZSAqcXVldWUsIHUxNg0KPiA+PiBwZW5kaW5nX2lkeCwNCj4gPj4gIAkJCSAgICAg ICB1OCBzdGF0dXMpOw0KPiA+Pg0KPiA+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQveGVuLW5l dGJhY2svcnguYyBiL2RyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL3J4LmMNCj4gPj4gaW5kZXggYjFj ZjdjNmY0MDdhLi43OTNhODVmNjFmOWQgMTAwNjQ0DQo+ID4+IC0tLSBhL2RyaXZlcnMvbmV0L3hl bi1uZXRiYWNrL3J4LmMNCj4gPj4gKysrIGIvZHJpdmVycy9uZXQveGVuLW5ldGJhY2svcnguYw0K PiA+PiBAQCAtMTY4LDExICsxNjgsMTQgQEAgc3RhdGljIHZvaWQgeGVudmlmX3J4X2NvcHlfYWRk KHN0cnVjdA0KPiA+PiB4ZW52aWZfcXVldWUgKnF1ZXVlLA0KPiA+PiAgCQkJICAgICAgIHN0cnVj dCB4ZW5fbmV0aWZfcnhfcmVxdWVzdCAqcmVxLA0KPiA+PiAgCQkJICAgICAgIHVuc2lnbmVkIGlu dCBvZmZzZXQsIHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pDQo+ID4+ICB7DQo+ID4+ICsJdW5zaWdu ZWQgaW50IGJhdGNoX3NpemU7DQo+ID4+ICAJc3RydWN0IGdudHRhYl9jb3B5ICpvcDsNCj4gPj4g IAlzdHJ1Y3QgcGFnZSAqcGFnZTsNCj4gPj4gIAlzdHJ1Y3QgeGVuX3BhZ2VfZm9yZWlnbiAqZm9y ZWlnbjsNCj4gPj4NCj4gPj4gLQlpZiAocXVldWUtPnJ4X2NvcHkubnVtID09IENPUFlfQkFUQ0hf U0laRSkNCj4gPj4gKwliYXRjaF9zaXplID0gbWluKHhlbnZpZl9jb3B5X2JhdGNoX3NpemUsIHF1 ZXVlLT5yeF9jb3B5LnNpemUpOw0KPiA+DQo+ID4gU3VyZWx5IHF1ZXVlLT5yeF9jb3B5LnNpemUg YW5kIHhlbnZpZl9jb3B5X2JhdGNoX3NpemUgYXJlIGFsd2F5cw0KPiBpZGVudGljYWw/IFdoeSBk byB5b3UgbmVlZCB0aGlzIHN0YXRlbWVudCAoYW5kIGhlbmNlIHN0YWNrIHZhcmlhYmxlKT8NCj4g Pg0KPiBUaGlzIHN0YXRlbWVudCB3YXMgdG8gYWxsb3cgdG8gYmUgY2hhbmdlZCBkeW5hbWljYWxs eSBhbmQgd291bGQgYWZmZWN0IGFsbA0KPiBuZXdseQ0KPiBjcmVhdGVkIGd1ZXN0cyBvciBydW5u aW5nIGd1ZXN0cyBpZiB2YWx1ZSBoYXBwZW5lZCB0byBiZSBzbWFsbGVyIHRoYW4gaW5pdGlhbGx5 DQo+IGFsbG9jYXRlZC4gQnV0IEkgc3VwcG9zZSBJIHNob3VsZCBtYWtlIGJlaGF2aW91ciBtb3Jl IGNvbnNpc3RlbnQgd2l0aCB0aGUNCj4gb3RoZXINCj4gcGFyYW1zIHdlIGhhdmUgcmlnaHQgbm93 IGFuZCBqdXN0IGxvb2sgYXQgaW5pdGlhbGx5IGFsbG9jYXRlZCBvbmUNCj4gYHF1ZXVlLT5yeF9j b3B5LmJhdGNoX3NpemVgID8NCg0KWWVzLCB0aGF0IHdvdWxkIGNlcnRhaW5seSBiZSBjb25zaXN0 ZW50IGJ1dCBJIGNhbiBzZWUgdmFsdWUgaW4gYWxsb3dpbmcgaXQgdG8gYmUgZHluYW1pY2FsbHkg dHVuZWQsIHNvIHBlcmhhcHMgYWRkaW5nIHNvbWUgcmUtYWxsb2NhdGlvbiBjb2RlIHRvIGFsbG93 IHRoZSBiYXRjaCB0byBiZSBncm93biBhcyB3ZWxsIGFzIHNocnVuayBtaWdodCBiZSBuaWNlLg0K DQogIFBhdWwNCg0KPiANCj4gSm9hbw0K