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-ASN: AS17314 8.43.84.0/22 X-Spam-Status: No, score=-4.2 required=3.0 tests=AWL,BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED,SPF_HELO_PASS,SPF_PASS shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by dcvr.yhbt.net (Postfix) with ESMTPS id B156C1F8C6 for ; Thu, 29 Jul 2021 14:02:15 +0000 (UTC) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 7951239B207C for ; Thu, 29 Jul 2021 14:02:14 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 7951239B207C DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1627567334; bh=8VeNLxCIfUDuYj3LPBsUOcg7YC9uTzy9Mhaf4zOrQ/A=; h=References:In-Reply-To:Date:Subject:To:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=aPGVpWfyRP43UL0qahXL6yyHLOB1009NZAFoXl+iF5nuMfPNpXoZNvCtPV4oP6uNk 18Up44MdtheMY+7Y5S1heHgo/zxLQFd++0zngdCkFDC13cxhARLdnv1dnSIUc8yM6D X7wvxwkMrQ7tOyx2SEh+VlRTpMbu/99oaRUIJIeI= Received: from mail-pj1-x1036.google.com (mail-pj1-x1036.google.com [IPv6:2607:f8b0:4864:20::1036]) by sourceware.org (Postfix) with ESMTPS id 4BF4039B1C6E for ; Thu, 29 Jul 2021 13:40:14 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 4BF4039B1C6E Received: by mail-pj1-x1036.google.com with SMTP id o44-20020a17090a0a2fb0290176ca3e5a2fso9372769pjo.1 for ; Thu, 29 Jul 2021 06:40:14 -0700 (PDT) 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=8VeNLxCIfUDuYj3LPBsUOcg7YC9uTzy9Mhaf4zOrQ/A=; b=mWPRNrCjoOlLKM7+9trU4glWn2ZyiIHb+uAFwmBwxh4Ihe+9xqP0TuBxCvlc+ZQfNz iGQ7wB23muUt1jL90PFLwja7ES0d/DhDVfaWnlotROrxn950qfC69JNhceObFZzNky9C zr3gF3YFc+VcEKbl5xSzrEqPiuVXD1a+UFuWu6DVcubE0KP/a5HhY6C8N8nT6NOnomBa JI/ZPZidjgiCl5Nt8oTReZrb/wM1lXviy71bGKk2IjXmbuB3t7eYZynEZbhrSr1lIyoi LYH3Hw6Eg8Mo2CfW53S9Hcbchy0/KQ8xl/mqDKh+WZgcLebiRkDQOmm6RKUQQ/8NTKTr P8oQ== X-Gm-Message-State: AOAM532IXTMjqfRIAROSLszt1dydyy9e2FtZIfRx2QDC37f56oZq60BB hY1KNByC8iNc4+qy5BXe+aLel53prW08CRA23hk= X-Google-Smtp-Source: ABdhPJzLUh9FQTYLywSxEFoi/tfRnTF43gOVEH14LwDCWgds3pUowaH+vCjFRT5grSswPXtsGJddsc3g6HNefB+9mn0= X-Received: by 2002:a65:5083:: with SMTP id r3mr3896651pgp.161.1627566013351; Thu, 29 Jul 2021 06:40:13 -0700 (PDT) MIME-Version: 1.0 References: <20210701210537.51272-1-hjl.tools@gmail.com> In-Reply-To: Date: Thu, 29 Jul 2021 06:39:37 -0700 Message-ID: Subject: Re: [llvm-dev] [PATCH] Add optional _Float16 support To: IA32 System V Application Binary Interface Content-Type: multipart/mixed; boundary="0000000000001332d705c8433e15" X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: "H.J. Lu via Libc-alpha" Reply-To: "H.J. Lu" Cc: "Wang, Pengfei" , llvm-dev@lists.llvm.org, GNU C Library , GCC Patches Errors-To: libc-alpha-bounces+e=80x24.org@sourceware.org Sender: "Libc-alpha" --0000000000001332d705c8433e15 Content-Type: text/plain; charset="UTF-8" On Tue, Jul 13, 2021 at 9:24 AM H.J. Lu wrote: > > On Tue, Jul 13, 2021 at 8:41 AM Joseph Myers wrote: > > > > On Tue, 13 Jul 2021, H.J. Lu wrote: > > > > > On Mon, Jul 12, 2021 at 8:59 PM Wang, Pengfei wrote: > > > > > > > > > Return _Float16 and _Complex _Float16 values in %xmm0/%xmm1 registers. > > > > > > > > Can you please explain the behavior here? Is there difference between _Float16 and _Complex _Float16 when return? I.e., > > > > 1, In which case will _Float16 values return in both %xmm0 and %xmm1? > > > > 2, For a single _Float16 value, are both real part and imaginary part returned in %xmm0? Or returned in %xmm0 and %xmm1 respectively? > > > > > > Here is the v2 patch to add the missing _Float16 bits. The PDF file is at > > > > > > https://gitlab.com/x86-psABIs/i386-ABI/-/wikis/Intel386-psABI > > > > This PDF shows _Complex _Float16 as having a size of 2 bytes (should be > > 4-byte size, 2-byte alignment). > > > > It also seems to change double from 4-byte to 8-byte alignment, which is > > wrong. And it's inconsistent about whether it covers the long double = > > double (Android) case - it shows that case for _Complex long double but > > not for long double itself. > > Here is the v3 patch with the fixes. I also updated the PDF file. Here is the final patch I checked in. _Complex _Float16 is changed to return in XMM0 register. The new PDF file is at https://gitlab.com/x86-psABIs/i386-ABI/-/wikis/Intel386-psABI -- H.J. --0000000000001332d705c8433e15 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Add-optional-_Float16-support.patch" Content-Disposition: attachment; filename="0001-Add-optional-_Float16-support.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kroyonfw0 RnJvbSA0Y2UxMDA3NDg2ZDI4YjEzZGEzNmJiZjIxNmIyZTQ3MDgxOGQ3ZWUxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiSC5KLiBMdSIgPGhqbC50b29sc0BnbWFpbC5jb20+CkRhdGU6 IFRodSwgMSBKdWwgMjAyMSAxMzo1ODowMCAtMDcwMApTdWJqZWN0OiBbUEFUQ0hdIEFkZCBvcHRp b25hbCBfRmxvYXQxNiBzdXBwb3J0CgoxLiBQYXNzIF9GbG9hdDE2IGFuZCBfQ29tcGxleCBfRmxv YXQxNiB2YWx1ZXMgb24gc3RhY2suCjIuIFJldHVybiBfRmxvYXQxNiBhbmQgX0NvbXBsZXggX0Zs b2F0MTYgdmFsdWVzIGluIFhNTTAgcmVnaXN0ZXIuCi0tLQogbG93LWxldmVsLXN5cy1pbmZvLnRl eCB8IDcwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLQogMSBmaWxl IGNoYW5nZWQsIDQ5IGluc2VydGlvbnMoKyksIDIxIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBh L2xvdy1sZXZlbC1zeXMtaW5mby50ZXggYi9sb3ctbGV2ZWwtc3lzLWluZm8udGV4CmluZGV4IGFj YWYzMGUuLjg2MGZmNjYgMTAwNjQ0Ci0tLSBhL2xvdy1sZXZlbC1zeXMtaW5mby50ZXgKKysrIGIv bG93LWxldmVsLXN5cy1pbmZvLnRleApAQCAtMzAsNyArMzAsOCBAQCBvYmplY3QsIGFuZCB0aGUg dGVybSBcZW1waHtcdGV4dGluZGV4e1xzaXh0ZWVuYnl0ZXt9fX0gcmVmZXJzIHRvIGEKIFxzdWJz dWJzZWN0aW9ue0Z1bmRhbWVudGFsIFR5cGVzfQogCiBUYWJsZX5ccmVme2Jhc2ljLXR5cGVzfSBz aG93cyB0aGUgY29ycmVzcG9uZGVuY2UgYmV0d2VlbiBJU08gQwotc2NhbGFyIHR5cGVzIGFuZCB0 aGUgcHJvY2Vzc29yIHNjYWxhciB0eXBlcy4gIFxjb2Rle19fZmxvYXQ4MH0sCitzY2FsYXIgdHlw ZXMgYW5kIHRoZSBwcm9jZXNzb3Igc2NhbGFyIHR5cGVzLiAgXGNvZGV7X0Zsb2F0MTZ9LAorXGNv ZGV7X19mbG9hdDgwfSwKIFxjb2Rle19fZmxvYXQxMjh9LCBcY29kZXtfX202NH0sIFxjb2Rle19f bTEyOH0sIFxjb2Rle19fbTI1Nn0gYW5kCiBcY29kZXtfX201MTJ9IHR5cGVzIGFyZSBvcHRpb25h bC4KIApAQCAtNzksMjMgKzgwLDI4IEBAIHNjYWxhciB0eXBlcyBhbmQgdGhlIHByb2Nlc3NvciBz Y2FsYXIgdHlwZXMuICBcY29kZXtfX2Zsb2F0ODB9LAogICAgICYgXHRleHR0dHtcdGV4dGl0e2Fu eS10eXBlfSAqfSAmIDQgJiA0ICYgdW5zaWduZWQgXGZvdXJieXRlIFxcCiAgICAgJiBcdGV4dHR0 e1x0ZXh0aXR7YW55LXR5cGV9ICgqKSgpfSAmICYgXFwKICAgICBcaGxpbmUKLSAgICBGbG9hdGlu Zy0mIFx0ZXh0dHR7ZmxvYXR9ICYgNCAmIDQgJiBzaW5nbGUgKElFRUUtNzU0KSBcXAogICAgIFxj bGluZXsyLTV9Ci0gICAgcG9pbnQgJiBcdGV4dHR0e2RvdWJsZX0gJiA4ICYgNCAmIGRvdWJsZSAo SUVFRS03NTQpIFxcCi0gICAgJiBcdGV4dHR0e2xvbmcgZG91YmxlfSRee1xkYWdnZXJcZGFnZ2Vy XGRhZ2dlclxkYWdnZXJ9JCAgJiAmICYgXFwKKyAgICAmIFx0ZXh0dHR7X0Zsb2F0MTZ9JF57XGRh Z2dlclxkYWdnZXJcZGFnZ2VyXGRhZ2dlclxkYWdnZXJ9JCAmIDIgJiAyICYgMTYtYml0IChJRUVF LTc1NCkgXFwKKyAgICBcY2xpbmV7Mi01fQorICAgICYgXHRleHR0dHtmbG9hdH0gJiA0ICYgNCAm IHNpbmdsZSAoSUVFRS03NTQpIFxcCisgICAgXGNsaW5lezItNX0KKyAgICBGbG9hdGluZy0gJiBc dGV4dHR0e2RvdWJsZX0gJiA4ICYgNCAmIGRvdWJsZSAoSUVFRS03NTQpIFxcCisgICAgcG9pbnQg JiBcdGV4dHR0e2xvbmcgZG91YmxlfSRee1xkYWdnZXJcZGFnZ2VyXGRhZ2dlclxkYWdnZXJ9JCAm ICYgJiBcXAogICAgIFxjbGluZXsyLTV9CiAgICAgJiBcdGV4dHR0e19fZmxvYXQ4MH0kXntcZGFn Z2VyXGRhZ2dlcn0kICAmIDEyICYgNCAmIDgwLWJpdCBleHRlbmRlZCAoSUVFRS03NTQpIFxcCiAg ICAgJiBcdGV4dHR0e2xvbmcgZG91YmxlfSRee1xkYWdnZXJcZGFnZ2VyXGRhZ2dlclxkYWdnZXJ9 JCAgJiAmICYgXFwKICAgICBcY2xpbmV7Mi01fQogICAgICYgXHRleHR0dHtfX2Zsb2F0MTI4fSRe e1xkYWdnZXJcZGFnZ2VyfSQgJiAxNiAmIDE2ICYgMTI4LWJpdCBleHRlbmRlZCAoSUVFRS03NTQp IFxcCiAgICAgXGhsaW5lCi0gICAgQ29tcGxleCYgXHRleHR0dHtfQ29tcGxleCBmbG9hdH0gJiA4 ICYgNCAmIGNvbXBsZXggc2luZ2xlIChJRUVFLTc1NCkgXFwKKyAgICAmIFx0ZXh0dHR7X0NvbXBs ZXggX0Zsb2F0MTZ9ICRee1xkYWdnZXJcZGFnZ2VyXGRhZ2dlclxkYWdnZXJcZGFnZ2VyfSQgJiA0 ICYgMiAmIGNvbXBsZXggMTYtYml0IChJRUVFLTc1NCkgXFwKKyAgICBcY2xpbmV7Mi01fQorICAg ICYgXHRleHR0dHtfQ29tcGxleCBmbG9hdH0gJiA4ICYgNCAmIGNvbXBsZXggc2luZ2xlIChJRUVF LTc1NCkgXFwKICAgICBcY2xpbmV7Mi01fQotICAgIEZsb2F0aW5nLSYgXHRleHR0dHtfQ29tcGxl eCBkb3VibGV9ICYgMTYgJiA0ICYgY29tcGxleCBkb3VibGUgKElFRUUtNzU0KSBcXAotICAgIHBv aW50ICYgXHRleHR0dHtfQ29tcGxleCBsb25nIGRvdWJsZX0kXntcZGFnZ2VyXGRhZ2dlclxkYWdn ZXJcZGFnZ2VyfSQgJiAmICYgXFwKKyAgICBDb21wbGV4JiBcdGV4dHR0e19Db21wbGV4IGRvdWJs ZX0gJiAxNiAmIDQgJiBjb21wbGV4IGRvdWJsZSAoSUVFRS03NTQpIFxcCisgICAgRmxvYXRpbmct JiBcdGV4dHR0e19Db21wbGV4IGxvbmcgZG91YmxlfSRee1xkYWdnZXJcZGFnZ2VyXGRhZ2dlclxk YWdnZXJ9JCAmICYgJiBcXAogICAgIFxjbGluZXsyLTV9Ci0gICAgJiBcdGV4dHR0e19Db21wbGV4 IF9fZmxvYXQ4MH0kXntcZGFnZ2VyXGRhZ2dlcn0kICAmIDI0ICYgNCAmIGNvbXBsZXggODAtYml0 IGV4dGVuZGVkIChJRUVFLTc1NCkgXFwKLSAgICAmIFx0ZXh0dHR7X0NvbXBsZXggbG9uZyBkb3Vi bGV9JF57XGRhZ2dlclxkYWdnZXJcZGFnZ2VyXGRhZ2dlcn0kICAmICYgJiBcXAorICAgIHBvaW50 ICYgXHRleHR0dHtfQ29tcGxleCBfX2Zsb2F0ODB9JF57XGRhZ2dlclxkYWdnZXJ9JCAmIDI0ICYg NCAmIGNvbXBsZXggODAtYml0IGV4dGVuZGVkIChJRUVFLTc1NCkgXFwKKyAgICAmIFx0ZXh0dHR7 X0NvbXBsZXggbG9uZyBkb3VibGV9JF57XGRhZ2dlclxkYWdnZXJcZGFnZ2VyXGRhZ2dlcn0kICYg JiAmIFxcCiAgICAgXGNsaW5lezItNX0KICAgICAmIFx0ZXh0dHR7X0NvbXBsZXggX19mbG9hdDEy OH0kXntcZGFnZ2VyXGRhZ2dlcn0kICYgMzIgJiAxNiAmIGNvbXBsZXggMTI4LWJpdCBleHRlbmRl ZCAoSUVFRS03NTQpIFxcCiAgICAgXGhsaW5lCkBAIC0xMjUsNiArMTMxLDggQEAgVGhlIFx0ZXh0 dHR7bG9uZyBkb3VibGV9IHR5cGUgaXMgNjQtYml0LCB0aGUgc2FtZSBhcyB0aGUgXHRleHR0dHtk b3VibGV9CiB0eXBlLCBvbiB0aGUgQW5kcm9pZHtcdGV4dHRyYWRlbWFya30gcGxhdGZvcm0uICBN b3JlIGluZm9ybWF0aW9uIG9uIHRoZQogQW5kcm9pZHtcdGV4dHRyYWRlbWFya30gcGxhdGZvcm0g aXMgYXZhaWxhYmxlIGZyb20KIFx1cmx7aHR0cDovL3d3dy5hbmRyb2lkLmNvbS99Ln1cXAorXG11 bHRpY29sdW1uezV9e3B7MTNjbX19e1xteWZvbnRzaXplICRee1xkYWdnZXJcZGFnZ2VyXGRhZ2dl clxkYWdnZXJcZGFnZ2VyfSQKK1RoZSBcdGV4dHR0e19GbG9hdDE2fSB0eXBlLCBmcm9tIElTTy9J RUMgVFMgMTg2NjEtMzoyMDE1LCBpcyBvcHRpb25hbC59XFwKICAgXGVuZHt0YWJ1bGFyfQogfQog XGVuZHt0YWJsZX0KQEAgLTMyMyw2ICszMzEsNyBAQCBhdCB0aGUgdGltZSBvZiB0aGUgY2FsbC4K IFxiZWdpbnt0YWJsZX0KIFxIcnVsZQogICBcY2FwdGlvbntSZWdpc3RlciBVc2FnZX0KKyAgXG15 Zm9udHNpemUKICAgXGxhYmVse2ZpZy1yZWctdXNhZ2V9CiAgIFxiZWdpbntjZW50ZXJ9CiAgICAg XGJlZ2lue3RhYnVsYXJ9e2x8cHs4LjM1Y219fGx9CkBAIC0zNDYsMTMgKzM1NSwyOCBAQCBvZiBz b21lIDY0Yml0IHJldHVybiB0eXBlcyAmIE5vIFxcCiBcRUJQICYgY2FsbGVlLXNhdmVkIHJlZ2lz dGVyOyBvcHRpb25hbGx5IHVzZWQgYXMgZnJhbWUgcG9pbnRlciAmIFllcyBcXAogXEVTSSAmIGNh bGxlZS1zYXZlZCByZWdpc3RlciAmIHllcyBcXAogXEVESSAmIGNhbGxlZS1zYXZlZCByZWdpc3Rl ciAmIHllcyBcXAotXHJlZ3t4bW0wfSwgXHJlZ3t5bW0wfSAmIHNjcmF0Y2ggcmVnaXN0ZXJzOyBh bHNvIHVzZWQgdG8gcGFzcyBhbmQgcmV0dXJuCi1cY29kZXtfX20xMjh9LCBcY29kZXtfX20yNTZ9 IHBhcmFtZXRlcnMgJiBOb1xcCi1ccmVne3htbTF9LS1ccmVne3htbTJ9LCYgc2NyYXRjaCByZWdp c3RlcnM7IGFsc28gdXNlZCB0byBwYXNzCi1cY29kZXtfX20xMjh9LCAmIE5vIFxcCi1ccmVne3lt bTF9LS1ccmVne3ltbTJ9ICYgXGNvZGV7X19tMjU2fSBwYXJhbWV0ZXJzICYgXFwKLVxyZWd7eG1t M30tLVxyZWd7eG1tN30sJiBzY3JhdGNoIHJlZ2lzdGVycyAmIE5vIFxcCi1ccmVne3ltbTN9LS1c cmVne3ltbTd9ICYgJiBcXAorXHJlZ3t4bW0wfSAmIHNjcmF0Y2ggcmVnaXN0ZXI7IGFsc28gdXNl ZCB0byBwYXNzIHRoZSBmaXJzdCBcY29kZXtfX20xMjh9CisgICAgICAgICAgICAgcGFyYW1ldGVy IGFuZCByZXR1cm4gXGNvZGV7X19tMTI4fSwgXGNvZGV7X0Zsb2F0MTZ9LAorCSAgICAgXGNvZGV7 X0NvbXBsZXggX0Zsb2F0MTZ9ICYgTm8gXFwKK1xyZWd7eW1tMH0gJiBzY3JhdGNoIHJlZ2lzdGVy OyBhbHNvIHVzZWQgdG8gcGFzcyB0aGUgZmlyc3QgXGNvZGV7X19tMjU2fQorICAgICAgICAgICAg IHBhcmFtZXRlciBhbmQgcmV0dXJuIFxjb2Rle19fbTI1Nn0gJiBObyBcXAorXHJlZ3t6bW0wfSAm IHNjcmF0Y2ggcmVnaXN0ZXI7IGFsc28gdXNlZCB0byBwYXNzIHRoZSBmaXJzdCBcY29kZXtfX201 MTJ9CisgICAgICAgICAgICAgcGFyYW1ldGVyIGFuZCByZXR1cm4gXGNvZGV7X19tNTEyfSAmIE5v IFxcCitccmVne3htbTF9ICYgc2NyYXRjaCByZWdpc3RlcjsgYWxzbyB1c2VkIHRvIHBhc3MgdGhl IHNlY29uZCBcY29kZXtfX20xMjh9CisgICAgICAgICAgICAgcGFyYW1ldGVyICYgTm8gXFwKK1xy ZWd7eW1tMX0gJiBzY3JhdGNoIHJlZ2lzdGVyOyBhbHNvIHVzZWQgdG8gcGFzcyB0aGUgc2Vjb25k IFxjb2Rle19fbTI1Nn0KKyAgICAgICAgICAgICBwYXJhbWV0ZXJzICYgTm8gXFwKK1xyZWd7em1t MX0gJiBzY3JhdGNoIHJlZ2lzdGVyOyBhbHNvIHVzZWQgdG8gcGFzcyB0aGUgc2Vjb25kIFxjb2Rl e19fbTUxMn0KKyAgICAgICAgICAgICBwYXJhbWV0ZXJzICYgTm8gXFwKK1xyZWd7eG1tMn0gJiBz Y3JhdGNoIHJlZ2lzdGVyOyBhbHNvIHVzZWQgdG8gcGFzcyB0aGUgdGhpcmQgXGNvZGV7X19tMTI4 fQorICAgICAgICAgICAgIHBhcmFtZXRlcnMgJiBObyBcXAorXHJlZ3t5bW0yfSAmIHNjcmF0Y2gg cmVnaXN0ZXI7IGFsc28gdXNlZCB0byBwYXNzIHRoZSB0aGlyZCBcY29kZXtfX20yNTZ9CisgICAg ICAgICAgICAgcGFyYW1ldGVycyAmIE5vIFxcCitccmVne3ptbTJ9ICYgc2NyYXRjaCByZWdpc3Rl cjsgYWxzbyB1c2VkIHRvIHBhc3MgdGhlIHRoaXJkIFxjb2Rle19fbTUxMn0KKyAgICAgICAgICAg ICBwYXJhbWV0ZXJzICYgTm8gXFwKK1xyZWd7eG1tM30tLVxyZWd7eG1tN30gJiBzY3JhdGNoIHJl Z2lzdGVycyAmIE5vIFxcCitccmVne3ltbTN9LS1ccmVne3ltbTd9ICYgc2NyYXRjaCByZWdpc3Rl cnMgJiBObyBcXAorXHJlZ3t6bW0zfS0tXHJlZ3t6bW03fSAmIHNjcmF0Y2ggcmVnaXN0ZXJzICYg Tm8gXFwKIFxyZWd7bW0wfSAmIHNjcmF0Y2ggcmVnaXN0ZXI7IGFsc28gdXNlZCB0byBwYXNzIGFu ZCByZXR1cm4KIFxjb2Rle19fbTY0fSBwYXJhbWV0ZXIgJiBOb1xcCiBccmVne21tMX0tLVxyZWd7 bW0yfSAmIHVzZWQgdG8gcGFzcyBcY29kZXtfX202NH0gcGFyYW1ldGVycyAmIE5vXFwKQEAgLTQy MCw2ICs0NDQsOCBAQCBhbmQgXHRleHR0dHt1bmlvbnN9KSBhcmUgYWx3YXlzIHJldHVybmVkIGlu IG1lbW9yeS4KICAgICAmIFx0ZXh0dHR7XHRleHRpdHthbnktdHlwZX0gKn0gJiBcRUFYIFxcCiAg ICAgJiBcdGV4dHR0e1x0ZXh0aXR7YW55LXR5cGV9ICgqKSgpfSAmIFxcCiAgICAgXGhsaW5lCisg ICAgJiBcdGV4dHR0e19GbG9hdDE2fSAmIFxyZWd7eG1tMH0gXFwKKyAgICBcY2xpbmV7Mi0zfQog ICAgICYgXHRleHR0dHtmbG9hdH0gJiBccmVne3N0MH0gXFwKICAgICBcY2xpbmV7Mi0zfQogICAg IEZsb2F0aW5nLSAmIFx0ZXh0dHR7ZG91YmxlfSAmIFxyZWd7c3QwfSBcXApAQCAtNDMwLDE0ICs0 NTYsMTYgQEAgYW5kIFx0ZXh0dHR7dW5pb25zfSkgYXJlIGFsd2F5cyByZXR1cm5lZCBpbiBtZW1v cnkuCiAgICAgXGNsaW5lezItM30KICAgICAmIFx0ZXh0dHR7X19mbG9hdDEyOH0gJiBtZW1vcnkg XFwKICAgICBcaGxpbmUKLSAgICAmIFx0ZXh0dHR7X0NvbXBsZXggZmxvYXR9ICYgXEVEWDpcRUFY IFxcCi0gICAgJiAmIFRoZSByZWFsIHBhcnQgaXMgcmV0dXJuZWQgaW4gXEVBWC4gVGhlIGltYWdp bmFyeSBwYXJ0IGlzCisgICAgJiBcdGV4dHR0e19Db21wbGV4IF9GbG9hdDE2fSAmIFxyZWd7eG1t MH0gXFwKKyAgICBcY2xpbmV7Mi0zfQorICAgIENvbXBsZXggJiBcdGV4dHR0e19Db21wbGV4IGZs b2F0fSAmIFxFRFg6XEVBWCBcXAorICAgIGZsb2F0aW5nLSAmICYgVGhlIHJlYWwgcGFydCBpcyBy ZXR1cm5lZCBpbiBcRUFYLiBUaGUgaW1hZ2luYXJ5IHBhcnQgaXMKICAgICAgICAgcmV0dXJuZWQg XFwKLSAgICBDb21wbGV4ICYgJiBpbiBcRURYLlxcCisgICAgcG9pbnQgJiAmIGluIFxFRFguXFwK ICAgICBcY2xpbmV7Mi0zfQotICAgIGZsb2F0aW5nLSAmIFx0ZXh0dHR7X0NvbXBsZXggZG91Ymxl fSAmIG1lbW9yeSBcXAorICAgICYgXHRleHR0dHtfQ29tcGxleCBkb3VibGV9ICYgbWVtb3J5IFxc CiAgICAgXGNsaW5lezItM30KLSAgICBwb2ludCAmIFx0ZXh0dHR7X0NvbXBsZXggbG9uZyBkb3Vi bGV9ICYgbWVtb3J5IFxcCisgICAgJiBcdGV4dHR0e19Db21wbGV4IGxvbmcgZG91YmxlfSAmIG1l bW9yeSBcXAogICAgIFxjbGluZXsyLTN9CiAgICAgJiBcdGV4dHR0e19Db21wbGV4IF9fZmxvYXQ4 MH0gJiBtZW1vcnkgXFwKICAgICBcY2xpbmV7Mi0zfQotLSAKMi4zMS4xCgo= --0000000000001332d705c8433e15--