Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wVYzA-00231o-1L for pgsql-bugs@arkaria.postgresql.org; Fri, 05 Jun 2026 18:09:36 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wVYz9-00DcOS-1C for pgsql-bugs@arkaria.postgresql.org; Fri, 05 Jun 2026 18:09:35 +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.96) (envelope-from ) id 1wVYz8-00DcOK-2P for pgsql-bugs@lists.postgresql.org; Fri, 05 Jun 2026 18:09:35 +0000 Received: from mail-qt1-x833.google.com ([2607:f8b0:4864:20::833]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wVYz5-00000001HDj-2E6g for pgsql-bugs@lists.postgresql.org; Fri, 05 Jun 2026 18:09:33 +0000 Received: by mail-qt1-x833.google.com with SMTP id d75a77b69052e-51790c0a692so19029501cf.2 for ; Fri, 05 Jun 2026 11:09:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1780682970; x=1781287770; darn=lists.postgresql.org; h=in-reply-to:references:cc:to:from:subject:message-id:date :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=cDMh5hsFFWytWY1apCUarydfFIOTuTyZtWitpJSngco=; b=L4UmcOPQyxNgFQAETdMiEWytTtzdkU859qnvnyBWFCYbN6J4+QS0QzF+UHF2dV5nJw YD8HRld6eGrDGpMa7E7K8G340bzqMYctBCYNdFgMmS2OSKxsq0t7LklMx9uJVd2DKBBl qng18u7IusQZXBIgmcTtgp1+soAMdpe54CaLJ6yn1LKcdVIphYkjnBfsvUcfQnX4Pp3D ecZw+X+xs8deNfTHjnyuzc61CJUBb5fqbiQNPvqQME0xcVKkyoAVob69gRyaPhUh5aJG 1072sh6g5zNUCB7JnU2mEFQXCmnwzgawA/pys/JWudYHuSbZigYx9bjbmunQeo+sthsG paJQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780682970; x=1781287770; h=in-reply-to:references:cc:to:from:subject:message-id:date :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=cDMh5hsFFWytWY1apCUarydfFIOTuTyZtWitpJSngco=; b=Wo7NkeDCiuPwybt6oil/o3dmAw8deC2edpp0VJThLgGbHl8ZXxIfvZrRQsVUPPL2nO lioROj3MFSYYYKAfzD7EPPOQ5TFErWgLPnoiLQ3IGE+26S63Iz73dCfH+wwGqjlmbxhS gUxL7a8jrKcKwL1aMuVIfuP3kENCysEK7x2J4lOL9ZjSZFJnFFa05XUpBO3F2dMEQotC 0r8LYIvWOw8pDIbH0M8ONToNjVXIhEvvYSPAmEYe/QbJsB1eH+fCy2Jp71r9CDNuYIoq MM4R+1lAqKblUN4hA+Ra0dxlLclCaPo7xzfXTbxAO1Rvn2YmuuxSRS+iw7b1s12eeHg7 1qjA== X-Forwarded-Encrypted: i=1; AFNElJ/jC5dt6eVtbI/GEz7iwUUWSm2yNEGY+1laugtsYMA+MpJRmnOPLysEbdF1XaXk2IIEY9uXqBSAvnGQ@lists.postgresql.org X-Gm-Message-State: AOJu0YzxhO3TiQH/YD8OH0jzbx0pAF5lYmj6UzCm0uwgxCN1s6p9JWn/ x9IyU2qo2yajn0k5IHg2EGkg0dVCUn6nzL92F/ZgIH83qqVKj8Dzyihg X-Gm-Gg: Acq92OE80+L7WC6MBiijXPca5nMP3MmqIYxgHB3GjvwAy0uXc85UlQch0I//GeBA/2w EunM/d1SUW4xnGrK9s3Awl3VfeOAXjW5/he9NmYQY0TiLw/tuu5amN9ix77dq9VUratBrIvMNhd AI+49QQIL9VOQuGjAvWMqU0e4U3Gt/3aKG0sBkG7HV36U8+aCWwO5S57dgt4qr3HALOmMT7yQfH dS3RMgZWoVa6F5Cn1zJo/hZyxZQ1MRN5Ucs5mkDzHB9F6TLmO+MNko0UeaOq6y3SzLSo3dJdZSt BmnMItU0YwZDlrVcffX8OzG5EUfIHtn8jU3qZmGwHE+5AvdUPYdTi7ubwsSDHUrs2L6M6aN+vS5 Qg3dWjX3TVS8hOiDLNd4DPDNg4sQwbTm9pfUe9vv+Q7Syi9gTJ4aA/3IMabj9uiroIny6m/BXDP aigF+hCJp0ivp2gvEYPMbguFSqR4OP/RzY7H5UgVVVVCbIW2HyEYcOgWT7 X-Received: by 2002:ac8:41cc:0:b0:517:9648:f71f with SMTP id d75a77b69052e-5179648fc59mr51807791cf.45.1780682970406; Fri, 05 Jun 2026 11:09:30 -0700 (PDT) Received: from localhost ([2804:14d:328a:a59c:60d6:dd03:a73f:5898]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-51775d8100fsm88002631cf.14.2026.06.05.11.09.28 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 05 Jun 2026 11:09:29 -0700 (PDT) Content-Type: multipart/mixed; boundary=bec4725a5df05667c150515ed7ed644e9bd9143ebccc2729a60d2a49279a Mime-Version: 1.0 Date: Fri, 05 Jun 2026 15:09:26 -0300 Message-Id: Subject: Re: BUG #19480: PL/Python SRF crashes (SIGSEGV) when function is replaced mid-iteration: use-after-free in PLy_funct From: "Matheus Alcantara" To: "Tom Lane" Cc: , X-Mailer: aerc 0.21.0 References: <19480-f1f9fdce30462fc4@postgresql.org> <982975.1779981146@sss.pgh.pa.us> <2868592.1780356411@sss.pgh.pa.us> In-Reply-To: <2868592.1780356411@sss.pgh.pa.us> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --bec4725a5df05667c150515ed7ed644e9bd9143ebccc2729a60d2a49279a Content-Type: multipart/alternative; boundary=033fbcefbe7d235f9e5a91c30db382d856c1b9244eef583ece5a8ff6a810 --033fbcefbe7d235f9e5a91c30db382d856c1b9244eef583ece5a8ff6a810 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Content-Type: text/plain; charset=UTF-8 On Mon Jun 1, 2026 at 8:26 PM -03, Tom Lane wrote: > Yeah, that was my suspicion as well. funccache.c exists because > I realized that SQL-language functions (executor/functions.c) were > going to need logic that plpgsql had had for years. > > Actually ... if memory serves, SQL-language functions use ValuePerCall > mode, so there probably already is a solution to this embedded in > functions.c. Did you look at that? > I dind't look at this before but this was exactly the right call. SQL functions handle this by maintaining a per-call-site cache struct (SQLFunctionCache) in fn_extra that holds both the pointer to the long-lived hash entry and the execution state. The use_count is incremented when we first obtain the function and decremented via a MemoryContextCallback when fn_mcxt is deleted. I've adapted the same approach for PL/Python. The main changes are: PLyProcedure now embeds CachedFunction as its first member and is managed by cached_function_compile(). A new PLyProcedureCache struct lives in fn_extra and holds the pointer to PLyProcedure plus SRF state. For cleanup, I use a MemoryContextCallback on fn_mcxt to decrement use_count, and an ExprContextCallback to clean up Python iterator state when the SRF is interrupted. Since fn_extra is now used for PLyProcedureCache, I had to remove the SRF macros and switch to direct isDone signaling via ReturnSetInfo, which is how SQL functions do it anyway. I also fixed the validator to create a fake fcinfo with the correct fn_oid (the function being validated), matching what PL/pgSQL does. Patch attached. -- Matheus Alcantara EDB: https://www.enterprisedb.com --033fbcefbe7d235f9e5a91c30db382d856c1b9244eef583ece5a8ff6a810-- --bec4725a5df05667c150515ed7ed644e9bd9143ebccc2729a60d2a49279a Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v1-0001-plpython-Use-funccache.c-infrastructure-for-proce.patch Content-Type: text/plain; charset=utf-8; name=v1-0001-plpython-Use-funccache.c-infrastructure-for-proce.patch RnJvbSA2MjJkZjkzM2Y5YmFkYzY4YzM5ZjdiODgzNzY0MjdmYmJiZDJiMDk5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXRoZXVzIEFsY2FudGFyYSA8bXRocy5kZXZAcG0ubWU+CkRh dGU6IEZyaSwgNSBKdW4gMjAyNiAxMDo1MTo1MyAtMDMwMApTdWJqZWN0OiBbUEFUQ0ggdjFdIHBs cHl0aG9uOiBVc2UgZnVuY2NhY2hlLmMgaW5mcmFzdHJ1Y3R1cmUgZm9yIHByb2NlZHVyZQogY2Fj aGluZwoKUEwvUHl0aG9uIHNldC1yZXR1cm5pbmcgZnVuY3Rpb25zIGNhbiBjcmFzaCB3aXRoIGEg dXNlLWFmdGVyLWZyZWUgd2hlbgpDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBpcyBleGVjdXRl ZCB3aGlsZSB0aGUgU1JGIGlzIG1pZC1pdGVyYXRpb24uClRoZSBjcmFzaCBvY2N1cnMgYmVjYXVz ZSBzcmZzdGF0ZS0+c2F2ZWRhcmdzIGlzIGFsbG9jYXRlZCBpbiBwcm9jLT5tY3h0LAp3aGljaCBn ZXRzIGRlbGV0ZWQgd2hlbiB0aGUgcHJvY2VkdXJlIGlzIGludmFsaWRhdGVkLCBsZWF2aW5nIGEg ZGFuZ2xpbmcKcG9pbnRlciB0aGF0IFBMeV9mdW5jdGlvbl9yZXN0b3JlX2FyZ3MoKSB0aGVuIGRl cmVmZXJlbmNlcy4KClRoZSBmaXggaXMgdG8gdXNlIHJlZmVyZW5jZSBjb3VudGluZyB0byBwcmV2 ZW50IGRlc3Ryb3lpbmcgdGhlIGZ1bmN0aW9uCnN0YXRlIHdoaWxlIGl0J3Mgc3RpbGwgaW4gdXNl LCBzaW1pbGFyIHRvIHdoYXQgUEwvcGdTUUwgaGFzIGRvbmUuIFRoaXMKY29tbWl0IGNvbnZlcnRz IFBML1B5dGhvbiB0byB1c2UgdGhlIGZ1bmNjYWNoZS5jIGluZnJhc3RydWN0dXJlCmludHJvZHVj ZWQgaW4gdjE4LgoKVGhlIG1haW4gY2hhbGxlbmdlIGlzIHRoYXQgUEwvUHl0aG9uIHVzZXMgU0ZS TV9WYWx1ZVBlckNhbGwgZm9yIFNSRnMsCndoZXJlIHRoZSBoYW5kbGVyIGlzIGNhbGxlZCBtdWx0 aXBsZSB0aW1lcyB3aXRoIHVzZV9jb3VudCBwb3RlbnRpYWxseQpyZXR1cm5pbmcgdG8gemVybyBi ZXR3ZWVuIGNhbGxzLiBTUUwgZnVuY3Rpb25zIGZhY2UgdGhlIHNhbWUgY2hhbGxlbmdlLApzbyB0 aGlzIGNvbW1pdCBmb2xsb3dzIHRoZSBzYW1lIGFwcHJvYWNoIHVzZWQgaW4gZnVuY3Rpb25zLmM6 IG1haW50YWluCmEgcGVyLWNhbGwtc2l0ZSBjYWNoZSBzdHJ1Y3QgKFBMeVByb2NlZHVyZUNhY2hl KSBpbiBmbl9leHRyYSB0aGF0IGhvbGRzCmJvdGggdGhlIHBvaW50ZXIgdG8gdGhlIGxvbmctbGl2 ZWQgUEx5UHJvY2VkdXJlIGFuZCB0aGUgU1JGIGV4ZWN1dGlvbgpzdGF0ZS4gVGhlIHVzZV9jb3Vu dCBpcyBpbmNyZW1lbnRlZCB3aGVuIHdlIGZpcnN0IG9idGFpbiB0aGUgcHJvY2VkdXJlCmFuZCBk ZWNyZW1lbnRlZCB2aWEgYSBNZW1vcnlDb250ZXh0Q2FsbGJhY2sgd2hlbiBmbl9tY3h0IGlzIGRl bGV0ZWQuCkZvciBTUkZzLCB3ZSByZWdpc3RlciBhbiBFeHByQ29udGV4dENhbGxiYWNrIHRvIGNs ZWFuIHVwIGl0ZXJhdG9yIHN0YXRlCndoZW4gdGhlIGV4cHJlc3Npb24gY29udGV4dCBpcyBzaHV0 IGRvd24uCgpTaW5jZSBmbl9leHRyYSBpcyBub3cgdXNlZCBmb3IgUEx5UHJvY2VkdXJlQ2FjaGUs IHRoaXMgY29tbWl0IHJlbW92ZXMKdGhlIFNSRiBtYWNyb3MgKFNSRl9JU19GSVJTVENBTEwsIFNS Rl9SRVRVUk5fTkVYVCwgZXRjLikgYW5kIHN3aXRjaGVzIHRvCmRpcmVjdCBpc0RvbmUgc2lnbmFs aW5nIHZpYSBSZXR1cm5TZXRJbmZvLCBtYXRjaGluZyBob3cgU1FMIGZ1bmN0aW9ucwpoYW5kbGUg VmFsdWVQZXJDYWxsIG1vZGUuCgpBdXRob3I6IE1hdGhldXMgQWxjYW50YXJhIDxtdGhzLmRldkBw bS5tZT4KUmVwb3J0ZWQtYnk6IEFuZHJ6ZWogRG9yb3MgPGFkb3Jvc0BzdGFyZmlzaHN0b3JhZ2Uu Y29tPgpTdWdnZXN0ZWQtYnk6IFRvbSBMYW5lIDx0Z2xAc3NzLnBnaC5wYS51cz4KRGlzY3Vzc2lv bjogaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC8xOTQ4MC1mMWY5ZmRjZTMw NDYyZmM0JTQwcG9zdGdyZXNxbC5vcmcKLS0tCiBzcmMvcGwvcGxweXRob24vcGxweV9leGVjLmMg ICAgICB8IDE2MCArKysrKysrKysrKy0tLS0tLS0tLQogc3JjL3BsL3BscHl0aG9uL3BscHlfZXhl Yy5oICAgICAgfCAgIDIgKy0KIHNyYy9wbC9wbHB5dGhvbi9wbHB5X21haW4uYyAgICAgIHwgIDg4 ICsrKysrKy0tLS0tCiBzcmMvcGwvcGxweXRob24vcGxweV9wcm9jZWR1cmUuYyB8IDI0OCArKysr KysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tCiBzcmMvcGwvcGxweXRob24vcGxweV9wcm9jZWR1 cmUuaCB8ICA1MSArKysrLS0tCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCB8ICAg MSArCiA2IGZpbGVzIGNoYW5nZWQsIDMwNSBpbnNlcnRpb25zKCspLCAyNDUgZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvc3JjL3BsL3BscHl0aG9uL3BscHlfZXhlYy5jIGIvc3JjL3BsL3BscHl0 aG9uL3BscHlfZXhlYy5jCmluZGV4IGRlMGRhZDFmNTMzLi41Y2JjYjAzMWZiMyAxMDA2NDQKLS0t IGEvc3JjL3BsL3BscHl0aG9uL3BscHlfZXhlYy5jCisrKyBiL3NyYy9wbC9wbHB5dGhvbi9wbHB5 X2V4ZWMuYwpAQCAtMjIsMjIgKzIyLDE0IEBACiAjaW5jbHVkZSAidXRpbHMvZm1ncnByb3Rvcy5o IgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogCi0vKiBzYXZlZCBzdGF0ZSBmb3IgYSBzZXQtcmV0 dXJuaW5nIGZ1bmN0aW9uICovCi10eXBlZGVmIHN0cnVjdCBQTHlTUkZTdGF0ZQotewotCVB5T2Jq ZWN0ICAgKml0ZXI7CQkJLyogUHl0aG9uIGl0ZXJhdG9yIHByb2R1Y2luZyByZXN1bHRzICovCi0J UEx5U2F2ZWRBcmdzICpzYXZlZGFyZ3M7CS8qIGZ1bmN0aW9uIGFyZ3VtZW50IHZhbHVlcyAqLwot CU1lbW9yeUNvbnRleHRDYWxsYmFjayBjYWxsYmFjazsgLyogZm9yIHJlbGVhc2luZyByZWZjb3Vu dHMgd2hlbiBkb25lICovCi19IFBMeVNSRlN0YXRlOwotCiBzdGF0aWMgUHlPYmplY3QgKlBMeV9m dW5jdGlvbl9idWlsZF9hcmdzKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBQTHlQcm9jZWR1cmUg KnByb2MpOwotc3RhdGljIFBMeVNhdmVkQXJncyAqUEx5X2Z1bmN0aW9uX3NhdmVfYXJncyhQTHlQ cm9jZWR1cmUgKnByb2MpOworc3RhdGljIFBMeVNhdmVkQXJncyAqUEx5X2Z1bmN0aW9uX3NhdmVf YXJncyhNZW1vcnlDb250ZXh0IG1jdHgsIFBMeVByb2NlZHVyZSAqcHJvYyk7CiBzdGF0aWMgdm9p ZCBQTHlfZnVuY3Rpb25fcmVzdG9yZV9hcmdzKFBMeVByb2NlZHVyZSAqcHJvYywgUEx5U2F2ZWRB cmdzICpzYXZlZGFyZ3MpOwogc3RhdGljIHZvaWQgUEx5X2Z1bmN0aW9uX2Ryb3BfYXJncyhQTHlT YXZlZEFyZ3MgKnNhdmVkYXJncyk7CiBzdGF0aWMgdm9pZCBQTHlfZ2xvYmFsX2FyZ3NfcHVzaChQ THlQcm9jZWR1cmUgKnByb2MpOwogc3RhdGljIHZvaWQgUEx5X2dsb2JhbF9hcmdzX3BvcChQTHlQ cm9jZWR1cmUgKnByb2MpOwotc3RhdGljIHZvaWQgcGxweXRob25fc3JmX2NsZWFudXBfY2FsbGJh Y2sodm9pZCAqYXJnKTsKIHN0YXRpYyB2b2lkIHBscHl0aG9uX3JldHVybl9lcnJvcl9jYWxsYmFj ayh2b2lkICphcmcpOworc3RhdGljIHZvaWQgU2h1dGRvd25QTHlGdW5jdGlvbihEYXR1bSBhcmcp OwogCiBzdGF0aWMgUHlPYmplY3QgKlBMeV90cmlnZ2VyX2J1aWxkX2FyZ3MoRnVuY3Rpb25DYWxs SW5mbyBmY2luZm8sIFBMeVByb2NlZHVyZSAqcHJvYywKIAkJCQkJCQkJCQlIZWFwVHVwbGUgKnJ2 KTsKQEAgLTUxLDE0ICs0MywxNSBAQCBzdGF0aWMgdm9pZCBQTHlfYWJvcnRfb3Blbl9zdWJ0cmFu c2FjdGlvbnMoaW50IHNhdmVfc3VieGFjdF9sZXZlbCk7CiAKIC8qIGZ1bmN0aW9uIHN1YmhhbmRs ZXIgKi8KIERhdHVtCi1QTHlfZXhlY19mdW5jdGlvbihGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywg UEx5UHJvY2VkdXJlICpwcm9jKQorUEx5X2V4ZWNfZnVuY3Rpb24oRnVuY3Rpb25DYWxsSW5mbyBm Y2luZm8sIFBMeVByb2NlZHVyZUNhY2hlICpwY2FjaGUpCiB7CisJUEx5UHJvY2VkdXJlICpwcm9j ID0gcGNhY2hlLT5wcm9jOwogCWJvb2wJCWlzX3NldG9mID0gcHJvYy0+aXNfc2V0b2Y7CiAJRGF0 dW0JCXJ2OwogCVB5T2JqZWN0ICAgKnZvbGF0aWxlIHBsYXJncyA9IE5VTEw7CiAJUHlPYmplY3Qg ICAqdm9sYXRpbGUgcGxydiA9IE5VTEw7Ci0JRnVuY0NhbGxDb250ZXh0ICp2b2xhdGlsZSBmdW5j Y3R4ID0gTlVMTDsKIAlQTHlTUkZTdGF0ZSAqdm9sYXRpbGUgc3Jmc3RhdGUgPSBOVUxMOworCVJl dHVyblNldEluZm8gKnJzaSA9IE5VTEw7CiAJRXJyb3JDb250ZXh0Q2FsbGJhY2sgcGxlcnJjb250 ZXh0OwogCiAJLyoKQEAgLTcyLDI1ICs2NSwzMiBAQCBQTHlfZXhlY19mdW5jdGlvbihGdW5jdGlv bkNhbGxJbmZvIGZjaW5mbywgUEx5UHJvY2VkdXJlICpwcm9jKQogCXsKIAkJaWYgKGlzX3NldG9m KQogCQl7Ci0JCQkvKiBGaXJzdCBDYWxsIHNldHVwICovCi0JCQlpZiAoU1JGX0lTX0ZJUlNUQ0FM TCgpKQorCQkJcnNpID0gKFJldHVyblNldEluZm8gKikgZmNpbmZvLT5yZXN1bHRpbmZvOworCisJ CQkvKiBGaXJzdCBjYWxsIHNldHVwICovCisJCQlpZiAocGNhY2hlLT5zcmZzdGF0ZSA9PSBOVUxM KQogCQkJewotCQkJCWZ1bmNjdHggPSBTUkZfRklSU1RDQUxMX0lOSVQoKTsKLQkJCQlzcmZzdGF0 ZSA9IChQTHlTUkZTdGF0ZSAqKQotCQkJCQlNZW1vcnlDb250ZXh0QWxsb2NaZXJvKGZ1bmNjdHgt Pm11bHRpX2NhbGxfbWVtb3J5X2N0eCwKLQkJCQkJCQkJCQkgICBzaXplb2YoUEx5U1JGU3RhdGUp KTsKLQkJCQkvKiBJbW1lZGlhdGVseSByZWdpc3RlciBjbGVhbnVwIGNhbGxiYWNrICovCi0JCQkJ c3Jmc3RhdGUtPmNhbGxiYWNrLmZ1bmMgPSBwbHB5dGhvbl9zcmZfY2xlYW51cF9jYWxsYmFjazsK LQkJCQlzcmZzdGF0ZS0+Y2FsbGJhY2suYXJnID0gc3Jmc3RhdGU7Ci0JCQkJTWVtb3J5Q29udGV4 dFJlZ2lzdGVyUmVzZXRDYWxsYmFjayhmdW5jY3R4LT5tdWx0aV9jYWxsX21lbW9yeV9jdHgsCi0J CQkJCQkJCQkJCQkgICAmc3Jmc3RhdGUtPmNhbGxiYWNrKTsKLQkJCQlmdW5jY3R4LT51c2VyX2Zj dHggPSBzcmZzdGF0ZTsKKwkJCQlpZiAoIXJzaSB8fCAhSXNBKHJzaSwgUmV0dXJuU2V0SW5mbykg fHwKKwkJCQkJKHJzaS0+YWxsb3dlZE1vZGVzICYgU0ZSTV9WYWx1ZVBlckNhbGwpID09IDApCisJ CQkJeworCQkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVS RV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkJCQkgZXJybXNnKCJ1bnN1cHBvcnRlZCBzZXQgZnVuY3Rp b24gcmV0dXJuIG1vZGUiKSwKKwkJCQkJCQkgZXJyZGV0YWlsKCJQTC9QeXRob24gc2V0LXJldHVy bmluZyBmdW5jdGlvbnMgb25seSBzdXBwb3J0IHJldHVybmluZyBvbmUgdmFsdWUgcGVyIGNhbGwu IikpKTsKKwkJCQl9CisJCQkJcnNpLT5yZXR1cm5Nb2RlID0gU0ZSTV9WYWx1ZVBlckNhbGw7CisK KwkJCQlwY2FjaGUtPnNyZnN0YXRlID0gKFBMeVNSRlN0YXRlICopCisJCQkJCU1lbW9yeUNvbnRl eHRBbGxvY1plcm8ocGNhY2hlLT5mY29udGV4dCwgc2l6ZW9mKFBMeVNSRlN0YXRlKSk7CisKKwkJ CQkvKiBSZWdpc3RlciBzaHV0ZG93biBjYWxsYmFjayB0byBjbGVhbiB1cCBhdCBlbmQgb2YgZXhw cmVzc2lvbiAqLworCQkJCVJlZ2lzdGVyRXhwckNvbnRleHRDYWxsYmFjayhyc2ktPmVjb250ZXh0 LAorCQkJCQkJCQkJCQlTaHV0ZG93blBMeUZ1bmN0aW9uLAorCQkJCQkJCQkJCQlQb2ludGVyR2V0 RGF0dW0ocGNhY2hlKSk7CisJCQkJcGNhY2hlLT5zaHV0ZG93bl9yZWcgPSB0cnVlOwogCQkJfQot CQkJLyogRXZlcnkgY2FsbCBzZXR1cCAqLwotCQkJZnVuY2N0eCA9IFNSRl9QRVJDQUxMX1NFVFVQ KCk7Ci0JCQlBc3NlcnQoZnVuY2N0eCAhPSBOVUxMKTsKLQkJCXNyZnN0YXRlID0gKFBMeVNSRlN0 YXRlICopIGZ1bmNjdHgtPnVzZXJfZmN0eDsKLQkJCUFzc2VydChzcmZzdGF0ZSAhPSBOVUxMKTsK KworCQkJc3Jmc3RhdGUgPSBwY2FjaGUtPnNyZnN0YXRlOwogCQl9CiAKIAkJaWYgKHNyZnN0YXRl ID09IE5VTEwgfHwgc3Jmc3RhdGUtPml0ZXIgPT0gTlVMTCkKQEAgLTEyNywyMCArMTI3LDcgQEAg UEx5X2V4ZWNfZnVuY3Rpb24oRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sIFBMeVByb2NlZHVyZSAq cHJvYykKIAkJewogCQkJaWYgKHNyZnN0YXRlLT5pdGVyID09IE5VTEwpCiAJCQl7Ci0JCQkJLyog Zmlyc3QgdGltZSAtLSBkbyBjaGVja3MgYW5kIHNldHVwICovCi0JCQkJUmV0dXJuU2V0SW5mbyAq cnNpID0gKFJldHVyblNldEluZm8gKikgZmNpbmZvLT5yZXN1bHRpbmZvOwotCi0JCQkJaWYgKCFy c2kgfHwgIUlzQShyc2ksIFJldHVyblNldEluZm8pIHx8Ci0JCQkJCShyc2ktPmFsbG93ZWRNb2Rl cyAmIFNGUk1fVmFsdWVQZXJDYWxsKSA9PSAwKQotCQkJCXsKLQkJCQkJZXJlcG9ydChFUlJPUiwK LQkJCQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCi0JCQkJCQkJ IGVycm1zZygidW5zdXBwb3J0ZWQgc2V0IGZ1bmN0aW9uIHJldHVybiBtb2RlIiksCi0JCQkJCQkJ IGVycmRldGFpbCgiUEwvUHl0aG9uIHNldC1yZXR1cm5pbmcgZnVuY3Rpb25zIG9ubHkgc3VwcG9y dCByZXR1cm5pbmcgb25lIHZhbHVlIHBlciBjYWxsLiIpKSk7Ci0JCQkJfQotCQkJCXJzaS0+cmV0 dXJuTW9kZSA9IFNGUk1fVmFsdWVQZXJDYWxsOwotCi0JCQkJLyogTWFrZSBpdGVyYXRvciBvdXQg b2YgcmV0dXJuZWQgb2JqZWN0ICovCisJCQkJLyogZmlyc3QgdGltZSAtLSBtYWtlIGl0ZXJhdG9y IG91dCBvZiByZXR1cm5lZCBvYmplY3QgKi8KIAkJCQlzcmZzdGF0ZS0+aXRlciA9IFB5T2JqZWN0 X0dldEl0ZXIocGxydik7CiAKIAkJCQlQeV9ERUNSRUYocGxydik7CkBAIC0xNzcsNyArMTY0LDcg QEAgUEx5X2V4ZWNfZnVuY3Rpb24oRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sIFBMeVByb2NlZHVy ZSAqcHJvYykKIAkJCQkgKiB0aGlzIGFnYWluIGVhY2ggdGltZSBpbiBjYXNlIHRoZSBpdGVyYXRv ciBpcyBjaGFuZ2luZyB0aG9zZQogCQkJCSAqIHZhbHVlcy4KIAkJCQkgKi8KLQkJCQlzcmZzdGF0 ZS0+c2F2ZWRhcmdzID0gUEx5X2Z1bmN0aW9uX3NhdmVfYXJncyhwcm9jKTsKKwkJCQlzcmZzdGF0 ZS0+c2F2ZWRhcmdzID0gUEx5X2Z1bmN0aW9uX3NhdmVfYXJncyhwY2FjaGUtPmZjb250ZXh0LCBw cm9jKTsKIAkJCX0KIAkJfQogCkBAIC0yNjMsOCArMjUwLDggQEAgUEx5X2V4ZWNfZnVuY3Rpb24o RnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sIFBMeVByb2NlZHVyZSAqcHJvYykKIAkJICogSWYgdGhl cmUgd2FzIGFuIGVycm9yIHdpdGhpbiBhIFNSRiwgdGhlIGl0ZXJhdG9yIG1pZ2h0IG5vdCBoYXZl CiAJCSAqIGJlZW4gZXhoYXVzdGVkIHlldC4gIENsZWFyIGl0IHNvIHRoZSBuZXh0IGludm9jYXRp b24gb2YgdGhlCiAJCSAqIGZ1bmN0aW9uIHdpbGwgc3RhcnQgdGhlIGl0ZXJhdGlvbiBhZ2Fpbi4g IChUaGlzIGNvZGUgaXMgcHJvYmFibHkKLQkJICogdW5uZWNlc3Nhcnkgbm93OyBwbHB5dGhvbl9z cmZfY2xlYW51cF9jYWxsYmFjayBzaG91bGQgdGFrZSBjYXJlIG9mCi0JCSAqIGNsZWFudXAuICBC dXQgaXQgZG9lc24ndCBodXJ0IGFueXRoaW5nIHRvIGRvIGl0IGhlcmUuKQorCQkgKiB1bm5lY2Vz c2FyeSBub3c7IFNodXRkb3duUEx5RnVuY3Rpb24gc2hvdWxkIHRha2UgY2FyZSBvZiBjbGVhbnVw LgorCQkgKiBCdXQgaXQgZG9lc24ndCBodXJ0IGFueXRoaW5nIHRvIGRvIGl0IGhlcmUuKQogCQkg Ki8KIAkJaWYgKHNyZnN0YXRlKQogCQl7CkBAIC0yOTAsMjIgKzI3Nyw2NiBAQCBQTHlfZXhlY19m dW5jdGlvbihGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywgUEx5UHJvY2VkdXJlICpwcm9jKQogCiAJ aWYgKHNyZnN0YXRlKQogCXsKLQkJLyogV2UncmUgaW4gYSBTUkYsIGV4aXQgYXBwcm9wcmlhdGVs eSAqLworCQkvKiBXZSdyZSBpbiBhIFNSRiwgc2lnbmFsIHZpYSByc2ktPmlzRG9uZSAqLwogCQlp ZiAoc3Jmc3RhdGUtPml0ZXIgPT0gTlVMTCkKIAkJewotCQkJLyogSXRlcmF0b3IgZXhoYXVzdGVk LCBzbyB3ZSdyZSBkb25lICovCi0JCQlTUkZfUkVUVVJOX0RPTkUoZnVuY2N0eCk7CisJCQkvKgor CQkJICogSXRlcmF0b3IgZXhoYXVzdGVkLiAgVW5yZWdpc3RlciB0aGUgc2h1dGRvd24gY2FsbGJh Y2sgc2luY2UKKwkJCSAqIHdlJ3JlIGRvbmUgbm9ybWFsbHksIHRoZW4gY2xlYW4gdXAgc3Jmc3Rh dGUuCisJCQkgKi8KKwkJCWlmIChwY2FjaGUtPnNodXRkb3duX3JlZykKKwkJCXsKKwkJCQlVbnJl Z2lzdGVyRXhwckNvbnRleHRDYWxsYmFjayhyc2ktPmVjb250ZXh0LAorCQkJCQkJCQkJCQkgIFNo dXRkb3duUEx5RnVuY3Rpb24sCisJCQkJCQkJCQkJCSAgUG9pbnRlckdldERhdHVtKHBjYWNoZSkp OworCQkJCXBjYWNoZS0+c2h1dGRvd25fcmVnID0gZmFsc2U7CisJCQl9CisJCQlwZnJlZShwY2Fj aGUtPnNyZnN0YXRlKTsKKwkJCXBjYWNoZS0+c3Jmc3RhdGUgPSBOVUxMOworCisJCQlyc2ktPmlz RG9uZSA9IEV4cHJFbmRSZXN1bHQ7CisJCQlmY2luZm8tPmlzbnVsbCA9IHRydWU7CisJCQlyZXR1 cm4gKERhdHVtKSAwOwogCQl9Ci0JCWVsc2UgaWYgKGZjaW5mby0+aXNudWxsKQotCQkJU1JGX1JF VFVSTl9ORVhUX05VTEwoZnVuY2N0eCk7CiAJCWVsc2UKLQkJCVNSRl9SRVRVUk5fTkVYVChmdW5j Y3R4LCBydik7CisJCXsKKwkJCXJzaS0+aXNEb25lID0gRXhwck11bHRpcGxlUmVzdWx0OworCQkJ cmV0dXJuIHJ2OworCQl9CiAJfQogCiAJLyogUGxhaW4gZnVuY3Rpb24sIGp1c3QgcmV0dXJuIHRo ZSBEYXR1bSB2YWx1ZSAocG9zc2libHkgbnVsbCkgKi8KIAlyZXR1cm4gcnY7CiB9CiAKKy8qCisg KiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIHdoZW4gYW4gZXhwcmVzc2lvbiBjb250ZXh0IGhv bGRpbmcgYSBTUkYKKyAqIGlzIHNodXQgZG93bi4gIFRoaXMgY2xlYW5zIHVwIGFueSBQeXRob24g aXRlcmF0b3Igc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkCitTaHV0ZG93blBMeUZ1bmN0aW9uKERh dHVtIGFyZykKK3sKKwlQTHlQcm9jZWR1cmVDYWNoZSAqcGNhY2hlID0gKFBMeVByb2NlZHVyZUNh Y2hlICopIERhdHVtR2V0UG9pbnRlcihhcmcpOworCVBMeVNSRlN0YXRlICpzcmZzdGF0ZSA9IHBj YWNoZS0+c3Jmc3RhdGU7CisKKwlwY2FjaGUtPnNodXRkb3duX3JlZyA9IGZhbHNlOworCisJaWYg KHNyZnN0YXRlICE9IE5VTEwpCisJeworCQkvKiBSZWxlYXNlIHRoZSBQeXRob24gaXRlcmF0b3Ig aWYgc3RpbGwgYWN0aXZlICovCisJCVB5X1hERUNSRUYoc3Jmc3RhdGUtPml0ZXIpOworCQlzcmZz dGF0ZS0+aXRlciA9IE5VTEw7CisKKwkJLyogRHJvcCBhbnkgc2F2ZWQgYXJncyAqLworCQlpZiAo c3Jmc3RhdGUtPnNhdmVkYXJncykKKwkJCVBMeV9mdW5jdGlvbl9kcm9wX2FyZ3Moc3Jmc3RhdGUt PnNhdmVkYXJncyk7CisJCXNyZnN0YXRlLT5zYXZlZGFyZ3MgPSBOVUxMOworCisJCXBmcmVlKHNy ZnN0YXRlKTsKKwkJcGNhY2hlLT5zcmZzdGF0ZSA9IE5VTEw7CisJfQorfQorCiAvKgogICogdHJp Z2dlciBzdWJoYW5kbGVyCiAgKgpAQCAtNTM2LDEzICs1NjcsMTMgQEAgUEx5X2Z1bmN0aW9uX2J1 aWxkX2FyZ3MoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sIFBMeVByb2NlZHVyZSAqcHJvYykKICAq IGF2YWlsYWJsZSB2aWEgdGhlIHByb2MncyBnbG9iYWxzIDotKCAuLi4gYnV0IHdlJ3JlIHN0dWNr IHdpdGggdGhhdCBub3cuCiAgKi8KIHN0YXRpYyBQTHlTYXZlZEFyZ3MgKgotUEx5X2Z1bmN0aW9u X3NhdmVfYXJncyhQTHlQcm9jZWR1cmUgKnByb2MpCitQTHlfZnVuY3Rpb25fc2F2ZV9hcmdzKE1l bW9yeUNvbnRleHQgbWN0eCwgUEx5UHJvY2VkdXJlICpwcm9jKQogewogCVBMeVNhdmVkQXJncyAq cmVzdWx0OwogCiAJLyogc2F2ZWQgYXJncyBhcmUgYWx3YXlzIGFsbG9jYXRlZCBpbiBwcm9jZWR1 cmUncyBjb250ZXh0ICovCiAJcmVzdWx0ID0gKFBMeVNhdmVkQXJncyAqKQotCQlNZW1vcnlDb250 ZXh0QWxsb2NaZXJvKHByb2MtPm1jeHQsCisJCU1lbW9yeUNvbnRleHRBbGxvY1plcm8obWN0eCwK IAkJCQkJCQkgICBvZmZzZXRvZihQTHlTYXZlZEFyZ3MsIG5hbWVkYXJncykgKwogCQkJCQkJCSAg IHByb2MtPm5hcmdzICogc2l6ZW9mKFB5T2JqZWN0ICopKTsKIAlyZXN1bHQtPm5hcmdzID0gcHJv Yy0+bmFyZ3M7CkBAIC02NTksNyArNjkwLDcgQEAgUEx5X2dsb2JhbF9hcmdzX3B1c2goUEx5UHJv Y2VkdXJlICpwcm9jKQogCQlQTHlTYXZlZEFyZ3MgKm5vZGU7CiAKIAkJLyogQnVpbGQgYSBzdHJ1 Y3QgY29udGFpbmluZyBjdXJyZW50IGFyZ3VtZW50IHZhbHVlcyAqLwotCQlub2RlID0gUEx5X2Z1 bmN0aW9uX3NhdmVfYXJncyhwcm9jKTsKKwkJbm9kZSA9IFBMeV9mdW5jdGlvbl9zYXZlX2FyZ3Mo cHJvYy0+bWN4dCwgcHJvYyk7CiAKIAkJLyoKIAkJICogUHVzaCB0aGUgc2F2ZWQgYXJndW1lbnQg dmFsdWVzIGludG8gdGhlIHByb2NlZHVyZSdzIHN0YWNrLiAgT25jZSB3ZQpAQCAtNzEzLDI1ICs3 NDQsNiBAQCBQTHlfZ2xvYmFsX2FyZ3NfcG9wKFBMeVByb2NlZHVyZSAqcHJvYykKIAl9CiB9CiAK LS8qCi0gKiBNZW1vcnkgY29udGV4dCBkZWxldGlvbiBjYWxsYmFjayBmb3IgY2xlYW5pbmcgdXAg YSBQTHlTUkZTdGF0ZS4KLSAqIFdlIG5lZWQgdGhpcyBpbiBjYXNlIGV4ZWN1dGlvbiBvZiB0aGUg U1JGIGlzIHRlcm1pbmF0ZWQgZWFybHksCi0gKiBkdWUgdG8gZXJyb3Igb3IgdGhlIGNhbGxlciBz aW1wbHkgbm90IHJ1bm5pbmcgaXQgdG8gY29tcGxldGlvbi4KLSAqLwotc3RhdGljIHZvaWQKLXBs cHl0aG9uX3NyZl9jbGVhbnVwX2NhbGxiYWNrKHZvaWQgKmFyZykKLXsKLQlQTHlTUkZTdGF0ZSAq c3Jmc3RhdGUgPSAoUEx5U1JGU3RhdGUgKikgYXJnOwotCi0JLyogUmVsZWFzZSByZWZjb3VudCBv biB0aGUgaXRlciwgaWYgd2Ugc3RpbGwgaGF2ZSBvbmUgKi8KLQlQeV9YREVDUkVGKHNyZnN0YXRl LT5pdGVyKTsKLQlzcmZzdGF0ZS0+aXRlciA9IE5VTEw7Ci0JLyogQW5kIGRyb3AgYW55IHNhdmVk IGFyZ3M7IHdlIHdvbid0IG5lZWQgdGhlbSAqLwotCWlmIChzcmZzdGF0ZS0+c2F2ZWRhcmdzKQot CQlQTHlfZnVuY3Rpb25fZHJvcF9hcmdzKHNyZnN0YXRlLT5zYXZlZGFyZ3MpOwotCXNyZnN0YXRl LT5zYXZlZGFyZ3MgPSBOVUxMOwotfQotCiBzdGF0aWMgdm9pZAogcGxweXRob25fcmV0dXJuX2Vy cm9yX2NhbGxiYWNrKHZvaWQgKmFyZykKIHsKZGlmZiAtLWdpdCBhL3NyYy9wbC9wbHB5dGhvbi9w bHB5X2V4ZWMuaCBiL3NyYy9wbC9wbHB5dGhvbi9wbHB5X2V4ZWMuaAppbmRleCBmMzVlYWJiZDhl ZS4uMWFkZTFiYWUxNTEgMTAwNjQ0Ci0tLSBhL3NyYy9wbC9wbHB5dGhvbi9wbHB5X2V4ZWMuaAor KysgYi9zcmMvcGwvcGxweXRob24vcGxweV9leGVjLmgKQEAgLTcsNyArNyw3IEBACiAKICNpbmNs dWRlICJwbHB5X3Byb2NlZHVyZS5oIgogCi1leHRlcm4gRGF0dW0gUEx5X2V4ZWNfZnVuY3Rpb24o RnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sIFBMeVByb2NlZHVyZSAqcHJvYyk7CitleHRlcm4gRGF0 dW0gUEx5X2V4ZWNfZnVuY3Rpb24oRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sIFBMeVByb2NlZHVy ZUNhY2hlICpwY2FjaGUpOwogZXh0ZXJuIEhlYXBUdXBsZSBQTHlfZXhlY190cmlnZ2VyKEZ1bmN0 aW9uQ2FsbEluZm8gZmNpbmZvLCBQTHlQcm9jZWR1cmUgKnByb2MpOwogZXh0ZXJuIHZvaWQgUEx5 X2V4ZWNfZXZlbnRfdHJpZ2dlcihGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywgUEx5UHJvY2VkdXJl ICpwcm9jKTsKIApkaWZmIC0tZ2l0IGEvc3JjL3BsL3BscHl0aG9uL3BscHlfbWFpbi5jIGIvc3Jj L3BsL3BscHl0aG9uL3BscHlfbWFpbi5jCmluZGV4IDlmMDdjMTE1ZjgwLi4yZWQ5YWJhYjE1YiAx MDA2NDQKLS0tIGEvc3JjL3BsL3BscHl0aG9uL3BscHlfbWFpbi5jCisrKyBiL3NyYy9wbC9wbHB5 dGhvbi9wbHB5X21haW4uYwpAQCAtMzksNyArMzksNiBAQCBQR19GVU5DVElPTl9JTkZPX1YxKHBs cHl0aG9uM19jYWxsX2hhbmRsZXIpOwogUEdfRlVOQ1RJT05fSU5GT19WMShwbHB5dGhvbjNfaW5s aW5lX2hhbmRsZXIpOwogCiAKLXN0YXRpYyBQTHlUcmlnVHlwZSBQTHlfcHJvY2VkdXJlX2lzX3Ry aWdnZXIoRm9ybV9wZ19wcm9jIHByb2NTdHJ1Y3QpOwogc3RhdGljIHZvaWQgcGxweXRob25fZXJy b3JfY2FsbGJhY2sodm9pZCAqYXJnKTsKIHN0YXRpYyB2b2lkIHBscHl0aG9uX2lubGluZV9lcnJv cl9jYWxsYmFjayh2b2lkICphcmcpOwogCkBAIC0xMDMsOCArMTAyLDYgQEAgX1BHX2luaXQodm9p ZCkKIAogCVB5X0RFQ1JFRihtYWluX21vZCk7CiAKLQlpbml0X3Byb2NlZHVyZV9jYWNoZXMoKTsK LQogCWV4cGxpY2l0X3N1YnRyYW5zYWN0aW9ucyA9IE5JTDsKIAogCVBMeV9leGVjdXRpb25fY29u dGV4dHMgPSBOVUxMOwpAQCAtMTEzLDEwICsxMTAsMTUgQEAgX1BHX2luaXQodm9pZCkKIERhdHVt CiBwbHB5dGhvbjNfdmFsaWRhdG9yKFBHX0ZVTkNUSU9OX0FSR1MpCiB7CisJTE9DQUxfRkNJTkZP KGZha2VfZmNpbmZvLCAwKTsKIAlPaWQJCQlmdW5jb2lkID0gUEdfR0VUQVJHX09JRCgwKTsKIAlI ZWFwVHVwbGUJdHVwbGU7CiAJRm9ybV9wZ19wcm9jIHByb2NTdHJ1Y3Q7Ci0JUEx5VHJpZ1R5cGUg aXNfdHJpZ2dlcjsKKwlGbWdySW5mbwlmbGluZm87CisJVHJpZ2dlckRhdGEgdHJpZ2RhdGE7CisJ RXZlbnRUcmlnZ2VyRGF0YSBldHJpZ2RhdGE7CisJYm9vbAkJaXNfdHJpZ2dlciA9IGZhbHNlOwor CWJvb2wJCWlzX2V2ZW50X3RyaWdnZXIgPSBmYWxzZTsKIAogCWlmICghQ2hlY2tGdW5jdGlvblZh bGlkYXRvckFjY2VzcyhmY2luZm8tPmZsaW5mby0+Zm5fb2lkLCBmdW5jb2lkKSkKIAkJUEdfUkVU VVJOX1ZPSUQoKTsKQEAgLTEzMCwxMiArMTMyLDMzIEBAIHBscHl0aG9uM192YWxpZGF0b3IoUEdf RlVOQ1RJT05fQVJHUykKIAkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGZ1 bmN0aW9uICV1IiwgZnVuY29pZCk7CiAJcHJvY1N0cnVjdCA9IChGb3JtX3BnX3Byb2MpIEdFVFNU UlVDVCh0dXBsZSk7CiAKLQlpc190cmlnZ2VyID0gUEx5X3Byb2NlZHVyZV9pc190cmlnZ2VyKHBy b2NTdHJ1Y3QpOworCWlmIChwcm9jU3RydWN0LT5wcm9yZXR0eXBlID09IFRSSUdHRVJPSUQpCisJ CWlzX3RyaWdnZXIgPSB0cnVlOworCWVsc2UgaWYgKHByb2NTdHJ1Y3QtPnByb3JldHR5cGUgPT0g RVZFTlRfVFJJR0dFUk9JRCkKKwkJaXNfZXZlbnRfdHJpZ2dlciA9IHRydWU7CiAKIAlSZWxlYXNl U3lzQ2FjaGUodHVwbGUpOwogCi0JLyogV2UgY2FuJ3QgdmFsaWRhdGUgdHJpZ2dlcnMgYWdhaW5z dCBhbnkgcGFydGljdWxhciB0YWJsZSAuLi4gKi8KLQkodm9pZCkgUEx5X3Byb2NlZHVyZV9nZXQo ZnVuY29pZCwgSW52YWxpZE9pZCwgaXNfdHJpZ2dlcik7CisJTWVtU2V0KGZha2VfZmNpbmZvLCAw LCBTaXplRm9yRnVuY3Rpb25DYWxsSW5mbygwKSk7CisJTWVtU2V0KCZmbGluZm8sIDAsIHNpemVv ZihmbGluZm8pKTsKKwlmYWtlX2ZjaW5mby0+ZmxpbmZvID0gJmZsaW5mbzsKKwlmbGluZm8uZm5f b2lkID0gZnVuY29pZDsKKwlmbGluZm8uZm5fbWN4dCA9IEN1cnJlbnRNZW1vcnlDb250ZXh0Owor CisJaWYgKGlzX3RyaWdnZXIpCisJeworCQlNZW1TZXQoJnRyaWdkYXRhLCAwLCBzaXplb2YodHJp Z2RhdGEpKTsKKwkJdHJpZ2RhdGEudHlwZSA9IFRfVHJpZ2dlckRhdGE7CisJCWZha2VfZmNpbmZv LT5jb250ZXh0ID0gKE5vZGUgKikgJnRyaWdkYXRhOworCX0KKwllbHNlIGlmIChpc19ldmVudF90 cmlnZ2VyKQorCXsKKwkJTWVtU2V0KCZldHJpZ2RhdGEsIDAsIHNpemVvZihldHJpZ2RhdGEpKTsK KwkJZXRyaWdkYXRhLnR5cGUgPSBUX0V2ZW50VHJpZ2dlckRhdGE7CisJCWZha2VfZmNpbmZvLT5j b250ZXh0ID0gKE5vZGUgKikgJmV0cmlnZGF0YTsKKwl9CisKKwkodm9pZCkgUEx5X3Byb2NlZHVy ZV9nZXQoZmFrZV9mY2luZm8sIHRydWUpOwogCiAJUEdfUkVUVVJOX1ZPSUQoKTsKIH0KQEAgLTE0 Myw2ICsxNjYsNyBAQCBwbHB5dGhvbjNfdmFsaWRhdG9yKFBHX0ZVTkNUSU9OX0FSR1MpCiBEYXR1 bQogcGxweXRob24zX2NhbGxfaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogeworCVBMeVByb2Nl ZHVyZUNhY2hlICpwcm9jOwogCWJvb2wJCW5vbmF0b21pYzsKIAlEYXR1bQkJcmV0dmFsOwogCVBM eUV4ZWN1dGlvbkNvbnRleHQgKmV4ZWNfY3R4OwpAQCAtMTYyLDExICsxODYsMTAgQEAgcGxweXRo b24zX2NhbGxfaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCSAqLwogCWV4ZWNfY3R4ID0gUEx5 X3B1c2hfZXhlY3V0aW9uX2NvbnRleHQoIW5vbmF0b21pYyk7CiAKKwlwcm9jID0gUEx5X3Byb2Nl ZHVyZV9nZXQoZmNpbmZvLCBmYWxzZSk7CisKIAlQR19UUlkoKTsKIAl7Ci0JCU9pZAkJCWZ1bmNv aWQgPSBmY2luZm8tPmZsaW5mby0+Zm5fb2lkOwotCQlQTHlQcm9jZWR1cmUgKnByb2M7Ci0KIAkJ LyoKIAkJICogU2V0dXAgZXJyb3IgdHJhY2ViYWNrIHN1cHBvcnQgZm9yIGVyZXBvcnQoKS4gIE5v dGUgdGhhdCB0aGUgUEdfVFJZCiAJCSAqIHN0cnVjdHVyZSBwb3BzIHRoaXMgZm9yIHVzIGFnYWlu IGF0IGV4aXQsIHNvIHdlIG5lZWRuJ3QgZG8gdGhhdApAQCAtMTgwLDMyICsyMDMsMzAgQEAgcGxw eXRob24zX2NhbGxfaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCiAJCWlmIChDQUxMRURfQVNf VFJJR0dFUihmY2luZm8pKQogCQl7Ci0JCQlSZWxhdGlvbgl0Z3JlbCA9ICgoVHJpZ2dlckRhdGEg KikgZmNpbmZvLT5jb250ZXh0KS0+dGdfcmVsYXRpb247CiAJCQlIZWFwVHVwbGUJdHJ2OwogCi0J CQlwcm9jID0gUEx5X3Byb2NlZHVyZV9nZXQoZnVuY29pZCwgUmVsYXRpb25HZXRSZWxpZCh0Z3Jl bCksIFBMUFlfVFJJR0dFUik7Ci0JCQlleGVjX2N0eC0+Y3Vycl9wcm9jID0gcHJvYzsKLQkJCXRy diA9IFBMeV9leGVjX3RyaWdnZXIoZmNpbmZvLCBwcm9jKTsKKwkJCWV4ZWNfY3R4LT5jdXJyX3By b2MgPSBwcm9jLT5wcm9jOworCQkJdHJ2ID0gUEx5X2V4ZWNfdHJpZ2dlcihmY2luZm8sIHByb2Mt PnByb2MpOwogCQkJcmV0dmFsID0gUG9pbnRlckdldERhdHVtKHRydik7CiAJCX0KIAkJZWxzZSBp ZiAoQ0FMTEVEX0FTX0VWRU5UX1RSSUdHRVIoZmNpbmZvKSkKIAkJewotCQkJcHJvYyA9IFBMeV9w cm9jZWR1cmVfZ2V0KGZ1bmNvaWQsIEludmFsaWRPaWQsIFBMUFlfRVZFTlRfVFJJR0dFUik7Ci0J CQlleGVjX2N0eC0+Y3Vycl9wcm9jID0gcHJvYzsKLQkJCVBMeV9leGVjX2V2ZW50X3RyaWdnZXIo ZmNpbmZvLCBwcm9jKTsKKwkJCWV4ZWNfY3R4LT5jdXJyX3Byb2MgPSBwcm9jLT5wcm9jOworCQkJ UEx5X2V4ZWNfZXZlbnRfdHJpZ2dlcihmY2luZm8sIHByb2MtPnByb2MpOwogCQkJcmV0dmFsID0g KERhdHVtKSAwOwogCQl9CiAJCWVsc2UKIAkJewotCQkJcHJvYyA9IFBMeV9wcm9jZWR1cmVfZ2V0 KGZ1bmNvaWQsIEludmFsaWRPaWQsIFBMUFlfTk9UX1RSSUdHRVIpOwotCQkJZXhlY19jdHgtPmN1 cnJfcHJvYyA9IHByb2M7CisJCQlleGVjX2N0eC0+Y3Vycl9wcm9jID0gcHJvYy0+cHJvYzsKIAkJ CXJldHZhbCA9IFBMeV9leGVjX2Z1bmN0aW9uKGZjaW5mbywgcHJvYyk7CiAJCX0KIAl9CiAJUEdf Q0FUQ0goKTsKIAl7CisJCS8qIERlc3Ryb3kgdGhlIGV4ZWN1dGlvbiBjb250ZXh0ICovCiAJCVBM eV9wb3BfZXhlY3V0aW9uX2NvbnRleHQoKTsKIAkJUHlFcnJfQ2xlYXIoKTsKKwogCQlQR19SRV9U SFJPVygpOwogCX0KIAlQR19FTkRfVFJZKCk7CkBAIC0yMjMsNiArMjQ0LDcgQEAgcGxweXRob24z X2lubGluZV9oYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJSW5saW5lQ29kZUJsb2NrICpjb2Rl YmxvY2sgPSAoSW5saW5lQ29kZUJsb2NrICopIERhdHVtR2V0UG9pbnRlcihQR19HRVRBUkdfREFU VU0oMCkpOwogCUZtZ3JJbmZvCWZsaW5mbzsKIAlQTHlQcm9jZWR1cmUgcHJvYzsKKwlQTHlQcm9j ZWR1cmVDYWNoZSBwY2FjaGU7CiAJUEx5RXhlY3V0aW9uQ29udGV4dCAqZXhlY19jdHg7CiAJRXJy b3JDb250ZXh0Q2FsbGJhY2sgcGxlcnJjb250ZXh0OwogCkBAIC0yNDgsNiArMjcwLDExIEBAIHBs cHl0aG9uM19pbmxpbmVfaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCSAqLwogCXByb2MucmVz dWx0LnR5cG9pZCA9IFZPSURPSUQ7CiAKKwkvKiBTZXQgdXAgYSBtaW5pbWFsIFBMeVByb2NlZHVy ZUNhY2hlIGZvciB0aGUgaW5saW5lIGJsb2NrICovCisJTWVtU2V0KCZwY2FjaGUsIDAsIHNpemVv ZihQTHlQcm9jZWR1cmVDYWNoZSkpOworCXBjYWNoZS5wcm9jID0gJnByb2M7CisJcGNhY2hlLmZj b250ZXh0ID0gQ3VycmVudE1lbW9yeUNvbnRleHQ7CisKIAkvKgogCSAqIFB1c2ggZXhlY3V0aW9u IGNvbnRleHQgb250byBzdGFjay4gIEl0IGlzIGltcG9ydGFudCB0aGF0IHRoaXMgZ2V0CiAJICog cG9wcGVkIGFnYWluLCBzbyBhdm9pZCBwdXR0aW5nIGFueXRoaW5nIHRoYXQgY291bGQgdGhyb3cg ZXJyb3IgYmV0d2VlbgpAQCAtMjY5LDcgKzI5Niw3IEBAIHBscHl0aG9uM19pbmxpbmVfaGFuZGxl cihQR19GVU5DVElPTl9BUkdTKQogCiAJCVBMeV9wcm9jZWR1cmVfY29tcGlsZSgmcHJvYywgY29k ZWJsb2NrLT5zb3VyY2VfdGV4dCk7CiAJCWV4ZWNfY3R4LT5jdXJyX3Byb2MgPSAmcHJvYzsKLQkJ UEx5X2V4ZWNfZnVuY3Rpb24oZmFrZV9mY2luZm8sICZwcm9jKTsKKwkJUEx5X2V4ZWNfZnVuY3Rp b24oZmFrZV9mY2luZm8sICZwY2FjaGUpOwogCX0KIAlQR19DQVRDSCgpOwogCXsKQEAgLTI4OSwy NyArMzE2LDYgQEAgcGxweXRob24zX2lubGluZV9oYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJ UEdfUkVUVVJOX1ZPSUQoKTsKIH0KIAotc3RhdGljIFBMeVRyaWdUeXBlCi1QTHlfcHJvY2VkdXJl X2lzX3RyaWdnZXIoRm9ybV9wZ19wcm9jIHByb2NTdHJ1Y3QpCi17Ci0JUEx5VHJpZ1R5cGUgcmV0 OwotCi0Jc3dpdGNoIChwcm9jU3RydWN0LT5wcm9yZXR0eXBlKQotCXsKLQkJY2FzZSBUUklHR0VS T0lEOgotCQkJcmV0ID0gUExQWV9UUklHR0VSOwotCQkJYnJlYWs7Ci0JCWNhc2UgRVZFTlRfVFJJ R0dFUk9JRDoKLQkJCXJldCA9IFBMUFlfRVZFTlRfVFJJR0dFUjsKLQkJCWJyZWFrOwotCQlkZWZh dWx0OgotCQkJcmV0ID0gUExQWV9OT1RfVFJJR0dFUjsKLQkJCWJyZWFrOwotCX0KLQotCXJldHVy biByZXQ7Ci19Ci0KIHN0YXRpYyB2b2lkCiBwbHB5dGhvbl9lcnJvcl9jYWxsYmFjayh2b2lkICph cmcpCiB7CmRpZmYgLS1naXQgYS9zcmMvcGwvcGxweXRob24vcGxweV9wcm9jZWR1cmUuYyBiL3Ny Yy9wbC9wbHB5dGhvbi9wbHB5X3Byb2NlZHVyZS5jCmluZGV4IDc1MGJhNTg2ZTBjLi4wMmEyM2Ux NzBiMyAxMDA2NDQKLS0tIGEvc3JjL3BsL3BscHl0aG9uL3BscHlfcHJvY2VkdXJlLmMKKysrIGIv c3JjL3BsL3BscHl0aG9uL3BscHlfcHJvY2VkdXJlLmMKQEAgLTksMzMgKzksMzEgQEAKICNpbmNs dWRlICJhY2Nlc3MvaHR1cF9kZXRhaWxzLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19wcm9jLmgi CiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZXZlbnRf dHJpZ2dlci5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3RyaWdnZXIuaCIKICNpbmNsdWRlICJmdW5j YXBpLmgiCiAjaW5jbHVkZSAicGxweV9lbG9nLmgiCiAjaW5jbHVkZSAicGxweV9tYWluLmgiCiAj aW5jbHVkZSAicGxweV9wcm9jZWR1cmUuaCIKICNpbmNsdWRlICJwbHB5X3V0aWwuaCIKICNpbmNs dWRlICJ1dGlscy9idWlsdGlucy5oIgotI2luY2x1ZGUgInV0aWxzL2hzZWFyY2guaCIKKyNpbmNs dWRlICJ1dGlscy9mdW5jY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgorI2lu Y2x1ZGUgInV0aWxzL3JlbC5oIgogI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCiAKLXN0YXRp YyBIVEFCICpQTHlfcHJvY2VkdXJlX2NhY2hlID0gTlVMTDsKLQotc3RhdGljIFBMeVByb2NlZHVy ZSAqUEx5X3Byb2NlZHVyZV9jcmVhdGUoSGVhcFR1cGxlIHByb2NUdXAsIE9pZCBmbl9vaWQsIFBM eVRyaWdUeXBlIGlzX3RyaWdnZXIpOwotc3RhdGljIGJvb2wgUEx5X3Byb2NlZHVyZV92YWxpZChQ THlQcm9jZWR1cmUgKnByb2MsIEhlYXBUdXBsZSBwcm9jVHVwKTsKK3N0YXRpYyB2b2lkIFBMeV9w cm9jZWR1cmVfY3JlYXRlKFBMeVByb2NlZHVyZSAqcHJvYywKKwkJCQkJCQkJIEhlYXBUdXBsZSBw cm9jVHVwLAorCQkJCQkJCQkgT2lkIGZuX29pZCwKKwkJCQkJCQkJIFBMeVRyaWdUeXBlIGlzX3Ry aWdnZXIpOwogc3RhdGljIGNoYXIgKlBMeV9wcm9jZWR1cmVfbXVuZ2Vfc291cmNlKGNvbnN0IGNo YXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNyYyk7Ci0KLQotdm9pZAotaW5pdF9wcm9jZWR1cmVfY2Fj aGVzKHZvaWQpCi17Ci0JSEFTSENUTAkJaGFzaF9jdGw7Ci0KLQloYXNoX2N0bC5rZXlzaXplID0g c2l6ZW9mKFBMeVByb2NlZHVyZUtleSk7Ci0JaGFzaF9jdGwuZW50cnlzaXplID0gc2l6ZW9mKFBM eVByb2NlZHVyZUVudHJ5KTsKLQlQTHlfcHJvY2VkdXJlX2NhY2hlID0gaGFzaF9jcmVhdGUoIlBM L1B5dGhvbiBwcm9jZWR1cmVzIiwgMzIsICZoYXNoX2N0bCwKLQkJCQkJCQkJCSAgSEFTSF9FTEVN IHwgSEFTSF9CTE9CUyk7Ci19CitzdGF0aWMgdm9pZCBQTHlfY29tcGlsZV9jYWxsYmFjayhGdW5j dGlvbkNhbGxJbmZvIGZjaW5mbywKKwkJCQkJCQkJIEhlYXBUdXBsZSBwcm9jVHVwLAorCQkJCQkJ CQkgY29uc3QgQ2FjaGVkRnVuY3Rpb25IYXNoS2V5ICpoYXNoa2V5LAorCQkJCQkJCQkgQ2FjaGVk RnVuY3Rpb24gKmNmdW5jLAorCQkJCQkJCQkgYm9vbCBmb3JWYWxpZGF0b3IpOworc3RhdGljIHZv aWQgUEx5X2RlbGV0ZV9jYWxsYmFjayhDYWNoZWRGdW5jdGlvbiAqY2Z1bmMpOworc3RhdGljIHZv aWQgUmVtb3ZlUEx5UHJvY2VkdXJlQ2FjaGUodm9pZCAqYXJnKTsKIAogLyoKICAqIFBMeV9wcm9j ZWR1cmVfbmFtZTogZ2V0IHRoZSBuYW1lIG9mIHRoZSBzcGVjaWZpZWQgcHJvY2VkdXJlLgpAQCAt NTEsMTAzICs0OSw5OCBAQCBQTHlfcHJvY2VkdXJlX25hbWUoUEx5UHJvY2VkdXJlICpwcm9jKQog fQogCiAvKgotICogUEx5X3Byb2NlZHVyZV9nZXQ6IHJldHVybnMgYSBjYWNoZWQgUEx5UHJvY2Vk dXJlLCBvciBjcmVhdGVzLCBzdG9yZXMgYW5kCi0gKiByZXR1cm5zIGEgbmV3IFBMeVByb2NlZHVy ZS4KKyAqIFBMeV9wcm9jZWR1cmVfZ2V0OiByZXR1cm5zIGEgY2FjaGVkIFBMeVByb2NlZHVyZUNh Y2hlIGZvciB0aGUgZnVuY3Rpb24uCiAgKgotICogZm5fb2lkIGlzIHRoZSBPSUQgb2YgdGhlIGZ1 bmN0aW9uIHJlcXVlc3RlZAotICogZm5fcmVsIGlzIEludmFsaWRPaWQgb3IgdGhlIHJlbGF0aW9u IHRoaXMgZnVuY3Rpb24gdHJpZ2dlcnMgb24KLSAqIGlzX3RyaWdnZXIgZGVub3RlcyB3aGV0aGVy IHRoZSBmdW5jdGlvbiBpcyBhIHRyaWdnZXIgZnVuY3Rpb24KKyAqIFRoZSBQTHlQcm9jZWR1cmVD YWNoZSBjb250YWlucyBhIHBvaW50ZXIgdG8gdGhlIGxvbmctbGl2ZWQgUEx5UHJvY2VkdXJlCisg KiAobWFuYWdlZCBieSBmdW5jY2FjaGUuYykgYW5kIGV4ZWN1dGlvbi1zcGVjaWZpYyBzdGF0ZSBs aWtlIFNSRiBzdGF0ZS4KICAqCi0gKiBUaGUgcmVhc29uIHRoYXQgYm90aCBmbl9yZWwgYW5kIGlz X3RyaWdnZXIgbmVlZCB0byBiZSBwYXNzZWQgaXMgdGhhdCB3aGVuCi0gKiB0cmlnZ2VyIGZ1bmN0 aW9ucyBnZXQgdmFsaWRhdGVkIHdlIGRvbid0IGtub3cgd2hpY2ggcmVsYXRpb24ocykgdGhleSds bAotICogYmUgdXNlZCB3aXRoLCBzbyBubyBzZW5zaWJsZSBmbl9yZWwgY2FuIGJlIHBhc3NlZC4g IEFsc28sIGluIHRoYXQgY2FzZQotICogd2UgY2FuJ3QgbWFrZSBhIGNhY2hlIGVudHJ5IGJlY2F1 c2Ugd2UgY2FuJ3QgY29uc3RydWN0IHRoZSByaWdodCBjYWNoZSBrZXkuCi0gKiBUbyBmb3Jlc3Rh bGwgbGVha2FnZSBvZiB0aGUgUEx5UHJvY2VkdXJlIGluIHN1Y2ggY2FzZXMsIGRlbGV0ZSBpdCBh ZnRlcgotICogY29uc3RydWN0aW9uIGFuZCByZXR1cm4gTlVMTC4gIFRoYXQncyBva2F5IGJlY2F1 c2UgdGhlIG9ubHkgY2FsbGVyIHRoYXQKLSAqIHdvdWxkIHBhc3MgdGhhdCBzZXQgb2YgdmFsdWVz IGlzIHBscHl0aG9uM192YWxpZGF0b3IsIHdoaWNoIGlnbm9yZXMgb3VyCi0gKiByZXN1bHQgYW55 d2F5LgorICogRm9yIFNSRnMsIGlmIHdlIGFyZSByZXN1bWluZyBleGVjdXRpb24gKHNyZnN0YXRl LT5pdGVyICE9IE5VTEwpLCB3ZSBza2lwCisgKiByZXZhbGlkYXRpb24gYW5kIGNvbnRpbnVlIHVz aW5nIHRoZSBzYW1lIFBMeVByb2NlZHVyZSB0byBlbnN1cmUgY29uc2lzdGVudAorICogYmVoYXZp b3IgdGhyb3VnaG91dCB0aGUgU1JGIGV4ZWN1dGlvbi4KICAqLwotUEx5UHJvY2VkdXJlICoKLVBM eV9wcm9jZWR1cmVfZ2V0KE9pZCBmbl9vaWQsIE9pZCBmbl9yZWwsIFBMeVRyaWdUeXBlIGlzX3Ry aWdnZXIpCitQTHlQcm9jZWR1cmVDYWNoZSAqCitQTHlfcHJvY2VkdXJlX2dldChGdW5jdGlvbkNh bGxJbmZvIGZjaW5mbywgYm9vbCBmb3JWYWxpZGF0b3IpCiB7Ci0JYm9vbAkJdXNlX2NhY2hlOwot CUhlYXBUdXBsZQlwcm9jVHVwOwotCVBMeVByb2NlZHVyZUtleSBrZXk7Ci0JUEx5UHJvY2VkdXJl RW50cnkgKnZvbGF0aWxlIGVudHJ5ID0gTlVMTDsKLQlQTHlQcm9jZWR1cmUgKnZvbGF0aWxlIHBy b2MgPSBOVUxMOwotCWJvb2wJCWZvdW5kID0gZmFsc2U7Ci0KLQlpZiAoaXNfdHJpZ2dlciA9PSBQ TFBZX1RSSUdHRVIgJiYgZm5fcmVsID09IEludmFsaWRPaWQpCi0JCXVzZV9jYWNoZSA9IGZhbHNl OwotCWVsc2UKLQkJdXNlX2NhY2hlID0gdHJ1ZTsKKwlQTHlQcm9jZWR1cmUgKnByb2M7CisJUEx5 UHJvY2VkdXJlQ2FjaGUgKnBjYWNoZTsKKwlGbWdySW5mbyAgICpmaW5mbyA9IGZjaW5mby0+Zmxp bmZvOwogCi0JcHJvY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lELCBPYmplY3RJZEdldERh dHVtKGZuX29pZCkpOwotCWlmICghSGVhcFR1cGxlSXNWYWxpZChwcm9jVHVwKSkKLQkJZWxvZyhF UlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGZ1bmN0aW9uICV1IiwgZm5fb2lkKTsKKwkv KgorCSAqIElmIHRoaXMgaXMgdGhlIGZpcnN0IGV4ZWN1dGlvbiBmb3IgdGhpcyBGbWdySW5mbywg c2V0IHVwIGEgY2FjaGUgc3RydWN0CisJICogKGluaXRpYWxseSBjb250YWluaW5nIG51bGwgcG9p bnRlcnMpLiAgVGhlIGNhY2hlIG11c3QgbGl2ZSBhcyBsb25nIGFzCisJICogdGhlIEZtZ3JJbmZv LCBzbyBpdCBnb2VzIGluIGZuX21jeHQuICBBbHNvIHNldCB1cCBhIG1lbW9yeSBjb250ZXh0CisJ ICogY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGludm9rZWQgd2hlbiBmbl9tY3h0IGlzIGRlbGV0ZWQu CisJICovCisJcGNhY2hlID0gZmluZm8tPmZuX2V4dHJhOworCWlmIChwY2FjaGUgPT0gTlVMTCkK Kwl7CisJCXBjYWNoZSA9IChQTHlQcm9jZWR1cmVDYWNoZSAqKQorCQkJTWVtb3J5Q29udGV4dEFs bG9jWmVybyhmaW5mby0+Zm5fbWN4dCwgc2l6ZW9mKFBMeVByb2NlZHVyZUNhY2hlKSk7CisKKwkJ cGNhY2hlLT5mY29udGV4dCA9IGZpbmZvLT5mbl9tY3h0OworCQlwY2FjaGUtPm1jYi5mdW5jID0g UmVtb3ZlUEx5UHJvY2VkdXJlQ2FjaGU7CisJCXBjYWNoZS0+bWNiLmFyZyA9IHBjYWNoZTsKKwor CQlNZW1vcnlDb250ZXh0UmVnaXN0ZXJSZXNldENhbGxiYWNrKGZpbmZvLT5mbl9tY3h0LCAmcGNh Y2hlLT5tY2IpOworCisJCWZpbmZvLT5mbl9leHRyYSA9IHBjYWNoZTsKKwl9CiAKIAkvKgotCSAq IExvb2sgZm9yIHRoZSBmdW5jdGlvbiBpbiB0aGUgY2FjaGUsIHVubGVzcyB3ZSBkb24ndCBoYXZl IHRoZSBuZWNlc3NhcnkKLQkgKiBpbmZvcm1hdGlvbiAoZS5nLiBkdXJpbmcgdmFsaWRhdGlvbiku IEluIHRoYXQgY2FzZSB3ZSBqdXN0IGRvbid0IGNhY2hlCi0JICogYW55dGhpbmcuCisJICogSWYg d2UgYXJlIHJlc3VtaW5nIGV4ZWN1dGlvbiBvZiBhIHNldC1yZXR1cm5pbmcgZnVuY3Rpb24sIGp1 c3Qga2VlcAorCSAqIHVzaW5nIHRoZSBzYW1lIGNhY2hlLiAgV2UgZG8gbm90IGFzayBmdW5jY2Fj aGUuYyB0byByZS12YWxpZGF0ZSB0aGUKKwkgKiBQTHlQcm9jZWR1cmU6IHdlIHdhbnQgdG8gcnVu IHRvIGNvbXBsZXRpb24gdXNpbmcgdGhlIGZ1bmN0aW9uJ3MgaW5pdGlhbAorCSAqIGRlZmluaXRp b24uCiAJICovCi0JaWYgKHVzZV9jYWNoZSkKKwlpZiAocGNhY2hlLT5zcmZzdGF0ZSAhPSBOVUxM ICYmIHBjYWNoZS0+c3Jmc3RhdGUtPml0ZXIgIT0gTlVMTCkKIAl7Ci0JCWtleS5mbl9vaWQgPSBm bl9vaWQ7Ci0JCWtleS5mbl9yZWwgPSBmbl9yZWw7Ci0JCWVudHJ5ID0gaGFzaF9zZWFyY2goUEx5 X3Byb2NlZHVyZV9jYWNoZSwgJmtleSwgSEFTSF9FTlRFUiwgJmZvdW5kKTsKLQkJcHJvYyA9IGVu dHJ5LT5wcm9jOworCQlBc3NlcnQocGNhY2hlLT5wcm9jICE9IE5VTEwpOworCQlyZXR1cm4gcGNh Y2hlOwogCX0KIAotCVBHX1RSWSgpOworCS8qCisJICogTG9vayB1cCwgb3IgcmUtdmFsaWRhdGUs IHRoZSBsb25nLWxpdmVkIGhhc2ggZW50cnkuCisJICovCisJcHJvYyA9IChQTHlQcm9jZWR1cmUg KikKKwkJY2FjaGVkX2Z1bmN0aW9uX2NvbXBpbGUoZmNpbmZvLAorCQkJCQkJCQkoQ2FjaGVkRnVu Y3Rpb24gKikgcGNhY2hlLT5wcm9jLAorCQkJCQkJCQlQTHlfY29tcGlsZV9jYWxsYmFjaywKKwkJ CQkJCQkJUEx5X2RlbGV0ZV9jYWxsYmFjaywKKwkJCQkJCQkJc2l6ZW9mKFBMeVByb2NlZHVyZSks CisJCQkJCQkJCXRydWUsCisJCQkJCQkJCWZvclZhbGlkYXRvcik7CisKKwkvKgorCSAqIEluc3Rh bGwgdGhlIGhhc2ggcG9pbnRlciBpbiB0aGUgUEx5UHJvY2VkdXJlQ2FjaGUsIGFuZCBpbmNyZW1l bnQgaXRzCisJICogdXNlIGNvdW50IHRvIHJlZmxlY3QgdGhhdC4gIElmIGNhY2hlZF9mdW5jdGlv bl9jb21waWxlIGdhdmUgdXMgYmFjayBhCisJICogZGlmZmVyZW50IGhhc2ggZW50cnkgdGhhbiB3 ZSB3ZXJlIHVzaW5nIGJlZm9yZSwgd2UgbXVzdCBkZWNyZW1lbnQgdGhhdAorCSAqIG9uZSdzIHVz ZSBjb3VudC4KKwkgKi8KKwlpZiAocHJvYyAhPSBwY2FjaGUtPnByb2MpCiAJewotCQlpZiAoIWZv dW5kKQorCQlpZiAocGNhY2hlLT5wcm9jICE9IE5VTEwpCiAJCXsKLQkJCS8qIEhhdmVuJ3QgZm91 bmQgaXQsIGNyZWF0ZSBhIG5ldyBwcm9jZWR1cmUgKi8KLQkJCXByb2MgPSBQTHlfcHJvY2VkdXJl X2NyZWF0ZShwcm9jVHVwLCBmbl9vaWQsIGlzX3RyaWdnZXIpOwotCQkJaWYgKHVzZV9jYWNoZSkK LQkJCQllbnRyeS0+cHJvYyA9IHByb2M7Ci0JCQllbHNlCi0JCQl7Ci0JCQkJLyogRGVsZXRlIHRo ZSBwcm9jLCBvdGhlcndpc2UgaXQncyBhIG1lbW9yeSBsZWFrICovCi0JCQkJUEx5X3Byb2NlZHVy ZV9kZWxldGUocHJvYyk7Ci0JCQkJcHJvYyA9IE5VTEw7Ci0JCQl9Ci0JCX0KLQkJZWxzZSBpZiAo IVBMeV9wcm9jZWR1cmVfdmFsaWQocHJvYywgcHJvY1R1cCkpCi0JCXsKLQkJCS8qIEZvdW5kIGl0 LCBidXQgaXQncyBpbnZhbGlkLCBmcmVlIGFuZCByZXVzZSB0aGUgY2FjaGUgZW50cnkgKi8KLQkJ CWVudHJ5LT5wcm9jID0gTlVMTDsKLQkJCWlmIChwcm9jKQotCQkJCVBMeV9wcm9jZWR1cmVfZGVs ZXRlKHByb2MpOwotCQkJcHJvYyA9IFBMeV9wcm9jZWR1cmVfY3JlYXRlKHByb2NUdXAsIGZuX29p ZCwgaXNfdHJpZ2dlcik7Ci0JCQllbnRyeS0+cHJvYyA9IHByb2M7CisJCQlBc3NlcnQocGNhY2hl LT5wcm9jLT5jZnVuYy51c2VfY291bnQgPiAwKTsKKwkJCXBjYWNoZS0+cHJvYy0+Y2Z1bmMudXNl X2NvdW50LS07CiAJCX0KLQkJLyogRm91bmQgaXQgYW5kIGl0J3MgdmFsaWQsIGl0J3MgZmluZSB0 byB1c2UgaXQgKi8KLQl9Ci0JUEdfQ0FUQ0goKTsKLQl7Ci0JCS8qIERvIG5vdCBsZWF2ZSBhbiB1 bmluaXRpYWxpemVkIGVudHJ5IGluIHRoZSBjYWNoZSAqLwotCQlpZiAodXNlX2NhY2hlKQotCQkJ aGFzaF9zZWFyY2goUEx5X3Byb2NlZHVyZV9jYWNoZSwgJmtleSwgSEFTSF9SRU1PVkUsIE5VTEwp OwotCQlQR19SRV9USFJPVygpOworCQlwY2FjaGUtPnByb2MgPSBwcm9jOworCQlwcm9jLT5jZnVu Yy51c2VfY291bnQrKzsKIAl9Ci0JUEdfRU5EX1RSWSgpOwotCi0JUmVsZWFzZVN5c0NhY2hlKHBy b2NUdXApOwogCi0JcmV0dXJuIHByb2M7CisJcmV0dXJuIHBjYWNoZTsKIH0KIAogLyoKICAqIENy ZWF0ZSBhIG5ldyBQTHlQcm9jZWR1cmUgc3RydWN0dXJlCiAgKi8KLXN0YXRpYyBQTHlQcm9jZWR1 cmUgKgotUEx5X3Byb2NlZHVyZV9jcmVhdGUoSGVhcFR1cGxlIHByb2NUdXAsIE9pZCBmbl9vaWQs IFBMeVRyaWdUeXBlIGlzX3RyaWdnZXIpCitzdGF0aWMgdm9pZAorUEx5X3Byb2NlZHVyZV9jcmVh dGUoUEx5UHJvY2VkdXJlICpwcm9jLAorCQkJCQkgSGVhcFR1cGxlIHByb2NUdXAsCisJCQkJCSBP aWQgZm5fb2lkLAorCQkJCQkgUEx5VHJpZ1R5cGUgaXNfdHJpZ2dlcikKIHsKIAljaGFyCQlwcm9j TmFtZVtOQU1FREFUQUxFTiArIDI1Nl07CiAJRm9ybV9wZ19wcm9jIHByb2NTdHJ1Y3Q7Ci0JUEx5 UHJvY2VkdXJlICp2b2xhdGlsZSBwcm9jOwogCU1lbW9yeUNvbnRleHQgY3h0OwogCU1lbW9yeUNv bnRleHQgb2xkY3h0OwogCWludAkJCXJ2OwpAQCAtMTc3LDcgKzE3MCw2IEBAIFBMeV9wcm9jZWR1 cmVfY3JlYXRlKEhlYXBUdXBsZSBwcm9jVHVwLCBPaWQgZm5fb2lkLCBQTHlUcmlnVHlwZSBpc190 cmlnZ2VyKQogCiAJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGN4dCk7CiAKLQlwcm9j ID0gcGFsbG9jMF9vYmplY3QoUEx5UHJvY2VkdXJlKTsKIAlwcm9jLT5tY3h0ID0gY3h0OwogCiAJ UEdfVFJZKCk7CkBAIC0xOTEsOCArMTgzLDYgQEAgUEx5X3Byb2NlZHVyZV9jcmVhdGUoSGVhcFR1 cGxlIHByb2NUdXAsIE9pZCBmbl9vaWQsIFBMeVRyaWdUeXBlIGlzX3RyaWdnZXIpCiAJCXByb2Mt PnByb25hbWUgPSBwc3RyZHVwKE5hbWVTdHIocHJvY1N0cnVjdC0+cHJvbmFtZSkpOwogCQlNZW1v cnlDb250ZXh0U2V0SWRlbnRpZmllcihjeHQsIHByb2MtPnByb25hbWUpOwogCQlwcm9jLT5weW5h bWUgPSBwc3RyZHVwKHByb2NOYW1lKTsKLQkJcHJvYy0+Zm5feG1pbiA9IEhlYXBUdXBsZUhlYWRl ckdldFJhd1htaW4ocHJvY1R1cC0+dF9kYXRhKTsKLQkJcHJvYy0+Zm5fdGlkID0gcHJvY1R1cC0+ dF9zZWxmOwogCQlwcm9jLT5mbl9yZWFkb25seSA9IChwcm9jU3RydWN0LT5wcm92b2xhdGlsZSAh PSBQUk9WT0xBVElMRV9WT0xBVElMRSk7CiAJCXByb2MtPmlzX3NldG9mID0gcHJvY1N0cnVjdC0+ cHJvcmV0c2V0OwogCQlwcm9jLT5pc19wcm9jZWR1cmUgPSAocHJvY1N0cnVjdC0+cHJva2luZCA9 PSBQUk9LSU5EX1BST0NFRFVSRSk7CkBAIC0zNTUsNyArMzQ1LDYgQEAgUEx5X3Byb2NlZHVyZV9j cmVhdGUoSGVhcFR1cGxlIHByb2NUdXAsIE9pZCBmbl9vaWQsIFBMeVRyaWdUeXBlIGlzX3RyaWdn ZXIpCiAJUEdfRU5EX1RSWSgpOwogCiAJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7Ci0J cmV0dXJuIHByb2M7CiB9CiAKIC8qCkBAIC00MjQsMjMgKzQxMyw2IEBAIFBMeV9wcm9jZWR1cmVf ZGVsZXRlKFBMeVByb2NlZHVyZSAqcHJvYykKIAlNZW1vcnlDb250ZXh0RGVsZXRlKHByb2MtPm1j eHQpOwogfQogCi0vKgotICogRGVjaWRlIHdoZXRoZXIgYSBjYWNoZWQgUEx5UHJvY2VkdXJlIHN0 cnVjdCBpcyBzdGlsbCB2YWxpZAotICovCi1zdGF0aWMgYm9vbAotUEx5X3Byb2NlZHVyZV92YWxp ZChQTHlQcm9jZWR1cmUgKnByb2MsIEhlYXBUdXBsZSBwcm9jVHVwKQotewotCWlmIChwcm9jID09 IE5VTEwpCi0JCXJldHVybiBmYWxzZTsKLQotCS8qIElmIHRoZSBwZ19wcm9jIHR1cGxlIGhhcyBj aGFuZ2VkLCBpdCdzIG5vdCB2YWxpZCAqLwotCWlmICghKHByb2MtPmZuX3htaW4gPT0gSGVhcFR1 cGxlSGVhZGVyR2V0UmF3WG1pbihwcm9jVHVwLT50X2RhdGEpICYmCi0JCSAgSXRlbVBvaW50ZXJF cXVhbHMoJnByb2MtPmZuX3RpZCwgJnByb2NUdXAtPnRfc2VsZikpKQotCQlyZXR1cm4gZmFsc2U7 Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQogc3RhdGljIGNoYXIgKgogUEx5X3Byb2NlZHVyZV9tdW5n ZV9zb3VyY2UoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc3JjKQogewpAQCAtNDg1LDMg KzQ1Nyw1NyBAQCBQTHlfcHJvY2VkdXJlX211bmdlX3NvdXJjZShjb25zdCBjaGFyICpuYW1lLCBj b25zdCBjaGFyICpzcmMpCiAKIAlyZXR1cm4gbXJjOwogfQorCitzdGF0aWMgdm9pZAorUEx5X2Nv bXBpbGVfY2FsbGJhY2soRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sCisJCQkJCSBIZWFwVHVwbGUg cHJvY1R1cCwKKwkJCQkJIGNvbnN0IENhY2hlZEZ1bmN0aW9uSGFzaEtleSAqaGFzaGtleSwKKwkJ CQkJIENhY2hlZEZ1bmN0aW9uICpjZnVuYywKKwkJCQkJIGJvb2wgZm9yVmFsaWRhdG9yKQorewor CVBMeVByb2NlZHVyZSAqcHJvYyA9IChQTHlQcm9jZWR1cmUgKikgY2Z1bmM7CisJUEx5VHJpZ1R5 cGUgaXNfdHJpZ2dlcjsKKwlPaWQJCQlmbl9vaWQgPSBmY2luZm8tPmZsaW5mby0+Zm5fb2lkOwor CisJaWYgKENBTExFRF9BU19UUklHR0VSKGZjaW5mbykpCisJCWlzX3RyaWdnZXIgPSBQTFBZX1RS SUdHRVI7CisJZWxzZSBpZiAoQ0FMTEVEX0FTX0VWRU5UX1RSSUdHRVIoZmNpbmZvKSkKKwkJaXNf dHJpZ2dlciA9IFBMUFlfRVZFTlRfVFJJR0dFUjsKKwllbHNlCisJCWlzX3RyaWdnZXIgPSBQTFBZ X05PVF9UUklHR0VSOworCisJUEx5X3Byb2NlZHVyZV9jcmVhdGUocHJvYywgcHJvY1R1cCwgZm5f b2lkLCBpc190cmlnZ2VyKTsKK30KKworc3RhdGljIHZvaWQKK1BMeV9kZWxldGVfY2FsbGJhY2so Q2FjaGVkRnVuY3Rpb24gKmNmdW5jKQoreworCVBMeVByb2NlZHVyZSAqcHJvYyA9IChQTHlQcm9j ZWR1cmUgKikgY2Z1bmM7CisKKwlBc3NlcnQocHJvYy0+Y2Z1bmMudXNlX2NvdW50ID09IDApOwor CUFzc2VydChwcm9jLT5jYWxsZGVwdGggPT0gMCk7CisKKwlQTHlfcHJvY2VkdXJlX2RlbGV0ZShw cm9jKTsKK30KKworLyoKKyAqIE1lbW9yeUNvbnRleHQgY2FsbGJhY2sgZnVuY3Rpb24KKyAqCisg KiBXZSByZWdpc3RlciB0aGlzIGluIHRoZSBtZW1vcnkgY29udGV4dCB0aGF0IGNvbnRhaW5zIGEg UEx5UHJvY2VkdXJlQ2FjaGUKKyAqIHN0cnVjdC4gIFdoZW4gdGhlIG1lbW9yeSBjb250ZXh0IGlz IHJlc2V0IG9yIGRlbGV0ZWQsIHdlIHJlbGVhc2UgdGhlCisgKiByZWZlcmVuY2UgY291bnQgKGlm IGFueSkgdGhhdCB0aGUgY2FjaGUgaG9sZHMgb24gdGhlIGxvbmctbGl2ZWQgaGFzaCBlbnRyeS4K KyAqIE5vdGUgdGhhdCB0aGlzIHdpbGwgaGFwcGVuIGV2ZW4gZHVyaW5nIGVycm9yIGFib3J0cy4K KyAqLworc3RhdGljIHZvaWQKK1JlbW92ZVBMeVByb2NlZHVyZUNhY2hlKHZvaWQgKmFyZykKK3sK KwlQTHlQcm9jZWR1cmVDYWNoZSAqcGNhY2hlID0gKFBMeVByb2NlZHVyZUNhY2hlICopIGFyZzsK KworCS8qIFJlbGVhc2UgcmVmZXJlbmNlIGNvdW50IG9uIFBMeVByb2NlZHVyZSAqLworCWlmIChw Y2FjaGUtPnByb2MgIT0gTlVMTCkKKwl7CisJCUFzc2VydChwY2FjaGUtPnByb2MtPmNmdW5jLnVz ZV9jb3VudCA+IDApOworCQlwY2FjaGUtPnByb2MtPmNmdW5jLnVzZV9jb3VudC0tOworCQlwY2Fj aGUtPnByb2MgPSBOVUxMOworCX0KK30KZGlmZiAtLWdpdCBhL3NyYy9wbC9wbHB5dGhvbi9wbHB5 X3Byb2NlZHVyZS5oIGIvc3JjL3BsL3BscHl0aG9uL3BscHlfcHJvY2VkdXJlLmgKaW5kZXggM2Vm MjI4NDRhOWIuLjQ1MjdiNzgzODk3IDEwMDY0NAotLS0gYS9zcmMvcGwvcGxweXRob24vcGxweV9w cm9jZWR1cmUuaAorKysgYi9zcmMvcGwvcGxweXRob24vcGxweV9wcm9jZWR1cmUuaApAQCAtNiw5 ICs2LDcgQEAKICNkZWZpbmUgUExQWV9QUk9DRURVUkVfSAogCiAjaW5jbHVkZSAicGxweV90eXBl aW8uaCIKLQotCi1leHRlcm4gdm9pZCBpbml0X3Byb2NlZHVyZV9jYWNoZXModm9pZCk7CisjaW5j bHVkZSAidXRpbHMvZnVuY2NhY2hlLmgiCiAKIAogLyoKQEAgLTMxLDE1ICsyOSwyOCBAQCB0eXBl ZGVmIHN0cnVjdCBQTHlTYXZlZEFyZ3MKIAlQeU9iamVjdCAgICpuYW1lZGFyZ3NbRkxFWElCTEVf QVJSQVlfTUVNQkVSXTsJLyogbmFtZWQgYXJncyAqLwogfSBQTHlTYXZlZEFyZ3M7CiAKLS8qIGNh Y2hlZCBwcm9jZWR1cmUgZGF0YSAqLworLyogc2F2ZWQgc3RhdGUgZm9yIGEgc2V0LXJldHVybmlu ZyBmdW5jdGlvbiAqLwordHlwZWRlZiBzdHJ1Y3QgUEx5U1JGU3RhdGUKK3sKKwlQeU9iamVjdCAg ICppdGVyOwkJCS8qIFB5dGhvbiBpdGVyYXRvciBwcm9kdWNpbmcgcmVzdWx0cyAqLworCVBMeVNh dmVkQXJncyAqc2F2ZWRhcmdzOwkvKiBmdW5jdGlvbiBhcmd1bWVudCB2YWx1ZXMgKi8KK30gUEx5 U1JGU3RhdGU7CisKKy8qCisgKiBMb25nLWxpdmVkIGRhdGEgZm9yIGEgUEwvUHl0aG9uIGZ1bmN0 aW9uLgorICoKKyAqIFRoaXMgc3RydWN0IGlzIG1hbmFnZWQgYnkgZnVuY2NhY2hlLmMgYW5kIGNh biBiZSBzaGFyZWQgYWNyb3NzIG11bHRpcGxlCisgKiBleGVjdXRpb25zIG9mIHRoZSBzYW1lIGZ1 bmN0aW9uLiAgSXQgbXVzdCBjb250YWluIG5vIGV4ZWN1dGlvbi1zcGVjaWZpYworICogc3RhdGUu ICBUaGUgQ2FjaGVkRnVuY3Rpb24gc3RydWN0IG11c3QgYmUgZmlyc3Qgc28gd2UgY2FuIGNhc3Qg YmV0d2VlbiB0aGVtLgorICovCiB0eXBlZGVmIHN0cnVjdCBQTHlQcm9jZWR1cmUKIHsKKwlDYWNo ZWRGdW5jdGlvbiBjZnVuYzsJCS8qIGZpZWxkcyBtYW5hZ2VkIGJ5IGZ1bmNjYWNoZS5jICovCisK IAlNZW1vcnlDb250ZXh0IG1jeHQ7CQkJLyogY29udGV4dCBob2xkaW5nIHRoaXMgUEx5UHJvY2Vk dXJlIGFuZCBpdHMKIAkJCQkJCQkJICogc3Vic2lkaWFyeSBkYXRhICovCiAJY2hhcgkgICAqcHJv bmFtZTsJCS8qIFNRTCBuYW1lIG9mIHByb2NlZHVyZSAqLwogCWNoYXIJICAgKnB5bmFtZTsJCQkv KiBQeXRob24gbmFtZSBvZiBwcm9jZWR1cmUgKi8KLQlUcmFuc2FjdGlvbklkIGZuX3htaW47Ci0J SXRlbVBvaW50ZXJEYXRhIGZuX3RpZDsKIAlib29sCQlmbl9yZWFkb25seTsKIAlib29sCQlpc19z ZXRvZjsJCS8qIHRydWUsIGlmIGZ1bmN0aW9uIHJldHVybnMgcmVzdWx0IHNldCAqLwogCWJvb2wJ CWlzX3Byb2NlZHVyZTsKQEAgLTU5LDIzICs3MCwyNyBAQCB0eXBlZGVmIHN0cnVjdCBQTHlQcm9j ZWR1cmUKIAlQTHlTYXZlZEFyZ3MgKmFyZ3N0YWNrOwkJLyogc3RhY2sgb2Ygb3V0ZXItbGV2ZWwg Y2FsbCBhcmd1bWVudHMgKi8KIH0gUEx5UHJvY2VkdXJlOwogCi0vKiB0aGUgcHJvY2VkdXJlIGNh Y2hlIGtleSAqLwotdHlwZWRlZiBzdHJ1Y3QgUEx5UHJvY2VkdXJlS2V5CisvKgorICogUGVyLWNh bGwtc2l0ZSBjYWNoZSBmb3IgYSBQTC9QeXRob24gZnVuY3Rpb24uCisgKgorICogVGhpcyBzdHJ1 Y3QgaXMgc3RvcmVkIGluIGZuX2V4dHJhIGFuZCBob2xkcyBleGVjdXRpb24tc3BlY2lmaWMgc3Rh dGUsCisgKiBpbmNsdWRpbmcgYSBwb2ludGVyIHRvIHRoZSBsb25nLWxpdmVkIFBMeVByb2NlZHVy ZS4gIFRoZSB1c2VfY291bnQgaW4KKyAqIHRoZSBQTHlQcm9jZWR1cmUgaXMgaW5jcmVtZW50ZWQg d2hpbGUgd2UgaG9sZCBhIHJlZmVyZW5jZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgUEx5UHJvY2Vk dXJlQ2FjaGUKIHsKLQlPaWQJCQlmbl9vaWQ7CQkJLyogZnVuY3Rpb24gT0lEICovCi0JT2lkCQkJ Zm5fcmVsOwkJCS8qIHRyaWdnZXJlZC1vbiByZWxhdGlvbiBvciBJbnZhbGlkT2lkICovCi19IFBM eVByb2NlZHVyZUtleTsKKwlQTHlQcm9jZWR1cmUgKnByb2M7CQkJLyogbG9uZy1saXZlZCBoYXNo IGVudHJ5ICovCisJTWVtb3J5Q29udGV4dCBmY29udGV4dDsJCS8qIGZuX21jeHQgLSBjb250ZXh0 IGhvbGRpbmcgdGhpcyBzdHJ1Y3QgKi8KKwlQTHlTUkZTdGF0ZSAqc3Jmc3RhdGU7CQkvKiBTUkYg ZXhlY3V0aW9uIHN0YXRlLCBOVUxMIGlmIG5vdCBpbiBTUkYgKi8KKwlib29sCQlzaHV0ZG93bl9y ZWc7CS8qIHRydWUgaWYgcmVnaXN0ZXJlZCBzaHV0ZG93biBjYWxsYmFjayAqLwogCi0vKiB0aGUg cHJvY2VkdXJlIGNhY2hlIGVudHJ5ICovCi10eXBlZGVmIHN0cnVjdCBQTHlQcm9jZWR1cmVFbnRy eQotewotCVBMeVByb2NlZHVyZUtleSBrZXk7CQkvKiBoYXNoIGtleSAqLwotCVBMeVByb2NlZHVy ZSAqcHJvYzsKLX0gUEx5UHJvY2VkdXJlRW50cnk7CisJLyogQ2FsbGJhY2sgdG8gcmVsZWFzZSB1 c2UtY291bnQgd2hlbiBmY29udGV4dCBpcyBkZWxldGVkICovCisJTWVtb3J5Q29udGV4dENhbGxi YWNrIG1jYjsKK30gUEx5UHJvY2VkdXJlQ2FjaGU7CiAKIC8qIFBMeVByb2NlZHVyZSBtYW5pcHVs YXRpb24gKi8KIGV4dGVybiBjaGFyICpQTHlfcHJvY2VkdXJlX25hbWUoUEx5UHJvY2VkdXJlICpw cm9jKTsKLWV4dGVybiBQTHlQcm9jZWR1cmUgKlBMeV9wcm9jZWR1cmVfZ2V0KE9pZCBmbl9vaWQs IE9pZCBmbl9yZWwsIFBMeVRyaWdUeXBlIGlzX3RyaWdnZXIpOworZXh0ZXJuIFBMeVByb2NlZHVy ZUNhY2hlICpQTHlfcHJvY2VkdXJlX2dldChGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywgYm9vbCBm b3JWYWxpZGF0b3IpOwogZXh0ZXJuIHZvaWQgUEx5X3Byb2NlZHVyZV9jb21waWxlKFBMeVByb2Nl ZHVyZSAqcHJvYywgY29uc3QgY2hhciAqc3JjKTsKIGV4dGVybiB2b2lkIFBMeV9wcm9jZWR1cmVf ZGVsZXRlKFBMeVByb2NlZHVyZSAqcHJvYyk7CiAKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5k ZXggOGNmNDBjODcwNDMuLjYzNmM4YjI3ZmU3IDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApA QCAtMjA3NCw2ICsyMDc0LDcgQEAgUEx5T2JUb1R1cGxlCiBQTHlPYmplY3RfQXNTdHJpbmdfdAog UEx5UGxhbk9iamVjdAogUEx5UHJvY2VkdXJlCitQTHlQcm9jZWR1cmVDYWNoZQogUEx5UHJvY2Vk dXJlRW50cnkKIFBMeVByb2NlZHVyZUtleQogUEx5UmVzdWx0T2JqZWN0Ci0tIAoyLjUwLjEgKEFw cGxlIEdpdC0xNTUpCgo= --bec4725a5df05667c150515ed7ed644e9bd9143ebccc2729a60d2a49279a--