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 1wDz3x-003Y9H-07 for pgsql-hackers@arkaria.postgresql.org; Sat, 18 Apr 2026 06:21:53 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wDz3w-00CDQX-0K for pgsql-hackers@arkaria.postgresql.org; Sat, 18 Apr 2026 06:21:52 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wDaMM-0082tQ-2u for pgsql-hackers@lists.postgresql.org; Fri, 17 Apr 2026 03:59:15 +0000 Received: from mail-dl1-x1236.google.com ([2607:f8b0:4864:20::1236]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wDaMJ-00000001Plv-23dk for pgsql-hackers@lists.postgresql.org; Fri, 17 Apr 2026 03:59:14 +0000 Received: by mail-dl1-x1236.google.com with SMTP id a92af1059eb24-12c565476d7so822666c88.1 for ; Thu, 16 Apr 2026 20:59:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1776398351; cv=none; d=google.com; s=arc-20240605; b=MHogQty5xxZ4qDZ+O/RR28GHqXS727jx6ywAXIlx08UQkfpT2GUyPyuuvQH9dxqJLo Sc0zDdmZO+gj7wkCnZO4XDdaH0NwPci3GlwUQqf3IxzUGTpdYOFVMVe1UFJwNHsz3NOu KZWitbZeYQiSrzw0gXeKkfwI7OuOdLt+sbzzZOoxZIaURrGkRU+aJkY/qiaoSgyLpxDu J8fA1E1UH0jIeU+8/f01GpacVvf1F425R51x/sLJ3Pgmx5uzzxfrEUbX1YEdxgzCAswk je0YSxJUmxXb0TWogVkH8/1tiKRsol/7fKLOyTlYKpza/YtHlY37ulqqxQNEbDpGKYJr Jeqw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=7E4AvWBe0+Xp+kw2gqKzha7I8xWE3Pxs5Prym56j0Mk=; fh=oc2zAFFIuEZe63J1j0/DfA8WQIVMy+NyufK4g1oT+TA=; b=E/itKwoPt6spyO2k2VL+qt5Nc9VfP2Jx7QaYwob1cAR1FvzrsSkbyoFZSg3Y6wh77R vzaJghDBxtjvNLCw8SWlvKlEdkzAzXiNQoVl8EsKB2zeSylf5u34Fp+32fgfVMuthgZ1 yFVFqPKzTy4jwFEt9/ivpgv5XQwI5Cc3LCuQ7UQsCzsccRO2KO5nTDT1365Uy2Njy4OP Nz3h2xCg5pbYIIqfyrQD8w9chPeAQlSuAVcIZeB9Vevs5CVL6SdhKbeAsKY4pCYohPB2 rVKQ1cm8X74mlX1tmiTg2jsYLwhrQHxOM0dHTLjtK5EltPAK5eRCFIsL49Fom7DnXkyW MRxw==; 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=postgres.ai; s=google; t=1776398351; x=1777003151; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=7E4AvWBe0+Xp+kw2gqKzha7I8xWE3Pxs5Prym56j0Mk=; b=Nl9h6MV9py6E6Xgii4yJ/MVKGbHrv78OfQQTw8nrSCNa52yNkdOKOo1QBC+cT0MKKa GJZi5TUO5cL8XgxBMRw2ZGnVLyloYfvNeColSNxIua5OsaJaA2JKSQz561ej5bkVObir nwx2Zy+u4MHjQZX3Y3zum7yoUpS4hqzrE/OGcSE2oeujMp5J1KLHrFZxd8ojZfZ5bIfH KRbSQzkIj02uo4GtnkKY7w0WkWRcLURBDjmtR7viMQ9m0KZ10vHIZDoaWib7EvetAZSm +zlUmq1Cdj5gTi66BjMOeO/lAe2sCRM9pjlBWqLdgis4cK9M4pY9fjFrmQ9AYEqLhwQf 4jSw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776398351; x=1777003151; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=7E4AvWBe0+Xp+kw2gqKzha7I8xWE3Pxs5Prym56j0Mk=; b=kWoVJSsNEmqdfXhu2PZ0VVFxFIC+e6TV+8zI8DaM9DM8u4S/0OFOJC9C3EGZefkNoz OZIAg5PyRJe8GSWNBvrJOBOvybsJ+8k1SUYfciqPUSwZ+efj/8AEAqWb+R2Pz6EWDGpY xeFDoWcGci+Q3/k09ZT290U1wiauyaxjfifv0cPCF8vU0ZOYY1BKK1mL1eViAGhpoLHO QmduDRYFa40NY8YWD0zeJMH6IiNc4UyMzaOPo/Cza+YoZPt0AB7489o8Xehkal+rY3yE +TIIwUUg59L2qn4CBKy4ezJGVpqBjHbtUaSRciful1s+QsFF+GPA1vj9VCd8uYAh2+R5 hFSg== X-Forwarded-Encrypted: i=1; AFNElJ+/IRtw8qz+4NA78AT83/8FlX/VD/nFt+qT9PkSLyzPbO+Kh+EezsMNed4g5bXNyFScpypRPTlpTMq3Lyox@lists.postgresql.org X-Gm-Message-State: AOJu0YzUiWt9+byMpVBDaZaWL6h9WpwZi+0unw5xEOEdOSki4j6dcWC7 8B1ZpZOcbwla2DpBfCjJuDQNGT/3reYVOsXbx1R0xpsv05/tMusorFB80tIeKhpYk11/j1d7UKo wawc1R+hIFM9Y/qymBVBgkSOnZ58/Q3YH4tpTmLPF8Q== X-Gm-Gg: AeBDietDaRgbS1GR3lpXUNHQFq+Sku07L2Sz0pohUZHbdG2BPTLI2QbYtriwgqzT03z J0IBALLB62F2Usc3mCdCcXYMgqV/z09y+wW3CIX6fS3uegZSANe4lUrnLynWmITk17uhgziufth BjWsiP7Ka469qLAIuDPgN0GINR2T6eLcEPBQFRmpIOJgJu0LuzGJXEl26uIRUQuinF2Lo9a4j02 FIkQOwyjtLhdBk8khgTYnjItfhjho+jx4EXR4PbSdu8rYuoM/+ekAfwGpjjKGoNR/E6sm5qyk0W HJURgAcrHYStFQNcgUE= X-Received: by 2002:a05:7022:f016:b0:11a:641f:ba11 with SMTP id a92af1059eb24-12c73fad616mr652456c88.29.1776398350804; Thu, 16 Apr 2026 20:59:10 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Nikolay Samokhvalov Date: Thu, 16 Apr 2026 20:58:58 -0700 X-Gm-Features: AQROBzCfGWQ2JhzmviczFKDBvLcrhkj-1nKErciUz2OeKuDQOuoc058ltjHpg_k Message-ID: Subject: Re: Inconsistent increment of pg_stat_database.xact_rollback with logical replication To: Rafael Thofehrn Castro Cc: pgsql-bugs@lists.postgresql.org, pgsql-hackers Content-Type: multipart/mixed; boundary="000000000000ae72b4064f9ff861" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000ae72b4064f9ff861 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Apr 16, 2026 at 7:19=E2=80=AFPM Rafael Thofehrn Castro wrote: > Column xact_rollback from pg_stat_database gets inconsistently incremente= d when logical replication is being used (on publisher side). ... > This is causing inconsistency in monitoring TPS metric of a database wher= e we eventually see sudden spikes of TPS in the order of millions. This still reproduces on master. I agree on the root cause: ReorderBufferProcessTXN() ends each decoded transaction with AbortCurrentTransaction() for catalog cleanup; in the walsender that is a top-level abort, so AtEOXact_PgStat_Database(isCommit=3Dfalse) increments the backend= -local pgStatXactRollback. The counts are flushed to shared stats on walsender exit, producing an acute spike. Result: for production systems with tight alerting on xact_rollback, this turns routine logical-replication operations (disabling a subscription, dropping a slot, walsender restart) into false-positive pages. Also experienced at GitLab [1][2][3]. Attaching a simple patch that adds a backend-local flag pgStatXactSkipCount= ers in pgstat_database.c that AtEOXact_PgStat_Database() honors to skip the counter bump. Included a TAP test that fails on master with 5/0 and passes with the patch= . If there is agreement on this shape, happy to send patches for all supported branches. Let me know what you think. [1] https://gitlab.com/gitlab-com/gl-infra/production/-/work_items/8290 [2] https://gitlab.com/postgres-ai/postgresql-consulting/tests-and-benchmar= ks/-/work_items/39 [3] https://gitlab.com/gitlab-org/orbit/knowledge-graph/-/work_items/406 Nik --000000000000ae72b4064f9ff861 Content-Type: application/octet-stream; name="v1-xact-rollback-decoding.patch" Content-Disposition: attachment; filename="v1-xact-rollback-decoding.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mo2dl3lo0 RnJvbSAxMWI3MGEwNzBjNDA0MzMzODlmZWM0NzY0NjQwNzhhNzAzODM4NGUzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOaWsgU2Ftb2todmFsb3YgPG5pa0BuaWtzLW1icC5sYW4+CkRh dGU6IFRodSwgMTYgQXByIDIwMjYgMTk6MjU6NTUgLTA3MDAKU3ViamVjdDogW1BBVENIXSBEbyBu b3QgYXR0cmlidXRlIGxvZ2ljYWwgZGVjb2RpbmcgYWJvcnRzIHRvIHhhY3Rfcm9sbGJhY2sKCk9u IGEgbG9naWNhbC1yZXBsaWNhdGlvbiBwdWJsaXNoZXIsIGV2ZXJ5IGRlY29kZWQgY29tbWl0dGVk CnRyYW5zYWN0aW9uIGJ1bXBzIHBnX3N0YXRfZGF0YWJhc2UueGFjdF9yb2xsYmFjayBiZWNhdXNl IHRoZSB3YWxzZW5kZXIKZW5kcyBlYWNoIGRlY29kZWQgdHJhbnNhY3Rpb24gd2l0aCBhIHRvcC1s ZXZlbCBBYm9ydEN1cnJlbnRUcmFuc2FjdGlvbigpCmZvciBjYXRhbG9nIGNsZWFudXAuICBUaGUg Y291bnRzIHN1cmZhY2UgaW4gc2hhcmVkIHN0YXRzIG9uIHdhbHNlbmRlcgpleGl0LCBwcm9kdWNp bmcgYSB2aXNpYmxlIHNwaWtlIHRoYXQgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCB1c2VyCnJvbGxi YWNrcy4KCkFkZCBwZ1N0YXRYYWN0U2tpcENvdW50ZXJzLCBhIGJhY2tlbmQtbG9jYWwgZmxhZyBj b25zdWx0ZWQgYnkKQXRFT1hhY3RfUGdTdGF0X0RhdGFiYXNlKCkgYWxvbmdzaWRlIHRoZSBleGlz dGluZyBwYXJhbGxlbC13b3JrZXIKY2hlY2suICBSZW9yZGVyQnVmZmVyUHJvY2Vzc1RYTigpIChi b3RoIGFib3J0IHNpdGVzLCBnYXRlZCBvbgohdXNpbmdfc3VidHhuKSBhbmQgU25hcEJ1aWxkQ2xl YXJFeHBvcnRlZFNuYXBzaG90KCkgYnJhY2tldCB0aGVpcgpBYm9ydEN1cnJlbnRUcmFuc2FjdGlv bigpIHdpdGggaXQuICBTdGFydFRyYW5zYWN0aW9uKCkgYXNzZXJ0cyB0aGUKZmxhZyBpcyBjbGVh ciB0byBjYXRjaCBsZWFrcy4KClRBUCB0ZXN0IHNyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzOV9w dWJsaXNoZXJfeGFjdF9yb2xsYmFjay5wbDoKNSBhdXRvY29tbWl0IElOU0VSVHMsIERJU0FCTEUg c3Vic2NyaXB0aW9uLCBhc3NlcnQgdGhlIHhhY3Rfcm9sbGJhY2sKZGVsdGEgaXMgMC4KClJlcG9y dGVkLWJ5OiBSYWZhZWwgVGhvZmVocm4gQ2FzdHJvCkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdy LmVzL20vQ0FHMG96TW9feFdRbiUyQkF2djhqemJiaGVQR3A1T25oZE8lMkJZV1RrZGc0ZmFXU1h6 MEp6ZyU0MG1haWwuZ21haWwuY29tCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGFj dC5jICAgICAgICAgICAgIHwgIDEgKwogLi4uL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1 ZmZlci5jICAgICAgIHwgMTQgKysrLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9z bmFwYnVpbGQuYyAgIHwgIDkgKystCiBzcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXRf ZGF0YWJhc2UuYyAgfCAzMSArKysrLS0tLQogc3JjL2luY2x1ZGUvcGdzdGF0LmggICAgICAgICAg ICAgICAgICAgICAgICAgIHwgIDMgKwogc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL21lc29uLmJ1aWxk ICAgICAgICAgICAgIHwgIDEgKwogLi4uL3QvMDM5X3B1Ymxpc2hlcl94YWN0X3JvbGxiYWNrLnBs ICAgICAgICAgIHwgNzEgKysrKysrKysrKysrKysrKysrKwogNyBmaWxlcyBjaGFuZ2VkLCAxMTUg aW5zZXJ0aW9ucygrKSwgMTUgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rl c3Qvc3Vic2NyaXB0aW9uL3QvMDM5X3B1Ymxpc2hlcl94YWN0X3JvbGxiYWNrLnBsCgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGFjdC5jIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL3RyYW5zYW0veGFjdC5jCmluZGV4IDQ4YmM5MGM5NjczNTMuLjE4ZGZmNTEyMDAwYzcgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hhY3QuYworKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvdHJhbnNhbS94YWN0LmMKQEAgLTIxMTgsNiArMjExOCw3IEBAIFN0YXJ0VHJh bnNhY3Rpb24odm9pZCkKIAogCS8qIGNoZWNrIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIHN0YXRl ICovCiAJQXNzZXJ0KHMtPnN0YXRlID09IFRSQU5TX0RFRkFVTFQpOworCUFzc2VydCghcGdTdGF0 WGFjdFNraXBDb3VudGVycyk7CiAKIAkvKgogCSAqIFNldCB0aGUgY3VycmVudCB0cmFuc2FjdGlv biBzdGF0ZSBpbmZvcm1hdGlvbiBhcHByb3ByaWF0ZWx5IGR1cmluZwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMgYi9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYwppbmRleCA2ODJkMTNjOWYyMmYw Li5jMTAwNTA2ZTI1OWJkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3Jlb3JkZXJidWZmZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L3Jlb3JkZXJidWZmZXIuYwpAQCAtMjY3NCw5ICsyNjc0LDE0IEBAIFJlb3JkZXJCdWZmZXJQcm9j ZXNzVFhOKFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCSAqIEFi b3J0aW5nIHRoZSBjdXJyZW50IChzdWItKXRyYW5zYWN0aW9uIGFzIGEgd2hvbGUgaGFzIHRoZSBy aWdodAogCQkgKiBzZW1hbnRpY3MuIFdlIHdhbnQgYWxsIGxvY2tzIGFjcXVpcmVkIGluIGhlcmUg dG8gYmUgcmVsZWFzZWQsIG5vdAogCQkgKiByZWFzc2lnbmVkIHRvIHRoZSBwYXJlbnQgYW5kIHdl IGRvIG5vdCB3YW50IGFueSBkYXRhYmFzZSBhY2Nlc3MKLQkJICogaGF2ZSBwZXJzaXN0ZW50IGVm ZmVjdHMuCisJCSAqIGhhdmUgcGVyc2lzdGVudCBlZmZlY3RzLiAgSW4gdGhlICF1c2luZ19zdWJ0 eG4gY2FzZSB0aGlzIGlzIGEKKwkJICogdG9wLWxldmVsIGFib3J0OyBrZWVwIGl0IG91dCBvZiBw Z19zdGF0X2RhdGFiYXNlLnhhY3Rfcm9sbGJhY2suCiAJCSAqLworCQlpZiAoIXVzaW5nX3N1YnR4 bikKKwkJCXBnU3RhdFhhY3RTa2lwQ291bnRlcnMgPSB0cnVlOwogCQlBYm9ydEN1cnJlbnRUcmFu c2FjdGlvbigpOworCQkvKiB1bmNvbmRpdGlvbmFsIGNsZWFyIGlzIGZpbmU7IGl0IHdhcyBmYWxz ZSBjb21pbmcgaW4gKi8KKwkJcGdTdGF0WGFjdFNraXBDb3VudGVycyA9IGZhbHNlOwogCiAJCS8q IG1ha2Ugc3VyZSB0aGVyZSdzIG5vIGNhY2hlIHBvbGx1dGlvbiAqLwogCQlpZiAocmJ0eG5fZGlz dHJfaW52YWxfb3ZlcmZsb3dlZCh0eG4pKQpAQCAtMjczNyw5ICsyNzQyLDE0IEBAIFJlb3JkZXJC dWZmZXJQcm9jZXNzVFhOKFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4s CiAKIAkJLyoKIAkJICogRm9yY2UgY2FjaGUgaW52YWxpZGF0aW9uIHRvIGhhcHBlbiBvdXRzaWRl IG9mIGEgdmFsaWQgdHJhbnNhY3Rpb24KLQkJICogdG8gcHJldmVudCBjYXRhbG9nIGFjY2VzcyBh cyB3ZSBqdXN0IGNhdWdodCBhbiBlcnJvci4KKwkJICogdG8gcHJldmVudCBjYXRhbG9nIGFjY2Vz cyBhcyB3ZSBqdXN0IGNhdWdodCBhbiBlcnJvci4gIEFzIGFib3ZlLAorCQkgKiBrZWVwIHRoZSB0 b3AtbGV2ZWwgYWJvcnQgb3V0IG9mIHBnX3N0YXRfZGF0YWJhc2UueGFjdF9yb2xsYmFjay4KIAkJ ICovCisJCWlmICghdXNpbmdfc3VidHhuKQorCQkJcGdTdGF0WGFjdFNraXBDb3VudGVycyA9IHRy dWU7CiAJCUFib3J0Q3VycmVudFRyYW5zYWN0aW9uKCk7CisJCS8qIHVuY29uZGl0aW9uYWwgY2xl YXIgaXMgZmluZTsgaXQgd2FzIGZhbHNlIGNvbWluZyBpbiAqLworCQlwZ1N0YXRYYWN0U2tpcENv dW50ZXJzID0gZmFsc2U7CiAKIAkJLyogbWFrZSBzdXJlIHRoZXJlJ3Mgbm8gY2FjaGUgcG9sbHV0 aW9uICovCiAJCWlmIChyYnR4bl9kaXN0cl9pbnZhbF9vdmVyZmxvd2VkKHR4bikpCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3NuYXBidWlsZC5jIGIvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9zbmFwYnVpbGQuYwppbmRleCBjODMwOWI5NmVkNDVj Li5kMTVkYjE5YWJmM2I2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3NuYXBidWlsZC5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvc25h cGJ1aWxkLmMKQEAgLTYzMSw4ICs2MzEsMTUgQEAgU25hcEJ1aWxkQ2xlYXJFeHBvcnRlZFNuYXBz aG90KHZvaWQpCiAJICovCiAJdG1wUmVzT3duZXIgPSBTYXZlZFJlc291cmNlT3duZXJEdXJpbmdF eHBvcnQ7CiAKLQkvKiBtYWtlIHN1cmUgbm90aGluZyBjb3VsZCBoYXZlIGV2ZXIgaGFwcGVuZWQg Ki8KKwkvKgorCSAqIE1ha2Ugc3VyZSBub3RoaW5nIGNvdWxkIGhhdmUgZXZlciBoYXBwZW5lZC4g IEtlZXAgdGhpcyBjbGVhbnVwIGFib3J0CisJICogb3V0IG9mIHBnX3N0YXRfZGF0YWJhc2UueGFj dF9yb2xsYmFjazsgdGhlIGludmFyaWFudCB0aGF0IHdlIGFyZSBhdAorCSAqIHRvcCBsZXZlbCBp cyByZXF1aXJlZCBzbyB0aGUgYWJvcnQgcmVhY2hlcyBBdEVPWGFjdF9QZ1N0YXRfRGF0YWJhc2Uu CisJICovCisJQXNzZXJ0KCFJc1N1YlRyYW5zYWN0aW9uKCkpOworCXBnU3RhdFhhY3RTa2lwQ291 bnRlcnMgPSB0cnVlOwogCUFib3J0Q3VycmVudFRyYW5zYWN0aW9uKCk7CisJcGdTdGF0WGFjdFNr aXBDb3VudGVycyA9IGZhbHNlOwogCiAJQ3VycmVudFJlc291cmNlT3duZXIgPSB0bXBSZXNPd25l cjsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdF9kYXRh YmFzZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvcGdzdGF0X2RhdGFiYXNlLmMKaW5k ZXggN2YzYmMwMTY1OTMxYy4uMDBjMzQ5NjMxY2E3YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv dXRpbHMvYWN0aXZpdHkvcGdzdGF0X2RhdGFiYXNlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMv YWN0aXZpdHkvcGdzdGF0X2RhdGFiYXNlLmMKQEAgLTI5MSwyMSArMjkxLDI4IEBAIHBnc3RhdF9m ZXRjaF9zdGF0X2RiZW50cnkoT2lkIGRib2lkKQogCQlwZ3N0YXRfZmV0Y2hfZW50cnkoUEdTVEFU X0tJTkRfREFUQUJBU0UsIGRib2lkLCBJbnZhbGlkT2lkLCBOVUxMKTsKIH0KIAorLyoKKyAqIFdo ZW4gdHJ1ZSwgQXRFT1hhY3RfUGdTdGF0X0RhdGFiYXNlKCkgc2tpcHMgdGhlIHhhY3RfY29tbWl0 IC8KKyAqIHhhY3Rfcm9sbGJhY2sgYnVtcCBmb3IgdGhlIGN1cnJlbnQgKHN1Yi0pdHJhbnNhY3Rp b24gZW5kLiAgTG9naWNhbAorICogZGVjb2Rpbmcgc2V0cyB0aGlzIGFyb3VuZCBpdHMgY2F0YWxv Zy1jbGVhbnVwIEFib3J0Q3VycmVudFRyYW5zYWN0aW9uKCkKKyAqIHNvIHRoYXQgYWJvcnQgaXMg bm90IGF0dHJpYnV0ZWQgdG8gcGdfc3RhdF9kYXRhYmFzZS4KKyAqLworYm9vbAkJcGdTdGF0WGFj dFNraXBDb3VudGVycyA9IGZhbHNlOworCiB2b2lkCiBBdEVPWGFjdF9QZ1N0YXRfRGF0YWJhc2Uo Ym9vbCBpc0NvbW1pdCwgYm9vbCBwYXJhbGxlbCkKIHsKLQkvKiBEb24ndCBjb3VudCBwYXJhbGxl bCB3b3JrZXIgdHJhbnNhY3Rpb24gc3RhdHMgKi8KLQlpZiAoIXBhcmFsbGVsKQotCXsKLQkJLyoK LQkJICogQ291bnQgdHJhbnNhY3Rpb24gY29tbWl0IG9yIGFib3J0LiAgKFdlIHVzZSBjb3VudGVy cywgbm90IGp1c3QKLQkJICogYm9vbHMsIGluIGNhc2UgdGhlIHJlcG9ydGluZyBtZXNzYWdlIGlz bid0IHNlbnQgcmlnaHQgYXdheS4pCi0JCSAqLwotCQlpZiAoaXNDb21taXQpCi0JCQlwZ1N0YXRY YWN0Q29tbWl0Kys7Ci0JCWVsc2UKLQkJCXBnU3RhdFhhY3RSb2xsYmFjaysrOwotCX0KKwlpZiAo cGFyYWxsZWwgfHwgcGdTdGF0WGFjdFNraXBDb3VudGVycykKKwkJcmV0dXJuOworCisJLyoKKwkg KiBDb3VudCB0cmFuc2FjdGlvbiBjb21taXQgb3IgYWJvcnQuICAoV2UgdXNlIGNvdW50ZXJzLCBu b3QganVzdCBib29scywKKwkgKiBpbiBjYXNlIHRoZSByZXBvcnRpbmcgbWVzc2FnZSBpc24ndCBz ZW50IHJpZ2h0IGF3YXkuKQorCSAqLworCWlmIChpc0NvbW1pdCkKKwkJcGdTdGF0WGFjdENvbW1p dCsrOworCWVsc2UKKwkJcGdTdGF0WGFjdFJvbGxiYWNrKys7CiB9CiAKIC8qCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9wZ3N0YXQuaCBiL3NyYy9pbmNsdWRlL3Bnc3RhdC5oCmluZGV4IGRmYTJl ODM3NjM4MmEuLjhlOTA5MDNiNTZiN2YgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Bnc3RhdC5o CisrKyBiL3NyYy9pbmNsdWRlL3Bnc3RhdC5oCkBAIC04NzUsNiArODc1LDkgQEAgZXh0ZXJuIFBH RExMSU1QT1JUIFBnU3RhdF9Db3VudGVyIHBnU3RhdEJsb2NrV3JpdGVUaW1lOwogZXh0ZXJuIFBH RExMSU1QT1JUIFBnU3RhdF9Db3VudGVyIHBnU3RhdEFjdGl2ZVRpbWU7CiBleHRlcm4gUEdETExJ TVBPUlQgUGdTdGF0X0NvdW50ZXIgcGdTdGF0VHJhbnNhY3Rpb25JZGxlVGltZTsKIAorLyogc2Vl IEF0RU9YYWN0X1BnU3RhdF9EYXRhYmFzZSgpICovCitleHRlcm4gUEdETExJTVBPUlQgYm9vbCBw Z1N0YXRYYWN0U2tpcENvdW50ZXJzOworCiAvKiB1cGRhdGVkIGJ5IHRoZSB0cmFmZmljIGNvcCBh bmQgaW4gZXJyZmluaXNoKCkgKi8KIGV4dGVybiBQR0RMTElNUE9SVCBTZXNzaW9uRW5kVHlwZSBw Z1N0YXRTZXNzaW9uRW5kQ2F1c2U7CiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlv bi9tZXNvbi5idWlsZCBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi9tZXNvbi5idWlsZAppbmRleCBl NzFlOTVjNjI5N2ViLi4yNjhmYThjM2U5YzEzIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9zdWJzY3Jp cHRpb24vbWVzb24uYnVpbGQKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL21lc29uLmJ1aWxk CkBAIC00OCw2ICs0OCw3IEBAIHRlc3RzICs9IHsKICAgICAgICd0LzAzNl9zZXF1ZW5jZXMucGwn LAogICAgICAgJ3QvMDM3X2V4Y2VwdC5wbCcsCiAgICAgICAndC8wMzhfd2Fsc25kX3NodXRkb3du X3RpbWVvdXQucGwnLAorICAgICAgJ3QvMDM5X3B1Ymxpc2hlcl94YWN0X3JvbGxiYWNrLnBsJywK ICAgICAgICd0LzEwMF9idWdzLnBsJywKICAgICBdLAogICB9LApkaWZmIC0tZ2l0IGEvc3JjL3Rl c3Qvc3Vic2NyaXB0aW9uL3QvMDM5X3B1Ymxpc2hlcl94YWN0X3JvbGxiYWNrLnBsIGIvc3JjL3Rl c3Qvc3Vic2NyaXB0aW9uL3QvMDM5X3B1Ymxpc2hlcl94YWN0X3JvbGxiYWNrLnBsCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmI3ZGM1YjIwZDYxNzYKLS0tIC9kZXYv bnVsbAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzlfcHVibGlzaGVyX3hhY3Rfcm9s bGJhY2sucGwKQEAgLTAsMCArMSw3MSBAQAorCisjIENvcHlyaWdodCAoYykgMjAyNiwgUG9zdGdy ZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKworIyBDaGVjayB0aGF0IHBnX3N0YXRfZGF0 YWJhc2UueGFjdF9yb2xsYmFjayBvbiBhIGxvZ2ljYWwtcmVwbGljYXRpb24KKyMgcHVibGlzaGVy IGlzIG5vdCBpbmZsYXRlZCBieSB0aGUgd2Fsc2VuZGVyJ3MgaW50ZXJuYWwgY2F0YWxvZy1jbGVh bnVwCisjIGFib3J0cy4gIFJlb3JkZXJCdWZmZXJQcm9jZXNzVFhOKCkgZW5kcyBlYWNoIGRlY29k ZWQgdHJhbnNhY3Rpb24gd2l0aAorIyBBYm9ydEN1cnJlbnRUcmFuc2FjdGlvbigpOyBpbiB0aGUg d2Fsc2VuZGVyIHRoYXQgaXMgYSB0b3AtbGV2ZWwgYWJvcnQKKyMgd2hvc2UgY291bnRlciBpbmNy ZW1lbnQgZmx1c2hlcyB0byBzaGFyZWQgc3RhdHMgb24gd2Fsc2VuZGVyIGV4aXQuCit1c2Ugc3Ry aWN0OwordXNlIHdhcm5pbmdzIEZBVEFMID0+ICdhbGwnOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6 OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsK KworbXkgJG5vZGVfcHVibGlzaGVyID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdw dWJsaXNoZXInKTsKKyRub2RlX3B1Ymxpc2hlci0+aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+ICds b2dpY2FsJyk7Ciskbm9kZV9wdWJsaXNoZXItPnN0YXJ0OworCitteSAkbm9kZV9zdWJzY3JpYmVy ID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdzdWJzY3JpYmVyJyk7Ciskbm9kZV9z dWJzY3JpYmVyLT5pbml0OworJG5vZGVfc3Vic2NyaWJlci0+c3RhcnQ7CisKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJJ0NSRUFURSBUQUJMRSB0IChpZCBpbnQgUFJJ TUFSWSBLRVkpJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkn Q1JFQVRFIFRBQkxFIHQgKGlkIGludCBQUklNQVJZIEtFWSknKTsKKworJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ0NSRUFURSBQVUJMSUNBVElPTiBwIEZPUiBUQUJMRSB0 Jyk7CisKK215ICRwdWJsaXNoZXJfY29ubnN0ciA9ICRub2RlX3B1Ymxpc2hlci0+Y29ubnN0ciAu ICcgZGJuYW1lPXBvc3RncmVzJzsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAorCSJDUkVBVEUgU1VCU0NSSVBUSU9OIHMgQ09OTkVDVElPTiAnJHB1Ymxpc2hlcl9jb25u c3RyJyBQVUJMSUNBVElPTiBwIik7CisKKyRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX3N1YnNj cmlwdGlvbl9zeW5jKCRub2RlX3B1Ymxpc2hlciwgJ3MnKTsKKworIyBVc2UgYSBiYXNlbGluZS1k ZWx0YSByYXRoZXIgdGhhbiBwZ19zdGF0X3Jlc2V0KCkgdG8gdG9sZXJhdGUgYW1iaWVudAorIyBy b2xsYmFjayBhY3Rpdml0eS4KK215ICRiYXNlID0gJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKKwkiU0VMRUNUIHhhY3Rfcm9sbGJhY2sgRlJPTSBwZ19zdGF0X2RhdGFiYXNl IFdIRVJFIGRhdG5hbWUgPSAncG9zdGdyZXMnIik7CitjaG9tcCAkYmFzZTsKKworIyBGaXZlIGF1 dG9jb21taXQgSU5TRVJUczogZWFjaCBiZWNvbWVzIG9uZSBkZWNvZGVkIGNvbW1pdHRlZCB0eG4g b24gdGhlCisjIHdhbHNlbmRlci4gIFdpdGhvdXQgdGhlIGZpeCwgdGhhdCdzIGZpdmUgc3B1cmlv dXMgcm9sbGJhY2tzIGFmdGVyIERJU0FCTEUuCitteSAkbiA9IDU7Ciskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCWpvaW4oJycsIG1hcCB7ICJJTlNFUlQgSU5UTyB0IFZB TFVFUyAoJF8pO1xuIiB9IDEgLi4gJG4pKTsKKworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9j YXRjaHVwKCdzJyk7CisKKyMgRGlzYWJsaW5nIHRoZSBzdWJzY3JpcHRpb24gdGVybWluYXRlcyB0 aGUgd2Fsc2VuZGVyOyBpdHMgc2h1dGRvd24gaG9vaworIyBmbHVzaGVzIHBnc3RhdCBjb3VudGVy cyB0byBzaGFyZWQgc3RhdHMuCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgJ0FMVEVSIFNVQlNDUklQVElPTiBzIERJU0FCTEUnKTsKKworIyBXYWl0IGZvciB0aGlzIHN1 YnNjcmlwdGlvbidzIHdhbHNlbmRlciAoZmlsdGVyIGJ5IGFwcGxpY2F0aW9uX25hbWUpLgorJG5v ZGVfcHVibGlzaGVyLT5wb2xsX3F1ZXJ5X3VudGlsKAorCSdwb3N0Z3JlcycsIHF7CisJU0VMRUNU IGNvdW50KCopID0gMCBGUk9NIHBnX3N0YXRfYWN0aXZpdHkKKwlXSEVSRSBiYWNrZW5kX3R5cGUg PSAnd2Fsc2VuZGVyJyBBTkQgYXBwbGljYXRpb25fbmFtZSA9ICdzJworfSkKKyAgb3IgZGllICdz IHdhbHNlbmRlciBkaWQgbm90IGV4aXQnOworCitteSAkZmluYWwgPSAkbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgeGFjdF9yb2xsYmFjayBGUk9NIHBnX3N0 YXRfZGF0YWJhc2UgV0hFUkUgZGF0bmFtZSA9ICdwb3N0Z3JlcyciKTsKK2Nob21wICRmaW5hbDsK KworY21wX29rKAorCSRmaW5hbCAtICRiYXNlLCAnPT0nLCAwLAorCSd3YWxzZW5kZXIgZG9lcyBu b3QgaW5mbGF0ZSBwdWJsaXNoZXIgeGFjdF9yb2xsYmFjayBmb3IgZGVjb2RlZCB0cmFuc2FjdGlv bnMnCispOworCitkb25lX3Rlc3RpbmcoKTsK --000000000000ae72b4064f9ff861--