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 1m5jde-0002hp-GQ for pgsql-hackers@arkaria.postgresql.org; Tue, 20 Jul 2021 06:53:58 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1m5jdd-0001AF-Er for pgsql-hackers@arkaria.postgresql.org; Tue, 20 Jul 2021 06:53:57 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1m5jdd-0001A7-2q for pgsql-hackers@lists.postgresql.org; Tue, 20 Jul 2021 06:53:57 +0000 Received: from mail-pg1-x52b.google.com ([2607:f8b0:4864:20::52b]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1m5jdY-0000T0-Kd for pgsql-hackers@postgresql.org; Tue, 20 Jul 2021 06:53:56 +0000 Received: by mail-pg1-x52b.google.com with SMTP id r21so3467016pgv.13 for ; Mon, 19 Jul 2021 23:53:52 -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=NZernmWMbjoU1GyFJzMX78QrVTK/SIXrc4DVnRtmJkk=; b=g+y/xjz0cVeEGIIPnzTPIDTLh+kFEg/9CcNXarqYImpSbvkMBnryaJSqCnYzzHuF08 qaSrB516XX5bs01hHiOBP4sWiSOxrmyJJOdlq0isGeBsewuX23vN2oCE204QL2WeaHKp FlKFo4t303dJTdMgT0XfZXZohIeIGXf3NtH/q+XqBjQStDloPyUdZsdJIRVE4owM/4UN vg3D2j5wZQkzJjC3/arlUxRQXjdRYYoLBUB5OcnHA+3QpF2y8bxOdlhdZOsRAHCHeCaR +PUACsfIl29amzo92OVxPO93sXUCLejcEGRctANjQpaafMX076fEaFWp/dMHCl+R8pKq BYYw== 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=NZernmWMbjoU1GyFJzMX78QrVTK/SIXrc4DVnRtmJkk=; b=lywh1n5AVtlzBDguTegedai2zaObJP2p0sxndHD4bRb4Qq0/bfN2EOsoYlw2fdA5ug ImEwMViTnZSw1CxPNN8VAmsEFxudyjgAAsw2+BRSv33Z1tCUhQm1lKf1DiGABXP/qbJk cGNB4SrKg20MfH3wSrjxA01ApEuLWsgBbLUnZVXCWmlTT3NEbW2NPdxsaJp0i8Qe4yBR 1q0xF1oISRKF5zF/nh4gozkpWzRPloGOVoolWG9QnMXuL5SC37G58PLzURrN4DoJlMLK xZ6VhEoWtjU6bnRwCl1EaX/gsgYWZEo+YxMTa1rycPb2uhcdlRYnm5kXHto+tB8TZI9Y 8iXg== X-Gm-Message-State: AOAM532/78FsY8SFl4RtaVQBWxjnWhLRQYwIUhc0dc2jq9aDGYntdCg+ CvtvY1jEEOcEVVaA1KE1RzCqG+Y9iKOw1CSfJYU= X-Google-Smtp-Source: ABdhPJw6Ipj54pMH4d9XUELmoXPt3cwf3RwKQv41zyQGPEKGG0XqkjnDnizkqAzGYMqh9ALuCo90Oc6sENY8gMR1nJw= X-Received: by 2002:a65:6404:: with SMTP id a4mr29556100pgv.175.1626764030610; Mon, 19 Jul 2021 23:53:50 -0700 (PDT) MIME-Version: 1.0 References: <20210719195950.gavgs6ujzmjfaiig@alap3.anarazel.de> <20210720061657.bcueir3krgmkt6m5@alap3.anarazel.de> In-Reply-To: <20210720061657.bcueir3krgmkt6m5@alap3.anarazel.de> From: David Rowley Date: Tue, 20 Jul 2021 18:53:39 +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="0000000000002de86005c7888411" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000002de86005c7888411 Content-Type: text/plain; charset="UTF-8" On Tue, 20 Jul 2021 at 18:17, Andres Freund wrote: > Any chance you could show a `perf annotate AllocSetAlloc` and `perf annotate > palloc` from a patched run? And perhaps how high their percentages of the > total work are. E.g. using something like > perf report -g none|grep -E 'AllocSetAlloc|palloc|MemoryContextAlloc|pfree' Sure. See attached. David --0000000000002de86005c7888411 Content-Type: text/plain; charset="US-ASCII"; name="AllocateSetAlloc.txt" Content-Disposition: attachment; filename="AllocateSetAlloc.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_krbp9ps50 IFBlcmNlbnQgfAlTb3VyY2UgY29kZSAmIERpc2Fzc2VtYmx5IG9mIHBvc3RncmVzIGZvciBjeWNs ZXMgKDYyNiBzYW1wbGVzLCBwZXJjZW50OiBsb2NhbCBwZXJpb2QpCi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIDoKICAgICAgICAgOgogICAgICAg ICA6CiAgICAgICAgIDogICAgICAgICAgICBEaXNhc3NlbWJseSBvZiBzZWN0aW9uIC50ZXh0Ogog ICAgICAgICA6CiAgICAgICAgIDogICAgICAgICAgICAwMDAwMDAwMDAwNTZiZDgwIDxBbGxvY1Nl dEFsbG9jPjoKICAgICAgICAgOiAgICAgICAgICAgIEFsbG9jU2V0QWxsb2MoKToKICAgICAgICAg OiAgICAgICAgICAgICogaXMgbWFya2VkLCBhcyBtY3h0LmMgd2lsbCBzZXQgaXQgdG8gVU5ERUZJ TkVELiAgSW4gc29tZSBwYXRocyB3ZSB3aWxsCiAgICAgICAgIDogICAgICAgICAgICAqIHJldHVy biBzcGFjZSB0aGF0IGlzIG1hcmtlZCBOT0FDQ0VTUyAtIEFsbG9jU2V0UmVhbGxvYyBoYXMgdG8g YmV3YXJlIQogICAgICAgICA6ICAgICAgICAgICAgKi8KICAgICAgICAgOiAgICAgICAgICAgIHN0 YXRpYyB2b2lkICoKICAgICAgICAgOiAgICAgICAgICAgIEFsbG9jU2V0QWxsb2MoTWVtb3J5Q29u dGV4dCBjb250ZXh0LCBTaXplIHNpemUsIGludCBmbGFncykKICAgICAgICAgOiAgICAgICAgICAg IHsKICAgIDcuNjYgOiAgIDU2YmQ4MDogZW5kYnI2NAogICAgICAgICA6CiAgICAgICAgIDogICAg ICAgICAgICAvKgogICAgICAgICA6ICAgICAgICAgICAgKiBJZiByZXF1ZXN0ZWQgc2l6ZSBleGNl ZWRzIG1heGltdW0gZm9yIGNodW5rcywgYWxsb2NhdGUgYW4gZW50aXJlIGJsb2NrCiAgICAgICAg IDogICAgICAgICAgICAqIGZvciB0aGlzIHJlcXVlc3QuCiAgICAgICAgIDogICAgICAgICAgICAq LwogICAgICAgICA6ICAgICAgICAgICAgaWYgKHVubGlrZWx5KHNpemUgPiBzZXQtPmFsbG9jQ2h1 bmtMaW1pdCkpCiAgICAyLjY4IDogICA1NmJkODQ6IGNtcCAgICAlcnNpLDB4YzgoJXJkaSkKICAg IDMuMzQgOiAgIDU2YmQ4YjogamIgICAgIDU2YmUxMCA8QWxsb2NTZXRBbGxvYysweDkwPgogICAg ICAgICA6ICAgICAgICAgICAgQWxsb2NTZXRGcmVlSW5kZXgoKToKICAgICAgICAgOiAgICAgICAg ICAgIGlkeCA9IDA7CiAgICAwLjE3IDogICA1NmJkOTE6IHhvciAgICAlZWN4LCVlY3gKICAgICAg ICAgOiAgICAgICAgICAgIGlmIChzaXplID4gKDEgPDwgQUxMT0NfTUlOQklUUykpCiAgICAwLjAw IDogICA1NmJkOTM6IGNtcCAgICAkMHg4LCVyc2kKICAgIDAuMTYgOiAgIDU2YmQ5NzogamJlICAg IDU2YmRhOSA8QWxsb2NTZXRBbGxvYysweDI5PgogICAgICAgICA6ICAgICAgICAgICAgaWR4ID0g MzEgLSBfX2J1aWx0aW5fY2x6KCh1aW50MzIpIHNpemUgLSAxKSAtIEFMTE9DX01JTkJJVFMgKyAx OwogICAgMC4wMCA6ICAgNTZiZDk5OiBzdWIgICAgJDB4MSwlZXNpCiAgICAwLjQ3IDogICA1NmJk OWM6IG1vdiAgICAkMHgxZCwlZWN4CiAgICAwLjUwIDogICA1NmJkYTE6IGJzciAgICAlZXNpLCVl c2kKICAgIDYuMzggOiAgIDU2YmRhNDogeG9yICAgICQweDFmLCVlc2kKICAgIDEuOTIgOiAgIDU2 YmRhNzogc3ViICAgICVlc2ksJWVjeAogICAgICAgICA6ICAgICAgICAgICAgQWxsb2NTZXRBbGxv YygpOgogICAgICAgICA6ICAgICAgICAgICAgKiBjb3JyZXNwb25kaW5nIGZyZWUgbGlzdCB0byBz ZWUgaWYgdGhlcmUgaXMgYSBmcmVlIGNodW5rIHdlIGNvdWxkIHJldXNlLgogICAgICAgICA6ICAg ICAgICAgICAgKiBJZiBvbmUgaXMgZm91bmQsIHJlbW92ZSBpdCBmcm9tIHRoZSBmcmVlIGxpc3Qs IG1ha2UgaXQgYWdhaW4gYSBtZW1iZXIKICAgICAgICAgOiAgICAgICAgICAgICogb2YgdGhlIGFs bG9jIHNldCBhbmQgcmV0dXJuIGl0cyBkYXRhIGFkZHJlc3MuCiAgICAgICAgIDogICAgICAgICAg ICAqLwogICAgICAgICA6ICAgICAgICAgICAgZmlkeCA9IEFsbG9jU2V0RnJlZUluZGV4KHNpemUp OwogICAgICAgICA6ICAgICAgICAgICAgY2h1bmsgPSBzZXQtPmZyZWVsaXN0W2ZpZHhdOwogICAg MS40NCA6ICAgNTZiZGE5OiBtb3ZzbHEgJWVjeCwlcmR4CiAgICAxLjg4IDogICA1NmJkYWM6IGFk ZCAgICAkMHhhLCVyZHgKICAgIDEuMTEgOiAgIDU2YmRiMDogbW92ICAgIDB4OCglcmRpLCVyZHgs OCksJXJheAogICAgICAgICA6ICAgICAgICAgICAgaWYgKGNodW5rICE9IE5VTEwpCiAgIDE5Ljkw IDogICA1NmJkYjU6IHRlc3QgICAlcmF4LCVyYXgKICAgIDAuMzIgOiAgIDU2YmRiODogamUgICAg IDU2YmRkMCA8QWxsb2NTZXRBbGxvYysweDUwPgogICAgICAgICA6ICAgICAgICAgICAgewogICAg ICAgICA6ICAgICAgICAgICAgQXNzZXJ0KGNodW5rLT5zaXplID49IHNpemUpOwogICAgICAgICA6 CiAgICAgICAgIDogICAgICAgICAgICBzZXQtPmZyZWVsaXN0W2ZpZHhdID0gKEFsbG9jQ2h1bmsp IGNodW5rLT5hc2V0OwogICAgMC43OSA6ICAgNTZiZGJhOiBtb3YgICAgMHg4KCVyYXgpLCVyY3gK ICAgICAgICAgOiAgICAgICAgICAgIEFsbG9jU2V0QWxsb2NSZXR1cm5DaHVuaygpOgogICAgICAg ICA6ICAgICAgICAgICAgcmV0dXJuIEFsbG9jQ2h1bmtHZXRQb2ludGVyKGNodW5rKTsKICAgMTMu OTcgOiAgIDU2YmRiZTogYWRkICAgICQweDEwLCVyYXgKICAgICAgICAgOiAgICAgICAgICAgIEFs bG9jU2V0QWxsb2MoKToKICAgICAgICAgOiAgICAgICAgICAgIHNldC0+ZnJlZWxpc3RbZmlkeF0g PSAoQWxsb2NDaHVuaykgY2h1bmstPmFzZXQ7CiAgICAwLjAwIDogICA1NmJkYzI6IG1vdiAgICAl cmN4LDB4OCglcmRpLCVyZHgsOCkKICAgICAgICAgOiAgICAgICAgICAgIEFsbG9jU2V0QWxsb2NS ZXR1cm5DaHVuaygpOgogICAgICAgICA6ICAgICAgICAgICAgY2h1bmstPmFzZXQgPSAodm9pZCAq KSBzZXQ7CiAgICAwLjAwIDogICA1NmJkYzc6IG1vdiAgICAlcmRpLC0weDgoJXJheCkKICAgICAg ICAgOiAgICAgICAgICAgIEFsbG9jU2V0QWxsb2MoKToKICAgICAgICAgOgogICAgICAgICA6ICAg ICAgICAgICAgcmV0dXJuIEFsbG9jU2V0QWxsb2NSZXR1cm5DaHVuayhzZXQsIHNpemUsIGNodW5r LCBjaHVuay0+c2l6ZSk7CiAgICAwLjE2IDogICA1NmJkY2I6IHJldAogICAgMC4wMCA6ICAgNTZi ZGNjOiBub3BsICAgMHgwKCVyYXgpCiAgICAgICAgIDogICAgICAgICAgICB9CiAgICAgICAgIDoK ICAgICAgICAgOiAgICAgICAgICAgIC8qCiAgICAgICAgIDogICAgICAgICAgICAqIENob29zZSB0 aGUgYWN0dWFsIGNodW5rIHNpemUgdG8gYWxsb2NhdGUuCiAgICAgICAgIDogICAgICAgICAgICAq LwogICAgICAgICA6ICAgICAgICAgICAgY2h1bmtfc2l6ZSA9ICgxIDw8IEFMTE9DX01JTkJJVFMp IDw8IGZpZHg7CiAgICAxLjEwIDogICA1NmJkZDA6IG1vdiAgICAkMHg4LCVlc2kKICAgICAgICAg OgogICAgICAgICA6ICAgICAgICAgICAgLyoKICAgICAgICAgOiAgICAgICAgICAgICogSWYgdGhl cmUgaXMgZW5vdWdoIHJvb20gaW4gdGhlIGFjdGl2ZSBhbGxvY2F0aW9uIGJsb2NrLCB3ZSB3aWxs IHB1dCB0aGUKICAgICAgICAgOiAgICAgICAgICAgICogY2h1bmsgaW50byB0aGF0IGJsb2NrLiAg RWxzZSBtdXN0IHN0YXJ0IGEgbmV3IG9uZS4KICAgICAgICAgOiAgICAgICAgICAgICovCiAgICAg ICAgIDogICAgICAgICAgICBpZiAoKGJsb2NrID0gc2V0LT5ibG9ja3MpICE9IE5VTEwpCiAgICAw LjMyIDogICA1NmJkZDU6IG1vdiAgICAweDUwKCVyZGkpLCVyZHgKICAgICAgICAgOiAgICAgICAg ICAgIGNodW5rX3NpemUgPSAoMSA8PCBBTExPQ19NSU5CSVRTKSA8PCBmaWR4OwogICAgMC4zMiA6 ICAgNTZiZGQ5OiBzaGwgICAgJWNsLCVlc2kKICAgIDAuMDAgOiAgIDU2YmRkYjogbW92c2xxICVl c2ksJXJzaQogICAgICAgICA6ICAgICAgICAgICAgaWYgKChibG9jayA9IHNldC0+YmxvY2tzKSAh PSBOVUxMKQogICAgMC4wMCA6ICAgNTZiZGRlOiB0ZXN0ICAgJXJkeCwlcmR4CiAgICAwLjQ3IDog ICA1NmJkZTE6IGplICAgICA1NmJlMTggPEFsbG9jU2V0QWxsb2MrMHg5OD4KICAgICAgICAgOiAg ICAgICAgICAgIHsKICAgICAgICAgOiAgICAgICAgICAgIFNpemUgICAgICAgICAgICBhdmFpbHNw YWNlID0gYmxvY2stPmVuZHB0ciAtIGJsb2NrLT5mcmVlcHRyOwogICAgMC4wMCA6ICAgNTZiZGUz OiBtb3YgICAgMHgxOCglcmR4KSwlcmF4CiAgICA0LjgwIDogICA1NmJkZTc6IG1vdiAgICAweDIw KCVyZHgpLCVyY3gKICAgICAgICAgOgogICAgICAgICA6ICAgICAgICAgICAgaWYgKHVubGlrZWx5 KGF2YWlsc3BhY2UgPCAoY2h1bmtfc2l6ZSArIEFMTE9DX0NIVU5LSERSU1opKSkKICAgIDEuNzUg OiAgIDU2YmRlYjogbGVhICAgIDB4MTAoJXJzaSksJXI4CiAgICAgICAgIDogICAgICAgICAgICBT aXplICAgICAgICAgICAgYXZhaWxzcGFjZSA9IGJsb2NrLT5lbmRwdHIgLSBibG9jay0+ZnJlZXB0 cjsKICAgIDAuNDcgOiAgIDU2YmRlZjogc3ViICAgICVyYXgsJXJjeAogICAgICAgICA6ICAgICAg ICAgICAgaWYgKHVubGlrZWx5KGF2YWlsc3BhY2UgPCAoY2h1bmtfc2l6ZSArIEFMTE9DX0NIVU5L SERSU1opKSkKICAgIDAuMTYgOiAgIDU2YmRmMjogY21wICAgICVyY3gsJXI4CiAgICAxLjkwIDog ICA1NmJkZjU6IGphICAgICA1NmJlMjAgPEFsbG9jU2V0QWxsb2MrMHhhMD4KICAgICAgICAgOiAg ICAgICAgICAgIGNodW5rID0gKEFsbG9jQ2h1bmspIChibG9jay0+ZnJlZXB0cik7CiAgICAgICAg IDoKICAgICAgICAgOiAgICAgICAgICAgIC8qIFByZXBhcmUgdG8gaW5pdGlhbGl6ZSB0aGUgY2h1 bmsgaGVhZGVyLiAqLwogICAgICAgICA6ICAgICAgICAgICAgVkFMR1JJTkRfTUFLRV9NRU1fVU5E RUZJTkVEKGNodW5rLCBBTExPQ19DSFVOS0hEUlNaKTsKICAgICAgICAgOgogICAgICAgICA6ICAg ICAgICAgICAgY2h1bmstPnNpemUgPSBjaHVua19zaXplOwogICAgMC4wMCA6ICAgNTZiZGY3OiBt b3YgICAgJXJzaSwoJXJheCkKICAgICAgICAgOiAgICAgICAgICAgIEFsbG9jU2V0QWxsb2NSZXR1 cm5DaHVuaygpOgogICAgICAgICA6ICAgICAgICAgICAgcmV0dXJuIEFsbG9jQ2h1bmtHZXRQb2lu dGVyKGNodW5rKTsKICAgMjEuMTQgOiAgIDU2YmRmYTogYWRkICAgICQweDEwLCVyYXgKICAgICAg ICAgOiAgICAgICAgICAgIEFsbG9jU2V0QWxsb2MoKToKICAgICAgICAgOgogICAgICAgICA6ICAg ICAgICAgICAgYmxvY2stPmZyZWVwdHIgKz0gKGNodW5rX3NpemUgKyBBTExPQ19DSFVOS0hEUlNa KTsKICAgIDAuMDAgOiAgIDU2YmRmZTogYWRkICAgICVyOCwweDE4KCVyZHgpCiAgICAgICAgIDog ICAgICAgICAgICBBbGxvY1NldEFsbG9jUmV0dXJuQ2h1bmsoKToKICAgICAgICAgOiAgICAgICAg ICAgIGNodW5rLT5hc2V0ID0gKHZvaWQgKikgc2V0OwogICAgMC4xNiA6ICAgNTZiZTAyOiBtb3Yg ICAgJXJkaSwtMHg4KCVyYXgpCiAgICAgICAgIDogICAgICAgICAgICBBbGxvY1NldEFsbG9jKCk6 CiAgICAgICAgIDogICAgICAgICAgICBBc3NlcnQoYmxvY2stPmZyZWVwdHIgPD0gYmxvY2stPmVu ZHB0cik7CiAgICAgICAgIDoKICAgICAgICAgOiAgICAgICAgICAgIHJldHVybiBBbGxvY1NldEFs bG9jUmV0dXJuQ2h1bmsoc2V0LCBzaXplLCBjaHVuaywgY2h1bmtfc2l6ZSk7CiAgICAgICAgIDog ICAgICAgICAgICB9CiAgICA0LjU4IDogICA1NmJlMDY6IHJldAogICAgMC4wMCA6ICAgNTZiZTA3 OiBub3B3ICAgMHgwKCVyYXgsJXJheCwxKQogICAgICAgICA6ICAgICAgICAgICAgcmV0dXJuIEFs bG9jU2V0QWxsb2NMYXJnZShzZXQsIHNpemUsIGZsYWdzKTsKICAgIDAuMDAgOiAgIDU2YmUxMDog am1wICAgIDU2YmNjMCA8QWxsb2NTZXRBbGxvY0xhcmdlPgogICAgMC4wMCA6ICAgNTZiZTE1OiBu b3BsICAgKCVyYXgpCiAgICAgICAgIDogICAgICAgICAgICByZXR1cm4gQWxsb2NTZXRBbGxvY0Zy b21OZXdCbG9jayhzZXQsIHNpemUsIGNodW5rX3NpemUpOwogICAgMC4wMCA6ICAgNTZiZTE4OiBq bXAgICAgNTZiYWUwIDxBbGxvY1NldEFsbG9jRnJvbU5ld0Jsb2NrLmNvbnN0cHJvcC4wPgogICAg MC4wMCA6ICAgNTZiZTFkOiBub3BsICAgKCVyYXgpCiAgICAgICAgIDogICAgICAgICAgICByZXR1 cm4gQWxsb2NTZXRBbGxvY0NhcnZlT2xkQW5kQWxsb2Moc2V0LCBzaXplLCBjaHVua19zaXplLAog ICAgMC4wMCA6ICAgNTZiZTIwOiBqbXAgICAgNTZiYmQwIDxBbGxvY1NldEFsbG9jQ2FydmVPbGRB bmRBbGxvYy5pc3JhLjA+Cg== --0000000000002de86005c7888411 Content-Type: text/plain; charset="US-ASCII"; name="palloc.txt" Content-Disposition: attachment; filename="palloc.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_krbp9pso1 IFBlcmNlbnQgfAlTb3VyY2UgY29kZSAmIERpc2Fzc2VtYmx5IG9mIHBvc3RncmVzIGZvciBjeWNs ZXMgKDgxIHNhbXBsZXMsIHBlcmNlbnQ6IGxvY2FsIHBlcmlvZCkKLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICA6CiAgICAgICAgIDoKICAgICAgICAg OgogICAgICAgICA6ICAgICAgICAgICAgRGlzYXNzZW1ibHkgb2Ygc2VjdGlvbiAudGV4dDoKICAg ICAgICAgOgogICAgICAgICA6ICAgICAgICAgICAgMDAwMDAwMDAwMDU3MTIyMCA8cGFsbG9jPjoK ICAgICAgICAgOiAgICAgICAgICAgIHBhbGxvYygpOgogICAgICAgICA6ICAgICAgICAgICAgTWVt b3J5Q29udGV4dFN0YXRzRGV0YWlsKFRvcE1lbW9yeUNvbnRleHQsIDEwMCwgZmFsc2UpOwogICAg ICAgICA6ICAgICAgICAgICAgfQogICAgICAgICA6CiAgICAgICAgIDogICAgICAgICAgICB2b2lk ICoKICAgICAgICAgOiAgICAgICAgICAgIHBhbGxvYyhTaXplIHNpemUpCiAgICAgICAgIDogICAg ICAgICAgICB7CiAgIDEzLjQ0IDogICA1NzEyMjA6IGVuZGJyNjQKICAgIDIuNDUgOiAgIDU3MTIy NDogbW92ICAgICVyZGksJXJzaQogICAgICAgICA6ICAgICAgICAgICAgLyogZHVwbGljYXRlcyBN ZW1vcnlDb250ZXh0QWxsb2MgdG8gYXZvaWQgaW5jcmVhc2VkIG92ZXJoZWFkICovCiAgICAgICAg IDogICAgICAgICAgICB2b2lkICAgICAgICpyZXQ7CiAgICAgICAgIDogICAgICAgICAgICBNZW1v cnlDb250ZXh0IGNvbnRleHQgPSBDdXJyZW50TWVtb3J5Q29udGV4dDsKICAgIDIuNDQgOiAgIDU3 MTIyNzogbW92ICAgIDB4MmJlOWIyKCVyaXApLCVyZGkgICAgICAgICMgODJmYmUwIDxDdXJyZW50 TWVtb3J5Q29udGV4dD4KICAgICAgICAgOgogICAgICAgICA6ICAgICAgICAgICAgQXNzZXJ0QXJn KE1lbW9yeUNvbnRleHRJc1ZhbGlkKGNvbnRleHQpKTsKICAgICAgICAgOiAgICAgICAgICAgIEFz c2VydE5vdEluQ3JpdGljYWxTZWN0aW9uKGNvbnRleHQpOwogICAgICAgICA6ICAgICAgICAgICAg Y29udGV4dC0+aXNSZXNldCA9IGZhbHNlOwogICAgICAgICA6CiAgICAgICAgIDogICAgICAgICAg ICByZXQgPSBjb250ZXh0LT5tZXRob2RzLT5hbGxvYyhjb250ZXh0LCBzaXplLCAwKTsKICAgMTEu MTEgOiAgIDU3MTIyZTogeG9yICAgICVlZHgsJWVkeAogICAgMS4yMSA6ICAgNTcxMjMwOiBtb3Yg ICAgMHgxMCglcmRpKSwlcmF4CiAgICAgICAgIDogICAgICAgICAgICBjb250ZXh0LT5pc1Jlc2V0 ID0gZmFsc2U7CiAgIDMxLjA4IDogICA1NzEyMzQ6IG1vdmIgICAkMHgwLDB4NCglcmRpKQogICAg ICAgICA6ICAgICAgICAgICAgcmV0ID0gY29udGV4dC0+bWV0aG9kcy0+YWxsb2MoY29udGV4dCwg c2l6ZSwgMCk7CiAgICAzLjY3IDogICA1NzEyMzg6IG1vdiAgICAoJXJheCksJXJheAogICAzNC41 OSA6ICAgNTcxMjNiOiBqbXAgICAgKiVyYXgK --0000000000002de86005c7888411 Content-Type: text/plain; charset="US-ASCII"; name="percent.txt" Content-Disposition: attachment; filename="percent.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_krbp9xgz2 ICAgICAyLjM4JSAgcG9zdGdyZXMgIHBvc3RncmVzICAgICAgICAgICAgWy5dIEFsbG9jU2V0QWxs b2MKICAgICAwLjM3JSAgcG9zdGdyZXMgIHBvc3RncmVzICAgICAgICAgICAgWy5dIHBmcmVlCiAg ICAgMC4zMSUgIHBvc3RncmVzICBwb3N0Z3JlcyAgICAgICAgICAgIFsuXSBwYWxsb2MKICAgICAw LjEyJSAgcG9zdGdyZXMgIHBvc3RncmVzICAgICAgICAgICAgWy5dIE1lbW9yeUNvbnRleHRBbGxv YwogICAgIDAuMTIlICBwb3N0Z3JlcyAgcG9zdGdyZXMgICAgICAgICAgICBbLl0gQWxsb2NTZXRB bGxvY0NhcnZlT2xkQW5kQWxsb2MuaXNyYS4wCiAgICAgMC4xMCUgIHBvc3RncmVzICBwb3N0Z3Jl cyAgICAgICAgICAgIFsuXSBNZW1vcnlDb250ZXh0QWxsb2NaZXJvCiAgICAgMC4xMCUgIHBvc3Rn cmVzICBwb3N0Z3JlcyAgICAgICAgICAgIFsuXSBwYWxsb2MwCiAgICAgMC4wNiUgIHBvc3RncmVz ICBwb3N0Z3JlcyAgICAgICAgICAgIFsuXSBNZW1vcnlDb250ZXh0QWxsb2NaZXJvQWxpZ25lZAog ICAgIDAuMDIlICBwb3N0Z3JlcyAgcG9zdGdyZXMgICAgICAgICAgICBbLl0gQWxsb2NTZXRBbGxv Y0xhcmdlCg== --0000000000002de86005c7888411--