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 1i51i9-0002a8-Ka for pgsql-hackers@arkaria.postgresql.org; Tue, 03 Sep 2019 05:50:37 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1i51i8-0005YB-GY for pgsql-hackers@arkaria.postgresql.org; Tue, 03 Sep 2019 05:50:36 +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 1i51i7-0005Qu-VN for pgsql-hackers@lists.postgresql.org; Tue, 03 Sep 2019 05:50:36 +0000 Received: from lb2-smtp-cloud9.xs4all.net ([194.109.24.26]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.92) (envelope-from ) id 1i51i5-0002fs-23 for pgsql-hackers@postgresql.org; Tue, 03 Sep 2019 05:50:34 +0000 Received: from webmailclassic.xs4all.nl ([IPv6:2001:888:0:22:194:109:20:217]) by smtp-cloud9.xs4all.net with ESMTPA id 51i1ijyLhaDEa51i1isUG0; Tue, 03 Sep 2019 07:50:29 +0200 Received: from 2001:983:39b6:1:5cc3:6d08:9479:9c7e by webmailclassic.xs4all.nl with HTTP (HTTP/1.1 POST); Tue, 03 Sep 2019 07:50:29 +0200 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_2e92f348b345c9360a6872dc5f7400ea" Date: Tue, 03 Sep 2019 07:50:29 +0200 From: Erik Rijkers To: Euler Taveira Cc: Alexey Zagarin , Andres Freund , Petr Jelinek , pgsql-hackers , Suzuki Hironobu , a.kondratov@postgrespro.ru Subject: Re: row filtering for logical replication In-Reply-To: References: <7106a0fc-8017-c0fe-a407-9466c9407ff8@2ndquadrant.com> <20190203101439.26xgw5sv7vhgdcz2@alap3.anarazel.de> <94b31725538135038f2fccaf08bf3811@xs4all.nl> <5720d79c-3d09-4ac2-b233-355220471838@Spark> Message-ID: <9f25bd90d9f959f364efe79d92468682@xs4all.nl> X-Sender: er@xs4all.nl User-Agent: XS4ALL Webmail X-CMAE-Envelope: MS4wfHUeyjLkcBF1gbv/LlkCaAIfLTgZNUb573+NjxZADSoF4QiylJqtN5BXkgOIRGU+uuQTN9i8bQL8QXitqRgV/SekjG1nHdd9PTvjWuPf286Nvb3drOIi L45xsAtLFosksom1aC8/iUZfV0U4Mt5YUkaAtcWQXfXkiQg5plw092iTJ+Gj6hQOk1Fp7lcz7brAZQvQFfRCO9F6koUafW2SIPqMhXd19ki/I6D8hEp5Ha5G XckKvbfHDonY7kp3fLTiP4KolYumcyIanLOMUUavFFyWQcqvcMXbJ1WUPE5giiJIPOf+A2BPN1KMWW334qkJ0RvJc8Q5/auCHOjuaWMFAVee6pfEaxEJF/rK kp74fe3wEzMiVIPZHfsVcisYFSIhWnqxv5f2wQPNP1P1gSC0a3R2HDm4/3HN6kRV9SeKYT4/WtJE2j7czCAw3aKYqWyE3w== List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --=_2e92f348b345c9360a6872dc5f7400ea Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8; format=flowed On 2019-09-03 05:32, Euler Taveira wrote: > Em ter, 3 de set de 2019 às 00:16, Alexey Zagarin > escreveu: >> >> There are complaints in the log (both pub and sub) like: >> ERROR: trying to store a heap tuple into wrong type of slot >> >> I have no idea what causes that. >> >> Yeah, I've seen that too. It was fixed by Alexey Kondratov, in line >> 955 of 0005-Row-filtering-for-logical-replication.patch it should be >> &TTSOpsHeapTuple instead of &TTSOpsVirtual. >> > Ops... exact. That was an oversight while poking with different types > of slots. OK, I'll consider Alexey Kondratov's set of patches as the current state-of-the-art then. (They still apply.) I found a problem where I'm not sure it's a bug: The attached bash script does a test by setting up pgbench tables on both master and replica, and then sets up logical replication for a slice of pgbench_accounts. Then it does a short pgbench run, and loops until the results become identical(ok) (or breaks out after a certain time (NOK=not ok)). It turns out this did not work until I added a wait state after the CREATE SUBSCRIPTION. It always fails without the wait state, and always works with the wait state. Do you agree this is a bug? thanks (also to both Alexeys :)) Erik Rijkers PS by the way, this script won't run as-is on other machines; it has stuff particular to my local setup. --=_2e92f348b345c9360a6872dc5f7400ea Content-Transfer-Encoding: base64 Content-Type: text/x-shellscript; name=logrep_rowfilter_2_nodes.sh Content-Disposition: attachment; filename=logrep_rowfilter_2_nodes.sh; size=7672 IyEvYmluL2Jhc2gKCiMgcG9zdGdyZXMgYmluYXJ5IGNvbXBpbGVkIHdpdGggCiMKIyBwZ3BhdGNo ZXMvMDEzMC9sb2dyZXBfcm93ZmlsdGVyLzIwMTkwOTAyL3YyLTAwMDEtUmVtb3ZlLXVudXNlZC1h dHR0eXBtb2QtY29sdW1uLWZyb20taW5pdGlhbC10YWJsZS5wYXRjaAojIHBncGF0Y2hlcy8wMTMw L2xvZ3JlcF9yb3dmaWx0ZXIvMjAxOTA5MDIvdjItMDAwMi1TdG9yZS1udW1iZXItb2YtdHVwbGVz LWluLVdhbFJjdkV4ZWNSZXN1bHQucGF0Y2ggICAgICAgCiMgcGdwYXRjaGVzLzAxMzAvbG9ncmVw X3Jvd2ZpbHRlci8yMDE5MDkwMi92Mi0wMDAzLVJlZmFjdG9yLWZ1bmN0aW9uLWNyZWF0ZV9lc3Rh dGVfZm9yX3JlbGF0aW9uLnBhdGNoICAgICAKIyBwZ3BhdGNoZXMvMDEzMC9sb2dyZXBfcm93Zmls dGVyLzIwMTkwOTAyL3YyLTAwMDQtUmVuYW1lLWEtV0hFUkUtbm9kZS5wYXRjaCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIAojIHBncGF0Y2hlcy8wMTMwL2xvZ3JlcF9yb3dmaWx0ZXIvMjAx OTA5MDIvdjItMDAwNS1Sb3ctZmlsdGVyaW5nLWZvci1sb2dpY2FsLXJlcGxpY2F0aW9uLnBhdGNo ICAgICAgICAgICAgCiMgcGdwYXRjaGVzLzAxMzAvbG9ncmVwX3Jvd2ZpbHRlci8yMDE5MDkwMi92 Mi0wMDA2LVByaW50LXB1YmxpY2F0aW9uLVdIRVJFLWNvbmRpdGlvbi1pbi1wc3FsLnBhdGNoICAg ICAgICAKIyBwZ3BhdGNoZXMvMDEzMC9sb2dyZXBfcm93ZmlsdGVyLzIwMTkwOTAyL3YyLTAwMDct UHVibGljYXRpb24td2hlcmUtY29uZGl0aW9uLXN1cHBvcnQtZm9yLXBnX2R1bXAucGF0Y2ggIAoj IHBncGF0Y2hlcy8wMTMwL2xvZ3JlcF9yb3dmaWx0ZXIvMjAxOTA5MDIvdjItMDAwOC1EZWJ1Zy1m b3Itcm93LWZpbHRlcmluZy5wYXRjaCAgICAgICAgICAgICAgICAgICAgICAgICAgCiMgcGdwYXRj aGVzLzAxMzAvbG9ncmVwX3Jvd2ZpbHRlci8yMDE5MDkwMi92Mi0wMDA5LUFkZC1zaW1wbGUtQkRS LXRlc3QtZm9yLXJvdy1maWx0ZXJpbmcucGF0Y2gKIAoKdW5zZXQgUEdEQVRBQkFTRSBQR1BPUlQg UEdTRVJWSUNFCmV4cG9ydCBQR0RBVEFCQVNFPXBvc3RncmVzCgpyb290X2Rpcj0vdG1wL2Nhc2Nh ZGUvbG9ncmVwX3Jvd2ZpbHRlcgoKbWtkaXIgLXAgJHJvb3RfZGlyCgpCSU49JEhPTUUvcGdfc3R1 ZmYvcGdfaW5zdGFsbGF0aW9ucy9wZ3NxbC5sb2dyZXBfcm93ZmlsdGVyL2JpbgoKZXhwb3J0IFBB VEg9JEJJTjokUEFUSAoKICBpbml0ZGI9JEJJTi9pbml0ZGIKcG9zdGdyZXM9JEJJTi9wb3N0Z3Jl cwogIHBnX2N0bD0kQklOL3BnX2N0bApiYXNlcG9ydD02NTI1CiAgIHBvcnQxPSQoKCAkYmFzZXBv cnQgKyAwICkpIAogICBwb3J0Mj0kKCggJGJhc2Vwb3J0ICsgMSApKQogYXBwbmFtZT1yb3dmaWx0 ZXIKCm51bV9pbnN0YW5jZXM9MgogICAgICAgIHNjYWxlPTEgICAgICB3aGVyZT0id2hlcmUgKGFp ZCBiZXR3ZWVuIDQwMDAwIGFuZCA1MDAwMC0xKSIKICAgICAjICBzY2FsZT0xMCAgICAgd2hlcmU9 IndoZXJlIChhaWQgYmV0d2VlbiA0MDAwMDAgYW5kIDQwMDAwMCs1MDAwMC0xKSIKICAgICAgY2xp ZW50cz02NAogICAgIGR1cmF0aW9uPTIwCiAgICAgICAgIHdhaXQ9MTAgIEJBU1RBX0NPVU5UPTQw ICAjICAgNzIwMCAgICMgIHdhaXQgc2Vjb25kcyBpbiB0b3RhbCAgCgppZiBbWyAtZCAkcm9vdF9k aXIvaW5zdGFuY2UxIF1dOyB0aGVuIHJtIC1yZiAkcm9vdF9kaXIvaW5zdGFuY2UxOyBmaQppZiBb WyAtZCAkcm9vdF9kaXIvaW5zdGFuY2UyIF1dOyB0aGVuIHJtIC1yZiAkcm9vdF9kaXIvaW5zdGFu Y2UyOyBmaQppZiBbWyAtZCAkcm9vdF9kaXIvaW5zdGFuY2UxIF1dOyB0aGVuIGV4aXQgOyBmaQpp ZiBbWyAtZCAkcm9vdF9kaXIvaW5zdGFuY2UyIF1dOyB0aGVuIGV4aXQgOyBmaQoKZGV2ZWxfZmls ZT0vdG1wL2J1Z3MKZWNobyBmaWx0ZXJidWc+JGRldmVsX2ZpbGUKCmZvciBuIGluIGBzZXEgMSAk bnVtX2luc3RhbmNlc2AKZG8KICBpbnN0YW5jZT1pbnN0YW5jZSRuCiAgc2VydmVyX2Rpcj0kcm9v dF9kaXIvJGluc3RhbmNlCiAgZGF0YV9kaXI9JHNlcnZlcl9kaXIvZGF0YQogIHBvcnQ9JCgoICRi YXNlcG9ydCArICRuIC0xICkpCiAgbG9nZmlsZT0kc2VydmVyX2Rpci9sb2dmaWxlLiRwb3J0CiAg ZWNobyAiLS0gJGluaXRkYiAtLXBnZGF0YT0kZGF0YV9kaXIgLS1lbmNvZGluZz1VVEY4IC0tcHdm aWxlPSRkZXZlbF9maWxlICIKICAgICAgICAgICAkaW5pdGRiIC0tcGdkYXRhPSRkYXRhX2RpciAt LWVuY29kaW5nPVVURjggLS1wd2ZpbGU9JGRldmVsX2ZpbGUgICY+IC9kZXYvbnVsbCAKICAoICRw b3N0Z3JlcyAgLUQgJGRhdGFfZGlyIC1wICRwb3J0IFwKICAgIC0td2FsX2xldmVsPWxvZ2ljYWwg LS1sb2dnaW5nX2NvbGxlY3Rvcj1vbiBcCiAgICAtLWNsaWVudF9taW5fbWVzc2FnZXM9d2Fybmlu ZyBcCiAgICAtLWxvZ19kaXJlY3Rvcnk9JHNlcnZlcl9kaXIgLS1sb2dfZmlsZW5hbWU9bG9nZmls ZS4ke3BvcnR9IFwKICAgIC0tbG9nX3JlcGxpY2F0aW9uX2NvbW1hbmRzPW9uICYgKSAmPiAvZGV2 L251bGwKZG9uZSAKCmVjaG8gInNsZWVwIDNzIgpzbGVlcCAzCgplY2hvICIKICBkcm9wIHRhYmxl IGlmIGV4aXN0cyBwZ2JlbmNoX2FjY291bnRzOwogIGRyb3AgdGFibGUgaWYgZXhpc3RzIHBnYmVu Y2hfYnJhbmNoZXM7CiAgZHJvcCB0YWJsZSBpZiBleGlzdHMgcGdiZW5jaF90ZWxsZXJzOwogIGRy b3AgdGFibGUgaWYgZXhpc3RzIHBnYmVuY2hfaGlzdG9yeTsiIHwgcHNxbCAtcVhwICRwb3J0MSBc CiYmIGVjaG8gIgogIGRyb3AgdGFibGUgaWYgZXhpc3RzIHBnYmVuY2hfYWNjb3VudHM7CiAgZHJv cCB0YWJsZSBpZiBleGlzdHMgcGdiZW5jaF9icmFuY2hlczsKICBkcm9wIHRhYmxlIGlmIGV4aXN0 cyBwZ2JlbmNoX3RlbGxlcnM7CiAgZHJvcCB0YWJsZSBpZiBleGlzdHMgcGdiZW5jaF9oaXN0b3J5 OyIgfCBwc3FsIC1xWHAgJHBvcnQyIFwKJiYgcGdiZW5jaCAtcCAkcG9ydDEgLXFpcyAkc2NhbGUg XAomJiBlY2hvICJhbHRlciB0YWJsZSBwZ2JlbmNoX2hpc3RvcnkgYWRkIGNvbHVtbiBoaWQgc2Vy aWFsIHByaW1hcnkga2V5OyIgXAogIHwgcHNxbCAtcTFYcCAkcG9ydDEgJiYgcGdfZHVtcCAtRiBj IC1wICRwb3J0MSBcCiAgICAgLS1leGNsdWRlLXRhYmxlLWRhdGE9cGdiZW5jaF9oaXN0b3J5ICBc CiAgICAgLS1leGNsdWRlLXRhYmxlLWRhdGE9cGdiZW5jaF9hY2NvdW50cyBcCiAgICAgLS1leGNs dWRlLXRhYmxlLWRhdGE9cGdiZW5jaF9icmFuY2hlcyBcCiAgICAgLS1leGNsdWRlLXRhYmxlLWRh dGE9cGdiZW5jaF90ZWxsZXJzICBcCiAgIC10IHBnYmVuY2hfaGlzdG9yeSAtdCBwZ2JlbmNoX2Fj Y291bnRzIFwKICAgLXQgcGdiZW5jaF9icmFuY2hlcyAtdCBwZ2JlbmNoX3RlbGxlcnMgXAogIHwg cGdfcmVzdG9yZSAtMSAtcCAkcG9ydDIgLWQgcG9zdGdyZXMKCgpwdWIxPXB1Yl8ke3BvcnQxfV90 b18ke3BvcnQyfQpzdWIxPXN1Yl8ke3BvcnQyfV9mcl8ke3BvcnQxfQplY2hvIC1uZSAiCmNyZWF0 ZSBwdWJsaWNhdGlvbiAkcHViMTsKYWx0ZXIgIHB1YmxpY2F0aW9uICRwdWIxIGFkZCB0YWJsZSBw Z2JlbmNoX2FjY291bnRzICR3aGVyZSA7IC0tPiB3aGVyZQphbHRlciAgcHVibGljYXRpb24gJHB1 YjEgYWRkIHRhYmxlIHBnYmVuY2hfYnJhbmNoZXM7CmFsdGVyICBwdWJsaWNhdGlvbiAkcHViMSBh ZGQgdGFibGUgcGdiZW5jaF90ZWxsZXJzOwphbHRlciAgcHVibGljYXRpb24gJHB1YjEgYWRkIHRh YmxlIHBnYmVuY2hfaGlzdG9yeTsKIiB8IHBzcWwgLXAgJHBvcnQxIC1hcXRBWAoKIyMjICBzbGVl cCAxMCAgICMgbm8gbmVlZCBmb3IgYSB3YWl0CgplY2hvICIKY3JlYXRlIHN1YnNjcmlwdGlvbiAk c3ViMSBjb25uZWN0aW9uICdwb3J0PSRwb3J0MSBhcHBsaWNhdGlvbl9uYW1lPSRhcHBuYW1lJwog ICAgICAgcHVibGljYXRpb24gICRwdWIxIHdpdGgoZW5hYmxlZD1mYWxzZSk7CmFsdGVyICBzdWJz Y3JpcHRpb24gJHN1YjEgZW5hYmxlOyIgfCBwc3FsIC1wICRwb3J0MiAtYXF0QVgKCnNsZWVwIDEg ICAjICBXQUlUIE5FQ0VTU0FSWQoKZWNobyAiLS0gcGdiZW5jaCAtcCAkcG9ydDEgLWMgJGNsaWVu dHMgLWogOCAtVCAkZHVyYXRpb24gLW4gcG9zdGdyZXMgICAgIyAgc2NhbGUgJHNjYWxlIgogICAg ICAgICBwZ2JlbmNoIC1wICRwb3J0MSAtYyAkY2xpZW50cyAtaiA4IC1UICRkdXJhdGlvbiAtbiBw b3N0Z3JlcyAgICAjICBzY2FsZSAkc2NhbGUKZWNobwoKZWNobyAiICAgICAgIGFjY291bnRzICBi cmFuY2hlcyAgIHRlbGxlcnMgICBoaXN0b3J5IgplY2hvICIgICAgICAgLS0tLS0tLS0tIC0tLS0t LS0tLSAtLS0tLS0tLS0gLS0tLS0tLS0tIgoKIHNxbF9hPSJzZWxlY3QgKiBmcm9tIHBnYmVuY2hf YWNjb3VudHMgJHdoZXJlIG9yZGVyIGJ5IGFpZDsiCiBzcWxfYj0ic2VsZWN0ICogZnJvbSBwZ2Jl bmNoX2JyYW5jaGVzICAgICAgICBvcmRlciBieSBiaWQ7Igogc3FsX3Q9InNlbGVjdCAqIGZyb20g cGdiZW5jaF90ZWxsZXJzICAgICAgICAgb3JkZXIgYnkgdGlkOyIKIHNxbF9oPSJzZWxlY3QgKiBm cm9tIHBnYmVuY2hfaGlzdG9yeSAgICAgICAgIG9yZGVyIGJ5IGhpZDsiCnNxbGNfYT0ic2VsZWN0 IGNvdW50KCopIGZyb20gcGdiZW5jaF9hY2NvdW50cyAkd2hlcmU7IgpzcWxjX2I9InNlbGVjdCBj b3VudCgqKSBmcm9tIHBnYmVuY2hfYnJhbmNoZXMgICAgICAgOyIKc3FsY190PSJzZWxlY3QgY291 bnQoKikgZnJvbSBwZ2JlbmNoX3RlbGxlcnMgICAgICAgIDsiCnNxbGNfaD0ic2VsZWN0IGNvdW50 KCopIGZyb20gcGdiZW5jaF9oaXN0b3J5ICAgICAgICA7IgoKY291bnQ9MAoKd2hpbGUgW1sgMSAt ZXEgMSBdXQpkbwoKICBzZWNzPSQoKCAkY291bnQgKiAkd2FpdCApKQogIGNvdW50PSQoKCAkY291 bnQgKyAxICkpCgogICMgZGlmZmVyZW50IHZhbHVlcyBvdGhlcndpc2UgZG9udGNhcmUKICBtZDVf NjUxNT1hYmMgCiAgbWQ1XzY1MTY9eHl6CiAgbWQ1X2E9JChlY2hvICIkc3FsX2EiICB8IHBzcWwg LXF0QVhwICRwb3J0MSB8IG1kNXN1bSB8IGN1dCAtYjEtOSkKICBtZDVfYj0kKGVjaG8gIiRzcWxf YiIgIHwgcHNxbCAtcXRBWHAgJHBvcnQxIHwgbWQ1c3VtIHwgY3V0IC1iMS05KQogIG1kNV90PSQo ZWNobyAiJHNxbF90IiAgfCBwc3FsIC1xdEFYcCAkcG9ydDEgfCBtZDVzdW0gfCBjdXQgLWIxLTkp CiAgbWQ1X2g9JChlY2hvICIkc3FsX2giICB8IHBzcWwgLXF0QVhwICRwb3J0MSB8IG1kNXN1bSB8 IGN1dCAtYjEtOSkKICBjbnRfYT0kKGVjaG8gIiRzcWxjX2EiIHwgcHNxbCAtcXRBWHAgJHBvcnQx KQogIGNudF9iPSQoZWNobyAiJHNxbGNfYiIgfCBwc3FsIC1xdEFYcCAkcG9ydDEpCiAgY250X3Q9 JChlY2hvICIkc3FsY190IiB8IHBzcWwgLXF0QVhwICRwb3J0MSkKICBjbnRfaD0kKGVjaG8gIiRz cWxjX2giIHwgcHNxbCAtcXRBWHAgJHBvcnQxKQoKICBtZDVfMT0kKCBlY2hvICIkbWQ1X2EgJG1k NV9iICRtZDVfdCAkbWQ1X2giIHwgbWQ1c3VtIHwgY3V0IC1iMS05KQojIG1kNV8xPSQoIGVjaG8g IiRtZDVfYSAkbWQ1X2IgJG1kNV90IiAgICAgICAgfCBtZDVzdW0gfCBjdXQgLWIxLTkpCiAgZWNo byAgICAgICIkcG9ydDEgICAkbWQ1X2EgJG1kNV9iICRtZDVfdCAkbWQ1X2ggICAgJG1kNV8xICAg ICAgJGNudF9hICAkY250X2IgICRjbnRfdCAgJGNudF9oIgojIGVjaG8gICAgICAiJHBvcnQxICAg JG1kNV9hICRtZDVfYiAkbWQ1X3QgICAgICAgICAgICRtZDVfMSAgICAgICRjbnRfYSAgJGNudF9i ICAkY250X3QgICRjbnRfaCIKCiAgbWQ1X2E9JChlY2hvICIkc3FsX2EiICB8IHBzcWwgLXF0QVhw ICRwb3J0MiB8IG1kNXN1bSB8IGN1dCAtYjEtOSkKICBtZDVfYj0kKGVjaG8gIiRzcWxfYiIgIHwg cHNxbCAtcXRBWHAgJHBvcnQyIHwgbWQ1c3VtIHwgY3V0IC1iMS05KQogIG1kNV90PSQoZWNobyAi JHNxbF90IiAgfCBwc3FsIC1xdEFYcCAkcG9ydDIgfCBtZDVzdW0gfCBjdXQgLWIxLTkpCiAgbWQ1 X2g9JChlY2hvICIkc3FsX2giICB8IHBzcWwgLXF0QVhwICRwb3J0MiB8IG1kNXN1bSB8IGN1dCAt YjEtOSkKICBjbnRfYT0kKGVjaG8gIiRzcWxjX2EiIHwgcHNxbCAtcXRBWHAgJHBvcnQyKQogIGNu dF9iPSQoZWNobyAiJHNxbGNfYiIgfCBwc3FsIC1xdEFYcCAkcG9ydDIpCiAgY250X3Q9JChlY2hv ICIkc3FsY190IiB8IHBzcWwgLXF0QVhwICRwb3J0MikKICBjbnRfaD0kKGVjaG8gIiRzcWxjX2gi IHwgcHNxbCAtcXRBWHAgJHBvcnQyKQoKICBtZDVfMj0kKCBlY2hvICIkbWQ1X2EgJG1kNV9iICRt ZDVfdCAkbWQ1X2giIHwgbWQ1c3VtIHwgY3V0IC1iMS05KQojIG1kNV8yPSQoIGVjaG8gIiRtZDVf YSAkbWQ1X2IgJG1kNV90IiAgICAgICAgfCBtZDVzdW0gfCBjdXQgLWIxLTkpCgogIGVjaG8gICAg ICAiJHBvcnQyICAgJG1kNV9hICRtZDVfYiAkbWQ1X3QgJG1kNV9oICAgICRtZDVfMiAgICAgICRj bnRfYSAgJGNudF9iICAkY250X3QgICRjbnRfaCAgICAgICAgICAgICAgKCRjb3VudCAvICRzZWNz IHNlYykiCiMgZWNobyAgICAgICIkcG9ydDIgICAkbWQ1X2EgJG1kNV9iICRtZDVfdCAgICAgICAg ICAgJG1kNV8yICAgICAgJGNudF9hICAkY250X2IgICRjbnRfdCAgJGNudF9oICAgICAgICAgICAg ICAoJGNvdW50IC8gJHNlY3Mgc2VjKSIKCiAgaWYgW1sgIiRtZDVfMSIgPT0gIiRtZDVfMiIgXV0K ICB0aGVuCiAgICAgIGVjaG8gIiAgIG9rICgyKSIKICAgICAgYnJlYWsKICBmaQoKICBpZiBbWyAk c2VjcyAtZ3QgJEJBU1RBX0NPVU5UIF1dCiAgdGhlbgogICAgZWNobyAiICAgIE5PSyBidXQgQkFT VEEgICAoY291bnQgaXMgJGNvdW50LCBzZWNzIGlzICRzZWNzKSIKICAgICMgZHVtcCBzb21lIGRl dGFpbCBvZiB0aGUgcGdiZW5jaF9oaXN0b3J5IGRpZmY6CiAgICBmb3IgcCBpbiA2NTI1IDY1MjYK ICAgIGRvCiAgICAgIGVjaG8gInNlbGVjdCBjdXJyZW50X3NldHRpbmcoJ3BvcnQnKSwgY291bnQo KikgZnJvbSBwZ2JlbmNoX2hpc3Rvcnk7IiB8IHBzcWwgLXFYIC1kIHBvc3RncmVzIC1wICRwICYm IFwKICAgICAgZWNobyAic2VsZWN0ICogZnJvbSBwZ2JlbmNoX2hpc3Rvcnkgb3JkZXIgYnkgaGlk IiB8IHBzcWwgLXFYIC1kIHBvc3RncmVzIC1wICRwID4gb3V0X3BvcnRfJHAudHh0CiAgICAgCiAg ICBkb25lCiAgICBicmVhawogIGZpCgogIGVjaG8gIiBOT0sgICAoJHt3YWl0fXMpIgogIGVjaG8K CiAgc2xlZXAgJHdhaXQKCmRvbmUKZWNobwoKbWQ1c3VtIG91dF9wb3J0XyoudHh0CmVjaG8KCndj IC1sIG91dF9wb3J0XyoudHh0IHwgZ3JlcCAtRXYgdG90YWwKZWNobwoKaWYgW1sgMSAtZXEgMSBd XTsgdGhlbgoKIyAgc3RvcCBpbnN0YW5jZXMKZm9yIG4gaW4gYHNlcSAxICRudW1faW5zdGFuY2Vz YApkbwogIGluc3RhbmNlPWluc3RhbmNlJG4KICBzZXJ2ZXJfZGlyPSRyb290X2Rpci8kaW5zdGFu Y2UKICBkYXRhX2Rpcj0kc2VydmVyX2Rpci9kYXRhCiAgcG9ydD0kKCggJGJhc2Vwb3J0ICsgJG4g LSAxICkpCiAgbG9nZmlsZT0kc2VydmVyX2Rpci9sb2dmaWxlLiRwb3J0CiAgJHBnX2N0bCBzdG9w IC1EICRkYXRhX2RpciAtLW1vZGU9ZmFzdCAtLXdhaXQKZG9uZQoKZmkKCmlmIFtbIDAgLWVxIDEg XV07IHRoZW4KCiAgIyAgZGVsZXRlIGV2ZXJ5dGhpbmcKICBlY2hvICJybSAtcmYgL3RtcC9jYXNj YWRlL2xvZ3JlcF9yb3dmaWx0ZXIvaW5zdGFuY2UqIgogICAgICAgIHJtIC1yZiAvdG1wL2Nhc2Nh ZGUvbG9ncmVwX3Jvd2ZpbHRlci9pbnN0YW5jZSoKCmZpCg== --=_2e92f348b345c9360a6872dc5f7400ea--