Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oOWUC-0001IM-96 for pgsql-hackers@arkaria.postgresql.org; Thu, 18 Aug 2022 03:46:25 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1oOWUB-0003Jy-5T for pgsql-hackers@arkaria.postgresql.org; Thu, 18 Aug 2022 03:46:23 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oOWUA-0003Jj-2o for pgsql-hackers@lists.postgresql.org; Thu, 18 Aug 2022 03:46:22 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by makus.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1oOWTw-0003wW-7Y for pgsql-hackers@lists.postgresql.org; Thu, 18 Aug 2022 03:46:21 +0000 Received: from [192.168.0.105] (unknown [176.214.49.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) by mail.postgrespro.ru (Postfix) with ESMTPSA id 4225921C3369; Thu, 18 Aug 2022 06:46:05 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1660794365; bh=rNeRKhguEuqetB3UsQyFYYGomODe/hrz3Su+uH0+GGs=; h=Date:Subject:To:Cc:References:From:In-Reply-To; b=WtqXEcC6y+91RgtQFKglj3J1o16IkGQObZ1XCchRREtcxYFA0ZYrdrBCVCOmDaGvY qPyFccdHKIVh7lhHrJT9NS66dTFHFnLcgCTWZkyqDbisL/XvuqjsWZCl7ffrVmzu6I wSdvX0Nqe8+Vs5mcpuLoIkXik6uF9gKA7JHnRtlI= Content-Type: multipart/mixed; boundary="------------4f0L3EFiQJb2iiAozUzeF43y" Message-ID: <7d83684b-7932-9f29-400b-0beedfafcdd4@postgrespro.ru> Date: Thu, 18 Aug 2022 06:45:56 +0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Subject: Re: SQL/JSON features for v15 Content-Language: en-US To: "Jonathan S. Katz" , Andres Freund Cc: PostgreSQL Hackers , Andrew Dunstan , Tom Lane , Michael Paquier , John Naylor , Amit Langote References: <20220815223853.itrlpqgpqheg6r6a@awork3.anarazel.de> <225d341b-f310-eed0-ceff-b8ec61669d9f@postgrespro.ru> <20220816021425.5sa6gx67zmpou3bc@awork3.anarazel.de> <8d0ffc54-469a-ffab-68a3-8b547e24a08d@postgresql.org> From: Nikita Glukhov In-Reply-To: <8d0ffc54-469a-ffab-68a3-8b547e24a08d@postgresql.org> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------4f0L3EFiQJb2iiAozUzeF43y Content-Type: multipart/alternative; boundary="------------DhQFubKajCHZFETK5GNtDBwr" --------------DhQFubKajCHZFETK5GNtDBwr Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi, On 17.08.2022 04:45, Jonathan S. Katz wrote: > > On 8/15/22 10:14 PM, Andres Freund wrote: > >> I pushed a few cleanups to >> https://github.com/anarazel/postgres/commits/json >> while I was hacking on this (ignore that it's based on the meson >> tree, that's >> just faster for me). Some of them might not be applicable anymore, >> but it >> might still make sense for you to look at. > > With RMT hat on, this appears to be making progress. A few questions / > comments for the group: > > 1. Nikita: Did you have a chance to review Andres's changes as well? Yes, I have reviewed Andres's changes, they all are ok. Then I started to do on the top of it other fixes that help to avoid subtransactions when they are not needed. And it ended in the new refactoring of coercion code. Also I moved here from v6-0003 fix of ExecEvalJsonNeedSubtransaction() which considers more cases. On 16.08.2022 05:14, Andres Freund wrote: >> But for JIT I still had to construct additional ExprState with a >> function compiled from subexpression steps. > Why did you have to do this? I simply did not dare to implement compilation of recursively-callable function with additional parameter stepno. In the v8 patch I did it by adding a switch with all possible jump addresses of EEOP_SUBTRANS steps in the beginning of the function. And it really seems to work faster, but needs more exploration. See patch 0003, where both variants preserved using #ifdef. The desciprion of the v7 patches: 0001 Simplify JsonExpr execution Andres's changes + mine: - Added JsonCoercionType enum, fields like via_io replaced with it - Emit only context item steps in JSON_TABLE_OP case - Skip coercion of NULLs to non-domain types (is it correct?) 0002 Fix returning of json[b] domains in JSON_VALUE: simply rebase of v6 onto 0001 0003 Add EEOP_SUBTRANS executor step v6 + new recursive JIT 0004 Split JsonExpr execution into steps simply rebase of v6 + used LLMBuildSwitch() in EEOP_JSONEXPR -- Nikita Glukhov Postgres Professional:http://www.postgrespro.com The Russian Postgres Company --------------DhQFubKajCHZFETK5GNtDBwr Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 7bit

Hi,

On 17.08.2022 04:45, Jonathan S. Katz wrote:

On 8/15/22 10:14 PM, Andres Freund wrote:

I pushed a few cleanups to https://github.com/anarazel/postgres/commits/json
while I was hacking on this (ignore that it's based on the meson tree, that's
just faster for me). Some of them might not be applicable anymore, but it
might still make sense for you to look at.

With RMT hat on, this appears to be making progress. A few questions / comments for the group:

1. Nikita: Did you have a chance to review Andres's changes as well?
Yes, I have reviewed Andres's changes, they all are ok.

Then I started to do on the top of it other fixes that help to avoid
subtransactions when they are not needed. And it ended in the new 
refactoring of coercion code.  Also I moved here from v6-0003 fix of 
ExecEvalJsonNeedSubtransaction() which considers more cases.



On 16.08.2022 05:14, Andres Freund wrote:
>> But for JIT I still had to construct additional ExprState with a
>> function compiled from subexpression steps.

> Why did you have to do this?

I simply did not dare to implement compilation of recursively-callable
function with additional parameter stepno.  In the v8 patch I did it
by adding a switch with all possible jump addresses of EEOP_SUBTRANS
steps in the beginning of the function.  And it really seems to work
faster, but needs more exploration.  See patch 0003, where both
variants preserved using #ifdef.


The desciprion of the v7 patches:

0001 Simplify JsonExpr execution
 Andres's changes + mine:
  - Added JsonCoercionType enum, fields like via_io replaced with it
  - Emit only context item steps in JSON_TABLE_OP case
  - Skip coercion of NULLs to non-domain types (is it correct?)

0002 Fix returning of json[b] domains in JSON_VALUE:
  simply rebase of v6 onto 0001

0003 Add EEOP_SUBTRANS executor step
  v6 + new recursive JIT

0004 Split JsonExpr execution into steps
  simply rebase of v6 + used LLMBuildSwitch() in EEOP_JSONEXPR
-- 
Nikita Glukhov
Postgres Professional: http://www.postgrespro.com
The Russian Postgres Company
--------------DhQFubKajCHZFETK5GNtDBwr-- --------------4f0L3EFiQJb2iiAozUzeF43y Content-Type: text/x-patch; charset=UTF-8; name="v7-0001-Simplify-JsonExpr-execution.patch" Content-Disposition: attachment; filename="v7-0001-Simplify-JsonExpr-execution.patch" Content-Transfer-Encoding: base64 RnJvbSA5OWNmMmQxYzZjZWExODg5MTIwZGE1ZTg0NWIxN2NjZjVkYjEwMzMyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwu ZGU+CkRhdGU6IEZyaSwgMTIgQXVnIDIwMjIgMTE6MDc6MDYgLTA3MDAKU3ViamVjdDogW1BB VENIIHY3IDEvNF0gU2ltcGxpZnkgSnNvbkV4cHIgZXhlY3V0aW9uCgpqc29uOiByZW5hbWUg RXhlY0V2YWxKc29uKCkgdG8gRXhlY0V2YWxKc29uRXhwcigpCgpJdCB3YXMgY29uZnVzaW5n IHRoYXQgRUVPUF9KU09ORVhQUiB3YXMgZXZhbHVhdGVkIGJ5IEV4ZWNFdmFsSnNvbigpIGJ1 dCB0aGF0IGEKRXhlY0V2YWxKc29uRXhwcigpIGFsc28gZXhpc3RlZC4gVGhlIGxhdHRlciBp cyBub3cgcmVuYW1lZCB0bwpFeGVjRXZhbEpzb25FeHBySW50ZXJuYWwoKSwgYnV0IHNvbWV0 aGluZyBiZXR0ZXIgbWlnaHQgYmUgcG9zc2libGUuCgpqc29uOiBtYWtlIEV4ZWNQcmVwYXJl SnNvbkl0ZW1Db2VyY2lvbiBzdGF0aWMKCmpzb246IFJlbW92ZSB1bnVzZWQgJ3JldHVybmlu ZycgYXJndW1lbnQgdG8gRXhlY1ByZXBhcmVKc29uSXRlbUNvZXJjaW9uKCkncwoKanNvbjog d2lwOiBjYXRjaGluZyBlcnJvcnMgdmlhIG1hY3JvLCBjbGVhbnVwIHNpbmdhdHVyZXMuCgp3 aXA6IG5vIG5lZWQgZm9yIHN1YnRyYW5zIGluIEV4ZWNFdmFsSnNvbkV4cHIoKT8/PwoKUmVt b3ZlIEpTRV9PUFRfU1VCVFJBTlMncyBwYXJhbWV0ZXIgY29lcmNpb25JblN1YnRyYW5zCgpS ZWZhY3RvciBKc29uRXhwciBjb2VyY2lvbnMKCk1vcmUgY29ycmVjdGx5IGltcGxlbWVudCBF eGVjRXZhbEpzb25OZWVkc1N1YlRyYW5zYWN0aW9uKCkKCkVtaXQgb25seSBjb250ZXh0IGl0 ZW0gZm9yIEpTT05fVEFCTEUKClNraXAgY29lcmNpb24gb2YgTlVMTHMgZm9yIG5vbi1kb21h aW4gdHlwZXMKLS0tCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwci5jICAgICAgIHwg MTA5ICsrKy0tCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5jIHwgNTU5 ICsrKysrKysrKysrKysrLS0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9qaXQvbGx2bS9sbHZt aml0X2V4cHIuYyAgIHwgICAyICstCiBzcmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X3R5 cGVzLmMgIHwgICAyICstCiBzcmMvYmFja2VuZC9ub2Rlcy9ub2RlRnVuY3MuYyAgICAgICAg IHwgIDEwICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9jbGF1c2VzLmMgIHwgICAy ICstCiBzcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jICAgICAgIHwgIDYyICsrLQog c3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0V4cHIuaCAgICAgICB8ICA1NSArKy0KIHNyYy9p bmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oICAgICAgICAgfCAgMTggKy0KIDkgZmlsZXMgY2hh bmdlZCwgNDcyIGluc2VydGlvbnMoKyksIDM0NyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwci5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZXhlY0V4cHIuYwppbmRleCBkMGE1N2M3YWFlZS4uMWM5NzgyZGUxNWYgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHByLmMKKysrIGIvc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZXhlY0V4cHIuYwpAQCAtMjU2MSw0OSArMjU2MSw3MiBAQCBFeGVjSW5pdEV4 cHJSZWMoRXhwciAqbm9kZSwgRXhwclN0YXRlICpzdGF0ZSwKIAkJY2FzZSBUX0pzb25FeHBy OgogCQkJewogCQkJCUpzb25FeHByICAgKmpleHByID0gY2FzdE5vZGUoSnNvbkV4cHIsIG5v ZGUpOwotCQkJCUpzb25FeHByU3RhdGUgKmpzZXN0YXRlID0gcGFsbG9jMChzaXplb2YoSnNv bkV4cHJTdGF0ZSkpOworCQkJCUpzb25FeHByU3RhdGUgKmpzZXN0YXRlOworCQkJCUpzb25D b2VyY2lvbiAqcmVzdWx0X2NvZXJjaW9uID0gamV4cHItPnJlc3VsdF9jb2VyY2lvbjsKIAkJ CQlMaXN0Q2VsbCAgICphcmdleHBybGM7CiAJCQkJTGlzdENlbGwgICAqYXJnbmFtZWxjOwog Ci0JCQkJc2NyYXRjaC5vcGNvZGUgPSBFRU9QX0pTT05FWFBSOwotCQkJCXNjcmF0Y2guZC5q c29uZXhwci5qc2VzdGF0ZSA9IGpzZXN0YXRlOworCQkJCS8qIEpTT05fVEFCTEUgcHJldWRv LWZ1bmN0aW9uIHJldHVybnMgY29udGV4dCBpdGVtIGFzIGEgcmVzdWx0ICovCisJCQkJaWYg KGpleHByLT5vcCA9PSBKU09OX1RBQkxFX09QKQorCQkJCXsKKwkJCQkJRXhlY0luaXRFeHBy UmVjKChFeHByICopIGpleHByLT5mb3JtYXR0ZWRfZXhwciwgc3RhdGUsCisJCQkJCQkJCQly ZXN2LCByZXNudWxsKTsKKwkJCQkJYnJlYWs7CisJCQkJfQogCisJCQkJanNlc3RhdGUgPSBw YWxsb2MwKHNpemVvZihKc29uRXhwclN0YXRlKSk7CiAJCQkJanNlc3RhdGUtPmpzZXhwciA9 IGpleHByOwogCi0JCQkJanNlc3RhdGUtPmZvcm1hdHRlZF9leHByID0KLQkJCQkJcGFsbG9j KHNpemVvZigqanNlc3RhdGUtPmZvcm1hdHRlZF9leHByKSk7CisJCQkJc2NyYXRjaC5vcGNv ZGUgPSBFRU9QX0pTT05FWFBSOworCQkJCXNjcmF0Y2guZC5qc29uZXhwci5qc2VzdGF0ZSA9 IGpzZXN0YXRlOwogCiAJCQkJRXhlY0luaXRFeHByUmVjKChFeHByICopIGpleHByLT5mb3Jt YXR0ZWRfZXhwciwgc3RhdGUsCi0JCQkJCQkJCSZqc2VzdGF0ZS0+Zm9ybWF0dGVkX2V4cHIt PnZhbHVlLAotCQkJCQkJCQkmanNlc3RhdGUtPmZvcm1hdHRlZF9leHByLT5pc251bGwpOwot Ci0JCQkJanNlc3RhdGUtPnBhdGhzcGVjID0KLQkJCQkJcGFsbG9jKHNpemVvZigqanNlc3Rh dGUtPnBhdGhzcGVjKSk7CisJCQkJCQkJCSZqc2VzdGF0ZS0+Zm9ybWF0dGVkX2V4cHIudmFs dWUsCisJCQkJCQkJCSZqc2VzdGF0ZS0+Zm9ybWF0dGVkX2V4cHIuaXNudWxsKTsKIAogCQkJ CUV4ZWNJbml0RXhwclJlYygoRXhwciAqKSBqZXhwci0+cGF0aF9zcGVjLCBzdGF0ZSwKLQkJ CQkJCQkJJmpzZXN0YXRlLT5wYXRoc3BlYy0+dmFsdWUsCi0JCQkJCQkJCSZqc2VzdGF0ZS0+ cGF0aHNwZWMtPmlzbnVsbCk7CisJCQkJCQkJCSZqc2VzdGF0ZS0+cGF0aHNwZWMudmFsdWUs CisJCQkJCQkJCSZqc2VzdGF0ZS0+cGF0aHNwZWMuaXNudWxsKTsKIAotCQkJCWpzZXN0YXRl LT5yZXNfZXhwciA9Ci0JCQkJCXBhbGxvYyhzaXplb2YoKmpzZXN0YXRlLT5yZXNfZXhwcikp OworCQkJCWlmIChyZXN1bHRfY29lcmNpb24pCisJCQkJeworCQkJCQlqc2VzdGF0ZS0+cmVz dWx0X2NvZXJjaW9uLnR5cGUgPSByZXN1bHRfY29lcmNpb24tPmN0eXBlOwogCi0JCQkJanNl c3RhdGUtPnJlc3VsdF9leHByID0gamV4cHItPnJlc3VsdF9jb2VyY2lvbgotCQkJCQk/IEV4 ZWNJbml0RXhwcldpdGhDYXNlVmFsdWUoKEV4cHIgKikgamV4cHItPnJlc3VsdF9jb2VyY2lv bi0+ZXhwciwKLQkJCQkJCQkJCQkJCXN0YXRlLT5wYXJlbnQsCi0JCQkJCQkJCQkJCQkmanNl c3RhdGUtPnJlc19leHByLT52YWx1ZSwKLQkJCQkJCQkJCQkJCSZqc2VzdGF0ZS0+cmVzX2V4 cHItPmlzbnVsbCkKLQkJCQkJOiBOVUxMOworCQkJCQlpZiAocmVzdWx0X2NvZXJjaW9uLT5l eHByKQorCQkJCQkJanNlc3RhdGUtPnJlc3VsdF9jb2VyY2lvbi5lc3RhdGUgPQorCQkJCQkJ CUV4ZWNJbml0RXhwcldpdGhDYXNlVmFsdWUoKEV4cHIgKikgcmVzdWx0X2NvZXJjaW9uLT5l eHByLAorCQkJCQkJCQkJCQkJCSAgc3RhdGUtPnBhcmVudCwKKwkJCQkJCQkJCQkJCQkgICZq c2VzdGF0ZS0+Y29lcmNpb25fZXhwci52YWx1ZSwKKwkJCQkJCQkJCQkJCQkgICZqc2VzdGF0 ZS0+Y29lcmNpb25fZXhwci5pc251bGwpOwogCi0JCQkJanNlc3RhdGUtPmRlZmF1bHRfb25f ZW1wdHkgPSAhamV4cHItPm9uX2VtcHR5ID8gTlVMTCA6Ci0JCQkJCUV4ZWNJbml0RXhwcigo RXhwciAqKSBqZXhwci0+b25fZW1wdHktPmRlZmF1bHRfZXhwciwKLQkJCQkJCQkJIHN0YXRl LT5wYXJlbnQpOworCQkJCQkvKiBTa2lwIGNvZXJjaW9uIG9mIE5VTExzIGZvciBub24tZG9t YWluIHR5cGVzICovCisJCQkJCWpzZXN0YXRlLT5za2lwX251bGxfY29lcmNpb24gPQorCQkJ CQkJZ2V0QmFzZVR5cGUoamV4cHItPnJldHVybmluZy0+dHlwaWQpID09IGpleHByLT5yZXR1 cm5pbmctPnR5cGlkOworCQkJCX0KKwkJCQllbHNlCisJCQkJCWpzZXN0YXRlLT5yZXN1bHRf Y29lcmNpb24udHlwZSA9IEpTT05fQ09FUkNJT05fTk9ORTsKKworCQkJCS8qIEFkZGl0aW9u YWwgY29lcmNpb24gb2YgSlNPTl9RVUVSWShPTUlUIFFVT1RFUykgKi8KKwkJCQlqc2VzdGF0 ZS0+aW9fY29lcmNpb24udHlwZSA9IEpTT05fQ09FUkNJT05fVklBX0lPOworCisJCQkJaWYg KGpleHByLT5vbl9lbXB0eSkKKwkJCQl7CisJCQkJCWpzZXN0YXRlLT5kZWZhdWx0X29uX2Vt cHR5ID0KKwkJCQkJCUV4ZWNJbml0RXhwcigoRXhwciAqKSBqZXhwci0+b25fZW1wdHktPmRl ZmF1bHRfZXhwciwKKwkJCQkJCQkJCSBzdGF0ZS0+cGFyZW50KTsKKworCQkJCQlqc2VzdGF0 ZS0+ZGVmYXVsdF9vbl9lbXB0eV9jYW5fdGhyb3cgPQorCQkJCQkJRXhlY0V2YWxFeHByQ2Fu VGhyb3dFcnJvcnMoamV4cHItPm9uX2VtcHR5LT5kZWZhdWx0X2V4cHIpOworCQkJCX0KIAog CQkJCWpzZXN0YXRlLT5kZWZhdWx0X29uX2Vycm9yID0KIAkJCQkJRXhlY0luaXRFeHByKChF eHByICopIGpleHByLT5vbl9lcnJvci0+ZGVmYXVsdF9leHByLAogCQkJCQkJCQkgc3RhdGUt PnBhcmVudCk7CiAKKworCQkJCS8qIEluaXRpYWxpemUgdHlwZSBpbnB1dCBpbmZvIGlmIEkv TyBjb2VyY2lvbiBjYW4gYmUgdXNlZCAqLwogCQkJCWlmIChqZXhwci0+b21pdF9xdW90ZXMg fHwKLQkJCQkJKGpleHByLT5yZXN1bHRfY29lcmNpb24gJiYgamV4cHItPnJlc3VsdF9jb2Vy Y2lvbi0+dmlhX2lvKSkKKwkJCQkJanNlc3RhdGUtPnJlc3VsdF9jb2VyY2lvbi50eXBlID09 IEpTT05fQ09FUkNJT05fVklBX0lPKQogCQkJCXsKIAkJCQkJT2lkCQkJdHlwaW5wdXQ7CiAK QEAgLTI2NDEsMzAgKzI2NjQsNDYgQEAgRXhlY0luaXRFeHByUmVjKEV4cHIgKm5vZGUsIEV4 cHJTdGF0ZSAqc3RhdGUsCiAJCQkJaWYgKGpleHByLT5jb2VyY2lvbnMpCiAJCQkJewogCQkJ CQlKc29uQ29lcmNpb24gKipjb2VyY2lvbjsKLQkJCQkJc3RydWN0IEpzb25Db2VyY2lvblN0 YXRlICpjc3RhdGU7CisJCQkJCUpzb25Db2VyY2lvblN0YXRlICpjc3RhdGU7CiAJCQkJCURh dHVtCSAgICpjYXNldmFsOwogCQkJCQlib29sCSAgICpjYXNlbnVsbDsKIAotCQkJCQlqc2Vz dGF0ZS0+Y29lcmNpb25fZXhwciA9Ci0JCQkJCQlwYWxsb2Moc2l6ZW9mKCpqc2VzdGF0ZS0+ Y29lcmNpb25fZXhwcikpOworCQkJCQlqc2VzdGF0ZS0+aXRlbV9jb2VyY2lvbnMgPSBwYWxs b2MwKHNpemVvZigqanNlc3RhdGUtPml0ZW1fY29lcmNpb25zKSk7CiAKLQkJCQkJY2FzZXZh bCA9ICZqc2VzdGF0ZS0+Y29lcmNpb25fZXhwci0+dmFsdWU7Ci0JCQkJCWNhc2VudWxsID0g JmpzZXN0YXRlLT5jb2VyY2lvbl9leHByLT5pc251bGw7CisJCQkJCWNhc2V2YWwgPSAmanNl c3RhdGUtPmNvZXJjaW9uX2V4cHIudmFsdWU7CisJCQkJCWNhc2VudWxsID0gJmpzZXN0YXRl LT5jb2VyY2lvbl9leHByLmlzbnVsbDsKIAotCQkJCQlmb3IgKGNzdGF0ZSA9ICZqc2VzdGF0 ZS0+Y29lcmNpb25zLm51bGwsCisJCQkJCWZvciAoY3N0YXRlID0gJmpzZXN0YXRlLT5pdGVt X2NvZXJjaW9ucy0+bnVsbCwKIAkJCQkJCSBjb2VyY2lvbiA9ICZqZXhwci0+Y29lcmNpb25z LT5udWxsOwogCQkJCQkJIGNvZXJjaW9uIDw9ICZqZXhwci0+Y29lcmNpb25zLT5jb21wb3Np dGU7CiAJCQkJCQkgY29lcmNpb24rKywgY3N0YXRlKyspCiAJCQkJCXsKLQkJCQkJCWNzdGF0 ZS0+Y29lcmNpb24gPSAqY29lcmNpb247Ci0JCQkJCQljc3RhdGUtPmVzdGF0ZSA9ICpjb2Vy Y2lvbiA/Ci0JCQkJCQkJRXhlY0luaXRFeHByV2l0aENhc2VWYWx1ZSgoRXhwciAqKSAoKmNv ZXJjaW9uKS0+ZXhwciwKLQkJCQkJCQkJCQkJCQkgIHN0YXRlLT5wYXJlbnQsCi0JCQkJCQkJ CQkJCQkJICBjYXNldmFsLCBjYXNlbnVsbCkgOiBOVUxMOworCQkJCQkJaWYgKCEqY29lcmNp b24pCisJCQkJCQkJLyogTWlzc2luZyBjb2VyY2lvbiBoZXJlIG1lYW5zIG1pc3NpbmcgY2Fz dCAqLworCQkJCQkJCWNzdGF0ZS0+dHlwZSA9IEpTT05fQ09FUkNJT05fRVJST1I7CisJCQkJ CQllbHNlIGlmICgoKmNvZXJjaW9uKS0+Y3R5cGUgPT0gSlNPTl9DT0VSQ0lPTl9WSUFfRVhQ UikKKwkJCQkJCXsKKwkJCQkJCQlBc3NlcnQoKCpjb2VyY2lvbiktPmV4cHIpOworCQkJCQkJ CWNzdGF0ZS0+ZXN0YXRlID0KKwkJCQkJCQkJRXhlY0luaXRFeHByV2l0aENhc2VWYWx1ZSgo RXhwciAqKSAoKmNvZXJjaW9uKS0+ZXhwciwKKwkJCQkJCQkJCQkJCQkJICBzdGF0ZS0+cGFy ZW50LAorCQkJCQkJCQkJCQkJCQkgIGNhc2V2YWwsCisJCQkJCQkJCQkJCQkJCSAgY2FzZW51 bGwpOworCQkJCQkJCWNzdGF0ZS0+dHlwZSA9IEpTT05fQ09FUkNJT05fVklBX0VYUFI7CisJ CQkJCQl9CisJCQkJCQllbHNlIGlmICgoKmNvZXJjaW9uKS0+Y3R5cGUgPT0gSlNPTl9DT0VS Q0lPTl9OT05FKQorCQkJCQkJCWNzdGF0ZS0+dHlwZSA9IEpTT05fQ09FUkNJT05fTk9ORTsK KwkJCQkJCWVsc2UKKwkJCQkJCXsKKwkJCQkJCQkvKiBUaGVyZSBzaG91bGQgbm90IGJlIG90 aGVyIGNvZXJjaW9uIHR5cGVzICovCisJCQkJCQkJQXNzZXJ0KDApOworCQkJCQkJCWNzdGF0 ZS0+dHlwZSA9IEpTT05fQ09FUkNJT05fRVJST1I7CisJCQkJCQl9CiAJCQkJCX0KIAkJCQl9 CiAKIAkJCQlFeHByRXZhbFB1c2hTdGVwKHN0YXRlLCAmc2NyYXRjaCk7CisKIAkJCQlicmVh azsKIAkJCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJ bnRlcnAuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMKaW5kZXgg NjM2Nzk0Y2E2ZjEuLmJmMTQxYTY2MDY2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVj dXRvci9leGVjRXhwckludGVycC5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNF eHBySW50ZXJwLmMKQEAgLTE4NDQsNyArMTg0NCw3IEBAIEV4ZWNJbnRlcnBFeHByKEV4cHJT dGF0ZSAqc3RhdGUsIEV4cHJDb250ZXh0ICplY29udGV4dCwgYm9vbCAqaXNudWxsKQogCQlF RU9fQ0FTRShFRU9QX0pTT05FWFBSKQogCQl7CiAJCQkvKiB0b28gY29tcGxleCBmb3IgYW4g aW5saW5lIGltcGxlbWVudGF0aW9uICovCi0JCQlFeGVjRXZhbEpzb24oc3RhdGUsIG9wLCBl Y29udGV4dCk7CisJCQlFeGVjRXZhbEpzb25FeHByKHN0YXRlLCBvcCwgZWNvbnRleHQpOwog CQkJRUVPX05FWFQoKTsKIAkJfQogCkBAIC00NzM4LDU2ICs0NzM4LDE1OSBAQCBFeGVjRXZh bEpzb25CZWhhdmlvcihFeHByQ29udGV4dCAqZWNvbnRleHQsIEpzb25CZWhhdmlvciAqYmVo YXZpb3IsCiAJfQogfQogCisKK3R5cGVkZWYgc3RydWN0IEV2YWxKc29uU3VidHJhbnNTdGF0 ZQoreworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKwlSZXNvdXJjZU93bmVyIG9sZG93 bmVyOworfSBFdmFsSnNvblN1YnRyYW5zU3RhdGU7CisKK3N0YXRpYyB2b2lkCitFeGVjRXZh bEpzb25TdGFydFN1YnRyYW5zKEV2YWxKc29uU3VidHJhbnNTdGF0ZSAqc3RhdGUpCit7CisJ LyoKKwkgKiBXZSBzaG91bGQgY2F0Y2ggZXhjZXB0aW9ucyBvZiBjYXRlZ29yeSBFUlJDT0RF X0RBVEFfRVhDRVBUSU9OIGFuZAorCSAqIGV4ZWN1dGUgdGhlIGNvcnJlc3BvbmRpbmcgT04g RVJST1IgYmVoYXZpb3IgdGhlbi4KKwkgKi8KKwlzdGF0ZS0+b2xkY29udGV4dCA9IEN1cnJl bnRNZW1vcnlDb250ZXh0OworCXN0YXRlLT5vbGRvd25lciA9IEN1cnJlbnRSZXNvdXJjZU93 bmVyOworCisJQmVnaW5JbnRlcm5hbFN1YlRyYW5zYWN0aW9uKE5VTEwpOworCisJLyogV2Fu dCB0byBleGVjdXRlIGV4cHJlc3Npb25zIGluc2lkZSBmdW5jdGlvbidzIG1lbW9yeSBjb250 ZXh0ICovCisJLyoKKwkgKiBBRklYTUU6IEkgZG9uJ3QgdGhpbmsgdGhhdCdzIE9LLCB0aGVy ZSBtaWdodCBiZSBsb3RzIG9mIGxlYWtlZCBtZW1vcnkKKwkgKiBldGMuCisJICovCisJTWVt b3J5Q29udGV4dFN3aXRjaFRvKHN0YXRlLT5vbGRjb250ZXh0KTsKK30KKworc3RhdGljIHZv aWQKK0V4ZWNFdmFsSnNvbkVuZFN1YnRyYW5zKEV2YWxKc29uU3VidHJhbnNTdGF0ZSAqc3Rh dGUpCit7CisJLyogQ29tbWl0IHRoZSBpbm5lciB0cmFuc2FjdGlvbiwgcmV0dXJuIHRvIG91 dGVyIHhhY3QgY29udGV4dCAqLworCVJlbGVhc2VDdXJyZW50U3ViVHJhbnNhY3Rpb24oKTsK KwlNZW1vcnlDb250ZXh0U3dpdGNoVG8oc3RhdGUtPm9sZGNvbnRleHQpOworCUN1cnJlbnRS ZXNvdXJjZU93bmVyID0gc3RhdGUtPm9sZG93bmVyOworfQorCitzdGF0aWMgdm9pZAorRXhl Y0V2YWxKc29uQ2F0Y2hFcnJvcihFdmFsSnNvblN1YnRyYW5zU3RhdGUgKnN0YXRlKQorewor CUVycm9yRGF0YSAgKmVkYXRhOworCWludAkJCWVjYXRlZ29yeTsKKworCS8qIFNhdmUgZXJy b3IgaW5mbyBpbiBvbGRjb250ZXh0ICovCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKHN0YXRl LT5vbGRjb250ZXh0KTsKKwllZGF0YSA9IENvcHlFcnJvckRhdGEoKTsKKwlGbHVzaEVycm9y U3RhdGUoKTsKKworCS8qIEFib3J0IHRoZSBpbm5lciB0cmFuc2FjdGlvbiAqLworCVJvbGxi YWNrQW5kUmVsZWFzZUN1cnJlbnRTdWJUcmFuc2FjdGlvbigpOworCU1lbW9yeUNvbnRleHRT d2l0Y2hUbyhzdGF0ZS0+b2xkY29udGV4dCk7CisJQ3VycmVudFJlc291cmNlT3duZXIgPSBz dGF0ZS0+b2xkb3duZXI7CisKKwllY2F0ZWdvcnkgPSBFUlJDT0RFX1RPX0NBVEVHT1JZKGVk YXRhLT5zcWxlcnJjb2RlKTsKKworCWlmIChlY2F0ZWdvcnkgIT0gRVJSQ09ERV9EQVRBX0VY Q0VQVElPTiAmJgkvKiBqc29ucGF0aCBhbmQgb3RoZXIgZGF0YQorCQkJCQkJCQkJCQkJICog ZXJyb3JzICovCisJCWVjYXRlZ29yeSAhPSBFUlJDT0RFX0lOVEVHUklUWV9DT05TVFJBSU5U X1ZJT0xBVElPTikJLyogZG9tYWluIGVycm9ycyAqLworCXsKKwkJUmVUaHJvd0Vycm9yKGVk YXRhKTsKKwl9Cit9CisKIC8qCi0gKiBFdmFsdWF0ZSBhIGNvZXJjaW9uIG9mIGEgSlNPTiBp dGVtIHRvIHRoZSB0YXJnZXQgdHlwZS4KKyAqIElmIGBlcnJvcmAgaXMgbm90IE5VTEwgKHdl IG5lZWQgdG8gY2F0Y2ggZXJyb3JzKSwgZXhlY3V0ZSB0aGUKKyAqIHN0YXRlbWVudCBwYXNz ZWQgaW4gdGhlIHRoaXJkIGFyZ3VtZW50IGluc2lkZSBhIHN1YnRyYW5zYWN0aW9uLAorICog b3RoZXJ3aXNlIGRvIGl0IG91dHNpZGUuICBJbiB0aGUgc3VidHJhbnMgY2FzZSBhbiBlcnJv ciBjbGFzc2lmaWVkIGFzCisgKiBiZWluZyBjYXRjaGFibGUgYnkgRXhlY0V2YWxKc29uQ2F0 Y2hFcnJvcigpIHdpbGwgc2V0IGBlcnJvcmAgdG8gdHJ1ZS4KICAqLworI2RlZmluZSBKU0Vf T1BUX1NVQlRSQU5TKGVycm9yLCBqZXhwciwgcmVzLCAuLi4pIFwKKwlkbyB7IFwKKwkJYm9v bCAqZXJyb3JfID0gKGVycm9yKTsgXAorCQlcCisJCWlmICghZXJyb3JfKSBcCisJCXsgXAor CQkJcmVzID0gX19WQV9BUkdTX187IFwKKwkJfSBcCisJCWVsc2UgXAorCQl7IFwKKwkJCUV2 YWxKc29uU3VidHJhbnNTdGF0ZSBzdWJzdGF0ZSA9IHswfTsgXAorCQkJXAorCQkJLyogQ2hl Y2sgY29ycmVjdG5lc3Mgb2YgRXhlY0V2YWxKc29uTmVlZHNTdWJUcmFuc2FjdGlvbigpICov IFwKKwkJCUFzc2VydE1hY3JvKEV4ZWNFdmFsSnNvbk5lZWRzU3ViVHJhbnNhY3Rpb24oamV4 cHIpKTsgXAorCQkJXAorCQkJRXhlY0V2YWxKc29uU3RhcnRTdWJ0cmFucygmc3Vic3RhdGUp OyBcCisJCQlcCisJCQlQR19UUlkoKTsgXAorCQkJeyBcCisJCQkJcmVzID0gX19WQV9BUkdT X187IFwKKwkJCQlFeGVjRXZhbEpzb25FbmRTdWJ0cmFucygmc3Vic3RhdGUpOyBcCisJCQl9 IFwKKwkJCVBHX0NBVENIKCk7IFwKKwkJCXsgXAorCQkJCUV4ZWNFdmFsSnNvbkNhdGNoRXJy b3IoJnN1YnN0YXRlKTsgXAorCQkJCVwKKwkJCQlyZXMgPSAoRGF0dW0pIDA7IFwKKwkJCQkq ZXJyb3JfID0gdHJ1ZTsgXAorCQkJfSBcCisJCQlQR19FTkRfVFJZKCk7IFwKKwkJIH0gXAor CX0gd2hpbGUgKDApCisKKy8qIEV4ZWN1dGUgb25lIG9mIHBvc3NpYmxlIGNvZXJjaW9ucyBv ciByZXBvcnQgYW4gZXJyb3IgaWYgdGhlcmUgaXMgbm8gY2FzdCAqLwogc3RhdGljIERhdHVt Ci1FeGVjRXZhbEpzb25FeHByQ29lcmNpb24oRXhwckV2YWxTdGVwICpvcCwgRXhwckNvbnRl eHQgKmVjb250ZXh0LAotCQkJCQkJIERhdHVtIHJlcywgYm9vbCAqaXNOdWxsLCB2b2lkICpw LCBib29sICplcnJvcikKK0V4ZWNFdmFsSnNvbkV4cHJDb2VyY2lvbihKc29uRXhwclN0YXRl ICpqc2VzdGF0ZSwgRXhwckNvbnRleHQgKmVjb250ZXh0LAorCQkJCQkJIEpzb25Db2VyY2lv blN0YXRlICpjb2VyY2lvbiwKKwkJCQkJCSBEYXR1bSByZXMsIGJvb2wgKnJlc251bGwsIGJv b2wgKmVycm9yKQogewotCUV4cHJTdGF0ZSAgKmVzdGF0ZSA9IHA7Ci0JSnNvbkV4cHJTdGF0 ZSAqanNlc3RhdGU7CisJc3dpdGNoIChjb2VyY2lvbi0+dHlwZSkKKwl7CisJCWNhc2UgSlNP Tl9DT0VSQ0lPTl9OT05FOgorCQkJcmV0dXJuIChEYXR1bSkgcmVzOwogCi0JaWYgKGVzdGF0 ZSkJCQkJCS8qIGNvZXJjZSB1c2luZyBzcGVjaWZpZWQgZXhwcmVzc2lvbiAqLwotCQlyZXR1 cm4gRXhlY0V2YWxFeHByKGVzdGF0ZSwgZWNvbnRleHQsIGlzTnVsbCk7CisJCWNhc2UgSlNP Tl9DT0VSQ0lPTl9WSUFfRVhQUjoKKwkJCWpzZXN0YXRlLT5jb2VyY2lvbl9leHByLnZhbHVl ID0gcmVzOworCQkJanNlc3RhdGUtPmNvZXJjaW9uX2V4cHIuaXNudWxsID0gKnJlc251bGw7 CisJCQlyZXR1cm4gRXhlY0V2YWxFeHByKGNvZXJjaW9uLT5lc3RhdGUsIGVjb250ZXh0LCBy ZXNudWxsKTsKIAotCWpzZXN0YXRlID0gb3AtPmQuanNvbmV4cHIuanNlc3RhdGU7CisJCWNh c2UgSlNPTl9DT0VSQ0lPTl9WSUFfSU86CisJCQl7CisJCQkJLyogU3RyaXAgcXVvdGVzIGZy b20ganNvbmIgc3RyaW5ncyBhbmQgY2FsbCB0eXBpbnB1dCgpICovCisJCQkJY2hhcgkgICAq c3RyOwogCi0JaWYgKGpzZXN0YXRlLT5qc2V4cHItPm9wICE9IEpTT05fRVhJU1RTX09QKQot CXsKLQkJSnNvbkNvZXJjaW9uICpjb2VyY2lvbiA9IGpzZXN0YXRlLT5qc2V4cHItPnJlc3Vs dF9jb2VyY2lvbjsKLQkJSnNvbkV4cHIgICAqamV4cHIgPSBqc2VzdGF0ZS0+anNleHByOwot CQlKc29uYgkgICAqamIgPSAqaXNOdWxsID8gTlVMTCA6IERhdHVtR2V0SnNvbmJQKHJlcyk7 CisJCQkJaWYgKCpyZXNudWxsKQorCQkJCQlzdHIgPSBOVUxMOworCQkJCWVsc2UKKwkJCQkJ c3RyID0gSnNvbmJVbnF1b3RlKERhdHVtR2V0SnNvbmJQKHJlcykpOwogCi0JCWlmICgoY29l cmNpb24gJiYgY29lcmNpb24tPnZpYV9pbykgfHwKLQkJCShqZXhwci0+b21pdF9xdW90ZXMg JiYgISppc051bGwgJiYKLQkJCSBKQl9ST09UX0lTX1NDQUxBUihqYikpKQotCQl7Ci0JCQkv KiBzdHJpcCBxdW90ZXMgYW5kIGNhbGwgdHlwaW5wdXQgZnVuY3Rpb24gKi8KLQkJCWNoYXIJ ICAgKnN0ciA9ICppc051bGwgPyBOVUxMIDogSnNvbmJVbnF1b3RlKGpiKTsKKwkJCQlyZXR1 cm4gSW5wdXRGdW5jdGlvbkNhbGwoJmpzZXN0YXRlLT5pbnB1dC5mdW5jLCBzdHIsCisJCQkJ CQkJCQkJIGpzZXN0YXRlLT5pbnB1dC50eXBpb3BhcmFtLAorCQkJCQkJCQkJCSBqc2VzdGF0 ZS0+anNleHByLT5yZXR1cm5pbmctPnR5cG1vZCk7CisJCQl9CiAKLQkJCXJldHVybiBJbnB1 dEZ1bmN0aW9uQ2FsbCgmanNlc3RhdGUtPmlucHV0LmZ1bmMsIHN0ciwKLQkJCQkJCQkJCSBq c2VzdGF0ZS0+aW5wdXQudHlwaW9wYXJhbSwKLQkJCQkJCQkJCSBqZXhwci0+cmV0dXJuaW5n LT50eXBtb2QpOwotCQl9Ci0JCWVsc2UgaWYgKGNvZXJjaW9uICYmIGNvZXJjaW9uLT52aWFf cG9wdWxhdGUpCisJCWNhc2UgSlNPTl9DT0VSQ0lPTl9WSUFfUE9QVUxBVEU6CiAJCQlyZXR1 cm4ganNvbl9wb3B1bGF0ZV90eXBlKHJlcywgSlNPTkJPSUQsCi0JCQkJCQkJCQkgIGpleHBy LT5yZXR1cm5pbmctPnR5cGlkLAotCQkJCQkJCQkJICBqZXhwci0+cmV0dXJuaW5nLT50eXBt b2QsCisJCQkJCQkJCQkgIGpzZXN0YXRlLT5qc2V4cHItPnJldHVybmluZy0+dHlwaWQsCisJ CQkJCQkJCQkgIGpzZXN0YXRlLT5qc2V4cHItPnJldHVybmluZy0+dHlwbW9kLAogCQkJCQkJ CQkJICAmanNlc3RhdGUtPmNhY2hlLAogCQkJCQkJCQkJICBlY29udGV4dC0+ZWN4dF9wZXJf cXVlcnlfbWVtb3J5LAotCQkJCQkJCQkJICBpc051bGwpOwotCX0KKwkJCQkJCQkJCSAgcmVz bnVsbCk7CiAKLQlpZiAoanNlc3RhdGUtPnJlc3VsdF9leHByKQotCXsKLQkJanNlc3RhdGUt PnJlc19leHByLT52YWx1ZSA9IHJlczsKLQkJanNlc3RhdGUtPnJlc19leHByLT5pc251bGwg PSAqaXNOdWxsOworCQlkZWZhdWx0OgorCQkJQXNzZXJ0KGNvZXJjaW9uLT50eXBlID09IEpT T05fQ09FUkNJT05fRVJST1IpOwogCi0JCXJlcyA9IEV4ZWNFdmFsRXhwcihqc2VzdGF0ZS0+ cmVzdWx0X2V4cHIsIGVjb250ZXh0LCBpc051bGwpOwotCX0KKwkJCS8qIFJlcG9ydCBhbiBl cnJvciBpZiB0aGVyZSBpcyBubyBjYXN0IHRvIHRoZSBvdXRwdXQgdHlwZSAqLworCQkJaWYg KCFlcnJvcikKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX1NR TF9KU09OX0lURU1fQ0FOTk9UX0JFX0NBU1RfVE9fVEFSR0VUX1RZUEUpLAorCQkJCQkgZXJy bXNnKCJTUUwvSlNPTiBpdGVtIGNhbm5vdCBiZSBjYXN0IHRvIHRhcmdldCB0eXBlIikpKTsK IAotCXJldHVybiByZXM7CisJCQkqZXJyb3IgPSB0cnVlOworCQkJKnJlc251bGwgPSB0cnVl OworCQkJcmV0dXJuIChEYXR1bSkgMDsKKwl9CiB9CiAKIC8qCkBAIC00ODQ0LDE5ICs0OTQ3 LDQ4IEBAIEV2YWxKc29uUGF0aFZhcih2b2lkICpjeHQsIGNoYXIgKnZhck5hbWUsIGludCB2 YXJOYW1lTGVuLAogfQogCiAvKgotICogUHJlcGFyZSBTUUwvSlNPTiBpdGVtIGNvZXJjaW9u IHRvIHRoZSBvdXRwdXQgdHlwZS4gUmV0dXJuZWQgYSBkYXR1bSBvZiB0aGUKLSAqIGNvcnJl c3BvbmRpbmcgU1FMIHR5cGUgYW5kIGEgcG9pbnRlciB0byB0aGUgY29lcmNpb24gc3RhdGUu CisgKiBDaGVjayB3aGV0aGVyIHdlIG5lZWQgdG8gb3ZlcnJpZGUgZGVmYXVsdCBjb2VyY2lv biBpbgorICogSlNPTl9RVUVSWShPTUlUIFFVT1RFUykgY2FzZS4KICAqLwotRGF0dW0KLUV4 ZWNQcmVwYXJlSnNvbkl0ZW1Db2VyY2lvbihKc29uYlZhbHVlICppdGVtLAotCQkJCQkJCUpz b25SZXR1cm5pbmcgKnJldHVybmluZywKLQkJCQkJCQlzdHJ1Y3QgSnNvbkNvZXJjaW9uc1N0 YXRlICpjb2VyY2lvbnMsCi0JCQkJCQkJc3RydWN0IEpzb25Db2VyY2lvblN0YXRlICoqcGNv ZXJjaW9uKQorc3RhdGljIGJvb2wKK0V4ZWNKc29uUXVlcnlOZWVkc0lPQ29lcmNpb24oSnNv bkV4cHIgKmpzZXhwciwgRGF0dW0gcmVzLCBib29sIGlzbnVsbCkKIHsKLQlzdHJ1Y3QgSnNv bkNvZXJjaW9uU3RhdGUgKmNvZXJjaW9uOwotCURhdHVtCQlyZXM7CisJaWYgKGpzZXhwci0+ b21pdF9xdW90ZXMgJiYgIWlzbnVsbCkKKwl7CisJCUpzb25iCSAgICpqYiA9IERhdHVtR2V0 SnNvbmJQKHJlcyk7CisKKwkJLyogQ29lcmNlIG5vbi1udWxsIHNjYWxhciBpdGVtcyB2aWEg SS9PIGluIE9NSVQgUVVPVEVTIGNhc2UgKi8KKwkJaWYgKEpCX1JPT1RfSVNfU0NBTEFSKGpi KSkKKwkJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAq IFByZXBhcmUgU1FML0pTT04gaXRlbSBjb2VyY2lvbiB0byB0aGUgSlNPTl9WQUxVRSBvdXRw dXQgdHlwZS4KKyAqIFJldHVybmVkIGEgY29lcmNpb24gc3RhdHVzLCBhIGRhdHVtIG9mIHRo ZSBjb3JyZXNwb25kaW5nIFNRTCB0eXBlCisgKiBhbmQgYSBwb2ludGVyIHRvIHNlbGVjdGVk IGNvZXJjaW9uIHN0YXRlLgorICovCitzdGF0aWMgRGF0dW0KK0V4ZWNQcmVwYXJlSnNvblZh bHVlQ29lcmNpb24oSnNvbkV4cHJTdGF0ZSAqanNlc3RhdGUsIEpzb25iVmFsdWUgKml0ZW0s CisJCQkJCQkJIEpzb25Db2VyY2lvblN0YXRlICoqY29lcmNpb24sIGJvb2wgKnJlc251bGwp Cit7CisJc3RydWN0IEpzb25JdGVtc0NvZXJjaW9uU3RhdGVzICpjb2VyY2lvbnMgPSBqc2Vz dGF0ZS0+aXRlbV9jb2VyY2lvbnM7CiAJSnNvbmJWYWx1ZQlidWY7CiAKKwkqcmVzbnVsbCA9 IGZhbHNlOworCisJaWYgKCFjb2VyY2lvbnMpCisJeworCQkvKgorCQkgKiBTcGVjaWFsIGNh c2UgZm9yIGpzb25bYl0gb3V0cHV0IHR5cGVzLiAgU2ltcGx5IHVzZQorCQkgKiBkZWZhdWx0 IGNvZXJjaW9uIGZyb20ganNvbmIgdG8gdGhlIG91dHB1dCB0eXBlLgorCQkgKi8KKwkJcmV0 dXJuIEpzb25iUEdldERhdHVtKEpzb25iVmFsdWVUb0pzb25iKGl0ZW0pKTsKKwl9CisKKwkv KiBVc2UgY29lcmNpb24gZnJvbSBTUUwvSlNPTiBpdGVtIHR5cGUgdG8gdGhlIG91dHB1dCB0 eXBlICovCiAJaWYgKGl0ZW0tPnR5cGUgPT0gamJ2QmluYXJ5ICYmCiAJCUpzb25Db250YWlu ZXJJc1NjYWxhcihpdGVtLT52YWwuYmluYXJ5LmRhdGEpKQogCXsKQEAgLTQ4NzEsMTc0ICs1 MDAzLDk2IEBAIEV4ZWNQcmVwYXJlSnNvbkl0ZW1Db2VyY2lvbihKc29uYlZhbHVlICppdGVt LAogCXN3aXRjaCAoaXRlbS0+dHlwZSkKIAl7CiAJCWNhc2UgamJ2TnVsbDoKLQkJCWNvZXJj aW9uID0gJmNvZXJjaW9ucy0+bnVsbDsKLQkJCXJlcyA9IChEYXR1bSkgMDsKLQkJCWJyZWFr OworCQkJQXNzZXJ0KDApOyAvKiBtdXN0IGJlIGhhbmRsZWQgYnkgdGhlIGNhbGxlciAqLwor CQkJKmNvZXJjaW9uID0gJmNvZXJjaW9ucy0+bnVsbDsKKwkJCSpyZXNudWxsID0gdHJ1ZTsK KwkJCXJldHVybiAoRGF0dW0pIDA7CiAKIAkJY2FzZSBqYnZTdHJpbmc6Ci0JCQljb2VyY2lv biA9ICZjb2VyY2lvbnMtPnN0cmluZzsKLQkJCXJlcyA9IFBvaW50ZXJHZXREYXR1bShjc3Ry aW5nX3RvX3RleHRfd2l0aF9sZW4oaXRlbS0+dmFsLnN0cmluZy52YWwsCi0JCQkJCQkJCQkJ CQkJCSAgIGl0ZW0tPnZhbC5zdHJpbmcubGVuKSk7Ci0JCQlicmVhazsKKwkJCSpjb2VyY2lv biA9ICZjb2VyY2lvbnMtPnN0cmluZzsKKwkJCXJldHVybiBQb2ludGVyR2V0RGF0dW0oY3N0 cmluZ190b190ZXh0X3dpdGhfbGVuKGl0ZW0tPnZhbC5zdHJpbmcudmFsLAorCQkJCQkJCQkJ CQkJCQkJaXRlbS0+dmFsLnN0cmluZy5sZW4pKTsKIAogCQljYXNlIGpidk51bWVyaWM6Ci0J CQljb2VyY2lvbiA9ICZjb2VyY2lvbnMtPm51bWVyaWM7Ci0JCQlyZXMgPSBOdW1lcmljR2V0 RGF0dW0oaXRlbS0+dmFsLm51bWVyaWMpOwotCQkJYnJlYWs7CisJCQkqY29lcmNpb24gPSAm Y29lcmNpb25zLT5udW1lcmljOworCQkJcmV0dXJuIE51bWVyaWNHZXREYXR1bShpdGVtLT52 YWwubnVtZXJpYyk7CiAKIAkJY2FzZSBqYnZCb29sOgotCQkJY29lcmNpb24gPSAmY29lcmNp b25zLT5ib29sZWFuOwotCQkJcmVzID0gQm9vbEdldERhdHVtKGl0ZW0tPnZhbC5ib29sZWFu KTsKLQkJCWJyZWFrOworCQkJKmNvZXJjaW9uID0gJmNvZXJjaW9ucy0+Ym9vbGVhbjsKKwkJ CXJldHVybiBCb29sR2V0RGF0dW0oaXRlbS0+dmFsLmJvb2xlYW4pOwogCiAJCWNhc2UgamJ2 RGF0ZXRpbWU6Ci0JCQlyZXMgPSBpdGVtLT52YWwuZGF0ZXRpbWUudmFsdWU7CiAJCQlzd2l0 Y2ggKGl0ZW0tPnZhbC5kYXRldGltZS50eXBpZCkKIAkJCXsKIAkJCQljYXNlIERBVEVPSUQ6 Ci0JCQkJCWNvZXJjaW9uID0gJmNvZXJjaW9ucy0+ZGF0ZTsKKwkJCQkJKmNvZXJjaW9uID0g JmNvZXJjaW9ucy0+ZGF0ZTsKIAkJCQkJYnJlYWs7CiAJCQkJY2FzZSBUSU1FT0lEOgotCQkJ CQljb2VyY2lvbiA9ICZjb2VyY2lvbnMtPnRpbWU7CisJCQkJCSpjb2VyY2lvbiA9ICZjb2Vy Y2lvbnMtPnRpbWU7CiAJCQkJCWJyZWFrOwogCQkJCWNhc2UgVElNRVRaT0lEOgotCQkJCQlj b2VyY2lvbiA9ICZjb2VyY2lvbnMtPnRpbWV0ejsKKwkJCQkJKmNvZXJjaW9uID0gJmNvZXJj aW9ucy0+dGltZXR6OwogCQkJCQlicmVhazsKIAkJCQljYXNlIFRJTUVTVEFNUE9JRDoKLQkJ CQkJY29lcmNpb24gPSAmY29lcmNpb25zLT50aW1lc3RhbXA7CisJCQkJCSpjb2VyY2lvbiA9 ICZjb2VyY2lvbnMtPnRpbWVzdGFtcDsKIAkJCQkJYnJlYWs7CiAJCQkJY2FzZSBUSU1FU1RB TVBUWk9JRDoKLQkJCQkJY29lcmNpb24gPSAmY29lcmNpb25zLT50aW1lc3RhbXB0ejsKKwkJ CQkJKmNvZXJjaW9uID0gJmNvZXJjaW9ucy0+dGltZXN0YW1wdHo7CiAJCQkJCWJyZWFrOwog CQkJCWRlZmF1bHQ6CiAJCQkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIGpzb25iIGRhdGV0 aW1lIHR5cGUgb2lkICV1IiwKIAkJCQkJCSBpdGVtLT52YWwuZGF0ZXRpbWUudHlwaWQpOwog CQkJCQlyZXR1cm4gKERhdHVtKSAwOwogCQkJfQotCQkJYnJlYWs7CisKKwkJCXJldHVybiBp dGVtLT52YWwuZGF0ZXRpbWUudmFsdWU7CiAKIAkJY2FzZSBqYnZBcnJheToKIAkJY2FzZSBq YnZPYmplY3Q6CiAJCWNhc2UgamJ2QmluYXJ5OgotCQkJY29lcmNpb24gPSAmY29lcmNpb25z LT5jb21wb3NpdGU7Ci0JCQlyZXMgPSBKc29uYlBHZXREYXR1bShKc29uYlZhbHVlVG9Kc29u YihpdGVtKSk7Ci0JCQlicmVhazsKKwkJCUFzc2VydCgwKTsJLyogbm9uLXNjYWxhcnMgbXVz dCBiZSByZWplY3RlZCBieSBKc29uUGF0aFZhbHVlKCkgKi8KKwkJCSpjb2VyY2lvbiA9ICZj b2VyY2lvbnMtPmNvbXBvc2l0ZTsKKwkJCXJldHVybiBKc29uYlBHZXREYXR1bShKc29uYlZh bHVlVG9Kc29uYihpdGVtKSk7CiAKIAkJZGVmYXVsdDoKIAkJCWVsb2coRVJST1IsICJ1bmV4 cGVjdGVkIGpzb25iIHZhbHVlIHR5cGUgJWQiLCBpdGVtLT50eXBlKTsKIAkJCXJldHVybiAo RGF0dW0pIDA7CiAJfQotCi0JKnBjb2VyY2lvbiA9IGNvZXJjaW9uOwotCi0JcmV0dXJuIHJl czsKIH0KIAotdHlwZWRlZiBEYXR1bSAoKkpzb25GdW5jKSAoRXhwckV2YWxTdGVwICpvcCwg RXhwckNvbnRleHQgKmVjb250ZXh0LAotCQkJCQkJICAgRGF0dW0gaXRlbSwgYm9vbCAqcmVz bnVsbCwgdm9pZCAqcCwgYm9vbCAqZXJyb3IpOwotCiBzdGF0aWMgRGF0dW0KLUV4ZWNFdmFs SnNvbkV4cHJTdWJ0cmFucyhKc29uRnVuYyBmdW5jLCBFeHByRXZhbFN0ZXAgKm9wLAotCQkJ CQkJIEV4cHJDb250ZXh0ICplY29udGV4dCwKLQkJCQkJCSBEYXR1bSByZXMsIGJvb2wgKnJl c251bGwsCi0JCQkJCQkgdm9pZCAqcCwgYm9vbCAqZXJyb3IsIGJvb2wgc3VidHJhbnMpCitF eGVjRXZhbEpzb25FeHBySW50ZXJuYWwoSnNvbkV4cHJTdGF0ZSAqanNlc3RhdGUsIEV4cHJD b250ZXh0ICplY29udGV4dCwKKwkJCQkJCSBKc29uUGF0aCAqcGF0aCwgRGF0dW0gaXRlbSwg Ym9vbCAqcmVzbnVsbCwKKwkJCQkJCSBib29sICplcnJvcikKIHsKLQlNZW1vcnlDb250ZXh0 IG9sZGNvbnRleHQ7Ci0JUmVzb3VyY2VPd25lciBvbGRvd25lcjsKLQotCWlmICghc3VidHJh bnMpCi0JCS8qIE5vIG5lZWQgdG8gdXNlIHN1YnRyYW5zYWN0aW9ucy4gKi8KLQkJcmV0dXJu IGZ1bmMob3AsIGVjb250ZXh0LCByZXMsIHJlc251bGwsIHAsIGVycm9yKTsKLQotCS8qCi0J ICogV2Ugc2hvdWxkIGNhdGNoIGV4Y2VwdGlvbnMgb2YgY2F0ZWdvcnkgRVJSQ09ERV9EQVRB X0VYQ0VQVElPTiBhbmQKLQkgKiBleGVjdXRlIHRoZSBjb3JyZXNwb25kaW5nIE9OIEVSUk9S IGJlaGF2aW9yIHRoZW4uCi0JICovCi0Jb2xkY29udGV4dCA9IEN1cnJlbnRNZW1vcnlDb250 ZXh0OwotCW9sZG93bmVyID0gQ3VycmVudFJlc291cmNlT3duZXI7Ci0KLQlBc3NlcnQoZXJy b3IpOwotCi0JQmVnaW5JbnRlcm5hbFN1YlRyYW5zYWN0aW9uKE5VTEwpOwotCS8qIFdhbnQg dG8gZXhlY3V0ZSBleHByZXNzaW9ucyBpbnNpZGUgZnVuY3Rpb24ncyBtZW1vcnkgY29udGV4 dCAqLwotCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKLQotCVBHX1RSWSgp OwotCXsKLQkJcmVzID0gZnVuYyhvcCwgZWNvbnRleHQsIHJlcywgcmVzbnVsbCwgcCwgZXJy b3IpOwotCi0JCS8qIENvbW1pdCB0aGUgaW5uZXIgdHJhbnNhY3Rpb24sIHJldHVybiB0byBv dXRlciB4YWN0IGNvbnRleHQgKi8KLQkJUmVsZWFzZUN1cnJlbnRTdWJUcmFuc2FjdGlvbigp OwotCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7Ci0JCUN1cnJlbnRSZXNv dXJjZU93bmVyID0gb2xkb3duZXI7Ci0JfQotCVBHX0NBVENIKCk7Ci0JewotCQlFcnJvckRh dGEgICplZGF0YTsKLQkJaW50CQkJZWNhdGVnb3J5OwotCi0JCS8qIFNhdmUgZXJyb3IgaW5m byBpbiBvbGRjb250ZXh0ICovCi0JCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0 KTsKLQkJZWRhdGEgPSBDb3B5RXJyb3JEYXRhKCk7Ci0JCUZsdXNoRXJyb3JTdGF0ZSgpOwot Ci0JCS8qIEFib3J0IHRoZSBpbm5lciB0cmFuc2FjdGlvbiAqLwotCQlSb2xsYmFja0FuZFJl bGVhc2VDdXJyZW50U3ViVHJhbnNhY3Rpb24oKTsKLQkJTWVtb3J5Q29udGV4dFN3aXRjaFRv KG9sZGNvbnRleHQpOwotCQlDdXJyZW50UmVzb3VyY2VPd25lciA9IG9sZG93bmVyOwotCi0J CWVjYXRlZ29yeSA9IEVSUkNPREVfVE9fQ0FURUdPUlkoZWRhdGEtPnNxbGVycmNvZGUpOwot Ci0JCWlmIChlY2F0ZWdvcnkgIT0gRVJSQ09ERV9EQVRBX0VYQ0VQVElPTiAmJgkvKiBqc29u cGF0aCBhbmQgb3RoZXIgZGF0YQotCQkJCQkJCQkJCQkJCSAqIGVycm9ycyAqLwotCQkJZWNh dGVnb3J5ICE9IEVSUkNPREVfSU5URUdSSVRZX0NPTlNUUkFJTlRfVklPTEFUSU9OKQkvKiBk b21haW4gZXJyb3JzICovCi0JCQlSZVRocm93RXJyb3IoZWRhdGEpOwotCi0JCXJlcyA9IChE YXR1bSkgMDsKLQkJKmVycm9yID0gdHJ1ZTsKLQl9Ci0JUEdfRU5EX1RSWSgpOwotCi0JcmV0 dXJuIHJlczsKLX0KLQotCi10eXBlZGVmIHN0cnVjdAotewotCUpzb25QYXRoICAgKnBhdGg7 Ci0JYm9vbAkgICAqZXJyb3I7Ci0JYm9vbAkJY29lcmNpb25JblN1YnRyYW5zOwotfSBFeGVj RXZhbEpzb25FeHByQ29udGV4dDsKLQotc3RhdGljIERhdHVtCi1FeGVjRXZhbEpzb25FeHBy KEV4cHJFdmFsU3RlcCAqb3AsIEV4cHJDb250ZXh0ICplY29udGV4dCwKLQkJCQkgRGF0dW0g aXRlbSwgYm9vbCAqcmVzbnVsbCwgdm9pZCAqcGN4dCwKLQkJCQkgYm9vbCAqZXJyb3IpCi17 Ci0JRXhlY0V2YWxKc29uRXhwckNvbnRleHQgKmN4dCA9IHBjeHQ7Ci0JSnNvblBhdGggICAq cGF0aCA9IGN4dC0+cGF0aDsKLQlKc29uRXhwclN0YXRlICpqc2VzdGF0ZSA9IG9wLT5kLmpz b25leHByLmpzZXN0YXRlOwogCUpzb25FeHByICAgKmpleHByID0ganNlc3RhdGUtPmpzZXhw cjsKLQlFeHByU3RhdGUgICplc3RhdGUgPSBOVUxMOworCUpzb25Db2VyY2lvblN0YXRlICpj b2VyY2lvbiA9ICZqc2VzdGF0ZS0+cmVzdWx0X2NvZXJjaW9uOwogCWJvb2wJCWVtcHR5ID0g ZmFsc2U7CiAJRGF0dW0JCXJlcyA9IChEYXR1bSkgMDsKIAorCSpyZXNudWxsID0gdHJ1ZTsK KwogCXN3aXRjaCAoamV4cHItPm9wKQogCXsKIAkJY2FzZSBKU09OX1FVRVJZX09QOgogCQkJ cmVzID0gSnNvblBhdGhRdWVyeShpdGVtLCBwYXRoLCBqZXhwci0+d3JhcHBlciwgJmVtcHR5 LCBlcnJvciwKIAkJCQkJCQkJanNlc3RhdGUtPmFyZ3MpOwogCQkJaWYgKGVycm9yICYmICpl cnJvcikKLQkJCXsKLQkJCQkqcmVzbnVsbCA9IHRydWU7CiAJCQkJcmV0dXJuIChEYXR1bSkg MDsKLQkJCX0KKworCQkJaWYgKGVtcHR5KQorCQkJCWJyZWFrOworCiAJCQkqcmVzbnVsbCA9 ICFEYXR1bUdldFBvaW50ZXIocmVzKTsKKworCQkJLyogT3ZlcnJpZGUgZGVmYXVsdCBjb2Vy Y2lvbiBpbiBPTUlUIFFVT1RFUyBjYXNlICovCisJCQlpZiAoRXhlY0pzb25RdWVyeU5lZWRz SU9Db2VyY2lvbihqZXhwciwgcmVzLCAqcmVzbnVsbCkpCisJCQkJY29lcmNpb24gPSAmanNl c3RhdGUtPmlvX2NvZXJjaW9uOworCiAJCQlicmVhazsKIAogCQljYXNlIEpTT05fVkFMVUVf T1A6CiAJCQl7Ci0JCQkJc3RydWN0IEpzb25Db2VyY2lvblN0YXRlICpqY3N0YXRlOwogCQkJ CUpzb25iVmFsdWUgKmpidiA9IEpzb25QYXRoVmFsdWUoaXRlbSwgcGF0aCwgJmVtcHR5LCBl cnJvciwKIAkJCQkJCQkJCQkJCWpzZXN0YXRlLT5hcmdzKTsKIApAQCAtNTA0OSw0OSArNTEw MywxMCBAQCBFeGVjRXZhbEpzb25FeHByKEV4cHJFdmFsU3RlcCAqb3AsIEV4cHJDb250ZXh0 ICplY29udGV4dCwKIAkJCQkJYnJlYWs7CiAKIAkJCQlBc3NlcnQoIWVtcHR5KTsKKwkJCQlB c3NlcnQoamJ2LT50eXBlICE9IGpidk51bGwpOwogCi0JCQkJKnJlc251bGwgPSBmYWxzZTsK LQotCQkJCS8qIGNvZXJjZSBzY2FsYXIgaXRlbSB0byB0aGUgb3V0cHV0IHR5cGUgKi8KLQkJ CQlpZiAoamV4cHItPnJldHVybmluZy0+dHlwaWQgPT0gSlNPTk9JRCB8fAotCQkJCQlqZXhw ci0+cmV0dXJuaW5nLT50eXBpZCA9PSBKU09OQk9JRCkKLQkJCQl7Ci0JCQkJCS8qIFVzZSBy ZXN1bHQgY29lcmNpb24gZnJvbSBqc29uW2JdIHRvIHRoZSBvdXRwdXQgdHlwZSAqLwotCQkJ CQlyZXMgPSBKc29uYlBHZXREYXR1bShKc29uYlZhbHVlVG9Kc29uYihqYnYpKTsKLQkJCQkJ YnJlYWs7Ci0JCQkJfQotCi0JCQkJLyogVXNlIGNvZXJjaW9uIGZyb20gU1FML0pTT04gaXRl bSB0eXBlIHRvIHRoZSBvdXRwdXQgdHlwZSAqLwotCQkJCXJlcyA9IEV4ZWNQcmVwYXJlSnNv bkl0ZW1Db2VyY2lvbihqYnYsCi0JCQkJCQkJCQkJCQkgIGpzZXN0YXRlLT5qc2V4cHItPnJl dHVybmluZywKLQkJCQkJCQkJCQkJCSAgJmpzZXN0YXRlLT5jb2VyY2lvbnMsCi0JCQkJCQkJ CQkJCQkgICZqY3N0YXRlKTsKLQotCQkJCWlmIChqY3N0YXRlLT5jb2VyY2lvbiAmJgotCQkJ CQkoamNzdGF0ZS0+Y29lcmNpb24tPnZpYV9pbyB8fAotCQkJCQkgamNzdGF0ZS0+Y29lcmNp b24tPnZpYV9wb3B1bGF0ZSkpCi0JCQkJewotCQkJCQlpZiAoZXJyb3IpCi0JCQkJCXsKLQkJ CQkJCSplcnJvciA9IHRydWU7Ci0JCQkJCQlyZXR1cm4gKERhdHVtKSAwOwotCQkJCQl9Ci0K LQkJCQkJLyoKLQkJCQkJICogQ29lcmNpb24gdmlhIEkvTyBtZWFucyBoZXJlIHRoYXQgdGhl IGNhc3QgdG8gdGhlIHRhcmdldAotCQkJCQkgKiB0eXBlIHNpbXBseSBkb2VzIG5vdCBleGlz dC4KLQkJCQkJICovCi0JCQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCQkJKGVycmNvZGUoRVJS Q09ERV9TUUxfSlNPTl9JVEVNX0NBTk5PVF9CRV9DQVNUX1RPX1RBUkdFVF9UWVBFKSwKLQkJ CQkJCQkgZXJybXNnKCJTUUwvSlNPTiBpdGVtIGNhbm5vdCBiZSBjYXN0IHRvIHRhcmdldCB0 eXBlIikpKTsKLQkJCQl9Ci0JCQkJZWxzZSBpZiAoIWpjc3RhdGUtPmVzdGF0ZSkKLQkJCQkJ cmV0dXJuIHJlczsgLyogbm8gY29lcmNpb24gKi8KLQotCQkJCS8qIGNvZXJjZSB1c2luZyBz cGVjaWZpYyBleHByZXNzaW9uICovCi0JCQkJZXN0YXRlID0gamNzdGF0ZS0+ZXN0YXRlOwot CQkJCWpzZXN0YXRlLT5jb2VyY2lvbl9leHByLT52YWx1ZSA9IHJlczsKLQkJCQlqc2VzdGF0 ZS0+Y29lcmNpb25fZXhwci0+aXNudWxsID0gKnJlc251bGw7CisJCQkJcmVzID0gRXhlY1By ZXBhcmVKc29uVmFsdWVDb2VyY2lvbihqc2VzdGF0ZSwgamJ2LAorCQkJCQkJCQkJCQkJICAg JmNvZXJjaW9uLCByZXNudWxsKTsKIAkJCQlicmVhazsKIAkJCX0KIApAQCAtNTEwMywyMSAr NTExOCw5IEBAIEV4ZWNFdmFsSnNvbkV4cHIoRXhwckV2YWxTdGVwICpvcCwgRXhwckNvbnRl eHQgKmVjb250ZXh0LAogCiAJCQkJKnJlc251bGwgPSBlcnJvciAmJiAqZXJyb3I7CiAJCQkJ cmVzID0gQm9vbEdldERhdHVtKGV4aXN0cyk7Ci0KLQkJCQlpZiAoIWpzZXN0YXRlLT5yZXN1 bHRfZXhwcikKLQkJCQkJcmV0dXJuIHJlczsKLQotCQkJCS8qIGNvZXJjZSB1c2luZyByZXN1 bHQgZXhwcmVzc2lvbiAqLwotCQkJCWVzdGF0ZSA9IGpzZXN0YXRlLT5yZXN1bHRfZXhwcjsK LQkJCQlqc2VzdGF0ZS0+cmVzX2V4cHItPnZhbHVlID0gcmVzOwotCQkJCWpzZXN0YXRlLT5y ZXNfZXhwci0+aXNudWxsID0gKnJlc251bGw7Ci0JCQkJYnJlYWs7CisJCQkJYnJlYWs7CS8q IGFsd2F5cyB1c2UgcmVzdWx0IGNvZXJjaW9uICovCiAJCQl9CiAKLQkJY2FzZSBKU09OX1RB QkxFX09QOgotCQkJKnJlc251bGwgPSBmYWxzZTsKLQkJCXJldHVybiBpdGVtOwotCiAJCWRl ZmF1bHQ6CiAJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIFNRTC9KU09OIGV4cHJlc3Np b24gb3AgJWQiLCBqZXhwci0+b3ApOwogCQkJcmV0dXJuIChEYXR1bSkgMDsKQEAgLTUxNDEs NzMgKzUxNDQsMTE1IEBAIEV4ZWNFdmFsSnNvbkV4cHIoRXhwckV2YWxTdGVwICpvcCwgRXhw ckNvbnRleHQgKmVjb250ZXh0LAogCQl9CiAKIAkJaWYgKGpleHByLT5vbl9lbXB0eS0+YnR5 cGUgPT0gSlNPTl9CRUhBVklPUl9ERUZBVUxUKQotCisJCXsKIAkJCS8qCi0JCQkgKiBFeGVj dXRlIERFRkFVTFQgZXhwcmVzc2lvbiBhcyBhIGNvZXJjaW9uIGV4cHJlc3Npb24sIGJlY2F1 c2UKLQkJCSAqIGl0cyByZXN1bHQgaXMgYWxyZWFkeSBjb2VyY2VkIHRvIHRoZSB0YXJnZXQg dHlwZS4KKwkJCSAqIEV4ZWN1dGUgREVGQVVMVCBleHByZXNzaW9uIGluIGEgc3VidHJhbnNh dGlvbiBpZiBuZWVkZWQuCisJCQkgKiBDb2VyY2lvbiBpcyBub3QgbmVlZGVkIGhlcmUsIGJl Y2F1c2UgZXhwcmVzc2lvbiBpcworCQkJICogYWxyZWFkeSBjb2VyY2VkIHRvIHRoZSB0YXJn ZXQgdHlwZSBieSB0aGUgcGFyc2VyLgogCQkJICovCi0JCQllc3RhdGUgPSBqc2VzdGF0ZS0+ ZGVmYXVsdF9vbl9lbXB0eTsKLQkJZWxzZQotCQkJLyogRXhlY3V0ZSBPTiBFTVBUWSBiZWhh dmlvciAqLwotCQkJcmVzID0gRXhlY0V2YWxKc29uQmVoYXZpb3IoZWNvbnRleHQsIGpleHBy LT5vbl9lbXB0eSwKLQkJCQkJCQkJCSAgIGpzZXN0YXRlLT5kZWZhdWx0X29uX2VtcHR5LAot CQkJCQkJCQkJICAgcmVzbnVsbCk7CisJCQlKU0VfT1BUX1NVQlRSQU5TKGpzZXN0YXRlLT5k ZWZhdWx0X29uX2VtcHR5X2Nhbl90aHJvdyA/IGVycm9yIDogTlVMTCwKKwkJCQkJCQkgamV4 cHIsIHJlcywKKwkJCQkJCQkgRXhlY0V2YWxFeHByKGpzZXN0YXRlLT5kZWZhdWx0X29uX2Vt cHR5LAorCQkJCQkJCQkJCSAgZWNvbnRleHQsIHJlc251bGwpKTsKKwkJCXJldHVybiByZXM7 CisJCX0KKworCQkvKiBFeGVjdXRlIE9OIEVNUFRZIGJlaGF2aW9yLCBjb2VyY2lvbiBpcyBk ZWZhdWx0ICovCisJCXJlcyA9IEV4ZWNFdmFsSnNvbkJlaGF2aW9yKGVjb250ZXh0LCBqZXhw ci0+b25fZW1wdHksCisJCQkJCQkJCSAgIGpzZXN0YXRlLT5kZWZhdWx0X29uX2VtcHR5LAor CQkJCQkJCQkgICByZXNudWxsKTsKIAl9CiAKLQlyZXR1cm4gRXhlY0V2YWxKc29uRXhwclN1 YnRyYW5zKEV4ZWNFdmFsSnNvbkV4cHJDb2VyY2lvbiwgb3AsIGVjb250ZXh0LAotCQkJCQkJ CQkJcmVzLCByZXNudWxsLCBlc3RhdGUsIGVycm9yLAotCQkJCQkJCQkJY3h0LT5jb2VyY2lv bkluU3VidHJhbnMpOworCS8qCisJICogRXhlY3V0ZSByZXN1bHRpbmcgY29lcmNpb24gaW4g YSBzdWJ0cmFuc2FjdGlvbiBpZiBgZXJyb3JgICE9IE5VTEwuCisJICogSW4gY2FzZSBvZiBj YXN0IGVycm9ycywgdGhlcmUgaXMgbm8gbmVlZCB0byB1c2Ugc3VidHJhbnNhY3Rpb24uCisJ ICovCisJaWYgKGNvZXJjaW9uLT50eXBlICE9IEpTT05fQ09FUkNJT05fTk9ORSkKKwl7CisJ CS8qIFNraXAgY29lcmNpb24gb2YgTlVMTHMgZm9yIG5vbi1kb21haW4gdHlwZXMgKi8KKwkJ aWYgKCpyZXNudWxsICYmIGpzZXN0YXRlLT5za2lwX251bGxfY29lcmNpb24pCisJCQlyZXR1 cm4gKERhdHVtKSAwOworCisJCUpTRV9PUFRfU1VCVFJBTlMoY29lcmNpb24tPnR5cGUgIT0g SlNPTl9DT0VSQ0lPTl9FUlJPUiA/IGVycm9yIDogTlVMTCwKKwkJCQkJCSBqZXhwciwgcmVz LAorCQkJCQkJIEV4ZWNFdmFsSnNvbkV4cHJDb2VyY2lvbihqc2VzdGF0ZSwgZWNvbnRleHQs CisJCQkJCQkJCQkJCQkgIGNvZXJjaW9uLCByZXMsCisJCQkJCQkJCQkJCQkgIHJlc251bGws IGVycm9yKSk7CisJfQorCisJcmV0dXJuIHJlczsKIH0KIAogYm9vbAotRXhlY0V2YWxKc29u TmVlZHNTdWJUcmFuc2FjdGlvbihKc29uRXhwciAqanNleHByLAotCQkJCQkJCQlzdHJ1Y3Qg SnNvbkNvZXJjaW9uc1N0YXRlICpjb2VyY2lvbnMpCitFeGVjRXZhbEV4cHJDYW5UaHJvd0Vy cm9ycyhOb2RlICpleHByKQogewotCWlmIChqc2V4cHItPm9uX2Vycm9yLT5idHlwZSA9PSBK U09OX0JFSEFWSU9SX0VSUk9SKQorCWlmICghZXhwcikKIAkJcmV0dXJuIGZhbHNlOwogCi0J aWYgKGpzZXhwci0+b3AgPT0gSlNPTl9FWElTVFNfT1AgJiYgIWpzZXhwci0+cmVzdWx0X2Nv ZXJjaW9uKQorCWlmIChJc0EoZXhwciwgQ29uc3QpKQogCQlyZXR1cm4gZmFsc2U7CiAKLQlp ZiAoIWNvZXJjaW9ucykKLQkJcmV0dXJuIHRydWU7CisJLyogVE9ETyBjb25zaWRlciBtb3Jl IGNhc2VzICovCisJcmV0dXJuIHRydWU7Cit9CiAKLQlyZXR1cm4gZmFsc2U7CisvKiBDYW4g U1FML0pTT04gZXhwcmVzc2lvbiBzdGFydCBzdWJ0cmFuc2FjdGlvbnMgZm9yIGVycm9yIGhh bmRsaW5nPyAqLworYm9vbAorRXhlY0V2YWxKc29uTmVlZHNTdWJUcmFuc2FjdGlvbihKc29u RXhwciAqanNleHByKQoreworCWlmIChqc2V4cHItPm9uX2Vycm9yLT5idHlwZSA9PSBKU09O X0JFSEFWSU9SX0VSUk9SKQorCQlyZXR1cm4gZmFsc2U7CQkvKiBubyBlcnJvciBoYW5kbGlu ZyBuZWVkZWQgKi8KKworCWlmIChqc2V4cHItPnJlc3VsdF9jb2VyY2lvbiAmJgorCQlqc2V4 cHItPnJlc3VsdF9jb2VyY2lvbi0+Y3R5cGUgIT0gSlNPTl9DT0VSQ0lPTl9OT05FKQorCQly ZXR1cm4gdHJ1ZTsJCS8qIG1heSBleGVjdXRlIG5vbi1lbXB0eSByZXN1bHQgY29lcmNpb24g Ki8KKworCWlmIChqc2V4cHItPm9uX2VtcHR5ICYmCisJCWpzZXhwci0+b25fZW1wdHktPmJ0 eXBlID09IEpTT05fQkVIQVZJT1JfREVGQVVMVCAmJgorCQlFeGVjRXZhbEV4cHJDYW5UaHJv d0Vycm9ycyhqc2V4cHItPm9uX2VtcHR5LT5kZWZhdWx0X2V4cHIpKQorCQlyZXR1cm4gdHJ1 ZTsJCS8qIG1heSBleGVjdXRlIGFyYml0cmFyeSB1bnNhZmUgZXhwcmVzc2lvbiAqLworCisJ aWYgKGpzZXhwci0+Y29lcmNpb25zKQorCQlyZXR1cm4gdHJ1ZTsJCS8qIEpTT05fVkFMVUUg bWF5IGV4ZWN1dGUgaXRlbSBjb2VyY2lvbnMgKi8KKworCWlmIChqc2V4cHItPm9taXRfcXVv dGVzKQorCQlyZXR1cm4gdHJ1ZTsJCS8qIEpTT05fUVVFUlkgbWF5IGV4ZWN1dGUgY29lcmNp b24gdmlhIEkvTyAqLworCisJcmV0dXJuIGZhbHNlOwkJCS8qIHN1YnRyYW5zYWN0aW9zIHNo b3VsZCBub3QgYmUgdXNlZCAqLwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKgkJRXhlY0V2YWxK c29uCisgKgkJRXhlY0V2YWxKc29uRXhwcgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiB2b2lkCi1F eGVjRXZhbEpzb24oRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCwgRXhwckNv bnRleHQgKmVjb250ZXh0KQorRXhlY0V2YWxKc29uRXhwcihFeHByU3RhdGUgKnN0YXRlLCBF eHByRXZhbFN0ZXAgKm9wLCBFeHByQ29udGV4dCAqZWNvbnRleHQpCiB7Ci0JRXhlY0V2YWxK c29uRXhwckNvbnRleHQgY3h0OwogCUpzb25FeHByU3RhdGUgKmpzZXN0YXRlID0gb3AtPmQu anNvbmV4cHIuanNlc3RhdGU7CiAJSnNvbkV4cHIgICAqamV4cHIgPSBqc2VzdGF0ZS0+anNl eHByOwogCURhdHVtCQlpdGVtOwotCURhdHVtCQlyZXMgPSAoRGF0dW0pIDA7CisJRGF0dW0J CXJlczsKIAlKc29uUGF0aCAgICpwYXRoOwogCUxpc3RDZWxsICAgKmxjOwogCWJvb2wJCWVy cm9yID0gZmFsc2U7Ci0JYm9vbAkJbmVlZFN1YnRyYW5zOwogCWJvb2wJCXRocm93RXJyb3Jz ID0gamV4cHItPm9uX2Vycm9yLT5idHlwZSA9PSBKU09OX0JFSEFWSU9SX0VSUk9SOwogCi0J Km9wLT5yZXNudWxsID0gdHJ1ZTsJCS8qIHVudGlsIHdlIGdldCBhIHJlc3VsdCAqLwotCSpv cC0+cmVzdmFsdWUgPSAoRGF0dW0pIDA7Ci0KLQlpZiAoanNlc3RhdGUtPmZvcm1hdHRlZF9l eHByLT5pc251bGwgfHwganNlc3RhdGUtPnBhdGhzcGVjLT5pc251bGwpCisJaWYgKGpzZXN0 YXRlLT5mb3JtYXR0ZWRfZXhwci5pc251bGwgfHwganNlc3RhdGUtPnBhdGhzcGVjLmlzbnVs bCkKIAl7CisJCSpvcC0+cmVzbnVsbCA9IHRydWU7CisJCSpvcC0+cmVzdmFsdWUgPSAoRGF0 dW0pIDA7CisKIAkJLyogZXhlY3V0ZSBkb21haW4gY2hlY2tzIGZvciBOVUxMcyAqLwotCQko dm9pZCkgRXhlY0V2YWxKc29uRXhwckNvZXJjaW9uKG9wLCBlY29udGV4dCwgcmVzLCBvcC0+ cmVzbnVsbCwKLQkJCQkJCQkJCQlOVUxMLCBOVUxMKTsKKwkJKHZvaWQpIEV4ZWNFdmFsSnNv bkV4cHJDb2VyY2lvbihqc2VzdGF0ZSwgZWNvbnRleHQsCisJCQkJCQkJCQkJJmpzZXN0YXRl LT5yZXN1bHRfY29lcmNpb24sCisJCQkJCQkJCQkJKm9wLT5yZXN2YWx1ZSwgb3AtPnJlc251 bGwsIE5VTEwpOwogCiAJCUFzc2VydCgqb3AtPnJlc251bGwpOwogCQlyZXR1cm47CiAJfQog Ci0JaXRlbSA9IGpzZXN0YXRlLT5mb3JtYXR0ZWRfZXhwci0+dmFsdWU7Ci0JcGF0aCA9IERh dHVtR2V0SnNvblBhdGhQKGpzZXN0YXRlLT5wYXRoc3BlYy0+dmFsdWUpOworCWl0ZW0gPSBq c2VzdGF0ZS0+Zm9ybWF0dGVkX2V4cHIudmFsdWU7CisJcGF0aCA9IERhdHVtR2V0SnNvblBh dGhQKGpzZXN0YXRlLT5wYXRoc3BlYy52YWx1ZSk7CiAKIAkvKiByZXNldCBKU09OIHBhdGgg dmFyaWFibGUgY29udGV4dHMgKi8KIAlmb3JlYWNoKGxjLCBqc2VzdGF0ZS0+YXJncykKQEAg LTUyMTgsMTkgKzUyNjMsMTMgQEAgRXhlY0V2YWxKc29uKEV4cHJTdGF0ZSAqc3RhdGUsIEV4 cHJFdmFsU3RlcCAqb3AsIEV4cHJDb250ZXh0ICplY29udGV4dCkKIAkJdmFyLT5ldmFsdWF0 ZWQgPSBmYWxzZTsKIAl9CiAKLQluZWVkU3VidHJhbnMgPSBFeGVjRXZhbEpzb25OZWVkc1N1 YlRyYW5zYWN0aW9uKGpleHByLCAmanNlc3RhdGUtPmNvZXJjaW9ucyk7Ci0KLQljeHQucGF0 aCA9IHBhdGg7Ci0JY3h0LmVycm9yID0gdGhyb3dFcnJvcnMgPyBOVUxMIDogJmVycm9yOwot CWN4dC5jb2VyY2lvbkluU3VidHJhbnMgPSAhbmVlZFN1YnRyYW5zICYmICF0aHJvd0Vycm9y czsKLQlBc3NlcnQoIW5lZWRTdWJ0cmFucyB8fCBjeHQuZXJyb3IpOwotCi0JcmVzID0gRXhl Y0V2YWxKc29uRXhwclN1YnRyYW5zKEV4ZWNFdmFsSnNvbkV4cHIsIG9wLCBlY29udGV4dCwg aXRlbSwKLQkJCQkJCQkJICAgb3AtPnJlc251bGwsICZjeHQsIGN4dC5lcnJvciwKLQkJCQkJ CQkJICAgbmVlZFN1YnRyYW5zKTsKLQorCXJlcyA9IEV4ZWNFdmFsSnNvbkV4cHJJbnRlcm5h bChqc2VzdGF0ZSwgZWNvbnRleHQsCisJCQkJCQkJCSAgIHBhdGgsIGl0ZW0sIG9wLT5yZXNu dWxsLAorCQkJCQkJCQkgICB0aHJvd0Vycm9ycyA/IE5VTEwgOiAmZXJyb3IpOwogCWlmIChl cnJvcikKIAl7CisJCUFzc2VydChqZXhwci0+b25fZXJyb3ItPmJ0eXBlICE9IEpTT05fQkVI QVZJT1JfRVJST1IpOworCiAJCS8qIEV4ZWN1dGUgT04gRVJST1IgYmVoYXZpb3IgKi8KIAkJ cmVzID0gRXhlY0V2YWxKc29uQmVoYXZpb3IoZWNvbnRleHQsIGpleHByLT5vbl9lcnJvciwK IAkJCQkJCQkJICAganNlc3RhdGUtPmRlZmF1bHRfb25fZXJyb3IsCkBAIC01MjM4LDkgKzUy NzcsOSBAQCBFeGVjRXZhbEpzb24oRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpv cCwgRXhwckNvbnRleHQgKmVjb250ZXh0KQogCiAJCS8qIHJlc3VsdCBpcyBhbHJlYWR5IGNv ZXJjZWQgaW4gREVGQVVMVCBiZWhhdmlvciBjYXNlICovCiAJCWlmIChqZXhwci0+b25fZXJy b3ItPmJ0eXBlICE9IEpTT05fQkVIQVZJT1JfREVGQVVMVCkKLQkJCXJlcyA9IEV4ZWNFdmFs SnNvbkV4cHJDb2VyY2lvbihvcCwgZWNvbnRleHQsIHJlcywKLQkJCQkJCQkJCQkgICBvcC0+ cmVzbnVsbCwKLQkJCQkJCQkJCQkgICBOVUxMLCBOVUxMKTsKKwkJCXJlcyA9IEV4ZWNFdmFs SnNvbkV4cHJDb2VyY2lvbihqc2VzdGF0ZSwgZWNvbnRleHQsCisJCQkJCQkJCQkJICAgJmpz ZXN0YXRlLT5yZXN1bHRfY29lcmNpb24sCisJCQkJCQkJCQkJICAgcmVzLCBvcC0+cmVzbnVs bCwgTlVMTCk7CiAJfQogCiAJKm9wLT5yZXN2YWx1ZSA9IHJlczsKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfZXhwci5jIGIvc3JjL2JhY2tlbmQvaml0L2xs dm0vbGx2bWppdF9leHByLmMKaW5kZXggYmQzOTY1MTQzZGEuLmZkNzI2MzBmNWU2IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X2V4cHIuYworKysgYi9zcmMv YmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X2V4cHIuYwpAQCAtMjQwOCw3ICsyNDA4LDcgQEAg bGx2bV9jb21waWxlX2V4cHIoRXhwclN0YXRlICpzdGF0ZSkKIAkJCQlicmVhazsKIAogCQkJ Y2FzZSBFRU9QX0pTT05FWFBSOgotCQkJCWJ1aWxkX0V2YWxYRnVuYyhiLCBtb2QsICJFeGVj RXZhbEpzb24iLAorCQkJCWJ1aWxkX0V2YWxYRnVuYyhiLCBtb2QsICJFeGVjRXZhbEpzb25F eHByIiwKIAkJCQkJCQkJdl9zdGF0ZSwgb3AsIHZfZWNvbnRleHQpOwogCQkJCUxMVk1CdWls ZEJyKGIsIG9wYmxvY2tzW29wbm8gKyAxXSk7CiAJCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X3R5cGVzLmMgYi9zcmMvYmFja2VuZC9qaXQv bGx2bS9sbHZtaml0X3R5cGVzLmMKaW5kZXggMzczNDcxYWQyN2YuLjM3ZmU2NDY1NGI2IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X3R5cGVzLmMKKysrIGIv c3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF90eXBlcy5jCkBAIC0xMzUsNyArMTM1LDcg QEAgdm9pZAkgICAqcmVmZXJlbmNlZF9mdW5jdGlvbnNbXSA9CiAJRXhlY0V2YWxYbWxFeHBy LAogCUV4ZWNFdmFsSnNvbkNvbnN0cnVjdG9yLAogCUV4ZWNFdmFsSnNvbklzUHJlZGljYXRl LAotCUV4ZWNFdmFsSnNvbiwKKwlFeGVjRXZhbEpzb25FeHByLAogCU1ha2VFeHBhbmRlZE9i amVjdFJlYWRPbmx5SW50ZXJuYWwsCiAJc2xvdF9nZXRtaXNzaW5nYXR0cnMsCiAJc2xvdF9n ZXRzb21lYXR0cnNfaW50LApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvbm9kZUZ1 bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9ub2RlRnVuY3MuYwppbmRleCBjMzM0ZGFhZTM5 Mi4uYjdmZGQwYWY5ZDggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL25vZGVGdW5j cy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL25vZGVGdW5jcy5jCkBAIC0xMDE0LDkgKzEw MTQsMTAgQEAgZXhwckNvbGxhdGlvbihjb25zdCBOb2RlICpleHByKQogCiAJCQkJaWYgKCFj b2VyY2lvbikKIAkJCQkJY29sbCA9IEludmFsaWRPaWQ7Ci0JCQkJZWxzZSBpZiAoY29lcmNp b24tPmV4cHIpCisJCQkJZWxzZSBpZiAoY29lcmNpb24tPmN0eXBlID09IEpTT05fQ09FUkNJ T05fVklBX0VYUFIpCiAJCQkJCWNvbGwgPSBleHByQ29sbGF0aW9uKGNvZXJjaW9uLT5leHBy KTsKLQkJCQllbHNlIGlmIChjb2VyY2lvbi0+dmlhX2lvIHx8IGNvZXJjaW9uLT52aWFfcG9w dWxhdGUpCisJCQkJZWxzZSBpZiAoY29lcmNpb24tPmN0eXBlID09IEpTT05fQ09FUkNJT05f VklBX0lPIHx8CisJCQkJCQkgY29lcmNpb24tPmN0eXBlID09IEpTT05fQ09FUkNJT05fVklB X1BPUFVMQVRFKQogCQkJCQljb2xsID0gY29lcmNpb24tPmNvbGxhdGlvbjsKIAkJCQllbHNl CiAJCQkJCWNvbGwgPSBJbnZhbGlkT2lkOwpAQCAtMTI1OSw5ICsxMjYwLDEwIEBAIGV4cHJT ZXRDb2xsYXRpb24oTm9kZSAqZXhwciwgT2lkIGNvbGxhdGlvbikKIAogCQkJCWlmICghY29l cmNpb24pCiAJCQkJCUFzc2VydCghT2lkSXNWYWxpZChjb2xsYXRpb24pKTsKLQkJCQllbHNl IGlmIChjb2VyY2lvbi0+ZXhwcikKKwkJCQllbHNlIGlmIChjb2VyY2lvbi0+Y3R5cGUgPT0g SlNPTl9DT0VSQ0lPTl9WSUFfRVhQUikKIAkJCQkJZXhwclNldENvbGxhdGlvbihjb2VyY2lv bi0+ZXhwciwgY29sbGF0aW9uKTsKLQkJCQllbHNlIGlmIChjb2VyY2lvbi0+dmlhX2lvIHx8 IGNvZXJjaW9uLT52aWFfcG9wdWxhdGUpCisJCQkJZWxzZSBpZiAoY29lcmNpb24tPmN0eXBl ID09IEpTT05fQ09FUkNJT05fVklBX0lPIHx8CisJCQkJCQkgY29lcmNpb24tPmN0eXBlID09 IEpTT05fQ09FUkNJT05fVklBX1BPUFVMQVRFKQogCQkJCQljb2VyY2lvbi0+Y29sbGF0aW9u ID0gY29sbGF0aW9uOwogCQkJCWVsc2UKIAkJCQkJQXNzZXJ0KCFPaWRJc1ZhbGlkKGNvbGxh dGlvbikpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvY2xhdXNl cy5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvY2xhdXNlcy5jCmluZGV4IDUzM2Rm ODZmZjc3Li45ODBjMzRjZjQ5ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3V0aWwvY2xhdXNlcy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2NsYXVz ZXMuYwpAQCAtOTAxLDcgKzkwMSw3IEBAIG1heF9wYXJhbGxlbF9oYXphcmRfd2Fsa2VyKE5v ZGUgKm5vZGUsIG1heF9wYXJhbGxlbF9oYXphcmRfY29udGV4dCAqY29udGV4dCkKIAl7CiAJ CUpzb25FeHByICAgKmpzZXhwciA9IChKc29uRXhwciAqKSBub2RlOwogCi0JCWlmIChFeGVj RXZhbEpzb25OZWVkc1N1YlRyYW5zYWN0aW9uKGpzZXhwciwgTlVMTCkpCisJCWlmIChFeGVj RXZhbEpzb25OZWVkc1N1YlRyYW5zYWN0aW9uKGpzZXhwcikpCiAJCXsKIAkJCWNvbnRleHQt Pm1heF9oYXphcmQgPSBQUk9QQVJBTExFTF9VTlNBRkU7CiAJCQlyZXR1cm4gdHJ1ZTsKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9leHByLmMgYi9zcmMvYmFja2Vu ZC9wYXJzZXIvcGFyc2VfZXhwci5jCmluZGV4IGZhYmI1ZjcyMDc2Li4zYjgyYzBmMzMyOCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4cHIuYworKysgYi9zcmMv YmFja2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jCkBAIC00MTcyLDEwICs0MTcyLDExIEBAIGFz c2lnbkRlZmF1bHRKc29uUmV0dXJuaW5nVHlwZShOb2RlICpjb250ZXh0X2l0ZW0sIEpzb25G b3JtYXQgKmNvbnRleHRfZm9ybWF0LAogLyoKICAqIFRyeSB0byBjb2VyY2UgZXhwcmVzc2lv biB0byB0aGUgb3V0cHV0IHR5cGUgb3IKICAqIHVzZSBqc29uX3BvcHVsYXRlX3R5cGUoKSBm b3IgY29tcG9zaXRlLCBhcnJheSBhbmQgZG9tYWluIHR5cGVzIG9yCi0gKiB1c2UgY29lcmNp b24gdmlhIEkvTy4KKyAqIHVzZSBjb2VyY2lvbiB2aWEgSS9PLCBpZiBhbGxvd2VkLgogICov CiBzdGF0aWMgSnNvbkNvZXJjaW9uICoKLWNvZXJjZUpzb25FeHByKFBhcnNlU3RhdGUgKnBz dGF0ZSwgTm9kZSAqZXhwciwgY29uc3QgSnNvblJldHVybmluZyAqcmV0dXJuaW5nKQorY29l cmNlSnNvbkV4cHIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBOb2RlICpleHByLAorCQkJICAgY29u c3QgSnNvblJldHVybmluZyAqcmV0dXJuaW5nLCBib29sIGFsbG93X2lvX2NvZXJjaW9uKQog ewogCWNoYXIJCXR5cHR5cGU7CiAJSnNvbkNvZXJjaW9uICpjb2VyY2lvbiA9IG1ha2VOb2Rl KEpzb25Db2VyY2lvbik7CkBAIC00MTg1LDIwICs0MTg2LDI4IEBAIGNvZXJjZUpzb25FeHBy KFBhcnNlU3RhdGUgKnBzdGF0ZSwgTm9kZSAqZXhwciwgY29uc3QgSnNvblJldHVybmluZyAq cmV0dXJuaW5nKQogCWlmIChjb2VyY2lvbi0+ZXhwcikKIAl7CiAJCWlmIChjb2VyY2lvbi0+ ZXhwciA9PSBleHByKQorCQl7CiAJCQljb2VyY2lvbi0+ZXhwciA9IE5VTEw7CisJCQljb2Vy Y2lvbi0+Y3R5cGUgPSBKU09OX0NPRVJDSU9OX05PTkU7CisJCX0KKwkJZWxzZQorCQkJY29l cmNpb24tPmN0eXBlID0gSlNPTl9DT0VSQ0lPTl9WSUFfRVhQUjsKIAogCQlyZXR1cm4gY29l cmNpb247CiAJfQogCisJaWYgKCFhbGxvd19pb19jb2VyY2lvbikKKwkJcmV0dXJuIE5VTEw7 CisKIAl0eXB0eXBlID0gZ2V0X3R5cHR5cGUocmV0dXJuaW5nLT50eXBpZCk7CiAKIAlpZiAo cmV0dXJuaW5nLT50eXBpZCA9PSBSRUNPUkRPSUQgfHwKIAkJdHlwdHlwZSA9PSBUWVBUWVBF X0NPTVBPU0lURSB8fAogCQl0eXB0eXBlID09IFRZUFRZUEVfRE9NQUlOIHx8CiAJCXR5cGVf aXNfYXJyYXkocmV0dXJuaW5nLT50eXBpZCkpCi0JCWNvZXJjaW9uLT52aWFfcG9wdWxhdGUg PSB0cnVlOworCQljb2VyY2lvbi0+Y3R5cGUgPSBKU09OX0NPRVJDSU9OX1ZJQV9QT1BVTEFU RTsKIAllbHNlCi0JCWNvZXJjaW9uLT52aWFfaW8gPSB0cnVlOworCQljb2VyY2lvbi0+Y3R5 cGUgPSBKU09OX0NPRVJDSU9OX1ZJQV9JTzsKIAogCXJldHVybiBjb2VyY2lvbjsKIH0KQEAg LTQyMzEsOCArNDI0MCw3IEBAIHRyYW5zZm9ybUpzb25GdW5jRXhwck91dHB1dChQYXJzZVN0 YXRlICpwc3RhdGUsIEpzb25GdW5jRXhwciAqZnVuYywKIAkJewogCQkJLyogRm9yY2VkIGNv ZXJjaW9uIHZpYSBJL08gZm9yIEpTT05fVkFMVUUgZm9yIG5vbi1KU09OIHR5cGVzICovCiAJ CQlqc2V4cHItPnJlc3VsdF9jb2VyY2lvbiA9IG1ha2VOb2RlKEpzb25Db2VyY2lvbik7Ci0J CQlqc2V4cHItPnJlc3VsdF9jb2VyY2lvbi0+ZXhwciA9IE5VTEw7Ci0JCQlqc2V4cHItPnJl c3VsdF9jb2VyY2lvbi0+dmlhX2lvID0gdHJ1ZTsKKwkJCWpzZXhwci0+cmVzdWx0X2NvZXJj aW9uLT5jdHlwZSA9IEpTT05fQ09FUkNJT05fVklBX0lPOwogCQkJcmV0dXJuOwogCQl9CiAK QEAgLTQyNDcsNyArNDI1NSw4IEBAIHRyYW5zZm9ybUpzb25GdW5jRXhwck91dHB1dChQYXJz ZVN0YXRlICpwc3RhdGUsIEpzb25GdW5jRXhwciAqZnVuYywKIAkJCUFzc2VydCgoKENhc2VU ZXN0RXhwciAqKSBwbGFjZWhvbGRlciktPnR5cGVNb2QgPT0gcmV0LnR5cG1vZCk7CiAKIAkJ CWpzZXhwci0+cmVzdWx0X2NvZXJjaW9uID0gY29lcmNlSnNvbkV4cHIocHN0YXRlLCBwbGFj ZWhvbGRlciwKLQkJCQkJCQkJCQkJCQkganNleHByLT5yZXR1cm5pbmcpOworCQkJCQkJCQkJ CQkJCSBqc2V4cHItPnJldHVybmluZywKKwkJCQkJCQkJCQkJCQkgdHJ1ZSk7CiAJCX0KIAl9 CiAJZWxzZQpAQCAtNDMxOCwxMyArNDMyNywxNSBAQCBpbml0SnNvbkl0ZW1Db2VyY2lvbihQ YXJzZVN0YXRlICpwc3RhdGUsIE9pZCB0eXBpZCwKIAkJZXhwciA9IChOb2RlICopIHBsYWNl aG9sZGVyOwogCX0KIAotCXJldHVybiBjb2VyY2VKc29uRXhwcihwc3RhdGUsIGV4cHIsIHJl dHVybmluZyk7CisJLyogQWxsb3cgb25seSBvcmRpbmFyeSBjYXN0cyBoZXJlICovCisJcmV0 dXJuIGNvZXJjZUpzb25FeHByKHBzdGF0ZSwgZXhwciwgcmV0dXJuaW5nLCBmYWxzZSk7CiB9 CiAKLXN0YXRpYyB2b2lkCi1pbml0SnNvbkl0ZW1Db2VyY2lvbnMoUGFyc2VTdGF0ZSAqcHN0 YXRlLCBKc29uSXRlbUNvZXJjaW9ucyAqY29lcmNpb25zLAotCQkJCQkgIGNvbnN0IEpzb25S ZXR1cm5pbmcgKnJldHVybmluZywgT2lkIGNvbnRleHRJdGVtVHlwZUlkKQorc3RhdGljIEpz b25JdGVtQ29lcmNpb25zICoKK2luaXRKc29uSXRlbUNvZXJjaW9ucyhQYXJzZVN0YXRlICpw c3RhdGUsIGNvbnN0IEpzb25SZXR1cm5pbmcgKnJldHVybmluZywKKwkJCQkJICBPaWQgY29u dGV4dEl0ZW1UeXBlSWQpCiB7CisJSnNvbkl0ZW1Db2VyY2lvbnMgKmNvZXJjaW9ucyA9IG1h a2VOb2RlKEpzb25JdGVtQ29lcmNpb25zKTsKIAlzdHJ1Y3QKIAl7CiAJCUpzb25Db2VyY2lv biAqKmNvZXJjaW9uOwpAQCAtNDM0Nyw2ICs0MzU4LDggQEAgaW5pdEpzb25JdGVtQ29lcmNp b25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvbkl0ZW1Db2VyY2lvbnMgKmNvZXJjaW9ucywK IAogCWZvciAocCA9IGNvZXJjaW9uVHlwaWRzOyBwLT5jb2VyY2lvbjsgcCsrKQogCQkqcC0+ Y29lcmNpb24gPSBpbml0SnNvbkl0ZW1Db2VyY2lvbihwc3RhdGUsIHAtPnR5cGlkLCByZXR1 cm5pbmcpOworCisJcmV0dXJuIGNvZXJjaW9uczsKIH0KIAogLyoKQEAgLTQzNzcsOSArNDM5 MCwxMiBAQCB0cmFuc2Zvcm1Kc29uRnVuY0V4cHIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29u RnVuY0V4cHIgKmZ1bmMpCiAJCQkJY29lcmNlRGVmYXVsdEpzb25FeHByKHBzdGF0ZSwganNl eHByLAogCQkJCQkJCQkJICBqc2V4cHItPm9uX2Vycm9yLT5kZWZhdWx0X2V4cHIpOwogCi0J CQlqc2V4cHItPmNvZXJjaW9ucyA9IG1ha2VOb2RlKEpzb25JdGVtQ29lcmNpb25zKTsKLQkJ CWluaXRKc29uSXRlbUNvZXJjaW9ucyhwc3RhdGUsIGpzZXhwci0+Y29lcmNpb25zLCBqc2V4 cHItPnJldHVybmluZywKLQkJCQkJCQkJICBleHByVHlwZShjb250ZXh0SXRlbUV4cHIpKTsK KwkJCWlmIChqc2V4cHItPnJldHVybmluZy0+dHlwaWQgIT0gSlNPTk9JRCAmJgorCQkJCWpz ZXhwci0+cmV0dXJuaW5nLT50eXBpZCAhPSBKU09OQk9JRCkKKwkJCQlqc2V4cHItPmNvZXJj aW9ucyA9CisJCQkJCWluaXRKc29uSXRlbUNvZXJjaW9ucyhwc3RhdGUsIGpzZXhwci0+cmV0 dXJuaW5nLAorCQkJCQkJCQkJCSAgZXhwclR5cGUoY29udGV4dEl0ZW1FeHByKSk7CisKIAog CQkJYnJlYWs7CiAKQEAgLTQ0MDksNiArNDQyNSw3IEBAIHRyYW5zZm9ybUpzb25GdW5jRXhw cihQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25GdW5jRXhwciAqZnVuYykKIAkJCWpzZXhwci0+ cmV0dXJuaW5nLT5mb3JtYXQtPmZvcm1hdF90eXBlID0gSlNfRk9STUFUX0RFRkFVTFQ7CiAJ CQlqc2V4cHItPnJldHVybmluZy0+Zm9ybWF0LT5lbmNvZGluZyA9IEpTX0VOQ19ERUZBVUxU OwogCisJCQkvKiBDb2VyY2UgaW50ZXJtZWRpYXRlIGJvb2xlYW4gcmVzdWx0IHRvIHRoZSBv dXRwdXQgdHlwZSBpZiBuZWVkZWQgKi8KIAkJCWlmICghT2lkSXNWYWxpZChqc2V4cHItPnJl dHVybmluZy0+dHlwaWQpKQogCQkJewogCQkJCWpzZXhwci0+cmV0dXJuaW5nLT50eXBpZCA9 IEJPT0xPSUQ7CkBAIC00NDE4LDIxICs0NDM1LDIyIEBAIHRyYW5zZm9ybUpzb25GdW5jRXhw cihQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25GdW5jRXhwciAqZnVuYykKIAkJCXsKIAkJCQlD YXNlVGVzdEV4cHIgKnBsYWNlaG9sZGVyID0gbWFrZU5vZGUoQ2FzZVRlc3RFeHByKTsKIAkJ CQlpbnQJCQlsb2NhdGlvbiA9IGV4cHJMb2NhdGlvbigoTm9kZSAqKSBqc2V4cHIpOworCQkJ CU5vZGUJICAgKmNvZXJjaW9uX2V4cHI7CiAKIAkJCQlwbGFjZWhvbGRlci0+dHlwZUlkID0g Qk9PTE9JRDsKIAkJCQlwbGFjZWhvbGRlci0+dHlwZU1vZCA9IC0xOwogCQkJCXBsYWNlaG9s ZGVyLT5jb2xsYXRpb24gPSBJbnZhbGlkT2lkOwogCi0JCQkJanNleHByLT5yZXN1bHRfY29l cmNpb24gPSBtYWtlTm9kZShKc29uQ29lcmNpb24pOwotCQkJCWpzZXhwci0+cmVzdWx0X2Nv ZXJjaW9uLT5leHByID0KLQkJCQkJY29lcmNlX3RvX3RhcmdldF90eXBlKHBzdGF0ZSwgKE5v ZGUgKikgcGxhY2Vob2xkZXIsIEJPT0xPSUQsCisJCQkJY29lcmNpb25fZXhwciA9CisJCQkJ CWNvZXJjZV90b190YXJnZXRfdHlwZShwc3RhdGUsIChOb2RlICopIHBsYWNlaG9sZGVyLAor CQkJCQkJCQkJCSAgQk9PTE9JRCwKIAkJCQkJCQkJCQkgIGpzZXhwci0+cmV0dXJuaW5nLT50 eXBpZCwKIAkJCQkJCQkJCQkgIGpzZXhwci0+cmV0dXJuaW5nLT50eXBtb2QsCiAJCQkJCQkJ CQkJICBDT0VSQ0lPTl9FWFBMSUNJVCwKIAkJCQkJCQkJCQkgIENPRVJDRV9JTVBMSUNJVF9D QVNULAogCQkJCQkJCQkJCSAgbG9jYXRpb24pOwogCi0JCQkJaWYgKCFqc2V4cHItPnJlc3Vs dF9jb2VyY2lvbi0+ZXhwcikKKwkJCQlpZiAoIWNvZXJjaW9uX2V4cHIpCiAJCQkJCWVyZXBv cnQoRVJST1IsCiAJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9DQU5OT1RfQ09FUkNFKSwKIAkJ CQkJCQkgZXJybXNnKCJjYW5ub3QgY2FzdCB0eXBlICVzIHRvICVzIiwKQEAgLTQ0NDAsOCAr NDQ1OCwxMiBAQCB0cmFuc2Zvcm1Kc29uRnVuY0V4cHIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBK c29uRnVuY0V4cHIgKmZ1bmMpCiAJCQkJCQkJCQlmb3JtYXRfdHlwZV9iZShqc2V4cHItPnJl dHVybmluZy0+dHlwaWQpKSwKIAkJCQkJCQkgcGFyc2VyX2NvZXJjaW9uX2VycnBvc2l0aW9u KHBzdGF0ZSwgbG9jYXRpb24sIChOb2RlICopIGpzZXhwcikpKTsKIAotCQkJCWlmIChqc2V4 cHItPnJlc3VsdF9jb2VyY2lvbi0+ZXhwciA9PSAoTm9kZSAqKSBwbGFjZWhvbGRlcikKLQkJ CQkJanNleHByLT5yZXN1bHRfY29lcmNpb24tPmV4cHIgPSBOVUxMOworCQkJCWlmIChjb2Vy Y2lvbl9leHByICE9IChOb2RlICopIHBsYWNlaG9sZGVyKQorCQkJCXsKKwkJCQkJanNleHBy LT5yZXN1bHRfY29lcmNpb24gPSBtYWtlTm9kZShKc29uQ29lcmNpb24pOworCQkJCQlqc2V4 cHItPnJlc3VsdF9jb2VyY2lvbi0+ZXhwciA9IGNvZXJjaW9uX2V4cHI7CisJCQkJCWpzZXhw ci0+cmVzdWx0X2NvZXJjaW9uLT5jdHlwZSA9IEpTT05fQ09FUkNJT05fVklBX0VYUFI7CisJ CQkJfQogCQkJfQogCQkJYnJlYWs7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1 dG9yL2V4ZWNFeHByLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjRXhwci5oCmluZGV4 IGM4ZWY5MTdmZmUwLi43ZGQ5NmI4ZDViYSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhl Y3V0b3IvZXhlY0V4cHIuaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjRXhwci5o CkBAIC03NTcsNiArNzU3LDEyIEBAIHR5cGVkZWYgc3RydWN0IEpzb25Db25zdHJ1Y3RvckV4 cHJTdGF0ZQogCWludAkJCW5hcmdzOwogfSBKc29uQ29uc3RydWN0b3JFeHByU3RhdGU7CiAK K3R5cGVkZWYgc3RydWN0IEpzb25Db2VyY2lvblN0YXRlCit7CisJRXhwclN0YXRlICAqZXN0 YXRlOyAvKiBjb2VyY2lvbiBleHByZXNzaW9uIHN0YXRlLCBpZiBhbnkgKi8KKwlKc29uQ29l cmNpb25UeXBlIHR5cGU7Cit9IEpzb25Db2VyY2lvblN0YXRlOworCiAvKiBFRU9QX0pTT05F WFBSIHN0YXRlLCB0b28gYmlnIHRvIGlubGluZSAqLwogdHlwZWRlZiBzdHJ1Y3QgSnNvbkV4 cHJTdGF0ZQogewpAQCAtNzY5LDEwICs3NzUsOSBAQCB0eXBlZGVmIHN0cnVjdCBKc29uRXhw clN0YXRlCiAJfQkJCWlucHV0OwkJCS8qIEkvTyBpbmZvIGZvciBvdXRwdXQgdHlwZSAqLwog CiAJTnVsbGFibGVEYXR1bQotCQkJICAgKmZvcm1hdHRlZF9leHByLCAvKiBmb3JtYXR0ZWQg Y29udGV4dCBpdGVtIHZhbHVlICovCi0JCQkgICAqcmVzX2V4cHIsCQkvKiByZXN1bHQgaXRl bSAqLwotCQkJICAgKmNvZXJjaW9uX2V4cHIsCS8qIGlucHV0IGZvciBKU09OIGl0ZW0gY29l cmNpb24gKi8KLQkJCSAgICpwYXRoc3BlYzsJCS8qIHBhdGggc3BlY2lmaWNhdGlvbiB2YWx1 ZSAqLworCQkJCWZvcm1hdHRlZF9leHByLAkvKiBmb3JtYXR0ZWQgY29udGV4dCBpdGVtIHZh bHVlICovCisJCQkJY29lcmNpb25fZXhwciwJLyogaW5wdXQgZm9yIEpTT04gaXRlbSBjb2Vy Y2lvbiAqLworCQkJCXBhdGhzcGVjOwkJLyogcGF0aCBzcGVjaWZpY2F0aW9uIHZhbHVlICov CiAKIAlFeHByU3RhdGUgICpyZXN1bHRfZXhwcjsJLyogY29lcmNlZCB0byBvdXRwdXQgdHlw ZSAqLwogCUV4cHJTdGF0ZSAgKmRlZmF1bHRfb25fZW1wdHk7CS8qIE9OIEVNUFRZIERFRkFV TFQgZXhwcmVzc2lvbiAqLwpAQCAtNzgxLDE1ICs3ODYsMTYgQEAgdHlwZWRlZiBzdHJ1Y3Qg SnNvbkV4cHJTdGF0ZQogCiAJdm9pZAkgICAqY2FjaGU7CQkJLyogY2FjaGUgZm9yIGpzb25f cG9wdWxhdGVfdHlwZSgpICovCiAKLQlzdHJ1Y3QgSnNvbkNvZXJjaW9uc1N0YXRlCisJLyoK KwkgKiBTdGF0ZXMgZm9yIGNvZXJjaW9uIG9mIFNRTC9KU09OIGl0ZW1zIHByb2R1Y2VkIGlu IEpTT05fVkFMVUUKKwkgKiBkaXJlY3RseSB0byB0aGUgb3V0cHV0IHR5cGUuCisJICovCisJ c3RydWN0IEpzb25JdGVtc0NvZXJjaW9uU3RhdGVzCiAJewotCQlzdHJ1Y3QgSnNvbkNvZXJj aW9uU3RhdGUKLQkJewotCQkJSnNvbkNvZXJjaW9uICpjb2VyY2lvbjsgLyogY29lcmNpb24g ZXhwcmVzc2lvbiAqLwotCQkJRXhwclN0YXRlICAqZXN0YXRlOyAvKiBjb2VyY2lvbiBleHBy ZXNzaW9uIHN0YXRlICovCi0JCX0JCQludWxsLAorCQlKc29uQ29lcmNpb25TdGF0ZQorCQkJ CQludWxsLAogCQkJCQlzdHJpbmcsCi0JCW51bWVyaWMgICAgLAorCQkJCQludW1lcmljLAog CQkJCQlib29sZWFuLAogCQkJCQlkYXRlLAogCQkJCQl0aW1lLApAQCAtNzk3LDggKzgwMywx OSBAQCB0eXBlZGVmIHN0cnVjdCBKc29uRXhwclN0YXRlCiAJCQkJCXRpbWVzdGFtcCwKIAkJ CQkJdGltZXN0YW1wdHosCiAJCQkJCWNvbXBvc2l0ZTsKLQl9CQkJY29lcmNpb25zOwkJLyog c3RhdGVzIGZvciBjb2VyY2lvbiBmcm9tIFNRTC9KU09OIGl0ZW0KLQkJCQkJCQkJICogdHlw ZXMgZGlyZWN0bHkgdG8gdGhlIG91dHB1dCB0eXBlICovCisJfQkJICAgKml0ZW1fY29lcmNp b25zOworCisJLyogRGVmYXVsdCBvdXRwdXQgY29lcmNpb24gdG8gdXNlLCBjYW4gYmUgb3Zl cnJpZGVuIGluIEpTT05fUVVFUlkgKi8KKwlKc29uQ29lcmNpb25TdGF0ZSByZXN1bHRfY29l cmNpb247CisKKwkvKiBTcGVjaWFsIEkvTyBjb2VyY2lvbiBzdGF0ZSBmb3IgSlNPTl9RVUVS WSBPTUlUIFFVT1RFUyAqLworCUpzb25Db2VyY2lvblN0YXRlIGlvX2NvZXJjaW9uOworCisJ LyogQ2FuIGV4cHJlc3Npb24gaW4gREVGQVVMVCBPTiBFTVBUWSB0aHJvdyBlcnJvcnM/ICov CisJYm9vbAkJZGVmYXVsdF9vbl9lbXB0eV9jYW5fdGhyb3c7CisKKwkvKiBDYW4gd2Ugc2tp cCBjb2VyY2lvbiBvZiBOVUxMcyAobm9uLWRvbWFpbiBvdXRwdXQgdHlwZSk/ICovCisJYm9v bAkJc2tpcF9udWxsX2NvZXJjaW9uOwogfSBKc29uRXhwclN0YXRlOwogCiAvKiBmdW5jdGlv bnMgaW4gZXhlY0V4cHIuYyAqLwpAQCAtODYwLDE0ICs4NzcsMTAgQEAgZXh0ZXJuIHZvaWQg RXhlY0V2YWxTeXNWYXIoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCwKIAkJ CQkJCSAgIEV4cHJDb250ZXh0ICplY29udGV4dCwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOwog ZXh0ZXJuIHZvaWQgRXhlY0V2YWxKc29uQ29uc3RydWN0b3IoRXhwclN0YXRlICpzdGF0ZSwg RXhwckV2YWxTdGVwICpvcCwKIAkJCQkJCQkJCUV4cHJDb250ZXh0ICplY29udGV4dCk7Ci1l eHRlcm4gdm9pZCBFeGVjRXZhbEpzb24oRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVw ICpvcCwKLQkJCQkJCSBFeHByQ29udGV4dCAqZWNvbnRleHQpOwotZXh0ZXJuIERhdHVtIEV4 ZWNQcmVwYXJlSnNvbkl0ZW1Db2VyY2lvbihzdHJ1Y3QgSnNvbmJWYWx1ZSAqaXRlbSwKLQkJ CQkJCQkJCQkgSnNvblJldHVybmluZyAqcmV0dXJuaW5nLAotCQkJCQkJCQkJCSBzdHJ1Y3Qg SnNvbkNvZXJjaW9uc1N0YXRlICpjb2VyY2lvbnMsCi0JCQkJCQkJCQkJIHN0cnVjdCBKc29u Q29lcmNpb25TdGF0ZSAqKnBqY3N0YXRlKTsKLWV4dGVybiBib29sIEV4ZWNFdmFsSnNvbk5l ZWRzU3ViVHJhbnNhY3Rpb24oSnNvbkV4cHIgKmpzZXhwciwKLQkJCQkJCQkJCQkJc3RydWN0 IEpzb25Db2VyY2lvbnNTdGF0ZSAqKTsKK2V4dGVybiB2b2lkIEV4ZWNFdmFsSnNvbkV4cHIo RXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCwKKwkJCQkJCQkgRXhwckNvbnRl eHQgKmVjb250ZXh0KTsKK2V4dGVybiBib29sIEV4ZWNFdmFsSnNvbk5lZWRzU3ViVHJhbnNh Y3Rpb24oSnNvbkV4cHIgKmpzZXhwcik7CitleHRlcm4gYm9vbCBFeGVjRXZhbEV4cHJDYW5U aHJvd0Vycm9ycyhOb2RlICpleHByKTsKIGV4dGVybiBEYXR1bSBFeGVjRXZhbEV4cHJQYXNz aW5nQ2FzZVZhbHVlKEV4cHJTdGF0ZSAqZXN0YXRlLAogCQkJCQkJCQkJCSAgRXhwckNvbnRl eHQgKmVjb250ZXh0LCBib29sICppc251bGwsCiAJCQkJCQkJCQkJICBEYXR1bSBjYXNldmFs X2RhdHVtLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmggYi9z cmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaAppbmRleCAzYWE5NmJiNjg1NS4uMGE0MGQ1 OWJlMjYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oCisrKyBi L3NyYy9pbmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oCkBAIC0xNTUxLDYgKzE1NTEsMTUgQEAg dHlwZWRlZiBzdHJ1Y3QgSnNvbkJlaGF2aW9yCiAJTm9kZQkgICAqZGVmYXVsdF9leHByOwkv KiBkZWZhdWx0IGV4cHJlc3Npb24sIGlmIGFueSAqLwogfSBKc29uQmVoYXZpb3I7CiAKK3R5 cGVkZWYgZW51bSBKc29uQ29lcmNpb25UeXBlCit7CisJSlNPTl9DT0VSQ0lPTl9OT05FID0g MCwJCQkvKiBjb2VyY2lvbiBpcyBub3QgbmVlZGVkICovCisJSlNPTl9DT0VSQ0lPTl9WSUFf RVhQUiA9IDEsCQkvKiBjb2VyY2UgdXNpbmcgZXhwcmVzc2lvbiAqLworCUpTT05fQ09FUkNJ T05fVklBX0lPID0gMiwJCS8qIGNvZXJjZSB1c2luZyB0eXBlIGlucHV0IGZ1bmN0aW9uICov CisJSlNPTl9DT0VSQ0lPTl9WSUFfUE9QVUxBVEUgPSAzLAkvKiBjb2VyY2UgdXNpbmcganNv bl9wb3B1bGF0ZV90eXBlKCkgKi8KKwlKU09OX0NPRVJDSU9OX0VSUk9SID0gNAkJCS8qIG5v IG5vZXJjaW9uIGlzIGF2YWlsYWJsZSAqLworfSBKc29uQ29lcmNpb25UeXBlOworCiAvKgog ICogSnNvbkNvZXJjaW9uIC0KICAqCQljb2VyY2lvbiBmcm9tIFNRTC9KU09OIGl0ZW0gdHlw ZXMgdG8gU1FMIHR5cGVzCkBAIC0xNTU4LDEwICsxNTY3LDExIEBAIHR5cGVkZWYgc3RydWN0 IEpzb25CZWhhdmlvcgogdHlwZWRlZiBzdHJ1Y3QgSnNvbkNvZXJjaW9uCiB7CiAJTm9kZVRh ZwkJdHlwZTsKLQlOb2RlCSAgICpleHByOwkJCS8qIHJlc3VsdGluZyBleHByZXNzaW9uIGNv ZXJjZWQgdG8gdGFyZ2V0IHR5cGUgKi8KLQlib29sCQl2aWFfcG9wdWxhdGU7CS8qIGNvZXJj ZSByZXN1bHQgdXNpbmcganNvbl9wb3B1bGF0ZV90eXBlKCk/ICovCi0JYm9vbAkJdmlhX2lv OwkJCS8qIGNvZXJjZSByZXN1bHQgdXNpbmcgdHlwZSBpbnB1dCBmdW5jdGlvbj8gKi8KLQlP aWQJCQljb2xsYXRpb247CQkvKiBjb2xsYXRpb24gZm9yIGNvZXJjaW9uIHZpYSBJL08gb3Ig cG9wdWxhdGUgKi8KKwlKc29uQ29lcmNpb25UeXBlIGN0eXBlOyAvKiBjb2VyY2lvbiB0eXBl ICovCisJTm9kZQkgICAqZXhwcjsJCS8qIHJlc3VsdGluZyBleHByZXNzaW9uIGNvZXJjZWQg dG8gdGhlCisJCQkJCQkJICogdGFyZ2V0IGlmIHR5cGUgPT0gSlNPTl9DT0VSQ0lPTl9WSUFf RVhQUiwKKwkJCQkJCQkgKiBOVUxMIG90aGVyd2lzZSAqLworCU9pZAkJCWNvbGxhdGlvbjsJ LyogY29sbGF0aW9uIGZvciBjb2VyY2lvbiB2aWEgSS9PIG9yIHBvcHVsYXRlICovCiB9IEpz b25Db2VyY2lvbjsKIAogLyoKLS0gCjIuMjUuMQoK --------------4f0L3EFiQJb2iiAozUzeF43y Content-Type: text/x-patch; charset=UTF-8; name="v7-0002-Fix-returning-of-json-b-domains-in-JSON_VALUE.patch" Content-Disposition: attachment; filename*0="v7-0002-Fix-returning-of-json-b-domains-in-JSON_VALUE.patch" Content-Transfer-Encoding: base64 RnJvbSA4ZGIzM2IxODdjMWEwMzJkMjA4MGI1NTczMjdiOGQ3YmMyY2YyZTVkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBOaWtpdGEgR2x1a2hvdiA8bi5nbHVob3ZAcG9zdGdy ZXNwcm8ucnU+CkRhdGU6IE1vbiwgMTUgQXVnIDIwMjIgMjA6MTg6MTEgKzAzMDAKU3ViamVj dDogW1BBVENIIHY3IDIvNF0gRml4IHJldHVybmluZyBvZiBqc29uW2JdIGRvbWFpbnMgaW4g SlNPTl9WQUxVRSgpCgotLS0KIHNyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9leHByLmMgICAg ICAgICAgICAgfCAgNTIgKysrKy0tCiBzcmMvaW5jbHVkZS9leGVjdXRvci9leGVjRXhwci5o ICAgICAgICAgICAgIHwgICAzICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbmJf c3FsanNvbi5vdXQgfCAxODEgKysrKysrKysrKysrKysrKysrKy0KIHNyYy90ZXN0L3JlZ3Jl c3Mvc3FsL2pzb25iX3NxbGpzb24uc3FsICAgICAgfCAgNjMgKysrKysrLQogNCBmaWxlcyBj aGFuZ2VkLCAyODcgaW5zZXJ0aW9ucygrKSwgMTIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4cHIuYyBiL3NyYy9iYWNrZW5kL3BhcnNl ci9wYXJzZV9leHByLmMKaW5kZXggM2I4MmMwZjMzMjguLmFmZjZmYzFhMWM0IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jCisrKyBiL3NyYy9iYWNrZW5k L3BhcnNlci9wYXJzZV9leHByLmMKQEAgLTQyMTIsMTIgKzQyMTIsMjkgQEAgY29lcmNlSnNv bkV4cHIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBOb2RlICpleHByLAogCXJldHVybiBjb2VyY2lv bjsKIH0KIAorLyogSXMgaXQgYSBqc29uL2pzb25iIHR5cGUgb3IgaXRzIGRvbWFpbj8gKi8K K3N0YXRpYyBib29sCitpc0pzb25UeXBlKE9pZCB0eXBpZCkKK3sKKwlPaWQJCQliYXNldHlw aWQ7CisKKwlpZiAodHlwaWQgPT0gSlNPTk9JRCB8fCB0eXBpZCA9PSBKU09OQk9JRCkKKwkJ cmV0dXJuIHRydWU7CisKKwliYXNldHlwaWQgPSBnZXRCYXNlVHlwZSh0eXBpZCk7CisKKwlp ZiAoYmFzZXR5cGlkID09IEpTT05PSUQgfHwgYmFzZXR5cGlkID09IEpTT05CT0lEKQorCQly ZXR1cm4gdHJ1ZTsKKworCXJldHVybiBmYWxzZTsKK30KKwogLyoKICAqIFRyYW5zZm9ybSBh IEpTT04gb3V0cHV0IGNsYXVzZSBvZiBKU09OX1ZBTFVFIGFuZCBKU09OX1FVRVJZLgogICov CiBzdGF0aWMgdm9pZAogdHJhbnNmb3JtSnNvbkZ1bmNFeHByT3V0cHV0KFBhcnNlU3RhdGUg KnBzdGF0ZSwgSnNvbkZ1bmNFeHByICpmdW5jLAotCQkJCQkJCUpzb25FeHByICpqc2V4cHIp CisJCQkJCQkJSnNvbkV4cHIgKmpzZXhwciwgYm9vbCAqcmV0dXJuaW5nX2pzb24pCiB7CiAJ Tm9kZQkgICAqZXhwciA9IGpzZXhwci0+Zm9ybWF0dGVkX2V4cHI7CiAKQEAgLTQyMzQsMTEg KzQyNTEsMTkgQEAgdHJhbnNmb3JtSnNvbkZ1bmNFeHByT3V0cHV0KFBhcnNlU3RhdGUgKnBz dGF0ZSwgSnNvbkZ1bmNFeHByICpmdW5jLAogCXsKIAkJSnNvblJldHVybmluZyByZXQ7CiAK LQkJaWYgKGZ1bmMtPm9wID09IEpTT05fVkFMVUVfT1AgJiYKLQkJCWpzZXhwci0+cmV0dXJu aW5nLT50eXBpZCAhPSBKU09OT0lEICYmCi0JCQlqc2V4cHItPnJldHVybmluZy0+dHlwaWQg IT0gSlNPTkJPSUQpCisJCSpyZXR1cm5pbmdfanNvbiA9IGlzSnNvblR5cGUoanNleHByLT5y ZXR1cm5pbmctPnR5cGlkKTsKKworCQlpZiAoZnVuYy0+b3AgPT0gSlNPTl9WQUxVRV9PUCAm JiAhKnJldHVybmluZ19qc29uKQogCQl7Ci0JCQkvKiBGb3JjZWQgY29lcmNpb24gdmlhIEkv TyBmb3IgSlNPTl9WQUxVRSBmb3Igbm9uLUpTT04gdHlwZXMgKi8KKwkJCS8qCisJCQkgKiBJ biBKU09OX1ZBTFVFIHJlc3VsdF9jb2VyY2lvbiBjYW4gb25seSBiZSB1c2VkIHdoZW4KKwkJ CSAqIHJldHVybmluZyBKU09OIHR5cGVzIGFuZCBmb3IgTlVMTCB2YWx1ZXMgKHJlc3VsdGlu ZworCQkJICogaXRlbSBpcyBKU09OIG51bGwgb3IgTlVMTCBiZWhhdmlvciBpcyB1c2VkKS4K KwkJCSAqIFNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gZmluZCBhIGNhc3QgZnJvbSBqc29uW2Jd IHRvCisJCQkgKiBvdXRwdXQgdHlwZSB3aGVuIGl0IGlzIGEgbm9uLUpTT04gdHlwZSwgd2Ug b25seSBuZWVkIHRvCisJCQkgKiBjaGVjayBkb21haW5zIGZvciBOT1QgTlVMTCwgd2hhdCBj YW4gYmUgZG9uZSB1c2luZyBJL08KKwkJCSAqIGNvZXJjaW9uLgorCQkJICovCiAJCQlqc2V4 cHItPnJlc3VsdF9jb2VyY2lvbiA9IG1ha2VOb2RlKEpzb25Db2VyY2lvbik7CiAJCQlqc2V4 cHItPnJlc3VsdF9jb2VyY2lvbi0+Y3R5cGUgPSBKU09OX0NPRVJDSU9OX1ZJQV9JTzsKIAkJ CXJldHVybjsKQEAgLTQyNjAsOCArNDI4NSwxMSBAQCB0cmFuc2Zvcm1Kc29uRnVuY0V4cHJP dXRwdXQoUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uRnVuY0V4cHIgKmZ1bmMsCiAJCX0KIAl9 CiAJZWxzZQorCXsKIAkJYXNzaWduRGVmYXVsdEpzb25SZXR1cm5pbmdUeXBlKGpzZXhwci0+ Zm9ybWF0dGVkX2V4cHIsIGpzZXhwci0+Zm9ybWF0LAogCQkJCQkJCQkJICAganNleHByLT5y ZXR1cm5pbmcpOworCQkqcmV0dXJuaW5nX2pzb24gPSB0cnVlOworCX0KIH0KIAogLyoKQEAg LTQzNzEsMTMgKzQzOTksMTQgQEAgdHJhbnNmb3JtSnNvbkZ1bmNFeHByKFBhcnNlU3RhdGUg KnBzdGF0ZSwgSnNvbkZ1bmNFeHByICpmdW5jKQogCUpzb25FeHByICAgKmpzZXhwciA9IHRy YW5zZm9ybUpzb25FeHByQ29tbW9uKHBzdGF0ZSwgZnVuYyk7CiAJY29uc3QgY2hhciAqZnVu Y19uYW1lID0gTlVMTDsKIAlOb2RlCSAgICpjb250ZXh0SXRlbUV4cHIgPSBqc2V4cHItPmZv cm1hdHRlZF9leHByOworCWJvb2wJCXJldHVybmluZ19qc29uOwogCiAJc3dpdGNoIChmdW5j LT5vcCkKIAl7CiAJCWNhc2UgSlNPTl9WQUxVRV9PUDoKIAkJCWZ1bmNfbmFtZSA9ICJKU09O X1ZBTFVFIjsKIAotCQkJdHJhbnNmb3JtSnNvbkZ1bmNFeHByT3V0cHV0KHBzdGF0ZSwgZnVu YywganNleHByKTsKKwkJCXRyYW5zZm9ybUpzb25GdW5jRXhwck91dHB1dChwc3RhdGUsIGZ1 bmMsIGpzZXhwciwgJnJldHVybmluZ19qc29uKTsKIAogCQkJanNleHByLT5yZXR1cm5pbmct PmZvcm1hdC0+Zm9ybWF0X3R5cGUgPSBKU19GT1JNQVRfREVGQVVMVDsKIAkJCWpzZXhwci0+ cmV0dXJuaW5nLT5mb3JtYXQtPmVuY29kaW5nID0gSlNfRU5DX0RFRkFVTFQ7CkBAIC00Mzkw LDE5ICs0NDE5LDIyIEBAIHRyYW5zZm9ybUpzb25GdW5jRXhwcihQYXJzZVN0YXRlICpwc3Rh dGUsIEpzb25GdW5jRXhwciAqZnVuYykKIAkJCQljb2VyY2VEZWZhdWx0SnNvbkV4cHIocHN0 YXRlLCBqc2V4cHIsCiAJCQkJCQkJCQkgIGpzZXhwci0+b25fZXJyb3ItPmRlZmF1bHRfZXhw cik7CiAKLQkJCWlmIChqc2V4cHItPnJldHVybmluZy0+dHlwaWQgIT0gSlNPTk9JRCAmJgot CQkJCWpzZXhwci0+cmV0dXJuaW5nLT50eXBpZCAhPSBKU09OQk9JRCkKKwkJCS8qCisJCQkg KiBEb24ndCBpbml0aWFsaXplIGl0ZW0gY29lcmNpb25zIGlmIHJldHVybmluZyBvbmUgb2Yg SlNPTgorCQkJICogdHlwZXMgb3IgdGhlaXIgZG9tYWlucy4gIENvZXJjaW9uIHdpbGwgYmUg ZG9uZSB1c2luZworCQkJICogInJlc3VsdF9jb2VyY2lvbiIuCisJCQkgKi8KKwkJCWlmICgh cmV0dXJuaW5nX2pzb24pCiAJCQkJanNleHByLT5jb2VyY2lvbnMgPQogCQkJCQlpbml0SnNv bkl0ZW1Db2VyY2lvbnMocHN0YXRlLCBqc2V4cHItPnJldHVybmluZywKIAkJCQkJCQkJCQkg IGV4cHJUeXBlKGNvbnRleHRJdGVtRXhwcikpOwogCi0KIAkJCWJyZWFrOwogCiAJCWNhc2Ug SlNPTl9RVUVSWV9PUDoKIAkJCWZ1bmNfbmFtZSA9ICJKU09OX1FVRVJZIjsKIAotCQkJdHJh bnNmb3JtSnNvbkZ1bmNFeHByT3V0cHV0KHBzdGF0ZSwgZnVuYywganNleHByKTsKKwkJCXRy YW5zZm9ybUpzb25GdW5jRXhwck91dHB1dChwc3RhdGUsIGZ1bmMsIGpzZXhwciwgJnJldHVy bmluZ19qc29uKTsKIAogCQkJanNleHByLT5vbl9lbXB0eS0+ZGVmYXVsdF9leHByID0KIAkJ CQljb2VyY2VEZWZhdWx0SnNvbkV4cHIocHN0YXRlLCBqc2V4cHIsCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9leGVjdXRvci9leGVjRXhwci5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3Iv ZXhlY0V4cHIuaAppbmRleCA3ZGQ5NmI4ZDViYS4uNTFlOGQ5MzE3OGUgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNFeHByLmgKKysrIGIvc3JjL2luY2x1ZGUvZXhl Y3V0b3IvZXhlY0V4cHIuaApAQCAtNzg5LDYgKzc4OSw5IEBAIHR5cGVkZWYgc3RydWN0IEpz b25FeHByU3RhdGUKIAkvKgogCSAqIFN0YXRlcyBmb3IgY29lcmNpb24gb2YgU1FML0pTT04g aXRlbXMgcHJvZHVjZWQgaW4gSlNPTl9WQUxVRQogCSAqIGRpcmVjdGx5IHRvIHRoZSBvdXRw dXQgdHlwZS4KKwkgKgorCSAqIGBpdGVtX2NvZXJjaW9ucyA9PSBOVUxMYCBtZWFucyBvdXRw dXQgdHlwZSBpcyBqc29uW2JdIG9yIGl0cworCSAqIGRvbWFpbiBhbmQgd2UgdXNlIGByZXN1 bHRfY29lcmNpb25gLgogCSAqLwogCXN0cnVjdCBKc29uSXRlbXNDb2VyY2lvblN0YXRlcwog CXsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbmJfc3FsanNv bi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pzb25iX3NxbGpzb24ub3V0Cmlu ZGV4IGVmNDk2MTEwYWYzLi5lZTVlNTk3OTA5YyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9qc29uYl9zcWxqc29uLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL2pzb25iX3NxbGpzb24ub3V0CkBAIC0zNDksMTQgKzM0OSwxOTMgQEAgU0VM RUNUIEpTT05fVkFMVUUoanNvbmIgJyIyMDE3LTAyLTIwIicsICckJyBSRVRVUk5JTkcgZGF0 ZSkgKyA5OwogIDAzLTAxLTIwMTcKICgxIHJvdykKIAotLS0gVGVzdCBOVUxMIGNoZWNrcyBl eGVjdXRpb24gaW4gZG9tYWluIHR5cGVzCistLSBUZXN0IGZvciBkb21haW4gdHlwZXMKIENS RUFURSBET01BSU4gc3FsanNvbmJfaW50X25vdF9udWxsIEFTIGludCBOT1QgTlVMTDsKK0NS RUFURSBET01BSU4gc3FsanNvbmJfanNvbl9ub3RfbnVsbCBBUyBqc29uIE5PVCBOVUxMIENI RUNLIChWQUxVRTo6dGV4dCA8PiAnMCcpOworQ1JFQVRFIERPTUFJTiBzcWxqc29uYl9qc29u Yl9ub3RfbnVsbCBBUyBqc29uYiBOT1QgTlVMTCBDSEVDSyAoVkFMVUUgPD4gJzAnKTsKKy0t IFRlc3QgY2FzdGluZyB0byBqc29uW2JdIGRvbWFpbnMgKGl0ZW1zIGNhc3RlZCBhcyBpcywg c3RyaW5ncyBhcmUgbm90IHVucXVvdGVkKQorU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyIx IicsICckJyBSRVRVUk5JTkcgc3FsanNvbmJfanNvbl9ub3RfbnVsbCk7CisganNvbl92YWx1 ZSAKKy0tLS0tLS0tLS0tLQorICIxIgorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShq c29uYiAnIjEiJywgJyQnIFJFVFVSTklORyBzcWxqc29uYl9qc29uYl9ub3RfbnVsbCk7Cisg anNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorICIxIgorKDEgcm93KQorCitTRUxFQ1QgSlNP Tl9WQUxVRShqc29uYiAnMScsICckJyBSRVRVUk5JTkcgc3FsanNvbmJfanNvbl9ub3RfbnVs bCk7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorIDEKKygxIHJvdykKKworU0VMRUNU IEpTT05fVkFMVUUoanNvbmIgJzEnLCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25iX25v dF9udWxsKTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgMQorKDEgcm93KQorCitT RUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckJyBSRVRVUk5JTkcgc3FsanNvbmJf anNvbl9ub3RfbnVsbCk7CitFUlJPUjogIGRvbWFpbiBzcWxqc29uYl9qc29uX25vdF9udWxs IGRvZXMgbm90IGFsbG93IG51bGwgdmFsdWVzCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAn bnVsbCcsICckJyBSRVRVUk5JTkcgc3FsanNvbmJfanNvbmJfbm90X251bGwpOworRVJST1I6 ICBkb21haW4gc3FsanNvbmJfanNvbmJfbm90X251bGwgZG9lcyBub3QgYWxsb3cgbnVsbCB2 YWx1ZXMKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICd0cnVlJywgJyQnIFJFVFVSTklORyBz cWxqc29uYl9qc29uX25vdF9udWxsKTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisg dHJ1ZQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAndHJ1ZScsICckJyBS RVRVUk5JTkcgc3FsanNvbmJfanNvbmJfbm90X251bGwpOworIGpzb25fdmFsdWUgCistLS0t LS0tLS0tLS0KKyB0cnVlCisoMSByb3cpCisKKy0tIFRlc3QgTlVMTCBjaGVja3MgZXhlY3V0 aW9uIGluIGRvbWFpbiB0eXBlcwogU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnJC5h JyBSRVRVUk5JTkcgc3FsanNvbmJfaW50X25vdF9udWxsKTsKIEVSUk9SOiAgZG9tYWluIHNx bGpzb25iX2ludF9ub3RfbnVsbCBkb2VzIG5vdCBhbGxvdyBudWxsIHZhbHVlcworU0VMRUNU IEpTT05fVkFMVUUoanNvbmIgJzEnLCAnJC5hJyBSRVRVUk5JTkcgc3FsanNvbmJfaW50X25v dF9udWxsIERFRkFVTFQgMiBPTiBFTVBUWSk7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0t LQorICAgICAgICAgIDIKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEn LCAnJC5hJyBSRVRVUk5JTkcgc3FsanNvbmJfaW50X25vdF9udWxsIERFRkFVTFQgTlVMTCBP TiBFTVBUWSk7CitFUlJPUjogIGRvbWFpbiBzcWxqc29uYl9pbnRfbm90X251bGwgZG9lcyBu b3QgYWxsb3cgbnVsbCB2YWx1ZXMKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgJyQu YScgUkVUVVJOSU5HIHNxbGpzb25iX2ludF9ub3RfbnVsbCBERUZBVUxUIDIgT04gRVJST1Ip OworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAgICAgICAgICAyCisoMSByb3cpCisK K1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgJyQuYScgUkVUVVJOSU5HIHNxbGpzb25i X2ludF9ub3RfbnVsbCBERUZBVUxUIE5VTEwgT04gRU1QVFkgREVGQVVMVCAyIE9OIEVSUk9S KTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgICAgICAgICAgMgorKDEgcm93KQor CiBTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICckLmEnIFJFVFVSTklORyBzcWxqc29u Yl9pbnRfbm90X251bGwgTlVMTCBPTiBFUlJPUik7CiBFUlJPUjogIGRvbWFpbiBzcWxqc29u Yl9pbnRfbm90X251bGwgZG9lcyBub3QgYWxsb3cgbnVsbCB2YWx1ZXMKIFNFTEVDVCBKU09O X1ZBTFVFKGpzb25iICcxJywgJyQuYScgUkVUVVJOSU5HIHNxbGpzb25iX2ludF9ub3RfbnVs bCBERUZBVUxUIE5VTEwgT04gRVJST1IpOwogRVJST1I6ICBkb21haW4gc3FsanNvbmJfaW50 X25vdF9udWxsIGRvZXMgbm90IGFsbG93IG51bGwgdmFsdWVzCitTRUxFQ1QgSlNPTl9WQUxV RShqc29uYiAnMScsICckLmEnIFJFVFVSTklORyBzcWxqc29uYl9qc29uX25vdF9udWxsKTsK K0VSUk9SOiAgZG9tYWluIHNxbGpzb25iX2pzb25fbm90X251bGwgZG9lcyBub3QgYWxsb3cg bnVsbCB2YWx1ZXMKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgJyQuYScgUkVUVVJO SU5HIHNxbGpzb25iX2pzb25fbm90X251bGwgREVGQVVMVCAnMicgT04gRU1QVFkpOworIGpz b25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAyCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZB TFVFKGpzb25iICcxJywgJyQuYScgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25fbm90X251bGwg REVGQVVMVCBOVUxMIE9OIEVNUFRZKTsKK0VSUk9SOiAgZG9tYWluIHNxbGpzb25iX2pzb25f bm90X251bGwgZG9lcyBub3QgYWxsb3cgbnVsbCB2YWx1ZXMKK1NFTEVDVCBKU09OX1ZBTFVF KGpzb25iICcxJywgJyQuYScgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25fbm90X251bGwgREVG QVVMVCAnMicgT04gRVJST1IpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAyCiso MSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgJyQuYScgUkVUVVJOSU5H IHNxbGpzb25iX2pzb25fbm90X251bGwgREVGQVVMVCBOVUxMIE9OIEVNUFRZIERFRkFVTFQg JzInIE9OIEVSUk9SKTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgMgorKDEgcm93 KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICckLmEnIFJFVFVSTklORyBzcWxq c29uYl9qc29uX25vdF9udWxsIE5VTEwgT04gRVJST1IpOworRVJST1I6ICBkb21haW4gc3Fs anNvbmJfanNvbl9ub3RfbnVsbCBkb2VzIG5vdCBhbGxvdyBudWxsIHZhbHVlcworU0VMRUNU IEpTT05fVkFMVUUoanNvbmIgJzEnLCAnJC5hJyBSRVRVUk5JTkcgc3FsanNvbmJfanNvbl9u b3RfbnVsbCBERUZBVUxUIE5VTEwgT04gRVJST1IpOworRVJST1I6ICBkb21haW4gc3FsanNv bmJfanNvbl9ub3RfbnVsbCBkb2VzIG5vdCBhbGxvdyBudWxsIHZhbHVlcworU0VMRUNUIEpT T05fVkFMVUUoanNvbmIgJzEnLCAnJC5hJyBSRVRVUk5JTkcgc3FsanNvbmJfanNvbmJfbm90 X251bGwpOworRVJST1I6ICBkb21haW4gc3FsanNvbmJfanNvbmJfbm90X251bGwgZG9lcyBu b3QgYWxsb3cgbnVsbCB2YWx1ZXMKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgJyQu YScgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25iX25vdF9udWxsIERFRkFVTFQgJzInIE9OIEVN UFRZKTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgMgorKDEgcm93KQorCitTRUxF Q1QgSlNPTl9WQUxVRShqc29uYiAnMScsICckLmEnIFJFVFVSTklORyBzcWxqc29uYl9qc29u Yl9ub3RfbnVsbCBERUZBVUxUIE5VTEwgT04gRU1QVFkpOworRVJST1I6ICBkb21haW4gc3Fs anNvbmJfanNvbmJfbm90X251bGwgZG9lcyBub3QgYWxsb3cgbnVsbCB2YWx1ZXMKK1NFTEVD VCBKU09OX1ZBTFVFKGpzb25iICcxJywgJyQuYScgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25i X25vdF9udWxsIERFRkFVTFQgJzInIE9OIEVSUk9SKTsKKyBqc29uX3ZhbHVlIAorLS0tLS0t LS0tLS0tCisgMgorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICck LmEnIFJFVFVSTklORyBzcWxqc29uYl9qc29uYl9ub3RfbnVsbCBERUZBVUxUIE5VTEwgT04g RU1QVFkgREVGQVVMVCAnMicgT04gRVJST1IpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0t LS0KKyAyCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgJyQuYScg UkVUVVJOSU5HIHNxbGpzb25iX2pzb25iX25vdF9udWxsIE5VTEwgT04gRVJST1IpOworRVJS T1I6ICBkb21haW4gc3FsanNvbmJfanNvbmJfbm90X251bGwgZG9lcyBub3QgYWxsb3cgbnVs bCB2YWx1ZXMKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgJyQuYScgUkVUVVJOSU5H IHNxbGpzb25iX2pzb25iX25vdF9udWxsIERFRkFVTFQgTlVMTCBPTiBFUlJPUik7CitFUlJP UjogIGRvbWFpbiBzcWxqc29uYl9qc29uYl9ub3RfbnVsbCBkb2VzIG5vdCBhbGxvdyBudWxs IHZhbHVlcworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJCcgUkVUVVJOSU5H IHNxbGpzb25iX2ludF9ub3RfbnVsbCk7CitFUlJPUjogIGRvbWFpbiBzcWxqc29uYl9pbnRf bm90X251bGwgZG9lcyBub3QgYWxsb3cgbnVsbCB2YWx1ZXMKK1NFTEVDVCBKU09OX1ZBTFVF KGpzb25iICdudWxsJywgJyQnIFJFVFVSTklORyBzcWxqc29uYl9pbnRfbm90X251bGwgREVG QVVMVCAyIE9OIEVNUFRZKTsKK0VSUk9SOiAgZG9tYWluIHNxbGpzb25iX2ludF9ub3RfbnVs bCBkb2VzIG5vdCBhbGxvdyBudWxsIHZhbHVlcworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIg J251bGwnLCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX2ludF9ub3RfbnVsbCBERUZBVUxUIDIg T04gRVJST1IpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAgICAgICAgICAyCiso MSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdudWxsJywgJyQnIFJFVFVSTklO RyBzcWxqc29uYl9pbnRfbm90X251bGwgTlVMTCBPTiBFUlJPUik7CitFUlJPUjogIGRvbWFp biBzcWxqc29uYl9pbnRfbm90X251bGwgZG9lcyBub3QgYWxsb3cgbnVsbCB2YWx1ZXMKK1NF TEVDVCBKU09OX1ZBTFVFKGpzb25iICdudWxsJywgJyQnIFJFVFVSTklORyBzcWxqc29uYl9p bnRfbm90X251bGwgREVGQVVMVCBOVUxMIE9OIEVSUk9SKTsKK0VSUk9SOiAgZG9tYWluIHNx bGpzb25iX2ludF9ub3RfbnVsbCBkb2VzIG5vdCBhbGxvdyBudWxsIHZhbHVlcworU0VMRUNU IEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25f bm90X251bGwpOworRVJST1I6ICBkb21haW4gc3FsanNvbmJfanNvbl9ub3RfbnVsbCBkb2Vz IG5vdCBhbGxvdyBudWxsIHZhbHVlcworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwn LCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25fbm90X251bGwgREVGQVVMVCAnMicgT04g RU1QVFkpOworRVJST1I6ICBkb21haW4gc3FsanNvbmJfanNvbl9ub3RfbnVsbCBkb2VzIG5v dCBhbGxvdyBudWxsIHZhbHVlcworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAn JCcgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25fbm90X251bGwgREVGQVVMVCAnMicgT04gRVJS T1IpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAyCisoMSByb3cpCisKK1NFTEVD VCBKU09OX1ZBTFVFKGpzb25iICdudWxsJywgJyQnIFJFVFVSTklORyBzcWxqc29uYl9qc29u X25vdF9udWxsIE5VTEwgT04gRVJST1IpOworRVJST1I6ICBkb21haW4gc3FsanNvbmJfanNv bl9ub3RfbnVsbCBkb2VzIG5vdCBhbGxvdyBudWxsIHZhbHVlcworU0VMRUNUIEpTT05fVkFM VUUoanNvbmIgJ251bGwnLCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25fbm90X251bGwg REVGQVVMVCBOVUxMIE9OIEVSUk9SKTsKK0VSUk9SOiAgZG9tYWluIHNxbGpzb25iX2pzb25f bm90X251bGwgZG9lcyBub3QgYWxsb3cgbnVsbCB2YWx1ZXMKK1NFTEVDVCBKU09OX1ZBTFVF KGpzb25iICdudWxsJywgJyQnIFJFVFVSTklORyBzcWxqc29uYl9qc29uYl9ub3RfbnVsbCk7 CitFUlJPUjogIGRvbWFpbiBzcWxqc29uYl9qc29uYl9ub3RfbnVsbCBkb2VzIG5vdCBhbGxv dyBudWxsIHZhbHVlcworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJCcgUkVU VVJOSU5HIHNxbGpzb25iX2pzb25iX25vdF9udWxsIERFRkFVTFQgJzInIE9OIEVNUFRZKTsK K0VSUk9SOiAgZG9tYWluIHNxbGpzb25iX2pzb25iX25vdF9udWxsIGRvZXMgbm90IGFsbG93 IG51bGwgdmFsdWVzCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckJyBSRVRV Uk5JTkcgc3FsanNvbmJfanNvbmJfbm90X251bGwgREVGQVVMVCAnMicgT04gRVJST1IpOwor IGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAyCisoMSByb3cpCisKK1NFTEVDVCBKU09O X1ZBTFVFKGpzb25iICdudWxsJywgJyQnIFJFVFVSTklORyBzcWxqc29uYl9qc29uYl9ub3Rf bnVsbCBOVUxMIE9OIEVSUk9SKTsKK0VSUk9SOiAgZG9tYWluIHNxbGpzb25iX2pzb25iX25v dF9udWxsIGRvZXMgbm90IGFsbG93IG51bGwgdmFsdWVzCitTRUxFQ1QgSlNPTl9WQUxVRShq c29uYiAnbnVsbCcsICckJyBSRVRVUk5JTkcgc3FsanNvbmJfanNvbmJfbm90X251bGwgREVG QVVMVCBOVUxMIE9OIEVSUk9SKTsKK0VSUk9SOiAgZG9tYWluIHNxbGpzb25iX2pzb25iX25v dF9udWxsIGRvZXMgbm90IGFsbG93IG51bGwgdmFsdWVzCitTRUxFQ1QgSlNPTl9WQUxVRShq c29uYiAnMCcsICckJyBSRVRVUk5JTkcgc3FsanNvbmJfanNvbl9ub3RfbnVsbCk7CitFUlJP UjogIGRvbWFpbiBzcWxqc29uYl9qc29uX25vdF9udWxsIGRvZXMgbm90IGFsbG93IG51bGwg dmFsdWVzCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMCcsICckJyBSRVRVUk5JTkcgc3Fs anNvbmJfanNvbl9ub3RfbnVsbCBFUlJPUiBPTiBFUlJPUik7CitFUlJPUjogIHZhbHVlIGZv ciBkb21haW4gc3FsanNvbmJfanNvbl9ub3RfbnVsbCB2aW9sYXRlcyBjaGVjayBjb25zdHJh aW50ICJzcWxqc29uYl9qc29uX25vdF9udWxsX2NoZWNrIgorU0VMRUNUIEpTT05fVkFMVUUo anNvbmIgJzAnLCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25fbm90X251bGwgREVGQVVM VCAnMicgT04gRVJST1IpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAyCisoMSBy b3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcwJywgJyQnIFJFVFVSTklORyBzcWxq c29uYl9qc29uYl9ub3RfbnVsbCk7CitFUlJPUjogIGRvbWFpbiBzcWxqc29uYl9qc29uYl9u b3RfbnVsbCBkb2VzIG5vdCBhbGxvdyBudWxsIHZhbHVlcworU0VMRUNUIEpTT05fVkFMVUUo anNvbmIgJzAnLCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25iX25vdF9udWxsIEVSUk9S IE9OIEVSUk9SKTsKK0VSUk9SOiAgdmFsdWUgZm9yIGRvbWFpbiBzcWxqc29uYl9qc29uYl9u b3RfbnVsbCB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJzcWxqc29uYl9qc29uYl9ub3Rf bnVsbF9jaGVjayIKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcwJywgJyQnIFJFVFVSTklO RyBzcWxqc29uYl9qc29uYl9ub3RfbnVsbCBERUZBVUxUICcyJyBPTiBFUlJPUik7CisganNv bl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorIDIKKygxIHJvdykKKworLS0gVGVzdCByZXR1cm5p bmcgb2Ygbm9uLXNjYWxhciBpdGVtcwogU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ1tdJywg JyQnKTsKICBqc29uX3ZhbHVlIAogLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9zcmMvdGVz dC9yZWdyZXNzL3NxbC9qc29uYl9zcWxqc29uLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L2pzb25iX3NxbGpzb24uc3FsCmluZGV4IGZmZjI1Mzc0ODA4Li5kNzAxMDRiNzBlZiAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvanNvbmJfc3FsanNvbi5zcWwKKysrIGIv c3JjL3Rlc3QvcmVncmVzcy9zcWwvanNvbmJfc3FsanNvbi5zcWwKQEAgLTgyLDEyICs4Miw3 MyBAQCBTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnIjEyMyInLCAnJCcgUkVUVVJOSU5HIGlu dCkgKyAyMzQ7CiAKIFNFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciMjAxNy0wMi0yMCInLCAn JCcgUkVUVVJOSU5HIGRhdGUpICsgOTsKIAotLS0gVGVzdCBOVUxMIGNoZWNrcyBleGVjdXRp b24gaW4gZG9tYWluIHR5cGVzCistLSBUZXN0IGZvciBkb21haW4gdHlwZXMKIENSRUFURSBE T01BSU4gc3FsanNvbmJfaW50X25vdF9udWxsIEFTIGludCBOT1QgTlVMTDsKK0NSRUFURSBE T01BSU4gc3FsanNvbmJfanNvbl9ub3RfbnVsbCBBUyBqc29uIE5PVCBOVUxMIENIRUNLIChW QUxVRTo6dGV4dCA8PiAnMCcpOworQ1JFQVRFIERPTUFJTiBzcWxqc29uYl9qc29uYl9ub3Rf bnVsbCBBUyBqc29uYiBOT1QgTlVMTCBDSEVDSyAoVkFMVUUgPD4gJzAnKTsKKworLS0gVGVz dCBjYXN0aW5nIHRvIGpzb25bYl0gZG9tYWlucyAoaXRlbXMgY2FzdGVkIGFzIGlzLCBzdHJp bmdzIGFyZSBub3QgdW5xdW90ZWQpCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnIjEiJywg JyQnIFJFVFVSTklORyBzcWxqc29uYl9qc29uX25vdF9udWxsKTsKK1NFTEVDVCBKU09OX1ZB TFVFKGpzb25iICciMSInLCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25iX25vdF9udWxs KTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgJyQnIFJFVFVSTklORyBzcWxqc29u Yl9qc29uX25vdF9udWxsKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgJyQnIFJF VFVSTklORyBzcWxqc29uYl9qc29uYl9ub3RfbnVsbCk7CitTRUxFQ1QgSlNPTl9WQUxVRShq c29uYiAnbnVsbCcsICckJyBSRVRVUk5JTkcgc3FsanNvbmJfanNvbl9ub3RfbnVsbCk7CitT RUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckJyBSRVRVUk5JTkcgc3FsanNvbmJf anNvbmJfbm90X251bGwpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ3RydWUnLCAnJCcg UkVUVVJOSU5HIHNxbGpzb25iX2pzb25fbm90X251bGwpOworU0VMRUNUIEpTT05fVkFMVUUo anNvbmIgJ3RydWUnLCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25iX25vdF9udWxsKTsK KworLS0gVGVzdCBOVUxMIGNoZWNrcyBleGVjdXRpb24gaW4gZG9tYWluIHR5cGVzCiBTRUxF Q1QgSlNPTl9WQUxVRShqc29uYiAnMScsICckLmEnIFJFVFVSTklORyBzcWxqc29uYl9pbnRf bm90X251bGwpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnJC5hJyBSRVRVUk5J Tkcgc3FsanNvbmJfaW50X25vdF9udWxsIERFRkFVTFQgMiBPTiBFTVBUWSk7CitTRUxFQ1Qg SlNPTl9WQUxVRShqc29uYiAnMScsICckLmEnIFJFVFVSTklORyBzcWxqc29uYl9pbnRfbm90 X251bGwgREVGQVVMVCBOVUxMIE9OIEVNUFRZKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25i ICcxJywgJyQuYScgUkVUVVJOSU5HIHNxbGpzb25iX2ludF9ub3RfbnVsbCBERUZBVUxUIDIg T04gRVJST1IpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnJC5hJyBSRVRVUk5J Tkcgc3FsanNvbmJfaW50X25vdF9udWxsIERFRkFVTFQgTlVMTCBPTiBFTVBUWSBERUZBVUxU IDIgT04gRVJST1IpOwogU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnJC5hJyBSRVRV Uk5JTkcgc3FsanNvbmJfaW50X25vdF9udWxsIE5VTEwgT04gRVJST1IpOwogU0VMRUNUIEpT T05fVkFMVUUoanNvbmIgJzEnLCAnJC5hJyBSRVRVUk5JTkcgc3FsanNvbmJfaW50X25vdF9u dWxsIERFRkFVTFQgTlVMTCBPTiBFUlJPUik7CiAKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25i ICcxJywgJyQuYScgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25fbm90X251bGwpOworU0VMRUNU IEpTT05fVkFMVUUoanNvbmIgJzEnLCAnJC5hJyBSRVRVUk5JTkcgc3FsanNvbmJfanNvbl9u b3RfbnVsbCBERUZBVUxUICcyJyBPTiBFTVBUWSk7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29u YiAnMScsICckLmEnIFJFVFVSTklORyBzcWxqc29uYl9qc29uX25vdF9udWxsIERFRkFVTFQg TlVMTCBPTiBFTVBUWSk7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICckLmEnIFJF VFVSTklORyBzcWxqc29uYl9qc29uX25vdF9udWxsIERFRkFVTFQgJzInIE9OIEVSUk9SKTsK K1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgJyQuYScgUkVUVVJOSU5HIHNxbGpzb25i X2pzb25fbm90X251bGwgREVGQVVMVCBOVUxMIE9OIEVNUFRZIERFRkFVTFQgJzInIE9OIEVS Uk9SKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgJyQuYScgUkVUVVJOSU5HIHNx bGpzb25iX2pzb25fbm90X251bGwgTlVMTCBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9WQUxV RShqc29uYiAnMScsICckLmEnIFJFVFVSTklORyBzcWxqc29uYl9qc29uX25vdF9udWxsIERF RkFVTFQgTlVMTCBPTiBFUlJPUik7CisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywg JyQuYScgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25iX25vdF9udWxsKTsKK1NFTEVDVCBKU09O X1ZBTFVFKGpzb25iICcxJywgJyQuYScgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25iX25vdF9u dWxsIERFRkFVTFQgJzInIE9OIEVNUFRZKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcx JywgJyQuYScgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25iX25vdF9udWxsIERFRkFVTFQgTlVM TCBPTiBFTVBUWSk7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICckLmEnIFJFVFVS TklORyBzcWxqc29uYl9qc29uYl9ub3RfbnVsbCBERUZBVUxUICcyJyBPTiBFUlJPUik7CitT RUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICckLmEnIFJFVFVSTklORyBzcWxqc29uYl9q c29uYl9ub3RfbnVsbCBERUZBVUxUIE5VTEwgT04gRU1QVFkgREVGQVVMVCAnMicgT04gRVJS T1IpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnJC5hJyBSRVRVUk5JTkcgc3Fs anNvbmJfanNvbmJfbm90X251bGwgTlVMTCBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9WQUxV RShqc29uYiAnMScsICckLmEnIFJFVFVSTklORyBzcWxqc29uYl9qc29uYl9ub3RfbnVsbCBE RUZBVUxUIE5VTEwgT04gRVJST1IpOworCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVs bCcsICckJyBSRVRVUk5JTkcgc3FsanNvbmJfaW50X25vdF9udWxsKTsKK1NFTEVDVCBKU09O X1ZBTFVFKGpzb25iICdudWxsJywgJyQnIFJFVFVSTklORyBzcWxqc29uYl9pbnRfbm90X251 bGwgREVGQVVMVCAyIE9OIEVNUFRZKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdudWxs JywgJyQnIFJFVFVSTklORyBzcWxqc29uYl9pbnRfbm90X251bGwgREVGQVVMVCAyIE9OIEVS Uk9SKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdudWxsJywgJyQnIFJFVFVSTklORyBz cWxqc29uYl9pbnRfbm90X251bGwgTlVMTCBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9WQUxV RShqc29uYiAnbnVsbCcsICckJyBSRVRVUk5JTkcgc3FsanNvbmJfaW50X25vdF9udWxsIERF RkFVTFQgTlVMTCBPTiBFUlJPUik7CisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdudWxs JywgJyQnIFJFVFVSTklORyBzcWxqc29uYl9qc29uX25vdF9udWxsKTsKK1NFTEVDVCBKU09O X1ZBTFVFKGpzb25iICdudWxsJywgJyQnIFJFVFVSTklORyBzcWxqc29uYl9qc29uX25vdF9u dWxsIERFRkFVTFQgJzInIE9OIEVNUFRZKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdu dWxsJywgJyQnIFJFVFVSTklORyBzcWxqc29uYl9qc29uX25vdF9udWxsIERFRkFVTFQgJzIn IE9OIEVSUk9SKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdudWxsJywgJyQnIFJFVFVS TklORyBzcWxqc29uYl9qc29uX25vdF9udWxsIE5VTEwgT04gRVJST1IpOworU0VMRUNUIEpT T05fVkFMVUUoanNvbmIgJ251bGwnLCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25fbm90 X251bGwgREVGQVVMVCBOVUxMIE9OIEVSUk9SKTsKKworU0VMRUNUIEpTT05fVkFMVUUoanNv bmIgJ251bGwnLCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25iX25vdF9udWxsKTsKK1NF TEVDVCBKU09OX1ZBTFVFKGpzb25iICdudWxsJywgJyQnIFJFVFVSTklORyBzcWxqc29uYl9q c29uYl9ub3RfbnVsbCBERUZBVUxUICcyJyBPTiBFTVBUWSk7CitTRUxFQ1QgSlNPTl9WQUxV RShqc29uYiAnbnVsbCcsICckJyBSRVRVUk5JTkcgc3FsanNvbmJfanNvbmJfbm90X251bGwg REVGQVVMVCAnMicgT04gRVJST1IpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwn LCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25iX25vdF9udWxsIE5VTEwgT04gRVJST1Ip OworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJCcgUkVUVVJOSU5HIHNxbGpz b25iX2pzb25iX25vdF9udWxsIERFRkFVTFQgTlVMTCBPTiBFUlJPUik7CisKK1NFTEVDVCBK U09OX1ZBTFVFKGpzb25iICcwJywgJyQnIFJFVFVSTklORyBzcWxqc29uYl9qc29uX25vdF9u dWxsKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcwJywgJyQnIFJFVFVSTklORyBzcWxq c29uYl9qc29uX25vdF9udWxsIEVSUk9SIE9OIEVSUk9SKTsKK1NFTEVDVCBKU09OX1ZBTFVF KGpzb25iICcwJywgJyQnIFJFVFVSTklORyBzcWxqc29uYl9qc29uX25vdF9udWxsIERFRkFV TFQgJzInIE9OIEVSUk9SKTsKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzAnLCAnJCcg UkVUVVJOSU5HIHNxbGpzb25iX2pzb25iX25vdF9udWxsKTsKK1NFTEVDVCBKU09OX1ZBTFVF KGpzb25iICcwJywgJyQnIFJFVFVSTklORyBzcWxqc29uYl9qc29uYl9ub3RfbnVsbCBFUlJP UiBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMCcsICckJyBSRVRVUk5J Tkcgc3FsanNvbmJfanNvbmJfbm90X251bGwgREVGQVVMVCAnMicgT04gRVJST1IpOworCist LSBUZXN0IHJldHVybmluZyBvZiBub24tc2NhbGFyIGl0ZW1zCiBTRUxFQ1QgSlNPTl9WQUxV RShqc29uYiAnW10nLCAnJCcpOwogU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ1tdJywgJyQn IEVSUk9SIE9OIEVSUk9SKTsKIFNFTEVDVCBKU09OX1ZBTFVFKGpzb25iICd7fScsICckJyk7 Ci0tIAoyLjI1LjEKCg== --------------4f0L3EFiQJb2iiAozUzeF43y Content-Type: text/x-patch; charset=UTF-8; name="v7-0003-Add-EEOP_SUBTRANS-executor-step.patch" Content-Disposition: attachment; filename="v7-0003-Add-EEOP_SUBTRANS-executor-step.patch" Content-Transfer-Encoding: base64 RnJvbSBlYTA3MTEzMzIwODg0NGQ1ODQzYTQ4MDMwNzVjMTUzZWRlMDdlNDA5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBOaWtpdGEgR2x1a2hvdiA8bi5nbHVob3ZAcG9zdGdy ZXNwcm8ucnU+CkRhdGU6IE1vbiwgMTUgQXVnIDIwMjIgMTU6MDQ6MTcgKzAzMDAKU3ViamVj dDogW1BBVENIIHY3IDMvNF0gQWRkIEVFT1BfU1VCVFJBTlMgZXhlY3V0b3Igc3RlcAoKLS0t CiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5jIHwgMTAyICsrKysrKysr KysrLQogc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF9leHByLmMgICB8IDIxOCArKysr KysrKysrKysrKysrKysrKysrKystLQogc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF90 eXBlcy5jICB8ICAgMiArCiBzcmMvaW5jbHVkZS9leGVjdXRvci9leGVjRXhwci5oICAgICAg IHwgIDE1ICsrCiBzcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCAgICAgICAgIHwgICA1 ICsKIDUgZmlsZXMgY2hhbmdlZCwgMzMwIGluc2VydGlvbnMoKyksIDEyIGRlbGV0aW9ucygt KQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMg Yi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5jCmluZGV4IGJmMTQxYTY2 MDY2Li42Njg5ODE5OGYzMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y0V4cHJJbnRlcnAuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVy cC5jCkBAIC0xNTgsNiArMTU4LDggQEAgc3RhdGljIFR1cGxlRGVzYyBnZXRfY2FjaGVkX3Jv d3R5cGUoT2lkIHR5cGVfaWQsIGludDMyIHR5cG1vZCwKIAkJCQkJCQkJCWJvb2wgKmNoYW5n ZWQpOwogc3RhdGljIHZvaWQgRXhlY0V2YWxSb3dOdWxsSW50KEV4cHJTdGF0ZSAqc3RhdGUs IEV4cHJFdmFsU3RlcCAqb3AsCiAJCQkJCQkJICAgRXhwckNvbnRleHQgKmVjb250ZXh0LCBi b29sIGNoZWNraXNudWxsKTsKK3N0YXRpYyB2b2lkIEV4ZWNFdmFsU3VidHJhbnNJbnRlcnAo RXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCwKKwkJCQkJCQkJICAgRXhwckNv bnRleHQgKmVjb250ZXh0KTsKIAogLyogZmFzdC1wYXRoIGV2YWx1YXRpb24gZnVuY3Rpb25z ICovCiBzdGF0aWMgRGF0dW0gRXhlY0p1c3RJbm5lclZhcihFeHByU3RhdGUgKnN0YXRlLCBF eHByQ29udGV4dCAqZWNvbnRleHQsIGJvb2wgKmlzbnVsbCk7CkBAIC0zOTgsNyArNDAwLDgg QEAgRXhlY1JlYWR5SW50ZXJwcmV0ZWRFeHByKEV4cHJTdGF0ZSAqc3RhdGUpCiAgKiAoT25s eSBhcHBsaWVzIHdoZW4gRUVPX1VTRV9DT01QVVRFRF9HT1RPIGlzIGRlZmluZWQuKQogICov CiBzdGF0aWMgRGF0dW0KLUV4ZWNJbnRlcnBFeHByKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJD b250ZXh0ICplY29udGV4dCwgYm9vbCAqaXNudWxsKQorRXhlY0ludGVycEV4cHJTdGVwKEV4 cHJTdGF0ZSAqc3RhdGUsIGludCBzdGVwbm8sCisJCQkJICAgRXhwckNvbnRleHQgKmVjb250 ZXh0LCBib29sICppc251bGwpCiB7CiAJRXhwckV2YWxTdGVwICpvcDsKIAlUdXBsZVRhYmxl U2xvdCAqcmVzdWx0c2xvdDsKQEAgLTQ4OCw2ICs0OTEsNyBAQCBFeGVjSW50ZXJwRXhwcihF eHByU3RhdGUgKnN0YXRlLCBFeHByQ29udGV4dCAqZWNvbnRleHQsIGJvb2wgKmlzbnVsbCkK IAkJJiZDQVNFX0VFT1BfR1JPVVBJTkdfRlVOQywKIAkJJiZDQVNFX0VFT1BfV0lORE9XX0ZV TkMsCiAJCSYmQ0FTRV9FRU9QX1NVQlBMQU4sCisJCSYmQ0FTRV9FRU9QX1NVQlRSQU5TLAog CQkmJkNBU0VfRUVPUF9KU09OX0NPTlNUUlVDVE9SLAogCQkmJkNBU0VfRUVPUF9JU19KU09O LAogCQkmJkNBU0VfRUVPUF9KU09ORVhQUiwKQEAgLTUxOSw3ICs1MjMsNyBAQCBFeGVjSW50 ZXJwRXhwcihFeHByU3RhdGUgKnN0YXRlLCBFeHByQ29udGV4dCAqZWNvbnRleHQsIGJvb2wg KmlzbnVsbCkKICNlbmRpZgkJCQkJCQkvKiBFRU9fVVNFX0NPTVBVVEVEX0dPVE8gKi8KIAog CS8qIHNldHVwIHN0YXRlICovCi0Jb3AgPSBzdGF0ZS0+c3RlcHM7CisJb3AgPSAmc3RhdGUt PnN0ZXBzW3N0ZXBub107CiAJcmVzdWx0c2xvdCA9IHN0YXRlLT5yZXN1bHRzbG90OwogCWlu bmVyc2xvdCA9IGVjb250ZXh0LT5lY3h0X2lubmVydHVwbGU7CiAJb3V0ZXJzbG90ID0gZWNv bnRleHQtPmVjeHRfb3V0ZXJ0dXBsZTsKQEAgLTE4MjcsNiArMTgzMSwxNiBAQCBFeGVjSW50 ZXJwRXhwcihFeHByU3RhdGUgKnN0YXRlLCBFeHByQ29udGV4dCAqZWNvbnRleHQsIGJvb2wg KmlzbnVsbCkKIAkJCUVFT19ORVhUKCk7CiAJCX0KIAorCQlFRU9fQ0FTRShFRU9QX1NVQlRS QU5TKQorCQl7CisJCQkvKiB0b28gY29tcGxleCBmb3IgYW4gaW5saW5lIGltcGxlbWVudGF0 aW9uICovCisJCQlpZiAoRXhlY0V2YWxTdWJ0cmFucyhzdGF0ZSwgb3AsIGVjb250ZXh0LAor CQkJCQkJCQkgRXhlY0V2YWxTdWJ0cmFuc0ludGVycCkpCisJCQkJRUVPX0pVTVAob3AtPmQu c3VidHJhbnMuanVtcF9kb25lKTsKKwkJCWVsc2UKKwkJCQlFRU9fSlVNUChvcC0+ZC5zdWJ0 cmFucy5qdW1wX2Vycm9yKTsKKwkJfQorCiAJCUVFT19DQVNFKEVFT1BfSlNPTl9DT05TVFJV Q1RPUikKIAkJewogCQkJLyogdG9vIGNvbXBsZXggZm9yIGFuIGlubGluZSBpbXBsZW1lbnRh dGlvbiAqLwpAQCAtMTg2MSw2ICsxODc1LDEyIEBAIG91dDoKIAlyZXR1cm4gc3RhdGUtPnJl c3ZhbHVlOwogfQogCitzdGF0aWMgRGF0dW0KK0V4ZWNJbnRlcnBFeHByKEV4cHJTdGF0ZSAq c3RhdGUsIEV4cHJDb250ZXh0ICplY29udGV4dCwgYm9vbCAqaXNudWxsKQoreworCXJldHVy biBFeGVjSW50ZXJwRXhwclN0ZXAoc3RhdGUsIDAsIGVjb250ZXh0LCBpc251bGwpOworfQor CiAvKgogICogRXhwcmVzc2lvbiBldmFsdWF0aW9uIGNhbGxiYWNrIHRoYXQgcGVyZm9ybXMg ZXh0cmEgY2hlY2tzIGJlZm9yZSBleGVjdXRpbmcKICAqIHRoZSBleHByZXNzaW9uLiBEZWNs YXJlZCBleHRlcm4gc28gb3RoZXIgbWV0aG9kcyBvZiBleGVjdXRpb24gY2FuIHVzZSBpdApA QCAtNDYyMCw2ICs0NjQwLDg0IEBAIEV4ZWNBZ2dQbGFpblRyYW5zQnlSZWYoQWdnU3RhdGUg KmFnZ3N0YXRlLCBBZ2dTdGF0ZVBlclRyYW5zIHBlcnRyYW5zLAogCU1lbW9yeUNvbnRleHRT d2l0Y2hUbyhvbGRDb250ZXh0KTsKIH0KIAorLyoKKyAqIEV4ZWN1dGUgc3ViZXhwcmVzc2lv biBzdGVwcyB1c2luZyByZWN1cnNpdmUgaW50ZXJwcmV0ZXIgY2FsbC4KKyAqICJvcCIgcG9p bnRzIEVFT1BfU1VCVFJBTlMgc3RlcC4KKyAqLworc3RhdGljIHZvaWQKK0V4ZWNFdmFsU3Vi dHJhbnNJbnRlcnAoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCwKKwkJCQkJ ICAgRXhwckNvbnRleHQgKmVjb250ZXh0KQoreworCS8qIFJlY3Vyc2l2ZWx5IGNhbGwgaW50 ZXJwcmV0ZXIgZm9yIG5leHQgc3RlcCBpZ25vcmluZyByZXN1bHQgKi8KKwlib29sCQlpc251 bGw7CisKKwkodm9pZCkgRXhlY0ludGVycEV4cHJTdGVwKHN0YXRlLCBvcCAtIHN0YXRlLT5z dGVwcyArIDEsIGVjb250ZXh0LAorCQkJCQkJCSAgJmlzbnVsbCk7Cit9CisKKy8qCisgKiBF eGVjdXRlIEVFT1BfU1VCVFJBTlMsIGNhbGxpbmcgImV2YWwiIGZ1bmN0aW9uIGluc2lkZSBh CisgKiBzdWJ0cmFuc2FjdGlvbi4gIFRoaXMgZnVuY3Rpb24gZXhlY3V0ZXMgc2VxdWVuY2Ug b2Ygc3ViZXhwcmVzc2lvbgorICogc3RlcHMgdGhhdCBiZWdpbnMgcmlnaHQgYWZ0ZXIgY3Vy cmVudCBzdGVwIGFuZCBlbmRzIHdpdGggRUVPUF9ET05FLgorICovCitib29sCitFeGVjRXZh bFN1YnRyYW5zKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAqb3AsCisJCQkJCQkg RXhwckNvbnRleHQgKmVjb250ZXh0LCBFeGVjRXZhbFN1YnJvdXRpbmUgZXZhbCkKK3sKKwlN ZW1vcnlDb250ZXh0IG9sZGNvbnRleHQgPSBDdXJyZW50TWVtb3J5Q29udGV4dDsKKwlSZXNv dXJjZU93bmVyIG9sZG93bmVyID0gQ3VycmVudFJlc291cmNlT3duZXI7CisJYm9vbAkJZXJy b3I7CisKKwkvKgorCSAqIFdlIHNob3VsZCBjYXRjaCBleGNlcHRpb25zIG9mIGNhdGVnb3J5 IEVSUkNPREVfREFUQV9FWENFUFRJT04gYW5kCisJICogZXhlY3V0ZSB0aGUgY29ycmVzcG9u ZGluZyBPTiBFUlJPUiBiZWhhdmlvciB0aGVuLgorCSAqLworCUJlZ2luSW50ZXJuYWxTdWJU cmFuc2FjdGlvbihOVUxMKTsKKwkvKiBXYW50IHRvIGV4ZWN1dGUgZXhwcmVzc2lvbnMgaW5z aWRlIGZ1bmN0aW9uJ3MgbWVtb3J5IGNvbnRleHQgKi8KKwlNZW1vcnlDb250ZXh0U3dpdGNo VG8ob2xkY29udGV4dCk7CisKKwlQR19UUlkoKTsKKwl7CisJCWV2YWwoc3RhdGUsIG9wLCBl Y29udGV4dCk7CisKKwkJLyogQ29tbWl0IHRoZSBpbm5lciB0cmFuc2FjdGlvbiwgcmV0dXJu IHRvIG91dGVyIHhhY3QgY29udGV4dCAqLworCQlSZWxlYXNlQ3VycmVudFN1YlRyYW5zYWN0 aW9uKCk7CisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKwkJQ3VycmVu dFJlc291cmNlT3duZXIgPSBvbGRvd25lcjsKKworCQllcnJvciA9IGZhbHNlOworCX0KKwlQ R19DQVRDSCgpOworCXsKKwkJRXJyb3JEYXRhICAqZWRhdGE7CisJCWludAkJCWVjYXRlZ29y eTsKKworCQkvKiBTYXZlIGVycm9yIGluZm8gaW4gb2xkY29udGV4dCAqLworCQlNZW1vcnlD b250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisJCWVkYXRhID0gQ29weUVycm9yRGF0YSgp OworCQlGbHVzaEVycm9yU3RhdGUoKTsKKworCQkvKiBBYm9ydCB0aGUgaW5uZXIgdHJhbnNh Y3Rpb24gKi8KKwkJUm9sbGJhY2tBbmRSZWxlYXNlQ3VycmVudFN1YlRyYW5zYWN0aW9uKCk7 CisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKwkJQ3VycmVudFJlc291 cmNlT3duZXIgPSBvbGRvd25lcjsKKworCQllY2F0ZWdvcnkgPSBFUlJDT0RFX1RPX0NBVEVH T1JZKGVkYXRhLT5zcWxlcnJjb2RlKTsKKworCQlpZiAoZWNhdGVnb3J5ICE9IEVSUkNPREVf REFUQV9FWENFUFRJT04gJiYgCS8qIGpzb25wYXRoIGFuZCBvdGhlciBkYXRhIGVycm9ycyAq LworCQkJZWNhdGVnb3J5ICE9IEVSUkNPREVfSU5URUdSSVRZX0NPTlNUUkFJTlRfVklPTEFU SU9OKSAvKiBkb21haW4gZXJyb3JzICovCisJCQlSZVRocm93RXJyb3IoZWRhdGEpOworCisJ CSpvcC0+cmVzdmFsdWUgPSAoRGF0dW0pIDA7CisJCSpvcC0+cmVzbnVsbCA9IHRydWU7CisK KwkJZXJyb3IgPSB0cnVlOworCX0KKwlQR19FTkRfVFJZKCk7CisKKwlyZXR1cm4gIWVycm9y OworfQorCiAvKgogICogRXZhbHVhdGUgYSBKU09OIGNvbnN0cnVjdG9yIGV4cHJlc3Npb24u CiAgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfZXhwci5j IGIvc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF9leHByLmMKaW5kZXggZmQ3MjYzMGY1 ZTYuLjY1NjgyMjhiOTk2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9qaXQvbGx2bS9sbHZt aml0X2V4cHIuYworKysgYi9zcmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X2V4cHIuYwpA QCAtNDUsMTQgKzQ1LDIwIEBACiAjaW5jbHVkZSAidXRpbHMvdHlwY2FjaGUuaCIKICNpbmNs dWRlICJ1dGlscy94bWwuaCIKIAorI2RlZmluZSBMTFZNSklUX1NVQlRSQU5TX1JFQ1VSU0lW RQorCiB0eXBlZGVmIHN0cnVjdCBDb21waWxlZEV4cHJTdGF0ZQogewogCUxMVk1KaXRDb250 ZXh0ICpjb250ZXh0OwogCWNvbnN0IGNoYXIgKmZ1bmNuYW1lOwogfSBDb21waWxlZEV4cHJT dGF0ZTsKIAotCiBzdGF0aWMgRGF0dW0gRXhlY1J1bkNvbXBpbGVkRXhwcihFeHByU3RhdGUg KnN0YXRlLCBFeHByQ29udGV4dCAqZWNvbnRleHQsIGJvb2wgKmlzTnVsbCk7CitzdGF0aWMg dm9pZCBFeGVjRXZhbFN1YnRyYW5zQ29tcGlsZWQoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2 YWxTdGVwICpvcCwKKwkJCQkJCQkJCSBFeHByQ29udGV4dCAqZWNvbnRleHQpOworI2lmZGVm IExMVk1KSVRfU1VCVFJBTlNfUkVDVVJTSVZFCitzdGF0aWMgRGF0dW0gRXhlY1J1bkNvbXBp bGVFeHByUmVjdXJzaXZlKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJDb250ZXh0ICplY29udGV4 dCwgYm9vbCAqaXNOdWxsKTsKKyNlbmRpZgogCiBzdGF0aWMgTExWTVZhbHVlUmVmIEJ1aWxk VjFDYWxsKExMVk1KaXRDb250ZXh0ICpjb250ZXh0LCBMTFZNQnVpbGRlclJlZiBiLAogCQkJ CQkJCQlMTFZNTW9kdWxlUmVmIG1vZCwgRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sCkBAIC03 MCwxNSArNzYsMTUgQEAgc3RhdGljIExMVk1WYWx1ZVJlZiBjcmVhdGVfTGlmZXRpbWVFbmQo TExWTU1vZHVsZVJlZiBtb2QpOwogCQkJCQkgICBsZW5ndGhvZigoKExMVk1WYWx1ZVJlZltd KXtfX1ZBX0FSR1NfX30pKSwgXAogCQkJCQkgICAoKExMVk1WYWx1ZVJlZltdKXtfX1ZBX0FS R1NfX30pKQogCi0KIC8qCi0gKiBKSVQgY29tcGlsZSBleHByZXNzaW9uLgorICogSklUIGNv bXBpbGUgZXhwcmVzc2lvbiBzdGFyaW5nIGZyb20gdGhlIHNwZWNpZmllZCBzdGVwLgogICov Ci1ib29sCi1sbHZtX2NvbXBpbGVfZXhwcihFeHByU3RhdGUgKnN0YXRlKQorc3RhdGljIGJv b2wKK2xsdm1fY29tcGlsZV9leHByX3N0ZXAoRXhwclN0YXRlICpzdGF0ZSwgaW50IHN0YXJ0 X29wbm8pCiB7CiAJUGxhblN0YXRlICAqcGFyZW50ID0gc3RhdGUtPnBhcmVudDsKIAljaGFy CSAgICpmdW5jbmFtZTsKKwljb25zdCBjaGFyICpmdW5jdHlwZW5hbWUgPSAiVHlwZUV4cHJT dGF0ZUV2YWxGdW5jIjsKIAogCUxMVk1KaXRDb250ZXh0ICpjb250ZXh0ID0gTlVMTDsKIApA QCAtMTIzLDYgKzEyOSwxMiBAQCBsbHZtX2NvbXBpbGVfZXhwcihFeHByU3RhdGUgKnN0YXRl KQogCWluc3RyX3RpbWUJc3RhcnR0aW1lOwogCWluc3RyX3RpbWUJZW5kdGltZTsKIAorI2lm ZGVmIExMVk1KSVRfU1VCVFJBTlNfUkVDVVJTSVZFCisJTExWTVZhbHVlUmVmIHZfb3BubzsK KwlpbnQJCQludW1fcmVjdXJzaXZlX29wbm9zID0gMTsKKwlib29sCQlyZWN1cnNpdmUgPSBm YWxzZTsKKyNlbmRpZgorCiAJbGx2bV9lbnRlcl9mYXRhbF9vbl9vb20oKTsKIAogCS8qCkBA IC0xNDgsOSArMTYwLDE3IEBAIGxsdm1fY29tcGlsZV9leHByKEV4cHJTdGF0ZSAqc3RhdGUp CiAKIAlmdW5jbmFtZSA9IGxsdm1fZXhwYW5kX2Z1bmNuYW1lKGNvbnRleHQsICJldmFsZXhw ciIpOwogCisjaWZkZWYgTExWTUpJVF9TVUJUUkFOU19SRUNVUlNJVkUKKwlpZiAoc3RhdGUt PmZsYWdzICYgRUVPX0ZMQUdfSEFWRV9TVUJUUkFOUykKKwl7CisJCXJlY3Vyc2l2ZSA9IHRy dWU7CisJCWZ1bmN0eXBlbmFtZSA9ICJUeXBlRXhwclN0YXRlRXZhbFN0ZXBGdW5jIjsKKwl9 CisjZW5kaWYKKwogCS8qIGNyZWF0ZSBmdW5jdGlvbiAqLwogCWV2YWxfZm4gPSBMTFZNQWRk RnVuY3Rpb24obW9kLCBmdW5jbmFtZSwKLQkJCQkJCQkgIGxsdm1fcGdfdmFyX2Z1bmNfdHlw ZSgiVHlwZUV4cHJTdGF0ZUV2YWxGdW5jIikpOworCQkJCQkJCSAgbGx2bV9wZ192YXJfZnVu Y190eXBlKGZ1bmN0eXBlbmFtZSkpOwogCUxMVk1TZXRMaW5rYWdlKGV2YWxfZm4sIExMVk1F eHRlcm5hbExpbmthZ2UpOwogCUxMVk1TZXRWaXNpYmlsaXR5KGV2YWxfZm4sIExMVk1EZWZh dWx0VmlzaWJpbGl0eSk7CiAJbGx2bV9jb3B5X2F0dHJpYnV0ZXMoQXR0cmlidXRlVGVtcGxh dGUsIGV2YWxfZm4pOwpAQCAtMTYxLDYgKzE4MSwxMCBAQCBsbHZtX2NvbXBpbGVfZXhwcihF eHByU3RhdGUgKnN0YXRlKQogCXZfc3RhdGUgPSBMTFZNR2V0UGFyYW0oZXZhbF9mbiwgMCk7 CiAJdl9lY29udGV4dCA9IExMVk1HZXRQYXJhbShldmFsX2ZuLCAxKTsKIAl2X2lzbnVsbHAg PSBMTFZNR2V0UGFyYW0oZXZhbF9mbiwgMik7CisjaWZkZWYgTExWTUpJVF9TVUJUUkFOU19S RUNVUlNJVkUKKwlpZiAocmVjdXJzaXZlKQorCQl2X29wbm8gPSBMTFZNR2V0UGFyYW0oZXZh bF9mbiwgMyk7CisjZW5kaWYKIAogCUxMVk1Qb3NpdGlvbkJ1aWxkZXJBdEVuZChiLCBlbnRy eSk7CiAKQEAgLTIyNCwxMyArMjQ4LDU4IEBAIGxsdm1fY29tcGlsZV9leHByKEV4cHJTdGF0 ZSAqc3RhdGUpCiAKIAkvKiBhbGxvY2F0ZSBibG9ja3MgZm9yIGVhY2ggb3AgdXBmcm9udCwg c28gd2UgY2FuIGRvIGp1bXBzIGVhc2lseSAqLwogCW9wYmxvY2tzID0gcGFsbG9jKHNpemVv ZihMTFZNQmFzaWNCbG9ja1JlZikgKiBzdGF0ZS0+c3RlcHNfbGVuKTsKLQlmb3IgKGludCBv cG5vID0gMDsgb3BubyA8IHN0YXRlLT5zdGVwc19sZW47IG9wbm8rKykKKwlmb3IgKGludCBv cG5vID0gc3RhcnRfb3Bubzsgb3BubyA8IHN0YXRlLT5zdGVwc19sZW47IG9wbm8rKykKKwl7 CiAJCW9wYmxvY2tzW29wbm9dID0gbF9iYl9hcHBlbmRfdihldmFsX2ZuLCAiYi5vcC4lZC5z dGFydCIsIG9wbm8pOwogCisjaWZkZWYgTExWTUpJVF9TVUJUUkFOU19SRUNVUlNJVkUKKwkJ aWYgKHJlY3Vyc2l2ZSkKKwkJeworCQkJLyogY291bnQgcmVjdXJzaXZlIG9wbm9zICovCisJ CQlFeHByRXZhbFN0ZXAgKm9wID0gJnN0YXRlLT5zdGVwc1tvcG5vXTsKKworCQkJaWYgKEV4 ZWNFdmFsU3RlcE9wKHN0YXRlLCBvcCkgPT0gRUVPUF9TVUJUUkFOUykKKwkJCQludW1fcmVj dXJzaXZlX29wbm9zKys7CisKKwkJfQorI2VuZGlmCisJfQorCisjaWZkZWYgTExWTUpJVF9T VUJUUkFOU19SRUNVUlNJVkUKKwlpZiAocmVjdXJzaXZlKQorCXsKKwkJLyoKKwkJICogRW1p dCBzd2l0Y2ggd2l0aCBqdW1wIHRvIGVhY2ggcmVjdXJzaXZlIG9wbm8uCisJCSAqCisJCSAq IHN3aXRjaCAob3BubykgeworCQkgKgkJY2FzZSBOOgorCQkgKiAJCQlnb3RvIGIub3AuTi5z dGFydDsKKwkJICogCQkuLi4KKwkJICogfQorCQkgKi8KKwkJTExWTVZhbHVlUmVmIHZfc3dp dGNoID0KKwkJCUxMVk1CdWlsZFN3aXRjaChiLCB2X29wbm8sIG9wYmxvY2tzW3N0YXJ0X29w bm9dLAorCQkJCQkJCW51bV9yZWN1cnNpdmVfb3Bub3MpOworCisJCUxMVk1BZGRDYXNlKHZf c3dpdGNoLCBsX2ludDMyX2NvbnN0KHN0YXJ0X29wbm8pLAorCQkJCQlvcGJsb2Nrc1tzdGFy dF9vcG5vXSk7CisKKwkJZm9yIChpbnQgb3BubyA9IHN0YXJ0X29wbm87IG9wbm8gPCBzdGF0 ZS0+c3RlcHNfbGVuOyBvcG5vKyspCisJCXsKKwkJCUV4cHJFdmFsU3RlcCAqb3AgPSAmc3Rh dGUtPnN0ZXBzW29wbm9dOworCisJCQlpZiAoRXhlY0V2YWxTdGVwT3Aoc3RhdGUsIG9wKSA9 PSBFRU9QX1NVQlRSQU5TKQorCQkJCS8qIFNVQlRSQU5TIGV4cHJlc3Npb24gc3RhcnRzIGlu IHRoZSBuZXh0IHN0ZXAgKi8KKwkJCQlMTFZNQWRkQ2FzZSh2X3N3aXRjaCwgbF9pbnQzMl9j b25zdChvcG5vICsgMSksCisJCQkJCQkJb3BibG9ja3Nbb3BubyArIDFdKTsKKwkJfQorCX0K KwllbHNlCisjZW5kaWYKIAkvKiBqdW1wIGZyb20gZW50cnkgdG8gZmlyc3QgYmxvY2sgKi8K LQlMTFZNQnVpbGRCcihiLCBvcGJsb2Nrc1swXSk7CisJTExWTUJ1aWxkQnIoYiwgb3BibG9j a3Nbc3RhcnRfb3Bub10pOwogCi0JZm9yIChpbnQgb3BubyA9IDA7IG9wbm8gPCBzdGF0ZS0+ c3RlcHNfbGVuOyBvcG5vKyspCisJZm9yIChpbnQgb3BubyA9IHN0YXJ0X29wbm87IG9wbm8g PCBzdGF0ZS0+c3RlcHNfbGVuOyBvcG5vKyspCiAJewogCQlFeHByRXZhbFN0ZXAgKm9wOwog CQlFeHByRXZhbE9wCW9wY29kZTsKQEAgLTIzOTUsNiArMjQ2NCw3MiBAQCBsbHZtX2NvbXBp bGVfZXhwcihFeHByU3RhdGUgKnN0YXRlKQogCQkJCUxMVk1CdWlsZEJyKGIsIG9wYmxvY2tz W29wbm8gKyAxXSk7CiAJCQkJYnJlYWs7CiAKKwkJCWNhc2UgRUVPUF9TVUJUUkFOUzoKKwkJ CQl7CisJCQkJCUxMVk1WYWx1ZVJlZiB2X3JldDsKKwkJCQkJTExWTVR5cGVSZWYgdl9mdW5j dHlwZTsKKworI2lmbmRlZiBMTFZNSklUX1NVQlRSQU5TX1JFQ1VSU0lWRQorCQkJCQlFeHBy U3RhdGUgKnN1YnN0YXRlOworCisJCQkJCS8qIENyZWF0ZSBzdWJleHByZXNzaW9uIEV4cHJT dGF0ZSAqLworCQkJCQlzdWJzdGF0ZSA9IG1ha2VOb2RlKEV4cHJTdGF0ZSk7CisJCQkJCXN1 YnN0YXRlLT5wYXJlbnQgPSBzdGF0ZS0+cGFyZW50OworCQkJCQlzdWJzdGF0ZS0+c3RlcHMg PSBzdGF0ZS0+c3RlcHM7CisJCQkJCXN1YnN0YXRlLT5zdGVwc19sZW4gPSBvcC0+ZC5zdWJ0 cmFucy5qdW1wX25leHQ7CisKKwkJCQkJLyoKKwkJCQkJICogQ29tcGlsZSBpdCBzdGFydGlu ZyBmcm9tIHRoZSBmaXJzdCBzdWJleHByZXNzaW9uCisJCQkJCSAqIHN0ZXAsIHdoaWNoIGlz IHRoZSBuZXh0IHN0ZXAuCisJCQkJCSAqLworCQkJCQlsbHZtX2NvbXBpbGVfZXhwcl9zdGVw KHN1YnN0YXRlLCBvcG5vICsgMSk7CisKKwkJCQkJLyoKKwkJCQkJICogU2F2ZSBzdWJleHBy ZXNzaW9uIHN0YXRlIGluIHRoZSBwcml2YXRlIGFyZWEgb2YKKwkJCQkJICogdGhlIHN0ZXAu CisJCQkJCSAqLworCQkJCQlvcC0+ZC5zdWJ0cmFucy5wcml2YXRlX2RhdGEgPSBzdWJzdGF0 ZTsKKyNlbmRpZgorCisJCQkJCUFzc2VydChzdGF0ZS0+ZmxhZ3MgJiBFRU9fRkxBR19IQVZF X1NVQlRSQU5TKTsKKworCQkJCQkvKgorCQkJCQkgKiBDYWxsIEV4ZWNFdmFsSnNvbkV4cHJT dWJ0cmFucygpIHBhc3NpbmcKKwkJCQkJICogRXhlY0V2YWxTdWJ0cmFuc0NvbXBpbGVkKCks IHdoaWNoIHdpbGwgZXhlY3V0ZQorCQkJCQkgKiBzdWJleHByZXNzaW9uIGdldHRpbmcgRXhw clN0YXRlIGZyb20gdGhlIHByaXZhdGUKKwkJCQkJICogYXJlYS4KKwkJCQkJICovCisJCQkJ CXZfZnVuY3R5cGUgPSBsbHZtX3BnX3Zhcl9mdW5jX3R5cGUoIlR5cGVFeGVjRXZhbFN1YnJv dXRpbmUiKTsKKworCQkJCQl2X3JldCA9IGJ1aWxkX0V2YWxYRnVuYyhiLCBtb2QsICJFeGVj RXZhbFN1YnRyYW5zIiwKKwkJCQkJCQkJCQkJdl9zdGF0ZSwgb3AsIHZfZWNvbnRleHQsCisJ CQkJCQkJCQkJCWxfcHRyX2NvbnN0KEV4ZWNFdmFsU3VidHJhbnNDb21waWxlZCwKKwkJCQkJ CQkJCQkJCQkJTExWTVBvaW50ZXJUeXBlKHZfZnVuY3R5cGUsIDApKSk7CisJCQkJCXZfcmV0 ID0gTExWTUJ1aWxkWkV4dChiLCB2X3JldCwgVHlwZVN0b3JhZ2VCb29sLCAiIik7CisKKwkJ CQkJLyoKKwkJCQkJICogSnVtcCB0byAiZXJyb3IiIG9yICJkb25lIiBzdGVwcyBkZXBlbmRp bmcgb2YKKwkJCQkJICogcmV0dXJuZWQgYm9vbGVhbiB2YWx1ZSAoVFJVRSBtZWFucyAiZG9u ZSIpLgorCQkJCQkgKi8KKwkJCQkJTExWTUJ1aWxkQ29uZEJyKGIsCisJCQkJCQkJCQlMTFZN QnVpbGRJQ21wKGIsCisJCQkJCQkJCQkJCQkgIExMVk1JbnRFUSwKKwkJCQkJCQkJCQkJCSAg dl9yZXQsCisJCQkJCQkJCQkJCQkgIGxfc2Jvb2xfY29uc3QoMCksCisJCQkJCQkJCQkJCQkg ICIiKSwKKwkJCQkJCQkJCW9wYmxvY2tzW29wLT5kLnN1YnRyYW5zLmp1bXBfZXJyb3JdLAor CQkJCQkJCQkJb3BibG9ja3Nbb3AtPmQuc3VidHJhbnMuanVtcF9kb25lXSk7CisKKyNpZm5k ZWYgTExWTUpJVF9TVUJUUkFOU19SRUNVUlNJVkUKKwkJCQkJLyoKKwkJCQkJICogU2tpcCBz dWJleHByZXNzaW9uIHN0ZXBzLCB3aGljaCBhcmUgY29tcGlsZWQKKwkJCQkJICogc2VwYXJh dGVseS4KKwkJCQkJICovCisJCQkJCW9wbm8gPSBvcC0+ZC5zdWJ0cmFucy5qdW1wX25leHQg LSAxOworI2VuZGlmCisJCQkJCWJyZWFrOworCQkJCX0KKwogCQkJY2FzZSBFRU9QX0pTT05f Q09OU1RSVUNUT1I6CiAJCQkJYnVpbGRfRXZhbFhGdW5jKGIsIG1vZCwgIkV4ZWNFdmFsSnNv bkNvbnN0cnVjdG9yIiwKIAkJCQkJCQkJdl9zdGF0ZSwgb3AsIHZfZWNvbnRleHQpOwpAQCAt MjQyOCwxMiArMjU2MywxNiBAQCBsbHZtX2NvbXBpbGVfZXhwcihFeHByU3RhdGUgKnN0YXRl KQogCSAqIHJlbWFwcGluZyBvdmVyaGVhZC4KIAkgKi8KIAl7Ci0KIAkJQ29tcGlsZWRFeHBy U3RhdGUgKmNzdGF0ZSA9IHBhbGxvYzAoc2l6ZW9mKENvbXBpbGVkRXhwclN0YXRlKSk7CiAK IAkJY3N0YXRlLT5jb250ZXh0ID0gY29udGV4dDsKIAkJY3N0YXRlLT5mdW5jbmFtZSA9IGZ1 bmNuYW1lOwogCisjaWZkZWYgTExWTUpJVF9TVUJUUkFOU19SRUNVUlNJVkUKKwkJaWYgKHJl Y3Vyc2l2ZSkKKwkJCXN0YXRlLT5ldmFsZnVuYyA9IEV4ZWNSdW5Db21waWxlRXhwclJlY3Vy c2l2ZTsKKwkJZWxzZQorI2VuZGlmCiAJCXN0YXRlLT5ldmFsZnVuYyA9IEV4ZWNSdW5Db21w aWxlZEV4cHI7CiAJCXN0YXRlLT5ldmFsZnVuY19wcml2YXRlID0gY3N0YXRlOwogCX0KQEAg LTI0NDcsNiArMjU4NiwxNSBAQCBsbHZtX2NvbXBpbGVfZXhwcihFeHByU3RhdGUgKnN0YXRl KQogCXJldHVybiB0cnVlOwogfQogCisvKgorICogSklUIGNvbXBpbGUgZXhwcmVzc2lvbiBz dGFyaW5nIGZyb20gdGhlIGZpcnN0IHN0ZXAuCisgKi8KK2Jvb2wKK2xsdm1fY29tcGlsZV9l eHByKEV4cHJTdGF0ZSAqc3RhdGUpCit7CisJcmV0dXJuIGxsdm1fY29tcGlsZV9leHByX3N0 ZXAoc3RhdGUsIDApOworfQorCiAvKgogICogUnVuIGNvbXBpbGVkIGV4cHJlc3Npb24uCiAg KgpAQCAtMjQ3NSw2ICsyNjIzLDU2IEBAIEV4ZWNSdW5Db21waWxlZEV4cHIoRXhwclN0YXRl ICpzdGF0ZSwgRXhwckNvbnRleHQgKmVjb250ZXh0LCBib29sICppc051bGwpCiAJcmV0dXJu IGZ1bmMoc3RhdGUsIGVjb250ZXh0LCBpc051bGwpOwogfQogCisjaWZkZWYgTExWTUpJVF9T VUJUUkFOU19SRUNVUlNJVkUKK3N0YXRpYyBEYXR1bQorRXhlY1J1bkNvbXBpbGVkRXhwclJl Y3Vyc2l2ZShFeHByU3RhdGUgKnN0YXRlLCBFeHByQ29udGV4dCAqZWNvbnRleHQsIGJvb2wg KmlzTnVsbCkKK3sKKwlFeHByU3RhdGVFdmFsU3RlcEZ1bmMgZnVuYyA9IHN0YXRlLT5ldmFs ZnVuY19wcml2YXRlOworCisJcmV0dXJuIGZ1bmMoc3RhdGUsIGVjb250ZXh0LCBpc051bGws IDApOworfQorCitzdGF0aWMgRGF0dW0KK0V4ZWNSdW5Db21waWxlRXhwclJlY3Vyc2l2ZShF eHByU3RhdGUgKnN0YXRlLCBFeHByQ29udGV4dCAqZWNvbnRleHQsIGJvb2wgKmlzTnVsbCkK K3sKKwlDb21waWxlZEV4cHJTdGF0ZSAqY3N0YXRlID0gc3RhdGUtPmV2YWxmdW5jX3ByaXZh dGU7CisJRXhwclN0YXRlRXZhbFN0ZXBGdW5jIGZ1bmM7CisKKwlDaGVja0V4cHJTdGlsbFZh bGlkKHN0YXRlLCBlY29udGV4dCk7CisKKwlsbHZtX2VudGVyX2ZhdGFsX29uX29vbSgpOwor CWZ1bmMgPSAoRXhwclN0YXRlRXZhbFN0ZXBGdW5jKSBsbHZtX2dldF9mdW5jdGlvbihjc3Rh dGUtPmNvbnRleHQsCisJCQkJCQkJCQkJCQkJIGNzdGF0ZS0+ZnVuY25hbWUpOworCWxsdm1f bGVhdmVfZmF0YWxfb25fb29tKCk7CisJQXNzZXJ0KGZ1bmMpOworCisJLyogcmVtb3ZlIGlu ZGlyZWN0aW9uIHZpYSB0aGlzIGZ1bmN0aW9uIGZvciBmdXR1cmUgY2FsbHMgKi8KKwlzdGF0 ZS0+ZXZhbGZ1bmMgPSBFeGVjUnVuQ29tcGlsZWRFeHByUmVjdXJzaXZlOworCXN0YXRlLT5l dmFsZnVuY19wcml2YXRlID0gZnVuYzsKKworCXJldHVybiBmdW5jKHN0YXRlLCBlY29udGV4 dCwgaXNOdWxsLCAwKTsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZAorRXhlY0V2YWxTdWJ0 cmFuc0NvbXBpbGVkKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAqb3AsCisJCQkJ CQkgRXhwckNvbnRleHQgKmVjb250ZXh0KQoreworCWJvb2wJCWlzbnVsbDsKKyNpZmRlZiBM TFZNSklUX1NVQlRSQU5TX1JFQ1VSU0lWRQorCS8qIFJlY3Vyc2l2ZWx5IGV4ZWN1dGUgbmV4 dCBvcG5vICovCisJRXhwclN0YXRlRXZhbFN0ZXBGdW5jIGZ1bmMgPSBzdGF0ZS0+ZXZhbGZ1 bmNfcHJpdmF0ZTsKKwlpbnQJCQlvcG5vID0gb3AgLSBzdGF0ZS0+c3RlcHMgKyAxOworCisJ KHZvaWQpIGZ1bmMoc3RhdGUsIGVjb250ZXh0LCAmaXNudWxsLCBvcG5vKTsKKyNlbHNlCisJ LyogRXhlY3V0ZSBzdWJleHByZXNzaW9uIHN0ZXBzIHVzaW5nIGNvbXBpbGVkIEV4cHJTdGF0 ZSAqLworCUV4cHJTdGF0ZSAgKnN1YnN0YXRlID0gb3AtPmQuc3VidHJhbnMucHJpdmF0ZV9k YXRhOworCisJKHZvaWQpIEV4ZWNFdmFsRXhwcihzdWJzdGF0ZSwgZWNvbnRleHQsICZpc251 bGwpOworI2VuZGlmCit9CisKIHN0YXRpYyBMTFZNVmFsdWVSZWYKIEJ1aWxkVjFDYWxsKExM Vk1KaXRDb250ZXh0ICpjb250ZXh0LCBMTFZNQnVpbGRlclJlZiBiLAogCQkJTExWTU1vZHVs ZVJlZiBtb2QsIEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvaml0L2xsdm0vbGx2bWppdF90eXBlcy5jIGIvc3JjL2JhY2tlbmQvaml0L2xsdm0v bGx2bWppdF90eXBlcy5jCmluZGV4IDM3ZmU2NDY1NGI2Li5iYjk2ZDQ2MDQ4ZiAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF90eXBlcy5jCisrKyBiL3NyYy9i YWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfdHlwZXMuYwpAQCAtNDksNiArNDksNyBAQCBQR0Z1 bmN0aW9uCVR5cGVQR0Z1bmN0aW9uOwogc2l6ZV90CQlUeXBlU2l6ZVQ7CiBib29sCQlUeXBl U3RvcmFnZUJvb2w7CiBFeHByU3RhdGVFdmFsRnVuYyBUeXBlRXhwclN0YXRlRXZhbEZ1bmM7 CitFeHByU3RhdGVFdmFsU3RlcEZ1bmMgVHlwZUV4cHJTdGF0ZUV2YWxTdGVwRnVuYzsKIEV4 ZWNFdmFsU3Vicm91dGluZSBUeXBlRXhlY0V2YWxTdWJyb3V0aW5lOwogRXhlY0V2YWxCb29s U3Vicm91dGluZSBUeXBlRXhlY0V2YWxCb29sU3Vicm91dGluZTsKIApAQCAtMTMzLDYgKzEz NCw3IEBAIHZvaWQJICAgKnJlZmVyZW5jZWRfZnVuY3Rpb25zW10gPQogCUV4ZWNFdmFsU3lz VmFyLAogCUV4ZWNFdmFsV2hvbGVSb3dWYXIsCiAJRXhlY0V2YWxYbWxFeHByLAorCUV4ZWNF dmFsU3VidHJhbnMsCiAJRXhlY0V2YWxKc29uQ29uc3RydWN0b3IsCiAJRXhlY0V2YWxKc29u SXNQcmVkaWNhdGUsCiAJRXhlY0V2YWxKc29uRXhwciwKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL2V4ZWN1dG9yL2V4ZWNFeHByLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjRXhw ci5oCmluZGV4IDUxZThkOTMxNzhlLi5hNTEyMzJiODRkZSAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvZXhlY3V0b3IvZXhlY0V4cHIuaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9l eGVjRXhwci5oCkBAIC0zMCw2ICszMCw4IEBAIHN0cnVjdCBKc29uQ29uc3RydWN0b3JFeHBy U3RhdGU7CiAjZGVmaW5lIEVFT19GTEFHX0lOVEVSUFJFVEVSX0lOSVRJQUxJWkVECSgxIDw8 IDEpCiAvKiBqdW1wLXRocmVhZGluZyBpcyBpbiB1c2UgKi8KICNkZWZpbmUgRUVPX0ZMQUdf RElSRUNUX1RIUkVBREVECQkJKDEgPDwgMikKKy8qIGV4cHJlc3Npb24gY29udGFpbnMgRUVP UF9TVUJUUkFOUyBzdGVwcyAqLworI2RlZmluZSBFRU9fRkxBR19IQVZFX1NVQlRSQU5TCQkJ CSgxIDw8IDMpCiAKIC8qIFR5cGljYWwgQVBJIGZvciBvdXQtb2YtbGluZSBldmFsdWF0aW9u IHN1YnJvdXRpbmVzICovCiB0eXBlZGVmIHZvaWQgKCpFeGVjRXZhbFN1YnJvdXRpbmUpIChF eHByU3RhdGUgKnN0YXRlLApAQCAtMjQyLDYgKzI0NCw3IEBAIHR5cGVkZWYgZW51bSBFeHBy RXZhbE9wCiAJRUVPUF9HUk9VUElOR19GVU5DLAogCUVFT1BfV0lORE9XX0ZVTkMsCiAJRUVP UF9TVUJQTEFOLAorCUVFT1BfU1VCVFJBTlMsCiAJRUVPUF9KU09OX0NPTlNUUlVDVE9SLAog CUVFT1BfSVNfSlNPTiwKIAlFRU9QX0pTT05FWFBSLApAQCAtNjgwLDYgKzY4MywxNSBAQCB0 eXBlZGVmIHN0cnVjdCBFeHByRXZhbFN0ZXAKIAkJCWludAkJCXNldG9mZjsKIAkJfQkJCWFn Z190cmFuczsKIAorCQkvKiBmb3IgRUVPUF9TVUJUUkFOUyAqLworCQlzdHJ1Y3QKKwkJewor CQkJdm9pZAkgICAqcHJpdmF0ZV9kYXRhOworCQkJaW50CQkJanVtcF9kb25lOworCQkJaW50 CQkJanVtcF9lcnJvcjsKKwkJCWludAkJCWp1bXBfbmV4dDsKKwkJfQkJCXN1YnRyYW5zOwor CiAJCS8qIGZvciBFRU9QX0pTT05fQ09OU1RSVUNUT1IgKi8KIAkJc3RydWN0CiAJCXsKQEAg LTg3OCw2ICs4OTAsOSBAQCBleHRlcm4gdm9pZCBFeGVjRXZhbFdob2xlUm93VmFyKEV4cHJT dGF0ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAqb3AsCiAJCQkJCQkJCUV4cHJDb250ZXh0ICpl Y29udGV4dCk7CiBleHRlcm4gdm9pZCBFeGVjRXZhbFN5c1ZhcihFeHByU3RhdGUgKnN0YXRl LCBFeHByRXZhbFN0ZXAgKm9wLAogCQkJCQkJICAgRXhwckNvbnRleHQgKmVjb250ZXh0LCBU dXBsZVRhYmxlU2xvdCAqc2xvdCk7CitleHRlcm4gYm9vbCBFeGVjRXZhbFN1YnRyYW5zKEV4 cHJTdGF0ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAqb3AsCisJCQkJCQkJIEV4cHJDb250ZXh0 ICplY29udGV4dCwKKwkJCQkJCQkgRXhlY0V2YWxTdWJyb3V0aW5lIGZ1bmMpOwogZXh0ZXJu IHZvaWQgRXhlY0V2YWxKc29uQ29uc3RydWN0b3IoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2 YWxTdGVwICpvcCwKIAkJCQkJCQkJCUV4cHJDb250ZXh0ICplY29udGV4dCk7CiBleHRlcm4g dm9pZCBFeGVjRXZhbEpzb25FeHByKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAq b3AsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBiL3NyYy9p bmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCmluZGV4IDAxYjE3MjdmYzA5Li5kNjk3NmI5Mjgy OCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIvc3Jj L2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKQEAgLTcwLDYgKzcwLDExIEBAIHR5cGVkZWYg RGF0dW0gKCpFeHByU3RhdGVFdmFsRnVuYykgKHN0cnVjdCBFeHByU3RhdGUgKmV4cHJlc3Np b24sCiAJCQkJCQkJCQlzdHJ1Y3QgRXhwckNvbnRleHQgKmVjb250ZXh0LAogCQkJCQkJCQkJ Ym9vbCAqaXNOdWxsKTsKIAordHlwZWRlZiBEYXR1bSAoKkV4cHJTdGF0ZUV2YWxTdGVwRnVu YykgKHN0cnVjdCBFeHByU3RhdGUgKmV4cHJlc3Npb24sCisJCQkJCQkJCQkJc3RydWN0IEV4 cHJDb250ZXh0ICplY29udGV4dCwKKwkJCQkJCQkJCQlib29sICppc051bGwsCisJCQkJCQkJ CQkJaW50IHN0ZXBubyk7CisKIC8qIEJpdHMgaW4gRXhwclN0YXRlLT5mbGFncyAoc2VlIGFs c28gZXhlY0V4cHIuaCBmb3IgcHJpdmF0ZSBmbGFnIGJpdHMpOiAqLwogLyogZXhwcmVzc2lv biBpcyBmb3IgdXNlIHdpdGggRXhlY1F1YWwoKSAqLwogI2RlZmluZSBFRU9fRkxBR19JU19R VUFMCQkJCQkoMSA8PCAwKQotLSAKMi4yNS4xCgo= --------------4f0L3EFiQJb2iiAozUzeF43y Content-Type: text/x-patch; charset=UTF-8; name="v7-0004-Split-JsonExpr-execution-into-steps.patch" Content-Disposition: attachment; filename="v7-0004-Split-JsonExpr-execution-into-steps.patch" Content-Transfer-Encoding: base64 RnJvbSA1YmJiNzc1ZTFmYjZiNjlkNDdmY2VhZTdjMmM0MDYwYTMwOWZiNzE5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBOaWtpdGEgR2x1a2hvdiA8bi5nbHVob3ZAcG9zdGdy ZXNwcm8ucnU+CkRhdGU6IEZyaSwgMTIgQXVnIDIwMjIgMTk6MzU6NTYgKzAzMDAKU3ViamVj dDogW1BBVENIIHY3IDQvNF0gU3BsaXQgSnNvbkV4cHIgZXhlY3V0aW9uIGludG8gc3RlcHMK CkFkZCB0ZXN0IGZvciBlcnJvcnMgaW4gT04gRU1QVFkKCkFkZCB0ZXN0IGZvciBlcnJvcnMg aW4gT04gRU1QVFkKClNvbWUgaW1wcm92ZW1lbnRzIHRvIEpzb25FeHByIGV2YWx1YXRpb24K CiogU3RvcmUgYSBwb2ludGVyIHRvIHRoZSByZXR1cm5pbmcgdHlwZSBpbnB1dCBmdW5jdGlv biBGbWdySW5mbywKbm90IHRoZSBzdHJ1Y3QgaXRzZWxmLCBpbiBKc29uRXhwclN0YXRlCgoq IEV2YWx1YXRlIHZhcmlvdXMgSnNvbkV4cHIgc3ViLWV4cHJlc3Npb25zIHVzaW5nIHBhcmVu dCBFeHByU3RhdGUKVGhlc2UgaW5jbHVkZSBQQVNTSU5HIGFyZ3MsIE9OIEVSUk9SLCBPTiBF TVBUWSBkZWZhdWx0IGV4cHJlc3Npb25zLgpQQVNTSU5HIGFyZ3MgYXJlIHNpbXBsZSwgYmVj YXVzZSB0aGV5IGFsbCBtdXN0IGJlIGV2YWx1YXRlZCBiZWZvcmUKdGhlIEpTT04gcGF0aCBl dmFsdWF0aW9uIGNhbiBvY2N1ciBhbnl3YXksIHNvIHB1c2hpbmcgdGhvc2UKZXhwcmVzc2lv bnMgdG8gYmUgdW5jb25kaW9uYWxseSBldmFsdWF0ZWQgYmVmb3JlIHRoZSBzdGVwIHRvCmV2 YWx1YXRlIEpzb25FeHByIHByb3BlciBzdWZmaWNlcy4gIEV2YWx1YXRpb24gb2YgdGhlIE9O IEVSUk9SIGFuZAp0aGUgT04gRU1QVFkgZXhwcmVzc2lvbnMgaXMgY29uZGl0aW9uYWwgb24g d2hhdCBKU09OIGl0ZW0gcG9wcyBvdXQKb2YgdGhlIHBhdGggZXZhbHVhdGlvbiAoRXhlY0V2 YWxKc29uKCkpLCBzbyBuZWVkcyBtb3JlIGxvZ2ljIHRvCmdhdGUgdGhlIHN0ZXBzIGZvciB0 aGVpciBleHByZXNzaW9ucyB0aGF0IGFyZSBwdXNoZWQgaW50byB0aGUgcGFyZW50CkV4cHJT dGF0ZSwgcmF0aGVyIHRoYW4gYmUgaW1sZW1lbnRlZCB1c2luZyBzZXBhcmF0ZSBFeHByU3Rh dGVzLgpUbyB0aGF0IGVuZCwgdGhpcyBtb3ZlcyB0aGUgT04gRVJST1IsIE9OIEVNUFRZIGJl aGF2aW9yIGRlY2lzaW9uIGxvZ2ljCm91dCBvZiBFeGVjRXZhbEpzb24oKSBhbmQgRXhlY0V2 YWxKc29uRXhwcigpIGludG8gYSBuZXcgZnVuY3Rpb24KRXhlY0V2YWxKc29uRXhwckJlaGF2 aW9yKCkuCgoqIEZpbmFsIHJlc3VsdCBjb2VyY2lvbiBpcyBub3cgYWxzbyBjb21wdXRlZCBh cyBhIHNlcGFyYXRlIHN0ZXAgdGhhdApnZXRzIHB1c2hlZCBpbnRvIHRoZSBwYXJlbnQgRXhw clN0YXRlLiAgVGhvdWdoIGdpdmVuIHRoYXQgYW55CmNvZXJjaW9uIGV2YWx1YXRpb24gZXJy b3JzIG11c3QgYmUgaGFuZGxlZCB0aGUgc2FtZSB3YXkgYXMgdGhlIGVycm9ycwpvZiBKU09O IGl0ZW0gZXZhbHVhdGlvbiwgdGhhdCBpcywgdG8gYmUgaGFuZGxlZCBhY2NvcmRpbmcgdGhl IE9OIEVSUk9SCmJlaGF2aW9yIHNwZWNpZmljYXRpb24sIGEgc3ViLXRyYW5zYWN0aW9uIG11 c3QgYmUgdXNlZCBhcm91bmQgY29lcmNpb24KZXZhbHVhdGlvbiwgc28gdGhlIEV4cHJTdGF0 ZSB0byB1c2UgZm9yIHRoZSBzYW1lIG11c3QgaGF2ZSB0byBiZSBhCmRpZmZlcmVudCBvbmUg ZnJvbSB0aGUgSnNvbkV4cHIncy4gSG93ZXZlciwgaW5zdGVhZCBvZiB1c2luZyBvbmUKRXhw clN0YXRlIGZvciBlYWNoIEpzb25Db2VyY2lvbiBtZW1iZXIgb2YgSnNvbkl0ZW1Db2VyY2lv bnMsIG9ubHkgb25lCmlzIHVzZWQgZm9yIHRoZSB3aG9sZSBKc29uSXRlbUNvZXJjaW9ucy4g VGhlIGluZGl2aWR1YWwgSnNvbkNvZXJjaW9uCm1lbWJlcnMgKG9yIHRoZWlyIEV4cHJzKSBh cmUgaGFuZGxlZCBieSBzdGVwcyBwdXNoZWQgaW50byB0aGF0CkV4cHJTdGF0ZSwgb2Ygd2hp Y2ggb25seSB0aGUgb25lIHRoYXQgYXBwbGllcyB0byBhIGdpdmVuIEpTT04gaXRlbSBpcwpj aG9zZW4gYXQgdGhlIHJ1bnRpbWUgYW5kIG90aGVycyAianVtcGVkIiBvdmVyLgoKKiBNb3Zl IHRoZSBsb2dpYyBvZiBkZWNpZGluZyB3aGV0aGVyIHRvIHVzZSBhIHN1Yi10cmFuc2FjdGlv biBmb3IgSlNPTgpwYXRoIGV2YWx1YXRpb24gYW5kIHN1YnNlcXVlbnQgY29lcmNpb24gdG8g RXhlY0luaXRFeHByUmVjKCkgaW5zdGVhZApvZiByZWNvbXB1dGluZyB0aGUgc2FtZSB0aGlu ZyBvbiBldmVyeSBldmFsdWF0aW9uLgoKQ2F0Y2ggZXJyb3JzIGluIEpzb25FeHByIE9OIEVN UFRZIGJlaGF2aW9yCgpSZW1vdmUgRXhlY0V2YWxKc29uRXhwckNvbnRleHQKClJlbW92ZSBs b2NhbCB2YXJpYWJsZQoKUmVmYWN0b3IgSlNvbkV4cHIgZXhlY3V0aW9uOiByZW1vdmUgSXRl bUNvZXJjaW9uIHN0ZXAsIHVzZSBuZXcgU3VidHJhbnMgc3RlcAoKUmVtb3ZlIEpzb25FeHBy QmVoYXZpb3Igc3RlcAoKVXNlIGNvbnRleHQgZm9yIEV4ZWNJbml0SnNvbkV4cHIoKQoKU2lt cGxpZnkganNvbiBpdGVtIGNvZXJjaW9ucwoKUmVwbGFjZSBKc29uRXhwckNvZXJjZSBzdGVw cyB3aXRoIEpzb25FeHBySW9Db2VyY2UgYW5kIEpzb25FeHByUG9wdWxhdGUgc3RlcHMKCk1v dmUgYW5kIHJlbmFtZSBFeGVjRXZhbEpzb25OZWVkc1N1YlRyYW5zYWN0aW9uKCksIGNvbnNp ZGVyIG1vcmUgY2FzZXMgaW4gaXQKCklubGluZSBFeGVjRXZhbEpzb25FeHByKCkgaW50byBF eGVjRXZhbEpzb24oKQoKTW92ZSBsb2NhbCB2YXJpYWJsZXMKClVzZSBMTFZNQnVpbGRTd2l0 Y2goKSBpbiBFRU9QX0pTT05FWFBSCi0tLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4 cHIuYyAgICAgICAgICAgICB8IDY5MSArKysrKysrKysrKysrKysrLS0tLQogc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYyAgICAgICB8IDYzMCArKysrKysrLS0tLS0t LS0tLS0KIHNyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfZXhwci5jICAgICAgICAgfCAx MjIgKysrLQogc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF90eXBlcy5jICAgICAgICB8 ICAgMyArCiBzcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jICAgICAgICAgICAgIHwg ICA2ICsKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29ucGF0aF9leGVjLmMgICAgICAgfCAg NjggKysKIHNyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNFeHByLmggICAgICAgICAgICAgfCAx NTAgKysrLS0KIHNyYy9pbmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oICAgICAgICAgICAgICAg fCAgIDkgKy0KIHNyYy9pbmNsdWRlL3V0aWxzL2pzb25iLmggICAgICAgICAgICAgICAgICAg fCAgIDIgKwogc3JjL2luY2x1ZGUvdXRpbHMvanNvbnBhdGguaCAgICAgICAgICAgICAgICB8 ICAgMyAtCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pzb25iX3NxbGpzb24ub3V0IHwg IDE3ICsKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pzb25iX3NxbGpzb24uc3FsICAgICAgfCAg IDcgKwogMTIgZmlsZXMgY2hhbmdlZCwgMTA4NSBpbnNlcnRpb25zKCspLCA2MjMgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHIuYyBi L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHByLmMKaW5kZXggMWM5NzgyZGUxNWYuLjFh YTg0MzY5OGFiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwci5j CisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHByLmMKQEAgLTg2LDcgKzg2LDgg QEAgc3RhdGljIHZvaWQgRXhlY0J1aWxkQWdnVHJhbnNDYWxsKEV4cHJTdGF0ZSAqc3RhdGUs IEFnZ1N0YXRlICphZ2dzdGF0ZSwKIAkJCQkJCQkJICBGdW5jdGlvbkNhbGxJbmZvIGZjaW5m bywgQWdnU3RhdGVQZXJUcmFucyBwZXJ0cmFucywKIAkJCQkJCQkJICBpbnQgdHJhbnNubywg aW50IHNldG5vLCBpbnQgc2V0b2ZmLCBib29sIGlzaGFzaCwKIAkJCQkJCQkJICBib29sIG51 bGxjaGVjayk7Ci0KK3N0YXRpYyB2b2lkIEV4ZWNJbml0SnNvbkV4cHIoRXhwckV2YWxTdGVw ICpzY3JhdGNoLCBKc29uRXhwciAqamV4cHIsIEV4cHJTdGF0ZSAqc3RhdGUsCisJCQkJIERh dHVtICpyZXN2LCBib29sICpyZXNudWxsKTsKIAogc3RhdGljIEV4cHJTdGF0ZSAqCiBFeGVj SW5pdEV4cHJJbnRlcm5hbChFeHByICpub2RlLCBQbGFuU3RhdGUgKnBhcmVudCwgUGFyYW1M aXN0SW5mbyBleHRfcGFyYW1zLApAQCAtMTc4LDcgKzE3OSw3IEBAIEV4ZWNJbml0RXhwcldp dGhQYXJhbXMoRXhwciAqbm9kZSwgUGFyYW1MaXN0SW5mbyBleHRfcGFyYW1zKQogICogRXhl Y0luaXRFeHByV2l0aENhc2VWYWx1ZTogcHJlcGFyZSBhbiBleHByZXNzaW9uIHRyZWUgZm9y IGV4ZWN1dGlvbgogICoKICAqIFRoaXMgaXMgdGhlIHNhbWUgYXMgRXhlY0luaXRFeHByLCBl eGNlcHQgdGhhdCBhIHBvaW50ZXIgdG8gdGhlIHZhbHVlIGZvcgotICogQ2FzVGVzdEV4cHIg aXMgcGFzc2VkIGhlcmUuCisgKiBDYXNlVGVzdEV4cHIgaXMgcGFzc2VkIGhlcmUuCiAgKi8K IEV4cHJTdGF0ZSAqCiBFeGVjSW5pdEV4cHJXaXRoQ2FzZVZhbHVlKEV4cHIgKm5vZGUsIFBs YW5TdGF0ZSAqcGFyZW50LApAQCAtMjU2MSwxNDkgKzI1NjIsOCBAQCBFeGVjSW5pdEV4cHJS ZWMoRXhwciAqbm9kZSwgRXhwclN0YXRlICpzdGF0ZSwKIAkJY2FzZSBUX0pzb25FeHByOgog CQkJewogCQkJCUpzb25FeHByICAgKmpleHByID0gY2FzdE5vZGUoSnNvbkV4cHIsIG5vZGUp OwotCQkJCUpzb25FeHByU3RhdGUgKmpzZXN0YXRlOwotCQkJCUpzb25Db2VyY2lvbiAqcmVz dWx0X2NvZXJjaW9uID0gamV4cHItPnJlc3VsdF9jb2VyY2lvbjsKLQkJCQlMaXN0Q2VsbCAg ICphcmdleHBybGM7Ci0JCQkJTGlzdENlbGwgICAqYXJnbmFtZWxjOwotCi0JCQkJLyogSlNP Tl9UQUJMRSBwcmV1ZG8tZnVuY3Rpb24gcmV0dXJucyBjb250ZXh0IGl0ZW0gYXMgYSByZXN1 bHQgKi8KLQkJCQlpZiAoamV4cHItPm9wID09IEpTT05fVEFCTEVfT1ApCi0JCQkJewotCQkJ CQlFeGVjSW5pdEV4cHJSZWMoKEV4cHIgKikgamV4cHItPmZvcm1hdHRlZF9leHByLCBzdGF0 ZSwKLQkJCQkJCQkJCXJlc3YsIHJlc251bGwpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0KLQkJ CQlqc2VzdGF0ZSA9IHBhbGxvYzAoc2l6ZW9mKEpzb25FeHByU3RhdGUpKTsKLQkJCQlqc2Vz dGF0ZS0+anNleHByID0gamV4cHI7Ci0KLQkJCQlzY3JhdGNoLm9wY29kZSA9IEVFT1BfSlNP TkVYUFI7Ci0JCQkJc2NyYXRjaC5kLmpzb25leHByLmpzZXN0YXRlID0ganNlc3RhdGU7Ci0K LQkJCQlFeGVjSW5pdEV4cHJSZWMoKEV4cHIgKikgamV4cHItPmZvcm1hdHRlZF9leHByLCBz dGF0ZSwKLQkJCQkJCQkJJmpzZXN0YXRlLT5mb3JtYXR0ZWRfZXhwci52YWx1ZSwKLQkJCQkJ CQkJJmpzZXN0YXRlLT5mb3JtYXR0ZWRfZXhwci5pc251bGwpOwotCi0JCQkJRXhlY0luaXRF eHByUmVjKChFeHByICopIGpleHByLT5wYXRoX3NwZWMsIHN0YXRlLAotCQkJCQkJCQkmanNl c3RhdGUtPnBhdGhzcGVjLnZhbHVlLAotCQkJCQkJCQkmanNlc3RhdGUtPnBhdGhzcGVjLmlz bnVsbCk7Ci0KLQkJCQlpZiAocmVzdWx0X2NvZXJjaW9uKQotCQkJCXsKLQkJCQkJanNlc3Rh dGUtPnJlc3VsdF9jb2VyY2lvbi50eXBlID0gcmVzdWx0X2NvZXJjaW9uLT5jdHlwZTsKLQot CQkJCQlpZiAocmVzdWx0X2NvZXJjaW9uLT5leHByKQotCQkJCQkJanNlc3RhdGUtPnJlc3Vs dF9jb2VyY2lvbi5lc3RhdGUgPQotCQkJCQkJCUV4ZWNJbml0RXhwcldpdGhDYXNlVmFsdWUo KEV4cHIgKikgcmVzdWx0X2NvZXJjaW9uLT5leHByLAotCQkJCQkJCQkJCQkJCSAgc3RhdGUt PnBhcmVudCwKLQkJCQkJCQkJCQkJCQkgICZqc2VzdGF0ZS0+Y29lcmNpb25fZXhwci52YWx1 ZSwKLQkJCQkJCQkJCQkJCQkgICZqc2VzdGF0ZS0+Y29lcmNpb25fZXhwci5pc251bGwpOwot Ci0JCQkJCS8qIFNraXAgY29lcmNpb24gb2YgTlVMTHMgZm9yIG5vbi1kb21haW4gdHlwZXMg Ki8KLQkJCQkJanNlc3RhdGUtPnNraXBfbnVsbF9jb2VyY2lvbiA9Ci0JCQkJCQlnZXRCYXNl VHlwZShqZXhwci0+cmV0dXJuaW5nLT50eXBpZCkgPT0gamV4cHItPnJldHVybmluZy0+dHlw aWQ7Ci0JCQkJfQotCQkJCWVsc2UKLQkJCQkJanNlc3RhdGUtPnJlc3VsdF9jb2VyY2lvbi50 eXBlID0gSlNPTl9DT0VSQ0lPTl9OT05FOwotCi0JCQkJLyogQWRkaXRpb25hbCBjb2VyY2lv biBvZiBKU09OX1FVRVJZKE9NSVQgUVVPVEVTKSAqLwotCQkJCWpzZXN0YXRlLT5pb19jb2Vy Y2lvbi50eXBlID0gSlNPTl9DT0VSQ0lPTl9WSUFfSU87Ci0KLQkJCQlpZiAoamV4cHItPm9u X2VtcHR5KQotCQkJCXsKLQkJCQkJanNlc3RhdGUtPmRlZmF1bHRfb25fZW1wdHkgPQotCQkJ CQkJRXhlY0luaXRFeHByKChFeHByICopIGpleHByLT5vbl9lbXB0eS0+ZGVmYXVsdF9leHBy LAotCQkJCQkJCQkJIHN0YXRlLT5wYXJlbnQpOwotCi0JCQkJCWpzZXN0YXRlLT5kZWZhdWx0 X29uX2VtcHR5X2Nhbl90aHJvdyA9Ci0JCQkJCQlFeGVjRXZhbEV4cHJDYW5UaHJvd0Vycm9y cyhqZXhwci0+b25fZW1wdHktPmRlZmF1bHRfZXhwcik7Ci0JCQkJfQotCi0JCQkJanNlc3Rh dGUtPmRlZmF1bHRfb25fZXJyb3IgPQotCQkJCQlFeGVjSW5pdEV4cHIoKEV4cHIgKikgamV4 cHItPm9uX2Vycm9yLT5kZWZhdWx0X2V4cHIsCi0JCQkJCQkJCSBzdGF0ZS0+cGFyZW50KTsK LQotCi0JCQkJLyogSW5pdGlhbGl6ZSB0eXBlIGlucHV0IGluZm8gaWYgSS9PIGNvZXJjaW9u IGNhbiBiZSB1c2VkICovCi0JCQkJaWYgKGpleHByLT5vbWl0X3F1b3RlcyB8fAotCQkJCQlq c2VzdGF0ZS0+cmVzdWx0X2NvZXJjaW9uLnR5cGUgPT0gSlNPTl9DT0VSQ0lPTl9WSUFfSU8p Ci0JCQkJewotCQkJCQlPaWQJCQl0eXBpbnB1dDsKLQotCQkJCQkvKiBsb29rdXAgdGhlIHJl c3VsdCB0eXBlJ3MgaW5wdXQgZnVuY3Rpb24gKi8KLQkJCQkJZ2V0VHlwZUlucHV0SW5mbyhq ZXhwci0+cmV0dXJuaW5nLT50eXBpZCwgJnR5cGlucHV0LAotCQkJCQkJCQkJICZqc2VzdGF0 ZS0+aW5wdXQudHlwaW9wYXJhbSk7Ci0JCQkJCWZtZ3JfaW5mbyh0eXBpbnB1dCwgJmpzZXN0 YXRlLT5pbnB1dC5mdW5jKTsKLQkJCQl9Ci0KLQkJCQlqc2VzdGF0ZS0+YXJncyA9IE5JTDsK LQotCQkJCWZvcmJvdGgoYXJnZXhwcmxjLCBqZXhwci0+cGFzc2luZ192YWx1ZXMsCi0JCQkJ CQlhcmduYW1lbGMsIGpleHByLT5wYXNzaW5nX25hbWVzKQotCQkJCXsKLQkJCQkJRXhwcgkg ICAqYXJnZXhwciA9IChFeHByICopIGxmaXJzdChhcmdleHBybGMpOwotCQkJCQlTdHJpbmcJ ICAgKmFyZ25hbWUgPSBsZmlyc3Rfbm9kZShTdHJpbmcsIGFyZ25hbWVsYyk7Ci0JCQkJCUpz b25QYXRoVmFyaWFibGVFdmFsQ29udGV4dCAqdmFyID0gcGFsbG9jKHNpemVvZigqdmFyKSk7 Ci0KLQkJCQkJdmFyLT5uYW1lID0gcHN0cmR1cChhcmduYW1lLT5zdmFsKTsKLQkJCQkJdmFy LT50eXBpZCA9IGV4cHJUeXBlKChOb2RlICopIGFyZ2V4cHIpOwotCQkJCQl2YXItPnR5cG1v ZCA9IGV4cHJUeXBtb2QoKE5vZGUgKikgYXJnZXhwcik7Ci0JCQkJCXZhci0+ZXN0YXRlID0g RXhlY0luaXRFeHByKGFyZ2V4cHIsIHN0YXRlLT5wYXJlbnQpOwotCQkJCQl2YXItPmVjb250 ZXh0ID0gTlVMTDsKLQkJCQkJdmFyLT5tY3h0ID0gTlVMTDsKLQkJCQkJdmFyLT5ldmFsdWF0 ZWQgPSBmYWxzZTsKLQkJCQkJdmFyLT52YWx1ZSA9IChEYXR1bSkgMDsKLQkJCQkJdmFyLT5p c251bGwgPSB0cnVlOwotCi0JCQkJCWpzZXN0YXRlLT5hcmdzID0KLQkJCQkJCWxhcHBlbmQo anNlc3RhdGUtPmFyZ3MsIHZhcik7Ci0JCQkJfQotCi0JCQkJanNlc3RhdGUtPmNhY2hlID0g TlVMTDsKLQotCQkJCWlmIChqZXhwci0+Y29lcmNpb25zKQotCQkJCXsKLQkJCQkJSnNvbkNv ZXJjaW9uICoqY29lcmNpb247Ci0JCQkJCUpzb25Db2VyY2lvblN0YXRlICpjc3RhdGU7Ci0J CQkJCURhdHVtCSAgICpjYXNldmFsOwotCQkJCQlib29sCSAgICpjYXNlbnVsbDsKLQotCQkJ CQlqc2VzdGF0ZS0+aXRlbV9jb2VyY2lvbnMgPSBwYWxsb2MwKHNpemVvZigqanNlc3RhdGUt Pml0ZW1fY29lcmNpb25zKSk7Ci0KLQkJCQkJY2FzZXZhbCA9ICZqc2VzdGF0ZS0+Y29lcmNp b25fZXhwci52YWx1ZTsKLQkJCQkJY2FzZW51bGwgPSAmanNlc3RhdGUtPmNvZXJjaW9uX2V4 cHIuaXNudWxsOwotCi0JCQkJCWZvciAoY3N0YXRlID0gJmpzZXN0YXRlLT5pdGVtX2NvZXJj aW9ucy0+bnVsbCwKLQkJCQkJCSBjb2VyY2lvbiA9ICZqZXhwci0+Y29lcmNpb25zLT5udWxs OwotCQkJCQkJIGNvZXJjaW9uIDw9ICZqZXhwci0+Y29lcmNpb25zLT5jb21wb3NpdGU7Ci0J CQkJCQkgY29lcmNpb24rKywgY3N0YXRlKyspCi0JCQkJCXsKLQkJCQkJCWlmICghKmNvZXJj aW9uKQotCQkJCQkJCS8qIE1pc3NpbmcgY29lcmNpb24gaGVyZSBtZWFucyBtaXNzaW5nIGNh c3QgKi8KLQkJCQkJCQljc3RhdGUtPnR5cGUgPSBKU09OX0NPRVJDSU9OX0VSUk9SOwotCQkJ CQkJZWxzZSBpZiAoKCpjb2VyY2lvbiktPmN0eXBlID09IEpTT05fQ09FUkNJT05fVklBX0VY UFIpCi0JCQkJCQl7Ci0JCQkJCQkJQXNzZXJ0KCgqY29lcmNpb24pLT5leHByKTsKLQkJCQkJ CQljc3RhdGUtPmVzdGF0ZSA9Ci0JCQkJCQkJCUV4ZWNJbml0RXhwcldpdGhDYXNlVmFsdWUo KEV4cHIgKikgKCpjb2VyY2lvbiktPmV4cHIsCi0JCQkJCQkJCQkJCQkJCSAgc3RhdGUtPnBh cmVudCwKLQkJCQkJCQkJCQkJCQkJICBjYXNldmFsLAotCQkJCQkJCQkJCQkJCQkgIGNhc2Vu dWxsKTsKLQkJCQkJCQljc3RhdGUtPnR5cGUgPSBKU09OX0NPRVJDSU9OX1ZJQV9FWFBSOwot CQkJCQkJfQotCQkJCQkJZWxzZSBpZiAoKCpjb2VyY2lvbiktPmN0eXBlID09IEpTT05fQ09F UkNJT05fTk9ORSkKLQkJCQkJCQljc3RhdGUtPnR5cGUgPSBKU09OX0NPRVJDSU9OX05PTkU7 Ci0JCQkJCQllbHNlCi0JCQkJCQl7Ci0JCQkJCQkJLyogVGhlcmUgc2hvdWxkIG5vdCBiZSBv dGhlciBjb2VyY2lvbiB0eXBlcyAqLwotCQkJCQkJCUFzc2VydCgwKTsKLQkJCQkJCQljc3Rh dGUtPnR5cGUgPSBKU09OX0NPRVJDSU9OX0VSUk9SOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJ fQotCi0JCQkJRXhwckV2YWxQdXNoU3RlcChzdGF0ZSwgJnNjcmF0Y2gpOwogCisJCQkJRXhl Y0luaXRKc29uRXhwcigmc2NyYXRjaCwgamV4cHIsIHN0YXRlLCByZXN2LCByZXNudWxsKTsK IAkJCQlicmVhazsKIAkJCX0KIApAQCAtNDI5NiwzICs0MTU2LDU0NiBAQCBFeGVjQnVpbGRQ YXJhbVNldEVxdWFsKFR1cGxlRGVzYyBkZXNjLAogCiAJcmV0dXJuIHN0YXRlOwogfQorCitz dGF0aWMgdm9pZAorRXhlY0luaXRKc29uQ29lcmNpb25FeHByKEV4cHJTdGF0ZSAqc3RhdGUs IEV4cHIgKmNvZXJjaW9uLAorCQkJCQkJIERhdHVtICpyZXN2LCBib29sICpyZXNudWxsKQor eworCURhdHVtCSAgICpzYXZlX2lubmVybW9zdF9jYXNldmFsOworCWJvb2wJICAgKnNhdmVf aW5uZXJtb3N0X2lzbnVsbDsKKworCS8qIFB1c2ggc3RlcChzKSB0byBjb21wdXRlIGV4cHIg dXNpbmcgQ2FzZVRlc3RWYWx1ZS4gKi8KKwlzYXZlX2lubmVybW9zdF9jYXNldmFsID0gc3Rh dGUtPmlubmVybW9zdF9jYXNldmFsOworCXNhdmVfaW5uZXJtb3N0X2lzbnVsbCA9IHN0YXRl LT5pbm5lcm1vc3RfY2FzZW51bGw7CisKKwlzdGF0ZS0+aW5uZXJtb3N0X2Nhc2V2YWwgPSBy ZXN2OworCXN0YXRlLT5pbm5lcm1vc3RfY2FzZW51bGwgPSByZXNudWxsOworCisJRXhlY0lu aXRFeHByUmVjKGNvZXJjaW9uLCBzdGF0ZSwgcmVzdiwgcmVzbnVsbCk7CisKKwlzdGF0ZS0+ aW5uZXJtb3N0X2Nhc2V2YWwgPSBzYXZlX2lubmVybW9zdF9jYXNldmFsOworCXN0YXRlLT5p bm5lcm1vc3RfY2FzZW51bGwgPSBzYXZlX2lubmVybW9zdF9pc251bGw7Cit9CisKKy8qIENv bnRleHQgZm9yIHBhc3NpbmcgY29tbW9uIGZpZWxkcyB1c2VkIGZvciBKc29uRXhwciBpbml0 aWFsaXphdGlvbiAqLwordHlwZWRlZiBzdHJ1Y3QgRXhlY0luaXRKc29uQ29udGV4dAorewor CUV4cHJTdGF0ZSAgKnN0YXRlOworCUV4cHJFdmFsU3RlcCAqc2NyYXRjaDsKKwlKc29uRXhw clN0YXRlICpqc2VzdGF0ZTsKKwlEYXR1bQkgICAqcmVzdjsKKwlib29sCSAgICpyZXNudWxs OworCUxpc3QJICAgKmFkanVzdF9qdW1wczsJCS8qIGxpc3Qgb2Ygc3RlcCBudW1iZXJzIG9m IGp1bXBfZG9uZSBzdGVwcyAqLworCUxpc3QJICAgKmFkanVzdF9zdWJ0cmFuczsJLyogbGlz dCBvZiBzdGVwIG51bWJlcnMgb2Ygc3VidHJhbnMgc3RlcHMgKi8KK30gRXhlY0luaXRKc29u Q29udGV4dDsKKworc3RhdGljIGludAorRXhlY0luaXRKc29uQ29lcmNpb24oRXhlY0luaXRK c29uQ29udGV4dCAqY3h0LCBOb2RlICpleHByLAorCQkJCQkgYm9vbCBuZWVkX3N1YnRyYW5z KQoreworCUV4cHJTdGF0ZSAgKnN0YXRlID0gY3h0LT5zdGF0ZTsKKwlFeHByRXZhbFN0ZXAg KnNjcmF0Y2ggPSBjeHQtPnNjcmF0Y2g7CisJaW50CQkJc3RlcF9vZmYgPSBzdGF0ZS0+c3Rl cHNfbGVuOworCisJaWYgKElzQShleHByLCBKc29uQ29lcmNpb24pKQorCXsKKwkJSnNvbkNv ZXJjaW9uICpjb2VyY2lvbiA9IChKc29uQ29lcmNpb24gKikgZXhwcjsKKworCQlpZiAoY29l cmNpb24tPmN0eXBlID09IEpTT05fQ09FUkNJT05fTk9ORSkKKwkJCXJldHVybiAtMTsJLyog bm8gY29lcmNpb24gaXMgbmVlZGVkICovCisJfQorCisJLyogQ2hlY2sgd2hldGhlciBleHBy ZXNzaW9uIHJlYWxseSBuZWVkcyBzdWItdHJhbnNhY3Rpb25zICovCisJaWYgKG5lZWRfc3Vi dHJhbnMpCisJCW5lZWRfc3VidHJhbnMgPSBFeGVjRXZhbEV4cHJDYW5UaHJvd0Vycm9ycyhl eHByKTsKKworCS8qIEVtaXQgRUVPUF9KU09ORVhQUl9TVUJUUkFOUyBzdGVwICovCisJaWYg KG5lZWRfc3VidHJhbnMpCisJeworCQljeHQtPmFkanVzdF9zdWJ0cmFucyA9CisJCQlsYXBw ZW5kX2ludChjeHQtPmFkanVzdF9zdWJ0cmFucywgc3RhdGUtPnN0ZXBzX2xlbik7CisKKwkJ c3RhdGUtPmZsYWdzIHw9IEVFT19GTEFHX0hBVkVfU1VCVFJBTlM7CisJCXNjcmF0Y2gtPm9w Y29kZSA9IEVFT1BfU1VCVFJBTlM7CisJCXNjcmF0Y2gtPmQuc3VidHJhbnMuanVtcF9uZXh0 ID0gLTE7CQkvKiBjb21wdXRlZCBsYXRlciAqLworCQlzY3JhdGNoLT5kLnN1YnRyYW5zLmp1 bXBfZG9uZSA9IC0xOwkJLyogY29tcHV0ZWQgbGF0ZXIgKi8KKwkJc2NyYXRjaC0+ZC5zdWJ0 cmFucy5qdW1wX2Vycm9yID0gLTE7CS8qIGNvbXB1dGVkIGxhdGVyICovCisJCUV4cHJFdmFs UHVzaFN0ZXAoc3RhdGUsIHNjcmF0Y2gpOworCX0KKworCS8qIEVtaXQgZXhwcmVzc2lvbiBz dGVwLCBpZiBuZWVkZWQuICovCisJaWYgKElzQShleHByLCBKc29uQ29lcmNpb24pKQorCXsK KwkJSnNvbkNvZXJjaW9uICpjb2VyY2lvbiA9IChKc29uQ29lcmNpb24gKikgZXhwcjsKKwor CQlpZiAoY29lcmNpb24tPmN0eXBlID09IEpTT05fQ09FUkNJT05fVklBX0VYUFIpCisJCQkv KiBQdXNoIHN0ZXAocykgdG8gY29tcHV0ZSBjb2VyY2lvbi0+ZXhwciAqLworCQkJRXhlY0lu aXRKc29uQ29lcmNpb25FeHByKHN0YXRlLCAoRXhwciAqKSBjb2VyY2lvbi0+ZXhwciwKKwkJ CQkJCQkJCSBjeHQtPnJlc3YsIGN4dC0+cmVzbnVsbCk7CisJCWVsc2UgaWYgKGNvZXJjaW9u LT5jdHlwZSA9PSBKU09OX0NPRVJDSU9OX1ZJQV9QT1BVTEFURSkKKwkJeworCQkJLyogUHVz aCBzdGVwIGZvciBjb2VyY2lvbiB1c2luZyBqc29uX3BvcHVsYXRlX3R5cGUoKSAqLworCQkJ c2NyYXRjaC0+b3Bjb2RlID0gRUVPUF9KU09ORVhQUl9QT1BVTEFURTsKKwkJCXNjcmF0Y2gt PmQuanNvbmV4cHJfcG9wdWxhdGUuanNleHByID0gY3h0LT5qc2VzdGF0ZS0+anNleHByOwor CQkJc2NyYXRjaC0+ZC5qc29uZXhwcl9wb3B1bGF0ZS5jYWNoZSA9IE5VTEw7CisJCQlFeHBy RXZhbFB1c2hTdGVwKHN0YXRlLCBzY3JhdGNoKTsKKwkJfQorCQllbHNlIGlmIChjb2VyY2lv bi0+Y3R5cGUgPT0gSlNPTl9DT0VSQ0lPTl9WSUFfSU8pCisJCXsKKwkJCS8qIFB1c2ggc3Rl cCBmb3IgY29lcmNpb24gdmlhIEkvTyAqLworCQkJRm1nckluZm8gICAqZmluZm87CisJCQlP aWQJCQl0eXBpbnB1dDsKKwkJCU9pZAkJCXR5cGlvcGFyYW07CisJCQlKc29uUmV0dXJuaW5n ICpyZXR1cm5pbmcgPSBjeHQtPmpzZXN0YXRlLT5qc2V4cHItPnJldHVybmluZzsKKworCQkJ LyogbG9va3VwIHRoZSByZXN1bHQgdHlwZSdzIGlucHV0IGZ1bmN0aW9uICovCisJCQlnZXRU eXBlSW5wdXRJbmZvKHJldHVybmluZy0+dHlwaWQsICZ0eXBpbnB1dCwKKwkJCQkJCQkgJnR5 cGlvcGFyYW0pOworCQkJZmluZm8gPSBwYWxsb2MwKHNpemVvZihGbWdySW5mbykpOworCQkJ Zm1ncl9pbmZvKHR5cGlucHV0LCBmaW5mbyk7CisKKwkJCXNjcmF0Y2gtPm9wY29kZSA9IEVF T1BfSlNPTkVYUFJfSU9DT0VSQ0U7CisJCQlzY3JhdGNoLT5kLmpzb25leHByX2lvY29lcmNl LmZpbmZvID0gZmluZm87CisJCQlzY3JhdGNoLT5kLmpzb25leHByX2lvY29lcmNlLnR5cGlv cGFyYW0gPSB0eXBpb3BhcmFtOworCQkJc2NyYXRjaC0+ZC5qc29uZXhwcl9pb2NvZXJjZS50 eXBtb2QgPSByZXR1cm5pbmctPnR5cG1vZDsKKwkJCUV4cHJFdmFsUHVzaFN0ZXAoc3RhdGUs IHNjcmF0Y2gpOworCQl9CisJCWVsc2UKKwkJeworCQkJQXNzZXJ0KDApOyAvKiBOby1jb2Vy Y2lvbiBjYXNlIG11c3QgYmUgY2hlY2tlZCBhdCB0aGUgYmVnaW5uaW5nICovCisJCX0KKwl9 CisJZWxzZQorCQkvKiBQdXNoIHN0ZXAocykgdG8gY29tcHV0ZSBleHByICovCisJCUV4ZWNJ bml0RXhwclJlYygoRXhwciAqKSBleHByLCBzdGF0ZSwgY3h0LT5yZXN2LCBjeHQtPnJlc251 bGwpOworCisJaWYgKG5lZWRfc3VidHJhbnMpCisJeworCQkvKiBTdGVwIGZvciByZXR1cm5p bmcgYmFjayB0byBFRU9QX0pTT05FWFBSX1NVQlRSQU5TIHN0ZXAuICovCisJCXNjcmF0Y2gt Pm9wY29kZSA9IEVFT1BfRE9ORTsKKwkJRXhwckV2YWxQdXNoU3RlcChzdGF0ZSwgc2NyYXRj aCk7CisKKwkJc3RhdGUtPnN0ZXBzW3N0ZXBfb2ZmXS5kLnN1YnRyYW5zLmp1bXBfbmV4dCA9 IHN0YXRlLT5zdGVwc19sZW47CisJfQorCWVsc2UKKwl7CisJCS8qCisJCSAqIEVtaXQgSlVN UCBzdGVwIHRvIGp1bXAgdG8gZW5kIG9mIEpzb25FeHByIGNvZGUsIGJlY2F1c2UKKwkJICog ZXZhbHVhdGluZyB0aGUgY29lcmNpb24gb3IgZGVmYXVsdCBleHByZXNzaW9uIGdpdmVzIHRo ZQorCQkgKiBmaW5hbCByZXN1bHQgYW5kIHRoZXJlJ3Mgbm90aGluZyBtb3JlIHRvIGRvLgor CQkgKi8KKwkJc2NyYXRjaC0+b3Bjb2RlID0gRUVPUF9KVU1QOworCQlzY3JhdGNoLT5kLmp1 bXAuanVtcGRvbmUgPSAtMTsJLyogY29tcHV0ZWQgbGF0ZXIgKi8KKwkJRXhwckV2YWxQdXNo U3RlcChzdGF0ZSwgc2NyYXRjaCk7CisKKwkJLyoKKwkJICogRG9uJ3Qga25vdyBhZGRyZXNz IGZvciB0aGF0IGp1bXAgeWV0LCBjb21wdXRlIG9uY2UgdGhlIHdob2xlCisJCSAqIEpzb25F eHByIGlzIGJ1aWx0LiAgU28gcmVtZW1iZXIgSlVNUCBzdGVwIGFkZHJlc3MgdG8gc2V0CisJ CSAqIHRoZSBhY3R1YWwganVtcCB0YXJnZXQgYWRkcmVlc3MuCisJCSAqLworCQljeHQtPmFk anVzdF9qdW1wcyA9CisJCQlsYXBwZW5kX2ludChjeHQtPmFkanVzdF9qdW1wcywgc3RhdGUt PnN0ZXBzX2xlbiAtIDEpOworCX0KKworCXJldHVybiBzdGVwX29mZjsKK30KKworLyoKKyAq IFB1c2ggc3RlcHMgdG8gZXZhbHVhdGUgYSBKc29uSXRlbUNvZXJjaW9ucywgd2hpY2ggY29u dGFpbnMgdGhlIHN0YXRlCisgKiBmb3IgZXZhbHVhdGluZyBhbGwgcG9zc2libGUgY29lcmNp b25zIHRoYXQgbWF5IG5lZWQgdG8gYmUgYXBwbGllZCB0bworICogYSBKU09OIGl0ZW0gY29t aW5nIGZyb20gZXZhbHVhdGluZyB0aGUgcGFyZW50IEpzb25FeHByLgorICovCitzdGF0aWMg SnNvbkl0ZW1Db2VyY2lvbnNTdGF0ZSAqCitFeGVjSW5pdEpzb25JdGVtQ29lcmNpb25zKEV4 ZWNJbml0SnNvbkNvbnRleHQgKmN4dCwKKwkJCQkJCSAgSnNvbkl0ZW1Db2VyY2lvbnMgKmNv ZXJjaW9ucywKKwkJCQkJCSAgYm9vbCBuZWVkX3N1YnRyYW5zKQoreworCUpzb25JdGVtQ29l cmNpb25zU3RhdGUgKmpjc3RhdGUgPSBwYWxsb2MwKHNpemVvZigqamNzdGF0ZSkpOworCUpz b25Db2VyY2lvbiAqKmNvZXJjaW9uOworCWludAkJICAgKnN0ZXA7CisKKwkvKiBQdXNoIHRo ZSBzdGVwcyBvZiBpbmRpdmlkdWFsIGNvZXJjaW9uJ3MgZXhwcmVzc2lvbiwgaWYgbmVlZGVk LiAqLworCWZvciAoc3RlcCA9ICZqY3N0YXRlLT5udWxsLAorCQkgY29lcmNpb24gPSAmY29l cmNpb25zLT5udWxsOworCQkgY29lcmNpb24gPD0gJmNvZXJjaW9ucy0+Y29tcG9zaXRlOwor CQkgY29lcmNpb24rKywgc3RlcCsrKQorCXsKKwkJaWYgKCpjb2VyY2lvbikKKwkJeworCQkJ aWYgKCgqY29lcmNpb24pLT5jdHlwZSA9PSBKU09OX0NPRVJDSU9OX1ZJQV9FWFBSKQorCQkJ CSpzdGVwID0gRXhlY0luaXRKc29uQ29lcmNpb24oY3h0LCAoTm9kZSAqKSAqY29lcmNpb24s CisJCQkJCQkJCQkJCSBuZWVkX3N1YnRyYW5zKTsKKwkJCWVsc2UgaWYgKCgqY29lcmNpb24p LT5jdHlwZSA9PSBKU09OX0NPRVJDSU9OX05PTkUpCisJCQkJKnN0ZXAgPSAwOwkvKiBObyBj b2VyY2lvbiBpcyBuZWVkZWQgKi8KKwkJCWVsc2UKKwkJCXsKKwkJCQlBc3NlcnQoMCk7CS8q IFRoZXJlIHNob3VsZCBub3QgYmUgb3RoZXIgY29lcmNpb24gdHlwZXMgKi8KKwkJCQkqc3Rl cCA9IC0xOworCQkJfQorCQl9CisJCWVsc2UKKwkJCSpzdGVwID0gLTE7ICAvKiBUaGlzIG1l YW5zIHRoZXJlIGlzIG5vIGNhc3QgdG8gb3V0cHV0IHR5cGUgKi8KKwl9CisKKwlyZXR1cm4g amNzdGF0ZTsKK30KKworLyoKKyAqIEV2YWx1YXRlIGEgSlNPTiBlcnJvci9lbXB0eSBiZWhh dmlvciByZXN1bHQuCisgKi8KK3N0YXRpYyBEYXR1bQorRXhlY0pzb25CZWhhdmlvcihKc29u QmVoYXZpb3IgKmJlaGF2aW9yLCBib29sICppc19udWxsKQoreworCSppc19udWxsID0gZmFs c2U7CisKKwlzd2l0Y2ggKGJlaGF2aW9yLT5idHlwZSkKKwl7CisJCWNhc2UgSlNPTl9CRUhB VklPUl9FTVBUWV9BUlJBWToKKwkJCXJldHVybiBKc29uYlBHZXREYXR1bShKc29uYk1ha2VF bXB0eUFycmF5KCkpOworCisJCWNhc2UgSlNPTl9CRUhBVklPUl9FTVBUWV9PQkpFQ1Q6CisJ CQlyZXR1cm4gSnNvbmJQR2V0RGF0dW0oSnNvbmJNYWtlRW1wdHlPYmplY3QoKSk7CisKKwkJ Y2FzZSBKU09OX0JFSEFWSU9SX1RSVUU6CisJCQlyZXR1cm4gQm9vbEdldERhdHVtKHRydWUp OworCisJCWNhc2UgSlNPTl9CRUhBVklPUl9GQUxTRToKKwkJCXJldHVybiBCb29sR2V0RGF0 dW0oZmFsc2UpOworCisJCWNhc2UgSlNPTl9CRUhBVklPUl9OVUxMOgorCQljYXNlIEpTT05f QkVIQVZJT1JfVU5LTk9XTjoKKwkJY2FzZSBKU09OX0JFSEFWSU9SX0VNUFRZOgorCQkJKmlz X251bGwgPSB0cnVlOworCQkJcmV0dXJuIChEYXR1bSkgMDsKKworCQljYXNlIEpTT05fQkVI QVZJT1JfREVGQVVMVDoKKwkJCS8qIEFsd2F5cyBoYW5kbGVkIGluIHRoZSBjYWxsZXIuICov CisJCQlBc3NlcnQoZmFsc2UpOworCQkJcmV0dXJuIChEYXR1bSkgMDsKKworCQlkZWZhdWx0 OgorCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBTUUwvSlNPTiBiZWhhdmlvciAlZCIs IGJlaGF2aW9yLT5idHlwZSk7CisJCQlyZXR1cm4gKERhdHVtKSAwOworCX0KK30KKworLyoK KyAqIFB1c2ggc3RlcHMgdG8gZXZhbHVhdGUgT04gRVJST1IvRU1QVFkgYmVoYXZpb3I6IGl0 IGlzIGVpdGhlciBERUZBVUxUCisgKiBleHByZXNzaW9uIG9yIGNvbnN0YW50IHdpdGggb3B0 aW9uYWwgY29lcmNpb24uCisgKgorICogUmV0dXJuZWQgZmlyc3Qgc3RlcCBudW1iZXIsIG9y IC0xIGlmIG5vIHN0ZXBzLgorICovCitzdGF0aWMgaW50CitFeGVjSW5pdEpzb25CZWhhdmlv cihFeGVjSW5pdEpzb25Db250ZXh0ICpjeHQsIEpzb25CZWhhdmlvciAqYmVoYXZpb3IsCisJ CQkJCSBib29sIG5lZWRfc3VidHJhbnMsIGludCAqanVtcF9jb2VyY2lvbl9zdGVwX29mZikK K3sKKwlpZiAoIWJlaGF2aW9yIHx8IGJlaGF2aW9yLT5idHlwZSA9PSBKU09OX0JFSEFWSU9S X0VSUk9SKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoYmVoYXZpb3ItPmRlZmF1bHRfZXhwcikK KwkJcmV0dXJuIEV4ZWNJbml0SnNvbkNvZXJjaW9uKGN4dCwgYmVoYXZpb3ItPmRlZmF1bHRf ZXhwciwKKwkJCQkJCQkJCW5lZWRfc3VidHJhbnMpOworCWVsc2UKKwl7CisJCUV4cHJTdGF0 ZSAgKnN0YXRlID0gY3h0LT5zdGF0ZTsKKwkJRXhwckV2YWxTdGVwICpzY3JhdGNoID0gY3h0 LT5zY3JhdGNoOworCQlKc29uQ29lcmNpb24gKmNvZXJjaW9uID0gY3h0LT5qc2VzdGF0ZS0+ anNleHByLT5yZXN1bHRfY29lcmNpb247CisJCWJvb2wJCWlzbnVsbDsKKwkJRGF0dW0JCXZh bCA9IEV4ZWNKc29uQmVoYXZpb3IoYmVoYXZpb3IsICZpc251bGwpOworCQlpbnQJCQlzdGVw X29mZiA9IHN0YXRlLT5zdGVwc19sZW47CisKKwkJLyogU3RlcCB0byBlbWl0IHJlc3VsdGlu ZyBjb25zdGFudCAqLworCQlzY3JhdGNoLT5vcGNvZGUgPSBFRU9QX0NPTlNUOworCQlzY3Jh dGNoLT5kLmNvbnN0dmFsLnZhbHVlID0gdmFsOworCQlzY3JhdGNoLT5kLmNvbnN0dmFsLmlz bnVsbCA9IGlzbnVsbDsKKwkJRXhwckV2YWxQdXNoU3RlcChzdGF0ZSwgc2NyYXRjaCk7CisK KwkJLyogU3RlcCB0byB0aGUgY29lcmNpb24gb3IgdGhlIGVuZCBvZiBleHByZXNzaW9uICov CisJCXNjcmF0Y2gtPm9wY29kZSA9IEVFT1BfSlVNUDsKKwkJc2NyYXRjaC0+ZC5qdW1wLmp1 bXBkb25lID0gLTE7CS8qIGNvbXB1dGVkIGxhdGVyICovCisJCUV4cHJFdmFsUHVzaFN0ZXAo c3RhdGUsIHNjcmF0Y2gpOworCisJCS8qCisJCSAqIElmIGl0IGlzIGEganVtcCB0byBjb2Vy Y2lvbiwgcmV0dXJuIGl0IHRocm91Z2ggdGhlIHNwZWNpYWwKKwkJICogb3V0cHV0IHBhcmFt ZXRlciwgZWxzZSBhcHBlbmQgaXQgdG8ganVtcF9kb25lIGxpc3QuCisJCSAqLworCQlpZiAo Y29lcmNpb24gJiYgY29lcmNpb24tPmN0eXBlICE9IEpTT05fQ09FUkNJT05fTk9ORSkKKwkJ CSpqdW1wX2NvZXJjaW9uX3N0ZXBfb2ZmID0gc3RhdGUtPnN0ZXBzX2xlbiAtIDE7CisJCWVs c2UKKwkJCWN4dC0+YWRqdXN0X2p1bXBzID0KKwkJCQlsYXBwZW5kX2ludChjeHQtPmFkanVz dF9qdW1wcywgc3RhdGUtPnN0ZXBzX2xlbiAtIDEpOworCisJCXJldHVybiBzdGVwX29mZjsK Kwl9Cit9CisKKy8qCisgKiBQdXNoIHN0ZXBzIHRvIGV2YWx1YXRlIGEgSnNvbkV4cHIgYW5k IGl0cyB2YXJpb3VzIHN1YnNpZGlhcnkKKyAqIGV4cHJlc3Npb25zLgorICovCitzdGF0aWMg dm9pZAorRXhlY0luaXRKc29uRXhwcihFeHByRXZhbFN0ZXAgKnNjcmF0Y2gsIEpzb25FeHBy ICpqZXhwciwgRXhwclN0YXRlICpzdGF0ZSwKKwkJCQkgRGF0dW0gKnJlc3YsIGJvb2wgKnJl c251bGwpCit7CisJRXhlY0luaXRKc29uQ29udGV4dCBjeHQ7CisJSnNvbkV4cHJTdGF0ZSAq anNlc3RhdGU7CisJSnNvbkV4cHJQcmVFdmFsU3RhdGUgKnByZV9ldmFsOworCUV4cHJFdmFs U3RlcCAqYXM7CisJTGlzdENlbGwgICAqYXJnZXhwcmxjOworCUxpc3RDZWxsICAgKmFyZ25h bWVsYzsKKwlMaXN0Q2VsbCAgICpsYzsKKwlpbnQJCQlza2lwX3N0ZXBfb2ZmOworCWludAkJ CWV4ZWNwYXRoX3N0ZXBfb2ZmOworCWludAkJCW9uZW1wdHlfc3RlcF9vZmY7CisJaW50CQkJ b25lcnJvcl9zdGVwX29mZjsKKwlpbnQJCQlvbmVtcHR5X2p1bXBfY29lcmNpb25fc3RlcF9v ZmYgPSAtMTsKKwlpbnQJCQlvbmVycm9yX2p1bXBfY29lcmNpb25fc3RlcF9vZmYgPSAtMTsK KwlpbnQJCQljb2VyY2lvbl9zdGVwX29mZiA9IC0xOworCWludAkJCWNvZXJjaW9uX3N1YnRy YW5zX3N0ZXBfb2ZmID0gLTE7CisJaW50CQkJaW9fY29lcmNpb25fc3RlcF9vZmYgPSAtMTsK KwlpbnQJCQlkb25lX29mZjsKKwlib29sCQluZWVkX3N1YnRyYW5zOworCWJvb2wJCXNraXBf bnVsbF9jb2VyY2lvbjsKKworCS8qIEpTT05fVEFCTEUgcHJldWRvLWZ1bmN0aW9uIHJldHVy bnMgY29udGV4dCBpdGVtIGFzIGEgcmVzdWx0ICovCisJaWYgKGpleHByLT5vcCA9PSBKU09O X1RBQkxFX09QKQorCXsKKwkJRXhlY0luaXRFeHByUmVjKChFeHByICopIGpleHByLT5mb3Jt YXR0ZWRfZXhwciwgc3RhdGUsIHJlc3YsIHJlc251bGwpOworCQlyZXR1cm47CisJfQorCisJ anNlc3RhdGUgPSBwYWxsb2MwKHNpemVvZihKc29uRXhwclN0YXRlKSk7CisJanNlc3RhdGUt PmpzZXhwciA9IGpleHByOworCXByZV9ldmFsID0gJmpzZXN0YXRlLT5wcmVfZXZhbDsKKwor CWN4dC5zdGF0ZSA9IHN0YXRlOworCWN4dC5zY3JhdGNoID0gc2NyYXRjaDsKKwljeHQuanNl c3RhdGUgPSBqc2VzdGF0ZTsKKwljeHQucmVzdiA9IHJlc3Y7CisJY3h0LnJlc251bGwgPSBy ZXNudWxsOworCWN4dC5hZGp1c3RfanVtcHMgPSBOSUw7CisJY3h0LmFkanVzdF9zdWJ0cmFu cyA9IE5JTDsKKworCS8qCisJICogU2V0IGlmIGNvZXJjaW9uIG9yIERFRkFVTFQgT04gRU1Q VFkgZXhwcmVzc2lvbiwgd2hpY2ggcnVucworCSAqIHNlcGFyYXRlbHkgZnJvbSBwYXRoIGV2 YWx1YXRpb24gYW5kIHdob3NlIGVycm9ycyBtdXN0IGJlIGNhdWdodAorCSAqIGFuZCBoYW5k bGVkIHBlciBPTiBFUlJPUiBiZWhhdmlvciwgbXVzdCB1c2UgYSBzdWItdHJhbnNhY3Rpb24u CisJICovCisJbmVlZF9zdWJ0cmFucyA9IGpleHByLT5vbl9lcnJvci0+YnR5cGUgIT0gSlNP Tl9CRUhBVklPUl9FUlJPUjsKKworCS8qCisJICogQWRkIHN0ZXBzIHRvIGNvbXB1dGUgZm9y bWF0dGVkX2V4cHIsIHBhdGhzcGVjLCBhbmQgUEFTU0lORyBhcmcKKwkgKiBleHByZXNzaW9u cyBhcyB0aGluZ3MgdGhhdCBtdXN0IGJlIGV2YWx1YXRlZCAqYmVmb3JlKiB0aGUgYWN0dWFs CisJICogSlNPTiBwYXRoIGV4cHJlc3Npb24uCisJICovCisKKwlFeGVjSW5pdEV4cHJSZWMo KEV4cHIgKikgamV4cHItPmZvcm1hdHRlZF9leHByLCBzdGF0ZSwKKwkJCQkJJnByZV9ldmFs LT5mb3JtYXR0ZWRfZXhwci52YWx1ZSwKKwkJCQkJJnByZV9ldmFsLT5mb3JtYXR0ZWRfZXhw ci5pc251bGwpOworCisJRXhlY0luaXRFeHByUmVjKChFeHByICopIGpleHByLT5wYXRoX3Nw ZWMsIHN0YXRlLAorCQkJCQkmcHJlX2V2YWwtPnBhdGhzcGVjLnZhbHVlLAorCQkJCQkmcHJl X2V2YWwtPnBhdGhzcGVjLmlzbnVsbCk7CisKKwkvKgorCSAqIEJlZm9yZSBwdXNoaW5nIHN0 ZXBzIGZvciBQQVNTSU5HIGFyZ3MsIHB1c2ggYSBzdGVwIHRvIGRlY2lkZQorCSAqIHdoZXRo ZXIgdG8gc2tpcCBldmFsdWF0aW5nIHRoZSBhcmdzIGFuZCB0aGUgSlNPTiBwYXRoIGV4cHJl c3Npb24KKwkgKiBkZXBlbmRpbmcgb24gd2hldGhlciBlaXRoZXIgb2YgZm9ybWF0dGVkX2V4 cHIgYW5kIHBhdGhzcGVjIGlzCisJICogTlVMTC4KKwkgKi8KKwlzY3JhdGNoLT5vcGNvZGUg PSBFRU9QX0pTT05FWFBSX1NLSVA7CisJc2NyYXRjaC0+ZC5qc29uZXhwcl9za2lwLmpzZXN0 YXRlID0ganNlc3RhdGU7CisJc2tpcF9zdGVwX29mZiA9IHN0YXRlLT5zdGVwc19sZW47CisJ RXhwckV2YWxQdXNoU3RlcChzdGF0ZSwgc2NyYXRjaCk7CisKKwkvKiBQQVNTSU5HIGFyZ3Mu ICovCisJanNlc3RhdGUtPnByZV9ldmFsLmFyZ3MgPSBOSUw7CisJZm9yYm90aChhcmdleHBy bGMsIGpleHByLT5wYXNzaW5nX3ZhbHVlcywKKwkJCWFyZ25hbWVsYywgamV4cHItPnBhc3Np bmdfbmFtZXMpCisJeworCQlFeHByCSAgICphcmdleHByID0gKEV4cHIgKikgbGZpcnN0KGFy Z2V4cHJsYyk7CisJCVN0cmluZwkgICAqYXJnbmFtZSA9IGxmaXJzdF9ub2RlKFN0cmluZywg YXJnbmFtZWxjKTsKKwkJSnNvblBhdGhWYXJpYWJsZUV2YWxDb250ZXh0ICp2YXIgPSBwYWxs b2Moc2l6ZW9mKCp2YXIpKTsKKworCQl2YXItPm5hbWUgPSBwc3RyZHVwKGFyZ25hbWUtPnN2 YWwpOworCQl2YXItPnR5cGlkID0gZXhwclR5cGUoKE5vZGUgKikgYXJnZXhwcik7CisJCXZh ci0+dHlwbW9kID0gZXhwclR5cG1vZCgoTm9kZSAqKSBhcmdleHByKTsKKworCQkvKgorCQkg KiBBIHNlcGFyYXRlIEV4cHJTdGF0ZSBpcyBub3QgbmVjZXNzYXJ5IGZvciB0aGVzZSBleHBy ZXNzaW9ucworCQkgKiB3aGVuIGJlaW5nIGV2YWx1YXRlZCBmb3IgYSBKc29uRXhwciwgbGlr ZSBpbiB0aGlzIGNhc2UsCisJCSAqIGJlY2F1c2UgdGhleSB3aWxsIGV2YWx1YXRlZCBhcyB0 aGUgc3RlcHMgb2YgdGhlIEpzb25FeHByLgorCQkgKi8KKwkJdmFyLT5lc3RhdGUgPSBOVUxM OworCQl2YXItPmVjb250ZXh0ID0gTlVMTDsKKwkJdmFyLT5tY3h0ID0gTlVMTDsKKworCQkv KgorCQkgKiBNYXJrIHRoZXNlIGFzIGFsd2F5cyBldmFsdWF0ZWQgYmVjYXVzZSB0aGV5IG11 c3QgaGF2ZSBiZWVuCisJCSAqIGV2YWx1YXRlZCBiZWZvcmUgSlNPTiBwYXRoIGV2YWx1YXRp b24gYmVnaW5zLCBiZWNhdXNlIHdlCisJCSAqIGhhdmVuJ3QgcHVzaGVkIHRoZSBzdGVwIGZv ciB0aGUgbGF0dGVyIHlldC4KKwkJICovCisJCXZhci0+ZXZhbHVhdGVkID0gdHJ1ZTsKKwor CQlFeGVjSW5pdEV4cHJSZWMoKEV4cHIgKikgYXJnZXhwciwgc3RhdGUsICZ2YXItPnZhbHVl LCAmdmFyLT5pc251bGwpOworCisJCXByZV9ldmFsLT5hcmdzID0gbGFwcGVuZChwcmVfZXZh bC0+YXJncywgdmFyKTsKKwl9CisKKwkvKiBTdGVwIGZvciB0aGUgYWN0dWFsIEpTT04gcGF0 aCBldmFsdWF0aW9uLiAqLworCXNjcmF0Y2gtPm9wY29kZSA9IEVFT1BfSlNPTkVYUFJfUEFU SDsKKwlzY3JhdGNoLT5kLmpzb25leHByLmpzZXN0YXRlID0ganNlc3RhdGU7CisJZXhlY3Bh dGhfc3RlcF9vZmYgPSBzdGF0ZS0+c3RlcHNfbGVuOworCUV4cHJFdmFsUHVzaFN0ZXAoc3Rh dGUsIHNjcmF0Y2gpOworCisJLyoKKwkgKiBQdXNoIHN0ZXBzIHRvIGNvbnRyb2wgdGhlIGV2 YWx1YXRpb24gb2YgZXhwcmVzc2lvbnMgYmFzZWQKKwkgKiBvbiB0aGUgcmVzdWx0IG9mIEpT T04gcGF0aCBldmFsdWF0aW9uLgorCSAqLworCisJLyogU3RlcChzKSB0byBldmFsdWF0ZSBP TiBFTVBUWSBiZWhhdmlvciAqLworCW9uZW1wdHlfc3RlcF9vZmYgPSBFeGVjSW5pdEpzb25C ZWhhdmlvcigmY3h0LCBqZXhwci0+b25fZW1wdHksCisJCQkJCQkJCQkJCW5lZWRfc3VidHJh bnMsCisJCQkJCQkJCQkJCSZvbmVtcHR5X2p1bXBfY29lcmNpb25fc3RlcF9vZmYpOworCisJ LyogU3RlcChzKSB0byBldmFsdWF0ZSBPTiBFUlJPUiBiZWhhdmlvciAqLworCW9uZXJyb3Jf c3RlcF9vZmYgPSBFeGVjSW5pdEpzb25CZWhhdmlvcigmY3h0LCBqZXhwci0+b25fZXJyb3Is CisJCQkJCQkJCQkJCWZhbHNlLCAvKiBzdWItdHJhbnNhY3Rpb25zIGFyZSBub3QgbmVlZGVk IGhlcmUgKi8KKwkJCQkJCQkJCQkJJm9uZXJyb3JfanVtcF9jb2VyY2lvbl9zdGVwX29mZik7 CisKKwlBc3NlcnQoIW5lZWRfc3VidHJhbnMgfHwgb25lcnJvcl9zdGVwX29mZiA+PSAwKTsK KworCS8qCisJICogSW5pdGlhbGl6ZSBjb2VyY2lvbiBleHByZXNzaW9uLgorCSAqLworCWlm IChqZXhwci0+cmVzdWx0X2NvZXJjaW9uKQorCXsKKwkJLyoKKwkJICogRG9uJ3QgdXNlIGEg c3ViLXRyYW5zYWN0aW9uIGZvciBjb2VyY2luZyB0aGUgT04gRVJST1IKKwkJICogZXhwcmVz c2lvbi4KKwkJICovCisJCWNvZXJjaW9uX3N0ZXBfb2ZmID0KKwkJCUV4ZWNJbml0SnNvbkNv ZXJjaW9uKCZjeHQsIChOb2RlICopIGpleHByLT5yZXN1bHRfY29lcmNpb24sIGZhbHNlKTsK KworCQkvKgorCQkgKiBHZW5lcmF0ZSBhbHNvIGNvZXJjaW9uIGV4cHJlc3Npb24gd3JhcHBl ZCBpbnRvIGEKKwkJICogc3ViLXRyYW5zYWN0aW9uLCBpZiBuZWVkZWQuCisJCSAqLworCQlp ZiAobmVlZF9zdWJ0cmFucykKKwkJCWNvZXJjaW9uX3N1YnRyYW5zX3N0ZXBfb2ZmID0KKwkJ CQlFeGVjSW5pdEpzb25Db2VyY2lvbigmY3h0LCAoTm9kZSAqKSBqZXhwci0+cmVzdWx0X2Nv ZXJjaW9uLCB0cnVlKTsKKwl9CisKKwkvKgorCSAqIEVtaXQgSS9PIGNvZXJjaW9uIGlmIE9N SVQgUVVPVEVTIGlzIHVzZWQgYW5kIGl0IHdhcyBub3QgYWxyZWFkeQorCSAqIGVtaXR0ZWQu CisJICovCisJaWYgKGpleHByLT5vbWl0X3F1b3RlcyAmJgorCQkoIWpleHByLT5yZXN1bHRf Y29lcmNpb24gfHwgamV4cHItPnJlc3VsdF9jb2VyY2lvbi0+Y3R5cGUgIT0gSlNPTl9DT0VS Q0lPTl9WSUFfSU8pKQorCXsKKwkJSnNvbkNvZXJjaW9uIGlvX2NvZXJjaW9uID0gezB9Owor CisJCWlvX2NvZXJjaW9uLnR5cGUgPSBUX0pzb25Db2VyY2lvbjsKKwkJaW9fY29lcmNpb24u Y3R5cGUgPSBKU09OX0NPRVJDSU9OX1ZJQV9JTzsKKworCQlpb19jb2VyY2lvbl9zdGVwX29m ZiA9CisJCQlFeGVjSW5pdEpzb25Db2VyY2lvbigmY3h0LCAoTm9kZSAqKSAmaW9fY29lcmNp b24sIG5lZWRfc3VidHJhbnMpOworCX0KKworCS8qCisJICogSW5pdGlhbGl6ZSAiU1FML0pT T04gaXRlbSB0eXBlID0+IFNRTCB0eXBlIiBjb2VyY2lvbiBleHByZXNzaW9ucy4KKwkgKi8K KwlpZiAoamV4cHItPmNvZXJjaW9ucykKKwkJanNlc3RhdGUtPml0ZW1fY29lcmNpb25zID0K KwkJCUV4ZWNJbml0SnNvbkl0ZW1Db2VyY2lvbnMoJmN4dCwgamV4cHItPmNvZXJjaW9ucywg bmVlZF9zdWJ0cmFucyk7CisKKwkvKiBTa2lwIGNvZXJjaW9uIG9mIE5VTExzIGZvciBub24t ZG9tYWluIHR5cGVzICovCisJc2tpcF9udWxsX2NvZXJjaW9uID0KKwkJZ2V0QmFzZVR5cGUo amV4cHItPnJldHVybmluZy0+dHlwaWQpID09IGpleHByLT5yZXR1cm5pbmctPnR5cGlkOwor CisJZG9uZV9vZmYgPSBzdGF0ZS0+c3RlcHNfbGVuOworCisJLyogUmVkaXJlY3QgbWlzc2lu ZyBzdGVwcyB0byB0aGUgZW5kIHN0ZXAgKi8KKwlpZiAob25lcnJvcl9zdGVwX29mZiA8IDAp CisJCW9uZXJyb3Jfc3RlcF9vZmYgPSBkb25lX29mZjsKKworCWlmIChvbmVtcHR5X3N0ZXBf b2ZmIDwgMCkKKwkJb25lbXB0eV9zdGVwX29mZiA9IGRvbmVfb2ZmOworCisJaWYgKGNvZXJj aW9uX3N0ZXBfb2ZmIDwgMCkKKwkJY29lcmNpb25fc3RlcF9vZmYgPSBkb25lX29mZjsKKwor CWlmIChjb2VyY2lvbl9zdWJ0cmFuc19zdGVwX29mZiA8IDApCisJCWNvZXJjaW9uX3N1YnRy YW5zX3N0ZXBfb2ZmID0gY29lcmNpb25fc3RlcF9vZmY7CisKKwlpZiAoaW9fY29lcmNpb25f c3RlcF9vZmYgPCAwKQorCQlpb19jb2VyY2lvbl9zdGVwX29mZiA9IGRvbmVfb2ZmOworCisJ LyoKKwkgKiBBZGp1c3QganVtcCB0YXJnZXQgYWRkcmVzc2VzIGluIHZhcmlvdXMgcG9zdC1l dmFsIHN0ZXBzIG5vdyB0aGF0CisJICogd2UgaGF2ZSBhbGwgdGhlIHN0ZXBzIGluIHBsYWNl LgorCSAqLworCisJLyogRUVPUF9KU09ORVhQUl9QQVRIICovCisJYXMgPSAmc3RhdGUtPnN0 ZXBzW2V4ZWNwYXRoX3N0ZXBfb2ZmXTsKKwlhcy0+ZC5qc29uZXhwci5qdW1wX2RvbmUgPSBk b25lX29mZjsKKwlhcy0+ZC5qc29uZXhwci5qdW1wX29uZXJyb3IgPSBvbmVycm9yX3N0ZXBf b2ZmOworCWFzLT5kLmpzb25leHByLmp1bXBfb25lbXB0eSA9IG9uZW1wdHlfc3RlcF9vZmY7 CisJYXMtPmQuanNvbmV4cHIuanVtcF9jb2VyY2lvbiA9IGNvZXJjaW9uX3N0ZXBfb2ZmOwor CWFzLT5kLmpzb25leHByLmp1bXBfY29lcmNpb25fc3VidHJhbnMgPSBjb2VyY2lvbl9zdWJ0 cmFuc19zdGVwX29mZjsKKwlhcy0+ZC5qc29uZXhwci5qdW1wX2NvZXJjaW9uX3ZpYV9pbyA9 IGlvX2NvZXJjaW9uX3N0ZXBfb2ZmOworCWFzLT5kLmpzb25leHByLmp1bXBfY29lcmNpb25f bnVsbCA9CisJCXNraXBfbnVsbF9jb2VyY2lvbiA/IGRvbmVfb2ZmIDogY29lcmNpb25fc3Rl cF9vZmY7CisJYXMtPmQuanNvbmV4cHIuanVtcF9jb2VyY2lvbl9udWxsX3N1YnRyYW5zID0K KwkJc2tpcF9udWxsX2NvZXJjaW9uID8gZG9uZV9vZmYgOiBjb2VyY2lvbl9zdWJ0cmFuc19z dGVwX29mZjsKKworCS8qIEVFT1BfSlNPTkVYUFJfU0tJUCAqLworCWFzID0gJnN0YXRlLT5z dGVwc1tza2lwX3N0ZXBfb2ZmXTsKKwlhcy0+ZC5qc29uZXhwcl9za2lwLmp1bXBfY29lcmNp b24gPSBjb2VyY2lvbl9zdGVwX29mZjsKKworCS8qIEFkanVzdCBqdW1wIHRvIE9OIEVNUFRZ IGNvZXJjaW9uLCBpZiBhbnkgKi8KKwlpZiAob25lbXB0eV9qdW1wX2NvZXJjaW9uX3N0ZXBf b2ZmID49IDApCisJeworCQlhcyA9ICZzdGF0ZS0+c3RlcHNbb25lbXB0eV9qdW1wX2NvZXJj aW9uX3N0ZXBfb2ZmXTsKKwkJYXMtPmQuanVtcC5qdW1wZG9uZSA9CisJCQlqZXhwci0+b25f ZW1wdHktPmJ0eXBlID09IEpTT05fQkVIQVZJT1JfTlVMTCAmJgorCQkJc2tpcF9udWxsX2Nv ZXJjaW9uID8gZG9uZV9vZmYgOiBjb2VyY2lvbl9zdWJ0cmFuc19zdGVwX29mZjsKKwl9CisK KwkvKiBBZGp1c3QganVtcCB0byBPTiBFUlJPUiBjb2VyY2lvbiwgaWYgYW55ICovCisJaWYg KG9uZXJyb3JfanVtcF9jb2VyY2lvbl9zdGVwX29mZiA+PSAwKQorCXsKKwkJYXMgPSAmc3Rh dGUtPnN0ZXBzW29uZXJyb3JfanVtcF9jb2VyY2lvbl9zdGVwX29mZl07CisJCWFzLT5kLmp1 bXAuanVtcGRvbmUgPQorCQkJamV4cHItPm9uX2Vycm9yLT5idHlwZSA9PSBKU09OX0JFSEFW SU9SX05VTEwgJiYKKwkJCXNraXBfbnVsbF9jb2VyY2lvbiA/IGRvbmVfb2ZmIDogY29lcmNp b25fc3RlcF9vZmY7CisJfQorCisJLyoKKwkgKiBFRU9QX0pVTVAgc3RlcHMgYWRkZWQgYWZ0 ZXIgZGVmYXVsdCBleHByZXNzaW9ucyBhbmQgY29lcmNpb25zCisJICogc2hvdWxkIGp1bXAg dG8gdGhlIGV4cHJlc3Npb24gZW5kLgorCSAqLworCWZvcmVhY2gobGMsIGN4dC5hZGp1c3Rf anVtcHMpCisJeworCQlhcyA9ICZzdGF0ZS0+c3RlcHNbbGZpcnN0X2ludChsYyldOworCQlh cy0+ZC5qdW1wLmp1bXBkb25lID0gZG9uZV9vZmY7CisJfQorCisJLyoKKwkgKiBBZGp1c3Qg RUVPUF9TVUJUUkFOUyBqdW1wcyB0byBwb2ludCB0byB0aGUgZXhwcmVzc2lvbiBlbmQgYW5k IHRvCisJICogT04gRVJST1IgaGFuZGxlci4KKwkgKi8KKwlmb3JlYWNoKGxjLCBjeHQuYWRq dXN0X3N1YnRyYW5zKQorCXsKKwkJYXMgPSAmc3RhdGUtPnN0ZXBzW2xmaXJzdF9pbnQobGMp XTsKKwkJYXMtPmQuc3VidHJhbnMuanVtcF9kb25lID0gZG9uZV9vZmY7CisJCWFzLT5kLnN1 YnRyYW5zLmp1bXBfZXJyb3IgPSBvbmVycm9yX3N0ZXBfb2ZmOworCX0KKworCS8qCisJICog VmVyaWZ5IHRoYXQgbm8gc3VidHJhbnNhY3Rpb24gbm9kZXMgd2VyZSBnZW5lcmF0ZWQgaWYK KwkgKiBFeGVjSnNvbkV4cHJOZWVkc1N1YlRyYW5zYWN0aW9uKCkgcmV0dXJucyBmYWxzZS4K KwkgKi8KKwlBc3NlcnQoY3h0LmFkanVzdF9zdWJ0cmFucyA9PSBOSUwgfHwKKwkJICAgRXhl Y0V2YWxKc29uTmVlZHNTdWJUcmFuc2FjdGlvbihqZXhwcikpOworfQpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYyBiL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMKaW5kZXggNjY4OTgxOThmMzMuLmFmMDA0OWFiZDMz IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5jCisr KyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMKQEAgLTQ5NCw3ICs0 OTQsMTAgQEAgRXhlY0ludGVycEV4cHJTdGVwKEV4cHJTdGF0ZSAqc3RhdGUsIGludCBzdGVw bm8sCiAJCSYmQ0FTRV9FRU9QX1NVQlRSQU5TLAogCQkmJkNBU0VfRUVPUF9KU09OX0NPTlNU UlVDVE9SLAogCQkmJkNBU0VfRUVPUF9JU19KU09OLAotCQkmJkNBU0VfRUVPUF9KU09ORVhQ UiwKKwkJJiZDQVNFX0VFT1BfSlNPTkVYUFJfU0tJUCwKKwkJJiZDQVNFX0VFT1BfSlNPTkVY UFJfUEFUSCwKKwkJJiZDQVNFX0VFT1BfSlNPTkVYUFJfSU9DT0VSQ0UsCisJCSYmQ0FTRV9F RU9QX0pTT05FWFBSX1BPUFVMQVRFLAogCQkmJkNBU0VfRUVPUF9BR0dfU1RSSUNUX0RFU0VS SUFMSVpFLAogCQkmJkNBU0VfRUVPUF9BR0dfREVTRVJJQUxJWkUsCiAJCSYmQ0FTRV9FRU9Q X0FHR19TVFJJQ1RfSU5QVVRfQ0hFQ0tfQVJHUywKQEAgLTE4NTUsMTAgKzE4NTgsMzIgQEAg RXhlY0ludGVycEV4cHJTdGVwKEV4cHJTdGF0ZSAqc3RhdGUsIGludCBzdGVwbm8sCiAJCQlF RU9fTkVYVCgpOwogCQl9CiAKLQkJRUVPX0NBU0UoRUVPUF9KU09ORVhQUikKKwkJRUVPX0NB U0UoRUVPUF9KU09ORVhQUl9QQVRIKQogCQl7CiAJCQkvKiB0b28gY29tcGxleCBmb3IgYW4g aW5saW5lIGltcGxlbWVudGF0aW9uICovCi0JCQlFeGVjRXZhbEpzb25FeHByKHN0YXRlLCBv cCwgZWNvbnRleHQpOworCQkJRUVPX0pVTVAoRXhlY0V2YWxKc29uRXhwcihzdGF0ZSwgb3Ap KTsKKwkJfQorCisJCUVFT19DQVNFKEVFT1BfSlNPTkVYUFJfU0tJUCkKKwkJeworCQkJLyog dG9vIGNvbXBsZXggZm9yIGFuIGlubGluZSBpbXBsZW1lbnRhdGlvbiAqLworCQkJaWYgKEV4 ZWNFdmFsSnNvbkV4cHJTa2lwKHN0YXRlLCBvcCkpCisJCQkJRUVPX0pVTVAob3AtPmQuanNv bmV4cHJfc2tpcC5qdW1wX2NvZXJjaW9uKTsKKwkJCWVsc2UKKwkJCQlFRU9fTkVYVCgpOwor CQl9CisKKwkJRUVPX0NBU0UoRUVPUF9KU09ORVhQUl9JT0NPRVJDRSkKKwkJeworCQkJLyog dG9vIGNvbXBsZXggZm9yIGFuIGlubGluZSBpbXBsZW1lbnRhdGlvbiAqLworCQkJRXhlY0V2 YWxKc29uRXhwcklPQ29lcmNlKHN0YXRlLCBvcCk7CisJCQlFRU9fTkVYVCgpOworCQl9CisK KwkJRUVPX0NBU0UoRUVPUF9KU09ORVhQUl9QT1BVTEFURSkKKwkJeworCQkJLyogdG9vIGNv bXBsZXggZm9yIGFuIGlubGluZSBpbXBsZW1lbnRhdGlvbiAqLworCQkJRXhlY0V2YWxKc29u RXhwclBvcHVsYXRlKHN0YXRlLCBvcCwgZWNvbnRleHQpOwogCQkJRUVPX05FWFQoKTsKIAkJ fQogCkBAIC00Nzk4LDI1MiArNDgyMyw2IEBAIEV4ZWNFdmFsSnNvbkNvbnN0cnVjdG9yKEV4 cHJTdGF0ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAqb3AsCiAJKm9wLT5yZXNudWxsID0gaXNu dWxsOwogfQogCi0vKgotICogRXZhbHVhdGUgYSBKU09OIGVycm9yL2VtcHR5IGJlaGF2aW9y IHJlc3VsdC4KLSAqLwotc3RhdGljIERhdHVtCi1FeGVjRXZhbEpzb25CZWhhdmlvcihFeHBy Q29udGV4dCAqZWNvbnRleHQsIEpzb25CZWhhdmlvciAqYmVoYXZpb3IsCi0JCQkJCSBFeHBy U3RhdGUgKmRlZmF1bHRfZXN0YXRlLCBib29sICppc19udWxsKQotewotCSppc19udWxsID0g ZmFsc2U7Ci0KLQlzd2l0Y2ggKGJlaGF2aW9yLT5idHlwZSkKLQl7Ci0JCWNhc2UgSlNPTl9C RUhBVklPUl9FTVBUWV9BUlJBWToKLQkJCXJldHVybiBKc29uYlBHZXREYXR1bShKc29uYk1h a2VFbXB0eUFycmF5KCkpOwotCi0JCWNhc2UgSlNPTl9CRUhBVklPUl9FTVBUWV9PQkpFQ1Q6 Ci0JCQlyZXR1cm4gSnNvbmJQR2V0RGF0dW0oSnNvbmJNYWtlRW1wdHlPYmplY3QoKSk7Ci0K LQkJY2FzZSBKU09OX0JFSEFWSU9SX1RSVUU6Ci0JCQlyZXR1cm4gQm9vbEdldERhdHVtKHRy dWUpOwotCi0JCWNhc2UgSlNPTl9CRUhBVklPUl9GQUxTRToKLQkJCXJldHVybiBCb29sR2V0 RGF0dW0oZmFsc2UpOwotCi0JCWNhc2UgSlNPTl9CRUhBVklPUl9OVUxMOgotCQljYXNlIEpT T05fQkVIQVZJT1JfVU5LTk9XTjoKLQkJY2FzZSBKU09OX0JFSEFWSU9SX0VNUFRZOgotCQkJ KmlzX251bGwgPSB0cnVlOwotCQkJcmV0dXJuIChEYXR1bSkgMDsKLQotCQljYXNlIEpTT05f QkVIQVZJT1JfREVGQVVMVDoKLQkJCXJldHVybiBFeGVjRXZhbEV4cHIoZGVmYXVsdF9lc3Rh dGUsIGVjb250ZXh0LCBpc19udWxsKTsKLQotCQlkZWZhdWx0OgotCQkJZWxvZyhFUlJPUiwg InVucmVjb2duaXplZCBTUUwvSlNPTiBiZWhhdmlvciAlZCIsIGJlaGF2aW9yLT5idHlwZSk7 Ci0JCQlyZXR1cm4gKERhdHVtKSAwOwotCX0KLX0KLQotCi10eXBlZGVmIHN0cnVjdCBFdmFs SnNvblN1YnRyYW5zU3RhdGUKLXsKLQlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7Ci0JUmVz b3VyY2VPd25lciBvbGRvd25lcjsKLX0gRXZhbEpzb25TdWJ0cmFuc1N0YXRlOwotCi1zdGF0 aWMgdm9pZAotRXhlY0V2YWxKc29uU3RhcnRTdWJ0cmFucyhFdmFsSnNvblN1YnRyYW5zU3Rh dGUgKnN0YXRlKQotewotCS8qCi0JICogV2Ugc2hvdWxkIGNhdGNoIGV4Y2VwdGlvbnMgb2Yg Y2F0ZWdvcnkgRVJSQ09ERV9EQVRBX0VYQ0VQVElPTiBhbmQKLQkgKiBleGVjdXRlIHRoZSBj b3JyZXNwb25kaW5nIE9OIEVSUk9SIGJlaGF2aW9yIHRoZW4uCi0JICovCi0Jc3RhdGUtPm9s ZGNvbnRleHQgPSBDdXJyZW50TWVtb3J5Q29udGV4dDsKLQlzdGF0ZS0+b2xkb3duZXIgPSBD dXJyZW50UmVzb3VyY2VPd25lcjsKLQotCUJlZ2luSW50ZXJuYWxTdWJUcmFuc2FjdGlvbihO VUxMKTsKLQotCS8qIFdhbnQgdG8gZXhlY3V0ZSBleHByZXNzaW9ucyBpbnNpZGUgZnVuY3Rp b24ncyBtZW1vcnkgY29udGV4dCAqLwotCS8qCi0JICogQUZJWE1FOiBJIGRvbid0IHRoaW5r IHRoYXQncyBPSywgdGhlcmUgbWlnaHQgYmUgbG90cyBvZiBsZWFrZWQgbWVtb3J5Ci0JICog ZXRjLgotCSAqLwotCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhzdGF0ZS0+b2xkY29udGV4dCk7 Ci19Ci0KLXN0YXRpYyB2b2lkCi1FeGVjRXZhbEpzb25FbmRTdWJ0cmFucyhFdmFsSnNvblN1 YnRyYW5zU3RhdGUgKnN0YXRlKQotewotCS8qIENvbW1pdCB0aGUgaW5uZXIgdHJhbnNhY3Rp b24sIHJldHVybiB0byBvdXRlciB4YWN0IGNvbnRleHQgKi8KLQlSZWxlYXNlQ3VycmVudFN1 YlRyYW5zYWN0aW9uKCk7Ci0JTWVtb3J5Q29udGV4dFN3aXRjaFRvKHN0YXRlLT5vbGRjb250 ZXh0KTsKLQlDdXJyZW50UmVzb3VyY2VPd25lciA9IHN0YXRlLT5vbGRvd25lcjsKLX0KLQot c3RhdGljIHZvaWQKLUV4ZWNFdmFsSnNvbkNhdGNoRXJyb3IoRXZhbEpzb25TdWJ0cmFuc1N0 YXRlICpzdGF0ZSkKLXsKLQlFcnJvckRhdGEgICplZGF0YTsKLQlpbnQJCQllY2F0ZWdvcnk7 Ci0KLQkvKiBTYXZlIGVycm9yIGluZm8gaW4gb2xkY29udGV4dCAqLwotCU1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhzdGF0ZS0+b2xkY29udGV4dCk7Ci0JZWRhdGEgPSBDb3B5RXJyb3JEYXRh KCk7Ci0JRmx1c2hFcnJvclN0YXRlKCk7Ci0KLQkvKiBBYm9ydCB0aGUgaW5uZXIgdHJhbnNh Y3Rpb24gKi8KLQlSb2xsYmFja0FuZFJlbGVhc2VDdXJyZW50U3ViVHJhbnNhY3Rpb24oKTsK LQlNZW1vcnlDb250ZXh0U3dpdGNoVG8oc3RhdGUtPm9sZGNvbnRleHQpOwotCUN1cnJlbnRS ZXNvdXJjZU93bmVyID0gc3RhdGUtPm9sZG93bmVyOwotCi0JZWNhdGVnb3J5ID0gRVJSQ09E RV9UT19DQVRFR09SWShlZGF0YS0+c3FsZXJyY29kZSk7Ci0KLQlpZiAoZWNhdGVnb3J5ICE9 IEVSUkNPREVfREFUQV9FWENFUFRJT04gJiYJLyoganNvbnBhdGggYW5kIG90aGVyIGRhdGEK LQkJCQkJCQkJCQkJCSAqIGVycm9ycyAqLwotCQllY2F0ZWdvcnkgIT0gRVJSQ09ERV9JTlRF R1JJVFlfQ09OU1RSQUlOVF9WSU9MQVRJT04pCS8qIGRvbWFpbiBlcnJvcnMgKi8KLQl7Ci0J CVJlVGhyb3dFcnJvcihlZGF0YSk7Ci0JfQotfQotCi0vKgotICogSWYgYGVycm9yYCBpcyBu b3QgTlVMTCAod2UgbmVlZCB0byBjYXRjaCBlcnJvcnMpLCBleGVjdXRlIHRoZQotICogc3Rh dGVtZW50IHBhc3NlZCBpbiB0aGUgdGhpcmQgYXJndW1lbnQgaW5zaWRlIGEgc3VidHJhbnNh Y3Rpb24sCi0gKiBvdGhlcndpc2UgZG8gaXQgb3V0c2lkZS4gIEluIHRoZSBzdWJ0cmFucyBj YXNlIGFuIGVycm9yIGNsYXNzaWZpZWQgYXMKLSAqIGJlaW5nIGNhdGNoYWJsZSBieSBFeGVj RXZhbEpzb25DYXRjaEVycm9yKCkgd2lsbCBzZXQgYGVycm9yYCB0byB0cnVlLgotICovCi0j ZGVmaW5lIEpTRV9PUFRfU1VCVFJBTlMoZXJyb3IsIGpleHByLCByZXMsIC4uLikgXAotCWRv IHsgXAotCQlib29sICplcnJvcl8gPSAoZXJyb3IpOyBcCi0JCVwKLQkJaWYgKCFlcnJvcl8p IFwKLQkJeyBcCi0JCQlyZXMgPSBfX1ZBX0FSR1NfXzsgXAotCQl9IFwKLQkJZWxzZSBcCi0J CXsgXAotCQkJRXZhbEpzb25TdWJ0cmFuc1N0YXRlIHN1YnN0YXRlID0gezB9OyBcCi0JCQlc Ci0JCQkvKiBDaGVjayBjb3JyZWN0bmVzcyBvZiBFeGVjRXZhbEpzb25OZWVkc1N1YlRyYW5z YWN0aW9uKCkgKi8gXAotCQkJQXNzZXJ0TWFjcm8oRXhlY0V2YWxKc29uTmVlZHNTdWJUcmFu c2FjdGlvbihqZXhwcikpOyBcCi0JCQlcCi0JCQlFeGVjRXZhbEpzb25TdGFydFN1YnRyYW5z KCZzdWJzdGF0ZSk7IFwKLQkJCVwKLQkJCVBHX1RSWSgpOyBcCi0JCQl7IFwKLQkJCQlyZXMg PSBfX1ZBX0FSR1NfXzsgXAotCQkJCUV4ZWNFdmFsSnNvbkVuZFN1YnRyYW5zKCZzdWJzdGF0 ZSk7IFwKLQkJCX0gXAotCQkJUEdfQ0FUQ0goKTsgXAotCQkJeyBcCi0JCQkJRXhlY0V2YWxK c29uQ2F0Y2hFcnJvcigmc3Vic3RhdGUpOyBcCi0JCQkJXAotCQkJCXJlcyA9IChEYXR1bSkg MDsgXAotCQkJCSplcnJvcl8gPSB0cnVlOyBcCi0JCQl9IFwKLQkJCVBHX0VORF9UUlkoKTsg XAotCQkgfSBcCi0JfSB3aGlsZSAoMCkKLQotLyogRXhlY3V0ZSBvbmUgb2YgcG9zc2libGUg Y29lcmNpb25zIG9yIHJlcG9ydCBhbiBlcnJvciBpZiB0aGVyZSBpcyBubyBjYXN0ICovCi1z dGF0aWMgRGF0dW0KLUV4ZWNFdmFsSnNvbkV4cHJDb2VyY2lvbihKc29uRXhwclN0YXRlICpq c2VzdGF0ZSwgRXhwckNvbnRleHQgKmVjb250ZXh0LAotCQkJCQkJIEpzb25Db2VyY2lvblN0 YXRlICpjb2VyY2lvbiwKLQkJCQkJCSBEYXR1bSByZXMsIGJvb2wgKnJlc251bGwsIGJvb2wg KmVycm9yKQotewotCXN3aXRjaCAoY29lcmNpb24tPnR5cGUpCi0JewotCQljYXNlIEpTT05f Q09FUkNJT05fTk9ORToKLQkJCXJldHVybiAoRGF0dW0pIHJlczsKLQotCQljYXNlIEpTT05f Q09FUkNJT05fVklBX0VYUFI6Ci0JCQlqc2VzdGF0ZS0+Y29lcmNpb25fZXhwci52YWx1ZSA9 IHJlczsKLQkJCWpzZXN0YXRlLT5jb2VyY2lvbl9leHByLmlzbnVsbCA9ICpyZXNudWxsOwot CQkJcmV0dXJuIEV4ZWNFdmFsRXhwcihjb2VyY2lvbi0+ZXN0YXRlLCBlY29udGV4dCwgcmVz bnVsbCk7Ci0KLQkJY2FzZSBKU09OX0NPRVJDSU9OX1ZJQV9JTzoKLQkJCXsKLQkJCQkvKiBT dHJpcCBxdW90ZXMgZnJvbSBqc29uYiBzdHJpbmdzIGFuZCBjYWxsIHR5cGlucHV0KCkgKi8K LQkJCQljaGFyCSAgICpzdHI7Ci0KLQkJCQlpZiAoKnJlc251bGwpCi0JCQkJCXN0ciA9IE5V TEw7Ci0JCQkJZWxzZQotCQkJCQlzdHIgPSBKc29uYlVucXVvdGUoRGF0dW1HZXRKc29uYlAo cmVzKSk7Ci0KLQkJCQlyZXR1cm4gSW5wdXRGdW5jdGlvbkNhbGwoJmpzZXN0YXRlLT5pbnB1 dC5mdW5jLCBzdHIsCi0JCQkJCQkJCQkJIGpzZXN0YXRlLT5pbnB1dC50eXBpb3BhcmFtLAot CQkJCQkJCQkJCSBqc2VzdGF0ZS0+anNleHByLT5yZXR1cm5pbmctPnR5cG1vZCk7Ci0JCQl9 Ci0KLQkJY2FzZSBKU09OX0NPRVJDSU9OX1ZJQV9QT1BVTEFURToKLQkJCXJldHVybiBqc29u X3BvcHVsYXRlX3R5cGUocmVzLCBKU09OQk9JRCwKLQkJCQkJCQkJCSAganNlc3RhdGUtPmpz ZXhwci0+cmV0dXJuaW5nLT50eXBpZCwKLQkJCQkJCQkJCSAganNlc3RhdGUtPmpzZXhwci0+ cmV0dXJuaW5nLT50eXBtb2QsCi0JCQkJCQkJCQkgICZqc2VzdGF0ZS0+Y2FjaGUsCi0JCQkJ CQkJCQkgIGVjb250ZXh0LT5lY3h0X3Blcl9xdWVyeV9tZW1vcnksCi0JCQkJCQkJCQkgIHJl c251bGwpOwotCi0JCWRlZmF1bHQ6Ci0JCQlBc3NlcnQoY29lcmNpb24tPnR5cGUgPT0gSlNP Tl9DT0VSQ0lPTl9FUlJPUik7Ci0KLQkJCS8qIFJlcG9ydCBhbiBlcnJvciBpZiB0aGVyZSBp cyBubyBjYXN0IHRvIHRoZSBvdXRwdXQgdHlwZSAqLwotCQkJaWYgKCFlcnJvcikKLQkJCQll cmVwb3J0KEVSUk9SLAotCQkJCQkoZXJyY29kZShFUlJDT0RFX1NRTF9KU09OX0lURU1fQ0FO Tk9UX0JFX0NBU1RfVE9fVEFSR0VUX1RZUEUpLAotCQkJCQkgZXJybXNnKCJTUUwvSlNPTiBp dGVtIGNhbm5vdCBiZSBjYXN0IHRvIHRhcmdldCB0eXBlIikpKTsKLQotCQkJKmVycm9yID0g dHJ1ZTsKLQkJCSpyZXNudWxsID0gdHJ1ZTsKLQkJCXJldHVybiAoRGF0dW0pIDA7Ci0JfQot fQotCi0vKgotICogRXZhbHVhdGUgYSBKU09OIHBhdGggdmFyaWFibGUgY2FjaGluZyBjb21w dXRlZCB2YWx1ZS4KLSAqLwotaW50Ci1FdmFsSnNvblBhdGhWYXIodm9pZCAqY3h0LCBjaGFy ICp2YXJOYW1lLCBpbnQgdmFyTmFtZUxlbiwKLQkJCQlKc29uYlZhbHVlICp2YWwsIEpzb25i VmFsdWUgKmJhc2VPYmplY3QpCi17Ci0JSnNvblBhdGhWYXJpYWJsZUV2YWxDb250ZXh0ICp2 YXIgPSBOVUxMOwotCUxpc3QJICAgKnZhcnMgPSBjeHQ7Ci0JTGlzdENlbGwgICAqbGM7Ci0J aW50CQkJaWQgPSAxOwotCi0JaWYgKCF2YXJOYW1lKQotCQlyZXR1cm4gbGlzdF9sZW5ndGgo dmFycyk7Ci0KLQlmb3JlYWNoKGxjLCB2YXJzKQotCXsKLQkJdmFyID0gbGZpcnN0KGxjKTsK LQotCQlpZiAoIXN0cm5jbXAodmFyLT5uYW1lLCB2YXJOYW1lLCB2YXJOYW1lTGVuKSkKLQkJ CWJyZWFrOwotCi0JCXZhciA9IE5VTEw7Ci0JCWlkKys7Ci0JfQotCi0JaWYgKCF2YXIpCi0J CXJldHVybiAtMTsKLQotCWlmICghdmFyLT5ldmFsdWF0ZWQpCi0JewotCQlNZW1vcnlDb250 ZXh0IG9sZGN4dCA9IHZhci0+bWN4dCA/Ci0JCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyh2YXIt Pm1jeHQpIDogTlVMTDsKLQotCQl2YXItPnZhbHVlID0gRXhlY0V2YWxFeHByKHZhci0+ZXN0 YXRlLCB2YXItPmVjb250ZXh0LCAmdmFyLT5pc251bGwpOwotCQl2YXItPmV2YWx1YXRlZCA9 IHRydWU7Ci0KLQkJaWYgKG9sZGN4dCkKLQkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRj eHQpOwotCX0KLQotCWlmICh2YXItPmlzbnVsbCkKLQl7Ci0JCXZhbC0+dHlwZSA9IGpidk51 bGw7Ci0JCXJldHVybiAwOwotCX0KLQotCUpzb25JdGVtRnJvbURhdHVtKHZhci0+dmFsdWUs IHZhci0+dHlwaWQsIHZhci0+dHlwbW9kLCB2YWwpOwotCi0JKmJhc2VPYmplY3QgPSAqdmFs OwotCXJldHVybiBpZDsKLX0KLQogLyoKICAqIENoZWNrIHdoZXRoZXIgd2UgbmVlZCB0byBv dmVycmlkZSBkZWZhdWx0IGNvZXJjaW9uIGluCiAgKiBKU09OX1FVRVJZKE9NSVQgUVVPVEVT KSBjYXNlLgpAQCAtNTA2NCw3OCArNDg0Myw4NCBAQCBFeGVjSnNvblF1ZXJ5TmVlZHNJT0Nv ZXJjaW9uKEpzb25FeHByICpqc2V4cHIsIERhdHVtIHJlcywgYm9vbCBpc251bGwpCiB9CiAK IC8qCi0gKiBQcmVwYXJlIFNRTC9KU09OIGl0ZW0gY29lcmNpb24gdG8gdGhlIEpTT05fVkFM VUUgb3V0cHV0IHR5cGUuCi0gKiBSZXR1cm5lZCBhIGNvZXJjaW9uIHN0YXR1cywgYSBkYXR1 bSBvZiB0aGUgY29ycmVzcG9uZGluZyBTUUwgdHlwZQotICogYW5kIGEgcG9pbnRlciB0byBz ZWxlY3RlZCBjb2VyY2lvbiBzdGF0ZS4KKyAqIFByZXBhcmUgU1FML0pTT04gaXRlbSBjb2Vy Y2lvbiB0byB0aGUgb3V0cHV0IHR5cGUuICBSZXR1cm5lZCBhIGRhdHVtCisgKiBvZiB0aGUg Y29ycmVzcG9uZGluZyBTUUwgdHlwZSBhbmQgcG9pbnRlcnMgdG8gdGhlIGNvZXJjaW9uIGFu ZCBpdHMKKyAqIHN0YXRlLgogICovCiBzdGF0aWMgRGF0dW0KLUV4ZWNQcmVwYXJlSnNvblZh bHVlQ29lcmNpb24oSnNvbkV4cHJTdGF0ZSAqanNlc3RhdGUsIEpzb25iVmFsdWUgKml0ZW0s Ci0JCQkJCQkJIEpzb25Db2VyY2lvblN0YXRlICoqY29lcmNpb24sIGJvb2wgKnJlc251bGwp CitFeGVjUHJlcGFyZUpzb25WYWx1ZUNvZXJjaW9uKEpzb25iVmFsdWUgKml0ZW0sIEV4cHJF dmFsU3RlcCAqb3AsCisJCQkJCQkJIEpzb25JdGVtQ29lcmNpb25zU3RhdGUgKnN0ZXBzLCBp bnQgKmp1bXApCiB7Ci0Jc3RydWN0IEpzb25JdGVtc0NvZXJjaW9uU3RhdGVzICpjb2VyY2lv bnMgPSBqc2VzdGF0ZS0+aXRlbV9jb2VyY2lvbnM7Ci0JSnNvbmJWYWx1ZQlidWY7CisJSnNv bmJWYWx1ZSAJYnVmOwogCi0JKnJlc251bGwgPSBmYWxzZTsKLQotCWlmICghY29lcmNpb25z KQorCS8qCisJICogU3BlY2lhbCBjYXNlIGZvciBqc29uIGFuZCBqc29uYiB0eXBlcyBmb3Ig d2hpY2ggd2UgZG9uJ3QgaGF2ZQorCSAqIGNhc3RzIGxpa2UgbnVtZXJpYzo6anNvbmIgZXRj LgorCSAqLworCWlmICghc3RlcHMpCiAJeworCQlKc29uYgkgICAqamIgPSBKc29uYlZhbHVl VG9Kc29uYihpdGVtKTsKKwogCQkvKgotCQkgKiBTcGVjaWFsIGNhc2UgZm9yIGpzb25bYl0g b3V0cHV0IHR5cGVzLiAgU2ltcGx5IHVzZQotCQkgKiBkZWZhdWx0IGNvZXJjaW9uIGZyb20g anNvbmIgdG8gdGhlIG91dHB1dCB0eXBlLgorCQkgKiBVc2UgcmVzdWx0IGNvZXJjaW9uIGZy b20ganNvbltiXSB0byB0aGUgb3V0cHV0CisJCSAqIHR5cGUgd2hlbiBjYXN0aW5nIHRvIGpz b25bYl0gdHlwZXMgb3IgdGhlaXIKKwkJICogZG9tYWlucy4KIAkJICovCi0JCXJldHVybiBK c29uYlBHZXREYXR1bShKc29uYlZhbHVlVG9Kc29uYihpdGVtKSk7CisKKwkJKmp1bXAgPSBv cC0+ZC5qc29uZXhwci5qdW1wX2NvZXJjaW9uX3N1YnRyYW5zOworCQlyZXR1cm4gSnNvbmJQ R2V0RGF0dW0oamIpOzsKIAl9CiAKLQkvKiBVc2UgY29lcmNpb24gZnJvbSBTUUwvSlNPTiBp dGVtIHR5cGUgdG8gdGhlIG91dHB1dCB0eXBlICovCisJLyogRXh0cmFjdCBzY2FsYXIgZnJv bSBiaW5hcnkgc2NhbGFyIHByZXN1ZG8tYXJyYXkgKi8KIAlpZiAoaXRlbS0+dHlwZSA9PSBq YnZCaW5hcnkgJiYKIAkJSnNvbkNvbnRhaW5lcklzU2NhbGFyKGl0ZW0tPnZhbC5iaW5hcnku ZGF0YSkpCiAJewotCQlib29sCQlyZXMgUEdfVVNFRF9GT1JfQVNTRVJUU19PTkxZOworCQli b29sCQlpc19zY2FsYXIgUEdfVVNFRF9GT1JfQVNTRVJUU19PTkxZOworCisJCWlzX3NjYWxh ciA9IEpzb25iRXh0cmFjdFNjYWxhcihpdGVtLT52YWwuYmluYXJ5LmRhdGEsICZidWYpOwor CQlBc3NlcnQoaXNfc2NhbGFyKTsKIAotCQlyZXMgPSBKc29uYkV4dHJhY3RTY2FsYXIoaXRl bS0+dmFsLmJpbmFyeS5kYXRhLCAmYnVmKTsKIAkJaXRlbSA9ICZidWY7Ci0JCUFzc2VydChy ZXMpOwogCX0KIAogCS8qIGdldCBjb2VyY2lvbiBzdGF0ZSByZWZlcmVuY2UgYW5kIGRhdHVt IG9mIHRoZSBjb3JyZXNwb25kaW5nIFNRTCB0eXBlICovCiAJc3dpdGNoIChpdGVtLT50eXBl KQogCXsKIAkJY2FzZSBqYnZOdWxsOgotCQkJQXNzZXJ0KDApOyAvKiBtdXN0IGJlIGhhbmRs ZWQgYnkgdGhlIGNhbGxlciAqLwotCQkJKmNvZXJjaW9uID0gJmNvZXJjaW9ucy0+bnVsbDsK LQkJCSpyZXNudWxsID0gdHJ1ZTsKKwkJCSpqdW1wID0gc3RlcHMtPm51bGw7CiAJCQlyZXR1 cm4gKERhdHVtKSAwOwogCiAJCWNhc2UgamJ2U3RyaW5nOgotCQkJKmNvZXJjaW9uID0gJmNv ZXJjaW9ucy0+c3RyaW5nOwotCQkJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShjc3RyaW5nX3Rv X3RleHRfd2l0aF9sZW4oaXRlbS0+dmFsLnN0cmluZy52YWwsCi0JCQkJCQkJCQkJCQkJCQlp dGVtLT52YWwuc3RyaW5nLmxlbikpOworCQkJKmp1bXAgPSBzdGVwcy0+c3RyaW5nOworCQkJ cmV0dXJuICpqdW1wIDwgMCA/IChEYXR1bSkgMCA6CisJCQkJUG9pbnRlckdldERhdHVtKGNz dHJpbmdfdG9fdGV4dF93aXRoX2xlbihpdGVtLT52YWwuc3RyaW5nLnZhbCwKKwkJCQkJCQkJ CQkJCQkJIGl0ZW0tPnZhbC5zdHJpbmcubGVuKSk7CiAKIAkJY2FzZSBqYnZOdW1lcmljOgot CQkJKmNvZXJjaW9uID0gJmNvZXJjaW9ucy0+bnVtZXJpYzsKKwkJCSpqdW1wID0gc3RlcHMt Pm51bWVyaWM7CiAJCQlyZXR1cm4gTnVtZXJpY0dldERhdHVtKGl0ZW0tPnZhbC5udW1lcmlj KTsKIAogCQljYXNlIGpidkJvb2w6Ci0JCQkqY29lcmNpb24gPSAmY29lcmNpb25zLT5ib29s ZWFuOworCQkJKmp1bXAgPSBzdGVwcy0+Ym9vbGVhbjsKIAkJCXJldHVybiBCb29sR2V0RGF0 dW0oaXRlbS0+dmFsLmJvb2xlYW4pOwogCiAJCWNhc2UgamJ2RGF0ZXRpbWU6CiAJCQlzd2l0 Y2ggKGl0ZW0tPnZhbC5kYXRldGltZS50eXBpZCkKIAkJCXsKIAkJCQljYXNlIERBVEVPSUQ6 Ci0JCQkJCSpjb2VyY2lvbiA9ICZjb2VyY2lvbnMtPmRhdGU7CisJCQkJCSpqdW1wID0gc3Rl cHMtPmRhdGU7CiAJCQkJCWJyZWFrOwogCQkJCWNhc2UgVElNRU9JRDoKLQkJCQkJKmNvZXJj aW9uID0gJmNvZXJjaW9ucy0+dGltZTsKKwkJCQkJKmp1bXAgPSBzdGVwcy0+dGltZTsKIAkJ CQkJYnJlYWs7CiAJCQkJY2FzZSBUSU1FVFpPSUQ6Ci0JCQkJCSpjb2VyY2lvbiA9ICZjb2Vy Y2lvbnMtPnRpbWV0ejsKKwkJCQkJKmp1bXAgPSBzdGVwcy0+dGltZXR6OwogCQkJCQlicmVh azsKIAkJCQljYXNlIFRJTUVTVEFNUE9JRDoKLQkJCQkJKmNvZXJjaW9uID0gJmNvZXJjaW9u cy0+dGltZXN0YW1wOworCQkJCQkqanVtcCA9IHN0ZXBzLT50aW1lc3RhbXA7CiAJCQkJCWJy ZWFrOwogCQkJCWNhc2UgVElNRVNUQU1QVFpPSUQ6Ci0JCQkJCSpjb2VyY2lvbiA9ICZjb2Vy Y2lvbnMtPnRpbWVzdGFtcHR6OworCQkJCQkqanVtcCA9IHN0ZXBzLT50aW1lc3RhbXB0ejsK IAkJCQkJYnJlYWs7CiAJCQkJZGVmYXVsdDoKIAkJCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0 ZWQganNvbmIgZGF0ZXRpbWUgdHlwZSBvaWQgJXUiLApAQCAtNTE0OSw4ICs0OTM0LDkgQEAg RXhlY1ByZXBhcmVKc29uVmFsdWVDb2VyY2lvbihKc29uRXhwclN0YXRlICpqc2VzdGF0ZSwg SnNvbmJWYWx1ZSAqaXRlbSwKIAkJY2FzZSBqYnZPYmplY3Q6CiAJCWNhc2UgamJ2QmluYXJ5 OgogCQkJQXNzZXJ0KDApOwkvKiBub24tc2NhbGFycyBtdXN0IGJlIHJlamVjdGVkIGJ5IEpz b25QYXRoVmFsdWUoKSAqLwotCQkJKmNvZXJjaW9uID0gJmNvZXJjaW9ucy0+Y29tcG9zaXRl OwotCQkJcmV0dXJuIEpzb25iUEdldERhdHVtKEpzb25iVmFsdWVUb0pzb25iKGl0ZW0pKTsK KwkJCSpqdW1wID0gc3RlcHMtPmNvbXBvc2l0ZTsKKwkJCXJldHVybiAqanVtcCA8IDAgPyAo RGF0dW0pIDAgOgorCQkJCUpzb25iUEdldERhdHVtKEpzb25iVmFsdWVUb0pzb25iKGl0ZW0p KTsKIAogCQlkZWZhdWx0OgogCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQganNvbmIgdmFs dWUgdHlwZSAlZCIsIGl0ZW0tPnR5cGUpOwpAQCAtNTE1OCwxMjkgKzQ5NDQsMTU5IEBAIEV4 ZWNQcmVwYXJlSnNvblZhbHVlQ29lcmNpb24oSnNvbkV4cHJTdGF0ZSAqanNlc3RhdGUsIEpz b25iVmFsdWUgKml0ZW0sCiAJfQogfQogCi1zdGF0aWMgRGF0dW0KLUV4ZWNFdmFsSnNvbkV4 cHJJbnRlcm5hbChKc29uRXhwclN0YXRlICpqc2VzdGF0ZSwgRXhwckNvbnRleHQgKmVjb250 ZXh0LAotCQkJCQkJIEpzb25QYXRoICpwYXRoLCBEYXR1bSBpdGVtLCBib29sICpyZXNudWxs LAotCQkJCQkJIGJvb2wgKmVycm9yKQorLyoKKyAqIEV2YWx1YXRlIGEgU1FML0pTT04gZnVu Y3Rpb24uCisgKi8KK2ludAorRXhlY0V2YWxKc29uRXhwcihFeHByU3RhdGUgKnN0YXRlLCBF eHByRXZhbFN0ZXAgKm9wKQogeworCUpzb25FeHByU3RhdGUgKmpzZXN0YXRlID0gb3AtPmQu anNvbmV4cHIuanNlc3RhdGU7CisJSnNvbkV4cHJQcmVFdmFsU3RhdGUgKnByZV9ldmFsID0g JmpzZXN0YXRlLT5wcmVfZXZhbDsKIAlKc29uRXhwciAgICpqZXhwciA9IGpzZXN0YXRlLT5q c2V4cHI7Ci0JSnNvbkNvZXJjaW9uU3RhdGUgKmNvZXJjaW9uID0gJmpzZXN0YXRlLT5yZXN1 bHRfY29lcmNpb247Ci0JYm9vbAkJZW1wdHkgPSBmYWxzZTsKKwlEYXR1bQkJaXRlbSA9IHBy ZV9ldmFsLT5mb3JtYXR0ZWRfZXhwci52YWx1ZTsKKwlKc29uUGF0aCAgICpwYXRoID0gRGF0 dW1HZXRKc29uUGF0aFAocHJlX2V2YWwtPnBhdGhzcGVjLnZhbHVlKTsKKwlib29sCQljYXRj aF9lcnJvcnMgPQorCQlqZXhwci0+b25fZXJyb3ItPmJ0eXBlICE9IEpTT05fQkVIQVZJT1Jf RVJST1I7CiAJRGF0dW0JCXJlcyA9IChEYXR1bSkgMDsKKwlib29sCQllbXB0eSA9IGZhbHNl OworCWJvb2wJCWVycm9yID0gZmFsc2U7CisJYm9vbAkgICAqcF9lcnJvciA9IGNhdGNoX2Vy cm9ycyA/ICZlcnJvciA6IE5VTEw7CiAKLQkqcmVzbnVsbCA9IHRydWU7CisJKm9wLT5yZXN2 YWx1ZSA9IChEYXR1bSkgMDsKKwkqb3AtPnJlc251bGwgPSB0cnVlOwkJLyogdW50aWwgd2Ug Z2V0IGEgcmVzdWx0ICovCiAKIAlzd2l0Y2ggKGpleHByLT5vcCkKIAl7CiAJCWNhc2UgSlNP Tl9RVUVSWV9PUDoKLQkJCXJlcyA9IEpzb25QYXRoUXVlcnkoaXRlbSwgcGF0aCwgamV4cHIt PndyYXBwZXIsICZlbXB0eSwgZXJyb3IsCi0JCQkJCQkJCWpzZXN0YXRlLT5hcmdzKTsKLQkJ CWlmIChlcnJvciAmJiAqZXJyb3IpCi0JCQkJcmV0dXJuIChEYXR1bSkgMDsKKwkJCXJlcyA9 IEpzb25QYXRoUXVlcnkoaXRlbSwgcGF0aCwgamV4cHItPndyYXBwZXIsICZlbXB0eSwKKwkJ CQkJCQkJcF9lcnJvciwgcHJlX2V2YWwtPmFyZ3MpOworCisJCQlpZiAoZXJyb3IpCisJCQkJ cmV0dXJuIG9wLT5kLmpzb25leHByLmp1bXBfb25lcnJvcjsKIAogCQkJaWYgKGVtcHR5KQog CQkJCWJyZWFrOwogCi0JCQkqcmVzbnVsbCA9ICFEYXR1bUdldFBvaW50ZXIocmVzKTsKKwkJ CSpvcC0+cmVzbnVsbCA9ICFEYXR1bUdldFBvaW50ZXIocmVzKTsKKwkJCSpvcC0+cmVzdmFs dWUgPSByZXM7CiAKIAkJCS8qIE92ZXJyaWRlIGRlZmF1bHQgY29lcmNpb24gaW4gT01JVCBR VU9URVMgY2FzZSAqLwotCQkJaWYgKEV4ZWNKc29uUXVlcnlOZWVkc0lPQ29lcmNpb24oamV4 cHIsIHJlcywgKnJlc251bGwpKQotCQkJCWNvZXJjaW9uID0gJmpzZXN0YXRlLT5pb19jb2Vy Y2lvbjsKKwkJCWlmIChFeGVjSnNvblF1ZXJ5TmVlZHNJT0NvZXJjaW9uKGpleHByLCByZXMs ICpvcC0+cmVzbnVsbCkpCisJCQkJcmV0dXJuIG9wLT5kLmpzb25leHByLmp1bXBfY29lcmNp b25fdmlhX2lvOwogCi0JCQlicmVhazsKKwkJCS8qIE1heWJlIHNraXAgY29lcmNpb24gb2Yg TlVMTHMgZm9yIG5vbi1kb21haW4gdHlwZXMgKi8KKwkJCWlmICgqb3AtPnJlc251bGwpCisJ CQkJcmV0dXJuIG9wLT5kLmpzb25leHByLmp1bXBfY29lcmNpb25fbnVsbF9zdWJ0cmFuczsK KworCQkJLyogRXZhbHVhdGUgY29lcmNpb24gZXhwcmVzc2lvbiBpbnNpZGUgc3VidHJhbnNh Y3Rpb24gKi8KKwkJCXJldHVybiBvcC0+ZC5qc29uZXhwci5qdW1wX2NvZXJjaW9uX3N1YnRy YW5zOwogCiAJCWNhc2UgSlNPTl9WQUxVRV9PUDoKIAkJCXsKLQkJCQlKc29uYlZhbHVlICpq YnYgPSBKc29uUGF0aFZhbHVlKGl0ZW0sIHBhdGgsICZlbXB0eSwgZXJyb3IsCi0JCQkJCQkJ CQkJCQlqc2VzdGF0ZS0+YXJncyk7CisJCQkJaW50CQkJanVtcF9pdGVtX2NvZXJjaW9uOwor CQkJCUpzb25iVmFsdWUgKmpidiA9IEpzb25QYXRoVmFsdWUoaXRlbSwgcGF0aCwgJmVtcHR5 LAorCQkJCQkJCQkJCQkJcF9lcnJvciwgcHJlX2V2YWwtPmFyZ3MpOwogCi0JCQkJaWYgKGVy cm9yICYmICplcnJvcikKLQkJCQkJcmV0dXJuIChEYXR1bSkgMDsKKwkJCQlpZiAoZXJyb3Ip CisJCQkJCXJldHVybiBvcC0+ZC5qc29uZXhwci5qdW1wX29uZXJyb3I7CiAKLQkJCQlpZiAo IWpidikJCS8qIE5VTEwgb3IgZW1wdHkgKi8KKwkJCQlpZiAoZW1wdHkpCiAJCQkJCWJyZWFr OwogCisJCQkJLyoKKwkJCQkgKiBFeGVjdXRlIGNvZXJjaW9uIGZvciBOVUxMIGluc2lkZSBz dWJ0cmFuc2FjdGlvbiwgaXQKKwkJCQkgKiBjYW4gYmUgc2tpcGVkIGZvciBub24tZG9tYWlu IHR5cGVzLgorCQkJCSAqLworCQkJCWlmICghamJ2KQorCQkJCQlyZXR1cm4gb3AtPmQuanNv bmV4cHIuanVtcF9jb2VyY2lvbl9udWxsX3N1YnRyYW5zOworCisKIAkJCQlBc3NlcnQoIWVt cHR5KTsKIAkJCQlBc3NlcnQoamJ2LT50eXBlICE9IGpidk51bGwpOwogCi0JCQkJcmVzID0g RXhlY1ByZXBhcmVKc29uVmFsdWVDb2VyY2lvbihqc2VzdGF0ZSwgamJ2LAotCQkJCQkJCQkJ CQkJICAgJmNvZXJjaW9uLCByZXNudWxsKTsKLQkJCQlicmVhazsKKwkJCQkvKgorCQkJCSAq IFByZXBhcmUgY29lcmNpb24gZnJvbSBTUUwvSlNPTiBpdGVtIHR5cGUgdG8gdGhlCisJCQkJ ICogb3V0cHV0IFNRTCB0eXBlLgorCQkJCSAqLworCQkJCXJlcyA9IEV4ZWNQcmVwYXJlSnNv blZhbHVlQ29lcmNpb24oamJ2LCBvcCwKKwkJCQkJCQkJCQkJCSAgIGpzZXN0YXRlLT5pdGVt X2NvZXJjaW9ucywKKwkJCQkJCQkJCQkJCSAgICZqdW1wX2l0ZW1fY29lcmNpb24pOworCisJ CQkJKm9wLT5yZXN2YWx1ZSA9IHJlczsKKwkJCQkqb3AtPnJlc251bGwgPSBmYWxzZTsKKwor CQkJCS8qIEp1bXAgdG8gemVybyBoZXJlIG1lYW5zIGp1bXAgdG8gdGhlIGVuZC4gKi8KKwkJ CQlpZiAoanVtcF9pdGVtX2NvZXJjaW9uID09IDApCisJCQkJCXJldHVybiBvcC0+ZC5qc29u ZXhwci5qdW1wX2RvbmU7CisKKwkJCQkvKgorCQkJCSAqIEVycm9yIG91dCBpZiBubyBjYXN0 IGV4aXN0cyB0byBjb2VyY2UgU1FML0pTT04gaXRlbQorCQkJCSAqIHRvIHRoZSB0aGUgb3V0 cHV0IHR5cGUuCisJCQkJICovCisJCQkJaWYgKGp1bXBfaXRlbV9jb2VyY2lvbiA8IDApCisJ CQkJeworCQkJCQkqb3AtPnJlc251bGwgPSB0cnVlOworCisJCQkJCWlmIChjYXRjaF9lcnJv cnMpCisJCQkJCQlyZXR1cm4gb3AtPmQuanNvbmV4cHIuanVtcF9vbmVycm9yOworCisJCQkJ CWVyZXBvcnQoRVJST1IsCisJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9TUUxfSlNPTl9JVEVN X0NBTk5PVF9CRV9DQVNUX1RPX1RBUkdFVF9UWVBFKSwKKwkJCQkJCQkgZXJybXNnKCJTUUwv SlNPTiBpdGVtIGNhbm5vdCBiZSBjYXN0IHRvIHRhcmdldCB0eXBlIikpKTsKKwkJCQl9CisK KwkJCQkvKiBDb2VyY2UgdXNpbmcgYSBzcGVjaWZpYyBjb2VyY2lvbiBleHByZXNzaW9uICov CisJCQkJcmV0dXJuIGp1bXBfaXRlbV9jb2VyY2lvbjsKIAkJCX0KIAogCQljYXNlIEpTT05f RVhJU1RTX09QOgogCQkJewogCQkJCWJvb2wJCWV4aXN0cyA9IEpzb25QYXRoRXhpc3RzKGl0 ZW0sIHBhdGgsCi0JCQkJCQkJCQkJCQkJanNlc3RhdGUtPmFyZ3MsCi0JCQkJCQkJCQkJCQkJ ZXJyb3IpOworCQkJCQkJCQkJCQkJCXByZV9ldmFsLT5hcmdzLAorCQkJCQkJCQkJCQkJCXBf ZXJyb3IpOwogCi0JCQkJKnJlc251bGwgPSBlcnJvciAmJiAqZXJyb3I7Ci0JCQkJcmVzID0g Qm9vbEdldERhdHVtKGV4aXN0cyk7Ci0JCQkJYnJlYWs7CS8qIGFsd2F5cyB1c2UgcmVzdWx0 IGNvZXJjaW9uICovCi0JCQl9CisJCQkJKm9wLT5yZXNudWxsID0gZXJyb3I7CisJCQkJKm9w LT5yZXN2YWx1ZSA9IEJvb2xHZXREYXR1bShleGlzdHMpOwogCi0JCWRlZmF1bHQ6Ci0JCQll bG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIFNRTC9KU09OIGV4cHJlc3Npb24gb3AgJWQiLCBq ZXhwci0+b3ApOwotCQkJcmV0dXJuIChEYXR1bSkgMDsKLQl9CisJCQkJaWYgKGVycm9yKQor CQkJCQlyZXR1cm4gb3AtPmQuanNvbmV4cHIuanVtcF9vbmVycm9yOwogCi0JaWYgKGVtcHR5 KQotCXsKLQkJQXNzZXJ0KGpleHByLT5vbl9lbXB0eSk7CS8qIGl0IGlzIG5vdCBKU09OX0VY SVNUUyAqLworCQkJCS8qCisJCQkJICogRXhlY3V0ZSBjb2VyY2lvbiBvZiBOVUxMIGluc2lk ZSBzdWJ0cmFuc2FjdGlvbiwgaXQKKwkJCQkgKiBjYW4gYmUgc2tpcGVkIGZvciBub24tZG9t YWluIHR5cGVzLgorCQkJCSAqLworCQkJCWlmICgqb3AtPnJlc251bGwpCisJCQkJCXJldHVy biBvcC0+ZC5qc29uZXhwci5qdW1wX2NvZXJjaW9uX251bGxfc3VidHJhbnM7CiAKLQkJaWYg KGpleHByLT5vbl9lbXB0eS0+YnR5cGUgPT0gSlNPTl9CRUhBVklPUl9FUlJPUikKLQkJewot CQkJaWYgKGVycm9yKQotCQkJewotCQkJCSplcnJvciA9IHRydWU7Ci0JCQkJcmV0dXJuIChE YXR1bSkgMDsKKwkJCQkvKiBFdmFsdWF0ZSBjb2VyY2lvbiBpbnNpZGUgc3VidHJhbnNhY3Rp b24sIGlmIGFueSAqLworCQkJCXJldHVybiBvcC0+ZC5qc29uZXhwci5qdW1wX2NvZXJjaW9u X3N1YnRyYW5zOwogCQkJfQogCi0JCQllcmVwb3J0KEVSUk9SLAotCQkJCQkoZXJyY29kZShF UlJDT0RFX05PX1NRTF9KU09OX0lURU0pLAotCQkJCQkgZXJybXNnKCJubyBTUUwvSlNPTiBp dGVtIikpKTsKLQkJfQotCi0JCWlmIChqZXhwci0+b25fZW1wdHktPmJ0eXBlID09IEpTT05f QkVIQVZJT1JfREVGQVVMVCkKLQkJewotCQkJLyoKLQkJCSAqIEV4ZWN1dGUgREVGQVVMVCBl eHByZXNzaW9uIGluIGEgc3VidHJhbnNhdGlvbiBpZiBuZWVkZWQuCi0JCQkgKiBDb2VyY2lv biBpcyBub3QgbmVlZGVkIGhlcmUsIGJlY2F1c2UgZXhwcmVzc2lvbiBpcwotCQkJICogYWxy ZWFkeSBjb2VyY2VkIHRvIHRoZSB0YXJnZXQgdHlwZSBieSB0aGUgcGFyc2VyLgotCQkJICov Ci0JCQlKU0VfT1BUX1NVQlRSQU5TKGpzZXN0YXRlLT5kZWZhdWx0X29uX2VtcHR5X2Nhbl90 aHJvdyA/IGVycm9yIDogTlVMTCwKLQkJCQkJCQkgamV4cHIsIHJlcywKLQkJCQkJCQkgRXhl Y0V2YWxFeHByKGpzZXN0YXRlLT5kZWZhdWx0X29uX2VtcHR5LAotCQkJCQkJCQkJCSAgZWNv bnRleHQsIHJlc251bGwpKTsKLQkJCXJldHVybiByZXM7Ci0JCX0KLQotCQkvKiBFeGVjdXRl IE9OIEVNUFRZIGJlaGF2aW9yLCBjb2VyY2lvbiBpcyBkZWZhdWx0ICovCi0JCXJlcyA9IEV4 ZWNFdmFsSnNvbkJlaGF2aW9yKGVjb250ZXh0LCBqZXhwci0+b25fZW1wdHksCi0JCQkJCQkJ CSAgIGpzZXN0YXRlLT5kZWZhdWx0X29uX2VtcHR5LAotCQkJCQkJCQkgICByZXNudWxsKTsK KwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgU1FML0pTT04gZXhw cmVzc2lvbiBvcCAlZCIsIGpleHByLT5vcCk7CisJCQlyZXR1cm4gb3AtPmQuanNvbmV4cHIu anVtcF9kb25lOwogCX0KIAotCS8qCi0JICogRXhlY3V0ZSByZXN1bHRpbmcgY29lcmNpb24g aW4gYSBzdWJ0cmFuc2FjdGlvbiBpZiBgZXJyb3JgICE9IE5VTEwuCi0JICogSW4gY2FzZSBv ZiBjYXN0IGVycm9ycywgdGhlcmUgaXMgbm8gbmVlZCB0byB1c2Ugc3VidHJhbnNhY3Rpb24u Ci0JICovCi0JaWYgKGNvZXJjaW9uLT50eXBlICE9IEpTT05fQ09FUkNJT05fTk9ORSkKKwkv KiBFeGVjdXRlIE9OIEVNUFRZIGJlaGF2aW9yIGlmIG5vIFNRTC9KU09OIGl0ZW1zIHdlcmUg Zm91bmQgKi8KKwlBc3NlcnQoZW1wdHkpOworCUFzc2VydChqZXhwci0+b25fZW1wdHkpOwkv KiBpdCBpcyBub3QgSlNPTl9FWElTVFMgKi8KKworCWlmIChqZXhwci0+b25fZW1wdHktPmJ0 eXBlID09IEpTT05fQkVIQVZJT1JfRVJST1IpCiAJewotCQkvKiBTa2lwIGNvZXJjaW9uIG9m IE5VTExzIGZvciBub24tZG9tYWluIHR5cGVzICovCi0JCWlmICgqcmVzbnVsbCAmJiBqc2Vz dGF0ZS0+c2tpcF9udWxsX2NvZXJjaW9uKQotCQkJcmV0dXJuIChEYXR1bSkgMDsKKwkJLyog VGhyb3cgYW4gZXJyb3Igb3IganVtcCB0byBPTiBFUlJPUiBoYW5kbGVyICovCisJCWlmIChj YXRjaF9lcnJvcnMpCisJCQlyZXR1cm4gb3AtPmQuanNvbmV4cHIuanVtcF9vbmVycm9yOwog Ci0JCUpTRV9PUFRfU1VCVFJBTlMoY29lcmNpb24tPnR5cGUgIT0gSlNPTl9DT0VSQ0lPTl9F UlJPUiA/IGVycm9yIDogTlVMTCwKLQkJCQkJCSBqZXhwciwgcmVzLAotCQkJCQkJIEV4ZWNF dmFsSnNvbkV4cHJDb2VyY2lvbihqc2VzdGF0ZSwgZWNvbnRleHQsCi0JCQkJCQkJCQkJCQkg IGNvZXJjaW9uLCByZXMsCi0JCQkJCQkJCQkJCQkgIHJlc251bGwsIGVycm9yKSk7CisJCWVy ZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9OT19TUUxfSlNPTl9JVEVNKSwK KwkJCQkgZXJybXNnKCJubyBTUUwvSlNPTiBpdGVtIikpKTsKIAl9CiAKLQlyZXR1cm4gcmVz OworCS8qIEV2YWx1YXRlIE9OIEVNUFRZIGJlaGF2aW9yICovCisJcmV0dXJuIG9wLT5kLmpz b25leHByLmp1bXBfb25lbXB0eTsKIH0KIAorLyogU2tpcCBjYWxsaW5nIEV4ZWNFdmFsSnNv bigpIG9uIGEgSnNvbkV4cHI/ICovCiBib29sCiBFeGVjRXZhbEV4cHJDYW5UaHJvd0Vycm9y cyhOb2RlICpleHByKQogewpAQCAtNTMxOSw2NiArNTEzNSw2MCBAQCBFeGVjRXZhbEpzb25O ZWVkc1N1YlRyYW5zYWN0aW9uKEpzb25FeHByICpqc2V4cHIpCiAJcmV0dXJuIGZhbHNlOwkJ CS8qIHN1YnRyYW5zYWN0aW9zIHNob3VsZCBub3QgYmUgdXNlZCAqLwogfQogCi0vKiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCi0gKgkJRXhlY0V2YWxKc29uRXhwcgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi12b2lk Ci1FeGVjRXZhbEpzb25FeHByKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAqb3As IEV4cHJDb250ZXh0ICplY29udGV4dCkKK2Jvb2wKK0V4ZWNFdmFsSnNvbkV4cHJTa2lwKEV4 cHJTdGF0ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAqb3ApCiB7Ci0JSnNvbkV4cHJTdGF0ZSAq anNlc3RhdGUgPSBvcC0+ZC5qc29uZXhwci5qc2VzdGF0ZTsKLQlKc29uRXhwciAgICpqZXhw ciA9IGpzZXN0YXRlLT5qc2V4cHI7Ci0JRGF0dW0JCWl0ZW07Ci0JRGF0dW0JCXJlczsKLQlK c29uUGF0aCAgICpwYXRoOwotCUxpc3RDZWxsICAgKmxjOwotCWJvb2wJCWVycm9yID0gZmFs c2U7Ci0JYm9vbAkJdGhyb3dFcnJvcnMgPSBqZXhwci0+b25fZXJyb3ItPmJ0eXBlID09IEpT T05fQkVIQVZJT1JfRVJST1I7CisJSnNvbkV4cHJTdGF0ZSAqanNlc3RhdGUgPSBvcC0+ZC5q c29uZXhwcl9za2lwLmpzZXN0YXRlOwogCi0JaWYgKGpzZXN0YXRlLT5mb3JtYXR0ZWRfZXhw ci5pc251bGwgfHwganNlc3RhdGUtPnBhdGhzcGVjLmlzbnVsbCkKKwkvKgorCSAqIFNraXAg aWYgZWl0aGVyIG9mIHRoZSBpbnB1dCBleHByZXNzaW9ucyBoYXMgdHVybmVkIG91dCB0byBi ZQorCSAqIE5VTEwsIHRob3VnaCBkbyBleGVjdXRlIGRvbWFpbiBjaGVja3MgZm9yIE5VTExz LCB3aGljaCBhcmUKKwkgKiBoYW5kbGVkIGJ5IHRoZSBjb2VyY2lvbiBzdGVwLgorCSAqLwor CWlmIChqc2VzdGF0ZS0+cHJlX2V2YWwuZm9ybWF0dGVkX2V4cHIuaXNudWxsIHx8CisJCWpz ZXN0YXRlLT5wcmVfZXZhbC5wYXRoc3BlYy5pc251bGwpCiAJewotCQkqb3AtPnJlc251bGwg PSB0cnVlOwogCQkqb3AtPnJlc3ZhbHVlID0gKERhdHVtKSAwOwotCi0JCS8qIGV4ZWN1dGUg ZG9tYWluIGNoZWNrcyBmb3IgTlVMTHMgKi8KLQkJKHZvaWQpIEV4ZWNFdmFsSnNvbkV4cHJD b2VyY2lvbihqc2VzdGF0ZSwgZWNvbnRleHQsCi0JCQkJCQkJCQkJJmpzZXN0YXRlLT5yZXN1 bHRfY29lcmNpb24sCi0JCQkJCQkJCQkJKm9wLT5yZXN2YWx1ZSwgb3AtPnJlc251bGwsIE5V TEwpOwotCi0JCUFzc2VydCgqb3AtPnJlc251bGwpOwotCQlyZXR1cm47CisJCSpvcC0+cmVz bnVsbCA9IHRydWU7CisJCXJldHVybiB0cnVlOwogCX0KIAotCWl0ZW0gPSBqc2VzdGF0ZS0+ Zm9ybWF0dGVkX2V4cHIudmFsdWU7Ci0JcGF0aCA9IERhdHVtR2V0SnNvblBhdGhQKGpzZXN0 YXRlLT5wYXRoc3BlYy52YWx1ZSk7CisJLyoKKwkgKiBHbyBldmFsdWF0ZSB0aGUgUEFTU0lO RyBhcmdzIGlmIGFueSBhbmQgc3Vic2VxdWVudGx5IEpTT04gcGF0aAorCSAqIGl0c2VsZi4K KwkgKi8KKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qIEFwcGx5IEkvTyBjb2VyY2lvbiB0byBh IEpTT04gaXRlbSAqLwordm9pZAorRXhlY0V2YWxKc29uRXhwcklPQ29lcmNlKEV4cHJTdGF0 ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAqb3ApCit7CisJLyogU3RyaXAgcXVvdGVzIGFuZCBj YWxsIHR5cGlucHV0IGZ1bmN0aW9uICovCisJY2hhcgkgICAqc3RyID0gTlVMTDsKIAotCS8q IHJlc2V0IEpTT04gcGF0aCB2YXJpYWJsZSBjb250ZXh0cyAqLwotCWZvcmVhY2gobGMsIGpz ZXN0YXRlLT5hcmdzKQorCWlmICghKm9wLT5yZXNudWxsKQogCXsKLQkJSnNvblBhdGhWYXJp YWJsZUV2YWxDb250ZXh0ICp2YXIgPSBsZmlyc3QobGMpOworCQlKc29uYgkgICAqamIgPSBE YXR1bUdldEpzb25iUCgqb3AtPnJlc3ZhbHVlKTsKIAotCQl2YXItPmVjb250ZXh0ID0gZWNv bnRleHQ7Ci0JCXZhci0+ZXZhbHVhdGVkID0gZmFsc2U7CisJCXN0ciA9IEpzb25iVW5xdW90 ZShqYik7CiAJfQogCi0JcmVzID0gRXhlY0V2YWxKc29uRXhwckludGVybmFsKGpzZXN0YXRl LCBlY29udGV4dCwKLQkJCQkJCQkJICAgcGF0aCwgaXRlbSwgb3AtPnJlc251bGwsCi0JCQkJ CQkJCSAgIHRocm93RXJyb3JzID8gTlVMTCA6ICZlcnJvcik7Ci0JaWYgKGVycm9yKQotCXsK LQkJQXNzZXJ0KGpleHByLT5vbl9lcnJvci0+YnR5cGUgIT0gSlNPTl9CRUhBVklPUl9FUlJP Uik7Ci0KLQkJLyogRXhlY3V0ZSBPTiBFUlJPUiBiZWhhdmlvciAqLwotCQlyZXMgPSBFeGVj RXZhbEpzb25CZWhhdmlvcihlY29udGV4dCwgamV4cHItPm9uX2Vycm9yLAotCQkJCQkJCQkg ICBqc2VzdGF0ZS0+ZGVmYXVsdF9vbl9lcnJvciwKLQkJCQkJCQkJICAgb3AtPnJlc251bGwp OwotCi0JCS8qIHJlc3VsdCBpcyBhbHJlYWR5IGNvZXJjZWQgaW4gREVGQVVMVCBiZWhhdmlv ciBjYXNlICovCi0JCWlmIChqZXhwci0+b25fZXJyb3ItPmJ0eXBlICE9IEpTT05fQkVIQVZJ T1JfREVGQVVMVCkKLQkJCXJlcyA9IEV4ZWNFdmFsSnNvbkV4cHJDb2VyY2lvbihqc2VzdGF0 ZSwgZWNvbnRleHQsCi0JCQkJCQkJCQkJICAgJmpzZXN0YXRlLT5yZXN1bHRfY29lcmNpb24s Ci0JCQkJCQkJCQkJICAgcmVzLCBvcC0+cmVzbnVsbCwgTlVMTCk7Ci0JfQorCSpvcC0+cmVz dmFsdWUgPSBJbnB1dEZ1bmN0aW9uQ2FsbChvcC0+ZC5qc29uZXhwcl9pb2NvZXJjZS5maW5m bywgc3RyLAorCQkJCQkJCQkJICBvcC0+ZC5qc29uZXhwcl9pb2NvZXJjZS50eXBpb3BhcmFt LAorCQkJCQkJCQkJICBvcC0+ZC5qc29uZXhwcl9pb2NvZXJjZS50eXBtb2QpOworfQogCi0J Km9wLT5yZXN2YWx1ZSA9IHJlczsKKy8qIEFwcGx5IGpzb25fcG9wdWxhdGVfdHlwZSgpIHRv IGEgSlNPTiBpdGVtICovCit2b2lkCitFeGVjRXZhbEpzb25FeHByUG9wdWxhdGUoRXhwclN0 YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCwKKwkJCQkJCSBFeHByQ29udGV4dCAqZWNv bnRleHQpCit7CisJKm9wLT5yZXN2YWx1ZSA9CisJCWpzb25fcG9wdWxhdGVfdHlwZSgqb3At PnJlc3ZhbHVlLCBKU09OQk9JRCwKKwkJCQkJCSAgIG9wLT5kLmpzb25leHByX3BvcHVsYXRl LmpzZXhwci0+cmV0dXJuaW5nLT50eXBpZCwKKwkJCQkJCSAgIG9wLT5kLmpzb25leHByX3Bv cHVsYXRlLmpzZXhwci0+cmV0dXJuaW5nLT50eXBtb2QsCisJCQkJCQkgICAmb3AtPmQuanNv bmV4cHJfcG9wdWxhdGUuY2FjaGUsCisJCQkJCQkgICBlY29udGV4dC0+ZWN4dF9wZXJfcXVl cnlfbWVtb3J5LAorCQkJCQkJICAgb3AtPnJlc251bGwpOwogfQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF9leHByLmMgYi9zcmMvYmFja2VuZC9qaXQvbGx2 bS9sbHZtaml0X2V4cHIuYwppbmRleCA2NTY4MjI4Yjk5Ni4uNzBkODRkOTUxNzUgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfZXhwci5jCisrKyBiL3NyYy9i YWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfZXhwci5jCkBAIC0yNTQyLDggKzI1NDIsMTI2IEBA IGxsdm1fY29tcGlsZV9leHByX3N0ZXAoRXhwclN0YXRlICpzdGF0ZSwgaW50IHN0YXJ0X29w bm8pCiAJCQkJTExWTUJ1aWxkQnIoYiwgb3BibG9ja3Nbb3BubyArIDFdKTsKIAkJCQlicmVh azsKIAotCQkJY2FzZSBFRU9QX0pTT05FWFBSOgotCQkJCWJ1aWxkX0V2YWxYRnVuYyhiLCBt b2QsICJFeGVjRXZhbEpzb25FeHByIiwKKwkJCWNhc2UgRUVPUF9KU09ORVhQUl9QQVRIOgor CQkJCXsKKwkJCQkJTExWTVZhbHVlUmVmIHZfcmV0OworCQkJCQlMTFZNVmFsdWVSZWYgdl9z d2l0Y2g7CisJCQkJCUpzb25JdGVtQ29lcmNpb25zU3RhdGUgKmpjc3RhdGUgPQorCQkJCQkJ b3AtPmQuanNvbmV4cHIuanNlc3RhdGUtPml0ZW1fY29lcmNpb25zOworCQkJCQlpbnQJCQlq dW1wc1s2ICsgc2l6ZW9mKCpqY3N0YXRlKSAvIHNpemVvZihqY3N0YXRlLT5udWxsKV07CisJ CQkJCWludAkJCW5qdW1wcyA9IDA7CisKKwkJCQkJLyoKKwkJCQkJICogRXhlY0V2YWxKc29u KCkgcmV0dXJucyBudW1iZXIgb2YgdGhlIHN0ZXAgd2UKKwkJCQkJICogbmVlZCB0byBqdW1w LgorCQkJCQkgKi8KKwkJCQkJdl9yZXQgPSBidWlsZF9FdmFsWEZ1bmMoYiwgbW9kLCAiRXhl Y0V2YWxKc29uRXhwciIsCisJCQkJCQkJCQkJCXZfc3RhdGUsIG9wKTsKKworCQkJCQkvKgor CQkJCQkgKiBDb2xsZWN0IGFsbCB1bmlxdWUganVtcHMuICBBbGwganVtcHMgY2FuIGJlCisJ CQkJCSAqIGVxdWFsIHRvIGp1bXBfZG9uZS4KKwkJCQkJICovCisJCQkJCWp1bXBzW25qdW1w cysrXSA9IG9wLT5kLmpzb25leHByLmp1bXBfZG9uZTsKKworCQkJCQlpZiAob3AtPmQuanNv bmV4cHIuanVtcF9jb2VyY2lvbiAhPSBvcC0+ZC5qc29uZXhwci5qdW1wX2RvbmUpCisJCQkJ CQlqdW1wc1tuanVtcHMrK10gPSBvcC0+ZC5qc29uZXhwci5qdW1wX2NvZXJjaW9uOworCisJ CQkJCS8qCisJCQkJCSAqIGp1bXBfY29lcmNpb25fc3VidHJhbnMgYW5kIGp1bXBfY29lcmNp b24gY2FuIGJlCisJCQkJCSAqIHRoZSBzYW1lIGlmIHRoZXJlIGFyZSBubyBzdWJ0cmFuc2Fj dGlvbnMuCisJCQkJCSAqLworCQkJCQlpZiAob3AtPmQuanNvbmV4cHIuanVtcF9jb2VyY2lv bl9zdWJ0cmFucyAhPSBvcC0+ZC5qc29uZXhwci5qdW1wX2RvbmUgJiYKKwkJCQkJCW9wLT5k Lmpzb25leHByLmp1bXBfY29lcmNpb25fc3VidHJhbnMgIT0gb3AtPmQuanNvbmV4cHIuanVt cF9jb2VyY2lvbikKKwkJCQkJCWp1bXBzW25qdW1wcysrXSA9IG9wLT5kLmpzb25leHByLmp1 bXBfY29lcmNpb25fc3VidHJhbnM7CisKKwkJCQkJLyoKKwkJCQkJICoganVtcF9jb2VyY2lv bl92aWFfaW8gYW5kIGp1bXBfY29lcmNpb25fc3VidHJhbnMKKwkJCQkJICogY2FuIGJlIHRo ZSBzYW1lIHdobiBvbmx5IEkvTyBjb2VyY2lvbiB0byBvdXRwdXQKKwkJCQkJICogdHlwZSBp cyBhdmFpbGFibGUuICBqdW1wX2NvZXJjaW9uX3ZpYV9pbyBjYW4KKwkJCQkJICogYWxzbyBi ZSBuZWdhdGl2ZS4KKwkJCQkJICovCisJCQkJCWlmIChvcC0+ZC5qc29uZXhwci5qdW1wX2Nv ZXJjaW9uX3ZpYV9pbyAhPSBvcC0+ZC5qc29uZXhwci5qdW1wX2RvbmUgJiYKKwkJCQkJCW9w LT5kLmpzb25leHByLmp1bXBfY29lcmNpb25fdmlhX2lvICE9IG9wLT5kLmpzb25leHByLmp1 bXBfY29lcmNpb25fc3VidHJhbnMgJiYKKwkJCQkJCW9wLT5kLmpzb25leHByLmp1bXBfY29l cmNpb25fdmlhX2lvID49IDApCisJCQkJCQlqdW1wc1tuanVtcHMrK10gPSBvcC0+ZC5qc29u ZXhwci5qdW1wX2NvZXJjaW9uX3ZpYV9pbzsKKworCQkJCQlpZiAob3AtPmQuanNvbmV4cHIu anVtcF9vbmVtcHR5ICE9IG9wLT5kLmpzb25leHByLmp1bXBfZG9uZSkKKwkJCQkJCWp1bXBz W25qdW1wcysrXSA9IG9wLT5kLmpzb25leHByLmp1bXBfb25lbXB0eTsKKworCQkJCQlpZiAo b3AtPmQuanNvbmV4cHIuanVtcF9vbmVycm9yICE9IG9wLT5kLmpzb25leHByLmp1bXBfZG9u ZSkKKwkJCQkJCWp1bXBzW25qdW1wcysrXSA9IG9wLT5kLmpzb25leHByLmp1bXBfb25lcnJv cjsKKworCQkJCQkvKgorCQkJCQkgKiBqdW1wX2NvZXJjaW9uX251bGwgYW5kIGp1bXBfY29l cmNpb25fbnVsbF9zdWJ0cmFucworCQkJCQkgKiBhcmUgYWx3YXlzIGR1cGxpY2F0ZS4KKwkJ CQkJICovCisKKwkJCQkJLyogQ29sbGVjdCBub24temVybyBqdW1wcyB0byBpdGVtIGNvZXJj aW9ucywgaWYgYW55ICovCisJCQkJCWlmIChqY3N0YXRlKQorCQkJCQl7CisJCQkJCQlmb3Ig KGludCAqcF9qdW1wID0gJmpjc3RhdGUtPm51bGw7CisJCQkJCQkJIHBfanVtcCA8PSAmamNz dGF0ZS0+Y29tcG9zaXRlOworCQkJCQkJCSBwX2p1bXArKykKKwkJCQkJCXsKKwkJCQkJCQlp ZiAoKnBfanVtcCA+IDApCisJCQkJCQkJCWp1bXBzW25qdW1wcysrXSA9ICpwX2p1bXA7CisJ CQkJCQl9CisJCQkJCX0KKworCQkJCQkvKiBFbWl0IHN3aXRjaCBmb3IgYWxsIHBvc3NpYmxl IGp1bXBzICovCisJCQkJCXZfc3dpdGNoID0gTExWTUJ1aWxkU3dpdGNoKGIsIHZfcmV0LAor CQkJCQkJCQkJCQkgICBvcGJsb2Nrc1tvcC0+ZC5qc29uZXhwci5qdW1wX2RvbmVdLAorCQkJ CQkJCQkJCQkgICBuanVtcHMpOworCisJCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgbmp1bXBz OyBpKyspCisJCQkJCQlMTFZNQWRkQ2FzZSh2X3N3aXRjaCwKKwkJCQkJCQkJCWxfaW50MzJf Y29uc3QoanVtcHNbaV0pLAorCQkJCQkJCQkJb3BibG9ja3NbanVtcHNbaV1dKTsKKworCQkJ CQlicmVhazsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgRUVPUF9KU09ORVhQUl9T S0lQOgorCQkJCXsKKwkJCQkJTExWTVZhbHVlUmVmIHZfcmV0OworCisJCQkJCS8qCisJCQkJ CSAqIENhbGwgRXhlY0V2YWxKc29uRXhwclNraXAoKSB0byBkZWNpZGUgaWYgSlNPTgorCQkJ CQkgKiBwYXRoIGV2YWx1YXRpb24gY2FuIGJlIHNraXBwZWQuICBUaGlzIHJldHVybnMKKwkJ CQkJICogYm9vbGVhbiAic2tpcCIgZmxhZy4KKwkJCQkJICovCisJCQkJCXZfcmV0ID0gYnVp bGRfRXZhbFhGdW5jKGIsIG1vZCwgIkV4ZWNFdmFsSnNvbkV4cHJTa2lwIiwKKwkJCQkJCQkJ CQkJdl9zdGF0ZSwgb3ApOworCQkJCQl2X3JldCA9IExMVk1CdWlsZFpFeHQoYiwgdl9yZXQs IFR5cGVTdG9yYWdlQm9vbCwgIiIpOworCisJCQkJCS8qCisJCQkJCSAqIEp1bXAgdG8gY29l cmNpb24gc3RlcCBpZiB0cnVlIHdhcyByZXR1cm5lZCwKKwkJCQkJICogd2hpY2ggc2lnbmlm aWVzIHNraXBwaW5nIG9mIEpTT04gcGF0aCBldmFsdWF0aW9uLAorCQkJCQkgKiBlbHNlIHRv IHRoZSBuZXh0IHN0ZXAgd2hpY2ggbXVzdCBwb2ludCB0byB0aGUKKwkJCQkJICogc3RlcHMg dG8gZXZhbHVhdGUgUEFTU0lORyBhcmdzLCBpZiBhbnksIG9yIHRvCisJCQkJCSAqIHRoZSBK U09OIHBhdGggZXZhbHVhdGlvbi4KKwkJCQkJICovCisJCQkJCUxMVk1CdWlsZENvbmRCcihi LAorCQkJCQkJCQkJTExWTUJ1aWxkSUNtcChiLAorCQkJCQkJCQkJCQkJICBMTFZNSW50RVEs CisJCQkJCQkJCQkJCQkgIHZfcmV0LAorCQkJCQkJCQkJCQkJICBsX3Nib29sX2NvbnN0KDAp LAorCQkJCQkJCQkJCQkJICAiIiksCisJCQkJCQkJCQlvcGJsb2Nrc1tvcG5vICsgMV0sCisJ CQkJCQkJCQlvcGJsb2Nrc1tvcC0+ZC5qc29uZXhwcl9za2lwLmp1bXBfY29lcmNpb25dKTsK KwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQljYXNlIEVFT1BfSlNPTkVYUFJfSU9DT0VSQ0U6 CisJCQkJYnVpbGRfRXZhbFhGdW5jKGIsIG1vZCwgIkV4ZWNFdmFsSnNvbkV4cHJJT0NvZXJj ZSIsCisJCQkJCQkJCQl2X3N0YXRlLCBvcCk7CisJCQkJTExWTUJ1aWxkQnIoYiwgb3BibG9j a3Nbb3BubyArIDFdKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBFRU9QX0pTT05FWFBSX1BP UFVMQVRFOgorCQkJCWJ1aWxkX0V2YWxYRnVuYyhiLCBtb2QsICJFeGVjRXZhbEpzb25FeHBy UG9wdWxhdGUiLAogCQkJCQkJCQl2X3N0YXRlLCBvcCwgdl9lY29udGV4dCk7CiAJCQkJTExW TUJ1aWxkQnIoYiwgb3BibG9ja3Nbb3BubyArIDFdKTsKIAkJCQlicmVhazsKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfdHlwZXMuYyBiL3NyYy9iYWNrZW5k L2ppdC9sbHZtL2xsdm1qaXRfdHlwZXMuYwppbmRleCBiYjk2ZDQ2MDQ4Zi4uZDc2NTMyODhk ZDggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfdHlwZXMuYwor KysgYi9zcmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X3R5cGVzLmMKQEAgLTEzOCw2ICsx MzgsOSBAQCB2b2lkCSAgICpyZWZlcmVuY2VkX2Z1bmN0aW9uc1tdID0KIAlFeGVjRXZhbEpz b25Db25zdHJ1Y3RvciwKIAlFeGVjRXZhbEpzb25Jc1ByZWRpY2F0ZSwKIAlFeGVjRXZhbEpz b25FeHByLAorCUV4ZWNFdmFsSnNvbkV4cHJTa2lwLAorCUV4ZWNFdmFsSnNvbkV4cHJJT0Nv ZXJjZSwKKwlFeGVjRXZhbEpzb25FeHByUG9wdWxhdGUsCiAJTWFrZUV4cGFuZGVkT2JqZWN0 UmVhZE9ubHlJbnRlcm5hbCwKIAlzbG90X2dldG1pc3NpbmdhdHRycywKIAlzbG90X2dldHNv bWVhdHRyc19pbnQsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZXhw ci5jIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4cHIuYwppbmRleCBhZmY2ZmMxYTFj NC4uY2FkM2M1NmEzOGYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9l eHByLmMKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4cHIuYwpAQCAtNDM4NCw2 ICs0Mzg0LDExIEBAIGluaXRKc29uSXRlbUNvZXJjaW9ucyhQYXJzZVN0YXRlICpwc3RhdGUs IGNvbnN0IEpzb25SZXR1cm5pbmcgKnJldHVybmluZywKIAkJe05VTEwsIEludmFsaWRPaWR9 CiAJfTsKIAorCS8qIFdoZW4gcmV0dXJuaW5nIEpTT04gdHlwZXMsIG5vIG5lZWQgdG8gaW5p dGlhbGl6ZSBjb2VyY2lvbnMgKi8KKwkvKiBYWFggZG9tYWluIHR5cGVzIG9uIGpzb24vanNv bmIgKi8KKwlpZiAocmV0dXJuaW5nLT50eXBpZCA9PSBKU09OQk9JRCB8fCByZXR1cm5pbmct PnR5cGlkID09IEpTT05PSUQpCisJCXJldHVybiBOVUxMOworCiAJZm9yIChwID0gY29lcmNp b25UeXBpZHM7IHAtPmNvZXJjaW9uOyBwKyspCiAJCSpwLT5jb2VyY2lvbiA9IGluaXRKc29u SXRlbUNvZXJjaW9uKHBzdGF0ZSwgcC0+dHlwaWQsIHJldHVybmluZyk7CiAKQEAgLTQ0NjUs NiArNDQ3MCw3IEBAIHRyYW5zZm9ybUpzb25GdW5jRXhwcihQYXJzZVN0YXRlICpwc3RhdGUs IEpzb25GdW5jRXhwciAqZnVuYykKIAkJCX0KIAkJCWVsc2UgaWYgKGpzZXhwci0+cmV0dXJu aW5nLT50eXBpZCAhPSBCT09MT0lEKQogCQkJeworCQkJCS8qIFdlIG5lZWQgdG8gaGFuZGxl IFJFVFVSTklORyBpbnQgZXRjLiAqLwogCQkJCUNhc2VUZXN0RXhwciAqcGxhY2Vob2xkZXIg PSBtYWtlTm9kZShDYXNlVGVzdEV4cHIpOwogCQkJCWludAkJCWxvY2F0aW9uID0gZXhwckxv Y2F0aW9uKChOb2RlICopIGpzZXhwcik7CiAJCQkJTm9kZQkgICAqY29lcmNpb25fZXhwcjsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29ucGF0aF9leGVjLmMgYi9z cmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBhdGhfZXhlYy5jCmluZGV4IDViNmE0ODA1NzIx Li4zMzkwMDM4ZmY0YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25w YXRoX2V4ZWMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBhdGhfZXhlYy5j CkBAIC0yODYsNiArMjg2LDggQEAgc3RhdGljIEpzb25QYXRoRXhlY1Jlc3VsdCBhcHBlbmRC b29sUmVzdWx0KEpzb25QYXRoRXhlY0NvbnRleHQgKmN4dCwKIAkJCQkJCQkJCQkgICBKc29u UGF0aEl0ZW0gKmpzcCwgSnNvblZhbHVlTGlzdCAqZm91bmQsIEpzb25QYXRoQm9vbCByZXMp Owogc3RhdGljIHZvaWQgZ2V0SnNvblBhdGhJdGVtKEpzb25QYXRoRXhlY0NvbnRleHQgKmN4 dCwgSnNvblBhdGhJdGVtICppdGVtLAogCQkJCQkJCUpzb25iVmFsdWUgKnZhbHVlKTsKK3N0 YXRpYyBpbnQJRXZhbEpzb25QYXRoVmFyKHZvaWQgKnZhcnMsIGNoYXIgKnZhck5hbWUsIGlu dCB2YXJOYW1lTGVuLAorCQkJCQkJCUpzb25iVmFsdWUgKnZhbCwgSnNvbmJWYWx1ZSAqYmFz ZU9iamVjdCk7CiBzdGF0aWMgdm9pZCBnZXRKc29uUGF0aFZhcmlhYmxlKEpzb25QYXRoRXhl Y0NvbnRleHQgKmN4dCwKIAkJCQkJCQkJSnNvblBhdGhJdGVtICp2YXJpYWJsZSwgSnNvbmJW YWx1ZSAqdmFsdWUpOwogc3RhdGljIGludAlnZXRKc29uUGF0aFZhcmlhYmxlRnJvbUpzb25i KHZvaWQgKnZhcnNKc29uYiwgY2hhciAqdmFyTmFtZSwKQEAgLTIxNzIsNiArMjE3NCw3MiBA QCBnZXRKc29uUGF0aEl0ZW0oSnNvblBhdGhFeGVjQ29udGV4dCAqY3h0LCBKc29uUGF0aEl0 ZW0gKml0ZW0sCiAJfQogfQogCisvKgorICogRXZhbHVhdGUgYSBKU09OIHBhdGggdmFyaWFi bGUgY2FjaGluZyBjb21wdXRlZCB2YWx1ZS4KKyAqLworaW50CitFdmFsSnNvblBhdGhWYXIo dm9pZCAqY3h0LCBjaGFyICp2YXJOYW1lLCBpbnQgdmFyTmFtZUxlbiwKKwkJCQlKc29uYlZh bHVlICp2YWwsIEpzb25iVmFsdWUgKmJhc2VPYmplY3QpCit7CisJSnNvblBhdGhWYXJpYWJs ZUV2YWxDb250ZXh0ICp2YXIgPSBOVUxMOworCUxpc3QJICAgKnZhcnMgPSBjeHQ7CisJTGlz dENlbGwgICAqbGM7CisJaW50CQkJaWQgPSAxOworCisJaWYgKCF2YXJOYW1lKQorCQlyZXR1 cm4gbGlzdF9sZW5ndGgodmFycyk7CisKKwlmb3JlYWNoKGxjLCB2YXJzKQorCXsKKwkJdmFy ID0gbGZpcnN0KGxjKTsKKworCQlpZiAoIXN0cm5jbXAodmFyLT5uYW1lLCB2YXJOYW1lLCB2 YXJOYW1lTGVuKSkKKwkJCWJyZWFrOworCisJCXZhciA9IE5VTEw7CisJCWlkKys7CisJfQor CisJaWYgKCF2YXIpCisJCXJldHVybiAtMTsKKworCS8qCisJICogV2hlbiBiZWxvbmdpbmcg dG8gYSBKc29uRXhwciwgcGF0aCB2YXJpYWJsZXMgYXJlIGNvbXB1dGVkIHdpdGggdGhlCisJ ICogSnNvbkV4cHIncyBFeHByU3RhdGUgKHZhci0+ZXN0YXRlIGlzIE5VTEwpLCBzbyBkb24n dCBuZWVkIHRvIGJlIGNvbXB1dGVkCisJICogaGVyZS4gIEluIHNvbWUgb3RoZXIgY2FzZXMs IHN1Y2ggYXMgd2hlbiB0aGUgcGF0aCB2YXJpYWJsZXMgYmVsb25naW5nCisJICogdG8gYSBK c29uVGFibGUgaW5zdGVhZCwgdGhvc2UgdmFyaWFibGVzIG11c3QgYmUgZXZhbHVhdGVkIG9u IHRoZWlyIG93biwKKwkgKiB3aXRob3V0IHRoZSBlbmNsb3NpbmcgSnNvbkV4cHIgaXRzZWxm IG5lZWRpbmcgdG8gYmUgZXZhbHVhdGVkLCBzbyBtdXN0CisJICogYmUgaGFuZGxlZCBoZXJl LgorCSAqLworCWlmICh2YXItPmVzdGF0ZSAmJiAhdmFyLT5ldmFsdWF0ZWQpCisJeworCQlN ZW1vcnlDb250ZXh0IG9sZGN4dCA9IHZhci0+bWN4dCA/CisJCU1lbW9yeUNvbnRleHRTd2l0 Y2hUbyh2YXItPm1jeHQpIDogTlVMTDsKKworCQlBc3NlcnQodmFyLT5lY29udGV4dCAhPSBO VUxMKTsKKwkJdmFyLT52YWx1ZSA9IEV4ZWNFdmFsRXhwcih2YXItPmVzdGF0ZSwgdmFyLT5l Y29udGV4dCwgJnZhci0+aXNudWxsKTsKKwkJdmFyLT5ldmFsdWF0ZWQgPSB0cnVlOworCisJ CWlmIChvbGRjeHQpCisJCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKKwl9CisJ ZWxzZQorCXsKKwkJQXNzZXJ0KHZhci0+ZXZhbHVhdGVkKTsKKwl9CisKKwlpZiAodmFyLT5p c251bGwpCisJeworCQl2YWwtPnR5cGUgPSBqYnZOdWxsOworCQlyZXR1cm4gMDsKKwl9CisK KwlKc29uSXRlbUZyb21EYXR1bSh2YXItPnZhbHVlLCB2YXItPnR5cGlkLCB2YXItPnR5cG1v ZCwgdmFsKTsKKworCSpiYXNlT2JqZWN0ID0gKnZhbDsKKwlyZXR1cm4gaWQ7Cit9CisKIC8q CiAgKiBHZXQgdGhlIHZhbHVlIG9mIHZhcmlhYmxlIHBhc3NlZCB0byBqc29ucGF0aCBleGVj dXRvcgogICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjRXhwci5o IGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0V4cHIuaAppbmRleCBhNTEyMzJiODRkZS4u M2FhNWNkZGJiOGUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNFeHBy LmgKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0V4cHIuaApAQCAtMjQ3LDcgKzI0 NywxMCBAQCB0eXBlZGVmIGVudW0gRXhwckV2YWxPcAogCUVFT1BfU1VCVFJBTlMsCiAJRUVP UF9KU09OX0NPTlNUUlVDVE9SLAogCUVFT1BfSVNfSlNPTiwKLQlFRU9QX0pTT05FWFBSLAor CUVFT1BfSlNPTkVYUFJfU0tJUCwKKwlFRU9QX0pTT05FWFBSX1BBVEgsCisJRUVPUF9KU09O RVhQUl9JT0NPRVJDRSwKKwlFRU9QX0pTT05FWFBSX1BPUFVMQVRFLAogCiAJLyogYWdncmVn YXRpb24gcmVsYXRlZCBub2RlcyAqLwogCUVFT1BfQUdHX1NUUklDVF9ERVNFUklBTElaRSwK QEAgLTcwNCwxMiArNzA3LDUwIEBAIHR5cGVkZWYgc3RydWN0IEV4cHJFdmFsU3RlcAogCQkJ SnNvbklzUHJlZGljYXRlICpwcmVkOwkvKiBvcmlnaW5hbCBleHByZXNzaW9uIG5vZGUgKi8K IAkJfQkJCWlzX2pzb247CiAKLQkJLyogZm9yIEVFT1BfSlNPTkVYUFIgKi8KKwkJLyogZm9y IEVFT1BfSlNPTkVYUFJfUEFUSCAqLwogCQlzdHJ1Y3QKIAkJewogCQkJc3RydWN0IEpzb25F eHByU3RhdGUgKmpzZXN0YXRlOworCisJCQkvKiBTZWUgRXhlY0V2YWxKc29uRXhwcigpICov CisJCQlpbnQJCQlqdW1wX2RvbmU7CisJCQlpbnQJCQlqdW1wX29uZXJyb3I7CisJCQlpbnQJ CQlqdW1wX29uZW1wdHk7CisJCQlpbnQJCQlqdW1wX2NvZXJjaW9uOworCQkJaW50CQkJanVt cF9jb2VyY2lvbl9zdWJ0cmFuczsKKwkJCWludAkJCWp1bXBfY29lcmNpb25fdmlhX2lvOwor CQkJaW50CQkJanVtcF9jb2VyY2lvbl9udWxsOworCQkJaW50CQkJanVtcF9jb2VyY2lvbl9u dWxsX3N1YnRyYW5zOwogCQl9CQkJanNvbmV4cHI7CiAKKwkJLyogZm9yIEVFT1BfSlNPTkVY UFJfU0tJUCAqLworCQlzdHJ1Y3QKKwkJeworCQkJLyogU2FtZSBhcyBqc29uZXhwci5qc2Vz dGF0ZSAqLworCQkJc3RydWN0IEpzb25FeHByU3RhdGUgKmpzZXN0YXRlOworCisJCQkvKiBT ZWUgRXhlY0V2YWxKc29uRXhwclNraXAoKSAqLworCQkJaW50CQkJanVtcF9jb2VyY2lvbjsK KwkJfQkJCWpzb25leHByX3NraXA7CisKKwkJLyogZm9yIEVFT1BfSlNPTkVYUFJfSU9DT0VS Q0UgKi8KKwkJc3RydWN0CisJCXsKKwkJCS8qIEkvTyBpbmZvIGZvciBvdXRwdXQgdHlwZSAq LworCQkJRm1nckluZm8gICAqZmluZm87CS8qIHR5cGlucHV0IGZ1bmN0aW9uIGZvciBvdXRw dXQgdHlwZSAqLworCQkJT2lkCQkJdHlwaW9wYXJhbTsKKwkJCWludDMyCQl0eXBtb2Q7CisJ CX0JCQlqc29uZXhwcl9pb2NvZXJjZTsKKworCQkvKiBmb3IgRUVPUF9KU09ORVhQUl9QT1BV TEFURSAqLworCQlzdHJ1Y3QKKwkJeworCQkJc3RydWN0IEpzb25FeHByICpqc2V4cHI7CisK KwkJCS8qIENhY2hlIGZvciBqc29uX3BvcHVsYXRlX3R5cGUoKSAqLworCQkJdm9pZAkgICAq Y2FjaGU7CisJCX0JCQlqc29uZXhwcl9wb3B1bGF0ZTsKKwogCX0JCQlkOwogfSBFeHByRXZh bFN0ZXA7CiAKQEAgLTc2OSw2OCArODEwLDU3IEBAIHR5cGVkZWYgc3RydWN0IEpzb25Db25z dHJ1Y3RvckV4cHJTdGF0ZQogCWludAkJCW5hcmdzOwogfSBKc29uQ29uc3RydWN0b3JFeHBy U3RhdGU7CiAKLXR5cGVkZWYgc3RydWN0IEpzb25Db2VyY2lvblN0YXRlCisvKgorICogSW5m b3JtYXRpb24gY29tcHV0ZWQgYmVmb3JlIGV2YWx1YXRpbmcgYSBKc29uRXhwciBleHByZXNz aW9uLgorICovCit0eXBlZGVmIHN0cnVjdCBKc29uRXhwclByZUV2YWxTdGF0ZQogewotCUV4 cHJTdGF0ZSAgKmVzdGF0ZTsgLyogY29lcmNpb24gZXhwcmVzc2lvbiBzdGF0ZSwgaWYgYW55 ICovCi0JSnNvbkNvZXJjaW9uVHlwZSB0eXBlOwotfSBKc29uQ29lcmNpb25TdGF0ZTsKKwkv KiB2YWx1ZS9pc251bGwgZm9yIEpzb25FeHByLmZvcm1hdHRlZF9leHByICovCisJTnVsbGFi bGVEYXR1bSBmb3JtYXR0ZWRfZXhwcjsKKworCS8qIHZhbHVlL2lzbnVsbCBmb3IgSnNvbkV4 cHIucGF0aHNwZWMgKi8KKwlOdWxsYWJsZURhdHVtIHBhdGhzcGVjOworCisJLyogSnNvblBh dGhWYXJpYWJsZUV2YWxDb250ZXh0IGVudHJpZXMgZm9yIEpzb25FeHByLnBhc3NpbmdfdmFs dWVzICovCisJTGlzdAkgICAqYXJnczsKK30JSnNvbkV4cHJQcmVFdmFsU3RhdGU7CisKKy8q CisgKiBTdGF0ZSBmb3IgZXZhbHVhdGluZyB0aGUgY29lcmNpb24gZm9yIGEgZ2l2ZW4gSlNP TiBpdGVtIHVzaW5nIG9uZSBvZgorICogdGhlIGZvbGxvd2luZyBjb2VyY2lvbnMuCisgKgor ICogTm90ZSB0aGF0IHdoaWxlIEV4ZWNJbml0RXhwclJlYygpIGZvciBKc29uSXRlbUNvZXJj aW9ucyB3aWxsCisgKiBpbml0aWFsaXplIEV4cHJFdmFsU3RlcHMgZm9yIGFsbCBvZiB0aGUg bWVtYmVycyB0aGF0IG5lZWQgaXQsIG9ubHkKKyAqIG9uZSB3aWxsIGdldCBydW4gZHVyaW5n IGEgZ2l2ZW4gZXZhbHVhdGlvbiBvZiB0aGUgZW5jbG9zaW5nIEpzb25FeHByCisgKiBkZXBl bmRpbmcgb24gdGhlIHR5cGUgb2YgdGhlIHJlc3VsdCBKU09OIGl0ZW0uCisgKi8KK3R5cGVk ZWYgc3RydWN0IEpzb25JdGVtQ29lcmNpb25zU3RhdGUKK3sKKwkvKiBOdW1iZXIgb2YgRXhw ckV2YWxTdGVwIHRvIGNvbXB1dGUgdGhpcyBjb2VyY2lvbidzIGV4cHJlc3Npb24gKi8KKwlp bnQJCQludWxsOworCWludAkJCXN0cmluZzsKKwlpbnQJCQludW1lcmljOworCWludAkJCWJv b2xlYW47CisJaW50CQkJZGF0ZTsKKwlpbnQJCQl0aW1lOworCWludAkJCXRpbWV0ejsKKwlp bnQJCQl0aW1lc3RhbXA7CisJaW50CQkJdGltZXN0YW1wdHo7CisJaW50CQkJY29tcG9zaXRl OworfSBKc29uSXRlbUNvZXJjaW9uc1N0YXRlOwogCiAvKiBFRU9QX0pTT05FWFBSIHN0YXRl LCB0b28gYmlnIHRvIGlubGluZSAqLwogdHlwZWRlZiBzdHJ1Y3QgSnNvbkV4cHJTdGF0ZQog ewogCUpzb25FeHByICAgKmpzZXhwcjsJCQkvKiBvcmlnaW5hbCBleHByZXNzaW9uIG5vZGUg Ki8KIAotCXN0cnVjdAotCXsKLQkJRm1nckluZm8JZnVuYzsJCS8qIHR5cGlucHV0IGZ1bmN0 aW9uIGZvciBvdXRwdXQgdHlwZSAqLwotCQlPaWQJCQl0eXBpb3BhcmFtOwotCX0JCQlpbnB1 dDsJCQkvKiBJL08gaW5mbyBmb3Igb3V0cHV0IHR5cGUgKi8KLQotCU51bGxhYmxlRGF0dW0K LQkJCQlmb3JtYXR0ZWRfZXhwciwJLyogZm9ybWF0dGVkIGNvbnRleHQgaXRlbSB2YWx1ZSAq LwotCQkJCWNvZXJjaW9uX2V4cHIsCS8qIGlucHV0IGZvciBKU09OIGl0ZW0gY29lcmNpb24g Ki8KLQkJCQlwYXRoc3BlYzsJCS8qIHBhdGggc3BlY2lmaWNhdGlvbiB2YWx1ZSAqLwotCi0J RXhwclN0YXRlICAqcmVzdWx0X2V4cHI7CS8qIGNvZXJjZWQgdG8gb3V0cHV0IHR5cGUgKi8K LQlFeHByU3RhdGUgICpkZWZhdWx0X29uX2VtcHR5OwkvKiBPTiBFTVBUWSBERUZBVUxUIGV4 cHJlc3Npb24gKi8KLQlFeHByU3RhdGUgICpkZWZhdWx0X29uX2Vycm9yOwkvKiBPTiBFUlJP UiBERUZBVUxUIGV4cHJlc3Npb24gKi8KLQlMaXN0CSAgICphcmdzOwkJCS8qIHBhc3Npbmcg YXJndW1lbnRzICovCi0KLQl2b2lkCSAgICpjYWNoZTsJCQkvKiBjYWNoZSBmb3IganNvbl9w b3B1bGF0ZV90eXBlKCkgKi8KKwlKc29uRXhwclByZUV2YWxTdGF0ZSBwcmVfZXZhbDsKIAog CS8qCi0JICogU3RhdGVzIGZvciBjb2VyY2lvbiBvZiBTUUwvSlNPTiBpdGVtcyBwcm9kdWNl ZCBpbiBKU09OX1ZBTFVFCi0JICogZGlyZWN0bHkgdG8gdGhlIG91dHB1dCB0eXBlLgotCSAq Ci0JICogYGl0ZW1fY29lcmNpb25zID09IE5VTExgIG1lYW5zIG91dHB1dCB0eXBlIGlzIGpz b25bYl0gb3IgaXRzCi0JICogZG9tYWluIGFuZCB3ZSB1c2UgYHJlc3VsdF9jb2VyY2lvbmAu CisJICogVXNlZCBvbmx5IGluIEpTT05fVkFMVUUoKS4gIGBpdGVtX2NvZXJjaW9ucyA9PSBO VUxMYCBtZWFucyB0aGF0CisJICogb3V0cHV0IHR5cGUgaXMganNvbltiXSBvciBpdHMgZG9t YWluIGFuZCB3ZSB1c2UgYHJlc3VsdF9jb2VyY2lvbmAuCiAJICovCi0Jc3RydWN0IEpzb25J dGVtc0NvZXJjaW9uU3RhdGVzCi0JewotCQlKc29uQ29lcmNpb25TdGF0ZQotCQkJCQludWxs LAotCQkJCQlzdHJpbmcsCi0JCQkJCW51bWVyaWMsCi0JCQkJCWJvb2xlYW4sCi0JCQkJCWRh dGUsCi0JCQkJCXRpbWUsCi0JCQkJCXRpbWV0eiwKLQkJCQkJdGltZXN0YW1wLAotCQkJCQl0 aW1lc3RhbXB0eiwKLQkJCQkJY29tcG9zaXRlOwotCX0JCSAgICppdGVtX2NvZXJjaW9uczsK LQotCS8qIERlZmF1bHQgb3V0cHV0IGNvZXJjaW9uIHRvIHVzZSwgY2FuIGJlIG92ZXJyaWRl biBpbiBKU09OX1FVRVJZICovCi0JSnNvbkNvZXJjaW9uU3RhdGUgcmVzdWx0X2NvZXJjaW9u OwotCi0JLyogU3BlY2lhbCBJL08gY29lcmNpb24gc3RhdGUgZm9yIEpTT05fUVVFUlkgT01J VCBRVU9URVMgKi8KLQlKc29uQ29lcmNpb25TdGF0ZSBpb19jb2VyY2lvbjsKLQotCS8qIENh biBleHByZXNzaW9uIGluIERFRkFVTFQgT04gRU1QVFkgdGhyb3cgZXJyb3JzPyAqLwotCWJv b2wJCWRlZmF1bHRfb25fZW1wdHlfY2FuX3Rocm93OwotCi0JLyogQ2FuIHdlIHNraXAgY29l cmNpb24gb2YgTlVMTHMgKG5vbi1kb21haW4gb3V0cHV0IHR5cGUpPyAqLwotCWJvb2wJCXNr aXBfbnVsbF9jb2VyY2lvbjsKKwlKc29uSXRlbUNvZXJjaW9uc1N0YXRlICppdGVtX2NvZXJj aW9uczsKIH0gSnNvbkV4cHJTdGF0ZTsKIAogLyogZnVuY3Rpb25zIGluIGV4ZWNFeHByLmMg Ki8KQEAgLTg5NSwxNSArOTI1LDEzIEBAIGV4dGVybiBib29sIEV4ZWNFdmFsU3VidHJhbnMo RXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCwKIAkJCQkJCQkgRXhlY0V2YWxT dWJyb3V0aW5lIGZ1bmMpOwogZXh0ZXJuIHZvaWQgRXhlY0V2YWxKc29uQ29uc3RydWN0b3Io RXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCwKIAkJCQkJCQkJCUV4cHJDb250 ZXh0ICplY29udGV4dCk7Ci1leHRlcm4gdm9pZCBFeGVjRXZhbEpzb25FeHByKEV4cHJTdGF0 ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAqb3AsCi0JCQkJCQkJIEV4cHJDb250ZXh0ICplY29u dGV4dCk7CiBleHRlcm4gYm9vbCBFeGVjRXZhbEpzb25OZWVkc1N1YlRyYW5zYWN0aW9uKEpz b25FeHByICpqc2V4cHIpOwogZXh0ZXJuIGJvb2wgRXhlY0V2YWxFeHByQ2FuVGhyb3dFcnJv cnMoTm9kZSAqZXhwcik7Ci1leHRlcm4gRGF0dW0gRXhlY0V2YWxFeHByUGFzc2luZ0Nhc2VW YWx1ZShFeHByU3RhdGUgKmVzdGF0ZSwKLQkJCQkJCQkJCQkgIEV4cHJDb250ZXh0ICplY29u dGV4dCwgYm9vbCAqaXNudWxsLAotCQkJCQkJCQkJCSAgRGF0dW0gY2FzZXZhbF9kYXR1bSwK LQkJCQkJCQkJCQkgIGJvb2wgY2FzZXZhbF9pc251bGwpOwotCitleHRlcm4gaW50IEV4ZWNF dmFsSnNvbkV4cHIoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCk7CitleHRl cm4gYm9vbCBFeGVjRXZhbEpzb25FeHByU2tpcChFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZh bFN0ZXAgKm9wKTsKK2V4dGVybiB2b2lkIEV4ZWNFdmFsSnNvbkV4cHJJT0NvZXJjZShFeHBy U3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9wKTsKK2V4dGVybiB2b2lkIEV4ZWNFdmFs SnNvbkV4cHJQb3B1bGF0ZShFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9wLAor CQkJCQkJCQkJIEV4cHJDb250ZXh0ICplY29udGV4dCk7CiBleHRlcm4gdm9pZCBFeGVjQWdn SW5pdEdyb3VwKEFnZ1N0YXRlICphZ2dzdGF0ZSwgQWdnU3RhdGVQZXJUcmFucyBwZXJ0cmFu cywgQWdnU3RhdGVQZXJHcm91cCBwZXJncm91cCwKIAkJCQkJCQkgRXhwckNvbnRleHQgKmFn Z2NvbnRleHQpOwogZXh0ZXJuIERhdHVtIEV4ZWNBZ2dUcmFuc1JlcGFyZW50KEFnZ1N0YXRl ICphZ2dzdGF0ZSwgQWdnU3RhdGVQZXJUcmFucyBwZXJ0cmFucywKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5v ZGVzLmgKaW5kZXggMGE0MGQ1OWJlMjYuLjA4MjRhNjE4NmQxIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wcmlt bm9kZXMuaApAQCAtMTU3Niw4ICsxNTc2LDExIEBAIHR5cGVkZWYgc3RydWN0IEpzb25Db2Vy Y2lvbgogCiAvKgogICogSnNvbkl0ZW1Db2VyY2lvbnMgLQotICoJCWV4cHJlc3Npb25zIGZv ciBjb2VyY2lvbiBmcm9tIFNRTC9KU09OIGl0ZW0gdHlwZXMgZGlyZWN0bHkgdG8gdGhlCi0g KgkJb3V0cHV0IFNRTCB0eXBlCisgKgkJZXhwcmVzc2lvbnMgZm9yIGNvZXJjaW9uIGZyb20g U1FML0pTT04gaXRlbSB0eXBlcyBkaXJlY3RseSB0bworICoJCXRoZSBvdXRwdXQgU1FMIHR5 cGUuCisgKgorICoJCSJKc29uQ29lcmNpb24gPT0gTlVMTCIgbWVhbnMgbm8gY2FzdCBpcyBh dmFpbGFibGUuCisgKiAJCSJKc29uQ29lcmNpb24uZXhwciA9PSBOVUxMIiBtZWFucyBubyBj b2VyY2lvbiBpcyBuZWVkZWQuCiAgKi8KIHR5cGVkZWYgc3RydWN0IEpzb25JdGVtQ29lcmNp b25zCiB7CkBAIC0xNTkxLDcgKzE1OTQsNyBAQCB0eXBlZGVmIHN0cnVjdCBKc29uSXRlbUNv ZXJjaW9ucwogCUpzb25Db2VyY2lvbiAqdGltZXR6OwogCUpzb25Db2VyY2lvbiAqdGltZXN0 YW1wOwogCUpzb25Db2VyY2lvbiAqdGltZXN0YW1wdHo7Ci0JSnNvbkNvZXJjaW9uICpjb21w b3NpdGU7CS8qIGFycmF5cyBhbmQgb2JqZWN0cyAqLworCUpzb25Db2VyY2lvbiAqY29tcG9z aXRlOwogfSBKc29uSXRlbUNvZXJjaW9uczsKIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL3V0aWxzL2pzb25iLmggYi9zcmMvaW5jbHVkZS91dGlscy9qc29uYi5oCmluZGV4IGJh ZTQ2NmI1MjM0Li42YmRkOWY1MTIxOSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMv anNvbmIuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9qc29uYi5oCkBAIC02OSw4ICs2OSwx MCBAQCB0eXBlZGVmIGVudW0KIAogLyogQ29udmVuaWVuY2UgbWFjcm9zICovCiAjZGVmaW5l IERhdHVtR2V0SnNvbmJQKGQpCSgoSnNvbmIgKikgUEdfREVUT0FTVF9EQVRVTShkKSkKKyNk ZWZpbmUgRGF0dW1HZXRKc29uYlZhbHVlUChkKQkoKEpzb25iVmFsdWUgKikgRGF0dW1HZXRQ b2ludGVyKGQpKQogI2RlZmluZSBEYXR1bUdldEpzb25iUENvcHkoZCkJKChKc29uYiAqKSBQ R19ERVRPQVNUX0RBVFVNX0NPUFkoZCkpCiAjZGVmaW5lIEpzb25iUEdldERhdHVtKHApCVBv aW50ZXJHZXREYXR1bShwKQorI2RlZmluZSBKc29uYlZhbHVlUEdldERhdHVtKHApCVBvaW50 ZXJHZXREYXR1bShwKQogI2RlZmluZSBQR19HRVRBUkdfSlNPTkJfUCh4KQlEYXR1bUdldEpz b25iUChQR19HRVRBUkdfREFUVU0oeCkpCiAjZGVmaW5lIFBHX0dFVEFSR19KU09OQl9QX0NP UFkoeCkJRGF0dW1HZXRKc29uYlBDb3B5KFBHX0dFVEFSR19EQVRVTSh4KSkKICNkZWZpbmUg UEdfUkVUVVJOX0pTT05CX1AoeCkJUEdfUkVUVVJOX1BPSU5URVIoeCkKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL3V0aWxzL2pzb25wYXRoLmggYi9zcmMvaW5jbHVkZS91dGlscy9qc29u cGF0aC5oCmluZGV4IDhlNzliOGRjOWYwLi5mYTFkM2VhZTZjZiAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvdXRpbHMvanNvbnBhdGguaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9qc29u cGF0aC5oCkBAIC0yODAsOSArMjgwLDYgQEAgZXh0ZXJuIERhdHVtIEpzb25QYXRoUXVlcnko RGF0dW0gamIsIEpzb25QYXRoICpqcCwgSnNvbldyYXBwZXIgd3JhcHBlciwKIGV4dGVybiBK c29uYlZhbHVlICpKc29uUGF0aFZhbHVlKERhdHVtIGpiLCBKc29uUGF0aCAqanAsIGJvb2wg KmVtcHR5LAogCQkJCQkJCQkgYm9vbCAqZXJyb3IsIExpc3QgKnZhcnMpOwogCi1leHRlcm4g aW50CUV2YWxKc29uUGF0aFZhcih2b2lkICp2YXJzLCBjaGFyICp2YXJOYW1lLCBpbnQgdmFy TmFtZUxlbiwKLQkJCQkJCQlKc29uYlZhbHVlICp2YWwsIEpzb25iVmFsdWUgKmJhc2VPYmpl Y3QpOwotCiBleHRlcm4gUEdETExJTVBPUlQgY29uc3QgVGFibGVGdW5jUm91dGluZSBKc29u YlRhYmxlUm91dGluZTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL2pzb25iX3NxbGpzb24ub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9qc29uYl9zcWxqc29uLm91dAppbmRleCBlZTVlNTk3OTA5Yy4uYzg0ZmIwM2RmMzcgMTAw NjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbmJfc3FsanNvbi5vdXQK KysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qc29uYl9zcWxqc29uLm91dApAQCAt NjkzLDYgKzY5MywxNyBAQCBTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckdHMn IFBBU1NJTkcgdGltZXN0YW1wdHogJzIwMTgtMDItMjEgMTI6MzQ6NTYgKwogICIyMDE4LTAy LTIxVDAyOjM0OjU2KzAwOjAwIgogKDEgcm93KQogCistLSB0ZXN0IGVycm9ycyBpbiBERUZB VUxUIE9OIEVNUFRZIGV4cHJlc3Npb25zCitTRUxFQ1QgSlNPTl9WQUxVRSgnMSc6Ompzb25i LCAnJC54JyBSRVRVUk5JTkcgaW50CisgICAgICAgICAgICAgICAgICBERUZBVUxUIDEgLyB4 IE9OIEVNUFRZCisgICAgICAgICAgICAgICAgICBERUZBVUxUIDIgT04gRVJST1IpCitGUk9N IChWQUxVRVMgKDE6OmludCksICgwKSkgeCh4KTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0t LS0tCisgICAgICAgICAgMQorICAgICAgICAgIDIKKygyIHJvd3MpCisKIC0tIEpTT05fUVVF UlkKIFNFTEVDVAogCUpTT05fUVVFUlkoanMsICckJyksCkBAIC03OTQsNiArODA1LDEyIEBA IFNFTEVDVCBKU09OX1FVRVJZKGpzb25iICciYWFhIicsICckJyBSRVRVUk5JTkcgYnl0ZWEg Rk9STUFUIEpTT04gT01JVCBRVU9URVMgRVJSCiAgXHg2MTYxNjEKICgxIHJvdykKIAorU0VM RUNUIEpTT05fUVVFUlkoanNvbmIgJyJhYWEiJywgJyQnIFJFVFVSTklORyBqc29uIE9NSVQg UVVPVEVTIEVNUFRZIEFSUkFZIE9OIEVSUk9SKTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0t LS0tCisgW10KKygxIHJvdykKKwogLS0gUVVPVEVTIGJlaGF2aW9yIHNob3VsZCBub3QgYmUg c3BlY2lmaWVkIHdoZW4gV0lUSCBXUkFQUEVSIHVzZWQ6CiAtLSBTaG91bGQgZmFpbAogU0VM RUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxXScsICckJyBXSVRIIFdSQVBQRVIgT01JVCBRVU9U RVMpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvanNvbmJfc3FsanNvbi5z cWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qc29uYl9zcWxqc29uLnNxbAppbmRleCBkNzAx MDRiNzBlZi4uZWVkMTYzZTcwODkgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L2pzb25iX3NxbGpzb24uc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pzb25iX3Nx bGpzb24uc3FsCkBAIC0xOTQsNiArMTk0LDEyIEBAIFNFTEVDVCBKU09OX1ZBTFVFKGpzb25i ICdudWxsJywgJyR0cycgUEFTU0lORyB0aW1lc3RhbXB0eiAnMjAxOC0wMi0yMSAxMjozNDo1 NiArCiBTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckdHMnIFBBU1NJTkcgdGlt ZXN0YW1wdHogJzIwMTgtMDItMjEgMTI6MzQ6NTYgKzEwJyBBUyB0cyBSRVRVUk5JTkcganNv bik7CiBTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckdHMnIFBBU1NJTkcgdGlt ZXN0YW1wdHogJzIwMTgtMDItMjEgMTI6MzQ6NTYgKzEwJyBBUyB0cyBSRVRVUk5JTkcganNv bmIpOwogCistLSB0ZXN0IGVycm9ycyBpbiBERUZBVUxUIE9OIEVNUFRZIGV4cHJlc3Npb25z CitTRUxFQ1QgSlNPTl9WQUxVRSgnMSc6Ompzb25iLCAnJC54JyBSRVRVUk5JTkcgaW50Cisg ICAgICAgICAgICAgICAgICBERUZBVUxUIDEgLyB4IE9OIEVNUFRZCisgICAgICAgICAgICAg ICAgICBERUZBVUxUIDIgT04gRVJST1IpCitGUk9NIChWQUxVRVMgKDE6OmludCksICgwKSkg eCh4KTsKKwogLS0gSlNPTl9RVUVSWQogCiBTRUxFQ1QKQEAgLTIzOSw2ICsyNDUsNyBAQCBT RUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIHRleHQgT01J VCBRVU9URVMgT04gU0NBTEFSIFNUUklORwogU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJyJh YWEiJywgJyQnIE9NSVQgUVVPVEVTIEVSUk9SIE9OIEVSUk9SKTsKIFNFTEVDVCBKU09OX1FV RVJZKGpzb25iICciYWFhIicsICckJyBSRVRVUk5JTkcganNvbiBPTUlUIFFVT1RFUyBFUlJP UiBPTiBFUlJPUik7CiBTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnImFhYSInLCAnJCcgUkVU VVJOSU5HIGJ5dGVhIEZPUk1BVCBKU09OIE9NSVQgUVVPVEVTIEVSUk9SIE9OIEVSUk9SKTsK K1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICciYWFhIicsICckJyBSRVRVUk5JTkcganNvbiBP TUlUIFFVT1RFUyBFTVBUWSBBUlJBWSBPTiBFUlJPUik7CiAKIC0tIFFVT1RFUyBiZWhhdmlv ciBzaG91bGQgbm90IGJlIHNwZWNpZmllZCB3aGVuIFdJVEggV1JBUFBFUiB1c2VkOgogLS0g U2hvdWxkIGZhaWwKLS0gCjIuMjUuMQoK --------------4f0L3EFiQJb2iiAozUzeF43y--