Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nU2WI-0004F4-IQ for pgsql-hackers@arkaria.postgresql.org; Tue, 15 Mar 2022 08:27:09 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nU2WG-0006Nc-Ky for pgsql-hackers@arkaria.postgresql.org; Tue, 15 Mar 2022 08:27:04 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nU2WF-0006NS-Cs for pgsql-hackers@lists.postgresql.org; Tue, 15 Mar 2022 08:27:04 +0000 Received: from mail-wr1-x431.google.com ([2a00:1450:4864:20::431]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1nU2W6-0001q7-Ei for pgsql-hackers@lists.postgresql.org; Tue, 15 Mar 2022 08:27:02 +0000 Received: by mail-wr1-x431.google.com with SMTP id p9so27707619wra.12 for ; Tue, 15 Mar 2022 01:26:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; h=message-id:date:mime-version:user-agent:subject:content-language:to :cc:references:from:in-reply-to; bh=WncWm3VczSbDhDejCkSuEOYj0J5wn0BYK3noIw4Q/9w=; b=IaHvdevbzL8saPXEVeoRL4RpHFIzDvP0fJIiCjXvNEBIL04OJqAEs7bVaXLdoaaYuP IXsuQuUvN+D3d65hMRvJ39QPqPd1PFkTDgQ5+8SX2pmRGdfHzn9O5XmrLpwHTSMy6btI ZUmpN0h6FhlK1+lt48U55OtBkGF+q+G0Lh+kuol/n0iDwMkuXc4vARJpZ5tdbgZzc5Ep tE5Rydbz8k35k3iGjxc66pENud8SCbpofhW8Pw5k5psdf3V/W1CVUWW9SCvf5xfp7mYu 6o+KCEDDOK6HB0obNLnhyDr9NMkSyU6Cp4zcgwCG33EJsJf+zXQ8bOiEyiPjLxbJUjpz 0H2Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent:subject :content-language:to:cc:references:from:in-reply-to; bh=WncWm3VczSbDhDejCkSuEOYj0J5wn0BYK3noIw4Q/9w=; b=RcDozQ+ZKJImykfkUypyyOgzv4vxnVnhHdU5lAiGP9epx4+c+Z7R/5+g6xRXmaolBF wnyJpVFovW2OVAWXL6OGqVzxt+bO0eEOngU0plQTln9oU2IyGZaBfqC7Mzyna3OvcPsK NmdkWXQyO8DWr7L5eOOByevlLIl6Havl//u9eQEGE7yGVobazObVnFE/hMy48f0i0XjF UWaZJOuJCV/l+t3r5OFrRL39wrNsVqRVlXJTdN6ntwBnM26BizwxQVJZYPq2AdMZPI6r DdSdF86EIsZ/SC5vGU10ueMZz/KPxr+6EnBV18huhJWTCHIaZl8Pov0GeGvt+XdcCns/ OScQ== X-Gm-Message-State: AOAM532kMGuSNPw5cY5xcj3ERaZoPEvIIqQ4iL6rl9nsiXXtCQ31PzAZ NDKzx95Ib0uuSxs7OOqrya9Kw8IzqvimHBracHYlz6ayhuWuMa2m7KCFGAgAJlNXH5/U/aNSGgX muvVCgrOp9CcUl5hxlJJCMkY/FGFtHl/jXDaRyAIzp2RWMgW6gzctby2/eyu8t0w4mSO+fH6uDp DxAp+Z3bRf5DVNwBuQIij/1SNMLNswCY93pdpdDilfy3lrRI+1ZSPs X-Google-Smtp-Source: ABdhPJx515Mu/NU2LcPIqc22kRHP24wLK0+M2u7e6hgA4AJ7uWDcc/qvLl6CW/IjAoWkhSOv6li3ww== X-Received: by 2002:a05:6000:2c9:b0:1f0:49aa:d347 with SMTP id o9-20020a05600002c900b001f049aad347mr19501977wry.453.1647332812819; Tue, 15 Mar 2022 01:26:52 -0700 (PDT) Received: from [10.137.0.18] (cst-prg-83-220.cust.vodafone.cz. [46.135.83.220]) by smtp.gmail.com with ESMTPSA id z5-20020a05600c0a0500b0037bb8df81a2sm1905148wmp.13.2022.03.15.01.26.50 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 15 Mar 2022 01:26:52 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------iSa3g31YLXTysH0TQ2t1zJtF" Message-ID: <9af89543-3d17-4c98-59de-1daa5bceeb06@enterprisedb.com> Date: Tue, 15 Mar 2022 09:26:47 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.5.0 Subject: Re: POC: GROUP BY optimization Content-Language: en-US To: "Andrey V. Lepikhov" , Teodor Sigaev Cc: Tomas Vondra , PostgreSQL Developers References: <20201026104040.6bigvej6f55vjvgp@localhost> <20201027201509.jfv6sfhrmxhdwlvk@development> <20201029145025.tn3tekboot37nkbf@localhost> <22c44f98-bfa8-8630-62b5-5155e11eb284@enterprisedb.com> <006667af-fc50-0627-4be7-5d9cf665219f@enterprisedb.com> <4ee5b15c-1ce0-59c7-8d4a-a1fd68ee0d12@postgrespro.ru> <721b3ff9-f214-f5d4-86c7-bae515bbec18@enterprisedb.com> <7bea462e-8c3e-0f8c-c7d5-f4daa12f3baf@postgrespro.ru> From: Tomas Vondra In-Reply-To: <7bea462e-8c3e-0f8c-c7d5-f4daa12f3baf@postgrespro.ru> X-CLOUD-SEC-AV-Info: enterprisedb,google_mail,monitor X-CLOUD-SEC-AV-Sent: true X-Gm-Spam: 0 X-Gm-Phishy: 0 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. --------------iSa3g31YLXTysH0TQ2t1zJtF Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 2/10/22 10:00, Andrey V. Lepikhov wrote: > On 1/22/22 01:34, Tomas Vondra wrote: >> > > I rebased (with minor fixes) this patch onto current master. > > Also, second patch dedicated to a problem of "varno 0" (fake_var). > I think, this case should make the same estimations as in the case of > varno != 0, but no any stats found. So I suppose to restrict number of > groups with min of a number of incoming tuples and DEFAULT_NUM_DISTINCT > value. > Thanks for the rebase. The two proposed changes (tweaked costing and simplified fake_var handling) seem fine to me. I think the last thing that needs to be done is cleanup of the debug GUCs, which I added to allow easier experimentation with the patch. I probably won't remove the GUCs entirely, though. I plan to add a single GUC that would enable/disable this optimization. I'm not a huge fan of adding more and more GUCs, but in this case it's probably the right thing to do given the complexity of estimating cost with correlated columns etc. regards -- Tomas Vondra EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company --------------iSa3g31YLXTysH0TQ2t1zJtF Content-Type: text/x-patch; charset=UTF-8; name="0001-Optimize-order-of-GROUP-BY-keys-20220315.patch" Content-Disposition: attachment; filename="0001-Optimize-order-of-GROUP-BY-keys-20220315.patch" Content-Transfer-Encoding: base64 RnJvbSBkY2E1MGEyOGIwYmUyMWRlY2RlMzYyODMwMmEyZjg1NDY4NzVlODg0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogRnJpLCAyMSBKYW4gMjAyMiAyMDoyMjoxNCArMDEwMApTdWJq ZWN0OiBbUEFUQ0ggMS8zXSBPcHRpbWl6ZSBvcmRlciBvZiBHUk9VUCBCWSBrZXlzCgpXaGVu IGV2YWx1YXRpbmcgYSBxdWVyeSB3aXRoIGEgbXVsdGktY29sdW1uIEdST1VQIEJZIGNsYXVz ZSB1c2luZyBzb3J0LAp0aGUgY29zdCBtYXkgYmUgaGVhdmlseSBkZXBlbmRlbnQgb24gdGhl IG9yZGVyIGluIHdoaWNoIHRoZSBrZXlzIGFyZQpjb21wYXJlZCB3aGVuIGJ1aWxkaW5nIHRo ZSBncm91cHMuIEdyb3VwaW5nIGRvZXMgbm90IGltcGx5IGFueSBvcmRlcmluZywKc28gd2Un cmUgYWxsb3dlZCB0byBjb21wYXJlIHRoZSBrZXlzIGluIGFyYml0cmFyeSBvcmRlciwgYW5k IGEgSGFzaCBBZ2cKbGV2ZXJhZ2VzIHRoaXMuIEJ1dCBmb3IgR3JvdXAgQWdnLCB3ZSBzaW1w bHkgY29tcGFyZWQga2V5cyBpbiB0aGUgb3JkZXIKYXMgc3BlY2lmaWVkIGluIHRoZSBxdWVy eS4gVGhpcyBjb21taXQgZXhwbG9yZXMgYWx0ZXJuYXRpdmUgb3JkZXJpbmcgb2YKdGhlIGtl eXMsIHRyeWluZyB0byBmaW5kIGEgY2hlYXBlciBvbmUuCgpUbyBwaWNrIHRoZSBvcHRpbWFs IG9yZGVyIG9mIGNvbXBhcmlzb25zLCBtdWx0aXBsZSBwYXJhbWV0ZXMgbmVlZCB0byBiZQpj b25zaWRlcmVkLCBib3RoIGxvY2FsIGFuZCBnbG9iYWwgb25lcy4gSW50dWl0aXZlbHksIGl0 J3MgYmV0dGVyIHRvCmxlYXZlIG1vcmUgZXhwZW5zaXZlIGNvbXBhcmlvbnMgKGZvciBjb21w bGV4IGRhdGEgdHlwZXMgZXRjLikgYXQgdGhlCnZlcnkgZW5kLCBiZWNhdXNlIG1heWJlIG9u ZSBvZiB0aGUgZWFybGllciBjb21wYXJpc29ucyB3aWxsIGJlIGVub3VnaCB0bwptYWtlIGEg ZGVjaXNpb24sIGFuZCB0aGUgZXhwZW5zaXZlIGNvbXBhcmlzb24gd2lsbCBiZSB1bm5lY2Vz c2FyeS4gVGhlCm90aGVyIGxvY2FsIHBhcmFtZXRlciBpcyBjYXJkaW5hbGl0eSAtIHRoZSBo aWdoZXIgdGhlIGNhcmRpbmFsaXR5IG9mIGEKa2V5LCB0aGUgbG93ZXIgdGhlIHByb2JhYmls aXR5IHdlJ2xsIG5lZWQgdG8gY29tcGFyZSBhZGRpdGlvbmFsIGtleXMuIFdlCmV4cGxvcmUg cG9zc2libGUgb3JkZXJpbmdzIGJ5IGEgY29tYmluYXRpb24gb2YgZXhoYXVzdGl2ZSBhbmQg Z3JlZWR5CmFwcHJvYWNoLCBhbmQgcGljayB0aGUgY2hlYXBlc3Qgb3JkZXJpbmcuCgpCdXQg dGhlcmUgYXJlIGdsb2JhbCBwYXJhbWV0ZXJzIHRvbywgaW4gdGhlIHNlbnNlIHRoYXQgd2Ug Y2FuJ3QgZnVsbHkKZXZhbHVhdGUgdGhlbSBhdCB0aGUgcG9pbnQgd2hlbiBjcmVhdGluZyB0 aGUgc29ydC4gRm9yIGV4YW1wbGUsIHRoZXJlCm1pZ2h0IGJlIGFuIE9SREVSIEJZIGNsYXVz ZSwgb3IgYW5vdGhlciBvcmRlcmluZy1kZXBlbmRlbnQgb3BlcmF0aW9uLApoaWdoZXIgdXAg aW4gdGhlIHF1ZXJ5IHBsYW4uIFRoZSBwYXRoIG1heSBiZSBhbHJlYWR5IHNvcnRlZCBieSAo c29tZQpvZikgdGhlIGtleXMsIGluIHdoaWNoIGNhc2Ugd2UgY2FuIGVpdGhlciB1c2UgaW5j cmVtZW50YWwgc29ydCBvciBldmVuCnNraXAgdGhlIHNvcnQgZW50aXJlbHkuIFNvIHdlIGNv bnNpZGVyIHZhcmlvdXMgYWRkaXRpb25hbCBwYXRoa2V5cyBpbgphZGRpdGlvbiB0byB0aGUg ImNoZWFwZXJzIGNvbXBhcmlvbiIgb3JkZXIuCgpUaGUgb3JpZ2luYWwgcGF0Y2ggd2FzIHBy b3Bvc2VkIGJ5IFRlb2RvciBTaWdhZXYsIGFuZCBsYXRlciByZXdvcmtlZCBhbmQKaW1wcm92 ZWQgYnkgRG1pdHJ5IERvbGdvdi4gUmV2aWV3cyBieSBhIG51bWJlciBvZiBwZW9wbGUsIGlu Y2x1ZGluZyBtZSwKQW5kcmV5IExlcGlraG92LCBDbGF1ZGlvIEZyZWlyZSBhbmQgSWJyYXIg QWhtZWQuCgpBdXRob3I6IERtaXRyeSBEb2xnb3YsIFRlb2RvciBTaWdhZXYKUmV2aWV3ZWQt Ynk6IFRvbWFzIFZvbmRyYSwgQW5kcmV5IExlcGlraG92LCBDbGF1ZGlvIEZyZWlyZSwgSWJy YXIgQWhtZWQKRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS83Yzc5ZTZhNS04NTk3 LTc0ZTgtMDY3MS0xYzM5ZDEyNGM5ZDYlNDBzaWdhZXYucnUKRGlzY3Vzc2lvbjogaHR0cHM6 Ly9wb3N0Z3IuZXMvbS9DQSUyQnE2emNXXzRvMk5DMHp1dExrT0pQc0Z0ODBtZWdTcFhfZFZS bzZHSzlQQy1KeF9BZyU0MG1haWwuZ21haWwuY29tCi0tLQogLi4uL3Bvc3RncmVzX2Zkdy9l eHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0ICAgIHwgIDE1ICstCiBzcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGF0aC9jb3N0c2l6ZS5jICAgICAgICAgfCAzNjkgKysrKysrKysrLQogc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BhdGgvZXF1aXZjbGFzcy5jICAgICAgIHwgIDEzICstCiBzcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9wYXRoa2V5cy5jICAgICAgICAgfCA1ODAgKysrKysr KysrKysrKysrKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jICAgICAg ICAgIHwgNjUzICsrKysrKysrKystLS0tLS0tLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0 aWwvcGF0aG5vZGUuYyAgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC91dGlscy9hZHQv c2VsZnVuY3MuYyAgICAgICAgICAgICAgfCAgMzcgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL21p c2MvZ3VjLmMgICAgICAgICAgICAgICAgICB8ICAzMiArCiBzcmMvaW5jbHVkZS9ub2Rlcy9u b2Rlcy5oICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvbm9kZXMv cGF0aG5vZGVzLmggICAgICAgICAgICAgICAgIHwgIDEwICsKIHNyYy9pbmNsdWRlL29wdGlt aXplci9jb3N0LmggICAgICAgICAgICAgICAgICB8ICAgNCArLQogc3JjL2luY2x1ZGUvb3B0 aW1pemVyL3BhdGhzLmggICAgICAgICAgICAgICAgIHwgIDExICsKIHNyYy9pbmNsdWRlL3V0 aWxzL3NlbGZ1bmNzLmggICAgICAgICAgICAgICAgICB8ICAgNSArCiBzcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL2FnZ3JlZ2F0ZXMub3V0ICAgICAgfCAyNDQgKysrKysrLQogc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9ndWMub3V0ICAgICAgICAgICAgIHwgICA5ICstCiAuLi4v cmVncmVzcy9leHBlY3RlZC9pbmNyZW1lbnRhbF9zb3J0Lm91dCAgICAgfCAgIDIgKy0KIHNy Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9pbi5vdXQgICAgICAgICAgICB8ICA1MSArLQog Li4uL3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0aW9uX2FnZ3JlZ2F0ZS5vdXQgIHwgMTM2ICsr LS0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0aW9uX2pvaW4ub3V0ICB8ICA3 NSArLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC91bmlvbi5vdXQgICAgICAgICAgIHwg IDYwICstCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9hZ2dyZWdhdGVzLnNxbCAgICAgICAgICAg fCAgOTkgKysrCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9pbmNyZW1lbnRhbF9zb3J0LnNxbCAg ICAgfCAgIDIgKy0KIDIyIGZpbGVzIGNoYW5nZWQsIDE5MTMgaW5zZXJ0aW9ucygrKSwgNDk3 IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2V4cGVj dGVkL3Bvc3RncmVzX2Zkdy5vdXQgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9w b3N0Z3Jlc19mZHcub3V0CmluZGV4IGYyMTBmOTExODgwLi4yZmZjODM2ODI0YSAxMDA2NDQK LS0tIGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dAor KysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0CkBA IC0yNzQxLDE2ICsyNzQxLDEzIEBAIHNlbGVjdCBjMiAqIChyYW5kb20oKSA8PSAxKTo6aW50 IGFzIGMyIGZyb20gZnQyIGdyb3VwIGJ5IGMyICogKHJhbmRvbSgpIDw9IDEpOjppCiAtLSBH Uk9VUCBCWSBjbGF1c2UgaW4gdmFyaW91cyBmb3JtcywgY2FyZGluYWwsIGFsaWFzIGFuZCBj b25zdGFudCBleHByZXNzaW9uCiBleHBsYWluICh2ZXJib3NlLCBjb3N0cyBvZmYpCiBzZWxl Y3QgY291bnQoYzIpIHcsIGMyIHgsIDUgeSwgNy4wIHogZnJvbSBmdDEgZ3JvdXAgYnkgMiwg eSwgOS4wOjppbnQgb3JkZXIgYnkgMjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gU29ydAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBG b3JlaWduIFNjYW4KICAgIE91dHB1dDogKGNvdW50KGMyKSksIGMyLCA1LCA3LjAsIDkKLSAg IFNvcnQgS2V5OiBmdDEuYzIKLSAgIC0+ICBGb3JlaWduIFNjYW4KLSAgICAgICAgIE91dHB1 dDogKGNvdW50KGMyKSksIGMyLCA1LCA3LjAsIDkKLSAgICAgICAgIFJlbGF0aW9uczogQWdn cmVnYXRlIG9uIChwdWJsaWMuZnQxKQotICAgICAgICAgUmVtb3RlIFNRTDogU0VMRUNUIGNv dW50KGMyKSwgYzIsIDUsIDcuMCwgOSBGUk9NICJTIDEiLiJUIDEiIEdST1VQIEJZIDIsIDMs IDUKLSg3IHJvd3MpCisgICBSZWxhdGlvbnM6IEFnZ3JlZ2F0ZSBvbiAocHVibGljLmZ0MSkK KyAgIFJlbW90ZSBTUUw6IFNFTEVDVCBjb3VudChjMiksIGMyLCA1LCA3LjAsIDkgRlJPTSAi UyAxIi4iVCAxIiBHUk9VUCBCWSAyLCAzLCA1IE9SREVSIEJZIGMyIEFTQyBOVUxMUyBMQVNU CisoNCByb3dzKQogCiBzZWxlY3QgY291bnQoYzIpIHcsIGMyIHgsIDUgeSwgNy4wIHogZnJv bSBmdDEgZ3JvdXAgYnkgMiwgeSwgOS4wOjppbnQgb3JkZXIgYnkgMjsKICAgdyAgfCB4IHwg eSB8ICB6ICAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3Rz aXplLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCmluZGV4IDhk YzdkZDRjYTI2Li42OGEzMjc0MGQ3ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BhdGgvY29zdHNpemUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9j b3N0c2l6ZS5jCkBAIC0xNzU0LDYgKzE3NTQsMzI1IEBAIGNvc3RfcmVjdXJzaXZlX3VuaW9u KFBhdGggKnJ1bmlvbiwgUGF0aCAqbnJ0ZXJtLCBQYXRoICpydGVybSkKIAkJCQkJCQkJCXJ0 ZXJtLT5wYXRodGFyZ2V0LT53aWR0aCk7CiB9CiAKKy8qCisgKiBpc19mYWtlX3ZhcgorICoJ CVdvcmthcm91bmQgZm9yIGdlbmVyYXRlX2FwcGVuZF90bGlzdCgpIHdoaWNoIGdlbmVyYXRl cyBmYWtlIFZhcnMgd2l0aAorICoJCXZhcm5vID09IDAsIHRoYXQgd2lsbCBjYXVzZSBhIGZh aWwgb2YgZXN0aW1hdGVfbnVtX2dyb3VwKCkgY2FsbAorICoKKyAqIFhYWCBVbW1tLCB3aHkg d291bGQgZXN0aW1hdGVfbnVtX2dyb3VwIGZhaWwgd2l0aCB0aGlzPworICovCitzdGF0aWMg Ym9vbAoraXNfZmFrZV92YXIoRXhwciAqZXhwcikKK3sKKwlpZiAoSXNBKGV4cHIsIFJlbGFi ZWxUeXBlKSkKKwkJZXhwciA9IChFeHByICopICgoUmVsYWJlbFR5cGUgKikgZXhwciktPmFy ZzsKKworCXJldHVybiAoSXNBKGV4cHIsIFZhcikgJiYgKChWYXIgKikgZXhwciktPnZhcm5v ID09IDApOworfQorCisvKgorICogZ2V0X3dpZHRoX2Nvc3RfbXVsdGlwbGllcgorICoJCVJl dHVybnMgcmVsYXRpdmUgY29tcGxleGl0eSBvZiBjb21wYXJpbmcgdHdvIHZhbHVlcyBiYXNl ZCBvbiBpdCdzIHdpZHRoLgorICogVGhlIGlkZWEgYmVoaW5kIC0gbG9uZyB2YWx1ZXMgaGF2 ZSBtb3JlIGV4cGVuc2l2ZSBjb21wYXJpc29uLiBSZXR1cm4gdmFsdWUgaXMKKyAqIGluIGNw dV9vcGVyYXRvcl9jb3N0IHVuaXQuCisgKi8KK3N0YXRpYyBkb3VibGUKK2dldF93aWR0aF9j b3N0X211bHRpcGxpZXIoUGxhbm5lckluZm8gKnJvb3QsIEV4cHIgKmV4cHIpCit7CisJZG91 YmxlCXdpZHRoID0gLTEuMDsgLyogZmFrZSB2YWx1ZSAqLworCisJaWYgKElzQShleHByLCBS ZWxhYmVsVHlwZSkpCisJCWV4cHIgPSAoRXhwciAqKSAoKFJlbGFiZWxUeXBlICopIGV4cHIp LT5hcmc7CisKKwkvKiBUcnkgdG8gZmluZCBhY3R1YWwgc3RhdCBpbiBjb3JyZXNwb25kaW5n IHJlbGF0aW9uICovCisJaWYgKElzQShleHByLCBWYXIpKQorCXsKKwkJVmFyCQkqdmFyID0g KFZhciAqKSBleHByOworCisJCWlmICh2YXItPnZhcm5vID4gMCAmJiB2YXItPnZhcm5vIDwg cm9vdC0+c2ltcGxlX3JlbF9hcnJheV9zaXplKQorCQl7CisJCQlSZWxPcHRJbmZvCSpyZWwg PSByb290LT5zaW1wbGVfcmVsX2FycmF5W3Zhci0+dmFybm9dOworCisJCQlpZiAocmVsICE9 IE5VTEwgJiYKKwkJCQl2YXItPnZhcmF0dG5vID49IHJlbC0+bWluX2F0dHIgJiYKKwkJCQl2 YXItPnZhcmF0dG5vIDw9IHJlbC0+bWF4X2F0dHIpCisJCQl7CisJCQkJaW50CW5keCA9IHZh ci0+dmFyYXR0bm8gLSByZWwtPm1pbl9hdHRyOworCisJCQkJaWYgKHJlbC0+YXR0cl93aWR0 aHNbbmR4XSA+IDApCisJCQkJCXdpZHRoID0gcmVsLT5hdHRyX3dpZHRoc1tuZHhdOworCQkJ fQorCQl9CisJfQorCisJLyogRGlkbid0IGZpbmQgYW55IGFjdHVhbCBzdGF0cywgdXNlIGVz dGltYXRpb24gYnkgdHlwZSAqLworCWlmICh3aWR0aCA8IDAuMCkKKwl7CisJCU5vZGUJKm5v ZGUgPSAoTm9kZSopIGV4cHI7CisKKwkJd2lkdGggPSBnZXRfdHlwYXZnd2lkdGgoZXhwclR5 cGUobm9kZSksIGV4cHJUeXBtb2Qobm9kZSkpOworCX0KKworCS8qCisJICogQW55IHZhbHVl IGluIHBnc3FsIGlzIHBhc3NlZCBieSBEYXR1bSB0eXBlLCBzbyBhbnkgb3BlcmF0aW9uIHdp dGggdmFsdWUKKwkgKiBjb3VsZCBub3QgYmUgY2hlYXBlciB0aGFuIG9wZXJhdGlvbiB3aXRo IERhdHVtIHR5cGUKKwkgKi8KKwlpZiAod2lkdGggPD0gc2l6ZW9mKERhdHVtKSkKKwkJcmV0 dXJuIDEuMDsKKworCS8qCisJICogU2VlbXMsIGNvc3Qgb2YgY29tcGFyaXNpb24gaXMgbm90 IGRpcmVjdGx5IHByb3BvcnRpb25hbCB0byBhcmdzIHdpZHRoLAorCSAqIGJlY2F1c2UgY29t cGFyaW5nIGFyZ3MgY291bGQgYmUgZGlmZmVyIHdpZHRoICh3ZSBrbm93biBvbmx5IGF2ZXJh Z2Ugb3ZlcgorCSAqIGNvbHVtbikgYW5kIGRpZmZlcmVuY2Ugb2Z0ZW4gY291bGQgYmUgZGVm aW5lZCBvbmx5IGJ5IGxvb2tpbmcgb24gZmlyc3QKKwkgKiBieXRlcy4gU28sIHVzZSBsb2cx Nih3aWR0aCkgYXMgZXN0aW1hdGlvbi4KKwkgKi8KKwlyZXR1cm4gMS4wICsgMC4xMjUgKiBM T0cyKHdpZHRoIC8gc2l6ZW9mKERhdHVtKSk7Cit9CisKKy8qCisgKiBjb21wdXRlX2NwdV9z b3J0X2Nvc3QKKyAqCQljb21wdXRlIENQVSBjb3N0IG9mIHNvcnQgKGkuZS4gaW4tbWVtb3J5 KQorICoKKyAqIFRoZSBtYWluIHRoaW5nIHdlIG5lZWQgdG8gY2FsY3VsYXRlIHRvIGVzdGlt YXRlIHNvcnQgQ1BVIGNvc3RzIGlzIHRoZSBudW1iZXIKKyAqIG9mIGNhbGxzIHRvIHRoZSBj b21wYXJhdG9yIGZ1bmN0aW9ucy4gVGhlIGRpZmZpY3VsdHkgaXMgdGhhdCBmb3IgbXVsdGkt Y29sdW1uCisgKiBzb3J0cyB0aGVyZSBtYXkgYmUgZGlmZmVyZW50IGRhdGEgdHlwZXMgaW52 b2x2ZWQgKGZvciBzb21lIG9mIHdoaWNoIHRoZSBjYWxscworICogbWF5IGJlIG11Y2ggbW9y ZSBleHBlbnNpdmUpLiBGdXJ0aGVybW9yZSwgdGhlIGNvbHVtbnMgbWF5IGhhdmUgdmVyeSBk aWZmZXJlbnQKKyAqIG51bWJlciBvZiBkaXN0aW5jdCB2YWx1ZXMgLSB0aGUgaGlnaGVyIHRo ZSBudW1iZXIsIHRoZSBmZXdlciBjb21wYXJpc29ucyB3aWxsCisgKiBiZSBuZWVkZWQgZm9y IHRoZSBmb2xsb3dpbmcgY29sdW1ucy4KKyAqCisgKiBUaGUgYWxnb3JpdG0gaXMgaW5jcmVt ZW50YWwgLSB3ZSBhZGQgcGF0aGtleXMgb25lIGJ5IG9uZSwgYW5kIGF0IGVhY2ggc3RlcCB3 ZQorICogZXN0aW1hdGUgdGhlIG51bWJlciBvZiBuZWNlc3NhcnkgY29tcGFyaXNvbnMgKGJh c2VkIG9uIHRoZSBudW1iZXIgb2YgZGlzdGluY3QKKyAqIGdyb3VwcyBpbiB0aGUgY3VycmVu dCBwYXRoa2V5IHByZWZpeCBhbmQgdGhlIG5ldyBwYXRoa2V5KSwgYW5kIHRoZSBjb21wYXJp c29uCisgKiBjb3N0cyAod2hpY2ggaXMgZGF0YSB0eXBlIHNwZWNpZmljKS4KKyAqCisgKiBF c3RpbWF0aW9uIG9mIHRoZSBudW1iZXIgb2YgY29tcGFyaXNvbnMgaXMgYmFzZWQgb24gaWRl YXMgZnJvbToKKyAqCisgKiAiUXVpY2tzb3J0IElzIE9wdGltYWwiLCBSb2JlcnQgU2VkZ2V3 aWNrLCBKb24gQmVudGxleSwgMjAwMgorICogW2h0dHBzOi8vd3d3LmNzLnByaW5jZXRvbi5l ZHUvfnJzL3RhbGtzL1F1aWNrc29ydElzT3B0aW1hbC5wZGZdCisgKgorICogSW4gdGVybSBv ZiB0aGF0IHBhcGVyLCBsZXQgTiAtIG51bWJlciBvZiB0dXBsZXMsIFhpIC0gbnVtYmVyIG9m IGlkZW50aWNhbAorICogdHVwbGVzIHdpdGggdmFsdWUgS2ksIHRoZW4gdGhlIGVzdGltYXRl IG9mIG51bWJlciBvZiBjb21wYXJpc29ucyBpczoKKyAqCisgKglsb2coTiEgLyAoWDEhICog WDIhICogLi4pKSAgfiAgc3VtKFhpICogbG9nKE4vWGkpKQorICoKKyAqIFdlIGFzc3VtZSBh bGwgWGkgdGhlIHNhbWUgYmVjYXVzZSBub3cgd2UgZG9uJ3QgaGF2ZSBhbnkgZXN0aW1hdGlv biBvZgorICogZ3JvdXAgc2l6ZXMsIHdlIGhhdmUgb25seSBrbm93IHRoZSBlc3RpbWF0ZSBv ZiBudW1iZXIgb2YgZ3JvdXBzIChkaXN0aW5jdAorICogdmFsdWVzKS4gSW4gdGhhdCBjYXNl LCBmb3JtdWxhIGJlY29tZXM6CisgKgorICoJTiAqIGxvZyhOdW1iZXJPZkdyb3VwcykKKyAq CisgKiBGb3IgbXVsdGktY29sdW1uIHNvcnRzIHdlIG5lZWQgdG8gZXN0aW1hdGUgdGhlIG51 bWJlciBvZiBjb21wYXJpc29ucyBmb3IKKyAqIGVhY2ggaW5kaXZpZHVhbCBjb2x1bW4gLSBm b3IgZXhhbXBsZSB3aXRoIGNvbHVtbnMgKGMxLCBjMiwgLi4uLCBjaykgd2UKKyAqIGNhbiBl c3RpbWF0ZSB0aGF0IG51bWJlciBvZiBjb21wYXJpc29ucyBvbiBjayBpcyByb3VnaGx5Cisg KgorICoJbmNvbXBhcmlzb25zKGMxLCBjMiwgLi4uLCBjaykgLyBuY29tcGFyaXNvbnMoYzEs IGMyLCAuLi4sIGMoay0xKSkKKyAqCisgKiBMZXQgayBiZSBhIGNvbHVtbiBudW1iZXIsIEdr IC0gbnVtYmVyIG9mIGdyb3VwcyBkZWZpbmVkIGJ5IGsgY29sdW1ucywgYW5kIEZrCisgKiB0 aGUgY29zdCBvZiB0aGUgY29tcGFyaXNvbiBpcworICoKKyAqCU4gKiBzdW0oIEZrICogbG9n KEdrKSApCisgKgorICogTm90ZTogV2UgYWxzbyBjb25zaWRlciBjb2x1bW4gd2lkdGgsIG5v dCBqdXN0IHRoZSBjb21wYXJhdG9yIGNvc3QuCisgKgorICogTk9URTogc29tZSBjYWxsZXJz IGN1cnJlbnRseSBwYXNzIE5JTCBmb3IgcGF0aGtleXMgYmVjYXVzZSB0aGV5CisgKiBjYW4n dCBjb252ZW5pZW50bHkgc3VwcGx5IHRoZSBzb3J0IGtleXMuIEluIHRoaXMgY2FzZSwgaXQg d2lsbCBmYWxsYmFjayB0bworICogc2ltcGxlIGNvbXBhcmlzb24gY29zdCBlc3RpbWF0ZS4K KyAqLworc3RhdGljIENvc3QKK2NvbXB1dGVfY3B1X3NvcnRfY29zdChQbGFubmVySW5mbyAq cm9vdCwgTGlzdCAqcGF0aGtleXMsIGludCBuUHJlc29ydGVkS2V5cywKKwkJCQkJICBDb3N0 IGNvbXBhcmlzb25fY29zdCwgZG91YmxlIHR1cGxlcywgZG91YmxlIG91dHB1dF90dXBsZXMs CisJCQkJCSAgYm9vbCBoZWFwU29ydCkKK3sKKwlDb3N0CQlwZXJfdHVwbGVfY29zdCA9IDAu MDsKKwlMaXN0Q2VsbAkqbGM7CisJTGlzdAkJKnBhdGhrZXlFeHBycyA9IE5JTDsKKwlkb3Vi bGUJCXR1cGxlc1BlclByZXZHcm91cCA9IHR1cGxlczsKKwlkb3VibGUJCXRvdGFsRnVuY0Nv c3QgPSAxLjA7CisJYm9vbAkJaGFzX2Zha2VfdmFyID0gZmFsc2U7CisJaW50CQkJaSA9IDA7 CisJT2lkCQkJcHJldl9kYXRhdHlwZSA9IEludmFsaWRPaWQ7CisJQ29zdAkJZnVuY0Nvc3Qg PSAwLjA7CisJTGlzdAkJKmNhY2hlX3ZhcmluZm9zID0gTklMOworCisJLyogZmFsbGJhY2sg aWYgcGF0aGtleXMgaXMgdW5rbm93biAqLworCWlmIChsaXN0X2xlbmd0aChwYXRoa2V5cykg PT0gMCkKKwl7CisJCS8qCisJCSAqIElmIHdlJ2xsIHVzZSBhIGJvdW5kZWQgaGVhcC1zb3J0 IGtlZXBpbmcganVzdCBLIHR1cGxlcyBpbiBtZW1vcnksIGZvcgorCQkgKiBhIHRvdGFsIG51 bWJlciBvZiB0dXBsZSBjb21wYXJpc29ucyBvZiBOIGxvZzIgSzsgYnV0IHRoZSBjb25zdGFu dAorCQkgKiBmYWN0b3IgaXMgYSBiaXQgaGlnaGVyIHRoYW4gZm9yIHF1aWNrc29ydC4gIFR3 ZWFrIGl0IHNvIHRoYXQgdGhlCisJCSAqIGNvc3QgY3VydmUgaXMgY29udGludW91cyBhdCB0 aGUgY3Jvc3NvdmVyIHBvaW50LgorCQkgKgorCQkgKiBYWFggSSBzdXBwb3NlIHRoZSAicXVp Y2tzb3J0IGZhY3RvciIgcmVmZXJlbmNlcyB0byAxLjUgYXQgdGhlIGVuZAorCQkgKiBvZiB0 aGlzIGZ1bmN0aW9uLCBidXQgSSdtIG5vdCBzdXJlLiBJIHN1Z2dlc3Qgd2UgaW50cm9kdWNl IHNvbWUgc2ltcGxlCisJCSAqIGNvbnN0YW50cyBmb3IgdGhhdCwgaW5zdGVhZCBvZiBtYWdp YyB2YWx1ZXMuCisJCSAqLworCQlvdXRwdXRfdHVwbGVzID0gKGhlYXBTb3J0KSA/IDIuMCAq IG91dHB1dF90dXBsZXMgOiB0dXBsZXM7CisJCXBlcl90dXBsZV9jb3N0ICs9IDIuMCAqIGNw dV9vcGVyYXRvcl9jb3N0ICogTE9HMihvdXRwdXRfdHVwbGVzKTsKKworCQkvKiBhZGQgY29z dCBwcm92aWRlZCBieSBjYWxsZXIgKi8KKwkJcGVyX3R1cGxlX2Nvc3QgKz0gY29tcGFyaXNv bl9jb3N0OworCisJCXJldHVybiBwZXJfdHVwbGVfY29zdCAqIHR1cGxlczsKKwl9CisKKwkv KgorCSAqIENvbXB1dGluZyB0b3RhbCBjb3N0IG9mIHNvcnRpbmcgdGFrZXMgaW50byBhY2Nv dW50OgorCSAqIC0gcGVyIGNvbHVtbiBjb21wYXJpc29uIGZ1bmN0aW9uIGNvc3QKKwkgKiAt IHdlIHRyeSB0byBjb21wdXRlIG5lZWRlZCBudW1iZXIgb2YgY29tcGFyaXNvbiBwZXIgY29s dW1uCisJICovCisJZm9yZWFjaChsYywgcGF0aGtleXMpCisJeworCQlQYXRoS2V5CQkJCSpw YXRoa2V5ID0gKFBhdGhLZXkqKSBsZmlyc3QobGMpOworCQlFcXVpdmFsZW5jZU1lbWJlcgkq ZW07CisJCWRvdWJsZQkJCQkgbkdyb3VwcywKKwkJCQkJCQkgY29ycmVjdGVkTkdyb3VwczsK KworCQkvKgorCQkgKiBXZSBiZWxpZXZlIHRoYXQgZXF1aXZhbGVuY2UgbWVtYmVycyBhcmVu J3QgdmVyeSBkaWZmZXJlbnQsIHNvLCB0bworCQkgKiBlc3RpbWF0ZSBjb3N0IHdlIHRha2Ug anVzdCBmaXJzdCBtZW1iZXIKKwkJICovCisJCWVtID0gKEVxdWl2YWxlbmNlTWVtYmVyICop IGxpbml0aWFsKHBhdGhrZXktPnBrX2VjbGFzcy0+ZWNfbWVtYmVycyk7CisKKwkJaWYgKGVt LT5lbV9kYXRhdHlwZSAhPSBJbnZhbGlkT2lkKQorCQl7CisJCQkvKiBkbyBub3QgbG9va3Vw IGZ1bmNDb3N0IGlmIGRhdGEgdHlwZSBpcyB0aGUgc2FtZSBhcyBwcmV2aW91cyAqLworCQkJ aWYgKHByZXZfZGF0YXR5cGUgIT0gZW0tPmVtX2RhdGF0eXBlKQorCQkJeworCQkJCU9pZAkJ CXNvcnRvcDsKKwkJCQlRdWFsQ29zdAljb3N0OworCisJCQkJc29ydG9wID0gZ2V0X29wZmFt aWx5X21lbWJlcihwYXRoa2V5LT5wa19vcGZhbWlseSwKKwkJCQkJCQkJCQkJIGVtLT5lbV9k YXRhdHlwZSwgZW0tPmVtX2RhdGF0eXBlLAorCQkJCQkJCQkJCQkgcGF0aGtleS0+cGtfc3Ry YXRlZ3kpOworCisJCQkJY29zdC5zdGFydHVwID0gMDsKKwkJCQljb3N0LnBlcl90dXBsZSA9 IDA7CisJCQkJYWRkX2Z1bmN0aW9uX2Nvc3Qocm9vdCwgZ2V0X29wY29kZShzb3J0b3ApLCBO VUxMLCAmY29zdCk7CisJCQkJLyogd2UgbmVlZCBwcm9jb3N0LCBub3QgcHJvZHVjdCBvZiBw cm9jb3N0IGFuZCBjcHVfb3BlcmF0b3JfY29zdCAqLworCQkJCWZ1bmNDb3N0ID0gY29zdC5w ZXJfdHVwbGUgLyBjcHVfb3BlcmF0b3JfY29zdDsKKwkJCQlwcmV2X2RhdGF0eXBlID0gZW0t PmVtX2RhdGF0eXBlOworCQkJfQorCQl9CisJCWVsc2UKKwkJCWZ1bmNDb3N0ID0gMS4wOyAv KiBmYWxsYmFjayAqLworCisJCS8qIFRyeSB0byB0YWtlIGludG8gYWNjb3VudCBhY3R1YWwg d2lkdGggZmVlICovCisJCWZ1bmNDb3N0ICo9IGdldF93aWR0aF9jb3N0X211bHRpcGxpZXIo cm9vdCwgZW0tPmVtX2V4cHIpOworCisJCXRvdGFsRnVuY0Nvc3QgKz0gZnVuY0Nvc3Q7CisK KwkJLyogUmVtZW1iZXIgaWYgd2UgaGF2ZSBhIGZha2UgdmFyIGluIHBhdGhrZXlzICovCisJ CWhhc19mYWtlX3ZhciB8PSBpc19mYWtlX3ZhcihlbS0+ZW1fZXhwcik7CisJCXBhdGhrZXlF eHBycyA9IGxhcHBlbmQocGF0aGtleUV4cHJzLCBlbS0+ZW1fZXhwcik7CisKKwkJLyoKKwkJ ICogUHJldmVudCBjYWxsIGVzdGltYXRlX251bV9ncm91cHMoKSB3aXRoIGZha2UgVmFyLiBO b3RlLAorCQkgKiBwYXRoa2V5RXhwcnMgY29udGFpbnMgb25seSBwcmV2aW91cyBjb2x1bW5z CisJCSAqLworCQlpZiAoaGFzX2Zha2VfdmFyID09IGZhbHNlKQorCQkJLyoKKwkJCSAqIFJl Y3Vyc2l2ZWx5IGNvbXB1dGUgbnVtYmVyIG9mIGdyb3VwcyBpbiBhIGdyb3VwIGZyb20gcHJl dmlvdXMgc3RlcAorCQkJICovCisJCQluR3JvdXBzID0gZXN0aW1hdGVfbnVtX2dyb3Vwc19p bmNyZW1lbnRhbChyb290LCBwYXRoa2V5RXhwcnMsCisJCQkJCQkJCQkJCQkJICB0dXBsZXNQ ZXJQcmV2R3JvdXAsIE5VTEwsIE5VTEwsCisJCQkJCQkJCQkJCQkJICAmY2FjaGVfdmFyaW5m b3MsCisJCQkJCQkJCQkJCQkJICBsaXN0X2xlbmd0aChwYXRoa2V5RXhwcnMpIC0gMSk7CisJ CWVsc2UgaWYgKHR1cGxlcyA+IDQuMCkKKwkJCS8qCisJCQkgKiBVc2UgZ2VvbWV0cmljIG1l YW4gYXMgZXN0aW1hdGlvbiBpZiB0aGVyZSBpcyBubyBhbnkgc3RhdHMuCisJCQkgKiBEb24n dCB1c2UgREVGQVVMVF9OVU1fRElTVElOQ1QgYmVjYXVzZSBpdCB1c2VkIGZvciBvbmx5IG9u ZQorCQkJICogY29sdW1uIHdoaWxlIGhlcmUgd2UgdHJ5IHRvIGVzdGltYXRlIG51bWJlciBv ZiBncm91cHMgb3ZlcgorCQkJICogc2V0IG9mIGNvbHVtbnMuCisJCQkgKgorCQkJICogWFhY IFBlcmhhcHMgdGhpcyBzaG91bGQgdXNlIERFRkFVTFRfTlVNX0RJU1RJTkNUIGF0IGxlYXN0 IHRvCisJCQkgKiBsaW1pdCB0aGUgY2FsY3VsYXRlZCB2YWx1ZXMsIHNvbWVob3c/CisJCQkg KgorCQkJICogWFhYIFdoYXQncyB0aGUgbG9naWMgb2YgdGhlIGZvbGxvd2luZyBmb3JtdWxh PworCQkJICovCisJCQluR3JvdXBzID0gY2VpbCgyLjAgKyBzcXJ0KHR1cGxlcykgKiAoaSAr IDEpIC8gbGlzdF9sZW5ndGgocGF0aGtleXMpKTsKKwkJZWxzZQorCQkJbkdyb3VwcyA9IHR1 cGxlczsKKworCQkvKgorCQkgKiBQcmVzb3J0ZWQga2V5cyBhcmVuJ3QgcGFydGljaXBhdGVk IGluIGNvbXBhcmlzb24gYnV0IHN0aWxsIGNoZWNrZWQKKwkJICogYnkgcXNvcnQgY29tcGFy YXRvci4KKwkJICovCisJCWlmIChpID49IG5QcmVzb3J0ZWRLZXlzKQorCQl7CisJCQlpZiAo aGVhcFNvcnQpCisJCQl7CisJCQkJZG91YmxlIGhlYXBfdHVwbGVzOworCisJCQkJLyogaGF2 ZSB0byBrZWVwIGF0IGxlYXN0IG9uZSBncm91cCwgYW5kIGEgbXVsdGlwbGUgb2YgZ3JvdXAg c2l6ZSAqLworCQkJCWhlYXBfdHVwbGVzID0gTWF4KGNlaWwob3V0cHV0X3R1cGxlcyAvIHR1 cGxlc1BlclByZXZHcm91cCkgKiB0dXBsZXNQZXJQcmV2R3JvdXAsCisJCQkJCQkJCSAgdHVw bGVzUGVyUHJldkdyb3VwKTsKKworCQkJCS8qIHNvIGhvdyBtYW55ICh3aG9sZSkgZ3JvdXBz IGlzIHRoYXQ/ICovCisJCQkJY29ycmVjdGVkTkdyb3VwcyA9IGNlaWwoaGVhcF90dXBsZXMg LyB0dXBsZXNQZXJQcmV2R3JvdXApOworCQkJfQorCQkJZWxzZQorCQkJCS8qIGFsbCBncm91 cHMgaW4gdGhlIGlucHV0ICovCisJCQkJY29ycmVjdGVkTkdyb3VwcyA9IG5Hcm91cHM7CisK KwkJCWNvcnJlY3RlZE5Hcm91cHMgPSBNYXgoMS4wLCBjZWlsKGNvcnJlY3RlZE5Hcm91cHMp KTsKKworCQkJcGVyX3R1cGxlX2Nvc3QgKz0gdG90YWxGdW5jQ29zdCAqIExPRzIoY29ycmVj dGVkTkdyb3Vwcyk7CisJCX0KKworCQlpKys7CisKKwkJLyoKKwkJICogUmVhbC13b3JsZCBk aXN0cmlidXRpb24gaXNuJ3QgdW5pZm9ybSBidXQgbm93IHdlIGRvbid0IGhhdmUgYSB3YXkg dG8KKwkJICogZGV0ZXJtaW5lIHRoYXQsIHNvLCBhZGQgbXVsdGlwbGllciB0byBnZXQgY2xv c2VyIHRvIHdvcnN0IGNhc2UuCisJCSAqIEJ1dCBlbnN1cmUgdGhlIG51bWJlciBvZiB0dXBs ZXMgZG9lcyBub3QgZXhjZWVkIHRoZSBncm91cCBzaXplIGluIHRoZQorCQkgKiBwcmVjZWRp bmcgc3RlcC4KKwkJICovCisJCXR1cGxlc1BlclByZXZHcm91cCA9IE1pbih0dXBsZXNQZXJQ cmV2R3JvdXAsCisJCQkJCQkJCSBjZWlsKDEuNSAqIHR1cGxlc1BlclByZXZHcm91cCAvIG5H cm91cHMpKTsKKworCQkvKgorCQkgKiBXZSBjb3VsZCBza2lwIGFsbCBmb2xsb3dpbmcgY29s dW1ucyBmb3IgY29zdCBlc3RpbWF0aW9uLCBiZWNhdXNlIHdlCisJCSAqIGJlbGlldmUgdGhh dCB0dXBsZXMgYXJlIHVuaXF1ZSBieSB0aGUgc2V0IG9mIHByZXZpb3VzIGNvbHVtbnMKKwkJ ICovCisJCWlmICh0dXBsZXNQZXJQcmV2R3JvdXAgPD0gMS4wKQorCQkJYnJlYWs7CisJfQor CisJbGlzdF9mcmVlKHBhdGhrZXlFeHBycyk7CisKKwkvKiBwZXJfdHVwbGVfY29zdCBpcyBp biBjcHVfb3BlcmF0b3JfY29zdCB1bml0cyAqLworCXBlcl90dXBsZV9jb3N0ICo9IGNwdV9v cGVyYXRvcl9jb3N0OworCisJLyoKKwkgKiBBY2NvcmRpbmdseSB0byAiSW50cm9kdWN0aW9u IHRvIGFsZ29yaXRobXMiLCBUaG9tYXMgSC4gQ29ybWVuLCBDaGFybGVzIEUuCisJICogTGVp c2Vyc29uLCBSb25hbGQgTC4gUml2ZXN0LCBJU0JOIDAtMDctMDEzMTQzLTAsIHF1aWNrc29y dCBlc3RpbWF0aW9uCisJICogZm9ybXVsYSBoYXMgYWRkaXRpb25hbCB0ZXJtIHByb3BvcnRp b25hbCB0byBudW1iZXIgb2YgdHVwbGVzIChTZWUgQ2hhcHRlcgorCSAqIDguMiBhbmQgVGhl b3JlbSA0LjEpLiBJdCBoYXMgbWVhbmluZyB3aXRoIGxvdyBudW1iZXIgb2YgdHVwbGVzLAor CSAqIGFwcHJveGltYXRlbHkgbGVzcyB0aGF0IDFlNC4gT2YgY291cnNlLCBpdCBjb3VsZCBi ZSBpbXBsZW1lbnRlZCBhcworCSAqIGFkZGl0aW9uYWwgbXVsdGlwbGllciB1bmRlciBsb2dh cml0aG0sIGJ1dCB1c2UgbW9yZSBjb21wbGljYXRlZCBmb3JtdWxhCisJICogd2hpY2ggdGFr ZXMgaW50byBhY2NvdW50IG51bWJlciBvZiB1bmlxdWUgdHVwbGVzIGFuZCBpdCBpc24ndCBj bGVhciBob3cKKwkgKiB0byBjb21iaW5lIG11bHRpcGxpZXIgd2l0aCBncm91cHMuIEVzdGlt YXRlIGl0IGFzIDEwIGluIGNwdV9vcGVyYXRvcl9jb3N0CisJICogdW5pdC4KKwkgKi8KKwlw ZXJfdHVwbGVfY29zdCArPSAxMCAqIGNwdV9vcGVyYXRvcl9jb3N0OworCisJcGVyX3R1cGxl X2Nvc3QgKz0gY29tcGFyaXNvbl9jb3N0OworCisJcmV0dXJuIHR1cGxlcyAqIHBlcl90dXBs ZV9jb3N0OworfQorCisvKgorICogc2ltcGxlIHdyYXBwZXIganVzdCB0byBlc3RpbWF0ZSBi ZXN0IHNvcnQgcGF0aAorICovCitDb3N0Citjb3N0X3NvcnRfZXN0aW1hdGUoUGxhbm5lcklu Zm8gKnJvb3QsIExpc3QgKnBhdGhrZXlzLCBpbnQgblByZXNvcnRlZEtleXMsCisJCQkJICAg ZG91YmxlIHR1cGxlcykKK3sKKwlyZXR1cm4gY29tcHV0ZV9jcHVfc29ydF9jb3N0KHJvb3Qs IHBhdGhrZXlzLCBuUHJlc29ydGVkS2V5cywKKwkJCQkJCQkJMCwgdHVwbGVzLCB0dXBsZXMs IGZhbHNlKTsKK30KKwogLyoKICAqIGNvc3RfdHVwbGVzb3J0CiAgKgkgIERldGVybWluZXMg YW5kIHJldHVybnMgdGhlIGNvc3Qgb2Ygc29ydGluZyBhIHJlbGF0aW9uIHVzaW5nIHR1cGxl c29ydCwKQEAgLTE3NzAsNyArMjA4OSw3IEBAIGNvc3RfcmVjdXJzaXZlX3VuaW9uKFBhdGgg KnJ1bmlvbiwgUGF0aCAqbnJ0ZXJtLCBQYXRoICpydGVybSkKICAqIG51bWJlciBvZiBpbml0 aWFsIHJ1bnMgZm9ybWVkIGFuZCBNIGlzIHRoZSBtZXJnZSBvcmRlciB1c2VkIGJ5IHR1cGxl c29ydC5jLgogICogU2luY2UgdGhlIGF2ZXJhZ2UgaW5pdGlhbCBydW4gc2hvdWxkIGJlIGFi b3V0IHNvcnRfbWVtLCB3ZSBoYXZlCiAgKgkJZGlzayB0cmFmZmljID0gMiAqIHJlbHNpemUg KiBjZWlsKGxvZ00ocCAvIHNvcnRfbWVtKSkKLSAqCQljcHUgPSBjb21wYXJpc29uX2Nvc3Qg KiB0ICogbG9nMih0KQorICogCQlhbmQgY3B1IGNvc3QgKGNvbXB1dGVkIGJ5IGNvbXB1dGVf Y3B1X3NvcnRfY29zdCgpKS4KICAqCiAgKiBJZiB0aGUgc29ydCBpcyBib3VuZGVkIChpLmUu LCBvbmx5IHRoZSBmaXJzdCBrIHJlc3VsdCB0dXBsZXMgYXJlIG5lZWRlZCkKICAqIGFuZCBr IHR1cGxlcyBjYW4gZml0IGludG8gc29ydF9tZW0sIHdlIHVzZSBhIGhlYXAgbWV0aG9kIHRo YXQga2VlcHMgb25seQpAQCAtMTc4OSw5ICsyMTA4LDExIEBAIGNvc3RfcmVjdXJzaXZlX3Vu aW9uKFBhdGggKnJ1bmlvbiwgUGF0aCAqbnJ0ZXJtLCBQYXRoICpydGVybSkKICAqICdjb21w YXJpc29uX2Nvc3QnIGlzIHRoZSBleHRyYSBjb3N0IHBlciBjb21wYXJpc29uLCBpZiBhbnkK ICAqICdzb3J0X21lbScgaXMgdGhlIG51bWJlciBvZiBraWxvYnl0ZXMgb2Ygd29yayBtZW1v cnkgYWxsb3dlZCBmb3IgdGhlIHNvcnQKICAqICdsaW1pdF90dXBsZXMnIGlzIHRoZSBib3Vu ZCBvbiB0aGUgbnVtYmVyIG9mIG91dHB1dCB0dXBsZXM7IC0xIGlmIG5vIGJvdW5kCisgKiAn c3RhcnR1cF9jb3N0JyBpcyBleHBlY3RlZCB0byBiZSAwIGF0IGlucHV0LiBJZiB0aGVyZSBp cyAiaW5wdXQgY29zdCIgaXQgc2hvdWxkCisgKiBiZSBhZGRlZCBieSBjYWxsZXIgbGF0ZXIu CiAgKi8KIHN0YXRpYyB2b2lkCi1jb3N0X3R1cGxlc29ydChDb3N0ICpzdGFydHVwX2Nvc3Qs IENvc3QgKnJ1bl9jb3N0LAorY29zdF90dXBsZXNvcnQoUGxhbm5lckluZm8gKnJvb3QsIExp c3QgKnBhdGhrZXlzLCBDb3N0ICpzdGFydHVwX2Nvc3QsIENvc3QgKnJ1bl9jb3N0LAogCQkJ ICAgZG91YmxlIHR1cGxlcywgaW50IHdpZHRoLAogCQkJICAgQ29zdCBjb21wYXJpc29uX2Nv c3QsIGludCBzb3J0X21lbSwKIAkJCSAgIGRvdWJsZSBsaW1pdF90dXBsZXMpCkBAIC0xODA4 LDkgKzIxMjksNiBAQCBjb3N0X3R1cGxlc29ydChDb3N0ICpzdGFydHVwX2Nvc3QsIENvc3Qg KnJ1bl9jb3N0LAogCWlmICh0dXBsZXMgPCAyLjApCiAJCXR1cGxlcyA9IDIuMDsKIAotCS8q IEluY2x1ZGUgdGhlIGRlZmF1bHQgY29zdC1wZXItY29tcGFyaXNvbiAqLwotCWNvbXBhcmlz b25fY29zdCArPSAyLjAgKiBjcHVfb3BlcmF0b3JfY29zdDsKLQogCS8qIERvIHdlIGhhdmUg YSB1c2VmdWwgTElNSVQ/ICovCiAJaWYgKGxpbWl0X3R1cGxlcyA+IDAgJiYgbGltaXRfdHVw bGVzIDwgdHVwbGVzKQogCXsKQEAgLTE4MzQsMTIgKzIxNTIsMTAgQEAgY29zdF90dXBsZXNv cnQoQ29zdCAqc3RhcnR1cF9jb3N0LCBDb3N0ICpydW5fY29zdCwKIAkJZG91YmxlCQlsb2df cnVuczsKIAkJZG91YmxlCQlucGFnZWFjY2Vzc2VzOwogCi0JCS8qCi0JCSAqIENQVSBjb3N0 cwotCQkgKgotCQkgKiBBc3N1bWUgYWJvdXQgTiBsb2cyIE4gY29tcGFyaXNvbnMKLQkJICov Ci0JCSpzdGFydHVwX2Nvc3QgPSBjb21wYXJpc29uX2Nvc3QgKiB0dXBsZXMgKiBMT0cyKHR1 cGxlcyk7CisJCS8qIENQVSBjb3N0cyAqLworCQkqc3RhcnR1cF9jb3N0ID0gY29tcHV0ZV9j cHVfc29ydF9jb3N0KHJvb3QsIHBhdGhrZXlzLCAwLAorCQkJCQkJCQkJCQkgIGNvbXBhcmlz b25fY29zdCwgdHVwbGVzLAorCQkJCQkJCQkJCQkgIHR1cGxlcywgZmFsc2UpOwogCiAJCS8q IERpc2sgY29zdHMgKi8KIApAQCAtMTg1NSwxOCArMjE3MSwxNyBAQCBjb3N0X3R1cGxlc29y dChDb3N0ICpzdGFydHVwX2Nvc3QsIENvc3QgKnJ1bl9jb3N0LAogCX0KIAllbHNlIGlmICh0 dXBsZXMgPiAyICogb3V0cHV0X3R1cGxlcyB8fCBpbnB1dF9ieXRlcyA+IHNvcnRfbWVtX2J5 dGVzKQogCXsKLQkJLyoKLQkJICogV2UnbGwgdXNlIGEgYm91bmRlZCBoZWFwLXNvcnQga2Vl cGluZyBqdXN0IEsgdHVwbGVzIGluIG1lbW9yeSwgZm9yCi0JCSAqIGEgdG90YWwgbnVtYmVy IG9mIHR1cGxlIGNvbXBhcmlzb25zIG9mIE4gbG9nMiBLOyBidXQgdGhlIGNvbnN0YW50Ci0J CSAqIGZhY3RvciBpcyBhIGJpdCBoaWdoZXIgdGhhbiBmb3IgcXVpY2tzb3J0LiAgVHdlYWsg aXQgc28gdGhhdCB0aGUKLQkJICogY29zdCBjdXJ2ZSBpcyBjb250aW51b3VzIGF0IHRoZSBj cm9zc292ZXIgcG9pbnQuCi0JCSAqLwotCQkqc3RhcnR1cF9jb3N0ID0gY29tcGFyaXNvbl9j b3N0ICogdHVwbGVzICogTE9HMigyLjAgKiBvdXRwdXRfdHVwbGVzKTsKKwkJLyogV2UnbGwg dXNlIGEgYm91bmRlZCBoZWFwLXNvcnQga2VlcGluZyBqdXN0IEsgdHVwbGVzIGluIG1lbW9y eS4gKi8KKwkJKnN0YXJ0dXBfY29zdCA9IGNvbXB1dGVfY3B1X3NvcnRfY29zdChyb290LCBw YXRoa2V5cywgMCwKKwkJCQkJCQkJCQkJICBjb21wYXJpc29uX2Nvc3QsIHR1cGxlcywKKwkJ CQkJCQkJCQkJICBvdXRwdXRfdHVwbGVzLCB0cnVlKTsKIAl9CiAJZWxzZQogCXsKIAkJLyog V2UnbGwgdXNlIHBsYWluIHF1aWNrc29ydCBvbiBhbGwgdGhlIGlucHV0IHR1cGxlcyAqLwot CQkqc3RhcnR1cF9jb3N0ID0gY29tcGFyaXNvbl9jb3N0ICogdHVwbGVzICogTE9HMih0dXBs ZXMpOworCQkqc3RhcnR1cF9jb3N0ID0gY29tcHV0ZV9jcHVfc29ydF9jb3N0KHJvb3QsIHBh dGhrZXlzLCAwLAorCQkJCQkJCQkJCQkgIGNvbXBhcmlzb25fY29zdCwgdHVwbGVzLAorCQkJ CQkJCQkJCQkgIHR1cGxlcywgZmFsc2UpOwogCX0KIAogCS8qCkBAIC0xODk5LDggKzIyMTQs OCBAQCBjb3N0X2luY3JlbWVudGFsX3NvcnQoUGF0aCAqcGF0aCwKIAkJCQkJICBkb3VibGUg aW5wdXRfdHVwbGVzLCBpbnQgd2lkdGgsIENvc3QgY29tcGFyaXNvbl9jb3N0LCBpbnQgc29y dF9tZW0sCiAJCQkJCSAgZG91YmxlIGxpbWl0X3R1cGxlcykKIHsKLQlDb3N0CQlzdGFydHVw X2Nvc3QgPSAwLAotCQkJCXJ1bl9jb3N0ID0gMCwKKwlDb3N0CQlzdGFydHVwX2Nvc3QsCisJ CQkJcnVuX2Nvc3QsCiAJCQkJaW5wdXRfcnVuX2Nvc3QgPSBpbnB1dF90b3RhbF9jb3N0IC0g aW5wdXRfc3RhcnR1cF9jb3N0OwogCWRvdWJsZQkJZ3JvdXBfdHVwbGVzLAogCQkJCWlucHV0 X2dyb3VwczsKQEAgLTE5ODUsNyArMjMwMCw3IEBAIGNvc3RfaW5jcmVtZW50YWxfc29ydChQ YXRoICpwYXRoLAogCSAqIHBlc3NpbWlzdGljIGFib3V0IGluY3JlbWVudGFsIHNvcnQgcGVy Zm9ybWFuY2UgYW5kIGluY3JlYXNlIGl0cyBhdmVyYWdlCiAJICogZ3JvdXAgc2l6ZSBieSBo YWxmLgogCSAqLwotCWNvc3RfdHVwbGVzb3J0KCZncm91cF9zdGFydHVwX2Nvc3QsICZncm91 cF9ydW5fY29zdCwKKwljb3N0X3R1cGxlc29ydChyb290LCBwYXRoa2V5cywgJmdyb3VwX3N0 YXJ0dXBfY29zdCwgJmdyb3VwX3J1bl9jb3N0LAogCQkJCSAgIDEuNSAqIGdyb3VwX3R1cGxl cywgd2lkdGgsIGNvbXBhcmlzb25fY29zdCwgc29ydF9tZW0sCiAJCQkJICAgbGltaXRfdHVw bGVzKTsKIApAQCAtMTk5Myw3ICsyMzA4LDcgQEAgY29zdF9pbmNyZW1lbnRhbF9zb3J0KFBh dGggKnBhdGgsCiAJICogU3RhcnR1cCBjb3N0IG9mIGluY3JlbWVudGFsIHNvcnQgaXMgdGhl IHN0YXJ0dXAgY29zdCBvZiBpdHMgZmlyc3QgZ3JvdXAKIAkgKiBwbHVzIHRoZSBjb3N0IG9m IGl0cyBpbnB1dC4KIAkgKi8KLQlzdGFydHVwX2Nvc3QgKz0gZ3JvdXBfc3RhcnR1cF9jb3N0 CisJc3RhcnR1cF9jb3N0ID0gZ3JvdXBfc3RhcnR1cF9jb3N0CiAJCSsgaW5wdXRfc3RhcnR1 cF9jb3N0ICsgZ3JvdXBfaW5wdXRfcnVuX2Nvc3Q7CiAKIAkvKgpAQCAtMjAwMiw3ICsyMzE3 LDcgQEAgY29zdF9pbmNyZW1lbnRhbF9zb3J0KFBhdGggKnBhdGgsCiAJICogZ3JvdXAsIHBs dXMgdGhlIHRvdGFsIGNvc3QgdG8gcHJvY2VzcyB0aGUgcmVtYWluaW5nIGdyb3VwcywgcGx1 cyB0aGUKIAkgKiByZW1haW5pbmcgY29zdCBvZiBpbnB1dC4KIAkgKi8KLQlydW5fY29zdCAr PSBncm91cF9ydW5fY29zdAorCXJ1bl9jb3N0ID0gZ3JvdXBfcnVuX2Nvc3QKIAkJKyAoZ3Jv dXBfcnVuX2Nvc3QgKyBncm91cF9zdGFydHVwX2Nvc3QpICogKGlucHV0X2dyb3VwcyAtIDEp CiAJCSsgZ3JvdXBfaW5wdXRfcnVuX2Nvc3QgKiAoaW5wdXRfZ3JvdXBzIC0gMSk7CiAKQEAg LTIwNDIsNyArMjM1Nyw3IEBAIGNvc3Rfc29ydChQYXRoICpwYXRoLCBQbGFubmVySW5mbyAq cm9vdCwKIAlDb3N0CQlzdGFydHVwX2Nvc3Q7CiAJQ29zdAkJcnVuX2Nvc3Q7CiAKLQljb3N0 X3R1cGxlc29ydCgmc3RhcnR1cF9jb3N0LCAmcnVuX2Nvc3QsCisJY29zdF90dXBsZXNvcnQo cm9vdCwgcGF0aGtleXMsICZzdGFydHVwX2Nvc3QsICZydW5fY29zdCwKIAkJCQkgICB0dXBs ZXMsIHdpZHRoLAogCQkJCSAgIGNvbXBhcmlzb25fY29zdCwgc29ydF9tZW0sCiAJCQkJICAg bGltaXRfdHVwbGVzKTsKQEAgLTIxNDAsNyArMjQ1NSw3IEBAIGFwcGVuZF9ub25wYXJ0aWFs X2Nvc3QoTGlzdCAqc3VicGF0aHMsIGludCBudW1wYXRocywgaW50IHBhcmFsbGVsX3dvcmtl cnMpCiAgKgkgIERldGVybWluZXMgYW5kIHJldHVybnMgdGhlIGNvc3Qgb2YgYW4gQXBwZW5k IG5vZGUuCiAgKi8KIHZvaWQKLWNvc3RfYXBwZW5kKEFwcGVuZFBhdGggKmFwYXRoKQorY29z dF9hcHBlbmQoQXBwZW5kUGF0aCAqYXBhdGgsIFBsYW5uZXJJbmZvICpyb290KQogewogCUxp c3RDZWxsICAgKmw7CiAKQEAgLTIyMDgsNyArMjUyMyw3IEBAIGNvc3RfYXBwZW5kKEFwcGVu ZFBhdGggKmFwYXRoKQogCQkJCQkgKiBhbnkgY2hpbGQuCiAJCQkJCSAqLwogCQkJCQljb3N0 X3NvcnQoJnNvcnRfcGF0aCwKLQkJCQkJCQkgIE5VTEwsIC8qIGRvZXNuJ3QgY3VycmVudGx5 IG5lZWQgcm9vdCAqLworCQkJCQkJCSAgcm9vdCwKIAkJCQkJCQkgIHBhdGhrZXlzLAogCQkJ CQkJCSAgc3VicGF0aC0+dG90YWxfY29zdCwKIAkJCQkJCQkgIHN1YnBhdGgtPnJvd3MsCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9lcXVpdmNsYXNzLmMgYi9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9lcXVpdmNsYXNzLmMKaW5kZXggOGM2NzcwZGU5 NzIuLjU0ODdhZTJlZTRjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9lcXVpdmNsYXNzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvZXF1aXZj bGFzcy5jCkBAIC02ODEsNyArNjgxLDE4IEBAIGdldF9lY2xhc3NfZm9yX3NvcnRfZXhwcihQ bGFubmVySW5mbyAqcm9vdCwKIAogCQkJaWYgKG9wY2ludHlwZSA9PSBjdXJfZW0tPmVtX2Rh dGF0eXBlICYmCiAJCQkJZXF1YWwoZXhwciwgY3VyX2VtLT5lbV9leHByKSkKLQkJCQlyZXR1 cm4gY3VyX2VjOwkvKiBNYXRjaCEgKi8KKwkJCXsKKwkJCQkvKgorCQkJCSAqIE1hdGNoIQor CQkJCSAqCisJCQkJICogQ29weSBzb3J0cmVmIGlmIGl0IHdhc24ndCBzZXQgeWV0LCBpdCdz IHBvc3NpYmxlIGlmIGVjIHdhcworCQkJCSAqIGNvbnN0cnVjdGVkIGZyb20gV0hFUkUgY2xh dXNlLCBpZSBpdCBkb2Vzbid0IGhhdmUgdGFyZ2V0CisJCQkJICogcmVmZXJlbmNlIGF0IGFs bAorCQkJCSAqLworCQkJCWlmIChjdXJfZWMtPmVjX3NvcnRyZWYgPT0gMCAmJiBzb3J0cmVm ID4gMCkKKwkJCQkJY3VyX2VjLT5lY19zb3J0cmVmID0gc29ydHJlZjsKKwkJCQlyZXR1cm4g Y3VyX2VjOworCQkJfQogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGF0aC9wYXRoa2V5cy5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvcGF0 aGtleXMuYwppbmRleCA4NmEzNWNkZWYxNy4uZjE4ZDRjOGU0ZTcgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wYXRoL3BhdGhrZXlzLmMKKysrIGIvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BhdGgvcGF0aGtleXMuYwpAQCAtMTcsMTYgKzE3LDE5IEBACiAgKi8KICNp bmNsdWRlICJwb3N0Z3Jlcy5oIgogCisjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVk ZSAiYWNjZXNzL3N0cmF0bnVtLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19vcGZhbWlseS5o IgogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgogI2luY2x1ZGUgIm5vZGVzL25vZGVG dW5jcy5oIgogI2luY2x1ZGUgIm5vZGVzL3BsYW5ub2Rlcy5oIgorI2luY2x1ZGUgIm9wdGlt aXplci9jb3N0LmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL29wdGltaXplci5oIgogI2luY2x1 ZGUgIm9wdGltaXplci9wYXRobm9kZS5oIgogI2luY2x1ZGUgIm9wdGltaXplci9wYXRocy5o IgogI2luY2x1ZGUgInBhcnRpdGlvbmluZy9wYXJ0Ym91bmRzLmgiCiAjaW5jbHVkZSAidXRp bHMvbHN5c2NhY2hlLmgiCisjaW5jbHVkZSAidXRpbHMvc2VsZnVuY3MuaCIKIAogCiBzdGF0 aWMgYm9vbCBwYXRoa2V5X2lzX3JlZHVuZGFudChQYXRoS2V5ICpuZXdfcGF0aGtleSwgTGlz dCAqcGF0aGtleXMpOwpAQCAtMzM0LDYgKzMzNyw1MzAgQEAgcGF0aGtleXNfY29udGFpbmVk X2luKExpc3QgKmtleXMxLCBMaXN0ICprZXlzMikKIAlyZXR1cm4gZmFsc2U7CiB9CiAKKy8q KioqKioqKioqKioqKioqKioqKioqKio8REVCVUcgUEFSVD4qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqLworYm9vbCBkZWJ1Z19ncm91cF9ieV9yZW9yZGVyX2J5X3Bh dGhrZXlzID0gdHJ1ZTsKK2Jvb2wgZGVidWdfZ3JvdXBfYnlfbWF0Y2hfb3JkZXJfYnkgPSB0 cnVlOworYm9vbCBkZWJ1Z19jaGVhcGVzdF9ncm91cF9ieSA9IHRydWU7CisvKioqKioqKioq KioqKioqKioqKioqKioqPC9ERUJVRyBQQVJUPioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKi8KKworLyoKKyAqIGdyb3VwX2tleXNfcmVvcmRlcl9ieV9wYXRoa2V5cwor ICoJCVJlb3JkZXIgR1JPVVAgQlkga2V5cyB0byBtYXRjaCBwYXRoa2V5cyBvZiBpbnB1dCBw YXRoLgorICoKKyAqIEZ1bmN0aW9uIHJldHVybnMgbmV3IGxpc3RzIChwYXRoa2V5cyBhbmQg Y2xhdXNlcyksIG9yaWdpbmFsIEdST1VQIEJZIGxpc3RzCisgKiBzdGF5IHVudG91Y2hlZC4K KyAqCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgR1JPVVAgQlkga2V5cyB3aXRoIGEgbWF0 Y2hpbmcgcGF0aGtleS4KKyAqLworaW50Citncm91cF9rZXlzX3Jlb3JkZXJfYnlfcGF0aGtl eXMoTGlzdCAqcGF0aGtleXMsIExpc3QgKipncm91cF9wYXRoa2V5cywKKwkJCQkJCQkgICBM aXN0ICoqZ3JvdXBfY2xhdXNlcykKK3sKKwlMaXN0CSAgICpuZXdfZ3JvdXBfcGF0aGtleXM9 IE5JTCwKKwkJCSAgICpuZXdfZ3JvdXBfY2xhdXNlcyA9IE5JTDsKKwlMaXN0Q2VsbCAgICps YzsKKwlpbnQJCQluOworCisJaWYgKGRlYnVnX2dyb3VwX2J5X3Jlb3JkZXJfYnlfcGF0aGtl eXMgPT0gZmFsc2UpCisJCXJldHVybiAwOworCisJaWYgKHBhdGhrZXlzID09IE5JTCB8fCAq Z3JvdXBfcGF0aGtleXMgPT0gTklMKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogV2FsayB0 aGUgcGF0aGtleXMgKGRldGVybWluaW5nIG9yZGVyaW5nIG9mIHRoZSBpbnB1dCBwYXRoKSBh bmQgc2VlIGlmCisJICogdGhlcmUncyBhIG1hdGNoaW5nIEdST1VQIEJZIGtleS4gSWYgd2Ug ZmluZCBvbmUsIHdlIGFwcGVuZCBpZiB0byB0aGUKKwkgKiBsaXN0LCBhbmQgZG8gdGhlIHNh bWUgZm9yIHRoZSBjbGF1c2VzLgorCSAqCisJICogT25jZSB3ZSBmaW5kIGZpcnN0IHBhdGhr ZXkgd2l0aG91dCBhIG1hdGNoaW5nIEdST1VQIEJZIGtleSwgdGhlIHJlc3Qgb2YKKwkgKiB0 aGUgcGF0aGtleXMgaXMgdXNlbGVzcyBhbmQgY2FuJ3QgYmUgdXNlZCB0byBldmFsdWF0ZSB0 aGUgZ3JvdXBpbmcsIHNvCisJICogd2UgYWJvcnQgdGhlIGxvb3AgYW5kIGlnbm9yZSB0aGUg cmVtYWluaW5nIHBhdGhrZXlzLgorCSAqCisJICogWFhYIFBhdGhrZXlzIGFyZSBidWlsdCBp biBhIHdheSB0byBhbGxvdyBzaW1wbHkgY29tcGFyaW5nIHBvaW50ZXJzLgorCSAqLworCWZv cmVhY2gobGMsIHBhdGhrZXlzKQorCXsKKwkJUGF0aEtleQkJCSpwYXRoa2V5ID0gKFBhdGhL ZXkgKikgbGZpcnN0KGxjKTsKKwkJU29ydEdyb3VwQ2xhdXNlCSpzZ2M7CisKKwkJLyogYWJv cnQgb24gZmlyc3QgbWlzbWF0Y2ggKi8KKwkJaWYgKCFsaXN0X21lbWJlcl9wdHIoKmdyb3Vw X3BhdGhrZXlzLCBwYXRoa2V5KSkKKwkJCWJyZWFrOworCisJCW5ld19ncm91cF9wYXRoa2V5 cyA9IGxhcHBlbmQobmV3X2dyb3VwX3BhdGhrZXlzLCBwYXRoa2V5KTsKKworCQlzZ2MgPSBn ZXRfc29ydGdyb3VwcmVmX2NsYXVzZShwYXRoa2V5LT5wa19lY2xhc3MtPmVjX3NvcnRyZWYs CisJCQkJCQkJCQkgICpncm91cF9jbGF1c2VzKTsKKworCQluZXdfZ3JvdXBfY2xhdXNlcyA9 IGxhcHBlbmQobmV3X2dyb3VwX2NsYXVzZXMsIHNnYyk7CisJfQorCisJLyogcmVtZW1iZXIg dGhlIG51bWJlciBvZiBwYXRoa2V5cyB3aXRoIGEgbWF0Y2hpbmcgR1JPVVAgQlkga2V5ICov CisJbiA9IGxpc3RfbGVuZ3RoKG5ld19ncm91cF9wYXRoa2V5cyk7CisKKwkvKiBYWFggbWF5 YmUgcmV0dXJuIHdoZW4gKG4gPT0gMCkgKi8KKworCS8qIGFwcGVuZCB0aGUgcmVtYWluaW5n IGdyb3VwIHBhdGhrZXlzICh3aWxsIGJlIHRyZWF0ZWQgYXMgbm90IHNvcnRlZCkgKi8KKwkq Z3JvdXBfcGF0aGtleXMgPSBsaXN0X2NvbmNhdF91bmlxdWVfcHRyKG5ld19ncm91cF9wYXRo a2V5cywKKwkJCQkJCQkJCQkJICpncm91cF9wYXRoa2V5cyk7CisJKmdyb3VwX2NsYXVzZXMg PSBsaXN0X2NvbmNhdF91bmlxdWVfcHRyKG5ld19ncm91cF9jbGF1c2VzLAorCQkJCQkJCQkJ CQkqZ3JvdXBfY2xhdXNlcyk7CisKKwlyZXR1cm4gbjsKK30KKworLyoKKyAqIFVzZWQgdG8g Z2VuZXJhdGUgYWxsIHBlcm11dGF0aW9ucyBvZiBhIHBhdGhrZXkgbGlzdC4KKyAqLwordHlw ZWRlZiBzdHJ1Y3QgUGF0aGtleU11dGF0b3JTdGF0ZSB7CisJTGlzdAkgICAqZWxlbXNMaXN0 OworCUxpc3RDZWxsICAqKmVsZW1DZWxsczsKKwl2b2lkCSAgKiplbGVtczsKKwlpbnQJCSAg ICpwb3NpdGlvbnM7CisJaW50CQkJIG11dGF0b3JOQ29sdW1uczsKKwlpbnQJCQkgY291bnQ7 Cit9IFBhdGhrZXlNdXRhdG9yU3RhdGU7CisKKworLyoKKyAqIFBhdGhrZXlNdXRhdG9ySW5p dAorICoJCUluaXRpYWxpemUgc3RhdGUgb2YgdGhlIHBlcm11dGF0aW9uIGdlbmVyYXRvci4K KyAqCisgKiBXZSB3YW50IHRvIGdlbmVyYXRlIHBlcm11dGF0aW9ucyBvZiBlbGVtZW50cyBp biB0aGUgImVsZW1zIiBsaXN0LiBXZSBtYXkgd2FudAorICogdG8gc2tpcCBzb21lIG51bWJl ciBvZiBlbGVtZW50cyBhdCB0aGUgYmVnaW5uaW5nICh3aGVuIHRyZWF0aW5nIGFzIHByZXNv cnRlZCkKKyAqIG9yIGF0IHRoZSBlbmQgKHdlIG9ubHkgcGVybXV0ZSBhIGxpbWl0ZWQgbnVt YmVyIG9mIGdyb3VwIGtleXMpLgorICoKKyAqIFRoZSBsaXN0IGlzIGRlY29tcG9zZWQgaW50 byBlbGVtZW50cywgYW5kIHdlIGFsc28ga2VlcCBwb2ludGVycyB0byBpbmRpdmlkdWFsCisg KiBjZWxscy4gVGhpcyBhbGxvd3MgdXMgdG8gYnVpbGQgdGhlIHBlcm11dGVkIGxpc3QgcXVp Y2tseSBhbmQgY2hlYXBseSwgd2l0aG91dAorICogY3JlYXRpbmcgYW55IGNvcGllcy4KKyAq Lworc3RhdGljIHZvaWQKK1BhdGhrZXlNdXRhdG9ySW5pdChQYXRoa2V5TXV0YXRvclN0YXRl ICpzdGF0ZSwgTGlzdCAqZWxlbXMsIGludCBzdGFydCwgaW50IGVuZCkKK3sKKwlpbnQgaTsK KwlpbnQJCQluID0gZW5kIC0gc3RhcnQ7CisJTGlzdENlbGwJKmxjOworCisJbWVtc2V0KHN0 YXRlLCAwLCBzaXplb2YoKnN0YXRlKSk7CisKKwlzdGF0ZS0+bXV0YXRvck5Db2x1bW5zID0g bjsKKworCXN0YXRlLT5lbGVtc0xpc3QgPSBsaXN0X2NvcHkoZWxlbXMpOworCisJc3RhdGUt PmVsZW1zID0gcGFsbG9jKHNpemVvZih2b2lkKikgKiBuKTsKKwlzdGF0ZS0+ZWxlbUNlbGxz ID0gcGFsbG9jKHNpemVvZihMaXN0Q2VsbCopICogbik7CisJc3RhdGUtPnBvc2l0aW9ucyA9 IHBhbGxvYyhzaXplb2YoaW50KSAqIG4pOworCisJaSA9IDA7CisJZm9yX2VhY2hfY2VsbChs Yywgc3RhdGUtPmVsZW1zTGlzdCwgbGlzdF9udGhfY2VsbChzdGF0ZS0+ZWxlbXNMaXN0LCBz dGFydCkpCisJeworCQlzdGF0ZS0+ZWxlbUNlbGxzW2ldID0gbGM7CisJCXN0YXRlLT5lbGVt c1tpXSA9IGxmaXJzdChsYyk7CisJCXN0YXRlLT5wb3NpdGlvbnNbaV0gPSBpICsgMTsKKwkJ aSsrOworCisJCWlmIChpID49IG4pCisJCQlicmVhazsKKwl9Cit9CisKKy8qIFN3YXAgdHdv IGVsZW1lbnRzIG9mIGFuIGFycmF5LiAqLworc3RhdGljIHZvaWQKK1BhdGhrZXlNdXRhdG9y U3dhcChpbnQgKmEsIGludCBpLCBpbnQgaikKK3sKKyAgaW50IHMgPSBhW2ldOworCisgIGFb aV0gPSBhW2pdOworICBhW2pdID0gczsKK30KKworLyoKKyAqIEdlbmVyYXRlIHRoZSBuZXh0 IHBlcm11dGF0aW9uIG9mIGVsZW1lbnRzLgorICovCitzdGF0aWMgYm9vbAorUGF0aGtleU11 dGF0b3JOZXh0U2V0KGludCAqYSwgaW50IG4pCit7CisJaW50IGosIGssIGwsIHI7CisKKwlq ID0gbiAtIDI7CisKKwl3aGlsZSAoaiA+PSAwICYmIGFbal0gPj0gYVtqICsgMV0pCisJCWot LTsKKworCWlmIChqIDwgMCkKKwkJcmV0dXJuIGZhbHNlOworCisJayA9IG4gLSAxOworCisJ d2hpbGUgKGsgPj0gMCAmJiBhW2pdID49IGFba10pCisJCWstLTsKKworCVBhdGhrZXlNdXRh dG9yU3dhcChhLCBqLCBrKTsKKworCWwgPSBqICsgMTsKKwlyID0gbiAtIDE7CisKKwl3aGls ZSAobCA8IHIpCisJCVBhdGhrZXlNdXRhdG9yU3dhcChhLCBsKyssIHItLSk7CisKKwlyZXR1 cm4gdHJ1ZTsKK30KKworLyoKKyAqIFBhdGhrZXlNdXRhdG9yTmV4dAorICoJCUdlbmVyYXRl IHRoZSBuZXh0IHBlcm11dGF0aW9uIG9mIGxpc3Qgb2YgZWxlbWVudHMuCisgKgorICogUmV0 dXJucyB0aGUgbmV4dCBwZXJtdXRhdGlvbiAoYXMgYSBsaXN0IG9mIGVsZW1lbnRzKSBvciBO SUwgaWYgdGhlcmUgYXJlIG5vCisgKiBtb3JlIHBlcm11dGF0aW9ucy4KKyAqLworc3RhdGlj IExpc3QgKgorUGF0aGtleU11dGF0b3JOZXh0KFBhdGhrZXlNdXRhdG9yU3RhdGUgKnN0YXRl KQoreworCWludAlpOworCisJc3RhdGUtPmNvdW50Kys7CisKKwkvKiBmaXJzdCBwZXJtdXRh dGlvbiBpcyBvcmlnaW5hbCBsaXN0ICovCisJaWYgKHN0YXRlLT5jb3VudCA9PSAxKQorCQly ZXR1cm4gc3RhdGUtPmVsZW1zTGlzdDsKKworCS8qIHdoZW4gdGhlcmUgYXJlIG5vIG1vcmUg cGVybXV0YXRpb25zLCByZXR1cm4gTklMICovCisJaWYgKCFQYXRoa2V5TXV0YXRvck5leHRT ZXQoc3RhdGUtPnBvc2l0aW9ucywgc3RhdGUtPm11dGF0b3JOQ29sdW1ucykpCisJeworCQlw ZnJlZShzdGF0ZS0+ZWxlbXMpOworCQlwZnJlZShzdGF0ZS0+ZWxlbUNlbGxzKTsKKwkJcGZy ZWUoc3RhdGUtPnBvc2l0aW9ucyk7CisKKwkJbGlzdF9mcmVlKHN0YXRlLT5lbGVtc0xpc3Qp OworCisJCXJldHVybiBOSUw7CisJfQorCisJLyogdXBkYXRlIHRoZSBsaXN0IGNlbGxzIHRv IHBvaW50IHRvIHRoZSByaWdodCBlbGVtZW50cyAqLworCWZvcihpPTA7IGk8c3RhdGUtPm11 dGF0b3JOQ29sdW1uczsgaSsrKQorCQlsZmlyc3Qoc3RhdGUtPmVsZW1DZWxsc1tpXSkgPQor CQkJKHZvaWQgKikgc3RhdGUtPmVsZW1zWyBzdGF0ZS0+cG9zaXRpb25zW2ldIC0gMSBdOwor CisJcmV0dXJuIHN0YXRlLT5lbGVtc0xpc3Q7Cit9CisKKy8qCisgKiBDb3N0IG9mIGNvbXBh cmluZyBwYXRoa2V5cy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgUGF0aGtleVNvcnRDb3N0Cit7 CisJQ29zdAkJY29zdDsKKwlQYXRoS2V5CSAgICpwYXRoa2V5OworfSBQYXRoa2V5U29ydENv c3Q7CisKK3N0YXRpYyBpbnQKK3BhdGhrZXlfc29ydF9jb3N0X2NvbXBhcmF0b3IoY29uc3Qg dm9pZCAqX2EsIGNvbnN0IHZvaWQgKl9iKQoreworCWNvbnN0IFBhdGhrZXlTb3J0Q29zdCAq YSA9IChQYXRoa2V5U29ydENvc3QgKikgX2E7CisJY29uc3QgUGF0aGtleVNvcnRDb3N0ICpi ID0gKFBhdGhrZXlTb3J0Q29zdCAqKSBfYjsKKworCWlmIChhLT5jb3N0IDwgYi0+Y29zdCkK KwkJcmV0dXJuIC0xOworCWVsc2UgaWYgKGEtPmNvc3QgPT0gYi0+Y29zdCkKKwkJcmV0dXJu IDA7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBnZXRfY2hlYXBlc3RfZ3JvdXBfa2V5c19v cmRlcgorICoJCVJldHVybnMgdGhlIHBhdGhrZXlzIGluIGFuIG9yZGVyIGNoZWFwZXN0IHRv IGV2YWx1YXRlLgorICoKKyAqIEdpdmVuIGEgbGlzdCBvZiBwYXRoa2V5cywgd2UgdHJ5IHRv IHJlb3JkZXIgdGhlbSBpbiBhIHdheSB0aGF0IG1pbmltaXplcworICogdGhlIENQVSBjb3N0 IG9mIHNvcnRpbmcuIFRoaXMgZGVwZW5kcyBtYWlubHkgb24gdGhlIGNvc3Qgb2YgY29tcGFy YXRvcgorICogZnVuY3Rpb24gKHRoZSBwYXRoa2V5cyBtYXkgdXNlIGRpZmZlcmVudCBkYXRh IHR5cGVzKSBhbmQgdGhlIG51bWJlciBvZgorICogZGlzdGluY3QgdmFsdWVzIGluIGVhY2gg Y29sdW1uICh3aGljaCBhZmZlY3RzIHRoZSBudW1iZXIgb2YgY29tcGFyYXRvcgorICogY2Fs bHMgZm9yIHRoZSBmb2xsb3dpbmcgcGF0aGtleXMpLgorICoKKyAqIEluIGNhc2UgdGhlIGlu cHV0IGlzIHBhcnRpYWxseSBzb3J0ZWQsIG9ubHkgdGhlIHJlbWFpbmluZyBwYXRoa2V5cyBh cmUKKyAqIGNvbnNpZGVyZWQuCisgKgorICogUmV0dXJucyBuZXdseSBhbGxvY2F0ZWQgbGlz dHMuIElmIG5vIHJlb3JkZXJpbmcgaXMgcG9zc2libGUgKG9yIG5lZWRlZCksCisgKiB0aGUg bGlzdHMgYXJlIHNldCB0byBOSUwuCisgKi8KK3N0YXRpYyBib29sCitnZXRfY2hlYXBlc3Rf Z3JvdXBfa2V5c19vcmRlcihQbGFubmVySW5mbyAqcm9vdCwgZG91YmxlIG5yb3dzLAorCQkJ CQkJCSAgTGlzdCAqKmdyb3VwX3BhdGhrZXlzLCBMaXN0ICoqZ3JvdXBfY2xhdXNlcywKKwkJ CQkJCQkgIGludCBuX3ByZW9yZGVyZWQpCit7CisJTGlzdAkJICAgKm5ld19ncm91cF9wYXRo a2V5cyA9IE5JTCwKKwkJCQkgICAqbmV3X2dyb3VwX2NsYXVzZXMgPSBOSUwsCisJCQkJICAg KnZhcl9ncm91cF9wYXRoa2V5czsKKworCUxpc3RDZWxsCSAgICpjZWxsOworCVBhdGhrZXlN dXRhdG9yU3RhdGUJbXN0YXRlOworCWRvdWJsZQkJCWNoZWFwZXN0X3NvcnRfY29zdCA9IC0x LjA7CisKKwlpbnQgbkZyZWVLZXlzOworCWludCBuVG9QZXJtdXRlOworCisJLyogSWYgdGhp cyBvcHRpbWl6YXRpb24gaXMgZGlzYWJsZWQsIHdlJ3JlIGRvbmUuICovCisJaWYgKCFkZWJ1 Z19jaGVhcGVzdF9ncm91cF9ieSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogSWYgdGhlcmUg YXJlIGxlc3MgdGhhbiAyIHVuc29ydGVkIHBhdGhrZXlzLCB3ZSdyZSBkb25lLiAqLworCWlm IChsaXN0X2xlbmd0aCgqZ3JvdXBfcGF0aGtleXMpIC0gbl9wcmVvcmRlcmVkIDwgMikKKwkJ cmV0dXJuIGZhbHNlOworCisJLyoKKwkgKiBXZSBjb3VsZCBleGhhdXN0aXZlbHkgY29zdCBh bGwgcG9zc2libGUgb3JkZXJpbmdzIG9mIHRoZSBwYXRoa2V5cywgYnV0IGZvcgorCSAqIGxh cmdlIG51bWJlciBvZiBwYXRoa2V5cyB0aGF0IG1pZ2h0IGJlIHByb2hpYml0aXZlbHkgZXhw ZW5zaXZlLiBTbyB3ZSB0cnkKKwkgKiB0byBhcHBseSBhIHNpbXBsZSBjaGVhcCBoZXVyaXN0 aWNzIGZpcnN0IC0gd2Ugc29ydCB0aGUgcGF0aGtleXMgYnkgc29ydAorCSAqIGNvc3QgKGFz IGlmIHRoZSBwYXRoa2V5IHdhcyBzb3J0ZWQgaW5kZXBlbmRlbnRseSkgYW5kIHRoZW4gY2hl Y2sgb25seSB0aGUKKwkgKiBmb3VyIGNoZWFwZXN0IHBhdGhrZXlzLiBUaGUgcmVtYWluaW5n IHBhdGhrZXlzIGFyZSBrZXB0IG9yZGVyZWQgYnkgY29zdC4KKwkgKgorCSAqIFhYWCBUaGlz IGlzIGEgdmVyeSBzaW1wbGUgaGV1cmlzdGljcywgYW5kIGxpa2VseSB0byB3b3JrIGZpbmUg Zm9yIG1vc3QKKwkgKiBjYXNlcyAoYmVjYXVzZSBudW1iZXIgb2YgR1JPVVAgQlkgY2xhdXNl cyB0ZW5kcyB0byBiZSBsb3dlciB0aGFuIDQpLiBCdXQKKwkgKiBpdCBpZ25vcmVzIGhvdyB0 aGUgbnVtYmVyIG9mIGRpc3RpbmN0IHZhbHVlcyBpbiBlYWNoIHBhdGhrZXkgYWZmZWN0cyB0 aGUKKwkgKiBmb2xsb3dpbmcgc29ydHMuIEl0IG1heSBiZSBiZXR0ZXIgdG8gdXNlICJtb3Jl IGV4cGVuc2l2ZSIgcGF0aGtleSBmaXJzdAorCSAqIGlmIGl0IGhhcyBtYW55IGRpc3RpbmN0 IHZhbHVlcywgYmVjYXVzZSBpdCB0aGVuIGxpbWl0cyB0aGUgbnVtYmVyIG9mCisJICogY29t cGFyaXNvbnMgZm9yIHRoZSByZW1haW5pbmcgcGF0aGtleXMuIEJ1dCBldmFsdWF0aW5nIHRo YXQgaXMga2luZGEgdGhlCisJICogZXhwZW5zaXZlIGJpdCB3ZSdyZSB0cnlpbmcgdG8gbm90 IGRvLgorCSAqLworCW5GcmVlS2V5cyA9IGxpc3RfbGVuZ3RoKCpncm91cF9wYXRoa2V5cykg LSBuX3ByZW9yZGVyZWQ7CisJblRvUGVybXV0ZSA9IDQ7CisJaWYgKG5GcmVlS2V5cyA+IG5U b1Blcm11dGUpCisJeworCQlpbnQgaTsKKwkJUGF0aGtleVNvcnRDb3N0ICpjb3N0cyA9IHBh bGxvYyhzaXplb2YoUGF0aGtleVNvcnRDb3N0KSAqIG5GcmVlS2V5cyk7CisKKwkJLyogc2tp cCB0aGUgcHJlLW9yZGVyZWQgcGF0aGtleXMgKi8KKwkJY2VsbCA9IGxpc3RfbnRoX2NlbGwo Kmdyb3VwX3BhdGhrZXlzLCBuX3ByZW9yZGVyZWQpOworCisJCS8qIGVzdGltYXRlIGNvc3Qg Zm9yIHNvcnRpbmcgaW5kaXZpZHVhbCBwYXRoa2V5cyAqLworCQlmb3IgKGkgPSAwOyBjZWxs ICE9IE5VTEw7IGkrKywgKGNlbGwgPSBsbmV4dCgqZ3JvdXBfcGF0aGtleXMsIGNlbGwpKSkK KwkJeworCQkJTGlzdCAqdG9fY29zdCA9IGxpc3RfbWFrZTEobGZpcnN0KGNlbGwpKTsKKwor CQkJQXNzZXJ0KGkgPCBuRnJlZUtleXMpOworCisJCQljb3N0c1tpXS5wYXRoa2V5ID0gbGZp cnN0KGNlbGwpOworCQkJY29zdHNbaV0uY29zdCA9IGNvc3Rfc29ydF9lc3RpbWF0ZShyb290 LCB0b19jb3N0LCAwLCBucm93cyk7CisKKwkJCXBmcmVlKHRvX2Nvc3QpOworCQl9CisKKwkJ Lyogc29ydCB0aGUgcGF0aGtleXMgYnkgc29ydCBjb3N0IGluIGFzY2VuZGluZyBvcmRlciAq LworCQlxc29ydChjb3N0cywgbkZyZWVLZXlzLCBzaXplb2YoKmNvc3RzKSwgcGF0aGtleV9z b3J0X2Nvc3RfY29tcGFyYXRvcik7CisKKwkJLyoKKwkJICogUmVidWlsZCB0aGUgbGlzdCBv ZiBwYXRoa2V5cyAtIGZpcnN0IHRoZSBwcmVvcmRlcmVkIG9uZXMsIHRoZW4gdGhlCisJCSAq IHJlc3Qgb3JkZXJlZCBieSBjb3N0LgorCQkgKi8KKwkJbmV3X2dyb3VwX3BhdGhrZXlzID0g bGlzdF90cnVuY2F0ZShsaXN0X2NvcHkoKmdyb3VwX3BhdGhrZXlzKSwgbl9wcmVvcmRlcmVk KTsKKworCQlmb3IgKGkgPSAwOyBpIDwgbkZyZWVLZXlzOyBpKyspCisJCQluZXdfZ3JvdXBf cGF0aGtleXMgPSBsYXBwZW5kKG5ld19ncm91cF9wYXRoa2V5cywgY29zdHNbaV0ucGF0aGtl eSk7CisKKwkJcGZyZWUoY29zdHMpOworCX0KKwllbHNlCisJeworCQkvKgorCQkgKiBTaW5j ZSB2MTMgbGlzdF9mcmVlKCkgY2FuIGNsZWFuIGxpc3QgZWxlbWVudHMgc28gZm9yIG9yaWdp bmFsIGxpc3QKKwkJICogbm90IHRvIGJlIG1vZGlmaWVkIGl0IHNob3VsZCBiZSBjb3BpZWQg dG8gYSBuZXcgb25lIHdoaWNoIGNhbiB0aGVuCisJCSAqIGJlIGNsZWFuZWQgc2FmZWx5IGlm IG5lZWRlZC4KKwkJICovCisJCW5ld19ncm91cF9wYXRoa2V5cyA9IGxpc3RfY29weSgqZ3Jv dXBfcGF0aGtleXMpOworCQluVG9QZXJtdXRlID0gbkZyZWVLZXlzOworCX0KKworCUFzc2Vy dChsaXN0X2xlbmd0aChuZXdfZ3JvdXBfcGF0aGtleXMpID09IGxpc3RfbGVuZ3RoKCpncm91 cF9wYXRoa2V5cykpOworCisJLyoKKwkgKiBHZW5lcmF0ZSBwYXRoa2V5IGxpc3RzIHdpdGgg cGVybXV0YXRpb25zIG9mIHRoZSBmaXJzdCBuVG9QZXJtdXRlIHBhdGhrZXlzLgorCSAqCisJ ICogWFhYIFdlIHNpbXBseSBjYWxjdWxhdGUgc29ydCBjb3N0IGZvciBlYWNoIGluZGl2aWR1 YWwgcGF0aGtleSBsaXN0LCBidXQKKwkgKiB0aGVyZSdzIHJvb20gZm9yIHR3byBkeW5hbWlj IHByb2dyYW1taW5nIG9wdGltaXphdGlvbnMgaGVyZS4gRmlyc3RseSwgd2UKKwkgKiBtYXkg cGFzcyB0aGUgY3VycmVudCAiYmVzdCIgY29zdCB0byBjb3N0X3NvcnRfZXN0aW1hdGUgc28g dGhhdCBpdCBjYW4KKwkgKiAiYWJvcnQiIGlmIHRoZSBlc3RpbWF0ZWQgcGF0aGtleXMgbGlz dCBleGNlZWRzIGl0LiBTZWNvbmRseSwgaXQgY291bGQgcGFzcworCSAqIHJldHVybiBpbmZv cm1hdGlvbiBhYm91dCB0aGUgcG9zaXRpb24gd2hlbiBpdCBleGNlZWRlZCB0aGUgY29zdCwg YW5kIHdlCisJICogY291bGQgc2tpcCBhbGwgcGVybXV0YXRpb25zIHdpdGggdGhlIHNhbWUg cHJlZml4LgorCSAqCisJICogSW1hZ2luZSB3ZSd2ZSBhbHJlYWR5IGZvdW5kIG9yZGVyaW5n IHdpdGggY29zdCBDMSwgYW5kIHdlJ3JlIGV2YWx1YXRpbmcKKwkgKiBhbm90aGVyIG9yZGVy aW5nIC0gY29zdF9zb3J0X2VzdGltYXRlKCkgY2FsY3VsYXRlcyBjb3N0IGJ5IGFkZGluZyB0 aGUKKwkgKiBwYXRoa2V5cyBvbmUgYnkgb25lIChtb3JlIG9yIGxlc3MpLCBhbmQgdGhlIGNv c3Qgb25seSBncm93cy4gSWYgYXQgYW55CisJICogcG9pbnQgaXQgZXhjZWVkcyBDMSwgaXQg Y2FuJ3QgcG9zc2libHkgYmUgImJldHRlciIgc28gd2UgY2FuIGRpc2NhcmQgaXQuCisJICog QnV0IHdlIGFsc28ga25vdyB0aGF0IHdlIGNhbiBkaXNjYXJkIGFsbCBvcmRlcmluZyB3aXRo IHRoZSBzYW1lIHByZWZpeCwKKwkgKiBiZWNhdXNlIGlmIHdlJ3JlIGVzdGltYXRpbmcgKGEs YixjLGQpIGFuZCB3ZSBleGNlZWRlZCBDMSBhdCAoYSxiKSB0aGVuCisJICogdGhlIHNhbWUg dGhpbmcgd2lsbCBoYXBwZW4gZm9yIGFueSBvcmRlcmluZyB3aXRoIHRoaXMgcHJlZml4Lgor CSAqCisJICoKKwkgKi8KKwlQYXRoa2V5TXV0YXRvckluaXQoJm1zdGF0ZSwgbmV3X2dyb3Vw X3BhdGhrZXlzLCBuX3ByZW9yZGVyZWQsIG5fcHJlb3JkZXJlZCArIG5Ub1Blcm11dGUpOwor CisJd2hpbGUoKHZhcl9ncm91cF9wYXRoa2V5cyA9IFBhdGhrZXlNdXRhdG9yTmV4dCgmbXN0 YXRlKSkgIT0gTklMKQorCXsKKwkJQ29zdAljb3N0OworCisJCWNvc3QgPSBjb3N0X3NvcnRf ZXN0aW1hdGUocm9vdCwgdmFyX2dyb3VwX3BhdGhrZXlzLCBuX3ByZW9yZGVyZWQsIG5yb3dz KTsKKworCQlpZiAoY29zdCA8IGNoZWFwZXN0X3NvcnRfY29zdCB8fCBjaGVhcGVzdF9zb3J0 X2Nvc3QgPCAwKQorCQl7CisJCQlsaXN0X2ZyZWUobmV3X2dyb3VwX3BhdGhrZXlzKTsKKwkJ CW5ld19ncm91cF9wYXRoa2V5cyA9IGxpc3RfY29weSh2YXJfZ3JvdXBfcGF0aGtleXMpOwor CQkJY2hlYXBlc3Rfc29ydF9jb3N0ID0gY29zdDsKKwkJfQorCX0KKworCS8qIFJlb3JkZXIg dGhlIGdyb3VwIGNsYXVzZXMgYWNjb3JkaW5nIHRvIHRoZSByZW9yZGVyZWQgcGF0aGtleXMu ICovCisJZm9yZWFjaChjZWxsLCBuZXdfZ3JvdXBfcGF0aGtleXMpCisJeworCQlQYXRoS2V5 CQkJKnBhdGhrZXkgPSAoUGF0aEtleSAqKSBsZmlyc3QoY2VsbCk7CisKKwkJbmV3X2dyb3Vw X2NsYXVzZXMgPSBsYXBwZW5kKG5ld19ncm91cF9jbGF1c2VzLAorCQkJCQkJZ2V0X3NvcnRn cm91cHJlZl9jbGF1c2UocGF0aGtleS0+cGtfZWNsYXNzLT5lY19zb3J0cmVmLAorCQkJCQkJ CQkJCQkJKmdyb3VwX2NsYXVzZXMpKTsKKwl9CisKKwkvKiBKdXN0IGFwcGVuZCB0aGUgcmVz dCBHUk9VUCBCWSBjbGF1c2VzICovCisJbmV3X2dyb3VwX2NsYXVzZXMgPSBsaXN0X2NvbmNh dF91bmlxdWVfcHRyKG5ld19ncm91cF9jbGF1c2VzLAorCQkJCQkJCQkJCQkgICAqZ3JvdXBf Y2xhdXNlcyk7CisKKwkqZ3JvdXBfcGF0aGtleXMgPSBuZXdfZ3JvdXBfcGF0aGtleXM7CisJ Kmdyb3VwX2NsYXVzZXMgPSBuZXdfZ3JvdXBfY2xhdXNlczsKKworCXJldHVybiB0cnVlOwor fQorCisvKgorICogZ2V0X3VzZWZ1bF9ncm91cF9rZXlzX29yZGVyaW5ncworICoJCURldGVy bWluZSB3aGljaCBvcmRlcmluZ3Mgb2YgR1JPVVAgQlkga2V5cyBhcmUgcG90ZW50aWFsbHkg aW50ZXJlc3RpbmcuCisgKgorICogUmV0dXJucyBsaXN0IG9mIFBhdGhLZXlJbmZvIGl0ZW1z LCBlYWNoIHJlcHJlc2VudGluZyBhbiBpbnRlcmVzdGluZyBvcmRlcmluZworICogb2YgR1JP VVAgQlkga2V5cy4gRWFjaCBpdGVtcyBzdG9yZXMgcGF0aGtleXMgYW5kIGNsYXVzZXMgaW4g bWF0Y2hpbmcgb3JkZXIuCisgKgorICogVGhlIGZ1bmN0aW9uIGNvbnNpZGVycyAoYW5kIGtl ZXBzKSBtdWx0aXBsZSBncm91cCBieSBvcmRlcmluZ3M6CisgKgorICogLSB0aGUgb3JpZ2lu YWwgb3JkZXJpbmcsIGFzIHNwZWNpZmllZCBieSB0aGUgR1JPVVAgQlkgY2xhdXNlCisgKgor ICogLSBHUk9VUCBCWSBrZXlzIHJlb3JkZXJlZCB0byBtaW5pbWl6ZSB0aGUgc29ydCBjb3N0 CisgKgorICogLSBHUk9VUCBCWSBrZXlzIHJlb3JkZXJlZCB0byBtYXRjaCBwYXRoIG9yZGVy aW5nIChhcyBtdWNoIGFzIHBvc3NpYmxlKSwgd2l0aAorICogICB0aGUgdGFpbCByZW9yZWRl cmVkIHRvIG1pbmltaXplIHRoZSBzb3J0IGNvc3QKKyAqCisgKiAtIEdST1VQIEJZIGtleXMg dG8gbWF0Y2ggdGFyZ2V0IE9SREVSIEJZIGNsYXVzZSAoYXMgbXVjaCBhcyBwb3NzaWJsZSks IHdpdGgKKyAqICAgdGhlIHRhaWwgcmVvcmVkZXJlZCB0byBtaW5pbWl6ZSB0aGUgc29ydCBj b3N0CisgKgorICogVGhlcmUgYXJlIG90aGVyIHBvdGVudGlhbGx5IGludGVyZXN0aW5nIG9y ZGVyaW5ncyAoZS5nLiBpdCBtaWdodCBiZSBiZXN0IHRvCisgKiBtYXRjaCB0aGUgZmlyc3Qg T1JERVIgQlkga2V5LCBvcmRlciB0aGUgcmVtYWluaW5nIGtleXMgZGlmZmVyZW50bHkgYW5k IHRoZW4KKyAqIHJlbHkgb24gaW5jcmVtZW50YWwgc29ydCB0byBmaXggdGhpcyksIGJ1dCB3 ZSBpZ25vcmUgdGhvc2UgZm9yIG5vdy4gVG8gbWFrZQorICogdGhpcyB3b3JrIHdlJ2QgaGF2 ZSB0byBwcmV0dHkgbXVjaCBnZW5lcmF0ZSBhbGwgcG9zc2libGUgcGVybXV0YXRpb25zLgor ICovCitMaXN0ICoKK2dldF91c2VmdWxfZ3JvdXBfa2V5c19vcmRlcmluZ3MoUGxhbm5lcklu Zm8gKnJvb3QsIGRvdWJsZSBucm93cywKKwkJCQkJCQkJTGlzdCAqcGF0aF9wYXRoa2V5cywK KwkJCQkJCQkJTGlzdCAqZ3JvdXBfcGF0aGtleXMsIExpc3QgKmdyb3VwX2NsYXVzZXMpCit7 CisJUXVlcnkJICAgKnBhcnNlID0gcm9vdC0+cGFyc2U7CisJTGlzdAkgICAqaW5mb3MgPSBO SUw7CisJUGF0aEtleUluZm8gKmluZm87CisJaW50CQkJbl9wcmVvcmRlcmVkID0gMDsKKwor CUxpc3QgKnBhdGhrZXlzID0gZ3JvdXBfcGF0aGtleXM7CisJTGlzdCAqY2xhdXNlcyA9IGdy b3VwX2NsYXVzZXM7CisKKwkvKiBhbHdheXMgcmV0dXJuIGF0IGxlYXN0IHRoZSBvcmlnaW5h bCBwYXRoa2V5cy9jbGF1c2VzICovCisJaW5mbyA9IG1ha2VOb2RlKFBhdGhLZXlJbmZvKTsK KwlpbmZvLT5wYXRoa2V5cyA9IHBhdGhrZXlzOworCWluZm8tPmNsYXVzZXMgPSBjbGF1c2Vz OworCisJaW5mb3MgPSBsYXBwZW5kKGluZm9zLCBpbmZvKTsKKworCS8qIGZvciBncm91cGlu ZyBzZXRzIHdlIGNhbid0IGRvIGFueSByZW9yZGVyaW5nICovCisJaWYgKHBhcnNlLT5ncm91 cGluZ1NldHMpCisJCXJldHVybiBpbmZvczsKKworCS8qCisJICogVHJ5IHJlb3JkZXJpbmcg cGF0aGtleXMgdG8gbWluaW1pemUgdGhlIHNvcnQgY29zdCwgaWdub3JpbmcgYm90aCB0aGUK KwkgKiB0YXJnZXQgb3JkZXJpbmcgKE9SREVSIEJZKSBhbmQgb3JkZXJpbmcgb2YgdGhlIGlu cHV0IHBhdGguCisJICovCisJaWYgKGdldF9jaGVhcGVzdF9ncm91cF9rZXlzX29yZGVyKHJv b3QsIG5yb3dzLCAmcGF0aGtleXMsICZjbGF1c2VzLAorCQkJCQkJCQkJICBuX3ByZW9yZGVy ZWQpKQorCXsKKwkJaW5mbyA9IG1ha2VOb2RlKFBhdGhLZXlJbmZvKTsKKwkJaW5mby0+cGF0 aGtleXMgPSBwYXRoa2V5czsKKwkJaW5mby0+Y2xhdXNlcyA9IGNsYXVzZXM7CisKKwkJaW5m b3MgPSBsYXBwZW5kKGluZm9zLCBpbmZvKTsKKwl9CisKKwkvKgorCSAqIElmIHRoZSBwYXRo IGlzIHNvcnRlZCBpbiBzb21lIHdheSwgdHJ5IHJlb3JkZXJpbmcgdGhlIGdyb3VwIGtleXMg dG8gbWF0Y2gKKwkgKiBhcyBtdWNoIG9mIHRoZSBvcmRlcmluZyBhcyBwb3NzaWJsZSAtIHdl IGdldCB0aGlzIHNvcnQgZm9yIGZyZWUgKG1vc3RseSkuCisJICoKKwkgKiBXZSBtdXN0IG5v dCBkbyB0aGlzIHdoZW4gdGhlcmUgYXJlIG5vIGdyb3VwaW5nIHNldHMsIGJlY2F1c2UgdGhv c2UgdXNlCisJICogbW9yZSBjb21wbGV4IGxvZ2ljIHRvIGRlY2lkZSB0aGUgb3JkZXJpbmcu CisJICoKKwkgKiBYWFggSXNuJ3QgdGhpcyBzb21ld2hhdCByZWR1bmRhbnQgd2l0aCBwcmVz b3J0ZWRfa2V5cz8gQWN0dWFsbHksIGl0J3MKKwkgKiBtb3JlIGEgY29tcGxlbWVudCwgYmVj YXVzZSBpdCBhbGxvd3MgYmVuZWZpdGluZyBmcm9tIGluY3JlbWVudGFsIHNvcnQKKwkgKiBh cyBtdWNoIGFzIHBvc3NpYmxlLgorCSAqCisJICogWFhYIFRoaXMgZG9lcyBub3RoaW5nIGlm IChuX3ByZW9yZGVyZWQgPT0gMCkuIFdlIHNob3VsZG4ndCBjcmVhdGUgdGhlCisJICogaW5m byBpbiB0aGlzIGNhc2UuCisJICovCisJaWYgKHBhdGhfcGF0aGtleXMpCisJeworCQluX3By ZW9yZGVyZWQgPSBncm91cF9rZXlzX3Jlb3JkZXJfYnlfcGF0aGtleXMocGF0aF9wYXRoa2V5 cywKKwkJCQkJCQkJCQkJCQkgICZwYXRoa2V5cywKKwkJCQkJCQkJCQkJCQkgICZjbGF1c2Vz KTsKKworCQkvKiByZW9yZGVyIHRoZSB0YWlsIHRvIG1pbmltaXplIHNvcnQgY29zdCAqLwor CQlnZXRfY2hlYXBlc3RfZ3JvdXBfa2V5c19vcmRlcihyb290LCBucm93cywgJnBhdGhrZXlz LCAmY2xhdXNlcywKKwkJCQkJCQkJCSAgbl9wcmVvcmRlcmVkKTsKKworCQkvKgorCQkgKiBy ZW9yZGVyIHRoZSB0YWlsIHRvIG1pbmltaXplIHNvcnQgY29zdAorCQkgKgorCQkgKiBYWFgg SWdub3JlIHRoZSByZXR1cm4gdmFsdWUgLSB0aGVyZSBtYXkgYmUgbm90aGluZyB0byByZW9y ZGVyLCBpbgorCQkgKiB3aGljaCBjYXNlIGdldF9jaGVhcGVzdF9ncm91cF9rZXlzX29yZGVy IHJldHVybnMgZmFsc2UuIEJ1dCB3ZQorCQkgKiBzdGlsbCB3YW50IHRvIGtlZXAgdGhlIGtl eXMgcmVvcmRlcmVkIHRvIHBhdGhfcGF0aGtleXMuCisJCSAqLworCQlpbmZvID0gbWFrZU5v ZGUoUGF0aEtleUluZm8pOworCQlpbmZvLT5wYXRoa2V5cyA9IHBhdGhrZXlzOworCQlpbmZv LT5jbGF1c2VzID0gY2xhdXNlczsKKworCQlpbmZvcyA9IGxhcHBlbmQoaW5mb3MsIGluZm8p OworCX0KKworCS8qCisJICogVHJ5IHJlb3JkZXJpbmcgcGF0aGtleXMgdG8gbWluaW1pemUg dGhlIHNvcnQgY29zdCAodGhpcyB0aW1lIGNvbnNpZGVyCisJICogdGhlIE9SREVSIEJZIGNs YXVzZSwgYnV0IG9ubHkgaWYgc2V0IGRlYnVnX2dyb3VwX2J5X21hdGNoX29yZGVyX2J5KS4K KwkgKgorCSAqIFhYWCBUaGlzIGRvZXMgbm90aGluZyBpZiAobl9wcmVvcmRlcmVkID09IDAp LiBXZSBzaG91bGRuJ3QgY3JlYXRlIHRoZQorCSAqIGluZm8gaW4gdGhpcyBjYXNlLgorCSAq LworCWlmIChyb290LT5zb3J0X3BhdGhrZXlzICYmIGRlYnVnX2dyb3VwX2J5X21hdGNoX29y ZGVyX2J5KQorCXsKKwkJbl9wcmVvcmRlcmVkID0gZ3JvdXBfa2V5c19yZW9yZGVyX2J5X3Bh dGhrZXlzKHJvb3QtPnNvcnRfcGF0aGtleXMsCisJCQkJCQkJCQkJCQkJICAmcGF0aGtleXMs CisJCQkJCQkJCQkJCQkJICAmY2xhdXNlcyk7CisKKwkJLyoKKwkJICogcmVvcmRlciB0aGUg dGFpbCB0byBtaW5pbWl6ZSBzb3J0IGNvc3QKKwkJICoKKwkJICogWFhYIElnbm9yZSB0aGUg cmV0dXJuIHZhbHVlIC0gdGhlcmUgbWF5IGJlIG5vdGhpbmcgdG8gcmVvcmRlciwgaW4KKwkJ ICogd2hpY2ggY2FzZSBnZXRfY2hlYXBlc3RfZ3JvdXBfa2V5c19vcmRlciByZXR1cm5zIGZh bHNlLiBCdXQgd2UKKwkJICogc3RpbGwgd2FudCB0byBrZWVwIHRoZSBrZXlzIHJlb3JkZXJl ZCB0byBzb3J0X3BhdGhrZXlzLgorCQkgKi8KKwkJZ2V0X2NoZWFwZXN0X2dyb3VwX2tleXNf b3JkZXIocm9vdCwgbnJvd3MsICZwYXRoa2V5cywgJmNsYXVzZXMsCisJCQkJCQkJCQkgIG5f cHJlb3JkZXJlZCk7CisKKwkJLyoga2VlcCB0aGUgZ3JvdXAga2V5cyByZW9yZGVyZWQgdG8g bWF0Y2ggb3JkZXJpbmcgb2YgaW5wdXQgcGF0aCAqLworCQlpbmZvID0gbWFrZU5vZGUoUGF0 aEtleUluZm8pOworCQlpbmZvLT5wYXRoa2V5cyA9IHBhdGhrZXlzOworCQlpbmZvLT5jbGF1 c2VzID0gY2xhdXNlczsKKworCQlpbmZvcyA9IGxhcHBlbmQoaW5mb3MsIGluZm8pOworCX0K KworCXJldHVybiBpbmZvczsKK30KKwogLyoKICAqIHBhdGhrZXlzX2NvdW50X2NvbnRhaW5l ZF9pbgogICogICAgU2FtZSBhcyBwYXRoa2V5c19jb250YWluZWRfaW4sIGJ1dCBhbHNvIHNl dHMgbGVuZ3RoIG9mIGxvbmdlc3QKQEAgLTE4NjIsNiArMjM4OSw1NCBAQCBwYXRoa2V5c191 c2VmdWxfZm9yX29yZGVyaW5nKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpwYXRoa2V5cykK IAlyZXR1cm4gbl9jb21tb25fcGF0aGtleXM7CiB9CiAKKy8qCisgKiBwYXRoa2V5c191c2Vm dWxfZm9yX2dyb3VwaW5nCisgKgkJQ291bnQgdGhlIG51bWJlciBvZiBwYXRoa2V5cyB0aGF0 IGFyZSB1c2VmdWwgZm9yIGdyb3VwaW5nIChpbnN0ZWFkIG9mCisgKgkJZXhwbGljaXQgc29y dCkKKyAqCisgKiBHcm91cCBwYXRoa2V5cyBjb3VsZCBiZSByZW9yZGVyZWQgdG8gYmVuZWZp dCBmcm9tIHRoZSBvZGVyaW5nLiBUaGUgb3JkZXJpbmcKKyAqIG1heSBub3QgYmUgImNvbXBs ZXRlIiBhbmQgbWF5IHJlcXVpcmUgaW5jcmVtZW50YWwgc29ydCwgYnV0IHRoYXQncyBmaW5l LiBTbworICogd2Ugc2ltcGx5IGNvdW50IHByZWZpeCBwYXRoa2V5cyB3aXRoIGEgbWF0Y2hp bmcgZ3JvdXAga2V5LCBhbmQgc3RvcCBvbmNlIHdlCisgKiBmaW5kIHRoZSBmaXJzdCBwYXRo a2V5IHdpdGhvdXQgYSBtYXRjaC4KKyAqCisgKiBTbyBlLmcuIHdpdGggcGF0aGtleXMgKGEs YixjKSBhbmQgZ3JvdXAga2V5cyAoYSxiLGUpIHRoaXMgZGV0ZXJtaW5lcyAoYSxiKQorICog cGF0aGtleXMgYXJlIHVzZWZ1bCBmb3IgZ3JvdXBpbmcsIGFuZCB3ZSBtaWdodCBkbyBpbmNy ZW1lbnRhbCBzb3J0IHRvIGdldAorICogcGF0aCBvcmRlcmVkIGJ5IChhLGIsZSkuCisgKgor ICogVGhpcyBsb2dpYyBpcyBuZWNlc3NhcnkgdG8gcmV0YWluIHBhdGhzIHdpdGggb3JkZWRp bmcgbm90IG1hdGNoaW5nIGdyb3VwaW5nCisgKiBrZXlzIGRpcmVjdGx5LCB3aXRob3V0IHRo ZSByZW9yZGVyaW5nLgorICoKKyAqIFJldHVybnMgdGhlIGxlbmd0aCBvZiBwYXRoa2V5IHBy ZWZpeCB3aXRoIG1hdGNoaW5nIGdyb3VwIGtleXMuCisgKi8KK3N0YXRpYyBpbnQKK3BhdGhr ZXlzX3VzZWZ1bF9mb3JfZ3JvdXBpbmcoUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKnBhdGhr ZXlzKQoreworCUxpc3RDZWxsICprZXk7CisJaW50CQkgIG4gPSAwOworCisJLyogbm8gc3Bl Y2lhbCBvcmRlcmluZyByZXF1ZXN0ZWQgZm9yIGdyb3VwaW5nICovCisJaWYgKHJvb3QtPmdy b3VwX3BhdGhrZXlzID09IE5JTCkKKwkJcmV0dXJuIDA7CisKKwkvKiB1bm9yZGVyZWQgcGF0 aCAqLworCWlmIChwYXRoa2V5cyA9PSBOSUwpCisJCXJldHVybiAwOworCisJLyogd2FsayB0 aGUgcGF0aGtleXMgYW5kIHNlYXJjaCBmb3IgbWF0Y2hpbmcgZ3JvdXAga2V5ICovCisJZm9y ZWFjaChrZXksIHBhdGhrZXlzKQorCXsKKwkJUGF0aEtleQkqcGF0aGtleSA9IChQYXRoS2V5 ICopIGxmaXJzdChrZXkpOworCisJCS8qIG5vIG1hdGNoaW5nIGdyb3VwIGtleSwgd2UncmUg ZG9uZSAqLworCQlpZiAoIWxpc3RfbWVtYmVyX3B0cihyb290LT5ncm91cF9wYXRoa2V5cywg cGF0aGtleSkpCisJCQlicmVhazsKKworCQluKys7CisJfQorCisJcmV0dXJuIG47Cit9CisK IC8qCiAgKiB0cnVuY2F0ZV91c2VsZXNzX3BhdGhrZXlzCiAgKgkJU2hvcnRlbiB0aGUgZ2l2 ZW4gcGF0aGtleSBsaXN0IHRvIGp1c3QgdGhlIHVzZWZ1bCBwYXRoa2V5cy4KQEAgLTE4NzYs NiArMjQ1MSw5IEBAIHRydW5jYXRlX3VzZWxlc3NfcGF0aGtleXMoUGxhbm5lckluZm8gKnJv b3QsCiAKIAludXNlZnVsID0gcGF0aGtleXNfdXNlZnVsX2Zvcl9tZXJnaW5nKHJvb3QsIHJl bCwgcGF0aGtleXMpOwogCW51c2VmdWwyID0gcGF0aGtleXNfdXNlZnVsX2Zvcl9vcmRlcmlu Zyhyb290LCBwYXRoa2V5cyk7CisJaWYgKG51c2VmdWwyID4gbnVzZWZ1bCkKKwkJbnVzZWZ1 bCA9IG51c2VmdWwyOworCW51c2VmdWwyID0gcGF0aGtleXNfdXNlZnVsX2Zvcl9ncm91cGlu Zyhyb290LCBwYXRoa2V5cyk7CiAJaWYgKG51c2VmdWwyID4gbnVzZWZ1bCkKIAkJbnVzZWZ1 bCA9IG51c2VmdWwyOwogCkBAIC0xOTExLDYgKzI0ODksOCBAQCBoYXNfdXNlZnVsX3BhdGhr ZXlzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwpCiB7CiAJaWYgKHJlbC0+ am9pbmluZm8gIT0gTklMIHx8IHJlbC0+aGFzX2VjbGFzc19qb2lucykKIAkJcmV0dXJuIHRy dWU7CQkJLyogbWlnaHQgYmUgYWJsZSB0byB1c2UgcGF0aGtleXMgZm9yIG1lcmdpbmcgKi8K KwlpZiAocm9vdC0+Z3JvdXBfcGF0aGtleXMgIT0gTklMKQorCQlyZXR1cm4gdHJ1ZTsJCQkv KiBtaWdodCBiZSBhYmxlIHRvIHVzZSBwYXRoa2V5cyBmb3IgZ3JvdXBpbmcgKi8KIAlpZiAo cm9vdC0+cXVlcnlfcGF0aGtleXMgIT0gTklMKQogCQlyZXR1cm4gdHJ1ZTsJCQkvKiBtaWdo dCBiZSBhYmxlIHRvIHVzZSB0aGVtIGZvciBvcmRlcmluZyAqLwogCXJldHVybiBmYWxzZTsJ CQkJLyogZGVmaW5pdGVseSB1c2VsZXNzICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9w bGFubmVyLmMKaW5kZXggYmQwOWY4NWFlYTEuLmZhYzU4MjJlNWI1IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKKysrIGIvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCkBAIC02MTU2LDI0ICs2MTU2LDEyNCBAQCBhZGRf cGF0aHNfdG9fZ3JvdXBpbmdfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpp bnB1dF9yZWwsCiAJCSAqLwogCQlmb3JlYWNoKGxjLCBpbnB1dF9yZWwtPnBhdGhsaXN0KQog CQl7CisJCQlMaXN0Q2VsbCAgICpsYzI7CiAJCQlQYXRoCSAgICpwYXRoID0gKFBhdGggKikg bGZpcnN0KGxjKTsKKwkJCVBhdGgJICAgKnBhdGhfc2F2ZSA9IHBhdGg7CiAJCQlQYXRoCSAg ICpwYXRoX29yaWdpbmFsID0gcGF0aDsKLQkJCWJvb2wJCWlzX3NvcnRlZDsKLQkJCWludAkJ CXByZXNvcnRlZF9rZXlzOwogCi0JCQlpc19zb3J0ZWQgPSBwYXRoa2V5c19jb3VudF9jb250 YWluZWRfaW4ocm9vdC0+Z3JvdXBfcGF0aGtleXMsCi0JCQkJCQkJCQkJCQkJcGF0aC0+cGF0 aGtleXMsCi0JCQkJCQkJCQkJCQkJJnByZXNvcnRlZF9rZXlzKTsKKwkJCUxpc3QJICAgKnBh dGhrZXlfb3JkZXJpbmdzID0gTklMOworCisJCQlMaXN0CSAgICpncm91cF9wYXRoa2V5cyA9 IHJvb3QtPmdyb3VwX3BhdGhrZXlzOworCQkJTGlzdAkgICAqZ3JvdXBfY2xhdXNlcyA9IHBh cnNlLT5ncm91cENsYXVzZTsKKworCQkJLyogZ2VuZXJhdGUgYWx0ZXJuYXRpdmUgZ3JvdXAg b3JkZXJpbmdzIHRoYXQgbWlnaHQgYmUgdXNlZnVsICovCisJCQlwYXRoa2V5X29yZGVyaW5n cyA9IGdldF91c2VmdWxfZ3JvdXBfa2V5c19vcmRlcmluZ3Mocm9vdCwKKwkJCQkJCQkJCQkJ CQkJCQlwYXRoLT5yb3dzLAorCQkJCQkJCQkJCQkJCQkJCXBhdGgtPnBhdGhrZXlzLAorCQkJ CQkJCQkJCQkJCQkJCWdyb3VwX3BhdGhrZXlzLAorCQkJCQkJCQkJCQkJCQkJCWdyb3VwX2Ns YXVzZXMpOwogCi0JCQlpZiAocGF0aCA9PSBjaGVhcGVzdF9wYXRoIHx8IGlzX3NvcnRlZCkK KwkJCUFzc2VydChsaXN0X2xlbmd0aChwYXRoa2V5X29yZGVyaW5ncykgPiAwKTsKKworCQkJ LyogcHJvY2VzcyBhbGwgcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcgZ3JvdXBpbmcgcmVvcmRl cmluZ3MgKi8KKwkJCWZvcmVhY2ggKGxjMiwgcGF0aGtleV9vcmRlcmluZ3MpCiAJCQl7Ci0J CQkJLyogU29ydCB0aGUgY2hlYXBlc3QtdG90YWwgcGF0aCBpZiBpdCBpc24ndCBhbHJlYWR5 IHNvcnRlZCAqLwotCQkJCWlmICghaXNfc29ydGVkKQotCQkJCQlwYXRoID0gKFBhdGggKikg Y3JlYXRlX3NvcnRfcGF0aChyb290LAotCQkJCQkJCQkJCQkJCSBncm91cGVkX3JlbCwKLQkJ CQkJCQkJCQkJCQkgcGF0aCwKLQkJCQkJCQkJCQkJCQkgcm9vdC0+Z3JvdXBfcGF0aGtleXMs Ci0JCQkJCQkJCQkJCQkJIC0xLjApOworCQkJCWJvb2wJCWlzX3NvcnRlZDsKKwkJCQlpbnQJ CQlwcmVzb3J0ZWRfa2V5cyA9IDA7CisJCQkJUGF0aEtleUluZm8gKmluZm8gPSAoUGF0aEtl eUluZm8gKikgbGZpcnN0KGxjMik7CisKKwkJCQkvKiByZXN0b3JlIHRoZSBwYXRoICh3ZSBy ZXBsYWNlIGl0IGluIHRoZSBsb29wKSAqLworCQkJCXBhdGggPSBwYXRoX3NhdmU7CisKKwkJ CQlpc19zb3J0ZWQgPSBwYXRoa2V5c19jb3VudF9jb250YWluZWRfaW4oaW5mby0+cGF0aGtl eXMsCisJCQkJCQkJCQkJCQkJCXBhdGgtPnBhdGhrZXlzLAorCQkJCQkJCQkJCQkJCQkmcHJl c29ydGVkX2tleXMpOworCisJCQkJaWYgKHBhdGggPT0gY2hlYXBlc3RfcGF0aCB8fCBpc19z b3J0ZWQpCisJCQkJeworCQkJCQkvKiBTb3J0IHRoZSBjaGVhcGVzdC10b3RhbCBwYXRoIGlm IGl0IGlzbid0IGFscmVhZHkgc29ydGVkICovCisJCQkJCWlmICghaXNfc29ydGVkKQorCQkJ CQl7CisJCQkJCQlwYXRoID0gKFBhdGggKikgY3JlYXRlX3NvcnRfcGF0aChyb290LAorCQkJ CQkJCQkJCQkJCQkgZ3JvdXBlZF9yZWwsCisJCQkJCQkJCQkJCQkJCSBwYXRoLAorCQkJCQkJ CQkJCQkJCQkgaW5mby0+cGF0aGtleXMsCisJCQkJCQkJCQkJCQkJCSAtMS4wKTsKKwkJCQkJ fQorCisJCQkJCS8qIE5vdyBkZWNpZGUgd2hhdCB0byBzdGljayBhdG9wIGl0ICovCisJCQkJ CWlmIChwYXJzZS0+Z3JvdXBpbmdTZXRzKQorCQkJCQl7CisJCQkJCQljb25zaWRlcl9ncm91 cGluZ3NldHNfcGF0aHMocm9vdCwgZ3JvdXBlZF9yZWwsCisJCQkJCQkJCQkJCQkJcGF0aCwg dHJ1ZSwgY2FuX2hhc2gsCisJCQkJCQkJCQkJCQkJZ2QsIGFnZ19jb3N0cywgZE51bUdyb3Vw cyk7CisJCQkJCX0KKwkJCQkJZWxzZSBpZiAocGFyc2UtPmhhc0FnZ3MpCisJCQkJCXsKKwkJ CQkJCS8qCisJCQkJCQkgKiBXZSBoYXZlIGFnZ3JlZ2F0aW9uLCBwb3NzaWJseSB3aXRoIHBs YWluIEdST1VQIEJZLiBNYWtlCisJCQkJCQkgKiBhbiBBZ2dQYXRoLgorCQkJCQkJICovCisJ CQkJCQlhZGRfcGF0aChncm91cGVkX3JlbCwgKFBhdGggKikKKwkJCQkJCQkJIGNyZWF0ZV9h Z2dfcGF0aChyb290LAorCQkJCQkJCQkJCQkJIGdyb3VwZWRfcmVsLAorCQkJCQkJCQkJCQkJ IHBhdGgsCisJCQkJCQkJCQkJCQkgZ3JvdXBlZF9yZWwtPnJlbHRhcmdldCwKKwkJCQkJCQkJ CQkJCSBpbmZvLT5jbGF1c2VzID8gQUdHX1NPUlRFRCA6IEFHR19QTEFJTiwKKwkJCQkJCQkJ CQkJCSBBR0dTUExJVF9TSU1QTEUsCisJCQkJCQkJCQkJCQkgaW5mby0+Y2xhdXNlcywKKwkJ CQkJCQkJCQkJCSBoYXZpbmdRdWFsLAorCQkJCQkJCQkJCQkJIGFnZ19jb3N0cywKKwkJCQkJ CQkJCQkJCSBkTnVtR3JvdXBzKSk7CisJCQkJCX0KKwkJCQkJZWxzZSBpZiAoZ3JvdXBfY2xh dXNlcykKKwkJCQkJeworCQkJCQkJLyoKKwkJCQkJCSAqIFdlIGhhdmUgR1JPVVAgQlkgd2l0 aG91dCBhZ2dyZWdhdGlvbiBvciBncm91cGluZyBzZXRzLgorCQkJCQkJICogTWFrZSBhIEdy b3VwUGF0aC4KKwkJCQkJCSAqLworCQkJCQkJYWRkX3BhdGgoZ3JvdXBlZF9yZWwsIChQYXRo ICopCisJCQkJCQkJCSBjcmVhdGVfZ3JvdXBfcGF0aChyb290LAorCQkJCQkJCQkJCQkJICAg Z3JvdXBlZF9yZWwsCisJCQkJCQkJCQkJCQkgICBwYXRoLAorCQkJCQkJCQkJCQkJICAgaW5m by0+Y2xhdXNlcywKKwkJCQkJCQkJCQkJCSAgIGhhdmluZ1F1YWwsCisJCQkJCQkJCQkJCQkg ICBkTnVtR3JvdXBzKSk7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQkvKiBP dGhlciBjYXNlcyBzaG91bGQgaGF2ZSBiZWVuIGhhbmRsZWQgYWJvdmUgKi8KKwkJCQkJCUFz c2VydChmYWxzZSk7CisJCQkJCX0KKwkJCQl9CisKKwkJCQkvKgorCQkJCSAqIE5vdyB3ZSBt YXkgY29uc2lkZXIgaW5jcmVtZW50YWwgc29ydCBvbiB0aGlzIHBhdGgsIGJ1dCBvbmx5CisJ CQkJICogd2hlbiB0aGUgcGF0aCBpcyBub3QgYWxyZWFkeSBzb3J0ZWQgYW5kIHdoZW4gaW5j cmVtZW50YWwgc29ydAorCQkJCSAqIGlzIGVuYWJsZWQuCisJCQkJICovCisJCQkJaWYgKGlz X3NvcnRlZCB8fCAhZW5hYmxlX2luY3JlbWVudGFsX3NvcnQpCisJCQkJCWNvbnRpbnVlOwor CisJCQkJLyogUmVzdG9yZSB0aGUgaW5wdXQgcGF0aCAod2UgbWlnaHQgaGF2ZSBhZGRlZCBT b3J0IG9uIHRvcCkuICovCisJCQkJcGF0aCA9IHBhdGhfb3JpZ2luYWw7CisKKwkJCQkvKiBu byBzaGFyZWQgcHJlZml4LCBubyBwb2ludCBpbiBidWlsZGluZyBpbmNyZW1lbnRhbCBzb3J0 ICovCisJCQkJaWYgKHByZXNvcnRlZF9rZXlzID09IDApCisJCQkJCWNvbnRpbnVlOworCisJ CQkJLyoKKwkJCQkgKiBXZSBzaG91bGQgaGF2ZSBhbHJlYWR5IGV4Y2x1ZGVkIHBhdGhrZXlz IG9mIGxlbmd0aCAxIGJlY2F1c2UKKwkJCQkgKiB0aGVuIHByZXNvcnRlZF9rZXlzID4gMCB3 b3VsZCBpbXBseSBpc19zb3J0ZWQgd2FzIHRydWUuCisJCQkJICovCisJCQkJQXNzZXJ0KGxp c3RfbGVuZ3RoKHJvb3QtPmdyb3VwX3BhdGhrZXlzKSAhPSAxKTsKKworCQkJCXBhdGggPSAo UGF0aCAqKSBjcmVhdGVfaW5jcmVtZW50YWxfc29ydF9wYXRoKHJvb3QsCisJCQkJCQkJCQkJ CQkJCQkgZ3JvdXBlZF9yZWwsCisJCQkJCQkJCQkJCQkJCQkgcGF0aCwKKwkJCQkJCQkJCQkJ CQkJCSBpbmZvLT5wYXRoa2V5cywKKwkJCQkJCQkJCQkJCQkJCSBwcmVzb3J0ZWRfa2V5cywK KwkJCQkJCQkJCQkJCQkJCSAtMS4wKTsKIAogCQkJCS8qIE5vdyBkZWNpZGUgd2hhdCB0byBz dGljayBhdG9wIGl0ICovCiAJCQkJaWYgKHBhcnNlLT5ncm91cGluZ1NldHMpCkBAIC02MTg1 LDE3ICs2Mjg1LDE3IEBAIGFkZF9wYXRoc190b19ncm91cGluZ19yZWwoUGxhbm5lckluZm8g KnJvb3QsIFJlbE9wdEluZm8gKmlucHV0X3JlbCwKIAkJCQllbHNlIGlmIChwYXJzZS0+aGFz QWdncykKIAkJCQl7CiAJCQkJCS8qCi0JCQkJCSAqIFdlIGhhdmUgYWdncmVnYXRpb24sIHBv c3NpYmx5IHdpdGggcGxhaW4gR1JPVVAgQlkuIE1ha2UKLQkJCQkJICogYW4gQWdnUGF0aC4K KwkJCQkJICogV2UgaGF2ZSBhZ2dyZWdhdGlvbiwgcG9zc2libHkgd2l0aCBwbGFpbiBHUk9V UCBCWS4gTWFrZSBhbgorCQkJCQkgKiBBZ2dQYXRoLgogCQkJCQkgKi8KIAkJCQkJYWRkX3Bh dGgoZ3JvdXBlZF9yZWwsIChQYXRoICopCiAJCQkJCQkJIGNyZWF0ZV9hZ2dfcGF0aChyb290 LAogCQkJCQkJCQkJCQkgZ3JvdXBlZF9yZWwsCiAJCQkJCQkJCQkJCSBwYXRoLAogCQkJCQkJ CQkJCQkgZ3JvdXBlZF9yZWwtPnJlbHRhcmdldCwKLQkJCQkJCQkJCQkJIHBhcnNlLT5ncm91 cENsYXVzZSA/IEFHR19TT1JURUQgOiBBR0dfUExBSU4sCisJCQkJCQkJCQkJCSBpbmZvLT5j bGF1c2VzID8gQUdHX1NPUlRFRCA6IEFHR19QTEFJTiwKIAkJCQkJCQkJCQkJIEFHR1NQTElU X1NJTVBMRSwKLQkJCQkJCQkJCQkJIHBhcnNlLT5ncm91cENsYXVzZSwKKwkJCQkJCQkJCQkJ IGluZm8tPmNsYXVzZXMsCiAJCQkJCQkJCQkJCSBoYXZpbmdRdWFsLAogCQkJCQkJCQkJCQkg YWdnX2Nvc3RzLAogCQkJCQkJCQkJCQkgZE51bUdyb3VwcykpOwpAQCAtNjIwMywxNCArNjMw MywxNCBAQCBhZGRfcGF0aHNfdG9fZ3JvdXBpbmdfcmVsKFBsYW5uZXJJbmZvICpyb290LCBS ZWxPcHRJbmZvICppbnB1dF9yZWwsCiAJCQkJZWxzZSBpZiAocGFyc2UtPmdyb3VwQ2xhdXNl KQogCQkJCXsKIAkJCQkJLyoKLQkJCQkJICogV2UgaGF2ZSBHUk9VUCBCWSB3aXRob3V0IGFn Z3JlZ2F0aW9uIG9yIGdyb3VwaW5nIHNldHMuCi0JCQkJCSAqIE1ha2UgYSBHcm91cFBhdGgu CisJCQkJCSAqIFdlIGhhdmUgR1JPVVAgQlkgd2l0aG91dCBhZ2dyZWdhdGlvbiBvciBncm91 cGluZyBzZXRzLiBNYWtlCisJCQkJCSAqIGEgR3JvdXBQYXRoLgogCQkJCQkgKi8KIAkJCQkJ YWRkX3BhdGgoZ3JvdXBlZF9yZWwsIChQYXRoICopCiAJCQkJCQkJIGNyZWF0ZV9ncm91cF9w YXRoKHJvb3QsCiAJCQkJCQkJCQkJCSAgIGdyb3VwZWRfcmVsLAogCQkJCQkJCQkJCQkgICBw YXRoLAotCQkJCQkJCQkJCQkgICBwYXJzZS0+Z3JvdXBDbGF1c2UsCisJCQkJCQkJCQkJCSAg IGluZm8tPmNsYXVzZXMsCiAJCQkJCQkJCQkJCSAgIGhhdmluZ1F1YWwsCiAJCQkJCQkJCQkJ CSAgIGROdW1Hcm91cHMpKTsKIAkJCQl9CkBAIC02MjIwLDc5ICs2MzIwLDYgQEAgYWRkX3Bh dGhzX3RvX2dyb3VwaW5nX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqaW5w dXRfcmVsLAogCQkJCQlBc3NlcnQoZmFsc2UpOwogCQkJCX0KIAkJCX0KLQotCQkJLyoKLQkJ CSAqIE5vdyB3ZSBtYXkgY29uc2lkZXIgaW5jcmVtZW50YWwgc29ydCBvbiB0aGlzIHBhdGgs IGJ1dCBvbmx5Ci0JCQkgKiB3aGVuIHRoZSBwYXRoIGlzIG5vdCBhbHJlYWR5IHNvcnRlZCBh bmQgd2hlbiBpbmNyZW1lbnRhbCBzb3J0Ci0JCQkgKiBpcyBlbmFibGVkLgotCQkJICovCi0J CQlpZiAoaXNfc29ydGVkIHx8ICFlbmFibGVfaW5jcmVtZW50YWxfc29ydCkKLQkJCQljb250 aW51ZTsKLQotCQkJLyogUmVzdG9yZSB0aGUgaW5wdXQgcGF0aCAod2UgbWlnaHQgaGF2ZSBh ZGRlZCBTb3J0IG9uIHRvcCkuICovCi0JCQlwYXRoID0gcGF0aF9vcmlnaW5hbDsKLQotCQkJ Lyogbm8gc2hhcmVkIHByZWZpeCwgbm8gcG9pbnQgaW4gYnVpbGRpbmcgaW5jcmVtZW50YWwg c29ydCAqLwotCQkJaWYgKHByZXNvcnRlZF9rZXlzID09IDApCi0JCQkJY29udGludWU7Ci0K LQkJCS8qCi0JCQkgKiBXZSBzaG91bGQgaGF2ZSBhbHJlYWR5IGV4Y2x1ZGVkIHBhdGhrZXlz IG9mIGxlbmd0aCAxIGJlY2F1c2UKLQkJCSAqIHRoZW4gcHJlc29ydGVkX2tleXMgPiAwIHdv dWxkIGltcGx5IGlzX3NvcnRlZCB3YXMgdHJ1ZS4KLQkJCSAqLwotCQkJQXNzZXJ0KGxpc3Rf bGVuZ3RoKHJvb3QtPmdyb3VwX3BhdGhrZXlzKSAhPSAxKTsKLQotCQkJcGF0aCA9IChQYXRo ICopIGNyZWF0ZV9pbmNyZW1lbnRhbF9zb3J0X3BhdGgocm9vdCwKLQkJCQkJCQkJCQkJCQkJ IGdyb3VwZWRfcmVsLAotCQkJCQkJCQkJCQkJCQkgcGF0aCwKLQkJCQkJCQkJCQkJCQkJIHJv b3QtPmdyb3VwX3BhdGhrZXlzLAotCQkJCQkJCQkJCQkJCQkgcHJlc29ydGVkX2tleXMsCi0J CQkJCQkJCQkJCQkJCSAtMS4wKTsKLQotCQkJLyogTm93IGRlY2lkZSB3aGF0IHRvIHN0aWNr IGF0b3AgaXQgKi8KLQkJCWlmIChwYXJzZS0+Z3JvdXBpbmdTZXRzKQotCQkJewotCQkJCWNv bnNpZGVyX2dyb3VwaW5nc2V0c19wYXRocyhyb290LCBncm91cGVkX3JlbCwKLQkJCQkJCQkJ CQkJcGF0aCwgdHJ1ZSwgY2FuX2hhc2gsCi0JCQkJCQkJCQkJCWdkLCBhZ2dfY29zdHMsIGRO dW1Hcm91cHMpOwotCQkJfQotCQkJZWxzZSBpZiAocGFyc2UtPmhhc0FnZ3MpCi0JCQl7Ci0J CQkJLyoKLQkJCQkgKiBXZSBoYXZlIGFnZ3JlZ2F0aW9uLCBwb3NzaWJseSB3aXRoIHBsYWlu IEdST1VQIEJZLiBNYWtlIGFuCi0JCQkJICogQWdnUGF0aC4KLQkJCQkgKi8KLQkJCQlhZGRf cGF0aChncm91cGVkX3JlbCwgKFBhdGggKikKLQkJCQkJCSBjcmVhdGVfYWdnX3BhdGgocm9v dCwKLQkJCQkJCQkJCQkgZ3JvdXBlZF9yZWwsCi0JCQkJCQkJCQkJIHBhdGgsCi0JCQkJCQkJ CQkJIGdyb3VwZWRfcmVsLT5yZWx0YXJnZXQsCi0JCQkJCQkJCQkJIHBhcnNlLT5ncm91cENs YXVzZSA/IEFHR19TT1JURUQgOiBBR0dfUExBSU4sCi0JCQkJCQkJCQkJIEFHR1NQTElUX1NJ TVBMRSwKLQkJCQkJCQkJCQkgcGFyc2UtPmdyb3VwQ2xhdXNlLAotCQkJCQkJCQkJCSBoYXZp bmdRdWFsLAotCQkJCQkJCQkJCSBhZ2dfY29zdHMsCi0JCQkJCQkJCQkJIGROdW1Hcm91cHMp KTsKLQkJCX0KLQkJCWVsc2UgaWYgKHBhcnNlLT5ncm91cENsYXVzZSkKLQkJCXsKLQkJCQkv KgotCQkJCSAqIFdlIGhhdmUgR1JPVVAgQlkgd2l0aG91dCBhZ2dyZWdhdGlvbiBvciBncm91 cGluZyBzZXRzLiBNYWtlCi0JCQkJICogYSBHcm91cFBhdGguCi0JCQkJICovCi0JCQkJYWRk X3BhdGgoZ3JvdXBlZF9yZWwsIChQYXRoICopCi0JCQkJCQkgY3JlYXRlX2dyb3VwX3BhdGgo cm9vdCwKLQkJCQkJCQkJCQkgICBncm91cGVkX3JlbCwKLQkJCQkJCQkJCQkgICBwYXRoLAot CQkJCQkJCQkJCSAgIHBhcnNlLT5ncm91cENsYXVzZSwKLQkJCQkJCQkJCQkgICBoYXZpbmdR dWFsLAotCQkJCQkJCQkJCSAgIGROdW1Hcm91cHMpKTsKLQkJCX0KLQkJCWVsc2UKLQkJCXsK LQkJCQkvKiBPdGhlciBjYXNlcyBzaG91bGQgaGF2ZSBiZWVuIGhhbmRsZWQgYWJvdmUgKi8K LQkJCQlBc3NlcnQoZmFsc2UpOwotCQkJfQogCQl9CiAKIAkJLyoKQEAgLTYzMDMsMTAwICs2 MzMwLDEyNSBAQCBhZGRfcGF0aHNfdG9fZ3JvdXBpbmdfcmVsKFBsYW5uZXJJbmZvICpyb290 LCBSZWxPcHRJbmZvICppbnB1dF9yZWwsCiAJCXsKIAkJCWZvcmVhY2gobGMsIHBhcnRpYWxs eV9ncm91cGVkX3JlbC0+cGF0aGxpc3QpCiAJCQl7CisJCQkJTGlzdENlbGwgICAqbGMyOwog CQkJCVBhdGgJICAgKnBhdGggPSAoUGF0aCAqKSBsZmlyc3QobGMpOwogCQkJCVBhdGgJICAg KnBhdGhfb3JpZ2luYWwgPSBwYXRoOwotCQkJCWJvb2wJCWlzX3NvcnRlZDsKLQkJCQlpbnQJ CQlwcmVzb3J0ZWRfa2V5czsKIAotCQkJCWlzX3NvcnRlZCA9IHBhdGhrZXlzX2NvdW50X2Nv bnRhaW5lZF9pbihyb290LT5ncm91cF9wYXRoa2V5cywKLQkJCQkJCQkJCQkJCQkJcGF0aC0+ cGF0aGtleXMsCi0JCQkJCQkJCQkJCQkJCSZwcmVzb3J0ZWRfa2V5cyk7CisJCQkJTGlzdAkg ICAqcGF0aGtleV9vcmRlcmluZ3MgPSBOSUw7CiAKLQkJCQkvKgotCQkJCSAqIEluc2VydCBh IFNvcnQgbm9kZSwgaWYgcmVxdWlyZWQuICBCdXQgdGhlcmUncyBubyBwb2ludCBpbgotCQkJ CSAqIHNvcnRpbmcgYW55dGhpbmcgYnV0IHRoZSBjaGVhcGVzdCBwYXRoLgotCQkJCSAqLwot CQkJCWlmICghaXNfc29ydGVkKQorCQkJCUxpc3QJICAgKmdyb3VwX3BhdGhrZXlzID0gcm9v dC0+Z3JvdXBfcGF0aGtleXM7CisJCQkJTGlzdAkgICAqZ3JvdXBfY2xhdXNlcyA9IHBhcnNl LT5ncm91cENsYXVzZTsKKworCQkJCS8qIGdlbmVyYXRlIGFsdGVybmF0aXZlIGdyb3VwIG9y ZGVyaW5ncyB0aGF0IG1pZ2h0IGJlIHVzZWZ1bCAqLworCQkJCXBhdGhrZXlfb3JkZXJpbmdz ID0gZ2V0X3VzZWZ1bF9ncm91cF9rZXlzX29yZGVyaW5ncyhyb290LAorCQkJCQkJCQkJCQkJ CQkJCQlwYXRoLT5yb3dzLAorCQkJCQkJCQkJCQkJCQkJCQlwYXRoLT5wYXRoa2V5cywKKwkJ CQkJCQkJCQkJCQkJCQkJZ3JvdXBfcGF0aGtleXMsCisJCQkJCQkJCQkJCQkJCQkJCWdyb3Vw X2NsYXVzZXMpOworCisJCQkJQXNzZXJ0KGxpc3RfbGVuZ3RoKHBhdGhrZXlfb3JkZXJpbmdz KSA+IDApOworCisJCQkJLyogcHJvY2VzcyBhbGwgcG90ZW50aWFsbHkgaW50ZXJlc3Rpbmcg Z3JvdXBpbmcgcmVvcmRlcmluZ3MgKi8KKwkJCQlmb3JlYWNoIChsYzIsIHBhdGhrZXlfb3Jk ZXJpbmdzKQogCQkJCXsKLQkJCQkJaWYgKHBhdGggIT0gcGFydGlhbGx5X2dyb3VwZWRfcmVs LT5jaGVhcGVzdF90b3RhbF9wYXRoKQotCQkJCQkJY29udGludWU7Ci0JCQkJCXBhdGggPSAo UGF0aCAqKSBjcmVhdGVfc29ydF9wYXRoKHJvb3QsCi0JCQkJCQkJCQkJCQkJIGdyb3VwZWRf cmVsLAotCQkJCQkJCQkJCQkJCSBwYXRoLAotCQkJCQkJCQkJCQkJCSByb290LT5ncm91cF9w YXRoa2V5cywKLQkJCQkJCQkJCQkJCQkgLTEuMCk7Ci0JCQkJfQorCQkJCQlib29sCQlpc19z b3J0ZWQ7CisJCQkJCWludAkJCXByZXNvcnRlZF9rZXlzID0gMDsKKwkJCQkJUGF0aEtleUlu Zm8gKmluZm8gPSAoUGF0aEtleUluZm8gKikgbGZpcnN0KGxjMik7CiAKLQkJCQlpZiAocGFy c2UtPmhhc0FnZ3MpCi0JCQkJCWFkZF9wYXRoKGdyb3VwZWRfcmVsLCAoUGF0aCAqKQotCQkJ CQkJCSBjcmVhdGVfYWdnX3BhdGgocm9vdCwKLQkJCQkJCQkJCQkJIGdyb3VwZWRfcmVsLAot CQkJCQkJCQkJCQkgcGF0aCwKLQkJCQkJCQkJCQkJIGdyb3VwZWRfcmVsLT5yZWx0YXJnZXQs Ci0JCQkJCQkJCQkJCSBwYXJzZS0+Z3JvdXBDbGF1c2UgPyBBR0dfU09SVEVEIDogQUdHX1BM QUlOLAotCQkJCQkJCQkJCQkgQUdHU1BMSVRfRklOQUxfREVTRVJJQUwsCi0JCQkJCQkJCQkJ CSBwYXJzZS0+Z3JvdXBDbGF1c2UsCi0JCQkJCQkJCQkJCSBoYXZpbmdRdWFsLAotCQkJCQkJ CQkJCQkgYWdnX2ZpbmFsX2Nvc3RzLAotCQkJCQkJCQkJCQkgZE51bUdyb3VwcykpOwotCQkJ CWVsc2UKLQkJCQkJYWRkX3BhdGgoZ3JvdXBlZF9yZWwsIChQYXRoICopCi0JCQkJCQkJIGNy ZWF0ZV9ncm91cF9wYXRoKHJvb3QsCi0JCQkJCQkJCQkJCSAgIGdyb3VwZWRfcmVsLAotCQkJ CQkJCQkJCQkgICBwYXRoLAotCQkJCQkJCQkJCQkgICBwYXJzZS0+Z3JvdXBDbGF1c2UsCi0J CQkJCQkJCQkJCSAgIGhhdmluZ1F1YWwsCi0JCQkJCQkJCQkJCSAgIGROdW1Hcm91cHMpKTsK KwkJCQkJLyogcmVzdG9yZSB0aGUgcGF0aCAod2UgcmVwbGFjZSBpdCBpbiB0aGUgbG9vcCkg Ki8KKwkJCQkJcGF0aCA9IHBhdGhfb3JpZ2luYWw7CiAKLQkJCQkvKgotCQkJCSAqIE5vdyB3 ZSBtYXkgY29uc2lkZXIgaW5jcmVtZW50YWwgc29ydCBvbiB0aGlzIHBhdGgsIGJ1dCBvbmx5 Ci0JCQkJICogd2hlbiB0aGUgcGF0aCBpcyBub3QgYWxyZWFkeSBzb3J0ZWQgYW5kIHdoZW4g aW5jcmVtZW50YWwKLQkJCQkgKiBzb3J0IGlzIGVuYWJsZWQuCi0JCQkJICovCi0JCQkJaWYg KGlzX3NvcnRlZCB8fCAhZW5hYmxlX2luY3JlbWVudGFsX3NvcnQpCi0JCQkJCWNvbnRpbnVl OworCQkJCQlpc19zb3J0ZWQgPSBwYXRoa2V5c19jb3VudF9jb250YWluZWRfaW4oaW5mby0+ cGF0aGtleXMsCisJCQkJCQkJCQkJCQkJCQlwYXRoLT5wYXRoa2V5cywKKwkJCQkJCQkJCQkJ CQkJCSZwcmVzb3J0ZWRfa2V5cyk7CiAKLQkJCQkvKiBSZXN0b3JlIHRoZSBpbnB1dCBwYXRo ICh3ZSBtaWdodCBoYXZlIGFkZGVkIFNvcnQgb24gdG9wKS4gKi8KLQkJCQlwYXRoID0gcGF0 aF9vcmlnaW5hbDsKKwkJCQkJLyoKKwkJCQkJICogSW5zZXJ0IGEgU29ydCBub2RlLCBpZiBy ZXF1aXJlZC4gIEJ1dCB0aGVyZSdzIG5vIHBvaW50IGluCisJCQkJCSAqIHNvcnRpbmcgYW55 dGhpbmcgYnV0IHRoZSBjaGVhcGVzdCBwYXRoLgorCQkJCQkgKi8KKwkJCQkJaWYgKCFpc19z b3J0ZWQpCisJCQkJCXsKKwkJCQkJCWlmIChwYXRoICE9IHBhcnRpYWxseV9ncm91cGVkX3Jl bC0+Y2hlYXBlc3RfdG90YWxfcGF0aCkKKwkJCQkJCQljb250aW51ZTsKIAotCQkJCS8qIG5v IHNoYXJlZCBwcmVmaXgsIG5vdCBwb2ludCBpbiBidWlsZGluZyBpbmNyZW1lbnRhbCBzb3J0 ICovCi0JCQkJaWYgKHByZXNvcnRlZF9rZXlzID09IDApCi0JCQkJCWNvbnRpbnVlOworCQkJ CQkJcGF0aCA9IChQYXRoICopIGNyZWF0ZV9zb3J0X3BhdGgocm9vdCwKKwkJCQkJCQkJCQkJ CQkJIGdyb3VwZWRfcmVsLAorCQkJCQkJCQkJCQkJCQkgcGF0aCwKKwkJCQkJCQkJCQkJCQkJ IGluZm8tPnBhdGhrZXlzLAorCQkJCQkJCQkJCQkJCQkgLTEuMCk7CisJCQkJCX0KIAotCQkJ CS8qCi0JCQkJICogV2Ugc2hvdWxkIGhhdmUgYWxyZWFkeSBleGNsdWRlZCBwYXRoa2V5cyBv ZiBsZW5ndGggMQotCQkJCSAqIGJlY2F1c2UgdGhlbiBwcmVzb3J0ZWRfa2V5cyA+IDAgd291 bGQgaW1wbHkgaXNfc29ydGVkIHdhcwotCQkJCSAqIHRydWUuCi0JCQkJICovCi0JCQkJQXNz ZXJ0KGxpc3RfbGVuZ3RoKHJvb3QtPmdyb3VwX3BhdGhrZXlzKSAhPSAxKTsKKwkJCQkJaWYg KHBhcnNlLT5oYXNBZ2dzKQorCQkJCQkJYWRkX3BhdGgoZ3JvdXBlZF9yZWwsIChQYXRoICop CisJCQkJCQkJCSBjcmVhdGVfYWdnX3BhdGgocm9vdCwKKwkJCQkJCQkJCQkJCSBncm91cGVk X3JlbCwKKwkJCQkJCQkJCQkJCSBwYXRoLAorCQkJCQkJCQkJCQkJIGdyb3VwZWRfcmVsLT5y ZWx0YXJnZXQsCisJCQkJCQkJCQkJCQkgaW5mby0+Y2xhdXNlcyA/IEFHR19TT1JURUQgOiBB R0dfUExBSU4sCisJCQkJCQkJCQkJCQkgQUdHU1BMSVRfRklOQUxfREVTRVJJQUwsCisJCQkJ CQkJCQkJCQkgaW5mby0+Y2xhdXNlcywKKwkJCQkJCQkJCQkJCSBoYXZpbmdRdWFsLAorCQkJ CQkJCQkJCQkJIGFnZ19maW5hbF9jb3N0cywKKwkJCQkJCQkJCQkJCSBkTnVtR3JvdXBzKSk7 CisJCQkJCWVsc2UKKwkJCQkJCWFkZF9wYXRoKGdyb3VwZWRfcmVsLCAoUGF0aCAqKQorCQkJ CQkJCQkgY3JlYXRlX2dyb3VwX3BhdGgocm9vdCwKKwkJCQkJCQkJCQkJCSAgIGdyb3VwZWRf cmVsLAorCQkJCQkJCQkJCQkJICAgcGF0aCwKKwkJCQkJCQkJCQkJCSAgIGluZm8tPmNsYXVz ZXMsCisJCQkJCQkJCQkJCQkgICBoYXZpbmdRdWFsLAorCQkJCQkJCQkJCQkJICAgZE51bUdy b3VwcykpOwogCi0JCQkJcGF0aCA9IChQYXRoICopIGNyZWF0ZV9pbmNyZW1lbnRhbF9zb3J0 X3BhdGgocm9vdCwKLQkJCQkJCQkJCQkJCQkJCSBncm91cGVkX3JlbCwKLQkJCQkJCQkJCQkJ CQkJCSBwYXRoLAotCQkJCQkJCQkJCQkJCQkJIHJvb3QtPmdyb3VwX3BhdGhrZXlzLAotCQkJ CQkJCQkJCQkJCQkJIHByZXNvcnRlZF9rZXlzLAotCQkJCQkJCQkJCQkJCQkJIC0xLjApOwor CQkJCQkvKgorCQkJCQkgKiBOb3cgd2UgbWF5IGNvbnNpZGVyIGluY3JlbWVudGFsIHNvcnQg b24gdGhpcyBwYXRoLCBidXQgb25seQorCQkJCQkgKiB3aGVuIHRoZSBwYXRoIGlzIG5vdCBh bHJlYWR5IHNvcnRlZCBhbmQgd2hlbiBpbmNyZW1lbnRhbAorCQkJCQkgKiBzb3J0IGlzIGVu YWJsZWQuCisJCQkJCSAqLworCQkJCQlpZiAoaXNfc29ydGVkIHx8ICFlbmFibGVfaW5jcmVt ZW50YWxfc29ydCkKKwkJCQkJCWNvbnRpbnVlOwogCi0JCQkJaWYgKHBhcnNlLT5oYXNBZ2dz KQotCQkJCQlhZGRfcGF0aChncm91cGVkX3JlbCwgKFBhdGggKikKLQkJCQkJCQkgY3JlYXRl X2FnZ19wYXRoKHJvb3QsCi0JCQkJCQkJCQkJCSBncm91cGVkX3JlbCwKLQkJCQkJCQkJCQkJ IHBhdGgsCi0JCQkJCQkJCQkJCSBncm91cGVkX3JlbC0+cmVsdGFyZ2V0LAotCQkJCQkJCQkJ CQkgcGFyc2UtPmdyb3VwQ2xhdXNlID8gQUdHX1NPUlRFRCA6IEFHR19QTEFJTiwKLQkJCQkJ CQkJCQkJIEFHR1NQTElUX0ZJTkFMX0RFU0VSSUFMLAotCQkJCQkJCQkJCQkgcGFyc2UtPmdy b3VwQ2xhdXNlLAotCQkJCQkJCQkJCQkgaGF2aW5nUXVhbCwKLQkJCQkJCQkJCQkJIGFnZ19m aW5hbF9jb3N0cywKLQkJCQkJCQkJCQkJIGROdW1Hcm91cHMpKTsKLQkJCQllbHNlCi0JCQkJ CWFkZF9wYXRoKGdyb3VwZWRfcmVsLCAoUGF0aCAqKQotCQkJCQkJCSBjcmVhdGVfZ3JvdXBf cGF0aChyb290LAotCQkJCQkJCQkJCQkgICBncm91cGVkX3JlbCwKLQkJCQkJCQkJCQkJICAg cGF0aCwKLQkJCQkJCQkJCQkJICAgcGFyc2UtPmdyb3VwQ2xhdXNlLAotCQkJCQkJCQkJCQkg ICBoYXZpbmdRdWFsLAotCQkJCQkJCQkJCQkgICBkTnVtR3JvdXBzKSk7CisJCQkJCS8qIFJl c3RvcmUgdGhlIGlucHV0IHBhdGggKHdlIG1pZ2h0IGhhdmUgYWRkZWQgU29ydCBvbiB0b3Ap LiAqLworCQkJCQlwYXRoID0gcGF0aF9vcmlnaW5hbDsKKworCQkJCQkvKiBubyBzaGFyZWQg cHJlZml4LCBub3QgcG9pbnQgaW4gYnVpbGRpbmcgaW5jcmVtZW50YWwgc29ydCAqLworCQkJ CQlpZiAocHJlc29ydGVkX2tleXMgPT0gMCkKKwkJCQkJCWNvbnRpbnVlOworCisJCQkJCS8q CisJCQkJCSAqIFdlIHNob3VsZCBoYXZlIGFscmVhZHkgZXhjbHVkZWQgcGF0aGtleXMgb2Yg bGVuZ3RoIDEKKwkJCQkJICogYmVjYXVzZSB0aGVuIHByZXNvcnRlZF9rZXlzID4gMCB3b3Vs ZCBpbXBseSBpc19zb3J0ZWQgd2FzCisJCQkJCSAqIHRydWUuCisJCQkJCSAqLworCQkJCQlB c3NlcnQobGlzdF9sZW5ndGgocm9vdC0+Z3JvdXBfcGF0aGtleXMpICE9IDEpOworCisJCQkJ CXBhdGggPSAoUGF0aCAqKSBjcmVhdGVfaW5jcmVtZW50YWxfc29ydF9wYXRoKHJvb3QsCisJ CQkJCQkJCQkJCQkJCQkJIGdyb3VwZWRfcmVsLAorCQkJCQkJCQkJCQkJCQkJCSBwYXRoLAor CQkJCQkJCQkJCQkJCQkJCSBpbmZvLT5wYXRoa2V5cywKKwkJCQkJCQkJCQkJCQkJCQkgcHJl c29ydGVkX2tleXMsCisJCQkJCQkJCQkJCQkJCQkJIC0xLjApOworCisJCQkJCWlmIChwYXJz ZS0+aGFzQWdncykKKwkJCQkJCWFkZF9wYXRoKGdyb3VwZWRfcmVsLCAoUGF0aCAqKQorCQkJ CQkJCQkgY3JlYXRlX2FnZ19wYXRoKHJvb3QsCisJCQkJCQkJCQkJCQkgZ3JvdXBlZF9yZWws CisJCQkJCQkJCQkJCQkgcGF0aCwKKwkJCQkJCQkJCQkJCSBncm91cGVkX3JlbC0+cmVsdGFy Z2V0LAorCQkJCQkJCQkJCQkJIGluZm8tPmNsYXVzZXMgPyBBR0dfU09SVEVEIDogQUdHX1BM QUlOLAorCQkJCQkJCQkJCQkJIEFHR1NQTElUX0ZJTkFMX0RFU0VSSUFMLAorCQkJCQkJCQkJ CQkJIGluZm8tPmNsYXVzZXMsCisJCQkJCQkJCQkJCQkgaGF2aW5nUXVhbCwKKwkJCQkJCQkJ CQkJCSBhZ2dfZmluYWxfY29zdHMsCisJCQkJCQkJCQkJCQkgZE51bUdyb3VwcykpOworCQkJ CQllbHNlCisJCQkJCQlhZGRfcGF0aChncm91cGVkX3JlbCwgKFBhdGggKikKKwkJCQkJCQkJ IGNyZWF0ZV9ncm91cF9wYXRoKHJvb3QsCisJCQkJCQkJCQkJCQkgICBncm91cGVkX3JlbCwK KwkJCQkJCQkJCQkJCSAgIHBhdGgsCisJCQkJCQkJCQkJCQkgICBpbmZvLT5jbGF1c2VzLAor CQkJCQkJCQkJCQkJICAgaGF2aW5nUXVhbCwKKwkJCQkJCQkJCQkJCSAgIGROdW1Hcm91cHMp KTsKKwkJCQl9CiAJCQl9CiAJCX0KIAl9CkBAIC02NTk5LDQxICs2NjUxLDcxIEBAIGNyZWF0 ZV9wYXJ0aWFsX2dyb3VwaW5nX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LAogCQkgKi8KIAkJ Zm9yZWFjaChsYywgaW5wdXRfcmVsLT5wYXRobGlzdCkKIAkJeworCQkJTGlzdENlbGwgICAq bGMyOwogCQkJUGF0aAkgICAqcGF0aCA9IChQYXRoICopIGxmaXJzdChsYyk7Ci0JCQlib29s CQlpc19zb3J0ZWQ7CisJCQlQYXRoCSAgICpwYXRoX3NhdmUgPSBwYXRoOworCisJCQlMaXN0 CSAgICpwYXRoa2V5X29yZGVyaW5ncyA9IE5JTDsKIAotCQkJaXNfc29ydGVkID0gcGF0aGtl eXNfY29udGFpbmVkX2luKHJvb3QtPmdyb3VwX3BhdGhrZXlzLAotCQkJCQkJCQkJCQkgIHBh dGgtPnBhdGhrZXlzKTsKLQkJCWlmIChwYXRoID09IGNoZWFwZXN0X3RvdGFsX3BhdGggfHwg aXNfc29ydGVkKQorCQkJTGlzdAkgICAqZ3JvdXBfcGF0aGtleXMgPSByb290LT5ncm91cF9w YXRoa2V5czsKKwkJCUxpc3QJICAgKmdyb3VwX2NsYXVzZXMgPSBwYXJzZS0+Z3JvdXBDbGF1 c2U7CisKKwkJCS8qIGdlbmVyYXRlIGFsdGVybmF0aXZlIGdyb3VwIG9yZGVyaW5ncyB0aGF0 IG1pZ2h0IGJlIHVzZWZ1bCAqLworCQkJcGF0aGtleV9vcmRlcmluZ3MgPSBnZXRfdXNlZnVs X2dyb3VwX2tleXNfb3JkZXJpbmdzKHJvb3QsCisJCQkJCQkJCQkJCQkJCQkJcGF0aC0+cm93 cywKKwkJCQkJCQkJCQkJCQkJCQlwYXRoLT5wYXRoa2V5cywKKwkJCQkJCQkJCQkJCQkJCQln cm91cF9wYXRoa2V5cywKKwkJCQkJCQkJCQkJCQkJCQlncm91cF9jbGF1c2VzKTsKKworCQkJ QXNzZXJ0KGxpc3RfbGVuZ3RoKHBhdGhrZXlfb3JkZXJpbmdzKSA+IDApOworCisJCQkvKiBw cm9jZXNzIGFsbCBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBncm91cGluZyByZW9yZGVyaW5n cyAqLworCQkJZm9yZWFjaCAobGMyLCBwYXRoa2V5X29yZGVyaW5ncykKIAkJCXsKLQkJCQkv KiBTb3J0IHRoZSBjaGVhcGVzdCBwYXJ0aWFsIHBhdGgsIGlmIGl0IGlzbid0IGFscmVhZHkg Ki8KLQkJCQlpZiAoIWlzX3NvcnRlZCkKLQkJCQkJcGF0aCA9IChQYXRoICopIGNyZWF0ZV9z b3J0X3BhdGgocm9vdCwKLQkJCQkJCQkJCQkJCQkgcGFydGlhbGx5X2dyb3VwZWRfcmVsLAot CQkJCQkJCQkJCQkJCSBwYXRoLAotCQkJCQkJCQkJCQkJCSByb290LT5ncm91cF9wYXRoa2V5 cywKLQkJCQkJCQkJCQkJCQkgLTEuMCk7CisJCQkJYm9vbAkJaXNfc29ydGVkOworCQkJCWlu dAkJCXByZXNvcnRlZF9rZXlzID0gMDsKKwkJCQlQYXRoS2V5SW5mbyAqaW5mbyA9IChQYXRo S2V5SW5mbyAqKSBsZmlyc3QobGMyKTsKIAotCQkJCWlmIChwYXJzZS0+aGFzQWdncykKLQkJ CQkJYWRkX3BhdGgocGFydGlhbGx5X2dyb3VwZWRfcmVsLCAoUGF0aCAqKQotCQkJCQkJCSBj cmVhdGVfYWdnX3BhdGgocm9vdCwKLQkJCQkJCQkJCQkJIHBhcnRpYWxseV9ncm91cGVkX3Jl bCwKLQkJCQkJCQkJCQkJIHBhdGgsCi0JCQkJCQkJCQkJCSBwYXJ0aWFsbHlfZ3JvdXBlZF9y ZWwtPnJlbHRhcmdldCwKLQkJCQkJCQkJCQkJIHBhcnNlLT5ncm91cENsYXVzZSA/IEFHR19T T1JURUQgOiBBR0dfUExBSU4sCi0JCQkJCQkJCQkJCSBBR0dTUExJVF9JTklUSUFMX1NFUklB TCwKLQkJCQkJCQkJCQkJIHBhcnNlLT5ncm91cENsYXVzZSwKLQkJCQkJCQkJCQkJIE5JTCwK LQkJCQkJCQkJCQkJIGFnZ19wYXJ0aWFsX2Nvc3RzLAotCQkJCQkJCQkJCQkgZE51bVBhcnRp YWxHcm91cHMpKTsKLQkJCQllbHNlCi0JCQkJCWFkZF9wYXRoKHBhcnRpYWxseV9ncm91cGVk X3JlbCwgKFBhdGggKikKLQkJCQkJCQkgY3JlYXRlX2dyb3VwX3BhdGgocm9vdCwKLQkJCQkJ CQkJCQkJICAgcGFydGlhbGx5X2dyb3VwZWRfcmVsLAotCQkJCQkJCQkJCQkgICBwYXRoLAot CQkJCQkJCQkJCQkgICBwYXJzZS0+Z3JvdXBDbGF1c2UsCi0JCQkJCQkJCQkJCSAgIE5JTCwK LQkJCQkJCQkJCQkJICAgZE51bVBhcnRpYWxHcm91cHMpKTsKKwkJCQkvKiByZXN0b3JlIHRo ZSBwYXRoICh3ZSByZXBsYWNlIGl0IGluIHRoZSBsb29wKSAqLworCQkJCXBhdGggPSBwYXRo X3NhdmU7CisKKwkJCQlpc19zb3J0ZWQgPSBwYXRoa2V5c19jb3VudF9jb250YWluZWRfaW4o aW5mby0+cGF0aGtleXMsCisJCQkJCQkJCQkJCQkJCXBhdGgtPnBhdGhrZXlzLAorCQkJCQkJ CQkJCQkJCQkmcHJlc29ydGVkX2tleXMpOworCisJCQkJaWYgKHBhdGggPT0gY2hlYXBlc3Rf dG90YWxfcGF0aCB8fCBpc19zb3J0ZWQpCisJCQkJeworCQkJCQkvKiBTb3J0IHRoZSBjaGVh cGVzdCBwYXJ0aWFsIHBhdGgsIGlmIGl0IGlzbid0IGFscmVhZHkgKi8KKwkJCQkJaWYgKCFp c19zb3J0ZWQpCisJCQkJCXsKKwkJCQkJCXBhdGggPSAoUGF0aCAqKSBjcmVhdGVfc29ydF9w YXRoKHJvb3QsCisJCQkJCQkJCQkJCQkJCSBwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwsCisJCQkJ CQkJCQkJCQkJCSBwYXRoLAorCQkJCQkJCQkJCQkJCQkgaW5mby0+cGF0aGtleXMsCisJCQkJ CQkJCQkJCQkJCSAtMS4wKTsKKwkJCQkJfQorCisJCQkJCWlmIChwYXJzZS0+aGFzQWdncykK KwkJCQkJCWFkZF9wYXRoKHBhcnRpYWxseV9ncm91cGVkX3JlbCwgKFBhdGggKikKKwkJCQkJ CQkJIGNyZWF0ZV9hZ2dfcGF0aChyb290LAorCQkJCQkJCQkJCQkJIHBhcnRpYWxseV9ncm91 cGVkX3JlbCwKKwkJCQkJCQkJCQkJCSBwYXRoLAorCQkJCQkJCQkJCQkJIHBhcnRpYWxseV9n cm91cGVkX3JlbC0+cmVsdGFyZ2V0LAorCQkJCQkJCQkJCQkJIGluZm8tPmNsYXVzZXMgPyBB R0dfU09SVEVEIDogQUdHX1BMQUlOLAorCQkJCQkJCQkJCQkJIEFHR1NQTElUX0lOSVRJQUxf U0VSSUFMLAorCQkJCQkJCQkJCQkJIGluZm8tPmNsYXVzZXMsCisJCQkJCQkJCQkJCQkgTklM LAorCQkJCQkJCQkJCQkJIGFnZ19wYXJ0aWFsX2Nvc3RzLAorCQkJCQkJCQkJCQkJIGROdW1Q YXJ0aWFsR3JvdXBzKSk7CisJCQkJCWVsc2UKKwkJCQkJCWFkZF9wYXRoKHBhcnRpYWxseV9n cm91cGVkX3JlbCwgKFBhdGggKikKKwkJCQkJCQkJIGNyZWF0ZV9ncm91cF9wYXRoKHJvb3Qs CisJCQkJCQkJCQkJCQkgICBwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwsCisJCQkJCQkJCQkJCQkg ICBwYXRoLAorCQkJCQkJCQkJCQkJICAgaW5mby0+Y2xhdXNlcywKKwkJCQkJCQkJCQkJCSAg IE5JTCwKKwkJCQkJCQkJCQkJCSAgIGROdW1QYXJ0aWFsR3JvdXBzKSk7CisJCQkJfQogCQkJ fQogCQl9CiAKQEAgLTY2NDMsNiArNjcyNSw4IEBAIGNyZWF0ZV9wYXJ0aWFsX2dyb3VwaW5n X3BhdGhzKFBsYW5uZXJJbmZvICpyb290LAogCQkgKiBXZSBjYW4gYWxzbyBza2lwIHRoZSBl bnRpcmUgbG9vcCB3aGVuIHdlIG9ubHkgaGF2ZSBhIHNpbmdsZS1pdGVtCiAJCSAqIGdyb3Vw X3BhdGhrZXlzIGJlY2F1c2UgdGhlbiB3ZSBjYW4ndCBwb3NzaWJseSBoYXZlIGEgcHJlc29y dGVkCiAJCSAqIHByZWZpeCBvZiB0aGUgbGlzdCB3aXRob3V0IGhhdmluZyB0aGUgbGlzdCBi ZSBmdWxseSBzb3J0ZWQuCisJCSAqCisJCSAqIFhYWCBTaG91bGRuJ3QgdGhpcyBhbHNvIGNv bnNpZGVyIHRoZSBncm91cC1rZXktcmVvcmRlcmluZz8KIAkJICovCiAJCWlmIChlbmFibGVf aW5jcmVtZW50YWxfc29ydCAmJiBsaXN0X2xlbmd0aChyb290LT5ncm91cF9wYXRoa2V5cykg PiAxKQogCQl7CkBAIC02NzAxLDI0ICs2Nzg1LDEwMCBAQCBjcmVhdGVfcGFydGlhbF9ncm91 cGluZ19wYXRocyhQbGFubmVySW5mbyAqcm9vdCwKIAkJLyogU2ltaWxhciB0byBhYm92ZSBs b2dpYywgYnV0IGZvciBwYXJ0aWFsIHBhdGhzLiAqLwogCQlmb3JlYWNoKGxjLCBpbnB1dF9y ZWwtPnBhcnRpYWxfcGF0aGxpc3QpCiAJCXsKKwkJCUxpc3RDZWxsICAgKmxjMjsKIAkJCVBh dGgJICAgKnBhdGggPSAoUGF0aCAqKSBsZmlyc3QobGMpOwogCQkJUGF0aAkgICAqcGF0aF9v cmlnaW5hbCA9IHBhdGg7Ci0JCQlib29sCQlpc19zb3J0ZWQ7Ci0JCQlpbnQJCQlwcmVzb3J0 ZWRfa2V5czsKIAotCQkJaXNfc29ydGVkID0gcGF0aGtleXNfY291bnRfY29udGFpbmVkX2lu KHJvb3QtPmdyb3VwX3BhdGhrZXlzLAotCQkJCQkJCQkJCQkJCXBhdGgtPnBhdGhrZXlzLAot CQkJCQkJCQkJCQkJCSZwcmVzb3J0ZWRfa2V5cyk7CisJCQlMaXN0CSAgICpwYXRoa2V5X29y ZGVyaW5ncyA9IE5JTDsKKworCQkJTGlzdAkgICAqZ3JvdXBfcGF0aGtleXMgPSByb290LT5n cm91cF9wYXRoa2V5czsKKwkJCUxpc3QJICAgKmdyb3VwX2NsYXVzZXMgPSBwYXJzZS0+Z3Jv dXBDbGF1c2U7CiAKLQkJCWlmIChwYXRoID09IGNoZWFwZXN0X3BhcnRpYWxfcGF0aCB8fCBp c19zb3J0ZWQpCisJCQkvKiBnZW5lcmF0ZSBhbHRlcm5hdGl2ZSBncm91cCBvcmRlcmluZ3Mg dGhhdCBtaWdodCBiZSB1c2VmdWwgKi8KKwkJCXBhdGhrZXlfb3JkZXJpbmdzID0gZ2V0X3Vz ZWZ1bF9ncm91cF9rZXlzX29yZGVyaW5ncyhyb290LAorCQkJCQkJCQkJCQkJCQkJCXBhdGgt PnJvd3MsCisJCQkJCQkJCQkJCQkJCQkJcGF0aC0+cGF0aGtleXMsCisJCQkJCQkJCQkJCQkJ CQkJZ3JvdXBfcGF0aGtleXMsCisJCQkJCQkJCQkJCQkJCQkJZ3JvdXBfY2xhdXNlcyk7CisK KwkJCUFzc2VydChsaXN0X2xlbmd0aChwYXRoa2V5X29yZGVyaW5ncykgPiAwKTsKKworCQkJ LyogcHJvY2VzcyBhbGwgcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcgZ3JvdXBpbmcgcmVvcmRl cmluZ3MgKi8KKwkJCWZvcmVhY2ggKGxjMiwgcGF0aGtleV9vcmRlcmluZ3MpCiAJCQl7Ci0J CQkJLyogU29ydCB0aGUgY2hlYXBlc3QgcGFydGlhbCBwYXRoLCBpZiBpdCBpc24ndCBhbHJl YWR5ICovCi0JCQkJaWYgKCFpc19zb3J0ZWQpCi0JCQkJCXBhdGggPSAoUGF0aCAqKSBjcmVh dGVfc29ydF9wYXRoKHJvb3QsCi0JCQkJCQkJCQkJCQkJIHBhcnRpYWxseV9ncm91cGVkX3Jl bCwKLQkJCQkJCQkJCQkJCQkgcGF0aCwKLQkJCQkJCQkJCQkJCQkgcm9vdC0+Z3JvdXBfcGF0 aGtleXMsCi0JCQkJCQkJCQkJCQkJIC0xLjApOworCQkJCWJvb2wJCWlzX3NvcnRlZDsKKwkJ CQlpbnQJCQlwcmVzb3J0ZWRfa2V5cyA9IDA7CisJCQkJUGF0aEtleUluZm8gKmluZm8gPSAo UGF0aEtleUluZm8gKikgbGZpcnN0KGxjMik7CisKKwkJCQkvKiByZXN0b3JlIHRoZSBwYXRo ICh3ZSByZXBsYWNlIGl0IGluIHRoZSBsb29wKSAqLworCQkJCXBhdGggPSBwYXRoX29yaWdp bmFsOworCisJCQkJaXNfc29ydGVkID0gcGF0aGtleXNfY291bnRfY29udGFpbmVkX2luKGlu Zm8tPnBhdGhrZXlzLAorCQkJCQkJCQkJCQkJCQlwYXRoLT5wYXRoa2V5cywKKwkJCQkJCQkJ CQkJCQkJJnByZXNvcnRlZF9rZXlzKTsKKworCQkJCWlmIChwYXRoID09IGNoZWFwZXN0X3Bh cnRpYWxfcGF0aCB8fCBpc19zb3J0ZWQpCisJCQkJeworCisJCQkJCS8qIFNvcnQgdGhlIGNo ZWFwZXN0IHBhcnRpYWwgcGF0aCwgaWYgaXQgaXNuJ3QgYWxyZWFkeSAqLworCQkJCQlpZiAo IWlzX3NvcnRlZCkKKwkJCQkJeworCQkJCQkJcGF0aCA9IChQYXRoICopIGNyZWF0ZV9zb3J0 X3BhdGgocm9vdCwKKwkJCQkJCQkJCQkJCQkJIHBhcnRpYWxseV9ncm91cGVkX3JlbCwKKwkJ CQkJCQkJCQkJCQkJIHBhdGgsCisJCQkJCQkJCQkJCQkJCSBpbmZvLT5wYXRoa2V5cywKKwkJ CQkJCQkJCQkJCQkJIC0xLjApOworCQkJCQl9CisKKwkJCQkJaWYgKHBhcnNlLT5oYXNBZ2dz KQorCQkJCQkJYWRkX3BhcnRpYWxfcGF0aChwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwsIChQYXRo ICopCisJCQkJCQkJCQkJIGNyZWF0ZV9hZ2dfcGF0aChyb290LAorCQkJCQkJCQkJCQkJCQkg cGFydGlhbGx5X2dyb3VwZWRfcmVsLAorCQkJCQkJCQkJCQkJCQkgcGF0aCwKKwkJCQkJCQkJ CQkJCQkJIHBhcnRpYWxseV9ncm91cGVkX3JlbC0+cmVsdGFyZ2V0LAorCQkJCQkJCQkJCQkJ CQkgaW5mby0+Y2xhdXNlcyA/IEFHR19TT1JURUQgOiBBR0dfUExBSU4sCisJCQkJCQkJCQkJ CQkJCSBBR0dTUExJVF9JTklUSUFMX1NFUklBTCwKKwkJCQkJCQkJCQkJCQkJIGluZm8tPmNs YXVzZXMsCisJCQkJCQkJCQkJCQkJCSBOSUwsCisJCQkJCQkJCQkJCQkJCSBhZ2dfcGFydGlh bF9jb3N0cywKKwkJCQkJCQkJCQkJCQkJIGROdW1QYXJ0aWFsUGFydGlhbEdyb3VwcykpOwor CQkJCQllbHNlCisJCQkJCQlhZGRfcGFydGlhbF9wYXRoKHBhcnRpYWxseV9ncm91cGVkX3Jl bCwgKFBhdGggKikKKwkJCQkJCQkJCQkgY3JlYXRlX2dyb3VwX3BhdGgocm9vdCwKKwkJCQkJ CQkJCQkJCQkJICAgcGFydGlhbGx5X2dyb3VwZWRfcmVsLAorCQkJCQkJCQkJCQkJCQkgICBw YXRoLAorCQkJCQkJCQkJCQkJCQkgICBpbmZvLT5jbGF1c2VzLAorCQkJCQkJCQkJCQkJCQkg ICBOSUwsCisJCQkJCQkJCQkJCQkJCSAgIGROdW1QYXJ0aWFsUGFydGlhbEdyb3VwcykpOwor CQkJCX0KKworCQkJCS8qCisJCQkJICogTm93IHdlIG1heSBjb25zaWRlciBpbmNyZW1lbnRh bCBzb3J0IG9uIHRoaXMgcGF0aCwgYnV0IG9ubHkKKwkJCQkgKiB3aGVuIHRoZSBwYXRoIGlz IG5vdCBhbHJlYWR5IHNvcnRlZCBhbmQgd2hlbiBpbmNyZW1lbnRhbCBzb3J0CisJCQkJICog aXMgZW5hYmxlZC4KKwkJCQkgKi8KKwkJCQlpZiAoaXNfc29ydGVkIHx8ICFlbmFibGVfaW5j cmVtZW50YWxfc29ydCkKKwkJCQkJY29udGludWU7CisKKwkJCQkvKiBSZXN0b3JlIHRoZSBp bnB1dCBwYXRoICh3ZSBtaWdodCBoYXZlIGFkZGVkIFNvcnQgb24gdG9wKS4gKi8KKwkJCQlw YXRoID0gcGF0aF9vcmlnaW5hbDsKKworCQkJCS8qIG5vIHNoYXJlZCBwcmVmaXgsIG5vdCBw b2ludCBpbiBidWlsZGluZyBpbmNyZW1lbnRhbCBzb3J0ICovCisJCQkJaWYgKHByZXNvcnRl ZF9rZXlzID09IDApCisJCQkJCWNvbnRpbnVlOworCisJCQkJLyoKKwkJCQkgKiBXZSBzaG91 bGQgaGF2ZSBhbHJlYWR5IGV4Y2x1ZGVkIHBhdGhrZXlzIG9mIGxlbmd0aCAxIGJlY2F1c2UK KwkJCQkgKiB0aGVuIHByZXNvcnRlZF9rZXlzID4gMCB3b3VsZCBpbXBseSBpc19zb3J0ZWQg d2FzIHRydWUuCisJCQkJICovCisJCQkJQXNzZXJ0KGxpc3RfbGVuZ3RoKHJvb3QtPmdyb3Vw X3BhdGhrZXlzKSAhPSAxKTsKKworCQkJCXBhdGggPSAoUGF0aCAqKSBjcmVhdGVfaW5jcmVt ZW50YWxfc29ydF9wYXRoKHJvb3QsCisJCQkJCQkJCQkJCQkJCQkgcGFydGlhbGx5X2dyb3Vw ZWRfcmVsLAorCQkJCQkJCQkJCQkJCQkJIHBhdGgsCisJCQkJCQkJCQkJCQkJCQkgaW5mby0+ cGF0aGtleXMsCisJCQkJCQkJCQkJCQkJCQkgcHJlc29ydGVkX2tleXMsCisJCQkJCQkJCQkJ CQkJCQkgLTEuMCk7CiAKIAkJCQlpZiAocGFyc2UtPmhhc0FnZ3MpCiAJCQkJCWFkZF9wYXJ0 aWFsX3BhdGgocGFydGlhbGx5X2dyb3VwZWRfcmVsLCAoUGF0aCAqKQpAQCAtNjcyNiw5ICs2 ODg2LDkgQEAgY3JlYXRlX3BhcnRpYWxfZ3JvdXBpbmdfcGF0aHMoUGxhbm5lckluZm8gKnJv b3QsCiAJCQkJCQkJCQkJCQkJIHBhcnRpYWxseV9ncm91cGVkX3JlbCwKIAkJCQkJCQkJCQkJ CQkgcGF0aCwKIAkJCQkJCQkJCQkJCQkgcGFydGlhbGx5X2dyb3VwZWRfcmVsLT5yZWx0YXJn ZXQsCi0JCQkJCQkJCQkJCQkJIHBhcnNlLT5ncm91cENsYXVzZSA/IEFHR19TT1JURUQgOiBB R0dfUExBSU4sCisJCQkJCQkJCQkJCQkJIGluZm8tPmNsYXVzZXMgPyBBR0dfU09SVEVEIDog QUdHX1BMQUlOLAogCQkJCQkJCQkJCQkJCSBBR0dTUExJVF9JTklUSUFMX1NFUklBTCwKLQkJ CQkJCQkJCQkJCQkgcGFyc2UtPmdyb3VwQ2xhdXNlLAorCQkJCQkJCQkJCQkJCSBpbmZvLT5j bGF1c2VzLAogCQkJCQkJCQkJCQkJCSBOSUwsCiAJCQkJCQkJCQkJCQkJIGFnZ19wYXJ0aWFs X2Nvc3RzLAogCQkJCQkJCQkJCQkJCSBkTnVtUGFydGlhbFBhcnRpYWxHcm91cHMpKTsKQEAg LTY3MzcsNTkgKzY4OTcsMTAgQEAgY3JlYXRlX3BhcnRpYWxfZ3JvdXBpbmdfcGF0aHMoUGxh bm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQkgY3JlYXRlX2dyb3VwX3BhdGgocm9vdCwKIAkJ CQkJCQkJCQkJCQkgICBwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwsCiAJCQkJCQkJCQkJCQkJICAg cGF0aCwKLQkJCQkJCQkJCQkJCQkgICBwYXJzZS0+Z3JvdXBDbGF1c2UsCisJCQkJCQkJCQkJ CQkJICAgaW5mby0+Y2xhdXNlcywKIAkJCQkJCQkJCQkJCQkgICBOSUwsCiAJCQkJCQkJCQkJ CQkJICAgZE51bVBhcnRpYWxQYXJ0aWFsR3JvdXBzKSk7CiAJCQl9Ci0KLQkJCS8qCi0JCQkg KiBOb3cgd2UgbWF5IGNvbnNpZGVyIGluY3JlbWVudGFsIHNvcnQgb24gdGhpcyBwYXRoLCBi dXQgb25seQotCQkJICogd2hlbiB0aGUgcGF0aCBpcyBub3QgYWxyZWFkeSBzb3J0ZWQgYW5k IHdoZW4gaW5jcmVtZW50YWwgc29ydAotCQkJICogaXMgZW5hYmxlZC4KLQkJCSAqLwotCQkJ aWYgKGlzX3NvcnRlZCB8fCAhZW5hYmxlX2luY3JlbWVudGFsX3NvcnQpCi0JCQkJY29udGlu dWU7Ci0KLQkJCS8qIFJlc3RvcmUgdGhlIGlucHV0IHBhdGggKHdlIG1pZ2h0IGhhdmUgYWRk ZWQgU29ydCBvbiB0b3ApLiAqLwotCQkJcGF0aCA9IHBhdGhfb3JpZ2luYWw7Ci0KLQkJCS8q IG5vIHNoYXJlZCBwcmVmaXgsIG5vdCBwb2ludCBpbiBidWlsZGluZyBpbmNyZW1lbnRhbCBz b3J0ICovCi0JCQlpZiAocHJlc29ydGVkX2tleXMgPT0gMCkKLQkJCQljb250aW51ZTsKLQot CQkJLyoKLQkJCSAqIFdlIHNob3VsZCBoYXZlIGFscmVhZHkgZXhjbHVkZWQgcGF0aGtleXMg b2YgbGVuZ3RoIDEgYmVjYXVzZQotCQkJICogdGhlbiBwcmVzb3J0ZWRfa2V5cyA+IDAgd291 bGQgaW1wbHkgaXNfc29ydGVkIHdhcyB0cnVlLgotCQkJICovCi0JCQlBc3NlcnQobGlzdF9s ZW5ndGgocm9vdC0+Z3JvdXBfcGF0aGtleXMpICE9IDEpOwotCi0JCQlwYXRoID0gKFBhdGgg KikgY3JlYXRlX2luY3JlbWVudGFsX3NvcnRfcGF0aChyb290LAotCQkJCQkJCQkJCQkJCQkg cGFydGlhbGx5X2dyb3VwZWRfcmVsLAotCQkJCQkJCQkJCQkJCQkgcGF0aCwKLQkJCQkJCQkJ CQkJCQkJIHJvb3QtPmdyb3VwX3BhdGhrZXlzLAotCQkJCQkJCQkJCQkJCQkgcHJlc29ydGVk X2tleXMsCi0JCQkJCQkJCQkJCQkJCSAtMS4wKTsKLQotCQkJaWYgKHBhcnNlLT5oYXNBZ2dz KQotCQkJCWFkZF9wYXJ0aWFsX3BhdGgocGFydGlhbGx5X2dyb3VwZWRfcmVsLCAoUGF0aCAq KQotCQkJCQkJCQkgY3JlYXRlX2FnZ19wYXRoKHJvb3QsCi0JCQkJCQkJCQkJCQkgcGFydGlh bGx5X2dyb3VwZWRfcmVsLAotCQkJCQkJCQkJCQkJIHBhdGgsCi0JCQkJCQkJCQkJCQkgcGFy dGlhbGx5X2dyb3VwZWRfcmVsLT5yZWx0YXJnZXQsCi0JCQkJCQkJCQkJCQkgcGFyc2UtPmdy b3VwQ2xhdXNlID8gQUdHX1NPUlRFRCA6IEFHR19QTEFJTiwKLQkJCQkJCQkJCQkJCSBBR0dT UExJVF9JTklUSUFMX1NFUklBTCwKLQkJCQkJCQkJCQkJCSBwYXJzZS0+Z3JvdXBDbGF1c2Us Ci0JCQkJCQkJCQkJCQkgTklMLAotCQkJCQkJCQkJCQkJIGFnZ19wYXJ0aWFsX2Nvc3RzLAot CQkJCQkJCQkJCQkJIGROdW1QYXJ0aWFsUGFydGlhbEdyb3VwcykpOwotCQkJZWxzZQotCQkJ CWFkZF9wYXJ0aWFsX3BhdGgocGFydGlhbGx5X2dyb3VwZWRfcmVsLCAoUGF0aCAqKQotCQkJ CQkJCQkgY3JlYXRlX2dyb3VwX3BhdGgocm9vdCwKLQkJCQkJCQkJCQkJCSAgIHBhcnRpYWxs eV9ncm91cGVkX3JlbCwKLQkJCQkJCQkJCQkJCSAgIHBhdGgsCi0JCQkJCQkJCQkJCQkgICBw YXJzZS0+Z3JvdXBDbGF1c2UsCi0JCQkJCQkJCQkJCQkgICBOSUwsCi0JCQkJCQkJCQkJCQkg ICBkTnVtUGFydGlhbFBhcnRpYWxHcm91cHMpKTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYyBiL3NyYy9iYWNrZW5kL29w dGltaXplci91dGlsL3BhdGhub2RlLmMKaW5kZXggNWMzMmM5NmI3MWMuLmNkN2M2NzFhNzA2 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCisr KyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMKQEAgLTEzNDIsNyAr MTM0Miw3IEBAIGNyZWF0ZV9hcHBlbmRfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAkJcGF0 aG5vZGUtPnBhdGgucGF0aGtleXMgPSBjaGlsZC0+cGF0aGtleXM7CiAJfQogCWVsc2UKLQkJ Y29zdF9hcHBlbmQocGF0aG5vZGUpOworCQljb3N0X2FwcGVuZChwYXRobm9kZSwgcm9vdCk7 CiAKIAkvKiBJZiB0aGUgY2FsbGVyIHByb3ZpZGVkIGEgcm93IGVzdGltYXRlLCBvdmVycmlk ZSB0aGUgY29tcHV0ZWQgdmFsdWUuICovCiAJaWYgKHJvd3MgPj0gMCkKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L3NlbGZ1bmNzLmMKaW5kZXggMWZiYjBiMjhjM2IuLjM2YzMwM2U0NWM1IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYworKysgYi9zcmMvYmFja2Vu ZC91dGlscy9hZHQvc2VsZnVuY3MuYwpAQCAtMzI5NCw3ICszMjk0LDEwIEBAIGFkZF91bmlx dWVfZ3JvdXBfdmFyKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICp2YXJpbmZvcywKIH0KIAog LyoKLSAqIGVzdGltYXRlX251bV9ncm91cHMJCS0gRXN0aW1hdGUgbnVtYmVyIG9mIGdyb3Vw cyBpbiBhIGdyb3VwZWQgcXVlcnkKKyAqIGVzdGltYXRlX251bV9ncm91cHMvZXN0aW1hdGVf bnVtX2dyb3Vwc19pbmNyZW1lbnRhbAorICoJCS0gRXN0aW1hdGUgbnVtYmVyIG9mIGdyb3Vw cyBpbiBhIGdyb3VwZWQgcXVlcnkuCisgKgkJICBfaW5jcmVtZW50YWwgdmFyaWFudCBpcyBw ZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gZm9yCisgKgkJICBjYXNlIG9mIGFkZGluZyBvbmUt Ynktb25lIGNvbHVtbgogICoKICAqIEdpdmVuIGEgcXVlcnkgaGF2aW5nIGEgR1JPVVAgQlkg Y2xhdXNlLCBlc3RpbWF0ZSBob3cgbWFueSBncm91cHMgdGhlcmUKICAqIHdpbGwgYmUgLS0t IGllLCB0aGUgbnVtYmVyIG9mIGRpc3RpbmN0IGNvbWJpbmF0aW9ucyBvZiB0aGUgR1JPVVAg QlkKQEAgLTMzNjgsMTEgKzMzNzEsMjIgQEAgZG91YmxlCiBlc3RpbWF0ZV9udW1fZ3JvdXBz KFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpncm91cEV4cHJzLCBkb3VibGUgaW5wdXRfcm93 cywKIAkJCQkJTGlzdCAqKnBnc2V0LCBFc3RpbWF0aW9uSW5mbyAqZXN0aW5mbykKIHsKLQlM aXN0CSAgICp2YXJpbmZvcyA9IE5JTDsKKwlyZXR1cm4gZXN0aW1hdGVfbnVtX2dyb3Vwc19p bmNyZW1lbnRhbChyb290LCBncm91cEV4cHJzLAorCQkJCQkJCQkJCSAgIGlucHV0X3Jvd3Ms IHBnc2V0LCBlc3RpbmZvLAorCQkJCQkJCQkJCSAgIE5VTEwsIDApOworfQorCitkb3VibGUK K2VzdGltYXRlX251bV9ncm91cHNfaW5jcmVtZW50YWwoUGxhbm5lckluZm8gKnJvb3QsIExp c3QgKmdyb3VwRXhwcnMsCisJCQkJCWRvdWJsZSBpbnB1dF9yb3dzLAorCQkJCQlMaXN0ICoq cGdzZXQsIEVzdGltYXRpb25JbmZvICplc3RpbmZvLAorCQkJCQlMaXN0ICoqY2FjaGVfdmFy aW5mb3MsIGludCBwcmV2TkV4cHJzKQoreworCUxpc3QJICAgKnZhcmluZm9zID0gKGNhY2hl X3ZhcmluZm9zKSA/ICpjYWNoZV92YXJpbmZvcyA6IE5JTDsKIAlkb3VibGUJCXNyZl9tdWx0 aXBsaWVyID0gMS4wOwogCWRvdWJsZQkJbnVtZGlzdGluY3Q7CiAJTGlzdENlbGwgICAqbDsK LQlpbnQJCQlpOworCWludAkJCWksIGo7CiAKIAkvKiBaZXJvIHRoZSBlc3RpbmZvIG91dHB1 dCBwYXJhbWV0ZXIsIGlmIG5vbi1OVUxMICovCiAJaWYgKGVzdGluZm8gIT0gTlVMTCkKQEAg LTM0MDMsNyArMzQxNyw3IEBAIGVzdGltYXRlX251bV9ncm91cHMoUGxhbm5lckluZm8gKnJv b3QsIExpc3QgKmdyb3VwRXhwcnMsIGRvdWJsZSBpbnB1dF9yb3dzLAogCSAqLwogCW51bWRp c3RpbmN0ID0gMS4wOwogCi0JaSA9IDA7CisJaSA9IGogPSAwOwogCWZvcmVhY2gobCwgZ3Jv dXBFeHBycykKIAl7CiAJCU5vZGUJICAgKmdyb3VwZXhwciA9IChOb2RlICopIGxmaXJzdChs KTsKQEAgLTM0MTIsNiArMzQyNiwxNCBAQCBlc3RpbWF0ZV9udW1fZ3JvdXBzKFBsYW5uZXJJ bmZvICpyb290LCBMaXN0ICpncm91cEV4cHJzLCBkb3VibGUgaW5wdXRfcm93cywKIAkJTGlz dAkgICAqdmFyc2hlcmU7CiAJCUxpc3RDZWxsICAgKmwyOwogCisJCS8qIHdhcyBkb25lIG9u IHByZXZpb3VzIGNhbGwgKi8KKwkJaWYgKGNhY2hlX3ZhcmluZm9zICYmIGorKyA8IHByZXZO RXhwcnMpCisJCXsKKwkJCWlmIChwZ3NldCkKKwkJCQlpKys7IC8qIHRvIGtlZXAgaW4gc3lu YyB3aXRoIGxpbmVzIGJlbG93ICovCisJCQljb250aW51ZTsKKwkJfQorCiAJCS8qIGlzIGV4 cHJlc3Npb24gaW4gdGhpcyBncm91cGluZyBzZXQ/ICovCiAJCWlmIChwZ3NldCAmJiAhbGlz dF9tZW1iZXJfaW50KCpwZ3NldCwgaSsrKSkKIAkJCWNvbnRpbnVlOwpAQCAtMzQ4MSw3ICsz NTAzLDExIEBAIGVzdGltYXRlX251bV9ncm91cHMoUGxhbm5lckluZm8gKnJvb3QsIExpc3Qg Kmdyb3VwRXhwcnMsIGRvdWJsZSBpbnB1dF9yb3dzLAogCQlpZiAodmFyc2hlcmUgPT0gTklM KQogCQl7CiAJCQlpZiAoY29udGFpbl92b2xhdGlsZV9mdW5jdGlvbnMoZ3JvdXBleHByKSkK KwkJCXsKKwkJCQlpZiAoY2FjaGVfdmFyaW5mb3MpCisJCQkJCSpjYWNoZV92YXJpbmZvcyA9 IHZhcmluZm9zOwogCQkJCXJldHVybiBpbnB1dF9yb3dzOworCQkJfQogCQkJY29udGludWU7 CiAJCX0KIApAQCAtMzQ5OCw2ICszNTI0LDkgQEAgZXN0aW1hdGVfbnVtX2dyb3VwcyhQbGFu bmVySW5mbyAqcm9vdCwgTGlzdCAqZ3JvdXBFeHBycywgZG91YmxlIGlucHV0X3Jvd3MsCiAJ CX0KIAl9CiAKKwlpZiAoY2FjaGVfdmFyaW5mb3MpCisJCSpjYWNoZV92YXJpbmZvcyA9IHZh cmluZm9zOworCiAJLyoKIAkgKiBJZiBub3cgbm8gVmFycywgd2UgbXVzdCBoYXZlIGFuIGFs bC1jb25zdGFudCBvciBhbGwtYm9vbGVhbiBHUk9VUCBCWQogCSAqIGxpc3QuCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Yy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMv bWlzYy9ndWMuYwppbmRleCBlN2YwYTM4MGU2MC4uOTM1ZDViZDlmNmQgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMv bWlzYy9ndWMuYwpAQCAtMjEzOSw2ICsyMTM5LDM4IEBAIHN0YXRpYyBzdHJ1Y3QgY29uZmln X2Jvb2wgQ29uZmlndXJlTmFtZXNCb29sW10gPQogCQlOVUxMLCBOVUxMLCBOVUxMCiAJfSwK IAorLyoqKioqKioqKioqKioqKioqKioqKioqKjxERUJVRyBPUFQgR1JPVVAgQlk+KioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqLworCXsKKwkJeyJkZWJ1Z19ncm91cF9ieV9y ZW9yZGVyX2J5X3BhdGhrZXlzIiwgUEdDX1VTRVJTRVQsIFFVRVJZX1RVTklOR19NRVRIT0Qs CisJCQlnZXR0ZXh0X25vb3AoImVuYWJsZSByZW9yZGVyIEdST1VQIEJZIGJ5IHBhdGhrZXlz IiksCisJCQlOVUxMLAorCQkJR1VDX05PVF9JTl9TQU1QTEUKKwkJfSwKKwkJJmRlYnVnX2dy b3VwX2J5X3Jlb3JkZXJfYnlfcGF0aGtleXMsCisJCXRydWUsCisJCU5VTEwsIE5VTEwsIE5V TEwKKwl9LAorCXsKKwkJeyJkZWJ1Z19lbmFibGVfZ3JvdXBfYnlfbWF0Y2hfb3JkZXJfYnki LCBQR0NfVVNFUlNFVCwgUVVFUllfVFVOSU5HX01FVEhPRCwKKwkJCWdldHRleHRfbm9vcCgi ZW5hYmxlIG1hdGNoaW5nIEdST1VQIEJZIGJ5IE9SREVSIEJZLiIpLAorCQkJTlVMTCwKKwkJ CUdVQ19OT1RfSU5fU0FNUExFCisJCX0sCisJCSZkZWJ1Z19ncm91cF9ieV9tYXRjaF9vcmRl cl9ieSwKKwkJdHJ1ZSwKKwkJTlVMTCwgTlVMTCwgTlVMTAorCX0sCisJeworCQl7ImRlYnVn X2VuYWJsZV9jaGVhcGVzdF9ncm91cF9ieSIsIFBHQ19VU0VSU0VULCBRVUVSWV9UVU5JTkdf TUVUSE9ELAorCQkJZ2V0dGV4dF9ub29wKCJmaW5kIGEgY2hlYXBlc3Qgb3JkZXIgb2YgY29s dW1ucyBpbiBHUk9VUCBCWS4iKSwKKwkJCU5VTEwsCisJCQlHVUNfTk9UX0lOX1NBTVBMRQor CQl9LAorCQkmZGVidWdfY2hlYXBlc3RfZ3JvdXBfYnksCisJCXRydWUsCisJCU5VTEwsIE5V TEwsIE5VTEwKKwl9LAorLyoqKioqKioqKioqKioqKioqKioqKioqKjwvREVCVUcgT1BUIEdS T1VQIEJZPioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCS8qIEVuZC1vZi1s aXN0IG1hcmtlciAqLwogCXsKIAkJe05VTEwsIDAsIDAsIE5VTEwsIE5VTEx9LCBOVUxMLCBm YWxzZSwgTlVMTCwgTlVMTCwgTlVMTApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMv bm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL25vZGVzLmgKaW5kZXggNWQwNzVmMGMzNDYu LjM0YjlmYmNmNjllIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5oCisr KyBiL3NyYy9pbmNsdWRlL25vZGVzL25vZGVzLmgKQEAgLTI2Niw2ICsyNjYsNyBAQCB0eXBl ZGVmIGVudW0gTm9kZVRhZwogCVRfRXF1aXZhbGVuY2VDbGFzcywKIAlUX0VxdWl2YWxlbmNl TWVtYmVyLAogCVRfUGF0aEtleSwKKwlUX1BhdGhLZXlJbmZvLAogCVRfUGF0aFRhcmdldCwK IAlUX1Jlc3RyaWN0SW5mbywKIAlUX0luZGV4Q2xhdXNlLApkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMu aAppbmRleCAxZjM4NDViM2ZlYy4uODM1ODIzMDE5MDggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL25vZGVzL3BhdGhub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rl cy5oCkBAIC0xMDcwLDYgKzEwNzAsMTYgQEAgdHlwZWRlZiBzdHJ1Y3QgUGF0aEtleQogCWJv b2wJCXBrX251bGxzX2ZpcnN0OyAvKiBkbyBOVUxMcyBjb21lIGJlZm9yZSBub3JtYWwgdmFs dWVzPyAqLwogfSBQYXRoS2V5OwogCisvKgorICogQ29tYmluZXMgaW5mb3JtYXRpb24gYWJv dXQgcGF0aGtleXMgYW5kIHRoZSBhc3NvY2lhdGVkIGNsYXVzZXMuCisgKi8KK3R5cGVkZWYg c3RydWN0IFBhdGhLZXlJbmZvCit7CisJTm9kZVRhZwkJdHlwZTsKKwlMaXN0CSAgICpwYXRo a2V5czsKKwlMaXN0CSAgICpjbGF1c2VzOworfSBQYXRoS2V5SW5mbzsKKwogLyoKICAqIFZv bGF0aWxlRnVuY3Rpb25TdGF0dXMgLS0gYWxsb3dzIG5vZGVzIHRvIGNhY2hlIHRoZWlyCiAg KiBjb250YWluX3ZvbGF0aWxlX2Z1bmN0aW9ucyBwcm9wZXJ0aWVzLiBWT0xBVElMSVRZX1VO S05PV04gbWVhbnMgbm90IHlldApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVy L2Nvc3QuaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgKaW5kZXggMzU2YTUxZjM3 MGEuLjBiMDgzYTI3YjNjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29z dC5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgKQEAgLTExMiw3ICsxMTIs OSBAQCBleHRlcm4gdm9pZCBjb3N0X2luY3JlbWVudGFsX3NvcnQoUGF0aCAqcGF0aCwKIAkJ CQkJCQkJICBDb3N0IGlucHV0X3N0YXJ0dXBfY29zdCwgQ29zdCBpbnB1dF90b3RhbF9jb3N0 LAogCQkJCQkJCQkgIGRvdWJsZSBpbnB1dF90dXBsZXMsIGludCB3aWR0aCwgQ29zdCBjb21w YXJpc29uX2Nvc3QsIGludCBzb3J0X21lbSwKIAkJCQkJCQkJICBkb3VibGUgbGltaXRfdHVw bGVzKTsKLWV4dGVybiB2b2lkIGNvc3RfYXBwZW5kKEFwcGVuZFBhdGggKnBhdGgpOworZXh0 ZXJuIENvc3QgY29zdF9zb3J0X2VzdGltYXRlKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpw YXRoa2V5cywKKwkJCQkJCQkgICBpbnQgblByZXNvcnRlZEtleXMsIGRvdWJsZSB0dXBsZXMp OworZXh0ZXJuIHZvaWQgY29zdF9hcHBlbmQoQXBwZW5kUGF0aCAqcGF0aCwgUGxhbm5lcklu Zm8gKnJvb3QpOwogZXh0ZXJuIHZvaWQgY29zdF9tZXJnZV9hcHBlbmQoUGF0aCAqcGF0aCwg UGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJICBMaXN0ICpwYXRoa2V5cywgaW50IG5fc3Ry ZWFtcywKIAkJCQkJCQkgIENvc3QgaW5wdXRfc3RhcnR1cF9jb3N0LCBDb3N0IGlucHV0X3Rv dGFsX2Nvc3QsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaCBi L3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRocy5oCmluZGV4IDBjM2EwYjkwYzg1Li41MjVi NTk0Y2JkMCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhzLmgKKysr IGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhzLmgKQEAgLTIwMyw2ICsyMDMsMTcgQEAg dHlwZWRlZiBlbnVtCiBleHRlcm4gUGF0aEtleXNDb21wYXJpc29uIGNvbXBhcmVfcGF0aGtl eXMoTGlzdCAqa2V5czEsIExpc3QgKmtleXMyKTsKIGV4dGVybiBib29sIHBhdGhrZXlzX2Nv bnRhaW5lZF9pbihMaXN0ICprZXlzMSwgTGlzdCAqa2V5czIpOwogZXh0ZXJuIGJvb2wgcGF0 aGtleXNfY291bnRfY29udGFpbmVkX2luKExpc3QgKmtleXMxLCBMaXN0ICprZXlzMiwgaW50 ICpuX2NvbW1vbik7CitleHRlcm4gaW50IGdyb3VwX2tleXNfcmVvcmRlcl9ieV9wYXRoa2V5 cyhMaXN0ICpwYXRoa2V5cywKKwkJCQkJCQkJCQkgIExpc3QgKipncm91cF9wYXRoa2V5cywK KwkJCQkJCQkJCQkgIExpc3QgKipncm91cF9jbGF1c2VzKTsKKy8qKioqKioqKioqKioqKioq KioqKioqKio8REVCVUcgT1BUIEdST1VQIEJZPioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKi8KK2V4dGVybiBib29sIGRlYnVnX2dyb3VwX2J5X3Jlb3JkZXJfYnlfcGF0aGtl eXM7CitleHRlcm4gYm9vbCBkZWJ1Z19ncm91cF9ieV9tYXRjaF9vcmRlcl9ieTsKK2V4dGVy biBib29sIGRlYnVnX2NoZWFwZXN0X2dyb3VwX2J5OworLyoqKioqKioqKioqKioqKioqKioq KioqKjwvREVCVUcgT1BUIEdST1VQIEJZPioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLworZXh0ZXJuIExpc3QgKmdldF91c2VmdWxfZ3JvdXBfa2V5c19vcmRlcmluZ3MoUGxh bm5lckluZm8gKnJvb3QsIGRvdWJsZSBucm93cywKKwkJCQkJCQkJCQkJIExpc3QgKnBhdGhf cGF0aGtleXMsCisJCQkJCQkJCQkJCSBMaXN0ICpwYXRoa2V5cywgTGlzdCAqY2xhdXNlcyk7 CiBleHRlcm4gUGF0aCAqZ2V0X2NoZWFwZXN0X3BhdGhfZm9yX3BhdGhrZXlzKExpc3QgKnBh dGhzLCBMaXN0ICpwYXRoa2V5cywKIAkJCQkJCQkJCQkJUmVsaWRzIHJlcXVpcmVkX291dGVy LAogCQkJCQkJCQkJCQlDb3N0U2VsZWN0b3IgY29zdF9jcml0ZXJpb24sCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS91dGlscy9zZWxmdW5jcy5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvc2Vs ZnVuY3MuaAppbmRleCA4ZjNkNzNlZGZiMi4uYzMxM2EwOGQ1NDEgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL3V0aWxzL3NlbGZ1bmNzLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvc2Vs ZnVuY3MuaApAQCAtMjE0LDYgKzIxNCwxMSBAQCBleHRlcm4gZG91YmxlIGVzdGltYXRlX251 bV9ncm91cHMoUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKmdyb3VwRXhwcnMsCiAJCQkJCQkJ CSAgZG91YmxlIGlucHV0X3Jvd3MsIExpc3QgKipwZ3NldCwKIAkJCQkJCQkJICBFc3RpbWF0 aW9uSW5mbyAqZXN0aW5mbyk7CiAKK2V4dGVybiBkb3VibGUgZXN0aW1hdGVfbnVtX2dyb3Vw c19pbmNyZW1lbnRhbChQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqZ3JvdXBFeHBycywKKwkJ CQkJZG91YmxlIGlucHV0X3Jvd3MsIExpc3QgKipwZ3NldCwKKwkJCQkJRXN0aW1hdGlvbklu Zm8gKmVzdGluZm8sCisJCQkJCUxpc3QgKipjYWNoZV92YXJpbmZvcywgaW50IHByZXZORXhw cnMpOworCiBleHRlcm4gdm9pZCBlc3RpbWF0ZV9oYXNoX2J1Y2tldF9zdGF0cyhQbGFubmVy SW5mbyAqcm9vdCwKIAkJCQkJCQkJCSAgIE5vZGUgKmhhc2hrZXksIGRvdWJsZSBuYnVja2V0 cywKIAkJCQkJCQkJCSAgIFNlbGVjdGl2aXR5ICptY3ZfZnJlcSwKZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvYWdncmVnYXRlcy5vdXQgYi9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL2FnZ3JlZ2F0ZXMub3V0CmluZGV4IDBhMjNhMzlhYTI5Li42MDEwNDdm YTNkZCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9hZ2dyZWdhdGVz Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2FnZ3JlZ2F0ZXMub3V0CkBA IC0xMjEwLDcgKzEyMTAsOCBAQCBleHBsYWluIChjb3N0cyBvZmYpCiAgIHNlbGVjdCBkaXN0 aW5jdCBtaW4oZjEpLCBtYXgoZjEpIGZyb20gbWlubWF4dGVzdDsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCi0gVW5pcXVlCisgSGFzaEFnZ3JlZ2F0ZQorICAgR3JvdXAgS2V5OiAk MCwgJDEKICAgIEluaXRQbGFuIDEgKHJldHVybnMgJDApCiAgICAgIC0+ICBMaW1pdAogICAg ICAgICAgICAtPiAgTWVyZ2UgQXBwZW5kCkBAIC0xMjMzLDEwICsxMjM0LDggQEAgZXhwbGFp biAoY29zdHMgb2ZmKQogICAgICAgICAgICAgICAgICAtPiAgSW5kZXggT25seSBTY2FuIHVz aW5nIG1pbm1heHRlc3QyaSBvbiBtaW5tYXh0ZXN0MiBtaW5tYXh0ZXN0XzgKICAgICAgICAg ICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGYxIElTIE5PVCBOVUxMKQogICAgICAgICAg ICAgICAgICAtPiAgSW5kZXggT25seSBTY2FuIEJhY2t3YXJkIHVzaW5nIG1pbm1heHRlc3Qz aSBvbiBtaW5tYXh0ZXN0MyBtaW5tYXh0ZXN0XzkKLSAgIC0+ICBTb3J0Ci0gICAgICAgICBT b3J0IEtleTogKCQwKSwgKCQxKQotICAgICAgICAgLT4gIFJlc3VsdAotKDI2IHJvd3MpCisg ICAtPiAgUmVzdWx0CisoMjUgcm93cykKIAogc2VsZWN0IGRpc3RpbmN0IG1pbihmMSksIG1h eChmMSkgZnJvbSBtaW5tYXh0ZXN0OwogIG1pbiB8IG1heCAKQEAgLTI0NDgsNiArMjQ0Nywy NDEgQEAgU0VMRUNUIGJhbGsoaHVuZHJlZCkgRlJPTSB0ZW5rMTsKICgxIHJvdykKIAogUk9M TEJBQ0s7CistLSBHUk9VUCBCWSBvcHRpbWl6YXRpb24gYnkgcmVvcmRlciBjb2x1bW5zCitT RUxFQ1QKKwlpIEFTIGlkLAorCWkvMiBBUyBwLAorCWZvcm1hdCgnJTYwcycsIGklMikgQVMg diwKKwlpLzQgQVMgYywKKwlpLzggQVMgZCwKKwkocmFuZG9tKCkgKiAoMTAwMDAvOCkpOjpp bnQgYXMgZSAtLXRoZSBzYW1lIGFzIGQgYnV0IG5vIGNvcnJlbGF0aW9uIHdpdGggcAorCUlO VE8gYnRnCitGUk9NCisJZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDAwKSBpOworVkFDVVVNIGJ0 ZzsKK0FOQUxZWkUgYnRnOworLS0gR1JPVVAgQlkgb3B0aW1pemF0aW9uIGJ5IHJlb3JkZXIg Y29sdW1ucyBieSBmcmVxdWVuY3kKK1NFVCBlbmFibGVfaGFzaGFnZz1vZmY7CitTRVQgbWF4 X3BhcmFsbGVsX3dvcmtlcnM9IDA7CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dh dGhlciA9IDA7CitFWFBMQUlOIChDT1NUUyBvZmYpCitTRUxFQ1QgY291bnQoKikgRlJPTSBi dGcgR1JPVVAgQlkgcCwgdjsKKyAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEdyb3VwQWdncmVnYXRlCisgICBHcm91cCBL ZXk6IHAsIHYKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogcCwgdgorICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIGJ0ZworKDUgcm93cykKKworRVhQTEFJTiAoQ09TVFMgb2Zm KQorU0VMRUNUIGNvdW50KCopIEZST00gYnRnIEdST1VQIEJZIHYsIHA7CisgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBH cm91cEFnZ3JlZ2F0ZQorICAgR3JvdXAgS2V5OiBwLCB2CisgICAtPiAgU29ydAorICAgICAg ICAgU29ydCBLZXk6IHAsIHYKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBidGcKKyg1IHJv d3MpCisKK0VYUExBSU4gKENPU1RTIG9mZikKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGJ0ZyBH Uk9VUCBCWSB2LCBwLCBjOworICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgR3JvdXBBZ2dyZWdhdGUKKyAgIEdyb3VwIEtl eTogcCwgYywgdgorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiBwLCBjLCB2Cisg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gYnRnCisoNSByb3dzKQorCitFWFBMQUlOIChDT1NU UyBvZmYpCitTRUxFQ1QgY291bnQoKikgRlJPTSBidGcgR1JPVVAgQlkgdiwgcCwgYyBPUkRF UiBCWSB2LCBwLCBjOworICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgR3JvdXBBZ2dyZWdhdGUKKyAgIEdyb3VwIEtleTog diwgcCwgYworICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiB2LCBwLCBjCisgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gYnRnCisoNSByb3dzKQorCitFWFBMQUlOIChDT1NUUyBv ZmYpCitTRUxFQ1QgY291bnQoKikgRlJPTSBidGcgR1JPVVAgQlkgdiwgcCwgZCwgYzsKKyAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgR3JvdXBBZ2dyZWdhdGUKKyAgIEdyb3VwIEtleTogcCwgZCwgYywgdgorICAg LT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiBwLCBkLCBjLCB2CisgICAgICAgICAtPiAg U2VxIFNjYW4gb24gYnRnCisoNSByb3dzKQorCitFWFBMQUlOIChDT1NUUyBvZmYpCitTRUxF Q1QgY291bnQoKikgRlJPTSBidGcgR1JPVVAgQlkgdiwgcCwgZCwgYyBPUkRFUiBCWSB2LCBw LCBkICxjOworICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBHcm91cEFnZ3JlZ2F0ZQorICAgR3JvdXAgS2V5OiB2LCBw LCBkLCBjCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IHYsIHAsIGQsIGMKKyAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBidGcKKyg1IHJvd3MpCisKK0VYUExBSU4gKENPU1RT IG9mZikKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGJ0ZyBHUk9VUCBCWSB2LCBwLCBkLCBjIE9S REVSIEJZIHAsIHYsIGQgLGM7CisgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEdyb3VwQWdncmVnYXRlCisgICBHcm91 cCBLZXk6IHAsIHYsIGQsIGMKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogcCwg diwgZCwgYworICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGJ0ZworKDUgcm93cykKKworRVhQ TEFJTiAoQ09TVFMgb2ZmKQorU0VMRUNUIGNvdW50KCopIEZST00gYnRnIEdST1VQIEJZIHAs IGQsIGU7CisgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBHcm91cEFnZ3JlZ2F0ZQorICAgR3JvdXAgS2V5OiBwLCBkLCBl CisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IHAsIGQsIGUKKyAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBidGcKKyg1IHJvd3MpCisKK0VYUExBSU4gKENPU1RTIG9mZikKK1NF TEVDVCBjb3VudCgqKSBGUk9NIGJ0ZyBHUk9VUCBCWSBwLCBlLCBkOworICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgR3Jv dXBBZ2dyZWdhdGUKKyAgIEdyb3VwIEtleTogcCwgZSwgZAorICAgLT4gIFNvcnQKKyAgICAg ICAgIFNvcnQgS2V5OiBwLCBlLCBkCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gYnRnCiso NSByb3dzKQorCitDUkVBVEUgU1RBVElTVElDUyBidGdfZGVwIE9OIGQsIGUsIHAgRlJPTSBi dGc7CitBTkFMWVpFIGJ0ZzsKK0VYUExBSU4gKENPU1RTIG9mZikKK1NFTEVDVCBjb3VudCgq KSBGUk9NIGJ0ZyBHUk9VUCBCWSBwLCBkLCBlOworICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgR3JvdXBBZ2dyZWdhdGUK KyAgIEdyb3VwIEtleTogcCwgZCwgZQorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5 OiBwLCBkLCBlCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gYnRnCisoNSByb3dzKQorCitF WFBMQUlOIChDT1NUUyBvZmYpCitTRUxFQ1QgY291bnQoKikgRlJPTSBidGcgR1JPVVAgQlkg cCwgZSwgZDsKKyAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIEdyb3VwQWdncmVnYXRlCisgICBHcm91cCBLZXk6IHAsIGUs IGQKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogcCwgZSwgZAorICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIGJ0ZworKDUgcm93cykKKworLS0gR1JPVVAgQlkgb3B0aW1pemF0 aW9uIGJ5IHJlb3JkZXIgY29sdW1ucyBieSBpbmRleCBzY2FuCitDUkVBVEUgSU5ERVggT04g YnRnKHAsIHYpOworU0VUIGVuYWJsZV9zZXFzY2FuPW9mZjsKK1NFVCBlbmFibGVfYml0bWFw c2Nhbj1vZmY7CitWQUNVVU0gYnRnOworRVhQTEFJTiAoQ09TVFMgb2ZmKQorU0VMRUNUIGNv dW50KCopIEZST00gYnRnIEdST1VQIEJZIHAsIHY7CisgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEdyb3VwQWdncmVnYXRlCisgICBHcm91cCBLZXk6 IHAsIHYKKyAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcgYnRnX3Bfdl9pZHggb24gYnRn CisoMyByb3dzKQorCitFWFBMQUlOIChDT1NUUyBvZmYpCitTRUxFQ1QgY291bnQoKikgRlJP TSBidGcgR1JPVVAgQlkgcCwgdiBPUkRFUiBCWSBwLCB2OworICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBHcm91cEFnZ3JlZ2F0ZQorICAgR3JvdXAg S2V5OiBwLCB2CisgICAtPiAgSW5kZXggT25seSBTY2FuIHVzaW5nIGJ0Z19wX3ZfaWR4IG9u IGJ0ZworKDMgcm93cykKKworRVhQTEFJTiAoQ09TVFMgb2ZmKQorU0VMRUNUIGNvdW50KCop IEZST00gYnRnIEdST1VQIEJZIHYsIHA7CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIEdyb3VwQWdncmVnYXRlCisgICBHcm91cCBLZXk6IHAsIHYK KyAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcgYnRnX3Bfdl9pZHggb24gYnRnCisoMyBy b3dzKQorCitFWFBMQUlOIChDT1NUUyBvZmYpCitTRUxFQ1QgY291bnQoKikgRlJPTSBidGcg R1JPVVAgQlkgdiwgcCBPUkRFUiBCWSBwLCB2OworICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBHcm91cEFnZ3JlZ2F0ZQorICAgR3JvdXAgS2V5OiBw LCB2CisgICAtPiAgSW5kZXggT25seSBTY2FuIHVzaW5nIGJ0Z19wX3ZfaWR4IG9uIGJ0Zwor KDMgcm93cykKKworRVhQTEFJTiAoQ09TVFMgb2ZmKQorU0VMRUNUIGNvdW50KCopIEZST00g YnRnIEdST1VQIEJZIHYsIHAsIGM7CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgR3JvdXBBZ2dyZWdhdGUKKyAgIEdyb3VwIEtleTogcCwgYywg dgorICAgLT4gIEluY3JlbWVudGFsIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiBwLCBjLCB2 CisgICAgICAgICBQcmVzb3J0ZWQgS2V5OiBwCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1 c2luZyBidGdfcF92X2lkeCBvbiBidGcKKyg2IHJvd3MpCisKK0VYUExBSU4gKENPU1RTIG9m ZikKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGJ0ZyBHUk9VUCBCWSB2LCBwLCBjIE9SREVSIEJZ IHAsIHY7CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgR3JvdXBBZ2dyZWdhdGUKKyAgIEdyb3VwIEtleTogcCwgdiwgYworICAgLT4gIEluY3Jl bWVudGFsIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiBwLCB2LCBjCisgICAgICAgICBQcmVz b3J0ZWQgS2V5OiBwLCB2CisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBidGdfcF92 X2lkeCBvbiBidGcKKyg2IHJvd3MpCisKK0VYUExBSU4gKENPU1RTIG9mZikKK1NFTEVDVCBj b3VudCgqKSBGUk9NIGJ0ZyBHUk9VUCBCWSB2LCBjLCBwLCBkOworICAgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEdyb3VwQWdncmVnYXRlCisgICBH cm91cCBLZXk6IHAsIGMsIGQsIHYKKyAgIC0+ICBJbmNyZW1lbnRhbCBTb3J0CisgICAgICAg ICBTb3J0IEtleTogcCwgYywgZCwgdgorICAgICAgICAgUHJlc29ydGVkIEtleTogcAorICAg ICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgYnRnX3Bfdl9pZHggb24gYnRnCisoNiByb3dz KQorCitFWFBMQUlOIChDT1NUUyBvZmYpCitTRUxFQ1QgY291bnQoKikgRlJPTSBidGcgR1JP VVAgQlkgdiwgYywgcCwgZCBPUkRFUiBCWSBwLCB2OworICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEdyb3VwQWdncmVnYXRlCisgICBHcm91cCBL ZXk6IHAsIHYsIGMsIGQKKyAgIC0+ICBJbmNyZW1lbnRhbCBTb3J0CisgICAgICAgICBTb3J0 IEtleTogcCwgdiwgYywgZAorICAgICAgICAgUHJlc29ydGVkIEtleTogcCwgdgorICAgICAg ICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgYnRnX3Bfdl9pZHggb24gYnRnCisoNiByb3dzKQor CitEUk9QIFRBQkxFIGJ0ZzsKK1JFU0VUIGVuYWJsZV9oYXNoYWdnOworUkVTRVQgbWF4X3Bh cmFsbGVsX3dvcmtlcnM7CitSRVNFVCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVy OworUkVTRVQgZW5hYmxlX3NlcXNjYW47CitSRVNFVCBlbmFibGVfYml0bWFwc2NhbjsKIC0t IFNlY29uZGx5IHRlc3QgdGhlIGNhc2Ugb2YgYSBwYXJhbGxlbCBhZ2dyZWdhdGUgY29tYmlu ZXIgZnVuY3Rpb24KIC0tIHJldHVybmluZyBOVUxMLiBGb3IgdGhhdCB1c2Ugbm9ybWFsIHRy YW5zaXRpb24gZnVuY3Rpb24sIGJ1dCBhCiAtLSBjb21iaW5lciBmdW5jdGlvbiByZXR1cm5p bmcgTlVMTC4KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZ3VjLm91 dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZ3VjLm91dAppbmRleCAzZGU2NDA0YmE1 Yi4uOThhMTZjMTE4ZjIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv Z3VjLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2d1Yy5vdXQKQEAgLTg1 OCwxMCArODU4LDEzIEBAIFNFTEVDVCBuYW1lIEZST00gdGFiX3NldHRpbmdzX2ZsYWdzCiBT RUxFQ1QgbmFtZSBGUk9NIHRhYl9zZXR0aW5nc19mbGFncwogICBXSEVSRSBjYXRlZ29yeSB+ ICdeUXVlcnkgVHVuaW5nJyBBTkQgTk9UIGV4cGxhaW4KICAgT1JERVIgQlkgMTsKLSAgICAg ICAgICAgbmFtZSAgICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg ICAgICAgICAgICAgICAgIG5hbWUgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBkZWJ1Z19lbmFibGVfY2hlYXBlc3RfZ3JvdXBf YnkKKyBkZWJ1Z19lbmFibGVfZ3JvdXBfYnlfbWF0Y2hfb3JkZXJfYnkKKyBkZWJ1Z19ncm91 cF9ieV9yZW9yZGVyX2J5X3BhdGhrZXlzCiAgZGVmYXVsdF9zdGF0aXN0aWNzX3RhcmdldAot KDEgcm93KQorKDQgcm93cykKIAogLS0gUnVudGltZS1jb21wdXRlZCBHVUNzIHNob3VsZCBi ZSBwYXJ0IG9mIHRoZSBwcmVzZXQgY2F0ZWdvcnkuCiBTRUxFQ1QgbmFtZSBGUk9NIHRhYl9z ZXR0aW5nc19mbGFncwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9p bmNyZW1lbnRhbF9zb3J0Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaW5jcmVt ZW50YWxfc29ydC5vdXQKaW5kZXggNTQ1ZTMwMWU0ODIuLjIxYzQyOTIyNmY3IDEwMDY0NAot LS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2luY3JlbWVudGFsX3NvcnQub3V0Cisr KyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaW5jcmVtZW50YWxfc29ydC5vdXQKQEAg LTE0MzksNyArMTQzOSw3IEBAIHNldCBwYXJhbGxlbF9zZXR1cF9jb3N0ID0gMDsKIHNldCBw YXJhbGxlbF90dXBsZV9jb3N0ID0gMDsKIHNldCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJf Z2F0aGVyID0gMjsKIGNyZWF0ZSB0YWJsZSB0IChhIGludCwgYiBpbnQsIGMgaW50KTsKLWlu c2VydCBpbnRvIHQgc2VsZWN0IG1vZChpLDEwKSxtb2QoaSwxMCksaSBmcm9tIGdlbmVyYXRl X3NlcmllcygxLDEwMDAwKSBzKGkpOworaW5zZXJ0IGludG8gdCBzZWxlY3QgbW9kKGksMTAp LG1vZChpLDEwKSxpIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsNjAwMDApIHMoaSk7CiBjcmVh dGUgaW5kZXggb24gdCAoYSk7CiBhbmFseXplIHQ7CiBzZXQgZW5hYmxlX2luY3JlbWVudGFs X3NvcnQgPSBvZmY7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pv aW4ub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qb2luLm91dAppbmRleCAxOWNh ZWJhYmQwMS4uYmYxYTJkYjJjZjAgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvam9pbi5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qb2luLm91 dApAQCAtMTk4NCw4ICsxOTg0LDggQEAgVVNJTkcgKG5hbWUpOwogLS0tLS0tKy0tLS0rLS0t LQogIGJiICAgfCAxMiB8IDEzCiAgY2MgICB8IDIyIHwgMjMKLSBkZCAgIHwgICAgfCAzMwog IGVlICAgfCA0MiB8ICAgCisgZGQgICB8ICAgIHwgMzMKICg0IHJvd3MpCiAKIC0tIENhc2Vz IHdpdGggbm9uLW51bGxhYmxlIGV4cHJlc3Npb25zIGluIHN1YnF1ZXJ5IHJlc3VsdHM7CkBA IC0yMDE5LDggKzIwMTksOCBAQCBOQVRVUkFMIEZVTEwgSk9JTgogLS0tLS0tKy0tLS0tLSst LS0tLS0rLS0tLS0tKy0tLS0tLQogIGJiICAgfCAgIDEyIHwgICAgMiB8ICAgMTMgfCAgICAz CiAgY2MgICB8ICAgMjIgfCAgICAyIHwgICAyMyB8ICAgIDMKLSBkZCAgIHwgICAgICB8ICAg ICAgfCAgIDMzIHwgICAgMwogIGVlICAgfCAgIDQyIHwgICAgMiB8ICAgICAgfCAgICAgCisg ZGQgICB8ICAgICAgfCAgICAgIHwgICAzMyB8ICAgIDMKICg0IHJvd3MpCiAKIFNFTEVDVCAq IEZST00KQEAgLTQ2MTgsMTggKzQ2MTgsMjAgQEAgc2VsZWN0IGQuKiBmcm9tIGQgbGVmdCBq b2luIChzZWxlY3QgKiBmcm9tIGIgZ3JvdXAgYnkgYi5pZCwgYi5jX2lkKSBzCiBleHBsYWlu IChjb3N0cyBvZmYpCiBzZWxlY3QgZC4qIGZyb20gZCBsZWZ0IGpvaW4gKHNlbGVjdCBkaXN0 aW5jdCAqIGZyb20gYikgcwogICBvbiBkLmEgPSBzLmlkOwotICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCi0gTWVyZ2UgUmlnaHQgSm9pbgotICAgTWVyZ2UgQ29uZDogKGIuaWQgPSBkLmEp Ci0gICAtPiAgVW5pcXVlCi0gICAgICAgICAtPiAgU29ydAotICAgICAgICAgICAgICAgU29y dCBLZXk6IGIuaWQsIGIuY19pZAotICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGIK KyAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgTGVmdCBK b2luCisgICBNZXJnZSBDb25kOiAoZC5hID0gcy5pZCkKICAgIC0+ICBTb3J0CiAgICAgICAg ICBTb3J0IEtleTogZC5hCiAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gZAotKDkgcm93cykK KyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogcy5pZAorICAgICAgICAgLT4gIFN1 YnF1ZXJ5IFNjYW4gb24gcworICAgICAgICAgICAgICAgLT4gIEhhc2hBZ2dyZWdhdGUKKyAg ICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogYi5pZCwgYi5jX2lkCisgICAgICAgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gYgorKDExIHJvd3MpCiAKIC0tIGNoZWNrIGpv aW4gcmVtb3ZhbCB3b3JrcyB3aGVuIHVuaXF1ZW5lc3Mgb2YgdGhlIGpvaW4gY29uZGl0aW9u IGlzIGVuZm9yY2VkCiAtLSBieSBhIFVOSU9OCkBAIC02MzM2LDQ0ICs2MzM4LDM5IEBAIHNl bGVjdCAqIGZyb20gajEgbmF0dXJhbCBqb2luIGoyOwogZXhwbGFpbiAodmVyYm9zZSwgY29z dHMgb2ZmKQogc2VsZWN0ICogZnJvbSBqMQogaW5uZXIgam9pbiAoc2VsZWN0IGRpc3RpbmN0 IGlkIGZyb20gajMpIGozIG9uIGoxLmlkID0gajMuaWQ7Ci0gICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIE5lc3RlZCBMb29wCiAgICBPdXRw dXQ6IGoxLmlkLCBqMy5pZAogICAgSW5uZXIgVW5pcXVlOiB0cnVlCiAgICBKb2luIEZpbHRl cjogKGoxLmlkID0gajMuaWQpCi0gICAtPiAgVW5pcXVlCisgICAtPiAgSGFzaEFnZ3JlZ2F0 ZQogICAgICAgICAgT3V0cHV0OiBqMy5pZAotICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAg IEdyb3VwIEtleTogajMuaWQKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuajMK ICAgICAgICAgICAgICAgIE91dHB1dDogajMuaWQKLSAgICAgICAgICAgICAgIFNvcnQgS2V5 OiBqMy5pZAotICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5qMwotICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiBqMy5pZAogICAgLT4gIFNlcSBTY2FuIG9uIHB1 YmxpYy5qMQogICAgICAgICAgT3V0cHV0OiBqMS5pZAotKDEzIHJvd3MpCisoMTEgcm93cykK IAogLS0gZW5zdXJlIGdyb3VwIGJ5IGNsYXVzZSBhbGxvd3MgdGhlIGlubmVyIHRvIGJlY29t ZSB1bmlxdWUKIGV4cGxhaW4gKHZlcmJvc2UsIGNvc3RzIG9mZikKIHNlbGVjdCAqIGZyb20g ajEKIGlubmVyIGpvaW4gKHNlbGVjdCBpZCBmcm9tIGozIGdyb3VwIGJ5IGlkKSBqMyBvbiBq MS5pZCA9IGozLmlkOwotICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KICBOZXN0ZWQgTG9vcAogICAgT3V0cHV0OiBqMS5pZCwgajMuaWQKICAg IElubmVyIFVuaXF1ZTogdHJ1ZQogICAgSm9pbiBGaWx0ZXI6IChqMS5pZCA9IGozLmlkKQot ICAgLT4gIEdyb3VwCisgICAtPiAgSGFzaEFnZ3JlZ2F0ZQogICAgICAgICAgT3V0cHV0OiBq My5pZAogICAgICAgICAgR3JvdXAgS2V5OiBqMy5pZAotICAgICAgICAgLT4gIFNvcnQKKyAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuajMKICAgICAgICAgICAgICAgIE91dHB1 dDogajMuaWQKLSAgICAgICAgICAgICAgIFNvcnQgS2V5OiBqMy5pZAotICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5qMwotICAgICAgICAgICAgICAgICAgICAgT3V0 cHV0OiBqMy5pZAogICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5qMQogICAgICAgICAgT3V0 cHV0OiBqMS5pZAotKDE0IHJvd3MpCisoMTEgcm93cykKIAogZHJvcCB0YWJsZSBqMTsKIGRy b3AgdGFibGUgajI7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3Bh cnRpdGlvbl9hZ2dyZWdhdGUub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0 aXRpb25fYWdncmVnYXRlLm91dAppbmRleCBkZmE0YjAzNmI1Mi4uYTA4YTM4MjVmZjYgMTAw NjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0aW9uX2FnZ3JlZ2F0 ZS5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0aXRpb25fYWdncmVn YXRlLm91dApAQCAtOTUyLDMyICs5NTIsMzAgQEAgU0VMRUNUIGEsIHN1bShiKSwgYXJyYXlf YWdnKGRpc3RpbmN0IGMpLCBjb3VudCgqKSBGUk9NIHBhZ2dfdGFiX21sIEdST1VQIEJZIGEg SEEKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgU29ydAogICAgU29ydCBL ZXk6IHBhZ2dfdGFiX21sLmEsIChzdW0ocGFnZ190YWJfbWwuYikpLCAoYXJyYXlfYWdnKERJ U1RJTkNUIHBhZ2dfdGFiX21sLmMpKQotICAgLT4gIEdhdGhlcgotICAgICAgICAgV29ya2Vy cyBQbGFubmVkOiAyCi0gICAgICAgICAtPiAgUGFyYWxsZWwgQXBwZW5kCi0gICAgICAgICAg ICAgICAtPiAgR3JvdXBBZ2dyZWdhdGUKLSAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtl eTogcGFnZ190YWJfbWwuYQotICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAoYXZnKHBh Z2dfdGFiX21sLmIpIDwgJzMnOjpudW1lcmljKQotICAgICAgICAgICAgICAgICAgICAgLT4g IFNvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiBwYWdnX3RhYl9t bC5hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcGFnZ190 YWJfbWxfcDEgcGFnZ190YWJfbWwKLSAgICAgICAgICAgICAgIC0+ICBHcm91cEFnZ3JlZ2F0 ZQotICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiBwYWdnX3RhYl9tbF81LmEKLSAg ICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKGF2ZyhwYWdnX3RhYl9tbF81LmIpIDwgJzMn OjpudW1lcmljKQotICAgICAgICAgICAgICAgICAgICAgLT4gIFNvcnQKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgIFNvcnQgS2V5OiBwYWdnX3RhYl9tbF81LmEKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgIC0+ICBBcHBlbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwYWdnX3RhYl9tbF9wM19zMSBwYWdnX3RhYl9tbF81 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcGFn Z190YWJfbWxfcDNfczIgcGFnZ190YWJfbWxfNgotICAgICAgICAgICAgICAgLT4gIEdyb3Vw QWdncmVnYXRlCi0gICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHBhZ2dfdGFiX21s XzIuYQotICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAoYXZnKHBhZ2dfdGFiX21sXzIu YikgPCAnMyc6Om51bWVyaWMpCi0gICAgICAgICAgICAgICAgICAgICAtPiAgU29ydAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6IHBhZ2dfdGFiX21sXzIuYQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEFwcGVuZAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHBhZ2dfdGFiX21sX3AyX3MxIHBhZ2df dGFiX21sXzIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBwYWdnX3RhYl9tbF9wMl9zMiBwYWdnX3RhYl9tbF8zCi0oMjcgcm93cykKKyAgIC0+ ICBBcHBlbmQKKyAgICAgICAgIC0+ICBHcm91cEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAg R3JvdXAgS2V5OiBwYWdnX3RhYl9tbC5hCisgICAgICAgICAgICAgICBGaWx0ZXI6IChhdmco cGFnZ190YWJfbWwuYikgPCAnMyc6Om51bWVyaWMpCisgICAgICAgICAgICAgICAtPiAgU29y dAorICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6IHBhZ2dfdGFiX21sLmEKKyAgICAg ICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwYWdnX3RhYl9tbF9wMSBwYWdnX3Rh Yl9tbAorICAgICAgICAgLT4gIEdyb3VwQWdncmVnYXRlCisgICAgICAgICAgICAgICBHcm91 cCBLZXk6IHBhZ2dfdGFiX21sXzIuYQorICAgICAgICAgICAgICAgRmlsdGVyOiAoYXZnKHBh Z2dfdGFiX21sXzIuYikgPCAnMyc6Om51bWVyaWMpCisgICAgICAgICAgICAgICAtPiAgU29y dAorICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6IHBhZ2dfdGFiX21sXzIuYQorICAg ICAgICAgICAgICAgICAgICAgLT4gIEFwcGVuZAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHBhZ2dfdGFiX21sX3AyX3MxIHBhZ2dfdGFiX21sXzIKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwYWdnX3RhYl9tbF9w Ml9zMiBwYWdnX3RhYl9tbF8zCisgICAgICAgICAtPiAgR3JvdXBBZ2dyZWdhdGUKKyAgICAg ICAgICAgICAgIEdyb3VwIEtleTogcGFnZ190YWJfbWxfNS5hCisgICAgICAgICAgICAgICBG aWx0ZXI6IChhdmcocGFnZ190YWJfbWxfNS5iKSA8ICczJzo6bnVtZXJpYykKKyAgICAgICAg ICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICAgICAgICBTb3J0IEtleTogcGFnZ190 YWJfbWxfNS5hCisgICAgICAgICAgICAgICAgICAgICAtPiAgQXBwZW5kCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcGFnZ190YWJfbWxfcDNfczEgcGFn Z190YWJfbWxfNQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IHBhZ2dfdGFiX21sX3AzX3MyIHBhZ2dfdGFiX21sXzYKKygyNSByb3dzKQogCiBTRUxFQ1Qg YSwgc3VtKGIpLCBhcnJheV9hZ2coZGlzdGluY3QgYyksIGNvdW50KCopIEZST00gcGFnZ190 YWJfbWwgR1JPVVAgQlkgYSBIQVZJTkcgYXZnKGIpIDwgMyBPUkRFUiBCWSAxLCAyLCAzOwog IGEgIHwgc3VtICB8ICBhcnJheV9hZ2cgIHwgY291bnQgCkBAIC05OTYsMzQgKzk5NCwzMiBA QCBTRUxFQ1QgYSwgc3VtKGIpLCBhcnJheV9hZ2coZGlzdGluY3QgYyksIGNvdW50KCopIEZS T00gcGFnZ190YWJfbWwgR1JPVVAgQlkgYSBIQQogLS0gV2l0aG91dCBPUkRFUiBCWSBjbGF1 c2UsIHRvIHRlc3QgR2F0aGVyIGF0IHRvcC1tb3N0IHBhdGgKIEVYUExBSU4gKENPU1RTIE9G RikKIFNFTEVDVCBhLCBzdW0oYiksIGFycmF5X2FnZyhkaXN0aW5jdCBjKSwgY291bnQoKikg RlJPTSBwYWdnX3RhYl9tbCBHUk9VUCBCWSBhIEhBVklORyBhdmcoYikgPCAzOwotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBHYXRoZXIKLSAgIFdv cmtlcnMgUGxhbm5lZDogMgotICAgLT4gIFBhcmFsbGVsIEFwcGVuZAotICAgICAgICAgLT4g IEdyb3VwQWdncmVnYXRlCi0gICAgICAgICAgICAgICBHcm91cCBLZXk6IHBhZ2dfdGFiX21s LmEKLSAgICAgICAgICAgICAgIEZpbHRlcjogKGF2ZyhwYWdnX3RhYl9tbC5iKSA8ICczJzo6 bnVtZXJpYykKLSAgICAgICAgICAgICAgIC0+ICBTb3J0Ci0gICAgICAgICAgICAgICAgICAg ICBTb3J0IEtleTogcGFnZ190YWJfbWwuYQotICAgICAgICAgICAgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIHBhZ2dfdGFiX21sX3AxIHBhZ2dfdGFiX21sCi0gICAgICAgICAtPiAgR3Jv dXBBZ2dyZWdhdGUKLSAgICAgICAgICAgICAgIEdyb3VwIEtleTogcGFnZ190YWJfbWxfNS5h Ci0gICAgICAgICAgICAgICBGaWx0ZXI6IChhdmcocGFnZ190YWJfbWxfNS5iKSA8ICczJzo6 bnVtZXJpYykKLSAgICAgICAgICAgICAgIC0+ICBTb3J0Ci0gICAgICAgICAgICAgICAgICAg ICBTb3J0IEtleTogcGFnZ190YWJfbWxfNS5hCi0gICAgICAgICAgICAgICAgICAgICAtPiAg QXBwZW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcGFn Z190YWJfbWxfcDNfczEgcGFnZ190YWJfbWxfNQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHBhZ2dfdGFiX21sX3AzX3MyIHBhZ2dfdGFiX21sXzYKLSAg ICAgICAgIC0+ICBHcm91cEFnZ3JlZ2F0ZQotICAgICAgICAgICAgICAgR3JvdXAgS2V5OiBw YWdnX3RhYl9tbF8yLmEKLSAgICAgICAgICAgICAgIEZpbHRlcjogKGF2ZyhwYWdnX3RhYl9t bF8yLmIpIDwgJzMnOjpudW1lcmljKQotICAgICAgICAgICAgICAgLT4gIFNvcnQKLSAgICAg ICAgICAgICAgICAgICAgIFNvcnQgS2V5OiBwYWdnX3RhYl9tbF8yLmEKLSAgICAgICAgICAg ICAgICAgICAgIC0+ICBBcHBlbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBwYWdnX3RhYl9tbF9wMl9zMSBwYWdnX3RhYl9tbF8yCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcGFnZ190YWJfbWxfcDJfczIgcGFn Z190YWJfbWxfMwotKDI1IHJvd3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIEFwcGVuZAorICAgLT4gIEdyb3VwQWdncmVnYXRlCisgICAgICAgICBHcm91cCBLZXk6 IHBhZ2dfdGFiX21sLmEKKyAgICAgICAgIEZpbHRlcjogKGF2ZyhwYWdnX3RhYl9tbC5iKSA8 ICczJzo6bnVtZXJpYykKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0 IEtleTogcGFnZ190YWJfbWwuYQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHBh Z2dfdGFiX21sX3AxIHBhZ2dfdGFiX21sCisgICAtPiAgR3JvdXBBZ2dyZWdhdGUKKyAgICAg ICAgIEdyb3VwIEtleTogcGFnZ190YWJfbWxfMi5hCisgICAgICAgICBGaWx0ZXI6IChhdmco cGFnZ190YWJfbWxfMi5iKSA8ICczJzo6bnVtZXJpYykKKyAgICAgICAgIC0+ICBTb3J0Cisg ICAgICAgICAgICAgICBTb3J0IEtleTogcGFnZ190YWJfbWxfMi5hCisgICAgICAgICAgICAg ICAtPiAgQXBwZW5kCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcGFn Z190YWJfbWxfcDJfczEgcGFnZ190YWJfbWxfMgorICAgICAgICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHBhZ2dfdGFiX21sX3AyX3MyIHBhZ2dfdGFiX21sXzMKKyAgIC0+ICBH cm91cEFnZ3JlZ2F0ZQorICAgICAgICAgR3JvdXAgS2V5OiBwYWdnX3RhYl9tbF81LmEKKyAg ICAgICAgIEZpbHRlcjogKGF2ZyhwYWdnX3RhYl9tbF81LmIpIDwgJzMnOjpudW1lcmljKQor ICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgIFNvcnQgS2V5OiBwYWdnX3RhYl9t bF81LmEKKyAgICAgICAgICAgICAgIC0+ICBBcHBlbmQKKyAgICAgICAgICAgICAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBwYWdnX3RhYl9tbF9wM19zMSBwYWdnX3RhYl9tbF81CisgICAg ICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcGFnZ190YWJfbWxfcDNfczIgcGFn Z190YWJfbWxfNgorKDIzIHJvd3MpCiAKIC0tIEZ1bGwgYWdncmVnYXRpb24gYXQgbGV2ZWwg MSBhcyBHUk9VUCBCWSBjbGF1c2UgbWF0Y2hlcyB3aXRoIFBBUlRJVElPTiBLRVkKIC0tIGZv ciBsZXZlbCAxIG9ubHkuIEZvciBzdWJwYXJ0aXRpb25zLCBHUk9VUCBCWSBjbGF1c2UgZG9l cyBub3QgbWF0Y2ggd2l0aApAQCAtMTM3OSwyOCArMTM3NSwyNiBAQCBTRUxFQ1QgeCwgc3Vt KHkpLCBhdmcoeSksIGNvdW50KCopIEZST00gcGFnZ190YWJfcGFyYSBHUk9VUCBCWSB4IEhB VklORyBhdmcoeSkgPAogLS0gV2hlbiBHUk9VUCBCWSBjbGF1c2UgZG9lcyBub3QgbWF0Y2g7 IHBhcnRpYWwgYWdncmVnYXRpb24gaXMgcGVyZm9ybWVkIGZvciBlYWNoIHBhcnRpdGlvbi4K IEVYUExBSU4gKENPU1RTIE9GRikKIFNFTEVDVCB5LCBzdW0oeCksIGF2Zyh4KSwgY291bnQo KikgRlJPTSBwYWdnX3RhYl9wYXJhIEdST1VQIEJZIHkgSEFWSU5HIGF2Zyh4KSA8IDEyIE9S REVSIEJZIDEsIDIsIDM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAg U29ydAogICAgU29ydCBLZXk6IHBhZ2dfdGFiX3BhcmEueSwgKHN1bShwYWdnX3RhYl9wYXJh LngpKSwgKGF2ZyhwYWdnX3RhYl9wYXJhLngpKQotICAgLT4gIEZpbmFsaXplIEdyb3VwQWdn cmVnYXRlCisgICAtPiAgRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQogICAgICAgICAgR3JvdXAg S2V5OiBwYWdnX3RhYl9wYXJhLnkKICAgICAgICAgIEZpbHRlcjogKGF2ZyhwYWdnX3RhYl9w YXJhLngpIDwgJzEyJzo6bnVtZXJpYykKLSAgICAgICAgIC0+ICBHYXRoZXIgTWVyZ2UKKyAg ICAgICAgIC0+ICBHYXRoZXIKICAgICAgICAgICAgICAgIFdvcmtlcnMgUGxhbm5lZDogMgot ICAgICAgICAgICAgICAgLT4gIFNvcnQKLSAgICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5 OiBwYWdnX3RhYl9wYXJhLnkKLSAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBB cHBlbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dy ZWdhdGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogcGFn Z190YWJfcGFyYS55Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFy YWxsZWwgU2VxIFNjYW4gb24gcGFnZ190YWJfcGFyYV9wMSBwYWdnX3RhYl9wYXJhCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHBhZ2dfdGFiX3BhcmFf MS55Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2Vx IFNjYW4gb24gcGFnZ190YWJfcGFyYV9wMiBwYWdnX3RhYl9wYXJhXzEKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogcGFnZ190YWJfcGFyYV8yLnkKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBv biBwYWdnX3RhYl9wYXJhX3AzIHBhZ2dfdGFiX3BhcmFfMgotKDE5IHJvd3MpCisgICAgICAg ICAgICAgICAtPiAgUGFyYWxsZWwgQXBwZW5kCisgICAgICAgICAgICAgICAgICAgICAtPiAg UGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91 cCBLZXk6IHBhZ2dfdGFiX3BhcmEueQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4g IFBhcmFsbGVsIFNlcSBTY2FuIG9uIHBhZ2dfdGFiX3BhcmFfcDEgcGFnZ190YWJfcGFyYQor ICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiBwYWdnX3RhYl9wYXJhXzEueQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIHBhZ2df dGFiX3BhcmFfcDIgcGFnZ190YWJfcGFyYV8xCisgICAgICAgICAgICAgICAgICAgICAtPiAg UGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91 cCBLZXk6IHBhZ2dfdGFiX3BhcmFfMi55CisgICAgICAgICAgICAgICAgICAgICAgICAgICAt PiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gcGFnZ190YWJfcGFyYV9wMyBwYWdnX3RhYl9wYXJh XzIKKygxNyByb3dzKQogCiBTRUxFQ1QgeSwgc3VtKHgpLCBhdmcoeCksIGNvdW50KCopIEZS T00gcGFnZ190YWJfcGFyYSBHUk9VUCBCWSB5IEhBVklORyBhdmcoeCkgPCAxMiBPUkRFUiBC WSAxLCAyLCAzOwogIHkgIHwgIHN1bSAgfCAgICAgICAgIGF2ZyAgICAgICAgIHwgY291bnQg CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9qb2lu Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0aW9uX2pvaW4ub3V0Cmlu ZGV4IGJiNWI3YzQ3YTQ1Li4wMzkyNmE4NDEzOCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9wYXJ0aXRpb25fam9pbi5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9wYXJ0aXRpb25fam9pbi5vdXQKQEAgLTQ2Niw1MiArNDY2LDQxIEBAIEVY UExBSU4gKENPU1RTIE9GRikKIFNFTEVDVCBhLCBiIEZST00gcHJ0MSBGVUxMIEpPSU4gcHJ0 MiBwMihiLGEsYykgVVNJTkcoYSxiKQogICBXSEVSRSBhIEJFVFdFRU4gNDkwIEFORCA1MTAK ICAgR1JPVVAgQlkgMSwgMiBPUkRFUiBCWSAxLCAyOwotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBHcm91 cAogICAgR3JvdXAgS2V5OiAoQ09BTEVTQ0UocHJ0MS5hLCBwMi5hKSksIChDT0FMRVNDRShw cnQxLmIsIHAyLmIpKQotICAgLT4gIE1lcmdlIEFwcGVuZAorICAgLT4gIFNvcnQKICAgICAg ICAgIFNvcnQgS2V5OiAoQ09BTEVTQ0UocHJ0MS5hLCBwMi5hKSksIChDT0FMRVNDRShwcnQx LmIsIHAyLmIpKQotICAgICAgICAgLT4gIEdyb3VwCi0gICAgICAgICAgICAgICBHcm91cCBL ZXk6IChDT0FMRVNDRShwcnQxLmEsIHAyLmEpKSwgKENPQUxFU0NFKHBydDEuYiwgcDIuYikp Ci0gICAgICAgICAgICAgICAtPiAgU29ydAotICAgICAgICAgICAgICAgICAgICAgU29ydCBL ZXk6IChDT0FMRVNDRShwcnQxLmEsIHAyLmEpKSwgKENPQUxFU0NFKHBydDEuYiwgcDIuYikp Ci0gICAgICAgICAgICAgICAgICAgICAtPiAgTWVyZ2UgRnVsbCBKb2luCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICBNZXJnZSBDb25kOiAoKHBydDEuYSA9IHAyLmEpIEFORCAocHJ0 MS5iID0gcDIuYikpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICgoQ09B TEVTQ0UocHJ0MS5hLCBwMi5hKSA+PSA0OTApIEFORCAoQ09BTEVTQ0UocHJ0MS5hLCBwMi5h KSA8PSA1MTApKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNvcnQKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiBwcnQxLmEsIHBydDEuYgot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHBydDFf cDEgcHJ0MQotICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNvcnQKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiBwMi5hLCBwMi5iCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHJ0Ml9wMSBwMgot ICAgICAgICAgLT4gIEdyb3VwCi0gICAgICAgICAgICAgICBHcm91cCBLZXk6IChDT0FMRVND RShwcnQxXzEuYSwgcDJfMS5hKSksIChDT0FMRVNDRShwcnQxXzEuYiwgcDJfMS5iKSkKLSAg ICAgICAgICAgICAgIC0+ICBTb3J0Ci0gICAgICAgICAgICAgICAgICAgICBTb3J0IEtleTog KENPQUxFU0NFKHBydDFfMS5hLCBwMl8xLmEpKSwgKENPQUxFU0NFKHBydDFfMS5iLCBwMl8x LmIpKQotICAgICAgICAgICAgICAgICAgICAgLT4gIE1lcmdlIEZ1bGwgSm9pbgotICAgICAg ICAgICAgICAgICAgICAgICAgICAgTWVyZ2UgQ29uZDogKChwcnQxXzEuYSA9IHAyXzEuYSkg QU5EIChwcnQxXzEuYiA9IHAyXzEuYikpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBG aWx0ZXI6ICgoQ09BTEVTQ0UocHJ0MV8xLmEsIHAyXzEuYSkgPj0gNDkwKSBBTkQgKENPQUxF U0NFKHBydDFfMS5hLCBwMl8xLmEpIDw9IDUxMCkpCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAtPiAgU29ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29ydCBL ZXk6IHBydDFfMS5hLCBwcnQxXzEuYgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHBydDFfcDIgcHJ0MV8xCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAtPiAgU29ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29y dCBLZXk6IHAyXzEuYSwgcDJfMS5iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gcHJ0Ml9wMiBwMl8xCi0gICAgICAgICAtPiAgR3JvdXAKLSAg ICAgICAgICAgICAgIEdyb3VwIEtleTogKENPQUxFU0NFKHBydDFfMi5hLCBwMl8yLmEpKSwg KENPQUxFU0NFKHBydDFfMi5iLCBwMl8yLmIpKQotICAgICAgICAgICAgICAgLT4gIFNvcnQK LSAgICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiAoQ09BTEVTQ0UocHJ0MV8yLmEsIHAy XzIuYSkpLCAoQ09BTEVTQ0UocHJ0MV8yLmIsIHAyXzIuYikpCi0gICAgICAgICAgICAgICAg ICAgICAtPiAgTWVyZ2UgRnVsbCBKb2luCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBN ZXJnZSBDb25kOiAoKHBydDFfMi5hID0gcDJfMi5hKSBBTkQgKHBydDFfMi5iID0gcDJfMi5i KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKChDT0FMRVNDRShwcnQx XzIuYSwgcDJfMi5hKSA+PSA0OTApIEFORCAoQ09BTEVTQ0UocHJ0MV8yLmEsIHAyXzIuYSkg PD0gNTEwKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTb3J0Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBTb3J0IEtleTogcHJ0MV8yLmEsIHBydDFfMi5i Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHJ0 MV9wMyBwcnQxXzIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTb3J0Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3J0IEtleTogcDJfMi5hLCBwMl8yLmIK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwcnQy X3AzIHAyXzIKLSg0MyByb3dzKQorICAgICAgICAgLT4gIEFwcGVuZAorICAgICAgICAgICAg ICAgLT4gIE1lcmdlIEZ1bGwgSm9pbgorICAgICAgICAgICAgICAgICAgICAgTWVyZ2UgQ29u ZDogKChwcnQxXzEuYSA9IHAyXzEuYSkgQU5EIChwcnQxXzEuYiA9IHAyXzEuYikpCisgICAg ICAgICAgICAgICAgICAgICBGaWx0ZXI6ICgoQ09BTEVTQ0UocHJ0MV8xLmEsIHAyXzEuYSkg Pj0gNDkwKSBBTkQgKENPQUxFU0NFKHBydDFfMS5hLCBwMl8xLmEpIDw9IDUxMCkpCisgICAg ICAgICAgICAgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAg U29ydCBLZXk6IHBydDFfMS5hLCBwcnQxXzEuYgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHBydDFfcDEgcHJ0MV8xCisgICAgICAgICAgICAgICAgICAg ICAtPiAgU29ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6IHAyXzEu YSwgcDJfMS5iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24g cHJ0Ml9wMSBwMl8xCisgICAgICAgICAgICAgICAtPiAgTWVyZ2UgRnVsbCBKb2luCisgICAg ICAgICAgICAgICAgICAgICBNZXJnZSBDb25kOiAoKHBydDFfMi5hID0gcDJfMi5hKSBBTkQg KHBydDFfMi5iID0gcDJfMi5iKSkKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKChD T0FMRVNDRShwcnQxXzIuYSwgcDJfMi5hKSA+PSA0OTApIEFORCAoQ09BTEVTQ0UocHJ0MV8y LmEsIHAyXzIuYSkgPD0gNTEwKSkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTb3J0Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICBTb3J0IEtleTogcHJ0MV8yLmEsIHBydDFfMi5i CisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHJ0MV9wMiBw cnQxXzIKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICAg ICAgICAgICAgICBTb3J0IEtleTogcDJfMi5hLCBwMl8yLmIKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwcnQyX3AyIHAyXzIKKyAgICAgICAgICAgICAg IC0+ICBNZXJnZSBGdWxsIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIE1lcmdlIENvbmQ6 ICgocHJ0MV8zLmIgPSBwMl8zLmIpIEFORCAocHJ0MV8zLmEgPSBwMl8zLmEpKQorICAgICAg ICAgICAgICAgICAgICAgRmlsdGVyOiAoKENPQUxFU0NFKHBydDFfMy5hLCBwMl8zLmEpID49 IDQ5MCkgQU5EIChDT0FMRVNDRShwcnQxXzMuYSwgcDJfMy5hKSA8PSA1MTApKQorICAgICAg ICAgICAgICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNv cnQgS2V5OiBwcnQxXzMuYiwgcHJ0MV8zLmEKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBwcnQxX3AzIHBydDFfMworICAgICAgICAgICAgICAgICAgICAg LT4gIFNvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiBwMl8zLmIs IHAyXzMuYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHBy dDJfcDMgcDJfMworKDMyIHJvd3MpCiAKIFNFTEVDVCBhLCBiIEZST00gcHJ0MSBGVUxMIEpP SU4gcHJ0MiBwMihiLGEsYykgVVNJTkcoYSxiKQogICBXSEVSRSBhIEJFVFdFRU4gNDkwIEFO RCA1MTAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdW5pb24ub3V0 IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC91bmlvbi5vdXQKaW5kZXggZGVjZTczMTBj ZmUuLjdhYzRhOTM4MGUyIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3VuaW9uLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3VuaW9uLm91dApA QCAtMTMwMywyNCArMTMwMywyMiBAQCBzZWxlY3QgZGlzdGluY3QgcTEgZnJvbQogICAgdW5p b24gYWxsCiAgICBzZWxlY3QgZGlzdGluY3QgKiBmcm9tIGludDhfdGJsIGk4Mikgc3MKIHdo ZXJlIHEyID0gcTI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gVW5pcXVlCi0gICAtPiAgTWVyZ2UgQXBwZW5k Ci0gICAgICAgICBTb3J0IEtleTogIipTRUxFQ1QqIDEiLnExCisgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaEFnZ3JlZ2F0ZQor ICAgR3JvdXAgS2V5OiAiKlNFTEVDVCogMSIucTEKKyAgIC0+ICBBcHBlbmQKICAgICAgICAg IC0+ICBTdWJxdWVyeSBTY2FuIG9uICIqU0VMRUNUKiAxIgotICAgICAgICAgICAgICAgLT4g IFVuaXF1ZQotICAgICAgICAgICAgICAgICAgICAgLT4gIFNvcnQKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgIFNvcnQgS2V5OiBpODEucTEsIGk4MS5xMgotICAgICAgICAgICAgICAg ICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGludDhfdGJsIGk4MQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAocTIgSVMgTk9UIE5VTEwpCisgICAgICAg ICAgICAgICAtPiAgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgR3JvdXAg S2V5OiBpODEucTEsIGk4MS5xMgorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIGludDhfdGJsIGk4MQorICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAo cTIgSVMgTk9UIE5VTEwpCiAgICAgICAgICAtPiAgU3VicXVlcnkgU2NhbiBvbiAiKlNFTEVD VCogMiIKLSAgICAgICAgICAgICAgIC0+ICBVbmlxdWUKLSAgICAgICAgICAgICAgICAgICAg IC0+ICBTb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBTb3J0IEtleTogaTgyLnEx LCBpODIucTIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBp bnQ4X3RibCBpODIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjog KHEyIElTIE5PVCBOVUxMKQotKDE1IHJvd3MpCisgICAgICAgICAgICAgICAtPiAgSGFzaEFn Z3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiBpODIucTEsIGk4Mi5x MgorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGludDhfdGJsIGk4Mgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAocTIgSVMgTk9UIE5VTEwpCiso MTMgcm93cykKIAogc2VsZWN0IGRpc3RpbmN0IHExIGZyb20KICAgKHNlbGVjdCBkaXN0aW5j dCAqIGZyb20gaW50OF90YmwgaTgxCkBAIC0xMzM5LDI0ICsxMzM3LDIyIEBAIHNlbGVjdCBk aXN0aW5jdCBxMSBmcm9tCiAgICB1bmlvbiBhbGwKICAgIHNlbGVjdCBkaXN0aW5jdCAqIGZy b20gaW50OF90YmwgaTgyKSBzcwogd2hlcmUgLXExID0gcTI7Ci0gICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBVbmlxdWUK LSAgIC0+ICBNZXJnZSBBcHBlbmQKLSAgICAgICAgIFNvcnQgS2V5OiAiKlNFTEVDVCogMSIu cTEKKyAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IEhhc2hBZ2dyZWdhdGUKKyAgIEdyb3VwIEtleTogIipTRUxFQ1QqIDEiLnExCisgICAtPiAg QXBwZW5kCiAgICAgICAgICAtPiAgU3VicXVlcnkgU2NhbiBvbiAiKlNFTEVDVCogMSIKLSAg ICAgICAgICAgICAgIC0+ICBVbmlxdWUKLSAgICAgICAgICAgICAgICAgICAgIC0+ICBTb3J0 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBTb3J0IEtleTogaTgxLnExLCBpODEucTIK LSAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBpbnQ4X3RibCBp ODEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKCgtIHExKSA9 IHEyKQorICAgICAgICAgICAgICAgLT4gIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAg ICAgICAgIEdyb3VwIEtleTogaTgxLnExLCBpODEucTIKKyAgICAgICAgICAgICAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBpbnQ4X3RibCBpODEKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZpbHRlcjogKCgtIHExKSA9IHEyKQogICAgICAgICAgLT4gIFN1YnF1ZXJ5IFNjYW4g b24gIipTRUxFQ1QqIDIiCi0gICAgICAgICAgICAgICAtPiAgVW5pcXVlCi0gICAgICAgICAg ICAgICAgICAgICAtPiAgU29ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgU29ydCBL ZXk6IGk4Mi5xMSwgaTgyLnEyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gaW50OF90YmwgaTgyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGaWx0ZXI6ICgoLSBxMSkgPSBxMikKLSgxNSByb3dzKQorICAgICAgICAgICAgICAgLT4g IEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogaTgyLnEx LCBpODIucTIKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBpbnQ4X3Ri bCBpODIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKCgtIHExKSA9IHEy KQorKDEzIHJvd3MpCiAKIHNlbGVjdCBkaXN0aW5jdCBxMSBmcm9tCiAgIChzZWxlY3QgZGlz dGluY3QgKiBmcm9tIGludDhfdGJsIGk4MQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVz cy9zcWwvYWdncmVnYXRlcy5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9hZ2dyZWdhdGVz LnNxbAppbmRleCAyZjVkMGUwMGYzZC4uYzZlMGQ3YmEyYjcgMTAwNjQ0Ci0tLSBhL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL2FnZ3JlZ2F0ZXMuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL2FnZ3JlZ2F0ZXMuc3FsCkBAIC0xMDI1LDYgKzEwMjUsMTA1IEBAIFNFTEVDVCBiYWxr KGh1bmRyZWQpIEZST00gdGVuazE7CiAKIFJPTExCQUNLOwogCistLSBHUk9VUCBCWSBvcHRp bWl6YXRpb24gYnkgcmVvcmRlciBjb2x1bW5zCisKK1NFTEVDVAorCWkgQVMgaWQsCisJaS8y IEFTIHAsCisJZm9ybWF0KCclNjBzJywgaSUyKSBBUyB2LAorCWkvNCBBUyBjLAorCWkvOCBB UyBkLAorCShyYW5kb20oKSAqICgxMDAwMC84KSk6OmludCBhcyBlIC0tdGhlIHNhbWUgYXMg ZCBidXQgbm8gY29ycmVsYXRpb24gd2l0aCBwCisJSU5UTyBidGcKK0ZST00KKwlnZW5lcmF0 ZV9zZXJpZXMoMSwgMTAwMDApIGk7CisKK1ZBQ1VVTSBidGc7CitBTkFMWVpFIGJ0ZzsKKwor LS0gR1JPVVAgQlkgb3B0aW1pemF0aW9uIGJ5IHJlb3JkZXIgY29sdW1ucyBieSBmcmVxdWVu Y3kKKworU0VUIGVuYWJsZV9oYXNoYWdnPW9mZjsKK1NFVCBtYXhfcGFyYWxsZWxfd29ya2Vy cz0gMDsKK1NFVCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMDsKKworRVhQ TEFJTiAoQ09TVFMgb2ZmKQorU0VMRUNUIGNvdW50KCopIEZST00gYnRnIEdST1VQIEJZIHAs IHY7CisKK0VYUExBSU4gKENPU1RTIG9mZikKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGJ0ZyBH Uk9VUCBCWSB2LCBwOworCitFWFBMQUlOIChDT1NUUyBvZmYpCitTRUxFQ1QgY291bnQoKikg RlJPTSBidGcgR1JPVVAgQlkgdiwgcCwgYzsKKworRVhQTEFJTiAoQ09TVFMgb2ZmKQorU0VM RUNUIGNvdW50KCopIEZST00gYnRnIEdST1VQIEJZIHYsIHAsIGMgT1JERVIgQlkgdiwgcCwg YzsKKworRVhQTEFJTiAoQ09TVFMgb2ZmKQorU0VMRUNUIGNvdW50KCopIEZST00gYnRnIEdS T1VQIEJZIHYsIHAsIGQsIGM7CisKK0VYUExBSU4gKENPU1RTIG9mZikKK1NFTEVDVCBjb3Vu dCgqKSBGUk9NIGJ0ZyBHUk9VUCBCWSB2LCBwLCBkLCBjIE9SREVSIEJZIHYsIHAsIGQgLGM7 CisKK0VYUExBSU4gKENPU1RTIG9mZikKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGJ0ZyBHUk9V UCBCWSB2LCBwLCBkLCBjIE9SREVSIEJZIHAsIHYsIGQgLGM7CisKK0VYUExBSU4gKENPU1RT IG9mZikKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGJ0ZyBHUk9VUCBCWSBwLCBkLCBlOworCitF WFBMQUlOIChDT1NUUyBvZmYpCitTRUxFQ1QgY291bnQoKikgRlJPTSBidGcgR1JPVVAgQlkg cCwgZSwgZDsKKworQ1JFQVRFIFNUQVRJU1RJQ1MgYnRnX2RlcCBPTiBkLCBlLCBwIEZST00g YnRnOworQU5BTFlaRSBidGc7CisKK0VYUExBSU4gKENPU1RTIG9mZikKK1NFTEVDVCBjb3Vu dCgqKSBGUk9NIGJ0ZyBHUk9VUCBCWSBwLCBkLCBlOworCitFWFBMQUlOIChDT1NUUyBvZmYp CitTRUxFQ1QgY291bnQoKikgRlJPTSBidGcgR1JPVVAgQlkgcCwgZSwgZDsKKworCistLSBH Uk9VUCBCWSBvcHRpbWl6YXRpb24gYnkgcmVvcmRlciBjb2x1bW5zIGJ5IGluZGV4IHNjYW4K KworQ1JFQVRFIElOREVYIE9OIGJ0ZyhwLCB2KTsKK1NFVCBlbmFibGVfc2Vxc2Nhbj1vZmY7 CitTRVQgZW5hYmxlX2JpdG1hcHNjYW49b2ZmOworVkFDVVVNIGJ0ZzsKKworRVhQTEFJTiAo Q09TVFMgb2ZmKQorU0VMRUNUIGNvdW50KCopIEZST00gYnRnIEdST1VQIEJZIHAsIHY7CisK K0VYUExBSU4gKENPU1RTIG9mZikKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGJ0ZyBHUk9VUCBC WSBwLCB2IE9SREVSIEJZIHAsIHY7CisKK0VYUExBSU4gKENPU1RTIG9mZikKK1NFTEVDVCBj b3VudCgqKSBGUk9NIGJ0ZyBHUk9VUCBCWSB2LCBwOworCitFWFBMQUlOIChDT1NUUyBvZmYp CitTRUxFQ1QgY291bnQoKikgRlJPTSBidGcgR1JPVVAgQlkgdiwgcCBPUkRFUiBCWSBwLCB2 OworCitFWFBMQUlOIChDT1NUUyBvZmYpCitTRUxFQ1QgY291bnQoKikgRlJPTSBidGcgR1JP VVAgQlkgdiwgcCwgYzsKKworRVhQTEFJTiAoQ09TVFMgb2ZmKQorU0VMRUNUIGNvdW50KCop IEZST00gYnRnIEdST1VQIEJZIHYsIHAsIGMgT1JERVIgQlkgcCwgdjsKKworRVhQTEFJTiAo Q09TVFMgb2ZmKQorU0VMRUNUIGNvdW50KCopIEZST00gYnRnIEdST1VQIEJZIHYsIGMsIHAs IGQ7CisKK0VYUExBSU4gKENPU1RTIG9mZikKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGJ0ZyBH Uk9VUCBCWSB2LCBjLCBwLCBkIE9SREVSIEJZIHAsIHY7CisKK0RST1AgVEFCTEUgYnRnOwor CitSRVNFVCBlbmFibGVfaGFzaGFnZzsKK1JFU0VUIG1heF9wYXJhbGxlbF93b3JrZXJzOwor UkVTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlcjsKK1JFU0VUIGVuYWJsZV9z ZXFzY2FuOworUkVTRVQgZW5hYmxlX2JpdG1hcHNjYW47CisKKwogLS0gU2Vjb25kbHkgdGVz dCB0aGUgY2FzZSBvZiBhIHBhcmFsbGVsIGFnZ3JlZ2F0ZSBjb21iaW5lciBmdW5jdGlvbgog LS0gcmV0dXJuaW5nIE5VTEwuIEZvciB0aGF0IHVzZSBub3JtYWwgdHJhbnNpdGlvbiBmdW5j dGlvbiwgYnV0IGEKIC0tIGNvbWJpbmVyIGZ1bmN0aW9uIHJldHVybmluZyBOVUxMLgpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvaW5jcmVtZW50YWxfc29ydC5zcWwgYi9z cmMvdGVzdC9yZWdyZXNzL3NxbC9pbmNyZW1lbnRhbF9zb3J0LnNxbAppbmRleCBkODc2OGE2 YjU0ZC4uMWRlMTYzZTAzOTUgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2lu Y3JlbWVudGFsX3NvcnQuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2luY3JlbWVu dGFsX3NvcnQuc3FsCkBAIC0yMTMsNyArMjEzLDcgQEAgc2V0IHBhcmFsbGVsX3R1cGxlX2Nv c3QgPSAwOwogc2V0IG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAyOwogCiBj cmVhdGUgdGFibGUgdCAoYSBpbnQsIGIgaW50LCBjIGludCk7Ci1pbnNlcnQgaW50byB0IHNl bGVjdCBtb2QoaSwxMCksbW9kKGksMTApLGkgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAw MCkgcyhpKTsKK2luc2VydCBpbnRvIHQgc2VsZWN0IG1vZChpLDEwKSxtb2QoaSwxMCksaSBm cm9tIGdlbmVyYXRlX3NlcmllcygxLDYwMDAwKSBzKGkpOwogY3JlYXRlIGluZGV4IG9uIHQg KGEpOwogYW5hbHl6ZSB0OwogCi0tIAoyLjM0LjEKCg== --------------iSa3g31YLXTysH0TQ2t1zJtF Content-Type: text/x-patch; charset=UTF-8; name="0002-Use-default-restriction-for-number-of-group-20220315.patch" Content-Disposition: attachment; filename*0="0002-Use-default-restriction-for-number-of-group-20220315.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBjZmQzNTE1YTAwMjQ1MTU1NDZhZmU4OWZjOWIyNTk1OTkwZWFmM2IyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXkgTGVwaWtob3YgPGEubGVwaWtob3ZAcG9z dGdyZXNwcm8ucnU+CkRhdGU6IFRodSwgMTAgRmViIDIwMjIgMTM6NTE6NTEgKzA1MDAKU3Vi amVjdDogW1BBVENIIDIvM10gVXNlIGRlZmF1bHQgcmVzdHJpY3Rpb24gZm9yIG51bWJlciBv ZiBncm91cHMuCgotLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMg fCAyMiArKysrKysrLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgNyBpbnNlcnRp b25zKCspLCAxNSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGF0aC9jb3N0c2l6ZS5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29z dHNpemUuYwppbmRleCA2OGEzMjc0MGQ3ZS4uYjllOTc1ZGYxMGMgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMKKysrIGIvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BhdGgvY29zdHNpemUuYwpAQCAtMTc1Niw4ICsxNzU2LDggQEAgY29zdF9y ZWN1cnNpdmVfdW5pb24oUGF0aCAqcnVuaW9uLCBQYXRoICpucnRlcm0sIFBhdGggKnJ0ZXJt KQogCiAvKgogICogaXNfZmFrZV92YXIKLSAqCQlXb3JrYXJvdW5kIGZvciBnZW5lcmF0ZV9h cHBlbmRfdGxpc3QoKSB3aGljaCBnZW5lcmF0ZXMgZmFrZSBWYXJzIHdpdGgKLSAqCQl2YXJu byA9PSAwLCB0aGF0IHdpbGwgY2F1c2UgYSBmYWlsIG9mIGVzdGltYXRlX251bV9ncm91cCgp IGNhbGwKKyAqCQlXb3JrYXJvdW5kIGZvciBnZW5lcmF0ZV9hcHBlbmRfdGxpc3QoKSB3aGlj aCBnZW5lcmF0ZXMgZmFrZSBWYXJzIGZvciB0aGUKKyAqCQljYXNlIG9mICJ2YXJubyAwIiwg dGhhdCB3aWxsIGNhdXNlIGEgZmFpbCBvZiBlc3RpbWF0ZV9udW1fZ3JvdXAoKSBjYWxsCiAg KgogICogWFhYIFVtbW0sIHdoeSB3b3VsZCBlc3RpbWF0ZV9udW1fZ3JvdXAgZmFpbCB3aXRo IHRoaXM/CiAgKi8KQEAgLTE5NzgsMjEgKzE5NzgsMTMgQEAgY29tcHV0ZV9jcHVfc29ydF9j b3N0KFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpwYXRoa2V5cywgaW50IG5QcmVzb3J0ZWRL ZXlzLAogCQkJCQkJCQkJCQkJCSAgdHVwbGVzUGVyUHJldkdyb3VwLCBOVUxMLCBOVUxMLAog CQkJCQkJCQkJCQkJCSAgJmNhY2hlX3ZhcmluZm9zLAogCQkJCQkJCQkJCQkJCSAgbGlzdF9s ZW5ndGgocGF0aGtleUV4cHJzKSAtIDEpOwotCQllbHNlIGlmICh0dXBsZXMgPiA0LjApCisJ CWVsc2UKIAkJCS8qCi0JCQkgKiBVc2UgZ2VvbWV0cmljIG1lYW4gYXMgZXN0aW1hdGlvbiBp ZiB0aGVyZSBpcyBubyBhbnkgc3RhdHMuCi0JCQkgKiBEb24ndCB1c2UgREVGQVVMVF9OVU1f RElTVElOQ1QgYmVjYXVzZSBpdCB1c2VkIGZvciBvbmx5IG9uZQotCQkJICogY29sdW1uIHdo aWxlIGhlcmUgd2UgdHJ5IHRvIGVzdGltYXRlIG51bWJlciBvZiBncm91cHMgb3ZlcgotCQkJ ICogc2V0IG9mIGNvbHVtbnMuCi0JCQkgKgotCQkJICogWFhYIFBlcmhhcHMgdGhpcyBzaG91 bGQgdXNlIERFRkFVTFRfTlVNX0RJU1RJTkNUIGF0IGxlYXN0IHRvCi0JCQkgKiBsaW1pdCB0 aGUgY2FsY3VsYXRlZCB2YWx1ZXMsIHNvbWVob3c/Ci0JCQkgKgotCQkJICogWFhYIFdoYXQn cyB0aGUgbG9naWMgb2YgdGhlIGZvbGxvd2luZyBmb3JtdWxhPworCQkJICogSW4gY2FzZSBv ZiBmdWxsIHVuY2VydGFpbml0eSB1c2UgZGVmYXVsdCBkZWZlbnNpdmUgYXBwcm9hY2guIEl0 CisJCQkgKiBtZWFucyB0aGF0IGFueSBwZXJtdXRhdGlvbnMgb2Ygc3VjaCB2YXJzIGFyZSBl cXVpdmFsZW50LgorCQkJICogQWxzbywgc2VlIGNvbW1lbnRzIGZvciB0aGUgY29zdF9pbmNy ZW1lbnRhbF9zb3J0IHJvdXRpbmUuCiAJCQkgKi8KLQkJCW5Hcm91cHMgPSBjZWlsKDIuMCAr IHNxcnQodHVwbGVzKSAqIChpICsgMSkgLyBsaXN0X2xlbmd0aChwYXRoa2V5cykpOwotCQll bHNlCi0JCQluR3JvdXBzID0gdHVwbGVzOworCQkJbkdyb3VwcyA9IE1pbih0dXBsZXNQZXJQ cmV2R3JvdXAsIERFRkFVTFRfTlVNX0RJU1RJTkNUKTsKIAogCQkvKgogCQkgKiBQcmVzb3J0 ZWQga2V5cyBhcmVuJ3QgcGFydGljaXBhdGVkIGluIGNvbXBhcmlzb24gYnV0IHN0aWxsIGNo ZWNrZWQKLS0gCjIuMzQuMQoK --------------iSa3g31YLXTysH0TQ2t1zJtF Content-Type: text/x-patch; charset=UTF-8; name="0003-fixup-tweak-costing-20220315.patch" Content-Disposition: attachment; filename="0003-fixup-tweak-costing-20220315.patch" Content-Transfer-Encoding: base64 RnJvbSA3NDMyYTkxN2MzMGFiNWU1ZjFkYjlkMjU2OWEzOGU1OWU0ZjM3YzNhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogTW9uLCAxNCBNYXIgMjAyMiAyMzoyODo1NSArMDEwMApTdWJq ZWN0OiBbUEFUQ0ggMy8zXSBmaXh1cDogdHdlYWsgY29zdGluZwoKLS0tCiBzcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jIHwgNDIgKysrKysrKysrKysrKy0tLS0tLS0t LS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMjEgaW5zZXJ0aW9ucygrKSwgMjEgZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUu YyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMKaW5kZXggYjllOTc1 ZGYxMGMuLjcyMjRlZmFiYTVlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGF0aC9jb3N0c2l6ZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3Rz aXplLmMKQEAgLTE4NzIsNiArMTg3MiwxNSBAQCBnZXRfd2lkdGhfY29zdF9tdWx0aXBsaWVy KFBsYW5uZXJJbmZvICpyb290LCBFeHByICpleHByKQogICoKICAqCU4gKiBzdW0oIEZrICog bG9nKEdrKSApCiAgKgorICogRm9yIGJvdW5kZWQgaGVhcCBzb3J0IHdlIGhhdmVuJ3Qgc3Vj aCBhIGR1cGxpY2F0ZXMtcmVsYXRlZCByZXNlYXJjaC4gU28gaW52ZW50CisgKiBpdCBiYXNl ZCBvbiBhIHNpbXBsZSBsb2dpYyAoTSAtIG51bWJlciBvZiBvdXRwdXQgdHVwbGVzKToKKyAq IEZvciBvbmUgY29sdW1uIHdlIGNhbiBlc3RpbWF0ZSBudW1iZXIgb2YgY29tcGFyaXNvbnMg YXM6CisgKiBOICogbG9nKG1pbntOLE19KQorICogRm9yIHRoZSBjYXNlIG9mIG1hbnkgY29s dW1ucyB3ZSBjYW4gbmF0aXZlbHkgZXN0aW1hdGUgbnVtYmVyIG9mIGNvbXBhcmlzb25zIGJ5 CisgKiB0aGUgZm9ybXVsYToKKyAqIHN1bShtYXh7bl9pLE19ICogbG9nKG1pbntOLE19KSks CisgKiB3aGVyZSBuXzAgPT0gTiwgbl9pIC0gbnVtYmVyIG9mIHR1cGxlcyBwZXIgZ3JvdXAs IGVzdGltYXRlZCBvbiBwcmV2aW91cyBzdGVwLgorICoKICAqIE5vdGU6IFdlIGFsc28gY29u c2lkZXIgY29sdW1uIHdpZHRoLCBub3QganVzdCB0aGUgY29tcGFyYXRvciBjb3N0LgogICoK ICAqIE5PVEU6IHNvbWUgY2FsbGVycyBjdXJyZW50bHkgcGFzcyBOSUwgZm9yIHBhdGhrZXlz IGJlY2F1c2UgdGhleQpAQCAtMTg4MSw3ICsxODkwLDcgQEAgZ2V0X3dpZHRoX2Nvc3RfbXVs dGlwbGllcihQbGFubmVySW5mbyAqcm9vdCwgRXhwciAqZXhwcikKIHN0YXRpYyBDb3N0CiBj b21wdXRlX2NwdV9zb3J0X2Nvc3QoUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKnBhdGhrZXlz LCBpbnQgblByZXNvcnRlZEtleXMsCiAJCQkJCSAgQ29zdCBjb21wYXJpc29uX2Nvc3QsIGRv dWJsZSB0dXBsZXMsIGRvdWJsZSBvdXRwdXRfdHVwbGVzLAotCQkJCQkgIGJvb2wgaGVhcFNv cnQpCisJCQkJCSAgYm9vbCBib3VuZGVkX3NvcnQpCiB7CiAJQ29zdAkJcGVyX3R1cGxlX2Nv c3QgPSAwLjA7CiAJTGlzdENlbGwJKmxjOwpAQCAtMTkwNyw3ICsxOTE2LDcgQEAgY29tcHV0 ZV9jcHVfc29ydF9jb3N0KFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpwYXRoa2V5cywgaW50 IG5QcmVzb3J0ZWRLZXlzLAogCQkgKiBvZiB0aGlzIGZ1bmN0aW9uLCBidXQgSSdtIG5vdCBz dXJlLiBJIHN1Z2dlc3Qgd2UgaW50cm9kdWNlIHNvbWUgc2ltcGxlCiAJCSAqIGNvbnN0YW50 cyBmb3IgdGhhdCwgaW5zdGVhZCBvZiBtYWdpYyB2YWx1ZXMuCiAJCSAqLwotCQlvdXRwdXRf dHVwbGVzID0gKGhlYXBTb3J0KSA/IDIuMCAqIG91dHB1dF90dXBsZXMgOiB0dXBsZXM7CisJ CW91dHB1dF90dXBsZXMgPSAoYm91bmRlZF9zb3J0KSA/IDIuMCAqIG91dHB1dF90dXBsZXMg OiB0dXBsZXM7CiAJCXBlcl90dXBsZV9jb3N0ICs9IDIuMCAqIGNwdV9vcGVyYXRvcl9jb3N0 ICogTE9HMihvdXRwdXRfdHVwbGVzKTsKIAogCQkvKiBhZGQgY29zdCBwcm92aWRlZCBieSBj YWxsZXIgKi8KQEAgLTE5MjUsOCArMTkzNCw3IEBAIGNvbXB1dGVfY3B1X3NvcnRfY29zdChQ bGFubmVySW5mbyAqcm9vdCwgTGlzdCAqcGF0aGtleXMsIGludCBuUHJlc29ydGVkS2V5cywK IAl7CiAJCVBhdGhLZXkJCQkJKnBhdGhrZXkgPSAoUGF0aEtleSopIGxmaXJzdChsYyk7CiAJ CUVxdWl2YWxlbmNlTWVtYmVyCSplbTsKLQkJZG91YmxlCQkJCSBuR3JvdXBzLAotCQkJCQkJ CSBjb3JyZWN0ZWROR3JvdXBzOworCQlkb3VibGUJCQkJIG5Hcm91cHM7CiAKIAkJLyoKIAkJ ICogV2UgYmVsaWV2ZSB0aGF0IGVxdWl2YWxlbmNlIG1lbWJlcnMgYXJlbid0IHZlcnkgZGlm ZmVyZW50LCBzbywgdG8KQEAgLTE5OTIsMjQgKzIwMDAsMTYgQEAgY29tcHV0ZV9jcHVfc29y dF9jb3N0KFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpwYXRoa2V5cywgaW50IG5QcmVzb3J0 ZWRLZXlzLAogCQkgKi8KIAkJaWYgKGkgPj0gblByZXNvcnRlZEtleXMpCiAJCXsKLQkJCWlm IChoZWFwU29ydCkKLQkJCXsKLQkJCQlkb3VibGUgaGVhcF90dXBsZXM7Ci0KLQkJCQkvKiBo YXZlIHRvIGtlZXAgYXQgbGVhc3Qgb25lIGdyb3VwLCBhbmQgYSBtdWx0aXBsZSBvZiBncm91 cCBzaXplICovCi0JCQkJaGVhcF90dXBsZXMgPSBNYXgoY2VpbChvdXRwdXRfdHVwbGVzIC8g dHVwbGVzUGVyUHJldkdyb3VwKSAqIHR1cGxlc1BlclByZXZHcm91cCwKLQkJCQkJCQkJICB0 dXBsZXNQZXJQcmV2R3JvdXApOwotCi0JCQkJLyogc28gaG93IG1hbnkgKHdob2xlKSBncm91 cHMgaXMgdGhhdD8gKi8KLQkJCQljb3JyZWN0ZWROR3JvdXBzID0gY2VpbChoZWFwX3R1cGxl cyAvIHR1cGxlc1BlclByZXZHcm91cCk7Ci0JCQl9CisJCQkvKgorCQkJICogUXVpY2sgc29y dCBhbmQgJ3RvcC1OJyBzb3J0aW5nIChib3VuZGVkIGhlYXAgc29ydCkgYWxnb3JpdGhtcwor CQkJICogaGF2ZSBkaWZmZXJlbnQgZm9ybXVsYXMgZm9yIHRpbWUgY29tcGxleGl0eSBlc3Rp bWF0aW9uLgorCQkJICovCisJCQlpZiAoYm91bmRlZF9zb3J0KQorCQkJCXBlcl90dXBsZV9j b3N0ICs9IHRvdGFsRnVuY0Nvc3QgKgorCQkJCQkJCQkgIChNYXgodHVwbGVzUGVyUHJldkdy b3VwLCBvdXRwdXRfdHVwbGVzKSAvIHR1cGxlcykgKgorCQkJCQkJCQkgIExPRzIoMi4wICog TWluKHR1cGxlc1BlclByZXZHcm91cCwgb3V0cHV0X3R1cGxlcykpOwogCQkJZWxzZQotCQkJ CS8qIGFsbCBncm91cHMgaW4gdGhlIGlucHV0ICovCi0JCQkJY29ycmVjdGVkTkdyb3VwcyA9 IG5Hcm91cHM7Ci0KLQkJCWNvcnJlY3RlZE5Hcm91cHMgPSBNYXgoMS4wLCBjZWlsKGNvcnJl Y3RlZE5Hcm91cHMpKTsKLQotCQkJcGVyX3R1cGxlX2Nvc3QgKz0gdG90YWxGdW5jQ29zdCAq IExPRzIoY29ycmVjdGVkTkdyb3Vwcyk7CisJCQkJcGVyX3R1cGxlX2Nvc3QgKz0gdG90YWxG dW5jQ29zdCAqIExPRzIobkdyb3Vwcyk7CiAJCX0KIAogCQlpKys7Ci0tIAoyLjM0LjEKCg== --------------iSa3g31YLXTysH0TQ2t1zJtF--