Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1v4lzt-006gow-Oi for pgsql-hackers@arkaria.postgresql.org; Fri, 03 Oct 2025 20:03:22 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1v4lzq-00FDAZ-HE for pgsql-hackers@arkaria.postgresql.org; Fri, 03 Oct 2025 20:03:19 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1v4lzq-00FDAH-5y for pgsql-hackers@lists.postgresql.org; Fri, 03 Oct 2025 20:03:18 +0000 Received: from mail-pf1-x436.google.com ([2607:f8b0:4864:20::436]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1v4lzo-000FZU-1R for pgsql-hackers@lists.postgresql.org; Fri, 03 Oct 2025 20:03:18 +0000 Received: by mail-pf1-x436.google.com with SMTP id d2e1a72fcca58-781010ff051so2064478b3a.0 for ; Fri, 03 Oct 2025 13:03:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1759521793; x=1760126593; darn=lists.postgresql.org; h=in-reply-to:references:mime-version:to:from:subject:cc:message-id :date:from:to:cc:subject:date:message-id:reply-to; bh=MlPUlOBNNfAg4IHVL4HFGffUYUlv+Ph1mp6Sq/iy6C8=; b=eAvPGs/aYAaeFAFa+PQV7nJ20sRwpitAwmesjOREKWYviM+FK7IDlydQzHyzB9//6W BfWLQRhhBiUIL3C/l7vNsS19vieGXkncuyk+NcPrD06jdumCAjvB2U1IBoFzpC+NVLJo VDz1GBMUbsfdLRo1SPtp7Ygupsc+AuJvhpK77k2x1JMDORu+FhlFecpLipe6ymB1ikEu sScbMQ79+qEFmCSUZqSKHxVRgPiy8SaG1yNc/hI0uwbItuEIlhef5TtpJbPsqFZ1rwar ddhyFpThXpI2eXDtcMaiLHXLhGRGQqlOIJQV8y6PlSEVtJy3UDZIyzqBBZqzdT798GF9 64cg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759521793; x=1760126593; h=in-reply-to:references:mime-version:to:from:subject:cc:message-id :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=MlPUlOBNNfAg4IHVL4HFGffUYUlv+Ph1mp6Sq/iy6C8=; b=Y/tgL46yZrN6WiWuzW1FwfN6baaJmtjVahy0ffZH0xtYhDzjDtzh2F1fSvntNiq7ZY xtA0SkcuBKyr5/7khHFmK+F/np9E4U19CSO3zMxzFgeIMU1NNFtJPRR2XANG5ElVFtFI adMp6+LHHuYBaL7J7CZ8qdmy0DaFpRjcMDK5dRurPinzKPV3it6ds6TN8nFVGG56Y1tv 4BJPyJHRyAjpJqiyBIrCXbcTOrhYOtQTvOrL52sqkZNS4ShhI/QkKwTvEEwBfefOQyJw MMWUCLx6g69npg0PWKkyJkCJPbSgGZGtvDrwSd6Z6VaHtA+cJkD8Wbhu0iPI5uZlnxQX KHyw== X-Forwarded-Encrypted: i=1; AJvYcCV/Vn40Z8tlZ0mZxsE1GOQ7EQqUOU60CAy+deBKoBfqyesu4ZfdyvtjqsOh1w3ZeXezwuq+E9ExvU/ZAbrT@lists.postgresql.org X-Gm-Message-State: AOJu0YzR1no0FrwxiXuXNkhhOJnzu0LHyZVH3hPO9F59kG+qbqioUVyw 4nzNdFkhYvmfsbq/7zDPKmTAd6WAVQ+EIVHdnKfLRkq/IFd9gsroBQbe X-Gm-Gg: ASbGncttjziIiSXX66S8R9TjciJqzAX/U9dejCb/9hjlI+3x0gyvVbuf9qD6Xmj70dP SS3+r51cc6QVCpuoioi+T+Lof4fBCIR6hQRZh9dRFwPukpzFZ/uvomX9+H3YqE9iA7vxRjtH2nE iI8BCGQNteTMz1hsjvZbJFi08QH0KfSZkBZpjGjrq4neWY1nfBNdYA94SVBP8q/dLf/mjR22Tmo kr16xyj3P0F7GTPHGpkkWGLPTEtc2OAL0kjnSIW87Z3zlEoXaFwKHWfuF+3WyuIsMiFho5/xizT PWoe3e00nBmd1q3Vc7pVzWlYdiOXxbGglSX4DTCxQx76Iq4Ul57ZkXcROgBWW3Pn6A/Vvzml7I4 GhOdY3fyXGDMIlo0EkMh8jVPKp9U/Mk7XFpUwHR+507cuk0x0PHXphYclUTfA8QX/K9T2P3u/Hz guWCvE X-Google-Smtp-Source: AGHT+IHf4Onsgp1xNKlZ3bWrOtRKf71B6uok7W6dU7Um3UyRyHhkcYkos+ljXPyRoEm0ePfXnzJ3Hw== X-Received: by 2002:a05:6a00:2305:b0:77f:324a:6037 with SMTP id d2e1a72fcca58-78c98a4914amr5146315b3a.7.1759521792709; Fri, 03 Oct 2025 13:03:12 -0700 (PDT) Received: from localhost ([2804:14d:328a:a59c:e93a:3228:9e96:1b54]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-78b01f9cd56sm5698234b3a.2.2025.10.03.13.03.09 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 03 Oct 2025 13:03:11 -0700 (PDT) Content-Type: multipart/mixed; boundary=5209ddb3c384d15b8de4a0250135e975d77521b465dd31dd4684b4d0cf45 Date: Fri, 03 Oct 2025 17:03:08 -0300 Message-Id: Cc: "Robert Haas" , "Tom Lane" , "Tender Wang" , "Paul George" , "Andy Fan" , "PostgreSQL-development" , Subject: Re: Eager aggregation, take 3 From: "Matheus Alcantara" To: "Richard Guo" , "Matheus Alcantara" MIME-Version: 1.0 References: <87il22cj51.fsf@163.com> In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --5209ddb3c384d15b8de4a0250135e975d77521b465dd31dd4684b4d0cf45 Content-Type: multipart/alternative; boundary=05a42ba03fa07ad6319b5f1b0cd09bd88088ea20b59e99f9df21c87e6430 --05a42ba03fa07ad6319b5f1b0cd09bd88088ea20b59e99f9df21c87e6430 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Content-Type: text/plain; charset=UTF-8 On Fri Oct 3, 2025 at 12:14 AM -03, Richard Guo wrote: >> The only query that I see a considerable regression is query 23 which I >> get a 23% worst execution time. I'm attaching the EXPLAIN(ANALYZE) >> output from master and from the patched version if it's interesting. > > I tested query 23 in my local environment but didn't observe the > regression. > > -- on master > Planning Time: 1.950 ms > Execution Time: 3260.924 ms > > -- on patched > Planning Time: 2.197 ms > Execution Time: 3237.287 ms > > I ran the benchmark at scale factor 1 and executed ANALYZE beforehand. > For the build configuration, I disabled cassert. > I've disabled the cassert and executed the ANALYZE again before benchmarking and now I have similar results with a improvement on eager aggregate version: -- master Planning Time: 2.734 ms Execution Time: 5238.128 ms -- patched Planning Time: 2.578 ms Execution Time: 4732.584 ms > Comparing the plans, I noticed one key difference: in the plan you > provided (query-23.patch.explain), the frequent_ss_items CTE uses > parallel aggregation, whereas in my local environment it does not. > This leads to a different final join order between the two plans. > > However, given the highly inaccurate size and cost estimates for the > CTE Scan nodes, I'm not sure it's worth investigating further. I'm > starting to feel that trying to tune performance here, with such > inaccurate underlying estimates for CTEs, is like building on sand. > > [ ...] > >> I'm just wondering if there is anything that can be done on the planner >> to prevent this type of situation? > > I think the ideal solution is to improve our estimates for CTE > relations to make the plans for TPC-DS queries more reasonable. Of > course, for queries from other benchmarks, the issues may stem from > other plan nodes. IMHO, we really need some improvements in our cost > estimation. > Fair points, agree. The performance results look good to me. I don't have to much comments about the code although I'm still learning about the planner internals this patch seems in good shape to me. I'm just attaching a new csv with the last results after running with cassert disabled and after executing ANALYZE. It looks good to me. Thanks for working on this! -- Matheus Alcantara --05a42ba03fa07ad6319b5f1b0cd09bd88088ea20b59e99f9df21c87e6430-- --5209ddb3c384d15b8de4a0250135e975d77521b465dd31dd4684b4d0cf45 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=tpcds-eager-aggregate-times.csv Content-Type: text/csv; charset=utf-8; name=tpcds-eager-aggregate-times.csv UXVlcnksUGF0Y2hlZCBQbGFubmluZyAobXMpLFBhdGNoZWQgRXhlY3V0aW9uIChtcyksTWFzdGVy IFBsYW5uaW5nIChtcyksTWFzdGVyIEV4ZWN1dGlvbiAobXMpLFBsYW5uaW5nIERpZmYgKCUpLEV4 ZWN1dGlvbiBEaWZmICglKQpxdWVyeV8xLnNxbCwxLjc3MiwzNDgxMTEuMTI4LDEuNDQ4LDM0Nzk4 Ni42NTcsMjIuMzc1NjkwNjA3NzM0ODEsMC4wMzU3Njg5MDAxODUxNjQxNTQKcXVlcnlfMTAuc3Fs LDMuOTE2LDE3MDguMjY0LDMuNjI4LDE3MzUuODc5LDcuOTM4MjU3OTkzMzg0NzgsLTEuNTkwODM2 Njg4NTAxOTA2NQpxdWVyeV8xMS5zcWwsMS44NzQsMzkzOC41NDMsMS43MzIsMTI2MzEuMDc3LDgu MTk4NjE0MzE4NzA2NzA1LC02OC44MTg2Mjg4NDY5MzA0OApxdWVyeV8xMi5zcWwsMi40MjMsMTE4 LjAzNSwxLjkzOCwxMjAuMTA0LDI1LjAyNTc5OTc5MzYwMTY1NywtMS43MjI2NzM2ODI4MDgyMzUy CnF1ZXJ5XzEzLnNxbCwzLjcyNSwxNDQ5LjMwMiwzLjg3NSwxNDcyLjkxOCwtMy44NzA5Njc3NDE5 MzU0ODEzLC0xLjYwMzM0NzkxMjEwMzcyOApxdWVyeV8xNC5zcWwsNS41ODUsMzE0Mi42ODksNC45 MjYsMzE1My44OTQsMTMuMzc3OTk0MzE1ODc0OTQ1LC0wLjM1NTI3NTA5ODAyMTY4MTQKcXVlcnlf MTUuc3FsLDMuNzg3LDIyOS4wMzYsMTYuMTI3LDIyNi42MSwtNzYuNTE3NjQxMjIyNzk0MDcsMS4w NzA1NjE3NTgwODY1NzUKcXVlcnlfMTYuc3FsLDMuOTMzLDM0MC41ODgsMy43NDQsMzMwLjEyNCw1 LjA0ODA3NjkyMzA3NjkxMywzLjE2OTcxODA0NTM0MDUzOApxdWVyeV8xNy5zcWwsMjAuMTgzLDU4 Mi43MjksMTYuNTk4LDU4MS42NCwyMS41OTg5ODc4Mjk4NTkwMjcsMC4xODcyMjkyMTM5NDY3ODA3 NApxdWVyeV8xOC5zcWwsNi4xNDEsODMyLjc0OCw1LjU0Myw4OTUuODQ5LDEwLjc4ODM4MTc0Mjcz ODU4NiwtNy4wNDM3MDkzNzUxMjkwNjcKcXVlcnlfMTkuc3FsLDQuMzYzLDM0NS4wMTEsMy45NTEs MzQxLjcxMSwxMC40Mjc3Mzk4MTI3MDU2NTMsMC45NjU3MjgzNDkzOTQ2NjcyCnF1ZXJ5XzIuc3Fs LDEuNzc3LDEwMjkuMjg0LDIuMDk2LDEwMTMuNTk4LC0xNS4yMTk0NjU2NDg4NTQ5NjgsMS41NDc1 NTYzMjkwMzc3NTk0CnF1ZXJ5XzIwLnNxbCwxLjYwNSwxOTkuNDg0LDEuNjk2LDE5OC42NiwtNS4z NjU1NjYwMzc3MzU4NDgsMC40MTQ3NzkwMTk0MzAxODgzNgpxdWVyeV8yMS5zcWwsMi45OTMsNzYz LjQwOCwyLjkyNiw3NjAuNTA0LDIuMjg5ODE1NDQ3NzEwMTc1LDAuMzgxODUyMDM0OTY2Mjg1MDYK cXVlcnlfMjIuc3FsLDEuMDgxLDk3ODIuNzA0LDEuMDE3LDk4MTIuODc2LDYuMjkzMDE4NjgyMzk5 MjE5LC0wLjMwNzQ3MzU2ODQwMTM1ODQKcXVlcnlfMjMuc3FsLDguODU3LDQ5MzcuMTE3LDcuNzQ1 LDU0NDAuMzYxLDE0LjM1NzY1MDA5NjgzNjY1NywtOS4yNTAxOTQ5Nzc4NzAwMwpxdWVyeV8yNC5z cWwsNi40MzUsNzMuMTgxLDUuNzgzLDY4Ljg3MywxMS4yNzQ0MjUwMzg5MDcxMjcsNi4yNTQ5OTEw NzA1MjEwOTMKcXVlcnlfMjUuc3FsLDMzLjg1OSw1NjMuMTU2LDI5LjM3Nyw1NjIuMjU2LDE1LjI1 NjgzMzU3NzI4ODM2NSwwLjE2MDA2OTQzNDU2MzYxMTEKcXVlcnlfMjYuc3FsLDQuNjA1LDQ5Ni42 MzUsMy43MjUsNDYxLjkzMSwyMy42MjQxNjEwNzM4MjU1MTIsNy41MTI4MTAzNTQ3OTMyNTEKcXVl cnlfMjcuc3FsLDIuMTA4LDgwMi40MSwyLjAxMyw3OTEuNjMyLDQuNzE5MzI0MzkxNDU1NTQ5LDEu MzYxNDkxMTk3OTMwMzU0MQpxdWVyeV8yOC5zcWwsMS4yMDMsMjEyOS4wMTcsMS4xNTcsMjExNC42 OTEsMy45NzU3OTk0ODE0MTc0NjIsMC42Nzc0NTEyMjEwMDU4MTIzCnF1ZXJ5XzI5LnNxbCwyMC43 OTksNjk5LjQ1MiwxNy44NzEsNjk1Ljc3NCwxNi4zODQwODU5NDkzMDMzNDQsMC41Mjg2MTk5MjU0 MzU1NTc3CnF1ZXJ5XzMuc3FsLDEuMDc2LDMxNi44ODYsMS40NjUsMzE0LjQ4OSwtMjYuNTUyOTAx MDIzODkwNzgzLDAuNzYyMTg4ODIwNTk0Njk0NApxdWVyeV8zMC5zcWwsMi4wNjgsMjM5OTIuMzg1 LDIuMDEsMjM3MzIuMzk1LDIuODg1NTcyMTM5MzAzNDk2NSwxLjA5NTUwNjc5NTY2ODk0OTUKcXVl cnlfMzEuc3FsLDMuNDQzLDIxNzAuODI3LDMuNzEsNDk1Ni45NCwtNy4xOTY3NjU0OTg2NTIyODgs LTU2LjIwNjMwODczMDc4OTU2CnF1ZXJ5XzMyLnNxbCwxLjQ2LDM4MS44NjUsMS41NTgsMzg0Ljg4 MSwtNi4yOTAxMTU1MzI3MzQyODEsLTAuNzgzNjE4ODMyODM0MDM1MgpxdWVyeV8zMy5zcWwsNi4x NDQsNjY1LjU1OCw1LjMyOCw2ODMuMjEsMTUuMzE1MzE1MzE1MzE1MzEyLC0yLjU4MzY4NTgzNTk4 MDE1OQpxdWVyeV8zNC5zcWwsMy4wNzIsMjk0LjE4MiwyLjQ4LDI5NC42MiwyMy44NzA5Njc3NDE5 MzU0ODgsLTAuMTQ4NjY2MDc4MzM4MTk0MzQKcXVlcnlfMzUuc3FsLDMuMDU4LDE2OTYuNzU4LDMu MDY2LDE3NDEuNTQ1LC0wLjI2MDkyNjI4ODMyMzU0ODg2LC0yLjU3MTY4MjA0MDk0NjQwMwpxdWVy eV8zNi5zcWwsMS40NzIsOTUxLjc4MiwxLjU0Myw5NTcuMTMxLC00LjYwMTQyNTc5MzkwNzk2OSwt MC41NTg4NTc2Njk0MzA4MjMyCnF1ZXJ5XzM3LnNxbCwyLjg2Miw2OTIuMTg1LDMuMDYsNjk1LjEy OSwtNi40NzA1ODgyMzUyOTQxMTUsLTAuNDIzNTE4NTEyMzkxMjM1ODQKcXVlcnlfMzguc3FsLDEu NzU3LDI5MzQuMzY2LDIuMDM5LDI5NDUuNTIsLTEzLjgzMDMwODk3NDk4Nzc1MSwtMC4zNzg2NzY3 NzAxNDU4NDg1CnF1ZXJ5XzM5LnNxbCwyLjEwNiw0Mjg3LjM2NywyLjQ1OSw0MzU1LjE4NiwtMTQu MzU1NDI5MDM2MTkzNTgyLC0xLjU1NzIwMTAwMTI4OTAyNjcKcXVlcnlfNC5zcWwsNC43OCw3MzY3 Ljk0NCw0Ljc4MywyMDM1OS40MSwtMC4wNjI3MjIxNDA5MTU3NDU2MywtNjMuODEwNjIxMjMxMTY1 MzQKcXVlcnlfNDAuc3FsLDQuNTI3LDIyOS41MjksMTcuNzksMjM1LjYxOCwtNzQuNTUzMTE5NzMw MTg1NDksLTIuNTg0MjY3NzU1NDM0NjQ0CnF1ZXJ5XzQxLnNxbCwxLjA3NiwxOTExLjQ4NSwxLjM2 NCwxODk4LjgwNSwtMjEuMTE0MzY5NTAxNDY2Mjc1LDAuNjY3Nzg4NDI0ODI1MDc4NwpxdWVyeV80 Mi5zcWwsMi4xODUsMjE0LjE4NCwxLjg3NiwyMTYuMjQ4LDE2LjQ3MTIxNTM1MTgxMjM3NiwtMC45 NTQ0NTk2OTQ0MjQ5MTY0CnF1ZXJ5XzQzLnNxbCwxLjYxOCw3MTcuMzg2LDEuNjc4LDcxOS44ODYs LTMuNTc1Njg1MzM5NjkwMDk3NCwtMC4zNDcyNzcyMDc3ODAxMjA4CnF1ZXJ5XzQ0LnNxbCwxLjA5 NSw5OTkuNDc4LDEuMDIyLDEwMjAuNjYxLDcuMTQyODU3MTQyODU3MTM4LC0yLjA3NTQxOTc1MjQ5 MzcyNjYKcXVlcnlfNDUuc3FsLDQuNTAzLDE0Ny45MzgsMy45NjUsMTUwLjAyNSwxMy41Njg3MjYz NTU2MTE2MDgsLTEuMzkxMTAxNDgzMDg2MTYzOQpxdWVyeV80Ni5zcWwsMy4zODksNjcwLjI1Mywy LjkwNSw2NjkuMDgxLDE2LjY2MDkyOTQzMjAxMzc3LDAuMTc1MTY1NjM3NjQzMjc4NjcKcXVlcnlf NDcuc3FsLDIuMTA3LDM5OTMuODMxLDIuMDk2LDM5MjguOTkyLDAuNTI0ODA5MTYwMzA1MzQ5Mywx LjY1MDI3MDYwMzc1NzkwOQpxdWVyeV80OC5zcWwsMy4xOTMsMTQzMy43MDQsMy4wMjgsMTQxMy4z ODIsNS40NDkxNDEzNDc0MjQwNDMsMS40Mzc4Mjc4NDgzODA2ODQ2CnF1ZXJ5XzQ5LnNxbCw2LjAx MywxMzI4LjI2NCw1LjY0OSwxMzA1LjM5Myw2LjQ0MzYxODMzOTUyOTExOCwxLjc1MjAzOTQyNDE0 Mjc1NzUKcXVlcnlfNS5zcWwsMTIuNjI0LDEyNDguODk4LDQuMDI2LDEyNjMuMTc2LDIxMy41NjE4 NDc5ODgwNzc1MiwtMS4xMzAzMjU0NjUzMzQ5OTg2CnF1ZXJ5XzUwLnNxbCwzLjY0MiwxMzYzLjM4 OSwyLjY4OSwxMzE4LjU2OCwzNS40NDA2ODQyNjkyNDUwNywzLjM5OTIxNzkzOTQ2MTU5MTMKcXVl cnlfNTEuc3FsLDEuNTY3LDE5MzQuMzcyLDEuMDc4LDE5MDUuMzI4LDQ1LjM2MTc4MTA3NjA2Njc4 LDEuNTI0MzU2OTYxMTExMTYzCnF1ZXJ5XzUyLnNxbCwxLjMyMywyMTUuNjkzLDEuMDYzLDIxNS40 MTgsMjQuNDU5MDc4MDgwOTAzMTA4LDAuMTI3NjU4Nzg0MzE3MDA0OTIKcXVlcnlfNTMuc3FsLDEu NzQsMjk2LjQ4OCwxLjU1OCwyOTcuMjkyLDExLjY4MTY0MzEzMjIyMDc5MiwtMC4yNzA0NDExODI0 MDY1MTQwNQpxdWVyeV81NC5zcWwsMy43NDksNjg5LjQxLDMuMzMxLDY4NC45MzksMTIuNTQ4Nzg0 MTQ4OTA0MjM4LDAuNjUyNzU4ODU4ODE4MDg1MgpxdWVyeV81NS5zcWwsMS4wNzcsMjEzLjU3OSww Ljk2OSwyMTQuMjE3LDExLjE0NTUxMDgzNTkxMzMxMiwtMC4yOTc4Mjg4MzcxMTM3NzAyMwpxdWVy eV81Ni5zcWwsNy4yNTQsNjkzLjQyNyw1LjY3Miw2OTEuNjI1LDI3Ljg5MTM5NjMzMjg2MzE4OCww LjI2MDU0NTgxNjAxMzAxNTg1CnF1ZXJ5XzU3LnNxbCwyLjY0OSwxODI4LjU0MywyLjU4MSwxOTU2 LjAzNCwyLjYzNDYzNzczNzMxMTEyMiwtNi41MTc4MzE0ODk2MzY2OTQKcXVlcnlfNTguc3FsLDIu OTI5LDc2OS4zNDQsMi42MDEsNzUyLjg5NiwxMi42MTA1MzQ0MDk4NDIzNjQsMi4xODQ2MzEwNzc4 NjQ2ODQKcXVlcnlfNTkuc3FsLDEuODk5LDEyNzUuODk3LDEuNzk3LDEyODcuNDgzLDUuNjc2MTI2 ODc4MTMwMjIyLC0wLjg5OTg5NTM3NzI1OTM1MTIKcXVlcnlfNi5zcWwsMi42NDYsMTM2NDIzLjMx NCwxLjk0LDE0ODg2OC4yMzcsMzYuMzkxNzUyNTc3MzE5NTg2LC04LjM1OTY4OTkxODI3MzE1MQpx dWVyeV82MC5zcWwsNC45OTksNzIzLjY4OSwxMS42ODgsNzcyLjU1MSwtNTcuMjI5NjM3MjM0Nzcw NzEsLTYuMzI0NzYwNDM2NTI3ODI1CnF1ZXJ5XzYxLnNxbCw1LjEyNyw2LjU2LDYuMjg4LDYuNDgy LC0xOC40NjM3NDA0NTgwMTUyNzMsMS4yMDMzMzIzMDQ4NDQxNzQ2CnF1ZXJ5XzYyLnNxbCwyLjUy MiwyNzkuMDE0LDIuNDIsMjc2Ljk0MSw0LjIxNDg3NjAzMzA1Nzg0NjUsMC43NDg1MzQ4ODY0OTIw ODE4CnF1ZXJ5XzYzLnNxbCwxLjcyMiwyNzEuMTU3LDEuNDM5LDI5OS41NSwxOS42NjY0MzUwMjQz MjI0NCwtOS40Nzg1NTExNjAwNzM0NTMKcXVlcnlfNjQuc3FsLDI0Ni45NTMsOTYxLjQzMiwxMDgu NDA0LDEyMjAuNjM1LDEyNy44MDgwMTQ0NjQ0MTA5MiwtMjEuMjM1MDk0ODQ4MTczMjg2CnF1ZXJ5 XzY1LnNxbCwyLjE4NSwxNDUxLjQzMywxLjYxMywxNDU5LjY2LDM1LjQ2MTg3MjI4NzY2Mjc0LC0w LjU2MzYyNDQwNTY4MzUyMTMKcXVlcnlfNjYuc3FsLDYuMzQyLDQ2OS4zMDQsNC4zMzEsNDYxLjc3 Miw0Ni40MzI2OTQ1Mjc4MjI2NTUsMS42MzExMDc5OTI2ODkwMjg4CnF1ZXJ5XzY3LnNxbCwxLjM4 MSw2MjM5LjIzMywxLjMzMyw2Mjc1LjcyNSwzLjYwMDkwMDIyNTA1NjI2NywtMC41ODE0Nzg2MzM5 NDI2OTUKcXVlcnlfNjguc3FsLDIuNzEyLDQ0NC42NTEsMi40NjIsNDU0Ljk2LDEwLjE1NDM0NjA2 MDExMzcyOCwtMi4yNjU5MTM0ODY4OTk5NDA3CnF1ZXJ5XzY5LnNxbCwzLjY1OSw1NDkuNDAzLDMu MDY4LDU1OS44LDE5LjI2MzM2Mzc1NDg4OTE3LC0xLjg1NzI3MDQ1MzczMzQ2NDgKcXVlcnlfNy5z cWwsMi41MTIsNzQ4LjcyMiwxLjg3Nyw3NjMuOTM3LDMzLjgzMDU4MDcxMzkwNTE2NCwtMS45OTE2 NTYzODAwNDE4MTQKcXVlcnlfNzAuc3FsLDEuMzc4LDEwODIuMzQ5LDEuMjgyLDEwOTkuODksNy40 ODgyOTk1MzE5ODEyNjgsLTEuNTk0Nzk1ODQzMjIwNzAwOApxdWVyeV83MS5zcWwsMS42MTYsNjY0 LjYyNiwxLjg3OSw2OTAuMDg1LC0xMy45OTY4MDY4MTIxMzQxMDcsLTMuNjg5MjU1NjcxNDAyODA2 NApxdWVyeV83Mi5zcWwsMTcuNDIzLDI0MjUuNDQxLDE2LjkwNSwyNDMxLjUwNSwzLjA2NDE4MjE5 NDYxNjk2LC0wLjI0OTM5Mjg2NTczNTQzMTU3CnF1ZXJ5XzczLnNxbCwxLjUzMiwyNDAuNzIxLDEu NDkxLDI0OC43MjQsMi43NDk4MzIzMjcyOTcxMTEsLTMuMjE3NjIyNzQ2NDk4MTIwNgpxdWVyeV83 NC5zcWwsMi40NjEsMjYwNi4wNjUsMS42NzksMjY5NS42MzksNDYuNTc1MzQyNDY1NzUzNDEsLTMu MzIyOTIyNjkxMDU3NjcKcXVlcnlfNzUuc3FsLDUuNzYzLDIxNTIuNTU5LDUuMzksMjI1Mi41ODYs Ni45MjAyMjI2MzQ1MDgzNTMsLTQuNDQwNTQwNzgyOTA0NjA4CnF1ZXJ5Xzc2LnNxbCwxLjc3LDI2 MC4wMTUsMS44MzIsMjczLjE2OCwtMy4zODQyNzk0NzU5ODI1MzYsLTQuODE0OTg1NjQ5ODU2NTA2 CnF1ZXJ5Xzc3LnNxbCw3LjE4OSw1MDIuODIzLDQuNTM5LDUwNC43OTgsNTguMzgyOTAzNzIzMjg3 MDg2LC0wLjM5MTI0NTYwNzE1Mzc1NzEKcXVlcnlfNzguc3FsLDQuNjY3LDM0MDQuMjkzLDMuMDc1 LDM1MjYuMjg4LDUxLjc3MjM1NzcyMzU3NzIyLC0zLjQ1OTU4Njk2NTEwMzI0NDMKcXVlcnlfNzku c3FsLDIuNTE4LDQ0MS42NzgsMS43NTcsNDk3Ljc1Myw0My4zMTI0NjQ0MjgwMDIyNywtMTEuMjY1 NjI3NzMxMDIzMjE2CnF1ZXJ5Xzguc3FsLDIuNjE2LDExMy42LDEuNzMxLDExOC4xNDEsNTEuMTI2 NTE2NDY0NDcxNDEsLTMuODQzNzEyMTc0NDM1NjQxNQpxdWVyeV84MC5zcWwsOS42MDcsNzc3LjU2 OSw3Ljk2NSw3OTQuNjE5LDIwLjYxNTE5MTQ2MjY0OTA4MywtMi4xNDU2ODIzOTYyMTc1NjcKcXVl cnlfODEuc3FsLDEuNzQ0LDEwNDczNy44MzEsMS41MzksMTAzOTk5Ljg2MSwxMy4zMjAzMzc4ODE3 NDEzOTUsMC43MDk1ODc0ODY4NTI1MDc2CnF1ZXJ5XzgyLnNxbCwxLjk4LDkwNC42ODMsMS45NTYs OTAzLjA1MywxLjIyNjk5Mzg2NTAzMDY3NiwwLjE4MDQ5ODgxOTAwNjE5Mjk0CnF1ZXJ5XzgzLnNx bCwyLjc4LDE1OS43MTksMi41NzIsMTU1LjM1Niw4LjA4NzA5MTc1NzM4NzIzNywyLjgwODM4ODQ3 NTUwMTQyOQpxdWVyeV84NC5zcWwsMy4zMTEsMTY0LjgzNSwzLjI0MywxNjIuMzQ4LDIuMDk2ODIz OTI4NDYxMzAzLDEuNTMxODk0NDQ4OTYxNDg2NwpxdWVyeV84NS5zcWwsMTEuNjM1LDYwNy40NzUs OS41NDcsNjAzLjQ5OCwyMS44NzA3NDQ3MzY1NjY0NSwwLjY1ODk5MTQxMzM5MzI0NjUKcXVlcnlf ODYuc3FsLDEuMDM4LDQ0NC41MTgsMC45NDgsNDM1LjE1Niw5LjQ5MzY3MDg4NjA3NTk1OSwyLjE1 MTQxMjM2NzA1OTE2MgpxdWVyeV84Ny5zcWwsMi41MDksMzAzMy4xNjksMS44NCwzMDIyLjcwOSwz Ni4zNTg2OTU2NTIxNzM5LDAuMzQ2MDQ3MjA0Njc2MzM2MjYKcXVlcnlfODguc3FsLDQuNDM5LDE4 ODcuMzM2LDQuMDU1LDE4ODIuNzY1LDkuNDY5NzkwMzgyMjQ0MTUyLDAuMjQyNzgxMjI4NjcxNjU2 NApxdWVyeV84OS5zcWwsMS41NzgsNDQ3LjA0NywxLjQyOSw0NDcuOTMsMTAuNDI2ODcxOTM4NDE4 NDc2LC0wLjE5NzEyOTAxNTY5NDQxMjM1CnF1ZXJ5Xzkuc3FsLDAuOTk5LDIzNzcuNjkyLDEuMDYs MjM1OS44NCwtNS43NTQ3MTY5ODExMzIwODEsMC43NTY0OTE5NjU1NTY5ODExCnF1ZXJ5XzkwLnNx bCwxLjQ4NCwyNDMuMDE5LDEuNTIxLDI0MC44NzUsLTIuNDMyNjEwMTI0OTE3ODEyLDAuODkwMDg4 MjIwMDMxMTM4NwpxdWVyeV85MS5zcWwsNC41MzksMjExLjg5OCwzLjQ4NCwyMDMuMDMyLDMwLjI4 MTI4NTg3ODMwMDc5Niw0LjM2Njc5OTMyMjI3NDMxNApxdWVyeV85Mi5zcWwsMS4xODUsNzYuNDgz LDEuMTQ5LDc3LjA5NywzLjEzMzE1OTI2ODkyOTUwNjIsLTAuNzk2Mzk5MzQxMDg5NzgzMgpxdWVy eV85My5zcWwsMS40MjcsMy4zMzcsMS4yMzYsMy4wNywxNS40NTMwNzQ0MzM2NTY5NjQsOC42OTcw Njg0MDM5MDg4MDcKcXVlcnlfOTQuc3FsLDIuMTEyLDI2NS4wMjksMi4zMzgsMjU5Ljk1NSwtOS42 NjYzODE1MjI2Njg5NDYsMS45NTE4NzYyODYyODAzMjI3CnF1ZXJ5Xzk1LnNxbCwyLjAyLDk5NTUu MDE5LDEuOTU5LDk4ODAuOTM3LDMuMTEzODMzNTg4NTY1NTkxNCwwLjc0OTc0NjcwOTI0NDI3ODYK cXVlcnlfOTYuc3FsLDEuMjk1LDIzMS43MDYsMS4wOTIsMjI2LjAyMSwxOC41ODk3NDM1ODk3NDM1 NzMsMi41MTUyNTMwMDc0NjM5MDk1CnF1ZXJ5Xzk3LnNxbCwxLjIwNCwxMDMyLjQxOSwxLjExLDEw MzMuODk1LDguNDY4NDY4NDY4NDY4NDU1LC0wLjE0Mjc2MTExMjEwNTE4MzM2CnF1ZXJ5Xzk4LnNx bCwxLjQ3MiwzNzQuNzEyLDEuMzQxLDM2Ni4xMjIsOS43Njg4MjkyMzE5MTY0ODEsMi4zNDYyMTI0 NjQ2OTc1NTMKcXVlcnlfOTkuc3FsLDEuNTA5LDU4NS41NDcsMS41NzgsNTg3LjY5MywtNC4zNzI2 MjM1NzQxNDQ0OTgsLTAuMzY1MTU2NjM3OTA0NDc3Cg== --5209ddb3c384d15b8de4a0250135e975d77521b465dd31dd4684b4d0cf45--