Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:92707 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 88642 invoked from network); 25 Apr 2016 07:20:55 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 25 Apr 2016 07:20:55 -0000 Authentication-Results: pb1.pair.com smtp.mail=bogdan.andone@intel.com; spf=pass; sender-id=pass Authentication-Results: pb1.pair.com header.from=bogdan.andone@intel.com; sender-id=pass Received-SPF: pass (pb1.pair.com: domain intel.com designates 134.134.136.65 as permitted sender) X-PHP-List-Original-Sender: bogdan.andone@intel.com X-Host-Fingerprint: 134.134.136.65 mga03.intel.com Received: from [134.134.136.65] ([134.134.136.65:59836] helo=mga03.intel.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 89/60-17738-355CD175 for ; Mon, 25 Apr 2016 03:20:53 -0400 Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga103.jf.intel.com with ESMTP; 25 Apr 2016 00:20:48 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.24,531,1455004800"; d="scan'208";a="952226233" Received: from irsmsx104.ger.corp.intel.com ([163.33.3.159]) by fmsmga001.fm.intel.com with ESMTP; 25 Apr 2016 00:20:47 -0700 Received: from irsmsx155.ger.corp.intel.com (163.33.192.3) by IRSMSX104.ger.corp.intel.com (163.33.3.159) with Microsoft SMTP Server (TLS) id 14.3.248.2; Mon, 25 Apr 2016 08:20:45 +0100 Received: from irsmsx106.ger.corp.intel.com ([169.254.8.172]) by irsmsx155.ger.corp.intel.com ([169.254.14.51]) with mapi id 14.03.0248.002; Mon, 25 Apr 2016 08:20:45 +0100 To: 'Nikita Popov' CC: "internals@lists.php.net" Thread-Topic: [PHP-DEV] Lazy keys comparison during hash lookups Thread-Index: AdF5OqqPklKUV25aRaSccqn8QkELAwAAlHWAAAC45pAAAHfB8AAkJkCQAcnWDRAHcRLuQA== Date: Mon, 25 Apr 2016 07:20:44 +0000 Message-ID: <0ABC26E371A76440A370CFC5EB1056CC40F67165@IRSMSX106.ger.corp.intel.com> References: <0ABC26E371A76440A370CFC5EB1056CC40F0BA1F@irsmsx105.ger.corp.intel.com> <0ABC26E371A76440A370CFC5EB1056CC40F0BB53@irsmsx105.ger.corp.intel.com> <0ABC26E371A76440A370CFC5EB1056CC40F0BB89@irsmsx105.ger.corp.intel.com> <0ABC26E371A76440A370CFC5EB1056CC40F0BE4F@irsmsx105.ger.corp.intel.com> <0ABC26E371A76440A370CFC5EB1056CC40F13B94@irsmsx105.ger.corp.intel.com> In-Reply-To: <0ABC26E371A76440A370CFC5EB1056CC40F13B94@irsmsx105.ger.corp.intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [163.33.239.182] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: RE: [PHP-DEV] Lazy keys comparison during hash lookups From: bogdan.andone@intel.com ("Andone, Bogdan") DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogQW5kb25lLCBCb2dkYW4g W21haWx0bzpib2dkYW4uYW5kb25lQGludGVsLmNvbV0NCj4gU2VudDogRnJpZGF5LCBNYXJjaCAx OCwgMjAxNiAxMTo1OCBBTQ0KPiBUbzogJ05pa2l0YSBQb3BvdicgPG5pa2l0YS5wcHZAZ21haWwu Y29tPg0KPiBDYzogaW50ZXJuYWxzQGxpc3RzLnBocC5uZXQNCj4gU3ViamVjdDogUkU6IFtQSFAt REVWXSBMYXp5IGtleXMgY29tcGFyaXNvbiBkdXJpbmcgaGFzaCBsb29rdXBzDQo+IA0KPiA+IC0t LS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gRnJvbTogQW5kb25lLCBCb2dkYW4gW21haWx0 bzpib2dkYW4uYW5kb25lQGludGVsLmNvbV0NCj4gPiBTZW50OiBXZWRuZXNkYXksIE1hcmNoIDA5 LCAyMDE2IDk6MzMgQU0NCj4gPiBUbzogJ05pa2l0YSBQb3BvdicNCj4gPiBDYzogaW50ZXJuYWxz QGxpc3RzLnBocC5uZXQNCj4gPiBTdWJqZWN0OiBSRTogW1BIUC1ERVZdIExhenkga2V5cyBjb21w YXJpc29uIGR1cmluZyBoYXNoIGxvb2t1cHMNCj4gPg0KPiA+DQo+ID4NCj4gPiA+IC0tLS0tT3Jp Z2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gPiBGcm9tOiBBbmRvbmUsIEJvZ2RhbiBbbWFpbHRvOmJv Z2Rhbi5hbmRvbmVAaW50ZWwuY29tXQ0KPiA+ID4gU2VudDogVHVlc2RheSwgTWFyY2ggMDgsIDIw MTYgNDoxOSBQTQ0KPiA+ID4gVG86ICdOaWtpdGEgUG9wb3YnDQo+ID4gPiBDYzogaW50ZXJuYWxz QGxpc3RzLnBocC5uZXQNCj4gPiA+IFN1YmplY3Q6IFJFOiBbUEhQLURFVl0gTGF6eSBrZXlzIGNv bXBhcmlzb24gZHVyaW5nIGhhc2ggbG9va3Vwcw0KPiA+ID4NCj4gPiA+ID4gRnJvbTogTmlraXRh IFBvcG92IFttYWlsdG86bmlraXRhLnBwdkBnbWFpbC5jb21dDQo+ID4gPiA+IFNlbnQ6IFR1ZXNk YXksIE1hcmNoIDA4LCAyMDE2IDM6NDMgUE0NCj4gPiA+ID4gVG86IEFuZG9uZSwgQm9nZGFuDQo+ ID4gPiA+IENjOiBpbnRlcm5hbHNAbGlzdHMucGhwLm5ldA0KPiA+ID4gPiBTdWJqZWN0OiBSZTog W1BIUC1ERVZdIExhenkga2V5cyBjb21wYXJpc29uIGR1cmluZyBoYXNoIGxvb2t1cHMNCj4gPiA+ ID4gPk9uIFR1ZSwgTWFyIDgsIDIwMTYgYXQgMjoxOCBQTSwgTmlraXRhIFBvcG92DQo+ID4gPiA+ ID48bmlraXRhLnBwdkBnbWFpbC5jb20+DQo+ID4gPiB3cm90ZToNCj4gPiA+ID4gPj4gT24gVHVl LCBNYXIgOCwgMjAxNiBhdCAyOjAxIFBNLCBBbmRvbmUsIEJvZ2Rhbg0KPiA+ID4gPiA8Ym9nZGFu LmFuZG9uZUBpbnRlbC5jb20+IHdyb3RlOg0KPiA+ID4gPiA+PiBIaSBHdXlzLA0KPiA+ID4gPiA+ Pg0KPiA+ID4gPiA+PiBJIHdvdWxkIGxpa2UgdG8gcHJvcG9zZSBhIHNtYWxsIGNoYW5nZSBpbnRv IHRoZSBESkJYMzNBIGhhc2gNCj4gPiA+IGZ1bmN0aW9uDQo+ID4gPiA+IGFsZ29yaXRobSB3aGlj aCB3aWxsIG1ha2UgZWFzaWVyIHRoZSBrZXkgbWF0Y2hpbmcgdmFsaWRhdGlvbnMgaW4NCj4gPiBo YXNoDQo+ID4gPiA+IGxvb2t1cCBmdW5jdGlvbnMuDQo+ID4gPiA+ID4+DQo+ID4gPiA+ID4+IFRo ZSBjaGFuZ2UgYWRkcmVzc2VzIHRoZSBtb2R1bG8gOCB0YWlsaW5nIGJ5dGVzIG9mIHRoZSBrZXku IEZvcg0KPiA+ID4gdGhlc2UNCj4gPiA+ID4gYnl0ZXMgd2UgY2FuIHVzZSBhbiA4IGJpdCBzaGlm dCBpbnN0ZWFkIG9mIGEgNSBiaXQgc2hpZnQ7IHdlIGFsc28NCj4gPiBuZWVkDQo+ID4gPiA+IHRv IHJlcGxhY2UgdGhlIEFERCBieSBYT1IsIGluIG9yZGVyIHRvIGF2b2lkIGJ5dGUgbGV2ZWwgb3Zl cmZsb3dzLg0KPiA+ID4gVGhpcw0KPiA+ID4gPiBjaGFuZ2UgZW5zdXJlcyB0aGUgdW5pcXVlbmVz cyBvZiB0aGUgaGFzaCBmdW5jdGlvbiB0cmFuc2Zvcm1hdGlvbg0KPiA+IGZvcg0KPiA+ID4gPiB0 aGUgdGFpbGluZyBieXRlczogc3VwcG9zaW5nIHR3byBzdHJpbmdzIGhhdmUgc2FtZSBwYXJ0aWFs IGhhc2gNCj4gPiB2YWx1ZQ0KPiA+ID4gPiBmb3IgdGhlIGZpcnN0IE54OCBieXRlcywgZGlmZmVy ZW50IGNvbWJpbmF0aW9ucyBvZiB0YWlsaW5nDQo+ID4gY2hhcmFjdGVycw0KPiA+ID4gPiAod2l0 aCB0aGUgc2FtZSB0YWlsIHNpemUpIHdpbGwgYWx3YXlzIGdlbmVyYXRlIGRpZmZlcmVudCBrZXlz Lg0KPiA+ID4gPiA+PiBXZSBoYXZlIHRoZSBmb2xsb3dpbmcgY29uc2VxdWVuY2VzOg0KPiA+ID4g PiA+PiBJZiB0d28gc3RyaW5ncyBoYXZlOg0KPiA+ID4gPiA+PiAtIHNhbWUgaGFzaCB2YWx1ZSwN Cj4gPiA+ID4gPj4gLSBzYW1lIGxlbmd0aCwNCj4gPiA+ID4gPj4gLSBzYW1lIGJ5dGVzIGZvciB0 aGUgZmlyc3QgTng4IHBvc2l0aW9ucywgdGhlbiB0aGV5IGFyZSBlcXVhbCwNCj4gPiA+ID4gPj4g YW5kIHRoZSB0YWlsaW5nIGJ5dGVzIGNhbiBiZSBza2lwcGVkIGR1cmluZw0KPiA+ID4gPiBjb21w YXJpc29uLg0KPiA+ID4gPiA+Pg0KPiA+ID4gPiA+PiBUaGVyZSBpcyBhIHZpc2libGUgcGVyZm9y bWFuY2UgZ2FpbiBpZiB3ZSBhcHBseSB0aGlzIGFwcHJvYWNoDQo+ID4gPiA+ID4+IGFzDQo+ID4g d2UNCj4gPiA+ID4gY2FuIHVzZSBhIGxpZ2h0d2VpZ2h0IG1lbWNtcCgpIGltcGxlbWVudGF0aW9u IGJhc2VkIG9uIGxvbmdzDQo+ID4gPiBjb21wYXJpc29uDQo+ID4gPiA+IGFuZCBjb21wbGV0ZWx5 IGZyZWUgb2YgdGhlIGNvbXBsZXhpdHkgaW5jdXJyZWQgYnkgdGFpbGluZyBieXRlcy4NCj4gPiA+ ID4gRm9yIE1lZGlhd2lraSBJIGhhdmUgYSAxLjclwqAgcGVyZm9ybWFuY2UgZ2FpbiB3aGlsZSBX b3JkcHJlc3MNCj4gPiA+ID4gcmVwb3J0cw0KPiA+IDEuMiUNCj4gPiA+ID4gc3BlZWR1cCBvbiBI YXN3ZWxsLUVQLg0KPiA+ID4gPiA+Pg0KPiA+ID4gPiA+PiBMZXTigJlzIHRha2UgYSBzbWFsbCBl eGFtcGxlOg0KPiA+ID4gPiA+PiBTdXBwb3NlIHdlIGhhdmUgYSBrZXk94oCddGhpc19pc19hX2tl eV92YWx1ZeKAnS4NCj4gPiA+ID4gPj4gVGhlIGhhc2ggZnVuY3Rpb24gZm9yIHRoZcKgIGZpcnN0 IE4geCA4IGJ5ZXMgYXJlIGNvbXB1dGVkIGluIHRoZQ0KPiA+ID4gPiBvcmlnaW5hbCB3YXk7IHN1 cHBvc2Ug4oCcdGhpc19pc19hX2tleV92YeKAnSAoMTZieXRlcykgd2lsbCByZXR1cm4gYQ0KPiA+ ID4gcGFydGlhbA0KPiA+ID4gPiBoYXNoIHZhbHVlIGgxOyB0aGUgZmluYWwgaGFzaCB2YWx1ZSB3 aWxsIGJlIGNvbXB1dGVkIGJ5IHRoZQ0KPiA+IGZvbGxvd2luZw0KPiA+ID4gPiBzZXF1ZW5jZToN Cj4gPiA+ID4gPj4gaCA9ICgoaDE8PDgpIF4gaDEpIF4g4oCYbOKAmTsNCj4gPiA+ID4gPj4gaCA9 ICgoaDw8OCkgXiBoKSBeIOKAmHXigJk7DQo+ID4gPiA+ID4+IGggPSAoKGg8PDgpIF4gaCkgXiDi gJhl4oCZOw0KPiA+ID4gPiA+PiBvciwgaW4gb25seSBvbmUgb3BlcmF0aW9uOg0KPiA+ID4gPiA+ PiBoID0gKGgxPDwyNCkgXiAoaDE8PDE2KSBeIChoMTw8OCkgXiBoMSBeICjigJhs4oCZPDwxNikg Xg0KPiA+ICgo4oCYbOKAmV7igJh14oCZKTw8OCkNCj4gPiA+IF4NCj4gPiA+ID4gKOKAmGzigJle 4oCZdeKAmV7igJhl4oCZKQ0KPiA+ID4gPiA+PiBXZSBjYW4gc2VlIHRoYXQgaHQ9KOKAmGzigJk8 PDE2KSBeICgo4oCYbOKAmV7igJh14oCZKTw8OCkgXg0KPiA+ID4gKOKAmGzigJle4oCZdeKAmV7i gJhl4oCZKcKgIGNhbm5vdA0KPiA+ID4gPiBiZSBvYnRhaW5lZCBieSBhbnkgb3RoZXIgMyBjaGFy YWN0ZXJzIGxvbmcgdGFpbC4gVGhlIHN0YXRlbWVudCBpcw0KPiA+IG5vdA0KPiA+ID4gPiB0cnVl IGlmIHdlIHVzZSBBREQgaW5zdGVhZCBvZiBYT1IsIGFzIGV4dGVuZGVkIEFTQ0lJIGNoYXJhY3Rl cnMNCj4gPiBtaWdodA0KPiA+ID4gPiBnZW5lcmF0ZSBvdmVyZmxvd3MgYWZmZWN0aW5nIHRoZSBM U0Igb2YgdGhlIGhpZ2hlciBieXRlIGluIHRoZQ0KPiA+ID4gPiBoYXNoIHZhbHVlLg0KPiA+ID4g PiA+Pg0KPiA+ID4gPiA+PiBJIHB1c2hlZCBhIHB1bGwgcmVxdWVzdCBoZXJlOiBodHRwczovL2dp dGh1Yi5jb20vcGhwL3BocC0NCj4gPiA+ID4gc3JjL3B1bGwvMTc5My4gVW5mb3J0dW5hdGVseSBp dCBkb2VzIG5vdCBwYXNzIHRoZSB0cmF2aXMgdGVzdHMNCj4gPiBiZWNhdXNlDQo+ID4gPiA+IOKA nGh0bWxzcGVjaWFsY2hhcnMgZXRjIHVzZSBhIGdlbmVyYXRlZCB0YWJsZSB0aGF0IGFzc3VtZXMg dGhlDQo+ID4gPiA+IGN1cnJlbnQgaGFzaCBmdW5jdGlvbuKAnSBhcyBub3RpY2VkIGJ5IE5pa2l0 YS4NCj4gPiA+ID4gPj4NCj4gPiA+ID4gPj4gTGV0IG1lIGtub3cgeW91ciB0aG91Z2h0cyBvbiB0 aGlzIGlkZWEuDQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBIZXkgQm9nZGFuLA0KPiA+ID4gPiA+IFRo aXMgbG9va3MgbGlrZSBhbiBpbnRlcmVzdGluZyBpZGVhISBJJ20gc29tZXdoYXQgYXBwcmVoZW5z aXZlDQo+ID4gYWJvdXQNCj4gPiA+ID4gY291cGxpbmcgdGhpcyB0byBhIGNoYW5nZSBvZiB0aGUg aGFzaCBmdW5jdGlvbiwgZm9yIHR3byByZWFzb25zOg0KPiA+ID4gPiA+IGEpIFRoaXMgd2lsbCBt YWtlIGl0IG1vcmUgcHJvYmxlbWF0aWMgaWYgd2Ugd2FudCB0byBjaGFuZ2UgdGhlDQo+ID4gaGFz aA0KPiA+ID4gPiBmdW5jdGlvbiBpbiB0aGUgZnV0dXJlLCBlLmcuIGlmIHdlIHdhbnQgdG8gc3dp dGNoIHRvIFNpcEhhc2guDQo+ID4gPiA+ID4gYikgVGhlIHF1YWxpdHkgb2YgdGhlIG5ldyBoYXNo IGRpc3RyaWJ1dGlvbiBpcyBub3QgaW1tZWRpYXRlbHkNCj4gPiA+IGNsZWFyLA0KPiA+ID4gPiBi dXQgbGlrZWx5IG5vbi10cml2aWFsbHkgd2Vha2VyLg0KPiA+ID4gPiA+IFNvIEknbSB3b25kZXJp bmcgaWYgd2UgY2FuIGtlZXAgdGhlIGNvbmNlcHQgb2YgdXNpbmcgYQ0KPiA+ID4gPiA+IHplbmRf dWxvbmcNCj4gPiA+ID4gYWxpZ25lZCBtZW1jbXAgd2hpbGUgbGVhdmluZyB0aGUgaGFzaCBmdW5j dGlvbiBhbG9uZTogVGhlDQo+ID4gemVuZF9zdHJpbmcNCj4gPiA+ID4gYWxsb2NhdGlvbiBwb2xp Y3kgYWxyZWFkeSBhbGxvY2F0ZXMgdGhlIHN0cmluZyBkYXRhIGFsaWduZWQgYW5kDQo+ID4gcGFk ZGVkDQo+ID4gPiA+IHRvIHplbmRfdWxvbmcgYm91bmRhcmllcy4gSWYgd2Ugd2VyZSB0byBhZGRp dGlvbmFsbHkgZXhwbGljaXRseQ0KPiA+ID4gPiB6ZXJvDQo+ID4gPiBvdXQNCj4gPiA+ID4gdGhl IGxhc3QgYnl0ZSAodG8gYXZvaWQgdmFsZ3JpbmQgd2FybmluZ3MpIHdlIHNob3VsZCBiZSBhYmxl IHRvDQo+ID4gPiBjb21wYXJlDQo+ID4gPiA+IHRoZSBjaGFyYWN0ZXIgZGF0YSBvZiB0d28gemVu ZF9zdHJpbmdzIHVzaW5nIGEgemVuZF91bG9uZyBtZW1jbXAuDQo+ID4gVGhpcw0KPiA+ID4gPiB3 b3VsZCBoYXZlIHRoZSBhZGRpdGlvbmFsIGJlbmVmaXQgdGhhdCBpdCB3b3JrcyBmb3Igbm9ybWFs IHN0cmluZw0KPiA+ID4gPiBjb21wYXJpc29ucyAodW5yZWxhdGVkIHRvIGhhc2h0YWJsZXMpIGFz IHdlbGwuIE9uIHRoZSBvdGhlciBoYW5kLA0KPiA+IHRoaXMNCj4gPiA+ID4gaXMgb25seSBwb3Nz aWJsZSBmb3IgemVuZF9zdHJpbmcgdG8gemVuZF9zdHJpbmcgY29tcGFyaXNvbnMsIG5vdA0KPiA+ ID4gPiBmb3IgY29tcGFyaXNvbnMgd2l0aCBzdGF0aWMgc3RyaW5ncy4NCj4gPiA+ID4gPiBSZWdh cmRzLA0KPiA+ID4gPiBzL3plcm8gb3V0IHRoZSBsYXN0IGJ5dGUvemVybyBvdXQgdGhlIGxhc3Qg emVuZF91bG9uZyBJJ2QgbGlrZSB0bw0KPiA+ID4gPiBhZGQgYW5vdGhlciBpc3N1ZSB3aXRoIHJl bHlpbmcgb24gdGhlIGhhc2ggZm9yIHRoaXMNCj4gPiB3aGljaA0KPiA+ID4gSQ0KPiA+ID4gPiBq dXN0IHJlbWVtYmVyZWQ6IFdlIGN1cnJlbnRseSBhbHdheXMgc2V0IHRoZSB0b3AgYml0IG9mIHRo ZSBoYXNoDQo+ID4gPiA+IGZvciBzdHJpbmdzIChzZWUNCj4gPiA+IGh0dHA6Ly9seHIucGhwLm5l dC94cmVmL1BIUF9UUlVOSy9aZW5kL3plbmRfc3RyaW5nLmgjMzUxKSwNCj4gPiA+ID4gaW4gb3Jk ZXIgdG8gZW5zdXJlIHRoYXQgaGFzaGVzIGFyZSBuZXZlciB6ZXJvLiBUaGlzIG1ha2VzIHRoZSBo YXNoDQo+ID4gPiBub24tDQo+ID4gPiA+IHVuaXF1ZS4NCj4gPiA+ID4gTmlraXRhDQo+ID4gPiBZ ZWFoLi4uIEkgbWlzc2VkIHRoZSB0b3AgYml0IHNldCwgYnV0IEkgdGhpbmsgaXQgY291bGQgYmUg c29sdmVkDQo+ID4gPiBzb21laG93Lg0KPiA+IEFjdHVhbGx5IHNldHRpbmcgdGhlIHRvcCBiaXQg aXMgbm90IGFuIGlzc3VlLiBUaGUgdHJhbnNmb3JtYXRpb24NCj4gPiB1bmljaXR5IHNoYWxsIGJl IGVuc3VyZWQgZm9yIHRoZSB0YWlsaW5nIGJ5dGVzIG9ubHkgd2hpY2ggYXJlIHNoaWZ0ZWQNCj4g PiB0byB0aGUgbGVmdCBtYXhpbXVtIDcob24gNjRiaXRzKS8zKG9uIDMyYml0cykgcG9zaXRpb25z OyBzbyB0aGV5IHdpbGwNCj4gPiBuZXZlciByZWFjaCB0aGUgdG9wIGJ5dGUgYW5kIHNldHRpbmcg dGhlIHRvcCBiaXQgd2lsbCBub3QgaGFybSBpbg0KPiA+IHRlcm1zIG9mIHRhaWxpbmcgYnl0ZXMu DQo+ID4NCj4gPiA+IEltaG8gdGhlIHN0cm9uZ2VzdCByZWFzb24gYWdhaW5zdCB0aGUgcGF0Y2gg aXMgdGhlIGRlcGVuZGVuY3kNCj4gPiA+IGJldHdlZW4gdGhlIGhhc2ggZnVuY3Rpb24gYW5kIHRo ZSBrZXkgdmFsaWRhdGlvbiBtZXRob2QgYnV0IEkgaGF2ZQ0KPiA+ID4gdGhlIGltcHJlc3Npb24g dGhhdCB0aGlzIGlzIG5vdCBiZSB0aGUgbW9zdCBkaXJ0eSBoYWNrIGRlcGxveWVkIGV2ZXINCj4g PiA+IGluDQo+ID4gUEhQOw0KPiA+ID4gYW5kIEkgZG9uJ3Qga25vdyB2ZXJ5IHdlbGwgd2hhdCBp cyB0aGUgZGVncmVlIG9mIGNvbXByb21pc2UNCj4gPiA+IGFjY2VwdGFibGUgZm9yIDElIHNwZWVk dXAgOi0pDQo+ID4gT3RoZXJ3aXNlIHRoZSBjb25jZXJucyBhYm91dCB0aGUgcXVhbGl0eSBvZiB0 aGUgaGFzaCBmdW5jdGlvbiBhbmQgdGhlDQo+ID4gaW50ZW50aW9uIHRvIGNoYW5nZSBpdCB3aXRo IFNpcEhhc2ggb3Igc29tZXRoaW5nIGVsc2UsIEkgYW0gYWZyYWlkIGl0DQo+ID4gd2lsbCBub3Qg YnJpbmcgbXVjaCBpbiB0ZXJtcyBvZiBjb2xsaXNpb25zIHJlZHVjdGlvbnM7IHRoZSBpc3N1ZSBo ZXJlDQo+ID4gaXMgdGhlIGZhY3QgdGhhdCBoYXNoIGJ1Y2tldCBzZWxlY3Rpb24gdXNlcyBvbmx5 IHRoZSBsYXN0IGZldyBiaXRzIG9mDQo+ID4gdGhlIGhhc2ggdmFsdWUuIE5vdCBzdXJlIGhvdyBt dWNoIGNvdWxkIGhlbHAgaGVyZSBTaXBIYXNoLi4uDQo+ID4gSnVzdCBmb3IgZGVmZW5kaW5nIHRo ZSB0ZWNobmljYWwgZmVhc2liaWxpdHkgb2YgdGhpcyBQT0MgSSB0aGluayB0aGF0DQo+ID4gaW5q ZWN0aXZlIHRyYW5zZm9ybWF0aW9uIGZvciBsYXN0IHRhaWxpbmcgYnl0ZXMgY291bGQgYmUgZGVw bG95ZWQgb3Zlcg0KPiA+IHRoZW9yZXRpY2FsbHkgYW55IGhhc2ggZnVuY3Rpb24uDQo+ID4NCj4g PiBUaGFua3MsDQo+ID4gQm9nZGFuDQo+ID4NCj4gPiA+IE9uIHRoZSBvdGhlciBoYW5kLCB5b3Vy IGlkZWEgdG8gemVybyB0aGUgbGFzdCB6ZW5kX3Vsb25nIGluIHRoZQ0KPiA+ID4gemVuZF9zdHJp bmcgbG9va3MgbmljZS4gVGhlcmUgY291bGQgYmUgYW4gYWRkaXRpb25hbCBwb3RlbnRpYWwgZ2Fp bg0KPiA+IGFsc28NCj4gPiA+IGZyb20gbGlnaHR3ZWlnaHQgaW1wbGVtZW50YXRpb24gb2YgbWVt Y21wKCkuIEkgd2lsbCBnaXZlIGl0IGEgdHJ5IHRvDQo+ID4gc2VlDQo+ID4gPiBpZiBpdCBnZXRz IGJldHRlciByZXN1bHRzIHRoYW4gdGhlIGN1cnJlbnQgcHJvcG9zYWwuDQo+ID4gPiBJIGFzc3Vt ZSBhbGwgemVuZF9zdHJpbmcgYWxsb2NhdGlvbiBmdW5jdGlvbnMgYXJlIGxvY2F0ZWQgaW4NCj4g PiA+IHplbmRfc3RyaW5nLmgsIGNvcnJlY3Q/DQo+ID4gPg0KPiA+ID4gVGhhbmtzLA0KPiA+ID4g Qm9nZGFuDQo+IEkgd29ya2VkIGEgbGl0dGxlIGJpdCBvZiBhZGFwdGluZyB0aGUgemVuZCBzdHJp bmcgYWxsb2NhdGlvbiBmdW5jdGlvbnMgZm9yIGVuc3VyaW5nDQo+IGxvbmcgc2l6ZSBhbGlnbm1l bnQgZm9yIGJvdGggWmVuZCBhbmQgc3RhbmRhcmQgYWxsb2NhdGlvbiwgYW5kIGZvciB6ZXJvaW5n IG91dA0KPiB0aGUgZW5kIG9mIHRoZSBzdHJpbmdzLg0KPiBUaGUgc2FkIHN1cnByaXNlIHdhcyB0 byBkaXNjb3ZlciB0aGF0IHRoZXJlIGFyZSBvdGhlciA+MTAwIHNpdHVhdGlvbnMsIGluDQo+IGV4 dGVuc2lvbnMgbWFpbmx5LCB3aGVyZSB0aGUgemVuZCBzdHJpbmdzIGFyZSB0cnVuY2F0ZWQgYnkg ZGlyZWN0bHkgaW5zZXJ0aW5nICcwJw0KPiB0ZXJtaW5hdG9ycyBpbiB0aGUgbWlkZGxlIG9mIHN0 cmluZ3M7IGFsbCB0aGVzZSBzaXR1YXRpb25zIG5lZWRzIHRvIGJlIHJldmlzZWQgZm9yDQo+IHpl cm9pbmcgb3V0IHRoZSBlbnRpcmUgbWVtb3J5IHdvcmQgZW5jbG9zaW5nIHRoZSBlbmQgb2YgdGhl IHN0cmluZy4NCj4gSXQgd2lsbCBwcm9iYWJseSB0YWtlIGEgd2hpbGUgZm9yIHJldmlzaW5nIG1v c3Qgb2YgdGhlc2UgcGxhY2VzIGJlZm9yZSBoYXZpbmcgYQ0KPiBjb3JyZWN0IHJlYWwgbGlmZSBy dW4gZm9yIGJlaW5nIGFibGUgdG8gdmFsaWRhdGUgdGhlIFBPQy4NCj4gT3B0aW1pc3RpY2FsbHkg c3BlYWtpbmcsIHN1cHBvc2luZyBQT0Mgd2lsbCBzaG93IG1vdGl2YXRpbmcgcmVzdWx0cywgd2Ug d2lsbA0KPiBwcm9iYWJseSBuZWVkIHRvIGVuZm9yY2UgdGhlIFplbmQgaW50ZXJmYWNlIHdpdGgg cmVzcGVjdCB0byBzdHJpbmcgdHJ1bmNhdGlvbiAtDQo+IGF0IGxlYXN0IGEgZ2V0dGVyL3NldHRl ciBwYWlyIGZvciBaU1RSX0xFTiB3aGVyZSB0aGUgc2V0dGVyIHNob3VsZCBlbnN1cmUgYWxzbw0K PiBzeW5jaHJvbml6aW5nIHRoZSBzdHJpbmcgdGVybWluYXRpb24uDQo+IEkgc3VwcG9zZSBpdCB3 aWxsIGJlIGFuIGltcG9ydGFudCBlZmZvcnQgZm9yIHRoZSBjb21tdW5pdHkgYW5kIEkgYW0gbm90 IHN1cmUgaG93DQo+IG11Y2ggd2lsbGluZ25lc3Mgd2lsbCBiZSBpbiBpdC4gT24gdGhlIG90aGVy IHNpZGUsIHRoZSBvcmlnaW5hbGx5IHByb3Bvc2VkIHNvbHV0aW9uDQo+IGRvZXMgbm90IGhhdmUg YWxsIHRoaXMgZHJhd2JhY2tzIGFuZCBpdCBvZmZlcnMgMSUgc3BlZWR1cCBieSBhIGxvY2FsaXpl ZCBjaGFuZ2UNCj4gd2hpY2ggY291bGQgYmUgZWFzaWx5IHJldmVydGVkIGluIHRoZSBjYXNlIHdl IHdpbGwgZ2V0IGJldHRlciByZXN1bHRzIGJ5IGEgYmV0dGVyDQo+IHN0cmluZyBhbGlnbm1lbnQg aW4gZnV0dXJlLg0KPiANCj4gVGhhbmtzLA0KPiBCb2dkYW4NCkkgZmluYWxpemVkIHRoZSBQT0Mg Zm9yIGVuc3VyaW5nIHN0cmluZ3MgZ3JhbnVsYXJpdHkgdG8gemVuZF9sb25nIHNpemU7IHlvdSBj YW4gZmluZCBpdCBoZXJlOiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9ib2dkYW5hbmRvbmUvY2Zk ZTc2NGY2NDEzN2I1N2NlMmE2ZjRhOWI1MmU3NTcgDQpVbmZvcnR1bmF0ZWx5LCB0aGUgZWZmb3J0 IHRvIHplcm8tb3V0IHRoZSBlbmQgb2Ygc3RyaW5ncyBnZW5lcmF0ZXMgYW4gb3ZlcmhlYWQgaGln aGVyIHRoYW4gdGhlIGdhaW4gaW5jdXJyZWQgYnkgc2ltcGxpZmllZCB6ZW5kX21lbWNweV9hbGln bmVkIG1lbWNweSgpICYgbWVtY21wKCkgaW1wbGVtZW50YXRpb25zIC0gSSBkZWZpbmVkIGEgc2lt cGxlciB6ZW5kX21lbWNweV9hbGlnbmVkKCkgZnVuY3Rpb24gdXNlZCBpbiB6ZW5kX3N0cmluZy5o IGFuZCB6ZW5kX3Vsb25nX21lbWVxKCkgdXNlZCBpbiB6ZW5kX2hhc2guYyBpbmhlcml0ZWQgZnJv bSBteSBvcmlnaW5hbCBwbGFjZS4gT3ZlcmFsbCBJIHNlZSB+MSUgbG9zcyBvbiBXb3JwcmVzcyBv biBteSBwbGF0Zm9ybS4gSSBkaWRuJ3Qgc3BlbmQgdGltZSBpbiBmaW5lIHR1bmluZyBlYWNoIHBs YWNlIG5lZWRpbmcgY2hhbmdlcyBidXQgSSBkb24ndCBleHBlY3QgYSByZWFsIGRpZmZlcmVuY2Uu DQpQcm9iYWJseSB0aGlzIGlzIG5vdCB0aGUgd2F5IHRvIGdvIGFuZCBJIGZpbmFsaXplIHdpdGgg YSBsYXN0IGJ1enogZm9yIHRoZSBvcmlnaW5hbCBwYXRjaCBwcm9wb3NhbCA6KQ0KDQpUaGFua3Ms DQpCb2dkYW4NCg0K