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 1pbaey-0002Vb-GF for pgsql-hackers@arkaria.postgresql.org; Mon, 13 Mar 2023 05:23:48 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pbaew-00029q-Ec for pgsql-hackers@arkaria.postgresql.org; Mon, 13 Mar 2023 05:23:46 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pbaev-00029h-Ou for pgsql-hackers@lists.postgresql.org; Mon, 13 Mar 2023 05:23:46 +0000 Received: from mail-ed1-x530.google.com ([2a00:1450:4864:20::530]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1pbaer-0000H1-VU for pgsql-hackers@postgresql.org; Mon, 13 Mar 2023 05:23:44 +0000 Received: by mail-ed1-x530.google.com with SMTP id o12so43834617edb.9 for ; Sun, 12 Mar 2023 22:23:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1678685019; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=VAj7KL6ILN55xwRIEr6mX0bNgOFscsmweHqOwEus5KQ=; b=lTxAax9MO/tLsAMQXp73hIxvouXEm89qT1Ji0cN41jhTKCYOW/bbiS9zAyWzAosx1F yJ/CSUsjxGdWgB2VWkkjEObWrr9XJ95K80d7E1ROKfgJd1cYYdQq6WuyvRyZwL7p5eFb C2RSmjVq0SDLHBVpf8i6G7k8c6IMdCB7rFPqRZY1pNB4r1kH+0hFWVzXvowMDPHnQ6dG dXePSkxtEHW2tUFkm9TLes3ky77OxVJwE6FIz1PWu6rlp3bqMGTZwwfzEmsVBjLWhvRr MF6PSU3u9h27tio++z9CSfJEPqzre1AG8qcXhkwprOLu2pyTxcGFs9U0RNrv4Ln+eS/l xRYw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678685019; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=VAj7KL6ILN55xwRIEr6mX0bNgOFscsmweHqOwEus5KQ=; b=b/ooNyf/SVCXyz+hvEKFNbA4Ef6oHeDHTOilQoRDVlczVo0TbmtnRuZKSs+r/Mg6xR I+9RWstDzz9PQRmys/BLTuHjVPPnDEQKIun7LSwMb3frcYXN/LlPXMJOejKE5XpGOi+i VgnJVK05LAgBEy+tMXXRJP3At2w05kbWtt3c75doSqzpD14eOH2UZur2/x1eDpjnRmwt ruLhKh2SlKpJruTRt2agyRZzi9SOKiToIE3NTpu8VkxQLAFfHl+Av1ATpi1hlhfG/+H8 OCQrrVOi//BpI/0Me//wiju3kSKwEIVHgUgekWXmX4x6yGFpHJjW5mvGMdy1Y1YIfzUf ZuDA== X-Gm-Message-State: AO0yUKWmUtLZrKa1wijg06erw4a/hOb9gjqw3Rulm76GTplIZeJptphl 1IKZTzzVnUyipc81NUTefkpUIfrt6QZ1i8ytZVHmj11MGpqNww== X-Google-Smtp-Source: AK7set9WiRJm9pWRQ8mwxf7FJ8mBO2+bWrxxUvy2MeBzOtQ9saMzAPmAn3wecqp4em8g8+G5m2v2UgzQfZ1OpalCYBo= X-Received: by 2002:a17:906:13c2:b0:8b1:7aec:c8e6 with SMTP id g2-20020a17090613c200b008b17aecc8e6mr17280494ejc.2.1678685019616; Sun, 12 Mar 2023 22:23:39 -0700 (PDT) MIME-Version: 1.0 From: Thomas Munro Date: Mon, 13 Mar 2023 18:23:02 +1300 Message-ID: Subject: Microsecond-based timeouts To: pgsql-hackers Content-Type: multipart/mixed; boundary="00000000000048f74b05f6c1506f" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000048f74b05f6c1506f Content-Type: text/plain; charset="UTF-8" Hi, Over in [1], I thought for a moment that a new function WaitLatchUs(..., timeout_us, ...) was going to be useful to fix that bug report, at least in master, until I realised the required Linux syscall is a little too new (for example RHEL 9 shipped May '22, Debian 12 is expected to be declared "stable" in a few months). So I'm kicking this proof-of-concept over into a new thread to talk about in the next cycle, in case it turns out to be useful later. There probably isn't too much call for very high resolution sleeping. Most time-based sleeping is probably bad, but when it's legitimately used to spread CPU or I/O out (instead of illegitimate use for polling-based algorithms), it seems nice to be able to use all the accuracy your hardware can provide, and yet it is still important to be able to process other kinds of events, so WaitLatchUs() seems like a better building block than pg_usleep(). One question is whether it'd be better to use nanoseconds instead, since the relevant high-resolution primitives use those under the covers (struct timespec). On the other hand, microseconds are a good match for our TimestampTz which is the ultimate source of many of our timeout decisions. I suppose we could also consider an interface with an absolute timeout instead, and then stop thinking about the units so much. As mentioned in that other thread, the only systems that currently seem to be able to sleep less than 1ms through these multiplexing APIs are: Linux 5.11+ (epoll_pwait2()), FreeBSD (kevent()), macOS (ditto). Everything else will round up to milliseconds at the kernel interface (because poll(), epoll_wait() and WaitForMultipleObjects() take those) or later inside the kernel due to kernel tick rounding. There might be ways to do better on Windows with separate timer events, but I don't know. [1] https://www.postgresql.org/message-id/flat/CAAKRu_b-q0hXCBUCAATh0Z4Zi6UkiC0k2DFgoD3nC-r3SkR3tg%40mail.gmail.com --00000000000048f74b05f6c1506f Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Support-microsecond-based-timeouts-in-WaitEventSet-A.patch" Content-Disposition: attachment; filename="0001-Support-microsecond-based-timeouts-in-WaitEventSet-A.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lf6dfp4s0 RnJvbSBlOTliN2QzMTgzMWYzMTg4OGE5NDMzYTgzZDNlNjRjY2JlMmNjNWM3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+ CkRhdGU6IEZyaSwgMTAgTWFyIDIwMjMgMTU6MTY6NDcgKzEzMDAKU3ViamVjdDogW1BBVENIIDEv M10gU3VwcG9ydCBtaWNyb3NlY29uZCBiYXNlZCB0aW1lb3V0cyBpbiBXYWl0RXZlbnRTZXQgQVBJ LgoKV2FpdExhdGNoKCkgY2FuIG9ubHkgd2FpdCBmb3Igd2hvbGUgbnVtYmVycyBvZiBtaWxsaXNl Y29uZHMsIGEKbGltaXRhdGlvbiBpbmhlcml0ZWQgdWx0aW1hdGVseSBmcm9tIHBvbGwoKSBhbmQg c2ltaWxhciBpbnRlcmZhY2VzLiAgSW4KdGhlIHBhc3QgaXQgZGlkbid0IG1hdHRlciBtdWNoIGFz IHNsZWVwIHRpbWVzIHdlcmUgdmVyeSBpbmFjY3VyYXRlIGluCnByYWN0aWNlIG9uIGNvbW1vbiBz eXN0ZW1zLCBidXQgTGludXggYW5kIG90aGVycyBjYW4gbm93IGJlIGFjY3VyYXRlCmRvd24gdG8g c21hbGwgZnJhY3Rpb25zIG9mIGEgbWlsbGlzZWNvbmQuICBJbiBvcmRlciB0byBiZSBhYmxlIHRv CnJlcGxhY2UgcGdfdXNsZWVwKCkgY2FsbHMsIHByb3ZpZGUgV2FpdExhdGNoVXMoKS4gIEp1c3Qg bGlrZQpwZ191c2xlZXAoKSwgdGhlIGFjdHVhbCByZXNvbHV0aW9uIG9mIHRoZSBzbGVlcGluZyBk ZXBlbmRzIG9uIHRoZSBPUyBhbmQKaGFyZHdhcmUuCgpGb3IgTGludXgsIHRoaXMgcmVxdWlyZXMg ZXBvbGxfcHdhaXQyKCkgKExpbnV4IDUuMTEpLCBvdGhlcndpc2Ugd2UgaGF2ZQp0byByb3VuZCB0 byBtaWxsaXNlY29uZHMgZm9yIGVwb2xsX3dhaXQoKS4gIEZvciBtYWNPUyBhbmQgKkJTRCwga2V2 ZW50KCkKaGFzIGFsd2F5cyBzdXBwb3J0ZWQgbmFub3NlY29uZC1iYXNlZCB0aW1lb3V0cywgYnV0 IG9ubHkgbWFjT1MgYW5kCkZyZWVCU0QgYXJlIGtub3duIHRvIHN1cHBvcnQgaGlnaCByZXNvbHV0 aW9uIHRpbWVycyAob3RoZXIgQlNEcyB0ZXN0ZWQKY3VycmVudGx5IHJvdW5kIHVwIHRvIGtlcm5l bCB0aWNrcyBzbyBXYWl0TGF0Y2goKSBhbHJlYWR5IGNvdWxkbid0IHNsZWVwCmZvciBvbmx5IDFt cykuICBGb3IgU29sYXJpcyBhbmQgQUlYLCB3ZSBjdXJyZW50bHkgdXNlIHBvbGwoKSBhbmQgdGhh dApyZXF1aXJlcyByb3VuZGluZyB1cCB0byBtaWxsaXNlY29uZHMsIHNvIG5vIGltcHJvdmVtZW50 IG92ZXIgV2FpdExhdGNoKCkKdGhlcmUuICBMaWtld2lzZSBmb3IgV2luZG93cyAod2hpY2ggYWxy ZWFkeSBjb3VsZG4ndCBzbGVlcCBmb3Igb25seSAxbXMKZHVlIHRvIGludGVybmFsIHJvdW5kaW5n IHRvIHRpY2sgc2l6ZSkuCgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBQUtSdV9i LXEwaFhDQlVDQUFUaDBaNFppNlVraUMwazJERmdvRDNuQy1yM1NrUjN0ZyU0MG1haWwuZ21haWwu Y29tCi0tLQogY29uZmlndXJlICAgICAgICAgICAgICAgICAgICAgICB8ICAgMiArLQogY29uZmln dXJlLmFjICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBtZXNvbi5idWlsZCAgICAgICAgICAg ICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2xhdGNoLmMgfCAxNDYg KysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0KIHNyYy9pbmNsdWRlL3BnX2NvbmZpZy5o LmluICAgICAgfCAgIDMgKwogc3JjL2luY2x1ZGUvc3RvcmFnZS9sYXRjaC5oICAgICB8ICAxMyAr Ky0KIHNyYy90b29scy9tc3ZjL1NvbHV0aW9uLnBtICAgICAgfCAgIDEgKwogNyBmaWxlcyBjaGFu Z2VkLCAxMjggaW5zZXJ0aW9ucygrKSwgMzkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvY29u ZmlndXJlIGIvY29uZmlndXJlCmluZGV4IGUzNTc2OWVhNzMuLjkxNDM2MWY5MWIgMTAwNzU1Ci0t LSBhL2NvbmZpZ3VyZQorKysgYi9jb25maWd1cmUKQEAgLTE1Njk5LDcgKzE1Njk5LDcgQEAgZmkK IExJQlNfaW5jbHVkaW5nX3JlYWRsaW5lPSIkTElCUyIKIExJQlM9YGVjaG8gIiRMSUJTIiB8IHNl ZCAtZSAncy8tbGVkaXQvL2cnIC1lICdzLy1scmVhZGxpbmUvL2cnYAogCi1mb3IgYWNfZnVuYyBp biBiYWNrdHJhY2Vfc3ltYm9scyBjb3B5ZmlsZSBnZXRpZmFkZHJzIGdldHBlZXJ1Y3JlZCBpbmV0 X3B0b24ga3F1ZXVlIG1ic3Rvd2NzX2wgbWVtc2V0X3MgcG9zaXhfZmFsbG9jYXRlIHBwb2xsIHB0 aHJlYWRfaXNfdGhyZWFkZWRfbnAgc2V0cHJvY3RpdGxlIHNldHByb2N0aXRsZV9mYXN0IHN0cmNo cm51bCBzdHJzaWduYWwgc3luY2ZzIHN5bmNfZmlsZV9yYW5nZSB1c2Vsb2NhbGUgd2NzdG9tYnNf bAorZm9yIGFjX2Z1bmMgaW4gYmFja3RyYWNlX3N5bWJvbHMgY29weWZpbGUgZXBvbGxfcHdhaXQy IGdldGlmYWRkcnMgZ2V0cGVlcnVjcmVkIGluZXRfcHRvbiBrcXVldWUgbWJzdG93Y3NfbCBtZW1z ZXRfcyBwb3NpeF9mYWxsb2NhdGUgcHBvbGwgcHRocmVhZF9pc190aHJlYWRlZF9ucCBzZXRwcm9j dGl0bGUgc2V0cHJvY3RpdGxlX2Zhc3Qgc3RyY2hybnVsIHN0cnNpZ25hbCBzeW5jZnMgc3luY19m aWxlX3JhbmdlIHVzZWxvY2FsZSB3Y3N0b21ic19sCiBkbyA6CiAgIGFzX2FjX3Zhcj1gJGFzX2Vj aG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAogYWNfZm5fY19jaGVja19mdW5j ICIkTElORU5PIiAiJGFjX2Z1bmMiICIkYXNfYWNfdmFyIgpkaWZmIC0tZ2l0IGEvY29uZmlndXJl LmFjIGIvY29uZmlndXJlLmFjCmluZGV4IGFmMjNjMTVjYjIuLjQyNDlmODAwMmMgMTAwNjQ0Ci0t LSBhL2NvbmZpZ3VyZS5hYworKysgYi9jb25maWd1cmUuYWMKQEAgLTE3OTQsNiArMTc5NCw3IEBA IExJQlM9YGVjaG8gIiRMSUJTIiB8IHNlZCAtZSAncy8tbGVkaXQvL2cnIC1lICdzLy1scmVhZGxp bmUvL2cnYAogQUNfQ0hFQ0tfRlVOQ1MobTRfbm9ybWFsaXplKFsKIAliYWNrdHJhY2Vfc3ltYm9s cwogCWNvcHlmaWxlCisJZXBvbGxfcHdhaXQyCiAJZ2V0aWZhZGRycwogCWdldHBlZXJ1Y3JlZAog CWluZXRfcHRvbgpkaWZmIC0tZ2l0IGEvbWVzb24uYnVpbGQgYi9tZXNvbi5idWlsZAppbmRleCBk NDM4NGYxYmY2Li5mZTliMDQ3MGFhIDEwMDY0NAotLS0gYS9tZXNvbi5idWlsZAorKysgYi9tZXNv bi5idWlsZApAQCAtMjM0NCw2ICsyMzQ0LDcgQEAgZnVuY19jaGVja3MgPSBbCiAgICMgd2hlbiBl bmFibGluZyBhc2FuIHRoZSBkbG9wZW4gY2hlY2sgZG9lc24ndCBub3RpY2UgdGhhdCAtbGRsIGlz IGFjdHVhbGx5CiAgICMgcmVxdWlyZWQuIEp1c3QgY2hlY2tpbmcgZm9yIGRsc3ltKCkgb3VnaHQg dG8gc3VmZmljZS4KICAgWydkbHN5bScsIHsnZGVwZW5kZW5jaWVzJzogW2RsX2RlcF0sICdkZWZp bmUnOiBmYWxzZX1dLAorICBbJ2Vwb2xsX3B3YWl0MiddLAogICBbJ2V4cGxpY2l0X2J6ZXJvJ10s CiAgIFsnZmRhdGFzeW5jJywgeydkZXBlbmRlbmNpZXMnOiBbcnRfZGVwLCBwb3NpeDRfZGVwXSwg J2RlZmluZSc6IGZhbHNlfV0sICMgU29sYXJpcwogICBbJ2dldGlmYWRkcnMnXSwKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2xhdGNoLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdl L2lwYy9sYXRjaC5jCmluZGV4IGY0MTIzZTdkZTcuLmJhOWNjYjE5YWMgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2xhdGNoLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9p cGMvbGF0Y2guYwpAQCAtMTk0LDcgKzE5NCw3IEBAIHN0YXRpYyB2b2lkIFdhaXRFdmVudEFkanVz dFBvbGwoV2FpdEV2ZW50U2V0ICpzZXQsIFdhaXRFdmVudCAqZXZlbnQpOwogc3RhdGljIHZvaWQg V2FpdEV2ZW50QWRqdXN0V2luMzIoV2FpdEV2ZW50U2V0ICpzZXQsIFdhaXRFdmVudCAqZXZlbnQp OwogI2VuZGlmCiAKLXN0YXRpYyBpbmxpbmUgaW50IFdhaXRFdmVudFNldFdhaXRCbG9jayhXYWl0 RXZlbnRTZXQgKnNldCwgaW50IGN1cl90aW1lb3V0LAorc3RhdGljIGlubGluZSBpbnQgV2FpdEV2 ZW50U2V0V2FpdEJsb2NrKFdhaXRFdmVudFNldCAqc2V0LCBpbnQ2NCBjdXJfdGltZW91dF91cywK IAkJCQkJCQkJCQlXYWl0RXZlbnQgKm9jY3VycmVkX2V2ZW50cywgaW50IG5ldmVudHMpOwogCiAv KgpAQCAtNDc1LDEwICs0NzUsOSBAQCBEaXNvd25MYXRjaChMYXRjaCAqbGF0Y2gpCiAgKiB0byB3 YWl0IGZvci4gSWYgdGhlIGxhdGNoIGlzIGFscmVhZHkgc2V0IChhbmQgV0xfTEFUQ0hfU0VUIGlz IGdpdmVuKSwgdGhlCiAgKiBmdW5jdGlvbiByZXR1cm5zIGltbWVkaWF0ZWx5LgogICoKLSAqIFRo ZSAidGltZW91dCIgaXMgZ2l2ZW4gaW4gbWlsbGlzZWNvbmRzLiBJdCBtdXN0IGJlID49IDAgaWYg V0xfVElNRU9VVCBmbGFnCi0gKiBpcyBnaXZlbi4gIEFsdGhvdWdoIGl0IGlzIGRlY2xhcmVkIGFz ICJsb25nIiwgd2UgZG9uJ3QgYWN0dWFsbHkgc3VwcG9ydAotICogdGltZW91dHMgbG9uZ2VyIHRo YW4gSU5UX01BWCBtaWxsaXNlY29uZHMuICBOb3RlIHRoYXQgc29tZSBleHRyYSBvdmVyaGVhZAot ICogaXMgaW5jdXJyZWQgd2hlbiBXTF9USU1FT1VUIGlzIGdpdmVuLCBzbyBhdm9pZCB1c2luZyBh IHRpbWVvdXQgaWYgcG9zc2libGUuCisgKiBUaGUgInRpbWVvdXQiIGlzIGdpdmVuIGluIG1pY3Jv c2Vjb25kcy4gIEl0IG11c3QgYmUgPj0gMCBpZiBXTF9USU1FT1VUIGZsYWcKKyAqIGlzIGdpdmVu LiAgTm90ZSB0aGF0IHNvbWUgZXh0cmEgb3ZlcmhlYWQgaXMgaW5jdXJyZWQgd2hlbiBXTF9USU1F T1VUIGlzCisgKiBnaXZlbiwgc28gYXZvaWQgdXNpbmcgYSB0aW1lb3V0IGlmIHBvc3NpYmxlLgog ICoKICAqIFRoZSBsYXRjaCBtdXN0IGJlIG93bmVkIGJ5IHRoZSBjdXJyZW50IHByb2Nlc3MsIGll LiBpdCBtdXN0IGJlIGEKICAqIHByb2Nlc3MtbG9jYWwgbGF0Y2ggaW5pdGlhbGl6ZWQgd2l0aCBJ bml0TGF0Y2gsIG9yIGEgc2hhcmVkIGxhdGNoCkBAIC00ODksOCArNDg4LDggQEAgRGlzb3duTGF0 Y2goTGF0Y2ggKmxhdGNoKQogICogd2UgcmV0dXJuIGFsbCBvZiB0aGVtIGluIG9uZSBjYWxsLCBi dXQgd2Ugd2lsbCByZXR1cm4gYXQgbGVhc3Qgb25lLgogICovCiBpbnQKLVdhaXRMYXRjaChMYXRj aCAqbGF0Y2gsIGludCB3YWtlRXZlbnRzLCBsb25nIHRpbWVvdXQsCi0JCSAgdWludDMyIHdhaXRf ZXZlbnRfaW5mbykKK1dhaXRMYXRjaFVzKExhdGNoICpsYXRjaCwgaW50IHdha2VFdmVudHMsIGlu dDY0IHRpbWVvdXRfdXMsCisJCQl1aW50MzIgd2FpdF9ldmVudF9pbmZvKQogewogCVdhaXRFdmVu dAlldmVudDsKIApAQCAtNTEwLDE1ICs1MDksMzIgQEAgV2FpdExhdGNoKExhdGNoICpsYXRjaCwg aW50IHdha2VFdmVudHMsIGxvbmcgdGltZW91dCwKIAlMYXRjaFdhaXRTZXQtPmV4aXRfb25fcG9z dG1hc3Rlcl9kZWF0aCA9CiAJCSgod2FrZUV2ZW50cyAmIFdMX0VYSVRfT05fUE1fREVBVEgpICE9 IDApOwogCi0JaWYgKFdhaXRFdmVudFNldFdhaXQoTGF0Y2hXYWl0U2V0LAotCQkJCQkJICh3YWtl RXZlbnRzICYgV0xfVElNRU9VVCkgPyB0aW1lb3V0IDogLTEsCi0JCQkJCQkgJmV2ZW50LCAxLAot CQkJCQkJIHdhaXRfZXZlbnRfaW5mbykgPT0gMCkKKwlpZiAoV2FpdEV2ZW50U2V0V2FpdFVzKExh dGNoV2FpdFNldCwKKwkJCQkJCSAgICh3YWtlRXZlbnRzICYgV0xfVElNRU9VVCkgPyB0aW1lb3V0 X3VzIDogLTEsCisJCQkJCQkgICAmZXZlbnQsIDEsCisJCQkJCQkgICB3YWl0X2V2ZW50X2luZm8p ID09IDApCiAJCXJldHVybiBXTF9USU1FT1VUOwogCWVsc2UKIAkJcmV0dXJuIGV2ZW50LmV2ZW50 czsKIH0KIAorLyoKKyAqIExpa2UgV2FpdExhdGNoVXMoKSwgYnV0IHdpdGggdGhlIHRpbWVvdXQg aW4gbWlsbGlzZWNvbmRzLgorICoKKyAqIFRoZSAidGltZW91dCIgaXMgZ2l2ZW4gaW4gbWlsbGlz ZWNvbmRzLiBJdCBtdXN0IGJlID49IDAgaWYgV0xfVElNRU9VVCBmbGFnCisgKiBpcyBnaXZlbi4g IEFsdGhvdWdoIGl0IGlzIGRlY2xhcmVkIGFzICJsb25nIiwgd2UgZG9uJ3QgYWN0dWFsbHkgc3Vw cG9ydAorICogdGltZW91dHMgbG9uZ2VyIHRoYW4gSU5UX01BWCBtaWxsaXNlY29uZHMuICBOb3Rl IHRoYXQgc29tZSBleHRyYSBvdmVyaGVhZAorICogaXMgaW5jdXJyZWQgd2hlbiBXTF9USU1FT1VU IGlzIGdpdmVuLCBzbyBhdm9pZCB1c2luZyBhIHRpbWVvdXQgaWYgcG9zc2libGUuCisgKi8KK2lu dAorV2FpdExhdGNoKExhdGNoICpsYXRjaCwgaW50IHdha2VFdmVudHMsIGxvbmcgdGltZW91dF9t cywKKwkJICB1aW50MzIgd2FpdF9ldmVudF9pbmZvKQoreworCXJldHVybiBXYWl0TGF0Y2hVcyhs YXRjaCwgd2FrZUV2ZW50cywKKwkJCQkJICAgdGltZW91dF9tcyA8PSAwID8gdGltZW91dF9tcyA6 IHRpbWVvdXRfbXMgKiAxMDAwLAorCQkJCQkgICB3YWl0X2V2ZW50X2luZm8pOworfQorCiAvKgog ICogTGlrZSBXYWl0TGF0Y2gsIGJ1dCB3aXRoIGFuIGV4dHJhIHNvY2tldCBhcmd1bWVudCBmb3Ig V0xfU09DS0VUXyoKICAqIGNvbmRpdGlvbnMuCkBAIC01MzcsOCArNTUzLDggQEAgV2FpdExhdGNo KExhdGNoICpsYXRjaCwgaW50IHdha2VFdmVudHMsIGxvbmcgdGltZW91dCwKICAqIFdhaXRFdmVu dFNldCBpbnN0ZWFkOyB0aGF0J3MgbW9yZSBlZmZpY2llbnQuCiAgKi8KIGludAotV2FpdExhdGNo T3JTb2NrZXQoTGF0Y2ggKmxhdGNoLCBpbnQgd2FrZUV2ZW50cywgcGdzb2NrZXQgc29jaywKLQkJ CQkgIGxvbmcgdGltZW91dCwgdWludDMyIHdhaXRfZXZlbnRfaW5mbykKK1dhaXRMYXRjaE9yU29j a2V0VXMoTGF0Y2ggKmxhdGNoLCBpbnQgd2FrZUV2ZW50cywgcGdzb2NrZXQgc29jaywKKwkJCQkJ aW50NjQgdGltZW91dF91cywgdWludDMyIHdhaXRfZXZlbnRfaW5mbykKIHsKIAlpbnQJCQlyZXQg PSAwOwogCWludAkJCXJjOwpAQCAtNTQ2LDkgKzU2Miw5IEBAIFdhaXRMYXRjaE9yU29ja2V0KExh dGNoICpsYXRjaCwgaW50IHdha2VFdmVudHMsIHBnc29ja2V0IHNvY2ssCiAJV2FpdEV2ZW50U2V0 ICpzZXQgPSBDcmVhdGVXYWl0RXZlbnRTZXQoQ3VycmVudE1lbW9yeUNvbnRleHQsIDMpOwogCiAJ aWYgKHdha2VFdmVudHMgJiBXTF9USU1FT1VUKQotCQlBc3NlcnQodGltZW91dCA+PSAwKTsKKwkJ QXNzZXJ0KHRpbWVvdXRfdXMgPj0gMCk7CiAJZWxzZQotCQl0aW1lb3V0ID0gLTE7CisJCXRpbWVv dXRfdXMgPSAtMTsKIAogCWlmICh3YWtlRXZlbnRzICYgV0xfTEFUQ0hfU0VUKQogCQlBZGRXYWl0 RXZlbnRUb1NldChzZXQsIFdMX0xBVENIX1NFVCwgUEdJTlZBTElEX1NPQ0tFVCwKQEAgLTU3NSw3 ICs1OTEsNyBAQCBXYWl0TGF0Y2hPclNvY2tldChMYXRjaCAqbGF0Y2gsIGludCB3YWtlRXZlbnRz LCBwZ3NvY2tldCBzb2NrLAogCQlBZGRXYWl0RXZlbnRUb1NldChzZXQsIGV2LCBzb2NrLCBOVUxM LCBOVUxMKTsKIAl9CiAKLQlyYyA9IFdhaXRFdmVudFNldFdhaXQoc2V0LCB0aW1lb3V0LCAmZXZl bnQsIDEsIHdhaXRfZXZlbnRfaW5mbyk7CisJcmMgPSBXYWl0RXZlbnRTZXRXYWl0VXMoc2V0LCB0 aW1lb3V0X3VzLCAmZXZlbnQsIDEsIHdhaXRfZXZlbnRfaW5mbyk7CiAKIAlpZiAocmMgPT0gMCkK IAkJcmV0IHw9IFdMX1RJTUVPVVQ7CkBAIC01OTEsNiArNjA3LDIwIEBAIFdhaXRMYXRjaE9yU29j a2V0KExhdGNoICpsYXRjaCwgaW50IHdha2VFdmVudHMsIHBnc29ja2V0IHNvY2ssCiAJcmV0dXJu IHJldDsKIH0KIAorLyoKKyAqIExpa2UgV2FpdExhdGNoT3JTb2NrZXQsIGJ1dCB3aXRoIHRpbWVv dXQgaW4gbWlsbGlzZWNvbmRzLgorICovCitpbnQKK1dhaXRMYXRjaE9yU29ja2V0KExhdGNoICps YXRjaCwgaW50IHdha2VFdmVudHMsIHBnc29ja2V0IHNvY2ssCisJCQkJICBsb25nIHRpbWVvdXRf bXMsIHVpbnQzMiB3YWl0X2V2ZW50X2luZm8pCit7CisJcmV0dXJuIFdhaXRMYXRjaE9yU29ja2V0 VXMobGF0Y2gsCisJCQkJCQkJICAgd2FrZUV2ZW50cywKKwkJCQkJCQkgICBzb2NrLAorCQkJCQkJ CSAgIHRpbWVvdXRfbXMgPiAwID8gdGltZW91dF9tcyAqIDEwMDAgOiB0aW1lb3V0X21zLAorCQkJ CQkJCSAgIHdhaXRfZXZlbnRfaW5mbyk7Cit9CisKIC8qCiAgKiBTZXRzIGEgbGF0Y2ggYW5kIHdh a2VzIHVwIGFueW9uZSB3YWl0aW5nIG9uIGl0LgogICoKQEAgLTEzODAsMTQgKzE0MTAsMTQgQEAg V2FpdEV2ZW50QWRqdXN0V2luMzIoV2FpdEV2ZW50U2V0ICpzZXQsIFdhaXRFdmVudCAqZXZlbnQp CiAgKiB2YWx1ZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSByZWdpc3RlcmVkIGV2ZW50LgogICovCiBp bnQKLVdhaXRFdmVudFNldFdhaXQoV2FpdEV2ZW50U2V0ICpzZXQsIGxvbmcgdGltZW91dCwKLQkJ CQkgV2FpdEV2ZW50ICpvY2N1cnJlZF9ldmVudHMsIGludCBuZXZlbnRzLAotCQkJCSB1aW50MzIg d2FpdF9ldmVudF9pbmZvKQorV2FpdEV2ZW50U2V0V2FpdFVzKFdhaXRFdmVudFNldCAqc2V0LCBp bnQ2NCB0aW1lb3V0X3VzLAorCQkJCSAgIFdhaXRFdmVudCAqb2NjdXJyZWRfZXZlbnRzLCBpbnQg bmV2ZW50cywKKwkJCQkgICB1aW50MzIgd2FpdF9ldmVudF9pbmZvKQogewogCWludAkJCXJldHVy bmVkX2V2ZW50cyA9IDA7CiAJaW5zdHJfdGltZQlzdGFydF90aW1lOwogCWluc3RyX3RpbWUJY3Vy X3RpbWU7Ci0JbG9uZwkJY3VyX3RpbWVvdXQgPSAtMTsKKwlpbnQ2NAkJY3VyX3RpbWVvdXQgPSAt MTsKIAogCUFzc2VydChuZXZlbnRzID4gMCk7CiAKQEAgLTEzOTUsMTEgKzE0MjUsMTEgQEAgV2Fp dEV2ZW50U2V0V2FpdChXYWl0RXZlbnRTZXQgKnNldCwgbG9uZyB0aW1lb3V0LAogCSAqIEluaXRp YWxpemUgdGltZW91dCBpZiByZXF1ZXN0ZWQuICBXZSBtdXN0IHJlY29yZCB0aGUgY3VycmVudCB0 aW1lIHNvCiAJICogdGhhdCB3ZSBjYW4gZGV0ZXJtaW5lIHRoZSByZW1haW5pbmcgdGltZW91dCBp ZiBpbnRlcnJ1cHRlZC4KIAkgKi8KLQlpZiAodGltZW91dCA+PSAwKQorCWlmICh0aW1lb3V0X3Vz ID49IDApCiAJewogCQlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKHN0YXJ0X3RpbWUpOwotCQlBc3Nl cnQodGltZW91dCA+PSAwICYmIHRpbWVvdXQgPD0gSU5UX01BWCk7Ci0JCWN1cl90aW1lb3V0ID0g dGltZW91dDsKKwkJQXNzZXJ0KHRpbWVvdXRfdXMgPj0gMCk7CisJCWN1cl90aW1lb3V0ID0gdGlt ZW91dF91czsKIAl9CiAJZWxzZQogCQlJTlNUUl9USU1FX1NFVF9aRVJPKHN0YXJ0X3RpbWUpOwpA QCAtMTQ4NywxMSArMTUxNywxMSBAQCBXYWl0RXZlbnRTZXRXYWl0KFdhaXRFdmVudFNldCAqc2V0 LCBsb25nIHRpbWVvdXQsCiAJCQlyZXR1cm5lZF9ldmVudHMgPSByYzsKIAogCQkvKiBJZiB3ZSdy ZSBub3QgZG9uZSwgdXBkYXRlIGN1cl90aW1lb3V0IGZvciBuZXh0IGl0ZXJhdGlvbiAqLwotCQlp ZiAocmV0dXJuZWRfZXZlbnRzID09IDAgJiYgdGltZW91dCA+PSAwKQorCQlpZiAocmV0dXJuZWRf ZXZlbnRzID09IDAgJiYgdGltZW91dF91cyA+PSAwKQogCQl7CiAJCQlJTlNUUl9USU1FX1NFVF9D VVJSRU5UKGN1cl90aW1lKTsKIAkJCUlOU1RSX1RJTUVfU1VCVFJBQ1QoY3VyX3RpbWUsIHN0YXJ0 X3RpbWUpOwotCQkJY3VyX3RpbWVvdXQgPSB0aW1lb3V0IC0gKGxvbmcpIElOU1RSX1RJTUVfR0VU X01JTExJU0VDKGN1cl90aW1lKTsKKwkJCWN1cl90aW1lb3V0ID0gdGltZW91dF91cyAtIElOU1RS X1RJTUVfR0VUX01JQ1JPU0VDKGN1cl90aW1lKTsKIAkJCWlmIChjdXJfdGltZW91dCA8PSAwKQog CQkJCWJyZWFrOwogCQl9CkBAIC0xNTA1LDYgKzE1MzUsMjAgQEAgV2FpdEV2ZW50U2V0V2FpdChX YWl0RXZlbnRTZXQgKnNldCwgbG9uZyB0aW1lb3V0LAogCXJldHVybiByZXR1cm5lZF9ldmVudHM7 CiB9CiAKKy8qCisgKiBMaWtlIFdhaXRFdmVudFNldFdhaXRVcygpLCBidXQgdGhlIHRpbWVvdXQg c3BlY2lmaWVkIGluIG1pbGxpc2Vjb25kcy4KKyAqLworaW50CitXYWl0RXZlbnRTZXRXYWl0KFdh aXRFdmVudFNldCAqc2V0LCBsb25nIHRpbWVvdXRfbXMsCisJCQkJIFdhaXRFdmVudCAqb2NjdXJy ZWRfZXZlbnRzLCBpbnQgbmV2ZW50cywKKwkJCQkgdWludDMyIHdhaXRfZXZlbnRfaW5mbykKK3sK KwlyZXR1cm4gV2FpdEV2ZW50U2V0V2FpdFVzKHNldCwKKwkJCQkJCQkgIHRpbWVvdXRfbXMgPD0g MCA/IHRpbWVvdXRfbXMgOiB0aW1lb3V0X21zICogMTAwMCwKKwkJCQkJCQkgIG9jY3VycmVkX2V2 ZW50cywKKwkJCQkJCQkgIG5ldmVudHMsCisJCQkJCQkJICB3YWl0X2V2ZW50X2luZm8pOworfQog CiAjaWYgZGVmaW5lZChXQUlUX1VTRV9FUE9MTCkKIApAQCAtMTUxNywxNyArMTU2MSwzMSBAQCBX YWl0RXZlbnRTZXRXYWl0KFdhaXRFdmVudFNldCAqc2V0LCBsb25nIHRpbWVvdXQsCiAgKiBlYXN5 LgogICovCiBzdGF0aWMgaW5saW5lIGludAotV2FpdEV2ZW50U2V0V2FpdEJsb2NrKFdhaXRFdmVu dFNldCAqc2V0LCBpbnQgY3VyX3RpbWVvdXQsCitXYWl0RXZlbnRTZXRXYWl0QmxvY2soV2FpdEV2 ZW50U2V0ICpzZXQsIGludDY0IGN1cl90aW1lb3V0X3VzLAogCQkJCQkgIFdhaXRFdmVudCAqb2Nj dXJyZWRfZXZlbnRzLCBpbnQgbmV2ZW50cykKIHsKIAlpbnQJCQlyZXR1cm5lZF9ldmVudHMgPSAw OwogCWludAkJCXJjOwogCVdhaXRFdmVudCAgKmN1cl9ldmVudDsKIAlzdHJ1Y3QgZXBvbGxfZXZl bnQgKmN1cl9lcG9sbF9ldmVudDsKKyNpZmRlZiBIQVZFX0VQT0xMX1BXQUlUMgorCXN0cnVjdCB0 aW1lc3BlYyBuYXA7CisjZW5kaWYKIAogCS8qIFNsZWVwICovCisjaWZkZWYgSEFWRV9FUE9MTF9Q V0FJVDIKKwluYXAudHZfc2VjID0gY3VyX3RpbWVvdXRfdXMgLyAxMDAwMDAwOworCW5hcC50dl9u c2VjID0gKGN1cl90aW1lb3V0X3VzICUgMTAwMDAwMCkgKiAxMDAwOworCXJjID0gZXBvbGxfcHdh aXQyKHNldC0+ZXBvbGxfZmQsIHNldC0+ZXBvbGxfcmV0X2V2ZW50cywKKwkJCQkJICBNaW4obmV2 ZW50cywgc2V0LT5uZXZlbnRzX3NwYWNlKSwKKwkJCQkJICBjdXJfdGltZW91dF91cyA+PSAwID8g Jm5hcCA6IE5VTEwsCisJCQkJCSAgTlVMTCk7CisjZWxzZQogCXJjID0gZXBvbGxfd2FpdChzZXQt PmVwb2xsX2ZkLCBzZXQtPmVwb2xsX3JldF9ldmVudHMsCi0JCQkJCU1pbihuZXZlbnRzLCBzZXQt Pm5ldmVudHNfc3BhY2UpLCBjdXJfdGltZW91dCk7CisJCQkJCU1pbihuZXZlbnRzLCBzZXQtPm5l dmVudHNfc3BhY2UpLAorCQkJCQljdXJfdGltZW91dF91cyA+PSAwID8gKGN1cl90aW1lb3V0X3Vz ICsgOTk5KSAvIDEwMDAKKwkJCQkJOiBjdXJfdGltZW91dF91cyk7CisjZW5kaWYKIAogCS8qIENo ZWNrIHJldHVybiBjb2RlICovCiAJaWYgKHJjIDwgMCkKQEAgLTE2NTMsNyArMTcxMSw3IEBAIFdh aXRFdmVudFNldFdhaXRCbG9jayhXYWl0RXZlbnRTZXQgKnNldCwgaW50IGN1cl90aW1lb3V0LAog ICogd2l0aCBzZXBhcmF0ZSBzeXN0ZW0gY2FsbHMuCiAgKi8KIHN0YXRpYyBpbnQKLVdhaXRFdmVu dFNldFdhaXRCbG9jayhXYWl0RXZlbnRTZXQgKnNldCwgaW50IGN1cl90aW1lb3V0LAorV2FpdEV2 ZW50U2V0V2FpdEJsb2NrKFdhaXRFdmVudFNldCAqc2V0LCBpbnQ2NCBjdXJfdGltZW91dF91cywK IAkJCQkJICBXYWl0RXZlbnQgKm9jY3VycmVkX2V2ZW50cywgaW50IG5ldmVudHMpCiB7CiAJaW50 CQkJcmV0dXJuZWRfZXZlbnRzID0gMDsKQEAgLTE2NjMsMTIgKzE3MjEsMTIgQEAgV2FpdEV2ZW50 U2V0V2FpdEJsb2NrKFdhaXRFdmVudFNldCAqc2V0LCBpbnQgY3VyX3RpbWVvdXQsCiAJc3RydWN0 IHRpbWVzcGVjIHRpbWVvdXQ7CiAJc3RydWN0IHRpbWVzcGVjICp0aW1lb3V0X3A7CiAKLQlpZiAo Y3VyX3RpbWVvdXQgPCAwKQorCWlmIChjdXJfdGltZW91dF91cyA8IDApCiAJCXRpbWVvdXRfcCA9 IE5VTEw7CiAJZWxzZQogCXsKLQkJdGltZW91dC50dl9zZWMgPSBjdXJfdGltZW91dCAvIDEwMDA7 Ci0JCXRpbWVvdXQudHZfbnNlYyA9IChjdXJfdGltZW91dCAlIDEwMDApICogMTAwMDAwMDsKKwkJ dGltZW91dC50dl9zZWMgPSBjdXJfdGltZW91dF91cyAvIDEwMDAwMDA7CisJCXRpbWVvdXQudHZf bnNlYyA9IChjdXJfdGltZW91dF91cyAlIDEwMDAwMDApICogMTAwMDsKIAkJdGltZW91dF9wID0g JnRpbWVvdXQ7CiAJfQogCkBAIC0xODA2LDE2ICsxODY0LDI1IEBAIFdhaXRFdmVudFNldFdhaXRC bG9jayhXYWl0RXZlbnRTZXQgKnNldCwgaW50IGN1cl90aW1lb3V0LAogICogYnV0IHJlcXVpcmVz IGl0ZXJhdGluZyB0aHJvdWdoIGFsbCBvZiBzZXQtPnBvbGxmZHMuCiAgKi8KIHN0YXRpYyBpbmxp bmUgaW50Ci1XYWl0RXZlbnRTZXRXYWl0QmxvY2soV2FpdEV2ZW50U2V0ICpzZXQsIGludCBjdXJf dGltZW91dCwKK1dhaXRFdmVudFNldFdhaXRCbG9jayhXYWl0RXZlbnRTZXQgKnNldCwgaW50NjQg Y3VyX3RpbWVvdXRfdXMsCiAJCQkJCSAgV2FpdEV2ZW50ICpvY2N1cnJlZF9ldmVudHMsIGludCBu ZXZlbnRzKQogewogCWludAkJCXJldHVybmVkX2V2ZW50cyA9IDA7CiAJaW50CQkJcmM7CiAJV2Fp dEV2ZW50ICAqY3VyX2V2ZW50OwogCXN0cnVjdCBwb2xsZmQgKmN1cl9wb2xsZmQ7CisJaW50CQkJ Y3VyX3RpbWVvdXRfbXM7CisKKwkvKiBSb3VuZCB1cCB0byB0aGUgbmVhcmVzdCBtaWxsaXNlY29u ZCwgYW5kIGNhcCBhdCBJTlRfTUFYLiAqLworCWlmIChjdXJfdGltZW91dF91cyA+PSBQR19JTlQ2 NF9NQVggLSA5OTkpCisJCWN1cl90aW1lb3V0X21zID0gSU5UX01BWDsKKwllbHNlIGlmIChjdXJf dGltZW91dF91cyA+IDApCisJCWN1cl90aW1lb3V0X21zID0gTWluKChpbnQ2NCkgSU5UX01BWCwg KGN1cl90aW1lb3V0X3VzICsgOTk5KSAvIDEwMDApOworCWVsc2UKKwkJY3VyX3RpbWVvdXRfbXMg PSBjdXJfdGltZW91dF91czsKIAogCS8qIFNsZWVwICovCi0JcmMgPSBwb2xsKHNldC0+cG9sbGZk cywgc2V0LT5uZXZlbnRzLCAoaW50KSBjdXJfdGltZW91dCk7CisJcmMgPSBwb2xsKHNldC0+cG9s bGZkcywgc2V0LT5uZXZlbnRzLCBjdXJfdGltZW91dF9tcyk7CiAKIAkvKiBDaGVjayByZXR1cm4g Y29kZSAqLwogCWlmIChyYyA8IDApCkBAIC0xOTQzLDEyICsyMDEwLDIxIEBAIFdhaXRFdmVudFNl dFdhaXRCbG9jayhXYWl0RXZlbnRTZXQgKnNldCwgaW50IGN1cl90aW1lb3V0LAogICogdGhhdCBv bmx5IG9uZSBldmVudCBpcyAiY29uc3VtZWQiLgogICovCiBzdGF0aWMgaW5saW5lIGludAotV2Fp dEV2ZW50U2V0V2FpdEJsb2NrKFdhaXRFdmVudFNldCAqc2V0LCBpbnQgY3VyX3RpbWVvdXQsCitX YWl0RXZlbnRTZXRXYWl0QmxvY2soV2FpdEV2ZW50U2V0ICpzZXQsIGludDY0IGN1cl90aW1lb3V0 X3VzLAogCQkJCQkgIFdhaXRFdmVudCAqb2NjdXJyZWRfZXZlbnRzLCBpbnQgbmV2ZW50cykKIHsK IAlpbnQJCQlyZXR1cm5lZF9ldmVudHMgPSAwOwogCURXT1JECQlyYzsKIAlXYWl0RXZlbnQgICpj dXJfZXZlbnQ7CisJaW50CQkJY3VyX3RpbWVvdXRfbXM7CisKKwkvKiBSb3VuZCB1cCB0byB0aGUg bmVhcmVzdCBtaWxsaXNlY29uZCwgYW5kIGNhcCBhdCBJTlRfTUFYLiAqLworCWlmIChjdXJfdGlt ZW91dF91cyA+PSBQR19JTlQ2NF9NQVggLSA5OTkpCisJCWN1cl90aW1lb3V0X21zID0gSU5UX01B WDsKKwllbHNlIGlmIChjdXJfdGltZW91dF91cyA+IDApCisJCWN1cl90aW1lb3V0X21zID0gTWlu KChpbnQ2NCkgSU5UX01BWCwgKGN1cl90aW1lb3V0X3VzICsgOTk5KSAvIDEwMDApOworCWVsc2UK KwkJY3VyX3RpbWVvdXRfbXMgPSBjdXJfdGltZW91dF91czsKIAogCS8qIFJlc2V0IGFueSB3YWl0 IGV2ZW50cyB0aGF0IG5lZWQgaXQgKi8KIAlmb3IgKGN1cl9ldmVudCA9IHNldC0+ZXZlbnRzOwpA QCAtMjAwMCw3ICsyMDc2LDcgQEAgV2FpdEV2ZW50U2V0V2FpdEJsb2NrKFdhaXRFdmVudFNldCAq c2V0LCBpbnQgY3VyX3RpbWVvdXQsCiAJICogTmVlZCB0byB3YWl0IGZvciAtPm5ldmVudHMgKyAx LCBiZWNhdXNlIHNpZ25hbCBoYW5kbGUgaXMgaW4gWzBdLgogCSAqLwogCXJjID0gV2FpdEZvck11 bHRpcGxlT2JqZWN0cyhzZXQtPm5ldmVudHMgKyAxLCBzZXQtPmhhbmRsZXMsIEZBTFNFLAotCQkJ CQkJCQljdXJfdGltZW91dCk7CisJCQkJCQkJCWN1cl90aW1lb3V0X21zKTsKIAogCS8qIENoZWNr IHJldHVybiBjb2RlICovCiAJaWYgKHJjID09IFdBSVRfRkFJTEVEKQpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvcGdfY29uZmlnLmguaW4gYi9zcmMvaW5jbHVkZS9wZ19jb25maWcuaC5pbgppbmRl eCAyMGM4MmY1OTc5Li5jMWYxZmM2ZTcwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wZ19jb25m aWcuaC5pbgorKysgYi9zcmMvaW5jbHVkZS9wZ19jb25maWcuaC5pbgpAQCAtMTQ5LDYgKzE0OSw5 IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGVkaXRsaW5lL3JlYWRsaW5lLmg+ IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfRURJVExJTkVfUkVBRExJTkVfSAogCisvKiBE ZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGVwb2xsX3B3YWl0MicgZnVuY3Rpb24uICovCisj dW5kZWYgSEFWRV9FUE9MTF9QV0FJVDIKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl IDxleGVjaW5mby5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX0VYRUNJTkZPX0gKIApk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9sYXRjaC5oIGIvc3JjL2luY2x1ZGUvc3Rv cmFnZS9sYXRjaC5oCmluZGV4IDk5Y2M0Nzg3NGEuLjc1NmMzMTE0ZWQgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL3N0b3JhZ2UvbGF0Y2guaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2xhdGNo LmgKQEAgLTE4MCwxMyArMTgwLDIwIEBAIGV4dGVybiBpbnQJQWRkV2FpdEV2ZW50VG9TZXQoV2Fp dEV2ZW50U2V0ICpzZXQsIHVpbnQzMiBldmVudHMsIHBnc29ja2V0IGZkLAogCQkJCQkJCSAgTGF0 Y2ggKmxhdGNoLCB2b2lkICp1c2VyX2RhdGEpOwogZXh0ZXJuIHZvaWQgTW9kaWZ5V2FpdEV2ZW50 KFdhaXRFdmVudFNldCAqc2V0LCBpbnQgcG9zLCB1aW50MzIgZXZlbnRzLCBMYXRjaCAqbGF0Y2gp OwogCi1leHRlcm4gaW50CVdhaXRFdmVudFNldFdhaXQoV2FpdEV2ZW50U2V0ICpzZXQsIGxvbmcg dGltZW91dCwKK2V4dGVybiBpbnQJV2FpdEV2ZW50U2V0V2FpdChXYWl0RXZlbnRTZXQgKnNldCwg bG9uZyB0aW1lb3V0X21zLAogCQkJCQkJCSBXYWl0RXZlbnQgKm9jY3VycmVkX2V2ZW50cywgaW50 IG5ldmVudHMsCiAJCQkJCQkJIHVpbnQzMiB3YWl0X2V2ZW50X2luZm8pOwotZXh0ZXJuIGludAlX YWl0TGF0Y2goTGF0Y2ggKmxhdGNoLCBpbnQgd2FrZUV2ZW50cywgbG9uZyB0aW1lb3V0LAorZXh0 ZXJuIGludAlXYWl0RXZlbnRTZXRXYWl0VXMoV2FpdEV2ZW50U2V0ICpzZXQsIGludDY0IHRpbWVv dXRfdXMsCisJCQkJCQkJICAgV2FpdEV2ZW50ICpvY2N1cnJlZF9ldmVudHMsIGludCBuZXZlbnRz LAorCQkJCQkJCSAgIHVpbnQzMiB3YWl0X2V2ZW50X2luZm8pOworZXh0ZXJuIGludAlXYWl0TGF0 Y2goTGF0Y2ggKmxhdGNoLCBpbnQgd2FrZUV2ZW50cywgbG9uZyB0aW1lb3V0X21zLAogCQkJCQkg IHVpbnQzMiB3YWl0X2V2ZW50X2luZm8pOworZXh0ZXJuIGludAlXYWl0TGF0Y2hVcyhMYXRjaCAq bGF0Y2gsIGludCB3YWtlRXZlbnRzLCBpbnQ2NCB0aW1lb3V0X3VzLAorCQkJCQkJdWludDMyIHdh aXRfZXZlbnRfaW5mbyk7CiBleHRlcm4gaW50CVdhaXRMYXRjaE9yU29ja2V0KExhdGNoICpsYXRj aCwgaW50IHdha2VFdmVudHMsCi0JCQkJCQkJICBwZ3NvY2tldCBzb2NrLCBsb25nIHRpbWVvdXQs IHVpbnQzMiB3YWl0X2V2ZW50X2luZm8pOworCQkJCQkJCSAgcGdzb2NrZXQgc29jaywgbG9uZyB0 aW1lb3V0X21zLCB1aW50MzIgd2FpdF9ldmVudF9pbmZvKTsKK2V4dGVybiBpbnQJV2FpdExhdGNo T3JTb2NrZXRVcyhMYXRjaCAqbGF0Y2gsIGludCB3YWtlRXZlbnRzLAorCQkJCQkJCQlwZ3NvY2tl dCBzb2NrLCBpbnQ2NCB0aW1lb3V0X3VzLCB1aW50MzIgd2FpdF9ldmVudF9pbmZvKTsKIGV4dGVy biB2b2lkIEluaXRpYWxpemVMYXRjaFdhaXRTZXQodm9pZCk7CiBleHRlcm4gaW50CUdldE51bVJl Z2lzdGVyZWRXYWl0RXZlbnRzKFdhaXRFdmVudFNldCAqc2V0KTsKIGV4dGVybiBib29sIFdhaXRF dmVudFNldENhblJlcG9ydENsb3NlZCh2b2lkKTsKZGlmZiAtLWdpdCBhL3NyYy90b29scy9tc3Zj L1NvbHV0aW9uLnBtIGIvc3JjL3Rvb2xzL21zdmMvU29sdXRpb24ucG0KaW5kZXggNWVhZWE2MzU1 ZS4uZjg4ZmZmYTVlMiAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL21zdmMvU29sdXRpb24ucG0KKysr IGIvc3JjL3Rvb2xzL21zdmMvU29sdXRpb24ucG0KQEAgLTI0Nyw2ICsyNDcsNyBAQCBzdWIgR2Vu ZXJhdGVGaWxlcwogCQlIQVZFX0RFQ0xfU1RSTkxFTiAgICAgICAgICAgICAgICAgICAgICAgICAg ID0+IDEsCiAJCUhBVkVfRURJVExJTkVfSElTVE9SWV9IICAgICAgICAgICAgICAgICAgICAgPT4g dW5kZWYsCiAJCUhBVkVfRURJVExJTkVfUkVBRExJTkVfSCAgICAgICAgICAgICAgICAgICAgPT4g dW5kZWYsCisJCUhBVkVfRVBPTExfUFdBSVQyICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4g dW5kZWYsCiAJCUhBVkVfRVhFQ0lORk9fSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4g dW5kZWYsCiAJCUhBVkVfRVhQTElDSVRfQlpFUk8gICAgICAgICAgICAgICAgICAgICAgICAgPT4g dW5kZWYsCiAJCUhBVkVfRlNFRUtPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4g MSwKLS0gCjIuMzkuMgoK --00000000000048f74b05f6c1506f Content-Type: text/x-patch; charset="US-ASCII"; name="0002-Use-microsecond-based-naps-for-vacuum_cost_delay-sle.patch" Content-Disposition: attachment; filename="0002-Use-microsecond-based-naps-for-vacuum_cost_delay-sle.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lf6dfrvk1 RnJvbSA5YjVlODkyMmI3YzYwM2Y5MDJmZWNmYjMwZTI0YTk2MmI2YzA4MTc2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+ CkRhdGU6IEZyaSwgMTAgTWFyIDIwMjMgMTY6MjI6NTkgKzEzMDAKU3ViamVjdDogW1BBVENIIDIv M10gVXNlIG1pY3Jvc2Vjb25kLWJhc2VkIG5hcHMgZm9yIHZhY3V1bV9jb3N0X2RlbGF5IHNsZWVw LgoKTm93IHRoYXQgd2UgaGF2ZSBtaWNyb3NlY29uZCBzdXBwb3J0IGluIHRoZSBXYWl0RXZlbnRT ZXQgQVBJLCB3ZSBjYW4gdXNlCnRoZSBzdGFuZGFyZCBwcm9ncmFtbWluZyBwYXR0ZXJuIHRvIGlt cGxlbWVudCB0aGUgaGlnaCByZXNvbHV0aW9uIHNsZWVwCmluIHZhY3V1bV9kZWxheV9wb2ludCgp LgoKWFhYIFdlIHdvdWxkbid0IGJlIGFibGUgdG8gZG8gdGhpcyB1bnRpbCBMaW51eCA1LjExIGlz IGluIGNvbW1vbiBzdGFibGUKZGlzdHJpYnV0aW9ucywgb3RoZXJ3aXNlIHRoZSBzbGVlcCB3b3Vs ZCBsb3NlIHByZWNpc2lvbiB3aGVuIGNoYW5naW5nCmZyb20gdGhlIHBnX3VzbGVlcCgpIGNvZGlu Zy4KClJlcG9ydGVkLWJ5OiBNZWxhbmllIFBsYWdlbWFuIDxtZWxhbmllcGxhZ2VtYW5AZ21haWwu Y29tPgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBQUtSdV9iLXEwaFhDQlVDQUFU aDBaNFppNlVraUMwazJERmdvRDNuQy1yM1NrUjN0ZyU0MG1haWwuZ21haWwuY29tCi0tLQogc3Jj L2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtLmMgfCA4ICsrKystLS0tCiAxIGZpbGUgY2hhbmdlZCwg NCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3ZhY3V1bS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtLmMKaW5kZXgg MmUxMmJhZjhlYi4uZjM3OWU2MGRjYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMv dmFjdXVtLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtLmMKQEAgLTIyMzIsMTAg KzIyMzIsMTAgQEAgdmFjdXVtX2RlbGF5X3BvaW50KHZvaWQpCiAJCWlmIChtc2VjID4gVmFjdXVt Q29zdERlbGF5ICogNCkKIAkJCW1zZWMgPSBWYWN1dW1Db3N0RGVsYXkgKiA0OwogCi0JCSh2b2lk KSBXYWl0TGF0Y2goTXlMYXRjaCwKLQkJCQkJCSBXTF9MQVRDSF9TRVQgfCBXTF9USU1FT1VUIHwg V0xfRVhJVF9PTl9QTV9ERUFUSCwKLQkJCQkJCSBtc2VjLAotCQkJCQkJIFdBSVRfRVZFTlRfVkFD VVVNX0RFTEFZKTsKKwkJKHZvaWQpIFdhaXRMYXRjaFVzKE15TGF0Y2gsCisJCQkJCQkgICBXTF9M QVRDSF9TRVQgfCBXTF9USU1FT1VUIHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwKKwkJCQkJCSAgIG1z ZWMgKiAxMDAwLAorCQkJCQkJICAgV0FJVF9FVkVOVF9WQUNVVU1fREVMQVkpOwogCQlSZXNldExh dGNoKE15TGF0Y2gpOwogCiAJCVZhY3V1bUNvc3RCYWxhbmNlID0gMDsKLS0gCjIuMzkuMgoK --00000000000048f74b05f6c1506f Content-Type: text/x-patch; charset="US-ASCII"; name="0003-Use-microsecond-based-naps-in-walreceiver.patch" Content-Disposition: attachment; filename="0003-Use-microsecond-based-naps-in-walreceiver.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lf6dfulk2 RnJvbSBkZDQwYTNlM2MyOGM2OTQ2NmJjMmU4YzJhMjIzNjA4YWM1MWUwNWI3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+ CkRhdGU6IEZyaSwgMTAgTWFyIDIwMjMgMTY6MTk6NDIgKzEzMDAKU3ViamVjdDogW1BBVENIIDMv M10gVXNlIG1pY3Jvc2Vjb25kLWJhc2VkIG5hcHMgaW4gd2FscmVjZWl2ZXIuCgpTaW5jZSBhbnl0 aGluZyBiYXNlZCBvbiB0aW1lc3RhbXAgZGlmZmVyZW5jZXMgaXMgcmVhbGx5IGluIG1pY3Jvc2Vj b25kcwp1bmRlciB0aGUgY292ZXJzLCB3ZSBtaWdodCBhcyB3ZWxsIHVzZSB0aGUgbmV3IGhpZ2hl ciByZXNvbHV0aW9uIEFQSSBmb3IKd2FpdGluZy4KClhYWCBGb3IgaWxsdXN0cmF0aW9uOyB0aGVy ZSB3b3VsZCBiZSBtYW55IG90aGVyIHBsYWNlcyB0aGF0IGNvdWxkIGNoYW5nZQpsaWtlIHRoaXMK LS0tCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxyZWNlaXZlci5jIHwgMTYgKysrKysrKyst LS0tLS0tLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3RpbWVzdGFtcC5jICAgICB8IDIwICsrKysr KysrKysrKysrKysrKysrCiBzcmMvaW5jbHVkZS91dGlscy90aW1lc3RhbXAuaCAgICAgICAgIHwg IDIgKysKIDMgZmlsZXMgY2hhbmdlZCwgMzAgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxyZWNlaXZlci5jIGIvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vd2FscmVjZWl2ZXIuYwppbmRleCBmNjQ0NmRhMmQ2Li4xOGM2 NmMwYzYzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxyZWNlaXZlci5j CisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVyLmMKQEAgLTQ0NSw3ICs0 NDUsNyBAQCBXYWxSZWNlaXZlck1haW4odm9pZCkKIAkJCQlwZ3NvY2tldAl3YWl0X2ZkID0gUEdJ TlZBTElEX1NPQ0tFVDsKIAkJCQlpbnQJCQlyYzsKIAkJCQlUaW1lc3RhbXBUeiBuZXh0V2FrZXVw OwotCQkJCWxvbmcJCW5hcDsKKwkJCQlpbnQ2NAkJbmFwOwogCiAJCQkJLyoKIAkJCQkgKiBFeGl0 IHdhbHJlY2VpdmVyIGlmIHdlJ3JlIG5vdCBpbiByZWNvdmVyeS4gVGhpcyBzaG91bGQgbm90CkBA IC01MzAsNyArNTMwLDcgQEAgV2FsUmVjZWl2ZXJNYWluKHZvaWQpCiAKIAkJCQkvKiBDYWxjdWxh dGUgdGhlIG5hcCB0aW1lLCBjbGFtcGluZyBhcyBuZWNlc3NhcnkuICovCiAJCQkJbm93ID0gR2V0 Q3VycmVudFRpbWVzdGFtcCgpOwotCQkJCW5hcCA9IFRpbWVzdGFtcERpZmZlcmVuY2VNaWxsaXNl Y29uZHMobm93LCBuZXh0V2FrZXVwKTsKKwkJCQluYXAgPSBUaW1lc3RhbXBEaWZmZXJlbmNlTWlj cm9zZWNvbmRzKG5vdywgbmV4dFdha2V1cCk7CiAKIAkJCQkvKgogCQkJCSAqIElkZWFsbHkgd2Ug d291bGQgcmV1c2UgYSBXYWl0RXZlbnRTZXQgb2JqZWN0IHJlcGVhdGVkbHkKQEAgLTU0NCwxMiAr NTQ0LDEyIEBAIFdhbFJlY2VpdmVyTWFpbih2b2lkKQogCQkJCSAqIGF2b2lkaW5nIHNvbWUgc3lz dGVtIGNhbGxzLgogCQkJCSAqLwogCQkJCUFzc2VydCh3YWl0X2ZkICE9IFBHSU5WQUxJRF9TT0NL RVQpOwotCQkJCXJjID0gV2FpdExhdGNoT3JTb2NrZXQoTXlMYXRjaCwKLQkJCQkJCQkJCSAgIFdM X0VYSVRfT05fUE1fREVBVEggfCBXTF9TT0NLRVRfUkVBREFCTEUgfAotCQkJCQkJCQkJICAgV0xf VElNRU9VVCB8IFdMX0xBVENIX1NFVCwKLQkJCQkJCQkJCSAgIHdhaXRfZmQsCi0JCQkJCQkJCQkg ICBuYXAsCi0JCQkJCQkJCQkgICBXQUlUX0VWRU5UX1dBTF9SRUNFSVZFUl9NQUlOKTsKKwkJCQly YyA9IFdhaXRMYXRjaE9yU29ja2V0VXMoTXlMYXRjaCwKKwkJCQkJCQkJCQkgV0xfRVhJVF9PTl9Q TV9ERUFUSCB8IFdMX1NPQ0tFVF9SRUFEQUJMRSB8CisJCQkJCQkJCQkJIFdMX1RJTUVPVVQgfCBX TF9MQVRDSF9TRVQsCisJCQkJCQkJCQkJIHdhaXRfZmQsCisJCQkJCQkJCQkJIG5hcCwKKwkJCQkJ CQkJCQkgV0FJVF9FVkVOVF9XQUxfUkVDRUlWRVJfTUFJTik7CiAJCQkJaWYgKHJjICYgV0xfTEFU Q0hfU0VUKQogCQkJCXsKIAkJCQkJUmVzZXRMYXRjaChNeUxhdGNoKTsKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC90aW1lc3RhbXAuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC90 aW1lc3RhbXAuYwppbmRleCBkZTkzZGI4OWQ0Li41MmY2NTY4Mzk3IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC91dGlscy9hZHQvdGltZXN0YW1wLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L3RpbWVzdGFtcC5jCkBAIC0xNzE5LDYgKzE3MTksMjYgQEAgVGltZXN0YW1wRGlmZmVyZW5jZU1p bGxpc2Vjb25kcyhUaW1lc3RhbXBUeiBzdGFydF90aW1lLCBUaW1lc3RhbXBUeiBzdG9wX3RpbWUp CiAJCXJldHVybiAobG9uZykgKChkaWZmICsgOTk5KSAvIDEwMDApOwogfQogCisvKgorICogVGlt ZXN0YW1wRGlmZmVyZW5jZU1pY3Jvc2Vjb25kcyAtLSBjb252ZXJ0IHRoZSBkaWZmZXJlbmNlIGJl dHdlZW4gdHdvCisgKiAJCXRpbWVzdGFtcHMgaW50byBtaWNyb3NlY29uZHMKKyAqCisgKiBDb21w dXRlIGEgd2FpdCB0aW1lIGZvciBXYWl0TGF0Y2hVcygpLgorICovCitpbnQ2NAorVGltZXN0YW1w RGlmZmVyZW5jZU1pY3Jvc2Vjb25kcyhUaW1lc3RhbXBUeiBzdGFydF90aW1lLCBUaW1lc3RhbXBU eiBzdG9wX3RpbWUpCit7CisJVGltZXN0YW1wVHogZGlmZjsKKworCS8qIERlYWwgd2l0aCB6ZXJv IG9yIG5lZ2F0aXZlIGVsYXBzZWQgdGltZSBxdWlja2x5LiAqLworCWlmIChzdGFydF90aW1lID49 IHN0b3BfdGltZSkKKwkJcmV0dXJuIDA7CisJLyogVG8gbm90IGZhaWwgd2l0aCB0aW1lc3RhbXAg aW5maW5pdGllcywgd2UgbXVzdCBkZXRlY3Qgb3ZlcmZsb3cuICovCisJaWYgKHBnX3N1Yl9zNjRf b3ZlcmZsb3coc3RvcF90aW1lLCBzdGFydF90aW1lLCAmZGlmZikpCisJCXJldHVybiBQR19JTlQ2 NF9NQVg7CisJcmV0dXJuIGRpZmY7Cit9CisKIC8qCiAgKiBUaW1lc3RhbXBEaWZmZXJlbmNlRXhj ZWVkcyAtLSByZXBvcnQgd2hldGhlciB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3bwogICoJCXRp bWVzdGFtcHMgaXMgPj0gYSB0aHJlc2hvbGQgKGV4cHJlc3NlZCBpbiBtaWxsaXNlY29uZHMpCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy90aW1lc3RhbXAuaCBiL3NyYy9pbmNsdWRlL3V0 aWxzL3RpbWVzdGFtcC5oCmluZGV4IGVkZDU5ZGM0MzIuLjFjYWExNTIyMWQgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL3V0aWxzL3RpbWVzdGFtcC5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL3Rp bWVzdGFtcC5oCkBAIC0xMDAsNiArMTAwLDggQEAgZXh0ZXJuIHZvaWQgVGltZXN0YW1wRGlmZmVy ZW5jZShUaW1lc3RhbXBUeiBzdGFydF90aW1lLCBUaW1lc3RhbXBUeiBzdG9wX3RpbWUsCiAJCQkJ CQkJCWxvbmcgKnNlY3MsIGludCAqbWljcm9zZWNzKTsKIGV4dGVybiBsb25nIFRpbWVzdGFtcERp ZmZlcmVuY2VNaWxsaXNlY29uZHMoVGltZXN0YW1wVHogc3RhcnRfdGltZSwKIAkJCQkJCQkJCQkJ VGltZXN0YW1wVHogc3RvcF90aW1lKTsKK2V4dGVybiBpbnQ2NCBUaW1lc3RhbXBEaWZmZXJlbmNl TWljcm9zZWNvbmRzKFRpbWVzdGFtcFR6IHN0YXJ0X3RpbWUsCisJCQkJCQkJCQkJCSBUaW1lc3Rh bXBUeiBzdG9wX3RpbWUpOwogZXh0ZXJuIGJvb2wgVGltZXN0YW1wRGlmZmVyZW5jZUV4Y2VlZHMo VGltZXN0YW1wVHogc3RhcnRfdGltZSwKIAkJCQkJCQkJCSAgIFRpbWVzdGFtcFR6IHN0b3BfdGlt ZSwKIAkJCQkJCQkJCSAgIGludCBtc2VjKTsKLS0gCjIuMzkuMgoK --00000000000048f74b05f6c1506f--