From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wr1-x436.google.com (mail-wr1-x436.google.com [IPv6:2a00:1450:4864:20::436]) by sourceware.org (Postfix) with ESMTPS id F28AB3858D28; Mon, 18 Jul 2022 10:25:20 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org F28AB3858D28 Received: by mail-wr1-x436.google.com with SMTP id r2so15333749wrs.3; Mon, 18 Jul 2022 03:25:20 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent:subject :content-language:from:to:cc:references:in-reply-to; bh=paBiYKBZJ0DGtVqwKlN7IZA0j6NNV3zgh15F6Khz3Mw=; b=cfC0felwLPrfqVD+APwApR61Zr4Fdter7p668emPgpUu6TuR+vI7buc4FAID2ygkd7 4ZRG1KthzxIwCsMY1nEbNk44YRMIvMrKUEdDLEPGJoBsy6Lb36lLnWOnQlTgz7IisCB3 h7vHjzF700gCOPqs7NDi25mBt8w/yC+RdUbBTRXH2qHrO2J142VjHTMECFBDlNTL232Y XDIv6mRXwZzKmBZqRJRaCp978AeSEKasL0BIcpDG6y8lozJHU703Xww3aapsNNwDvVEF gsChISomAcZFY0+uEDvsuWP7S6WSWF7NiUTCeK/E+sqlfdVVBcztFbCPsMaGFIibGtOE 3l9A== X-Gm-Message-State: AJIora8Vv2n1ltHUo/tDMA6dM1iDs25G0HD4kBc0sZ/lqdc3AA3EQXIL oOiWbDuYUj05bcEUeGz6qYc= X-Google-Smtp-Source: AGRyM1sNS1fUPk8rmbnDVXNE42JG+jgRlBQf7ANw/VSpA9r0W/pBWhJSJuIYTlPabOvN5RP/tp6cFA== X-Received: by 2002:adf:fbc6:0:b0:21d:3fc3:99e with SMTP id d6-20020adffbc6000000b0021d3fc3099emr22099772wrs.550.1658139918541; Mon, 18 Jul 2022 03:25:18 -0700 (PDT) Received: from ?IPV6:2a01:e0a:1dc:b1c0:150c:9bbe:7de3:3dc9? ([2a01:e0a:1dc:b1c0:150c:9bbe:7de3:3dc9]) by smtp.googlemail.com with ESMTPSA id m26-20020a05600c3b1a00b003a31b79dc0esm4232803wms.1.2022.07.18.03.25.17 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 18 Jul 2022 03:25:17 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------mvuuzmR5jKXQQpXzbAkLbmHE" Message-ID: <4a5b5db5-fd87-f5e4-42fc-625ecd1b1c6c@gmail.com> Date: Mon, 18 Jul 2022 12:25:16 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.9.1 Subject: Re: [PATCH] Simplify branching in algos Content-Language: fr From: =?UTF-8?Q?Fran=c3=a7ois_Dumont?= To: Jonathan Wakely , "libstdc++@gcc.gnu.org" Cc: gcc-patches References: <3efeb7a1-ac7f-17e7-6fd0-62b363be34d0@gmail.com> <618ea432-517e-28d2-2ce4-f93c3e166c0e@gmail.com> In-Reply-To: <618ea432-517e-28d2-2ce4-f93c3e166c0e@gmail.com> X-Spam-Status: No, score=-9.7 required=5.0 tests=BAYES_00, BODY_8BITS, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, NICE_REPLY_A, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libstdc++@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libstdc++ mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 18 Jul 2022 10:25:23 -0000 This is a multi-part message in MIME format. --------------mvuuzmR5jKXQQpXzbAkLbmHE Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hi     I just noticed that I still had this nice enhancement in my local branches.     Ok to commit ? François On 21/11/21 21:34, François Dumont wrote: > A recent thread on this mailing list made me remember that this > proposal is still open. > > I've updated it just to add a missing std qualification. > > François > > On 08/06/21 5:21 pm, Jonathan Wakely wrote: >> I haven't forgotten this one, I just need to double-check that we >> don't create another problem like std::rotate in 9.1 >> >> I'll try to finish the review tomorrow. >> >> J. >> >> >> On 27/05/21 07:04 +0200, François Dumont via Libstdc++ wrote: >>> Following latest fixes in std::inplace_merge and std::stable_sort >>> you propose Jonathan to enhance branching in the first. >>> >>> Here is a proposal based on yours to do so in both algos. >>> >>>     libstdc++: Enhance branching in std::inplace_merge and >>> std::stable_sort >>> >>>     libstdc++-v3/ChangeLog: >>> >>>             * include/bits/stl_algo.h >>>             (__merge_adaptive): Adapt to merge only when buffer is >>> large enough.. >>>             (__merge_adaptive_resize): New, adapt merge when buffer >>> is too small. >>>             (__inplace_merge): Adapt, use latter. >>>             (__stable_sort_adaptive): Adapt to sort only when buffer >>> is large enough. >>>             (__stable_sort_adaptive_resize): New, adapt sort when >>> buffer is too small. >>>             (__stable_sort): Adapt, use latter. >>> >>> Tested under Linux x64. >>> >>> Ok to commit ? >>> >>> François >>> --------------mvuuzmR5jKXQQpXzbAkLbmHE Content-Type: text/x-patch; charset=UTF-8; name="algo.patch" Content-Disposition: attachment; filename="algo.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2FsZ28uaCBiL2xp YnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2FsZ28uaAppbmRleCAxZDhlZDRlNWZhOC4u YzYwNzgwNTQ1MTQgMTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3Rs X2FsZ28uaAorKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9hbGdvLmgKQEAg LTIzOTcsMjEgKzIzOTcsMzUgQEAgX0dMSUJDWFhfRU5EX0lOTElORV9BQklfTkFNRVNQQUNF KF9WMikKIAkJICAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fbWlkZGxlLAogCQkgICAg IF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19sYXN0LAogCQkgICAgIF9EaXN0YW5jZSBfX2xl bjEsIF9EaXN0YW5jZSBfX2xlbjIsCi0JCSAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0 YW5jZSBfX2J1ZmZlcl9zaXplLAotCQkgICAgIF9Db21wYXJlIF9fY29tcCkKKwkJICAgICBf UG9pbnRlciBfX2J1ZmZlciwgX0NvbXBhcmUgX19jb21wKQogICAgIHsKLSAgICAgIGlmIChf X2xlbjEgPD0gX19sZW4yICYmIF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKQorICAgICAgaWYg KF9fbGVuMSA8PSBfX2xlbjIpCiAJewogCSAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gX0dM SUJDWFhfTU9WRTMoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsKIAkgIHN0ZDo6X19t b3ZlX21lcmdlX2FkYXB0aXZlKF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbWlkZGxlLCBf X2xhc3QsCiAJCQkJICAgICBfX2ZpcnN0LCBfX2NvbXApOwogCX0KLSAgICAgIGVsc2UgaWYg KF9fbGVuMiA8PSBfX2J1ZmZlcl9zaXplKQorICAgICAgZWxzZQogCXsKIAkgIF9Qb2ludGVy IF9fYnVmZmVyX2VuZCA9IF9HTElCQ1hYX01PVkUzKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVm ZmVyKTsKIAkgIHN0ZDo6X19tb3ZlX21lcmdlX2FkYXB0aXZlX2JhY2t3YXJkKF9fZmlyc3Qs IF9fbWlkZGxlLCBfX2J1ZmZlciwKIAkJCQkJICAgICAgX19idWZmZXJfZW5kLCBfX2xhc3Qs IF9fY29tcCk7CiAJfQorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rp b25hbEl0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2UsCisJICAgdHlwZW5hbWUgX1BvaW50 ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIHZvaWQKKyAgICBfX21lcmdlX2FkYXB0aXZl X3Jlc2l6ZShfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fZmlyc3QsCisJCQkgICAgX0JpZGly ZWN0aW9uYWxJdGVyYXRvciBfX21pZGRsZSwKKwkJCSAgICBfQmlkaXJlY3Rpb25hbEl0ZXJh dG9yIF9fbGFzdCwKKwkJCSAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4y LAorCQkJICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSwK KwkJCSAgICBfQ29tcGFyZSBfX2NvbXApCisgICAgeworICAgICAgaWYgKF9fbGVuMSA8PSBf X2J1ZmZlcl9zaXplIHx8IF9fbGVuMiA8PSBfX2J1ZmZlcl9zaXplKQorCXN0ZDo6X19tZXJn ZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LAorCQkJICAgICAgX19sZW4x LCBfX2xlbjIsIF9fYnVmZmVyLCBfX2NvbXApOwogICAgICAgZWxzZQogCXsKIAkgIF9CaWRp cmVjdGlvbmFsSXRlcmF0b3IgX19maXJzdF9jdXQgPSBfX2ZpcnN0OwpAQCAtMjQzOSwxNCAr MjQ1MywxNCBAQCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQogCiAJ ICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fbmV3X21pZGRsZQogCSAgICA9IHN0ZDo6X19y b3RhdGVfYWRhcHRpdmUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsCi0J CQkJICAgICBfX2xlbjEgLSBfX2xlbjExLCBfX2xlbjIyLCBfX2J1ZmZlciwKLQkJCQkgICAg IF9fYnVmZmVyX3NpemUpOwotCSAgc3RkOjpfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9f Zmlyc3RfY3V0LCBfX25ld19taWRkbGUsIF9fbGVuMTEsCi0JCQkJX19sZW4yMiwgX19idWZm ZXIsIF9fYnVmZmVyX3NpemUsIF9fY29tcCk7Ci0JICBzdGQ6Ol9fbWVyZ2VfYWRhcHRpdmUo X19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwKLQkJCQlfX2xlbjEgLSBfX2xl bjExLAotCQkJCV9fbGVuMiAtIF9fbGVuMjIsIF9fYnVmZmVyLAotCQkJCV9fYnVmZmVyX3Np emUsIF9fY29tcCk7CisJCQkJICAgICBfX2xlbjEgLSBfX2xlbjExLCBfX2xlbjIyLAorCQkJ CSAgICAgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOworCSAgc3RkOjpfX21lcmdlX2FkYXB0 aXZlX3Jlc2l6ZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLAorCQkJCSAg ICAgICBfX2xlbjExLCBfX2xlbjIyLAorCQkJCSAgICAgICBfX2J1ZmZlciwgX19idWZmZXJf c2l6ZSwgX19jb21wKTsKKwkgIHN0ZDo6X19tZXJnZV9hZGFwdGl2ZV9yZXNpemUoX19uZXdf bWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwKKwkJCQkgICAgICAgX19sZW4xIC0gX19s ZW4xMSwgX19sZW4yIC0gX19sZW4yMiwKKwkJCQkgICAgICAgX19idWZmZXIsIF9fYnVmZmVy X3NpemUsIF9fY29tcCk7CiAJfQogICAgIH0KIApAQCAtMjUyNCwxMSArMjUzOCwxNCBAQCBf R0xJQkNYWF9FTkRfSU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQogICAgICAgLy8gW2ZpcnN0 LG1pZGRsZSkgYW5kIFttaWRkbGUsbGFzdCkuCiAgICAgICBfVG1wQnVmIF9fYnVmKF9fZmly c3QsIHN0ZDo6bWluKF9fbGVuMSwgX19sZW4yKSk7CiAKLSAgICAgIGlmIChfX2J1Zi5iZWdp bigpID09IDApCisgICAgICBpZiAoX19idWlsdGluX2V4cGVjdChfX2J1Zi5zaXplKCkgPT0g X19idWYucmVxdWVzdGVkX3NpemUoKSwgdHJ1ZSkpCisJc3RkOjpfX21lcmdlX2FkYXB0aXZl CisJICAoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIsIF9fYnVm LmJlZ2luKCksIF9fY29tcCk7CisgICAgICBlbHNlIGlmIChfX2J1aWx0aW5fZXhwZWN0KF9f YnVmLmJlZ2luKCkgPT0gMCwgZmFsc2UpKQogCXN0ZDo6X19tZXJnZV93aXRob3V0X2J1ZmZl cgogCSAgKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLCBfX2Nv bXApOwogICAgICAgZWxzZQotCXN0ZDo6X19tZXJnZV9hZGFwdGl2ZQorCXN0ZDo6X19tZXJn ZV9hZGFwdGl2ZV9yZXNpemUKIAkgIChfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xl bjEsIF9fbGVuMiwgX19idWYuYmVnaW4oKSwKIAkgICBfRGlzdGFuY2VUeXBlKF9fYnVmLnNp emUoKSksIF9fY29tcCk7CiAgICAgfQpAQCAtMjcwOSwxMCArMjcyNiwyNSBAQCBfR0xJQkNY WF9FTkRfSU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQogCX0KICAgICB9CiAKKyAgdGVtcGxh dGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfUG9pbnRlciwg dHlwZW5hbWUgX0NvbXBhcmU+CisgICAgdm9pZAorICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRp dmUoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCisJCQkgICBfUmFuZG9tQWNjZXNz SXRlcmF0b3IgX19taWRkbGUsCisJCQkgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0 LAorCQkJICAgX1BvaW50ZXIgX19idWZmZXIsIF9Db21wYXJlIF9fY29tcCkKKyAgICB7Cisg ICAgICBzdGQ6Ol9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwg X19idWZmZXIsIF9fY29tcCk7CisgICAgICBzdGQ6Ol9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZl cihfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgX19jb21wKTsKKworICAgICAgc3RkOjpf X21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsCisJCQkgICAgX19t aWRkbGUgLSBfX2ZpcnN0LCBfX2xhc3QgLSBfX21pZGRsZSwKKwkJCSAgICBfX2J1ZmZlciwg X19jb21wKTsKKyAgICB9CisKICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0 ZXJhdG9yLCB0eXBlbmFtZSBfUG9pbnRlciwKIAkgICB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5 cGVuYW1lIF9Db21wYXJlPgogICAgIHZvaWQKLSAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZl KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAorICAgIF9fc3RhYmxlX3NvcnRfYWRh cHRpdmVfcmVzaXplKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogCQkJCSAgX1Jh bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKIAkJCQkgIF9Qb2ludGVyIF9fYnVmZmVyLCBf RGlzdGFuY2UgX19idWZmZXJfc2l6ZSwKIAkJCQkgIF9Db21wYXJlIF9fY29tcCkKQEAgLTI3 MjEsMjMgKzI3NTMsMjAgQEAgX0dMSUJDWFhfRU5EX0lOTElORV9BQklfTkFNRVNQQUNFKF9W MikKICAgICAgIGNvbnN0IF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX21pZGRsZSA9IF9fZmly c3QgKyBfX2xlbjsKICAgICAgIGlmIChfX2xlbiA+IF9fYnVmZmVyX3NpemUpCiAJewotCSAg c3RkOjpfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZl ciwKKwkgIHN0ZDo6X19zdGFibGVfc29ydF9hZGFwdGl2ZV9yZXNpemUoX19maXJzdCwgX19t aWRkbGUsIF9fYnVmZmVyLAogCQkJCQkgICAgIF9fYnVmZmVyX3NpemUsIF9fY29tcCk7Ci0J ICBzdGQ6Ol9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19taWRkbGUsIF9fbGFzdCwgX19idWZm ZXIsCisJICBzdGQ6Ol9fc3RhYmxlX3NvcnRfYWRhcHRpdmVfcmVzaXplKF9fbWlkZGxlLCBf X2xhc3QsIF9fYnVmZmVyLAogCQkJCQkgICAgIF9fYnVmZmVyX3NpemUsIF9fY29tcCk7Ci0J fQotICAgICAgZWxzZQotCXsKLQkgIHN0ZDo6X19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9f Zmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19jb21wKTsKLQkgIHN0ZDo6X19tZXJnZV9z b3J0X3dpdGhfYnVmZmVyKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCBfX2NvbXApOwot CX0KLQotICAgICAgc3RkOjpfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBf X2xhc3QsCisJICBzdGQ6Ol9fbWVyZ2VfYWRhcHRpdmVfcmVzaXplKF9fZmlyc3QsIF9fbWlk ZGxlLCBfX2xhc3QsCiAJCQkJICAgICAgIF9EaXN0YW5jZShfX21pZGRsZSAtIF9fZmlyc3Qp LAogCQkJCSAgICAgICBfRGlzdGFuY2UoX19sYXN0IC0gX19taWRkbGUpLAogCQkJCSAgICAg ICBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwKIAkJCQkgICAgICAgX19jb21wKTsKIAl9Cisg ICAgICBlbHNlCisJc3RkOjpfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlk ZGxlLCBfX2xhc3QsCisJCQkJICAgIF9fYnVmZmVyLCBfX2NvbXApOworICAgIH0KIAogICAv Ly8gVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgdGhlIHN0YWJsZSBzb3J0aW5nIHJv dXRpbmVzLgogICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5 cGVuYW1lIF9Db21wYXJlPgpAQCAtNDk5NiwxMCArNTAyNSwxMyBAQCBfR0xJQkNYWF9CRUdJ Tl9OQU1FU1BBQ0VfQUxHTwogICAgICAgLy8gc28gdGhlIGJ1ZmZlciBvbmx5IG5lZWRzIHRv IGZpdCBoYWxmIHRoZSByYW5nZSBhdCBvbmNlLgogICAgICAgX1RtcEJ1ZiBfX2J1ZihfX2Zp cnN0LCAoX19sYXN0IC0gX19maXJzdCArIDEpIC8gMik7CiAKLSAgICAgIGlmIChfX2J1Zi5i ZWdpbigpID09IDApCisgICAgICBpZiAoX19idWlsdGluX2V4cGVjdChfX2J1Zi5yZXF1ZXN0 ZWRfc2l6ZSgpID09IF9fYnVmLnNpemUoKSwgdHJ1ZSkpCisJc3RkOjpfX3N0YWJsZV9zb3J0 X2FkYXB0aXZlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX2J1Zi5zaXplKCksIF9fbGFzdCwKKwkJ CQkgICAgX19idWYuYmVnaW4oKSwgX19jb21wKTsKKyAgICAgIGVsc2UgaWYgKF9fYnVpbHRp bl9leHBlY3QoX19idWYuYmVnaW4oKSA9PSAwLCBmYWxzZSkpCiAJc3RkOjpfX2lucGxhY2Vf c3RhYmxlX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgICAgZWxzZQotCXN0 ZDo6X19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIF9fYnVmLmJlZ2lu KCksCisJc3RkOjpfX3N0YWJsZV9zb3J0X2FkYXB0aXZlX3Jlc2l6ZShfX2ZpcnN0LCBfX2xh c3QsIF9fYnVmLmJlZ2luKCksCiAJCQkJCSAgIF9EaXN0YW5jZVR5cGUoX19idWYuc2l6ZSgp KSwgX19jb21wKTsKICAgICB9CiAK --------------mvuuzmR5jKXQQpXzbAkLbmHE--