From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by dpdk.org (Postfix) with ESMTP id 41AF11AFF for ; Mon, 24 Sep 2018 10:45:53 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 24 Sep 2018 01:45:52 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.54,297,1534834800"; d="scan'208";a="92697039" Received: from irsmsx154.ger.corp.intel.com ([163.33.192.96]) by fmsmga001.fm.intel.com with ESMTP; 24 Sep 2018 01:45:50 -0700 Received: from irsmsx105.ger.corp.intel.com ([169.254.7.54]) by IRSMSX154.ger.corp.intel.com ([169.254.12.187]) with mapi id 14.03.0319.002; Mon, 24 Sep 2018 09:45:48 +0100 From: "Ananyev, Konstantin" To: Jerin Jacob CC: "Joseph, Anoob" , "dev@dpdk.org" , "Awal, Mohammad Abdul" , "Doherty, Declan" , Narayana Prasad , "akhil.goyal@nxp.com" , "hemant.agrawal@nxp.com" , "shreyansh.jain@nxp.com" Thread-Topic: [dpdk-dev] [RFC] ipsec: new library for IPsec data-path processing Thread-Index: AQHUO8sQ1vNhPIIy2kCq+ieD7nPPdqTefpOAgABfO7CAAuY7AIALGZsggAAAuDCABMYgAIABKxCAgAHAZSCAAdkHgIAHoQHQ Date: Mon, 24 Sep 2018 08:45:48 +0000 Message-ID: <2601191342CEEE43887BDE71AB977258EA95A68A@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> <20180916105640.GA4803@jerin> <2601191342CEEE43887BDE71AB977258EA95724C@irsmsx105.ger.corp.intel.com> <20180918175433.GA16116@jerin> In-Reply-To: <20180918175433.GA16116@jerin> Accept-Language: en-IE, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiYmIxNjM4ODktNzY4ZC00MzgxLTk5MjktMTkyOWExOGI1YmRmIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiQkRJT1cyb204bk1mSVQ5OFwveVdpZ1dLQUc1Mk9PQ0N4RGFmTHVQQ3p5MUFJaUFmQzBcL3RZTjhWbXRKSDdFdVlGIn0= x-ctpclassification: CTP_NT dlp-product: dlpe-windows dlp-version: 11.0.400.15 dlp-reaction: no-action x-originating-ip: [163.33.239.181] 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, 24 Sep 2018 08:45:54 -0000 DQpIaSBKZXJpbiwNCg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gQW55d2F5LCBsZXQncyBwcmV0ZW5k IHdlIGZvdW5kIHNvbWUgc21hcnQgd2F5IHRvIGRpc3RyaWJ1dGUgaW5ib3VuZCBwYWNrZXRzIGZv ciB0aGUgc2FtZSBTQSB0byBtdWx0aXBsZSBIVyBxdWV1ZXMvQ1BVDQo+ID4gPiBjb3Jlcy4NCj4g PiA+ID4gPiBUbyBtYWtlIGlwc2VjIHByb2Nlc3NpbmcgZm9yIHN1Y2ggY2FzZSB0byB3b3JrIGNv cnJlY3RseSBqdXN0IGF0b21pY2l0eSBvbiBjaGVjay91cGRhdGUgc2Vnbi9yZXBsYXlfd2luZG93 IGlzIG5vdCBlbm91Z2guDQo+ID4gPiA+ID4gSSB0aGluayBpdCB3b3VsZCByZXF1aXJlIHNvbWUg ZXh0cmEgc3luY2hyb25pemF0aW9uOg0KPiA+ID4gPiA+IG1ha2Ugc3VyZSB0aGF0IHdlIGRvIGZp bmFsIHBhY2tldCBwcm9jZXNzaW5nIChzZXEgY2hlY2svdXBkYXRlKSBhdCB0aGUgc2FtZSBvcmRl ciBhcyB3ZSByZWNlaXZlZCB0aGUgcGFja2V0cw0KPiA+ID4gPiA+IChwYWNrZXRzIGVudGVyZWQg aXBzZWMgcHJvY2Vzc2luZykuDQo+ID4gPiA+ID4gSSBkb24ndCByZWFsbHkgbGlrZSB0byBpbnRy b2R1Y2Ugc3VjaCBoZWF2eSBtZWNoYW5pc21zIG9uIFNBIGxldmVsLCAgYWZ0ZXIgYWxsIGl0IHN1 cHBvc2VkIHRvIGJlIGxpZ2h0IGFuZCBzaW1wbGUuDQo+ID4gPiA+ID4gVGhvdWdoIHdlIHBsYW4g Q1RYIGxldmVsIEFQSSB0byBzdXBwb3J0IHN1Y2ggc2NlbmFyaW8uDQo+ID4gPiA+ID4gV2hhdCBJ IHRoaW5rIHdvdWxkIGJlIHVzZWZ1bCBhZGRpdGlvbiBmb3IgU0EgbGV2ZWwgQVBJIC0gaGF2ZSBh biBhYmlsaXR5IHRvIGRvIG9uZSB1cGRhdGUgc2Vxbi9yZXBsYXlfd2luZG93IGFuZCBtdWx0aXBs ZSBjaGVja3MNCj4gPiA+IGNvbmN1cnJlbnRseS4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gSW4g Y2FzZSBvZiBpbmdyZXNzIGFsc28sIHRoZSBzYW1lIHByb2JsZW0gZXhpc3RzLiBXZSB3aWxsIG5v dCBiZSBhYmxlIHRvIHVzZSBSU1MgYW5kIHNwcmVhZCB0aGUgdHJhZmZpYyB0byBtdWx0aXBsZSBj b3Jlcy4NCj4gPiA+IENvbnNpZGVyaW5nDQo+ID4gPiA+ID4gPiBJUHNlYyBiZWluZyBDUFUgaW50 ZW5zaXZlLCB0aGlzIHdvdWxkIGxpbWl0IHRoZSBuZXQgb3V0cHV0IG9mIHRoZSBjaGlwLg0KPiA+ ID4gPiA+IFRoYXQncyB0cnVlIC0gYnV0IGZyb20gb3RoZXIgc2lkZSBpbXBsZW1lbnRhdGlvbiBj YW4gb2ZmbG9hZCBoZWF2eSBwYXJ0DQo+ID4gPiA+ID4gKGVuY3J5cHQvZGVjcnlwdCwgYXV0aCkg dG8gc3BlY2lhbCBIVyAoY3J5cHRvZGV2KS4NCj4gPiA+ID4gPiBJbiB0aGF0IGNhc2Ugc2luZ2xl IGNvcmUgbWlnaHQgYmUgZW5vdWdoIGZvciBTQSBhbmQgZXh0cmEgc3luY2hyb25pemF0aW9uIHdv dWxkIGp1c3Qgc2xvd2Rvd24gdGhpbmdzLg0KPiA+ID4gPiA+IFRoYXQncyB3aHkgSSB0aGluayBp dCBzaG91bGQgYmUgY29uZmlndXJhYmxlICB3aGF0IGJlaGF2aW9yIChTVCBvciBNVCkgdG8gdXNl Lg0KPiA+ID4gPiBJIGRvIGFncmVlIHRoYXQgdGhlc2UgYXJlIHRoZSBpc3N1ZXMgdGhhdCB3ZSBu ZWVkIHRvIGFkZHJlc3MgdG8gbWFrZSB0aGUNCj4gPiA+ID4gbGlicmFyeSBNVCBzYWZlLiBXaGV0 aGVyIHRoZSBleHRyYSBzeW5jaHJvbml6YXRpb24gd291bGQgc2xvdyBkb3duIHRoaW5ncyBpcw0K PiA+ID4gPiBhIHZlcnkgc3ViamVjdGl2ZSBxdWVzdGlvbiBhbmQgd2lsbCBoZWF2aWx5IGRlcGVu ZCBvbiB0aGUgcGxhdGZvcm0uIFRoZQ0KPiA+ID4gPiBsaWJyYXJ5IHNob3VsZCBoYXZlIGVub3Vn aCBwcm92aXNpb25zIHRvIGJlIGFibGUgdG8gc3VwcG9ydCBNVCB3aXRob3V0DQo+ID4gPiA+IGNh dXNpbmcgb3ZlcmhlYWRzIHRvIFNULiBSaWdodCBub3csIHRoZSBsaWJyYXJ5IGFzc3VtZXMgU1Qu DQo+ID4gPg0KPiA+ID4NCj4gPiA+IEkgYWdyZWUgd2l0aCBBbm9vYiBoZXJlLg0KPiA+ID4NCj4g PiA+IEkgaGF2ZSB0d28gY29uY2VybnMgd2l0aCBsaWJydGVfaXBzZWMgYXMgYSBzZXBhcmF0ZSBs aWJyYXJ5DQo+ID4gPg0KPiA+ID4gMSkgVGhlcmUgaXMgYW4gb3ZlcmxhcCB3aXRoIHJ0ZV9zZWN1 cml0eSBhbmQgbmV3IHByb3Bvc2VkIGxpYnJhcnkuDQo+ID4NCj4gPiBJIGRvbid0IHRoaW5rIHRo ZXJlIHJlYWxseSBpcyBhbiBvdmVybGFwLg0KPiANCj4gQXMgbWVudGlvbmVkIGluIHlvdXIgb3Ro ZXIgZW1haWwuIElNTywgVGhlcmUgaXMgYW4gb3ZlcmxhcCBhcw0KPiBSVEVfU0VDVVJJVFlfQUNU SU9OX1RZUEVfSU5MSU5FX1BST1RPQ09MIGNhbiBzdXBwb3J0IGFsbW9zdCBldmVyeXRoaW5nDQo+ IGluIEhXIG9yIEhXICsgU1cgaWYgc29tZSBQTUQgd2lzaGVzIHRvIGRvIHNvLg0KPiANCj4gQW5z d2VyaW5nIHNvbWUgb2YgdGhlIHF1ZXN0aW9ucywgeW91IGhhdmUgYXNrZWQgaW4gb3RoZXIgdGhy ZWFkIGJhc2VkIG9uDQo+IG15IHVuZGVyc3RhbmRpbmcuDQo+IA0KPiBSZWdhcmRpbmcgUlRFX1NF Q1VSSVRZX0FDVElPTl9UWVBFX0lOTElORV9QUk9UT0NPTCBzdXBwb3J0LA0KPiBNYXJ2ZWxsL0Nh dml1bSBDUFQgaGFyZHdhcmUgb24gbmV4dCBnZW5lcmF0aW9uIEhXKFBsYW5uaW5nIHRvIHVwc3Ry ZWFtDQo+IGFyb3VuZCB2MTkuMDIpIGNhbiBzdXBwb3J0IFJURV9TRUNVUklUWV9BQ1RJT05fVFlQ RV9JTkxJTkVfUFJPVE9DT0wgYW5kDQo+IEFub29iIGFscmVhZHkgcHVzaGVkIHRoZSBhcHBsaWNh dGlvbiBjaGFuZ2VzIGluIGlwc2VjLWd3Lg0KDQpPayBnb29kIHRvIGtub3cuDQoNCj4gDQo+IElu IG91ciB1bmRlcnN0YW5kaW5nIG9mIEhXL1NXIHJvbGVzL3Jlc3BvbnNpYmlsaXRpZXMgZm9yIHRo YXQgdHlwZSBvZg0KPiBkZXZpY2VzIGFyZToNCj4gDQo+IElOTElORV9QUk9UT0NPTA0KPiAtLS0t LS0tLS0tLS0tLS0tDQo+IEluIGNvbnRyb2wgcGF0aCwgc2VjdXJpdHkgc2Vzc2lvbiBpcyBjcmVh dGVkIHdpdGggdGhlIGdpdmVuIFNBIGFuZA0KPiBydGVfZmxvdyBjb25maWd1cmF0aW9uIGV0Yy4N Cj4gDQo+IEZvciBvdXRib3VuZCB0cmFmZmljLCB0aGUgYXBwbGljYXRpb24gd2lsbCBoYXZlIHRv IGRvIFNBIGxvb2t1cCBhbmQNCj4gaWRlbnRpZnkgdGhlIHNlY3VyaXR5IGFjdGlvbiAoaW5saW5l L2xvb2sgYXNpZGUgY3J5cHRvL3Byb3RvY29sKS4gRm9yDQo+IHBhY2tldHMgaWRlbnRpZmllZCBm b3IgaW5saW5lIHByb3RvY29sIHByb2Nlc3NpbmcsIHRoZSBhcHBsaWNhdGlvbiB3b3VsZA0KPiBz dWJtaXQgYXMgcGxhaW4gcGFja2V0cyB0byB0aGUgZXRoZXJuZXQgZGV2aWNlIGFuZCB0aGUgc2Vj dXJpdHkgY2FwYWJsZQ0KPiBldGhlcm5ldCBkZXZpY2Ugd291bGQgcGVyZm9ybSBJUFNlYyBhbmQg c2VuZCBvdXQgdGhlIHBhY2tldC4gRm9yIFBNRHMNCj4gd2hpY2ggd291bGQgbmVlZCBleHRyYSBt ZXRhZGF0YSAoY2FwYWJpbGl0eSBmbGFnKSwgc2V0X3BrdF9tZXRhZGF0YQ0KPiBmdW5jdGlvbiBw b2ludGVyIHdvdWxkIGJlIGNhbGxlZCAoZnJvbSBhcHBsaWNhdGlvbikuDQo+IFRoaXMgY2FuIGJl IHVzZWQgdG8gc2V0IHNvbWUgcGVyIHBhY2tldCBmaWVsZCB0byBpZGVudGlmeSB0aGUgc2VjdXJp dHkgc2Vzc2lvbiB0byBiZSB1c2VkIHRvDQo+IHByb2Nlc3MgdGhlIHBhY2tldC4NCg0KWWVzLCBh cyBJIGNhbiBzZWUsIHRoYXQncyB3aGF0IGlwc2VjLWd3IGlzIGRvaW5nIHJpZ2h0IG5vdyBhbmQg aXQgd291bGRuJ3QgYmUNCmEgcHJvYmxlbSB0byBkbyB0aGUgc2FtZSBpbiBpcHNlYyBsaWIuICAN Cg0KPiBTZXF1ZW5jZSBudW1iZXIgdXBkYXRpb24gd2lsbCBiZSBkb25lIGJ5IHRoZSBQTUQuDQoN Ck9rLCBzbyBmb3IgSU5MSU5FX1BST1RPQ09MIHVwcGVyIGxheWVyIHdvdWxkbid0IG5lZWQgdG8g a2VlcCB0cmFjayBmb3IgU1FOIHZhbHVlcyBhdCBhbGw/DQpZb3UgZG9u4oCZdCcgY29uc2lkZXIg YSBwb3NzaWJpbGl0eSB0aGF0IGJ5IHNvbWUgcmVhc29uIHRoYXQgU0Egd291bGQgbmVlZCB0bw0K YmUgbW92ZWQgZnJvbSBkZXZpY2UgdGhhdCBzdXBwb3J0IElOTElORV9QUk9UT0NPTCB0byB0aGUg ZGV2aWNlIHRoYXQgZG9lc24ndD8gIA0KDQo+IEZvciBpbmJvdW5kIHRyYWZmaWMsIHRoZSBwYWNr ZXRzIGZvciBJUFNlYyB3b3VsZCBiZSBpZGVudGlmaWVkIGJ5IHVzaW5nDQo+IHJ0ZV9mbG93ICho YXJkd2FyZSBhY2NlbGVyYXRlZCBwYWNrZXQgZmlsdGVyaW5nKS4gRm9yIHRoZSBwYWNrZXRzDQo+ IGlkZW50aWZpZWQgZm9yIGlubGluZSBvZmZsb2FkIChTRUNVUklUWSBhY3Rpb24pLCBoYXJkd2Fy ZSB3b3VsZCBwZXJmb3JtDQo+IHRoZSBwcm9jZXNzaW5nLiBGb3IgaW5saW5lIHByb3RvY29sIHBy b2Nlc3NlZCBJUFNlYyBwYWNrZXRzLCBQTUQgd291bGQNCj4gc2V0IOKAnHVzZXIgZGF0YeKAnSBz byB0aGF0IGFwcGxpY2F0aW9uIGNhbiBnZXQgdGhlIGRldGFpbHMgb2YgdGhlIHNlY3VyaXR5DQo+ IHByb2Nlc3NpbmcgZG9uZSBvbiB0aGUgcGFja2V0LiBPbmNlIHRoZSBwbGFpbiBwYWNrZXQgKGFm dGVyIElQU2VjDQo+IHByb2Nlc3NpbmcpIGlzIHJlY2VpdmVkLCBhIHNlbGVjdG9yIGNoZWNrIG5l ZWQgdG8gYmUgcGVyZm9ybWVkIHRvIG1ha2UNCj4gc3VyZSB3ZSBoYXZlIGEgdmFsaWQgcGFja2V0 IGFmdGVyIElQU2VjIHByb2Nlc3NpbmcuIFRoZSB1c2VyIGRhdGEgaXMgdXNlZA0KPiBmb3IgdGhh dC4gQW50aS1yZXBsYXkgY2hlY2sgaXMgaGFuZGxlZCBieSB0aGUgUE1ELiBUaGUgUE1EIHdvdWxk IHJhaXNlDQo+IGFuIGV0aCBldmVudCBpbiBjYXNlIG9mIHNlcXVlbmNlIG51bWJlciBleHBpcnkg b3IgYW55IFNBIGV4cGlyeS4NCg0KRmV3IHF1ZXN0aW9ucyBoZXJlOg0KMSkgaWYgSSB1bmRlcnN0 YW5kIHRoaW5ncyByaWdodCAtIHRvIHNwZWNpZnkgdGhhdCBpdCB3YXMgYW4gSVBzZWMgcGFja2V0 IC0NClBLVF9SWF9TRUNfT0ZGTE9BRCB3aWxsIGJlIHNldCBpbiBtYnVmIG9sX2ZsYWdzPw0KMikg QmFzaWNhbGx5ICd1c2VyZGF0YScgd2lsbCBjb250YWluIGp1c3QgYSB1c2VyIHByb3ZpZGVkIGF0 IHJ0ZV9zZWN1cml0eV9zZXNzaW9uX2NyZWF0ZSBwb2ludGVyDQoobW9zdCBsaWtlbHkgcG9pbnRl ciB0byB0aGUgU0EsIGFzIGl0IGlzIGRvbmUgcmlnaHQgbm93IGluIGlwc2VjLXNlY2d3KSwgY29y cmVjdD8NCjMpIGluIGN1cnJlbnQgcnRlX3NlY3VyaXR5IEFQSSBzaSB0aGVyZSBhIHdheSB0byBn ZXQvc2V0IHJlcGxheSB3aW5kb3cgc2l6ZSwgZXRjPw0KNCkgICBTYW1lIHF1ZXN0aW9uIGFzIGZv ciBUWDogeW91IGRvbid0IHBsYW4gdG8gc3VwcG9ydCBmYWxsYmFjayB0byBvdGhlciB0eXBlIG9m IGRldmljZXMvU1c/DQpJLkUuIEhXIHdhcyBub3QgYWJsZSB0byBwcm9jZXNzIGlwc2VjIHBhY2tl dCBieSBzb21lIHJlYXNvbiAobGV0IHNheSBmcmFnbWVudGVkIHBhY2tldCkNCmFuZCBub3cgaXQg aXMgU1cgcmVzcG9uc2liaWxpdHkgdG8gZG8gc28/DQpUaGUgcmVhc29uIEkgYW0gYXNraW5nIGZv ciB0aGF0IC0gaXQgc2VlbXMgcmlnaHQgbm93IHRoZXJlIGlzIG5vIGRlZmluZWQgd2F5DQp0byBz aGFyZSBTUU4gcmVsYXRlZCBpbmZvcm1hdGlvbiBiZXR3ZWVuIEhXL1BNRCBhbmQgdXBwZXIgbGF5 ZXIgU1cuDQpJcyB0aGF0IG9rLCBvciB3b3VsZCB3ZSBuZWVkIHN1Y2ggY2FwYWJpbGl0eT8NCklm IHdlIHdvdWxkLCBhbmQgdXBwZXIgbGF5ZXIgU1cgd291bGQgbmVlZCB0byBrZWVwIHRyYWNrIG9u IFNRTiBhbnl3YXksDQp0aGVuIHRoZXJlIGlzIHByb2JhYmx5IG5vIHBvaW50IHRvIGRvIHNhbWUg dGhpbmcgaW4gUE1EIGl0ZWxmPw0KSW4gdGhhdCBjYXNlIFBNRCBqdXN0IG5lZWQgdG8gcHJvdmlk ZSBTUU4gaW5mb3JtYXRpb24gdG8gdGhlIHVwcGVyIGxheWVyIA0KKHByb2JhYmx5IG9uZSBlYXN5 IHdheSB0byBkbyBpdCAtIHJldXNlIHJ0ZV8sYnVmLnNlcW4gZm9yIHRoYXQgcHVycG9zZSwNCnRo b3VnaCBmb3IgdGhhdCB3aWxsIHByb2JhYmx5IG5lZWQgbWFrZSBpdCA2NC1iaXQgbG9uZykuDQoN Cj4gDQo+IA0KPiBMT09LQVNJREVfUFJPVE9DT0wNCj4gLS0tLS0tLS0tLS0tLS0tLS0tDQo+IElu IGNvbnRyb2wgcGF0aCwgc2VjdXJpdHkgc2Vzc2lvbiBpcyBjcmVhdGVkIHdpdGggdGhlIGdpdmVu IFNBLg0KPiANCj4gRW5xdWV1ZS9kZXF1ZXVlIGlzIHNpbWlsYXIgdG8gd2hhdCBpcyBkb25lIGZv ciByZWd1bGFyIGNyeXB0bw0KPiAoUlRFX1NFQ1VSSVRZX0FDVElPTl9UWVBFX05PTkUpIGJ1dCBh bGwgdGhlIHByb3RvY29sIHJlbGF0ZWQgcHJvY2Vzc2luZw0KPiB3b3VsZCBiZSBvZmZsb2FkZWQu IEFwcGxpY2F0aW9uIHdpbGwgbmVlZCB0byBkbyBTQSBsb29rdXAgYW5kIGlkZW50aWZ5DQo+IHRo ZSBwcm9jZXNzaW5nIHRvIGJlIGRvbmUgKGJvdGggaW4gY2FzZSBvZiBvdXRib3VuZCAmIGluYm91 bmQpLCBhbmQNCj4gc3VibWl0IHBhY2tldCB0byBjcnlwdG8gZGV2aWNlLiBBcHBsaWNhdGlvbiBu ZWVkIG5vdCBkbyBhbnkgSVBTZWMNCj4gcmVsYXRlZCB0cmFuc2Zvcm1hdGlvbnMgb3RoZXIgdGhh biB0aGUgbG9va3VwLiBBbnRpLXJlcGxheSBuZWVkIHRvIGJlDQo+IGhhbmRsZWQgaW4gdGhlIFBN RCAodGhlIHNwZWMgc2F5cyB0aGUgZGV2aWNlIOKAnG1heSBiZSBoYW5kbGVk4oCdIGRvIGFudGkt cmVwbGF5IGNoZWNrLA0KPiBidXQgYSBjb21wbGV0ZSBwcm90b2NvbCBvZmZsb2FkIHdvdWxkIG5l ZWQgYW50aS1yZXBsYXkgY2hlY2sgYWxzbykuDQoNClNhbWUgcXVlc3Rpb24gaGVyZSAtIHdvdWxk bid0IHRoZXJlIGJlIGEgc2l0dWF0aW9ucyB3aGVuIEhXL1BNRCB3b3VsZCBuZWVkIHRvDQpzaGFy ZSBTUU4gaW5mb3JtYXRpb24gd2l0aCB1cHBlciBsYXllcj8NCkxldCBzYXkgaWYgdXBwZXIgbGF5 ZXIgU1cgd291bGQgbmVlZCB0byBkbyBsb2FkIGJhbGFuY2luZyBiZXR3ZWVuIGNyeXB0by1kZXZp Y2VzIA0Kd2l0aCBMT09LQVNJREVfUFJPVE9DT0wgYW5kIHdpdGhvdXQ/DQoNCj4gDQo+IA0KPiA+ IHJ0ZV9zZWN1cml0eSBpcyBhICdmcmFtZXdvcmsgZm9yIG1hbmFnZW1lbnQgYW5kIHByb3Zpc2lv bmluZyBvZiBzZWN1cml0eSBwcm90b2NvbCBvcGVyYXRpb25zIG9mZmxvYWRlZCB0byBoYXJkd2Fy ZSBiYXNlZCBkZXZpY2VzJy4NCj4gPiBXaGlsZSBydGVfaXBzZWMgaXMgYWltZWQgdG8gYmUgYSBs aWJyYXJ5IGZvciBJUHNlYyBkYXRhLXBhdGggcHJvY2Vzc2luZy4NCj4gPiBUaGVyZSBpcyBubyBw bGFucyBmb3IgcnRlX2lwc2VjIHRvICdvYnNvbGV0ZScgcnRlX3NlY3VyaXR5Lg0KPiA+IFF1aXRl IG9wcG9zaXRlIHJ0ZV9pcHNlYyBzdXBwb3NlZCB0byB3b3JrIHdpdGggYm90aCBydGVfY3J5cHRv ZGV2IGFuZCBydGVfc2VjdXJpdHkgQVBJcyAoZGV2aWNlcykuDQo+ID4gSXQgaXMgcG9zc2libGUg dG8gaGF2ZSBhbiBTQSB0aGF0IHdvdWxkIHVzZSBib3RoIGNyeXB0byBhbmQgIHNlY3VyaXR5IGRl dmljZXMuDQo+ID4gT3IgdG8gaGF2ZSBhbiBTQSB0aGF0IHdvdWxkIHVzZSBtdWx0aXBsZSBjcnlw dG8gZGV2cw0KPiA+ICh0aG91Z2ggcmlnaHQgbm93IGl0IGlzIHVwIHRoZSB1c2VyIGxldmVsIHRv IGRvIGxvYWQtYmFsYW5jaW5nIGxvZ2ljKS4NCj4gPg0KPiA+ID4gRm9yIElQc2VjLCBJZiBhbiBh cHBsaWNhdGlvbiBuZWVkcyB0byB1c2UgcnRlX3NlY3VyaXR5IGZvciBIVw0KPiA+ID4gaW1wbGVt ZW50YXRpb24gYW5kIGFuZCBhcHBsaWNhdGlvbiBuZWVkcyB0byB1c2UgbGlicnRlX2lwc2VjIGZv cg0KPiA+ID4gIFNXIGltcGxlbWVudGF0aW9uIHRoZW4gaXQgaXMgYmFkIGFuZCBhIGxvdCBkdXBs aWNhdGlvbiBvZiB3b3JrIG9uDQo+ID4gPiBoZSBzbG93IHBhdGggdG9vLg0KPiA+DQo+ID4gVGhl IHBsYW4gaXMgdGhhdCBhcHBsaWNhdGlvbiB3b3VsZCBuZWVkIHRvIHVzZSBqdXN0IHJ0ZV9pcHNl YyBBUEkgZm9yIGFsbCBkYXRhLXBhdGhzDQo+ID4gKEhXL1NXLCBsb29rYXNpZGUvaW5saW5lKS4N Cj4gPiBMZXQgc2F5IHJpZ2h0IG5vdyB0aGVyZSBpcyBydGVfaXBzZWNfaW5saW5lX3Byb2Nlc3Mo KSBmdW5jdGlvbiBpZiB1c2VyDQo+ID4gcHJlZmVycyB0byB1c2UgaW5saW5lIHNlY3VyaXR5IGRl dmljZSB0byBwcm9jZXNzIGdpdmVuIGdyb3VwIHBhY2tldHMsDQo+ID4gYW5kIHJ0ZV9pcHNlY19j cnlwdG9fcHJvY2VzcygvcHJlcGFyZSkgaWYgdXNlciBkZWNpZGVzIHRvIHVzZQ0KPiA+IGxvb2th c2lkZSBzZWN1cml0eSBvciBzaW1wbGUgY3J5cHRvIGRldmljZSBmb3IgaXQuDQo+ID4NCj4gPiA+ DQo+ID4gPiBUaGUgcnRlX3NlY3VyaXR5IHNwZWMgY2FuIHN1cHBvcnQgYm90aCBpbmxpbmUgYW5k IGxvb2stYXNpZGUgSVBTZWMNCj4gPiA+IHByb3RvY29sIHN1cHBvcnQuDQo+ID4NCj4gPiBBRkFJ SyByaWdodCBub3cgcnRlX3NlY3VyaXR5IGp1c3QgcHJvdmlkZXMgQVBJIHRvIGNyZWF0ZS9mcmVl L21hbmlwdWxhdGUgc2VjdXJpdHkgc2Vzc2lvbnMuDQo+ID4gSSBkb24ndCBzZWUgaG93IGl0IGNh biBzdXBwb3J0IGFsbCB0aGUgZnVuY3Rpb25hbGl0eSBtZW50aW9uZWQgYWJvdmUsDQo+ID4gcGx1 cyBTQUQgYW5kIFNQRC4NCj4gDQo+IA0KPiBBdCBsZWFzdCBmb3IgSU5MSU5FX1BST1RPQ09MIGNh c2UgU0EgbG9va3VwIGZvciBpbmJvdW5kIHRyYWZmaWMgZG9lcyBieQ0KPiBIVy4NCg0KRm9yIGlu Ym91bmQgeWVzLCBmb3Igb3V0Ym91bmQgSSBzdXBwb3NlIHlvdSBzdGlsbCB3b3VsZCBuZWVkIHRv IGRvIGEgbG9va3VwIGluIFNXLg0KDQo+IA0KPiA+DQo+ID4gPg0KPiA+ID4gMikgVGhpcyBsaWJy YXJ5IGlzIHR1bmVkIGZvciBmYXQgQ1BVIGNvcmUgaW4gbWluZCBsaWtlIHNpbmdsZSBTQSBvbiBj b3JlDQo+ID4gPiBldGMuIFdoaWNoIGlzIGZpbmUgZm9yIHg4NiBzZXJ2ZXJzIGFuZCBhcm02NCBz ZXJ2ZXIgY2F0ZWdvcnkgb2YgbWFjaGluZXMNCj4gPiA+IGJ1dCBpdCBkb2VzIG5vdCB3b3JrIHZl cnkgd2VsbCB3aXRoIE5QVSBjbGFzcyBvZiBTb0Mgb3IgRlBHQS4NCj4gPiA+DQo+ID4gPiBBcyB0 aGVyZSAgYXJlIHRoZSBkaWZmZXJlbnQgd2F5cyB0byBpbXBsZW1lbnQgdGhlIElQU2VjLCBGb3Ig aW5zdGFuY2UsDQo+ID4gPiB1c2Ugb2YgZXZlbnRkZXYgY2FuIGhlbHAgaW4gc2l0dWF0aW9uIGZv ciBoYW5kbGluZyBtaWxsaW9ucyBvZiBTQSBhbmQNCj4gPiA+IGVxdWVuY2UgbnVtYmVyIG9mIHVw ZGF0ZSBhbmQgYW50aSByZXBseSBjaGVjayBjYW4gYmUgZG9uZSBieSBsZXZlcmFnaW5nDQo+ID4g PiBzb21lIG9mIHRoZSBIVyBzcGVjaWZpYyBmZWF0dXJlcyBsaWtlDQo+ID4gPiBPUkRFUkVELCBB VE9NSUMgc2NoZWR1bGUgdHlwZShtYXBwZWQgYXMgZXZlbnRkZXYgZmVhdHVyZSlpbiBIVyB3aXRo IFBJUEVMSU5FIG1vZGVsLg0KPiA+ID4NCj4gPiA+ICMgSXNzdWVzIHdpdGggaGF2aW5nIG9uZSBT QSBvbmUgY29yZSwNCj4gPiA+IC0gSW4gdGhlIG91dGJvdW5kIHNpZGUsIHRoZXJlIGNvdWxkIGJl IG11bHRpcGxlIGZsb3dzIHVzaW5nIHRoZSBzYW1lIFNBLg0KPiA+ID4gICBNdWx0aXBsZSBmbG93 cyBjb3VsZCBiZSBwcm9jZXNzZWQgcGFyYWxsZWwgb24gZGlmZmVyZW50IGxjb3JlcywNCj4gPiA+ IGJ1dCB0eWluZyBvbmUgU0EgdG8gb25lIGNvcmUgd291bGQgbWVhbiB3ZSB3b24ndCBiZSBhYmxl IHRvIGRvIHRoYXQuDQo+ID4gPg0KPiA+ID4gLSBJbiB0aGUgaW5ib3VuZCBzaWRlLCB3ZSB3aWxs IGhhdmUgYSBmYXQgZmxvdyBoaXR0aW5nIG9uZSBjb3JlLiBJZg0KPiA+ID4gICBJUHNlYyBsaWJy YXJ5IGFzc3VtZXMgc2luZ2xlIGNvcmUsIHdlIHdpbGwgbm90IGJlIGFibGUgdG8gdG8gc3ByZWFk DQo+ID4gPiBmYXQgZmxvdyB0byBtdWx0aXBsZSBjb3Jlcy4gQW5kIG9uZSBTQS1vbmUgY29yZSB3 b3VsZCBtZWFuIGFsbCBwb3J0cyBvbg0KPiA+ID4gd2hpY2ggd2Ugd291bGQgZXhwZWN0IElQc2Vj IHRyYWZmaWMgaGFzIHRvIGJlIGhhbmRsZWQgYnkgdGhhdCBjb3JlLg0KPiA+DQo+ID4gSSBzdXBw b3NlIHRoYXQgYWxsIHJlZmVycyB0byB0aGUgZGlzY3Vzc2lvbiBhYm91dCBNVCBzYWZlIEFQSSBm b3IgcnRlX2lwc2VjLCByaWdodD8NCj4gPiBJZiBzbywgdGhlbiBhcyBJIHNhaWQgaW4gbXkgcmVw bHkgdG8gQW5vb2I6DQo+ID4gV2Ugd2lsbCB0cnkgdG8gbWFrZSBBUEkgdXNhYmxlIGluIE1UIGVu dmlyb25tZW50IGZvciB2MSwNCj4gPiBzbyB5b3UgY2FuIHJldmlldyBhbmQgcHJvdmlkZSBjb21t ZW50cyBhdCBlYXJseSBzdGFnZXMuDQo+IA0KPiBPSw0KPiANCj4gPg0KPiA+ID4NCj4gPiA+IEkg aGF2ZSBtYWRlIGEgc2ltcGxlIHByZXNlbnRhdGlvbi4gVGhpcyBwcmVzZW50YXRpb24gZGV0YWls cyBPTkUgV0FZIHRvDQo+ID4gPiBpbXBsZW1lbnQgdGhlIElQU2VjIHdpdGggSFcgc3VwcG9ydCBv biBOUFUuDQo+ID4gPg0KPiA+ID4gaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vcHJlc2VudGF0aW9u L2QvMWUzSURmOVI3WlFCOEZOMTZOdnU3S0lOdUxTV01keUtFdzhfMEgwNXJqajQvZWRpdD91c3A9 c2hhcmluZw0KPiA+ID4NCj4gPg0KPiA+IFRoYW5rcywgcXVpdGUgaGVscGZ1bC4NCj4gPiBBY3R1 YWxseSBmcm9tIHBhZ2UgMywgaXQgbG9va3MgbGlrZSB5b3VyIGV4cGVjdGF0aW9ucyBkb24ndCBj b250cmFkaWN0IGluIGdlbmVyYWwgd2l0aCBwcm9wb3NlZCBBUEk6DQo+ID4NCj4gPiAuLi4NCj4g PiB9IGVsc2UgaWYgKGV2LmV2ZW50X3R5cGUgPT0gUlRFX0VWRU5UX1RZUEVfTENPUkUgJiYgZXYu c3ViX2V2ZW50X2lkID09IEFQUF9TVEFURV9TRVFfVVBEQVRFKSB7DQo+ID4gICAgICAgICAgICAg ICAgICAgICAgICAgc2EgPSBldi5mbG93X3F1ZXVlX2lkOw0KPiA+ICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIGRvIGNyaXRpY2FsIHNlY3Rpb24gd29yayBwZXIgc2EgKi8NCj4gPiAgICAgICAg ICAgICAgICAgICAgICAgICBkb19jcml0aWNhbF9zZWN0aW9uX3dvcmsoc2EpOw0KPiA+DQo+ID4g W0tBXSB0aGF0J3MgdGhlIHBsYWNlIHdoZXJlIEkgZXhwZWN0IGVpdGhlcg0KPiA+IHJ0ZV9pcHNl Y19pbmxpbmVfcHJvY2VzcyhzYSwgLi4uKTsgT1IgcnRlX2lwc2VjX2NyeXB0b19wcmVwYXJlKHNh LCAuLi4pOw0KPiA+IHdvdWxkIGJlIGNhbGxlZC4NCj4gDQo+IE1ha2VzIHNlbnNlLiBCdXQgY3Vy cmVudGx5LCB0aGUgbGlicmFyeSBkZWZpbmVzIHdoYXQgaXMNCj4gcnRlX2lwc2VjX2lubGluZV9w cm9jZXNzKCkgYW5kIHJ0ZV9pcHNlY19jcnlwdG9fcHJlcGFyZSgpLCBidXQgaXQgc2hvdWxkDQo+ IGJlIGJhc2VkIG9uIHVuZGVybmVhdGggc2VjdXJpdHkgZGV2aWNlIG9yIGNyeXB0byBkZXZpY2Uu DQoNClJlYXNvbiBmb3IgdGhhdCAtIHRoZWlyIGNvZGUtcGF0aHMgYXJlIHF1aXRlIGRpZmZlcmVu dDoNCmZvciBpbmxpbmUgZGV2aWNlcyB3ZSBjYW4gZG8gd2hvbGUgcHJvY2Vzc2luZyBzeW5jaHJv bm91c2x5KHdpdGhpbiBwcm9jZXNzKCkgZnVuY3Rpb24pLA0Kd2hpbGUgZnJvIGNyeXB0byBpdCBp cyBzb3J0IG9mIHNwbGl0IGludG8gdHcgcGFydHMgLQ0Kd2UgZmlyc3QgaGF2ZSB0byBkbyBwcmVw YXJlKCk7ZW5xdWV1ZSgpIHRoZW0gdG8gY3J5cHRvLWRldiwgYW5kIHRoZW4gZGVxdWV1ZSgpO3By b2Nlc3MoKS4NCkFub3RoZXIgZ29vZCB0aGluZyB3aXRoIHRoYXQgd2F5IC0gaXQgYWxsb3dzIHRo ZSBzYW1lIFNBIHRvIHdvcmsgd2l0aCBkaWZmZXJlbnQgZGV2aWNlcy4NCiANCj4gDQo+IFNvLCBJ TU8gZm9yIGJldHRlciBjb250cm9sLCB0aGVzZSBmdW5jdGlvbnMgc2hvdWxkIGJlIHRoZSBmdW5j dGlvbiBwb2ludGVyDQo+IGJhc2VkIGFuZCBiYXNlZCBvbiB1bmRlcmx5aW5nIGRldmljZSwgbGli cmFyeSBjYW4gZmlsbCB0aGUNCj4gaW1wbGVtZW50YXRpb24uDQo+IA0KPiBJTU8sIGl0IGlzIG5v dCBwb3NzaWJsZSB0byBjcmVhdGUgInN0YXRpYyBpbmxpbmUgZnVuY3Rpb24iIHdpdGggYWxsICJp ZiINCj4gY2hlY2tzLiBJIHRoaW5rLCB3ZSBjYW4gaGF2ZSBmb3VyIGlwc2VjIGZ1bmN0aW9ucyB3 aXRoIGZ1bmN0aW9uIHBvaW50ZXINCj4gc2NoZW1lLg0KPiANCj4gcnRlX2lwc2VjX2luYm91bmRf cHJlcGFyZSgpDQo+IHJ0ZV9pcHNlY19pbmJvdW5kX3Byb2Nlc3MoKQ0KPiBydGVfaXBzZWNfb3V0 Ym91bmRfcHJlcGFyZSgpDQo+IHJ0ZV9pcHNlY19vdXRib3VuZF9wcm9jZXNzKCkNCj4gDQo+IFNv bWUgb2YgdGhlIG90aGVyIGNvbmNlcm5zOg0KPiAxKSBGb3IgSFcgaW1wbGVtZW50YXRpb24sIHJ0 ZV9pcHNlY19zYSBuZWVkcyB0byBvcGFxdWUgbGlrZSBydGVfc2VjdXJpdHkNCj4gYXMgc29tZSBv ZiB0aGUgc3RydWN0dXJlIGRlZmluZWQgYnkgSFcgb3IgTWljcm9jb2RlLiBXZSBjYW4gY2hvb3Nl DQo+IGFic29sdXRlIGdlbmVyaWMgaXRlbXMgYXMgY29tbW9uIGFuZCBkZXZpY2UvcnRlX3NlY3Vy aXR5IHNwZWNpZmljIGNhbiBiZSBvcGFxdWUuDQoNCkkgZG9uJ3QgdGhpbmsgaXQgd291bGQgYmUg YSBwcm9ibGVtLCBydGVfaXBzZWNfc2EgIGRvZXMgY29udGFpbiBhIHBvaW50ZXIgdG8NCnJ0ZV9z ZWN1cml0eV9zZXNzaW9uLCBzbyBpdCBjYW4gcHJvdmlkZSBpdCBhcyBhbiBhcmd1bWVudCB0byB0 aGVzZSBmdW5jdGlvbnMuDQogDQo+IA0KPiAyKUkgdGhpbmssIGluIG9yZGVyIHRvIGFjY29tbW9k YXRlIHRoZSBldmVudCBkcml2ZXJuIG1vZGVsLiBXZSBuZWVkIHRvIHBhc3MNCj4gdm9pZCAqKiBp biBwcmVwYXJlKCkgYW5kIHByb2Nlc3MoKSBmdW5jdGlvbiB3aXRoIGFuIGFkZGl0aW9uYWwgYXJn dW1lbnQNCj4gb2YgdHlwZShUWVBFX0VWRU5UL1RZUEVfTUJVRikgY2FuIGJlIHBhc3NlZCB0byBk ZXRlY3QgcGFja2V0IG9iamVjdA0KPiB0eXBlIGFzIHNvbWUgb2YgdGhlIGZ1bmN0aW9ucyBpbiBw cmVwYXJlKCkgYW5kIHByb2Nlc3MoKSBtYXkgbmVlZA0KPiBydGVfZXZlbnQgdG8gb3BlcmF0ZSBv bi4NCg0KWW91IGFyZSB0YWxraW5nIGhlcmUgYWJvdXQgc2VjdXJpdHkgZGV2aWNlIHNwZWNpZmlj IGZ1bmN0aW9ucyBkZXNjcmliZWQgYmVsb3csIGNvcnJlY3Q/DQoNCj4gDQo+ID4NCj4gPiAgICAg ICAgICAgICAgICAgICAgICAvKiBJc3N1ZSB0aGUgY3J5cHRvIHJlcXVlc3QgYW5kIGdlbmVyYXRl IHRoZSBmb2xsb3dpbmcgb24gY3J5cHRvIHdvcmsgY29tcGxldGlvbiAqLw0KPiA+IFtLQV0gdGhh dCdzIHRoZSBwbGFjZSB3aGVyZSBJIGV4cGVjdCBydGVfaXBzZWNfY3J5cHRvX3Byb2Nlc3MoLi4u KSBiZSBpbnZva2VkLg0KPiA+DQo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgZXYuZmxvd19x dWV1ZV9pZCA9IHR4X3BvcnQ7DQo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgZXYuc3ViX2V2 ZW50X2lkID0gdHhfcXVldWVfaWQ7DQo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgZXYuc2No ZWRfc3luYyA9IFJURV9TQ0hFRF9TWU5DX0FUT01JQzsNCj4gPiAgICAgICAgICAgICAgICAgICAg ICAgICBydGVfY3J5cHRvZGV2X2V2ZW50X2VucXVldWUoY3J5cHRvZGV2LCBldi5tYnVmLCBldmVu dGRldiwgZXYpOw0KPiA+ICAgICAgICAgICAgICAgICB9DQo+ID4NCj4gPg0KPiA+ID4gSSBhbSBu b3Qgc2F5aW5nIHRoaXMgc2hvdWxkIGJlIHRoZSBPTkxZIHdheSB0byBkbyBhcyBpdCBkb2VzIG5v dCB3b3JrDQo+ID4gPiB2ZXJ5IHdlbGwgd2l0aCBub24gTlBVL0ZQR0EgY2xhc3Mgb2YgU29DLg0K PiA+ID4NCj4gPiA+IFNvIGhvdyBhYm91dCBtYWtpbmcgdGhlIHByb3Bvc2VkIElQU2VjIGxpYnJh cnkgYXMgcGx1Z2luL2RyaXZlciB0bw0KPiA+ID4gcnRlX3NlY3VyaXR5Lg0KPiA+DQo+ID4gQXMg SSBtZW50aW9uZWQgYWJvdmUsIEkgZG9uJ3QgdGhpbmsgdGhhdCBwdXNoaW5nIHdob2xlIElQU2Vj IGRhdGEtcGF0aCBpbnRvIHJ0ZV9zZWN1cml0eQ0KPiA+IGlzIHRoZSBiZXN0IHBvc3NpYmxlIGFw cHJvYWNoLg0KPiA+IFRob3VnaCBJIHByb2JhYmx5IHVuZGVyc3RhbmQgeW91ciBjb25jZXJuOg0K PiA+IEluIFJGQyBjb2RlIHdlIGFsd2F5cyBkbyB3aG9sZSBwcmVwYXJlL3Byb2Nlc3MgaW4gU1cg KGF0dGFjaC9yZW1vdmUgRVNQIGhlYWRlcnMvdHJhaWxlcnMsIHNvIHBhZGRpbmdzIGV0Yy4pLA0K PiA+IGkuZS4gcmlnaHQgbm93IG9ubHkgZGV2aWNlIHR5cGVzOiBSVEVfU0VDVVJJVFlfQUNUSU9O X1RZUEVfTk9ORSBhbmQgUlRFX1NFQ1VSSVRZX0FDVElPTl9UWVBFX0lOTElORV9DUllQVE8gYXJl IGNvdmVyZWQuDQo+ID4gVGhvdWdoIHRoZXJlIGFyZSBkZXZpY2VzIHdoZXJlIG1vc3Qgb2YgcHJl cGFyZS9wcm9jZXNzIGNhbiBiZSBkb25lIGluIEhXDQo+ID4gKFJURV9TRUNVUklUWV9BQ1RJT05f VFlQRV9JTkxJTkVfUFJPVE9DT0wvUlRFX1NFQ1VSSVRZX0FDVElPTl9UWVBFX0xPT0tBU0lERV9Q Uk9UT0NPTCksDQo+ID4gcGx1cyBpbiBmdXR1cmUgY291bGQgYmUgZGV2aWNlcyB3aGVyZSBwcmVw YXJlL3Byb2Nlc3Mgd291bGQgYmUgc3BsaXQgYmV0d2VlbiBIVy9TVyBpbiBhIGN1c3RvbSB3YXku DQo+ID4gSXMgdGhhdCBzbz8NCj4gPiBUbyBhZGRyZXNzIHRoYXQgaXNzdWUgSSBzdXBwb3NlIHdl IGNhbiBkbzoNCj4gPiAxLiBBZGQgc3VwcG9ydCBmb3IgUlRFX1NFQ1VSSVRZX0FDVElPTl9UWVBF X0lOTElORV9QUk9UT0NPTCBhbmQgUlRFX1NFQ1VSSVRZX0FDVElPTl9UWVBFX0xPT0tBU0lERV9Q Uk9UT0NPTA0KPiA+ICAgICBzZWN1cml0eSBkZXZpY2VzIGludG8gaXBzZWMuDQo+ID4gICAgIFdl IHBsYW5uZWQgdG8gZG8gaXQgYW55d2F5LCBqdXN0IGRvbid0IGhhdmUgaXQgZG9uZSB5ZXQuDQo+ ID4gMi4gRm9yIGN1c3RvbSBjYXNlIC0gaW50cm9kdWNlIFJURV9TRUNVUklUWV9BQ1RJT05fVFlQ RV9JTkxJTkVfQ1VTVE9NIGFuZCBSVEVfU0VDVVJJVFlfQUNUSU9OX1RZUEVfTE9PS0FTSURFX0NV U1RPTQ0KPiANCj4gVGhlIHByb2JsZW0gaXMsIENVU1RPTSBtYXkgaGF2ZSBkaWZmZXJlbnQgdmFy aWFudHMgYW5kICJpZiIgY29uZGl0aW9ucyB3b24ndA0KPiBzY2FsZSBpZiB3ZSBjaG9vc2UgdG8g aGF2ZSBub24gZnVuY3Rpb24gcG9pbnRlciBzY2hlbWUuIE90aGVyd2lzZSwgaXQNCj4gbG9va3Mg T0sgdG8gY3JlYXRlIG5ldyBTRUNVUklUWSBUWVBFIGFuZCBhc3NvY2lhdGVkIHBsdWdpbiBmb3Ig cHJlcGFyZSgpIGFuZCBwcm9jZXNzKCkNCj4gZnVuY3Rpb24gaW4gbGlicnRlX2lwc2VjIGxpYnJh cnkuDQoNCkluIHByaW5jaXBsZSwgSSBkb24ndCBtaW5kIHRvIGFsd2F5cyB1c2UgZnVuY3Rpb24g cG9pbnRlcnMgZm9yIHByZXBhcmUoKS9wcm9jZXNzKCksIGJ1dDoNCmZyb20geW91ciBkZXNjcmlw dGlvbiBhYm92ZSBvZiBJTkxJTkVfUFJPVE9DT0wgYW5kIExPT0tBU0lERV9QUk9UT0NPTA0KdGhl IHByb2Nlc3MoKS9wcmVwYXJlKCkgZm9yIHN1Y2ggZGV2aWNlcyBsb29rcyB3ZWxsIGRlZmluZWQg YW5kDQpzdHJhaWdodGZvcndhcmQgdG8gaW1wbGVtZW50Lg0KTm90IHN1cmUgd2UnbGwgbmVlZCBh IGZ1bmN0aW9uIHBvaW50ZXIgZm9yIHN1Y2ggc2ltcGxlIGFuZCBsaWdodHdlaWdodCBjYXNlOg0K c2V0L2NoZWNrIG9sX2ZsYWdzLCBzZXQvcmVhZCB1c2VyZGF0YSB2YWx1ZS4NCkkgdGhpbmsgZXh0 cmEgZnVuY3Rpb24gY2FsbCBoZXJlIGlzIGtpbmQgb2Ygb3ZlcmtpbGwgYW5kIHdpbGwgb25seSBz bG93ZG93biB0aGluZ3MuDQpCdXQgaWYgdGhhdCB3b3VsZCBiZSBtYWpvcml0eSBwcmVmZXJlbmNl IC0gSSB3b3VsZG4ndCBhcmd1ZS4NCkJUVyBpZiB3ZSdsbCBhZ3JlZSB0byBhbHdheXMgdXNlIGZ1 bmN0aW9uIHBvaW50ZXJzIGZvciBwcm9jZXNzL3ByZXBhcmUsDQp0aGVuIHRoZXJlIGlzIG5vIHBv aW50IHRvIGhhdmUgdGhhdCBhbGwgZXhpc3RpbmcgYWN0aW9uIHR5cGVzIC0NCmFsbCB3ZSBuZWVk IGlzIGFuIGluZGljYXRpb24gaXMgaXQgaW5saW5lIG9yIGxvb2thc2lkZSBkZXZpY2UgYW5kDQpm dW5jdGlvbiBwb2ludGVycyBmb3IgcHJlcGFyZS9wcm9jZXNzKCkuDQoNCktvbnN0YW50aW4NCg0K PiANCj4gDQo+ID4gICAgIGFuZCBhZGQgaW50byBydGVfc2VjdXJpdHlfb3BzICAgbmV3IGZ1bmN0 aW9uczoNCj4gPiAgICAgdWludDE2X3QgbG9va2FzaWRlX3ByZXBhcmUoc3RydWN0IHJ0ZV9zZWN1 cml0eV9zZXNzaW9uICpzZXNzLCBzdHJ1Y3QgcnRlX21idWYgKm1iW10sIHN0cnVjdCBzdHJ1Y3Qg cnRlX2NyeXB0b19vcCAqY29wW10sIHVpbnQxNl90IG51bSk7DQo+ID4gICAgIHVpbnQxNl90IGxv b2thc2lkZV9wcm9jZXNzKHN0cnVjdCBydGVfc2VjdXJpdHlfc2Vzc2lvbiAqc2Vzcywgc3RydWN0 IHJ0ZV9tYnVmICptYltdLCBzdHJ1Y3Qgc3RydWN0IHJ0ZV9jcnlwdG9fb3AgKmNvcFtdLCB1aW50 MTZfdCBudW0pOw0KPiA+ICAgICB1aW50MTZfdCBpbmxpbmVfcHJvY2VzcyhzdHJ1Y3QgcnRlX3Nl Y3VyaXR5X3Nlc3Npb24gKnNlc3MsIHN0cnVjdCBydGVfbWJ1ZiAqbWJbXSwgc3RydWN0IHN0cnVj dCBydGVfY3J5cHRvX29wICpjb3BbXSwgdWludDE2X3QgbnVtKTsNCj4gPiAgICAgU28gZm9yIGN1 c3RvbSBIVywgUE1EIGNhbiBvdmVyd3JpdGUgbm9ybWFsIHByZXBhcmUvcHJvY2VzcyBiZWhhdmlv ci4NCj4gPg0KPiA+ID4gVGhpcyB3b3VsZCBnaXZlIGZsZXhpYmx5IGZvciBlYWNoIHZlbmRvci9w bGF0Zm9ybSBjaG9vc2UgdG8gZGlmZmVyZW50DQo+ID4gPiBJUHNlIGltcGxlbWVudGF0aW9uIGJh c2VkIG9uIEhXIHN1cHBvcnQgV0lUSE9VVCBDSEFOR0lORyBUSEUgQVBQTElDQVRJT04NCj4gPiA+ IElOVEVSRkFDRS4NCj4gPg0KPiA+IE5vdCBzdXJlIHdoYXQgQVBJIGNoYW5nZXMgeW91IGFyZSBy ZWZlcnJpbmcgdG8/DQo+ID4gQXMgSSBhbSBhd2FyZSB3ZSBkbyBpbnRyb2R1Y2UgbmV3IEFQSSwg YnV0IGFsbCBleGlzdGluZyBBUElzIHJlbWFpbiBpbiBwbGFjZS4NCj4gDQo+IA0KPiBXaGF0IEkg bWVhbnQgd2FzLCBTaW5nbGUgYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIHRvIGVu YWJsZSBJUFNlYyBwcm9jZXNzaW5nIHRvDQo+IGFwcGxpY2F0aW9uLg0KPiANCj4gDQo+ID4NCj4g PiA+DQo+ID4gPiBJTU8sIHJ0ZV9zZWN1cml0eSBJUHNlYyBsb29rIGFzaWRlIHN1cHBvcnQgY2Fu IGJlIHNpbXBseSBhZGRlZCBieQ0KPiA+ID4gY3JlYXRpbmcgdGhlIHZpcnR1YWwgY3J5cHRvIGRl dmljZShpLmUgbW92ZSB0aGUgcHJvcG9zZWQgY29kZSB0byB0aGUgdmlydHVhbCBjcnlwdG8gZGV2 aWNlKQ0KPiA+ID4gbGlrZXdpc2UgaW5saW5lIHN1cHBvcnQNCj4gPiA+IGNhbiBiZSBhZGRlZCBi eSB0aGUgdmlydHVhbCBldGhkZXYgZGV2aWNlLg0KPiA+DQo+ID4gVGhhdCdzIHByb2JhYmx5IHBv c3NpYmxlIGFuZCBpZiBzb21lb25lIHdvdWxkIGxpa2UgdG8gaW50cm9kdWNlIHN1Y2ggYWJzdHJh Y3Rpb24gLSBOUCBpbiBnZW5lcmFsDQo+ID4gKHRob3VnaCBteSBzdXNwaWNpb24gLSBpdCBtaWdo dCBiZSB0b28gaGVhdnkgdG8gYmUgcmVhbGx5IHVzZWZ1bCkuDQo+ID4gVGhvdWdoIEkgZG9uJ3Qg dGhpbmsgaXQgc2hvdWxkIGJlIHRoZSBvbmx5IHBvc3NpYmxlIHdheSBmb3IgdGhlIHVzZXIgdG8g ZW5hYmxlIElQc2VjIGRhdGEtcHJvY2Vzc2luZyBpbnNpZGUgaGlzIGFwcC4NCj4gPiBBZ2FpbiBJ IGd1ZXNzIHN1Y2ggdmlydHVhbC1kZXYgd2lsbCBzdGlsbCB1c2UgcnRlX2lwc2VjIGluc2lkZS4N Cj4gDQo+IEkgZG9uJ3QgaGF2ZSBzdHJvbmcgb3BpbmlvbiBvbiB2aXJ0dWFsIGRldmljZXMgVlMg ZnVuY3Rpb24gcG9pbnRlciBiYXNlZA0KPiBwcmVwYXJlKCkgYW5kIHByb2Nlc3MoKSBmdW5jdGlv biBpbiBsaWJydGVfaXBzZWMgbGlicmFyeS4NCj4gDQo+ID4NCj4gPiA+IFRoaXMgd291bGQgYXZv aWQgdGhlIG5lZWQgZm9yDQo+ID4gPiB1cGRhdGluZyBpcHNlYy1ndyBhcHBsaWNhdGlvbiBhcyB3 ZWxsIGkuZSB1bmlmaWVkIGludGVyZmFjZSB0byBhcHBsaWNhdGlvbi4NCj4gPg0KPiA+IEkgdGhp bmsgLSBpdCB3b3VsZCAgcmVhbGx5IGdvb2QgdG8gc2ltcGxpZnkgZXhpc3RpbmcgaXBzZWMtc2Vj Z3cgc2FtcGxlIGFwcC4NCj4gPiBTb21lIHBhcnRzIG9mIGl0IHNlZW1zIHVubmVjZXNzYXJ5IGNv bXBsZXggdG8gbWUuDQo+ID4gT25lIG9mIHRoZSByZWFzb25zIGZvciBpdCAtICB3ZSBkb24ndCBy ZWFsbHkgaGF2ZSBhbiB1bmlmaWVkIChhbmQgdHJhbnNwYXJlbnQpIEFQSSBmb3IgaXBzZWMgZGF0 YS1wYXRoLg0KPiA+IExldCdzIGxvb2sgYXQgaXBzZWNfZW5xdWV1ZSgpIGFuZCByZWxhdGVkIGNv ZGUgKGV4YW1wbGVzL2lwc2VjLXNlY2d3L2lwc2VjLmM6MzY1KQ0KPiA+IEl0IGlzIGh1Z2UgKGFu ZCB1Z2x5KSAtICB1c2VyIGhhcyB0byBoYW5kbGUgZG96ZW4gZGlmZmVyZW50IGNhc2VzIGp1c3Qg dG8gZW5xdWV1ZSBwYWNrZXQgZm9yIElQc2VjIHByb2Nlc3NpbmcuDQo+ID4gT25lIG9mIHRoZSBh aW1zIG9mIHJ0ZV9pcHNlYyBsaWJyYXJ5IC0gaGlkZSBhbGwgdGhhdCBjb21wbGV4aXRpZXMgaW5z aWRlIHRoZSBsaWJyYXJ5IGFuZCBwcm92aWRlIHRvDQo+ID4gdGhlIHVwcGVyIGxheWVyIGNsZWFu IGFuZCB0cmFuc3BhcmVudCBBUEkuDQo+ID4NCj4gPiA+DQo+ID4gPiBJZiB5b3UgZG9uJ3QgbGlr ZSB0aGUgYWJvdmUgaWRlYSwgYW55IHNjaGVtZSBvZiBwbHVnaW4gYmFzZWQNCj4gPiA+IGltcGxl bWVudGF0aW9uIHdvdWxkIGJlIGZpbmUgc28gdGhhdCB2ZW5kb3Igb3IgcGxhdGZvcm0gY2FuIGNo b29zZSBpdHMgb3duIGltcGxlbWVudGF0aW9uLg0KPiA+ID4gSXQgY2FuIGJlIGJhc2VkIG9uIHBh cnRpYWwgSFcgaW1wbGVtZW50IHRvby4gaS5lIFNBIGxvb2sgY2FuIGJlIHVzZWQgaW4gU1csIHJl bWFpbmluZyBzdHVmZiBpbiBIVw0KPiA+ID4gKGZvciBleGFtcGxlIElQc2VjIGlubGluZSBjYXNl KQ0KPiA+DQo+ID4gSSBhbSBzdXJlbHkgb2sgd2l0aCB0aGUgaWRlYSB0byBnaXZlIHZlbmRvcnMg YW4gYWJpbGl0eSB0byBjdXN0b21pemUgaW1wbGVtZW50YXRpb24NCj4gPiBhbmQgZW5hYmxlIHRo ZWlyIEhXIGNhcGFiaWxpdGllcy4NCj4gDQo+IEkgdGhpbmssIFdlIGFyZSBvbiB0aGUgc2FtZSBw YWdlLCBqdXN0IHRoYXQgdGhlIGZpbmUgZGV0YWlscyBvZiAiZnJhbWV3b3JrIg0KPiBmb3IgY3Vz dG9taXppbmcgaW1wbGVtZW50YXRpb24gYmFzZWQgb24gdGhlaXIgSFcgY2FwYWJpbGl0aWVzIG5l ZWQgdG8NCj4gaXJvbiBvdXQuDQo+IA0KPiA+IERvIHlvdSB0aGluayBwcm9wb3NlZCBhZGRpdGlv bnMgdG8gdGhlIHJ0ZV9zZWN1cml0eSB3b3VsZCBiZSAgZW5vdWdoLA0KPiA+IG9yIHNvbWV0aGlu ZyBleHRyYSBpcyBuZWVkZWQ/DQo+IA0KPiBTZWUgYWJvdmUuDQo+IA0KPiBKZXJpbg0KPiANCj4g Pg0KPiA+IEtvbnN0YW50aW4NCj4gPg0KPiA+DQo+ID4gPg0KPiA+ID4gIyBGb3IgcHJvdG9jb2xz IGxpa2UgVURQLCBpdCBtYWtlcyBzZW5zZSB0byBjcmVhdGUgbGlicnRlX3VkcCBhcyB0aGVyZQ0K PiA+ID4gbm8gbXVjaCBIVyBzcGVjaWZpYyBvZmZsb2FkIG90aGVyIHRoYW4gZXRoZGV2IHByb3Zp ZGVzLg0KPiA+ID4NCj4gPiA+ICMgUERDUCBjb3VsZCBiZSBhbm90aGVyIGxpYnJhcnkgdG8gb2Zm bG9hZCB0byBIVywgU28gdGFsa2luZw0KPiA+ID4gcnRlX3NlY3VyaXR5IHBhdGggbWFrZXMgbW9y ZSBzZW5zZSBpbiB0aGF0IGNhc2UgdG9vLg0KPiA+ID4NCj4gPiA+IEplcmluDQo=