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 1vo3GY-00F2Zn-2i for pgsql-hackers@arkaria.postgresql.org; Thu, 05 Feb 2026 17:35:43 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vo3GX-000L97-2r for pgsql-hackers@arkaria.postgresql.org; Thu, 05 Feb 2026 17:35:41 +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 1vo3GX-000L8y-1Y for pgsql-hackers@lists.postgresql.org; Thu, 05 Feb 2026 17:35:41 +0000 Received: from mail-ed1-x534.google.com ([2a00:1450:4864:20::534]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vo3GU-00000001DyF-23i3 for pgsql-hackers@lists.postgresql.org; Thu, 05 Feb 2026 17:35:40 +0000 Received: by mail-ed1-x534.google.com with SMTP id 4fb4d7f45d1cf-65814266b08so1848271a12.3 for ; Thu, 05 Feb 2026 09:35:38 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1770312937; cv=none; d=google.com; s=arc-20240605; b=VmLKz5Cc3csZn7ngksXeR86Oy0m4wcWcfbFb8uD3OOWbPogaGbBH3EAk29CTx4oKXe U3pr/7LfRd/r8cc1eSTEpFWMnI5WNUaixwb96vMku9yDD37pvOeM9TDvoR+Qnabas4rR WKaBkTRYj6N+IHDuBKVXx9E4EzldV/bQyMIMI9u1GG7UXnaNnNf4eq17JN7HCRfJrr7Q Dn3tHCebmYJM/hHJOIhx+9gg5AiyWTXIevZK3sUQ+xLIt8rNylW5jCzJGPagqcZUPLI5 Kp+z6uHqmwOKNpd6AAIUlaexra7n/kn5CbWN6DfZGh89BNtV6q9h+CGfFzGhg0WQmAWn b1Yg== 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=PeDOYZ5ST341Zh/cEr3Atv//uHaVgVD+UxrH3TcCRQk=; fh=y/qM+xhvgyiYG3GI0DJsiL97PRSh8TWcXJJdzTyODEg=; b=LSx4Zu3dvpP8CMuqMXjiOpzMoTMLh7hxN9fynBgFOAA8TWo+bcLQMOawOplRNgjEYY 06UhWZ70CNez3JEXwNRBqGc2HpDisoqZ022hgJB+k6o8wVTbH9R9V8pulUUHMusLrymC nYu1hzhTZj9fryZqpx2SUYFq1FgsSBIDDrWi9G75vT5857eOveU0B0BYbLqKQmMOpREQ O6u3404510UYCSkP5UauWCmKDKGTAQ/NRc9lm+Xp3Uvgl/QS6uQobHHiGRX5aMcDqax0 5ATCTlrHJes3aCKm2dOb92oIZD/hIJXNl4iwJy+0U8yeAh1gPLdALrVBWa8FRISb8Sek ua2g==; 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=cybertec.at; s=google; t=1770312937; x=1770917737; 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=PeDOYZ5ST341Zh/cEr3Atv//uHaVgVD+UxrH3TcCRQk=; b=lsJkyF8j2S3iMSNH1DxxgJJ2GSYz/m08oWOadPGk2K+rIA1pFoyubVkONd5Jdrckj9 jfCtt1DcOChTEQHvShS0pz8bl0tl/5Cma/pQ3AGVPTZkNI3hgjR+KuJTsx1ijuDFtdu7 zs1RN2yP0dgeN4TH7JGt5PXmXPGu3hY/qubX2AoJ+pvOqrG+9ArtkwkgGyfZcWiNLf0o tZ1O8DIB33eFiwzP5VITjflAasFx7Jn459r1t+GXuXuPZp5F5OAPVGgzwnrcYrrTSoFy kvejPBB0fdzsl5rZsmOBZ47goz7ZUzypiIPohHy2N7rZ7MTz32aYjVg3A2i3iru2aDLq ZHsw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770312937; x=1770917737; 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=PeDOYZ5ST341Zh/cEr3Atv//uHaVgVD+UxrH3TcCRQk=; b=prTO81UZNf+1VA8oR+Jcq9IJsfjRx4dCbyC8+j02IZ5Y9QTY5wLZjGbIkuKLv2uTcD r0MUwdkw/Z22lgRmYD++7Hl4Fz0hTod03JV/V0+4R56EFG0KGMmbjG9kezG9t8IZPJid dyYWn8xZ4qhK1w6d4AzgEXW0JNDVdyy1UobW7dabNQkHqpx25JrX/OsMlJR17LnB5oAo HdiNUrnGpoivmMHC07d7v9SgeGJzUi2EU0Qv4MQMxSij5m5OjDFjrn2N9317PiSogjo4 UcfypxM2avmLND7xBgVwXgohp0XFK2CN0WCWQTAGwzJcRAz1YOSd0R7CSfXliIIdJfYr fe0w== X-Forwarded-Encrypted: i=1; AJvYcCUzWknYWrlE3tU6h8zDm/KN446f2DpusIVps0dOtxvm0Xr2/Mgqn7trwA4pNTZ3QAUNuN6guYt1sE81YGy5@lists.postgresql.org X-Gm-Message-State: AOJu0Yz9TwXM8HEQ9ZZ99tngLkt6ETSq42Ji+b0PvnCrAjDajq3gE6Gm RH7xaZyS6G9WGcZFHV2UfGuzM3lHSWuLOZMvauTK3E4tdesOEndYTX2AXEX37enp3b2S8T61Q4x 1pL7s+3K5DHRr6TjyQo3Bl+WOZbqX9l1Lah59on47fQ== X-Gm-Gg: AZuq6aIjrkdZnXwJLAPKeq9akKFRTbvd/IUtlPcazqsnIsDFtJfecTMgNUyU52byBsr KugDj/fcrb2KRM6Uv2j+4U0eVxYsAb2U03pp93ErnUePdCVsIYkkUg8zcMD/oQt9tqsm+eKbEp9 Ew1PYpRaY8+4DIE5i/gOgCGo5oe+J5ukBysWWDbtPRIss+jIZyviDZ8X3JMrLFYm3G34eAfVb09 7XT/53IIOP4hMOkLahUpiIBwDPK6srAcaT/katQLRpD6PWAVeS2j9QrM79FzzC4KW1/GRM= X-Received: by 2002:a17:907:ea7:b0:b80:5ae7:5d94 with SMTP id a640c23a62f3a-b8e9f10a7acmr486328166b.7.1770312937132; Thu, 05 Feb 2026 09:35:37 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Pavlo Golub Date: Thu, 5 Feb 2026 18:35:27 +0100 X-Gm-Features: AZwV_Qgnhw5_dsENqR9M4usEleo6MUvOA-dpRL8J2ECKMloQ2jVcpMxNwuZEfV4 Message-ID: Subject: Re: Re[2]: [PATCH] Add last_executed timestamp to pg_stat_statements To: Bertrand Drouvot Cc: Sami Imseih , Christoph Berg , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000c28189064a1719e8" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000c28189064a1719e8 Content-Type: text/plain; charset="UTF-8" Hi all, Thank you to Sami, Christoph, and Bertrand for the thorough review and valuable feedback on v1. I've prepared a v2 patch that addresses all the concerns raised. You're absolutely right that calling `GetCurrentTimestamp()` while holding a spinlock is unacceptable. I've adopted Sami's suggestion to use `GetCurrentStatementStartTimestamp()` instead. While Christoph correctly points out that this means we're capturing statement start time rather than end time, I believe this is an acceptable trade-off for several reasons: - the vast majority of statements complete quickly (well under typical polling intervals of 1-5 minutes); - long-running queries will appear in the next poll anyway; - deferring timestamp updates adds significant complexity; - and most importantly zero performance overhead vs a kernel call per execution. For the monitoring use case, what matters is knowing has this statement been active since my last poll? The start time serves this purpose effectively. I've renamed the column to `stats_last_updated` as Christoph suggested. This matches the existing "stats_since" column for consistency. Following Christoph's suggestion, I've also moved it to the end of the view. Per Sami's feedback, I've moved the timestamp from the `Counters` struct directly to `pgssEntry`. This is more semantically correct since it's metadata about the entry rather than a statistical counter. I've updated `PGSS_FILE_HEADER` to 0x20260205. Among other changes: - fixed all whitespace errors - moved tests to `entry_timestamp.sql` as suggested - added documentation notice about nested statement behavior - the timestamp is now set outside the spinlock-protected section Sami mentioned this was discussed in 2017 [0]. Looking at that thread, the main concerns were overhead and use cases. I believe we've addressed both: - zero overhead by using existing statement start timestamp - clear, documented use case from production monitoring tools (pgwatch, etc.) [0] https://www.postgresql.org/message-id/flat/CA+TgmoZgZMeuN8t9pawSt6M=mvxKiAZ4CvPofBWwwVWeZwHe4w@mail.gmail.com I've attached the v2 patch. All existing tests pass. I'd appreciate further review and feedback. Thanks, Pavlo Golub --000000000000c28189064a1719e8 Content-Type: application/octet-stream; name="v2-0001-pg_stat_statements-Add-stats_last_updated-column.patch" Content-Disposition: attachment; filename="v2-0001-pg_stat_statements-Add-stats_last_updated-column.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ml9qblhq0 RnJvbSA4M2M3M2Q1OGY5ZGRmMDZkZjk1OGQ2YTBhODVhYzI2ZWRmNWJiNjkyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQYXZsbyBHb2x1YiA8cGF2bG8uZ29sdWJAY3liZXJ0ZWMuYXQ+ CkRhdGU6IFRodSwgNSBGZWIgMjAyNiAxNjo1OTo1NiArMDAwMApTdWJqZWN0OiBbUEFUQ0ggdjJd IHBnX3N0YXRfc3RhdGVtZW50czogQWRkIHN0YXRzX2xhc3RfdXBkYXRlZCBjb2x1bW4gKHYyKQoK VGhpcyBwYXRjaCBhZGRzIGEgc3RhdHNfbGFzdF91cGRhdGVkIHRpbWVzdGFtcHR6IGNvbHVtbiB0 bwpwZ19zdGF0X3N0YXRlbWVudHMsIHJlY29yZGluZyB3aGVuIGVhY2ggdHJhY2tlZCBzdGF0ZW1l bnQgd2FzCm1vc3QgcmVjZW50bHkgZXhlY3V0ZWQuCgpUaGUgbW90aXZhdGlvbiBjb21lcyBmcm9t IG1vbml0b3JpbmcgdG9vbHMgdGhhdCBwb2xsCnBnX3N0YXRfc3RhdGVtZW50cyByZWd1bGFybHku IFdpdGggdGhpcyB0aW1lc3RhbXAsIHRvb2xzIGNhbgpmaWx0ZXIgYnkgJ3N0YXRzX2xhc3RfdXBk YXRlZCA+IGxhc3RfcG9sbF90aW1lJyB0byBmZXRjaCBvbmx5CnN0YXRlbWVudHMgZXhlY3V0ZWQg c2luY2UgdGhlIGxhc3QgcG9sbCwgc2lnbmlmaWNhbnRseSByZWR1Y2luZwpzdG9yYWdlIG92ZXJo ZWFkLgoKQ2hhbmdlcyBmcm9tIHYxOgotIFVzZSBHZXRDdXJyZW50U3RhdGVtZW50U3RhcnRUaW1l c3RhbXAoKSBpbnN0ZWFkIG9mIEdldEN1cnJlbnRUaW1lc3RhbXAoKQogIHRvIGF2b2lkIGtlcm5l bCBjYWxsIHVuZGVyIHNwaW5sb2NrIChhZGRyZXNzZXMgU2FtaSBJbXNlaWgncyBjb25jZXJuKQot IFJlbmFtZSBjb2x1bW4gZnJvbSBsYXN0X2V4ZWN1dGVkIHRvIHN0YXRzX2xhc3RfdXBkYXRlZCAo Q2hyaXN0b3BoIEJlcmcncyBzdWdnZXN0aW9uKQotIE1vdmUgdGltZXN0YW1wIGZyb20gQ291bnRl cnMgc3RydWN0IHRvIHBnc3NFbnRyeSBmb3IgYmV0dGVyIHNlbWFudGljcwotIFBsYWNlIGNvbHVt biBhdCBlbmQgb2YgdmlldyB0byBtYXRjaCBzdGF0c19zaW5jZSBuYW1pbmcgY29udmVudGlvbgot IEZpeGVkIHdoaXRlc3BhY2UgZXJyb3JzCi0gTW92ZWQgdGVzdHMgdG8gZW50cnlfdGltZXN0YW1w LnNxbCBhcyBzdWdnZXN0ZWQgYnkgU2FtaSBJbXNlaWgKLSBVcGRhdGVkIFBHU1NfRklMRV9IRUFE RVIgdG8gaGFuZGxlIHN0cnVjdHVyZSBjaGFuZ2UKClRoZSBpbXBsZW1lbnRhdGlvbiB1c2VzIEdl dEN1cnJlbnRTdGF0ZW1lbnRTdGFydFRpbWVzdGFtcCgpIHRvCmF2b2lkIGNhbGxpbmcgR2V0Q3Vy cmVudFRpbWVzdGFtcCgpIHVuZGVyIHNwaW5sb2NrLCB3aGljaCB3b3VsZAp2aW9sYXRlIFBvc3Rn cmVTUUwncyBzcGlubG9jayBndWlkZWxpbmVzLiBXaGlsZSB0aGlzIG1lYW5zIHRoZQp0aW1lc3Rh bXAgcmVmbGVjdHMgc3RhdGVtZW50IHN0YXJ0IHJhdGhlciB0aGFuIGVuZCB0aW1lLCB0aGlzCmlz IGFuIGFjY2VwdGFibGUgdHJhZGUtb2ZmIGZvciB0aGUgbW9uaXRvcmluZyB1c2UgY2FzZS4KClRo ZSB0aW1lc3RhbXAgaXMgc3RvcmVkIGRpcmVjdGx5IGluIHBnc3NFbnRyeSAobm90IGluIENvdW50 ZXJzKQpmb3IgYmV0dGVyIHNlbWFudGljIGNvcnJlY3RuZXNzLCBhbmQgdGhlIGNvbHVtbiBpcyBw bGFjZWQgYXQgdGhlCmVuZCBvZiB0aGUgdmlldyB0byBtYXRjaCAnc3RhdHNfc2luY2UnIG5hbWlu ZyBjb252ZW50aW9ucy4KCkFkZHJlc3NlcyBmZWVkYmFjayBmcm9tIFNhbWkgSW1zZWloLCBDaHJp c3RvcGggQmVyZywgYW5kIEJlcnRyYW5kCkRyb3V2b3Qgb24gdGhlIHBnc3FsLWhhY2tlcnMgbGlz dC4KLS0tCiBjb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9NYWtlZmlsZSAgICAgICAgICAgfCAg MSArCiAuLi4vZXhwZWN0ZWQvZW50cnlfdGltZXN0YW1wLm91dCAgICAgICAgICAgICAgfCA4MyAr KysrKysrKysrKysrKysrKysrCiBjb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9tZXNvbi5idWls ZCAgICAgICAgfCAgMSArCiAuLi4vcGdfc3RhdF9zdGF0ZW1lbnRzLS0xLjEzLS0xLjE0LnNxbCAg ICAgICAgfCA3OSArKysrKysrKysrKysrKysrKysKIC4uLi9wZ19zdGF0X3N0YXRlbWVudHMvcGdf c3RhdF9zdGF0ZW1lbnRzLmMgICB8IDM2ICsrKysrKystCiAuLi4vcGdfc3RhdF9zdGF0ZW1lbnRz LmNvbnRyb2wgICAgICAgICAgICAgICAgfCAgMiArLQogLi4uL3NxbC9lbnRyeV90aW1lc3RhbXAu c3FsICAgICAgICAgICAgICAgICAgIHwgNDggKysrKysrKysrKysKIGRvYy9zcmMvc2dtbC9wZ3N0 YXRzdGF0ZW1lbnRzLnNnbWwgICAgICAgICAgICB8IDE1ICsrKysKIDggZmlsZXMgY2hhbmdlZCwg MjYxIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29u dHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRzLS0xLjEzLS0xLjE0LnNx bAoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL01ha2VmaWxlIGIvY29u dHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvTWFrZWZpbGUKaW5kZXggYzI3ZTk1MjliYjYuLmQ3MTQy ZjcxY2Y3IDEwMDY0NAotLS0gYS9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9NYWtlZmlsZQor KysgYi9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9NYWtlZmlsZQpAQCAtNyw2ICs3LDcgQEAg T0JKUyA9IFwKIAogRVhURU5TSU9OID0gcGdfc3RhdF9zdGF0ZW1lbnRzCiBEQVRBID0gcGdfc3Rh dF9zdGF0ZW1lbnRzLS0xLjQuc3FsIFwKKwlwZ19zdGF0X3N0YXRlbWVudHMtLTEuMTMtLTEuMTQu c3FsIFwKIAlwZ19zdGF0X3N0YXRlbWVudHMtLTEuMTItLTEuMTMuc3FsIFwKIAlwZ19zdGF0X3N0 YXRlbWVudHMtLTEuMTEtLTEuMTIuc3FsIHBnX3N0YXRfc3RhdGVtZW50cy0tMS4xMC0tMS4xMS5z cWwgXAogCXBnX3N0YXRfc3RhdGVtZW50cy0tMS45LS0xLjEwLnNxbCBwZ19zdGF0X3N0YXRlbWVu dHMtLTEuOC0tMS45LnNxbCBcCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50 cy9leHBlY3RlZC9lbnRyeV90aW1lc3RhbXAub3V0IGIvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVu dHMvZXhwZWN0ZWQvZW50cnlfdGltZXN0YW1wLm91dAppbmRleCBhMTBjNGJlNmJhYy4uZTkwZmE0 ZjM1ZTQgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL2V4cGVjdGVkL2Vu dHJ5X3RpbWVzdGFtcC5vdXQKKysrIGIvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvZXhwZWN0 ZWQvZW50cnlfdGltZXN0YW1wLm91dApAQCAtMTUwLDYgKzE1MCw4OSBAQCBXSEVSRSBxdWVyeSBM SUtFICclU1RNVFRTJSc7CiAgICAgIDIgfCAgICAgICAgICAgICAgICAxIHwgICAgICAgICAgICAg ICAgICAgMiB8ICAgICAgICAgICAgICAgICAgICAgMAogKDEgcm93KQogCistLQorLS0gc3RhdHNf bGFzdF91cGRhdGVkIHRpbWVzdGFtcCB0ZXN0cworLS0KK1NFTEVDVCAxIEFTICJTVEFUU19VUEQx IjsKKyBTVEFUU19VUEQxIAorLS0tLS0tLS0tLS0tCisgICAgICAgICAgMQorKDEgcm93KQorCitT RUxFQ1Qgbm93KCkgQVMgcmVmX3RzX3VwZDEgXGdzZXQKK1NFTEVDVCBwZ19zbGVlcCgwLjEpOwor IHBnX3NsZWVwIAorLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitTRUxFQ1QgMiBBUyAiU1RBVFNf VVBEMiI7CisgU1RBVFNfVVBEMiAKKy0tLS0tLS0tLS0tLQorICAgICAgICAgIDIKKygxIHJvdykK KworU0VMRUNUIG5vdygpIEFTIHJlZl90c191cGQyIFxnc2V0CistLSB2ZXJpZnkgc3RhdHNfbGFz dF91cGRhdGVkIGlzIHNldCBhbmQgdXBkYXRlZAorU0VMRUNUCisgICAgcXVlcnksCisgICAgc3Rh dHNfbGFzdF91cGRhdGVkIElTIE5PVCBOVUxMIGFzIGhhc190cywKKyAgICBzdGF0c19sYXN0X3Vw ZGF0ZWQgPj0gOidyZWZfdHNfdXBkMScgYXMgYWZ0ZXJfcmVmMSwKKyAgICBzdGF0c19zaW5jZSA8 PSBzdGF0c19sYXN0X3VwZGF0ZWQgYXMgYWZ0ZXJfc3RhdHNfc2luY2UKK0ZST00gcGdfc3RhdF9z dGF0ZW1lbnRzCitXSEVSRSBxdWVyeSBMSUtFICclU1RBVFNfVVBEJScKK09SREVSIEJZIHF1ZXJ5 IENPTExBVEUgIkMiOworIHF1ZXJ5IHwgaGFzX3RzIHwgYWZ0ZXJfcmVmMSB8IGFmdGVyX3N0YXRz X3NpbmNlIAorLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t LQorKDAgcm93cykKKworLS0gZXhlY3V0ZSBhZ2FpbiBhbmQgdmVyaWZ5IHVwZGF0ZQorU0VMRUNU IHBnX3NsZWVwKDAuMSk7CisgcGdfc2xlZXAgCistLS0tLS0tLS0tCisgCisoMSByb3cpCisKK1NF TEVDVCAxIEFTICJTVEFUU19VUEQxIjsKKyBTVEFUU19VUEQxIAorLS0tLS0tLS0tLS0tCisgICAg ICAgICAgMQorKDEgcm93KQorCitTRUxFQ1Qgbm93KCkgQVMgcmVmX3RzX3VwZDMgXGdzZXQKK1NF TEVDVAorICAgIHF1ZXJ5LAorICAgIHN0YXRzX2xhc3RfdXBkYXRlZCA+PSA6J3JlZl90c191cGQz JyBhcyB1cGRhdGVkCitGUk9NIHBnX3N0YXRfc3RhdGVtZW50cworV0hFUkUgcXVlcnkgTElLRSAn JVNUQVRTX1VQRDElJzsKKyBxdWVyeSB8IHVwZGF0ZWQgCistLS0tLS0tKy0tLS0tLS0tLQorKDAg cm93cykKKworLS0gdGVzdCBmaWx0ZXJpbmcgKG1vbml0b3JpbmcgdXNlIGNhc2UpCitTRUxFQ1Qg Y291bnQoKikgYXMgZmlsdGVyZWRfY291bnQKK0ZST00gcGdfc3RhdF9zdGF0ZW1lbnRzCitXSEVS RSBzdGF0c19sYXN0X3VwZGF0ZWQgPj0gOidyZWZfdHNfdXBkMicKKyAgQU5EIHF1ZXJ5IExJS0Ug JyVTVEFUU19VUEQlJzsKKyBmaWx0ZXJlZF9jb3VudCAKKy0tLS0tLS0tLS0tLS0tLS0KKyAgICAg ICAgICAgICAgMAorKDEgcm93KQorCistLSBtaW5tYXggcmVzZXQgc2hvdWxkIG5vdCBhZmZlY3Qg c3RhdHNfbGFzdF91cGRhdGVkCitTRUxFQ1QgcGdfc3RhdF9zdGF0ZW1lbnRzX3Jlc2V0KDAsIDAs IHF1ZXJ5aWQsIHRydWUpCitGUk9NIHBnX3N0YXRfc3RhdGVtZW50cworV0hFUkUgcXVlcnkgTElL RSAnJVNUQVRTX1VQRDElJyBcZ3NldAorbm8gcm93cyByZXR1cm5lZCBmb3IgXGdzZXQKK1NFTEVD VAorICAgIHF1ZXJ5LAorICAgIHN0YXRzX2xhc3RfdXBkYXRlZCA+PSA6J3JlZl90c191cGQzJyBh cyB0c19wcmVzZXJ2ZWQKK0ZST00gcGdfc3RhdF9zdGF0ZW1lbnRzCitXSEVSRSBxdWVyeSBMSUtF ICclU1RBVFNfVVBEMSUnOworIHF1ZXJ5IHwgdHNfcHJlc2VydmVkIAorLS0tLS0tLSstLS0tLS0t LS0tLS0tLQorKDAgcm93cykKKwogLS0gQ2xlYW51cAogU0VMRUNUIHBnX3N0YXRfc3RhdGVtZW50 c19yZXNldCgpIElTIE5PVCBOVUxMIEFTIHQ7CiAgdCAKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdf c3RhdF9zdGF0ZW1lbnRzL21lc29uLmJ1aWxkIGIvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMv bWVzb24uYnVpbGQKaW5kZXggOWQ3OGNiODhiN2QuLjc3MTQ4OTQ5YzBkIDEwMDY0NAotLS0gYS9j b250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9tZXNvbi5idWlsZAorKysgYi9jb250cmliL3BnX3N0 YXRfc3RhdGVtZW50cy9tZXNvbi5idWlsZApAQCAtMjEsNiArMjEsNyBAQCBjb250cmliX3Rhcmdl dHMgKz0gcGdfc3RhdF9zdGF0ZW1lbnRzCiBpbnN0YWxsX2RhdGEoCiAgICdwZ19zdGF0X3N0YXRl bWVudHMuY29udHJvbCcsCiAgICdwZ19zdGF0X3N0YXRlbWVudHMtLTEuNC5zcWwnLAorICAncGdf c3RhdF9zdGF0ZW1lbnRzLS0xLjEzLS0xLjE0LnNxbCcsCiAgICdwZ19zdGF0X3N0YXRlbWVudHMt LTEuMTItLTEuMTMuc3FsJywKICAgJ3BnX3N0YXRfc3RhdGVtZW50cy0tMS4xMS0tMS4xMi5zcWwn LAogICAncGdfc3RhdF9zdGF0ZW1lbnRzLS0xLjEwLS0xLjExLnNxbCcsCmRpZmYgLS1naXQgYS9j b250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19zdGF0X3N0YXRlbWVudHMtLTEuMTMtLTEuMTQu c3FsIGIvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRzLS0xLjEz LS0xLjE0LnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNWFhZDli ZjRhMGIKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19z dGF0X3N0YXRlbWVudHMtLTEuMTMtLTEuMTQuc3FsCkBAIC0wLDAgKzEsNzkgQEAKKy8qIGNvbnRy aWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy0tMS4xMy0tMS4xNC5zcWwg Ki8KKworLS0gY29tcGxhaW4gaWYgc2NyaXB0IGlzIHNvdXJjZWQgaW4gcHNxbCwgcmF0aGVyIHRo YW4gdmlhIEFMVEVSIEVYVEVOU0lPTgorXGVjaG8gVXNlICJBTFRFUiBFWFRFTlNJT04gcGdfc3Rh dF9zdGF0ZW1lbnRzIFVQREFURSBUTyAnMS4xNCciIHRvIGxvYWQgdGhpcyBmaWxlLiBccXVpdAor CisvKiBGaXJzdCB3ZSBoYXZlIHRvIHJlbW92ZSB0aGVtIGZyb20gdGhlIGV4dGVuc2lvbiAqLwor QUxURVIgRVhURU5TSU9OIHBnX3N0YXRfc3RhdGVtZW50cyBEUk9QIFZJRVcgcGdfc3RhdF9zdGF0 ZW1lbnRzOworQUxURVIgRVhURU5TSU9OIHBnX3N0YXRfc3RhdGVtZW50cyBEUk9QIEZVTkNUSU9O IHBnX3N0YXRfc3RhdGVtZW50cyhib29sZWFuKTsKKworLyogVGhlbiB3ZSBjYW4gZHJvcCB0aGVt ICovCitEUk9QIFZJRVcgcGdfc3RhdF9zdGF0ZW1lbnRzOworRFJPUCBGVU5DVElPTiBwZ19zdGF0 X3N0YXRlbWVudHMoYm9vbGVhbik7CisKKy8qIE5vdyByZWRlZmluZSAqLworQ1JFQVRFIEZVTkNU SU9OIHBnX3N0YXRfc3RhdGVtZW50cyhJTiBzaG93dGV4dCBib29sZWFuLAorICAgIE9VVCB1c2Vy aWQgb2lkLAorICAgIE9VVCBkYmlkIG9pZCwKKyAgICBPVVQgdG9wbGV2ZWwgYm9vbCwKKyAgICBP VVQgcXVlcnlpZCBiaWdpbnQsCisgICAgT1VUIHF1ZXJ5IHRleHQsCisgICAgT1VUIHBsYW5zIGlu dDgsCisgICAgT1VUIHRvdGFsX3BsYW5fdGltZSBmbG9hdDgsCisgICAgT1VUIG1pbl9wbGFuX3Rp bWUgZmxvYXQ4LAorICAgIE9VVCBtYXhfcGxhbl90aW1lIGZsb2F0OCwKKyAgICBPVVQgbWVhbl9w bGFuX3RpbWUgZmxvYXQ4LAorICAgIE9VVCBzdGRkZXZfcGxhbl90aW1lIGZsb2F0OCwKKyAgICBP VVQgY2FsbHMgaW50OCwKKyAgICBPVVQgdG90YWxfZXhlY190aW1lIGZsb2F0OCwKKyAgICBPVVQg bWluX2V4ZWNfdGltZSBmbG9hdDgsCisgICAgT1VUIG1heF9leGVjX3RpbWUgZmxvYXQ4LAorICAg IE9VVCBtZWFuX2V4ZWNfdGltZSBmbG9hdDgsCisgICAgT1VUIHN0ZGRldl9leGVjX3RpbWUgZmxv YXQ4LAorICAgIE9VVCByb3dzIGludDgsCisgICAgT1VUIHNoYXJlZF9ibGtzX2hpdCBpbnQ4LAor ICAgIE9VVCBzaGFyZWRfYmxrc19yZWFkIGludDgsCisgICAgT1VUIHNoYXJlZF9ibGtzX2RpcnRp ZWQgaW50OCwKKyAgICBPVVQgc2hhcmVkX2Jsa3Nfd3JpdHRlbiBpbnQ4LAorICAgIE9VVCBsb2Nh bF9ibGtzX2hpdCBpbnQ4LAorICAgIE9VVCBsb2NhbF9ibGtzX3JlYWQgaW50OCwKKyAgICBPVVQg bG9jYWxfYmxrc19kaXJ0aWVkIGludDgsCisgICAgT1VUIGxvY2FsX2Jsa3Nfd3JpdHRlbiBpbnQ4 LAorICAgIE9VVCB0ZW1wX2Jsa3NfcmVhZCBpbnQ4LAorICAgIE9VVCB0ZW1wX2Jsa3Nfd3JpdHRl biBpbnQ4LAorICAgIE9VVCBzaGFyZWRfYmxrX3JlYWRfdGltZSBmbG9hdDgsCisgICAgT1VUIHNo YXJlZF9ibGtfd3JpdGVfdGltZSBmbG9hdDgsCisgICAgT1VUIGxvY2FsX2Jsa19yZWFkX3RpbWUg ZmxvYXQ4LAorICAgIE9VVCBsb2NhbF9ibGtfd3JpdGVfdGltZSBmbG9hdDgsCisgICAgT1VUIHRl bXBfYmxrX3JlYWRfdGltZSBmbG9hdDgsCisgICAgT1VUIHRlbXBfYmxrX3dyaXRlX3RpbWUgZmxv YXQ4LAorICAgIE9VVCB3YWxfcmVjb3JkcyBpbnQ4LAorICAgIE9VVCB3YWxfZnBpIGludDgsCisg ICAgT1VUIHdhbF9ieXRlcyBudW1lcmljLAorICAgIE9VVCB3YWxfYnVmZmVyc19mdWxsIGludDgs CisgICAgT1VUIGppdF9mdW5jdGlvbnMgaW50OCwKKyAgICBPVVQgaml0X2dlbmVyYXRpb25fdGlt ZSBmbG9hdDgsCisgICAgT1VUIGppdF9pbmxpbmluZ19jb3VudCBpbnQ4LAorICAgIE9VVCBqaXRf aW5saW5pbmdfdGltZSBmbG9hdDgsCisgICAgT1VUIGppdF9vcHRpbWl6YXRpb25fY291bnQgaW50 OCwKKyAgICBPVVQgaml0X29wdGltaXphdGlvbl90aW1lIGZsb2F0OCwKKyAgICBPVVQgaml0X2Vt aXNzaW9uX2NvdW50IGludDgsCisgICAgT1VUIGppdF9lbWlzc2lvbl90aW1lIGZsb2F0OCwKKyAg ICBPVVQgaml0X2RlZm9ybV9jb3VudCBpbnQ4LAorICAgIE9VVCBqaXRfZGVmb3JtX3RpbWUgZmxv YXQ4LAorICAgIE9VVCBwYXJhbGxlbF93b3JrZXJzX3RvX2xhdW5jaCBpbnQ4LAorICAgIE9VVCBw YXJhbGxlbF93b3JrZXJzX2xhdW5jaGVkIGludDgsCisgICAgT1VUIGdlbmVyaWNfcGxhbl9jYWxs cyBpbnQ4LAorICAgIE9VVCBjdXN0b21fcGxhbl9jYWxscyBpbnQ4LAorICAgIE9VVCBzdGF0c19z aW5jZSB0aW1lc3RhbXAgd2l0aCB0aW1lIHpvbmUsCisgICAgT1VUIG1pbm1heF9zdGF0c19zaW5j ZSB0aW1lc3RhbXAgd2l0aCB0aW1lIHpvbmUsCisgICAgT1VUIHN0YXRzX2xhc3RfdXBkYXRlZCB0 aW1lc3RhbXAgd2l0aCB0aW1lIHpvbmUKKykKK1JFVFVSTlMgU0VUT0YgcmVjb3JkCitBUyAnTU9E VUxFX1BBVEhOQU1FJywgJ3BnX3N0YXRfc3RhdGVtZW50c18xXzE0JworTEFOR1VBR0UgQyBTVFJJ Q1QgVk9MQVRJTEUgUEFSQUxMRUwgU0FGRTsKKworQ1JFQVRFIFZJRVcgcGdfc3RhdF9zdGF0ZW1l bnRzIEFTCisgIFNFTEVDVCAqIEZST00gcGdfc3RhdF9zdGF0ZW1lbnRzKHRydWUpOworCitHUkFO VCBTRUxFQ1QgT04gcGdfc3RhdF9zdGF0ZW1lbnRzIFRPIFBVQkxJQzsKZGlmZiAtLWdpdCBhL2Nv bnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy5jIGIvY29udHJpYi9w Z19zdGF0X3N0YXRlbWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRzLmMKaW5kZXggNGE0Mjc1MzNiZDgu LjU3NzM0ODcyMGZlIDEwMDY0NAotLS0gYS9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19z dGF0X3N0YXRlbWVudHMuYworKysgYi9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19zdGF0 X3N0YXRlbWVudHMuYwpAQCAtODYsNyArODYsNyBAQCBQR19NT0RVTEVfTUFHSUNfRVhUKAogI2Rl ZmluZSBQR1NTX1RFWFRfRklMRQlQR19TVEFUX1RNUF9ESVIgIi9wZ3NzX3F1ZXJ5X3RleHRzLnN0 YXQiCiAKIC8qIE1hZ2ljIG51bWJlciBpZGVudGlmeWluZyB0aGUgc3RhdHMgZmlsZSBmb3JtYXQg Ki8KLXN0YXRpYyBjb25zdCB1aW50MzIgUEdTU19GSUxFX0hFQURFUiA9IDB4MjAyNTA3MzE7Citz dGF0aWMgY29uc3QgdWludDMyIFBHU1NfRklMRV9IRUFERVIgPSAweDIwMjYwMjA1OwogCiAvKiBQ b3N0Z3JlU1FMIG1ham9yIHZlcnNpb24gbnVtYmVyLCBjaGFuZ2VzIGluIHdoaWNoIGludmFsaWRh dGUgYWxsIGVudHJpZXMgKi8KIHN0YXRpYyBjb25zdCB1aW50MzIgUEdTU19QR19NQUpPUl9WRVJT SU9OID0gUEdfVkVSU0lPTl9OVU0gLyAxMDA7CkBAIC0xMTYsNiArMTE2LDcgQEAgdHlwZWRlZiBl bnVtIHBnc3NWZXJzaW9uCiAJUEdTU19WMV8xMSwKIAlQR1NTX1YxXzEyLAogCVBHU1NfVjFfMTMs CisJUEdTU19WMV8xNCwKIH0gcGdzc1ZlcnNpb247CiAKIHR5cGVkZWYgZW51bSBwZ3NzU3RvcmVL aW5kCkBAIC0yNDAsNiArMjQxLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgcGdzc0VudHJ5CiAJaW50CQkJ ZW5jb2Rpbmc7CQkvKiBxdWVyeSB0ZXh0IGVuY29kaW5nICovCiAJVGltZXN0YW1wVHogc3RhdHNf c2luY2U7CS8qIHRpbWVzdGFtcCBvZiBlbnRyeSBhbGxvY2F0aW9uICovCiAJVGltZXN0YW1wVHog bWlubWF4X3N0YXRzX3NpbmNlOyAvKiB0aW1lc3RhbXAgb2YgbGFzdCBtaW4vbWF4IHZhbHVlcyBy ZXNldCAqLworCVRpbWVzdGFtcFR6IHN0YXRzX2xhc3RfdXBkYXRlZDsgLyogdGltZXN0YW1wIG9m IGxhc3Qgc3RhdGVtZW50IHN0YXJ0ICovCiAJc2xvY2tfdAkJbXV0ZXg7CQkJLyogcHJvdGVjdHMg dGhlIGNvdW50ZXJzIG9ubHkgKi8KIH0gcGdzc0VudHJ5OwogCkBAIC0zMjcsNiArMzI5LDcgQEAg UEdfRlVOQ1RJT05fSU5GT19WMShwZ19zdGF0X3N0YXRlbWVudHNfMV8xMCk7CiBQR19GVU5DVElP Tl9JTkZPX1YxKHBnX3N0YXRfc3RhdGVtZW50c18xXzExKTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEo cGdfc3RhdF9zdGF0ZW1lbnRzXzFfMTIpOwogUEdfRlVOQ1RJT05fSU5GT19WMShwZ19zdGF0X3N0 YXRlbWVudHNfMV8xMyk7CitQR19GVU5DVElPTl9JTkZPX1YxKHBnX3N0YXRfc3RhdGVtZW50c18x XzE0KTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEocGdfc3RhdF9zdGF0ZW1lbnRzKTsKIFBHX0ZVTkNU SU9OX0lORk9fVjEocGdfc3RhdF9zdGF0ZW1lbnRzX2luZm8pOwogCkBAIC02NzMsNiArNjc2LDcg QEAgcGdzc19zaG1lbV9zdGFydHVwKHZvaWQpCiAJCWVudHJ5LT5jb3VudGVycyA9IHRlbXAuY291 bnRlcnM7CiAJCWVudHJ5LT5zdGF0c19zaW5jZSA9IHRlbXAuc3RhdHNfc2luY2U7CiAJCWVudHJ5 LT5taW5tYXhfc3RhdHNfc2luY2UgPSB0ZW1wLm1pbm1heF9zdGF0c19zaW5jZTsKKwkJZW50cnkt PnN0YXRzX2xhc3RfdXBkYXRlZCA9IHRlbXAuc3RhdHNfbGFzdF91cGRhdGVkOwogCX0KIAogCS8q IFJlYWQgZ2xvYmFsIHN0YXRpc3RpY3MgZm9yIHBnX3N0YXRfc3RhdGVtZW50cyAqLwpAQCAtMTUx NCw2ICsxNTE4LDkgQEAgcGdzc19zdG9yZShjb25zdCBjaGFyICpxdWVyeSwgaW50NjQgcXVlcnlJ ZCwKIAkJCWVudHJ5LT5jb3VudGVycy5jdXN0b21fcGxhbl9jYWxscysrOwogCiAJCVNwaW5Mb2Nr UmVsZWFzZSgmZW50cnktPm11dGV4KTsKKworCQkvKiBVcGRhdGUgc3RhdHNfbGFzdF91cGRhdGVk IHRpbWVzdGFtcCAob3V0c2lkZSBzcGlubG9jaykgKi8KKwkJZW50cnktPnN0YXRzX2xhc3RfdXBk YXRlZCA9IEdldEN1cnJlbnRTdGF0ZW1lbnRTdGFydFRpbWVzdGFtcCgpOwogCX0KIAogZG9uZToK QEAgLTE1ODEsNyArMTU4OCw4IEBAIHBnX3N0YXRfc3RhdGVtZW50c19yZXNldChQR19GVU5DVElP Tl9BUkdTKQogI2RlZmluZSBQR19TVEFUX1NUQVRFTUVOVFNfQ09MU19WMV8xMQk0OQogI2RlZmlu ZSBQR19TVEFUX1NUQVRFTUVOVFNfQ09MU19WMV8xMgk1MgogI2RlZmluZSBQR19TVEFUX1NUQVRF TUVOVFNfQ09MU19WMV8xMwk1NAotI2RlZmluZSBQR19TVEFUX1NUQVRFTUVOVFNfQ09MUwkJCTU0 CS8qIG1heGltdW0gb2YgYWJvdmUgKi8KKyNkZWZpbmUgUEdfU1RBVF9TVEFURU1FTlRTX0NPTFNf VjFfMTQJNTUKKyNkZWZpbmUgUEdfU1RBVF9TVEFURU1FTlRTX0NPTFMJCQk1NQkvKiBtYXhpbXVt IG9mIGFib3ZlICovCiAKIC8qCiAgKiBSZXRyaWV2ZSBzdGF0ZW1lbnQgc3RhdGlzdGljcy4KQEAg LTE1OTMsNiArMTYwMSwxNiBAQCBwZ19zdGF0X3N0YXRlbWVudHNfcmVzZXQoUEdfRlVOQ1RJT05f QVJHUykKICAqIGV4cGVjdGVkIEFQSSB2ZXJzaW9uIGlzIGlkZW50aWZpZWQgYnkgZW1iZWRkaW5n IGl0IGluIHRoZSBDIG5hbWUgb2YgdGhlCiAgKiBmdW5jdGlvbi4gIFVuZm9ydHVuYXRlbHkgd2Ug d2VyZW4ndCBicmlnaHQgZW5vdWdoIHRvIGRvIHRoYXQgZm9yIDEuMS4KICAqLworRGF0dW0KK3Bn X3N0YXRfc3RhdGVtZW50c18xXzE0KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJYm9vbAkJc2hvd3Rl eHQgPSBQR19HRVRBUkdfQk9PTCgwKTsKKworCXBnX3N0YXRfc3RhdGVtZW50c19pbnRlcm5hbChm Y2luZm8sIFBHU1NfVjFfMTQsIHNob3d0ZXh0KTsKKworCXJldHVybiAoRGF0dW0pIDA7Cit9CisK IERhdHVtCiBwZ19zdGF0X3N0YXRlbWVudHNfMV8xMyhQR19GVU5DVElPTl9BUkdTKQogewpAQCAt MTc2NSw2ICsxNzgzLDEwIEBAIHBnX3N0YXRfc3RhdGVtZW50c19pbnRlcm5hbChGdW5jdGlvbkNh bGxJbmZvIGZjaW5mbywKIAkJCWlmIChhcGlfdmVyc2lvbiAhPSBQR1NTX1YxXzEzKQogCQkJCWVs b2coRVJST1IsICJpbmNvcnJlY3QgbnVtYmVyIG9mIG91dHB1dCBhcmd1bWVudHMiKTsKIAkJCWJy ZWFrOworCQljYXNlIFBHX1NUQVRfU1RBVEVNRU5UU19DT0xTX1YxXzE0OgorCQkJaWYgKGFwaV92 ZXJzaW9uICE9IFBHU1NfVjFfMTQpCisJCQkJZWxvZyhFUlJPUiwgImluY29ycmVjdCBudW1iZXIg b2Ygb3V0cHV0IGFyZ3VtZW50cyIpOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQllbG9nKEVS Uk9SLCAiaW5jb3JyZWN0IG51bWJlciBvZiBvdXRwdXQgYXJndW1lbnRzIik7CiAJfQpAQCAtMTg0 MCw2ICsxODYyLDcgQEAgcGdfc3RhdF9zdGF0ZW1lbnRzX2ludGVybmFsKEZ1bmN0aW9uQ2FsbElu Zm8gZmNpbmZvLAogCQlpbnQ2NAkJcXVlcnlpZCA9IGVudHJ5LT5rZXkucXVlcnlpZDsKIAkJVGlt ZXN0YW1wVHogc3RhdHNfc2luY2U7CiAJCVRpbWVzdGFtcFR6IG1pbm1heF9zdGF0c19zaW5jZTsK KwkJVGltZXN0YW1wVHogc3RhdHNfbGFzdF91cGRhdGVkOwogCiAJCW1lbXNldCh2YWx1ZXMsIDAs IHNpemVvZih2YWx1ZXMpKTsKIAkJbWVtc2V0KG51bGxzLCAwLCBzaXplb2YobnVsbHMpKTsKQEAg LTE5MDgsMTEgKzE5MzEsMTIgQEAgcGdfc3RhdF9zdGF0ZW1lbnRzX2ludGVybmFsKEZ1bmN0aW9u Q2FsbEluZm8gZmNpbmZvLAogCQlTcGluTG9ja1JlbGVhc2UoJmVudHJ5LT5tdXRleCk7CiAKIAkJ LyoKLQkJICogVGhlIHNwaW5sb2NrIGlzIG5vdCByZXF1aXJlZCB3aGVuIHJlYWRpbmcgdGhlc2Ug dHdvIGFzIHRoZXkgYXJlCisJCSAqIFRoZSBzcGlubG9jayBpcyBub3QgcmVxdWlyZWQgd2hlbiBy ZWFkaW5nIHRoZXNlIHRocmVlIGFzIHRoZXkgYXJlCiAJCSAqIGFsd2F5cyB1cGRhdGVkIHdoZW4g aG9sZGluZyBwZ3NzLT5sb2NrIGV4Y2x1c2l2ZWx5LgogCQkgKi8KIAkJc3RhdHNfc2luY2UgPSBl bnRyeS0+c3RhdHNfc2luY2U7CiAJCW1pbm1heF9zdGF0c19zaW5jZSA9IGVudHJ5LT5taW5tYXhf c3RhdHNfc2luY2U7CisJCXN0YXRzX2xhc3RfdXBkYXRlZCA9IGVudHJ5LT5zdGF0c19sYXN0X3Vw ZGF0ZWQ7CiAKIAkJLyogU2tpcCBlbnRyeSBpZiB1bmV4ZWN1dGVkIChpZSwgaXQncyBhIHBlbmRp bmcgInN0aWNreSIgZW50cnkpICovCiAJCWlmIChJU19TVElDS1kodG1wKSkKQEAgLTIwMjcsNiAr MjA1MSwxMCBAQCBwZ19zdGF0X3N0YXRlbWVudHNfaW50ZXJuYWwoRnVuY3Rpb25DYWxsSW5mbyBm Y2luZm8sCiAJCQl2YWx1ZXNbaSsrXSA9IFRpbWVzdGFtcFR6R2V0RGF0dW0oc3RhdHNfc2luY2Up OwogCQkJdmFsdWVzW2krK10gPSBUaW1lc3RhbXBUekdldERhdHVtKG1pbm1heF9zdGF0c19zaW5j ZSk7CiAJCX0KKwkJaWYgKGFwaV92ZXJzaW9uID49IFBHU1NfVjFfMTQpCisJCXsKKwkJCXZhbHVl c1tpKytdID0gVGltZXN0YW1wVHpHZXREYXR1bShzdGF0c19sYXN0X3VwZGF0ZWQpOworCQl9CiAK IAkJQXNzZXJ0KGkgPT0gKGFwaV92ZXJzaW9uID09IFBHU1NfVjFfMCA/IFBHX1NUQVRfU1RBVEVN RU5UU19DT0xTX1YxXzAgOgogCQkJCQkgYXBpX3ZlcnNpb24gPT0gUEdTU19WMV8xID8gUEdfU1RB VF9TVEFURU1FTlRTX0NPTFNfVjFfMSA6CkBAIC0yMDM4LDYgKzIwNjYsNyBAQCBwZ19zdGF0X3N0 YXRlbWVudHNfaW50ZXJuYWwoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sCiAJCQkJCSBhcGlfdmVy c2lvbiA9PSBQR1NTX1YxXzExID8gUEdfU1RBVF9TVEFURU1FTlRTX0NPTFNfVjFfMTEgOgogCQkJ CQkgYXBpX3ZlcnNpb24gPT0gUEdTU19WMV8xMiA/IFBHX1NUQVRfU1RBVEVNRU5UU19DT0xTX1Yx XzEyIDoKIAkJCQkJIGFwaV92ZXJzaW9uID09IFBHU1NfVjFfMTMgPyBQR19TVEFUX1NUQVRFTUVO VFNfQ09MU19WMV8xMyA6CisJCQkJCSBhcGlfdmVyc2lvbiA9PSBQR1NTX1YxXzE0ID8gUEdfU1RB VF9TVEFURU1FTlRTX0NPTFNfVjFfMTQgOgogCQkJCQkgLTEgLyogZmFpbCBpZiB5b3UgZm9yZ2V0 IHRvIHVwZGF0ZSB0aGlzIGFzc2VydCAqLyApKTsKIAogCQl0dXBsZXN0b3JlX3B1dHZhbHVlcyhy c2luZm8tPnNldFJlc3VsdCwgcnNpbmZvLT5zZXREZXNjLCB2YWx1ZXMsIG51bGxzKTsKQEAgLTIx NDQsNiArMjE3Myw3IEBAIGVudHJ5X2FsbG9jKHBnc3NIYXNoS2V5ICprZXksIFNpemUgcXVlcnlf b2Zmc2V0LCBpbnQgcXVlcnlfbGVuLCBpbnQgZW5jb2RpbmcsCiAJCWVudHJ5LT5lbmNvZGluZyA9 IGVuY29kaW5nOwogCQllbnRyeS0+c3RhdHNfc2luY2UgPSBHZXRDdXJyZW50VGltZXN0YW1wKCk7 CiAJCWVudHJ5LT5taW5tYXhfc3RhdHNfc2luY2UgPSBlbnRyeS0+c3RhdHNfc2luY2U7CisJCWVu dHJ5LT5zdGF0c19sYXN0X3VwZGF0ZWQgPSBlbnRyeS0+c3RhdHNfc2luY2U7CiAJfQogCiAJcmV0 dXJuIGVudHJ5OwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvcGdfc3Rh dF9zdGF0ZW1lbnRzLmNvbnRyb2wgYi9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19zdGF0 X3N0YXRlbWVudHMuY29udHJvbAppbmRleCAyZWVlMGNlZmZhOC4uNjFhZTQxZWZjMTQgMTAwNjQ0 Ci0tLSBhL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy5jb250 cm9sCisrKyBiL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy5j b250cm9sCkBAIC0xLDUgKzEsNSBAQAogIyBwZ19zdGF0X3N0YXRlbWVudHMgZXh0ZW5zaW9uCiBj b21tZW50ID0gJ3RyYWNrIHBsYW5uaW5nIGFuZCBleGVjdXRpb24gc3RhdGlzdGljcyBvZiBhbGwg U1FMIHN0YXRlbWVudHMgZXhlY3V0ZWQnCi1kZWZhdWx0X3ZlcnNpb24gPSAnMS4xMycKK2RlZmF1 bHRfdmVyc2lvbiA9ICcxLjE0JwogbW9kdWxlX3BhdGhuYW1lID0gJyRsaWJkaXIvcGdfc3RhdF9z dGF0ZW1lbnRzJwogcmVsb2NhdGFibGUgPSB0cnVlCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3N0 YXRfc3RhdGVtZW50cy9zcWwvZW50cnlfdGltZXN0YW1wLnNxbCBiL2NvbnRyaWIvcGdfc3RhdF9z dGF0ZW1lbnRzL3NxbC9lbnRyeV90aW1lc3RhbXAuc3FsCmluZGV4IGQ2ZDMwMjdhYjRmLi5iYWU1 NWZhN2UyMiAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvc3FsL2VudHJ5 X3RpbWVzdGFtcC5zcWwKKysrIGIvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvc3FsL2VudHJ5 X3RpbWVzdGFtcC5zcWwKQEAgLTExMCw1ICsxMTAsNTMgQEAgU0VMRUNUCiBGUk9NIHBnX3N0YXRf c3RhdGVtZW50cwogV0hFUkUgcXVlcnkgTElLRSAnJVNUTVRUUyUnOwogCistLQorLS0gc3RhdHNf bGFzdF91cGRhdGVkIHRpbWVzdGFtcCB0ZXN0cworLS0KKworU0VMRUNUIDEgQVMgIlNUQVRTX1VQ RDEiOworU0VMRUNUIG5vdygpIEFTIHJlZl90c191cGQxIFxnc2V0CitTRUxFQ1QgcGdfc2xlZXAo MC4xKTsKK1NFTEVDVCAyIEFTICJTVEFUU19VUEQyIjsKK1NFTEVDVCBub3coKSBBUyByZWZfdHNf dXBkMiBcZ3NldAorCistLSB2ZXJpZnkgc3RhdHNfbGFzdF91cGRhdGVkIGlzIHNldCBhbmQgdXBk YXRlZAorU0VMRUNUCisgICAgcXVlcnksCisgICAgc3RhdHNfbGFzdF91cGRhdGVkIElTIE5PVCBO VUxMIGFzIGhhc190cywKKyAgICBzdGF0c19sYXN0X3VwZGF0ZWQgPj0gOidyZWZfdHNfdXBkMScg YXMgYWZ0ZXJfcmVmMSwKKyAgICBzdGF0c19zaW5jZSA8PSBzdGF0c19sYXN0X3VwZGF0ZWQgYXMg YWZ0ZXJfc3RhdHNfc2luY2UKK0ZST00gcGdfc3RhdF9zdGF0ZW1lbnRzCitXSEVSRSBxdWVyeSBM SUtFICclU1RBVFNfVVBEJScKK09SREVSIEJZIHF1ZXJ5IENPTExBVEUgIkMiOworCistLSBleGVj dXRlIGFnYWluIGFuZCB2ZXJpZnkgdXBkYXRlCitTRUxFQ1QgcGdfc2xlZXAoMC4xKTsKK1NFTEVD VCAxIEFTICJTVEFUU19VUEQxIjsKK1NFTEVDVCBub3coKSBBUyByZWZfdHNfdXBkMyBcZ3NldAor CitTRUxFQ1QKKyAgICBxdWVyeSwKKyAgICBzdGF0c19sYXN0X3VwZGF0ZWQgPj0gOidyZWZfdHNf dXBkMycgYXMgdXBkYXRlZAorRlJPTSBwZ19zdGF0X3N0YXRlbWVudHMKK1dIRVJFIHF1ZXJ5IExJ S0UgJyVTVEFUU19VUEQxJSc7CisKKy0tIHRlc3QgZmlsdGVyaW5nIChtb25pdG9yaW5nIHVzZSBj YXNlKQorU0VMRUNUIGNvdW50KCopIGFzIGZpbHRlcmVkX2NvdW50CitGUk9NIHBnX3N0YXRfc3Rh dGVtZW50cworV0hFUkUgc3RhdHNfbGFzdF91cGRhdGVkID49IDoncmVmX3RzX3VwZDInCisgIEFO RCBxdWVyeSBMSUtFICclU1RBVFNfVVBEJSc7CisKKy0tIG1pbm1heCByZXNldCBzaG91bGQgbm90 IGFmZmVjdCBzdGF0c19sYXN0X3VwZGF0ZWQKK1NFTEVDVCBwZ19zdGF0X3N0YXRlbWVudHNfcmVz ZXQoMCwgMCwgcXVlcnlpZCwgdHJ1ZSkKK0ZST00gcGdfc3RhdF9zdGF0ZW1lbnRzCitXSEVSRSBx dWVyeSBMSUtFICclU1RBVFNfVVBEMSUnIFxnc2V0CisKK1NFTEVDVAorICAgIHF1ZXJ5LAorICAg IHN0YXRzX2xhc3RfdXBkYXRlZCA+PSA6J3JlZl90c191cGQzJyBhcyB0c19wcmVzZXJ2ZWQKK0ZS T00gcGdfc3RhdF9zdGF0ZW1lbnRzCitXSEVSRSBxdWVyeSBMSUtFICclU1RBVFNfVVBEMSUnOwor CiAtLSBDbGVhbnVwCiBTRUxFQ1QgcGdfc3RhdF9zdGF0ZW1lbnRzX3Jlc2V0KCkgSVMgTk9UIE5V TEwgQVMgdDsKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9wZ3N0YXRzdGF0ZW1lbnRzLnNnbWwg Yi9kb2Mvc3JjL3NnbWwvcGdzdGF0c3RhdGVtZW50cy5zZ21sCmluZGV4IGQ3NTNkZTU4MzZlLi5h MmFjM2VmMTMwZCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3Bnc3RhdHN0YXRlbWVudHMuc2dt bAorKysgYi9kb2Mvc3JjL3NnbWwvcGdzdGF0c3RhdGVtZW50cy5zZ21sCkBAIC01OTMsNiArNTkz LDIxIEBACiAgICAgICAgPHN0cnVjdGZpZWxkPm1heF9leGVjX3RpbWU8L3N0cnVjdGZpZWxkPikK ICAgICAgIDwvcGFyYT48L2VudHJ5PgogICAgICA8L3Jvdz4KKworICAgICA8cm93PgorICAgICAg PGVudHJ5IHJvbGU9ImNhdGFsb2dfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImNvbHVtbl9kZWZp bml0aW9uIj4KKyAgICAgICA8c3RydWN0ZmllbGQ+c3RhdHNfbGFzdF91cGRhdGVkPC9zdHJ1Y3Rm aWVsZD4gPHR5cGU+dGltZXN0YW1wIHdpdGggdGltZSB6b25lPC90eXBlPgorICAgICAgPC9wYXJh PgorICAgICAgPHBhcmE+CisgICAgICAgVGltZSBhdCB3aGljaCB0aGUgc3RhdGVtZW50IHN0YXRp c3RpY3Mgd2VyZSBsYXN0IHVwZGF0ZWQgKHNwZWNpZmljYWxseSwKKyAgICAgICB0aGUgdGltZSB3 aGVuIHRoZSBzdGF0ZW1lbnQgbW9zdCByZWNlbnRseSBzdGFydGVkIGV4ZWN1dGlvbikuCisgICAg ICAgVGhpcyBpcyB1c2VmdWwgZm9yIG1vbml0b3JpbmcgdG9vbHMgdG8gaWRlbnRpZnkgd2hpY2gg c3RhdGVtZW50cworICAgICAgIGhhdmUgYmVlbiBleGVjdXRlZCBzaW5jZSB0aGVpciBsYXN0IHBv bGwuCisgICAgICAgRm9yIG5lc3RlZCBzdGF0ZW1lbnRzICh3aGVuIDx2YXJuYW1lPnBnX3N0YXRf c3RhdGVtZW50cy50cmFjazwvdmFybmFtZT4KKyAgICAgICBpcyBzZXQgdG8gPGxpdGVyYWw+YWxs PC9saXRlcmFsPiksIHRoaXMgcmVmbGVjdHMgdGhlIHN0YXJ0IHRpbWUgb2YgdGhlCisgICAgICAg cGFyZW50IHRvcC1sZXZlbCBzdGF0ZW1lbnQuCisgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAgICAg PC9yb3c+CiAgICAgPC90Ym9keT4KICAgIDwvdGdyb3VwPgogICA8L3RhYmxlPgotLSAKMi41Mi4w Cgo= --000000000000c28189064a1719e8--