From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7395DC4332F for ; Wed, 14 Dec 2022 00:19:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237212AbiLNATT (ORCPT ); Tue, 13 Dec 2022 19:19:19 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47182 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238766AbiLNASm (ORCPT ); Tue, 13 Dec 2022 19:18:42 -0500 Received: from mail-wm1-x32c.google.com (mail-wm1-x32c.google.com [IPv6:2a00:1450:4864:20::32c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4E7A71EACA for ; Tue, 13 Dec 2022 16:15:15 -0800 (PST) Received: by mail-wm1-x32c.google.com with SMTP id ja4-20020a05600c556400b003cf6e77f89cso2008052wmb.0 for ; Tue, 13 Dec 2022 16:15:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=in-reply-to:references:cc:to:from:content-language:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=BCTG2k0pMAQsoJzim10uhB/NfxMDA/rB++R1I/VJkQ0=; b=ThXKUYkfRqjBfbdoENuSohGqjfTHGNqfTuA8OfOHLpipo8x3ee8sMwD9YcN6Gsd+Wn B5HNsJ8yGBcPO3Ieq673QlfCscL3ef+JRQckPxMmPd4VXcO/dI8WhNSvbTmbJESHEV9w QnToHsBMSSEukPk6nFMcdKkn806RIGphUU08fh+vsPO1YWwV3xVQnnWeGj14/EiOx8aa BhYFV5rxkn9Ppjf4gN9xSJJ3SjieRkqNHyLmW2kZdp/oJjJo3O3i9d34ljlxOhvD5Dm0 49dZs0FwJsLfGS3YG83nIQcBLQAjnkHD0GyeT5OwA/6WrHRpr2DlnI8dWsiOkGOPKcIi 6o/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:references:cc:to:from:content-language:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=BCTG2k0pMAQsoJzim10uhB/NfxMDA/rB++R1I/VJkQ0=; b=NJrom2oPZi56wyMySo8IABBqXO1VWEus/dLVI8DDrhB+wjrkiPCxRwUxJMR/xtfxZC 3jAkuNYzdsnOV1lMpo9ppW60GClxoRLQM+uUi/gOPMVwtDch0Cya6UfQKl5Z5nt4Urjs d5vwemb7kX3ixGImS0UHO2oL0DFbSkU3M/Av2FJjJdB39lCk5ujUmmiXpAy/HFURBnKJ 7ajJfVYMMESa0R2e8E/feGzMb6TZr133C6WCfPu3L75n4SpOHUUNK4uoxQYiDAV/ldwP eiSJqS4F7cG/+f8Rg9aMoli7/p0iACstJRXTMXOTtkLaB08wYPE9W5DK1VazFKllfMLQ OX5Q== X-Gm-Message-State: ANoB5plV50JbB8czccRi7gek8Jw/ArWhKTqqtrAWpDfP/ufiKzbJ6o3V Gyrcq0jOghHSmHQTar8r5WtvMUZvOJ0= X-Google-Smtp-Source: AA0mqf4oogldnzj6sA9Vj8/IXCTvts98fAD/SYyH6Q6EjN1cW+yjsqHLFIqpx/jRWVe7N78+wIikyg== X-Received: by 2002:a05:600c:3c95:b0:3cf:e7c8:494 with SMTP id bg21-20020a05600c3c9500b003cfe7c80494mr17073811wmb.29.1670976913427; Tue, 13 Dec 2022 16:15:13 -0800 (PST) Received: from [192.168.0.160] ([170.253.36.171]) by smtp.gmail.com with ESMTPSA id q20-20020a056000137400b0024287d9d4a8sm1079663wrz.74.2022.12.13.16.15.12 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 13 Dec 2022 16:15:12 -0800 (PST) Message-ID: <3756b985-84f8-75c9-a9f1-23940c4032a0@gmail.com> Date: Wed, 14 Dec 2022 01:14:58 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.5.1 Subject: Re: [PATCH v3 0/1] Rewritten page for string-copying functions Content-Language: en-US From: Alejandro Colomar To: linux-man@vger.kernel.org, Martin Sebor , "G. Branden Robinson" , Douglas McIlroy , Jakub Wilk Cc: Alejandro Colomar References: <20221212230044.86105-1-alx@kernel.org> <20221214000341.39846-1-alx@kernel.org> In-Reply-To: <20221214000341.39846-1-alx@kernel.org> Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="------------x7h9J40ZTwwLgdA034iqLu2P" Precedence: bulk List-ID: X-Mailing-List: linux-man@vger.kernel.org This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --------------x7h9J40ZTwwLgdA034iqLu2P Content-Type: multipart/mixed; boundary="------------NA53WMELDqCsxX0t0HBpDEqv"; protected-headers="v1" From: Alejandro Colomar To: linux-man@vger.kernel.org, Martin Sebor , "G. Branden Robinson" , Douglas McIlroy , Jakub Wilk Cc: Alejandro Colomar Message-ID: <3756b985-84f8-75c9-a9f1-23940c4032a0@gmail.com> Subject: Re: [PATCH v3 0/1] Rewritten page for string-copying functions References: <20221212230044.86105-1-alx@kernel.org> <20221214000341.39846-1-alx@kernel.org> In-Reply-To: <20221214000341.39846-1-alx@kernel.org> --------------NA53WMELDqCsxX0t0HBpDEqv Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: base64 DQoNCk9uIDEyLzE0LzIyIDAxOjAzLCBBbGVqYW5kcm8gQ29sb21hciB3cm90ZToNCj4gDQo+ IEhpIQ0KPiANCj4gSSd2ZSB3cml0dGVuIGEgbmV3IG1hbnVhbCBwYWdlIGZvciBkb2N1bWVu dGluZyBzdHJpbmctY29weWluZyBmdW5jdGlvbnMNCj4gc28gdGhhdCBpdCdzIGNsZWFyIHdo YXQncyB0aGUgcHVycG9zZSBvZiBlYWNoIG9mIHRoZW0uICBJdCBtYXkgZGlmZmVyDQo+IGZy b20gdGhlIG9yaWdpbmFsIGRlc2lnbiBvZiB0aGUgZnVuY3Rpb25zLCBzaW5jZSBteSBndWVz cyBmb3Igc2V2ZXJhbCBvZg0KPiB0aGVtIGlzIHNpbXBseSB0aGF0IHRoZXkgd2VyZSBtaXNk ZXNpZ25lZC4gIEhvd2V2ZXIsIGFmdGVyIGludmVzdGlnYXRpbmcNCj4gdGhlIG9wZXJhdGlv biB0aGF0IHRoZXkgcGVyZm9ybSBvbiBieXRlcywgSSd2ZSBjb21lIHVwIHdpdGggYSBzdG9y eSB0aGF0DQo+IGNhbiBtYWtlIHNlbnNlIG9mIGZ1bmN0aW9ucyB0aGF0IHdlcmUgb25jZSBi ZWxpZXZlZCB0byBiZSBicm9rZW4gYnkNCj4gbWFueS4gIEluIGZhY3QsIG15IGNvbmNsdXNp b24gYWZ0ZXIgd3JpdGluZyB0aGUgcGFnZSBpcyB0aGF0IG9ubHkgb25lDQo+IGZ1bmN0aW9u IGlzIHJlYWxseSB1c2VsZXNzOg0KPiANCj4gLSAgc3RybmNweSgzKTogIHN0cG5jcHkoMykg aXMgX2Fsd2F5c18gYmV0dGVyLg0KPiANCj4gVGhlIG90aGVycyBkZXBlbmQgb24gdGhlIHBy b2dyYW0uICBJZiB5b3UgZG9uJ3QgY2FyZSBhdCBhbGwgYWJvdXQNCj4gcGVyZm9ybWFuY2Ug YW5kIFNobGVtaWVsIGlzIGEgZnJpZW5kIG9mIHlvdXJzLCB0aGVuIHJjcHkgYW5kIFtybl1j YXQNCj4gYXJlIHlvdXIgZnJpZW5kcy4gIElmIHlvdSBkb24ndCBsaWtlIFNobGVtaWVsLCBh bmQgZG9uJ3QgbWluZCBzbGlnaHRseQ0KPiBtb3JlIGNvbXBsZXggY29kZSwgeW91J2xsIGdv IGZvciAncCcgZnVuY3Rpb25zLg0KPiANCj4gQW5kIHNvIG9uLiAgSSB3b24ndCBzcG9pbCB0 aGUgcGFnZSBtb3JlLg0KPiANCj4gQmFzaWNhbGx5IEkgd2FudCB0byBlbmQgd2l0aCB0aGlz IHNpdHVhdGlvbiB3aGVyZSBhIGZ1bmN0aW9uIGxpa2UNCj4gc3RybmNweSgzKSBpcyBkcmVh ZGVkIGJ5IHNvbWUgYmVjYXVzZSBpdCBsb29rcyBicm9rZW4gKG15c2VsZiB0aG91Z2h0DQo+ IHRoYXQgZm9yIGEgbG9uZyB0aW1lKSwgYW5kIG90aGVyIHdobyBkb24ndCBldmVuIGtub3cg aXQgbWlzdXNlIGl0IGZvcg0KPiB3aGF0IGl0IHNob3VsZG4ndCBiZSB1c2VmdWwsIHdoaWNo IGlzIGV2ZW4gd29yc2UuICBPciB3aGVyZSBwcm9ncmFtbWVycw0KPiB0aGluayB0aGF0IHN0 cm5jcHkoMykgYW5kIHN0cm5jYXQoMykgaGF2ZSBhbnkgcmVsYXRpb25zaGlwIGF0IGFsbCAo dGhleQ0KPiBkb24ndCkuDQo+IA0KPiBCZWxvdyBnb2VzIHRoZSBmb3JtYXR0ZWQgcGFnZS4g IFBsZWFzZSByZXZpZXcgaW5kZXBlbmRlbnRseSBvZiBpdCBiZWluZw0KPiBpbiBzdHJjcHko Mykgb3Igc3RyaW5nX2NvcHkoNyksIGFuZCBhZGRyZXNzIHRoYXQgYXMgYSBzZXBhcmF0ZSBp c3N1ZQ0KPiAoYnV0IG9mIGNvdXJzZSBmZWVsIGZyZWUgdG8gY292ZXIgaXQsIGFuZCBhbnkg b3RoZXIgaXNzdWVzKS4NCj4gDQo+IA0KPiBDaGVlcnMsDQo+IA0KPiBBbGV4DQo+IA0KPiAN Cj4gQWxlamFuZHJvIENvbG9tYXIgKDEpOg0KPiAgICBzdHJjcHkuMzogUmV3cml0ZSBwYWdl IHRvIGRvY3VtZW50IGFsbCBzdHJpbmctY29weWluZyBmdW5jdGlvbnMNCj4gDQo+ICAgbWFu My9zdHJjcHkuMyB8IDEwNTggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrLS0tLQ0KPiAgIDEgZmlsZSBjaGFuZ2VkLCA5NzAgaW5zZXJ0aW9ucygrKSwg ODggZGVsZXRpb25zKC0pDQo+IA0KPiANCj4gc3RyY3B5KDMpICAgICAgICAgICAgICAgICAg TGlicmFyeSBGdW5jdGlvbnMgTWFudWFsICAgICAgICAgICAgICAgICAgc3RyY3B5KDMpDQo+ IA0KPiBOQU1FDQo+ICAgICAgICAgc3RwY3B5LCAgc3RyY3B5LCAgc3RyY2F0LCBzdHBlY3B5 LCBzdHBlY3B5eCwgc3RybGNweSwgc3RybGNhdCwgc3Ryc2NweSwNCj4gICAgICAgICBzdHBu Y3B5LCBzdHJuY3B5LCB1c3RyMnN0cCwgc3RybmNhdCwgbWVtcGNweSAtIGNvcHkgc3RyaW5n cyBhbmQgY2hhcmFj4oCQDQo+ICAgICAgICAgdGVyIHNlcXVlbmNlcw0KPiANCj4gTElCUkFS WQ0KPiAgICAgICAgIHN0cGNweSgzKQ0KPiAgICAgICAgIHN0cmNweSgzKSwgc3RyY2F0KDMp DQo+ICAgICAgICAgc3RwbmNweSgzKQ0KPiAgICAgICAgIHN0cm5jcHkoMykNCj4gICAgICAg ICBzdHJuY2F0KDMpDQo+ICAgICAgICAgbWVtcGNweSgzKQ0KPiAgICAgICAgICAgICAgICBT dGFuZGFyZCBDIGxpYnJhcnkgKGxpYmMsIC1sYykNCj4gDQo+ICAgICAgICAgc3RwZWNweSgz KSwgc3RwZWNweXgoMykNCj4gICAgICAgICAgICAgICAgTm90IHByb3ZpZGVkIGJ5IGFueSBs aWJyYXJ5Lg0KPiANCj4gICAgICAgICBzdHJsY3B5KDMpLCBzdHJsY2F0KDMpDQo+ICAgICAg ICAgICAgICAgIFV0aWxpdHkgZnVuY3Rpb25zIGZyb20gQlNEIHN5c3RlbXMgKGxpYmJzZCwg LWxic2QpDQo+IA0KPiAgICAgICAgIHN0cnNjcHkoMykNCj4gICAgICAgICAgICAgICAgTm90 IHByb3ZpZGVkIGJ5IGFueSBsaWJyYXJ5LiAgSXQgIGlzICBhICBMaW51eCAga2VybmVsICBp bnRlcm5hbA0KPiAgICAgICAgICAgICAgICBmdW5jdGlvbi4NCj4gDQo+IFNZTk9QU0lTDQo+ ICAgICAgICAgI2luY2x1ZGUgPHN0cmluZy5oPg0KPiANCj4gICAgIFN0cmluZ3MNCj4gICAg ICAgICAvLyBDaGFpbuKAkGNvcHkgYSBzdHJpbmcuDQo+ICAgICAgICAgY2hhciAqc3RwY3B5 KGNoYXIgKnJlc3RyaWN0IGRzdCwgY29uc3QgY2hhciAqcmVzdHJpY3Qgc3JjKTsNCj4gDQo+ ICAgICAgICAgLy8gQ29weS9jb25jYXRlbmF0ZSBhIHN0cmluZy4NCj4gICAgICAgICBjaGFy ICpzdHJjcHkoY2hhciAqcmVzdHJpY3QgZHN0LCBjb25zdCBjaGFyICpyZXN0cmljdCBzcmMp Ow0KPiAgICAgICAgIGNoYXIgKnN0cmNhdChjaGFyICpyZXN0cmljdCBkc3QsIGNvbnN0IGNo YXIgKnJlc3RyaWN0IHNyYyk7DQo+IA0KPiAgICAgICAgIC8vIENoYWlu4oCQY29weSBhIHN0 cmluZyB3aXRoIHRydW5jYXRpb24uDQo+ICAgICAgICAgY2hhciAqc3RwZWNweShjaGFyICpk c3QsIGNoYXIgcGFzdF9lbmRbMF0sIGNvbnN0IGNoYXIgKnJlc3RyaWN0IHNyYyk7DQo+IA0K PiAgICAgICAgIC8vIENoYWlu4oCQY29weSBhIHN0cmluZyB3aXRoIHRydW5jYXRpb24gYW5k IFNJR1NFR1Ygb24gVUIuDQo+ICAgICAgICAgY2hhciAqc3RwZWNweXgoY2hhciAqZHN0LCBj aGFyIHBhc3RfZW5kWzBdLCBjb25zdCBjaGFyICpyZXN0cmljdCBzcmMpOw0KPiANCj4gICAg ICAgICAvLyBDb3B5L2NvbmNhdGVuYXRlIGEgc3RyaW5nIHdpdGggdHJ1bmNhdGlvbiBhbmQg U0lHU0VHViBvbiBVQi4NCj4gICAgICAgICBzaXplX3Qgc3RybGNweShjaGFyIGRzdFtyZXN0 cmljdCAuc3pdLCBjb25zdCBjaGFyICpyZXN0cmljdCBzcmMsDQo+ICAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZV90IHN6KTsNCj4gICAgICAgICBzaXplX3Qgc3RybGNhdChjaGFyIGRz dFtyZXN0cmljdCAuc3pdLCBjb25zdCBjaGFyICpyZXN0cmljdCBzcmMsDQo+ICAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZV90IHN6KTsNCj4gDQo+ICAgICAgICAgLy8gQ29weSBhIHN0 cmluZyB3aXRoIHRydW5jYXRpb24uDQo+ICAgICAgICAgc3NpemVfdCBzdHJzY3B5KGNoYXIg ZHN0W3Jlc3RyaWN0IC5zel0sIGNvbnN0IGNoYXIgc3JjW3Jlc3RyaWN0IC5zel0sDQo+ICAg ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHN6KTsNCj4gDQo+ICAgICBOdWxs4oCQcGFk ZGVkIGNoYXJhY3RlciBzZXF1ZW5jZXMNCj4gICAgICAgICAvLyBaZXJvIGEgZml4ZWTigJB3 aWR0aCBidWZmZXIsIGFuZA0KPiAgICAgICAgIC8vIGNvcHkgYSBzdHJpbmcgd2l0aCB0cnVu Y2F0aW9uIGludG8gYSBjaGFyYWN0ZXIgc2VxdWVuY2UuDQo+ICAgICAgICAgY2hhciAqc3Rw bmNweShjaGFyIGRzdFtyZXN0cmljdCAuc3pdLCBjb25zdCBjaGFyICpyZXN0cmljdCBzcmMs DQo+ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHN6KTsNCj4gDQo+ICAgICAgICAg Ly8gWmVybyBhIGZpeGVk4oCQd2lkdGggYnVmZmVyLCBhbmQNCj4gICAgICAgICAvLyBjb3B5 IGEgc3RyaW5nIHdpdGggdHJ1bmNhdGlvbiBpbnRvIGEgY2hhcmFjdGVyIHNlcXVlbmNlLg0K PiAgICAgICAgIGNoYXIgKnN0cm5jcHkoY2hhciBkZXN0W3Jlc3RyaWN0IC5zel0sIGNvbnN0 IGNoYXIgKnJlc3RyaWN0IHNyYywNCj4gICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg c3opOw0KPiANCj4gICAgICAgICAvLyBDaGFpbuKAkGNvcHkgYSBudWxs4oCQcGFkZGVkIGNo YXJhY3RlciBzZXF1ZW5jZSBpbnRvIGEgc3RyaW5nLg0KPiAgICAgICAgIGNoYXIgKnVzdHIy c3RwKGNoYXIgKnJlc3RyaWN0IGRzdCwgY29uc3QgY2hhciBzcmNbcmVzdHJpY3QgLnN6XSwN Cj4gICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc3opOw0KPiANCj4gICAgICAgICAv LyBDb25jYXRlbmF0ZSBhIG51bGzigJBwYWRkZWQgY2hhcmFjdGVyIHNlcXVlbmNlIGludG8g YSBzdHJpbmcuDQo+ICAgICAgICAgY2hhciAqc3RybmNhdChjaGFyICpyZXN0cmljdCBkc3Qs IGNvbnN0IGNoYXIgc3JjW3Jlc3RyaWN0IC5zel0sDQo+ICAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZV90IHN6KTsNCj4gDQo+ICAgICBNZWFzdXJlZCBjaGFyYWN0ZXIgc2VxdWVuY2Vz DQo+ICAgICAgICAgLy8gQ2hhaW7igJBjb3B5IGEgbWVhc3VyZWQgY2hhcmFjdGVyIHNlcXVl bmNlLg0KPiAgICAgICAgIHZvaWQgKm1lbXBjcHkodm9pZCAqcmVzdHJpY3QgZHN0LCBjb25z dCB2b2lkIHNyY1tyZXN0cmljdCAubGVuXSwNCj4gICAgICAgICAgICAgICAgICAgICAgICBz aXplX3QgbGVuKTsNCj4gDQo+ICAgICBGZWF0dXJlIFRlc3QgTWFjcm8gUmVxdWlyZW1lbnRz IGZvciBnbGliYyAoc2VlIGZlYXR1cmVfdGVzdF9tYWNyb3MoNykpOg0KPiANCj4gICAgICAg ICBzdHBjcHkoMyksIHN0cG5jcHkoMyk6DQo+ICAgICAgICAgICAgIFNpbmNlIGdsaWJjIDIu MTA6DQo+ICAgICAgICAgICAgICAgICBfUE9TSVhfQ19TT1VSQ0UgPj0gMjAwODA5TA0KPiAg ICAgICAgICAgICBCZWZvcmUgZ2xpYmMgMi4xMDoNCj4gICAgICAgICAgICAgICAgIF9HTlVf U09VUkNFDQo+IA0KPiAgICAgICAgIG1lbXBjcHkoMyk6DQo+ICAgICAgICAgICAgIF9HTlVf U09VUkNFDQo+IA0KPiBERVNDUklQVElPTg0KPiAgICAgVGVybXMgKGFuZCBhYmJyZXZpYXRp b25zKQ0KPiAgICAgICAgIHN0cmluZyAoc3RyKQ0KPiAgICAgICAgICAgICAgICBpcyAgYSBz ZXF1ZW5jZSBvZiB6ZXJvIG9yIG1vcmUgbm9u4oCQbnVsbCBjaGFyYWN0ZXJzIGZvbGxvd2Vk IGJ5IGENCj4gICAgICAgICAgICAgICAgbnVsbCBieXRlLg0KPiANCj4gICAgICAgICBjaGFy YWN0ZXIgc2VxdWVuY2UgKHVzdHIpDQo+ICAgICAgICAgICAgICAgIGlzIGEgc2VxdWVuY2Ug b2YgemVybyBvciBtb3JlIG5vbuKAkG51bGwgIGNoYXJhY3RlcnMuICAgQSAgcHJvZ3JhbQ0K PiAgICAgICAgICAgICAgICBzaG91bGQgIG5ldmVyICB1c2EgIGEgIGNoYXJhY3RlciAgc2Vx dWVuY2Ugd2hlcmUgYSBzdHJpbmcgaXMgcmXigJANCj4gICAgICAgICAgICAgICAgcXVpcmVk LiAgSG93ZXZlciwgd2l0aCBhcHByb3ByaWF0ZSBjYXJlLCBhIHN0cmluZyBjYW4gYmUgdXNl ZCBpbg0KPiAgICAgICAgICAgICAgICB0aGUgcGxhY2Ugb2YgYSBjaGFyYWN0ZXIgc2VxdWVu Y2UuDQo+IA0KPiAgICAgICAgICAgICAgICBudWxs4oCQcGFkZGVkIGNoYXJhY3RlciBzZXF1 ZW5jZQ0KPiAgICAgICAgICAgICAgICAgICAgICAgQ2hhcmFjdGVyICBzZXF1ZW5jZXMgIGNh biAgYmUgIGNvbnRhaW5lZCAgaW4gIGZpeGVk4oCQd2lkdGgNCj4gICAgICAgICAgICAgICAg ICAgICAgIGJ1ZmZlcnMsIHdoaWNoIGNvbnRhaW4gcGFkZGluZyBudWxsIGJ5dGVzIGFmdGVy IHRoZSBjaGFy4oCQDQo+ICAgICAgICAgICAgICAgICAgICAgICBhY3RlciAgc2VxdWVuY2Us ICB0byAgZmlsbCB0aGUgcmVzdCBvZiB0aGUgYnVmZmVyIHdpdGhvdXQNCj4gICAgICAgICAg ICAgICAgICAgICAgIGFmZmVjdGluZyB0aGUgY2hhcmFjdGVyIHNlcXVlbmNlOyBob3dldmVy LCB0aG9zZSAgcGFkZGluZw0KPiAgICAgICAgICAgICAgICAgICAgICAgbnVsbCBieXRlcyBh cmUgbm90IHBhcnQgb2YgdGhlIGNoYXJhY3RlciBzZXF1ZW5jZS4NCj4gDQo+ICAgICAgICAg ICAgICAgIG1lYXN1cmVkIGNoYXJhY3RlciBzZXF1ZW5jZQ0KPiAgICAgICAgICAgICAgICAg ICAgICAgQ2hhcmFjdGVyIHNlcXVlbmNlIGRlbGltaXRlZCBieSBpdHMgbGVuZ3RoLg0KPiAN Cj4gICAgICAgICBsZW5ndGggKGxlbikNCj4gICAgICAgICAgICAgICAgaXMgIHRoZSAgbnVt YmVyICBvZiBub27igJBudWxsIGNoYXJhY3RlcnMgaW4gYSBzdHJpbmcgb3IgY2hhcmFjdGVy DQo+ICAgICAgICAgICAgICAgIHNlcXVlbmNlLiAgIEl0ICBpcyAgdGhlICByZXR1cm4gIHZh bHVlICBvZiAgc3RybGVuKHN0cikgIGFuZCAgb2YNCj4gICAgICAgICAgICAgICAgc3Rybmxl bih1c3RyLCBzeikuDQo+IA0KPiAgICAgICAgIHNpemUgKHN6KQ0KPiAgICAgICAgICAgICAg ICByZWZlcnMgIHRvICB0aGUgIGVudGlyZSBidWZmZXIgd2hlcmUgdGhlIHN0cmluZyBvciBj aGFyYWN0ZXIgc2XigJANCj4gICAgICAgICAgICAgICAgcXVlbmNlIGlzIGNvbnRhaW5lZC4N Cj4gDQo+ICAgICAgICAgZW5kICAgIGlzIHRoZSBuYW1lIG9mIGEgcG9pbnRlciB0byAgdGhl ICB0ZXJtaW5hdGluZyAgbnVsbCAgYnl0ZSAgb2YgIGENCj4gICAgICAgICAgICAgICAgc3Ry aW5nLCBvciBhIHBvaW50ZXIgdG8gb25lIHBhc3QgdGhlIGxhc3QgY2hhcmFjdGVyIG9mIGEg Y2hhcmFj4oCQDQo+ICAgICAgICAgICAgICAgIHRlciAgc2VxdWVuY2UuICBUaGlzIGlzIHRo ZSByZXR1cm4gdmFsdWUgb2YgZnVuY3Rpb25zIHRoYXQgYWxsb3cNCj4gICAgICAgICAgICAg ICAgY2hhaW5pbmcuICBJdCBpcyBlcXVpdmFsZW50IHRvICZzdHJbbGVuXS4NCj4gDQo+ICAg ICAgICAgcGFzdF9lbmQNCj4gICAgICAgICAgICAgICAgaXMgdGhlIG5hbWUgb2YgYSBwb2lu dGVyIHRvIG9uZSBwYXN0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciAgdGhhdA0KPiAgICAgICAg ICAgICAgICBjb250YWlucyAgYSAgc3RyaW5nICBvciBjaGFyYWN0ZXIgc2VxdWVuY2UuICBJ dCBpcyBlcXVpdmFsZW50IHRvDQo+ICAgICAgICAgICAgICAgICZzdHJbc3pdLiAgSXQgaXMg dXNlZCBhcyBhIHNlbnRpbmVsIHZhbHVlLCB0byBiZSBhYmxlICB0byAgdHJ1buKAkA0KPiAg ICAgICAgICAgICAgICBjYXRlICBzdHJpbmdzICBvciBjaGFyYWN0ZXIgc2VxdWVuY2VzIGlu c3RlYWQgb2Ygb3ZlcnJ1bm5pbmcgdGhlDQo+ICAgICAgICAgICAgICAgIGNvbnRhaW5pbmcg YnVmZmVyLg0KPiANCj4gICAgIENvcHksIGNvbmNhdGVuYXRlLCBhbmQgY2hhaW7igJBjb3B5 DQo+ICAgICAgICAgT3JpZ2luYWxseSwgdGhlcmUgd2FzIGEgZGlzdGluY3Rpb24gYmV0d2Vl biAgZnVuY3Rpb25zICB0aGF0ICBjb3B5ICBhbmQNCj4gICAgICAgICB0aG9zZSAgdGhhdCAg Y29uY2F0ZW5hdGUuICBIb3dldmVyLCBuZXdlciBmdW5jdGlvbnMgdGhhdCBjb3B5IHdoaWxl IGFs4oCQDQo+ICAgICAgICAgbG93aW5nIGNoYWluaW5nIGNvdmVyIGJvdGggdXNlIGNhc2Vz IHdpdGggYSBzaW5nbGUgQVBJLiAgVGhleSBhcmUgIGFsc28NCj4gICAgICAgICBhbGdvcml0 aG1pY2FsbHkgIGZhc3Rlciwgc2luY2UgdGhleSBkb27igJl0IG5lZWQgdG8gc2VhcmNoIGZv ciB0aGUgZW5kIG9mDQo+ICAgICAgICAgdGhlIGV4aXN0aW5nIHN0cmluZy4gIEhvd2V2ZXIs IGZ1bmN0aW9ucyB0aGF0IGNvbmNhdGVuYXRlIGhhdmUgIGEgIG11Y2gNCj4gICAgICAgICBz aW1wbGVyICB1c2UsICBzbyBpZiBwZXJmb3JtYW5jZSBpcyBub3QgaW1wb3J0YW50LCBpdCBj YW4gbWFrZSBzZW5zZSB0bw0KPiAgICAgICAgIHVzZSB0aGVtIGZvciBpbXByb3ZpbmcgcmVh ZGFiaWxpdHkuDQo+IA0KPiAgICAgICAgIFRvIGNoYWluIGNvcHkgZnVuY3Rpb25zLCB0aGV5 IG5lZWQgdG8gcmV0dXJuICBhICBwb2ludGVyICB0byAgdGhlICBlbmQuDQo+ICAgICAgICAg VGhhdOKAmXMgIGEgIGJ5cHJvZHVjdCAgb2YgIHRoZSAgY29weSBvcGVyYXRpb24sIHNvIGl0 IGhhcyBubyBwZXJmb3JtYW5jZQ0KPiAgICAgICAgIGNvc3RzLiAgRnVuY3Rpb25zIHRoYXQg cmV0dXJuIHN1Y2ggYSBwb2ludGVyLCBhbmQgdGh1cyBjYW4gYmUgIGNoYWluZWQsDQo+ICAg ICAgICAgaGF2ZSAgbmFtZXMgIG9mIHRoZSBmb3JtICpzdHAqKCkgb3IgKm1lbXAqKCksIHNp bmNlIGl04oCZcyBhbHNvIGNvbW1vbiB0bw0KPiAgICAgICAgIG5hbWUgdGhlIHBvaW50ZXIg anVzdCBwLg0KPiANCj4gICAgICAgICBDaGFpbuKAkGNvcHlpbmcgZnVuY3Rpb25zIHRoYXQg dHJ1bmNhdGUgc2hvdWxkIGFjY2VwdCBhICBwb2ludGVyICB0byAgb25lDQo+ICAgICAgICAg cGFzdCAgdGhlICBlbmQgIG9mICB0aGUgIGRlc3RpbmF0aW9uIGJ1ZmZlciwgYW5kIGhhdmUg bmFtZXMgb2YgdGhlIGZvcm0NCj4gICAgICAgICAqc3RwZSooKS4gIFRoaXMgYWxsb3dzIG5v dCBoYXZpbmcgdG8gcmVjYWxjdWxhdGUgdGhlIHJlbWFpbmluZyBzaXplIGFm4oCQDQo+ICAg ICAgICAgdGVyIGVhY2ggY2FsbC4NCj4gDQo+ICAgICBUcnVuY2F0ZSBvciBub3Q/DQo+ICAg ICAgICAgVGhlIGZpcnN0IHRoaW5nIHRvIG5vdGUgaXMgdGhhdCAgcHJvZ3JhbW1lcnMgIHNo b3VsZCAgYmUgIGNhcmVmdWwgIHdpdGgNCj4gICAgICAgICBidWZmZXJzLCAgc28gIHRoZXkg IGFsd2F5cyBoYXZlIHRoZSBjb3JyZWN0IHNpemUsIGFuZCB0cnVuY2F0aW9uIGlzIG5vdA0K PiAgICAgICAgIG5lY2Vzc2FyeS4NCj4gDQo+ICAgICAgICAgSW4gbW9zdCBjYXNlcywgdHJ1 bmNhdGlvbiBpcyBub3QgZGVzaXJlZCwgYW5kIGl0IGlzIHNpbXBsZXIgdG8ganVzdCAgZG8N Cj4gICAgICAgICB0aGUgY29weS4gIFNpbXBsZXIgY29kZSBpcyBzYWZlciBjb2RlLiAgUHJv Z3JhbW1pbmcgYWdhaW5zdCBwcm9ncmFtbWluZw0KPiAgICAgICAgIG1pc3Rha2VzICBieSAg YWRkaW5nIG1vcmUgY29kZSBqdXN0IGFkZHMgbW9yZSBwb2ludHMgd2hlcmUgbWlzdGFrZXMg Y2FuDQo+ICAgICAgICAgYmUgbWFkZS4NCj4gDQo+ICAgICAgICAgTm93YWRheXMsIGNvbXBp bGVycyBjYW4gZGV0ZWN0IG1vc3QgIHByb2dyYW1tZXIgIGVycm9ycyAgd2l0aCAgZmVhdHVy ZXMNCj4gICAgICAgICBsaWtlICBjb21waWxlciAgd2FybmluZ3MsICBzdGF0aWMgIGFuYWx5 emVycywgIGFuZCBfRk9SVElGWV9TT1VSQ0UgKHNlZQ0KPiAgICAgICAgIGZ0bSg3KSkuICBL ZWVwaW5nIHRoZSBjb2RlIHNpbXBsZSBoZWxwcyB0aGVzZSAgb3ZlcmZsb3figJBkZXRlY3Rp b24gIGZlYeKAkA0KPiAgICAgICAgIHR1cmVzIGJlIG1vcmUgcHJlY2lzZS4NCj4gDQo+ICAg ICAgICAgV2hlbiAgdmFsaWRhdGluZyAgdXNlciBpbnB1dCwgaG93ZXZlciwgaXQgbWFrZXMg c2Vuc2UgdG8gdHJ1bmNhdGUuICBSZeKAkA0KPiAgICAgICAgIG1lbWJlciB0byBjaGVjayB0 aGUgcmV0dXJuIHZhbHVlIG9mIHN1Y2ggZnVuY3Rpb24gY2FsbHMuDQo+IA0KPiAgICAgICAg IEZ1bmN0aW9ucyB0aGF0IHRydW5jYXRlOg0KPiANCj4gICAgICAgICDigKIgIHN0cGVjcHko MykgaXMgdGhlIG1vc3QgZWZmaWNpZW50IHN0cmluZyBjb3B5IGZ1bmN0aW9uIHRoYXQgIHBl cmZvcm1zDQo+ICAgICAgICAgICAgdHJ1bmNhdGlvbi4gIEl0IG9ubHkgcmVxdWlyZXMgdG8g Y2hlY2sgZm9yIHRydW5jYXRpb24gb25jZSBhZnRlciBhbGwNCj4gICAgICAgICAgICBjaGFp bmVkIGNhbGxzLg0KPiANCj4gICAgICAgICDigKIgIHN0cGVjcHl4KDMpICBpcyAgYSAgdmFy aWFudCAgb2YgIHN0cGVjcHkoMykgdGhhdCBjb25zdW1lcyB0aGUgZW50aXJlDQo+ICAgICAg ICAgICAgc291cmNlIHN0cmluZywgdG8gY2F0Y2ggYnVncyBpbiB0aGUgcHJvZ3JhbSBieSBm b3JjaW5nICBhICBzZWdtZW50YeKAkA0KPiAgICAgICAgICAgIHRpb24gZmF1bHQgKGFzIHN0 cmxjcHkoM2JzZCkgYW5kIHN0cmxjYXQoM2JzZCkgZG8pLg0KPiANCj4gICAgICAgICDigKIg IHN0cmxjcHkoM2JzZCkgIGFuZCAgc3RybGNhdCgzYnNkKSBhcmUgZGVzaWduZWQgdG8gY3Jh c2ggaWYgdGhlIGlucHV0DQo+ICAgICAgICAgICAgc3RyaW5nIGlzIGludmFsaWQgKGRvZXNu 4oCZdCBjb250YWluIGEgdGVybWluYXRpbmcgbnVsbCBieXRlKS4NCj4gDQo+ICAgICAgICAg 4oCiICBzdHJzY3B5KDMpICByZXBvcnRzICBhbiAgZXJyb3IgIGluc3RlYWQgIG9mICBjcmFz aGluZyAgKHNpbWlsYXIgICB0bw0KPiAgICAgICAgICAgIHN0cGVjcHkoMykpLg0KPiANCj4g ICAgICAgICDigKIgIHN0cG5jcHkoMykgIGFuZCAgc3RybmNweSgzKSAgYWxzbyAgdHJ1bmNh dGUsICBidXQgIHRoZXkgIGRvbuKAmXQgd3JpdGUNCj4gICAgICAgICAgICBzdHJpbmdzLCBi dXQgcmF0aGVyIG51bGzigJBwYWRkZWQgY2hhcmFjdGVyIHNlcXVlbmNlcy4NCj4gDQo+ICAg ICBOdWxs4oCQcGFkZGVkIGNoYXJhY3RlciBzZXF1ZW5jZXMNCj4gICAgICAgICBGb3IgaGlz dG9yaWMgcmVhc29ucywgc29tZSBzdGFuZGFyZCBBUElzLCBzdWNoIGFzIHV0bXB4KDUpLCAg dXNlICBudWxs4oCQDQo+ICAgICAgICAgcGFkZGVkICBjaGFyYWN0ZXIgIHNlcXVlbmNlcyBp biBmaXhlZOKAkHdpZHRoIGJ1ZmZlcnMuICBUbyBpbnRlcmZhY2Ugd2l0aA0KPiAgICAgICAg IHRoZW0sIHNwZWNpYWxpemVkIGZ1bmN0aW9ucyBuZWVkIHRvIGJlIHVzZWQuDQo+IA0KPiAg ICAgICAgIFRvIGNvcHkgc3RyaW5ncyBpbnRvIHRoZW0sIHVzZSBzdHBuY3B5KDMpLg0KPiAN Cj4gICAgICAgICBUbyBjb3B5IGZyb20gYW4gdW50ZXJtaW5hdGVkIHN0cmluZyB3aXRoaW4g YSBmaXhlZOKAkHdpZHRoIGJ1ZmZlciBpbnRvICBhDQo+ICAgICAgICAgc3RyaW5nLCAgaWdu b3JpbmcgIGFueSAgdHJhaWxpbmcgIG51bGwgIGJ5dGVzIGluIHRoZSBzb3VyY2UgZml4ZWTi gJB3aWR0aA0KPiAgICAgICAgIGJ1ZmZlciwgeW91IHNob3VsZCB1c2UgdXN0cjJzdHAoMykg b3Igc3RybmNhdCgzKS4NCj4gDQo+ICAgICBNZWFzdXJlZCBjaGFyYWN0ZXIgc2VxdWVuY2Vz DQo+ICAgICAgICAgVGhlIHNpbXBsZXN0IGNoYXJhY3RlciBzZXF1ZW5jZSBjb3B5aW5nIGZ1 bmN0aW9uIGlzIG1lbXBjcHkoMykuICBJdCByZeKAkA0KPiAgICAgICAgIHF1aXJlcyBhbHdh eXMga25vd2luZyB0aGUgbGVuZ3RoIG9mIHlvdXIgY2hhcmFjdGVyIHNlcXVlbmNlcywgZm9y IHdoaWNoDQo+ICAgICAgICAgc3RydWN0dXJlcyBjYW4gYmUgdXNlZC4gIEl0IG1ha2VzIHRo ZSBjb2RlIG11Y2ggZmFzdGVyLCBzaW5jZSAgeW91ICBhbOKAkA0KPiAgICAgICAgIHdheXMg IGtub3cgdGhlIGxlbmd0aCBvZiB5b3VyIGNoYXJhY3RlciBzZXF1ZW5jZXMsIGFuZCBjYW4g ZG8gdGhlIG1pbmnigJANCj4gICAgICAgICBtYWwgY29waWVzIGFuZCBsZW5ndGggbWVhc3Vy ZW1lbnRzLiAgbWVtcGNweSgzKSAgY29waWVzICBjaGFyYWN0ZXIgIHNl4oCQDQo+ICAgICAg ICAgcXVlbmNlcywgc28geW91IG5lZWQgdG8gZXhwbGljaXRseSBzZXQgdGhlIHRlcm1pbmF0 aW5nIG51bGwgYnl0ZSBpZiB5b3UNCj4gICAgICAgICBuZWVkIGEgc3RyaW5nLg0KPiANCj4g ICAgICAgICBUaGUgIGZvbGxvd2luZyBjb2RlIGNhbiBiZSB1c2VkIHRvIGNoYWlu4oCQY29w eSBmcm9tIGEgbWVhc3VyZWQgY2hhcmFjdGVyDQo+ICAgICAgICAgc2VxdWVuY2UgaW50byBh IHN0cmluZzoNCj4gDQo+ICAgICAgICAgICAgIHAgPSBtZW1wY3B5KHAsIGZvby0+dXN0ciwg Zm9vLT5sZW4pOw0KPiAgICAgICAgICAgICAqcCA9ICdcMCc7DQo+IA0KPiAgICAgICAgIFRo ZSBmb2xsb3dpbmcgY29kZSBjYW4gYmUgdXNlZCB0byBjaGFpbuKAkGNvcHkgZnJvbSBhIG1l YXN1cmVkICBjaGFyYWN0ZXINCj4gICAgICAgICBzZXF1ZW5jZSBpbnRvIGFuIHVudGVybWlu YXRlZCBzdHJpbmc6DQo+IA0KPiAgICAgICAgICAgICBwID0gbWVtcGNweShwLCBiYXItPnVz dHIsIGJhci0+bGVuKTsNCj4gDQo+ICAgICAgICAgSW4gIHByb2dyYW1zICB0aGF0ICBtYWtl ICBjb25zaWRlcmFibGUgIHVzZSBvZiBzdHJpbmdzIG9yIGNoYXJhY3RlciBzZeKAkA0KPiAg ICAgICAgIHF1ZW5jZXMsIGFuZCBuZWVkIHRoZSBiZXN0IHBlcmZvcm1hbmNlLCB1c2luZyBv dmVybGFwcGluZyBjaGFyYWN0ZXIgc2XigJANCj4gICAgICAgICBxdWVuY2VzIGNhbiBtYWtl IGEgYmlnIGRpZmZlcmVuY2UuICBJdCBhbGxvd3MgaG9sZGluZyBzdWJzZXF1ZW5jZXMgb2Yg YQ0KPiAgICAgICAgIGxhcmdlciBjaGFyYWN0ZXIgc2VxdWVuY2UuICB3aGlsZSBub3QgZHVw bGljYXRpbmcgbWVtb3J5IG5vciB1c2luZyB0aW1lDQo+ICAgICAgICAgdG8gZG8gYSBjb3B5 Lg0KPiANCj4gICAgICAgICBIb3dldmVyLCB0aGlzIGlzIGRlbGljYXRlLCBzaW5jZSBpdCBy ZXF1aXJlcyB1c2luZyBjaGFyYWN0ZXIgc2VxdWVuY2VzLg0KPiAgICAgICAgIEMgbGlicmFy eSBBUElzIHVzZSBzdHJpbmdzLCBzbyBwcm9ncmFtcyB0aGF0ICB1c2UgIGNoYXJhY3RlciAg c2VxdWVuY2VzDQo+ICAgICAgICAgd2lsbCAgaGF2ZSAgdG8gIHRha2UgY2FyZSBvZiBkaWZm ZXJlbnRpYXRpbmcgc3RyaW5ncyBmcm9tIGNoYXJhY3RlciBzZeKAkA0KPiAgICAgICAgIHF1 ZW5jZXMuDQo+IA0KPiAgICAgU3RyaW5nIHZzIGNoYXJhY3RlciBzZXF1ZW5jZQ0KPiAgICAg ICAgIFNvbWUgZnVuY3Rpb25zIG9ubHkgb3BlcmF0ZSBvbiBzdHJpbmdzLiAgVGhvc2UgcmVx dWlyZSB0aGF0ICB0aGUgIGlucHV0DQo+ICAgICAgICAgc3JjICBpcyAgYSBzdHJpbmcsIGFu ZCBndWFyYW50ZWUgYW4gb3V0cHV0IHN0cmluZyAoZXZlbiB3aGVuIHRydW5jYXRpb24NCj4g ICAgICAgICBvY2N1cnMpLiAgRnVuY3Rpb25zIHRoYXQgY29uY2F0ZW5hdGUgYWxzbyAgcmVx dWlyZSAgdGhhdCAgZHN0ICBob2xkcyAgYQ0KPiAgICAgICAgIHN0cmluZyBiZWZvcmUgdGhl IGNhbGwuICBMaXN0IG9mIGZ1bmN0aW9uczoNCj4gDQo+ICAgICAgICAg4oCiICBzdHBjcHko MykNCj4gICAgICAgICDigKIgIHN0cmNweSgzKSwgc3RyY2F0KDMpDQo+ICAgICAgICAg4oCi ICBzdHBlY3B5KDMpLCBzdHBlY3B5eCgzKQ0KPiAgICAgICAgIOKAoiAgc3RybGNweSgzYnNk KSwgc3RybGNhdCgzYnNkKQ0KPiAgICAgICAgIOKAoiAgc3Ryc2NweSgzKQ0KPiANCj4gICAg ICAgICBPdGhlciAgZnVuY3Rpb25zICByZXF1aXJlICBhbiAgaW5wdXQgc3RyaW5nLCBidXQg Y3JlYXRlIGEgY2hhcmFjdGVyIHNl4oCQDQo+ICAgICAgICAgcXVlbmNlIGFzIG91dHB1dC4g IFRoZXNlIGZ1bmN0aW9ucyBoYXZlIGNvbmZ1c2luZyAgbmFtZXMsICBhbmQgIGhhdmUgIGEN Cj4gICAgICAgICBsb25nIGhpc3Rvcnkgb2YgbWlzdXNlLiAgTGlzdCBvZiBmdW5jdGlvbnM6 DQo+IA0KPiAgICAgICAgIOKAoiAgc3RwbmNweSgzKQ0KPiAgICAgICAgIOKAoiAgc3RybmNw eSgzKQ0KPiANCj4gICAgICAgICBPdGhlciAgZnVuY3Rpb25zICBvcGVyYXRlIG9uIGFuIGlu cHV0IGNoYXJhY3RlciBzZXF1ZW5jZSwgYW5kIGNyZWF0ZSBhbg0KPiAgICAgICAgIG91dHB1 dCBzdHJpbmcuICBGdW5jdGlvbnMgdGhhdCBjb25jYXRlbmF0ZSBhbHNvIHJlcXVpcmUgdGhh dCBkc3QgIGhvbGRzDQo+ICAgICAgICAgYSAgc3RyaW5nIGJlZm9yZSB0aGUgY2FsbC4gIHN0 cm5jYXQoMykgaGFzIGFuIGV2ZW4gbW9yZSBtaXNsZWFkaW5nIG5hbWUNCj4gICAgICAgICB0 aGFuIHRoZSBmdW5jdGlvbnMgYWJvdmUuICBMaXN0IG9mIGZ1bmN0aW9uczoNCj4gDQo+ICAg ICAgICAg4oCiICB1c3RyMnN0cCgzKQ0KPiAgICAgICAgIOKAoiAgc3RybmNhdCgzKQ0KPiAN Cj4gICAgICAgICBBbmQgdGhlIGxhc3Qgb25lLCBvcGVyYXRlcyBvbiBhbiBpbnB1dCBjaGFy YWN0ZXIgc2VxdWVuY2UgdG8gY3JlYXRlICBhbg0KPiAgICAgICAgIG91dHB1dCAgY2hhcmFj dGVyICBzZXF1ZW5jZS4gIEJ1dCBiZWNhdXNlIGl0IGFza3MgZm9yIHRoZSBsZW5ndGgsIGFu ZCBhDQo+ICAgICAgICAgc3RyaW5nIGlzIGJ5IG5hdHVyZSBjb21wb3NlZCBvZiBhIGNoYXJh Y3RlciBzZXF1ZW5jZSBvZiB0aGUgc2FtZSBsZW5ndGgNCj4gICAgICAgICBwbHVzIGEgdGVy bWluYXRpbmcgbnVsbCBieXRlLCBhICBzdHJpbmcgIGlzICBhbHNvICBhY2NlcHRlZCAgYXMg IGlucHV0Lg0KPiAgICAgICAgIEZ1bmN0aW9uOg0KPiANCj4gICAgICAgICDigKIgIG1lbXBj cHkoMykNCj4gDQo+ICAgICBGdW5jdGlvbnMNCj4gICAgICAgICBzdHBjcHkoMykNCj4gICAg ICAgICAgICAgICAgVGhpcyBmdW5jdGlvbiBjb3BpZXMgdGhlIGlucHV0IHN0cmluZyBpbnRv IGEgZGVzdGluYXRpb24gc3RyaW5nLg0KPiAgICAgICAgICAgICAgICBUaGUgIHByb2dyYW1t ZXIgIGlzICByZXNwb25zaWJsZSAgZm9yICBhbGxvY2F0aW5nIGEgYnVmZmVyIGxhcmdlDQo+ ICAgICAgICAgICAgICAgIGVub3VnaC4gIEl0IHJldHVybnMgYSBwb2ludGVyIHN1aXRhYmxl IGZvciBjaGFpbmluZy4NCj4gDQo+ICAgICAgICAgICAgICAgIEFuIGltcGxlbWVudGF0aW9u IG9mIHRoaXMgZnVuY3Rpb24gbWlnaHQgYmU6DQo+IA0KPiAgICAgICAgICAgICAgICAgICAg Y2hhciAqDQo+ICAgICAgICAgICAgICAgICAgICBzdHBjcHkoY2hhciAqcmVzdHJpY3QgZHN0 LCBjb25zdCBjaGFyICpyZXN0cmljdCBzcmMpDQo+ICAgICAgICAgICAgICAgICAgICB7DQo+ ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lbXBjcHkoZHN0LCBzcmMsIHN0cmxl bihzcmMpKTsNCg0KT29wcy4gIEl0IHNob3VsZCBoYXZlIGJlZW46DQoNCmNoYXIgKnA7DQoN CnAgPSBtZW1wY3B5KGRzdCwgc3JjLCBzdHJsZW4oc3JjKSk7DQpwID0gJ1wwJzsNCnJldHVy biBwOw0KDQo+ICAgICAgICAgICAgICAgICAgICB9DQo+IA0KPiAgICAgICAgIHN0cmNweSgz KQ0KPiAgICAgICAgIHN0cmNhdCgzKQ0KPiAgICAgICAgICAgICAgICBUaGVzZSBmdW5jdGlv bnMgY29weSB0aGUgaW5wdXQgc3RyaW5nIGludG8gYSBkZXN0aW5hdGlvbiBzdHJpbmcuDQo+ ICAgICAgICAgICAgICAgIFRoZSBwcm9ncmFtbWVyIGlzIHJlc3BvbnNpYmxlICBmb3IgIGFs bG9jYXRpbmcgIGEgIGJ1ZmZlciAgbGFyZ2UNCj4gICAgICAgICAgICAgICAgZW5vdWdoLiAg VGhlIHJldHVybiB2YWx1ZSBpcyB1c2VsZXNzLg0KPiANCj4gICAgICAgICAgICAgICAgc3Rw Y3B5KDMpIGlzIGEgZmFzdGVyIGFsdGVybmF0aXZlIHRvIHRoZXNlIGZ1bmN0aW9ucy4NCj4g DQo+ICAgICAgICAgICAgICAgIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZXNlIGZ1bmN0aW9u cyBtaWdodCBiZToNCj4gDQo+ICAgICAgICAgICAgICAgICAgICBjaGFyICoNCj4gICAgICAg ICAgICAgICAgICAgIHN0cmNweShjaGFyICpyZXN0cmljdCBkc3QsIGNvbnN0IGNoYXIgKnJl c3RyaWN0IHNyYykNCj4gICAgICAgICAgICAgICAgICAgIHsNCj4gICAgICAgICAgICAgICAg ICAgICAgICBzdHBjcHkoZHN0LCBzcmMpOw0KPiAgICAgICAgICAgICAgICAgICAgICAgIHJl dHVybiBkc3Q7DQo+ICAgICAgICAgICAgICAgICAgICB9DQo+IA0KPiAgICAgICAgICAgICAg ICAgICAgY2hhciAqDQo+ICAgICAgICAgICAgICAgICAgICBzdHJjYXQoY2hhciAqcmVzdHJp Y3QgZHN0LCBjb25zdCBjaGFyICpyZXN0cmljdCBzcmMpDQo+ICAgICAgICAgICAgICAgICAg ICB7DQo+ICAgICAgICAgICAgICAgICAgICAgICAgc3RwY3B5KGRzdCArIHN0cmxlbihkc3Qp LCBzcmMpOw0KPiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkc3Q7DQo+ICAgICAg ICAgICAgICAgICAgICB9DQo+IA0KPiAgICAgICAgIHN0cGVjcHkoMykNCj4gICAgICAgICBz dHBlY3B5eCgzKQ0KPiAgICAgICAgICAgICAgICBUaGVzZSBmdW5jdGlvbnMgY29weSB0aGUg aW5wdXQgc3RyaW5nIGludG8gYSBkZXN0aW5hdGlvbiBzdHJpbmcuDQo+ICAgICAgICAgICAg ICAgIElmICB0aGUgZGVzdGluYXRpb24gYnVmZmVyLCBsaW1pdGVkIGJ5IGEgcG9pbnRlciB0 byBvbmUgcGFzdCB0aGUNCj4gICAgICAgICAgICAgICAgZW5kIG9mIGl0LCBpc27igJl0IGxh cmdlIGVub3VnaCB0byBob2xkIHRoZSAgY29weSwgIHRoZSAgcmVzdWx0aW5nDQo+ICAgICAg ICAgICAgICAgIHN0cmluZyAgaXMgIHRydW5jYXRlZCAgKGJ1dCAgaXQgIGlzIGd1YXJhbnRl ZWQgdG8gYmUgbnVsbOKAkHRlcm1p4oCQDQo+ICAgICAgICAgICAgICAgIG5hdGVkKS4gIFRo ZXkgcmV0dXJuIGEgcG9pbnRlciBzdWl0YWJsZSBmb3IgIGNoYWluaW5nLiAgIFRydW5jYeKA kA0KPiAgICAgICAgICAgICAgICB0aW9uIG5lZWRzIHRvIGJlIGRldGVjdGVkIG9ubHkgb25j ZSBhZnRlciB0aGUgbGFzdCBjaGFpbmVkIGNhbGwuDQo+ICAgICAgICAgICAgICAgIHN0cGVj cHl4KDMpICBoYXMgIGlkZW50aWNhbCBzZW1hbnRpY3MgdG8gc3RwZWNweSgzKSwgZXhjZXB0 IHRoYXQNCj4gICAgICAgICAgICAgICAgaXQgZm9yY2VzIGEgU0lHU0VHViBpZiB0aGUgc3Jj IHBvaW50ZXIgaXMgbm90IGEgc3RyaW5nLg0KPiANCj4gICAgICAgICAgICAgICAgVGhlc2Ug ZnVuY3Rpb25zIGFyZSBub3QgcHJvdmlkZWQgYnkgYW55IGxpYnJhcnksIGJ1dCB5b3UgY2Fu IGRl4oCQDQo+ICAgICAgICAgICAgICAgIGZpbmUgdGhlbSB3aXRoIHRoZSBmb2xsb3dpbmcg cmVmZXJlbmNlIGltcGxlbWVudGF0aW9uczoNCj4gDQo+ICAgICAgICAgICAgICAgICAgICAv KiBUaGlzIGNvZGUgaXMgaW4gdGhlIHB1YmxpYyBkb21haW4uICovDQo+ICAgICAgICAgICAg ICAgICAgICBjaGFyICoNCj4gICAgICAgICAgICAgICAgICAgIHN0cGVjcHkoY2hhciAqZHN0 LCBjaGFyIHBhc3RfZW5kWzBdLA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBjaGFyICpyZXN0cmljdCBzcmMpDQo+ICAgICAgICAgICAgICAgICAgICB7DQo+ICAgICAg ICAgICAgICAgICAgICAgICAgY2hhciAqcDsNCj4gDQo+ICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKGRzdCA9PSBwYXN0X2VuZCkNCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAg cmV0dXJuIHBhc3RfZW5kOw0KPiANCj4gICAgICAgICAgICAgICAgICAgICAgICBwID0gbWVt Y2NweShkc3QsIHNyYywgJ1wwJywgcGFzdF9lbmQgLSBkc3QpOw0KPiAgICAgICAgICAgICAg ICAgICAgICAgIGlmIChwICE9IE5VTEwpDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAg IHJldHVybiBwIC0gMTsNCj4gDQo+ICAgICAgICAgICAgICAgICAgICAgICAgLyogdHJ1bmNh dGlvbiBkZXRlY3RlZCAqLw0KPiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RfZW5kWy0x XSA9ICdcMCc7DQo+ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhc3RfZW5kOw0K PiAgICAgICAgICAgICAgICAgICAgfQ0KPiANCj4gICAgICAgICAgICAgICAgICAgIC8qIFRo aXMgY29kZSBpcyBpbiB0aGUgcHVibGljIGRvbWFpbi4gKi8NCj4gICAgICAgICAgICAgICAg ICAgIGNoYXIgKg0KPiAgICAgICAgICAgICAgICAgICAgc3RwZWNweXgoY2hhciAqZHN0LCBj aGFyIHBhc3RfZW5kWzBdLA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg Y2hhciAqcmVzdHJpY3Qgc3JjKQ0KPiAgICAgICAgICAgICAgICAgICAgew0KPiAgICAgICAg ICAgICAgICAgICAgICAgIGlmIChzcmNbc3RybGVuKHNyYyldICE9ICdcMCcpDQo+ICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJhaXNlKFNJR1NFR1YpOw0KPiANCj4gICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4gc3RwZWNweShkc3QsIHBhc3RfZW5kLCBzcmMpOw0KPiAg ICAgICAgICAgICAgICAgICAgfQ0KPiANCj4gICAgICAgICBzdHJsY3B5KDNic2QpDQo+ICAg ICAgICAgc3RybGNhdCgzYnNkKQ0KPiAgICAgICAgICAgICAgICBUaGVzZSBmdW5jdGlvbnMg Y29weSB0aGUgaW5wdXQgc3RyaW5nIGludG8gYSBkZXN0aW5hdGlvbiBzdHJpbmcuDQo+ICAg ICAgICAgICAgICAgIElmIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIsIGxpbWl0ZWQgIGJ5ICBp dHMgIHNpemUsICBpc27igJl0ICBsYXJnZQ0KPiAgICAgICAgICAgICAgICBlbm91Z2ggIHRv IGhvbGQgdGhlIGNvcHksIHRoZSByZXN1bHRpbmcgc3RyaW5nIGlzIHRydW5jYXRlZCAoYnV0 DQo+ICAgICAgICAgICAgICAgIGl0IGlzIGd1YXJhbnRlZWQgdG8gYmUgbnVsbOKAkHRlcm1p bmF0ZWQpLiAgVGhleSByZXR1cm4gdGhlIGxlbmd0aA0KPiAgICAgICAgICAgICAgICBvZiB0 aGUgdG90YWwgc3RyaW5nIHRoZXkgdHJpZWQgdG8gY3JlYXRlLiAgVGhlc2UgZnVuY3Rpb25z IGZvcmNlDQo+ICAgICAgICAgICAgICAgIGEgU0lHU0VHViBpZiB0aGUgc3JjIHBvaW50ZXIg aXMgbm90IGEgc3RyaW5nLg0KPiANCj4gICAgICAgICAgICAgICAgc3RwZWNweXgoMykgaXMg YSBmYXN0ZXIgYWx0ZXJuYXRpdmUgdG8gdGhlc2UgZnVuY3Rpb25zLg0KPiANCj4gICAgICAg ICBzdHJzY3B5KDMpDQo+ICAgICAgICAgICAgICAgIFRoaXMgZnVuY3Rpb24gY29waWVzIHRo ZSBpbnB1dCBzdHJpbmcgaW50byBhIGRlc3RpbmF0aW9uIHN0cmluZy4NCj4gICAgICAgICAg ICAgICAgSWYgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciwgbGltaXRlZCAgYnkgIGl0cyAgc2l6 ZSwgIGlzbuKAmXQgIGxhcmdlDQo+ICAgICAgICAgICAgICAgIGVub3VnaCAgdG8gaG9sZCB0 aGUgY29weSwgdGhlIHJlc3VsdGluZyBzdHJpbmcgaXMgdHJ1bmNhdGVkIChidXQNCj4gICAg ICAgICAgICAgICAgaXQgaXMgZ3VhcmFudGVlZCB0byBiZSBudWxs4oCQdGVybWluYXRlZCku ICBJdCByZXR1cm5zIHRoZSAgbGVuZ3RoDQo+ICAgICAgICAgICAgICAgIG9mIHRoZSBkZXN0 aW5hdGlvbiBzdHJpbmcsIG9yIC1FMkJJRyBvbiB0cnVuY2F0aW9uLg0KPiANCj4gICAgICAg ICAgICAgICAgc3RwZWNweSgzKSBpcyBhIHNpbXBsZXIgYW5kIGZhc3RlciBhbHRlcm5hdGl2 ZSB0byB0aGlzIGZ1bmN0aW9uLg0KPiANCj4gICAgICAgICBzdHBuY3B5KDMpDQo+ICAgICAg ICAgICAgICAgIFRoaXMgIGZ1bmN0aW9uICBjb3BpZXMgdGhlIGlucHV0IHN0cmluZyBpbnRv IGEgZGVzdGluYXRpb24gbnVsbOKAkA0KPiAgICAgICAgICAgICAgICBwYWRkZWQgY2hhcmFj dGVyIHNlcXVlbmNlIGluIGEgZml4ZWTigJB3aWR0aCBidWZmZXIuICBJZiB0aGUgIGRlc+KA kA0KPiAgICAgICAgICAgICAgICB0aW5hdGlvbiBidWZmZXIsIGxpbWl0ZWQgYnkgaXRzIHNp emUsIGlzbuKAmXQgbGFyZ2UgZW5vdWdoIHRvIGhvbGQNCj4gICAgICAgICAgICAgICAgdGhl ICBjb3B5LCB0aGUgcmVzdWx0aW5nIGNoYXJhY3RlciBzZXF1ZW5jZSBpcyB0cnVuY2F0ZWQu ICBTaW5jZQ0KPiAgICAgICAgICAgICAgICBpdCBjcmVhdGVzIGEgY2hhcmFjdGVyIHNlcXVl bmNlLCBpdCBkb2VzbuKAmXQgbmVlZCB0byB3cml0ZSBhIHRlcuKAkA0KPiAgICAgICAgICAg ICAgICBtaW5hdGluZyBudWxsIGJ5dGUuICBJdCByZXR1cm5zIGEgcG9pbnRlciBzdWl0YWJs ZSBmb3IgY2hhaW5pbmcsDQo+ICAgICAgICAgICAgICAgIGJ1dCBpdOKAmXMgbm90IGlkZWFs IGZvciB0aGF0LiAgVHJ1bmNhdGlvbiBuZWVkcyAgdG8gIGJlICBkZXRlY3RlZA0KPiAgICAg ICAgICAgICAgICBvbmx5IG9uY2UgYWZ0ZXIgdGhlIGxhc3QgY2hhaW5lZCBjYWxsLg0KPiAN Cj4gICAgICAgICAgICAgICAgSWYgIHlvdeKAmXJlIGdvaW5nIHRvIHVzZSB0aGlzIGZ1bmN0 aW9uIGluIGNoYWluZWQgY2FsbHMsIGl0IHdvdWxkDQo+ICAgICAgICAgICAgICAgIGJlIHVz ZWZ1bCB0byBkZXZlbG9wIGEgc2ltaWxhciBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgIGEgIHBv aW50ZXINCj4gICAgICAgICAgICAgICAgdG8gb25lIHBhc3QgdGhlIGVuZCBvZiB0aGUgYnVm ZmVyIGluc3RlYWQgb2YgYSBzaXplLg0KPiANCj4gICAgICAgICAgICAgICAgQW4gaW1wbGVt ZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbiBtaWdodCBiZToNCj4gDQo+ICAgICAgICAgICAg ICAgICAgICBjaGFyICoNCj4gICAgICAgICAgICAgICAgICAgIHN0cG5jcHkoY2hhciAqcmVz dHJpY3QgZHN0LCBjb25zdCBjaGFyICpyZXN0cmljdCBzcmMsDQo+ICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNpemVfdCBzeikNCj4gICAgICAgICAgICAgICAgICAgIHsNCj4gICAg ICAgICAgICAgICAgICAgICAgICBjaGFyICAqcDsNCj4gDQo+ICAgICAgICAgICAgICAgICAg ICAgICAgYnplcm8oZHN0LCBzeik7DQo+ICAgICAgICAgICAgICAgICAgICAgICAgcCA9IG1l bWNjcHkoZHN0LCBzcmMsICdcMCcsIHN6KTsNCj4gICAgICAgICAgICAgICAgICAgICAgICBp ZiAocCA9PSBOVUxMKQ0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZHN0 ICsgc3o7DQo+IA0KPiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwIC0gMTsNCj4g ICAgICAgICAgICAgICAgICAgIH0NCj4gDQo+ICAgICAgICAgdXN0cjJzdHAoMykNCj4gICAg ICAgICAgICAgICAgVGhpcyBmdW5jdGlvbiBjb3BpZXMgdGhlIGlucHV0IGNoYXJhY3RlciBz ZXF1ZW5jZSBjb250YWluZWQgaW4gYQ0KPiAgICAgICAgICAgICAgICBudWxs4oCQcGFkZGVk ICB3aXhlZOKAkHdpZHRoIGJ1ZmZlciwgaW50byBhIGRlc3RpbmF0aW9uIHN0cmluZy4gIFRo ZQ0KPiAgICAgICAgICAgICAgICBwcm9ncmFtbWVyIGlzIHJlc3BvbnNpYmxlIGZvciBhbGxv Y2F0aW5nIGEgYnVmZmVyIGxhcmdlICBlbm91Z2guDQo+ICAgICAgICAgICAgICAgIEl0IHJl dHVybnMgYSBwb2ludGVyIHN1aXRhYmxlIGZvciBjaGFpbmluZy4NCj4gDQo+ICAgICAgICAg ICAgICAgIEEgIHRydW5jYXRpbmcgIHZlcnNpb24gb2YgdGhpcyBmdW5jdGlvbiBkb2VzbuKA mXQgZXhpc3QsIHNpbmNlIHRoZQ0KPiAgICAgICAgICAgICAgICBzaXplIG9mIHRoZSBvcmln aW5hbCBjaGFyYWN0ZXIgc2VxdWVuY2UgaXMgYWx3YXlzIGtub3duLCAgc28gIGl0DQo+ICAg ICAgICAgICAgICAgIHdvdWxkbuKAmXQgYmUgdmVyeSB1c2VmdWwuDQo+IA0KPiAgICAgICAg ICAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBwcm92aWRlZCBieSBhbnkgbGlicmFyeSwg YnV0IHlvdSBjYW4gZGVmaW5lDQo+ICAgICAgICAgICAgICAgIGl0IHdpdGggdGhlIGZvbGxv d2luZyByZWZlcmVuY2UgaW1wbGVtZW50YXRpb246DQo+IA0KPiAgICAgICAgICAgICAgICAg ICAgLyogVGhpcyBjb2RlIGlzIGluIHRoZSBwdWJsaWMgZG9tYWluLiAqLw0KPiAgICAgICAg ICAgICAgICAgICAgY2hhciAqDQo+ICAgICAgICAgICAgICAgICAgICB1c3RyMnN0cChjaGFy ICpyZXN0cmljdCBkc3QsIGNvbnN0IGNoYXIgKnJlc3RyaWN0IHNyYywNCj4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNpemVfdCBzeikNCj4gICAgICAgICAgICAgICAgICAgIHsN Cj4gICAgICAgICAgICAgICAgICAgICAgICBjaGFyICAqZW5kOw0KPiANCj4gICAgICAgICAg ICAgICAgICAgICAgICBlbmQgPSBtZW1jY3B5KGRzdCwgc3JjLCAnXDAnLCBzeikpID86IGRz dCArIHN6Ow0KPiAgICAgICAgICAgICAgICAgICAgICAgICplbmQgPSAnXDAnOw0KPiANCj4g ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW5kOw0KPiAgICAgICAgICAgICAgICAg ICAgfQ0KPiANCj4gICAgICAgICBzdHJuY3B5KDMpDQo+ICAgICAgICAgICAgICAgIFRoaXMg IGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byBzdHBuY3B5KDMpIGV4Y2VwdCBmb3IgdGhlIHVz ZWxlc3MNCj4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLiAgRHVlIHRvIHRoZSByZXR1 cm4gdmFsdWUsIHdpdGggdGhpcyBmdW5jdGlvbiAgaXTigJlzDQo+ICAgICAgICAgICAgICAg IGhhcmQgdG8gY29ycmVjdGx5IGNoZWNrIGZvciB0cnVuY2F0aW9uLg0KPiANCj4gICAgICAg ICAgICAgICAgc3RwbmNweSgzKSBpcyBhIHNpbXBsZXIgYWx0ZXJuYXRpdmUgdG8gdGhpcyBm dW5jdGlvbi4NCj4gDQo+ICAgICAgICAgICAgICAgIEFuIGltcGxlbWVudGF0aW9uIG9mIHRo aXMgZnVuY3Rpb24gbWlnaHQgYmU6DQo+IA0KPiAgICAgICAgICAgICAgICAgICAgY2hhciAq DQo+ICAgICAgICAgICAgICAgICAgICBzdHJuY3B5KGNoYXIgKnJlc3RyaWN0IGRzdCwgY29u c3QgY2hhciAqcmVzdHJpY3Qgc3JjLA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICBz aXplX3Qgc3opDQo+ICAgICAgICAgICAgICAgICAgICB7DQo+ICAgICAgICAgICAgICAgICAg ICAgICAgc3RwbmNweShkc3QsIHNyYywgc3opOw0KPiAgICAgICAgICAgICAgICAgICAgICAg IHJldHVybiBkc3Q7DQo+ICAgICAgICAgICAgICAgICAgICB9DQo+IA0KPiAgICAgICAgIHN0 cm5jYXQoMykNCj4gICAgICAgICAgICAgICAgRG8gIG5vdCAgY29uZnVzZSB0aGlzIGZ1bmN0 aW9uIHdpdGggc3RybmNweSgzKTsgdGhleSBhcmUgbm90IHJl4oCQDQo+ICAgICAgICAgICAg ICAgIGxhdGVkIGF0IGFsbC4NCj4gDQo+ICAgICAgICAgICAgICAgIFRoaXMgZnVuY3Rpb24g Y29uY2F0ZW5hdGVzIHRoZSAgaW5wdXQgIGNoYXJhY3RlciAgc2VxdWVuY2UgIGNvbuKAkA0K PiAgICAgICAgICAgICAgICB0YWluZWQgIGluICBhIG51bGzigJBwYWRkZWQgd2l4ZWTigJB3 aWR0aCBidWZmZXIsIGludG8gYSBkZXN0aW5hdGlvbg0KPiAgICAgICAgICAgICAgICBzdHJp bmcuICBUaGUgcHJvZ3JhbW1lciBpcyByZXNwb25zaWJsZSBmb3IgYWxsb2NhdGluZyAgYSAg YnVmZmVyDQo+ICAgICAgICAgICAgICAgIGxhcmdlIGVub3VnaC4gIFRoZSByZXR1cm4gdmFs dWUgaXMgdXNlbGVzcy4NCj4gDQo+ICAgICAgICAgICAgICAgIHVzdHIyc3RwKDMpIGlzIGEg ZmFzdGVyIGFsdGVybmF0aXZlIHRvIHRoaXMgZnVuY3Rpb24uDQo+IA0KPiAgICAgICAgICAg ICAgICBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIG1pZ2h0IGJlOg0KPiAN Cj4gICAgICAgICAgICAgICAgICAgIGNoYXIgKg0KPiAgICAgICAgICAgICAgICAgICAgc3Ry bmNhdChjaGFyICpyZXN0cmljdCBkc3QsIGNvbnN0IGNoYXIgKnJlc3RyaWN0IHNyYywNCj4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHN6KQ0KPiAgICAgICAgICAgICAg ICAgICAgew0KPiAgICAgICAgICAgICAgICAgICAgICAgIHVzdHIyc3RwKGRzdCArIHN0cmxl bihkc3QpLCBzcmMsIHN6KTsNCj4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZHN0 Ow0KPiAgICAgICAgICAgICAgICAgICAgfQ0KPiANCj4gICAgICAgICBtZW1wY3B5KDMpDQo+ ICAgICAgICAgICAgICAgIFRoaXMgIGZ1bmN0aW9uICBjb3BpZXMgIHRoZSBpbnB1dCBjaGFy YWN0ZXIgc2VxdWVuY2UsIGxpbWl0ZWQgYnkNCj4gICAgICAgICAgICAgICAgaXRzIGxlbmd0 aCwgaW50byBhIGRlc3RpbmF0aW9uIGNoYXJhY3RlciBzZXF1ZW5jZS4gIFRoZSBwcm9ncmFt 4oCQDQo+ICAgICAgICAgICAgICAgIG1lciBpcyByZXNwb25zaWJsZSBmb3IgYWxsb2NhdGlu ZyBhIGJ1ZmZlciBsYXJnZSBlbm91Z2guICBJdCByZeKAkA0KPiAgICAgICAgICAgICAgICB0 dXJucyBhIHBvaW50ZXIgc3VpdGFibGUgZm9yIGNoYWluaW5nLg0KPiANCj4gICAgICAgICAg ICAgICAgQW4gaW1wbGVtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbiBtaWdodCBiZToNCj4g DQo+ICAgICAgICAgICAgICAgICAgICB2b2lkICoNCj4gICAgICAgICAgICAgICAgICAgIG1l bXBjcHkodm9pZCAqcmVzdHJpY3QgZHN0LCBjb25zdCB2b2lkICpyZXN0cmljdCBzcmMsDQo+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4pDQo+ICAgICAgICAgICAg ICAgICAgICB7DQo+ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lbWNweShkc3Qs IHNyYywgbGVuKSArIGxlbjsNCj4gICAgICAgICAgICAgICAgICAgIH0NCj4gDQo+IFJFVFVS TiBWQUxVRQ0KPiAgICAgICAgIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIHJldHVybiBhIHBv aW50ZXIgdG8gdGhlIHRlcm1pbmF0aW5nICBudWxsICBieXRlDQo+ICAgICAgICAgaW4gdGhl IGRlc3RpbmF0aW9uIHN0cmluZy4NCj4gDQo+ICAgICAgICAg4oCiICBzdHBjcHkoMykNCj4g ICAgICAgICDigKIgIHVzdHIyc3RwKDMpDQo+IA0KPiAgICAgICAgIFRoZSAgZm9sbG93aW5n ICBmdW5jdGlvbnMgcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgdGVybWluYXRpbmcgbnVsbCBi eXRlDQo+ICAgICAgICAgaW4gdGhlIGRlc3RpbmF0aW9uIHN0cmluZywgZXhjZXB0IHdoZW4g dHJ1bmNhdGlvbiBvY2N1cnM7IGlmIHRydW5jYXRpb24NCj4gICAgICAgICBvY2N1cnMsIHRo ZXkgcmV0dXJuIGEgcG9pbnRlciB0byBvbmUgcGFzdCB0aGUgZW5kICBvZiAgdGhlICBkZXN0 aW5hdGlvbg0KPiAgICAgICAgIGJ1ZmZlciAocGFzdF9lbmQpLg0KPiANCj4gICAgICAgICDi gKIgIHN0cGVjcHkoMyksIHN0cGVjcHl4KDMpDQo+IA0KPiAgICAgICAgIFRoZSAgZm9sbG93 aW5nIGZ1bmN0aW9uIHJldHVybnMgYSBwb2ludGVyIHRvIG9uZSBhZnRlciB0aGUgbGFzdCBj aGFyYWPigJANCj4gICAgICAgICB0ZXIgaW4gdGhlIGRlc3RpbmF0aW9uIGNoYXJhY3RlciBz ZXF1ZW5jZTsgaWYgdHJ1bmNhdGlvbiAgb2NjdXJzLCAgdGhhdA0KPiAgICAgICAgIHBvaW50 ZXIgIGlzIGVxdWl2YWxlbnQgdG8gYSBwb2ludGVyIHRvIG9uZSBwYXN0IHRoZSBlbmQgb2Yg dGhlIGRlc3RpbmHigJANCj4gICAgICAgICB0aW9uIGJ1ZmZlci4NCj4gDQo+ICAgICAgICAg 4oCiICBzdHBuY3B5KDMpDQo+IA0KPiAgICAgICAgIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb24g cmV0dXJucyBhIHBvaW50ZXIgdG8gb25lIGFmdGVyIHRoZSBsYXN0ICBjaGFyYWPigJANCj4g ICAgICAgICB0ZXIgaW4gdGhlIGRlc3RpbmF0aW9uIGNoYXJhY3RlciBzZXF1ZW5jZS4NCj4g DQo+ICAgICAgICAg4oCiICBtZW1wY3B5KDMpDQo+IA0KPiAgICAgICAgIFRoZSBmb2xsb3dp bmcgZnVuY3Rpb25zIHJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSB0b3RhbCBzdHJpbmcgdGhh dCB0aGV5DQo+ICAgICAgICAgdHJpZWQgdG8gY3JlYXRlIChhcyBpZiB0cnVuY2F0aW9uIGRp ZG7igJl0IG9jY3VyKS4NCj4gDQo+ICAgICAgICAg4oCiICBzdHJsY3B5KDNic2QpLCBzdHJs Y2F0KDNic2QpDQo+IA0KPiAgICAgICAgIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gcmV0dXJu cyB0aGUgbGVuZ3RoIG9mIHRoZSBkZXN0aW5hdGlvbiBzdHJpbmcsIG9yDQo+ICAgICAgICAg LUUyQklHIG9uIHRydW5jYXRpb24uDQo+IA0KPiAgICAgICAgIOKAoiAgc3Ryc2NweSgzKQ0K PiANCj4gICAgICAgICBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyByZXR1cm4gdGhlIGRzdCBw b2ludGVyLCB3aGljaCBpcyB1c2VsZXNzLg0KPiANCj4gICAgICAgICDigKIgIHN0cmNweSgz KSwgc3RyY2F0KDMpDQo+ICAgICAgICAg4oCiICBzdHJuY3B5KDMpDQo+ICAgICAgICAg4oCi ICBzdHJuY2F0KDMpDQo+IA0KPiBBVFRSSUJVVEVTDQo+ICAgICAgICAgRm9yICBhbiAgZXhw bGFuYXRpb24gIG9mICB0aGUgIHRlcm1zICB1c2VkIGluIHRoaXMgc2VjdGlvbiwgc2VlIGF0 dHJpYuKAkA0KPiAgICAgICAgIHV0ZXMoNykuDQo+ICAgICAgICAg4pSM4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQDQo+ICAgICAgICAg4pSC SW50ZXJmYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIIgQXR0cmli dXRlICAgICDilIIgVmFsdWUgICDilIINCj4gICAgICAgICDilJzilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilKQNCj4gICAgICAgICDilIJzdHBj cHkoKSwgc3RyY3B5KCksIHN0cmNhdCgpLCBzdHBlY3B5KCksICAgIOKUgiBUaHJlYWQgc2Fm ZXR5IOKUgiBNVOKAkFNhZmUg4pSCDQo+ICAgICAgICAg4pSCc3RwZWNweXgoKSBzdHJsY3B5 KCksIHN0cmxjYXQoKSwgc3Ryc2NweSgpLCDilIIgICAgICAgICAgICAgICDilIIgICAgICAg ICDilIINCj4gICAgICAgICDilIJzdHBuY3B5KCksIHN0cm5jcHkoKSwgdXN0cjJzdHAoKSwg ICAgICAgICAgIOKUgiAgICAgICAgICAgICAgIOKUgiAgICAgICAgIOKUgg0KPiAgICAgICAg IOKUgnN0cm5jYXQoKSwgbWVtcGNweSgpICAgICAgICAgICAgICAgICAgICAgICAg4pSCICAg ICAgICAgICAgICAg4pSCICAgICAgICAg4pSCDQo+ICAgICAgICAg4pSU4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYDQo+IA0KPiBTVEFOREFS RFMNCj4gICAgICAgICBzdHJjcHkoMyksIHN0cmNhdCgzKQ0KPiAgICAgICAgIHN0cm5jcHko MykNCj4gICAgICAgICBzdHJuY2F0KDMpDQo+ICAgICAgICAgICAgICAgIFBPU0lYLjHigJAy MDAxLCBQT1NJWC4x4oCQMjAwOCwgQzg5LCBDOTksIFNWcjQsIDQuM0JTRC4NCj4gDQo+ICAg ICAgICAgc3RwY3B5KDMpDQo+ICAgICAgICAgc3RwbmNweSgzKQ0KPiAgICAgICAgICAgICAg ICBQT1NJWC4x4oCQMjAwOC4NCj4gDQo+ICAgICAgICAgc3RybGNweSgzYnNkKSwgc3RybGNh dCgzYnNkKQ0KPiAgICAgICAgICAgICAgICBGdW5jdGlvbnMgb3JpZ2luYXRlZCBpbiBPcGVu QlNEIGFuZCBwcmVzZW50IGluICBzb21lICBVbml4ICBzeXPigJANCj4gICAgICAgICAgICAg ICAgdGVtcy4NCj4gDQo+ICAgICAgICAgbWVtcGNweSgzKQ0KPiAgICAgICAgICAgICAgICBU aGlzIGZ1bmN0aW9uIGlzIGEgR05VIGV4dGVuc2lvbi4NCj4gDQo+ICAgICAgICAgc3Ryc2Nw eSgzKQ0KPiAgICAgICAgICAgICAgICBMaW51eCBrZXJuZWwgaW50ZXJuYWwgZnVuY3Rpb24u DQo+IA0KPiAgICAgICAgIHN0cGVjcHkoMyksIHN0cGVjcHl4KDMpDQo+ICAgICAgICAgdXN0 cjJzdHAoMykNCj4gICAgICAgICAgICAgICAgTm90IGRlZmluZWQgYnkgYW55IHN0YW5kYXJk cyBub3IgbGlicmFyaWVzLg0KPiANCj4gQ0FWRUFUUw0KPiAgICAgICAgIERvbuKAmXQgIG1p eCAgY2hhaW4gY2FsbHMgdG8gdHJ1bmNhdGluZyBhbmQgbm9u4oCQdHJ1bmNhdGluZyBmdW5j dGlvbnMuICBJdA0KPiAgICAgICAgIGlzIGNvbmNlcHR1YWxseSB3cm9uZyB1bmxlc3MgeW91 IGtub3cgdGhhdCB0aGUgZmlyc3QgIHBhcnQgIG9mICBhICBjb3B5DQo+ICAgICAgICAgd2ls bCAgYWx3YXlzICBmaXQuICBBbnl3YXksIHRoZSBwZXJmb3JtYW5jZSBkaWZmZXJlbmNlIHdp bGwgcHJvYmFibHkgYmUNCj4gICAgICAgICBuZWdsaWdpYmxlLCBzbyBpdCB3aWxsIHByb2Jh Ymx5IGJlIG1vcmUgY2xlYXIgaWYgeW91IHVzZSBjb25zaXN0ZW50IHNl4oCQDQo+ICAgICAg ICAgbWFudGljczogZWl0aGVyIHRydW5jYXRpbmcgb3Igbm9u4oCQdHJ1bmNhdGluZy4gIENh bGxpbmcgYSBub27igJB0cnVuY2F0aW5nDQo+ICAgICAgICAgZnVuY3Rpb24gYWZ0ZXIgYSB0 cnVuY2F0aW5nIG9uZSBpcyBuZWNlc3NhcmlseSB3cm9uZy4NCj4gDQo+ICAgICAgICAgU29t ZSBvZiB0aGUgZnVuY3Rpb25zIGRlc2NyaWJlZCBoZXJlIGFyZSBub3QgcHJvdmlkZWQgYnkg IGFueSAgbGlicmFyeTsNCj4gICAgICAgICB5b3Ugc2hvdWxkIHdyaXRlIHlvdXIgb3duIGNv cHkgaWYgeW91IHdhbnQgdG8gdXNlIHRoZW0uICBTZWUgU1RBTkRBUkRTLg0KPiANCj4gQlVH Uw0KPiAgICAgICAgIEFsbCAgY29uY2F0ZW5hdGlvbiAgKCpjYXQoKSkgZnVuY3Rpb25zIHNo YXJlIHRoZSBzYW1lIHBlcmZvcm1hbmNlIHByb2LigJANCj4gICAgICAgICBsZW06IFNobGVt aWVsIHRoZSAgcGFpbnRlciAg4p+oaHR0cHM6Ly93d3cuam9lbG9uc29mdHdhcmUuY29tLzIw MDEvMTIvMTEvDQo+ICAgICAgICAgYmFjay10by1iYXNpY3Mv4p+pLg0KPiANCj4gRVhBTVBM RVMNCj4gICAgICAgICBUaGUgZm9sbG93aW5nIGFyZSBleGFtcGxlcyBvZiBjb3JyZWN0IHVz ZSBvZiBlYWNoIG9mIHRoZXNlIGZ1bmN0aW9ucy4NCj4gDQo+ICAgICAgICAgc3RwY3B5KDMp DQo+ICAgICAgICAgICAgICAgICAgICBwID0gYnVmOw0KPiAgICAgICAgICAgICAgICAgICAg cCA9IHN0cGNweShwLCAiSGVsbG8gIik7DQo+ICAgICAgICAgICAgICAgICAgICBwID0gc3Rw Y3B5KHAsICJ3b3JsZCIpOw0KPiAgICAgICAgICAgICAgICAgICAgcCA9IHN0cGNweShwLCAi ISIpOw0KPiAgICAgICAgICAgICAgICAgICAgbGVuID0gcCAtIGJ1ZjsNCj4gICAgICAgICAg ICAgICAgICAgIHB1dHMoYnVmKTsNCj4gDQo+ICAgICAgICAgc3RyY3B5KDMpDQo+ICAgICAg ICAgc3RyY2F0KDMpDQo+ICAgICAgICAgICAgICAgICAgICBzdHJjcHkoYnVmLCAiSGVsbG8g Iik7DQo+ICAgICAgICAgICAgICAgICAgICBzdHJjYXQoYnVmLCAid29ybGQiKTsNCj4gICAg ICAgICAgICAgICAgICAgIHN0cmNhdChidWYsICIhIik7DQo+ICAgICAgICAgICAgICAgICAg ICBsZW4gPSBzdHJsZW4oYnVmKTsNCj4gICAgICAgICAgICAgICAgICAgIHB1dHMoYnVmKTsN Cj4gDQo+ICAgICAgICAgc3RwZWNweSgzKQ0KPiAgICAgICAgIHN0cGVjcHl4KDMpDQo+ICAg ICAgICAgICAgICAgICAgICBwYXN0X2VuZCA9IGJ1ZiArIHNpemVvZihidWYpOw0KPiAgICAg ICAgICAgICAgICAgICAgcCA9IGJ1ZjsNCj4gICAgICAgICAgICAgICAgICAgIHAgPSBzdHBl Y3B5KHAsIHBhc3RfZW5kLCAiSGVsbG8gIik7DQo+ICAgICAgICAgICAgICAgICAgICBwID0g c3RwZWNweShwLCBwYXN0X2VuZCwgIndvcmxkIik7DQo+ICAgICAgICAgICAgICAgICAgICBw ID0gc3RwZWNweShwLCBwYXN0X2VuZCwgIiEiKTsNCj4gICAgICAgICAgICAgICAgICAgIGlm IChwID09IHBhc3RfZW5kKSB7DQo+ICAgICAgICAgICAgICAgICAgICAgICAgcC0tOw0KPiAg ICAgICAgICAgICAgICAgICAgICAgIGdvdG8gdG9vbG9uZzsNCj4gICAgICAgICAgICAgICAg ICAgIH0NCj4gICAgICAgICAgICAgICAgICAgIGxlbiA9IHAgLSBidWY7DQo+ICAgICAgICAg ICAgICAgICAgICBwdXRzKGJ1Zik7DQo+IA0KPiAgICAgICAgIHN0cmxjcHkoM2JzZCkNCj4g ICAgICAgICBzdHJsY2F0KDNic2QpDQo+ICAgICAgICAgICAgICAgICAgICBpZiAoc3RybGNw eShidWYsICJIZWxsbyAiLCBzaXplb2YoYnVmKSkgPj0gc2l6ZW9mKGJ1ZikpDQo+ICAgICAg ICAgICAgICAgICAgICAgICAgZ290byB0b29sb25nOw0KPiAgICAgICAgICAgICAgICAgICAg aWYgKHN0cmxjYXQoYnVmLCAid29ybGQiLCBzaXplb2YoYnVmKSkgPj0gc2l6ZW9mKGJ1Zikp DQo+ICAgICAgICAgICAgICAgICAgICAgICAgZ290byB0b29sb25nOw0KPiAgICAgICAgICAg ICAgICAgICAgbGVuID0gc3RybGNhdChidWYsICIhIiwgc2l6ZW9mKGJ1ZikpOw0KPiAgICAg ICAgICAgICAgICAgICAgaWYgKGxlbiA+PSBzaXplb2YoYnVmKSkNCj4gICAgICAgICAgICAg ICAgICAgICAgICBnb3RvIHRvb2xvbmc7DQo+ICAgICAgICAgICAgICAgICAgICBwdXRzKGJ1 Zik7DQo+IA0KPiAgICAgICAgIHN0cnNjcHkoMykNCj4gICAgICAgICAgICAgICAgICAgIGxl biA9IHN0cnNjcHkoYnVmLCAiSGVsbG8gd29ybGQhIiwgc2l6ZW9mKGJ1ZikpOw0KPiAgICAg ICAgICAgICAgICAgICAgaWYgKGxlbiA9PSAtRTJCSUcpDQo+ICAgICAgICAgICAgICAgICAg ICAgICAgZ290byB0b29sb25nOw0KPiAgICAgICAgICAgICAgICAgICAgcHV0cyhidWYpOw0K PiANCj4gICAgICAgICBzdHBuY3B5KDMpDQo+ICAgICAgICAgICAgICAgICAgICBwYXN0X2Vu ZCA9IGJ1ZiArIHNpemVvZihidWYpOw0KPiAgICAgICAgICAgICAgICAgICAgZW5kID0gc3Rw bmNweShidWYsICJIZWxsbyB3b3JsZCEiLCBzaXplb2YoYnVmKSk7DQo+ICAgICAgICAgICAg ICAgICAgICBpZiAoZW5kID09IHBhc3RfZW5kKQ0KPiAgICAgICAgICAgICAgICAgICAgICAg IGdvdG8gdG9vbG9uZzsNCj4gICAgICAgICAgICAgICAgICAgIGxlbiA9IGVuZCAtIGJ1ZjsN Cj4gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9mKGJ1 Zik7IGkrKykNCj4gICAgICAgICAgICAgICAgICAgICAgICBwdXRjaGFyKGJ1ZltpXSk7DQo+ IA0KPiAgICAgICAgIHN0cm5jcHkoMykNCj4gICAgICAgICAgICAgICAgICAgIHN0cm5jcHko YnVmLCAiSGVsbG8gd29ybGQhIiwgc2l6ZW9mKGJ1ZikpOw0KPiAgICAgICAgICAgICAgICAg ICAgaWYgKGJ1ZiArIHNpemVvZihidWYpIC0gMSA9PSAnXDAnKQ0KPiAgICAgICAgICAgICAg ICAgICAgICAgIGdvdG8gdG9vbG9uZzsNCj4gICAgICAgICAgICAgICAgICAgIGxlbiA9IHN0 cm5sZW4oYnVmLCBzaXplb2YoYnVmKSk7DQo+ICAgICAgICAgICAgICAgICAgICBmb3IgKHNp emVfdCBpID0gMDsgaSA8IHNpemVvZihidWYpOyBpKyspDQo+ICAgICAgICAgICAgICAgICAg ICAgICAgcHV0Y2hhcihidWZbaV0pOw0KPiANCj4gICAgICAgICB1c3RyMnN0cCgzKQ0KPiAg ICAgICAgICAgICAgICAgICAgcCA9IGJ1ZjsNCj4gICAgICAgICAgICAgICAgICAgIHAgPSB1 c3RyMnN0cChwLCAiSGVsbG8gIiwgNik7DQo+ICAgICAgICAgICAgICAgICAgICBwID0gdXN0 cjJzdHAocCwgIndvcmxkIiwgNDIpOyAgLy8gUGFkZGluZyBudWxsIGJ5dGVzIGlnbm9yZWQu DQo+ICAgICAgICAgICAgICAgICAgICBwID0gdXN0cjJzdHAocCwgIiEiLCAxKTsNCj4gICAg ICAgICAgICAgICAgICAgIGxlbiA9IHAgLSBidWY7DQo+ICAgICAgICAgICAgICAgICAgICBw dXRzKGJ1Zik7DQo+IA0KPiAgICAgICAgIHN0cm5jYXQoMykNCj4gICAgICAgICAgICAgICAg ICAgIGJ1ZlswXSA9ICdcMCc7ICAvLyBUaGVyZeKAmXMgbm8g4oCZY3B54oCZIGZ1bmN0aW9u IHRvIHRoaXMg4oCZY2F04oCZLg0KPiAgICAgICAgICAgICAgICAgICAgc3RybmNhdChidWYs ICJIZWxsbyAiLCA2KTsNCj4gICAgICAgICAgICAgICAgICAgIHN0cm5jYXQoYnVmLCAid29y bGQiLCA0Mik7ICAvLyBQYWRkaW5nIG51bGwgYnl0ZXMgaWdub3JlZC4NCj4gICAgICAgICAg ICAgICAgICAgIHN0cm5jYXQoYnVmLCAiISIsIDEpOw0KPiAgICAgICAgICAgICAgICAgICAg bGVuID0gc3RybGVuKGJ1Zik7DQo+ICAgICAgICAgICAgICAgICAgICBwdXRzKGJ1Zik7DQo+ IA0KPiAgICAgICAgIG1lbXBjcHkoMykNCj4gICAgICAgICAgICAgICAgICAgIHAgPSBidWY7 DQo+ICAgICAgICAgICAgICAgICAgICBwID0gbWVtcGNweShwLCAiSGVsbG8gIiwgNik7DQo+ ICAgICAgICAgICAgICAgICAgICBwID0gbWVtcGNweShwLCAid29ybGQiLCA1KTsNCj4gICAg ICAgICAgICAgICAgICAgIHAgPSBtZW1wY3B5KHAsICIhIiwgMSk7DQo+ICAgICAgICAgICAg ICAgICAgICBwID0gJ1wwJzsNCj4gICAgICAgICAgICAgICAgICAgIGxlbiA9IHAgLSBidWY7 DQo+ICAgICAgICAgICAgICAgICAgICBwdXRzKGJ1Zik7DQo+IA0KPiBTRUUgQUxTTw0KPiAg ICAgICAgIGJ6ZXJvKDMpLCBtZW1jcHkoMyksIG1lbWNjcHkoMyksIG1lbXBjcHkoMyksIHN0 cmluZygzKQ0KPiANCj4gTGludXggbWFu4oCQcGFnZXMgKHVucmVsZWFzZWQpICAgICAgICAo ZGF0ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJjcHkoMykNCj4gDQoNCi0tIA0K PGh0dHA6Ly93d3cuYWxlamFuZHJvLWNvbG9tYXIuZXMvPg0K --------------NA53WMELDqCsxX0t0HBpDEqv-- --------------x7h9J40ZTwwLgdA034iqLu2P Content-Type: application/pgp-signature; name="OpenPGP_signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="OpenPGP_signature" -----BEGIN PGP SIGNATURE----- iQIzBAEBCgAdFiEE6jqH8KTroDDkXfJAnowa+77/2zIFAmOZFYIACgkQnowa+77/ 2zLBtA/+P1XcqKn5WRM7vscTUuaPiAtF/NpSu5MW21YDzAMnExmMETq4yX3UMvl+ PGZhPRCcnm6JxMHFApNqX7lKglzUfBUUe0m1idrENIz1KoCb8O7gxKOg3PaJe3Gi QeTT8ye2gx+lkUcPsZLTWpgvv04Eo+8/4dgOi3lh0CeJoxG7s1DySVxYieIgYrAu 3BD1Xaku5SQf+t9/YNxNF7vHYkJkKLOaIgh31C8hSINpdctzIsnf7w6hMbgbcMs3 z9BdAbY92qPGkzweD106MJjGBYpdC5BFP1au2DY7dNbXns45CAzaqJG/TY8dXEai 4N/k/gycTjlrlswN8Shav1FFvX70dNfedplVYPjYG9MxpUG+YISw9TGSX3WGXWHZ 1pm0RRDI72KXXkvDPhg75zPFMDBNomanwnVLgTNvZNjVT6h3JI1wiB4oAYeinNQ+ CWEkWvudFAH1b5KkcKnnW5qz4inQjPghS7FTsV0EUjtBQoLbnGXflEK6VMRm6dwj uXtRGZqFJ8gNNHq96pDP62/l+GbrtgWiAyocnh0CqabQZUn6IL+4R3ldokEnbnAw Pa2osoc762QzvyuV9KmXdgmJDIp2Nx84VRbulYvOKyTiNUDsKE+cQdM78JTxS1dT ZJ81D27HlY/iT3lGKxvbIO7vrjHONcAMZ72Ej5DjhVDaKIvAqmk= =FHCb -----END PGP SIGNATURE----- --------------x7h9J40ZTwwLgdA034iqLu2P--