Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1m5kKJ-0004T4-Tj for pgsql-hackers@arkaria.postgresql.org; Tue, 20 Jul 2021 07:38:04 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1m5kKH-0000zq-SD for pgsql-hackers@arkaria.postgresql.org; Tue, 20 Jul 2021 07:38:01 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1m5kKH-0000zh-ES for pgsql-hackers@lists.postgresql.org; Tue, 20 Jul 2021 07:38:01 +0000 Received: from mail-pg1-x534.google.com ([2607:f8b0:4864:20::534]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1m5kKE-00023u-8U for pgsql-hackers@postgresql.org; Tue, 20 Jul 2021 07:38:00 +0000 Received: by mail-pg1-x534.google.com with SMTP id k20so21735923pgg.7 for ; Tue, 20 Jul 2021 00:37:58 -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=I802yFCgW+S3NfiJKqLlnvSFj6Z5nKsOe59I5lHnByM=; b=Qs2jrAqMOXIdDpjSeXzxPYwz0cxVhHV5vrS5+ujgwsBUifRcE1JnYRc6DR4eoXJKCW Qxf4S+v0ugrITathpdKk3i84DQXTD6pZo/V9jbzyLpdaMe3muDDa4BX5P9UXpK9HfhcX c1aoc90ZU76N5xQ7NoI2zP0T32NC79KDRKdfKmvlU8FdtHovb6u8Un/YPtMF3KkG+djh nf+/yMl6MWrAx8QIGkvucQCidCDi4JDVTKgOo6FMC5hE23aFVIHjTdHGFU67y0YrGEOX UoPKDVvQUwL8giJFmFpMgN1ENnUNlF/TKu9vNbzEMqjDmkxzmOrFbs1VII+d5rU56Vty MY3w== 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=I802yFCgW+S3NfiJKqLlnvSFj6Z5nKsOe59I5lHnByM=; b=Xg1jK2V1weGxkuurk8Z2JidCES41KlDBiXVe+TZhWSn5X2RQtE6tFVEAahoZm5wjGm xy+NcbfYOdFTXCgZ9nu4sb2LT+yL7FrhMFf37x4b/2gjkV6DcU0+uZmg0e7FkI/N6lg0 8FRk7MK4MUozsgmXACDwgt/r/2NCkIvg2MJ5r+w68paCwjpklJ8A0QwDSoE98goTonvh 4uFOohVizaHjP/S9s2pXeTXMNffkINIxY3LaMU0/jrWdxZ5hs1g+nTum2i/4UgYSAtx0 yJUInzpFkU5nSYUteXrOkrWwBsiUaLd1iHU4MI0THaLAerxnpyRZhOCrNsatEOad3mAY AThA== X-Gm-Message-State: AOAM532X5tWWxOHoOTriiFGTFmURCDr6FbuY3e9u3goH7eDhXWo8F3sj nofzS5OwEK/48OyWEPR0Xe2YTm4wgGscSbJ7qPE= X-Google-Smtp-Source: ABdhPJyVd56NIkQbcF5Z/zSmDzoRdCxTfjdHHyPMtkB7uuEjPzFjEhPsCjMCKJSK1jrTaM4THzw3QUvLtgCg5MQvFl4= X-Received: by 2002:a05:6a00:10d0:b029:337:abdd:be39 with SMTP id d16-20020a056a0010d0b0290337abddbe39mr20622757pfu.65.1626766677252; Tue, 20 Jul 2021 00:37:57 -0700 (PDT) MIME-Version: 1.0 References: <20210719195950.gavgs6ujzmjfaiig@alap3.anarazel.de> <20210720061657.bcueir3krgmkt6m5@alap3.anarazel.de> <189e4a79-c477-44e0-b3a2-e242b491948d@www.fastmail.com> In-Reply-To: <189e4a79-c477-44e0-b3a2-e242b491948d@www.fastmail.com> From: David Rowley Date: Tue, 20 Jul 2021 19:37:46 +1200 Message-ID: Subject: Re: Avoid stack frame setup in performance critical routines using tail calls To: Andres Freund Cc: PostgreSQL Development , Robert Haas , Michael Paquier , Tomas Vondra Content-Type: multipart/mixed; boundary="000000000000ee65c205c78921d7" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000ee65c205c78921d7 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, 20 Jul 2021 at 19:04, Andres Freund wrote: > > * AllocateSetAlloc.txt > > * palloc.txt > > * percent.txt > > Huh, that's interesting. You have some control flow enforcement stuff tur= ned on (the endbr64). And it looks like it has a non zero cost (or maybe it= 's just skid). Did you enable that intentionally? If not, what compiler/ver= sion/distro is it? I think at least on GCC that's -fcf-protection=3D... It's ubuntu 21.04 with gcc 10.3 (specifically gcc version 10.3.0 (Ubuntu 10.3.0-1ubuntu1) I've attached the same results from compiling with clang 12 (12.0.0-3ubuntu1~21.04.1) David --000000000000ee65c205c78921d7 Content-Type: text/plain; charset="US-ASCII"; name="AllocSetAlloc_clang.txt" Content-Disposition: attachment; filename="AllocSetAlloc_clang.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_krbquyhk0 IFBlcmNlbnQgfAlTb3VyY2UgY29kZSAmIERpc2Fzc2VtYmx5IG9mIHBvc3RncmVzIGZvciBjeWNs ZXMgKDcwNyBzYW1wbGVzLCBwZXJjZW50OiBsb2NhbCBwZXJpb2QpCi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIDoKICAgICAgICAgOgogICAgICAg ICA6CiAgICAgICAgIDogICAgICAgICAgICBEaXNhc3NlbWJseSBvZiBzZWN0aW9uIC50ZXh0Ogog ICAgICAgICA6CiAgICAgICAgIDogICAgICAgICAgICAwMDAwMDAwMDAwOGU3YzEwIDxBbGxvY1Nl dEFsbG9jPjoKICAgICAgICAgOiAgICAgICAgICAgIEFsbG9jU2V0QWxsb2MoKToKICAgICAgICAg OgogICAgICAgICA6ICAgICAgICAgICAgLyoKICAgICAgICAgOiAgICAgICAgICAgICogSWYgcmVx dWVzdGVkIHNpemUgZXhjZWVkcyBtYXhpbXVtIGZvciBjaHVua3MsIGFsbG9jYXRlIGFuIGVudGly ZSBibG9jawogICAgICAgICA6ICAgICAgICAgICAgKiBmb3IgdGhpcyByZXF1ZXN0LgogICAgICAg ICA6ICAgICAgICAgICAgKi8KICAgICAgICAgOiAgICAgICAgICAgIGlmICh1bmxpa2VseShzaXpl ID4gc2V0LT5hbGxvY0NodW5rTGltaXQpKQogICAgNy40OCA6ICAgOGU3YzEwOiBjbXAgICAgJXJz aSwweGM4KCVyZGkpCiAgICAzLjI2IDogICA4ZTdjMTc6IGpiICAgICA4ZTdjODEgPEFsbG9jU2V0 QWxsb2MrMHg3MT4KICAgIDAuMDAgOiAgIDhlN2MxOTogeG9yICAgICVlYXgsJWVheAogICAgICAg ICA6ICAgICAgICAgICAgQWxsb2NTZXRGcmVlSW5kZXgoKToKICAgICAgICAgOiAgICAgICAgICAg IGlmIChzaXplID4gKDEgPDwgQUxMT0NfTUlOQklUUykpCiAgICAwLjQ0IDogICA4ZTdjMWI6IGNt cCAgICAkMHg5LCVyc2kKICAgIDAuMDAgOiAgIDhlN2MxZjogamIgICAgIDhlN2MyZCA8QWxsb2NT ZXRBbGxvYysweDFkPgogICAgICAgICA6ICAgICAgICAgICAgaWR4ID0gMzEgLSBfX2J1aWx0aW5f Y2x6KCh1aW50MzIpIHNpemUgLSAxKSAtIEFMTE9DX01JTkJJVFMgKyAxOwogICAgMC4wMCA6ICAg OGU3YzIxOiBhZGQgICAgJDB4ZmZmZmZmZmYsJWVzaQogICAgMC45OCA6ICAgOGU3YzI0OiBic3Ig ICAgJWVzaSwlZWF4CiAgICA5LjU5IDogICA4ZTdjMjc6IHhvciAgICAkMHhmZmZmZmZlMCwlZWF4 CiAgICAxLjQ0IDogICA4ZTdjMmE6IGFkZCAgICAkMHgxZSwlZWF4CiAgICAgICAgIDogICAgICAg ICAgICBBbGxvY1NldEFsbG9jKCk6CiAgICAgICAgIDogICAgICAgICAgICAqIGNvcnJlc3BvbmRp bmcgZnJlZSBsaXN0IHRvIHNlZSBpZiB0aGVyZSBpcyBhIGZyZWUgY2h1bmsgd2UgY291bGQgcmV1 c2UuCiAgICAgICAgIDogICAgICAgICAgICAqIElmIG9uZSBpcyBmb3VuZCwgcmVtb3ZlIGl0IGZy b20gdGhlIGZyZWUgbGlzdCwgbWFrZSBpdCBhZ2FpbiBhIG1lbWJlcgogICAgICAgICA6ICAgICAg ICAgICAgKiBvZiB0aGUgYWxsb2Mgc2V0IGFuZCByZXR1cm4gaXRzIGRhdGEgYWRkcmVzcy4KICAg ICAgICAgOiAgICAgICAgICAgICovCiAgICAgICAgIDogICAgICAgICAgICBmaWR4ID0gQWxsb2NT ZXRGcmVlSW5kZXgoc2l6ZSk7CiAgICAgICAgIDogICAgICAgICAgICBjaHVuayA9IHNldC0+ZnJl ZWxpc3RbZmlkeF07CiAgICAxLjY3IDogICA4ZTdjMmQ6IG1vdnNscSAlZWF4LCVyY3gKICAgIDQu MTAgOiAgIDhlN2MzMDogbW92ICAgIDB4NTgoJXJkaSwlcmN4LDgpLCVyYXgKICAgICAgICAgOiAg ICAgICAgICAgIGlmIChjaHVuayAhPSBOVUxMKQogICAxNS45NyA6ICAgOGU3YzM1OiB0ZXN0ICAg JXJheCwlcmF4CiAgICAwLjI4IDogICA4ZTdjMzg6IGplICAgICA4ZTdjNDUgPEFsbG9jU2V0QWxs b2MrMHgzNT4KICAgICAgICAgOiAgICAgICAgICAgIHsKICAgICAgICAgOiAgICAgICAgICAgIEFz c2VydChjaHVuay0+c2l6ZSA+PSBzaXplKTsKICAgICAgICAgOgogICAgICAgICA6ICAgICAgICAg ICAgc2V0LT5mcmVlbGlzdFtmaWR4XSA9IChBbGxvY0NodW5rKSBjaHVuay0+YXNldDsKICAgIDAu MDAgOiAgIDhlN2MzYTogbW92ICAgIDB4OCglcmF4KSwlcmR4CiAgIDEzLjMzIDogICA4ZTdjM2U6 IG1vdiAgICAlcmR4LDB4NTgoJXJkaSwlcmN4LDgpCiAgICAwLjI4IDogICA4ZTdjNDM6IGptcCAg ICA4ZTdjNzMgPEFsbG9jU2V0QWxsb2MrMHg2Mz4KICAgIDAuMDAgOiAgIDhlN2M0NTogbW92ICAg ICQweDgsJWVheAogICAgICAgICA6ICAgICAgICAgICAgfQogICAgICAgICA6CiAgICAgICAgIDog ICAgICAgICAgICAvKgogICAgICAgICA6ICAgICAgICAgICAgKiBDaG9vc2UgdGhlIGFjdHVhbCBj aHVuayBzaXplIHRvIGFsbG9jYXRlLgogICAgICAgICA6ICAgICAgICAgICAgKi8KICAgICAgICAg OiAgICAgICAgICAgIGNodW5rX3NpemUgPSAoMSA8PCBBTExPQ19NSU5CSVRTKSA8PCBmaWR4Owog ICAgMC43MSA6ICAgOGU3YzRhOiBzaGwgICAgJWNsLCVlYXgKICAgIDAuMTUgOiAgIDhlN2M0Yzog bW92c2xxICVlYXgsJXJzaQogICAgICAgICA6CiAgICAgICAgIDogICAgICAgICAgICAvKgogICAg ICAgICA6ICAgICAgICAgICAgKiBJZiB0aGVyZSBpcyBlbm91Z2ggcm9vbSBpbiB0aGUgYWN0aXZl IGFsbG9jYXRpb24gYmxvY2ssIHdlIHdpbGwgcHV0IHRoZQogICAgICAgICA6ICAgICAgICAgICAg KiBjaHVuayBpbnRvIHRoYXQgYmxvY2suICBFbHNlIG11c3Qgc3RhcnQgYSBuZXcgb25lLgogICAg ICAgICA6ICAgICAgICAgICAgKi8KICAgICAgICAgOiAgICAgICAgICAgIGlmICgoYmxvY2sgPSBz ZXQtPmJsb2NrcykgIT0gTlVMTCkKICAgIDAuNDMgOiAgIDhlN2M0ZjogbW92ICAgIDB4NTAoJXJk aSksJXJkeAogICAgMS4xMyA6ICAgOGU3YzUzOiB0ZXN0ICAgJXJkeCwlcmR4CiAgICAwLjE0IDog ICA4ZTdjNTY6IGplICAgICA4ZTdjN2MgPEFsbG9jU2V0QWxsb2MrMHg2Yz4KICAgICAgICAgOiAg ICAgICAgICAgIHsKICAgICAgICAgOiAgICAgICAgICAgIFNpemUgICAgICAgICAgICBhdmFpbHNw YWNlID0gYmxvY2stPmVuZHB0ciAtIGJsb2NrLT5mcmVlcHRyOwogICAgMC4wMCA6ICAgOGU3YzU4 OiBtb3YgICAgMHgxOCglcmR4KSwlcmF4CiAgICA2Ljk4IDogICA4ZTdjNWM6IG1vdiAgICAweDIw KCVyZHgpLCVyY3gKICAgIDIuMzAgOiAgIDhlN2M2MDogc3ViICAgICVyYXgsJXJjeAogICAgICAg ICA6CiAgICAgICAgIDogICAgICAgICAgICBpZiAodW5saWtlbHkoYXZhaWxzcGFjZSA8IChjaHVu a19zaXplICsgQUxMT0NfQ0hVTktIRFJTWikpKQogICAgMC4wMCA6ICAgOGU3YzYzOiBsZWEgICAg MHgxMCglcnNpKSwlcjgKICAgIDAuMTQgOiAgIDhlN2M2NzogY21wICAgICVyOCwlcmN4CiAgICAy LjAyIDogICA4ZTdjNmE6IGpiICAgICA4ZTdjODYgPEFsbG9jU2V0QWxsb2MrMHg3Nj4KICAgICAg ICAgOiAgICAgICAgICAgIGNodW5rID0gKEFsbG9jQ2h1bmspIChibG9jay0+ZnJlZXB0cik7CiAg ICAgICAgIDoKICAgICAgICAgOiAgICAgICAgICAgIC8qIFByZXBhcmUgdG8gaW5pdGlhbGl6ZSB0 aGUgY2h1bmsgaGVhZGVyLiAqLwogICAgICAgICA6ICAgICAgICAgICAgVkFMR1JJTkRfTUFLRV9N RU1fVU5ERUZJTkVEKGNodW5rLCBBTExPQ19DSFVOS0hEUlNaKTsKICAgICAgICAgOgogICAgICAg ICA6ICAgICAgICAgICAgY2h1bmstPnNpemUgPSBjaHVua19zaXplOwogICAgMi4wNCA6ICAgOGU3 YzZjOiBtb3YgICAgJXJzaSwoJXJheCkKICAgICAgICAgOgogICAgICAgICA6ICAgICAgICAgICAg YmxvY2stPmZyZWVwdHIgKz0gKGNodW5rX3NpemUgKyBBTExPQ19DSFVOS0hEUlNaKTsKICAgMjAu MTYgOiAgIDhlN2M2ZjogYWRkICAgICVyOCwweDE4KCVyZHgpCiAgICAwLjI4IDogICA4ZTdjNzM6 IG1vdiAgICAlcmRpLDB4OCglcmF4KQogICAgNC43MCA6ICAgOGU3Yzc3OiBhZGQgICAgJDB4MTAs JXJheAogICAgICAgICA6ICAgICAgICAgICAgQXNzZXJ0KGJsb2NrLT5mcmVlcHRyIDw9IGJsb2Nr LT5lbmRwdHIpOwogICAgICAgICA6CiAgICAgICAgIDogICAgICAgICAgICByZXR1cm4gQWxsb2NT ZXRBbGxvY1JldHVybkNodW5rKHNldCwgc2l6ZSwgY2h1bmssIGNodW5rX3NpemUpOwogICAgICAg ICA6ICAgICAgICAgICAgfQogICAgMC4wMCA6ICAgOGU3YzdiOiByZXQKICAgICAgICAgOiAgICAg ICAgICAgIHJldHVybiBBbGxvY1NldEFsbG9jRnJvbU5ld0Jsb2NrKHNldCwgc2l6ZSwgY2h1bmtf c2l6ZSk7CiAgICAwLjAwIDogICA4ZTdjN2M6IGptcCAgICA4ZTg0NzAgPEFsbG9jU2V0QWxsb2NG cm9tTmV3QmxvY2s+CiAgICAgICAgIDogICAgICAgICAgICByZXR1cm4gQWxsb2NTZXRBbGxvY0xh cmdlKHNldCwgc2l6ZSwgZmxhZ3MpOwogICAgMC4wMCA6ICAgOGU3YzgxOiBqbXAgICAgOGU4MzMw IDxBbGxvY1NldEFsbG9jTGFyZ2U+CiAgICAgICAgIDogICAgICAgICAgICByZXR1cm4gQWxsb2NT ZXRBbGxvY0NhcnZlT2xkQW5kQWxsb2Moc2V0LCBzaXplLCBjaHVua19zaXplLAogICAgMC4wMCA6 ICAgOGU3Yzg2OiBqbXAgICAgOGU4M2UwIDxBbGxvY1NldEFsbG9jQ2FydmVPbGRBbmRBbGxvYz4K --000000000000ee65c205c78921d7 Content-Type: text/plain; charset="US-ASCII"; name="palloc_clang.txt" Content-Disposition: attachment; filename="palloc_clang.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_krbqv3cu1 IFBlcmNlbnQgfAlTb3VyY2UgY29kZSAmIERpc2Fzc2VtYmx5IG9mIHBvc3RncmVzIGZvciBjeWNs ZXMgKDEyMyBzYW1wbGVzLCBwZXJjZW50OiBsb2NhbCBwZXJpb2QpCi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIDoKICAgICAgICAgOgogICAgICAg ICA6CiAgICAgICAgIDogICAgICAgICAgICBEaXNhc3NlbWJseSBvZiBzZWN0aW9uIC50ZXh0Ogog ICAgICAgICA6CiAgICAgICAgIDogICAgICAgICAgICAwMDAwMDAwMDAwOGVlM2EwIDxwYWxsb2M+ OgogICAgICAgICA6ICAgICAgICAgICAgcGFsbG9jKCk6CiAgICAgICAgIDogICAgICAgICAgICBN ZW1vcnlDb250ZXh0U3RhdHNEZXRhaWwoVG9wTWVtb3J5Q29udGV4dCwgMTAwLCBmYWxzZSk7CiAg ICAgICAgIDogICAgICAgICAgICB9CiAgICAgICAgIDoKICAgICAgICAgOiAgICAgICAgICAgIHZv aWQgKgogICAgICAgICA6ICAgICAgICAgICAgcGFsbG9jKFNpemUgc2l6ZSkKICAgICAgICAgOiAg ICAgICAgICAgIHsKICAgIDkuMTIgOiAgIDhlZTNhMDogbW92ICAgICVyZGksJXJzaQogICAgICAg ICA6ICAgICAgICAgICAgLyogZHVwbGljYXRlcyBNZW1vcnlDb250ZXh0QWxsb2MgdG8gYXZvaWQg aW5jcmVhc2VkIG92ZXJoZWFkICovCiAgICAgICAgIDogICAgICAgICAgICB2b2lkICAgICAgICpy ZXQ7CiAgICAgICAgIDogICAgICAgICAgICBNZW1vcnlDb250ZXh0IGNvbnRleHQgPSBDdXJyZW50 TWVtb3J5Q29udGV4dDsKICAgIDIuNDcgOiAgIDhlZTNhMzogbW92ICAgIDB4Mjk1YTg2KCVyaXAp LCVyZGkgICAgICAgICMgYjgzZTMwIDxDdXJyZW50TWVtb3J5Q29udGV4dD4KICAgICAgICAgOgog ICAgICAgICA6ICAgICAgICAgICAgQXNzZXJ0QXJnKE1lbW9yeUNvbnRleHRJc1ZhbGlkKGNvbnRl eHQpKTsKICAgICAgICAgOiAgICAgICAgICAgIEFzc2VydE5vdEluQ3JpdGljYWxTZWN0aW9uKGNv bnRleHQpOwogICAgICAgICA6ICAgICAgICAgICAgY29udGV4dC0+aXNSZXNldCA9IGZhbHNlOwog ICAyMi44MyA6ICAgOGVlM2FhOiBtb3ZiICAgJDB4MCwweDQoJXJkaSkKICAgICAgICAgOgogICAg ICAgICA6ICAgICAgICAgICAgcmV0ID0gY29udGV4dC0+bWV0aG9kcy0+YWxsb2MoY29udGV4dCwg c2l6ZSwgMCk7CiAgIDM0LjI1IDogICA4ZWUzYWU6IG1vdiAgICAweDEwKCVyZGkpLCVyYXgKICAg IDcuNjggOiAgIDhlZTNiMjogbW92ICAgICglcmF4KSwlcmF4CiAgIDIzLjY2IDogICA4ZWUzYjU6 IHhvciAgICAlZWR4LCVlZHgKICAgIDAuMDAgOiAgIDhlZTNiNzogam1wICAgIColcmF4Cg== --000000000000ee65c205c78921d7 Content-Type: text/plain; charset="US-ASCII"; name="percent_clang.txt" Content-Disposition: attachment; filename="percent_clang.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_krbqv7ft2 ICAgICAyLjI3JSAgcG9zdGdyZXMgIHBvc3RncmVzICAgICAgICAgICAgWy5dIEFsbG9jU2V0QWxs b2MKICAgICAwLjU5JSAgcG9zdGdyZXMgIHBvc3RncmVzICAgICAgICAgICAgWy5dIHBmcmVlCiAg ICAgMC40NCUgIHBvc3RncmVzICBwb3N0Z3JlcyAgICAgICAgICAgIFsuXSBNZW1vcnlDb250ZXh0 QWxsb2NaZXJvCiAgICAgMC4zOSUgIHBvc3RncmVzICBwb3N0Z3JlcyAgICAgICAgICAgIFsuXSBw YWxsb2MKICAgICAwLjM0JSAgcG9zdGdyZXMgIHBvc3RncmVzICAgICAgICAgICAgWy5dIE1lbW9y eUNvbnRleHRBbGxvY1plcm9BbGlnbmVkCiAgICAgMC4yNyUgIHBvc3RncmVzICBwb3N0Z3JlcyAg ICAgICAgICAgIFsuXSBwYWxsb2MwCiAgICAgMC4xNyUgIHBvc3RncmVzICBwb3N0Z3JlcyAgICAg ICAgICAgIFsuXSBBbGxvY1NldEFsbG9jQ2FydmVPbGRBbmRBbGxvYwogICAgIDAuMDklICBwb3N0 Z3JlcyAgcG9zdGdyZXMgICAgICAgICAgICBbLl0gTWVtb3J5Q29udGV4dEFsbG9jCiAgICAgMC4w MiUgIHBvc3RncmVzICBwb3N0Z3JlcyAgICAgICAgICAgIFsuXSBBbGxvY1NldEFsbG9jTGFyZ2UK ICAgICAwLjAxJSAgcG9zdGdyZXMgIHBvc3RncmVzICAgICAgICAgICAgWy5dIEFsbG9jU2V0QWxs b2NGcm9tTmV3QmxvY2sK --000000000000ee65c205c78921d7--