From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?utf-8?B?TW9ydGVuIEJyw7hydXA=?= Subject: Re: Where is the padding code in DPDK? Date: Thu, 15 Nov 2018 11:27:18 +0100 Message-ID: <98CBD80474FA8B44BF855DF32C47DC35B4249D@smartserver.smartshare.dk> References: <9f22d7f1-080e-1663-df8d-a3893248a93d@intel.com> <4a1e4ea9-e75a-0615-dcc8-c762817f4d2e@intel.com> <98CBD80474FA8B44BF855DF32C47DC35B4248C@smartserver.smartshare.dk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: "Burakov, Anatoly" , "Sam" , To: "Wiles, Keith" Return-path: Received: from smartserver.smartsharesystems.com (smartserver.smartsharesystems.com [77.243.40.215]) by dpdk.org (Postfix) with ESMTP id 39B854C95 for ; Thu, 15 Nov 2018 11:27:21 +0100 (CET) Content-class: urn:content-classes:message In-Reply-To: List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" PiBGcm9tOiBkZXYgW21haWx0bzpkZXYtYm91bmNlc0BkcGRrLm9yZ10gT24gQmVoYWxmIE9mIFdp bGVzLCBLZWl0aA0KPiA+IE9uIE5vdiAxNCwgMjAxOCwgYXQgNDo1MSBBTSwgTW9ydGVuIEJyw7hy dXAgPG1iQHNtYXJ0c2hhcmVzeXN0ZW1zLmNvbT4NCj4gd3JvdGU6DQo+ID4NCj4gPiBBbmF0b2x5 LA0KPiA+DQo+ID4gVGhpcyBkaWZmZXJzIGZyb20gdGhlIExpbnV4IGtlcm5lbCdzIGJlaGF2aW9y LCB3aGVyZSBwYWRkaW5nIGJlbG9uZ3MNCj4gaW4gdGhlIE5JQyBkcml2ZXIgbGF5ZXIsIG5vdCBp biB0aGUgcHJvdG9jb2wgbGF5ZXIuIElmIHlvdSBwYXNzIGEgcnVudA0KPiBmcmFtZSAodG9vIHNo b3J0IHBhY2tldCkgdG8gYSBMaW51eCBOSUMgZHJpdmVyJ3MgdHJhbnNtaXNzaW9uIGZ1bmN0aW9u LA0KPiB0aGUgTklDIGRyaXZlciAob3IgTklDIGhhcmR3YXJlKSB3aWxsIHBhZCB0aGUgZnJhbWUg dG8gbWFrZSBpdCB2YWxpZC4NCj4gRS5nLiBsb29rIGF0IHRoZSByaGluZV9zdGFydF90eCgpIGZ1 bmN0aW9uIGluIHRoZSBrZXJuZWw6DQo+IGh0dHBzOi8vZWxpeGlyLmJvb3RsaW4uY29tL2xpbnV4 L3Y0LjkuMTM3L3NvdXJjZS9kcml2ZXJzL25ldC9ldGhlcm5ldC92DQo+IGlhL3ZpYS1yaGluZS5j I0wxODAwDQo+IA0KPiBUaGUgUE1EIGluIERQREsgcmVqZWN0cyB0aGUgZnJhbWUgb3IgZXh0ZW5k IHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8NCj4gc2VuZC4gUGFkZGluZyBhc3N1bWVzIHlvdSBhcmUg emVyb2luZyBvdXQgdGhlIHBhY2tldCB0byBtZWV0IHRoZSBOSUMNCj4gcmVxdWlyZWQgbGVuZ3Ro LiBJbiBQTURzIHVubGVzcyB0aGV5IGFyZSBjb25jZXJuZWQgd2l0aCBzZWN1cml0eSB0aGV5DQo+ IGp1c3QgbWFrZSBzdXJlIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgc2VudCBhcmUgY29ycmVj dCBmb3IgdGhlDQo+IGhhcmR3YXJlICg2MCBieXRlcyBtaW4pLiBNb3N0IE5JQ3MgY2FuIGRvIHRo aXMgcGFkZGluZyBpbiBoYXJkd2FyZSBhcw0KPiB0aGUgcGFja2V0IGlzIHNlbnQuDQoNCkdyZWF0 LCBzbyBsZXQncyBleHRlbmQgRFBESyB0byBwcm92aWRlIHRoYXQgZmVhdHVyZSENCg0KPiANCj4g SWYgd2UgYXJlIHRhbGtpbmcgYWJvdXQgdmlydGlvIGFuZCBvbmx5IHRhbGtpbmcgdG8gdmlydGlv IHNvZnR3YXJlDQo+IGJhY2tlbmQgdGhlbiB5b3UgY2FuIHNlbmQgYW55IHNpemUgcGFja2V0LCBi dXQgdGhlIHN0YWNrcyBvciBjb2RlDQo+IHJlY2VpdmluZyB0aGUgcGFja2V0IHlvdSBuZWVkIHRv IG1ha2Ugc3VyZSBpdCBkb2VzIG5vdCB0aHJvdyB0aGUgcGFja2V0DQo+IGF3YXkgYmVjYXVzZSBp dCBpcyBhIHJ1bnQgcGFja2V0LiBNb3N0IE5JQ3MgdGhyb3cgYXdheSBSdW50cyBhbmQgYXJlDQo+ IG5ldmVyIHJlY2VpdmVkIHRvIG1lbW9yeS4gSW4gc29mdHdhcmUgYmFzZWQgZGVzaWduIGxpa2Ug dmlydGlvIHlvdSBjYW4NCj4gZG8gd2hhdGV2ZXIgeW91IHdhbnQgaW4gdGhlIGxlbmd0aCwgYnV0 IEkgd291bGQgc3VnZ2VzdCBmb2xsb3dpbmcgdGhlDQo+IEV0aGVybmV0IHN0YW5kYXJkIGFueXdh eS4NCg0KR29vZCBwb2ludDogSWYgdmlydGlvIGlzIGNvbnNpZGVyZWQgYW4gRXRoZXJuZXQgdHlw ZSBpbnRlcmZhY2UgKGFsdGhvdWdoIGl0IGlzIGFibGUgdG8gaGFuZGxlIHJlYWxseSBsYXJnZSBK dW1ibyBmcmFtZXMpLCB0aGVuIHllcywgdGhlIG1pbmltdW0gcGFja2V0IHNpemUgcmVxdWlyZW1l bnRzIHNob3VsZCBhcHBseSB0byB0aGlzIHRvby4gVGhpcyBpcyBwcm9iYWJseSBhIHF1ZXN0aW9u IGZvciB0aGUgdmlydGlvIGZvbGtzIHRvIGRlY2lkZTogSXMgdmlydGlvIGNvbnNpZGVyZWQgYW4g RXRoZXJuZXQgaW50ZXJmYWNlLCBvciBhbm90aGVyIHR5cGUgb2YgaW50ZXJmYWNlICh3aXRob3V0 IEV0aGVybmV0IHBhY2tldCBzaXplIHJlcXVpcmVtZW50cywgbGlrZSB0aGUgImxvY2FsaG9zdCIg cHNldWRvIGludGVyZmFjZSk/DQoNCkJ1dCBob3cgYWJvdXQgb3RoZXIgbm9uLXBoeXNpY2FsIGlu dGVyZmFjZXMsIGFyZSB0aGV5IGFsbCBjb25zaWRlcmVkIEV0aGVybmV0IHR5cGUgaW50ZXJmYWNl cz8gQW5kIHRvIHRha2UgaXQgdG8gdGhlIGV4dHJlbWU6IFNob3VsZCBEUERLIGJ5IGRlc2lnbiBv bmx5IHN1cHBvcnQgRXRoZXJuZXQgdHlwZSBpbnRlcmZhY2VzPw0KDQo+IA0KPiBOb3cgc29tZSBz dGFja3Mgb3IgY29kZSAobGlrZSBQa3RnZW4pIGFzc3VtZSB0aGUgaGFyZHdhcmUgd2lsbCBhcHBl bmQNCj4gdGhlIENSQyAoNCBieXRlcykgYW5kIHRoaXMgbWVhbnMgdGhlIGFwcGxpY2F0aW9uIG5l ZWRzIHRvIGF0IGxlYXN0IGRvDQo+IDYwIGJ5dGUgZnJhbWVzIGZvciB0aGUgUE1ELCB1bmxlc3Mg eW91IGtub3cgdGhlIGhhcmR3YXJlIHdpbGwgZG8gdGhlDQo+IHJpZ2h0IHRoaW5nLiBUaGUgY2hh bGxlbmdlIGlzIHRoYXQgYXBwbGljYXRpb25zIGluIERQREsgZG8gbm90IGtub3cgdGhlDQo+IGRl dGFpbHMgb2YgdGhlIE5JQyBhdCB0aGF0IGxldmVsIGFuZCBzaG91bGQgYWx3YXlzIGFzc3VtZSB0 aGUgcGFja2V0DQo+IGJlaW5nIHNlbnQgYW5kIHJlY2VpdmVkIGFyZSB2YWxpZCBFdGhlcm5ldCBm cmFtZXMuIFRoaXMgbWVhbnMgYXQgbGVhc2UNCj4gNjAgYnl0ZXMgYXMgYWxsIE5JQ3MgYWRkIHRo ZSBDUkMgbm93IGEgZGF5cyBhbmQgbm90IGFsbCBvZiB0aGVtIGFkanVzdA0KPiB0aGUgc2l6ZSBv ZiB0aGUgZnJhbWUuDQo+IA0KPiBJZiB5b3UgZG8gbm90IHNlbmQgdGhlIFBNRCBhIDYwIGJ5dGUg ZnJhbWUgdGhlbiB5b3UgYXJlIGV4cGVjdGluZyB0aGUNCj4gTklDIHRvIGhhbmRsZSB0aGUgcGFk ZGluZyBhbmQgYXBwZW5kaW5nIHRoZSBDUkMgb3IgYXQgbGVhc3QgZXhwZWN0aW5nDQo+IHRoZSBQ TUQgdG8gYWRqdXN0IHRoZSBzaXplLCB3aGljaCBJIGtub3cgaXMgbm90IGluIGFsbCBQTURzIG9y IGZyb20gbXkNCj4gZGVhbGluZyB3aXRoIHdyaXRpbmcgUGt0Z2VuIGZvciBEUERLLg0KDQpZb3Ug c2FpZCBpdCEgQW5kIGl0IHByb3ZlcyBteSBwb2ludCBhYm91dCB3aGF0IGhpZ2hlciBsYXllciBk ZXZlbG9wZXJzIHByb2JhYmx5IGV4cGVjdCBvZiBsb3dlciBsYXllcnMuDQoNCj4gDQo+IElmIHlv dSBhcmUgZXhwZWN0aW5nIERQREsgUE1EcyB0byBiZSBMaW51eCBkcml2ZXJzIHRoZW4geW91IG5l ZWQgdG8NCj4gYWRqdXN0IHlvdXIgdGhpbmtpbmcgYW5kIG9ubHkgc2VuZCB0aGUgUE1EIDYwIGJ5 dGVzIGF0IGxlYXN0LiBVbmxlc3MNCj4geW91IHdhbnQgdG8gbW9kaWZ5IGFsbCBvZiB0aGUgUE1E cyB0byBmb3JjZSB0aGUgc2l6ZSB0byA2MGJ5dGVzLCB0aGVuIEkNCj4gaGF2ZSBubyBvYmplY3Rp b24gdG8gdGhhdCBwYXRjaCBqdXN0IG5lZWQgdG8gZ2V0IGFsbCBvZiB0aGUgUE1Ecw0KPiBtYWlu dGFpbmVycyB0byBhZ3JlZSB3aXRoIHlvdXIgcGF0Y2guDQoNCkkgYWdyZWUgdGhhdCBkaWZmZXJl bnQgdGhpbmtpbmcgaXMgcmVxdWlyZWQsIGFuZCBMaW51eCBpcyBub3QgYWx3YXlzIHBlcmZlY3Qu IEhvd2V2ZXIsIHdlIGFsbG93ZWQgdG8gY29weSBnb29kIGlkZWFzIGZyb20gTGludXggLSBhbmQg SSB0aGluayB0aGF0IGhhdmluZyBwYWRkaW5nIGluIEV0aGVybmV0IFBNRHMgaXMgYSBwZXJmZWN0 bHkgbG9naWNhbCBjb25jZXB0LiBUaGVyZSBhcmUgcXVpdGUgYSBmZXcgUE1EIG1haW50YWluZXJz LCBhbmQgSSB3YXMgaG9waW5nIHRvIHRha2UgdGhlIGRpc2N1c3Npb24gYWJvdXQgdGhlIGhpZ2gg bGV2ZWwgY29uY2VwdCBvbiB0aGUgb3BlbiBtYWlsaW5nIGxpc3QgYmVmb3JlIHdlIGludm9sdmUg dGhlIFBNRCBtYWludGFpbmVycyBhYm91dCB0aGUgaW1wbGVtZW50YXRpb24uDQoNCkkgdGhpbmsg dGhhdCBhIHN0YWNrIG9yIGNvZGUgdXNpbmcgRFBESyBhcyBpdHMgbG93ZXIgbGF5ZXIgZXhwZWN0 cyBEUERLIHRvIHByb3ZpZGUgc29tZSBvZmZsb2FkaW5nLCBhbmQgc2luY2UgcGFkZGluZyB0byA2 MCBieXRlIHBheWxvYWQgaXMgYSB2ZXJ5IGNvbW1vbiBldmVudCBpbiBzdGFja3MgKGR1ZSB0byBl bXB0eSBUQ1AgQUNLIHBhY2tldHMpLCB0aGlzIGlzIGFuIG9idmlvdXMgb2ZmbG9hZCBjYW5kaWRh dGUhDQoNCk9mIGNvdXJzZSwgaWYgRFBESyB3YXMgb25seSBkZXNpZ25lZCBmb3IgcGFja2V0IGZv cndhcmRpbmcgYXBwbGljYXRpb25zLCBhbmQgbm90IGFsc28gaW50ZW5kZWQgZm9yIHVzZSBhcyBh IGxvd2VyIGxheWVyIGZvciBzdGFja3MsIHRoZW4gcGFkZGluZyB0byA2MCBieXRlIHBheWxvYWQg c2hvdWxkIG5vdCBiZSByZXF1aXJlZC4gSSBndWVzcyB0aGF0IERQREsgd2FzIGluaXRpYWxseSBk ZXNpZ25lZCBmb3IgcGFja2V0IGZvcndhcmRpbmcgYXBwbGljYXRpb25zLCBidXQgaXMgdGhpcyBz dGlsbCB0aGUgY2FzZSB0b2RheSwgb3Igc2hvdWxkIERQREsgZXZvbHZlIHRvIGFsc28gYWNjb21t b2RhdGUgdGhlIG5lZWRzIG9mIHN0YWNrcz8NCg0KSWYgcGFkZGluZyBpcyBub3QgaW5jbHVkZWQg aW4gdGhlIFBNRHMsIGNvbnNpZGVyIHRoaXMgKGhpZ2hseSB0aGVvcmV0aWNhbCBleGFtcGxlcyBi dXQgZm9yIHRoZSBkaXNjdXNzaW9uIG9mIHRoZSBjb25jZXB0KTogVGhlIERQREsgcGFja2V0IG1h bmlwdWxhdGlvbiBsaWJyYXJpZXMgY291bGQgYmUgcmVxdWlyZWQgdG8gZG8gaXQsIGUuZy4gZm9y IGZyYWdtZW50YXRpb24gcmVhc3NlbWJseSBvZiB0d28gZXh0cmVtZWx5IHNtYWxsIHBhY2tldHMs IHRvdGFsaW5nIGxlc3MgdGhhbiA2MCBieXRlIHBheWxvYWQsIG9yIGZvciBJUHNlYyBkZWNhcHN1 bGF0aW9uIG9mIGEgdmVyeSBzbWFsbCBwYWNrZXQuIE90aGVyd2lzZSB0aGUgYXBwbGljYXRpb24g d291bGQgaGF2ZSB0byBkbyBpdCBqdXN0IGJlZm9yZSBjYWxsaW5nIHRoZSBQTUQgVFggZnVuY3Rp b25zLg0KDQoNCj4gDQo+IE9uIFJYIGZyYW1lcyBvZiBsZXNzIHRoZW4gNjQgYnl0ZXMgKHdpdGgg Q1JDKSBhcmUgcnVudHMgYW5kIG1vc3QgTklDcw0KPiB0b2RheSB3aWxsIG5vdCByZWNlaXZlIHRo ZXNlIGZyYW1lcyB1bmxlc3MgeW91IHByb2dyYW0gdGhlIGhhcmR3YXJlIHRvDQo+IGRvIHNvLiDi gJhJbiBteSBkYXnigJkgOi0pIHdlIGhhZCBjb2xsaXNpb24gb24gdGhlIHdpcmUgd2hpY2ggY3Jl YXRlZCBhDQo+IGh1Z2UgYW1vdW50IG9mIGZyYWdtZW50cyBvciBSdW50cywgdG9kYXkgaXMgbm90 IHRoZSBjYXNlIHdpdGggcG9pbnQtdG8tDQo+IHBvaW50IGxpbmtzIHdlIGhhdmUgdG9kYXkuDQoN CkkgYWdyZWUgdGhhdCBSWCBvZiBmcmFtZXMgb2YgbGVzcyB0aGFuIDY0IGJ5dGVzICh3aXRoIENS QykgLSBvbiBFdGhlcm5ldCBpbnRlcmZhY2VzISAtIHNob3VsZCBzdGlsbCBiZSBjb25zaWRlcmVk IHJ1bnRzLCBhbmQgdGh1cyBzaG91bGQgYmUgZGlzY2FyZGVkIGFuZCBjb3VudGVkIGFzIGVycm9y cy4NCg0KPiANCj4gPg0KPiA+IElmIERQREsgZG9lcyBub3QgcGFkIHNob3J0IGZyYW1lcyBwYXNz ZWQgdG8gdGhlIGVncmVzcyBmdW5jdGlvbiBvZg0KPiB0aGUgTklDIGRyaXZlcnMsIGl0IHNob3Vs ZCBiZSBub3RlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiAtIHRoaXMgaXMgbm90DQo+IHRoZSBleHBl Y3RlZCBiZWhhdmlvciBieSBwcm90b2NvbCBkZXZlbG9wZXJzLg0KPiA+DQo+ID4gT3IgZXZlbiBi ZXR0ZXI6IFRoZSBOSUMgaGFyZHdhcmUgKG9yIGRyaXZlcikgc2hvdWxkIGVuc3VyZSBwYWRkaW5n LA0KPiBwb3NzaWJseSBjb25zaWRlcmluZyBpdCBhIFRYIE9mZmxvYWQgZmVhdHVyZS4gR2VuZXJh dGluZyBwYWNrZXRzDQo+IHNob3J0ZXIgdGhhbiA2MCBieXRlcyBkYXRhIGlzIGNvbW1vbiAtIGp1 c3QgY29uc2lkZXIgdGhlIGFtb3VudCBvZiBUQ1ANCj4gQUNLIHBhY2tldHMsIHdoaWNoIGFyZSB0 eXBpY2FsbHkgb25seSAxNCArIDIwICsgMjAgPSA1NCBieXRlcyAoaW5jbC4NCj4gdGhlIDE0IGJ5 dGUgRXRoZXJuZXQgaGVhZGVyKS4NCj4gPg0KPiA+DQo+ID4gTWVkIHZlbmxpZyBoaWxzZW4gLyBr aW5kIHJlZ2FyZHMNCj4gPiAtIE1vcnRlbiBCcsO4cnVwDQo+ID4NCj4gPj4gLS0tLS1PcmlnaW5h bCBNZXNzYWdlLS0tLS0NCj4gPj4gRnJvbTogZGV2IFttYWlsdG86ZGV2LWJvdW5jZXNAZHBkay5v cmddIE9uIEJlaGFsZiBPZiBCdXJha292LA0KPiBBbmF0b2x5DQo+ID4+IFNlbnQ6IFdlZG5lc2Rh eSwgTm92ZW1iZXIgMTQsIDIwMTggMTE6MTggQU0NCj4gPj4gVG86IFNhbQ0KPiA+PiBDYzogZGV2 QGRwZGsub3JnDQo+ID4+IFN1YmplY3Q6IFJlOiBbZHBkay1kZXZdIFdoZXJlIGlzIHRoZSBwYWRk aW5nIGNvZGUgaW4gRFBESz8NCj4gPj4NCj4gPj4gT24gMTQtTm92LTE4IDU6NDUgQU0sIFNhbSB3 cm90ZToNCj4gPj4+IE9LLCB0aGVuIHNob3J0bHkgc3BlYWtpbmcsIERQREsgd2lsbCBOT1QgY2Fy ZSBhYm91dCBwYWRkaW5nLg0KPiA+Pj4gTklDIHdpbGwgY2FyZSBhYm91dCBwYWRkaW5nIHdoaWxl IHNlbmQgYW5kIHJlY3Ygd2l0aCBOSUMuDQo+ID4+PiBrZXJuZWwgd2lsbCBjYXJlIGFib3V0IHdo aWxlIHNlbmQgYW5kIHJlY3Ygd2l0aCB2aG9zdHVzZXIgcG9ydC4NCj4gPj4+DQo+ID4+PiBJcyB0 aGF0IHJpZ2h0Pw0KPiA+Pg0KPiA+PiBJIGNhbm5vdCBzcGVhayBmb3IgdmlydGlvL3Zob3N0IHVz ZXIgc2luY2UgaSBhbSBub3QgdGVycmlibHkNCj4gZmFtaWxpYXINCj4gPj4gd2l0aCB0aGVtLiBG b3IgcmVndWxhciBwYWNrZXRzLCBnZW5lcmFsbHkgc3BlYWtpbmcsIHBhY2tldHMgc2hvcnRlcg0K PiA+PiB0aGFuDQo+ID4+IDYwIGJ5dGVzIGFyZSBpbnZhbGlkLiBXaGV0aGVyIERQREsgZG9lcyBv ciBkb2VzIG5vdCBjYXJlIGFib3V0DQo+IHBhZGRpbmcNCj4gPj4gaXMgaXJyZWxldmFudCwgYmVj YXVzZSAqeW91KiBhcmUgYXR0ZW1wdGluZyB0byB0cmFuc21pdCBwYWNrZXRzIHRoYXQNCj4gPj4g YXJlDQo+ID4+IG5vdCB2YWxpZC4gWW91IHNob3VsZG4ndCByZWx5IG9uIHRoaXMgYmVoYXZpb3Iu DQo+ID4+DQo+ID4+Pg0KPiA+Pj4NCj4gPj4+IEJ1cmFrb3YsIEFuYXRvbHkgPGFuYXRvbHkuYnVy YWtvdkBpbnRlbC5jb20NCj4gPj4+IDxtYWlsdG86YW5hdG9seS5idXJha292QGludGVsLmNvbT4+ IOS6jjIwMTjlubQxMeaciDEz5pel5ZGo5LqMDQo+IOS4i+WNiDU6MjnlhpnpgZPvvJoNCj4gPj4+ DQo+ID4+PiAgICBPbiAxMy1Ob3YtMTggNzoxNiBBTSwgU2FtIHdyb3RlOg0KPiA+Pj4+IEhpIGFs bCwNCj4gPj4+Pg0KPiA+Pj4+IEFzIHdlIGtub3csIGV0aGVybmV0IGZyYW1lIG11c3QgbG9uZ2Vy IHRoZW4gNjRCLg0KPiA+Pj4+DQo+ID4+Pj4gU28gaWYgSSBjcmVhdGUgcnRlX21idWYgYW5kIGZp bGwgaXQgd2l0aCBqdXN0IDYwQiBkYXRhLCB3aWxsDQo+ID4+Pj4gcnRlX2V0aF90eF9idXJzdCBh ZGQgcGFkZGluZyBkYXRhLCBsZXQgdGhlIGZyYW1lIGxvbmdlciB0aGVuDQo+ID4+IDY0Qg0KPiA+ Pj4+DQo+ID4+Pj4gSWYgaXQgZG9lcywgd2hlcmUgaXMgdGhlIGNvZGU/DQo+ID4+Pj4NCj4gPj4+ DQo+ID4+PiAgICBPdGhlcnMgY2FuIGNvcnJlY3QgbWUgaWYgaSdtIHdyb25nIGhlcmUsIGJ1dCBz cGVjaWZpY2FsbHkgaW4NCj4gY2FzZQ0KPiA+PiBvZg0KPiA+Pj4gICAgNjQtYnl0ZSBwYWNrZXRz LCB0aGVzZSBhcmUgdGhlIHNob3J0ZXN0IHZhbGlkIHBhY2tldHMgdGhhdCB5b3UNCj4gPj4gY2Fu DQo+ID4+PiAgICBzZW5kLA0KPiA+Pj4gICAgYW5kIGEgNjQtYnl0ZSBwYWNrZXQgd2lsbCBhY3R1 YWxseSBjYXJyeSBvbmx5IDYwIGJ5dGVzJyB3b3J0aCBvZg0KPiA+PiBwYWNrZXQNCj4gPj4+ICAg IGRhdGEsIGJlY2F1c2UgdGhlcmUncyBhIDQtYnl0ZSBDUkMgZnJhbWUgYXQgdGhlIGVuZCAoc2Vl DQo+IEV0aGVybmV0DQo+ID4+IGZyYW1lDQo+ID4+PiAgICBmb3JtYXQpLiBJZiB5b3UgZW5hYmxl ZCBDUkMgb2ZmbG9hZCwgdGhlbiB5b3VyIE5JQyB3aWxsIGFwcGVuZA0KPiA+PiB0aGUgNA0KPiA+ Pj4gICAgYnl0ZXMgYXQgdHJhbnNtaXQuIElmIHlvdSBoYXZlbid0LCB0aGVuIGl0J3MgdXAgdG8g ZWFjaA0KPiA+PiBpbmRpdmlkdWFsDQo+ID4+PiAgICBkcml2ZXIvTklDIHRvIGFjY2VwdC9yZWpl Y3Qgc3VjaCBhIHBhY2tldCBiZWNhdXNlIGl0IGNhbiByaWdodGx5DQo+ID4+IGJlDQo+ID4+PiAg ICBjb25zaWRlcmVkIG1hbGZvcm1lZC4NCj4gPj4+DQo+ID4+PiAgICBJbiBhZGRpdGlvbiwgeW91 ciBOSUMgbWF5IGFkZCBlLmcuIFZMQU4gdGFncyBvciBvdGhlciBzdHVmZiwNCj4gPj4gYWdhaW4N Cj4gPj4+ICAgIGRlcGVuZGluZyBvbiBoYXJkd2FyZSBvZmZsb2FkcyB0aGF0IHlvdSBoYXZlIGVu YWJsZWQgaW4geW91ciBUWA0KPiA+Pj4gICAgY29uZmlndXJhdGlvbiwgd2hpY2ggbWF5IHB1c2gg dGhlIHBhY2tldCBzaXplIGJleW9uZCA2NCBieXRlcw0KPiA+PiB3aGlsZQ0KPiA+Pj4gICAgaGF2 aW5nIG9ubHkgNjAgYnl0ZXMgb2YgYWN0dWFsIHBhY2tldCBkYXRhLg0KPiA+Pj4NCj4gPj4+ICAg IC0tDQo+ID4+PiAgICBUaGFua3MsDQo+ID4+PiAgICBBbmF0b2x5DQo+ID4+Pg0KPiA+Pg0KPiA+ Pg0KPiA+PiAtLQ0KPiA+PiBUaGFua3MsDQo+ID4+IEFuYXRvbHkNCj4gPg0KPiANCj4gUmVnYXJk cywNCj4gS2VpdGgNCg0K