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.96) (envelope-from ) id 1wA0Se-001ybh-0L for pgsql-hackers@arkaria.postgresql.org; Tue, 07 Apr 2026 07:02:56 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wA0Sc-00F73u-1D for pgsql-hackers@arkaria.postgresql.org; Tue, 07 Apr 2026 07:02:54 +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.96) (envelope-from ) id 1wA0Sc-00F73l-0B for pgsql-hackers@lists.postgresql.org; Tue, 07 Apr 2026 07:02:54 +0000 Received: from mail-qk1-x730.google.com ([2607:f8b0:4864:20::730]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wA0SZ-00000001376-3mtP for pgsql-hackers@lists.postgresql.org; Tue, 07 Apr 2026 07:02:54 +0000 Received: by mail-qk1-x730.google.com with SMTP id af79cd13be357-8cb38e86cf2so470276585a.1 for ; Tue, 07 Apr 2026 00:02:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775545370; cv=none; d=google.com; s=arc-20240605; b=fh+qX7oXyqE8wqGqNZlidUAbc/Om+laLRmxmsdGmDMGOaBWLI+p7IXtvWxFp3vpGNK uZjxfRjODXsqU5PtHJzAk4yW/9kwKRCrLQyAuI1qphg94YWI/vd5IvHowdMO9KcEJvXA xQwWHVOACoFCA7rNe+kB6+IszJW7VAk0iWtK13row7BViYxj5neHgF0X/GzStW/zNOx/ 6jenHXdEgw7XXYQoRqadOq41JY/CQQJ3pJffUCYau738ngfTkzs4Z/mvA0vUT+yH9Tvb LyXdCc/XwUrNnTX+lZfU0zujk/+UrxrYCCxrTgnNou3UroikbCUQms74CYREKcNSmqJM f2xg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:mime-version:dkim-signature; bh=5nbv470U9vbhGKL/6JlTkU8NgtpWITFMuCS/27aRHjo=; fh=dxJXJbLzq9Nah1LUdsj4QTuQ3JoDScd0wp1YHY64NXM=; b=PYYFI4I2tIieSbi8YeSf2C/FRuDfKjDvcudQUG3mnoI18Z1g0sizi58rHpuUhyNTsj p52mKi6AnB9T8IFO+sc3CZik90tmP7n0H9zywYRzqd0Gk+ZWAJzY4bycTqIWjcLyi3UI +0I2yoX86ATAVRP1XjYZI+JA5tkwModoSGVd+VbtnEHHqNLGApNlpefLe+LWhB0TY/zb 3l1LWhua4M+JVptNukx6ZbdhpSsXgM6ldRGRdD7FhOFx9686Lw6DVvu+JVZKGbPRhKM4 kJ748QjcbTpVguIYd/8jbsYZT6oWak65/yS7RwIxEAaIT2+uH1685UfNwRt3Lmm0V3yB sffg==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775545370; x=1776150170; darn=lists.postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=5nbv470U9vbhGKL/6JlTkU8NgtpWITFMuCS/27aRHjo=; b=B/gPmXAcIzMhqYQoc+vfPDV5eeNFTyYlmWoYGtAiaxHgy6yJdz32Yk2gyNZwiQApnE IuHQFgcncwZ9iNezRLnrfBWBqE1xxyPshmplkJ9wcgkzRf90e/5oWqtYrJZnN7SrFrKf 6DzBZNL9OpMbYydfj23tOu/oaj2hMFE8VnzBPhuShafHbbYK2n3mU9azPHk2YVxRCMTH J6Ty8g07mYhG5wRVs2sM8HjBHii09U3hAlbSspizoXm8x8xqllO5lieJS5euBFfqOWMj L08/zNS9/0zKtFaBo4kuYGZFVxw7c4y2h5rJeOFTE5pLCDIQOYk502NHixBLazmef8u+ +nyQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775545370; x=1776150170; h=to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=5nbv470U9vbhGKL/6JlTkU8NgtpWITFMuCS/27aRHjo=; b=Hc/N1zKLo5EkXBtqGdrzqW1SZp+ig9Arh9rsehYIFShKR3NynfJRkZdSm9Dkv08Lv6 zZ32MJqF6lJtGP0i2RSiDk9iIeeD0kXMI/HThGBo+XIVy00cdU7WF/7zzbqnGA+3h1oJ +XwJcykEPyJ7i4z7to/K75LPQvuEpOrao4JIPGjzE+Hr0ux8NLwThBh1dOJHCTUuDbNv +VaY0XzBwd6z1n0hAusubyQseElLHOpBBUFR+wp9ZmOl/f4joa2no/0kHezpwOFlq4EQ hGfZmOI+pVahadrMfOuzKGojQK1a8n4CsaFDkkB/tVPbW4VJ/Dw91wWMMTXzlGACRrsv vehA== X-Gm-Message-State: AOJu0YxhDPl1BuEJ6LKMSy6VgJy+zOGwVKHS9WtIeTymPos792shuRIh PD6CZw3xEt39zOUMxle8LCydZ8wt3/NEcrCVPWU45oJGZVuOfXV8RcGBvfcsW1CDfXn6MR9TEvP TsvRpNsnc3+250kd4XVepYLPk9B0zedz2c6Eb X-Gm-Gg: AeBDietp9TEg7Grw0zTwWQOS7PWY5497Aoa0TiEg4SMc4IvVnjKvb8M/mWfkPmSkDFs G/0XPcrwDvzAC923yLe36RU1dYhqtWiTK7iun34z7aA+5gko5itl6DTgtXpuUGXT2OKIUB+hULj eHySitW69BbF42dEM7TxJ+rxkpEjEuQLTRPuJysWK8X13vL6y51wMvjzcrhF5ogsQVTWSR8UqXc EFKiG3VHhT2qtds5Bgz2VpLv3fdPQl1Qj+GZPY2ulzy2khHDWiATOi/McEvG5HD2jzPp09x5rXE cLgNPyY= X-Received: by 2002:a05:622a:204:b0:50d:844f:3b34 with SMTP id d75a77b69052e-50d844f4107mr138202661cf.51.1775545370291; Tue, 07 Apr 2026 00:02:50 -0700 (PDT) MIME-Version: 1.0 From: Peter Smith Date: Tue, 7 Apr 2026 17:02:23 +1000 X-Gm-Features: AQROBzDQF6arvnm5C1BqY2JXMos5XZUygiZmHkENvnBWswxdagS-a7If6TRwjnk Message-ID: Subject: Logical Replication - revisit `is_table_publication` function implementation To: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000148c94064ed95fe5" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000148c94064ed95fe5 Content-Type: text/plain; charset="UTF-8" Hi, after confirming my understanding of pg_publication_rel [1], I revisited some logical replication internal functions. Specifically. * The `is_table_publication` function is for checking if the publication has a clause like "FOR TABLE t1". * The `is_schema_publication` function is for checking if the publication has a clause like "FOR TABLES IN SCHEMA s1". Notice that neither of these ("FOR TABLE", "FOR TABLES IN SCHEMA") clauses are possible simultaneously with "FOR ALL TABLES". And we can readily discover if "FOR ALL TABLES" (aka `puballtables`) is present from the pubform. We can use this to optimise and simplify the implementations of the `is_schema_publication` and `is_table_publication` functions. PSA patch v1. AFAICT, the result is: - less code + simpler logic. e.g. is_table_publication does not check 'prexcept' anymore - more efficient. e.g. skips unnecessary scanning when puballtables is true. - more consistent. e.g., both functions are now almost identical. Thoughts? ====== [1] https://www.postgresql.org/message-id/flat/CAHut%2BPv1UKR_bxmN7wcCCpQveHoYprvH-hbdFq8gsaH1Ye7B_w%40mail.gmail.com Kind Regards, Peter Smith. Fujitsu Australia --000000000000148c94064ed95fe5 Content-Type: application/octet-stream; name="v1-0001-rewrite-is_table_publication.patch" Content-Disposition: attachment; filename="v1-0001-rewrite-is_table_publication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mno9qcue0 RnJvbSA0ZmI3ZjIxODBmNTY3NGU1Mjc2MzUxMThhOTY3YjBlMmZkMjI4ZTViIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBTbWl0aCA8cGV0ZXIuYi5zbWl0aEBmdWppdHN1LmNv bT4KRGF0ZTogVHVlLCA3IEFwciAyMDI2IDE2OjMxOjIxICsxMDAwClN1YmplY3Q6IFtQQVRDSCB2 MV0gcmV3cml0ZSBpc190YWJsZV9wdWJsaWNhdGlvbgoKLS0tCiBzcmMvYmFja2VuZC9jYXRhbG9n L3BnX3B1YmxpY2F0aW9uLmMgICB8IDM4ICsrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tCiBzcmMv YmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyB8ICA3ICsrLS0tCiBzcmMvaW5jbHVk ZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmggICB8ICA0ICstLQogMyBmaWxlcyBjaGFuZ2VkLCAy MiBpbnNlcnRpb25zKCspLCAyNyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1Ymxp Y2F0aW9uLmMKaW5kZXggYTQzZDM4NWM2MDUuLmM2MDg4NWRiMTBhIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxv Zy9wZ19wdWJsaWNhdGlvbi5jCkBAIC0yNzUsMTkgKzI3NSwyMyBAQCBmaWx0ZXJfcGFydGl0aW9u cyhMaXN0ICp0YWJsZV9pbmZvcykKICAqIHNjaGVtYSBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIHB1 YmxpY2F0aW9uLgogICovCiBib29sCi1pc19zY2hlbWFfcHVibGljYXRpb24oT2lkIHB1YmlkKQor aXNfc2NoZW1hX3B1YmxpY2F0aW9uKEZvcm1fcGdfcHVibGljYXRpb24gcHViZm9ybSkKIHsKIAlS ZWxhdGlvbglwdWJzY2hzcmVsOwogCVNjYW5LZXlEYXRhIHNjYW5rZXk7CiAJU3lzU2NhbkRlc2Mg c2NhbjsKIAlIZWFwVHVwbGUJdHVwOwotCWJvb2wJCXJlc3VsdCA9IGZhbHNlOworCWJvb2wJCXJl c3VsdDsKKworCS8qIEZPUiBUQUJMRVMgSU4gU0NIRU1BIGNhbm5vdCBjb2V4aXN0IHdpdGggRk9S IEFMTCBUQUJMRVMuICovCisJaWYgKHB1YmZvcm0tPnB1YmFsbHRhYmxlcykKKwkJcmV0dXJuIGZh bHNlOwogCiAJcHVic2Noc3JlbCA9IHRhYmxlX29wZW4oUHVibGljYXRpb25OYW1lc3BhY2VSZWxh dGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOwogCVNjYW5LZXlJbml0KCZzY2Fua2V5LAogCQkJCUFu dW1fcGdfcHVibGljYXRpb25fbmFtZXNwYWNlX3BucHViaWQsCiAJCQkJQlRFcXVhbFN0cmF0ZWd5 TnVtYmVyLCBGX09JREVRLAotCQkJCU9iamVjdElkR2V0RGF0dW0ocHViaWQpKTsKKwkJCQlPYmpl Y3RJZEdldERhdHVtKHB1YmZvcm0tPm9pZCkpOwogCiAJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nh bihwdWJzY2hzcmVsLAogCQkJCQkJCSAgUHVibGljYXRpb25OYW1lc3BhY2VQbm5zcGlkUG5wdWJp ZEluZGV4SWQsCkBAIC0zMDIsNDEgKzMwNiwzMyBAQCBpc19zY2hlbWFfcHVibGljYXRpb24oT2lk IHB1YmlkKQogfQogCiAvKgotICogUmV0dXJucyB0cnVlIGlmIHRoZSBwdWJsaWNhdGlvbiBoYXMg ZXhwbGljaXRseSBpbmNsdWRlZCByZWxhdGlvbiAoaS5lLiwKLSAqIG5vdCBtYXJrZWQgYXMgRVhD RVBUKS4KKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcHVibGljYXRpb24gaGFzIGV4cGxpY2l0bHkg aW5jbHVkZWQgcmVsYXRpb25zIChlLmcuLAorICogRk9SIFRBQkxFKS4KICAqLwogYm9vbAotaXNf dGFibGVfcHVibGljYXRpb24oT2lkIHB1YmlkKQoraXNfdGFibGVfcHVibGljYXRpb24oRm9ybV9w Z19wdWJsaWNhdGlvbiBwdWJmb3JtKQogewogCVJlbGF0aW9uCXB1YnJlbHNyZWw7CiAJU2Nhbktl eURhdGEgc2NhbmtleTsKIAlTeXNTY2FuRGVzYyBzY2FuOwogCUhlYXBUdXBsZQl0dXA7Ci0JYm9v bAkJcmVzdWx0ID0gZmFsc2U7CisJYm9vbAkJcmVzdWx0OworCisJLyogRk9SIFRBQkxFIGNhbm5v dCBjb2V4aXN0IHdpdGggRk9SIEFMTCBUQUJMRVMuICovCisJaWYgKHB1YmZvcm0tPnB1YmFsbHRh YmxlcykKKwkJcmV0dXJuIGZhbHNlOwogCiAJcHVicmVsc3JlbCA9IHRhYmxlX29wZW4oUHVibGlj YXRpb25SZWxSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOwogCVNjYW5LZXlJbml0KCZzY2Fu a2V5LAogCQkJCUFudW1fcGdfcHVibGljYXRpb25fcmVsX3BycHViaWQsCiAJCQkJQlRFcXVhbFN0 cmF0ZWd5TnVtYmVyLCBGX09JREVRLAotCQkJCU9iamVjdElkR2V0RGF0dW0ocHViaWQpKTsKKwkJ CQlPYmplY3RJZEdldERhdHVtKHB1YmZvcm0tPm9pZCkpOwogCiAJc2NhbiA9IHN5c3RhYmxlX2Jl Z2luc2NhbihwdWJyZWxzcmVsLAogCQkJCQkJCSAgUHVibGljYXRpb25SZWxQcnB1YmlkSW5kZXhJ ZCwKIAkJCQkJCQkgIHRydWUsIE5VTEwsIDEsICZzY2Fua2V5KTsKIAl0dXAgPSBzeXN0YWJsZV9n ZXRuZXh0KHNjYW4pOwotCWlmIChIZWFwVHVwbGVJc1ZhbGlkKHR1cCkpCi0JewotCQlGb3JtX3Bn X3B1YmxpY2F0aW9uX3JlbCBwdWJyZWw7Ci0KLQkJcHVicmVsID0gKEZvcm1fcGdfcHVibGljYXRp b25fcmVsKSBHRVRTVFJVQ1QodHVwKTsKLQotCQkvKgotCQkgKiBGb3IgYW55IHB1YmxpY2F0aW9u LCBwZ19wdWJsaWNhdGlvbl9yZWwgY29udGFpbnMgZWl0aGVyIG9ubHkgRVhDRVBUCi0JCSAqIGVu dHJpZXMgb3Igb25seSBleHBsaWNpdGx5IGluY2x1ZGVkIHRhYmxlcy4gVGhlcmVmb3JlLCBleGFt aW5pbmcKLQkJICogdGhlIGZpcnN0IHR1cGxlIGlzIHN1ZmZpY2llbnQgdG8gZGV0ZXJtaW5lIHRh YmxlIGluY2x1c2lvbi4KLQkJICovCi0JCXJlc3VsdCA9ICFwdWJyZWwtPnByZXhjZXB0OwotCX0K KwlyZXN1bHQgPSBIZWFwVHVwbGVJc1ZhbGlkKHR1cCk7CiAKIAlzeXN0YWJsZV9lbmRzY2FuKHNj YW4pOwogCXRhYmxlX2Nsb3NlKHB1YnJlbHNyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCmluZGV4IDQ0MGFkYjM1NmFkLi4zNjg1YzcxMWM0 OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKKysr IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKQEAgLTEyNjEsNyArMTI2 MSw3IEBAIEFsdGVyUHVibGljYXRpb25UYWJsZXMoQWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0bXQs IEhlYXBUdXBsZSB0dXAsCiAJewogCQlUcmFuc2Zvcm1QdWJXaGVyZUNsYXVzZXMocmVscywgcXVl cnlTdHJpbmcsIHB1YmZvcm0tPnB1YnZpYXJvb3QpOwogCi0JCXB1Ymxpc2hfc2NoZW1hIHw9IGlz X3NjaGVtYV9wdWJsaWNhdGlvbihwdWJpZCk7CisJCXB1Ymxpc2hfc2NoZW1hIHw9IGlzX3NjaGVt YV9wdWJsaWNhdGlvbihwdWJmb3JtKTsKIAogCQlDaGVja1B1YlJlbGF0aW9uQ29sdW1uTGlzdChz dG10LT5wdWJuYW1lLCByZWxzLCBwdWJsaXNoX3NjaGVtYSwKIAkJCQkJCQkJICAgcHViZm9ybS0+ cHVidmlhcm9vdCk7CkBAIC0xNTg1LDggKzE1ODUsNyBAQCBDaGVja0FsdGVyUHVibGljYXRpb24o QWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0bXQsIEhlYXBUdXBsZSB0dXAsCiAJCSAqIElmIHRoZSBw dWJsaWNhdGlvbiBhbHJlYWR5IGNvbnRhaW5zIHNwZWNpZmljIHRhYmxlcyBvciBzY2hlbWFzLCB3 ZQogCQkgKiBwcmV2ZW50IHN3aXRjaGluZyB0byBhIEFMTCBzdGF0ZS4KIAkJICovCi0JCWlmIChp c190YWJsZV9wdWJsaWNhdGlvbihwdWJmb3JtLT5vaWQpIHx8Ci0JCQlpc19zY2hlbWFfcHVibGlj YXRpb24ocHViZm9ybS0+b2lkKSkKKwkJaWYgKGlzX3RhYmxlX3B1YmxpY2F0aW9uKHB1YmZvcm0p IHx8IGlzX3NjaGVtYV9wdWJsaWNhdGlvbihwdWJmb3JtKSkKIAkJewogCQkJZXJlcG9ydChFUlJP UiwKIAkJCQkJZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRF KSwKQEAgLTIyMDIsNyArMjIwMSw3IEBAIEFsdGVyUHVibGljYXRpb25Pd25lcl9pbnRlcm5hbChS ZWxhdGlvbiByZWwsIEhlYXBUdXBsZSB0dXAsIE9pZCBuZXdPd25lcklkKQogCQlpZiAoIXN1cGVy dXNlcl9hcmcobmV3T3duZXJJZCkpCiAJCXsKIAkJCWlmIChmb3JtLT5wdWJhbGx0YWJsZXMgfHwg Zm9ybS0+cHViYWxsc2VxdWVuY2VzIHx8Ci0JCQkJaXNfc2NoZW1hX3B1YmxpY2F0aW9uKGZvcm0t Pm9pZCkpCisJCQkJaXNfc2NoZW1hX3B1YmxpY2F0aW9uKGZvcm0pKQogCQkJCWVyZXBvcnQoRVJS T1IsCiAJCQkJCQllcnJjb2RlKEVSUkNPREVfSU5TVUZGSUNJRU5UX1BSSVZJTEVHRSksCiAJCQkJ CQllcnJtc2coInBlcm1pc3Npb24gZGVuaWVkIHRvIGNoYW5nZSBvd25lciBvZiBwdWJsaWNhdGlv biBcIiVzXCIiLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlv bi5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oCmluZGV4IDg5YjRiYjE0 ZjYyLi40NDgzNzMzNjNmYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJs aWNhdGlvbi5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaApAQCAt MTk0LDggKzE5NCw4IEBAIGV4dGVybiBPaWQJR2V0VG9wTW9zdEFuY2VzdG9ySW5QdWJsaWNhdGlv bihPaWQgcHVib2lkLCBMaXN0ICphbmNlc3RvcnMsCiAJCQkJCQkJCQkJCWludCAqYW5jZXN0b3Jf bGV2ZWwpOwogCiBleHRlcm4gYm9vbCBpc19wdWJsaXNoYWJsZV9yZWxhdGlvbihSZWxhdGlvbiBy ZWwpOwotZXh0ZXJuIGJvb2wgaXNfc2NoZW1hX3B1YmxpY2F0aW9uKE9pZCBwdWJpZCk7Ci1leHRl cm4gYm9vbCBpc190YWJsZV9wdWJsaWNhdGlvbihPaWQgcHViaWQpOworZXh0ZXJuIGJvb2wgaXNf c2NoZW1hX3B1YmxpY2F0aW9uKEZvcm1fcGdfcHVibGljYXRpb24gcHViZm9ybSk7CitleHRlcm4g Ym9vbCBpc190YWJsZV9wdWJsaWNhdGlvbihGb3JtX3BnX3B1YmxpY2F0aW9uIHB1YmZvcm0pOwog ZXh0ZXJuIGJvb2wgY2hlY2tfYW5kX2ZldGNoX2NvbHVtbl9saXN0KFB1YmxpY2F0aW9uICpwdWIs IE9pZCByZWxpZCwKIAkJCQkJCQkJCQlNZW1vcnlDb250ZXh0IG1jeHQsIEJpdG1hcHNldCAqKmNv bHMpOwogZXh0ZXJuIE9iamVjdEFkZHJlc3MgcHVibGljYXRpb25fYWRkX3JlbGF0aW9uKE9pZCBw dWJpZCwgUHVibGljYXRpb25SZWxJbmZvICpwcmksCi0tIAoyLjQ3LjMKCg== --000000000000148c94064ed95fe5--