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 1v8i4q-001uMN-Is for pgsql-hackers@arkaria.postgresql.org; Tue, 14 Oct 2025 16:40:45 +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 1v8i4o-001QvG-CG for pgsql-hackers@arkaria.postgresql.org; Tue, 14 Oct 2025 16:40: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.94.2) (envelope-from ) id 1v8i4n-001Qv8-Hy for pgsql-hackers@lists.postgresql.org; Tue, 14 Oct 2025 16:40:41 +0000 Received: from fhigh-a4-smtp.messagingengine.com ([103.168.172.155]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1v8i4j-0029QH-14 for pgsql-hackers@postgresql.org; Tue, 14 Oct 2025 16:40:40 +0000 Received: from phl-compute-04.internal (phl-compute-04.internal [10.202.2.44]) by mailfhigh.phl.internal (Postfix) with ESMTP id D9EC914000D4 for ; Tue, 14 Oct 2025 12:40:34 -0400 (EDT) Received: from phl-imap-03 ([10.202.2.93]) by phl-compute-04.internal (MEProxy); Tue, 14 Oct 2025 12:40:34 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=compiler.org; h= cc:content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm2; t=1760460034; x=1760546434; bh=QU6RJCERiR LB0kspb8zNuHcATxG7fu6a+Frfv5fWgsU=; b=hXiDgR6kAS8KDGmc+/fvxawBU3 mTgWePqkkKm0G7evUoVQNGzZoz9JDDTFcaqFc3jI35uU7FxFgRbvO2fe4ny/bEJw MnYg2+jZgsH8nadTdot6qUy6vlldCOxWzCIlZFyEN7Cp5Az0Zcy+LDrfINf1Pyea tlIInh+bu7fbGm1Ddu2ijZTglghz1PVXmie7KMpCAAg9X849neXdQPvuaXtOdORZ sb7k2dlVZvlT3B2V1XytP/vMYN7G+b1f8YZrlmwBtqalEjoW4PixBbEGum4QeyCs pLMVVvZPH+eHrllgxq7aVo6/FOoh7tDpJmRbM2oMcIK9ngn/WSpniHhhv5Xw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm2; t= 1760460034; x=1760546434; bh=QU6RJCERiRLB0kspb8zNuHcATxG7fu6a+Fr fv5fWgsU=; b=cEdyt4O/ArlEmE4+omxtPbn2X2ZfpAPQQ7yYPpItHTjUrnmXlBG ODgJPhYFRyY9WwPZQLXp1OAUn2PhYOigK7P0hoQADeidymLbeKKoMYB27G8WOUPL ZkoVORDpGIAtCbKbDcp8lu0Aw2+QrSrq9nwJ0++fKZBxJCS02axd52Y743yATP8k zcJbqy/BWN6H5ODPP+RLp2J32qjQBLefbbdG25/rN0GfccxcgSCqykSiYcIZ3Pdl 0258FuHsReHBTWWht0CeTlbTbRhUDsVUyYm+2TZMzZrP341Gmu20kmDbncZGyUZu NdHDZruO7eBPqrPbv1uvz3tmyfXJZLXYzGw== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggdduvddutdefucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfurfetoffkrfgpnffqhgenuceu rghilhhouhhtmecufedttdenucenucfjughrpefoggffhffvkfgjfhfutgesmhdtreerre dttdenucfhrhhomhepfdflohgvlhculfgrtghosghsohhnfdcuoehjohgvlhestghomhhp ihhlvghrrdhorhhgqeenucggtffrrghtthgvrhhnpeefheeutdegvdfgueeuueekieeuff ehkeeuleffveekkeegkeevhfekfffghfevleenucevlhhushhtvghrufhiiigvpedtnecu rfgrrhgrmhepmhgrihhlfhhrohhmpehjohgvlhestghomhhpihhlvghrrdhorhhgpdhnsg gprhgtphhtthhopedupdhmohguvgepshhmthhpohhuthdprhgtphhtthhopehpghhsqhhl qdhhrggtkhgvrhhssehpohhsthhgrhgvshhqlhdrohhrgh X-ME-Proxy: Feedback-ID: ic6394509:Fastmail Received: by mailuser.phl.internal (Postfix, from userid 501) id 121DA18E0054; Tue, 14 Oct 2025 12:40:34 -0400 (EDT) X-Mailer: MessagingEngine.com Webmail Interface MIME-Version: 1.0 X-ThreadId: AZ7XRsRLdGms Date: Tue, 14 Oct 2025 18:40:11 +0200 From: "Joel Jacobson" To: pgsql-hackers Message-Id: <8c71183a-0d28-4bcf-a806-78446ff95404@app.fastmail.com> In-Reply-To: References: <6899c044-4a82-49be-8117-e6f669765f7e@app.fastmail.com> <165530.1752362320@sss.pgh.pa.us> <02a7cd37-e2fc-4212-8b19-f8c239c95fb8@app.fastmail.com> <96f00bf1-cc9d-4520-9d02-9e14e7767c88@app.fastmail.com> <30c2aa7d-dd6c-4b68-a2e4-f217a1a34acf@app.fastmail.com> <0b4d402a-9ac2-4aa8-acf8-8231dbe579ea@app.fastmail.com> <3095599.1758644879@sss.pgh.pa.us> <0dc6a2cc-5216-4dc1-9dd2-430cafc6095b@app.fastmail.com> <52CC167F-763B-4ECA-B0B4-DAB381816828@gmail.com> <9186C6D0-F7A9-482A-9183-89E530B57E36@gmail.com> <1073593.1759423179@sss.pgh.pa.us> <4bd5e6c4-6fa7-44bb-869d-59a32a331fa8@app.fastmail.com> <85828f29-e72e-4400-94f3-9a69bc8dc239@app.fastmail.com> <2495353.1759860890@sss.pgh.pa.us> <8aeae418-92a6-4bbd-9c06-9574c79e59f7@app.fastmail.com> <2531672.1759868124@sss.pgh.pa.us> <474efa78-337c-41cd-a73a-f845a0115109@app.fastmail.com> <2749343.1759949176@sss.pgh.pa.us> <8bfca2be-1ec0-4e15-aafb-0b7b661fe936@app.fastmail.com> <9eba307f-f2fb-48f0-9507-2e197f39ef9e@app.fastmail.com> Subject: Re: Optimize LISTEN/NOTIFY Content-Type: multipart/mixed; boundary=abc434ae136a419d9ec676bf29f660b5 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --abc434ae136a419d9ec676bf29f660b5 Content-Type: text/plain Content-Transfer-Encoding: 7bit On Sat, Oct 11, 2025, at 09:43, Joel Jacobson wrote: > On Sat, Oct 11, 2025, at 08:43, Joel Jacobson wrote: >> In addition to previously suggested optimization, there is another major ... >> I'm not entirely sure this approach is correct though Having investigated this, the "direct advancement" approach seems correct to me. (I understand the exclusive lock in PreCommit_Notify on NotifyQueueLock is of course needed because there are other operations that don't acquire the heavyweight-lock, that take shared/exclusive lock on NotifyQueueLock to read/modify QUEUE_HEAD, so the exclusive lock on NotifyQueueLock in PreCommit_Notify is needed, since it modifies the QUEUE_HEAD.) Given all the experiments since my earlier message, here is a fresh, self-contained write-up: This series has two patches: * 0001-optimize_listen_notify-v16.patch: Improve test coverage of async.c. Adds isolation specs covering previously untested paths (subxact LISTEN reparenting/merge/abort, simple NOTIFY reparenting, notification_match dedup, and an array-growth case used by the follow-on patch. * 0002-optimize_listen_notify-v16.patch: Optimize LISTEN/NOTIFY by maintaining a shared channel map and using direct advancement to avoid useless wakeups. Problem ------- Today SignalBackends wakes all listeners in the same database, with no knowledge of which backends listen on which channels. When some backends are listening on different channels, each NOTIFY causes unnecessary wakeups and context switches, which can become the bottleneck in workloads. Overview of the solution (patch 0002) ------------------------------------- * Introduce a lazily-created DSA+dshash map (dboid, channel) -> [ProcNumber] (channelHash). AtCommit_Notify maintains it for LISTEN/UNLISTEN, and SignalBackends consults it to signal only listeners on the channels notified within the transaction. * Add a per-backend wakeupPending flag to suppress duplicate signals. * Direct advancement: while queuing, PreCommit_Notify records the queue head before and after our writes. Writers are globally serialized, so the interval [oldHead, newHead) contains only our entries. SignalBackends advances any backend still at oldHead directly to newHead, avoiding a pointless wakeup. * Keep the queue healthy by signaling backends that have fallen too far behind (lag >= QUEUE_CLEANUP_DELAY) so the global tail can advance. * pg_listening_channels and IsListeningOn now read from channelHash. * Add LWLock tranche NOTIFY_CHANNEL_HASH and wait event NotifyChannelHash. No user-visible semantic changes are intended; this is an internal performance improvement. Benchmark --------- Using a patched pgbench (adds --listen-notify-benchmark; attached as .txt to avoid confusing cfbot). Each run performs 10 000 round trips and adds 100 idle listeners per iteration. master (HEAD): % ./pgbench_patched --listen-notify-benchmark --notify-round-trips=10000 --notify-idle-step=100 idle_listeners round_trips_per_sec max_latency_usec 0 32123.7 893 100 1952.5 1465 200 991.4 3438 300 663.5 2454 400 494.6 2950 500 398.6 3394 600 332.8 4272 700 287.1 4692 800 252.6 5208 900 225.4 5614 1000 202.5 6212 0002-optimize_listen_notify-v16.patch: % ./pgbench_patched --listen-notify-benchmark --notify-round-trips=10000 --notify-idle-step=100 idle_listeners round_trips_per_sec max_latency_usec 0 31832.6 1067 100 32341.0 1035 200 31562.5 1054 300 30040.1 1057 400 29287.1 1023 500 28191.9 1201 600 28166.5 1019 700 26994.3 1094 800 26501.0 1043 900 25974.2 1005 1000 25720.6 1008 Benchmarked on MacBook Pro Apple M3 Max. Files ----- * 0001-optimize_listen_notify-v16.patch - tests only. * 0002-optimize_listen_notify-v16.patch - implementation. * pgbench-listen-notify-benchmark-patch.txt - adds --listen-notify-benchmark. Feedback and review much welcomed. /Joel --abc434ae136a419d9ec676bf29f660b5 Content-Disposition: attachment; filename*0="0001-optimize_listen_notify-v16.patch" Content-Type: application/octet-stream; name="=?UTF-8?Q?0001-optimize=5Flisten=5Fnotify-v16.patch?=" Content-Transfer-Encoding: base64 RnJvbSA2MDBmZWYxZDgzNWE1MTJhMzRjYjgxMThlMDY4MTgzMmNiYWU1MTIwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKb2VsIEphY29ic29uIDxqb2VsQGNvbXBpbGVyLm9y Zz4KRGF0ZTogV2VkLCA4IE9jdCAyMDI1IDA5OjMwOjU0ICswMjAwClN1YmplY3Q6IFtQQVRD SCAxLzJdIEltcHJvdmUgTElTVEVOL05PVElGWSB0ZXN0IGNvdmVyYWdlCgpUaGlzIGFkZHMg aXNvbGF0aW9uIHRlc3RzIHRvIGNvdmVyIHByZXZpb3VzbHkgdW50ZXN0ZWQgY29kZSBwYXRo czoKCiogQ2hlY2sgc2ltcGxlIE5PVElGWSByZXBhcmVudGluZyB3aGVuIHBhcmVudCBoYXMg bm8gYWN0aW9uCiogQ2hlY2sgTElTVEVOIHJlcGFyZW50aW5nIGluIHN1YnRyYW5zYWN0aW9u CiogQ2hlY2sgTElTVEVOIG1lcmdlIHBhdGggd2hlbiBib3RoIG91dGVyIGFuZCBpbm5lciB0 cmFuc2FjdGlvbnMgaGF2ZSBhY3Rpb25zCiogQ2hlY2sgTElTVEVOIGFib3J0IHBhdGggKFJP TExCQUNLIFRPIFNBVkVQT0lOVCBkaXNjYXJkcyBwZW5kaW5nIGFjdGlvbnMpCiogQ2hlY2sg bm90aWZpY2F0aW9uX21hdGNoIGZ1bmN0aW9uICh0cmlnZ2VyZWQgYnkgaGFzaCB0YWJsZSBk dXBsaWNhdGUgZGV0ZWN0aW9uKQoKVGhpcyBhbHNvIGFkZHMgYSB0ZXN0IHRvIHByZXBhcmUg Zm9yIHRoZSBuZXh0IHBhdGNoOgoKKiBDaGVjayBDaGFubmVsSGFzaEFkZExpc3RlbmVyIGFy cmF5IGdyb3d0aAotLS0KIHNyYy90ZXN0L2lzb2xhdGlvbi9leHBlY3RlZC9hc3luYy1ub3Rp Znkub3V0IHwgMTAzICsrKysrKysrKysrKysrKysrKy0KIHNyYy90ZXN0L2lzb2xhdGlvbi9z cGVjcy9hc3luYy1ub3RpZnkuc3BlYyAgIHwgIDUyICsrKysrKysrKysKIDIgZmlsZXMgY2hh bmdlZCwgMTU0IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKCmRpZmYgLS1naXQgYS9z cmMvdGVzdC9pc29sYXRpb24vZXhwZWN0ZWQvYXN5bmMtbm90aWZ5Lm91dCBiL3NyYy90ZXN0 L2lzb2xhdGlvbi9leHBlY3RlZC9hc3luYy1ub3RpZnkub3V0CmluZGV4IDU1NmUxODA1ODkz Li45YzE5ODQzZDJkNyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvaXNvbGF0aW9uL2V4cGVjdGVk L2FzeW5jLW5vdGlmeS5vdXQKKysrIGIvc3JjL3Rlc3QvaXNvbGF0aW9uL2V4cGVjdGVkL2Fz eW5jLW5vdGlmeS5vdXQKQEAgLTEsNCArMSw0IEBACi1QYXJzZWQgdGVzdCBzcGVjIHdpdGgg MyBzZXNzaW9ucworUGFyc2VkIHRlc3Qgc3BlYyB3aXRoIDUgc2Vzc2lvbnMKIAogc3RhcnRp bmcgcGVybXV0YXRpb246IGxpc3RlbmMgbm90aWZ5MSBub3RpZnkyIG5vdGlmeTMgbm90aWZ5 Zgogc3RlcCBsaXN0ZW5jOiBMSVNURU4gYzE7IExJU1RFTiBjMjsKQEAgLTQ3LDYgKzQ3LDEw NSBAQCBub3RpZmllcjogTk9USUZZICJjMiIgd2l0aCBwYXlsb2FkICJwYXlsb2FkIiBmcm9t IG5vdGlmaWVyCiBub3RpZmllcjogTk9USUZZICJjMSIgd2l0aCBwYXlsb2FkICJwYXlsb2Fk cyIgZnJvbSBub3RpZmllcgogbm90aWZpZXI6IE5PVElGWSAiYzIiIHdpdGggcGF5bG9hZCAi cGF5bG9hZHMiIGZyb20gbm90aWZpZXIKIAorc3RhcnRpbmcgcGVybXV0YXRpb246IGxpc3Rl bmMgbm90aWZ5c19zaW1wbGUKK3N0ZXAgbGlzdGVuYzogTElTVEVOIGMxOyBMSVNURU4gYzI7 CitzdGVwIG5vdGlmeXNfc2ltcGxlOiAKKwlCRUdJTjsKKwlTQVZFUE9JTlQgczE7CisJTk9U SUZZIGMxLCAnc2ltcGxlMSc7CisJTk9USUZZIGMyLCAnc2ltcGxlMic7CisJUkVMRUFTRSBT QVZFUE9JTlQgczE7CisJQ09NTUlUOworCitub3RpZmllcjogTk9USUZZICJjMSIgd2l0aCBw YXlsb2FkICJzaW1wbGUxIiBmcm9tIG5vdGlmaWVyCitub3RpZmllcjogTk9USUZZICJjMiIg d2l0aCBwYXlsb2FkICJzaW1wbGUyIiBmcm9tIG5vdGlmaWVyCisKK3N0YXJ0aW5nIHBlcm11 dGF0aW9uOiBsc2JlZ2luIGxzc2F2ZXBvaW50IGxzbGlzdGVuIGxzcmVsZWFzZSBsc2NvbW1p dCBsc25vdGlmeQorc3RlcCBsc2JlZ2luOiBCRUdJTjsKK3N0ZXAgbHNzYXZlcG9pbnQ6IFNB VkVQT0lOVCBzMTsKK3N0ZXAgbHNsaXN0ZW46IExJU1RFTiBjMTsgTElTVEVOIGMyOworc3Rl cCBsc3JlbGVhc2U6IFJFTEVBU0UgU0FWRVBPSU5UIHMxOworc3RlcCBsc2NvbW1pdDogQ09N TUlUOworc3RlcCBsc25vdGlmeTogTk9USUZZIGMxLCAnc3VieGFjdF90ZXN0JzsKK2xpc3Rl bl9zdWJ4YWN0OiBOT1RJRlkgImMxIiB3aXRoIHBheWxvYWQgInN1YnhhY3RfdGVzdCIgZnJv bSBsaXN0ZW5fc3VieGFjdAorCitzdGFydGluZyBwZXJtdXRhdGlvbjogbHNiZWdpbiBsc2xp c3Rlbl9vdXRlciBsc3NhdmVwb2ludCBsc2xpc3RlbiBsc3JlbGVhc2UgbHNjb21taXQgbHNu b3RpZnkKK3N0ZXAgbHNiZWdpbjogQkVHSU47CitzdGVwIGxzbGlzdGVuX291dGVyOiBMSVNU RU4gYzM7CitzdGVwIGxzc2F2ZXBvaW50OiBTQVZFUE9JTlQgczE7CitzdGVwIGxzbGlzdGVu OiBMSVNURU4gYzE7IExJU1RFTiBjMjsKK3N0ZXAgbHNyZWxlYXNlOiBSRUxFQVNFIFNBVkVQ T0lOVCBzMTsKK3N0ZXAgbHNjb21taXQ6IENPTU1JVDsKK3N0ZXAgbHNub3RpZnk6IE5PVElG WSBjMSwgJ3N1YnhhY3RfdGVzdCc7CitsaXN0ZW5fc3VieGFjdDogTk9USUZZICJjMSIgd2l0 aCBwYXlsb2FkICJzdWJ4YWN0X3Rlc3QiIGZyb20gbGlzdGVuX3N1YnhhY3QKKworc3RhcnRp bmcgcGVybXV0YXRpb246IGxzYmVnaW4gbHNzYXZlcG9pbnQgbHNsaXN0ZW4gbHNyb2xsYmFj ayBsc2NvbW1pdCBsc25vdGlmeV9jaGVjaworc3RlcCBsc2JlZ2luOiBCRUdJTjsKK3N0ZXAg bHNzYXZlcG9pbnQ6IFNBVkVQT0lOVCBzMTsKK3N0ZXAgbHNsaXN0ZW46IExJU1RFTiBjMTsg TElTVEVOIGMyOworc3RlcCBsc3JvbGxiYWNrOiBST0xMQkFDSyBUTyBTQVZFUE9JTlQgczE7 CitzdGVwIGxzY29tbWl0OiBDT01NSVQ7CitzdGVwIGxzbm90aWZ5X2NoZWNrOiBOT1RJRlkg YzEsICdzaG91bGRfbm90X3JlY2VpdmUnOworCitzdGFydGluZyBwZXJtdXRhdGlvbjogbGlz dGVuYyBub3RpZnlfbWFueV93aXRoX2R1cAorc3RlcCBsaXN0ZW5jOiBMSVNURU4gYzE7IExJ U1RFTiBjMjsKK3N0ZXAgbm90aWZ5X21hbnlfd2l0aF9kdXA6IAorCUJFR0lOOworCVNFTEVD VCBwZ19ub3RpZnkoJ2MxJywgJ21zZycgfHwgczo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoMSwgMTcpIHM7CisJU0VMRUNUIHBnX25vdGlmeSgnYzEnLCAnbXNnMScpOworCUNPTU1J VDsKKworcGdfbm90aWZ5CistLS0tLS0tLS0KKyAgICAgICAgIAorICAgICAgICAgCisgICAg ICAgICAKKyAgICAgICAgIAorICAgICAgICAgCisgICAgICAgICAKKyAgICAgICAgIAorICAg ICAgICAgCisgICAgICAgICAKKyAgICAgICAgIAorICAgICAgICAgCisgICAgICAgICAKKyAg ICAgICAgIAorICAgICAgICAgCisgICAgICAgICAKKyAgICAgICAgIAorICAgICAgICAgCiso MTcgcm93cykKKworcGdfbm90aWZ5CistLS0tLS0tLS0KKyAgICAgICAgIAorKDEgcm93KQor Citub3RpZmllcjogTk9USUZZICJjMSIgd2l0aCBwYXlsb2FkICJtc2cxIiBmcm9tIG5vdGlm aWVyCitub3RpZmllcjogTk9USUZZICJjMSIgd2l0aCBwYXlsb2FkICJtc2cyIiBmcm9tIG5v dGlmaWVyCitub3RpZmllcjogTk9USUZZICJjMSIgd2l0aCBwYXlsb2FkICJtc2czIiBmcm9t IG5vdGlmaWVyCitub3RpZmllcjogTk9USUZZICJjMSIgd2l0aCBwYXlsb2FkICJtc2c0IiBm cm9tIG5vdGlmaWVyCitub3RpZmllcjogTk9USUZZICJjMSIgd2l0aCBwYXlsb2FkICJtc2c1 IiBmcm9tIG5vdGlmaWVyCitub3RpZmllcjogTk9USUZZICJjMSIgd2l0aCBwYXlsb2FkICJt c2c2IiBmcm9tIG5vdGlmaWVyCitub3RpZmllcjogTk9USUZZICJjMSIgd2l0aCBwYXlsb2Fk ICJtc2c3IiBmcm9tIG5vdGlmaWVyCitub3RpZmllcjogTk9USUZZICJjMSIgd2l0aCBwYXls b2FkICJtc2c4IiBmcm9tIG5vdGlmaWVyCitub3RpZmllcjogTk9USUZZICJjMSIgd2l0aCBw YXlsb2FkICJtc2c5IiBmcm9tIG5vdGlmaWVyCitub3RpZmllcjogTk9USUZZICJjMSIgd2l0 aCBwYXlsb2FkICJtc2cxMCIgZnJvbSBub3RpZmllcgorbm90aWZpZXI6IE5PVElGWSAiYzEi IHdpdGggcGF5bG9hZCAibXNnMTEiIGZyb20gbm90aWZpZXIKK25vdGlmaWVyOiBOT1RJRlkg ImMxIiB3aXRoIHBheWxvYWQgIm1zZzEyIiBmcm9tIG5vdGlmaWVyCitub3RpZmllcjogTk9U SUZZICJjMSIgd2l0aCBwYXlsb2FkICJtc2cxMyIgZnJvbSBub3RpZmllcgorbm90aWZpZXI6 IE5PVElGWSAiYzEiIHdpdGggcGF5bG9hZCAibXNnMTQiIGZyb20gbm90aWZpZXIKK25vdGlm aWVyOiBOT1RJRlkgImMxIiB3aXRoIHBheWxvYWQgIm1zZzE1IiBmcm9tIG5vdGlmaWVyCitu b3RpZmllcjogTk9USUZZICJjMSIgd2l0aCBwYXlsb2FkICJtc2cxNiIgZnJvbSBub3RpZmll cgorbm90aWZpZXI6IE5PVElGWSAiYzEiIHdpdGggcGF5bG9hZCAibXNnMTciIGZyb20gbm90 aWZpZXIKKworc3RhcnRpbmcgcGVybXV0YXRpb246IGxpc3RlbmMgbGxpc3RlbiBsMmxpc3Rl biBsM2xpc3RlbiBsc2xpc3Rlbgorc3RlcCBsaXN0ZW5jOiBMSVNURU4gYzE7IExJU1RFTiBj MjsKK3N0ZXAgbGxpc3RlbjogTElTVEVOIGMxOyBMSVNURU4gYzI7CitzdGVwIGwybGlzdGVu OiBMSVNURU4gYzE7CitzdGVwIGwzbGlzdGVuOiBMSVNURU4gYzE7CitzdGVwIGxzbGlzdGVu OiBMSVNURU4gYzE7IExJU1RFTiBjMjsKKwogc3RhcnRpbmcgcGVybXV0YXRpb246IGxsaXN0 ZW4gbm90aWZ5MSBub3RpZnkyIG5vdGlmeTMgbm90aWZ5ZiBsY2hlY2sKIHN0ZXAgbGxpc3Rl bjogTElTVEVOIGMxOyBMSVNURU4gYzI7CiBzdGVwIG5vdGlmeTE6IE5PVElGWSBjMTsKQEAg LTk1LDYgKzE5NCw4IEBAIGxpc3RlbmVyOiBOT1RJRlkgImMyIiB3aXRoIHBheWxvYWQgIiIg ZnJvbSBub3RpZmllcgogCiBzdGFydGluZyBwZXJtdXRhdGlvbjogbDJsaXN0ZW4gbDJiZWdp biBub3RpZnkxIGxiZWdpbnMgbGxpc3RlbiBsY29tbWl0IGwyY29tbWl0IGwyc3RvcAogc3Rl cCBsMmxpc3RlbjogTElTVEVOIGMxOworbGlzdGVuZXIyOiBOT1RJRlkgImMxIiB3aXRoIHBh eWxvYWQgIiIgZnJvbSBub3RpZmllcgorbGlzdGVuZXIyOiBOT1RJRlkgImMxIiB3aXRoIHBh eWxvYWQgIiIgZnJvbSBub3RpZmllcgogc3RlcCBsMmJlZ2luOiBCRUdJTjsKIHN0ZXAgbm90 aWZ5MTogTk9USUZZIGMxOwogc3RlcCBsYmVnaW5zOiBCRUdJTiBJU09MQVRJT04gTEVWRUwg U0VSSUFMSVpBQkxFOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvaXNvbGF0aW9uL3NwZWNzL2Fz eW5jLW5vdGlmeS5zcGVjIGIvc3JjL3Rlc3QvaXNvbGF0aW9uL3NwZWNzL2FzeW5jLW5vdGlm eS5zcGVjCmluZGV4IDBiOGNmZDkxMDgzLi45NDJiMDlkNTczNSAxMDA2NDQKLS0tIGEvc3Jj L3Rlc3QvaXNvbGF0aW9uL3NwZWNzL2FzeW5jLW5vdGlmeS5zcGVjCisrKyBiL3NyYy90ZXN0 L2lzb2xhdGlvbi9zcGVjcy9hc3luYy1ub3RpZnkuc3BlYwpAQCAtMzEsNiArMzEsMjAgQEAg c3RlcCBub3RpZnlzMQl7CiAJUk9MTEJBQ0sgVE8gU0FWRVBPSU5UIHMyOwogCUNPTU1JVDsK IH0KK3N0ZXAgbm90aWZ5c19zaW1wbGUJeworCUJFR0lOOworCVNBVkVQT0lOVCBzMTsKKwlO T1RJRlkgYzEsICdzaW1wbGUxJzsKKwlOT1RJRlkgYzIsICdzaW1wbGUyJzsKKwlSRUxFQVNF IFNBVkVQT0lOVCBzMTsKKwlDT01NSVQ7Cit9CitzdGVwIG5vdGlmeV9tYW55X3dpdGhfZHVw CXsKKwlCRUdJTjsKKwlTRUxFQ1QgcGdfbm90aWZ5KCdjMScsICdtc2cnIHx8IHM6OnRleHQp IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDE3KSBzOworCVNFTEVDVCBwZ19ub3RpZnkoJ2Mx JywgJ21zZzEnKTsKKwlDT01NSVQ7Cit9CiBzdGVwIHVzYWdlCQl7IFNFTEVDVCBwZ19ub3Rp ZmljYXRpb25fcXVldWVfdXNhZ2UoKSA+IDAgQVMgbm9uemVybzsgfQogc3RlcCBiaWdub3Rp ZnkJeyBTRUxFQ1QgY291bnQocGdfbm90aWZ5KCdjMScsIHM6OnRleHQpKSBGUk9NIGdlbmVy YXRlX3NlcmllcygxLCAxMDAwKSBzOyB9CiB0ZWFyZG93bgkJeyBVTkxJU1RFTiAqOyB9CkBA IC01Myw2ICs2NywyNiBAQCBzdGVwIGwyYmVnaW4JeyBCRUdJTjsgfQogc3RlcCBsMmNvbW1p dAl7IENPTU1JVDsgfQogc3RlcCBsMnN0b3AJCXsgVU5MSVNURU4gKjsgfQogCisjIFRoaXJk IGxpc3RlbmVyIHNlc3Npb24gZm9yIHRlc3RpbmcgYXJyYXkgZ3Jvd3RoLgorCitzZXNzaW9u IGxpc3RlbmVyMworc3RlcCBsM2xpc3Rlbgl7IExJU1RFTiBjMTsgfQordGVhcmRvd24JCXsg VU5MSVNURU4gKjsgfQorCisjIFNlc3Npb24gZm9yIHRlc3RpbmcgTElTVEVOIGluIHN1YnRy YW5zYWN0aW9uIHdpdGggc2VwYXJhdGUgc3RlcHMuCisKK3Nlc3Npb24gbGlzdGVuX3N1Ynhh Y3QKK3N0ZXAgbHNiZWdpbgl7IEJFR0lOOyB9CitzdGVwIGxzbGlzdGVuX291dGVyCXsgTElT VEVOIGMzOyB9CitzdGVwIGxzc2F2ZXBvaW50CXsgU0FWRVBPSU5UIHMxOyB9CitzdGVwIGxz bGlzdGVuCXsgTElTVEVOIGMxOyBMSVNURU4gYzI7IH0KK3N0ZXAgbHNyZWxlYXNlCXsgUkVM RUFTRSBTQVZFUE9JTlQgczE7IH0KK3N0ZXAgbHNyb2xsYmFjawl7IFJPTExCQUNLIFRPIFNB VkVQT0lOVCBzMTsgfQorc3RlcCBsc2NvbW1pdAl7IENPTU1JVDsgfQorc3RlcCBsc25vdGlm eQl7IE5PVElGWSBjMSwgJ3N1YnhhY3RfdGVzdCc7IH0KK3N0ZXAgbHNub3RpZnlfY2hlY2sJ eyBOT1RJRlkgYzEsICdzaG91bGRfbm90X3JlY2VpdmUnOyB9Cit0ZWFyZG93bgkJeyBVTkxJ U1RFTiAqOyB9CisKIAogIyBUcml2aWFsIGNhc2VzLgogcGVybXV0YXRpb24gbGlzdGVuYyBu b3RpZnkxIG5vdGlmeTIgbm90aWZ5MyBub3RpZnlmCkBAIC02MCw2ICs5NCwyNCBAQCBwZXJt dXRhdGlvbiBsaXN0ZW5jIG5vdGlmeTEgbm90aWZ5MiBub3RpZnkzIG5vdGlmeWYKICMgQ2hl Y2sgc2ltcGxlIGFuZCBsZXNzLXNpbXBsZSBkZWR1cGxpY2F0aW9uLgogcGVybXV0YXRpb24g bGlzdGVuYyBub3RpZnlkMSBub3RpZnlkMiBub3RpZnlzMQogCisjIENoZWNrIHNpbXBsZSBO T1RJRlkgcmVwYXJlbnRpbmcgd2hlbiBwYXJlbnQgaGFzIG5vIGFjdGlvbi4KK3Blcm11dGF0 aW9uIGxpc3RlbmMgbm90aWZ5c19zaW1wbGUKKworIyBDaGVjayBMSVNURU4gcmVwYXJlbnRp bmcgaW4gc3VidHJhbnNhY3Rpb24uCitwZXJtdXRhdGlvbiBsc2JlZ2luIGxzc2F2ZXBvaW50 IGxzbGlzdGVuIGxzcmVsZWFzZSBsc2NvbW1pdCBsc25vdGlmeQorCisjIENoZWNrIExJU1RF TiBtZXJnZSBwYXRoIHdoZW4gYm90aCBvdXRlciBhbmQgaW5uZXIgdHJhbnNhY3Rpb25zIGhh dmUgYWN0aW9ucy4KK3Blcm11dGF0aW9uIGxzYmVnaW4gbHNsaXN0ZW5fb3V0ZXIgbHNzYXZl cG9pbnQgbHNsaXN0ZW4gbHNyZWxlYXNlIGxzY29tbWl0IGxzbm90aWZ5CisKKyMgQ2hlY2sg TElTVEVOIGFib3J0IHBhdGggKFJPTExCQUNLIFRPIFNBVkVQT0lOVCBkaXNjYXJkcyBwZW5k aW5nIGFjdGlvbnMpLgorcGVybXV0YXRpb24gbHNiZWdpbiBsc3NhdmVwb2ludCBsc2xpc3Rl biBsc3JvbGxiYWNrIGxzY29tbWl0IGxzbm90aWZ5X2NoZWNrCisKKyMgQ2hlY2sgbm90aWZp Y2F0aW9uX21hdGNoIGZ1bmN0aW9uICh0cmlnZ2VyZWQgYnkgaGFzaCB0YWJsZSBkdXBsaWNh dGUgZGV0ZWN0aW9uKS4KK3Blcm11dGF0aW9uIGxpc3RlbmMgbm90aWZ5X21hbnlfd2l0aF9k dXAKKworIyBDaGVjayBDaGFubmVsSGFzaEFkZExpc3RlbmVyIGFycmF5IGdyb3d0aC4KK3Bl cm11dGF0aW9uIGxpc3RlbmMgbGxpc3RlbiBsMmxpc3RlbiBsM2xpc3RlbiBsc2xpc3Rlbgor CiAjIENyb3NzLWJhY2tlbmQgbm90aWZpY2F0aW9uIGRlbGl2ZXJ5LiAgV2UgdXNlIGEgInNl bGVjdCAxIiB0byBmb3JjZSB0aGUKICMgbGlzdGVuZXIgc2Vzc2lvbiB0byBjaGVjayBmb3Ig bm90aWZpZXMuICBJbiBwcmluY2lwbGUgd2UgY291bGQganVzdCB3YWl0CiAjIGZvciBkZWxp dmVyeSwgYnV0IHRoYXQgd291bGQgcmVxdWlyZSBleHRyYSBzdXBwb3J0IGluIGlzb2xhdGlv bnRlc3RlcgotLSAKMi41MC4xCgo= --abc434ae136a419d9ec676bf29f660b5 Content-Disposition: attachment; filename*0="0002-optimize_listen_notify-v16.patch" Content-Type: application/octet-stream; name="=?UTF-8?Q?0002-optimize=5Flisten=5Fnotify-v16.patch?=" Content-Transfer-Encoding: base64 RnJvbSAxZWYzOWU2MzAwYTg3ZWMwYWJiMGZkNzI5YWU3NTUzOGQ4ZWNiNDVlIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKb2VsIEphY29ic29uIDxqb2VsQGNvbXBpbGVyLm9y Zz4KRGF0ZTogVHVlLCAxNCBPY3QgMjAyNSAwODowMzoxOSArMDIwMApTdWJqZWN0OiBbUEFU Q0ggMi8yXSBPcHRpbWl6ZSBMSVNURU4vTk9USUZZIHdpdGggc2hhcmVkIGNoYW5uZWwgbWFw IGFuZCBkaXJlY3QKIGFkdmFuY2VtZW50CgpUaGlzIHBhdGNoIHJld29ya3MgdGhlIExJU1RF Ti9OT1RJRlkgc2lnbmFsaW5nIHBhdGggdG8gYXZvaWQgdGhlCmxvbmctc3RhbmRpbmcgaW5l ZmZpY2llbmN5IHdoZXJlIGV2ZXJ5IGNvbW1pdCB3YWtlcyBhbGwgbGlzdGVuaW5nCmJhY2tl bmRzIGluIHRoZSBzYW1lIGRhdGFiYXNlLCBldmVuIHRob3NlIHRoYXQgYXJlIGxpc3Rlbmlu ZyBvbgpjb21wbGV0ZWx5IGRpZmZlcmVudCBjaGFubmVscy4KClByb2JsZW0KLS0tLS0tLQoK QXQgcHJlc2VudCwgU2lnbmFsQmFja2VuZHMgaGFzIG5vIGNlbnRyYWwga25vd2xlZGdlIG9m IHdoaWNoIGJhY2tlbmQKbGlzdGVucyBvbiB3aGljaCBjaGFubmVsLiBXaGVuIGEgYmFja2Vu ZCBjb21taXRzIGEgdHJhbnNhY3Rpb24gdGhhdAppc3N1ZWQgTk9USUZZLCBpdCBzaW1wbHkg aXRlcmF0ZXMgb3ZlciBhbGwgcmVnaXN0ZXJlZCBsaXN0ZW5lcnMgaW4gdGhlCnNhbWUgZGF0 YWJhc2UgYW5kIHNlbmRzIGVhY2ggb25lIGEgUFJPQ1NJR19OT1RJRllfSU5URVJSVVBUIHNp Z25hbC4KClRoYXQgYmVoYXZpb3IgaXMgZmluZSB3aGVuIGFsbCBsaXN0ZW5lcnMgYXJlIG9u IHRoZSBzYW1lIGNoYW5uZWwsIGJ1dAp3aGVuIG1hbnkgYmFja2VuZHMgYXJlIGxpc3Rlbmlu ZyBvbiBkaWZmZXJlbnQgY2hhbm5lbHMsIGVhY2ggTk9USUZZCnRyaWdnZXJzIGEgc3Rvcm0g b2YgdW5uZWNlc3Nhcnkgd2FrZXVwcyBhbmQgY29udGV4dCBzd2l0Y2hlcy4gQXMgdGhlCm51 bWJlciBvZiBpZGxlIGxpc3RlbmVycyBncm93cywgdGhpcyBvZnRlbiBiZWNvbWVzIHRoZSBi b3R0bGVuZWNrIGFuZAp0aHJvdWdocHV0IGRyb3BzIHNoYXJwbHkuCgpPdmVydmlldyBvZiB0 aGUgc29sdXRpb24KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUaGlzIHBhdGNoIGludHJv ZHVjZXMgYSBsYXppbHktY3JlYXRlZCBkeW5hbWljIHNoYXJlZCBoYXNoIChkc2hhc2gpCmJh Y2tlZCBieSBkeW5hbWljIHNoYXJlZCBtZW1vcnkgKERTQSkgdGhhdCBtYXBzIChkYm9pZCwg Y2hhbm5lbCkgdG8KYXJyYXlzIG9mIGxpc3RlbmluZyBiYWNrZW5kcyAoUHJvY051bWJlcnMp LiBUaGlzIGFsbG93cyB0aGUgc2VuZGVyIHRvCnRhcmdldCBvbmx5IHRob3NlIGJhY2tlbmRz IGFjdHVhbGx5IGxpc3RlbmluZyBvbiB0aGUgY2hhbm5lbHMgZm9yIHdoaWNoCml0IGhhcyBx dWV1ZWQgbm90aWZpY2F0aW9ucy4KCkF0IGNvbW1pdCB0aW1lOgoKKiBBdENvbW1pdF9Ob3Rp ZnkgdXBkYXRlcyB0aGUgc2hhcmVkIGNoYW5uZWxIYXNoIHRvIHJlZmxlY3QgYW55IExJU1RF TgogIG9yIFVOTElTVEVOIGFjdGlvbnMgcGVyZm9ybWVkIGluIHRoZSB0cmFuc2FjdGlvbi4K KiBTaWduYWxCYWNrZW5kcyBjb25zdWx0cyB0aGlzIGhhc2ggdG8gZmluZCB0aGUgYmFja2Vu ZHMgdGhhdCBhcmUKICBsaXN0ZW5pbmcgb24gdGhlIGNoYW5uZWxzIGJlaW5nIG5vdGlmaWVk IGluIHRoZSBjdXJyZW50IGRhdGFiYXNlLCBhbmQKICBzaWduYWxzIG9ubHkgdGhvc2UuCgpF YWNoIGJhY2tlbmQncyBlbnRyeSBpbiBBc3luY1F1ZXVlQ29udHJvbCBub3cgaW5jbHVkZXMg YSB3YWtldXBQZW5kaW5nCmZsYWcgdG8gcHJldmVudCBkdXBsaWNhdGUgc2lnbmFscyB3aGls ZSBhIHByZXZpb3VzIHdha2V1cCBpcyBzdGlsbCBiZWluZwpwcm9jZXNzZWQuCgpEaXJlY3Qg YWR2YW5jZW1lbnQKLS0tLS0tLS0tLS0tLS0tLS0tCgpBIGZ1cnRoZXIgb3B0aW1pemF0aW9u IGF2b2lkcyBzaWduYWxpbmcgaWRsZSBiYWNrZW5kcyB0aGF0IGFyZSBub3QKbGlzdGVuaW5n IG9uIGFueSBvZiB0aGUgY2hhbm5lbHMgbm90aWZpZWQgd2l0aGluIHRoZSB0cmFuc2FjdGlv bi4KCldoaWxlIHF1ZXVpbmcgbm90aWZpY2F0aW9ucywgUHJlQ29tbWl0X05vdGlmeSByZWNv cmRzIHRoZSBxdWV1ZSBoZWFkCnBvc2l0aW9uIGJvdGggYmVmb3JlIGFuZCBhZnRlciB3cml0 aW5nIGl0cyBub3RpZmljYXRpb25zLiBCZWNhdXNlIGFsbAp3cml0ZXJzIGFyZSBzZXJpYWxp emVkIGJ5IHRoZSBleGlzdGluZyBjbHVzdGVyLXdpZGUgaGVhdnl3ZWlnaHQgbG9jayBvbgoi ZGF0YWJhc2UgMCIsIG5vIGJhY2tlbmQgKGZyb20gYW55IGRhdGFiYXNlKSBjYW4gaW5zZXJ0 IGVudHJpZXMgYmV0d2Vlbgp0aG9zZSB0d28gcG9pbnRzLiBUaGlzIGd1YXJhbnRlZXMgdGhh dCB0aGUgcmVnaW9uIFtvbGRIZWFkLCBuZXdIZWFkKQpjb250YWlucyBvbmx5IHRoZSBlbnRy aWVzIHdyaXR0ZW4gYnkgb3VyIGNvbW1pdC4KClNpZ25hbEJhY2tlbmRzIHVzZXMgdGhpcyBm YWN0IHRvIGRpcmVjdGx5IGFkdmFuY2UgYW55IGJhY2tlbmQgc3RpbGwKcG9zaXRpb25lZCBh dCBvbGRIZWFkIHVwIHRvIG5ld0hlYWQsIGF2b2lkaW5nIGEgbmVlZGxlc3Mgd2FrZXVwIGZv cgpsaXN0ZW5lcnMgdGhhdCB3b3VsZCBvdGhlcndpc2Ugbm90IGZpbmQgYW55IG5vdGlmaWVz IG9mIGludGVyZXN0LgoKUXVldWUgaGVhbHRoCi0tLS0tLS0tLS0tLQoKSWYgYSBiYWNrZW5k IGhhcyBmYWxsZW4gdG9vIGZhciBiZWhpbmQgKGxhZyA+PSBRVUVVRV9DTEVBTlVQX0RFTEFZ CnBhZ2VzKSwgaXQgaXMgc2lnbmFsZWQgdG8gY2F0Y2ggdXAgc28gdGhlIGdsb2JhbCBxdWV1 ZSB0YWlsIGNhbiBhZHZhbmNlLgoKT3RoZXIgbm90ZXMKLS0tLS0tLS0tLS0KCiogUmVwbGFj ZXMgdGhlIHBlci1iYWNrZW5kIGxpc3RlbkNoYW5uZWxzIGxpc3Qgd2l0aCB0aGUgc2hhcmVk CiAgY2hhbm5lbEhhc2guIEEgc2ltcGxlIG51bUNoYW5uZWxzTGlzdGVuaW5nT24gY291bnRl ciBkZXRlcm1pbmVzCiAgd2hldGhlciB0aGUgYmFja2VuZCByZW1haW5zIHJlZ2lzdGVyZWQg aW4gdGhlIGdsb2JhbCBsaXN0ZW5lciBsaXN0LgoqIHBnX2xpc3RlbmluZ19jaGFubmVscyBh bmQgSXNMaXN0ZW5pbmdPbiBub3cgcmVhZCBmcm9tIGNoYW5uZWxIYXNoLgoqIEFkZHMgTFdM b2NrIHRyYW5jaGUgTk9USUZZX0NIQU5ORUxfSEFTSCBhbmQgd2FpdCBldmVudAogIE5vdGlm eUNoYW5uZWxIYXNoIGZvciB2aXNpYmlsaXR5LgoqIE5vIHVzZXItdmlzaWJsZSBiZWhhdmlv cmFsIGNoYW5nZXM7IHRoaXMgaXMgYW4gaW50ZXJuYWwgb3B0aW1pemF0aW9uCiAgb25seS4K LS0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy9hc3luYy5jICAgICAgICAgICAgICAgICAgfCA2 NDUgKysrKysrKysrKysrKysrLS0tCiAuLi4vdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudF9u YW1lcy50eHQgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvc3RvcmFnZS9sd2xvY2tsaXN0 LmggICAgICAgICAgICAgIHwgICAxICsKIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0ICAgICAgICAgICAgICB8ICAgMiArCiA0IGZpbGVzIGNoYW5nZWQsIDU1OSBpbnNlcnRp b25zKCspLCA5MCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21t YW5kcy9hc3luYy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYwppbmRleCA0YmQz N2Q1YmViNS4uMDhhYzE5ZmEzY2IgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2FzeW5jLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYwpAQCAtMjQsOCAr MjQsMTAgQEAKICAqCSAgQWxsIG5vdGlmaWNhdGlvbiBtZXNzYWdlcyBhcmUgcGxhY2VkIGlu IHRoZSBxdWV1ZSBhbmQgbGF0ZXIgcmVhZCBvdXQKICAqCSAgYnkgbGlzdGVuaW5nIGJhY2tl bmRzLgogICoKLSAqCSAgVGhlcmUgaXMgbm8gY2VudHJhbCBrbm93bGVkZ2Ugb2Ygd2hpY2gg YmFja2VuZCBsaXN0ZW5zIG9uIHdoaWNoIGNoYW5uZWw7Ci0gKgkgIGV2ZXJ5IGJhY2tlbmQg aGFzIGl0cyBvd24gbGlzdCBvZiBpbnRlcmVzdGluZyBjaGFubmVscy4KKyAqCSAgV2UgYWxz byBtYWludGFpbiBhIGR5bmFtaWMgc2hhcmVkIGhhc2ggdGFibGUgKGRzaGFzaCkgdGhhdCBt YXBzIGNoYW5uZWwKKyAqCSAgbmFtZXMgdG8gdGhlIHNldCBvZiBiYWNrZW5kcyBsaXN0ZW5p bmcgb24gZWFjaCBjaGFubmVsLiBUaGlzIHRhYmxlIGlzCisgKgkgIGNyZWF0ZWQgbGF6aWx5 IG9uIHRoZSBmaXJzdCBMSVNURU4gY29tbWFuZCBhbmQgZ3Jvd3MgZHluYW1pY2FsbHkgYXMK KyAqCSAgbmVlZGVkLgogICoKICAqCSAgQWx0aG91Z2ggdGhlcmUgaXMgb25seSBvbmUgcXVl dWUsIG5vdGlmaWNhdGlvbnMgYXJlIHRyZWF0ZWQgYXMgYmVpbmcKICAqCSAgZGF0YWJhc2Ut bG9jYWw7IHRoaXMgaXMgZG9uZSBieSBpbmNsdWRpbmcgdGhlIHNlbmRlcidzIGRhdGFiYXNl IE9JRApAQCAtNjgsMTYgKzcwLDI3IEBACiAgKgkgIENvbW1pdFRyYW5zYWN0aW9uKCkgd2hp Y2ggd2lsbCB0aGVuIGRvIHRoZSBhY3R1YWwgdHJhbnNhY3Rpb24gY29tbWl0LgogICoKICAq CSAgQWZ0ZXIgY29tbWl0IHdlIGFyZSBjYWxsZWQgYW5vdGhlciB0aW1lIChBdENvbW1pdF9O b3RpZnkoKSkuIEhlcmUgd2UKLSAqCSAgbWFrZSBhbnkgYWN0dWFsIHVwZGF0ZXMgdG8gdGhl IGVmZmVjdGl2ZSBsaXN0ZW4gc3RhdGUgKGxpc3RlbkNoYW5uZWxzKS4KKyAqCSAgbWFrZSBh bnkgYWN0dWFsIHVwZGF0ZXMgdG8gdGhlIGVmZmVjdGl2ZSBsaXN0ZW4gc3RhdGUgKGNoYW5u ZWxIYXNoKS4KICAqCSAgVGhlbiB3ZSBzaWduYWwgYW55IGJhY2tlbmRzIHRoYXQgbWF5IGJl IGludGVyZXN0ZWQgaW4gb3VyIG1lc3NhZ2VzCiAgKgkgIChpbmNsdWRpbmcgb3VyIG93biBi YWNrZW5kLCBpZiBsaXN0ZW5pbmcpLiAgVGhpcyBpcyBkb25lIGJ5Ci0gKgkgIFNpZ25hbEJh Y2tlbmRzKCksIHdoaWNoIHNjYW5zIHRoZSBsaXN0IG9mIGxpc3RlbmluZyBiYWNrZW5kcyBh bmQgc2VuZHMgYQotICoJICBQUk9DU0lHX05PVElGWV9JTlRFUlJVUFQgc2lnbmFsIHRvIGV2 ZXJ5IGxpc3RlbmluZyBiYWNrZW5kICh3ZSBkb24ndAotICoJICBrbm93IHdoaWNoIGJhY2tl bmQgaXMgbGlzdGVuaW5nIG9uIHdoaWNoIGNoYW5uZWwgc28gd2UgbXVzdCBzaWduYWwgdGhl bQotICoJICBhbGwpLiAgV2UgY2FuIGV4Y2x1ZGUgYmFja2VuZHMgdGhhdCBhcmUgYWxyZWFk eSB1cCB0byBkYXRlLCB0aG91Z2gsIGFuZAotICoJICB3ZSBjYW4gYWxzbyBleGNsdWRlIGJh Y2tlbmRzIHRoYXQgYXJlIGluIG90aGVyIGRhdGFiYXNlcyAodW5sZXNzIHRoZXkKLSAqCSAg YXJlIHdheSBiZWhpbmQgYW5kIHNob3VsZCBiZSBraWNrZWQgdG8gbWFrZSB0aGVtIGFkdmFu Y2UgdGhlaXIKLSAqCSAgcG9pbnRlcnMpLgorICoJICBTaWduYWxCYWNrZW5kcygpLCB3aGlj aCBjb25zdWx0cyB0aGUgc2hhcmVkIGNoYW5uZWwgaGFzaCB0YWJsZSB0bworICoJICBpZGVu dGlmeSBsaXN0ZW5lcnMgZm9yIHRoZSBjaGFubmVscyB0aGF0IGhhdmUgcGVuZGluZyBub3Rp ZmljYXRpb25zCisgKgkgIGluIHRoZSBjdXJyZW50IGRhdGFiYXNlLiAgRWFjaCBzZWxlY3Rl ZCBiYWNrZW5kIGlzIG1hcmtlZCBhcyBoYXZpbmcgYQorICoJICB3YWtldXAgcGVuZGluZyB0 byBhdm9pZCBkdXBsaWNhdGUgc2lnbmFscywgYW5kIGEgUFJPQ1NJR19OT1RJRllfSU5URVJS VVBUCisgKgkgIHNpZ25hbCBpcyBzZW50IHRvIGl0LgorICoKKyAqCSAgV2hlbiB3cml0aW5n IG5vdGlmaWNhdGlvbnMsIFByZUNvbW1pdF9Ob3RpZnkoKSByZWNvcmRzIHRoZSBxdWV1ZSBo ZWFkCisgKgkgIHBvc2l0aW9uIGJvdGggYmVmb3JlIGFuZCBhZnRlciB0aGUgd3JpdGUuICBC ZWNhdXNlIGFsbCB3cml0ZXJzIHNlcmlhbGl6ZQorICoJICBvbiBhIGNsdXN0ZXItd2lkZSBo ZWF2eXdlaWdodCBsb2NrLCBubyBiYWNrZW5kIGNhbiBpbnNlcnQgZW50cmllcyBiZXR3ZWVu CisgKgkgIHRoZXNlIHR3byBwb2ludHMuICBTaWduYWxCYWNrZW5kcygpIHVzZXMgdGhpcyBm YWN0IHRvIGRpcmVjdGx5IGFkdmFuY2UgYW55CisgKgkgIGJhY2tlbmQgdGhhdCBpcyBzdGls bCBwb3NpdGlvbmVkIGF0IHRoZSBvbGQgaGVhZCwgYXZvaWRpbmcgdW5uZWNlc3NhcnkKKyAq CSAgd2FrZXVwcyBmb3IgaWRsZSBsaXN0ZW5lcnMgdGhhdCBoYXZlIG5vdGhpbmcgdG8gcmVh ZC4KKyAqCisgKgkgIFRvIG1haW50YWluIHF1ZXVlIGhlYWx0aCwgU2lnbmFsQmFja2VuZHMo KSBhbHNvIHdha2VzIG9uZSBiYWNrZW5kCisgKgkgIHBvc2l0aW9uZWQgYXQgdGhlIGdsb2Jh bCBxdWV1ZSB0YWlsIHRvIGhlbHAgYWR2YW5jZSBpdCwgYW5kIHNpZ25hbHMKKyAqCSAgYW55 IGJhY2tlbmQgdGhhdCBoYXMgZmFsbGVuIHRvbyBmYXIgYmVoaW5kIHRvIGNhdGNoIHVwLiAg VGhlc2UgbWVhc3VyZXMKKyAqCSAgcHJldmVudCB0aGUgbm90aWZpY2F0aW9uIHF1ZXVlIGZy b20gZ3Jvd2luZyBpbmRlZmluaXRlbHksIHdoaWxlIG1vc3RseQorICoJICBsaW1pdGluZyB3 YWtldXBzIHRvIHRoZSBiYWNrZW5kcyB0aGF0IGFjdHVhbGx5IG5lZWQgdGhlbS4KICAqCiAg KgkgIEZpbmFsbHksIGFmdGVyIHdlIGFyZSBvdXQgb2YgdGhlIHRyYW5zYWN0aW9uIGFsdG9n ZXRoZXIgYW5kIGFib3V0IHRvIGdvCiAgKgkgIGlkbGUsIHdlIHNjYW4gdGhlIHF1ZXVlIGZv ciBtZXNzYWdlcyB0aGF0IG5lZWQgdG8gYmUgc2VudCB0byBvdXIKQEAgLTEyOCw2ICsxNDEs NyBAQAogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1 ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgogCiAjaW5jbHVkZSAiYWNjZXNz L3BhcmFsbGVsLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3NscnUuaCIKQEAgLTEzNywxNCArMTUx LDE3IEBACiAjaW5jbHVkZSAiY29tbWFuZHMvYXN5bmMuaCIKICNpbmNsdWRlICJjb21tb24v aGFzaGZuLmgiCiAjaW5jbHVkZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUgImxpYi9kc2hhc2gu aCIKICNpbmNsdWRlICJsaWJwcS9saWJwcS5oIgogI2luY2x1ZGUgImxpYnBxL3BxZm9ybWF0 LmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAic3RvcmFnZS9kc21fcmVn aXN0cnkuaCIKICNpbmNsdWRlICJzdG9yYWdlL2lwYy5oIgogI2luY2x1ZGUgInN0b3JhZ2Uv bG1nci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY3NpZ25hbC5oIgogI2luY2x1ZGUgInRj b3AvdGNvcHByb3QuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUg InV0aWxzL2RzYS5oIgogI2luY2x1ZGUgInV0aWxzL2d1Y19ob29rcy5oIgogI2luY2x1ZGUg InV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVkZSAidXRpbHMvcHNfc3RhdHVzLmgiCkBAIC0x NjIsNiArMTc5LDI5IEBACiAgKi8KICNkZWZpbmUgTk9USUZZX1BBWUxPQURfTUFYX0xFTkdU SAkoQkxDS1NaIC0gTkFNRURBVEFMRU4gLSAxMjgpCiAKKy8qCisgKiBDaGFubmVsIGhhc2gg dGFibGUgZGVmaW5pdGlvbnMKKyAqCisgKiBUaGlzIGhhc2ggdGFibGUgbWFwcyAoZGF0YWJh c2UgT0lELCBjaGFubmVsIG5hbWUpIGtleXMgdG8gYXJyYXlzIG9mCisgKiBQcm9jTnVtYmVy cyByZXByZXNlbnRpbmcgdGhlIGJhY2tlbmRzIGxpc3RlbmluZyBvbiBlYWNoIGNoYW5uZWwu CisgKi8KKworI2RlZmluZSBJTklUSUFMX0xJU1RFTkVSU19BUlJBWV9TSVpFIDQKKwordHlw ZWRlZiBzdHJ1Y3QgQ2hhbm5lbEhhc2hLZXkKK3sKKwlPaWQJCQlkYm9pZDsKKwljaGFyCQlj aGFubmVsW05BTUVEQVRBTEVOXTsKK30gQ2hhbm5lbEhhc2hLZXk7CisKK3R5cGVkZWYgc3Ry dWN0IENoYW5uZWxFbnRyeQoreworCUNoYW5uZWxIYXNoS2V5IGtleTsKKwlkc2FfcG9pbnRl ciBsaXN0ZW5lcnNBcnJheTsgLyogRFNBIHBvaW50ZXIgdG8gUHJvY051bWJlciBhcnJheSAq LworCWludAkJCW51bUxpc3RlbmVyczsJLyogTnVtYmVyIG9mIGxpc3RlbmVycyBjdXJyZW50 bHkgc3RvcmVkICovCisJaW50CQkJYWxsb2NhdGVkTGlzdGVuZXJzOyAvKiBBbGxvY2F0ZWQg c2l6ZSBvZiBhcnJheSAqLworfSBDaGFubmVsRW50cnk7CisKIC8qCiAgKiBTdHJ1Y3QgcmVw cmVzZW50aW5nIGFuIGVudHJ5IGluIHRoZSBnbG9iYWwgbm90aWZ5IHF1ZXVlCiAgKgpAQCAt MjI3LDggKzI2Nyw4IEBAIHR5cGVkZWYgc3RydWN0IFF1ZXVlUG9zaXRpb24KIC8qCiAgKiBQ YXJhbWV0ZXIgZGV0ZXJtaW5pbmcgaG93IG9mdGVuIHdlIHRyeSB0byBhZHZhbmNlIHRoZSB0 YWlsIHBvaW50ZXI6CiAgKiB3ZSBkbyB0aGF0IGFmdGVyIGV2ZXJ5IFFVRVVFX0NMRUFOVVBf REVMQVkgcGFnZXMgb2YgTk9USUZZIGRhdGEuICBUaGlzIGlzCi0gKiBhbHNvIHRoZSBkaXN0 YW5jZSBieSB3aGljaCBhIGJhY2tlbmQgaW4gYW5vdGhlciBkYXRhYmFzZSBuZWVkcyB0byBi ZQotICogYmVoaW5kIGJlZm9yZSB3ZSdsbCBkZWNpZGUgd2UgbmVlZCB0byB3YWtlIGl0IHVw IHRvIGFkdmFuY2UgaXRzIHBvaW50ZXIuCisgKiBhbHNvIHRoZSBkaXN0YW5jZSBieSB3aGlj aCBhIGJhY2tlbmQgbmVlZHMgdG8gYmUgYmVoaW5kIGJlZm9yZSB3ZSdsbAorICogZGVjaWRl IHdlIG5lZWQgdG8gd2FrZSBpdCB1cCB0byBhZHZhbmNlIGl0cyBwb2ludGVyLgogICoKICAq IFJlc2lzdCB0aGUgdGVtcHRhdGlvbiB0byBtYWtlIHRoaXMgcmVhbGx5IGxhcmdlLiAgV2hp bGUgdGhhdCB3b3VsZCBzYXZlCiAgKiB3b3JrIGluIHNvbWUgcGxhY2VzLCBpdCB3b3VsZCBh ZGQgY29zdCBpbiBvdGhlcnMuICBJbiBwYXJ0aWN1bGFyLCB0aGlzCkBAIC0yNDYsNiArMjg2 LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUXVldWVCYWNrZW5kU3RhdHVzCiAJT2lkCQkJZGJvaWQ7 CQkJLyogYmFja2VuZCdzIGRhdGFiYXNlIE9JRCwgb3IgSW52YWxpZE9pZCAqLwogCVByb2NO dW1iZXIJbmV4dExpc3RlbmVyOwkvKiBpZCBvZiBuZXh0IGxpc3RlbmVyLCBvciBJTlZBTElE X1BST0NfTlVNQkVSICovCiAJUXVldWVQb3NpdGlvbiBwb3M7CQkJLyogYmFja2VuZCBoYXMg cmVhZCBxdWV1ZSB1cCB0byBoZXJlICovCisJYm9vbAkJd2FrZXVwUGVuZGluZzsJLyogc2ln bmFsIHNlbnQgYnV0IG5vdCB5ZXQgcHJvY2Vzc2VkICovCiB9IFF1ZXVlQmFja2VuZFN0YXR1 czsKIAogLyoKQEAgLTI4OCwxMSArMzI5LDkxIEBAIHR5cGVkZWYgc3RydWN0IEFzeW5jUXVl dWVDb250cm9sCiAJUHJvY051bWJlcglmaXJzdExpc3RlbmVyOwkvKiBpZCBvZiBmaXJzdCBs aXN0ZW5lciwgb3IKIAkJCQkJCQkJICogSU5WQUxJRF9QUk9DX05VTUJFUiAqLwogCVRpbWVz dGFtcFR6IGxhc3RRdWV1ZUZpbGxXYXJuOwkvKiB0aW1lIG9mIGxhc3QgcXVldWUtZnVsbCBt c2cgKi8KKwlkc2FfaGFuZGxlCWNoYW5uZWxIYXNoRFNBOworCWRzaGFzaF90YWJsZV9oYW5k bGUgY2hhbm5lbEhhc2hEU0g7CiAJUXVldWVCYWNrZW5kU3RhdHVzIGJhY2tlbmRbRkxFWElC TEVfQVJSQVlfTUVNQkVSXTsKIH0gQXN5bmNRdWV1ZUNvbnRyb2w7CiAKIHN0YXRpYyBBc3lu Y1F1ZXVlQ29udHJvbCAqYXN5bmNRdWV1ZUNvbnRyb2w7CiAKK3N0YXRpYyBkc2FfYXJlYSAq Y2hhbm5lbERTQSA9IE5VTEw7CitzdGF0aWMgZHNoYXNoX3RhYmxlICpjaGFubmVsSGFzaCA9 IE5VTEw7CitzdGF0aWMgZHNoYXNoX2hhc2ggY2hhbm5lbEhhc2hGdW5jKGNvbnN0IHZvaWQg KmtleSwgc2l6ZV90IHNpemUsIHZvaWQgKmFyZyk7CisKKy8qIHBhcmFtZXRlcnMgZm9yIHRo ZSBjaGFubmVsIGhhc2ggdGFibGUgKi8KK3N0YXRpYyBjb25zdCBkc2hhc2hfcGFyYW1ldGVy cyBjaGFubmVsRFNIUGFyYW1zID0geworCXNpemVvZihDaGFubmVsSGFzaEtleSksCisJc2l6 ZW9mKENoYW5uZWxFbnRyeSksCisJZHNoYXNoX21lbWNtcCwKKwljaGFubmVsSGFzaEZ1bmMs CisJZHNoYXNoX21lbWNweSwKKwlMV1RSQU5DSEVfTk9USUZZX0NIQU5ORUxfSEFTSAorfTsK KworLyoKKyAqIGNoYW5uZWxIYXNoRnVuYworICoJCUhhc2ggZnVuY3Rpb24gZm9yIGNoYW5u ZWwga2V5cy4KKyAqLworc3RhdGljIGRzaGFzaF9oYXNoCitjaGFubmVsSGFzaEZ1bmMoY29u c3Qgdm9pZCAqa2V5LCBzaXplX3Qgc2l6ZSwgdm9pZCAqYXJnKQoreworCWNvbnN0IENoYW5u ZWxIYXNoS2V5ICprID0gKGNvbnN0IENoYW5uZWxIYXNoS2V5ICopIGtleTsKKwlkc2hhc2hf aGFzaCBoOworCisJaCA9IERhdHVtR2V0VUludDMyKGhhc2hfdWludDMyKGstPmRib2lkKSk7 CisJaCBePSBEYXR1bUdldFVJbnQzMihoYXNoX2FueSgoY29uc3QgdW5zaWduZWQgY2hhciAq KSBrLT5jaGFubmVsLAorCQkJCQkJCQkgc3RybmxlbihrLT5jaGFubmVsLCBOQU1FREFUQUxF TikpKTsKKworCXJldHVybiBoOworfQorCisvKgorICogaW5pdENoYW5uZWxIYXNoCisgKgkJ TGF6eSBpbml0aWFsaXphdGlvbiBvZiB0aGUgY2hhbm5lbCBoYXNoIHRhYmxlLgorICovCitz dGF0aWMgdm9pZAoraW5pdENoYW5uZWxIYXNoKHZvaWQpCit7CisJTWVtb3J5Q29udGV4dCBv bGRjb250ZXh0OworCisJLyogUXVpY2sgZXhpdCBpZiB3ZSBhbHJlYWR5IGRpZCB0aGlzICov CisJaWYgKGFzeW5jUXVldWVDb250cm9sLT5jaGFubmVsSGFzaERTSCAhPSBEU0hBU0hfSEFO RExFX0lOVkFMSUQgJiYKKwkJY2hhbm5lbEhhc2ggIT0gTlVMTCkKKwkJcmV0dXJuOworCisJ LyogT3RoZXJ3aXNlLCB1c2UgYSBsb2NrIHRvIGVuc3VyZSBvbmx5IG9uZSBwcm9jZXNzIGNy ZWF0ZXMgdGhlIHRhYmxlICovCisJTFdMb2NrQWNxdWlyZShOb3RpZnlRdWV1ZUxvY2ssIExX X0VYQ0xVU0lWRSk7CisKKwkvKiBCZSBzdXJlIGFueSBsb2NhbCBtZW1vcnkgYWxsb2NhdGVk IGJ5IERTQSByb3V0aW5lcyBpcyBwZXJzaXN0ZW50ICovCisJb2xkY29udGV4dCA9IE1lbW9y eUNvbnRleHRTd2l0Y2hUbyhUb3BNZW1vcnlDb250ZXh0KTsKKworCWlmIChhc3luY1F1ZXVl Q29udHJvbC0+Y2hhbm5lbEhhc2hEU0ggPT0gRFNIQVNIX0hBTkRMRV9JTlZBTElEKQorCXsK KwkJLyogSW5pdGlhbGl6ZSBkeW5hbWljIHNoYXJlZCBoYXNoIHRhYmxlIGZvciBjaGFubmVs IGhhc2ggKi8KKwkJY2hhbm5lbERTQSA9IGRzYV9jcmVhdGUoTFdUUkFOQ0hFX05PVElGWV9D SEFOTkVMX0hBU0gpOworCQlkc2FfcGluKGNoYW5uZWxEU0EpOworCQlkc2FfcGluX21hcHBp bmcoY2hhbm5lbERTQSk7CisJCWNoYW5uZWxIYXNoID0gZHNoYXNoX2NyZWF0ZShjaGFubmVs RFNBLCAmY2hhbm5lbERTSFBhcmFtcywgTlVMTCk7CisKKwkJLyogU3RvcmUgaGFuZGxlcyBp biBzaGFyZWQgbWVtb3J5IGZvciBvdGhlciBiYWNrZW5kcyB0byB1c2UgKi8KKwkJYXN5bmNR dWV1ZUNvbnRyb2wtPmNoYW5uZWxIYXNoRFNBID0gZHNhX2dldF9oYW5kbGUoY2hhbm5lbERT QSk7CisJCWFzeW5jUXVldWVDb250cm9sLT5jaGFubmVsSGFzaERTSCA9CisJCQlkc2hhc2hf Z2V0X2hhc2hfdGFibGVfaGFuZGxlKGNoYW5uZWxIYXNoKTsKKwl9CisJZWxzZSBpZiAoIWNo YW5uZWxIYXNoKQorCXsKKwkJLyogQXR0YWNoIHRvIGV4aXN0aW5nIGR5bmFtaWMgc2hhcmVk IGhhc2ggdGFibGUgKi8KKwkJY2hhbm5lbERTQSA9IGRzYV9hdHRhY2goYXN5bmNRdWV1ZUNv bnRyb2wtPmNoYW5uZWxIYXNoRFNBKTsKKwkJZHNhX3Bpbl9tYXBwaW5nKGNoYW5uZWxEU0Ep OworCQljaGFubmVsSGFzaCA9IGRzaGFzaF9hdHRhY2goY2hhbm5lbERTQSwgJmNoYW5uZWxE U0hQYXJhbXMsCisJCQkJCQkJCQlhc3luY1F1ZXVlQ29udHJvbC0+Y2hhbm5lbEhhc2hEU0gs CisJCQkJCQkJCQlOVUxMKTsKKwl9CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29u dGV4dCk7CisJTFdMb2NrUmVsZWFzZShOb3RpZnlRdWV1ZUxvY2spOworfQorCiAjZGVmaW5l IFFVRVVFX0hFQUQJCQkJCShhc3luY1F1ZXVlQ29udHJvbC0+aGVhZCkKICNkZWZpbmUgUVVF VUVfVEFJTAkJCQkJKGFzeW5jUXVldWVDb250cm9sLT50YWlsKQogI2RlZmluZSBRVUVVRV9T VE9QX1BBR0UJCQkJKGFzeW5jUXVldWVDb250cm9sLT5zdG9wUGFnZSkKQEAgLTMwMSw2ICs0 MjIsNyBAQCBzdGF0aWMgQXN5bmNRdWV1ZUNvbnRyb2wgKmFzeW5jUXVldWVDb250cm9sOwog I2RlZmluZSBRVUVVRV9CQUNLRU5EX0RCT0lEKGkpCQkoYXN5bmNRdWV1ZUNvbnRyb2wtPmJh Y2tlbmRbaV0uZGJvaWQpCiAjZGVmaW5lIFFVRVVFX05FWFRfTElTVEVORVIoaSkJCShhc3lu Y1F1ZXVlQ29udHJvbC0+YmFja2VuZFtpXS5uZXh0TGlzdGVuZXIpCiAjZGVmaW5lIFFVRVVF X0JBQ0tFTkRfUE9TKGkpCQkoYXN5bmNRdWV1ZUNvbnRyb2wtPmJhY2tlbmRbaV0ucG9zKQor I2RlZmluZSBRVUVVRV9CQUNLRU5EX1dBS0VVUF9QRU5ESU5HKGkpCShhc3luY1F1ZXVlQ29u dHJvbC0+YmFja2VuZFtpXS53YWtldXBQZW5kaW5nKQogCiAvKgogICogVGhlIFNMUlUgYnVm ZmVyIGFyZWEgdGhyb3VnaCB3aGljaCB3ZSBhY2Nlc3MgdGhlIG5vdGlmaWNhdGlvbiBxdWV1 ZQpAQCAtMzEyLDE3ICs0MzQsMTEgQEAgc3RhdGljIFNscnVDdGxEYXRhIE5vdGlmeUN0bERh dGE7CiAKICNkZWZpbmUgUVVFVUVfRlVMTF9XQVJOX0lOVEVSVkFMCTUwMDAJLyogd2FybiBh dCBtb3N0IG9uY2UgZXZlcnkgNXMgKi8KIAotLyoKLSAqIGxpc3RlbkNoYW5uZWxzIGlkZW50 aWZpZXMgdGhlIGNoYW5uZWxzIHdlIGFyZSBhY3R1YWxseSBsaXN0ZW5pbmcgdG8KLSAqIChp ZSwgaGF2ZSBjb21taXR0ZWQgYSBMSVNURU4gb24pLiAgSXQgaXMgYSBzaW1wbGUgbGlzdCBv ZiBjaGFubmVsIG5hbWVzLAotICogYWxsb2NhdGVkIGluIFRvcE1lbW9yeUNvbnRleHQuCi0g Ki8KLXN0YXRpYyBMaXN0ICpsaXN0ZW5DaGFubmVscyA9IE5JTDsJLyogbGlzdCBvZiBDIHN0 cmluZ3MgKi8KLQogLyoKICAqIFN0YXRlIGZvciBwZW5kaW5nIExJU1RFTi9VTkxJU1RFTiBh Y3Rpb25zIGNvbnNpc3RzIG9mIGFuIG9yZGVyZWQgbGlzdCBvZgogICogYWxsIGFjdGlvbnMg cmVxdWVzdGVkIGluIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLiAgQXMgZXhwbGFpbmVkIGFi b3ZlLAotICogd2UgZG9uJ3QgYWN0dWFsbHkgY2hhbmdlIGxpc3RlbkNoYW5uZWxzIHVudGls IHdlIHJlYWNoIHRyYW5zYWN0aW9uIGNvbW1pdC4KKyAqIHdlIGRvbid0IGFjdHVhbGx5IGNo YW5nZSB0aGUgc2hhcmVkIGNoYW5uZWxIYXNoIHVudGlsIHdlIHJlYWNoIHRyYW5zYWN0aW9u CisgKiBjb21taXQuCiAgKgogICogVGhlIGxpc3QgaXMga2VwdCBpbiBDdXJUcmFuc2FjdGlv bkNvbnRleHQuICBJbiBzdWJ0cmFuc2FjdGlvbnMsIGVhY2gKICAqIHN1YnRyYW5zYWN0aW9u IGhhcyBpdHMgb3duIGxpc3QgaW4gaXRzIG93biBDdXJUcmFuc2FjdGlvbkNvbnRleHQsIGJ1 dApAQCAtMzkxLDYgKzUwNyw4IEBAIHR5cGVkZWYgc3RydWN0IE5vdGlmaWNhdGlvbkxpc3QK IAlpbnQJCQluZXN0aW5nTGV2ZWw7CS8qIGN1cnJlbnQgdHJhbnNhY3Rpb24gbmVzdGluZyBk ZXB0aCAqLwogCUxpc3QJICAgKmV2ZW50czsJCQkvKiBsaXN0IG9mIE5vdGlmaWNhdGlvbiBz dHJ1Y3RzICovCiAJSFRBQgkgICAqaGFzaHRhYjsJCS8qIGhhc2ggb2YgTm90aWZpY2F0aW9u SGFzaCBzdHJ1Y3RzLCBvciBOVUxMICovCisJUXVldWVQb3NpdGlvbiBxdWV1ZUhlYWRCZWZv cmVXcml0ZTsgLyogUVVFVUVfSEVBRCBiZWZvcmUgd3JpdGluZyBub3RpZmllcyAqLworCVF1 ZXVlUG9zaXRpb24gcXVldWVIZWFkQWZ0ZXJXcml0ZTsJLyogUVVFVUVfSEVBRCBhZnRlciB3 cml0aW5nIG5vdGlmaWVzICovCiAJc3RydWN0IE5vdGlmaWNhdGlvbkxpc3QgKnVwcGVyOyAv KiBkZXRhaWxzIGZvciB1cHBlciB0cmFuc2FjdGlvbiBsZXZlbHMgKi8KIH0gTm90aWZpY2F0 aW9uTGlzdDsKIApAQCAtNDE4LDYgKzUzNiw5IEBAIHN0YXRpYyBib29sIHVubGlzdGVuRXhp dFJlZ2lzdGVyZWQgPSBmYWxzZTsKIC8qIFRydWUgaWYgd2UncmUgY3VycmVudGx5IHJlZ2lz dGVyZWQgYXMgYSBsaXN0ZW5lciBpbiBhc3luY1F1ZXVlQ29udHJvbCAqLwogc3RhdGljIGJv b2wgYW1SZWdpc3RlcmVkTGlzdGVuZXIgPSBmYWxzZTsKIAorLyogQ291bnQgb2YgY2hhbm5l bHMgd2UncmUgY3VycmVudGx5IGxpc3RlbmluZyBvbiAqLworc3RhdGljIGludAludW1DaGFu bmVsc0xpc3RlbmluZ09uID0gMDsKKwogLyogaGF2ZSB3ZSBhZHZhbmNlZCB0byBhIHBhZ2Ug dGhhdCdzIGEgbXVsdGlwbGUgb2YgUVVFVUVfQ0xFQU5VUF9ERUxBWT8gKi8KIHN0YXRpYyBi b29sIHRyeUFkdmFuY2VUYWlsID0gZmFsc2U7CiAKQEAgLTQ1Nyw2ICs1NzgsOCBAQCBzdGF0 aWMgdm9pZCBBZGRFdmVudFRvUGVuZGluZ05vdGlmaWVzKE5vdGlmaWNhdGlvbiAqbik7CiBz dGF0aWMgdWludDMyIG5vdGlmaWNhdGlvbl9oYXNoKGNvbnN0IHZvaWQgKmtleSwgU2l6ZSBr ZXlzaXplKTsKIHN0YXRpYyBpbnQJbm90aWZpY2F0aW9uX21hdGNoKGNvbnN0IHZvaWQgKmtl eTEsIGNvbnN0IHZvaWQgKmtleTIsIFNpemUga2V5c2l6ZSk7CiBzdGF0aWMgdm9pZCBDbGVh clBlbmRpbmdBY3Rpb25zQW5kTm90aWZpZXModm9pZCk7CitzdGF0aWMgaW5saW5lIHZvaWQg Q2hhbm5lbEhhc2hQcmVwYXJlS2V5KENoYW5uZWxIYXNoS2V5ICprZXksIE9pZCBkYm9pZCwg Y29uc3QgY2hhciAqY2hhbm5lbCk7CitzdGF0aWMgTGlzdCAqR2V0UGVuZGluZ05vdGlmeUNo YW5uZWxzKHZvaWQpOwogCiAvKgogICogQ29tcHV0ZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVu IHR3byBxdWV1ZSBwYWdlIG51bWJlcnMuCkBAIC01MjEsMTIgKzY0NCwxNiBAQCBBc3luY1No bWVtSW5pdCh2b2lkKQogCQlRVUVVRV9TVE9QX1BBR0UgPSAwOwogCQlRVUVVRV9GSVJTVF9M SVNURU5FUiA9IElOVkFMSURfUFJPQ19OVU1CRVI7CiAJCWFzeW5jUXVldWVDb250cm9sLT5s YXN0UXVldWVGaWxsV2FybiA9IDA7CisJCWFzeW5jUXVldWVDb250cm9sLT5jaGFubmVsSGFz aERTQSA9IERTQV9IQU5ETEVfSU5WQUxJRDsKKwkJYXN5bmNRdWV1ZUNvbnRyb2wtPmNoYW5u ZWxIYXNoRFNIID0gRFNIQVNIX0hBTkRMRV9JTlZBTElEOworCiAJCWZvciAoaW50IGkgPSAw OyBpIDwgTWF4QmFja2VuZHM7IGkrKykKIAkJewogCQkJUVVFVUVfQkFDS0VORF9QSUQoaSkg PSBJbnZhbGlkUGlkOwogCQkJUVVFVUVfQkFDS0VORF9EQk9JRChpKSA9IEludmFsaWRPaWQ7 CiAJCQlRVUVVRV9ORVhUX0xJU1RFTkVSKGkpID0gSU5WQUxJRF9QUk9DX05VTUJFUjsKIAkJ CVNFVF9RVUVVRV9QT1MoUVVFVUVfQkFDS0VORF9QT1MoaSksIDAsIDApOworCQkJUVVFVUVf QkFDS0VORF9XQUtFVVBfUEVORElORyhpKSA9IGZhbHNlOwogCQl9CiAJfQogCkBAIC02ODMs NyArODEwLDcgQEAgQXN5bmNfTm90aWZ5KGNvbnN0IGNoYXIgKmNoYW5uZWwsIGNvbnN0IGNo YXIgKnBheWxvYWQpCiAgKgkJQ29tbW9uIGNvZGUgZm9yIGxpc3RlbiwgdW5saXN0ZW4sIHVu bGlzdGVuIGFsbCBjb21tYW5kcy4KICAqCiAgKgkJQWRkcyB0aGUgcmVxdWVzdCB0byB0aGUg bGlzdCBvZiBwZW5kaW5nIGFjdGlvbnMuCi0gKgkJQWN0dWFsIHVwZGF0ZSBvZiB0aGUgbGlz dGVuQ2hhbm5lbHMgbGlzdCBoYXBwZW5zIGR1cmluZyB0cmFuc2FjdGlvbgorICoJCUFjdHVh bCB1cGRhdGUgb2YgdGhlIHNoYXJlZCBjaGFubmVsSGFzaCBoYXBwZW5zIGR1cmluZyB0cmFu c2FjdGlvbgogICoJCWNvbW1pdC4KICAqLwogc3RhdGljIHZvaWQKQEAgLTc4MiwyNCArOTA5 LDYwIEBAIEFzeW5jX1VubGlzdGVuQWxsKHZvaWQpCiAvKgogICogU1FMIGZ1bmN0aW9uOiBy ZXR1cm4gYSBzZXQgb2YgdGhlIGNoYW5uZWwgbmFtZXMgdGhpcyBiYWNrZW5kIGlzIGFjdGl2 ZWx5CiAgKiBsaXN0ZW5pbmcgdG8uCi0gKgotICogTm90ZTogdGhpcyBjb2RpbmcgcmVsaWVz IG9uIHRoZSBmYWN0IHRoYXQgdGhlIGxpc3RlbkNoYW5uZWxzIGxpc3QgY2Fubm90Ci0gKiBj aGFuZ2Ugd2l0aGluIGEgdHJhbnNhY3Rpb24uCiAgKi8KIERhdHVtCiBwZ19saXN0ZW5pbmdf Y2hhbm5lbHMoUEdfRlVOQ1RJT05fQVJHUykKIHsKIAlGdW5jQ2FsbENvbnRleHQgKmZ1bmNj dHg7CisJTGlzdAkgICAqbGlzdGVuQ2hhbm5lbHM7CiAKIAkvKiBzdHVmZiBkb25lIG9ubHkg b24gdGhlIGZpcnN0IGNhbGwgb2YgdGhlIGZ1bmN0aW9uICovCiAJaWYgKFNSRl9JU19GSVJT VENBTEwoKSkKIAl7CisJCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKwkJZHNoYXNoX3Nl cV9zdGF0dXMgc3RhdHVzOworCQlDaGFubmVsRW50cnkgKmVudHJ5OworCiAJCS8qIGNyZWF0 ZSBhIGZ1bmN0aW9uIGNvbnRleHQgZm9yIGNyb3NzLWNhbGwgcGVyc2lzdGVuY2UgKi8KIAkJ ZnVuY2N0eCA9IFNSRl9GSVJTVENBTExfSU5JVCgpOworCisJCS8qIGdldCBjaGFubmVscyBm cm9tIGNoYW5uZWxIYXNoIGFuZCBzdG9yZSBpbiBmdW5jdGlvbiBjb250ZXh0ICovCisJCW9s ZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oZnVuY2N0eC0+bXVsdGlfY2FsbF9t ZW1vcnlfY3R4KTsKKworCQlsaXN0ZW5DaGFubmVscyA9IE5JTDsKKworCQlpZiAoY2hhbm5l bEhhc2ggIT0gTlVMTCkKKwkJeworCQkJZHNoYXNoX3NlcV9pbml0KCZzdGF0dXMsIGNoYW5u ZWxIYXNoLCBmYWxzZSk7CisJCQl3aGlsZSAoKGVudHJ5ID0gZHNoYXNoX3NlcV9uZXh0KCZz dGF0dXMpKSAhPSBOVUxMKQorCQkJeworCQkJCWlmIChlbnRyeS0+a2V5LmRib2lkID09IE15 RGF0YWJhc2VJZCkKKwkJCQl7CisJCQkJCVByb2NOdW1iZXIgKmxpc3RlbmVyczsKKworCQkJ CQlsaXN0ZW5lcnMgPSAoUHJvY051bWJlciAqKSBkc2FfZ2V0X2FkZHJlc3MoY2hhbm5lbERT QSwKKwkJCQkJCQkJCQkJCQkJCSAgIGVudHJ5LT5saXN0ZW5lcnNBcnJheSk7CisKKwkJCQkJ Zm9yIChpbnQgaSA9IDA7IGkgPCBlbnRyeS0+bnVtTGlzdGVuZXJzOyBpKyspCisJCQkJCXsK KwkJCQkJCWlmIChsaXN0ZW5lcnNbaV0gPT0gTXlQcm9jTnVtYmVyKQorCQkJCQkJeworCQkJ CQkJCWxpc3RlbkNoYW5uZWxzID0gbGFwcGVuZChsaXN0ZW5DaGFubmVscywgcHN0cmR1cChl bnRyeS0+a2V5LmNoYW5uZWwpKTsKKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJfQor CQkJCX0KKwkJCX0KKwkJCWRzaGFzaF9zZXFfdGVybSgmc3RhdHVzKTsKKwkJfQorCisJCWZ1 bmNjdHgtPnVzZXJfZmN0eCA9IGxpc3RlbkNoYW5uZWxzOworCQlNZW1vcnlDb250ZXh0U3dp dGNoVG8ob2xkY29udGV4dCk7CiAJfQogCiAJLyogc3R1ZmYgZG9uZSBvbiBldmVyeSBjYWxs IG9mIHRoZSBmdW5jdGlvbiAqLwogCWZ1bmNjdHggPSBTUkZfUEVSQ0FMTF9TRVRVUCgpOwor CWxpc3RlbkNoYW5uZWxzID0gKExpc3QgKikgZnVuY2N0eC0+dXNlcl9mY3R4OwogCiAJaWYg KGZ1bmNjdHgtPmNhbGxfY250ciA8IGxpc3RfbGVuZ3RoKGxpc3RlbkNoYW5uZWxzKSkKIAl7 CkBAIC04OTQsNiArMTA1Nyw3IEBAIFByZUNvbW1pdF9Ob3RpZnkodm9pZCkKIAlpZiAocGVu ZGluZ05vdGlmaWVzKQogCXsKIAkJTGlzdENlbGwgICAqbmV4dE5vdGlmeTsKKwkJYm9vbAkJ Zmlyc3RJdGVyYXRpb24gPSB0cnVlOwogCiAJCS8qCiAJCSAqIE1ha2Ugc3VyZSB0aGF0IHdl IGhhdmUgYW4gWElEIGFzc2lnbmVkIHRvIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLgpAQCAt OTIyLDYgKzEwODYsOSBAQCBQcmVDb21taXRfTm90aWZ5KHZvaWQpCiAJCUxvY2tTaGFyZWRP YmplY3QoRGF0YWJhc2VSZWxhdGlvbklkLCBJbnZhbGlkT2lkLCAwLAogCQkJCQkJIEFjY2Vz c0V4Y2x1c2l2ZUxvY2spOwogCisJCS8qIEluaXRpYWxpemUgcXVldWVIZWFkQmVmb3JlV3Jp dGUgdG8gYSBzYWZlIGRlZmF1bHQgKi8KKwkJU0VUX1FVRVVFX1BPUyhwZW5kaW5nTm90aWZp ZXMtPnF1ZXVlSGVhZEJlZm9yZVdyaXRlLCAwLCAwKTsKKwogCQkvKiBOb3cgcHVzaCB0aGUg bm90aWZpY2F0aW9ucyBpbnRvIHRoZSBxdWV1ZSAqLwogCQluZXh0Tm90aWZ5ID0gbGlzdF9o ZWFkKHBlbmRpbmdOb3RpZmllcy0+ZXZlbnRzKTsKIAkJd2hpbGUgKG5leHROb3RpZnkgIT0g TlVMTCkKQEAgLTkzOSw2ICsxMTA2LDE5IEBAIFByZUNvbW1pdF9Ob3RpZnkodm9pZCkKIAkJ CSAqIHBvaW50IGluIHRpbWUgd2UgY2FuIHN0aWxsIHJvbGwgdGhlIHRyYW5zYWN0aW9uIGJh Y2suCiAJCQkgKi8KIAkJCUxXTG9ja0FjcXVpcmUoTm90aWZ5UXVldWVMb2NrLCBMV19FWENM VVNJVkUpOworCisJCQkvKgorCQkJICogT24gdGhlIGZpcnN0IGl0ZXJhdGlvbiwgc2F2ZSB0 aGUgcXVldWUgaGVhZCBwb3NpdGlvbiBiZWZvcmUgd2UKKwkJCSAqIHdyaXRlIGFueSBub3Rp ZmljYXRpb25zLiAgVGhpcyBpcyB1c2VkIGJ5IFNpZ25hbEJhY2tlbmRzKCkgdG8KKwkJCSAq IGlkZW50aWZ5IGJhY2tlbmRzIHRoYXQgY2FuIGJlIGFkdmFuY2VkIGRpcmVjdGx5IHdpdGhv dXQgd2FraW5nCisJCQkgKiB0aGVtIHVwLgorCQkJICovCisJCQlpZiAoZmlyc3RJdGVyYXRp b24pCisJCQl7CisJCQkJcGVuZGluZ05vdGlmaWVzLT5xdWV1ZUhlYWRCZWZvcmVXcml0ZSA9 IFFVRVVFX0hFQUQ7CisJCQkJZmlyc3RJdGVyYXRpb24gPSBmYWxzZTsKKwkJCX0KKwogCQkJ YXN5bmNRdWV1ZUZpbGxXYXJuaW5nKCk7CiAJCQlpZiAoYXN5bmNRdWV1ZUlzRnVsbCgpKQog CQkJCWVyZXBvcnQoRVJST1IsCkBAIC05NDgsNiArMTEyOCwxOCBAQCBQcmVDb21taXRfTm90 aWZ5KHZvaWQpCiAJCQlMV0xvY2tSZWxlYXNlKE5vdGlmeVF1ZXVlTG9jayk7CiAJCX0KIAor CQkvKgorCQkgKiBTYXZlIHRoZSBxdWV1ZSBoZWFkIGFmdGVyIHdyaXRpbmcgYWxsIG91ciBu b3RpZmljYXRpb25zLiAgVGhpcyBpcworCQkgKiB1c2VkIGJ5IFNpZ25hbEJhY2tlbmRzKCkg dG8ga25vdyB3aGVyZSB0byBhZHZhbmNlIGlkbGUgYmFja2VuZHMgdG8uCisJCSAqIFdlIG11 c3Qgc2F2ZSB0aGlzIG5vdyBiZWNhdXNlIG90aGVyIGJhY2tlbmRzIG1heSB3cml0ZSB0aGVp ciBvd24KKwkJICogbm90aWZpY2F0aW9ucyBhZnRlciB3ZSByZWxlYXNlIHRoZSBoZWF2eXdl aWdodCBsb2NrIGJ1dCBiZWZvcmUgd2UKKwkJICogY2FsbCBTaWduYWxCYWNrZW5kcygpLCBh bmQgd2UgbXVzdCBub3QgYWR2YW5jZSBiYWNrZW5kcyBvdmVyIHRob3NlCisJCSAqIG90aGVy IG5vdGlmaWNhdGlvbnMuCisJCSAqLworCQlMV0xvY2tBY3F1aXJlKE5vdGlmeVF1ZXVlTG9j aywgTFdfU0hBUkVEKTsKKwkJcGVuZGluZ05vdGlmaWVzLT5xdWV1ZUhlYWRBZnRlcldyaXRl ID0gUVVFVUVfSEVBRDsKKwkJTFdMb2NrUmVsZWFzZShOb3RpZnlRdWV1ZUxvY2spOworCiAJ CS8qIE5vdGUgdGhhdCB3ZSBkb24ndCBjbGVhciBwZW5kaW5nTm90aWZpZXM7IEF0Q29tbWl0 X05vdGlmeSB3aWxsLiAqLwogCX0KIH0KQEAgLTk1Nyw3ICsxMTQ5LDcgQEAgUHJlQ29tbWl0 X05vdGlmeSh2b2lkKQogICoKICAqCQlUaGlzIGlzIGNhbGxlZCBhdCB0cmFuc2FjdGlvbiBj b21taXQsIGFmdGVyIGNvbW1pdHRpbmcgdG8gY2xvZy4KICAqCi0gKgkJVXBkYXRlIGxpc3Rl bkNoYW5uZWxzIGFuZCBjbGVhciB0cmFuc2FjdGlvbi1sb2NhbCBzdGF0ZS4KKyAqCQlVcGRh dGUgY2hhbm5lbEhhc2ggYW5kIGNsZWFyIHRyYW5zYWN0aW9uLWxvY2FsIHN0YXRlLgogICoK ICAqCQlJZiB3ZSBpc3N1ZWQgYW55IG5vdGlmaWNhdGlvbnMgaW4gdGhlIHRyYW5zYWN0aW9u LCBzZW5kIHNpZ25hbHMgdG8KICAqCQlsaXN0ZW5pbmcgYmFja2VuZHMgKHBvc3NpYmx5IGlu Y2x1ZGluZyBvdXJzZWx2ZXMpIHRvIHByb2Nlc3MgdGhlbS4KQEAgLTEwMDIsNyArMTE5NCw3 IEBAIEF0Q29tbWl0X05vdGlmeSh2b2lkKQogCX0KIAogCS8qIElmIG5vIGxvbmdlciBsaXN0 ZW5pbmcgdG8gYW55dGhpbmcsIGdldCBvdXQgb2YgbGlzdGVuZXIgYXJyYXkgKi8KLQlpZiAo YW1SZWdpc3RlcmVkTGlzdGVuZXIgJiYgbGlzdGVuQ2hhbm5lbHMgPT0gTklMKQorCWlmIChh bVJlZ2lzdGVyZWRMaXN0ZW5lciAmJiBudW1DaGFubmVsc0xpc3RlbmluZ09uID09IDApCiAJ CWFzeW5jUXVldWVVbnJlZ2lzdGVyKCk7CiAKIAkvKgpAQCAtMTEzMCw1NSArMTMyMiwxMzEg QEAgRXhlY19MaXN0ZW5QcmVDb21taXQodm9pZCkKIC8qCiAgKiBFeGVjX0xpc3RlbkNvbW1p dCAtLS0gc3Vicm91dGluZSBmb3IgQXRDb21taXRfTm90aWZ5CiAgKgotICogQWRkIHRoZSBj aGFubmVsIHRvIHRoZSBsaXN0IG9mIGNoYW5uZWxzIHdlIGFyZSBsaXN0ZW5pbmcgb24uCisg KiBBZGQgdGhlIGNoYW5uZWwgdG8gdGhlIHNoYXJlZCBjaGFubmVsSGFzaC4KICAqLwogc3Rh dGljIHZvaWQKIEV4ZWNfTGlzdGVuQ29tbWl0KGNvbnN0IGNoYXIgKmNoYW5uZWwpCiB7Ci0J TWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCUNoYW5uZWxIYXNoS2V5IGtleTsKKwlDaGFu bmVsRW50cnkgKmVudHJ5OworCWJvb2wJCWZvdW5kOworCVByb2NOdW1iZXIgKmxpc3RlbmVy czsKIAotCS8qIERvIG5vdGhpbmcgaWYgd2UgYXJlIGFscmVhZHkgbGlzdGVuaW5nIG9uIHRo aXMgY2hhbm5lbCAqLwotCWlmIChJc0xpc3RlbmluZ09uKGNoYW5uZWwpKQotCQlyZXR1cm47 CisJaW5pdENoYW5uZWxIYXNoKCk7CisKKwlDaGFubmVsSGFzaFByZXBhcmVLZXkoJmtleSwg TXlEYXRhYmFzZUlkLCBjaGFubmVsKTsKIAogCS8qCi0JICogQWRkIHRoZSBuZXcgY2hhbm5l bCBuYW1lIHRvIGxpc3RlbkNoYW5uZWxzLgotCSAqCi0JICogWFhYIEl0IGlzIHRoZW9yZXRp Y2FsbHkgcG9zc2libGUgdG8gZ2V0IGFuIG91dC1vZi1tZW1vcnkgZmFpbHVyZSBoZXJlLAot CSAqIHdoaWNoIHdvdWxkIGJlIGJhZCBiZWNhdXNlIHdlIGFscmVhZHkgY29tbWl0dGVkLiAg Rm9yIHRoZSBtb21lbnQgaXQKLQkgKiBkb2Vzbid0IHNlZW0gd29ydGggdHJ5aW5nIHRvIGd1 YXJkIGFnYWluc3QgdGhhdCwgYnV0IG1heWJlIGltcHJvdmUgdGhpcwotCSAqIGxhdGVyLgor CSAqIEZvciBuZXcgZW50cmllcywgd2UgaW5pdGlhbGl6ZSBsaXN0ZW5lcnNBcnJheSB0byBJ bnZhbGlkRHNhUG9pbnRlciBhcyBhCisJICogbWFya2VyLiBUaGlzIGhhbmRsZXMgYm90aCB0 aGUgaW5pdGlhbCBjcmVhdGlvbiBhbmQgcG90ZW50aWFsIHJldHJ5CisJICogYWZ0ZXIgT09N LgogCSAqLwotCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oVG9wTWVtb3J5 Q29udGV4dCk7Ci0JbGlzdGVuQ2hhbm5lbHMgPSBsYXBwZW5kKGxpc3RlbkNoYW5uZWxzLCBw c3RyZHVwKGNoYW5uZWwpKTsKLQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7 CisJZW50cnkgPSBkc2hhc2hfZmluZF9vcl9pbnNlcnQoY2hhbm5lbEhhc2gsICZrZXksICZm b3VuZCk7CisKKwlpZiAoIWZvdW5kKQorCQllbnRyeS0+bGlzdGVuZXJzQXJyYXkgPSBJbnZh bGlkRHNhUG9pbnRlcjsKKworCWlmICghRHNhUG9pbnRlcklzVmFsaWQoZW50cnktPmxpc3Rl bmVyc0FycmF5KSkKKwl7CisJCS8qIEZpcnN0IGxpc3RlbmVyIGZvciB0aGlzIGNoYW5uZWwg Ki8KKwkJZW50cnktPmxpc3RlbmVyc0FycmF5ID0gZHNhX2FsbG9jYXRlKGNoYW5uZWxEU0Es CisJCQkJCQkJCQkJCSBzaXplb2YoUHJvY051bWJlcikgKiBJTklUSUFMX0xJU1RFTkVSU19B UlJBWV9TSVpFKTsKKwkJZW50cnktPm51bUxpc3RlbmVycyA9IDA7CisJCWVudHJ5LT5hbGxv Y2F0ZWRMaXN0ZW5lcnMgPSBJTklUSUFMX0xJU1RFTkVSU19BUlJBWV9TSVpFOworCX0KKwor CWxpc3RlbmVycyA9IChQcm9jTnVtYmVyICopIGRzYV9nZXRfYWRkcmVzcyhjaGFubmVsRFNB LAorCQkJCQkJCQkJCQkgICBlbnRyeS0+bGlzdGVuZXJzQXJyYXkpOworCisJZm9yIChpbnQg aSA9IDA7IGkgPCBlbnRyeS0+bnVtTGlzdGVuZXJzOyBpKyspCisJeworCQlpZiAobGlzdGVu ZXJzW2ldID09IE15UHJvY051bWJlcikKKwkJeworCQkJZHNoYXNoX3JlbGVhc2VfbG9jayhj aGFubmVsSGFzaCwgZW50cnkpOworCQkJcmV0dXJuOwkJCQkvKiBBbHJlYWR5IHJlZ2lzdGVy ZWQgKi8KKwkJfQorCX0KKworCWlmIChlbnRyeS0+bnVtTGlzdGVuZXJzID49IGVudHJ5LT5h bGxvY2F0ZWRMaXN0ZW5lcnMpCisJeworCQlpbnQJCQluZXdfc2l6ZSA9IGVudHJ5LT5hbGxv Y2F0ZWRMaXN0ZW5lcnMgKiAyOworCQlkc2FfcG9pbnRlciBuZXdfYXJyYXkgPSBkc2FfYWxs b2NhdGUoY2hhbm5lbERTQSwKKwkJCQkJCQkJCQkJIHNpemVvZihQcm9jTnVtYmVyKSAqIG5l d19zaXplKTsKKwkJUHJvY051bWJlciAqbmV3X2xpc3RlbmVycyA9IChQcm9jTnVtYmVyICop IGRzYV9nZXRfYWRkcmVzcyhjaGFubmVsRFNBLAorCQkJCQkJCQkJCQkJCQkJCSAgIG5ld19h cnJheSk7CisKKwkJbWVtY3B5KG5ld19saXN0ZW5lcnMsIGxpc3RlbmVycywKKwkJCSAgIHNp emVvZihQcm9jTnVtYmVyKSAqIGVudHJ5LT5udW1MaXN0ZW5lcnMpOworCisJCWRzYV9mcmVl KGNoYW5uZWxEU0EsIGVudHJ5LT5saXN0ZW5lcnNBcnJheSk7CisJCWVudHJ5LT5saXN0ZW5l cnNBcnJheSA9IG5ld19hcnJheTsKKwkJZW50cnktPmFsbG9jYXRlZExpc3RlbmVycyA9IG5l d19zaXplOworCQlsaXN0ZW5lcnMgPSBuZXdfbGlzdGVuZXJzOworCX0KKworCWxpc3RlbmVy c1tlbnRyeS0+bnVtTGlzdGVuZXJzXSA9IE15UHJvY051bWJlcjsKKwllbnRyeS0+bnVtTGlz dGVuZXJzKys7CisJbnVtQ2hhbm5lbHNMaXN0ZW5pbmdPbisrOworCisJZHNoYXNoX3JlbGVh c2VfbG9jayhjaGFubmVsSGFzaCwgZW50cnkpOwogfQogCiAvKgogICogRXhlY19Vbmxpc3Rl bkNvbW1pdCAtLS0gc3Vicm91dGluZSBmb3IgQXRDb21taXRfTm90aWZ5CiAgKgotICogUmVt b3ZlIHRoZSBzcGVjaWZpZWQgY2hhbm5lbCBuYW1lIGZyb20gbGlzdGVuQ2hhbm5lbHMuCisg KiBSZW1vdmUgdGhlIHNwZWNpZmllZCBjaGFubmVsIGZyb20gY2hhbm5lbEhhc2guCiAgKi8K IHN0YXRpYyB2b2lkCiBFeGVjX1VubGlzdGVuQ29tbWl0KGNvbnN0IGNoYXIgKmNoYW5uZWwp CiB7Ci0JTGlzdENlbGwgICAqcTsKKwlDaGFubmVsSGFzaEtleSBrZXk7CisJQ2hhbm5lbEVu dHJ5ICplbnRyeTsKKwlQcm9jTnVtYmVyICpsaXN0ZW5lcnM7CisJaW50CQkJaTsKIAogCWlm IChUcmFjZV9ub3RpZnkpCiAJCWVsb2coREVCVUcxLCAiRXhlY19Vbmxpc3RlbkNvbW1pdCgl cywlZCkiLCBjaGFubmVsLCBNeVByb2NQaWQpOwogCi0JZm9yZWFjaChxLCBsaXN0ZW5DaGFu bmVscykKKwlpZiAoY2hhbm5lbEhhc2ggPT0gTlVMTCkKKwkJcmV0dXJuOworCisJQ2hhbm5l bEhhc2hQcmVwYXJlS2V5KCZrZXksIE15RGF0YWJhc2VJZCwgY2hhbm5lbCk7CisKKwkvKiBM b29rIHVwIHRoZSBjaGFubmVsIHdpdGggZXhjbHVzaXZlIGxvY2sgc28gd2UgY2FuIG1vZGlm eSBpdCAqLworCWVudHJ5ID0gZHNoYXNoX2ZpbmQoY2hhbm5lbEhhc2gsICZrZXksIHRydWUp OworCWlmIChlbnRyeSA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlsaXN0ZW5lcnMgPSAoUHJv Y051bWJlciAqKSBkc2FfZ2V0X2FkZHJlc3MoY2hhbm5lbERTQSwKKwkJCQkJCQkJCQkJICAg ZW50cnktPmxpc3RlbmVyc0FycmF5KTsKKworCWZvciAoaSA9IDA7IGkgPCBlbnRyeS0+bnVt TGlzdGVuZXJzOyBpKyspCiAJewotCQljaGFyCSAgICpsY2hhbiA9IChjaGFyICopIGxmaXJz dChxKTsKLQotCQlpZiAoc3RyY21wKGxjaGFuLCBjaGFubmVsKSA9PSAwKQorCQlpZiAobGlz dGVuZXJzW2ldID09IE15UHJvY051bWJlcikKIAkJewotCQkJbGlzdGVuQ2hhbm5lbHMgPSBm b3JlYWNoX2RlbGV0ZV9jdXJyZW50KGxpc3RlbkNoYW5uZWxzLCBxKTsKLQkJCXBmcmVlKGxj aGFuKTsKLQkJCWJyZWFrOworCQkJZW50cnktPm51bUxpc3RlbmVycy0tOworCQkJaWYgKGkg PCBlbnRyeS0+bnVtTGlzdGVuZXJzKQorCQkJCW1lbW1vdmUoJmxpc3RlbmVyc1tpXSwgJmxp c3RlbmVyc1tpICsgMV0sCisJCQkJCQlzaXplb2YoUHJvY051bWJlcikgKiAoZW50cnktPm51 bUxpc3RlbmVycyAtIGkpKTsKKworCQkJaWYgKGVudHJ5LT5udW1MaXN0ZW5lcnMgPT0gMCkK KwkJCXsKKwkJCQkvKiBMYXN0IGxpc3RlbmVyIGZvciB0aGlzIGNoYW5uZWwgKi8KKwkJCQlk c2FfZnJlZShjaGFubmVsRFNBLCBlbnRyeS0+bGlzdGVuZXJzQXJyYXkpOworCQkJCWRzaGFz aF9kZWxldGVfZW50cnkoY2hhbm5lbEhhc2gsIGVudHJ5KTsKKwkJCX0KKwkJCWVsc2UKKwkJ CXsKKwkJCQlkc2hhc2hfcmVsZWFzZV9sb2NrKGNoYW5uZWxIYXNoLCBlbnRyeSk7CisJCQl9 CisKKwkJCW51bUNoYW5uZWxzTGlzdGVuaW5nT24tLTsKKwkJCXJldHVybjsKIAkJfQogCX0K IAorCWRzaGFzaF9yZWxlYXNlX2xvY2soY2hhbm5lbEhhc2gsIGVudHJ5KTsKKwogCS8qCiAJ ICogV2UgZG8gbm90IGNvbXBsYWluIGFib3V0IHVubGlzdGVuaW5nIHNvbWV0aGluZyBub3Qg YmVpbmcgbGlzdGVuZWQ7CiAJICogc2hvdWxkIHdlPwpAQCAtMTE5MywzMyArMTQ2MSw4NCBA QCBFeGVjX1VubGlzdGVuQ29tbWl0KGNvbnN0IGNoYXIgKmNoYW5uZWwpCiBzdGF0aWMgdm9p ZAogRXhlY19Vbmxpc3RlbkFsbENvbW1pdCh2b2lkKQogeworCWRzaGFzaF9zZXFfc3RhdHVz IHN0YXR1czsKKwlDaGFubmVsRW50cnkgKmVudHJ5OworCiAJaWYgKFRyYWNlX25vdGlmeSkK IAkJZWxvZyhERUJVRzEsICJFeGVjX1VubGlzdGVuQWxsQ29tbWl0KCVkKSIsIE15UHJvY1Bp ZCk7CiAKLQlsaXN0X2ZyZWVfZGVlcChsaXN0ZW5DaGFubmVscyk7Ci0JbGlzdGVuQ2hhbm5l bHMgPSBOSUw7CisJaWYgKGNoYW5uZWxIYXNoID09IE5VTEwpCisJCXJldHVybjsKKworCWRz aGFzaF9zZXFfaW5pdCgmc3RhdHVzLCBjaGFubmVsSGFzaCwgdHJ1ZSk7CisJd2hpbGUgKChl bnRyeSA9IGRzaGFzaF9zZXFfbmV4dCgmc3RhdHVzKSkgIT0gTlVMTCkKKwl7CisJCWlmIChl bnRyeS0+a2V5LmRib2lkID09IE15RGF0YWJhc2VJZCkKKwkJeworCQkJUHJvY051bWJlciAq bGlzdGVuZXJzOworCQkJaW50CQkJaTsKKworCQkJbGlzdGVuZXJzID0gKFByb2NOdW1iZXIg KikgZHNhX2dldF9hZGRyZXNzKGNoYW5uZWxEU0EsCisJCQkJCQkJCQkJCQkJICAgZW50cnkt Pmxpc3RlbmVyc0FycmF5KTsKKworCQkJZm9yIChpID0gMDsgaSA8IGVudHJ5LT5udW1MaXN0 ZW5lcnM7IGkrKykKKwkJCXsKKwkJCQlpZiAobGlzdGVuZXJzW2ldID09IE15UHJvY051bWJl cikKKwkJCQl7CisJCQkJCWVudHJ5LT5udW1MaXN0ZW5lcnMtLTsKKwkJCQkJaWYgKGkgPCBl bnRyeS0+bnVtTGlzdGVuZXJzKQorCQkJCQkJbWVtbW92ZSgmbGlzdGVuZXJzW2ldLCAmbGlz dGVuZXJzW2kgKyAxXSwKKwkJCQkJCQkJc2l6ZW9mKFByb2NOdW1iZXIpICogKGVudHJ5LT5u dW1MaXN0ZW5lcnMgLSBpKSk7CisKKwkJCQkJaWYgKGVudHJ5LT5udW1MaXN0ZW5lcnMgPT0g MCkKKwkJCQkJeworCQkJCQkJZHNhX2ZyZWUoY2hhbm5lbERTQSwgZW50cnktPmxpc3RlbmVy c0FycmF5KTsKKwkJCQkJCWRzaGFzaF9kZWxldGVfY3VycmVudCgmc3RhdHVzKTsKKwkJCQkJ fQorCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJZHNoYXNoX3NlcV90ZXJt KCZzdGF0dXMpOworCW51bUNoYW5uZWxzTGlzdGVuaW5nT24gPSAwOwogfQogCiAvKgogICog VGVzdCB3aGV0aGVyIHdlIGFyZSBhY3RpdmVseSBsaXN0ZW5pbmcgb24gdGhlIGdpdmVuIGNo YW5uZWwgbmFtZS4KICAqCiAgKiBOb3RlOiB0aGlzIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGZv ciBldmVyeSBub3RpZmljYXRpb24gZm91bmQgaW4gdGhlIHF1ZXVlLgotICogUGVyaGFwcyBp dCBpcyB3b3J0aCBmdXJ0aGVyIG9wdGltaXphdGlvbiwgZWcgY29udmVydCB0aGUgbGlzdCB0 byBhIHNvcnRlZAotICogYXJyYXkgc28gd2UgY2FuIGJpbmFyeS1zZWFyY2ggaXQuICBJbiBw cmFjdGljZSB0aGUgbGlzdCBpcyBsaWtlbHkgdG8gYmUKLSAqIGZhaXJseSBzaG9ydCwgdGhv dWdoLgorICogUGVyaGFwcyBpdCBpcyB3b3J0aCBmdXJ0aGVyIG9wdGltaXphdGlvbiwgZWcg Y29udmVydCB0aGUgbGlzdGVuZXJzIGFycmF5CisgKiB0byBhIHNvcnRlZCBhcnJheSBzbyB3 ZSBjYW4gYmluYXJ5LXNlYXJjaCBpdC4KICAqLwogc3RhdGljIGJvb2wKIElzTGlzdGVuaW5n T24oY29uc3QgY2hhciAqY2hhbm5lbCkKIHsKLQlMaXN0Q2VsbCAgICpwOworCUNoYW5uZWxI YXNoS2V5IGtleTsKKwlDaGFubmVsRW50cnkgKmVudHJ5OworCVByb2NOdW1iZXIgKmxpc3Rl bmVyczsKIAotCWZvcmVhY2gocCwgbGlzdGVuQ2hhbm5lbHMpCisJaW5pdENoYW5uZWxIYXNo KCk7CisKKwlDaGFubmVsSGFzaFByZXBhcmVLZXkoJmtleSwgTXlEYXRhYmFzZUlkLCBjaGFu bmVsKTsKKworCWVudHJ5ID0gZHNoYXNoX2ZpbmQoY2hhbm5lbEhhc2gsICZrZXksIGZhbHNl KTsKKwlpZiAoZW50cnkgPT0gTlVMTCkKKwkJcmV0dXJuIGZhbHNlOwkJCS8qIE5vIGxpc3Rl bmVycyByZWdpc3RlcmVkIGZvciB0aGlzIGNoYW5uZWwgKi8KKworCWxpc3RlbmVycyA9IChQ cm9jTnVtYmVyICopIGRzYV9nZXRfYWRkcmVzcyhjaGFubmVsRFNBLAorCQkJCQkJCQkJCQkg ICBlbnRyeS0+bGlzdGVuZXJzQXJyYXkpOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBlbnRy eS0+bnVtTGlzdGVuZXJzOyBpKyspCiAJewotCQljaGFyCSAgICpsY2hhbiA9IChjaGFyICop IGxmaXJzdChwKTsKLQotCQlpZiAoc3RyY21wKGxjaGFuLCBjaGFubmVsKSA9PSAwKQorCQlp ZiAobGlzdGVuZXJzW2ldID09IE15UHJvY051bWJlcikKKwkJeworCQkJZHNoYXNoX3JlbGVh c2VfbG9jayhjaGFubmVsSGFzaCwgZW50cnkpOwogCQkJcmV0dXJuIHRydWU7CisJCX0KIAl9 CisKKwlkc2hhc2hfcmVsZWFzZV9sb2NrKGNoYW5uZWxIYXNoLCBlbnRyeSk7CiAJcmV0dXJu IGZhbHNlOwogfQogCkBAIC0xMjMwLDcgKzE1NDksNyBAQCBJc0xpc3RlbmluZ09uKGNvbnN0 IGNoYXIgKmNoYW5uZWwpCiBzdGF0aWMgdm9pZAogYXN5bmNRdWV1ZVVucmVnaXN0ZXIodm9p ZCkKIHsKLQlBc3NlcnQobGlzdGVuQ2hhbm5lbHMgPT0gTklMKTsJLyogZWxzZSBjYWxsZXIg ZXJyb3IgKi8KKwlBc3NlcnQobnVtQ2hhbm5lbHNMaXN0ZW5pbmdPbiA9PSAwKTsJLyogZWxz ZSBjYWxsZXIgZXJyb3IgKi8KIAogCWlmICghYW1SZWdpc3RlcmVkTGlzdGVuZXIpCS8qIG5v dGhpbmcgdG8gZG8gKi8KIAkJcmV0dXJuOwpAQCAtMTU2NSwxMiArMTg4NCwxOSBAQCBhc3lu Y1F1ZXVlRmlsbFdhcm5pbmcodm9pZCkKIC8qCiAgKiBTZW5kIHNpZ25hbHMgdG8gbGlzdGVu aW5nIGJhY2tlbmRzLgogICoKLSAqIE5vcm1hbGx5IHdlIHNpZ25hbCBvbmx5IGJhY2tlbmRz IGluIG91ciBvd24gZGF0YWJhc2UsIHNpbmNlIG9ubHkgdGhvc2UKLSAqIGJhY2tlbmRzIGNv dWxkIGJlIGludGVyZXN0ZWQgaW4gbm90aWZpZXMgd2Ugc2VuZC4gIEhvd2V2ZXIsIGlmIHRo ZXJlJ3MKLSAqIG5vdGlmeSB0cmFmZmljIGluIG91ciBkYXRhYmFzZSBidXQgbm8gdHJhZmZp YyBpbiBhbm90aGVyIGRhdGFiYXNlIHRoYXQKLSAqIGRvZXMgaGF2ZSBsaXN0ZW5lcihzKSwg dGhvc2UgbGlzdGVuZXJzIHdpbGwgZmFsbCBmdXJ0aGVyIGFuZCBmdXJ0aGVyCi0gKiBiZWhp bmQuICBXYWtlbiB0aGVtIGFueXdheSBpZiB0aGV5J3JlIGZhciBlbm91Z2ggYmVoaW5kLCBz byB0aGF0IHRoZXknbGwKLSAqIGFkdmFuY2UgdGhlaXIgcXVldWUgcG9zaXRpb24gcG9pbnRl cnMsIGFsbG93aW5nIHRoZSBnbG9iYWwgdGFpbCB0byBhZHZhbmNlLgorICogTm9ybWFsbHkg d2Ugc2lnbmFsIG9ubHkgYmFja2VuZHMgaW4gb3VyIG93biBkYXRhYmFzZSwgdGhhdCBhcmUK KyAqIGxpc3RlbmluZyBvbiB0aGUgY2hhbm5lbHMgd2l0aCBwZW5kaW5nIG5vdGlmaWVzLCBz aW5jZSBvbmx5IHRob3NlCisgKiBiYWNrZW5kcyBhcmUgaW50ZXJlc3RlZCBpbiBub3RpZmll cyB3ZSBzZW5kLgorICoKKyAqIEJhY2tlbmRzIHRoYXQgYXJlIHN0aWxsIHBvc2l0aW9uZWQg YXQgdGhlIHF1ZXVlIGhlYWQgZnJvbSBiZWZvcmUgb3VyCisgKiBjb21taXQgY2FuIGJlIHNh ZmVseSBhZHZhbmNlZCBkaXJlY3RseSB0byB0aGUgbmV3IGhlYWQsIHNpbmNlIHRoZQorICog cXVldWUgcmVnaW9uIHdlIHdyb3RlIGlzIGtub3duIHRvIGNvbnRhaW4gb25seSBvdXIgb3du IG5vdGlmaWNhdGlvbnMuCisgKiBUaGlzIGF2b2lkcyB1bm5lY2Vzc2FyeSB3YWtldXBzIHdo ZW4gdGhlcmUgaXMgbm90aGluZyBvZiBpbnRlcmVzdCB0bworICogdGhlbS4KKyAqCisgKiBJ biBhZGRpdGlvbiwgaWYgYSBiYWNrZW5kIGhhcyBmYWxsZW4gdG9vIGZhciBiZWhpbmQgaW4g dGhlIHF1ZXVlLCB3ZQorICogc2lnbmFsIGl0IHNvIHRoYXQgaXQgd2lsbCBhZHZhbmNlIGl0 cyBwb3NpdGlvbiBhbmQgYWxsb3cgdGhlIGdsb2JhbAorICogdGFpbCBwb2ludGVyIHRvIG1v dmUgZm9yd2FyZC4KICAqCiAgKiBTaW5jZSB3ZSBrbm93IHRoZSBQcm9jTnVtYmVyIGFuZCB0 aGUgUGlkIHRoZSBzaWduYWxpbmcgaXMgcXVpdGUgY2hlYXAuCiAgKgpAQCAtMTU4Myw2ICsx OTA5LDkgQEAgU2lnbmFsQmFja2VuZHModm9pZCkKIAlpbnQzMgkgICAqcGlkczsKIAlQcm9j TnVtYmVyICpwcm9jbm9zOwogCWludAkJCWNvdW50OworCUxpc3QJICAgKmNoYW5uZWxzOwor CUxpc3RDZWxsICAgKmxjOworCWludDY0CQlxdWV1ZV9sZW5ndGg7CiAKIAkvKgogCSAqIElk ZW50aWZ5IGJhY2tlbmRzIHRoYXQgd2UgbmVlZCB0byBzaWduYWwuICBXZSBkb24ndCB3YW50 IHRvIHNlbmQKQEAgLTE1OTYsMzcgKzE5MjUsMTIwIEBAIFNpZ25hbEJhY2tlbmRzKHZvaWQp CiAJcHJvY25vcyA9IChQcm9jTnVtYmVyICopIHBhbGxvYyhNYXhCYWNrZW5kcyAqIHNpemVv ZihQcm9jTnVtYmVyKSk7CiAJY291bnQgPSAwOwogCisJY2hhbm5lbHMgPSBHZXRQZW5kaW5n Tm90aWZ5Q2hhbm5lbHMoKTsKKwogCUxXTG9ja0FjcXVpcmUoTm90aWZ5UXVldWVMb2NrLCBM V19FWENMVVNJVkUpOwotCWZvciAoUHJvY051bWJlciBpID0gUVVFVUVfRklSU1RfTElTVEVO RVI7IGkgIT0gSU5WQUxJRF9QUk9DX05VTUJFUjsgaSA9IFFVRVVFX05FWFRfTElTVEVORVIo aSkpCisJZm9yZWFjaChsYywgY2hhbm5lbHMpCiAJewotCQlpbnQzMgkJcGlkID0gUVVFVUVf QkFDS0VORF9QSUQoaSk7Ci0JCVF1ZXVlUG9zaXRpb24gcG9zOworCQljaGFyCSAgICpjaGFu bmVsID0gKGNoYXIgKikgbGZpcnN0KGxjKTsKKwkJQ2hhbm5lbEVudHJ5ICplbnRyeSA9IE5V TEw7CisJCVByb2NOdW1iZXIgKmxpc3RlbmVyczsKIAotCQlBc3NlcnQocGlkICE9IEludmFs aWRQaWQpOwotCQlwb3MgPSBRVUVVRV9CQUNLRU5EX1BPUyhpKTsKLQkJaWYgKFFVRVVFX0JB Q0tFTkRfREJPSUQoaSkgPT0gTXlEYXRhYmFzZUlkKQorCQlpZiAoY2hhbm5lbEhhc2ggIT0g TlVMTCkKIAkJewotCQkJLyoKLQkJCSAqIEFsd2F5cyBzaWduYWwgbGlzdGVuZXJzIGluIG91 ciBvd24gZGF0YWJhc2UsIHVubGVzcyB0aGV5J3JlCi0JCQkgKiBhbHJlYWR5IGNhdWdodCB1 cCAodW5saWtlbHksIGJ1dCBwb3NzaWJsZSkuCi0JCQkgKi8KKwkJCUNoYW5uZWxIYXNoS2V5 IGtleTsKKworCQkJQ2hhbm5lbEhhc2hQcmVwYXJlS2V5KCZrZXksIE15RGF0YWJhc2VJZCwg Y2hhbm5lbCk7CisJCQllbnRyeSA9IGRzaGFzaF9maW5kKGNoYW5uZWxIYXNoLCAma2V5LCBm YWxzZSk7CisJCX0KKworCQlpZiAoZW50cnkgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOwkJCS8q IE5vIGxpc3RlbmVycyByZWdpc3RlcmVkIGZvciB0aGlzIGNoYW5uZWwgKi8KKworCQlsaXN0 ZW5lcnMgPSAoUHJvY051bWJlciAqKSBkc2FfZ2V0X2FkZHJlc3MoY2hhbm5lbERTQSwKKwkJ CQkJCQkJCQkJCSAgIGVudHJ5LT5saXN0ZW5lcnNBcnJheSk7CisKKwkJZm9yIChpbnQgaiA9 IDA7IGogPCBlbnRyeS0+bnVtTGlzdGVuZXJzOyBqKyspCisJCXsKKwkJCVByb2NOdW1iZXIJ aSA9IGxpc3RlbmVyc1tqXTsKKwkJCWludDMyCQlwaWQ7CisJCQlRdWV1ZVBvc2l0aW9uIHBv czsKKworCQkJaWYgKFFVRVVFX0JBQ0tFTkRfV0FLRVVQX1BFTkRJTkcoaSkpCisJCQkJY29u dGludWU7CisKKwkJCXBvcyA9IFFVRVVFX0JBQ0tFTkRfUE9TKGkpOworCQkJcGlkID0gUVVF VUVfQkFDS0VORF9QSUQoaSk7CisKKwkJCS8qIFNraXAgaWYgY2F1Z2h0IHVwIG9yIHdyb25n IGRhdGFiYXNlICovCiAJCQlpZiAoUVVFVUVfUE9TX0VRVUFMKHBvcywgUVVFVUVfSEVBRCkp CiAJCQkJY29udGludWU7CisJCQlpZiAoUVVFVUVfQkFDS0VORF9EQk9JRChpKSAhPSBNeURh dGFiYXNlSWQpCisJCQkJY29udGludWU7CisKKwkJCUFzc2VydChwaWQgIT0gSW52YWxpZFBp ZCk7CisKKwkJCVFVRVVFX0JBQ0tFTkRfV0FLRVVQX1BFTkRJTkcoaSkgPSB0cnVlOworCQkJ cGlkc1tjb3VudF0gPSBwaWQ7CisJCQlwcm9jbm9zW2NvdW50XSA9IGk7CisJCQljb3VudCsr OworCQl9CisKKwkJZHNoYXNoX3JlbGVhc2VfbG9jayhjaGFubmVsSGFzaCwgZW50cnkpOwor CX0KKworCS8qCisJICogQXZvaWQgbmVlZGluZyB0byB3YWtlIGxpc3RlbmluZyBiYWNrZW5k cyB0aGF0IGFyZSBhdCB0aGUgb2xkIHF1ZXVlIGhlYWQKKwkgKiAoYmVmb3JlIHdlIHdyb3Rl IG91ciBub3RpZmljYXRpb25zKSB0aGF0IHdlIGtub3cgYXJlIG5vdCBpbnRlcmVzdGVkIGlu CisJICogb3VyIG5vdGlmaWNhdGlvbnMsIHNpbmNlIG90aGVyd2lzZSB0aGV5IHdvdWxkIGhh dmUgYmVlbiBtYXJrZWQgZm9yCisJICogd2FrZXVwIGJ5IG5vdy4gIERvIHRoaXMgYnkgYWR2 YW5jaW5nIHRoZW0gZGlyZWN0bHkgdG8gdGhlIG5ldyBxdWV1ZQorCSAqIGhlYWQuCisJICov CisJaWYgKHBlbmRpbmdOb3RpZmllcyAhPSBOVUxMKQorCXsKKwkJUXVldWVQb3NpdGlvbiBv bGRIZWFkID0gcGVuZGluZ05vdGlmaWVzLT5xdWV1ZUhlYWRCZWZvcmVXcml0ZTsKKwkJUXVl dWVQb3NpdGlvbiBuZXdIZWFkID0gcGVuZGluZ05vdGlmaWVzLT5xdWV1ZUhlYWRBZnRlcldy aXRlOworCisJCWZvciAoUHJvY051bWJlciBpID0gUVVFVUVfRklSU1RfTElTVEVORVI7CisJ CQkgaSAhPSBJTlZBTElEX1BST0NfTlVNQkVSOworCQkJIGkgPSBRVUVVRV9ORVhUX0xJU1RF TkVSKGkpKQorCQl7CisJCQlRdWV1ZVBvc2l0aW9uIHBvczsKKworCQkJaWYgKFFVRVVFX0JB Q0tFTkRfV0FLRVVQX1BFTkRJTkcoaSkpCisJCQkJY29udGludWU7CisKKwkJCXBvcyA9IFFV RVVFX0JBQ0tFTkRfUE9TKGkpOworCisJCQlpZiAoUVVFVUVfUE9TX0VRVUFMKHBvcywgb2xk SGVhZCkpCisJCQkJUVVFVUVfQkFDS0VORF9QT1MoaSkgPSBuZXdIZWFkOwogCQl9Ci0JCWVs c2UKKwl9CisKKwlxdWV1ZV9sZW5ndGggPSBhc3luY1F1ZXVlUGFnZURpZmYoUVVFVUVfUE9T X1BBR0UoUVVFVUVfSEVBRCksCisJCQkJCQkJCQkgIFFVRVVFX1BPU19QQUdFKFFVRVVFX1RB SUwpKTsKKworCS8qIENoZWNrIGZvciBsYWdnaW5nIGJhY2tlbmRzIHdoZW4gdGhlIHF1ZXVl IHNwYW5zIG11bHRpcGxlIHBhZ2VzICovCisJaWYgKHF1ZXVlX2xlbmd0aCA+IDApCisJewor CQlmb3IgKFByb2NOdW1iZXIgaSA9IFFVRVVFX0ZJUlNUX0xJU1RFTkVSOworCQkJIGkgIT0g SU5WQUxJRF9QUk9DX05VTUJFUjsKKwkJCSBpID0gUVVFVUVfTkVYVF9MSVNURU5FUihpKSkK IAkJewotCQkJLyoKLQkJCSAqIExpc3RlbmVycyBpbiBvdGhlciBkYXRhYmFzZXMgc2hvdWxk IGJlIHNpZ25hbGVkIG9ubHkgaWYgdGhleQotCQkJICogYXJlIGZhciBiZWhpbmQuCi0JCQkg Ki8KLQkJCWlmIChhc3luY1F1ZXVlUGFnZURpZmYoUVVFVUVfUE9TX1BBR0UoUVVFVUVfSEVB RCksCi0JCQkJCQkJCSAgIFFVRVVFX1BPU19QQUdFKHBvcykpIDwgUVVFVUVfQ0xFQU5VUF9E RUxBWSkKKwkJCVF1ZXVlUG9zaXRpb24gcG9zOworCQkJaW50NjQJCWxhZzsKKwkJCWludDMy CQlwaWQ7CisKKwkJCWlmIChRVUVVRV9CQUNLRU5EX1dBS0VVUF9QRU5ESU5HKGkpKQogCQkJ CWNvbnRpbnVlOworCisJCQlwb3MgPSBRVUVVRV9CQUNLRU5EX1BPUyhpKTsKKworCQkJbGFn ID0gYXN5bmNRdWV1ZVBhZ2VEaWZmKFFVRVVFX1BPU19QQUdFKFFVRVVFX0hFQUQpLAorCQkJ CQkJCQkJIFFVRVVFX1BPU19QQUdFKHBvcykpOworCisJCQkvKiBOZWVkIHRvIHNpZ25hbCBp ZiBhIGJhY2tlbmQgaGFzIGZhbGxlbiB0b28gZmFyIGJlaGluZCAqLworCQkJaWYgKGxhZyA+ PSBRVUVVRV9DTEVBTlVQX0RFTEFZKQorCQkJeworCQkJCXBpZCA9IFFVRVVFX0JBQ0tFTkRf UElEKGkpOworCQkJCUFzc2VydChwaWQgIT0gSW52YWxpZFBpZCk7CisKKwkJCQlRVUVVRV9C QUNLRU5EX1dBS0VVUF9QRU5ESU5HKGkpID0gdHJ1ZTsKKwkJCQlwaWRzW2NvdW50XSA9IHBp ZDsKKwkJCQlwcm9jbm9zW2NvdW50XSA9IGk7CisJCQkJY291bnQrKzsKKwkJCX0KIAkJfQot CQkvKiBPSywgbmVlZCB0byBzaWduYWwgdGhpcyBvbmUgKi8KLQkJcGlkc1tjb3VudF0gPSBw aWQ7Ci0JCXByb2Nub3NbY291bnRdID0gaTsKLQkJY291bnQrKzsKIAl9CiAJTFdMb2NrUmVs ZWFzZShOb3RpZnlRdWV1ZUxvY2spOwogCkBAIC0xNjczLDkgKzIwODUsOSBAQCBBdEFib3J0 X05vdGlmeSh2b2lkKQogCS8qCiAJICogSWYgd2UgTElTVEVOIGJ1dCB0aGVuIHJvbGwgYmFj ayB0aGUgdHJhbnNhY3Rpb24gYWZ0ZXIgUHJlQ29tbWl0X05vdGlmeSwKIAkgKiB3ZSBoYXZl IHJlZ2lzdGVyZWQgYXMgYSBsaXN0ZW5lciBidXQgaGF2ZSBub3QgbWFkZSBhbnkgZW50cnkg aW4KLQkgKiBsaXN0ZW5DaGFubmVscy4gIEluIHRoYXQgY2FzZSwgZGVyZWdpc3RlciBhZ2Fp bi4KKwkgKiBjaGFubmVsSGFzaC4gIEluIHRoYXQgY2FzZSwgZGVyZWdpc3RlciBhZ2Fpbi4K IAkgKi8KLQlpZiAoYW1SZWdpc3RlcmVkTGlzdGVuZXIgJiYgbGlzdGVuQ2hhbm5lbHMgPT0g TklMKQorCWlmIChhbVJlZ2lzdGVyZWRMaXN0ZW5lciAmJiBudW1DaGFubmVsc0xpc3Rlbmlu Z09uID09IDApCiAJCWFzeW5jUXVldWVVbnJlZ2lzdGVyKCk7CiAKIAkvKiBBbmQgY2xlYW4g dXAgKi8KQEAgLTE4NjUsNiArMjI3Nyw3IEBAIGFzeW5jUXVldWVSZWFkQWxsTm90aWZpY2F0 aW9ucyh2b2lkKQogCUxXTG9ja0FjcXVpcmUoTm90aWZ5UXVldWVMb2NrLCBMV19TSEFSRUQp OwogCS8qIEFzc2VydCBjaGVja3MgdGhhdCB3ZSBoYXZlIGEgdmFsaWQgc3RhdGUgZW50cnkg Ki8KIAlBc3NlcnQoTXlQcm9jUGlkID09IFFVRVVFX0JBQ0tFTkRfUElEKE15UHJvY051bWJl cikpOworCVFVRVVFX0JBQ0tFTkRfV0FLRVVQX1BFTkRJTkcoTXlQcm9jTnVtYmVyKSA9IGZh bHNlOwogCXBvcyA9IFFVRVVFX0JBQ0tFTkRfUE9TKE15UHJvY051bWJlcik7CiAJaGVhZCA9 IFFVRVVFX0hFQUQ7CiAJTFdMb2NrUmVsZWFzZShOb3RpZnlRdWV1ZUxvY2spOwpAQCAtMjE4 Niw3ICsyNTk5LDcgQEAgUHJvY2Vzc0luY29taW5nTm90aWZ5KGJvb2wgZmx1c2gpCiAJbm90 aWZ5SW50ZXJydXB0UGVuZGluZyA9IGZhbHNlOwogCiAJLyogRG8gbm90aGluZyBlbHNlIGlm IHdlIGFyZW4ndCBhY3RpdmVseSBsaXN0ZW5pbmcgKi8KLQlpZiAobGlzdGVuQ2hhbm5lbHMg PT0gTklMKQorCWlmIChudW1DaGFubmVsc0xpc3RlbmluZ09uID09IDApCiAJCXJldHVybjsK IAogCWlmIChUcmFjZV9ub3RpZnkpCkBAIC0yMzk1LDMgKzI4MDgsNTUgQEAgY2hlY2tfbm90 aWZ5X2J1ZmZlcnMoaW50ICpuZXd2YWwsIHZvaWQgKipleHRyYSwgR3VjU291cmNlIHNvdXJj ZSkKIHsKIAlyZXR1cm4gY2hlY2tfc2xydV9idWZmZXJzKCJub3RpZnlfYnVmZmVycyIsIG5l d3ZhbCk7CiB9CisKKworLyoKKyAqIENoYW5uZWxIYXNoUHJlcGFyZUtleQorICoJCVByZXBh cmUgYSBjaGFubmVsIGtleSBmb3IgdXNlIGFzIGEgaGFzaCBrZXkuCisgKi8KK3N0YXRpYyBp bmxpbmUgdm9pZAorQ2hhbm5lbEhhc2hQcmVwYXJlS2V5KENoYW5uZWxIYXNoS2V5ICprZXks IE9pZCBkYm9pZCwgY29uc3QgY2hhciAqY2hhbm5lbCkKK3sKKwltZW1zZXQoa2V5LCAwLCBz aXplb2YoQ2hhbm5lbEhhc2hLZXkpKTsKKwlrZXktPmRib2lkID0gZGJvaWQ7CisJc3RybGNw eShrZXktPmNoYW5uZWwsIGNoYW5uZWwsIE5BTUVEQVRBTEVOKTsKK30KKworLyoKKyAqIEdl dFBlbmRpbmdOb3RpZnlDaGFubmVscworICoJCUdldCBsaXN0IG9mIHVuaXF1ZSBjaGFubmVs IG5hbWVzIGZyb20gcGVuZGluZyBub3RpZmljYXRpb25zLgorICovCitzdGF0aWMgTGlzdCAq CitHZXRQZW5kaW5nTm90aWZ5Q2hhbm5lbHModm9pZCkKK3sKKwlMaXN0CSAgICpjaGFubmVs cyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpwOworCUxpc3RDZWxsICAgKnE7CisJYm9vbAkJZm91 bmQ7CisKKwlpZiAoIXBlbmRpbmdOb3RpZmllcykKKwkJcmV0dXJuIE5JTDsKKworCWZvcmVh Y2gocCwgcGVuZGluZ05vdGlmaWVzLT5ldmVudHMpCisJeworCQlOb3RpZmljYXRpb24gKm4g PSAoTm90aWZpY2F0aW9uICopIGxmaXJzdChwKTsKKwkJY2hhcgkgICAqY2hhbm5lbCA9IG4t PmRhdGE7CisKKwkJZm91bmQgPSBmYWxzZTsKKwkJZm9yZWFjaChxLCBjaGFubmVscykKKwkJ eworCQkJY2hhcgkgICAqZXhpc3RpbmcgPSAoY2hhciAqKSBsZmlyc3QocSk7CisKKwkJCWlm IChzdHJjbXAoZXhpc3RpbmcsIGNoYW5uZWwpID09IDApCisJCQl7CisJCQkJZm91bmQgPSB0 cnVlOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKCFmb3VuZCkKKwkJCWNoYW5u ZWxzID0gbGFwcGVuZChjaGFubmVscywgY2hhbm5lbCk7CisJfQorCisJcmV0dXJuIGNoYW5u ZWxzOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9l dmVudF9uYW1lcy50eHQgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50 X25hbWVzLnR4dAppbmRleCA3NTUzZjZlYWNlZi4uYTRmYWRiZDA3NjcgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFtZXMudHh0CisrKyBi L3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFtZXMudHh0CkBAIC0z NjYsNiArMzY2LDcgQEAgU3VidHJhbnNCdWZmZXIJIldhaXRpbmcgZm9yIEkvTyBvbiBhIHN1 Yi10cmFuc2FjdGlvbiBTTFJVIGJ1ZmZlci4iCiBNdWx0aVhhY3RPZmZzZXRCdWZmZXIJIldh aXRpbmcgZm9yIEkvTyBvbiBhIG11bHRpeGFjdCBvZmZzZXQgU0xSVSBidWZmZXIuIgogTXVs dGlYYWN0TWVtYmVyQnVmZmVyCSJXYWl0aW5nIGZvciBJL08gb24gYSBtdWx0aXhhY3QgbWVt YmVyIFNMUlUgYnVmZmVyLiIKIE5vdGlmeUJ1ZmZlcgkiV2FpdGluZyBmb3IgSS9PIG9uIGEg PGNvbW1hbmQ+Tk9USUZZPC9jb21tYW5kPiBtZXNzYWdlIFNMUlUgYnVmZmVyLiIKK05vdGlm eUNoYW5uZWxIYXNoCSJXYWl0aW5nIHRvIGFjY2VzcyB0aGUgPGNvbW1hbmQ+Tk9USUZZPC9j b21tYW5kPiBjaGFubmVsIGhhc2ggdGFibGUuIgogU2VyaWFsQnVmZmVyCSJXYWl0aW5nIGZv ciBJL08gb24gYSBzZXJpYWxpemFibGUgdHJhbnNhY3Rpb24gY29uZmxpY3QgU0xSVSBidWZm ZXIuIgogV0FMSW5zZXJ0CSJXYWl0aW5nIHRvIGluc2VydCBXQUwgZGF0YSBpbnRvIGEgbWVt b3J5IGJ1ZmZlci4iCiBCdWZmZXJDb250ZW50CSJXYWl0aW5nIHRvIGFjY2VzcyBhIGRhdGEg cGFnZSBpbiBtZW1vcnkuIgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9sd2xv Y2tsaXN0LmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2x3bG9ja2xpc3QuaAppbmRleCAwNmEx ZmZkNGIwOC4uMjc2OGRkZjQ0MTQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uv bHdsb2NrbGlzdC5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbHdsb2NrbGlzdC5oCkBA IC0xMDAsNiArMTAwLDcgQEAgUEdfTFdMT0NLVFJBTkNIRShTVUJUUkFOU19CVUZGRVIsIFN1 YnRyYW5zQnVmZmVyKQogUEdfTFdMT0NLVFJBTkNIRShNVUxUSVhBQ1RPRkZTRVRfQlVGRkVS LCBNdWx0aVhhY3RPZmZzZXRCdWZmZXIpCiBQR19MV0xPQ0tUUkFOQ0hFKE1VTFRJWEFDVE1F TUJFUl9CVUZGRVIsIE11bHRpWGFjdE1lbWJlckJ1ZmZlcikKIFBHX0xXTE9DS1RSQU5DSEUo Tk9USUZZX0JVRkZFUiwgTm90aWZ5QnVmZmVyKQorUEdfTFdMT0NLVFJBTkNIRShOT1RJRllf Q0hBTk5FTF9IQVNILCBOb3RpZnlDaGFubmVsSGFzaCkKIFBHX0xXTE9DS1RSQU5DSEUoU0VS SUFMX0JVRkZFUiwgU2VyaWFsQnVmZmVyKQogUEdfTFdMT0NLVFJBTkNIRShXQUxfSU5TRVJU LCBXQUxJbnNlcnQpCiBQR19MV0xPQ0tUUkFOQ0hFKEJVRkZFUl9DT05URU5ULCBCdWZmZXJD b250ZW50KQpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3Qg Yi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCA1MjkwYjkxZTgzZS4u NWNjZGQ0MDQzZTggMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC00MTIsNiAr NDEyLDggQEAgQ2F0YWxvZ0lkTWFwRW50cnkKIENhdGFsb2dJbmRleFN0YXRlCiBDaGFuZ2VW YXJOb2Rlc19jYWxsYmFjawogQ2hhbmdlVmFyTm9kZXNfY29udGV4dAorQ2hhbm5lbEVudHJ5 CitDaGFubmVsSGFzaEtleQogQ2hlY2tQb2ludAogQ2hlY2tQb2ludFN0bXQKIENoZWNrcG9p bnRTdGF0c0RhdGEKLS0gCjIuNTAuMQoK --abc434ae136a419d9ec676bf29f660b5 Content-Disposition: attachment; filename*0="pgbench-listen-notify-benchmark-patch.txt" Content-Type: text/plain; name="pgbench-listen-notify-benchmark-patch.txt" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMgYi9zcmMvYmluL3BnYmVu Y2gvcGdiZW5jaC5jCmluZGV4IDE1MTVlZDQwNWJhLi4zZjQ3YzUwODQ3ZCAxMDA2NDQKLS0t IGEvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYworKysgYi9zcmMvYmluL3BnYmVuY2gvcGdi ZW5jaC5jCkBAIC0zNSw2ICszNSw3IEBACiAKICNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1 ZGUgPGZsb2F0Lmg+CisjaW5jbHVkZSA8aW50dHlwZXMuaD4KICNpbmNsdWRlIDxsaW1pdHMu aD4KICNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8c2lnbmFsLmg+CkBAIC0yMzcsNiAr MjM4LDExIEBAIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBQQVJUSVRJT05fTUVUSE9EW10g PSB7Im5vbmUiLCAicmFuZ2UiLCAiaGFzaCJ9OwogLyogcmFuZG9tIHNlZWQgdXNlZCB0byBp bml0aWFsaXplIGJhc2VfcmFuZG9tX3NlcXVlbmNlICovCiBzdGF0aWMgaW50NjQgcmFuZG9t X3NlZWQgPSAtMTsKIAorLyogTElTVEVOL05PVElGWSBiZW5jaG1hcmsgbW9kZSBwYXJhbWV0 ZXJzICovCitzdGF0aWMgYm9vbCBsaXN0ZW5fbm90aWZ5X21vZGUgPSBmYWxzZTsJLyogZW5h YmxlIExJU1RFTi9OT1RJRlkgYmVuY2htYXJrICovCitzdGF0aWMgaW50CW5vdGlmeV9yb3Vu ZF90cmlwcyA9IDEwMDsJLyogbnVtYmVyIG9mIHJvdW5kLXRyaXBzIHBlciBpdGVyYXRpb24g Ki8KK3N0YXRpYyBpbnQJbm90aWZ5X2lkbGVfc3RlcCA9IDEwOwkJLyogaWRsZSBsaXN0ZW5l cnMgdG8gYWRkIHBlciBpdGVyYXRpb24gKi8KKwogLyoKICAqIGVuZCBvZiBjb25maWd1cmFi bGUgcGFyYW1ldGVycwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTkzMCw2ICs5MzYsMTAgQEAg dXNhZ2Uodm9pZCkKIAkJICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgIChzYW1lIGFz IFwiLWIgc2ltcGxlLXVwZGF0ZVwiKVxuIgogCQkgICAiICAtUywgLS1zZWxlY3Qtb25seSAg ICAgICAgcGVyZm9ybSBTRUxFQ1Qtb25seSB0cmFuc2FjdGlvbnNcbiIKIAkJICAgIiAgICAg ICAgICAgICAgICAgICAgICAgICAgIChzYW1lIGFzIFwiLWIgc2VsZWN0LW9ubHlcIilcbiIK KwkJICAgIiAgLS1saXN0ZW4tbm90aWZ5LWJlbmNobWFya1xuIgorCQkgICAiICAgICAgICAg ICAgICAgICAgICAgICAgICAgcnVuIExJU1RFTi9OT1RJRlkgcm91bmQtdHJpcCBiZW5jaG1h cmtcbiIKKwkJICAgIiAgLS1ub3RpZnktcm91bmQtdHJpcHM9TlVNIG51bWJlciBvZiByb3Vu ZC10cmlwcyBwZXIgaXRlcmF0aW9uIChkZWZhdWx0OiAxMDApXG4iCisJCSAgICIgIC0tbm90 aWZ5LWlkbGUtc3RlcD1OVU0gICBpZGxlIGxpc3RlbmVycyB0byBhZGQgcGVyIGl0ZXJhdGlv biAoZGVmYXVsdDogMTApXG4iCiAJCSAgICJcbkJlbmNobWFya2luZyBvcHRpb25zOlxuIgog CQkgICAiICAtYywgLS1jbGllbnQ9TlVNICAgICAgICAgbnVtYmVyIG9mIGNvbmN1cnJlbnQg ZGF0YWJhc2UgY2xpZW50cyAoZGVmYXVsdDogMSlcbiIKIAkJICAgIiAgLUMsIC0tY29ubmVj dCAgICAgICAgICAgIGVzdGFibGlzaCBuZXcgY29ubmVjdGlvbiBmb3IgZWFjaCB0cmFuc2Fj dGlvblxuIgpAQCAtNjY4OSw2ICs2Njk5LDIxNiBAQCBzZXRfcmFuZG9tX3NlZWQoY29uc3Qg Y2hhciAqc2VlZCkKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorLyoKKyAqIFJ1biBMSVNURU4vTk9U SUZZIHJvdW5kLXRyaXAgYmVuY2htYXJrCisgKgorICogVGhpcyBiZW5jaG1hcmsgbWVhc3Vy ZXMgdGhlIHJvdW5kLXRyaXAgdGltZSBiZXR3ZWVuIHR3byBwcm9jZXNzZXMgdGhhdAorICog cGluZy1wb25nIE5PVElGWSBtZXNzYWdlcyB3aGlsZSBhZGRpbmcgaWRsZSBsaXN0ZW5pbmcg Y29ubmVjdGlvbnMuCisgKi8KK3N0YXRpYyB2b2lkCitydW5MaXN0ZW5Ob3RpZnlCZW5jaG1h cmsodm9pZCkKK3sKKwlQR2Nvbm4JICAgKmNvbm4xID0gTlVMTDsKKwlQR2Nvbm4JICAgKmNv bm4yID0gTlVMTDsKKwlQR2Nvbm4JICAqKmlkbGVfY29ubnMgPSBOVUxMOworCWludAkJCW51 bV9pZGxlID0gMDsKKwlpbnQJCQltYXhfaWRsZSA9IDEwMDAwMDsJLyogcmVhc29uYWJsZSB1 cHBlciBsaW1pdCAqLworCVBHcmVzdWx0ICAgKnJlczsKKwljaGFyCQljaGFubmVsMVtdID0g InBnYmVuY2hfY2hhbm5lbF8xIjsKKwljaGFyCQljaGFubmVsMltdID0gInBnYmVuY2hfY2hh bm5lbF8yIjsKKwljaGFyCQlub3RpZnlfY21kWzI1Nl07CisJYm9vbAkJZmlyc3RfZmFpbHVy ZSA9IGZhbHNlOworCisJcGdfbG9nX2luZm8oInN0YXJ0aW5nIExJU1RFTi9OT1RJRlkgcm91 bmQtdHJpcCBiZW5jaG1hcmsiKTsKKwlwZ19sb2dfaW5mbygicm91bmQtdHJpcHMgcGVyIGl0 ZXJhdGlvbjogJWQiLCBub3RpZnlfcm91bmRfdHJpcHMpOworCXBnX2xvZ19pbmZvKCJpZGxl IGxpc3RlbmVycyBhZGRlZCBwZXIgaXRlcmF0aW9uOiAlZCIsIG5vdGlmeV9pZGxlX3N0ZXAp OworCXByaW50ZigiXG4lMTRzICAlMTlzICAlMTlzXG4iLCAiaWRsZV9saXN0ZW5lcnMiLCAi cm91bmRfdHJpcHNfcGVyX3NlYyIsICJtYXhfbGF0ZW5jeV91c2VjIik7CisKKwkvKiBBbGxv Y2F0ZSBhcnJheSBmb3IgaWRsZSBjb25uZWN0aW9ucyAqLworCWlkbGVfY29ubnMgPSAoUEdj b25uICoqKSBwZ19tYWxsb2MwKG1heF9pZGxlICogc2l6ZW9mKFBHY29ubiAqKSk7CisKKwkv KiBDcmVhdGUgdHdvIGFjdGl2ZSBjb25uZWN0aW9ucyBmb3IgcGluZy1wb25nICovCisJY29u bjEgPSBkb0Nvbm5lY3QoKTsKKwlpZiAoY29ubjEgPT0gTlVMTCkKKwkJcGdfZmF0YWwoImZh aWxlZCB0byBjcmVhdGUgY29ubmVjdGlvbiAxIik7CisKKwljb25uMiA9IGRvQ29ubmVjdCgp OworCWlmIChjb25uMiA9PSBOVUxMKQorCQlwZ19mYXRhbCgiZmFpbGVkIHRvIGNyZWF0ZSBj b25uZWN0aW9uIDIiKTsKKworCS8qIFNldCB1cCBMSVNURU4gb24gYm90aCBjb25uZWN0aW9u cyAqLworCXNucHJpbnRmKG5vdGlmeV9jbWQsIHNpemVvZihub3RpZnlfY21kKSwgIkxJU1RF TiAlcyIsIGNoYW5uZWwxKTsKKwlyZXMgPSBQUWV4ZWMoY29ubjEsIG5vdGlmeV9jbWQpOwor CWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX0NPTU1BTkRfT0spCisJCXBnX2Zh dGFsKCJMSVNURU4gZmFpbGVkIG9uIGNvbm5lY3Rpb24gMTogJXMiLCBQUWVycm9yTWVzc2Fn ZShjb25uMSkpOworCVBRY2xlYXIocmVzKTsKKworCXNucHJpbnRmKG5vdGlmeV9jbWQsIHNp emVvZihub3RpZnlfY21kKSwgIkxJU1RFTiAlcyIsIGNoYW5uZWwyKTsKKwlyZXMgPSBQUWV4 ZWMoY29ubjIsIG5vdGlmeV9jbWQpOworCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBH UkVTX0NPTU1BTkRfT0spCisJCXBnX2ZhdGFsKCJMSVNURU4gZmFpbGVkIG9uIGNvbm5lY3Rp b24gMjogJXMiLCBQUWVycm9yTWVzc2FnZShjb25uMikpOworCVBRY2xlYXIocmVzKTsKKwor CS8qIE1haW4gYmVuY2htYXJrIGxvb3A6IG1lYXN1cmUgcm91bmQtdHJpcHMgdGhlbiBhZGQg aWRsZSBjb25uZWN0aW9ucyAqLworCXdoaWxlIChudW1faWRsZSA8IG1heF9pZGxlKQorCXsK KwkJaW50CQkJaTsKKwkJaW50NjQJCXRvdGFsX2xhdGVuY3kgPSAwOworCQlpbnQ2NAkJbWF4 X2xhdGVuY3kgPSAwOworCisJCS8qIFBlcmZvcm0gcm91bmQtdHJpcCBtZWFzdXJlbWVudHMg Ki8KKwkJZm9yIChpID0gMDsgaSA8IG5vdGlmeV9yb3VuZF90cmlwczsgaSsrKQorCQl7CisJ CQlwZ190aW1lX3VzZWNfdCBzdGFydF90aW1lLAorCQkJCQkJZW5kX3RpbWU7CisJCQlpbnQ2 NAkJbGF0ZW5jeTsKKwkJCVBHbm90aWZ5ICAgKm5vdGlmeTsKKwkJCWludAkJCXNvY2s7CisJ CQlmZF9zZXQJCWlucHV0X21hc2s7CisJCQlzdHJ1Y3QgdGltZXZhbCB0djsKKworCQkJLyog Q2xlYXIgYW55IHBlbmRpbmcgbm90aWZpY2F0aW9ucyAqLworCQkJUFFjb25zdW1lSW5wdXQo Y29ubjEpOworCQkJd2hpbGUgKChub3RpZnkgPSBQUW5vdGlmaWVzKGNvbm4xKSkgIT0gTlVM TCkKKwkJCQlQUWZyZWVtZW0obm90aWZ5KTsKKwkJCVBRY29uc3VtZUlucHV0KGNvbm4yKTsK KwkJCXdoaWxlICgobm90aWZ5ID0gUFFub3RpZmllcyhjb25uMikpICE9IE5VTEwpCisJCQkJ UFFmcmVlbWVtKG5vdGlmeSk7CisKKwkJCS8qIFN0YXJ0IHRpbWVyIGFuZCBzZW5kIG5vdGlm aWNhdGlvbiBmcm9tIGNvbm4xICovCisJCQlzdGFydF90aW1lID0gcGdfdGltZV9ub3coKTsK KwkJCXNucHJpbnRmKG5vdGlmeV9jbWQsIHNpemVvZihub3RpZnlfY21kKSwgIk5PVElGWSAl cyIsIGNoYW5uZWwyKTsKKwkJCXJlcyA9IFBRZXhlYyhjb25uMSwgbm90aWZ5X2NtZCk7CisJ CQlpZiAoUFFyZXN1bHRTdGF0dXMocmVzKSAhPSBQR1JFU19DT01NQU5EX09LKQorCQkJCXBn X2ZhdGFsKCJOT1RJRlkgZmFpbGVkOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4xKSk7CisJ CQlQUWNsZWFyKHJlcyk7CisKKwkJCS8qIFdhaXQgZm9yIG5vdGlmaWNhdGlvbiBvbiBjb25u MiAqLworCQkJc29jayA9IFBRc29ja2V0KGNvbm4yKTsKKwkJCW5vdGlmeSA9IE5VTEw7CisJ CQl3aGlsZSAobm90aWZ5ID09IE5VTEwpCisJCQl7CisJCQkJUFFjb25zdW1lSW5wdXQoY29u bjIpOworCQkJCW5vdGlmeSA9IFBRbm90aWZpZXMoY29ubjIpOworCQkJCWlmIChub3RpZnkg PT0gTlVMTCkKKwkJCQl7CisJCQkJCS8qIFdhaXQgZm9yIGRhdGEgb24gc29ja2V0ICovCisJ CQkJCUZEX1pFUk8oJmlucHV0X21hc2spOworCQkJCQlGRF9TRVQoc29jaywgJmlucHV0X21h c2spOworCQkJCQl0di50dl9zZWMgPSAxMDsJLyogMTAgc2Vjb25kIHRpbWVvdXQgKi8KKwkJ CQkJdHYudHZfdXNlYyA9IDA7CisJCQkJCWlmIChzZWxlY3Qoc29jayArIDEsICZpbnB1dF9t YXNrLCBOVUxMLCBOVUxMLCAmdHYpIDwgMCkKKwkJCQkJCXBnX2ZhdGFsKCJzZWxlY3QoKSBm YWlsZWQ6ICVtIik7CisJCQkJfQorCQkJfQorCQkJUFFmcmVlbWVtKG5vdGlmeSk7CisKKwkJ CS8qIFNlbmQgbm90aWZpY2F0aW9uIGJhY2sgZnJvbSBjb25uMiAqLworCQkJc25wcmludGYo bm90aWZ5X2NtZCwgc2l6ZW9mKG5vdGlmeV9jbWQpLCAiTk9USUZZICVzIiwgY2hhbm5lbDEp OworCQkJcmVzID0gUFFleGVjKGNvbm4yLCBub3RpZnlfY21kKTsKKwkJCWlmIChQUXJlc3Vs dFN0YXR1cyhyZXMpICE9IFBHUkVTX0NPTU1BTkRfT0spCisJCQkJcGdfZmF0YWwoIk5PVElG WSBmYWlsZWQ6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubjIpKTsKKwkJCVBRY2xlYXIocmVz KTsKKworCQkJLyogV2FpdCBmb3Igbm90aWZpY2F0aW9uIG9uIGNvbm4xICovCisJCQlzb2Nr ID0gUFFzb2NrZXQoY29ubjEpOworCQkJbm90aWZ5ID0gTlVMTDsKKwkJCXdoaWxlIChub3Rp ZnkgPT0gTlVMTCkKKwkJCXsKKwkJCQlQUWNvbnN1bWVJbnB1dChjb25uMSk7CisJCQkJbm90 aWZ5ID0gUFFub3RpZmllcyhjb25uMSk7CisJCQkJaWYgKG5vdGlmeSA9PSBOVUxMKQorCQkJ CXsKKwkJCQkJLyogV2FpdCBmb3IgZGF0YSBvbiBzb2NrZXQgKi8KKwkJCQkJRkRfWkVSTygm aW5wdXRfbWFzayk7CisJCQkJCUZEX1NFVChzb2NrLCAmaW5wdXRfbWFzayk7CisJCQkJCXR2 LnR2X3NlYyA9IDEwOwkvKiAxMCBzZWNvbmQgdGltZW91dCAqLworCQkJCQl0di50dl91c2Vj ID0gMDsKKwkJCQkJaWYgKHNlbGVjdChzb2NrICsgMSwgJmlucHV0X21hc2ssIE5VTEwsIE5V TEwsICZ0dikgPCAwKQorCQkJCQkJcGdfZmF0YWwoInNlbGVjdCgpIGZhaWxlZDogJW0iKTsK KwkJCQl9CisJCQl9CisJCQlQUWZyZWVtZW0obm90aWZ5KTsKKworCQkJLyogRW5kIHRpbWVy ICovCisJCQllbmRfdGltZSA9IHBnX3RpbWVfbm93KCk7CisKKwkJCS8qIENhbGN1bGF0ZSBp bmRpdmlkdWFsIHJvdW5kLXRyaXAgbGF0ZW5jeSAqLworCQkJbGF0ZW5jeSA9IGVuZF90aW1l IC0gc3RhcnRfdGltZTsKKworCQkJLyogQWNjdW11bGF0ZSB0b3RhbCBsYXRlbmN5IGFuZCB0 cmFjayBtYXhpbXVtICovCisJCQl0b3RhbF9sYXRlbmN5ICs9IGxhdGVuY3k7CisJCQlpZiAo bGF0ZW5jeSA+IG1heF9sYXRlbmN5KQorCQkJCW1heF9sYXRlbmN5ID0gbGF0ZW5jeTsKKwkJ fQorCisJCS8qIENhbGN1bGF0ZSBhbmQgcmVwb3J0IHJvdW5kLXRyaXBzIHBlciBzZWNvbmQg YW5kIG1heCBsYXRlbmN5ICovCisJCWZwcmludGYoc3Rkb3V0LCAiJTE0ZCAgJTE5LjFmICAl MTkiIFBSSWQ2NCAiXG4iLAorCQkJCW51bV9pZGxlLAorCQkJCTEwMDAwMDAuMCAqIG5vdGlm eV9yb3VuZF90cmlwcyAvIHRvdGFsX2xhdGVuY3ksCisJCQkJbWF4X2xhdGVuY3kpOworCQlm Zmx1c2goc3Rkb3V0KTsKKworCQkvKiBTdG9wIGlmIHdlIGhpdCBjb25uZWN0aW9uIGxpbWl0 ICovCisJCWlmIChmaXJzdF9mYWlsdXJlKQorCQkJYnJlYWs7CisKKwkJLyogQWRkIGlkbGUg bGlzdGVuaW5nIGNvbm5lY3Rpb25zICovCisJCWZvciAoaSA9IDA7IGkgPCBub3RpZnlfaWRs ZV9zdGVwICYmIG51bV9pZGxlIDwgbWF4X2lkbGU7IGkrKykKKwkJeworCQkJUEdjb25uCSAg ICppZGxlX2Nvbm47CisJCQljaGFyCQlpZGxlX2NoYW5uZWxbMjU2XTsKKworCQkJaWRsZV9j b25uID0gZG9Db25uZWN0KCk7CisJCQlpZiAoaWRsZV9jb25uID09IE5VTEwpCisJCQl7CisJ CQkJaWYgKCFmaXJzdF9mYWlsdXJlKQorCQkJCXsKKwkJCQkJcGdfbG9nX2luZm8oInJlYWNo ZWQgbWF4X2Nvbm5lY3Rpb25zIGF0ICVkIGlkbGUgbGlzdGVuZXJzIiwgbnVtX2lkbGUpOwor CQkJCQlmaXJzdF9mYWlsdXJlID0gdHJ1ZTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisK KwkJCS8qIEVhY2ggaWRsZSBjb25uZWN0aW9uIGxpc3RlbnMgb24gYSB1bmlxdWUgY2hhbm5l bCAqLworCQkJc25wcmludGYoaWRsZV9jaGFubmVsLCBzaXplb2YoaWRsZV9jaGFubmVsKSwg ImlkbGVfJWQiLCBudW1faWRsZSk7CisJCQlzbnByaW50Zihub3RpZnlfY21kLCBzaXplb2Yo bm90aWZ5X2NtZCksICJMSVNURU4gJXMiLCBpZGxlX2NoYW5uZWwpOworCisJCQlyZXMgPSBQ UWV4ZWMoaWRsZV9jb25uLCBub3RpZnlfY21kKTsKKwkJCWlmIChQUXJlc3VsdFN0YXR1cyhy ZXMpICE9IFBHUkVTX0NPTU1BTkRfT0spCisJCQl7CisJCQkJcGdfbG9nX3dhcm5pbmcoIkxJ U1RFTiBmYWlsZWQgb24gaWRsZSBjb25uZWN0aW9uICVkOiAlcyIsCisJCQkJCQkJICAgbnVt X2lkbGUsIFBRZXJyb3JNZXNzYWdlKGlkbGVfY29ubikpOworCQkJCVBRZmluaXNoKGlkbGVf Y29ubik7CisJCQkJUFFjbGVhcihyZXMpOworCQkJCWZpcnN0X2ZhaWx1cmUgPSB0cnVlOwor CQkJCWJyZWFrOworCQkJfQorCQkJUFFjbGVhcihyZXMpOworCisJCQlpZGxlX2Nvbm5zW251 bV9pZGxlXSA9IGlkbGVfY29ubjsKKwkJCW51bV9pZGxlKys7CisJCX0KKworCQkvKiBTdG9w IGlmIHdlIGNvdWxkbid0IGFkZCBhbnkgY29ubmVjdGlvbnMgKi8KKwkJaWYgKGZpcnN0X2Zh aWx1cmUgJiYgaSA9PSAwKQorCQkJYnJlYWs7CisJfQorCisJLyogQ2xlYW4gdXAgKi8KKwlw Z19sb2dfaW5mbygiY2xlYW5pbmcgdXAgY29ubmVjdGlvbnMiKTsKKwlQUWZpbmlzaChjb25u MSk7CisJUFFmaW5pc2goY29ubjIpOworCWZvciAoaW50IGkgPSAwOyBpIDwgbnVtX2lkbGU7 IGkrKykKKwl7CisJCWlmIChpZGxlX2Nvbm5zW2ldKQorCQkJUFFmaW5pc2goaWRsZV9jb25u c1tpXSk7CisJfQorCXBnX2ZyZWUoaWRsZV9jb25ucyk7CisKKwlwZ19sb2dfaW5mbygiTElT VEVOL05PVElGWSBiZW5jaG1hcmsgY29tcGxldGVkIik7Cit9CisKIGludAogbWFpbihpbnQg YXJnYywgY2hhciAqKmFyZ3YpCiB7CkBAIC02NzM5LDYgKzY5NTksOSBAQCBtYWluKGludCBh cmdjLCBjaGFyICoqYXJndikKIAkJeyJ2ZXJib3NlLWVycm9ycyIsIG5vX2FyZ3VtZW50LCBO VUxMLCAxNX0sCiAJCXsiZXhpdC1vbi1hYm9ydCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAxNn0s CiAJCXsiZGVidWciLCBub19hcmd1bWVudCwgTlVMTCwgMTd9LAorCQl7Imxpc3Rlbi1ub3Rp ZnktYmVuY2htYXJrIiwgbm9fYXJndW1lbnQsIE5VTEwsIDE4fSwKKwkJeyJub3RpZnktcm91 bmQtdHJpcHMiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgMTl9LAorCQl7Im5vdGlmeS1p ZGxlLXN0ZXAiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgMjB9LAogCQl7TlVMTCwgMCwg TlVMTCwgMH0KIAl9OwogCkBAIC03MDkyLDYgKzczMTUsMjIgQEAgbWFpbihpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCiAJCQljYXNlIDE3OgkJCS8qIGRlYnVnICovCiAJCQkJcGdfbG9nZ2lu Z19pbmNyZWFzZV92ZXJib3NpdHkoKTsKIAkJCQlicmVhazsKKwkJCWNhc2UgMTg6CQkJLyog bGlzdGVuLW5vdGlmeS1iZW5jaG1hcmsgKi8KKwkJCQlsaXN0ZW5fbm90aWZ5X21vZGUgPSB0 cnVlOworCQkJCWJlbmNobWFya2luZ19vcHRpb25fc2V0ID0gdHJ1ZTsKKwkJCQlicmVhazsK KwkJCWNhc2UgMTk6CQkJLyogbm90aWZ5LXJvdW5kLXRyaXBzICovCisJCQkJYmVuY2htYXJr aW5nX29wdGlvbl9zZXQgPSB0cnVlOworCQkJCWlmICghb3B0aW9uX3BhcnNlX2ludChvcHRh cmcsICItLW5vdGlmeS1yb3VuZC10cmlwcyIsIDEsIElOVF9NQVgsCisJCQkJCQkJCQkgICZu b3RpZnlfcm91bmRfdHJpcHMpKQorCQkJCQlleGl0KDEpOworCQkJCWJyZWFrOworCQkJY2Fz ZSAyMDoJCQkvKiBub3RpZnktaWRsZS1zdGVwICovCisJCQkJYmVuY2htYXJraW5nX29wdGlv bl9zZXQgPSB0cnVlOworCQkJCWlmICghb3B0aW9uX3BhcnNlX2ludChvcHRhcmcsICItLW5v dGlmeS1pZGxlLXN0ZXAiLCAxLCBJTlRfTUFYLAorCQkJCQkJCQkJICAmbm90aWZ5X2lkbGVf c3RlcCkpCisJCQkJCWV4aXQoMSk7CisJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgogCQkJCS8q IGdldG9wdF9sb25nIGFscmVhZHkgZW1pdHRlZCBhIGNvbXBsYWludCAqLwogCQkJCXBnX2xv Z19lcnJvcl9oaW50KCJUcnkgXCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4i LCBwcm9nbmFtZSk7CkBAIC03MjEwLDYgKzc0NDksMjAgQEAgbWFpbihpbnQgYXJnYywgY2hh ciAqKmFyZ3YpCiAJCQlwZ19mYXRhbCgic29tZSBvZiB0aGUgc3BlY2lmaWVkIG9wdGlvbnMg Y2Fubm90IGJlIHVzZWQgaW4gYmVuY2htYXJraW5nIG1vZGUiKTsKIAl9CiAKKwkvKiBIYW5k bGUgTElTVEVOL05PVElGWSBiZW5jaG1hcmsgbW9kZSAqLworCWlmIChsaXN0ZW5fbm90aWZ5 X21vZGUpCisJeworCQkvKiBFc3RhYmxpc2ggYSBkYXRhYmFzZSBjb25uZWN0aW9uIGZvciBz ZXR1cCAqLworCQlpZiAoKGNvbiA9IGRvQ29ubmVjdCgpKSA9PSBOVUxMKQorCQkJcGdfZmF0 YWwoImNvdWxkIG5vdCBjb25uZWN0IHRvIGRhdGFiYXNlIik7CisKKwkJLyogUnVuIHRoZSBM SVNURU4vTk9USUZZIGJlbmNobWFyayAqLworCQlydW5MaXN0ZW5Ob3RpZnlCZW5jaG1hcmso KTsKKworCQlQUWZpbmlzaChjb24pOworCQlleGl0KDApOworCX0KKwogCWlmIChueGFjdHMg PiAwICYmIGR1cmF0aW9uID4gMCkKIAkJcGdfZmF0YWwoInNwZWNpZnkgZWl0aGVyIGEgbnVt YmVyIG9mIHRyYW5zYWN0aW9ucyAoLXQpIG9yIGEgZHVyYXRpb24gKC1UKSwgbm90IGJvdGgi KTsKIAo= --abc434ae136a419d9ec676bf29f660b5--