From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by dpdk.org (Postfix) with ESMTP id A33446A95 for ; Wed, 19 Nov 2014 17:40:53 +0100 (CET) Received: from orsmga002.jf.intel.com ([10.7.209.21]) by orsmga103.jf.intel.com with ESMTP; 19 Nov 2014 08:48:34 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.07,418,1413270000"; d="scan'208";a="639805073" Received: from irsmsx106.ger.corp.intel.com ([163.33.3.31]) by orsmga002.jf.intel.com with ESMTP; 19 Nov 2014 08:51:13 -0800 Received: from irsmsx105.ger.corp.intel.com ([169.254.7.144]) by IRSMSX106.ger.corp.intel.com ([169.254.8.18]) with mapi id 14.03.0195.001; Wed, 19 Nov 2014 16:51:06 +0000 From: "Ananyev, Konstantin" To: Neil Horman Thread-Topic: [dpdk-dev] [PATCH v4 3/5] hash: add fallback to software CRC32 implementation Thread-Index: AQHQA1fLrS7rq4mgVUGDH8gDetYIBpxmqiWAgAA+kgCAANRLAIAAFcQAgAABNYCAAAJvYIAAN26AgAAGepA= Date: Wed, 19 Nov 2014 16:51:06 +0000 Message-ID: <2601191342CEEE43887BDE71AB977258213B6D91@IRSMSX105.ger.corp.intel.com> References: <546B607B.9030808@sts.kz> <20141118160005.GC32375@hmsreliant.think-freely.org> <546B7E2D.7050705@sts.kz> <20141118174619.GE32375@hmsreliant.think-freely.org> <20141118175226.GC5840@bricha3-MOBL3> <20141118213624.GF32375@hmsreliant.think-freely.org> <20141119101614.GA6532@bricha3-MOBL3> <20141119113408.GA10004@hmsreliant.think-freely.org> <20141119113827.GB2604@bricha3-MOBL3> <2601191342CEEE43887BDE71AB977258213B6C4D@IRSMSX105.ger.corp.intel.com> <20141119150533.GA28013@localhost.localdomain> In-Reply-To: <20141119150533.GA28013@localhost.localdomain> Accept-Language: en-IE, 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 Cc: "dev@dpdk.org" Subject: Re: [dpdk-dev] [PATCH v4 3/5] hash: add fallback to software CRC32 implementation 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: Wed, 19 Nov 2014 16:40:54 -0000 DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogTmVpbCBIb3JtYW4gW21h aWx0bzpuaG9ybWFuQHR1eGRyaXZlci5jb21dDQo+IFNlbnQ6IFdlZG5lc2RheSwgTm92ZW1iZXIg MTksIDIwMTQgMzowNiBQTQ0KPiBUbzogQW5hbnlldiwgS29uc3RhbnRpbg0KPiBDYzogUmljaGFy ZHNvbiwgQnJ1Y2U7IGRldkBkcGRrLm9yZw0KPiBTdWJqZWN0OiBSZTogW2RwZGstZGV2XSBbUEFU Q0ggdjQgMy81XSBoYXNoOiBhZGQgZmFsbGJhY2sgdG8gc29mdHdhcmUgQ1JDMzIgaW1wbGVtZW50 YXRpb24NCj4gDQo+IE9uIFdlZCwgTm92IDE5LCAyMDE0IGF0IDExOjUwOjQwQU0gKzAwMDAsIEFu YW55ZXYsIEtvbnN0YW50aW4gd3JvdGU6DQo+ID4NCj4gPg0KPiA+ID4gLS0tLS1PcmlnaW5hbCBN ZXNzYWdlLS0tLS0NCj4gPiA+IEZyb206IGRldiBbbWFpbHRvOmRldi1ib3VuY2VzQGRwZGsub3Jn XSBPbiBCZWhhbGYgT2YgQnJ1Y2UgUmljaGFyZHNvbg0KPiA+ID4gU2VudDogV2VkbmVzZGF5LCBO b3ZlbWJlciAxOSwgMjAxNCAxMTozOCBBTQ0KPiA+ID4gVG86IE5laWwgSG9ybWFuDQo+ID4gPiBD YzogZGV2QGRwZGsub3JnDQo+ID4gPiBTdWJqZWN0OiBSZTogW2RwZGstZGV2XSBbUEFUQ0ggdjQg My81XSBoYXNoOiBhZGQgZmFsbGJhY2sgdG8gc29mdHdhcmUgQ1JDMzIgaW1wbGVtZW50YXRpb24N Cj4gPiA+DQo+ID4gPiBPbiBXZWQsIE5vdiAxOSwgMjAxNCBhdCAwNjozNDowOEFNIC0wNTAwLCBO ZWlsIEhvcm1hbiB3cm90ZToNCj4gPiA+ID4gT24gV2VkLCBOb3YgMTksIDIwMTQgYXQgMTA6MTY6 MTRBTSArMDAwMCwgQnJ1Y2UgUmljaGFyZHNvbiB3cm90ZToNCj4gPiA+ID4gPiBPbiBUdWUsIE5v diAxOCwgMjAxNCBhdCAwNDozNjoyNFBNIC0wNTAwLCBOZWlsIEhvcm1hbiB3cm90ZToNCj4gPiA+ ID4gPiA+IE9uIFR1ZSwgTm92IDE4LCAyMDE0IGF0IDA1OjUyOjI3UE0gKzAwMDAsIEJydWNlIFJp Y2hhcmRzb24gd3JvdGU6DQo+ID4gPiA+ID4gPiA+IE9uIFR1ZSwgTm92IDE4LCAyMDE0IGF0IDEy OjQ2OjE5UE0gLTA1MDAsIE5laWwgSG9ybWFuIHdyb3RlOg0KPiA+ID4gPiA+ID4gPiA+IE9uIFR1 ZSwgTm92IDE4LCAyMDE0IGF0IDExOjEzOjE3UE0gKzA2MDAsIFllcmRlbiBaaHVtYWJla292IHdy b3RlOg0KPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+IDE4LjExLjIwMTQgMjI6 MDAsIE5laWwgSG9ybWFuINC/0LjRiNC10YI6DQo+ID4gPiA+ID4gPiA+ID4gPiA+IE9uIFR1ZSwg Tm92IDE4LCAyMDE0IGF0IDA5OjA2OjM1UE0gKzA2MDAsIFllcmRlbiBaaHVtYWJla292IHdyb3Rl Og0KPiA+ID4gPiA+ID4gPiA+ID4gPj4gMTguMTEuMjAxNCAyMDo0MSwgTmVpbCBIb3JtYW4g0L/Q uNGI0LXRgjoNCj4gPiA+ID4gPiA+ID4gPiA+ID4+PiBPbiBUdWUsIE5vdiAxOCwgMjAxNCBhdCAw ODowMzo0MFBNICswNjAwLCBZZXJkZW4gWmh1bWFiZWtvdiB3cm90ZToNCj4gPiA+ID4gPiA+ID4g PiA+ID4+Pj4gIC8qKg0KPiA+ID4gPiA+ID4gPiA+ID4gPj4+PiAgICogVXNlIHNpbmdsZSBjcmMz MiBpbnN0cnVjdGlvbiB0byBwZXJmb3JtIGEgaGFzaCBvbiBhIDQgYnl0ZSB2YWx1ZS4NCj4gPiA+ ID4gPiA+ID4gPiA+ID4+Pj4gKyAqIEZhbGwgYmFjayB0byBzb2Z0d2FyZSBjcmMzMiBpbXBsZW1l bnRhdGlvbiBpbiBjYXNlIFNTRTQuMiBpcw0KPiA+ID4gPiA+ID4gPiA+ID4gPj4+PiArICogbm90 IHN1cHBvcnRlZA0KPiA+ID4gPiA+ID4gPiA+ID4gPj4+PiAgICoNCj4gPiA+ID4gPiA+ID4gPiA+ ID4+Pj4gICAqIEBwYXJhbSBkYXRhDQo+ID4gPiA+ID4gPiA+ID4gPiA+Pj4+ICAgKiAgIERhdGEg dG8gcGVyZm9ybSBoYXNoIG9uLg0KPiA+ID4gPiA+ID4gPiA+ID4gPj4+PiBAQCAtMzc2LDExICs0 MTMsMTggQEAgY3JjMzJjXzJ3b3Jkcyh1aW50NjRfdCBkYXRhLCB1aW50MzJfdCBpbml0X3ZhbCkN Cj4gPiA+ID4gPiA+ID4gPiA+ID4+Pj4gIHN0YXRpYyBpbmxpbmUgdWludDMyX3QNCj4gPiA+ID4g PiA+ID4gPiA+ID4+Pj4gIHJ0ZV9oYXNoX2NyY180Ynl0ZSh1aW50MzJfdCBkYXRhLCB1aW50MzJf dCBpbml0X3ZhbCkNCj4gPiA+ID4gPiA+ID4gPiA+ID4+Pj4gIHsNCj4gPiA+ID4gPiA+ID4gPiA+ ID4+Pj4gLQlyZXR1cm4gX21tX2NyYzMyX3UzMihpbml0X3ZhbCwgZGF0YSk7DQo+ID4gPiA+ID4g PiA+ID4gPiA+Pj4+ICsjaWZkZWYgUlRFX01BQ0hJTkVfQ1BVRkxBR19TU0U0XzINCj4gPiA+ID4g PiA+ID4gPiA+ID4+Pj4gKwlpZiAobGlrZWx5KGNyYzMyX2FsZyA9PSBDUkMzMl9TU0U0MikpDQo+ ID4gPiA+ID4gPiA+ID4gPiA+Pj4+ICsJCXJldHVybiBfbW1fY3JjMzJfdTMyKGluaXRfdmFsLCBk YXRhKTsNCj4gPiA+ID4gPiA+ID4gPiA+ID4+Pj4gKyNlbmRpZg0KPiA+ID4gPiA+ID4gPiA+ID4g Pj4+IHlvdSBkb24ndCByZWFsbHkgbmVlZCB0aGVzZSBpZmRlZnMgaGVyZSBhbnltb3JlIGdpdmVu IHRoYXQgeW91IGhhdmUgYQ0KPiA+ID4gPiA+ID4gPiA+ID4gPj4+IGNvbnN0cnVjdG9yIHRvIGRv IHRoZSBhbGdvcml0aG0gc2VsZWN0aW9uLiAgSW4gZmFjdCB5b3UgbmVlZCB0byByZW1vdmUgdGhl bSwgaW4NCj4gPiA+ID4gPiA+ID4gPiA+ID4+PiB0aGUgZXZlbnQgeW91IGJ1aWxkIG9uIGEgc3lz dGVtIHRoYXQgZG9lc24ndCBzdXBwb3J0IFNTRTQyLCBidXQgcnVuIG9uIGEgc3lzdGVtDQo+ID4g PiA+ID4gPiA+ID4gPiA+Pj4gdGhhdCBkb2VzLg0KPiA+ID4gPiA+ID4gPiA+ID4gPj4gT3JpZ2lu YWxseSwgSSB0aG91Z2h0IHNvIGFzIHdlbGwuIEkgd3JvdGUgdGhlIGNvZGUgd2l0aG91dCB0aGVz ZSBpZmRlZnMsDQo+ID4gPiA+ID4gPiA+ID4gPiA+PiBidXQgaXQgZGlkbid0IGNvbXBpbGUgb24g bXkgbWFjaGluZSB3aGljaCBkb2Vzbid0IHN1cHBvcnQgU1NFNC4yLiBFcnJvcg0KPiA+ID4gPiA+ ID4gPiA+ID4gPj4gd2FzIHRyaWdnZXJlZCBieSBubW1pbnRyaW4uaCB3aGljaCBoYXMgYSBjaGVj ayBmb3IgcmVzcGVjdGl2ZSBHQ0MNCj4gPiA+ID4gPiA+ID4gPiA+ID4+IGV4dGVuc2lvbi4gU28g SSB0aGluayB0aGVzZSBpZmRlZnMgYXJlIGluZGVlZCByZXF1aXJlZC4NCj4gPiA+ID4gPiA+ID4g PiA+ID4+DQo+ID4gPiA+ID4gPiA+ID4gPiA+IFlvdSBuZWVkIHRvIGVkaXQgdGhlIG1ha2VmaWxl IHNvIHRoYXQgdGhlIGNvbXBpbGVyIGdldHMgcGFzc2VkIHRoZSBvcHRpb24NCj4gPiA+ID4gPiA+ ID4gPiA+ID4gLW1zc2U0Mi4gIFRoYXQgd2F5IGl0IHdpbGwga25vdyB0byBlbWl0IHNzZTQyIGlu c3RydWN0aW9ucy4gSXQgd2lsbCBhbHNvIGFsbG93DQo+ID4gPiA+ID4gPiA+ID4gPiA+IHlvdSB0 byByZW1vdmUgdGhlIGlmZGVmIGZyb20gdGhlIGluY2x1ZGUgZmlsZQ0KPiA+ID4gPiA+ID4gPiA+ ID4NCj4gPiA+ID4gPiA+ID4gPiA+IEluIHRoaXMgY2FzZSwgSSBndWVzcyB0aGVyZSBhcmUgdHdv IG9wdGlvbnM6DQo+ID4gPiA+ID4gPiA+ID4gPiAxKSBtb2RpZnkgYWxsIG1ha2VmaWxlcyB3aGlj aCB1c2UgbGlicnRlX2hhc2gNCj4gPiA+ID4gPiA+ID4gPiA+IDIpIG1vdmUgYWxsIGZ1bmN0aW9u IGJvZGllcyBmcm9tIHJ0ZV9oYXNoX2NyYy5oIHRvIHNlcGFyYXRlIG1vZHVsZSwNCj4gPiA+ID4g PiA+ID4gPiA+IGxlYXZpbmcgcHJvdG90eXBlIGRlZmluaXRpb25zIHRoZXJlIG9ubHkuDQo+ID4g PiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ID4gRXZlcnlib2R5J3MgdXAgZm9yIHRoZSBz ZWNvbmQgb3B0aW9uPyA6KQ0KPiA+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiBDcnVk LCB5b3UncmUgcmlnaHQsIEkgZGlkbid0IHRoaW5rIGFib3V0IHRoZSBoZWFkZXIgaW5jbHVzaW9u IGlzc3VlLiAgSXMgaXQNCj4gPiA+ID4gPiA+ID4gPiB3b3J0aCBhZGRpbmcgdGhlIGp1bXAgdG8g ZW5hYmxlIHRoZSBkeW5hbWljIGhhc2ggc2VsZWN0aW9uPw0KPiA+ID4gPiA+ID4gPiA+IE5laWwN Cj4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gTWF5YmUgZm9yIGNhc2VzIHdoZXJlIFNTRTQu MiBpcyBub3QgY3VycmVudGx5IGF2YWlsYWJsZSwgaS5lLiBmb3IgZ2VuZXJpYyBidWlsZHMuDQo+ ID4gPiA+ID4gPiA+IEZvciBidWlsZHMgd2hlcmUgd2UgaGF2ZSBoYXJkd2FyZSBzdXBwb3J0IGNv bmZpcm1lZCBhdCBjb21waWxlIHRpbWUsIGp1c3QgdXNlDQo+ID4gPiA+ID4gPiA+IHRoZSBmdW5j dGlvbiBmcm9tIHRoZSBoZWFkZXIgZmlsZS4NCj4gPiA+ID4gPiA+ID4gRG9lcyB0aGF0IG1ha2Ug c2Vuc2U/DQo+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiBJJ20gbm90IGNlcnRhaW4gb2YgdGhh dCwgYXMgSSBkb24ndCB0aGluayBhbnl0aGluZyBjYW4gYmUgJ2NvbmZpcm1lZCcgYXQgY29tcGls ZQ0KPiA+ID4gPiA+ID4gdGltZS4gIEkuZS4ganVzdCBiZWNhdXNlIHlvdSBoYXZlIHNzZTQyIGF0 IGNvbXBpbGUgdGltZSBkb2Vzbid0IGd1YXJhbnRlZSB5b3UNCj4gPiA+ID4gPiA+IGhhdmUgaXQg YXQgcnVuIHRpbWUgd2l0aCBhIERTTy4gIElmIHlvdSBoYXZlIHRoZXNlIGFzIG1hY3JvcywgeW91 IG5lZWQgdG8gZW5hYmxlDQo+ID4gPiA+ID4gPiBzc2U0MiB3aGVyZWV2ZXIgeW91IGluY2x1ZGUg dGhlIGZpbGUgc28gdGhhdCB0aGUgaW50cmluc2ljIHdvcmtzIHByb3Blcmx5Lg0KPiA+ID4gPiA+ DQo+ID4gPiA+ID4gV2VsbCwgaWYgeW91IGNvbXBpbGUgd2l0aCBzc2U0MiBhdCBjb21waWxlIHRp bWUsIHRoZSBjb21waWxlciBpcyBmcmVlIHRvIGluc2VydA0KPiA+ID4gPiA+IHNzZTQgaW5zdHJ1 Y3Rpb25zIGF0IGFueSBwbGFjZSBpdCBmZWVscyBsaWtlLCBpcnJlc3BlY3RpdmUgb2Ygd2hldGhl ciBvciBub3QgeW91DQo+ID4gPiA+ID4gdXNlIFNTRTQgaW50cmluc2ljcywgc28gSSB3b3VsZCBu ZXZlciBleHBlY3Qgc3VjaCBhIERTTyB0byB3b3JrIG9uIGEgc3lzdGVtDQo+ID4gPiA+ID4gd2l0 aG91dCBTU0U0MiBzdXBwb3J0Lg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4g YW4gYWx0ZXJuYXRlIG9wdGlvbiB3b3VsZCBiZSB0byBub3QgdXNlIHRoZSBpbnRyaW5zaWMsIGFu ZCBjcmFmdCBzb21lIGV4cGxpY2l0DQo+ID4gPiA+ID4gPiBfX2FzbV9fIHN0YXRlbWVudCB0aGF0 IGV4ZWN1dGVzIHRoZSByaWdodCBzc2U0MiBpbnN0cnVjdGlvbnMuICBUaGF0IHdheSB0aGUgYXNt DQo+ID4gPiA+ID4gPiBpcyBkaXJlY3RseSBlbWl0dGVkLCB3aXRob3V0IHJlcXVpcmluZyB0aGUg LW1zc2U0MiBmbGFnIGF0IGFsbCwgYW5kIGl0IHdpbGwganVzdA0KPiA+ID4gPiA+ID4gd29yayBp biBhbGwgdGhlIGZpbGVzIHRoYXQgY2FsbCBpdC4NCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4NCj4g PiA+ID4gPiBJIHJlYWxseSBkb24ndCBsaWtlIHRoYXQgYXBwcm9hY2guIEkgdGhpbmsgdXNpbmcg aW50cmluc2ljcyBpcyBtdWNoIG1vcmUNCj4gPiA+ID4gPiBtYWludGFpbmFibGUuDQo+ID4gPiA+ ID4NCj4gPiA+ID4gSSBncmFudCB5b3UgdGhhdCB1c2luZyBhbiBpbnRyaW5zaWMgaXMgZWFzaWVy IHRvIHJlYWQsIGJ1dCBpZiB0aGUgY29kZSBkb2Vzbid0DQo+ID4gPiA+IGNvbXBpbGUgd2hlbiB1 c2luZyB0aGUgaW50cmluc2ljIHVubGVzcyB5b3UgaGF2ZSBzc2U0MiB0dXJuZWQgb24sIEknbSBu b3Qgc3VyZQ0KPiA+ID4gPiB3aGF0IGNob2ljZSB3ZSBoYXZlLiAgYW5kIGlubGluZSBhc20gaXNu J3QgdGhhdCBoYXJkIHRvIG1haW50YWluLiAgV2UncmUgdGFsa2luZw0KPiA+ID4gPiBhYm91dCB0 aHJlZSBsaW5lcyBvZiBjb2RlOg0KPiA+ID4gPiBhc20oDQo+ID4gPiA+ICAibW92ICAgICVbMV0s JWVheA0KPiA+ID4gPiAgbW92ICAgICVbMl0sJWVkeA0KPiA+ID4gPiAgY3JjMzJsICVlZHgsJWVh eCI6DQo+ID4gPiA+ICBbZWR4XSAiciIgKGNyYykgLypvdXRwdXQqLw0KPiA+ID4gPiAgOg0KPiA+ ID4gPiAgWzFdICJyIiAoY3JjKSwgLyogaW5wdXQgKi8NCj4gPiA+ID4gIFsyXSAiciIgKHZhbCkN Cj4gPiA+ID4gIDoNCj4gPiA+ID4gIFtlYXhdICJyIiAvKiBjbG9iYmVyICovDQo+ID4gPiA+ICkN Cj4gPiA+ID4NCj4gPiA+ID4gSSBkb24ndCBoYXZlIHRoZSBzeW50YXggcXVpdGUgcmlnaHQsIGJ1 dCBpdHMgcHJldHR5IGVhc3kgdG8gcmVhZCB0aGUgaW50ZW50Lg0KPiA+ID4gPiBJdHMgbm90IGxp a2Ugd2UgZG9udCBoYXZlIHByZWNpZGVuY2UgZm9yIHRoaXMsIHRoZSBhdG9taWMgaW50ZXJmYWNl IGFuZCBzZXZlcmFsDQo+ID4gPiA+IHBtZHMgZG8gdGhpcyBmcmVxdWVudGx5Lg0KPiA+ID4gPg0K PiA+ID4gPiBOZWlsDQo+ID4gPg0KPiA+ID4gRmFpciBwb2ludC4gSWYgZXZlcnlvbmUgZWxzZSBp cyBoYXBweSBlbm91Z2ggd2l0aCBpdCwgSSdtIG9rIHRvby4NCj4gPg0KPiA+IEFzIEkgcmVtZW1i ZXIgd2l0aCBnY2MgJiBpY2MgaXQgaXMgcG9zc2libGUgdG8gc3BlY2lmeSB0aHQgeW91J2QgbGlr ZSB0byBjb21waWxlIHRoYXQgcGFydGljdWxhciBmdW5jdGlvbg0KPiA+IGZvciBkaWZmZXJlbnQg dGFyZ2V0Lg0KPiA+IEZyb20gaHR0cHM6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2djYy9GdW5j dGlvbi1BdHRyaWJ1dGVzLmh0bWw6DQo+ID4gInRhcmdldA0KPiA+IFRoZSB0YXJnZXQgYXR0cmli dXRlIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGF0IGEgZnVuY3Rpb24gaXMgdG8gYmUgY29tcGlsZWQg d2l0aCBkaWZmZXJlbnQgdGFyZ2V0IG9wdGlvbnMgdGhhbiBzcGVjaWZpZWQgb24gdGhlIGNvbW1h bmQNCj4gbGluZS4gVGhpcyBjYW4gYmUgdXNlZCBmb3IgaW5zdGFuY2UgdG8gaGF2ZSBmdW5jdGlv bnMgY29tcGlsZWQgd2l0aCBhIGRpZmZlcmVudCBJU0EgKGluc3RydWN0aW9uIHNldCBhcmNoaXRl Y3R1cmUpIHRoYW4gdGhlIGRlZmF1bHQuIFlvdQ0KPiBjYW4gYWxzbyB1c2UgdGhlIOKAmCNwcmFn bWEgR0NDIHRhcmdldOKAmSBwcmFnbWEgdG8gc2V0IG1vcmUgdGhhbiBvbmUgZnVuY3Rpb24gdG8g YmUgY29tcGlsZWQgd2l0aCBzcGVjaWZpYyB0YXJnZXQgb3B0aW9ucy4gU2VlDQo+IEZ1bmN0aW9u IFNwZWNpZmljIE9wdGlvbiBQcmFnbWFzLCBmb3IgZGV0YWlscyBhYm91dCB0aGUg4oCYI3ByYWdt YSBHQ0MgdGFyZ2V04oCZIHByYWdtYS4NCj4gPiBGb3IgaW5zdGFuY2Ugb24gYSAzODYsIHlvdSBj b3VsZCBjb21waWxlIG9uZSBmdW5jdGlvbiB3aXRoIHRhcmdldCgic3NlNC4xLGFyY2g9Y29yZTIi KSBhbmQgYW5vdGhlciB3aXRoDQo+IHRhcmdldCgic3NlNGEsYXJjaD1hbWRmYW0xMCIpLiBUaGlz IGlzIGVxdWl2YWxlbnQgdG8gY29tcGlsaW5nIHRoZSBmaXJzdCBmdW5jdGlvbiB3aXRoIC1tc3Nl NC4xIGFuZCAtbWFyY2g9Y29yZTIgb3B0aW9ucywgYW5kIHRoZQ0KPiBzZWNvbmQgZnVuY3Rpb24g d2l0aCAtbXNzZTRhIGFuZCAtbWFyY2g9YW1kZmFtMTAgb3B0aW9ucy4gSXQgaXMgdXAgdG8gdGhl IHVzZXIgdG8gbWFrZSBzdXJlIHRoYXQgYSBmdW5jdGlvbiBpcyBvbmx5IGludm9rZWQgb24gYQ0K PiBtYWNoaW5lIHRoYXQgc3VwcG9ydHMgdGhlIHBhcnRpY3VsYXIgSVNBIGl0IGlzIGNvbXBpbGVk IGZvciAoZm9yIGV4YW1wbGUgYnkgdXNpbmcgY3B1aWQgb24gMzg2IHRvIGRldGVybWluZSB3aGF0 IGZlYXR1cmUgYml0cyBhbmQNCj4gYXJjaGl0ZWN0dXJlIGZhbWlseSBhcmUgdXNlZCkuDQo+ID4N Cj4gPiAgICAgICAgICAgaW50IGNvcmUyX2Z1bmMgKHZvaWQpIF9fYXR0cmlidXRlX18gKChfX3Rh cmdldF9fICgiYXJjaD1jb3JlMiIpKSk7DQo+ID4gICAgICAgICAgIGludCBzc2UzX2Z1bmMgKHZv aWQpIF9fYXR0cmlidXRlX18gKChfX3RhcmdldF9fICgic3NlMyIpKSk7DQo+ID4gWW91IGNhbiBl aXRoZXIgdXNlIG11bHRpcGxlIHN0cmluZ3MgdG8gc3BlY2lmeSBtdWx0aXBsZSBvcHRpb25zLCBv ciBzZXBhcmF0ZSB0aGUgb3B0aW9ucyB3aXRoIGEgY29tbWEgKOKAmCzigJkpLg0KPiA+DQo+ID4g VGhlIHRhcmdldCBhdHRyaWJ1dGUgaXMgcHJlc2VudGx5IGltcGxlbWVudGVkIGZvciBpMzg2L3g4 Nl82NCwgUG93ZXJQQywgYW5kIE5pb3MgSUkgdGFyZ2V0cyBvbmx5LiBUaGUgb3B0aW9ucyBzdXBw b3J0ZWQgYXJlIHNwZWNpZmljDQo+IHRvIGVhY2ggdGFyZ2V0Lg0KPiA+DQo+ID4gT24gdGhlIDM4 NiwgdGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhbGxvd2VkOg0KPiA+IC4uLg0KPiA+ICDigJhz c2U0LjLigJkNCj4gPiDigJhuby1zc2U0LjLigJkiDQo+ID4NCj4gPiBXb3VsZG4ndCB0aGF0IHN1 aXQgeW91ciBwdXJwb3Nlcz8NCj4gPiBQcm9iYWJseSB5b3UgY2FuIGV2ZW4ga2VlcCB5b3VyIGZ1 bmN0aW9uIGlubGluZSB3aXRoIHRoYXQgYXBwcm9hY2guDQo+ID4NCj4gVGhhdCB3b3VsZCBkZWZp bmF0ZWx5IHdvcmssIGFuZCBiZSBhIGdyZWF0IHNvbHV0aW9uIGluIHRoaXMgY2FzZS4gIEhvd2V2 ZXIsIGl0cw0KPiBsaW1pdGVkIHRvIG9ubHkgdGhlIG1vc3QgcmVjZW50IHZlcnNpb24gb2YgZ2Nj LiAgSWYgdGhhdHMgYW4gYWNjZXB0aWJsZQ0KPiBjb25zdHJhaW50IG9uIHRoZSBEUERLLCB0aGVu IGl0cyBvaywgYnV0IGRpc3RyaWJ1dGlvbnMgYXJlIG9ubHkgc3RhcnRpbmcgdG8NCj4gaW5jbHVk ZSB0aGF0IHZlcnNpb24gbm93LiAgTm90IHN1cmUgb2YgdGhlIGljYyBzdGF0dXMgb2YgdGhhdCBh dHRyaWJ1dGUuDQoNClllcywgYXMgSSBjYW4gc2VlIHRoYXQgZmVhdHVyZSB3YXMgaW50cm9kdWNl ZCBpbiBnY2MgNC40LCBhbmQgd2UgaGF2ZSB0byBzdXBwb3J0IGJhY2t3YXJkIHRvIGdjYyA0LjMu Li4NClRob3VnaCBJIHN1cHBvc2UgZm9yIGdjYyA0LjMgLCB3ZSBjYW4ganVzdCBhbHdheXMgc3dp dGNoIHRvIHRoZSBzY2FsYXIgdmVyc2lvbiwgY2FuJ3Qgd2U/DQpTb21ldGhpbmcgbGlrZSB0aGF0 Og0KDQokIGNhdCAuL3RhdHJnMS5jDQojaW5jbHVkZSA8c3RkaW50Lmg+DQoNCnVpbnQ2NF90DQpm ZngxX2dlbih1aW50NjRfdCB4KQ0Kew0KICAgICAgICAvKiBzaG91bGQgY29udGFpbiBzY2FsYXIg Q1JDIGltcGxlbWVudGF0aW9uLiAqLw0KICAgICAgICByZXR1cm4gKHggKiB4KTsNCn0NCg0KI3By YWdtYSBHQ0MgdGFyZ2V0ICgic3NlNC4yIikNCg0KI2lmIGRlZmluZWQgX19TU0U0XzJfXw0KDQoj aW5jbHVkZSA8c21taW50cmluLmg+DQoNCnVpbnQ2NF90DQpmZngxX3NzZTQyKHVpbnQ2NF90IHgp DQp7DQogICAgICAgIHJldHVybiBfbW1fY3JjMzJfdTY0KHgsIHgpOw0KfQ0KDQojZWxzZQ0KDQp1 aW50NjRfdA0KZmZ4MV9zc2U0Mih1aW50NjRfdCB4KQ0Kew0KICAgICAgICAvKiBzaG91bGQgY29u dGFpbiBzY2FsYXIgQ1JDIGltcGxlbWVudGF0aW9uLiAqLw0KICAgICAgICByZXR1cm4gKHggKiB4 KTsNCn0NCg0KI2VuZGlmDQoNCktvbnN0YW50aW4NCg0KPiANCj4gTmVpbA0KPiANCj4gPiBLb25z dGFudGluDQo+ID4NCj4gPg0KPiA+ID4NCj4gPiA+IC9CcnVjZQ0K