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 1kp0NC-0005ef-He for pgsql-hackers@arkaria.postgresql.org; Tue, 15 Dec 2020 02:47:34 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1kp0NA-0005bU-Al for pgsql-hackers@arkaria.postgresql.org; Tue, 15 Dec 2020 02:47:32 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kp0NA-0005bM-2p for pgsql-hackers@lists.postgresql.org; Tue, 15 Dec 2020 02:47:32 +0000 Received: from oss.nttdata.com ([49.212.34.109]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kp0N6-0002uV-Gn for pgsql-hackers@postgresql.org; Tue, 15 Dec 2020 02:47:31 +0000 Received: from oss.nttdata.com (localhost [127.0.0.1]) by oss.nttdata.com (Postfix) with ESMTP id C3BBA625B4 for ; Tue, 15 Dec 2020 11:47:23 +0900 (JST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.102.3 at oss.nttdata.com MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_4a4722cb1edc0944ddac533a75e946d0" Date: Tue, 15 Dec 2020 11:47:23 +0900 From: torikoshia To: Pgsql Hackers Subject: adding wait_start column to pg_locks Message-ID: X-Sender: torikoshia@oss.nttdata.com User-Agent: Roundcube Webmail/1.1.9 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --=_4a4722cb1edc0944ddac533a75e946d0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed Hi, When examining the duration of locks, we often do join on pg_locks and pg_stat_activity and use columns such as query_start or state_change. However, since these columns are the moment when queries have started or their state has changed, we cannot get the exact lock duration in this way. So I'm now thinking about adding a new column in pg_locks which keeps the time at which locks started waiting. One problem with this idea would be the performance impact of calling gettimeofday repeatedly. To avoid it, I reused the result of the gettimeofday which was called for deadlock_timeout timer start as suggested in the previous discussion[1]. Attached a patch. BTW in this patch, for fast path locks, wait_start is set to zero because it seems the lock will not be waited for. If my understanding is wrong, I would appreciate it if someone could point out. Any thoughts? [1] https://www.postgresql.org/message-id/28804.1407907184%40sss.pgh.pa.us Regards, -- Atsushi Torikoshi NTT DATA CORPORATION --=_4a4722cb1edc0944ddac533a75e946d0 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v1-0001-Add-wait_start-field-into-pg_locks.patch Content-Disposition: attachment; filename=v1-0001-Add-wait_start-field-into-pg_locks.patch; size=8475 RnJvbSAxYTZhNzM3Nzg3N2NjNTJlNGI4N2EwNWJiYjhmZmFlOTJjZGI5MWFiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBdHN1c2hpIFRvcmlrb3NoaSA8dG9yaWtvc2hpYUBvc3MubnR0 ZGF0YS5jb20+CkRhdGU6IFR1ZSwgMTUgRGVjIDIwMjAgMTA6NTU6MzIgKzA5MDAKU3ViamVjdDog W1BBVENIIHYxXSBBZGQgd2FpdF9zdGFydCBmaWVsZCBpbnRvIHBnX2xvY2tzLgoKVG8gZXhhbWlu ZSB0aGUgZHVyYXRpb24gb2YgbG9ja3MsIHdlIGRpZCBqb2luIG9uIHBnX2xvY2tzIGFuZApwZ19z dGF0X2FjdGl2aXR5IGFuZCB1c2VkIGNvbHVtbnMgc3VjaCBhcyBxdWVyeV9zdGFydCBvciBzdGF0 ZV9jaGFuZ2UuCkhvd2V2ZXIsIHNpbmNlIHRoZXkgYXJlIHRoZSBtb21lbnQgd2hlbiBxdWVyaWVz IGhhdmUgc3RhcnRlZCBvciB0aGVpcgpzdGF0ZSBoYXMgY2hhbmdlZCwgd2UgY291bGQgbm90IGdl dCB0aGUgZXhhY3QgbG9jayBkdXJhdGlvbiBpbiB0aGlzIHdheS4KClRoaXMgcGF0Y2ggYWRkcyBh IG5ldyBmaWVsZCBwcmVzZXJ2aW5nIHRoZSB0aW1lIGF0IHdoaWNoIGxvY2tzCnN0YXJ0ZWQgd2Fp dGluZy4KLS0tCiBkb2Mvc3JjL3NnbWwvY2F0YWxvZ3Muc2dtbCAgICAgICAgICB8ICA5ICsrKysr KysrKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2xvY2suYyAgICAgfCAxMCArKysrKysrKysr CiBzcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jICAgICB8ICAyICsrCiBzcmMvYmFja2Vu ZC91dGlscy9hZHQvbG9ja2Z1bmNzLmMgICB8ICA5ICsrKysrKysrLQogc3JjL2luY2x1ZGUvY2F0 YWxvZy9wZ19wcm9jLmRhdCAgICAgfCAgNiArKystLS0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvbG9j ay5oICAgICAgICAgIHwgIDMgKysrCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91 dCB8ICA1ICsrKy0tCiA3IGZpbGVzIGNoYW5nZWQsIDM4IGluc2VydGlvbnMoKyksIDYgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwgYi9kb2Mvc3Jj L3NnbWwvY2F0YWxvZ3Muc2dtbAppbmRleCA2MjcxMWVlODNmLi4xOWFmMGU5YWY0IDEwMDY0NAot LS0gYS9kb2Mvc3JjL3NnbWwvY2F0YWxvZ3Muc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvY2F0YWxv Z3Muc2dtbApAQCAtMTA1NjcsNiArMTA1NjcsMTUgQEAgU0NSQU0tU0hBLTI1NiQ8cmVwbGFjZWFi bGU+Jmx0O2l0ZXJhdGlvbiBjb3VudCZndDs8L3JlcGxhY2VhYmxlPjo8cmVwbGFjZWFibGU+JmwK ICAgICAgICBsb2NrIHRhYmxlCiAgICAgICA8L3BhcmE+PC9lbnRyeT4KICAgICAgPC9yb3c+CisK KyAgICAgPHJvdz4KKyAgICAgIDxlbnRyeSByb2xlPSJjYXRhbG9nX3RhYmxlX2VudHJ5Ij48cGFy YSByb2xlPSJjb2x1bW5fZGVmaW5pdGlvbiI+CisgICAgICAgPHN0cnVjdGZpZWxkPndhaXRfc3Rh cnQ8L3N0cnVjdGZpZWxkPiA8dHlwZT50aW1lc3RhbXB0ejwvdHlwZT4KKyAgICAgIDwvcGFyYT4K KyAgICAgIDxwYXJhPgorICAgICAgIFRoZSB0aW1lIGF0IHdoaWNoIGxvY2sgc3RhcnRlZCB3YWl0 aW5nCisgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAgICAgPC9yb3c+CiAgICAgPC90Ym9keT4KICAg IDwvdGdyb3VwPgogICA8L3RhYmxlPgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9s bWdyL2xvY2suYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9sb2NrLmMKaW5kZXggZDg2NTY2 ZjQ1NS4uN2IzMDUwOGY5NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2xv Y2suYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbG9jay5jCkBAIC0xMTk2LDYgKzEx OTYsNyBAQCBTZXR1cExvY2tJblRhYmxlKExvY2tNZXRob2QgbG9ja01ldGhvZFRhYmxlLCBQR1BS T0MgKnByb2MsCiAJCWxvY2stPndhaXRNYXNrID0gMDsKIAkJU0hNUXVldWVJbml0KCYobG9jay0+ cHJvY0xvY2tzKSk7CiAJCVByb2NRdWV1ZUluaXQoJihsb2NrLT53YWl0UHJvY3MpKTsKKwkJbG9j ay0+d2FpdF9zdGFydCA9IDA7CiAJCWxvY2stPm5SZXF1ZXN0ZWQgPSAwOwogCQlsb2NrLT5uR3Jh bnRlZCA9IDA7CiAJCU1lbVNldChsb2NrLT5yZXF1ZXN0ZWQsIDAsIHNpemVvZihpbnQpICogTUFY X0xPQ0tNT0RFUyk7CkBAIC0zNjI4LDYgKzM2MjksMTIgQEAgR2V0TG9ja1N0YXR1c0RhdGEodm9p ZCkKIAkJCWluc3RhbmNlLT5sZWFkZXJQaWQgPSBwcm9jLT5waWQ7CiAJCQlpbnN0YW5jZS0+ZmFz dHBhdGggPSB0cnVlOwogCisJCQkvKgorCQkJICogU3VjY2Vzc2Z1bGx5IHRha2luZyBmYXN0IHBh dGggbG9jayBtZWFucyB0aGVyZSB3YXMgbm8KKwkJCSAqIGNvbmZsaWN0aW5nIGxvY2tzLgorCQkJ ICovCisJCQlpbnN0YW5jZS0+d2FpdF9zdGFydCA9IDA7CisKIAkJCWVsKys7CiAJCX0KIApAQCAt MzY1NSw2ICszNjYyLDcgQEAgR2V0TG9ja1N0YXR1c0RhdGEodm9pZCkKIAkJCWluc3RhbmNlLT5w aWQgPSBwcm9jLT5waWQ7CiAJCQlpbnN0YW5jZS0+bGVhZGVyUGlkID0gcHJvYy0+cGlkOwogCQkJ aW5zdGFuY2UtPmZhc3RwYXRoID0gdHJ1ZTsKKwkJCWluc3RhbmNlLT53YWl0X3N0YXJ0ID0gMDsK IAogCQkJZWwrKzsKIAkJfQpAQCAtMzcwNyw2ICszNzE1LDcgQEAgR2V0TG9ja1N0YXR1c0RhdGEo dm9pZCkKIAkJaW5zdGFuY2UtPnBpZCA9IHByb2MtPnBpZDsKIAkJaW5zdGFuY2UtPmxlYWRlclBp ZCA9IHByb2Nsb2NrLT5ncm91cExlYWRlci0+cGlkOwogCQlpbnN0YW5jZS0+ZmFzdHBhdGggPSBm YWxzZTsKKwkJaW5zdGFuY2UtPndhaXRfc3RhcnQgPSBsb2NrLT53YWl0X3N0YXJ0OwogCiAJCWVs Kys7CiAJfQpAQCAtNDE4NCw2ICs0MTkzLDcgQEAgbG9ja190d29waGFzZV9yZWNvdmVyKFRyYW5z YWN0aW9uSWQgeGlkLCB1aW50MTYgaW5mbywKIAkJbG9jay0+d2FpdE1hc2sgPSAwOwogCQlTSE1R dWV1ZUluaXQoJihsb2NrLT5wcm9jTG9ja3MpKTsKIAkJUHJvY1F1ZXVlSW5pdCgmKGxvY2stPndh aXRQcm9jcykpOworCQlsb2NrLT53YWl0X3N0YXJ0ID0gMDsKIAkJbG9jay0+blJlcXVlc3RlZCA9 IDA7CiAJCWxvY2stPm5HcmFudGVkID0gMDsKIAkJTWVtU2V0KGxvY2stPnJlcXVlc3RlZCwgMCwg c2l6ZW9mKGludCkgKiBNQVhfTE9DS01PREVTKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvbG1nci9wcm9jLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jCmluZGV4 IDdkYzM5MTE1OTAuLmYzNzAyY2M2ODEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv bG1nci9wcm9jLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYwpAQCAtMTI1 OSw2ICsxMjU5LDggQEAgUHJvY1NsZWVwKExPQ0FMTE9DSyAqbG9jYWxsb2NrLCBMb2NrTWV0aG9k IGxvY2tNZXRob2RUYWJsZSkKIAkJfQogCQllbHNlCiAJCQllbmFibGVfdGltZW91dF9hZnRlcihE RUFETE9DS19USU1FT1VULCBEZWFkbG9ja1RpbWVvdXQpOworCisJCWxvY2stPndhaXRfc3RhcnQg PSBnZXRfdGltZW91dF9zdGFydF90aW1lKERFQURMT0NLX1RJTUVPVVQpOwogCX0KIAogCS8qCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvbG9ja2Z1bmNzLmMgYi9zcmMvYmFja2Vu ZC91dGlscy9hZHQvbG9ja2Z1bmNzLmMKaW5kZXggZjU5MjI5MmQwNi4uNWVlMDk1MzMwNSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2xvY2tmdW5jcy5jCisrKyBiL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9sb2NrZnVuY3MuYwpAQCAtNjMsNyArNjMsNyBAQCB0eXBlZGVmIHN0cnVj dAogfSBQR19Mb2NrX1N0YXR1czsKIAogLyogTnVtYmVyIG9mIGNvbHVtbnMgaW4gcGdfbG9ja3Mg b3V0cHV0ICovCi0jZGVmaW5lIE5VTV9MT0NLX1NUQVRVU19DT0xVTU5TCQkxNQorI2RlZmluZSBO VU1fTE9DS19TVEFUVVNfQ09MVU1OUwkJMTYKIAogLyoKICAqIFZYSURHZXREYXR1bSAtIENvbnN0 cnVjdCBhIHRleHQgcmVwcmVzZW50YXRpb24gb2YgYSBWWElECkBAIC0xNDIsNiArMTQyLDggQEAg cGdfbG9ja19zdGF0dXMoUEdfRlVOQ1RJT05fQVJHUykKIAkJCQkJCSAgIEJPT0xPSUQsIC0xLCAw KTsKIAkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGRlc2MsIChBdHRyTnVtYmVyKSAxNSwgImZhc3Rw YXRoIiwKIAkJCQkJCSAgIEJPT0xPSUQsIC0xLCAwKTsKKwkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1 cGRlc2MsIChBdHRyTnVtYmVyKSAxNiwgIndhaXRfc3RhcnQiLAorCQkJCQkJICAgVElNRVNUQU1Q VFpPSUQsIC0xLCAwKTsKIAogCQlmdW5jY3R4LT50dXBsZV9kZXNjID0gQmxlc3NUdXBsZURlc2Mo dHVwZGVzYyk7CiAKQEAgLTMzNiw2ICszMzgsMTAgQEAgcGdfbG9ja19zdGF0dXMoUEdfRlVOQ1RJ T05fQVJHUykKIAkJdmFsdWVzWzEyXSA9IENTdHJpbmdHZXRUZXh0RGF0dW0oR2V0TG9ja21vZGVO YW1lKGluc3RhbmNlLT5sb2NrdGFnLmxvY2t0YWdfbG9ja21ldGhvZGlkLCBtb2RlKSk7CiAJCXZh bHVlc1sxM10gPSBCb29sR2V0RGF0dW0oZ3JhbnRlZCk7CiAJCXZhbHVlc1sxNF0gPSBCb29sR2V0 RGF0dW0oaW5zdGFuY2UtPmZhc3RwYXRoKTsKKwkJaWYgKGluc3RhbmNlLT53YWl0X3N0YXJ0ICE9 IDApCisJCQl2YWx1ZXNbMTVdID0gVGltZXN0YW1wVHpHZXREYXR1bShpbnN0YW5jZS0+d2FpdF9z dGFydCk7CisJCWVsc2UKKwkJCW51bGxzWzE1XSA9IHRydWU7CiAKIAkJdHVwbGUgPSBoZWFwX2Zv cm1fdHVwbGUoZnVuY2N0eC0+dHVwbGVfZGVzYywgdmFsdWVzLCBudWxscyk7CiAJCXJlc3VsdCA9 IEhlYXBUdXBsZUdldERhdHVtKHR1cGxlKTsKQEAgLTQwNiw2ICs0MTIsNyBAQCBwZ19sb2NrX3N0 YXR1cyhQR19GVU5DVElPTl9BUkdTKQogCQl2YWx1ZXNbMTJdID0gQ1N0cmluZ0dldFRleHREYXR1 bSgiU0lSZWFkTG9jayIpOwogCQl2YWx1ZXNbMTNdID0gQm9vbEdldERhdHVtKHRydWUpOwogCQl2 YWx1ZXNbMTRdID0gQm9vbEdldERhdHVtKGZhbHNlKTsKKwkJbnVsbHNbMTVdID0gdHJ1ZTsKIAog CQl0dXBsZSA9IGhlYXBfZm9ybV90dXBsZShmdW5jY3R4LT50dXBsZV9kZXNjLCB2YWx1ZXMsIG51 bGxzKTsKIAkJcmVzdWx0ID0gSGVhcFR1cGxlR2V0RGF0dW0odHVwbGUpOwpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdf cHJvYy5kYXQKaW5kZXggZTZjN2IwNzBmNi4uM2U2N2Q1MDg5MSAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3By b2MuZGF0CkBAIC01OTQ2LDkgKzU5NDYsOSBAQAogeyBvaWQgPT4gJzEzNzEnLCBkZXNjciA9PiAn dmlldyBzeXN0ZW0gbG9jayBpbmZvcm1hdGlvbicsCiAgIHByb25hbWUgPT4gJ3BnX2xvY2tfc3Rh dHVzJywgcHJvcm93cyA9PiAnMTAwMCcsIHByb3JldHNldCA9PiAndCcsCiAgIHByb3ZvbGF0aWxl ID0+ICd2JywgcHJvcmV0dHlwZSA9PiAncmVjb3JkJywgcHJvYXJndHlwZXMgPT4gJycsCi0gIHBy b2FsbGFyZ3R5cGVzID0+ICd7dGV4dCxvaWQsb2lkLGludDQsaW50Mix0ZXh0LHhpZCxvaWQsb2lk LGludDIsdGV4dCxpbnQ0LHRleHQsYm9vbCxib29sfScsCi0gIHByb2FyZ21vZGVzID0+ICd7byxv LG8sbyxvLG8sbyxvLG8sbyxvLG8sbyxvLG99JywKLSAgcHJvYXJnbmFtZXMgPT4gJ3tsb2NrdHlw ZSxkYXRhYmFzZSxyZWxhdGlvbixwYWdlLHR1cGxlLHZpcnR1YWx4aWQsdHJhbnNhY3Rpb25pZCxj bGFzc2lkLG9iamlkLG9ianN1YmlkLHZpcnR1YWx0cmFuc2FjdGlvbixwaWQsbW9kZSxncmFudGVk LGZhc3RwYXRofScsCisgIHByb2FsbGFyZ3R5cGVzID0+ICd7dGV4dCxvaWQsb2lkLGludDQsaW50 Mix0ZXh0LHhpZCxvaWQsb2lkLGludDIsdGV4dCxpbnQ0LHRleHQsYm9vbCxib29sLHRpbWVzdGFt cHR6fScsCisgIHByb2FyZ21vZGVzID0+ICd7byxvLG8sbyxvLG8sbyxvLG8sbyxvLG8sbyxvLG8s b30nLAorICBwcm9hcmduYW1lcyA9PiAne2xvY2t0eXBlLGRhdGFiYXNlLHJlbGF0aW9uLHBhZ2Us dHVwbGUsdmlydHVhbHhpZCx0cmFuc2FjdGlvbmlkLGNsYXNzaWQsb2JqaWQsb2Jqc3ViaWQsdmly dHVhbHRyYW5zYWN0aW9uLHBpZCxtb2RlLGdyYW50ZWQsZmFzdHBhdGgsd2FpdF9zdGFydH0nLAog ICBwcm9zcmMgPT4gJ3BnX2xvY2tfc3RhdHVzJyB9LAogeyBvaWQgPT4gJzI1NjEnLAogICBkZXNj ciA9PiAnZ2V0IGFycmF5IG9mIFBJRHMgb2Ygc2Vzc2lvbnMgYmxvY2tpbmcgc3BlY2lmaWVkIGJh Y2tlbmQgUElEIGZyb20gYWNxdWlyaW5nIGEgaGVhdnl3ZWlnaHQgbG9jaycsCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9zdG9yYWdlL2xvY2suaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbG9jay5o CmluZGV4IDFjM2U5YzE5OTkuLjhiNjUxN2FlYzMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0 b3JhZ2UvbG9jay5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbG9jay5oCkBAIC0yMiw2ICsy Miw3IEBACiAjaW5jbHVkZSAic3RvcmFnZS9sb2NrZGVmcy5oIgogI2luY2x1ZGUgInN0b3JhZ2Uv bHdsb2NrLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zaG1lbS5oIgorI2luY2x1ZGUgInV0aWxzL3Rp bWVzdGFtcC5oIgogCiAvKiBzdHJ1Y3QgUEdQUk9DIGlzIGRlY2xhcmVkIGluIHByb2MuaCwgYnV0 IG11c3QgZm9yd2FyZC1yZWZlcmVuY2UgaXQgKi8KIHR5cGVkZWYgc3RydWN0IFBHUFJPQyBQR1BS T0M7CkBAIC0zMDQsNiArMzA1LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgTE9DSwogCUxPQ0tNQVNLCXdh aXRNYXNrOwkJLyogYml0bWFzayBmb3IgbG9jayB0eXBlcyBhd2FpdGVkICovCiAJU0hNX1FVRVVF CXByb2NMb2NrczsJCS8qIGxpc3Qgb2YgUFJPQ0xPQ0sgb2JqZWN0cyBhc3NvYy4gd2l0aCBsb2Nr ICovCiAJUFJPQ19RVUVVRQl3YWl0UHJvY3M7CQkvKiBsaXN0IG9mIFBHUFJPQyBvYmplY3RzIHdh aXRpbmcgb24gbG9jayAqLworCVRpbWVzdGFtcFR6CXdhaXRfc3RhcnQ7CQkvKiB0aW1lIGF0IHdo aWNoIGxvY2sgc3RhcnRlZCB3YWl0aW5nICovCiAJaW50CQkJcmVxdWVzdGVkW01BWF9MT0NLTU9E RVNdOwkvKiBjb3VudHMgb2YgcmVxdWVzdGVkIGxvY2tzICovCiAJaW50CQkJblJlcXVlc3RlZDsJ CS8qIHRvdGFsIG9mIHJlcXVlc3RlZFtdIGFycmF5ICovCiAJaW50CQkJZ3JhbnRlZFtNQVhfTE9D S01PREVTXTsgLyogY291bnRzIG9mIGdyYW50ZWQgbG9ja3MgKi8KQEAgLTQ0NSw2ICs0NDcsNyBA QCB0eXBlZGVmIHN0cnVjdCBMb2NrSW5zdGFuY2VEYXRhCiAJTE9DS01PREUJd2FpdExvY2tNb2Rl OwkvKiBsb2NrIGF3YWl0ZWQgYnkgdGhpcyBQR1BST0MsIGlmIGFueSAqLwogCUJhY2tlbmRJZAli YWNrZW5kOwkJLyogYmFja2VuZCBJRCBvZiB0aGlzIFBHUFJPQyAqLwogCUxvY2FsVHJhbnNhY3Rp b25JZCBseGlkOwkvKiBsb2NhbCB0cmFuc2FjdGlvbiBJRCBvZiB0aGlzIFBHUFJPQyAqLworCVRp bWVzdGFtcFR6CXdhaXRfc3RhcnQ7CQkvKiB0aW1lIGF0IHdoaWNoIGxvY2sgc3RhcnRlZCB3YWl0 aW5nICovCiAJaW50CQkJcGlkOwkJCS8qIHBpZCBvZiB0aGlzIFBHUFJPQyAqLwogCWludAkJCWxl YWRlclBpZDsJCS8qIHBpZCBvZiBncm91cCBsZWFkZXI7ID0gcGlkIGlmIG5vIGdyb3VwICovCiAJ Ym9vbAkJZmFzdHBhdGg7CQkvKiB0YWtlbiB2aWEgZmFzdHBhdGg/ICovCmRpZmYgLS1naXQgYS9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvcnVsZXMub3V0CmluZGV4IDYyOTNhYjU3YmMuLmQ4ZjA2MDBhNGIgMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVsZXMub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvcnVsZXMub3V0CkBAIC0xMzk0LDggKzEzOTQsOSBAQCBwZ19sb2Nrc3wgU0VM RUNUIGwubG9ja3R5cGUsCiAgICAgbC5waWQsCiAgICAgbC5tb2RlLAogICAgIGwuZ3JhbnRlZCwK LSAgICBsLmZhc3RwYXRoCi0gICBGUk9NIHBnX2xvY2tfc3RhdHVzKCkgbChsb2NrdHlwZSwgZGF0 YWJhc2UsIHJlbGF0aW9uLCBwYWdlLCB0dXBsZSwgdmlydHVhbHhpZCwgdHJhbnNhY3Rpb25pZCwg Y2xhc3NpZCwgb2JqaWQsIG9ianN1YmlkLCB2aXJ0dWFsdHJhbnNhY3Rpb24sIHBpZCwgbW9kZSwg Z3JhbnRlZCwgZmFzdHBhdGgpOworICAgIGwuZmFzdHBhdGgsCisgICAgbC53YWl0X3N0YXJ0Cisg ICBGUk9NIHBnX2xvY2tfc3RhdHVzKCkgbChsb2NrdHlwZSwgZGF0YWJhc2UsIHJlbGF0aW9uLCBw YWdlLCB0dXBsZSwgdmlydHVhbHhpZCwgdHJhbnNhY3Rpb25pZCwgY2xhc3NpZCwgb2JqaWQsIG9i anN1YmlkLCB2aXJ0dWFsdHJhbnNhY3Rpb24sIHBpZCwgbW9kZSwgZ3JhbnRlZCwgZmFzdHBhdGgs IHdhaXRfc3RhcnQpOwogcGdfbWF0dmlld3N8IFNFTEVDVCBuLm5zcG5hbWUgQVMgc2NoZW1hbmFt ZSwKICAgICBjLnJlbG5hbWUgQVMgbWF0dmlld25hbWUsCiAgICAgcGdfZ2V0X3VzZXJieWlkKGMu cmVsb3duZXIpIEFTIG1hdHZpZXdvd25lciwKLS0gCjIuMTguMQoK --=_4a4722cb1edc0944ddac533a75e946d0--