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 1v8s6s-006C5k-Po for pgsql-hackers@arkaria.postgresql.org; Wed, 15 Oct 2025 03:23:30 +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 1v8s6q-004KCS-IJ for pgsql-hackers@arkaria.postgresql.org; Wed, 15 Oct 2025 03:23:27 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1v8s6p-004KCJ-EL for pgsql-hackers@lists.postgresql.org; Wed, 15 Oct 2025 03:23:27 +0000 Received: from fout-a6-smtp.messagingengine.com ([103.168.172.149]) by makus.postgresql.org with smtp (Exim 4.96) (envelope-from ) id 1v8s6m-001p5v-1C for pgsql-hackers@postgresql.org; Wed, 15 Oct 2025 03:23:25 +0000 Received: from phl-compute-04.internal (phl-compute-04.internal [10.202.2.44]) by mailfout.phl.internal (Postfix) with ESMTP id 1F919EC0180; Tue, 14 Oct 2025 23:23:23 -0400 (EDT) Received: from phl-imap-03 ([10.202.2.93]) by phl-compute-04.internal (MEProxy); Tue, 14 Oct 2025 23:23:23 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=compiler.org; h= cc: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=1760498603; x=1760585003; bh=vbyTUwLVws M6RbWSUJm9DAu2wR/NkUoMKfwx8zcqwX4=; b=QjXLHq4WhiIsD2Czcb3hQpwwIZ LjkZk9W/6bzEF41hvMjIbQ0sMPBYpCm0RR8vgyZKl9buDes/LuPs9daFCR6P2xHB CUVvLsEkJpimzqJKMrGyAnYN1HY20ILcLVgKTt4L/8U4A1yr60TpiVkliM1LrCBi 7G8UqD4Z7aDtSGfLbh4LMTADiSYjpMFaasuMmsM3QZzYcC0tOXQ34jmnr72ANQ0P DghWmpw5mSplaiuW5E/SHpZ6DMUEOpc0Rp4ob2BK8yrbssyb8ttD+nCfsr2B/dcd U3AWw32S9U7rFGqYPAFJlW96os4T7h90x5Isue1y5QL2N0myC2SY9wsnmtFQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc: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= 1760498603; x=1760585003; bh=vbyTUwLVwsM6RbWSUJm9DAu2wR/NkUoMKfw x8zcqwX4=; b=ZmvV+poRmwT5pv5PLK6FJ5n4DaKH0U28XTKu7K1eE5TRTBxUIXI 0N5BanYIogG3ZHe7w1ZELqv9+XkQlmo30q0bIjOd+SPP0dx2z5+DP4B2vIoeTAPN cotIcdoj2ErGICmvfjfZo7POfGY/loE5qL7ED9EIAgVwuLiVcVJEOdvw+voBwZH9 s0pO/s5kiffvURvYqJy9dqVqenCd7aZf/e8wp1e8Ev01nGUeXO+TNixXkA0j1Uhm DkFU6e1/U+hFfgN11E6x21W/SQQr56WlRqXMEd/Tvf60f3KAN1W172IRH0ZTDhY3 KjHDIqKYx9o1BAJsbpM4Jm1ZiPDe52tTcPg== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggdduvddvfedvucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfurfetoffkrfgpnffqhgenuceu rghilhhouhhtmecufedttdenucenucfjughrpefoggffhffvvefkjghfufgtsehmtderre ertddtnecuhfhrohhmpedflfhovghlucflrggtohgsshhonhdfuceojhhovghlsegtohhm phhilhgvrhdrohhrgheqnecuggftrfgrthhtvghrnhepfffgleffffdvhefhieegfeeije dujedvieeuveeugefgveeukeevieethefhteeinecuvehluhhsthgvrhfuihiivgeptden ucfrrghrrghmpehmrghilhhfrhhomhepjhhovghlsegtohhmphhilhgvrhdrohhrghdpnh gspghrtghpthhtohepvddpmhhouggvpehsmhhtphhouhhtpdhrtghpthhtohepphhgshhq lhdqhhgrtghkvghrshesphhoshhtghhrvghsqhhlrdhorhhgpdhrtghpthhtohepthhglh esshhsshdrphhghhdrphgrrdhush X-ME-Proxy: Feedback-ID: ic6394509:Fastmail Received: by mailuser.phl.internal (Postfix, from userid 501) id 961A218E0054; Tue, 14 Oct 2025 23:23:22 -0400 (EDT) X-Mailer: MessagingEngine.com Webmail Interface MIME-Version: 1.0 X-ThreadId: AZ7XRsRLdGms Date: Wed, 15 Oct 2025 05:22:59 +0200 From: "Joel Jacobson" To: "Tom Lane" Cc: pgsql-hackers Message-Id: <2a30bcf1-aee2-4b07-a302-11e4b350adaf@app.fastmail.com> In-Reply-To: <1009807.1760476747@sss.pgh.pa.us> 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> <8c71183a-0d28-4bcf-a806-78446ff95404@app.fastmail.com> <1009807.1760476747@sss.pgh.pa.us> Subject: Re: Optimize LISTEN/NOTIFY Content-Type: multipart/mixed; boundary=70a80106b5ed4cb8a06ec8618b781dfc List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --70a80106b5ed4cb8a06ec8618b781dfc Content-Type: text/plain Content-Transfer-Encoding: 7bit On Tue, Oct 14, 2025, at 23:19, Tom Lane wrote: > "Joel Jacobson" writes: >> 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.) > > Right. What the heavyweight lock buys for us in this context is that > we can be sure no other would-be notifier can insert any messages > in between ours, even though we may take and release NotifyQueueLock > several times to allow readers to sneak in. That in turn means that > it's safe to advance readers over that whole set of messages if we > know we didn't wake them up for any of those messages. Right. > There is a false-positive possibility if a reader was previously > signaled but hasn't yet awoken: we will think that maybe we signaled > it and hence not advance its pointer. This is an error in the safe > direction however, and it will advance its pointer when it does > wake up. I've added a comment on this in SignalBackends. > A potential complaint is that we are doubling down on the need for > that heavyweight lock, despite the upthread discussion about maybe > getting rid of it for better scalability. However, this patch > only requires holding a lock across all the insertions, not holding > it through commit which I think is the true scalability blockage. > > If we did want to get rid of that lock, we'd only need to stop > releasing NotifyQueueLock at insertion page boundary crossings, > which I suspect isn't really that useful anyway. Right. So if the upthread discussion would get rid of the heavyweight lock we would just need to hold the exclusive lock across all insertions. Good to know the two efforts are not conflicting. > (In connection > with that though, I think you ought to capture both the "before" and > "after" pointers within that lock interval, not expend another lock > acquisition later.) Fixed. > It would be good if the patch's comments made these points ... I've added a comment inside PreCommit_Notify on how it would suffice to hold the exclusive lock across all insertions, for the purpose of setting the "before" and "after" pointers, if the heavyweight lock would be removed. > also, the comments above struct AsyncQueueControl need to be > updated, because changing some other backend's queue pos is > not legal under any of the stated rules. Fixed. >> Given all the experiments since my earlier message, here is a fresh, >> self-contained write-up: > > I'm getting itchy about removing the local listenChannels list, > because what you've done is to replace it with a shared data > structure that can't be accessed without a good deal of locking > overhead. That seems like it could easily be a net loss. I agree, I also prefer the local listenChannels list. I've changed it back. > Also, I really do not like this implementation of > GetPendingNotifyChannels, as it looks like O(N^2) effort. > The potentially large length of the list it builds is scary too, > considering the comments that SignalBackends had better not fail. > If we have to do it that way it'd be better to collect the list > during PreCommit_Notify. I agree. I've removed GetPendingNotifyChannels and added a local list, named pendingNotifyChannels instead, collected during PreCommit_Notify. > The "Avoid needing to wake listening backends" loop should probably > be combined with the loop after it; I don't quite see the point of > iterating over all the listening backends twice. I agree. Fixed. > Also, why is the > second loop only paying attention to backends in the same DB? Fixed. (We're already sure it's the same DB, since that's part of the hash key. I've removed the redundant check.) > I don't love adding queueHeadBeforeWrite and queueHeadAfterWrite into > the pendingNotifies data structure, as they have no visible connection > to that. In particular, we will have multiple NotificationList > structs when there's nested transactions, and it's certainly > meaningless to have such fields in more than one place. Probably > just making them independent static variables is the best way. Fixed. > The overall layout of what the patch injects where needs another > look. I don't like inserting code before typedefs and static > variables within a module: that's not our normal layout style. Fixed. /Joel --70a80106b5ed4cb8a06ec8618b781dfc Content-Disposition: attachment; filename*0="0001-optimize_listen_notify-v17.patch" Content-Type: application/octet-stream; name="=?UTF-8?Q?0001-optimize=5Flisten=5Fnotify-v17.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= --70a80106b5ed4cb8a06ec8618b781dfc Content-Disposition: attachment; filename*0="0002-optimize_listen_notify-v17.patch" Content-Type: application/octet-stream; name="=?UTF-8?Q?0002-optimize=5Flisten=5Fnotify-v17.patch?=" Content-Transfer-Encoding: base64 RnJvbSAyMWUyODczMGI5YzJhMjdkM2EyYWU5N2VlMzFiMTJlOTkzMWYxYWFiIE1vbiBTZXAg 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 ZSB0YWlsIGNhbiBhZHZhbmNlLgoKT3RoZXIgbm90ZXMKLS0tLS0tLS0tLS0KCiogTWFpbnRh aW5zIGR1YWwgZGF0YSBzdHJ1Y3R1cmVzOiBhIHNoYXJlZCBjaGFubmVsSGFzaCBmb3IgZGV0 ZXJtaW5pbmcKICB3aGljaCBiYWNrZW5kcyB0byBzaWduYWwsIGFuZCBhIGxvY2FsIHBlci1i YWNrZW5kIGxpc3RlbkNoYW5uZWxzIGxpc3QKICBmb3IgZmFzdCBsb2NrLWZyZWUgbG9va3Vw cyBkdXJpbmcgbm90aWZpY2F0aW9uIHByb2Nlc3NpbmcuIFRoaXMgYXZvaWRzCiAgY29udGVu dGlvbiBvbiB0aGUgc2hhcmVkIGhhc2ggZHVyaW5nIHRoZSBoaWdoLWZyZXF1ZW5jeSBJc0xp c3RlbmluZ09uCiAgY2hlY2tzIHRoYXQgb2NjdXIgZm9yIGV2ZXJ5IG5vdGlmaWNhdGlvbiBy ZWFkIGZyb20gdGhlIHF1ZXVlLgoqIEJhY2tlbmRzIHJlbWFpbiByZWdpc3RlcmVkIGluIHRo ZSBnbG9iYWwgbGlzdGVuZXIgbGlzdCBhcyBsb25nIGFzCiAgbGlzdGVuQ2hhbm5lbHMgaXMg bm9uLWVtcHR5LgoqIEFkZHMgTFdMb2NrIHRyYW5jaGUgTk9USUZZX0NIQU5ORUxfSEFTSCBh bmQgd2FpdCBldmVudAogIE5vdGlmeUNoYW5uZWxIYXNoIGZvciB2aXNpYmlsaXR5LgoqIE5v IHVzZXItdmlzaWJsZSBiZWhhdmlvcmFsIGNoYW5nZXM7IHRoaXMgaXMgYW4gaW50ZXJuYWwg b3B0aW1pemF0aW9uCiAgb25seS4KLS0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy9hc3luYy5j ICAgICAgICAgICAgICAgICAgfCA1MjggKysrKysrKysrKysrKysrKy0tCiAuLi4vdXRpbHMv YWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50eHQgICAgICAgfCAgIDEgKwogc3JjL2luY2x1 ZGUvc3RvcmFnZS9sd2xvY2tsaXN0LmggICAgICAgICAgICAgIHwgICAxICsKIHNyYy90b29s cy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAgMiArCiA0IGZpbGVz IGNoYW5nZWQsIDQ4NyBpbnNlcnRpb25zKCspLCA0NSBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9hc3luYy5jIGIvc3JjL2JhY2tlbmQvY29tbWFu ZHMvYXN5bmMuYwppbmRleCA0YmQzN2Q1YmViNS4uY2VjZDQ5NThkZWEgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFu ZHMvYXN5bmMuYwpAQCAtMjQsOCArMjQsMTAgQEAKICAqCSAgQWxsIG5vdGlmaWNhdGlvbiBt ZXNzYWdlcyBhcmUgcGxhY2VkIGluIHRoZSBxdWV1ZSBhbmQgbGF0ZXIgcmVhZCBvdXQKICAq CSAgYnkgbGlzdGVuaW5nIGJhY2tlbmRzLgogICoKLSAqCSAgVGhlcmUgaXMgbm8gY2VudHJh bCBrbm93bGVkZ2Ugb2Ygd2hpY2ggYmFja2VuZCBsaXN0ZW5zIG9uIHdoaWNoIGNoYW5uZWw7 Ci0gKgkgIGV2ZXJ5IGJhY2tlbmQgaGFzIGl0cyBvd24gbGlzdCBvZiBpbnRlcmVzdGluZyBj aGFubmVscy4KKyAqCSAgV2UgYWxzbyBtYWludGFpbiBhIGR5bmFtaWMgc2hhcmVkIGhhc2gg dGFibGUgKGRzaGFzaCkgdGhhdCBtYXBzIGNoYW5uZWwKKyAqCSAgbmFtZXMgdG8gdGhlIHNl dCBvZiBiYWNrZW5kcyBsaXN0ZW5pbmcgb24gZWFjaCBjaGFubmVsLiBUaGlzIHRhYmxlIGlz CisgKgkgIGNyZWF0ZWQgbGF6aWx5IG9uIHRoZSBmaXJzdCBMSVNURU4gY29tbWFuZCBhbmQg Z3Jvd3MgZHluYW1pY2FsbHkgYXMKKyAqCSAgbmVlZGVkLgogICoKICAqCSAgQWx0aG91Z2gg dGhlcmUgaXMgb25seSBvbmUgcXVldWUsIG5vdGlmaWNhdGlvbnMgYXJlIHRyZWF0ZWQgYXMg YmVpbmcKICAqCSAgZGF0YWJhc2UtbG9jYWw7IHRoaXMgaXMgZG9uZSBieSBpbmNsdWRpbmcg dGhlIHNlbmRlcidzIGRhdGFiYXNlIE9JRApAQCAtNjgsMTYgKzcwLDI3IEBACiAgKgkgIENv bW1pdFRyYW5zYWN0aW9uKCkgd2hpY2ggd2lsbCB0aGVuIGRvIHRoZSBhY3R1YWwgdHJhbnNh Y3Rpb24gY29tbWl0LgogICoKICAqCSAgQWZ0ZXIgY29tbWl0IHdlIGFyZSBjYWxsZWQgYW5v dGhlciB0aW1lIChBdENvbW1pdF9Ob3RpZnkoKSkuIEhlcmUgd2UKLSAqCSAgbWFrZSBhbnkg YWN0dWFsIHVwZGF0ZXMgdG8gdGhlIGVmZmVjdGl2ZSBsaXN0ZW4gc3RhdGUgKGxpc3RlbkNo YW5uZWxzKS4KKyAqCSAgbWFrZSBhbnkgYWN0dWFsIHVwZGF0ZXMgdG8gdGhlIGVmZmVjdGl2 ZSBsaXN0ZW4gc3RhdGUgKGNoYW5uZWxIYXNoKS4KICAqCSAgVGhlbiB3ZSBzaWduYWwgYW55 IGJhY2tlbmRzIHRoYXQgbWF5IGJlIGludGVyZXN0ZWQgaW4gb3VyIG1lc3NhZ2VzCiAgKgkg IChpbmNsdWRpbmcgb3VyIG93biBiYWNrZW5kLCBpZiBsaXN0ZW5pbmcpLiAgVGhpcyBpcyBk b25lIGJ5Ci0gKgkgIFNpZ25hbEJhY2tlbmRzKCksIHdoaWNoIHNjYW5zIHRoZSBsaXN0IG9m IGxpc3RlbmluZyBiYWNrZW5kcyBhbmQgc2VuZHMgYQotICoJICBQUk9DU0lHX05PVElGWV9J TlRFUlJVUFQgc2lnbmFsIHRvIGV2ZXJ5IGxpc3RlbmluZyBiYWNrZW5kICh3ZSBkb24ndAot ICoJICBrbm93IHdoaWNoIGJhY2tlbmQgaXMgbGlzdGVuaW5nIG9uIHdoaWNoIGNoYW5uZWwg c28gd2UgbXVzdCBzaWduYWwgdGhlbQotICoJICBhbGwpLiAgV2UgY2FuIGV4Y2x1ZGUgYmFj a2VuZHMgdGhhdCBhcmUgYWxyZWFkeSB1cCB0byBkYXRlLCB0aG91Z2gsIGFuZAotICoJICB3 ZSBjYW4gYWxzbyBleGNsdWRlIGJhY2tlbmRzIHRoYXQgYXJlIGluIG90aGVyIGRhdGFiYXNl cyAodW5sZXNzIHRoZXkKLSAqCSAgYXJlIHdheSBiZWhpbmQgYW5kIHNob3VsZCBiZSBraWNr ZWQgdG8gbWFrZSB0aGVtIGFkdmFuY2UgdGhlaXIKLSAqCSAgcG9pbnRlcnMpLgorICoJICBT aWduYWxCYWNrZW5kcygpLCB3aGljaCBjb25zdWx0cyB0aGUgc2hhcmVkIGNoYW5uZWwgaGFz aCB0YWJsZSB0bworICoJICBpZGVudGlmeSBsaXN0ZW5lcnMgZm9yIHRoZSBjaGFubmVscyB0 aGF0IGhhdmUgcGVuZGluZyBub3RpZmljYXRpb25zCisgKgkgIGluIHRoZSBjdXJyZW50IGRh dGFiYXNlLiAgRWFjaCBzZWxlY3RlZCBiYWNrZW5kIGlzIG1hcmtlZCBhcyBoYXZpbmcgYQor ICoJICB3YWtldXAgcGVuZGluZyB0byBhdm9pZCBkdXBsaWNhdGUgc2lnbmFscywgYW5kIGEg UFJPQ1NJR19OT1RJRllfSU5URVJSVVBUCisgKgkgIHNpZ25hbCBpcyBzZW50IHRvIGl0Lgor ICoKKyAqCSAgV2hlbiB3cml0aW5nIG5vdGlmaWNhdGlvbnMsIFByZUNvbW1pdF9Ob3RpZnko KSByZWNvcmRzIHRoZSBxdWV1ZSBoZWFkCisgKgkgIHBvc2l0aW9uIGJvdGggYmVmb3JlIGFu ZCBhZnRlciB0aGUgd3JpdGUuICBCZWNhdXNlIGFsbCB3cml0ZXJzIHNlcmlhbGl6ZQorICoJ ICBvbiBhIGNsdXN0ZXItd2lkZSBoZWF2eXdlaWdodCBsb2NrLCBubyBiYWNrZW5kIGNhbiBp bnNlcnQgZW50cmllcyBiZXR3ZWVuCisgKgkgIHRoZXNlIHR3byBwb2ludHMuICBTaWduYWxC YWNrZW5kcygpIHVzZXMgdGhpcyBmYWN0IHRvIGRpcmVjdGx5IGFkdmFuY2UgYW55CisgKgkg IGJhY2tlbmQgdGhhdCBpcyBzdGlsbCBwb3NpdGlvbmVkIGF0IHRoZSBvbGQgaGVhZCwgYXZv aWRpbmcgdW5uZWNlc3NhcnkKKyAqCSAgd2FrZXVwcyBmb3IgaWRsZSBsaXN0ZW5lcnMgdGhh dCBoYXZlIG5vdGhpbmcgdG8gcmVhZC4KKyAqCisgKgkgIFRvIG1haW50YWluIHF1ZXVlIGhl YWx0aCwgU2lnbmFsQmFja2VuZHMoKSBhbHNvIHdha2VzIG9uZSBiYWNrZW5kCisgKgkgIHBv c2l0aW9uZWQgYXQgdGhlIGdsb2JhbCBxdWV1ZSB0YWlsIHRvIGhlbHAgYWR2YW5jZSBpdCwg YW5kIHNpZ25hbHMKKyAqCSAgYW55IGJhY2tlbmQgdGhhdCBoYXMgZmFsbGVuIHRvbyBmYXIg YmVoaW5kIHRvIGNhdGNoIHVwLiAgVGhlc2UgbWVhc3VyZXMKKyAqCSAgcHJldmVudCB0aGUg bm90aWZpY2F0aW9uIHF1ZXVlIGZyb20gZ3Jvd2luZyBpbmRlZmluaXRlbHksIHdoaWxlIG1v c3RseQorICoJICBsaW1pdGluZyB3YWtldXBzIHRvIHRoZSBiYWNrZW5kcyB0aGF0IGFjdHVh bGx5IG5lZWQgdGhlbS4KICAqCiAgKgkgIEZpbmFsbHksIGFmdGVyIHdlIGFyZSBvdXQgb2Yg dGhlIHRyYW5zYWN0aW9uIGFsdG9nZXRoZXIgYW5kIGFib3V0IHRvIGdvCiAgKgkgIGlkbGUs IHdlIHNjYW4gdGhlIHF1ZXVlIGZvciBtZXNzYWdlcyB0aGF0IG5lZWQgdG8gYmUgc2VudCB0 byBvdXIKQEAgLTEyOCw2ICsxNDEsNyBAQAogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1 ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHN0cmluZy5o PgogCiAjaW5jbHVkZSAiYWNjZXNzL3BhcmFsbGVsLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3Ns cnUuaCIKQEAgLTEzNywxNCArMTUxLDE3IEBACiAjaW5jbHVkZSAiY29tbWFuZHMvYXN5bmMu aCIKICNpbmNsdWRlICJjb21tb24vaGFzaGZuLmgiCiAjaW5jbHVkZSAiZnVuY2FwaS5oIgor I2luY2x1ZGUgImxpYi9kc2hhc2guaCIKICNpbmNsdWRlICJsaWJwcS9saWJwcS5oIgogI2lu Y2x1ZGUgImxpYnBxL3BxZm9ybWF0LmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5j bHVkZSAic3RvcmFnZS9kc21fcmVnaXN0cnkuaCIKICNpbmNsdWRlICJzdG9yYWdlL2lwYy5o IgogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY3Np Z25hbC5oIgogI2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKICNpbmNsdWRlICJ1dGlscy9i dWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2RzYS5oIgogI2luY2x1ZGUgInV0aWxzL2d1 Y19ob29rcy5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVkZSAidXRp bHMvcHNfc3RhdHVzLmgiCkBAIC0xNjIsNiArMTc5LDI5IEBACiAgKi8KICNkZWZpbmUgTk9U SUZZX1BBWUxPQURfTUFYX0xFTkdUSAkoQkxDS1NaIC0gTkFNRURBVEFMRU4gLSAxMjgpCiAK Ky8qCisgKiBDaGFubmVsIGhhc2ggdGFibGUgZGVmaW5pdGlvbnMKKyAqCisgKiBUaGlzIGhh c2ggdGFibGUgbWFwcyAoZGF0YWJhc2UgT0lELCBjaGFubmVsIG5hbWUpIGtleXMgdG8gYXJy YXlzIG9mCisgKiBQcm9jTnVtYmVycyByZXByZXNlbnRpbmcgdGhlIGJhY2tlbmRzIGxpc3Rl bmluZyBvbiBlYWNoIGNoYW5uZWwuCisgKi8KKworI2RlZmluZSBJTklUSUFMX0xJU1RFTkVS U19BUlJBWV9TSVpFIDQKKwordHlwZWRlZiBzdHJ1Y3QgQ2hhbm5lbEhhc2hLZXkKK3sKKwlP aWQJCQlkYm9pZDsKKwljaGFyCQljaGFubmVsW05BTUVEQVRBTEVOXTsKK30gQ2hhbm5lbEhh c2hLZXk7CisKK3R5cGVkZWYgc3RydWN0IENoYW5uZWxFbnRyeQoreworCUNoYW5uZWxIYXNo S2V5IGtleTsKKwlkc2FfcG9pbnRlciBsaXN0ZW5lcnNBcnJheTsgLyogRFNBIHBvaW50ZXIg dG8gUHJvY051bWJlciBhcnJheSAqLworCWludAkJCW51bUxpc3RlbmVyczsJLyogTnVtYmVy IG9mIGxpc3RlbmVycyBjdXJyZW50bHkgc3RvcmVkICovCisJaW50CQkJYWxsb2NhdGVkTGlz dGVuZXJzOyAvKiBBbGxvY2F0ZWQgc2l6ZSBvZiBhcnJheSAqLworfSBDaGFubmVsRW50cnk7 CisKIC8qCiAgKiBTdHJ1Y3QgcmVwcmVzZW50aW5nIGFuIGVudHJ5IGluIHRoZSBnbG9iYWwg bm90aWZ5IHF1ZXVlCiAgKgpAQCAtMjI3LDggKzI2Nyw4IEBAIHR5cGVkZWYgc3RydWN0IFF1 ZXVlUG9zaXRpb24KIC8qCiAgKiBQYXJhbWV0ZXIgZGV0ZXJtaW5pbmcgaG93IG9mdGVuIHdl IHRyeSB0byBhZHZhbmNlIHRoZSB0YWlsIHBvaW50ZXI6CiAgKiB3ZSBkbyB0aGF0IGFmdGVy IGV2ZXJ5IFFVRVVFX0NMRUFOVVBfREVMQVkgcGFnZXMgb2YgTk9USUZZIGRhdGEuICBUaGlz IGlzCi0gKiBhbHNvIHRoZSBkaXN0YW5jZSBieSB3aGljaCBhIGJhY2tlbmQgaW4gYW5vdGhl ciBkYXRhYmFzZSBuZWVkcyB0byBiZQotICogYmVoaW5kIGJlZm9yZSB3ZSdsbCBkZWNpZGUg d2UgbmVlZCB0byB3YWtlIGl0IHVwIHRvIGFkdmFuY2UgaXRzIHBvaW50ZXIuCisgKiBhbHNv IHRoZSBkaXN0YW5jZSBieSB3aGljaCBhIGJhY2tlbmQgbmVlZHMgdG8gYmUgYmVoaW5kIGJl Zm9yZSB3ZSdsbAorICogZGVjaWRlIHdlIG5lZWQgdG8gd2FrZSBpdCB1cCB0byBhZHZhbmNl IGl0cyBwb2ludGVyLgogICoKICAqIFJlc2lzdCB0aGUgdGVtcHRhdGlvbiB0byBtYWtlIHRo aXMgcmVhbGx5IGxhcmdlLiAgV2hpbGUgdGhhdCB3b3VsZCBzYXZlCiAgKiB3b3JrIGluIHNv bWUgcGxhY2VzLCBpdCB3b3VsZCBhZGQgY29zdCBpbiBvdGhlcnMuICBJbiBwYXJ0aWN1bGFy LCB0aGlzCkBAIC0yNDYsNiArMjg2LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUXVldWVCYWNrZW5k U3RhdHVzCiAJT2lkCQkJZGJvaWQ7CQkJLyogYmFja2VuZCdzIGRhdGFiYXNlIE9JRCwgb3Ig SW52YWxpZE9pZCAqLwogCVByb2NOdW1iZXIJbmV4dExpc3RlbmVyOwkvKiBpZCBvZiBuZXh0 IGxpc3RlbmVyLCBvciBJTlZBTElEX1BST0NfTlVNQkVSICovCiAJUXVldWVQb3NpdGlvbiBw b3M7CQkJLyogYmFja2VuZCBoYXMgcmVhZCBxdWV1ZSB1cCB0byBoZXJlICovCisJYm9vbAkJ d2FrZXVwUGVuZGluZzsJLyogc2lnbmFsIHNlbnQgYnV0IG5vdCB5ZXQgcHJvY2Vzc2VkICov CiB9IFF1ZXVlQmFja2VuZFN0YXR1czsKIAogLyoKQEAgLTI2MCw5ICszMDEsOSBAQCB0eXBl ZGVmIHN0cnVjdCBRdWV1ZUJhY2tlbmRTdGF0dXMKICAqIChzaW5jZSBubyBvdGhlciBiYWNr ZW5kIHdpbGwgaW5zcGVjdCBpdCkuCiAgKgogICogV2hlbiBob2xkaW5nIE5vdGlmeVF1ZXVl TG9jayBpbiBFWENMVVNJVkUgbW9kZSwgYmFja2VuZHMgY2FuIGluc3BlY3QgdGhlCi0gKiBl bnRyaWVzIG9mIG90aGVyIGJhY2tlbmRzIGFuZCBhbHNvIGNoYW5nZSB0aGUgaGVhZCBwb2lu dGVyLiBXaGVuIGhvbGRpbmcKLSAqIGJvdGggTm90aWZ5UXVldWVMb2NrIGFuZCBOb3RpZnlR dWV1ZVRhaWxMb2NrIGluIEVYQ0xVU0lWRSBtb2RlLCBiYWNrZW5kcwotICogY2FuIGNoYW5n ZSB0aGUgdGFpbCBwb2ludGVycy4KKyAqIGVudHJpZXMgb2Ygb3RoZXIgYmFja2VuZHMsIGNo YW5nZSB0aGUgaGVhZCBwb2ludGVyLCBhbmQgYWR2YW5jZSBvdGhlcgorICogYmFja2VuZHMn IHF1ZXVlIHBvc2l0aW9ucy4gV2hlbiBob2xkaW5nIGJvdGggTm90aWZ5UXVldWVMb2NrIGFu ZAorICogTm90aWZ5UXVldWVUYWlsTG9jayBpbiBFWENMVVNJVkUgbW9kZSwgYmFja2VuZHMg Y2FuIGNoYW5nZSB0aGUgdGFpbCBwb2ludGVycy4KICAqCiAgKiBTTFJVIGJ1ZmZlciBwb29s IGlzIGRpdmlkZWQgaW4gYmFua3MgYW5kIGJhbmsgd2lzZSBTTFJVIGxvY2sgaXMgdXNlZCBh cwogICogdGhlIGNvbnRyb2wgbG9jayBmb3IgdGhlIHBnX25vdGlmeSBTTFJVIGJ1ZmZlcnMu CkBAIC0yODgsMTEgKzMyOSwxNiBAQCB0eXBlZGVmIHN0cnVjdCBBc3luY1F1ZXVlQ29udHJv bAogCVByb2NOdW1iZXIJZmlyc3RMaXN0ZW5lcjsJLyogaWQgb2YgZmlyc3QgbGlzdGVuZXIs IG9yCiAJCQkJCQkJCSAqIElOVkFMSURfUFJPQ19OVU1CRVIgKi8KIAlUaW1lc3RhbXBUeiBs YXN0UXVldWVGaWxsV2FybjsJLyogdGltZSBvZiBsYXN0IHF1ZXVlLWZ1bGwgbXNnICovCisJ ZHNhX2hhbmRsZQljaGFubmVsSGFzaERTQTsKKwlkc2hhc2hfdGFibGVfaGFuZGxlIGNoYW5u ZWxIYXNoRFNIOwogCVF1ZXVlQmFja2VuZFN0YXR1cyBiYWNrZW5kW0ZMRVhJQkxFX0FSUkFZ X01FTUJFUl07CiB9IEFzeW5jUXVldWVDb250cm9sOwogCiBzdGF0aWMgQXN5bmNRdWV1ZUNv bnRyb2wgKmFzeW5jUXVldWVDb250cm9sOwogCitzdGF0aWMgZHNhX2FyZWEgKmNoYW5uZWxE U0EgPSBOVUxMOworc3RhdGljIGRzaGFzaF90YWJsZSAqY2hhbm5lbEhhc2ggPSBOVUxMOwor CiAjZGVmaW5lIFFVRVVFX0hFQUQJCQkJCShhc3luY1F1ZXVlQ29udHJvbC0+aGVhZCkKICNk ZWZpbmUgUVVFVUVfVEFJTAkJCQkJKGFzeW5jUXVldWVDb250cm9sLT50YWlsKQogI2RlZmlu ZSBRVUVVRV9TVE9QX1BBR0UJCQkJKGFzeW5jUXVldWVDb250cm9sLT5zdG9wUGFnZSkKQEAg LTMwMSw2ICszNDcsNyBAQCBzdGF0aWMgQXN5bmNRdWV1ZUNvbnRyb2wgKmFzeW5jUXVldWVD b250cm9sOwogI2RlZmluZSBRVUVVRV9CQUNLRU5EX0RCT0lEKGkpCQkoYXN5bmNRdWV1ZUNv bnRyb2wtPmJhY2tlbmRbaV0uZGJvaWQpCiAjZGVmaW5lIFFVRVVFX05FWFRfTElTVEVORVIo aSkJCShhc3luY1F1ZXVlQ29udHJvbC0+YmFja2VuZFtpXS5uZXh0TGlzdGVuZXIpCiAjZGVm aW5lIFFVRVVFX0JBQ0tFTkRfUE9TKGkpCQkoYXN5bmNRdWV1ZUNvbnRyb2wtPmJhY2tlbmRb aV0ucG9zKQorI2RlZmluZSBRVUVVRV9CQUNLRU5EX1dBS0VVUF9QRU5ESU5HKGkpCShhc3lu Y1F1ZXVlQ29udHJvbC0+YmFja2VuZFtpXS53YWtldXBQZW5kaW5nKQogCiAvKgogICogVGhl IFNMUlUgYnVmZmVyIGFyZWEgdGhyb3VnaCB3aGljaCB3ZSBhY2Nlc3MgdGhlIG5vdGlmaWNh dGlvbiBxdWV1ZQpAQCAtNDE4LDYgKzQ2NSwyMCBAQCBzdGF0aWMgYm9vbCB1bmxpc3RlbkV4 aXRSZWdpc3RlcmVkID0gZmFsc2U7CiAvKiBUcnVlIGlmIHdlJ3JlIGN1cnJlbnRseSByZWdp c3RlcmVkIGFzIGEgbGlzdGVuZXIgaW4gYXN5bmNRdWV1ZUNvbnRyb2wgKi8KIHN0YXRpYyBi b29sIGFtUmVnaXN0ZXJlZExpc3RlbmVyID0gZmFsc2U7CiAKKy8qCisgKiBRdWV1ZSBoZWFk IHBvc2l0aW9ucyBmb3IgZGlyZWN0IGFkdmFuY2VtZW50LgorICogVGhlc2UgYXJlIGNhcHR1 cmVkIGR1cmluZyBQcmVDb21taXRfTm90aWZ5IHdoaWxlIGhvbGRpbmcgdGhlIGhlYXZ5d2Vp Z2h0CisgKiBsb2NrIG9uIGRhdGFiYXNlIDAsIGVuc3VyaW5nIG5vIG90aGVyIGJhY2tlbmQg Y2FuIGluc2VydCBub3RpZmljYXRpb25zCisgKiBiZXR3ZWVuIHRoZW0uICBTaWduYWxCYWNr ZW5kcyB1c2VzIHRoZXNlIHRvIGFkdmFuY2UgaWRsZSBiYWNrZW5kcy4KKyAqLworc3RhdGlj IFF1ZXVlUG9zaXRpb24gcXVldWVIZWFkQmVmb3JlV3JpdGU7CitzdGF0aWMgUXVldWVQb3Np dGlvbiBxdWV1ZUhlYWRBZnRlcldyaXRlOworCisvKgorICogTGlzdCBvZiBjaGFubmVscyB3 aXRoIHBlbmRpbmcgbm90aWZpY2F0aW9ucyBpbiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbi4K KyAqLworc3RhdGljIExpc3QgKnBlbmRpbmdOb3RpZnlDaGFubmVscyA9IE5JTDsKKwogLyog aGF2ZSB3ZSBhZHZhbmNlZCB0byBhIHBhZ2UgdGhhdCdzIGEgbXVsdGlwbGUgb2YgUVVFVUVf Q0xFQU5VUF9ERUxBWT8gKi8KIHN0YXRpYyBib29sIHRyeUFkdmFuY2VUYWlsID0gZmFsc2U7 CiAKQEAgLTQ1Nyw2ICs1MTgsOSBAQCBzdGF0aWMgdm9pZCBBZGRFdmVudFRvUGVuZGluZ05v dGlmaWVzKE5vdGlmaWNhdGlvbiAqbik7CiBzdGF0aWMgdWludDMyIG5vdGlmaWNhdGlvbl9o YXNoKGNvbnN0IHZvaWQgKmtleSwgU2l6ZSBrZXlzaXplKTsKIHN0YXRpYyBpbnQJbm90aWZp Y2F0aW9uX21hdGNoKGNvbnN0IHZvaWQgKmtleTEsIGNvbnN0IHZvaWQgKmtleTIsIFNpemUg a2V5c2l6ZSk7CiBzdGF0aWMgdm9pZCBDbGVhclBlbmRpbmdBY3Rpb25zQW5kTm90aWZpZXMo dm9pZCk7CitzdGF0aWMgaW5saW5lIHZvaWQgQ2hhbm5lbEhhc2hQcmVwYXJlS2V5KENoYW5u ZWxIYXNoS2V5ICprZXksIE9pZCBkYm9pZCwgY29uc3QgY2hhciAqY2hhbm5lbCk7CitzdGF0 aWMgZHNoYXNoX2hhc2ggY2hhbm5lbEhhc2hGdW5jKGNvbnN0IHZvaWQgKmtleSwgc2l6ZV90 IHNpemUsIHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBpbml0Q2hhbm5lbEhhc2godm9pZCk7 CiAKIC8qCiAgKiBDb21wdXRlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIHF1ZXVlIHBh Z2UgbnVtYmVycy4KQEAgLTQ3OCw2ICs1NDIsODAgQEAgYXN5bmNRdWV1ZVBhZ2VQcmVjZWRl cyhpbnQ2NCBwLCBpbnQ2NCBxKQogCXJldHVybiBwIDwgcTsKIH0KIAorLyoKKyAqIGNoYW5u ZWxIYXNoRnVuYworICoJCUhhc2ggZnVuY3Rpb24gZm9yIGNoYW5uZWwga2V5cy4KKyAqLwor c3RhdGljIGRzaGFzaF9oYXNoCitjaGFubmVsSGFzaEZ1bmMoY29uc3Qgdm9pZCAqa2V5LCBz aXplX3Qgc2l6ZSwgdm9pZCAqYXJnKQoreworCWNvbnN0IENoYW5uZWxIYXNoS2V5ICprID0g KGNvbnN0IENoYW5uZWxIYXNoS2V5ICopIGtleTsKKwlkc2hhc2hfaGFzaCBoOworCisJaCA9 IERhdHVtR2V0VUludDMyKGhhc2hfdWludDMyKGstPmRib2lkKSk7CisJaCBePSBEYXR1bUdl dFVJbnQzMihoYXNoX2FueSgoY29uc3QgdW5zaWduZWQgY2hhciAqKSBrLT5jaGFubmVsLAor CQkJCQkJCQkgc3RybmxlbihrLT5jaGFubmVsLCBOQU1FREFUQUxFTikpKTsKKworCXJldHVy biBoOworfQorCisvKiBwYXJhbWV0ZXJzIGZvciB0aGUgY2hhbm5lbCBoYXNoIHRhYmxlICov CitzdGF0aWMgY29uc3QgZHNoYXNoX3BhcmFtZXRlcnMgY2hhbm5lbERTSFBhcmFtcyA9IHsK KwlzaXplb2YoQ2hhbm5lbEhhc2hLZXkpLAorCXNpemVvZihDaGFubmVsRW50cnkpLAorCWRz aGFzaF9tZW1jbXAsCisJY2hhbm5lbEhhc2hGdW5jLAorCWRzaGFzaF9tZW1jcHksCisJTFdU UkFOQ0hFX05PVElGWV9DSEFOTkVMX0hBU0gKK307CisKKy8qCisgKiBpbml0Q2hhbm5lbEhh c2gKKyAqCQlMYXp5IGluaXRpYWxpemF0aW9uIG9mIHRoZSBjaGFubmVsIGhhc2ggdGFibGUu CisgKi8KK3N0YXRpYyB2b2lkCitpbml0Q2hhbm5lbEhhc2godm9pZCkKK3sKKwlNZW1vcnlD b250ZXh0IG9sZGNvbnRleHQ7CisKKwkvKiBRdWljayBleGl0IGlmIHdlIGFscmVhZHkgZGlk IHRoaXMgKi8KKwlpZiAoYXN5bmNRdWV1ZUNvbnRyb2wtPmNoYW5uZWxIYXNoRFNIICE9IERT SEFTSF9IQU5ETEVfSU5WQUxJRCAmJgorCQljaGFubmVsSGFzaCAhPSBOVUxMKQorCQlyZXR1 cm47CisKKwkvKiBPdGhlcndpc2UsIHVzZSBhIGxvY2sgdG8gZW5zdXJlIG9ubHkgb25lIHBy b2Nlc3MgY3JlYXRlcyB0aGUgdGFibGUgKi8KKwlMV0xvY2tBY3F1aXJlKE5vdGlmeVF1ZXVl TG9jaywgTFdfRVhDTFVTSVZFKTsKKworCS8qIEJlIHN1cmUgYW55IGxvY2FsIG1lbW9yeSBh bGxvY2F0ZWQgYnkgRFNBIHJvdXRpbmVzIGlzIHBlcnNpc3RlbnQgKi8KKwlvbGRjb250ZXh0 ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKFRvcE1lbW9yeUNvbnRleHQpOworCisJaWYgKGFz eW5jUXVldWVDb250cm9sLT5jaGFubmVsSGFzaERTSCA9PSBEU0hBU0hfSEFORExFX0lOVkFM SUQpCisJeworCQkvKiBJbml0aWFsaXplIGR5bmFtaWMgc2hhcmVkIGhhc2ggdGFibGUgZm9y IGNoYW5uZWwgaGFzaCAqLworCQljaGFubmVsRFNBID0gZHNhX2NyZWF0ZShMV1RSQU5DSEVf Tk9USUZZX0NIQU5ORUxfSEFTSCk7CisJCWRzYV9waW4oY2hhbm5lbERTQSk7CisJCWRzYV9w aW5fbWFwcGluZyhjaGFubmVsRFNBKTsKKwkJY2hhbm5lbEhhc2ggPSBkc2hhc2hfY3JlYXRl KGNoYW5uZWxEU0EsICZjaGFubmVsRFNIUGFyYW1zLCBOVUxMKTsKKworCQkvKiBTdG9yZSBo YW5kbGVzIGluIHNoYXJlZCBtZW1vcnkgZm9yIG90aGVyIGJhY2tlbmRzIHRvIHVzZSAqLwor CQlhc3luY1F1ZXVlQ29udHJvbC0+Y2hhbm5lbEhhc2hEU0EgPSBkc2FfZ2V0X2hhbmRsZShj aGFubmVsRFNBKTsKKwkJYXN5bmNRdWV1ZUNvbnRyb2wtPmNoYW5uZWxIYXNoRFNIID0KKwkJ CWRzaGFzaF9nZXRfaGFzaF90YWJsZV9oYW5kbGUoY2hhbm5lbEhhc2gpOworCX0KKwllbHNl IGlmICghY2hhbm5lbEhhc2gpCisJeworCQkvKiBBdHRhY2ggdG8gZXhpc3RpbmcgZHluYW1p YyBzaGFyZWQgaGFzaCB0YWJsZSAqLworCQljaGFubmVsRFNBID0gZHNhX2F0dGFjaChhc3lu Y1F1ZXVlQ29udHJvbC0+Y2hhbm5lbEhhc2hEU0EpOworCQlkc2FfcGluX21hcHBpbmcoY2hh bm5lbERTQSk7CisJCWNoYW5uZWxIYXNoID0gZHNoYXNoX2F0dGFjaChjaGFubmVsRFNBLCAm Y2hhbm5lbERTSFBhcmFtcywKKwkJCQkJCQkJCWFzeW5jUXVldWVDb250cm9sLT5jaGFubmVs SGFzaERTSCwKKwkJCQkJCQkJCU5VTEwpOworCX0KKworCU1lbW9yeUNvbnRleHRTd2l0Y2hU byhvbGRjb250ZXh0KTsKKwlMV0xvY2tSZWxlYXNlKE5vdGlmeVF1ZXVlTG9jayk7Cit9CisK IC8qCiAgKiBSZXBvcnQgc3BhY2UgbmVlZGVkIGZvciBvdXIgc2hhcmVkIG1lbW9yeSBhcmVh CiAgKi8KQEAgLTUyMSwxMiArNjU5LDE2IEBAIEFzeW5jU2htZW1Jbml0KHZvaWQpCiAJCVFV RVVFX1NUT1BfUEFHRSA9IDA7CiAJCVFVRVVFX0ZJUlNUX0xJU1RFTkVSID0gSU5WQUxJRF9Q Uk9DX05VTUJFUjsKIAkJYXN5bmNRdWV1ZUNvbnRyb2wtPmxhc3RRdWV1ZUZpbGxXYXJuID0g MDsKKwkJYXN5bmNRdWV1ZUNvbnRyb2wtPmNoYW5uZWxIYXNoRFNBID0gRFNBX0hBTkRMRV9J TlZBTElEOworCQlhc3luY1F1ZXVlQ29udHJvbC0+Y2hhbm5lbEhhc2hEU0ggPSBEU0hBU0hf SEFORExFX0lOVkFMSUQ7CisKIAkJZm9yIChpbnQgaSA9IDA7IGkgPCBNYXhCYWNrZW5kczsg aSsrKQogCQl7CiAJCQlRVUVVRV9CQUNLRU5EX1BJRChpKSA9IEludmFsaWRQaWQ7CiAJCQlR VUVVRV9CQUNLRU5EX0RCT0lEKGkpID0gSW52YWxpZE9pZDsKIAkJCVFVRVVFX05FWFRfTElT VEVORVIoaSkgPSBJTlZBTElEX1BST0NfTlVNQkVSOwogCQkJU0VUX1FVRVVFX1BPUyhRVUVV RV9CQUNLRU5EX1BPUyhpKSwgMCwgMCk7CisJCQlRVUVVRV9CQUNLRU5EX1dBS0VVUF9QRU5E SU5HKGkpID0gZmFsc2U7CiAJCX0KIAl9CiAKQEAgLTg5NCw2ICsxMDM2LDcgQEAgUHJlQ29t bWl0X05vdGlmeSh2b2lkKQogCWlmIChwZW5kaW5nTm90aWZpZXMpCiAJewogCQlMaXN0Q2Vs bCAgICpuZXh0Tm90aWZ5OworCQlib29sCQlmaXJzdEl0ZXJhdGlvbiA9IHRydWU7CiAKIAkJ LyoKIAkJICogTWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBhbiBYSUQgYXNzaWduZWQgdG8gdGhl IGN1cnJlbnQgdHJhbnNhY3Rpb24uCkBAIC05MjIsNiArMTA2NSwzNSBAQCBQcmVDb21taXRf Tm90aWZ5KHZvaWQpCiAJCUxvY2tTaGFyZWRPYmplY3QoRGF0YWJhc2VSZWxhdGlvbklkLCBJ bnZhbGlkT2lkLCAwLAogCQkJCQkJIEFjY2Vzc0V4Y2x1c2l2ZUxvY2spOwogCisJCS8qCisJ CSAqIEJ1aWxkIGxpc3Qgb2YgdW5pcXVlIGNoYW5uZWxzIGZvciBTaWduYWxCYWNrZW5kcygp LgorCQkgKi8KKwkJcGVuZGluZ05vdGlmeUNoYW5uZWxzID0gTklMOworCQlmb3JlYWNoX3B0 cihOb3RpZmljYXRpb24sIG4sIHBlbmRpbmdOb3RpZmllcy0+ZXZlbnRzKQorCQl7CisJCQlj aGFyCSAgICpjaGFubmVsID0gbi0+ZGF0YTsKKworCQkJLyogQWRkIGlmIG5vdCBhbHJlYWR5 IGluIGxpc3QgKi8KKwkJCWlmICghbGlzdF9tZW1iZXJfcHRyKHBlbmRpbmdOb3RpZnlDaGFu bmVscywgY2hhbm5lbCkpCisJCQkJcGVuZGluZ05vdGlmeUNoYW5uZWxzID0gbGFwcGVuZChw ZW5kaW5nTm90aWZ5Q2hhbm5lbHMsIGNoYW5uZWwpOworCQl9CisKKwkJLyoKKwkJICogRm9y IHRoZSBkaXJlY3QgYWR2YW5jZW1lbnQgb3B0aW1pemF0aW9uIGluIFNpZ25hbEJhY2tlbmRz KCksIHdlCisJCSAqIG5lZWQgdG8gZW5zdXJlIHRoYXQgbm8gb3RoZXIgYmFja2VuZCBjYW4g aW5zZXJ0IHF1ZXVlIGVudHJpZXMKKwkJICogYmV0d2VlbiBxdWV1ZUhlYWRCZWZvcmVXcml0 ZSBhbmQgcXVldWVIZWFkQWZ0ZXJXcml0ZS4gIFRoZQorCQkgKiBoZWF2eXdlaWdodCBsb2Nr IGFib3ZlIHByb3ZpZGVzIHRoaXMgZ3VhcmFudGVlLCBzaW5jZSBpdCBzZXJpYWxpemVzCisJ CSAqIGFsbCB3cml0ZXJzLgorCQkgKgorCQkgKiBOb3RlOiBpZiB0aGUgaGVhdnl3ZWlnaHQg bG9jayB3ZXJlIGV2ZXIgcmVtb3ZlZCBmb3Igc2NhbGFiaWxpdHkKKwkJICogcmVhc29ucywg d2UgY291bGQgYWNoaWV2ZSB0aGUgc2FtZSBndWFyYW50ZWUgYnkgaG9sZGluZworCQkgKiBO b3RpZnlRdWV1ZUxvY2sgaW4gRVhDTFVTSVZFIG1vZGUgYWNyb3NzIGFsbCBvdXIgaW5zZXJ0 aW9ucywgcmF0aGVyCisJCSAqIHRoYW4gcmVsZWFzaW5nIGFuZCByZWFjcXVpcmluZyBpdCBm b3IgZWFjaCBwYWdlIGFzIHdlIGRvIGJlbG93LgorCQkgKi8KKworCQkvKiBJbml0aWFsaXpl IHF1ZXVlSGVhZEJlZm9yZVdyaXRlIHRvIGEgc2FmZSBkZWZhdWx0ICovCisJCVNFVF9RVUVV RV9QT1MocXVldWVIZWFkQmVmb3JlV3JpdGUsIDAsIDApOworCiAJCS8qIE5vdyBwdXNoIHRo ZSBub3RpZmljYXRpb25zIGludG8gdGhlIHF1ZXVlICovCiAJCW5leHROb3RpZnkgPSBsaXN0 X2hlYWQocGVuZGluZ05vdGlmaWVzLT5ldmVudHMpOwogCQl3aGlsZSAobmV4dE5vdGlmeSAh PSBOVUxMKQpAQCAtOTM5LDEyICsxMTExLDMzIEBAIFByZUNvbW1pdF9Ob3RpZnkodm9pZCkK IAkJCSAqIHBvaW50IGluIHRpbWUgd2UgY2FuIHN0aWxsIHJvbGwgdGhlIHRyYW5zYWN0aW9u IGJhY2suCiAJCQkgKi8KIAkJCUxXTG9ja0FjcXVpcmUoTm90aWZ5UXVldWVMb2NrLCBMV19F WENMVVNJVkUpOworCisJCQkvKgorCQkJICogT24gdGhlIGZpcnN0IGl0ZXJhdGlvbiwgc2F2 ZSB0aGUgcXVldWUgaGVhZCBwb3NpdGlvbiBiZWZvcmUgd2UKKwkJCSAqIHdyaXRlIGFueSBu b3RpZmljYXRpb25zLiAgVGhpcyBpcyB1c2VkIGJ5IFNpZ25hbEJhY2tlbmRzKCkgdG8KKwkJ CSAqIGlkZW50aWZ5IGJhY2tlbmRzIHRoYXQgY2FuIGJlIGFkdmFuY2VkIGRpcmVjdGx5IHdp dGhvdXQgd2FraW5nCisJCQkgKiB0aGVtIHVwLgorCQkJICovCisJCQlpZiAoZmlyc3RJdGVy YXRpb24pCisJCQl7CisJCQkJcXVldWVIZWFkQmVmb3JlV3JpdGUgPSBRVUVVRV9IRUFEOwor CQkJCWZpcnN0SXRlcmF0aW9uID0gZmFsc2U7CisJCQl9CisKIAkJCWFzeW5jUXVldWVGaWxs V2FybmluZygpOwogCQkJaWYgKGFzeW5jUXVldWVJc0Z1bGwoKSkKIAkJCQllcmVwb3J0KEVS Uk9SLAogCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9HUkFNX0xJTUlUX0VYQ0VFREVEKSwK IAkJCQkJCSBlcnJtc2coInRvbyBtYW55IG5vdGlmaWNhdGlvbnMgaW4gdGhlIE5PVElGWSBx dWV1ZSIpKSk7CiAJCQluZXh0Tm90aWZ5ID0gYXN5bmNRdWV1ZUFkZEVudHJpZXMobmV4dE5v dGlmeSk7CisKKwkJCS8qCisJCQkgKiBDYXB0dXJlIHRoZSBxdWV1ZSBoZWFkIGFmdGVyIGVh Y2ggYmF0Y2ggb2YgZW50cmllcy4gIE9uIHRoZQorCQkJICogbGFzdCBpdGVyYXRpb24sIHRo aXMgZ2l2ZXMgdXMgdGhlIGZpbmFsIHF1ZXVlIGhlYWQgcG9zaXRpb24gZm9yCisJCQkgKiBT aWduYWxCYWNrZW5kcygpIHRvIHVzZSB3aGVuIGFkdmFuY2luZyBpZGxlIGJhY2tlbmRzLgor CQkJICovCisJCQlxdWV1ZUhlYWRBZnRlcldyaXRlID0gUVVFVUVfSEVBRDsKKwogCQkJTFdM b2NrUmVsZWFzZShOb3RpZnlRdWV1ZUxvY2spOwogCQl9CiAKQEAgLTExMzUsNiArMTMyOCwx MCBAQCBFeGVjX0xpc3RlblByZUNvbW1pdCh2b2lkKQogc3RhdGljIHZvaWQKIEV4ZWNfTGlz dGVuQ29tbWl0KGNvbnN0IGNoYXIgKmNoYW5uZWwpCiB7CisJQ2hhbm5lbEhhc2hLZXkga2V5 OworCUNoYW5uZWxFbnRyeSAqZW50cnk7CisJYm9vbAkJZm91bmQ7CisJUHJvY051bWJlciAq bGlzdGVuZXJzOwogCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKIAogCS8qIERvIG5vdGhp bmcgaWYgd2UgYXJlIGFscmVhZHkgbGlzdGVuaW5nIG9uIHRoaXMgY2hhbm5lbCAqLwpAQCAt MTE1MiwyMSArMTM0OSw4NCBAQCBFeGVjX0xpc3RlbkNvbW1pdChjb25zdCBjaGFyICpjaGFu bmVsKQogCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oVG9wTWVtb3J5Q29u dGV4dCk7CiAJbGlzdGVuQ2hhbm5lbHMgPSBsYXBwZW5kKGxpc3RlbkNoYW5uZWxzLCBwc3Ry ZHVwKGNoYW5uZWwpKTsKIAlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisK KwkvKiBOb3cgdXBkYXRlIHRoZSBzaGFyZWQgY2hhbm5lbEhhc2ggZm9yIFNpZ25hbEJhY2tl bmRzKCkgdG8gdXNlICovCisJaW5pdENoYW5uZWxIYXNoKCk7CisKKwlDaGFubmVsSGFzaFBy ZXBhcmVLZXkoJmtleSwgTXlEYXRhYmFzZUlkLCBjaGFubmVsKTsKKworCS8qCisJICogRm9y IG5ldyBlbnRyaWVzLCB3ZSBpbml0aWFsaXplIGxpc3RlbmVyc0FycmF5IHRvIEludmFsaWRE c2FQb2ludGVyIGFzIGEKKwkgKiBtYXJrZXIuIFRoaXMgaGFuZGxlcyBib3RoIHRoZSBpbml0 aWFsIGNyZWF0aW9uIGFuZCBwb3RlbnRpYWwgcmV0cnkKKwkgKiBhZnRlciBPT00uCisJICov 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 dGVuZXJzKys7CisKKwlkc2hhc2hfcmVsZWFzZV9sb2NrKGNoYW5uZWxIYXNoLCBlbnRyeSk7 CiB9CiAKIC8qCiAgKiBFeGVjX1VubGlzdGVuQ29tbWl0IC0tLSBzdWJyb3V0aW5lIGZvciBB dENvbW1pdF9Ob3RpZnkKICAqCi0gKiBSZW1vdmUgdGhlIHNwZWNpZmllZCBjaGFubmVsIG5h bWUgZnJvbSBsaXN0ZW5DaGFubmVscy4KKyAqIFJlbW92ZSB0aGUgc3BlY2lmaWVkIGNoYW5u ZWwgZnJvbSB0aGUgbGlzdCBvZiBjaGFubmVscyB3ZSBhcmUgbGlzdGVuaW5nIG9uLgogICov CiBzdGF0aWMgdm9pZAogRXhlY19Vbmxpc3RlbkNvbW1pdChjb25zdCBjaGFyICpjaGFubmVs KQogeworCUNoYW5uZWxIYXNoS2V5IGtleTsKKwlDaGFubmVsRW50cnkgKmVudHJ5OworCVBy b2NOdW1iZXIgKmxpc3RlbmVyczsKIAlMaXN0Q2VsbCAgICpxOworCWludAkJCWk7CiAKIAlp ZiAoVHJhY2Vfbm90aWZ5KQogCQllbG9nKERFQlVHMSwgIkV4ZWNfVW5saXN0ZW5Db21taXQo JXMsJWQpIiwgY2hhbm5lbCwgTXlQcm9jUGlkKTsKIAorCS8qIFJlbW92ZSBmcm9tIG91ciBs b2NhbCBjYWNoZSAqLwogCWZvcmVhY2gocSwgbGlzdGVuQ2hhbm5lbHMpCiAJewogCQljaGFy CSAgICpsY2hhbiA9IChjaGFyICopIGxmaXJzdChxKTsKQEAgLTExNzksNiArMTQzOSw0NiBA QCBFeGVjX1VubGlzdGVuQ29tbWl0KGNvbnN0IGNoYXIgKmNoYW5uZWwpCiAJCX0KIAl9CiAK KwkvKiBOb3cgcmVtb3ZlIGZyb20gdGhlIHNoYXJlZCBjaGFubmVsSGFzaCAqLworCWlmIChj aGFubmVsSGFzaCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlDaGFubmVsSGFzaFByZXBhcmVL ZXkoJmtleSwgTXlEYXRhYmFzZUlkLCBjaGFubmVsKTsKKworCS8qIExvb2sgdXAgdGhlIGNo YW5uZWwgd2l0aCBleGNsdXNpdmUgbG9jayBzbyB3ZSBjYW4gbW9kaWZ5IGl0ICovCisJZW50 cnkgPSBkc2hhc2hfZmluZChjaGFubmVsSGFzaCwgJmtleSwgdHJ1ZSk7CisJaWYgKGVudHJ5 ID09IE5VTEwpCisJCXJldHVybjsKKworCWxpc3RlbmVycyA9IChQcm9jTnVtYmVyICopIGRz YV9nZXRfYWRkcmVzcyhjaGFubmVsRFNBLAorCQkJCQkJCQkJCQkgICBlbnRyeS0+bGlzdGVu ZXJzQXJyYXkpOworCisJZm9yIChpID0gMDsgaSA8IGVudHJ5LT5udW1MaXN0ZW5lcnM7IGkr KykKKwl7CisJCWlmIChsaXN0ZW5lcnNbaV0gPT0gTXlQcm9jTnVtYmVyKQorCQl7CisJCQll bnRyeS0+bnVtTGlzdGVuZXJzLS07CisJCQlpZiAoaSA8IGVudHJ5LT5udW1MaXN0ZW5lcnMp CisJCQkJbWVtbW92ZSgmbGlzdGVuZXJzW2ldLCAmbGlzdGVuZXJzW2kgKyAxXSwKKwkJCQkJ CXNpemVvZihQcm9jTnVtYmVyKSAqIChlbnRyeS0+bnVtTGlzdGVuZXJzIC0gaSkpOworCisJ CQlpZiAoZW50cnktPm51bUxpc3RlbmVycyA9PSAwKQorCQkJeworCQkJCS8qIExhc3QgbGlz dGVuZXIgZm9yIHRoaXMgY2hhbm5lbCAqLworCQkJCWRzYV9mcmVlKGNoYW5uZWxEU0EsIGVu dHJ5LT5saXN0ZW5lcnNBcnJheSk7CisJCQkJZHNoYXNoX2RlbGV0ZV9lbnRyeShjaGFubmVs SGFzaCwgZW50cnkpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWRzaGFzaF9yZWxlYXNl X2xvY2soY2hhbm5lbEhhc2gsIGVudHJ5KTsKKwkJCX0KKworCQkJcmV0dXJuOworCQl9CisJ fQorCisJZHNoYXNoX3JlbGVhc2VfbG9jayhjaGFubmVsSGFzaCwgZW50cnkpOworCiAJLyoK IAkgKiBXZSBkbyBub3QgY29tcGxhaW4gYWJvdXQgdW5saXN0ZW5pbmcgc29tZXRoaW5nIG5v dCBiZWluZyBsaXN0ZW5lZDsKIAkgKiBzaG91bGQgd2U/CkBAIC0xMTkzLDExICsxNDkzLDUx IEBAIEV4ZWNfVW5saXN0ZW5Db21taXQoY29uc3QgY2hhciAqY2hhbm5lbCkKIHN0YXRpYyB2 b2lkCiBFeGVjX1VubGlzdGVuQWxsQ29tbWl0KHZvaWQpCiB7CisJZHNoYXNoX3NlcV9zdGF0 dXMgc3RhdHVzOworCUNoYW5uZWxFbnRyeSAqZW50cnk7CisKIAlpZiAoVHJhY2Vfbm90aWZ5 KQogCQllbG9nKERFQlVHMSwgIkV4ZWNfVW5saXN0ZW5BbGxDb21taXQoJWQpIiwgTXlQcm9j UGlkKTsKIAorCS8qIENsZWFyIG91ciBsb2NhbCBjYWNoZSAqLwogCWxpc3RfZnJlZV9kZWVw KGxpc3RlbkNoYW5uZWxzKTsKIAlsaXN0ZW5DaGFubmVscyA9IE5JTDsKKworCS8qIE5vdyBj bGVhciBmcm9tIHNoYXJlZCBjaGFubmVsSGFzaCAqLworCWlmIChjaGFubmVsSGFzaCA9PSBO VUxMKQorCQlyZXR1cm47CisKKwlkc2hhc2hfc2VxX2luaXQoJnN0YXR1cywgY2hhbm5lbEhh c2gsIHRydWUpOworCXdoaWxlICgoZW50cnkgPSBkc2hhc2hfc2VxX25leHQoJnN0YXR1cykp ICE9IE5VTEwpCisJeworCQlpZiAoZW50cnktPmtleS5kYm9pZCA9PSBNeURhdGFiYXNlSWQp CisJCXsKKwkJCVByb2NOdW1iZXIgKmxpc3RlbmVyczsKKwkJCWludAkJCWk7CisKKwkJCWxp c3RlbmVycyA9IChQcm9jTnVtYmVyICopIGRzYV9nZXRfYWRkcmVzcyhjaGFubmVsRFNBLAor CQkJCQkJCQkJCQkJCSAgIGVudHJ5LT5saXN0ZW5lcnNBcnJheSk7CisKKwkJCWZvciAoaSA9 IDA7IGkgPCBlbnRyeS0+bnVtTGlzdGVuZXJzOyBpKyspCisJCQl7CisJCQkJaWYgKGxpc3Rl bmVyc1tpXSA9PSBNeVByb2NOdW1iZXIpCisJCQkJeworCQkJCQllbnRyeS0+bnVtTGlzdGVu ZXJzLS07CisJCQkJCWlmIChpIDwgZW50cnktPm51bUxpc3RlbmVycykKKwkJCQkJCW1lbW1v dmUoJmxpc3RlbmVyc1tpXSwgJmxpc3RlbmVyc1tpICsgMV0sCisJCQkJCQkJCXNpemVvZihQ cm9jTnVtYmVyKSAqIChlbnRyeS0+bnVtTGlzdGVuZXJzIC0gaSkpOworCisJCQkJCWlmIChl bnRyeS0+bnVtTGlzdGVuZXJzID09IDApCisJCQkJCXsKKwkJCQkJCWRzYV9mcmVlKGNoYW5u ZWxEU0EsIGVudHJ5LT5saXN0ZW5lcnNBcnJheSk7CisJCQkJCQlkc2hhc2hfZGVsZXRlX2N1 cnJlbnQoJnN0YXR1cyk7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9 CisJfQorCWRzaGFzaF9zZXFfdGVybSgmc3RhdHVzKTsKIH0KIAogLyoKQEAgLTE1NjUsMTIg KzE5MDUsMTkgQEAgYXN5bmNRdWV1ZUZpbGxXYXJuaW5nKHZvaWQpCiAvKgogICogU2VuZCBz aWduYWxzIHRvIGxpc3RlbmluZyBiYWNrZW5kcy4KICAqCi0gKiBOb3JtYWxseSB3ZSBzaWdu YWwgb25seSBiYWNrZW5kcyBpbiBvdXIgb3duIGRhdGFiYXNlLCBzaW5jZSBvbmx5IHRob3Nl Ci0gKiBiYWNrZW5kcyBjb3VsZCBiZSBpbnRlcmVzdGVkIGluIG5vdGlmaWVzIHdlIHNlbmQu ICBIb3dldmVyLCBpZiB0aGVyZSdzCi0gKiBub3RpZnkgdHJhZmZpYyBpbiBvdXIgZGF0YWJh c2UgYnV0IG5vIHRyYWZmaWMgaW4gYW5vdGhlciBkYXRhYmFzZSB0aGF0Ci0gKiBkb2VzIGhh dmUgbGlzdGVuZXIocyksIHRob3NlIGxpc3RlbmVycyB3aWxsIGZhbGwgZnVydGhlciBhbmQg ZnVydGhlcgotICogYmVoaW5kLiAgV2FrZW4gdGhlbSBhbnl3YXkgaWYgdGhleSdyZSBmYXIg ZW5vdWdoIGJlaGluZCwgc28gdGhhdCB0aGV5J2xsCi0gKiBhZHZhbmNlIHRoZWlyIHF1ZXVl IHBvc2l0aW9uIHBvaW50ZXJzLCBhbGxvd2luZyB0aGUgZ2xvYmFsIHRhaWwgdG8gYWR2YW5j ZS4KKyAqIE5vcm1hbGx5IHdlIHNpZ25hbCBvbmx5IGJhY2tlbmRzIGluIG91ciBvd24gZGF0 YWJhc2UsIHRoYXQgYXJlCisgKiBsaXN0ZW5pbmcgb24gdGhlIGNoYW5uZWxzIHdpdGggcGVu ZGluZyBub3RpZmllcywgc2luY2Ugb25seSB0aG9zZQorICogYmFja2VuZHMgYXJlIGludGVy ZXN0ZWQgaW4gbm90aWZpZXMgd2Ugc2VuZC4KKyAqCisgKiBCYWNrZW5kcyB0aGF0IGFyZSBz dGlsbCBwb3NpdGlvbmVkIGF0IHRoZSBxdWV1ZSBoZWFkIGZyb20gYmVmb3JlIG91cgorICog Y29tbWl0IGNhbiBiZSBzYWZlbHkgYWR2YW5jZWQgZGlyZWN0bHkgdG8gdGhlIG5ldyBoZWFk LCBzaW5jZSB0aGUKKyAqIHF1ZXVlIHJlZ2lvbiB3ZSB3cm90ZSBpcyBrbm93biB0byBjb250 YWluIG9ubHkgb3VyIG93biBub3RpZmljYXRpb25zLgorICogVGhpcyBhdm9pZHMgdW5uZWNl c3Nhcnkgd2FrZXVwcyB3aGVuIHRoZXJlIGlzIG5vdGhpbmcgb2YgaW50ZXJlc3QgdG8KKyAq IHRoZW0uCisgKgorICogSW4gYWRkaXRpb24sIGlmIGEgYmFja2VuZCBoYXMgZmFsbGVuIHRv byBmYXIgYmVoaW5kIGluIHRoZSBxdWV1ZSwgd2UKKyAqIHNpZ25hbCBpdCBzbyB0aGF0IGl0 IHdpbGwgYWR2YW5jZSBpdHMgcG9zaXRpb24gYW5kIGFsbG93IHRoZSBnbG9iYWwKKyAqIHRh aWwgcG9pbnRlciB0byBtb3ZlIGZvcndhcmQuCiAgKgogICogU2luY2Ugd2Uga25vdyB0aGUg UHJvY051bWJlciBhbmQgdGhlIFBpZCB0aGUgc2lnbmFsaW5nIGlzIHF1aXRlIGNoZWFwLgog ICoKQEAgLTE1ODMsNiArMTkzMCw3IEBAIFNpZ25hbEJhY2tlbmRzKHZvaWQpCiAJaW50MzIJ ICAgKnBpZHM7CiAJUHJvY051bWJlciAqcHJvY25vczsKIAlpbnQJCQljb3VudDsKKwlMaXN0 Q2VsbCAgICpsYzsKIAogCS8qCiAJICogSWRlbnRpZnkgYmFja2VuZHMgdGhhdCB3ZSBuZWVk IHRvIHNpZ25hbC4gIFdlIGRvbid0IHdhbnQgdG8gc2VuZApAQCAtMTU5NywzNiArMTk0NSwx MTEgQEAgU2lnbmFsQmFja2VuZHModm9pZCkKIAljb3VudCA9IDA7CiAKIAlMV0xvY2tBY3F1 aXJlKE5vdGlmeVF1ZXVlTG9jaywgTFdfRVhDTFVTSVZFKTsKLQlmb3IgKFByb2NOdW1iZXIg aSA9IFFVRVVFX0ZJUlNUX0xJU1RFTkVSOyBpICE9IElOVkFMSURfUFJPQ19OVU1CRVI7IGkg PSBRVUVVRV9ORVhUX0xJU1RFTkVSKGkpKQorCWZvcmVhY2gobGMsIHBlbmRpbmdOb3RpZnlD aGFubmVscykKKwl7CisJCWNoYXIJICAgKmNoYW5uZWwgPSAoY2hhciAqKSBsZmlyc3QobGMp OworCQlDaGFubmVsRW50cnkgKmVudHJ5ID0gTlVMTDsKKwkJUHJvY051bWJlciAqbGlzdGVu ZXJzOworCisJCWlmIChjaGFubmVsSGFzaCAhPSBOVUxMKQorCQl7CisJCQlDaGFubmVsSGFz aEtleSBrZXk7CisKKwkJCUNoYW5uZWxIYXNoUHJlcGFyZUtleSgma2V5LCBNeURhdGFiYXNl SWQsIGNoYW5uZWwpOworCQkJZW50cnkgPSBkc2hhc2hfZmluZChjaGFubmVsSGFzaCwgJmtl eSwgZmFsc2UpOworCQl9CisKKwkJaWYgKGVudHJ5ID09IE5VTEwpCisJCQljb250aW51ZTsJ CQkvKiBObyBsaXN0ZW5lcnMgcmVnaXN0ZXJlZCBmb3IgdGhpcyBjaGFubmVsICovCisKKwkJ bGlzdGVuZXJzID0gKFByb2NOdW1iZXIgKikgZHNhX2dldF9hZGRyZXNzKGNoYW5uZWxEU0Es CisJCQkJCQkJCQkJCQkgICBlbnRyeS0+bGlzdGVuZXJzQXJyYXkpOworCisJCWZvciAoaW50 IGogPSAwOyBqIDwgZW50cnktPm51bUxpc3RlbmVyczsgaisrKQorCQl7CisJCQlQcm9jTnVt YmVyCWkgPSBsaXN0ZW5lcnNbal07CisJCQlpbnQzMgkJcGlkOworCQkJUXVldWVQb3NpdGlv biBwb3M7CisKKwkJCWlmIChRVUVVRV9CQUNLRU5EX1dBS0VVUF9QRU5ESU5HKGkpKQorCQkJ CWNvbnRpbnVlOworCisJCQlwb3MgPSBRVUVVRV9CQUNLRU5EX1BPUyhpKTsKKwkJCXBpZCA9 IFFVRVVFX0JBQ0tFTkRfUElEKGkpOworCisJCQkvKiBTa2lwIGlmIGNhdWdodCB1cCAqLwor CQkJaWYgKFFVRVVFX1BPU19FUVVBTChwb3MsIFFVRVVFX0hFQUQpKQorCQkJCWNvbnRpbnVl OworCisJCQlBc3NlcnQocGlkICE9IEludmFsaWRQaWQpOworCisJCQlRVUVVRV9CQUNLRU5E X1dBS0VVUF9QRU5ESU5HKGkpID0gdHJ1ZTsKKwkJCXBpZHNbY291bnRdID0gcGlkOworCQkJ cHJvY25vc1tjb3VudF0gPSBpOworCQkJY291bnQrKzsKKwkJfQorCisJCWRzaGFzaF9yZWxl YXNlX2xvY2soY2hhbm5lbEhhc2gsIGVudHJ5KTsKKwl9CisKKwkvKgorCSAqIERpcmVjdCBh ZHZhbmNlbWVudCBhbmQgbGFnZ2luZyBiYWNrZW5kIGRldGVjdGlvbi4KKwkgKgorCSAqIERp cmVjdCBhZHZhbmNlbWVudDogYXZvaWQgd2FraW5nIGJhY2tlbmRzIHN0aWxsIHBvc2l0aW9u ZWQgYXQgdGhlIG9sZAorCSAqIHF1ZXVlIGhlYWQgdGhhdCBhcmVuJ3QgaW50ZXJlc3RlZCBp biBvdXIgbm90aWZpY2F0aW9ucy4KKwkgKgorCSAqIFRoZSBoZWF2eXdlaWdodCBsb2NrIG9u IGRhdGFiYXNlIDAgKGhlbGQgaW4gUHJlQ29tbWl0X05vdGlmeSkgZW5zdXJlcworCSAqIG5v IG90aGVyIGJhY2tlbmQgY2FuIGluc2VydCBub3RpZmljYXRpb25zIGluIHRoZSByZWdpb24g d2UganVzdCB3cm90ZS4KKwkgKiBFdmVuIHRob3VnaCB3ZSBtYXkgdGFrZSBhbmQgcmVsZWFz ZSBOb3RpZnlRdWV1ZUxvY2sgbXVsdGlwbGUgdGltZXMKKwkgKiB3aGlsZSB3cml0aW5nLCB0 aGUgaGVhdnl3ZWlnaHQgbG9jayBndWFyYW50ZWVzIHRoaXMgcmVnaW9uIGNvbnRhaW5zCisJ ICogb25seSBvdXIgbWVzc2FnZXMuICBUaGVyZWZvcmUsIGFueSBiYWNrZW5kIHN0aWxsIHBv c2l0aW9uZWQgYXQgdGhlCisJICogcXVldWUgaGVhZCBmcm9tIGJlZm9yZSBvdXIgd3JpdGUg Y2FuIGJlIHNhZmVseSBhZHZhbmNlZCB0byB0aGUgY3VycmVudAorCSAqIHF1ZXVlIGhlYWQg d2l0aG91dCB3YWtpbmcgaXQuCisJICoKKwkgKiBGYWxzZS1wb3NpdGl2ZSBwb3NzaWJpbGl0 eTogaWYgYSBiYWNrZW5kIHdhcyBwcmV2aW91c2x5IHNpZ25hbGVkIGJ1dAorCSAqIGhhc24n dCB5ZXQgYXdva2VuLCB3ZSdsbCBza2lwIGFkdmFuY2luZyBpdCAoYmVjYXVzZSB3YWtldXBQ ZW5kaW5nIGlzCisJICogdHJ1ZSkuICBUaGlzIGlzIHNhZmUgLSB0aGUgYmFja2VuZCB3aWxs IGFkdmFuY2UgaXRzIHBvaW50ZXIgd2hlbiBpdAorCSAqIGRvZXMgd2FrZSB1cC4gIFRoZSBh bHRlcm5hdGl2ZSAoYWR2YW5jaW5nIGl0IGFueXdheSkgd291bGQgcmlzaworCSAqIGFkdmFu Y2luZyBvdmVyIG5vdGlmaWNhdGlvbnMgZnJvbSB3aG9ldmVyIHNpZ25hbGVkIGl0LgorCSAq CisJICogTGFnZ2luZyBiYWNrZW5kczogd2UgYWxzbyBjaGVjayBpZiBhbnkgYmFja2VuZCBo YXMgZmFsbGVuIHRvbyBmYXIKKwkgKiBiZWhpbmQgYW5kIHNpZ25hbCBpdCB0byBjYXRjaCB1 cCwgYWxsb3dpbmcgdGhlIGdsb2JhbCB0YWlsIHRvIGFkdmFuY2UuCisJICovCisJZm9yIChQ cm9jTnVtYmVyIGkgPSBRVUVVRV9GSVJTVF9MSVNURU5FUjsKKwkJIGkgIT0gSU5WQUxJRF9Q Uk9DX05VTUJFUjsKKwkJIGkgPSBRVUVVRV9ORVhUX0xJU1RFTkVSKGkpKQogCXsKLQkJaW50 MzIJCXBpZCA9IFFVRVVFX0JBQ0tFTkRfUElEKGkpOwogCQlRdWV1ZVBvc2l0aW9uIHBvczsK KwkJaW50NjQJCWxhZzsKKwkJaW50MzIJCXBpZDsKKworCQlpZiAoUVVFVUVfQkFDS0VORF9X QUtFVVBfUEVORElORyhpKSkKKwkJCWNvbnRpbnVlOwogCi0JCUFzc2VydChwaWQgIT0gSW52 YWxpZFBpZCk7CiAJCXBvcyA9IFFVRVVFX0JBQ0tFTkRfUE9TKGkpOwotCQlpZiAoUVVFVUVf QkFDS0VORF9EQk9JRChpKSA9PSBNeURhdGFiYXNlSWQpCisKKwkJLyogRGlyZWN0IGFkdmFu Y2VtZW50IGZvciBpZGxlIGJhY2tlbmRzIGF0IHRoZSBvbGQgaGVhZCAqLworCQlpZiAocGVu ZGluZ05vdGlmaWVzICE9IE5VTEwgJiYKKwkJCVFVRVVFX1BPU19FUVVBTChwb3MsIHF1ZXVl SGVhZEJlZm9yZVdyaXRlKSkKIAkJewotCQkJLyoKLQkJCSAqIEFsd2F5cyBzaWduYWwgbGlz dGVuZXJzIGluIG91ciBvd24gZGF0YWJhc2UsIHVubGVzcyB0aGV5J3JlCi0JCQkgKiBhbHJl YWR5IGNhdWdodCB1cCAodW5saWtlbHksIGJ1dCBwb3NzaWJsZSkuCi0JCQkgKi8KLQkJCWlm IChRVUVVRV9QT1NfRVFVQUwocG9zLCBRVUVVRV9IRUFEKSkKLQkJCQljb250aW51ZTsKKwkJ CVFVRVVFX0JBQ0tFTkRfUE9TKGkpID0gcXVldWVIZWFkQWZ0ZXJXcml0ZTsKKwkJCXBvcyA9 IHF1ZXVlSGVhZEFmdGVyV3JpdGU7CiAJCX0KLQkJZWxzZQorCisJCS8qIFNpZ25hbCBiYWNr ZW5kcyB0aGF0IGhhdmUgZmFsbGVuIHRvbyBmYXIgYmVoaW5kICovCisJCWxhZyA9IGFzeW5j UXVldWVQYWdlRGlmZihRVUVVRV9QT1NfUEFHRShRVUVVRV9IRUFEKSwKKwkJCQkJCQkJIFFV RVVFX1BPU19QQUdFKHBvcykpOworCisJCWlmIChsYWcgPj0gUVVFVUVfQ0xFQU5VUF9ERUxB WSkKIAkJewotCQkJLyoKLQkJCSAqIExpc3RlbmVycyBpbiBvdGhlciBkYXRhYmFzZXMgc2hv dWxkIGJlIHNpZ25hbGVkIG9ubHkgaWYgdGhleQotCQkJICogYXJlIGZhciBiZWhpbmQuCi0J CQkgKi8KLQkJCWlmIChhc3luY1F1ZXVlUGFnZURpZmYoUVVFVUVfUE9TX1BBR0UoUVVFVUVf SEVBRCksCi0JCQkJCQkJCSAgIFFVRVVFX1BPU19QQUdFKHBvcykpIDwgUVVFVUVfQ0xFQU5V UF9ERUxBWSkKLQkJCQljb250aW51ZTsKKwkJCXBpZCA9IFFVRVVFX0JBQ0tFTkRfUElEKGkp OworCQkJQXNzZXJ0KHBpZCAhPSBJbnZhbGlkUGlkKTsKKworCQkJUVVFVUVfQkFDS0VORF9X QUtFVVBfUEVORElORyhpKSA9IHRydWU7CisJCQlwaWRzW2NvdW50XSA9IHBpZDsKKwkJCXBy b2Nub3NbY291bnRdID0gaTsKKwkJCWNvdW50Kys7CiAJCX0KLQkJLyogT0ssIG5lZWQgdG8g c2lnbmFsIHRoaXMgb25lICovCi0JCXBpZHNbY291bnRdID0gcGlkOwotCQlwcm9jbm9zW2Nv dW50XSA9IGk7Ci0JCWNvdW50Kys7CiAJfQogCUxXTG9ja1JlbGVhc2UoTm90aWZ5UXVldWVM b2NrKTsKIApAQCAtMTg2NSw2ICsyMjg4LDcgQEAgYXN5bmNRdWV1ZVJlYWRBbGxOb3RpZmlj YXRpb25zKHZvaWQpCiAJTFdMb2NrQWNxdWlyZShOb3RpZnlRdWV1ZUxvY2ssIExXX1NIQVJF RCk7CiAJLyogQXNzZXJ0IGNoZWNrcyB0aGF0IHdlIGhhdmUgYSB2YWxpZCBzdGF0ZSBlbnRy eSAqLwogCUFzc2VydChNeVByb2NQaWQgPT0gUVVFVUVfQkFDS0VORF9QSUQoTXlQcm9jTnVt YmVyKSk7CisJUVVFVUVfQkFDS0VORF9XQUtFVVBfUEVORElORyhNeVByb2NOdW1iZXIpID0g ZmFsc2U7CiAJcG9zID0gUVVFVUVfQkFDS0VORF9QT1MoTXlQcm9jTnVtYmVyKTsKIAloZWFk ID0gUVVFVUVfSEVBRDsKIAlMV0xvY2tSZWxlYXNlKE5vdGlmeVF1ZXVlTG9jayk7CkBAIC0y MzczLDcgKzI3OTcsNyBAQCBub3RpZmljYXRpb25fbWF0Y2goY29uc3Qgdm9pZCAqa2V5MSwg Y29uc3Qgdm9pZCAqa2V5MiwgU2l6ZSBrZXlzaXplKQogCXJldHVybiAxOwkJCQkJLyogbm90 IGVxdWFsICovCiB9CiAKLS8qIENsZWFyIHRoZSBwZW5kaW5nQWN0aW9ucyBhbmQgcGVuZGlu Z05vdGlmaWVzIGxpc3RzLiAqLworLyogQ2xlYXIgdGhlIHBlbmRpbmdBY3Rpb25zLCBwZW5k aW5nTm90aWZpZXMsIGFuZCBwZW5kaW5nTm90aWZ5Q2hhbm5lbHMgbGlzdHMuICovCiBzdGF0 aWMgdm9pZAogQ2xlYXJQZW5kaW5nQWN0aW9uc0FuZE5vdGlmaWVzKHZvaWQpCiB7CkBAIC0y Mzg1LDYgKzI4MDksNyBAQCBDbGVhclBlbmRpbmdBY3Rpb25zQW5kTm90aWZpZXModm9pZCkK IAkgKi8KIAlwZW5kaW5nQWN0aW9ucyA9IE5VTEw7CiAJcGVuZGluZ05vdGlmaWVzID0gTlVM TDsKKwlwZW5kaW5nTm90aWZ5Q2hhbm5lbHMgPSBOSUw7CiB9CiAKIC8qCkBAIC0yMzk1LDMg KzI4MjAsMTYgQEAgY2hlY2tfbm90aWZ5X2J1ZmZlcnMoaW50ICpuZXd2YWwsIHZvaWQgKipl eHRyYSwgR3VjU291cmNlIHNvdXJjZSkKIHsKIAlyZXR1cm4gY2hlY2tfc2xydV9idWZmZXJz KCJub3RpZnlfYnVmZmVycyIsIG5ld3ZhbCk7CiB9CisKKworLyoKKyAqIENoYW5uZWxIYXNo UHJlcGFyZUtleQorICoJCVByZXBhcmUgYSBjaGFubmVsIGtleSBmb3IgdXNlIGFzIGEgaGFz aCBrZXkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorQ2hhbm5lbEhhc2hQcmVwYXJlS2V5 KENoYW5uZWxIYXNoS2V5ICprZXksIE9pZCBkYm9pZCwgY29uc3QgY2hhciAqY2hhbm5lbCkK K3sKKwltZW1zZXQoa2V5LCAwLCBzaXplb2YoQ2hhbm5lbEhhc2hLZXkpKTsKKwlrZXktPmRi b2lkID0gZGJvaWQ7CisJc3RybGNweShrZXktPmNoYW5uZWwsIGNoYW5uZWwsIE5BTUVEQVRB TEVOKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRf ZXZlbnRfbmFtZXMudHh0IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVu dF9uYW1lcy50eHQKaW5kZXggNzU1M2Y2ZWFjZWYuLmE0ZmFkYmQwNzY3IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50X25hbWVzLnR4dAorKysg Yi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50X25hbWVzLnR4dApAQCAt MzY2LDYgKzM2Niw3IEBAIFN1YnRyYW5zQnVmZmVyCSJXYWl0aW5nIGZvciBJL08gb24gYSBz dWItdHJhbnNhY3Rpb24gU0xSVSBidWZmZXIuIgogTXVsdGlYYWN0T2Zmc2V0QnVmZmVyCSJX YWl0aW5nIGZvciBJL08gb24gYSBtdWx0aXhhY3Qgb2Zmc2V0IFNMUlUgYnVmZmVyLiIKIE11 bHRpWGFjdE1lbWJlckJ1ZmZlcgkiV2FpdGluZyBmb3IgSS9PIG9uIGEgbXVsdGl4YWN0IG1l bWJlciBTTFJVIGJ1ZmZlci4iCiBOb3RpZnlCdWZmZXIJIldhaXRpbmcgZm9yIEkvTyBvbiBh IDxjb21tYW5kPk5PVElGWTwvY29tbWFuZD4gbWVzc2FnZSBTTFJVIGJ1ZmZlci4iCitOb3Rp ZnlDaGFubmVsSGFzaAkiV2FpdGluZyB0byBhY2Nlc3MgdGhlIDxjb21tYW5kPk5PVElGWTwv Y29tbWFuZD4gY2hhbm5lbCBoYXNoIHRhYmxlLiIKIFNlcmlhbEJ1ZmZlcgkiV2FpdGluZyBm b3IgSS9PIG9uIGEgc2VyaWFsaXphYmxlIHRyYW5zYWN0aW9uIGNvbmZsaWN0IFNMUlUgYnVm ZmVyLiIKIFdBTEluc2VydAkiV2FpdGluZyB0byBpbnNlcnQgV0FMIGRhdGEgaW50byBhIG1l bW9yeSBidWZmZXIuIgogQnVmZmVyQ29udGVudAkiV2FpdGluZyB0byBhY2Nlc3MgYSBkYXRh IHBhZ2UgaW4gbWVtb3J5LiIKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbHds b2NrbGlzdC5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9sd2xvY2tsaXN0LmgKaW5kZXggMDZh MWZmZDRiMDguLjI3NjhkZGY0NDE0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdl L2x3bG9ja2xpc3QuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2x3bG9ja2xpc3QuaApA QCAtMTAwLDYgKzEwMCw3IEBAIFBHX0xXTE9DS1RSQU5DSEUoU1VCVFJBTlNfQlVGRkVSLCBT dWJ0cmFuc0J1ZmZlcikKIFBHX0xXTE9DS1RSQU5DSEUoTVVMVElYQUNUT0ZGU0VUX0JVRkZF UiwgTXVsdGlYYWN0T2Zmc2V0QnVmZmVyKQogUEdfTFdMT0NLVFJBTkNIRShNVUxUSVhBQ1RN RU1CRVJfQlVGRkVSLCBNdWx0aVhhY3RNZW1iZXJCdWZmZXIpCiBQR19MV0xPQ0tUUkFOQ0hF KE5PVElGWV9CVUZGRVIsIE5vdGlmeUJ1ZmZlcikKK1BHX0xXTE9DS1RSQU5DSEUoTk9USUZZ X0NIQU5ORUxfSEFTSCwgTm90aWZ5Q2hhbm5lbEhhc2gpCiBQR19MV0xPQ0tUUkFOQ0hFKFNF UklBTF9CVUZGRVIsIFNlcmlhbEJ1ZmZlcikKIFBHX0xXTE9DS1RSQU5DSEUoV0FMX0lOU0VS VCwgV0FMSW5zZXJ0KQogUEdfTFdMT0NLVFJBTkNIRShCVUZGRVJfQ09OVEVOVCwgQnVmZmVy Q29udGVudCkKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0 IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggNTI5MGI5MWU4M2Uu LjVjY2RkNDA0M2U4IDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtNDEyLDYg KzQxMiw4IEBAIENhdGFsb2dJZE1hcEVudHJ5CiBDYXRhbG9nSW5kZXhTdGF0ZQogQ2hhbmdl VmFyTm9kZXNfY2FsbGJhY2sKIENoYW5nZVZhck5vZGVzX2NvbnRleHQKK0NoYW5uZWxFbnRy eQorQ2hhbm5lbEhhc2hLZXkKIENoZWNrUG9pbnQKIENoZWNrUG9pbnRTdG10CiBDaGVja3Bv aW50U3RhdHNEYXRhCi0tIAoyLjUwLjEKCg== --70a80106b5ed4cb8a06ec8618b781dfc--