From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 903BB43E83 for ; Tue, 16 Apr 2024 09:14:25 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 7BDC4402CF; Tue, 16 Apr 2024 09:14:25 +0200 (CEST) Received: from dkmailrelay1.smartsharesystems.com (smartserver.smartsharesystems.com [77.243.40.215]) by mails.dpdk.org (Postfix) with ESMTP id F18A540293; Tue, 16 Apr 2024 09:14:22 +0200 (CEST) Received: from smartserver.smartsharesystems.com (smartserver.smartsharesys.local [192.168.4.10]) by dkmailrelay1.smartsharesystems.com (Postfix) with ESMTP id BFB7720DFD; Tue, 16 Apr 2024 09:14:22 +0200 (CEST) Content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 Subject: RE: [PATCH v2 3/8] mbuf: fix Tx checksum offload examples Date: Tue, 16 Apr 2024 09:14:17 +0200 X-MimeOLE: Produced By Microsoft Exchange V6.5 Message-ID: <98CBD80474FA8B44BF855DF32C47DC35E9F3A4@smartserver.smartshare.dk> In-Reply-To: <66d378ca-eb94-4165-9b18-c5fc9b10ea16@amd.com> X-MS-Has-Attach: X-MS-TNEF-Correlator: Thread-Topic: [PATCH v2 3/8] mbuf: fix Tx checksum offload examples Thread-Index: AdqPRtm4FCPHe4VIS5mdVB3RS99feQAhBR8g References: <20240405125039.897933-1-david.marchand@redhat.com> <20240405144604.906695-1-david.marchand@redhat.com> <20240405144604.906695-4-david.marchand@redhat.com> <98CBD80474FA8B44BF855DF32C47DC35E9F36C@smartserver.smartshare.dk> <10b564b42f8d4db387f6302701f24ce3@huawei.com> <98CBD80474FA8B44BF855DF32C47DC35E9F381@smartserver.smartshare.dk> <409157f5da3e4c628ca678dd9e2c7957@huawei.com> <98CBD80474FA8B44BF855DF32C47DC35E9F38F@smartserver.smartshare.dk> <52850a78c83445548a0b78bfd04e6f91@huawei.com> <98CBD80474FA8B44BF855DF32C47DC35E9F39F@smartserver.smartshare.dk> <66d378ca-eb94-4165-9b18-c5fc9b10ea16@amd.com> From: =?UTF-8?B?TW9ydGVuIEJyw7hydXA=?= To: "Ferruh Yigit" , "Konstantin Ananyev" , "David Marchand" , Cc: , , "Olivier Matz" , "Jijiang Liu" , "Andrew Rybchenko" , "Kaiwen Deng" , , , "Aman Singh" , "Yuying Zhang" , "Jerin Jacob" X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org PiBGcm9tOiBGZXJydWggWWlnaXQgW21haWx0bzpmZXJydWgueWlnaXRAYW1kLmNvbV0NCj4gU2Vu dDogTW9uZGF5LCAxNSBBcHJpbCAyMDI0IDE3LjA4DQo+IA0KPiBPbiA0LzEyLzIwMjQgMzo0NCBQ TSwgTW9ydGVuIEJyw7hydXAgd3JvdGU6DQo+ID4+Pj4+Pj4+IE1hbmRhdGUgdXNlIG9mIHJ0ZV9l dGhfdHhfcHJlcGFyZSgpIGluIHRoZSBtYnVmIFR4IGNoZWNrc3VtDQo+ID4+IG9mZmxvYWQNCj4g Pj4+Pj4+Pj4gZXhhbXBsZXMuDQo+ID4+Pj4+Pj4NCj4gPj4+Pj4+PiBJIHN0cm9uZ2x5IGRpc2Fn cmVlIHdpdGggdGhpcyBjaGFuZ2UhDQo+ID4+Pj4+Pj4NCj4gPj4+Pj4+PiBJdCB3aWxsIGNhdXNl IGEgaHVnZSBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiBmb3Igc2hhcGluZw0KPiA+PiBhcHBsaWNh dGlvbnM6DQo+ID4+Pj4+Pj4NCj4gPj4+Pj4+PiBBIHBhY2tldCB3aWxsIGJlIHByb2Nlc3NlZCBh bmQgZmluYWxpemVkIGF0IGFuIG91dHB1dCBvcg0KPiA+PiBmb3J3YXJkaW5nDQo+ID4+Pj4+PiBw aXBlbGluZSBzdGFnZSwgd2hlcmUgc29tZSBvdGhlciBmaWVsZHMgbWlnaHQgYWxzbyBiZSB3cml0 dGVuLA0KPiA+PiBzbw0KPiA+Pj4+Pj4+IHplcm9pbmcgZS5nLiB0aGUgb3V0X2lwIGNoZWNrc3Vt IGF0IHRoaXMgc3RhZ2UgaGFzIGxvdyBjb3N0DQo+ID4+IChubyBuZXcNCj4gPj4+Pj4+IGNhY2hl IG1pc3NlcykuDQo+ID4+Pj4+Pj4NCj4gPj4+Pj4+PiBUaGVuLCB0aGUgcGFja2V0IG1pZ2h0IGJl IHF1ZXVlZCBmb3IgUW9TIG9yIHNpbWlsYXIuDQo+ID4+Pj4+Pj4NCj4gPj4+Pj4+PiBJZiBydGVf ZXRoX3R4X3ByZXBhcmUoKSBtdXN0IGJlIGNhbGxlZCBhdCB0aGUgZWdyZXNzIHBpcGVsaW5lDQo+ ID4+IHN0YWdlLA0KPiA+Pj4+Pj4gaXQgaGFzIHRvIHdyaXRlIHRvIHRoZSBwYWNrZXQgYW5kIGNh dXNlIGEgY2FjaGUgbWlzcyBwZXIgcGFja2V0LA0KPiA+Pj4+Pj4+IGluc3RlYWQgb2Ygc2ltcGx5 IHBhc3Npbmcgb24gdGhlIHBhY2tldCB0byB0aGUgTklDIGhhcmR3YXJlLg0KPiA+Pj4+Pj4+DQo+ ID4+Pj4+Pj4gSXQgbXVzdCBiZSBwb3NzaWJsZSB0byBmaW5hbGl6ZSB0aGUgcGFja2V0IGF0IHRo ZQ0KPiA+PiBvdXRwdXQvZm9yd2FyZGluZw0KPiA+Pj4+Pj4gcGlwZWxpbmUgc3RhZ2UhDQo+ID4+ Pj4+Pg0KPiA+Pj4+Pj4gSWYgeW91IGNhbiBmaW5hbGl6ZSB5b3VyIHBhY2tldCBvbiAgb3V0cHV0 L2ZvcndhcmRpbmcsIHRoZW4gd2h5DQo+ID4+IHlvdQ0KPiA+Pj4+Pj4gY2FuJ3QgaW52b2tlIHR4 X3ByZXBhcmUoKSBvbiB0aGUgc2FtZSBzdGFnZT8NCj4gPj4+Pj4+IFRoZXJlIHNlZW1zIHRvIGJl IHNvbWUgbWlzdW5kZXJzdGFuZGluZyBhYm91dCB3aGF0IHR4X3ByZXBhcmUoKQ0KPiA+PiBkb2Vz IC0NCj4gPj4+Pj4+IGluIGZhY3QgaXQgZG9lc24ndCBjb21tdW5pY2F0ZSB3aXRoIEhXIHF1ZXVl IChkb2Vzbid0IHVwZGF0ZSBUWEQNCj4gPj4gcmluZywNCj4gPj4+Pj4+IGV0Yy4pLCB3aGF0IGl0 IGRvZXMgLSBqdXN0IG1ha2UgY2hhbmdlcyBpbiBtYnVmIGl0c2VsZi4NCj4gPj4+Pj4+IFllcywg aXQgcmVhZHMgc29tZSBmaWVsZHMgaW4gU1cgVFggcXVldWUgc3RydWN0IChtYXggbnVtYmVyIG9m DQo+ID4+IFRYRHMgcGVyDQo+ID4+Pj4+PiBwYWNrZXQsIGV0Yy4pLCBidXQgQUZBSUsgaXQgaXMg c2FmZQ0KPiA+Pj4+Pj4gdG8gY2FsbCB0eF9wcmVwYXJlKCkgYW5kIHR4X2J1cnN0KCkgZnJvbSBk aWZmZXJlbnQgdGhyZWFkcy4NCj4gPj4+Pj4+IEF0IGxlYXN0IG9uIGltcGxlbWVudGF0aW9ucyBJ IGFtIGF3YXJlIGFib3V0Lg0KPiA+Pj4+Pj4gSnVzdCBjaGVja2VkIHRoZSBkb2NzIC0gaXQgc2Vl bXMgbm90IHN0YXRlZCBleHBsaWNpdGx5IGFueXdoZXJlLA0KPiA+PiBtaWdodA0KPiA+Pj4+Pj4g YmUgdGhhdCdzIHdoeSBpdCBjYXVzaW5nIHN1Y2ggbWlzdW5kZXJzdGFuZGluZy4NCj4gPj4+Pj4+ DQo+ID4+Pj4+Pj4NCj4gPj4+Pj4+PiBBbHNvLCBob3cgaXMgcnRlX2V0aF90eF9wcmVwYXJlKCkg c3VwcG9zZWQgdG8gd29yayBmb3IgY2xvbmVkDQo+ID4+IHBhY2tldHMNCj4gPj4+Pj4+IGVncmVz c2luZyBvbiBkaWZmZXJlbnQgTklDIGhhcmR3YXJlPw0KPiA+Pj4+Pj4NCj4gPj4+Pj4+IElmIHlv dSBjcmVhdGUgYSBjbG9uZSBvZiBmdWxsIHBhY2tldCAoaW5jbHVkaW5nIEwyL0wzKSBoZWFkZXJz DQo+ID4+IHRoZW4NCj4gPj4+Pj4+IG9idmlvdXNseSBzdWNoIGNvbnN0cnVjdGlvbiBtaWdodCBu b3QNCj4gPj4+Pj4+IHdvcmsgcHJvcGVybHkgd2l0aCB0eF9wcmVwYXJlKCkgb3ZlciB0d28gZGlm ZmVyZW50IE5JQ3MuDQo+ID4+Pj4+PiBUaG91Z2ggSW4gbWFqb3JpdHkgb2YgY2FzZXMgeW91IGRv IGNsb25lIHNlZ21lbnRzIHdpdGggZGF0YSwNCj4gPj4gd2hpbGUgYXQNCj4gPj4+Pj4+IGxlYXN0 IEwyIGhlYWRlcnMgYXJlIHB1dCBpbnRvIGRpZmZlcmVudCBzZWdtZW50cy4NCj4gPj4+Pj4+IE9u ZSBzaW1wbGUgYXBwcm9hY2ggd291bGQgYmUgdG8ga2VlcCBMMyBoZWFkZXIgaW4gdGhhdCBzZXBh cmF0ZQ0KPiA+PiBzZWdtZW50Lg0KPiA+Pj4+Pj4gQnV0IHllcywgdGhlcmUgaXMgYSBwcm9ibGVt IHdoZW4geW91J2xsIG5lZWQgdG8gc2VuZCBleGFjdGx5IHRoZQ0KPiA+PiBzYW1lDQo+ID4+Pj4+ PiBwYWNrZXQgb3ZlciBkaWZmZXJlbnQgTklDcy4NCj4gPj4+Pj4+IEFzIEkgcmVtZW1iZXIsIGZv ciBib25kaW5nIFBNRCB0aGluZ3MgZG9uJ3Qgd29yayBxdWl0ZSB3ZWxsIGhlcmUNCj4gPj4gLSB5 b3UNCj4gPj4+Pj4+IG1pZ2h0IGhhdmUgYSBib25kIG92ZXIgMiBOSUNzIHdpdGgNCj4gPj4+Pj4+ IGRpZmZlcmVudCB0eF9wcmVwYXJlKCkgYW5kIHdoaWNoIG9uZSB0byBjYWxsIG1pZ2h0IGJlIG5v dCBjbGVhcg0KPiA+PiB0aWxsDQo+ID4+Pj4+PiBhY3R1YWwgUE1EIHR4X2J1cnN0KCkgaXMgaW52 b2tlZC4NCj4gPj4+Pj4+DQo+ID4+Pj4+Pj4NCj4gPj4+Pj4+PiBJbiB0aGVvcnksIGl0IG1pZ2h0 IGdldCBldmVuIHdvcnNlIGlmIHdlIG1ha2UgdGhpcyBvcGFxdWUNCj4gPj4gaW5zdGVhZCBvZg0K PiA+Pj4+Pj4gdHJhbnNwYXJlbnQgYW5kIHN0YW5kYXJkaXplZDoNCj4gPj4+Pj4+PiBPbmUgUE1E IG1pZ2h0IHJlc2V0IG91dF9pcCBjaGVja3N1bSB0byAweDAwMDAsIGFuZCBhbm90aGVyIFBNRA0K PiA+PiBtaWdodA0KPiA+Pj4+Pj4gcmVzZXQgaXQgdG8gMHhGRkZGLg0KPiA+Pj4+Pj4NCj4gPj4+ Pj4+Pg0KPiA+Pj4+Pj4+IEkgY2FuIG9ubHkgc2VlIG9uZSBzb2x1dGlvbjoNCj4gPj4+Pj4+PiBX ZSBuZWVkIHRvIHN0YW5kYXJkaXplIG9uIGNvbW1vbiBtaW5pbXVtIHJlcXVpcmVtZW50cyBmb3Ig aG93DQo+ID4+IHRvDQo+ID4+Pj4+PiBwcmVwYXJlIHBhY2tldHMgZm9yIGVhY2ggVFggb2ZmbG9h ZC4NCj4gPj4+Pj4+DQo+ID4+Pj4+PiBJZiB3ZSBjYW4gbWFrZSBlYWNoIGFuZCBldmVyeSB2ZW5k b3IgdG8gYWdyZWUgaGVyZSAtIHRoYXQNCj4gPj4gZGVmaW5pdGVseQ0KPiA+Pj4+Pj4gd2lsbCBo ZWxwIHRvIHNpbXBsaWZ5IHRoaW5ncyBxdWl0ZSBhIGJpdC4NCj4gPj4+Pj4NCj4gPj4+Pj4gQW4g QVBJIGlzIG1vcmUgdGhhbiBhIGZ1bmN0aW9uIG5hbWUgYW5kIHBhcmFtZXRlcnMuDQo+ID4+Pj4+ IEl0IGFsc28gaGFzIHByZWNvbmRpdGlvbnMgYW5kIHBvc3Rjb25kaXRpb25zLg0KPiA+Pj4+Pg0K PiA+Pj4+PiBBbGwgbWFqb3IgTklDIHZlbmRvcnMgYXJlIGNvbnRyaWJ1dGluZyB0byBEUERLLg0K PiA+Pj4+PiBJdCBzaG91bGQgYmUgcG9zc2libGUgdG8gcmVhY2ggY29uc2Vuc3VzIGZvciByZWFz b25hYmxlIG1pbmltdW0NCj4gPj4gcmVxdWlyZW1lbnRzDQo+ID4+Pj4gZm9yIG9mZmxvYWRzLg0K PiA+Pj4+PiBIYXJkd2FyZS0gYW5kIGRyaXZlci1zcGVjaWZpYyBleGNlcHRpb25zIGNhbiBiZSBk b2N1bWVudGVkIHdpdGgNCj4gPj4gdGhlIG9mZmxvYWQNCj4gPj4+PiBmbGFnLCBvciB3aXRoIHJ0 ZV9ldGhfcngvdHhfYnVyc3QoKSwgbGlrZSB0aGUgbm90ZSB0bw0KPiA+Pj4+PiBydGVfZXRoX3J4 X2J1cnN0KCk6DQo+ID4+Pj4+ICJTb21lIGRyaXZlcnMgdXNpbmcgdmVjdG9yIGluc3RydWN0aW9u cyByZXF1aXJlIHRoYXQgbmJfcGt0cyBpcw0KPiA+PiBkaXZpc2libGUgYnkNCj4gPj4+PiA0IG9y IDgsIGRlcGVuZGluZyBvbiB0aGUgZHJpdmVyIGltcGxlbWVudGF0aW9uLiINCj4gPj4+Pg0KPiA+ Pj4+IElmIHdlIGludHJvZHVjZSBhIHJ1bGUgdGhhdCBldmVyeW9uZSBzdXBwb3NlZCB0byBmb2xs b3cgYW5kIHRoZW4NCj4gPj4gc3RyYWlnaHR3YXkNCj4gPj4+PiBhbGxvdyBwZW9wbGUgdG8gaGF2 ZSBhICdkb2N1bWVudGVkIGV4Y2VwdGlvbnMnLA0KPiA+Pj4+IGZvciBtZSBpdCBtZWFucyBsaWtl ICdubyBydWxlJyBpbiBwcmFjdGljZS4NCj4gPj4+PiBBICdkb2N1bWVudGVkIGV4Y2VwdGlvbnMn IGFwcHJvYWNoIG1pZ2h0IHdvcmsgaWYgeW91IGhhdmUgNQ0KPiA+PiBkaWZmZXJlbnQgUE1EcyB0 bw0KPiA+Pj4+IHN1cHBvcnQsIGJ1dCBub3Qgd2hlbiB5b3UgaGF2ZSA1MCsuDQo+ID4+Pj4gTm8t b25lIHdvdWxkIHdyaXRlIGFuIGFwcCB3aXRoIHBvc3NpYmxlIDEwIGRpZmZlcmVudCBleGNlcHRp b24NCj4gY2FzZXMNCj4gPj4gaW4gaGlzDQo+ID4+Pj4gaGVhZC4NCj4gPj4+PiBBZ2Fpbiwgd2l0 aCBzdWNoIGFwcHJvYWNoIHdlIGNhbiBmb3JnZXQgYWJvdXQgYmFja3dhcmQNCj4gPj4gY29tcGF0 aWJpbGl0eS4NCj4gPj4+PiBJIHRoaW5rIHdlIGFscmVhZHkgaGFkIHRoaXMgZGlzY3Vzc2lvbiBi ZWZvcmUsIG15IG9waW5pb24gcmVtYWlucw0KPiA+PiB0aGUgc2FtZQ0KPiA+Pj4+IGhlcmUgLQ0K PiA+Pj4+ICdkb2N1bWVudGVkIGV4Y2VwdGlvbnMnIGFwcHJvYWNoIGlzIGEgd2F5IHRvIHRyb3Vi bGUuDQo+ID4+Pg0KPiA+Pj4gVGhlICJtaW5pbXVtIHJlcXVpcmVtZW50cyIgc2hvdWxkIGJlIHRo ZSBsb3dlc3QgY29tbW9uIGRlbm9taW5hdG9yDQo+IG9mDQo+ID4+IGFsbCBOSUNzLg0KPiA+Pj4g RXhjZXB0aW9ucyBzaG91bGQgYmUgZXh0cmVtZWx5IGZldywgZm9yIG91dGxpZXIgTklDcyB0aGF0 IHN0aWxsIHdhbnQNCj4gPj4gdG8gcHJvdmlkZSBhbiBvZmZsb2FkIGFuZCBpdHMgZHJpdmVyIGlz IHVuYWJsZSB0byBsaXZlIHVwIHRvIHRoZQ0KPiA+Pj4gbWluaW11bSByZXF1aXJlbWVudHMuDQo+ ID4+PiBBbnkgZXhjZXB0aW9uIHNob3VsZCByZXF1aXJlIHRlY2hib2FyZCBhcHByb3ZhbC4gSWYg YSBOSUMvZHJpdmVyDQo+IGRvZXMNCj4gPj4gbm90IHN1cHBvcnQgdGhlICJtaW5pbXVtIHJlcXVp cmVtZW50cyIgZm9yIGFuIG9mZmxvYWQNCj4gPj4+IGZlYXR1cmUsIGl0IGlzIG5vdCBhbGxvd2Vk IHRvIGNsYWltIHN1cHBvcnQgZm9yIHRoYXQgb2ZmbG9hZA0KPiBmZWF0dXJlLA0KPiA+PiBvciBu ZWVkcyB0byBzZWVrIGFwcHJvdmFsIGZvciBhbiBleGNlcHRpb24uDQo+ID4+Pg0KPiA+Pj4gQXMg YW5vdGhlciBvcHRpb24gZm9yIE5JQ3Mgbm90IHN1cHBvcnRpbmcgdGhlIG1pbmltdW0gcmVxdWly ZW1lbnRzDQo+IG9mDQo+ID4+IGFuIG9mZmxvYWQgZmVhdHVyZSwgd2UgY291bGQgaW50cm9kdWNl IG9mZmxvYWQgZmxhZ3Mgd2l0aA0KPiA+Pj4gZmluZXIgZ3JhbnVsYXJpdHkuIEUuZy4gb25lIG9m ZmxvYWQgZmxhZyBmb3IgImdvbGQgc3RhbmRhcmQiIFRYDQo+ID4+IGNoZWNrc3VtIHVwZGF0ZSAo d2hlcmUgdGhlIHBhY2tldCdzIGNoZWNrc3VtIGZpZWxkIGNhbiBoYXZlIGFueQ0KPiA+Pj4gdmFs dWUpLCBhbmQgYW5vdGhlciBvZmZsb2FkIGZsYWcgZm9yICJzaWx2ZXIgc3RhbmRhcmQiIFRYIGNo ZWNrc3VtDQo+ID4+IHVwZGF0ZSAod2hlcmUgdGhlIHBhY2tldCdzIGNoZWNrc3VtIGZpZWxkIG11 c3QgaGF2ZSBhDQo+ID4+PiBwcmVjb21wdXRlZCB2YWx1ZSkuDQo+ID4+DQo+ID4+IEFjdHVhbGx5 IHllcywgSSB3YXMgdGhpbmtpbmcgaW4gdGhlIHNhbWUgZGlyZWN0aW9uIC0gd2UgbmVlZCBzb21l DQo+IGV4dHJhDQo+ID4+IEFQSSB0byBhbGxvdyB1c2VyIHRvIGRpc3Rpbmd1aXNoLg0KPiA+PiBQ cm9iYWJseSB3ZSBjYW4gZG8gc29tZXRoaW5nIGxpa2UgdGhhdDogYSBuZXcgQVBJIGZvciB0aGUg ZXRoZGV2IGNhbGwNCj4gPj4gdGhhdCB3b3VsZCB0YWtlIGFzIGEgcGFyYW1ldGVyDQo+ID4+IFRY IG9mZmxvYWRzIGJpdG1hcCBhbmQgaW4gcmV0dXJuIHNwZWNpZnkgd291bGQgaXQgbmVlZCB0byBt b2RpZnkNCj4gPj4gY29udGVudHMgb2YgcGFja2V0IHRvIHN1cHBvcnQgdGhlc2UNCj4gPj4gb2Zm bG9hZHMgb3Igbm90Lg0KPiA+PiBTb21ldGhpbmcgbGlrZToNCj4gPj4gaW50IHJ0ZV9ldGhkZXZf dHhfb2ZmbG9hZF9wa3RfbW9kX3JlcXVpcmVkKHVudDY0X3QgdHhfb2ZmbG9hZHMpDQo+ID4+DQo+ ID4+IEZvciB0aGUgbWFqb3JpdHkgb2YgdGhlIGRyaXZlcnMgdGhhdCBzYXRpc2Z5IHRoZXNlICJt aW5pbXVtDQo+ID4+IHJlcXVpcmVtZW50cyIgY29ycmVzcG9uZGluZyBkZXZvcHMNCj4gPj4gZW50 cnkgd2lsbCBiZSBlbXB0eSBhbmQgd2UnbGwgYWx3YXlzIHJldHVybiAwLCBvdGhlcndpc2UgUE1E IGhhcyB0bw0KPiA+PiBwcm92aWRlIGEgcHJvcGVyIGRldm9wLg0KPiA+PiBUaGVuIGFnYWluLCBp dCB3b3VsZCBiZSB1cCB0byB0aGUgdXNlciwgdG8gZGV0ZXJtaW5lIGNhbiBoZSBwYXNzIHNhbWUN Cj4gPj4gcGFja2V0IHRvIDIgZGlmZmVyZW50IE5JQ3Mgb3Igbm90Lg0KPiA+Pg0KPiA+PiBJIHN1 cHBvc2UgaXQgaXMgc2ltaWxhciB0byB3aGF0IHlvdSB3ZXJlIHRhbGtpbmcgYWJvdXQ/DQo+ID4N Cj4gPiBJIHdhcyB0aGlua2luZyBzb21ldGhpbmcgbW9yZSBzaW1wbGU6DQo+ID4NCj4gPiBUaGUg TklDIGV4cG9zZXMgaXRzIFJYIGFuZCBUWCBvZmZsb2FkIGNhcGFiaWxpdGllcyB0byB0aGUgYXBw bGljYXRpb24NCj4gdGhyb3VnaCB0aGUgcngvdHhfb2ZmbG9hZF9jYXBhIGFuZCBvdGhlciBmaWVs ZHMgaW4gdGhlIHJ0ZV9ldGhfZGV2X2luZm8NCj4gc3RydWN0dXJlIHJldHVybmVkIGJ5IHJ0ZV9l dGhfZGV2X2luZm9fZ2V0KCkuDQo+ID4NCj4gPiBFLmcuIHR4X29mZmxvYWRfY2FwYSBtaWdodCBo YXZlIHRoZSBSVEVfRVRIX1RYX09GRkxPQURfSVBWNF9DS1NVTSBmbGFnDQo+IHNldC4NCj4gPiBU aGVzZSBjYXBhYmlsaXR5IGZsYWdzIChvciBlbnVtcykgYXJlIG1vc3RseSB1bmRvY3VtZW50ZWQg aW4gdGhlIGNvZGUsDQo+IGJ1dCBJIGd1ZXNzIHRoYXQgdGhlIFJURV9FVEhfVFhfT0ZGTE9BRF9J UFY0X0NLU1VNIGNhcGFiaWxpdHkgbWVhbnMgdGhhdA0KPiB0aGUgTklDIGlzIGFibGUgdG8gdXBk YXRlIHRoZSBJUHY0IGhlYWRlciBjaGVja3N1bSBhdCBlZ3Jlc3MgKG9uIHRoZQ0KPiB3aXJlLCBp LmUuIHdpdGhvdXQgbW9kaWZ5aW5nIHRoZSBtYnVmIG9yIHBhY2tldCBkYXRhKSwgYW5kIHRoYXQg dGhlDQo+IGFwcGxpY2F0aW9uIG11c3Qgc2V0IFJURV9NQlVGX0ZfVFhfSVBfQ0tTVU0gaW4gdGhl IG1idWZzIHRvIHV0aWxpemUgdGhpcw0KPiBvZmZsb2FkLg0KPiA+IEkgd291bGQgZGVmaW5lIGFu ZCBkb2N1bWVudCB3aGF0IGVhY2ggY2FwYWJpbGl0eSBmbGFnL2VudW0gZXhhY3RseQ0KPiBtZWFu cywgdGhlIG1pbmltdW0gcmVxdWlyZW1lbnRzIChhcyBkZWZpbmVkIGJ5IHRoZSBEUERLIGNvbW11 bml0eSkgZm9yDQo+IHRoZSBkcml2ZXIgdG8gY2xhaW0gc3VwcG9ydCBmb3IgaXQsIGFuZCB0aGUg cmVxdWlyZW1lbnRzIGZvciBhbg0KPiBhcHBsaWNhdGlvbiB0byB1c2UgaXQuDQo+ID4NCj4gDQo+ ICsxIHRvIGltcHJvdmUgZG9jdW1lbnRhdGlvbiwgYW5kIGNsZWFyIG9mZmxvYWQgd2hlcmUgaXQg aXMgbmVlZGVkLg0KPiANCj4gQW5vdGhlciBnYXAgaXMgaW4gdGVzdGluZywgd2hlbmV2ZXIgYSBk ZXZpY2UvZHJpdmVyIGNsYWltcyBhbiBvZmZsb2FkDQo+IGNhcGFiaWxpdHksIHdlIGRvbid0IGhh dmUgYSB0ZXN0IHN1aXQgdG8gY29uZmlybSBhbmQgdmVyaWZ5IHRoaXMgY2xhaW0uDQoNClllcCwg Y29uZm9ybWFuY2UgdGVzdGluZyBpcyBsYWNraW5nIGJpZyB0aW1lIGluIG91ciBDSS4NCkFkZGlu ZyB0aGUgdHMtZmFjdG9yeSB0ZXN0cyB0byB0aGUgQ0kgd2FzIGEgYmlnIHN0ZXAgaW4gdGhpcyBk aXJlY3Rpb24uDQpCdXQgZm9yIG5vdywgd2UgYXJlIG1vc3RseSByZWx5aW5nIG9uIHZlbmRvcidz IGludGVybmFsIHRlc3RpbmcuDQoNCj4gDQo+IA0KPiA+IEZvciB0aGUgc2FrZSBvZiBkaXNjdXNz aW9uLCBsZXQncyBzYXkgdGhhdA0KPiBSVEVfRVRIX1RYX09GRkxPQURfSVBWNF9DS1NVTSBtZWFu cyAiZ29sZCBzdGFuZGFyZCIgVFggY2hlY2tzdW0gdXBkYXRlDQo+IGNhcGFiaWxpdHkgKGkuZS4g bm8gcmVxdWlyZW1lbnRzIHRvIHRoZSBjaGVja3N1bSBmaWVsZCBpbiB0aGUgcGFja2V0DQo+IGNv bnRlbnRzKS4NCj4gPiBJZiBzb21lIE5JQyByZXF1aXJlcyB0aGUgY2hlY2tzdW0gZmllbGQgaW4g dGhlIHBhY2tldCBjb250ZW50cyB0byBoYXZlDQo+IGEgcHJlY29tcHV0ZWQgdmFsdWUsIHRoZSBO SUMgd291bGQgbm90IGJlIGFsbG93ZWQgdG8gY2xhaW0gdGhlDQo+IFJURV9FVEhfVFhfT0ZGTE9B RF9JUFY0X0NLU1VNIGNhcGFiaWxpdHkuDQo+ID4gU3VjaCBhIE5JQyB3b3VsZCBuZWVkIHRvIGRl ZmluZSBhbmQgZG9jdW1lbnQgYSBuZXcgY2FwYWJpbGl0eSwgZS5nLg0KPiBSVEVfRVRIX1RYX09G RkxPQURfSVBWNF9DS1NVTV9BU1NJU1RFRCwgZm9yIHRoZSAic2lsdmVyIHN0YW5kYXJkIiBUWA0K PiBjaGVja3N1bSB1cGRhdGUgY2FwYWJpbGl0eS4NCj4gPg0KPiA+IEluIG90aGVyIHdvcmRzOiBJ IHdvdWxkIGVuY29kZSB2YXJpYXRpb25zIG9mIG9mZmxvYWQgY2FwYWJpbGl0aWVzDQo+IGRpcmVj dGx5IGluIHRoZSBjYXBhYmlsaXRpZXMgZmxhZ3MuDQo+ID4gVGhlbiB3ZSBkb24ndCBuZWVkIGFk ZGl0aW9uYWwgQVBJcyB0byBoZWxwIGludGVycHJldCB0aG9zZQ0KPiBjYXBhYmlsaXRpZXMuDQo+ ID4NCj4gPiBUaGlzIHdheSwgdGhlIGFwcGxpY2F0aW9uIGNhbiBwcm9iZSB0aGUgTklDIGNhcGFi aWxpdGllcyB0byBkZXRlcm1pbmUNCj4gd2hhdCBjYW4gYmUgb2ZmbG9hZGVkLCBhbmQgaG93IHRv IGRvIGl0Lg0KPiA+DQo+ID4gVGhlIGFwcGxpY2F0aW9uIGNhbiBiZSBkZXNpZ25lZCB0bzoNCj4g PiAxLiB1c2UgYSBjb21tb24gcGFja2V0IHByb2Nlc3NpbmcgcGlwZWxpbmUsIHV0aWxpemluZyBv bmx5IHRoZSBsb3dlc3QNCj4gY29tbW9uIGNhcGFiaWxpdGllcyBkZW5vbWluYXRvciBvZiBhbGwg ZGV0ZWN0ZWQgTklDcywgb3INCj4gPiAyLiB1c2UgYSBwYWNrZXQgcHJvY2Vzc2luZyBwaXBlbGlu ZSwgaGFuZGxpbmcgcGFja2V0cyBkaWZmZXJlbnRseQ0KPiBhY2NvcmRpbmcgdG8gdGhlIGNhcGFi aWxpdGllcyBvZiB0aGUgaW52b2x2ZWQgTklDcy4NCj4gPg0KPiANCj4gT2ZmbG9hZCBjYXBhYmls aXRpZXMgYXJlIGFscmVhZHkgcHJvdmlkZWQgdG8gZW5hYmxlIGFwcGxpY2F0aW9ucyBhcyB5b3UN Cj4gbWVudGlvbmVkIGFib3ZlLg0KPiANCj4gQWdyZWUgdGhhdCAnX0FTU0lTVEVEJyBjYXBhYmls aXR5IGZsYWdzIGdpdmVzIG1vcmUgZGV0YWlscyB0bw0KPiBhcHBsaWNhdGlvbiB0byBtYW5hZ2Ug aXQgYnV0IG15IGNvbmNlcm4gaXMgaXQgY29tcGxpY2F0ZXMgb2ZmbG9hZGluZw0KPiBtb3JlLg0K PiANCj4gVGhlIG51bWJlciBvZiAiYXNzaXN0ZWQiIG9mZmxvYWRzIGlzIG5vdCBtdWNoLCBtYWlu bHkgaXQgaXMgZm9yIGNrc3VtLg0KPiBDdXJyZW50IGFwcHJvYWNoIGlzIHNpbXBsZXIsIGRldmlj ZXMgcmVxdWlyZXMgcHJlY29uZGl0aW9uIGltcGxlbWVudHMgaXQNCj4gaW4gJ3R4X3ByZXBhcmUn IGFuZCBhcHBsaWNhdGlvbiB1c2luZyB0aGVzZSBvZmZsb2FkcyBjYWxscyBiZWZvcmUNCj4gJ3R4 X2J1cnN0Jy4gRGV2aWNlL2RyaXZlcnMgZG9lc24ndCByZXF1aXJlIGl0IGRvbid0IGhhdmUgJ3R4 X3ByZXBhcmUnIHNvDQo+IG5vIGltcGFjdCB0byB0aGUgYXBwbGljYXRpb24uDQo+IA0KPiBXaWxs IGl0IHdvcmsgdG8gaGF2ZSBzb21ldGhpbmcgaW4gYmV0d2VlbiwgYW5vdGhlciBjYXBhYmlsaXR5 IHRvIGhvbGQgaWYNCj4gJ3R4X3ByZXBhcmUnIG5lZWRzIHRvIGJlIGNhbGxlZCB3aXRoIHRoaXMg ZGV2aWNlIG9yIG5vdD8NCj4gSXQgY2FuIGJlIHBvc3NpYmxlIHRvIG1ha2UgdGhpcyB2YXJpYWJs ZSAzMmJpdHMgdGhhdCBob2xkcyBvZmZsb2Fkcw0KPiByZXF1aXJlIGFzc2lzdGFuY2UgaW4gYSBi aXQtd2lzZSB3YXksIGJ1dCBJIHByZWZlciBzaW1wbGUgaWYNCj4gJ3R4X3ByZXBhcmUnIHJlcXVp cmVkIGZsYWcsIHRoaXMgbWF5IGhlbHAgYXBwbGljYXRpb24gdG8gZGVjaWRlIHRvIHVzZQ0KPiBv ZmZsb2FkcyBpbiB0aGF0IGRldmljZSBhbmQgdG8gY2FsbCAndHhfcHJlcGFyZScgb3Igbm90Lg0K DQpDb25zaWRlciBhbiBJUCBNdWx0aWNhc3QgcGFja2V0IHRvIGJlIHRyYW5zbWl0dGVkIG9uIG1h bnkgcG9ydHMuDQoNCldpdGggbXkgc3VnZ2VzdGlvbiwgdGhlIHBhY2tldCBjYW4gYmUgcHJlcGFy ZWQgb25jZSAtIGkuZS4gdGhlIG91dHB1dC9mb3J3YXJkaW5nIHN0YWdlIHNldHMgdGhlIElQIGhl YWRlciBjaGVja3N1bSBhcyByZXF1aXJlZCBieSB0aGUgKGxvd2VzdCBjb21tb24gZGVub21pbmF0 b3IpIG9mZmxvYWQgY2FwYWJpbGl0aWVzIGZsYWcgLSBiZWZvcmUgYmVpbmcgY2xvbmVkIGZvciB0 eCgpIG9uIGVhY2ggcG9ydC4NCg0KV2l0aCB0eF9wcmVwYXJlKCksIHRoZSBwYWNrZXQgbmVlZHMg dG8gYmUgY29waWVkIChkZWVwIGNvcHkhKSBmb3IgZWFjaCBwb3J0LCBhbmQgdGhlbiB0eF9wcmVw YXJlKCkgbmVlZHMgdG8gYmUgY2FsbGVkIGZvciBlYWNoIHBvcnQgYmVmb3JlIHR4KCkuDQoNClRo ZSBvcGFxdWUgdHhfcHJlcGFyZSgpIGNvbmNlcHQgdmlvbGF0ZXMgdGhlIGNvbmNlcHQgb2Ygbm90 IG1vZGlmeWluZyB0aGUgcGFja2V0IGF0IGVncmVzcy4NCg0KRFBESyBmb2xsb3dzIGEgcHJpbmNp cGxlIG9mIG5vdCB1c2luZyBvcGFxdWUgdHlwZXMsIHNvIGFwcGxpY2F0aW9uIGRldmVsb3BlcnMg Y2FuIG9wdGltaXplIGFjY29yZGluZ2x5LiBUaGUgb3BhcXVlIGJlaGF2aW9yIG9mIHR4X3ByZXBh cmUoKSB2aW9sYXRlcyB0aGlzIHByaW5jaXBsZSwgYW5kIEkgY29uc2lkZXIgaXQgYSBob3JyaWJs ZSBoYWNrIQ0KDQo+IA0KPiA+IE5COiBUaGVyZSBtYXkgYmUgb3RoZXIgdmFyaWF0aW9ucyB0aGFu IHJlcXVpcmluZyBwYWNrZXQgY29udGVudHMgdG8gYmUNCj4gbW9kaWZpZWQsIGFuZCB0aGV5IG1p Z2h0IGJlIGdyYW51bGFyLg0KPiA+IEUuZy4gYSBOSUMgbWlnaHQgcmVxdWlyZSBhc3Npc3RhbmNl IGZvciBUQ1AvVURQIGNoZWNrc3VtIG9mZmxvYWQsIGJ1dA0KPiBub3QgZm9yIElQIGNoZWNrc3Vt IG9mZmxvYWQsIHNvIGEgZnVuY3Rpb24gdGVsbGluZyBpZiBwYWNrZXQgY29udGVudHMNCj4gcmVx dWlyZXMgbW9kaWZpY2F0aW9uIHdvdWxkIG5vdCBzdWZmaWNlLg0KPiA+IEUuZy4gUlRFX0VUSF9U WF9PRkZMT0FEX01VTFRJX1NFR1MgaXMgZGVmaW5lZCwgYnV0IHRoZQ0KPiBydGVfZXRoX2Rldl9p bmZvIHN0cnVjdHVyZSBkb2Vzbid0IGV4cG9zZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbWF4DQo+ IG51bWJlciBvZiBzZWdtZW50cyBpdCBjYW4gaGFuZGxlLg0KPiA+DQo+IA0KPiBBbm90aGVyIGdv b2QgcG9pbnQgdG8gcmVwb3J0IG1heCBudW1iZXIgb2Ygc2VnbWVudCBjYW4gYmUgaGFuZGxlZCwg KzENCj4gDQo+IA0KPiA+IFBTOiBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIHdlIG1pZ2h0 IGRlZmluZQ0KPiBSVEVfRVRIX1RYX09GRkxPQURfSVBWNF9DS1NVTSBhcyB0aGUgInNpbHZlciBz dGFuZGFyZCIgb2ZmbG9hZCB0bw0KPiBzdXBwb3J0IHRoZSBjdXJyZW50ICJtaW5pbXVtIHJlcXVp cmVtZW50cyIsIGFuZCBhZGQNCj4gUlRFX0VUSF9UWF9PRkZMT0FEX0lQVjRfQ0tTVU1fQU5ZIGZv ciB0aGUgImdvbGQgc3RhbmRhcmQiIG9mZmxvYWQuDQo+ID4NCj4gPg0KPiA+Pg0KPiA+Pj4gRm9y IHJlZmVyZW5jZSwgY29uc2lkZXIgUlNTLCB3aGVyZSB0aGUgZmVhdHVyZSBzdXBwb3J0IGZsYWdz IGhhdmUNCj4gdmVyeQ0KPiA+PiBoaWdoIGdyYW51bGFyaXR5Lg0KPiA+Pj4NCj4gPj4+Pg0KPiA+ Pj4+PiBZb3UgbWVudGlvbiB0aGUgYm9uZGluZyBkcml2ZXIsIHdoaWNoIGlzIGEgZ29vZCBleGFt cGxlLg0KPiA+Pj4+PiBUaGUgcnRlX2V0aF90eF9idXJzdCgpIGRvY3VtZW50YXRpb24gaGFzIGEg bm90ZSBhYm91dCB0aGUgQVBJDQo+ID4+IHBvc3Rjb25kaXRpb24NCj4gPj4+PiBleGNlcHRpb24g Zm9yIHRoZSBib25kaW5nIGRyaXZlcjoNCj4gPj4+Pj4gIlRoaXMgZnVuY3Rpb24gbXVzdCBub3Qg bW9kaWZ5IG1idWZzIChpbmNsdWRpbmcgcGFja2V0cyBkYXRhKQ0KPiA+PiB1bmxlc3MgdGhlDQo+ ID4+Pj4gcmVmY250IGlzIDEuIEFuIGV4Y2VwdGlvbiBpcyB0aGUgYm9uZGluZyBQTUQsIFsuLi5d LCBtYnVmcw0KPiA+Pj4+PiBtYXkgYmUgbW9kaWZpZWQuIg0KPiA+Pj4+DQo+ID4+Pj4gRm9yIG1l LCB3aGF0IHdlJ3ZlIGRvbmUgZm9yIGJvbmRpbmcgdHhfcHJlcGFyZS90eF9idXJzdCgpIGlzIGEN Cj4gPj4gcmVhbGx5IGJhZA0KPiA+Pj4+IGV4YW1wbGUuDQo+ID4+Pj4gSW5pdGlhbCBhZ3JlZW1l bnQgYW5kIGRlc2lnbiBjaG9pY2Ugd2FzIHRoYXQgdHhfYnVyc3QoKSBzaG91bGQgbm90DQo+ID4+ IG1vZGlmeQ0KPiA+Pj4+IGNvbnRlbnRzIG9mIHRoZSBwYWNrZXRzDQo+ID4+Pj4gKHRoYXQgYWN0 dWFsbHkgd2FzIG9uZSBvZiB0aGUgcmVhc29ucyB3aHkgdHhfcHJlcGFyZSgpIHdhcw0KPiA+PiBp bnRyb2R1Y2VkKS4NCj4gPj4+PiBUaGUgb25seSByZWFzb24gSSBhZ3JlZWQgb24gdGhhdCBleGNl cHRpb24gLSBiZWNhdXNlIEkgY291bGRuJ3QNCj4gPj4gY29tZS11cCB3aXRoDQo+ID4+Pj4gc29t ZXRoaW5nIGxlc3MgdWdsaWVyLg0KPiA+Pj4+DQo+ID4+Pj4gQWN0dWFsbHksIHRoZXNlIHByb2Js ZW1zIHdpdGggYm9uZGluZyBQTUQgbWFkZSBtZSB0byBzdGFydCB0aGlua2luZw0KPiA+PiB0aGF0 DQo+ID4+Pj4gY3VycmVudA0KPiA+Pj4+IHR4X3ByZXBhcmUvdHhfYnVyc3QgYXBwcm9hY2ggbWln aHQgbmVlZCB0byBiZSByZWNvbnNpZGVyZWQgc29tZWhvdy4NCj4gPj4+DQo+ID4+PiBJbiBjYXNl cyB3aGVyZSBhIHByZWNlZGluZyBjYWxsIHRvIHR4X3ByZXBhcmUoKSBpcyByZXF1aXJlZCwgaG93 IGlzDQo+IGl0DQo+ID4+IHdvcnNlIG1vZGlmeWluZyB0aGUgcGFja2V0IGluIHR4X2J1cnN0KCkg dGhhbiBtb2RpZnlpbmcgdGhlDQo+ID4+PiBwYWNrZXQgaW4gdHhfcHJlcGFyZSgpPw0KPiA+Pj4N Cj4gPj4+IEJvdGggY2FzZXMgdmlvbGF0ZSB0aGUgcG9zdGNvbmRpdGlvbiB0aGF0IHBhY2tldHMg YXJlIG5vdCBtb2RpZmllZA0KPiBhdA0KPiA+PiBlZ3Jlc3MuDQo+ID4+Pg0KPiA+Pj4+DQo+ID4+ Pj4+PiBUaGVuIHdlIGNhbiBwcm9iYWJseSBoYXZlIG9uZSBjb21tb24gdHhfcHJlcGFyZSgpIGZv ciBhbGwNCj4gPj4gdmVuZG9ycyA7KQ0KPiA+Pj4+Pg0KPiA+Pj4+PiBZZXMsIHRoYXQgd291bGQg YmUgdGhlIGdvYWwuDQo+ID4+Pj4+IE1vcmUgcmVhbGlzdGljYWxseSwgdGhlIGV0aGRldiBsYXll ciBjb3VsZCBwZXJmb3JtIHRoZSBjb21tb24NCj4gPj4gY2hlY2tzLCBhbmQNCj4gPj4+PiBvbmx5 IHRoZSBub24tY29uZm9ybWluZyBkcml2ZXJzIHdvdWxkIGhhdmUgdG8gaW1wbGVtZW50DQo+ID4+ Pj4+IHRoZWlyIHNwZWNpZmljIHR3ZWFrcy4NCj4gPj4+Pg0KPiA+Pj4+IEhtbSwgIGJ1dCB0aGF0 J3Mgd2hhdCB3ZSBoYXZlIHJpZ2h0IG5vdzoNCj4gPj4+PiAtIGZpZWxkcyBpbiBtYnVmIGFuZCBw YWNrZXQgZGF0YSB0aGF0IHVzZXIgaGFzIHRvIGZpbGwgY29ycmVjdGx5DQo+IGFuZA0KPiA+PiBk ZXYNCj4gPj4+PiBzcGVjaWZpYyB0eF9wcmVwYXJlKCkuDQo+ID4+Pj4gSG93IHdoYXQgeW91IHN1 Z2dlc3Qgd2lsbCBkaWZmZXIgdGhlbj8NCj4gPj4+DQo+ID4+PiBZb3UncmUgMTAwICUgcmlnaHQg aGVyZS4gV2UgY291bGQgbW92ZSBtb3JlIGNoZWNrcyBpbnRvIHRoZSBldGhkZXYNCj4gPj4gbGF5 ZXIsIHNwZWNpZmljYWxseSBjaGVja3MgcmVsYXRlZCB0byB0aGUgIm1pbmltdW0NCj4gPj4+IHJl cXVpcmVtZW50cyIuDQo+ID4+Pg0KPiA+Pj4+IEFuZCBob3cgaXQgd2lsbCBoZWxwIGxldCBzYXkg d2l0aCBib25kaW5nIFBNRCBzaXR1YXRpb24sIG9yIHdpdGgNCj4gVFgtDQo+ID4+IGluZyBvZiB0 aGUNCj4gPj4+PiBzYW1lIHBhY2tldCBvdmVyIDIgZGlmZmVyZW50IE5JQ3M/DQo+ID4+Pg0KPiA+ Pj4gVGhlIGJvbmRpbmcgZHJpdmVyIGlzIGJyb2tlbi4NCj4gPj4+IEl0IGNhbiBvbmx5IGJlIGZp eGVkIGJ5IG5vdCB2aW9sYXRpbmcgdGhlIGVncmVzcyBwb3N0Y29uZGl0aW9uIGluDQo+ID4+IGVp dGhlciB0eF9idXJzdCgpIG9yIHR4X3ByZXBhcmUoKS4NCj4gPj4+ICJNaW5pbXVtIHJlcXVpcmVt ZW50cyIgbWlnaHQgaGVscCBkb2luZyB0aGF0Lg0KPiA+Pj4NCj4gPj4+Pg0KPiA+Pj4+PiBJZiB3 ZSBkb24ndCBzdGFuZGFyZGl6ZSB0aGUgbWVhbmluZyBvZiB0aGUgb2ZmbG9hZCBmbGFncywgdGhl DQo+ID4+IGFwcGxpY2F0aW9uDQo+ID4+Pj4gZGV2ZWxvcGVycyBjYW5ub3QgdHJ1c3QgdGhlbSEN Cj4gPj4+Pj4gSSdtIGFmcmFpZCB0aGlzIGlzIHRoZSBjdXJyZW50IHNpdHVhdGlvbiAtIGFwcGxp Y2F0aW9uIGRldmVsb3BlcnMNCj4gPj4gZWl0aGVyDQo+ID4+Pj4gdGVzdCB3aXRoIHNwZWNpZmlj IE5JQyBoYXJkd2FyZSwgb3IgZG9uJ3QgdXNlIHRoZSBvZmZsb2FkIGZlYXR1cmVzLg0KPiA+Pj4+ DQo+ID4+Pj4gV2VsbCwgSSBoYXZlIHVzZWQgVFggb2ZmbG9hZHMgdGhyb3VnaCBzZXZlcmFsIHBy b2plY3RzLCBpdCB3b3JrZWQNCj4gPj4gcXVpdGUgd2VsbC4NCj4gPj4+DQo+ID4+PiBUaGF0IGlz IGdvb2QgdG8gaGVhci4NCj4gPj4+IEFuZCBJIGRvbid0IG9wcG9zZSB0byB0aGF0Lg0KPiA+Pj4N Cj4gPj4+IEluIHRoaXMgZGlzY3Vzc2lvbiwgSSBhbSB3b3JyaWVkIGFib3V0IHRoZSByb2FkbWFw IGRpcmVjdGlvbiBmb3INCj4gRFBESy4NCj4gPj4+IEkgb3Bwb3NlIHRvIHRoZSBjb25jZXB0IG9m IHJlcXVpcmluZyBjYWxsaW5nIHR4X3ByZXBhcmUoKSBiZWZvcmUNCj4gPj4gY2FsbGluZyB0eF9i dXJzdCgpIHdoZW4gdXNpbmcgb2ZmbG9hZC4gSSB0aGluayBpdCBpcyBjb25jZXB0dWFsbHkNCj4g d3JvbmcsDQo+ID4+PiBhbmQgYnJlYWtzIHRoZSBlZ3Jlc3MgcG9zdGNvbmRpdGlvbi4NCj4gPj4+ IEkgcHJvcG9zZSAibWluaW11bSByZXF1aXJlbWVudHMiIGFzIGEgYmV0dGVyIHNvbHV0aW9uLg0K PiA+Pj4NCj4gPj4+PiBUaG91Z2ggaGF2ZSB0byBhZG1pdCwgbmV2ZXIgaGF2ZSB0byB1c2UgVFgg b2ZmbG9hZHMgdG9nZXRoZXIgd2l0aA0KPiA+PiBvdXIgYm9uZGluZw0KPiA+Pj4+IFBNRC4NCj4g Pj4+Pg0KPiA+DQoNCg==