Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1brdkS-0001HA-6b for pgsql-hackers@arkaria.postgresql.org; Wed, 05 Oct 2016 04:24:04 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84_2) (envelope-from ) id 1brdkQ-0006uT-GU for pgsql-hackers@arkaria.postgresql.org; Wed, 05 Oct 2016 04:24:02 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1brdj1-0005P8-N7 for pgsql-hackers@postgresql.org; Wed, 05 Oct 2016 04:22:35 +0000 Received: from mail-wm0-x22d.google.com ([2a00:1450:400c:c09::22d]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84_2) (envelope-from ) id 1brdir-0005oQ-Da for pgsql-hackers@postgresql.org; Wed, 05 Oct 2016 04:22:32 +0000 Received: by mail-wm0-x22d.google.com with SMTP id b201so183420668wmb.0 for ; Tue, 04 Oct 2016 21:22:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=2ndquadrant-com.20150623.gappssmtp.com; s=20150623; h=subject:to:references:cc:from:message-id:date:user-agent :mime-version:in-reply-to; bh=bpFrOYGnO6JZt8G3t36aQYB7Ox/qvw3pT8NWPm5I3eE=; b=RYs64wXyFBIfgqG5lJ46E6imjj6pJ+3ICX2JND4uWxiXJuKZu+5Eg9AezixhfX4F2g e++cvhbRttosyOOJhok7BVf91fIdVCEgX2n06EHtSgv04tqJzbf38aAilWWFRx1zSKX3 B8ckUqcRI7cNTZysHGpZ2R3eHEpcIsnyOzHBH2mPg9yCtQCeYs4agO/ImsZMEUhcuKr/ vYdTDDBfTU+dXGFTgzIvz0LjUfDF0XK0AtueNJwR5zu6yoVBfu0RdPyl7VfipoaVXIsc nnDBZIjrfDvDSSSgf4tKqgBtNOMQ/GJ5AXRf2PGcXIeD1MsYE0KmHpTMxvXIN7Y/d+J8 YO7w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:subject:to:references:cc:from:message-id:date :user-agent:mime-version:in-reply-to; bh=bpFrOYGnO6JZt8G3t36aQYB7Ox/qvw3pT8NWPm5I3eE=; b=aqZuEwnrfcSczBeNnCJowwoXx30M7qt9l/TPL/E3XiJcuBxKENvnE2DptjHMH0Rrxl 1DnekCB4yiBbsiPP2PA6DeuY1Ocf/1i4El9++av5O3k3jq6GzZf5j7B1vB83kc902ntV UhBR7cCk9QiqnSQmOS24oRfWxW57lHpnxRw2S00ce59t/snAl5OTbS/L+Vy8UnH6IAIz FD+H3K+fkJPljIbGJL6S6IraWYYfirhgnVL0WIQgt6HoXm0+/dCWAdImZ9Z+JPrXtUZP ARNrqQKyGDSWbjN4whRgsPs4NqTN6kW4lgosB+hqjt3WtcmmBv92BBV7axks+MEUF8YL 27/Q== X-Gm-Message-State: AA6/9RnWQPJ9CgoSFywtX/dco0NcEVhR7VwSRwSyNFfDl99gUywdRaZhXpWDWF7e1GmRmsbz+2lxWBFyIt664kbwFNaOQdr8b7gk58DzpLB2fCTCB4r0DlC65bQvmhKqa9AbyeRY4e2dA1GVUmZ4uOkfmAvZ97IJbnFVDmvCF1Wt5jM6+idqKBMuj6eNoriaNNbBbvQO/GW0 X-Received: by 10.28.4.74 with SMTP id 71mr7410467wme.19.1475641342468; Tue, 04 Oct 2016 21:22:22 -0700 (PDT) Received: from [10.137.2.17] (ip-89-177-44-58.net.upcbroadband.cz. [89.177.44.58]) by smtp.gmail.com with ESMTPSA id xb6sm6616179wjb.30.2016.10.04.21.22.20 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 04 Oct 2016 21:22:21 -0700 (PDT) Subject: Re: PATCH: two slab-like memory allocators To: John Gorman References: <68b837a3-ce55-f9a2-f685-9eafac536f21@2ndquadrant.com> <885540a7-ac72-5a21-6dae-a4d5b50672da@2ndquadrant.com> <03110c11-ea72-7b4d-027d-6f19eb300b2a@2ndquadrant.com> <11821eb9-95a5-353e-ccba-13e8e9351e62@2ndquadrant.com> Cc: Petr Jelinek , pgsql-hackers From: Tomas Vondra Message-ID: Date: Wed, 5 Oct 2016 06:22:19 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:46.0) Gecko/20100101 Thunderbird/46.0a2 MIME-Version: 1.0 In-Reply-To: <11821eb9-95a5-353e-ccba-13e8e9351e62@2ndquadrant.com> Content-Type: multipart/mixed; boundary="------------A30CE89942D4920DA6DD6B39" X-Pg-Spam-Score: -2.6 (--) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-hackers Precedence: bulk Sender: pgsql-hackers-owner@postgresql.org This is a multi-part message in MIME format. --------------A30CE89942D4920DA6DD6B39 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Hi, attached is v3 of the patches, with a few minor fixes in Slab, and much larger fixes in GenSlab. Slab (minor fixes) ------------------ - Removed the unnecessary memset() of new blocks in SlabAlloc(), although we still need to zero the free bitmap at the end of the block. - Renamed minFreeCount to minFreeChunks, added a few comments explaining why/how firstFreeChunk and minFreeChunks are maintained. - Fixed / improved a bunch of additional comments, based on feedback. GenSlab ------- Fixed a bunch of bugs that made GenSlab utterly useless. Firstly, chunkSize was not stored in GenSlabContextCreate(), so this check in SlabAlloc() if (size <= set->chunkSize) return MemoryContextAlloc(set->slab, set->chunkSize); else return MemoryContextAlloc(set->aset, size); always fell through to the set->aset case, not allocating stuff in the Slab at all. Secondly, nallocations / nbytes counters were not updated at all, so the Slab was never recreated, so GenSlab was not really generational. This only affected 1 of 3 contexts in ReorderBuffer, but apparently those "important ones" to affect performance. Both issues are fixed in the attached v3, which also introduces two additional improvements discussed in this thread: - The chunk size is limited by ALLOCSET_SEPARATE_THRESHOLD, as for large chunks AllocSet works just fine (thanks to keeping them out of free list etc.) - Instead of specifying blockSize and chunkSize, GenSlabCreate() now accepts three parameters - minBlockSize, minChunkCount and chunkSize, and computes the minimum block size (>= minBlockSize), sufficient to store minChunkCount chunks, each chunkSize bytes. This works much better in the auto-tuning scenario. regards -- Tomas Vondra http://www.2ndQuadrant.com PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services --------------A30CE89942D4920DA6DD6B39 Content-Type: application/x-compressed-tar; name="slab-allocators-v3.tgz" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="slab-allocators-v3.tgz" H4sIADJ69FcAA9RceXMayZKff+FT1Hp2bRANAnRZ1tgxkoxtZiTZK+TZ2ff2 BdFHAT1qupk+hJjjffbNo6ovGoQmXsTGErYluqsys/L4VWZ2tbvdbq8dufOF J9uRZ1pt0/MC24yDsD1xH6UD936T+qIb+FFnYcb27JvnfLrwOT4+xJ+9k6Nu /if81u93+0ff9PoncAn+HJx80+3D7aNvRPdZXP7iJ4liMxQCfspw+7jt9/+f fj6EwVyAcY5txzm2Xh+enLy2ugdW73TiHL8+6vWPj6TjWCe9Y/vA7orrwBcj uRC9E9HtvqE/og82rCOZN+IumJuR+CnwndAU38X47fvF1HQc1447djB/V39v xhLGJdIQvVPxQ+LB9N4xEusdvTk6FK0ukKuPEusXacdvxN+/nN9dfhK9/f4/ BDupQCcVqZOKRualIuelzXodhofBg5xLP46EZUbSESB9KB9cuRTWSnyRcSh+ kJ7ry/t6vS0uZBzLUICYOEXIx4Vnur7rT8UsWIpJKKWwZ4l/HwkzlCIOTfte OoaQsd2B2bdyDswckfgJchqBlF8C1weKw+gn03MdMTftMMCh544DIzSfOKDB FyD6PWjHNPKc45kUE1d6ToQTrwPHhW9M/RJlwQmaUmFiKD1SBJGPTd8xQ4dm fJKmI8N1agGI+hhfhhIM1GjiNCC7SGK96C8yJBGFKSw3FvMAdCAnE9d2gbW3 QoJDtA9Kkkoo7ftGk7UDktmgtWUgziOIpBh42GCvSCzdeCakF0xpZLtdF1Fo 71uoXd/ZD2GiyzbdhzHwqwfXghDWYCWTCazEFn+I3vGBaLXKc5PY9aL9+Xwa 7l+b93LigveUP3/A375obZ6J7gY81j9/iNPj18C1+sP0XN/2Ekfu+4EjgZ6c 0y+dWQW5kiTFmVumqZk9UWKZV1xRYbP8xN5BeaJau5zTLxtl7RHHE4FajcBH TH+K0dDrHp8I10cLYxg2Wk1DnB4IR3qSL7SbdWGTl4EPORImdI8PD7drv14H T52IdnsKnmfuP9c/rOfOqLu+Ix/FqXV40LVOO51uV/atE0vJik76fCnq4BR/ QZLvvxft3sGRcSxa+ONUwIV4tZCOnIgoDhM7htiiKRc05b0b3V+SMeqitr8n HASISQDAuIzE3n5d/Llp/Fld1Fswo9e9F3GyQKtGUs4j4bn3AK2AKGYU+KYF QfRgeokUjX++7l5fcPxem48ALIs7nDcCKG4ir9a3ICWga6129/XL1WA0/jK4 HX8c3Axuz++Gn29qtR7u/3Vwo/29uhB7SMWdJ3PhJ3MLkDiYKL+KxL1cxOBW AtwyCFeGWMBtQGA/Mm1UX0ecTxC745kZG0RKT0SojhZB4AEmAaY5sNwOK/Xo GLTZ6h2dgm7hAmQBsWsD6PlRLHAJgNePY0Vm7PpjZi3eisPu6fEZMZmbv8AO ZAVx7EkfsA4QOFpI2wVcW4nlTPrA2vU8AnLmDVcRhRxpA/jCZQtzKaK1DMJ7 LzAR6AUqr71BINOeSUfLpaSB6f2zJ2aQScGtCnNq6CL/fA1WfJJjTttIAjID dBiBtoPA3OlDeu8f9tCZ8Uf/NSq+4I7nvIPLxkPgOk0kX+NQaL+zeYcC3r5c ju34kRw2u00aGWej1nc1Nc+AWfrzgn3/Rf7a6Or8Yvx+8OH869Xd+OLq8+WP 49Hwb4P8EMw2gkmjIDpTajbPwKEzseJH/9ky3f18868QCMisSZMstDRjyqN2 FokAAceuS3Z1fvtx8By5kBb82hSt3Mjr85+H11+vx+dXw483nz+I1jqmbF4L ZF4hsnJgQeRCIxnvuqjPem5hZedXsJ7R4C7V+/Xwpry4tTHDm+Hdk4NgoTiG ViNqMzOagWBe516uKId9K5TO7rKAGzowOjcWUqywNLps+YvV0Bn4cXHezCYv LEXUGcflcdfAPb3/um9Adv+cwEzCECQahxIrqXiswW3sRT5wG/oPmP7+fBVM b6X9JQ6LcctbDVgy8VG27tn6PbXSLmvM8dwoBkB248bLdGAAAx+kN7ZWyJVW XTWuAsueGquQloZFW0hqeG2WYEkpZ5u11uMBUqyn44HVEco4CX1lU+D9J7An e572DKiwWge9U2MdZz/KGJykKIfYCy2w7O9AtOxNYg9wDBfWxg3DxryeShPC ENIAbSA1dyIaodV+54eV28Y70W3CqN/hb23zsHb7DAcAR1DYmmOLPSRRUyZD F4aKR4Zr4wyBSbNBY2vp+EWwGM+gAhrjzcZLFKLKJ5oowZ/wV3qR1BI/IdA1 5QcKdShcSBUqyIxNgap5tbbRb22mn9tgtvLAiIUUJpJxA6YYovvEaPShg8ND owc1zsFxz1iHhFvyvEo3MkSlB4F3kRrb71wGBVOnEzdfr64wwv4s+hjkUOBm IWZPUIpCAgi//AW/+25TIrODN7Za5I3KfRJAUvSfja5jiJe0QPQvsmztp/Or j7fDm/cA/D8OxteD6/HXG9gLhjeD92yJrY5RMV1PzhilNDLWlR68wCYGDkp9 Ln+FoANTcTL98THDx0m/Gj443dkNQXis2LPTQuPZOKJhuNpg6q5CDv62Fkta ih3wg4c+F0K0jJW630mov4IhWd7JJn2S0RYwKSbRT/HLQYqtFLYBVXJz9Ial fQGd7fDg0OhD7nHYP+UKtwJnNvlbCWqKrkaAU7MgBbz/l6KLLr++q6jJtrvo DnCiRgKS8G+7gom2wVNOsg1S8hxTSgUxtgCL0nkRW9KLBC/ttNYHCBGmr9ql UNAHUeRaUDYvwFgq13TK24hKlMTEjWOsns2YSHnShILV5K4Fdg0o2aJvYyjM RUM+YmuLOrnU/RRYL+CvTe4FHML+dnAC/gf73eG6A2KypFhX+d+owI1zY1oC MX+bE6RFY4NJmsZxM1YDIvyDTZAAFqMaMNi9sKQXLNeSPzBOIJZSgPZg5aWe +CQImVY8CyLZEXezBGh5S3MV6VEwK1aKK5PuiJsA7mMvRcnBxKYScBLNgvRF 4DlKSBvMaIGc7nQqQ0OYEQbRSjiB/yoWM/MBTJLE7WDSxk67kitAxnbgJXMf O9u1LNAyzX23XgGir+VVW5ESY3hHUgqgBerxJfd9slVj90DoilwtCfvk2K9K I71YlLwVlf0rRNLfEU2Rcw0LzEiJwFfMhymKOY1nCMY5suSe+6LMSNW3uIC5 GfLGqMoHgYV2KjWq30zw6Qq2axzJfcB0ETUs08/hvr6jeRdK/xw3M4qSuRSt o+5/CDcS0g+S6Qx9CnfnAKNNzHNOWcJJJRSz1lpA25z/TLVLI6eHPdHrHGnO BHnF8qigxCqpKxsW+S3y/7ppUV5UTs3gjmBnzwFnhNgNpeqCoyZN2ENFuutS R9Wihy1IAvuwMYQ7kqGYxriESQtyah3XTgAD53Sp0TSgHowhe4FpCUCIaUEE 8kQ0U065a6V3reyn6vqfVNWuzWq9Fb2z4g2ahTfSQOVMATQA4RWhiMrFjCcy wBwUrIe6ePlSlLL2tARXkVyYv2YYEKkq9ddEdBVKewoU7lvLTeUc5YRRNQy2 FJ2pyLwzq0djdLn9juXn7YNtsa4GnPetO8HHAV9Hg/H5aDS4vRtffhpc/ji8 +Yg0VYb2UhGlH5CoPZqn6QafUsTHiRuThCzTKNHaSOVb6TvuBL1Kq7Fab0+V uCUQyGJViF07KtUtlapoVcJWqX9t/BkVtDlldOIxPXF5W525oGbYujvbrYI6 We+1ITbIuUPZWUVzCzVlR0qgOe/D2BG7mHWHqmZX06dNXoOy+h3tL7bZP0WI Zt6SFYbPYRkmjEe9LhUsR92jisbIc/NFbKnWK3srW6hs0Dg7F9bgzyp0DJG1 0NU270u4QhloCsjPwCWA5y3gWurIZMBd3Y7R91XxFG3rxeix2IhhcXdsxTwz JnagtqG1o53z6f5OJn/W4cmtaVcCZfHLxNaWt615pMEr3z5S19IG0san9VUn MqynRqin8Vb/sHsge53OQb/Xf3062fw0vorG+tP3qlH0YLhPD9v76rFwYjlu iAlA5dQ6xNRibCWu5/CwTmdf/6kLdaRC/HsjP6pJYmienakXWKaHJeDnix9G iDUA+51AzO1H/LEIwtj0YDPoQAL41AiKaBgoyryBY8pZrwKPDQV+Z36/k73U OZiNOlQnNbC6IrPmDncoA3b50+mcmkenB6ZNltt35MO+n3jedgsp6mifrtEF 8xh4+Ob77/HEwo5Pn3d4Pt0Se/hXKG7wK2wbVHpltTUdaXD5JGQ6gcZA6WRC wRZBYSYK25lw9cEoLjWhLnOnvqqjbTBmJIIJ0ZG/Jnh2oM1AHNAhuIwNDfkS 8MkacRksVqE7ncWiYTfpFJ0BN6N4GsrRf16Jj+RW4j0+FgsWdNLsYxgki5TQ 8P3g5m74YXhJxaxa7Hb15+So3WF1iicFTKCcHbwT6UG8JdQtsEx34to4hE7v 0RcaZvqOeDBDN0giIhcsYnfu/qYeCFCpglsPljCqNSTx/Id+uNsRH9wwir2V QWWV6UMpH4sQ9lEiNqHtzQkSiw5fIDPbDB+42KLKSpWx6kAfTJCPpg30aASr FVdC5BoLj/onsBrUY9MgsZZmRE0oPhfSKSjG9cG0c7VSKr7yxwddLNRcriQc PD4yE6qk46KPHmWi0ESP8QGMzM7U5NvY1HGJVKoebrwwEzZDAxcec/MH60eg hiPyx2tIIDxNQ6ybSJAOVGbrGcDGqgRTmIJ+rg5jWm48Nxd8GBKVsZy5MDp3 TBK7e/u4+I5SDi3+HtsIsOTQfXBhbWQITFQgycDyUFvFzykFiSEdI1UMqMGP KV5Yuzh2OQs8PaPBwmBYetS/AJG1rqjE1s5kEDmTRILoDUG4vLkmeEIWxUod h9bvT4GOMg4Ox6SkmantnC2q2yNkNEN37F7pCa9gXaG5Qg2QDjWPKYYqOseK iGUWywkGMQD4AX5LltAU/979ByMRfiEbB3g/lqgmwlmgx1yMbFJPTWLNkXbS NWYs1WHXzNNd9iwd7yqgRTGY24RzWk4+FiXN0J6hw2CrEmnlmSxVUyTF3FAm CJLRAo+QkjnwPtkUl6SVNkFIYGO67DqzYKEamVEwp9YwXoXsNipMXLrw+5Ra MKmu5HwRs/IpivipBVpEdcWQ0OdRzuBkjDRWaBU6yiFG6SSwnkeC5vQKKopV NP+auDGjDkQERBbyVtoFxcL86N5dkDdSCyiUtqTGNh06Zr8AK3mgft9EeGLX LiBx5kxeENwnC/LouemvBGcEQMucYnsJj0ODlw1Zl8sAhGbJYMtigQE4EOgi xB6XlauXCvBIMJkhXaaq/5Kq1UOJAW1/Ob2Q5pViQJpMp3jWGwZ8AL3RUeam ClxQkXZkpkgOl9oWfJkb3fmgboCCUkJR0xApPoKzLGW+e41KJ39lGTUnZMti oZBQK62oNcm1a1MpysOY1zBEtsVD2tKP3AdZ2Ndr57RNXF59vrgY3I4/3A4G 7zGZ/3z732/SMcMJqz1aza3AQ5J8wNIxyCNQNEftR3gTS7pl6IIZfVZD9/Hk w6soh8QuepWEUFCpSMxBSWe11S4cSqhZpG9jPIZQba3aeTadkvws8fjy883d 4Oesn5EtYeQiKYJBhm4AOgqvXxMZxarfmSx0pPiInYtgyf7aN/BiyPGBC5zg 0ii01bF7hgh3PoeoMCmOTToYamoOMIYaNLCdmFoRCYQMtiaBTuBLtT0xeFM8 yDAMiD8qk/SD3rRUfdjVqwcWKOVgqNgMYKeZo47xBK1HID8NQFIICxfCFmqF DnyDLIuzFZPPjOptGgtvNwIv3BMYm5hu6AXS+deZCZFrSdvEDQWEwyRe0sMC Ng3Hhk5a0En52QcYN8aghZI/VLBIzQEJ021IrMRdwJ6gfA3yTZ1UqSXx+jaY msAf80DeSMHlBuIXSIpB1FWgdm7KsVJ7sM1w6dRxyN0k3SFYgycyCEGOBm7D QUykuJ6lbFKG+DpDlDXIrRWEG7q475hzgDSHN58sSXJ5o3eqIhG7crq0Jvo/ md40dDGT9PCVBy1jlPl2OgLfO3ExT3pRHPuC3wFRIspH9ag+ny1inKY6muEO l1JtYHbkr5pgoq8+PsX8t7yMBprdkVYy7cxA+YkV4WM3hiHuWEJdQTHCMuTQ GJUSglvSPkKUNU/axZaU4Yubz+eXl4PRSANMKKcoMKWvloQVyBSNTXUYO/9G DjpWqnj1GBb0HyPaU44eFXc0FVLIg59mULVrE3xCUUQP9TCTg5+YWgAKcktL vetSYMQZBr9GQ2KEJK9Oxwz2C/PBdD2kaYiCg3KPi6anuSdGZAQ6xjGgnQW+ 4uRPgXhpFmW7UAinymNNqXQi259Z2lyaYNLbMTIEkp8A/h7wyWqMT42cBIKl 6FaYOuKbOCr1obChA/OqEYT7ezGlpp0Qd7Fi2UJYLJ024K9tQlS6sA+rrZkF 1KBtogVMTBgho45zbwcSqXSxbD5YwnBSCGusG5M5xAda242kKrtgSW6os8Ac DLqYSYC6AZKY4hnYgUGr4E5zQNA89PNrD8hegypEHSYvRhZUlPphnuJA2meD n9s2Ag6DlZLKKSghU9lISk5/ea+AXDOknGsjVFCiRW6cEvmXNi/o2d63uvPz YsHdgKgze1G8kb7io/DiReVN9f4PzU3f5aBWBz83/fT+dvS3WvqYV/UUC++y NZuliZefvt5smZi+04YT6W0U1e5AC5QI6LB3EOcigFvVtunkXz3JTRp/+Xpx Nbys/U+9VWsEk0kk4zJXbow2RUs3SOkJ206i6AMmEIquxzmCggSShp/0bNgy K6UFbH+/XdYi1FRI/S21b/8a8Y0k+YlevVV6CalgdrGXfuVXTADzlgjKWTKJ Wqkgkb3UuJd+PWP9c6Mte62SQrB27nErLS07KNlGJLDwsAe4sap1IIHId6kk Q19OCnwKw1wVgzLftJtH/Q9+z4f6dKX2HjArtP/KjPLL5RH1Fp4jKUwiHTCu naEG9Tucavdtp2dBaFfj0xcw7Dxb4sIMzbnEEo6Se0rm1Kw3PJ5OqdQI1Ojw TI2fGKXto9wgrJYvs4HFcQwdueNVXLTqzDNHhuqljFd2xkEdv/HjmhIofd+U mG3uWOUnFko6mgdXRGXvhJo4sIev0fC5bGT5sqmqmExPpvEUKwi8Ws3MHbUh rvqLyoOQrX6X18PKIccURg8h+1NNQsyZsfTO2FAfY91wOrpquQYOsU43dqhw iU2bGk/8Ot6feZ87ywdx3r0pBMq+n4Y2R92I1odHSzCydKNINwlLLfOsTY4A /SZtiQVL9YozrI+m0hhICR4MqvvecFMDnZc6uSs8QHYPV3RnK+vHldpwRMjH b282m7/Et9haePNUy4bmcPdzEYfrw3Ggao420u5oToLmZlDI6fp3ZWx85glG qZFX0lNbymVAg1FuHWXnQFWqOfgrteZSGyGVV/o7abQ0G02gZlMVXjkzyk1V AYSL1PMqdZ8bXFQ6eTA3cAoNoVyjzM23hIkQ1FAhPtzfS43BsZszSN4YFAe1 gprXcD4tLikpBtVNXJKIOlELFwoU/Kb7LAgkmd1SX7+5eMOmuf46uoMNCQvq ihfxMYtWTRz8PwnKyRfFjq4AhBu/yvX76WgeoT/IMAkDP9Zqq+LDQymtzjpS FGBYbThO2YNJxdu2Lr1Ts5emaJ6ParYZmQl3VzYTgbo6p4me7HLhp+atnylM Z0aMSzRR1Vbq7BsVfnhJrT+JqDRUzaB8xZ/bi9Q5w6dSMzq5h+Uh5crT7IkP t0kNrgCo26G7E7nWRrq17e+lLd7fZBjwQ4ScY+cEK+Z1Z1nSxX6bKv6ME/Oc 56r/aUL5bpjgKdgJnR50sTmP/wlFdQ6UpogZkQbcborif2FB1wrFQJYt0Ssh IFkDIrBJuSV+Glle2Ww08DB4KPaaNKYp2v/b3rV3t3Fb+f5LfQpEZ52Q5sMk 9bYst0osO+raltdS6pxtszpDciTTpkgdDmlbbfzdF/cB4AKDGVKyk5PukqeN TA6AwfPiPn835KM9ccHU0w3zK3T192HT/Eg2DqWAdY00bmdLH+xMk5f5mCOE LAtHqi3Penv46hgvoVOxNTMzcxwz7ZhH0v/6LVjPTvSMMY5msirUBDpYVJHa 5yMaVsb3via3+aUaWNCRYwhwjLYTK/06BTe1pYs/ASSIgnGK8thBKG/21Skc 5ttODzBovKmPwKqwfDc1CZ1lRa/TrzEGPXzDtRb22Y9N+ZvnB/CSBRb8/mwy 05SC3IEX0ZywMwSkUth3J5TZ3U2UBvbyh+EUiZLZ62qGtHHRhvZe9iKdvZ3o ewYqmH8fKMOc4I5v8BfYxObfvCXNV9hW7lGW2i+0Jcw3b8FtXVo/8xVXZwna 3bCzJ6go3/fK152oJ0DfWTmKP+R0K/y6Hw//dnSOYd3HL5+e+BQLhg8MffW8 DxvlHIl7TRHNusB9clHNZvpC1odw3dR4qO5l+v/XDXVv8I/xeoPLV7CVWvMx iVWtsZbnGqrKjbp/NR+TQ7PXE1yV23UFq3y1vgTKh8LJWarbcpPbhYgZy3ht 3wyvU98ehmKEvcKv51PNR6VZSMPX6h91TcD6qDJNmU1JGXJOxqkasTtlvn+2 CnoTsxsv/gj2N/Eo34jRnPptfJajvwXt0F/S2XkGatVxOuIB9VD/eUrc0gVd 6P+SfLR+NXj08m2KwFn6MqWyFMywcPAdHB63BBagZUbb4aF6xBuGQN0/n7yv EjLJgnFgGeq9GYr4KT8gluKnxaOLjE2X1i3TC245RKoNIZD0ytjqvj58+eTk xfF/M505PAv2N9Knp6C6TtC41nQag1A+QcPv+lQLBJOrdbR9gkIcBAnQemOw HZoKFVqwqVyDLHZgNL1OSaVNlo5+anxDOKAHxFCQSabDq1S3+0Z/JQmDnB8A BgesR6Dc0F0i04QWMNCunqjLyQSNZb2kNxyBsYFMdx8nHNvyHRFi5uozTXKk SuZmBj4hADmB7XNsBnTWmUJxvFYmQxsHma1YQ2jWB8PpwPALfbS7meVPEJBw 06EhGAwfZowXsARDMJo+NTg/8hXs5sStxd+BTSWX4CWC6iLQk+JMWpdtTRvR 6JLvniZp1tYypE5dJMMpGGimWt6dJtMbMBba8mCNAjlFT9WHdIymCcMHGPax Zv2r2CxMZqiMlmw8QXGYdLgRFnitThsI6CXQUHsMYzSU64EmINONn/fxtGI4 ERWGQ3nFS0rQGftOSTgj/WyFapkG4qewiDYTGFPVvqXZJIgKjuuDjtfrunVu GH3g63V442PV3epQ0Iro9ufFb9dCj3PBxk6IsdN7LEHQ1FhfZcW0gA0+liC8 AnfHPljxgGJm1iIU02JT6BxJivRvdg+QTKE7OdcJHKeH/NdxwrADf3r+HJ1/ JtekbDRPSQunD+1D/C/5ohHzWvVvY81igWoBHQjhRPVgi2pCNqiRms1ojR9K 8dUpj7GQVWN7hZyWmmfD42vX6vlgQp/LpvGagCOl5FWCLJB9gjeR7Wnwu+0c b33cw4Ge28j/vqrdKADt5WtU7w2hdkd9K+veq+RPOhhM0wwYnPGwj24wZCch RbD/DhmrGbXFAfaMKeBGUrP9QcKEgYZONwcuuawUMXHG4FtD68EOtayTq7nY Wzt/fEzyXXmk/L7XFR1DBJA8ev365LVmZoVd4d6INMhW1TSZcAwiejyRRlIX shGibgnFqtmhagoOYKDkLUeVYaR4FXBgTWIcAKNmERryn43uUu4A6MCBUtVd vZuLZkJYVvWDnZp6QOXzk2K7TIHQupffzbCTkfWwAUHWdfG7KXqfGEMHxyUG SKBAKws2gfGyc0OusXYM7PLDme/b673EH8r9EH60rqphP+o0EbvSXunNFcR/ 2gl1XX5CgwblZhPUztea6pI3x3QmqRUG6trw6gxZP3xDLRD2iYKcnQuqIuOK gZrbQHTTuOe9CDp9Yx111QIjraG91unYHzYp22AP5aapU6t5/flWCPTeA5/s 4U9A7XjqdF+aj90GFXO7b572BXHpS2KGT0PykyN5rg3X/QOVJ5hYjk12JlIZ f/NMgd4Taa2DVydaTPW4cv8GqKnMcOm+qnU8nPHtSQWbuI3QLHyBXM1whvZh 2jl8J7c8SxuGbGsunNpBqAJNV2bogqmfT5MGxQUg2wbKySjHtUBjZ9Tz+j/Q dXS/jOxa492J2ul04PmuUwCacYqlhoxn7GDi+gzOOg/JSGFaO/nPFpZ/kJ9B VAHR0GGp0LhqhRbnue9ZQlN1OfyQOtW15er7EG2EMQkUDJBZF2lnJJRDajof 3/dpCm7WJATBl9T6DgPOghkcoqCCfFK4CGWKUHHtD+Wd7iiJBeOrW1J4OL2s hhr55RSIQN1Q7UW33GQ6nV/bsBtN/d9nxhHNGKet8Y90jVHtIppCktF7dCy2 5CezJEzON7EZgM89xOOnhkCEI+daP6nXHZSGodt8M3AVa+Ye/oKMePijRRDD eG9m66mFb+gRMgn4isDEaciXpiN2+tGA+BJ8MkfsLzZN4c5MA+NjqR5Kt2J1 SXyv+oRTTi6o5ED9T1E4OEaPuAEaAfXMzAv3toJCx2dHl+9C+fjm9anpAd3u 4bElZe3dzy3wRSBEgnuK9RiskDxAGNFW3ocwrzf2WIMgKgwOtcJzWGphsNZK 1HBMoSmPMNhzQG8R54AnQrGbH1iNhDclXt9NRU5fD6YABg//oD/yUPjSMoLG n0NIy7lpBY88zVRwGsjwgAb288lo4MaSDlFUH0LAAjpletZ+lNKQKjuTujXm C/O94b+bj6E+Hhjxnc5H7rRQiHDuSNpO/hI7X8SV2u4694KGml8P4DaC4DDN qYcdG9MS2o7Bd+qeew16PRBSrPvBEQhZ1f0q9Y60NHolz2eTJVbFLQMqTD4O AZFpMKAhmEiAa0EwNUMs4Ib8eTOdgx9+qeXn1Xvuj9wbM4+upLJjxqKPRav5 ucFNOxzfectGtz1W50quAnQzXApX0p5Lj0ShDYHoCuEoZJ5ntSVNTLQ0uWHq hMpkq9GgFpzPMkD3gM4UtRMUJzbYF+E2CaZ1MNAKkkN5ObGuz6B3TD/1Na/3 kNo3kvX5k5M3L6sARQQIwdY47jxt8+ZybPsQ4iVZR0dgYFfz/tvmCGNmIA4s xrBAv25hrBaOSAU8i7hUrYOHFUZIznW6u+Hgk/til3o5zsfcVdXIZfcYrizA BYo9fBRjPqJKDM0ZTsaoMgHgNWCewDFcRiiJ0wvfvpGMDWt5Ao3EfExxCyl7 YEj3SVBRVO1j/a1mlRGsKvQbN10mRpxc60HPguHSMSfH9NOQQpX5dPWlvo89 4KAp4OMQH8RSrpEJmyO6Ne+/x21dUfzy2EQj46CPRYK+aaJnMiBP9LJBTUGI z3syDoCCxWsSPJXwXhiYQGl2yhcBd1bOcFQ10i/DZxouyikKaoydlefRjOaX 6wh+0oiMgvdkIorqpgOWHd11hcOOs8HBdSsurPiNZX/2fegMTjZBjoWuiBCy CbF93jySsoFbs150OL4DVXWGQJwl0DX44n9T8WEs0sp4CGgGkM9xXqF3nkU+ CnuE6KIL3uVetkZoaYfgiuzdxv6eJnOWizmn4NOq7un78eTjmoFcy2/joc/7 NcTtDzFTcFuAdAnj5VbEeWvRTw/yF3xkdPIursSZ/KIN5XH0dWelIJJ3OUVH UiPR2MBqOzlVCLHnOMyPhmfkU81a27iYlu/kL3FCa3WClxOwN5KPmtFCwtJc mZhUOjtSUejLd/uBHJM7/PIMytLe2XQqTXPPwPa/X6N3PVLhnpQNeUVzx+Rx tC4L1bTbbu37qi9Sx/cGvrQlell+j/EJpPBJNL2ilADgk0AhzGGQc16FV7p7 Fr4VX6ym0jfV3Fn+u675YPcXpdtof2p31KNH1Ng9OMM171o2SJjY84R9VmGN Vcf6qg5ncjtG3vPrQexFzqLCqa7ci0IzE5qZqy6wkX4mxX5NaPPNncJa2Nym iKmnpZoV9NvQv/sqrymtBVf/TyQrue7QHkZkxgYHYXB0mn8a9Cx+TDFsGZoZ IBIlzCrVR3hRiQTBDQSpecQVzsyACUZmpwC4x8HyAHYE10lxUVvWT/mnU0pp 8B2VH3HCF1QTk/PG3TVGppSnCy9TcbikPaIFTNVHnh1ykZb3hqwxtDI2etnO lMWUEVYdmBurGRkLQidOY62lTuwFArgMHLRDPaVGqHjTkgs+sihF6/f2EOiT QW4McKxPFagdTN/UCDguCVcRsBR0+41Rl2MdVQOGy+dwmNUqZFEK7ivWJfyL 2YXcNBRRw4aIOCayCbYtul5ZGVit16OdqRXQL6cuBAEWI8kLKC3wHfuupF6P wpL3sKRRMGazyTW5lt9M5uDlMVBtVWUgA/bWY0MQzPA3Kk9FoV8eEQVKWGOC wrDnpCLkKb0CrRfq7i8Qd8EyYMILPbgYgzF8E129msdYXJldKOF4mFYTthJl Awx4KHp9TrlQqBgQpx3YPOMnw8fdIxUNNWylLXwbkQFp8LRUjtoC0TmbxSkd KiRROjTEZTChc2ihBYRABUwN4sxUPeaQD687pJKz4gnSG5hPmH7jd7oJ1oKi /t2bNEKQQAs0UHxNYMZNurgxTdDSchFr65Gl6OwrvNqLNPaDT6Szr0RUWPoh aa74/MQJN+sAvG3KG6i4n0UHtVDxTdvxFWqb0VxlzXLyrmeXVpqlcoR9dLwI Aml5K+JDK/mxt6UxH5qnVu40jy1jb6pHHDKWtPlwCwECgXOcKvFO/DZaN4az Gy1I3B4Cr8+YYzMYIv3RpMfHaJ1I2zrH5fg6lEdKTIBZVOe7Go8GIdfjLLCl LOFDiaGSQ7YQOoUgI5EANXhnyaHv0WbF4dv0aE04yqNvM5I0Ks3epKBGKG4y YoeBvR5YYTy1ptRMTjk3rZXwROhPznyyfBiKNGrScV6oIhT6QIZyz4UPuSCO UKloXAD4GO3bibWO5f68LnFmSlNhLDgSS52IM7hKLhhpB7iSrD8d9giWcDIO YIvG8hqGoxE/0vmzgvyB9JS2gT4FvcNhoIbyzeHrl3ouGmqdEDAAJWcKOFUI ckT9SYn3u5epe9dGN0nE2IsGsBPvm4yNcOXx39QwHrUpJs1E1lkKW0LCNVKU YYCXkqpqoBHKC1G+dH9LubRMLB07wbQtBVOSxJgpyclp5WLr/xSJrZ58BLDI 9UJe+8VwHGflGnAJ+9qOmC4k+izOGXiHrsAqbm3i4RbNE81lvBzQTBui7ujZ bwvQG4smOhkHvGbRldnObWJg2bSgDDAjBPyFnJ8Vj51SRjClp7k0JHMnsfvs CqELGVkHhtQ0dghqK2Q3GW2P1RAJ62/iAdfs6mEkWgqLmYA3EkL7WVAcFNYZ hpNUntkMYwym1q2DB5ywRBp/X9NgshrLvWjUsFwJoMMiGcyYzT2RLDLXHI77 UxeWSWmHezfQd5NnxtNMUkPUaYwpHvNtbrQXspek3ITHlBwjdQ6RSxkTvAPR 7NQsIZZWdGsuQHWZp8jnBzWFu4u97YWjgOGfIbJ6PuONhGBSbuEJMYl9ntBv k2EAQS0gZMdQOi9ipEtYabwvyNQfK0U0yImAxHKE2uUkOH8LDcHBHFv6eyy3 P2pVPubAOxtmJlrFaoqCicCZDx1ycv446HpjJqXcSL0Wd7J5fCBcaNeMPQ91 c8ZBZUSquQA8xHdnazjIkaFnn/v555/V9/MZe7oFtMO4vMBZ7L8djgZaFo1s fM9tyBpXPTch/Jmb41sGG3SbHGbIx7chJ528f43wD0ycHf+Qgk8J8lKgZxtX f/CY9LCz+ZDbOCh92bGzIXlCU+ATuS+6uH1sztnttayvJWjWrV0ChF7qAFnR 6s4UUYJHY5gSoWCzlYhjohA21aeMzPjbatjrlnpjdAnYDEUzZUifL5LhiIKP 0G6FWwp/RCyWqRIGSW8YV6hU0KNAopfNrwE0nrHHsSlPCkNlMyBM683ylrEn MBc8NjdNkFTh/Y3ojE27NmD1nUnPevKiJpBwB9UIQUjgQ0jN0awTHAUZgwws RToeJdNLIaq7McHOfsUgmHBfvJXuGWapEJgc32hcQ/VMkVl8RJ59DIgB72LM XHpbFcCFIRudGWRNM3h9PdmgIr0p8ai4axh+gYuF5xUKvHTCB9nfsrSGoHog rER9tsDdK9y7vsh9EHVb4B10LTCwfFcGVHAIPHx2YrabamoiydZjp9qL7qYD +QydbxLlYCqdLMsaFxBNphbjEUPpSWaiFiCeoN+fXwP6Z9WFXTjHRIFQKHP/ eat4ikFCd4QccMt3KwnXyf5S/ZODroj5n1NAPI3/ODMYNGyyQ7yzm1Cz8Wd/ wBRfuxgdwYMhiu5N6zq/lAcpB++T7zyJhtCjjEGwWG1BGJHXxiGUx+cIAIaa PYQ0avNpBoUo9qzaRteGyTV9r+07ECkMeUcplJHaWgw4NYTIthnApUCCHCxF HQLkZwyQbzGVAAiHh3B/woYHIttA5wLZfbQJET2EqBrGfSjUtvxWOBNFi+Yp ZBBuJgifYLw3zcb0PfaPfqfWUVuRK+/9zJ5etMd/Mz/wBZ7ePDTmTWXn6weB fZ5KuGGYAmE0Umin9KaqnrdjOlcjwfwHfttAkXFp7fC92Qunj7aEna8ImINS 68SyBk+w9DriO/xzzmQU9Dr/ZJ+LbB8fIHNchV9pXDX6GQ7SvvLYQYKIEDKB pw9y891QvBTEk/Nvbua4CbFATVkwx4cKcxPmpTJ7nmaPvnqOLwbWTz72F859 8wr5e8Z9y7Vky9gv3EfspjvwXmLOhQS3kBdgaeI4O6xav1sTsiTDtAKnf6By hiQvUq8EoGhpn0HR3pAJaopZQnkCMcMKivlAt/UJTcf9G8d9C1fYk7MjoNrI Kth4emW1kPc1Zb2vkNcAfvbp4dnh85YSyoGbyfw7ymJBBi/9fZqlowsGYhuO MT0P2tDZujqbAnpgiiwCsNHOTYFj5jk4y8Yep0BKwQMGo/KxDeCAVF/LYmPA pp8izPjERoXQIL8povFl8D1Wh65EXBCbkHIE22J0YDz1ATJ83pkrIrdYroze QgfesXl1v4AAYyM+BV4jq/J4grbGYeqAFa2cn40mRhVBVuye0zbA0IbjeRo6 WbIV7RtpRoO5iGmtLcw+ARMiek1vcjnP6CtARsIzGoVQXxOJkgK6cxp84flM xZVcVc8dyzgCobsahN5jO9eTDDNFhYZu6f6X00roUQ+XHmm8b/cGcsiORScU Qrs09wax2eB+WBXMMDc9L8FdRBIBF/HbYK229SuYjNPMuSJxvhBuB5MPQMQM zBGi+qeYxoW1oMi4QX03XfAP40RLSinc6+9or78r3uvv+K60KjWwkiMQXw/j to22HpxQyXWZOHjhM8eeZ0KrlrcevAttB+/YcgCr2vas4lZWUF/Bbwzdxt4x wmqB11hlQeL3UmvXcgYvKo4OjRBAjhiH40nTOZBPk7HegCa6+QsM0kvapG2H +GCg5wtlLMCJRdUAnCWWyTLEaKGLDIuRterKbr6KNMtZtlOQtFvQJ6oeEii2 hwhS5R9Pz74ZdMhQTUcsv5Rc3ro3bCqJeZ0a0E4TUWG2gRwAh1M49wd3mk+d 4fIWo5KvvuOwFpqhvtqww9HebbAB/OgXriYZgqz+0BiZNdNt3QddZrzY4MqM 15AllvrhWa9zfjYUAFUvtWYvNU8Lbdx3mCoRw/s5sJMYRG7pXWduMOOO77zz ctzHxxRdyDBQw8QHFXAjYA0DmGmMuF2zYQs+exLyHZbhkBf/b8p78BW7HOfh XPWNGCVxkYryD+nh5fKZcnKLB4BkgPDK+I/WW044WvTYZJ5N2tt7/X6rtddN djZ3dvOZZwsbcElNC4tATtO9bcg5i//VXwO05VxegDUETFEGNtF7biLmbLbI f6ypStV9ZSUJWGz+sdasKJQg7eOGzYloZUnYDgtLqV9/VUERTyCtQUbaYPFe njw5Oj3/cYn1Klssf6V2d7t7O71eq9Xt93oXaX/RSi1aJrlG3Z0tWCT4syNX KdXnQLPEg/QsudRzjUtTOTv3xb0Dtd1uN/BBMHdwDgLEGD1XQA2gLXV2+OxU PdXCsGaWfjpSOGlaKgJLeOttrXjmtIQ94lyr+t+YfrqH6adz81hSkmd1L+22 95K01Up3k93Bzk7xrJa1lZ/jstIw4xsbHZhx+NPZw2TMdCC8dNp6mqKS9b6Z RvIJEKhmGRuoMPcWcIBnP78UuXaZQAaNYulzIYv7z2efxiUPRRJ76Eh5CZuI XUSnsHIX+80+w5fpmHEIkEmlnO0OWp9+OMeqVk3LPxqHUPyN2zM/4htp62EK ksxmeqAphLSNLXxOhd44/8kHg9SiG6FoZ+tmBC55MaV0WZC112Iq9oaXl3oV CzdyiIgf7KHwMW/ZdHtjYzPptloXg25/r98t3rK5BvL7NFcE04RvIDmAP51N 2Jx67dLpOMQO9w97KcacYrHmlLi24ex7o5wOnl0ln+wjSLuOsBSwPK0+7oBo T353pDvcTNwVi2S9hPYT6kESeX3J6ZMOKRgBlmsAWRKS+YhzTYvsNlpkmw8d qPW6pg3DcTK9WbfnHZtCzwdiY99CyBEl40wUqKcgeyICheLC7nQam3phd/aI zn/5unq3NTojnx5pkn/06vD14dnR+dmPr49Ofzx5/kSp3c5eF9bTS9mkZfTD n56fERTAOSAEVCpY0C/2/PD1syOvECLDddrdTf4DAPjhLfzT2fFzvoX10Vjr trZaW2trf1p9/r982u12t+kuk2TURCkU7AbN2RxRUV0mn2tg4u/0jvb29ib8 7exsteVf/dnc3N5o/6nT3dE/6f9t7Pyp3e3AH9X++sPNf+bgbqyU/ptOy8uV P/83/TwFv7yt7cHFzkaycXGh/7+5t7e7NRhs7XV2L9qd7WRvY2e30+klgw0t a2h24zS9Vp0d1W4/xP+prl7NNWjmoTqbXGlB9G+T8WCaqEcz+PaX60tQ8fZn LU3KH69ppiJ9qLmGQUPXU3+dj/Sfzrbqbjzc3H64oS/Utm5u7XSO7NhD9fdX h2c//Ki6D7q/KLlJiRupil3qXFJqa3DNrym4wiFbtyZ4HqupJVv9z1HAcvbV r0rtdFW9mavM9//V5fQByOYXYHMOP7qygsqFNXXv+YrO1dzY3lP1gk9he/HG qCfdLduTQsk3XlNtFtQsqcY1O6ruVywTQWTF3dwrczxfwSv34JW7EMmTZsyi 63212dnV7BOYRwGkq1rXwqheV4MullWbWhplCJQrgA0k1nDhuq3ledTb7K7e bWswJ9tup93ejhZpB53+TifGyd6mTcfc3qYWir9bWgrb0fIv/N0AxsgTwzjx YIoGuxrzq2jniLMwDVGE1fhee1omqyFv26xQN5qPQzGK3at8Fmycfjzvzz4B Vxqpp6s8S8cltVyn1s9QWIKy641wPCGvJQ0TwGktHB20rf9Z0xu4aUu+OPz5 +MVPL85R9X3yFGCXk08/psk1FmemulkwI1Zs1GOMc6d2kO6NPMgTU3ddPrSc qlm9F8cvabAlZY5fHp8tLKQHCmUY53DZwctJPvvp1fOj0/NXR6/Pnx29PNJ8 9PHJyxrJ/G+T7K0e6Kj1Pr0RIZB6Dc6myThLMA3OMUQQi7IYK+uXDvfj9zfH g6MxCCh4Hna7dB52dhudzsLzoN9lVs1I3FouhkCn84EWcsBf8XyUjfXbj8cI DvDz88mlFn9eASR8cAqsYE9W0NwzF8Si6WplAKa3c5Anq9/agpNrdCI6793A W3EqYuVQ3B+cz9y8ZYvKEhmmYllJk9BV/VsWHHKpjihaivzh0XfB4v1D08Gu ivQ+/e7P+vWwnpubm40tffttbmw2Ot3cej5LZ+a9fm/U/WmPHXlxTOejdEzr jQwJfAW/G/MInDtxTLZrlJ+PZgFDaMOgIatUIQAhQ8qEAgiEN1ToT3vhBjlQ 8aOiK/wLZg91QEAZSP9jfkk+XJ5zio8Dr1lclwcqfBETJj80jjVViE5veo1O +3PgDMFHxqgC7CAqOSUBv8mj/OJtSQaZxFV9q30PjGzpGB0SdCFCHACocXDl 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 8flfy/uWNQAYAQA= --------------A30CE89942D4920DA6DD6B39 Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 8bit MIME-Version: 1.0 -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers --------------A30CE89942D4920DA6DD6B39--