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 1v3phg-004IT5-BL for pgsql-hackers@arkaria.postgresql.org; Wed, 01 Oct 2025 05:48:40 +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 1v3phd-00FrwK-FI for pgsql-hackers@arkaria.postgresql.org; Wed, 01 Oct 2025 05:48:38 +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 1v3phc-00FrwB-C0 for pgsql-hackers@lists.postgresql.org; Wed, 01 Oct 2025 05:48:37 +0000 Received: from fout-b5-smtp.messagingengine.com ([202.12.124.148]) by makus.postgresql.org with smtp (Exim 4.96) (envelope-from ) id 1v3phZ-000ocQ-36 for pgsql-hackers@postgresql.org; Wed, 01 Oct 2025 05:48:35 +0000 Received: from phl-compute-04.internal (phl-compute-04.internal [10.202.2.44]) by mailfout.stl.internal (Postfix) with ESMTP id EF12C1D0018F for ; Wed, 1 Oct 2025 01:48:33 -0400 (EDT) Received: from phl-imap-03 ([10.202.2.93]) by phl-compute-04.internal (MEProxy); Wed, 01 Oct 2025 01:48: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=1759297713; x=1759384113; bh=3E0evoOnsi X/sqObXW9Vty7VP6r5rB+Sv3b2EM23rl4=; b=E1Y8QZvCCazE2FwjbtDq25VTwN kiuLh+YV3sQAhFeHheg/y4X4ylHZtrzEf/eEmjxgymPHUHf5xkNFnOSxK4Me7sdo HrS0YO/+5xoqb6TzAFsMZ6JLAJoSBAJVjw0FMmZ2inyJTrEjRRjUPMEsYSNmlIlF FC6sW04cjxvmoikf5bgLRBc/Zp+aYk+HXtQmzNWiW2Bdo8BuzlUC4dD3oOpA6Zfb LE83jo/U9egM+xT93ISTJ0vjWYgXPUGHz1QDPHtpkxs+MPz+WdqyNq9yViAdKcJm U80JO5EuPK6RMUgBbDtkyV6jYghErpWOGYALUAgQMkDkb3DpnJuYCUwZHYtg== 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= 1759297713; x=1759384113; bh=3E0evoOnsiX/sqObXW9Vty7VP6r5rB+Sv3b 2EM23rl4=; b=xULUe+JvvVSLriQ4GwajCWJUl42dFko1q4+fgLX7TIhyUWTHznE J06FeuoCdo4q2azFcvABwE/zEtkMlupFrp7odHQtTi+jZVWFXjz065d7f5JO9W2t wHRA3/Ssy7MXcNErCK+4oP2lD8xhu/AIDCXnv2oTL/xgPDDW59vRfJW9SaUEloE7 ibnkDg+TgHE49rbra1+2PTU36w99EzpqgEitqS9OVwEmj1NrLaKsjFCZ1C1DXdaz RaNNbsURNrRYUwRj/odrWeTqa0uqSEjAWR/vjHtgHMo7EWF+XkxwG0VRB5d71WKw 7G1L1uZvTgXYpBjbG60RUFDTorPqYtvX8XA== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggdekvdefgecutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpuffrtefokffrpgfnqfghnecuuegr ihhlohhuthemuceftddtnecunecujfgurhepofggfffhvffkjghfufgtsehmtderreertd dtnecuhfhrohhmpedflfhovghlucflrggtohgsshhonhdfuceojhhovghlsegtohhmphhi lhgvrhdrohhrgheqnecuggftrfgrthhtvghrnhepfeehuedtgedvgfeuueeukeeiueffhe ekueelffevkeekgeekvefhkeffgffhveelnecuvehluhhsthgvrhfuihiivgeptdenucfr rghrrghmpehmrghilhhfrhhomhepjhhovghlsegtohhmphhilhgvrhdrohhrghdpnhgspg hrtghpthhtohepuddpmhhouggvpehsmhhtphhouhhtpdhrtghpthhtohepphhgshhqlhdq hhgrtghkvghrshesphhoshhtghhrvghsqhhlrdhorhhg X-ME-Proxy: Feedback-ID: ic6394509:Fastmail Received: by mailuser.phl.internal (Postfix, from userid 501) id 540BD18E0069; Wed, 1 Oct 2025 01:48:33 -0400 (EDT) X-Mailer: MessagingEngine.com Webmail Interface MIME-Version: 1.0 X-ThreadId: AZ7XRsRLdGms Date: Wed, 01 Oct 2025 07:47:27 +0200 From: "Joel Jacobson" To: pgsql-hackers Message-Id: <8bbf02d8-5fa7-4187-9c79-161591d821e6@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> Subject: Re: Optimize LISTEN/NOTIFY Content-Type: multipart/mixed; boundary=afbb5525b9554adc93fba148ed6e4603 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --afbb5525b9554adc93fba148ed6e4603 Content-Type: text/plain Content-Transfer-Encoding: 7bit On Tue, Sep 30, 2025, at 20:56, Joel Jacobson wrote: > Attachments: > * optimize_listen_notify-v5.patch Changes since v5: *) Added missing #include "nodes/pg_list.h" to fix List type error in headerscheck *) Add NOTIFY_DEFERRED_WAKEUP_MAIN to wait_event_names.txt and rename WAIT_EVENT_NOTIFY_DEFERRED_WAKEUP to WAIT_EVENT_NOTIFY_DEFERRED_WAKEUP_MAIN /Joel --afbb5525b9554adc93fba148ed6e4603 Content-Disposition: attachment; filename="optimize_listen_notify-v6.patch" Content-Type: application/octet-stream; name="optimize_listen_notify-v6.patch" Content-Transfer-Encoding: base64 RnJvbSA4NmM5M2FlNTEwOTk1NjdmZmE3MTJmOGU3ODUyMjYzMjM3Yzk4ZTZjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKb2VsIEphY29ic29uIDxqb2VsQGNvbXBpbGVyLm9y Zz4KRGF0ZTogU3VuLCAyOCBTZXAgMjAyNSAxNDo1Mzo1NyArMDIwMApTdWJqZWN0OiBbUEFU Q0hdIEZpeCBMSVNURU4vTk9USUZZIHNvIGl0IHNjYWxlcyB3aXRoIGlkbGUgbGlzdGVuaW5n IGJhY2tlbmRzCgpDdXJyZW50bHksIGlkbGUgbGlzdGVuaW5nIGJhY2tlbmRzIGNhdXNlIGEg ZHJhbWF0aWMgc2xvd2Rvd24gZHVlIHRvCmNvbnRleHQgc3dpdGNoaW5nIHdoZW4gdGhleSBh cmUgc2lnbmFsZWQgYW5kIHdha2UgdXAuIFRoaXMgaXMgd2FzdGVmdWwKd2hlbiB0aGV5IGFy ZSBub3QgbGlzdGVuaW5nIHRvIHRoZSBjaGFubmVsIGJlaW5nIG5vdGlmaWVkLgoKSnVzdCAx MCBleHRyYSBpZGxlIGxpc3RlbmluZyBjb25uZWN0aW9ucyBjYXVzZSBhIHNsb3dkb3duIGZy b20gODcwMCBUUFMKdG8gNjEwMCBUUFMsIDEwMCBleHRyYSBjYXVzZSBpdCB0byBkcm9wIHRv IDIwMDAgVFBTLCBhbmQgYXQgMTAwMCBleHRyYQppdCBmYWxscyB0byAyNTAgVFBTLgoKVG8g aW1wcm92ZSBzY2FsYWJpbGl0eSB3aXRoIHRoZSBudW1iZXIgb2YgaWRsZSBsaXN0ZW5pbmcg YmFja2VuZHMsIHRoaXMKcGF0Y2ggaW50cm9kdWNlcyBhIHNoYXJlZCBoYXNoIHRhYmxlIHRv IGtlZXAgdHJhY2sgb2YgY2hhbm5lbHMgcGVyCmxpc3RlbmluZyBiYWNrZW5kLiBUaGlzIGhh c2ggdGFibGUgaXMgcGFydGl0aW9uZWQgdG8gcmVkdWNlIGNvbnRlbnRpb24Kb24gY29uY3Vy cmVudCBMSVNURU4vVU5MSVNURU4gb3BlcmF0aW9ucy4KCldlIGtlZXAgdHJhY2sgb2YgdXAg dG8gTk9USUZZX01VTFRJQ0FTVF9USFJFU0hPTEQgKDE2KSBsaXN0ZW5lcnMgcGVyCmNoYW5u ZWwuIEJlbmNobWFya3MgaW5kaWNhdGVkIGRpbWluaXNoaW5nIGdhaW5zIGFib3ZlIHRoaXMg bGV2ZWwuClNldHRpbmcgaXQgbG93ZXIgc2VlbXMgdW5uZWNlc3NhcnksIHNvIGEgY29uc3Rh bnQgc2VlbWVkIGZpbmU7IGEgR1VDIGRpZApub3Qgc2VlbSBtb3RpdmF0ZWQuCgpUaGlzIHBh dGNoIGFsc28gYWRkcyBhIHdha2V1cF9wZW5kaW5nIGZsYWcgdG8gZWFjaCBiYWNrZW5kJ3Mg cXVldWUKc3RhdHVzIHRvIGF2b2lkIHJlZHVuZGFudCBzaWduYWxpbmcgd2hlbiBhIHdha2V1 cCBpcyBhbHJlYWR5IHBlbmRpbmcgYXMKdGhlIGJhY2tlbmQgaXMgc2lnbmFsZWQgYWdhaW4u IFRoZSBmbGFnIGlzIHNldCB3aGVuIGEgYmFja2VuZCBpcwpzaWduYWxlZCBhbmQgY2xlYXJl ZCBiZWZvcmUgcHJvY2Vzc2luZyB0aGUgcXVldWUuIFRoaXMgb3JkZXIgaXMKaW1wb3J0YW50 IHRvIGVuc3VyZSBjb3JyZWN0bmVzcy4KCkl0IHdhcyBhbHNvIG5lY2Vzc2FyeSB0byBhZGQg YSBuZXcgYmd3b3JrZXIsIG5vdGlmeV9iZ3dvcmtlciwgd2hvc2Ugc29sZQpyZXNwb25zaWJp bGl0eSBpcyB0byB3YWtlIHVwIGxhZ2dpbmcgbGlzdGVuaW5nIGJhY2tlbmRzLCBlbnN1cmlu ZyB0aGV5CmFyZSBraWNrZWQgd2hlbiB0aGV5IGFyZSBhYm91dCB0byBmYWxsIHRvbyBmYXIg YmVoaW5kLiBUaGlzIGJnd29ya2VyIGlzCmFsd2F5cyBzdGFydGVkIGF0IHBvc3RtYXN0ZXIg c3RhcnR1cCwgYnV0IGlzIG9ubHkgYWN0aXZhdGVkIHVwb24gTk9USUZZCmJ5IHNpZ25hbGlu ZyBpdCwgdW5sZXNzIGl0IGlzIGFscmVhZHkgYWN0aXZlLiBUaGUgbm90aWZ5X2Jnd29ya2Vy CnN0YWdnZXJzIHRoZSBzaWduYWxpbmcgb2YgbGFnZ2luZyBsaXN0ZW5pbmcgYmFja2VuZHMg Ynkgc2xlZXBpbmcgMTAwIG1zCmJldHdlZW4gZWFjaCBzaWduYWwsIHRvIHByZXZlbnQgdGhl IHRodW5kZXJpbmcgaGVyZCBwcm9ibGVtIHdlIHdvdWxkCm90aGVyd2lzZSBnZXQgaWYgYWxs IGxpc3RlbmluZyBiYWNrZW5kcyB3b2tlIHVwIGF0IHRoZSBzYW1lIHRpbWUuIEl0Cmxvb3Bz IHVudGlsIHRoZXJlIGFyZSBubyBtb3JlIGxhZ2dpbmcgbGlzdGVuaW5nIGJhY2tlbmRzLCBh bmQgdGhlbgpiZWNvbWVzIGluYWN0aXZlLgotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2Fz eW5jLmMgICAgICAgICAgICAgICAgICB8IDg4MiArKysrKysrKysrKysrKysrKy0KIHNyYy9i YWNrZW5kL3Bvc3RtYXN0ZXIvTWFrZWZpbGUgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMv YmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMgICAgICAgICAgICAgfCAgIDQgKwogc3Jj L2JhY2tlbmQvcG9zdG1hc3Rlci9tZXNvbi5idWlsZCAgICAgICAgICAgIHwgICAxICsKIHNy Yy9iYWNrZW5kL3Bvc3RtYXN0ZXIvbm90aWZ5X2Jnd29ya2VyLmMgICAgICB8IDIyNSArKysr Kwogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMgICAgICAgICAgIHwgICA2 ICsKIC4uLi91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50X25hbWVzLnR4dCAgICAgICB8ICAg MiArCiBzcmMvaW5jbHVkZS9wb3N0bWFzdGVyL25vdGlmeV9iZ3dvcmtlci5oICAgICAgfCAg MzcgKwogc3JjL2luY2x1ZGUvc3RvcmFnZS9sd2xvY2tsaXN0LmggICAgICAgICAgICAgIHwg ICAxICsKIDkgZmlsZXMgY2hhbmdlZCwgMTEyMCBpbnNlcnRpb25zKCspLCAzOSBkZWxldGlv bnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL25vdGlm eV9iZ3dvcmtlci5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvcG9zdG1hc3Rl ci9ub3RpZnlfYmd3b3JrZXIuaAoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2FzeW5jLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9hc3luYy5jCmluZGV4IDRiZDM3ZDVi ZWI1Li5mZDMyZTIwNzQwOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5 bmMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9hc3luYy5jCkBAIC0yNCw4ICsyNCwx MiBAQAogICoJICBBbGwgbm90aWZpY2F0aW9uIG1lc3NhZ2VzIGFyZSBwbGFjZWQgaW4gdGhl IHF1ZXVlIGFuZCBsYXRlciByZWFkIG91dAogICoJICBieSBsaXN0ZW5pbmcgYmFja2VuZHMu CiAgKgotICoJICBUaGVyZSBpcyBubyBjZW50cmFsIGtub3dsZWRnZSBvZiB3aGljaCBiYWNr ZW5kIGxpc3RlbnMgb24gd2hpY2ggY2hhbm5lbDsKLSAqCSAgZXZlcnkgYmFja2VuZCBoYXMg aXRzIG93biBsaXN0IG9mIGludGVyZXN0aW5nIGNoYW5uZWxzLgorICoJICBJbiBhZGRpdGlv biB0byBlYWNoIGJhY2tlbmQgbWFpbnRhaW5pbmcgaXRzIG93biBsaXN0IG9mIGNoYW5uZWxz LCB3ZSBhbHNvCisgKgkgIG1haW50YWluIGEgY2VudHJhbCBoYXNoIHRhYmxlIHRoYXQgdHJh Y2tzIGxpc3RlbmVycyBmb3IgZWFjaCBjaGFubmVsLCB1cAorICoJICB0byBOT1RJRllfTVVM VElDQVNUX1RIUkVTSE9MRC4gV2hlbiB0aGUgbnVtYmVyIG9mIGxpc3RlbmVycyBpcyBiZWxv dworICoJICB0aGlzIHRocmVzaG9sZCwgd2UgY2FuIHBlcmZvcm0gYSB0YXJnZXRlZCAibXVs dGljYXN0IiBieSBzaWduYWxpbmcgb25seQorICoJICB0aG9zZSBzcGVjaWZpYyBiYWNrZW5k cy4gSWYgdGhlIG51bWJlciBvZiBsaXN0ZW5lcnMgcmVhY2hlcyBvciBleGNlZWRzIHRoZQor ICoJICB0aHJlc2hvbGQsIHdlIGZhbGwgYmFjayB0byBzaWduYWxpbmcgYWxsIGxpc3Rlbmlu ZyBiYWNrZW5kcyBpbiB0aGUgZGF0YWJhc2UuCiAgKgogICoJICBBbHRob3VnaCB0aGVyZSBp cyBvbmx5IG9uZSBxdWV1ZSwgbm90aWZpY2F0aW9ucyBhcmUgdHJlYXRlZCBhcyBiZWluZwog ICoJICBkYXRhYmFzZS1sb2NhbDsgdGhpcyBpcyBkb25lIGJ5IGluY2x1ZGluZyB0aGUgc2Vu ZGVyJ3MgZGF0YWJhc2UgT0lECkBAIC03MSwxMyArNzUsMTkgQEAKICAqCSAgbWFrZSBhbnkg YWN0dWFsIHVwZGF0ZXMgdG8gdGhlIGVmZmVjdGl2ZSBsaXN0ZW4gc3RhdGUgKGxpc3RlbkNo YW5uZWxzKS4KICAqCSAgVGhlbiB3ZSBzaWduYWwgYW55IGJhY2tlbmRzIHRoYXQgbWF5IGJl IGludGVyZXN0ZWQgaW4gb3VyIG1lc3NhZ2VzCiAgKgkgIChpbmNsdWRpbmcgb3VyIG93biBi YWNrZW5kLCBpZiBsaXN0ZW5pbmcpLiAgVGhpcyBpcyBkb25lIGJ5Ci0gKgkgIFNpZ25hbEJh Y2tlbmRzKCksIHdoaWNoIHNjYW5zIHRoZSBsaXN0IG9mIGxpc3RlbmluZyBiYWNrZW5kcyBh bmQgc2VuZHMgYQotICoJICBQUk9DU0lHX05PVElGWV9JTlRFUlJVUFQgc2lnbmFsIHRvIGV2 ZXJ5IGxpc3RlbmluZyBiYWNrZW5kICh3ZSBkb24ndAotICoJICBrbm93IHdoaWNoIGJhY2tl bmQgaXMgbGlzdGVuaW5nIG9uIHdoaWNoIGNoYW5uZWwgc28gd2UgbXVzdCBzaWduYWwgdGhl bQotICoJICBhbGwpLiAgV2UgY2FuIGV4Y2x1ZGUgYmFja2VuZHMgdGhhdCBhcmUgYWxyZWFk eSB1cCB0byBkYXRlLCB0aG91Z2gsIGFuZAotICoJICB3ZSBjYW4gYWxzbyBleGNsdWRlIGJh Y2tlbmRzIHRoYXQgYXJlIGluIG90aGVyIGRhdGFiYXNlcyAodW5sZXNzIHRoZXkKLSAqCSAg YXJlIHdheSBiZWhpbmQgYW5kIHNob3VsZCBiZSBraWNrZWQgdG8gbWFrZSB0aGVtIGFkdmFu Y2UgdGhlaXIKLSAqCSAgcG9pbnRlcnMpLgorICoJICBTaWduYWxCYWNrZW5kcygpLCB3aGlj aCBzZW5kcyBQUk9DU0lHX05PVElGWV9JTlRFUlJVUFQgc2lnbmFscyB0bworICoJICBsaXN0 ZW5pbmcgYmFja2VuZHMsIGFuZCBoYXMgdHdvIG1vZGVzIG9mIG9wZXJhdGlvbjoKKyAqCSAg YSkgTXVsdGljYXN0IG1vZGU6IEZvciBjaGFubmVscyB3aXRoIGEgbnVtYmVyIG9mIGxpc3Rl bmVycyBub3QgZXhjZWVkaW5nCisgKgkgIE5PVElGWV9NVUxUSUNBU1RfVEhSRVNIT0xELCBz aWduYWxzIGFyZSBzZW50IG9ubHkgdG8gdGhvc2Ugc3BlY2lmaWMKKyAqCSAgYmFja2VuZHMu CisgKgkgIGIpIEJyb2FkY2FzdCBtb2RlOiBJZiBhbnkgY2hhbm5lbCBiZWluZyBub3RpZmll ZCBoYXMgbW9yZSBsaXN0ZW5lcnMgdGhhbgorICoJICB0aGUgdGhyZXNob2xkIChvciBpZiB0 aGUgaGFzaCB0YWJsZSBydW5zIG91dCBvZiBzaGFyZWQgbWVtb3J5IGZvcgorICoJICBuZXcg ZW50cmllcyksIHdlIHNpZ25hbCBldmVyeSBsaXN0ZW5pbmcgYmFja2VuZCBpbiB0aGUgZGF0 YWJhc2UuCisgKgorICoJICBBZnRlciBzZW5kaW5nIGltbWVkaWF0ZSBzaWduYWxzLCBTaWdu YWxCYWNrZW5kcygpIGFsc28gdHJpZ2dlcnMgYSBkZWZlcnJlZAorICoJICB3YWtldXAgYmFj a2dyb3VuZCB3b3JrZXIgKGlmIG5vdCBhbHJlYWR5IGFjdGl2ZSkgdGhhdCBoYW5kbGVzIHdh a2luZyB1cAorICoJICBiYWNrZW5kcyB0aGF0IGhhdmUgZmFsbGVuIGJlaGluZCBieSBRVUVV RV9DTEVBTlVQX0RFTEFZIG9yIG1vcmUgcGFnZXMsCisgKgkgIHVzaW5nIHN0YWdnZXJlZCBk ZWxheXMgdG8gcHJldmVudCB0aHVuZGVyaW5nIGhlcmQgZWZmZWN0cy4KICAqCiAgKgkgIEZp bmFsbHksIGFmdGVyIHdlIGFyZSBvdXQgb2YgdGhlIHRyYW5zYWN0aW9uIGFsdG9nZXRoZXIg YW5kIGFib3V0IHRvIGdvCiAgKgkgIGlkbGUsIHdlIHNjYW4gdGhlIHF1ZXVlIGZvciBtZXNz YWdlcyB0aGF0IG5lZWQgdG8gYmUgc2VudCB0byBvdXIKQEAgLTEyOCw2ICsxMzgsNyBAQAog I2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPHNp Z25hbC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgogCiAjaW5jbHVkZSAiYWNjZXNzL3BhcmFs bGVsLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3NscnUuaCIKQEAgLTEzNyw2ICsxNDgsNyBAQAog I2luY2x1ZGUgImNvbW1hbmRzL2FzeW5jLmgiCiAjaW5jbHVkZSAiY29tbW9uL2hhc2hmbi5o IgogI2luY2x1ZGUgImZ1bmNhcGkuaCIKKyNpbmNsdWRlICJwb3N0bWFzdGVyL25vdGlmeV9i Z3dvcmtlci5oIgogI2luY2x1ZGUgImxpYnBxL2xpYnBxLmgiCiAjaW5jbHVkZSAibGlicHEv cHFmb3JtYXQuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKQEAgLTE0Niw2ICsxNTgsNyBA QAogI2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlu cy5oIgogI2luY2x1ZGUgInV0aWxzL2d1Y19ob29rcy5oIgorI2luY2x1ZGUgInV0aWxzL2hz ZWFyY2guaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxz L3BzX3N0YXR1cy5oIgogI2luY2x1ZGUgInV0aWxzL3NuYXBtZ3IuaCIKQEAgLTE2Miw2ICsx NzUsNzkgQEAKICAqLwogI2RlZmluZSBOT1RJRllfUEFZTE9BRF9NQVhfTEVOR1RICShCTENL U1ogLSBOQU1FREFUQUxFTiAtIDEyOCkKIAorLyoKKyAqIE1heGltdW0gbnVtYmVyIG9mIGxp c3RlbmVycyB0byB0cmFjayBwZXIgY2hhbm5lbCBmb3IgbXVsdGljYXN0IHNpZ25hbGluZy4K KyAqIFdoZW4gdGhlIG51bWJlciBvZiBsaXN0ZW5lcnMgb24gYSBjaGFubmVsIGV4Y2VlZHMg dGhpcyB0aHJlc2hvbGQsIE5PVElGWQorICogd2lsbCBzaWduYWwgYWxsIGxpc3RlbmluZyBi YWNrZW5kcyByYXRoZXIgdGhhbiBqdXN0IHRob3NlIGxpc3RlbmluZyBvbiB0aGUKKyAqIHNw ZWNpZmljIGNoYW5uZWwuIFNldHRpbmcgdG8gMCBkaXNhYmxlcyBtdWx0aWNhc3Qgc2lnbmFs aW5nIGVudGlyZWx5LgorICovCisjZGVmaW5lIE5PVElGWV9NVUxUSUNBU1RfVEhSRVNIT0xE CTE2CisKKy8qCisgKiBOdW1iZXIgb2YgcGFydGl0aW9ucyBmb3IgdGhlIGNoYW5uZWwgaGFz aCB0YWJsZSdzIGxvY2tzLgorICogVGhpcyBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLgorICov CisjZGVmaW5lIE5VTV9OT1RJRllfUEFSVElUSU9OUyAxMjgKKworLyoKKyAqIENoYW5uZWwg aGFzaCB0YWJsZSBkZWZpbml0aW9ucworICoKKyAqIFRoaXMgaGFzaCB0YWJsZSBwcm92aWRl cyBhbiBvcHRpbWl6YXRpb24gYnkgdHJhY2tpbmcgd2hpY2ggYmFja2VuZHMgYXJlCisgKiBs aXN0ZW5pbmcgb24gZWFjaCBjaGFubmVsLCB1cCB0byBhIGNlcnRhaW4gdGhyZXNob2xkLiBD aGFubmVscyBhcmUKKyAqIGlkZW50aWZpZWQgYnkgZGF0YWJhc2UgT0lEIGFuZCBjaGFubmVs IG5hbWUsIG1ha2luZyB0aGVtCisgKiBkYXRhYmFzZS1zcGVjaWZpYy4KKyAqCisgKiBUbyBp bXByb3ZlIHNjYWxhYmlsaXR5IG9mIGNvbmN1cnJlbnQgTElTVEVOL1VOTElTVEVOIG9wZXJh dGlvbnMsIHRoZSBoYXNoCisgKiB0YWJsZSBpcyBwYXJ0aXRpb25lZCwgd2l0aCBlYWNoIHBh cnRpdGlvbiBwcm90ZWN0ZWQgYnkgaXRzIG93biBMV0xvY2suCisgKiBUaGlzIGF2b2lkcyBz ZXJpYWxpemluZyBhbGwgb3BlcmF0aW9ucyBvbiBhIHNpbmdsZSBnbG9iYWwgbG9jay4KKyAq CisgKiBXaGVuIHRoZSBudW1iZXIgb2YgYmFja2VuZHMgbGlzdGVuaW5nIG9uIGEgY2hhbm5l bCBpcyBhdCBvciBiZWxvdworICogTk9USUZZX01VTFRJQ0FTVF9USFJFU0hPTEQsIHdlIHN0 b3JlIHRoZWlyIFByb2NOdW1iZXJzIGFuZCBzaWduYWwgdGhlbQorICogZGlyZWN0bHkgKG11 bHRpY2FzdCkuCisgKgorICogV2UgZmFsbCBiYWNrIHRvIGJyb2FkY2FzdCBtb2RlIGFuZCBz aWduYWwgYWxsIGxpc3RlbmluZyBiYWNrZW5kcyB3aGVuOgorICogMSkgTW9yZSBiYWNrZW5k cyBsaXN0ZW4gb24gdGhlIHNhbWUgY2hhbm5lbCB0aGFuIHRoZSB0aHJlc2hvbGQgYWxsb3dz LCBPUgorICogMikgVGhlIGhhc2ggdGFibGUgcnVucyBvdXQgb2Ygc2hhcmVkIG1lbW9yeSBm b3IgbmV3IGVudHJpZXMKKyAqCisgKiBOb3RlIHRoYXQgQ0hBTk5FTF9IQVNIX01BWF9TSVpF IGlzIG5vdCBhIGhhcmQgbGltaXQgLSB0aGUgaGFzaCB0YWJsZSBjYW4KKyAqIHN0b3JlIG1v cmUgZW50cmllcyB0aGFuIHRoaXMsIGJ1dCBwZXJmb3JtYW5jZSB3aWxsIGRlZ3JhZGUgZHVl IHRvIGJ1Y2tldAorICogb3ZlcmZsb3cuIFRoZSBhY3R1YWwgZmFsbGJhY2sgdG8gYnJvYWRj YXN0IG1vZGUgb2NjdXJzIG9ubHkgd2hlbiBzaGFyZWQKKyAqIG1lbW9yeSBpcyBleGhhdXN0 ZWQgYW5kIHdlIGNhbm5vdCBhbGxvY2F0ZSBuZXcgaGFzaCBlbnRyaWVzLgorICoKKyAqIFRo ZSBtYXhpbXVtIHNpemUgKENIQU5ORUxfSEFTSF9NQVhfU0laRSkgaXMgYmFzZWQgb24gdGhl IHR5cGljYWwgT1MgcG9ydAorICogcmFuZ2UuIFRoaXMgcHJvdmlkZXMgYSByZWFzb25hYmxl IHVwcGVyIGJvdW5kIGZvciBzeXN0ZW1zIHRoYXQgdXNlCisgKiBwZXItY29ubmVjdGlvbiBj aGFubmVscy4KKyAqCisgKi8KKyNkZWZpbmUgQ0hBTk5FTF9IQVNIX0lOSVRfU0laRQkJMjU2 CisjZGVmaW5lIENIQU5ORUxfSEFTSF9NQVhfU0laRQkJNjU1MzUKKworLyoKKyAqIEtleSBz dHJ1Y3R1cmUgZm9yIHRoZSBjaGFubmVsIGhhc2ggdGFibGUuCisgKiBDaGFubmVscyBhcmUg ZGF0YWJhc2Utc3BlY2lmaWMsIHNvIHdlIG5lZWQgYm90aCB0aGUgZGF0YWJhc2UgT0lECisg KiBhbmQgdGhlIGNoYW5uZWwgbmFtZSB0byB1bmlxdWVseSBpZGVudGlmeSBhIGNoYW5uZWwu CisgKi8KK3R5cGVkZWYgc3RydWN0IENoYW5uZWxIYXNoS2V5Cit7CisJT2lkCQkJZGJvaWQ7 CisJY2hhcgkJY2hhbm5lbFtOQU1FREFUQUxFTl07Cit9CQkJQ2hhbm5lbEhhc2hLZXk7CisK Ky8qCisgKiBFYWNoIGVudHJ5IGNvbnRhaW5zIGEgY2hhbm5lbCBrZXkgKGRhdGFiYXNlIE9J RCArIGNoYW5uZWwgbmFtZSkgYW5kIGFuIGFycmF5CisgKiBvZiBsaXN0ZW5pbmcgYmFja2Vu ZCBQcm9jTnVtYmVycywgdXAgdG8gTk9USUZZX01VTFRJQ0FTVF9USFJFU0hPTEQuIElmIHRo ZQorICogbnVtYmVyIG9mIGxpc3RlbmVycyBleGNlZWRzIHRoZSB0aHJlc2hvbGQsIHdlIG1h cmsgdGhlIGNoYW5uZWwgZm9yCisgKiBicm9hZGNhc3QgYW5kIHN0b3AgdHJhY2tpbmcgaW5k aXZpZHVhbCBsaXN0ZW5lcnMuCisgKi8KK3R5cGVkZWYgc3RydWN0IENoYW5uZWxFbnRyeQor eworCUNoYW5uZWxIYXNoS2V5IGtleTsKKwlib29sCQlpc19icm9hZGNhc3Q7CS8qIFRydWUg aWYgbnVtX2xpc3RlbmVycyA+PSB0aHJlc2hvbGQgKi8KKwl1aW50OAkJbnVtX2xpc3RlbmVy czsJLyogTnVtYmVyIG9mIGxpc3RlbmVycyBjdXJyZW50bHkgc3RvcmVkICovCisJLyogTGlz dGVuZXJzIGFycmF5IGZvbGxvd3MsIG9mIHNpemUgTk9USUZZX01VTFRJQ0FTVF9USFJFU0hP TEQgKi8KKwlQcm9jTnVtYmVyCWxpc3RlbmVyc1tGTEVYSUJMRV9BUlJBWV9NRU1CRVJdOwor fQkJCUNoYW5uZWxFbnRyeTsKKwogLyoKICAqIFN0cnVjdCByZXByZXNlbnRpbmcgYW4gZW50 cnkgaW4gdGhlIGdsb2JhbCBub3RpZnkgcXVldWUKICAqCkBAIC0yMjcsOCArMzEzLDggQEAg dHlwZWRlZiBzdHJ1Y3QgUXVldWVQb3NpdGlvbgogLyoKICAqIFBhcmFtZXRlciBkZXRlcm1p bmluZyBob3cgb2Z0ZW4gd2UgdHJ5IHRvIGFkdmFuY2UgdGhlIHRhaWwgcG9pbnRlcjoKICAq IHdlIGRvIHRoYXQgYWZ0ZXIgZXZlcnkgUVVFVUVfQ0xFQU5VUF9ERUxBWSBwYWdlcyBvZiBO T1RJRlkgZGF0YS4gIFRoaXMgaXMKLSAqIGFsc28gdGhlIGRpc3RhbmNlIGJ5IHdoaWNoIGEg YmFja2VuZCBpbiBhbm90aGVyIGRhdGFiYXNlIG5lZWRzIHRvIGJlCi0gKiBiZWhpbmQgYmVm b3JlIHdlJ2xsIGRlY2lkZSB3ZSBuZWVkIHRvIHdha2UgaXQgdXAgdG8gYWR2YW5jZSBpdHMg cG9pbnRlci4KKyAqIGFsc28gdGhlIGRpc3RhbmNlIGJ5IHdoaWNoIGEgYmFja2VuZCBuZWVk cyB0byBiZSBiZWhpbmQgYmVmb3JlIHdlJ2xsCisgKiBkZWNpZGUgd2UgbmVlZCB0byB3YWtl IGl0IHVwIHRvIGFkdmFuY2UgaXRzIHBvaW50ZXIuCiAgKgogICogUmVzaXN0IHRoZSB0ZW1w dGF0aW9uIHRvIG1ha2UgdGhpcyByZWFsbHkgbGFyZ2UuICBXaGlsZSB0aGF0IHdvdWxkIHNh dmUKICAqIHdvcmsgaW4gc29tZSBwbGFjZXMsIGl0IHdvdWxkIGFkZCBjb3N0IGluIG90aGVy cy4gIEluIHBhcnRpY3VsYXIsIHRoaXMKQEAgLTI0Niw2ICszMzIsNyBAQCB0eXBlZGVmIHN0 cnVjdCBRdWV1ZUJhY2tlbmRTdGF0dXMKIAlPaWQJCQlkYm9pZDsJCQkvKiBiYWNrZW5kJ3Mg ZGF0YWJhc2UgT0lELCBvciBJbnZhbGlkT2lkICovCiAJUHJvY051bWJlcgluZXh0TGlzdGVu ZXI7CS8qIGlkIG9mIG5leHQgbGlzdGVuZXIsIG9yIElOVkFMSURfUFJPQ19OVU1CRVIgKi8K IAlRdWV1ZVBvc2l0aW9uIHBvczsJCQkvKiBiYWNrZW5kIGhhcyByZWFkIHF1ZXVlIHVwIHRv IGhlcmUgKi8KKwlib29sCQl3YWtldXBfcGVuZGluZzsKIH0gUXVldWVCYWNrZW5kU3RhdHVz OwogCiAvKgpAQCAtMjY5LDYgKzM1NiwxMSBAQCB0eXBlZGVmIHN0cnVjdCBRdWV1ZUJhY2tl bmRTdGF0dXMKICAqIEluIG9yZGVyIHRvIGF2b2lkIGRlYWRsb2Nrcywgd2hlbmV2ZXIgd2Ug bmVlZCBtdWx0aXBsZSBsb2Nrcywgd2UgZmlyc3QgZ2V0CiAgKiBOb3RpZnlRdWV1ZVRhaWxM b2NrLCB0aGVuIE5vdGlmeVF1ZXVlTG9jaywgYW5kIGxhc3RseSBTTFJVIGJhbmsgbG9jay4K ICAqCisgKiBUaGUgY2hhbm5lbCBoYXNoIHRhYmxlIGlzIHByb3RlY3RlZCBieSBhIHNlcGFy YXRlIHNldCBvZiBwYXJ0aXRpb25lZAorICogbG9ja3MuIFRvIHByZXZlbnQgZGVhZGxvY2tz IGJldHdlZW4gdGhlc2UgYW5kIE5vdGlmeVF1ZXVlTG9jaywgdGhlIGdsb2JhbAorICogbG9j ay1vcmRlcmluZyBydWxlIGlzOiBhbHdheXMgYWNxdWlyZSBOb3RpZnlRdWV1ZUxvY2sgKmJl Zm9yZSogYWNxdWlyaW5nCisgKiBhbnkgY2hhbm5lbCBoYXNoIHBhcnRpdGlvbiBsb2NrLgor ICoKICAqIEVhY2ggYmFja2VuZCB1c2VzIHRoZSBiYWNrZW5kW10gYXJyYXkgZW50cnkgd2l0 aCBpbmRleCBlcXVhbCB0byBpdHMKICAqIFByb2NOdW1iZXIuICBXZSByZWx5IG9uIHRoaXMg dG8gbWFrZSBTZW5kUHJvY1NpZ25hbCBmYXN0LgogICoKQEAgLTI4OCwxMSArMzgwLDY3IEBA IHR5cGVkZWYgc3RydWN0IEFzeW5jUXVldWVDb250cm9sCiAJUHJvY051bWJlcglmaXJzdExp c3RlbmVyOwkvKiBpZCBvZiBmaXJzdCBsaXN0ZW5lciwgb3IKIAkJCQkJCQkJICogSU5WQUxJ RF9QUk9DX05VTUJFUiAqLwogCVRpbWVzdGFtcFR6IGxhc3RRdWV1ZUZpbGxXYXJuOwkvKiB0 aW1lIG9mIGxhc3QgcXVldWUtZnVsbCBtc2cgKi8KKwkvKiBEZWZlcnJlZCB3YWtldXAgd29y a2VyIHN0YXRlICovCisJYm9vbAkJZGVmZXJyZWRXYWtldXBXb3JrZXJBY3RpdmU7IC8qIGlz IHdvcmtlciBwcm9jZXNzaW5nPyAqLworCXBpZF90CQlkZWZlcnJlZFdha2V1cFdvcmtlclBp ZDsJLyogUElEIG9mIHdvcmtlciBmb3Igc2lnbmFsaW5nICovCiAJUXVldWVCYWNrZW5kU3Rh dHVzIGJhY2tlbmRbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsKIH0gQXN5bmNRdWV1ZUNvbnRy b2w7CiAKIHN0YXRpYyBBc3luY1F1ZXVlQ29udHJvbCAqYXN5bmNRdWV1ZUNvbnRyb2w7CiAK Ky8qIExvY2tzIGZvciBwYXJ0aXRpb25lZCBjaGFubmVsIGhhc2ggdGFibGUgKi8KK3N0YXRp YyBMV0xvY2sgKmNoYW5uZWxIYXNoTG9ja3M7CisKKy8qIENoYW5uZWwgaGFzaCB0YWJsZSBm b3IgbXVsdGljYXN0IHNpZ25hbGxpbmcgKi8KK3N0YXRpYyBIVEFCICpjaGFubmVsSGFzaCA9 IE5VTEw7CisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb24gbmVlZGVkIGJ5IEdldENoYW5uZWxI YXNoICovCitzdGF0aWMgdWludDMyIGNoYW5uZWxfaGFzaF9mdW5jKGNvbnN0IHZvaWQgKmtl eSwgU2l6ZSBrZXlzaXplKTsKKworLyoKKyAqIEdldENoYW5uZWxIYXNoCisgKgkJR2V0IHRo ZSBjaGFubmVsIGhhc2ggdGFibGUsIGluaXRpYWxpemluZyBvdXIgYmFja2VuZCdzIHBvaW50 ZXIgaWYgbmVlZGVkLgorICoKKyAqIFRoaXMgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFueSBh Y2Nlc3MgdG8gdGhlIGNoYW5uZWwgaGFzaCB0YWJsZS4KKyAqIFRoZSBoYXNoIHRhYmxlIGl0 c2VsZiBpcyBjcmVhdGVkIGluIHNoYXJlZCBtZW1vcnkgZHVyaW5nIEFzeW5jU2htZW1Jbml0 LAorICogYnV0IGVhY2ggYmFja2VuZCBuZWVkcyB0byBnZXQgaXRzIG93biBwb2ludGVyIHRv IGl0LgorICovCitzdGF0aWMgSFRBQiAqCitHZXRDaGFubmVsSGFzaCh2b2lkKQoreworCWlm IChjaGFubmVsSGFzaCA9PSBOVUxMKQorCXsKKwkJSEFTSENUTAkJaGFzaF9jdGw7CisJCVNp emUJCWVudHJ5c2l6ZTsKKworCQkvKgorCQkgKiBTZXQgdXAgdG8gYXR0YWNoIHRvIHRoZSBl eGlzdGluZyBzaGFyZWQgaGFzaCB0YWJsZS4gVGhlIGhhc2gKKwkJICogY29udHJvbCBwYXJh bWV0ZXJzIG11c3QgbWF0Y2ggdGhvc2UgdXNlZCBpbiBBc3luY1NobWVtSW5pdC4KKwkJICov CisJCU1lbVNldCgmaGFzaF9jdGwsIDAsIHNpemVvZihoYXNoX2N0bCkpOworCQloYXNoX2N0 bC5rZXlzaXplID0gc2l6ZW9mKENoYW5uZWxIYXNoS2V5KTsKKworCQkvKgorCQkgKiBUaGUg c2l6ZSBvZiBhIGNoYW5uZWwgZW50cnkgaXMgZmxleGlibGUuIFdlIG11c3QgaGF2ZSBlbm91 Z2ggc3BhY2UKKwkJICogZm9yIHRoZSBtYXhpbXVtIG51bWJlciBvZiBsaXN0ZW5lcnMgc3Bl Y2lmaWVkIGJ5IHRoZSB0aHJlc2hvbGQuCisJCSAqLworCQllbnRyeXNpemUgPSBhZGRfc2l6 ZShvZmZzZXRvZihDaGFubmVsRW50cnksIGxpc3RlbmVycyksCisJCQkJCQkJIG11bF9zaXpl KE5PVElGWV9NVUxUSUNBU1RfVEhSRVNIT0xELCBzaXplb2YoUHJvY051bWJlcikpKTsKKwkJ aGFzaF9jdGwuZW50cnlzaXplID0gZW50cnlzaXplOworCisJCWhhc2hfY3RsLmhhc2ggPSBj aGFubmVsX2hhc2hfZnVuYzsKKwkJaGFzaF9jdGwubnVtX3BhcnRpdGlvbnMgPSBOVU1fTk9U SUZZX1BBUlRJVElPTlM7CisKKwkJY2hhbm5lbEhhc2ggPSBTaG1lbUluaXRIYXNoKCJDaGFu bmVsIEhhc2giLAorCQkJCQkJCQkJQ0hBTk5FTF9IQVNIX0lOSVRfU0laRSwKKwkJCQkJCQkJ CUNIQU5ORUxfSEFTSF9NQVhfU0laRSwKKwkJCQkJCQkJCSZoYXNoX2N0bCwKKwkJCQkJCQkJ CUhBU0hfRUxFTSB8IEhBU0hfRlVOQ1RJT04gfCBIQVNIX1BBUlRJVElPTik7CisJfQorCisJ cmV0dXJuIGNoYW5uZWxIYXNoOworfQorCiAjZGVmaW5lIFFVRVVFX0hFQUQJCQkJCShhc3lu Y1F1ZXVlQ29udHJvbC0+aGVhZCkKICNkZWZpbmUgUVVFVUVfVEFJTAkJCQkJKGFzeW5jUXVl dWVDb250cm9sLT50YWlsKQogI2RlZmluZSBRVUVVRV9TVE9QX1BBR0UJCQkJKGFzeW5jUXVl dWVDb250cm9sLT5zdG9wUGFnZSkKQEAgLTMwMSw2ICs0NDksNyBAQCBzdGF0aWMgQXN5bmNR dWV1ZUNvbnRyb2wgKmFzeW5jUXVldWVDb250cm9sOwogI2RlZmluZSBRVUVVRV9CQUNLRU5E X0RCT0lEKGkpCQkoYXN5bmNRdWV1ZUNvbnRyb2wtPmJhY2tlbmRbaV0uZGJvaWQpCiAjZGVm aW5lIFFVRVVFX05FWFRfTElTVEVORVIoaSkJCShhc3luY1F1ZXVlQ29udHJvbC0+YmFja2Vu ZFtpXS5uZXh0TGlzdGVuZXIpCiAjZGVmaW5lIFFVRVVFX0JBQ0tFTkRfUE9TKGkpCQkoYXN5 bmNRdWV1ZUNvbnRyb2wtPmJhY2tlbmRbaV0ucG9zKQorI2RlZmluZSBRVUVVRV9CQUNLRU5E X1dBS0VVUF9QRU5ESU5HKGkpCShhc3luY1F1ZXVlQ29udHJvbC0+YmFja2VuZFtpXS53YWtl dXBfcGVuZGluZykKIAogLyoKICAqIFRoZSBTTFJVIGJ1ZmZlciBhcmVhIHRocm91Z2ggd2hp Y2ggd2UgYWNjZXNzIHRoZSBub3RpZmljYXRpb24gcXVldWUKQEAgLTQ1OCw2ICs2MDcsMTQg QEAgc3RhdGljIHVpbnQzMiBub3RpZmljYXRpb25faGFzaChjb25zdCB2b2lkICprZXksIFNp emUga2V5c2l6ZSk7CiBzdGF0aWMgaW50CW5vdGlmaWNhdGlvbl9tYXRjaChjb25zdCB2b2lk ICprZXkxLCBjb25zdCB2b2lkICprZXkyLCBTaXplIGtleXNpemUpOwogc3RhdGljIHZvaWQg Q2xlYXJQZW5kaW5nQWN0aW9uc0FuZE5vdGlmaWVzKHZvaWQpOwogCisvKiBDaGFubmVsIGhh c2ggdGFibGUgbWFuYWdlbWVudCBmdW5jdGlvbnMgKi8KK3N0YXRpYyBMV0xvY2sgKkdldENo YW5uZWxIYXNoTG9jayhjb25zdCBjaGFyICpjaGFubmVsKTsKK3N0YXRpYyBpbmxpbmUgdm9p ZCBDaGFubmVsSGFzaFByZXBhcmVLZXkoQ2hhbm5lbEhhc2hLZXkgKiBrZXksIE9pZCBkYm9p ZCwgY29uc3QgY2hhciAqY2hhbm5lbCk7CitzdGF0aWMgdm9pZCBDaGFubmVsSGFzaEFkZExp c3RlbmVyKGNvbnN0IGNoYXIgKmNoYW5uZWwsIFByb2NOdW1iZXIgcHJvY25vKTsKK3N0YXRp YyB2b2lkIENoYW5uZWxIYXNoUmVtb3ZlTGlzdGVuZXIoY29uc3QgY2hhciAqY2hhbm5lbCwg UHJvY051bWJlciBwcm9jbm8pOworc3RhdGljIENoYW5uZWxFbnRyeSAqIENoYW5uZWxIYXNo TG9va3VwKGNvbnN0IGNoYXIgKmNoYW5uZWwpOworc3RhdGljIExpc3QgKkdldFBlbmRpbmdO b3RpZnlDaGFubmVscyh2b2lkKTsKKwogLyoKICAqIENvbXB1dGUgdGhlIGRpZmZlcmVuY2Ug YmV0d2VlbiB0d28gcXVldWUgcGFnZSBudW1iZXJzLgogICogUHJldmlvdXNseSB0aGlzIGZ1 bmN0aW9uIGFjY291bnRlZCBmb3IgYSB3cmFwYXJvdW5kLgpAQCAtNDg1LDYgKzY0Miw3IEBA IFNpemUKIEFzeW5jU2htZW1TaXplKHZvaWQpCiB7CiAJU2l6ZQkJc2l6ZTsKKwlTaXplCQll bnRyeXNpemU7CiAKIAkvKiBUaGlzIGhhZCBiZXR0ZXIgbWF0Y2ggQXN5bmNTaG1lbUluaXQg Ki8KIAlzaXplID0gbXVsX3NpemUoTWF4QmFja2VuZHMsIHNpemVvZihRdWV1ZUJhY2tlbmRT dGF0dXMpKTsKQEAgLTQ5Miw2ICs2NTAsMTggQEAgQXN5bmNTaG1lbVNpemUodm9pZCkKIAog CXNpemUgPSBhZGRfc2l6ZShzaXplLCBTaW1wbGVMcnVTaG1lbVNpemUobm90aWZ5X2J1ZmZl cnMsIDApKTsKIAorCS8qCisJICogVGhlIHNpemUgb2YgYSBjaGFubmVsIGVudHJ5IGlzIGZs ZXhpYmxlLiBXZSBtdXN0IGFsbG9jYXRlIGVub3VnaCBzcGFjZQorCSAqIGZvciB0aGUgbWF4 aW11bSBudW1iZXIgb2YgbGlzdGVuZXJzIHNwZWNpZmllZCBieSB0aGUgdGhyZXNob2xkLgor CSAqLworCWVudHJ5c2l6ZSA9IGFkZF9zaXplKG9mZnNldG9mKENoYW5uZWxFbnRyeSwgbGlz dGVuZXJzKSwKKwkJCQkJCSBtdWxfc2l6ZShOT1RJRllfTVVMVElDQVNUX1RIUkVTSE9MRCwg c2l6ZW9mKFByb2NOdW1iZXIpKSk7CisJc2l6ZSA9IGFkZF9zaXplKHNpemUsIGhhc2hfZXN0 aW1hdGVfc2l6ZShDSEFOTkVMX0hBU0hfTUFYX1NJWkUsCisJCQkJCQkJCQkJCSBlbnRyeXNp emUpKTsKKworCS8qIFNwYWNlIGZvciBjaGFubmVsIGhhc2ggcGFydGl0aW9uIGxvY2tzICov CisJc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXplKE5VTV9OT1RJRllfUEFSVElUSU9O Uywgc2l6ZW9mKExXTG9jaykpKTsKKwogCXJldHVybiBzaXplOwogfQogCkBAIC01MjEsMTIg KzY5MSwxNSBAQCBBc3luY1NobWVtSW5pdCh2b2lkKQogCQlRVUVVRV9TVE9QX1BBR0UgPSAw OwogCQlRVUVVRV9GSVJTVF9MSVNURU5FUiA9IElOVkFMSURfUFJPQ19OVU1CRVI7CiAJCWFz eW5jUXVldWVDb250cm9sLT5sYXN0UXVldWVGaWxsV2FybiA9IDA7CisJCWFzeW5jUXVldWVD b250cm9sLT5kZWZlcnJlZFdha2V1cFdvcmtlckFjdGl2ZSA9IGZhbHNlOworCQlhc3luY1F1 ZXVlQ29udHJvbC0+ZGVmZXJyZWRXYWtldXBXb3JrZXJQaWQgPSAwOwogCQlmb3IgKGludCBp ID0gMDsgaSA8IE1heEJhY2tlbmRzOyBpKyspCiAJCXsKIAkJCVFVRVVFX0JBQ0tFTkRfUElE KGkpID0gSW52YWxpZFBpZDsKIAkJCVFVRVVFX0JBQ0tFTkRfREJPSUQoaSkgPSBJbnZhbGlk T2lkOwogCQkJUVVFVUVfTkVYVF9MSVNURU5FUihpKSA9IElOVkFMSURfUFJPQ19OVU1CRVI7 CiAJCQlTRVRfUVVFVUVfUE9TKFFVRVVFX0JBQ0tFTkRfUE9TKGkpLCAwLCAwKTsKKwkJCVFV RVVFX0JBQ0tFTkRfV0FLRVVQX1BFTkRJTkcoaSkgPSBmYWxzZTsKIAkJfQogCX0KIApAQCAt NTQ2LDYgKzcxOSw0OCBAQCBBc3luY1NobWVtSW5pdCh2b2lkKQogCQkgKi8KIAkJKHZvaWQp IFNscnVTY2FuRGlyZWN0b3J5KE5vdGlmeUN0bCwgU2xydVNjYW5EaXJDYkRlbGV0ZUFsbCwg TlVMTCk7CiAJfQorCisJLyoKKwkgKiBDcmVhdGUgb3IgYXR0YWNoIHRvIHRoZSBjaGFubmVs IGhhc2ggdGFibGUuCisJICovCisJeworCQlIQVNIQ1RMCQloYXNoX2N0bDsKKwkJU2l6ZQkJ ZW50cnlzaXplOworCisJCU1lbVNldCgmaGFzaF9jdGwsIDAsIHNpemVvZihoYXNoX2N0bCkp OworCQloYXNoX2N0bC5rZXlzaXplID0gc2l6ZW9mKENoYW5uZWxIYXNoS2V5KTsKKworCQkv KgorCQkgKiBUaGUgc2l6ZSBvZiBhIGNoYW5uZWwgZW50cnkgaXMgZmxleGlibGUuIFdlIG11 c3QgaGF2ZSBlbm91Z2ggc3BhY2UKKwkJICogZm9yIHRoZSBtYXhpbXVtIG51bWJlciBvZiBs aXN0ZW5lcnMgc3BlY2lmaWVkIGJ5IHRoZSB0aHJlc2hvbGQuCisJCSAqLworCQllbnRyeXNp emUgPSBhZGRfc2l6ZShvZmZzZXRvZihDaGFubmVsRW50cnksIGxpc3RlbmVycyksCisJCQkJ CQkJIG11bF9zaXplKE5PVElGWV9NVUxUSUNBU1RfVEhSRVNIT0xELCBzaXplb2YoUHJvY051 bWJlcikpKTsKKwkJaGFzaF9jdGwuZW50cnlzaXplID0gZW50cnlzaXplOworCisJCWhhc2hf Y3RsLmhhc2ggPSBjaGFubmVsX2hhc2hfZnVuYzsKKwkJaGFzaF9jdGwubnVtX3BhcnRpdGlv bnMgPSBOVU1fTk9USUZZX1BBUlRJVElPTlM7CisKKwkJY2hhbm5lbEhhc2ggPSBTaG1lbUlu aXRIYXNoKCJDaGFubmVsIEhhc2giLAorCQkJCQkJCQkJQ0hBTk5FTF9IQVNIX0lOSVRfU0la RSwKKwkJCQkJCQkJCUNIQU5ORUxfSEFTSF9NQVhfU0laRSwKKwkJCQkJCQkJCSZoYXNoX2N0 bCwKKwkJCQkJCQkJCUhBU0hfRUxFTSB8IEhBU0hfRlVOQ1RJT04gfCBIQVNIX1BBUlRJVElP Tik7CisJfQorCisJLyogSW5pdGlhbGl6ZSBsb2NrcyBmb3IgdGhlIHBhcnRpdGlvbmVkIGhh c2ggdGFibGUgKi8KKwlzaXplID0gbXVsX3NpemUoTlVNX05PVElGWV9QQVJUSVRJT05TLCBz aXplb2YoTFdMb2NrKSk7CisJY2hhbm5lbEhhc2hMb2NrcyA9IChMV0xvY2sgKikKKwkJU2ht ZW1Jbml0U3RydWN0KCJDaGFubmVsIEhhc2ggTG9ja3MiLCBzaXplLCAmZm91bmQpOworCWlm ICghZm91bmQpCisJeworCQkvKiBGaXJzdCB0aW1lIHRocm91Z2g6IGluaXRpYWxpemUgdGhl IGxvY2tzICovCisJCWZvciAoaW50IGkgPSAwOyBpIDwgTlVNX05PVElGWV9QQVJUSVRJT05T OyBpKyspCisJCXsKKwkJCUxXTG9ja0luaXRpYWxpemUoJmNoYW5uZWxIYXNoTG9ja3NbaV0s CisJCQkJCQkJIExXVFJBTkNIRV9OT1RJRllfQ0hBTk5FTF9IQVNIKTsKKwkJfQorCX0KIH0K IAogCkBAIC0xMTUyLDYgKzEzNjcsOCBAQCBFeGVjX0xpc3RlbkNvbW1pdChjb25zdCBjaGFy ICpjaGFubmVsKQogCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oVG9wTWVt b3J5Q29udGV4dCk7CiAJbGlzdGVuQ2hhbm5lbHMgPSBsYXBwZW5kKGxpc3RlbkNoYW5uZWxz LCBwc3RyZHVwKGNoYW5uZWwpKTsKIAlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4 dCk7CisKKwlDaGFubmVsSGFzaEFkZExpc3RlbmVyKGNoYW5uZWwsIE15UHJvY051bWJlcik7 CiB9CiAKIC8qCkBAIC0xMTc1LDYgKzEzOTIsNyBAQCBFeGVjX1VubGlzdGVuQ29tbWl0KGNv bnN0IGNoYXIgKmNoYW5uZWwpCiAJCXsKIAkJCWxpc3RlbkNoYW5uZWxzID0gZm9yZWFjaF9k ZWxldGVfY3VycmVudChsaXN0ZW5DaGFubmVscywgcSk7CiAJCQlwZnJlZShsY2hhbik7CisJ CQlDaGFubmVsSGFzaFJlbW92ZUxpc3RlbmVyKGNoYW5uZWwsIE15UHJvY051bWJlcik7CiAJ CQlicmVhazsKIAkJfQogCX0KQEAgLTExOTMsOSArMTQxMSwyMiBAQCBFeGVjX1VubGlzdGVu Q29tbWl0KGNvbnN0IGNoYXIgKmNoYW5uZWwpCiBzdGF0aWMgdm9pZAogRXhlY19Vbmxpc3Rl bkFsbENvbW1pdCh2b2lkKQogeworCUxpc3RDZWxsICAgKnA7CisKIAlpZiAoVHJhY2Vfbm90 aWZ5KQogCQllbG9nKERFQlVHMSwgIkV4ZWNfVW5saXN0ZW5BbGxDb21taXQoJWQpIiwgTXlQ cm9jUGlkKTsKIAorCS8qCisJICogQmVmb3JlIGZyZWVpbmcgdGhlIGxvY2FsIGxpc3QsIGl0 ZXJhdGUgdGhyb3VnaCBpdCBhbmQgcGVyZm9ybSBhCisJICogdGFyZ2V0ZWQgcmVtb3ZhbCBm b3IgZWFjaCBvZiBvdXIgY2hhbm5lbHMgZnJvbSB0aGUgc2hhcmVkIGhhc2ggdGFibGUuCisJ ICovCisJZm9yZWFjaChwLCBsaXN0ZW5DaGFubmVscykKKwl7CisJCWNoYXIJICAgKmNoYW5u ZWwgPSAoY2hhciAqKSBsZmlyc3QocCk7CisKKwkJQ2hhbm5lbEhhc2hSZW1vdmVMaXN0ZW5l cihjaGFubmVsLCBNeVByb2NOdW1iZXIpOworCX0KKwogCWxpc3RfZnJlZV9kZWVwKGxpc3Rl bkNoYW5uZWxzKTsKIAlsaXN0ZW5DaGFubmVscyA9IE5JTDsKIH0KQEAgLTE1NjUsMTIgKzE3 OTYsMTIgQEAgYXN5bmNRdWV1ZUZpbGxXYXJuaW5nKHZvaWQpCiAvKgogICogU2VuZCBzaWdu YWxzIHRvIGxpc3RlbmluZyBiYWNrZW5kcy4KICAqCi0gKiBOb3JtYWxseSB3ZSBzaWduYWwg b25seSBiYWNrZW5kcyBpbiBvdXIgb3duIGRhdGFiYXNlLCBzaW5jZSBvbmx5IHRob3NlCi0g KiBiYWNrZW5kcyBjb3VsZCBiZSBpbnRlcmVzdGVkIGluIG5vdGlmaWVzIHdlIHNlbmQuICBI b3dldmVyLCBpZiB0aGVyZSdzCi0gKiBub3RpZnkgdHJhZmZpYyBpbiBvdXIgZGF0YWJhc2Ug YnV0IG5vIHRyYWZmaWMgaW4gYW5vdGhlciBkYXRhYmFzZSB0aGF0Ci0gKiBkb2VzIGhhdmUg bGlzdGVuZXIocyksIHRob3NlIGxpc3RlbmVycyB3aWxsIGZhbGwgZnVydGhlciBhbmQgZnVy dGhlcgotICogYmVoaW5kLiAgV2FrZW4gdGhlbSBhbnl3YXkgaWYgdGhleSdyZSBmYXIgZW5v dWdoIGJlaGluZCwgc28gdGhhdCB0aGV5J2xsCi0gKiBhZHZhbmNlIHRoZWlyIHF1ZXVlIHBv c2l0aW9uIHBvaW50ZXJzLCBhbGxvd2luZyB0aGUgZ2xvYmFsIHRhaWwgdG8gYWR2YW5jZS4K KyAqIFRoaXMgZnVuY3Rpb24gb3BlcmF0ZXMgaW4gdHdvIG1vZGVzOgorICogMS4gTXVsdGlj YXN0IG1vZGU6IElmIGFsbCBwZW5kaW5nIG5vdGlmaWNhdGlvbiBjaGFubmVscyBoYXZlIGxp c3RlbmVycyBhdCBvcgorICogICAgYmVsb3cgTk9USUZZX01VTFRJQ0FTVF9USFJFU0hPTEQs IHdlIHNpZ25hbCBvbmx5IHRob3NlIHNwZWNpZmljIGJhY2tlbmRzLgorICogMi4gQnJvYWRj YXN0IG1vZGU6IElmIGFueSBjaGFubmVsJ3MgbGlzdGVuZXIgY291bnQgZXhjZWVkcyB0aGUg dGhyZXNob2xkIE9SCisgKiAgICB0aGUgaGFzaCB0YWJsZSBsYWNrcyBtZW1vcnkgZm9yIG5l dyBlbnRyaWVzLCB3ZSBzaWduYWwgYWxsIGxpc3RlbmluZworICogICAgYmFja2VuZHMgaW4g b3VyIGRhdGFiYXNlLgogICoKICAqIFNpbmNlIHdlIGtub3cgdGhlIFByb2NOdW1iZXIgYW5k IHRoZSBQaWQgdGhlIHNpZ25hbGluZyBpcyBxdWl0ZSBjaGVhcC4KICAqCkBAIC0xNTgzLDYg KzE4MTQsMTIgQEAgU2lnbmFsQmFja2VuZHModm9pZCkKIAlpbnQzMgkgICAqcGlkczsKIAlQ cm9jTnVtYmVyICpwcm9jbm9zOwogCWludAkJCWNvdW50OworCUxpc3QJICAgKmNoYW5uZWxz OworCUxpc3RDZWxsICAgKnA7CisJYm9vbAkgICAqc2lnbmFsZWQ7CisJYm9vbAkJYnJvYWRj YXN0X21vZGUgPSBmYWxzZTsKKwlib29sCQl0cmlnZ2VyX2RlZmVycmVkX3dha2V1cCA9IGZh bHNlOworCXBpZF90CQlkZWZlcnJlZF93YWtldXBfcGlkID0gMDsKIAogCS8qCiAJICogSWRl bnRpZnkgYmFja2VuZHMgdGhhdCB3ZSBuZWVkIHRvIHNpZ25hbC4gIFdlIGRvbid0IHdhbnQg dG8gc2VuZApAQCAtMTU5NCw0MCArMTgzMSwxNDkgQEAgU2lnbmFsQmFja2VuZHModm9pZCkK IAkgKi8KIAlwaWRzID0gKGludDMyICopIHBhbGxvYyhNYXhCYWNrZW5kcyAqIHNpemVvZihp bnQzMikpOwogCXByb2Nub3MgPSAoUHJvY051bWJlciAqKSBwYWxsb2MoTWF4QmFja2VuZHMg KiBzaXplb2YoUHJvY051bWJlcikpOworCXNpZ25hbGVkID0gKGJvb2wgKikgcGFsbG9jMChN YXhCYWNrZW5kcyAqIHNpemVvZihib29sKSk7CiAJY291bnQgPSAwOwogCisJLyogR2V0IGxp c3Qgb2YgY2hhbm5lbHMgdGhhdCBoYXZlIHBlbmRpbmcgbm90aWZpY2F0aW9ucyAqLworCWNo YW5uZWxzID0gR2V0UGVuZGluZ05vdGlmeUNoYW5uZWxzKCk7CisKKwkvKgorCSAqIFRvIHBy ZXZlbnQgZGVhZGxvY2tzLCB3ZSBtdXN0IGFsd2F5cyBhY3F1aXJlIGxvY2tzIGluIHRoZSBz YW1lIG9yZGVyOgorCSAqIGdsb2JhbCBOb3RpZnlRdWV1ZUxvY2sgZmlyc3QsIHRoZW4gaW5k aXZpZHVhbCBwYXJ0aXRpb24gbG9ja3MuCisJICovCiAJTFdMb2NrQWNxdWlyZShOb3RpZnlR dWV1ZUxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0JZm9yIChQcm9jTnVtYmVyIGkgPSBRVUVVRV9G SVJTVF9MSVNURU5FUjsgaSAhPSBJTlZBTElEX1BST0NfTlVNQkVSOyBpID0gUVVFVUVfTkVY VF9MSVNURU5FUihpKSkKKworCS8qCisJICogRGV0ZXJtaW5lIGlmIHdlIGNhbiB1c2UgdGFy Z2V0ZWQgc2lnbmFsaW5nIG9yIG11c3QgYnJvYWRjYXN0LiBUaGlzCisJICogY2hlY2sgbXVz dCBiZSBkb25lIHdoaWxlIGhvbGRpbmcgTm90aWZ5UXVldWVMb2NrIHRvIHByZXZlbnQgZGVh ZGxvY2tzCisJICogYWdhaW5zdCBvdGhlciBiYWNrZW5kcyB0aGF0IG1pZ2h0IGJlIG1vZGlm eWluZyB0aGUgbGlzdGVuZXIgbGlzdCBhbmQKKwkgKiBoYXNoIHRhYmxlIHNpbXVsdGFuZW91 c2x5IChlLmcuLCBhc3luY1F1ZXVlVW5yZWdpc3RlcikuCisJICovCisJZm9yZWFjaChwLCBj aGFubmVscykKIAl7Ci0JCWludDMyCQlwaWQgPSBRVUVVRV9CQUNLRU5EX1BJRChpKTsKLQkJ UXVldWVQb3NpdGlvbiBwb3M7CisJCWNoYXIJICAgKmNoYW5uZWwgPSAoY2hhciAqKSBsZmly c3QocCk7CisJCUNoYW5uZWxFbnRyeSAqZW50cnk7CisJCUxXTG9jawkgICAqbG9jayA9IEdl dENoYW5uZWxIYXNoTG9jayhjaGFubmVsKTsKKworCQlMV0xvY2tBY3F1aXJlKGxvY2ssIExX X1NIQVJFRCk7CisJCWVudHJ5ID0gQ2hhbm5lbEhhc2hMb29rdXAoY2hhbm5lbCk7CiAKLQkJ QXNzZXJ0KHBpZCAhPSBJbnZhbGlkUGlkKTsKLQkJcG9zID0gUVVFVUVfQkFDS0VORF9QT1Mo aSk7Ci0JCWlmIChRVUVVRV9CQUNLRU5EX0RCT0lEKGkpID09IE15RGF0YWJhc2VJZCkKKwkJ LyoKKwkJICogSWYgdGhlcmUgaXMgbm8gZW50cnksIGl0IGNvdWxkIG1lYW4gd2UgcmFuIG91 dCBvZiBzaGFyZWQgbWVtb3J5CisJCSAqIHdoZW4gdHJ5aW5nIHRvIGFkZCB0aGlzIGNoYW5u ZWwgdG8gdGhlIGhhc2ggdGFibGUuIElmIHRoZSBlbnRyeSBpcworCQkgKiBtYXJrZWQgZm9y IGJyb2FkY2FzdCwgd2UgbXVzdCB1c2UgYnJvYWRjYXN0IG1vZGUuCisJCSAqLworCQlpZiAo IWVudHJ5IHx8IGVudHJ5LT5pc19icm9hZGNhc3QpCisJCXsKKwkJCWJyb2FkY2FzdF9tb2Rl ID0gdHJ1ZTsKKwkJCUxXTG9ja1JlbGVhc2UobG9jayk7CisJCQlicmVhazsKKwkJfQorCQlM V0xvY2tSZWxlYXNlKGxvY2spOworCX0KKworCWlmIChicm9hZGNhc3RfbW9kZSkKKwl7CisJ CS8qCisJCSAqIEluIGJyb2FkY2FzdCBtb2RlLCB3ZSBpdGVyYXRlIG92ZXIgYWxsIGxpc3Rl bmluZyBiYWNrZW5kcyBhbmQKKwkJICogc2lnbmFsIHRoZSBvbmVzIGluIG91ciBkYXRhYmFz ZSB0aGF0IGFyZSBub3QgYWxyZWFkeSBjYXVnaHQgdXAuCisJCSAqLworCQlmb3IgKFByb2NO dW1iZXIgaSA9IFFVRVVFX0ZJUlNUX0xJU1RFTkVSOyBpICE9IElOVkFMSURfUFJPQ19OVU1C RVI7IGkgPSBRVUVVRV9ORVhUX0xJU1RFTkVSKGkpKQogCQl7CisJCQlpbnQzMgkJcGlkOwor CQkJUXVldWVQb3NpdGlvbiBwb3M7CisKKwkJCWlmIChRVUVVRV9CQUNLRU5EX0RCT0lEKGkp ICE9IE15RGF0YWJhc2VJZCkKKwkJCQljb250aW51ZTsKKworCQkJaWYgKFFVRVVFX0JBQ0tF TkRfV0FLRVVQX1BFTkRJTkcoaSkpCisJCQkJY29udGludWU7CisKKwkJCXBvcyA9IFFVRVVF X0JBQ0tFTkRfUE9TKGkpOworCiAJCQkvKgogCQkJICogQWx3YXlzIHNpZ25hbCBsaXN0ZW5l cnMgaW4gb3VyIG93biBkYXRhYmFzZSwgdW5sZXNzIHRoZXkncmUKLQkJCSAqIGFscmVhZHkg Y2F1Z2h0IHVwICh1bmxpa2VseSwgYnV0IHBvc3NpYmxlKS4KKwkJCSAqIGFscmVhZHkgY2F1 Z2h0IHVwLgogCQkJICovCiAJCQlpZiAoUVVFVUVfUE9TX0VRVUFMKHBvcywgUVVFVUVfSEVB RCkpCiAJCQkJY29udGludWU7CisKKwkJCXBpZCA9IFFVRVVFX0JBQ0tFTkRfUElEKGkpOwor CQkJQXNzZXJ0KHBpZCAhPSBJbnZhbGlkUGlkKTsKKworCQkJLyogT0ssIG5lZWQgdG8gc2ln bmFsIHRoaXMgb25lICovCisJCQlRVUVVRV9CQUNLRU5EX1dBS0VVUF9QRU5ESU5HKGkpID0g dHJ1ZTsKKwkJCXBpZHNbY291bnRdID0gcGlkOworCQkJcHJvY25vc1tjb3VudF0gPSBpOwor CQkJc2lnbmFsZWRbaV0gPSB0cnVlOworCQkJY291bnQrKzsKIAkJfQotCQllbHNlCisJfQor CWVsc2UKKwl7CisJCS8qCisJCSAqIEluIG11bHRpY2FzdCBtb2RlLCBzaWduYWwgc3BlY2lm aWMgbGlzdGVuaW5nIGJhY2tlbmRzLiBXZSBtdXN0CisJCSAqIHJlLWNoZWNrIHRoZSBoYXNo IGVudHJpZXMgaGVyZSBpbnNpZGUgdGhlIGxvY2sgdG8gYXZvaWQgcmFjZXMuCisJCSAqLwor CQlmb3JlYWNoKHAsIGNoYW5uZWxzKQogCQl7Ci0JCQkvKgotCQkJICogTGlzdGVuZXJzIGlu IG90aGVyIGRhdGFiYXNlcyBzaG91bGQgYmUgc2lnbmFsZWQgb25seSBpZiB0aGV5Ci0JCQkg KiBhcmUgZmFyIGJlaGluZC4KLQkJCSAqLwotCQkJaWYgKGFzeW5jUXVldWVQYWdlRGlmZihR VUVVRV9QT1NfUEFHRShRVUVVRV9IRUFEKSwKLQkJCQkJCQkJICAgUVVFVUVfUE9TX1BBR0Uo cG9zKSkgPCBRVUVVRV9DTEVBTlVQX0RFTEFZKQotCQkJCWNvbnRpbnVlOworCQkJY2hhcgkg ICAqY2hhbm5lbCA9IChjaGFyICopIGxmaXJzdChwKTsKKwkJCUNoYW5uZWxFbnRyeSAqZW50 cnk7CisJCQlMV0xvY2sJICAgKmxvY2sgPSBHZXRDaGFubmVsSGFzaExvY2soY2hhbm5lbCk7 CisKKwkJCUxXTG9ja0FjcXVpcmUobG9jaywgTFdfU0hBUkVEKTsKKwkJCWVudHJ5ID0gQ2hh bm5lbEhhc2hMb29rdXAoY2hhbm5lbCk7CisKKwkJCWlmIChlbnRyeSAmJiAhZW50cnktPmlz X2Jyb2FkY2FzdCkKKwkJCXsKKwkJCQlmb3IgKGludCBqID0gMDsgaiA8IGVudHJ5LT5udW1f bGlzdGVuZXJzOyBqKyspCisJCQkJeworCQkJCQlQcm9jTnVtYmVyCWkgPSBlbnRyeS0+bGlz dGVuZXJzW2pdOworCQkJCQlpbnQzMgkJcGlkOworCQkJCQlRdWV1ZVBvc2l0aW9uIHBvczsK KworCQkJCQlpZiAoUVVFVUVfQkFDS0VORF9XQUtFVVBfUEVORElORyhpKSkKKwkJCQkJCWNv bnRpbnVlOworCisJCQkJCWlmIChzaWduYWxlZFtpXSkKKwkJCQkJCWNvbnRpbnVlOworCisJ CQkJCXBvcyA9IFFVRVVFX0JBQ0tFTkRfUE9TKGkpOworCisJCQkJCWlmIChRVUVVRV9QT1Nf RVFVQUwocG9zLCBRVUVVRV9IRUFEKSkKKwkJCQkJCWNvbnRpbnVlOworCisJCQkJCWlmIChR VUVVRV9CQUNLRU5EX0RCT0lEKGkpICE9IE15RGF0YWJhc2VJZCkKKwkJCQkJCWNvbnRpbnVl OworCisJCQkJCXBpZCA9IFFVRVVFX0JBQ0tFTkRfUElEKGkpOworCQkJCQlBc3NlcnQocGlk ICE9IEludmFsaWRQaWQpOworCisJCQkJCS8qIE9LLCBuZWVkIHRvIHNpZ25hbCB0aGlzIG9u ZSAqLworCQkJCQlRVUVVRV9CQUNLRU5EX1dBS0VVUF9QRU5ESU5HKGkpID0gdHJ1ZTsKKwkJ CQkJcGlkc1tjb3VudF0gPSBwaWQ7CisJCQkJCXByb2Nub3NbY291bnRdID0gaTsKKwkJCQkJ c2lnbmFsZWRbaV0gPSB0cnVlOworCQkJCQljb3VudCsrOworCQkJCX0KKwkJCX0KKwkJCUxX TG9ja1JlbGVhc2UobG9jayk7CiAJCX0KLQkJLyogT0ssIG5lZWQgdG8gc2lnbmFsIHRoaXMg b25lICovCi0JCXBpZHNbY291bnRdID0gcGlkOwotCQlwcm9jbm9zW2NvdW50XSA9IGk7Ci0J CWNvdW50Kys7CiAJfQorCisJLyoKKwkgKiBDaGVjayBpZiB3ZSBzaG91bGQgdHJpZ2dlciB0 aGUgZGVmZXJyZWQgd2FrZXVwIHdvcmtlciBhZnRlciB3ZSdyZSBkb25lCisJICogc2VuZGlu ZyBpbW1lZGlhdGUgc2lnbmFscy4gV2UgZG8gdGhpcyBjaGVjayB3aGlsZSBzdGlsbCBob2xk aW5nIHRoZQorCSAqIGxvY2sgdG8gYXZvaWQgbmVlZGluZyB0byByZWFjcXVpcmUgaXQgbGF0 ZXIuCisJICovCisJaWYgKCFhc3luY1F1ZXVlQ29udHJvbC0+ZGVmZXJyZWRXYWtldXBXb3Jr ZXJBY3RpdmUgJiYKKwkJYXN5bmNRdWV1ZUNvbnRyb2wtPmRlZmVycmVkV2FrZXVwV29ya2Vy UGlkICE9IDApCisJeworCQlhc3luY1F1ZXVlQ29udHJvbC0+ZGVmZXJyZWRXYWtldXBXb3Jr ZXJBY3RpdmUgPSB0cnVlOworCQl0cmlnZ2VyX2RlZmVycmVkX3dha2V1cCA9IHRydWU7CisJ CWRlZmVycmVkX3dha2V1cF9waWQgPSBhc3luY1F1ZXVlQ29udHJvbC0+ZGVmZXJyZWRXYWtl dXBXb3JrZXJQaWQ7CisJfQorCiAJTFdMb2NrUmVsZWFzZShOb3RpZnlRdWV1ZUxvY2spOwog CiAJLyogTm93IHNlbmQgc2lnbmFscyAqLwpAQCAtMTY0Nyw5ICsxOTkzLDkgQEAgU2lnbmFs QmFja2VuZHModm9pZCkKIAogCQkvKgogCQkgKiBOb3RlOiBhc3N1bWluZyB0aGluZ3MgYXJl bid0IGJyb2tlbiwgYSBzaWduYWwgZmFpbHVyZSBoZXJlIGNvdWxkCi0JCSAqIG9ubHkgb2Nj dXIgaWYgdGhlIHRhcmdldCBiYWNrZW5kIGV4aXRlZCBzaW5jZSB3ZSByZWxlYXNlZAotCQkg KiBOb3RpZnlRdWV1ZUxvY2s7IHdoaWNoIGlzIHVubGlrZWx5IGJ1dCBjZXJ0YWlubHkgcG9z c2libGUuIFNvIHdlCi0JCSAqIGp1c3QgbG9nIGEgbG93LWxldmVsIGRlYnVnIG1lc3NhZ2Ug aWYgaXQgaGFwcGVucy4KKwkJICogb25seSBvY2N1ciBpZiB0aGUgdGFyZ2V0IGJhY2tlbmQg ZXhpdGVkIHNpbmNlIHdlIHJlbGVhc2VkIHRoZSBsb2NrOworCQkgKiB3aGljaCBpcyB1bmxp a2VseSBidXQgY2VydGFpbmx5IHBvc3NpYmxlLiBTbyB3ZSBqdXN0IGxvZyBhCisJCSAqIGxv dy1sZXZlbCBkZWJ1ZyBtZXNzYWdlIGlmIGl0IGhhcHBlbnMuCiAJCSAqLwogCQlpZiAoU2Vu ZFByb2NTaWduYWwocGlkLCBQUk9DU0lHX05PVElGWV9JTlRFUlJVUFQsIHByb2Nub3NbaV0p IDwgMCkKIAkJCWVsb2coREVCVUczLCAiY291bGQgbm90IHNpZ25hbCBiYWNrZW5kIHdpdGgg UElEICVkOiAlbSIsIHBpZCk7CkBAIC0xNjU3LDYgKzIwMDMsMjUgQEAgU2lnbmFsQmFja2Vu ZHModm9pZCkKIAogCXBmcmVlKHBpZHMpOwogCXBmcmVlKHByb2Nub3MpOworCXBmcmVlKHNp Z25hbGVkKTsKKworCS8qCisJICogVHJpZ2dlciB0aGUgZGVmZXJyZWQgd2FrZXVwIHdvcmtl ciBpZiBuZWVkZWQuIFRoZSB3b3JrZXIgd2lsbCBjaGVjayBmb3IKKwkgKiBsYWdnaW5nIGJh Y2tlbmRzIGFuZCB3YWtlIHRoZW0gdXAgd2l0aCBzdGFnZ2VyZWQgZGVsYXlzLgorCSAqLwor CWlmICh0cmlnZ2VyX2RlZmVycmVkX3dha2V1cCkKKwl7CisJCWlmIChraWxsKGRlZmVycmVk X3dha2V1cF9waWQsIFNJR1VTUjEpIDwgMCkKKwkJeworCQkJLyogV29ya2VyIG1pZ2h0IGhh dmUgZGllZCwgY2xlYXIgdGhlIGZsYWdzICovCisJCQllbG9nKFdBUk5JTkcsICJjb3VsZCBu b3Qgc2lnbmFsIGRlZmVycmVkIHdha2V1cCB3b3JrZXI6ICVtIik7CisKKwkJCUxXTG9ja0Fj cXVpcmUoTm90aWZ5UXVldWVMb2NrLCBMV19FWENMVVNJVkUpOworCQkJYXN5bmNRdWV1ZUNv bnRyb2wtPmRlZmVycmVkV2FrZXVwV29ya2VyQWN0aXZlID0gZmFsc2U7CisJCQlhc3luY1F1 ZXVlQ29udHJvbC0+ZGVmZXJyZWRXYWtldXBXb3JrZXJQaWQgPSAwOworCQkJTFdMb2NrUmVs ZWFzZShOb3RpZnlRdWV1ZUxvY2spOworCQl9CisJfQogfQogCiAvKgpAQCAtMTg2NSw2ICsy MjMwLDcgQEAgYXN5bmNRdWV1ZVJlYWRBbGxOb3RpZmljYXRpb25zKHZvaWQpCiAJTFdMb2Nr QWNxdWlyZShOb3RpZnlRdWV1ZUxvY2ssIExXX1NIQVJFRCk7CiAJLyogQXNzZXJ0IGNoZWNr cyB0aGF0IHdlIGhhdmUgYSB2YWxpZCBzdGF0ZSBlbnRyeSAqLwogCUFzc2VydChNeVByb2NQ aWQgPT0gUVVFVUVfQkFDS0VORF9QSUQoTXlQcm9jTnVtYmVyKSk7CisJUVVFVUVfQkFDS0VO RF9XQUtFVVBfUEVORElORyhNeVByb2NOdW1iZXIpID0gZmFsc2U7CiAJcG9zID0gUVVFVUVf QkFDS0VORF9QT1MoTXlQcm9jTnVtYmVyKTsKIAloZWFkID0gUVVFVUVfSEVBRDsKIAlMV0xv Y2tSZWxlYXNlKE5vdGlmeVF1ZXVlTG9jayk7CkBAIC0yMzk1LDMgKzI3NjEsNDQxIEBAIGNo ZWNrX25vdGlmeV9idWZmZXJzKGludCAqbmV3dmFsLCB2b2lkICoqZXh0cmEsIEd1Y1NvdXJj ZSBzb3VyY2UpCiB7CiAJcmV0dXJuIGNoZWNrX3NscnVfYnVmZmVycygibm90aWZ5X2J1ZmZl cnMiLCBuZXd2YWwpOwogfQorCisKKy8qCisgKiBDaGFubmVsIGhhc2ggdGFibGUgbWFuYWdl bWVudCBmdW5jdGlvbnMKKyAqLworCisvKgorICogY2hhbm5lbF9oYXNoX2Z1bmMKKyAqICAg ICBDdXN0b20gaGFzaCBmdW5jdGlvbiBmb3IgdGhlIGNoYW5uZWwgaGFzaCB0YWJsZS4gVGhp cyBmdW5jdGlvbiBlbnN1cmVzCisgKiAgICAgdGhhdCB0aGUgbG93LW9yZGVyIGJpdHMgb2Yg dGhlIGhhc2ggYXJlIHdlbGwtZGlzdHJpYnV0ZWQsIHdoaWNoIGlzCisgKiAgICAgY3JpdGlj YWwgZm9yIHBhcnRpdGlvbmVkIGhhc2ggdGFibGVzLgorICovCitzdGF0aWMgdWludDMyCitj aGFubmVsX2hhc2hfZnVuYyhjb25zdCB2b2lkICprZXksIFNpemUga2V5c2l6ZSkKK3sKKwlj b25zdAkJQ2hhbm5lbEhhc2hLZXkgKmsgPSAoY29uc3QgQ2hhbm5lbEhhc2hLZXkgKikga2V5 OworCXVpbnQzMgkJaDsKKworCS8qCisJICogTWl4IHRoZSBkYm9pZCBhbmQgdGhlIGNoYW5u ZWwgbmFtZSB0byBwcm9kdWNlIGEgZ29vZCBoYXNoLiBoYXNoX2FueSgpCisJICogaXMgYSBo aWdoLXF1YWxpdHkgcG9ydGFibGUgaGFzaCBmdW5jdGlvbi4gVGhpcyBwcmV2ZW50cyBjaGFu bmVscyB3aXRoCisJICogdGhlIHNhbWUgbmFtZSBpbiBkaWZmZXJlbnQgZGF0YWJhc2VzIGZy b20gYWx3YXlzIG1hcHBpbmcgdG8gdGhlIHNhbWUKKwkgKiBwYXJ0aXRpb24uCisJICovCisJ aCA9IERhdHVtR2V0VUludDMyKGhhc2hfdWludDMyKGstPmRib2lkKSk7CisJaCBePSBEYXR1 bUdldFVJbnQzMihoYXNoX2FueSgoY29uc3QgdW5zaWduZWQgY2hhciAqKSBrLT5jaGFubmVs LAorCQkJCQkJCQkgc3RybmxlbihrLT5jaGFubmVsLCBOQU1FREFUQUxFTikpKTsKKworCXJl dHVybiBoOworfQorCisvKgorICogR2V0Q2hhbm5lbEhhc2hMb2NrCisgKiAgICAgUmV0dXJu IHRoZSBMV0xvY2sgdGhhdCBwcm90ZWN0cyB0aGUgcGFydGl0aW9uIGZvciB0aGUgZ2l2ZW4g Y2hhbm5lbCBuYW1lLgorICovCitzdGF0aWMgTFdMb2NrICoKK0dldENoYW5uZWxIYXNoTG9j ayhjb25zdCBjaGFyICpjaGFubmVsKQoreworCUNoYW5uZWxIYXNoS2V5IGtleTsKKwl1aW50 MzIJCWhhc2g7CisKKwlDaGFubmVsSGFzaFByZXBhcmVLZXkoJmtleSwgTXlEYXRhYmFzZUlk LCBjaGFubmVsKTsKKwloYXNoID0gZ2V0X2hhc2hfdmFsdWUoR2V0Q2hhbm5lbEhhc2goKSwg JmtleSk7CisKKwlyZXR1cm4gJmNoYW5uZWxIYXNoTG9ja3NbaGFzaCAlIE5VTV9OT1RJRllf UEFSVElUSU9OU107Cit9CisKKy8qCisgKiBDaGFubmVsSGFzaFByZXBhcmVLZXkKKyAqCQlQ cmVwYXJlIGEgY2hhbm5lbCBrZXkgKGRhdGFiYXNlIE9JRCArIGNoYW5uZWwgbmFtZSkgZm9y IHVzZSBhcyBhIGhhc2gga2V5LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK0NoYW5uZWxI YXNoUHJlcGFyZUtleShDaGFubmVsSGFzaEtleSAqIGtleSwgT2lkIGRib2lkLCBjb25zdCBj aGFyICpjaGFubmVsKQoreworCW1lbXNldChrZXksIDAsIHNpemVvZihDaGFubmVsSGFzaEtl eSkpOworCWtleS0+ZGJvaWQgPSBkYm9pZDsKKwlzdHJsY3B5KGtleS0+Y2hhbm5lbCwgY2hh bm5lbCwgTkFNRURBVEFMRU4pOworfQorCisvKgorICogQ2hhbm5lbEhhc2hBZGRMaXN0ZW5l cgorICogICAgIFJlZ2lzdGVyIHRoZSBnaXZlbiBiYWNrZW5kIGFzIGEgbGlzdGVuZXIgZm9y IHRoZSBzcGVjaWZpZWQgY2hhbm5lbC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHVzZXMgYW4g b3B0aW1pc3RpYyByZWFkLWxvY2tpbmcgc3RyYXRlZ3kgdG8gbWF4aW1pemUKKyAqIGNvbmN1 cnJlbmN5LiBBbiBleGNsdXNpdmUgbG9jayBpcyBvbmx5IHRha2VuIHdoZW4gbXV0YXRpbmcg dGhlIGxpc3RlbmVyCisgKiBsaXN0LgorICoKKyAqIDEuIEl0IGZpcnN0IHRha2VzIGEgc2hh cmVkIGxvY2suIElmIHRoZSBjaGFubmVsIGlzIGFscmVhZHkgaW4gYnJvYWRjYXN0CisgKiAg ICBtb2RlLCBvciBpZiB0aGUgY3VycmVudCBiYWNrZW5kIGlzIGFscmVhZHkgaW4gdGhlIGxp c3RlbmVyIGxpc3QsIG5vIHdyaXRlCisgKiAgICBpcyBuZWVkZWQgYW5kIHdlIGNhbiByZXR1 cm4gaW1tZWRpYXRlbHkuCisgKgorICogMi4gSWYgYSB3cml0ZSBpcyBuZWVkZWQsIGl0IHJl bGVhc2VzIHRoZSBzaGFyZWQgbG9jayBhbmQgYWNxdWlyZXMgYW4KKyAqICAgIGV4Y2x1c2l2 ZSBsb2NrLgorICoKKyAqIDMuIENSVUNJQUxMWSwgYWZ0ZXIgYWNxdWlyaW5nIHRoZSBleGNs dXNpdmUgbG9jaywgaXQgbXVzdCByZS1jaGVjayB0aGUKKyAqICAgIHN0YXRlLCBhcyBhbm90 aGVyIGJhY2tlbmQgbWF5IGhhdmUgbW9kaWZpZWQgdGhlIGVudHJ5IGluIHRoZSBpbnRlcmlt LgorICoKKyAqIDQuIElmIHRoZSBudW1iZXIgb2YgbGlzdGVuZXJzIGlzIGJlbG93IE5PVElG WV9NVUxUSUNBU1RfVEhSRVNIT0xELCB0aGUKKyAqICAgIG5ldyBsaXN0ZW5lciBpcyBhZGRl ZC4gSWYgdGhlIHRocmVzaG9sZCBpcyByZWFjaGVkLCB0aGUgY2hhbm5lbCBpcworICogICAg Y29udmVydGVkIHRvIGJyb2FkY2FzdCBtb2RlLgorICovCitzdGF0aWMgdm9pZAorQ2hhbm5l bEhhc2hBZGRMaXN0ZW5lcihjb25zdCBjaGFyICpjaGFubmVsLCBQcm9jTnVtYmVyIHByb2Nu bykKK3sKKwlDaGFubmVsRW50cnkgKmVudHJ5OworCWJvb2wJCWZvdW5kOworCUNoYW5uZWxI YXNoS2V5IGtleTsKKwlMV0xvY2sJICAgKmxvY2sgPSBHZXRDaGFubmVsSGFzaExvY2soY2hh bm5lbCk7CisKKwkvKgorCSAqIElmIHRoZSB0aHJlc2hvbGQgaXMgemVybywgdGhpcyBvcHRp bWl6YXRpb24gaXMgZGlzYWJsZWQuIEFsbCBjaGFubmVscworCSAqIGltbWVkaWF0ZWx5IHVz ZSBicm9hZGNhc3QsIHNvIHdlIGRvbid0IG5lZWQgdG8gdHJhY2sgdGhlbS4KKwkgKi8KKwlp ZiAoTk9USUZZX01VTFRJQ0FTVF9USFJFU0hPTEQgPD0gMCkKKwkJcmV0dXJuOworCisJQ2hh bm5lbEhhc2hQcmVwYXJlS2V5KCZrZXksIE15RGF0YWJhc2VJZCwgY2hhbm5lbCk7CisKKwkv KgorCSAqIEZBU1QgUEFUSDogT3B0aW1pc3RpY2FsbHkgdGFrZSBhIHNoYXJlZCBsb2NrLiBJ ZiB0aGUgY2hhbm5lbCBpcyBhbHJlYWR5CisJICogaW4gYnJvYWRjYXN0IG1vZGUsIG9yIGlm IHdlIGFyZSBhbHJlYWR5IGxpc3RlZCwgd2UgYXJlIGRvbmUuCisJICovCisJTFdMb2NrQWNx dWlyZShsb2NrLCBMV19TSEFSRUQpOworCWVudHJ5ID0gKENoYW5uZWxFbnRyeSAqKSBoYXNo X3NlYXJjaChHZXRDaGFubmVsSGFzaCgpLCAma2V5LCBIQVNIX0ZJTkQsIE5VTEwpOworCWlm IChlbnRyeSkKKwl7CisJCWlmIChlbnRyeS0+aXNfYnJvYWRjYXN0KQorCQl7CisJCQlMV0xv Y2tSZWxlYXNlKGxvY2spOworCQkJcmV0dXJuOworCQl9CisJCS8qIENoZWNrIGlmIHdlIGFy ZSBhbHJlYWR5IGluIHRoZSBsaXN0ICovCisJCWZvciAoaW50IGkgPSAwOyBpIDwgZW50cnkt Pm51bV9saXN0ZW5lcnM7IGkrKykKKwkJeworCQkJaWYgKGVudHJ5LT5saXN0ZW5lcnNbaV0g PT0gcHJvY25vKQorCQkJeworCQkJCUxXTG9ja1JlbGVhc2UobG9jayk7CisJCQkJcmV0dXJu OworCQkJfQorCQl9CisJfQorCUxXTG9ja1JlbGVhc2UobG9jayk7CisKKwkvKgorCSAqIFNM T1cgUEFUSDogV2UgbmVlZCB0byB3cml0ZS4gQWNxdWlyZSBleGNsdXNpdmUgbG9jay4KKwkg Ki8KKwlMV0xvY2tBY3F1aXJlKGxvY2ssIExXX0VYQ0xVU0lWRSk7CisKKwkvKgorCSAqIFJl LWNoZWNrIHN0YXRlIGFmdGVyIGFjcXVpcmluZyBleGNsdXNpdmUgbG9jaywgYXMgaXQgbWF5 IGhhdmUgY2hhbmdlZC4KKwkgKi8KKwllbnRyeSA9IChDaGFubmVsRW50cnkgKikgaGFzaF9z ZWFyY2goR2V0Q2hhbm5lbEhhc2goKSwgJmtleSwgSEFTSF9FTlRFUl9OVUxMLCAmZm91bmQp OworCisJaWYgKGVudHJ5ID09IE5VTEwpCisJeworCQkvKiBPdXQgb2YgbWVtb3J5IGluIHRo ZSBoYXNoIHBhcnRpdGlvbi4gKi8KKwkJZXJlcG9ydChERUJVRzEsIChlcnJtc2coInRvbyBt YW55IG5vdGlmaWNhdGlvbiBjaGFubmVscyBhcmUgYWxyZWFkeSBiZWluZyB0cmFja2VkIikp KTsKKwkJTFdMb2NrUmVsZWFzZShsb2NrKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghZm91 bmQpCisJeworCQkvKiBGaXJzdCBsaXN0ZW5lciBmb3IgdGhpcyBjaGFubmVsLiAqLworCQll bnRyeS0+aXNfYnJvYWRjYXN0ID0gZmFsc2U7CisJCWVudHJ5LT5udW1fbGlzdGVuZXJzID0g MTsKKwkJZW50cnktPmxpc3RlbmVyc1swXSA9IHByb2NubzsKKwl9CisJZWxzZQorCXsKKwkJ LyogRW50cnkgYWxyZWFkeSBleGlzdHMsIHJlLWNoZWNrIGV2ZXJ5dGhpbmcuICovCisJCWJv b2wJCWFscmVhZHlfcHJlc2VudCA9IGZhbHNlOworCisJCWlmIChlbnRyeS0+aXNfYnJvYWRj YXN0KQorCQl7CisJCQkvKiBBbm90aGVyIGJhY2tlbmQgc2V0IGl0IHRvIGJyb2FkY2FzdCBt b2RlLiBXZSdyZSBkb25lLiAqLworCQkJTFdMb2NrUmVsZWFzZShsb2NrKTsKKwkJCXJldHVy bjsKKwkJfQorCisJCWZvciAoaW50IGkgPSAwOyBpIDwgZW50cnktPm51bV9saXN0ZW5lcnM7 IGkrKykKKwkJeworCQkJaWYgKGVudHJ5LT5saXN0ZW5lcnNbaV0gPT0gcHJvY25vKQorCQkJ eworCQkJCWFscmVhZHlfcHJlc2VudCA9IHRydWU7CisJCQkJYnJlYWs7CisJCQl9CisJCX0K KworCQlpZiAoIWFscmVhZHlfcHJlc2VudCkKKwkJeworCQkJaWYgKGVudHJ5LT5udW1fbGlz dGVuZXJzIDwgTk9USUZZX01VTFRJQ0FTVF9USFJFU0hPTEQpCisJCQl7CisJCQkJLyogQWRk IG91cnNlbHZlcyB0byB0aGUgbGlzdCBvZiBsaXN0ZW5lcnMuICovCisJCQkJZW50cnktPmxp c3RlbmVyc1tlbnRyeS0+bnVtX2xpc3RlbmVyc10gPSBwcm9jbm87CisJCQkJZW50cnktPm51 bV9saXN0ZW5lcnMrKzsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvKiBXZSBhcmUgdGhl IGxpc3RlbmVyIHRoYXQgZXhjZWVkcyB0aGUgdGhyZXNob2xkLiAqLworCQkJCWVudHJ5LT5p c19icm9hZGNhc3QgPSB0cnVlOworCQkJCWVudHJ5LT5udW1fbGlzdGVuZXJzID0gMDsJLyog Q2xlYXIgdGhlIGxpc3QgKi8KKwkJCX0KKwkJfQorCX0KKwlMV0xvY2tSZWxlYXNlKGxvY2sp OworfQorCisvKgorICogQ2hhbm5lbEhhc2hSZW1vdmVMaXN0ZW5lcgorICoJCVVwZGF0ZSB0 aGUgY2hhbm5lbCBoYXNoIHdoZW4gYSBiYWNrZW5kIHN0b3BzIGxpc3RlbmluZyBvbiBhIGNo YW5uZWwuCisgKgorICogVGhpcyBmdW5jdGlvbiB1c2VzIGFuIG9wdGltaXN0aWMgcmVhZC1s b2NrIHN0cmF0ZWd5LiBBbiBleGNsdXNpdmUgbG9jayBpcworICogb25seSB0YWtlbiBpZiB3 ZSBhcmUgaW4gdGhlIGxpc3RlbmVyIGxpc3QgZm9yIGEgY2hhbm5lbCBhbmQgbmVlZCB0byBy ZW1vdmUKKyAqIG91cnNlbHZlcy4gSWYgYSBjaGFubmVsIGlzIGluIGJyb2FkY2FzdCBtb2Rl LCB3ZSBjYW5ub3Qgc2FmZWx5IG1vZGlmeSBpdCwKKyAqIGFzIHdlIGNhbid0IGtub3cgd2hp Y2ggYmFja2VuZHMgYXJlIGxpc3RlbmluZy4KKyAqLworc3RhdGljIHZvaWQKK0NoYW5uZWxI YXNoUmVtb3ZlTGlzdGVuZXIoY29uc3QgY2hhciAqY2hhbm5lbCwgUHJvY051bWJlciBwcm9j bm8pCit7CisJQ2hhbm5lbEVudHJ5ICplbnRyeTsKKwlDaGFubmVsSGFzaEtleSBrZXk7CisJ TFdMb2NrCSAgICpsb2NrID0gR2V0Q2hhbm5lbEhhc2hMb2NrKGNoYW5uZWwpOworCWJvb2wJ CXByZXNlbnQgPSBmYWxzZTsKKworCUNoYW5uZWxIYXNoUHJlcGFyZUtleSgma2V5LCBNeURh dGFiYXNlSWQsIGNoYW5uZWwpOworCisJLyoKKwkgKiBUYWtlIGEgc2hhcmVkIGxvY2sgZmly c3QgdG8gc2VlIGlmIGEgcmVtb3ZhbCBpcyBldmVuIHBvc3NpYmxlLiBJZiB0aGUKKwkgKiBl bnRyeSBkb2Vzbid0IGV4aXN0LCBpcyBpbiBicm9hZGNhc3QgbW9kZSwgb3Igd2UncmUgbm90 IGluIGl0cyBsaXN0LCB3ZQorCSAqIGhhdmUgbm90aGluZyB0byBkby4gVGhpcyBpcyB0aGUg ZmFzdCBwYXRoLgorCSAqLworCUxXTG9ja0FjcXVpcmUobG9jaywgTFdfU0hBUkVEKTsKKwll bnRyeSA9IChDaGFubmVsRW50cnkgKikgaGFzaF9zZWFyY2goR2V0Q2hhbm5lbEhhc2goKSwg JmtleSwgSEFTSF9GSU5ELCBOVUxMKTsKKwlpZiAoIWVudHJ5IHx8IGVudHJ5LT5pc19icm9h ZGNhc3QpCisJeworCQlMV0xvY2tSZWxlYXNlKGxvY2spOworCQlyZXR1cm47CisJfQorCisJ LyogQ2hlY2sgaWYgd2UgYXJlIGluIHRoZSBsaXN0ICovCisJZm9yIChpbnQgaSA9IDA7IGkg PCBlbnRyeS0+bnVtX2xpc3RlbmVyczsgaSsrKQorCXsKKwkJaWYgKGVudHJ5LT5saXN0ZW5l cnNbaV0gPT0gcHJvY25vKQorCQl7CisJCQlwcmVzZW50ID0gdHJ1ZTsKKwkJCWJyZWFrOwor CQl9CisJfQorCWlmICghcHJlc2VudCkKKwl7CisJCUxXTG9ja1JlbGVhc2UobG9jayk7CisJ CXJldHVybjsKKwl9CisJTFdMb2NrUmVsZWFzZShsb2NrKTsKKworCS8qIEEgcmVtb3ZhbCBp cyBsaWtlbHkgbmVlZGVkLiBBY3F1aXJlIGFuIGV4Y2x1c2l2ZSBsb2NrLiAqLworCUxXTG9j a0FjcXVpcmUobG9jaywgTFdfRVhDTFVTSVZFKTsKKworCS8qCisJICogUmUtY2hlY2sgdGhl IHN0YXRlLiBBbm90aGVyIGJhY2tlbmQgbWlnaHQgaGF2ZSBjaGFuZ2VkIGl0IChlLmcuLCB0 bworCSAqIGJyb2FkY2FzdCBtb2RlKS4KKwkgKi8KKwllbnRyeSA9IChDaGFubmVsRW50cnkg KikgaGFzaF9zZWFyY2goR2V0Q2hhbm5lbEhhc2goKSwgJmtleSwgSEFTSF9GSU5ELCBOVUxM KTsKKwlpZiAoZW50cnkgJiYgIWVudHJ5LT5pc19icm9hZGNhc3QpCisJeworCQlpbnQJCQlp OworCisJCWZvciAoaSA9IDA7IGkgPCBlbnRyeS0+bnVtX2xpc3RlbmVyczsgaSsrKQorCQl7 CisJCQlpZiAoZW50cnktPmxpc3RlbmVyc1tpXSA9PSBwcm9jbm8pCisJCQl7CisJCQkJLyoK KwkJCQkgKiBGb3VuZCBvdXIgcHJvY25vLiBSZW1vdmUgaXQgZnJvbSB0aGUgbGlzdGVuZXIg YXJyYXkuCisJCQkJICoKKwkJCQkgKiBJZiB0aGlzIGlzIHRoZSBsYXN0IGxpc3RlbmVyLCB3 ZSByZW1vdmUgdGhlIGVudGlyZSBoYXNoCisJCQkJICogZW50cnkgZm9yIHRoZSBjaGFubmVs LgorCQkJCSAqLworCQkJCWlmIChlbnRyeS0+bnVtX2xpc3RlbmVycyA9PSAxKQorCQkJCXsK KwkJCQkJKHZvaWQpIGhhc2hfc2VhcmNoKEdldENoYW5uZWxIYXNoKCksICZrZXksIEhBU0hf UkVNT1ZFLCBOVUxMKTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJ ICogVG8gcmVtb3ZlIGFuIGVsZW1lbnQgZnJvbSB0aGUgYXJyYXkgd2hpbGUga2VlcGluZyBp dAorCQkJCQkgKiBjb250aWd1b3VzLCB3ZSBmaXJzdCBkZWNyZW1lbnQgdGhlIGxpc3RlbmVy IGNvdW50LgorCQkJCQkgKiBUaGVuLCB3ZSBzaGlmdCBhbGwgc3Vic2VxdWVudCBlbGVtZW50 cyBvbmUgcG9zaXRpb24gdG8KKwkJCQkJICogdGhlIGxlZnQsIG92ZXJ3cml0aW5nIHRoZSBl bGVtZW50IHdlIHdhbnQgdG8gcmVtb3ZlLgorCQkJCQkgKgorCQkJCQkgKiBUaGUgYGlmIChp IDwgZW50cnktPm51bV9saXN0ZW5lcnMpYCBjb25kaXRpb24KKwkJCQkJICogZXhwbGljaXRs eSBoYW5kbGVzIHRoZSBjYXNlIHdoZXJlIHRoZSBsYXN0IGVsZW1lbnQgaW4KKwkJCQkJICog dGhlIGFycmF5IGlzIGJlaW5nIHJlbW92ZWQuIEluIHRoYXQgc2NlbmFyaW8sIGBpYAorCQkJ CQkgKiBlcXVhbHMgdGhlIG5ldyBgbnVtX2xpc3RlbmVyc2AsIHNvIG5vIG1lbW9yeSBtb3Zl bWVudAorCQkJCQkgKiBpcyBuZWNlc3NhcnksIGFuZCB0aGUgYG1lbW1vdmVgIGlzIGNvcnJl Y3RseSBza2lwcGVkLgorCQkJCQkgKi8KKwkJCQkJZW50cnktPm51bV9saXN0ZW5lcnMtLTsK KwkJCQkJaWYgKGkgPCBlbnRyeS0+bnVtX2xpc3RlbmVycykKKwkJCQkJeworCQkJCQkJU2l6 ZQkJc2l6ZV90b19tb3ZlOworCisJCQkJCQlzaXplX3RvX21vdmUgPSBtdWxfc2l6ZShlbnRy eS0+bnVtX2xpc3RlbmVycyAtIGksCisJCQkJCQkJCQkJCQlzaXplb2YoUHJvY051bWJlcikp OworCQkJCQkJbWVtbW92ZSgmZW50cnktPmxpc3RlbmVyc1tpXSwKKwkJCQkJCQkJJmVudHJ5 LT5saXN0ZW5lcnNbaSArIDFdLAorCQkJCQkJCQlzaXplX3RvX21vdmUpOworCQkJCQl9CisJ CQkJfQorCQkJCWJyZWFrOwkJCS8qIEZvdW5kIGFuZCByZW1vdmVkLCBleGl0IGxvb3AuICov CisJCQl9CisJCX0KKwl9CisJTFdMb2NrUmVsZWFzZShsb2NrKTsKK30KKworLyoKKyAqIENo YW5uZWxIYXNoTG9va3VwCisgKgkJTG9vayB1cCB0aGUgY2hhbm5lbCBoYXNoIGVudHJ5IGZv ciB0aGUgZ2l2ZW4gY2hhbm5lbCBuYW1lIGluIHRoZQorICoJCWN1cnJlbnQgZGF0YWJhc2Uu CisgKgorICogUmV0dXJucyBOVUxMIGlmIG5vIGhhc2ggZW50cnkgZXhpc3RzIGZvciB0aGUg Y2hhbm5lbC4gV2hlbiBhbiBlbnRyeSBleGlzdHMsCisgKiB0aGUgY2FsbGVyIHNob3VsZCBj aGVjayB0aGUgaXNfYnJvYWRjYXN0IGZpZWxkIHRvIGRldGVybWluZSBpZiBpbmRpdmlkdWFs CisgKiBsaXN0ZW5lcnMgYXJlIGJlaW5nIHRyYWNrZWQgb3IgaWYgdGhlIGNoYW5uZWwgdXNl cyBicm9hZGNhc3QgbW9kZS4KKyAqCisgKiBDYWxsZXIgbXVzdCBob2xkIHRoZSBhcHByb3By aWF0ZSBwYXJ0aXRpb24gbG9jayAoc2hhcmVkIGlzIHN1ZmZpY2llbnQpLgorICovCitzdGF0 aWMgQ2hhbm5lbEVudHJ5ICoKK0NoYW5uZWxIYXNoTG9va3VwKGNvbnN0IGNoYXIgKmNoYW5u ZWwpCit7CisJQ2hhbm5lbEhhc2hLZXkga2V5OworCisJQXNzZXJ0KExXTG9ja0hlbGRCeU1l KEdldENoYW5uZWxIYXNoTG9jayhjaGFubmVsKSkpOworCisJQ2hhbm5lbEhhc2hQcmVwYXJl S2V5KCZrZXksIE15RGF0YWJhc2VJZCwgY2hhbm5lbCk7CisKKwlyZXR1cm4gKENoYW5uZWxF bnRyeSAqKSBoYXNoX3NlYXJjaChHZXRDaGFubmVsSGFzaCgpLAorCQkJCQkJCQkJCSZrZXks CisJCQkJCQkJCQkJSEFTSF9GSU5ELAorCQkJCQkJCQkJCU5VTEwpOworfQorCisvKgorICog R2V0UGVuZGluZ05vdGlmeUNoYW5uZWxzCisgKgkJR2V0IGxpc3Qgb2YgdW5pcXVlIGNoYW5u ZWwgbmFtZXMgZnJvbSBwZW5kaW5nIG5vdGlmaWNhdGlvbnMuCisgKi8KK3N0YXRpYyBMaXN0 ICoKK0dldFBlbmRpbmdOb3RpZnlDaGFubmVscyh2b2lkKQoreworCUxpc3QJICAgKmNoYW5u ZWxzID0gTklMOworCUxpc3RDZWxsICAgKnA7CisJTGlzdENlbGwgICAqcTsKKwlib29sCQlm b3VuZDsKKworCWlmICghcGVuZGluZ05vdGlmaWVzKQorCQlyZXR1cm4gTklMOworCisJLyog Q29sbGVjdCB1bmlxdWUgY2hhbm5lbCBuYW1lcyBmcm9tIHBlbmRpbmcgbm90aWZpY2F0aW9u cyAqLworCWZvcmVhY2gocCwgcGVuZGluZ05vdGlmaWVzLT5ldmVudHMpCisJeworCQlOb3Rp ZmljYXRpb24gKm4gPSAoTm90aWZpY2F0aW9uICopIGxmaXJzdChwKTsKKwkJY2hhcgkgICAq Y2hhbm5lbCA9IG4tPmRhdGE7CisKKwkJLyogQ2hlY2sgaWYgd2UgYWxyZWFkeSBoYXZlIHRo aXMgY2hhbm5lbCBpbiBvdXIgbGlzdCAqLworCQlmb3VuZCA9IGZhbHNlOworCQlmb3JlYWNo KHEsIGNoYW5uZWxzKQorCQl7CisJCQljaGFyCSAgICpleGlzdGluZyA9IChjaGFyICopIGxm aXJzdChxKTsKKworCQkJaWYgKHN0cmNtcChleGlzdGluZywgY2hhbm5lbCkgPT0gMCkKKwkJ CXsKKwkJCQlmb3VuZCA9IHRydWU7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAo IWZvdW5kKQorCQkJY2hhbm5lbHMgPSBsYXBwZW5kKGNoYW5uZWxzLCBjaGFubmVsKTsKKwl9 CisKKwlyZXR1cm4gY2hhbm5lbHM7Cit9CisKKy8qCisgKiBBc3luY0RlZmVycmVkV2FrZXVw U2V0V29ya2VyUGlkCisgKgkJU3RvcmUgdGhlIFBJRCBvZiB0aGUgZGVmZXJyZWQgd2FrZXVw IHdvcmtlciBpbiBzaGFyZWQgbWVtb3J5CisgKi8KK3ZvaWQKK0FzeW5jRGVmZXJyZWRXYWtl dXBTZXRXb3JrZXJQaWQocGlkX3QgcGlkKQoreworCUxXTG9ja0FjcXVpcmUoTm90aWZ5UXVl dWVMb2NrLCBMV19FWENMVVNJVkUpOworCWFzeW5jUXVldWVDb250cm9sLT5kZWZlcnJlZFdh a2V1cFdvcmtlclBpZCA9IHBpZDsKKwlMV0xvY2tSZWxlYXNlKE5vdGlmeVF1ZXVlTG9jayk7 Cit9CisKKy8qCisgKiBBc3luY0RlZmVycmVkV2FrZXVwQ2xlYXJBY3RpdmUKKyAqCQlDbGVh ciB0aGUgYWN0aXZlIGZsYWcgZm9yIHRoZSBkZWZlcnJlZCB3YWtldXAgd29ya2VyCisgKi8K K3ZvaWQKK0FzeW5jRGVmZXJyZWRXYWtldXBDbGVhckFjdGl2ZSh2b2lkKQoreworCUxXTG9j a0FjcXVpcmUoTm90aWZ5UXVldWVMb2NrLCBMV19FWENMVVNJVkUpOworCWFzeW5jUXVldWVD b250cm9sLT5kZWZlcnJlZFdha2V1cFdvcmtlckFjdGl2ZSA9IGZhbHNlOworCUxXTG9ja1Jl bGVhc2UoTm90aWZ5UXVldWVMb2NrKTsKK30KKworLyoKKyAqIEFzeW5jR2V0TGFnZ2luZ0Jh Y2tlbmRzCisgKgkJR2V0IGxpc3Qgb2YgbGFnZ2luZyBsaXN0ZW5pbmcgYmFja2VuZHMgdGhh dCBuZWVkIHRvIGJlIHdva2VuIHVwCisgKgorICogUmV0dXJucyBhIGxpc3Qgb2YgQmFja2Vu ZFdha2V1cEluZm8gc3RydWN0cy4gVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZQorICogZm9y IGZyZWVpbmcgdGhlIGxpc3QgYW5kIGl0cyBjb250ZW50cy4KKyAqLworTGlzdCAqCitBc3lu Y0dldExhZ2dpbmdCYWNrZW5kcyh2b2lkKQoreworCUxpc3QJICAgKmxhZ2dpbmdfYmFja2Vu ZHMgPSBOSUw7CisJUXVldWVQb3NpdGlvbiBoZWFkOworCisJTFdMb2NrQWNxdWlyZShOb3Rp ZnlRdWV1ZUxvY2ssIExXX0VYQ0xVU0lWRSk7CisKKwloZWFkID0gUVVFVUVfSEVBRDsKKwor CS8qIEl0ZXJhdGUgdGhyb3VnaCBhbGwgbGlzdGVuaW5nIGJhY2tlbmRzICovCisJZm9yIChQ cm9jTnVtYmVyIGkgPSBRVUVVRV9GSVJTVF9MSVNURU5FUjsgaSAhPSBJTlZBTElEX1BST0Nf TlVNQkVSOyBpID0gUVVFVUVfTkVYVF9MSVNURU5FUihpKSkKKwl7CisJCVF1ZXVlUG9zaXRp b24gcG9zOworCQlpbnQ2NAkJcGFnZURpZmY7CisKKwkJLyogU2tpcCBpZiB3YWtldXAgaXMg YWxyZWFkeSBwZW5kaW5nICovCisJCWlmIChRVUVVRV9CQUNLRU5EX1dBS0VVUF9QRU5ESU5H KGkpKQorCQkJY29udGludWU7CisKKwkJcG9zID0gUVVFVUVfQkFDS0VORF9QT1MoaSk7CisK KwkJLyogQ2FsY3VsYXRlIGhvdyBmYXIgYmVoaW5kIHRoaXMgYmFja2VuZCBpcyAqLworCQlw YWdlRGlmZiA9IGFzeW5jUXVldWVQYWdlRGlmZihRVUVVRV9QT1NfUEFHRShoZWFkKSwgUVVF VUVfUE9TX1BBR0UocG9zKSk7CisKKwkJLyogSWYgYmFja2VuZCBpcyBsYWdnaW5nIGJ5IFFV RVVFX0NMRUFOVVBfREVMQVkgb3IgbW9yZSBwYWdlcyAqLworCQlpZiAocGFnZURpZmYgPj0g UVVFVUVfQ0xFQU5VUF9ERUxBWSkKKwkJeworCQkJQmFja2VuZFdha2V1cEluZm8gKmluZm87 CisKKwkJCWluZm8gPSAoQmFja2VuZFdha2V1cEluZm8gKikgcGFsbG9jKHNpemVvZihCYWNr ZW5kV2FrZXVwSW5mbykpOworCQkJaW5mby0+cGlkID0gUVVFVUVfQkFDS0VORF9QSUQoaSk7 CisJCQlpbmZvLT5wcm9jbm8gPSBpOworCisJCQkvKiBNYXJrIGFzIGhhdmluZyB3YWtldXAg cGVuZGluZyAqLworCQkJUVVFVUVfQkFDS0VORF9XQUtFVVBfUEVORElORyhpKSA9IHRydWU7 CisKKwkJCWxhZ2dpbmdfYmFja2VuZHMgPSBsYXBwZW5kKGxhZ2dpbmdfYmFja2VuZHMsIGlu Zm8pOworCQl9CisJfQorCisJTFdMb2NrUmVsZWFzZShOb3RpZnlRdWV1ZUxvY2spOworCisJ cmV0dXJuIGxhZ2dpbmdfYmFja2VuZHM7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9w b3N0bWFzdGVyL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9NYWtlZmlsZQpp bmRleCAwZjQ0MzVkMmQ5Ny4uMmFjNGYzZmQ1MjQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3Bvc3RtYXN0ZXIvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9NYWtl ZmlsZQpAQCAtMjEsNiArMjEsNyBAQCBPQkpTID0gXAogCWZvcmtfcHJvY2Vzcy5vIFwKIAlp bnRlcnJ1cHQubyBcCiAJbGF1bmNoX2JhY2tlbmQubyBcCisJbm90aWZ5X2Jnd29ya2VyLm8g XAogCXBnYXJjaC5vIFwKIAlwbWNoaWxkLm8gXAogCXBvc3RtYXN0ZXIubyBcCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMgYi9zcmMvYmFja2VuZC9w b3N0bWFzdGVyL2Jnd29ya2VyLmMKaW5kZXggMWFkNjVjMjM3YzMuLjA5NDYwNjU4OTVhIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMKKysrIGIvc3Jj L2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dvcmtlci5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5j bHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAicG9ydC9hdG9taWNzLmgiCiAjaW5jbHVkZSAi cG9zdG1hc3Rlci9iZ3dvcmtlcl9pbnRlcm5hbHMuaCIKKyNpbmNsdWRlICJwb3N0bWFzdGVy L25vdGlmeV9iZ3dvcmtlci5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvcG9zdG1hc3Rlci5o IgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWxsYXVuY2hlci5oIgogI2luY2x1ZGUg InJlcGxpY2F0aW9uL2xvZ2ljYWx3b3JrZXIuaCIKQEAgLTEzMiw2ICsxMzMsOSBAQCBzdGF0 aWMgY29uc3Qgc3RydWN0CiAJfSwKIAl7CiAJCSJUYWJsZXN5bmNXb3JrZXJNYWluIiwgVGFi bGVzeW5jV29ya2VyTWFpbgorCX0sCisJeworCQkiTm90aWZ5RGVmZXJyZWRXYWtldXBNYWlu IiwgTm90aWZ5RGVmZXJyZWRXYWtldXBNYWluCiAJfQogfTsKIApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvcG9zdG1hc3Rlci9tZXNvbi5idWlsZCBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0 ZXIvbWVzb24uYnVpbGQKaW5kZXggMDAwODYwM2NmZWUuLmM5ZDI4NTU3MGFlIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iYWNr ZW5kL3Bvc3RtYXN0ZXIvbWVzb24uYnVpbGQKQEAgLTksNiArOSw3IEBAIGJhY2tlbmRfc291 cmNlcyArPSBmaWxlcygKICAgJ2ZvcmtfcHJvY2Vzcy5jJywKICAgJ2ludGVycnVwdC5jJywK ICAgJ2xhdW5jaF9iYWNrZW5kLmMnLAorICAnbm90aWZ5X2Jnd29ya2VyLmMnLAogICAncGdh cmNoLmMnLAogICAncG1jaGlsZC5jJywKICAgJ3Bvc3RtYXN0ZXIuYycsCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL25vdGlmeV9iZ3dvcmtlci5jIGIvc3JjL2JhY2tl bmQvcG9zdG1hc3Rlci9ub3RpZnlfYmd3b3JrZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMC4uMDhiMTM1YTA1ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMv YmFja2VuZC9wb3N0bWFzdGVyL25vdGlmeV9iZ3dvcmtlci5jCkBAIC0wLDAgKzEsMjI1IEBA CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBub3RpZnlfYmd3b3JrZXIuYworICoJ ICBCYWNrZ3JvdW5kIHdvcmtlciBmb3IgZGVmZXJyZWQgd2FrZXVwIG9mIGxhZ2dpbmcgTElT VEVOL05PVElGWSBiYWNrZW5kcworICoKKyAqIFRoaXMgYmFja2dyb3VuZCB3b3JrZXIgaXMg cmVzcG9uc2libGUgZm9yIHBlcmZvcm1pbmcgc3RhZ2dlcmVkIHdha2V1cCBvZgorICogbGlz dGVuaW5nIGJhY2tlbmRzIHRoYXQgaGF2ZSBmYWxsZW4gYmVoaW5kIGluIHByb2Nlc3Npbmcg dGhlIG5vdGlmaWNhdGlvbgorICogcXVldWUuIEl0IHJ1bnMgY29udGludW91c2x5IGJ1dCBv bmx5IHBlcmZvcm1zIHdvcmsgd2hlbiBzaWduYWxlZCBieSB0aGUKKyAqIG1haW4gTk9USUZZ IG1lY2hhbmlzbS4KKyAqCisgKiBUaGUgd29ya2VyIGlzIHRyaWdnZXJlZCB3aGVuIFNpZ25h bEJhY2tlbmRzKCkgaW4gYXN5bmMuYyBkZXRlcm1pbmVzIHRoYXQKKyAqIHRoZXJlIGFyZSBs YWdnaW5nIGJhY2tlbmRzIHRoYXQgbmVlZCB0byBiZSB3b2tlbiB1cC4gVGhlIHdvcmtlciB0 aGVuCisgKiBwZXJmb3JtcyBhIHN0YWdnZXJlZCB3YWtldXAgd2l0aCBkZWxheXMgYmV0d2Vl biBzaWduYWxzIHRvIGF2b2lkCisgKiB0aHVuZGVyaW5nIGhlcmQgZWZmZWN0cy4KKyAqCisg KiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwg RGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVn ZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogSURFTlRJRklD QVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9ub3RpZnlfYmd3b3JrZXIuYwor ICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIK KworI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVk ZSAiYWNjZXNzL3BhcmFsbGVsLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvYXN5bmMuaCIKKyNp bmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJw b3N0bWFzdGVyL2Jnd29ya2VyLmgiCisjaW5jbHVkZSAicG9zdG1hc3Rlci9pbnRlcnJ1cHQu aCIKKyNpbmNsdWRlICJwb3N0bWFzdGVyL25vdGlmeV9iZ3dvcmtlci5oIgorI2luY2x1ZGUg InN0b3JhZ2UvaXBjLmgiCisjaW5jbHVkZSAic3RvcmFnZS9sYXRjaC5oIgorI2luY2x1ZGUg InN0b3JhZ2UvbHdsb2NrLmgiCisjaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCisjaW5jbHVk ZSAic3RvcmFnZS9wcm9jc2lnbmFsLmgiCisjaW5jbHVkZSAic3RvcmFnZS9zaG1fdG9jLmgi CisjaW5jbHVkZSAic3RvcmFnZS9zaG1lbS5oIgorI2luY2x1ZGUgInRjb3AvdGNvcHByb3Qu aCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgorI2luY2x1ZGUgInV0aWxzL3BzX3N0 YXR1cy5oIgorCisvKiBDb25maWd1cmF0aW9uIGNvbnN0YW50cyAqLworI2RlZmluZSBOT1RJ RllfREVGRVJSRURfV0FLRVVQX0RFTEFZX01TIDEwMCAvKiBtaWxsaXNlY29uZHMgYmV0d2Vl biBzaWduYWxzICovCisKKy8qIEZsYWcgdG8gaW5kaWNhdGUgU0lHVVNSMSB3YXMgcmVjZWl2 ZWQgKi8KK3N0YXRpYyB2b2xhdGlsZSBzaWdfYXRvbWljX3QgZ290X3NpZ3VzcjEgPSBmYWxz ZTsKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbiAqLworc3RhdGljIHZvaWQgUHJvY2Vzc0Rl ZmVycmVkV2FrZXVwcyh2b2lkKTsKKworLyogU2lnbmFsIGhhbmRsZXIgZm9yIFNJR1VTUjEg Ki8KK3N0YXRpYyB2b2lkCitub3RpZnlfYmd3b3JrZXJfc2lndXNyMShTSUdOQUxfQVJHUykK K3sKKwlpbnQJCQlzYXZlX2Vycm5vID0gZXJybm87CisKKwlnb3Rfc2lndXNyMSA9IHRydWU7 CisJU2V0TGF0Y2goTXlMYXRjaCk7CisKKwllcnJubyA9IHNhdmVfZXJybm87Cit9CisKKy8q CisgKiBOb3RpZnlEZWZlcnJlZFdha2V1cE1haW4KKyAqCQlNYWluIGVudHJ5IHBvaW50IGZv ciB0aGUgbm90aWZ5IGRlZmVycmVkIHdha2V1cCBiYWNrZ3JvdW5kIHdvcmtlcgorICovCit2 b2lkCitOb3RpZnlEZWZlcnJlZFdha2V1cE1haW4oRGF0dW0gbWFpbl9hcmcpCit7CisJLyog RXN0YWJsaXNoIHNpZ25hbCBoYW5kbGVycyAqLworCXBxc2lnbmFsKFNJR1VTUjEsIG5vdGlm eV9iZ3dvcmtlcl9zaWd1c3IxKTsKKwlwcXNpZ25hbChTSUdURVJNLCBkaWUpOworCUJhY2tn cm91bmRXb3JrZXJVbmJsb2NrU2lnbmFscygpOworCisJLyogU3RvcmUgb3VyIFBJRCBpbiBz aGFyZWQgbWVtb3J5IGZvciBzaWduYWxpbmcgKi8KKwlBc3luY0RlZmVycmVkV2FrZXVwU2V0 V29ya2VyUGlkKE15UHJvY1BpZCk7CisKKwllcmVwb3J0KExPRywKKwkJCShlcnJtc2coIm5v dGlmeSBkZWZlcnJlZCB3YWtldXAgd29ya2VyIHN0YXJ0ZWQiKSkpOworCisJLyogTWFpbiBs b29wICovCisJZm9yICg7OykKKwl7CisJCWludAkJCXJjOworCisJCS8qIENoZWNrIGZvciBp bnRlcnJ1cHRzICovCisJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisKKwkJLyoKKwkJICog V2FpdCBmb3Igc2lnbmFsIHRvIHdha2UgdXAuIFdlIHVzZSBXTF9MQVRDSF9TRVQgdG8gd2Fr ZSBvbiBvdXIKKwkJICogbGF0Y2ggYmVpbmcgc2V0LCBhbmQgV0xfRVhJVF9PTl9QTV9ERUFU SCB0byBlbnN1cmUgd2UgZXhpdCBpZiB0aGUKKwkJICogcG9zdG1hc3RlciBkaWVzLgorCQkg Ki8KKwkJcmMgPSBXYWl0TGF0Y2goTXlMYXRjaCwKKwkJCQkJICAgV0xfTEFUQ0hfU0VUIHwg V0xfRVhJVF9PTl9QTV9ERUFUSCwKKwkJCQkJICAgLTEsCisJCQkJCSAgIFdBSVRfRVZFTlRf Tk9USUZZX0RFRkVSUkVEX1dBS0VVUF9NQUlOKTsKKworCQlSZXNldExhdGNoKE15TGF0Y2gp OworCisJCS8qIEVtZXJnZW5jeSBiYWlsb3V0IGlmIHBvc3RtYXN0ZXIgaGFzIGRpZWQgKi8K KwkJaWYgKHJjICYgV0xfUE9TVE1BU1RFUl9ERUFUSCkKKwkJCXByb2NfZXhpdCgxKTsKKwor CQkvKiBQcm9jZXNzIGRlZmVycmVkIHdha2V1cHMgaWYgd2Ugd2VyZSBzaWduYWxlZCAqLwor CQlpZiAoZ290X3NpZ3VzcjEpCisJCXsKKwkJCWdvdF9zaWd1c3IxID0gZmFsc2U7CisJCQlQ cm9jZXNzRGVmZXJyZWRXYWtldXBzKCk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBQcm9jZXNz RGVmZXJyZWRXYWtldXBzCisgKgkJV2FrZSB1cCBsYWdnaW5nIGxpc3RlbmluZyBiYWNrZW5k cyB3aXRoIHN0YWdnZXJlZCBkZWxheXMKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNvbnRpbnVl cyBwcm9jZXNzaW5nIHVudGlsIHRoZXJlIGFyZSBubyBtb3JlIGxhZ2dpbmcKKyAqIGJhY2tl bmRzLCBlbnN1cmluZyBhbGwgYmFja2VuZHMgZXZlbnR1YWxseSBnZXQgd29rZW4gdXAuCisg Ki8KK3N0YXRpYyB2b2lkCitQcm9jZXNzRGVmZXJyZWRXYWtldXBzKHZvaWQpCit7CisJaW50 CQkJdG90YWxfd2FrZXVwX2NvdW50ID0gMDsKKworCS8qCisJICogQ29udGludWUgcHJvY2Vz c2luZyB1bnRpbCB0aGVyZSBhcmUgbm8gbW9yZSBsYWdnaW5nIGJhY2tlbmRzLiBUaGlzCisJ ICogZW5zdXJlcyB3ZSBoYW5kbGUgYWxsIGJhY2tlbmRzIHRoYXQgbmVlZCB3YWtpbmcgdXAs IGV2ZW4gaWYgbmV3IG9uZXMKKwkgKiBiZWNvbWUgbGFnZ2luZyB3aGlsZSB3ZSdyZSBwcm9j ZXNzaW5nLgorCSAqLworCWZvciAoOzspCisJeworCQlMaXN0CSAgICpsYWdnaW5nX2JhY2tl bmRzOworCQlMaXN0Q2VsbCAgICpsYzsKKwkJaW50CQkJd2FrZXVwX2NvdW50ID0gMDsKKwor CQkvKgorCQkgKiBCdWlsZCBsaXN0IG9mIGxhZ2dpbmcgYmFja2VuZHMgd2hpbGUgaG9sZGlu ZyB0aGUgbG9jay4gV2UgbmVlZCB0bworCQkgKiBiZSBxdWljayBoZXJlIHRvIGF2b2lkIGhv bGRpbmcgdGhlIGxvY2sgZm9yIHRvbyBsb25nLgorCQkgKi8KKwkJbGFnZ2luZ19iYWNrZW5k cyA9IEFzeW5jR2V0TGFnZ2luZ0JhY2tlbmRzKCk7CisKKwkJaWYgKGxhZ2dpbmdfYmFja2Vu ZHMgPT0gTklMKQorCQl7CisJCQkvKiBObyBtb3JlIGxhZ2dpbmcgYmFja2VuZHMsIHdlJ3Jl IGRvbmUgKi8KKwkJCWJyZWFrOworCQl9CisKKwkJLyogTm93IHBlcmZvcm0gdGhlIHN0YWdn ZXJlZCB3YWtldXAgd2l0aG91dCBob2xkaW5nIHRoZSBsb2NrICovCisJCWZvcmVhY2gobGMs IGxhZ2dpbmdfYmFja2VuZHMpCisJCXsKKwkJCUJhY2tlbmRXYWtldXBJbmZvICppbmZvID0g KEJhY2tlbmRXYWtldXBJbmZvICopIGxmaXJzdChsYyk7CisKKwkJCS8qIFNlbmQgc2lnbmFs IHRvIHRoZSBiYWNrZW5kICovCisJCQlpZiAoU2VuZFByb2NTaWduYWwoaW5mby0+cGlkLCBQ Uk9DU0lHX05PVElGWV9JTlRFUlJVUFQsIGluZm8tPnByb2NubykgPCAwKQorCQkJeworCQkJ CS8qIEJhY2tlbmQgbWlnaHQgaGF2ZSBleGl0ZWQsIGp1c3QgbG9nIGFuZCBjb250aW51ZSAq LworCQkJCWVsb2coV0FSTklORywgImNvdWxkIG5vdCBzaWduYWwgYmFja2VuZCB3aXRoIFBJ RCAlZDogJW0iLCBpbmZvLT5waWQpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCXdha2V1 cF9jb3VudCsrOworCQkJCXRvdGFsX3dha2V1cF9jb3VudCsrOworCQkJfQorCisJCQlwZnJl ZShpbmZvKTsKKworCQkJLyogU2xlZXAgYmV0d2VlbiBzaWduYWxzIHRvIGF2b2lkIHRodW5k ZXJpbmcgaGVyZCAqLworCQkJaWYgKGxuZXh0KGxhZ2dpbmdfYmFja2VuZHMsIGxjKSAhPSBO VUxMKQorCQkJeworCQkJCXBnX3VzbGVlcChOT1RJRllfREVGRVJSRURfV0FLRVVQX0RFTEFZ X01TICogMTAwMEwpOworCisJCQkJLyogQ2hlY2sgZm9yIGludGVycnVwdHMgYmV0d2VlbiB3 YWtldXBzICovCisJCQkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKwkJCX0KKwkJfQorCisJ CWxpc3RfZnJlZShsYWdnaW5nX2JhY2tlbmRzKTsKKworCQlpZiAod2FrZXVwX2NvdW50ID4g MCkKKwkJeworCQkJZXJlcG9ydChERUJVRzEsCisJCQkJCShlcnJtc2coIm5vdGlmeSBkZWZl cnJlZCB3YWtldXAgd29ya2VyIHNpZ25hbGVkICVkIGxhZ2dpbmcgYmFja2VuZHMgaW4gdGhp cyByb3VuZCIsCisJCQkJCQkJd2FrZXVwX2NvdW50KSkpOworCQl9CisJfQorCisJaWYgKHRv dGFsX3dha2V1cF9jb3VudCA+IDApCisJeworCQllcmVwb3J0KERFQlVHMSwKKwkJCQkoZXJy bXNnKCJub3RpZnkgZGVmZXJyZWQgd2FrZXVwIHdvcmtlciBzaWduYWxlZCAlZCBsYWdnaW5n IGJhY2tlbmRzIHRvdGFsIiwKKwkJCQkJCXRvdGFsX3dha2V1cF9jb3VudCkpKTsKKwl9CisK KwkvKiBDbGVhciB0aGUgYWN0aXZlIGZsYWcgdG8gaW5kaWNhdGUgd2UncmUgZG9uZSAqLwor CUFzeW5jRGVmZXJyZWRXYWtldXBDbGVhckFjdGl2ZSgpOworfQorCisvKgorICogTm90aWZ5 RGVmZXJyZWRXYWtldXBXb3JrZXJSZWdpc3RlcgorICoJCVJlZ2lzdGVyIHRoZSBub3RpZnkg ZGVmZXJyZWQgd2FrZXVwIGJhY2tncm91bmQgd29ya2VyCisgKi8KK3ZvaWQKK05vdGlmeURl ZmVycmVkV2FrZXVwV29ya2VyUmVnaXN0ZXIodm9pZCkKK3sKKwlCYWNrZ3JvdW5kV29ya2Vy IHdvcmtlcjsKKworCW1lbXNldCgmd29ya2VyLCAwLCBzaXplb2YoQmFja2dyb3VuZFdvcmtl cikpOworCXNucHJpbnRmKHdvcmtlci5iZ3dfbmFtZSwgQkdXX01BWExFTiwgIm5vdGlmeSBk ZWZlcnJlZCB3YWtldXAiKTsKKwlzbnByaW50Zih3b3JrZXIuYmd3X3R5cGUsIEJHV19NQVhM RU4sICJub3RpZnkgZGVmZXJyZWQgd2FrZXVwIik7CisJd29ya2VyLmJnd19mbGFncyA9IEJH V09SS0VSX1NITUVNX0FDQ0VTUzsKKwl3b3JrZXIuYmd3X3N0YXJ0X3RpbWUgPSBCZ1dvcmtl clN0YXJ0X1JlY292ZXJ5RmluaXNoZWQ7CisJd29ya2VyLmJnd19yZXN0YXJ0X3RpbWUgPSBC R1dfREVGQVVMVF9SRVNUQVJUX0lOVEVSVkFMOworCXNucHJpbnRmKHdvcmtlci5iZ3dfbGli cmFyeV9uYW1lLCBNQVhQR1BBVEgsICJwb3N0Z3JlcyIpOworCXNucHJpbnRmKHdvcmtlci5i Z3dfZnVuY3Rpb25fbmFtZSwgQkdXX01BWExFTiwgIk5vdGlmeURlZmVycmVkV2FrZXVwTWFp biIpOworCXdvcmtlci5iZ3dfbWFpbl9hcmcgPSAoRGF0dW0pIDA7CisJd29ya2VyLmJnd19u b3RpZnlfcGlkID0gMDsKKworCVJlZ2lzdGVyQmFja2dyb3VuZFdvcmtlcigmd29ya2VyKTsK K30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jIGIv c3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMKaW5kZXggZTFkNjQzYjAxM2Qu Ljk1NGMzYjM3MWMyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3Rt YXN0ZXIuYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYwpAQCAt MTAyLDYgKzEwMiw3IEBACiAjaW5jbHVkZSAicG9ydC9wZ19ic3dhcC5oIgogI2luY2x1ZGUg InBvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvYmd3b3Jr ZXJfaW50ZXJuYWxzLmgiCisjaW5jbHVkZSAicG9zdG1hc3Rlci9ub3RpZnlfYmd3b3JrZXIu aCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL3BnYXJjaC5oIgogI2luY2x1ZGUgInBvc3RtYXN0 ZXIvcG9zdG1hc3Rlci5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvc3lzbG9nZ2VyLmgiCkBA IC05MjksNiArOTMwLDExIEBAIFBvc3RtYXN0ZXJNYWluKGludCBhcmdjLCBjaGFyICphcmd2 W10pCiAJICovCiAJQXBwbHlMYXVuY2hlclJlZ2lzdGVyKCk7CiAKKwkvKgorCSAqIFJlZ2lz dGVyIHRoZSBub3RpZnkgZGVmZXJyZWQgd2FrZXVwIHdvcmtlci4KKwkgKi8KKwlOb3RpZnlE ZWZlcnJlZFdha2V1cFdvcmtlclJlZ2lzdGVyKCk7CisKIAkvKgogCSAqIHByb2Nlc3MgYW55 IGxpYnJhcmllcyB0aGF0IHNob3VsZCBiZSBwcmVsb2FkZWQgYXQgcG9zdG1hc3RlciBzdGFy dAogCSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9l dmVudF9uYW1lcy50eHQgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50 X25hbWVzLnR4dAppbmRleCA3NTUzZjZlYWNlZi4uNmMyMWM3MjE4MzUgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFtZXMudHh0CisrKyBi L3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFtZXMudHh0CkBAIC02 MSw2ICs2MSw3IEBAIElPX1dPUktFUl9NQUlOCSJXYWl0aW5nIGluIG1haW4gbG9vcCBvZiBJ TyBXb3JrZXIgcHJvY2Vzcy4iCiBMT0dJQ0FMX0FQUExZX01BSU4JIldhaXRpbmcgaW4gbWFp biBsb29wIG9mIGxvZ2ljYWwgcmVwbGljYXRpb24gYXBwbHkgcHJvY2Vzcy4iCiBMT0dJQ0FM X0xBVU5DSEVSX01BSU4JIldhaXRpbmcgaW4gbWFpbiBsb29wIG9mIGxvZ2ljYWwgcmVwbGlj YXRpb24gbGF1bmNoZXIgcHJvY2Vzcy4iCiBMT0dJQ0FMX1BBUkFMTEVMX0FQUExZX01BSU4J IldhaXRpbmcgaW4gbWFpbiBsb29wIG9mIGxvZ2ljYWwgcmVwbGljYXRpb24gcGFyYWxsZWwg YXBwbHkgcHJvY2Vzcy4iCitOT1RJRllfREVGRVJSRURfV0FLRVVQX01BSU4JIldhaXRpbmcg aW4gbWFpbiBsb29wIG9mIG5vdGlmeSBkZWZlcnJlZCB3YWtldXAgcHJvY2Vzcy4iCiBSRUNP VkVSWV9XQUxfU1RSRUFNCSJXYWl0aW5nIGluIG1haW4gbG9vcCBvZiBzdGFydHVwIHByb2Nl c3MgZm9yIFdBTCB0byBhcnJpdmUsIGR1cmluZyBzdHJlYW1pbmcgcmVjb3ZlcnkuIgogUkVQ TElDQVRJT05fU0xPVFNZTkNfTUFJTgkiV2FpdGluZyBpbiBtYWluIGxvb3Agb2Ygc2xvdCBz eW5jIHdvcmtlci4iCiBSRVBMSUNBVElPTl9TTE9UU1lOQ19TSFVURE9XTgkiV2FpdGluZyBm b3Igc2xvdCBzeW5jIHdvcmtlciB0byBzaHV0IGRvd24uIgpAQCAtMzY2LDYgKzM2Nyw3IEBA IFN1YnRyYW5zQnVmZmVyCSJXYWl0aW5nIGZvciBJL08gb24gYSBzdWItdHJhbnNhY3Rpb24g U0xSVSBidWZmZXIuIgogTXVsdGlYYWN0T2Zmc2V0QnVmZmVyCSJXYWl0aW5nIGZvciBJL08g b24gYSBtdWx0aXhhY3Qgb2Zmc2V0IFNMUlUgYnVmZmVyLiIKIE11bHRpWGFjdE1lbWJlckJ1 ZmZlcgkiV2FpdGluZyBmb3IgSS9PIG9uIGEgbXVsdGl4YWN0IG1lbWJlciBTTFJVIGJ1ZmZl ci4iCiBOb3RpZnlCdWZmZXIJIldhaXRpbmcgZm9yIEkvTyBvbiBhIDxjb21tYW5kPk5PVElG WTwvY29tbWFuZD4gbWVzc2FnZSBTTFJVIGJ1ZmZlci4iCitOb3RpZnlDaGFubmVsSGFzaAki V2FpdGluZyB0byBhY2Nlc3MgdGhlIDxjb21tYW5kPk5PVElGWTwvY29tbWFuZD4gY2hhbm5l bCBoYXNoIHRhYmxlLiIKIFNlcmlhbEJ1ZmZlcgkiV2FpdGluZyBmb3IgSS9PIG9uIGEgc2Vy aWFsaXphYmxlIHRyYW5zYWN0aW9uIGNvbmZsaWN0IFNMUlUgYnVmZmVyLiIKIFdBTEluc2Vy dAkiV2FpdGluZyB0byBpbnNlcnQgV0FMIGRhdGEgaW50byBhIG1lbW9yeSBidWZmZXIuIgog QnVmZmVyQ29udGVudAkiV2FpdGluZyB0byBhY2Nlc3MgYSBkYXRhIHBhZ2UgaW4gbWVtb3J5 LiIKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvbm90aWZ5X2Jnd29ya2Vy LmggYi9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL25vdGlmeV9iZ3dvcmtlci5oCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wM2Y0NjJkMDFiMQotLS0gL2Rldi9u dWxsCisrKyBiL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvbm90aWZ5X2Jnd29ya2VyLmgKQEAg LTAsMCArMSwzNyBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogbm90aWZ5X2Jn d29ya2VyLmgKKyAqCSAgRGVmZXJyZWQgd2FrZXVwIGJhY2tncm91bmQgd29ya2VyIGZvciBM SVNURU4vTk9USUZZCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjUs IFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5 cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5p YQorICoKKyAqIHNyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvbm90aWZ5X2Jnd29ya2VyLmgKKyAq CisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBOT1RJRllfQkdXT1JLRVJf SAorI2RlZmluZSBOT1RJRllfQkdXT1JLRVJfSAorCisjaW5jbHVkZSAibm9kZXMvcGdfbGlz dC5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgorCisvKiBTdHJ1Y3R1cmUgdG8gaG9s ZCBpbmZvcm1hdGlvbiBhYm91dCBhIGJhY2tlbmQgdGhhdCBuZWVkcyB0byBiZSB3b2tlbiB1 cCAqLwordHlwZWRlZiBzdHJ1Y3QgQmFja2VuZFdha2V1cEluZm8KK3sKKwlpbnQzMgkJcGlk OworCVByb2NOdW1iZXIJcHJvY25vOworfQkJCUJhY2tlbmRXYWtldXBJbmZvOworCisvKiBN YWluIGVudHJ5IHBvaW50IGZvciB0aGUgYmFja2dyb3VuZCB3b3JrZXIgKi8KK2V4dGVybiB2 b2lkIE5vdGlmeURlZmVycmVkV2FrZXVwTWFpbihEYXR1bSBtYWluX2FyZyk7CisKKy8qIFJl Z2lzdHJhdGlvbiBmdW5jdGlvbiAqLworZXh0ZXJuIHZvaWQgTm90aWZ5RGVmZXJyZWRXYWtl dXBXb3JrZXJSZWdpc3Rlcih2b2lkKTsKKworLyogRnVuY3Rpb25zIHRvIGJlIGltcGxlbWVu dGVkIGluIGFzeW5jLmMgZm9yIHdvcmtlciBpbnRlcmFjdGlvbiAqLworZXh0ZXJuIHZvaWQg QXN5bmNEZWZlcnJlZFdha2V1cFNldFdvcmtlclBpZChwaWRfdCBwaWQpOworZXh0ZXJuIHZv aWQgQXN5bmNEZWZlcnJlZFdha2V1cENsZWFyQWN0aXZlKHZvaWQpOworZXh0ZXJuIExpc3Qg KkFzeW5jR2V0TGFnZ2luZ0JhY2tlbmRzKHZvaWQpOworCisjZW5kaWYJCQkJCQkJLyogTk9U SUZZX0JHV09SS0VSX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbHds b2NrbGlzdC5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9sd2xvY2tsaXN0LmgKaW5kZXggMDZh MWZmZDRiMDguLjI3NjhkZGY0NDE0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdl L2x3bG9ja2xpc3QuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2x3bG9ja2xpc3QuaApA QCAtMTAwLDYgKzEwMCw3IEBAIFBHX0xXTE9DS1RSQU5DSEUoU1VCVFJBTlNfQlVGRkVSLCBT dWJ0cmFuc0J1ZmZlcikKIFBHX0xXTE9DS1RSQU5DSEUoTVVMVElYQUNUT0ZGU0VUX0JVRkZF UiwgTXVsdGlYYWN0T2Zmc2V0QnVmZmVyKQogUEdfTFdMT0NLVFJBTkNIRShNVUxUSVhBQ1RN RU1CRVJfQlVGRkVSLCBNdWx0aVhhY3RNZW1iZXJCdWZmZXIpCiBQR19MV0xPQ0tUUkFOQ0hF KE5PVElGWV9CVUZGRVIsIE5vdGlmeUJ1ZmZlcikKK1BHX0xXTE9DS1RSQU5DSEUoTk9USUZZ X0NIQU5ORUxfSEFTSCwgTm90aWZ5Q2hhbm5lbEhhc2gpCiBQR19MV0xPQ0tUUkFOQ0hFKFNF UklBTF9CVUZGRVIsIFNlcmlhbEJ1ZmZlcikKIFBHX0xXTE9DS1RSQU5DSEUoV0FMX0lOU0VS VCwgV0FMSW5zZXJ0KQogUEdfTFdMT0NLVFJBTkNIRShCVUZGRVJfQ09OVEVOVCwgQnVmZmVy Q29udGVudCkKLS0gCjIuNTAuMQoK --afbb5525b9554adc93fba148ed6e4603--