From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by dpdk.org (Postfix) with ESMTP id C71A63B5 for ; Mon, 11 Jul 2016 12:43:26 +0200 (CEST) Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga104.fm.intel.com with ESMTP; 11 Jul 2016 03:43:25 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.28,346,1464678000"; d="scan'208";a="992754355" Received: from irsmsx106.ger.corp.intel.com ([163.33.3.31]) by orsmga001.jf.intel.com with ESMTP; 11 Jul 2016 03:42:40 -0700 Received: from irsmsx102.ger.corp.intel.com ([169.254.2.10]) by IRSMSX106.ger.corp.intel.com ([169.254.8.145]) with mapi id 14.03.0248.002; Mon, 11 Jul 2016 11:42:37 +0100 From: "Chandran, Sugesh" To: Adrien Mazarguil CC: "dev@dpdk.org" , Thomas Monjalon , "Zhang, Helin" , "Wu, Jingjing" , Rasesh Mody , Ajit Khaparde , Rahul Lakkireddy , "Lu, Wenzhuo" , "Jan Medala" , John Daley , "Chen, Jing D" , "Ananyev, Konstantin" , Matej Vido , "Alejandro Lucero" , Sony Chacko , Jerin Jacob , "De Lara Guarch, Pablo" , Olga Shern Thread-Topic: [dpdk-dev] [RFC] Generic flow director/filtering/classification API Thread-Index: AQHR1ul13SVB/Bo7y0+HNDeMrG3/bKANL2ZggAFEKwCABIVXkA== Date: Mon, 11 Jul 2016 10:42:36 +0000 Message-ID: <2EF2F5C0CC56984AA024D0B180335FCB13DEB236@IRSMSX102.ger.corp.intel.com> References: <20160705181646.GO7621@6wind.com> <2EF2F5C0CC56984AA024D0B180335FCB13DEA331@IRSMSX102.ger.corp.intel.com> <20160708130310.GD7621@6wind.com> In-Reply-To: <20160708130310.GD7621@6wind.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: 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] Generic flow director/filtering/classification API X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 11 Jul 2016 10:43:27 -0000 SGkgQWRyaWVuLA0KDQpUaGFuayB5b3UgZm9yIHlvdXIgcmVzcG9uc2UsDQpQbGVhc2Ugc2VlIG15 IGNvbW1lbnRzIGlubGluZS4NCg0KUmVnYXJkcw0KX1N1Z2VzaA0KDQoNCj4gLS0tLS1PcmlnaW5h bCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogQWRyaWVuIE1hemFyZ3VpbCBbbWFpbHRvOmFkcmllbi5t YXphcmd1aWxANndpbmQuY29tXQ0KPiBTZW50OiBGcmlkYXksIEp1bHkgOCwgMjAxNiAyOjAzIFBN DQo+IFRvOiBDaGFuZHJhbiwgU3VnZXNoIDxzdWdlc2guY2hhbmRyYW5AaW50ZWwuY29tPg0KPiBD YzogZGV2QGRwZGsub3JnOyBUaG9tYXMgTW9uamFsb24gPHRob21hcy5tb25qYWxvbkA2d2luZC5j b20+Ow0KPiBaaGFuZywgSGVsaW4gPGhlbGluLnpoYW5nQGludGVsLmNvbT47IFd1LCBKaW5namlu Zw0KPiA8amluZ2ppbmcud3VAaW50ZWwuY29tPjsgUmFzZXNoIE1vZHkgPHJhc2VzaC5tb2R5QHFs b2dpYy5jb20+OyBBaml0DQo+IEtoYXBhcmRlIDxhaml0LmtoYXBhcmRlQGJyb2FkY29tLmNvbT47 IFJhaHVsIExha2tpcmVkZHkNCj4gPHJhaHVsLmxha2tpcmVkZHlAY2hlbHNpby5jb20+OyBMdSwg V2Vuemh1byA8d2Vuemh1by5sdUBpbnRlbC5jb20+Ow0KPiBKYW4gTWVkYWxhIDxqYW5Ac2VtaWhh bGYuY29tPjsgSm9obiBEYWxleSA8am9obmRhbGVAY2lzY28uY29tPjsgQ2hlbiwNCj4gSmluZyBE IDxqaW5nLmQuY2hlbkBpbnRlbC5jb20+OyBBbmFueWV2LCBLb25zdGFudGluDQo+IDxrb25zdGFu dGluLmFuYW55ZXZAaW50ZWwuY29tPjsgTWF0ZWogVmlkbyA8bWF0ZWp2aWRvQGdtYWlsLmNvbT47 DQo+IEFsZWphbmRybyBMdWNlcm8gPGFsZWphbmRyby5sdWNlcm9AbmV0cm9ub21lLmNvbT47IFNv bnkgQ2hhY2tvDQo+IDxzb255LmNoYWNrb0BxbG9naWMuY29tPjsgSmVyaW4gSmFjb2INCj4gPGpl cmluLmphY29iQGNhdml1bW5ldHdvcmtzLmNvbT47IERlIExhcmEgR3VhcmNoLCBQYWJsbw0KPiA8 cGFibG8uZGUubGFyYS5ndWFyY2hAaW50ZWwuY29tPjsgT2xnYSBTaGVybiA8b2xnYXNAbWVsbGFu b3guY29tPg0KPiBTdWJqZWN0OiBSZTogW2RwZGstZGV2XSBbUkZDXSBHZW5lcmljIGZsb3cgZGly ZWN0b3IvZmlsdGVyaW5nL2NsYXNzaWZpY2F0aW9uDQo+IEFQSQ0KPiANCj4gSGkgU3VnZXNoLA0K PiANCj4gT24gVGh1LCBKdWwgMDcsIDIwMTYgYXQgMTE6MTU6MDdQTSArMDAwMCwgQ2hhbmRyYW4s IFN1Z2VzaCB3cm90ZToNCj4gPiBIaSBBZHJpZW4sDQo+ID4NCj4gPiBUaGFuayB5b3UgZm9yIHBy b3Bvc2luZyB0aGlzLiBJdCB3b3VsZCBiZSByZWFsbHkgdXNlZnVsIGZvciBhcHBsaWNhdGlvbiBz dWNoDQo+IGFzIE9WUy1EUERLLg0KPiA+IFBsZWFzZSBmaW5kIG15IGNvbW1lbnRzIGFuZCBxdWVz dGlvbnMgaW5saW5lIGJlbG93IHByZWZpeGVkIHdpdGgNCj4gW1N1Z2VzaF0uIE1vc3Qgb2YgdGhl bSBhcmUgZnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgZW5hYmxpbmcgdGhlc2UgQVBJcyBpbg0KPiBh cHBsaWNhdGlvbiBzdWNoIGFzIE9WUy1EUERLLg0KPiANCj4gVGhhbmtzLCBJJ20gcmVwbHlpbmcg YmVsb3cuDQo+IA0KPiA+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiA+IEZyb206 IGRldiBbbWFpbHRvOmRldi1ib3VuY2VzQGRwZGsub3JnXSBPbiBCZWhhbGYgT2YgQWRyaWVuDQo+ IE1hemFyZ3VpbA0KPiA+ID4gU2VudDogVHVlc2RheSwgSnVseSA1LCAyMDE2IDc6MTcgUE0NCj4g PiA+IFRvOiBkZXZAZHBkay5vcmcNCj4gPiA+IENjOiBUaG9tYXMgTW9uamFsb24gPHRob21hcy5t b25qYWxvbkA2d2luZC5jb20+OyBaaGFuZywgSGVsaW4NCj4gPiA+IDxoZWxpbi56aGFuZ0BpbnRl bC5jb20+OyBXdSwgSmluZ2ppbmcgPGppbmdqaW5nLnd1QGludGVsLmNvbT47IFJhc2VzaA0KPiA+ ID4gTW9keSA8cmFzZXNoLm1vZHlAcWxvZ2ljLmNvbT47IEFqaXQgS2hhcGFyZGUNCj4gPiA+IDxh aml0LmtoYXBhcmRlQGJyb2FkY29tLmNvbT47IFJhaHVsIExha2tpcmVkZHkNCj4gPiA+IDxyYWh1 bC5sYWtraXJlZGR5QGNoZWxzaW8uY29tPjsgTHUsIFdlbnpodW8NCj4gPHdlbnpodW8ubHVAaW50 ZWwuY29tPjsNCj4gPiA+IEphbiBNZWRhbGEgPGphbkBzZW1paGFsZi5jb20+OyBKb2huIERhbGV5 IDxqb2huZGFsZUBjaXNjby5jb20+Ow0KPiBDaGVuLA0KPiA+ID4gSmluZyBEIDxqaW5nLmQuY2hl bkBpbnRlbC5jb20+OyBBbmFueWV2LCBLb25zdGFudGluDQo+ID4gPiA8a29uc3RhbnRpbi5hbmFu eWV2QGludGVsLmNvbT47IE1hdGVqIFZpZG8gPG1hdGVqdmlkb0BnbWFpbC5jb20+Ow0KPiA+ID4g QWxlamFuZHJvIEx1Y2VybyA8YWxlamFuZHJvLmx1Y2Vyb0BuZXRyb25vbWUuY29tPjsgU29ueSBD aGFja28NCj4gPiA+IDxzb255LmNoYWNrb0BxbG9naWMuY29tPjsgSmVyaW4gSmFjb2INCj4gPiA+ IDxqZXJpbi5qYWNvYkBjYXZpdW1uZXR3b3Jrcy5jb20+OyBEZSBMYXJhIEd1YXJjaCwgUGFibG8N Cj4gPiA+IDxwYWJsby5kZS5sYXJhLmd1YXJjaEBpbnRlbC5jb20+OyBPbGdhIFNoZXJuIDxvbGdh c0BtZWxsYW5veC5jb20+DQo+ID4gPiBTdWJqZWN0OiBbZHBkay1kZXZdIFtSRkNdIEdlbmVyaWMg ZmxvdyBkaXJlY3Rvci9maWx0ZXJpbmcvY2xhc3NpZmljYXRpb24NCj4gQVBJDQo+ID4gPg0KDQo8 PDw8PC0tLS1TbmlwcGVkIG91dCAtLS0tPj4+Pj4NCj4gPiA+IEZsb3cgZGlyZWN0b3INCj4gPiA+ IC0tLS0tLS0tLS0tLS0NCj4gPiA+DQo+ID4gPiBGbG93IGRpcmVjdG9yIChGRElSKSBpcyB0aGUg bmFtZSBvZiB0aGUgbW9zdCBjYXBhYmxlIGZpbHRlciB0eXBlLCB3aGljaA0KPiA+ID4gY292ZXJz IG1vc3QgZmVhdHVyZXMgb2ZmZXJlZCBieSBvdGhlcnMuIEFzIHN1Y2gsIGl0IGlzIHRoZSBtb3N0 DQo+IHdpZGVzcHJlYWQNCj4gPiA+IGluIFBNRHMgdGhhdCBzdXBwb3J0IGZpbHRlcmluZyAoaS5l LiBhbGwgb2YgdGhlbSBiZXNpZGVzICoqZTEwMDAqKikuDQo+ID4gPg0KPiA+ID4gSXQgaXMgYWxz byB0aGUgb25seSB0eXBlIHRoYXQgYWxsb3dzIGFuIGFyYml0cmFyeSAzMiBiaXRzIHZhbHVlIHBy b3ZpZGVkIGJ5DQo+ID4gPiBhcHBsaWNhdGlvbnMgdG8gYmUgYXR0YWNoZWQgdG8gYSBmaWx0ZXIg YW5kIHJldHVybmVkIHdpdGggbWF0Y2hpbmcgcGFja2V0cw0KPiA+ID4gaW5zdGVhZCBvZiByZWx5 aW5nIG9uIHRoZSBkZXN0aW5hdGlvbiBxdWV1ZSB0byByZWNvZ25pemUgZmxvd3MuDQo+ID4gPg0K PiA+ID4gVW5mb3J0dW5hdGVseSwgZXZlbiBGRElSIHJlcXVpcmVzIGFwcGxpY2F0aW9ucyB0byBi ZSBhd2FyZSBvZiBsb3ctbGV2ZWwNCj4gPiA+IGNhcGFiaWxpdGllcyBhbmQgbGltaXRhdGlvbnMg KG1vc3Qgb2Ygd2hpY2ggY29tZSBkaXJlY3RseSBmcm9tICoqaXhnYmUqKg0KPiBhbmQNCj4gPiA+ ICoqaTQwZSoqKToNCj4gPiA+DQo+ID4gPiAtIEJpdG1hc2tzIGFyZSBzZXQgZ2xvYmFsbHkgcGVy IGRldmljZSAocG9ydD8pLCBub3QgcGVyIGZpbHRlci4NCj4gPiBbU3VnZXNoXSBUaGlzIG1lYW5z IGFwcGxpY2F0aW9uIGNhbm5vdCBkZWZpbmUgZmlsdGVycyB0aGF0IG1hdGNoZXMgb24NCj4gYXJi aXRyYXJ5IGRpZmZlcmVudCBvZmZzZXRzPw0KPiA+IElmIHRoYXTigJlzIHRoZSBjYXNlLCBJIGFz c3VtZSB0aGUgYXBwbGljYXRpb24gaGFzIHRvIHByb2dyYW0gYml0bWFzayBpbg0KPiBhZHZhbmNl LiBPdGhlcndpc2UgaG93DQo+ID4gdGhlIEFQSSBmcmFtZXdvcmsgZGVkdWNlIHRoaXMgYml0bWFz ayBpbmZvcm1hdGlvbiBmcm9tIHRoZSBydWxlcz8/IEl0cw0KPiBub3QgdmVyeSBjbGVhciB0byBt ZQ0KPiA+IHRoYXQgaG93IGFwcGxpY2F0aW9uIHBhc3MgZG93biB0aGUgYml0bWFzayBpbmZvcm1h dGlvbiBmb3IgbXVsdGlwbGUgZmlsdGVycw0KPiBvbiBzYW1lIHBvcnQ/DQo+IA0KPiBUaGlzIGlz IG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IGZsb3cgZGlyZWN0b3IgY3VycmVudGx5IHdvcmtzLCBw ZXJoYXBzDQo+IHNvbWVvbWUgbW9yZSBmYW1pbGlhciB3aXRoIGl0IGNhbiBhbnN3ZXIgdGhpcyBx dWVzdGlvbiBiZXR0ZXIgdGhhbiBJIGNvdWxkLg0KPiANCj4gTGV0IG1lIHRha2UgYW4gZXhhbXBs ZSwgaWYgcGFydGljdWxhciBkZXZpY2UgY2FuIG9ubHkgaGFuZGxlIGEgc2luZ2xlIElQdjQNCj4g bWFzayBjb21tb24gdG8gYWxsIGZsb3cgcnVsZXMgKHNheSBvbmx5IHRvIG1hdGNoIGRlc3RpbmF0 aW9uIGFkZHJlc3NlcyksDQo+IHVwZGF0aW5nIHRoYXQgbWFzayB0byBhbHNvIG1hdGNoIHRoZSBz b3VyY2UgYWRkcmVzcyBhZmZlY3RzIGFsbCBkZWZpbmVkIGFuZA0KPiBmdXR1cmUgZmxvdyBydWxl cyBzaW11bHRhbmVvdXNseS4NCj4gDQo+IFRoYXQgaXMgaG93IEZESVIgY3VycmVudGx5IHdvcmtz IGFuZCBJIHRoaW5rIGl0IGlzIHdyb25nLCBhcyBpdCBwZW5hbGl6ZXMNCj4gZGV2aWNlcyB0aGF0 IGRvIHN1cHBvcnQgaW5kaXZpZHVhbCBiaXQtbWFza3MgcGVyIHJ1bGUsIGFuZCBpcyBhIGxpdHRs ZQ0KPiBhd2t3YXJkIGZyb20gYW4gYXBwbGljYXRpb24gcG9pbnQgb2Ygdmlldy4NCj4gDQo+IFdo YXQgSSBzdWdnZXN0IGZvciB0aGUgbmV3IEFQSSBpbnN0ZWFkIGlzIHRoZSBhYmlsaXR5IHRvIHNw ZWNpZnkgb25lDQo+IGJpdC1tYXNrIHBlciBydWxlLCBhbmQgbGV0IHRoZSBQTUQgZGVhbCB3aXRo IEhXIGxpbWl0YXRpb25zIGJ5IGF1dG9tYXRpY2FsbHkNCj4gY29uZmlndXJpbmcgZ2xvYmFsIGJp dG1hc2tzIGZyb20gdGhlIGZpcnN0IGFkZGVkIHJ1bGUsIHRoZW4gcmVmdXNpbmcgdG8gYWRkDQo+ IHN1YnNlcXVlbnQgcnVsZXMgaWYgdGhleSBzcGVjaWZ5IGEgY29uZmxpY3RpbmcgYml0LW1hc2su IEV4aXN0aW5nIHJ1bGVzDQo+IHJlbWFpbiB1bmFmZmVjdGVkIHRoYXQgd2F5LCBhbmQgYXBwbGlj YXRpb25zIGRvIG5vdCBoYXZlIHRvIGJlIGV4dHJhDQo+IGNhdXRpb3VzLg0KPiANCltTdWdlc2hd IFRoZSBpc3N1ZSB3aXRoIHRoYXQgYXBwcm9hY2ggaXMsIHRoZSBoYXJkd2FyZSBzaW1wbHkgZGlz Y2FyZHMgdGhlIHJ1bGUNCndoZW4gaXQgaXMgYSBzdXBlciBzZXQgb2YgZmlyc3Qgb25lIGV2ZW50 aG91Z2ggdGhlIGhhcmR3YXJlIGlzIGNhcGFibGUgb2YgDQpoYW5kbGluZyBpdC4gSG93IGl0cyBn dWFyYW50ZWVkIHRoZSBmaXJzdCBydWxlIHdpbGwgc2V0IHRoZSBiaXRtYXNrIGZvciBhbGwgdGhl DQpzdWJzZXF1ZW50IHJ1bGVzLiANCkhvdyBhYm91dCBoYXZpbmcgYSBDTEFTU0lGRVJfVFlQRSBm b3IgdGhlIGNsYXNzaWZpZXIuIEV2ZXJ5IHBvcnQgY2FuIGhhdmUgDQpzZXQgb2Ygc3VwcG9ydGVk IGZsb3cgdHlwZXMoZm9yIGVnOiBMM19UWVBFLCBMNF9UWVBFLCBMNF9UWVBFXzhCWVRFX0ZMRVgs DQpMNF9UWVBFXzE2QllURV9GTEVYKSBiYXNlZCBvbiB0aGUgdW5kZXJseWluZyBGRElSIHN1cHBv cnQuIEFwcGxpY2F0aW9uIGNhbiBxdWVyeSANCnRoaXMgYW5kIHNldCB0aGUgdHlwZSBhY2NvcmRp bmdseSB3aGlsZSBpbml0aWFsaXppbmcgdGhlIHBvcnQuIFRoaXMgd2F5IHRoZSBmaXJzdCBydWxl IG5lZWQgDQpub3Qgc2V0IGFsbCB0aGUgYml0cyB0aGF0IG1heSBuZWVkZWQgaW4gdGhlIGZ1dHVy ZSBydWxlcy4gDQogDQo+ID4gPiBgYFBBU1NUSFJVYGANCj4gPiA+IF5eXl5eXl5eXl5eXg0KPiA+ ID4NCj4gPiA+IExlYXZlcyBwYWNrZXRzIHVwIGZvciBhZGRpdGlvbmFsIHByb2Nlc3NpbmcgYnkg c3Vic2VxdWVudCBmbG93IHJ1bGVzLg0KPiBUaGlzDQo+ID4gPiBpcyB0aGUgZGVmYXVsdCB3aGVu IGEgcnVsZSBkb2VzIG5vdCBjb250YWluIGEgdGVybWluYXRpbmcgYWN0aW9uLCBidXQgY2FuDQo+ IGJlDQo+ID4gPiBzcGVjaWZpZWQgdG8gZm9yY2UgYSBydWxlIHRvIGJlY29tZSBub24tdGVybWlu YXRpbmcuDQo+ID4gPg0KPiA+ID4gLSBObyBjb25maWd1cmFibGUgcHJvcGVydHkuDQo+ID4gPg0K PiA+ID4gKy0tLS0tLS0tLS0tLS0tLSsNCj4gPiA+IHwgUEFTU1RIUlUgICAgICB8DQo+ID4gPiAr PT09PT09PT09PT09PT09Kw0KPiA+ID4gfCBubyBwcm9wZXJ0aWVzIHwNCj4gPiA+ICstLS0tLS0t LS0tLS0tLS0rDQo+ID4gPg0KPiA+ID4gRXhhbXBsZSB0byBjb3B5IGEgcGFja2V0IHRvIGEgcXVl dWUgYW5kIGNvbnRpbnVlIHByb2Nlc3NpbmcgYnkNCj4gc3Vic2VxdWVudA0KPiA+ID4gZmxvdyBy dWxlczoNCj4gPiBbU3VnZXNoXSBJZiBhIHBhY2tldCBnZXQgY29waWVkIHRvIGEgcXVldWUsIGl0 4oCZcyBhIHRlcm1pbmF0aW9uIGFjdGlvbi4NCj4gPiBIb3cgY2FuIGl0cyBwb3NzaWJsZSB0byBk byBzdWJzZXF1ZW50IGFjdGlvbiBhZnRlciB0aGUgcGFja2V0IGFscmVhZHkNCj4gPiBtb3ZlZCB0 byB0aGUgcXVldWUuID9Ib3cgaXQgZGlmZmVycyBmcm9tIERVUCBhY3Rpb24/DQo+ID4gIEFtIEkg bWlzc2luZyBhbnl0aGluZyBoZXJlPw0KPiANCj4gRGV2aWNlcyBtYXkgbm90IHN1cHBvcnQgdGhl IGNvbWJpbmF0aW9uIG9mIFFVRVVFICsgUEFTU1RIUlUgKGkuZS4gbWFraW5nDQo+IFFVRVVFIG5v bi10ZXJtaW5hdGluZykuIEhvd2V2ZXIgdGhlc2Ugc2FtZSBkZXZpY2VzIG1heSBleHBvc2UgdGhl DQo+IGFiaWxpdHkgdG8NCj4gY29weSBhIHBhY2tldCB0byBhbm90aGVyIChzbmlmZmVyKSBxdWV1 ZSBhbGwgd2hpbGUga2VlcGluZyB0aGUgcnVsZQ0KPiB0ZXJtaW5hdGluZyAoUVVFVUUgKyBEVVAg YnV0IG5vIFBBU1NUSFJVKS4NCj4gDQo+IERVUCB3aXRoIHR3byBydWxlcywgYXNzdW1pbmcgcHJp b3J0aWVzIGFuZCBQQVNTVFJIVSBhcmUgc3VwcG9ydGVkOg0KPiANCj4gLSBwYXR0ZXJuIFgsIHBy aW9yaXR5IDA7IGFjdGlvbnM6IFFVRVVFIDUsIFBBU1NUSFJVIChub24tdGVybWluYXRpbmcpDQo+ IA0KPiAtIHBhdHRlcm4gWCwgcHJpb3JpdHkgMTsgYWN0aW9uczogUVVFVUUgNiAodGVybWluYXRp bmcpDQo+IA0KPiBEVVAgd2l0aCB0d28gYWN0aW9ucyBvbiBhIHNpbmdsZSBydWxlIGFuZCBhIHNp bmdsZSBwcmlvcml0eToNCj4gDQo+IC0gcGF0dGVybiBYLCBwcmlvcml0eSAwOyBhY3Rpb25zOiBE VVAgNSwgUVVFVUUgNiAodGVybWluYXRpbmcpDQo+IA0KPiBJZiBzdXBwb3J0ZWQsIGZyb20gYW4g YXBwbGljYXRpb24gcG9pbnQgb2YgdmlldyB0aGUgZW5kIHJlc3VsdCBpcyBzaW1pbGFyIGluDQo+ IGJvdGggY2FzZXMgKG5vdGUgdGhlIHNlY29uZCBjYXNlIG1heSBiZSBpbXBsZW1lbnRlZCBieSB0 aGUgUE1EIHVzaW5nDQo+IHR3byBIVw0KPiBydWxlcyBpbnRlcm5hbGx5KS4NCj4gDQo+IEhvd2V2 ZXIgdGhlIHNlY29uZCBjYXNlIGRvZXMgbm90IHdhc3RlIGEgcHJpb3JpdHkgbGV2ZWwgYW5kIGNs ZWFybHkgc3RhdGVzDQo+IHRoZSBpbnRlbnQgdG8gdGhlIFBNRCB3aGljaCBpcyBtb3JlIGxpa2Vs eSB0byBiZSBzdXBwb3J0ZWQuIElmIEhXIHN1cHBvcnRzDQo+IERVUCBkaXJlY3RseSBpdCBpcyBl dmVuIGZhc3RlciBzaW5jZSB0aGVyZSBpcyBhIHNpbmdsZSBydWxlLiBUaGF0IGlzIHdoeSBJDQo+ IHRob3VnaHQgaGF2aW5nIERVUCBhcyBhbiBhY3Rpb24gd291bGQgYmUgdXNlZnVsLg0KW1N1Z2Vz aF0gVGhhbmsgeW91IGZvciB0aGUgY2xhcmlmaWNhdGlvbi4gSXQgbWFrZSBzZW5zZSB0byBtZSBu b3cuDQo+IA0KPiA+ID4gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KPiA+ID4gfCBDb3B5 IHRvIHF1ZXVlIDggICAgICAgICAgfA0KPiA+ID4gKz09PT09PT09PT0rPT09PT09PT09PT09PT09 Kw0KPiA+ID4gfCBQQVNTVEhSVSB8ICAgICAgICAgICAgICAgfA0KPiA+ID4gKy0tLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tKw0KPiA+ID4gfCBRVUVVRSAgICB8IGBgcXVldWVgYCB8IDggfA0KPiA+ ID4gKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tKw0KPiA+ID4NCj4gPiA+IGBgSURgYA0KPiA+ ID4gXl5eXl5eDQo+ID4gPg0KPiA+ID4gQXR0YWNoZXMgYSAzMiBiaXQgdmFsdWUgdG8gcGFja2V0 cy4NCj4gPiA+DQo+ID4gPiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSsNCj4gPiA+IHwgSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfA0KPiA+ID4gKz09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0rDQo+ID4gPiB8IGBgaWRgYCB8IDMyIGJpdCB2YWx1ZSB0byByZXR1cm4gd2l0aCBwYWNr ZXRzIHwNCj4gPiA+ICstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKw0KPiA+ID4NCj4gPiBbU3VnZXNoXSBJIGFzc3VtZSB0aGUgYXBwbGljYXRpb24gaGFzIHRv IHByb2dyYW0gdGhlIGZsb3cNCj4gPiB3aXRoIGEgdW5pcXVlIElEIGFuZCBtYXRjaGluZyBwYWNr ZXRzIGFyZSBzdGFtcGVkIHdpdGggdGhpcyBJRA0KPiA+IHdoZW4gcmVwb3J0aW5nIHRvIHRoZSBz b2Z0d2FyZS4gVGhlIHVuaXF1ZW5lc3Mgb2YgSUQgaXMgTk9UDQo+ID4gZ3VhcmFudGVlZCBieSB0 aGUgQVBJIGZyYW1ld29yay4gQ29ycmVjdCBtZSBpZiBJIGFtIHdyb25nIGhlcmUuDQo+IA0KPiBZ b3UgYXJlIHJpZ2h0LCBpZiB0aGUgd2F5IEkgd3JvdGUgaXQgaXMgbm90IGNsZWFyIGVub3VnaCwg SSdtIG9wZW4gdG8NCj4gc3VnZ2VzdGlvbnMgdG8gaW1wcm92ZSBpdC4NCltTdWdlc2hdIEkgZ3Vl c3MgaXRzIGZpbmUgYW5kIHdvdWxkIGxpa2UgdG8gY29uZmlybSB0aGUgc2FtZS4gUGVyaGFwcw0K aXQgd291bGQgYmUgbmljZSB0byBtZW50aW9uIHRoYXQgdGhlIElEcyBhcmUgYXBwbGljYXRpb24g ZGVmaW5lZC4NCg0KPiANCj4gPiBbU3VnZXNoXSBJcyBpdCBhIGxpbWl0YXRpb24gdG8gdXNlIG9u bHkgMzIgYml0IElEPyBJcyBpdCBwb3NzaWJsZSB0byBoYXZlIGENCj4gPiA2NCBiaXQgSUQ/IFNv IHRoYXQgYXBwbGljYXRpb24gY2FuIHVzZSB0aGUgY29udHJvbCBwbGFuZSBmbG93IHBvaW50ZXIN Cj4gPiBJdHNlbGYgYXMgYW4gSUQuIERvZXMgaXQgbWFrZSBzZW5zZT8NCj4gDQo+IEkndmUgc3Bl Y2lmaWVkIGEgMzIgYml0IElEIGZvciBub3cgYmVjYXVzZSB0aGlzIGlzIHdoYXQgRkRJUiBzdXBw b3J0cyBhbmQNCj4gYWxzbyB3aGF0IGV4aXN0aW5nIGRldmljZXMgY2FuIHJlcG9ydCB0b2RheSBB RkFJSyAoaTQwZSBhbmQgbWx4NSkuDQo+IA0KPiBXZSBjb3VsZCB1c2UgNjQgYml0IGZvciBmdXR1 cmUtcHJvb2ZuZXNzIGluIGEgc2VwYXJhdGUgYWN0aW9uIGxpa2UgIklENjQiDQo+IHdoZW4gYXQg bGVhc3Qgb25lIGRldmljZSBzdXBwb3J0cyBpdC4NCj4gDQo+IFRvIFBNRCBtYWludGFpbmVyczog cGxlYXNlIGNvbW1lbnQgaWYgeW91IGtub3cgZGV2aWNlcyB0aGF0IHN1cHBvcnQNCj4gdGFnZ2lu Zw0KPiBtYXRjaGluZyBwYWNrZXRzIHdpdGggbW9yZSB0aGFuIDMyIGJpdHMgb2YgdXNlci1wcm92 aWRlZCBkYXRhIQ0KW1N1Z2VzaF0gSSBndWVzcyB0aGUgZmxvdyBkaXJlY3RvciBJRCBpcyA2NCBi aXQgLCBUaGUgWEw3MTAgZGF0YXNoZWV0IHNheXMgc28uDQpBbmQgaW4gdGhlICdydGVfbWJ1Zicg c3RydWN0dXJlIHRoZSA2NCBiaXQgRkRJUi1JRCBpcyBzaGFyZWQgd2l0aCByc3MgaGFzaC4gVGhp cyBjYW4gYmUNCmEgc29mdHdhcmUgZHJpdmVyIGxpbWl0YXRpb24gdGhhdCBleHBvc2Ugb25seSAz MiBiaXQuIFBvc3NpYmx5IGJlY2F1c2Ugb2YgY2FjaGUgDQphbGlnbm1lbnQgaXNzdWVzPyBTaW5j ZSB0aGUgaGFyZHdhcmUgY2FuIHN1cHBvcnQgNjQgYml0LCBJIGZlZWwgaXQgbWFrZSBzZW5zZSAN CnRvIHN1cHBvcnQgNjQgYml0IGFzIHdlbGwuDQo+IA0KPiA+ID4gLi4gcmF3OjogcGRmDQo+ID4g Pg0KPiA+ID4gICAgUGFnZUJyZWFrDQo+ID4gPg0KPiA+ID4gYGBRVUVVRWBgDQo+ID4gPiBeXl5e Xl5eXl4NCj4gPiA+DQo+ID4gPiBBc3NpZ25zIHBhY2tldHMgdG8gYSBnaXZlbiBxdWV1ZSBpbmRl eC4NCj4gPiA+DQo+ID4gPiAtIFRlcm1pbmF0aW5nIGJ5IGRlZmF1bHQuDQo+ID4gPg0KPiA+ID4g Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KPiA+ID4gfCBRVUVVRSAgICAgICAg ICAgICAgICAgICAgICAgICAgfA0KPiA+ID4gKz09PT09PT09PT09Kz09PT09PT09PT09PT09PT09 PT09Kw0KPiA+ID4gfCBgYHF1ZXVlYGAgfCBxdWV1ZSBpbmRleCB0byB1c2UgfA0KPiA+ID4gKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KPiA+ID4NCj4gPiA+IGBgRFJPUGBgDQo+ ID4gPiBeXl5eXl5eXg0KPiA+ID4NCj4gPiA+IERyb3AgcGFja2V0cy4NCj4gPiA+DQo+ID4gPiAt IE5vIGNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4NCj4gPiA+IC0gVGVybWluYXRpbmcgYnkgZGVmYXVs dC4NCj4gPiA+IC0gUEFTU1RIUlUgb3ZlcnJpZGVzIHRoaXMgYWN0aW9uIGlmIGJvdGggYXJlIHNw ZWNpZmllZC4NCj4gPiA+DQo+ID4gPiArLS0tLS0tLS0tLS0tLS0tKw0KPiA+ID4gfCBEUk9QICAg ICAgICAgIHwNCj4gPiA+ICs9PT09PT09PT09PT09PT0rDQo+ID4gPiB8IG5vIHByb3BlcnRpZXMg fA0KPiA+ID4gKy0tLS0tLS0tLS0tLS0tLSsNCj4gPiA+DQo+ID4gPiBgYENPVU5UYGANCj4gPiA+ IF5eXl5eXl5eXg0KPiA+ID4NCj4gPiBbU3VnZXNoXSBTaG91bGQgd2UgcmVhbGx5IGhhdmUgdG8g c2V0IGNvdW50IGFjdGlvbiBleHBsaWNpdGx5IGZvciBldmVyeSBydWxlPw0KPiA+IElNSE8gaXQg d291bGQgYmUgZ3JlYXQgdG8gYmUgYW4gaW1wbGljaXQgYWN0aW9uLiBNb3N0IG9mIHRoZSBhcHBs aWNhdGlvbg0KPiB3b3VsZCBiZQ0KPiA+IGludGVyZXN0ZWQgaW4gdGhlIHN0YXRzIG9mIGFsbW9z dCBhbGwgdGhlIGZpbHRlcnMvZmxvd3MgLg0KPiANCj4gSSBjYW4gc2VlIHdoeSwgYnV0IG5vLCBp dCBtdXN0IGJlIGV4cGxpY2l0bHkgcmVxdWVzdGVkIGJlY2F1c2UgeW91IG1heSB3YW50DQo+IHRv IGtub3cgaW4gYWR2YW5jZSB3aGVuIGl0IGlzIG5vdCBzdXBwb3J0ZWQuIEFsc28gY29uc2lkZXJp bmcgaXQgaXMNCj4gc29tZXRoaW5nIGVsc2UgdG8gYmUgZG9uZSBieSBIVyAoYSBzZXBhcmF0ZSBh Y3Rpb24pLCB3ZSBjYW4gYXNzdW1lDQo+IGVuYWJsaW5nDQo+IHRoaXMgbWF5IHNsb3cgdGhpbmdz IGRvd24gYSBiaXQuDQo+IA0KPiBIVyBsaW1pdGF0aW9ucyBtYXkgYWxzbyBwcmV2ZW50IHlvdSBm cm9tIGhhdmluZyBhcyBtYW55IGZsb3cgY291bnRlcnMgYXMNCj4geW91DQo+IHdhbnQsIGluIHdo aWNoIGNhc2UgeW91IHByb2JhYmx5IHdhbnQgdG8gY2FyZWZ1bGx5IHBpY2sgd2hpY2ggcnVsZXMg aGF2ZQ0KPiB0aGVtLg0KPiANCj4gSSB0aGluayB0aGlzIHRhcmdldCBpcyBtb3N0IHVzZWZ1bCB3 aXRoIERST1AsIFZGIGFuZCBQRiBhY3Rpb25zIHNpbmNlDQo+IHRob3NlIGFyZSBjdXJyZW50bHkg dGhlIG9ubHkgb25lcyB3aGVyZSBTVyBtYXkgbm90IHNlZSB0aGUgcmVsYXRlZA0KPiBwYWNrZXRz Lg0KPiANCltTdWdlc2hdIEFncmVlZCBhbmQgdGhhbmtzIGZvciB0aGUgY2xhcmlmaWNhdGlvbi4N Cg0KPiA+ID4gRW5hYmxlcyBoaXRzIGNvdW50ZXIgZm9yIHRoaXMgcnVsZS4NCj4gPiA+DQo+ID4g PiBUaGlzIGNvdW50ZXIgY2FuIGJlIHJldHJpZXZlZCBhbmQgcmVzZXQgdGhyb3VnaCBgYHJ0ZV9m bG93X3F1ZXJ5KClgYCwgc2VlDQo+ID4gPiBgYHN0cnVjdCBydGVfZmxvd19xdWVyeV9jb3VudGBg Lg0KPiA+ID4NCj4gPiA+IC0gQ291bnRlcnMgY2FuIGJlIHJldHJpZXZlZCB3aXRoIGBgcnRlX2Zs b3dfcXVlcnkoKWBgLg0KPiA+ID4gLSBObyBjb25maWd1cmFibGUgcHJvcGVydHkuDQo+ID4gPg0K PiA+ID4gKy0tLS0tLS0tLS0tLS0tLSsNCj4gPiA+IHwgQ09VTlQgICAgICAgICB8DQo+ID4gPiAr PT09PT09PT09PT09PT09Kw0KPiA+ID4gfCBubyBwcm9wZXJ0aWVzIHwNCj4gPiA+ICstLS0tLS0t LS0tLS0tLS0rDQo+ID4gPg0KPiA+ID4gUXVlcnkgc3RydWN0dXJlIHRvIHJldHJpZXZlIGFuZCBy ZXNldCB0aGUgZmxvdyBydWxlIGhpdHMgY291bnRlcjoNCj4gPiA+DQo+ID4gPiArLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KPiA+ID4gfCBDT1VOVCBx dWVyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCj4gPiA+ICs9PT09PT09 PT09PSs9PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rDQo+ID4gPiB8IGBgcmVz ZXRgYCB8IGluICB8IHJlc2V0IGNvdW50ZXIgYWZ0ZXIgcXVlcnkgICAgfA0KPiA+ID4gKy0tLS0t LS0tLS0tKy0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCj4gPiA+IHwgYGBo aXRzYGAgIHwgb3V0IHwgbnVtYmVyIG9mIGhpdHMgZm9yIHRoaXMgZmxvdyB8DQo+ID4gPiArLS0t LS0tLS0tLS0rLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KPiA+ID4NCjw8 PDw8PDw8U25pcHBlZCBvdXQgPj4+Pg0KPiA+ID4gOjoNCj4gPiA+DQo+ID4gPiAgc3RydWN0IHJ0 ZV9mbG93ICoNCj4gPiA+ICBydGVfZmxvd19jcmVhdGUodWludDhfdCBwb3J0X2lkLA0KPiA+ID4g ICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgcnRlX2Zsb3dfcGF0dGVybiAqcGF0dGVybiwN Cj4gPiA+ICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHJ0ZV9mbG93X2FjdGlvbnMgKmFj dGlvbnMpOw0KPiA+ID4NCj4gPiA+IEFyZ3VtZW50czoNCj4gPiA+DQo+ID4gPiAtIGBgcG9ydF9p ZGBgOiBwb3J0IGlkZW50aWZpZXIgb2YgRXRoZXJuZXQgZGV2aWNlLg0KPiA+ID4gLSBgYHBhdHRl cm5gYDogcGF0dGVybiBzcGVjaWZpY2F0aW9uIHRvIGFkZC4NCj4gPiA+IC0gYGBhY3Rpb25zYGA6 IGFjdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBmbG93IGRlZmluaXRpb24uDQo+ID4gPg0KPiA+ ID4gUmV0dXJuIHZhbHVlOg0KPiA+ID4NCj4gPiA+IEEgdmFsaWQgZmxvdyBwb2ludGVyIGluIGNh c2Ugb2Ygc3VjY2VzcywgTlVMTCBvdGhlcndpc2UgYW5kIGBgcnRlX2Vycm5vYGAgaXMNCj4gPiA+ IHNldCB0byB0aGUgcG9zaXRpdmUgdmVyc2lvbiBvZiBvbmUgb2YgdGhlIGVycm9yIGNvZGVzIGRl ZmluZWQgZm9yDQo+ID4gPiBgYHJ0ZV9mbG93X3ZhbGlkYXRlKClgYC4NCj4gPiBbU3VnZXNoXSA6 IEtpbmQgb2YgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgcXVlcnkuIFdoYXQgaWYgYXBwbGljYXRp b24NCj4gPiB0cnkgdG8gYWRkIGR1cGxpY2F0ZSBydWxlcz8gRG9lcyB0aGUgQVBJIGNyZWF0ZSBu ZXcgZmxvdyBlbnRyeSBmb3IgZXZlcnkNCj4gPiBBUEkgY2FsbD8NCj4gDQo+IElmIGFuIGFwcGxp Y2F0aW9uIGFkZHMgZHVwbGljYXRlIHJ1bGVzIGF0IGEgZ2l2ZW4gcHJpb3JpdHkgbGV2ZWwsIHRo ZSBzZWNvbmQNCj4gb25lIG1heSByZXR1cm4gYW4gZXJyb3IgZGVwZW5kaW5nIG9uIHRoZSBQTUQu IENvbGxpc2lvbnMgYXJlIHNvbWV0aW1lcw0KPiB0cml2aWFsIHRvIGRldGVjdCAoc3VjaCBhcyB0 aGUgc2FtZSBwYXR0ZXJuIHR3aWNlKSwgb3RoZXJzIG5vdCBzbyBtdWNoIChvbmUNCj4gbWF0Y2hp bmcgYW4gRXRoZXJuZXQgaGVhZGVyIG9ubHksIHRoZSBvdGhlciBvbmUgbWF0Y2hpbmcgYW4gSVAg aGVhZGVyDQo+IG9ubHkpLg0KPiANCj4gRWl0aGVyIHdheSBpZiBhIHBhY2tldCBpcyBtYXRjaGVk IGJ5IHR3byBydWxlcyBhdCBhIGdpdmVuIHByaW9yaXR5IGxldmVsLA0KPiB3aGF0IGhhcHBlbnMg aXMgZGVzY3JpYmVkIGluIDMuMyAoSGlnaCBsZXZlbCBkZXNpZ24pIGFuZCA0LjQuMSAoUHJpb3Jp dGllcykuDQo+IA0KPiBBcHBsaWNhdGlvbnMgYXJlIHJlc3BvbnNpYmxlIGZvciBub3QgcmVseWlu ZyBvbiB0aGUgUE1EIHRvIGRldGVjdCB0aGVzZSwgb3INCj4gc2hvdWxkIHVzZSBhIHNpbmdsZSBw cmlvcml0eSBsZXZlbCBmb3IgZWFjaCBydWxlIHRvIG1ha2UgdGhpbmdzIGNsZWFyLg0KPiANCj4g SG93ZXZlciBzaW5jZSB0aGUgbnVtYmVyIG9mIEhXIHByaW9yaXR5IGxldmVscyBpcyBmaW5pdGUg YW5kIHBvc3NpYmx5IHNtYWxsLA0KPiB0aGV5IG11c3QgYWxzbyBtYWtlIHN1cmUgbm90IHRvIHdh c3RlIHRoZW0uIE15IGFkdmljZSBpcyB0byBvbmx5IHVzZQ0KPiBwcmlvcml0eSBsZXZlbHMgd2hl biBpdCBjYW5ub3QgYmUgcHJvdmVuIHRoYXQgcnVsZXMgZG8gbm90IGNvbGxpZGUuDQo+IA0KPiBJ ZiBhbGwgeW91IGhhdmUgaXMgcGVyZmVjdCBtYXRjaGluZyBydWxlcyB3aXRob3V0IHdpbGRjYXJk cyBhbmQgYWxsIG9mIHRoZW0NCj4gbWF0Y2ggdGhlIHNhbWUgbnVtYmVyIG9mIGxheWVycywgYSBz aW5nbGUgcHJpb3JpdHkgbGV2ZWwgaXMgZmluZS4NCj4gDQpbU3VnZXNoXSBNYWtlIHNlbnNlLiBJ dHMgZmluZSBmcm9tIG15IHByZXNwZWN0aXZlLg0KPiA+IFtTdWdlc2hdIEFub3RoZXIgY29uY2Vy biBpcyB0aGUgY29zdCBhbmQgdGltZSBvZiBpbnN0YWxsaW5nIHRoZXNlIHJ1bGVzDQo+ID4gaW4g dGhlIGhhcmR3YXJlLiBDYW4gd2UgbWFrZSB0aGVzZSBBUElzIHRpbWUgYm91bmQob3IgYXQgbGVh c3QgYW4gb3B0aW9uDQo+IHRvDQo+ID4gc2V0IHRoZSB0aW1lIGxpbWl0IHRvIGV4ZWN1dGUgdGhl c2UgQVBJcyksIHNvIHRoYXQNCj4gPiBBcHBsaWNhdGlvbiBkb2VzbuKAmXQgaGF2ZSB0byB3YWl0 IHNvIGxvbmcgd2hlbiBpbnN0YWxsaW5nIGFuZCBkZWxldGluZyBmbG93cw0KPiB3aXRoDQo+ID4g c2xvdyBoYXJkd2FyZS9OSUMuIFdoYXQgZG8geW91IHRoaW5rPyBNb3N0IG9mIHRoZSBkYXRhcGF0 aCBmbG93DQo+IGluc3RhbGxhdGlvbnMgYXJlDQo+ID4gZHluYW1pYyBhbmQgdHJpZ2dlcmVkIG9u bHkgd2hlbiB0aGVyZSBpcw0KPiA+IGFuIGluZ3Jlc3MgdHJhZmZpYy4gRGVsYXkgaW4gZmxvdyBp bnNlcnRpb24vZGVsZXRpb24gaGF2ZSB1bnByZWRpY3RhYmxlDQo+IGNvbnNlcXVlbmNlcy4NCj4g DQo+IFRoaXMgQVBJIGlzIChjdXJyZW50bHkpIGFpbWVkIGF0IHRoZSBjb250cm9sIHBhdGggb25s eSwgYW5kIG11c3QgaW5kZWVkIGJlDQo+IGFzc3VtZWQgdG8gYmUgc2xvdy4gQ3JlYXRpbmcgbWls bGlvbiBvZiBydWxlcyBtYXkgdGFrZSBxdWl0ZSBsb25nIGFzIGl0IG1heQ0KPiBpbnZvbHZlIHN5 c2NhbGxzIGFuZCBvdGhlciB0aW1lLWNvbnN1bWluZyBzeW5jaHJvbml6YXRpb24gdGhpbmdzIG9u IHRoZQ0KPiBQTUQNCj4gc2lkZS4NCj4gDQo+IFNvIGN1cnJlbnRseSB0aGVyZSBpcyBubyBwbGFu IHRvIGhhdmUgcnVsZXMgYWRkZWQgZnJvbSB0aGUgZGF0YSBwYXRoIHdpdGgNCj4gdGltZSBjb25z dHJhaW50cy4gSSB0aGluayBpdCB3b3VsZCBiZSBpbXBsZW1lbnRlZCB0aHJvdWdoIGEgZGlmZmVy ZW50IHNldCBvZg0KPiBmdW5jdGlvbnMgYW55d2F5Lg0KPiANCj4gSSBkbyBub3QgdGhpbmsgYWRk aW5nIHRpbWUgbGltaXRzIGlzIHByYWN0aWNhbCwgZXZlbiBzcGVjaWZ5aW5nIGluIHRoZSBBUEkN Cj4gdGhhdCBjcmVhdGluZyBhIHNpbmdsZSBmbG93IHJ1bGUgbXVzdCB0YWtlIGxlc3MgdGhhbiBh IG1heGltdW0gbnVtYmVyIG9mDQo+IHNlY29uZHMgaW4gb3JkZXIgdG8gYmUgZWZmZWN0aXZlIGlz IHRvbyBtdWNoIG9mIGEgY29uc3RyYWludCAoYXBwbGljYXRpb25zDQo+IHRoYXQgY3JlYXRlIGFs bCBmbG93cyBkdXJpbmcgaW5pdCBtYXkgbm90IGNhcmUgYWZ0ZXIgYWxsKS4NCj4gDQo+IFlvdSBz aG91bGQgY29uc2lkZXIgaW4gYW55IGNhc2UgdGhhdCBtb2RpZnlpbmcgZmxvdyBydWxlcyB3aWxs IGFsd2F5cyBiZQ0KPiBzbG93ZXIgdGhhbiByZWNlaXZpbmcgcGFja2V0cywgdGhlcmUgaXMgbm8g d2F5IGFyb3VuZCB0aGF0LiBBcHBsaWNhdGlvbnMNCj4gaGF2ZSB0byBsaXZlIHdpdGggaXQgYW5k IHByb3ZpZGUgYSBzb2Z0d2FyZSBmYWxsYmFjayBmb3IgaW5jb21pbmcgcGFja2V0cw0KPiB3aGls ZSBtYW5hZ2luZyBmbG93IHJ1bGVzLg0KPiANCj4gTW9yZW92ZXIsIHRoaW5rIGFib3V0IHdoYXQg aGFwcGVucyB3aGVuIHlvdSBoaXQgdGhlIG1heGltdW0gbnVtYmVyIG9mDQo+IGZsb3cNCj4gcnVs ZXMgYW5kIGNhbm5vdCBjcmVhdGUgYW55IG1vcmUuIEFwcGxpY2F0aW9ucyBuZWVkIHRvIGltcGxl bWVudCBzb21lDQo+IGtpbmQNCj4gb2YgZmFsbGJhY2sgaW4gdGhlaXIgZGF0YSBwYXRoLg0KPiAN Cj4gT2ZmbG9hZGluZyBmbG93cyBpbiBIVyBpcyBhbHNvIG9ubHkgdXNlZnVsIGlmIHRoZXkgbGl2 ZSBtdWNoIGxvbmdlciB0aGFuIHRoZQ0KPiB0aW1lIHRha2VuIHRvIGNyZWF0ZSBhbmQgZGVsZXRl IHRoZW0uIFBlcmhhcHMgYXBwbGljYXRpb25zIG1heSBjaG9vc2UgdG8NCj4gZG8NCj4gc28gYWZ0 ZXIgZGV0ZWN0aW5nIGxvbmcgbGl2ZWQgZmxvd3Mgc3VjaCBhcyBUQ1Agc2Vzc2lvbnMuDQo+IA0K PiBZb3UgbWF5IGhhdmUgb25lIHNlcGFyYXRlIGNvbnRyb2wgdGhyZWFkIGRlZGljYXRlZCB0byBt YW5hZ2UgZmxvd3MgYW5kDQo+IGtlZXAgeW91ciBub3JtYWwgY29udHJvbCB0aHJlYWQgdW5hZmZl Y3RlZCBieSBkZWxheXMuIFNldmVyYWwgdGhyZWFkcyBjYW4NCj4gZXZlbiBiZSBkZWRpY2F0ZWQs IG9uZSBwZXIgZGV2aWNlLg0KW1N1Z2VzaF0gSSBhZ3JlZSB0aGF0IHRoZSBmbG93IGluc2VydGlv biBjYW5ub3QgYmUgYXMgZmFzdCBhcyB0aGUgcGFja2V0IHJlY2VpdmluZyANCnJhdGUuICBGcm9t IGFwcGxpY2F0aW9uIHBvaW50IG9mIHZpZXcgdGhlIHByb2JsZW0gd2lsbCBiZSB3aGVuIGhhcmR3 YXJlIGZsb3cgDQppbnNlcnRpb24gdGFrZXMgbG9uZ2VyIHRoYW4gc29mdHdhcmUgZmxvdyBpbnNl cnRpb24uIEF0IGxlYXN0IGFwcGxpY2F0aW9uIGhhcyB0byBrbm93DQp0aGUgY29zdCBvZiBpbnNl cnRpbmcvZGVsZXRpbmcgYSBydWxlIGluIGhhcmR3YXJlIGJlZm9yZWhhbmQuIE90aGVyd2lzZSBo b3cgYXBwbGljYXRpb24NCmNhbiBjaG9vc2UgdGhlIHJpZ2h0IGZsb3cgY2FuZGlkYXRlIGZvciBo YXJkd2FyZS4gTXkgcG9pbnQgaGVyZSBpcyBhcHBsaWNhdGlvbiBpcyBleHBlY3RpbmcgDQphIGRl dGVybWluaXN0aWMgYmVoYXZpb3IgZnJvbSBhIGNsYXNzaWZpZXIgd2hpbGUgaW5zZXJ0aW5nIGFu ZCBkZWxldGluZyBydWxlcy4NCj4gDQo+ID4gW1N1Z2VzaF0gQW5vdGhlciBxdWVyeSBpcyBvbiB0 aGUgc3luY2hyb25pemF0aW9uIHBhcnQuIFdoYXQgaWYgc2FtZSBydWxlcw0KPiBhcmUNCj4gPiBo YW5kbGVkIGZyb20gZGlmZmVyZW50IHRocmVhZHM/IElzIGFwcGxpY2F0aW9uIHJlc3BvbnNpYmxl IGZvciBoYW5kbGluZyB0aGUNCj4gY29uY3VycmVudA0KPiA+IGhhcmR3YXJlIHByb2dyYW1taW5n Pw0KPiANCj4gTGlrZSBtb3N0IChpZiBub3QgYWxsKSBEUERLIEFQSXMsIGFwcGxpY2F0aW9ucyBh cmUgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nDQo+IGxvY2tpbmcgaXNzdWVzIGFzIGRlY3JpYmVk IGluIDQuMyAoQmVoYXZpb3IpLiBTaW5jZSB0aGlzIGlzIGEgY29udHJvbCBwYXRoDQo+IEFQSSBh bmQgYXBwbGljYXRpb25zIHVzdWFsbHkgaGF2ZSBhIHNpbmdsZSBjb250cm9sIHRocmVhZCwgbG9j a2luZyBzaG91bGQNCj4gbm90IGJlIG5lY2Vzc2FyeSBpbiBtb3N0IGNhc2VzLg0KPiANCj4gUmVn YXJkaW5nIG15IGFib3ZlIGNvbW1lbnQgYWJvdXQgdXNpbmcgc2V2ZXJhbCBjb250cm9sIHRocmVh ZHMgdG8NCj4gbWFuYWdlDQo+IGRpZmZlcmVudCBkZXZpY2VzLCBzZWN0aW9uIDQuMyBzYXlzOg0K PiANCj4gICJUaGVyZSBpcyBubyBwcm92aXNpb24gZm9yIHJlZW50cmFuY3kvbXVsdGktdGhyZWFk IHNhZmV0eSwgYWx0aG91Z2ggbm90aGluZw0KPiAgc2hvdWxkIHByZXZlbnQgZGlmZmVyZW50IGRl dmljZXMgZnJvbSBiZWluZyBjb25maWd1cmVkIGF0IHRoZSBzYW1lDQo+ICB0aW1lLiBQTURzIG1h eSBwcm90ZWN0IHRoZWlyIGNvbnRyb2wgcGF0aCBmdW5jdGlvbnMgYWNjb3JkaW5nbHkuIg0KPiAN Cj4gSSdkIGxpa2UgdG8gZW1waGFzaXplIGl0IGlzIG5vdCAicGVyIHBvcnQiIGJ1dCAicGVyIGRl dmljZSIsIHNpbmNlIGluIGEgZmV3DQo+IGNhc2VzIGEgY29uZmlndXJhYmxlIHJlc291cmNlIGlz IHNoYXJlZCBieSBzZXZlcmFsIHBvcnRzLiBJdCBtYXkgYmUNCj4gZGlmZmljdWx0IGZvciBhcHBs aWNhdGlvbnMgdG8gZGV0ZXJtaW5lIHdoaWNoIHBvcnRzIGFyZSBzaGFyZWQgYnkgYSBnaXZlbg0K PiBkZXZpY2UgYnV0IHRoaXMgZmFsbHMgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBBUEkuDQo+ IA0KPiBEbyB5b3UgdGhpbmsgYWRkaW5nIHRoZSBndWFyYW50ZWUgdGhhdCBpdCBpcyBhbHdheXMg c2FmZSB0byBjb25maWd1cmUgdHdvDQo+IGRpZmZlcmVudCBwb3J0cyBzaW11bHRhbmVvdXNseSB3 aXRob3V0IGxvY2tpbmcgZnJvbSB0aGUgYXBwbGljYXRpb24gc2lkZSBpcw0KPiBuZWNlc3Nhcnk/ IEluIHdoaWNoIGNhc2UgdGhlIFBNRCB3b3VsZCBiZSByZXNwb25zaWJsZSBmb3IgbG9ja2luZyBz aGFyZWQNCj4gcmVzb3VyY2VzLg0KW1N1Z2VzaF0gVGhpcyB3b3VsZCBiZSBsaXR0bGUgYml0IGNv bXBsaWNhdGVkIHdoZW4gc29tZSBvZiBwb3J0cyBhcmUgbm90IHVuZGVyIA0KRFBESyBpdHNlbGYo d2hhdCBpZiBvbmUgcG9ydCBpcyBtYW5hZ2VkIGJ5IEtlcm5lbCkgT3IgcG9ydHMgYXJlIHRpZWQg YnkgDQpkaWZmZXJlbnQgYXBwbGljYXRpb24uIExvY2tpbmcgaW4gUE1EIGhlbHBzIHdoZW4gdGhl IHBvcnRzIGFyZSBhY2Nlc3NlZCBieSANCm11bHRpcGxlIERQREsgYXBwbGljYXRpb24uIEhvd2V2 ZXIgd2hhdCBpZiB0aGUgcG9ydCBpdHNlbGYgbm90IHVuZGVyIERQREs/DQo+IA0KPiA+ID4gRGVz dHJ1Y3Rpb24NCj4gPiA+IH5+fn5+fn5+fn5+DQo+ID4gPg0KPiA+ID4gRmxvdyBydWxlcyBkZXN0 cnVjdGlvbiBpcyBub3QgYXV0b21hdGljLCBhbmQgYSBxdWV1ZSBzaG91bGQgbm90IGJlDQo+IHJl bGVhc2VkDQo+ID4gPiBpZiBhbnkgYXJlIHN0aWxsIGF0dGFjaGVkIHRvIGl0LiBBcHBsaWNhdGlv bnMgbXVzdCB0YWtlIGNhcmUgb2YgcGVyZm9ybWluZw0KPiA+ID4gdGhpcyBzdGVwIGJlZm9yZSBy ZWxlYXNpbmcgcmVzb3VyY2VzLg0KPiA+ID4NCj4gPiA+IDo6DQo+ID4gPg0KPiA+ID4gIGludA0K PiA+ID4gIHJ0ZV9mbG93X2Rlc3Ryb3kodWludDhfdCBwb3J0X2lkLA0KPiA+ID4gICAgICAgICAg ICAgICAgICAgc3RydWN0IHJ0ZV9mbG93ICpmbG93KTsNCj4gPiA+DQo+ID4gPg0KPiA+IFtTdWdl c2hdIEkgd291bGQgc3VnZ2VzdCBoYXZpbmcgYSBjbGVhbi11cCBBUEkgaXMgcmVhbGx5IHVzZWZ1 bCBhcyB0aGUNCj4gcmVsZWFzaW5nIG9mDQo+ID4gUXVldWUoaXMgaXQgYXBwbGljYWJsZSBmb3Ig cmVsZWFzaW5nIG9mIHBvcnQgdG9vPykgaXMgbm90IGd1YXJhbnRlZWluZyB0aGUNCj4gYXV0b21h dGljIGZsb3cNCj4gPiBkZXN0cnVjdGlvbi4NCj4gDQo+IFdvdWxkIHNvbWV0aGluZyBsaWtlIHJ0 ZV9mbG93X2ZsdXNoKHBvcnRfaWQpIGRvIHRoZSB0cmljaz8gSSB3YW50ZWQgdG8NCj4gZW1waGFz aXplIGluIHRoaXMgZmlyc3QgZHJhZnQgdGhhdCBhcHBsaWNhdGlvbnMgc2hvdWxkIHJlYWxseSBr ZWVwIHRoZSBmbG93DQo+IHBvaW50ZXJzIGFyb3VuZCBpbiBvcmRlciB0byBtYW5hZ2UvZGVzdHJv eSB0aGVtLiBJdCBpcyB0aGVpciByZXNwb25zaWJpbGl0eSwNCj4gbm90IFBNRCdzLg0KW1N1Z2Vz aF0gVGhhbmtzLCBJIHRoaW5rIHRoZSBmbHVzaCBjYWxsIHdpbGwgZG8uDQo+IA0KPiA+IFRoaXMg d2F5IGFwcGxpY2F0aW9uIGNhbiBpbml0aWFsaXplIHRoZSBwb3J0LA0KPiA+IGNsZWFuLXVwIGFs bCB0aGUgZXhpc3RpbmcgcnVsZXMgYW5kIGNyZWF0ZSBuZXcgcnVsZXMgIG9uIGEgY2xlYW4gc2xh dGUuDQo+IA0KPiBObyByZXNvdXJjZSBjYW4gYmUgcmVsZWFzZWQgYXMgbG9uZyBhcyBhIGZsb3cg cnVsZSBpcyB1c2luZyBpdCAoYmFkIHRoaW5ncw0KPiBtYXkgaGFwcGVuIG90aGVyd2lzZSksIGFs bCBmbG93IHJ1bGVzIG11c3QgYmUgZGVzdHJveWVkIGZpcnN0LCB0aHVzIG5vbmUgY2FuDQo+IHBv c3NpYmx5IHJlbWFpbiBhZnRlciBpbml0aWFsaXppbmcgYSBwb3J0LiBJdCBpcyBhc3N1bWVkIHRo YXQgUE1EcyBkbw0KPiBhdXRvbWF0aWMgY2xlYW4gdXAgZHVyaW5nIGluaXQgaWYgbmVjZXNzYXJ5 IHRvIGVuc3VyZSB0aGlzLg0KW1N1Z2VzaF0gVGhhdCB3aWxsIGRvLg0KPiANCj4gPiA+IEZhaWx1 cmUgdG8gZGVzdHJveSBhIGZsb3cgcnVsZSBtYXkgb2NjdXIgd2hlbiBvdGhlciBmbG93IHJ1bGVz IGRlcGVuZCBvbg0KPiBpdCwNCj4gPiA+IGFuZCBkZXN0cm95aW5nIGl0IHdvdWxkIHJlc3VsdCBp biBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuDQo+ID4gPg0KPiA+ID4gVGhpcyBmdW5jdGlvbiBpcyBv bmx5IGd1YXJhbnRlZWQgdG8gc3VjY2VlZCBpZiBmbG93IHJ1bGVzIGFyZSBkZXN0cm95ZWQgaW4N Cj4gPiA+IHJldmVyc2Ugb3JkZXIgb2YgdGhlaXIgY3JlYXRpb24uDQo+ID4gPg0KPiA+ID4gQXJn dW1lbnRzOg0KPiA+ID4NCj4gPiA+IC0gYGBwb3J0X2lkYGA6IHBvcnQgaWRlbnRpZmllciBvZiBF dGhlcm5ldCBkZXZpY2UuDQo+ID4gPiAtIGBgZmxvd2BgOiBmbG93IHJ1bGUgdG8gZGVzdHJveS4N Cj4gPiA+DQo+ID4gPiBSZXR1cm4gdmFsdWU6DQo+ID4gPg0KPiA+ID4gLSAqKjAqKiBvbiBzdWNj ZXNzLCBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlIG90aGVyd2lzZSBhbmQgYGBydGVfZXJybm9gYCBp cw0KPiA+ID4gICBzZXQuDQo+ID4gPg0KPiA+ID4gLi4gcmF3OjogcGRmDQo+ID4gPg0KPiA+ID4g ICAgUGFnZUJyZWFrDQo+ID4gPg0KPiA+ID4gUXVlcnkNCj4gPiA+IH5+fn5+DQo+ID4gPg0KPiA+ ID4gUXVlcnkgYW4gZXhpc3RpbmcgZmxvdyBydWxlLg0KPiA+ID4NCj4gPiA+IFRoaXMgZnVuY3Rp b24gYWxsb3dzIHJldHJpZXZpbmcgZmxvdy1zcGVjaWZpYyBkYXRhIHN1Y2ggYXMgY291bnRlcnMu IERhdGENCj4gPiA+IGlzIGdhdGhlcmVkIGJ5IHNwZWNpYWwgYWN0aW9ucyB3aGljaCBtdXN0IGJl IHByZXNlbnQgaW4gdGhlIGZsb3cgcnVsZQ0KPiA+ID4gZGVmaW5pdGlvbi4NCj4gPiA+DQo+ID4g PiA6Og0KPiA+ID4NCj4gPiA+ICBpbnQNCj4gPiA+ICBydGVfZmxvd19xdWVyeSh1aW50OF90IHBv cnRfaWQsDQo+ID4gPiAgICAgICAgICAgICAgICAgc3RydWN0IHJ0ZV9mbG93ICpmbG93LA0KPiA+ ID4gICAgICAgICAgICAgICAgIGVudW0gcnRlX2Zsb3dfYWN0aW9uX3R5cGUgYWN0aW9uLA0KPiA+ ID4gICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEpOw0KPiA+ID4NCj4gPiA+IEFyZ3VtZW50czoN Cj4gPiA+DQo+ID4gPiAtIGBgcG9ydF9pZGBgOiBwb3J0IGlkZW50aWZpZXIgb2YgRXRoZXJuZXQg ZGV2aWNlLg0KPiA+ID4gLSBgYGZsb3dgYDogZmxvdyBydWxlIHRvIHF1ZXJ5Lg0KPiA+ID4gLSBg YGFjdGlvbmBgOiBhY3Rpb24gdHlwZSB0byBxdWVyeS4NCj4gPiA+IC0gYGBkYXRhYGA6IHBvaW50 ZXIgdG8gc3RvcmFnZSBmb3IgdGhlIGFzc29jaWF0ZWQgcXVlcnkgZGF0YSB0eXBlLg0KPiA+ID4N Cj4gPiA+IFJldHVybiB2YWx1ZToNCj4gPiA+DQo+ID4gPiAtICoqMCoqIG9uIHN1Y2Nlc3MsIGEg bmVnYXRpdmUgZXJybm8gdmFsdWUgb3RoZXJ3aXNlIGFuZCBgYHJ0ZV9lcnJub2BgIGlzDQo+ID4g PiAgIHNldC4NCj4gPiA+DQo+ID4gPiAuLiByYXc6OiBwZGYNCj4gPiA+DQo+ID4gPiAgICBQYWdl QnJlYWsNCj4gPiA+DQo+ID4gPiBCZWhhdmlvcg0KPiA+ID4gLS0tLS0tLS0NCj4gPiA+DQo+ID4g PiAtIEFQSSBvcGVyYXRpb25zIGFyZSBzeW5jaHJvbm91cyBhbmQgYmxvY2tpbmcgKGBgRUFHQUlO YGAgY2Fubm90IGJlDQo+ID4gPiAgIHJldHVybmVkKS4NCj4gPiA+DQo+ID4gPiAtIFRoZXJlIGlz IG5vIHByb3Zpc2lvbiBmb3IgcmVlbnRyYW5jeS9tdWx0aS10aHJlYWQgc2FmZXR5LCBhbHRob3Vn aA0KPiBub3RoaW5nDQo+ID4gPiAgIHNob3VsZCBwcmV2ZW50IGRpZmZlcmVudCBkZXZpY2VzIGZy b20gYmVpbmcgY29uZmlndXJlZCBhdCB0aGUgc2FtZQ0KPiA+ID4gICB0aW1lLiBQTURzIG1heSBw cm90ZWN0IHRoZWlyIGNvbnRyb2wgcGF0aCBmdW5jdGlvbnMgYWNjb3JkaW5nbHkuDQo+ID4gPg0K PiA+ID4gLSBTdG9wcGluZyB0aGUgZGF0YSBwYXRoIChUWC9SWCkgc2hvdWxkIG5vdCBiZSBuZWNl c3Nhcnkgd2hlbiBtYW5hZ2luZw0KPiA+ID4gZmxvdw0KPiA+ID4gICBydWxlcy4gSWYgdGhpcyBj YW5ub3QgYmUgYWNoaWV2ZWQgbmF0dXJhbGx5IG9yIHdpdGggd29ya2Fyb3VuZHMgKHN1Y2ggYXMN Cj4gPiA+ICAgdGVtcG9yYXJpbHkgcmVwbGFjaW5nIHRoZSBidXJzdCBmdW5jdGlvbiBwb2ludGVy cyksIGFuIGFwcHJvcHJpYXRlIGVycm9yDQo+ID4gPiAgIGNvZGUgbXVzdCBiZSByZXR1cm5lZCAo YGBFQlVTWWBgKS4NCj4gPiA+DQo+ID4gPiAtIFBNRHMsIG5vdCBhcHBsaWNhdGlvbnMsIGFyZSBy ZXNwb25zaWJsZSBmb3IgbWFpbnRhaW5pbmcgZmxvdyBydWxlcw0KPiA+ID4gICBjb25maWd1cmF0 aW9uIHdoZW4gc3RvcHBpbmcgYW5kIHJlc3RhcnRpbmcgYSBwb3J0IG9yIHBlcmZvcm1pbmcgb3Ro ZXINCj4gPiA+ICAgYWN0aW9ucyB3aGljaCBtYXkgYWZmZWN0IHRoZW0uIFRoZXkgY2FuIG9ubHkg YmUgZGVzdHJveWVkIGV4cGxpY2l0bHkuDQo+ID4gPg0KPiA+ID4gLi4gcmF3OjogcGRmDQo+ID4g Pg0KPiA+ID4gICAgUGFnZUJyZWFrDQo+ID4gPg0KPiA+IFtTdWdlc2hdIFF1ZXJ5IGFsbCB0aGUg cnVsZXMgZm9yIGEgc3BlY2lmaWMgcG9ydC9xdWV1ZT8/IFVzZWZ1bCB3aGVuDQo+IGFkZGluZyBh bmQNCj4gPiBkZWxldGluZyBwb3J0cyBhbmQgcXVldWVzIGR5bmFtaWNhbGx5IGFjY29yZGluZyB0 byB0aGUgbmVlZC4gSSBhbSBub3Qgc3VyZQ0KPiA+IHdoYXQgYXJlIHRoZSBvdGhlciAgZGlmZmVy ZW50IHVzZWNhc2VzIGZvciB0aGVzZSBBUElzLiBCdXQgSSBmZWVsIGl0IG1ha2VzDQo+IG11Y2gg ZWFzaWVyIHRvDQo+ID4gbWFuYWdlIGZsb3dzIGZyb20gdGhlIGFwcGxpY2F0aW9uLiBXaGF0IGRv IHlvdSB0aGluaz8NCj4gDQo+IE5vdCBzdXJlLCB0aGF0IHNlZW1zIHRvIGZhbGwgb3V0IG9mIHRo ZSBzY29wZSBvZiB0aGlzIEFQSS4gQXMgZGVzY3JpYmVkLA0KPiBhcHBsaWNhdGlvbnMgYWxyZWFk eSBzdG9yZSB0aGUgcmVsYXRlZCBydGVfZmxvdyBwb2ludGVycy4gQWNjb3JkaW5nbHksIHRoZXkN Cj4ga25vdyBob3cgbWFueSBydWxlcyBhcmUgYXNzb2NpYXRlZCB0byBhIGdpdmVuIHBvcnQuIFRo ZXkgbmVlZCBib3RoIGEgcG9ydA0KPiBJRA0KPiBhbmQgYSBmbG93IHJ1bGUgcG9pbnRlciB0byBk ZXN0cm95IHRoZW0gYWZ0ZXIgYWxsLg0KPiANCj4gTm93IHBlcmhhcHMgc29tZXRoaW5nIHRvIGNv bnZlcnQgYmFjayBhbiBleGlzdGluZyBydGVfZmxvdyB0byBhIHBhdHRlcm4NCj4gYW5kDQo+IGEg bGlzdCBvZiBhY3Rpb25zLCBob3dldmVyIEkgY2Fubm90IHNlZSBhbiBpbW1lZGlhdGUgdXNlIGNh c2UgZm9yIGl0Lg0KPiANCj4gV2hhdCB5b3UgZGVzY3JpYmUgc2VlbXMgdG8gYmUgZG9hYmxlIHRo cm91Z2ggYSBmcm9udC1lbmQgQVBJLCBJIHRoaW5rDQo+IGtlZXBpbmcgdGhpcyBvbmUgYXMgbG93 LWxldmVsIGFzIHBvc3NpYmxlIHdpdGggb25seSBiYXNpYyBhY3Rpb25zIGlzIGJldHRlcg0KPiBy aWdodCBub3cuIEknbGwga2VlcCB5b3VyIHN1Z2dlc3Rpb24gaW4gbWluZC4NCltTdWdlc2hdIFN1 cmUsIFRoYXQgd2lsbCBiZSBmaW5lLg0KPiANCj4gPiA+IENvbXBhdGliaWxpdHkNCj4gPiA+IC0t LS0tLS0tLS0tLS0NCj4gPiA+DQo+ID4gPiBObyBrbm93biBoYXJkd2FyZSBpbXBsZW1lbnRhdGlv biBzdXBwb3J0cyBhbGwgdGhlIGZlYXR1cmVzIGRlc2NyaWJlZA0KPiBpbg0KPiA+ID4gdGhpcw0K PiA+ID4gZG9jdW1lbnQuDQo+ID4gPg0KPiA+ID4gVW5zdXBwb3J0ZWQgZmVhdHVyZXMgb3IgY29t YmluYXRpb25zIGFyZSBub3QgZXhwZWN0ZWQgdG8gYmUgZnVsbHkNCj4gPiA+IGVtdWxhdGVkDQo+ ID4gPiBpbiBzb2Z0d2FyZSBieSBQTURzIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLiBQYXJ0aWFs bHkgc3VwcG9ydGVkDQo+IGZlYXR1cmVzDQo+ID4gPiBtYXkgYmUgY29tcGxldGVkIGluIHNvZnR3 YXJlIGFzIGxvbmcgYXMgaGFyZHdhcmUgcGVyZm9ybXMgbW9zdCBvZiB0aGUNCj4gPiA+IHdvcmsN Cj4gPiA+IChzdWNoIGFzIHF1ZXVlIHJlZGlyZWN0aW9uIGFuZCBwYWNrZXQgcmVjb2duaXRpb24p Lg0KPiA+ID4NCj4gPiA+IEhvd2V2ZXIgUE1EcyBhcmUgZXhwZWN0ZWQgdG8gZG8gdGhlaXIgYmVz dCB0byBzYXRpc2Z5IGFwcGxpY2F0aW9uDQo+IHJlcXVlc3RzDQo+ID4gPiBieSB3b3JraW5nIGFy b3VuZCBoYXJkd2FyZSBsaW1pdGF0aW9ucyBhcyBsb25nIGFzIGRvaW5nIHNvIGRvZXMgbm90DQo+ IGFmZmVjdA0KPiA+ID4gdGhlIGJlaGF2aW9yIG9mIGV4aXN0aW5nIGZsb3cgcnVsZXMuDQo+ID4g Pg0KPiA+ID4gVGhlIGZvbGxvd2luZyBzZWN0aW9ucyBwcm92aWRlIGEgZmV3IGV4YW1wbGVzIG9m IHN1Y2ggY2FzZXMsIHRoZXkgYXJlDQo+IGJhc2VkDQo+IEFkcmllbiBNYXphcmd1aWwNCj4gNldJ TkQNCg==