From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-Status: No, score=-3.6 required=3.0 tests=AWL,BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_PASS shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dcvr.yhbt.net (Postfix) with ESMTPS id C71111F55B for ; Wed, 20 May 2020 12:42:17 +0000 (UTC) Received: from localhost ([::1]:35856 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jbO36-0008Ah-Lq for normalperson@yhbt.net; Wed, 20 May 2020 08:42:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:41222) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jbO0S-0002nB-Kr for bug-gnulib@gnu.org; Wed, 20 May 2020 08:39:32 -0400 Received: from mail-pg1-x536.google.com ([2607:f8b0:4864:20::536]:44735) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jbO0Q-0008WQ-QQ for bug-gnulib@gnu.org; Wed, 20 May 2020 08:39:32 -0400 Received: by mail-pg1-x536.google.com with SMTP id p30so1353731pgl.11 for ; Wed, 20 May 2020 05:39:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=FaYuGLrQa3N/haI4zzYcQjwyqCbZ2q9UMZOBbDs0fFY=; b=s+CJ4rgDQ9fdExGiX8/tJn6GL6l4P4QmY+lU85hQ47CY68G1Yo9I2vNLACqnmaqjox s2Y8oWMc9LYGS+X3mbixF4+E8efJaxI8ixk7fGhD5z7GTL+I58aA6oVsOu29zdMzOK12 ct+4ca8iyvpDS8kYfP8Mvo8dporQP55bfXrBpA6M0QYhM1TSgBBKYXfOoGAXOecodPDO 1luNc4adffXyiARRmHpr+koJmUsjuU4XZgw7LFExe8jIGc+wrmZr6yCJVIlKOjIq5Hqr /Nk7CNIy7mbFA+ILpGA+E7dmvpUp+DF3O1YXH1enFlUhH1CfMKQg5aV1tpt7waA8izsN t/jg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=FaYuGLrQa3N/haI4zzYcQjwyqCbZ2q9UMZOBbDs0fFY=; b=qWvQXVVUXEgESEJq5Seh0AqBb04xKStI+zKF0AWfwiGxggrRy8EviOE2Ntd6umUMcK o6/Gkl4DtZSNVGN/nHq+iC8V3x1dEznrUTehDRLR/vqTPkS7q/BMM5Z3pSOVpgve9ugU OrwsUji860kM+mt65aZbhdvYP6iLhX22jX7dUP06bowH0L4sTRe84lvoalU7cveLr3aa qp+gJXrkBNURHTahyIrz0G0KxFvMqTi4NF0u3jN2mj1Tvco3pdXKtbAINrJ/FTfDjyi5 amypVwGho92GwPXNknpeF4TpSZ5PnX1dHGyx6pxpvDBnkED00YUQYoAyZBomeu3bvEap K9DQ== X-Gm-Message-State: AOAM533AzcLrpXBBOJkPN3HJRUixmPefTXVjlq7fOfRGQ03ob+xN7puw M7ujIBhqOsZ0dAmEsQXfxlpKjISLcegMCTT8Vpc= X-Google-Smtp-Source: ABdhPJz7LCf01FRWctOfAakTCGseoE69qAW5iHSHaGAtDe6cldKEqB/eh1BAuR4w//Zkv4ByrFCueB3gYeJ3qbP2Z04= X-Received: by 2002:a05:6a00:1510:: with SMTP id q16mr4021231pfu.311.1589978369194; Wed, 20 May 2020 05:39:29 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: =?UTF-8?Q?Marc_Nieper=2DWi=C3=9Fkirchen?= Date: Wed, 20 May 2020 14:39:17 +0200 Message-ID: Subject: Re: Easy Accurate Reading and Writing of Floating-Point Numbers To: Paul Eggert Content-Type: multipart/mixed; boundary="000000000000e5a26905a613af48" Received-SPF: pass client-ip=2607:f8b0:4864:20::536; envelope-from=marc.nieper@gmail.com; helo=mail-pg1-x536.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: bug-gnulib@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Gnulib discussion list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?Q?Marc_Nieper=2DWi=C3=9Fkirchen?= , bug-gnulib@gnu.org Errors-To: bug-gnulib-bounces+normalperson=yhbt.net@gnu.org Sender: "bug-gnulib" --000000000000e5a26905a613af48 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Please see the attached patch file, my first attempt (and first contribution to Gnulib). Am Di., 19. Mai 2020 um 17:51 Uhr schrieb Paul Eggert : > > On 5/19/20 8:35 AM, Marc Nieper-Wi=C3=9Fkirchen wrote: > >> It is, however, locale-dependent, and there is no "c_dtoastr" > >> version as there is a "c_strtod". (Could we get such a wrapper?) > > Or a version "c_dtoastr" that uses "c_snprintf" and "c_strtod" internal= ly. > > Yes, that'd be good to have. Could you write that? --000000000000e5a26905a613af48 Content-Type: text/x-patch; charset="UTF-8"; name="0001-New-module-to-accurately-print-long-doubles-in-C-loc.patch" Content-Disposition: attachment; filename="0001-New-module-to-accurately-print-long-doubles-in-C-loc.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kafc135o0 RnJvbSBmNDMwOGM1MWNjNzNhOGIxMzk3YzQzNmY4ZGQ2NjdlMTVkNmQwYjliIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/TWFyYz0yME5pZXBlci1XaT1DMz05RmtpcmNo ZW4/PSA8bWFyY0BuaWVwZXItd2lzc2tpcmNoZW4uZGU+CkRhdGU6IFdlZCwgMjAgTWF5IDIwMjAg MTM6NTk6MzEgKzAyMDAKU3ViamVjdDogW1BBVENIXSBOZXcgbW9kdWxlIHRvIGFjY3VyYXRlbHkg cHJpbnQgKGxvbmcpIGRvdWJsZXMgaW4gQyBsb2NhbGUuCgotLS0KIENoYW5nZUxvZyAgICAgICAg ICAgICAgICB8IDE4ICsrKysrKysrKysrKysKIE1PRFVMRVMuaHRtbC5zaCAgICAgICAgICB8ICAy ICsrCiBsaWIvYy1kdG9hc3RyLmMgICAgICAgICAgfCAgMyArKysKIGxpYi9jLWxkdG9hc3RyLmMg ICAgICAgICB8ICAzICsrKwogbGliL2Z0b2FzdHIuYyAgICAgICAgICAgIHwgMjMgKysrKysrKysr KystLS0tLQogbGliL2Z0b2FzdHIuaCAgICAgICAgICAgIHwgIDYgKysrKysKIG1vZHVsZXMvYy1k dG9hc3RyICAgICAgICB8IDI3ICsrKysrKysrKysrKysrKysrKysKIG1vZHVsZXMvYy1kdG9hc3Ry LXRlc3RzICB8IDE4ICsrKysrKysrKysrKysKIG1vZHVsZXMvYy1sZHRvYXN0ciAgICAgICB8IDI3 ICsrKysrKysrKysrKysrKysrKysKIG1vZHVsZXMvYy1sZHRvYXN0ci10ZXN0cyB8IDE4ICsrKysr KysrKysrKysKIHRlc3RzL3Rlc3QtYy1kdG9hc3RyLmMgICB8IDU4ICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysKIHRlc3RzL3Rlc3QtYy1kdG9hc3RyLnNoICB8IDE1ICsr KysrKysrKysrCiB0ZXN0cy90ZXN0LWMtbGR0b2FzdHIuYyAgfCA1OCArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrCiB0ZXN0cy90ZXN0LWMtbGR0b2FzdHIuc2ggfCAxNSAr KysrKysrKysrKwogMTQgZmlsZXMgY2hhbmdlZCwgMjg1IGluc2VydGlvbnMoKyksIDYgZGVsZXRp b25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL2MtZHRvYXN0ci5jCiBjcmVhdGUgbW9kZSAx MDA2NDQgbGliL2MtbGR0b2FzdHIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IG1vZHVsZXMvYy1kdG9h c3RyCiBjcmVhdGUgbW9kZSAxMDA2NDQgbW9kdWxlcy9jLWR0b2FzdHItdGVzdHMKIGNyZWF0ZSBt b2RlIDEwMDY0NCBtb2R1bGVzL2MtbGR0b2FzdHIKIGNyZWF0ZSBtb2RlIDEwMDY0NCBtb2R1bGVz L2MtbGR0b2FzdHItdGVzdHMKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy90ZXN0LWMtZHRvYXN0 ci5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMvdGVzdC1jLWR0b2FzdHIuc2gKIGNyZWF0ZSBt b2RlIDEwMDY0NCB0ZXN0cy90ZXN0LWMtbGR0b2FzdHIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHRl c3RzL3Rlc3QtYy1sZHRvYXN0ci5zaAoKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxv ZwppbmRleCAxYzM5YjkyZTYuLmJlY2I0MGVlYyAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBi L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDIwLTA1LTIwICBNYXJjIE5pZXBlci1XacOf a2lyY2hlbiAgPG1hcmNAbmllcGVyLXdpc3NraXJjaGVuLmRlPgorCisJYy1kdG9hc3RyOiBuZXcg bW9kdWxlCisJYy1sZHRvYXN0cjogbmV3IG1vZHVsZQorCVRoZXNlIG1vZHVsZXMgcHJvdmlkZSB0 aGUgc2FtZSBmdW5jdGlvbmFsaXR5IGFzIHRoZSBtb2R1bGVzCisJZHRvYXN0ciBhbmQgbGR0b2Fz dHIgZXhjZXB0IGZvciB0aGUgZm9ybWF0dGluZyB0YWtpbmcgcGxhY2UgaW4gdGhlCisJQyBsb2Nh bGUuCisJKiBNT0RVTEVTLmh0bWwuc2g6IEFkZCBjLWR0b2FzdHIgYW5kIGMtbGR0b2FzdHIuCisJ KiBsaWIvYy1kdG9hc3RyLmMsIGxpYi9jLWxkdG9hc3RyLmM6IE5ldyBmaWxlcworCSogbGliL2Z0 b2FzdHIuYzogUHJlZml4IGV4cG9ydGVkIGZ1bmN0aW9ucyB3aGVuIHRoZSBtYWNybyBDX0xPQ0FM RSBpcworCWRlZmluZWQuICBVc2UgY19zbnByaW50ZiBhbmQgY19zdHJ0b2QvY19zdHJ0b2xkIGlu c3RlYWQgb2YKKwlzbnByaW50ZiBhbmQgc3RydG9kL3N0cnRvbGQgd2hoZW4gdGhlIG1hY3JvIENf TE9DQUxFIGlzIGRlZmluZWQuCisJKiBsaWIvZnRvYXN0ci5oOiBBZGQgcHJvdG90eXBlcyBmb3Ig Y19kdG9hc3RyIGFuZCBjX2xkdG9hc3RyLgorCSogbW9kdWxlcy9jLWR0b2FzdHIsIG1vZHVsZXMv Yy1kdG9hc3RyLXRlc3RzLCBtb2R1bGVzL2MtbGR0b2FzdHIsCisJbW9kdWxlcy9jLWxkdG9hc3Ry LXRlc3RzOiBOZXcgZmlsZXMuCisJKiB0ZXN0cy90ZXN0LWMtZHRvYXN0ci5jLCB0ZXN0cy90ZXN0 LWMtZHRvYXN0ci5zaCwKKwl0ZXN0cy1jLWxkdG9hc3RyLmMgdGVzdHMtYy1sZHRvYXN0ci5zaDog TmV3IGZpbGVzLgorCiAyMDIwLTA1LTE5ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVk dT4KIAogCWZ0b2FzdHI6IGZpeCBpZm5kZWYgdHlwbwpkaWZmIC0tZ2l0IGEvTU9EVUxFUy5odG1s LnNoIGIvTU9EVUxFUy5odG1sLnNoCmluZGV4IDMxOGExNWExZC4uMjgwYmQxNGRhIDEwMDc1NQot LS0gYS9NT0RVTEVTLmh0bWwuc2gKKysrIGIvTU9EVUxFUy5odG1sLnNoCkBAIC0yMzE5LDYgKzIz MTksOCBAQCBmdW5jX2FsbF9tb2R1bGVzICgpCiAgIGZ1bmNfZWNobyAiJGVsZW1lbnQiCiAKICAg ZnVuY19iZWdpbl90YWJsZQorICBmdW5jX21vZHVsZSBjLWR0b2FzdHIKKyAgZnVuY19tb2R1bGUg Yy1sZHRvYXN0CiAgIGZ1bmNfbW9kdWxlIGR0b2FzdHIKICAgZnVuY19tb2R1bGUgZnRvYXN0cgog ICBmdW5jX21vZHVsZSBpbnRwcm9wcwpkaWZmIC0tZ2l0IGEvbGliL2MtZHRvYXN0ci5jIGIvbGli L2MtZHRvYXN0ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMC4uYjU3NTI0 ZmIxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2MtZHRvYXN0ci5jCkBAIC0wLDAgKzEsMyBAQAor I2RlZmluZSBMRU5HVEggMgorI2RlZmluZSBDX0xPQ0FMRSAxCisjaW5jbHVkZSAiZnRvYXN0ci5j IgpkaWZmIC0tZ2l0IGEvbGliL2MtbGR0b2FzdHIuYyBiL2xpYi9jLWxkdG9hc3RyLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi41NDQ2ZmMzZTcKLS0tIC9kZXYvbnVsbAor KysgYi9saWIvYy1sZHRvYXN0ci5jCkBAIC0wLDAgKzEsMyBAQAorI2RlZmluZSBMRU5HVEggMwor I2RlZmluZSBDX0xPQ0FMRSAxCisjaW5jbHVkZSAiZnRvYXN0ci5jIgpkaWZmIC0tZ2l0IGEvbGli L2Z0b2FzdHIuYyBiL2xpYi9mdG9hc3RyLmMKaW5kZXggN2E3ZDQxMTNjLi40N2E4MzE1MmUgMTAw NjQ0Ci0tLSBhL2xpYi9mdG9hc3RyLmMKKysrIGIvbGliL2Z0b2FzdHIuYwpAQCAtMzMsMjAgKzMz LDI4IEBACiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KIAorI2lmZGVm IENfTE9DQUxFCisjIGluY2x1ZGUgImMtc25wcmludGYuaCIKKyMgaW5jbHVkZSAiYy1zdHJ0b2Qu aCIKKyMgZGVmaW5lIFBSRUZJWChuYW1lKSBjXyAjIyBuYW1lCisjZWxzZQorIyBkZWZpbmUgUFJF RklYKG5hbWUpIG5hbWUKKyNlbmRpZgorCiAjaWYgTEVOR1RIID09IDMKICMgZGVmaW5lIEZMT0FU IGxvbmcgZG91YmxlCiAjIGRlZmluZSBGTE9BVF9ESUcgTERCTF9ESUcKICMgZGVmaW5lIEZMT0FU X01JTiBMREJMX01JTgogIyBkZWZpbmUgRkxPQVRfUFJFQ19CT1VORCBfR0xfTERCTF9QUkVDX0JP VU5ECi0jIGRlZmluZSBGVE9BU1RSIGxkdG9hc3RyCisjIGRlZmluZSBGVE9BU1RSIFBSRUZJWCAo bGR0b2FzdHIpCiAjIGRlZmluZSBQUk9NT1RFRF9GTE9BVCBsb25nIGRvdWJsZQotIyBkZWZpbmUg U1RSVE9GIHN0cnRvbGQKKyMgZGVmaW5lIFNUUlRPRiBQUkVGSVggKHN0cnRvbGQpCiAjZWxpZiBM RU5HVEggPT0gMgogIyBkZWZpbmUgRkxPQVQgZG91YmxlCiAjIGRlZmluZSBGTE9BVF9ESUcgREJM X0RJRwogIyBkZWZpbmUgRkxPQVRfTUlOIERCTF9NSU4KICMgZGVmaW5lIEZMT0FUX1BSRUNfQk9V TkQgX0dMX0RCTF9QUkVDX0JPVU5ECi0jIGRlZmluZSBGVE9BU1RSIGR0b2FzdHIKKyMgZGVmaW5l IEZUT0FTVFIgUFJFRklYIChkdG9hc3RyKQogIyBkZWZpbmUgUFJPTU9URURfRkxPQVQgZG91Ymxl CiAjZWxzZQogIyBkZWZpbmUgTEVOR1RIIDEKQEAgLTU0LDcgKzYyLDcgQEAKICMgZGVmaW5lIEZM T0FUX0RJRyBGTFRfRElHCiAjIGRlZmluZSBGTE9BVF9NSU4gRkxUX01JTgogIyBkZWZpbmUgRkxP QVRfUFJFQ19CT1VORCBfR0xfRkxUX1BSRUNfQk9VTkQKLSMgZGVmaW5lIEZUT0FTVFIgZnRvYXN0 cgorIyBkZWZpbmUgRlRPQVNUUiBQUkVGSVggKGZ0b2FzdHIpCiAjIGRlZmluZSBQUk9NT1RFRF9G TE9BVCBkb3VibGUKICMgaWYgSEFWRV9TVFJUT0YKICMgIGRlZmluZSBTVFJUT0Ygc3RydG9mCkBA IC02NSwxMyArNzMsMTYgQEAKICAgIG1heSBnZW5lcmF0ZSBvbmUgb3IgdHdvIGV4dHJhIGRpZ2l0 cywgYnV0IHRoYXQncyBiZXR0ZXIgdGhhbiBub3QKICAgIHdvcmtpbmcgYXQgYWxsLiAgKi8KICNp Zm5kZWYgU1RSVE9GCi0jIGRlZmluZSBTVFJUT0Ygc3RydG9kCisjIGRlZmluZSBTVFJUT0YgUFJF RklYIChzdHJ0b2QpCiAjZW5kaWYKIAogLyogT24gaG9zdHMgd2hlcmUgaXQncyBub3Qga25vd24g dGhhdCBzbnByaW50ZiB3b3JrcywgdXNlIHNwcmludGYgdG8KICAgIGltcGxlbWVudCB0aGUgc3Vi c2V0IG5lZWRlZCBoZXJlLiAgVHlwaWNhbGx5IEJVRlNJWkUgaXMgYmlnIGVub3VnaAogICAgYW5k IHRoZXJlJ3MgbGl0dGxlIG9yIG5vIHBlcmZvcm1hbmNlIGhpdC4gICovCi0jaWYgISBHTlVMSUJf U05QUklOVEYKKyNpZmRlZiBDX0xPQ0FMRQorIyB1bmRlZiBzbnByaW50ZgorIyBkZWZpbmUgc25w cmludGYgY19zbnByaW50ZgorI2VsaWYgISBHTlVMSUJfU05QUklOVEYKICMgdW5kZWYgc25wcmlu dGYKICMgZGVmaW5lIHNucHJpbnRmIGZ0b2FzdHJfc25wcmludGYKIHN0YXRpYyBpbnQKZGlmZiAt LWdpdCBhL2xpYi9mdG9hc3RyLmggYi9saWIvZnRvYXN0ci5oCmluZGV4IDg1MmU0MDAwZC4uNzhi NTY5ZjNkIDEwMDY0NAotLS0gYS9saWIvZnRvYXN0ci5oCisrKyBiL2xpYi9mdG9hc3RyLmgKQEAg LTQ5LDYgKzQ5LDEyIEBAIGludCAgZnRvYXN0ciAoY2hhciAqYnVmLCBzaXplX3QgYnVmc2l6ZSwg aW50IGZsYWdzLCBpbnQgd2lkdGgsICAgICAgIGZsb2F0IHgpOwogaW50ICBkdG9hc3RyIChjaGFy ICpidWYsIHNpemVfdCBidWZzaXplLCBpbnQgZmxhZ3MsIGludCB3aWR0aCwgICAgICBkb3VibGUg eCk7CiBpbnQgbGR0b2FzdHIgKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZnNpemUsIGludCBmbGFncywg aW50IHdpZHRoLCBsb25nIGRvdWJsZSB4KTsKIAorLyogVGhlIGxhc3QgdHdvIGZ1bmN0aW9ucyBl eGNlcHQgdGhhdCB0aGUgZm9ybWF0dGluZyB0YWtlcyBwbGFjZSBpbgorICAgdGhlIEMgbG9jYWxl LiAgKi8KK2ludCAgY19kdG9hc3RyIChjaGFyICpidWYsIHNpemVfdCBidWZzaXplLCBpbnQgZmxh Z3MsIGludCB3aWR0aCwgICAgICBkb3VibGUgeCk7CitpbnQgY19sZHRvYXN0ciAoY2hhciAqYnVm LCBzaXplX3QgYnVmc2l6ZSwgaW50IGZsYWdzLCBpbnQgd2lkdGgsIGxvbmcgZG91YmxlIHgpOwor CisKIC8qIEZsYWcgdmFsdWVzIGZvciBmdG9hc3RyIGV0Yy4gIFRoZXNlIGNhbiBiZSBPUmVkIHRv Z2V0aGVyLiAgKi8KIGVudW0KICAgewpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9jLWR0b2FzdHIgYi9t b2R1bGVzL2MtZHRvYXN0cgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLmZk MDA1NGFkZQotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvYy1kdG9hc3RyCkBAIC0wLDAgKzEs MjcgQEAKK0Rlc2NyaXB0aW9uOgorQ29udmVydCBkb3VibGUgdG8gYWNjdXJhdGUgc3RyaW5nIGlu IEMgbG9jYWxlLgorCitGaWxlczoKK2xpYi9mdG9hc3RyLmgKK2xpYi9mdG9hc3RyLmMKK2xpYi9j LWR0b2FzdHIuYworCitEZXBlbmRzLW9uOgorZXh0ZW5zaW9ucworaW50cHJvcHMKK2Mtc25wcmlu dGYKK2Mtc3RydG9kCisKK2NvbmZpZ3VyZS5hYzoKKworTWFrZWZpbGUuYW06CitsaWJfU09VUkNF UyArPSBjLWR0b2FzdHIuYworCitJbmNsdWRlOgorImZ0b2FzdHIuaCIKKworTGljZW5zZToKK0dQ TAorCitNYWludGFpbmVyOgorTWFyYyBOaWVwZXItV2lzc2tpcmNoZW4KXCBObyBuZXdsaW5lIGF0 IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tb2R1bGVzL2MtZHRvYXN0ci10ZXN0cyBiL21vZHVs ZXMvYy1kdG9hc3RyLXRlc3RzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMC4u Njg3ZDc2NjliCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9jLWR0b2FzdHItdGVzdHMKQEAg LTAsMCArMSwxOCBAQAorRmlsZXM6Cit0ZXN0cy90ZXN0LWMtZHRvYXN0ci5jCit0ZXN0cy90ZXN0 LWMtZHRvYXN0ci5zaAorbTQvbG9jYWxlLWZyLm00Cit0ZXN0cy9tYWNyb3MuaAorCitEZXBlbmRz LW9uOgorc2V0bG9jYWxlCitzbnByaW50ZgorCitjb25maWd1cmUuYWM6CitndF9MT0NBTEVfRlIK KworTWFrZWZpbGUuYW06CitURVNUUyArPSB0ZXN0LWMtZHRvYXN0ci5zaAorVEVTVFNfRU5WSVJP Tk1FTlQgKz0gTE9DQUxFX0ZSPSdATE9DQUxFX0ZSQCcKK2NoZWNrX1BST0dSQU1TICs9IHRlc3Qt Yy1kdG9hc3RyCit0ZXN0X2NfZHRvYXN0cl9MREFERCA9ICQoTERBREQpICQoTElCX1NFVExPQ0FM RSkKZGlmZiAtLWdpdCBhL21vZHVsZXMvYy1sZHRvYXN0ciBiL21vZHVsZXMvYy1sZHRvYXN0cgpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLmNlMWU5ZGJmNwotLS0gL2Rldi9u dWxsCisrKyBiL21vZHVsZXMvYy1sZHRvYXN0cgpAQCAtMCwwICsxLDI3IEBACitEZXNjcmlwdGlv bjoKK0NvbnZlcnQgbG9uZyBkb3VibGUgdG8gYWNjdXJhdGUgc3RyaW5nIGluIEMgbG9jYWxlLgor CitGaWxlczoKK2xpYi9mdG9hc3RyLmgKK2xpYi9mdG9hc3RyLmMKK2xpYi9jLWxkdG9hc3RyLmMK KworRGVwZW5kcy1vbjoKK2V4dGVuc2lvbnMKK2ludHByb3BzCitjLXNucHJpbnRmCitjLXN0cnRv bGQKKworY29uZmlndXJlLmFjOgorCitNYWtlZmlsZS5hbToKK2xpYl9TT1VSQ0VTICs9IGMtbGR0 b2FzdHIuYworCitJbmNsdWRlOgorImZ0b2FzdHIuaCIKKworTGljZW5zZToKK0dQTAorCitNYWlu dGFpbmVyOgorTWFyYyBOaWVwZXItV2lzc2tpcmNoZW4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBm aWxlCmRpZmYgLS1naXQgYS9tb2R1bGVzL2MtbGR0b2FzdHItdGVzdHMgYi9tb2R1bGVzL2MtbGR0 b2FzdHItdGVzdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi4yZDRjN2Y4 MWUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2MtbGR0b2FzdHItdGVzdHMKQEAgLTAsMCAr MSwxOCBAQAorRmlsZXM6Cit0ZXN0cy90ZXN0LWMtbGR0b2FzdHIuYwordGVzdHMvdGVzdC1jLWxk dG9hc3RyLnNoCittNC9sb2NhbGUtZnIubTQKK3Rlc3RzL21hY3Jvcy5oCisKK0RlcGVuZHMtb246 CitzZXRsb2NhbGUKK3NucHJpbnRmCisKK2NvbmZpZ3VyZS5hYzoKK2d0X0xPQ0FMRV9GUgorCitN YWtlZmlsZS5hbToKK1RFU1RTICs9IHRlc3QtYy1sZHRvYXN0ci5zaAorVEVTVFNfRU5WSVJPTk1F TlQgKz0gTE9DQUxFX0ZSPSdATE9DQUxFX0ZSQCcKK2NoZWNrX1BST0dSQU1TICs9IHRlc3QtYy1s ZHRvYXN0cgordGVzdF9jX2xkdG9hc3RyX0xEQUREID0gJChMREFERCkgJChMSUJfU0VUTE9DQUxF KQpkaWZmIC0tZ2l0IGEvdGVzdHMvdGVzdC1jLWR0b2FzdHIuYyBiL3Rlc3RzL3Rlc3QtYy1kdG9h c3RyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi4zNzNlN2M0YmMKLS0t IC9kZXYvbnVsbAorKysgYi90ZXN0cy90ZXN0LWMtZHRvYXN0ci5jCkBAIC0wLDAgKzEsNTggQEAK Ky8qIFRlc3Qgb2YgY19kdG9hc3RyKCkgZnVuY3Rpb24uCisgICBDb3B5cmlnaHQgKEMpIDIwMjAg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24g MyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRo IHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2Vz Lz4uICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpbmNsdWRlICJmdG9hc3RyLmgiCisK KyNpbmNsdWRlIDxsb2NhbGUuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmlu Zy5oPgorCisjaW5jbHVkZSAibWFjcm9zLmgiCisKK2ludAorbWFpbiAoaW50IGFyZ2MsIGNoYXIg KmFyZ3ZbXSkKK3sKKyAgLyogY29uZmlndXJlIHNob3VsZCBhbHJlYWR5IGhhdmUgY2hlY2tlZCB0 aGF0IHRoZSBsb2NhbGUgaXMgc3VwcG9ydGVkLiAgKi8KKyAgaWYgKHNldGxvY2FsZSAoTENfQUxM LCAiIikgPT0gTlVMTCkKKyAgICByZXR1cm4gMTsKKworICAvKiBUZXN0IGJlaGF2aW91ciBvZiBz bnByaW50ZigpIGFzIGEgImNvbnRyb2wgZ3JvdXAiLgorICAgICAoV2Ugc2hvdWxkIGJlIHJ1bm5p bmcgaW4gYSBsb2NhbGUgd2hlcmUgJywnIGlzIHRoZSBkZWNpbWFsIHBvaW50LikgKi8KKyAgewor ICAgIGNoYXIgc1sxNl07CisKKyAgICBzbnByaW50ZiAocywgc2l6ZW9mIHMsICIlIy4wZiIsIDEu MCk7CisgICAgaWYgKCFzdHJjbXAgKHMsICIxLiIpKQorICAgICAgeworICAgICAgICAvKiBTa2lw IHRoZSB0ZXN0LCBzaW5jZSB3ZSdyZSBub3QgaW4gYSB1c2VmdWwgbG9jYWxlIGZvciB0ZXN0aW5n LiAqLworICAgICAgICByZXR1cm4gNzc7CisgICAgICB9CisgICAgQVNTRVJUICghc3RyY21wIChz LCAiMSwiKSk7CisgIH0KKworICAvKiBUZXN0IGJlaGF2aW91ciBvZiBjX2R0b2FzdHIoKS4KKyAg ICAgSXQgc2hvdWxkIGFsd2F5cyB1c2UgJy4nIGFzIHRoZSBkZWNpbWFsIHBvaW50LiAqLworICB7 CisgICAgY2hhciBidWZbREJMX0JVRlNJWkVfQk9VTkRdOworCisgICAgY19kdG9hc3RyIChidWYs IHNpemVvZiBidWYsIDAsIDAsIDAuMSk7CisgICAgQVNTRVJUICghc3RyY21wIChidWYsICIwLjEi KSk7CisgIH0KKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL3Rlc3QtYy1kdG9h c3RyLnNoIGIvdGVzdHMvdGVzdC1jLWR0b2FzdHIuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwLi5lZjBlNDU5YjQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy90ZXN0LWMt ZHRvYXN0ci5zaApAQCAtMCwwICsxLDE1IEBACisjIS9iaW4vc2gKKworIyBUZXN0IGluIGFuIElT Ty04ODU5LTEgb3IgSVNPLTg4NTktMTUgbG9jYWxlLgorOiAke0xPQ0FMRV9GUj1mcl9GUn0KK2lm IHRlc3QgJExPQ0FMRV9GUiA9IG5vbmU7IHRoZW4KKyAgaWYgdGVzdCAtZiAvdXNyL2Jpbi9sb2Nh bGVkZWY7IHRoZW4KKyAgICBlY2hvICJTa2lwcGluZyB0ZXN0OiBubyB0cmFkaXRpb25hbCBmcmVu Y2ggbG9jYWxlIGlzIGluc3RhbGxlZCIKKyAgZWxzZQorICAgIGVjaG8gIlNraXBwaW5nIHRlc3Q6 IG5vIHRyYWRpdGlvbmFsIGZyZW5jaCBsb2NhbGUgaXMgc3VwcG9ydGVkIgorICBmaQorICBleGl0 IDc3CitmaQorCitMQ19BTEw9JExPQ0FMRV9GUiBcCiske0NIRUNLRVJ9IC4vdGVzdC1jLWR0b2Fz dHIke0VYRUVYVH0gMQpkaWZmIC0tZ2l0IGEvdGVzdHMvdGVzdC1jLWxkdG9hc3RyLmMgYi90ZXN0 cy90ZXN0LWMtbGR0b2FzdHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAu LjE0MGYwYzZkOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3Rlc3QtYy1sZHRvYXN0ci5jCkBA IC0wLDAgKzEsNTggQEAKKy8qIFRlc3Qgb2YgY19sZHRvYXN0cigpIGZ1bmN0aW9uLgorICAgQ29w eXJpZ2h0IChDKSAyMDIwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlz IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cu Z251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaW5jbHVk ZSAiZnRvYXN0ci5oIgorCisjaW5jbHVkZSA8bG9jYWxlLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4K KyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgIm1hY3Jvcy5oIgorCitpbnQKK21haW4g KGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgIC8qIGNvbmZpZ3VyZSBzaG91bGQgYWxyZWFk eSBoYXZlIGNoZWNrZWQgdGhhdCB0aGUgbG9jYWxlIGlzIHN1cHBvcnRlZC4gICovCisgIGlmIChz ZXRsb2NhbGUgKExDX0FMTCwgIiIpID09IE5VTEwpCisgICAgcmV0dXJuIDE7CisKKyAgLyogVGVz dCBiZWhhdmlvdXIgb2Ygc25wcmludGYoKSBhcyBhICJjb250cm9sIGdyb3VwIi4KKyAgICAgKFdl IHNob3VsZCBiZSBydW5uaW5nIGluIGEgbG9jYWxlIHdoZXJlICcsJyBpcyB0aGUgZGVjaW1hbCBw b2ludC4pICovCisgIHsKKyAgICBjaGFyIHNbMTZdOworCisgICAgc25wcmludGYgKHMsIHNpemVv ZiBzLCAiJSMuMGYiLCAxLjApOworICAgIGlmICghc3RyY21wIChzLCAiMS4iKSkKKyAgICAgIHsK KyAgICAgICAgLyogU2tpcCB0aGUgdGVzdCwgc2luY2Ugd2UncmUgbm90IGluIGEgdXNlZnVsIGxv Y2FsZSBmb3IgdGVzdGluZy4gKi8KKyAgICAgICAgcmV0dXJuIDc3OworICAgICAgfQorICAgIEFT U0VSVCAoIXN0cmNtcCAocywgIjEsIikpOworICB9CisKKyAgLyogVGVzdCBiZWhhdmlvdXIgb2Yg Y19sZHRvYXN0cigpLgorICAgICBJdCBzaG91bGQgYWx3YXlzIHVzZSAnLicgYXMgdGhlIGRlY2lt YWwgcG9pbnQuICovCisgIHsKKyAgICBjaGFyIGJ1ZltEQkxfQlVGU0laRV9CT1VORF07CisKKyAg ICBjX2xkdG9hc3RyIChidWYsIHNpemVvZiBidWYsIDAsIDAsIDAuMSk7CisgICAgQVNTRVJUICgh c3RyY21wIChidWYsICIwLjEiKSk7CisgIH0KKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBh L3Rlc3RzL3Rlc3QtYy1sZHRvYXN0ci5zaCBiL3Rlc3RzL3Rlc3QtYy1sZHRvYXN0ci5zaApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLmFkN2EzMmExNAotLS0gL2Rldi9udWxs CisrKyBiL3Rlc3RzL3Rlc3QtYy1sZHRvYXN0ci5zaApAQCAtMCwwICsxLDE1IEBACisjIS9iaW4v c2gKKworIyBUZXN0IGluIGFuIElTTy04ODU5LTEgb3IgSVNPLTg4NTktMTUgbG9jYWxlLgorOiAk e0xPQ0FMRV9GUj1mcl9GUn0KK2lmIHRlc3QgJExPQ0FMRV9GUiA9IG5vbmU7IHRoZW4KKyAgaWYg dGVzdCAtZiAvdXNyL2Jpbi9sb2NhbGVkZWY7IHRoZW4KKyAgICBlY2hvICJTa2lwcGluZyB0ZXN0 OiBubyB0cmFkaXRpb25hbCBmcmVuY2ggbG9jYWxlIGlzIGluc3RhbGxlZCIKKyAgZWxzZQorICAg IGVjaG8gIlNraXBwaW5nIHRlc3Q6IG5vIHRyYWRpdGlvbmFsIGZyZW5jaCBsb2NhbGUgaXMgc3Vw cG9ydGVkIgorICBmaQorICBleGl0IDc3CitmaQorCitMQ19BTEw9JExPQ0FMRV9GUiBcCiske0NI RUNLRVJ9IC4vdGVzdC1jLWxkdG9hc3RyJHtFWEVFWFR9IDEKLS0gCjIuMjAuMQoK --000000000000e5a26905a613af48--