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 1nntC9-0000t6-5n for pgsql-odbc@arkaria.postgresql.org; Mon, 09 May 2022 02:32:21 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nntC6-0006cv-95 for pgsql-odbc@arkaria.postgresql.org; Mon, 09 May 2022 02:32:18 +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 1nntC5-0006cm-Kx for pgsql-odbc@lists.postgresql.org; Mon, 09 May 2022 02:32:18 +0000 Received: from mx08-00574e01.pphosted.com ([185.183.31.38]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nntBx-0003h4-LD for pgsql-odbc@lists.postgresql.org; Mon, 09 May 2022 02:32:13 +0000 Received: from pps.filterd (m0214000.ppops.net [127.0.0.1]) by mx08-00574e01.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 248Nmj0S001218 for ; Mon, 9 May 2022 03:32:04 +0100 Received: from mail-lf1-f71.google.com (mail-lf1-f71.google.com [209.85.167.71]) by mx08-00574e01.pphosted.com (PPS) with ESMTPS id 3fweuntmwf-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Mon, 09 May 2022 03:32:04 +0100 Received: by mail-lf1-f71.google.com with SMTP id 21-20020ac24d55000000b00473e75f3331so3250691lfp.15 for ; Sun, 08 May 2022 19:32:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iress-com.20210112.gappssmtp.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to; bh=9c6tO5vEvPkI/hWzj6srSeSJbleaiaL79z31WQea8ro=; b=z2FfdywRB02CYQ61LpbUu6pc85ylxRotU8cAywLItPS382oZabnTJNLhUDgvB88I1S qsqrWfQvmjocresT8arzr+t3kJ58QbwsHrK83Kn+ex0vP6D0G0qrdZburBtbrH58OnIU axag7ZlRFS7jpC65gboetosTTu9MaZaaYVyNBh0Pz6sgvCibC8zmpbkPo0EbNBGpyWrt vP7fG5hSHAYtl12YKc5t+mucVPGOpcVwO7j73zgQpULRolkPqJlzpXdlZsrrAYYyEqUy 1oRQ60XCSaKkZ3ZjfmOXQFtbgrTiVKv3ZrixoQscwR8FzeSrAgJWt2x7999/m6x5tLVh BhuA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=9c6tO5vEvPkI/hWzj6srSeSJbleaiaL79z31WQea8ro=; b=ASt5DHefMlBJvmlh5EkHP8Wjjj6NjDL5ZP6mjvqIUsHif7kw7jUfXvHbaXkpkS7Cyj hRzMyjsGWJlK+NOsBfoCVXVdwyFwAPNgEZ9MhywesElWyLs+Ah5X776NArAPREt1cPIO tK9cIHBYvLDYzwXDVa8NVd9VbOZslvQCyFisi202lnvnCBkDHKDrZdZLicg5Dy7wcSXs JD1RjouhNwnFT48ZuqFvVk33eRYJHG0PclMvihiTwEGULnUUnxIONuh8TkAYlW0rYHsa Xyyc4ju6YqrQA3eG3U37wbhnbbIxO5z+XWAATlO3GT66FR/EJYbtJByciDOKH+l1GGnt EtNQ== X-Gm-Message-State: AOAM533uGyXTTWUmsnYdCBjtC1kiLXCjYStbCm/p6EqoQ2Q3s+5nD7ci Za475r/+WuK9whksRZFa+5i5AiiA8NhqWp4sqyV03lJvWjvpq/d1096We+/k2S71vXlFYNs0NIv DYXeEENUrePp2W8iaRqST6ayzjXKwanA36ah0zzUp1ReV7J2biWSzFQ== X-Received: by 2002:a19:c512:0:b0:472:1c9b:546a with SMTP id w18-20020a19c512000000b004721c9b546amr11280506lfe.110.1652063523892; Sun, 08 May 2022 19:32:03 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzKNFMsa3XQ4qZgIgYOTJfM8ICDB3ZFEF5XfXRZXB2utl/9P8RYLbTmUug18rhmOoCNKW0Izp58jgx/ X-Received: by 2002:a19:c512:0:b0:472:1c9b:546a with SMTP id w18-20020a19c512000000b004721c9b546amr11280494lfe.110.1652063523551; Sun, 08 May 2022 19:32:03 -0700 (PDT) Received: from eu2.smtp.exclaimer.net (eu2.smtp.exclaimer.net. [52.169.0.179]) by smtp-relay.gmail.com with ESMTPS id y26-20020a2e95da000000b002509d9251f8sm149042ljh.1.2022.05.08.19.32.02 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sun, 08 May 2022 19:32:03 -0700 (PDT) X-Relaying-Domain: iress.com Received: from mail-wr1-f72.google.com (209.85.221.72) by eu2.smtp.exclaimer.net (52.169.0.179) with Exclaimer Signature Manager ESMTP Proxy eu2.smtp.exclaimer.net (tlsversion=TLS12, tlscipher=TLS_ECDHE_WITH_AES256_SHA1); Mon, 9 May 2022 02:32:03 +0000 X-ExclaimerHostedSignatures-MessageProcessed: true X-ExclaimerProxyLatency: 14913900 X-ExclaimerImprintLatency: 3342178 X-ExclaimerImprintAction: 076bc1b187e347d28fb9bc1e2ee8a7eb Received: by mail-wr1-f72.google.com with SMTP id p18-20020adf9592000000b00207bc12decbso5225045wrp.21 for ; Sun, 08 May 2022 19:32:01 -0700 (PDT) X-Received: by 2002:adf:ef46:0:b0:20a:e153:1f4e with SMTP id c6-20020adfef46000000b0020ae1531f4emr11545954wrp.352.1652063521356; Sun, 08 May 2022 19:32:01 -0700 (PDT) X-Received: by 2002:adf:ef46:0:b0:20a:e153:1f4e with SMTP id c6-20020adfef46000000b0020ae1531f4emr11545944wrp.352.1652063521069; Sun, 08 May 2022 19:32:01 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Adrian Grucza Date: Mon, 9 May 2022 12:31:48 +1000 Message-ID: Subject: Re: [PATCH] Fix FetchRefcursors issues To: pgsql-odbc@lists.postgresql.org Content-Type: multipart/mixed; boundary="00000000000052106005de8b03c1" X-Proofpoint-ORIG-GUID: NeVY_kK39W72YQ2m1WKMXVVzZOSxoQ92 X-Proofpoint-GUID: NeVY_kK39W72YQ2m1WKMXVVzZOSxoQ92 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --00000000000052106005de8b03c1 Content-Type: multipart/alternative; boundary="00000000000052105e05de8b03bf" --00000000000052105e05de8b03bf Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Hi all, I've attached an additional patch that fixes a pre-existing bug where cursors were being freed prematurely when there are multiple results that use cursors. It can happen when the fetch cache size is smaller than the number of rows being fetched. To ensure the bug doesn't resurface, the patch includes updates to the test that was modified in my previous patch (Fix-FetchRefcursors-issues.patch). Some details about this patch: The patch adds a condition to skip existing code that closes all subsequent cursors when the current one gets closed. It does not seem logical that closing one cursor should cause others to also be closed. The code was originally added in commit c07342d22d82ea6293d27057840babfc2ff6d750 to fix a crash when using SQL Server linked servers, but it's still not clear exactly why it was needed, because the change that prevents a crash seems to be in a different file (parse.c). I was tempted to remove the code completely because there are no tests that rely on its existence, but that may be because testing it would have required integration with SQL Server. So I've assumed that the code is only required for SQL Server, and therefore made it run only for SQL Server. Regards, Adrian Grucza Technical Lead Tel: +61390185800 adrian.grucza@iress.com www.iress.com Level 16 385 Bourke St Melbourne, Victoria, 3000 The contents of this email originated from Iress. For this purpose Iress in= cludes Iress Limited and/or any of its subsidiaries, holding companies and = trading entities. =E2=80=8BIf you have received this email in error please = notify the sender immediately and delete this email. nosig --00000000000052105e05de8b03bf Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: quoted-printable
Hi all,

I've attached an= additional patch that fixes a pre-existing bug where cursors were being fr= eed prematurely when there are multiple results that use cursors. It can ha= ppen when the fetch cache size is smaller than the number of rows being fet= ched. To ensure the bug doesn't resurface, the patch includes updates t= o the test that was modified in my previous patch (Fix-FetchRefcursors-issu= es.patch).

Some details about this patch:

The patch adds a condition to=C2=A0skip existing code that= closes all subsequent cursors when the current one gets closed. It does no= t seem logical that closing one cursor should cause others to also be close= d. The code was originally added in commit c07342d22d82ea6293d27057840babfc= 2ff6d750 to fix a crash when using SQL Server linked servers, but it's = still not clear exactly why it was needed, because the change that prevents= a crash seems to be in a different file (parse.c).

I was tempted to remove=C2=A0the code completely because there are no tes= ts that rely on its existence, but that may be because testing it would hav= e required integration with SQL Server. So I've assumed that the code i= s only required for SQL Server, and therefore made it run only for SQL Serv= er.

Regards,
3D"iress.com"
Adrian Grucza​  
<= /table><= /table>
Technical Lead
Tel: +61390185800
<= table cellpadding=3D"0" cellspacing=3D"0" border=3D"0" style=3D"font-size:0= ;color:#999999;font-style:normal;font-weight:400;white-space:nowrap;">
adrian.grucza@iress.com
www.iress.com
Level 16 385 Bourke&nb= sp;St
 Melbourne, Victoria, 3000
The contents of this= email originated from Iress. For this purpose Iress includes Iress Limited= and/or any of its subsidiaries, holding companies and trading entities. &#= 8203;If you have received this email in error please notify the sender imme= diately and delete this email. 
nosig
--00000000000052105e05de8b03bf-- --00000000000052106005de8b03c1 Content-Type: application/octet-stream; name="Prevent-cursors-being-closed-prematurely.patch" Content-Disposition: attachment; filename="Prevent-cursors-being-closed-prematurely.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l2y3tg7k0 RnJvbSAyN2FmNDc0Yzk3OTUwNjllNGUwNTcxNjA4NGU4NzdmZjJhYWViNTI2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBZHJpYW4gR3J1Y3phIDxhZHJpYW4uZ3J1Y3phQGlyZXNzLmNv bT4KRGF0ZTogTW9uLCA5IE1heSAyMDIyIDExOjQ5OjA5ICsxMDAwClN1YmplY3Q6IFtQQVRDSCAy LzJdIFByZXZlbnQgY3Vyc29ycyBiZWluZyBjbG9zZWQgcHJlbWF0dXJlbHkKCi0tLQogcXJlc3Vs dC5jICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIyICsrKysrKysrKysrKysrKystLS0tLS0K IHRlc3QvZXhwZWN0ZWQvZmV0Y2gtcmVmY3Vyc29ycy5vdXQgfCAxMiArKysrKystLS0tLS0KIHRl c3Qvc3JjL2ZldGNoLXJlZmN1cnNvcnMtdGVzdC5jICAgfCAxMyArKysrKysrLS0tLS0tCiAzIGZp bGVzIGNoYW5nZWQsIDI5IGluc2VydGlvbnMoKyksIDE4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdp dCBhL3FyZXN1bHQuYyBiL3FyZXN1bHQuYwppbmRleCA0MGFkM2I3Li5mNGU1ZmQ0IDEwMDY0NAot LS0gYS9xcmVzdWx0LmMKKysrIGIvcXJlc3VsdC5jCkBAIC05OSwxNCArOTksMjQgQEAgUVJfc2V0 X2N1cnNvcihRUmVzdWx0Q2xhc3MgKnNlbGYsIGNvbnN0IGNoYXIgKm5hbWUpCiAJfQogCWVsc2UK IAl7Ci0JCVFSZXN1bHRDbGFzcyAqcmVzOwotCiAJCXNlbGYtPmN1cnNvcl9uYW1lID0gTlVMTDsK LQkJZm9yIChyZXMgPSBRUl9uZXh0cihzZWxmKTsgTlVMTCAhPSByZXM7IHJlcyA9IFFSX25leHRy KHJlcykpCisKKwkJLyoKKwkJKiBUaGUgaXNTcWxTZXJ2cigpIGNoZWNrIGJlbG93IHdhcyBhZGRl ZCBiZWNhdXNlIHRoZSBjb2RlIHdhcyBmcmVlaW5nCisJCSogY3Vyc29ycyBwcmVtYXR1cmVseSB3 aGVuIG90aGVyIHJlc3VsdHMgd2l0aCBvcGVuIGN1cnNvcnMgZXhpc3QuIFRoZQorCQkqIGNvZGUg d2FzIG9yaWdpbmFsbHkgYWRkZWQgZm9yIGEgc2NlbmFyaW8gdXNpbmcgU1FMIFNlcnZlciBsaW5r ZWQKKwkJKiBzZXJ2ZXJzIGluIGNvbW1pdCBjMDczNDJkMjJkODJlYTYyOTNkMjcwNTc4NDBiYWJm YzJmZjZkNzUwLgorCQkqLworCQlpZiAoaXNTcWxTZXJ2cigpKQogCQl7Ci0JCQlpZiAoTlVMTCAh PSByZXMtPmN1cnNvcl9uYW1lKQotCQkJCWZyZWUocmVzLT5jdXJzb3JfbmFtZSk7Ci0JCQlyZXMt PmN1cnNvcl9uYW1lID0gTlVMTDsKKwkJCVFSZXN1bHRDbGFzcyAqcmVzOworCisJCQlmb3IgKHJl cyA9IFFSX25leHRyKHNlbGYpOyBOVUxMICE9IHJlczsgcmVzID0gUVJfbmV4dHIocmVzKSkKKwkJ CXsKKwkJCQlpZiAoTlVMTCAhPSByZXMtPmN1cnNvcl9uYW1lKQorCQkJCQlmcmVlKHJlcy0+Y3Vy c29yX25hbWUpOworCQkJCXJlcy0+Y3Vyc29yX25hbWUgPSBOVUxMOworCQkJfQogCQl9CiAJfQog fQpkaWZmIC0tZ2l0IGEvdGVzdC9leHBlY3RlZC9mZXRjaC1yZWZjdXJzb3JzLm91dCBiL3Rlc3Qv ZXhwZWN0ZWQvZmV0Y2gtcmVmY3Vyc29ycy5vdXQKaW5kZXggYmZlNmY4NS4uYTU5NGQ0ZCAxMDA2 NDQKLS0tIGEvdGVzdC9leHBlY3RlZC9mZXRjaC1yZWZjdXJzb3JzLm91dAorKysgYi90ZXN0L2V4 cGVjdGVkL2ZldGNoLXJlZmN1cnNvcnMub3V0CkBAIC0yLDI1ICsyLDI1IEBAIENyZWF0aW5nIHBy b2NlZHVyZSAncmVmcHJvYycKIGNvbm5lY3RlZAogZGlzY29ubmVjdGluZwogCi0tLSBURVNUIHVz aW5nIEZldGNoUmVmY3Vyc29ycz0wLCBhdXRvY29tbWl0PTEsIG51bXJlc3VsdHM9MgorLS0gVEVT VCB1c2luZyBGZXRjaD0xO0ZldGNoUmVmY3Vyc29ycz0wLCBhdXRvY29tbWl0PTEsIG51bXJlc3Vs dHM9MgogY29ubmVjdGVkCiBPdXRwdXQgcGFyYW0gbnVtX2N1cnNvciBpcyAyCiAtLTEgUmVzdWx0 IHNldDoKIDIJPHVubmFtZWQgcG9ydGFsIDE+CTx1bm5hbWVkIHBvcnRhbCAyPgogZGlzY29ubmVj dGluZwogCi0tLSBURVNUIHVzaW5nIEZldGNoUmVmY3Vyc29ycz0xLCBhdXRvY29tbWl0PTEsIG51 bXJlc3VsdHM9MgorLS0gVEVTVCB1c2luZyBGZXRjaD0xO0ZldGNoUmVmY3Vyc29ycz0xLCBhdXRv Y29tbWl0PTEsIG51bXJlc3VsdHM9MgogY29ubmVjdGVkCiBTUUxFeGVjdXRlIGZhaWxlZAogSFkw MDA9UXVlcnkgbXVzdCBiZSBleGVjdXRlZCBpbiBhIHRyYW5zYWN0aW9uIHdoZW4gRmV0Y2hSZWZj dXJzb3JzIHNldHRpbmcgaXMgZW5hYmxlZC4KIAotLS0gVEVTVCB1c2luZyBGZXRjaFJlZmN1cnNv cnM9MSwgYXV0b2NvbW1pdD0wLCBudW1yZXN1bHRzPTAKKy0tIFRFU1QgdXNpbmcgRmV0Y2g9MTtG ZXRjaFJlZmN1cnNvcnM9MSwgYXV0b2NvbW1pdD0wLCBudW1yZXN1bHRzPTAKIGNvbm5lY3RlZAog T3V0cHV0IHBhcmFtIG51bV9jdXJzb3IgaXMgMAogLS0xIFJlc3VsdCBzZXQ6CiBkaXNjb25uZWN0 aW5nCiAKLS0tIFRFU1QgdXNpbmcgRmV0Y2hSZWZjdXJzb3JzPTEsIGF1dG9jb21taXQ9MCwgbnVt cmVzdWx0cz0xCistLSBURVNUIHVzaW5nIEZldGNoPTE7RmV0Y2hSZWZjdXJzb3JzPTEsIGF1dG9j b21taXQ9MCwgbnVtcmVzdWx0cz0xCiBjb25uZWN0ZWQKIE91dHB1dCBwYXJhbSBudW1fY3Vyc29y IGlzIDEKIC0tMSBSZXN1bHQgc2V0OgpAQCAtMjksNyArMjksNyBAQCBPdXRwdXQgcGFyYW0gbnVt X2N1cnNvciBpcyAxCiAzCWZvb2JhcgogZGlzY29ubmVjdGluZwogCi0tLSBURVNUIHVzaW5nIEZl dGNoUmVmY3Vyc29ycz0xLCBhdXRvY29tbWl0PTAsIG51bXJlc3VsdHM9MgorLS0gVEVTVCB1c2lu ZyBGZXRjaD0xO0ZldGNoUmVmY3Vyc29ycz0xLCBhdXRvY29tbWl0PTAsIG51bXJlc3VsdHM9Mgog Y29ubmVjdGVkCiBPdXRwdXQgcGFyYW0gbnVtX2N1cnNvciBpcyAyCiAtLTEgUmVzdWx0IHNldDoK QEAgLTQyLDcgKzQyLDcgQEAgYmFyCTIKIGZvbwkxCiBkaXNjb25uZWN0aW5nCiAKLS0tIFRFU1Qg dXNpbmcgRmV0Y2hSZWZjdXJzb3JzPTEsIGF1dG9jb21taXQ9MCwgbnVtcmVzdWx0cz0zCistLSBU RVNUIHVzaW5nIEZldGNoPTE7RmV0Y2hSZWZjdXJzb3JzPTEsIGF1dG9jb21taXQ9MCwgbnVtcmVz dWx0cz0zCiBjb25uZWN0ZWQKIE91dHB1dCBwYXJhbSBudW1fY3Vyc29yIGlzIDIKIC0tMSBSZXN1 bHQgc2V0OgpkaWZmIC0tZ2l0IGEvdGVzdC9zcmMvZmV0Y2gtcmVmY3Vyc29ycy10ZXN0LmMgYi90 ZXN0L3NyYy9mZXRjaC1yZWZjdXJzb3JzLXRlc3QuYwppbmRleCAwMWU1OGU0Li45NDUzOTQ5IDEw MDY0NAotLS0gYS90ZXN0L3NyYy9mZXRjaC1yZWZjdXJzb3JzLXRlc3QuYworKysgYi90ZXN0L3Ny Yy9mZXRjaC1yZWZjdXJzb3JzLXRlc3QuYwpAQCAtMTA4LDEyICsxMDgsMTMgQEAgaW50IG1haW4o aW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewogCXNldHVwX3Byb2NlZHVyZSgpOwogCi0JcmVmY3Vy c29yX3Rlc3QoIkZldGNoUmVmY3Vyc29ycz0wIiwgU1FMX0FVVE9DT01NSVRfT04sIDIpOwotCXJl ZmN1cnNvcl90ZXN0KCJGZXRjaFJlZmN1cnNvcnM9MSIsIFNRTF9BVVRPQ09NTUlUX09OLCAyKTsK LQlyZWZjdXJzb3JfdGVzdCgiRmV0Y2hSZWZjdXJzb3JzPTEiLCBTUUxfQVVUT0NPTU1JVF9PRkYs IDApOwotCXJlZmN1cnNvcl90ZXN0KCJGZXRjaFJlZmN1cnNvcnM9MSIsIFNRTF9BVVRPQ09NTUlU X09GRiwgMSk7Ci0JcmVmY3Vyc29yX3Rlc3QoIkZldGNoUmVmY3Vyc29ycz0xIiwgU1FMX0FVVE9D T01NSVRfT0ZGLCAyKTsKLQlyZWZjdXJzb3JfdGVzdCgiRmV0Y2hSZWZjdXJzb3JzPTEiLCBTUUxf QVVUT0NPTU1JVF9PRkYsIDMpOworCS8qIFVzaW5nIGEgZmV0Y2ggY2FjaGUgc2l6ZSBvZiAxIHRv IHRlc3QgbXVsdGlwbGUgZmV0Y2hlcyBwZXIgY3Vyc29yICovCisJcmVmY3Vyc29yX3Rlc3QoIkZl dGNoPTE7RmV0Y2hSZWZjdXJzb3JzPTAiLCBTUUxfQVVUT0NPTU1JVF9PTiwgMik7CisJcmVmY3Vy c29yX3Rlc3QoIkZldGNoPTE7RmV0Y2hSZWZjdXJzb3JzPTEiLCBTUUxfQVVUT0NPTU1JVF9PTiwg Mik7CisJcmVmY3Vyc29yX3Rlc3QoIkZldGNoPTE7RmV0Y2hSZWZjdXJzb3JzPTEiLCBTUUxfQVVU T0NPTU1JVF9PRkYsIDApOworCXJlZmN1cnNvcl90ZXN0KCJGZXRjaD0xO0ZldGNoUmVmY3Vyc29y cz0xIiwgU1FMX0FVVE9DT01NSVRfT0ZGLCAxKTsKKwlyZWZjdXJzb3JfdGVzdCgiRmV0Y2g9MTtG ZXRjaFJlZmN1cnNvcnM9MSIsIFNRTF9BVVRPQ09NTUlUX09GRiwgMik7CisJcmVmY3Vyc29yX3Rl c3QoIkZldGNoPTE7RmV0Y2hSZWZjdXJzb3JzPTEiLCBTUUxfQVVUT0NPTU1JVF9PRkYsIDMpOwog CiAJcmV0dXJuIDA7CiB9Ci0tIAoyLjM1LjEud2luZG93cy4yCgo= --00000000000052106005de8b03c1--