From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by dpdk.org (Postfix) with ESMTP id 5D23A19F5 for ; Mon, 17 Sep 2018 12:37:01 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga106.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 17 Sep 2018 03:37:00 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.53,385,1531810800"; d="scan'208";a="86736524" Received: from irsmsx106.ger.corp.intel.com ([163.33.3.31]) by fmsmga002.fm.intel.com with ESMTP; 17 Sep 2018 03:36:59 -0700 Received: from irsmsx112.ger.corp.intel.com (10.108.20.5) by IRSMSX106.ger.corp.intel.com (163.33.3.31) with Microsoft SMTP Server (TLS) id 14.3.319.2; Mon, 17 Sep 2018 11:36:58 +0100 Received: from irsmsx105.ger.corp.intel.com ([169.254.7.54]) by irsmsx112.ger.corp.intel.com ([169.254.1.163]) with mapi id 14.03.0319.002; Mon, 17 Sep 2018 11:36:58 +0100 From: "Ananyev, Konstantin" To: "Joseph, Anoob" , "dev@dpdk.org" CC: "Awal, Mohammad Abdul" , "Doherty, Declan" , "Jerin Jacob (jerin.jacob@caviumnetworks.com)" , Narayana Prasad Thread-Topic: [dpdk-dev] [RFC] ipsec: new library for IPsec data-path processing Thread-Index: AQHUO8sQ1vNhPIIy2kCq+ieD7nPPdqTefpOAgABfO7CAAuY7AIALGZsggAAAuDCABMYgAIACx64A Date: Mon, 17 Sep 2018 10:36:57 +0000 Message-ID: <2601191342CEEE43887BDE71AB977258EA956E8E@irsmsx105.ger.corp.intel.com> References: <1535129598-27301-1-git-send-email-konstantin.ananyev@intel.com> <358d1b6c-26f2-b125-07a4-cfb1c0e2a57b@caviumnetworks.com> <2601191342CEEE43887BDE71AB977258EA95089D@irsmsx105.ger.corp.intel.com> <475cf471-b46a-671a-5485-0042c652430c@caviumnetworks.com> <2601191342CEEE43887BDE71AB977258EA954BAD@irsmsx105.ger.corp.intel.com> <2601191342CEEE43887BDE71AB977258EA954E9D@irsmsx105.ger.corp.intel.com> In-Reply-To: Accept-Language: en-IE, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiNGZjNjI0YjAtMzdkNC00YjZiLTlkZTItMTNiNWZlN2MwNmJmIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiQVlHZXdVUGxRQWVCRE1heGJja05kcXdnUHkzdWdWXC95YmIyYWhQVEVGZEZTenNPN1wvWW9LdGRvbkFWMlZ4aWE0In0= x-ctpclassification: CTP_NT dlp-product: dlpe-windows dlp-version: 11.0.400.15 dlp-reaction: no-action x-originating-ip: [163.33.239.180] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dpdk-dev] [RFC] ipsec: new library for IPsec data-path processing X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 17 Sep 2018 10:37:02 -0000 SGkgQW5vb2IsDQoNCj4gDQo+IEhpIEtvbnN0YW50aW4sDQo+IFBsZWFzZSBzZWUgaW5saW5lLg0K PiANCj4gDQo+IFRoaXMgUkZDIGludHJvZHVjZXMgYSBuZXcgbGlicmFyeSB3aXRoaW4gRFBESzog bGlicnRlX2lwc2VjLg0KPiBUaGUgYWltIGlzIHRvIHByb3ZpZGUgRFBESyBuYXRpdmUgaGlnaCBw ZXJmb3JtYW5jZSBsaWJyYXJ5IGZvciBJUHNlYw0KPiBkYXRhLXBhdGggcHJvY2Vzc2luZy4NCj4g VGhlIGxpYnJhcnkgaXMgc3VwcG9zZWQgdG8gdXRpbGl6ZSBleGlzdGluZyBEUERLIGNyeXB0by1k ZXYgYW5kDQo+IHNlY3VyaXR5IEFQSSB0byBwcm92aWRlIGFwcGxpY2F0aW9uIHdpdGggdHJhbnNw YXJlbnQgSVBzZWMgcHJvY2Vzc2luZyBBUEkuDQo+IFRoZSBsaWJyYXJ5IGlzIGNvbmNlbnRyYXRl ZCBvbiBkYXRhLXBhdGggcHJvdG9jb2xzIHByb2Nlc3NpbmcgKEVTUCBhbmQgQUgpLA0KPiBJS0Ug cHJvdG9jb2wocykgaW1wbGVtZW50YXRpb24gaXMgb3V0IG9mIHNjb3BlIGZvciB0aGF0IGxpYnJh cnkuDQo+IFRob3VnaCBob29rL2NhbGxiYWNrIG1lY2hhbmlzbXMgd2lsbCBiZSBkZWZpbmVkIHRv IGFsbG93IGludGVncmF0ZSBpdA0KPiB3aXRoIGV4aXN0aW5nIElLRSBpbXBsZW1lbnRhdGlvbnMu DQo+IER1ZSB0byBxdWl0ZSBjb21wbGV4IG5hdHVyZSBvZiBJUHNlYyBwcm90b2NvbCBzdWl0ZSBh bmQgdmFyaWV0eSBvZiB1c2VyDQo+IHJlcXVpcmVtZW50cyBhbmQgdXNhZ2Ugc2NlbmFyaW9zIGEg ZmV3IEFQSSBsZXZlbHMgd2lsbCBiZSBwcm92aWRlZDoNCj4gMSkgU2VjdXJpdHkgQXNzb2NpYXRp b24gKFNBLWxldmVsKSBBUEkNCj4gICAgICBPcGVyYXRlcyBhdCBTQSBsZXZlbCwgcHJvdmlkZXMg ZnVuY3Rpb25zIHRvOg0KPiAgICAgIC0gaW5pdGlhbGl6ZS90ZWFyZG93biBTQSBvYmplY3QNCj4g ICAgICAtIHByb2Nlc3MgaW5ib3VuZC9vdXRib3VuZCBFU1AvQUggcGFja2V0cyBhc3NvY2lhdGVk IHdpdGggdGhlIGdpdmVuIFNBDQo+ICAgICAgICAoZGVjcnlwdC9lbmNyeXB0LCBhdXRoZW50aWNh dGUsIGNoZWNrIGludGVncml0eSwNCj4gICAgICAgICBhZGQvcmVtb3ZlIEVTUC9BSCByZWxhdGVk IGhlYWRlcnMgYW5kIGRhdGEsIGV0Yy4pLg0KPiAyKSBTZWN1cml0eSBBc3NvY2lhdGlvbiBEYXRh YmFzZSAoU0FEKSBBUEkNCj4gICAgICBBUEkgdG8gY3JlYXRlL21hbmFnZS9kZXN0cm95IElQc2Vj IFNBRC4NCj4gICAgICBXaGlsZSBEUERLIElQc2VjIGxpYnJhcnkgcGxhbnMgdG8gaGF2ZSBpdHMg b3duIGltcGxlbWVudGF0aW9uLA0KPiAgICAgIHRoZSBpbnRlbnRpb24gaXMgdG8ga2VlcCBpdCBh cyBpbmRlcGVuZGVudCBmcm9tIHRoZSBvdGhlciBwYXJ0cw0KPiAgICAgIG9mIElQc2VjIGxpYnJh cnkgYXMgcG9zc2libGUuDQo+ICAgICAgVGhhdCBpcyBzdXBwb3NlZCB0byBnaXZlIHVzZXJzIHRo ZSBhYmlsaXR5IHRvIHByb3ZpZGUgdGhlaXIgb3duDQo+ICAgICAgaW1wbGVtZW50YXRpb24gb2Yg dGhlIFNBRCBjb21wYXRpYmxlIHdpdGggdGhlIG90aGVyIHBhcnRzIG9mIHRoZQ0KPiAgICAgIElQ c2VjIGxpYnJhcnkuDQo+IDMpIElQc2VjIENvbnRleHQgKENUWCkgQVBJDQo+ICAgICAgVGhpcyBp cyBzdXBwb3NlZCB0byBiZSBhIGhpZ2gtbGV2ZWwgQVBJLCB3aGVyZSBlYWNoIElQc2VjIENUWCBp cyBhbg0KPiAgICAgIGFic3RyYWN0aW9uIG9mICdpbmRlcGVuZGVudCBjb3B5IG9mIHRoZSBJUHNl YyBzdGFjaycuDQo+ICAgICAgQ1RYIG93bnMgc2V0IG9mIFNBcywgU0FEcyBhbmQgYXNzaWduZWQg dG8gaXQgY3J5cHRvLWRldiBxdWV1ZXMsIGV0Yy4NCj4gICAgICBhbmQgcHJvdmlkZXM6DQo+ICAg ICAgLSBkZS1tdWx0aXBsZXhpbmcgc3RyZWFtIG9mIGluYm91bmQgcGFja2V0cyB0byBwYXJ0aWN1 bGFyIFNBcyBhbmQNCj4gICAgICAgIGZ1cnRoZXIgSVBzZWMgcmVsYXRlZCBwcm9jZXNzaW5nLg0K PiAgICAgIC0gSVBzZWMgcmVsYXRlZCBwcm9jZXNzaW5nIGZvciB0aGUgb3V0Ym91bmQgcGFja2V0 cy4NCj4gICAgICAtIFNBIGFkZC9kZWxldGUvdXBkYXRlIGZ1bmN0aW9uYWxpdHkNCj4gW0Fub29i XTogU2VjdXJpdHkgUG9saWN5IGlzIGFuIGltcG9ydGFudCBhc3BlY3Qgb2YgSVBzZWMuIEFuIElQ c2VjDQo+IGxpYnJhcnkgd2l0aG91dCBTZWN1cml0eSBQb2xpY3kgQVBJIHdvdWxkIGJlIGluY29t cGxldGUuIEZvciBpbmxpbmUNCj4gcHJvdG9jb2wgb2ZmbG9hZCwgdGhlIGZpbmFsIFNQLVNBIGNo ZWNrKHNlbGVjdG9yIGNoZWNrKSBpcyB0aGUgb25seQ0KPiBJUHNlYyBwYXJ0IGJlaW5nIGRvbmUg YnkgaXBzZWMtc2VjZ3cgbm93LiBXb3VsZCBtYWtlIHNlbnNlIHRvIGFkZCB0aGF0DQo+IGFsc28g aW4gdGhlIGxpYnJhcnkuDQo+IA0KPiBZb3UgbWVhbiBoZXJlLCB0aGF0IHdlIG5lZWQgc29tZSBz b3J0IG9mIFNQRCBpbXBsZW1lbnRhdGlvbiwgY29ycmVjdD8NCj4gW0Fub29iXSBZZXMuDQo+IA0K PiBPaywgSSBzZWUuDQo+IE91ciB0aG91Z2h0IHdhcyB0aGF0IGp1c3Qgc29tZXRoaW5nIGJhc2Vk IG9uIGxpYnJ0ZV9hY2wgd291bGQgYmUgZW5vdWdoIGhlcmUuLi4NCj4gQnV0IGlmIHlvdSB0aGlu ayB0aGF0IGEgc3BlY2lhbCBkZWZpbmVkIFNQRCBBUEkgKGFuZCBpbXBsZW1lbnRhdGlvbikgaXMg bmVlZGVkIC0NCj4gd2UgY2FuIHByb2JhYmx5IGRpc2N1c3MgaXQgYWxvbmcgd2l0aCBTQUQgQVBJ ICgjMiBhYm92ZSkuDQo+IFRob3VnaCBpZiB5b3UnZCBsaWtlIHRvIHN0YXJ0IHRvIHdvcmsgb24g UkZDIGZvciBpdCByaWdodC1hd2F5IC0gcGxlYXNlIGZlZWwgZnJlZSB0byBkbyBzbyA6KQ0KPiAN Cj4gDQo+IA0KPiANCj4gQ3VycmVudCBSRkMgY29uY2VudHJhdGVzIG9uIFNBLWxldmVsIEFQSSBv bmx5ICgxKSwNCj4gZGV0YWlsZWQgZGlzY3Vzc2lvbiBmb3IgMikgYW5kIDMpIHdpbGwgYmUgc3Vi amVjdHMgZm9yIHNlcGFyYXRlIFJGQyhzKS4NCj4gDQo+IFNBIChsb3cpIGxldmVsIEFQSQ0KPiA9 PT09PT09PT09PT09PT09PT0NCj4gDQo+IEFQSSBkZXNjcmliZWQgYmVsb3cgb3BlcmF0ZXMgb24g U0EgbGV2ZWwuDQo+IEl0IHByb3ZpZGVzIGZ1bmN0aW9uYWxpdHkgdGhhdCBhbGxvd3MgdXNlciBm b3IgZ2l2ZW4gU0EgdG8gcHJvY2Vzcw0KPiBpbmJvdW5kIGFuZCBvdXRib3VuZCBJUHNlYyBwYWNr ZXRzLg0KPiBUbyBiZSBtb3JlIHNwZWNpZmljOg0KPiAtIGZvciBpbmJvdW5kIEVTUC9BSCBwYWNr ZXRzIHBlcmZvcm0gZGVjcnlwdGlvbiwgYXV0aGVudGljYXRpb24sDQo+ICAgIGludGVncml0eSBj aGVja2luZywgcmVtb3ZlIEVTUC9BSCByZWxhdGVkIGhlYWRlcnMNCj4gW0Fub29iXSBBbnRpLXJl cGxheSBjaGVjayB3b3VsZCBhbHNvIGJlIHJlcXVpcmVkLg0KPiANCj4gWWVwLCBhbnRpLXJlcGxh eSBhbmQgRVNOIHN1cHBvcnQgaXMgaW1wbGllZCBhcyBwYXJ0IG9mICJpbnRlZ3JpdHkgY2hlY2tp bmciLg0KPiBQcm9iYWJseSBJIGhhdmUgdG8gYmUgbW9yZSBzcGVjaWZpYyBoZXJlLg0KPiBbQW5v b2JdIFRoaXMgaXMgZmluZS4NCj4gDQo+IA0KPiANCj4gLSBmb3Igb3V0Ym91bmQgcGFja2V0cyBw ZXJmb3JtIHBheWxvYWQgZW5jcnlwdGlvbiwgYXR0YWNoIElDViwNCj4gICAgdXBkYXRlL2FkZCBJ UCBoZWFkZXJzLCBhZGQgRVNQL0FIIGhlYWRlcnMvdHJhaWxlcnMsDQo+ICAgIHNldHVwIHJlbGF0 ZWQgbWJ1ZiBmZWxpZHMgKG9sX2ZsYWdzLCB0eF9vZmZsb2FkcywgZXRjLikuDQo+IFtBbm9vYl0g RG8gd2UgaGF2ZSBhbnkgcGxhbnMgdG8gaGFuZGxlIEVTTiBleHBpcnk/IFNvbWUgbWVhbnMgdG8N Cj4gaW5pdGlhdGUgYW4gSUtFIHJlbmVnb3RpYXRpb24/IEknbSBhc3N1bWluZyBhcHBsaWNhdGlv biB3b24ndCBiZSBhd2FyZQ0KPiBvZiB0aGUgc2VxdWVuY2UgbnVtYmVycywgaW4gdGhpcyBjYXNl Lg0KPiBbQW5vb2JdIFdoYXQgaXMgeW91ciBwbGFuIHdpdGggZXZlbnRzIGxpa2UgRVNOIGV4cGly eT8gSVBzZWMgc3BlYyB0YWxrcyBhYm91dCBieXRlIGFuZCB0aW1lIGV4cGlyeSBhcyB3ZWxsLg0K PiANCj4gQXQgY3VycmVudCBtb21lbnQsIGZvciBTQSBsZXZlbDogcnRlX2lwc2VjX2NyeXB0b19w cmVwYXJlKCkvcnRlX2lwc2VjX2lubGluZV9wcm9jZXNzKCkgd2lsbCBzZXQgcnRlX2Vycm5vDQo+ IHRvIHNwZWNpYWwgdmFsdWUgKEVPVkVSRkxPVykgdG8gc2lnbmFsIHVwcGVyIGxheWVyIHRoYXQg bGltaXQgaXMgcmVhY2hlZC4NCj4gVXBwZXIgbGF5ZXIgY2FuIGRlY2lkZSB0byBzdGFydCByZS1u ZWdvdGlhdGlvbiwgb3IganVzdCBkZXN0cm95IGFuIFNBLg0KPiANCj4gRnV0dXJlIHBsYW5zIGZv ciBJUHNlYyBDb250ZXh0IChDVFgpIEFQSSAoIzMgYWJvdmUpOg0KPiBJbnRyb2R1Y2UgYSBzcGVj aWFsIGZ1bmN0aW9uLCBzb21ldGhpbmcgbGlrZToNCj4gcnRlX2lwc2VjX2dldF9leHBpcmVkKHJ0 ZV9pcHNlY19jdHggKmN0eCwgcnRlX2lwc2VjX3NhICpleHBpcmVkX3NhW10sIHVpbnQzMl90IG51 bSk7DQo+IEl0IHdvdWxkIHJldHVybiB1cC10byAqbnVtKiBvZiBTQXMgZm9yIGdpdmVuIGlwc2Vj IGNvbnRleHQsIHRoYXQgYXJlIGV4cGlyZWQvbGltaXQgcmVhY2hlZC4NCj4gVGhlbiB1cHBlciBs YXllciBhZ2FpbiBtaWdodCBkZWNpZGUgZm9yIGVhY2ggU0Egc2hvdWxkIHJlbmVnb3RpYXRpb24g YmUgc3RhcnRlZCwNCj4gb3IganVzdCB3aXBlIGdpdmVuIFNBLg0KPiBJdCB3b3VsZCBiZSB1cHBl ciBsYXllciByZXNwb25zaWJpbGl0eSB0byBjYWxsIHRoaXMgZnVuY3Rpb24gcGVyaW9kaWNhbGx5 Lg0KPiANCj4gDQo+IA0KPiAtIGluaXRpYWxpemUvdW4taW5pdGlhbGl6ZSBnaXZlbiBTQSBiYXNl ZCBvbiB1c2VyIHByb3ZpZGVkIHBhcmFtZXRlcnMuDQo+IA0KPiBQcm9jZXNzZWQgaW5ib3VuZC9v dXRib3VuZCBwYWNrZXRzIGNvdWxkIGJlIGdyb3VwZWQgYnkgdXNlciBwcm92aWRlZA0KPiBmbG93 IGlkIChvcGFxdWUgNjQtYml0IG51bWJlciBhc3NvY2lhdGVkIGJ5IHVzZXIgd2l0aCBnaXZlbiBT QSkuDQo+IA0KPiBTQS1sZXZlbCBBUEkgaXMgYmFzZWQgb24gdG9wIG9mIGNyeXB0by1kZXYvc2Vj dXJpdHkgQVBJIGFuZCByZWxpZXMgb24gdGhlbQ0KPiB0byBwZXJmb3JtIGFjdHVhbCBjaXBoZXIg YW5kIGludGVncml0eSBjaGVja2luZy4NCj4gRHVlIHRvIHRoZSBuYXR1cmUgb2YgY3J5cHRvLWRl diBBUEkgKGVucXVldWUvZGVxdWUgbW9kZWwpIHdlIHVzZQ0KPiBhc3luY2hyb25vdXMgQVBJIGZv ciBJUHNlYyBwYWNrZXRzIGRlc3RpbmVkIHRvIGJlIHByb2Nlc3NlZA0KPiBieSBjcnlwdG8tZGV2 aWNlOg0KPiBydGVfaXBzZWNfY3J5cHRvX3ByZXBhcmUoKS0+cnRlX2NyeXB0b2Rldl9lbnF1ZXVl X2J1cnN0KCktPg0KPiBydGVfY3J5cHRvZGV2X2RlcXVldWVfYnVyc3QoKS0+cnRlX2lwc2VjX2Ny eXB0b19wcm9jZXNzKCkuDQo+IFRob3VnaCBmb3IgcGFja2V0cyBkZXN0aW5lZCBmb3IgaW5saW5l IHByb2Nlc3Npbmcgbm8gZXh0cmEgb3ZlcmhlYWQNCj4gaXMgcmVxdWlyZWQgYW5kIHNpbXBsZSBh bmQgc3luY2hyb25vdXMgQVBJOiBydGVfaXBzZWNfaW5saW5lX3Byb2Nlc3MoKQ0KPiBpcyBpbnRy b2R1Y2VkIGZvciB0aGF0IGNhc2UuDQo+IFtBbm9vYl0gVGhlIEFQSSBzaG91bGQgaW5jbHVkZSBl dmVudC1kZWxpdmVyeSBhcyBhIGNyeXB0by1vcCBjb21wbGV0aW9uDQo+IG1lY2hhbmlzbSBhcyB3 ZWxsLiBUaGUgYXBwbGljYXRpb24gY291bGQgY29uZmlndXJlIHRoZSBldmVudCBjcnlwdG8NCj4g YWRhcHRlciBhbmQgdGhlbiBlbnF1ZXVlIGFuZCBkZXF1ZXVlIHRvIGNyeXB0byBkZXZpY2UgdXNp bmcgZXZlbnRzICh2aWENCj4gZXZlbnQgZGV2KS4NCj4gDQo+IE5vdCBzdXJlIHdoYXQgcGFydGlj dWxhciBleHRyYSBBUEkgeW91IHRoaW5rIGlzIHJlcXVpcmVkIGhlcmU/DQo+IEFzIEkgdW5kZXJz dGFuZCBpbiBib3RoIGNhc2VzICh3aXRoIG9yIHdpdGhvdXQgZXZlbnQgY3J5cHRvLWFkYXB0ZXIp IHdlIHN0aWxsIGhhdmUgdG86DQo+ICAxKSBmaWxsIGNyeXB0by1vcCBwcm9wZXJseQ0KPiAgMikg ZW5xdWV1ZSBpdCB0byBjcnlwdG8tZGV2ICh2aWEgZXZlbnRkZXYgb3IgZGlyZWN0bHkpDQo+IDMp ICByZWNlaXZlIHByb2Nlc3NlZCBieSBjcnlwdG8tZGV2IGNyeXB0by1vcCAoZWl0aGVyIHZpYSBl dmVudGRldiBvciBkaXJlY3RseSkNCj4gNCkgY2hlY2sgY3J5cHRvLW9wIHN0YXR1cywgZG8gZnVy dGhlciBwb3N0LXByb2Nlc3NpbmcgaWYgYW55DQo+IA0KPiBTbyAjMSBhbmQgIzQgKFNBLWxldmVs IEFQSSByZXNwbmliaWxpdHkpIHJlbWFpbiB0aGUgc2FtZSBmb3IgYm90aCBjYXNlcy4NCj4gW0Fu b29iXSBydGVfaXBzZWNfaW5saW5lX3Byb2Nlc3Mgd29ya3Mgb24gcGFja2V0cyBub3QgZXZlbnRz LiBXZSBtaWdodCBuZWVkIGEgc2ltaWxhciBBUEkgd2hpY2ggcHJvY2Vzc2VzIGV2ZW50cy4NCj4g DQo+IE9rLCBJIHN0aWxsIGRvbid0IGdldCB5b3UgaGVyZS4NCj4gQ291bGQgeW91IHNwZWNpZnkg d2hhdCBleGFjdGx5IGZ1bmN0aW9uIHlvdSdkIGxpa2UgdG8gYWRkIHRvIHRoZSBBUEkgaGVyZSB3 aXRoIHBhcmFtZXRlciBsaXN0DQo+IGFuZCBicmllZiBiZWhhdmlvciBkZXNjcmlwdGlvbj8NCj4g DQo+IA0KPiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9uYWxpdHk6DQo+ICAgIC0gbWF0Y2ggaW5ib3Vu ZC9vdXRib3VuZCBwYWNrZXRzIHRvIHBhcnRpY3VsYXIgU0ENCj4gICAgLSBtYW5hZ2UgY3J5cHRv L3NlY3VyaXR5IGRldmljZXMNCj4gICAgLSBwcm92aWRlIFNBRC9TUEQgcmVsYXRlZCBmdW5jdGlv bmFsaXR5DQo+ICAgIC0gZGV0ZXJtaW5lIHdoYXQgY3J5cHRvL3NlY3VyaXR5IGRldmljZSBoYXMg dG8gYmUgdXNlZA0KPiAgICAgIGZvciBnaXZlbiBwYWNrZXQocykNCj4gaXMgb3V0IG9mIHNjb3Bl IGZvciBTQS1sZXZlbCBBUEkuDQo+IA0KPiBCZWxvdyBpcyB0aGUgYnJpZWYgKGFuZCBzaW1wbGlm aWVkKSBvdmVydmlldyBvZiBleHBlY3RlZCBTQS1sZXZlbA0KPiBBUEkgdXNhZ2UuDQo+IA0KPiAv KiBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBTQSAqLw0KPiBzaXplX3Qgc3ogPSBydGVfaXBzZWNf c2Ffc2l6ZSgpOw0KPiBzdHJ1Y3QgcnRlX2lwc2VjX3NhICpzYSA9IHJ0ZV9tYWxsb2Moc3opOw0K PiBzdHJ1Y3QgcnRlX2lwc2VjX3NhX3BybSBwcm07DQo+IC8qIGZpbGwgcHJtICovDQo+IHJjID0g cnRlX2lwc2VjX3NhX2luaXQoc2EsICZwcm0pOw0KPiBpZiAocmMgIT0gMCkgeyAvKmhhbmRsZSBl cnJvciAqL30NCj4gLi4uLi4NCj4gDQo+IC8qIHByb2Nlc3MgaW5ib3VuZC9vdXRib3VuZCBJUHNl YyBwYWNrZXRzIHRoYXQgYmVsb25ncyB0byBnaXZlbiBTQSAqLw0KPiANCj4gLyogaW5saW5lIElQ c2VjIHByb2Nlc3Npbmcgd2FzIGRvbmUgZm9yIHRoZXNlIHBhY2tldHMgKi8NCj4gaWYgKHVzZV9p bmxpbmVfaXBzZWMpDQo+ICAgICAgICAgbiA9IHJ0ZV9pcHNlY19pbmxpbmVfcHJvY2VzcyhzYSwg cGt0cywgbmJfcGt0cyk7DQo+IC8qIHVzZSBjcnlwdG8tZGV2aWNlIHRvIHByb2Nlc3MgdGhlIHBh Y2tldHMgKi8NCj4gZWxzZSB7DQo+ICAgICAgIHN0cnVjdCBydGVfY3J5cHRvX29wICpjb3BbbmJf cGt0c107DQo+ICAgICAgIHN0cnVjdCBydGVfaXBzZWNfZ3JvdXAgZ3JwW25iX3BrdHNdOw0KPiAN Cj4gICAgICAgIC4uLi4NCj4gICAgICAgLyogcHJlcGFyZSBjcnlwdG8gb3BzICovDQo+ICAgICAg IG4gPSBydGVfaXBzZWNfY3J5cHRvX3ByZXBhcmUoc2EsIHBrdHMsIGNvcHMsIG5iX3BrdHMpOw0K PiAgICAgICAvKiBlbnF1ZXVlIGNyeXB0byBvcHMgdG8gcmVsYXRlZCBjcnlwdG8tZGV2ICovDQo+ ICAgICAgIG4gPSAgcnRlX2NyeXB0b2Rldl9lbnF1ZXVlX2J1cnN0KC4uLiwgY29wcywgbik7DQo+ ICAgICAgIGlmIChuICE9IG5iX3BrdHMpIHsgLypoYW5kbGUgZmFpbGVkIHBhY2tldHMgKi99DQo+ ICAgICAgIC8qIGRlcXVldWUgZmluaXNoZWQgY3J5cHRvIG9wcyBmcm9tIHJlbGF0ZWQgY3J5cHRv LWRldiAqLw0KPiAgICAgICBuID0gcnRlX2NyeXB0b2Rldl9kZXF1ZXVlX2J1cnN0KC4uLiwgY29w cywgbmJfcGt0cyk7DQo+ICAgICAgIC8qIGZpbmlzaCBJUHNlYyBwcm9jZXNzaW5nIGZvciBhc3Nv Y2lhdGVkIHBhY2tldHMgKi8NCj4gICAgICAgbiA9IHJ0ZV9pcHNlY19jcnlwdG9fcHJvY2Vzcyhj b3AsIHBrdHMsIGdycCwgbik7DQo+IFtBbm9vYl0gRG9lcyB0aGUgU0EgYmFzZWQgZ3JvdXBpbmcg YXBwbHkgdG8gYm90aCBpbmJvdW5kIGFuZCBvdXRib3VuZD8NCj4gDQo+IFllcywgdGhlIHBsYW4g aXMgdG8gaGF2ZSBpdCBhdmFpbGFibGUgZm9yIGJvdGggY2FzZXMuDQo+IFtBbm9vYl0gT24gdGhl IGluYm91bmQsIHNob3VsZG4ndCB0aGUgcGFja2V0cyBiZSBncm91cGVkK29yZGVyZWQgYmFzZWQg b24gaW5uZXIgTDMraW5uZXIgTDQ/DQo+IA0KPiBJIHRoaW5rIHRoYXQncyB1cCB0byB0aGUgdXNl ciBkZWNpZGUgYmFzZWQgb24gd2hhdCBjcml0ZXJpYSB3YW50cyB0byBncm91cCBpdCBhbmQgZG9l cyBoZSB3YW50cw0KPiB0byBkbyBhbnkgZ3JvdXBpbmcgYXQgYWxsLg0KPiBUaGF0J3Mgd2h5IGZs b3dpZCBpcyB1c2VyLWRlZmluZWQgYW5kIHRvdGFsbHkgdHJhbnNwYXJlbnQgdG8gdGhlIGxpYi4N Cj4gDQo+IA0KPiANCj4gDQo+ICAgICAgIC8qIG5vdyB3ZSBoYXZlIDxuPiBncm91cCBvZiBwYWNr ZXRzIGdyb3VwZWQgYnkgU0EgZmxvdyBpZCAgKi8NCj4gICAgICAuLi4uDQo+ICAgfQ0KPiAuLi4N Cj4gDQo+IC8qIHVuaW5pdCBnaXZlbiBTQSAqLw0KPiBydGVfaXBzZWNfc2FfZmluaShzYSk7DQo+ IA0KPiBQbGFubmVkIHNjb3BlIGZvciAxOC4xMToNCj4gPT09PT09PT09PT09PT09PT09PT09PT09 DQo+IA0KPiAtIFNBLWxldmVsIEFQSSBkZWZpbml0aW9uDQo+IC0gRVNQIHR1bm5lbCBtb2RlIHN1 cHBvcnQgKGJvdGggSVB2NC9JUHY2KQ0KPiAtIFN1cHBvcnRlZCBhbGdvcml0aG1zOiBBRVMtQ0JD LCBBRVMtR0NNLCBITUFDLVNIQTEsIE5VTEwuDQo+IC0gVVQNCj4gW0Fub29iXSBXaGF0IGlzIFVU Pw0KPiANCj4gVW5pdC1UZXN0DQo+IA0KPiANCj4gTm90ZTogU3RpbGwgV0lQLCBzbyBub3QgYWxs IHBsYW5uZWQgZm9yIDE4LjExIGZ1bmN0aW9uYWxpdHkgaXMgaW4gcGxhY2UuDQo+IA0KPiBQb3N0 IDE4LjExOg0KPiA9PT09PT09PT09PQ0KPiAtIEVTUCB0cmFuc3BvcnQgbW9kZSBzdXBwb3J0IChi b3RoIElQdjQvSVB2NikNCj4gLSB1cGRhdGUgZXhhbXBsZXMvaXBzZWMtc2VjZ3cgdG8gdXNlIGxp YnJ0ZV9pcHNlYw0KPiAtIFNBRCBhbmQgaGlnaC1sZXZlbCBBUEkgZGVmaW5pdGlvbiBhbmQgaW1w bGVtZW50YXRpb24NCj4gDQo+IA0KPiBTaWduZWQtb2ZmLWJ5OiBNb2hhbW1hZCBBYmR1bCBBd2Fs IDxtb2hhbW1hZC5hYmR1bC5hd2FsQGludGVsLmNvbT4NCj4gU2lnbmVkLW9mZi1ieTogRGVjbGFu IERvaGVydHkgPGRlY2xhbi5kb2hlcnR5QGludGVsLmNvbT4NCj4gU2lnbmVkLW9mZi1ieTogS29u c3RhbnRpbiBBbmFueWV2IDxrb25zdGFudGluLmFuYW55ZXZAaW50ZWwuY29tPg0KPiAtLS0NCj4g ICBjb25maWcvY29tbW9uX2Jhc2UgICAgICAgICAgICAgICAgICAgICB8ICAgNSArDQo+ICAgbGli L01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKw0KPiAgIGxpYi9saWJy dGVfaXBzZWMvTWFrZWZpbGUgICAgICAgICAgICAgIHwgIDI0ICsNCj4gICBsaWIvbGlicnRlX2lw c2VjL21lc29uLmJ1aWxkICAgICAgICAgICB8ICAxMCArDQo+ICAgbGliL2xpYnJ0ZV9pcHNlYy9w YWQuaCAgICAgICAgICAgICAgICAgfCAgNDUgKysNCj4gICBsaWIvbGlicnRlX2lwc2VjL3J0ZV9p cHNlYy5oICAgICAgICAgICB8IDI0NSArKysrKysrKysNCj4gICBsaWIvbGlicnRlX2lwc2VjL3J0 ZV9pcHNlY192ZXJzaW9uLm1hcCB8ICAxMyArDQo+ICAgbGliL2xpYnJ0ZV9pcHNlYy9zYS5jICAg ICAgICAgICAgICAgICAgfCA5MjEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQo+ ICAgbGliL2xpYnJ0ZV9uZXQvcnRlX2VzcC5oICAgICAgICAgICAgICAgfCAgMTAgKy0NCj4gICBs aWIvbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMiArDQo+ICAgbWsvcnRl LmFwcC5tayAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKw0KPiAgIDExIGZpbGVzIGNo YW5nZWQsIDEyNzggaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQ0KPiAgIGNyZWF0ZSBtb2Rl IDEwMDY0NCBsaWIvbGlicnRlX2lwc2VjL01ha2VmaWxlDQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0 IGxpYi9saWJydGVfaXBzZWMvbWVzb24uYnVpbGQNCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgbGli L2xpYnJ0ZV9pcHNlYy9wYWQuaA0KPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvbGlicnRlX2lw c2VjL3J0ZV9pcHNlYy5oDQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9saWJydGVfaXBzZWMv cnRlX2lwc2VjX3ZlcnNpb24ubWFwDQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9saWJydGVf aXBzZWMvc2EuYw0KPiA8c25pcD4NCj4gK3N0YXRpYyBpbmxpbmUgdWludDE2X3QNCj4gK2VzcF9v dXRiX3R1bl9wcmVwYXJlKHN0cnVjdCBydGVfaXBzZWNfc2EgKnNhLCBzdHJ1Y3QgcnRlX21idWYg Km1iW10sDQo+ICsgICAgICAgc3RydWN0IHJ0ZV9jcnlwdG9fb3AgKmNvcFtdLCB1aW50MTZfdCBu dW0pDQo+ICt7DQo+ICsgICAgICAgaW50MzJfdCByYzsNCj4gKyAgICAgICB1aW50MzJfdCBpLCBu Ow0KPiArICAgICAgIHVuaW9uIHN5bV9vcF9kYXRhIGljdjsNCj4gKw0KPiArICAgICAgIG4gPSBl c25fb3V0Yl9jaGVja19zcW4oc2EsIG51bSk7DQo+ICsNCj4gKyAgICAgICBmb3IgKGkgPSAwOyBp ICE9IG47IGkrKykgew0KPiArDQo+ICsgICAgICAgICAgICAgICBzYS0+c3FuKys7DQo+IFtBbm9v Yl0gU2hvdWxkbid0IHRoaXMgYmUgZG9uZSBhdG9taWNhbGx5Pw0KPiANCj4gSWYgd2Ugd2FudCB0 byBoYXZlIE1ULXNhZmUgQVBJIGZvciBTQS1kYXRhcGF0aCBBUEksIHRoZW4geWVzLg0KPiBUaG91 Z2ggaXQgd291bGQgbWFrZSB0aGluZ3MgbW9yZSBjb21wbGljYXRlZCBoZXJlLCBlc3BlY2lhbGx5 IGZvciBpbmJvdW5kIHdpdGggYW50aS1yZXBsYXkgc3VwcG9ydC4NCj4gSSB0aGluayBpdCBpcyBk b2FibGUgKHNwaW4tbG9jaz8pLCBidXQgd291bGQgY2F1c2UgZXh0cmEgb3ZlcmhlYWQgYW5kIGNv bXBsZXhpdHkuDQo+IFJpZ2h0IG5vdyBJIGFtIG5vdCBzdXJlIGl0IHJlYWxseSB3b3J0aCBpdCAt IGNvbW1lbnRzL3N1Z2dlc3Rpb25zIGFyZSB3ZWxjb21lLg0KPiBXaGF0IHByb2JhYmx5IGNvdWxk IGJlIGEgZ29vZCBjb21wcm9taXNlIC0gcnVudGltZSBkZWNpc2lvbiBwZXIgU0EgYmFzaXMgKGF0 IHNhX2luaXQoKSksDQo+IGRvIHdlIG5lZWQgYW4gU1Qgb3IgTVQgYmVoYXZpb3IgZm9yIGdpdmVu IFNBLg0KPiBbQW5vb2JdIEdvaW5nIHdpdGggc2luZ2xlIHRocmVhZCBhcHByb2FjaCB3b3VsZCBz aWduaWZpY2FudGx5IGxpbWl0IHRoZSBzY29wZSBvZiB0aGlzIGxpYnJhcnkuIFNpbmdsZSB0aHJl YWQgYXBwcm9hY2ggd291bGQgbWVhbg0KPiBvbmUgU0Egb24gb25lIGNvcmUuIFRoaXMgd291bGQg bm90IHdvcmsgb24gcHJhY3RpY2FsIGNhc2VzLg0KPiBTdXBwb3NlIHdlIGhhdmUgdHdvIGZsb3dz IHdoaWNoIGFyZSBzdXBwb3NlZCB0byB1c2UgdGhlIHNhbWUgU0EuIFdpdGggUlNTLCB0aGVzZSBm bG93cyBjb3VsZCBlbmQgdXAgb24gZGlmZmVyZW50IGNvcmVzLiBOb3cNCj4gb25seSBvbmUgY29y ZSB3b3VsZCBiZSBhYmxlIHRvIHByb2Nlc3MsIGFzIFNBIHdpbGwgbm90IGJlIHNoYXJlZC4gV2Ug aGF2ZSB0aGUgc2FtZSBwcm9ibGVtIGluIGlwc2VjLXNlY2d3IHRvby4NCj4gDQo+IEp1c3QgZm9y IG15IGN1cmlvc2l0eSAtIGhvdyBkbyB5b3UgcGxhbiB0byB1c2UgUlNTIGZvciBpcHNlYyBwYWNr ZXQgZGlzdHJpYnV0aW9uPw0KPiBEbyB5b3UgZm9yZXNlZSBhIGNvbW1vbiBzaXR1YXRpb24gd2hl biB0aGVyZSB3b3VsZCBiZSBwYWNrZXRzIHRoYXQgYmVsb25ncyB0byB0aGUgc2FtZSBTQQ0KPiAo c2FtZSBTUEkpIGJ1dCB3aXRoIG11bHRpcGxlIHNvdXJjZShkZXN0aW5hdGlvbikgSVAgYWRkcmVz c2VzPw0KPiBJZiBzbywgcHJvYmFibHkgc29tZSBleGFtcGxlcyB3b3VsZCBiZSBoZWxwZnVsLg0K PiBJIHRoaW5rIElQc2VjIFJGQ3MgZG9lc24ndCBwcmV2ZW50IHN1Y2ggc2l0dWF0aW9uLCBidXQg QUZBSUsgdGhlIG1vc3QgY29tbW9uIGNhc2UgLSBzaW5nbGUgc291cmNlL2Rlc3RpbmF0aW9uIElQ cyBmb3IgdGhlIHNhbWUgU1BJLg0KPiANCj4gc3AgaXB2NCBvdXQgZXNwIHByb3RlY3QgNiBwcmkg MSBkc3QgMTkyLjE2OC4xLjAvMjQgc3BvcnQgMDo2NTUzNSBkcG9ydCAwOjY1NTM1DQo+IHNwIGlw djQgb3V0IGVzcCBwcm90ZWN0IDYgcHJpIDEgZHN0IDE5Mi4xNjguMi4wLzI0IHNwb3J0IDA6NjU1 MzUgZHBvcnQgMDo2NTUzNQ0KPiBzYSBvdXQgNiBjaXBoZXJfYWxnbyBhZXMtMTI4LWNiYyBjaXBo ZXJfa2V5IDIyOjMzOjQ0OjU1OjY2Ojc3Ojg4Ojk5OmFhOmJiOmNjOmRkOmVlOmZmOjAwOjExIGF1 dGhfYWxnbyBzaGExLWhtYWMgYXV0aF9rZXkNCj4gMjI6MzM6NDQ6NTU6NjY6Nzc6ODg6OTk6YWE6 YmI6Y2M6ZGQ6ZWU6ZmY6MDA6MTE6MjI6MzM6NDQ6NTUgbW9kZSBpcHY0LXR1bm5lbCBzcmMgMTcy LjE2LjIuMSBkc3QgMTcyLjE2LjEuMQ0KPiBJc24ndCB0aGlzIGEgdmFsaWQgY29uZmlndXJhdGlv bj8gV291bGRuJ3QgdGhpcyBiZSBhIGNvbW1vbiB1c2UgY2FzZSB3aGVuIHdlIGhhdmUgc2l0ZS10 by1zaXRlIHR1bm5lbGluZz8NCj4gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQzMDEj c2VjdGlvbi00LjQuMS4xDQoNCk9rLCBJIHRoaW5rIEkgdW5kZXJzdGFuZCB3aGF0IHdhcyBteSBj b25mdXNpb24gaGVyZSAtIGFib3ZlIHlvdSB0YWxrZWQgYWJvdXQgdXNpbmcgUlNTIHRvIGRpc3Ry aWJ1dGUgaW5jb21pbmcgKm91dGJvdW5kKiB0cmFmZmljLCBjb3JyZWN0Pw0KSWYgc28sIHRoZW4g eWVzIEkgdGhpbmsgc3VjaCBzY2hlbWUgd291bGQgd29yayB3aXRob3V0IHByb2JsZW1zLg0KTXkg b3JpZ2luYWwgdGhvdWdodCB3YXMgdGhhdCB3ZSBhcmUgdGFsa2luZyBhYm91dCBpbmJvdW5kIHRy YWZmaWMgZGlzdHJpYnV0aW9uIGhlcmUgLSBpbiB0aGF0IGNhc2Ugc3RhbmRhcmQgUlNTIHdvdWxk bid0IGhlbHAgbXVjaC4NCg0KPiANCj4gDQo+IEFueXdheSwgbGV0J3MgcHJldGVuZCB3ZSBmb3Vu ZCBzb21lIHNtYXJ0IHdheSB0byBkaXN0cmlidXRlIGluYm91bmQgcGFja2V0cyBmb3IgdGhlIHNh bWUgU0EgdG8gbXVsdGlwbGUgSFcgcXVldWVzL0NQVSBjb3Jlcy4NCj4gVG8gbWFrZSBpcHNlYyBw cm9jZXNzaW5nIGZvciBzdWNoIGNhc2UgdG8gd29yayBjb3JyZWN0bHkganVzdCBhdG9taWNpdHkg b24gY2hlY2svdXBkYXRlIHNlZ24vcmVwbGF5X3dpbmRvdyBpcyBub3QgZW5vdWdoLg0KPiBJIHRo aW5rIGl0IHdvdWxkIHJlcXVpcmUgc29tZSBleHRyYSBzeW5jaHJvbml6YXRpb246DQo+IG1ha2Ug c3VyZSB0aGF0IHdlIGRvIGZpbmFsIHBhY2tldCBwcm9jZXNzaW5nIChzZXEgY2hlY2svdXBkYXRl KSBhdCB0aGUgc2FtZSBvcmRlciBhcyB3ZSByZWNlaXZlZCB0aGUgcGFja2V0cw0KPiAocGFja2V0 cyBlbnRlcmVkIGlwc2VjIHByb2Nlc3NpbmcpLg0KPiBJIGRvbid0IHJlYWxseSBsaWtlIHRvIGlu dHJvZHVjZSBzdWNoIGhlYXZ5IG1lY2hhbmlzbXMgb24gU0EgbGV2ZWwsICBhZnRlciBhbGwgaXQg c3VwcG9zZWQgdG8gYmUgbGlnaHQgYW5kIHNpbXBsZS4NCj4gVGhvdWdoIHdlIHBsYW4gQ1RYIGxl dmVsIEFQSSB0byBzdXBwb3J0IHN1Y2ggc2NlbmFyaW8uDQo+IFdoYXQgSSB0aGluayB3b3VsZCBi ZSB1c2VmdWwgYWRkaXRpb24gZm9yIFNBIGxldmVsIEFQSSAtIGhhdmUgYW4gYWJpbGl0eSB0byBk byBvbmUgdXBkYXRlIHNlcW4vcmVwbGF5X3dpbmRvdyBhbmQgbXVsdGlwbGUgY2hlY2tzDQo+IGNv bmN1cnJlbnRseS4NCj4gDQo+IEluIGNhc2Ugb2YgaW5ncmVzcyBhbHNvLCB0aGUgc2FtZSBwcm9i bGVtIGV4aXN0cy4gV2Ugd2lsbCBub3QgYmUgYWJsZSB0byB1c2UgUlNTIGFuZCBzcHJlYWQgdGhl IHRyYWZmaWMgdG8gbXVsdGlwbGUgY29yZXMuIENvbnNpZGVyaW5nDQo+IElQc2VjIGJlaW5nIENQ VSBpbnRlbnNpdmUsIHRoaXMgd291bGQgbGltaXQgdGhlIG5ldCBvdXRwdXQgb2YgdGhlIGNoaXAu DQo+IA0KPiBUaGF0J3MgdHJ1ZSAtIGJ1dCBmcm9tIG90aGVyIHNpZGUgaW1wbGVtZW50YXRpb24g Y2FuIG9mZmxvYWQgaGVhdnkgcGFydA0KPiAoZW5jcnlwdC9kZWNyeXB0LCBhdXRoKSB0byBzcGVj aWFsIEhXIChjcnlwdG9kZXYpLg0KPiBJbiB0aGF0IGNhc2Ugc2luZ2xlIGNvcmUgbWlnaHQgYmUg ZW5vdWdoIGZvciBTQSBhbmQgZXh0cmEgc3luY2hyb25pemF0aW9uIHdvdWxkIGp1c3Qgc2xvd2Rv d24gdGhpbmdzLg0KPiBUaGF0J3Mgd2h5IEkgdGhpbmsgaXQgc2hvdWxkIGJlIGNvbmZpZ3VyYWJs ZSAgd2hhdCBiZWhhdmlvciAoU1Qgb3IgTVQpIHRvIHVzZS4NCj4gSSBkbyBhZ3JlZSB0aGF0IHRo ZXNlIGFyZSB0aGUgaXNzdWVzIHRoYXQgd2UgbmVlZCB0byBhZGRyZXNzIHRvIG1ha2UgdGhlIGxp YnJhcnkgTVQgc2FmZS4gV2hldGhlciB0aGUgZXh0cmEgc3luY2hyb25pemF0aW9uIHdvdWxkDQo+ IHNsb3cgZG93biB0aGluZ3MgaXMgYSB2ZXJ5IHN1YmplY3RpdmUgcXVlc3Rpb24gYW5kIHdpbGwg aGVhdmlseSBkZXBlbmQgb24gdGhlIHBsYXRmb3JtLiBUaGUgbGlicmFyeSBzaG91bGQgaGF2ZSBl bm91Z2ggcHJvdmlzaW9ucw0KPiB0byBiZSBhYmxlIHRvIHN1cHBvcnQgTVQgd2l0aG91dCBjYXVz aW5nIG92ZXJoZWFkcyB0byBTVC4gUmlnaHQgbm93LCB0aGUgbGlicmFyeSBhc3N1bWVzIFNULg0K DQpPaywgSSBzdXBwb3NlIHdlIGJvdGggYWdyZWUgdGhhdCB3ZSBuZWVkIFNUIGFuZCBNVCBjYXNl IHN1cHBvcnRlZC4NCkkgZGlkbid0IHdhbnQgdG8gaW50cm9kdWNlIE1UIHJlbGF0ZWQgY29kZSBy aWdodCBub3cgKGZvciAxOC4xMSksIGJ1dCBhcyB5b3UgZ3V5cyBzZWVtcyB2ZXJ5IGNvbmNlcm5l ZCBhYm91dCBpdCwNCndlIHdpbGwgdHJ5IHRvIGFkZCBNVCByZWxhdGVkIHN0dWZmIGludG8gdjEs IHNvIHlvdSBjYW4gcmV2aWV3IGl0IGF0IGVhcmx5IHN0YWdlcy4gDQpLb25zdGFudGluDQo=