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.94.2) (envelope-from ) id 1qzsos-001lsV-PV for pgsql-hackers@arkaria.postgresql.org; Mon, 06 Nov 2023 06:10:42 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1qzsnr-00CbrD-8j for pgsql-hackers@arkaria.postgresql.org; Mon, 06 Nov 2023 06:09:39 +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.94.2) (envelope-from ) id 1qzsnq-00Cbr5-Me for pgsql-hackers@lists.postgresql.org; Mon, 06 Nov 2023 06:09:38 +0000 Received: from oss.nttdata.com ([49.212.34.109]) by makus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qzsnm-004Bdj-0G for pgsql-hackers@postgresql.org; Mon, 06 Nov 2023 06:09:36 +0000 Received: from oss.nttdata.com (localhost [127.0.0.1]) by oss.nttdata.com (Postfix) with ESMTPA id ED810601E6; Mon, 6 Nov 2023 15:09:28 +0900 (JST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at oss.nttdata.com MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_5a54453167c5be3ea24437acf9a3a839" Content-Transfer-Encoding: 8bit Date: Mon, 06 Nov 2023 15:09:28 +0900 From: torikoshia To: Andres Freund , boekewurm+postgres@gmail.com Cc: Bharath Rupireddy , Michael Paquier , Kyotaro Horiguchi , pgsql-hackers@postgresql.org Subject: Re: Add new option 'all' to pg_stat_reset_shared() In-Reply-To: <20231104014905.oiropxau5can5fdu@awork3.anarazel.de> References: <4291a55137ddda77cf7cc5f46e846daf@oss.nttdata.com> <20231030.171713.274529745163206826.horikyota.ntt@gmail.com> <20231031.115931.1009045759469844714.horikyota.ntt@gmail.com> <20231104014905.oiropxau5can5fdu@awork3.anarazel.de> User-Agent: Roundcube Webmail/1.4.11 Message-ID: X-Sender: torikoshia@oss.nttdata.com List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=_5a54453167c5be3ea24437acf9a3a839 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8; format=flowed Thanks all for the comments! On Fri, Nov 3, 2023 at 5:17 AM Matthias van de Meent wrote: > Knowing that your metrics have a shared starting point can be quite > valuable, as it allows you to do some math that would otherwise be > much less accurate when working with stats over a short amount of > time. I've not used these stats systems much myself, but skew between > metrics caused by different reset points can be difficult to detect > and debug, so I think an atomic call to reset all these stats could be > worth implementing. Since each stats, except wal_prefetch was reset acquiring LWLock, attached PoC patch makes the call atomic by using these LWlocks. If this is the right direction, I'll try to make wal_prefetch also take LWLock. On 2023-11-04 10:49, Andres Freund wrote: > Yes, agreed. However, I'd suggest adding pg_stat_reset_shared(), > instead of > pg_stat_reset_shared('all') for this purpose. In the attached PoC patch the shared statistics are reset by calling pg_stat_reset_shared() not pg_stat_reset_shared('all'). -- Regards, -- Atsushi Torikoshi NTT DATA Group Corporation --=_5a54453167c5be3ea24437acf9a3a839 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v1-0001-WIP-Add-ability-to-reset-all-statistics-to-pg_sta.patch Content-Disposition: attachment; filename=v1-0001-WIP-Add-ability-to-reset-all-statistics-to-pg_sta.patch; size=6853 RnJvbSBmMGE1Y2M2YWQ2Y2MzNTFhZGZmOTMwMmMzZTliMmEyMjdhNWQ5Y2I0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBdHN1c2hpIFRvcmlrb3NoaSA8dG9yaWtvc2hpYUBvc3MubnR0 ZGF0YS5jb20+CkRhdGU6IE1vbiwgNiBOb3YgMjAyMyAxNDo1MzoxOSArMDkwMApTdWJqZWN0OiBb UEFUQ0ggdjFdIFtXSVBdQWRkIGFiaWxpdHkgdG8gcmVzZXQgYWxsIHN0YXRpc3RpY3MgdG8KIHBn X3N0YXRfcmVzZXRfc2hhcmVkKCkKCkN1cnJlbnRseSBwZ19zdGF0X3Jlc2V0X3NoYXJlZCgpIHJl cXVpcmVzIGl0cyBhcmd1bWVudCB0byBzcGVjaWZ5CnN0YXRpc3RpY3MgdG8gYmUgcmVzZXQsIGFu ZCB0aGVyZSBpcyBubyB3YXkgdG8gcmVzZXQgYWxsIHN0YXRpc3RpY3MKYXQgdGhlIHNhbWUgdGlt ZS4KVGhpcyBwYXRjaCBtYWtlcyBpdCBwb3NzaWJsZSB3aGVuIG5vIGFyZ3VtZW50IGlzIHNwZWNp ZmllZC4KCk5vdGUgdGhpcyBwYXRjaCBpcyBXSVAgYW5kIHBnX3N0YXRfcmVjb3ZlcnlfcHJlZmV0 Y2ggaXMgbm90IHJlc2V0LgotLS0KIGRvYy9zcmMvc2dtbC9tb25pdG9yaW5nLnNnbWwgICAgICAg IHwgIDQgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdC5jIHwgNzUgKysrKysr KysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ3N0YXRmdW5j cy5jIHwgMTAgKysrKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCAgICAgfCAgNCAr Kwogc3JjL2luY2x1ZGUvcGdzdGF0LmggICAgICAgICAgICAgICAgfCAgMSArCiA1IGZpbGVzIGNo YW5nZWQsIDkzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKCmRpZmYgLS1naXQgYS9kb2Mv c3JjL3NnbWwvbW9uaXRvcmluZy5zZ21sIGIvZG9jL3NyYy9zZ21sL21vbml0b3Jpbmcuc2dtbApp bmRleCBlMDY4ZjdlMjQ3Li45ZDFlM2JmNGRiIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvbW9u aXRvcmluZy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9tb25pdG9yaW5nLnNnbWwKQEAgLTQ3MTYs NyArNDcxNiw3IEBAIGRlc2NyaXB0aW9uIHwgV2FpdGluZyBmb3IgYSBuZXdseSBpbml0aWFsaXpl ZCBXQUwgZmlsZSB0byByZWFjaCBkdXJhYmxlIHN0b3JhZ2UKICAgICAgICAgPHJldHVybnZhbHVl PnZvaWQ8L3JldHVybnZhbHVlPgogICAgICAgIDwvcGFyYT4KICAgICAgICA8cGFyYT4KLSAgICAg ICAgUmVzZXRzIHNvbWUgY2x1c3Rlci13aWRlIHN0YXRpc3RpY3MgY291bnRlcnMgdG8gemVybywg ZGVwZW5kaW5nIG9uIHRoZQorICAgICAgICBSZXNldHMgY2x1c3Rlci13aWRlIHN0YXRpc3RpY3Mg Y291bnRlcnMgdG8gemVybywgZGVwZW5kaW5nIG9uIHRoZQogICAgICAgICBhcmd1bWVudC4gIFRo ZSBhcmd1bWVudCBjYW4gYmUgPGxpdGVyYWw+Ymd3cml0ZXI8L2xpdGVyYWw+IHRvIHJlc2V0CiAg ICAgICAgIGFsbCB0aGUgY291bnRlcnMgc2hvd24gaW4KICAgICAgICAgdGhlIDxzdHJ1Y3RuYW1l PnBnX3N0YXRfYmd3cml0ZXI8L3N0cnVjdG5hbWU+IHZpZXcsCkBAIC00NzMwLDYgKzQ3MzAsOCBA QCBkZXNjcmlwdGlvbiB8IFdhaXRpbmcgZm9yIGEgbmV3bHkgaW5pdGlhbGl6ZWQgV0FMIGZpbGUg dG8gcmVhY2ggZHVyYWJsZSBzdG9yYWdlCiAgICAgICAgIDxzdHJ1Y3RuYW1lPnBnX3N0YXRfd2Fs PC9zdHJ1Y3RuYW1lPiB2aWV3IG9yCiAgICAgICAgIDxsaXRlcmFsPnJlY292ZXJ5X3ByZWZldGNo PC9saXRlcmFsPiB0byByZXNldCBhbGwgdGhlIGNvdW50ZXJzIHNob3duCiAgICAgICAgIGluIHRo ZSA8c3RydWN0bmFtZT5wZ19zdGF0X3JlY292ZXJ5X3ByZWZldGNoPC9zdHJ1Y3RuYW1lPiB2aWV3 LgorICAgICAgICBJZiBubyBhcmd1bWVudCBpcyBzcGVjaWZpZWQsIHJlc2V0IGFsbCB0aGVzZSB2 aWV3cyBhdCBvbmNlLgorICAgICAgICBOb3RlIGN1cnJlbnQgcGF0Y2ggaXMgV0lQIGFuZCBwZ19z dGF0X3JlY292ZXJ5X3ByZWZldGNoIGlzIG5vdCByZXNldC4KICAgICAgICA8L3BhcmE+CiAgICAg ICAgPHBhcmE+CiAgICAgICAgIFRoaXMgZnVuY3Rpb24gaXMgcmVzdHJpY3RlZCB0byBzdXBlcnVz ZXJzIGJ5IGRlZmF1bHQsIGJ1dCBvdGhlciB1c2VycwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv dXRpbHMvYWN0aXZpdHkvcGdzdGF0LmMgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0 YXQuYwppbmRleCBkNzQzZmMwYjI4Li45YjkzOTg0MzlmIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC91dGlscy9hY3Rpdml0eS9wZ3N0YXQuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0 eS9wZ3N0YXQuYwpAQCAtNzY3LDYgKzc2Nyw4MSBAQCBwZ3N0YXRfcmVzZXRfb2Zfa2luZChQZ1N0 YXRfS2luZCBraW5kKQogCQlwZ3N0YXRfcmVzZXRfZW50cmllc19vZl9raW5kKGtpbmQsIHRzKTsK IH0KIAorLyogUmVzZXQgYmVsb3cgY2x1c3Rlci13aWRlIHN0YXRpc3RpY3M6CisgKiAtIHBnX3N0 YXRfYmd3cml0ZXIKKyAqIC0gcGdfc3RhdF9jaGVja3BvaW50ZXIKKyAqIC0gcGdfc3RhdF9hcmNo aXZlcgorICogLSBwZ19zdGF0X2lvCisgKiAtIHBnX3N0YXRfd2FsCisgKgorICogTm90ZSByZWNv dmVyeV9wcmVmZXRjaCBpcyBub3QgaW1wbGVtZW50ZWQoV0lQKS4KKyAqLwordm9pZAorcGdzdGF0 X3Jlc2V0X3NoYXJlZF9hbGwodm9pZCkKK3sKKyNkZWZpbmUgU1RBVFNfU0hBUkVEX05VTV9MV0xP Q0sJNAorCVRpbWVzdGFtcFR6IHRzID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOworCisJUGdTdGF0 U2hhcmVkX0FyY2hpdmVyICpzdGF0c19hcmNoaXZlciA9ICZwZ1N0YXRMb2NhbC5zaG1lbS0+YXJj aGl2ZXI7CisJUGdTdGF0U2hhcmVkX0JnV3JpdGVyICpzdGF0c19iZ3dyaXRlciA9ICZwZ1N0YXRM b2NhbC5zaG1lbS0+Ymd3cml0ZXI7CisJUGdTdGF0U2hhcmVkX0NoZWNrcG9pbnRlciAqc3RhdHNf Y2hlY2twb2ludGVyID0gJnBnU3RhdExvY2FsLnNobWVtLT5jaGVja3BvaW50ZXI7CisJUGdTdGF0 U2hhcmVkX1dhbCAqc3RhdHNfd2FsID0gJnBnU3RhdExvY2FsLnNobWVtLT53YWw7CisJUGdTdGF0 U2hhcmVkX0lPICpzdGF0c19pbyA9ICZwZ1N0YXRMb2NhbC5zaG1lbS0+aW87CisKKwkvLyBBY3F1 aXJlIExXTG9ja3MKKwlMV0xvY2sgKmxvY2tzW10gPSB7JnN0YXRzX2FyY2hpdmVyLT5sb2NrLCAg JnN0YXRzX2Jnd3JpdGVyLT5sb2NrLAorCQkJCQkgICAmc3RhdHNfY2hlY2twb2ludGVyLT5sb2Nr LCAmc3RhdHNfd2FsLT5sb2NrfTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgU1RBVFNfU0hBUkVE X05VTV9MV0xPQ0s7IGkrKykKKwkJTFdMb2NrQWNxdWlyZShsb2Nrc1tpXSwgTFdfRVhDTFVTSVZF KTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgQkFDS0VORF9OVU1fVFlQRVM7IGkrKykKKwl7CisJ CUxXTG9jawkqYmt0eXBlX2xvY2sgPSAmc3RhdHNfaW8tPmxvY2tzW2ldOworCQlMV0xvY2tBY3F1 aXJlKGJrdHlwZV9sb2NrLCBMV19FWENMVVNJVkUpOworCX0KKworCS8vIFJlc2V0IHN0YXRzCisJ cGdzdGF0X2NvcHlfY2hhbmdlY291bnRlZF9zdGF0cygmc3RhdHNfYXJjaGl2ZXItPnJlc2V0X29m ZnNldCwKKwkJCQkJCQkJCSZzdGF0c19hcmNoaXZlci0+c3RhdHMsCisJCQkJCQkJCQlzaXplb2Yo c3RhdHNfYXJjaGl2ZXItPnN0YXRzKSwKKwkJCQkJCQkJCSZzdGF0c19hcmNoaXZlci0+Y2hhbmdl Y291bnQpOworCXN0YXRzX2FyY2hpdmVyLT5zdGF0cy5zdGF0X3Jlc2V0X3RpbWVzdGFtcCA9IHRz OworCisJcGdzdGF0X2NvcHlfY2hhbmdlY291bnRlZF9zdGF0cygmc3RhdHNfYmd3cml0ZXItPnJl c2V0X29mZnNldCwKKwkJCQkJCQkJCSZzdGF0c19iZ3dyaXRlci0+c3RhdHMsCisJCQkJCQkJCQlz aXplb2Yoc3RhdHNfYmd3cml0ZXItPnN0YXRzKSwKKwkJCQkJCQkJCSZzdGF0c19iZ3dyaXRlci0+ Y2hhbmdlY291bnQpOworCXN0YXRzX2Jnd3JpdGVyLT5zdGF0cy5zdGF0X3Jlc2V0X3RpbWVzdGFt cCA9IHRzOworCisJcGdzdGF0X2NvcHlfY2hhbmdlY291bnRlZF9zdGF0cygmc3RhdHNfY2hlY2tw b2ludGVyLT5yZXNldF9vZmZzZXQsCisJCQkJCQkJCQkmc3RhdHNfY2hlY2twb2ludGVyLT5zdGF0 cywKKwkJCQkJCQkJCXNpemVvZihzdGF0c19jaGVja3BvaW50ZXItPnN0YXRzKSwKKwkJCQkJCQkJ CSZzdGF0c19jaGVja3BvaW50ZXItPmNoYW5nZWNvdW50KTsKKwlzdGF0c19jaGVja3BvaW50ZXIt PnN0YXRzLnN0YXRfcmVzZXRfdGltZXN0YW1wID0gdHM7CisKKwltZW1zZXQoJnN0YXRzX3dhbC0+ c3RhdHMsIDAsIHNpemVvZihzdGF0c193YWwtPnN0YXRzKSk7CisJc3RhdHNfd2FsLT5zdGF0cy5z dGF0X3Jlc2V0X3RpbWVzdGFtcCA9IHRzOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBCQUNLRU5E X05VTV9UWVBFUzsgaSsrKQorCXsKKwkJUGdTdGF0X0JrdHlwZUlPICpia3R5cGVfc2hzdGF0cyA9 ICZzdGF0c19pby0+c3RhdHMuc3RhdHNbaV07CisJCW1lbXNldChia3R5cGVfc2hzdGF0cywgMCwg c2l6ZW9mKCpia3R5cGVfc2hzdGF0cykpOworCisJCWlmIChpID09IDApCisJCQlwZ1N0YXRMb2Nh bC5zaG1lbS0+aW8uc3RhdHMuc3RhdF9yZXNldF90aW1lc3RhbXAgPSB0czsKKwl9CisKKwkvLyBS ZWxlYXNlIExXTG9ja3MKKwlmb3IgKGludCBpID0gMDsgaSA8IFNUQVRTX1NIQVJFRF9OVU1fTFdM T0NLOyBpKyspCisJCUxXTG9ja1JlbGVhc2UobG9ja3NbaV0pOworCisJZm9yIChpbnQgaSA9IDA7 IGkgPCBCQUNLRU5EX05VTV9UWVBFUzsgaSsrKQorCXsKKwkJTFdMb2NrICAgICAqYmt0eXBlX2xv Y2sgPSAmc3RhdHNfaW8tPmxvY2tzW2ldOworCQlMV0xvY2tSZWxlYXNlKGJrdHlwZV9sb2NrKTsK Kwl9Cit9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQogICogRmV0Y2hpbmcgb2Ygc3RhdHMKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9wZ3N0YXRmdW5jcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Bn c3RhdGZ1bmNzLmMKaW5kZXggMWZiOGIzMTg2My4uMGQ2ZjM3NTIzOCAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L3Bnc3RhdGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L3Bnc3RhdGZ1bmNzLmMKQEAgLTE2NzYsNiArMTY3NiwxNiBAQCBwZ19zdGF0X3Jlc2V0KFBH X0ZVTkNUSU9OX0FSR1MpCiAJUEdfUkVUVVJOX1ZPSUQoKTsKIH0KIAorLyoKKyAqIFJlc2V0IGFs bCBzaGFyZWQgY2x1c3Rlci13aWRlIGNvdW50ZXJzCisgKi8KK0RhdHVtCitwZ19zdGF0X3Jlc2V0 X3NoYXJlZF9hbGwoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlwZ3N0YXRfcmVzZXRfc2hhcmVkX2Fs bCgpOworCVBHX1JFVFVSTl9WT0lEKCk7Cit9CisKIC8qCiAgKiBSZXNldCBzb21lIHNoYXJlZCBj bHVzdGVyLXdpZGUgY291bnRlcnMKICAqCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9n L3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCAwOTFm N2UzNDNjLi5hZmRhOTAzZjI0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3By b2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTU4ODMsNiAr NTg4MywxMCBAQAogICBkZXNjciA9PiAnc3RhdGlzdGljczogcmVzZXQgY29sbGVjdGVkIHN0YXRp c3RpY3Mgc2hhcmVkIGFjcm9zcyB0aGUgY2x1c3RlcicsCiAgIHByb25hbWUgPT4gJ3BnX3N0YXRf cmVzZXRfc2hhcmVkJywgcHJvdm9sYXRpbGUgPT4gJ3YnLCBwcm9yZXR0eXBlID0+ICd2b2lkJywK ICAgcHJvYXJndHlwZXMgPT4gJ3RleHQnLCBwcm9zcmMgPT4gJ3BnX3N0YXRfcmVzZXRfc2hhcmVk JyB9LAoreyBvaWQgPT4gJzgwMDAnLAorICBkZXNjciA9PiAnc3RhdGlzdGljczogcmVzZXQgY29s bGVjdGVkIHN0YXRpc3RpY3Mgc2hhcmVkIGFjcm9zcyB0aGUgY2x1c3RlcicsCisgIHByb25hbWUg PT4gJ3BnX3N0YXRfcmVzZXRfc2hhcmVkJywgcHJvdm9sYXRpbGUgPT4gJ3YnLCBwcm9yZXR0eXBl ID0+ICd2b2lkJywKKyAgcHJvYXJndHlwZXMgPT4gJycsIHByb3NyYyA9PiAncGdfc3RhdF9yZXNl dF9zaGFyZWRfYWxsJyB9LAogeyBvaWQgPT4gJzM3NzYnLAogICBkZXNjciA9PiAnc3RhdGlzdGlj czogcmVzZXQgY29sbGVjdGVkIHN0YXRpc3RpY3MgZm9yIGEgc2luZ2xlIHRhYmxlIG9yIGluZGV4 IGluIHRoZSBjdXJyZW50IGRhdGFiYXNlIG9yIHNoYXJlZCBhY3Jvc3MgYWxsIGRhdGFiYXNlcyBp biB0aGUgY2x1c3RlcicsCiAgIHByb25hbWUgPT4gJ3BnX3N0YXRfcmVzZXRfc2luZ2xlX3RhYmxl X2NvdW50ZXJzJywgcHJvdm9sYXRpbGUgPT4gJ3YnLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv cGdzdGF0LmggYi9zcmMvaW5jbHVkZS9wZ3N0YXQuaAppbmRleCBmOTVkOGRiMGM0Li4yYjIzOGJl ZTc4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wZ3N0YXQuaAorKysgYi9zcmMvaW5jbHVkZS9w Z3N0YXQuaApAQCAtNDc3LDYgKzQ3Nyw3IEBAIGV4dGVybiB2b2lkIHBnc3RhdF9mb3JjZV9uZXh0 X2ZsdXNoKHZvaWQpOwogZXh0ZXJuIHZvaWQgcGdzdGF0X3Jlc2V0X2NvdW50ZXJzKHZvaWQpOwog ZXh0ZXJuIHZvaWQgcGdzdGF0X3Jlc2V0KFBnU3RhdF9LaW5kIGtpbmQsIE9pZCBkYm9pZCwgT2lk IG9iam9pZCk7CiBleHRlcm4gdm9pZCBwZ3N0YXRfcmVzZXRfb2Zfa2luZChQZ1N0YXRfS2luZCBr aW5kKTsKK2V4dGVybiB2b2lkIHBnc3RhdF9yZXNldF9zaGFyZWRfYWxsKHZvaWQpOwogCiAvKiBz dGF0cyBhY2Nlc3NvcnMgKi8KIGV4dGVybiB2b2lkIHBnc3RhdF9jbGVhcl9zbmFwc2hvdCh2b2lk KTsKCmJhc2UtY29tbWl0OiAyYzdjNmM0MTdmZTY1NWFiM2ZkNGNhN2Y2OGVjMjJjOTEzYTJmZTgw Ci0tIAoyLjM5LjIKCg== --=_5a54453167c5be3ea24437acf9a3a839--