Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1gsX4x-0004II-6g for pgsql-hackers@arkaria.postgresql.org; Sat, 09 Feb 2019 18:10:15 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1gsX4v-0002YF-73 for pgsql-hackers@arkaria.postgresql.org; Sat, 09 Feb 2019 18:10:13 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1gsX4u-0002Y2-O9 for pgsql-hackers@lists.postgresql.org; Sat, 09 Feb 2019 18:10:13 +0000 Received: from mail-wm1-x344.google.com ([2a00:1450:4864:20::344]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1gsX4m-0003yS-VE for pgsql-hackers@lists.postgresql.org; Sat, 09 Feb 2019 18:10:11 +0000 Received: by mail-wm1-x344.google.com with SMTP id f16so9125794wmh.4 for ; Sat, 09 Feb 2019 10:10:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=2ndquadrant-com.20150623.gappssmtp.com; s=20150623; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language; bh=ahHSlWPYWT3qc4OGvWlPUOxQpqjARsEULgViWVNR5AI=; b=1DT6PSkkomwtgRURsZ/Ji8WFdrEd2DTo1A7Vt00m1vcBphlJzMoWU1mqpHLtFZ3xNk Q1wzrX+DVr2hEtTktbaOqzqLUjBba+TZZf4C/3JxP1Ji3dhkcDZeRMGOE8KBqF+BA1UJ 3pBc52NfiRZNwyjoMs+vZEirXHdotYb0EEPv20GL7AgIFQmrEw+qHpd/sPB0wfrP9V1w vxTuqpPOdWZGK5GZFlPH6IivdiyQuNhGkOfqN8SvdYdG9kAX19t8OtZetUsExWnUD4W9 MuFUDZkSnqZm14Se7pNSYd7NmhsuoM3dL61d8xL212/FgkkiQ4iumrcuYQqN0+0brnnb ZQbw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language; bh=ahHSlWPYWT3qc4OGvWlPUOxQpqjARsEULgViWVNR5AI=; b=Sf71UEd9d3ax4bpFkEW2HJB2ZsFaErRoZ0fmtYuzPqBR5Af0OnkEx86QtFwm27r3mJ wHyBxpQyvVvKTAo5bRdLM1YJGa1Vrew+J6UjutDyYaOCSA5jpUd+HehMFTpTAyV4tOU9 GEOKOBBB5nlNLwW+N+BVljxn/pIMIFurpV6kmYKnriC5VzAfE8iVF3yZmpsuObCqe8Pl OUBIAp+x0I14P/a9R4Nk8A47CZcit0FH3b4XyRKDu5bI2wKns8wHkmaYQYd9Yzdh1H1j H/TLEhJg0pn8JL/s5ECN7HMQOR9pU+a8bIKkwYbnZY3Y5Y6C1/XnebyAdwp2t2fiVuRQ lNZQ== X-Gm-Message-State: AHQUAuY62ZiZtJA8VlZPuhqy6SjCwjrzixuDCn03bzKhAAl41P6/+jXS 0C6PTmfqHOg13wTAIhsaNtIr6Q== X-Google-Smtp-Source: AHgI3Iax6GrdIz03OSLUchpvJDEgdvMnb2xyv4jIOzS6vDjpo2MvOcp3+zp5YwKwlumfyQhzr+ePLw== X-Received: by 2002:a1c:541a:: with SMTP id i26mr3565439wmb.128.1549735803031; Sat, 09 Feb 2019 10:10:03 -0800 (PST) Received: from [10.137.0.17] (ip-86-49-245-195.net.upcbroadband.cz. [86.49.245.195]) by smtp.gmail.com with ESMTPSA id g10sm8802975wrq.81.2019.02.09.10.10.01 (version=TLS1_3 cipher=AEAD-AES128-GCM-SHA256 bits=128/128); Sat, 09 Feb 2019 10:10:01 -0800 (PST) Subject: Re: Protect syscache from bloating with negative cache entries To: Kyotaro HORIGUCHI , alvherre@2ndquadrant.com Cc: bruce@momjian.us, andres@anarazel.de, robertmhaas@gmail.com, tgl@sss.pgh.pa.us, ideriha.takeshi@jp.fujitsu.com, pgsql-hackers@lists.postgresql.org, tsunakawa.takay@jp.fujitsu.com, michael.paquier@gmail.com, david@pgmasters.net, craig@2ndquadrant.com References: <0d3806bf-5087-a75f-3592-ee1d508a79db@2ndquadrant.com> <20190205220526.GA1442@alvherre.pgsql> <20190207.152418.139132570.horiguchi.kyotaro@lab.ntt.co.jp> <20190207.211845.263152487.horiguchi.kyotaro@lab.ntt.co.jp> From: Tomas Vondra Message-ID: <74386116-0bc5-84f2-e614-0cff19aca2de@2ndquadrant.com> Date: Sat, 9 Feb 2019 19:09:59 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.4.0 MIME-Version: 1.0 In-Reply-To: <20190207.211845.263152487.horiguchi.kyotaro@lab.ntt.co.jp> Content-Type: multipart/mixed; boundary="------------899F03D327DFA3C6D941C629" Content-Language: en-US List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk This is a multi-part message in MIME format. --------------899F03D327DFA3C6D941C629 Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit On 2/7/19 1:18 PM, Kyotaro HORIGUCHI wrote: > At Thu, 07 Feb 2019 15:24:18 +0900 (Tokyo Standard Time), Kyotaro HORIGUCHI wrote in <20190207.152418.139132570.horiguchi.kyotaro@lab.ntt.co.jp> >> I'm going to retake numbers with search-only queries. > > Yeah, I was stupid. > > I made a rerun of benchmark using "-S -T 30" on the server build > with no assertion and -O2. The numbers are the best of three > successive attempts. The patched version is running with > cache_target_memory = 0, cache_prune_min_age = 600 and > cache_entry_limit = 0 but pruning doesn't happen by the workload. > > master: 13393 tps > v12 : 12625 tps (-6%) > > Significant degradation is found. > > Recuded frequency of dlist_move_tail by taking 1ms interval > between two succesive updates on the same entry let the > degradation dissapear. > > patched : 13720 tps (+2%) > > I think there's still no need of such frequency. It is 100ms in > the attched patch. > > # I'm not sure the name LRU_IGNORANCE_INTERVAL makes sens.. > Hi, I've done a bunch of benchmarks on v13, and I don't see any serious regression either. Each test creates a number of tables (100, 1k, 10k, 100k and 1M) and then runs SELECT queries on them. The tables are accessed randomly - with either uniform or exponential distribution. For each combination there are 5 runs, 60 seconds each (see the attached shell scripts, it should be pretty obvious). I've done the tests on two different machines - small one (i5 with 8GB of RAM) and large one (e5-2620v4 with 64GB RAM), but the behavior is almost exactly the same (with the exception of 1M tables, which does not fit into RAM on the smaller one). On the xeon, the results (throughput compared to master) look like this: uniform 100 1000 10000 100000 1000000 ------------------------------------------------------------ v13 105.04% 100.28% 102.96% 102.11% 101.54% v13 (nodata) 97.05% 98.30% 97.42% 96.60% 107.55% exponential 100 1000 10000 100000 1000000 ------------------------------------------------------------ v13 100.04% 103.48% 101.70% 98.56% 103.20% v13 (nodata) 97.12% 98.43% 98.86% 98.48% 104.94% The "nodata" case means the tables were empty (so no files created), while in the other case each table contained 1 row. Per the results it's mostly break even, and in some cases there is actually a measurable improvement. That being said, the question is whether the patch actually reduces memory usage in a useful way - that's not something this benchmark validates. I plan to modify the tests to make pgbench script time-dependent (i.e. to pick a subset of tables depending on time). A couple of things I've happened to notice during a quick review: 1) The sgml docs in 0002 talk about "syscache_memory_target" and "syscache_prune_min_age", but those options were renamed to just "cache_memory_target" and "cache_prune_min_age". 2) "cache_entry_limit" is not mentioned in sgml docs at all, and it's defined three times in guc.c for some reason. 3) I don't see why to define PRUNE_BY_AGE and PRUNE_BY_NUMBER, instead of just using two bool variables prune_by_age and prune_by_number doing the same thing. 4) I'm not entirely sure about using stmtStartTimestamp. Doesn't that pretty much mean long-running statements will set the lastaccess to very old timestamp? Also, it means that long-running statements (like a PL function accessing a bunch of tables) won't do any eviction at all, no? AFAICS we'll set the timestamp only once, at the very beginning. I wonder whether using some other timestamp source (like a timestamp updated regularly from a timer, or something like that). 5) There are two fread() calls in 0003 triggering a compiler warning about unused return value. regards -- Tomas Vondra http://www.2ndQuadrant.com PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services --------------899F03D327DFA3C6D941C629 Content-Type: application/x-shellscript; name="run-data.sh" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="run-data.sh" IyEvYmluL2Jhc2gKCkRVUkFUSU9OX1dBUk1VUD0xMjAKRFVSQVRJT05fVEVTVD02MApSVU5T PTUKCmZvciBuIGluIDEwMCAxMDAwIDEwMDAwIDEwMDAwMCAxMDAwMDAwOyBkbwoKCWRyb3Bk YiAtLWlmLWV4aXN0cyB0ZXN0CgljcmVhdGVkYiB0ZXN0CgoJZWNobyAnQkVHSU47JyA+IGNy ZWF0ZS4kbi5zcWwKCglmb3IgaSBpbiBgc2VxIDEgJG5gOyBkbwoJCWVjaG8gIkNSRUFURSBU QUJMRSB0XyRpIChhIElOVCk7IiA+PiBjcmVhdGUuJG4uc3FsCgkJZWNobyAiSU5TRVJUIElO VE8gdF8kaSBWQUxVRVMgKDEpOyIgPj4gY3JlYXRlLiRuLnNxbAoKCQl4PSQoKGkgJSAxMDAw MCkpCgkJaWYgWyAiJHgiID09ICIwIiBdOyB0aGVuCgkJCWVjaG8gIkNPTU1JVDsiID4+IGNy ZWF0ZS4kbi5zcWwKCQkJZWNobyAiQkVHSU47IiA+PiBjcmVhdGUuJG4uc3FsCgkJZmkKCWRv bmUKCgllY2hvICdDT01NSVQ7JyA+PiBjcmVhdGUuJG4uc3FsCgoJcHNxbCB0ZXN0IDwgY3Jl YXRlLiRuLnNxbCA+IGNyZWF0ZS4kbi5sb2cgMj4mMQoKCWlmIFsgIiQ/IiAhPSAiMCIgXTsg dGhlbgoJCWVjaG8gImZhaWxlZCAkbiIKCQljb250aW51ZQoJZmkKCglwc3FsIHRlc3QgLWMg InZhY3V1bSBhbmFseXplIiA+IHZhY3V1bS4kbi5sb2cgMj4mMQoJcHNxbCB0ZXN0IC1jICJj aGVja3BvaW50IiA+IGNoZWNrcG9pbnQuJG4ubG9nIDI+JjEKCgllY2hvICJcc2V0IHggcmFu ZG9tKDEsJG4pIiA+IHNlbGVjdC4kbi5zcWwKCWVjaG8gIlNFTEVDVCAxIEZST00gdF86eCIg Pj4gc2VsZWN0LiRuLnNxbAoKCSMgV0FSTVVQCgoJcGdiZW5jaCAtbiAtVCAkRFVSQVRJT05f V0FSTVVQIC1mIHNlbGVjdC4kbi5zcWwgdGVzdCA+IHBnYmVuY2guJG4ud2FybXVwLmxvZyAy PiYxCgoJaWYgWyAiJD8iICE9ICIwIiBdOyB0aGVuCgkJZWNobyAiZmFpbGVkICRuL3dhcm11 cCIKCQljb250aW51ZQoJZmkKCgkjIFVOSUZPUk0gQUNDRVNTCgoJZm9yIHIgaW4gYHNlcSAx ICRSVU5TYDsgZG8KCQlwZ2JlbmNoIC1uIC1UICREVVJBVElPTl9URVNUIC1mIHNlbGVjdC4k bi5zcWwgdGVzdCA+IHBnYmVuY2gudW5pZm9ybS4kbi4kci5sb2cgMj4mMQoKCQlpZiBbICIk PyIgIT0gIjAiIF07IHRoZW4KCQkJZWNobyAiZmFpbGVkICRuLyRyIgoJCQljb250aW51ZQoJ CWZpCgoJCXQ9YGdyZXAgZXhjbHVkaW5nIHBnYmVuY2gudW5pZm9ybS4kbi4kci5sb2cgfCBh d2sgJ3twcmludCAkM30nYAoJCWVjaG8gdW5pZm9ybSAkbiAkciAkdAoJZG9uZQoKICAgICAg ICBlY2hvICJcc2V0IHggcmFuZG9tX2V4cG9uZW50aWFsKDEsJG4sMTAuMCkiID4gc2VsZWN0 LmV4cC4kbi5zcWwKICAgICAgICBlY2hvICJTRUxFQ1QgMSBGUk9NIHRfOngiID4+IHNlbGVj dC5leHAuJG4uc3FsCgoJIyBFWFBPTkVOVElBTCBBQ0NFU1MKCiAgICAgICAgZm9yIHIgaW4g YHNlcSAxICRSVU5TYDsgZG8KICAgICAgICAgICAgICAgIHBnYmVuY2ggLW4gLVQgJERVUkFU SU9OX1RFU1QgLWYgc2VsZWN0LmV4cC4kbi5zcWwgdGVzdCA+IHBnYmVuY2guZXhwLiRuLiRy LmxvZyAyPiYxCgogICAgICAgICAgICAgICAgaWYgWyAiJD8iICE9ICIwIiBdOyB0aGVuCiAg ICAgICAgICAgICAgICAgICAgICAgIGVjaG8gImZhaWxlZCAkbi8kciIKICAgICAgICAgICAg ICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgIGZpCgogICAgICAgICAgICAg ICAgdD1gZ3JlcCBleGNsdWRpbmcgcGdiZW5jaC5leHAuJG4uJHIubG9nIHwgYXdrICd7cHJp bnQgJDN9J2AKICAgICAgICAgICAgICAgIGVjaG8gZXhwb25lbnRpYWwgJG4gJHIgJHQKICAg ICAgICBkb25lCgpkb25lCg== --------------899F03D327DFA3C6D941C629 Content-Type: application/x-shellscript; name="run-nodata.sh" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="run-nodata.sh" IyEvYmluL2Jhc2gKCkRVUkFUSU9OX1dBUk1VUD0xMjAKRFVSQVRJT05fVEVTVD02MApSVU5T PTUKCmZvciBuIGluIDEwMCAxMDAwIDEwMDAwIDEwMDAwMCAxMDAwMDAwOyBkbwoKCWRyb3Bk YiAtLWlmLWV4aXN0cyB0ZXN0CgljcmVhdGVkYiB0ZXN0CgoJZWNobyAnQkVHSU47JyA+IGNy ZWF0ZS4kbi5zcWwKCglmb3IgaSBpbiBgc2VxIDEgJG5gOyBkbwoJCWVjaG8gIkNSRUFURSBU QUJMRSB0XyRpIChhIElOVCk7IiA+PiBjcmVhdGUuJG4uc3FsCgoJCXg9JCgoaSAlIDEwMDAw KSkKCQlpZiBbICIkeCIgPT0gIjAiIF07IHRoZW4KCQkJZWNobyAiQ09NTUlUOyIgPj4gY3Jl YXRlLiRuLnNxbAoJCQllY2hvICJCRUdJTjsiID4+IGNyZWF0ZS4kbi5zcWwKCQlmaQoJZG9u ZQoKCWVjaG8gJ0NPTU1JVDsnID4+IGNyZWF0ZS4kbi5zcWwKCglwc3FsIHRlc3QgPCBjcmVh dGUuJG4uc3FsID4gY3JlYXRlLiRuLmxvZyAyPiYxCgoJaWYgWyAiJD8iICE9ICIwIiBdOyB0 aGVuCgkJZWNobyAiZmFpbGVkICRuIgoJCWNvbnRpbnVlCglmaQoKCXBzcWwgdGVzdCAtYyAi dmFjdXVtIGFuYWx5emUiID4gdmFjdXVtLiRuLmxvZyAyPiYxCglwc3FsIHRlc3QgLWMgImNo ZWNrcG9pbnQiID4gY2hlY2twb2ludC4kbi5sb2cgMj4mMQoKCWVjaG8gIlxzZXQgeCByYW5k b20oMSwkbikiID4gc2VsZWN0LiRuLnNxbAoJZWNobyAiU0VMRUNUIDEgRlJPTSB0Xzp4IiA+ PiBzZWxlY3QuJG4uc3FsCgoJIyBXQVJNVVAKCglwZ2JlbmNoIC1uIC1UICREVVJBVElPTl9X QVJNVVAgLWYgc2VsZWN0LiRuLnNxbCB0ZXN0ID4gcGdiZW5jaC4kbi53YXJtdXAubG9nIDI+ JjEKCglpZiBbICIkPyIgIT0gIjAiIF07IHRoZW4KCQllY2hvICJmYWlsZWQgJG4vd2FybXVw IgoJCWNvbnRpbnVlCglmaQoKCSMgVU5JRk9STSBBQ0NFU1MKCglmb3IgciBpbiBgc2VxIDEg JFJVTlNgOyBkbwoJCXBnYmVuY2ggLW4gLVQgJERVUkFUSU9OX1RFU1QgLWYgc2VsZWN0LiRu LnNxbCB0ZXN0ID4gcGdiZW5jaC51bmlmb3JtLiRuLiRyLmxvZyAyPiYxCgoJCWlmIFsgIiQ/ IiAhPSAiMCIgXTsgdGhlbgoJCQllY2hvICJmYWlsZWQgJG4vJHIiCgkJCWNvbnRpbnVlCgkJ ZmkKCgkJdD1gZ3JlcCBleGNsdWRpbmcgcGdiZW5jaC51bmlmb3JtLiRuLiRyLmxvZyB8IGF3 ayAne3ByaW50ICQzfSdgCgkJZWNobyB1bmlmb3JtICRuICRyICR0Cglkb25lCgogICAgICAg IGVjaG8gIlxzZXQgeCByYW5kb21fZXhwb25lbnRpYWwoMSwkbiwxMC4wKSIgPiBzZWxlY3Qu ZXhwLiRuLnNxbAogICAgICAgIGVjaG8gIlNFTEVDVCAxIEZST00gdF86eCIgPj4gc2VsZWN0 LmV4cC4kbi5zcWwKCgkjIEVYUE9ORU5USUFMIEFDQ0VTUwoKICAgICAgICBmb3IgciBpbiBg c2VxIDEgJFJVTlNgOyBkbwogICAgICAgICAgICAgICAgcGdiZW5jaCAtbiAtVCAkRFVSQVRJ T05fVEVTVCAtZiBzZWxlY3QuZXhwLiRuLnNxbCB0ZXN0ID4gcGdiZW5jaC5leHAuJG4uJHIu bG9nIDI+JjEKCiAgICAgICAgICAgICAgICBpZiBbICIkPyIgIT0gIjAiIF07IHRoZW4KICAg ICAgICAgICAgICAgICAgICAgICAgZWNobyAiZmFpbGVkICRuLyRyIgogICAgICAgICAgICAg ICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgZmkKCiAgICAgICAgICAgICAg ICB0PWBncmVwIGV4Y2x1ZGluZyBwZ2JlbmNoLmV4cC4kbi4kci5sb2cgfCBhd2sgJ3twcmlu dCAkM30nYAogICAgICAgICAgICAgICAgZWNobyBleHBvbmVudGlhbCAkbiAkciAkdAogICAg ICAgIGRvbmUKCmRvbmUK --------------899F03D327DFA3C6D941C629 Content-Type: application/vnd.oasis.opendocument.spreadsheet; name="syscache.ods" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="syscache.ods" UEsDBBQAAAgAABeJSU6FbDmKLgAAAC4AAAAIAAAAbWltZXR5cGVhcHBsaWNhdGlvbi92bmQu b2FzaXMub3BlbmRvY3VtZW50LnNwcmVhZHNoZWV0UEsDBBQAAAgAABeJSU7q5QhArw8AAK8P AAAYAAAAVGh1bWJuYWlscy90aHVtYm5haWwucG5niVBORw0KGgoAAAANSUhEUgAAANcAAAEA CAMAAAAX7xOkAAAAZlBMVEUFBQULCwsTExMbGxsiIiIsLCwzMzM7OztERERMTExTU1NbW1tj Y2Nra2tzc3N7e3uDg4OLi4uTk5Obm5ujo6Orq6uzs7O9vb3Dw8PMzMzT09Pb29vj4+Pr6+vy 8vL+/v4AAAD///8E6FkIAAAPBElEQVR42u2ciWLbuA5Fk3iRxX0TdxL//5cPlNuZZnGTtk5n po+KWTuNRPEIFHAhC3qAX10C/BuXh1/uIf6hXB+3V1o9+IuA7SLvD2IvDeRlA3dRYMVvtZda bT+mizumxd8bq5jHFs7lqT6VU3iqv9VeQG09dM6Pnev7G+yxGQYHfwIiTr/5/KK2HTpTh07t Z3A5Ao/pABd9+L3nlzpdPCHHOtq9qap4EPFEVljosS/qt9orxVggNdjbnZceY+wtdeijld97 fs349Z+KX3+gvSrobbz7GxG5MDDrL3gNkPvhdfru9uqhtgip+oqgOXQI40OKkEusGCtzwf8F dMUvNi451dBarCeFKzQIpYaaOnbwHDx07CG0UNLefc2poLMoYzfdLTXVHjNofnd7Hc0pn+2p PshF2UXiB3EymjDFL+wYHh3XcWX0BVcfwXRdySWdykG4szq2B5oexBNFufVsJ2eN60hWH+XJ qotY7Ek8lUUt6cAXIc6ZOCnO/p5cV3ulR3rx6cGN8LheHCBKU2K5EMJVO5RDQy5Clpf2euyG EVsO6QRLIAbO4aHBQyP2xYryRJcmnhrqFU3PoT+pFU4b7tM+ZUdwZeI0Pen726shT6X00h+S YEyWp/zUlaA6B64HV2WGKnO2L7kiZasrxzi4BEd1N7g6cS+4zNpsO62mPmYmV50PmsApHLIv h7Kt2wVW95gv6v72go2ozEGER0VL49R32jdbGc12w49CGh+pY/qFMLTUaBUrG5vmLqgD0vGl Q1TPJ6ykm3W43hPOxcpJCBp49lR02oKqxKuo2UY381n+sD/2z3Tf9fBRP99/dfFfPzT86S22 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 4ti9txGu9XpfHpIjxz+7OhBOgcZYz2rQayToifnP3T/PLG6Y9wtN47h0Gb0yUrx+fE4h7tT2 0oOkYXMqkayEM0p+dyZSS61Qo0xDZ94hcuuUw+32++c3LQdX9Xu9HhkDkJsCZRTQQnAomGQ3 r3+q3qEUuw2pceXaH7QAusr6Wh6NRznsBwBFhPZ5PHunqfQ9vTG6z3pjY0p0Js/GjzoOnIVf 9AacCsgzH+UVo5ijdgGqCClwXVKZkopvqLloZT9hLy1EH3Nhi5mflSFCDfFuVHo9pfg2TmE8 oxRuwwUeft26+P4JpvDvUrI6rCp6pNyOSG5kee3nk76p9v7b8Sv86PD/VL3R/1AumFyTa3JN rsk1uSbX5Jpck2tyTa7JNbkm1+SaXJNrck2uyTW5JtfkmlyTa3JNrsk1uSbX5Jpck2tyTa7J Nbkm1+SaXJNrck2uyTW5JtfkmlyTa3JNrsk1uSbX5Jpck2tyTa7JNbkm1+SaXJNrck2uyTW5 JtfkmlyTa3JNrsk1uSbX5Jpck2tyTa7JNbkm1+SaXJNrck2uyTW5JtfkmlyTa3JNrsk1uSbX 5Jpck2tyTa7JNbkm1+SaXJNrck2uyTW5/vXL/wAm90HTSrX5UQAAAABJRU5ErkJgglBLAwQU AAAIAAAXiUlOAAAAAAAAAAAAAAAAGgAAAENvbmZpZ3VyYXRpb25zMi9zdGF0dXNiYXIvUEsD BBQAAAgAABeJSU4AAAAAAAAAAAAAAAAaAAAAQ29uZmlndXJhdGlvbnMyL3BvcHVwbWVudS9Q SwMEFAAACAAAF4lJTgAAAAAAAAAAAAAAABwAAABDb25maWd1cmF0aW9uczIvYWNjZWxlcmF0 b3IvUEsDBBQAAAgAABeJSU4AAAAAAAAAAAAAAAAcAAAAQ29uZmlndXJhdGlvbnMyL3Byb2dy ZXNzYmFyL1BLAwQUAAAIAAAXiUlOAAAAAAAAAAAAAAAAGAAAAENvbmZpZ3VyYXRpb25zMi9t ZW51YmFyL1BLAwQUAAAIAAAXiUlOAAAAAAAAAAAAAAAAGgAAAENvbmZpZ3VyYXRpb25zMi90 b29scGFuZWwvUEsDBBQAAAgAABeJSU4AAAAAAAAAAAAAAAAYAAAAQ29uZmlndXJhdGlvbnMy L3Rvb2xiYXIvUEsDBBQAAAgAABeJSU4AAAAAAAAAAAAAAAAfAAAAQ29uZmlndXJhdGlvbnMy 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 --------------899F03D327DFA3C6D941C629--