Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rBT8L-00AyYE-PE for pgsql-hackers@arkaria.postgresql.org; Fri, 08 Dec 2023 05:10:42 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1rBT8J-004Yzd-AJ for pgsql-hackers@arkaria.postgresql.org; Fri, 08 Dec 2023 05:10:39 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rBT8I-004YyQ-8j for pgsql-hackers@lists.postgresql.org; Fri, 08 Dec 2023 05:10:38 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by makus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rBT8C-009MET-47 for pgsql-hackers@lists.postgresql.org; Fri, 08 Dec 2023 05:10:37 +0000 Received: from [192.168.3.18] (broadband-5-228-82-85.ip.moscow.rt.ru [5.228.82.85]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) (Authenticated sender: y.sokolov@postgrespro.ru) by mail.postgrespro.ru (Postfix/465) with ESMTPSA id 1C83AE20E4E for ; Fri, 8 Dec 2023 08:10:30 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1702012230; bh=8i3aju6LZs6GohMjr2cPXaD4eTND1+v976sqdq5TdHE=; h=Message-ID:Date:User-Agent:Subject:To:References:From:In-Reply-To: From; b=ZwMY8Qx35iIFM8IeADoO+LS8Y+au8n/Nby2cfyqbAua1DWz5GeE8t0OeYxtaP91ZT cMj7rEX1gYqXWNIhMdM7c5dA2F13naBYGYEW8dh2cyAGLJYmIc+MhHS6iwLss00BS6 JjHEHA6DNw2WoznNhsO8zI15phOVlkIYISl/5FwhFjjHj+RzFA4yWmAxsSPqvUJuSb EyvrBjjQcVLQN9nsbYmKbzoV5GO5fqYD8MEiUEJoMysWFRQ5OqJE8GaF/rgAwT9CqV 1SB8G2WfCPkNEI8BTROUnpaTfdAZqGHV5Bo6pfS4PulbbHcEslWfnTvXJgF3fioRJc gRh1A1rD6z4iw== Content-Type: multipart/mixed; boundary="------------C0OIlYZV84Q5xt8yrUdZjoIp" Message-ID: <61ac1e3b-4f85-4bd5-b2fa-80cc7e864755@postgrespro.ru> Date: Fri, 8 Dec 2023 08:10:29 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH] New [relation] option engine To: pgsql-hackers@lists.postgresql.org References: <20230201090426.q5jheyvzcnlxyx5d@alvherre.pgsql> Content-Language: en-US From: Yura Sokolov In-Reply-To: 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. --------------C0OIlYZV84Q5xt8yrUdZjoIp Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit 11.11.2023 12:33, John Naylor пишет: > On Thu, Feb 2, 2023 at 10:03 AM vignesh C wrote: >> >> On Wed, 1 Feb 2023 at 14:49, Alvaro Herrera wrote: >>> >>> On 2023-Jan-31, vignesh C wrote: >>> >>>> On Tue, 3 Jan 2023 at 18:38, vignesh C wrote: > >>>> There has been no updates on this thread for some time, so this has >>>> been switched as Returned with Feedback. Feel free to open it in the >>>> next commitfest if you plan to continue on this. >>> >>> Well, no feedback has been given, so I'm not sure this is a great >>> outcome. In the interest of keeping it alive, I've rebased it. It >>> turns out that the only conflict is with the 2022 -> 2023 copyright line >>> update. >>> >>> I have not reviewed it. >> >> Since there was no response to rebase the patch, I was not sure if the >> author was planning to continue. Anyways Nikolay Shaplov plans to work >> on this soon, So I have added this to the next commitfest at [1]. >> [1] - https://commitfest.postgresql.org/41/3536/ > > Nine months have passed, and there hasn't been an update since last > time it was returned. It doesn't seem to have been productive to > resurrect it to the CF based on "someone plans to work on it soon". > I'm re-returning it with feedback. > > Some time ago, there was a proposal to create a new category "lack of > interest", but that also seems to have gone nowhere because of...lack > of interest. I've rebased patch, so it could be add to commitfest again. ------ Yura Sokolov --------------C0OIlYZV84Q5xt8yrUdZjoIp Content-Type: text/x-patch; charset=UTF-8; name="v5-0001-New-options-engine.patch" Content-Disposition: attachment; filename="v5-0001-New-options-engine.patch" Content-Transfer-Encoding: base64 RnJvbSA5Y2ZkYTMxZTA0ZDFlZTYxNWRhODE3ZGY4YWY2MjJmM2IxZThlNGY4IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBOaWtvbGF5IFNoYXBsb3YgPGRoeWFuQG5hdGFyYWou c3U+CkRhdGU6IFdlZCwgMSBGZWIgMjAyMyAwOTo1Mjo0MCArMDEwMApTdWJqZWN0OiBbUEFU Q0hdIE5ldyBvcHRpb25zIGVuZ2luZQoKQWRkIG5ldyBvcHRpb25zIGVuZ2luZSB0aGF0IHdp bGwgYWxsb3cgdG8gZGVmaW5lIG9wdGlvbnMgZGlyZWN0bHkgaW4gYW55IHBhcnQKb2YgY29k ZSB0aGV5IGFyZSBuZWVkZWQgKGFueXdoZXJlLCBub3Qgb25seSBmb3IgcmVsYXRpb24gYW5k IG9wLiBjbGFzc2VzKSBhbmQKdXNlIHVuaWZpZWQgQVBJIGZvciBvcHRpb24gcHJvY2Vzc2lu Zy4KClRoaXMgd2lsbCBhbGxvdzoKCi0gVW5pZnkgb3B0aW9ucyBjb2RlLiBOb3cgd2UgaGF2 ZSBjb3JlIEFNIHJlbG9wdGlvbnMsIGNvbnRyaWIgQU0gcmVsb3B0aW9ucyBhbmQKICBsb2Nh bCByZWxvcHRpb25zIGZvciBvcC4gY2xhc3NlcywgZWFjaCB1c2luZyB0aGVpciBvd24gQVBJ LiBOZXcgZW5naW5lIHdpbGwKICBhbGxvdyB0byB1c2Ugc2luZ2xlIEFQSSBmb3IgdGhlbSBh bGwuCi0gTW92ZSBvcHRpb25zIGRlZmluaXRpb24gY29tcGxldGVseSB0byBBY2Nlc3MgTWV0 aG9kIGltcGxlbWVudGF0aW9uLiBEb25lIGZvcgogIGluZGV4IEFNLCB3aWxsIGJlIGRvbmUg c3RvcmFnZSBBTSBsYXRlci4gKEJlZm9yZSBjb3JlIEFNIGFsbCBvcHRpb25zIHdlcmUKICBk ZWZpbmVkIGluIHJlbG9wdGlvbnMuYykKLSBBbGwgb3B0aW9ucyBmb3IgQU0gaXMgZGVmaW5l ZCBpbiBvbmUgc2luZ2xlIGNodW5rIG9mIGNvZGUuIChCZWZvcmUgZm9yIGNvcmUgQU0KICB5 b3UgaGFkIHRvIGVkaXQgYm90aCByZWxvcHRpb25zLmMgYW5kIGNvZGUgb2YgQU0sIHRoaXMg d2FzIGVycm9yIHByb25lKQotIE1vcmUgc2ltcGxlIHdheSB0byBkZWZpbmUgbmV3IG9wdGlv biBzdGV0cyAod2Ugd2lsbCBuZWVkIHBhcnRpdGlvbmVkLiogb3B0aW9ucwogIHNvb25lciBv ciBsYXRlciwgdGhpcyBlbmdpbmUgd2lsbCBhbGxvdyB0byBkbyBpdCBtb3JlIGVhc3kpCi0g QWxsb3cgdG8gYWRkIG5hbWU9dmFsdWUgb3B0aW9ucyBhbnl3aGVyZSB0aGV5IG5lZWRlZC4K LSBNb3JlIGZsZXhpYmxlIHdheSBmb3IgZGVmaW5pbmcgb3B0aW9uIGJlaGF2aW9yIChlLmcu IGRpc2FibGUgT0lEUz10cnVlIHZpYQogIHBvc3R2YWxpZGF0ZSBjYWxsYmFjaywgd2l0aG91 dCBjaGFuZ2luZyBvcHRpb24gcHJvY2Vzc2luZyBjb2RlKQoKV2hhdCBpcyBkb25lLCBhbmQg d2hhdCBpcyBzdGlsbCBpbiBwcm9ncmVzczoKCi0gSW5kZXggQU0gb3B0aW9ucyBub3cgdXNp bmcgbmV3IG9wdGlvbiBlbmdpbmUgdGhlIHdheSBpdCBzaG91bGQgYmUuCi0gT3B0aW9ucyBm b3IgSGVhcCBhbmQgVG9hc3QsIGFyZSBhbHNvIHVzaW5nIG5ldyBlbmdpbmUsIGJ1dCB0aGV5 IGFyZSBzdGlsbAogIGxvY2F0ZWQgaW4gIHJlbG9wdGlvbnMuYyBmaWxlIGFzIHRoZXkgd2Vy ZSBiZWZvcmUuICBUaGV5IHdpbGwgYmUgbW92ZWQgdG8KICBzdG9yYWdlIEFNIGxhdGVyLgot IGxvY2FsX29wdGlvbnMgQVBJIHRoYXQgaXMgdXNlZCBmb3Igb3AuIGNsYXNzIG9wdGlvbnMg aXMgbm93IHdyYXBwZXIgYXJvdW5kIG5ldwogIG9wdGlvbiBlbmdpbmUuIExhdGVyIG9uLCBi dWlsZCBpbiBvcC4gY2xhc3NlcyB3aWxsIGJlIHVwZGF0ZWQgdG8gdXNlIG5ldwogIG9wdGlv biBlbmdpbmUgZGlyZWN0bHksIGFuZCBsb2NhbF9vcHRpb25zIEFQSSBjYW4gYmUga2VwdCBm b3IgYmFja3dhcmQKICBjb21wYXRpYmlsaXR5IGZvciBhIHdoaWxlLgoKVGhpcyBwYXRjaCBk b2VzIG5vdCBjaGFuZ2UgcG9zdGdyZXMgYmVoYXZpb3IuIEFsbCBleGlzdGluZyBvcHRpb25z IHdvcmsgdGhlIHdheQp0aGV5IGRpZCBpdCBiZWZvcmUuIE9uZSBzaW5nbGUgZXJyb3IgbWVz c2FnZSBpcyBjaGFuZ2VkLCBhbmQgaXQgaXMgbW9yZQphY2N1cmF0ZSBub3cuCgpgYGAKLUVS Uk9SOiAgdW5yZWNvZ25pemVkIHBhcmFtZXRlciAibm90X2V4aXN0aW5nX29wdGlvbiIKK0VS Uk9SOiAgdW5yZWNvZ25pemVkIHBhcmFtZXRlciAidG9hc3Qubm90X2V4aXN0aW5nX29wdGlv biIKYGBgCgpHZW5lcmFsIGNvbmNlcHRzIG9mIHRoZSBuZXcgZW5naW5lOgoKLSBgb3B0aW9u X3NwZWNgIGlzIGEgQy1zdHJ1Y3R1cmUgdGhhdCBjb21wbGV0ZWx5IGRlc2NyaWJlcyBzaW5n bGUgb3B0aW9uLCBob3cgaXQKICBzaG91bGQgYmUgcGFyc2VkLCB2YWxpZGF0ZWQgYW5kIHN0 b3JlZDogbmFtZSwgdHlwZSwgYWNjZXB0YWJsZSB2YWx1ZXMsIG9mZnNldAogIGluIGJ5dGVh IHJlcHJlc2VudGF0aW9uLCBwb3N0dmFsaWRhdGUgY2FsbCBiYWNrLCBldGMuIFdlIGhhdmUg YG9wdGlvbl9zcGVjXypgCiAgZm9yIGVhY2ggb3B0aW9uIHR5cGUuCi0gYG9wdGlvbnNfc3Bl Y19zZXRgIGlzIGEgc2V0IG9mIGBvcHRpb25fc3BlY2BzIHRoYXQgYXJlIGF2YWlsYWJsZSBm b3IgY2VydGFpbgogIGNvbnRleHQgKGUuZy4gZm9yIGNlcnRhaW4gQU0gcmVsb3B0aW9ucyku IEl0IGlzIGEgbGlzdCBvZiBvcHRpb25fc3BlY2BzIHBsdXMgYQogIGNhbGxiYWNrIGZvciBv dmVyYWxsIHZhbGlkYXRpb24gKGUuZy4gbWFrZSBzdXJlICBvcHRpb25BIDwgb3B0aW9uQikK LSBUaGVyZSBhcmUgZm91ciByZXByZXNlbnRhdGlvbnMgb2Ygb3B0aW9ucy4gVGhlIHdheSB0 aGV5IGNhbWUgZnJvbSBTUUwgcGFyc2VyCiAgKGRlZkxpc3QpLCB0aGUgd2F5IHRoZXkgYXJl IHN0b3JlZCBpbiBEQiAoVEVYVFtdKSwgdGhlIGJpbmFyeSByZXByZXNlbnRhdGlvbgogIHRo YXQgaXMgdXNlZCBieSBvdXRlciBjb2RlIChieXRlYSksIGFuZCBpbnRlcm5hbCByZXByZXNl bnRhdGlvbiB0aGF0IGlzIHVzZWQKICBieSBvcHRpb24gZW5naW5lIHdoaWxlIHBhcnNpbmcg YW5kIHZhbGlkYXRpbmcgb3B0aW9ucyAoT3B0aW9uIFZhbHVlIExpc3QpCi0gVGhlcmUgYXJl IGZ1bmN0aW9ucyB0byBjb252ZXJ0IG9wdGlvbnMgZnJvbSBvbmUgcmVwcmVzZW50YXRpb24g dG8gYW5vdGhlcgogIChwb3NzaWJseSB3aXRoIHZhbGlkYXRpb24gaWYgYXBwbGljYWJsZSk6 IGBvcHRpb25zVGV4dEFycmF5VG9EZWZMaXN0YCwKICBgb3B0aW9uc0RlZkxpc3RUb1RleHRB cnJheWAsIGBvcHRpb25zVGV4dEFycmF5VG9CeXRlYWAgYW5kIG90aGVycy4KLSBUaGVyZSBh cmUgZnVuY3Rpb25zIGZvciBkZWZpbmluZyBgb3B0aW9uX3NwZWNfc2V0YDogYGFsbG9jYXRl T3B0aW9uc1NwZWNTZXRgLAogIGBvcHRpb25zU3BlY1NldEFkZEJvb2xgLCBgb3B0aW9uc1Nw ZWNTZXRBZGRJbnRgLCBldGMuCgpPdXRlciBjb2RlLCB0aGF0IHdvdWxkIGxpa2UgdG8gdXNl IG9wdGlvbiBlbmdpbmUsIHNob3VsZCBkZWZpbmUgaXQncyBvd24KYG9wdGlvbl9zcGVjX3Nl dGAsIGltcGxlbWVudCBnZXR0aW5nIG9wdGlvbnMgZnJvbSBTUUwgcGFyc2VyLCBnZXR0aW5n IGFuZApwdXR0aW5nIHRoZW0gdG8gREIgc3RvcmFnZSwgcGFzc2luZyBiaW5hcnkgcmVwcmVz ZW50YXRpb24gb2YgdGhlIG9wdGlvbiB0byB0aGUKY29kZSB0aGF0IHdvdWxkIGFjdHVhbGx5 IHVzZSB0aGVtLiBGb3IgcGFyc2luZywgdmFsaWRhdGluZyBhbmQgY29udmVydGluZwpvcHRp b25zIGZyb20gb25lIHJlcHJlc2VudGF0aW9uIHRvIGFub3RoZXIsIG91dGVyIGNvZGUgc2hv dWxkIHVzZSBmdW5jdGlvbnMKZnJvbSBvcHRpb25zIGVuZ2luZSBmdW5jdGlvbiBzZXQuIEVh Y2ggZnVuY3Rpb24gd2lsbCB1c2UgaW5mb3JtYXRpb24gZnJvbQpgb3B0aW9uX3NwZWNfc2V0 YCB0byBkZXRlcm1pbmF0ZSB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZSBhbmQgaG93IGV4 YWN0bHkgdGhleQpzaG91bGQgYmUgcGFyc2VkIGFuZCB2YWxpZGF0ZWQuCgpUaGlzIGlzIG9u bHkgYSBzdGFydCBvZiBvcHRpb24gY29kZSByZXdvcmtpbmcuIEZ1cnRoZXIgaW1wcm92ZW1l bnRzIGxpc3RlZAphYm92ZSBhbmQgb3RoZXIgc3VnZ2VzdGlvbiB3aWxsIGZvbGxvdy4KLS0t CiBjb250cmliL2Jsb29tL2Jsb29tLmggICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA0 ICstCiBjb250cmliL2Jsb29tL2JsdXRpbHMuYyAgICAgICAgICAgICAgICAgICAgICAgfCAg MTAyICstCiBjb250cmliL2RibGluay9kYmxpbmsuYyAgICAgICAgICAgICAgICAgICAgICAg fCAgICAyICstCiBjb250cmliL2ZpbGVfZmR3L2ZpbGVfZmR3LmMgICAgICAgICAgICAgICAg ICAgfCAgICAyICstCiBjb250cmliL3Bvc3RncmVzX2Zkdy9vcHRpb24uYyAgICAgICAgICAg ICAgICAgfCAgICAyICstCiBjb250cmliL3Rlc3RfZGVjb2RpbmcvZXhwZWN0ZWQvdHdvcGhh c2Uub3V0ICAgfCAgICAzICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMgICAg ICAgICAgICAgICAgfCAgIDQ3ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL01ha2Vm aWxlICAgICAgICAgICAgfCAgICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vbWVz b24uYnVpbGQgICAgICAgICB8ICAgIDEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9v cHRpb25zLmMgICAgICAgICAgIHwgMTM2NiArKysrKysrKysrCiBzcmMvYmFja2VuZC9hY2Nl c3MvY29tbW9uL3JlbG9wdGlvbnMuYyAgICAgICAgfCAyMjM0ICsrKystLS0tLS0tLS0tLS0t CiBzcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYyAgICAgICAgICAgICAgfCAgIDQ2 ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMgICAgICAgICAgICAgICAgfCAg ICAyICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0dXRpbC5jICAgICAgICAgICAg fCAgIDUyICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMgICAgICAgICAgICAg ICAgfCAgICAyICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNodXRpbC5jICAgICAg ICAgICAgfCAgIDM0ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jICAg ICAgICAgICAgfCAgIDM1ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxz LmMgICAgICAgICAgfCAgIDE5ICstCiBzcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0 aWxzLmMgICAgICAgICAgfCAgIDQxICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVh cy5jICAgICAgICAgICAgICAgfCAgIDExICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9mb3Jl aWduY21kcy5jICAgICAgICAgICAgfCAgICAyICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9p bmRleGNtZHMuYyAgICAgICAgICAgICAgfCAgIDIyICstCiBzcmMvYmFja2VuZC9jb21tYW5k cy90YWJsZWNtZHMuYyAgICAgICAgICAgICAgfCAgMTE3ICstCiBzcmMvYmFja2VuZC9jb21t YW5kcy90YWJsZXNwYWNlLmMgICAgICAgICAgICAgfCAgIDE2ICstCiBzcmMvYmFja2VuZC9m b3JlaWduL2ZvcmVpZ24uYyAgICAgICAgICAgICAgICAgfCAgIDE0ICstCiBzcmMvYmFja2Vu ZC9wYXJzZXIvcGFyc2VfdXRpbGNtZC5jICAgICAgICAgICAgfCAgICA0ICstCiBzcmMvYmFj a2VuZC90Y29wL3V0aWxpdHkuYyAgICAgICAgICAgICAgICAgICAgfCAgIDI5ICstCiBzcmMv YmFja2VuZC91dGlscy9jYWNoZS9hdHRvcHRjYWNoZS5jICAgICAgICAgfCAgICA0ICstCiBz cmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jICAgICAgICAgICAgfCAgICA4ICst CiBzcmMvYmFja2VuZC91dGlscy9jYWNoZS9zcGNjYWNoZS5jICAgICAgICAgICAgfCAgICAz ICstCiBzcmMvYmluL3BnX2Jhc2ViYWNrdXAvc3RyZWFtdXRpbC5jICAgICAgICAgICAgfCAg ICAyICstCiBzcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaCAgICAgICAgICAgICAgICAgICAg fCAgICA5ICstCiBzcmMvaW5jbHVkZS9hY2Nlc3MvYnJpbi5oICAgICAgICAgICAgICAgICAg ICAgfCAgICAyICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy9icmluX2ludGVybmFsLmggICAgICAg ICAgICB8ICAgIDIgKwogc3JjL2luY2x1ZGUvYWNjZXNzL2dpbl9wcml2YXRlLmggICAgICAg ICAgICAgIHwgICAgMSArCiBzcmMvaW5jbHVkZS9hY2Nlc3MvZ2lzdF9wcml2YXRlLmggICAg ICAgICAgICAgfCAgICA0ICstCiBzcmMvaW5jbHVkZS9hY2Nlc3MvaGFzaC5oICAgICAgICAg ICAgICAgICAgICAgfCAgICAyICstCiBzcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmggICAg ICAgICAgICAgICAgICAgfCAgICAyICstCiBzcmMvaW5jbHVkZS9hY2Nlc3Mvb3B0aW9ucy5o ICAgICAgICAgICAgICAgICAgfCAgMjYyICsrCiBzcmMvaW5jbHVkZS9hY2Nlc3MvcmVsb3B0 aW9ucy5oICAgICAgICAgICAgICAgfCAgMjA1ICstCiBzcmMvaW5jbHVkZS9hY2Nlc3Mvc3Bn aXN0LmggICAgICAgICAgICAgICAgICAgfCAgICAzIC0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9z cGdpc3RfcHJpdmF0ZS5oICAgICAgICAgICB8ICAgIDEgKwogc3JjL2luY2x1ZGUvY29tbWFu ZHMvdGFibGVjbWRzLmggICAgICAgICAgICAgIHwgICAgMiArLQogLi4uL21vZHVsZXMvZHVt bXlfaW5kZXhfYW0vZHVtbXlfaW5kZXhfYW0uYyAgIHwgIDE0OCArLQogc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9yZWxvcHRpb25zLm91dCAgICAgIHwgICAxMyArLQogc3JjL3Rlc3Qv cmVncmVzcy9zcWwvcmVsb3B0aW9ucy5zcWwgICAgICAgICAgIHwgICAgNyArCiBzcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAgIDI4ICstCiA0NyBm aWxlcyBjaGFuZ2VkLCAyNTkyIGluc2VydGlvbnMoKyksIDIzMjYgZGVsZXRpb25zKC0pCiBj cmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9vcHRpb25zLmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS9hY2Nlc3Mvb3B0aW9ucy5oCgpkaWZm IC0tZ2l0IGEvY29udHJpYi9ibG9vbS9ibG9vbS5oIGIvY29udHJpYi9ibG9vbS9ibG9vbS5o CmluZGV4IDMzMDgxMWVjNjA4Li5mMTM1MzVhZjlmZiAxMDA2NDQKLS0tIGEvY29udHJpYi9i bG9vbS9ibG9vbS5oCisrKyBiL2NvbnRyaWIvYmxvb20vYmxvb20uaApAQCAtMTcsNiArMTcs NyBAQAogI2luY2x1ZGUgImFjY2Vzcy9nZW5lcmljX3hsb2cuaCIKICNpbmNsdWRlICJhY2Nl c3MvaXR1cC5oIgogI2luY2x1ZGUgImFjY2Vzcy94bG9nLmgiCisjaW5jbHVkZSAiYWNjZXNz L29wdGlvbnMuaCIKICNpbmNsdWRlICJmbWdyLmgiCiAjaW5jbHVkZSAibm9kZXMvcGF0aG5v ZGVzLmgiCiAKQEAgLTIwNiw3ICsyMDcsOCBAQCBleHRlcm4gSW5kZXhCdWxrRGVsZXRlUmVz dWx0ICpibGJ1bGtkZWxldGUoSW5kZXhWYWN1dW1JbmZvICppbmZvLAogCQkJCQkJCQkJCSAg IHZvaWQgKmNhbGxiYWNrX3N0YXRlKTsKIGV4dGVybiBJbmRleEJ1bGtEZWxldGVSZXN1bHQg KmJsdmFjdXVtY2xlYW51cChJbmRleFZhY3V1bUluZm8gKmluZm8sCiAJCQkJCQkJCQkJCSAg SW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpzdGF0cyk7Ci1leHRlcm4gYnl0ZWEgKmJsb3B0aW9u cyhEYXR1bSByZWxvcHRpb25zLCBib29sIHZhbGlkYXRlKTsKK2V4dGVybiB2b2lkICpibHJl bG9wdF9zcGVjc2V0KHZvaWQpOworZXh0ZXJuIHZvaWQgYmxSZWxvcHRpb25Qb3N0cHJvY2Vz cyh2b2lkICosIGJvb2wgdmFsaWRhdGUpOwogZXh0ZXJuIHZvaWQgYmxjb3N0ZXN0aW1hdGUo UGxhbm5lckluZm8gKnJvb3QsIEluZGV4UGF0aCAqcGF0aCwKIAkJCQkJCSAgIGRvdWJsZSBs b29wX2NvdW50LCBDb3N0ICppbmRleFN0YXJ0dXBDb3N0LAogCQkJCQkJICAgQ29zdCAqaW5k ZXhUb3RhbENvc3QsIFNlbGVjdGl2aXR5ICppbmRleFNlbGVjdGl2aXR5LApkaWZmIC0tZ2l0 IGEvY29udHJpYi9ibG9vbS9ibHV0aWxzLmMgYi9jb250cmliL2Jsb29tL2JsdXRpbHMuYwpp bmRleCA0ODMwY2IzZmVlNi4uN2UyYzI4MWI4ZDEgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYmxv b20vYmx1dGlscy5jCisrKyBiL2NvbnRyaWIvYmxvb20vYmx1dGlscy5jCkBAIC0xNSw3ICsx NSw3IEBACiAKICNpbmNsdWRlICJhY2Nlc3MvYW1hcGkuaCIKICNpbmNsdWRlICJhY2Nlc3Mv Z2VuZXJpY194bG9nLmgiCi0jaW5jbHVkZSAiYWNjZXNzL3JlbG9wdGlvbnMuaCIKKyNpbmNs dWRlICJhY2Nlc3Mvb3B0aW9ucy5oIgogI2luY2x1ZGUgImJsb29tLmgiCiAjaW5jbHVkZSAi Y2F0YWxvZy9pbmRleC5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3ZhY3V1bS5oIgpAQCAtMzQs NTIgKzM0LDEyIEBACiAKIFBHX0ZVTkNUSU9OX0lORk9fVjEoYmxoYW5kbGVyKTsKIAotLyog S2luZCBvZiByZWxhdGlvbiBvcHRpb25zIGZvciBibG9vbSBpbmRleCAqLwotc3RhdGljIHJl bG9wdF9raW5kIGJsX3JlbG9wdF9raW5kOwotCi0vKiBwYXJzZSB0YWJsZSBmb3IgZmlsbFJl bE9wdGlvbnMgKi8KLXN0YXRpYyByZWxvcHRfcGFyc2VfZWx0IGJsX3JlbG9wdF90YWJbSU5E RVhfTUFYX0tFWVMgKyAxXTsKKy8qIENhdGFsb2cgb2YgcmVsYXRpb24gb3B0aW9ucyBmb3Ig Ymxvb20gaW5kZXggKi8KK3N0YXRpYyBvcHRpb25zX3NwZWNfc2V0ICpibF9yZWxvcHRfc3Bl Y3NldDsKIAogc3RhdGljIGludDMyIG15UmFuZCh2b2lkKTsKIHN0YXRpYyB2b2lkIG15U3Jh bmQodWludDMyIHNlZWQpOwogCi0vKgotICogTW9kdWxlIGluaXRpYWxpemUgZnVuY3Rpb246 IGluaXRpYWxpemUgaW5mbyBhYm91dCBCbG9vbSByZWxhdGlvbiBvcHRpb25zLgotICoKLSAq IE5vdGU6IGtlZXAgdGhpcyBpbiBzeW5jIHdpdGggbWFrZURlZmF1bHRCbG9vbU9wdGlvbnMo KS4KLSAqLwotdm9pZAotX1BHX2luaXQodm9pZCkKLXsKLQlpbnQJCQlpOwotCWNoYXIJCWJ1 ZlsxNl07Ci0KLQlibF9yZWxvcHRfa2luZCA9IGFkZF9yZWxvcHRpb25fa2luZCgpOwotCi0J LyogT3B0aW9uIGZvciBsZW5ndGggb2Ygc2lnbmF0dXJlICovCi0JYWRkX2ludF9yZWxvcHRp b24oYmxfcmVsb3B0X2tpbmQsICJsZW5ndGgiLAotCQkJCQkgICJMZW5ndGggb2Ygc2lnbmF0 dXJlIGluIGJpdHMiLAotCQkJCQkgIERFRkFVTFRfQkxPT01fTEVOR1RILCAxLCBNQVhfQkxP T01fTEVOR1RILAotCQkJCQkgIEFjY2Vzc0V4Y2x1c2l2ZUxvY2spOwotCWJsX3JlbG9wdF90 YWJbMF0ub3B0bmFtZSA9ICJsZW5ndGgiOwotCWJsX3JlbG9wdF90YWJbMF0ub3B0dHlwZSA9 IFJFTE9QVF9UWVBFX0lOVDsKLQlibF9yZWxvcHRfdGFiWzBdLm9mZnNldCA9IG9mZnNldG9m KEJsb29tT3B0aW9ucywgYmxvb21MZW5ndGgpOwotCi0JLyogTnVtYmVyIG9mIGJpdHMgZm9y IGVhY2ggcG9zc2libGUgaW5kZXggY29sdW1uOiBjb2wxLCBjb2wyLCAuLi4gKi8KLQlmb3Ig KGkgPSAwOyBpIDwgSU5ERVhfTUFYX0tFWVM7IGkrKykKLQl7Ci0JCXNucHJpbnRmKGJ1Ziwg c2l6ZW9mKGJ1ZiksICJjb2wlZCIsIGkgKyAxKTsKLQkJYWRkX2ludF9yZWxvcHRpb24oYmxf cmVsb3B0X2tpbmQsIGJ1ZiwKLQkJCQkJCSAgIk51bWJlciBvZiBiaXRzIGdlbmVyYXRlZCBm b3IgZWFjaCBpbmRleCBjb2x1bW4iLAotCQkJCQkJICBERUZBVUxUX0JMT09NX0JJVFMsIDEs IE1BWF9CTE9PTV9CSVRTLAotCQkJCQkJICBBY2Nlc3NFeGNsdXNpdmVMb2NrKTsKLQkJYmxf cmVsb3B0X3RhYltpICsgMV0ub3B0bmFtZSA9IE1lbW9yeUNvbnRleHRTdHJkdXAoVG9wTWVt b3J5Q29udGV4dCwKLQkJCQkJCQkJCQkJCQkJICAgYnVmKTsKLQkJYmxfcmVsb3B0X3RhYltp ICsgMV0ub3B0dHlwZSA9IFJFTE9QVF9UWVBFX0lOVDsKLQkJYmxfcmVsb3B0X3RhYltpICsg MV0ub2Zmc2V0ID0gb2Zmc2V0b2YoQmxvb21PcHRpb25zLCBiaXRTaXplWzBdKSArIHNpemVv ZihpbnQpICogaTsKLQl9Ci19Ci0KIC8qCiAgKiBDb25zdHJ1Y3QgYSBkZWZhdWx0IHNldCBv ZiBCbG9vbSBvcHRpb25zLgogICovCkBAIC0xMzYsNyArOTYsNyBAQCBibGhhbmRsZXIoUEdf RlVOQ1RJT05fQVJHUykKIAlhbXJvdXRpbmUtPmFtdmFjdXVtY2xlYW51cCA9IGJsdmFjdXVt Y2xlYW51cDsKIAlhbXJvdXRpbmUtPmFtY2FucmV0dXJuID0gTlVMTDsKIAlhbXJvdXRpbmUt PmFtY29zdGVzdGltYXRlID0gYmxjb3N0ZXN0aW1hdGU7Ci0JYW1yb3V0aW5lLT5hbW9wdGlv bnMgPSBibG9wdGlvbnM7CisJYW1yb3V0aW5lLT5hbXJlbG9wdHNwZWNzZXQgPSBibHJlbG9w dF9zcGVjc2V0OwogCWFtcm91dGluZS0+YW1wcm9wZXJ0eSA9IE5VTEw7CiAJYW1yb3V0aW5l LT5hbWJ1aWxkcGhhc2VuYW1lID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtdmFsaWRhdGUgPSBi bHZhbGlkYXRlOwpAQCAtMTU1LDYgKzExNSwxNSBAQCBibGhhbmRsZXIoUEdfRlVOQ1RJT05f QVJHUykKIAlQR19SRVRVUk5fUE9JTlRFUihhbXJvdXRpbmUpOwogfQogCit2b2lkCitibFJl bG9wdGlvblBvc3Rwcm9jZXNzKHZvaWQgKmRhdGEsIGJvb2wgdmFsaWRhdGUpCit7CisJQmxv b21PcHRpb25zICpvcHRzID0gKEJsb29tT3B0aW9ucyAqKSBkYXRhOworCS8qIENvbnZlcnQg c2lnbmF0dXJlIGxlbmd0aCBmcm9tICMgb2YgYml0cyB0byAjIHRvIHdvcmRzLCByb3VuZGlu ZyB1cCAqLworCW9wdHMtPmJsb29tTGVuZ3RoID0gKG9wdHMtPmJsb29tTGVuZ3RoICsgU0lH TldPUkRCSVRTIC0gMSkgLyBTSUdOV09SREJJVFM7Cit9CisKKwogLyoKICAqIEZpbGwgQmxv b21TdGF0ZSBzdHJ1Y3R1cmUgZm9yIHBhcnRpY3VsYXIgaW5kZXguCiAgKi8KQEAgLTQ2OSwy NCArNDM4LDM3IEBAIEJsb29tSW5pdE1ldGFwYWdlKFJlbGF0aW9uIGluZGV4LCBGb3JrTnVt YmVyIGZvcmtudW0pCiAJVW5sb2NrUmVsZWFzZUJ1ZmZlcihtZXRhQnVmZmVyKTsKIH0KIAot LyoKLSAqIFBhcnNlIHJlbG9wdGlvbnMgZm9yIGJsb29tIGluZGV4LCBwcm9kdWNpbmcgYSBC bG9vbU9wdGlvbnMgc3RydWN0LgotICovCi1ieXRlYSAqCi1ibG9wdGlvbnMoRGF0dW0gcmVs b3B0aW9ucywgYm9vbCB2YWxpZGF0ZSkKK3ZvaWQgKgorYmxyZWxvcHRfc3BlY3NldCh2b2lk KQogewotCUJsb29tT3B0aW9ucyAqcmRvcHRzOworCWludAkJCWk7CisJY2hhcgkJYnVmWzE2 XTsKIAotCS8qIFBhcnNlIHRoZSB1c2VyLWdpdmVuIHJlbG9wdGlvbnMgKi8KLQlyZG9wdHMg PSAoQmxvb21PcHRpb25zICopIGJ1aWxkX3JlbG9wdGlvbnMocmVsb3B0aW9ucywgdmFsaWRh dGUsCi0JCQkJCQkJCQkJCSAgIGJsX3JlbG9wdF9raW5kLAotCQkJCQkJCQkJCQkgICBzaXpl b2YoQmxvb21PcHRpb25zKSwKLQkJCQkJCQkJCQkJICAgYmxfcmVsb3B0X3RhYiwKLQkJCQkJ CQkJCQkJICAgbGVuZ3Rob2YoYmxfcmVsb3B0X3RhYikpOworCWlmIChibF9yZWxvcHRfc3Bl Y3NldCkKKwkJcmV0dXJuIGJsX3JlbG9wdF9zcGVjc2V0OwogCi0JLyogQ29udmVydCBzaWdu YXR1cmUgbGVuZ3RoIGZyb20gIyBvZiBiaXRzIHRvICMgdG8gd29yZHMsIHJvdW5kaW5nIHVw ICovCi0JaWYgKHJkb3B0cykKLQkJcmRvcHRzLT5ibG9vbUxlbmd0aCA9IChyZG9wdHMtPmJs b29tTGVuZ3RoICsgU0lHTldPUkRCSVRTIC0gMSkgLyBTSUdOV09SREJJVFM7CiAKLQlyZXR1 cm4gKGJ5dGVhICopIHJkb3B0czsKKwlibF9yZWxvcHRfc3BlY3NldCA9IGFsbG9jYXRlT3B0 aW9uc1NwZWNTZXQoTlVMTCwKKwkJCQkJCQkJCQkJICAgc2l6ZW9mKEJsb29tT3B0aW9ucyks IGZhbHNlLCBJTkRFWF9NQVhfS0VZUyArIDEpOworCWJsX3JlbG9wdF9zcGVjc2V0LT5wb3N0 cHJvY2Vzc19mdW4gPSBibFJlbG9wdGlvblBvc3Rwcm9jZXNzOworCisJb3B0aW9uc1NwZWNT ZXRBZGRJbnQoYmxfcmVsb3B0X3NwZWNzZXQsICJsZW5ndGgiLAorCQkJCQkJICJMZW5ndGgg b2Ygc2lnbmF0dXJlIGluIGJpdHMiLAorCQkJCQkJIE5vTG9jaywJLyogTm8gbG9jayBhcyBm YXIgYXMgQUxURVIgaXMgbm90CisJCQkJCQkJCQkgKiBlZmZlY3RpdmUgKi8KKwkJCQkJCSBv ZmZzZXRvZihCbG9vbU9wdGlvbnMsIGJsb29tTGVuZ3RoKSwgTlVMTCwKKwkJCQkJCSBERUZB VUxUX0JMT09NX0xFTkdUSCwgMSwgTUFYX0JMT09NX0xFTkdUSCk7CisKKwkvKiBOdW1iZXIg b2YgYml0cyBmb3IgZWFjaCBwb3NzaWJsZSBpbmRleCBjb2x1bW46IGNvbDEsIGNvbDIsIC4u LiAqLworCWZvciAoaSA9IDA7IGkgPCBJTkRFWF9NQVhfS0VZUzsgaSsrKQorCXsKKwkJc25w cmludGYoYnVmLCAxNiwgImNvbCVkIiwgaSArIDEpOworCQlvcHRpb25zU3BlY1NldEFkZElu dChibF9yZWxvcHRfc3BlY3NldCwgYnVmLAorCQkJCQkJCSAiTnVtYmVyIG9mIGJpdHMgZm9y IGNvcnJlc3BvbmRpbmcgY29sdW1uIiwKKwkJCQkJCQkgTm9Mb2NrLAkvKiBObyBsb2NrIGFz IGZhciBhcyBBTFRFUiBpcyBub3QKKwkJCQkJCQkJCQkgKiBlZmZlY3RpdmUgKi8KKwkJCQkJ CQkgb2Zmc2V0b2YoQmxvb21PcHRpb25zLCBiaXRTaXplW2ldKSwgTlVMTCwKKwkJCQkJCQkg REVGQVVMVF9CTE9PTV9CSVRTLCAxLCBNQVhfQkxPT01fQklUUyk7CisJfQorCXJldHVybiBi bF9yZWxvcHRfc3BlY3NldDsKIH0KZGlmZiAtLWdpdCBhL2NvbnRyaWIvZGJsaW5rL2RibGlu ay5jIGIvY29udHJpYi9kYmxpbmsvZGJsaW5rLmMKaW5kZXggMjdiZDBkMzFmZGYuLmRmN2Qx Mjk5MDk4IDEwMDY0NAotLS0gYS9jb250cmliL2RibGluay9kYmxpbmsuYworKysgYi9jb250 cmliL2RibGluay9kYmxpbmsuYwpAQCAtMTkzNSw3ICsxOTM1LDcgQEAgUEdfRlVOQ1RJT05f SU5GT19WMShkYmxpbmtfZmR3X3ZhbGlkYXRvcik7CiBEYXR1bQogZGJsaW5rX2Zkd192YWxp ZGF0b3IoUEdfRlVOQ1RJT05fQVJHUykKIHsKLQlMaXN0CSAgICpvcHRpb25zX2xpc3QgPSB1 bnRyYW5zZm9ybVJlbE9wdGlvbnMoUEdfR0VUQVJHX0RBVFVNKDApKTsKKwlMaXN0CSAgICpv cHRpb25zX2xpc3QgPSBvcHRpb25zVGV4dEFycmF5VG9EZWZMaXN0KFBHX0dFVEFSR19EQVRV TSgwKSk7CiAJT2lkCQkJY29udGV4dCA9IFBHX0dFVEFSR19PSUQoMSk7CiAJTGlzdENlbGwg ICAqY2VsbDsKIApkaWZmIC0tZ2l0IGEvY29udHJpYi9maWxlX2Zkdy9maWxlX2Zkdy5jIGIv Y29udHJpYi9maWxlX2Zkdy9maWxlX2Zkdy5jCmluZGV4IDIxODliZThhM2MwLi5mNjJiNGM4 ZDExYiAxMDA2NDQKLS0tIGEvY29udHJpYi9maWxlX2Zkdy9maWxlX2Zkdy5jCisrKyBiL2Nv bnRyaWIvZmlsZV9mZHcvZmlsZV9mZHcuYwpAQCAtMTk3LDcgKzE5Nyw3IEBAIGZpbGVfZmR3 X2hhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIERhdHVtCiBmaWxlX2Zkd192YWxpZGF0b3Io UEdfRlVOQ1RJT05fQVJHUykKIHsKLQlMaXN0CSAgICpvcHRpb25zX2xpc3QgPSB1bnRyYW5z Zm9ybVJlbE9wdGlvbnMoUEdfR0VUQVJHX0RBVFVNKDApKTsKKwlMaXN0CSAgICpvcHRpb25z X2xpc3QgPSBvcHRpb25zVGV4dEFycmF5VG9EZWZMaXN0KFBHX0dFVEFSR19EQVRVTSgwKSk7 CiAJT2lkCQkJY2F0YWxvZyA9IFBHX0dFVEFSR19PSUQoMSk7CiAJY2hhcgkgICAqZmlsZW5h bWUgPSBOVUxMOwogCURlZkVsZW0gICAgKmZvcmNlX25vdF9udWxsID0gTlVMTDsKZGlmZiAt LWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L29wdGlvbi5jIGIvY29udHJpYi9wb3N0Z3Jl c19mZHcvb3B0aW9uLmMKaW5kZXggOGM4MjJmNGVmOTAuLjA3ZjNiODJiOGY1IDEwMDY0NAot LS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9vcHRpb24uYworKysgYi9jb250cmliL3Bvc3Rn cmVzX2Zkdy9vcHRpb24uYwpAQCAtNzEsNyArNzEsNyBAQCBQR19GVU5DVElPTl9JTkZPX1Yx KHBvc3RncmVzX2Zkd192YWxpZGF0b3IpOwogRGF0dW0KIHBvc3RncmVzX2Zkd192YWxpZGF0 b3IoUEdfRlVOQ1RJT05fQVJHUykKIHsKLQlMaXN0CSAgICpvcHRpb25zX2xpc3QgPSB1bnRy YW5zZm9ybVJlbE9wdGlvbnMoUEdfR0VUQVJHX0RBVFVNKDApKTsKKwlMaXN0CSAgICpvcHRp b25zX2xpc3QgPSBvcHRpb25zVGV4dEFycmF5VG9EZWZMaXN0KFBHX0dFVEFSR19EQVRVTSgw KSk7CiAJT2lkCQkJY2F0YWxvZyA9IFBHX0dFVEFSR19PSUQoMSk7CiAJTGlzdENlbGwgICAq Y2VsbDsKIApkaWZmIC0tZ2l0IGEvY29udHJpYi90ZXN0X2RlY29kaW5nL2V4cGVjdGVkL3R3 b3BoYXNlLm91dCBiL2NvbnRyaWIvdGVzdF9kZWNvZGluZy9leHBlY3RlZC90d29waGFzZS5v dXQKaW5kZXggNTE3ZjIwYmMzN2UuLjcxNTgxZmJhMzQ5IDEwMDY0NAotLS0gYS9jb250cmli L3Rlc3RfZGVjb2RpbmcvZXhwZWN0ZWQvdHdvcGhhc2Uub3V0CisrKyBiL2NvbnRyaWIvdGVz dF9kZWNvZGluZy9leHBlY3RlZC90d29waGFzZS5vdXQKQEAgLTY5LDkgKzY5LDEwIEBAIFdI RVJFIGxvY2t0eXBlID0gJ3JlbGF0aW9uJwogICBBTkQgcmVsYXRpb24gPSAndGVzdF9wcmVw YXJlZDEnOjpyZWdjbGFzczsKICAgICByZWxhdGlvbiAgICAgfCBsb2NrdHlwZSB8ICAgICAg ICBtb2RlICAgICAgICAgCiAtLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIHRlc3RfcHJlcGFyZWRfMSB8IHJlbGF0aW9uIHwgQWNjZXNzU2hh cmVMb2NrCiAgdGVzdF9wcmVwYXJlZF8xIHwgcmVsYXRpb24gfCBSb3dFeGNsdXNpdmVMb2Nr CiAgdGVzdF9wcmVwYXJlZF8xIHwgcmVsYXRpb24gfCBBY2Nlc3NFeGNsdXNpdmVMb2NrCi0o MiByb3dzKQorKDMgcm93cykKIAogLS0gVGhlIGluc2VydCBzaG91bGQgc2hvdyB0aGUgbmV3 bHkgYWx0ZXJlZCBjb2x1bW4gYnV0IG5vdCB0aGUgRERMLgogU0VMRUNUIGRhdGEgRlJPTSBw Z19sb2dpY2FsX3Nsb3RfZ2V0X2NoYW5nZXMoJ3JlZ3Jlc3Npb25fc2xvdCcsIE5VTEwsIE5V TEwsICdpbmNsdWRlLXhpZHMnLCAnMCcsICdza2lwLWVtcHR5LXhhY3RzJywgJzEnKTsKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9icmluL2JyaW4uYwppbmRleCA0ZjJkZmRkMTdiOS4uNDYzYzg3ZTEwZWMgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYworKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvYnJpbi9icmluLmMKQEAgLTIwLDcgKzIwLDYgQEAKICNpbmNsdWRlICJh Y2Nlc3MvYnJpbl9wYWdlb3BzLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2JyaW5feGxvZy5oIgog I2luY2x1ZGUgImFjY2Vzcy9yZWxhdGlvbi5oIgotI2luY2x1ZGUgImFjY2Vzcy9yZWxvcHRp b25zLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3JlbHNjYW4uaCIKICNpbmNsdWRlICJhY2Nlc3Mv dGFibGUuaCIKICNpbmNsdWRlICJhY2Nlc3MvdGFibGVhbS5oIgpAQCAtNDEsNyArNDAsNiBA QAogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgi CiAKLQogLyoKICAqIFdlIHVzZSBhIEJyaW5CdWlsZFN0YXRlIGR1cmluZyBpbml0aWFsIGNv bnN0cnVjdGlvbiBvZiBhIEJSSU4gaW5kZXguCiAgKiBUaGUgcnVubmluZyBzdGF0ZSBpcyBr ZXB0IGluIGEgQnJpbk1lbVR1cGxlLgpAQCAtMTM0LDcgKzEzMiw2IEBAIGJyaW5oYW5kbGVy KFBHX0ZVTkNUSU9OX0FSR1MpCiAJYW1yb3V0aW5lLT5hbXZhY3V1bWNsZWFudXAgPSBicmlu dmFjdXVtY2xlYW51cDsKIAlhbXJvdXRpbmUtPmFtY2FucmV0dXJuID0gTlVMTDsKIAlhbXJv dXRpbmUtPmFtY29zdGVzdGltYXRlID0gYnJpbmNvc3Rlc3RpbWF0ZTsKLQlhbXJvdXRpbmUt PmFtb3B0aW9ucyA9IGJyaW5vcHRpb25zOwogCWFtcm91dGluZS0+YW1wcm9wZXJ0eSA9IE5V TEw7CiAJYW1yb3V0aW5lLT5hbWJ1aWxkcGhhc2VuYW1lID0gTlVMTDsKIAlhbXJvdXRpbmUt PmFtdmFsaWRhdGUgPSBicmludmFsaWRhdGU7CkBAIC0xNDksNiArMTQ2LDcgQEAgYnJpbmhh bmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAlhbXJvdXRpbmUtPmFtZXN0aW1hdGVwYXJhbGxl bHNjYW4gPSBOVUxMOwogCWFtcm91dGluZS0+YW1pbml0cGFyYWxsZWxzY2FuID0gTlVMTDsK IAlhbXJvdXRpbmUtPmFtcGFyYWxsZWxyZXNjYW4gPSBOVUxMOworCWFtcm91dGluZS0+YW1y ZWxvcHRzcGVjc2V0ID0gYnJpbmdldHJlbG9wdHNwZWNzZXQ7CiAKIAlQR19SRVRVUk5fUE9J TlRFUihhbXJvdXRpbmUpOwogfQpAQCAtMTAzMiwyMyArMTAzMCw2IEBAIGJyaW52YWN1dW1j bGVhbnVwKEluZGV4VmFjdXVtSW5mbyAqaW5mbywgSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpz dGF0cykKIAlyZXR1cm4gc3RhdHM7CiB9CiAKLS8qCi0gKiByZWxvcHRpb25zIHByb2Nlc3Nv ciBmb3IgQlJJTiBpbmRleGVzCi0gKi8KLWJ5dGVhICoKLWJyaW5vcHRpb25zKERhdHVtIHJl bG9wdGlvbnMsIGJvb2wgdmFsaWRhdGUpCi17Ci0Jc3RhdGljIGNvbnN0IHJlbG9wdF9wYXJz ZV9lbHQgdGFiW10gPSB7Ci0JCXsicGFnZXNfcGVyX3JhbmdlIiwgUkVMT1BUX1RZUEVfSU5U LCBvZmZzZXRvZihCcmluT3B0aW9ucywgcGFnZXNQZXJSYW5nZSl9LAotCQl7ImF1dG9zdW1t YXJpemUiLCBSRUxPUFRfVFlQRV9CT09MLCBvZmZzZXRvZihCcmluT3B0aW9ucywgYXV0b3N1 bW1hcml6ZSl9Ci0JfTsKLQotCXJldHVybiAoYnl0ZWEgKikgYnVpbGRfcmVsb3B0aW9ucyhy ZWxvcHRpb25zLCB2YWxpZGF0ZSwKLQkJCQkJCQkJCSAgUkVMT1BUX0tJTkRfQlJJTiwKLQkJ CQkJCQkJCSAgc2l6ZW9mKEJyaW5PcHRpb25zKSwKLQkJCQkJCQkJCSAgdGFiLCBsZW5ndGhv Zih0YWIpKTsKLX0KLQogLyoKICAqIFNRTC1jYWxsYWJsZSBmdW5jdGlvbiB0byBzY2FuIHRo cm91Z2ggYW4gaW5kZXggYW5kIHN1bW1hcml6ZSBhbGwgcmFuZ2VzCiAgKiB0aGF0IGFyZSBu b3QgY3VycmVudGx5IHN1bW1hcml6ZWQuCkBAIC0xOTgyLDMgKzE5NjMsMjkgQEAgY2hlY2tf bnVsbF9rZXlzKEJyaW5WYWx1ZXMgKmJ2YWwsIFNjYW5LZXkgKm51bGxrZXlzLCBpbnQgbm51 bGxrZXlzKQogCiAJcmV0dXJuIHRydWU7CiB9CisKK3N0YXRpYyBvcHRpb25zX3NwZWNfc2V0 ICpicmluX3JlbG9wdF9zcGVjc2V0ID0gTlVMTDsKKwordm9pZCAqCiticmluZ2V0cmVsb3B0 c3BlY3NldCh2b2lkKQoreworCWlmIChicmluX3JlbG9wdF9zcGVjc2V0KQorCQlyZXR1cm4g YnJpbl9yZWxvcHRfc3BlY3NldDsKKwlicmluX3JlbG9wdF9zcGVjc2V0ID0gYWxsb2NhdGVP cHRpb25zU3BlY1NldChOVUxMLAorCQkJCQkJCQkJCQkJIHNpemVvZihCcmluT3B0aW9ucyks IGZhbHNlLCAyKTsKKworCW9wdGlvbnNTcGVjU2V0QWRkSW50KGJyaW5fcmVsb3B0X3NwZWNz ZXQsICJwYWdlc19wZXJfcmFuZ2UiLAorCQkJCQkJICJOdW1iZXIgb2YgcGFnZXMgdGhhdCBl YWNoIHBhZ2UgcmFuZ2UgY292ZXJzIGluIGEgQlJJTiBpbmRleCIsCisJCQkJCQkgTm9Mb2Nr LAkvKiBzaW5jZSBBTFRFUiBpcyBub3QgYWxsb3dlZCBubyBsb2NrCisJCQkJCQkJCQkgKiBu ZWVkZWQgKi8KKwkJCQkJCSBvZmZzZXRvZihCcmluT3B0aW9ucywgcGFnZXNQZXJSYW5nZSks IE5VTEwsCisJCQkJCQkgQlJJTl9ERUZBVUxUX1BBR0VTX1BFUl9SQU5HRSwKKwkJCQkJCSBC UklOX01JTl9QQUdFU19QRVJfUkFOR0UsCisJCQkJCQkgQlJJTl9NQVhfUEFHRVNfUEVSX1JB TkdFKTsKKwlvcHRpb25zU3BlY1NldEFkZEJvb2woYnJpbl9yZWxvcHRfc3BlY3NldCwgImF1 dG9zdW1tYXJpemUiLAorCQkJCQkJICAiRW5hYmxlcyBhdXRvbWF0aWMgc3VtbWFyaXphdGlv biBvbiB0aGlzIEJSSU4gaW5kZXgiLAorCQkJCQkJICBBY2Nlc3NFeGNsdXNpdmVMb2NrLAor CQkJCQkJICBvZmZzZXRvZihCcmluT3B0aW9ucywgYXV0b3N1bW1hcml6ZSksIE5VTEwsCisJ CQkJCQkgIGZhbHNlKTsKKwlyZXR1cm4gYnJpbl9yZWxvcHRfc3BlY3NldDsKK30KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vTWFrZWZpbGUgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvY29tbW9uL01ha2VmaWxlCmluZGV4IGI5YWZmMGNjZmRjLi43OGM5YzVhOGQy NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9NYWtlZmlsZQorKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL01ha2VmaWxlCkBAIC0xOCw2ICsxOCw3IEBA IE9CSlMgPSBcCiAJZGV0b2FzdC5vIFwKIAloZWFwdHVwbGUubyBcCiAJaW5kZXh0dXBsZS5v IFwKKwlvcHRpb25zLm8gXAogCXByaW50c2ltcGxlLm8gXAogCXByaW50dHVwLm8gXAogCXJl bGF0aW9uLm8gXApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9tZXNv bi5idWlsZCBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vbWVzb24uYnVpbGQKaW5kZXgg ZjVhYzE3YjQ5ODcuLmVmN2Q3NjE5ZWY2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3MvY29tbW9uL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24v bWVzb24uYnVpbGQKQEAgLTYsNiArNiw3IEBAIGJhY2tlbmRfc291cmNlcyArPSBmaWxlcygK ICAgJ2RldG9hc3QuYycsCiAgICdoZWFwdHVwbGUuYycsCiAgICdpbmRleHR1cGxlLmMnLAor ICAnb3B0aW9ucy5jJywKICAgJ3ByaW50c2ltcGxlLmMnLAogICAncHJpbnR0dXAuYycsCiAg ICdyZWxhdGlvbi5jJywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24v b3B0aW9ucy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9vcHRpb25zLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmM2MjZkZjM1MDVjCi0tLSAvZGV2 L251bGwKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9vcHRpb25zLmMKQEAgLTAs MCArMSwxMzY2IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBvcHRpb25zLmMK KyAqCSAgQW4gdW5pZm9ybSwgY29udGV4dC1mcmVlIEFQSSBmb3IgcHJvY2Vzc2luZyBuYW1l PXZhbHVlIG9wdGlvbnMuIFVzZWQKKyAqCSAgdG8gcHJvY2VzcyByZWxhdGlvbiBvcHRpb25z IChyZWxvcHRpb25zKSwgYXR0cmlidXRlIG9wdGlvbnMsIG9wY2xhc3MKKyAqCSAgb3B0aW9u cywgZXRjLgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIyLCBQb3N0 Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0 IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAq CisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1v bi9vcHRpb25zLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVk ZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImFjY2Vzcy9vcHRpb25zLmgiCisjaW5jbHVk ZSAiY2F0YWxvZy9wZ190eXBlLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZGVmcmVtLmgiCisj aW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMu aCIKKyNpbmNsdWRlICJ1dGlscy9ndWMuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5o IgorI2luY2x1ZGUgIm1iL3BnX3djaGFyLmgiCisKKworLyoKKyAqIE9QVElPTlMgU1BFQ0lG SUNBVElPTiBhbmQgT1BUSU9OIFNQRUNJRklDQVRJT04gU0VUCisgKgorICogRWFjaCBvcHRp b24gaXMgZGVmaW5lZCB2aWEgT3B0aW9uIFNwZWNpZmljYXRpb24gb2JqZWN0IChPcHRpb24g U3BlYykuCisgKiBPcHRpb24gU3BlYyBzaG91bGQgaGF2ZSBhbGwgaW5mb3JtYXRpb24gdGhh dCBpcyBuZWVkZWQgZm9yIHByb2Nlc3NpbmcKKyAqIChwYXJzaW5nLCB2YWxpZGF0aW5nLCBj b252ZXJ0aW5nKSBvZiBhIHNpbmdsZSBvcHRpb24uIEltcGxlbWVudGVkIHZpYSBzZXQgb2YK KyAqIG9wdGlvbl9zcGVjXyogc3RydWN0dXJlcy4KKyAqCisgKiBBIHNldCBvZiBPcHRpb24g U3BlY3MgKE9wdGlvbnMgU3BlYyBTZXQpLCBkZWZpbmVzIGFsbCBvcHRpb25zIGF2YWlsYWJs ZSBmb3IKKyAqIGNlcnRhaW4gb2JqZWN0IChjZXJ0YWluIHJlbGF0aW9uIGtpbmQgZm9yIGV4 YW1wbGUpLiBJdCBpcyBhIGxpc3Qgb2YKKyAqIE9wdGlvbnMgU3BlY3MsIHBsdXMgdmFsaWRh dGlvbiBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCB0byB2YWxpZGF0ZSB3aG9sZQorICog b3B0aW9uIHNldCwgaWYgbmVlZGVkLiBJbXBsZW1lbnRlZCB2aWEgb3B0aW9uc19zcGVjX3Nl dCBzdHJ1Y3R1cmUgYW5kIHNldCBvZgorICogb3B0aW9uc1NwZWNTZXRBZGQqIGZ1bmN0aW9u cyB0aGF0IGFyZSB1c2VkIGZvciBhZGRpbmcgT3B0aW9uIFNwZWNzIGl0ZW1zIHRvCisgKiBh IFNldC4KKyAqCisgKiBOT1RFOiB3ZSBjaG9vc2UgdGhlcm0gInNwZWNpZmljYXRpb24iIGlu c3RlYWQgb2YgImRlZmluaXRpb24iIGJlY2F1c2UgdGhlcm0KKyAqICJkZWZpbml0aW9uIiBp cyB1c2VkIGZvciBvYmplY3RzIHRoYXQgY2FtZSBmcm9tIHN5bnRheCBwYXJzZXIuIFNvIHRv IGF2b2lkCisgKiBjb25mdXNpb24gaGVyZSB3ZSBoYXZlIE9wdGlvbiBTcGVjaWZpY2F0aW9u cywgYW5kIGFsbCAiZGVmaW5pdGlvbnMiIGFyZSBmcm9tCisgKiBwYXJzZXIuCisgKi8KKwor LyoKKyAqIE9QVElPTiBWQUxVRVMgUkVQUkVTRU5UQVRJT05TCisgKgorICogT3B0aW9uIHZh bHVlcyB1c3VhbGx5IGNhbWUgZnJvbSBzeW50YXggcGFyc2VyIGluIGZvcm0gb2YgZGVmTGlz dCBvYmplY3QsCisgKiBzdG9yZWQgaW4gcGdfY2F0YWxvZyBhcyB0ZXh0IGFycmF5LCBhbmQg dXNlZCB3aGVuIHRoZXkgYXJlIHN0b3JlZCBpbiBtZW1vcnkKKyAqIGFzIEMtc3RydWN0dXJl LiBUaGVzZSBhcmUgZGlmZmVyZW50IG9wdGlvbiB2YWx1ZXMgcmVwcmVzZW50YXRpb25zLiBI ZXJlIGdvZXMKKyAqIGJyaWVmIGRlc2NyaXB0aW9uIG9mIGFsbCByZXByZXNlbnRhdGlvbnMg dXNlZCBpbiB0aGUgY29kZS4KKyAqCisgKiBWYWx1ZSBMaXN0CisgKgorICogVmFsdWUgTGlz dCBpcyBhbiBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiB0aGF0IGlzIHVzZWQgd2hpbGUgY29u dmVydGluZworICogb3B0aW9uIHZhbHVlcyBiZXR3ZWVuIGRpZmZlcmVudCByZXByZXNlbnRh dGlvbi4gVmFsdWUgTGlzdCBpdGVtIGlzIGNhbGxlZAorICogInBhcnNlZCIsIHdoZW4gVmFs dWUncyB2YWx1ZSBpcyBjb252ZXJ0ZWQgdG8gYSBwcm9wZXIgZGF0YSB0eXBlIGFuZAorICog dmFsaWRhdGVkLCBvciBpcyBjYWxsZWQgInVucGFyc2VkIiwgd2hlbiBWYWx1ZSdzIHZhbHVl IGlzIHN0b3JlZCBhcyByYXcKKyAqIHN0cmluZyB0aGF0IHdhcyBvYnRhaW5lZCBmcm9tIHRo ZSBzb3VyY2Ugd2l0aG91dCBhbnkgY2hlY2tzLiBJbiBjb252ZXJzaW9uCisgKiBmdW5jdGlv biBuYW1lcyBmaXJzdCBjYXNlIGlzIHJlZmVycmVkIGFzIFZhbHVlcywgc2Vjb25kIGNhc2Ug aXMgcmVmZXJyZWQgYXMKKyAqIFJhd1ZhbHVlcy4gVmFsdWUgTGlzdCBpcyBpbXBsZW1lbnRl ZCBhcyBMaXN0IG9mIG9wdGlvbl92YWx1ZSBDLXN0cnVjdHVyZXMuCisgKgorICogZGVmTGlz dAorICoKKyAqIE9wdGlvbnMgaW4gZm9ybSBvZiBkZWZpbml0aW9uIExpc3QgdGhhdCBjb21l cyBmcm9tIHN5bnRheCBwYXJzZXIuIChGb3IKKyAqIHJlbG9wdGlvbnMgaXQgaXMgYSBwYXJ0 IG9mIFNRTCBxdWVyeSB0aGF0IGdvZXMgYWZ0ZXIgV0lUSCwgU0VUIG9yIFJFU0VUCisgKiBr ZXl3b3JkcykuIENhbiBiZSBjb252ZXJ0ZWQgdG8gVmFsdWUgTGlzdCB1c2luZyBvcHRpb25z RGVmTGlzdFRvUmF3VmFsdWVzCisgKiBhbmQgY2FuIGJlIG9idGFpbmVkIGZyb20gVEVYVFtd IHZpYSBvcHRpb25zVGV4dEFycmF5VG9EZWZMaXN0IGZ1bmN0aW9ucy4KKyAqCisgKiBURVhU W10KKyAqCisgKiBPcHRpb25zIGluIGZvcm0gc3VpdGFibGUgZm9yIHN0b3JpZyBpbiBURVhU W10gZmllbGQgaW4gREIuIChFLmcuIHJlbG9wdGlvbnMKKyAqIGFyZSBzdG9yZXMgaW4gcGdf Y2F0YWxvZy5wZ19jbGFzcyB0YWJsZSBpbiByZWxvcHRpb25zIGZpZWxkKS4gQ2FuIGJlCisg KiBjb252ZXJ0ZWQgdG8gYW5kIGZyb20gVmFsdWUgTGlzdCB1c2luZyBvcHRpb25zVmFsdWVz VG9UZXh0QXJyYXkgYW5kCisgKiBvcHRpb25zVGV4dEFycmF5VG9SYXdWYWx1ZXMgZnVuY3Rp b25zLgorICoKKyAqIEJ5dGVhCisgKgorICogT3B0aW9uIGRhdGEgc3RvcmVkIGluIEMtc3Ry dWN0dXJlIHdpdGggdmFybGVuYSBoZWFkZXIgaW4gdGhlIGJlZ2lubmluZyBvZgorICogdGhl IHN0cnVjdHVyZS4gVGhpcyByZXByZXNlbnRhdGlvbiBpcyB1c2VkIHRvIHBhc3Mgb3B0aW9u IHZhbHVlcyB0byB0aGUgY29yZQorICogcG9zdGdyZXMuIEl0IGlzIGZhc3QgdG8gcmVhZCwg aXQgY2FuIGJlIGNhY2hlZCBhbmQgc28gb24uIEJ5dGVhCisgKiByZXByZXNlbnRhdGlvbiBj YW4gYmUgb2J0YWluZWQgZnJvbSBWYWxlIExpc3QgdXNpbmcgb3B0aW9uc1ZhbHVlc1RvQnl0 ZWEKKyAqIGZ1bmN0aW9uLCBhbmQgY2FuJ3QgYmUgY29udmVydGVkIGJhY2suCisgKi8KKwor LyoKKyAqIE9QVElPTiBTVFJJTkcgVkFMVUUgTk9USU9OCisgKgorICogSW1wb3J0YW50IHRo aW5nIGZvciBieXRlYSByZXByZXNlbnRhdGlvbiBpcyB0aGF0IGFsbCBkYXRhIHNob3VsZCBi ZSBzdG9yZWQKKyAqIGluIG9uZSBieXRlYSBjaHVuaywgaW5jbHVkaW5nIHZhbHVlcyBvZiB0 aGUgc3RyaW5nIG9wdGlvbnMuIFRoaXMgaXMgbmVlZGVkCisgKiBhcyAgKiBieXRlYSByZXBy ZXNlbnRhdGlvbiBpcyBjYWNoZWQsIGFuZCBjYW4gZnJlZWQsIG1vdmVkIG9yIHJlY3JlYXRl ZCBhZ2FpbgorICogd2l0aG91dCBhbnkgbm90aW9uLCBzbyBpdCBjYW4ndCBoYXZlIHBhcnRz IGFsbG9jYXRlZCBzZXBhcmF0ZWx5LgorICoKKyAqIFRodXMgbWVtb3J5IGNodW5rIGZvciBC eXRlYSBvcHRpb24gdmFsdWVzIHJlcHJlc2VudGF0aW9uIGlzIGRpdmlkZWQgaW50byB0d28K KyAqIHBhcnRzLiBGaXJzdCBnb2VzIGEgQy1zdHJ1Y3R1cmUgdGhhdCBzdG9yZXMgZml4ZWQg bGVuZ3RoIHZhbGVzLiBUaGVuIGdvZXMKKyAqIG1lbW9yeSBhcmVhIHJlc2VydmVkIGZvciBz dHJpbmcgdmFsdWVzLgorICoKKyAqIEZvciBzdHJpbmcgdmFsdWVzIEMtc3RydWN0dXJlIHN0 b3JlcyBvZmZzZXRzIChub3QgcG9pbnRlcnMpLiBUaGVzZSBvZmZzZXRzCisgKiBjYW4gYmUg dXNlZCB0byBhY2Nlc3MgYXR0YWNoZWQgc3RyaW5nIHZhbHVlOgorICoKKyAqIFN0cmluZ19w b2ludGVyID0gQnl0ZWFfaGVhZF9wb2ludGVyICsgb2ZmZXN0LgorICovCisKK3N0YXRpYyBv cHRpb25fc3BlY19iYXNpYyAqYWxsb2NhdGVPcHRpb25TcGVjKGludCB0eXBlLCBjb25zdCBj aGFyICpuYW1lLAorCQkJCQkJCQkJCQkgY29uc3QgY2hhciAqZGVzYywgTE9DS01PREUgbG9j a21vZGUsCisJCQkJCQkJCQkJCSBpbnQgc3RydWN0X29mZnNldCwgYm9vbCBpc19sb2NhbCwK KwkJCQkJCQkJCQkJIG9wdGlvbl92YWx1ZV9wb3N0dmFsaWRhdGUgcG9zdHZhbGlkYXRlX2Zu KTsKKworc3RhdGljIHZvaWQgcGFyc2Vfb25lX29wdGlvbihvcHRpb25fdmFsdWUgKm9wdGlv biwgYm9vbCB2YWxpZGF0ZSk7CitzdGF0aWMgdm9pZCAqb3B0aW9uc0FsbG9jYXRlQnl0ZWEo b3B0aW9uc19zcGVjX3NldCAqc3BlY19zZXQsIExpc3QgKm9wdGlvbnMpOworCisKK3N0YXRp YyBMaXN0ICpvcHRpb25zRGVmTGlzdFRvUmF3VmFsdWVzKExpc3QgKmRlZkxpc3QsIGJvb2wg aXNfZm9yX3Jlc2V0KTsKK3N0YXRpYyBEYXR1bSBvcHRpb25zVmFsdWVzVG9UZXh0QXJyYXko TGlzdCAqb3B0aW9uc192YWx1ZXMpOworc3RhdGljIExpc3QgKm9wdGlvbnNNZXJnZU9wdGlv blZhbHVlcyhMaXN0ICpvbGRfb3B0aW9ucywgTGlzdCAqbmV3X29wdGlvbnMpOworCisvKgor ICogYWxsb2NhdGVPcHRpb25zU3BlY1NldAorICoJCUNyZWF0ZXMgbmV3IE9wdGlvbiBTcGVj IFNldCBvYmplY3Q6IEFsbG9jYXRlcyBtZW1vcnkgYW5kIGluaXRpYWxpemVzCisgKgkJc3Ry dWN0dXJlIG1lbWJlcnMuCisgKgorICogU3BlYyBTZXQgaXRlbXMgY2FuIGJlIGFkZCB2aWEg YWxsb2NhdGVPcHRpb25TcGVjIGFuZCBvcHRpb25TcGVjU2V0QWRkSXRlbQorICogZnVuY3Rp b25zIG9yIGJ5IGNhbGxpbmcgZGlyZWN0bHkgYW55IG9mIG9wdGlvbnNTcGVjU2V0QWRkKiBm dW5jdGlvbgorICogKHByZWZlcmFibGUgd2F5KQorICoKKyAqIG5hbWVzcGFjZSAtIFNwZWMg U2V0IGNhbiBiZSBiaW5kIHRvIGNlcnRhaW4gbmFtZXNwYWNlIChFLmcuCisgKiBuYW1lc3Bh Y2Uub3B0aW9uPXZhbHVlKS4gT3B0aW9ucyBmcm9tIG90aGVyIG5hbWVzcGFjZXMgd2lsbCBi ZSBpZ25vcmVkIHdoaWxlCisgKiBwcm9jZXNzaW5nLiBJZiBzZXQgdG8gTlVMTCwgbm8gbmFt ZXNwYWNlIHdpbGwgYmUgdXNlZCBhdCBhbGwuCisgKgorICogc2l6ZV9vZl9ieXRlYSAtIHNp emUgb2YgdGFyZ2V0IHN0cnVjdHVyZSBvZiBCeXRlYSBvcHRpb25zIHJlcHJlc2VudGF0aW9u CisgKgorICogbnVtX2l0ZW1zX2V4cGVjdGVkIC0gaWYgeW91IGtub3cgZXhwZWN0ZWQgbnVt YmVyIG9mIFNwZWMgU2V0IGl0ZW1zIHNldCBpdAorICogaGVyZS4gU2V0IHRvIC0xIGluIG90 aGVyIGNhc2VzLiBudW1faXRlbXNfZXhwZWN0ZWQgd2lsbCBiZSB1c2VkIGZvcgorICogcHJl YWxsb2NhdGluZyBtZW1vcnkgYW5kIHdpbGwgdHJpZ2dlciBlcnJvciwgaWYgeW91IHRyeSB0 byBhZGQgbW9yZSBpdGVtcworICogdGhhbiB5b3UgZXhwZWN0ZWQuCisgKi8KKworb3B0aW9u c19zcGVjX3NldCAqCithbGxvY2F0ZU9wdGlvbnNTcGVjU2V0KGNvbnN0IGNoYXIgKm5hbXNw YWNlLCBpbnQgYnl0ZWFfc2l6ZSwgYm9vbCBpc19sb2NhbCwKKwkJCQkJICAgaW50IG51bV9p dGVtc19leHBlY3RlZCkKK3sKKwlNZW1vcnlDb250ZXh0IG9sZGN4dDsKKwlvcHRpb25zX3Nw ZWNfc2V0ICpzcGVjX3NldDsKKworCWlmICghaXNfbG9jYWwpCisJCW9sZGN4dCA9IE1lbW9y eUNvbnRleHRTd2l0Y2hUbyhUb3BNZW1vcnlDb250ZXh0KTsKKwlzcGVjX3NldCA9IHBhbGxv YyhzaXplb2Yob3B0aW9uc19zcGVjX3NldCkpOworCWlmIChuYW1zcGFjZSkKKwl7CisJCXNw ZWNfc2V0LT5uYW1zcGFjZSA9IHBhbGxvYyhzdHJsZW4obmFtc3BhY2UpICsgMSk7CisJCXN0 cmNweShzcGVjX3NldC0+bmFtc3BhY2UsIG5hbXNwYWNlKTsKKwl9CisJZWxzZQorCQlzcGVj X3NldC0+bmFtc3BhY2UgPSBOVUxMOworCWlmIChudW1faXRlbXNfZXhwZWN0ZWQgPiAwKQor CXsKKwkJc3BlY19zZXQtPm51bV9hbGxvY2F0ZWQgPSBudW1faXRlbXNfZXhwZWN0ZWQ7CisJ CXNwZWNfc2V0LT5hc3NlcnRfb25fcmVhbGxvYyA9IHRydWU7CisJCXNwZWNfc2V0LT5kZWZp bml0aW9ucyA9IHBhbGxvYygKKwkJCQkJCQkJCSAgIHNwZWNfc2V0LT5udW1fYWxsb2NhdGVk ICogc2l6ZW9mKG9wdGlvbl9zcGVjX2Jhc2ljICopKTsKKwl9CisJZWxzZQorCXsKKwkJc3Bl Y19zZXQtPm51bV9hbGxvY2F0ZWQgPSAwOworCQlzcGVjX3NldC0+YXNzZXJ0X29uX3JlYWxs b2MgPSBmYWxzZTsKKwkJc3BlY19zZXQtPmRlZmluaXRpb25zID0gTlVMTDsKKwl9CisJc3Bl Y19zZXQtPm51bSA9IDA7CisJc3BlY19zZXQtPnN0cnVjdF9zaXplID0gYnl0ZWFfc2l6ZTsK KwlzcGVjX3NldC0+cG9zdHByb2Nlc3NfZnVuID0gTlVMTDsKKwlzcGVjX3NldC0+aXNfbG9j YWwgPSBpc19sb2NhbDsKKwlpZiAoIWlzX2xvY2FsKQorCQlNZW1vcnlDb250ZXh0U3dpdGNo VG8ob2xkY3h0KTsKKwlyZXR1cm4gc3BlY19zZXQ7Cit9CisKKy8qCisgKiBhbGxvY2F0ZU9w dGlvblNwZWMKKyAqCQlBbGxvY2F0ZXMgYSBuZXcgT3B0aW9uIFNwZWNpZmlhdGlvbiBvYmpl Y3Qgb2YgZGVzaXJlZCB0eXBlIGFuZAorICoJCWluaXRpYWxpemUgdGhlIHR5cGUtaW5kZXBl bmRlbnQgZmllbGRzCisgKi8KK3N0YXRpYyBvcHRpb25fc3BlY19iYXNpYyAqCithbGxvY2F0 ZU9wdGlvblNwZWMoaW50IHR5cGUsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmRl c2MsCisJCQkJICAgTE9DS01PREUgbG9ja21vZGUsIGludCBzdHJ1Y3Rfb2Zmc2V0LCBib29s IGlzX2xvY2FsLAorCQkJCSAgIG9wdGlvbl92YWx1ZV9wb3N0dmFsaWRhdGUgcG9zdHZhbGlk YXRlX2ZuKQoreworCU1lbW9yeUNvbnRleHQgb2xkY3h0OworCXNpemVfdAkJc2l6ZTsKKwlv cHRpb25fc3BlY19iYXNpYyAqbmV3b3B0aW9uOworCisJaWYgKCFpc19sb2NhbCkKKwkJb2xk Y3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKFRvcE1lbW9yeUNvbnRleHQpOworCisJc3dp dGNoICh0eXBlKQorCXsKKwkJY2FzZSBPUFRJT05fVFlQRV9CT09MOgorCQkJc2l6ZSA9IHNp emVvZihvcHRpb25fc3BlY19ib29sKTsKKwkJCWJyZWFrOworCQljYXNlIE9QVElPTl9UWVBF X0lOVDoKKwkJCXNpemUgPSBzaXplb2Yob3B0aW9uX3NwZWNfaW50KTsKKwkJCWJyZWFrOwor CQljYXNlIE9QVElPTl9UWVBFX1JFQUw6CisJCQlzaXplID0gc2l6ZW9mKG9wdGlvbl9zcGVj X3JlYWwpOworCQkJYnJlYWs7CisJCWNhc2UgT1BUSU9OX1RZUEVfRU5VTToKKwkJCXNpemUg PSBzaXplb2Yob3B0aW9uX3NwZWNfZW51bSk7CisJCQlicmVhazsKKwkJY2FzZSBPUFRJT05f VFlQRV9TVFJJTkc6CisJCQlzaXplID0gc2l6ZW9mKG9wdGlvbl9zcGVjX3N0cmluZyk7CisJ CQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bnN1cHBvcnRlZCByZWxv cHRpb24gdHlwZSAlZCIsIHR5cGUpOworCQkJcmV0dXJuIE5VTEw7CQkvKiBrZWVwIGNvbXBp bGVyIHF1aWV0ICovCisJfQorCisJbmV3b3B0aW9uID0gcGFsbG9jKHNpemUpOworCisJbmV3 b3B0aW9uLT5uYW1lID0gcHN0cmR1cChuYW1lKTsKKwlpZiAoZGVzYykKKwkJbmV3b3B0aW9u LT5kZXNjID0gcHN0cmR1cChkZXNjKTsKKwllbHNlCisJCW5ld29wdGlvbi0+ZGVzYyA9IE5V TEw7CisJbmV3b3B0aW9uLT50eXBlID0gdHlwZTsKKwluZXdvcHRpb24tPmxvY2ttb2RlID0g bG9ja21vZGU7CisJbmV3b3B0aW9uLT5zdHJ1Y3Rfb2Zmc2V0ID0gc3RydWN0X29mZnNldDsK KwluZXdvcHRpb24tPnBvc3R2YWxpZGF0ZV9mbiA9IHBvc3R2YWxpZGF0ZV9mbjsKKworCWlm ICghaXNfbG9jYWwpCisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOworCisJcmV0 dXJuIG5ld29wdGlvbjsKK30KKworLyoKKyAqIG9wdGlvblNwZWNTZXRBZGRJdGVtCisgKgkJ QWRkcyBwcmUtY3JlYXRlZCBPcHRpb24gU3BlY2lmaWNhdGlvbiBvYmplYyB0byB0aGUgU3Bl YyBTZXQKKyAqLworc3RhdGljIHZvaWQKK29wdGlvblNwZWNTZXRBZGRJdGVtKG9wdGlvbl9z cGVjX2Jhc2ljICpuZXdvcHRpb24sCisJCQkJCSBvcHRpb25zX3NwZWNfc2V0ICpzcGVjX3Nl dCkKK3sKKwlpZiAoc3BlY19zZXQtPm51bSA+PSBzcGVjX3NldC0+bnVtX2FsbG9jYXRlZCkK Kwl7CisJCU1lbW9yeUNvbnRleHQgb2xkY3h0ID0gTlVMTDsKKworCQlBc3NlcnQoIXNwZWNf c2V0LT5hc3NlcnRfb25fcmVhbGxvYyk7CisJCWlmICghc3BlY19zZXQtPmlzX2xvY2FsKQor CQkJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKFRvcE1lbW9yeUNvbnRleHQpOwor CisJCWlmIChzcGVjX3NldC0+bnVtX2FsbG9jYXRlZCA9PSAwKQorCQl7CisJCQlzcGVjX3Nl dC0+bnVtX2FsbG9jYXRlZCA9IDg7CisJCQlzcGVjX3NldC0+ZGVmaW5pdGlvbnMgPSBwYWxs b2MoCisJCQkJCQkJCQkJICAgc3BlY19zZXQtPm51bV9hbGxvY2F0ZWQgKiBzaXplb2Yob3B0 aW9uX3NwZWNfYmFzaWMgKikpOworCQl9CisJCWVsc2UKKwkJeworCQkJc3BlY19zZXQtPm51 bV9hbGxvY2F0ZWQgKj0gMjsKKwkJCXNwZWNfc2V0LT5kZWZpbml0aW9ucyA9IHJlcGFsbG9j KHNwZWNfc2V0LT5kZWZpbml0aW9ucywKKwkJCQkJCQkJCQkJIHNwZWNfc2V0LT5udW1fYWxs b2NhdGVkICogc2l6ZW9mKG9wdGlvbl9zcGVjX2Jhc2ljICopKTsKKwkJfQorCQlpZiAoIXNw ZWNfc2V0LT5pc19sb2NhbCkKKwkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOwor CX0KKwlzcGVjX3NldC0+ZGVmaW5pdGlvbnNbc3BlY19zZXQtPm51bV0gPSBuZXdvcHRpb247 CisJc3BlY19zZXQtPm51bSsrOworfQorCisKKy8qCisgKiBvcHRpb25zU3BlY1NldEFkZEJv b2wKKyAqCQlBZGRzIGJvb2xlYW4gT3B0aW9uIFNwZWNpZmljYXRpb24gZW50cnkgdG8gdGhl IFNwZWMgU2V0CisgKi8KK3ZvaWQKK29wdGlvbnNTcGVjU2V0QWRkQm9vbChvcHRpb25zX3Nw ZWNfc2V0ICpzcGVjX3NldCwgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkJICBjb25zdCBjaGFy ICpkZXNjLCBMT0NLTU9ERSBsb2NrbW9kZSwgaW50IHN0cnVjdF9vZmZzZXQsCisJCQkJCSAg b3B0aW9uX3ZhbHVlX3Bvc3R2YWxpZGF0ZSBwb3N0dmFsaWRhdGVfZm4sCisJCQkJCSAgYm9v bCBkZWZhdWx0X3ZhbCkKK3sKKwlvcHRpb25fc3BlY19ib29sICpzcGVjX3NldF9pdGVtOwor CisJc3BlY19zZXRfaXRlbSA9IChvcHRpb25fc3BlY19ib29sICopIGFsbG9jYXRlT3B0aW9u U3BlYyhPUFRJT05fVFlQRV9CT09MLAorCQkJCQkJCQkJCW5hbWUsIGRlc2MsIGxvY2ttb2Rl LCBzdHJ1Y3Rfb2Zmc2V0LAorCQkJCQkJCQkJCXNwZWNfc2V0LT5pc19sb2NhbCwgcG9zdHZh bGlkYXRlX2ZuKTsKKworCXNwZWNfc2V0X2l0ZW0tPmRlZmF1bHRfdmFsID0gZGVmYXVsdF92 YWw7CisKKwlvcHRpb25TcGVjU2V0QWRkSXRlbSgob3B0aW9uX3NwZWNfYmFzaWMgKikgc3Bl Y19zZXRfaXRlbSwgc3BlY19zZXQpOworfQorCisvKgorICogb3B0aW9uc1NwZWNTZXRBZGRJ bnQKKyAqCQlBZGRzIGludGVnZXIgT3B0aW9uIFNwZWNpZmljYXRpb24gZW50cnkgdG8gdGhl IFNwZWMgU2V0CisgKi8KK3ZvaWQKK29wdGlvbnNTcGVjU2V0QWRkSW50KG9wdGlvbnNfc3Bl Y19zZXQgKnNwZWNfc2V0LCBjb25zdCBjaGFyICpuYW1lLAorCQkJCQkgY29uc3QgY2hhciAq ZGVzYywgTE9DS01PREUgbG9ja21vZGUsIGludCBzdHJ1Y3Rfb2Zmc2V0LAorCQkJCQkgb3B0 aW9uX3ZhbHVlX3Bvc3R2YWxpZGF0ZSBwb3N0dmFsaWRhdGVfZm4sCisJCQkJCSBpbnQgZGVm YXVsdF92YWwsIGludCBtaW5fdmFsLCBpbnQgbWF4X3ZhbCkKK3sKKwlvcHRpb25fc3BlY19p bnQgKnNwZWNfc2V0X2l0ZW07CisKKwlzcGVjX3NldF9pdGVtID0gKG9wdGlvbl9zcGVjX2lu dCAqKSBhbGxvY2F0ZU9wdGlvblNwZWMoT1BUSU9OX1RZUEVfSU5ULAorCQkJCQkJCQkJCSAg bmFtZSwgZGVzYywgbG9ja21vZGUsIHN0cnVjdF9vZmZzZXQsCisJCQkJCQkJCQkJICBzcGVj X3NldC0+aXNfbG9jYWwsIHBvc3R2YWxpZGF0ZV9mbik7CisKKwlzcGVjX3NldF9pdGVtLT5k ZWZhdWx0X3ZhbCA9IGRlZmF1bHRfdmFsOworCXNwZWNfc2V0X2l0ZW0tPm1pbiA9IG1pbl92 YWw7CisJc3BlY19zZXRfaXRlbS0+bWF4ID0gbWF4X3ZhbDsKKworCW9wdGlvblNwZWNTZXRB ZGRJdGVtKChvcHRpb25fc3BlY19iYXNpYyAqKSBzcGVjX3NldF9pdGVtLCBzcGVjX3NldCk7 Cit9CisKKy8qCisgKiBvcHRpb25zU3BlY1NldEFkZFJlYWwKKyAqCQlBZGRzIGZsb2F0IE9w dGlvbiBTcGVjaWZpY2F0aW9uIGVudHJ5IHRvIHRoZSBTcGVjIFNldAorICovCit2b2lkCitv cHRpb25zU3BlY1NldEFkZFJlYWwob3B0aW9uc19zcGVjX3NldCAqc3BlY19zZXQsIGNvbnN0 IGNoYXIgKm5hbWUsCisJCQkJCSAgY29uc3QgY2hhciAqZGVzYywgTE9DS01PREUgbG9ja21v ZGUsIGludCBzdHJ1Y3Rfb2Zmc2V0LAorCQkJCQkgIG9wdGlvbl92YWx1ZV9wb3N0dmFsaWRh dGUgcG9zdHZhbGlkYXRlX2ZuLAorCQkJCQkgIGRvdWJsZSBkZWZhdWx0X3ZhbCwgZG91Ymxl IG1pbl92YWwsIGRvdWJsZSBtYXhfdmFsKQoreworCW9wdGlvbl9zcGVjX3JlYWwgKnNwZWNf c2V0X2l0ZW07CisKKwlzcGVjX3NldF9pdGVtID0gKG9wdGlvbl9zcGVjX3JlYWwgKikgYWxs b2NhdGVPcHRpb25TcGVjKE9QVElPTl9UWVBFX1JFQUwsCisJCQkJCQkJCQkJbmFtZSwgZGVz YywgbG9ja21vZGUsIHN0cnVjdF9vZmZzZXQsCisJCQkJCQkJCQkJc3BlY19zZXQtPmlzX2xv Y2FsLCBwb3N0dmFsaWRhdGVfZm4pOworCisJc3BlY19zZXRfaXRlbS0+ZGVmYXVsdF92YWwg PSBkZWZhdWx0X3ZhbDsKKwlzcGVjX3NldF9pdGVtLT5taW4gPSBtaW5fdmFsOworCXNwZWNf c2V0X2l0ZW0tPm1heCA9IG1heF92YWw7CisKKwlvcHRpb25TcGVjU2V0QWRkSXRlbSgob3B0 aW9uX3NwZWNfYmFzaWMgKikgc3BlY19zZXRfaXRlbSwgc3BlY19zZXQpOworfQorCisvKgor ICogb3B0aW9uc1NwZWNTZXRBZGRFbnVtCisgKgkJQWRkcyBlbnVtIE9wdGlvbiBTcGVjaWZp Y2F0aW9uIGVudHJ5IHRvIHRoZSBTcGVjIFNldAorICoKKyAqIFRoZSBtZW1iZXJzIGFycmF5 IG11c3QgaGF2ZSBhIHRlcm1pbmF0aW5nIE5VTEwgZW50cnkuCisgKgorICogVGhlIGRldGFp bG1zZyBpcyBzaG93biB3aGVuIHVuc3VwcG9ydGVkIHZhbHVlcyBhcmUgcGFzc2VkLCBhbmQg aGFzIHRoaXMKKyAqIGZvcm06ICAgIlZhbGlkIHZhbHVlcyBhcmUgXCJmb29cIiwgXCJiYXJc IiwgYW5kIFwiYmFyXCIuIgorICoKKyAqIFRoZSBtZW1iZXJzIGFycmF5IGFuZCBkZXRhaWxt c2cgYXJlIG5vdCBjb3BpZWQgLS0gY2FsbGVyIG11c3QgZW5zdXJlIHRoYXQKKyAqIHRoZXkg YXJlIHZhbGlkIHRocm91Z2hvdXQgdGhlIGxpZmUgb2YgdGhlIHByb2Nlc3MuCisgKi8KKwor dm9pZAorb3B0aW9uc1NwZWNTZXRBZGRFbnVtKG9wdGlvbnNfc3BlY19zZXQgKnNwZWNfc2V0 LCBjb25zdCBjaGFyICpuYW1lLAorCQkJCQkgIGNvbnN0IGNoYXIgKmRlc2MsIExPQ0tNT0RF IGxvY2ttb2RlLCBpbnQgc3RydWN0X29mZnNldCwKKwkJCQkJICBvcHRpb25fdmFsdWVfcG9z dHZhbGlkYXRlIHBvc3R2YWxpZGF0ZV9mbiwKKwkJCQkJICBvcHRfZW51bV9lbHRfZGVmICpt ZW1iZXJzLCBpbnQgZGVmYXVsdF92YWwsCisJCQkJCSAgY29uc3QgY2hhciAqZGV0YWlsbXNn KQoreworCW9wdGlvbl9zcGVjX2VudW0gKnNwZWNfc2V0X2l0ZW07CisKKwlzcGVjX3NldF9p dGVtID0gKG9wdGlvbl9zcGVjX2VudW0gKikgYWxsb2NhdGVPcHRpb25TcGVjKE9QVElPTl9U WVBFX0VOVU0sCisJCQkJCQkJCQkJbmFtZSwgZGVzYywgbG9ja21vZGUsIHN0cnVjdF9vZmZz ZXQsCisJCQkJCQkJCQkJc3BlY19zZXQtPmlzX2xvY2FsLCBwb3N0dmFsaWRhdGVfZm4pOwor CisJc3BlY19zZXRfaXRlbS0+ZGVmYXVsdF92YWwgPSBkZWZhdWx0X3ZhbDsKKwlzcGVjX3Nl dF9pdGVtLT5tZW1iZXJzID0gbWVtYmVyczsKKwlzcGVjX3NldF9pdGVtLT5kZXRhaWxtc2cg PSBkZXRhaWxtc2c7CisKKwlvcHRpb25TcGVjU2V0QWRkSXRlbSgob3B0aW9uX3NwZWNfYmFz aWMgKikgc3BlY19zZXRfaXRlbSwgc3BlY19zZXQpOworfQorCisvKgorICogb3B0aW9uc1Nw ZWNTZXRBZGRTdHJpbmcKKyAqCQlBZGRzIHN0cmluZyBPcHRpb24gU3BlY2lmaWNhdGlvbiBl bnRyeSB0byB0aGUgU3BlYyBTZXQKKyAqCisgKiAidmFsaWRhdG9yIiBpcyBhbiBvcHRpb25h bCBmdW5jdGlvbiBwb2ludGVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gdGVzdCB0aGUKKyAqIHZh bGlkaXR5IG9mIHRoZSB2YWx1ZXMuIEl0IG11c3QgZWxvZyhFUlJPUikgd2hlbiB0aGUgYXJn dW1lbnQgc3RyaW5nIGlzCisgKiBub3QgYWNjZXB0YWJsZSBmb3IgdGhlIHZhcmlhYmxlLiBO b3RlIHRoYXQgdGhlIGRlZmF1bHQgdmFsdWUgbXVzdCBwYXNzCisgKiB0aGUgdmFsaWRhdGlv bi4KKyAqLwordm9pZAorb3B0aW9uc1NwZWNTZXRBZGRTdHJpbmcob3B0aW9uc19zcGVjX3Nl dCAqc3BlY19zZXQsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJCWNvbnN0IGNoYXIgKmRlc2Ms IExPQ0tNT0RFIGxvY2ttb2RlLCBpbnQgc3RydWN0X29mZnNldCwKKwkJCQkJb3B0aW9uX3Zh bHVlX3Bvc3R2YWxpZGF0ZSBwb3N0dmFsaWRhdGVfZm4sCisJCQkJCWNvbnN0IGNoYXIgKmRl ZmF1bHRfdmFsLCB2YWxpZGF0ZV9zdHJpbmdfb3B0aW9uIHZhbGlkYXRvciwKKwkJCQkJZmls bF9zdHJpbmdfb3B0aW9uIGZpbGxlcikKK3sKKwlvcHRpb25fc3BlY19zdHJpbmcgKnNwZWNf c2V0X2l0ZW07CisKKwkvKiBtYWtlIHN1cmUgdGhlIHZhbGlkYXRvci9kZWZhdWx0IGNvbWJp bmF0aW9uIGlzIHNhbmUgKi8KKwlpZiAodmFsaWRhdG9yKQorCQkodmFsaWRhdG9yKSAoZGVm YXVsdF92YWwpOworCisJc3BlY19zZXRfaXRlbSA9IChvcHRpb25fc3BlY19zdHJpbmcgKikg YWxsb2NhdGVPcHRpb25TcGVjKAorCQkJCQkJCQkJCSAgT1BUSU9OX1RZUEVfU1RSSU5HLAor CQkJCQkJCQkJCSAgbmFtZSwgZGVzYywgbG9ja21vZGUsIHN0cnVjdF9vZmZzZXQsCisJCQkJ CQkJCQkJICBzcGVjX3NldC0+aXNfbG9jYWwsIHBvc3R2YWxpZGF0ZV9mbik7CisJc3BlY19z ZXRfaXRlbS0+dmFsaWRhdGVfY2IgPSB2YWxpZGF0b3I7CisJc3BlY19zZXRfaXRlbS0+Zmls bF9jYiA9IGZpbGxlcjsKKworCWlmIChkZWZhdWx0X3ZhbCkKKwkJc3BlY19zZXRfaXRlbS0+ ZGVmYXVsdF92YWwgPSBNZW1vcnlDb250ZXh0U3RyZHVwKFRvcE1lbW9yeUNvbnRleHQsCisJ CQkJCQkJCQkJCQkJCSBkZWZhdWx0X3ZhbCk7CisJZWxzZQorCQlzcGVjX3NldF9pdGVtLT5k ZWZhdWx0X3ZhbCA9IE5VTEw7CisJb3B0aW9uU3BlY1NldEFkZEl0ZW0oKG9wdGlvbl9zcGVj X2Jhc2ljICopIHNwZWNfc2V0X2l0ZW0sIHNwZWNfc2V0KTsKK30KKworLyogb3B0aW9uc0Rl Zkxpc3RUb1Jhd1ZhbHVlcworICoJCUNvbnZlcnRzIG9wdGlvbnMgdmFsdWVzIGZyb20gRGVm TGlzdCByZXByZXNlbnRhdGlvbiBpbnRvIFJhdyBWYWx1ZXMKKyAqCQlMaXN0LgorICoKKyAq IE5vIHBhcnNpbmcgaXMgZG9uZSBoZXJlIGV4Y2VwdCBmb3IgY2hlY2tpbmcgdGhhdCBSRVNF VCBzeW50YXggaXMgY29ycmVjdAorICogKGkuZS4gZG9lcyBub3QgaGF2ZSA9bmFtZSBwYXJ0 IG9mIHZhbHVlPW5hbWUgdGVtcGxhdGUpLiBTeW50YXggYW5hbHl6ZXIgZG9lcworICogbm90 IHNlZSBkaWZmZXJlbmNlIGJldHdlZW4gU0VUIGFuZCBSRVNFVCBjYXNlcywgc28gd2Ugc2hv dWxkIHRyZWF0IGl0IGhlcmUKKyAqIG1hbnVhbGx5CisgKi8KK3N0YXRpYyBMaXN0ICoKK29w dGlvbnNEZWZMaXN0VG9SYXdWYWx1ZXMoTGlzdCAqZGVmTGlzdCwgYm9vbCBpc19mb3JfcmVz ZXQpCit7CisJTGlzdENlbGwgICAqY2VsbDsKKwlMaXN0CSAgICpyZXN1bHQgPSBOSUw7CisK Kwlmb3JlYWNoKGNlbGwsIGRlZkxpc3QpCisJeworCQlvcHRpb25fdmFsdWUgKm9wdGlvbl9k c3Q7CisJCURlZkVsZW0gICAgKmRlZiA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKwkJ Y2hhcgkgICAqdmFsdWU7CisKKwkJb3B0aW9uX2RzdCA9IHBhbGxvYyhzaXplb2Yob3B0aW9u X3ZhbHVlKSk7CisKKwkJaWYgKGRlZi0+ZGVmbmFtZXNwYWNlKQorCQl7CisJCQlvcHRpb25f ZHN0LT5uYW1zcGFjZSA9IHBhbGxvYyhzdHJsZW4oZGVmLT5kZWZuYW1lc3BhY2UpICsgMSk7 CisJCQlzdHJjcHkob3B0aW9uX2RzdC0+bmFtc3BhY2UsIGRlZi0+ZGVmbmFtZXNwYWNlKTsK KwkJfQorCQllbHNlCisJCQlvcHRpb25fZHN0LT5uYW1zcGFjZSA9IE5VTEw7CisKKwkJb3B0 aW9uX2RzdC0+cmF3X25hbWUgPSBwYWxsb2Moc3RybGVuKGRlZi0+ZGVmbmFtZSkgKyAxKTsK KwkJc3RyY3B5KG9wdGlvbl9kc3QtPnJhd19uYW1lLCBkZWYtPmRlZm5hbWUpOworCisJCWlm IChpc19mb3JfcmVzZXQpCisJCXsKKwkJCS8qCisJCQkgKiBJZiB0aGlzIG9wdGlvbiBjYW1l IGZyb20gUkVTRVQgc3RhdGVtZW50IHdlIHNob3VsZCB0aHJvdyBlcnJvcgorCQkJICogaXQg aXQgYnJpbmdzIHVzIG5hbWU9dmFsdWUgZGF0YSwgYXMgc3ludGF4IGFuYWx5emVyIGRvIG5v dAorCQkJICogcHJldmVudCBpdAorCQkJICovCisJCQlpZiAoZGVmLT5hcmcgIT0gTlVMTCkK KwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJP UiksCisJCQkJCSBlcnJtc2coIlJFU0VUIG11c3Qgbm90IGluY2x1ZGUgdmFsdWVzIGZvciBw YXJhbWV0ZXJzIikpKTsKKworCQkJb3B0aW9uX2RzdC0+c3RhdHVzID0gT1BUSU9OX1ZBTFVF X1NUQVRVU19GT1JfUkVTRVQ7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKgorCQkJICogRm9y IFNFVCBzdGF0ZW1lbnQgd2Ugc2hvdWxkIHRyZWF0IChuYW1lKSBleHByZXNzaW9uIGFzIGlm IGl0IGlzCisJCQkgKiBhY3R1YWxseSAobmFtZT10cnVlKSBzbyBkbyBpdCBoZXJlIG1hbnVh bGx5LiBJbiBvdGhlciBjYXNlcworCQkJICoganVzdCB1c2UgdmFsdWUgYXMgd2Ugc2hvdWxk IHVzZSBpdAorCQkJICovCisJCQlvcHRpb25fZHN0LT5zdGF0dXMgPSBPUFRJT05fVkFMVUVf U1RBVFVTX1JBVzsKKwkJCWlmIChkZWYtPmFyZyAhPSBOVUxMKQorCQkJCXZhbHVlID0gZGVm R2V0U3RyaW5nKGRlZik7CisJCQllbHNlCisJCQkJdmFsdWUgPSAidHJ1ZSI7CisJCQlvcHRp b25fZHN0LT5yYXdfdmFsdWUgPSBwYWxsb2Moc3RybGVuKHZhbHVlKSArIDEpOworCQkJc3Ry Y3B5KG9wdGlvbl9kc3QtPnJhd192YWx1ZSwgdmFsdWUpOworCQl9CisKKwkJcmVzdWx0ID0g bGFwcGVuZChyZXN1bHQsIG9wdGlvbl9kc3QpOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQor CisvKgorICogb3B0aW9uc1ZhbHVlc1RvVGV4dEFycmF5CisgKgkJQ29udmVydHMgb3B0aW9u cyBWYWx1ZXMgTGlzdCAob3B0aW9uX3ZhbHVlcykgaW50byBURVhUW10gcmVwcmVzZW50YXRp b24KKyAqCisgKiBUaGlzIGNvbnZlcnNpb24gaXMgdXN1YWxseSBuZWVkZWQgZm9yIHNhdmlu ZyBvcHRpb24gdmFsdWVzIGludG8gZGF0YWJhc2UKKyAqIChlLmcuIHRvIHN0b3JlIHJlbG9w dGlvbnMgaW4gcGdfY2xhc3MucmVsb3B0aW9ucykKKyAqLworCitEYXR1bQorb3B0aW9uc1Zh bHVlc1RvVGV4dEFycmF5KExpc3QgKm9wdGlvbnNfdmFsdWVzKQoreworCUFycmF5QnVpbGRT dGF0ZSAqYXN0YXRlID0gTlVMTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCURhdHVtCQlyZXN1 bHQ7CisKKwlmb3JlYWNoKGNlbGwsIG9wdGlvbnNfdmFsdWVzKQorCXsKKwkJb3B0aW9uX3Zh bHVlICpvcHRpb24gPSAob3B0aW9uX3ZhbHVlICopIGxmaXJzdChjZWxsKTsKKwkJY29uc3Qg Y2hhciAqbmFtZTsKKwkJY2hhcgkgICAqdmFsdWU7CisJCXRleHQJICAgKnQ7CisJCWludAkJ CWxlbjsKKworCQkvKgorCQkgKiBSYXcgdmFsdWUgd2VyZSBub3QgY2xlYXJlZCB3aGlsZSBw YXJzaW5nLCBzbyBpbnN0ZWFkIG9mIGNvbnZlcnRpbmcKKwkJICogaXQgYmFjaywganVzdCB1 c2UgaXQgdG8gc3RvcmUgdmFsdWUgYXMgdGV4dAorCQkgKi8KKwkJdmFsdWUgPSBvcHRpb24t PnJhd192YWx1ZTsKKworCQlBc3NlcnQob3B0aW9uLT5zdGF0dXMgIT0gT1BUSU9OX1ZBTFVF X1NUQVRVU19FTVBUWSk7CisKKwkJLyoKKwkJICogTmFtZSB3aWxsIGJlIHRha2VuIGZyb20g b3B0aW9uIGRlZmluaXRpb24sIGlmIG9wdGlvbiB3ZXJlIHBhcnNlZCBvcgorCQkgKiBmcm9t IHJhd19uYW1lIGlmIG9wdGlvbiB3ZXJlIG5vdCBwYXJzZWQgZm9yIHNvbWUgcmVhc29uCisJ CSAqLworCQlpZiAob3B0aW9uLT5zdGF0dXMgPT0gT1BUSU9OX1ZBTFVFX1NUQVRVU19QQVJT RUQpCisJCQluYW1lID0gb3B0aW9uLT5nZW4tPm5hbWU7CisJCWVsc2UKKwkJCW5hbWUgPSBv cHRpb24tPnJhd19uYW1lOworCisJCS8qCisJCSAqIE5vdyBidWlsZCAibmFtZT12YWx1ZSIg c3RyaW5nIGFuZCBhcHBlbmQgaXQgdG8gdGhlIGFycmF5CisJCSAqLworCQlsZW4gPSBWQVJI RFJTWiArIHN0cmxlbihuYW1lKSArIHN0cmxlbih2YWx1ZSkgKyAxOworCQl0ID0gKHRleHQg KikgcGFsbG9jKGxlbiArIDEpOworCQlTRVRfVkFSU0laRSh0LCBsZW4pOworCQlzcHJpbnRm KFZBUkRBVEEodCksICIlcz0lcyIsIG5hbWUsIHZhbHVlKTsKKwkJYXN0YXRlID0gYWNjdW1B cnJheVJlc3VsdChhc3RhdGUsIFBvaW50ZXJHZXREYXR1bSh0KSwgZmFsc2UsCisJCQkJCQkJ CSAgVEVYVE9JRCwgQ3VycmVudE1lbW9yeUNvbnRleHQpOworCX0KKwlpZiAoYXN0YXRlKQor CQlyZXN1bHQgPSBtYWtlQXJyYXlSZXN1bHQoYXN0YXRlLCBDdXJyZW50TWVtb3J5Q29udGV4 dCk7CisJZWxzZQorCQlyZXN1bHQgPSAoRGF0dW0pIDA7CisKKwlyZXR1cm4gcmVzdWx0Owor fQorCisvKgorICogb3B0aW9uc1RleHRBcnJheVRvUmF3VmFsdWVzCisgKgkJQ29udmVydHMg b3B0aW9uIHZhbHVlcyBmcm9tIFRFWFRbXSByZXByZXNlbnRhdGlvbiAoZGF0dW1fYXJyYXkp IGludG8KKyAqCQkgUmF3IFZhbHVlcyBMaXN0LgorICoKKyAqIFVzZWQgd2hpbGUgZmV0Y2hp bmcgb3B0aW9ucyB2YWx1ZXMgZnJvbSBEQiwgYXMgYSBmaXJzdCBzdGVwIG9mIGNvbnZlcnRp bmcKKyAqIHRoZW0gdG8gb3RoZXIgcmVwcmVzZW50YXRpb25zLgorICovCitMaXN0ICoKK29w dGlvbnNUZXh0QXJyYXlUb1Jhd1ZhbHVlcyhEYXR1bSBhcnJheV9kYXR1bSkKK3sKKwlMaXN0 CSAgICpyZXN1bHQgPSBOSUw7CisKKwlpZiAoUG9pbnRlcklzVmFsaWQoRGF0dW1HZXRQb2lu dGVyKGFycmF5X2RhdHVtKSkpCisJeworCQlBcnJheVR5cGUgICphcnJheSA9IERhdHVtR2V0 QXJyYXlUeXBlUChhcnJheV9kYXR1bSk7CisJCURhdHVtCSAgICpvcHRpb25zOworCQlpbnQJ CQlub3B0aW9uczsKKwkJaW50CQkJaTsKKworCQlkZWNvbnN0cnVjdF9hcnJheV9idWlsdGlu KGFycmF5LCBURVhUT0lELCAmb3B0aW9ucywgTlVMTCwgJm5vcHRpb25zKTsKKworCQlmb3Ig KGkgPSAwOyBpIDwgbm9wdGlvbnM7IGkrKykKKwkJeworCQkJb3B0aW9uX3ZhbHVlICpvcHRp b25fZHN0OworCQkJY2hhcgkgICAqdGV4dF9zdHIgPSBWQVJEQVRBKG9wdGlvbnNbaV0pOwor CQkJaW50CQkJdGV4dF9sZW4gPSBWQVJTSVpFKG9wdGlvbnNbaV0pIC0gVkFSSERSU1o7CisJ CQlpbnQJCQlqOworCQkJaW50CQkJbmFtZV9sZW4gPSAtMTsKKwkJCWNoYXIJICAgKm5hbWU7 CisJCQlpbnQJCQlyYXdfdmFsdWVfbGVuOworCQkJY2hhcgkgICAqcmF3X3ZhbHVlOworCisJ CQkvKgorCQkJICogRmluZCBwb3NpdGlvbiBvZiAnPScgc2lnbiBhbmQgdHJlYXQgaWQgYXMg YSBzZXBhcmF0b3IgYmV0d2VlbgorCQkJICogbmFtZSBhbmQgdmFsdWUgaW4gIm5hbWU9dmFs dWUiIGl0ZW0KKwkJCSAqLworCQkJZm9yIChqID0gMDsgaiA8IHRleHRfbGVuOyBqID0gaiAr IHBnX21ibGVuKHRleHRfc3RyKSkKKwkJCXsKKwkJCQlpZiAodGV4dF9zdHJbal0gPT0gJz0n KQorCQkJCXsKKwkJCQkJbmFtZV9sZW4gPSBqOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9 CisJCQlBc3NlcnQobmFtZV9sZW4gPj0gMSk7CS8qIEp1c3QgaW4gY2FzZSAqLworCisJCQly YXdfdmFsdWVfbGVuID0gdGV4dF9sZW4gLSBuYW1lX2xlbiAtIDE7CisKKwkJCS8qCisJCQkg KiBDb3B5IG5hbWUgZnJvbSBzcmMKKwkJCSAqLworCQkJbmFtZSA9IHBhbGxvYyhuYW1lX2xl biArIDEpOworCQkJbWVtY3B5KG5hbWUsIHRleHRfc3RyLCBuYW1lX2xlbik7CisJCQluYW1l W25hbWVfbGVuXSA9ICdcMCc7CisKKwkJCS8qCisJCQkgKiBDb3B5IHZhbHVlIGZyb20gc3Jj CisJCQkgKi8KKwkJCXJhd192YWx1ZSA9IHBhbGxvYyhyYXdfdmFsdWVfbGVuICsgMSk7CisJ CQltZW1jcHkocmF3X3ZhbHVlLCB0ZXh0X3N0ciArIG5hbWVfbGVuICsgMSwgcmF3X3ZhbHVl X2xlbik7CisJCQlyYXdfdmFsdWVbcmF3X3ZhbHVlX2xlbl0gPSAnXDAnOworCisJCQkvKgor CQkJICogQ3JlYXRlIG5ldyBvcHRpb25fdmFsdWUgaXRlbQorCQkJICovCisJCQlvcHRpb25f ZHN0ID0gcGFsbG9jKHNpemVvZihvcHRpb25fdmFsdWUpKTsKKwkJCW9wdGlvbl9kc3QtPnN0 YXR1cyA9IE9QVElPTl9WQUxVRV9TVEFUVVNfUkFXOworCQkJb3B0aW9uX2RzdC0+cmF3X25h bWUgPSBuYW1lOworCQkJb3B0aW9uX2RzdC0+cmF3X3ZhbHVlID0gcmF3X3ZhbHVlOworCQkJ b3B0aW9uX2RzdC0+bmFtc3BhY2UgPSBOVUxMOworCisJCQlyZXN1bHQgPSBsYXBwZW5kKHJl c3VsdCwgb3B0aW9uX2RzdCk7CisJCX0KKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoK KyAqIG9wdGlvbnNNZXJnZU9wdGlvblZhbHVlcworICoJCVVwZGF0ZXMob3IgUmVzZXRzKSB2 YWx1ZXMgZnJvbSBvbmUgT3B0aW9ucyBWYWx1ZXMgTGlzdChvbGRfb3B0aW9ucyksCisgKgkJ d2l0aCB2YWx1ZXMgZnJvbSBhbm90aGVyIE9wdGlvbnMgVmFsdWVzIExpc3QgKG5ld19vcHRp b25zKQorCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgd2hpbGUgQUxURVJpbmcgb3B0aW9u cyBvZiBzb21lIG9iamVjdC4KKyAqIElmIG9wdGlvbiBmcm9tIG5ld19vcHRpb25zIGxpc3Qg aGFzIE9QVElPTl9WQUxVRV9TVEFUVVNfRk9SX1JFU0VUIGZsYWcKKyAqIG9uLCBvcHRpb24g d2l0aCB0aGF0IG5hbWUgd2lsbCBiZSBleGNsdWRlZCByZXN1bHQgbGlzdC4KKyAqLworc3Rh dGljIExpc3QgKgorb3B0aW9uc01lcmdlT3B0aW9uVmFsdWVzKExpc3QgKm9sZF9vcHRpb25z LCBMaXN0ICpuZXdfb3B0aW9ucykKK3sKKwlMaXN0CSAgICpyZXN1bHQgPSBOSUw7CisJTGlz dENlbGwgICAqb2xkX2NlbGw7CisJTGlzdENlbGwgICAqbmV3X2NlbGw7CisKKwkvKgorCSAq IEZpcnN0IGFkZCB0byByZXN1bHQgYWxsIG9sZCBvcHRpb25zIHRoYXQgYXJlIG5vdCBtZW50 aW9uZWQgaW4gbmV3IGxpc3QKKwkgKi8KKwlmb3JlYWNoKG9sZF9jZWxsLCBvbGRfb3B0aW9u cykKKwl7CisJCWJvb2wJCWZvdW5kOworCQljb25zdCBjaGFyICpvbGRfbmFtZTsKKwkJb3B0 aW9uX3ZhbHVlICpvbGRfb3B0aW9uOworCisJCW9sZF9vcHRpb24gPSAob3B0aW9uX3ZhbHVl ICopIGxmaXJzdChvbGRfY2VsbCk7CisJCWlmIChvbGRfb3B0aW9uLT5zdGF0dXMgPT0gT1BU SU9OX1ZBTFVFX1NUQVRVU19QQVJTRUQpCisJCQlvbGRfbmFtZSA9IG9sZF9vcHRpb24tPmdl bi0+bmFtZTsKKwkJZWxzZQorCQkJb2xkX25hbWUgPSBvbGRfb3B0aW9uLT5yYXdfbmFtZTsK KworCQkvKgorCQkgKiBMb29raW5nIGZvciBhIG5ldyBvcHRpb24gd2l0aCBzYW1lIG5hbWUK KwkJICovCisJCWZvdW5kID0gZmFsc2U7CisJCWZvcmVhY2gobmV3X2NlbGwsIG5ld19vcHRp b25zKQorCQl7CisJCQlvcHRpb25fdmFsdWUgKm5ld19vcHRpb247CisJCQljb25zdCBjaGFy ICpuZXdfbmFtZTsKKworCQkJbmV3X29wdGlvbiA9IChvcHRpb25fdmFsdWUgKikgbGZpcnN0 KG5ld19jZWxsKTsKKwkJCWlmIChuZXdfb3B0aW9uLT5zdGF0dXMgPT0gT1BUSU9OX1ZBTFVF X1NUQVRVU19QQVJTRUQpCisJCQkJbmV3X25hbWUgPSBuZXdfb3B0aW9uLT5nZW4tPm5hbWU7 CisJCQllbHNlCisJCQkJbmV3X25hbWUgPSBuZXdfb3B0aW9uLT5yYXdfbmFtZTsKKworCQkJ aWYgKHN0cmNtcChuZXdfbmFtZSwgb2xkX25hbWUpID09IDApCisJCQl7CisJCQkJZm91bmQg PSB0cnVlOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmICghZm91bmQpCisJCQlyZXN1 bHQgPSBsYXBwZW5kKHJlc3VsdCwgb2xkX29wdGlvbik7CisJfQorCisJLyoKKwkgKiBOb3cg YWRkIGFsbCB0byByZXN1bHQgYWxsIG5ldyBvcHRpb25zIHRoYXQgYXJlIG5vdCBkZXNpZ25h dGVkIGZvciByZXNldAorCSAqLworCWZvcmVhY2gobmV3X2NlbGwsIG5ld19vcHRpb25zKQor CXsKKwkJb3B0aW9uX3ZhbHVlICpuZXdfb3B0aW9uOworCisJCW5ld19vcHRpb24gPSAob3B0 aW9uX3ZhbHVlICopIGxmaXJzdChuZXdfY2VsbCk7CisKKwkJaWYgKG5ld19vcHRpb24tPnN0 YXR1cyAhPSBPUFRJT05fVkFMVUVfU1RBVFVTX0ZPUl9SRVNFVCkKKwkJCXJlc3VsdCA9IGxh cHBlbmQocmVzdWx0LCBuZXdfb3B0aW9uKTsKKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKwor LyoKKyAqIG9wdGlvbnNEZWZMaXN0VmFsZGF0ZU5hbWVzcGFjZXMKKyAqCQlDaGVja3MgdGhh dCBkZWZMaXN0IGhhcyBvbmx5IG9wdGlvbnMgd2l0aCBuYW1lc3BhY2VzIGZyb20KKyAqCQlh bGxvd2VkX25hbXNwYWNlcyBhcnJheS4gSXRlbXMgd2l0aG91dCBuYW1zcGFjZSBhcmUgYWxz byBhY2NlcHRlZAorICoKKyAqIFVzZWQgd2hpbGUgdmFsaWRhdGlvbiBvZiBzeW50YXggcGFy c2VyIG91dHB1dC4gRXJyb3IgaXMgdGhyb3duIGlmIHVucHJvcGVyCisgKiBuYW1lc3BhY2Ug aXMgZm91bmQuCisgKi8KK3ZvaWQKK29wdGlvbnNEZWZMaXN0VmFsZGF0ZU5hbWVzcGFjZXMo TGlzdCAqZGVmTGlzdCwgY2hhciAqKmFsbG93ZWRfbmFtc3BhY2VzKQoreworCUxpc3RDZWxs ICAgKmNlbGw7CisKKwlmb3JlYWNoKGNlbGwsIGRlZkxpc3QpCisJeworCQlEZWZFbGVtICAg ICpkZWYgPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisKKwkJLyoKKwkJICogQ2hlY2tp bmcgbmFtZXNwYWNlIG9ubHkgZm9yIG9wdGlvbnMgdGhhdCBoYXZlIG5hbWVzcGFjZXMuIE9w dGlvbnMKKwkJICogd2l0aCBubyBuYW1lc3BhY2VzIGFyZSBhbHdheXMgYWNjZXB0ZWQKKwkJ ICovCisJCWlmIChkZWYtPmRlZm5hbWVzcGFjZSkKKwkJeworCQkJYm9vbAkJZm91bmQgPSBm YWxzZTsKKwkJCWludAkJCWkgPSAwOworCisJCQl3aGlsZSAoYWxsb3dlZF9uYW1zcGFjZXNb aV0pCisJCQl7CisJCQkJaWYgKHN0cmNtcChkZWYtPmRlZm5hbWVzcGFjZSwKKwkJCQkJCSAg IGFsbG93ZWRfbmFtc3BhY2VzW2ldKSA9PSAwKQorCQkJCXsKKwkJCQkJZm91bmQgPSB0cnVl OworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJaSsrOworCQkJfQorCQkJaWYgKCFmb3VuZCkK KwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BB UkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJ1bnJlY29nbml6ZWQgcGFyYW1ldGVy IG5hbWVzcGFjZSBcIiVzXCIiLAorCQkJCQkJCQlkZWYtPmRlZm5hbWVzcGFjZSkpKTsKKwkJ fQorCX0KK30KKworLyoKKyAqIG9wdGlvbnNEZWZMaXN0RmlsdGVyTmFtZXNwYWNlcworICoJ CUZpbHRlciBvdXQgRGVmTGlzdCBpdGVtcyB0aGF0IGhhcyAibmFtc3BhY2UiIG5hbWVzcGFj ZS4gSWYgIm5hbXNwYWNlIgorICoJCWlzIE5VTEwsIG9ubHkgbmFtZXNwYXNlbGVzcyBvcHRp b25zIGFyZSByZXR1cm5lZAorICovCitMaXN0ICoKK29wdGlvbnNEZWZMaXN0RmlsdGVyTmFt ZXNwYWNlcyhMaXN0ICpkZWZMaXN0LCBjb25zdCBjaGFyICpuYW1zcGFjZSkKK3sKKwlMaXN0 Q2VsbCAgICpjZWxsOworCUxpc3QJICAgKnJlc3VsdCA9IE5JTDsKKworCWZvcmVhY2goY2Vs bCwgZGVmTGlzdCkKKwl7CisJCURlZkVsZW0gICAgKmRlZiA9IChEZWZFbGVtICopIGxmaXJz dChjZWxsKTsKKworCQlpZiAoKCFuYW1zcGFjZSAmJiAhZGVmLT5kZWZuYW1lc3BhY2UpIHx8 CisJCQkobmFtc3BhY2UgJiYgZGVmLT5kZWZuYW1lc3BhY2UgJiYKKwkJCSBzdHJjbXAobmFt c3BhY2UsIGRlZi0+ZGVmbmFtZXNwYWNlKSA9PSAwKSkKKwkJCXJlc3VsdCA9IGxhcHBlbmQo cmVzdWx0LCBkZWYpOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogb3B0aW9u c1RleHRBcnJheVRvRGVmTGlzdAorICoJCUNvbnZlcnRzIG9wdGlvbiB2YWx1ZXMgZnJvbSBU RVhUW10gcmVwcmVzZW50YXRpb24gaW50byBEZWZMaXN0CisgKgkJcmVwcmVzZW50YXRpb24u CisgKi8KK0xpc3QgKgorb3B0aW9uc1RleHRBcnJheVRvRGVmTGlzdChEYXR1bSBvcHRpb25z KQoreworCUxpc3QJICAgKnJlc3VsdCA9IE5JTDsKKwlBcnJheVR5cGUgICphcnJheTsKKwlE YXR1bQkgICAqb3B0aW9uZGF0dW1zOworCWludAkJCW5vcHRpb25zOworCWludAkJCWk7CisK KwkvKiBOb3RoaW5nIHRvIGRvIGlmIG5vIG9wdGlvbnMgKi8KKwlpZiAoIVBvaW50ZXJJc1Zh bGlkKERhdHVtR2V0UG9pbnRlcihvcHRpb25zKSkpCisJCXJldHVybiByZXN1bHQ7CisKKwlh cnJheSA9IERhdHVtR2V0QXJyYXlUeXBlUChvcHRpb25zKTsKKworCWRlY29uc3RydWN0X2Fy cmF5X2J1aWx0aW4oYXJyYXksIFRFWFRPSUQsICZvcHRpb25kYXR1bXMsIE5VTEwsICZub3B0 aW9ucyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbm9wdGlvbnM7IGkrKykKKwl7CisJCWNoYXIJ ICAgKnM7CisJCWNoYXIJICAgKnA7CisJCU5vZGUJICAgKnZhbCA9IE5VTEw7CisKKwkJcyA9 IFRleHREYXR1bUdldENTdHJpbmcob3B0aW9uZGF0dW1zW2ldKTsKKwkJcCA9IHN0cmNocihz LCAnPScpOworCQlpZiAocCkKKwkJeworCQkJKnArKyA9ICdcMCc7CisJCQl2YWwgPSAoTm9k ZSAqKSBtYWtlU3RyaW5nKHBzdHJkdXAocCkpOworCQl9CisJCXJlc3VsdCA9IGxhcHBlbmQo cmVzdWx0LCBtYWtlRGVmRWxlbShwc3RyZHVwKHMpLCB2YWwsIC0xKSk7CisJfQorCisJcmV0 dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIG9wdGlvbnNEZWZMaXN0VG9UZXh0QXJyYXkKKyAq CQlDb252ZXJ0cyBvcHRpb24gdmFsdWVzIGZyb20gRGVmTGlzdCByZXByZXNlbnRhdGlvbiBp bnRvIFRFWFRbXQorICoJCXJlcHJlc2VudGF0aW9uLgorICovCitEYXR1bQorb3B0aW9uc0Rl Zkxpc3RUb1RleHRBcnJheShMaXN0ICpkZWZMaXN0KQoreworCUxpc3RDZWxsICAgKmNlbGw7 CisJRGF0dW0JCXJlc3VsdDsKKwlBcnJheUJ1aWxkU3RhdGUgKmFzdGF0ZSA9IE5VTEw7CisK Kwlmb3JlYWNoKGNlbGwsIGRlZkxpc3QpCisJeworCQlEZWZFbGVtICAgICpkZWYgPSAoRGVm RWxlbSAqKSBsZmlyc3QoY2VsbCk7CisJCWNvbnN0IGNoYXIgKm5hbWUgPSBkZWYtPmRlZm5h bWU7CisJCWNvbnN0IGNoYXIgKnZhbHVlOworCQl0ZXh0CSAgICp0OworCQlpbnQJCQlsZW47 CisKKwkJaWYgKGRlZi0+YXJnICE9IE5VTEwpCisJCQl2YWx1ZSA9IGRlZkdldFN0cmluZyhk ZWYpOworCQllbHNlCisJCQl2YWx1ZSA9ICJ0cnVlIjsKKworCQlpZiAoZGVmLT5kZWZuYW1l c3BhY2UpCisJCXsKKwkJCS8qCisJCQkgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIGJh Y2t3YXJkIGNvbXBhdGliaWxpdHkgaW4gdGhlIHBsYWNlCisJCQkgKiB3aGVyZSBuYW1lc3Bh c2VzIGFyZSBub3QgYWxsb3dlZAorCQkJICovCisJCQlBc3NlcnQoZmFsc2UpOwkJLyogU2hv dWxkIG5vdCBnZXQgaGVyZSAqLworCQkJcmV0dXJuIChEYXR1bSkgMDsKKwkJfQorCQlsZW4g PSBWQVJIRFJTWiArIHN0cmxlbihuYW1lKSArIHN0cmxlbih2YWx1ZSkgKyAxOworCQl0ID0g KHRleHQgKikgcGFsbG9jKGxlbiArIDEpOworCQlTRVRfVkFSU0laRSh0LCBsZW4pOworCQlz cHJpbnRmKFZBUkRBVEEodCksICIlcz0lcyIsIG5hbWUsIHZhbHVlKTsKKwkJYXN0YXRlID0g YWNjdW1BcnJheVJlc3VsdChhc3RhdGUsIFBvaW50ZXJHZXREYXR1bSh0KSwgZmFsc2UsCisJ CQkJCQkJCSAgVEVYVE9JRCwgQ3VycmVudE1lbW9yeUNvbnRleHQpOworCisJfQorCWlmIChh c3RhdGUpCisJCXJlc3VsdCA9IG1ha2VBcnJheVJlc3VsdChhc3RhdGUsIEN1cnJlbnRNZW1v cnlDb250ZXh0KTsKKwllbHNlCisJCXJlc3VsdCA9IChEYXR1bSkgMDsKKwlyZXR1cm4gcmVz dWx0OworfQorCisKKy8qCisgKiBvcHRpb25zUGFyc2VSYXdWYWx1ZXMKKyAqCQlUcmFuc2Zv cm1zIFJhd1ZhbHVlcyBMaXN0IGludG8gW1BhcnNlZF0gVmFsdWVzIExpc3QuIFZhbGlkYXRp b24gaXMgZG9uZQorICoJCWlmIHZhbGlkYXRlIGZsYWcgaXMgc2V0LgorICoKKyAqIE9wdGlv bnMgZGF0YSB0aGF0IGNvbWUgcGFyc2VkIFNRTCBxdWVyeSBvciBEQiBzdG9yYWdlLCBmaXJz dCBjb252ZXJ0ZWQgaW50bworICogUmF3VmFsdWVzICh3aGVyZSB2YWx1ZSBhcmUga2VwdCBp biB0ZXh0IGZvcm1hdCksIHRoZW4gaXMgcGFyc2VkIGludG8KKyAqIFZhbHVlcyB1c2luZyB0 aGlzIGZ1bmN0aW9uCisgKgorICogVmFsaWRhdGlvbiBpcyB1c2VkIG9ubHkgZm9yIGRhdGEg dGhhdCBjYW1lIGZyb20gU1FMIHF1ZXJ5LiBXZSB0cnVzdCB0aGF0CisgKiBkYXRhIHRoYXQg Y2FtZSBmcm9tIERCIGlzIGNvcnJlY3QuCisgKgorICogSWYgdmFsaWRhdGlvbiBpcyBvZmYs IGFsbCB1bmtub3duIG9wdGlvbnMgYXJlIGtlcHQgdW5wYXJzZWQgc28gdGhleSB3aWxsCisg KiBiZSBzdG9yZWQgYmFjayB0byBEQiB1bnRpbCB1c2VyIFJFU0VUcyB0aGVtIGRpcmVjdGx5 LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZGVzdHJveXMgaW5jb21pbmcgbGlzdC4KKyAqLwor TGlzdCAqCitvcHRpb25zUGFyc2VSYXdWYWx1ZXMoTGlzdCAqcmF3X3ZhbHVlcywgb3B0aW9u c19zcGVjX3NldCAqc3BlY19zZXQsCisJCQkJCSAgYm9vbCB2YWxpZGF0ZSkKK3sKKwlMaXN0 Q2VsbCAgICpjZWxsOworCUxpc3QJICAgKnJlc3VsdCA9IE5JTDsKKwlib29sCSAgICppc19z ZXQ7CisJaW50CQkJaTsKKworCWlzX3NldCA9IHBhbGxvYzAoc2l6ZW9mKGJvb2wpICogc3Bl Y19zZXQtPm51bSk7CisJZm9yZWFjaChjZWxsLCByYXdfdmFsdWVzKQorCXsKKwkJb3B0aW9u X3ZhbHVlICpvcHRpb24gPSAob3B0aW9uX3ZhbHVlICopIGxmaXJzdChjZWxsKTsKKwkJYm9v bAkJZm91bmQgPSBmYWxzZTsKKworCQkvKiBvcHRpb24gdmFsdWVzIHdpdGggUkVTRVQgc3Rh dHVzIGRvZXMgbm90IG5lZWQgcGFyc2luZyAqLworCQlBc3NlcnQob3B0aW9uLT5zdGF0dXMg IT0gT1BUSU9OX1ZBTFVFX1NUQVRVU19GT1JfUkVTRVQpOworCisJCS8qIFNob3VsZCBub3Qg cGFyc2UgVmFsdWVzIFNldCB0d2ljZSAqLworCQlBc3NlcnQob3B0aW9uLT5zdGF0dXMgIT0g T1BUSU9OX1ZBTFVFX1NUQVRVU19QQVJTRUQpOworCisJCWlmICh2YWxpZGF0ZSAmJiBvcHRp b24tPm5hbXNwYWNlICYmICghc3BlY19zZXQtPm5hbXNwYWNlIHx8CisJCQkJCQkgIHN0cmNt cChzcGVjX3NldC0+bmFtc3BhY2UsIG9wdGlvbi0+bmFtc3BhY2UpICE9IDApKQorCQkJZXJl cG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9W QUxVRSksCisJCQkJCSBlcnJtc2coInVucmVjb2duaXplZCBwYXJhbWV0ZXIgbmFtZXNwYWNl IFwiJXNcIiIsCisJCQkJCQkJb3B0aW9uLT5uYW1zcGFjZSkpKTsKKworCQlmb3IgKGkgPSAw OyBpIDwgc3BlY19zZXQtPm51bTsgaSsrKQorCQl7CisJCQlvcHRpb25fc3BlY19iYXNpYyAq b3B0X3NwZWMgPSBzcGVjX3NldC0+ZGVmaW5pdGlvbnNbaV07CisKKwkJCWlmIChzdHJjbXAo b3B0aW9uLT5yYXdfbmFtZSwgb3B0X3NwZWMtPm5hbWUpID09IDApCisJCQl7CisJCQkJaWYg KHZhbGlkYXRlICYmIGlzX3NldFtpXSkKKwkJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCQko ZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCQkgZXJy bXNnKCJwYXJhbWV0ZXIgXCIlc1wiIHNwZWNpZmllZCBtb3JlIHRoYW4gb25jZSIsCisJCQkJ CQkJCQlvcHRpb24tPnJhd19uYW1lKSkpOworCisJCQkJcGZyZWUob3B0aW9uLT5yYXdfbmFt ZSk7CisJCQkJb3B0aW9uLT5yYXdfbmFtZSA9IE5VTEw7CisJCQkJb3B0aW9uLT5nZW4gPSBv cHRfc3BlYzsKKwkJCQlwYXJzZV9vbmVfb3B0aW9uKG9wdGlvbiwgdmFsaWRhdGUpOworCQkJ CWlzX3NldFtpXSA9IHRydWU7CisJCQkJZm91bmQgPSB0cnVlOworCQkJCWJyZWFrOworCQkJ fQorCQl9CisJCWlmICh2YWxpZGF0ZSAmJiAhZm91bmQpCisJCXsKKwkJCWlmIChvcHRpb24t Pm5hbXNwYWNlKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RF X0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coInVucmVjb2duaXpl ZCBwYXJhbWV0ZXIgXCIlcy4lc1wiIiwKKwkJCQkJCQkJb3B0aW9uLT5uYW1zcGFjZSwgb3B0 aW9uLT5yYXdfbmFtZSkpKTsKKwkJCWVsc2UKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJ KGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJy bXNnKCJ1bnJlY29nbml6ZWQgcGFyYW1ldGVyIFwiJXNcIiIsCisJCQkJCQkJCW9wdGlvbi0+ cmF3X25hbWUpKSk7CisJCX0KKwkJcmVzdWx0ID0gbGFwcGVuZChyZXN1bHQsIG9wdGlvbik7 CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBwYXJzZV9vbmVfb3B0aW9uCisg KgkJRnVuY3Rpb24gdG8gcGFyc2UgYW5kIHZhbGlkYXRlIHNpbmdsZSBvcHRpb24uCisgKgor ICogU2VlIG9wdGlvbnNQYXJzZVJhd1ZhbHVlcyBmb3IgbW9yZSBpbmZvLgorICoKKyAqIExp bmsgdG8gT3B0aW9uIFNwZWMgZm9yIHRoZSBvcHRpb24gaXMgZW1iZWRkZWQgaW50byAib3B0 aW9uX3ZhbHVlIgorICovCitzdGF0aWMgdm9pZAorcGFyc2Vfb25lX29wdGlvbihvcHRpb25f dmFsdWUgKm9wdGlvbiwgYm9vbCB2YWxpZGF0ZSkKK3sKKwljaGFyCSAgICp2YWx1ZTsKKwli b29sCQlwYXJzZWQ7CisKKwl2YWx1ZSA9IG9wdGlvbi0+cmF3X3ZhbHVlOworCisJc3dpdGNo IChvcHRpb24tPmdlbi0+dHlwZSkKKwl7CisJCWNhc2UgT1BUSU9OX1RZUEVfQk9PTDoKKwkJ CXsKKwkJCQlwYXJzZWQgPSBwYXJzZV9ib29sKHZhbHVlLCAmb3B0aW9uLT52YWx1ZXMuYm9v bF92YWwpOworCQkJCWlmICh2YWxpZGF0ZSAmJiAhcGFyc2VkKQorCQkJCQllcmVwb3J0KEVS Uk9SLAorCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUp LAorCQkJCQkJCSBlcnJtc2coImludmFsaWQgdmFsdWUgZm9yIGJvb2xlYW4gb3B0aW9uIFwi JXNcIjogJXMiLAorCQkJCQkJCQkJb3B0aW9uLT5nZW4tPm5hbWUsIHZhbHVlKSkpOworCQkJ fQorCQkJYnJlYWs7CisJCWNhc2UgT1BUSU9OX1RZUEVfSU5UOgorCQkJeworCQkJCW9wdGlv bl9zcGVjX2ludCAqb3B0aW50ID0KKwkJCQkob3B0aW9uX3NwZWNfaW50ICopIG9wdGlvbi0+ Z2VuOworCisJCQkJcGFyc2VkID0gcGFyc2VfaW50KHZhbHVlLCAmb3B0aW9uLT52YWx1ZXMu aW50X3ZhbCwgMCwgTlVMTCk7CisJCQkJaWYgKHZhbGlkYXRlICYmICFwYXJzZWQpCisJCQkJ CWVyZXBvcnQoRVJST1IsCisJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFN RVRFUl9WQUxVRSksCisJCQkJCQkJIGVycm1zZygiaW52YWxpZCB2YWx1ZSBmb3IgaW50ZWdl ciBvcHRpb24gXCIlc1wiOiAlcyIsCisJCQkJCQkJCQlvcHRpb24tPmdlbi0+bmFtZSwgdmFs dWUpKSk7CisJCQkJaWYgKHZhbGlkYXRlICYmIChvcHRpb24tPnZhbHVlcy5pbnRfdmFsIDwg b3B0aW50LT5taW4gfHwKKwkJCQkJCQkJIG9wdGlvbi0+dmFsdWVzLmludF92YWwgPiBvcHRp bnQtPm1heCkpCisJCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJKGVycmNvZGUoRVJSQ09E RV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkJIGVycm1zZygidmFsdWUgJXMg b3V0IG9mIGJvdW5kcyBmb3Igb3B0aW9uIFwiJXNcIiIsCisJCQkJCQkJCQl2YWx1ZSwgb3B0 aW9uLT5nZW4tPm5hbWUpLAorCQkJCQkJCSBlcnJkZXRhaWwoIlZhbGlkIHZhbHVlcyBhcmUg YmV0d2VlbiBcIiVkXCIgYW5kIFwiJWRcIi4iLAorCQkJCQkJCQkJICAgb3B0aW50LT5taW4s IG9wdGludC0+bWF4KSkpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgT1BUSU9OX1RZUEVf UkVBTDoKKwkJCXsKKwkJCQlvcHRpb25fc3BlY19yZWFsICpvcHRyZWFsID0KKwkJCQkob3B0 aW9uX3NwZWNfcmVhbCAqKSBvcHRpb24tPmdlbjsKKworCQkJCXBhcnNlZCA9IHBhcnNlX3Jl YWwodmFsdWUsICZvcHRpb24tPnZhbHVlcy5yZWFsX3ZhbCwgMCwgTlVMTCk7CisJCQkJaWYg KHZhbGlkYXRlICYmICFwYXJzZWQpCisJCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJKGVy cmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkJIGVycm1z ZygiaW52YWxpZCB2YWx1ZSBmb3IgZmxvYXRpbmcgcG9pbnQgb3B0aW9uIFwiJXNcIjogJXMi LAorCQkJCQkJCQkJb3B0aW9uLT5nZW4tPm5hbWUsIHZhbHVlKSkpOworCQkJCWlmICh2YWxp ZGF0ZSAmJiAob3B0aW9uLT52YWx1ZXMucmVhbF92YWwgPCBvcHRyZWFsLT5taW4gfHwKKwkJ CQkJCQkJIG9wdGlvbi0+dmFsdWVzLnJlYWxfdmFsID4gb3B0cmVhbC0+bWF4KSkKKwkJCQkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1F VEVSX1ZBTFVFKSwKKwkJCQkJCQkgZXJybXNnKCJ2YWx1ZSAlcyBvdXQgb2YgYm91bmRzIGZv ciBvcHRpb24gXCIlc1wiIiwKKwkJCQkJCQkJCXZhbHVlLCBvcHRpb24tPmdlbi0+bmFtZSks CisJCQkJCQkJIGVycmRldGFpbCgiVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIFwiJWZcIiBh bmQgXCIlZlwiLiIsCisJCQkJCQkJCQkgICBvcHRyZWFsLT5taW4sIG9wdHJlYWwtPm1heCkp KTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIE9QVElPTl9UWVBFX0VOVU06CisJCQl7CisJ CQkJb3B0aW9uX3NwZWNfZW51bSAqb3B0ZW51bSA9CisJCQkJKG9wdGlvbl9zcGVjX2VudW0g Kikgb3B0aW9uLT5nZW47CisJCQkJb3B0X2VudW1fZWx0X2RlZiAqZWx0OworCisJCQkJcGFy c2VkID0gZmFsc2U7CisJCQkJZm9yIChlbHQgPSBvcHRlbnVtLT5tZW1iZXJzOyBlbHQtPnN0 cmluZ192YWw7IGVsdCsrKQorCQkJCXsKKwkJCQkJaWYgKHN0cmNtcCh2YWx1ZSwgZWx0LT5z dHJpbmdfdmFsKSA9PSAwKQorCQkJCQl7CisJCQkJCQlvcHRpb24tPnZhbHVlcy5lbnVtX3Zh bCA9IGVsdC0+c3ltYm9sX3ZhbDsKKwkJCQkJCXBhcnNlZCA9IHRydWU7CisJCQkJCQlicmVh azsKKwkJCQkJfQorCQkJCX0KKwkJCQlpZiAoIXBhcnNlZCkKKwkJCQkJZXJlcG9ydChFUlJP UiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAor CQkJCQkJIGVycm1zZygiaW52YWxpZCB2YWx1ZSBmb3IgZW51bSBvcHRpb24gXCIlc1wiOiAl cyIsCisJCQkJCQkJCW9wdGlvbi0+Z2VuLT5uYW1lLCB2YWx1ZSksCisJCQkJCQkgb3B0ZW51 bS0+ZGV0YWlsbXNnID8KKwkJCQkJCSBlcnJkZXRhaWxfaW50ZXJuYWwoIiVzIiwgXyhvcHRl bnVtLT5kZXRhaWxtc2cpKSA6IDApKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIE9QVElP Tl9UWVBFX1NUUklORzoKKwkJCXsKKwkJCQlvcHRpb25fc3BlY19zdHJpbmcgKm9wdHN0cmlu ZyA9CisJCQkJKG9wdGlvbl9zcGVjX3N0cmluZyAqKSBvcHRpb24tPmdlbjsKKworCQkJCW9w dGlvbi0+dmFsdWVzLnN0cmluZ192YWwgPSB2YWx1ZTsKKwkJCQlpZiAodmFsaWRhdGUgJiYg b3B0c3RyaW5nLT52YWxpZGF0ZV9jYikKKwkJCQkJKG9wdHN0cmluZy0+dmFsaWRhdGVfY2Ip ICh2YWx1ZSk7CisJCQkJcGFyc2VkID0gdHJ1ZTsKKwkJCX0KKwkJCWJyZWFrOworCQlkZWZh dWx0OgorCQkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIHJlbG9wdGlvbiB0eXBlICVkIiwg b3B0aW9uLT5nZW4tPnR5cGUpOworCQkJcGFyc2VkID0gdHJ1ZTsJCS8qIHF1aWV0IGNvbXBp bGVyICovCisJCQlicmVhazsKKwl9CisJaWYgKHZhbGlkYXRlICYmIG9wdGlvbi0+Z2VuLT5w b3N0dmFsaWRhdGVfZm4pCisJCW9wdGlvbi0+Z2VuLT5wb3N0dmFsaWRhdGVfZm4ob3B0aW9u KTsKKworCWlmIChwYXJzZWQpCisJCW9wdGlvbi0+c3RhdHVzID0gT1BUSU9OX1ZBTFVFX1NU QVRVU19QQVJTRUQ7CisKK30KKworLyoKKyAqIG9wdGlvbnNBbGxvY2F0ZUJ5dGVhCisgKgkJ QWxsb2NhdGVzIG1lbW9yeSBmb3IgQnl0ZWEgb3B0aW9ucyByZXByZXNlbnRhdGlvbgorICoK KyAqIFdlIG5lZWQgc3BlY2lhbCBmdW5jdGlvbiBmb3IgdGhpcywgYXMgc3RyaW5nIG9wdGlv biB2YWx1ZXMgYXJlIGVtYmVkZGVkIGludG8KKyAqIEJ5dGVhIG9iamVjdCwgc3RvcmVkIGF0 IHRoZSByZWFyIHBhcnQgb2YgdGhlIG1lbW9yeSBjaHVuay4gVGh1cyB3ZSBuZWVkIHRvCisg KiBhbGxvY2F0ZSBleHRyYSBtZW1vcnksIHNvIGFsbCBzdHJpbmcgdmFsdWVzIHdvdWxkIGZp dCBpbi4gVGhpcyBmdW5jdGlvbgorICogY2FsY3VsYXRlcyByZXF1aXJlZCBzaXplIGFuZCBk byBhbGxvY2F0aW9uLgorICoKKyAqIFNlZSAiT1BUSU9OIFNUUklORyBWQUxVRSBOT1RJT04i IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUgZm9yIGJldHRlcgorICogdW5kZXJzdGFu ZGluZy4KKyAqLworc3RhdGljIHZvaWQgKgorb3B0aW9uc0FsbG9jYXRlQnl0ZWEob3B0aW9u c19zcGVjX3NldCAqc3BlY19zZXQsIExpc3QgKm9wdGlvbnMpCit7CisJU2l6ZQkJc2l6ZTsK KwlpbnQJCQlpOworCUxpc3RDZWxsICAgKmNlbGw7CisJaW50CQkJbGVuZ3RoOworCXZvaWQJ ICAgKnJlczsKKworCXNpemUgPSBzcGVjX3NldC0+c3RydWN0X3NpemU7CisKKwkvKiBDYWxj dWxhdGUgc2l6ZSBuZWVkZWQgdG8gc3RvcmUgYWxsIHN0cmluZyB2YWx1ZXMgZm9yIHRoaXMg b3B0aW9uICovCisJZm9yIChpID0gMDsgaSA8IHNwZWNfc2V0LT5udW07IGkrKykKKwl7CisJ CW9wdGlvbl9zcGVjX2Jhc2ljICpvcHRfc3BlYyA9IHNwZWNfc2V0LT5kZWZpbml0aW9uc1tp XTsKKwkJb3B0aW9uX3NwZWNfc3RyaW5nICpvcHRfc3BlY19zdHI7CisJCWJvb2wJCWZvdW5k ID0gZmFsc2U7CisJCW9wdGlvbl92YWx1ZSAqb3B0aW9uOworCQljb25zdCBjaGFyICp2YWwg PSBOVUxMOworCisJCS8qIE5vdCBpbnRlcmVzdGVkIGluIG5vbi1zdHJpbmcgb3B0aW9ucywg c2tpcHBpbmcgKi8KKwkJaWYgKG9wdF9zcGVjLT50eXBlICE9IE9QVElPTl9UWVBFX1NUUklO RykKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIFRyeWluZyB0byBmaW5kIG9wdGlvbl92 YWx1ZSB0aGF0IHJlZmVyZW5jZXMgb3B0X3NwZWMgZW50cnkKKwkJICovCisJCW9wdF9zcGVj X3N0ciA9IChvcHRpb25fc3BlY19zdHJpbmcgKikgb3B0X3NwZWM7CisJCWZvcmVhY2goY2Vs bCwgb3B0aW9ucykKKwkJeworCQkJb3B0aW9uID0gKG9wdGlvbl92YWx1ZSAqKSBsZmlyc3Qo Y2VsbCk7CisJCQlpZiAob3B0aW9uLT5zdGF0dXMgPT0gT1BUSU9OX1ZBTFVFX1NUQVRVU19Q QVJTRUQgJiYKKwkJCQlzdHJjbXAob3B0aW9uLT5nZW4tPm5hbWUsIG9wdF9zcGVjLT5uYW1l KSA9PSAwKQorCQkJeworCQkJCWZvdW5kID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJ fQorCQlpZiAoZm91bmQpCisJCQl2YWwgPSBvcHRpb24tPnZhbHVlcy5zdHJpbmdfdmFsOwor CQllbHNlCisJCQl2YWwgPSBvcHRfc3BlY19zdHItPmRlZmF1bHRfdmFsOworCisJCWlmIChv cHRfc3BlY19zdHItPmZpbGxfY2IpCisJCQlsZW5ndGggPSBvcHRfc3BlY19zdHItPmZpbGxf Y2IodmFsLCBOVUxMKTsKKwkJZWxzZSBpZiAodmFsKQorCQkJbGVuZ3RoID0gc3RybGVuKHZh bCkgKyAxOworCQllbHNlCisJCQlsZW5ndGggPSAwOwkJCS8qICJEZWZhdWx0IFZhbHVlIGlz IE5VTEwiIGNhc2UgKi8KKworCQkvKiBBZGQgdG90YWwgbGVuZ3RoIG9mIGVhY2ggc3RyaW5n IHZhbHVlcyB0byBiYXNpYyBzaXplICovCisJCXNpemUgKz0gbGVuZ3RoOworCX0KKworCXJl cyA9IHBhbGxvYzAoc2l6ZSk7CisJU0VUX1ZBUlNJWkUocmVzLCBzaXplKTsKKwlyZXR1cm4g cmVzOworfQorCisvKgorICogb3B0aW9uc1ZhbHVlc1RvQnl0ZWEKKyAqCQlDb252ZXJ0cyBv cHRpb25zIHZhbHVlcyBmcm9tIFZhbHVlIExpc3QgcmVwcmVzZW50YXRpb24gdG8gQnl0ZWEK KyAqCQlyZXByZXNlbnRhdGlvbi4KKyAqCisgKiBGaWxscyByZXN1bHRpbmcgQnl0ZWEgd2l0 aCBvcHRpb24gdmFsdWVzIGFjY29yZGluZyB0byBPcHRpb24gU2VjIFNldC4KKyAqCisgKiBG b3IgdW5kZXJzdGFuZGluZyBwcm9jZXNzaW5nIG9mIHRoZSBzdHJpbmcgb3B0aW9uIHBsZWFz ZSByZWFkICJPUFRJT04gU1RSSU5HCisgKiBWQUxVRSBOT1RJT04iIGF0IHRoZSBiZWdpbm5p bmcgb2YgdGhlIGZpbGUuCisgKi8KK2J5dGVhICoKK29wdGlvbnNWYWx1ZXNUb0J5dGVhKExp c3QgKm9wdGlvbnMsIG9wdGlvbnNfc3BlY19zZXQgKnNwZWNfc2V0KQoreworCWNoYXIJICAg KmRhdGE7CisJY2hhcgkgICAqc3RyaW5nX3ZhbHVlc19idWZmZXI7CisJaW50CQkJaTsKKwor CWRhdGEgPSBvcHRpb25zQWxsb2NhdGVCeXRlYShzcGVjX3NldCwgb3B0aW9ucyk7CisKKwkv KiBwbGFjZSBmb3Igc3RyaW5nIGRhdGEgc3RhcnRzIHJpZ2h0IGFmdGVyIG9yaWdpbmFsIHN0 cnVjdHVyZSAqLworCXN0cmluZ192YWx1ZXNfYnVmZmVyID0gZGF0YSArIHNwZWNfc2V0LT5z dHJ1Y3Rfc2l6ZTsKKworCWZvciAoaSA9IDA7IGkgPCBzcGVjX3NldC0+bnVtOyBpKyspCisJ eworCQlvcHRpb25fdmFsdWUgKmZvdW5kID0gTlVMTDsKKwkJTGlzdENlbGwgICAqY2VsbDsK KwkJY2hhcgkgICAqaXRlbV9wb3M7CisJCW9wdGlvbl9zcGVjX2Jhc2ljICpvcHRfc3BlYyA9 IHNwZWNfc2V0LT5kZWZpbml0aW9uc1tpXTsKKworCQlpZiAob3B0X3NwZWMtPnN0cnVjdF9v ZmZzZXQgPCAwKQorCQkJY29udGludWU7CQkJLyogVGhpcyBvcHRpb24gdmFsdWUgc2hvdWxk IG5vdCBiZSBzdG9yZWQgaW4KKwkJCQkJCQkJICogQnl0ZWEgZm9yIHNvbWUgcmVhc29uLiBN YXkgYmUgaXQgaXMKKwkJCQkJCQkJICogZGVwcmVjYXRlZCBhbmQgaGFzIHdhcm5pbmcgb3Ig ZXJyb3IgaW4KKwkJCQkJCQkJICogcG9zdHZhbGlkYXRlIGZ1bmN0aW9uICovCisKKwkJLyog Q2FsY3VsYXRlIHRoZSBwb3NpdGlvbiBvZiB0aGUgaXRlbSBpbnNpZGUgdGhlIHN0cnVjdHVy ZSAqLworCQlpdGVtX3BvcyA9IGRhdGEgKyBvcHRfc3BlYy0+c3RydWN0X29mZnNldDsKKwor CQkvKiBMb29raW5nIGZvciB0aGUgY29ycmVzcG9uZGluZyBvcHRpb24gZnJvbSBvcHRpb25z IGxpc3QgKi8KKwkJZm9yZWFjaChjZWxsLCBvcHRpb25zKQorCQl7CisJCQlvcHRpb25fdmFs dWUgKm9wdGlvbiA9IChvcHRpb25fdmFsdWUgKikgbGZpcnN0KGNlbGwpOworCisJCQlpZiAo b3B0aW9uLT5zdGF0dXMgPT0gT1BUSU9OX1ZBTFVFX1NUQVRVU19SQVcpCisJCQkJY29udGlu dWU7CS8qIHJhdyBjYW4gY29tZSBmcm9tIGRiLiBKdXN0IGlnbm9yZSB0aGVtIHRoZW4gKi8K KwkJCUFzc2VydChvcHRpb24tPnN0YXR1cyAhPSBPUFRJT05fVkFMVUVfU1RBVFVTX0VNUFRZ KTsKKworCQkJaWYgKHN0cmNtcChvcHRfc3BlYy0+bmFtZSwgb3B0aW9uLT5nZW4tPm5hbWUp ID09IDApCisJCQl7CisJCQkJZm91bmQgPSBvcHRpb247CisJCQkJYnJlYWs7CisJCQl9CisJ CX0KKwkJLyogd3JpdGluZyB0byB0aGUgcHJvcGVyIHBvc2l0aW9uIGVpdGhlciBvcHRpb24g dmFsdWUgb3IgZGVmYXVsdCB2YWwgKi8KKwkJc3dpdGNoIChvcHRfc3BlYy0+dHlwZSkKKwkJ eworCQkJY2FzZSBPUFRJT05fVFlQRV9CT09MOgorCQkJCSooYm9vbCAqKSBpdGVtX3BvcyA9 IGZvdW5kID8KKwkJCQkJZm91bmQtPnZhbHVlcy5ib29sX3ZhbCA6CisJCQkJCSgob3B0aW9u X3NwZWNfYm9vbCAqKSBvcHRfc3BlYyktPmRlZmF1bHRfdmFsOworCQkJCWJyZWFrOworCQkJ Y2FzZSBPUFRJT05fVFlQRV9JTlQ6CisJCQkJKihpbnQgKikgaXRlbV9wb3MgPSBmb3VuZCA/ CisJCQkJCWZvdW5kLT52YWx1ZXMuaW50X3ZhbCA6CisJCQkJCSgob3B0aW9uX3NwZWNfaW50 ICopIG9wdF9zcGVjKS0+ZGVmYXVsdF92YWw7CisJCQkJYnJlYWs7CisJCQljYXNlIE9QVElP Tl9UWVBFX1JFQUw6CisJCQkJKihkb3VibGUgKikgaXRlbV9wb3MgPSBmb3VuZCA/CisJCQkJ CWZvdW5kLT52YWx1ZXMucmVhbF92YWwgOgorCQkJCQkoKG9wdGlvbl9zcGVjX3JlYWwgKikg b3B0X3NwZWMpLT5kZWZhdWx0X3ZhbDsKKwkJCQlicmVhazsKKwkJCWNhc2UgT1BUSU9OX1RZ UEVfRU5VTToKKwkJCQkqKGludCAqKSBpdGVtX3BvcyA9IGZvdW5kID8KKwkJCQkJZm91bmQt PnZhbHVlcy5lbnVtX3ZhbCA6CisJCQkJCSgob3B0aW9uX3NwZWNfZW51bSAqKSBvcHRfc3Bl YyktPmRlZmF1bHRfdmFsOworCQkJCWJyZWFrOworCisJCQljYXNlIE9QVElPTl9UWVBFX1NU UklORzoKKwkJCQl7CisJCQkJCS8qCisJCQkJCSAqIEZvciBzdHJpbmcgb3B0aW9uczogd3Jp dGluZyBzdHJpbmcgdmFsdWUgYXQgdGhlIHN0cmluZworCQkJCQkgKiBidWZmZXIgYWZ0ZXIg dGhlIHN0cnVjdHVyZSwgYW5kIHN0b3JpbmcgYW5kIG9mZnNldCB0bworCQkJCQkgKiB0aGF0 IHZhbHVlCisJCQkJCSAqLworCQkJCQljaGFyCSAgICp2YWx1ZSA9IE5VTEw7CisJCQkJCW9w dGlvbl9zcGVjX3N0cmluZyAqb3B0X3NwZWNfc3RyID0KKwkJCQkJKG9wdGlvbl9zcGVjX3N0 cmluZyAqKSBvcHRfc3BlYzsKKworCQkJCQlpZiAoZm91bmQpCisJCQkJCQl2YWx1ZSA9IGZv dW5kLT52YWx1ZXMuc3RyaW5nX3ZhbDsKKwkJCQkJZWxzZQorCQkJCQkJdmFsdWUgPSBvcHRf c3BlY19zdHItPmRlZmF1bHRfdmFsOworCisJCQkJCWlmIChvcHRfc3BlY19zdHItPmZpbGxf Y2IpCisJCQkJCXsKKwkJCQkJCVNpemUJCXNpemUgPQorCQkJCQkJb3B0X3NwZWNfc3RyLT5m aWxsX2NiKHZhbHVlLCBzdHJpbmdfdmFsdWVzX2J1ZmZlcik7CisKKwkJCQkJCWlmIChzaXpl KQorCQkJCQkJeworCQkJCQkJCSooaW50ICopIGl0ZW1fcG9zID0gc3RyaW5nX3ZhbHVlc19i dWZmZXIgLSBkYXRhOworCQkJCQkJCXN0cmluZ192YWx1ZXNfYnVmZmVyICs9IHNpemU7CisJ CQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQkJKihpbnQgKikgaXRlbV9wb3MgPQorCQkJCQkJ CQlPUFRJT05fU1RSSU5HX1ZBTFVFX05PVF9TRVRfT0ZGU0VUOworCQkJCQl9CisJCQkJCWVs c2UKKwkJCQkJeworCQkJCQkJKihpbnQgKikgaXRlbV9wb3MgPSB2YWx1ZSA/CisJCQkJCQkJ c3RyaW5nX3ZhbHVlc19idWZmZXIgLSBkYXRhIDoKKwkJCQkJCQlPUFRJT05fU1RSSU5HX1ZB TFVFX05PVF9TRVRfT0ZGU0VUOworCQkJCQkJaWYgKHZhbHVlKQorCQkJCQkJeworCQkJCQkJ CXN0cmNweShzdHJpbmdfdmFsdWVzX2J1ZmZlciwgdmFsdWUpOworCQkJCQkJCXN0cmluZ192 YWx1ZXNfYnVmZmVyICs9IHN0cmxlbih2YWx1ZSkgKyAxOworCQkJCQkJfQorCQkJCQl9CisJ CQkJfQorCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQllbG9nKEVSUk9SLCAidW5zdXBw b3J0ZWQgcmVsb3B0aW9uIHR5cGUgJWQiLAorCQkJCQkgb3B0X3NwZWMtPnR5cGUpOworCQkJ CWJyZWFrOworCQl9CisJfQorCXJldHVybiAodm9pZCAqKSBkYXRhOworfQorCisvKgorICog b3B0aW9uRGVmTGlzdFRvVGV4dEFycmF5CisgKgkJQ29udmVydHMgb3B0aW9ucyBmcm9tIGRl Zkxpc3QgdG8gVEVYVFtdIHJlcHJlc2VudGF0aW9uLgorICoKKyAqIFVzZWQgd2hlbiBuZXcg cmVsYXRpb24gKG9yIG90aGVyIG9iamVjdCkgaXMgY3JlYXRlZC4gZGVmTGlzdCBjb21lcyBm cm9tCisgKiBTUUwgc3ludGF4IHBhcnNlciwgVEVYVFtdIGdvZXMgdG8gREIgc3RvcmFnZS4g T3B0aW9ucyBhcmUgYWx3YXlzIHZhbGlkYXRlZAorICogd2hpbGUgY29udmVyc2lvbi4KKyAq LworRGF0dW0KK29wdGlvbkRlZkxpc3RUb1RleHRBcnJheShvcHRpb25zX3NwZWNfc2V0ICpz cGVjX3NldCwgTGlzdCAqZGVmTGlzdCkKK3sKKwlEYXR1bQkJcmVzdWx0OworCUxpc3QJICAg Km5ld192YWx1ZXM7CisKKwkvKiBQYXJzZSBhbmQgdmFsaWRhdGUgbmV3IHZhbHVlcyAqLwor CW5ld192YWx1ZXMgPSBvcHRpb25zRGVmTGlzdFRvUmF3VmFsdWVzKGRlZkxpc3QsIGZhbHNl KTsKKwluZXdfdmFsdWVzID0gb3B0aW9uc1BhcnNlUmF3VmFsdWVzKG5ld192YWx1ZXMsIHNw ZWNfc2V0LCB0cnVlKTsKKworCS8qIFNvbWUgY2hlY2tzIGNhbiBiZSBkb25lIGluIHBvc3Rw cm9jZXNzX2Z1biwgd2Ugc2hvdWxkIGNhbGwgaXQgKi8KKwlpZiAoc3BlY19zZXQtPnBvc3Rw cm9jZXNzX2Z1bikKKwl7CisJCWJ5dGVhCSAgICpkYXRhOworCQlpZiAoZGVmTGlzdCkKKwkJ CWRhdGEgPSBvcHRpb25zVmFsdWVzVG9CeXRlYShuZXdfdmFsdWVzLCBzcGVjX3NldCk7CisJ CWVsc2UKKwkJCWRhdGEgPSBOVUxMOworCisJCXNwZWNfc2V0LT5wb3N0cHJvY2Vzc19mdW4o ZGF0YSwgdHJ1ZSk7CisJCWlmIChkYXRhKSBwZnJlZShkYXRhKTsKKwl9CisJcmVzdWx0ID0g b3B0aW9uc1ZhbHVlc1RvVGV4dEFycmF5KG5ld192YWx1ZXMpOworCXJldHVybiByZXN1bHQ7 Cit9CisKKy8qCisgKiBvcHRpb25zVXBkYXRlVGV4QXJyYXlXaXRoRGVmTGlzdAorICogCQlN b2RpZmllcyBvbGRPcHRpb25zIHZhbHVlcyAoaW4gVEVYVFtdIHJlcHJlc2VudGF0aW9uKSB3 aXRoIGRlZkxpc3QKKyAqIAkJdmFsdWVzLgorICoKKyAqIE9sZCB2YWx1ZXMgYXJlIGFwcGVu ZWQgb3IgcmVwbGFjZWQgd2l0aCBuZXcgdmFsdWVzIGlmIGRvX3Jlc2V0IGZsYWcgaXMgc2V0 CisgKiB0byBmYWxzZS4gSWYgZG9fcmVzZXQgaXMgc2V0IHRvIHRydWUsIGRlZkxpc3Qgc3Bl Y2lmeSB0aGUgbGlzdCBvZiB0aGUgb3B0aW9ucworICogdGhhdCBzaG91bGQgYmUgcmVtb3Zl ZCBmcm9tIG9yaWdpbmFsIGxpc3QuCisgKi8KKworRGF0dW0KK29wdGlvbnNVcGRhdGVUZXhB cnJheVdpdGhEZWZMaXN0KG9wdGlvbnNfc3BlY19zZXQgKnNwZWNfc2V0LCBEYXR1bSBvbGRP cHRpb25zLAorCQkJCQkJCQkgTGlzdCAqZGVmTGlzdCwgYm9vbCBkb19yZXNldCkKK3sKKwlE YXR1bQkJcmVzdWx0OworCUxpc3QJICAgKm5ld192YWx1ZXM7CisJTGlzdAkgICAqb2xkX3Zh bHVlczsKKwlMaXN0CSAgICptZXJnZWRfdmFsdWVzOworCisJLyoKKwkgKiBQYXJzZSBhbmQg dmFsaWRhdGUgTmV3IHZhbHVlcworCSAqLworCW5ld192YWx1ZXMgPSBvcHRpb25zRGVmTGlz dFRvUmF3VmFsdWVzKGRlZkxpc3QsIGRvX3Jlc2V0KTsKKwlpZiAoIWRvX3Jlc2V0KQorCQlu ZXdfdmFsdWVzID0gb3B0aW9uc1BhcnNlUmF3VmFsdWVzKG5ld192YWx1ZXMsIHNwZWNfc2V0 LCB0cnVlKTsKKworCWlmIChQb2ludGVySXNWYWxpZChEYXR1bUdldFBvaW50ZXIob2xkT3B0 aW9ucykpKQorCXsKKwkJb2xkX3ZhbHVlcyA9IG9wdGlvbnNUZXh0QXJyYXlUb1Jhd1ZhbHVl cyhvbGRPcHRpb25zKTsKKwkJbWVyZ2VkX3ZhbHVlcyA9IG9wdGlvbnNNZXJnZU9wdGlvblZh bHVlcyhvbGRfdmFsdWVzLCBuZXdfdmFsdWVzKTsKKwl9CisJZWxzZQorCXsKKwkJaWYgKGRv X3Jlc2V0KQorCQkJbWVyZ2VkX3ZhbHVlcyA9IE5VTEw7CS8qIHJldHVybiBub3RoaW5nICov CisJCWVsc2UKKwkJCW1lcmdlZF92YWx1ZXMgPSBuZXdfdmFsdWVzOworCX0KKworCS8qCisJ ICogSWYgd2UgaGF2ZSBwb3N0cHJvY2Vzc19mdW4gZnVuY3Rpb24gZGVmaW5lZCBpbiBzcGVj X3NldCwgdGhlbiB0aGVyZQorCSAqIG1pZ2h0IGJlIHNvbWUgY3VzdG9tIG9wdGlvbnMgY2hl Y2tzIHRoZXJlLCB3aXRoIGVycm9yIHRocm93aW5nLiBTbyB3ZQorCSAqIHNob3VsZCBkbyBp dCBoZXJlIHRvIHRocm93IHRoZXNlIGVycm9ycyB3aGlsZSBDUkVBVGluZyBvciBBTFRFUmlu ZworCSAqIG9wdGlvbnMKKwkgKi8KKwlpZiAoc3BlY19zZXQtPnBvc3Rwcm9jZXNzX2Z1bikK Kwl7CisJCWJ5dGVhCSAgICpkYXRhID0gb3B0aW9uc1ZhbHVlc1RvQnl0ZWEobWVyZ2VkX3Zh bHVlcywgc3BlY19zZXQpOworCisJCXNwZWNfc2V0LT5wb3N0cHJvY2Vzc19mdW4oZGF0YSwg dHJ1ZSk7CisJCXBmcmVlKGRhdGEpOworCX0KKworCS8qCisJICogQ29udmVydCBvcHRpb25z IHRvIFRleHRBcnJheSBmb3JtYXQgc28gY2FsbGVyIGNhbiBzdG9yZSB0aGVtIGludG8KKwkg KiBkYXRhYmFzZQorCSAqLworCXJlc3VsdCA9IG9wdGlvbnNWYWx1ZXNUb1RleHRBcnJheSht ZXJnZWRfdmFsdWVzKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogb3B0aW9uc1Rl eHRBcnJheVRvQnl0ZWEKKyAqCQlDb252ZXJ0IG9wdGlvbnMgdmFsdWVzIGZyb20gVEVYVFtd IHJlcHJlc2VudGF0aW9uIGludG8gQnl0ZWEKKyAqCQlyZXByZXNlbnRhdGlvbgorICoKKyAq IFRoaXMgZnVuY3Rpb24gdXNlcyBvdGhlciBjb252ZXJzaW9uIGZ1bmN0aW9uIHRvIGdldCBk ZXNpcmVkIHJlc3VsdC4KKyAqLworYnl0ZWEgKgorb3B0aW9uc1RleHRBcnJheVRvQnl0ZWEo b3B0aW9uc19zcGVjX3NldCAqc3BlY19zZXQsIERhdHVtIGRhdGEsIGJvb2wgdmFsaWRhdGUp Cit7CisJTGlzdAkgICAqdmFsdWVzOworCWJ5dGVhCSAgICpvcHRpb25zOworCisJdmFsdWVz ID0gb3B0aW9uc1RleHRBcnJheVRvUmF3VmFsdWVzKGRhdGEpOworCXZhbHVlcyA9IG9wdGlv bnNQYXJzZVJhd1ZhbHVlcyh2YWx1ZXMsIHNwZWNfc2V0LCB2YWxpZGF0ZSk7CisJb3B0aW9u cyA9IG9wdGlvbnNWYWx1ZXNUb0J5dGVhKHZhbHVlcywgc3BlY19zZXQpOworCisJaWYgKHNw ZWNfc2V0LT5wb3N0cHJvY2Vzc19mdW4pCisJCXNwZWNfc2V0LT5wb3N0cHJvY2Vzc19mdW4o b3B0aW9ucywgZmFsc2UpOworCXJldHVybiBvcHRpb25zOworfQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9yZWxvcHRpb25zLmMgYi9zcmMvYmFja2VuZC9hY2Nl c3MvY29tbW9uL3JlbG9wdGlvbnMuYwppbmRleCBjMzJiYjdkMmI2NC4uNmQ3NTFmMzFjODYg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vcmVsb3B0aW9ucy5jCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vcmVsb3B0aW9ucy5jCkBAIC0xLDcgKzEs NyBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgogICogcmVsb3B0aW9ucy5jCi0gKgkg IENvcmUgc3VwcG9ydCBmb3IgcmVsYXRpb24gb3B0aW9ucyAocGdfY2xhc3MucmVsb3B0aW9u cykKKyAqCSAgU3VwcG9ydCBmb3IgcmVsYXRpb24gb3B0aW9ucyAocGdfY2xhc3MucmVsb3B0 aW9ucykKICAqCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyMywgUG9zdGdy ZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKICAqIFBvcnRpb25zIENvcHlyaWdodCAo YykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCkBAIC0x NywxMyArMTcsMTAgQEAKIAogI2luY2x1ZGUgPGZsb2F0Lmg+CiAKLSNpbmNsdWRlICJhY2Nl c3MvZ2lzdF9wcml2YXRlLmgiCi0jaW5jbHVkZSAiYWNjZXNzL2hhc2guaCIKICNpbmNsdWRl ICJhY2Nlc3MvaGVhcHRvYXN0LmgiCiAjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5o IgotI2luY2x1ZGUgImFjY2Vzcy9uYnRyZWUuaCIKICNpbmNsdWRlICJhY2Nlc3MvcmVsb3B0 aW9ucy5oIgotI2luY2x1ZGUgImFjY2Vzcy9zcGdpc3RfcHJpdmF0ZS5oIgorI2luY2x1ZGUg ImFjY2Vzcy9vcHRpb25zLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCiAjaW5j bHVkZSAiY29tbWFuZHMvZGVmcmVtLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvdGFibGVzcGFj ZS5oIgpAQCAtMzYsNiArMzMsNyBAQAogI2luY2x1ZGUgInV0aWxzL2d1Yy5oIgogI2luY2x1 ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCisjaW5jbHVk ZSAic3RvcmFnZS9idWZtZ3IuaCIKIAogLyoKICAqIENvbnRlbnRzIG9mIHBnX2NsYXNzLnJl bG9wdGlvbnMKQEAgLTkzLDM4OSArOTEsOCBAQAogICogdmFsdWUgaGFzIG5vIGVmZmVjdCB1 bnRpbCB0aGUgbmV4dCBWQUNVVU0sIHNvIG5vIG5lZWQgZm9yIHN0cm9uZ2VyIGxvY2suCiAg Ki8KIAotc3RhdGljIHJlbG9wdF9ib29sIGJvb2xSZWxPcHRzW10gPQotewotCXsKLQkJewot CQkJImF1dG9zdW1tYXJpemUiLAotCQkJIkVuYWJsZXMgYXV0b21hdGljIHN1bW1hcml6YXRp b24gb24gdGhpcyBCUklOIGluZGV4IiwKLQkJCVJFTE9QVF9LSU5EX0JSSU4sCi0JCQlBY2Nl c3NFeGNsdXNpdmVMb2NrCi0JCX0sCi0JCWZhbHNlCi0JfSwKLQl7Ci0JCXsKLQkJCSJhdXRv dmFjdXVtX2VuYWJsZWQiLAotCQkJIkVuYWJsZXMgYXV0b3ZhY3V1bSBpbiB0aGlzIHJlbGF0 aW9uIiwKLQkJCVJFTE9QVF9LSU5EX0hFQVAgfCBSRUxPUFRfS0lORF9UT0FTVCwKLQkJCVNo YXJlVXBkYXRlRXhjbHVzaXZlTG9jawotCQl9LAotCQl0cnVlCi0JfSwKLQl7Ci0JCXsKLQkJ CSJ1c2VyX2NhdGFsb2dfdGFibGUiLAotCQkJIkRlY2xhcmUgYSB0YWJsZSBhcyBhbiBhZGRp dGlvbmFsIGNhdGFsb2cgdGFibGUsIGUuZy4gZm9yIHRoZSBwdXJwb3NlIG9mIGxvZ2ljYWwg cmVwbGljYXRpb24iLAotCQkJUkVMT1BUX0tJTkRfSEVBUCwKLQkJCUFjY2Vzc0V4Y2x1c2l2 ZUxvY2sKLQkJfSwKLQkJZmFsc2UKLQl9LAotCXsKLQkJewotCQkJImZhc3R1cGRhdGUiLAot CQkJIkVuYWJsZXMgXCJmYXN0IHVwZGF0ZVwiIGZlYXR1cmUgZm9yIHRoaXMgR0lOIGluZGV4 IiwKLQkJCVJFTE9QVF9LSU5EX0dJTiwKLQkJCUFjY2Vzc0V4Y2x1c2l2ZUxvY2sKLQkJfSwK LQkJdHJ1ZQotCX0sCi0JewotCQl7Ci0JCQkic2VjdXJpdHlfYmFycmllciIsCi0JCQkiVmll dyBhY3RzIGFzIGEgcm93IHNlY3VyaXR5IGJhcnJpZXIiLAotCQkJUkVMT1BUX0tJTkRfVklF VywKLQkJCUFjY2Vzc0V4Y2x1c2l2ZUxvY2sKLQkJfSwKLQkJZmFsc2UKLQl9LAotCXsKLQkJ ewotCQkJInNlY3VyaXR5X2ludm9rZXIiLAotCQkJIlByaXZpbGVnZXMgb24gdW5kZXJseWlu ZyByZWxhdGlvbnMgYXJlIGNoZWNrZWQgYXMgdGhlIGludm9raW5nIHVzZXIsIG5vdCB0aGUg dmlldyBvd25lciIsCi0JCQlSRUxPUFRfS0lORF9WSUVXLAotCQkJQWNjZXNzRXhjbHVzaXZl TG9jawotCQl9LAotCQlmYWxzZQotCX0sCi0JewotCQl7Ci0JCQkidmFjdXVtX3RydW5jYXRl IiwKLQkJCSJFbmFibGVzIHZhY3V1bSB0byB0cnVuY2F0ZSBlbXB0eSBwYWdlcyBhdCB0aGUg ZW5kIG9mIHRoaXMgdGFibGUiLAotCQkJUkVMT1BUX0tJTkRfSEVBUCB8IFJFTE9QVF9LSU5E X1RPQVNULAotCQkJU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrCi0JCX0sCi0JCXRydWUKLQl9 LAotCXsKLQkJewotCQkJImRlZHVwbGljYXRlX2l0ZW1zIiwKLQkJCSJFbmFibGVzIFwiZGVk dXBsaWNhdGUgaXRlbXNcIiBmZWF0dXJlIGZvciB0aGlzIGJ0cmVlIGluZGV4IiwKLQkJCVJF TE9QVF9LSU5EX0JUUkVFLAotCQkJU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrCS8qIHNpbmNl IGl0IGFwcGxpZXMgb25seSB0byBsYXRlcgotCQkJCQkJCQkJCSAqIGluc2VydHMgKi8KLQkJ fSwKLQkJdHJ1ZQotCX0sCi0JLyogbGlzdCB0ZXJtaW5hdG9yICovCi0Je3tOVUxMfX0KLX07 Ci0KLXN0YXRpYyByZWxvcHRfaW50IGludFJlbE9wdHNbXSA9Ci17Ci0JewotCQl7Ci0JCQki ZmlsbGZhY3RvciIsCi0JCQkiUGFja3MgdGFibGUgcGFnZXMgb25seSB0byB0aGlzIHBlcmNl bnRhZ2UiLAotCQkJUkVMT1BUX0tJTkRfSEVBUCwKLQkJCVNoYXJlVXBkYXRlRXhjbHVzaXZl TG9jawkvKiBzaW5jZSBpdCBhcHBsaWVzIG9ubHkgdG8gbGF0ZXIKLQkJCQkJCQkJCQkgKiBp bnNlcnRzICovCi0JCX0sCi0JCUhFQVBfREVGQVVMVF9GSUxMRkFDVE9SLCBIRUFQX01JTl9G SUxMRkFDVE9SLCAxMDAKLQl9LAotCXsKLQkJewotCQkJImZpbGxmYWN0b3IiLAotCQkJIlBh Y2tzIGJ0cmVlIGluZGV4IHBhZ2VzIG9ubHkgdG8gdGhpcyBwZXJjZW50YWdlIiwKLQkJCVJF TE9QVF9LSU5EX0JUUkVFLAotCQkJU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrCS8qIHNpbmNl IGl0IGFwcGxpZXMgb25seSB0byBsYXRlcgotCQkJCQkJCQkJCSAqIGluc2VydHMgKi8KLQkJ fSwKLQkJQlRSRUVfREVGQVVMVF9GSUxMRkFDVE9SLCBCVFJFRV9NSU5fRklMTEZBQ1RPUiwg MTAwCi0JfSwKLQl7Ci0JCXsKLQkJCSJmaWxsZmFjdG9yIiwKLQkJCSJQYWNrcyBoYXNoIGlu ZGV4IHBhZ2VzIG9ubHkgdG8gdGhpcyBwZXJjZW50YWdlIiwKLQkJCVJFTE9QVF9LSU5EX0hB U0gsCi0JCQlTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2sJLyogc2luY2UgaXQgYXBwbGllcyBv bmx5IHRvIGxhdGVyCi0JCQkJCQkJCQkJICogaW5zZXJ0cyAqLwotCQl9LAotCQlIQVNIX0RF RkFVTFRfRklMTEZBQ1RPUiwgSEFTSF9NSU5fRklMTEZBQ1RPUiwgMTAwCi0JfSwKLQl7Ci0J CXsKLQkJCSJmaWxsZmFjdG9yIiwKLQkJCSJQYWNrcyBnaXN0IGluZGV4IHBhZ2VzIG9ubHkg dG8gdGhpcyBwZXJjZW50YWdlIiwKLQkJCVJFTE9QVF9LSU5EX0dJU1QsCi0JCQlTaGFyZVVw ZGF0ZUV4Y2x1c2l2ZUxvY2sJLyogc2luY2UgaXQgYXBwbGllcyBvbmx5IHRvIGxhdGVyCi0J CQkJCQkJCQkJICogaW5zZXJ0cyAqLwotCQl9LAotCQlHSVNUX0RFRkFVTFRfRklMTEZBQ1RP UiwgR0lTVF9NSU5fRklMTEZBQ1RPUiwgMTAwCi0JfSwKLQl7Ci0JCXsKLQkJCSJmaWxsZmFj dG9yIiwKLQkJCSJQYWNrcyBzcGdpc3QgaW5kZXggcGFnZXMgb25seSB0byB0aGlzIHBlcmNl bnRhZ2UiLAotCQkJUkVMT1BUX0tJTkRfU1BHSVNULAotCQkJU2hhcmVVcGRhdGVFeGNsdXNp dmVMb2NrCS8qIHNpbmNlIGl0IGFwcGxpZXMgb25seSB0byBsYXRlcgotCQkJCQkJCQkJCSAq IGluc2VydHMgKi8KLQkJfSwKLQkJU1BHSVNUX0RFRkFVTFRfRklMTEZBQ1RPUiwgU1BHSVNU X01JTl9GSUxMRkFDVE9SLCAxMDAKLQl9LAotCXsKLQkJewotCQkJImF1dG92YWN1dW1fdmFj dXVtX3RocmVzaG9sZCIsCi0JCQkiTWluaW11bSBudW1iZXIgb2YgdHVwbGUgdXBkYXRlcyBv ciBkZWxldGVzIHByaW9yIHRvIHZhY3V1bSIsCi0JCQlSRUxPUFRfS0lORF9IRUFQIHwgUkVM T1BUX0tJTkRfVE9BU1QsCi0JCQlTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2sKLQkJfSwKLQkJ LTEsIDAsIElOVF9NQVgKLQl9LAotCXsKLQkJewotCQkJImF1dG92YWN1dW1fdmFjdXVtX2lu c2VydF90aHJlc2hvbGQiLAotCQkJIk1pbmltdW0gbnVtYmVyIG9mIHR1cGxlIGluc2VydHMg cHJpb3IgdG8gdmFjdXVtLCBvciAtMSB0byBkaXNhYmxlIGluc2VydCB2YWN1dW1zIiwKLQkJ CVJFTE9QVF9LSU5EX0hFQVAgfCBSRUxPUFRfS0lORF9UT0FTVCwKLQkJCVNoYXJlVXBkYXRl RXhjbHVzaXZlTG9jawotCQl9LAotCQktMiwgLTEsIElOVF9NQVgKLQl9LAotCXsKLQkJewot CQkJImF1dG92YWN1dW1fYW5hbHl6ZV90aHJlc2hvbGQiLAotCQkJIk1pbmltdW0gbnVtYmVy IG9mIHR1cGxlIGluc2VydHMsIHVwZGF0ZXMgb3IgZGVsZXRlcyBwcmlvciB0byBhbmFseXpl IiwKLQkJCVJFTE9QVF9LSU5EX0hFQVAsCi0JCQlTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2sK LQkJfSwKLQkJLTEsIDAsIElOVF9NQVgKLQl9LAotCXsKLQkJewotCQkJImF1dG92YWN1dW1f dmFjdXVtX2Nvc3RfbGltaXQiLAotCQkJIlZhY3V1bSBjb3N0IGFtb3VudCBhdmFpbGFibGUg YmVmb3JlIG5hcHBpbmcsIGZvciBhdXRvdmFjdXVtIiwKLQkJCVJFTE9QVF9LSU5EX0hFQVAg fCBSRUxPUFRfS0lORF9UT0FTVCwKLQkJCVNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jawotCQl9 LAotCQktMSwgMSwgMTAwMDAKLQl9LAotCXsKLQkJewotCQkJImF1dG92YWN1dW1fZnJlZXpl X21pbl9hZ2UiLAotCQkJIk1pbmltdW0gYWdlIGF0IHdoaWNoIFZBQ1VVTSBzaG91bGQgZnJl ZXplIGEgdGFibGUgcm93LCBmb3IgYXV0b3ZhY3V1bSIsCi0JCQlSRUxPUFRfS0lORF9IRUFQ IHwgUkVMT1BUX0tJTkRfVE9BU1QsCi0JCQlTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2sKLQkJ fSwKLQkJLTEsIDAsIDEwMDAwMDAwMDAKLQl9LAotCXsKLQkJewotCQkJImF1dG92YWN1dW1f bXVsdGl4YWN0X2ZyZWV6ZV9taW5fYWdlIiwKLQkJCSJNaW5pbXVtIG11bHRpeGFjdCBhZ2Ug YXQgd2hpY2ggVkFDVVVNIHNob3VsZCBmcmVlemUgYSByb3cgbXVsdGl4YWN0J3MsIGZvciBh dXRvdmFjdXVtIiwKLQkJCVJFTE9QVF9LSU5EX0hFQVAgfCBSRUxPUFRfS0lORF9UT0FTVCwK LQkJCVNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jawotCQl9LAotCQktMSwgMCwgMTAwMDAwMDAw MAotCX0sCi0JewotCQl7Ci0JCQkiYXV0b3ZhY3V1bV9mcmVlemVfbWF4X2FnZSIsCi0JCQki QWdlIGF0IHdoaWNoIHRvIGF1dG92YWN1dW0gYSB0YWJsZSB0byBwcmV2ZW50IHRyYW5zYWN0 aW9uIElEIHdyYXBhcm91bmQiLAotCQkJUkVMT1BUX0tJTkRfSEVBUCB8IFJFTE9QVF9LSU5E X1RPQVNULAotCQkJU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrCi0JCX0sCi0JCS0xLCAxMDAw MDAsIDIwMDAwMDAwMDAKLQl9LAotCXsKLQkJewotCQkJImF1dG92YWN1dW1fbXVsdGl4YWN0 X2ZyZWV6ZV9tYXhfYWdlIiwKLQkJCSJNdWx0aXhhY3QgYWdlIGF0IHdoaWNoIHRvIGF1dG92 YWN1dW0gYSB0YWJsZSB0byBwcmV2ZW50IG11bHRpeGFjdCB3cmFwYXJvdW5kIiwKLQkJCVJF TE9QVF9LSU5EX0hFQVAgfCBSRUxPUFRfS0lORF9UT0FTVCwKLQkJCVNoYXJlVXBkYXRlRXhj bHVzaXZlTG9jawotCQl9LAotCQktMSwgMTAwMDAsIDIwMDAwMDAwMDAKLQl9LAotCXsKLQkJ ewotCQkJImF1dG92YWN1dW1fZnJlZXplX3RhYmxlX2FnZSIsCi0JCQkiQWdlIGF0IHdoaWNo IFZBQ1VVTSBzaG91bGQgcGVyZm9ybSBhIGZ1bGwgdGFibGUgc3dlZXAgdG8gZnJlZXplIHJv dyB2ZXJzaW9ucyIsCi0JCQlSRUxPUFRfS0lORF9IRUFQIHwgUkVMT1BUX0tJTkRfVE9BU1Qs Ci0JCQlTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2sKLQkJfSwgLTEsIDAsIDIwMDAwMDAwMDAK LQl9LAotCXsKLQkJewotCQkJImF1dG92YWN1dW1fbXVsdGl4YWN0X2ZyZWV6ZV90YWJsZV9h Z2UiLAotCQkJIkFnZSBvZiBtdWx0aXhhY3QgYXQgd2hpY2ggVkFDVVVNIHNob3VsZCBwZXJm b3JtIGEgZnVsbCB0YWJsZSBzd2VlcCB0byBmcmVlemUgcm93IHZlcnNpb25zIiwKLQkJCVJF TE9QVF9LSU5EX0hFQVAgfCBSRUxPUFRfS0lORF9UT0FTVCwKLQkJCVNoYXJlVXBkYXRlRXhj bHVzaXZlTG9jawotCQl9LCAtMSwgMCwgMjAwMDAwMDAwMAotCX0sCi0JewotCQl7Ci0JCQki bG9nX2F1dG92YWN1dW1fbWluX2R1cmF0aW9uIiwKLQkJCSJTZXRzIHRoZSBtaW5pbXVtIGV4 ZWN1dGlvbiB0aW1lIGFib3ZlIHdoaWNoIGF1dG92YWN1dW0gYWN0aW9ucyB3aWxsIGJlIGxv Z2dlZCIsCi0JCQlSRUxPUFRfS0lORF9IRUFQIHwgUkVMT1BUX0tJTkRfVE9BU1QsCi0JCQlT aGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2sKLQkJfSwKLQkJLTEsIC0xLCBJTlRfTUFYCi0JfSwK LQl7Ci0JCXsKLQkJCSJ0b2FzdF90dXBsZV90YXJnZXQiLAotCQkJIlNldHMgdGhlIHRhcmdl dCB0dXBsZSBsZW5ndGggYXQgd2hpY2ggZXh0ZXJuYWwgY29sdW1ucyB3aWxsIGJlIHRvYXN0 ZWQiLAotCQkJUkVMT1BUX0tJTkRfSEVBUCwKLQkJCVNoYXJlVXBkYXRlRXhjbHVzaXZlTG9j awotCQl9LAotCQlUT0FTVF9UVVBMRV9UQVJHRVQsIDEyOCwgVE9BU1RfVFVQTEVfVEFSR0VU X01BSU4KLQl9LAotCXsKLQkJewotCQkJInBhZ2VzX3Blcl9yYW5nZSIsCi0JCQkiTnVtYmVy IG9mIHBhZ2VzIHRoYXQgZWFjaCBwYWdlIHJhbmdlIGNvdmVycyBpbiBhIEJSSU4gaW5kZXgi LAotCQkJUkVMT1BUX0tJTkRfQlJJTiwKLQkJCUFjY2Vzc0V4Y2x1c2l2ZUxvY2sKLQkJfSwg MTI4LCAxLCAxMzEwNzIKLQl9LAotCXsKLQkJewotCQkJImdpbl9wZW5kaW5nX2xpc3RfbGlt aXQiLAotCQkJIk1heGltdW0gc2l6ZSBvZiB0aGUgcGVuZGluZyBsaXN0IGZvciB0aGlzIEdJ TiBpbmRleCwgaW4ga2lsb2J5dGVzLiIsCi0JCQlSRUxPUFRfS0lORF9HSU4sCi0JCQlBY2Nl c3NFeGNsdXNpdmVMb2NrCi0JCX0sCi0JCS0xLCA2NCwgTUFYX0tJTE9CWVRFUwotCX0sCi0J ewotCQl7Ci0JCQkiZWZmZWN0aXZlX2lvX2NvbmN1cnJlbmN5IiwKLQkJCSJOdW1iZXIgb2Yg c2ltdWx0YW5lb3VzIHJlcXVlc3RzIHRoYXQgY2FuIGJlIGhhbmRsZWQgZWZmaWNpZW50bHkg YnkgdGhlIGRpc2sgc3Vic3lzdGVtLiIsCi0JCQlSRUxPUFRfS0lORF9UQUJMRVNQQUNFLAot CQkJU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrCi0JCX0sCi0jaWZkZWYgVVNFX1BSRUZFVENI Ci0JCS0xLCAwLCBNQVhfSU9fQ09OQ1VSUkVOQ1kKLSNlbHNlCi0JCTAsIDAsIDAKLSNlbmRp ZgotCX0sCi0JewotCQl7Ci0JCQkibWFpbnRlbmFuY2VfaW9fY29uY3VycmVuY3kiLAotCQkJ Ik51bWJlciBvZiBzaW11bHRhbmVvdXMgcmVxdWVzdHMgdGhhdCBjYW4gYmUgaGFuZGxlZCBl ZmZpY2llbnRseSBieSB0aGUgZGlzayBzdWJzeXN0ZW0gZm9yIG1haW50ZW5hbmNlIHdvcmsu IiwKLQkJCVJFTE9QVF9LSU5EX1RBQkxFU1BBQ0UsCi0JCQlTaGFyZVVwZGF0ZUV4Y2x1c2l2 ZUxvY2sKLQkJfSwKLSNpZmRlZiBVU0VfUFJFRkVUQ0gKLQkJLTEsIDAsIE1BWF9JT19DT05D VVJSRU5DWQotI2Vsc2UKLQkJMCwgMCwgMAotI2VuZGlmCi0JfSwKLQl7Ci0JCXsKLQkJCSJw YXJhbGxlbF93b3JrZXJzIiwKLQkJCSJOdW1iZXIgb2YgcGFyYWxsZWwgcHJvY2Vzc2VzIHRo YXQgY2FuIGJlIHVzZWQgcGVyIGV4ZWN1dG9yIG5vZGUgZm9yIHRoaXMgcmVsYXRpb24uIiwK LQkJCVJFTE9QVF9LSU5EX0hFQVAsCi0JCQlTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2sKLQkJ fSwKLQkJLTEsIDAsIDEwMjQKLQl9LAotCi0JLyogbGlzdCB0ZXJtaW5hdG9yICovCi0Je3tO VUxMfX0KLX07Ci0KLXN0YXRpYyByZWxvcHRfcmVhbCByZWFsUmVsT3B0c1tdID0KLXsKLQl7 Ci0JCXsKLQkJCSJhdXRvdmFjdXVtX3ZhY3V1bV9jb3N0X2RlbGF5IiwKLQkJCSJWYWN1dW0g Y29zdCBkZWxheSBpbiBtaWxsaXNlY29uZHMsIGZvciBhdXRvdmFjdXVtIiwKLQkJCVJFTE9Q VF9LSU5EX0hFQVAgfCBSRUxPUFRfS0lORF9UT0FTVCwKLQkJCVNoYXJlVXBkYXRlRXhjbHVz aXZlTG9jawotCQl9LAotCQktMSwgMC4wLCAxMDAuMAotCX0sCi0JewotCQl7Ci0JCQkiYXV0 b3ZhY3V1bV92YWN1dW1fc2NhbGVfZmFjdG9yIiwKLQkJCSJOdW1iZXIgb2YgdHVwbGUgdXBk YXRlcyBvciBkZWxldGVzIHByaW9yIHRvIHZhY3V1bSBhcyBhIGZyYWN0aW9uIG9mIHJlbHR1 cGxlcyIsCi0JCQlSRUxPUFRfS0lORF9IRUFQIHwgUkVMT1BUX0tJTkRfVE9BU1QsCi0JCQlT aGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2sKLQkJfSwKLQkJLTEsIDAuMCwgMTAwLjAKLQl9LAot CXsKLQkJewotCQkJImF1dG92YWN1dW1fdmFjdXVtX2luc2VydF9zY2FsZV9mYWN0b3IiLAot CQkJIk51bWJlciBvZiB0dXBsZSBpbnNlcnRzIHByaW9yIHRvIHZhY3V1bSBhcyBhIGZyYWN0 aW9uIG9mIHJlbHR1cGxlcyIsCi0JCQlSRUxPUFRfS0lORF9IRUFQIHwgUkVMT1BUX0tJTkRf VE9BU1QsCi0JCQlTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2sKLQkJfSwKLQkJLTEsIDAuMCwg MTAwLjAKLQl9LAotCXsKLQkJewotCQkJImF1dG92YWN1dW1fYW5hbHl6ZV9zY2FsZV9mYWN0 b3IiLAotCQkJIk51bWJlciBvZiB0dXBsZSBpbnNlcnRzLCB1cGRhdGVzIG9yIGRlbGV0ZXMg cHJpb3IgdG8gYW5hbHl6ZSBhcyBhIGZyYWN0aW9uIG9mIHJlbHR1cGxlcyIsCi0JCQlSRUxP UFRfS0lORF9IRUFQLAotCQkJU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrCi0JCX0sCi0JCS0x LCAwLjAsIDEwMC4wCi0JfSwKLQl7Ci0JCXsKLQkJCSJzZXFfcGFnZV9jb3N0IiwKLQkJCSJT ZXRzIHRoZSBwbGFubmVyJ3MgZXN0aW1hdGUgb2YgdGhlIGNvc3Qgb2YgYSBzZXF1ZW50aWFs bHkgZmV0Y2hlZCBkaXNrIHBhZ2UuIiwKLQkJCVJFTE9QVF9LSU5EX1RBQkxFU1BBQ0UsCi0J CQlTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2sKLQkJfSwKLQkJLTEsIDAuMCwgREJMX01BWAot CX0sCi0JewotCQl7Ci0JCQkicmFuZG9tX3BhZ2VfY29zdCIsCi0JCQkiU2V0cyB0aGUgcGxh bm5lcidzIGVzdGltYXRlIG9mIHRoZSBjb3N0IG9mIGEgbm9uc2VxdWVudGlhbGx5IGZldGNo ZWQgZGlzayBwYWdlLiIsCi0JCQlSRUxPUFRfS0lORF9UQUJMRVNQQUNFLAotCQkJU2hhcmVV cGRhdGVFeGNsdXNpdmVMb2NrCi0JCX0sCi0JCS0xLCAwLjAsIERCTF9NQVgKLQl9LAotCXsK LQkJewotCQkJIm5fZGlzdGluY3QiLAotCQkJIlNldHMgdGhlIHBsYW5uZXIncyBlc3RpbWF0 ZSBvZiB0aGUgbnVtYmVyIG9mIGRpc3RpbmN0IHZhbHVlcyBhcHBlYXJpbmcgaW4gYSBjb2x1 bW4gKGV4Y2x1ZGluZyBjaGlsZCByZWxhdGlvbnMpLiIsCi0JCQlSRUxPUFRfS0lORF9BVFRS SUJVVEUsCi0JCQlTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2sKLQkJfSwKLQkJMCwgLTEuMCwg REJMX01BWAotCX0sCi0JewotCQl7Ci0JCQkibl9kaXN0aW5jdF9pbmhlcml0ZWQiLAotCQkJ IlNldHMgdGhlIHBsYW5uZXIncyBlc3RpbWF0ZSBvZiB0aGUgbnVtYmVyIG9mIGRpc3RpbmN0 IHZhbHVlcyBhcHBlYXJpbmcgaW4gYSBjb2x1bW4gKGluY2x1ZGluZyBjaGlsZCByZWxhdGlv bnMpLiIsCi0JCQlSRUxPUFRfS0lORF9BVFRSSUJVVEUsCi0JCQlTaGFyZVVwZGF0ZUV4Y2x1 c2l2ZUxvY2sKLQkJfSwKLQkJMCwgLTEuMCwgREJMX01BWAotCX0sCi0JewotCQl7Ci0JCQki dmFjdXVtX2NsZWFudXBfaW5kZXhfc2NhbGVfZmFjdG9yIiwKLQkJCSJEZXByZWNhdGVkIEIt VHJlZSBwYXJhbWV0ZXIuIiwKLQkJCVJFTE9QVF9LSU5EX0JUUkVFLAotCQkJU2hhcmVVcGRh dGVFeGNsdXNpdmVMb2NrCi0JCX0sCi0JCS0xLCAwLjAsIDFlMTAKLQl9LAotCS8qIGxpc3Qg dGVybWluYXRvciAqLwotCXt7TlVMTH19Ci19OwotCiAvKiB2YWx1ZXMgZnJvbSBTdGRSZE9w dEluZGV4Q2xlYW51cCAqLwotc3RhdGljIHJlbG9wdF9lbnVtX2VsdF9kZWYgU3RkUmRPcHRJ bmRleENsZWFudXBWYWx1ZXNbXSA9CitzdGF0aWMgb3B0X2VudW1fZWx0X2RlZiBTdGRSZE9w dEluZGV4Q2xlYW51cFZhbHVlc1tdID0KIHsKIAl7ImF1dG8iLCBTVERSRF9PUFRJT05fVkFD VVVNX0lOREVYX0NMRUFOVVBfQVVUT30sCiAJeyJvbiIsIFNURFJEX09QVElPTl9WQUNVVU1f SU5ERVhfQ0xFQU5VUF9PTn0sCkBAIC00ODksMTcgKzEwNiw4IEBAIHN0YXRpYyByZWxvcHRf ZW51bV9lbHRfZGVmIFN0ZFJkT3B0SW5kZXhDbGVhbnVwVmFsdWVzW10gPQogCXsoY29uc3Qg Y2hhciAqKSBOVUxMfQkJLyogbGlzdCB0ZXJtaW5hdG9yICovCiB9OwogCi0vKiB2YWx1ZXMg ZnJvbSBHaXN0T3B0QnVmZmVyaW5nTW9kZSAqLwotc3RhdGljIHJlbG9wdF9lbnVtX2VsdF9k ZWYgZ2lzdEJ1ZmZlcmluZ09wdFZhbHVlc1tdID0KLXsKLQl7ImF1dG8iLCBHSVNUX09QVElP Tl9CVUZGRVJJTkdfQVVUT30sCi0JeyJvbiIsIEdJU1RfT1BUSU9OX0JVRkZFUklOR19PTn0s Ci0JeyJvZmYiLCBHSVNUX09QVElPTl9CVUZGRVJJTkdfT0ZGfSwKLQl7KGNvbnN0IGNoYXIg KikgTlVMTH0JCS8qIGxpc3QgdGVybWluYXRvciAqLwotfTsKLQogLyogdmFsdWVzIGZyb20g Vmlld09wdENoZWNrT3B0aW9uICovCi1zdGF0aWMgcmVsb3B0X2VudW1fZWx0X2RlZiB2aWV3 Q2hlY2tPcHRWYWx1ZXNbXSA9CitzdGF0aWMgb3B0X2VudW1fZWx0X2RlZiB2aWV3Q2hlY2tP cHRWYWx1ZXNbXSA9CiB7CiAJLyogbm8gdmFsdWUgZm9yIE5PVF9TRVQgKi8KIAl7ImxvY2Fs IiwgVklFV19PUFRJT05fQ0hFQ0tfT1BUSU9OX0xPQ0FMfSwKQEAgLTUwNywyMjUgKzExNSw5 IEBAIHN0YXRpYyByZWxvcHRfZW51bV9lbHRfZGVmIHZpZXdDaGVja09wdFZhbHVlc1tdID0K IAl7KGNvbnN0IGNoYXIgKikgTlVMTH0JCS8qIGxpc3QgdGVybWluYXRvciAqLwogfTsKIAot c3RhdGljIHJlbG9wdF9lbnVtIGVudW1SZWxPcHRzW10gPQotewotCXsKLQkJewotCQkJInZh Y3V1bV9pbmRleF9jbGVhbnVwIiwKLQkJCSJDb250cm9scyBpbmRleCB2YWN1dW1pbmcgYW5k IGluZGV4IGNsZWFudXAiLAotCQkJUkVMT1BUX0tJTkRfSEVBUCB8IFJFTE9QVF9LSU5EX1RP QVNULAotCQkJU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrCi0JCX0sCi0JCVN0ZFJkT3B0SW5k ZXhDbGVhbnVwVmFsdWVzLAotCQlTVERSRF9PUFRJT05fVkFDVVVNX0lOREVYX0NMRUFOVVBf QVVUTywKLQkJZ2V0dGV4dF9ub29wKCJWYWxpZCB2YWx1ZXMgYXJlIFwib25cIiwgXCJvZmZc IiwgYW5kIFwiYXV0b1wiLiIpCi0JfSwKLQl7Ci0JCXsKLQkJCSJidWZmZXJpbmciLAotCQkJ IkVuYWJsZXMgYnVmZmVyaW5nIGJ1aWxkIGZvciB0aGlzIEdpU1QgaW5kZXgiLAotCQkJUkVM T1BUX0tJTkRfR0lTVCwKLQkJCUFjY2Vzc0V4Y2x1c2l2ZUxvY2sKLQkJfSwKLQkJZ2lzdEJ1 ZmZlcmluZ09wdFZhbHVlcywKLQkJR0lTVF9PUFRJT05fQlVGRkVSSU5HX0FVVE8sCi0JCWdl dHRleHRfbm9vcCgiVmFsaWQgdmFsdWVzIGFyZSBcIm9uXCIsIFwib2ZmXCIsIGFuZCBcImF1 dG9cIi4iKQotCX0sCi0JewotCQl7Ci0JCQkiY2hlY2tfb3B0aW9uIiwKLQkJCSJWaWV3IGhh cyBXSVRIIENIRUNLIE9QVElPTiBkZWZpbmVkIChsb2NhbCBvciBjYXNjYWRlZCkuIiwKLQkJ CVJFTE9QVF9LSU5EX1ZJRVcsCi0JCQlBY2Nlc3NFeGNsdXNpdmVMb2NrCi0JCX0sCi0JCXZp ZXdDaGVja09wdFZhbHVlcywKLQkJVklFV19PUFRJT05fQ0hFQ0tfT1BUSU9OX05PVF9TRVQs Ci0JCWdldHRleHRfbm9vcCgiVmFsaWQgdmFsdWVzIGFyZSBcImxvY2FsXCIgYW5kIFwiY2Fz Y2FkZWRcIi4iKQotCX0sCi0JLyogbGlzdCB0ZXJtaW5hdG9yICovCi0Je3tOVUxMfX0KLX07 Ci0KLXN0YXRpYyByZWxvcHRfc3RyaW5nIHN0cmluZ1JlbE9wdHNbXSA9Ci17Ci0JLyogbGlz dCB0ZXJtaW5hdG9yICovCi0Je3tOVUxMfX0KLX07CiAKLXN0YXRpYyByZWxvcHRfZ2VuICoq cmVsT3B0cyA9IE5VTEw7Ci1zdGF0aWMgYml0czMyIGxhc3RfYXNzaWduZWRfa2luZCA9IFJF TE9QVF9LSU5EX0xBU1RfREVGQVVMVDsKLQotc3RhdGljIGludAludW1fY3VzdG9tX29wdGlv bnMgPSAwOwotc3RhdGljIHJlbG9wdF9nZW4gKipjdXN0b21fb3B0aW9ucyA9IE5VTEw7Ci1z dGF0aWMgYm9vbCBuZWVkX2luaXRpYWxpemF0aW9uID0gdHJ1ZTsKLQotc3RhdGljIHZvaWQg aW5pdGlhbGl6ZV9yZWxvcHRpb25zKHZvaWQpOwotc3RhdGljIHZvaWQgcGFyc2Vfb25lX3Jl bG9wdGlvbihyZWxvcHRfdmFsdWUgKm9wdGlvbiwgY2hhciAqdGV4dF9zdHIsCi0JCQkJCQkJ CWludCB0ZXh0X2xlbiwgYm9vbCB2YWxpZGF0ZSk7Ci0KLS8qCi0gKiBHZXQgdGhlIGxlbmd0 aCBvZiBhIHN0cmluZyByZWxvcHRpb24gKGVpdGhlciBkZWZhdWx0IG9yIHRoZSB1c2VyLWRl ZmluZWQKLSAqIHZhbHVlKS4gIFRoaXMgaXMgdXNlZCBmb3IgYWxsb2NhdGlvbiBwdXJwb3Nl cyB3aGVuIGJ1aWxkaW5nIGEgc2V0IG9mCi0gKiByZWxhdGlvbiBvcHRpb25zLgotICovCi0j ZGVmaW5lIEdFVF9TVFJJTkdfUkVMT1BUSU9OX0xFTihvcHRpb24pIFwKLQkoKG9wdGlvbiku aXNzZXQgPyBzdHJsZW4oKG9wdGlvbikudmFsdWVzLnN0cmluZ192YWwpIDogXAotCSAoKHJl bG9wdF9zdHJpbmcgKikgKG9wdGlvbikuZ2VuKS0+ZGVmYXVsdF9sZW4pCi0KLS8qCi0gKiBp bml0aWFsaXplX3JlbG9wdGlvbnMKLSAqCQlpbml0aWFsaXphdGlvbiByb3V0aW5lLCBtdXN0 IGJlIGNhbGxlZCBiZWZvcmUgcGFyc2luZwotICoKLSAqIEluaXRpYWxpemUgdGhlIHJlbE9w dHMgYXJyYXkgYW5kIGZpbGwgZWFjaCB2YXJpYWJsZSdzIHR5cGUgYW5kIG5hbWUgbGVuZ3Ro LgotICovCi1zdGF0aWMgdm9pZAotaW5pdGlhbGl6ZV9yZWxvcHRpb25zKHZvaWQpCi17Ci0J aW50CQkJaTsKLQlpbnQJCQlqOwotCi0JaiA9IDA7Ci0JZm9yIChpID0gMDsgYm9vbFJlbE9w dHNbaV0uZ2VuLm5hbWU7IGkrKykKLQl7Ci0JCUFzc2VydChEb0xvY2tNb2Rlc0NvbmZsaWN0 KGJvb2xSZWxPcHRzW2ldLmdlbi5sb2NrbW9kZSwKLQkJCQkJCQkJICAgYm9vbFJlbE9wdHNb aV0uZ2VuLmxvY2ttb2RlKSk7Ci0JCWorKzsKLQl9Ci0JZm9yIChpID0gMDsgaW50UmVsT3B0 c1tpXS5nZW4ubmFtZTsgaSsrKQotCXsKLQkJQXNzZXJ0KERvTG9ja01vZGVzQ29uZmxpY3Qo aW50UmVsT3B0c1tpXS5nZW4ubG9ja21vZGUsCi0JCQkJCQkJCSAgIGludFJlbE9wdHNbaV0u Z2VuLmxvY2ttb2RlKSk7Ci0JCWorKzsKLQl9Ci0JZm9yIChpID0gMDsgcmVhbFJlbE9wdHNb aV0uZ2VuLm5hbWU7IGkrKykKLQl7Ci0JCUFzc2VydChEb0xvY2tNb2Rlc0NvbmZsaWN0KHJl YWxSZWxPcHRzW2ldLmdlbi5sb2NrbW9kZSwKLQkJCQkJCQkJICAgcmVhbFJlbE9wdHNbaV0u Z2VuLmxvY2ttb2RlKSk7Ci0JCWorKzsKLQl9Ci0JZm9yIChpID0gMDsgZW51bVJlbE9wdHNb aV0uZ2VuLm5hbWU7IGkrKykKLQl7Ci0JCUFzc2VydChEb0xvY2tNb2Rlc0NvbmZsaWN0KGVu dW1SZWxPcHRzW2ldLmdlbi5sb2NrbW9kZSwKLQkJCQkJCQkJICAgZW51bVJlbE9wdHNbaV0u Z2VuLmxvY2ttb2RlKSk7Ci0JCWorKzsKLQl9Ci0JZm9yIChpID0gMDsgc3RyaW5nUmVsT3B0 c1tpXS5nZW4ubmFtZTsgaSsrKQotCXsKLQkJQXNzZXJ0KERvTG9ja01vZGVzQ29uZmxpY3Qo c3RyaW5nUmVsT3B0c1tpXS5nZW4ubG9ja21vZGUsCi0JCQkJCQkJCSAgIHN0cmluZ1JlbE9w dHNbaV0uZ2VuLmxvY2ttb2RlKSk7Ci0JCWorKzsKLQl9Ci0JaiArPSBudW1fY3VzdG9tX29w dGlvbnM7Ci0KLQlpZiAocmVsT3B0cykKLQkJcGZyZWUocmVsT3B0cyk7Ci0JcmVsT3B0cyA9 IE1lbW9yeUNvbnRleHRBbGxvYyhUb3BNZW1vcnlDb250ZXh0LAotCQkJCQkJCQkgKGogKyAx KSAqIHNpemVvZihyZWxvcHRfZ2VuICopKTsKLQotCWogPSAwOwotCWZvciAoaSA9IDA7IGJv b2xSZWxPcHRzW2ldLmdlbi5uYW1lOyBpKyspCi0JewotCQlyZWxPcHRzW2pdID0gJmJvb2xS ZWxPcHRzW2ldLmdlbjsKLQkJcmVsT3B0c1tqXS0+dHlwZSA9IFJFTE9QVF9UWVBFX0JPT0w7 Ci0JCXJlbE9wdHNbal0tPm5hbWVsZW4gPSBzdHJsZW4ocmVsT3B0c1tqXS0+bmFtZSk7Ci0J CWorKzsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpbnRSZWxPcHRzW2ldLmdlbi5uYW1lOyBpKysp Ci0JewotCQlyZWxPcHRzW2pdID0gJmludFJlbE9wdHNbaV0uZ2VuOwotCQlyZWxPcHRzW2pd LT50eXBlID0gUkVMT1BUX1RZUEVfSU5UOwotCQlyZWxPcHRzW2pdLT5uYW1lbGVuID0gc3Ry bGVuKHJlbE9wdHNbal0tPm5hbWUpOwotCQlqKys7Ci0JfQotCi0JZm9yIChpID0gMDsgcmVh bFJlbE9wdHNbaV0uZ2VuLm5hbWU7IGkrKykKLQl7Ci0JCXJlbE9wdHNbal0gPSAmcmVhbFJl bE9wdHNbaV0uZ2VuOwotCQlyZWxPcHRzW2pdLT50eXBlID0gUkVMT1BUX1RZUEVfUkVBTDsK LQkJcmVsT3B0c1tqXS0+bmFtZWxlbiA9IHN0cmxlbihyZWxPcHRzW2pdLT5uYW1lKTsKLQkJ aisrOwotCX0KLQotCWZvciAoaSA9IDA7IGVudW1SZWxPcHRzW2ldLmdlbi5uYW1lOyBpKysp Ci0JewotCQlyZWxPcHRzW2pdID0gJmVudW1SZWxPcHRzW2ldLmdlbjsKLQkJcmVsT3B0c1tq XS0+dHlwZSA9IFJFTE9QVF9UWVBFX0VOVU07Ci0JCXJlbE9wdHNbal0tPm5hbWVsZW4gPSBz dHJsZW4ocmVsT3B0c1tqXS0+bmFtZSk7Ci0JCWorKzsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBz dHJpbmdSZWxPcHRzW2ldLmdlbi5uYW1lOyBpKyspCi0JewotCQlyZWxPcHRzW2pdID0gJnN0 cmluZ1JlbE9wdHNbaV0uZ2VuOwotCQlyZWxPcHRzW2pdLT50eXBlID0gUkVMT1BUX1RZUEVf U1RSSU5HOwotCQlyZWxPcHRzW2pdLT5uYW1lbGVuID0gc3RybGVuKHJlbE9wdHNbal0tPm5h bWUpOwotCQlqKys7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IG51bV9jdXN0b21fb3B0aW9u czsgaSsrKQotCXsKLQkJcmVsT3B0c1tqXSA9IGN1c3RvbV9vcHRpb25zW2ldOwotCQlqKys7 Ci0JfQotCi0JLyogYWRkIGEgbGlzdCB0ZXJtaW5hdG9yICovCi0JcmVsT3B0c1tqXSA9IE5V TEw7Ci0KLQkvKiBmbGFnIHRoZSB3b3JrIGlzIGNvbXBsZXRlICovCi0JbmVlZF9pbml0aWFs aXphdGlvbiA9IGZhbHNlOwotfQotCi0vKgotICogYWRkX3JlbG9wdGlvbl9raW5kCi0gKgkJ Q3JlYXRlIGEgbmV3IHJlbG9wdF9raW5kIHZhbHVlLCB0byBiZSB1c2VkIGluIGN1c3RvbSBy ZWxvcHRpb25zIGJ5Ci0gKgkJdXNlci1kZWZpbmVkIEFNcy4KLSAqLwotcmVsb3B0X2tpbmQK LWFkZF9yZWxvcHRpb25fa2luZCh2b2lkKQotewotCS8qIGRvbid0IGhhbmQgb3V0IHRoZSBs YXN0IGJpdCBzbyB0aGF0IHRoZSBlbnVtJ3MgYmVoYXZpb3IgaXMgcG9ydGFibGUgKi8KLQlp ZiAobGFzdF9hc3NpZ25lZF9raW5kID49IFJFTE9QVF9LSU5EX01BWCkKLQkJZXJlcG9ydChF UlJPUiwKLQkJCQkoZXJyY29kZShFUlJDT0RFX1BST0dSQU1fTElNSVRfRVhDRUVERUQpLAot CQkJCSBlcnJtc2coInVzZXItZGVmaW5lZCByZWxhdGlvbiBwYXJhbWV0ZXIgdHlwZXMgbGlt aXQgZXhjZWVkZWQiKSkpOwotCWxhc3RfYXNzaWduZWRfa2luZCA8PD0gMTsKLQlyZXR1cm4g KHJlbG9wdF9raW5kKSBsYXN0X2Fzc2lnbmVkX2tpbmQ7Ci19Ci0KLS8qCi0gKiBhZGRfcmVs b3B0aW9uCi0gKgkJQWRkIGFuIGFscmVhZHktY3JlYXRlZCBjdXN0b20gcmVsb3B0aW9uIHRv IHRoZSBsaXN0LCBhbmQgcmVjb21wdXRlIHRoZQotICoJCW1haW4gcGFyc2VyIHRhYmxlLgot ICovCi1zdGF0aWMgdm9pZAotYWRkX3JlbG9wdGlvbihyZWxvcHRfZ2VuICpuZXdvcHRpb24p Ci17Ci0Jc3RhdGljIGludAltYXhfY3VzdG9tX29wdGlvbnMgPSAwOwotCi0JaWYgKG51bV9j dXN0b21fb3B0aW9ucyA+PSBtYXhfY3VzdG9tX29wdGlvbnMpCi0JewotCQlNZW1vcnlDb250 ZXh0IG9sZGN4dDsKLQotCQlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oVG9wTWVt b3J5Q29udGV4dCk7Ci0KLQkJaWYgKG1heF9jdXN0b21fb3B0aW9ucyA9PSAwKQotCQl7Ci0J CQltYXhfY3VzdG9tX29wdGlvbnMgPSA4OwotCQkJY3VzdG9tX29wdGlvbnMgPSBwYWxsb2Mo bWF4X2N1c3RvbV9vcHRpb25zICogc2l6ZW9mKHJlbG9wdF9nZW4gKikpOwotCQl9Ci0JCWVs c2UKLQkJewotCQkJbWF4X2N1c3RvbV9vcHRpb25zICo9IDI7Ci0JCQljdXN0b21fb3B0aW9u cyA9IHJlcGFsbG9jKGN1c3RvbV9vcHRpb25zLAotCQkJCQkJCQkJICBtYXhfY3VzdG9tX29w dGlvbnMgKiBzaXplb2YocmVsb3B0X2dlbiAqKSk7Ci0JCX0KLQkJTWVtb3J5Q29udGV4dFN3 aXRjaFRvKG9sZGN4dCk7Ci0JfQotCWN1c3RvbV9vcHRpb25zW251bV9jdXN0b21fb3B0aW9u cysrXSA9IG5ld29wdGlvbjsKLQotCW5lZWRfaW5pdGlhbGl6YXRpb24gPSB0cnVlOwotfQor b3B0aW9uc19zcGVjX3NldCAqZ2V0X3N0ZHJkX3JlbG9wdF9zcGVjX3NldChib29sIGlzX2Zv cl90b2FzdCk7Cit2b2lkCQlvaWRfcG9zdHZhbGlkYXRlKG9wdGlvbl92YWx1ZSAqdmFsdWUp OwogCiAvKgogICogaW5pdF9sb2NhbF9yZWxvcHRpb25zCkBAIC03MzUsOSArMTI3LDggQEAg YWRkX3JlbG9wdGlvbihyZWxvcHRfZ2VuICpuZXdvcHRpb24pCiB2b2lkCiBpbml0X2xvY2Fs X3JlbG9wdGlvbnMobG9jYWxfcmVsb3B0cyAqcmVsb3B0cywgU2l6ZSByZWxvcHRfc3RydWN0 X3NpemUpCiB7Ci0JcmVsb3B0cy0+b3B0aW9ucyA9IE5JTDsKIAlyZWxvcHRzLT52YWxpZGF0 b3JzID0gTklMOwotCXJlbG9wdHMtPnJlbG9wdF9zdHJ1Y3Rfc2l6ZSA9IHJlbG9wdF9zdHJ1 Y3Rfc2l6ZTsKKwlyZWxvcHRzLT5zcGVjX3NldCA9IGFsbG9jYXRlT3B0aW9uc1NwZWNTZXQo TlVMTCwgcmVsb3B0X3N0cnVjdF9zaXplLCB0cnVlLCAwKTsKIH0KIAogLyoKQEAgLTc1MSwx MTIgKzE0Miw2IEBAIHJlZ2lzdGVyX3JlbG9wdGlvbnNfdmFsaWRhdG9yKGxvY2FsX3JlbG9w dHMgKnJlbG9wdHMsIHJlbG9wdHNfdmFsaWRhdG9yIHZhbGlkYXRvCiAJcmVsb3B0cy0+dmFs aWRhdG9ycyA9IGxhcHBlbmQocmVsb3B0cy0+dmFsaWRhdG9ycywgdmFsaWRhdG9yKTsKIH0K IAotLyoKLSAqIGFkZF9sb2NhbF9yZWxvcHRpb24KLSAqCQlBZGQgYW4gYWxyZWFkeS1jcmVh dGVkIGN1c3RvbSByZWxvcHRpb24gdG8gdGhlIGxvY2FsIGxpc3QuCi0gKi8KLXN0YXRpYyB2 b2lkCi1hZGRfbG9jYWxfcmVsb3B0aW9uKGxvY2FsX3JlbG9wdHMgKnJlbG9wdHMsIHJlbG9w dF9nZW4gKm5ld29wdGlvbiwgaW50IG9mZnNldCkKLXsKLQlsb2NhbF9yZWxvcHQgKm9wdCA9 IHBhbGxvYyhzaXplb2YoKm9wdCkpOwotCi0JQXNzZXJ0KG9mZnNldCA8IHJlbG9wdHMtPnJl bG9wdF9zdHJ1Y3Rfc2l6ZSk7Ci0KLQlvcHQtPm9wdGlvbiA9IG5ld29wdGlvbjsKLQlvcHQt Pm9mZnNldCA9IG9mZnNldDsKLQotCXJlbG9wdHMtPm9wdGlvbnMgPSBsYXBwZW5kKHJlbG9w dHMtPm9wdGlvbnMsIG9wdCk7Ci19Ci0KLS8qCi0gKiBhbGxvY2F0ZV9yZWxvcHRpb24KLSAq CQlBbGxvY2F0ZSBhIG5ldyByZWxvcHRpb24gYW5kIGluaXRpYWxpemUgdGhlIHR5cGUtYWdu b3N0aWMgZmllbGRzCi0gKgkJKGZvciB0eXBlcyBvdGhlciB0aGFuIHN0cmluZykKLSAqLwot c3RhdGljIHJlbG9wdF9nZW4gKgotYWxsb2NhdGVfcmVsb3B0aW9uKGJpdHMzMiBraW5kcywg aW50IHR5cGUsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmRlc2MsCi0JCQkJICAg TE9DS01PREUgbG9ja21vZGUpCi17Ci0JTWVtb3J5Q29udGV4dCBvbGRjeHQ7Ci0Jc2l6ZV90 CQlzaXplOwotCXJlbG9wdF9nZW4gKm5ld29wdGlvbjsKLQotCWlmIChraW5kcyAhPSBSRUxP UFRfS0lORF9MT0NBTCkKLQkJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKFRvcE1l bW9yeUNvbnRleHQpOwotCWVsc2UKLQkJb2xkY3h0ID0gTlVMTDsKLQotCXN3aXRjaCAodHlw ZSkKLQl7Ci0JCWNhc2UgUkVMT1BUX1RZUEVfQk9PTDoKLQkJCXNpemUgPSBzaXplb2YocmVs b3B0X2Jvb2wpOwotCQkJYnJlYWs7Ci0JCWNhc2UgUkVMT1BUX1RZUEVfSU5UOgotCQkJc2l6 ZSA9IHNpemVvZihyZWxvcHRfaW50KTsKLQkJCWJyZWFrOwotCQljYXNlIFJFTE9QVF9UWVBF X1JFQUw6Ci0JCQlzaXplID0gc2l6ZW9mKHJlbG9wdF9yZWFsKTsKLQkJCWJyZWFrOwotCQlj YXNlIFJFTE9QVF9UWVBFX0VOVU06Ci0JCQlzaXplID0gc2l6ZW9mKHJlbG9wdF9lbnVtKTsK LQkJCWJyZWFrOwotCQljYXNlIFJFTE9QVF9UWVBFX1NUUklORzoKLQkJCXNpemUgPSBzaXpl b2YocmVsb3B0X3N0cmluZyk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWVsb2coRVJS T1IsICJ1bnN1cHBvcnRlZCByZWxvcHRpb24gdHlwZSAlZCIsIHR5cGUpOwotCQkJcmV0dXJu IE5VTEw7CQkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCi0JfQotCi0JbmV3b3B0aW9uID0g cGFsbG9jKHNpemUpOwotCi0JbmV3b3B0aW9uLT5uYW1lID0gcHN0cmR1cChuYW1lKTsKLQlp ZiAoZGVzYykKLQkJbmV3b3B0aW9uLT5kZXNjID0gcHN0cmR1cChkZXNjKTsKLQllbHNlCi0J CW5ld29wdGlvbi0+ZGVzYyA9IE5VTEw7Ci0JbmV3b3B0aW9uLT5raW5kcyA9IGtpbmRzOwot CW5ld29wdGlvbi0+bmFtZWxlbiA9IHN0cmxlbihuYW1lKTsKLQluZXdvcHRpb24tPnR5cGUg PSB0eXBlOwotCW5ld29wdGlvbi0+bG9ja21vZGUgPSBsb2NrbW9kZTsKLQotCWlmIChvbGRj eHQgIT0gTlVMTCkKLQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7Ci0KLQlyZXR1 cm4gbmV3b3B0aW9uOwotfQotCi0vKgotICogaW5pdF9ib29sX3JlbG9wdGlvbgotICoJCUFs bG9jYXRlIGFuZCBpbml0aWFsaXplIGEgbmV3IGJvb2xlYW4gcmVsb3B0aW9uCi0gKi8KLXN0 YXRpYyByZWxvcHRfYm9vbCAqCi1pbml0X2Jvb2xfcmVsb3B0aW9uKGJpdHMzMiBraW5kcywg Y29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZGVzYywKLQkJCQkJYm9vbCBkZWZhdWx0 X3ZhbCwgTE9DS01PREUgbG9ja21vZGUpCi17Ci0JcmVsb3B0X2Jvb2wgKm5ld29wdGlvbjsK LQotCW5ld29wdGlvbiA9IChyZWxvcHRfYm9vbCAqKSBhbGxvY2F0ZV9yZWxvcHRpb24oa2lu ZHMsIFJFTE9QVF9UWVBFX0JPT0wsCi0JCQkJCQkJCQkJCQkgICBuYW1lLCBkZXNjLCBsb2Nr bW9kZSk7Ci0JbmV3b3B0aW9uLT5kZWZhdWx0X3ZhbCA9IGRlZmF1bHRfdmFsOwotCi0JcmV0 dXJuIG5ld29wdGlvbjsKLX0KLQotLyoKLSAqIGFkZF9ib29sX3JlbG9wdGlvbgotICoJCUFk ZCBhIG5ldyBib29sZWFuIHJlbG9wdGlvbgotICovCi12b2lkCi1hZGRfYm9vbF9yZWxvcHRp b24oYml0czMyIGtpbmRzLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpkZXNjLAot CQkJCSAgIGJvb2wgZGVmYXVsdF92YWwsIExPQ0tNT0RFIGxvY2ttb2RlKQotewotCXJlbG9w dF9ib29sICpuZXdvcHRpb24gPSBpbml0X2Jvb2xfcmVsb3B0aW9uKGtpbmRzLCBuYW1lLCBk ZXNjLAotCQkJCQkJCQkJCQkJIGRlZmF1bHRfdmFsLCBsb2NrbW9kZSk7Ci0KLQlhZGRfcmVs b3B0aW9uKChyZWxvcHRfZ2VuICopIG5ld29wdGlvbik7Ci19Ci0KIC8qCiAgKiBhZGRfbG9j YWxfYm9vbF9yZWxvcHRpb24KICAqCQlBZGQgYSBuZXcgYm9vbGVhbiBsb2NhbCByZWxvcHRp b24KQEAgLTg2Nyw0NyArMTUyLDggQEAgdm9pZAogYWRkX2xvY2FsX2Jvb2xfcmVsb3B0aW9u KGxvY2FsX3JlbG9wdHMgKnJlbG9wdHMsIGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkJCQkgY29u c3QgY2hhciAqZGVzYywgYm9vbCBkZWZhdWx0X3ZhbCwgaW50IG9mZnNldCkKIHsKLQlyZWxv cHRfYm9vbCAqbmV3b3B0aW9uID0gaW5pdF9ib29sX3JlbG9wdGlvbihSRUxPUFRfS0lORF9M T0NBTCwKLQkJCQkJCQkJCQkJCSBuYW1lLCBkZXNjLAotCQkJCQkJCQkJCQkJIGRlZmF1bHRf dmFsLCAwKTsKLQotCWFkZF9sb2NhbF9yZWxvcHRpb24ocmVsb3B0cywgKHJlbG9wdF9nZW4g KikgbmV3b3B0aW9uLCBvZmZzZXQpOwotfQotCi0KLS8qCi0gKiBpbml0X3JlYWxfcmVsb3B0 aW9uCi0gKgkJQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYSBuZXcgaW50ZWdlciByZWxvcHRp b24KLSAqLwotc3RhdGljIHJlbG9wdF9pbnQgKgotaW5pdF9pbnRfcmVsb3B0aW9uKGJpdHMz MiBraW5kcywgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZGVzYywKLQkJCQkgICBp bnQgZGVmYXVsdF92YWwsIGludCBtaW5fdmFsLCBpbnQgbWF4X3ZhbCwKLQkJCQkgICBMT0NL TU9ERSBsb2NrbW9kZSkKLXsKLQlyZWxvcHRfaW50ICpuZXdvcHRpb247Ci0KLQluZXdvcHRp b24gPSAocmVsb3B0X2ludCAqKSBhbGxvY2F0ZV9yZWxvcHRpb24oa2luZHMsIFJFTE9QVF9U WVBFX0lOVCwKLQkJCQkJCQkJCQkJCSAgbmFtZSwgZGVzYywgbG9ja21vZGUpOwotCW5ld29w dGlvbi0+ZGVmYXVsdF92YWwgPSBkZWZhdWx0X3ZhbDsKLQluZXdvcHRpb24tPm1pbiA9IG1p bl92YWw7Ci0JbmV3b3B0aW9uLT5tYXggPSBtYXhfdmFsOwotCi0JcmV0dXJuIG5ld29wdGlv bjsKLX0KLQotLyoKLSAqIGFkZF9pbnRfcmVsb3B0aW9uCi0gKgkJQWRkIGEgbmV3IGludGVn ZXIgcmVsb3B0aW9uCi0gKi8KLXZvaWQKLWFkZF9pbnRfcmVsb3B0aW9uKGJpdHMzMiBraW5k cywgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZGVzYywgaW50IGRlZmF1bHRfdmFs LAotCQkJCSAgaW50IG1pbl92YWwsIGludCBtYXhfdmFsLCBMT0NLTU9ERSBsb2NrbW9kZSkK LXsKLQlyZWxvcHRfaW50ICpuZXdvcHRpb24gPSBpbml0X2ludF9yZWxvcHRpb24oa2luZHMs IG5hbWUsIGRlc2MsCi0JCQkJCQkJCQkJCSAgIGRlZmF1bHRfdmFsLCBtaW5fdmFsLAotCQkJ CQkJCQkJCQkgICBtYXhfdmFsLCBsb2NrbW9kZSk7Ci0KLQlhZGRfcmVsb3B0aW9uKChyZWxv cHRfZ2VuICopIG5ld29wdGlvbik7CisJb3B0aW9uc1NwZWNTZXRBZGRCb29sKHJlbG9wdHMt PnNwZWNfc2V0LCBuYW1lLCBkZXNjLCBOb0xvY2ssIG9mZnNldCwgTlVMTCwKKwkJCQkJCSAg ZGVmYXVsdF92YWwpOwogfQogCiAvKgpAQCAtOTIxLDQ3ICsxNjcsOCBAQCBhZGRfbG9jYWxf aW50X3JlbG9wdGlvbihsb2NhbF9yZWxvcHRzICpyZWxvcHRzLCBjb25zdCBjaGFyICpuYW1l LAogCQkJCQkJY29uc3QgY2hhciAqZGVzYywgaW50IGRlZmF1bHRfdmFsLCBpbnQgbWluX3Zh bCwKIAkJCQkJCWludCBtYXhfdmFsLCBpbnQgb2Zmc2V0KQogewotCXJlbG9wdF9pbnQgKm5l d29wdGlvbiA9IGluaXRfaW50X3JlbG9wdGlvbihSRUxPUFRfS0lORF9MT0NBTCwKLQkJCQkJ CQkJCQkJICAgbmFtZSwgZGVzYywgZGVmYXVsdF92YWwsCi0JCQkJCQkJCQkJCSAgIG1pbl92 YWwsIG1heF92YWwsIDApOwotCi0JYWRkX2xvY2FsX3JlbG9wdGlvbihyZWxvcHRzLCAocmVs b3B0X2dlbiAqKSBuZXdvcHRpb24sIG9mZnNldCk7Ci19Ci0KLS8qCi0gKiBpbml0X3JlYWxf cmVsb3B0aW9uCi0gKgkJQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYSBuZXcgcmVhbCByZWxv cHRpb24KLSAqLwotc3RhdGljIHJlbG9wdF9yZWFsICoKLWluaXRfcmVhbF9yZWxvcHRpb24o Yml0czMyIGtpbmRzLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpkZXNjLAotCQkJ CQlkb3VibGUgZGVmYXVsdF92YWwsIGRvdWJsZSBtaW5fdmFsLCBkb3VibGUgbWF4X3ZhbCwK LQkJCQkJTE9DS01PREUgbG9ja21vZGUpCi17Ci0JcmVsb3B0X3JlYWwgKm5ld29wdGlvbjsK LQotCW5ld29wdGlvbiA9IChyZWxvcHRfcmVhbCAqKSBhbGxvY2F0ZV9yZWxvcHRpb24oa2lu ZHMsIFJFTE9QVF9UWVBFX1JFQUwsCi0JCQkJCQkJCQkJCQkgICBuYW1lLCBkZXNjLCBsb2Nr bW9kZSk7Ci0JbmV3b3B0aW9uLT5kZWZhdWx0X3ZhbCA9IGRlZmF1bHRfdmFsOwotCW5ld29w dGlvbi0+bWluID0gbWluX3ZhbDsKLQluZXdvcHRpb24tPm1heCA9IG1heF92YWw7Ci0KLQly ZXR1cm4gbmV3b3B0aW9uOwotfQotCi0vKgotICogYWRkX3JlYWxfcmVsb3B0aW9uCi0gKgkJ QWRkIGEgbmV3IGZsb2F0IHJlbG9wdGlvbgotICovCi12b2lkCi1hZGRfcmVhbF9yZWxvcHRp b24oYml0czMyIGtpbmRzLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpkZXNjLAot CQkJCSAgIGRvdWJsZSBkZWZhdWx0X3ZhbCwgZG91YmxlIG1pbl92YWwsIGRvdWJsZSBtYXhf dmFsLAotCQkJCSAgIExPQ0tNT0RFIGxvY2ttb2RlKQotewotCXJlbG9wdF9yZWFsICpuZXdv cHRpb24gPSBpbml0X3JlYWxfcmVsb3B0aW9uKGtpbmRzLCBuYW1lLCBkZXNjLAotCQkJCQkJ CQkJCQkJIGRlZmF1bHRfdmFsLCBtaW5fdmFsLAotCQkJCQkJCQkJCQkJIG1heF92YWwsIGxv Y2ttb2RlKTsKLQotCWFkZF9yZWxvcHRpb24oKHJlbG9wdF9nZW4gKikgbmV3b3B0aW9uKTsK KwlvcHRpb25zU3BlY1NldEFkZEludChyZWxvcHRzLT5zcGVjX3NldCwgbmFtZSwgZGVzYywg Tm9Mb2NrLCBvZmZzZXQsIE5VTEwsCisJCQkJCQkgZGVmYXVsdF92YWwsIG1pbl92YWwsIG1h eF92YWwpOwogfQogCiAvKgpAQCAtOTcxLDE0MiArMTc4LDI4IEBAIGFkZF9yZWFsX3JlbG9w dGlvbihiaXRzMzIga2luZHMsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmRlc2Ms CiAgKiAnb2Zmc2V0JyBpcyBvZmZzZXQgb2YgZG91YmxlLXR5cGVkIGZpZWxkLgogICovCiB2 b2lkCi1hZGRfbG9jYWxfcmVhbF9yZWxvcHRpb24obG9jYWxfcmVsb3B0cyAqcmVsb3B0cywg Y29uc3QgY2hhciAqbmFtZSwKLQkJCQkJCSBjb25zdCBjaGFyICpkZXNjLCBkb3VibGUgZGVm YXVsdF92YWwsCi0JCQkJCQkgZG91YmxlIG1pbl92YWwsIGRvdWJsZSBtYXhfdmFsLCBpbnQg b2Zmc2V0KQotewotCXJlbG9wdF9yZWFsICpuZXdvcHRpb24gPSBpbml0X3JlYWxfcmVsb3B0 aW9uKFJFTE9QVF9LSU5EX0xPQ0FMLAotCQkJCQkJCQkJCQkJIG5hbWUsIGRlc2MsCi0JCQkJ CQkJCQkJCQkgZGVmYXVsdF92YWwsIG1pbl92YWwsCi0JCQkJCQkJCQkJCQkgbWF4X3ZhbCwg MCk7Ci0KLQlhZGRfbG9jYWxfcmVsb3B0aW9uKHJlbG9wdHMsIChyZWxvcHRfZ2VuICopIG5l d29wdGlvbiwgb2Zmc2V0KTsKLX0KLQotLyoKLSAqIGluaXRfZW51bV9yZWxvcHRpb24KLSAq CQlBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIG5ldyBlbnVtIHJlbG9wdGlvbgotICovCi1z dGF0aWMgcmVsb3B0X2VudW0gKgotaW5pdF9lbnVtX3JlbG9wdGlvbihiaXRzMzIga2luZHMs IGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmRlc2MsCi0JCQkJCXJlbG9wdF9lbnVt X2VsdF9kZWYgKm1lbWJlcnMsIGludCBkZWZhdWx0X3ZhbCwKLQkJCQkJY29uc3QgY2hhciAq ZGV0YWlsbXNnLCBMT0NLTU9ERSBsb2NrbW9kZSkKLXsKLQlyZWxvcHRfZW51bSAqbmV3b3B0 aW9uOwotCi0JbmV3b3B0aW9uID0gKHJlbG9wdF9lbnVtICopIGFsbG9jYXRlX3JlbG9wdGlv bihraW5kcywgUkVMT1BUX1RZUEVfRU5VTSwKLQkJCQkJCQkJCQkJCSAgIG5hbWUsIGRlc2Ms IGxvY2ttb2RlKTsKLQluZXdvcHRpb24tPm1lbWJlcnMgPSBtZW1iZXJzOwotCW5ld29wdGlv bi0+ZGVmYXVsdF92YWwgPSBkZWZhdWx0X3ZhbDsKLQluZXdvcHRpb24tPmRldGFpbG1zZyA9 IGRldGFpbG1zZzsKLQotCXJldHVybiBuZXdvcHRpb247Ci19Ci0KLQotLyoKLSAqIGFkZF9l bnVtX3JlbG9wdGlvbgotICoJCUFkZCBhIG5ldyBlbnVtIHJlbG9wdGlvbgotICoKLSAqIFRo ZSBtZW1iZXJzIGFycmF5IG11c3QgaGF2ZSBhIHRlcm1pbmF0aW5nIE5VTEwgZW50cnkuCi0g KgotICogVGhlIGRldGFpbG1zZyBpcyBzaG93biB3aGVuIHVuc3VwcG9ydGVkIHZhbHVlcyBh cmUgcGFzc2VkLCBhbmQgaGFzIHRoaXMKLSAqIGZvcm06ICAgIlZhbGlkIHZhbHVlcyBhcmUg XCJmb29cIiwgXCJiYXJcIiwgYW5kIFwiYmFyXCIuIgotICoKLSAqIFRoZSBtZW1iZXJzIGFy cmF5IGFuZCBkZXRhaWxtc2cgYXJlIG5vdCBjb3BpZWQgLS0gY2FsbGVyIG11c3QgZW5zdXJl IHRoYXQKLSAqIHRoZXkgYXJlIHZhbGlkIHRocm91Z2hvdXQgdGhlIGxpZmUgb2YgdGhlIHBy b2Nlc3MuCi0gKi8KLXZvaWQKLWFkZF9lbnVtX3JlbG9wdGlvbihiaXRzMzIga2luZHMsIGNv bnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmRlc2MsCi0JCQkJICAgcmVsb3B0X2VudW1f ZWx0X2RlZiAqbWVtYmVycywgaW50IGRlZmF1bHRfdmFsLAotCQkJCSAgIGNvbnN0IGNoYXIg KmRldGFpbG1zZywgTE9DS01PREUgbG9ja21vZGUpCi17Ci0JcmVsb3B0X2VudW0gKm5ld29w dGlvbiA9IGluaXRfZW51bV9yZWxvcHRpb24oa2luZHMsIG5hbWUsIGRlc2MsCi0JCQkJCQkJ CQkJCQkgbWVtYmVycywgZGVmYXVsdF92YWwsCi0JCQkJCQkJCQkJCQkgZGV0YWlsbXNnLCBs b2NrbW9kZSk7Ci0KLQlhZGRfcmVsb3B0aW9uKChyZWxvcHRfZ2VuICopIG5ld29wdGlvbik7 Ci19Ci0KLS8qCi0gKiBhZGRfbG9jYWxfZW51bV9yZWxvcHRpb24KLSAqCQlBZGQgYSBuZXcg bG9jYWwgZW51bSByZWxvcHRpb24KLSAqCi0gKiAnb2Zmc2V0JyBpcyBvZmZzZXQgb2YgaW50 LXR5cGVkIGZpZWxkLgotICovCi12b2lkCi1hZGRfbG9jYWxfZW51bV9yZWxvcHRpb24obG9j YWxfcmVsb3B0cyAqcmVsb3B0cywgY29uc3QgY2hhciAqbmFtZSwKLQkJCQkJCSBjb25zdCBj aGFyICpkZXNjLCByZWxvcHRfZW51bV9lbHRfZGVmICptZW1iZXJzLAotCQkJCQkJIGludCBk ZWZhdWx0X3ZhbCwgY29uc3QgY2hhciAqZGV0YWlsbXNnLCBpbnQgb2Zmc2V0KQotewotCXJl bG9wdF9lbnVtICpuZXdvcHRpb24gPSBpbml0X2VudW1fcmVsb3B0aW9uKFJFTE9QVF9LSU5E X0xPQ0FMLAotCQkJCQkJCQkJCQkJIG5hbWUsIGRlc2MsCi0JCQkJCQkJCQkJCQkgbWVtYmVy cywgZGVmYXVsdF92YWwsCi0JCQkJCQkJCQkJCQkgZGV0YWlsbXNnLCAwKTsKLQotCWFkZF9s b2NhbF9yZWxvcHRpb24ocmVsb3B0cywgKHJlbG9wdF9nZW4gKikgbmV3b3B0aW9uLCBvZmZz ZXQpOwotfQotCi0vKgotICogaW5pdF9zdHJpbmdfcmVsb3B0aW9uCi0gKgkJQWxsb2NhdGUg YW5kIGluaXRpYWxpemUgYSBuZXcgc3RyaW5nIHJlbG9wdGlvbgotICovCi1zdGF0aWMgcmVs b3B0X3N0cmluZyAqCi1pbml0X3N0cmluZ19yZWxvcHRpb24oYml0czMyIGtpbmRzLCBjb25z dCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpkZXNjLAotCQkJCQkgIGNvbnN0IGNoYXIgKmRl ZmF1bHRfdmFsLAotCQkJCQkgIHZhbGlkYXRlX3N0cmluZ19yZWxvcHQgdmFsaWRhdG9yLAot CQkJCQkgIGZpbGxfc3RyaW5nX3JlbG9wdCBmaWxsZXIsCi0JCQkJCSAgTE9DS01PREUgbG9j a21vZGUpCi17Ci0JcmVsb3B0X3N0cmluZyAqbmV3b3B0aW9uOwotCi0JLyogbWFrZSBzdXJl IHRoZSB2YWxpZGF0b3IvZGVmYXVsdCBjb21iaW5hdGlvbiBpcyBzYW5lICovCi0JaWYgKHZh bGlkYXRvcikKLQkJKHZhbGlkYXRvcikgKGRlZmF1bHRfdmFsKTsKLQotCW5ld29wdGlvbiA9 IChyZWxvcHRfc3RyaW5nICopIGFsbG9jYXRlX3JlbG9wdGlvbihraW5kcywgUkVMT1BUX1RZ UEVfU1RSSU5HLAotCQkJCQkJCQkJCQkJCSBuYW1lLCBkZXNjLCBsb2NrbW9kZSk7Ci0JbmV3 b3B0aW9uLT52YWxpZGF0ZV9jYiA9IHZhbGlkYXRvcjsKLQluZXdvcHRpb24tPmZpbGxfY2Ig PSBmaWxsZXI7Ci0JaWYgKGRlZmF1bHRfdmFsKQotCXsKLQkJaWYgKGtpbmRzID09IFJFTE9Q VF9LSU5EX0xPQ0FMKQotCQkJbmV3b3B0aW9uLT5kZWZhdWx0X3ZhbCA9IHN0cmR1cChkZWZh dWx0X3ZhbCk7Ci0JCWVsc2UKLQkJCW5ld29wdGlvbi0+ZGVmYXVsdF92YWwgPSBNZW1vcnlD b250ZXh0U3RyZHVwKFRvcE1lbW9yeUNvbnRleHQsIGRlZmF1bHRfdmFsKTsKLQkJbmV3b3B0 aW9uLT5kZWZhdWx0X2xlbiA9IHN0cmxlbihkZWZhdWx0X3ZhbCk7Ci0JCW5ld29wdGlvbi0+ ZGVmYXVsdF9pc251bGwgPSBmYWxzZTsKLQl9Ci0JZWxzZQotCXsKLQkJbmV3b3B0aW9uLT5k ZWZhdWx0X3ZhbCA9ICIiOwotCQluZXdvcHRpb24tPmRlZmF1bHRfbGVuID0gMDsKLQkJbmV3 b3B0aW9uLT5kZWZhdWx0X2lzbnVsbCA9IHRydWU7Ci0JfQorYWRkX2xvY2FsX3JlYWxfcmVs b3B0aW9uKGxvY2FsX3JlbG9wdHMgKnJlbG9wdHMsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJ CQkgY29uc3QgY2hhciAqZGVzYywgZG91YmxlIGRlZmF1bHRfdmFsLAorCQkJCQkJIGRvdWJs ZSBtaW5fdmFsLCBkb3VibGUgbWF4X3ZhbCwgaW50IG9mZnNldCkKK3sKKwlvcHRpb25zU3Bl Y1NldEFkZFJlYWwocmVsb3B0cy0+c3BlY19zZXQsIG5hbWUsIGRlc2MsIE5vTG9jaywgb2Zm c2V0LCBOVUxMLAorCQkJCQkJICBkZWZhdWx0X3ZhbCwgbWluX3ZhbCwgbWF4X3ZhbCk7CiAK LQlyZXR1cm4gbmV3b3B0aW9uOwogfQogCiAvKgotICogYWRkX3N0cmluZ19yZWxvcHRpb24K LSAqCQlBZGQgYSBuZXcgc3RyaW5nIHJlbG9wdGlvbgorICogYWRkX2xvY2FsX2VudW1fcmVs b3B0aW9uCisgKgkJQWRkIGEgbmV3IGxvY2FsIGVudW0gcmVsb3B0aW9uCiAgKgotICogInZh bGlkYXRvciIgaXMgYW4gb3B0aW9uYWwgZnVuY3Rpb24gcG9pbnRlciB0aGF0IGNhbiBiZSB1 c2VkIHRvIHRlc3QgdGhlCi0gKiB2YWxpZGl0eSBvZiB0aGUgdmFsdWVzLiAgSXQgbXVzdCBl bG9nKEVSUk9SKSB3aGVuIHRoZSBhcmd1bWVudCBzdHJpbmcgaXMKLSAqIG5vdCBhY2NlcHRh YmxlIGZvciB0aGUgdmFyaWFibGUuICBOb3RlIHRoYXQgdGhlIGRlZmF1bHQgdmFsdWUgbXVz dCBwYXNzCi0gKiB0aGUgdmFsaWRhdGlvbi4KKyAqICdvZmZzZXQnIGlzIG9mZnNldCBvZiBp bnQtdHlwZWQgZmllbGQuCiAgKi8KIHZvaWQKLWFkZF9zdHJpbmdfcmVsb3B0aW9uKGJpdHMz MiBraW5kcywgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZGVzYywKLQkJCQkJIGNv bnN0IGNoYXIgKmRlZmF1bHRfdmFsLCB2YWxpZGF0ZV9zdHJpbmdfcmVsb3B0IHZhbGlkYXRv ciwKLQkJCQkJIExPQ0tNT0RFIGxvY2ttb2RlKQorYWRkX2xvY2FsX2VudW1fcmVsb3B0aW9u KGxvY2FsX3JlbG9wdHMgKnJlbG9wdHMsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJCQkgY29u c3QgY2hhciAqZGVzYywgb3B0X2VudW1fZWx0X2RlZiAqbWVtYmVycywKKwkJCQkJCSBpbnQg ZGVmYXVsdF92YWwsIGNvbnN0IGNoYXIgKmRldGFpbG1zZywgaW50IG9mZnNldCkKIHsKLQly ZWxvcHRfc3RyaW5nICpuZXdvcHRpb24gPSBpbml0X3N0cmluZ19yZWxvcHRpb24oa2luZHMs IG5hbWUsIGRlc2MsCi0JCQkJCQkJCQkJCQkJIGRlZmF1bHRfdmFsLAotCQkJCQkJCQkJCQkJ CSB2YWxpZGF0b3IsIE5VTEwsCi0JCQkJCQkJCQkJCQkJIGxvY2ttb2RlKTsKLQotCWFkZF9y ZWxvcHRpb24oKHJlbG9wdF9nZW4gKikgbmV3b3B0aW9uKTsKKwlvcHRpb25zU3BlY1NldEFk ZEVudW0ocmVsb3B0cy0+c3BlY19zZXQsIG5hbWUsIGRlc2MsIE5vTG9jaywgb2Zmc2V0LCBO VUxMLAorCQkJCQkJICBtZW1iZXJzLCBkZWZhdWx0X3ZhbCwgZGV0YWlsbXNnKTsKIH0KIAog LyoKQEAgLTExMjIsMjQ3ICsyMTUsOCBAQCBhZGRfbG9jYWxfc3RyaW5nX3JlbG9wdGlvbihs b2NhbF9yZWxvcHRzICpyZWxvcHRzLCBjb25zdCBjaGFyICpuYW1lLAogCQkJCQkJICAgdmFs aWRhdGVfc3RyaW5nX3JlbG9wdCB2YWxpZGF0b3IsCiAJCQkJCQkgICBmaWxsX3N0cmluZ19y ZWxvcHQgZmlsbGVyLCBpbnQgb2Zmc2V0KQogewotCXJlbG9wdF9zdHJpbmcgKm5ld29wdGlv biA9IGluaXRfc3RyaW5nX3JlbG9wdGlvbihSRUxPUFRfS0lORF9MT0NBTCwKLQkJCQkJCQkJ CQkJCQkgbmFtZSwgZGVzYywKLQkJCQkJCQkJCQkJCQkgZGVmYXVsdF92YWwsCi0JCQkJCQkJ CQkJCQkJIHZhbGlkYXRvciwgZmlsbGVyLAotCQkJCQkJCQkJCQkJCSAwKTsKLQotCWFkZF9s b2NhbF9yZWxvcHRpb24ocmVsb3B0cywgKHJlbG9wdF9nZW4gKikgbmV3b3B0aW9uLCBvZmZz ZXQpOwotfQotCi0vKgotICogVHJhbnNmb3JtIGEgcmVsYXRpb24gb3B0aW9ucyBsaXN0IChs aXN0IG9mIERlZkVsZW0pIGludG8gdGhlIHRleHQgYXJyYXkKLSAqIGZvcm1hdCB0aGF0IGlz IGtlcHQgaW4gcGdfY2xhc3MucmVsb3B0aW9ucywgaW5jbHVkaW5nIG9ubHkgdGhvc2Ugb3B0 aW9ucwotICogdGhhdCBhcmUgaW4gdGhlIHBhc3NlZCBuYW1lc3BhY2UuICBUaGUgb3V0cHV0 IHZhbHVlcyBkbyBub3QgaW5jbHVkZSB0aGUKLSAqIG5hbWVzcGFjZS4KLSAqCi0gKiBUaGlz IGlzIHVzZWQgZm9yIHRocmVlIGNhc2VzOiBDUkVBVEUgVEFCTEUvSU5ERVgsIEFMVEVSIFRB QkxFIFNFVCwgYW5kCi0gKiBBTFRFUiBUQUJMRSBSRVNFVC4gIEluIHRoZSBBTFRFUiBjYXNl cywgb2xkT3B0aW9ucyBpcyB0aGUgZXhpc3RpbmcKLSAqIHJlbG9wdGlvbnMgdmFsdWUgKHBv c3NpYmx5IE5VTEwpLCBhbmQgd2UgcmVwbGFjZSBvciByZW1vdmUgZW50cmllcwotICogYXMg bmVlZGVkLgotICoKLSAqIElmIGFjY2VwdE9pZHNPZmYgaXMgdHJ1ZSwgdGhlbiB3ZSBhbGxv dyBvaWRzID0gZmFsc2UsIGJ1dCB0aHJvdyBlcnJvciB3aGVuCi0gKiBvbi4gVGhpcyBpcyBz b2xlbHkgbmVlZGVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KLSAqCi0gKiBOb3Rl IHRoYXQgdGhpcyBpcyBub3QgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHdoZXRoZXIg dGhlIG9wdGlvbnMKLSAqIGFyZSB2YWxpZCwgYnV0IGl0IGRvZXMgY2hlY2sgdGhhdCBuYW1l c3BhY2VzIGZvciBhbGwgdGhlIG9wdGlvbnMgZ2l2ZW4gYXJlCi0gKiBsaXN0ZWQgaW4gdmFs aWRuc3BzLiAgVGhlIE5VTEwgbmFtZXNwYWNlIGlzIGFsd2F5cyB2YWxpZCBhbmQgbmVlZCBu b3QgYmUKLSAqIGV4cGxpY2l0bHkgbGlzdGVkLiAgUGFzc2luZyBhIE5VTEwgcG9pbnRlciBt ZWFucyB0aGF0IG9ubHkgdGhlIE5VTEwKLSAqIG5hbWVzcGFjZSBpcyB2YWxpZC4KLSAqCi0g KiBCb3RoIG9sZE9wdGlvbnMgYW5kIHRoZSByZXN1bHQgYXJlIHRleHQgYXJyYXlzIChvciBO VUxMIGZvciAiZGVmYXVsdCIpLAotICogYnV0IHdlIGRlY2xhcmUgdGhlbSBhcyBEYXR1bXMg dG8gYXZvaWQgaW5jbHVkaW5nIGFycmF5LmggaW4gcmVsb3B0aW9ucy5oLgotICovCi1EYXR1 bQotdHJhbnNmb3JtUmVsT3B0aW9ucyhEYXR1bSBvbGRPcHRpb25zLCBMaXN0ICpkZWZMaXN0 LCBjb25zdCBjaGFyICpuYW1zcGFjZSwKLQkJCQkJY2hhciAqdmFsaWRuc3BzW10sIGJvb2wg YWNjZXB0T2lkc09mZiwgYm9vbCBpc1Jlc2V0KQotewotCURhdHVtCQlyZXN1bHQ7Ci0JQXJy YXlCdWlsZFN0YXRlICphc3RhdGU7Ci0JTGlzdENlbGwgICAqY2VsbDsKLQotCS8qIG5vIGNo YW5nZSBpZiBlbXB0eSBsaXN0ICovCi0JaWYgKGRlZkxpc3QgPT0gTklMKQotCQlyZXR1cm4g b2xkT3B0aW9uczsKLQotCS8qIFdlIGJ1aWxkIG5ldyBhcnJheSB1c2luZyBhY2N1bUFycmF5 UmVzdWx0ICovCi0JYXN0YXRlID0gTlVMTDsKLQotCS8qIENvcHkgYW55IG9sZE9wdGlvbnMg dGhhdCBhcmVuJ3QgdG8gYmUgcmVwbGFjZWQgKi8KLQlpZiAoUG9pbnRlcklzVmFsaWQoRGF0 dW1HZXRQb2ludGVyKG9sZE9wdGlvbnMpKSkKLQl7Ci0JCUFycmF5VHlwZSAgKmFycmF5ID0g RGF0dW1HZXRBcnJheVR5cGVQKG9sZE9wdGlvbnMpOwotCQlEYXR1bQkgICAqb2xkb3B0aW9u czsKLQkJaW50CQkJbm9sZG9wdGlvbnM7Ci0JCWludAkJCWk7Ci0KLQkJZGVjb25zdHJ1Y3Rf YXJyYXlfYnVpbHRpbihhcnJheSwgVEVYVE9JRCwgJm9sZG9wdGlvbnMsIE5VTEwsICZub2xk b3B0aW9ucyk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IG5vbGRvcHRpb25zOyBpKyspCi0JCXsK LQkJCWNoYXIJICAgKnRleHRfc3RyID0gVkFSREFUQShvbGRvcHRpb25zW2ldKTsKLQkJCWlu dAkJCXRleHRfbGVuID0gVkFSU0laRShvbGRvcHRpb25zW2ldKSAtIFZBUkhEUlNaOwotCi0J CQkvKiBTZWFyY2ggZm9yIGEgbWF0Y2ggaW4gZGVmTGlzdCAqLwotCQkJZm9yZWFjaChjZWxs LCBkZWZMaXN0KQotCQkJewotCQkJCURlZkVsZW0gICAgKmRlZiA9IChEZWZFbGVtICopIGxm aXJzdChjZWxsKTsKLQkJCQlpbnQJCQlrd19sZW47Ci0KLQkJCQkvKiBpZ25vcmUgaWYgbm90 IGluIHRoZSBzYW1lIG5hbWVzcGFjZSAqLwotCQkJCWlmIChuYW1zcGFjZSA9PSBOVUxMKQot CQkJCXsKLQkJCQkJaWYgKGRlZi0+ZGVmbmFtZXNwYWNlICE9IE5VTEwpCi0JCQkJCQljb250 aW51ZTsKLQkJCQl9Ci0JCQkJZWxzZSBpZiAoZGVmLT5kZWZuYW1lc3BhY2UgPT0gTlVMTCkK LQkJCQkJY29udGludWU7Ci0JCQkJZWxzZSBpZiAoc3RyY21wKGRlZi0+ZGVmbmFtZXNwYWNl LCBuYW1zcGFjZSkgIT0gMCkKLQkJCQkJY29udGludWU7Ci0KLQkJCQlrd19sZW4gPSBzdHJs ZW4oZGVmLT5kZWZuYW1lKTsKLQkJCQlpZiAodGV4dF9sZW4gPiBrd19sZW4gJiYgdGV4dF9z dHJba3dfbGVuXSA9PSAnPScgJiYKLQkJCQkJc3RybmNtcCh0ZXh0X3N0ciwgZGVmLT5kZWZu YW1lLCBrd19sZW4pID09IDApCi0JCQkJCWJyZWFrOwotCQkJfQotCQkJaWYgKCFjZWxsKQot CQkJewotCQkJCS8qIE5vIG1hdGNoLCBzbyBrZWVwIG9sZCBvcHRpb24gKi8KLQkJCQlhc3Rh dGUgPSBhY2N1bUFycmF5UmVzdWx0KGFzdGF0ZSwgb2xkb3B0aW9uc1tpXSwKLQkJCQkJCQkJ CQkgIGZhbHNlLCBURVhUT0lELAotCQkJCQkJCQkJCSAgQ3VycmVudE1lbW9yeUNvbnRleHQp OwotCQkJfQotCQl9Ci0JfQotCi0JLyoKLQkgKiBJZiBDUkVBVEUvU0VULCBhZGQgbmV3IG9w dGlvbnMgdG8gYXJyYXk7IGlmIFJFU0VULCBqdXN0IGNoZWNrIHRoYXQgdGhlCi0JICogdXNl ciBkaWRuJ3Qgc2F5IFJFU0VUIChvcHRpb249dmFsKS4gIChNdXN0IGRvIHRoaXMgYmVjYXVz ZSB0aGUgZ3JhbW1hcgotCSAqIGRvZXNuJ3QgZW5mb3JjZSBpdC4pCi0JICovCi0JZm9yZWFj aChjZWxsLCBkZWZMaXN0KQotCXsKLQkJRGVmRWxlbSAgICAqZGVmID0gKERlZkVsZW0gKikg bGZpcnN0KGNlbGwpOwotCi0JCWlmIChpc1Jlc2V0KQotCQl7Ci0JCQlpZiAoZGVmLT5hcmcg IT0gTlVMTCkKLQkJCQllcmVwb3J0KEVSUk9SLAotCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9T WU5UQVhfRVJST1IpLAotCQkJCQkJIGVycm1zZygiUkVTRVQgbXVzdCBub3QgaW5jbHVkZSB2 YWx1ZXMgZm9yIHBhcmFtZXRlcnMiKSkpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJdGV4dAkg ICAqdDsKLQkJCWNvbnN0IGNoYXIgKnZhbHVlOwotCQkJU2l6ZQkJbGVuOwotCi0JCQkvKgot CQkJICogRXJyb3Igb3V0IGlmIHRoZSBuYW1lc3BhY2UgaXMgbm90IHZhbGlkLiAgQSBOVUxM IG5hbWVzcGFjZSBpcwotCQkJICogYWx3YXlzIHZhbGlkLgotCQkJICovCi0JCQlpZiAoZGVm LT5kZWZuYW1lc3BhY2UgIT0gTlVMTCkKLQkJCXsKLQkJCQlib29sCQl2YWxpZCA9IGZhbHNl OwotCQkJCWludAkJCWk7Ci0KLQkJCQlpZiAodmFsaWRuc3BzKQotCQkJCXsKLQkJCQkJZm9y IChpID0gMDsgdmFsaWRuc3BzW2ldOyBpKyspCi0JCQkJCXsKLQkJCQkJCWlmIChzdHJjbXAo ZGVmLT5kZWZuYW1lc3BhY2UsIHZhbGlkbnNwc1tpXSkgPT0gMCkKLQkJCQkJCXsKLQkJCQkJ CQl2YWxpZCA9IHRydWU7Ci0JCQkJCQkJYnJlYWs7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9 Ci0KLQkJCQlpZiAoIXZhbGlkKQotCQkJCQllcmVwb3J0KEVSUk9SLAotCQkJCQkJCShlcnJj b2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAotCQkJCQkJCSBlcnJtc2co InVucmVjb2duaXplZCBwYXJhbWV0ZXIgbmFtZXNwYWNlIFwiJXNcIiIsCi0JCQkJCQkJCQlk ZWYtPmRlZm5hbWVzcGFjZSkpKTsKLQkJCX0KLQotCQkJLyogaWdub3JlIGlmIG5vdCBpbiB0 aGUgc2FtZSBuYW1lc3BhY2UgKi8KLQkJCWlmIChuYW1zcGFjZSA9PSBOVUxMKQotCQkJewot CQkJCWlmIChkZWYtPmRlZm5hbWVzcGFjZSAhPSBOVUxMKQotCQkJCQljb250aW51ZTsKLQkJ CX0KLQkJCWVsc2UgaWYgKGRlZi0+ZGVmbmFtZXNwYWNlID09IE5VTEwpCi0JCQkJY29udGlu dWU7Ci0JCQllbHNlIGlmIChzdHJjbXAoZGVmLT5kZWZuYW1lc3BhY2UsIG5hbXNwYWNlKSAh PSAwKQotCQkJCWNvbnRpbnVlOwotCi0JCQkvKgotCQkJICogRmxhdHRlbiB0aGUgRGVmRWxl bSBpbnRvIGEgdGV4dCBzdHJpbmcgbGlrZSAibmFtZT1hcmciLiBJZiB3ZQotCQkJICogaGF2 ZSBqdXN0ICJuYW1lIiwgYXNzdW1lICJuYW1lPXRydWUiIGlzIG1lYW50LiAgTm90ZTogdGhl Ci0JCQkgKiBuYW1lc3BhY2UgaXMgbm90IG91dHB1dC4KLQkJCSAqLwotCQkJaWYgKGRlZi0+ YXJnICE9IE5VTEwpCi0JCQkJdmFsdWUgPSBkZWZHZXRTdHJpbmcoZGVmKTsKLQkJCWVsc2UK LQkJCQl2YWx1ZSA9ICJ0cnVlIjsKLQotCQkJLyoKLQkJCSAqIFRoaXMgaXMgbm90IGEgZ3Jl YXQgcGxhY2UgZm9yIHRoaXMgdGVzdCwgYnV0IHRoZXJlJ3Mgbm8gb3RoZXIKLQkJCSAqIGNv bnZlbmllbnQgcGxhY2UgdG8gZmlsdGVyIHRoZSBvcHRpb24gb3V0LiBBcyBXSVRIIChvaWRz ID0KLQkJCSAqIGZhbHNlKSB3aWxsIGJlIHJlbW92ZWQgc29tZWRheSwgdGhpcyBzZWVtcyBs aWtlIGFuIGFjY2VwdGFibGUKLQkJCSAqIGFtb3VudCBvZiB1Z2x5LgotCQkJICovCi0JCQlp ZiAoYWNjZXB0T2lkc09mZiAmJiBkZWYtPmRlZm5hbWVzcGFjZSA9PSBOVUxMICYmCi0JCQkJ c3RyY21wKGRlZi0+ZGVmbmFtZSwgIm9pZHMiKSA9PSAwKQotCQkJewotCQkJCWlmIChkZWZH ZXRCb29sZWFuKGRlZikpCi0JCQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCQkJKGVycmNvZGUo RVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAotCQkJCQkJCSBlcnJtc2coInRhYmxl cyBkZWNsYXJlZCBXSVRIIE9JRFMgYXJlIG5vdCBzdXBwb3J0ZWQiKSkpOwotCQkJCS8qIHNr aXAgb3ZlciBvcHRpb24sIHJlbG9wdGlvbnMgbWFjaGluZXJ5IGRvZXNuJ3Qga25vdyBpdCAq LwotCQkJCWNvbnRpbnVlOwotCQkJfQotCi0JCQlsZW4gPSBWQVJIRFJTWiArIHN0cmxlbihk ZWYtPmRlZm5hbWUpICsgMSArIHN0cmxlbih2YWx1ZSk7Ci0JCQkvKiArMSBsZWF2ZXMgcm9v bSBmb3Igc3ByaW50ZidzIHRyYWlsaW5nIG51bGwgKi8KLQkJCXQgPSAodGV4dCAqKSBwYWxs b2MobGVuICsgMSk7Ci0JCQlTRVRfVkFSU0laRSh0LCBsZW4pOwotCQkJc3ByaW50ZihWQVJE QVRBKHQpLCAiJXM9JXMiLCBkZWYtPmRlZm5hbWUsIHZhbHVlKTsKLQotCQkJYXN0YXRlID0g YWNjdW1BcnJheVJlc3VsdChhc3RhdGUsIFBvaW50ZXJHZXREYXR1bSh0KSwKLQkJCQkJCQkJ CSAgZmFsc2UsIFRFWFRPSUQsCi0JCQkJCQkJCQkgIEN1cnJlbnRNZW1vcnlDb250ZXh0KTsK LQkJfQotCX0KLQotCWlmIChhc3RhdGUpCi0JCXJlc3VsdCA9IG1ha2VBcnJheVJlc3VsdChh c3RhdGUsIEN1cnJlbnRNZW1vcnlDb250ZXh0KTsKLQllbHNlCi0JCXJlc3VsdCA9IChEYXR1 bSkgMDsKLQotCXJldHVybiByZXN1bHQ7Ci19Ci0KLQotLyoKLSAqIENvbnZlcnQgdGhlIHRl eHQtYXJyYXkgZm9ybWF0IG9mIHJlbG9wdGlvbnMgaW50byBhIExpc3Qgb2YgRGVmRWxlbS4K LSAqIFRoaXMgaXMgdGhlIGludmVyc2Ugb2YgdHJhbnNmb3JtUmVsT3B0aW9ucygpLgotICov Ci1MaXN0ICoKLXVudHJhbnNmb3JtUmVsT3B0aW9ucyhEYXR1bSBvcHRpb25zKQotewotCUxp c3QJICAgKnJlc3VsdCA9IE5JTDsKLQlBcnJheVR5cGUgICphcnJheTsKLQlEYXR1bQkgICAq b3B0aW9uZGF0dW1zOwotCWludAkJCW5vcHRpb25zOwotCWludAkJCWk7Ci0KLQkvKiBOb3Ro aW5nIHRvIGRvIGlmIG5vIG9wdGlvbnMgKi8KLQlpZiAoIVBvaW50ZXJJc1ZhbGlkKERhdHVt R2V0UG9pbnRlcihvcHRpb25zKSkpCi0JCXJldHVybiByZXN1bHQ7Ci0KLQlhcnJheSA9IERh dHVtR2V0QXJyYXlUeXBlUChvcHRpb25zKTsKLQotCWRlY29uc3RydWN0X2FycmF5X2J1aWx0 aW4oYXJyYXksIFRFWFRPSUQsICZvcHRpb25kYXR1bXMsIE5VTEwsICZub3B0aW9ucyk7Ci0K LQlmb3IgKGkgPSAwOyBpIDwgbm9wdGlvbnM7IGkrKykKLQl7Ci0JCWNoYXIJICAgKnM7Ci0J CWNoYXIJICAgKnA7Ci0JCU5vZGUJICAgKnZhbCA9IE5VTEw7Ci0KLQkJcyA9IFRleHREYXR1 bUdldENTdHJpbmcob3B0aW9uZGF0dW1zW2ldKTsKLQkJcCA9IHN0cmNocihzLCAnPScpOwot CQlpZiAocCkKLQkJewotCQkJKnArKyA9ICdcMCc7Ci0JCQl2YWwgPSAoTm9kZSAqKSBtYWtl U3RyaW5nKHApOwotCQl9Ci0JCXJlc3VsdCA9IGxhcHBlbmQocmVzdWx0LCBtYWtlRGVmRWxl bShzLCB2YWwsIC0xKSk7Ci0JfQotCi0JcmV0dXJuIHJlc3VsdDsKKwlvcHRpb25zU3BlY1Nl dEFkZFN0cmluZyhyZWxvcHRzLT5zcGVjX3NldCwgbmFtZSwgZGVzYywgTm9Mb2NrLCBvZmZz ZXQsCisJCQkJCQkJTlVMTCwgZGVmYXVsdF92YWwsIHZhbGlkYXRvciwgZmlsbGVyKTsKIH0K IAogLyoKQEAgLTEzNzksMTIgKzIzMywxMyBAQCB1bnRyYW5zZm9ybVJlbE9wdGlvbnMoRGF0 dW0gb3B0aW9ucykKICAqLwogYnl0ZWEgKgogZXh0cmFjdFJlbE9wdGlvbnMoSGVhcFR1cGxl IHR1cGxlLCBUdXBsZURlc2MgdHVwZGVzYywKLQkJCQkgIGFtb3B0aW9uc19mdW5jdGlvbiBh bW9wdGlvbnMpCisJCQkJICBhbXJlbG9wdHNwZWNzZXRfZnVuY3Rpb24gYW1vcHRpb25zc3Bl Y3NldGZuKQogewogCWJ5dGVhCSAgICpvcHRpb25zOwogCWJvb2wJCWlzbnVsbDsKIAlEYXR1 bQkJZGF0dW07CiAJRm9ybV9wZ19jbGFzcyBjbGFzc0Zvcm07CisJb3B0aW9uc19zcGVjX3Nl dCAqc3BlY19zZXQ7CiAKIAlkYXR1bSA9IGZhc3RnZXRhdHRyKHR1cGxlLAogCQkJCQkJQW51 bV9wZ19jbGFzc19yZWxvcHRpb25zLApAQCAtMTM5OCw1NDQgKzI1MywzMjYgQEAgZXh0cmFj dFJlbE9wdGlvbnMoSGVhcFR1cGxlIHR1cGxlLCBUdXBsZURlc2MgdHVwZGVzYywKIAkvKiBQ YXJzZSBpbnRvIGFwcHJvcHJpYXRlIGZvcm1hdDsgZG9uJ3QgZXJyb3Igb3V0IGhlcmUgKi8K IAlzd2l0Y2ggKGNsYXNzRm9ybS0+cmVsa2luZCkKIAl7Ci0JCWNhc2UgUkVMS0lORF9SRUxB VElPTjoKIAkJY2FzZSBSRUxLSU5EX1RPQVNUVkFMVUU6CisJCQlzcGVjX3NldCA9IGdldF90 b2FzdF9yZWxvcHRfc3BlY19zZXQoKTsKKwkJCWJyZWFrOworCQljYXNlIFJFTEtJTkRfUkVM QVRJT046CiAJCWNhc2UgUkVMS0lORF9NQVRWSUVXOgotCQkJb3B0aW9ucyA9IGhlYXBfcmVs b3B0aW9ucyhjbGFzc0Zvcm0tPnJlbGtpbmQsIGRhdHVtLCBmYWxzZSk7CisJCQlzcGVjX3Nl dCA9IGdldF9oZWFwX3JlbG9wdF9zcGVjX3NldCgpOwogCQkJYnJlYWs7CiAJCWNhc2UgUkVM S0lORF9QQVJUSVRJT05FRF9UQUJMRToKLQkJCW9wdGlvbnMgPSBwYXJ0aXRpb25lZF90YWJs ZV9yZWxvcHRpb25zKGRhdHVtLCBmYWxzZSk7CisJCQlzcGVjX3NldCA9IGdldF9wYXJ0aXRp b25lZF9yZWxvcHRfc3BlY19zZXQoKTsKIAkJCWJyZWFrOwogCQljYXNlIFJFTEtJTkRfVklF VzoKLQkJCW9wdGlvbnMgPSB2aWV3X3JlbG9wdGlvbnMoZGF0dW0sIGZhbHNlKTsKKwkJCXNw ZWNfc2V0ID0gZ2V0X3ZpZXdfcmVsb3B0X3NwZWNfc2V0KCk7CiAJCQlicmVhazsKIAkJY2Fz ZSBSRUxLSU5EX0lOREVYOgogCQljYXNlIFJFTEtJTkRfUEFSVElUSU9ORURfSU5ERVg6Ci0J CQlvcHRpb25zID0gaW5kZXhfcmVsb3B0aW9ucyhhbW9wdGlvbnMsIGRhdHVtLCBmYWxzZSk7 CisJCQlpZiAoYW1vcHRpb25zc3BlY3NldGZuKQorCQkJCXNwZWNfc2V0ID0gYW1vcHRpb25z c3BlY3NldGZuKCk7CisJCQllbHNlCisJCQkJc3BlY19zZXQgPSBOVUxMOwogCQkJYnJlYWs7 CiAJCWNhc2UgUkVMS0lORF9GT1JFSUdOX1RBQkxFOgotCQkJb3B0aW9ucyA9IE5VTEw7CisJ CQlzcGVjX3NldCA9IE5VTEw7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCUFzc2VydChm YWxzZSk7CQkvKiBjYW4ndCBnZXQgaGVyZSAqLwotCQkJb3B0aW9ucyA9IE5VTEw7CQkvKiBr ZWVwIGNvbXBpbGVyIHF1aWV0ICovCisJCQlzcGVjX3NldCA9IE5VTEw7CS8qIGtlZXAgY29t cGlsZXIgcXVpZXQgKi8KIAkJCWJyZWFrOwogCX0KLQorCWlmIChzcGVjX3NldCkKKwkJb3B0 aW9ucyA9IG9wdGlvbnNUZXh0QXJyYXlUb0J5dGVhKHNwZWNfc2V0LCBkYXR1bSwgMCk7CisJ ZWxzZQorCQlvcHRpb25zID0gTlVMTDsKIAlyZXR1cm4gb3B0aW9uczsKIH0KIAotc3RhdGlj IHZvaWQKLXBhcnNlUmVsT3B0aW9uc0ludGVybmFsKERhdHVtIG9wdGlvbnMsIGJvb2wgdmFs aWRhdGUsCi0JCQkJCQlyZWxvcHRfdmFsdWUgKnJlbG9wdGlvbnMsIGludCBudW1vcHRpb25z KQordm9pZAorb2lkX3Bvc3R2YWxpZGF0ZShvcHRpb25fdmFsdWUgKnZhbHVlKQogewotCUFy cmF5VHlwZSAgKmFycmF5ID0gRGF0dW1HZXRBcnJheVR5cGVQKG9wdGlvbnMpOwotCURhdHVt CSAgICpvcHRpb25kYXR1bXM7Ci0JaW50CQkJbm9wdGlvbnM7Ci0JaW50CQkJaTsKLQotCWRl Y29uc3RydWN0X2FycmF5X2J1aWx0aW4oYXJyYXksIFRFWFRPSUQsICZvcHRpb25kYXR1bXMs IE5VTEwsICZub3B0aW9ucyk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbm9wdGlvbnM7IGkrKykK LQl7Ci0JCWNoYXIJICAgKnRleHRfc3RyID0gVkFSREFUQShvcHRpb25kYXR1bXNbaV0pOwot CQlpbnQJCQl0ZXh0X2xlbiA9IFZBUlNJWkUob3B0aW9uZGF0dW1zW2ldKSAtIFZBUkhEUlNa OwotCQlpbnQJCQlqOwotCi0JCS8qIFNlYXJjaCBmb3IgYSBtYXRjaCBpbiByZWxvcHRpb25z ICovCi0JCWZvciAoaiA9IDA7IGogPCBudW1vcHRpb25zOyBqKyspCi0JCXsKLQkJCWludAkJ CWt3X2xlbiA9IHJlbG9wdGlvbnNbal0uZ2VuLT5uYW1lbGVuOwotCi0JCQlpZiAodGV4dF9s ZW4gPiBrd19sZW4gJiYgdGV4dF9zdHJba3dfbGVuXSA9PSAnPScgJiYKLQkJCQlzdHJuY21w KHRleHRfc3RyLCByZWxvcHRpb25zW2pdLmdlbi0+bmFtZSwga3dfbGVuKSA9PSAwKQotCQkJ ewotCQkJCXBhcnNlX29uZV9yZWxvcHRpb24oJnJlbG9wdGlvbnNbal0sIHRleHRfc3RyLCB0 ZXh0X2xlbiwKLQkJCQkJCQkJCXZhbGlkYXRlKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQot Ci0JCWlmIChqID49IG51bW9wdGlvbnMgJiYgdmFsaWRhdGUpCi0JCXsKLQkJCWNoYXIJICAg KnM7Ci0JCQljaGFyCSAgICpwOwotCi0JCQlzID0gVGV4dERhdHVtR2V0Q1N0cmluZyhvcHRp b25kYXR1bXNbaV0pOwotCQkJcCA9IHN0cmNocihzLCAnPScpOwotCQkJaWYgKHApCi0JCQkJ KnAgPSAnXDAnOwotCQkJZXJlcG9ydChFUlJPUiwKLQkJCQkJKGVycmNvZGUoRVJSQ09ERV9J TlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCi0JCQkJCSBlcnJtc2coInVucmVjb2duaXplZCBw YXJhbWV0ZXIgXCIlc1wiIiwgcykpKTsKLQkJfQotCX0KLQotCS8qIEl0J3Mgd29ydGggYXZv aWRpbmcgbWVtb3J5IGxlYWtzIGluIHRoaXMgZnVuY3Rpb24gKi8KLQlwZnJlZShvcHRpb25k YXR1bXMpOwotCi0JaWYgKCgodm9pZCAqKSBhcnJheSkgIT0gRGF0dW1HZXRQb2ludGVyKG9w dGlvbnMpKQotCQlwZnJlZShhcnJheSk7CisJaWYgKHZhbHVlLT52YWx1ZXMuYm9vbF92YWwp CisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9T VVBQT1JURUQpLAorCQkJCSBlcnJtc2coInRhYmxlcyBkZWNsYXJlZCBXSVRIIE9JRFMgYXJl IG5vdCBzdXBwb3J0ZWQiKSkpOwogfQogCiAvKgotICogSW50ZXJwcmV0IHJlbG9wdGlvbnMg dGhhdCBhcmUgZ2l2ZW4gaW4gdGV4dC1hcnJheSBmb3JtYXQuCisgKiBSZWxhdGlvbiBvcHRp b25zIGFuZCBMb2NrIGxldmVsczoKKyAqCisgKiBUaGUgZGVmYXVsdCBjaG9pY2UgZm9yIGFu eSBuZXcgb3B0aW9uIHNob3VsZCBiZSBBY2Nlc3NFeGNsdXNpdmVMb2NrLgorICogSW4gc29t ZSBjYXNlcyB0aGUgbG9jayBsZXZlbCBjYW4gYmUgcmVkdWNlZCBmcm9tIHRoZXJlLCBidXQg dGhlIGxvY2sKKyAqIGxldmVsIGNob3NlbiBzaG91bGQgYWx3YXlzIGNvbmZsaWN0IHdpdGgg aXRzZWxmIHRvIGVuc3VyZSB0aGF0IG11bHRpcGxlCisgKiBjaGFuZ2VzIGFyZW4ndCBsb3N0 IHdoZW4gd2UgYXR0ZW1wdCBjb25jdXJyZW50IGNoYW5nZXMuCisgKiBUaGUgY2hvaWNlIG9m IGxvY2sgbGV2ZWwgZGVwZW5kcyBjb21wbGV0ZWx5IHVwb24gaG93IHRoYXQgcGFyYW1ldGVy CisgKiBpcyB1c2VkIHdpdGhpbiB0aGUgc2VydmVyLCBub3QgdXBvbiBob3cgYW5kIHdoZW4g eW91J2QgbGlrZSB0byBjaGFuZ2UgaXQuCisgKiBTYWZldHkgZmlyc3QuIEV4aXN0aW5nIGNo b2ljZXMgYXJlIGRvY3VtZW50ZWQgaGVyZSwgYW5kIGVsc2V3aGVyZSBpbgorICogYmFja2Vu ZCBjb2RlIHdoZXJlIHRoZSBwYXJhbWV0ZXJzIGFyZSB1c2VkLgorICoKKyAqIEluIGdlbmVy YWwsIGFueXRoaW5nIHRoYXQgYWZmZWN0cyB0aGUgcmVzdWx0cyBvYnRhaW5lZCBmcm9tIGEg U0VMRUNUIG11c3QgYmUKKyAqIHByb3RlY3RlZCBieSBBY2Nlc3NFeGNsdXNpdmVMb2NrLgog ICoKLSAqIG9wdGlvbnMgaXMgYSByZWxvcHRpb24gdGV4dCBhcnJheSBhcyBjb25zdHJ1Y3Rl ZCBieSB0cmFuc2Zvcm1SZWxPcHRpb25zLgotICoga2luZCBzcGVjaWZpZXMgdGhlIGZhbWls eSBvZiBvcHRpb25zIHRvIGJlIHByb2Nlc3NlZC4KKyAqIEF1dG92YWN1dW0gcmVsYXRlZCBw YXJhbWV0ZXJzIGNhbiBiZSBzZXQgYXQgU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrCisgKiBz aW5jZSB0aGV5IGFyZSBvbmx5IHVzZWQgYnkgdGhlIEFWIHByb2NzIGFuZCBkb24ndCBjaGFu Z2UgYW55dGhpbmcKKyAqIGN1cnJlbnRseSBleGVjdXRpbmcuCiAgKgotICogVGhlIHJldHVy biB2YWx1ZSBpcyBhIHJlbG9wdF92YWx1ZSAqIGFycmF5IG9uIHdoaWNoIHRoZSBvcHRpb25z IGFjdHVhbGx5Ci0gKiBzZXQgaW4gdGhlIG9wdGlvbnMgYXJyYXkgYXJlIG1hcmtlZCB3aXRo IGlzc2V0PXRydWUuICBUaGUgbGVuZ3RoIG9mIHRoaXMKLSAqIGFycmF5IGlzIHJldHVybmVk IGluICpudW1yZWxvcHRzLiAgT3B0aW9ucyBub3Qgc2V0IGFyZSBhbHNvIHByZXNlbnQgaW4g dGhlCi0gKiBhcnJheTsgdGhpcyBpcyBzbyB0aGF0IHRoZSBjYWxsZXIgY2FuIGVhc2lseSBs b2NhdGUgdGhlIGRlZmF1bHQgdmFsdWVzLgorICogRmlsbGZhY3RvciBjYW4gYmUgc2V0IGJl Y2F1c2UgaXQgYXBwbGllcyBvbmx5IHRvIHN1YnNlcXVlbnQgY2hhbmdlcyBtYWRlIHRvCisg KiBkYXRhIGJsb2NrcywgYXMgZG9jdW1lbnRlZCBpbiBoZWFwaW8uYwogICoKLSAqIElmIHRo ZXJlIGFyZSBubyBvcHRpb25zIG9mIHRoZSBnaXZlbiBraW5kLCBudW1yZWxvcHRzIGlzIHNl dCB0byAwIGFuZCBOVUxMCi0gKiBpcyByZXR1cm5lZCAodW5sZXNzIG9wdGlvbnMgYXJlIGls bGVnYWxseSBzdXBwbGllZCBkZXNwaXRlIG5vbmUgYmVpbmcKLSAqIGRlZmluZWQsIGluIHdo aWNoIGNhc2UgYW4gZXJyb3Igb2NjdXJzKS4KKyAqIG5fZGlzdGluY3Qgb3B0aW9ucyBjYW4g YmUgc2V0IGF0IFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jayBiZWNhdXNlIHRoZXkKKyAqIGFy ZSBvbmx5IHVzZWQgZHVyaW5nIEFOQUxZWkUsIHdoaWNoIHVzZXMgYSBTaGFyZVVwZGF0ZUV4 Y2x1c2l2ZUxvY2ssCisgKiBzbyB0aGUgQU5BTFlaRSB3aWxsIG5vdCBiZSBhZmZlY3RlZCBi eSBpbi1mbGlnaHQgY2hhbmdlcy4gQ2hhbmdpbmcgdGhvc2UKKyAqIHZhbHVlcyBoYXMgbm8g YWZmZWN0IHVudGlsIHRoZSBuZXh0IEFOQUxZWkUsIHNvIG5vIG5lZWQgZm9yIHN0cm9uZ2Vy IGxvY2suCiAgKgotICogTm90ZTogdmFsdWVzIG9mIHR5cGUgaW50LCBib29sIGFuZCByZWFs IGFyZSBhbGxvY2F0ZWQgYXMgcGFydCBvZiB0aGUKLSAqIHJldHVybmVkIGFycmF5LiAgVmFs dWVzIG9mIHR5cGUgc3RyaW5nIGFyZSBhbGxvY2F0ZWQgc2VwYXJhdGVseSBhbmQgbXVzdAot ICogYmUgZnJlZWQgYnkgdGhlIGNhbGxlci4KLSAqLwotc3RhdGljIHJlbG9wdF92YWx1ZSAq Ci1wYXJzZVJlbE9wdGlvbnMoRGF0dW0gb3B0aW9ucywgYm9vbCB2YWxpZGF0ZSwgcmVsb3B0 X2tpbmQga2luZCwKLQkJCQlpbnQgKm51bXJlbG9wdHMpCi17Ci0JcmVsb3B0X3ZhbHVlICpy ZWxvcHRpb25zID0gTlVMTDsKLQlpbnQJCQludW1vcHRpb25zID0gMDsKLQlpbnQJCQlpOwot CWludAkJCWo7Ci0KLQlpZiAobmVlZF9pbml0aWFsaXphdGlvbikKLQkJaW5pdGlhbGl6ZV9y ZWxvcHRpb25zKCk7Ci0KLQkvKiBCdWlsZCBhIGxpc3Qgb2YgZXhwZWN0ZWQgb3B0aW9ucywg YmFzZWQgb24ga2luZCAqLwotCi0JZm9yIChpID0gMDsgcmVsT3B0c1tpXTsgaSsrKQotCQlp ZiAocmVsT3B0c1tpXS0+a2luZHMgJiBraW5kKQotCQkJbnVtb3B0aW9ucysrOwotCi0JaWYg KG51bW9wdGlvbnMgPiAwKQotCXsKLQkJcmVsb3B0aW9ucyA9IHBhbGxvYyhudW1vcHRpb25z ICogc2l6ZW9mKHJlbG9wdF92YWx1ZSkpOwotCi0JCWZvciAoaSA9IDAsIGogPSAwOyByZWxP cHRzW2ldOyBpKyspCi0JCXsKLQkJCWlmIChyZWxPcHRzW2ldLT5raW5kcyAmIGtpbmQpCi0J CQl7Ci0JCQkJcmVsb3B0aW9uc1tqXS5nZW4gPSByZWxPcHRzW2ldOwotCQkJCXJlbG9wdGlv bnNbal0uaXNzZXQgPSBmYWxzZTsKLQkJCQlqKys7Ci0JCQl9Ci0JCX0KKyAqIFBsYW5uZXIt cmVsYXRlZCBwYXJhbWV0ZXJzIGNhbiBiZSBzZXQgd2l0aCBTaGFyZVVwZGF0ZUV4Y2x1c2l2 ZUxvY2sgYmVjYXVzZQorICogdGhleSBvbmx5IGFmZmVjdCBwbGFubmluZyBhbmQgbm90IHRo ZSBjb3JyZWN0bmVzcyBvZiB0aGUgZXhlY3V0aW9uLiBQbGFucworICogY2Fubm90IGJlIGNo YW5nZWQgaW4gbWlkLWZsaWdodCwgc28gY2hhbmdlcyBoZXJlIGNvdWxkIG5vdCBlYXNpbHkg cmVzdWx0IGluCisgKiBuZXcgaW1wcm92ZWQgcGxhbnMgaW4gYW55IGNhc2UuIFNvIHdlIGFs bG93IGV4aXN0aW5nIHF1ZXJpZXMgdG8gY29udGludWUKKyAqIGFuZCBleGlzdGluZyBwbGFu cyB0byBzdXJ2aXZlLCBhIHNtYWxsIHByaWNlIHRvIHBheSBmb3IgYWxsb3dpbmcgYmV0dGVy CisgKiBwbGFucyB0byBiZSBpbnRyb2R1Y2VkIGNvbmN1cnJlbnRseSB3aXRob3V0IGludGVy ZmVyaW5nIHdpdGggdXNlcnMuCisgKgorICogU2V0dGluZyBwYXJhbGxlbF93b3JrZXJzIGlz IHNhZmUsIHNpbmNlIGl0IGFjdHMgdGhlIHNhbWUgYXMKKyAqIG1heF9wYXJhbGxlbF93b3Jr ZXJzX3Blcl9nYXRoZXIgd2hpY2ggaXMgYSBVU0VSU0VUIHBhcmFtZXRlciB0aGF0IGRvZXNu J3QKKyAqIGFmZmVjdCBleGlzdGluZyBwbGFucyBvciBxdWVyaWVzLgorICovCisKKworb3B0 aW9uc19zcGVjX3NldCAqCitnZXRfc3RkcmRfcmVsb3B0X3NwZWNfc2V0KGJvb2wgaXNfaGVh cCkKK3sKKwlvcHRpb25zX3NwZWNfc2V0ICpzdGRyZF9yZWxvcHRfc3BlY19zZXQgPSBhbGxv Y2F0ZU9wdGlvbnNTcGVjU2V0KAorCQkJCQkgaXNfaGVhcCA/IE5VTEwgOiAidG9hc3QiLCBz aXplb2YoU3RkUmRPcHRpb25zKSwgZmFsc2UsIDApOworCisJaWYgKGlzX2hlYXApCisJCW9w dGlvbnNTcGVjU2V0QWRkSW50KHN0ZHJkX3JlbG9wdF9zcGVjX3NldCwgImZpbGxmYWN0b3Ii LAorCQkJCQkJCSAiUGFja3MgdGFibGUgcGFnZXMgb25seSB0byB0aGlzIHBlcmNlbnRhZyIs CisJCQkJCQkJIFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jaywJLyogc2luY2UgaXQgYXBwbGll cyBvbmx5CisJCQkJCQkJCQkJCQkJCSAqIHRvIGxhdGVyIGluc2VydHMgKi8KKwkJCQkJCQkg b2Zmc2V0b2YoU3RkUmRPcHRpb25zLCBmaWxsZmFjdG9yKSwgTlVMTCwKKwkJCQkJCQkgSEVB UF9ERUZBVUxUX0ZJTExGQUNUT1IsIEhFQVBfTUlOX0ZJTExGQUNUT1IsIDEwMCk7CisKKwlv cHRpb25zU3BlY1NldEFkZEJvb2woc3RkcmRfcmVsb3B0X3NwZWNfc2V0LCAiYXV0b3ZhY3V1 bV9lbmFibGVkIiwKKwkJCQkJCSAgIkVuYWJsZXMgYXV0b3ZhY3V1bSBpbiB0aGlzIHJlbGF0 aW9uIiwKKwkJCQkJCSAgU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrLAorCQkJCQkJICBvZmZz ZXRvZihTdGRSZE9wdGlvbnMsIGF1dG92YWN1dW0pICsKKwkJCQkJCSAgb2Zmc2V0b2YoQXV0 b1ZhY09wdHMsIGVuYWJsZWQpLAorCQkJCQkJICBOVUxMLCB0cnVlKTsKKworCW9wdGlvbnNT cGVjU2V0QWRkSW50KHN0ZHJkX3JlbG9wdF9zcGVjX3NldCwgImF1dG92YWN1dW1fdmFjdXVt X3RocmVzaG9sZCIsCisJCQkJCQkgIk1pbmltdW0gbnVtYmVyIG9mIHR1cGxlIHVwZGF0ZXMg b3IgZGVsZXRlcyBwcmlvciB0byB2YWN1dW0iLAorCQkJCQkJIFNoYXJlVXBkYXRlRXhjbHVz aXZlTG9jaywKKwkJCQkJCSBvZmZzZXRvZihTdGRSZE9wdGlvbnMsIGF1dG92YWN1dW0pICsK KwkJCQkJCSBvZmZzZXRvZihBdXRvVmFjT3B0cywgdmFjdXVtX3RocmVzaG9sZCksCisJCQkJ CQkgTlVMTCwgLTEsIDAsIElOVF9NQVgpOworCisJaWYgKGlzX2hlYXApCisJCW9wdGlvbnNT cGVjU2V0QWRkSW50KHN0ZHJkX3JlbG9wdF9zcGVjX3NldCwgImF1dG92YWN1dW1fYW5hbHl6 ZV90aHJlc2hvbGQiLAorCQkJCQkJCSAiTWluaW11bSBudW1iZXIgb2YgdHVwbGUgdXBkYXRl cyBvciBkZWxldGVzIHByaW9yIHRvIHZhY3V1bSIsCisJCQkJCQkJIFNoYXJlVXBkYXRlRXhj bHVzaXZlTG9jaywKKwkJCQkJCQkgb2Zmc2V0b2YoU3RkUmRPcHRpb25zLCBhdXRvdmFjdXVt KSArCisJCQkJCQkJIG9mZnNldG9mKEF1dG9WYWNPcHRzLCBhbmFseXplX3RocmVzaG9sZCks CisJCQkJCQkJIE5VTEwsIC0xLCAwLCBJTlRfTUFYKTsKKworCW9wdGlvbnNTcGVjU2V0QWRk SW50KHN0ZHJkX3JlbG9wdF9zcGVjX3NldCwgImF1dG92YWN1dW1fdmFjdXVtX2Nvc3RfbGlt aXQiLAorCQkJCQkJICJWYWN1dW0gY29zdCBhbW91bnQgYXZhaWxhYmxlIGJlZm9yZSBuYXBw aW5nLCBmb3IgYXV0b3ZhY3V1bSIsCisJCQkJCQkgU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2Nr LAorCQkJCQkJIG9mZnNldG9mKFN0ZFJkT3B0aW9ucywgYXV0b3ZhY3V1bSkgKworCQkJCQkJ IG9mZnNldG9mKEF1dG9WYWNPcHRzLCB2YWN1dW1fY29zdF9saW1pdCksCisJCQkJCQkgTlVM TCwgLTEsIDAsIDEwMDAwKTsKKworCW9wdGlvbnNTcGVjU2V0QWRkSW50KHN0ZHJkX3JlbG9w dF9zcGVjX3NldCwgImF1dG92YWN1dW1fZnJlZXplX21pbl9hZ2UiLAorCQkJCQkJICJNaW5p bXVtIGFnZSBhdCB3aGljaCBWQUNVVU0gc2hvdWxkIGZyZWV6ZSBhIHRhYmxlIHJvdywgZm9y IGF1dG92YWN1dW0iLAorCQkJCQkJIFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jaywKKwkJCQkJ CSBvZmZzZXRvZihTdGRSZE9wdGlvbnMsIGF1dG92YWN1dW0pICsKKwkJCQkJCSBvZmZzZXRv ZihBdXRvVmFjT3B0cywgZnJlZXplX21pbl9hZ2UpLAorCQkJCQkJIE5VTEwsIC0xLCAwLCAx MDAwMDAwMDAwKTsKKworCW9wdGlvbnNTcGVjU2V0QWRkSW50KHN0ZHJkX3JlbG9wdF9zcGVj X3NldCwgImF1dG92YWN1dW1fZnJlZXplX21heF9hZ2UiLAorCQkJCQkJICJBZ2UgYXQgd2hp Y2ggdG8gYXV0b3ZhY3V1bSBhIHRhYmxlIHRvIHByZXZlbnQgdHJhbnNhY3Rpb24gSUQgd3Jh cGFyb3VuZCIsCisJCQkJCQkgU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrLAorCQkJCQkJIG9m ZnNldG9mKFN0ZFJkT3B0aW9ucywgYXV0b3ZhY3V1bSkgKworCQkJCQkJIG9mZnNldG9mKEF1 dG9WYWNPcHRzLCBmcmVlemVfbWF4X2FnZSksCisJCQkJCQkgTlVMTCwgLTEsIDEwMDAwMCwg MjAwMDAwMDAwMCk7CisKKwlvcHRpb25zU3BlY1NldEFkZEludChzdGRyZF9yZWxvcHRfc3Bl Y19zZXQsICJhdXRvdmFjdXVtX2ZyZWV6ZV90YWJsZV9hZ2UiLAorCQkJCQkJICJBZ2UgYXQg d2hpY2ggVkFDVVVNIHNob3VsZCBwZXJmb3JtIGEgZnVsbCB0YWJsZSBzd2VlcCB0byBmcmVl emUgcm93IHZlcnNpb25zIiwKKwkJCQkJCSBTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2ssCisJ CQkJCQkgb2Zmc2V0b2YoU3RkUmRPcHRpb25zLCBhdXRvdmFjdXVtKSArCisJCQkJCQkgb2Zm c2V0b2YoQXV0b1ZhY09wdHMsIGZyZWV6ZV90YWJsZV9hZ2UpLAorCQkJCQkJIE5VTEwsIC0x LCAwLCAyMDAwMDAwMDAwKTsKKworCW9wdGlvbnNTcGVjU2V0QWRkSW50KHN0ZHJkX3JlbG9w dF9zcGVjX3NldCwgImF1dG92YWN1dW1fbXVsdGl4YWN0X2ZyZWV6ZV9taW5fYWdlIiwKKwkJ CQkJCSAiTWluaW11bSBtdWx0aXhhY3QgYWdlIGF0IHdoaWNoIFZBQ1VVTSBzaG91bGQgZnJl ZXplIGEgcm93IG11bHRpeGFjdCdzLCBmb3IgYXV0b3ZhY3V1bSIsCisJCQkJCQkgU2hhcmVV cGRhdGVFeGNsdXNpdmVMb2NrLAorCQkJCQkJIG9mZnNldG9mKFN0ZFJkT3B0aW9ucywgYXV0 b3ZhY3V1bSkgKworCQkJCQkJIG9mZnNldG9mKEF1dG9WYWNPcHRzLCBtdWx0aXhhY3RfZnJl ZXplX21pbl9hZ2UpLAorCQkJCQkJIE5VTEwsIC0xLCAwLCAxMDAwMDAwMDAwKTsKKworCW9w dGlvbnNTcGVjU2V0QWRkSW50KHN0ZHJkX3JlbG9wdF9zcGVjX3NldCwgImF1dG92YWN1dW1f bXVsdGl4YWN0X2ZyZWV6ZV9tYXhfYWdlIiwKKwkJCQkJCSAiTXVsdGl4YWN0IGFnZSBhdCB3 aGljaCB0byBhdXRvdmFjdXVtIGEgdGFibGUgdG8gcHJldmVudCBtdWx0aXhhY3Qgd3JhcGFy b3VuZCIsCisJCQkJCQkgU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrLAorCQkJCQkJIG9mZnNl dG9mKFN0ZFJkT3B0aW9ucywgYXV0b3ZhY3V1bSkgKworCQkJCQkJIG9mZnNldG9mKEF1dG9W YWNPcHRzLCBtdWx0aXhhY3RfZnJlZXplX21heF9hZ2UpLAorCQkJCQkJIE5VTEwsIC0xLCAx MDAwMCwgMjAwMDAwMDAwMCk7CisKKwlvcHRpb25zU3BlY1NldEFkZEludChzdGRyZF9yZWxv cHRfc3BlY19zZXQsICJhdXRvdmFjdXVtX211bHRpeGFjdF9mcmVlemVfdGFibGVfYWdlIiwK KwkJCQkJCSAiQWdlIG9mIG11bHRpeGFjdCBhdCB3aGljaCBWQUNVVU0gc2hvdWxkIHBlcmZv cm0gYSBmdWxsIHRhYmxlIHN3ZWVwIHRvIGZyZWV6ZSByb3cgdmVyc2lvbnMiLAorCQkJCQkJ IFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jaywKKwkJCQkJCSBvZmZzZXRvZihTdGRSZE9wdGlv bnMsIGF1dG92YWN1dW0pICsKKwkJCQkJCSBvZmZzZXRvZihBdXRvVmFjT3B0cywgbXVsdGl4 YWN0X2ZyZWV6ZV90YWJsZV9hZ2UpLAorCQkJCQkJIE5VTEwsIC0xLCAwLCAyMDAwMDAwMDAw KTsKKworCW9wdGlvbnNTcGVjU2V0QWRkSW50KHN0ZHJkX3JlbG9wdF9zcGVjX3NldCwgImxv Z19hdXRvdmFjdXVtX21pbl9kdXJhdGlvbiIsCisJCQkJCQkgIlNldHMgdGhlIG1pbmltdW0g ZXhlY3V0aW9uIHRpbWUgYWJvdmUgd2hpY2ggYXV0b3ZhY3V1bSBhY3Rpb25zIHdpbGwgYmUg bG9nZ2VkIiwKKwkJCQkJCSBTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2ssCisJCQkJCQkgb2Zm c2V0b2YoU3RkUmRPcHRpb25zLCBhdXRvdmFjdXVtKSArCisJCQkJCQkgb2Zmc2V0b2YoQXV0 b1ZhY09wdHMsIGxvZ19taW5fZHVyYXRpb24pLAorCQkJCQkJIE5VTEwsIC0xLCAtMSwgSU5U X01BWCk7CisKKwlvcHRpb25zU3BlY1NldEFkZFJlYWwoc3RkcmRfcmVsb3B0X3NwZWNfc2V0 LCAiYXV0b3ZhY3V1bV92YWN1dW1fY29zdF9kZWxheSIsCisJCQkJCQkgICJWYWN1dW0gY29z dCBkZWxheSBpbiBtaWxsaXNlY29uZHMsIGZvciBhdXRvdmFjdXVtIiwKKwkJCQkJCSAgU2hh cmVVcGRhdGVFeGNsdXNpdmVMb2NrLAorCQkJCQkJICBvZmZzZXRvZihTdGRSZE9wdGlvbnMs IGF1dG92YWN1dW0pICsKKwkJCQkJCSAgb2Zmc2V0b2YoQXV0b1ZhY09wdHMsIHZhY3V1bV9j b3N0X2RlbGF5KSwKKwkJCQkJCSAgTlVMTCwgLTEsIDAuMCwgMTAwLjApOworCisJb3B0aW9u c1NwZWNTZXRBZGRSZWFsKHN0ZHJkX3JlbG9wdF9zcGVjX3NldCwgImF1dG92YWN1dW1fdmFj dXVtX3NjYWxlX2ZhY3RvciIsCisJCQkJCQkgICJOdW1iZXIgb2YgdHVwbGUgdXBkYXRlcyBv ciBkZWxldGVzIHByaW9yIHRvIHZhY3V1bSBhcyBhIGZyYWN0aW9uIG9mIHJlbHR1cGxlcyIs CisJCQkJCQkgIFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jaywKKwkJCQkJCSAgb2Zmc2V0b2Yo U3RkUmRPcHRpb25zLCBhdXRvdmFjdXVtKSArCisJCQkJCQkgIG9mZnNldG9mKEF1dG9WYWNP cHRzLCB2YWN1dW1fc2NhbGVfZmFjdG9yKSwKKwkJCQkJCSAgTlVMTCwgLTEsIDAuMCwgMTAw LjApOworCisJb3B0aW9uc1NwZWNTZXRBZGRSZWFsKHN0ZHJkX3JlbG9wdF9zcGVjX3NldCwg ImF1dG92YWN1dW1fdmFjdXVtX2luc2VydF9zY2FsZV9mYWN0b3IiLAorCQkJCQkJICAiTnVt YmVyIG9mIHR1cGxlIGluc2VydHMgcHJpb3IgdG8gdmFjdXVtIGFzIGEgZnJhY3Rpb24gb2Yg cmVsdHVwbGVzIiwKKwkJCQkJCSAgU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrLAorCQkJCQkJ ICBvZmZzZXRvZihTdGRSZE9wdGlvbnMsIGF1dG92YWN1dW0pICsKKwkJCQkJCSAgb2Zmc2V0 b2YoQXV0b1ZhY09wdHMsIHZhY3V1bV9pbnNfc2NhbGVfZmFjdG9yKSwKKwkJCQkJCSAgTlVM TCwgLTEsIDAuMCwgMTAwLjApOworCWlmIChpc19oZWFwKQorCXsKKwkJb3B0aW9uc1NwZWNT ZXRBZGRSZWFsKHN0ZHJkX3JlbG9wdF9zcGVjX3NldCwgImF1dG92YWN1dW1fYW5hbHl6ZV9z Y2FsZV9mYWN0b3IiLAorCQkJCQkJCSAgIk51bWJlciBvZiB0dXBsZSBpbnNlcnRzLCB1cGRh dGVzIG9yIGRlbGV0ZXMgcHJpb3IgdG8gYW5hbHl6ZSBhcyBhIGZyYWN0aW9uIG9mIHJlbHR1 cGxlcyIsCisJCQkJCQkJICBTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2ssCisJCQkJCQkJICBv ZmZzZXRvZihTdGRSZE9wdGlvbnMsIGF1dG92YWN1dW0pICsKKwkJCQkJCQkgIG9mZnNldG9m KEF1dG9WYWNPcHRzLCBhbmFseXplX3NjYWxlX2ZhY3RvciksCisJCQkJCQkJICBOVUxMLCAt MSwgMC4wLCAxMDAuMCk7CisKKwkJb3B0aW9uc1NwZWNTZXRBZGRJbnQoc3RkcmRfcmVsb3B0 X3NwZWNfc2V0LCAidG9hc3RfdHVwbGVfdGFyZ2V0IiwKKwkJCQkJCQkgIlNldHMgdGhlIHRh cmdldCB0dXBsZSBsZW5ndGggYXQgd2hpY2ggZXh0ZXJuYWwgY29sdW1ucyB3aWxsIGJlIHRv YXN0ZWQiLAorCQkJCQkJCSBTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2ssCisJCQkJCQkJIG9m ZnNldG9mKFN0ZFJkT3B0aW9ucywgdG9hc3RfdHVwbGVfdGFyZ2V0KSwKKwkJCQkJCQkgTlVM TCwgVE9BU1RfVFVQTEVfVEFSR0VULCAxMjgsCisJCQkJCQkJIFRPQVNUX1RVUExFX1RBUkdF VF9NQUlOKTsKKworCQlvcHRpb25zU3BlY1NldEFkZEJvb2woc3RkcmRfcmVsb3B0X3NwZWNf c2V0LCAidXNlcl9jYXRhbG9nX3RhYmxlIiwKKwkJCQkJCQkgICJEZWNsYXJlIGEgdGFibGUg YXMgYW4gYWRkaXRpb25hbCBjYXRhbG9nIHRhYmxlLCBlLmcuIGZvciB0aGUgcHVycG9zZSBv ZiBsb2dpY2FsIHJlcGxpY2F0aW9uIiwKKwkJCQkJCQkgIEFjY2Vzc0V4Y2x1c2l2ZUxvY2ss CisJCQkJCQkJICBvZmZzZXRvZihTdGRSZE9wdGlvbnMsIHVzZXJfY2F0YWxvZ190YWJsZSks CisJCQkJCQkJICBOVUxMLCBmYWxzZSk7CisKKwkJb3B0aW9uc1NwZWNTZXRBZGRJbnQoc3Rk cmRfcmVsb3B0X3NwZWNfc2V0LCAicGFyYWxsZWxfd29ya2VycyIsCisJCQkJCQkJICJOdW1i ZXIgb2YgcGFyYWxsZWwgcHJvY2Vzc2VzIHRoYXQgY2FuIGJlIHVzZWQgcGVyIGV4ZWN1dG9y IG5vZGUgZm9yIHRoaXMgcmVsYXRpb24uIiwKKwkJCQkJCQkgU2hhcmVVcGRhdGVFeGNsdXNp dmVMb2NrLAorCQkJCQkJCSBvZmZzZXRvZihTdGRSZE9wdGlvbnMsIHBhcmFsbGVsX3dvcmtl cnMpLAorCQkJCQkJCSBOVUxMLCAtMSwgMCwgMTAyNCk7CiAJfQogCi0JLyogRG9uZSBpZiBu byBvcHRpb25zICovCi0JaWYgKFBvaW50ZXJJc1ZhbGlkKERhdHVtR2V0UG9pbnRlcihvcHRp b25zKSkpCi0JCXBhcnNlUmVsT3B0aW9uc0ludGVybmFsKG9wdGlvbnMsIHZhbGlkYXRlLCBy ZWxvcHRpb25zLCBudW1vcHRpb25zKTsKLQotCSpudW1yZWxvcHRzID0gbnVtb3B0aW9uczsK LQlyZXR1cm4gcmVsb3B0aW9uczsKLX0KLQotLyogUGFyc2UgbG9jYWwgdW5yZWdpc3RlcmVk IG9wdGlvbnMuICovCi1zdGF0aWMgcmVsb3B0X3ZhbHVlICoKLXBhcnNlTG9jYWxSZWxPcHRp b25zKGxvY2FsX3JlbG9wdHMgKnJlbG9wdHMsIERhdHVtIG9wdGlvbnMsIGJvb2wgdmFsaWRh dGUpCi17Ci0JaW50CQkJbm9wdHMgPSBsaXN0X2xlbmd0aChyZWxvcHRzLT5vcHRpb25zKTsK LQlyZWxvcHRfdmFsdWUgKnZhbHVlcyA9IHBhbGxvYyhzaXplb2YoKnZhbHVlcykgKiBub3B0 cyk7Ci0JTGlzdENlbGwgICAqbGM7Ci0JaW50CQkJaSA9IDA7CisJb3B0aW9uc1NwZWNTZXRB ZGRFbnVtKHN0ZHJkX3JlbG9wdF9zcGVjX3NldCwgInZhY3V1bV9pbmRleF9jbGVhbnVwIiwK KwkJCQkJCSAgIkNvbnRyb2xzIGluZGV4IHZhY3V1bWluZyBhbmQgaW5kZXggY2xlYW51cCIs CisJCQkJCQkgIFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jaywKKwkJCQkJCSAgb2Zmc2V0b2Yo U3RkUmRPcHRpb25zLCB2YWN1dW1faW5kZXhfY2xlYW51cCksCisJCQkJCQkgIE5VTEwsIFN0 ZFJkT3B0SW5kZXhDbGVhbnVwVmFsdWVzLAorCQkJCQkJICBTVERSRF9PUFRJT05fVkFDVVVN X0lOREVYX0NMRUFOVVBfQVVUTywKKwkJCQkJCSAgZ2V0dGV4dF9ub29wKCJWYWxpZCB2YWx1 ZXMgYXJlIFwib25cIiwgXCJvZmZcIiwgYW5kIFwiYXV0b1wiLiIpKTsKIAotCWZvcmVhY2go bGMsIHJlbG9wdHMtPm9wdGlvbnMpCi0JewotCQlsb2NhbF9yZWxvcHQgKm9wdCA9IGxmaXJz dChsYyk7Ci0KLQkJdmFsdWVzW2ldLmdlbiA9IG9wdC0+b3B0aW9uOwotCQl2YWx1ZXNbaV0u aXNzZXQgPSBmYWxzZTsKLQotCQlpKys7Ci0JfQorCW9wdGlvbnNTcGVjU2V0QWRkQm9vbChz dGRyZF9yZWxvcHRfc3BlY19zZXQsICJ2YWN1dW1fdHJ1bmNhdGUiLAorCQkJCQkJICAiRW5h YmxlcyB2YWN1dW0gdG8gdHJ1bmNhdGUgZW1wdHkgcGFnZXMgYXQgdGhlIGVuZCBvZiB0aGlz IHRhYmxlIiwKKwkJCQkJCSAgU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrLAorCQkJCQkJICBv ZmZzZXRvZihTdGRSZE9wdGlvbnMsIHZhY3V1bV90cnVuY2F0ZSksCisJCQkJCQkgIE5VTEws IHRydWUpOwogCi0JaWYgKG9wdGlvbnMgIT0gKERhdHVtKSAwKQotCQlwYXJzZVJlbE9wdGlv bnNJbnRlcm5hbChvcHRpb25zLCB2YWxpZGF0ZSwgdmFsdWVzLCBub3B0cyk7CisJaWYgKGlz X2hlYXApCisJCW9wdGlvbnNTcGVjU2V0QWRkQm9vbChzdGRyZF9yZWxvcHRfc3BlY19zZXQs ICJvaWRzIiwKKwkJCQkJCQkgICJCYWNrd2FyZCBjb21wYXRpYmlsaXR5IG9wdGlvbi4gV2ls bCBkbyBub3RoaW5nIHdoZW4gZmFsc2UsIHdpbGwgdGhyb3cgZXJyb3Igd2hlbiB0cnVlIiwK KwkJCQkJCQkgIE5vTG9jaywKKwkJCQkJCQkgIC0xLAkvKiBEbyBub3QgYWN0dWFsbHkgc3Rv cmUgaXQncyB2YWx1ZSAqLworCQkJCQkJCSAgJm9pZF9wb3N0dmFsaWRhdGUsIGZhbHNlKTsK IAotCXJldHVybiB2YWx1ZXM7CisJcmV0dXJuIHN0ZHJkX3JlbG9wdF9zcGVjX3NldDsKIH0K IAotLyoKLSAqIFN1YnJvdXRpbmUgZm9yIHBhcnNlUmVsT3B0aW9ucywgdG8gcGFyc2UgYW5k IHZhbGlkYXRlIGEgc2luZ2xlIG9wdGlvbidzCi0gKiB2YWx1ZQotICovCi1zdGF0aWMgdm9p ZAotcGFyc2Vfb25lX3JlbG9wdGlvbihyZWxvcHRfdmFsdWUgKm9wdGlvbiwgY2hhciAqdGV4 dF9zdHIsIGludCB0ZXh0X2xlbiwKLQkJCQkJYm9vbCB2YWxpZGF0ZSkKLXsKLQljaGFyCSAg ICp2YWx1ZTsKLQlpbnQJCQl2YWx1ZV9sZW47Ci0JYm9vbAkJcGFyc2VkOwotCWJvb2wJCW5v ZnJlZSA9IGZhbHNlOwogCi0JaWYgKG9wdGlvbi0+aXNzZXQgJiYgdmFsaWRhdGUpCi0JCWVy ZXBvcnQoRVJST1IsCi0JCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9W QUxVRSksCi0JCQkJIGVycm1zZygicGFyYW1ldGVyIFwiJXNcIiBzcGVjaWZpZWQgbW9yZSB0 aGFuIG9uY2UiLAotCQkJCQkJb3B0aW9uLT5nZW4tPm5hbWUpKSk7Ci0KLQl2YWx1ZV9sZW4g PSB0ZXh0X2xlbiAtIG9wdGlvbi0+Z2VuLT5uYW1lbGVuIC0gMTsKLQl2YWx1ZSA9IChjaGFy ICopIHBhbGxvYyh2YWx1ZV9sZW4gKyAxKTsKLQltZW1jcHkodmFsdWUsIHRleHRfc3RyICsg b3B0aW9uLT5nZW4tPm5hbWVsZW4gKyAxLCB2YWx1ZV9sZW4pOwotCXZhbHVlW3ZhbHVlX2xl bl0gPSAnXDAnOwotCi0Jc3dpdGNoIChvcHRpb24tPmdlbi0+dHlwZSkKLQl7Ci0JCWNhc2Ug UkVMT1BUX1RZUEVfQk9PTDoKLQkJCXsKLQkJCQlwYXJzZWQgPSBwYXJzZV9ib29sKHZhbHVl LCAmb3B0aW9uLT52YWx1ZXMuYm9vbF92YWwpOwotCQkJCWlmICh2YWxpZGF0ZSAmJiAhcGFy c2VkKQotCQkJCQllcmVwb3J0KEVSUk9SLAotCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5W QUxJRF9QQVJBTUVURVJfVkFMVUUpLAotCQkJCQkJCSBlcnJtc2coImludmFsaWQgdmFsdWUg Zm9yIGJvb2xlYW4gb3B0aW9uIFwiJXNcIjogJXMiLAotCQkJCQkJCQkJb3B0aW9uLT5nZW4t Pm5hbWUsIHZhbHVlKSkpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgUkVMT1BUX1RZUEVf SU5UOgotCQkJewotCQkJCXJlbG9wdF9pbnQgKm9wdGludCA9IChyZWxvcHRfaW50ICopIG9w dGlvbi0+Z2VuOwotCi0JCQkJcGFyc2VkID0gcGFyc2VfaW50KHZhbHVlLCAmb3B0aW9uLT52 YWx1ZXMuaW50X3ZhbCwgMCwgTlVMTCk7Ci0JCQkJaWYgKHZhbGlkYXRlICYmICFwYXJzZWQp Ci0JCQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElE X1BBUkFNRVRFUl9WQUxVRSksCi0JCQkJCQkJIGVycm1zZygiaW52YWxpZCB2YWx1ZSBmb3Ig aW50ZWdlciBvcHRpb24gXCIlc1wiOiAlcyIsCi0JCQkJCQkJCQlvcHRpb24tPmdlbi0+bmFt ZSwgdmFsdWUpKSk7Ci0JCQkJaWYgKHZhbGlkYXRlICYmIChvcHRpb24tPnZhbHVlcy5pbnRf dmFsIDwgb3B0aW50LT5taW4gfHwKLQkJCQkJCQkJIG9wdGlvbi0+dmFsdWVzLmludF92YWwg PiBvcHRpbnQtPm1heCkpCi0JCQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCQkJKGVycmNvZGUo RVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCi0JCQkJCQkJIGVycm1zZygidmFs dWUgJXMgb3V0IG9mIGJvdW5kcyBmb3Igb3B0aW9uIFwiJXNcIiIsCi0JCQkJCQkJCQl2YWx1 ZSwgb3B0aW9uLT5nZW4tPm5hbWUpLAotCQkJCQkJCSBlcnJkZXRhaWwoIlZhbGlkIHZhbHVl cyBhcmUgYmV0d2VlbiBcIiVkXCIgYW5kIFwiJWRcIi4iLAotCQkJCQkJCQkJICAgb3B0aW50 LT5taW4sIG9wdGludC0+bWF4KSkpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgUkVMT1BU X1RZUEVfUkVBTDoKLQkJCXsKLQkJCQlyZWxvcHRfcmVhbCAqb3B0cmVhbCA9IChyZWxvcHRf cmVhbCAqKSBvcHRpb24tPmdlbjsKLQotCQkJCXBhcnNlZCA9IHBhcnNlX3JlYWwodmFsdWUs ICZvcHRpb24tPnZhbHVlcy5yZWFsX3ZhbCwgMCwgTlVMTCk7Ci0JCQkJaWYgKHZhbGlkYXRl ICYmICFwYXJzZWQpCi0JCQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCQkJKGVycmNvZGUoRVJS Q09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCi0JCQkJCQkJIGVycm1zZygiaW52YWxp ZCB2YWx1ZSBmb3IgZmxvYXRpbmcgcG9pbnQgb3B0aW9uIFwiJXNcIjogJXMiLAotCQkJCQkJ CQkJb3B0aW9uLT5nZW4tPm5hbWUsIHZhbHVlKSkpOwotCQkJCWlmICh2YWxpZGF0ZSAmJiAo b3B0aW9uLT52YWx1ZXMucmVhbF92YWwgPCBvcHRyZWFsLT5taW4gfHwKLQkJCQkJCQkJIG9w dGlvbi0+dmFsdWVzLnJlYWxfdmFsID4gb3B0cmVhbC0+bWF4KSkKLQkJCQkJZXJlcG9ydChF UlJPUiwKLQkJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVF KSwKLQkJCQkJCQkgZXJybXNnKCJ2YWx1ZSAlcyBvdXQgb2YgYm91bmRzIGZvciBvcHRpb24g XCIlc1wiIiwKLQkJCQkJCQkJCXZhbHVlLCBvcHRpb24tPmdlbi0+bmFtZSksCi0JCQkJCQkJ IGVycmRldGFpbCgiVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIFwiJWZcIiBhbmQgXCIlZlwi LiIsCi0JCQkJCQkJCQkgICBvcHRyZWFsLT5taW4sIG9wdHJlYWwtPm1heCkpKTsKLQkJCX0K LQkJCWJyZWFrOwotCQljYXNlIFJFTE9QVF9UWVBFX0VOVU06Ci0JCQl7Ci0JCQkJcmVsb3B0 X2VudW0gKm9wdGVudW0gPSAocmVsb3B0X2VudW0gKikgb3B0aW9uLT5nZW47Ci0JCQkJcmVs b3B0X2VudW1fZWx0X2RlZiAqZWx0OwotCi0JCQkJcGFyc2VkID0gZmFsc2U7Ci0JCQkJZm9y IChlbHQgPSBvcHRlbnVtLT5tZW1iZXJzOyBlbHQtPnN0cmluZ192YWw7IGVsdCsrKQotCQkJ CXsKLQkJCQkJaWYgKHBnX3N0cmNhc2VjbXAodmFsdWUsIGVsdC0+c3RyaW5nX3ZhbCkgPT0g MCkKLQkJCQkJewotCQkJCQkJb3B0aW9uLT52YWx1ZXMuZW51bV92YWwgPSBlbHQtPnN5bWJv bF92YWw7Ci0JCQkJCQlwYXJzZWQgPSB0cnVlOwotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJ CQl9Ci0JCQkJaWYgKHZhbGlkYXRlICYmICFwYXJzZWQpCi0JCQkJCWVyZXBvcnQoRVJST1Is Ci0JCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCi0J CQkJCQkJIGVycm1zZygiaW52YWxpZCB2YWx1ZSBmb3IgZW51bSBvcHRpb24gXCIlc1wiOiAl cyIsCi0JCQkJCQkJCQlvcHRpb24tPmdlbi0+bmFtZSwgdmFsdWUpLAotCQkJCQkJCSBvcHRl bnVtLT5kZXRhaWxtc2cgPwotCQkJCQkJCSBlcnJkZXRhaWxfaW50ZXJuYWwoIiVzIiwgXyhv cHRlbnVtLT5kZXRhaWxtc2cpKSA6IDApKTsKLQotCQkJCS8qCi0JCQkJICogSWYgdmFsdWUg aXMgbm90IGFtb25nIHRoZSBhbGxvd2VkIHN0cmluZyB2YWx1ZXMsIGJ1dCB3ZSBhcmUKLQkJ CQkgKiBub3QgYXNrZWQgdG8gdmFsaWRhdGUsIGp1c3QgdXNlIHRoZSBkZWZhdWx0IG51bWVy aWMgdmFsdWUuCi0JCQkJICovCi0JCQkJaWYgKCFwYXJzZWQpCi0JCQkJCW9wdGlvbi0+dmFs dWVzLmVudW1fdmFsID0gb3B0ZW51bS0+ZGVmYXVsdF92YWw7Ci0JCQl9Ci0JCQlicmVhazsK LQkJY2FzZSBSRUxPUFRfVFlQRV9TVFJJTkc6Ci0JCQl7Ci0JCQkJcmVsb3B0X3N0cmluZyAq b3B0c3RyaW5nID0gKHJlbG9wdF9zdHJpbmcgKikgb3B0aW9uLT5nZW47Ci0KLQkJCQlvcHRp b24tPnZhbHVlcy5zdHJpbmdfdmFsID0gdmFsdWU7Ci0JCQkJbm9mcmVlID0gdHJ1ZTsKLQkJ CQlpZiAodmFsaWRhdGUgJiYgb3B0c3RyaW5nLT52YWxpZGF0ZV9jYikKLQkJCQkJKG9wdHN0 cmluZy0+dmFsaWRhdGVfY2IpICh2YWx1ZSk7Ci0JCQkJcGFyc2VkID0gdHJ1ZTsKLQkJCX0K LQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIHJl bG9wdGlvbiB0eXBlICVkIiwgb3B0aW9uLT5nZW4tPnR5cGUpOwotCQkJcGFyc2VkID0gdHJ1 ZTsJCS8qIHF1aWV0IGNvbXBpbGVyICovCi0JCQlicmVhazsKLQl9CitzdGF0aWMgb3B0aW9u c19zcGVjX3NldCAqaGVhcF9yZWxvcHRfc3BlY19zZXQgPSBOVUxMOwogCi0JaWYgKHBhcnNl ZCkKLQkJb3B0aW9uLT5pc3NldCA9IHRydWU7Ci0JaWYgKCFub2ZyZWUpCi0JCXBmcmVlKHZh bHVlKTsKK29wdGlvbnNfc3BlY19zZXQgKgorZ2V0X2hlYXBfcmVsb3B0X3NwZWNfc2V0KHZv aWQpCit7CisJaWYgKGhlYXBfcmVsb3B0X3NwZWNfc2V0KQorCQlyZXR1cm4gaGVhcF9yZWxv cHRfc3BlY19zZXQ7CisJaGVhcF9yZWxvcHRfc3BlY19zZXQgPSBnZXRfc3RkcmRfcmVsb3B0 X3NwZWNfc2V0KHRydWUpOworCXJldHVybiBoZWFwX3JlbG9wdF9zcGVjX3NldDsKIH0KIAog LyoKLSAqIEdpdmVuIHRoZSByZXN1bHQgZnJvbSBwYXJzZVJlbE9wdGlvbnMsIGFsbG9jYXRl IGEgc3RydWN0IHRoYXQncyBvZiB0aGUKLSAqIHNwZWNpZmllZCBiYXNlIHNpemUgcGx1cyBh bnkgZXh0cmEgc3BhY2UgdGhhdCdzIG5lZWRlZCBmb3Igc3RyaW5nIHZhcmlhYmxlcy4KLSAq Ci0gKiAiYmFzZSIgc2hvdWxkIGJlIHNpemVvZihzdHJ1Y3QpIG9mIHRoZSByZWxvcHRpb25z IHN0cnVjdCAoU3RkUmRPcHRpb25zIG9yCi0gKiBlcXVpdmFsZW50KS4KKyAqIFRoZXNlIHRv YXN0IG9wdGlvbnMgYXJlIGNhbid0IGJlIHNldCB2aWEgU1FMLCBidXQgd2Ugc2hvdWxkIHNl dCB0aGVtCisgKiB0byB0aGVpciBkZWZhdWx0cyBpbiBiaW5hcnkgcmVwcmVzZW50YXRpb24s IHRvIG1ha2UgcG9zdGdyZXMgd29yayBwcm9wZXJseQogICovCi1zdGF0aWMgdm9pZCAqCi1h bGxvY2F0ZVJlbG9wdFN0cnVjdChTaXplIGJhc2UsIHJlbG9wdF92YWx1ZSAqb3B0aW9ucywg aW50IG51bW9wdGlvbnMpCitzdGF0aWMgdm9pZAordG9hc3Rfb3B0aW9uc19wb3N0cHJvY2Vz cyh2b2lkICpkYXRhLCBib29sIHZhbGlkYXRlKQogewotCVNpemUJCXNpemUgPSBiYXNlOwot CWludAkJCWk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnVtb3B0aW9uczsgaSsrKQorCWlmIChk YXRhKQogCXsKLQkJcmVsb3B0X3ZhbHVlICpvcHR2YWwgPSAmb3B0aW9uc1tpXTsKKwkJU3Rk UmRPcHRpb25zICp0b2FzdF9vcHRpb25zID0gKFN0ZFJkT3B0aW9ucyAqKSBkYXRhOwogCi0J CWlmIChvcHR2YWwtPmdlbi0+dHlwZSA9PSBSRUxPUFRfVFlQRV9TVFJJTkcpCi0JCXsKLQkJ CXJlbG9wdF9zdHJpbmcgKm9wdHN0ciA9IChyZWxvcHRfc3RyaW5nICopIG9wdHZhbC0+Z2Vu OwotCi0JCQlpZiAob3B0c3RyLT5maWxsX2NiKQotCQkJewotCQkJCWNvbnN0IGNoYXIgKnZh bCA9IG9wdHZhbC0+aXNzZXQgPyBvcHR2YWwtPnZhbHVlcy5zdHJpbmdfdmFsIDoKLQkJCQkJ b3B0c3RyLT5kZWZhdWx0X2lzbnVsbCA/IE5VTEwgOiBvcHRzdHItPmRlZmF1bHRfdmFsOwot Ci0JCQkJc2l6ZSArPSBvcHRzdHItPmZpbGxfY2IodmFsLCBOVUxMKTsKLQkJCX0KLQkJCWVs c2UKLQkJCQlzaXplICs9IEdFVF9TVFJJTkdfUkVMT1BUSU9OX0xFTigqb3B0dmFsKSArIDE7 Ci0JCX0KKwkJdG9hc3Rfb3B0aW9ucy0+ZmlsbGZhY3RvciA9IDEwMDsKKwkJdG9hc3Rfb3B0 aW9ucy0+YXV0b3ZhY3V1bS5hbmFseXplX3RocmVzaG9sZCA9IC0xOworCQl0b2FzdF9vcHRp b25zLT5hdXRvdmFjdXVtLmFuYWx5emVfc2NhbGVfZmFjdG9yID0gLTE7CiAJfQotCi0JcmV0 dXJuIHBhbGxvYzAoc2l6ZSk7CiB9CiAKLS8qCi0gKiBHaXZlbiB0aGUgcmVzdWx0IG9mIHBh cnNlUmVsT3B0aW9ucyBhbmQgYSBwYXJzaW5nIHRhYmxlLCBmaWxsIGluIHRoZQotICogc3Ry dWN0IChwcmV2aW91c2x5IGFsbG9jYXRlZCB3aXRoIGFsbG9jYXRlUmVsb3B0U3RydWN0KSB3 aXRoIHRoZSBwYXJzZWQKLSAqIHZhbHVlcy4KLSAqCi0gKiByZG9wdHMgaXMgdGhlIHBvaW50 ZXIgdG8gdGhlIGFsbG9jYXRlZCBzdHJ1Y3QgdG8gYmUgZmlsbGVkLgotICogYmFzZXNpemUg aXMgdGhlIHNpemVvZihzdHJ1Y3QpIHRoYXQgd2FzIHBhc3NlZCB0byBhbGxvY2F0ZVJlbG9w dFN0cnVjdC4KLSAqIG9wdGlvbnMsIG9mIGxlbmd0aCBudW1vcHRpb25zLCBpcyBwYXJzZVJl bE9wdGlvbnMnIG91dHB1dC4KLSAqIGVsZW1zLCBvZiBsZW5ndGggbnVtZWxlbXMsIGlzIHRo ZSB0YWJsZSBkZXNjcmliaW5nIHRoZSBhbGxvd2VkIG9wdGlvbnMuCi0gKiBXaGVuIHZhbGlk YXRlIGlzIHRydWUsIGl0IGlzIGV4cGVjdGVkIHRoYXQgYWxsIG9wdGlvbnMgYXBwZWFyIGlu IGVsZW1zLgotICovCi1zdGF0aWMgdm9pZAotZmlsbFJlbE9wdGlvbnModm9pZCAqcmRvcHRz LCBTaXplIGJhc2VzaXplLAotCQkJICAgcmVsb3B0X3ZhbHVlICpvcHRpb25zLCBpbnQgbnVt b3B0aW9ucywKLQkJCSAgIGJvb2wgdmFsaWRhdGUsCi0JCQkgICBjb25zdCByZWxvcHRfcGFy c2VfZWx0ICplbGVtcywgaW50IG51bWVsZW1zKQorc3RhdGljIG9wdGlvbnNfc3BlY19zZXQg KnRvYXN0X3JlbG9wdF9zcGVjX3NldCA9IE5VTEw7CitvcHRpb25zX3NwZWNfc2V0ICoKK2dl dF90b2FzdF9yZWxvcHRfc3BlY19zZXQodm9pZCkKIHsKLQlpbnQJCQlpOwotCWludAkJCW9m ZnNldCA9IGJhc2VzaXplOworCWlmICh0b2FzdF9yZWxvcHRfc3BlY19zZXQpCisJCXJldHVy biB0b2FzdF9yZWxvcHRfc3BlY19zZXQ7CiAKLQlmb3IgKGkgPSAwOyBpIDwgbnVtb3B0aW9u czsgaSsrKQotCXsKLQkJaW50CQkJajsKLQkJYm9vbAkJZm91bmQgPSBmYWxzZTsKKwl0b2Fz dF9yZWxvcHRfc3BlY19zZXQgPSBnZXRfc3RkcmRfcmVsb3B0X3NwZWNfc2V0KGZhbHNlKTsK Kwl0b2FzdF9yZWxvcHRfc3BlY19zZXQtPnBvc3Rwcm9jZXNzX2Z1biA9IHRvYXN0X29wdGlv bnNfcG9zdHByb2Nlc3M7CiAKLQkJZm9yIChqID0gMDsgaiA8IG51bWVsZW1zOyBqKyspCi0J CXsKLQkJCWlmIChzdHJjbXAob3B0aW9uc1tpXS5nZW4tPm5hbWUsIGVsZW1zW2pdLm9wdG5h bWUpID09IDApCi0JCQl7Ci0JCQkJcmVsb3B0X3N0cmluZyAqb3B0c3RyaW5nOwotCQkJCWNo YXIJICAgKml0ZW1wb3MgPSAoKGNoYXIgKikgcmRvcHRzKSArIGVsZW1zW2pdLm9mZnNldDsK LQkJCQljaGFyCSAgICpzdHJpbmdfdmFsOwotCi0JCQkJc3dpdGNoIChvcHRpb25zW2ldLmdl bi0+dHlwZSkKLQkJCQl7Ci0JCQkJCWNhc2UgUkVMT1BUX1RZUEVfQk9PTDoKLQkJCQkJCSoo Ym9vbCAqKSBpdGVtcG9zID0gb3B0aW9uc1tpXS5pc3NldCA/Ci0JCQkJCQkJb3B0aW9uc1tp XS52YWx1ZXMuYm9vbF92YWwgOgotCQkJCQkJCSgocmVsb3B0X2Jvb2wgKikgb3B0aW9uc1tp XS5nZW4pLT5kZWZhdWx0X3ZhbDsKLQkJCQkJCWJyZWFrOwotCQkJCQljYXNlIFJFTE9QVF9U WVBFX0lOVDoKLQkJCQkJCSooaW50ICopIGl0ZW1wb3MgPSBvcHRpb25zW2ldLmlzc2V0ID8K LQkJCQkJCQlvcHRpb25zW2ldLnZhbHVlcy5pbnRfdmFsIDoKLQkJCQkJCQkoKHJlbG9wdF9p bnQgKikgb3B0aW9uc1tpXS5nZW4pLT5kZWZhdWx0X3ZhbDsKLQkJCQkJCWJyZWFrOwotCQkJ CQljYXNlIFJFTE9QVF9UWVBFX1JFQUw6Ci0JCQkJCQkqKGRvdWJsZSAqKSBpdGVtcG9zID0g b3B0aW9uc1tpXS5pc3NldCA/Ci0JCQkJCQkJb3B0aW9uc1tpXS52YWx1ZXMucmVhbF92YWwg OgotCQkJCQkJCSgocmVsb3B0X3JlYWwgKikgb3B0aW9uc1tpXS5nZW4pLT5kZWZhdWx0X3Zh bDsKLQkJCQkJCWJyZWFrOwotCQkJCQljYXNlIFJFTE9QVF9UWVBFX0VOVU06Ci0JCQkJCQkq KGludCAqKSBpdGVtcG9zID0gb3B0aW9uc1tpXS5pc3NldCA/Ci0JCQkJCQkJb3B0aW9uc1tp XS52YWx1ZXMuZW51bV92YWwgOgotCQkJCQkJCSgocmVsb3B0X2VudW0gKikgb3B0aW9uc1tp XS5nZW4pLT5kZWZhdWx0X3ZhbDsKLQkJCQkJCWJyZWFrOwotCQkJCQljYXNlIFJFTE9QVF9U WVBFX1NUUklORzoKLQkJCQkJCW9wdHN0cmluZyA9IChyZWxvcHRfc3RyaW5nICopIG9wdGlv bnNbaV0uZ2VuOwotCQkJCQkJaWYgKG9wdGlvbnNbaV0uaXNzZXQpCi0JCQkJCQkJc3RyaW5n X3ZhbCA9IG9wdGlvbnNbaV0udmFsdWVzLnN0cmluZ192YWw7Ci0JCQkJCQllbHNlIGlmICgh b3B0c3RyaW5nLT5kZWZhdWx0X2lzbnVsbCkKLQkJCQkJCQlzdHJpbmdfdmFsID0gb3B0c3Ry aW5nLT5kZWZhdWx0X3ZhbDsKLQkJCQkJCWVsc2UKLQkJCQkJCQlzdHJpbmdfdmFsID0gTlVM TDsKLQotCQkJCQkJaWYgKG9wdHN0cmluZy0+ZmlsbF9jYikKLQkJCQkJCXsKLQkJCQkJCQlT aXplCQlzaXplID0KLQkJCQkJCQkJb3B0c3RyaW5nLT5maWxsX2NiKHN0cmluZ192YWwsCi0J CQkJCQkJCQkJCQkgICAoY2hhciAqKSByZG9wdHMgKyBvZmZzZXQpOwotCi0JCQkJCQkJaWYg KHNpemUpCi0JCQkJCQkJewotCQkJCQkJCQkqKGludCAqKSBpdGVtcG9zID0gb2Zmc2V0Owot CQkJCQkJCQlvZmZzZXQgKz0gc2l6ZTsKLQkJCQkJCQl9Ci0JCQkJCQkJZWxzZQotCQkJCQkJ CQkqKGludCAqKSBpdGVtcG9zID0gMDsKLQkJCQkJCX0KLQkJCQkJCWVsc2UgaWYgKHN0cmlu Z192YWwgPT0gTlVMTCkKLQkJCQkJCQkqKGludCAqKSBpdGVtcG9zID0gMDsKLQkJCQkJCWVs c2UKLQkJCQkJCXsKLQkJCQkJCQlzdHJjcHkoKGNoYXIgKikgcmRvcHRzICsgb2Zmc2V0LCBz dHJpbmdfdmFsKTsKLQkJCQkJCQkqKGludCAqKSBpdGVtcG9zID0gb2Zmc2V0OwotCQkJCQkJ CW9mZnNldCArPSBzdHJsZW4oc3RyaW5nX3ZhbCkgKyAxOwotCQkJCQkJfQotCQkJCQkJYnJl YWs7Ci0JCQkJCWRlZmF1bHQ6Ci0JCQkJCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgcmVs b3B0aW9uIHR5cGUgJWQiLAotCQkJCQkJCSBvcHRpb25zW2ldLmdlbi0+dHlwZSk7Ci0JCQkJ CQlicmVhazsKLQkJCQl9Ci0JCQkJZm91bmQgPSB0cnVlOwotCQkJCWJyZWFrOwotCQkJfQot CQl9Ci0JCWlmICh2YWxpZGF0ZSAmJiAhZm91bmQpCi0JCQllbG9nKEVSUk9SLCAicmVsb3B0 aW9uIFwiJXNcIiBub3QgZm91bmQgaW4gcGFyc2UgdGFibGUiLAotCQkJCSBvcHRpb25zW2ld Lmdlbi0+bmFtZSk7Ci0JfQotCVNFVF9WQVJTSVpFKHJkb3B0cywgb2Zmc2V0KTsKKwlyZXR1 cm4gdG9hc3RfcmVsb3B0X3NwZWNfc2V0OwogfQogCiAKIC8qCi0gKiBPcHRpb24gcGFyc2Vy IGZvciBhbnl0aGluZyB0aGF0IHVzZXMgU3RkUmRPcHRpb25zLgorICogRG8gbm90IGFsbG93 IHRvIHNldCBhbnkgb3B0aW9uIG9uIHBhcnRpdGlvbmVkIHRhYmxlCiAgKi8KLWJ5dGVhICoK LWRlZmF1bHRfcmVsb3B0aW9ucyhEYXR1bSByZWxvcHRpb25zLCBib29sIHZhbGlkYXRlLCBy ZWxvcHRfa2luZCBraW5kKQorc3RhdGljIHZvaWQKK3BhcnRpdGlvbmVkX29wdGlvbnNfcG9z dHByb2Nlc3Modm9pZCAqZGF0YSwgYm9vbCB2YWxpZGF0ZSkKIHsKLQlzdGF0aWMgY29uc3Qg cmVsb3B0X3BhcnNlX2VsdCB0YWJbXSA9IHsKLQkJeyJmaWxsZmFjdG9yIiwgUkVMT1BUX1RZ UEVfSU5ULCBvZmZzZXRvZihTdGRSZE9wdGlvbnMsIGZpbGxmYWN0b3IpfSwKLQkJeyJhdXRv dmFjdXVtX2VuYWJsZWQiLCBSRUxPUFRfVFlQRV9CT09MLAotCQlvZmZzZXRvZihTdGRSZE9w dGlvbnMsIGF1dG92YWN1dW0pICsgb2Zmc2V0b2YoQXV0b1ZhY09wdHMsIGVuYWJsZWQpfSwK LQkJeyJhdXRvdmFjdXVtX3ZhY3V1bV90aHJlc2hvbGQiLCBSRUxPUFRfVFlQRV9JTlQsCi0J CW9mZnNldG9mKFN0ZFJkT3B0aW9ucywgYXV0b3ZhY3V1bSkgKyBvZmZzZXRvZihBdXRvVmFj T3B0cywgdmFjdXVtX3RocmVzaG9sZCl9LAotCQl7ImF1dG92YWN1dW1fdmFjdXVtX2luc2Vy dF90aHJlc2hvbGQiLCBSRUxPUFRfVFlQRV9JTlQsCi0JCW9mZnNldG9mKFN0ZFJkT3B0aW9u cywgYXV0b3ZhY3V1bSkgKyBvZmZzZXRvZihBdXRvVmFjT3B0cywgdmFjdXVtX2luc190aHJl c2hvbGQpfSwKLQkJeyJhdXRvdmFjdXVtX2FuYWx5emVfdGhyZXNob2xkIiwgUkVMT1BUX1RZ UEVfSU5ULAotCQlvZmZzZXRvZihTdGRSZE9wdGlvbnMsIGF1dG92YWN1dW0pICsgb2Zmc2V0 b2YoQXV0b1ZhY09wdHMsIGFuYWx5emVfdGhyZXNob2xkKX0sCi0JCXsiYXV0b3ZhY3V1bV92 YWN1dW1fY29zdF9saW1pdCIsIFJFTE9QVF9UWVBFX0lOVCwKLQkJb2Zmc2V0b2YoU3RkUmRP cHRpb25zLCBhdXRvdmFjdXVtKSArIG9mZnNldG9mKEF1dG9WYWNPcHRzLCB2YWN1dW1fY29z dF9saW1pdCl9LAotCQl7ImF1dG92YWN1dW1fZnJlZXplX21pbl9hZ2UiLCBSRUxPUFRfVFlQ RV9JTlQsCi0JCW9mZnNldG9mKFN0ZFJkT3B0aW9ucywgYXV0b3ZhY3V1bSkgKyBvZmZzZXRv ZihBdXRvVmFjT3B0cywgZnJlZXplX21pbl9hZ2UpfSwKLQkJeyJhdXRvdmFjdXVtX2ZyZWV6 ZV9tYXhfYWdlIiwgUkVMT1BUX1RZUEVfSU5ULAotCQlvZmZzZXRvZihTdGRSZE9wdGlvbnMs IGF1dG92YWN1dW0pICsgb2Zmc2V0b2YoQXV0b1ZhY09wdHMsIGZyZWV6ZV9tYXhfYWdlKX0s Ci0JCXsiYXV0b3ZhY3V1bV9mcmVlemVfdGFibGVfYWdlIiwgUkVMT1BUX1RZUEVfSU5ULAot CQlvZmZzZXRvZihTdGRSZE9wdGlvbnMsIGF1dG92YWN1dW0pICsgb2Zmc2V0b2YoQXV0b1Zh Y09wdHMsIGZyZWV6ZV90YWJsZV9hZ2UpfSwKLQkJeyJhdXRvdmFjdXVtX211bHRpeGFjdF9m cmVlemVfbWluX2FnZSIsIFJFTE9QVF9UWVBFX0lOVCwKLQkJb2Zmc2V0b2YoU3RkUmRPcHRp b25zLCBhdXRvdmFjdXVtKSArIG9mZnNldG9mKEF1dG9WYWNPcHRzLCBtdWx0aXhhY3RfZnJl ZXplX21pbl9hZ2UpfSwKLQkJeyJhdXRvdmFjdXVtX211bHRpeGFjdF9mcmVlemVfbWF4X2Fn ZSIsIFJFTE9QVF9UWVBFX0lOVCwKLQkJb2Zmc2V0b2YoU3RkUmRPcHRpb25zLCBhdXRvdmFj dXVtKSArIG9mZnNldG9mKEF1dG9WYWNPcHRzLCBtdWx0aXhhY3RfZnJlZXplX21heF9hZ2Up fSwKLQkJeyJhdXRvdmFjdXVtX211bHRpeGFjdF9mcmVlemVfdGFibGVfYWdlIiwgUkVMT1BU X1RZUEVfSU5ULAotCQlvZmZzZXRvZihTdGRSZE9wdGlvbnMsIGF1dG92YWN1dW0pICsgb2Zm c2V0b2YoQXV0b1ZhY09wdHMsIG11bHRpeGFjdF9mcmVlemVfdGFibGVfYWdlKX0sCi0JCXsi bG9nX2F1dG92YWN1dW1fbWluX2R1cmF0aW9uIiwgUkVMT1BUX1RZUEVfSU5ULAotCQlvZmZz ZXRvZihTdGRSZE9wdGlvbnMsIGF1dG92YWN1dW0pICsgb2Zmc2V0b2YoQXV0b1ZhY09wdHMs IGxvZ19taW5fZHVyYXRpb24pfSwKLQkJeyJ0b2FzdF90dXBsZV90YXJnZXQiLCBSRUxPUFRf VFlQRV9JTlQsCi0JCW9mZnNldG9mKFN0ZFJkT3B0aW9ucywgdG9hc3RfdHVwbGVfdGFyZ2V0 KX0sCi0JCXsiYXV0b3ZhY3V1bV92YWN1dW1fY29zdF9kZWxheSIsIFJFTE9QVF9UWVBFX1JF QUwsCi0JCW9mZnNldG9mKFN0ZFJkT3B0aW9ucywgYXV0b3ZhY3V1bSkgKyBvZmZzZXRvZihB dXRvVmFjT3B0cywgdmFjdXVtX2Nvc3RfZGVsYXkpfSwKLQkJeyJhdXRvdmFjdXVtX3ZhY3V1 bV9zY2FsZV9mYWN0b3IiLCBSRUxPUFRfVFlQRV9SRUFMLAotCQlvZmZzZXRvZihTdGRSZE9w dGlvbnMsIGF1dG92YWN1dW0pICsgb2Zmc2V0b2YoQXV0b1ZhY09wdHMsIHZhY3V1bV9zY2Fs ZV9mYWN0b3IpfSwKLQkJeyJhdXRvdmFjdXVtX3ZhY3V1bV9pbnNlcnRfc2NhbGVfZmFjdG9y IiwgUkVMT1BUX1RZUEVfUkVBTCwKLQkJb2Zmc2V0b2YoU3RkUmRPcHRpb25zLCBhdXRvdmFj dXVtKSArIG9mZnNldG9mKEF1dG9WYWNPcHRzLCB2YWN1dW1faW5zX3NjYWxlX2ZhY3Rvcil9 LAotCQl7ImF1dG92YWN1dW1fYW5hbHl6ZV9zY2FsZV9mYWN0b3IiLCBSRUxPUFRfVFlQRV9S RUFMLAotCQlvZmZzZXRvZihTdGRSZE9wdGlvbnMsIGF1dG92YWN1dW0pICsgb2Zmc2V0b2Yo QXV0b1ZhY09wdHMsIGFuYWx5emVfc2NhbGVfZmFjdG9yKX0sCi0JCXsidXNlcl9jYXRhbG9n X3RhYmxlIiwgUkVMT1BUX1RZUEVfQk9PTCwKLQkJb2Zmc2V0b2YoU3RkUmRPcHRpb25zLCB1 c2VyX2NhdGFsb2dfdGFibGUpfSwKLQkJeyJwYXJhbGxlbF93b3JrZXJzIiwgUkVMT1BUX1RZ UEVfSU5ULAotCQlvZmZzZXRvZihTdGRSZE9wdGlvbnMsIHBhcmFsbGVsX3dvcmtlcnMpfSwK LQkJeyJ2YWN1dW1faW5kZXhfY2xlYW51cCIsIFJFTE9QVF9UWVBFX0VOVU0sCi0JCW9mZnNl dG9mKFN0ZFJkT3B0aW9ucywgdmFjdXVtX2luZGV4X2NsZWFudXApfSwKLQkJeyJ2YWN1dW1f dHJ1bmNhdGUiLCBSRUxPUFRfVFlQRV9CT09MLAotCQlvZmZzZXRvZihTdGRSZE9wdGlvbnMs IHZhY3V1bV90cnVuY2F0ZSl9Ci0JfTsKLQotCXJldHVybiAoYnl0ZWEgKikgYnVpbGRfcmVs b3B0aW9ucyhyZWxvcHRpb25zLCB2YWxpZGF0ZSwga2luZCwKLQkJCQkJCQkJCSAgc2l6ZW9m KFN0ZFJkT3B0aW9ucyksCi0JCQkJCQkJCQkgIHRhYiwgbGVuZ3Rob2YodGFiKSk7CisJaWYg KGRhdGEgJiYgdmFsaWRhdGUpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJZXJyY29kZShFUlJD T0RFX1dST05HX09CSkVDVF9UWVBFKSwKKwkJCQllcnJtc2coImNhbm5vdCBzcGVjaWZ5IHN0 b3JhZ2UgcGFyYW1ldGVycyBmb3IgYSBwYXJ0aXRpb25lZCB0YWJsZSIpLAorCQkJCWVycmhp bnQoIlNwZWNpZnkgc3RvcmFnZSBwYXJhbWV0ZXJzIGZvciBpdHMgbGVhZiBwYXJ0aXRpb25z IGluc3RlYWQuIikpOwogfQogCi0vKgotICogYnVpbGRfcmVsb3B0aW9ucwotICoKLSAqIFBh cnNlcyAicmVsb3B0aW9ucyIgcHJvdmlkZWQgYnkgdGhlIGNhbGxlciwgcmV0dXJuaW5nIHRo ZW0gaW4gYQotICogc3RydWN0dXJlIGNvbnRhaW5pbmcgdGhlIHBhcnNlZCBvcHRpb25zLiAg VGhlIHBhcnNpbmcgaXMgZG9uZSB3aXRoCi0gKiB0aGUgaGVscCBvZiBhIHBhcnNpbmcgdGFi bGUgZGVzY3JpYmluZyB0aGUgYWxsb3dlZCBvcHRpb25zLCBkZWZpbmVkCi0gKiBieSAicmVs b3B0X2VsZW1zIiBvZiBsZW5ndGggIm51bV9yZWxvcHRfZWxlbXMiLgotICoKLSAqICJ2YWxp ZGF0ZSIgbXVzdCBiZSB0cnVlIGlmIHJlbG9wdGlvbnMgdmFsdWUgaXMgZnJlc2hseSBidWls dCBieQotICogdHJhbnNmb3JtUmVsT3B0aW9ucygpLCBhcyBvcHBvc2VkIHRvIGJlaW5nIHJl YWQgZnJvbSB0aGUgY2F0YWxvZywgaW4gd2hpY2gKLSAqIGNhc2UgdGhlIHZhbHVlcyBjb250 YWluZWQgaW4gaXQgbXVzdCBhbHJlYWR5IGJlIHZhbGlkLgotICoKLSAqIE5VTEwgaXMgcmV0 dXJuZWQgaWYgdGhlIHBhc3NlZC1pbiBvcHRpb25zIGRpZCBub3QgbWF0Y2ggYW55IG9mIHRo ZSBvcHRpb25zCi0gKiBpbiB0aGUgcGFyc2luZyB0YWJsZSwgdW5sZXNzIHZhbGlkYXRlIGlz IHRydWUgaW4gd2hpY2ggY2FzZSBhbiBlcnJvciB3b3VsZAotICogYmUgcmVwb3J0ZWQuCi0g Ki8KLXZvaWQgKgotYnVpbGRfcmVsb3B0aW9ucyhEYXR1bSByZWxvcHRpb25zLCBib29sIHZh bGlkYXRlLAotCQkJCSByZWxvcHRfa2luZCBraW5kLAotCQkJCSBTaXplIHJlbG9wdF9zdHJ1 Y3Rfc2l6ZSwKLQkJCQkgY29uc3QgcmVsb3B0X3BhcnNlX2VsdCAqcmVsb3B0X2VsZW1zLAot CQkJCSBpbnQgbnVtX3JlbG9wdF9lbGVtcykKLXsKLQlpbnQJCQludW1vcHRpb25zOwotCXJl bG9wdF92YWx1ZSAqb3B0aW9uczsKLQl2b2lkCSAgICpyZG9wdHM7Ci0KLQkvKiBwYXJzZSBv cHRpb25zIHNwZWNpZmljIHRvIGdpdmVuIHJlbGF0aW9uIG9wdGlvbiBraW5kICovCi0Jb3B0 aW9ucyA9IHBhcnNlUmVsT3B0aW9ucyhyZWxvcHRpb25zLCB2YWxpZGF0ZSwga2luZCwgJm51 bW9wdGlvbnMpOwotCUFzc2VydChudW1vcHRpb25zIDw9IG51bV9yZWxvcHRfZWxlbXMpOwog Ci0JLyogaWYgbm9uZSBzZXQsIHdlJ3JlIGRvbmUgKi8KLQlpZiAobnVtb3B0aW9ucyA9PSAw KQotCXsKLQkJQXNzZXJ0KG9wdGlvbnMgPT0gTlVMTCk7Ci0JCXJldHVybiBOVUxMOwotCX0K K3N0YXRpYyBvcHRpb25zX3NwZWNfc2V0ICpwYXJ0aXRpb25lZF9yZWxvcHRfc3BlY19zZXQg PSBOVUxMOwogCi0JLyogYWxsb2NhdGUgYW5kIGZpbGwgdGhlIHN0cnVjdHVyZSAqLwotCXJk b3B0cyA9IGFsbG9jYXRlUmVsb3B0U3RydWN0KHJlbG9wdF9zdHJ1Y3Rfc2l6ZSwgb3B0aW9u cywgbnVtb3B0aW9ucyk7Ci0JZmlsbFJlbE9wdGlvbnMocmRvcHRzLCByZWxvcHRfc3RydWN0 X3NpemUsIG9wdGlvbnMsIG51bW9wdGlvbnMsCi0JCQkJICAgdmFsaWRhdGUsIHJlbG9wdF9l bGVtcywgbnVtX3JlbG9wdF9lbGVtcyk7CitvcHRpb25zX3NwZWNfc2V0ICoKK2dldF9wYXJ0 aXRpb25lZF9yZWxvcHRfc3BlY19zZXQodm9pZCkKK3sKKwlpZiAocGFydGl0aW9uZWRfcmVs b3B0X3NwZWNfc2V0KQorCQlyZXR1cm4gcGFydGl0aW9uZWRfcmVsb3B0X3NwZWNfc2V0Owor CXBhcnRpdGlvbmVkX3JlbG9wdF9zcGVjX3NldCA9IGdldF9zdGRyZF9yZWxvcHRfc3BlY19z ZXQodHJ1ZSk7CiAKLQlwZnJlZShvcHRpb25zKTsKKwkvKiBObyBvcHRpb25zIGZvciBub3cs IHNvIHNwZWMgc2V0IGlzIGVtcHR5ICovCisJcGFydGl0aW9uZWRfcmVsb3B0X3NwZWNfc2V0 LT5wb3N0cHJvY2Vzc19mdW4gPQorCQkJCQkJCQkJCQkgICBwYXJ0aXRpb25lZF9vcHRpb25z X3Bvc3Rwcm9jZXNzOwogCi0JcmV0dXJuIHJkb3B0czsKKwlyZXR1cm4gcGFydGl0aW9uZWRf cmVsb3B0X3NwZWNfc2V0OwogfQogCiAvKgpAQCAtMTk0NiwxNTggKzU4MywxNjUgQEAgYnVp bGRfcmVsb3B0aW9ucyhEYXR1bSByZWxvcHRpb25zLCBib29sIHZhbGlkYXRlLAogdm9pZCAq CiBidWlsZF9sb2NhbF9yZWxvcHRpb25zKGxvY2FsX3JlbG9wdHMgKnJlbG9wdHMsIERhdHVt IG9wdGlvbnMsIGJvb2wgdmFsaWRhdGUpCiB7Ci0JaW50CQkJbm9wdGlvbnMgPSBsaXN0X2xl bmd0aChyZWxvcHRzLT5vcHRpb25zKTsKLQlyZWxvcHRfcGFyc2VfZWx0ICplbGVtcyA9IHBh bGxvYyhzaXplb2YoKmVsZW1zKSAqIG5vcHRpb25zKTsKLQlyZWxvcHRfdmFsdWUgKnZhbHM7 CiAJdm9pZAkgICAqb3B0czsKLQlpbnQJCQlpID0gMDsKIAlMaXN0Q2VsbCAgICpsYzsKKwlM aXN0CSAgICp2YWx1ZXM7CisKKwl2YWx1ZXMgPSBvcHRpb25zVGV4dEFycmF5VG9SYXdWYWx1 ZXMob3B0aW9ucyk7CisJdmFsdWVzID0gb3B0aW9uc1BhcnNlUmF3VmFsdWVzKHZhbHVlcywg cmVsb3B0cy0+c3BlY19zZXQsIHZhbGlkYXRlKTsKKwlvcHRzID0gb3B0aW9uc1ZhbHVlc1Rv Qnl0ZWEodmFsdWVzLCByZWxvcHRzLT5zcGVjX3NldCk7CisKKwkvKgorCSAqIEtpbmQgb2Yg dWdseSBjb252ZXJzaW9uIGhlcmUgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIFdvdWxk IGJlCisJICogcmVtb3ZlZCB3aGlsZSBtb3Zpbmcgb3BjbGFzcyBvcHRpb25zIHRvIG9wdGlv bnMuYyBBUEkKKwkgKi8KIAotCWZvcmVhY2gobGMsIHJlbG9wdHMtPm9wdGlvbnMpCisJaWYg KHZhbGlkYXRlICYmIHJlbG9wdHMtPnZhbGlkYXRvcnMpCiAJewotCQlsb2NhbF9yZWxvcHQg Km9wdCA9IGxmaXJzdChsYyk7CisJCWludAkJCXZhbF9jb3VudCA9IGxpc3RfbGVuZ3RoKHZh bHVlcyk7CisJCWludAkJCWk7CisJCW9wdGlvbl92YWx1ZSAqdmFsX2FycmF5OwogCi0JCWVs ZW1zW2ldLm9wdG5hbWUgPSBvcHQtPm9wdGlvbi0+bmFtZTsKLQkJZWxlbXNbaV0ub3B0dHlw ZSA9IG9wdC0+b3B0aW9uLT50eXBlOwotCQllbGVtc1tpXS5vZmZzZXQgPSBvcHQtPm9mZnNl dDsKKwkJdmFsX2FycmF5ID0gcGFsbG9jKHNpemVvZihvcHRpb25fdmFsdWUpICogdmFsX2Nv dW50KTsKIAotCQlpKys7Ci0JfQorCQlpID0gMDsKKwkJZm9yZWFjaChsYywgdmFsdWVzKQor CQl7CisJCQlvcHRpb25fdmFsdWUgKnZhbCA9IGxmaXJzdChsYyk7CiAKLQl2YWxzID0gcGFy c2VMb2NhbFJlbE9wdGlvbnMocmVsb3B0cywgb3B0aW9ucywgdmFsaWRhdGUpOwotCW9wdHMg PSBhbGxvY2F0ZVJlbG9wdFN0cnVjdChyZWxvcHRzLT5yZWxvcHRfc3RydWN0X3NpemUsIHZh bHMsIG5vcHRpb25zKTsKLQlmaWxsUmVsT3B0aW9ucyhvcHRzLCByZWxvcHRzLT5yZWxvcHRf c3RydWN0X3NpemUsIHZhbHMsIG5vcHRpb25zLCB2YWxpZGF0ZSwKLQkJCQkgICBlbGVtcywg bm9wdGlvbnMpOworCQkJbWVtY3B5KCYodmFsX2FycmF5W2ldKSwgdmFsLCBzaXplb2Yob3B0 aW9uX3ZhbHVlKSk7CisJCQlpKys7CisJCX0KIAotCWlmICh2YWxpZGF0ZSkKIAkJZm9yZWFj aChsYywgcmVsb3B0cy0+dmFsaWRhdG9ycykKLQkJCSgocmVsb3B0c192YWxpZGF0b3IpIGxm aXJzdChsYykpIChvcHRzLCB2YWxzLCBub3B0aW9ucyk7CisJCQkoKHJlbG9wdHNfdmFsaWRh dG9yKSBsZmlyc3QobGMpKSAob3B0cywgdmFsX2FycmF5LCB2YWxfY291bnQpOwogCi0JaWYg KGVsZW1zKQotCQlwZnJlZShlbGVtcyk7CisJCXBmcmVlKHZhbF9hcnJheSk7CisJfQogCiAJ cmV0dXJuIG9wdHM7CiB9CiAKIC8qCi0gKiBPcHRpb24gcGFyc2VyIGZvciBwYXJ0aXRpb25l ZCB0YWJsZXMKLSAqLwotYnl0ZWEgKgotcGFydGl0aW9uZWRfdGFibGVfcmVsb3B0aW9ucyhE YXR1bSByZWxvcHRpb25zLCBib29sIHZhbGlkYXRlKQotewotCWlmICh2YWxpZGF0ZSAmJiBy ZWxvcHRpb25zKQotCQllcmVwb3J0KEVSUk9SLAotCQkJCWVycmNvZGUoRVJSQ09ERV9XUk9O R19PQkpFQ1RfVFlQRSksCi0JCQkJZXJybXNnKCJjYW5ub3Qgc3BlY2lmeSBzdG9yYWdlIHBh cmFtZXRlcnMgZm9yIGEgcGFydGl0aW9uZWQgdGFibGUiKSwKLQkJCQllcnJoaW50KCJTcGVj aWZ5IHN0b3JhZ2UgcGFyYW1ldGVycyBmb3IgaXRzIGxlYWYgcGFydGl0aW9ucyBpbnN0ZWFk LiIpKTsKLQlyZXR1cm4gTlVMTDsKLX0KLQotLyoKLSAqIE9wdGlvbiBwYXJzZXIgZm9yIHZp ZXdzCisgKiBnZXRfdmlld19yZWxvcHRfc3BlY19zZXQKKyAqCQlSZXR1cm5zIGFuIG9wdGlv bnMgY2F0YWxvZyBmb3IgdmlldyByZWxhdGlvbi4KICAqLwotYnl0ZWEgKgotdmlld19yZWxv cHRpb25zKERhdHVtIHJlbG9wdGlvbnMsIGJvb2wgdmFsaWRhdGUpCi17Ci0Jc3RhdGljIGNv bnN0IHJlbG9wdF9wYXJzZV9lbHQgdGFiW10gPSB7Ci0JCXsic2VjdXJpdHlfYmFycmllciIs IFJFTE9QVF9UWVBFX0JPT0wsCi0JCW9mZnNldG9mKFZpZXdPcHRpb25zLCBzZWN1cml0eV9i YXJyaWVyKX0sCi0JCXsic2VjdXJpdHlfaW52b2tlciIsIFJFTE9QVF9UWVBFX0JPT0wsCi0J CW9mZnNldG9mKFZpZXdPcHRpb25zLCBzZWN1cml0eV9pbnZva2VyKX0sCi0JCXsiY2hlY2tf b3B0aW9uIiwgUkVMT1BUX1RZUEVfRU5VTSwKLQkJb2Zmc2V0b2YoVmlld09wdGlvbnMsIGNo ZWNrX29wdGlvbil9Ci0JfTsKLQotCXJldHVybiAoYnl0ZWEgKikgYnVpbGRfcmVsb3B0aW9u cyhyZWxvcHRpb25zLCB2YWxpZGF0ZSwKLQkJCQkJCQkJCSAgUkVMT1BUX0tJTkRfVklFVywK LQkJCQkJCQkJCSAgc2l6ZW9mKFZpZXdPcHRpb25zKSwKLQkJCQkJCQkJCSAgdGFiLCBsZW5n dGhvZih0YWIpKTsKLX0KK3N0YXRpYyBvcHRpb25zX3NwZWNfc2V0ICp2aWV3X3JlbG9wdF9z cGVjX3NldCA9IE5VTEw7CiAKLS8qCi0gKiBQYXJzZSBvcHRpb25zIGZvciBoZWFwcywgdmll d3MgYW5kIHRvYXN0IHRhYmxlcy4KLSAqLwotYnl0ZWEgKgotaGVhcF9yZWxvcHRpb25zKGNo YXIgcmVsa2luZCwgRGF0dW0gcmVsb3B0aW9ucywgYm9vbCB2YWxpZGF0ZSkKK29wdGlvbnNf c3BlY19zZXQgKgorZ2V0X3ZpZXdfcmVsb3B0X3NwZWNfc2V0KHZvaWQpCiB7Ci0JU3RkUmRP cHRpb25zICpyZG9wdHM7CisJaWYgKHZpZXdfcmVsb3B0X3NwZWNfc2V0KQorCQlyZXR1cm4g dmlld19yZWxvcHRfc3BlY19zZXQ7CiAKLQlzd2l0Y2ggKHJlbGtpbmQpCi0JewotCQljYXNl IFJFTEtJTkRfVE9BU1RWQUxVRToKLQkJCXJkb3B0cyA9IChTdGRSZE9wdGlvbnMgKikKLQkJ CQlkZWZhdWx0X3JlbG9wdGlvbnMocmVsb3B0aW9ucywgdmFsaWRhdGUsIFJFTE9QVF9LSU5E X1RPQVNUKTsKLQkJCWlmIChyZG9wdHMgIT0gTlVMTCkKLQkJCXsKLQkJCQkvKiBhZGp1c3Qg ZGVmYXVsdC1vbmx5IHBhcmFtZXRlcnMgZm9yIFRPQVNUIHJlbGF0aW9ucyAqLwotCQkJCXJk b3B0cy0+ZmlsbGZhY3RvciA9IDEwMDsKLQkJCQlyZG9wdHMtPmF1dG92YWN1dW0uYW5hbHl6 ZV90aHJlc2hvbGQgPSAtMTsKLQkJCQlyZG9wdHMtPmF1dG92YWN1dW0uYW5hbHl6ZV9zY2Fs ZV9mYWN0b3IgPSAtMTsKLQkJCX0KLQkJCXJldHVybiAoYnl0ZWEgKikgcmRvcHRzOwotCQlj YXNlIFJFTEtJTkRfUkVMQVRJT046Ci0JCWNhc2UgUkVMS0lORF9NQVRWSUVXOgotCQkJcmV0 dXJuIGRlZmF1bHRfcmVsb3B0aW9ucyhyZWxvcHRpb25zLCB2YWxpZGF0ZSwgUkVMT1BUX0tJ TkRfSEVBUCk7Ci0JCWRlZmF1bHQ6Ci0JCQkvKiBvdGhlciByZWxraW5kcyBhcmUgbm90IHN1 cHBvcnRlZCAqLwotCQkJcmV0dXJuIE5VTEw7Ci0JfQotfQorCXZpZXdfcmVsb3B0X3NwZWNf c2V0ID0gYWxsb2NhdGVPcHRpb25zU3BlY1NldChOVUxMLAorCQkJCQkJCQkJCQkgIHNpemVv ZihWaWV3T3B0aW9ucyksIGZhbHNlLCAzKTsKIAorCW9wdGlvbnNTcGVjU2V0QWRkQm9vbCh2 aWV3X3JlbG9wdF9zcGVjX3NldCwgInNlY3VyaXR5X2JhcnJpZXIiLAorCQkJCQkJICAiVmll dyBhY3RzIGFzIGEgcm93IHNlY3VyaXR5IGJhcnJpZXIiLAorCQkJCQkJICBBY2Nlc3NFeGNs dXNpdmVMb2NrLAorCQkJCQkJICBvZmZzZXRvZihWaWV3T3B0aW9ucywgc2VjdXJpdHlfYmFy cmllciksIE5VTEwsIGZhbHNlKTsKIAotLyoKLSAqIFBhcnNlIG9wdGlvbnMgZm9yIGluZGV4 ZXMuCi0gKgotICoJYW1vcHRpb25zCWluZGV4IEFNJ3Mgb3B0aW9uIHBhcnNlciBmdW5jdGlv bgotICoJcmVsb3B0aW9ucwlvcHRpb25zIGFzIHRleHRbXSBkYXR1bQotICoJdmFsaWRhdGUJ ZXJyb3IgZmxhZwotICovCi1ieXRlYSAqCi1pbmRleF9yZWxvcHRpb25zKGFtb3B0aW9uc19m dW5jdGlvbiBhbW9wdGlvbnMsIERhdHVtIHJlbG9wdGlvbnMsIGJvb2wgdmFsaWRhdGUpCi17 Ci0JQXNzZXJ0KGFtb3B0aW9ucyAhPSBOVUxMKTsKKwlvcHRpb25zU3BlY1NldEFkZEJvb2wo dmlld19yZWxvcHRfc3BlY19zZXQsICJzZWN1cml0eV9pbnZva2VyIiwKKwkJCQkJCSAgIlBy aXZpbGVnZXMgb24gdW5kZXJseWluZyByZWxhdGlvbnMgYXJlIGNoZWNrZWQgYXMgdGhlIGlu dm9raW5nIHVzZXIsIG5vdCB0aGUgdmlldyBvd25lciIsCisJCQkJCQkgIEFjY2Vzc0V4Y2x1 c2l2ZUxvY2ssCisJCQkJCQkgIG9mZnNldG9mKFZpZXdPcHRpb25zLCBzZWN1cml0eV9pbnZv a2VyKSwgTlVMTCwgZmFsc2UpOwogCi0JLyogQXNzdW1lIGZ1bmN0aW9uIGlzIHN0cmljdCAq LwotCWlmICghUG9pbnRlcklzVmFsaWQoRGF0dW1HZXRQb2ludGVyKHJlbG9wdGlvbnMpKSkK LQkJcmV0dXJuIE5VTEw7CisJb3B0aW9uc1NwZWNTZXRBZGRFbnVtKHZpZXdfcmVsb3B0X3Nw ZWNfc2V0LCAiY2hlY2tfb3B0aW9uIiwKKwkJCQkJCSAgIlZpZXcgaGFzIFdJVEggQ0hFQ0sg T1BUSU9OIGRlZmluZWQgKGxvY2FsIG9yIGNhc2NhZGVkKSIsCisJCQkJCQkgIEFjY2Vzc0V4 Y2x1c2l2ZUxvY2ssCisJCQkJCQkgIG9mZnNldG9mKFZpZXdPcHRpb25zLCBjaGVja19vcHRp b24pLCBOVUxMLAorCQkJCQkJICB2aWV3Q2hlY2tPcHRWYWx1ZXMsCisJCQkJCQkgIFZJRVdf T1BUSU9OX0NIRUNLX09QVElPTl9OT1RfU0VULAorCQkJCQkJICBnZXR0ZXh0X25vb3AoIlZh bGlkIHZhbHVlcyBhcmUgXCJsb2NhbFwiIGFuZCBcImNhc2NhZGVkXCIuIikpOwogCi0JcmV0 dXJuIGFtb3B0aW9ucyhyZWxvcHRpb25zLCB2YWxpZGF0ZSk7CisJcmV0dXJuIHZpZXdfcmVs b3B0X3NwZWNfc2V0OwogfQogCiAvKgotICogT3B0aW9uIHBhcnNlciBmb3IgYXR0cmlidXRl IHJlbG9wdGlvbnMKKyAqIGdldF9hdHRyaWJ1dGVfb3B0aW9uc19zcGVjX3NldAorICoJCVJl dHVybnMgYW4gb3B0aW9ucyBzcGVjIHNldCBmb3IgaGVhcCBhdHRyaWJ1dGVzCiAgKi8KLWJ5 dGVhICoKLWF0dHJpYnV0ZV9yZWxvcHRpb25zKERhdHVtIHJlbG9wdGlvbnMsIGJvb2wgdmFs aWRhdGUpCitzdGF0aWMgb3B0aW9uc19zcGVjX3NldCAqYXR0cmlidXRlX29wdGlvbnNfc3Bl Y19zZXQgPSBOVUxMOworCitvcHRpb25zX3NwZWNfc2V0ICoKK2dldF9hdHRyaWJ1dGVfb3B0 aW9uc19zcGVjX3NldCh2b2lkKQogewotCXN0YXRpYyBjb25zdCByZWxvcHRfcGFyc2VfZWx0 IHRhYltdID0gewotCQl7Im5fZGlzdGluY3QiLCBSRUxPUFRfVFlQRV9SRUFMLCBvZmZzZXRv ZihBdHRyaWJ1dGVPcHRzLCBuX2Rpc3RpbmN0KX0sCi0JCXsibl9kaXN0aW5jdF9pbmhlcml0 ZWQiLCBSRUxPUFRfVFlQRV9SRUFMLCBvZmZzZXRvZihBdHRyaWJ1dGVPcHRzLCBuX2Rpc3Rp bmN0X2luaGVyaXRlZCl9Ci0JfTsKLQotCXJldHVybiAoYnl0ZWEgKikgYnVpbGRfcmVsb3B0 aW9ucyhyZWxvcHRpb25zLCB2YWxpZGF0ZSwKLQkJCQkJCQkJCSAgUkVMT1BUX0tJTkRfQVRU UklCVVRFLAotCQkJCQkJCQkJICBzaXplb2YoQXR0cmlidXRlT3B0cyksCi0JCQkJCQkJCQkg IHRhYiwgbGVuZ3Rob2YodGFiKSk7CisJaWYgKGF0dHJpYnV0ZV9vcHRpb25zX3NwZWNfc2V0 KQorCQlyZXR1cm4gYXR0cmlidXRlX29wdGlvbnNfc3BlY19zZXQ7CisKKwlhdHRyaWJ1dGVf b3B0aW9uc19zcGVjX3NldCA9IGFsbG9jYXRlT3B0aW9uc1NwZWNTZXQoTlVMTCwKKwkJCQkJ CQkJCQkJc2l6ZW9mKEF0dHJpYnV0ZU9wdHMpLCBmYWxzZSwgMik7CisKKwlvcHRpb25zU3Bl Y1NldEFkZFJlYWwoYXR0cmlidXRlX29wdGlvbnNfc3BlY19zZXQsICJuX2Rpc3RpbmN0IiwK KwkJCQkJCSAgIlNldHMgdGhlIHBsYW5uZXIncyBlc3RpbWF0ZSBvZiB0aGUgbnVtYmVyIG9m IGRpc3RpbmN0IHZhbHVlcyBhcHBlYXJpbmcgaW4gYSBjb2x1bW4gKGV4Y2x1ZGluZyBjaGls ZCByZWxhdGlvbnMpLiIsCisJCQkJCQkgIFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jaywKKwkJ CQkJCSAgb2Zmc2V0b2YoQXR0cmlidXRlT3B0cywgbl9kaXN0aW5jdCksIE5VTEwsCisJCQkJ CQkgIDAsIC0xLjAsIERCTF9NQVgpOworCisJb3B0aW9uc1NwZWNTZXRBZGRSZWFsKGF0dHJp YnV0ZV9vcHRpb25zX3NwZWNfc2V0LAorCQkJCQkJICAibl9kaXN0aW5jdF9pbmhlcml0ZWQi LAorCQkJCQkJICAiU2V0cyB0aGUgcGxhbm5lcidzIGVzdGltYXRlIG9mIHRoZSBudW1iZXIg b2YgZGlzdGluY3QgdmFsdWVzIGFwcGVhcmluZyBpbiBhIGNvbHVtbiAoaW5jbHVkaW5nIGNo aWxkIHJlbGF0aW9ucykuIiwKKwkJCQkJCSAgU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrLAor CQkJCQkJICBvZmZzZXRvZihBdHRyaWJ1dGVPcHRzLCBuX2Rpc3RpbmN0X2luaGVyaXRlZCks IE5VTEwsCisJCQkJCQkgIDAsIC0xLjAsIERCTF9NQVgpOworCisJcmV0dXJuIGF0dHJpYnV0 ZV9vcHRpb25zX3NwZWNfc2V0OwogfQogCisKIC8qCi0gKiBPcHRpb24gcGFyc2VyIGZvciB0 YWJsZXNwYWNlIHJlbG9wdGlvbnMKLSAqLwotYnl0ZWEgKgotdGFibGVzcGFjZV9yZWxvcHRp b25zKERhdHVtIHJlbG9wdGlvbnMsIGJvb2wgdmFsaWRhdGUpCisgKiBnZXRfdGFibGVzcGFj ZV9vcHRpb25zX3NwZWNfc2V0CisgKgkJUmV0dXJucyBhbiBvcHRpb25zIHNwZWMgc2V0IGZv ciB0YWJsZXNwYWNlcworKi8KK3N0YXRpYyBvcHRpb25zX3NwZWNfc2V0ICp0YWJsZXNwYWNl X29wdGlvbnNfc3BlY19zZXQgPSBOVUxMOworCitvcHRpb25zX3NwZWNfc2V0ICoKK2dldF90 YWJsZXNwYWNlX29wdGlvbnNfc3BlY19zZXQodm9pZCkKIHsKLQlzdGF0aWMgY29uc3QgcmVs b3B0X3BhcnNlX2VsdCB0YWJbXSA9IHsKLQkJeyJyYW5kb21fcGFnZV9jb3N0IiwgUkVMT1BU X1RZUEVfUkVBTCwgb2Zmc2V0b2YoVGFibGVTcGFjZU9wdHMsIHJhbmRvbV9wYWdlX2Nvc3Qp fSwKLQkJeyJzZXFfcGFnZV9jb3N0IiwgUkVMT1BUX1RZUEVfUkVBTCwgb2Zmc2V0b2YoVGFi bGVTcGFjZU9wdHMsIHNlcV9wYWdlX2Nvc3QpfSwKLQkJeyJlZmZlY3RpdmVfaW9fY29uY3Vy cmVuY3kiLCBSRUxPUFRfVFlQRV9JTlQsIG9mZnNldG9mKFRhYmxlU3BhY2VPcHRzLCBlZmZl Y3RpdmVfaW9fY29uY3VycmVuY3kpfSwKLQkJeyJtYWludGVuYW5jZV9pb19jb25jdXJyZW5j eSIsIFJFTE9QVF9UWVBFX0lOVCwgb2Zmc2V0b2YoVGFibGVTcGFjZU9wdHMsIG1haW50ZW5h bmNlX2lvX2NvbmN1cnJlbmN5KX0KLQl9OwotCi0JcmV0dXJuIChieXRlYSAqKSBidWlsZF9y ZWxvcHRpb25zKHJlbG9wdGlvbnMsIHZhbGlkYXRlLAotCQkJCQkJCQkJICBSRUxPUFRfS0lO RF9UQUJMRVNQQUNFLAotCQkJCQkJCQkJICBzaXplb2YoVGFibGVTcGFjZU9wdHMpLAotCQkJ CQkJCQkJICB0YWIsIGxlbmd0aG9mKHRhYikpOworCWlmICh0YWJsZXNwYWNlX29wdGlvbnNf c3BlY19zZXQpCisJCXJldHVybiB0YWJsZXNwYWNlX29wdGlvbnNfc3BlY19zZXQ7CisKKwl0 YWJsZXNwYWNlX29wdGlvbnNfc3BlY19zZXQgPSBhbGxvY2F0ZU9wdGlvbnNTcGVjU2V0KE5V TEwsCisJCQkJCQkJCQkJCSBzaXplb2YoVGFibGVTcGFjZU9wdHMpLCBmYWxzZSwgNCk7CisJ b3B0aW9uc1NwZWNTZXRBZGRSZWFsKHRhYmxlc3BhY2Vfb3B0aW9uc19zcGVjX3NldCwKKwkJ CQkJCSAgInJhbmRvbV9wYWdlX2Nvc3QiLAorCQkJCQkJICAiU2V0cyB0aGUgcGxhbm5lcidz IGVzdGltYXRlIG9mIHRoZSBjb3N0IG9mIGEgbm9uc2VxdWVudGlhbGx5IGZldGNoZWQgZGlz ayBwYWdlIiwKKwkJCQkJCSAgU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrLAorCQkJCQkJICBv ZmZzZXRvZihUYWJsZVNwYWNlT3B0cywgcmFuZG9tX3BhZ2VfY29zdCksCisJCQkJCQkgIE5V TEwsIC0xLCAwLjAsIERCTF9NQVgpOworCisJb3B0aW9uc1NwZWNTZXRBZGRSZWFsKHRhYmxl c3BhY2Vfb3B0aW9uc19zcGVjX3NldCwgInNlcV9wYWdlX2Nvc3QiLAorCQkJCQkJICAiU2V0 cyB0aGUgcGxhbm5lcidzIGVzdGltYXRlIG9mIHRoZSBjb3N0IG9mIGEgc2VxdWVudGlhbGx5 IGZldGNoZWQgZGlzayBwYWdlIiwKKwkJCQkJCSAgU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2Nr LAorCQkJCQkJICBvZmZzZXRvZihUYWJsZVNwYWNlT3B0cywgc2VxX3BhZ2VfY29zdCksCisJ CQkJCQkgIE5VTEwsIC0xLCAwLjAsIERCTF9NQVgpOworCisJb3B0aW9uc1NwZWNTZXRBZGRJ bnQodGFibGVzcGFjZV9vcHRpb25zX3NwZWNfc2V0LCAiZWZmZWN0aXZlX2lvX2NvbmN1cnJl bmN5IiwKKwkJCQkJCSAiTnVtYmVyIG9mIHNpbXVsdGFuZW91cyByZXF1ZXN0cyB0aGF0IGNh biBiZSBoYW5kbGVkIGVmZmljaWVudGx5IGJ5IHRoZSBkaXNrIHN1YnN5c3RlbSIsCisJCQkJ CQkgU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrLAorCQkJCQkJIG9mZnNldG9mKFRhYmxlU3Bh Y2VPcHRzLCBlZmZlY3RpdmVfaW9fY29uY3VycmVuY3kpLAorCQkJCQkJIE5VTEwsCisjaWZk ZWYgVVNFX1BSRUZFVENICisJCQkJCQkgLTEsIDAsIE1BWF9JT19DT05DVVJSRU5DWQorI2Vs c2UKKwkJCQkJCSAwLCAwLCAwCisjZW5kaWYKKwkJKTsKKworCW9wdGlvbnNTcGVjU2V0QWRk SW50KHRhYmxlc3BhY2Vfb3B0aW9uc19zcGVjX3NldCwKKwkJCQkJCSAibWFpbnRlbmFuY2Vf aW9fY29uY3VycmVuY3kiLAorCQkJCQkJICJOdW1iZXIgb2Ygc2ltdWx0YW5lb3VzIHJlcXVl c3RzIHRoYXQgY2FuIGJlIGhhbmRsZWQgZWZmaWNpZW50bHkgYnkgdGhlIGRpc2sgc3Vic3lz dGVtIGZvciBtYWludGVuYW5jZSB3b3JrLiIsCisJCQkJCQkgU2hhcmVVcGRhdGVFeGNsdXNp dmVMb2NrLAorCQkJCQkJIG9mZnNldG9mKFRhYmxlU3BhY2VPcHRzLCBtYWludGVuYW5jZV9p b19jb25jdXJyZW5jeSksCisJCQkJCQkgTlVMTCwKKyNpZmRlZiBVU0VfUFJFRkVUQ0gKKwkJ CQkJCSAtMSwgMCwgTUFYX0lPX0NPTkNVUlJFTkNZCisjZWxzZQorCQkJCQkJIDAsIDAsIDAK KyNlbmRpZgorCQkpOworCXJldHVybiB0YWJsZXNwYWNlX29wdGlvbnNfc3BlY19zZXQ7CiB9 CiAKIC8qCkBAIC0yMTA3LDMzICs3NTEsNTUgQEAgdGFibGVzcGFjZV9yZWxvcHRpb25zKERh dHVtIHJlbG9wdGlvbnMsIGJvb2wgdmFsaWRhdGUpCiAgKiBmb3IgYSBsb25nZXIgZXhwbGFu YXRpb24gb2YgaG93IHRoaXMgd29ya3MuCiAgKi8KIExPQ0tNT0RFCi1BbHRlclRhYmxlR2V0 UmVsT3B0aW9uc0xvY2tMZXZlbChMaXN0ICpkZWZMaXN0KQorQWx0ZXJUYWJsZUdldFJlbE9w dGlvbnNMb2NrTGV2ZWwoUmVsYXRpb24gcmVsLCBMaXN0ICpkZWZMaXN0KQogewogCUxPQ0tN T0RFCWxvY2ttb2RlID0gTm9Mb2NrOwogCUxpc3RDZWxsICAgKmNlbGw7CisJb3B0aW9uc19z cGVjX3NldCAqc3BlY19zZXQgPSBOVUxMOwogCiAJaWYgKGRlZkxpc3QgPT0gTklMKQogCQly ZXR1cm4gQWNjZXNzRXhjbHVzaXZlTG9jazsKIAotCWlmIChuZWVkX2luaXRpYWxpemF0aW9u KQotCQlpbml0aWFsaXplX3JlbG9wdGlvbnMoKTsKKwlzd2l0Y2ggKHJlbC0+cmRfcmVsLT5y ZWxraW5kKQorCXsKKwkJY2FzZSBSRUxLSU5EX1RPQVNUVkFMVUU6CisJCQlzcGVjX3NldCA9 IGdldF90b2FzdF9yZWxvcHRfc3BlY19zZXQoKTsKKwkJCWJyZWFrOworCQljYXNlIFJFTEtJ TkRfUkVMQVRJT046CisJCWNhc2UgUkVMS0lORF9NQVRWSUVXOgorCQkJc3BlY19zZXQgPSBn ZXRfaGVhcF9yZWxvcHRfc3BlY19zZXQoKTsKKwkJCWJyZWFrOworCQljYXNlIFJFTEtJTkRf SU5ERVg6CisJCQlzcGVjX3NldCA9IHJlbC0+cmRfaW5kYW0tPmFtcmVsb3B0c3BlY3NldCgp OworCQkJYnJlYWs7CisJCWNhc2UgUkVMS0lORF9WSUVXOgorCQkJc3BlY19zZXQgPSBnZXRf dmlld19yZWxvcHRfc3BlY19zZXQoKTsKKwkJCWJyZWFrOworCQljYXNlIFJFTEtJTkRfUEFS VElUSU9ORURfVEFCTEU6CisJCQlzcGVjX3NldCA9IGdldF9wYXJ0aXRpb25lZF9yZWxvcHRf c3BlY19zZXQoKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJQXNzZXJ0KGZhbHNlKTsJ CS8qIGNhbid0IGdldCBoZXJlICovCisJCQlicmVhazsKKwl9CisJQXNzZXJ0KHNwZWNfc2V0 KTsJCQkvKiBObyBzcGVjIHNldCAtIG5vIHJlbG9wdGlvbiBjaGFuZ2UuIFNob3VsZAorCQkJ CQkJCQkgKiBuZXZlciBnZXQgaGVyZSAqLwogCiAJZm9yZWFjaChjZWxsLCBkZWZMaXN0KQog CXsKIAkJRGVmRWxlbSAgICAqZGVmID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCiAJ CWludAkJCWk7CiAKLQkJZm9yIChpID0gMDsgcmVsT3B0c1tpXTsgaSsrKQorCQlmb3IgKGkg PSAwOyBpIDwgc3BlY19zZXQtPm51bTsgaSsrKQogCQl7Ci0JCQlpZiAoc3RybmNtcChyZWxP cHRzW2ldLT5uYW1lLAotCQkJCQkJZGVmLT5kZWZuYW1lLAotCQkJCQkJcmVsT3B0c1tpXS0+ bmFtZWxlbiArIDEpID09IDApCi0JCQl7Ci0JCQkJaWYgKGxvY2ttb2RlIDwgcmVsT3B0c1tp XS0+bG9ja21vZGUpCi0JCQkJCWxvY2ttb2RlID0gcmVsT3B0c1tpXS0+bG9ja21vZGU7Ci0J CQl9CisJCQlvcHRpb25fc3BlY19iYXNpYyAqZ2VuID0gc3BlY19zZXQtPmRlZmluaXRpb25z W2ldOworCisJCQlpZiAocGdfc3RyY2FzZWNtcChnZW4tPm5hbWUsCisJCQkJCQkJICBkZWYt PmRlZm5hbWUpID09IDApCisJCQkJaWYgKGxvY2ttb2RlIDwgZ2VuLT5sb2NrbW9kZSkKKwkJ CQkJbG9ja21vZGUgPSBnZW4tPmxvY2ttb2RlOwogCQl9CiAJfQotCiAJcmV0dXJuIGxvY2tt b2RlOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYwppbmRleCBhODc1YzVkM2Q3YS4u ZmQ1N2FhZTBiYWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRp bC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jCkBAIC0xNiw3ICsx Niw3IEBACiAKICNpbmNsdWRlICJhY2Nlc3MvZ2luX3ByaXZhdGUuaCIKICNpbmNsdWRlICJh Y2Nlc3MvZ2lueGxvZy5oIgotI2luY2x1ZGUgImFjY2Vzcy9yZWxvcHRpb25zLmgiCisjaW5j bHVkZSAiYWNjZXNzL29wdGlvbnMuaCIKICNpbmNsdWRlICJhY2Nlc3MveGxvZ2luc2VydC5o IgogI2luY2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0aW9uLmgiCiAjaW5jbHVkZSAiY2F0YWxv Zy9wZ190eXBlLmgiCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAidXRpbHMvYnVpbHRp bnMuaCIKICNpbmNsdWRlICJ1dGlscy9pbmRleF9zZWxmdW5jcy5oIgogI2luY2x1ZGUgInV0 aWxzL3R5cGNhY2hlLmgiCisjaW5jbHVkZSAidXRpbHMvZ3VjLmgiCiAKIAogLyoKQEAgLTY5 LDcgKzcwLDYgQEAgZ2luaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCWFtcm91dGluZS0+ YW12YWN1dW1jbGVhbnVwID0gZ2ludmFjdXVtY2xlYW51cDsKIAlhbXJvdXRpbmUtPmFtY2Fu cmV0dXJuID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtY29zdGVzdGltYXRlID0gZ2luY29zdGVz dGltYXRlOwotCWFtcm91dGluZS0+YW1vcHRpb25zID0gZ2lub3B0aW9uczsKIAlhbXJvdXRp bmUtPmFtcHJvcGVydHkgPSBOVUxMOwogCWFtcm91dGluZS0+YW1idWlsZHBoYXNlbmFtZSA9 IE5VTEw7CiAJYW1yb3V0aW5lLT5hbXZhbGlkYXRlID0gZ2ludmFsaWRhdGU7CkBAIC04NCw2 ICs4NCw3IEBAIGdpbmhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAlhbXJvdXRpbmUtPmFt ZXN0aW1hdGVwYXJhbGxlbHNjYW4gPSBOVUxMOwogCWFtcm91dGluZS0+YW1pbml0cGFyYWxs ZWxzY2FuID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtcGFyYWxsZWxyZXNjYW4gPSBOVUxMOwor CWFtcm91dGluZS0+YW1yZWxvcHRzcGVjc2V0ID0gZ2luZ2V0cmVsb3B0c3BlY3NldDsKIAog CVBHX1JFVFVSTl9QT0lOVEVSKGFtcm91dGluZSk7CiB9CkBAIC01OTgsMjEgKzU5OSw2IEBA IGdpbkV4dHJhY3RFbnRyaWVzKEdpblN0YXRlICpnaW5zdGF0ZSwgT2Zmc2V0TnVtYmVyIGF0 dG51bSwKIAlyZXR1cm4gZW50cmllczsKIH0KIAotYnl0ZWEgKgotZ2lub3B0aW9ucyhEYXR1 bSByZWxvcHRpb25zLCBib29sIHZhbGlkYXRlKQotewotCXN0YXRpYyBjb25zdCByZWxvcHRf cGFyc2VfZWx0IHRhYltdID0gewotCQl7ImZhc3R1cGRhdGUiLCBSRUxPUFRfVFlQRV9CT09M LCBvZmZzZXRvZihHaW5PcHRpb25zLCB1c2VGYXN0VXBkYXRlKX0sCi0JCXsiZ2luX3BlbmRp bmdfbGlzdF9saW1pdCIsIFJFTE9QVF9UWVBFX0lOVCwgb2Zmc2V0b2YoR2luT3B0aW9ucywK LQkJCQkJCQkJCQkJCQkJCSBwZW5kaW5nTGlzdENsZWFudXBTaXplKX0KLQl9OwotCi0JcmV0 dXJuIChieXRlYSAqKSBidWlsZF9yZWxvcHRpb25zKHJlbG9wdGlvbnMsIHZhbGlkYXRlLAot CQkJCQkJCQkJICBSRUxPUFRfS0lORF9HSU4sCi0JCQkJCQkJCQkgIHNpemVvZihHaW5PcHRp b25zKSwKLQkJCQkJCQkJCSAgdGFiLCBsZW5ndGhvZih0YWIpKTsKLX0KLQogLyoKICAqIEZl dGNoIGluZGV4J3Mgc3RhdGlzdGljYWwgZGF0YSBpbnRvICpzdGF0cwogICoKQEAgLTY5OSwz ICs2ODUsMjkgQEAgZ2luVXBkYXRlU3RhdHMoUmVsYXRpb24gaW5kZXgsIGNvbnN0IEdpblN0 YXRzRGF0YSAqc3RhdHMsIGJvb2wgaXNfYnVpbGQpCiAKIAlFTkRfQ1JJVF9TRUNUSU9OKCk7 CiB9CisKK3N0YXRpYyBvcHRpb25zX3NwZWNfc2V0ICpnaW5fcmVsb3B0X3NwZWNzZXQgPSBO VUxMOworCit2b2lkICoKK2dpbmdldHJlbG9wdHNwZWNzZXQodm9pZCkKK3sKKwlpZiAoZ2lu X3JlbG9wdF9zcGVjc2V0KQorCQlyZXR1cm4gZ2luX3JlbG9wdF9zcGVjc2V0OworCisJZ2lu X3JlbG9wdF9zcGVjc2V0ID0gYWxsb2NhdGVPcHRpb25zU3BlY1NldChOVUxMLAorCQkJCQkJ CQkJCQkJc2l6ZW9mKEdpbk9wdGlvbnMpLCBmYWxzZSwgMik7CisKKwlvcHRpb25zU3BlY1Nl dEFkZEJvb2woZ2luX3JlbG9wdF9zcGVjc2V0LCAiZmFzdHVwZGF0ZSIsCisJCQkJCQkgICJF bmFibGVzIFwiZmFzdCB1cGRhdGVcIiBmZWF0dXJlIGZvciB0aGlzIEdJTiBpbmRleCIsCisJ CQkJCQkgIEFjY2Vzc0V4Y2x1c2l2ZUxvY2ssCisJCQkJCQkgIG9mZnNldG9mKEdpbk9wdGlv bnMsIHVzZUZhc3RVcGRhdGUpLCBOVUxMLAorCQkJCQkJICBHSU5fREVGQVVMVF9VU0VfRkFT VFVQREFURSk7CisKKwlvcHRpb25zU3BlY1NldEFkZEludChnaW5fcmVsb3B0X3NwZWNzZXQs ICJnaW5fcGVuZGluZ19saXN0X2xpbWl0IiwKKwkJCQkJCSAiTWF4aW11bSBzaXplIG9mIHRo ZSBwZW5kaW5nIGxpc3QgZm9yIHRoaXMgR0lOIGluZGV4LCBpbiBraWxvYnl0ZXMiLAorCQkJ CQkJIEFjY2Vzc0V4Y2x1c2l2ZUxvY2ssCisJCQkJCQkgb2Zmc2V0b2YoR2luT3B0aW9ucywg cGVuZGluZ0xpc3RDbGVhbnVwU2l6ZSksIE5VTEwsCisJCQkJCQkgLTEsIDY0LCBNQVhfS0lM T0JZVEVTKTsKKworCXJldHVybiBnaW5fcmVsb3B0X3NwZWNzZXQ7Cit9CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv Z2lzdC9naXN0LmMKaW5kZXggOWExYmY4ZjY2Y2IuLjBkNGRiY2U3YzQ0IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL2dpc3QvZ2lzdC5jCkBAIC05MSw3ICs5MSw2IEBAIGdpc3RoYW5kbGVyKFBHX0ZVTkNU SU9OX0FSR1MpCiAJYW1yb3V0aW5lLT5hbXZhY3V1bWNsZWFudXAgPSBnaXN0dmFjdXVtY2xl YW51cDsKIAlhbXJvdXRpbmUtPmFtY2FucmV0dXJuID0gZ2lzdGNhbnJldHVybjsKIAlhbXJv dXRpbmUtPmFtY29zdGVzdGltYXRlID0gZ2lzdGNvc3Rlc3RpbWF0ZTsKLQlhbXJvdXRpbmUt PmFtb3B0aW9ucyA9IGdpc3RvcHRpb25zOwogCWFtcm91dGluZS0+YW1wcm9wZXJ0eSA9IGdp c3Rwcm9wZXJ0eTsKIAlhbXJvdXRpbmUtPmFtYnVpbGRwaGFzZW5hbWUgPSBOVUxMOwogCWFt cm91dGluZS0+YW12YWxpZGF0ZSA9IGdpc3R2YWxpZGF0ZTsKQEAgLTEwNiw2ICsxMDUsNyBA QCBnaXN0aGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCWFtcm91dGluZS0+YW1lc3RpbWF0 ZXBhcmFsbGVsc2NhbiA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbWluaXRwYXJhbGxlbHNjYW4g PSBOVUxMOwogCWFtcm91dGluZS0+YW1wYXJhbGxlbHJlc2NhbiA9IE5VTEw7CisJYW1yb3V0 aW5lLT5hbXJlbG9wdHNwZWNzZXQgPSBnaXN0Z2V0cmVsb3B0c3BlY3NldDsKIAogCVBHX1JF VFVSTl9QT0lOVEVSKGFtcm91dGluZSk7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h Y2Nlc3MvZ2lzdC9naXN0dXRpbC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdHV0 aWwuYwppbmRleCA5Y2UzNjg3ZGJmMS4uOTJiNWU3ZDZjZjAgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9naXN0L2dpc3R1dGlsLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2dpc3QvZ2lzdHV0aWwuYwpAQCAtMTcsNyArMTcsNyBAQAogCiAjaW5jbHVkZSAiYWNjZXNz L2dpc3RfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMuaCIKLSNp bmNsdWRlICJhY2Nlc3MvcmVsb3B0aW9ucy5oIgorI2luY2x1ZGUgImFjY2Vzcy9vcHRpb25z LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19vcGNsYXNzLmgiCiAjaW5jbHVkZSAiY29tbW9u L3BnX3BybmcuaCIKICNpbmNsdWRlICJzdG9yYWdlL2luZGV4ZnNtLmgiCkBAIC05MDgsMjAg KzkwOCw2IEBAIGdpc3RQYWdlUmVjeWNsYWJsZShQYWdlIHBhZ2UpCiAJcmV0dXJuIGZhbHNl OwogfQogCi1ieXRlYSAqCi1naXN0b3B0aW9ucyhEYXR1bSByZWxvcHRpb25zLCBib29sIHZh bGlkYXRlKQotewotCXN0YXRpYyBjb25zdCByZWxvcHRfcGFyc2VfZWx0IHRhYltdID0gewot CQl7ImZpbGxmYWN0b3IiLCBSRUxPUFRfVFlQRV9JTlQsIG9mZnNldG9mKEdpU1RPcHRpb25z LCBmaWxsZmFjdG9yKX0sCi0JCXsiYnVmZmVyaW5nIiwgUkVMT1BUX1RZUEVfRU5VTSwgb2Zm c2V0b2YoR2lTVE9wdGlvbnMsIGJ1ZmZlcmluZ19tb2RlKX0KLQl9OwotCi0JcmV0dXJuIChi eXRlYSAqKSBidWlsZF9yZWxvcHRpb25zKHJlbG9wdGlvbnMsIHZhbGlkYXRlLAotCQkJCQkJ CQkJICBSRUxPUFRfS0lORF9HSVNULAotCQkJCQkJCQkJICBzaXplb2YoR2lTVE9wdGlvbnMp LAotCQkJCQkJCQkJICB0YWIsIGxlbmd0aG9mKHRhYikpOwotfQotCiAvKgogICoJZ2lzdHBy b3BlcnR5KCkgLS0gQ2hlY2sgYm9vbGVhbiBwcm9wZXJ0aWVzIG9mIGluZGV4ZXMuCiAgKgpA QCAtMTA1NiwzICsxMDQyLDM5IEBAIGdpc3RHZXRGYWtlTFNOKFJlbGF0aW9uIHJlbCkKIAkJ cmV0dXJuIEdldEZha2VMU05Gb3JVbmxvZ2dlZFJlbCgpOwogCX0KIH0KKworLyogdmFsdWVz IGZyb20gR2lzdE9wdEJ1ZmZlcmluZ01vZGUgKi8KK3N0YXRpYyBvcHRfZW51bV9lbHRfZGVm IGdpc3RCdWZmZXJpbmdPcHRWYWx1ZXNbXSA9Cit7CisJeyJhdXRvIiwgR0lTVF9PUFRJT05f QlVGRkVSSU5HX0FVVE99LAorCXsib24iLCBHSVNUX09QVElPTl9CVUZGRVJJTkdfT059LAor CXsib2ZmIiwgR0lTVF9PUFRJT05fQlVGRkVSSU5HX09GRn0sCisJeyhjb25zdCBjaGFyICop IE5VTEx9CQkvKiBsaXN0IHRlcm1pbmF0b3IgKi8KK307CisKK3N0YXRpYyBvcHRpb25zX3Nw ZWNfc2V0ICpnaXN0X3JlbG9wdF9zcGVjc2V0ID0gTlVMTDsKKwordm9pZCAqCitnaXN0Z2V0 cmVsb3B0c3BlY3NldCh2b2lkKQoreworCWlmIChnaXN0X3JlbG9wdF9zcGVjc2V0KQorCQly ZXR1cm4gZ2lzdF9yZWxvcHRfc3BlY3NldDsKKworCWdpc3RfcmVsb3B0X3NwZWNzZXQgPSBh bGxvY2F0ZU9wdGlvbnNTcGVjU2V0KE5VTEwsCisJCQkJCQkJCQkJCQkgc2l6ZW9mKEdpU1RP cHRpb25zKSwgZmFsc2UsIDIpOworCisJb3B0aW9uc1NwZWNTZXRBZGRJbnQoZ2lzdF9yZWxv cHRfc3BlY3NldCwgImZpbGxmYWN0b3IiLAorCQkJCQkJICJQYWNrcyBnaXN0IGluZGV4IHBh Z2VzIG9ubHkgdG8gdGhpcyBwZXJjZW50YWdlIiwKKwkJCQkJCSBOb0xvY2ssCS8qIE5vIEFM VEVSLCBubyBsb2NrICovCisJCQkJCQkgb2Zmc2V0b2YoR2lTVE9wdGlvbnMsIGZpbGxmYWN0 b3IpLCBOVUxMLAorCQkJCQkJIEdJU1RfREVGQVVMVF9GSUxMRkFDVE9SLCBHSVNUX01JTl9G SUxMRkFDVE9SLCAxMDApOworCisJb3B0aW9uc1NwZWNTZXRBZGRFbnVtKGdpc3RfcmVsb3B0 X3NwZWNzZXQsICJidWZmZXJpbmciLAorCQkJCQkJICAiRW5hYmxlcyBidWZmZXJpbmcgYnVp bGQgZm9yIHRoaXMgR2lTVCBpbmRleCIsCisJCQkJCQkgIE5vTG9jaywJLyogTm8gQUxURVIs IG5vIGxvY2sgKi8KKwkJCQkJCSAgb2Zmc2V0b2YoR2lTVE9wdGlvbnMsIGJ1ZmZlcmluZ19t b2RlKSwgTlVMTCwKKwkJCQkJCSAgZ2lzdEJ1ZmZlcmluZ09wdFZhbHVlcywKKwkJCQkJCSAg R0lTVF9PUFRJT05fQlVGRkVSSU5HX0FVVE8sCisJCQkJCQkgIGdldHRleHRfbm9vcCgiVmFs aWQgdmFsdWVzIGFyZSBcIm9uXCIsIFwib2ZmXCIsIGFuZCBcImF1dG9cIi4iKSk7CisJcmV0 dXJuIGdpc3RfcmVsb3B0X3NwZWNzZXQ7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaGFzaC9oYXNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKaW5k ZXggNjQ0M2ZmMjFiZGEuLmZmMWI1N2IzY2M1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaGFzaC9oYXNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5j CkBAIC04OCw3ICs4OCw2IEBAIGhhc2hoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJYW1y b3V0aW5lLT5hbXZhY3V1bWNsZWFudXAgPSBoYXNodmFjdXVtY2xlYW51cDsKIAlhbXJvdXRp bmUtPmFtY2FucmV0dXJuID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtY29zdGVzdGltYXRlID0g aGFzaGNvc3Rlc3RpbWF0ZTsKLQlhbXJvdXRpbmUtPmFtb3B0aW9ucyA9IGhhc2hvcHRpb25z OwogCWFtcm91dGluZS0+YW1wcm9wZXJ0eSA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbWJ1aWxk cGhhc2VuYW1lID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtdmFsaWRhdGUgPSBoYXNodmFsaWRh dGU7CkBAIC0xMDMsNiArMTAyLDcgQEAgaGFzaGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykK IAlhbXJvdXRpbmUtPmFtZXN0aW1hdGVwYXJhbGxlbHNjYW4gPSBOVUxMOwogCWFtcm91dGlu ZS0+YW1pbml0cGFyYWxsZWxzY2FuID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtcGFyYWxsZWxy ZXNjYW4gPSBOVUxMOworCWFtcm91dGluZS0+YW1yZWxvcHRzcGVjc2V0ID0gaGFzaGdldHJl bG9wdHNwZWNzZXQ7CiAKIAlQR19SRVRVUk5fUE9JTlRFUihhbXJvdXRpbmUpOwogfQpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHV0aWwuYyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oYXNoL2hhc2h1dGlsLmMKaW5kZXggODgwODljZTAyYmEuLjkwODgzNWE3 YzkwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNodXRpbC5jCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2h1dGlsLmMKQEAgLTE1LDcgKzE1LDcg QEAKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCiAjaW5jbHVkZSAiYWNjZXNzL2hhc2guaCIK LSNpbmNsdWRlICJhY2Nlc3MvcmVsb3B0aW9ucy5oIgorI2luY2x1ZGUgImFjY2Vzcy9vcHRp b25zLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3JlbHNjYW4uaCIKICNpbmNsdWRlICJwb3J0L3Bn X2JpdHV0aWxzLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZfaW50ZXJuYWxzLmgiCkBAIC0y NzIsMTkgKzI3Miw2IEBAIF9oYXNoX2NoZWNrcGFnZShSZWxhdGlvbiByZWwsIEJ1ZmZlciBi dWYsIGludCBmbGFncykKIAl9CiB9CiAKLWJ5dGVhICoKLWhhc2hvcHRpb25zKERhdHVtIHJl bG9wdGlvbnMsIGJvb2wgdmFsaWRhdGUpCi17Ci0Jc3RhdGljIGNvbnN0IHJlbG9wdF9wYXJz ZV9lbHQgdGFiW10gPSB7Ci0JCXsiZmlsbGZhY3RvciIsIFJFTE9QVF9UWVBFX0lOVCwgb2Zm c2V0b2YoSGFzaE9wdGlvbnMsIGZpbGxmYWN0b3IpfSwKLQl9OwotCi0JcmV0dXJuIChieXRl YSAqKSBidWlsZF9yZWxvcHRpb25zKHJlbG9wdGlvbnMsIHZhbGlkYXRlLAotCQkJCQkJCQkJ ICBSRUxPUFRfS0lORF9IQVNILAotCQkJCQkJCQkJICBzaXplb2YoSGFzaE9wdGlvbnMpLAot CQkJCQkJCQkJICB0YWIsIGxlbmd0aG9mKHRhYikpOwotfQotCiAvKgogICogX2hhc2hfZ2V0 X2luZGV4dHVwbGVfaGFzaGtleSAtIGdldCB0aGUgaGFzaCBpbmRleCB0dXBsZSdzIGhhc2gg a2V5IHZhbHVlCiAgKi8KQEAgLTYyMCwzICs2MDcsMjIgQEAgX2hhc2hfa2lsbF9pdGVtcyhJ bmRleFNjYW5EZXNjIHNjYW4pCiAJZWxzZQogCQlfaGFzaF9yZWxidWYocmVsLCBidWYpOwog fQorCitzdGF0aWMgb3B0aW9uc19zcGVjX3NldCAqaGFzaF9yZWxvcHRfc3BlY3NldCA9IE5V TEw7CisKK3ZvaWQgKgoraGFzaGdldHJlbG9wdHNwZWNzZXQodm9pZCkKK3sKKwlpZiAoaGFz aF9yZWxvcHRfc3BlY3NldCkKKwkJcmV0dXJuIGhhc2hfcmVsb3B0X3NwZWNzZXQ7CisKKwlo YXNoX3JlbG9wdF9zcGVjc2V0ID0gYWxsb2NhdGVPcHRpb25zU3BlY1NldChOVUxMLAorCQkJ CQkJCQkJCQkJIHNpemVvZihIYXNoT3B0aW9ucyksIGZhbHNlLCAxKTsKKwlvcHRpb25zU3Bl Y1NldEFkZEludChoYXNoX3JlbG9wdF9zcGVjc2V0LCAiZmlsbGZhY3RvciIsCisJCQkJCQkg IlBhY2tzIGhhc2ggaW5kZXggcGFnZXMgb25seSB0byB0aGlzIHBlcmNlbnRhZ2UiLAorCQkJ CQkJIE5vTG9jaywJLyogTm8gQUxURVIgLS0gbm8gbG9jayAqLworCQkJCQkJIG9mZnNldG9m KEhhc2hPcHRpb25zLCBmaWxsZmFjdG9yKSwgTlVMTCwKKwkJCQkJCSBIQVNIX0RFRkFVTFRf RklMTEZBQ1RPUiwgSEFTSF9NSU5fRklMTEZBQ1RPUiwgMTAwKTsKKworCXJldHVybiBoYXNo X3JlbG9wdF9zcGVjc2V0OworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25i dHJlZS9uYnRyZWUuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMKaW5k ZXggMDkzMGY5YjM3ZTMuLmQ0OTllYmViYmRmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9h Y2Nlc3MvbmJ0cmVlL25idHJlZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv bmJ0cmVlLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlICJhY2Nlc3MvcmVsc2Nhbi5o IgogI2luY2x1ZGUgImFjY2Vzcy94bG9nLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2dpbnNl cnQuaCIKKyNpbmNsdWRlICJhY2Nlc3Mvb3B0aW9ucy5oIgogI2luY2x1ZGUgImNvbW1hbmRz L3Byb2dyZXNzLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvdmFjdXVtLmgiCiAjaW5jbHVkZSAi bWlzY2FkbWluLmgiCkBAIC0xMjcsNyArMTI4LDYgQEAgYnRoYW5kbGVyKFBHX0ZVTkNUSU9O X0FSR1MpCiAJYW1yb3V0aW5lLT5hbXZhY3V1bWNsZWFudXAgPSBidHZhY3V1bWNsZWFudXA7 CiAJYW1yb3V0aW5lLT5hbWNhbnJldHVybiA9IGJ0Y2FucmV0dXJuOwogCWFtcm91dGluZS0+ YW1jb3N0ZXN0aW1hdGUgPSBidGNvc3Rlc3RpbWF0ZTsKLQlhbXJvdXRpbmUtPmFtb3B0aW9u cyA9IGJ0b3B0aW9uczsKIAlhbXJvdXRpbmUtPmFtcHJvcGVydHkgPSBidHByb3BlcnR5Owog CWFtcm91dGluZS0+YW1idWlsZHBoYXNlbmFtZSA9IGJ0YnVpbGRwaGFzZW5hbWU7CiAJYW1y b3V0aW5lLT5hbXZhbGlkYXRlID0gYnR2YWxpZGF0ZTsKQEAgLTE0Miw2ICsxNDIsNyBAQCBi dGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAlhbXJvdXRpbmUtPmFtZXN0aW1hdGVwYXJh bGxlbHNjYW4gPSBidGVzdGltYXRlcGFyYWxsZWxzY2FuOwogCWFtcm91dGluZS0+YW1pbml0 cGFyYWxsZWxzY2FuID0gYnRpbml0cGFyYWxsZWxzY2FuOwogCWFtcm91dGluZS0+YW1wYXJh bGxlbHJlc2NhbiA9IGJ0cGFyYWxsZWxyZXNjYW47CisJYW1yb3V0aW5lLT5hbXJlbG9wdHNw ZWNzZXQgPSBidGdldHJlbG9wdHNwZWNzZXQ7CiAKIAlQR19SRVRVUk5fUE9JTlRFUihhbXJv dXRpbmUpOwogfQpAQCAtMTQyOCwzICsxNDI5LDM1IEBAIGJ0Y2FucmV0dXJuKFJlbGF0aW9u IGluZGV4LCBpbnQgYXR0bm8pCiB7CiAJcmV0dXJuIHRydWU7CiB9CisKK3N0YXRpYyBvcHRp b25zX3NwZWNfc2V0ICpidF9yZWxvcHRfc3BlY3NldCA9IE5VTEw7CisKK3ZvaWQgKgorYnRn ZXRyZWxvcHRzcGVjc2V0KHZvaWQpCit7CisJaWYgKGJ0X3JlbG9wdF9zcGVjc2V0KQorCQly ZXR1cm4gYnRfcmVsb3B0X3NwZWNzZXQ7CisKKwlidF9yZWxvcHRfc3BlY3NldCA9IGFsbG9j YXRlT3B0aW9uc1NwZWNTZXQoTlVMTCwKKwkJCQkJCQkJCQkJICAgc2l6ZW9mKEJUT3B0aW9u cyksIGZhbHNlLCAzKTsKKworCW9wdGlvbnNTcGVjU2V0QWRkSW50KGJ0X3JlbG9wdF9zcGVj c2V0LCAiZmlsbGZhY3RvciIsCisJCQkJCQkgIlBhY2tzIGJ0cmVlIGluZGV4IHBhZ2VzIG9u bHkgdG8gdGhpcyBwZXJjZW50YWdlIiwKKwkJCQkJCSBTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxv Y2ssCS8qIGFmZmVjdHMgaW5zZXJ0cyBvbmx5ICovCisJCQkJCQkgb2Zmc2V0b2YoQlRPcHRp b25zLCBmaWxsZmFjdG9yKSwgTlVMTCwKKwkJCQkJCSBCVFJFRV9ERUZBVUxUX0ZJTExGQUNU T1IsIEJUUkVFX01JTl9GSUxMRkFDVE9SLCAxMDApOworCisJb3B0aW9uc1NwZWNTZXRBZGRS ZWFsKGJ0X3JlbG9wdF9zcGVjc2V0LCAidmFjdXVtX2NsZWFudXBfaW5kZXhfc2NhbGVfZmFj dG9yIiwKKwkJCQkJCSAgIk51bWJlciBvZiB0dXBsZSBpbnNlcnRzIHByaW9yIHRvIGluZGV4 IGNsZWFudXAgYXMgYSBmcmFjdGlvbiBvZiByZWx0dXBsZXMiLAorCQkJCQkJICBTaGFyZVVw ZGF0ZUV4Y2x1c2l2ZUxvY2ssCisJCQkJCQkgIG9mZnNldG9mKEJUT3B0aW9ucywgdmFjdXVt X2NsZWFudXBfaW5kZXhfc2NhbGVfZmFjdG9yKSwKKwkJCQkJCSAgTlVMTCwgLTEsIDAuMCwg MWUxMCk7CisKKwlvcHRpb25zU3BlY1NldEFkZEJvb2woYnRfcmVsb3B0X3NwZWNzZXQsICJk ZWR1cGxpY2F0ZV9pdGVtcyIsCisJCQkJCQkgICJFbmFibGVzIFwiZGVkdXBsaWNhdGUgaXRl bXNcIiBmZWF0dXJlIGZvciB0aGlzIGJ0cmVlIGluZGV4IiwKKwkJCQkJCSAgU2hhcmVVcGRh dGVFeGNsdXNpdmVMb2NrLCAvKiBhZmZlY3RzIGluc2VydHMgb25seSAqLworCQkJCQkJICBv ZmZzZXRvZihCVE9wdGlvbnMsIGRlZHVwbGljYXRlX2l0ZW1zKSwgTlVMTCwKKwkJCQkJCSAg dHJ1ZSk7CisKKwlyZXR1cm4gYnRfcmVsb3B0X3NwZWNzZXQ7Cit9CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMgYi9zcmMvYmFja2VuZC9hY2Nl c3MvbmJ0cmVlL25idHV0aWxzLmMKaW5kZXggMTUxMGI5N2ZiZTEuLjMwN2QzOWMyZWQyIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMKKysrIGIv c3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR1dGlscy5jCkBAIC0xOCw3ICsxOCw3IEBA CiAjaW5jbHVkZSA8dGltZS5oPgogCiAjaW5jbHVkZSAiYWNjZXNzL25idHJlZS5oIgotI2lu Y2x1ZGUgImFjY2Vzcy9yZWxvcHRpb25zLmgiCisjaW5jbHVkZSAic3RvcmFnZS9sb2NrLmgi CiAjaW5jbHVkZSAiYWNjZXNzL3JlbHNjYW4uaCIKICNpbmNsdWRlICJjYXRhbG9nL2NhdGFs b2cuaCIKICNpbmNsdWRlICJjb21tYW5kcy9wcm9ncmVzcy5oIgpAQCAtMjE1NSwyMyArMjE1 NSw2IEBAIEJUcmVlU2htZW1Jbml0KHZvaWQpCiAJCUFzc2VydChmb3VuZCk7CiB9CiAKLWJ5 dGVhICoKLWJ0b3B0aW9ucyhEYXR1bSByZWxvcHRpb25zLCBib29sIHZhbGlkYXRlKQotewot CXN0YXRpYyBjb25zdCByZWxvcHRfcGFyc2VfZWx0IHRhYltdID0gewotCQl7ImZpbGxmYWN0 b3IiLCBSRUxPUFRfVFlQRV9JTlQsIG9mZnNldG9mKEJUT3B0aW9ucywgZmlsbGZhY3Rvcil9 LAotCQl7InZhY3V1bV9jbGVhbnVwX2luZGV4X3NjYWxlX2ZhY3RvciIsIFJFTE9QVF9UWVBF X1JFQUwsCi0JCW9mZnNldG9mKEJUT3B0aW9ucywgdmFjdXVtX2NsZWFudXBfaW5kZXhfc2Nh bGVfZmFjdG9yKX0sCi0JCXsiZGVkdXBsaWNhdGVfaXRlbXMiLCBSRUxPUFRfVFlQRV9CT09M LAotCQlvZmZzZXRvZihCVE9wdGlvbnMsIGRlZHVwbGljYXRlX2l0ZW1zKX0KLQl9OwotCi0J cmV0dXJuIChieXRlYSAqKSBidWlsZF9yZWxvcHRpb25zKHJlbG9wdGlvbnMsIHZhbGlkYXRl LAotCQkJCQkJCQkJICBSRUxPUFRfS0lORF9CVFJFRSwKLQkJCQkJCQkJCSAgc2l6ZW9mKEJU T3B0aW9ucyksCi0JCQkJCQkJCQkgIHRhYiwgbGVuZ3Rob2YodGFiKSk7Ci19Ci0KIC8qCiAg KglidHByb3BlcnR5KCkgLS0gQ2hlY2sgYm9vbGVhbiBwcm9wZXJ0aWVzIG9mIGluZGV4ZXMu CiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jCmluZGV4IDMwYzAwODc2 YTU2Li42YTIyMGJjMjQ1ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lz dC9zcGd1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMu YwpAQCAtMTcsNyArMTcsNyBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL2FtdmFsaWRhdGUuaCIK ICNpbmNsdWRlICJhY2Nlc3MvaHR1cF9kZXRhaWxzLmgiCi0jaW5jbHVkZSAiYWNjZXNzL3Jl bG9wdGlvbnMuaCIKKyNpbmNsdWRlICJhY2Nlc3Mvb3B0aW9ucy5oIgogI2luY2x1ZGUgImFj Y2Vzcy9zcGdpc3RfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImFjY2Vzcy90b2FzdF9jb21wcmVz c2lvbi5oIgogI2luY2x1ZGUgImFjY2Vzcy90cmFuc2FtLmgiCkBAIC03NSw3ICs3NSw2IEBA IHNwZ2hhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAlhbXJvdXRpbmUtPmFtdmFjdXVtY2xl YW51cCA9IHNwZ3ZhY3V1bWNsZWFudXA7CiAJYW1yb3V0aW5lLT5hbWNhbnJldHVybiA9IHNw Z2NhbnJldHVybjsKIAlhbXJvdXRpbmUtPmFtY29zdGVzdGltYXRlID0gc3BnY29zdGVzdGlt YXRlOwotCWFtcm91dGluZS0+YW1vcHRpb25zID0gc3Bnb3B0aW9uczsKIAlhbXJvdXRpbmUt PmFtcHJvcGVydHkgPSBzcGdwcm9wZXJ0eTsKIAlhbXJvdXRpbmUtPmFtYnVpbGRwaGFzZW5h bWUgPSBOVUxMOwogCWFtcm91dGluZS0+YW12YWxpZGF0ZSA9IHNwZ3ZhbGlkYXRlOwpAQCAt OTAsNiArODksNyBAQCBzcGdoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJYW1yb3V0aW5l LT5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtaW5pdHBh cmFsbGVsc2NhbiA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbXBhcmFsbGVscmVzY2FuID0gTlVM TDsKKwlhbXJvdXRpbmUtPmFtcmVsb3B0c3BlY3NldCA9IHNwZ2dldHJlbG9wdHNwZWNzZXQ7 CiAKIAlQR19SRVRVUk5fUE9JTlRFUihhbXJvdXRpbmUpOwogfQpAQCAtNzI1LDIyICs3MjUs NiBAQCBTcEdpc3RJbml0TWV0YXBhZ2UoUGFnZSBwYWdlKQogCQkoKGNoYXIgKikgbWV0YWRh dGEgKyBzaXplb2YoU3BHaXN0TWV0YVBhZ2VEYXRhKSkgLSAoY2hhciAqKSBwYWdlOwogfQog Ci0vKgotICogcmVsb3B0aW9ucyBwcm9jZXNzaW5nIGZvciBTUEdpU1QKLSAqLwotYnl0ZWEg Kgotc3Bnb3B0aW9ucyhEYXR1bSByZWxvcHRpb25zLCBib29sIHZhbGlkYXRlKQotewotCXN0 YXRpYyBjb25zdCByZWxvcHRfcGFyc2VfZWx0IHRhYltdID0gewotCQl7ImZpbGxmYWN0b3Ii LCBSRUxPUFRfVFlQRV9JTlQsIG9mZnNldG9mKFNwR2lzdE9wdGlvbnMsIGZpbGxmYWN0b3Ip fSwKLQl9OwotCi0JcmV0dXJuIChieXRlYSAqKSBidWlsZF9yZWxvcHRpb25zKHJlbG9wdGlv bnMsIHZhbGlkYXRlLAotCQkJCQkJCQkJICBSRUxPUFRfS0lORF9TUEdJU1QsCi0JCQkJCQkJ CQkgIHNpemVvZihTcEdpc3RPcHRpb25zKSwKLQkJCQkJCQkJCSAgdGFiLCBsZW5ndGhvZih0 YWIpKTsKLX0KLQogLyoKICAqIEdldCB0aGUgc3BhY2UgbmVlZGVkIHRvIHN0b3JlIGEgbm9u LW51bGwgZGF0dW0gb2YgdGhlIGluZGljYXRlZCB0eXBlCiAgKiBpbiBhbiBpbm5lciB0dXBs ZSAodGhhdCBpcywgYXMgYSBwcmVmaXggb3Igbm9kZSBsYWJlbCkuCkBAIC0xMzQwLDMgKzEz MjQsMjQgQEAgc3BncHJvcGVydHkoT2lkIGluZGV4X29pZCwgaW50IGF0dG5vLAogCiAJcmV0 dXJuIHRydWU7CiB9CisKK3N0YXRpYyBvcHRpb25zX3NwZWNfc2V0ICpzcGdpc3RfcmVsb3B0 X3NwZWNzZXQgPSBOVUxMOworCit2b2lkICoKK3NwZ2dldHJlbG9wdHNwZWNzZXQodm9pZCkK K3sKKworCWlmIChzcGdpc3RfcmVsb3B0X3NwZWNzZXQpCisJCXJldHVybiBzcGdpc3RfcmVs b3B0X3NwZWNzZXQ7CisKKwlzcGdpc3RfcmVsb3B0X3NwZWNzZXQgPSBhbGxvY2F0ZU9wdGlv bnNTcGVjU2V0KE5VTEwsCisJCQkJCQkJCQkJCQkgICBzaXplb2YoU3BHaXN0T3B0aW9ucyks IGZhbHNlLCAxKTsKKworCW9wdGlvbnNTcGVjU2V0QWRkSW50KHNwZ2lzdF9yZWxvcHRfc3Bl Y3NldCwgImZpbGxmYWN0b3IiLAorCQkJCQkJICJQYWNrcyBzcGdpc3QgaW5kZXggcGFnZXMg b25seSB0byB0aGlzIHBlcmNlbnRhZ2UiLAorCQkJCQkJIFNoYXJlVXBkYXRlRXhjbHVzaXZl TG9jaywJLyogYWZmZWN0cyBvbmx5IGluc2VydHMgKi8KKwkJCQkJCSBvZmZzZXRvZihTcEdp c3RPcHRpb25zLCBmaWxsZmFjdG9yKSwgTlVMTCwKKwkJCQkJCSBTUEdJU1RfREVGQVVMVF9G SUxMRkFDVE9SLCBTUEdJU1RfTUlOX0ZJTExGQUNUT1IsIDEwMCk7CisKKwlyZXR1cm4gc3Bn aXN0X3JlbG9wdF9zcGVjc2V0OworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvY3JlYXRlYXMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMKaW5kZXgg ZTkxOTIwY2ExNGEuLjgwMDdkNWVhZTRhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21t YW5kcy9jcmVhdGVhcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMK QEAgLTkwLDYgKzkwLDcgQEAgY3JlYXRlX2N0YXNfaW50ZXJuYWwoTGlzdCAqYXR0ckxpc3Qs IEludG9DbGF1c2UgKmludG8pCiAJRGF0dW0JCXRvYXN0X29wdGlvbnM7CiAJc3RhdGljIGNo YXIgKnZhbGlkbnNwc1tdID0gSEVBUF9SRUxPUFRfTkFNRVNQQUNFUzsKIAlPYmplY3RBZGRy ZXNzIGludG9SZWxhdGlvbkFkZHI7CisJTGlzdAkgICAqdG9hc3REZWZMaXN0OwogCiAJLyog VGhpcyBjb2RlIHN1cHBvcnRzIGJvdGggQ1JFQVRFIFRBQkxFIEFTIGFuZCBDUkVBVEUgTUFU RVJJQUxJWkVEIFZJRVcgKi8KIAlpc19tYXR2aWV3ID0gKGludG8tPnZpZXdRdWVyeSAhPSBO VUxMKTsKQEAgLTEyNCwxNCArMTI1LDEyIEBAIGNyZWF0ZV9jdGFzX2ludGVybmFsKExpc3Qg KmF0dHJMaXN0LCBJbnRvQ2xhdXNlICppbnRvKQogCUNvbW1hbmRDb3VudGVySW5jcmVtZW50 KCk7CiAKIAkvKiBwYXJzZSBhbmQgdmFsaWRhdGUgcmVsb3B0aW9ucyBmb3IgdGhlIHRvYXN0 IHRhYmxlICovCi0JdG9hc3Rfb3B0aW9ucyA9IHRyYW5zZm9ybVJlbE9wdGlvbnMoKERhdHVt KSAwLAotCQkJCQkJCQkJCWNyZWF0ZS0+b3B0aW9ucywKLQkJCQkJCQkJCQkidG9hc3QiLAot CQkJCQkJCQkJCXZhbGlkbnNwcywKLQkJCQkJCQkJCQl0cnVlLCBmYWxzZSk7CiAKLQkodm9p ZCkgaGVhcF9yZWxvcHRpb25zKFJFTEtJTkRfVE9BU1RWQUxVRSwgdG9hc3Rfb3B0aW9ucywg dHJ1ZSk7CisJb3B0aW9uc0RlZkxpc3RWYWxkYXRlTmFtZXNwYWNlcyhjcmVhdGUtPm9wdGlv bnMsIHZhbGlkbnNwcyk7CisJdG9hc3REZWZMaXN0ID0gb3B0aW9uc0RlZkxpc3RGaWx0ZXJO YW1lc3BhY2VzKGNyZWF0ZS0+b3B0aW9ucywgInRvYXN0Iik7CiAKKwl0b2FzdF9vcHRpb25z ID0gb3B0aW9uRGVmTGlzdFRvVGV4dEFycmF5KGdldF90b2FzdF9yZWxvcHRfc3BlY19zZXQo KSwKKwkJCQkJCQkJCQkJIHRvYXN0RGVmTGlzdCk7CiAJTmV3UmVsYXRpb25DcmVhdGVUb2Fz dFRhYmxlKGludG9SZWxhdGlvbkFkZHIub2JqZWN0SWQsIHRvYXN0X29wdGlvbnMpOwogCiAJ LyogQ3JlYXRlIHRoZSAidmlldyIgcGFydCBvZiBhIG1hdGVyaWFsaXplZCB2aWV3LiAqLwpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZm9yZWlnbmNtZHMuYyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2ZvcmVpZ25jbWRzLmMKaW5kZXggMGVjZmY1NDVhOWUuLjNkMmNk ZTc2ZmUxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9mb3JlaWduY21kcy5j CisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2ZvcmVpZ25jbWRzLmMKQEAgLTExMiw3ICsx MTIsNyBAQCB0cmFuc2Zvcm1HZW5lcmljT3B0aW9ucyhPaWQgY2F0YWxvZ0lkLAogCQkJCQkJ TGlzdCAqb3B0aW9ucywKIAkJCQkJCU9pZCBmZHd2YWxpZGF0b3IpCiB7Ci0JTGlzdAkgICAq cmVzdWx0T3B0aW9ucyA9IHVudHJhbnNmb3JtUmVsT3B0aW9ucyhvbGRPcHRpb25zKTsKKwlM aXN0CSAgICpyZXN1bHRPcHRpb25zID0gb3B0aW9uc1RleHRBcnJheVRvRGVmTGlzdChvbGRP cHRpb25zKTsKIAlMaXN0Q2VsbCAgICpvcHRjZWxsOwogCURhdHVtCQlyZXN1bHQ7CiAKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvaW5kZXhjbWRzLmMKaW5kZXggZTU2MjA1YWJkOGMuLjJlZDExNDMxM2Qy IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYworKysgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYwpAQCAtMTksNiArMTksNyBAQAogI2lu Y2x1ZGUgImFjY2Vzcy9oZWFwYW0uaCIKICNpbmNsdWRlICJhY2Nlc3MvaHR1cF9kZXRhaWxz LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3JlbG9wdGlvbnMuaCIKKyNpbmNsdWRlICJhY2Nlc3Mv b3B0aW9ucy5oIgogI2luY2x1ZGUgImFjY2Vzcy9zeXNhdHRyLmgiCiAjaW5jbHVkZSAiYWNj ZXNzL3RhYmxlYW0uaCIKICNpbmNsdWRlICJhY2Nlc3MveGFjdC5oIgpAQCAtNTU4LDcgKzU1 OSw3IEBAIERlZmluZUluZGV4KE9pZCB0YWJsZUlkLAogCUluZGV4QW1Sb3V0aW5lICphbVJv dXRpbmU7CiAJYm9vbAkJYW1jYW5vcmRlcjsKIAlib29sCQlhbWlzc3VtbWFyaXppbmc7Ci0J YW1vcHRpb25zX2Z1bmN0aW9uIGFtb3B0aW9uczsKKwlhbXJlbG9wdHNwZWNzZXRfZnVuY3Rp b24gYW1yZWxvcHRzcGVjc2V0Zm47CiAJYm9vbAkJcGFydGl0aW9uZWQ7CiAJYm9vbAkJc2Fm ZV9pbmRleDsKIAlEYXR1bQkJcmVsb3B0aW9uczsKQEAgLTg2Nyw3ICs4NjgsNyBAQCBEZWZp bmVJbmRleChPaWQgdGFibGVJZCwKIAkJCQkJCWFjY2Vzc01ldGhvZE5hbWUpKSk7CiAKIAlh bWNhbm9yZGVyID0gYW1Sb3V0aW5lLT5hbWNhbm9yZGVyOwotCWFtb3B0aW9ucyA9IGFtUm91 dGluZS0+YW1vcHRpb25zOworCWFtcmVsb3B0c3BlY3NldGZuID0gYW1Sb3V0aW5lLT5hbXJl bG9wdHNwZWNzZXQ7CiAJYW1pc3N1bW1hcml6aW5nID0gYW1Sb3V0aW5lLT5hbXN1bW1hcml6 aW5nOwogCiAJcGZyZWUoYW1Sb3V0aW5lKTsKQEAgLTg4MiwxMCArODgzLDE4IEBAIERlZmlu ZUluZGV4KE9pZCB0YWJsZUlkLAogCS8qCiAJICogUGFyc2UgQU0tc3BlY2lmaWMgb3B0aW9u cywgY29udmVydCB0byB0ZXh0IGFycmF5IGZvcm0sIHZhbGlkYXRlLgogCSAqLwotCXJlbG9w dGlvbnMgPSB0cmFuc2Zvcm1SZWxPcHRpb25zKChEYXR1bSkgMCwgc3RtdC0+b3B0aW9ucywK LQkJCQkJCQkJCSBOVUxMLCBOVUxMLCBmYWxzZSwgZmFsc2UpOwogCi0JKHZvaWQpIGluZGV4 X3JlbG9wdGlvbnMoYW1vcHRpb25zLCByZWxvcHRpb25zLCB0cnVlKTsKKwlpZiAoc3RtdC0+ b3B0aW9ucyAmJiAhYW1yZWxvcHRzcGVjc2V0Zm4pCisJCWVyZXBvcnQoRVJST1IsCisJCQkJ KGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCSBlcnJtc2co ImFjY2VzcyBtZXRob2QgJXMgZG9lcyBub3Qgc3VwcG9ydCBvcHRpb25zIiwKKwkJCQkJCWFj Y2Vzc01ldGhvZE5hbWUpKSk7CisKKwlpZiAoYW1yZWxvcHRzcGVjc2V0Zm4pCisJCXJlbG9w dGlvbnMgPSBvcHRpb25EZWZMaXN0VG9UZXh0QXJyYXkoYW1yZWxvcHRzcGVjc2V0Zm4oKSwK KwkJCQkJCQkJCQkJICBzdG10LT5vcHRpb25zKTsKKwllbHNlCisJCXJlbG9wdGlvbnMgPSAo RGF0dW0pIDA7CiAKIAkvKgogCSAqIFByZXBhcmUgYXJndW1lbnRzIGZvciBpbmRleF9jcmVh dGUsIHByaW1hcmlseSBhbiBJbmRleEluZm8gc3RydWN0dXJlLgpAQCAtMjE5MSw4ICsyMjAw LDcgQEAgQ29tcHV0ZUluZGV4QXR0cnMoSW5kZXhJbmZvICppbmRleEluZm8sCiAJCQlBc3Nl cnQoYXR0biA8IG5rZXljb2xzKTsKIAogCQkJb3BjbGFzc09wdGlvbnNbYXR0bl0gPQotCQkJ CXRyYW5zZm9ybVJlbE9wdGlvbnMoKERhdHVtKSAwLCBhdHRyaWJ1dGUtPm9wY2xhc3NvcHRz LAotCQkJCQkJCQkJTlVMTCwgTlVMTCwgZmFsc2UsIGZhbHNlKTsKKwkJCQlvcHRpb25zRGVm TGlzdFRvVGV4dEFycmF5KGF0dHJpYnV0ZS0+b3BjbGFzc29wdHMpOwogCQl9CiAJCWVsc2UK IAkJCW9wY2xhc3NPcHRpb25zW2F0dG5dID0gKERhdHVtKSAwOwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90 YWJsZWNtZHMuYwppbmRleCA2YjBhMjAwMTBlMi4uYjY0MWM2NDhlZTggMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL3RhYmxlY21kcy5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSAiYWNjZXNz L2hlYXBhbV94bG9nLmgiCiAjaW5jbHVkZSAiYWNjZXNzL211bHRpeGFjdC5oIgogI2luY2x1 ZGUgImFjY2Vzcy9yZWxvcHRpb25zLmgiCisjaW5jbHVkZSAiYWNjZXNzL29wdGlvbnMuaCIK ICNpbmNsdWRlICJhY2Nlc3MvcmVsc2Nhbi5oIgogI2luY2x1ZGUgImFjY2Vzcy9zeXNhdHRy LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIKQEAgLTY5MCw3ICs2OTEsNiBAQCBE ZWZpbmVSZWxhdGlvbihDcmVhdGVTdG10ICpzdG10LCBjaGFyIHJlbGtpbmQsIE9pZCBvd25l cklkLAogCUxpc3RDZWxsICAgKmxpc3RwdHI7CiAJQXR0ck51bWJlcglhdHRudW07CiAJYm9v bAkJcGFydGl0aW9uZWQ7Ci0Jc3RhdGljIGNoYXIgKnZhbGlkbnNwc1tdID0gSEVBUF9SRUxP UFRfTkFNRVNQQUNFUzsKIAlPaWQJCQlvZlR5cGVJZDsKIAlPYmplY3RBZGRyZXNzIGFkZHJl c3M7CiAJTE9DS01PREUJcGFyZW50TG9ja21vZGU7CkBAIC04MzgsMTkgKzgzOCwzNiBAQCBE ZWZpbmVSZWxhdGlvbihDcmVhdGVTdG10ICpzdG10LCBjaGFyIHJlbGtpbmQsIE9pZCBvd25l cklkLAogCS8qCiAJICogUGFyc2UgYW5kIHZhbGlkYXRlIHJlbG9wdGlvbnMsIGlmIGFueS4K IAkgKi8KLQlyZWxvcHRpb25zID0gdHJhbnNmb3JtUmVsT3B0aW9ucygoRGF0dW0pIDAsIHN0 bXQtPm9wdGlvbnMsIE5VTEwsIHZhbGlkbnNwcywKLQkJCQkJCQkJCSB0cnVlLCBmYWxzZSk7 CiAKIAlzd2l0Y2ggKHJlbGtpbmQpCiAJewogCQljYXNlIFJFTEtJTkRfVklFVzoKLQkJCSh2 b2lkKSB2aWV3X3JlbG9wdGlvbnMocmVsb3B0aW9ucywgdHJ1ZSk7CisJCQlyZWxvcHRpb25z ID0gb3B0aW9uRGVmTGlzdFRvVGV4dEFycmF5KGdldF92aWV3X3JlbG9wdF9zcGVjX3NldCgp LAorCQkJCQkJCQkJCQkJICBzdG10LT5vcHRpb25zKTsKIAkJCWJyZWFrOwogCQljYXNlIFJF TEtJTkRfUEFSVElUSU9ORURfVEFCTEU6Ci0JCQkodm9pZCkgcGFydGl0aW9uZWRfdGFibGVf cmVsb3B0aW9ucyhyZWxvcHRpb25zLCB0cnVlKTsKLQkJCWJyZWFrOworCQkJeworCQkJCS8q IElmIGl0IGlzIG5vdCBhbGwgbGlzdGVkIGFib3ZlLCB0aGVuIGl0IGlmIGhlYXAgKi8KKwkJ CQljaGFyCSAgICpuYW1lc3BhY2VzW10gPSBIRUFQX1JFTE9QVF9OQU1FU1BBQ0VTOworCQkJ CUxpc3QJICAgKmhlYXBEZWZMaXN0OworCisJCQkJb3B0aW9uc0RlZkxpc3RWYWxkYXRlTmFt ZXNwYWNlcyhzdG10LT5vcHRpb25zLCBuYW1lc3BhY2VzKTsKKwkJCQloZWFwRGVmTGlzdCA9 IG9wdGlvbnNEZWZMaXN0RmlsdGVyTmFtZXNwYWNlcyhzdG10LT5vcHRpb25zLCBOVUxMKTsK KwkJCQlyZWxvcHRpb25zID0gb3B0aW9uRGVmTGlzdFRvVGV4dEFycmF5KAorCQkJCQkJCQkJ CQkJCSAgZ2V0X3BhcnRpdGlvbmVkX3JlbG9wdF9zcGVjX3NldCgpLCBoZWFwRGVmTGlzdCk7 CisJCQkJYnJlYWs7CisJCQl9CiAJCWRlZmF1bHQ6Ci0JCQkodm9pZCkgaGVhcF9yZWxvcHRp b25zKHJlbGtpbmQsIHJlbG9wdGlvbnMsIHRydWUpOworCQkJeworCQkJCS8qIElmIGl0IGlz IG5vdCBhbGwgbGlzdGVkIGFib3ZlLCBpcyBzaG91bGQgYmUgaGVhcCAqLworCQkJCWNoYXIJ ICAgKm5hbWVzcGFjZXNbXSA9IEhFQVBfUkVMT1BUX05BTUVTUEFDRVM7CisJCQkJTGlzdAkg ICAqaGVhcERlZkxpc3Q7CisKKwkJCQlvcHRpb25zRGVmTGlzdFZhbGRhdGVOYW1lc3BhY2Vz KHN0bXQtPm9wdGlvbnMsIG5hbWVzcGFjZXMpOworCQkJCWhlYXBEZWZMaXN0ID0gb3B0aW9u c0RlZkxpc3RGaWx0ZXJOYW1lc3BhY2VzKHN0bXQtPm9wdGlvbnMsIE5VTEwpOworCQkJCXJl bG9wdGlvbnMgPSBvcHRpb25EZWZMaXN0VG9UZXh0QXJyYXkoZ2V0X2hlYXBfcmVsb3B0X3Nw ZWNfc2V0KCksCisJCQkJCQkJCQkJCQkJICBoZWFwRGVmTGlzdCk7CisJCQl9CiAJfQogCiAJ aWYgKHN0bXQtPm9mVHlwZW5hbWUpCkBAIC00Mzk1LDcgKzQ0MTIsNyBAQCB2b2lkCiBBbHRl clRhYmxlSW50ZXJuYWwoT2lkIHJlbGlkLCBMaXN0ICpjbWRzLCBib29sIHJlY3Vyc2UpCiB7 CiAJUmVsYXRpb24JcmVsOwotCUxPQ0tNT0RFCWxvY2ttb2RlID0gQWx0ZXJUYWJsZUdldExv Y2tMZXZlbChjbWRzKTsKKwlMT0NLTU9ERQlsb2NrbW9kZSA9IEFsdGVyVGFibGVHZXRMb2Nr TGV2ZWwocmVsaWQsIGNtZHMpOwogCiAJcmVsID0gcmVsYXRpb25fb3BlbihyZWxpZCwgbG9j a21vZGUpOwogCkBAIC00NDM3LDcgKzQ0NTQsNyBAQCBBbHRlclRhYmxlSW50ZXJuYWwoT2lk IHJlbGlkLCBMaXN0ICpjbWRzLCBib29sIHJlY3Vyc2UpCiAgKiBvdGhlcndpc2Ugd2UgbWln aHQgZW5kIHVwIHdpdGggYW4gaW5jb25zaXN0ZW50IGR1bXAgdGhhdCBjYW4ndCByZXN0b3Jl LgogICovCiBMT0NLTU9ERQotQWx0ZXJUYWJsZUdldExvY2tMZXZlbChMaXN0ICpjbWRzKQor QWx0ZXJUYWJsZUdldExvY2tMZXZlbChPaWQgcmVsaWQsIExpc3QgKmNtZHMpCiB7CiAJLyoK IAkgKiBUaGlzIG9ubHkgd29ya3MgaWYgd2UgcmVhZCBjYXRhbG9nIHRhYmxlcyB1c2luZyBN VkNDIHNuYXBzaG90cy4KQEAgLTQ2NTgsOSArNDY3NSwxNCBAQCBBbHRlclRhYmxlR2V0TG9j a0xldmVsKExpc3QgKmNtZHMpCiAJCQkJCQkJCQkgKiBnZXRUYWJsZXMoKSAqLwogCQkJY2Fz ZSBBVF9SZXNldFJlbE9wdGlvbnM6CS8qIFVzZXMgTVZDQyBpbiBnZXRJbmRleGVzKCkgYW5k CiAJCQkJCQkJCQkJICogZ2V0VGFibGVzKCkgKi8KLQkJCQljbWRfbG9ja21vZGUgPSBBbHRl clRhYmxlR2V0UmVsT3B0aW9uc0xvY2tMZXZlbCgoTGlzdCAqKSBjbWQtPmRlZik7Ci0JCQkJ YnJlYWs7CisJCQkJeworCQkJCQlSZWxhdGlvbglyZWwgPSByZWxhdGlvbl9vcGVuKHJlbGlk LCBBY2Nlc3NTaGFyZUxvY2spOwogCisJCQkJCWNtZF9sb2NrbW9kZSA9IEFsdGVyVGFibGVH ZXRSZWxPcHRpb25zTG9ja0xldmVsKHJlbCwKKwkJCQkJCQkJCQkJCQkJCQkJY2FzdE5vZGUo TGlzdCwgY21kLT5kZWYpKTsKKwkJCQkJcmVsYXRpb25fY2xvc2UocmVsLCBBY2Nlc3NTaGFy ZUxvY2spOworCQkJCQlicmVhazsKKwkJCQl9CiAJCQljYXNlIEFUX0F0dGFjaFBhcnRpdGlv bjoKIAkJCQljbWRfbG9ja21vZGUgPSBTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2s7CiAJCQkJ YnJlYWs7CkBAIC04NTk2LDEyICs4NjE4LDEzIEBAIEFURXhlY1NldE9wdGlvbnMoUmVsYXRp b24gcmVsLCBjb25zdCBjaGFyICpjb2xOYW1lLCBOb2RlICpvcHRpb25zLAogCS8qIEdlbmVy YXRlIG5ldyBwcm9wb3NlZCBhdHRvcHRpb25zICh0ZXh0IGFycmF5KSAqLwogCWRhdHVtID0g U3lzQ2FjaGVHZXRBdHRyKEFUVE5BTUUsIHR1cGxlLCBBbnVtX3BnX2F0dHJpYnV0ZV9hdHRv cHRpb25zLAogCQkJCQkJCSZpc251bGwpOwotCW5ld09wdGlvbnMgPSB0cmFuc2Zvcm1SZWxP cHRpb25zKGlzbnVsbCA/IChEYXR1bSkgMCA6IGRhdHVtLAotCQkJCQkJCQkJIGNhc3ROb2Rl KExpc3QsIG9wdGlvbnMpLCBOVUxMLCBOVUxMLAotCQkJCQkJCQkJIGZhbHNlLCBpc1Jlc2V0 KTsKLQkvKiBWYWxpZGF0ZSBuZXcgb3B0aW9ucyAqLwotCSh2b2lkKSBhdHRyaWJ1dGVfcmVs b3B0aW9ucyhuZXdPcHRpb25zLCB0cnVlKTsKKwlpZiAoaXNudWxsKQorCQlkYXR1bSA9IChE YXR1bSkgMDsKIAorCW5ld09wdGlvbnMgPSBvcHRpb25zVXBkYXRlVGV4QXJyYXlXaXRoRGVm TGlzdCgKKwkJCQkJCQkJCQkJCSAgZ2V0X2F0dHJpYnV0ZV9vcHRpb25zX3NwZWNfc2V0KCks CisJCQkJCQkJCQkJCQkgIGRhdHVtLCBjYXN0Tm9kZShMaXN0LCBvcHRpb25zKSwKKwkJCQkJ CQkJCQkJCSAgaXNSZXNldCk7CiAJLyogQnVpbGQgbmV3IHR1cGxlLiAqLwogCW1lbXNldChy ZXBsX251bGwsIGZhbHNlLCBzaXplb2YocmVwbF9udWxsKSk7CiAJbWVtc2V0KHJlcGxfcmVw bCwgZmFsc2UsIHNpemVvZihyZXBsX3JlcGwpKTsKQEAgLTE0OTM3LDEyICsxNDk2MCwxMyBA QCBBVEV4ZWNTZXRSZWxPcHRpb25zKFJlbGF0aW9uIHJlbCwgTGlzdCAqZGVmTGlzdCwgQWx0 ZXJUYWJsZVR5cGUgb3BlcmF0aW9uLAogCUhlYXBUdXBsZQl0dXBsZTsKIAlIZWFwVHVwbGUJ bmV3dHVwbGU7CiAJRGF0dW0JCWRhdHVtOwotCWJvb2wJCWlzbnVsbDsKIAlEYXR1bQkJbmV3 T3B0aW9uczsKIAlEYXR1bQkJcmVwbF92YWxbTmF0dHNfcGdfY2xhc3NdOwogCWJvb2wJCXJl cGxfbnVsbFtOYXR0c19wZ19jbGFzc107CiAJYm9vbAkJcmVwbF9yZXBsW05hdHRzX3BnX2Ns YXNzXTsKLQlzdGF0aWMgY2hhciAqdmFsaWRuc3BzW10gPSBIRUFQX1JFTE9QVF9OQU1FU1BB Q0VTOworCUxpc3QJICAgKm9wdGlvbnNEZWZMaXN0OworCW9wdGlvbnNfc3BlY19zZXQgKm9w dGlvbnNTcGVjU2V0OworCWNoYXIJICAgKmhlYXBfbmFtZXNwYWNlc1tdID0gSEVBUF9SRUxP UFRfTkFNRVNQQUNFUzsKIAogCWlmIChkZWZMaXN0ID09IE5JTCAmJiBvcGVyYXRpb24gIT0g QVRfUmVwbGFjZVJlbE9wdGlvbnMpCiAJCXJldHVybjsJCQkJCS8qIG5vdGhpbmcgdG8gZG8g Ki8KQEAgLTE0OTYyLDM4ICsxNDk4Niw1NiBAQCBBVEV4ZWNTZXRSZWxPcHRpb25zKFJlbGF0 aW9uIHJlbCwgTGlzdCAqZGVmTGlzdCwgQWx0ZXJUYWJsZVR5cGUgb3BlcmF0aW9uLAogCQkg KiB0aGVyZSB3ZXJlIG5vbmUgYmVmb3JlLgogCQkgKi8KIAkJZGF0dW0gPSAoRGF0dW0pIDA7 Ci0JCWlzbnVsbCA9IHRydWU7CiAJfQogCWVsc2UKIAl7CisJCWJvb2wJCWlzbnVsbDsKKwog CQkvKiBHZXQgdGhlIG9sZCByZWxvcHRpb25zICovCiAJCWRhdHVtID0gU3lzQ2FjaGVHZXRB dHRyKFJFTE9JRCwgdHVwbGUsIEFudW1fcGdfY2xhc3NfcmVsb3B0aW9ucywKIAkJCQkJCQkJ JmlzbnVsbCk7CisJCWlmIChpc251bGwpCisJCQlkYXR1bSA9IChEYXR1bSkgMDsKIAl9CiAK IAkvKiBHZW5lcmF0ZSBuZXcgcHJvcG9zZWQgcmVsb3B0aW9ucyAodGV4dCBhcnJheSkgKi8K LQluZXdPcHRpb25zID0gdHJhbnNmb3JtUmVsT3B0aW9ucyhpc251bGwgPyAoRGF0dW0pIDAg OiBkYXR1bSwKLQkJCQkJCQkJCSBkZWZMaXN0LCBOVUxMLCB2YWxpZG5zcHMsIGZhbHNlLAot CQkJCQkJCQkJIG9wZXJhdGlvbiA9PSBBVF9SZXNldFJlbE9wdGlvbnMpOwogCiAJLyogVmFs aWRhdGUgKi8KKworCW9wdGlvbnNTcGVjU2V0ID0gTlVMTDsKIAlzd2l0Y2ggKHJlbC0+cmRf cmVsLT5yZWxraW5kKQogCXsKIAkJY2FzZSBSRUxLSU5EX1JFTEFUSU9OOgotCQljYXNlIFJF TEtJTkRfVE9BU1RWQUxVRToKIAkJY2FzZSBSRUxLSU5EX01BVFZJRVc6Ci0JCQkodm9pZCkg aGVhcF9yZWxvcHRpb25zKHJlbC0+cmRfcmVsLT5yZWxraW5kLCBuZXdPcHRpb25zLCB0cnVl KTsKKwkJCW9wdGlvbnNEZWZMaXN0VmFsZGF0ZU5hbWVzcGFjZXMoZGVmTGlzdCwgaGVhcF9u YW1lc3BhY2VzKTsKKwkJCW9wdGlvbnNEZWZMaXN0ID0gb3B0aW9uc0RlZkxpc3RGaWx0ZXJO YW1lc3BhY2VzKGRlZkxpc3QsIE5VTEwpOworCQkJb3B0aW9uc1NwZWNTZXQgPSBnZXRfaGVh cF9yZWxvcHRfc3BlY19zZXQoKTsKIAkJCWJyZWFrOwogCQljYXNlIFJFTEtJTkRfUEFSVElU SU9ORURfVEFCTEU6Ci0JCQkodm9pZCkgcGFydGl0aW9uZWRfdGFibGVfcmVsb3B0aW9ucyhu ZXdPcHRpb25zLCB0cnVlKTsKKwkJCW9wdGlvbnNEZWZMaXN0VmFsZGF0ZU5hbWVzcGFjZXMo ZGVmTGlzdCwgaGVhcF9uYW1lc3BhY2VzKTsKKwkJCW9wdGlvbnNEZWZMaXN0ID0gb3B0aW9u c0RlZkxpc3RGaWx0ZXJOYW1lc3BhY2VzKGRlZkxpc3QsIE5VTEwpOworCQkJb3B0aW9uc1Nw ZWNTZXQgPSBnZXRfcGFydGl0aW9uZWRfcmVsb3B0X3NwZWNfc2V0KCk7CiAJCQlicmVhazsK IAkJY2FzZSBSRUxLSU5EX1ZJRVc6Ci0JCQkodm9pZCkgdmlld19yZWxvcHRpb25zKG5ld09w dGlvbnMsIHRydWUpOworCQkJb3B0aW9uc0RlZkxpc3QgPSBkZWZMaXN0OworCQkJb3B0aW9u c1NwZWNTZXQgPSBnZXRfdmlld19yZWxvcHRfc3BlY19zZXQoKTsKIAkJCWJyZWFrOwogCQlj YXNlIFJFTEtJTkRfSU5ERVg6CiAJCWNhc2UgUkVMS0lORF9QQVJUSVRJT05FRF9JTkRFWDoK LQkJCSh2b2lkKSBpbmRleF9yZWxvcHRpb25zKHJlbC0+cmRfaW5kYW0tPmFtb3B0aW9ucywg bmV3T3B0aW9ucywgdHJ1ZSk7CisJCQlpZiAoIXJlbC0+cmRfaW5kYW0tPmFtcmVsb3B0c3Bl Y3NldCkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFU VVJFX05PVF9TVVBQT1JURUQpLAorCQkJCQkJIGVycm1zZygiaW5kZXggJXMgZG9lcyBub3Qg c3VwcG9ydCBvcHRpb25zIiwKKwkJCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVs KSkpKTsKKwkJCW9wdGlvbnNEZWZMaXN0ID0gZGVmTGlzdDsKKwkJCW9wdGlvbnNTcGVjU2V0 ID0gcmVsLT5yZF9pbmRhbS0+YW1yZWxvcHRzcGVjc2V0KCk7CiAJCQlicmVhazsKKwkJY2Fz ZSBSRUxLSU5EX1RPQVNUVkFMVUU6CisJCQkvKiBTaG91bGQgbmV2ZXIgZ2V0IGhlcmUgKi8K KwkJCS8qIFRPQVNUIG9wdGlvbnMgYXJlIG5ldmVyIGFsdGVyZWQgZGlyZWN0bHkgKi8KKwkJ CUFzc2VydCgwKTsKKwkJCS8qIEZBTExUSFJVICovCisJCQkvKiBJZiB3ZSBnZXQgaGVyZSBp biBwcm9kLiBlcnJvciBpcyB0aGUgYmVzdCBvcHRpb24gKi8KIAkJZGVmYXVsdDoKIAkJCWVy ZXBvcnQoRVJST1IsCiAJCQkJCShlcnJjb2RlKEVSUkNPREVfV1JPTkdfT0JKRUNUX1RZUEUp LApAQCAtMTUwMDMsMTEgKzE1MDQ1LDE1IEBAIEFURXhlY1NldFJlbE9wdGlvbnMoUmVsYXRp b24gcmVsLCBMaXN0ICpkZWZMaXN0LCBBbHRlclRhYmxlVHlwZSBvcGVyYXRpb24sCiAJCQli cmVhazsKIAl9CiAKKwluZXdPcHRpb25zID0gb3B0aW9uc1VwZGF0ZVRleEFycmF5V2l0aERl Zkxpc3Qob3B0aW9uc1NwZWNTZXQsIGRhdHVtLAorCQkJCQkJCQkJCQkJICBvcHRpb25zRGVm TGlzdCwKKwkJCQkJCQkJCQkJCSAgb3BlcmF0aW9uID09IEFUX1Jlc2V0UmVsT3B0aW9ucyk7 CisKIAkvKiBTcGVjaWFsLWNhc2UgdmFsaWRhdGlvbiBvZiB2aWV3IG9wdGlvbnMgKi8KIAlp ZiAocmVsLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9WSUVXKQogCXsKIAkJUXVlcnkJ ICAgKnZpZXdfcXVlcnkgPSBnZXRfdmlld19xdWVyeShyZWwpOwotCQlMaXN0CSAgICp2aWV3 X29wdGlvbnMgPSB1bnRyYW5zZm9ybVJlbE9wdGlvbnMobmV3T3B0aW9ucyk7CisJCUxpc3QJ ICAgKnZpZXdfb3B0aW9ucyA9IG9wdGlvbnNUZXh0QXJyYXlUb0RlZkxpc3QobmV3T3B0aW9u cyk7CiAJCUxpc3RDZWxsICAgKmNlbGw7CiAJCWJvb2wJCWNoZWNrX29wdGlvbiA9IGZhbHNl OwogCkBAIC0xNTA4MiwyMCArMTUxMjgsMjMgQEAgQVRFeGVjU2V0UmVsT3B0aW9ucyhSZWxh dGlvbiByZWwsIExpc3QgKmRlZkxpc3QsIEFsdGVyVGFibGVUeXBlIG9wZXJhdGlvbiwKIAkJ CSAqIHByZXRlbmQgdGhlcmUgd2VyZSBub25lIGJlZm9yZS4KIAkJCSAqLwogCQkJZGF0dW0g PSAoRGF0dW0pIDA7Ci0JCQlpc251bGwgPSB0cnVlOwogCQl9CiAJCWVsc2UKIAkJeworCQkJ Ym9vbAkJaXNudWxsOworCiAJCQkvKiBHZXQgdGhlIG9sZCByZWxvcHRpb25zICovCiAJCQlk YXR1bSA9IFN5c0NhY2hlR2V0QXR0cihSRUxPSUQsIHR1cGxlLCBBbnVtX3BnX2NsYXNzX3Jl bG9wdGlvbnMsCiAJCQkJCQkJCQkmaXNudWxsKTsKKwkJCWlmIChpc251bGwpCisJCQkJZGF0 dW0gPSAoRGF0dW0pIDA7CiAJCX0KIAotCQluZXdPcHRpb25zID0gdHJhbnNmb3JtUmVsT3B0 aW9ucyhpc251bGwgPyAoRGF0dW0pIDAgOiBkYXR1bSwKLQkJCQkJCQkJCQkgZGVmTGlzdCwg InRvYXN0IiwgdmFsaWRuc3BzLCBmYWxzZSwKLQkJCQkJCQkJCQkgb3BlcmF0aW9uID09IEFU X1Jlc2V0UmVsT3B0aW9ucyk7Ci0KLQkJKHZvaWQpIGhlYXBfcmVsb3B0aW9ucyhSRUxLSU5E X1RPQVNUVkFMVUUsIG5ld09wdGlvbnMsIHRydWUpOworCQlvcHRpb25zRGVmTGlzdCA9IG9w dGlvbnNEZWZMaXN0RmlsdGVyTmFtZXNwYWNlcyhkZWZMaXN0LCAidG9hc3QiKTsKKwkJbmV3 T3B0aW9ucyA9IG9wdGlvbnNVcGRhdGVUZXhBcnJheVdpdGhEZWZMaXN0KAorCQkJCQkJCQkJ CQkJCSAgZ2V0X3RvYXN0X3JlbG9wdF9zcGVjX3NldCgpLAorCQkJCQkJCQkJCQkJCSAgZGF0 dW0sIG9wdGlvbnNEZWZMaXN0LAorCQkJCQkJCQkJCQkJCSAgb3BlcmF0aW9uID09IEFUX1Jl c2V0UmVsT3B0aW9ucyk7CiAKIAkJbWVtc2V0KHJlcGxfdmFsLCAwLCBzaXplb2YocmVwbF92 YWwpKTsKIAkJbWVtc2V0KHJlcGxfbnVsbCwgZmFsc2UsIHNpemVvZihyZXBsX251bGwpKTsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlc3BhY2UuYyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL3RhYmxlc3BhY2UuYwppbmRleCAxM2IwZGVlMTQ2OC4uYjkyN2M0 NDVmNDEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlc3BhY2UuYwor KysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZXNwYWNlLmMKQEAgLTMzOSwxMCArMzM5 LDkgQEAgQ3JlYXRlVGFibGVTcGFjZShDcmVhdGVUYWJsZVNwYWNlU3RtdCAqc3RtdCkKIAlu dWxsc1tBbnVtX3BnX3RhYmxlc3BhY2Vfc3BjYWNsIC0gMV0gPSB0cnVlOwogCiAJLyogR2Vu ZXJhdGUgbmV3IHByb3Bvc2VkIHNwY29wdGlvbnMgKHRleHQgYXJyYXkpICovCi0JbmV3T3B0 aW9ucyA9IHRyYW5zZm9ybVJlbE9wdGlvbnMoKERhdHVtKSAwLAotCQkJCQkJCQkJIHN0bXQt Pm9wdGlvbnMsCi0JCQkJCQkJCQkgTlVMTCwgTlVMTCwgZmFsc2UsIGZhbHNlKTsKLQkodm9p ZCkgdGFibGVzcGFjZV9yZWxvcHRpb25zKG5ld09wdGlvbnMsIHRydWUpOworCW5ld09wdGlv bnMgPSBvcHRpb25EZWZMaXN0VG9UZXh0QXJyYXkoZ2V0X3RhYmxlc3BhY2Vfb3B0aW9uc19z cGVjX3NldCgpLAorCQkJCQkJCQkJCSAgc3RtdC0+b3B0aW9ucyk7CisKIAlpZiAobmV3T3B0 aW9ucyAhPSAoRGF0dW0pIDApCiAJCXZhbHVlc1tBbnVtX3BnX3RhYmxlc3BhY2Vfc3Bjb3B0 aW9ucyAtIDFdID0gbmV3T3B0aW9uczsKIAllbHNlCkBAIC0xMDU4LDExICsxMDU3LDEyIEBA IEFsdGVyVGFibGVTcGFjZU9wdGlvbnMoQWx0ZXJUYWJsZVNwYWNlT3B0aW9uc1N0bXQgKnN0 bXQpCiAJLyogR2VuZXJhdGUgbmV3IHByb3Bvc2VkIHNwY29wdGlvbnMgKHRleHQgYXJyYXkp ICovCiAJZGF0dW0gPSBoZWFwX2dldGF0dHIodHVwLCBBbnVtX3BnX3RhYmxlc3BhY2Vfc3Bj b3B0aW9ucywKIAkJCQkJCSBSZWxhdGlvbkdldERlc2NyKHJlbCksICZpc251bGwpOwotCW5l d09wdGlvbnMgPSB0cmFuc2Zvcm1SZWxPcHRpb25zKGlzbnVsbCA/IChEYXR1bSkgMCA6IGRh dHVtLAotCQkJCQkJCQkJIHN0bXQtPm9wdGlvbnMsIE5VTEwsIE5VTEwsIGZhbHNlLAotCQkJ CQkJCQkJIHN0bXQtPmlzUmVzZXQpOwotCSh2b2lkKSB0YWJsZXNwYWNlX3JlbG9wdGlvbnMo bmV3T3B0aW9ucywgdHJ1ZSk7CisJaWYgKGlzbnVsbCkKKwkJZGF0dW0gPSAoRGF0dW0pIDA7 CiAKKwluZXdPcHRpb25zID0gb3B0aW9uc1VwZGF0ZVRleEFycmF5V2l0aERlZkxpc3QoCisJ CQkJCQkJCQkJCQkgIGdldF90YWJsZXNwYWNlX29wdGlvbnNfc3BlY19zZXQoKSwKKwkJCQkJ CQkJCQkJCSAgZGF0dW0sIHN0bXQtPm9wdGlvbnMsIHN0bXQtPmlzUmVzZXQpOwogCS8qIEJ1 aWxkIG5ldyB0dXBsZS4gKi8KIAltZW1zZXQocmVwbF9udWxsLCBmYWxzZSwgc2l6ZW9mKHJl cGxfbnVsbCkpOwogCW1lbXNldChyZXBsX3JlcGwsIGZhbHNlLCBzaXplb2YocmVwbF9yZXBs KSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9mb3JlaWduL2ZvcmVpZ24uYyBiL3NyYy9i YWNrZW5kL2ZvcmVpZ24vZm9yZWlnbi5jCmluZGV4IGZjM2VkZWYyYTg2Li5iM2U2MDdjYTU0 YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZm9yZWlnbi9mb3JlaWduLmMKKysrIGIvc3Jj L2JhY2tlbmQvZm9yZWlnbi9mb3JlaWduLmMKQEAgLTgwLDcgKzgwLDcgQEAgR2V0Rm9yZWln bkRhdGFXcmFwcGVyRXh0ZW5kZWQoT2lkIGZkd2lkLCBiaXRzMTYgZmxhZ3MpCiAJaWYgKGlz bnVsbCkKIAkJZmR3LT5vcHRpb25zID0gTklMOwogCWVsc2UKLQkJZmR3LT5vcHRpb25zID0g dW50cmFuc2Zvcm1SZWxPcHRpb25zKGRhdHVtKTsKKwkJZmR3LT5vcHRpb25zID0gb3B0aW9u c1RleHRBcnJheVRvRGVmTGlzdChkYXR1bSk7CiAKIAlSZWxlYXNlU3lzQ2FjaGUodHApOwog CkBAIC0xNjcsNyArMTY3LDcgQEAgR2V0Rm9yZWlnblNlcnZlckV4dGVuZGVkKE9pZCBzZXJ2 ZXJpZCwgYml0czE2IGZsYWdzKQogCWlmIChpc251bGwpCiAJCXNlcnZlci0+b3B0aW9ucyA9 IE5JTDsKIAllbHNlCi0JCXNlcnZlci0+b3B0aW9ucyA9IHVudHJhbnNmb3JtUmVsT3B0aW9u cyhkYXR1bSk7CisJCXNlcnZlci0+b3B0aW9ucyA9IG9wdGlvbnNUZXh0QXJyYXlUb0RlZkxp c3QoZGF0dW0pOwogCiAJUmVsZWFzZVN5c0NhY2hlKHRwKTsKIApAQCAtMjM5LDcgKzIzOSw3 IEBAIEdldFVzZXJNYXBwaW5nKE9pZCB1c2VyaWQsIE9pZCBzZXJ2ZXJpZCkKIAlpZiAoaXNu dWxsKQogCQl1bS0+b3B0aW9ucyA9IE5JTDsKIAllbHNlCi0JCXVtLT5vcHRpb25zID0gdW50 cmFuc2Zvcm1SZWxPcHRpb25zKGRhdHVtKTsKKwkJdW0tPm9wdGlvbnMgPSBvcHRpb25zVGV4 dEFycmF5VG9EZWZMaXN0KGRhdHVtKTsKIAogCVJlbGVhc2VTeXNDYWNoZSh0cCk7CiAKQEAg LTI3Niw3ICsyNzYsNyBAQCBHZXRGb3JlaWduVGFibGUoT2lkIHJlbGlkKQogCWlmIChpc251 bGwpCiAJCWZ0LT5vcHRpb25zID0gTklMOwogCWVsc2UKLQkJZnQtPm9wdGlvbnMgPSB1bnRy YW5zZm9ybVJlbE9wdGlvbnMoZGF0dW0pOworCQlmdC0+b3B0aW9ucyA9IG9wdGlvbnNUZXh0 QXJyYXlUb0RlZkxpc3QoZGF0dW0pOwogCiAJUmVsZWFzZVN5c0NhY2hlKHRwKTsKIApAQCAt MzA5LDcgKzMwOSw3IEBAIEdldEZvcmVpZ25Db2x1bW5PcHRpb25zKE9pZCByZWxpZCwgQXR0 ck51bWJlciBhdHRudW0pCiAJaWYgKGlzbnVsbCkKIAkJb3B0aW9ucyA9IE5JTDsKIAllbHNl Ci0JCW9wdGlvbnMgPSB1bnRyYW5zZm9ybVJlbE9wdGlvbnMoZGF0dW0pOworCQlvcHRpb25z ID0gb3B0aW9uc1RleHRBcnJheVRvRGVmTGlzdChkYXR1bSk7CiAKIAlSZWxlYXNlU3lzQ2Fj aGUodHApOwogCkBAIC01MTcsNyArNTE3LDcgQEAgcGdfb3B0aW9uc190b190YWJsZShQR19G VU5DVElPTl9BUkdTKQogCUxpc3QJICAgKm9wdGlvbnM7CiAJUmV0dXJuU2V0SW5mbyAqcnNp bmZvID0gKFJldHVyblNldEluZm8gKikgZmNpbmZvLT5yZXN1bHRpbmZvOwogCi0Jb3B0aW9u cyA9IHVudHJhbnNmb3JtUmVsT3B0aW9ucyhhcnJheSk7CisJb3B0aW9ucyA9IG9wdGlvbnNU ZXh0QXJyYXlUb0RlZkxpc3QoYXJyYXkpOwogCXJzaW5mbyA9IChSZXR1cm5TZXRJbmZvICop IGZjaW5mby0+cmVzdWx0aW5mbzsKIAogCS8qIHByZXBhcmUgdGhlIHJlc3VsdCBzZXQgKi8K QEAgLTYxNSw3ICs2MTUsNyBAQCBpc19jb25uaW5mb19vcHRpb24oY29uc3QgY2hhciAqb3B0 aW9uLCBPaWQgY29udGV4dCkKIERhdHVtCiBwb3N0Z3Jlc3FsX2Zkd192YWxpZGF0b3IoUEdf RlVOQ1RJT05fQVJHUykKIHsKLQlMaXN0CSAgICpvcHRpb25zX2xpc3QgPSB1bnRyYW5zZm9y bVJlbE9wdGlvbnMoUEdfR0VUQVJHX0RBVFVNKDApKTsKKwlMaXN0CSAgICpvcHRpb25zX2xp c3QgPSBvcHRpb25zVGV4dEFycmF5VG9EZWZMaXN0KFBHX0dFVEFSR19EQVRVTSgwKSk7CiAJ T2lkCQkJY2F0YWxvZyA9IFBHX0dFVEFSR19PSUQoMSk7CiAKIAlMaXN0Q2VsbCAgICpjZWxs OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3V0aWxjbWQuYyBiL3Ny Yy9iYWNrZW5kL3BhcnNlci9wYXJzZV91dGlsY21kLmMKaW5kZXggY2YwZDQzMmFiMTMuLjU3 NTQxZmVhZTc0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfdXRpbGNt ZC5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV91dGlsY21kLmMKQEAgLTE4ODQs NyArMTg4NCw3IEBAIGdlbmVyYXRlQ2xvbmVkSW5kZXhTdG10KFJhbmdlVmFyICpoZWFwUmVs LCBSZWxhdGlvbiBzb3VyY2VfaWR4LAogCQkvKiBBZGQgdGhlIG9wZXJhdG9yIGNsYXNzIG5h bWUsIGlmIG5vbi1kZWZhdWx0ICovCiAJCWlwYXJhbS0+b3BjbGFzcyA9IGdldF9vcGNsYXNz KGluZGNsYXNzLT52YWx1ZXNba2V5bm9dLCBrZXljb2x0eXBlKTsKIAkJaXBhcmFtLT5vcGNs YXNzb3B0cyA9Ci0JCQl1bnRyYW5zZm9ybVJlbE9wdGlvbnMoZ2V0X2F0dG9wdGlvbnMoc291 cmNlX3JlbGlkLCBrZXlubyArIDEpKTsKKwkJCW9wdGlvbnNUZXh0QXJyYXlUb0RlZkxpc3Qo Z2V0X2F0dG9wdGlvbnMoc291cmNlX3JlbGlkLCBrZXlubyArIDEpKTsKIAogCQlpcGFyYW0t Pm9yZGVyaW5nID0gU09SVEJZX0RFRkFVTFQ7CiAJCWlwYXJhbS0+bnVsbHNfb3JkZXJpbmcg PSBTT1JUQllfTlVMTFNfREVGQVVMVDsKQEAgLTE5NDgsNyArMTk0OCw3IEBAIGdlbmVyYXRl Q2xvbmVkSW5kZXhTdG10KFJhbmdlVmFyICpoZWFwUmVsLCBSZWxhdGlvbiBzb3VyY2VfaWR4 LAogCWRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKFJFTE9JRCwgaHRfaWR4cmVsLAogCQkJCQkJ CUFudW1fcGdfY2xhc3NfcmVsb3B0aW9ucywgJmlzbnVsbCk7CiAJaWYgKCFpc251bGwpCi0J CWluZGV4LT5vcHRpb25zID0gdW50cmFuc2Zvcm1SZWxPcHRpb25zKGRhdHVtKTsKKwkJaW5k ZXgtPm9wdGlvbnMgPSBvcHRpb25zVGV4dEFycmF5VG9EZWZMaXN0KGRhdHVtKTsKIAogCS8q IElmIGl0J3MgYSBwYXJ0aWFsIGluZGV4LCBkZWNvbXBpbGUgYW5kIGFwcGVuZCB0aGUgcHJl ZGljYXRlICovCiAJZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoSU5ERVhSRUxJRCwgaHRfaWR4 LApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMgYi9zcmMvYmFja2Vu ZC90Y29wL3V0aWxpdHkuYwppbmRleCAzNjZhMjdhZThlZC4uN2EzYTJmZDU0ZTggMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCisrKyBiL3NyYy9iYWNrZW5kL3Rj b3AvdXRpbGl0eS5jCkBAIC0xMTYzLDYgKzExNjMsNyBAQCBQcm9jZXNzVXRpbGl0eVNsb3co UGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCQkJCUNyZWF0ZVN0bXQgKmNzdG10ID0gKENyZWF0 ZVN0bXQgKikgc3RtdDsKIAkJCQkJCQlEYXR1bQkJdG9hc3Rfb3B0aW9uczsKIAkJCQkJCQlz dGF0aWMgY2hhciAqdmFsaWRuc3BzW10gPSBIRUFQX1JFTE9QVF9OQU1FU1BBQ0VTOworCQkJ CQkJCUxpc3QJICAgKnRvYXN0RGVmTGlzdDsKIAogCQkJCQkJCS8qIFJlbWVtYmVyIHRyYW5z Zm9ybWVkIFJhbmdlVmFyIGZvciBMSUtFICovCiAJCQkJCQkJdGFibGVfcnYgPSBjc3RtdC0+ cmVsYXRpb247CkBAIC0xMTg2LDE1ICsxMTg3LDE2IEBAIFByb2Nlc3NVdGlsaXR5U2xvdyhQ YXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJCQkJICogcGFyc2UgYW5kIHZhbGlkYXRlIHJlbG9w dGlvbnMgZm9yIHRoZSB0b2FzdAogCQkJCQkJCSAqIHRhYmxlCiAJCQkJCQkJICovCi0JCQkJ CQkJdG9hc3Rfb3B0aW9ucyA9IHRyYW5zZm9ybVJlbE9wdGlvbnMoKERhdHVtKSAwLAotCQkJ CQkJCQkJCQkJCQkJCWNzdG10LT5vcHRpb25zLAotCQkJCQkJCQkJCQkJCQkJCSJ0b2FzdCIs Ci0JCQkJCQkJCQkJCQkJCQkJdmFsaWRuc3BzLAotCQkJCQkJCQkJCQkJCQkJCXRydWUsCi0J CQkJCQkJCQkJCQkJCQkJZmFsc2UpOwotCQkJCQkJCSh2b2lkKSBoZWFwX3JlbG9wdGlvbnMo UkVMS0lORF9UT0FTVFZBTFVFLAotCQkJCQkJCQkJCQkJICAgdG9hc3Rfb3B0aW9ucywKLQkJ CQkJCQkJCQkJCSAgIHRydWUpOworCisJCQkJCQkJb3B0aW9uc0RlZkxpc3RWYWxkYXRlTmFt ZXNwYWNlcygKKwkJCQkJCQkJCQkJCSgoQ3JlYXRlU3RtdCAqKSBzdG10KS0+b3B0aW9ucywK KwkJCQkJCQkJCQkJCXZhbGlkbnNwcyk7CisKKwkJCQkJCQl0b2FzdERlZkxpc3QgPSBvcHRp b25zRGVmTGlzdEZpbHRlck5hbWVzcGFjZXMoCisJCQkJCQkJCQkgICgoQ3JlYXRlU3RtdCAq KSBzdG10KS0+b3B0aW9ucywgInRvYXN0Iik7CisKKwkJCQkJCQl0b2FzdF9vcHRpb25zID0g b3B0aW9uRGVmTGlzdFRvVGV4dEFycmF5KAorCQkJCQkJCQkJIGdldF90b2FzdF9yZWxvcHRf c3BlY19zZXQoKSwgdG9hc3REZWZMaXN0KTsKIAogCQkJCQkJCU5ld1JlbGF0aW9uQ3JlYXRl VG9hc3RUYWJsZShhZGRyZXNzLm9iamVjdElkLAogCQkJCQkJCQkJCQkJCQl0b2FzdF9vcHRp b25zKTsKQEAgLTEzMDMsOSArMTMwNSwxMiBAQCBQcm9jZXNzVXRpbGl0eVNsb3coUGFyc2VT dGF0ZSAqcHN0YXRlLAogCQkJCQkgKiBsb2NrIG9uIChmb3IgZXhhbXBsZSkgYSByZWxhdGlv biBvbiB3aGljaCB3ZSBoYXZlIG5vCiAJCQkJCSAqIHBlcm1pc3Npb25zLgogCQkJCQkgKi8K LQkJCQkJbG9ja21vZGUgPSBBbHRlclRhYmxlR2V0TG9ja0xldmVsKGF0c3RtdC0+Y21kcyk7 Ci0JCQkJCXJlbGlkID0gQWx0ZXJUYWJsZUxvb2t1cFJlbGF0aW9uKGF0c3RtdCwgbG9ja21v ZGUpOwotCisJCQkJCXJlbGlkID0gQWx0ZXJUYWJsZUxvb2t1cFJlbGF0aW9uKGF0c3RtdCwg QWNjZXNzU2hhcmVMb2NrKTsKKwkJCQkJaWYgKE9pZElzVmFsaWQocmVsaWQpKQorCQkJCQl7 CisJCQkJCQlsb2NrbW9kZSA9IEFsdGVyVGFibGVHZXRMb2NrTGV2ZWwocmVsaWQsIGF0c3Rt dC0+Y21kcyk7CisJCQkJCQlyZWxpZCA9IEFsdGVyVGFibGVMb29rdXBSZWxhdGlvbihhdHN0 bXQsIGxvY2ttb2RlKTsKKwkJCQkJfQogCQkJCQlpZiAoT2lkSXNWYWxpZChyZWxpZCkpCiAJ CQkJCXsKIAkJCQkJCUFsdGVyVGFibGVVdGlsaXR5Q29udGV4dCBhdGNvbnRleHQ7CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9hdHRvcHRjYWNoZS5jIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvY2FjaGUvYXR0b3B0Y2FjaGUuYwppbmRleCA2NzY5ZDQ3NjViMS4uYTQz ZTU1MTRlN2MgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2F0dG9wdGNh Y2hlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvYXR0b3B0Y2FjaGUuYwpAQCAt MTYsNiArMTYsNyBAQAogICovCiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAorI2luY2x1ZGUg ImFjY2Vzcy9vcHRpb25zLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3JlbG9wdGlvbnMuaCIKICNp bmNsdWRlICJ1dGlscy9hdHRvcHRjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL2NhdGNhY2hl LmgiCkBAIC0xNDksNyArMTUwLDggQEAgZ2V0X2F0dHJpYnV0ZV9vcHRpb25zKE9pZCBhdHRy ZWxpZCwgaW50IGF0dG51bSkKIAkJCQlvcHRzID0gTlVMTDsKIAkJCWVsc2UKIAkJCXsKLQkJ CQlieXRlYQkgICAqYnl0ZWFfb3B0cyA9IGF0dHJpYnV0ZV9yZWxvcHRpb25zKGRhdHVtLCBm YWxzZSk7CisJCQkJYnl0ZWEJICAgKmJ5dGVhX29wdHMgPSBvcHRpb25zVGV4dEFycmF5VG9C eXRlYSgKKwkJCQkJCQkJIGdldF9hdHRyaWJ1dGVfb3B0aW9uc19zcGVjX3NldCgpLCBkYXR1 bSwgMCk7CiAKIAkJCQlvcHRzID0gTWVtb3J5Q29udGV4dEFsbG9jKENhY2hlTWVtb3J5Q29u dGV4dCwKIAkJCQkJCQkJCQkgIFZBUlNJWkUoYnl0ZWFfb3B0cykpOwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxz L2NhY2hlL3JlbGNhY2hlLmMKaW5kZXggYjNmYWNjYmVmZTUuLjA4NzJhZGRhYmNmIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jCisrKyBiL3NyYy9i YWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKQEAgLTQ2NCw3ICs0NjQsNyBAQCBzdGF0 aWMgdm9pZAogUmVsYXRpb25QYXJzZVJlbE9wdGlvbnMoUmVsYXRpb24gcmVsYXRpb24sIEhl YXBUdXBsZSB0dXBsZSkKIHsKIAlieXRlYQkgICAqb3B0aW9uczsKLQlhbW9wdGlvbnNfZnVu Y3Rpb24gYW1vcHRzZm47CisJYW1yZWxvcHRzcGVjc2V0X2Z1bmN0aW9uIGFtb3B0c3BlY3Nl dGZuOwogCiAJcmVsYXRpb24tPnJkX29wdGlvbnMgPSBOVUxMOwogCkBAIC00NzksMTEgKzQ3 OSwxMSBAQCBSZWxhdGlvblBhcnNlUmVsT3B0aW9ucyhSZWxhdGlvbiByZWxhdGlvbiwgSGVh cFR1cGxlIHR1cGxlKQogCQljYXNlIFJFTEtJTkRfVklFVzoKIAkJY2FzZSBSRUxLSU5EX01B VFZJRVc6CiAJCWNhc2UgUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRToKLQkJCWFtb3B0c2Zu ID0gTlVMTDsKKwkJCWFtb3B0c3BlY3NldGZuID0gTlVMTDsKIAkJCWJyZWFrOwogCQljYXNl IFJFTEtJTkRfSU5ERVg6CiAJCWNhc2UgUkVMS0lORF9QQVJUSVRJT05FRF9JTkRFWDoKLQkJ CWFtb3B0c2ZuID0gcmVsYXRpb24tPnJkX2luZGFtLT5hbW9wdGlvbnM7CisJCQlhbW9wdHNw ZWNzZXRmbiA9IHJlbGF0aW9uLT5yZF9pbmRhbS0+YW1yZWxvcHRzcGVjc2V0OwogCQkJYnJl YWs7CiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm47CkBAIC00OTQsNyArNDk0LDcgQEAgUmVsYXRp b25QYXJzZVJlbE9wdGlvbnMoUmVsYXRpb24gcmVsYXRpb24sIEhlYXBUdXBsZSB0dXBsZSkK IAkgKiB3ZSBtaWdodCBub3QgaGF2ZSBhbnkgb3RoZXIgZm9yIHBnX2NsYXNzIHlldCAoY29u c2lkZXIgZXhlY3V0aW5nIHRoaXMKIAkgKiBjb2RlIGZvciBwZ19jbGFzcyBpdHNlbGYpCiAJ ICovCi0Jb3B0aW9ucyA9IGV4dHJhY3RSZWxPcHRpb25zKHR1cGxlLCBHZXRQZ0NsYXNzRGVz Y3JpcHRvcigpLCBhbW9wdHNmbik7CisJb3B0aW9ucyA9IGV4dHJhY3RSZWxPcHRpb25zKHR1 cGxlLCBHZXRQZ0NsYXNzRGVzY3JpcHRvcigpLCBhbW9wdHNwZWNzZXRmbik7CiAKIAkvKgog CSAqIENvcHkgcGFyc2VkIGRhdGEgaW50byBDYWNoZU1lbW9yeUNvbnRleHQuICBUbyBndWFy ZCBhZ2FpbnN0IHRoZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvc3Bj Y2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3NwY2NhY2hlLmMKaW5kZXggMTM2 ZmQ3MzdkMzcuLmZmYzViYmVlNWI2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9j YWNoZS9zcGNjYWNoZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3NwY2NhY2hl LmMKQEAgLTE0OSw3ICsxNDksOCBAQCBnZXRfdGFibGVzcGFjZShPaWQgc3BjaWQpCiAJCQlv cHRzID0gTlVMTDsKIAkJZWxzZQogCQl7Ci0JCQlieXRlYQkgICAqYnl0ZWFfb3B0cyA9IHRh Ymxlc3BhY2VfcmVsb3B0aW9ucyhkYXR1bSwgZmFsc2UpOworCQkJYnl0ZWEJICAgKmJ5dGVh X29wdHMgPSBvcHRpb25zVGV4dEFycmF5VG9CeXRlYSgKKwkJCQkJCQkJCQkJCQkJCSBnZXRf dGFibGVzcGFjZV9vcHRpb25zX3NwZWNfc2V0KCksIGRhdHVtLCAwKTsKIAogCQkJb3B0cyA9 IE1lbW9yeUNvbnRleHRBbGxvYyhDYWNoZU1lbW9yeUNvbnRleHQsIFZBUlNJWkUoYnl0ZWFf b3B0cykpOwogCQkJbWVtY3B5KG9wdHMsIGJ5dGVhX29wdHMsIFZBUlNJWkUoYnl0ZWFfb3B0 cykpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3N0cmVhbXV0aWwuYyBi L3NyYy9iaW4vcGdfYmFzZWJhY2t1cC9zdHJlYW11dGlsLmMKaW5kZXggZGJkMDhhYjE3MjIu LjU5ZGZhOGNjMDU0IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvc3RyZWFt dXRpbC5jCisrKyBiL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC9zdHJlYW11dGlsLmMKQEAgLTc2 Myw3ICs3NjMsNyBAQCBBcHBlbmRTdHJpbmdDb21tYW5kT3B0aW9uKFBRRXhwQnVmZmVyIGJ1 ZiwgYm9vbCB1c2VfbmV3X29wdGlvbl9zeW50YXgsCiB7CiAJQXBwZW5kUGxhaW5Db21tYW5k T3B0aW9uKGJ1ZiwgdXNlX25ld19vcHRpb25fc3ludGF4LCBvcHRpb25fbmFtZSk7CiAKLQlp ZiAob3B0aW9uX3ZhbHVlICE9IE5VTEwpCisJaWYgKG9wdGlvbl92YWx1ZSAhPU5VTEwpCiAJ ewogCQlzaXplX3QJCWxlbmd0aCA9IHN0cmxlbihvcHRpb25fdmFsdWUpOwogCQljaGFyCSAg ICplc2NhcGVkX3ZhbHVlID0gcGFsbG9jKDEgKyAyICogbGVuZ3RoKTsKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBp LmgKaW5kZXggMjQ0NDU5NTg3ZmMuLjY2YTRlNWQ2ZTgwIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9hY2Nlc3MvYW1hcGkuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaApA QCAtMTM5LDEwICsxMzksNiBAQCB0eXBlZGVmIHZvaWQgKCphbWNvc3Rlc3RpbWF0ZV9mdW5j dGlvbikgKHN0cnVjdCBQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCQkgZG91YmxlICpp bmRleENvcnJlbGF0aW9uLAogCQkJCQkJCQkJCSBkb3VibGUgKmluZGV4UGFnZXMpOwogCi0v KiBwYXJzZSBpbmRleCByZWxvcHRpb25zICovCi10eXBlZGVmIGJ5dGVhICooKmFtb3B0aW9u c19mdW5jdGlvbikgKERhdHVtIHJlbG9wdGlvbnMsCi0JCQkJCQkJCQkgIGJvb2wgdmFsaWRh dGUpOwotCiAvKiByZXBvcnQgQU0sIGluZGV4LCBvciBpbmRleCBjb2x1bW4gcHJvcGVydHkg Ki8KIHR5cGVkZWYgYm9vbCAoKmFtcHJvcGVydHlfZnVuY3Rpb24pIChPaWQgaW5kZXhfb2lk LCBpbnQgYXR0bm8sCiAJCQkJCQkJCQkgSW5kZXhBTVByb3BlcnR5IHByb3AsIGNvbnN0IGNo YXIgKnByb3BuYW1lLApAQCAtMTg5LDYgKzE4NSw5IEBAIHR5cGVkZWYgdm9pZCAoKmFtbWFy a3Bvc19mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiAvKiByZXN0b3JlIG1hcmtl ZCBzY2FuIHBvc2l0aW9uICovCiB0eXBlZGVmIHZvaWQgKCphbXJlc3RycG9zX2Z1bmN0aW9u KSAoSW5kZXhTY2FuRGVzYyBzY2FuKTsKIAorLyogZ2V0IGNhdGFsb2cgb2YgcmVsb3B0aW9u cyBkZWZpbml0aW9ucyAqLwordHlwZWRlZiB2b2lkICooKmFtcmVsb3B0c3BlY3NldF9mdW5j dGlvbikgKCk7CisKIC8qCiAgKiBDYWxsYmFjayBmdW5jdGlvbiBzaWduYXR1cmVzIC0gZm9y IHBhcmFsbGVsIGluZGV4IHNjYW5zLgogICovCkBAIC0yNjksNyArMjY4LDYgQEAgdHlwZWRl ZiBzdHJ1Y3QgSW5kZXhBbVJvdXRpbmUKIAlhbXZhY3V1bWNsZWFudXBfZnVuY3Rpb24gYW12 YWN1dW1jbGVhbnVwOwogCWFtY2FucmV0dXJuX2Z1bmN0aW9uIGFtY2FucmV0dXJuOwkvKiBj YW4gYmUgTlVMTCAqLwogCWFtY29zdGVzdGltYXRlX2Z1bmN0aW9uIGFtY29zdGVzdGltYXRl OwotCWFtb3B0aW9uc19mdW5jdGlvbiBhbW9wdGlvbnM7CiAJYW1wcm9wZXJ0eV9mdW5jdGlv biBhbXByb3BlcnR5OyAvKiBjYW4gYmUgTlVMTCAqLwogCWFtYnVpbGRwaGFzZW5hbWVfZnVu Y3Rpb24gYW1idWlsZHBoYXNlbmFtZTsgLyogY2FuIGJlIE5VTEwgKi8KIAlhbXZhbGlkYXRl X2Z1bmN0aW9uIGFtdmFsaWRhdGU7CkBAIC0yODEsNiArMjc5LDcgQEAgdHlwZWRlZiBzdHJ1 Y3QgSW5kZXhBbVJvdXRpbmUKIAlhbWVuZHNjYW5fZnVuY3Rpb24gYW1lbmRzY2FuOwogCWFt bWFya3Bvc19mdW5jdGlvbiBhbW1hcmtwb3M7CS8qIGNhbiBiZSBOVUxMICovCiAJYW1yZXN0 cnBvc19mdW5jdGlvbiBhbXJlc3RycG9zOyAvKiBjYW4gYmUgTlVMTCAqLworCWFtcmVsb3B0 c3BlY3NldF9mdW5jdGlvbiBhbXJlbG9wdHNwZWNzZXQ7CS8qIGNhbiBiZSBOVUxMICovCiAK IAkvKiBpbnRlcmZhY2UgZnVuY3Rpb25zIHRvIHN1cHBvcnQgcGFyYWxsZWwgaW5kZXggc2Nh bnMgKi8KIAlhbWVzdGltYXRlcGFyYWxsZWxzY2FuX2Z1bmN0aW9uIGFtZXN0aW1hdGVwYXJh bGxlbHNjYW47IC8qIGNhbiBiZSBOVUxMICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9h Y2Nlc3MvYnJpbi5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2JyaW4uaAppbmRleCBlZDY2ZjFi M2Q1MS4uNTVjZTkzMGUwZWQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9icmlu LmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2JyaW4uaApAQCAtMzYsNiArMzYsOCBAQCB0 eXBlZGVmIHN0cnVjdCBCcmluU3RhdHNEYXRhCiAKIAogI2RlZmluZSBCUklOX0RFRkFVTFRf UEFHRVNfUEVSX1JBTkdFCTEyOAorI2RlZmluZSBCUklOX01JTl9QQUdFU19QRVJfUkFOR0UJ CTEKKyNkZWZpbmUgQlJJTl9NQVhfUEFHRVNfUEVSX1JBTkdFCQkxMzEwNzIKICNkZWZpbmUg QnJpbkdldFBhZ2VzUGVyUmFuZ2UocmVsYXRpb24pIFwKIAkoQXNzZXJ0TWFjcm8ocmVsYXRp b24tPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX0lOREVYICYmIFwKIAkJCQkgcmVsYXRp b24tPnJkX3JlbC0+cmVsYW0gPT0gQlJJTl9BTV9PSUQpLCBcCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9hY2Nlc3MvYnJpbl9pbnRlcm5hbC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2Jy aW5faW50ZXJuYWwuaAppbmRleCBlZDIzMWUyMDhlYi4uNzcwODkzMGFiYzEgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9icmluX2ludGVybmFsLmgKKysrIGIvc3JjL2luY2x1 ZGUvYWNjZXNzL2JyaW5faW50ZXJuYWwuaApAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUg ImFjY2Vzcy9hbWFwaS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmcGFnZS5oIgogI2luY2x1 ZGUgInV0aWxzL3R5cGNhY2hlLmgiCisjaW5jbHVkZSAiYWNjZXNzL29wdGlvbnMuaCIKIAog CiAvKgpAQCAtMTA5LDYgKzExMCw3IEBAIGV4dGVybiBJbmRleEJ1bGtEZWxldGVSZXN1bHQg KmJyaW5idWxrZGVsZXRlKEluZGV4VmFjdXVtSW5mbyAqaW5mbywKIGV4dGVybiBJbmRleEJ1 bGtEZWxldGVSZXN1bHQgKmJyaW52YWN1dW1jbGVhbnVwKEluZGV4VmFjdXVtSW5mbyAqaW5m bywKIAkJCQkJCQkJCQkJCUluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqc3RhdHMpOwogZXh0ZXJu IGJ5dGVhICpicmlub3B0aW9ucyhEYXR1bSByZWxvcHRpb25zLCBib29sIHZhbGlkYXRlKTsK K2V4dGVybiB2b2lkICpicmluZ2V0cmVsb3B0c3BlY3NldCh2b2lkKTsKIAogLyogYnJpbl92 YWxpZGF0ZS5jICovCiBleHRlcm4gYm9vbCBicmludmFsaWRhdGUoT2lkIG9wY2xhc3NvaWQp OwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2dpbl9wcml2YXRlLmggYi9zcmMv aW5jbHVkZS9hY2Nlc3MvZ2luX3ByaXZhdGUuaAppbmRleCBkMWRmOTgyN2YzOS4uYzhiNmQw NjcyNWIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9naW5fcHJpdmF0ZS5oCisr KyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9naW5fcHJpdmF0ZS5oCkBAIC0xMDgsNiArMTA4LDcg QEAgZXh0ZXJuIERhdHVtICpnaW5FeHRyYWN0RW50cmllcyhHaW5TdGF0ZSAqZ2luc3RhdGUs IE9mZnNldE51bWJlciBhdHRudW0sCiBleHRlcm4gT2Zmc2V0TnVtYmVyIGdpbnR1cGxlX2dl dF9hdHRybnVtKEdpblN0YXRlICpnaW5zdGF0ZSwgSW5kZXhUdXBsZSB0dXBsZSk7CiBleHRl cm4gRGF0dW0gZ2ludHVwbGVfZ2V0X2tleShHaW5TdGF0ZSAqZ2luc3RhdGUsIEluZGV4VHVw bGUgdHVwbGUsCiAJCQkJCQkJICBHaW5OdWxsQ2F0ZWdvcnkgKmNhdGVnb3J5KTsKK2V4dGVy biB2b2lkICpnaW5nZXRyZWxvcHRzcGVjc2V0KHZvaWQpOwogCiAvKiBnaW5pbnNlcnQuYyAq LwogZXh0ZXJuIEluZGV4QnVpbGRSZXN1bHQgKmdpbmJ1aWxkKFJlbGF0aW9uIGhlYXAsIFJl bGF0aW9uIGluZGV4LApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2dpc3RfcHJp dmF0ZS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dpc3RfcHJpdmF0ZS5oCmluZGV4IDgyZWI3 YjRiZDhmLi4wNzc1MjUzMDU4OSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2dp c3RfcHJpdmF0ZS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9naXN0X3ByaXZhdGUuaApA QCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgInN0b3JhZ2UvYnVmZmlsZS5oIgogI2luY2x1 ZGUgInV0aWxzL2hzZWFyY2guaCIKICNpbmNsdWRlICJhY2Nlc3MvZ2VuYW0uaCIKKyNpbmNs dWRlICJhY2Nlc3Mvb3B0aW9ucy5oIgogCiAvKgogICogTWF4aW11bSBudW1iZXIgb2YgImhh bHZlcyIgYSBwYWdlIGNhbiBiZSBzcGxpdCBpbnRvIGluIG9uZSBvcGVyYXRpb24uCkBAIC0z ODgsNiArMzg5LDcgQEAgdHlwZWRlZiBlbnVtIEdpc3RPcHRCdWZmZXJpbmdNb2RlCiAJR0lT VF9PUFRJT05fQlVGRkVSSU5HX09GRiwKIH0gR2lzdE9wdEJ1ZmZlcmluZ01vZGU7CiAKKwog LyoKICAqIFN0b3JhZ2UgdHlwZSBmb3IgR2lTVCdzIHJlbG9wdGlvbnMKICAqLwpAQCAtNDc5 LDcgKzQ4MSw3IEBAIGV4dGVybiB2b2lkIGdpc3RhZGp1c3RtZW1iZXJzKE9pZCBvcGZhbWls eW9pZCwKICNkZWZpbmUgR0lTVF9NSU5fRklMTEZBQ1RPUgkJCTEwCiAjZGVmaW5lIEdJU1Rf REVGQVVMVF9GSUxMRkFDVE9SCQk5MAogCi1leHRlcm4gYnl0ZWEgKmdpc3RvcHRpb25zKERh dHVtIHJlbG9wdGlvbnMsIGJvb2wgdmFsaWRhdGUpOworZXh0ZXJuIHZvaWQgKmdpc3RnZXRy ZWxvcHRzcGVjc2V0KHZvaWQpOwogZXh0ZXJuIGJvb2wgZ2lzdHByb3BlcnR5KE9pZCBpbmRl eF9vaWQsIGludCBhdHRubywKIAkJCQkJCSBJbmRleEFNUHJvcGVydHkgcHJvcCwgY29uc3Qg Y2hhciAqcHJvcG5hbWUsCiAJCQkJCQkgYm9vbCAqcmVzLCBib29sICppc251bGwpOwpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hhc2guaCBiL3NyYy9pbmNsdWRlL2FjY2Vz cy9oYXNoLmgKaW5kZXggNDgwNmNlNmM0ZWEuLjJiYWY1ZDU5N2JiIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9hY2Nlc3MvaGFzaC5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oYXNo LmgKQEAgLTM4MCw3ICszODAsNiBAQCBleHRlcm4gSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpo YXNoYnVsa2RlbGV0ZShJbmRleFZhY3V1bUluZm8gKmluZm8sCiAJCQkJCQkJCQkJCSB2b2lk ICpjYWxsYmFja19zdGF0ZSk7CiBleHRlcm4gSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpoYXNo dmFjdXVtY2xlYW51cChJbmRleFZhY3V1bUluZm8gKmluZm8sCiAJCQkJCQkJCQkJCQlJbmRl eEJ1bGtEZWxldGVSZXN1bHQgKnN0YXRzKTsKLWV4dGVybiBieXRlYSAqaGFzaG9wdGlvbnMo RGF0dW0gcmVsb3B0aW9ucywgYm9vbCB2YWxpZGF0ZSk7CiBleHRlcm4gYm9vbCBoYXNodmFs aWRhdGUoT2lkIG9wY2xhc3NvaWQpOwogZXh0ZXJuIHZvaWQgaGFzaGFkanVzdG1lbWJlcnMo T2lkIG9wZmFtaWx5b2lkLAogCQkJCQkJCSAgT2lkIG9wY2xhc3NvaWQsCkBAIC00NzQsNiAr NDczLDcgQEAgZXh0ZXJuIEJsb2NrTnVtYmVyIF9oYXNoX2dldF9uZXdibG9ja19mcm9tX29s ZGJ1Y2tldChSZWxhdGlvbiByZWwsIEJ1Y2tldCBvbGRfYnUKIGV4dGVybiBCdWNrZXQgX2hh c2hfZ2V0X25ld2J1Y2tldF9mcm9tX29sZGJ1Y2tldChSZWxhdGlvbiByZWwsIEJ1Y2tldCBv bGRfYnVja2V0LAogCQkJCQkJCQkJCQkJIHVpbnQzMiBsb3dtYXNrLCB1aW50MzIgbWF4YnVj a2V0KTsKIGV4dGVybiB2b2lkIF9oYXNoX2tpbGxfaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2Fu KTsKK2V4dGVybiB2b2lkICpoYXNoZ2V0cmVsb3B0c3BlY3NldCh2b2lkKTsKIAogLyogaGFz aC5jICovCiBleHRlcm4gdm9pZCBoYXNoYnVja2V0Y2xlYW51cChSZWxhdGlvbiByZWwsIEJ1 Y2tldCBjdXJfYnVja2V0LApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL25idHJl ZS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL25idHJlZS5oCmluZGV4IDdiZmJmMzA4NmM4Li5m YzQwZTUwNTE1MyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL25idHJlZS5oCisr KyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaApAQCAtMTI2Nyw3ICsxMjY3LDcgQEAg ZXh0ZXJuIHZvaWQgX2J0X2VuZF92YWN1dW0oUmVsYXRpb24gcmVsKTsKIGV4dGVybiB2b2lk IF9idF9lbmRfdmFjdXVtX2NhbGxiYWNrKGludCBjb2RlLCBEYXR1bSBhcmcpOwogZXh0ZXJu IFNpemUgQlRyZWVTaG1lbVNpemUodm9pZCk7CiBleHRlcm4gdm9pZCBCVHJlZVNobWVtSW5p dCh2b2lkKTsKLWV4dGVybiBieXRlYSAqYnRvcHRpb25zKERhdHVtIHJlbG9wdGlvbnMsIGJv b2wgdmFsaWRhdGUpOworZXh0ZXJuIHZvaWQgKmJ0Z2V0cmVsb3B0c3BlY3NldCh2b2lkKTsK IGV4dGVybiBib29sIGJ0cHJvcGVydHkoT2lkIGluZGV4X29pZCwgaW50IGF0dG5vLAogCQkJ CQkgICBJbmRleEFNUHJvcGVydHkgcHJvcCwgY29uc3QgY2hhciAqcHJvcG5hbWUsCiAJCQkJ CSAgIGJvb2wgKnJlcywgYm9vbCAqaXNudWxsKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L2FjY2Vzcy9vcHRpb25zLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3Mvb3B0aW9ucy5oCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kYzU2NTRkMzFjOQotLS0gL2Rl di9udWxsCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9vcHRpb25zLmgKQEAgLTAsMCArMSwy NjIgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIG9wdGlvbnMuaAorICoJICBB biB1bmlmb3JtLCBjb250ZXh0LWZyZWUgQVBJIGZvciBwcm9jZXNzaW5nIG5hbWU9dmFsdWUg b3B0aW9ucy4gVXNlZAorICoJICB0byBwcm9jZXNzIHJlbGF0aW9uIG9wdGlvbnMgKHJlbG9w dGlvbnMpLCBhdHRyaWJ1dGUgb3B0aW9ucywgb3BjbGFzcworICoJICBvcHRpb25zLCBldGMu CisgKgorICogTm90ZTogdGhlIGZ1bmN0aW9ucyBkZWFsaW5nIHdpdGggdGV4dC1hcnJheSBv cHRpb25zIHZhbHVlcyBkZWNsYXJlCisgKiB0aGVtIGFzIERhdHVtLCBub3QgQXJyYXlUeXBl ICosIHRvIGF2b2lkIG5lZWRpbmcgdG8gaW5jbHVkZSBhcnJheS5oCisgKiBpbnRvIGEgbG90 IG9mIGxvdy1sZXZlbCBjb2RlLgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5 Ni0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlv bnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENh bGlmb3JuaWEKKyAqCisgKgorICogc3JjL2luY2x1ZGUvYWNjZXNzL29wdGlvbnMuaAorICoK KyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpZm5kZWYgT1BUSU9OU19ICisjZGVm aW5lIE9QVElPTlNfSAorCisjaW5jbHVkZSAic3RvcmFnZS9sb2NrLmgiCisjaW5jbHVkZSAi bm9kZXMvcGdfbGlzdC5oIgorCisKKy8qIHN1cHBvcnRlZCBvcHRpb24gdHlwZXMgKi8KK3R5 cGVkZWYgZW51bSBvcHRpb25fdHlwZQoreworCU9QVElPTl9UWVBFX0JPT0wsCisJT1BUSU9O X1RZUEVfSU5ULAorCU9QVElPTl9UWVBFX1JFQUwsCisJT1BUSU9OX1RZUEVfRU5VTSwKKwlP UFRJT05fVFlQRV9TVFJJTkcKK30gb3B0aW9uX3R5cGU7CisKK3R5cGVkZWYgZW51bSBvcHRp b25fdmFsdWVfc3RhdHVzCit7CisJT1BUSU9OX1ZBTFVFX1NUQVRVU19FTVBUWSwJLyogT3B0 aW9uIHdhcyBqdXN0IGluaXRpYWxpemVkICovCisJT1BUSU9OX1ZBTFVFX1NUQVRVU19SQVcs CS8qIE9wdGlvbiBqdXN0IGNhbWUgZnJvbSBzeW50YXggYW5hbHl6ZXIgaW4KKwkJCQkJCQkJ ICogaGFzIG5hbWUsIGFuZCByYXcgKHVucGFyc2VkKSB2YWx1ZSAqLworCU9QVElPTl9WQUxV RV9TVEFUVVNfUEFSU0VELCAvKiBPcHRpb24gd2FzIHBhcnNlZCBhbmQgaGFzIGxpbmsgdG8g Y2F0YWxvZworCQkJCQkJCQkgKiBlbnRyeSBhbmQgcHJvcGVyIHZhbHVlICovCisJT1BUSU9O X1ZBTFVFX1NUQVRVU19GT1JfUkVTRVQJLyogVGhpcyBvcHRpb24gY2FtZSBmcm9tIEFMVEVS IHh4eCBSRVNFVCAqLworfSBvcHRpb25fdmFsdWVfc3RhdHVzOworCisvKgorICogb3B0X2Vu dW1fZWx0X2RlZiAtLSBPbmUgbWVtYmVyIG9mIHRoZSBhcnJheSBvZiBhY2NlcHRhYmxlIHZh bHVlcworICogb2YgYW4gZW51bSByZWxvcHRpb24uCisgKi8KK3R5cGVkZWYgc3RydWN0IG9w dF9lbnVtX2VsdF9kZWYKK3sKKwljb25zdCBjaGFyICpzdHJpbmdfdmFsOworCWludAkJCXN5 bWJvbF92YWw7Cit9IG9wdF9lbnVtX2VsdF9kZWY7CisKKwordHlwZWRlZiBzdHJ1Y3Qgb3B0 aW9uX3ZhbHVlIG9wdGlvbl92YWx1ZTsKKworLyogRnVuY3Rpb24gdGhhdCB3b3VsZCBiZSBj YWxsZWQgYWZ0ZXIgb3B0aW9uIHZhbGlkYXRpb24uCisgKiBNaWdodCBiZSBuZWVkZWQgZm9y IGN1c3RvbSB3YXJuaW5ncywgZXJyb3JzLCBvciBmb3IgY2hhbmdpbmcKKyAqIG9wdGlvbiB2 YWx1ZSBhZnRlciBiZWluZyB2YWxpZGF0ZWQsIGV0Yy4KKyAqLwordHlwZWRlZiB2b2lkICgq b3B0aW9uX3ZhbHVlX3Bvc3R2YWxpZGF0ZSkgKG9wdGlvbl92YWx1ZSAqdmFsdWUpOworCisv KiBnZW5lcmljIHN0cnVjdHVyZSB0byBzdG9yZSBPcHRpb24gU3BlYyBpbmZvcm1hdGlvbiAq LwordHlwZWRlZiBzdHJ1Y3Qgb3B0aW9uX3NwZWNfYmFzaWMKK3sKKwljb25zdCBjaGFyICpu YW1lOwkJCS8qIG11c3QgYmUgZmlyc3QgKHVzZWQgYXMgbGlzdCB0ZXJtaW5hdGlvbgorCQkJ CQkJCQkgKiBtYXJrZXIpICovCisJY29uc3QgY2hhciAqZGVzYzsKKwlMT0NLTU9ERQlsb2Nr bW9kZTsKKwlvcHRpb25fdHlwZSB0eXBlOworCWludAkJCXN0cnVjdF9vZmZzZXQ7CS8qIG9m ZnNldCBvZiB0aGUgdmFsdWUgaW4gQnl0ZWEgcmVwcmVzZW50YXRpb24gKi8KKwlvcHRpb25f dmFsdWVfcG9zdHZhbGlkYXRlIHBvc3R2YWxpZGF0ZV9mbjsKK30gb3B0aW9uX3NwZWNfYmFz aWM7CisKKworLyogcmVsb3B0aW9ucyByZWNvcmRzIGZvciBzcGVjaWZpYyB2YXJpYWJsZSB0 eXBlcyAqLwordHlwZWRlZiBzdHJ1Y3Qgb3B0aW9uX3NwZWNfYm9vbAoreworCW9wdGlvbl9z cGVjX2Jhc2ljIGJhc2U7CisJYm9vbAkJZGVmYXVsdF92YWw7Cit9IG9wdGlvbl9zcGVjX2Jv b2w7CisKK3R5cGVkZWYgc3RydWN0IG9wdGlvbl9zcGVjX2ludAoreworCW9wdGlvbl9zcGVj X2Jhc2ljIGJhc2U7CisJaW50CQkJZGVmYXVsdF92YWw7CisJaW50CQkJbWluOworCWludAkJ CW1heDsKK30gb3B0aW9uX3NwZWNfaW50OworCit0eXBlZGVmIHN0cnVjdCBvcHRpb25fc3Bl Y19yZWFsCit7CisJb3B0aW9uX3NwZWNfYmFzaWMgYmFzZTsKKwlkb3VibGUJCWRlZmF1bHRf dmFsOworCWRvdWJsZQkJbWluOworCWRvdWJsZQkJbWF4OworfSBvcHRpb25fc3BlY19yZWFs OworCit0eXBlZGVmIHN0cnVjdCBvcHRpb25fc3BlY19lbnVtCit7CisJb3B0aW9uX3NwZWNf YmFzaWMgYmFzZTsKKwlvcHRfZW51bV9lbHRfZGVmICptZW1iZXJzOwkvKiBOdWxsIHRlcm1p bmF0ZWQgYXJyYXkgb2YgYWxsb3dlZCBuYW1lcyBhbmQKKwkJCQkJCQkJICogY29ycmVzcG9u ZGluZyB2YWx1ZXMgKi8KKwlpbnQJCQlkZWZhdWx0X3ZhbDsJLyogRGVmYXVsdCB2YWx1ZSwg bWF5IGRpZmZlciBmcm9tIHZhbHVlcyBpbgorCQkJCQkJCQkgKiBtZW1iZXJzIGFycmF5ICov CisJY29uc3QgY2hhciAqZGV0YWlsbXNnOworfSBvcHRpb25fc3BlY19lbnVtOworCisvKiB2 YWxpZGF0aW9uIHJvdXRpbmVzIGZvciBzdHJpbmdzICovCit0eXBlZGVmIHZvaWQgKCp2YWxp ZGF0ZV9zdHJpbmdfb3B0aW9uKSAoY29uc3QgY2hhciAqdmFsdWUpOwordHlwZWRlZiBTaXpl ICgqZmlsbF9zdHJpbmdfb3B0aW9uKSAoY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKnB0cik7 CisKKy8qCisgKiBXaGVuIHN0b3Jpbmcgc3RpbmcgcmVsb3B0aW9ucywgd2Ugc2hvdWxkIGRl YWwgd2l0aCBzcGVjaWFsIGNhc2Ugd2hlbgorICogb3B0aW9uIHZhbHVlIGlzIG5vdCBzZXQu IEZvciBmaXhlZCBsZW5ndGggb3B0aW9ucywgd2UganVzdCBjb3B5IGRlZmF1bHQKKyAqIG9w dGlvbiB2YWx1ZSBpbnRvIHRoZSBiaW5hcnkgc3RydWN0dXJlLiBGb3IgdmFybGVuIHZhbHVl LCB0aGVyZSBjYW4gYmUKKyAqICJub3Qgc2V0IiBzcGVjaWFsIGNhc2UsIHdpdGggbm8gZGVm YXVsdCB2YWx1ZSBvZmZlcmVkLgorICogSW4gdGhpcyBjYXNlIHdlIHdpbGwgc2V0IG9mZnNl dCB2YWx1ZSB0byAtMSwgc28gY29kZSB0aGF0IHVzZSByZWxvcHRpb25zCisgKiBjYW4gZGVh bCB0aGlzIGNhc2UuIEZvciBiZXR0ZXIgcmVhZGFiaWxpdHkgaXQgd2FzIGRlZmluZWQgYXMg YSBjb25zdGFudC4KKyAqLworI2RlZmluZSBPUFRJT05fU1RSSU5HX1ZBTFVFX05PVF9TRVRf T0ZGU0VUIC0xCisKK3R5cGVkZWYgc3RydWN0IG9wdGlvbl9zcGVjX3N0cmluZworeworCW9w dGlvbl9zcGVjX2Jhc2ljIGJhc2U7CisJdmFsaWRhdGVfc3RyaW5nX29wdGlvbiB2YWxpZGF0 ZV9jYjsKKwlmaWxsX3N0cmluZ19vcHRpb24gZmlsbF9jYjsKKwljaGFyCSAgICpkZWZhdWx0 X3ZhbDsKK30gb3B0aW9uX3NwZWNfc3RyaW5nOworCit0eXBlZGVmIHZvaWQgKCpwb3N0cHJv Y2Vzc19ieXRlYV9vcHRpb25zX2Z1bmN0aW9uKSAodm9pZCAqZGF0YSwgYm9vbCB2YWxpZGF0 ZSk7CisKK3R5cGVkZWYgc3RydWN0IG9wdGlvbnNfc3BlY19zZXQKK3sKKwlvcHRpb25fc3Bl Y19iYXNpYyAqKmRlZmluaXRpb25zOworCWludAkJCW51bTsJCQkvKiBOdW1iZXIgb2Ygc3Bl Y19zZXQgaXRlbXMgaW4gdXNlICovCisJaW50CQkJbnVtX2FsbG9jYXRlZDsJLyogTnVtYmVy IG9mIHNwZWNfc2V0IGl0ZW1zIGFsbG9jYXRlZCAqLworCWJvb2wJCWFzc2VydF9vbl9yZWFs bG9jOyAvKiBJZiBudW1iZXIgb2YgaXRlbXMgb2YgdGhlIHNwZWNfc2V0IHdlcmUKKwkJCQkJ CQkJICogc3RyaWN0bHkgc2V0IHRvIGNlcnRhaW4gdmFsdWUgYXNzZXJ0IG9uCisJCQkJCQkJ CSAqIGFkZGluZyBtb3JlIGl0ZW1zICovCisJYm9vbAkJaXNfbG9jYWw7CQkvKiBJZiB0cnVl IHNwZWNzZXQgaXMgaW4gbG9jYWwgbWVtb3J5IGNvbnRleHQgKi8KKwlTaXplCQlzdHJ1Y3Rf c2l6ZTsJLyogU2l6ZSBvZiBhIHN0cnVjdHVyZSBmb3Igb3B0aW9ucyBpbiBiaW5hcnkKKwkJ CQkJCQkJICogcmVwcmVzZW50YXRpb24gKi8KKwlwb3N0cHJvY2Vzc19ieXRlYV9vcHRpb25z X2Z1bmN0aW9uIHBvc3Rwcm9jZXNzX2Z1bjsgLyogVGhpcyBmdW5jdGlvbiBpcworCQkJCQkJ CQkJCQkJCQkgKiBjYWxsZWQgYWZ0ZXIgb3B0aW9ucworCQkJCQkJCQkJCQkJCQkgKiB3ZXJl IGNvbnZlcnRlZCBpbgorCQkJCQkJCQkJCQkJCQkgKiBCeXRlYSByZXByZXNlbnRhdGlvbi4K KwkJCQkJCQkJCQkJCQkJICogQ2FuIGJlIHVzZWQgZm9yIGV4dHJhCisJCQkJCQkJCQkJCQkJ CSAqIHZhbGlkYXRpb24gZXRjLiAqLworCWNoYXIJICAgKm5hbXNwYWNlOwkJLyogc3BlY19z ZXQgaXMgdXNlZCBmb3Igb3B0aW9ucyBmcm9tIHRoaXMKKwkJCQkJCQkJICogbmFtZXNwYXNl ICovCit9IG9wdGlvbnNfc3BlY19zZXQ7CisKKworLyogaG9sZHMgYW4gb3B0aW9uIHZhbHVl IHBhcnNlZCBvciB1bnBhcnNlZCAqLwordHlwZWRlZiBzdHJ1Y3Qgb3B0aW9uX3ZhbHVlCit7 CisJb3B0aW9uX3NwZWNfYmFzaWMgKmdlbjsKKwljaGFyCSAgICpuYW1zcGFjZTsKKwlvcHRp b25fdmFsdWVfc3RhdHVzIHN0YXR1czsKKwljaGFyCSAgICpyYXdfdmFsdWU7CQkvKiBhbGxv Y2F0ZWQgc2VwYXJhdGVseSAqLworCWNoYXIJICAgKnJhd19uYW1lOworCXVuaW9uCisJewor CQlib29sCQlib29sX3ZhbDsKKwkJaW50CQkJaW50X3ZhbDsKKwkJZG91YmxlCQlyZWFsX3Zh bDsKKwkJaW50CQkJZW51bV92YWw7CisJCWNoYXIJICAgKnN0cmluZ192YWw7IC8qIGFsbG9j YXRlZCBzZXBhcmF0ZWx5ICovCisJfQkJCXZhbHVlczsKK30gb3B0aW9uX3ZhbHVlOworCisK Ky8qCisgKiBPcHRpb25zIHNwZWNfc2V0IHJlbGF0ZWQgZnVuY3Rpb25zCisgKi8KK2V4dGVy biBvcHRpb25zX3NwZWNfc2V0ICphbGxvY2F0ZU9wdGlvbnNTcGVjU2V0KGNvbnN0IGNoYXIg Km5hbXNwYWNlLAorCQkJCQkJaW50IGJ5dGVhX3NpemUsIGJvb2wgaXNfbG9jYWwsIGludCBu dW1faXRlbXNfZXhwZWN0ZWQpOworCitleHRlcm4gdm9pZCBvcHRpb25zU3BlY1NldEFkZEJv b2wob3B0aW9uc19zcGVjX3NldCAqc3BlY19zZXQsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJ CQkJCSAgY29uc3QgY2hhciAqZGVzYywgTE9DS01PREUgbG9ja21vZGUsCisJCQkJCQkJCSAg aW50IHN0cnVjdF9vZmZzZXQsCisJCQkJCQkJCSAgb3B0aW9uX3ZhbHVlX3Bvc3R2YWxpZGF0 ZSBwb3N0dmFsaWRhdGVfZm4sCisJCQkJCQkJCSAgYm9vbCBkZWZhdWx0X3ZhbCk7CisKK2V4 dGVybiB2b2lkIG9wdGlvbnNTcGVjU2V0QWRkSW50KG9wdGlvbnNfc3BlY19zZXQgKnNwZWNf c2V0LCBjb25zdCBjaGFyICpuYW1lLAorCQkJCQkJCQkgY29uc3QgY2hhciAqZGVzYywgTE9D S01PREUgbG9ja21vZGUsCisJCQkJCQkJCSBpbnQgc3RydWN0X29mZnNldCwKKwkJCQkJCQkJ IG9wdGlvbl92YWx1ZV9wb3N0dmFsaWRhdGUgcG9zdHZhbGlkYXRlX2ZuLAorCQkJCQkJCQkg aW50IGRlZmF1bHRfdmFsLCBpbnQgbWluX3ZhbCwgaW50IG1heF92YWwpOworCitleHRlcm4g dm9pZCBvcHRpb25zU3BlY1NldEFkZFJlYWwob3B0aW9uc19zcGVjX3NldCAqc3BlY19zZXQs IGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJCQkgIGNvbnN0IGNoYXIgKmRlc2MsIExPQ0tNT0RF IGxvY2ttb2RlLAorCQkJCQkJICBpbnQgc3RydWN0X29mZnNldCwKKwkJCQkJCSAgb3B0aW9u X3ZhbHVlX3Bvc3R2YWxpZGF0ZSBwb3N0dmFsaWRhdGVfZm4sCisJCQkJCQkgIGRvdWJsZSBk ZWZhdWx0X3ZhbCwgZG91YmxlIG1pbl92YWwsIGRvdWJsZSBtYXhfdmFsKTsKKworZXh0ZXJu IHZvaWQgb3B0aW9uc1NwZWNTZXRBZGRFbnVtKG9wdGlvbnNfc3BlY19zZXQgKnNwZWNfc2V0 LCBjb25zdCBjaGFyICpuYW1lLAorCQkJCQkJCQkgIGNvbnN0IGNoYXIgKmRlc2MsIExPQ0tN T0RFIGxvY2ttb2RlLAorCQkJCQkJCQkgIGludCBzdHJ1Y3Rfb2Zmc2V0LAorCQkJCQkJCQkg IG9wdGlvbl92YWx1ZV9wb3N0dmFsaWRhdGUgcG9zdHZhbGlkYXRlX2ZuLAorCQkJCQkJCQkg IG9wdF9lbnVtX2VsdF9kZWYgKm1lbWJlcnMsIGludCBkZWZhdWx0X3ZhbCwKKwkJCQkJCQkJ ICBjb25zdCBjaGFyICpkZXRhaWxtc2cpOworCisKK2V4dGVybiB2b2lkIG9wdGlvbnNTcGVj U2V0QWRkU3RyaW5nKG9wdGlvbnNfc3BlY19zZXQgKnNwZWNfc2V0LAorCQkJCQkJCQkJY29u c3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZGVzYywKKwkJCQkJCQkJCUxPQ0tNT0RFIGxv Y2ttb2RlLCBpbnQgc3RydWN0X29mZnNldCwKKwkJCQkJCQkJCW9wdGlvbl92YWx1ZV9wb3N0 dmFsaWRhdGUgcG9zdHZhbGlkYXRlX2ZuLAorCQkJCQkJCQkJY29uc3QgY2hhciAqZGVmYXVs dF92YWwsCisJCQkJCQkJCQl2YWxpZGF0ZV9zdHJpbmdfb3B0aW9uIHZhbGlkYXRvciwKKwkJ CQkJCQkJCWZpbGxfc3RyaW5nX29wdGlvbiBmaWxsZXIpOworCisKKy8qCisgKiBUaGlzIG1h Y3JvIGFsbG93cyB0byBnZXQgc3RyaW5nIG9wdGlvbiB2YWx1ZSBmcm9tIGJ5dGVhIHJlcHJl c2VudGF0aW9uLgorICogIm9wdHN0cnVjdCIgLSBpcyBhIHN0cnVjdHVyZSB0aGF0IGlzIHN0 b3JlZCBpbiBieXRlYSBvcHRpb25zIHJlcHJlc2VudGF0aW9uCisgKiAibWVtYmVyIiAtIG1l bWJlciBvZiB0aGlzIHN0cnVjdHVyZSB0aGF0IGhhcyBzdHJpbmcgb3B0aW9uIHZhbHVlCisg KiAoYWN0dWFsbHkgc3RyaW5nIHZhbHVlcyBhcmUgc3RvcmVkIGluIGJ5dGVhIGFmdGVyIHRo ZSBzdHJ1Y3R1cmUsIGFuZAorICogYW5kICJtZW1iZXIiIHdpbGwgY29udGFpbiBhbiBvZmZz ZXQgdG8gdGhpcyB2YWx1ZS4gVGhpcyBtYWNybyBkbyBhbGwKKyAqIHRoZSBtYXRoCisgKi8K KyNkZWZpbmUgR0VUX1NUUklOR19PUFRJT04ob3B0c3RydWN0LCBtZW1iZXIpIFwKKwkoKG9w dHN0cnVjdCktPm1lbWJlciA9PSBPUFRJT05fU1RSSU5HX1ZBTFVFX05PVF9TRVRfT0ZGU0VU ID8gTlVMTCA6IFwKKwkgKGNoYXIgKikob3B0c3RydWN0KSArIChvcHRzdHJ1Y3QpLT5tZW1i ZXIpCisKKy8qCisgKiBGdW5jdGlvbnMgcmVsYXRlZCB0byBvcHRpb24gY29udmVyc2lvbiwg cGFyc2luZywgbWFuaXB1bGF0aW9uCisgKiBhbmQgdmFsaWRhdGlvbgorICovCitleHRlcm4g dm9pZCBvcHRpb25zRGVmTGlzdFZhbGRhdGVOYW1lc3BhY2VzKExpc3QgKmRlZkxpc3QsCisJ CQkJCQkJCQkJCWNoYXIgKiphbGxvd2VkX25hbXNwYWNlcyk7CitleHRlcm4gTGlzdCAqb3B0 aW9uc0RlZkxpc3RGaWx0ZXJOYW1lc3BhY2VzKExpc3QgKmRlZkxpc3QsCisJCQkJCQkJCQkJ CWNvbnN0IGNoYXIgKm5hbXNwYWNlKTsKK2V4dGVybiBMaXN0ICpvcHRpb25zVGV4dEFycmF5 VG9EZWZMaXN0KERhdHVtIG9wdGlvbnMpOworZXh0ZXJuIERhdHVtIG9wdGlvbnNEZWZMaXN0 VG9UZXh0QXJyYXkoTGlzdCAqZGVmTGlzdCk7CisKKy8qCisgKiBNZXRhIGZ1bmN0aW9ucyB0 aGF0IHVzZXMgZnVuY3Rpb25zIGFib3ZlIHRvIGdldCBvcHRpb25zIGZvciByZWxhdGlvbnMs CisgKiB0YWJsZXNwYWNlcywgdmlld3MgYW5kIHNvIG9uCisgKi8KKworZXh0ZXJuIGJ5dGVh ICpvcHRpb25zVGV4dEFycmF5VG9CeXRlYShvcHRpb25zX3NwZWNfc2V0ICpzcGVjX3NldCwg RGF0dW0gZGF0YSwKKwkJCQkJCQkJCSAgYm9vbCB2YWxpZGF0ZSk7CitleHRlcm4gRGF0dW0g b3B0aW9uc1VwZGF0ZVRleEFycmF5V2l0aERlZkxpc3Qob3B0aW9uc19zcGVjX3NldCAqc3Bl Y19zZXQsCisJCQkJCQkJICBEYXR1bSBvbGRPcHRpb25zLCBMaXN0ICpkZWZMaXN0LCBib29s IGRvX3Jlc2V0KTsKK2V4dGVybiBEYXR1bSBvcHRpb25EZWZMaXN0VG9UZXh0QXJyYXkob3B0 aW9uc19zcGVjX3NldCAqc3BlY19zZXQsCisJCQkJCQkJCQkgIExpc3QgKmRlZkxpc3QpOwor CisvKiBJbnRlcm5hbCBmdW5jdGlvbnMgKi8KKworZXh0ZXJuIExpc3QgKm9wdGlvbnNUZXh0 QXJyYXlUb1Jhd1ZhbHVlcyhEYXR1bSBhcnJheV9kYXR1bSk7CitleHRlcm4gTGlzdCAqb3B0 aW9uc1BhcnNlUmF3VmFsdWVzKExpc3QgKnJhd192YWx1ZXMsCisJCQkJCQkJCSAgIG9wdGlv bnNfc3BlY19zZXQgKnNwZWNfc2V0LCBib29sIHZhbGlkYXRlKTsKK2V4dGVybiBieXRlYSAq b3B0aW9uc1ZhbHVlc1RvQnl0ZWEoTGlzdCAqb3B0aW9ucywgb3B0aW9uc19zcGVjX3NldCAq c3BlY19zZXQpOworCisKKyNlbmRpZgkJCQkJCQkvKiBPUFRJT05TX0ggKi8KZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxvcHRpb25zLmggYi9zcmMvaW5jbHVkZS9hY2Nl c3MvcmVsb3B0aW9ucy5oCmluZGV4IDM2MDIzOTdjZjUxLi41MmYyODVkZGU0OSAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbG9wdGlvbnMuaAorKysgYi9zcmMvaW5jbHVk ZS9hY2Nlc3MvcmVsb3B0aW9ucy5oCkBAIC0xLDE0ICsxLDkgQEAKIC8qLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQogICoKICAqIHJlbG9wdGlvbnMuaAotICoJICBDb3JlIHN1cHBvcnQgZm9yIHJl bGF0aW9uIGFuZCB0YWJsZXNwYWNlIG9wdGlvbnMgKHBnX2NsYXNzLnJlbG9wdGlvbnMKKyAq CSAgU3VwcG9ydCBmb3IgcmVsYXRpb24gdmlldyBhbmQgdGFibGVzcGFjZSBvcHRpb25zIChw Z19jbGFzcy5yZWxvcHRpb25zCiAgKgkgIGFuZCBwZ190YWJsZXNwYWNlLnNwY29wdGlvbnMp CiAgKgotICogTm90ZTogdGhlIGZ1bmN0aW9ucyBkZWFsaW5nIHdpdGggdGV4dC1hcnJheSBy ZWxvcHRpb25zIHZhbHVlcyBkZWNsYXJlCi0gKiB0aGVtIGFzIERhdHVtLCBub3QgQXJyYXlU eXBlICosIHRvIGF2b2lkIG5lZWRpbmcgdG8gaW5jbHVkZSBhcnJheS5oCi0gKiBpbnRvIGEg bG90IG9mIGxvdy1sZXZlbCBjb2RlLgotICoKLSAqCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQg KGMpIDE5OTYtMjAyMywgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKICAq IFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0 eSBvZiBDYWxpZm9ybmlhCiAgKgpAQCAtMjIsMTc4ICsxNyw0MCBAQAogI2luY2x1ZGUgImFj Y2Vzcy9hbWFwaS5oIgogI2luY2x1ZGUgImFjY2Vzcy9odHVwLmgiCiAjaW5jbHVkZSAiYWNj ZXNzL3R1cGRlc2MuaCIKKyNpbmNsdWRlICJhY2Nlc3Mvb3B0aW9ucy5oIgogI2luY2x1ZGUg Im5vZGVzL3BnX2xpc3QuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xvY2suaCIKIAotLyogdHlw ZXMgc3VwcG9ydGVkIGJ5IHJlbG9wdGlvbnMgKi8KLXR5cGVkZWYgZW51bSByZWxvcHRfdHlw ZQotewotCVJFTE9QVF9UWVBFX0JPT0wsCi0JUkVMT1BUX1RZUEVfSU5ULAotCVJFTE9QVF9U WVBFX1JFQUwsCi0JUkVMT1BUX1RZUEVfRU5VTSwKLQlSRUxPUFRfVFlQRV9TVFJJTkcsCi19 IHJlbG9wdF90eXBlOwotCi0vKiBraW5kcyBzdXBwb3J0ZWQgYnkgcmVsb3B0aW9ucyAqLwot dHlwZWRlZiBlbnVtIHJlbG9wdF9raW5kCi17Ci0JUkVMT1BUX0tJTkRfTE9DQUwgPSAwLAot CVJFTE9QVF9LSU5EX0hFQVAgPSAoMSA8PCAwKSwKLQlSRUxPUFRfS0lORF9UT0FTVCA9ICgx IDw8IDEpLAotCVJFTE9QVF9LSU5EX0JUUkVFID0gKDEgPDwgMiksCi0JUkVMT1BUX0tJTkRf SEFTSCA9ICgxIDw8IDMpLAotCVJFTE9QVF9LSU5EX0dJTiA9ICgxIDw8IDQpLAotCVJFTE9Q VF9LSU5EX0dJU1QgPSAoMSA8PCA1KSwKLQlSRUxPUFRfS0lORF9BVFRSSUJVVEUgPSAoMSA8 PCA2KSwKLQlSRUxPUFRfS0lORF9UQUJMRVNQQUNFID0gKDEgPDwgNyksCi0JUkVMT1BUX0tJ TkRfU1BHSVNUID0gKDEgPDwgOCksCi0JUkVMT1BUX0tJTkRfVklFVyA9ICgxIDw8IDkpLAot CVJFTE9QVF9LSU5EX0JSSU4gPSAoMSA8PCAxMCksCi0JUkVMT1BUX0tJTkRfUEFSVElUSU9O RUQgPSAoMSA8PCAxMSksCi0JLyogaWYgeW91IGFkZCBhIG5ldyBraW5kLCBtYWtlIHN1cmUg eW91IHVwZGF0ZSAibGFzdF9kZWZhdWx0IiB0b28gKi8KLQlSRUxPUFRfS0lORF9MQVNUX0RF RkFVTFQgPSBSRUxPUFRfS0lORF9QQVJUSVRJT05FRCwKLQkvKiBzb21lIGNvbXBpbGVycyB0 cmVhdCBlbnVtcyBhcyBzaWduZWQgaW50cywgc28gd2UgY2FuJ3QgdXNlIDEgPDwgMzEgKi8K LQlSRUxPUFRfS0lORF9NQVggPSAoMSA8PCAzMCkKLX0gcmVsb3B0X2tpbmQ7Ci0KIC8qIHJl bG9wdGlvbiBuYW1lc3BhY2VzIGFsbG93ZWQgZm9yIGhlYXBzIC0tIGN1cnJlbnRseSBvbmx5 IFRPQVNUICovCiAjZGVmaW5lIEhFQVBfUkVMT1BUX05BTUVTUEFDRVMgeyAidG9hc3QiLCBO VUxMIH0KIAotLyogZ2VuZXJpYyBzdHJ1Y3QgdG8gaG9sZCBzaGFyZWQgZGF0YSAqLwotdHlw ZWRlZiBzdHJ1Y3QgcmVsb3B0X2dlbgotewotCWNvbnN0IGNoYXIgKm5hbWU7CQkJLyogbXVz dCBiZSBmaXJzdCAodXNlZCBhcyBsaXN0IHRlcm1pbmF0aW9uCi0JCQkJCQkJCSAqIG1hcmtl cikgKi8KLQljb25zdCBjaGFyICpkZXNjOwotCWJpdHMzMgkJa2luZHM7Ci0JTE9DS01PREUJ bG9ja21vZGU7Ci0JaW50CQkJbmFtZWxlbjsKLQlyZWxvcHRfdHlwZSB0eXBlOwotfSByZWxv cHRfZ2VuOwotCi0vKiBob2xkcyBhIHBhcnNlZCB2YWx1ZSAqLwotdHlwZWRlZiBzdHJ1Y3Qg cmVsb3B0X3ZhbHVlCi17Ci0JcmVsb3B0X2dlbiAqZ2VuOwotCWJvb2wJCWlzc2V0OwotCXVu aW9uCi0JewotCQlib29sCQlib29sX3ZhbDsKLQkJaW50CQkJaW50X3ZhbDsKLQkJZG91Ymxl CQlyZWFsX3ZhbDsKLQkJaW50CQkJZW51bV92YWw7Ci0JCWNoYXIJICAgKnN0cmluZ192YWw7 IC8qIGFsbG9jYXRlZCBzZXBhcmF0ZWx5ICovCi0JfQkJCXZhbHVlczsKLX0gcmVsb3B0X3Zh bHVlOwotCi0vKiByZWxvcHRpb25zIHJlY29yZHMgZm9yIHNwZWNpZmljIHZhcmlhYmxlIHR5 cGVzICovCi10eXBlZGVmIHN0cnVjdCByZWxvcHRfYm9vbAotewotCXJlbG9wdF9nZW4JZ2Vu OwotCWJvb2wJCWRlZmF1bHRfdmFsOwotfSByZWxvcHRfYm9vbDsKLQotdHlwZWRlZiBzdHJ1 Y3QgcmVsb3B0X2ludAotewotCXJlbG9wdF9nZW4JZ2VuOwotCWludAkJCWRlZmF1bHRfdmFs OwotCWludAkJCW1pbjsKLQlpbnQJCQltYXg7Ci19IHJlbG9wdF9pbnQ7Ci0KLXR5cGVkZWYg c3RydWN0IHJlbG9wdF9yZWFsCi17Ci0JcmVsb3B0X2dlbglnZW47Ci0JZG91YmxlCQlkZWZh dWx0X3ZhbDsKLQlkb3VibGUJCW1pbjsKLQlkb3VibGUJCW1heDsKLX0gcmVsb3B0X3JlYWw7 Ci0KIC8qCi0gKiByZWxvcHRfZW51bV9lbHRfZGVmIC0tIE9uZSBtZW1iZXIgb2YgdGhlIGFy cmF5IG9mIGFjY2VwdGFibGUgdmFsdWVzCi0gKiBvZiBhbiBlbnVtIHJlbG9wdGlvbi4KKyAq IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYWxpYXNlcyBzbyBsb2NhbCByZWxvcHRpb24gY29k ZSBvZiBjdXN0b20gdmFsaWRhdG9yCisgKiBjYW4gd29yay4KICAqLwotdHlwZWRlZiBzdHJ1 Y3QgcmVsb3B0X2VudW1fZWx0X2RlZgotewotCWNvbnN0IGNoYXIgKnN0cmluZ192YWw7Ci0J aW50CQkJc3ltYm9sX3ZhbDsKLX0gcmVsb3B0X2VudW1fZWx0X2RlZjsKK3R5cGVkZWYgb3B0 aW9uX3ZhbHVlIHJlbG9wdF92YWx1ZTsKK3R5cGVkZWYgZmlsbF9zdHJpbmdfb3B0aW9uIGZp bGxfc3RyaW5nX3JlbG9wdDsKK3R5cGVkZWYgdmFsaWRhdGVfc3RyaW5nX29wdGlvbiB2YWxp ZGF0ZV9zdHJpbmdfcmVsb3B0OworI2RlZmluZSBHRVRfU1RSSU5HX1JFTE9QVElPTihvcHRz dHJ1Y3QsIG1lbWJlcikgXAorCQkJR0VUX1NUUklOR19PUFRJT04ob3B0c3RydWN0LCBtZW1i ZXIpCiAKLXR5cGVkZWYgc3RydWN0IHJlbG9wdF9lbnVtCi17Ci0JcmVsb3B0X2dlbglnZW47 Ci0JcmVsb3B0X2VudW1fZWx0X2RlZiAqbWVtYmVyczsKLQlpbnQJCQlkZWZhdWx0X3ZhbDsK LQljb25zdCBjaGFyICpkZXRhaWxtc2c7Ci0JLyogbnVsbC10ZXJtaW5hdGVkIGFycmF5IG9m IG1lbWJlcnMgKi8KLX0gcmVsb3B0X2VudW07CiAKLS8qIHZhbGlkYXRpb24gcm91dGluZXMg Zm9yIHN0cmluZ3MgKi8KLXR5cGVkZWYgdm9pZCAoKnZhbGlkYXRlX3N0cmluZ19yZWxvcHQp IChjb25zdCBjaGFyICp2YWx1ZSk7Ci10eXBlZGVmIFNpemUgKCpmaWxsX3N0cmluZ19yZWxv cHQpIChjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqcHRyKTsKKy8qCisgKiByZWxvcHRzX3Zh bGlkYXRvciBmdW5jdGlvbnMgaXMgbGVmdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBm b3IgdXNpbmcKKyAqIHdpdGggbG9jYWwgcmVsb3B0aW9ucy4gU2hvdWxkIG5vdCBiZSB1c2Vk IGVsc2V3aGVyZQorICovCiAKIC8qIHZhbGlkYXRpb24gcm91dGluZSBmb3IgdGhlIHdob2xl IG9wdGlvbiBzZXQgKi8KLXR5cGVkZWYgdm9pZCAoKnJlbG9wdHNfdmFsaWRhdG9yKSAodm9p ZCAqcGFyc2VkX29wdGlvbnMsIHJlbG9wdF92YWx1ZSAqdmFscywgaW50IG52YWxzKTsKLQot dHlwZWRlZiBzdHJ1Y3QgcmVsb3B0X3N0cmluZwotewotCXJlbG9wdF9nZW4JZ2VuOwotCWlu dAkJCWRlZmF1bHRfbGVuOwotCWJvb2wJCWRlZmF1bHRfaXNudWxsOwotCXZhbGlkYXRlX3N0 cmluZ19yZWxvcHQgdmFsaWRhdGVfY2I7Ci0JZmlsbF9zdHJpbmdfcmVsb3B0IGZpbGxfY2I7 Ci0JY2hhcgkgICAqZGVmYXVsdF92YWw7Ci19IHJlbG9wdF9zdHJpbmc7Ci0KLS8qIFRoaXMg aXMgdGhlIHRhYmxlIGRhdGF0eXBlIGZvciBidWlsZF9yZWxvcHRpb25zKCkgKi8KLXR5cGVk ZWYgc3RydWN0Ci17Ci0JY29uc3QgY2hhciAqb3B0bmFtZTsJCS8qIG9wdGlvbidzIG5hbWUg Ki8KLQlyZWxvcHRfdHlwZSBvcHR0eXBlOwkJLyogb3B0aW9uJ3MgZGF0YXR5cGUgKi8KLQlp bnQJCQlvZmZzZXQ7CQkJLyogb2Zmc2V0IG9mIGZpZWxkIGluIHJlc3VsdCBzdHJ1Y3QgKi8K LX0gcmVsb3B0X3BhcnNlX2VsdDsKLQotLyogTG9jYWwgcmVsb3B0aW9uIGRlZmluaXRpb24g Ki8KLXR5cGVkZWYgc3RydWN0IGxvY2FsX3JlbG9wdAotewotCXJlbG9wdF9nZW4gKm9wdGlv bjsJCQkvKiBvcHRpb24gZGVmaW5pdGlvbiAqLwotCWludAkJCW9mZnNldDsJCQkvKiBvZmZz ZXQgb2YgcGFyc2VkIHZhbHVlIGluIGJ5dGVhIHN0cnVjdHVyZSAqLwotfSBsb2NhbF9yZWxv cHQ7Cit0eXBlZGVmIHZvaWQgKCpyZWxvcHRzX3ZhbGlkYXRvcikgKHZvaWQgKnBhcnNlZF9v cHRpb25zLCByZWxvcHRfdmFsdWUgKnZhbHMsCisJCQkJCQkJCSAgIGludCBudmFscyk7CiAK IC8qIFN0cnVjdHVyZSB0byBob2xkIGxvY2FsIHJlbG9wdGlvbiBkYXRhIGZvciBidWlsZF9s b2NhbF9yZWxvcHRpb25zKCkgKi8KIHR5cGVkZWYgc3RydWN0IGxvY2FsX3JlbG9wdHMKIHsK LQlMaXN0CSAgICpvcHRpb25zOwkJLyogbGlzdCBvZiBsb2NhbF9yZWxvcHQgZGVmaW5pdGlv bnMgKi8KIAlMaXN0CSAgICp2YWxpZGF0b3JzOwkJLyogbGlzdCBvZiByZWxvcHRzX3ZhbGlk YXRvciBjYWxsYmFja3MgKi8KLQlTaXplCQlyZWxvcHRfc3RydWN0X3NpemU7IC8qIHNpemUg b2YgcGFyc2VkIGJ5dGVhIHN0cnVjdHVyZSAqLworCW9wdGlvbnNfc3BlY19zZXQgKnNwZWNf c2V0OyAvKiBTcGVjIFNldCB0byBzdG9yZSBvcHRpb25zIGluZm8gKi8KIH0gbG9jYWxfcmVs b3B0czsKIAotLyoKLSAqIFV0aWxpdHkgbWFjcm8gdG8gZ2V0IGEgdmFsdWUgZm9yIGEgc3Ry aW5nIHJlbG9wdGlvbiBvbmNlIHRoZSBvcHRpb25zCi0gKiBhcmUgcGFyc2VkLiAgVGhpcyBn ZXRzIGEgcG9pbnRlciB0byB0aGUgc3RyaW5nIHZhbHVlIGl0c2VsZi4gICJvcHRzdHJ1Y3Qi Ci0gKiBpcyB0aGUgU3RkUmRPcHRpb25zIHN0cnVjdCBvciBlcXVpdmFsZW50LCAibWVtYmVy IiBpcyB0aGUgc3RydWN0IG1lbWJlcgotICogY29ycmVzcG9uZGluZyB0byB0aGUgc3RyaW5n IG9wdGlvbi4KLSAqLwotI2RlZmluZSBHRVRfU1RSSU5HX1JFTE9QVElPTihvcHRzdHJ1Y3Qs IG1lbWJlcikgXAotCSgob3B0c3RydWN0KS0+bWVtYmVyID09IDAgPyBOVUxMIDogXAotCSAo Y2hhciAqKShvcHRzdHJ1Y3QpICsgKG9wdHN0cnVjdCktPm1lbWJlcikKLQotZXh0ZXJuIHJl bG9wdF9raW5kIGFkZF9yZWxvcHRpb25fa2luZCh2b2lkKTsKLWV4dGVybiB2b2lkIGFkZF9i b29sX3JlbG9wdGlvbihiaXRzMzIga2luZHMsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNo YXIgKmRlc2MsCi0JCQkJCQkJICAgYm9vbCBkZWZhdWx0X3ZhbCwgTE9DS01PREUgbG9ja21v ZGUpOwotZXh0ZXJuIHZvaWQgYWRkX2ludF9yZWxvcHRpb24oYml0czMyIGtpbmRzLCBjb25z dCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpkZXNjLAotCQkJCQkJCSAgaW50IGRlZmF1bHRf dmFsLCBpbnQgbWluX3ZhbCwgaW50IG1heF92YWwsCi0JCQkJCQkJICBMT0NLTU9ERSBsb2Nr bW9kZSk7Ci1leHRlcm4gdm9pZCBhZGRfcmVhbF9yZWxvcHRpb24oYml0czMyIGtpbmRzLCBj b25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpkZXNjLAotCQkJCQkJCSAgIGRvdWJsZSBk ZWZhdWx0X3ZhbCwgZG91YmxlIG1pbl92YWwsIGRvdWJsZSBtYXhfdmFsLAotCQkJCQkJCSAg IExPQ0tNT0RFIGxvY2ttb2RlKTsKLWV4dGVybiB2b2lkIGFkZF9lbnVtX3JlbG9wdGlvbihi aXRzMzIga2luZHMsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmRlc2MsCi0JCQkJ CQkJICAgcmVsb3B0X2VudW1fZWx0X2RlZiAqbWVtYmVycywgaW50IGRlZmF1bHRfdmFsLAot CQkJCQkJCSAgIGNvbnN0IGNoYXIgKmRldGFpbG1zZywgTE9DS01PREUgbG9ja21vZGUpOwot ZXh0ZXJuIHZvaWQgYWRkX3N0cmluZ19yZWxvcHRpb24oYml0czMyIGtpbmRzLCBjb25zdCBj aGFyICpuYW1lLCBjb25zdCBjaGFyICpkZXNjLAotCQkJCQkJCQkgY29uc3QgY2hhciAqZGVm YXVsdF92YWwsIHZhbGlkYXRlX3N0cmluZ19yZWxvcHQgdmFsaWRhdG9yLAotCQkJCQkJCQkg TE9DS01PREUgbG9ja21vZGUpOwogCiBleHRlcm4gdm9pZCBpbml0X2xvY2FsX3JlbG9wdGlv bnMobG9jYWxfcmVsb3B0cyAqcmVsb3B0cywgU2l6ZSByZWxvcHRfc3RydWN0X3NpemUpOwog ZXh0ZXJuIHZvaWQgcmVnaXN0ZXJfcmVsb3B0aW9uc192YWxpZGF0b3IobG9jYWxfcmVsb3B0 cyAqcmVsb3B0cywKQEAgLTIxMCw3ICs2Nyw3IEBAIGV4dGVybiB2b2lkIGFkZF9sb2NhbF9y ZWFsX3JlbG9wdGlvbihsb2NhbF9yZWxvcHRzICpyZWxvcHRzLCBjb25zdCBjaGFyICpuYW1l LAogCQkJCQkJCQkJIGludCBvZmZzZXQpOwogZXh0ZXJuIHZvaWQgYWRkX2xvY2FsX2VudW1f cmVsb3B0aW9uKGxvY2FsX3JlbG9wdHMgKnJlbG9wdHMsCiAJCQkJCQkJCQkgY29uc3QgY2hh ciAqbmFtZSwgY29uc3QgY2hhciAqZGVzYywKLQkJCQkJCQkJCSByZWxvcHRfZW51bV9lbHRf ZGVmICptZW1iZXJzLAorCQkJCQkJCQkJIG9wdF9lbnVtX2VsdF9kZWYgKm1lbWJlcnMsCiAJ CQkJCQkJCQkgaW50IGRlZmF1bHRfdmFsLCBjb25zdCBjaGFyICpkZXRhaWxtc2csCiAJCQkJ CQkJCQkgaW50IG9mZnNldCk7CiBleHRlcm4gdm9pZCBhZGRfbG9jYWxfc3RyaW5nX3JlbG9w dGlvbihsb2NhbF9yZWxvcHRzICpyZWxvcHRzLCBjb25zdCBjaGFyICpuYW1lLApAQCAtMjE5 LDI5ICs3NiwxNyBAQCBleHRlcm4gdm9pZCBhZGRfbG9jYWxfc3RyaW5nX3JlbG9wdGlvbihs b2NhbF9yZWxvcHRzICpyZWxvcHRzLCBjb25zdCBjaGFyICpuYW1lLAogCQkJCQkJCQkJICAg dmFsaWRhdGVfc3RyaW5nX3JlbG9wdCB2YWxpZGF0b3IsCiAJCQkJCQkJCQkgICBmaWxsX3N0 cmluZ19yZWxvcHQgZmlsbGVyLCBpbnQgb2Zmc2V0KTsKIAotZXh0ZXJuIERhdHVtIHRyYW5z Zm9ybVJlbE9wdGlvbnMoRGF0dW0gb2xkT3B0aW9ucywgTGlzdCAqZGVmTGlzdCwKLQkJCQkJ CQkJIGNvbnN0IGNoYXIgKm5hbXNwYWNlLCBjaGFyICp2YWxpZG5zcHNbXSwKLQkJCQkJCQkJ IGJvb2wgYWNjZXB0T2lkc09mZiwgYm9vbCBpc1Jlc2V0KTsKLWV4dGVybiBMaXN0ICp1bnRy YW5zZm9ybVJlbE9wdGlvbnMoRGF0dW0gb3B0aW9ucyk7CiBleHRlcm4gYnl0ZWEgKmV4dHJh Y3RSZWxPcHRpb25zKEhlYXBUdXBsZSB0dXBsZSwgVHVwbGVEZXNjIHR1cGRlc2MsCi0JCQkJ CQkJCWFtb3B0aW9uc19mdW5jdGlvbiBhbW9wdGlvbnMpOwotZXh0ZXJuIHZvaWQgKmJ1aWxk X3JlbG9wdGlvbnMoRGF0dW0gcmVsb3B0aW9ucywgYm9vbCB2YWxpZGF0ZSwKLQkJCQkJCQkg IHJlbG9wdF9raW5kIGtpbmQsCi0JCQkJCQkJICBTaXplIHJlbG9wdF9zdHJ1Y3Rfc2l6ZSwK LQkJCQkJCQkgIGNvbnN0IHJlbG9wdF9wYXJzZV9lbHQgKnJlbG9wdF9lbGVtcywKLQkJCQkJ CQkgIGludCBudW1fcmVsb3B0X2VsZW1zKTsKKwkJCQkJCQkJYW1yZWxvcHRzcGVjc2V0X2Z1 bmN0aW9uIGFtb3B0aW9uc19kZWZfc2V0KTsKIGV4dGVybiB2b2lkICpidWlsZF9sb2NhbF9y ZWxvcHRpb25zKGxvY2FsX3JlbG9wdHMgKnJlbG9wdHMsIERhdHVtIG9wdGlvbnMsCiAJCQkJ CQkJCQlib29sIHZhbGlkYXRlKTsKIAotZXh0ZXJuIGJ5dGVhICpkZWZhdWx0X3JlbG9wdGlv bnMoRGF0dW0gcmVsb3B0aW9ucywgYm9vbCB2YWxpZGF0ZSwKLQkJCQkJCQkJIHJlbG9wdF9r aW5kIGtpbmQpOwotZXh0ZXJuIGJ5dGVhICpoZWFwX3JlbG9wdGlvbnMoY2hhciByZWxraW5k LCBEYXR1bSByZWxvcHRpb25zLCBib29sIHZhbGlkYXRlKTsKLWV4dGVybiBieXRlYSAqdmll d19yZWxvcHRpb25zKERhdHVtIHJlbG9wdGlvbnMsIGJvb2wgdmFsaWRhdGUpOwotZXh0ZXJu IGJ5dGVhICpwYXJ0aXRpb25lZF90YWJsZV9yZWxvcHRpb25zKERhdHVtIHJlbG9wdGlvbnMs IGJvb2wgdmFsaWRhdGUpOwotZXh0ZXJuIGJ5dGVhICppbmRleF9yZWxvcHRpb25zKGFtb3B0 aW9uc19mdW5jdGlvbiBhbW9wdGlvbnMsIERhdHVtIHJlbG9wdGlvbnMsCi0JCQkJCQkJICAg Ym9vbCB2YWxpZGF0ZSk7Ci1leHRlcm4gYnl0ZWEgKmF0dHJpYnV0ZV9yZWxvcHRpb25zKERh dHVtIHJlbG9wdGlvbnMsIGJvb2wgdmFsaWRhdGUpOwotZXh0ZXJuIGJ5dGVhICp0YWJsZXNw YWNlX3JlbG9wdGlvbnMoRGF0dW0gcmVsb3B0aW9ucywgYm9vbCB2YWxpZGF0ZSk7Ci1leHRl cm4gTE9DS01PREUgQWx0ZXJUYWJsZUdldFJlbE9wdGlvbnNMb2NrTGV2ZWwoTGlzdCAqZGVm TGlzdCk7CitvcHRpb25zX3NwZWNfc2V0ICpnZXRfaGVhcF9yZWxvcHRfc3BlY19zZXQodm9p ZCk7CitvcHRpb25zX3NwZWNfc2V0ICpnZXRfdG9hc3RfcmVsb3B0X3NwZWNfc2V0KHZvaWQp Oworb3B0aW9uc19zcGVjX3NldCAqZ2V0X3BhcnRpdGlvbmVkX3JlbG9wdF9zcGVjX3NldCh2 b2lkKTsKK29wdGlvbnNfc3BlY19zZXQgKmdldF92aWV3X3JlbG9wdF9zcGVjX3NldCh2b2lk KTsKK29wdGlvbnNfc3BlY19zZXQgKmdldF9hdHRyaWJ1dGVfb3B0aW9uc19zcGVjX3NldCh2 b2lkKTsKK29wdGlvbnNfc3BlY19zZXQgKmdldF90YWJsZXNwYWNlX29wdGlvbnNfc3BlY19z ZXQodm9pZCk7CitleHRlcm4gTE9DS01PREUgQWx0ZXJUYWJsZUdldFJlbE9wdGlvbnNMb2Nr TGV2ZWwoUmVsYXRpb24gcmVsLCBMaXN0ICpkZWZMaXN0KTsKIAogI2VuZGlmCQkJCQkJCS8q IFJFTE9QVElPTlNfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3NwZ2lz dC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3NwZ2lzdC5oCmluZGV4IDQ4MGUzOGFkOTYyLi4z ZDM2MDNjMGI5MyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3NwZ2lzdC5oCisr KyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9zcGdpc3QuaApAQCAtMTg5LDkgKzE4OSw2IEBAIHR5 cGVkZWYgc3RydWN0IHNwZ0xlYWZDb25zaXN0ZW50T3V0CiB9IHNwZ0xlYWZDb25zaXN0ZW50 T3V0OwogCiAKLS8qIHNwZ3V0aWxzLmMgKi8KLWV4dGVybiBieXRlYSAqc3Bnb3B0aW9ucyhE YXR1bSByZWxvcHRpb25zLCBib29sIHZhbGlkYXRlKTsKLQogLyogc3BnaW5zZXJ0LmMgKi8K IGV4dGVybiBJbmRleEJ1aWxkUmVzdWx0ICpzcGdidWlsZChSZWxhdGlvbiBoZWFwLCBSZWxh dGlvbiBpbmRleCwKIAkJCQkJCQkJICBzdHJ1Y3QgSW5kZXhJbmZvICppbmRleEluZm8pOwpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3NwZ2lzdF9wcml2YXRlLmggYi9zcmMv aW5jbHVkZS9hY2Nlc3Mvc3BnaXN0X3ByaXZhdGUuaAppbmRleCBiYzM5ZWU0NWNjZi4uYWI2 ZDk5ZmM1MTYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9zcGdpc3RfcHJpdmF0 ZS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9zcGdpc3RfcHJpdmF0ZS5oCkBAIC01Mjks NiArNTI5LDcgQEAgZXh0ZXJuIE9mZnNldE51bWJlciBTcEdpc3RQYWdlQWRkTmV3SXRlbShT cEdpc3RTdGF0ZSAqc3RhdGUsIFBhZ2UgcGFnZSwKIGV4dGVybiBib29sIHNwZ3Byb3BlcnR5 KE9pZCBpbmRleF9vaWQsIGludCBhdHRubywKIAkJCQkJCUluZGV4QU1Qcm9wZXJ0eSBwcm9w LCBjb25zdCBjaGFyICpwcm9wbmFtZSwKIAkJCQkJCWJvb2wgKnJlcywgYm9vbCAqaXNudWxs KTsKK2V4dGVybiB2b2lkICpzcGdnZXRyZWxvcHRzcGVjc2V0KHZvaWQpOwogCiAvKiBzcGdk b2luc2VydC5jICovCiBleHRlcm4gdm9pZCBzcGdVcGRhdGVOb2RlTGluayhTcEdpc3RJbm5l clR1cGxlIHR1cCwgaW50IG5vZGVOLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFu ZHMvdGFibGVjbWRzLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy90YWJsZWNtZHMuaAppbmRl eCBhOWM2ODI1NjAxNy4uOTQwMzQ2YzdmYWUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2Nv bW1hbmRzL3RhYmxlY21kcy5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3RhYmxlY21k cy5oCkBAIC0zNiw3ICszNiw3IEBAIGV4dGVybiBPaWQJQWx0ZXJUYWJsZUxvb2t1cFJlbGF0 aW9uKEFsdGVyVGFibGVTdG10ICpzdG10LCBMT0NLTU9ERSBsb2NrbW9kZSk7CiBleHRlcm4g dm9pZCBBbHRlclRhYmxlKEFsdGVyVGFibGVTdG10ICpzdG10LCBMT0NLTU9ERSBsb2NrbW9k ZSwKIAkJCQkJICAgc3RydWN0IEFsdGVyVGFibGVVdGlsaXR5Q29udGV4dCAqY29udGV4dCk7 CiAKLWV4dGVybiBMT0NLTU9ERSBBbHRlclRhYmxlR2V0TG9ja0xldmVsKExpc3QgKmNtZHMp OworZXh0ZXJuIExPQ0tNT0RFIEFsdGVyVGFibGVHZXRMb2NrTGV2ZWwoT2lkIHJlbGlkLCBM aXN0ICpjbWRzKTsKIAogZXh0ZXJuIHZvaWQgQVRFeGVjQ2hhbmdlT3duZXIoT2lkIHJlbGF0 aW9uT2lkLCBPaWQgbmV3T3duZXJJZCwgYm9vbCByZWN1cnNpbmcsIExPQ0tNT0RFIGxvY2tt b2RlKTsKIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9kdW1teV9pbmRleF9hbS9k dW1teV9pbmRleF9hbS5jIGIvc3JjL3Rlc3QvbW9kdWxlcy9kdW1teV9pbmRleF9hbS9kdW1t eV9pbmRleF9hbS5jCmluZGV4IGNiZGFlN2FiN2E1Li5iNTQyNDU3NTkzNSAxMDA2NDQKLS0t IGEvc3JjL3Rlc3QvbW9kdWxlcy9kdW1teV9pbmRleF9hbS9kdW1teV9pbmRleF9hbS5jCisr KyBiL3NyYy90ZXN0L21vZHVsZXMvZHVtbXlfaW5kZXhfYW0vZHVtbXlfaW5kZXhfYW0uYwpA QCAtMTQsNyArMTQsNyBAQAogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKICNpbmNsdWRlICJh Y2Nlc3MvYW1hcGkuaCIKLSNpbmNsdWRlICJhY2Nlc3MvcmVsb3B0aW9ucy5oIgorI2luY2x1 ZGUgImFjY2Vzcy9vcHRpb25zLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9pbmRleC5oIgogI2lu Y2x1ZGUgImNvbW1hbmRzL3ZhY3V1bS5oIgogI2luY2x1ZGUgIm5vZGVzL3BhdGhub2Rlcy5o IgpAQCAtMjMsMTEgKzIzLDcgQEAKIAogUEdfTU9EVUxFX01BR0lDOwogCi0vKiBwYXJzZSB0 YWJsZSBmb3IgZmlsbFJlbE9wdGlvbnMgKi8KLXJlbG9wdF9wYXJzZV9lbHQgZGlfcmVsb3B0 X3RhYls2XTsKLQotLyogS2luZCBvZiByZWxhdGlvbiBvcHRpb25zIGZvciBkdW1teSBpbmRl eCAqLwotcmVsb3B0X2tpbmQgZGlfcmVsb3B0X2tpbmQ7Cit2b2lkCQlfUEdfaW5pdCh2b2lk KTsKIAogdHlwZWRlZiBlbnVtIER1bW15QW1FbnVtCiB7CkBAIC00Nyw3ICs0Myw3IEBAIHR5 cGVkZWYgc3RydWN0IER1bW15SW5kZXhPcHRpb25zCiAJaW50CQkJb3B0aW9uX3N0cmluZ19u dWxsX29mZnNldDsKIH0JCQlEdW1teUluZGV4T3B0aW9uczsKIAotcmVsb3B0X2VudW1fZWx0 X2RlZiBkdW1teUFtRW51bVZhbHVlc1tdID0KK3N0YXRpYyBvcHRfZW51bV9lbHRfZGVmIGR1 bW15QW1FbnVtVmFsdWVzW10gPQogewogCXsib25lIiwgRFVNTVlfQU1fRU5VTV9PTkV9LAog CXsidHdvIiwgRFVNTVlfQU1fRU5VTV9UV099LApAQCAtNjEsNzcgKzU3LDgyIEBAIFBHX0ZV TkNUSU9OX0lORk9fVjEoZGloYW5kbGVyKTsKICAqIFZhbGlkYXRpb24gZnVuY3Rpb24gZm9y IHN0cmluZyByZWxhdGlvbiBvcHRpb25zLgogICovCiBzdGF0aWMgdm9pZAotdmFsaWRhdGVf c3RyaW5nX29wdGlvbihjb25zdCBjaGFyICp2YWx1ZSkKK2RpdmFsaWRhdGVfc3RyaW5nX29w dGlvbihjb25zdCBjaGFyICp2YWx1ZSkKIHsKIAllcmVwb3J0KE5PVElDRSwKIAkJCShlcnJt c2coIm5ldyBvcHRpb24gdmFsdWUgZm9yIHN0cmluZyBwYXJhbWV0ZXIgJXMiLAogCQkJCQl2 YWx1ZSA/IHZhbHVlIDogIk5VTEwiKSkpOwogfQogCi0vKgotICogVGhpcyBmdW5jdGlvbiBj cmVhdGVzIGEgZnVsbCBzZXQgb2YgcmVsYXRpb24gb3B0aW9uIHR5cGVzLAotICogd2l0aCB2 YXJpb3VzIHBhdHRlcm5zLgotICovCi1zdGF0aWMgdm9pZAotY3JlYXRlX3JlbG9wdGlvbnNf dGFibGUodm9pZCkKK3N0YXRpYyBvcHRpb25zX3NwZWNfc2V0ICpkaV9yZWxvcHRfc3BlY3Nl dCA9IE5VTEw7Cit2b2lkCSAgICpkaWdldHJlbG9wdHNwZWNzZXQodm9pZCk7CisKK3ZvaWQg KgorZGlnZXRyZWxvcHRzcGVjc2V0KHZvaWQpCiB7Ci0JZGlfcmVsb3B0X2tpbmQgPSBhZGRf cmVsb3B0aW9uX2tpbmQoKTsKLQotCWFkZF9pbnRfcmVsb3B0aW9uKGRpX3JlbG9wdF9raW5k LCAib3B0aW9uX2ludCIsCi0JCQkJCSAgIkludGVnZXIgb3B0aW9uIGZvciBkdW1teV9pbmRl eF9hbSIsCi0JCQkJCSAgMTAsIC0xMCwgMTAwLCBBY2Nlc3NFeGNsdXNpdmVMb2NrKTsKLQlk aV9yZWxvcHRfdGFiWzBdLm9wdG5hbWUgPSAib3B0aW9uX2ludCI7Ci0JZGlfcmVsb3B0X3Rh YlswXS5vcHR0eXBlID0gUkVMT1BUX1RZUEVfSU5UOwotCWRpX3JlbG9wdF90YWJbMF0ub2Zm c2V0ID0gb2Zmc2V0b2YoRHVtbXlJbmRleE9wdGlvbnMsIG9wdGlvbl9pbnQpOwotCi0JYWRk X3JlYWxfcmVsb3B0aW9uKGRpX3JlbG9wdF9raW5kLCAib3B0aW9uX3JlYWwiLAotCQkJCQkg ICAiUmVhbCBvcHRpb24gZm9yIGR1bW15X2luZGV4X2FtIiwKLQkJCQkJICAgMy4xNDE1LCAt MTAsIDEwMCwgQWNjZXNzRXhjbHVzaXZlTG9jayk7Ci0JZGlfcmVsb3B0X3RhYlsxXS5vcHRu YW1lID0gIm9wdGlvbl9yZWFsIjsKLQlkaV9yZWxvcHRfdGFiWzFdLm9wdHR5cGUgPSBSRUxP UFRfVFlQRV9SRUFMOwotCWRpX3JlbG9wdF90YWJbMV0ub2Zmc2V0ID0gb2Zmc2V0b2YoRHVt bXlJbmRleE9wdGlvbnMsIG9wdGlvbl9yZWFsKTsKLQotCWFkZF9ib29sX3JlbG9wdGlvbihk aV9yZWxvcHRfa2luZCwgIm9wdGlvbl9ib29sIiwKLQkJCQkJICAgIkJvb2xlYW4gb3B0aW9u IGZvciBkdW1teV9pbmRleF9hbSIsCi0JCQkJCSAgIHRydWUsIEFjY2Vzc0V4Y2x1c2l2ZUxv Y2spOwotCWRpX3JlbG9wdF90YWJbMl0ub3B0bmFtZSA9ICJvcHRpb25fYm9vbCI7Ci0JZGlf cmVsb3B0X3RhYlsyXS5vcHR0eXBlID0gUkVMT1BUX1RZUEVfQk9PTDsKLQlkaV9yZWxvcHRf dGFiWzJdLm9mZnNldCA9IG9mZnNldG9mKER1bW15SW5kZXhPcHRpb25zLCBvcHRpb25fYm9v bCk7Ci0KLQlhZGRfZW51bV9yZWxvcHRpb24oZGlfcmVsb3B0X2tpbmQsICJvcHRpb25fZW51 bSIsCi0JCQkJCSAgICJFbnVtIG9wdGlvbiBmb3IgZHVtbXlfaW5kZXhfYW0iLAotCQkJCQkg ICBkdW1teUFtRW51bVZhbHVlcywKLQkJCQkJICAgRFVNTVlfQU1fRU5VTV9PTkUsCi0JCQkJ CSAgICJWYWxpZCB2YWx1ZXMgYXJlIFwib25lXCIgYW5kIFwidHdvXCIuIiwKLQkJCQkJICAg QWNjZXNzRXhjbHVzaXZlTG9jayk7Ci0JZGlfcmVsb3B0X3RhYlszXS5vcHRuYW1lID0gIm9w dGlvbl9lbnVtIjsKLQlkaV9yZWxvcHRfdGFiWzNdLm9wdHR5cGUgPSBSRUxPUFRfVFlQRV9F TlVNOwotCWRpX3JlbG9wdF90YWJbM10ub2Zmc2V0ID0gb2Zmc2V0b2YoRHVtbXlJbmRleE9w dGlvbnMsIG9wdGlvbl9lbnVtKTsKLQotCWFkZF9zdHJpbmdfcmVsb3B0aW9uKGRpX3JlbG9w dF9raW5kLCAib3B0aW9uX3N0cmluZ192YWwiLAotCQkJCQkJICJTdHJpbmcgb3B0aW9uIGZv ciBkdW1teV9pbmRleF9hbSB3aXRoIG5vbi1OVUxMIGRlZmF1bHQiLAotCQkJCQkJICJEZWZh dWx0VmFsdWUiLCAmdmFsaWRhdGVfc3RyaW5nX29wdGlvbiwKLQkJCQkJCSBBY2Nlc3NFeGNs dXNpdmVMb2NrKTsKLQlkaV9yZWxvcHRfdGFiWzRdLm9wdG5hbWUgPSAib3B0aW9uX3N0cmlu Z192YWwiOwotCWRpX3JlbG9wdF90YWJbNF0ub3B0dHlwZSA9IFJFTE9QVF9UWVBFX1NUUklO RzsKLQlkaV9yZWxvcHRfdGFiWzRdLm9mZnNldCA9IG9mZnNldG9mKER1bW15SW5kZXhPcHRp b25zLAotCQkJCQkJCQkJICAgb3B0aW9uX3N0cmluZ192YWxfb2Zmc2V0KTsKKwlpZiAoZGlf cmVsb3B0X3NwZWNzZXQpCisJCXJldHVybiBkaV9yZWxvcHRfc3BlY3NldDsKKworCWRpX3Jl bG9wdF9zcGVjc2V0ID0gYWxsb2NhdGVPcHRpb25zU3BlY1NldChOVUxMLAorCQkJCQkJCQkJ CQkgICBzaXplb2YoRHVtbXlJbmRleE9wdGlvbnMpLCBmYWxzZSwgNik7CisKKwlvcHRpb25z U3BlY1NldEFkZEludCgKKwkJCQkJCSBkaV9yZWxvcHRfc3BlY3NldCwgIm9wdGlvbl9pbnQi LAorCQkJCQkJICJJbnRlZ2VyIG9wdGlvbiBmb3IgZHVtbXlfaW5kZXhfYW0iLAorCQkJCQkJ IEFjY2Vzc0V4Y2x1c2l2ZUxvY2ssCisJCQkJCQkgb2Zmc2V0b2YoRHVtbXlJbmRleE9wdGlv bnMsIG9wdGlvbl9pbnQpLCBOVUxMLAorCQkJCQkJIDEwLCAtMTAsIDEwMAorCQkpOworCisK KwlvcHRpb25zU3BlY1NldEFkZFJlYWwoCisJCQkJCQkgIGRpX3JlbG9wdF9zcGVjc2V0LCAi b3B0aW9uX3JlYWwiLAorCQkJCQkJICAiUmVhbCBvcHRpb24gZm9yIGR1bW15X2luZGV4X2Ft IiwKKwkJCQkJCSAgQWNjZXNzRXhjbHVzaXZlTG9jaywKKwkJCQkJCSAgb2Zmc2V0b2YoRHVt bXlJbmRleE9wdGlvbnMsIG9wdGlvbl9yZWFsKSwgTlVMTCwKKwkJCQkJCSAgMy4xNDE1LCAt MTAsIDEwMAorCQkpOworCisJb3B0aW9uc1NwZWNTZXRBZGRCb29sKAorCQkJCQkJICBkaV9y ZWxvcHRfc3BlY3NldCwgIm9wdGlvbl9ib29sIiwKKwkJCQkJCSAgIkJvb2xlYW4gb3B0aW9u IGZvciBkdW1teV9pbmRleF9hbSIsCisJCQkJCQkgIEFjY2Vzc0V4Y2x1c2l2ZUxvY2ssCisJ CQkJCQkgIG9mZnNldG9mKER1bW15SW5kZXhPcHRpb25zLCBvcHRpb25fYm9vbCksIE5VTEws IHRydWUKKwkJKTsKKworCW9wdGlvbnNTcGVjU2V0QWRkRW51bShkaV9yZWxvcHRfc3BlY3Nl dCwgIm9wdGlvbl9lbnVtIiwKKwkJCQkJCSAgIkVudW0gb3B0aW9uIGZvciBkdW1teV9pbmRl eF9hbSIsCisJCQkJCQkgIEFjY2Vzc0V4Y2x1c2l2ZUxvY2ssCisJCQkJCQkgIG9mZnNldG9m KER1bW15SW5kZXhPcHRpb25zLCBvcHRpb25fZW51bSksIE5VTEwsCisJCQkJCQkgIGR1bW15 QW1FbnVtVmFsdWVzLAorCQkJCQkJICBEVU1NWV9BTV9FTlVNX09ORSwKKwkJCQkJCSAgIlZh bGlkIHZhbHVlcyBhcmUgXCJvbmVcIiBhbmQgXCJ0d29cIi4iCisJCSk7CisKKwlvcHRpb25z U3BlY1NldEFkZFN0cmluZyhkaV9yZWxvcHRfc3BlY3NldCwgIm9wdGlvbl9zdHJpbmdfdmFs IiwKKwkJCQkJCQkiU3RyaW5nIG9wdGlvbiBmb3IgZHVtbXlfaW5kZXhfYW0gd2l0aCBub24t TlVMTCBkZWZhdWx0IiwKKwkJCQkJCQlBY2Nlc3NFeGNsdXNpdmVMb2NrLAorCQkJCQkJCW9m ZnNldG9mKER1bW15SW5kZXhPcHRpb25zLCBvcHRpb25fc3RyaW5nX3ZhbF9vZmZzZXQpLCBO VUxMLAorCQkJCQkJCSJEZWZhdWx0VmFsdWUiLCAmZGl2YWxpZGF0ZV9zdHJpbmdfb3B0aW9u LCBOVUxMCisJCSk7CiAKIAkvKgogCSAqIFN0cmluZyBvcHRpb24gZm9yIGR1bW15X2luZGV4 X2FtIHdpdGggTlVMTCBkZWZhdWx0LCBhbmQgd2l0aG91dAogCSAqIGRlc2NyaXB0aW9uLgog CSAqLwotCWFkZF9zdHJpbmdfcmVsb3B0aW9uKGRpX3JlbG9wdF9raW5kLCAib3B0aW9uX3N0 cmluZ19udWxsIiwKLQkJCQkJCSBOVUxMLAkvKiBkZXNjcmlwdGlvbiAqLwotCQkJCQkJIE5V TEwsICZ2YWxpZGF0ZV9zdHJpbmdfb3B0aW9uLAotCQkJCQkJIEFjY2Vzc0V4Y2x1c2l2ZUxv Y2spOwotCWRpX3JlbG9wdF90YWJbNV0ub3B0bmFtZSA9ICJvcHRpb25fc3RyaW5nX251bGwi OwotCWRpX3JlbG9wdF90YWJbNV0ub3B0dHlwZSA9IFJFTE9QVF9UWVBFX1NUUklORzsKLQlk aV9yZWxvcHRfdGFiWzVdLm9mZnNldCA9IG9mZnNldG9mKER1bW15SW5kZXhPcHRpb25zLAot CQkJCQkJCQkJICAgb3B0aW9uX3N0cmluZ19udWxsX29mZnNldCk7CisKKwlvcHRpb25zU3Bl Y1NldEFkZFN0cmluZyhkaV9yZWxvcHRfc3BlY3NldCwgIm9wdGlvbl9zdHJpbmdfbnVsbCIs CisJCQkJCQkJTlVMTCwJLyogZGVzY3JpcHRpb24gKi8KKwkJCQkJCQlBY2Nlc3NFeGNsdXNp dmVMb2NrLAorCQkJCQkJCW9mZnNldG9mKER1bW15SW5kZXhPcHRpb25zLCBvcHRpb25fc3Ry aW5nX251bGxfb2Zmc2V0KSwgTlVMTCwKKwkJCQkJCQlOVUxMLCAmZGl2YWxpZGF0ZV9zdHJp bmdfb3B0aW9uLCBOVUxMCisJCSk7CisKKwlyZXR1cm4gZGlfcmVsb3B0X3NwZWNzZXQ7CiB9 CiAKIAorCiAvKgogICogQnVpbGQgYSBuZXcgaW5kZXguCiAgKi8KQEAgLTIxNiwxOSArMjE3 LDYgQEAgZGljb3N0ZXN0aW1hdGUoUGxhbm5lckluZm8gKnJvb3QsIEluZGV4UGF0aCAqcGF0 aCwgZG91YmxlIGxvb3BfY291bnQsCiAJKmluZGV4UGFnZXMgPSAxOwogfQogCi0vKgotICog UGFyc2UgcmVsYXRpb24gb3B0aW9ucyBmb3IgaW5kZXggQU0sIHJldHVybmluZyBhIER1bW15 SW5kZXhPcHRpb25zCi0gKiBzdHJ1Y3R1cmUgZmlsbGVkIHdpdGggb3B0aW9uIHZhbHVlcy4K LSAqLwotc3RhdGljIGJ5dGVhICoKLWRpb3B0aW9ucyhEYXR1bSByZWxvcHRpb25zLCBib29s IHZhbGlkYXRlKQotewotCXJldHVybiAoYnl0ZWEgKikgYnVpbGRfcmVsb3B0aW9ucyhyZWxv cHRpb25zLCB2YWxpZGF0ZSwKLQkJCQkJCQkJCSAgZGlfcmVsb3B0X2tpbmQsCi0JCQkJCQkJ CQkgIHNpemVvZihEdW1teUluZGV4T3B0aW9ucyksCi0JCQkJCQkJCQkgIGRpX3JlbG9wdF90 YWIsIGxlbmd0aG9mKGRpX3JlbG9wdF90YWIpKTsKLX0KLQogLyoKICAqIFZhbGlkYXRvciBm b3IgaW5kZXggQU0uCiAgKi8KQEAgLTMwNyw3ICsyOTUsNiBAQCBkaWhhbmRsZXIoUEdfRlVO Q1RJT05fQVJHUykKIAlhbXJvdXRpbmUtPmFtdmFjdXVtY2xlYW51cCA9IGRpdmFjdXVtY2xl YW51cDsKIAlhbXJvdXRpbmUtPmFtY2FucmV0dXJuID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFt Y29zdGVzdGltYXRlID0gZGljb3N0ZXN0aW1hdGU7Ci0JYW1yb3V0aW5lLT5hbW9wdGlvbnMg PSBkaW9wdGlvbnM7CiAJYW1yb3V0aW5lLT5hbXByb3BlcnR5ID0gTlVMTDsKIAlhbXJvdXRp bmUtPmFtYnVpbGRwaGFzZW5hbWUgPSBOVUxMOwogCWFtcm91dGluZS0+YW12YWxpZGF0ZSA9 IGRpdmFsaWRhdGU7CkBAIC0zMjEsMTIgKzMwOCw3IEBAIGRpaGFuZGxlcihQR19GVU5DVElP Tl9BUkdTKQogCWFtcm91dGluZS0+YW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9IE5VTEw7CiAJ YW1yb3V0aW5lLT5hbWluaXRwYXJhbGxlbHNjYW4gPSBOVUxMOwogCWFtcm91dGluZS0+YW1w YXJhbGxlbHJlc2NhbiA9IE5VTEw7CisJYW1yb3V0aW5lLT5hbXJlbG9wdHNwZWNzZXQgPSBk aWdldHJlbG9wdHNwZWNzZXQ7CiAKIAlQR19SRVRVUk5fUE9JTlRFUihhbXJvdXRpbmUpOwog fQotCi12b2lkCi1fUEdfaW5pdCh2b2lkKQotewotCWNyZWF0ZV9yZWxvcHRpb25zX3RhYmxl KCk7Ci19CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3JlbG9wdGlv bnMub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9yZWxvcHRpb25zLm91dAppbmRl eCBiNmFlZjZmNjU0Yy4uNzJmZWU0MTc2YjcgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvcmVsb3B0aW9ucy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9yZWxvcHRpb25zLm91dApAQCAtMTY0LDcgKzE2NCw3IEBAIFNFTEVDVCByZWxvcHRp b25zIEZST00gcGdfY2xhc3MgV0hFUkUgb2lkID0gOnRvYXN0X29pZDsKIAogLS0gRmFpbCBv biBub24tZXhpc3RlbnQgb3B0aW9ucyBpbiB0b2FzdCBuYW1lc3BhY2UKIENSRUFURSBUQUJM RSByZWxvcHRpb25zX3Rlc3QyIChpIGludCkgV0lUSCAodG9hc3Qubm90X2V4aXN0aW5nX29w dGlvbiA9IDQyKTsKLUVSUk9SOiAgdW5yZWNvZ25pemVkIHBhcmFtZXRlciAibm90X2V4aXN0 aW5nX29wdGlvbiIKK0VSUk9SOiAgdW5yZWNvZ25pemVkIHBhcmFtZXRlciAidG9hc3Qubm90 X2V4aXN0aW5nX29wdGlvbiIKIC0tIE1peCBUT0FTVCAmIGhlYXAKIERST1AgVEFCTEUgcmVs b3B0aW9uc190ZXN0OwogQ1JFQVRFIFRBQkxFIHJlbG9wdGlvbnNfdGVzdCAocyBWQVJDSEFS KSBXSVRICkBAIC0xODMsNiArMTgzLDE3IEBAIFNFTEVDVCByZWxvcHRpb25zIEZST00gcGdf Y2xhc3MgV0hFUkUgb2lkID0gKAogIHthdXRvdmFjdXVtX3ZhY3V1bV9jb3N0X2RlbGF5PTIz fQogKDEgcm93KQogCistLSBDYW4gcmVzZXQgb3B0aW9uIHRoYXQgaXMgbm90IGFsbG93ZWQs IGJ1dCBmb3Igc29tZSByZWFzb24gaXMgYWxyZWFkeSBzZXQKK1VQREFURSBwZ19jbGFzcwor CVNFVCByZWxvcHRpb25zID0gJ3tmaWxsZmFjdG9yPTEzLGF1dG92YWN1dW1fZW5hYmxlZD1m YWxzZSxpbGxlZ2FsX29wdGlvbj00fScKKwlXSEVSRSBvaWQgPSAncmVsb3B0aW9uc190ZXN0 Jzo6cmVnY2xhc3M7CitBTFRFUiBUQUJMRSByZWxvcHRpb25zX3Rlc3QgUkVTRVQgKGlsbGVn YWxfb3B0aW9uKTsKK1NFTEVDVCByZWxvcHRpb25zIEZST00gcGdfY2xhc3MgV0hFUkUgb2lk ID0gJ3JlbG9wdGlvbnNfdGVzdCc6OnJlZ2NsYXNzOworICAgICAgICAgICAgICAgIHJlbG9w dGlvbnMgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyB7ZmlsbGZhY3Rvcj0xMyxhdXRvdmFjdXVtX2VuYWJsZWQ9ZmFsc2V9 CisoMSByb3cpCisKIC0tCiAtLSBDUkVBVEUgSU5ERVgsIEFMVEVSIElOREVYIGZvciBidHJl ZXMKIC0tCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9yZWxvcHRpb25zLnNx bCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3JlbG9wdGlvbnMuc3FsCmluZGV4IDQyNTJiMDIw MmY0Li5mYWRjZTMzODRkNCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcmVs b3B0aW9ucy5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcmVsb3B0aW9ucy5zcWwK QEAgLTEwNSw2ICsxMDUsMTMgQEAgU0VMRUNUIHJlbG9wdGlvbnMgRlJPTSBwZ19jbGFzcyBX SEVSRSBvaWQgPSAncmVsb3B0aW9uc190ZXN0Jzo6cmVnY2xhc3M7CiBTRUxFQ1QgcmVsb3B0 aW9ucyBGUk9NIHBnX2NsYXNzIFdIRVJFIG9pZCA9ICgKIAlTRUxFQ1QgcmVsdG9hc3RyZWxp ZCBGUk9NIHBnX2NsYXNzIFdIRVJFIG9pZCA9ICdyZWxvcHRpb25zX3Rlc3QnOjpyZWdjbGFz cyk7CiAKKy0tIENhbiByZXNldCBvcHRpb24gdGhhdCBpcyBub3QgYWxsb3dlZCwgYnV0IGZv ciBzb21lIHJlYXNvbiBpcyBhbHJlYWR5IHNldAorVVBEQVRFIHBnX2NsYXNzCisJU0VUIHJl bG9wdGlvbnMgPSAne2ZpbGxmYWN0b3I9MTMsYXV0b3ZhY3V1bV9lbmFibGVkPWZhbHNlLGls bGVnYWxfb3B0aW9uPTR9JworCVdIRVJFIG9pZCA9ICdyZWxvcHRpb25zX3Rlc3QnOjpyZWdj bGFzczsKK0FMVEVSIFRBQkxFIHJlbG9wdGlvbnNfdGVzdCBSRVNFVCAoaWxsZWdhbF9vcHRp b24pOworU0VMRUNUIHJlbG9wdGlvbnMgRlJPTSBwZ19jbGFzcyBXSEVSRSBvaWQgPSAncmVs b3B0aW9uc190ZXN0Jzo6cmVnY2xhc3M7CisKIC0tCiAtLSBDUkVBVEUgSU5ERVgsIEFMVEVS IElOREVYIGZvciBidHJlZXMKIC0tCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4 IDM4YTg2NTc1ZTFjLi41ZmUyOTk4NjkxMSAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxp c3QKQEAgLTMxNjgsOSArMzE2OCw5IEBAIGFtZ2V0dHVwbGVfZnVuY3Rpb24KIGFtaW5pdHBh cmFsbGVsc2Nhbl9mdW5jdGlvbgogYW1pbnNlcnRfZnVuY3Rpb24KIGFtbWFya3Bvc19mdW5j dGlvbgotYW1vcHRpb25zX2Z1bmN0aW9uCiBhbXBhcmFsbGVscmVzY2FuX2Z1bmN0aW9uCiBh bXByb3BlcnR5X2Z1bmN0aW9uCithbXJlbG9wdHNwZWNzZXRfZnVuY3Rpb24KIGFtcmVzY2Fu X2Z1bmN0aW9uCiBhbXJlc3RycG9zX2Z1bmN0aW9uCiBhbXZhY3V1bWNsZWFudXBfZnVuY3Rp b24KQEAgLTMzMzEsNiArMzMzMSw3IEBAIGZpbGVfdHlwZV90CiBmaWxlaGFzaF9oYXNoCiBm aWxlaGFzaF9pdGVyYXRvcgogZmlsZW1hcF90CitmaWxsX3N0cmluZ19vcHRpb24KIGZpbGxf c3RyaW5nX3JlbG9wdAogZmluYWxpemVfcHJpbW5vZGVfY29udGV4dAogZmluZF9kZXBlbmRl bnRfcGh2c19jb250ZXh0CkBAIC0zNDYwLDcgKzM0NjEsNiBAQCBsaWJwcV9zb3VyY2UKIGxp bmVfdAogbGluZW5vX3QKIGxpc3Rfc29ydF9jb21wYXJhdG9yCi1sb2NhbF9yZWxvcHQKIGxv Y2FsX3JlbG9wdHMKIGxvY2FsX3NvdXJjZQogbG9jYWxlX3QKQEAgLTM1MTksNiArMzUxOSwx OCBAQCBvaWR2ZWN0b3IKIG9uX2RzbV9kZXRhY2hfY2FsbGJhY2sKIG9uX2V4aXRfbmljZWx5 X2NhbGxiYWNrCiBvcGVuc3NsX3Rsc19pbml0X2hvb2tfdHlwCitvcHRfZW51bV9lbHRfZGVm CitvcHRpb25fc3BlY19iYXNpYworb3B0aW9uX3NwZWNfYm9vbAorb3B0aW9uX3NwZWNfZW51 bQorb3B0aW9uX3NwZWNfaW50CitvcHRpb25fc3BlY19yZWFsCitvcHRpb25fc3BlY19zdHJp bmcKK29wdGlvbl90eXBlCitvcHRpb25fdmFsdWUKK29wdGlvbl92YWx1ZV9wb3N0dmFsaWRh dGUKK29wdGlvbl92YWx1ZV9zdGF0dXMKK29wdGlvbnNfc3BlY19zZXQKIG9zc2xfRVZQX2Np cGhlcl9mdW5jCiBvdGhlcgogb3V0cHV0X3R5cGUKQEAgLTM2MzMsNiArMzY0NSw3IEBAIHBv aW50ZXIKIHBvbHltb3JwaGljX2FjdHVhbHMKIHBvc190cmdtCiBwb3N0X3BhcnNlX2FuYWx5 emVfaG9va190eXBlCitwb3N0cHJvY2Vzc19ieXRlYV9vcHRpb25zX2Z1bmN0aW9uCiBwb3N0 cHJvY2Vzc19yZXN1bHRfZnVuY3Rpb24KIHBxYm9vbAogcHFzaWdmdW5jCkBAIC0zNjkyLDE2 ICszNzA1LDYgQEAgcmVnaXN0ZXJlZF9idWZmZXIKIHJlZ21hdGNoX3QKIHJlZ29mZl90CiBy ZWdwcm9jCi1yZWxvcHRfYm9vbAotcmVsb3B0X2VudW0KLXJlbG9wdF9lbnVtX2VsdF9kZWYK LXJlbG9wdF9nZW4KLXJlbG9wdF9pbnQKLXJlbG9wdF9raW5kCi1yZWxvcHRfcGFyc2VfZWx0 Ci1yZWxvcHRfcmVhbAotcmVsb3B0X3N0cmluZwotcmVsb3B0X3R5cGUKIHJlbG9wdF92YWx1 ZQogcmVsb3B0c192YWxpZGF0b3IKIHJlbW90ZUNvbm4KQEAgLTM4NTgsNiArMzg2MSw3IEBA IHV1aWRfc29ydHN1cHBvcnRfc3RhdGUKIHV1aWRfdAogdmFfbGlzdAogdmFjdXVtaW5nT3B0 aW9ucwordmFsaWRhdGVfc3RyaW5nX29wdGlvbgogdmFsaWRhdGVfc3RyaW5nX3JlbG9wdAog dmFyYXR0X2V4cGFuZGVkCiB2YXJhdHRyaWJfMWIKLS0gCjIuNDAuMQoK --------------C0OIlYZV84Q5xt8yrUdZjoIp--