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 1mo9yT-0001Kj-2O for pgsql-hackers@arkaria.postgresql.org; Fri, 19 Nov 2021 19:55:05 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1mo9yR-0000wr-4V for pgsql-hackers@arkaria.postgresql.org; Fri, 19 Nov 2021 19:55:03 +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 1mo9yP-0000wU-Pl for pgsql-hackers@lists.postgresql.org; Fri, 19 Nov 2021 19:55:02 +0000 Received: from mail-ed1-x52e.google.com ([2a00:1450:4864:20::52e]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1mo9yF-0003yj-Ns for pgsql-hackers@lists.postgresql.org; Fri, 19 Nov 2021 19:55:00 +0000 Received: by mail-ed1-x52e.google.com with SMTP id l25so30631229eda.11 for ; Fri, 19 Nov 2021 11:54:51 -0800 (PST) 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 :from:to:cc:references:in-reply-to; bh=UTIYPohYH62iMOukA3GDMcJ+k4TRVVA358tUDuBK67E=; b=mI6ylir5Acfvks/KcFY7sDxIH1CIMK8oj1avJwgE9V4jXHVpPKTsPIJhU4vv61SAp/ Rzkul97hjD0FqPjoS1Unu5ZBRLqw6kVdkMchDsi5RFeRp3efGpZb0B0VOuuP4KxnsGBu xfiKvLLmaiXjZRKKHxpPf3gzaJz0pq2S9Qgfr5Yaumy5lcN72vB03dyPY5n9tsJW5Q2L XiF4qBGAgbmQ49Jg1PeC7J0Eexx3D3l32tqyP1f9TNPnmr9RiEjKzxkwg5tCLccfNCgN F5S2SZfQOjc/QP/ZuSvt0C7abIGLdGsjO7MKXNxsqd4BaOppOwqTVQiREhb2IxWZNfox MHaA== 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:from:to:cc:references:in-reply-to; bh=UTIYPohYH62iMOukA3GDMcJ+k4TRVVA358tUDuBK67E=; b=HHkw7rhMQcyEu/uvk+H8wwLKK1y0R/qvR8VCHLDjwLZkSVDyTfXwoZSEs7wHuJX+/k GShr78IUBhBWU6+ahPd2Ck1ysPZV+YDMgLBFWYh0tk8D77WJ5pBrN6/+AVi+Bc2pC/Zs 2XjpYbSsHm8piPE8UsH29wl2BacE+rHYW+2Wsj39WNTENYq2ygYz6moi0RJmg6DIFx+o dMQZs9jxWTD5ZKcMS7ibea2SDGnHwMckQ5/aYA0dhzx5BvUVdZ40ZlGP1FxrRsKK4DE3 Rjin8zP4Ol6bshLMLx+Tt6C2UY+10a5cL6AiPUIC5eqmmTa7dGn1OPw4sQEeCU6QnHLh qaQw== X-Gm-Message-State: AOAM533mvs59xthbMFWbl66+HrmM5+BPmZ2KcdVbDtcqxM2nOAmGFNq0 pN2uDohTYFc84qsxDlOM9nqDRvbjrZqB03nvnae/9hiYHDxiYX1yG9otbTFx+qiQqtj4Zv74/E5 lm4zN/x3Bgst0lCONX5ALIRbsOM9CHfKCtQCel2oQXG5wlSaoqkYLMqWVAusBmrnUXDWrKRUou7 jw59DcJIoh5Dw26tpIZOzEdOQHelHm8A9BtG2oeZ7Y01i2tdEoJQvv X-Google-Smtp-Source: ABdhPJz6YUZBD/zrG3mjYpZvecYa1a7/BIep1XR2LaDBc/w+TOJtBajBZ1zDfaxT3BdNT3rP/DCwQQ== X-Received: by 2002:a05:6402:348b:: with SMTP id v11mr28402530edc.276.1637351690066; Fri, 19 Nov 2021 11:54:50 -0800 (PST) Received: from [10.137.0.18] (ip-86-49-251-104.net.upcbroadband.cz. [86.49.251.104]) by smtp.gmail.com with ESMTPSA id ds17sm339943ejc.45.2021.11.19.11.54.48 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 19 Nov 2021 11:54:49 -0800 (PST) Content-Type: multipart/mixed; boundary="------------PSu0kcrJZId8sBgRJ9Ec0YQG" Message-ID: Date: Fri, 19 Nov 2021 20:54:46 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.2.0 Subject: Re: logical decoding and replication of sequences Content-Language: en-US From: Tomas Vondra To: Hannu Krosing Cc: Peter Eisentraut , vignesh C , PostgreSQL Hackers , Petr Jelinek References: <377c6fda-c3eb-7a69-e981-c77ae459c5db@enterprisedb.com> <5105c3ad-d726-fc22-1d09-514b6852a15e@enterprisedb.com> <3005299b-267d-8e4a-68a3-abdad3e96aba@enterprisedb.com> <3d6df331-5532-6848-eb45-344b265e0238@enterprisedb.com> <482c10c1-b110-819f-b0e7-17549fa2f0dc@enterprisedb.com> <12a9ecd6-4edb-a367-33da-4e2d03b0aace@enterprisedb.com> In-Reply-To: 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. --------------PSu0kcrJZId8sBgRJ9Ec0YQG Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi, I've spent a bit of time exploring the alternative approach outlined by Hannu, i.e. tracking sequences accessed by the transaction, and logging the final state just once at COMMIT. Attached is an experimental version of the patch series doing that - 0001 does the original approach (decoding the sequence updates from WAL) and then 0002 reworks it to this alternative solution. The 0003 and 0004 stay mostly the same, except for minor fixes. Some of the tests in 0003/0004 fail, because 0002 changes the semantics in various ways (more about that later). The original approach (0001) may seem complex at first, but in principle it just decodes changes to the sequence relation, and either stashes them into transaction (just like other changes) or applies them right away. I'd say that's the most complicated part - deciding whether the change is transactional or not. 0002 reworks that so that it doesn't decode the existing WAL records, but tracks sequences which have been modified (updated on-disk state) and then accessed in the current transaction. And then at COMMIT time we write a new WAL message with info about the sequence. I realized we already cache sequences for each session - seqhashtab in sequence.c. It doesn't have any concept of a transaction, but it seems fairly easy to make that possible. I did this by adding two flags - needs_log - means the seesion advanced the sequence (on disk) - touched - true if the current xact called nextval() etc. The idea is that what matters is updates to on-disk state, so whenever we do that we set needs_log. But it only matters when the changes are made visible in a committed transaction. Consider for example this: BEGIN; SELECT nextval('s') FROM generate_series(1,10000) s(i); ROLLBACK; SELECT nextval('s'); The first nextval() call certainly sets both flags to true, at least for default sequences caching 32 values. But the values are not confirmed to the user because of the rollback - this resets 'touched' flag, but leaves 'needs_log' set to true. And then the next nextval() - which may easily be just from cache - sets touched=true again, and logs the sequence state at (implicit) commit. Which resets both flags again. The logging/cleanup happens in AtEOXact_Sequences() which gets called before commit/abort. This walks all cached sequences and writes the state for those with both flags true (or resets flag for abort). The cache also keeps info about the last "sequence state" in the session, which is then used when writing into into WAL. To write the sequence state into WAL, I've added a new WAL record xl_logical_sequence to RM_LOGICALMSG_ID, next to the xl_logical_message. It's a bit arbitrary, maybe it should be part of RM_SEQ_ID, but it does the trick. I don't think this is the main issue and it's easy enough to move it elsewhere if needed. So, that seems fairly straight-forward and it may reduce the number of replication messages for large transactions. Unfortunately, it's not much simpler compared to the first approach - the amount of code is about the same, and there's a bunch of other issues. The main issue seems to be about ordering. Consider multiple sessions all advancing the sequence. With the "old" approach this was naturally ordered - the order in which the increments were written to WAL made sense. But the sessions may advance the sequences in one order and then commit in a different order, which mixes the updates. Consider for example this scenario with two concurrent transactions: T1: nextval('s') -> allocates values [1,32] T2: nextval('s') -> allocates values [33,64] T2: commit -> logs [33,64] T1: commit -> logs [1,32] The result is the sequence on the replica diverted because it replayed the increments in the opposite order. I can think of two ways to fix this. Firstly, we could "merge" the increments in some smart way, e.g. by discarding values considered "stale" (like decrements). But that seems pretty fragile, because the sequence may be altered in various ways, reset, etc. And it seems more like transferring responsibility to someone else instead of actually solving the issue. The other fix is simply reading the current sequence state from disk at commit and logging that (instead of the values cached from the last increment). But I'm rather skeptical about doing such things right before COMMIT. regards -- Tomas Vondra EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company --------------PSu0kcrJZId8sBgRJ9Ec0YQG Content-Type: text/x-patch; charset=UTF-8; name="0004-Add-support-for-decoding-sequences-to-built-20211118.patch" Content-Disposition: attachment; filename*0="0004-Add-support-for-decoding-sequences-to-built-20211118.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAyNGMzMDg3NWM5YjAyNGI4MzBhMDNiNzgwZmVkYmNkMTMwMzk1YzI1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogRnJpLCAxOSBOb3YgMjAyMSAwMToxMjoyMyArMDEwMApTdWJq ZWN0OiBbUEFUQ0ggNC80XSBBZGQgc3VwcG9ydCBmb3IgZGVjb2Rpbmcgc2VxdWVuY2VzIHRv IGJ1aWx0LWluCiByZXBsaWNhdGlvbgoKLS0tCiBkb2Mvc3JjL3NnbWwvY2F0YWxvZ3Muc2dt bCAgICAgICAgICAgICAgICAgIHwgIDcxICsrKysKIGRvYy9zcmMvc2dtbC9yZWYvYWx0ZXJf cHVibGljYXRpb24uc2dtbCAgICAgfCAgMjQgKy0KIGRvYy9zcmMvc2dtbC9yZWYvYWx0ZXJf c3Vic2NyaXB0aW9uLnNnbWwgICAgfCAgIDQgKy0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvcGdf cHVibGljYXRpb24uYyAgICAgICAgfCAxNDkgKysrKysrKystCiBzcmMvYmFja2VuZC9jYXRh bG9nL3N5c3RlbV92aWV3cy5zcWwgICAgICAgIHwgIDEwICsKIHNyYy9iYWNrZW5kL2NvbW1h bmRzL3B1YmxpY2F0aW9uY21kcy5jICAgICAgfCAzNTAgKysrKysrKysrKysrKysrKysrKy0K IHNyYy9iYWNrZW5kL2NvbW1hbmRzL3NlcXVlbmNlLmMgICAgICAgICAgICAgfCAgNzkgKysr KysKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYyAgICAgfCAyNzIg KysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRpb24u YyAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYyAgICAgICAg ICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL25vZGVzL2VxdWFsZnVuY3MuYyAgICAgICAg ICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueSAgICAgICAgICAgICAg ICAgICB8ICAzMiArKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5j ICAgICB8ICA1NCArKysKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVz eW5jLmMgfCAxMTggKysrKysrLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93 b3JrZXIuYyAgICB8ICA2MCArKysrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1 dC9wZ291dHB1dC5jIHwgIDg2ICsrKystCiBzcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxj YWNoZS5jICAgICAgICAgIHwgICA0ICstCiBzcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmMg ICAgICAgICAgICAgICAgIHwgICA2ICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2Mu ZGF0ICAgICAgICAgICAgIHwgICA1ICsKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGlj YXRpb24uaCAgICAgICAgfCAgMTQgKwogc3JjL2luY2x1ZGUvY29tbWFuZHMvc2VxdWVuY2Uu aCAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgg ICAgICAgICAgICAgIHwgICA2ICsKIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxw cm90by5oICAgICAgfCAgMjAgKysKIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Bnb3V0cHV0 LmggICAgICAgICAgfCAgIDEgKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5v dXQgICAgICAgICB8ICAgOCArCiBzcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMjNfc2VxdWVu Y2VzLnBsICAgIHwgMTk2ICsrKysrKysrKysrCiAyNiBmaWxlcyBjaGFuZ2VkLCAxNTQyIGlu c2VydGlvbnMoKyksIDMyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90 ZXN0L3N1YnNjcmlwdGlvbi90LzAyM19zZXF1ZW5jZXMucGwKCmRpZmYgLS1naXQgYS9kb2Mv c3JjL3NnbWwvY2F0YWxvZ3Muc2dtbCBiL2RvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sCmlu ZGV4IGMxZDExYmU3M2YuLjM3YjliNTJiMjkgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9j YXRhbG9ncy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sCkBAIC05NDk4 LDYgKzk0OTgsMTEgQEAgU0NSQU0tU0hBLTI1NiQ8cmVwbGFjZWFibGU+Jmx0O2l0ZXJhdGlv biBjb3VudCZndDs8L3JlcGxhY2VhYmxlPjo8cmVwbGFjZWFibGU+JmwKICAgICAgIDxlbnRy eT5wcmVwYXJlZCB0cmFuc2FjdGlvbnM8L2VudHJ5PgogICAgICA8L3Jvdz4KIAorICAgICA8 cm93PgorICAgICAgPGVudHJ5PjxsaW5rIGxpbmtlbmQ9InZpZXctcGctcHVibGljYXRpb24t c2VxdWVuY2VzIj48c3RydWN0bmFtZT5wZ19wdWJsaWNhdGlvbl9zZXF1ZW5jZXM8L3N0cnVj dG5hbWU+PC9saW5rPjwvZW50cnk+CisgICAgICA8ZW50cnk+cHVibGljYXRpb25zIGFuZCB0 aGVpciBhc3NvY2lhdGVkIHNlcXVlbmNlczwvZW50cnk+CisgICAgIDwvcm93PgorCiAgICAg IDxyb3c+CiAgICAgICA8ZW50cnk+PGxpbmsgbGlua2VuZD0idmlldy1wZy1wdWJsaWNhdGlv bi10YWJsZXMiPjxzdHJ1Y3RuYW1lPnBnX3B1YmxpY2F0aW9uX3RhYmxlczwvc3RydWN0bmFt ZT48L2xpbms+PC9lbnRyeT4KICAgICAgIDxlbnRyeT5wdWJsaWNhdGlvbnMgYW5kIHRoZWly IGFzc29jaWF0ZWQgdGFibGVzPC9lbnRyeT4KQEAgLTExMzMzLDYgKzExMzM4LDcyIEBAIFNF TEVDVCAqIEZST00gcGdfbG9ja3MgcGwgTEVGVCBKT0lOIHBnX3ByZXBhcmVkX3hhY3RzIHBw eAogCiAgPC9zZWN0MT4KIAorIDxzZWN0MSBpZD0idmlldy1wZy1wdWJsaWNhdGlvbi1zZXF1 ZW5jZXMiPgorICA8dGl0bGU+PHN0cnVjdG5hbWU+cGdfcHVibGljYXRpb25fc2VxdWVuY2Vz PC9zdHJ1Y3RuYW1lPjwvdGl0bGU+CisKKyAgPGluZGV4dGVybSB6b25lPSJ2aWV3LXBnLXB1 YmxpY2F0aW9uLXNlcXVlbmNlcyI+CisgICA8cHJpbWFyeT5wZ19wdWJsaWNhdGlvbl9zZXF1 ZW5jZXM8L3ByaW1hcnk+CisgIDwvaW5kZXh0ZXJtPgorCisgIDxwYXJhPgorICAgVGhlIHZp ZXcgPHN0cnVjdG5hbWU+cGdfcHVibGljYXRpb25fc2VxdWVuY2VzPC9zdHJ1Y3RuYW1lPiBw cm92aWRlcworICAgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1hcHBpbmcgYmV0d2VlbiBwdWJs aWNhdGlvbnMgYW5kIHRoZSBzZXF1ZW5jZXMgdGhleQorICAgY29udGFpbi4gIFVubGlrZSB0 aGUgdW5kZXJseWluZyBjYXRhbG9nCisgICA8bGluayBsaW5rZW5kPSJjYXRhbG9nLXBnLXB1 YmxpY2F0aW9uLXJlbCI+PHN0cnVjdG5hbWU+cGdfcHVibGljYXRpb25fcmVsPC9zdHJ1Y3Ru YW1lPjwvbGluaz4sCisgICB0aGlzIHZpZXcgZXhwYW5kcworICAgcHVibGljYXRpb25zIGRl ZmluZWQgYXMgPGxpdGVyYWw+Rk9SIEFMTCBTRVFVRU5DRVM8L2xpdGVyYWw+LCBzbyBmb3Ig c3VjaAorICAgcHVibGljYXRpb25zIHRoZXJlIHdpbGwgYmUgYSByb3cgZm9yIGVhY2ggZWxp Z2libGUgc2VxdWVuY2UuCisgIDwvcGFyYT4KKworICA8dGFibGU+CisgICA8dGl0bGU+PHN0 cnVjdG5hbWU+cGdfcHVibGljYXRpb25fc2VxdWVuY2VzPC9zdHJ1Y3RuYW1lPiBDb2x1bW5z PC90aXRsZT4KKyAgIDx0Z3JvdXAgY29scz0iMSI+CisgICAgPHRoZWFkPgorICAgICA8cm93 PgorICAgICAgPGVudHJ5IHJvbGU9ImNhdGFsb2dfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9 ImNvbHVtbl9kZWZpbml0aW9uIj4KKyAgICAgICBDb2x1bW4gVHlwZQorICAgICAgPC9wYXJh PgorICAgICAgPHBhcmE+CisgICAgICAgRGVzY3JpcHRpb24KKyAgICAgIDwvcGFyYT48L2Vu dHJ5PgorICAgICA8L3Jvdz4KKyAgICA8L3RoZWFkPgorCisgICAgPHRib2R5PgorICAgICA8 cm93PgorICAgICAgPGVudHJ5IHJvbGU9ImNhdGFsb2dfdGFibGVfZW50cnkiPjxwYXJhIHJv bGU9ImNvbHVtbl9kZWZpbml0aW9uIj4KKyAgICAgICA8c3RydWN0ZmllbGQ+cHVibmFtZTwv c3RydWN0ZmllbGQ+IDx0eXBlPm5hbWU8L3R5cGU+CisgICAgICAgKHJlZmVyZW5jZXMgPGxp bmsgbGlua2VuZD0iY2F0YWxvZy1wZy1wdWJsaWNhdGlvbiI+PHN0cnVjdG5hbWU+cGdfcHVi bGljYXRpb248L3N0cnVjdG5hbWU+PC9saW5rPi48c3RydWN0ZmllbGQ+cHVibmFtZTwvc3Ry dWN0ZmllbGQ+KQorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgTmFtZSBv ZiBwdWJsaWNhdGlvbgorICAgICAgPC9wYXJhPjwvZW50cnk+CisgICAgIDwvcm93PgorCisg ICAgIDxyb3c+CisgICAgICA8ZW50cnkgcm9sZT0iY2F0YWxvZ190YWJsZV9lbnRyeSI+PHBh cmEgcm9sZT0iY29sdW1uX2RlZmluaXRpb24iPgorICAgICAgIDxzdHJ1Y3RmaWVsZD5zY2hl bWFuYW1lPC9zdHJ1Y3RmaWVsZD4gPHR5cGU+bmFtZTwvdHlwZT4KKyAgICAgICAocmVmZXJl bmNlcyA8bGluayBsaW5rZW5kPSJjYXRhbG9nLXBnLW5hbWVzcGFjZSI+PHN0cnVjdG5hbWU+ cGdfbmFtZXNwYWNlPC9zdHJ1Y3RuYW1lPjwvbGluaz4uPHN0cnVjdGZpZWxkPm5zcG5hbWU8 L3N0cnVjdGZpZWxkPikKKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgIE5h bWUgb2Ygc2NoZW1hIGNvbnRhaW5pbmcgc2VxdWVuY2UKKyAgICAgIDwvcGFyYT48L2VudHJ5 PgorICAgICA8L3Jvdz4KKworICAgICA8cm93PgorICAgICAgPGVudHJ5IHJvbGU9ImNhdGFs b2dfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImNvbHVtbl9kZWZpbml0aW9uIj4KKyAgICAg ICA8c3RydWN0ZmllbGQ+c2VxdWVuY2VuYW1lPC9zdHJ1Y3RmaWVsZD4gPHR5cGU+bmFtZTwv dHlwZT4KKyAgICAgICAocmVmZXJlbmNlcyA8bGluayBsaW5rZW5kPSJjYXRhbG9nLXBnLWNs YXNzIj48c3RydWN0bmFtZT5wZ19jbGFzczwvc3RydWN0bmFtZT48L2xpbms+LjxzdHJ1Y3Rm aWVsZD5yZWxuYW1lPC9zdHJ1Y3RmaWVsZD4pCisgICAgICA8L3BhcmE+CisgICAgICA8cGFy YT4KKyAgICAgICBOYW1lIG9mIHNlcXVlbmNlCisgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAg ICAgPC9yb3c+CisgICAgPC90Ym9keT4KKyAgIDwvdGdyb3VwPgorICA8L3RhYmxlPgorIDwv c2VjdDE+CisKICA8c2VjdDEgaWQ9InZpZXctcGctcHVibGljYXRpb24tdGFibGVzIj4KICAg PHRpdGxlPjxzdHJ1Y3RuYW1lPnBnX3B1YmxpY2F0aW9uX3RhYmxlczwvc3RydWN0bmFtZT48 L3RpdGxlPgogCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL2FsdGVyX3B1YmxpY2F0 aW9uLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL2FsdGVyX3B1YmxpY2F0aW9uLnNnbWwKaW5k ZXggYmI0ZWY1ZTVlMi4uNGQxNjZhZDNmOSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3Jl Zi9hbHRlcl9wdWJsaWNhdGlvbi5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvYWx0ZXJf cHVibGljYXRpb24uc2dtbApAQCAtMzEsNyArMzEsOSBAQCBBTFRFUiBQVUJMSUNBVElPTiA8 cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bmFtZTwvcmVwbGFjZWFibGU+IFJFTkFN RSBUTyA8cgogPHBocmFzZT53aGVyZSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ cHVibGljYXRpb25fb2JqZWN0PC9yZXBsYWNlYWJsZT4gaXMgb25lIG9mOjwvcGhyYXNlPgog CiAgICAgVEFCTEUgWyBPTkxZIF0gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRh YmxlX25hbWU8L3JlcGxhY2VhYmxlPiBbICogXSBbLCAuLi4gXQorICAgIFNFUVVFTkNFIDxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5zZXF1ZW5jZV9uYW1lPC9yZXBsYWNlYWJs ZT4gWyAqIF0gWywgLi4uIF0KICAgICBBTEwgVEFCTEVTIElOIFNDSEVNQSB7IDxyZXBsYWNl YWJsZSBjbGFzcz0icGFyYW1ldGVyIj5zY2hlbWFfbmFtZTwvcmVwbGFjZWFibGU+IHwgQ1VS UkVOVF9TQ0hFTUEgfSBbLCAuLi4gXQorICAgIEFMTCBTRVFVRU5DRSBJTiBTQ0hFTUEgeyA8 cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+c2NoZW1hX25hbWU8L3JlcGxhY2VhYmxl PiB8IENVUlJFTlRfU0NIRU1BIH0gWywgLi4uIF0KIDwvc3lub3BzaXM+CiAgPC9yZWZzeW5v cHNpc2Rpdj4KIApAQCAtNTYsNyArNTgsMTggQEAgQUxURVIgUFVCTElDQVRJT04gPHJlcGxh Y2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm5hbWU8L3JlcGxhY2VhYmxlPiBSRU5BTUUgVE8g PHIKICAgPC9wYXJhPgogCiAgIDxwYXJhPgotICAgVGhlIGZvdXJ0aCB2YXJpYW50IG9mIHRo aXMgY29tbWFuZCBsaXN0ZWQgaW4gdGhlIHN5bm9wc2lzIGNhbiBjaGFuZ2UKKyAgIFRoZSBu ZXh0IHRocmVlIHZhcmlhbnRzIGNoYW5nZSB3aGljaCBzZXF1ZW5jZXMgYXJlIHBhcnQgb2Yg dGhlIHB1YmxpY2F0aW9uLgorICAgVGhlIDxsaXRlcmFsPlNFVCBTRVFVRU5DRTwvbGl0ZXJh bD4gY2xhdXNlIHdpbGwgcmVwbGFjZSB0aGUgbGlzdCBvZiBzZXF1ZW5jZXMKKyAgIGluIHRo ZSBwdWJsaWNhdGlvbiB3aXRoIHRoZSBzcGVjaWZpZWQgb25lLiAgVGhlIDxsaXRlcmFsPkFE RCBTRVFVRU5DRTwvbGl0ZXJhbD4KKyAgIGFuZCA8bGl0ZXJhbD5EUk9QIFNFUVVFTkNFPC9s aXRlcmFsPiBjbGF1c2VzIHdpbGwgYWRkIGFuZCByZW1vdmUgb25lIG9yIG1vcmUKKyAgIHNl cXVlbmNlcyBmcm9tIHRoZSBwdWJsaWNhdGlvbi4gIE5vdGUgdGhhdCBhZGRpbmcgc2VxdWVu Y2VzIHRvIGEgcHVibGljYXRpb24KKyAgIHRoYXQgaXMgYWxyZWFkeSBzdWJzY3JpYmVkIHRv IHdpbGwgcmVxdWlyZSBhIDxsaXRlcmFsPkFMVEVSIFNVQlNDUklQVElPTgorICAgLi4uIFJF RlJFU0ggUFVCTElDQVRJT048L2xpdGVyYWw+IGFjdGlvbiBvbiB0aGUgc3Vic2NyaWJpbmcg c2lkZSBpbiBvcmRlcgorICAgdG8gYmVjb21lIGVmZmVjdGl2ZS4KKyAgPC9wYXJhPgorCisg IDxwYXJhPgorICAgVGhlIHNldmVudGggdmFyaWFudCBvZiB0aGlzIGNvbW1hbmQgbGlzdGVk IGluIHRoZSBzeW5vcHNpcyBjYW4gY2hhbmdlCiAgICBhbGwgb2YgdGhlIHB1YmxpY2F0aW9u IHByb3BlcnRpZXMgc3BlY2lmaWVkIGluCiAgICA8eHJlZiBsaW5rZW5kPSJzcWwtY3JlYXRl cHVibGljYXRpb24iLz4uICBQcm9wZXJ0aWVzIG5vdCBtZW50aW9uZWQgaW4gdGhlCiAgICBj b21tYW5kIHJldGFpbiB0aGVpciBwcmV2aW91cyBzZXR0aW5ncy4KQEAgLTEyMyw2ICsxMzYs MTUgQEAgQUxURVIgUFVCTElDQVRJT04gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIi Pm5hbWU8L3JlcGxhY2VhYmxlPiBSRU5BTUUgVE8gPHIKICAgICA8L2xpc3RpdGVtPgogICAg PC92YXJsaXN0ZW50cnk+CiAKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+PHJlcGxh Y2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnNlcXVlbmNlX25hbWU8L3JlcGxhY2VhYmxlPjwv dGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgTmFtZSBvZiBhbiBl eGlzdGluZyBzZXF1ZW5jZS4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8 L3Zhcmxpc3RlbnRyeT4KKwogICAgPHZhcmxpc3RlbnRyeT4KICAgICA8dGVybT48bGl0ZXJh bD5TRVQgKCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cHVibGljYXRpb25fcGFy YW1ldGVyPC9yZXBsYWNlYWJsZT4gWz0gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIi PnZhbHVlPC9yZXBsYWNlYWJsZT5dIFssIC4uLiBdICk8L2xpdGVyYWw+PC90ZXJtPgogICAg IDxsaXN0aXRlbT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvYWx0ZXJfc3Vic2Ny aXB0aW9uLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL2FsdGVyX3N1YnNjcmlwdGlvbi5zZ21s CmluZGV4IDBiMDI3Y2MzNDYuLjhmMjhjZjAzZjQgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dt bC9yZWYvYWx0ZXJfc3Vic2NyaXB0aW9uLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9h bHRlcl9zdWJzY3JpcHRpb24uc2dtbApAQCAtMTQ3LDcgKzE0Nyw3IEBAIEFMVEVSIFNVQlND UklQVElPTiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bmFtZTwvcmVwbGFjZWFi bGU+IFJFTkFNRSBUTyA8CiAgICAgPGxpc3RpdGVtPgogICAgICA8cGFyYT4KICAgICAgIEZl dGNoIG1pc3NpbmcgdGFibGUgaW5mb3JtYXRpb24gZnJvbSBwdWJsaXNoZXIuICBUaGlzIHdp bGwgc3RhcnQKLSAgICAgIHJlcGxpY2F0aW9uIG9mIHRhYmxlcyB0aGF0IHdlcmUgYWRkZWQg dG8gdGhlIHN1YnNjcmliZWQtdG8gcHVibGljYXRpb25zCisgICAgICByZXBsaWNhdGlvbiBv ZiB0YWJsZXMgYW5kIHNlcXVlbmNlcyB0aGF0IHdlcmUgYWRkZWQgdG8gdGhlIHN1YnNjcmli ZWQtdG8gcHVibGljYXRpb25zCiAgICAgICBzaW5jZSA8Y29tbWFuZD5DUkVBVEUgU1VCU0NS SVBUSU9OPC9jb21tYW5kPiBvcgogICAgICAgdGhlIGxhc3QgaW52b2NhdGlvbiBvZiA8Y29t bWFuZD5SRUZSRVNIIFBVQkxJQ0FUSU9OPC9jb21tYW5kPi4KICAgICAgPC9wYXJhPgpAQCAt MTY0LDcgKzE2NCw3IEBAIEFMVEVSIFNVQlNDUklQVElPTiA8cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+bmFtZTwvcmVwbGFjZWFibGU+IFJFTkFNRSBUTyA8CiAgICAgICAgICAg U3BlY2lmaWVzIHdoZXRoZXIgdG8gY29weSBwcmUtZXhpc3RpbmcgZGF0YSBpbiB0aGUgcHVi bGljYXRpb25zCiAgICAgICAgICAgdGhhdCBhcmUgYmVpbmcgc3Vic2NyaWJlZCB0byB3aGVu IHRoZSByZXBsaWNhdGlvbiBzdGFydHMuCiAgICAgICAgICAgVGhlIGRlZmF1bHQgaXMgPGxp dGVyYWw+dHJ1ZTwvbGl0ZXJhbD4uICAoUHJldmlvdXNseS1zdWJzY3JpYmVkCi0gICAgICAg ICAgdGFibGVzIGFyZSBub3QgY29waWVkLikKKyAgICAgICAgICB0YWJsZXMgYW5kIHNlcXVl bmNlcyBhcmUgbm90IGNvcGllZC4pCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgIDwvbGlz dGl0ZW0+CiAgICAgICAgPC92YXJsaXN0ZW50cnk+CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1 YmxpY2F0aW9uLmMKaW5kZXggNjM1NzliMmY4Mi4uMmQ1YmM3M2E5NiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5k L2NhdGFsb2cvcGdfcHVibGljYXRpb24uYwpAQCAtNTQsNyArNTQsOCBAQCBjaGVja19wdWJs aWNhdGlvbl9hZGRfcmVsYXRpb24oUmVsYXRpb24gdGFyZ2V0cmVsKQogewogCS8qIE11c3Qg YmUgYSByZWd1bGFyIG9yIHBhcnRpdGlvbmVkIHRhYmxlICovCiAJaWYgKFJlbGF0aW9uR2V0 Rm9ybSh0YXJnZXRyZWwpLT5yZWxraW5kICE9IFJFTEtJTkRfUkVMQVRJT04gJiYKLQkJUmVs YXRpb25HZXRGb3JtKHRhcmdldHJlbCktPnJlbGtpbmQgIT0gUkVMS0lORF9QQVJUSVRJT05F RF9UQUJMRSkKKwkJUmVsYXRpb25HZXRGb3JtKHRhcmdldHJlbCktPnJlbGtpbmQgIT0gUkVM S0lORF9QQVJUSVRJT05FRF9UQUJMRSAmJgorCQlSZWxhdGlvbkdldEZvcm0odGFyZ2V0cmVs KS0+cmVsa2luZCAhPSBSRUxLSU5EX1NFUVVFTkNFKQogCQllcmVwb3J0KEVSUk9SLAogCQkJ CShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAogCQkJCSBlcnJt c2coImNhbm5vdCBhZGQgcmVsYXRpb24gXCIlc1wiIHRvIHB1YmxpY2F0aW9uIiwKQEAgLTEz MSw3ICsxMzIsOCBAQCBzdGF0aWMgYm9vbAogaXNfcHVibGlzaGFibGVfY2xhc3MoT2lkIHJl bGlkLCBGb3JtX3BnX2NsYXNzIHJlbHR1cGxlKQogewogCXJldHVybiAocmVsdHVwbGUtPnJl bGtpbmQgPT0gUkVMS0lORF9SRUxBVElPTiB8fAotCQkJcmVsdHVwbGUtPnJlbGtpbmQgPT0g UkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkgJiYKKwkJCXJlbHR1cGxlLT5yZWxraW5kID09 IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUgfHwKKwkJCXJlbHR1cGxlLT5yZWxraW5kID09 IFJFTEtJTkRfU0VRVUVOQ0UpICYmCiAJCSFJc0NhdGFsb2dSZWxhdGlvbk9pZChyZWxpZCkg JiYKIAkJcmVsdHVwbGUtPnJlbHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1BFUk1B TkVOVCAmJgogCQlyZWxpZCA+PSBGaXJzdE5vcm1hbE9iamVjdElkOwpAQCAtNDgwLDYgKzQ4 MiwxMSBAQCBHZXRQdWJsaWNhdGlvblJlbGF0aW9ucyhPaWQgcHViaWQsIFB1YmxpY2F0aW9u UGFydE9wdCBwdWJfcGFydG9wdCkKIAkJRm9ybV9wZ19wdWJsaWNhdGlvbl9yZWwgcHVicmVs OwogCiAJCXB1YnJlbCA9IChGb3JtX3BnX3B1YmxpY2F0aW9uX3JlbCkgR0VUU1RSVUNUKHR1 cCk7CisKKwkJLyogc2tpcCBzZXF1ZW5jZXMgaGVyZSAqLworCQlpZiAoZ2V0X3JlbF9yZWxr aW5kKHB1YnJlbC0+cHJyZWxpZCkgPT0gUkVMS0lORF9TRVFVRU5DRSkKKwkJCWNvbnRpbnVl OworCiAJCXJlc3VsdCA9IEdldFB1YlBhcnRpdGlvbk9wdGlvblJlbGF0aW9ucyhyZXN1bHQs IHB1Yl9wYXJ0b3B0LAogCQkJCQkJCQkJCQkJcHVicmVsLT5wcnJlbGlkKTsKIAl9CkBAIC00 OTAsNiArNDk3LDQ5IEBAIEdldFB1YmxpY2F0aW9uUmVsYXRpb25zKE9pZCBwdWJpZCwgUHVi bGljYXRpb25QYXJ0T3B0IHB1Yl9wYXJ0b3B0KQogCXJldHVybiByZXN1bHQ7CiB9CiAKKy8q CisgKiBHZXRzIGxpc3Qgb2YgcmVsYXRpb24gb2lkcyBmb3IgYSBwdWJsaWNhdGlvbiAoc2Vx dWVuY2VzIG9ubHkpLgorICoKKyAqIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3Igbm9y bWFsIHB1YmxpY2F0aW9ucywgdGhlIEZPUiBBTEwgVEFCTEVTCisgKiBzaG91bGQgdXNlIEdl dEFsbFNlcXVlbmNlc1B1YmxpY2F0aW9uUmVsYXRpb25zKCkuCisgKi8KK0xpc3QgKgorR2V0 UHVibGljYXRpb25TZXF1ZW5jZVJlbGF0aW9ucyhPaWQgcHViaWQpCit7CisJTGlzdAkgICAq cmVzdWx0OworCVJlbGF0aW9uCXB1YnJlbHNyZWw7CisJU2NhbktleURhdGEgc2NhbmtleTsK KwlTeXNTY2FuRGVzYyBzY2FuOworCUhlYXBUdXBsZQl0dXA7CisKKwkvKiBGaW5kIGFsbCBw dWJsaWNhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZSByZWxhdGlvbi4gKi8KKwlwdWJyZWxz cmVsID0gdGFibGVfb3BlbihQdWJsaWNhdGlvblJlbFJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJl TG9jayk7CisKKwlTY2FuS2V5SW5pdCgmc2NhbmtleSwKKwkJCQlBbnVtX3BnX3B1YmxpY2F0 aW9uX3JlbF9wcnB1YmlkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwK KwkJCQlPYmplY3RJZEdldERhdHVtKHB1YmlkKSk7CisKKwlzY2FuID0gc3lzdGFibGVfYmVn aW5zY2FuKHB1YnJlbHNyZWwsIFB1YmxpY2F0aW9uUmVsUHJyZWxpZFBycHViaWRJbmRleElk LAorCQkJCQkJCSAgdHJ1ZSwgTlVMTCwgMSwgJnNjYW5rZXkpOworCisJcmVzdWx0ID0gTklM OworCXdoaWxlIChIZWFwVHVwbGVJc1ZhbGlkKHR1cCA9IHN5c3RhYmxlX2dldG5leHQoc2Nh bikpKQorCXsKKwkJRm9ybV9wZ19wdWJsaWNhdGlvbl9yZWwgcHVicmVsOworCisJCXB1YnJl bCA9IChGb3JtX3BnX3B1YmxpY2F0aW9uX3JlbCkgR0VUU1RSVUNUKHR1cCk7CisKKwkJaWYg KGdldF9yZWxfcmVsa2luZChwdWJyZWwtPnBycmVsaWQpID09IFJFTEtJTkRfU0VRVUVOQ0Up CisJCQlyZXN1bHQgPSBsYXBwZW5kX29pZChyZXN1bHQsIHB1YnJlbC0+cHJyZWxpZCk7CisJ fQorCisJc3lzdGFibGVfZW5kc2NhbihzY2FuKTsKKwl0YWJsZV9jbG9zZShwdWJyZWxzcmVs LCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIHJlc3VsdDsKK30KKwogLyoKICAqIEdl dHMgbGlzdCBvZiBwdWJsaWNhdGlvbiBvaWRzIGZvciBwdWJsaWNhdGlvbnMgbWFya2VkIGFz IEZPUiBBTEwgVEFCTEVTLgogICovCkBAIC03MzUsNiArNzg1LDQ2IEBAIEdldEFsbFNjaGVt YVB1YmxpY2F0aW9uUmVsYXRpb25zKE9pZCBwdWJpZCwgUHVibGljYXRpb25QYXJ0T3B0IHB1 Yl9wYXJ0b3B0KQogCXJldHVybiByZXN1bHQ7CiB9CiAKKy8qCisgKiBHZXRzIGxpc3Qgb2Yg YWxsIHJlbGF0aW9uIHB1Ymxpc2hlZCBieSBGT1IgQUxMIFRBQkxFUyBwdWJsaWNhdGlvbihz KS4KKyAqCisgKiBJZiB0aGUgcHVibGljYXRpb24gcHVibGlzaGVzIHBhcnRpdGlvbiBjaGFu Z2VzIHZpYSB0aGVpciByZXNwZWN0aXZlIHJvb3QKKyAqIHBhcnRpdGlvbmVkIHRhYmxlcywg d2UgbXVzdCBleGNsdWRlIHBhcnRpdGlvbnMgaW4gZmF2b3Igb2YgaW5jbHVkaW5nIHRoZQor ICogcm9vdCBwYXJ0aXRpb25lZCB0YWJsZXMuCisgKi8KK0xpc3QgKgorR2V0QWxsU2VxdWVu Y2VzUHVibGljYXRpb25SZWxhdGlvbnModm9pZCkKK3sKKwlSZWxhdGlvbgljbGFzc1JlbDsK KwlTY2FuS2V5RGF0YSBrZXlbMV07CisJVGFibGVTY2FuRGVzYyBzY2FuOworCUhlYXBUdXBs ZQl0dXBsZTsKKwlMaXN0CSAgICpyZXN1bHQgPSBOSUw7CisKKwljbGFzc1JlbCA9IHRhYmxl X29wZW4oUmVsYXRpb25SZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJU2Nhbktl eUluaXQoJmtleVswXSwKKwkJCQlBbnVtX3BnX2NsYXNzX3JlbGtpbmQsCisJCQkJQlRFcXVh bFN0cmF0ZWd5TnVtYmVyLCBGX0NIQVJFUSwKKwkJCQlDaGFyR2V0RGF0dW0oUkVMS0lORF9T RVFVRU5DRSkpOworCisJc2NhbiA9IHRhYmxlX2JlZ2luc2Nhbl9jYXRhbG9nKGNsYXNzUmVs LCAxLCBrZXkpOworCisJd2hpbGUgKCh0dXBsZSA9IGhlYXBfZ2V0bmV4dChzY2FuLCBGb3J3 YXJkU2NhbkRpcmVjdGlvbikpICE9IE5VTEwpCisJeworCQlGb3JtX3BnX2NsYXNzIHJlbEZv cm0gPSAoRm9ybV9wZ19jbGFzcykgR0VUU1RSVUNUKHR1cGxlKTsKKwkJT2lkCQkJcmVsaWQg PSByZWxGb3JtLT5vaWQ7CisKKwkJaWYgKGlzX3B1Ymxpc2hhYmxlX2NsYXNzKHJlbGlkLCBy ZWxGb3JtKSkKKwkJCXJlc3VsdCA9IGxhcHBlbmRfb2lkKHJlc3VsdCwgcmVsaWQpOworCX0K KworCXRhYmxlX2VuZHNjYW4oc2Nhbik7CisKKwl0YWJsZV9jbG9zZShjbGFzc1JlbCwgQWNj ZXNzU2hhcmVMb2NrKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCiAvKgogICogR2V0IHB1Ymxp Y2F0aW9uIHVzaW5nIG9pZAogICoKQEAgLTc1NywxMCArODQ3LDEyIEBAIEdldFB1YmxpY2F0 aW9uKE9pZCBwdWJpZCkKIAlwdWItPm9pZCA9IHB1YmlkOwogCXB1Yi0+bmFtZSA9IHBzdHJk dXAoTmFtZVN0cihwdWJmb3JtLT5wdWJuYW1lKSk7CiAJcHViLT5hbGx0YWJsZXMgPSBwdWJm b3JtLT5wdWJhbGx0YWJsZXM7CisJcHViLT5hbGxzZXF1ZW5jZXMgPSBwdWJmb3JtLT5wdWJh bGxzZXF1ZW5jZXM7CiAJcHViLT5wdWJhY3Rpb25zLnB1Ymluc2VydCA9IHB1YmZvcm0tPnB1 Ymluc2VydDsKIAlwdWItPnB1YmFjdGlvbnMucHVidXBkYXRlID0gcHViZm9ybS0+cHVidXBk YXRlOwogCXB1Yi0+cHViYWN0aW9ucy5wdWJkZWxldGUgPSBwdWJmb3JtLT5wdWJkZWxldGU7 CiAJcHViLT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlID0gcHViZm9ybS0+cHVidHJ1bmNhdGU7 CisJcHViLT5wdWJhY3Rpb25zLnB1YnNlcXVlbmNlID0gcHViZm9ybS0+cHVic2VxdWVuY2U7 CiAJcHViLT5wdWJ2aWFyb290ID0gcHViZm9ybS0+cHVidmlhcm9vdDsKIAogCVJlbGVhc2VT eXNDYWNoZSh0dXApOwpAQCAtOTE1LDMgKzEwMDcsNTYgQEAgcGdfZ2V0X3B1YmxpY2F0aW9u X3RhYmxlcyhQR19GVU5DVElPTl9BUkdTKQogCiAJU1JGX1JFVFVSTl9ET05FKGZ1bmNjdHgp OwogfQorCisvKgorICogUmV0dXJucyBPaWRzIG9mIHNlcXVlbmNlcyBpbiBhIHB1YmxpY2F0 aW9uLgorICovCitEYXR1bQorcGdfZ2V0X3B1YmxpY2F0aW9uX3NlcXVlbmNlcyhQR19GVU5D VElPTl9BUkdTKQoreworCUZ1bmNDYWxsQ29udGV4dCAqZnVuY2N0eDsKKwljaGFyCSAgICpw dWJuYW1lID0gdGV4dF90b19jc3RyaW5nKFBHX0dFVEFSR19URVhUX1BQKDApKTsKKwlQdWJs aWNhdGlvbiAqcHVibGljYXRpb247CisJTGlzdAkgICAqc2VxdWVuY2VzOworCisJLyogc3R1 ZmYgZG9uZSBvbmx5IG9uIHRoZSBmaXJzdCBjYWxsIG9mIHRoZSBmdW5jdGlvbiAqLworCWlm IChTUkZfSVNfRklSU1RDQUxMKCkpCisJeworCQlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7 CisKKwkJLyogY3JlYXRlIGEgZnVuY3Rpb24gY29udGV4dCBmb3IgY3Jvc3MtY2FsbCBwZXJz aXN0ZW5jZSAqLworCQlmdW5jY3R4ID0gU1JGX0ZJUlNUQ0FMTF9JTklUKCk7CisKKwkJLyog c3dpdGNoIHRvIG1lbW9yeSBjb250ZXh0IGFwcHJvcHJpYXRlIGZvciBtdWx0aXBsZSBmdW5j dGlvbiBjYWxscyAqLworCQlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGZ1 bmNjdHgtPm11bHRpX2NhbGxfbWVtb3J5X2N0eCk7CisKKwkJcHVibGljYXRpb24gPSBHZXRQ dWJsaWNhdGlvbkJ5TmFtZShwdWJuYW1lLCBmYWxzZSk7CisKKwkJLyoKKwkJICogUHVibGlj YXRpb25zIHN1cHBvcnQgcGFydGl0aW9uZWQgdGFibGVzLCBhbHRob3VnaCBhbGwgY2hhbmdl cyBhcmUKKwkJICogcmVwbGljYXRlZCB1c2luZyBsZWFmIHBhcnRpdGlvbiBpZGVudGl0eSBh bmQgc2NoZW1hLCBzbyB3ZSBvbmx5CisJCSAqIG5lZWQgdGhvc2UuCisJCSAqLworCQlpZiAo cHVibGljYXRpb24tPmFsbHNlcXVlbmNlcykKKwkJCXNlcXVlbmNlcyA9IEdldEFsbFNlcXVl bmNlc1B1YmxpY2F0aW9uUmVsYXRpb25zKCk7CisJCWVsc2UKKwkJCXNlcXVlbmNlcyA9IEdl dFB1YmxpY2F0aW9uU2VxdWVuY2VSZWxhdGlvbnMocHVibGljYXRpb24tPm9pZCk7CisKKwkJ ZnVuY2N0eC0+dXNlcl9mY3R4ID0gKHZvaWQgKikgc2VxdWVuY2VzOworCisJCU1lbW9yeUNv bnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKwl9CisKKwkvKiBzdHVmZiBkb25lIG9uIGV2 ZXJ5IGNhbGwgb2YgdGhlIGZ1bmN0aW9uICovCisJZnVuY2N0eCA9IFNSRl9QRVJDQUxMX1NF VFVQKCk7CisJc2VxdWVuY2VzID0gKExpc3QgKikgZnVuY2N0eC0+dXNlcl9mY3R4OworCisJ aWYgKGZ1bmNjdHgtPmNhbGxfY250ciA8IGxpc3RfbGVuZ3RoKHNlcXVlbmNlcykpCisJewor CQlPaWQJCQlyZWxpZCA9IGxpc3RfbnRoX29pZChzZXF1ZW5jZXMsIGZ1bmNjdHgtPmNhbGxf Y250cik7CisKKwkJU1JGX1JFVFVSTl9ORVhUKGZ1bmNjdHgsIE9iamVjdElkR2V0RGF0dW0o cmVsaWQpKTsKKwl9CisKKwlTUkZfUkVUVVJOX0RPTkUoZnVuY2N0eCk7Cit9CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92aWV3cy5zcWwgYi9zcmMvYmFja2Vu ZC9jYXRhbG9nL3N5c3RlbV92aWV3cy5zcWwKaW5kZXggZWI1NjA5NTVjZC4uMmMxMmQzNzNj MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsCisr KyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbApAQCAtMzcyLDYgKzM3 MiwxNiBAQCBDUkVBVEUgVklFVyBwZ19wdWJsaWNhdGlvbl90YWJsZXMgQVMKICAgICAgICAg IHBnX2NsYXNzIEMgSk9JTiBwZ19uYW1lc3BhY2UgTiBPTiAoTi5vaWQgPSBDLnJlbG5hbWVz cGFjZSkKICAgICBXSEVSRSBDLm9pZCA9IEdQVC5yZWxpZDsKIAorQ1JFQVRFIFZJRVcgcGdf cHVibGljYXRpb25fc2VxdWVuY2VzIEFTCisgICAgU0VMRUNUCisgICAgICAgIFAucHVibmFt ZSBBUyBwdWJuYW1lLAorICAgICAgICBOLm5zcG5hbWUgQVMgc2NoZW1hbmFtZSwKKyAgICAg ICAgQy5yZWxuYW1lIEFTIHNlcXVlbmNlbmFtZQorICAgIEZST00gcGdfcHVibGljYXRpb24g UCwKKyAgICAgICAgIExBVEVSQUwgcGdfZ2V0X3B1YmxpY2F0aW9uX3NlcXVlbmNlcyhQLnB1 Ym5hbWUpIEdQVCwKKyAgICAgICAgIHBnX2NsYXNzIEMgSk9JTiBwZ19uYW1lc3BhY2UgTiBP TiAoTi5vaWQgPSBDLnJlbG5hbWVzcGFjZSkKKyAgICBXSEVSRSBDLm9pZCA9IEdQVC5yZWxp ZDsKKwogQ1JFQVRFIFZJRVcgcGdfbG9ja3MgQVMKICAgICBTRUxFQ1QgKiBGUk9NIHBnX2xv Y2tfc3RhdHVzKCkgQVMgTDsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMv cHVibGljYXRpb25jbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNt ZHMuYwppbmRleCA3ZDRhMGU5NWY2Li5lOGRmYjFhMDY4IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9wdWJsaWNhdGlvbmNtZHMuYwpAQCAtMTYsNiArMTYsNyBAQAogCiAjaW5jbHVkZSAi YWNjZXNzL2dlbmFtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5oIgorI2lu Y2x1ZGUgImFjY2Vzcy9yZWxhdGlvbi5oIgogI2luY2x1ZGUgImFjY2Vzcy90YWJsZS5oIgog I2luY2x1ZGUgImFjY2Vzcy94YWN0LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9jYXRhbG9nLmgi CkBAIC01OSw2ICs2MCwxMiBAQCBzdGF0aWMgdm9pZCBQdWJsaWNhdGlvbkFkZFNjaGVtYXMo T2lkIHB1YmlkLCBMaXN0ICpzY2hlbWFzLCBib29sIGlmX25vdF9leGlzdHMsCiAJCQkJCQkJ CSAgQWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0bXQpOwogc3RhdGljIHZvaWQgUHVibGljYXRp b25Ecm9wU2NoZW1hcyhPaWQgcHViaWQsIExpc3QgKnNjaGVtYXMsIGJvb2wgbWlzc2luZ19v ayk7CiAKK3N0YXRpYyBMaXN0ICpPcGVuU2VxdWVuY2VMaXN0KExpc3QgKnNlcXVlbmNlcyk7 CitzdGF0aWMgdm9pZCBDbG9zZVNlcXVlbmNlTGlzdChMaXN0ICpyZWxzKTsKK3N0YXRpYyB2 b2lkIFB1YmxpY2F0aW9uQWRkU2VxdWVuY2VzKE9pZCBwdWJpZCwgTGlzdCAqcmVscywgYm9v bCBpZl9ub3RfZXhpc3RzLAorCQkJCQkJCQkgQWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0bXQp Oworc3RhdGljIHZvaWQgUHVibGljYXRpb25Ecm9wU2VxdWVuY2VzKE9pZCBwdWJpZCwgTGlz dCAqcmVscywgYm9vbCBtaXNzaW5nX29rKTsKKwogc3RhdGljIHZvaWQKIHBhcnNlX3B1Ymxp Y2F0aW9uX29wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCQkJICBMaXN0ICpvcHRp b25zLApAQCAtNzcsNiArODQsNyBAQCBwYXJzZV9wdWJsaWNhdGlvbl9vcHRpb25zKFBhcnNl U3RhdGUgKnBzdGF0ZSwKIAlwdWJhY3Rpb25zLT5wdWJ1cGRhdGUgPSB0cnVlOwogCXB1YmFj dGlvbnMtPnB1YmRlbGV0ZSA9IHRydWU7CiAJcHViYWN0aW9ucy0+cHVidHJ1bmNhdGUgPSB0 cnVlOworCXB1YmFjdGlvbnMtPnB1YnNlcXVlbmNlID0gdHJ1ZTsKIAkqcHVibGlzaF92aWFf cGFydGl0aW9uX3Jvb3QgPSBmYWxzZTsKIAogCS8qIFBhcnNlIG9wdGlvbnMgKi8KQEAgLTEw MSw2ICsxMDksNyBAQCBwYXJzZV9wdWJsaWNhdGlvbl9vcHRpb25zKFBhcnNlU3RhdGUgKnBz dGF0ZSwKIAkJCXB1YmFjdGlvbnMtPnB1YnVwZGF0ZSA9IGZhbHNlOwogCQkJcHViYWN0aW9u cy0+cHViZGVsZXRlID0gZmFsc2U7CiAJCQlwdWJhY3Rpb25zLT5wdWJ0cnVuY2F0ZSA9IGZh bHNlOworCQkJcHViYWN0aW9ucy0+cHVic2VxdWVuY2UgPSBmYWxzZTsKIAogCQkJKnB1Ymxp c2hfZ2l2ZW4gPSB0cnVlOwogCQkJcHVibGlzaCA9IGRlZkdldFN0cmluZyhkZWZlbCk7CkBA IC0xMjMsNiArMTMyLDggQEAgcGFyc2VfcHVibGljYXRpb25fb3B0aW9ucyhQYXJzZVN0YXRl ICpwc3RhdGUsCiAJCQkJCXB1YmFjdGlvbnMtPnB1YmRlbGV0ZSA9IHRydWU7CiAJCQkJZWxz ZSBpZiAoc3RyY21wKHB1Ymxpc2hfb3B0LCAidHJ1bmNhdGUiKSA9PSAwKQogCQkJCQlwdWJh Y3Rpb25zLT5wdWJ0cnVuY2F0ZSA9IHRydWU7CisJCQkJZWxzZSBpZiAoc3RyY21wKHB1Ymxp c2hfb3B0LCAic2VxdWVuY2UiKSA9PSAwKQorCQkJCQlwdWJhY3Rpb25zLT5wdWJzZXF1ZW5j ZSA9IHRydWU7CiAJCQkJZWxzZQogCQkJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkJCShlcnJj b2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKQEAgLTE0OSw3ICsxNjAsOSBAQCBwYXJzZV9w dWJsaWNhdGlvbl9vcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwKICAqLwogc3RhdGljIHZv aWQKIE9iamVjdHNJblB1YmxpY2F0aW9uVG9PaWRzKExpc3QgKnB1Ym9ianNwZWNfbGlzdCwg UGFyc2VTdGF0ZSAqcHN0YXRlLAotCQkJCQkJICAgTGlzdCAqKnJlbHMsIExpc3QgKipzY2hl bWFzKQorCQkJCQkJICAgTGlzdCAqKnRhYmxlcywgTGlzdCAqKnNlcXVlbmNlcywKKwkJCQkJ CSAgIExpc3QgKip0YWJsZXNfc2NoZW1hcywgTGlzdCAqKnNlcXVlbmNlc19zY2hlbWFzLAor CQkJCQkJICAgTGlzdCAqKnNjaGVtYXMpCiB7CiAJTGlzdENlbGwgICAqY2VsbDsKIAlQdWJs aWNhdGlvbk9ialNwZWMgKnB1Ym9iajsKQEAgLTE2NywxMiArMTgwLDIzIEBAIE9iamVjdHNJ blB1YmxpY2F0aW9uVG9PaWRzKExpc3QgKnB1Ym9ianNwZWNfbGlzdCwgUGFyc2VTdGF0ZSAq cHN0YXRlLAogCQlzd2l0Y2ggKHB1Ym9iai0+cHVib2JqdHlwZSkKIAkJewogCQkJY2FzZSBQ VUJMSUNBVElPTk9CSl9UQUJMRToKLQkJCQkqcmVscyA9IGxhcHBlbmQoKnJlbHMsIHB1Ym9i ai0+cHVidGFibGUpOworCQkJCSp0YWJsZXMgPSBsYXBwZW5kKCp0YWJsZXMsIHB1Ym9iai0+ cHVidGFibGUpOworCQkJCWJyZWFrOworCQkJY2FzZSBQVUJMSUNBVElPTk9CSl9TRVFVRU5D RToKKwkJCQkqc2VxdWVuY2VzID0gbGFwcGVuZCgqc2VxdWVuY2VzLCBwdWJvYmotPnB1YnRh YmxlKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgUFVCTElDQVRJT05PQkpfVEFCTEVfSU5fU0NI RU1BOgogCQkJCXNjaGVtYWlkID0gZ2V0X25hbWVzcGFjZV9vaWQocHVib2JqLT5uYW1lLCBm YWxzZSk7CiAKIAkJCQkvKiBGaWx0ZXIgb3V0IGR1cGxpY2F0ZXMgaWYgdXNlciBzcGVjaWZp ZXMgInNjaDEsIHNjaDEiICovCisJCQkJKnRhYmxlc19zY2hlbWFzID0gbGlzdF9hcHBlbmRf dW5pcXVlX29pZCgqdGFibGVzX3NjaGVtYXMsIHNjaGVtYWlkKTsKKwkJCQkqc2NoZW1hcyA9 IGxpc3RfYXBwZW5kX3VuaXF1ZV9vaWQoKnNjaGVtYXMsIHNjaGVtYWlkKTsKKwkJCQlicmVh azsKKwkJCWNhc2UgUFVCTElDQVRJT05PQkpfU0VRVUVOQ0VfSU5fU0NIRU1BOgorCQkJCXNj aGVtYWlkID0gZ2V0X25hbWVzcGFjZV9vaWQocHVib2JqLT5uYW1lLCBmYWxzZSk7CisKKwkJ CQkvKiBGaWx0ZXIgb3V0IGR1cGxpY2F0ZXMgaWYgdXNlciBzcGVjaWZpZXMgInNjaDEsIHNj aDEiICovCisJCQkJKnNlcXVlbmNlc19zY2hlbWFzID0gbGlzdF9hcHBlbmRfdW5pcXVlX29p ZCgqc2VxdWVuY2VzX3NjaGVtYXMsIHNjaGVtYWlkKTsKIAkJCQkqc2NoZW1hcyA9IGxpc3Rf YXBwZW5kX3VuaXF1ZV9vaWQoKnNjaGVtYXMsIHNjaGVtYWlkKTsKIAkJCQlicmVhazsKIAkJ CWNhc2UgUFVCTElDQVRJT05PQkpfVEFCTEVfSU5fQ1VSX1NDSEVNQToKQEAgLTE4Niw2ICsy MTAsMjEgQEAgT2JqZWN0c0luUHVibGljYXRpb25Ub09pZHMoTGlzdCAqcHVib2Jqc3BlY19s aXN0LCBQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJbGlzdF9mcmVlKHNlYXJjaF9wYXRoKTsK IAogCQkJCS8qIEZpbHRlciBvdXQgZHVwbGljYXRlcyBpZiB1c2VyIHNwZWNpZmllcyAic2No MSwgc2NoMSIgKi8KKwkJCQkqdGFibGVzX3NjaGVtYXMgPSBsaXN0X2FwcGVuZF91bmlxdWVf b2lkKCp0YWJsZXNfc2NoZW1hcywgc2NoZW1haWQpOworCQkJCSpzY2hlbWFzID0gbGlzdF9h cHBlbmRfdW5pcXVlX29pZCgqc2NoZW1hcywgc2NoZW1haWQpOworCQkJCWJyZWFrOworCQkJ Y2FzZSBQVUJMSUNBVElPTk9CSl9TRVFVRU5DRV9JTl9DVVJfU0NIRU1BOgorCQkJCXNlYXJj aF9wYXRoID0gZmV0Y2hfc2VhcmNoX3BhdGgoZmFsc2UpOworCQkJCWlmIChzZWFyY2hfcGF0 aCA9PSBOSUwpIC8qIG5vdGhpbmcgdmFsaWQgaW4gc2VhcmNoX3BhdGg/ICovCisJCQkJCWVy ZXBvcnQoRVJST1IsCisJCQkJCQkJZXJyY29kZShFUlJDT0RFX1VOREVGSU5FRF9TQ0hFTUEp LAorCQkJCQkJCWVycm1zZygibm8gc2NoZW1hIGhhcyBiZWVuIHNlbGVjdGVkIGZvciBDVVJS RU5UX1NDSEVNQSIpKTsKKworCQkJCXNjaGVtYWlkID0gbGluaXRpYWxfb2lkKHNlYXJjaF9w YXRoKTsKKwkJCQlsaXN0X2ZyZWUoc2VhcmNoX3BhdGgpOworCisJCQkJLyogRmlsdGVyIG91 dCBkdXBsaWNhdGVzIGlmIHVzZXIgc3BlY2lmaWVzICJzY2gxLCBzY2gxIiAqLworCQkJCSpz ZXF1ZW5jZXNfc2NoZW1hcyA9IGxpc3RfYXBwZW5kX3VuaXF1ZV9vaWQoKnNlcXVlbmNlc19z Y2hlbWFzLCBzY2hlbWFpZCk7CiAJCQkJKnNjaGVtYXMgPSBsaXN0X2FwcGVuZF91bmlxdWVf b2lkKCpzY2hlbWFzLCBzY2hlbWFpZCk7CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgpAQCAt MjUxLDcgKzI5MCwxMCBAQCBDcmVhdGVQdWJsaWNhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUs IENyZWF0ZVB1YmxpY2F0aW9uU3RtdCAqc3RtdCkKIAlib29sCQlwdWJsaXNoX3ZpYV9wYXJ0 aXRpb25fcm9vdF9naXZlbjsKIAlib29sCQlwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdDsK IAlBY2xSZXN1bHQJYWNscmVzdWx0OwotCUxpc3QJICAgKnJlbGF0aW9ucyA9IE5JTDsKKwlM aXN0CSAgICp0YWJsZXMgPSBOSUw7CisJTGlzdAkgICAqc2VxdWVuY2VzID0gTklMOworCUxp c3QJICAgKnRhYmxlc19zY2hlbWFpZGxpc3QgPSBOSUw7CisJTGlzdAkgICAqc2VxdWVuY2Vz X3NjaGVtYWlkbGlzdCA9IE5JTDsKIAlMaXN0CSAgICpzY2hlbWFpZGxpc3QgPSBOSUw7CiAK IAkvKiBtdXN0IGhhdmUgQ1JFQVRFIHByaXZpbGVnZSBvbiBkYXRhYmFzZSAqLwpAQCAtMzA2 LDYgKzM0OCw4IEBAIENyZWF0ZVB1YmxpY2F0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3Jl YXRlUHVibGljYXRpb25TdG10ICpzdG10KQogCQlCb29sR2V0RGF0dW0ocHViYWN0aW9ucy5w dWJkZWxldGUpOwogCXZhbHVlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YnRydW5jYXRlIC0g MV0gPQogCQlCb29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSk7CisJdmFsdWVz W0FudW1fcGdfcHVibGljYXRpb25fcHVic2VxdWVuY2UgLSAxXSA9CisJCUJvb2xHZXREYXR1 bShwdWJhY3Rpb25zLnB1YnNlcXVlbmNlKTsKIAl2YWx1ZXNbQW51bV9wZ19wdWJsaWNhdGlv bl9wdWJ2aWFyb290IC0gMV0gPQogCQlCb29sR2V0RGF0dW0ocHVibGlzaF92aWFfcGFydGl0 aW9uX3Jvb3QpOwogCkBAIC0zMzAsMjYgKzM3NCw0MCBAQCBDcmVhdGVQdWJsaWNhdGlvbihQ YXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVB1YmxpY2F0aW9uU3RtdCAqc3RtdCkKIAl9CiAJ ZWxzZQogCXsKLQkJT2JqZWN0c0luUHVibGljYXRpb25Ub09pZHMoc3RtdC0+cHVib2JqZWN0 cywgcHN0YXRlLCAmcmVsYXRpb25zLAorCQlPYmplY3RzSW5QdWJsaWNhdGlvblRvT2lkcyhz dG10LT5wdWJvYmplY3RzLCBwc3RhdGUsCisJCQkJCQkJCSAgICZ0YWJsZXMsICZzZXF1ZW5j ZXMsCisJCQkJCQkJCSAgICZ0YWJsZXNfc2NoZW1haWRsaXN0LAorCQkJCQkJCQkgICAmc2Vx dWVuY2VzX3NjaGVtYWlkbGlzdCwKIAkJCQkJCQkJICAgJnNjaGVtYWlkbGlzdCk7CiAKIAkJ LyogRk9SIEFMTCBUQUJMRVMgSU4gU0NIRU1BIHJlcXVpcmVzIHN1cGVydXNlciAqLwotCQlp ZiAobGlzdF9sZW5ndGgoc2NoZW1haWRsaXN0KSA+IDAgJiYgIXN1cGVydXNlcigpKQorCQlp ZiAobGlzdF9sZW5ndGgodGFibGVzX3NjaGVtYWlkbGlzdCkgPiAwICYmICFzdXBlcnVzZXIo KSkKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCWVycmNvZGUoRVJSQ09ERV9JTlNVRkZJQ0lF TlRfUFJJVklMRUdFKSwKIAkJCQkJZXJybXNnKCJtdXN0IGJlIHN1cGVydXNlciB0byBjcmVh dGUgRk9SIEFMTCBUQUJMRVMgSU4gU0NIRU1BIHB1YmxpY2F0aW9uIikpOwogCi0JCWlmIChs aXN0X2xlbmd0aChyZWxhdGlvbnMpID4gMCkKKwkJaWYgKGxpc3RfbGVuZ3RoKHRhYmxlcykg PiAwKQogCQl7CiAJCQlMaXN0CSAgICpyZWxzOwogCi0JCQlyZWxzID0gT3BlblRhYmxlTGlz dChyZWxhdGlvbnMpOwotCQkJQ2hlY2tPYmpTY2hlbWFOb3RBbHJlYWR5SW5QdWJsaWNhdGlv bihyZWxzLCBzY2hlbWFpZGxpc3QsCisJCQlyZWxzID0gT3BlblRhYmxlTGlzdCh0YWJsZXMp OworCQkJQ2hlY2tPYmpTY2hlbWFOb3RBbHJlYWR5SW5QdWJsaWNhdGlvbihyZWxzLCB0YWJs ZXNfc2NoZW1haWRsaXN0LAogCQkJCQkJCQkJCQkJICBQVUJMSUNBVElPTk9CSl9UQUJMRSk7 CiAJCQlQdWJsaWNhdGlvbkFkZFRhYmxlcyhwdWJvaWQsIHJlbHMsIHRydWUsIE5VTEwpOwog CQkJQ2xvc2VUYWJsZUxpc3QocmVscyk7CiAJCX0KIAorCQlpZiAobGlzdF9sZW5ndGgoc2Vx dWVuY2VzKSA+IDApCisJCXsKKwkJCUxpc3QJICAgKnJlbHM7CisKKwkJCXJlbHMgPSBPcGVu U2VxdWVuY2VMaXN0KHNlcXVlbmNlcyk7CisJCQlDaGVja09ialNjaGVtYU5vdEFscmVhZHlJ blB1YmxpY2F0aW9uKHJlbHMsIHNlcXVlbmNlc19zY2hlbWFpZGxpc3QsCisJCQkJCQkJCQkJ CQkgIFBVQkxJQ0FUSU9OT0JKX1NFUVVFTkNFKTsKKwkJCVB1YmxpY2F0aW9uQWRkVGFibGVz KHB1Ym9pZCwgcmVscywgdHJ1ZSwgTlVMTCk7CisJCQlDbG9zZVNlcXVlbmNlTGlzdChyZWxz KTsKKwkJfQorCiAJCWlmIChsaXN0X2xlbmd0aChzY2hlbWFpZGxpc3QpID4gMCkKIAkJewog CQkJLyoKQEAgLTY1MSwxMiArNzA5LDEzIEBAIEFsdGVyUHVibGljYXRpb25TY2hlbWFzKEFs dGVyUHVibGljYXRpb25TdG10ICpzdG10LAogICovCiBzdGF0aWMgdm9pZAogQ2hlY2tBbHRl clB1YmxpY2F0aW9uKEFsdGVyUHVibGljYXRpb25TdG10ICpzdG10LCBIZWFwVHVwbGUgdHVw LAotCQkJCQkgIExpc3QgKnRhYmxlcywgTGlzdCAqc2NoZW1haWRsaXN0KQorCQkJCQkgIExp c3QgKnRhYmxlcywgTGlzdCAqdGFibGVzX3NjaGVtYWlkbGlzdCwKKwkJCQkJICBMaXN0ICpz ZXF1ZW5jZXMsIExpc3QgKnNlcXVlbmNlc19zY2hlbWFpZGxpc3QpCiB7CiAJRm9ybV9wZ19w dWJsaWNhdGlvbiBwdWJmb3JtID0gKEZvcm1fcGdfcHVibGljYXRpb24pIEdFVFNUUlVDVCh0 dXApOwogCiAJaWYgKChzdG10LT5hY3Rpb24gPT0gREVGRUxFTV9BREQgfHwgc3RtdC0+YWN0 aW9uID09IERFRkVMRU1fU0VUKSAmJgotCQlzY2hlbWFpZGxpc3QgJiYgIXN1cGVydXNlcigp KQorCQkodGFibGVzX3NjaGVtYWlkbGlzdCB8fCBzZXF1ZW5jZXNfc2NoZW1haWRsaXN0KSAm JiAhc3VwZXJ1c2VyKCkpCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09E RV9JTlNVRkZJQ0lFTlRfUFJJVklMRUdFKSwKIAkJCQkgZXJybXNnKCJtdXN0IGJlIHN1cGVy dXNlciB0byBhZGQgb3Igc2V0IHNjaGVtYXMiKSkpOwpAQCAtNjY1LDEzICs3MjQsMjQgQEAg Q2hlY2tBbHRlclB1YmxpY2F0aW9uKEFsdGVyUHVibGljYXRpb25TdG10ICpzdG10LCBIZWFw VHVwbGUgdHVwLAogCSAqIENoZWNrIHRoYXQgdXNlciBpcyBhbGxvd2VkIHRvIG1hbmlwdWxh dGUgdGhlIHB1YmxpY2F0aW9uIHRhYmxlcyBpbgogCSAqIHNjaGVtYQogCSAqLwotCWlmIChz Y2hlbWFpZGxpc3QgJiYgcHViZm9ybS0+cHViYWxsdGFibGVzKQorCWlmICh0YWJsZXNfc2No ZW1haWRsaXN0ICYmIHB1YmZvcm0tPnB1YmFsbHRhYmxlcykKIAkJZXJlcG9ydChFUlJPUiwK IAkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRF KSwKIAkJCQkgZXJybXNnKCJwdWJsaWNhdGlvbiBcIiVzXCIgaXMgZGVmaW5lZCBhcyBGT1Ig QUxMIFRBQkxFUyIsCiAJCQkJCQlOYW1lU3RyKHB1YmZvcm0tPnB1Ym5hbWUpKSwKIAkJCQkg ZXJyZGV0YWlsKCJUYWJsZXMgZnJvbSBzY2hlbWEgY2Fubm90IGJlIGFkZGVkIHRvLCBkcm9w cGVkIGZyb20sIG9yIHNldCBvbiBGT1IgQUxMIFRBQkxFUyBwdWJsaWNhdGlvbnMuIikpKTsK IAorCS8qCisJICogQ2hlY2sgdGhhdCB1c2VyIGlzIGFsbG93ZWQgdG8gbWFuaXB1bGF0ZSB0 aGUgcHVibGljYXRpb24gc2VxdWVuY2VzIGluCisJICogc2NoZW1hCisJICovCisJaWYgKHNl cXVlbmNlc19zY2hlbWFpZGxpc3QgJiYgcHViZm9ybS0+cHViYWxsc2VxdWVuY2VzKQorCQll cmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVS RVFVSVNJVEVfU1RBVEUpLAorCQkJCSBlcnJtc2coInB1YmxpY2F0aW9uIFwiJXNcIiBpcyBk ZWZpbmVkIGFzIEZPUiBBTEwgU0VRVUVOQ0VTIiwKKwkJCQkJCU5hbWVTdHIocHViZm9ybS0+ cHVibmFtZSkpLAorCQkJCSBlcnJkZXRhaWwoIlNlcXVlbmNlcyBmcm9tIHNjaGVtYSBjYW5u b3QgYmUgYWRkZWQgdG8sIGRyb3BwZWQgZnJvbSwgb3Igc2V0IG9uIEZPUiBBTEwgU0VRVUVO Q0VTIHB1YmxpY2F0aW9ucy4iKSkpOworCiAJLyogQ2hlY2sgdGhhdCB1c2VyIGlzIGFsbG93 ZWQgdG8gbWFuaXB1bGF0ZSB0aGUgcHVibGljYXRpb24gdGFibGVzLiAqLwogCWlmICh0YWJs ZXMgJiYgcHViZm9ybS0+cHViYWxsdGFibGVzKQogCQllcmVwb3J0KEVSUk9SLApAQCAtNjc5 LDYgKzc0OSwxMDggQEAgQ2hlY2tBbHRlclB1YmxpY2F0aW9uKEFsdGVyUHVibGljYXRpb25T dG10ICpzdG10LCBIZWFwVHVwbGUgdHVwLAogCQkJCSBlcnJtc2coInB1YmxpY2F0aW9uIFwi JXNcIiBpcyBkZWZpbmVkIGFzIEZPUiBBTEwgVEFCTEVTIiwKIAkJCQkJCU5hbWVTdHIocHVi Zm9ybS0+cHVibmFtZSkpLAogCQkJCSBlcnJkZXRhaWwoIlRhYmxlcyBjYW5ub3QgYmUgYWRk ZWQgdG8gb3IgZHJvcHBlZCBmcm9tIEZPUiBBTEwgVEFCTEVTIHB1YmxpY2F0aW9ucy4iKSkp OworCisJLyogQ2hlY2sgdGhhdCB1c2VyIGlzIGFsbG93ZWQgdG8gbWFuaXB1bGF0ZSB0aGUg cHVibGljYXRpb24gdGFibGVzLiAqLworCWlmIChzZXF1ZW5jZXMgJiYgcHViZm9ybS0+cHVi YWxsc2VxdWVuY2VzKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVf T0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCSBlcnJtc2coInB1Ymxp Y2F0aW9uIFwiJXNcIiBpcyBkZWZpbmVkIGFzIEZPUiBBTEwgU0VRVUVOQ0VTIiwKKwkJCQkJ CU5hbWVTdHIocHViZm9ybS0+cHVibmFtZSkpLAorCQkJCSBlcnJkZXRhaWwoIlNlcXVlbmNl cyBjYW5ub3QgYmUgYWRkZWQgdG8gb3IgZHJvcHBlZCBmcm9tIEZPUiBBTEwgU0VRVUVOQ0VT IHB1YmxpY2F0aW9ucy4iKSkpOworfQorCisvKgorICogQWRkIG9yIHJlbW92ZSBzZXF1ZW5j ZSB0by9mcm9tIHB1YmxpY2F0aW9uLgorICovCitzdGF0aWMgdm9pZAorQWx0ZXJQdWJsaWNh dGlvblNlcXVlbmNlcyhBbHRlclB1YmxpY2F0aW9uU3RtdCAqc3RtdCwgSGVhcFR1cGxlIHR1 cCwKKwkJCQkJCSAgTGlzdCAqc2VxdWVuY2VzLCBMaXN0ICpzY2hlbWFpZGxpc3QpCit7CisJ TGlzdAkgICAqcmVscyA9IE5JTDsKKwlGb3JtX3BnX3B1YmxpY2F0aW9uIHB1YmZvcm0gPSAo Rm9ybV9wZ19wdWJsaWNhdGlvbikgR0VUU1RSVUNUKHR1cCk7CisJT2lkCQkJcHViaWQgPSBw dWJmb3JtLT5vaWQ7CisKKwkvKgorCSAqIEl0IGlzIHF1aXRlIHBvc3NpYmxlIHRoYXQgZm9y IHRoZSBTRVQgY2FzZSB1c2VyIGhhcyBub3Qgc3BlY2lmaWVkIGFueQorCSAqIHRhYmxlcyBp biB3aGljaCBjYXNlIHdlIG5lZWQgdG8gcmVtb3ZlIGFsbCB0aGUgZXhpc3RpbmcgdGFibGVz LgorCSAqLworCWlmICghc2VxdWVuY2VzICYmIHN0bXQtPmFjdGlvbiAhPSBERUZFTEVNX1NF VCkKKwkJcmV0dXJuOworCisJcmVscyA9IE9wZW5TZXF1ZW5jZUxpc3Qoc2VxdWVuY2VzKTsK KworCWlmIChzdG10LT5hY3Rpb24gPT0gREVGRUxFTV9BREQpCisJeworCQlMaXN0CSAgICpz Y2hlbWFzID0gTklMOworCisJCS8qCisJCSAqIENoZWNrIGlmIHRoZSByZWxhdGlvbiBpcyBt ZW1iZXIgb2YgdGhlIGV4aXN0aW5nIHNjaGVtYSBpbiB0aGUKKwkJICogcHVibGljYXRpb24g b3IgbWVtYmVyIG9mIHRoZSBzY2hlbWEgbGlzdCBzcGVjaWZpZWQuCisJCSAqLworCQlzY2hl bWFzID0gbGlzdF9jb25jYXRfY29weShzY2hlbWFpZGxpc3QsIEdldFB1YmxpY2F0aW9uU2No ZW1hcyhwdWJpZCkpOworCQlDaGVja09ialNjaGVtYU5vdEFscmVhZHlJblB1YmxpY2F0aW9u KHJlbHMsIHNjaGVtYXMsCisJCQkJCQkJCQkJCSAgUFVCTElDQVRJT05PQkpfU0VRVUVOQ0Up OworCQlQdWJsaWNhdGlvbkFkZFNlcXVlbmNlcyhwdWJpZCwgcmVscywgZmFsc2UsIHN0bXQp OworCX0KKwllbHNlIGlmIChzdG10LT5hY3Rpb24gPT0gREVGRUxFTV9EUk9QKQorCQlQdWJs aWNhdGlvbkRyb3BTZXF1ZW5jZXMocHViaWQsIHJlbHMsIGZhbHNlKTsKKwllbHNlCQkJCQkJ LyogREVGRUxFTV9TRVQgKi8KKwl7CisJCUxpc3QJICAgKm9sZHJlbGlkcyA9IEdldFB1Ymxp Y2F0aW9uUmVsYXRpb25zKHB1YmlkLAorCQkJCQkJCQkJCQkJCQlQVUJMSUNBVElPTl9QQVJU X1JPT1QpOworCQlMaXN0CSAgICpkZWxyZWxzID0gTklMOworCQlMaXN0Q2VsbCAgICpvbGRs YzsKKworCQlDaGVja09ialNjaGVtYU5vdEFscmVhZHlJblB1YmxpY2F0aW9uKHJlbHMsIHNj aGVtYWlkbGlzdCwKKwkJCQkJCQkJCQkJICBQVUJMSUNBVElPTk9CSl9TRVFVRU5DRSk7CisK KwkJLyogQ2FsY3VsYXRlIHdoaWNoIHJlbGF0aW9ucyB0byBkcm9wLiAqLworCQlmb3JlYWNo KG9sZGxjLCBvbGRyZWxpZHMpCisJCXsKKwkJCU9pZAkJCW9sZHJlbGlkID0gbGZpcnN0X29p ZChvbGRsYyk7CisJCQlMaXN0Q2VsbCAgICpuZXdsYzsKKwkJCWJvb2wJCWZvdW5kID0gZmFs c2U7CisKKwkJCWZvcmVhY2gobmV3bGMsIHJlbHMpCisJCQl7CisJCQkJUHVibGljYXRpb25S ZWxJbmZvICpuZXdwdWJyZWw7CisKKwkJCQluZXdwdWJyZWwgPSAoUHVibGljYXRpb25SZWxJ bmZvICopIGxmaXJzdChuZXdsYyk7CisJCQkJaWYgKFJlbGF0aW9uR2V0UmVsaWQobmV3cHVi cmVsLT5yZWxhdGlvbikgPT0gb2xkcmVsaWQpCisJCQkJeworCQkJCQlmb3VuZCA9IHRydWU7 CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCS8qIE5vdCB5ZXQgaW4gdGhlIGxpc3Qs IG9wZW4gaXQgYW5kIGFkZCB0byB0aGUgbGlzdCAqLworCQkJaWYgKCFmb3VuZCkKKwkJCXsK KwkJCQlSZWxhdGlvbglvbGRyZWw7CisJCQkJUHVibGljYXRpb25SZWxJbmZvICpwdWJyZWw7 CisKKwkJCQkvKiBXcmFwIHJlbGF0aW9uIGludG8gUHVibGljYXRpb25SZWxJbmZvICovCisJ CQkJb2xkcmVsID0gdGFibGVfb3BlbihvbGRyZWxpZCwgU2hhcmVVcGRhdGVFeGNsdXNpdmVM b2NrKTsKKworCQkJCXB1YnJlbCA9IHBhbGxvYyhzaXplb2YoUHVibGljYXRpb25SZWxJbmZv KSk7CisJCQkJcHVicmVsLT5yZWxhdGlvbiA9IG9sZHJlbDsKKworCQkJCWRlbHJlbHMgPSBs YXBwZW5kKGRlbHJlbHMsIHB1YnJlbCk7CisJCQl9CisJCX0KKworCQkvKiBBbmQgZHJvcCB0 aGVtLiAqLworCQlQdWJsaWNhdGlvbkRyb3BTZXF1ZW5jZXMocHViaWQsIGRlbHJlbHMsIHRy dWUpOworCisJCS8qCisJCSAqIERvbid0IGJvdGhlciBjYWxjdWxhdGluZyB0aGUgZGlmZmVy ZW5jZSBmb3IgYWRkaW5nLCB3ZSdsbCBjYXRjaCBhbmQKKwkJICogc2tpcCBleGlzdGluZyBv bmVzIHdoZW4gZG9pbmcgY2F0YWxvZyB1cGRhdGUuCisJCSAqLworCQlQdWJsaWNhdGlvbkFk ZFNlcXVlbmNlcyhwdWJpZCwgcmVscywgdHJ1ZSwgc3RtdCk7CisKKwkJQ2xvc2VTZXF1ZW5j ZUxpc3QoZGVscmVscyk7CisJfQorCisJQ2xvc2VTZXF1ZW5jZUxpc3QocmVscyk7CiB9CiAK IC8qCkBAIC03MTYsMTMgKzg4OCwyMSBAQCBBbHRlclB1YmxpY2F0aW9uKFBhcnNlU3RhdGUg KnBzdGF0ZSwgQWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0bXQpCiAJCUFsdGVyUHVibGljYXRp b25PcHRpb25zKHBzdGF0ZSwgc3RtdCwgcmVsLCB0dXApOwogCWVsc2UKIAl7Ci0JCUxpc3QJ ICAgKnJlbGF0aW9ucyA9IE5JTDsKKwkJTGlzdAkgICAqdGFibGVzID0gTklMOworCQlMaXN0 CSAgICpzZXF1ZW5jZXMgPSBOSUw7CisJCUxpc3QJICAgKnRhYmxlc19zY2hlbWFpZGxpc3Qg PSBOSUw7CisJCUxpc3QJICAgKnNlcXVlbmNlc19zY2hlbWFpZGxpc3QgPSBOSUw7CiAJCUxp c3QJICAgKnNjaGVtYWlkbGlzdCA9IE5JTDsKIAotCQlPYmplY3RzSW5QdWJsaWNhdGlvblRv T2lkcyhzdG10LT5wdWJvYmplY3RzLCBwc3RhdGUsICZyZWxhdGlvbnMsCisJCU9iamVjdHNJ blB1YmxpY2F0aW9uVG9PaWRzKHN0bXQtPnB1Ym9iamVjdHMsIHBzdGF0ZSwKKwkJCQkJCQkJ ICAgJnRhYmxlcywgJnNlcXVlbmNlcywKKwkJCQkJCQkJICAgJnRhYmxlc19zY2hlbWFpZGxp c3QsCisJCQkJCQkJCSAgICZzZXF1ZW5jZXNfc2NoZW1haWRsaXN0LAogCQkJCQkJCQkgICAm c2NoZW1haWRsaXN0KTsKIAotCQlDaGVja0FsdGVyUHVibGljYXRpb24oc3RtdCwgdHVwLCBy ZWxhdGlvbnMsIHNjaGVtYWlkbGlzdCk7CisJCUNoZWNrQWx0ZXJQdWJsaWNhdGlvbihzdG10 LCB0dXAsCisJCQkJCQkJICB0YWJsZXMsIHRhYmxlc19zY2hlbWFpZGxpc3QsCisJCQkJCQkJ ICBzZXF1ZW5jZXMsIHNlcXVlbmNlc19zY2hlbWFpZGxpc3QpOwogCiAJCS8qCiAJCSAqIExv Y2sgdGhlIHB1YmxpY2F0aW9uIHNvIG5vYm9keSBlbHNlIGNhbiBkbyBhbnl0aGluZyB3aXRo IGl0LiBUaGlzCkBAIC03NDcsNyArOTI3LDkgQEAgQWx0ZXJQdWJsaWNhdGlvbihQYXJzZVN0 YXRlICpwc3RhdGUsIEFsdGVyUHVibGljYXRpb25TdG10ICpzdG10KQogCQkJCQllcnJtc2co InB1YmxpY2F0aW9uIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIsCiAJCQkJCQkgICBzdG10LT5w dWJuYW1lKSk7CiAKLQkJQWx0ZXJQdWJsaWNhdGlvblRhYmxlcyhzdG10LCB0dXAsIHJlbGF0 aW9ucywgc2NoZW1haWRsaXN0KTsKKwkJQWx0ZXJQdWJsaWNhdGlvblRhYmxlcyhzdG10LCB0 dXAsIHRhYmxlcywgdGFibGVzX3NjaGVtYWlkbGlzdCk7CisJCUFsdGVyUHVibGljYXRpb25T ZXF1ZW5jZXMoc3RtdCwgdHVwLCBzZXF1ZW5jZXMsIHNlcXVlbmNlc19zY2hlbWFpZGxpc3Qp OworCiAJCUFsdGVyUHVibGljYXRpb25TY2hlbWFzKHN0bXQsIHR1cCwgc2NoZW1haWRsaXN0 KTsKIAl9CiAKQEAgLTExNTUsNiArMTMzNywxNDQgQEAgUHVibGljYXRpb25Ecm9wU2NoZW1h cyhPaWQgcHViaWQsIExpc3QgKnNjaGVtYXMsIGJvb2wgbWlzc2luZ19vaykKIAl9CiB9CiAK Ky8qCisgKiBPcGVuIHJlbGF0aW9ucyBzcGVjaWZpZWQgYnkgYSBQdWJsaWNhdGlvblRhYmxl IGxpc3QuCisgKiBJbiB0aGUgcmV0dXJuZWQgbGlzdCBvZiBQdWJsaWNhdGlvblJlbEluZm8s IHRhYmxlcyBhcmUgbG9ja2VkCisgKiBpbiBTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2sgbW9k ZSBpbiBvcmRlciB0byBhZGQgdGhlbSB0byBhIHB1YmxpY2F0aW9uLgorICovCitzdGF0aWMg TGlzdCAqCitPcGVuU2VxdWVuY2VMaXN0KExpc3QgKnNlcXVlbmNlcykKK3sKKwlMaXN0CSAg ICpyZWxpZHMgPSBOSUw7CisJTGlzdAkgICAqcmVscyA9IE5JTDsKKwlMaXN0Q2VsbCAgICps YzsKKworCS8qCisJICogT3Blbiwgc2hhcmUtbG9jaywgYW5kIGNoZWNrIGFsbCB0aGUgZXhw bGljaXRseS1zcGVjaWZpZWQgcmVsYXRpb25zCisJICovCisJZm9yZWFjaChsYywgc2VxdWVu Y2VzKQorCXsKKwkJUHVibGljYXRpb25UYWJsZSAqcyA9IGxmaXJzdF9ub2RlKFB1YmxpY2F0 aW9uVGFibGUsIGxjKTsKKwkJUmVsYXRpb24JcmVsOworCQlPaWQJCQlteXJlbGlkOworCQlQ dWJsaWNhdGlvblJlbEluZm8gKnB1Yl9yZWw7CisKKwkJLyogQWxsb3cgcXVlcnkgY2FuY2Vs IGluIGNhc2UgdGhpcyB0YWtlcyBhIGxvbmcgdGltZSAqLworCQlDSEVDS19GT1JfSU5URVJS VVBUUygpOworCisJCXJlbCA9IHRhYmxlX29wZW5ydihzLT5yZWxhdGlvbiwgU2hhcmVVcGRh dGVFeGNsdXNpdmVMb2NrKTsKKwkJbXlyZWxpZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsKTsK KworCQkvKgorCQkgKiBGaWx0ZXIgb3V0IGR1cGxpY2F0ZXMgaWYgdXNlciBzcGVjaWZpZXMg ImZvbywgZm9vIi4KKwkJICoKKwkJICogTm90ZSB0aGF0IHRoaXMgYWxnb3JpdGhtIGlzIGtu b3duIHRvIG5vdCBiZSB2ZXJ5IGVmZmljaWVudCAoTyhOXjIpKQorCQkgKiBidXQgZ2l2ZW4g dGhhdCBpdCBvbmx5IHdvcmtzIG9uIGxpc3Qgb2YgdGFibGVzIGdpdmVuIHRvIHVzIGJ5IHVz ZXIKKwkJICogaXQncyBkZWVtZWQgYWNjZXB0YWJsZS4KKwkJICovCisJCWlmIChsaXN0X21l bWJlcl9vaWQocmVsaWRzLCBteXJlbGlkKSkKKwkJeworCQkJdGFibGVfY2xvc2UocmVsLCBT aGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2spOworCQkJY29udGludWU7CisJCX0KKworCQlwdWJf cmVsID0gcGFsbG9jKHNpemVvZihQdWJsaWNhdGlvblJlbEluZm8pKTsKKwkJcHViX3JlbC0+ cmVsYXRpb24gPSByZWw7CisJCXJlbHMgPSBsYXBwZW5kKHJlbHMsIHB1Yl9yZWwpOworCQly ZWxpZHMgPSBsYXBwZW5kX29pZChyZWxpZHMsIG15cmVsaWQpOworCX0KKworCWxpc3RfZnJl ZShyZWxpZHMpOworCisJcmV0dXJuIHJlbHM7Cit9CisKKy8qCisgKiBDbG9zZSBhbGwgcmVs YXRpb25zIGluIHRoZSBsaXN0LgorICovCitzdGF0aWMgdm9pZAorQ2xvc2VTZXF1ZW5jZUxp c3QoTGlzdCAqcmVscykKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKworCWZvcmVhY2gobGMsIHJl bHMpCisJeworCQlQdWJsaWNhdGlvblJlbEluZm8gKnB1Yl9yZWw7CisKKwkJcHViX3JlbCA9 IChQdWJsaWNhdGlvblJlbEluZm8gKikgbGZpcnN0KGxjKTsKKwkJdGFibGVfY2xvc2UocHVi X3JlbC0+cmVsYXRpb24sIE5vTG9jayk7CisJfQorfQorCisvKgorICogQWRkIGxpc3RlZCB0 YWJsZXMgdG8gdGhlIHB1YmxpY2F0aW9uLgorICovCitzdGF0aWMgdm9pZAorUHVibGljYXRp b25BZGRTZXF1ZW5jZXMoT2lkIHB1YmlkLCBMaXN0ICpyZWxzLCBib29sIGlmX25vdF9leGlz dHMsCisJCQkJCQlBbHRlclB1YmxpY2F0aW9uU3RtdCAqc3RtdCkKK3sKKwlMaXN0Q2VsbCAg ICpsYzsKKworCUFzc2VydCghc3RtdCB8fCAhc3RtdC0+Zm9yX2FsbF9zZXF1ZW5jZXMpOwor CisJZm9yZWFjaChsYywgcmVscykKKwl7CisJCVB1YmxpY2F0aW9uUmVsSW5mbyAqcHViX3Jl bCA9IChQdWJsaWNhdGlvblJlbEluZm8gKikgbGZpcnN0KGxjKTsKKwkJUmVsYXRpb24JcmVs ID0gcHViX3JlbC0+cmVsYXRpb247CisJCU9iamVjdEFkZHJlc3Mgb2JqOworCisJCS8qIE11 c3QgYmUgb3duZXIgb2YgdGhlIHNlcXVlbmNlIG9yIHN1cGVydXNlci4gKi8KKwkJaWYgKCFw Z19jbGFzc19vd25lcmNoZWNrKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgR2V0VXNlcklkKCkp KQorCQkJYWNsY2hlY2tfZXJyb3IoQUNMQ0hFQ0tfTk9UX09XTkVSLCBnZXRfcmVsa2luZF9v Ymp0eXBlKHJlbC0+cmRfcmVsLT5yZWxraW5kKSwKKwkJCQkJCSAgIFJlbGF0aW9uR2V0UmVs YXRpb25OYW1lKHJlbCkpOworCisJCW9iaiA9IHB1YmxpY2F0aW9uX2FkZF9yZWxhdGlvbihw dWJpZCwgcHViX3JlbCwgaWZfbm90X2V4aXN0cyk7CisJCWlmIChzdG10KQorCQl7CisJCQlF dmVudFRyaWdnZXJDb2xsZWN0U2ltcGxlQ29tbWFuZChvYmosIEludmFsaWRPYmplY3RBZGRy ZXNzLAorCQkJCQkJCQkJCQkgKE5vZGUgKikgc3RtdCk7CisKKwkJCUludm9rZU9iamVjdFBv c3RDcmVhdGVIb29rKFB1YmxpY2F0aW9uUmVsUmVsYXRpb25JZCwKKwkJCQkJCQkJCSAgIG9i ai5vYmplY3RJZCwgMCk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBSZW1vdmUgbGlzdGVkIHNl cXVlbmNlcyBmcm9tIHRoZSBwdWJsaWNhdGlvbi4KKyAqLworc3RhdGljIHZvaWQKK1B1Ymxp Y2F0aW9uRHJvcFNlcXVlbmNlcyhPaWQgcHViaWQsIExpc3QgKnJlbHMsIGJvb2wgbWlzc2lu Z19vaykKK3sKKwlPYmplY3RBZGRyZXNzIG9iajsKKwlMaXN0Q2VsbCAgICpsYzsKKwlPaWQJ CQlwcmlkOworCisJZm9yZWFjaChsYywgcmVscykKKwl7CisJCVJlbGF0aW9uCXJlbCA9IChS ZWxhdGlvbikgbGZpcnN0KGxjKTsKKwkJT2lkCQkJcmVsaWQgPSBSZWxhdGlvbkdldFJlbGlk KHJlbCk7CisKKwkJcHJpZCA9IEdldFN5c0NhY2hlT2lkMihQVUJMSUNBVElPTlJFTE1BUCwg QW51bV9wZ19wdWJsaWNhdGlvbl9yZWxfb2lkLAorCQkJCQkJCSAgIE9iamVjdElkR2V0RGF0 dW0ocmVsaWQpLAorCQkJCQkJCSAgIE9iamVjdElkR2V0RGF0dW0ocHViaWQpKTsKKwkJaWYg KCFPaWRJc1ZhbGlkKHByaWQpKQorCQl7CisJCQlpZiAobWlzc2luZ19vaykKKwkJCQljb250 aW51ZTsKKworCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRF RklORURfT0JKRUNUKSwKKwkJCQkJIGVycm1zZygicmVsYXRpb24gXCIlc1wiIGlzIG5vdCBw YXJ0IG9mIHRoZSBwdWJsaWNhdGlvbiIsCisJCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5h bWUocmVsKSkpKTsKKwkJfQorCisJCU9iamVjdEFkZHJlc3NTZXQob2JqLCBQdWJsaWNhdGlv blJlbFJlbGF0aW9uSWQsIHByaWQpOworCQlwZXJmb3JtRGVsZXRpb24oJm9iaiwgRFJPUF9D QVNDQURFLCAwKTsKKwl9Cit9CisKKwogLyoKICAqIEludGVybmFsIHdvcmtob3JzZSBmb3Ig Y2hhbmdpbmcgYSBwdWJsaWNhdGlvbiBvd25lcgogICovCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVu Y2UuYwppbmRleCA5MmQxOTY2ZjM0Li5iMjJmODNlYTgyIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3Nl cXVlbmNlLmMKQEAgLTM0Nyw2ICszNDcsODUgQEAgUmVzZXRTZXF1ZW5jZShPaWQgc2VxX3Jl bGlkKQogCXJlbGF0aW9uX2Nsb3NlKHNlcV9yZWwsIE5vTG9jayk7CiB9CiAKKy8qCisgKiBS ZXNldCBhIHNlcXVlbmNlIHRvIGl0cyBpbml0aWFsIHZhbHVlLgorICoKKyAqIFRoZSBjaGFu Z2UgaXMgbWFkZSB0cmFuc2FjdGlvbmFsbHksIHNvIHRoYXQgb24gZmFpbHVyZSBvZiB0aGUg Y3VycmVudAorICogdHJhbnNhY3Rpb24sIHRoZSBzZXF1ZW5jZSB3aWxsIGJlIHJlc3RvcmVk IHRvIGl0cyBwcmV2aW91cyBzdGF0ZS4KKyAqIFdlIGRvIHRoYXQgYnkgY3JlYXRpbmcgYSB3 aG9sZSBuZXcgcmVsZmlsZW5vZGUgZm9yIHRoZSBzZXF1ZW5jZTsgc28gdGhpcworICogd29y a3MgbXVjaCBsaWtlIHRoZSByZXdyaXRpbmcgZm9ybXMgb2YgQUxURVIgVEFCTEUuCisgKgor ICogQ2FsbGVyIGlzIGFzc3VtZWQgdG8gaGF2ZSBhY3F1aXJlZCBBY2Nlc3NFeGNsdXNpdmVM b2NrIG9uIHRoZSBzZXF1ZW5jZSwKKyAqIHdoaWNoIG11c3Qgbm90IGJlIHJlbGVhc2VkIHVu dGlsIGVuZCBvZiB0cmFuc2FjdGlvbi4gIENhbGxlciBpcyBhbHNvCisgKiByZXNwb25zaWJs ZSBmb3IgcGVybWlzc2lvbnMgY2hlY2tpbmcuCisgKi8KK3ZvaWQKK1Jlc2V0U2VxdWVuY2Uy KE9pZCBzZXFfcmVsaWQsIGludDY0IGxhc3RfdmFsdWUsIGludDY0IGxvZ19jbnQsIGJvb2wg aXNfY2FsbGVkKQoreworCVJlbGF0aW9uCXNlcV9yZWw7CisJU2VxVGFibGUJZWxtOworCUZv cm1fcGdfc2VxdWVuY2VfZGF0YSBzZXE7CisJQnVmZmVyCQlidWY7CisJSGVhcFR1cGxlRGF0 YSBzZXFkYXRhdHVwbGU7CisJSGVhcFR1cGxlCXR1cGxlOworCisJLyoKKwkgKiBSZWFkIHRo ZSBvbGQgc2VxdWVuY2UuICBUaGlzIGRvZXMgYSBiaXQgbW9yZSB3b3JrIHRoYW4gcmVhbGx5 CisJICogbmVjZXNzYXJ5LCBidXQgaXQncyBzaW1wbGUsIGFuZCB3ZSBkbyB3YW50IHRvIGRv dWJsZS1jaGVjayB0aGF0IGl0J3MKKwkgKiBpbmRlZWQgYSBzZXF1ZW5jZS4KKwkgKi8KKwlp bml0X3NlcXVlbmNlKHNlcV9yZWxpZCwgJmVsbSwgJnNlcV9yZWwpOworCSh2b2lkKSByZWFk X3NlcV90dXBsZShzZXFfcmVsLCAmYnVmLCAmc2VxZGF0YXR1cGxlKTsKKworCS8qCisJICog Q29weSB0aGUgZXhpc3Rpbmcgc2VxdWVuY2UgdHVwbGUuCisJICovCisJdHVwbGUgPSBoZWFw X2NvcHl0dXBsZSgmc2VxZGF0YXR1cGxlKTsKKworCS8qIE5vdyB3ZSdyZSBkb25lIHdpdGgg dGhlIG9sZCBwYWdlICovCisJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWYpOworCisJLyoKKwkg KiBNb2RpZnkgdGhlIGNvcGllZCB0dXBsZSB0byBleGVjdXRlIHRoZSByZXN0YXJ0IChjb21w YXJlIHRoZSBSRVNUQVJUCisJICogYWN0aW9uIGluIEFsdGVyU2VxdWVuY2UpCisJICovCisJ c2VxID0gKEZvcm1fcGdfc2VxdWVuY2VfZGF0YSkgR0VUU1RSVUNUKHR1cGxlKTsKKwlzZXEt Pmxhc3RfdmFsdWUgPSBsYXN0X3ZhbHVlOworCXNlcS0+aXNfY2FsbGVkID0gaXNfY2FsbGVk OworCXNlcS0+bG9nX2NudCA9IGxvZ19jbnQ7CisKKwkvKgorCSAqIENyZWF0ZSBhIG5ldyBz dG9yYWdlIGZpbGUgZm9yIHRoZSBzZXF1ZW5jZS4KKwkgKi8KKwlSZWxhdGlvblNldE5ld1Jl bGZpbGVub2RlKHNlcV9yZWwsIHNlcV9yZWwtPnJkX3JlbC0+cmVscGVyc2lzdGVuY2UpOwor CisJLyoKKwkgKiBFbnN1cmUgc2VxdWVuY2UncyByZWxmcm96ZW54aWQgaXMgYXQgMCwgc2lu Y2UgaXQgd29uJ3QgY29udGFpbiBhbnkKKwkgKiB1bmZyb3plbiBYSURzLiAgU2FtZSB3aXRo IHJlbG1pbm14aWQsIHNpbmNlIGEgc2VxdWVuY2Ugd2lsbCBuZXZlcgorCSAqIGNvbnRhaW4g bXVsdGl4YWN0cy4KKwkgKi8KKwlBc3NlcnQoc2VxX3JlbC0+cmRfcmVsLT5yZWxmcm96ZW54 aWQgPT0gSW52YWxpZFRyYW5zYWN0aW9uSWQpOworCUFzc2VydChzZXFfcmVsLT5yZF9yZWwt PnJlbG1pbm14aWQgPT0gSW52YWxpZE11bHRpWGFjdElkKTsKKworCS8qCisJICogSW5zZXJ0 IHRoZSBtb2RpZmllZCB0dXBsZSBpbnRvIHRoZSBuZXcgc3RvcmFnZSBmaWxlLgorCSAqCisJ ICogWFhYIE1heWJlIHRoaXMgc2hvdWxkIGFsc28gdXNlIGNyZWF0ZWQ9dHJ1ZSwganVzdCBs aWtlIHRoZSBvdGhlciBwbGFjZXMKKwkgKiBjYWxsaW5nIGZpbGxfc2VxX3dpdGhfZGF0YS4g VGhhdCdzIHByb2JhYmx5IG5lZWRlZCBmb3IgY29ycmVjdCBjYXNjYWRpbmcKKwkgKiByZXBs aWNhdGlvbi4KKwkgKgorCSAqIFhYWCBUaGF0J2QgbWVhbiBhbGwgZmlsbF9zZXFfd2l0aF9k YXRhIGNhbGxlcnMgdXNlIGNyZWF0ZWQ9dHJ1ZSwgbWFraW5nCisJICogdGhlIHBhcmFtZXRl ciB1bm5lY2Vzc2FyeS4KKwkgKi8KKwlmaWxsX3NlcV93aXRoX2RhdGEoc2VxX3JlbCwgdHVw bGUpOworCisJLyogQ2xlYXIgbG9jYWwgY2FjaGUgc28gdGhhdCB3ZSBkb24ndCB0aGluayB3 ZSBoYXZlIGNhY2hlZCBudW1iZXJzICovCisJLyogTm90ZSB0aGF0IHdlIGRvIG5vdCBjaGFu Z2UgdGhlIGN1cnJ2YWwoKSBzdGF0ZSAqLworCWVsbS0+Y2FjaGVkID0gZWxtLT5sYXN0Owor CisJcmVsYXRpb25fY2xvc2Uoc2VxX3JlbCwgTm9Mb2NrKTsKK30KKwogLyoKICAqIEluaXRp YWxpemUgYSBzZXF1ZW5jZSdzIHJlbGF0aW9uIHdpdGggdGhlIHNwZWNpZmllZCB0dXBsZSBh cyBjb250ZW50CiAgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3N1YnNj cmlwdGlvbmNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMu YwppbmRleCBjNDdiYTI2MzY5Li41MDg2NTI2OTA0IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFu ZHMvc3Vic2NyaXB0aW9uY21kcy5jCkBAIC04NCw2ICs4NCw3IEBAIHR5cGVkZWYgc3RydWN0 IFN1Yk9wdHMKIH0gU3ViT3B0czsKIAogc3RhdGljIExpc3QgKmZldGNoX3RhYmxlX2xpc3Qo V2FsUmVjZWl2ZXJDb25uICp3cmNvbm4sIExpc3QgKnB1YmxpY2F0aW9ucyk7CitzdGF0aWMg TGlzdCAqZmV0Y2hfc2VxdWVuY2VfbGlzdChXYWxSZWNlaXZlckNvbm4gKndyY29ubiwgTGlz dCAqcHVibGljYXRpb25zKTsKIHN0YXRpYyB2b2lkIGNoZWNrX2R1cGxpY2F0ZXNfaW5fcHVi bGlzdChMaXN0ICpwdWJsaXN0LCBEYXR1bSAqZGF0dW1zKTsKIHN0YXRpYyBMaXN0ICptZXJn ZV9wdWJsaWNhdGlvbnMoTGlzdCAqb2xkcHVibGlzdCwgTGlzdCAqbmV3cHVibGlzdCwgYm9v bCBhZGRwdWIsIGNvbnN0IGNoYXIgKnN1Ym5hbWUpOwogc3RhdGljIHZvaWQgUmVwb3J0U2xv dENvbm5lY3Rpb25FcnJvcihMaXN0ICpyc3RhdGVzLCBPaWQgc3ViaWQsIGNoYXIgKnNsb3Ru YW1lLCBjaGFyICplcnIpOwpAQCAtNTAyLDYgKzUwMyw3IEBAIENyZWF0ZVN1YnNjcmlwdGlv bihQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVN1YnNjcmlwdGlvblN0bXQgKnN0bXQsCiAJ CWNoYXIJICAgKmVycjsKIAkJV2FsUmVjZWl2ZXJDb25uICp3cmNvbm47CiAJCUxpc3QJICAg KnRhYmxlczsKKwkJTGlzdAkgICAqc2VxdWVuY2VzOwogCQlMaXN0Q2VsbCAgICpsYzsKIAkJ Y2hhcgkJdGFibGVfc3RhdGU7CiAKQEAgLTU0MCw2ICs1NDIsMjYgQEAgQ3JlYXRlU3Vic2Ny aXB0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRlU3Vic2NyaXB0aW9uU3RtdCAqc3Rt dCwKIAkJCQkJCQkJCQlJbnZhbGlkWExvZ1JlY1B0cik7CiAJCQl9CiAKKwkJCS8qCisJCQkg KiBHZXQgdGhlIHNlcXVlbmNlIGxpc3QgZnJvbSBwdWJsaXNoZXIgYW5kIGJ1aWxkIGxvY2Fs IHNlcXVlbmNlCisJCQkgKiBzdGF0dXMgaW5mby4KKwkJCSAqLworCQkJc2VxdWVuY2VzID0g ZmV0Y2hfc2VxdWVuY2VfbGlzdCh3cmNvbm4sIHB1YmxpY2F0aW9ucyk7CisJCQlmb3JlYWNo KGxjLCBzZXF1ZW5jZXMpCisJCQl7CisJCQkJUmFuZ2VWYXIgICAqcnYgPSAoUmFuZ2VWYXIg KikgbGZpcnN0KGxjKTsKKwkJCQlPaWQJCQlyZWxpZDsKKworCQkJCXJlbGlkID0gUmFuZ2VW YXJHZXRSZWxpZChydiwgQWNjZXNzU2hhcmVMb2NrLCBmYWxzZSk7CisKKwkJCQkvKiBDaGVj ayBmb3Igc3VwcG9ydGVkIHJlbGtpbmQuICovCisJCQkJQ2hlY2tTdWJzY3JpcHRpb25SZWxr aW5kKGdldF9yZWxfcmVsa2luZChyZWxpZCksCisJCQkJCQkJCQkJIHJ2LT5zY2hlbWFuYW1l LCBydi0+cmVsbmFtZSk7CisKKwkJCQlBZGRTdWJzY3JpcHRpb25SZWxTdGF0ZShzdWJpZCwg cmVsaWQsIHRhYmxlX3N0YXRlLAorCQkJCQkJCQkJCUludmFsaWRYTG9nUmVjUHRyKTsKKwkJ CX0KKwogCQkJLyoKIAkJCSAqIElmIHJlcXVlc3RlZCwgY3JlYXRlIHBlcm1hbmVudCBzbG90 IGZvciB0aGUgc3Vic2NyaXB0aW9uLiBXZQogCQkJICogd29uJ3QgdXNlIHRoZSBpbml0aWFs IHNuYXBzaG90IGZvciBhbnl0aGluZywgc28gbm8gbmVlZCB0bwpAQCAtNzEyLDYgKzczNCwx MCBAQCBBbHRlclN1YnNjcmlwdGlvbl9yZWZyZXNoKFN1YnNjcmlwdGlvbiAqc3ViLCBib29s IGNvcHlfZGF0YSkKIAkJewogCQkJT2lkCQkJcmVsaWQgPSBzdWJyZWxfbG9jYWxfb2lkc1tv ZmZdOwogCisJCQkvKiBYWFggaWdub3JlIHNlcXVlbmNlcyAtIG1heWJlIGRvIHRoaXMgaW4g R2V0U3Vic2NyaXB0aW9uUmVsYXRpb25zPyAqLworCQkJaWYgKGdldF9yZWxfcmVsa2luZChy ZWxpZCkgPT0gUkVMS0lORF9TRVFVRU5DRSkKKwkJCQljb250aW51ZTsKKwogCQkJaWYgKCFi c2VhcmNoKCZyZWxpZCwgcHVicmVsX2xvY2FsX29pZHMsCiAJCQkJCQkgbGlzdF9sZW5ndGgo cHVicmVsX25hbWVzKSwgc2l6ZW9mKE9pZCksIG9pZF9jbXApKQogCQkJewpAQCAtODAzLDYg KzgyOSwxODMgQEAgQWx0ZXJTdWJzY3JpcHRpb25fcmVmcmVzaChTdWJzY3JpcHRpb24gKnN1 YiwgYm9vbCBjb3B5X2RhdGEpCiAJCQkJUmVwbGljYXRpb25TbG90RHJvcEF0UHViTm9kZSh3 cmNvbm4sIHN5bmNzbG90bmFtZSwgdHJ1ZSk7CiAJCQl9CiAJCX0KKworCQkvKgorCQkgKiBY WFggbm93IGRvIHRoZSBzYW1lIHRoaW5nIGZvciBzZXF1ZW5jZXMsIG1heWJlIGJlZm9yZSB0 aGUgcHJlY2VkaW5nCisJCSAqIGJsb2NrLCBvciBlYXJsaWVyPworCQkgKi8KKworCQkvKiBH ZXQgdGhlIHRhYmxlIGxpc3QgZnJvbSBwdWJsaXNoZXIuICovCisJCXB1YnJlbF9uYW1lcyA9 IGZldGNoX3NlcXVlbmNlX2xpc3Qod3Jjb25uLCBzdWItPnB1YmxpY2F0aW9ucyk7CisKKwkJ LyogR2V0IGxvY2FsIHRhYmxlIGxpc3QuICovCisJCXN1YnJlbF9zdGF0ZXMgPSBHZXRTdWJz Y3JpcHRpb25SZWxhdGlvbnMoc3ViLT5vaWQpOworCisJCS8qCisJCSAqIEJ1aWxkIHFzb3J0 ZWQgYXJyYXkgb2YgbG9jYWwgdGFibGUgb2lkcyBmb3IgZmFzdGVyIGxvb2t1cC4gVGhpcyBj YW4KKwkJICogcG90ZW50aWFsbHkgY29udGFpbiBhbGwgdGFibGVzIGluIHRoZSBkYXRhYmFz ZSBzbyBzcGVlZCBvZiBsb29rdXAKKwkJICogaXMgaW1wb3J0YW50LgorCQkgKi8KKwkJc3Vi cmVsX2xvY2FsX29pZHMgPSBwYWxsb2MobGlzdF9sZW5ndGgoc3VicmVsX3N0YXRlcykgKiBz aXplb2YoT2lkKSk7CisJCW9mZiA9IDA7CisJCWZvcmVhY2gobGMsIHN1YnJlbF9zdGF0ZXMp CisJCXsKKwkJCVN1YnNjcmlwdGlvblJlbFN0YXRlICpyZWxzdGF0ZSA9IChTdWJzY3JpcHRp b25SZWxTdGF0ZSAqKSBsZmlyc3QobGMpOworCisJCQlzdWJyZWxfbG9jYWxfb2lkc1tvZmYr K10gPSByZWxzdGF0ZS0+cmVsaWQ7CisJCX0KKwkJcXNvcnQoc3VicmVsX2xvY2FsX29pZHMs IGxpc3RfbGVuZ3RoKHN1YnJlbF9zdGF0ZXMpLAorCQkJICBzaXplb2YoT2lkKSwgb2lkX2Nt cCk7CisKKwkJLyoKKwkJICogUmVscyB0aGF0IHdlIHdhbnQgdG8gcmVtb3ZlIGZyb20gc3Vi c2NyaXB0aW9uIGFuZCBkcm9wIGFueSBzbG90cworCQkgKiBhbmQgb3JpZ2lucyBjb3JyZXNw b25kaW5nIHRvIHRoZW0uCisJCSAqLworCQlzdWJfcmVtb3ZlX3JlbHMgPSBwYWxsb2MobGlz dF9sZW5ndGgoc3VicmVsX3N0YXRlcykgKiBzaXplb2YoU3ViUmVtb3ZlUmVscykpOworCisJ CS8qCisJCSAqIFdhbGsgb3ZlciB0aGUgcmVtb3RlIHRhYmxlcyBhbmQgdHJ5IHRvIG1hdGNo IHRoZW0gdG8gbG9jYWxseSBrbm93bgorCQkgKiB0YWJsZXMuIElmIHRoZSB0YWJsZSBpcyBu b3Qga25vd24gbG9jYWxseSBjcmVhdGUgYSBuZXcgc3RhdGUgZm9yCisJCSAqIGl0LgorCQkg KgorCQkgKiBBbHNvIGJ1aWxkcyBhcnJheSBvZiBsb2NhbCBvaWRzIG9mIHJlbW90ZSB0YWJs ZXMgZm9yIHRoZSBuZXh0IHN0ZXAuCisJCSAqLworCQlvZmYgPSAwOworCQlwdWJyZWxfbG9j YWxfb2lkcyA9IHBhbGxvYyhsaXN0X2xlbmd0aChwdWJyZWxfbmFtZXMpICogc2l6ZW9mKE9p ZCkpOworCisJCWZvcmVhY2gobGMsIHB1YnJlbF9uYW1lcykKKwkJeworCQkJUmFuZ2VWYXIg ICAqcnYgPSAoUmFuZ2VWYXIgKikgbGZpcnN0KGxjKTsKKwkJCU9pZAkJCXJlbGlkOworCisJ CQlyZWxpZCA9IFJhbmdlVmFyR2V0UmVsaWQocnYsIEFjY2Vzc1NoYXJlTG9jaywgZmFsc2Up OworCisJCQkvKiBDaGVjayBmb3Igc3VwcG9ydGVkIHJlbGtpbmQuICovCisJCQlDaGVja1N1 YnNjcmlwdGlvblJlbGtpbmQoZ2V0X3JlbF9yZWxraW5kKHJlbGlkKSwKKwkJCQkJCQkJCSBy di0+c2NoZW1hbmFtZSwgcnYtPnJlbG5hbWUpOworCisJCQlwdWJyZWxfbG9jYWxfb2lkc1tv ZmYrK10gPSByZWxpZDsKKworCQkJaWYgKCFic2VhcmNoKCZyZWxpZCwgc3VicmVsX2xvY2Fs X29pZHMsCisJCQkJCQkgbGlzdF9sZW5ndGgoc3VicmVsX3N0YXRlcyksIHNpemVvZihPaWQp LCBvaWRfY21wKSkKKwkJCXsKKwkJCQlBZGRTdWJzY3JpcHRpb25SZWxTdGF0ZShzdWItPm9p ZCwgcmVsaWQsCisJCQkJCQkJCQkJY29weV9kYXRhID8gU1VCUkVMX1NUQVRFX0lOSVQgOiBT VUJSRUxfU1RBVEVfUkVBRFksCisJCQkJCQkJCQkJSW52YWxpZFhMb2dSZWNQdHIpOworCQkJ CWVyZXBvcnQoREVCVUcxLAorCQkJCQkJKGVycm1zZ19pbnRlcm5hbCgidGFibGUgXCIlcy4l c1wiIGFkZGVkIHRvIHN1YnNjcmlwdGlvbiBcIiVzXCIiLAorCQkJCQkJCQkJCSBydi0+c2No ZW1hbmFtZSwgcnYtPnJlbG5hbWUsIHN1Yi0+bmFtZSkpKTsKKwkJCX0KKwkJfQorCisJCS8q CisJCSAqIE5leHQgcmVtb3ZlIHN0YXRlIGZvciB0YWJsZXMgd2Ugc2hvdWxkIG5vdCBjYXJl IGFib3V0IGFueW1vcmUgdXNpbmcKKwkJICogdGhlIGRhdGEgd2UgY29sbGVjdGVkIGFib3Zl CisJCSAqLworCQlxc29ydChwdWJyZWxfbG9jYWxfb2lkcywgbGlzdF9sZW5ndGgocHVicmVs X25hbWVzKSwKKwkJCSAgc2l6ZW9mKE9pZCksIG9pZF9jbXApOworCisJCXJlbW92ZV9yZWxf bGVuID0gMDsKKwkJZm9yIChvZmYgPSAwOyBvZmYgPCBsaXN0X2xlbmd0aChzdWJyZWxfc3Rh dGVzKTsgb2ZmKyspCisJCXsKKwkJCU9pZAkJCXJlbGlkID0gc3VicmVsX2xvY2FsX29pZHNb b2ZmXTsKKworCQkJLyogWFhYIGlnbm9yZSBub24tc2VxdWVuY2VzIC0gbWF5YmUgZG8gdGhp cyBpbiBHZXRTdWJzY3JpcHRpb25SZWxhdGlvbnM/ICovCisJCQlpZiAoZ2V0X3JlbF9yZWxr aW5kKHJlbGlkKSAhPSBSRUxLSU5EX1NFUVVFTkNFKQorCQkJCWNvbnRpbnVlOworCisJCQlp ZiAoIWJzZWFyY2goJnJlbGlkLCBwdWJyZWxfbG9jYWxfb2lkcywKKwkJCQkJCSBsaXN0X2xl bmd0aChwdWJyZWxfbmFtZXMpLCBzaXplb2YoT2lkKSwgb2lkX2NtcCkpCisJCQl7CisJCQkJ Y2hhcgkJc3RhdGU7CisJCQkJWExvZ1JlY1B0cglzdGF0ZWxzbjsKKworCQkJCS8qCisJCQkJ ICogTG9jayBwZ19zdWJzY3JpcHRpb25fcmVsIHdpdGggQWNjZXNzRXhjbHVzaXZlTG9jayB0 bworCQkJCSAqIHByZXZlbnQgYW55IHJhY2UgY29uZGl0aW9ucyB3aXRoIHRoZSBhcHBseSB3 b3JrZXIKKwkJCQkgKiByZS1sYXVuY2hpbmcgd29ya2VycyBhdCB0aGUgc2FtZSB0aW1lIHRo aXMgY29kZSBpcyB0cnlpbmcKKwkJCQkgKiB0byByZW1vdmUgdGhvc2UgdGFibGVzLgorCQkJ CSAqCisJCQkJICogRXZlbiBpZiBuZXcgd29ya2VyIGZvciB0aGlzIHBhcnRpY3VsYXIgcmVs IGlzIHJlc3RhcnRlZCBpdAorCQkJCSAqIHdvbid0IGJlIGFibGUgdG8gbWFrZSBhbnkgcHJv Z3Jlc3MgYXMgd2UgaG9sZCBleGNsdXNpdmUKKwkJCQkgKiBsb2NrIG9uIHN1YnNjcmlwdGlv bl9yZWwgdGlsbCB0aGUgdHJhbnNhY3Rpb24gZW5kLiBJdCB3aWxsCisJCQkJICogc2ltcGx5 IGV4aXQgYXMgdGhlcmUgaXMgbm8gY29ycmVzcG9uZGluZyByZWwgZW50cnkuCisJCQkJICoK KwkJCQkgKiBUaGlzIGxvY2tpbmcgYWxzbyBlbnN1cmVzIHRoYXQgdGhlIHN0YXRlIG9mIHJl bHMgd29uJ3QKKwkJCQkgKiBjaGFuZ2UgdGlsbCB3ZSBhcmUgZG9uZSB3aXRoIHRoaXMgcmVm cmVzaCBvcGVyYXRpb24uCisJCQkJICovCisJCQkJaWYgKCFyZWwpCisJCQkJCXJlbCA9IHRh YmxlX29wZW4oU3Vic2NyaXB0aW9uUmVsUmVsYXRpb25JZCwgQWNjZXNzRXhjbHVzaXZlTG9j ayk7CisKKwkJCQkvKiBMYXN0IGtub3duIHJlbCBzdGF0ZS4gKi8KKwkJCQlzdGF0ZSA9IEdl dFN1YnNjcmlwdGlvblJlbFN0YXRlKHN1Yi0+b2lkLCByZWxpZCwgJnN0YXRlbHNuKTsKKwor CQkJCXN1Yl9yZW1vdmVfcmVsc1tyZW1vdmVfcmVsX2xlbl0ucmVsaWQgPSByZWxpZDsKKwkJ CQlzdWJfcmVtb3ZlX3JlbHNbcmVtb3ZlX3JlbF9sZW4rK10uc3RhdGUgPSBzdGF0ZTsKKwor CQkJCVJlbW92ZVN1YnNjcmlwdGlvblJlbChzdWItPm9pZCwgcmVsaWQpOworCisJCQkJbG9n aWNhbHJlcF93b3JrZXJfc3RvcChzdWItPm9pZCwgcmVsaWQpOworCisJCQkJLyoKKwkJCQkg KiBGb3IgUkVBRFkgc3RhdGUsIHdlIHdvdWxkIGhhdmUgYWxyZWFkeSBkcm9wcGVkIHRoZQor CQkJCSAqIHRhYmxlc3luYyBvcmlnaW4uCisJCQkJICovCisJCQkJaWYgKHN0YXRlICE9IFNV QlJFTF9TVEFURV9SRUFEWSkKKwkJCQl7CisJCQkJCWNoYXIJCW9yaWdpbm5hbWVbTkFNRURB VEFMRU5dOworCisJCQkJCS8qCisJCQkJCSAqIERyb3AgdGhlIHRhYmxlc3luYydzIG9yaWdp biB0cmFja2luZyBpZiBleGlzdHMuCisJCQkJCSAqCisJCQkJCSAqIEl0IGlzIHBvc3NpYmxl IHRoYXQgdGhlIG9yaWdpbiBpcyBub3QgeWV0IGNyZWF0ZWQgZm9yCisJCQkJCSAqIHRhYmxl c3luYyB3b3JrZXIsIHRoaXMgY2FuIGhhcHBlbiBmb3IgdGhlIHN0YXRlcyBiZWZvcmUKKwkJ CQkJICogU1VCUkVMX1NUQVRFX0ZJTklTSEVEQ09QWS4gVGhlIGFwcGx5IHdvcmtlciBjYW4g YWxzbworCQkJCQkgKiBjb25jdXJyZW50bHkgdHJ5IHRvIGRyb3AgdGhlIG9yaWdpbiBhbmQg YnkgdGhpcyB0aW1lCisJCQkJCSAqIHRoZSBvcmlnaW4gbWlnaHQgYmUgYWxyZWFkeSByZW1v dmVkLiBGb3IgdGhlc2UgcmVhc29ucywKKwkJCQkJICogcGFzc2luZyBtaXNzaW5nX29rID0g dHJ1ZS4KKwkJCQkJICovCisJCQkJCVJlcGxpY2F0aW9uT3JpZ2luTmFtZUZvclRhYmxlc3lu YyhzdWItPm9pZCwgcmVsaWQsIG9yaWdpbm5hbWUsCisJCQkJCQkJCQkJCQkJICBzaXplb2Yo b3JpZ2lubmFtZSkpOworCQkJCQlyZXBsb3JpZ2luX2Ryb3BfYnlfbmFtZShvcmlnaW5uYW1l LCB0cnVlLCBmYWxzZSk7CisJCQkJfQorCisJCQkJZXJlcG9ydChERUJVRzEsCisJCQkJCQko ZXJybXNnX2ludGVybmFsKCJ0YWJsZSBcIiVzLiVzXCIgcmVtb3ZlZCBmcm9tIHN1YnNjcmlw dGlvbiBcIiVzXCIiLAorCQkJCQkJCQkJCSBnZXRfbmFtZXNwYWNlX25hbWUoZ2V0X3JlbF9u YW1lc3BhY2UocmVsaWQpKSwKKwkJCQkJCQkJCQkgZ2V0X3JlbF9uYW1lKHJlbGlkKSwKKwkJ CQkJCQkJCQkgc3ViLT5uYW1lKSkpOworCQkJfQorCQl9CisKKwkJLyoKKwkJICogRHJvcCB0 aGUgdGFibGVzeW5jIHNsb3RzIGFzc29jaWF0ZWQgd2l0aCByZW1vdmVkIHRhYmxlcy4gVGhp cyBoYXMKKwkJICogdG8gYmUgYXQgdGhlIGVuZCBiZWNhdXNlIG90aGVyd2lzZSBpZiB0aGVy ZSBpcyBhbiBlcnJvciB3aGlsZSBkb2luZworCQkgKiB0aGUgZGF0YWJhc2Ugb3BlcmF0aW9u cyB3ZSB3b24ndCBiZSBhYmxlIHRvIHJvbGxiYWNrIGRyb3BwZWQgc2xvdHMuCisJCSAqLwor CQlmb3IgKG9mZiA9IDA7IG9mZiA8IHJlbW92ZV9yZWxfbGVuOyBvZmYrKykKKwkJeworCQkJ aWYgKHN1Yl9yZW1vdmVfcmVsc1tvZmZdLnN0YXRlICE9IFNVQlJFTF9TVEFURV9SRUFEWSAm JgorCQkJCXN1Yl9yZW1vdmVfcmVsc1tvZmZdLnN0YXRlICE9IFNVQlJFTF9TVEFURV9TWU5D RE9ORSkKKwkJCXsKKwkJCQljaGFyCQlzeW5jc2xvdG5hbWVbTkFNRURBVEFMRU5dID0gezB9 OworCisJCQkJLyoKKwkJCQkgKiBGb3IgUkVBRFkvU1lOQ0RPTkUgc3RhdGVzIHdlIGtub3cg dGhlIHRhYmxlc3luYyBzbG90IGhhcworCQkJCSAqIGFscmVhZHkgYmVlbiBkcm9wcGVkIGJ5 IHRoZSB0YWJsZXN5bmMgd29ya2VyLgorCQkJCSAqCisJCQkJICogRm9yIG90aGVyIHN0YXRl cywgdGhlcmUgaXMgbm8gY2VydGFpbnR5LCBtYXliZSB0aGUgc2xvdAorCQkJCSAqIGRvZXMg bm90IGV4aXN0IHlldC4gQWxzbywgaWYgd2UgZmFpbCBhZnRlciByZW1vdmluZyBzb21lIG9m CisJCQkJICogdGhlIHNsb3RzLCBuZXh0IHRpbWUsIGl0IHdpbGwgYWdhaW4gdHJ5IHRvIGRy b3AgYWxyZWFkeQorCQkJCSAqIGRyb3BwZWQgc2xvdHMgYW5kIGZhaWwuIEZvciB0aGVzZSBy ZWFzb25zLCB3ZSBhbGxvdworCQkJCSAqIG1pc3Npbmdfb2sgPSB0cnVlIGZvciB0aGUgZHJv cC4KKwkJCQkgKi8KKwkJCQlSZXBsaWNhdGlvblNsb3ROYW1lRm9yVGFibGVzeW5jKHN1Yi0+ b2lkLCBzdWJfcmVtb3ZlX3JlbHNbb2ZmXS5yZWxpZCwKKwkJCQkJCQkJCQkJCXN5bmNzbG90 bmFtZSwgc2l6ZW9mKHN5bmNzbG90bmFtZSkpOworCQkJCVJlcGxpY2F0aW9uU2xvdERyb3BB dFB1Yk5vZGUod3Jjb25uLCBzeW5jc2xvdG5hbWUsIHRydWUpOworCQkJfQorCQl9CisKIAl9 CiAJUEdfRklOQUxMWSgpOwogCXsKQEAgLTE2MDcsNiArMTgxMCw3NSBAQCBmZXRjaF90YWJs ZV9saXN0KFdhbFJlY2VpdmVyQ29ubiAqd3Jjb25uLCBMaXN0ICpwdWJsaWNhdGlvbnMpCiAJ cmV0dXJuIHRhYmxlbGlzdDsKIH0KIAorLyoKKyAqIEdldCB0aGUgbGlzdCBvZiBzZXF1ZW5j ZXMgd2hpY2ggYmVsb25nIHRvIHNwZWNpZmllZCBwdWJsaWNhdGlvbnMgb24gdGhlCisgKiBw dWJsaXNoZXIgY29ubmVjdGlvbi4KKyAqLworc3RhdGljIExpc3QgKgorZmV0Y2hfc2VxdWVu Y2VfbGlzdChXYWxSZWNlaXZlckNvbm4gKndyY29ubiwgTGlzdCAqcHVibGljYXRpb25zKQor eworCVdhbFJjdkV4ZWNSZXN1bHQgKnJlczsKKwlTdHJpbmdJbmZvRGF0YSBjbWQ7CisJVHVw bGVUYWJsZVNsb3QgKnNsb3Q7CisJT2lkCQkJdGFibGVSb3dbMl0gPSB7VEVYVE9JRCwgVEVY VE9JRH07CisJTGlzdENlbGwgICAqbGM7CisJYm9vbAkJZmlyc3Q7CisJTGlzdAkgICAqdGFi bGVsaXN0ID0gTklMOworCisJQXNzZXJ0KGxpc3RfbGVuZ3RoKHB1YmxpY2F0aW9ucykgPiAw KTsKKworCWluaXRTdHJpbmdJbmZvKCZjbWQpOworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmco JmNtZCwgIlNFTEVDVCBESVNUSU5DVCBzLnNjaGVtYW5hbWUsIHMuc2VxdWVuY2VuYW1lXG4i CisJCQkJCQkgICAiICBGUk9NIHBnX2NhdGFsb2cucGdfcHVibGljYXRpb25fc2VxdWVuY2Vz IHNcbiIKKwkJCQkJCSAgICIgV0hFUkUgcy5wdWJuYW1lIElOICgiKTsKKwlmaXJzdCA9IHRy dWU7CisJZm9yZWFjaChsYywgcHVibGljYXRpb25zKQorCXsKKwkJY2hhcgkgICAqcHVibmFt ZSA9IHN0clZhbChsZmlyc3QobGMpKTsKKworCQlpZiAoZmlyc3QpCisJCQlmaXJzdCA9IGZh bHNlOworCQllbHNlCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjbWQsICIsICIpOwor CisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmNtZCwgcXVvdGVfbGl0ZXJhbF9jc3RyKHB1 Ym5hbWUpKTsKKwl9CisJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmNtZCwgJyknKTsKKworCXJl cyA9IHdhbHJjdl9leGVjKHdyY29ubiwgY21kLmRhdGEsIDIsIHRhYmxlUm93KTsKKwlwZnJl ZShjbWQuZGF0YSk7CisKKwlpZiAocmVzLT5zdGF0dXMgIT0gV0FMUkNWX09LX1RVUExFUykK KwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJybXNnKCJjb3VsZCBub3QgcmVjZWl2ZSBsaXN0 IG9mIHJlcGxpY2F0ZWQgdGFibGVzIGZyb20gdGhlIHB1Ymxpc2hlcjogJXMiLAorCQkJCQkJ cmVzLT5lcnIpKSk7CisKKwkvKiBQcm9jZXNzIHRhYmxlcy4gKi8KKwlzbG90ID0gTWFrZVNp bmdsZVR1cGxlVGFibGVTbG90KHJlcy0+dHVwbGVkZXNjLCAmVFRTT3BzTWluaW1hbFR1cGxl KTsKKwl3aGlsZSAodHVwbGVzdG9yZV9nZXR0dXBsZXNsb3QocmVzLT50dXBsZXN0b3JlLCB0 cnVlLCBmYWxzZSwgc2xvdCkpCisJeworCQljaGFyCSAgICpuc3BuYW1lOworCQljaGFyCSAg ICpyZWxuYW1lOworCQlib29sCQlpc251bGw7CisJCVJhbmdlVmFyICAgKnJ2OworCisJCW5z cG5hbWUgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKHNsb3RfZ2V0YXR0cihzbG90LCAxLCAmaXNu dWxsKSk7CisJCUFzc2VydCghaXNudWxsKTsKKwkJcmVsbmFtZSA9IFRleHREYXR1bUdldENT dHJpbmcoc2xvdF9nZXRhdHRyKHNsb3QsIDIsICZpc251bGwpKTsKKwkJQXNzZXJ0KCFpc251 bGwpOworCisJCXJ2ID0gbWFrZVJhbmdlVmFyKG5zcG5hbWUsIHJlbG5hbWUsIC0xKTsKKwkJ dGFibGVsaXN0ID0gbGFwcGVuZCh0YWJsZWxpc3QsIHJ2KTsKKworCQlFeGVjQ2xlYXJUdXBs ZShzbG90KTsKKwl9CisJRXhlY0Ryb3BTaW5nbGVUdXBsZVRhYmxlU2xvdChzbG90KTsKKwor CXdhbHJjdl9jbGVhcl9yZXN1bHQocmVzKTsKKworCXJldHVybiB0YWJsZWxpc3Q7Cit9CisK IC8qCiAgKiBUaGlzIGlzIHRvIHJlcG9ydCB0aGUgY29ubmVjdGlvbiBmYWlsdXJlIHdoaWxl IGRyb3BwaW5nIHJlcGxpY2F0aW9uIHNsb3RzLgogICogSGVyZSwgd2UgcmVwb3J0IHRoZSBX QVJOSU5HIGZvciBhbGwgdGFibGVzeW5jIHNsb3RzIHNvIHRoYXQgdXNlciBjYW4gZHJvcApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMgYi9z cmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRpb24uYwppbmRleCA1NzRkN2QyN2Zk Li42ZjBkNDJkNTUxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVw bGljYXRpb24uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRpb24u YwpAQCAtNjA4LDcgKzYwOCw3IEBAIHZvaWQKIENoZWNrU3Vic2NyaXB0aW9uUmVsa2luZChj aGFyIHJlbGtpbmQsIGNvbnN0IGNoYXIgKm5zcG5hbWUsCiAJCQkJCQkgY29uc3QgY2hhciAq cmVsbmFtZSkKIHsKLQlpZiAocmVsa2luZCAhPSBSRUxLSU5EX1JFTEFUSU9OICYmIHJlbGtp bmQgIT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkKKwlpZiAocmVsa2luZCAhPSBSRUxL SU5EX1JFTEFUSU9OICYmIHJlbGtpbmQgIT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSAm JiByZWxraW5kICE9IFJFTEtJTkRfU0VRVUVOQ0UpCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJ KGVycmNvZGUoRVJSQ09ERV9XUk9OR19PQkpFQ1RfVFlQRSksCiAJCQkJIGVycm1zZygiY2Fu bm90IHVzZSByZWxhdGlvbiBcIiVzLiVzXCIgYXMgbG9naWNhbCByZXBsaWNhdGlvbiB0YXJn ZXQiLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvY29weWZ1bmNzLmMgYi9zcmMv YmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYwppbmRleCBhZDFlYTJmZjJmLi4zZGM1ZWVlZDkx IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYworKysgYi9zcmMv YmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYwpAQCAtNDg0Myw2ICs0ODQzLDcgQEAgX2NvcHlD cmVhdGVQdWJsaWNhdGlvblN0bXQoY29uc3QgQ3JlYXRlUHVibGljYXRpb25TdG10ICpmcm9t KQogCUNPUFlfTk9ERV9GSUVMRChvcHRpb25zKTsKIAlDT1BZX05PREVfRklFTEQocHVib2Jq ZWN0cyk7CiAJQ09QWV9TQ0FMQVJfRklFTEQoZm9yX2FsbF90YWJsZXMpOworCUNPUFlfU0NB TEFSX0ZJRUxEKGZvcl9hbGxfc2VxdWVuY2VzKTsKIAogCXJldHVybiBuZXdub2RlOwogfQpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvZXF1YWxmdW5jcy5jIGIvc3JjL2JhY2tl bmQvbm9kZXMvZXF1YWxmdW5jcy5jCmluZGV4IGY1MzdkM2ViOTYuLjIzMTcxODVkYWYgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL2VxdWFsZnVuY3MuYworKysgYi9zcmMvYmFj a2VuZC9ub2Rlcy9lcXVhbGZ1bmNzLmMKQEAgLTIzMzYsNiArMjMzNiw3IEBAIF9lcXVhbEFs dGVyUHVibGljYXRpb25TdG10KGNvbnN0IEFsdGVyUHVibGljYXRpb25TdG10ICphLAogCUNP TVBBUkVfTk9ERV9GSUVMRChvcHRpb25zKTsKIAlDT01QQVJFX05PREVfRklFTEQocHVib2Jq ZWN0cyk7CiAJQ09NUEFSRV9TQ0FMQVJfRklFTEQoZm9yX2FsbF90YWJsZXMpOworCUNPTVBB UkVfU0NBTEFSX0ZJRUxEKGZvcl9hbGxfc2VxdWVuY2VzKTsKIAlDT01QQVJFX1NDQUxBUl9G SUVMRChhY3Rpb24pOwogCiAJcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9wYXJzZXIvZ3JhbS55IGIvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQppbmRleCBhNmQw Y2VmYTZiLi41YzRlOGJmM2Q3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvZ3Jh bS55CisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKQEAgLTk2NzIsNiArOTY3Miwy NiBAQCBQdWJsaWNhdGlvbk9ialNwZWM6CiAJCQkJCSQkLT5wdWJvYmp0eXBlID0gUFVCTElD QVRJT05PQkpfVEFCTEVfSU5fQ1VSX1NDSEVNQTsKIAkJCQkJJCQtPmxvY2F0aW9uID0gQDU7 CiAJCQkJfQorCQkJfCBTRVFVRU5DRSByZWxhdGlvbl9leHByCisJCQkJeworCQkJCQkkJCA9 IG1ha2VOb2RlKFB1YmxpY2F0aW9uT2JqU3BlYyk7CisJCQkJCSQkLT5wdWJvYmp0eXBlID0g UFVCTElDQVRJT05PQkpfU0VRVUVOQ0U7CisJCQkJCSQkLT5wdWJ0YWJsZSA9IG1ha2VOb2Rl KFB1YmxpY2F0aW9uVGFibGUpOworCQkJCQkkJC0+cHVidGFibGUtPnJlbGF0aW9uID0gJDI7 CisJCQkJfQorCQkJfCBBTEwgU0VRVUVOQ0UgSU5fUCBTQ0hFTUEgQ29sSWQKKwkJCQl7CisJ CQkJCSQkID0gbWFrZU5vZGUoUHVibGljYXRpb25PYmpTcGVjKTsKKwkJCQkJJCQtPnB1Ym9i anR5cGUgPSBQVUJMSUNBVElPTk9CSl9TRVFVRU5DRV9JTl9TQ0hFTUE7CisJCQkJCSQkLT5u YW1lID0gJDU7CisJCQkJCSQkLT5sb2NhdGlvbiA9IEA1OworCQkJCX0KKwkJCXwgQUxMIFNF UVVFTkNFUyBJTl9QIFNDSEVNQSBDVVJSRU5UX1NDSEVNQQorCQkJCXsKKwkJCQkJJCQgPSBt YWtlTm9kZShQdWJsaWNhdGlvbk9ialNwZWMpOworCQkJCQkkJC0+cHVib2JqdHlwZSA9IFBV QkxJQ0FUSU9OT0JKX1NFUVVFTkNFX0lOX0NVUl9TQ0hFTUE7CisJCQkJCSQkLT5sb2NhdGlv biA9IEA1OworCQkJCX0KIAkJCXwgQ29sSWQKIAkJCQl7CiAJCQkJCSQkID0gbWFrZU5vZGUo UHVibGljYXRpb25PYmpTcGVjKTsKQEAgLTEwMDA3LDYgKzEwMDI3LDEyIEBAIFVubGlzdGVu U3RtdDoKIAkJCQl9CiAJCTsKIAorLyoKKyAqIEZJWE1FCisgKgorICogb3B0X3B1YmxpY2F0 aW9uX2Zvcl9zZXF1ZW5jZXMgYW5kIHB1YmxpY2F0aW9uX2Zvcl9zZXF1ZW5jZXMgc2hvdWxk IGJlCisgKiBjb3BpZXMgZm9yIHNlcXVlbmNlcworICovCiAKIC8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKgogICoKQEAgLTEwMDE1LDYgKzEwMDQxLDEyIEBAIFVubGlzdGVuU3RtdDoKICAq CQlCRUdJTiAvIENPTU1JVCAvIFJPTExCQUNLCiAgKgkJKGFsc28gb2xkZXIgdmVyc2lvbnMg RU5EIC8gQUJPUlQpCiAgKgorICogQUxURVIgUFVCTElDQVRJT04gbmFtZSBBREQgU0VRVUVO Q0Ugc2VxdWVuY2UgWywgc2VxdWVuY2UyXQorICoKKyAqIEFMVEVSIFBVQkxJQ0FUSU9OIG5h bWUgRFJPUCBTRVFVRU5DRSBzZXF1ZW5jZSBbLCBzZXF1ZW5jZTJdCisgKgorICogQUxURVIg UFVCTElDQVRJT04gbmFtZSBTRVQgU0VRVUVOQ0Ugc2VxdWVuY2UgWywgc2VxdWVuY2UyXQor ICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogVHJhbnNhY3Rpb25TdG10OgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jIGIvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jCmluZGV4IDlmNWJmNGI2Mzku LjlmNTNiNGM0N2IgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvcHJvdG8uYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3Rv LmMKQEAgLTY0Nyw2ICs2NDcsNTggQEAgbG9naWNhbHJlcF93cml0ZV9tZXNzYWdlKFN0cmlu Z0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24sCiAJcHFfc2Vu ZGJ5dGVzKG91dCwgbWVzc2FnZSwgc3opOwogfQogCisvKgorICogV3JpdGUgU0VRVUVOQ0Ug dG8gc3RyZWFtCisgKi8KK3ZvaWQKK2xvZ2ljYWxyZXBfd3JpdGVfc2VxdWVuY2UoU3RyaW5n SW5mbyBvdXQsIFJlbGF0aW9uIHJlbCwgVHJhbnNhY3Rpb25JZCB4aWQsCisJCQkJCQkgIFhM b2dSZWNQdHIgbHNuLCBib29sIHRyYW5zYWN0aW9uYWwsIGJvb2wgY3JlYXRlZCwKKwkJCQkJ CSAgaW50NjQgbGFzdF92YWx1ZSwgaW50NjQgbG9nX2NudCwgYm9vbCBpc19jYWxsZWQpCit7 CisJdWludDgJCWZsYWdzID0gMDsKKwljaGFyCSAgICpyZWxuYW1lOworCisJcHFfc2VuZGJ5 dGUob3V0LCBMT0dJQ0FMX1JFUF9NU0dfU0VRVUVOQ0UpOworCisJLyogdHJhbnNhY3Rpb24g SUQgKGlmIG5vdCB2YWxpZCwgd2UncmUgbm90IHN0cmVhbWluZykgKi8KKwlpZiAoVHJhbnNh Y3Rpb25JZElzVmFsaWQoeGlkKSkKKwkJcHFfc2VuZGludDMyKG91dCwgeGlkKTsKKworCXBx X3NlbmRpbnQ4KG91dCwgZmxhZ3MpOworCXBxX3NlbmRpbnQ2NChvdXQsIGxzbik7CisKKwls b2dpY2FscmVwX3dyaXRlX25hbWVzcGFjZShvdXQsIFJlbGF0aW9uR2V0TmFtZXNwYWNlKHJl bCkpOworCXJlbG5hbWUgPSBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpOworCXBxX3Nl bmRzdHJpbmcob3V0LCByZWxuYW1lKTsKKworCXBxX3NlbmRpbnQ4KG91dCwgdHJhbnNhY3Rp b25hbCk7CisJcHFfc2VuZGludDgob3V0LCBjcmVhdGVkKTsKKwlwcV9zZW5kaW50NjQob3V0 LCBsYXN0X3ZhbHVlKTsKKwlwcV9zZW5kaW50NjQob3V0LCBsb2dfY250KTsKKwlwcV9zZW5k aW50OChvdXQsIGlzX2NhbGxlZCk7Cit9CisKKy8qCisgKiBSZWFkIFNFUVVFTkNFIGZyb20g dGhlIHN0cmVhbS4KKyAqLwordm9pZAorbG9naWNhbHJlcF9yZWFkX3NlcXVlbmNlKFN0cmlu Z0luZm8gaW4sIExvZ2ljYWxSZXBTZXF1ZW5jZSAqc2VxZGF0YSkKK3sKKwkvKiBYWFggc2tp cHBpbmcgZmxhZ3MgYW5kIGxzbiAqLworCXBxX2dldG1zZ2ludChpbiwgMSk7CisJcHFfZ2V0 bXNnaW50NjQoaW4pOworCisJLyogUmVhZCByZWxhdGlvbiBuYW1lIGZyb20gc3RyZWFtICov CisJc2VxZGF0YS0+bnNwbmFtZSA9IHBzdHJkdXAobG9naWNhbHJlcF9yZWFkX25hbWVzcGFj ZShpbikpOworCXNlcWRhdGEtPnNlcW5hbWUgPSBwc3RyZHVwKHBxX2dldG1zZ3N0cmluZyhp bikpOworCisJc2VxZGF0YS0+dHJhbnNhY3Rpb25hbCA9IHBxX2dldG1zZ2ludChpbiwgMSk7 CisJc2VxZGF0YS0+Y3JlYXRlZCA9IHBxX2dldG1zZ2ludChpbiwgMSk7CisJc2VxZGF0YS0+ bGFzdF92YWx1ZSA9IHBxX2dldG1zZ2ludDY0KGluKTsKKwlzZXFkYXRhLT5sb2dfY250ID0g cHFfZ2V0bXNnaW50NjQoaW4pOworCXNlcWRhdGEtPmlzX2NhbGxlZCA9IHBxX2dldG1zZ2lu dChpbiwgMSk7Cit9CisKIC8qCiAgKiBXcml0ZSByZWxhdGlvbiBkZXNjcmlwdGlvbiB0byB0 aGUgb3V0cHV0IHN0cmVhbS4KICAqLwpAQCAtMTIwMyw2ICsxMjU1LDggQEAgbG9naWNhbHJl cF9tZXNzYWdlX3R5cGUoTG9naWNhbFJlcE1zZ1R5cGUgYWN0aW9uKQogCQkJcmV0dXJuICJT VFJFQU0gQUJPUlQiOwogCQljYXNlIExPR0lDQUxfUkVQX01TR19TVFJFQU1fUFJFUEFSRToK IAkJCXJldHVybiAiU1RSRUFNIFBSRVBBUkUiOworCQljYXNlIExPR0lDQUxfUkVQX01TR19T RVFVRU5DRToKKwkJCXJldHVybiAiU0VRVUVOQ0UiOwogCX0KIAogCWVsb2coRVJST1IsICJp bnZhbGlkIGxvZ2ljYWwgcmVwbGljYXRpb24gbWVzc2FnZSB0eXBlIFwiJWNcIiIsIGFjdGlv bik7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxl c3luYy5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC90YWJsZXN5bmMuYwpp bmRleCBmMDc5ODNhNDNjLi4yNDM2OWExNTIyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMKQEAgLTEwMCw2ICsxMDAsNyBAQAogI2luY2x1 ZGUgImNhdGFsb2cvcGdfc3Vic2NyaXB0aW9uX3JlbC5oIgogI2luY2x1ZGUgImNhdGFsb2cv cGdfdHlwZS5oIgogI2luY2x1ZGUgImNvbW1hbmRzL2NvcHkuaCIKKyNpbmNsdWRlICJjb21t YW5kcy9zZXF1ZW5jZS5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBh cnNlci9wYXJzZV9yZWxhdGlvbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgpAQCAtMzU3LDYg KzM1OCwxMiBAQCBwcm9jZXNzX3N5bmNpbmdfdGFibGVzX2Zvcl9zeW5jKFhMb2dSZWNQdHIg Y3VycmVudF9sc24pCiAgKgogICogSWYgdGhlIHN5bmNocm9uaXphdGlvbiBwb3NpdGlvbiBp cyByZWFjaGVkIChTWU5DRE9ORSksIHRoZW4gdGhlIHRhYmxlIGNhbgogICogYmUgbWFya2Vk IGFzIFJFQURZIGFuZCBpcyBubyBsb25nZXIgdHJhY2tlZC4KKyAqCisgKiBYWFggVGhpcyBu ZWVkcyB0byBoYW5kbGUgc2VxdWVuY2VzIHRvbyAtIGFmdGVyIEFsdGVyU3Vic2NyaXB0aW9u X3JlZnJlc2gKKyAqIHN0YXJ0cyBjYXJpbmcgYWJvdXQgc2VxdWVuY2VzLCBHZXRTdWJzY3Jp cHRpb25Ob3RSZWFkeVJlbGF0aW9ucyB3b24ndAorICogcmV0dXJuIGp1c3QgdGFibGVzLCBh bmQgd2UnbGwgaGF2ZSB0byBzeW5jIHRoZW0gaGVyZS4gTm90IHN1cmUgaXQncyB3b3J0aAor ICogY3JlYXRpbmcgYSBuZXcgInN5bmMiIHdvcmtlciBwZXIgc2VxdWVuY2UsIG1heWJlIHdl IHNob3VsZCBqdXN0IHN5bmMgdGhlbQorICogaW4gdGhlIGN1cnJlbnQgcHJvY2VzcyAoaXQn cyBwcmV0dHkgbGlnaHQtd2VpZ2h0KS4KICAqLwogc3RhdGljIHZvaWQKIHByb2Nlc3Nfc3lu Y2luZ190YWJsZXNfZm9yX2FwcGx5KFhMb2dSZWNQdHIgY3VycmVudF9sc24pCkBAIC04NzEs NiArODc4LDk5IEBAIGNvcHlfdGFibGUoUmVsYXRpb24gcmVsKQogCWxvZ2ljYWxyZXBfcmVs X2Nsb3NlKHJlbG1hcGVudHJ5LCBOb0xvY2spOwogfQogCisKKworLyoKKyAqIEZJWE1FIGFk ZCBjb21tZW50CisgKi8KK3N0YXRpYyB2b2lkCitmZXRjaF9zZXF1ZW5jZV9kYXRhKGNoYXIg Km5zcG5hbWUsIGNoYXIgKnJlbG5hbWUsCisJCQkJCWludDY0ICpsYXN0X3ZhbHVlLCBpbnQ2 NCAqbG9nX2NudCwgYm9vbCAqaXNfY2FsbGVkKQoreworCVdhbFJjdkV4ZWNSZXN1bHQgKnJl czsKKwlTdHJpbmdJbmZvRGF0YSBjbWQ7CisJVHVwbGVUYWJsZVNsb3QgKnNsb3Q7CisJT2lk CQkJdGFibGVSb3dbM10gPSB7SU5UOE9JRCwgSU5UOE9JRCwgQk9PTE9JRH07CisKKwlpbml0 U3RyaW5nSW5mbygmY21kKTsKKwlhcHBlbmRTdHJpbmdJbmZvKCZjbWQsICJTRUxFQ1QgbGFz dF92YWx1ZSwgbG9nX2NudCwgaXNfY2FsbGVkXG4iCisJCQkJCSAgICIgIEZST00gJXMiLCBx dW90ZV9xdWFsaWZpZWRfaWRlbnRpZmllcihuc3BuYW1lLCByZWxuYW1lKSk7CisKKwlyZXMg PSB3YWxyY3ZfZXhlYyhMb2dSZXBXb3JrZXJXYWxSY3ZDb25uLCBjbWQuZGF0YSwgMywgdGFi bGVSb3cpOworCXBmcmVlKGNtZC5kYXRhKTsKKworCWlmIChyZXMtPnN0YXR1cyAhPSBXQUxS Q1ZfT0tfVFVQTEVTKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJtc2coImNvdWxkIG5v dCByZWNlaXZlIGxpc3Qgb2YgcmVwbGljYXRlZCB0YWJsZXMgZnJvbSB0aGUgcHVibGlzaGVy OiAlcyIsCisJCQkJCQlyZXMtPmVycikpKTsKKworCS8qIFByb2Nlc3MgdGhlIHNlcXVlbmNl LiAqLworCXNsb3QgPSBNYWtlU2luZ2xlVHVwbGVUYWJsZVNsb3QocmVzLT50dXBsZWRlc2Ms ICZUVFNPcHNNaW5pbWFsVHVwbGUpOworCXdoaWxlICh0dXBsZXN0b3JlX2dldHR1cGxlc2xv dChyZXMtPnR1cGxlc3RvcmUsIHRydWUsIGZhbHNlLCBzbG90KSkKKwl7CisJCWJvb2wJCWlz bnVsbDsKKworCQkqbGFzdF92YWx1ZSA9IERhdHVtR2V0SW50NjQoc2xvdF9nZXRhdHRyKHNs b3QsIDEsICZpc251bGwpKTsKKwkJQXNzZXJ0KCFpc251bGwpOworCisJCSpsb2dfY250ID0g RGF0dW1HZXRJbnQ2NChzbG90X2dldGF0dHIoc2xvdCwgMiwgJmlzbnVsbCkpOworCQlBc3Nl cnQoIWlzbnVsbCk7CisKKwkJKmlzX2NhbGxlZCA9IERhdHVtR2V0Qm9vbChzbG90X2dldGF0 dHIoc2xvdCwgMywgJmlzbnVsbCkpOworCQlBc3NlcnQoIWlzbnVsbCk7CisKKwkJRXhlY0Ns ZWFyVHVwbGUoc2xvdCk7CisJfQorCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3Qoc2xv dCk7CisKKwl3YWxyY3ZfY2xlYXJfcmVzdWx0KHJlcyk7Cit9CisKKy8qCisgKiBDb3B5IGV4 aXN0aW5nIGRhdGEgb2YgYSBzZXF1ZW5jZSBmcm9tIHB1Ymxpc2hlci4KKyAqCisgKiBDYWxs ZXIgaXMgcmVzcG9uc2libGUgZm9yIGxvY2tpbmcgdGhlIGxvY2FsIHJlbGF0aW9uLgorICov CitzdGF0aWMgdm9pZAorY29weV9zZXF1ZW5jZShSZWxhdGlvbiByZWwpCit7CisJTG9naWNh bFJlcFJlbE1hcEVudHJ5ICpyZWxtYXBlbnRyeTsKKwlMb2dpY2FsUmVwUmVsYXRpb24gbHJl bDsKKwlTdHJpbmdJbmZvRGF0YSBjbWQ7CisJaW50NjQJCWxhc3RfdmFsdWUgPSAwLAorCQkJ CWxvZ19jbnQgPSAwOworCWJvb2wJCWlzX2NhbGxlZCA9IDA7CisKKwkvKiBHZXQgdGhlIHB1 Ymxpc2hlciByZWxhdGlvbiBpbmZvLiAqLworCWZldGNoX3JlbW90ZV90YWJsZV9pbmZvKGdl dF9uYW1lc3BhY2VfbmFtZShSZWxhdGlvbkdldE5hbWVzcGFjZShyZWwpKSwKKwkJCQkJCQlS ZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpLCAmbHJlbCk7CisKKwkvKiBQdXQgdGhlIHJl bGF0aW9uIGludG8gcmVsbWFwLiAqLworCWxvZ2ljYWxyZXBfcmVsbWFwX3VwZGF0ZSgmbHJl bCk7CisKKwkvKiBNYXAgdGhlIHB1Ymxpc2hlciByZWxhdGlvbiB0byBsb2NhbCBvbmUuICov CisJcmVsbWFwZW50cnkgPSBsb2dpY2FscmVwX3JlbF9vcGVuKGxyZWwucmVtb3RlaWQsIE5v TG9jayk7CisJQXNzZXJ0KHJlbCA9PSByZWxtYXBlbnRyeS0+bG9jYWxyZWwpOworCisJLyog U3RhcnQgY29weSBvbiB0aGUgcHVibGlzaGVyLiAqLworCWluaXRTdHJpbmdJbmZvKCZjbWQp OworCisJQXNzZXJ0KGxyZWwucmVsa2luZCA9PSBSRUxLSU5EX1NFUVVFTkNFKTsKKworCWZl dGNoX3NlcXVlbmNlX2RhdGEobHJlbC5uc3BuYW1lLCBscmVsLnJlbG5hbWUsICZsYXN0X3Zh bHVlLCAmbG9nX2NudCwgJmlzX2NhbGxlZCk7CisKKwllbG9nKFdBUk5JTkcsICJzZXF1ZW5j ZSAlcyBpbmZvIGxhc3RfdmFsdWUgJWxkIGxvZ19jbnQgJWxkIGlzX2NhbGxlZCAlZCIsCisJ CSBxdW90ZV9xdWFsaWZpZWRfaWRlbnRpZmllcihscmVsLm5zcG5hbWUsIGxyZWwucmVsbmFt ZSksCisJCSBsYXN0X3ZhbHVlLCBsb2dfY250LCBpc19jYWxsZWQpOworCisJUmVzZXRTZXF1 ZW5jZTIoUmVsYXRpb25HZXRSZWxpZChyZWwpLCBsYXN0X3ZhbHVlLCBsb2dfY250LCBpc19j YWxsZWQpOworCisJbG9naWNhbHJlcF9yZWxfY2xvc2UocmVsbWFwZW50cnksIE5vTG9jayk7 Cit9CisKKworCisKIC8qCiAgKiBEZXRlcm1pbmUgdGhlIHRhYmxlc3luYyBzbG90IG5hbWUu CiAgKgpAQCAtMTEwNiwxMCArMTIwNiwyMCBAQCBMb2dpY2FsUmVwU3luY1RhYmxlU3RhcnQo WExvZ1JlY1B0ciAqb3JpZ2luX3N0YXJ0cG9zKQogCQkJCQkJb3JpZ2lubmFtZSkpKTsKIAl9 CiAKLQkvKiBOb3cgZG8gdGhlIGluaXRpYWwgZGF0YSBjb3B5ICovCi0JUHVzaEFjdGl2ZVNu YXBzaG90KEdldFRyYW5zYWN0aW9uU25hcHNob3QoKSk7Ci0JY29weV90YWJsZShyZWwpOwot CVBvcEFjdGl2ZVNuYXBzaG90KCk7CisJaWYgKGdldF9yZWxfcmVsa2luZChSZWxhdGlvbkdl dFJlbGlkKHJlbCkpID09IFJFTEtJTkRfU0VRVUVOQ0UpCisJeworCQkvKiBOb3cgZG8gdGhl IGluaXRpYWwgc2VxdWVuY2UgY29weSAqLworCQlQdXNoQWN0aXZlU25hcHNob3QoR2V0VHJh bnNhY3Rpb25TbmFwc2hvdCgpKTsKKwkJY29weV9zZXF1ZW5jZShyZWwpOworCQlQb3BBY3Rp dmVTbmFwc2hvdCgpOworCX0KKwllbHNlCisJeworCQkvKiBOb3cgZG8gdGhlIGluaXRpYWwg ZGF0YSBjb3B5ICovCisJCVB1c2hBY3RpdmVTbmFwc2hvdChHZXRUcmFuc2FjdGlvblNuYXBz aG90KCkpOworCQljb3B5X3RhYmxlKHJlbCk7CisJCVBvcEFjdGl2ZVNuYXBzaG90KCk7CisJ fQogCiAJcmVzID0gd2FscmN2X2V4ZWMoTG9nUmVwV29ya2VyV2FsUmN2Q29ubiwgIkNPTU1J VCIsIDAsIE5VTEwpOwogCWlmIChyZXMtPnN0YXR1cyAhPSBXQUxSQ1ZfT0tfQ09NTUFORCkK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMg Yi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCmluZGV4IGFlMWIz OTFiZGEuLjU1ZDQ4Y2U1YmUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvd29ya2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC93b3JrZXIuYwpAQCAtMTQ0LDYgKzE0NCw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190 YWJsZXNwYWNlLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvdGFibGVjbWRzLmgiCiAjaW5jbHVk ZSAiY29tbWFuZHMvdGFibGVzcGFjZS5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3NlcXVlbmNl LmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvdHJpZ2dlci5oIgogI2luY2x1ZGUgImV4ZWN1dG9y L2V4ZWN1dG9yLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oIgpAQCAt MTA5MSw2ICsxMDkyLDYxIEBAIGFwcGx5X2hhbmRsZV9vcmlnaW4oU3RyaW5nSW5mbyBzKQog CQkJCSBlcnJtc2dfaW50ZXJuYWwoIk9SSUdJTiBtZXNzYWdlIHNlbnQgb3V0IG9mIG9yZGVy IikpKTsKIH0KIAorLyoKKyAqIEhhbmRsZSBTRVFVRU5DRSBtZXNzYWdlLgorICovCitzdGF0 aWMgdm9pZAorYXBwbHlfaGFuZGxlX3NlcXVlbmNlKFN0cmluZ0luZm8gcykKK3sKKwlMb2dp Y2FsUmVwU2VxdWVuY2UJc2VxOworCU9pZAkJCQkJcmVsaWQ7CisKKwlpZiAoaGFuZGxlX3N0 cmVhbWVkX3RyYW5zYWN0aW9uKExPR0lDQUxfUkVQX01TR19TRVFVRU5DRSwgcykpCisJCXJl dHVybjsKKworCWxvZ2ljYWxyZXBfcmVhZF9zZXF1ZW5jZShzLCAmc2VxKTsKKworCS8qCisJ ICogTm9uLXRyYW5zYWN0aW9uYWwgc2VxdWVuY2UgdXBkYXRlcyBzaG91bGQgbm90IGJlIHBh cnQgb2YgYSByZW1vdGUKKwkgKiB0cmFuc2FjdGlvbi4gVGhlcmUgc2hvdWxkIG5vdCBiZSBh bnkgcnVubmluZyB0cmFuc2FjdGlvbi4KKwkgKi8KKwlBc3NlcnQoKCFzZXEudHJhbnNhY3Rp b25hbCkgfHwgaW5fcmVtb3RlX3RyYW5zYWN0aW9uKTsKKwlBc3NlcnQoISghc2VxLnRyYW5z YWN0aW9uYWwgJiYgaW5fcmVtb3RlX3RyYW5zYWN0aW9uKSk7CisJQXNzZXJ0KCEoIXNlcS50 cmFuc2FjdGlvbmFsICYmIElzVHJhbnNhY3Rpb25TdGF0ZSgpKSk7CisKKwkvKgorCSAqIE1h a2Ugc3VyZSB3ZSdyZSBpbiBhIHRyYW5zYWN0aW9uIChuZWVkZWQgYnkgUmVzZXRTZXF1ZW5j ZTIpLiBGb3IKKwkgKiBub24tdHJhbnNhY3Rpb25hbCB1cGRhdGVzIHdlJ3JlIGd1YXJhbnRl ZWQgdG8gc3RhcnQgYSBuZXcgb25lLAorCSAqIGFuZCB3ZSdsbCBjb21taXQgaXQgYXQgdGhl IGVuZC4KKwkgKi8KKwlpZiAoIUlzVHJhbnNhY3Rpb25TdGF0ZSgpKQorCXsKKwkJU3RhcnRU cmFuc2FjdGlvbkNvbW1hbmQoKTsKKwkJbWF5YmVfcmVyZWFkX3N1YnNjcmlwdGlvbigpOwor CX0KKworCXJlbGlkID0gUmFuZ2VWYXJHZXRSZWxpZChtYWtlUmFuZ2VWYXIoc2VxLm5zcG5h bWUsCisJCQkJCQkJCQkJICBzZXEuc2VxbmFtZSwgLTEpLAorCQkJCQkJCSBSb3dFeGNsdXNp dmVMb2NrLCBmYWxzZSk7CisKKwkvKiBsb2NrIHRoZSBzZXF1ZW5jZSBpbiBBY2Nlc3NFeGNs dXNpdmVMb2NrLCBhcyBleHBlY3RlZCBieSBSZXNldFNlcXVlbmNlMiAqLworCWVsb2coV0FS TklORywgImxvY2tpbmcgc2VxdWVuY2UgJWQgaW4gZXhjbHVzaXZlIG1vZGUiLCByZWxpZCk7 CisJTG9ja1JlbGF0aW9uT2lkKHJlbGlkLCBBY2Nlc3NFeGNsdXNpdmVMb2NrKTsKKworCWVs b2coV0FSTklORywgImFwcGx5aW5nIHNlcXVlbmNlICVzLiVzIHRyYW5zYWN0aW9uYWwgJWQg Y3JlYXRlZCAlZCBsYXN0X3ZhbHVlICVsZCBsb2dfY250ICVsZCBpc19jYWxsZWQgJWQiLAor CQkgc2VxLm5zcG5hbWUsIHNlcS5zZXFuYW1lLCBzZXEudHJhbnNhY3Rpb25hbCwgc2VxLmNy ZWF0ZWQsIHNlcS5sYXN0X3ZhbHVlLCBzZXEubG9nX2NudCwgc2VxLmlzX2NhbGxlZCk7CisK KwkvKiBhcHBseSB0aGUgc2VxdWVuY2UgY2hhbmdlICovCisJUmVzZXRTZXF1ZW5jZTIocmVs aWQsIHNlcS5sYXN0X3ZhbHVlLCBzZXEubG9nX2NudCwgc2VxLmlzX2NhbGxlZCk7CisKKwkv KgorCSAqIENvbW1pdCB0aGUgcGVyLXN0cmVhbSB0cmFuc2FjdGlvbiAod2Ugb25seSBkbyB0 aGlzIHdoZW4gbm90IGluCisJICogcmVtb3RlIHRyYW5zYWN0aW9uLCBpLmUuIGZvciBub24t dHJhbnNhY3Rpb25hbCBzZXF1ZW5jZSB1cGRhdGVzLgorCSAqLworCWlmICghaW5fcmVtb3Rl X3RyYW5zYWN0aW9uKQorCQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKK30KKwogLyoK ICAqIEhhbmRsZSBTVFJFQU0gU1RBUlQgbWVzc2FnZS4KICAqLwpAQCAtMjM3NCw2ICsyNDMw LDEwIEBAIGFwcGx5X2Rpc3BhdGNoKFN0cmluZ0luZm8gcykKIAkJCSAqLwogCQkJYnJlYWs7 CiAKKwkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfU0VRVUVOQ0U6CisJCQlhcHBseV9oYW5kbGVf c2VxdWVuY2Uocyk7CisJCQlyZXR1cm47CisKIAkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfU1RS RUFNX1NUQVJUOgogCQkJYXBwbHlfaGFuZGxlX3N0cmVhbV9zdGFydChzKTsKIAkJCWJyZWFr OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRw dXQuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMKaW5k ZXggNmY2YTIwM2RlYS4uZmVmNTY4YjViMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCkBAIC00OSw2ICs0OSwxMCBAQCBzdGF0aWMgdm9p ZCBwZ291dHB1dF9tZXNzYWdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKIAkJCQkJ CQkgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLCBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAogCQkJ CQkJCSBib29sIHRyYW5zYWN0aW9uYWwsIGNvbnN0IGNoYXIgKnByZWZpeCwKIAkJCQkJCQkg U2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSk7CitzdGF0aWMgdm9pZCBwZ291dHB1dF9z ZXF1ZW5jZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCisJCQkJCQkJICBSZW9yZGVy QnVmZmVyVFhOICp0eG4sIFhMb2dSZWNQdHIgc2VxdWVuY2VfbHNuLAorCQkJCQkJCSAgUmVs YXRpb24gcmVsLCBib29sIHRyYW5zYWN0aW9uYWwsIGJvb2wgY3JlYXRlZCwKKwkJCQkJCQkg IGludDY0IGxhc3RfdmFsdWUsIGludDY0IGxvZ19jbnQsIGJvb2wgaXNfY2FsbGVkKTsKIHN0 YXRpYyBib29sIHBnb3V0cHV0X29yaWdpbl9maWx0ZXIoTG9naWNhbERlY29kaW5nQ29udGV4 dCAqY3R4LAogCQkJCQkJCQkgICBSZXBPcmlnaW5JZCBvcmlnaW5faWQpOwogc3RhdGljIHZv aWQgcGdvdXRwdXRfYmVnaW5fcHJlcGFyZV90eG4oTG9naWNhbERlY29kaW5nQ29udGV4dCAq Y3R4LApAQCAtMTU5LDYgKzE2Myw3IEBAIF9QR19vdXRwdXRfcGx1Z2luX2luaXQoT3V0cHV0 UGx1Z2luQ2FsbGJhY2tzICpjYikKIAljYi0+Y2hhbmdlX2NiID0gcGdvdXRwdXRfY2hhbmdl OwogCWNiLT50cnVuY2F0ZV9jYiA9IHBnb3V0cHV0X3RydW5jYXRlOwogCWNiLT5tZXNzYWdl X2NiID0gcGdvdXRwdXRfbWVzc2FnZTsKKwljYi0+c2VxdWVuY2VfY2IgPSBwZ291dHB1dF9z ZXF1ZW5jZTsKIAljYi0+Y29tbWl0X2NiID0gcGdvdXRwdXRfY29tbWl0X3R4bjsKIAogCWNi LT5iZWdpbl9wcmVwYXJlX2NiID0gcGdvdXRwdXRfYmVnaW5fcHJlcGFyZV90eG47CkBAIC0x NzUsNiArMTgwLDcgQEAgX1BHX291dHB1dF9wbHVnaW5faW5pdChPdXRwdXRQbHVnaW5DYWxs YmFja3MgKmNiKQogCWNiLT5zdHJlYW1fY29tbWl0X2NiID0gcGdvdXRwdXRfc3RyZWFtX2Nv bW1pdDsKIAljYi0+c3RyZWFtX2NoYW5nZV9jYiA9IHBnb3V0cHV0X2NoYW5nZTsKIAljYi0+ c3RyZWFtX21lc3NhZ2VfY2IgPSBwZ291dHB1dF9tZXNzYWdlOworCWNiLT5zdHJlYW1fc2Vx dWVuY2VfY2IgPSBwZ291dHB1dF9zZXF1ZW5jZTsKIAljYi0+c3RyZWFtX3RydW5jYXRlX2Ni ID0gcGdvdXRwdXRfdHJ1bmNhdGU7CiAJLyogdHJhbnNhY3Rpb24gc3RyZWFtaW5nIC0gdHdv LXBoYXNlIGNvbW1pdCAqLwogCWNiLT5zdHJlYW1fcHJlcGFyZV9jYiA9IHBnb3V0cHV0X3N0 cmVhbV9wcmVwYXJlX3R4bjsKQEAgLTE4OCw2ICsxOTQsNyBAQCBwYXJzZV9vdXRwdXRfcGFy YW1ldGVycyhMaXN0ICpvcHRpb25zLCBQR091dHB1dERhdGEgKmRhdGEpCiAJYm9vbAkJcHVi bGljYXRpb25fbmFtZXNfZ2l2ZW4gPSBmYWxzZTsKIAlib29sCQliaW5hcnlfb3B0aW9uX2dp dmVuID0gZmFsc2U7CiAJYm9vbAkJbWVzc2FnZXNfb3B0aW9uX2dpdmVuID0gZmFsc2U7CisJ Ym9vbAkJc2VxdWVuY2VzX29wdGlvbl9naXZlbiA9IGZhbHNlOwogCWJvb2wJCXN0cmVhbWlu Z19naXZlbiA9IGZhbHNlOwogCWJvb2wJCXR3b19waGFzZV9vcHRpb25fZ2l2ZW4gPSBmYWxz ZTsKIApAQCAtMTk1LDYgKzIwMiw3IEBAIHBhcnNlX291dHB1dF9wYXJhbWV0ZXJzKExpc3Qg Km9wdGlvbnMsIFBHT3V0cHV0RGF0YSAqZGF0YSkKIAlkYXRhLT5zdHJlYW1pbmcgPSBmYWxz ZTsKIAlkYXRhLT5tZXNzYWdlcyA9IGZhbHNlOwogCWRhdGEtPnR3b19waGFzZSA9IGZhbHNl OworCWRhdGEtPnNlcXVlbmNlcyA9IHRydWU7CiAKIAlmb3JlYWNoKGxjLCBvcHRpb25zKQog CXsKQEAgLTI2MCw2ICsyNjgsMTYgQEAgcGFyc2Vfb3V0cHV0X3BhcmFtZXRlcnMoTGlzdCAq b3B0aW9ucywgUEdPdXRwdXREYXRhICpkYXRhKQogCiAJCQlkYXRhLT5tZXNzYWdlcyA9IGRl ZkdldEJvb2xlYW4oZGVmZWwpOwogCQl9CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVm bmFtZSwgInNlcXVlbmNlcyIpID09IDApCisJCXsKKwkJCWlmIChzZXF1ZW5jZXNfb3B0aW9u X2dpdmVuKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX1NZ TlRBWF9FUlJPUiksCisJCQkJCQkgZXJybXNnKCJjb25mbGljdGluZyBvciByZWR1bmRhbnQg b3B0aW9ucyIpKSk7CisJCQlzZXF1ZW5jZXNfb3B0aW9uX2dpdmVuID0gdHJ1ZTsKKworCQkJ ZGF0YS0+c2VxdWVuY2VzID0gZGVmR2V0Qm9vbGVhbihkZWZlbCk7CisJCX0KIAkJZWxzZSBp ZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic3RyZWFtaW5nIikgPT0gMCkKIAkJewogCQkJ aWYgKHN0cmVhbWluZ19naXZlbikKQEAgLTg1Niw2ICs4NzQsNTIgQEAgcGdvdXRwdXRfbWVz c2FnZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4 biwKIAlPdXRwdXRQbHVnaW5Xcml0ZShjdHgsIHRydWUpOwogfQogCitzdGF0aWMgdm9pZAor cGdvdXRwdXRfc2VxdWVuY2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAorCQkJCSAg UmVvcmRlckJ1ZmZlclRYTiAqdHhuLCBYTG9nUmVjUHRyIHNlcXVlbmNlX2xzbiwKKwkJCQkg IFJlbGF0aW9uIHJlbCwgYm9vbCB0cmFuc2FjdGlvbmFsLCBib29sIGNyZWF0ZWQsCisJCQkJ ICBpbnQ2NCBsYXN0X3ZhbHVlLCBpbnQ2NCBsb2dfY250LCBib29sIGlzX2NhbGxlZCkKK3sK KwlQR091dHB1dERhdGEgKmRhdGEgPSAoUEdPdXRwdXREYXRhICopIGN0eC0+b3V0cHV0X3Bs dWdpbl9wcml2YXRlOworCVRyYW5zYWN0aW9uSWQgeGlkID0gSW52YWxpZFRyYW5zYWN0aW9u SWQ7CisJUmVsYXRpb25TeW5jRW50cnkgKnJlbGVudHJ5OworCisJaWYgKCFkYXRhLT5zZXF1 ZW5jZXMpCisJCXJldHVybjsKKworCWlmICghaXNfcHVibGlzaGFibGVfcmVsYXRpb24ocmVs KSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBSZW1lbWJlciB0aGUgeGlkIGZvciB0aGUgbWVz c2FnZSBpbiBzdHJlYW1pbmcgbW9kZS4gU2VlCisJICogcGdvdXRwdXRfY2hhbmdlLgorCSAq LworCWlmIChpbl9zdHJlYW1pbmcpCisJCXhpZCA9IHR4bi0+eGlkOworCisJcmVsZW50cnkg PSBnZXRfcmVsX3N5bmNfZW50cnkoZGF0YSwgUmVsYXRpb25HZXRSZWxpZChyZWwpKTsKKwor CS8qCisJICogRmlyc3QgY2hlY2sgdGhlIHNlcXVlbmNlIGZpbHRlci4KKwkgKgorCSAqIFdl IGhhbmRsZSBqdXN0IFJFT1JERVJfQlVGRkVSX0NIQU5HRV9TRVFVRU5DRSBoZXJlLgorCSAq LworCWlmICghcmVsZW50cnktPnB1YmFjdGlvbnMucHVic2VxdWVuY2UpCisJCXJldHVybjsK KworCU91dHB1dFBsdWdpblByZXBhcmVXcml0ZShjdHgsIHRydWUpOworCWxvZ2ljYWxyZXBf d3JpdGVfc2VxdWVuY2UoY3R4LT5vdXQsCisJCQkJCQkJICByZWwsCisJCQkJCQkJICB4aWQs CisJCQkJCQkJICBzZXF1ZW5jZV9sc24sCisJCQkJCQkJICB0cmFuc2FjdGlvbmFsLAorCQkJ CQkJCSAgY3JlYXRlZCwKKwkJCQkJCQkgIGxhc3RfdmFsdWUsCisJCQkJCQkJICBsb2dfY250 LAorCQkJCQkJCSAgaXNfY2FsbGVkKTsKKwlPdXRwdXRQbHVnaW5Xcml0ZShjdHgsIHRydWUp OworfQorCiAvKgogICogQ3VycmVudGx5IHdlIGFsd2F5cyBmb3J3YXJkLgogICovCkBAIC0x MTQwLDcgKzEyMDQsOCBAQCBnZXRfcmVsX3N5bmNfZW50cnkoUEdPdXRwdXREYXRhICpkYXRh LCBPaWQgcmVsaWQpCiAJCWVudHJ5LT5zdHJlYW1lZF90eG5zID0gTklMOwogCQllbnRyeS0+ cmVwbGljYXRlX3ZhbGlkID0gZmFsc2U7CiAJCWVudHJ5LT5wdWJhY3Rpb25zLnB1Ymluc2Vy dCA9IGVudHJ5LT5wdWJhY3Rpb25zLnB1YnVwZGF0ZSA9Ci0JCQllbnRyeS0+cHViYWN0aW9u cy5wdWJkZWxldGUgPSBlbnRyeS0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSA9IGZhbHNlOwor CQkJZW50cnktPnB1YmFjdGlvbnMucHViZGVsZXRlID0gZW50cnktPnB1YmFjdGlvbnMucHVi dHJ1bmNhdGUgPQorCQkJZW50cnktPnB1YmFjdGlvbnMucHVic2VxdWVuY2UgPSBmYWxzZTsK IAkJZW50cnktPnB1Ymxpc2hfYXNfcmVsaWQgPSBJbnZhbGlkT2lkOwogCQllbnRyeS0+bWFw ID0gTlVMTDsJCS8qIHdpbGwgYmUgc2V0IGJ5IG1heWJlX3NlbmRfc2NoZW1hKCkgaWYKIAkJ CQkJCQkJICogbmVlZGVkICovCkBAIC0xMTYwLDYgKzEyMjUsNyBAQCBnZXRfcmVsX3N5bmNf ZW50cnkoUEdPdXRwdXREYXRhICpkYXRhLCBPaWQgcmVsaWQpCiAJCUxpc3QJICAgKnNjaGVt YVB1YmlkcyA9IEdldFNjaGVtYVB1YmxpY2F0aW9ucyhzY2hlbWFJZCk7CiAJCUxpc3RDZWxs ICAgKmxjOwogCQlPaWQJCQlwdWJsaXNoX2FzX3JlbGlkID0gcmVsaWQ7CisJCWJvb2wJCWlz X3NlcXVlbmNlID0gKGdldF9yZWxfcmVsa2luZChyZWxpZCkgPT0gUkVMS0lORF9TRVFVRU5D RSk7CiAKIAkJLyogUmVsb2FkIHB1YmxpY2F0aW9ucyBpZiBuZWVkZWQgYmVmb3JlIHVzZS4g Ki8KIAkJaWYgKCFwdWJsaWNhdGlvbnNfdmFsaWQpCkBAIC0xMTgzLDEyICsxMjQ5LDIzIEBA IGdldF9yZWxfc3luY19lbnRyeShQR091dHB1dERhdGEgKmRhdGEsIE9pZCByZWxpZCkKIAkJ CVB1YmxpY2F0aW9uICpwdWIgPSBsZmlyc3QobGMpOwogCQkJYm9vbAkJcHVibGlzaCA9IGZh bHNlOwogCi0JCQlpZiAocHViLT5hbGx0YWJsZXMpCisJCQlpZiAocHViLT5hbGx0YWJsZXMg JiYgKCFpc19zZXF1ZW5jZSkpCiAJCQl7CiAJCQkJcHVibGlzaCA9IHRydWU7CiAJCQkJaWYg KHB1Yi0+cHVidmlhcm9vdCAmJiBhbV9wYXJ0aXRpb24pCiAJCQkJCXB1Ymxpc2hfYXNfcmVs aWQgPSBsbGFzdF9vaWQoZ2V0X3BhcnRpdGlvbl9hbmNlc3RvcnMocmVsaWQpKTsKIAkJCX0K KwkJCWVsc2UgaWYgKHB1Yi0+YWxsc2VxdWVuY2VzICYmIGlzX3NlcXVlbmNlKQorCQkJewor CQkJCXB1Ymxpc2ggPSB0cnVlOworCQkJfQorCisJCQkvKiBpZiBhIHNlcXVlbmNlLCBqdXN0 IGNyb3NzLWNoZWNrIHRoZSBsaXN0IG9mIHB1YmxpY2F0aW9ucyAqLworCQkJaWYgKCFwdWJs aXNoICYmIGlzX3NlcXVlbmNlKQorCQkJeworCQkJCWlmIChsaXN0X21lbWJlcl9vaWQocHVi aWRzLCBwdWItPm9pZCkpCisJCQkJCXB1Ymxpc2ggPSB0cnVlOworCQkJfQogCiAJCQlpZiAo IXB1Ymxpc2gpCiAJCQl7CkBAIC0xMjQzLDEwICsxMzIwLDEyIEBAIGdldF9yZWxfc3luY19l bnRyeShQR091dHB1dERhdGEgKmRhdGEsIE9pZCByZWxpZCkKIAkJCQllbnRyeS0+cHViYWN0 aW9ucy5wdWJ1cGRhdGUgfD0gcHViLT5wdWJhY3Rpb25zLnB1YnVwZGF0ZTsKIAkJCQllbnRy eS0+cHViYWN0aW9ucy5wdWJkZWxldGUgfD0gcHViLT5wdWJhY3Rpb25zLnB1YmRlbGV0ZTsK IAkJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSB8PSBwdWItPnB1YmFjdGlvbnMu cHVidHJ1bmNhdGU7CisJCQkJZW50cnktPnB1YmFjdGlvbnMucHVic2VxdWVuY2UgfD0gcHVi LT5wdWJhY3Rpb25zLnB1YnNlcXVlbmNlOwogCQkJfQogCiAJCQlpZiAoZW50cnktPnB1YmFj dGlvbnMucHViaW5zZXJ0ICYmIGVudHJ5LT5wdWJhY3Rpb25zLnB1YnVwZGF0ZSAmJgotCQkJ CWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRlbGV0ZSAmJiBlbnRyeS0+cHViYWN0aW9ucy5wdWJ0 cnVuY2F0ZSkKKwkJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZWxldGUgJiYgZW50cnktPnB1 YmFjdGlvbnMucHVidHJ1bmNhdGUgJiYKKwkJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJzZXF1 ZW5jZSkKIAkJCQlicmVhazsKIAkJfQogCkBAIC0xMzkxLDYgKzE0NzAsNyBAQCByZWxfc3lu Y19jYWNoZV9wdWJsaWNhdGlvbl9jYihEYXR1bSBhcmcsIGludCBjYWNoZWlkLCB1aW50MzIg aGFzaHZhbHVlKQogCQllbnRyeS0+cHViYWN0aW9ucy5wdWJ1cGRhdGUgPSBmYWxzZTsKIAkJ ZW50cnktPnB1YmFjdGlvbnMucHViZGVsZXRlID0gZmFsc2U7CiAJCWVudHJ5LT5wdWJhY3Rp b25zLnB1YnRydW5jYXRlID0gZmFsc2U7CisJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YnNlcXVl bmNlID0gZmFsc2U7CiAJfQogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9j YWNoZS9yZWxjYWNoZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYwpp bmRleCA5ZmE5ZTY3MWExLi4xYzMyODZhMzhjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91 dGlscy9jYWNoZS9yZWxjYWNoZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3Jl bGNhY2hlLmMKQEAgLTU2MDUsNiArNTYwNSw3IEBAIEdldFJlbGF0aW9uUHVibGljYXRpb25B Y3Rpb25zKFJlbGF0aW9uIHJlbGF0aW9uKQogCQlwdWJhY3Rpb25zLT5wdWJ1cGRhdGUgfD0g cHViZm9ybS0+cHVidXBkYXRlOwogCQlwdWJhY3Rpb25zLT5wdWJkZWxldGUgfD0gcHViZm9y bS0+cHViZGVsZXRlOwogCQlwdWJhY3Rpb25zLT5wdWJ0cnVuY2F0ZSB8PSBwdWJmb3JtLT5w dWJ0cnVuY2F0ZTsKKwkJcHViYWN0aW9ucy0+cHVic2VxdWVuY2UgfD0gcHViZm9ybS0+cHVi c2VxdWVuY2U7CiAKIAkJUmVsZWFzZVN5c0NhY2hlKHR1cCk7CiAKQEAgLTU2MTMsNyArNTYx NCw4IEBAIEdldFJlbGF0aW9uUHVibGljYXRpb25BY3Rpb25zKFJlbGF0aW9uIHJlbGF0aW9u KQogCQkgKiBvdGhlciBwdWJsaWNhdGlvbnMuCiAJCSAqLwogCQlpZiAocHViYWN0aW9ucy0+ cHViaW5zZXJ0ICYmIHB1YmFjdGlvbnMtPnB1YnVwZGF0ZSAmJgotCQkJcHViYWN0aW9ucy0+ cHViZGVsZXRlICYmIHB1YmFjdGlvbnMtPnB1YnRydW5jYXRlKQorCQkJcHViYWN0aW9ucy0+ cHViZGVsZXRlICYmIHB1YmFjdGlvbnMtPnB1YnRydW5jYXRlICYmCisJCQlwdWJhY3Rpb25z LT5wdWJzZXF1ZW5jZSkKIAkJCWJyZWFrOwogCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9w c3FsL3RhYi1jb21wbGV0ZS5jIGIvc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5jCmluZGV4 IDRmNzI0ZTQ0MjguLjU5YTM1MDJhZTIgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcHNxbC90YWIt Y29tcGxldGUuYworKysgYi9zcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmMKQEAgLTE2NDcs MTMgKzE2NDcsMTMgQEAgcHNxbF9jb21wbGV0aW9uKGNvbnN0IGNoYXIgKnRleHQsIGludCBz dGFydCwgaW50IGVuZCkKIAkJQ09NUExFVEVfV0lUSCgiQUREIiwgIkRST1AiLCAiT1dORVIg VE8iLCAiUkVOQU1FIFRPIiwgIlNFVCIpOwogCS8qIEFMVEVSIFBVQkxJQ0FUSU9OIDxuYW1l PiBBREQgKi8KIAllbHNlIGlmIChNYXRjaGVzKCJBTFRFUiIsICJQVUJMSUNBVElPTiIsIE1h dGNoQW55LCAiQUREIikpCi0JCUNPTVBMRVRFX1dJVEgoIkFMTCBUQUJMRVMgSU4gU0NIRU1B IiwgIlRBQkxFIik7CisJCUNPTVBMRVRFX1dJVEgoIkFMTCBUQUJMRVMgSU4gU0NIRU1BIiwg IlRBQkxFfFNFUVVFTkNFIik7CiAJLyogQUxURVIgUFVCTElDQVRJT04gPG5hbWU+IERST1Ag Ki8KIAllbHNlIGlmIChNYXRjaGVzKCJBTFRFUiIsICJQVUJMSUNBVElPTiIsIE1hdGNoQW55 LCAiRFJPUCIpKQotCQlDT01QTEVURV9XSVRIKCJBTEwgVEFCTEVTIElOIFNDSEVNQSIsICJU QUJMRSIpOworCQlDT01QTEVURV9XSVRIKCJBTEwgVEFCTEVTIElOIFNDSEVNQSIsICJUQUJM RXxTRVFVRU5DRSIpOwogCS8qIEFMVEVSIFBVQkxJQ0FUSU9OIDxuYW1lPiBTRVQgKi8KIAll bHNlIGlmIChNYXRjaGVzKCJBTFRFUiIsICJQVUJMSUNBVElPTiIsIE1hdGNoQW55LCAiU0VU IikpCi0JCUNPTVBMRVRFX1dJVEgoIigiLCAiQUxMIFRBQkxFUyBJTiBTQ0hFTUEiLCAiVEFC TEUiKTsKKwkJQ09NUExFVEVfV0lUSCgiKCIsICJBTEwgVEFCTEVTIElOIFNDSEVNQSIsICJU QUJMRXxTRVFVRU5DRSIpOwogCWVsc2UgaWYgKE1hdGNoZXMoIkFMVEVSIiwgIlBVQkxJQ0FU SU9OIiwgTWF0Y2hBbnksICJBRER8RFJPUHxTRVQiLCAiQUxMIiwgIlRBQkxFUyIsICJJTiIs ICJTQ0hFTUEiKSkKIAkJQ09NUExFVEVfV0lUSF9RVUVSWShRdWVyeV9mb3JfbGlzdF9vZl9z Y2hlbWFzCiAJCQkJCQkJIiBBTkQgbnNwbmFtZSAhPSAncGdfY2F0YWxvZycgIgpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2Nh dGFsb2cvcGdfcHJvYy5kYXQKaW5kZXggNjQxMmYzNjlmMS4uYmU1ZTNiNGQ0MCAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVk ZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBAIC0xMTUxMyw2ICsxMTUxMywxMSBAQAogICBwcm92 b2xhdGlsZSA9PiAncycsIHByb3JldHR5cGUgPT4gJ29pZCcsIHByb2FyZ3R5cGVzID0+ICd0 ZXh0JywKICAgcHJvYWxsYXJndHlwZXMgPT4gJ3t0ZXh0LG9pZH0nLCBwcm9hcmdtb2RlcyA9 PiAne2ksb30nLAogICBwcm9hcmduYW1lcyA9PiAne3B1Ym5hbWUscmVsaWR9JywgcHJvc3Jj ID0+ICdwZ19nZXRfcHVibGljYXRpb25fdGFibGVzJyB9LAoreyBvaWQgPT4gJzgwMDAnLCBk ZXNjciA9PiAnZ2V0IE9JRHMgb2Ygc2VxdWVuY2VzIGluIGEgcHVibGljYXRpb24nLAorICBw cm9uYW1lID0+ICdwZ19nZXRfcHVibGljYXRpb25fc2VxdWVuY2VzJywgcHJvcm93cyA9PiAn MTAwMCcsIHByb3JldHNldCA9PiAndCcsCisgIHByb3ZvbGF0aWxlID0+ICdzJywgcHJvcmV0 dHlwZSA9PiAnb2lkJywgcHJvYXJndHlwZXMgPT4gJ3RleHQnLAorICBwcm9hbGxhcmd0eXBl cyA9PiAne3RleHQsb2lkfScsIHByb2FyZ21vZGVzID0+ICd7aSxvfScsCisgIHByb2FyZ25h bWVzID0+ICd7cHVibmFtZSxyZWxpZH0nLCBwcm9zcmMgPT4gJ3BnX2dldF9wdWJsaWNhdGlv bl9zZXF1ZW5jZXMnIH0sCiB7IG9pZCA9PiAnNjEyMScsCiAgIGRlc2NyID0+ICdyZXR1cm5z IHdoZXRoZXIgYSByZWxhdGlvbiBjYW4gYmUgcGFydCBvZiBhIHB1YmxpY2F0aW9uJywKICAg cHJvbmFtZSA9PiAncGdfcmVsYXRpb25faXNfcHVibGlzaGFibGUnLCBwcm92b2xhdGlsZSA9 PiAncycsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9u LmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmgKaW5kZXggMWFlNDM5 ZTZmMy4uMGEwNWZiODg1YyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19w dWJsaWNhdGlvbi5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24u aApAQCAtNDAsNiArNDAsMTIgQEAgQ0FUQUxPRyhwZ19wdWJsaWNhdGlvbiw2MTA0LFB1Ymxp Y2F0aW9uUmVsYXRpb25JZCkKIAkgKi8KIAlib29sCQlwdWJhbGx0YWJsZXM7CiAKKwkvKgor CSAqIGluZGljYXRlcyB0aGF0IHRoaXMgaXMgc3BlY2lhbCBwdWJsaWNhdGlvbiB3aGljaCBz aG91bGQgZW5jb21wYXNzIGFsbAorCSAqIHNlcXVlbmNlcyBpbiB0aGUgZGF0YWJhc2UgKGV4 Y2VwdCBmb3IgdGhlIHVubG9nZ2VkIGFuZCB0ZW1wIG9uZXMpCisJICovCisJYm9vbAkJcHVi YWxsc2VxdWVuY2VzOworCiAJLyogdHJ1ZSBpZiBpbnNlcnRzIGFyZSBwdWJsaXNoZWQgKi8K IAlib29sCQlwdWJpbnNlcnQ7CiAKQEAgLTUyLDYgKzU4LDkgQEAgQ0FUQUxPRyhwZ19wdWJs aWNhdGlvbiw2MTA0LFB1YmxpY2F0aW9uUmVsYXRpb25JZCkKIAkvKiB0cnVlIGlmIHRydW5j YXRlcyBhcmUgcHVibGlzaGVkICovCiAJYm9vbAkJcHVidHJ1bmNhdGU7CiAKKwkvKiB0cnVl IGlmIHNlcXVlbmNlcyBhcmUgcHVibGlzaGVkICovCisJYm9vbAkJcHVic2VxdWVuY2U7CisK IAkvKiB0cnVlIGlmIHBhcnRpdGlvbiBjaGFuZ2VzIGFyZSBwdWJsaXNoZWQgdXNpbmcgcm9v dCBzY2hlbWEgKi8KIAlib29sCQlwdWJ2aWFyb290OwogfSBGb3JtRGF0YV9wZ19wdWJsaWNh dGlvbjsKQEAgLTcyLDYgKzgxLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUHVibGljYXRpb25BY3Rp b25zCiAJYm9vbAkJcHVidXBkYXRlOwogCWJvb2wJCXB1YmRlbGV0ZTsKIAlib29sCQlwdWJ0 cnVuY2F0ZTsKKwlib29sCQlwdWJzZXF1ZW5jZTsKIH0gUHVibGljYXRpb25BY3Rpb25zOwog CiB0eXBlZGVmIHN0cnVjdCBQdWJsaWNhdGlvbgpAQCAtNzksNiArODksNyBAQCB0eXBlZGVm IHN0cnVjdCBQdWJsaWNhdGlvbgogCU9pZAkJCW9pZDsKIAljaGFyCSAgICpuYW1lOwogCWJv b2wJCWFsbHRhYmxlczsKKwlib29sCQlhbGxzZXF1ZW5jZXM7CiAJYm9vbAkJcHVidmlhcm9v dDsKIAlQdWJsaWNhdGlvbkFjdGlvbnMgcHViYWN0aW9uczsKIH0gUHVibGljYXRpb247CkBA IC0xMjEsNiArMTMyLDkgQEAgZXh0ZXJuIExpc3QgKkdldFB1YlBhcnRpdGlvbk9wdGlvblJl bGF0aW9ucyhMaXN0ICpyZXN1bHQsCiAJCQkJCQkJCQkJCVB1YmxpY2F0aW9uUGFydE9wdCBw dWJfcGFydG9wdCwKIAkJCQkJCQkJCQkJT2lkIHJlbGlkKTsKIAorZXh0ZXJuIExpc3QgKkdl dEFsbFNlcXVlbmNlc1B1YmxpY2F0aW9uUmVsYXRpb25zKHZvaWQpOworZXh0ZXJuIExpc3Qg KkdldFB1YmxpY2F0aW9uU2VxdWVuY2VSZWxhdGlvbnMoT2lkIHB1YmlkKTsKKwogZXh0ZXJu IGJvb2wgaXNfcHVibGlzaGFibGVfcmVsYXRpb24oUmVsYXRpb24gcmVsKTsKIGV4dGVybiBP YmplY3RBZGRyZXNzIHB1YmxpY2F0aW9uX2FkZF9yZWxhdGlvbihPaWQgcHViaWQsIFB1Ymxp Y2F0aW9uUmVsSW5mbyAqdGFyZ2V0cmVsLAogCQkJCQkJCQkJCQkgIGJvb2wgaWZfbm90X2V4 aXN0cyk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5jZS5oIGIv c3JjL2luY2x1ZGUvY29tbWFuZHMvc2VxdWVuY2UuaAppbmRleCBkZGIzNmI1YjE3Li4wMDAz OGZjZWEzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5jZS5oCisr KyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmgKQEAgLTYwLDYgKzYwLDcgQEAg ZXh0ZXJuIE9iamVjdEFkZHJlc3MgRGVmaW5lU2VxdWVuY2UoUGFyc2VTdGF0ZSAqcHN0YXRl LCBDcmVhdGVTZXFTdG10ICpzdG10KTsKIGV4dGVybiBPYmplY3RBZGRyZXNzIEFsdGVyU2Vx dWVuY2UoUGFyc2VTdGF0ZSAqcHN0YXRlLCBBbHRlclNlcVN0bXQgKnN0bXQpOwogZXh0ZXJu IHZvaWQgRGVsZXRlU2VxdWVuY2VUdXBsZShPaWQgcmVsaWQpOwogZXh0ZXJuIHZvaWQgUmVz ZXRTZXF1ZW5jZShPaWQgc2VxX3JlbGlkKTsKK2V4dGVybiB2b2lkIFJlc2V0U2VxdWVuY2Uy KE9pZCBzZXFfcmVsaWQsIGludDY0IGxhc3RfdmFsdWUsIGludDY0IGxvZ19jbnQsIGJvb2wg aXNfY2FsbGVkKTsKIGV4dGVybiB2b2lkIFJlc2V0U2VxdWVuY2VDYWNoZXModm9pZCk7CiAK IGV4dGVybiB2b2lkIEF0RU9YYWN0X1NlcXVlbmNlcyhib29sIGlzQ29tbWl0KTsKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25v ZGVzL3BhcnNlbm9kZXMuaAppbmRleCAwNjcxMzhlNmI1Li40NGU1OTZmZDEyIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUv bm9kZXMvcGFyc2Vub2Rlcy5oCkBAIC0zNjUyLDYgKzM2NTIsMTAgQEAgdHlwZWRlZiBlbnVt IFB1YmxpY2F0aW9uT2JqU3BlY1R5cGUKIAlQVUJMSUNBVElPTk9CSl9UQUJMRV9JTl9TQ0hF TUEsIC8qIFRhYmxlcyBpbiBzY2hlbWEgdHlwZSAqLwogCVBVQkxJQ0FUSU9OT0JKX1RBQkxF X0lOX0NVUl9TQ0hFTUEsIC8qIEdldCB0aGUgZmlyc3QgZWxlbWVudCBmcm9tCiAJCQkJCQkJ CQkJICogc2VhcmNoX3BhdGggKi8KKwlQVUJMSUNBVElPTk9CSl9TRVFVRU5DRSwJCS8qIFNl cXVlbmNlIHR5cGUgKi8KKwlQVUJMSUNBVElPTk9CSl9TRVFVRU5DRV9JTl9TQ0hFTUEsIC8q IFNlcXVlbmNlcyBpbiBzY2hlbWEgdHlwZSAqLworCVBVQkxJQ0FUSU9OT0JKX1NFUVVFTkNF X0lOX0NVUl9TQ0hFTUEsIC8qIEdldCB0aGUgZmlyc3QgZWxlbWVudCBmcm9tCisJCQkJCQkJ CQkJICogc2VhcmNoX3BhdGggKi8KIAlQVUJMSUNBVElPTk9CSl9DT05USU5VQVRJT04gLyog Q29udGludWF0aW9uIG9mIHByZXZpb3VzIHR5cGUgKi8KIH0gUHVibGljYXRpb25PYmpTcGVj VHlwZTsKIApAQCAtMzY3MSw2ICszNjc1LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQ3JlYXRlUHVi bGljYXRpb25TdG10CiAJTGlzdAkgICAqb3B0aW9uczsJCS8qIExpc3Qgb2YgRGVmRWxlbSBu b2RlcyAqLwogCUxpc3QJICAgKnB1Ym9iamVjdHM7CQkvKiBPcHRpb25hbCBsaXN0IG9mIHB1 YmxpY2F0aW9uIG9iamVjdHMgKi8KIAlib29sCQlmb3JfYWxsX3RhYmxlczsgLyogU3BlY2lh bCBwdWJsaWNhdGlvbiBmb3IgYWxsIHRhYmxlcyBpbiBkYiAqLworCWJvb2wJCWZvcl9hbGxf c2VxdWVuY2VzOyAvKiBTcGVjaWFsIHB1YmxpY2F0aW9uIGZvciBhbGwgc2VxdWVuY2VzIGlu IGRiICovCiB9IENyZWF0ZVB1YmxpY2F0aW9uU3RtdDsKIAogdHlwZWRlZiBzdHJ1Y3QgQWx0 ZXJQdWJsaWNhdGlvblN0bXQKQEAgLTM2ODcsNiArMzY5Miw3IEBAIHR5cGVkZWYgc3RydWN0 IEFsdGVyUHVibGljYXRpb25TdG10CiAJICovCiAJTGlzdAkgICAqcHVib2JqZWN0czsJCS8q IE9wdGlvbmFsIGxpc3Qgb2YgcHVibGljYXRpb24gb2JqZWN0cyAqLwogCWJvb2wJCWZvcl9h bGxfdGFibGVzOyAvKiBTcGVjaWFsIHB1YmxpY2F0aW9uIGZvciBhbGwgdGFibGVzIGluIGRi ICovCisJYm9vbAkJZm9yX2FsbF9zZXF1ZW5jZXM7IC8qIFNwZWNpYWwgcHVibGljYXRpb24g Zm9yIGFsbCBzZXF1ZW5jZXMgaW4gZGIgKi8KIAlEZWZFbGVtQWN0aW9uIGFjdGlvbjsJCS8q IFdoYXQgYWN0aW9uIHRvIHBlcmZvcm0gd2l0aCB0aGUKIAkJCQkJCQkJICogdGFibGVzL3Nj aGVtYXMgKi8KIH0gQWx0ZXJQdWJsaWNhdGlvblN0bXQ7CmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0 aW9uL2xvZ2ljYWxwcm90by5oCmluZGV4IDgzNzQxZGNmNDIuLmQ0NjhjM2NjZmIgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oCisrKyBiL3Ny Yy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oCkBAIC02MCw2ICs2MCw3IEBA IHR5cGVkZWYgZW51bSBMb2dpY2FsUmVwTXNnVHlwZQogCUxPR0lDQUxfUkVQX01TR19SRUxB VElPTiA9ICdSJywKIAlMT0dJQ0FMX1JFUF9NU0dfVFlQRSA9ICdZJywKIAlMT0dJQ0FMX1JF UF9NU0dfTUVTU0FHRSA9ICdNJywKKwlMT0dJQ0FMX1JFUF9NU0dfU0VRVUVOQ0UgPSAnWCcs CS8qIEZJWE1FIGNoYW5nZSAqLwogCUxPR0lDQUxfUkVQX01TR19CRUdJTl9QUkVQQVJFID0g J2InLAogCUxPR0lDQUxfUkVQX01TR19QUkVQQVJFID0gJ1AnLAogCUxPR0lDQUxfUkVQX01T R19DT01NSVRfUFJFUEFSRUQgPSAnSycsCkBAIC0xMTcsNiArMTE4LDE5IEBAIHR5cGVkZWYg c3RydWN0IExvZ2ljYWxSZXBUeXAKIAljaGFyCSAgICp0eXBuYW1lOwkJLyogbmFtZSBvZiB0 aGUgcmVtb3RlIHR5cGUgKi8KIH0gTG9naWNhbFJlcFR5cDsKIAorLyogU2VxdWVuY2UgaW5m byAqLwordHlwZWRlZiBzdHJ1Y3QgTG9naWNhbFJlcFNlcXVlbmNlCit7CisJT2lkCQkJcmVt b3RlaWQ7CQkvKiB1bmlxdWUgaWQgb2YgdGhlIHJlbW90ZSBzZXF1ZW5jZSAqLworCWNoYXIJ ICAgKm5zcG5hbWU7CQkvKiBzY2hlbWEgbmFtZSBvZiByZW1vdGUgc2VxdWVuY2UgKi8KKwlj aGFyCSAgICpzZXFuYW1lOwkJLyogbmFtZSBvZiB0aGUgcmVtb3RlIHNlcXVlbmNlICovCisJ Ym9vbAkJdHJhbnNhY3Rpb25hbDsKKwlib29sCQljcmVhdGVkOworCWludDY0CQlsYXN0X3Zh bHVlOworCWludDY0CQlsb2dfY250OwkJLyogWFhYIHByb2JhYmx5IG5vdCBuZWVkZWQ/ICov CisJYm9vbAkJaXNfY2FsbGVkOwkJLyogWFhYIHByb2JhYmx5IG5vdCBuZWVkZWQ/ICovCit9 IExvZ2ljYWxSZXBTZXF1ZW5jZTsKKwogLyogVHJhbnNhY3Rpb24gaW5mbyAqLwogdHlwZWRl ZiBzdHJ1Y3QgTG9naWNhbFJlcEJlZ2luRGF0YQogewpAQCAtMjI3LDYgKzI0MSwxMiBAQCBl eHRlcm4gTGlzdCAqbG9naWNhbHJlcF9yZWFkX3RydW5jYXRlKFN0cmluZ0luZm8gaW4sCiAJ CQkJCQkJCQkgIGJvb2wgKmNhc2NhZGUsIGJvb2wgKnJlc3RhcnRfc2Vxcyk7CiBleHRlcm4g dm9pZCBsb2dpY2FscmVwX3dyaXRlX21lc3NhZ2UoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0 aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbiwKIAkJCQkJCQkJCSBib29sIHRyYW5zYWN0aW9u YWwsIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSk7 CitleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dyaXRlX3NlcXVlbmNlKFN0cmluZ0luZm8gb3V0 LCBSZWxhdGlvbiByZWwsCisJCQkJCQkJCQkgIFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVj UHRyIGxzbiwgCisJCQkJCQkJCQkgIGJvb2wgdHJhbnNhY3Rpb25hbCwgYm9vbCBjcmVhdGVk LAorCQkJCQkJCQkJICBpbnQ2NCBsYXN0X3ZhbHVlLCBpbnQ2NCBsb2dfY250LAorCQkJCQkJ CQkJICBib29sIGlzX2NhbGxlZCk7CitleHRlcm4gdm9pZCBsb2dpY2FscmVwX3JlYWRfc2Vx dWVuY2UoU3RyaW5nSW5mbyBpbiwgTG9naWNhbFJlcFNlcXVlbmNlICpzZXFkYXRhKTsKIGV4 dGVybiB2b2lkIGxvZ2ljYWxyZXBfd3JpdGVfcmVsKFN0cmluZ0luZm8gb3V0LCBUcmFuc2Fj dGlvbklkIHhpZCwKIAkJCQkJCQkJIFJlbGF0aW9uIHJlbCk7CiBleHRlcm4gTG9naWNhbFJl cFJlbGF0aW9uICpsb2dpY2FscmVwX3JlYWRfcmVsKFN0cmluZ0luZm8gaW4pOwpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcGdvdXRwdXQuaCBiL3NyYy9pbmNsdWRl L3JlcGxpY2F0aW9uL3Bnb3V0cHV0LmgKaW5kZXggMGRjNDYwZmI3MC4uOTdlYjJhN2VmMSAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcGdvdXRwdXQuaAorKysgYi9z cmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9wZ291dHB1dC5oCkBAIC0yOCw2ICsyOCw3IEBAIHR5 cGVkZWYgc3RydWN0IFBHT3V0cHV0RGF0YQogCWJvb2wJCXN0cmVhbWluZzsKIAlib29sCQlt ZXNzYWdlczsKIAlib29sCQl0d29fcGhhc2U7CisJYm9vbAkJc2VxdWVuY2VzOwogfSBQR091 dHB1dERhdGE7CiAKICNlbmRpZgkJCQkJCQkvKiBQR09VVFBVVF9IICovCmRpZmYgLS1naXQg YS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dCBiL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvcnVsZXMub3V0CmluZGV4IDJmYTAwYTNjMjkuLmIzMmExZTY3MjkgMTAw NjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVsZXMub3V0CisrKyBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVsZXMub3V0CkBAIC0xNDUxLDYgKzE0NTEsMTQg QEAgcGdfcHJlcGFyZWRfeGFjdHN8IFNFTEVDVCBwLnRyYW5zYWN0aW9uLAogICAgRlJPTSAo KHBnX3ByZXBhcmVkX3hhY3QoKSBwKHRyYW5zYWN0aW9uLCBnaWQsIHByZXBhcmVkLCBvd25l cmlkLCBkYmlkKQogICAgICBMRUZUIEpPSU4gcGdfYXV0aGlkIHUgT04gKChwLm93bmVyaWQg PSB1Lm9pZCkpKQogICAgICBMRUZUIEpPSU4gcGdfZGF0YWJhc2UgZCBPTiAoKHAuZGJpZCA9 IGQub2lkKSkpOworcGdfcHVibGljYXRpb25fc2VxdWVuY2VzfCBTRUxFQ1QgcC5wdWJuYW1l LAorICAgIG4ubnNwbmFtZSBBUyBzY2hlbWFuYW1lLAorICAgIGMucmVsbmFtZSBBUyBzZXF1 ZW5jZW5hbWUKKyAgIEZST00gcGdfcHVibGljYXRpb24gcCwKKyAgICBMQVRFUkFMIHBnX2dl dF9wdWJsaWNhdGlvbl9zZXF1ZW5jZXMoKHAucHVibmFtZSk6OnRleHQpIGdwdChyZWxpZCks CisgICAgKHBnX2NsYXNzIGMKKyAgICAgSk9JTiBwZ19uYW1lc3BhY2UgbiBPTiAoKG4ub2lk ID0gYy5yZWxuYW1lc3BhY2UpKSkKKyAgV0hFUkUgKGMub2lkID0gZ3B0LnJlbGlkKTsKIHBn X3B1YmxpY2F0aW9uX3RhYmxlc3wgU0VMRUNUIHAucHVibmFtZSwKICAgICBuLm5zcG5hbWUg QVMgc2NoZW1hbmFtZSwKICAgICBjLnJlbG5hbWUgQVMgdGFibGVuYW1lCmRpZmYgLS1naXQg YS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMjNfc2VxdWVuY2VzLnBsIGIvc3JjL3Rlc3Qv c3Vic2NyaXB0aW9uL3QvMDIzX3NlcXVlbmNlcy5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwLi5jNmM0MzhjZGJmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rl c3Qvc3Vic2NyaXB0aW9uL3QvMDIzX3NlcXVlbmNlcy5wbApAQCAtMCwwICsxLDE5NiBAQAor CisjIENvcHlyaWdodCAoYykgMjAyMSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQg R3JvdXAKKworIyBUaGlzIHRlc3RzIHRoYXQgc2VxdWVuY2VzIGFyZSByZXBsaWNhdGVkIGNv cnJlY3RseSBieSBsb2dpY2FsIHJlcGxpY2F0aW9uCit1c2Ugc3RyaWN0OwordXNlIHdhcm5p bmdzOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6 VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZSB0ZXN0cyA9PiA2OworCisjIEluaXRpYWxp emUgcHVibGlzaGVyIG5vZGUKK215ICRub2RlX3B1Ymxpc2hlciA9IFBvc3RncmVTUUw6OlRl c3Q6OkNsdXN0ZXItPm5ldygncHVibGlzaGVyJyk7Ciskbm9kZV9wdWJsaXNoZXItPmluaXQo YWxsb3dzX3N0cmVhbWluZyA9PiAnbG9naWNhbCcpOworJG5vZGVfcHVibGlzaGVyLT5zdGFy dDsKKworIyBDcmVhdGUgc3Vic2NyaWJlciBub2RlCitteSAkbm9kZV9zdWJzY3JpYmVyID0g UG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdzdWJzY3JpYmVyJyk7Ciskbm9kZV9z dWJzY3JpYmVyLT5pbml0KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsKKyRub2Rl X3N1YnNjcmliZXItPnN0YXJ0OworCisjIENyZWF0ZSBzb21lIHByZWV4aXN0aW5nIGNvbnRl bnQgb24gcHVibGlzaGVyCitteSAkZGRsID0gcXEoCisJQ1JFQVRFIFNFUVVFTkNFIHM7Cisp OworCisjIFNldHVwIHN0cnVjdHVyZSBvbiB0aGUgcHVibGlzaGVyCiskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAkZGRsKTsKKworIyBDcmVhdGUgc29tZSB0aGUg c2FtZSBzdHJ1Y3R1cmUgb24gc3Vic2NyaWJlciwgYW5kIGFuIGV4dHJhIHNlcXVlbmNlIHRo YXQKKyMgd2UnbGwgY3JlYXRlIG9uIHRoZSBwdWJsaXNoZXIgbGF0ZXIKKyRkZGwgPSBxcSgK KwlDUkVBVEUgU0VRVUVOQ0UgczsKKwlDUkVBVEUgU0VRVUVOQ0UgczI7CispOworCiskbm9k ZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJGRkbCk7CisKKyMgU2V0dXAg bG9naWNhbCByZXBsaWNhdGlvbgorbXkgJHB1Ymxpc2hlcl9jb25uc3RyID0gJG5vZGVfcHVi bGlzaGVyLT5jb25uc3RyIC4gJyBkYm5hbWU9cG9zdGdyZXMnOworJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFBVQkxJQ0FUSU9OIHNlcV9wdWIi KTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQUxURVIg UFVCTElDQVRJT04gc2VxX3B1YiBBREQgU0VRVUVOQ0UgcyIpOworCiskbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFNVQlNDUklQVElPTiBzZXFf c3ViIENPTk5FQ1RJT04gJyRwdWJsaXNoZXJfY29ubnN0cicgUFVCTElDQVRJT04gc2VxX3B1 YiBXSVRIIChzbG90X25hbWUgPSBzZXFfc3ViX3Nsb3QpIgorKTsKKworJG5vZGVfcHVibGlz aGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdzZXFfc3ViJyk7CisKKyMgV2FpdCBmb3IgaW5pdGlh bCBzeW5jIHRvIGZpbmlzaCBhcyB3ZWxsCitteSAkc3luY2VkX3F1ZXJ5ID0KKyAgIlNFTEVD VCBjb3VudCgxKSA9IDAgRlJPTSBwZ19zdWJzY3JpcHRpb25fcmVsIFdIRVJFIHNyc3Vic3Rh dGUgTk9UIElOICgncycsICdyJyk7IjsKKyRub2RlX3N1YnNjcmliZXItPnBvbGxfcXVlcnlf dW50aWwoJ3Bvc3RncmVzJywgJHN5bmNlZF9xdWVyeSkKKyAgb3IgZGllICJUaW1lZCBvdXQg d2hpbGUgd2FpdGluZyBmb3Igc3Vic2NyaWJlciB0byBzeW5jaHJvbml6ZSBkYXRhIjsKKwor IyBJbnNlcnQgaW5pdGlhbCB0ZXN0IGRhdGEKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KAorCSdwb3N0Z3JlcycsIHFxKAorCS0tIGdlbmVyYXRlIGEgbnVtYmVyIG9mIHZhbHVlcyB1 c2luZyB0aGUgc2VxdWVuY2UKKwlTRUxFQ1QgbmV4dHZhbCgncycpIEZST00gZ2VuZXJhdGVf c2VyaWVzKDEsMTAwKTsKKykpOworCiskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNo dXAoJ3NlcV9zdWInKTsKKworIyBDaGVjayB0aGUgZGF0YSBvbiBzdWJzY3JpYmVyCitteSAk cmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKAorCSdwb3N0Z3JlcycsIHFx KAorCVNFTEVDVCAqIEZST00gczsKKykpOworCitpcyggJHJlc3VsdCwgJzEzMnwwfHQnLAor CSdjaGVjayByZXBsaWNhdGVkIHNlcXVlbmNlIHZhbHVlcyBvbiBzdWJzY3JpYmVyJyk7CisK KworIyBhZHZhbmNlIHRoZSBzZXF1ZW5jZSBpbiBhIHJvbGxlZC1iYWNrIHRyYW5zYWN0aW9u IC0gc2hvdWxkIGJlIHJlcGxpY2F0ZWQKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAor CSdwb3N0Z3JlcycsIHFxKAorCUJFR0lOOworCVNFTEVDVCBuZXh0dmFsKCdzJykgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwxMDApOworCVJPTExCQUNLOworKSk7CisKKyRub2RlX3B1Ymxp c2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnc2VxX3N1YicpOworCisjIENoZWNrIHRoZSBkYXRh IG9uIHN1YnNjcmliZXIKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo CisJJ3Bvc3RncmVzJywgcXEoCisJU0VMRUNUICogRlJPTSBzOworKSk7CisKK2lzKCAkcmVz dWx0LCAnMjMxfDB8dCcsCisJJ2NoZWNrIHJlcGxpY2F0ZWQgc2VxdWVuY2UgdmFsdWVzIG9u IHN1YnNjcmliZXInKTsKKworCisjIGNyZWF0ZSBhIG5ldyBzZXF1ZW5jZSBhbmQgcm9sbCBp dCBiYWNrIC0gc2hvdWxkIG5vdCBiZSByZXBsaWNhdGVkLCBkdWUgdG8KKyMgdGhlIHRyYW5z YWN0aW9uYWwgYmVoYXZpb3IKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCSdwb3N0 Z3JlcycsIHFxKAorCUJFR0lOOworCUNSRUFURSBTRVFVRU5DRSBzMjsKKwlBTFRFUiBQVUJM SUNBVElPTiBzZXFfcHViIEFERCBTRVFVRU5DRSBzMjsKKwlTRUxFQ1QgbmV4dHZhbCgnczIn KSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMCk7CisJUk9MTEJBQ0s7CispKTsKKworJG5v ZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdzZXFfc3ViJyk7CisKKyMgQ2hlY2sg dGhlIGRhdGEgb24gc3Vic2NyaWJlcgorJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNh ZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxcSgKKwlTRUxFQ1QgKiBGUk9NIHMyOworKSk7CisK K2lzKCAkcmVzdWx0LCAnMXwwfGYnLAorCSdjaGVjayByZXBsaWNhdGVkIHNlcXVlbmNlIHZh bHVlcyBvbiBzdWJzY3JpYmVyJyk7CisKKworIyBjcmVhdGUgYSBuZXcgc2VxdWVuY2UsIGFk dmFuY2UgaXQgaW4gYSByb2xsZWQtYmFjayB0cmFuc2FjdGlvbiwgYnV0IGNvbW1pdAorIyB0 aGUgY3JlYXRlIC0gdGhlIGFkdmFuY2Ugc2hvdWxkIGJlIHJlcGxpY2F0ZWQgbmV2ZXJ0aGVs ZXNzCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxcSgKKwlC RUdJTjsKKwlDUkVBVEUgU0VRVUVOQ0UgczI7CisJQUxURVIgUFVCTElDQVRJT04gc2VxX3B1 YiBBREQgU0VRVUVOQ0UgczI7CisJU0FWRVBPSU5UIHNwMTsKKwlTRUxFQ1QgbmV4dHZhbCgn czInKSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMCk7CisJUk9MTEJBQ0sgVE8gc3AxOwor CUNPTU1JVDsKKykpOworCiskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ3Nl cV9zdWInKTsKKworIyBXYWl0IGZvciBzeW5jIG9mIHRoZSBzZWNvbmQgc2VxdWVuY2Ugd2Ug anVzdCBhZGRlZCB0byBmaW5pc2gKKyRzeW5jZWRfcXVlcnkgPQorICAiU0VMRUNUIGNvdW50 KDEpID0gMCBGUk9NIHBnX3N1YnNjcmlwdGlvbl9yZWwgV0hFUkUgc3JzdWJzdGF0ZSBOT1Qg SU4gKCdzJywgJ3InKTsiOworJG5vZGVfc3Vic2NyaWJlci0+cG9sbF9xdWVyeV91bnRpbCgn cG9zdGdyZXMnLCAkc3luY2VkX3F1ZXJ5KQorICBvciBkaWUgIlRpbWVkIG91dCB3aGlsZSB3 YWl0aW5nIGZvciBzdWJzY3JpYmVyIHRvIHN5bmNocm9uaXplIGRhdGEiOworCisjIENoZWNr IHRoZSBkYXRhIG9uIHN1YnNjcmliZXIKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoCisJJ3Bvc3RncmVzJywgcXEoCisJU0VMRUNUICogRlJPTSBzMjsKKykpOwor CitpcyggJHJlc3VsdCwgJzEzMnwwfHQnLAorCSdjaGVjayByZXBsaWNhdGVkIHNlcXVlbmNl IHZhbHVlcyBvbiBzdWJzY3JpYmVyJyk7CisKKworIyBhZHZhbmNlIHRoZSBuZXcgc2VxdWVu Y2UgaW4gYSB0cmFuc2FjdGlvbiwgYW5kIHJvbGwgaXQgYmFjayAtIGluIHRoaXMgY2FzZQor IyBpdCBzaG91bGQgYmUgcmVwbGljYXRlZCBhcyB0aGUgYmVoYXZpb3IgaXMgbm9uLXRyYW5z YWN0aW9uYWwKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCSdwb3N0Z3JlcycsIHFx KAorCUJFR0lOOworCVNFTEVDVCBuZXh0dmFsKCdzMicpIEZST00gZ2VuZXJhdGVfc2VyaWVz KDEsMTAwKTsKKwlST0xMQkFDSzsKKykpOworCiskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9y X2NhdGNodXAoJ3NlcV9zdWInKTsKKworIyBDaGVjayB0aGUgZGF0YSBvbiBzdWJzY3JpYmVy CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKAorCSdwb3N0Z3Jlcycs IHFxKAorCVNFTEVDVCAqIEZST00gczI7CispKTsKKworaXMoICRyZXN1bHQsICcyMzF8MHx0 JywKKwknY2hlY2sgcmVwbGljYXRlZCBzZXF1ZW5jZSB2YWx1ZXMgb24gc3Vic2NyaWJlcicp OworCisKKyMgYWR2YW5jZSB0aGUgc2VxdWVuY2UgaW4gYSBzdWJ0cmFuc2FjdGlvbiAtIHRo ZSBzdWJ0cmFuc2FjdGlvbiBnZXRzIHJvbGxlZAorIyBiYWNrLCBidXQgY29tbWl0IHRoZSBt YWluIG9uZSAtIHRoZSBjaGFuZ2VzIHNob3VsZCBzdGlsbCBiZSByZXBsaWNhdGVkCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxcSgKKwlCRUdJTjsKKwlT QVZFUE9JTlQgczE7CisJU0VMRUNUIG5leHR2YWwoJ3MyJykgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoMSwxMDApOworCVJPTExCQUNLIFRPIHMxOworCUNPTU1JVDsKKykpOworCiskbm9kZV9w dWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ3NlcV9zdWInKTsKKworIyBDaGVjayB0aGUg ZGF0YSBvbiBzdWJzY3JpYmVyCiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9w c3FsKAorCSdwb3N0Z3JlcycsIHFxKAorCVNFTEVDVCAqIEZST00gczI7CispKTsKKworaXMo ICRyZXN1bHQsICczMzB8MHx0JywKKwknY2hlY2sgcmVwbGljYXRlZCBzZXF1ZW5jZSB2YWx1 ZXMgb24gc3Vic2NyaWJlcicpOworCisKKyRub2RlX3N1YnNjcmliZXItPnN0b3AoJ2Zhc3Qn KTsKKyRub2RlX3B1Ymxpc2hlci0+c3RvcCgnZmFzdCcpOwotLSAKMi4zMS4xCgo= --------------PSu0kcrJZId8sBgRJ9Ec0YQG Content-Type: text/x-patch; charset=UTF-8; name="0003-Add-support-for-decoding-sequences-to-test_-20211118.patch" Content-Disposition: attachment; filename*0="0003-Add-support-for-decoding-sequences-to-test_-20211118.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAwNjY2YzNhMzQ5NTVmYzJlZGI4MTFiMzZjMDgxZDI3MTg1NWQ1NjllIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogRnJpLCAyNCBTZXAgMjAyMSAwMDo0MjowNCArMDIwMApTdWJq ZWN0OiBbUEFUQ0ggMy80XSBBZGQgc3VwcG9ydCBmb3IgZGVjb2Rpbmcgc2VxdWVuY2VzIHRv IHRlc3RfZGVjb2RpbmcKCi0tLQogY29udHJpYi90ZXN0X2RlY29kaW5nL01ha2VmaWxlICAg ICAgICAgICAgICB8ICAgMyArLQogY29udHJpYi90ZXN0X2RlY29kaW5nL2V4cGVjdGVkL3Nl cXVlbmNlLm91dCB8IDMyNyArKysrKysrKysrKysrKysrKysrKwogY29udHJpYi90ZXN0X2Rl Y29kaW5nL3NxbC9zZXF1ZW5jZS5zcWwgICAgICB8IDExOSArKysrKysrCiBjb250cmliL3Rl c3RfZGVjb2RpbmcvdGVzdF9kZWNvZGluZy5jICAgICAgIHwgIDY5ICsrKysrCiA0IGZpbGVz IGNoYW5nZWQsIDUxNyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9k ZSAxMDA2NDQgY29udHJpYi90ZXN0X2RlY29kaW5nL2V4cGVjdGVkL3NlcXVlbmNlLm91dAog Y3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvdGVzdF9kZWNvZGluZy9zcWwvc2VxdWVuY2Uu c3FsCgpkaWZmIC0tZ2l0IGEvY29udHJpYi90ZXN0X2RlY29kaW5nL01ha2VmaWxlIGIvY29u dHJpYi90ZXN0X2RlY29kaW5nL01ha2VmaWxlCmluZGV4IDlhMzFlMGI4NzkuLjU2ZGRjM2Fi YWUgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvdGVzdF9kZWNvZGluZy9NYWtlZmlsZQorKysgYi9j b250cmliL3Rlc3RfZGVjb2RpbmcvTWFrZWZpbGUKQEAgLTUsNyArNSw4IEBAIFBHRklMRURF U0MgPSAidGVzdF9kZWNvZGluZyAtIGV4YW1wbGUgb2YgYSBsb2dpY2FsIGRlY29kaW5nIG91 dHB1dCBwbHVnaW4iCiAKIFJFR1JFU1MgPSBkZGwgeGFjdCByZXdyaXRlIHRvYXN0IHBlcm1p c3Npb25zIGRlY29kaW5nX2luX3hhY3QgXAogCWRlY29kaW5nX2ludG9fcmVsIGJpbmFyeSBw cmVwYXJlZCByZXBsb3JpZ2luIHRpbWUgbWVzc2FnZXMgXAotCXNwaWxsIHNsb3QgdHJ1bmNh dGUgc3RyZWFtIHN0YXRzIHR3b3BoYXNlIHR3b3BoYXNlX3N0cmVhbQorCXNwaWxsIHNsb3Qg dHJ1bmNhdGUgc3RyZWFtIHN0YXRzIHR3b3BoYXNlIHR3b3BoYXNlX3N0cmVhbSBcCisJc2Vx dWVuY2UKIElTT0xBVElPTiA9IG14YWN0IGRlbGF5ZWRfc3RhcnR1cCBvbmRpc2tfc3RhcnR1 cCBjb25jdXJyZW50X2RkbF9kbWwgXAogCW9sZGVzdF94bWluIHNuYXBzaG90X3RyYW5zZmVy IHN1YnhhY3Rfd2l0aG91dF90b3AgY29uY3VycmVudF9zdHJlYW0gXAogCXR3b3BoYXNlX3Nu YXBzaG90CmRpZmYgLS1naXQgYS9jb250cmliL3Rlc3RfZGVjb2RpbmcvZXhwZWN0ZWQvc2Vx dWVuY2Uub3V0IGIvY29udHJpYi90ZXN0X2RlY29kaW5nL2V4cGVjdGVkL3NlcXVlbmNlLm91 dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5iZWVjYzNlMGM4Ci0t LSAvZGV2L251bGwKKysrIGIvY29udHJpYi90ZXN0X2RlY29kaW5nL2V4cGVjdGVkL3NlcXVl bmNlLm91dApAQCAtMCwwICsxLDMyNyBAQAorLS0gcHJlZGljdGFiaWxpdHkKK1NFVCBzeW5j aHJvbm91c19jb21taXQgPSBvbjsKK1NFTEVDVCAnaW5pdCcgRlJPTSBwZ19jcmVhdGVfbG9n aWNhbF9yZXBsaWNhdGlvbl9zbG90KCdyZWdyZXNzaW9uX3Nsb3QnLCAndGVzdF9kZWNvZGlu ZycpOworID9jb2x1bW4/IAorLS0tLS0tLS0tLQorIGluaXQKKygxIHJvdykKKworQ1JFQVRF IFNFUVVFTkNFIHRlc3Rfc2VxdWVuY2U7CistLSB0ZXN0IHRoZSBzZXF1ZW5jZSBjaGFuZ2Vz IGJ5IHNldmVyYWwgbmV4dHZhbCgpIGNhbGxzCitTRUxFQ1QgbmV4dHZhbCgndGVzdF9zZXF1 ZW5jZScpOworIG5leHR2YWwgCistLS0tLS0tLS0KKyAgICAgICAxCisoMSByb3cpCisKK1NF TEVDVCBuZXh0dmFsKCd0ZXN0X3NlcXVlbmNlJyk7CisgbmV4dHZhbCAKKy0tLS0tLS0tLQor ICAgICAgIDIKKygxIHJvdykKKworU0VMRUNUIG5leHR2YWwoJ3Rlc3Rfc2VxdWVuY2UnKTsK KyBuZXh0dmFsIAorLS0tLS0tLS0tCisgICAgICAgMworKDEgcm93KQorCitTRUxFQ1QgbmV4 dHZhbCgndGVzdF9zZXF1ZW5jZScpOworIG5leHR2YWwgCistLS0tLS0tLS0KKyAgICAgICA0 CisoMSByb3cpCisKKy0tIHRlc3QgdGhlIHNlcXVlbmNlIGNoYW5nZXMgYnkgc2V2ZXJhbCBB TFRFUiBjb21tYW5kcworQUxURVIgU0VRVUVOQ0UgdGVzdF9zZXF1ZW5jZSBJTkNSRU1FTlQg QlkgMTA7CitTRUxFQ1QgbmV4dHZhbCgndGVzdF9zZXF1ZW5jZScpOworIG5leHR2YWwgCist LS0tLS0tLS0KKyAgICAgIDE0CisoMSByb3cpCisKK0FMVEVSIFNFUVVFTkNFIHRlc3Rfc2Vx dWVuY2UgU1RBUlQgV0lUSCAzMDAwOworQUxURVIgU0VRVUVOQ0UgdGVzdF9zZXF1ZW5jZSBN QVhWQUxVRSAxMDAwMDsKK0FMVEVSIFNFUVVFTkNFIHRlc3Rfc2VxdWVuY2UgUkVTVEFSVCBX SVRIIDQwMDA7CitTRUxFQ1QgbmV4dHZhbCgndGVzdF9zZXF1ZW5jZScpOworIG5leHR2YWwg CistLS0tLS0tLS0KKyAgICA0MDAwCisoMSByb3cpCisKKy0tIHRlc3QgdGhlIHNlcXVlbmNl IGNoYW5nZXMgYnkgc2V2ZXJhbCBzZXR2YWwoKSBjYWxscworU0VMRUNUIHNldHZhbCgndGVz dF9zZXF1ZW5jZScsIDM1MDApOworIHNldHZhbCAKKy0tLS0tLS0tCisgICAzNTAwCisoMSBy b3cpCisKK1NFTEVDVCBuZXh0dmFsKCd0ZXN0X3NlcXVlbmNlJyk7CisgbmV4dHZhbCAKKy0t LS0tLS0tLQorICAgIDM1MTAKKygxIHJvdykKKworU0VMRUNUIHNldHZhbCgndGVzdF9zZXF1 ZW5jZScsIDM1MDAsIHRydWUpOworIHNldHZhbCAKKy0tLS0tLS0tCisgICAzNTAwCisoMSBy b3cpCisKK1NFTEVDVCBuZXh0dmFsKCd0ZXN0X3NlcXVlbmNlJyk7CisgbmV4dHZhbCAKKy0t LS0tLS0tLQorICAgIDM1MTAKKygxIHJvdykKKworU0VMRUNUIHNldHZhbCgndGVzdF9zZXF1 ZW5jZScsIDM1MDAsIGZhbHNlKTsKKyBzZXR2YWwgCistLS0tLS0tLQorICAgMzUwMAorKDEg cm93KQorCitTRUxFQ1QgbmV4dHZhbCgndGVzdF9zZXF1ZW5jZScpOworIG5leHR2YWwgCist LS0tLS0tLS0KKyAgICAzNTAwCisoMSByb3cpCisKKy0tIHNob3cgcmVzdWx0cyBhbmQgZHJv cCBzZXF1ZW5jZQorU0VMRUNUIGRhdGEgRlJPTSBwZ19sb2dpY2FsX3Nsb3RfZ2V0X2NoYW5n ZXMoJ3JlZ3Jlc3Npb25fc2xvdCcsIE5VTEwsIE5VTEwsICdpbmNsdWRlLXhpZHMnLCAnMCcs ICdza2lwLWVtcHR5LXhhY3RzJywgJzAnLCAnc2tpcC1zZXF1ZW5jZXMnLCAnMCcpOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBCRUdJTgorIHNlcXVlbmNlIHB1Ymxp Yy50ZXN0X3NlcXVlbmNlOiB0cmFuc2FjdGlvbmFsOjEgY3JlYXRlZDoxIGxhc3RfdmFsdWU6 MSBsb2dfY250OjAgaXNfY2FsbGVkOjAKKyBDT01NSVQKKyBzZXF1ZW5jZSBwdWJsaWMudGVz dF9zZXF1ZW5jZTogdHJhbnNhY3Rpb25hbDowIGNyZWF0ZWQ6MCBsYXN0X3ZhbHVlOjMzIGxv Z19jbnQ6MCBpc19jYWxsZWQ6MQorIEJFR0lOCisgc2VxdWVuY2UgcHVibGljLnRlc3Rfc2Vx dWVuY2U6IHRyYW5zYWN0aW9uYWw6MSBjcmVhdGVkOjEgbGFzdF92YWx1ZTo0IGxvZ19jbnQ6 MCBpc19jYWxsZWQ6MQorIENPTU1JVAorIHNlcXVlbmNlIHB1YmxpYy50ZXN0X3NlcXVlbmNl OiB0cmFuc2FjdGlvbmFsOjAgY3JlYXRlZDowIGxhc3RfdmFsdWU6MzM0IGxvZ19jbnQ6MCBp c19jYWxsZWQ6MQorIEJFR0lOCisgc2VxdWVuY2UgcHVibGljLnRlc3Rfc2VxdWVuY2U6IHRy YW5zYWN0aW9uYWw6MSBjcmVhdGVkOjEgbGFzdF92YWx1ZToxNCBsb2dfY250OjMyIGlzX2Nh bGxlZDoxCisgQ09NTUlUCisgQkVHSU4KKyBzZXF1ZW5jZSBwdWJsaWMudGVzdF9zZXF1ZW5j ZTogdHJhbnNhY3Rpb25hbDoxIGNyZWF0ZWQ6MSBsYXN0X3ZhbHVlOjE0IGxvZ19jbnQ6MCBp c19jYWxsZWQ6MQorIENPTU1JVAorIEJFR0lOCisgc2VxdWVuY2UgcHVibGljLnRlc3Rfc2Vx dWVuY2U6IHRyYW5zYWN0aW9uYWw6MSBjcmVhdGVkOjEgbGFzdF92YWx1ZTo0MDAwIGxvZ19j bnQ6MCBpc19jYWxsZWQ6MAorIENPTU1JVAorIHNlcXVlbmNlIHB1YmxpYy50ZXN0X3NlcXVl bmNlOiB0cmFuc2FjdGlvbmFsOjAgY3JlYXRlZDowIGxhc3RfdmFsdWU6NDMyMCBsb2dfY250 OjAgaXNfY2FsbGVkOjEKKyBzZXF1ZW5jZSBwdWJsaWMudGVzdF9zZXF1ZW5jZTogdHJhbnNh Y3Rpb25hbDowIGNyZWF0ZWQ6MCBsYXN0X3ZhbHVlOjM1MDAgbG9nX2NudDowIGlzX2NhbGxl ZDoxCisgc2VxdWVuY2UgcHVibGljLnRlc3Rfc2VxdWVuY2U6IHRyYW5zYWN0aW9uYWw6MCBj cmVhdGVkOjAgbGFzdF92YWx1ZTozODMwIGxvZ19jbnQ6MCBpc19jYWxsZWQ6MQorIHNlcXVl bmNlIHB1YmxpYy50ZXN0X3NlcXVlbmNlOiB0cmFuc2FjdGlvbmFsOjAgY3JlYXRlZDowIGxh c3RfdmFsdWU6MzUwMCBsb2dfY250OjAgaXNfY2FsbGVkOjEKKyBzZXF1ZW5jZSBwdWJsaWMu dGVzdF9zZXF1ZW5jZTogdHJhbnNhY3Rpb25hbDowIGNyZWF0ZWQ6MCBsYXN0X3ZhbHVlOjM4 MzAgbG9nX2NudDowIGlzX2NhbGxlZDoxCisgc2VxdWVuY2UgcHVibGljLnRlc3Rfc2VxdWVu Y2U6IHRyYW5zYWN0aW9uYWw6MCBjcmVhdGVkOjAgbGFzdF92YWx1ZTozNTAwIGxvZ19jbnQ6 MCBpc19jYWxsZWQ6MAorIHNlcXVlbmNlIHB1YmxpYy50ZXN0X3NlcXVlbmNlOiB0cmFuc2Fj dGlvbmFsOjAgY3JlYXRlZDowIGxhc3RfdmFsdWU6MzgyMCBsb2dfY250OjAgaXNfY2FsbGVk OjEKKygyNCByb3dzKQorCitEUk9QIFNFUVVFTkNFIHRlc3Rfc2VxdWVuY2U7CistLSByb2xs YmFjayBvbiBzZXF1ZW5jZSBjcmVhdGlvbiBhbmQgdXBkYXRlCitCRUdJTjsKK0NSRUFURSBT RVFVRU5DRSB0ZXN0X3NlcXVlbmNlOworQ1JFQVRFIFRBQkxFIHRlc3RfdGFibGUgKGEgSU5U KTsKK1NFTEVDVCBuZXh0dmFsKCd0ZXN0X3NlcXVlbmNlJyk7CisgbmV4dHZhbCAKKy0tLS0t LS0tLQorICAgICAgIDEKKygxIHJvdykKKworU0VMRUNUIG5leHR2YWwoJ3Rlc3Rfc2VxdWVu Y2UnKTsKKyBuZXh0dmFsIAorLS0tLS0tLS0tCisgICAgICAgMgorKDEgcm93KQorCitTRUxF Q1QgbmV4dHZhbCgndGVzdF9zZXF1ZW5jZScpOworIG5leHR2YWwgCistLS0tLS0tLS0KKyAg ICAgICAzCisoMSByb3cpCisKK1NFTEVDVCBzZXR2YWwoJ3Rlc3Rfc2VxdWVuY2UnLCAzMDAw KTsKKyBzZXR2YWwgCistLS0tLS0tLQorICAgMzAwMAorKDEgcm93KQorCitTRUxFQ1QgbmV4 dHZhbCgndGVzdF9zZXF1ZW5jZScpOworIG5leHR2YWwgCistLS0tLS0tLS0KKyAgICAzMDAx CisoMSByb3cpCisKK1NFTEVDVCBuZXh0dmFsKCd0ZXN0X3NlcXVlbmNlJyk7CisgbmV4dHZh bCAKKy0tLS0tLS0tLQorICAgIDMwMDIKKygxIHJvdykKKworU0VMRUNUIG5leHR2YWwoJ3Rl c3Rfc2VxdWVuY2UnKTsKKyBuZXh0dmFsIAorLS0tLS0tLS0tCisgICAgMzAwMworKDEgcm93 KQorCitBTFRFUiBTRVFVRU5DRSB0ZXN0X3NlcXVlbmNlIFJFU1RBUlQgV0lUSCA2MDAwOwor SU5TRVJUIElOVE8gdGVzdF90YWJsZSBWQUxVRVMoIChTRUxFQ1QgbmV4dHZhbCgndGVzdF9z ZXF1ZW5jZScpKSApOworU0VMRUNUIG5leHR2YWwoJ3Rlc3Rfc2VxdWVuY2UnKTsKKyBuZXh0 dmFsIAorLS0tLS0tLS0tCisgICAgNjAwMQorKDEgcm93KQorCitST0xMQkFDSzsKK1NFTEVD VCBkYXRhIEZST00gcGdfbG9naWNhbF9zbG90X2dldF9jaGFuZ2VzKCdyZWdyZXNzaW9uX3Ns b3QnLCBOVUxMLCBOVUxMLCAnaW5jbHVkZS14aWRzJywgJzAnLCAnc2tpcC1lbXB0eS14YWN0 cycsICcxJywgJ3NraXAtc2VxdWVuY2VzJywgJzAnKTsKKyBkYXRhIAorLS0tLS0tCisoMCBy b3dzKQorCistLSByb2xsYmFjayBvbiB0YWJsZSBjcmVhdGlvbiB3aXRoIHNlcmlhbCBjb2x1 bW4gCitCRUdJTjsKK0NSRUFURSBUQUJMRSB0ZXN0X3RhYmxlIChhIFNFUklBTCwgYiBJTlQp OworSU5TRVJUIElOVE8gdGVzdF90YWJsZSAoYikgVkFMVUVTICgxMDApOworSU5TRVJUIElO VE8gdGVzdF90YWJsZSAoYikgVkFMVUVTICgyMDApOworSU5TRVJUIElOVE8gdGVzdF90YWJs ZSAoYikgVkFMVUVTICgzMDApOworU0VMRUNUIHNldHZhbCgndGVzdF90YWJsZV9hX3NlcScs IDMwMDApOworIHNldHZhbCAKKy0tLS0tLS0tCisgICAzMDAwCisoMSByb3cpCisKK0lOU0VS VCBJTlRPIHRlc3RfdGFibGUgKGIpIFZBTFVFUyAoNDAwKTsKK0lOU0VSVCBJTlRPIHRlc3Rf dGFibGUgKGIpIFZBTFVFUyAoNTAwKTsKK0lOU0VSVCBJTlRPIHRlc3RfdGFibGUgKGIpIFZB TFVFUyAoNjAwKTsKK0FMVEVSIFNFUVVFTkNFIHRlc3RfdGFibGVfYV9zZXEgUkVTVEFSVCBX SVRIIDYwMDA7CitJTlNFUlQgSU5UTyB0ZXN0X3RhYmxlIChiKSBWQUxVRVMgKDcwMCk7CitJ TlNFUlQgSU5UTyB0ZXN0X3RhYmxlIChiKSBWQUxVRVMgKDgwMCk7CitJTlNFUlQgSU5UTyB0 ZXN0X3RhYmxlIChiKSBWQUxVRVMgKDkwMCk7CitST0xMQkFDSzsKK1NFTEVDVCBkYXRhIEZS T00gcGdfbG9naWNhbF9zbG90X2dldF9jaGFuZ2VzKCdyZWdyZXNzaW9uX3Nsb3QnLCBOVUxM LCBOVUxMLCAnaW5jbHVkZS14aWRzJywgJzAnLCAnc2tpcC1lbXB0eS14YWN0cycsICcxJywg J3NraXAtc2VxdWVuY2VzJywgJzAnKTsKKyBkYXRhIAorLS0tLS0tCisoMCByb3dzKQorCist LSByb2xsYmFjayBvbiB0YWJsZSB3aXRoIHNlcmlhbCBjb2x1bW4gCitDUkVBVEUgVEFCTEUg dGVzdF90YWJsZSAoYSBTRVJJQUwsIGIgSU5UKTsKK0JFR0lOOworSU5TRVJUIElOVE8gdGVz dF90YWJsZSAoYikgVkFMVUVTICgxMDApOworSU5TRVJUIElOVE8gdGVzdF90YWJsZSAoYikg VkFMVUVTICgyMDApOworSU5TRVJUIElOVE8gdGVzdF90YWJsZSAoYikgVkFMVUVTICgzMDAp OworU0VMRUNUIHNldHZhbCgndGVzdF90YWJsZV9hX3NlcScsIDMwMDApOworIHNldHZhbCAK Ky0tLS0tLS0tCisgICAzMDAwCisoMSByb3cpCisKK0lOU0VSVCBJTlRPIHRlc3RfdGFibGUg KGIpIFZBTFVFUyAoNDAwKTsKK0lOU0VSVCBJTlRPIHRlc3RfdGFibGUgKGIpIFZBTFVFUyAo NTAwKTsKK0lOU0VSVCBJTlRPIHRlc3RfdGFibGUgKGIpIFZBTFVFUyAoNjAwKTsKK0FMVEVS IFNFUVVFTkNFIHRlc3RfdGFibGVfYV9zZXEgUkVTVEFSVCBXSVRIIDYwMDA7CitJTlNFUlQg SU5UTyB0ZXN0X3RhYmxlIChiKSBWQUxVRVMgKDcwMCk7CitJTlNFUlQgSU5UTyB0ZXN0X3Rh YmxlIChiKSBWQUxVRVMgKDgwMCk7CitJTlNFUlQgSU5UTyB0ZXN0X3RhYmxlIChiKSBWQUxV RVMgKDkwMCk7CitST0xMQkFDSzsKKy0tIGNoZWNrIHRhYmxlIGFuZCBzZXF1ZW5jZSB2YWx1 ZXMgYWZ0ZXIgcm9sbGJhY2sgCitTRUxFQ1QgKiBmcm9tIHRlc3RfdGFibGVfYV9zZXE7Cisg bGFzdF92YWx1ZSB8IGxvZ19jbnQgfCBpc19jYWxsZWQgCistLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tCisgICAgICAgMzAwMyB8ICAgICAgMzAgfCB0CisoMSByb3cpCisK K1NFTEVDVCBuZXh0dmFsKCd0ZXN0X3RhYmxlX2Ffc2VxJyk7CisgbmV4dHZhbCAKKy0tLS0t LS0tLQorICAgIDMwMDQKKygxIHJvdykKKworRFJPUCBUQUJMRSB0ZXN0X3RhYmxlOworU0VM RUNUIGRhdGEgRlJPTSBwZ19sb2dpY2FsX3Nsb3RfZ2V0X2NoYW5nZXMoJ3JlZ3Jlc3Npb25f c2xvdCcsIE5VTEwsIE5VTEwsICdpbmNsdWRlLXhpZHMnLCAnMCcsICdza2lwLWVtcHR5LXhh Y3RzJywgJzAnLCAnc2tpcC1zZXF1ZW5jZXMnLCAnMCcpOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBCRUdJTgorIHNlcXVlbmNlIHB1YmxpYy50ZXN0X3Rh YmxlX2Ffc2VxOiB0cmFuc2FjdGlvbmFsOjEgY3JlYXRlZDoxIGxhc3RfdmFsdWU6MSBsb2df Y250OjAgaXNfY2FsbGVkOjAKKyBDT01NSVQKKyBzZXF1ZW5jZSBwdWJsaWMudGVzdF90YWJs ZV9hX3NlcTogdHJhbnNhY3Rpb25hbDowIGNyZWF0ZWQ6MCBsYXN0X3ZhbHVlOjMzIGxvZ19j bnQ6MCBpc19jYWxsZWQ6MQorIHNlcXVlbmNlIHB1YmxpYy50ZXN0X3RhYmxlX2Ffc2VxOiB0 cmFuc2FjdGlvbmFsOjAgY3JlYXRlZDowIGxhc3RfdmFsdWU6MzAwMCBsb2dfY250OjAgaXNf Y2FsbGVkOjEKKyBzZXF1ZW5jZSBwdWJsaWMudGVzdF90YWJsZV9hX3NlcTogdHJhbnNhY3Rp b25hbDowIGNyZWF0ZWQ6MCBsYXN0X3ZhbHVlOjMwMzMgbG9nX2NudDowIGlzX2NhbGxlZDox CisgQkVHSU4KKyBDT01NSVQKKyg4IHJvd3MpCisKKy0tIHNhdmVwb2ludCB0ZXN0IG9uIHRh YmxlIHdpdGggc2VyaWFsIGNvbHVtbgorQkVHSU47CitDUkVBVEUgVEFCTEUgdGVzdF90YWJs ZSAoYSBTRVJJQUwsIGIgSU5UKTsKK0lOU0VSVCBJTlRPIHRlc3RfdGFibGUgKGIpIFZBTFVF UyAoMTAwKTsKK0lOU0VSVCBJTlRPIHRlc3RfdGFibGUgKGIpIFZBTFVFUyAoMjAwKTsKK1NB VkVQT0lOVCBhOworSU5TRVJUIElOVE8gdGVzdF90YWJsZSAoYikgVkFMVUVTICgzMDApOwor Uk9MTEJBQ0sgVE8gU0FWRVBPSU5UIGE7CitEUk9QIFRBQkxFIHRlc3RfdGFibGU7CitDT01N SVQ7CitTRUxFQ1QgZGF0YSBGUk9NIHBnX2xvZ2ljYWxfc2xvdF9nZXRfY2hhbmdlcygncmVn cmVzc2lvbl9zbG90JywgTlVMTCwgTlVMTCwgJ2luY2x1ZGUteGlkcycsICcwJywgJ3NraXAt ZW1wdHkteGFjdHMnLCAnMCcsICdza2lwLXNlcXVlbmNlcycsICcwJyk7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQkVHSU4KKyBzZXF1ZW5jZSBwdWJsaWMudGVz dF90YWJsZV9hX3NlcTogdHJhbnNhY3Rpb25hbDoxIGNyZWF0ZWQ6MSBsYXN0X3ZhbHVlOjEg bG9nX2NudDowIGlzX2NhbGxlZDowCisgc2VxdWVuY2UgcHVibGljLnRlc3RfdGFibGVfYV9z ZXE6IHRyYW5zYWN0aW9uYWw6MSBjcmVhdGVkOjAgbGFzdF92YWx1ZTozMyBsb2dfY250OjAg aXNfY2FsbGVkOjEKKyB0YWJsZSBwdWJsaWMudGVzdF90YWJsZTogSU5TRVJUOiBhW2ludGVn ZXJdOjEgYltpbnRlZ2VyXToxMDAKKyB0YWJsZSBwdWJsaWMudGVzdF90YWJsZTogSU5TRVJU OiBhW2ludGVnZXJdOjIgYltpbnRlZ2VyXToyMDAKKyBDT01NSVQKKyg2IHJvd3MpCisKKy0t IHNhdmVwb2ludCB0ZXN0IG9uIHRhYmxlIHdpdGggc2VyaWFsIGNvbHVtbgorQkVHSU47CitD UkVBVEUgU0VRVUVOQ0UgdGVzdF9zZXF1ZW5jZTsKK1NFTEVDVCBuZXh0dmFsKCd0ZXN0X3Nl cXVlbmNlJyk7CisgbmV4dHZhbCAKKy0tLS0tLS0tLQorICAgICAgIDEKKygxIHJvdykKKwor U0VMRUNUIHNldHZhbCgndGVzdF9zZXF1ZW5jZScsIDMwMDApOworIHNldHZhbCAKKy0tLS0t LS0tCisgICAzMDAwCisoMSByb3cpCisKK1NFTEVDVCBuZXh0dmFsKCd0ZXN0X3NlcXVlbmNl Jyk7CisgbmV4dHZhbCAKKy0tLS0tLS0tLQorICAgIDMwMDEKKygxIHJvdykKKworU0FWRVBP SU5UIGE7CitBTFRFUiBTRVFVRU5DRSB0ZXN0X3NlcXVlbmNlIFNUQVJUIFdJVEggNzAwMDsK K1NFTEVDVCBzZXR2YWwoJ3Rlc3Rfc2VxdWVuY2UnLCA1MDAwKTsKKyBzZXR2YWwgCistLS0t LS0tLQorICAgNTAwMAorKDEgcm93KQorCitST0xMQkFDSyBUTyBTQVZFUE9JTlQgYTsKK1NF TEVDVCAqIEZST00gdGVzdF9zZXF1ZW5jZTsKKyBsYXN0X3ZhbHVlIHwgbG9nX2NudCB8IGlz X2NhbGxlZCAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0KKyAgICAgICAz MDAxIHwgICAgICAzMiB8IHQKKygxIHJvdykKKworRFJPUCBTRVFVRU5DRSB0ZXN0X3NlcXVl bmNlOworQ09NTUlUOworU0VMRUNUIGRhdGEgRlJPTSBwZ19sb2dpY2FsX3Nsb3RfZ2V0X2No YW5nZXMoJ3JlZ3Jlc3Npb25fc2xvdCcsIE5VTEwsIE5VTEwsICdpbmNsdWRlLXhpZHMnLCAn MCcsICdza2lwLWVtcHR5LXhhY3RzJywgJzAnLCAnc2tpcC1zZXF1ZW5jZXMnLCAnMCcpOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBCRUdJTgorIHNlcXVlbmNlIHB1 YmxpYy50ZXN0X3NlcXVlbmNlOiB0cmFuc2FjdGlvbmFsOjEgY3JlYXRlZDoxIGxhc3RfdmFs dWU6MSBsb2dfY250OjAgaXNfY2FsbGVkOjAKKyBzZXF1ZW5jZSBwdWJsaWMudGVzdF9zZXF1 ZW5jZTogdHJhbnNhY3Rpb25hbDoxIGNyZWF0ZWQ6MCBsYXN0X3ZhbHVlOjMzIGxvZ19jbnQ6 MCBpc19jYWxsZWQ6MQorIHNlcXVlbmNlIHB1YmxpYy50ZXN0X3NlcXVlbmNlOiB0cmFuc2Fj dGlvbmFsOjEgY3JlYXRlZDowIGxhc3RfdmFsdWU6MzAwMCBsb2dfY250OjAgaXNfY2FsbGVk OjEKKyBzZXF1ZW5jZSBwdWJsaWMudGVzdF9zZXF1ZW5jZTogdHJhbnNhY3Rpb25hbDoxIGNy ZWF0ZWQ6MCBsYXN0X3ZhbHVlOjMwMzMgbG9nX2NudDowIGlzX2NhbGxlZDoxCisgQ09NTUlU CisoNiByb3dzKQorCitTRUxFQ1QgcGdfZHJvcF9yZXBsaWNhdGlvbl9zbG90KCdyZWdyZXNz aW9uX3Nsb3QnKTsKKyBwZ19kcm9wX3JlcGxpY2F0aW9uX3Nsb3QgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCmRpZmYgLS1naXQgYS9jb250cmliL3Rlc3Rf ZGVjb2Rpbmcvc3FsL3NlcXVlbmNlLnNxbCBiL2NvbnRyaWIvdGVzdF9kZWNvZGluZy9zcWwv c2VxdWVuY2Uuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmQ4 YTM0NzM4ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3Rlc3RfZGVjb2Rpbmcvc3Fs L3NlcXVlbmNlLnNxbApAQCAtMCwwICsxLDExOSBAQAorLS0gcHJlZGljdGFiaWxpdHkKK1NF VCBzeW5jaHJvbm91c19jb21taXQgPSBvbjsKK1NFTEVDVCAnaW5pdCcgRlJPTSBwZ19jcmVh dGVfbG9naWNhbF9yZXBsaWNhdGlvbl9zbG90KCdyZWdyZXNzaW9uX3Nsb3QnLCAndGVzdF9k ZWNvZGluZycpOworCitDUkVBVEUgU0VRVUVOQ0UgdGVzdF9zZXF1ZW5jZTsKKworLS0gdGVz dCB0aGUgc2VxdWVuY2UgY2hhbmdlcyBieSBzZXZlcmFsIG5leHR2YWwoKSBjYWxscworU0VM RUNUIG5leHR2YWwoJ3Rlc3Rfc2VxdWVuY2UnKTsKK1NFTEVDVCBuZXh0dmFsKCd0ZXN0X3Nl cXVlbmNlJyk7CitTRUxFQ1QgbmV4dHZhbCgndGVzdF9zZXF1ZW5jZScpOworU0VMRUNUIG5l eHR2YWwoJ3Rlc3Rfc2VxdWVuY2UnKTsKKworLS0gdGVzdCB0aGUgc2VxdWVuY2UgY2hhbmdl cyBieSBzZXZlcmFsIEFMVEVSIGNvbW1hbmRzCitBTFRFUiBTRVFVRU5DRSB0ZXN0X3NlcXVl bmNlIElOQ1JFTUVOVCBCWSAxMDsKK1NFTEVDVCBuZXh0dmFsKCd0ZXN0X3NlcXVlbmNlJyk7 CisKK0FMVEVSIFNFUVVFTkNFIHRlc3Rfc2VxdWVuY2UgU1RBUlQgV0lUSCAzMDAwOworQUxU RVIgU0VRVUVOQ0UgdGVzdF9zZXF1ZW5jZSBNQVhWQUxVRSAxMDAwMDsKK0FMVEVSIFNFUVVF TkNFIHRlc3Rfc2VxdWVuY2UgUkVTVEFSVCBXSVRIIDQwMDA7CitTRUxFQ1QgbmV4dHZhbCgn dGVzdF9zZXF1ZW5jZScpOworCistLSB0ZXN0IHRoZSBzZXF1ZW5jZSBjaGFuZ2VzIGJ5IHNl dmVyYWwgc2V0dmFsKCkgY2FsbHMKK1NFTEVDVCBzZXR2YWwoJ3Rlc3Rfc2VxdWVuY2UnLCAz NTAwKTsKK1NFTEVDVCBuZXh0dmFsKCd0ZXN0X3NlcXVlbmNlJyk7CitTRUxFQ1Qgc2V0dmFs KCd0ZXN0X3NlcXVlbmNlJywgMzUwMCwgdHJ1ZSk7CitTRUxFQ1QgbmV4dHZhbCgndGVzdF9z ZXF1ZW5jZScpOworU0VMRUNUIHNldHZhbCgndGVzdF9zZXF1ZW5jZScsIDM1MDAsIGZhbHNl KTsKK1NFTEVDVCBuZXh0dmFsKCd0ZXN0X3NlcXVlbmNlJyk7CisKKy0tIHNob3cgcmVzdWx0 cyBhbmQgZHJvcCBzZXF1ZW5jZQorU0VMRUNUIGRhdGEgRlJPTSBwZ19sb2dpY2FsX3Nsb3Rf Z2V0X2NoYW5nZXMoJ3JlZ3Jlc3Npb25fc2xvdCcsIE5VTEwsIE5VTEwsICdpbmNsdWRlLXhp ZHMnLCAnMCcsICdza2lwLWVtcHR5LXhhY3RzJywgJzAnLCAnc2tpcC1zZXF1ZW5jZXMnLCAn MCcpOworRFJPUCBTRVFVRU5DRSB0ZXN0X3NlcXVlbmNlOworCistLSByb2xsYmFjayBvbiBz ZXF1ZW5jZSBjcmVhdGlvbiBhbmQgdXBkYXRlCitCRUdJTjsKK0NSRUFURSBTRVFVRU5DRSB0 ZXN0X3NlcXVlbmNlOworQ1JFQVRFIFRBQkxFIHRlc3RfdGFibGUgKGEgSU5UKTsKK1NFTEVD VCBuZXh0dmFsKCd0ZXN0X3NlcXVlbmNlJyk7CitTRUxFQ1QgbmV4dHZhbCgndGVzdF9zZXF1 ZW5jZScpOworU0VMRUNUIG5leHR2YWwoJ3Rlc3Rfc2VxdWVuY2UnKTsKK1NFTEVDVCBzZXR2 YWwoJ3Rlc3Rfc2VxdWVuY2UnLCAzMDAwKTsKK1NFTEVDVCBuZXh0dmFsKCd0ZXN0X3NlcXVl bmNlJyk7CitTRUxFQ1QgbmV4dHZhbCgndGVzdF9zZXF1ZW5jZScpOworU0VMRUNUIG5leHR2 YWwoJ3Rlc3Rfc2VxdWVuY2UnKTsKK0FMVEVSIFNFUVVFTkNFIHRlc3Rfc2VxdWVuY2UgUkVT VEFSVCBXSVRIIDYwMDA7CitJTlNFUlQgSU5UTyB0ZXN0X3RhYmxlIFZBTFVFUyggKFNFTEVD VCBuZXh0dmFsKCd0ZXN0X3NlcXVlbmNlJykpICk7CitTRUxFQ1QgbmV4dHZhbCgndGVzdF9z ZXF1ZW5jZScpOworUk9MTEJBQ0s7CitTRUxFQ1QgZGF0YSBGUk9NIHBnX2xvZ2ljYWxfc2xv dF9nZXRfY2hhbmdlcygncmVncmVzc2lvbl9zbG90JywgTlVMTCwgTlVMTCwgJ2luY2x1ZGUt eGlkcycsICcwJywgJ3NraXAtZW1wdHkteGFjdHMnLCAnMScsICdza2lwLXNlcXVlbmNlcycs ICcwJyk7CisKKy0tIHJvbGxiYWNrIG9uIHRhYmxlIGNyZWF0aW9uIHdpdGggc2VyaWFsIGNv bHVtbiAKK0JFR0lOOworQ1JFQVRFIFRBQkxFIHRlc3RfdGFibGUgKGEgU0VSSUFMLCBiIElO VCk7CitJTlNFUlQgSU5UTyB0ZXN0X3RhYmxlIChiKSBWQUxVRVMgKDEwMCk7CitJTlNFUlQg SU5UTyB0ZXN0X3RhYmxlIChiKSBWQUxVRVMgKDIwMCk7CitJTlNFUlQgSU5UTyB0ZXN0X3Rh YmxlIChiKSBWQUxVRVMgKDMwMCk7CitTRUxFQ1Qgc2V0dmFsKCd0ZXN0X3RhYmxlX2Ffc2Vx JywgMzAwMCk7CitJTlNFUlQgSU5UTyB0ZXN0X3RhYmxlIChiKSBWQUxVRVMgKDQwMCk7CitJ TlNFUlQgSU5UTyB0ZXN0X3RhYmxlIChiKSBWQUxVRVMgKDUwMCk7CitJTlNFUlQgSU5UTyB0 ZXN0X3RhYmxlIChiKSBWQUxVRVMgKDYwMCk7CitBTFRFUiBTRVFVRU5DRSB0ZXN0X3RhYmxl X2Ffc2VxIFJFU1RBUlQgV0lUSCA2MDAwOworSU5TRVJUIElOVE8gdGVzdF90YWJsZSAoYikg VkFMVUVTICg3MDApOworSU5TRVJUIElOVE8gdGVzdF90YWJsZSAoYikgVkFMVUVTICg4MDAp OworSU5TRVJUIElOVE8gdGVzdF90YWJsZSAoYikgVkFMVUVTICg5MDApOworUk9MTEJBQ0s7 CitTRUxFQ1QgZGF0YSBGUk9NIHBnX2xvZ2ljYWxfc2xvdF9nZXRfY2hhbmdlcygncmVncmVz c2lvbl9zbG90JywgTlVMTCwgTlVMTCwgJ2luY2x1ZGUteGlkcycsICcwJywgJ3NraXAtZW1w dHkteGFjdHMnLCAnMScsICdza2lwLXNlcXVlbmNlcycsICcwJyk7CisKKy0tIHJvbGxiYWNr IG9uIHRhYmxlIHdpdGggc2VyaWFsIGNvbHVtbiAKK0NSRUFURSBUQUJMRSB0ZXN0X3RhYmxl IChhIFNFUklBTCwgYiBJTlQpOworCitCRUdJTjsKK0lOU0VSVCBJTlRPIHRlc3RfdGFibGUg KGIpIFZBTFVFUyAoMTAwKTsKK0lOU0VSVCBJTlRPIHRlc3RfdGFibGUgKGIpIFZBTFVFUyAo MjAwKTsKK0lOU0VSVCBJTlRPIHRlc3RfdGFibGUgKGIpIFZBTFVFUyAoMzAwKTsKK1NFTEVD VCBzZXR2YWwoJ3Rlc3RfdGFibGVfYV9zZXEnLCAzMDAwKTsKK0lOU0VSVCBJTlRPIHRlc3Rf dGFibGUgKGIpIFZBTFVFUyAoNDAwKTsKK0lOU0VSVCBJTlRPIHRlc3RfdGFibGUgKGIpIFZB TFVFUyAoNTAwKTsKK0lOU0VSVCBJTlRPIHRlc3RfdGFibGUgKGIpIFZBTFVFUyAoNjAwKTsK K0FMVEVSIFNFUVVFTkNFIHRlc3RfdGFibGVfYV9zZXEgUkVTVEFSVCBXSVRIIDYwMDA7CitJ TlNFUlQgSU5UTyB0ZXN0X3RhYmxlIChiKSBWQUxVRVMgKDcwMCk7CitJTlNFUlQgSU5UTyB0 ZXN0X3RhYmxlIChiKSBWQUxVRVMgKDgwMCk7CitJTlNFUlQgSU5UTyB0ZXN0X3RhYmxlIChi KSBWQUxVRVMgKDkwMCk7CitST0xMQkFDSzsKKworLS0gY2hlY2sgdGFibGUgYW5kIHNlcXVl bmNlIHZhbHVlcyBhZnRlciByb2xsYmFjayAKK1NFTEVDVCAqIGZyb20gdGVzdF90YWJsZV9h X3NlcTsKK1NFTEVDVCBuZXh0dmFsKCd0ZXN0X3RhYmxlX2Ffc2VxJyk7CisKK0RST1AgVEFC TEUgdGVzdF90YWJsZTsKK1NFTEVDVCBkYXRhIEZST00gcGdfbG9naWNhbF9zbG90X2dldF9j aGFuZ2VzKCdyZWdyZXNzaW9uX3Nsb3QnLCBOVUxMLCBOVUxMLCAnaW5jbHVkZS14aWRzJywg JzAnLCAnc2tpcC1lbXB0eS14YWN0cycsICcwJywgJ3NraXAtc2VxdWVuY2VzJywgJzAnKTsK KworLS0gc2F2ZXBvaW50IHRlc3Qgb24gdGFibGUgd2l0aCBzZXJpYWwgY29sdW1uCitCRUdJ TjsKK0NSRUFURSBUQUJMRSB0ZXN0X3RhYmxlIChhIFNFUklBTCwgYiBJTlQpOworSU5TRVJU IElOVE8gdGVzdF90YWJsZSAoYikgVkFMVUVTICgxMDApOworSU5TRVJUIElOVE8gdGVzdF90 YWJsZSAoYikgVkFMVUVTICgyMDApOworU0FWRVBPSU5UIGE7CitJTlNFUlQgSU5UTyB0ZXN0 X3RhYmxlIChiKSBWQUxVRVMgKDMwMCk7CitST0xMQkFDSyBUTyBTQVZFUE9JTlQgYTsKK0RS T1AgVEFCTEUgdGVzdF90YWJsZTsKK0NPTU1JVDsKK1NFTEVDVCBkYXRhIEZST00gcGdfbG9n aWNhbF9zbG90X2dldF9jaGFuZ2VzKCdyZWdyZXNzaW9uX3Nsb3QnLCBOVUxMLCBOVUxMLCAn aW5jbHVkZS14aWRzJywgJzAnLCAnc2tpcC1lbXB0eS14YWN0cycsICcwJywgJ3NraXAtc2Vx dWVuY2VzJywgJzAnKTsKKworLS0gc2F2ZXBvaW50IHRlc3Qgb24gdGFibGUgd2l0aCBzZXJp YWwgY29sdW1uCitCRUdJTjsKK0NSRUFURSBTRVFVRU5DRSB0ZXN0X3NlcXVlbmNlOworU0VM RUNUIG5leHR2YWwoJ3Rlc3Rfc2VxdWVuY2UnKTsKK1NFTEVDVCBzZXR2YWwoJ3Rlc3Rfc2Vx dWVuY2UnLCAzMDAwKTsKK1NFTEVDVCBuZXh0dmFsKCd0ZXN0X3NlcXVlbmNlJyk7CitTQVZF UE9JTlQgYTsKK0FMVEVSIFNFUVVFTkNFIHRlc3Rfc2VxdWVuY2UgU1RBUlQgV0lUSCA3MDAw OworU0VMRUNUIHNldHZhbCgndGVzdF9zZXF1ZW5jZScsIDUwMDApOworUk9MTEJBQ0sgVE8g U0FWRVBPSU5UIGE7CitTRUxFQ1QgKiBGUk9NIHRlc3Rfc2VxdWVuY2U7CitEUk9QIFNFUVVF TkNFIHRlc3Rfc2VxdWVuY2U7CitDT01NSVQ7CitTRUxFQ1QgZGF0YSBGUk9NIHBnX2xvZ2lj YWxfc2xvdF9nZXRfY2hhbmdlcygncmVncmVzc2lvbl9zbG90JywgTlVMTCwgTlVMTCwgJ2lu Y2x1ZGUteGlkcycsICcwJywgJ3NraXAtZW1wdHkteGFjdHMnLCAnMCcsICdza2lwLXNlcXVl bmNlcycsICcwJyk7CisKK1NFTEVDVCBwZ19kcm9wX3JlcGxpY2F0aW9uX3Nsb3QoJ3JlZ3Jl c3Npb25fc2xvdCcpOwpkaWZmIC0tZ2l0IGEvY29udHJpYi90ZXN0X2RlY29kaW5nL3Rlc3Rf ZGVjb2RpbmcuYyBiL2NvbnRyaWIvdGVzdF9kZWNvZGluZy90ZXN0X2RlY29kaW5nLmMKaW5k ZXggZTVjZDg0ZTg1ZS4uNDU3NjVkMjk5ZSAxMDA2NDQKLS0tIGEvY29udHJpYi90ZXN0X2Rl Y29kaW5nL3Rlc3RfZGVjb2RpbmcuYworKysgYi9jb250cmliL3Rlc3RfZGVjb2RpbmcvdGVz dF9kZWNvZGluZy5jCkBAIC0zNSw2ICszNSw3IEBAIHR5cGVkZWYgc3RydWN0CiAJYm9vbAkJ aW5jbHVkZV90aW1lc3RhbXA7CiAJYm9vbAkJc2tpcF9lbXB0eV94YWN0czsKIAlib29sCQlv bmx5X2xvY2FsOworCWJvb2wJCXNraXBfc2VxdWVuY2VzOwogfSBUZXN0RGVjb2RpbmdEYXRh OwogCiAvKgpAQCAtNzYsNiArNzcsMTAgQEAgc3RhdGljIHZvaWQgcGdfZGVjb2RlX21lc3Nh Z2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAogCQkJCQkJCSAgUmVvcmRlckJ1ZmZl clRYTiAqdHhuLCBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAogCQkJCQkJCSAgYm9vbCB0cmFu c2FjdGlvbmFsLCBjb25zdCBjaGFyICpwcmVmaXgsCiAJCQkJCQkJICBTaXplIHN6LCBjb25z dCBjaGFyICptZXNzYWdlKTsKK3N0YXRpYyB2b2lkIHBnX2RlY29kZV9zZXF1ZW5jZShMb2dp Y2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCisJCQkJCQkJICBSZW9yZGVyQnVmZmVyVFhOICp0 eG4sIFhMb2dSZWNQdHIgc2VxdWVuY2VfbHNuLAorCQkJCQkJCSAgUmVsYXRpb24gcmVsLCBi b29sIHRyYW5zYWN0aW9uYWwsIGJvb2wgY3JlYXRlZCwKKwkJCQkJCQkgIGludDY0IGxhc3Rf dmFsdWUsIGludDY0IGxvZ19jbnQsIGJvb2wgaXNfY2FsbGVkKTsKIHN0YXRpYyBib29sIHBn X2RlY29kZV9maWx0ZXJfcHJlcGFyZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCiAJ CQkJCQkJCQkgVHJhbnNhY3Rpb25JZCB4aWQsCiAJCQkJCQkJCQkgY29uc3QgY2hhciAqZ2lk KTsKQEAgLTExNiw2ICsxMjEsMTAgQEAgc3RhdGljIHZvaWQgcGdfZGVjb2RlX3N0cmVhbV9t ZXNzYWdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKIAkJCQkJCQkJCSBSZW9yZGVy QnVmZmVyVFhOICp0eG4sIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCiAJCQkJCQkJCQkgYm9v bCB0cmFuc2FjdGlvbmFsLCBjb25zdCBjaGFyICpwcmVmaXgsCiAJCQkJCQkJCQkgU2l6ZSBz eiwgY29uc3QgY2hhciAqbWVzc2FnZSk7CitzdGF0aWMgdm9pZCBwZ19kZWNvZGVfc3RyZWFt X3NlcXVlbmNlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKKwkJCQkJCQkJCSAgUmVv cmRlckJ1ZmZlclRYTiAqdHhuLCBYTG9nUmVjUHRyIHNlcXVlbmNlX2xzbiwKKwkJCQkJCQkJ CSAgUmVsYXRpb24gcmVsLCBib29sIHRyYW5zYWN0aW9uYWwsIGJvb2wgY3JlYXRlZCwKKwkJ CQkJCQkJCSAgaW50NjQgbGFzdF92YWx1ZSwgaW50NjQgbG9nX2NudCwgYm9vbCBpc19jYWxs ZWQpOwogc3RhdGljIHZvaWQgcGdfZGVjb2RlX3N0cmVhbV90cnVuY2F0ZShMb2dpY2FsRGVj b2RpbmdDb250ZXh0ICpjdHgsCiAJCQkJCQkJCQkgIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwK IAkJCQkJCQkJCSAgaW50IG5yZWxhdGlvbnMsIFJlbGF0aW9uIHJlbGF0aW9uc1tdLApAQCAt MTQxLDYgKzE1MCw3IEBAIF9QR19vdXRwdXRfcGx1Z2luX2luaXQoT3V0cHV0UGx1Z2luQ2Fs bGJhY2tzICpjYikKIAljYi0+ZmlsdGVyX2J5X29yaWdpbl9jYiA9IHBnX2RlY29kZV9maWx0 ZXI7CiAJY2ItPnNodXRkb3duX2NiID0gcGdfZGVjb2RlX3NodXRkb3duOwogCWNiLT5tZXNz YWdlX2NiID0gcGdfZGVjb2RlX21lc3NhZ2U7CisJY2ItPnNlcXVlbmNlX2NiID0gcGdfZGVj b2RlX3NlcXVlbmNlOwogCWNiLT5maWx0ZXJfcHJlcGFyZV9jYiA9IHBnX2RlY29kZV9maWx0 ZXJfcHJlcGFyZTsKIAljYi0+YmVnaW5fcHJlcGFyZV9jYiA9IHBnX2RlY29kZV9iZWdpbl9w cmVwYXJlX3R4bjsKIAljYi0+cHJlcGFyZV9jYiA9IHBnX2RlY29kZV9wcmVwYXJlX3R4bjsK QEAgLTE1Myw2ICsxNjMsNyBAQCBfUEdfb3V0cHV0X3BsdWdpbl9pbml0KE91dHB1dFBsdWdp bkNhbGxiYWNrcyAqY2IpCiAJY2ItPnN0cmVhbV9jb21taXRfY2IgPSBwZ19kZWNvZGVfc3Ry ZWFtX2NvbW1pdDsKIAljYi0+c3RyZWFtX2NoYW5nZV9jYiA9IHBnX2RlY29kZV9zdHJlYW1f Y2hhbmdlOwogCWNiLT5zdHJlYW1fbWVzc2FnZV9jYiA9IHBnX2RlY29kZV9zdHJlYW1fbWVz c2FnZTsKKwljYi0+c3RyZWFtX3NlcXVlbmNlX2NiID0gcGdfZGVjb2RlX3N0cmVhbV9zZXF1 ZW5jZTsKIAljYi0+c3RyZWFtX3RydW5jYXRlX2NiID0gcGdfZGVjb2RlX3N0cmVhbV90cnVu Y2F0ZTsKIH0KIApAQCAtMTc1LDYgKzE4Niw5IEBAIHBnX2RlY29kZV9zdGFydHVwKExvZ2lj YWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgT3V0cHV0UGx1Z2luT3B0aW9ucyAqb3B0LAogCWRh dGEtPnNraXBfZW1wdHlfeGFjdHMgPSBmYWxzZTsKIAlkYXRhLT5vbmx5X2xvY2FsID0gZmFs c2U7CiAKKwkvKiBza2lwIHNlcXVlbmNlcyBieSBkZWZhdWx0IGZvciBiYWNrd2FyZHMgY29t cGF0aWJpbGl0eSAqLworCWRhdGEtPnNraXBfc2VxdWVuY2VzID0gdHJ1ZTsKKwogCWN0eC0+ b3V0cHV0X3BsdWdpbl9wcml2YXRlID0gZGF0YTsKIAogCW9wdC0+b3V0cHV0X3R5cGUgPSBP VVRQVVRfUExVR0lOX1RFWFRVQUxfT1VUUFVUOwpAQCAtMjY1LDYgKzI3OSwxNyBAQCBwZ19k ZWNvZGVfc3RhcnR1cChMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIE91dHB1dFBsdWdp bk9wdGlvbnMgKm9wdCwKIAkJCQkJCSBlcnJtc2coImNvdWxkIG5vdCBwYXJzZSB2YWx1ZSBc IiVzXCIgZm9yIHBhcmFtZXRlciBcIiVzXCIiLAogCQkJCQkJCQlzdHJWYWwoZWxlbS0+YXJn KSwgZWxlbS0+ZGVmbmFtZSkpKTsKIAkJfQorCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVm bmFtZSwgInNraXAtc2VxdWVuY2VzIikgPT0gMCkKKwkJeworCisJCQlpZiAoZWxlbS0+YXJn ID09IE5VTEwpCisJCQkJY29udGludWU7CS8qIHRydWUgYnkgZGVmYXVsdCAqLworCQkJZWxz ZSBpZiAoIXBhcnNlX2Jvb2woc3RyVmFsKGVsZW0tPmFyZyksICZkYXRhLT5za2lwX3NlcXVl bmNlcykpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5W QUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiY291bGQgbm90IHBhcnNl IHZhbHVlIFwiJXNcIiBmb3IgcGFyYW1ldGVyIFwiJXNcIiIsCisJCQkJCQkJCXN0clZhbChl bGVtLT5hcmcpLCBlbGVtLT5kZWZuYW1lKSkpOworCQl9CiAJCWVsc2UKIAkJewogCQkJZXJl cG9ydChFUlJPUiwKQEAgLTc0NCw2ICs3NjksMjggQEAgcGdfZGVjb2RlX21lc3NhZ2UoTG9n aWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAogCU91dHB1dFBsdWdpbldyaXRlKGN0eCwgdHJ1 ZSk7CiB9CiAKK3N0YXRpYyB2b2lkCitwZ19kZWNvZGVfc2VxdWVuY2UoTG9naWNhbERlY29k aW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJICAgWExvZ1Jl Y1B0ciBzZXF1ZW5jZV9sc24sIFJlbGF0aW9uIHJlbCwKKwkJCQkgICBib29sIHRyYW5zYWN0 aW9uYWwsIGJvb2wgY3JlYXRlZCwKKwkJCQkgICBpbnQ2NCBsYXN0X3ZhbHVlLCBpbnQ2NCBs b2dfY250LCBib29sIGlzX2NhbGxlZCkKK3sKKwlUZXN0RGVjb2RpbmdEYXRhICpkYXRhID0g Y3R4LT5vdXRwdXRfcGx1Z2luX3ByaXZhdGU7CisKKwkvKiByZXR1cm4gaWYgcmVxdWVzdGVk IHRvIHNraXBfc2VxdWVuY2VzICovCisJaWYgKGRhdGEtPnNraXBfc2VxdWVuY2VzKQorCQly ZXR1cm47CisKKwlPdXRwdXRQbHVnaW5QcmVwYXJlV3JpdGUoY3R4LCB0cnVlKTsKKwlhcHBl bmRTdHJpbmdJbmZvU3RyaW5nKGN0eC0+b3V0LCAic2VxdWVuY2UgIik7CisJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZyhjdHgtPm91dCwKKwkJCQkJCSAgIHF1b3RlX3F1YWxpZmllZF9pZGVu dGlmaWVyKGdldF9uYW1lc3BhY2VfbmFtZShnZXRfcmVsX25hbWVzcGFjZShSZWxhdGlvbkdl dFJlbGlkKHJlbCkpKSwKKwkJCQkJCQkJCQkJCQkgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1l KHJlbCkpKTsKKwlhcHBlbmRTdHJpbmdJbmZvKGN0eC0+b3V0LCAJIjogdHJhbnNhY3Rpb25h bDolZCBjcmVhdGVkOiVkIGxhc3RfdmFsdWU6JXp1IGxvZ19jbnQ6JXp1IGlzX2NhbGxlZDol ZCIsCisJCQkJCSB0cmFuc2FjdGlvbmFsLCBjcmVhdGVkLCBsYXN0X3ZhbHVlLCBsb2dfY250 LCBpc19jYWxsZWQpOworCU91dHB1dFBsdWdpbldyaXRlKGN0eCwgdHJ1ZSk7Cit9CisKIHN0 YXRpYyB2b2lkCiBwZ19kZWNvZGVfc3RyZWFtX3N0YXJ0KExvZ2ljYWxEZWNvZGluZ0NvbnRl eHQgKmN0eCwKIAkJCQkJICAgUmVvcmRlckJ1ZmZlclRYTiAqdHhuKQpAQCAtOTQzLDYgKzk5 MCwyOCBAQCBwZ19kZWNvZGVfc3RyZWFtX21lc3NhZ2UoTG9naWNhbERlY29kaW5nQ29udGV4 dCAqY3R4LAogCU91dHB1dFBsdWdpbldyaXRlKGN0eCwgdHJ1ZSk7CiB9CiAKK3N0YXRpYyB2 b2lkCitwZ19kZWNvZGVfc3RyZWFtX3NlcXVlbmNlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQg KmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJICBYTG9nUmVjUHRyIHNlcXVl bmNlX2xzbiwgUmVsYXRpb24gcmVsLAorCQkJCQkJICBib29sIHRyYW5zYWN0aW9uYWwsIGJv b2wgY3JlYXRlZCwKKwkJCQkJCSAgaW50NjQgbGFzdF92YWx1ZSwgaW50NjQgbG9nX2NudCwg Ym9vbCBpc19jYWxsZWQpCit7CisJVGVzdERlY29kaW5nRGF0YSAqZGF0YSA9IGN0eC0+b3V0 cHV0X3BsdWdpbl9wcml2YXRlOworCisJLyogcmV0dXJuIGlmIHJlcXVlc3RlZCB0byBza2lw X3NlcXVlbmNlcyAqLworCWlmIChkYXRhLT5za2lwX3NlcXVlbmNlcykKKwkJcmV0dXJuOwor CisJT3V0cHV0UGx1Z2luUHJlcGFyZVdyaXRlKGN0eCwgdHJ1ZSk7CisJYXBwZW5kU3RyaW5n SW5mb1N0cmluZyhjdHgtPm91dCwgInN0cmVhbWluZyBzZXF1ZW5jZSAiKTsKKwlhcHBlbmRT dHJpbmdJbmZvU3RyaW5nKGN0eC0+b3V0LAorCQkJCQkJICAgcXVvdGVfcXVhbGlmaWVkX2lk ZW50aWZpZXIoZ2V0X25hbWVzcGFjZV9uYW1lKGdldF9yZWxfbmFtZXNwYWNlKFJlbGF0aW9u R2V0UmVsaWQocmVsKSkpLAorCQkJCQkJCQkJCQkJCSAgUmVsYXRpb25HZXRSZWxhdGlvbk5h bWUocmVsKSkpOworCWFwcGVuZFN0cmluZ0luZm8oY3R4LT5vdXQsIAkiOiB0cmFuc2FjdGlv bmFsOiVkIGNyZWF0ZWQ6JWQgbGFzdF92YWx1ZTolenUgbG9nX2NudDolenUgaXNfY2FsbGVk OiVkIiwKKwkJCQkJIHRyYW5zYWN0aW9uYWwsIGNyZWF0ZWQsIGxhc3RfdmFsdWUsIGxvZ19j bnQsIGlzX2NhbGxlZCk7CisJT3V0cHV0UGx1Z2luV3JpdGUoY3R4LCB0cnVlKTsKK30KKwog LyoKICAqIEluIHN0cmVhbWluZyBtb2RlLCB3ZSBkb24ndCBkaXNwbGF5IHRoZSBkZXRhaWxl ZCBpbmZvcm1hdGlvbiBvZiBUcnVuY2F0ZS4KICAqIFNlZSBwZ19kZWNvZGVfc3RyZWFtX2No YW5nZS4KLS0gCjIuMzEuMQoK --------------PSu0kcrJZId8sBgRJ9Ec0YQG Content-Type: text/x-patch; charset=UTF-8; name="0002-rework-20211118.patch" Content-Disposition: attachment; filename="0002-rework-20211118.patch" Content-Transfer-Encoding: base64 RnJvbSA0M2Y2MzEwMGIwZTc5MmEzZjZlOTZjOWM0ZjIyMThiMjdhNzMxZjUyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogVGh1LCAxOCBOb3YgMjAyMSAxOTo0ODozMCArMDEwMApTdWJq ZWN0OiBbUEFUQ0ggMi80XSByZXdvcmsKCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3Jk ZXNjL2xvZ2ljYWxtc2dkZXNjLmMgIHwgIDEzICsrCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS94YWN0LmMgICAgICAgICAgICAgfCAgIDkgKwogc3JjL2JhY2tlbmQvY29tbWFuZHMv c2VxdWVuY2UuYyAgICAgICAgICAgICAgIHwgMTgwICsrKysrKysrKy0tLS0tLQogc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYyAgICAgIHwgMTA0ICsrKy0tLS0t LQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9tZXNzYWdlLmMgICAgIHwgICAz ICstCiAuLi4vcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMgICAgICAgfCAy MTMgKysrKy0tLS0tLS0tLS0tLS0tCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5jZS5o ICAgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbWVzc2Fn ZS5oICAgICAgICAgICAgIHwgIDE1ICsrCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9y ZGVyYnVmZmVyLmggICAgICAgfCAgMTAgKy0KIDkgZmlsZXMgY2hhbmdlZCwgMjMyIGluc2Vy dGlvbnMoKyksIDMxNyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h Y2Nlc3Mvcm1ncmRlc2MvbG9naWNhbG1zZ2Rlc2MuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9y bWdyZGVzYy9sb2dpY2FsbXNnZGVzYy5jCmluZGV4IGQ2NGNlMmU3ZWYuLmM4NDYyOGNkNTQg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9sb2dpY2FsbXNnZGVz Yy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9sb2dpY2FsbXNnZGVzYy5j CkBAIC00MCw2ICs0MCwxNiBAQCBsb2dpY2FsbXNnX2Rlc2MoU3RyaW5nSW5mbyBidWYsIFhM b2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCQkJc2VwID0gIiAiOwogCQl9CiAJfQorCWVsc2Ug aWYgKGluZm8gPT0gWExPR19MT0dJQ0FMX1NFUVVFTkNFKQorCXsKKwkJeGxfbG9naWNhbF9z ZXF1ZW5jZSAqeGxyZWMgPSAoeGxfbG9naWNhbF9zZXF1ZW5jZSAqKSByZWM7CisKKwkJYXBw ZW5kU3RyaW5nSW5mbyhidWYsICJyZWwgJXUvJXUvJXUgbGFzdDogJWx1IGxvZ19jbnQ6ICVs dSBpc19jYWxsZWQ6ICVkIiwKKwkJCQkJCSB4bHJlYy0+bm9kZS5zcGNOb2RlLAorCQkJCQkJ IHhscmVjLT5ub2RlLmRiTm9kZSwKKwkJCQkJCSB4bHJlYy0+bm9kZS5yZWxOb2RlLAorCQkJ CQkJIHhscmVjLT5sYXN0LCB4bHJlYy0+bG9nX2NudCwgeGxyZWMtPmlzX2NhbGxlZCk7CisJ fQogfQogCiBjb25zdCBjaGFyICoKQEAgLTQ4LDUgKzU4LDggQEAgbG9naWNhbG1zZ19pZGVu dGlmeSh1aW50OCBpbmZvKQogCWlmICgoaW5mbyAmIH5YTFJfSU5GT19NQVNLKSA9PSBYTE9H X0xPR0lDQUxfTUVTU0FHRSkKIAkJcmV0dXJuICJNRVNTQUdFIjsKIAorCWlmICgoaW5mbyAm IH5YTFJfSU5GT19NQVNLKSA9PSBYTE9HX0xPR0lDQUxfU0VRVUVOQ0UpCisJCXJldHVybiAi U0VRVUVOQ0UiOworCiAJcmV0dXJuIE5VTEw7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvdHJhbnNhbS94YWN0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94 YWN0LmMKaW5kZXggOGUzNWM0MzJmNS4uZWFjODE4MDI1MCAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0veGFjdC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90 cmFuc2FtL3hhY3QuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgImNhdGFsb2cvc3Rv cmFnZS5oIgogI2luY2x1ZGUgImNvbW1hbmRzL2FzeW5jLmgiCiAjaW5jbHVkZSAiY29tbWFu ZHMvdGFibGVjbWRzLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvc2VxdWVuY2UuaCIKICNpbmNs dWRlICJjb21tYW5kcy90cmlnZ2VyLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3Ivc3BpLmgiCiAj aW5jbHVkZSAibGlicHEvYmUtZnNzdHVicy5oIgpAQCAtMjIyMCw2ICsyMjIxLDkgQEAgQ29t bWl0VHJhbnNhY3Rpb24odm9pZCkKIAkvKiBQcmV2ZW50IGNhbmNlbC9kaWUgaW50ZXJydXB0 IHdoaWxlIGNsZWFuaW5nIHVwICovCiAJSE9MRF9JTlRFUlJVUFRTKCk7CiAKKwkvKiBXcml0 ZSBzdGF0ZSBvZiBzZXF1ZW5jZXMgdG8gV0FMICovCisJQXRFT1hhY3RfU2VxdWVuY2VzKHRy dWUpOworCiAJLyogQ29tbWl0IHVwZGF0ZXMgdG8gdGhlIHJlbGF0aW9uIG1hcCAtLS0gZG8g dGhpcyBhcyBsYXRlIGFzIHBvc3NpYmxlICovCiAJQXRFT1hhY3RfUmVsYXRpb25NYXAodHJ1 ZSwgaXNfcGFyYWxsZWxfd29ya2VyKTsKIApAQCAtMjM3OCw2ICsyMzgyLDggQEAgQ29tbWl0 VHJhbnNhY3Rpb24odm9pZCkKICAqCVByZXBhcmVUcmFuc2FjdGlvbgogICoKICAqIE5COiBp ZiB5b3UgY2hhbmdlIHRoaXMgcm91dGluZSwgYmV0dGVyIGxvb2sgYXQgQ29tbWl0VHJhbnNh Y3Rpb24gdG9vIQorICoKKyAqIFhYWCBEb2VzIHRoaXMgbmVlZCB0byBkbyBzb21ldGhpbmcg YWJvdXQgbG9nZ2luZyBvZiBzZXF1ZW5jZXM/CiAgKi8KIHN0YXRpYyB2b2lkCiBQcmVwYXJl VHJhbnNhY3Rpb24odm9pZCkKQEAgLTI3NzYsNiArMjc4Miw5IEBAIEFib3J0VHJhbnNhY3Rp b24odm9pZCkKIAlBdEVPWGFjdF9SZWxhdGlvbk1hcChmYWxzZSwgaXNfcGFyYWxsZWxfd29y a2VyKTsKIAlBdEFib3J0X1R3b3BoYXNlKCk7CiAKKwkvKiBYWFggbm90IHN1cmUgd2UgbmVl ZCB0byBkbyBhbnl0aGluZyBhYm91dCBzZXF1ZW5jZXMgYXQgYWJvcnQgKi8KKwlBdEVPWGFj dF9TZXF1ZW5jZXMoZmFsc2UpOworCiAJLyoKIAkgKiBBZHZlcnRpc2UgdGhlIGZhY3QgdGhh dCB3ZSBhYm9ydGVkIGluIHBnX3hhY3QgKGFzc3VtaW5nIHRoYXQgd2UgZ290IGFzCiAJICog ZmFyIGFzIGFzc2lnbmluZyBhbiBYSUQgdG8gYWR2ZXJ0aXNlKS4gIEJ1dCBpZiB3ZSdyZSBp bnNpZGUgYSBwYXJhbGxlbApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2Vx dWVuY2UuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlcXVlbmNlLmMKaW5kZXggYTk4ZmNj MmU5Ny4uOTJkMTk2NmYzNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2Vx dWVuY2UuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jCkBAIC0zNyw2 ICszNyw3IEBACiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAibm9kZXMvbWFr ZWZ1bmNzLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX3R5cGUuaCIKKyNpbmNsdWRlICJy ZXBsaWNhdGlvbi9tZXNzYWdlLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAjaW5j bHVkZSAic3RvcmFnZS9wcm9jLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zbWdyLmgiCkBAIC03 NSw2ICs3Niw3IEBAIHR5cGVkZWYgc3RydWN0IFNlcVRhYmxlRGF0YQogewogCU9pZAkJCXJl bGlkOwkJCS8qIHBnX2NsYXNzIE9JRCBvZiB0aGlzIHNlcXVlbmNlIChoYXNoIGtleSkgKi8K IAlPaWQJCQlmaWxlbm9kZTsJCS8qIGxhc3Qgc2VlbiByZWxmaWxlbm9kZSBvZiB0aGlzIHNl cXVlbmNlICovCisJT2lkCQkJdGFibGVzcGFjZTsJCS8qIGxhc3Qgc2VlbiB0YWJsZXNwYWNl IG9mIHRoaXMgc2VxdWVuY2UgKi8KIAlMb2NhbFRyYW5zYWN0aW9uSWQgbHhpZDsJLyogeGFj dCBpbiB3aGljaCB3ZSBsYXN0IGRpZCBhIHNlcSBvcCAqLwogCWJvb2wJCWxhc3RfdmFsaWQ7 CQkvKiBkbyB3ZSBoYXZlIGEgdmFsaWQgImxhc3QiIHZhbHVlPyAqLwogCWludDY0CQlsYXN0 OwkJCS8qIHZhbHVlIGxhc3QgcmV0dXJuZWQgYnkgbmV4dHZhbCAqLwpAQCAtODIsNiArODQs MTAgQEAgdHlwZWRlZiBzdHJ1Y3QgU2VxVGFibGVEYXRhCiAJLyogaWYgbGFzdCAhPSBjYWNo ZWQsIHdlIGhhdmUgbm90IHVzZWQgdXAgYWxsIHRoZSBjYWNoZWQgdmFsdWVzICovCiAJaW50 NjQJCWluY3JlbWVudDsJCS8qIGNvcHkgb2Ygc2VxdWVuY2UncyBpbmNyZW1lbnQgZmllbGQg Ki8KIAkvKiBub3RlIHRoYXQgaW5jcmVtZW50IGlzIHplcm8gdW50aWwgd2UgZmlyc3QgZG8g bmV4dHZhbF9pbnRlcm5hbCgpICovCisJYm9vbAkJbmVlZF9sb2c7CQkvKiBzaG91bGQgYmUg d3JpdHRlbiB0byBXQUwgYXQgY29tbWl0PyAqLworCWJvb2wJCXRvdWNoZWQ7CisJaW50NjQJ CWxvZ19jbnQ7CisJYm9vbAkJaXNfY2FsbGVkOwogfSBTZXFUYWJsZURhdGE7CiAKIHR5cGVk ZWYgU2VxVGFibGVEYXRhICpTZXFUYWJsZTsKQEAgLTk0LDcgKzEwMCw3IEBAIHN0YXRpYyBI VEFCICpzZXFoYXNodGFiID0gTlVMTDsgLyogaGFzaCB0YWJsZSBmb3IgU2VxVGFibGUgaXRl bXMgKi8KICAqLwogc3RhdGljIFNlcVRhYmxlRGF0YSAqbGFzdF91c2VkX3NlcSA9IE5VTEw7 CiAKLXN0YXRpYyB2b2lkIGZpbGxfc2VxX3dpdGhfZGF0YShSZWxhdGlvbiByZWwsIEhlYXBU dXBsZSB0dXBsZSwgYm9vbCBjcmVhdGUpOworc3RhdGljIHZvaWQgZmlsbF9zZXFfd2l0aF9k YXRhKFJlbGF0aW9uIHJlbCwgSGVhcFR1cGxlIHR1cGxlKTsKIHN0YXRpYyBSZWxhdGlvbiBs b2NrX2FuZF9vcGVuX3NlcXVlbmNlKFNlcVRhYmxlIHNlcSk7CiBzdGF0aWMgdm9pZCBjcmVh dGVfc2VxX2hhc2h0YWJsZSh2b2lkKTsKIHN0YXRpYyB2b2lkIGluaXRfc2VxdWVuY2UoT2lk IHJlbGlkLCBTZXFUYWJsZSAqcF9lbG0sIFJlbGF0aW9uICpwX3JlbCk7CkBAIC0yMjIsNyAr MjI4LDcgQEAgRGVmaW5lU2VxdWVuY2UoUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVTZXFT dG10ICpzZXEpCiAKIAkvKiBub3cgaW5pdGlhbGl6ZSB0aGUgc2VxdWVuY2UncyBkYXRhICov CiAJdHVwbGUgPSBoZWFwX2Zvcm1fdHVwbGUodHVwRGVzYywgdmFsdWUsIG51bGwpOwotCWZp bGxfc2VxX3dpdGhfZGF0YShyZWwsIHR1cGxlLCB0cnVlKTsKKwlmaWxsX3NlcV93aXRoX2Rh dGEocmVsLCB0dXBsZSk7CiAKIAkvKiBwcm9jZXNzIE9XTkVEIEJZIGlmIGdpdmVuICovCiAJ aWYgKG93bmVkX2J5KQpAQCAtMzI3LDEyICszMzMsMTcgQEAgUmVzZXRTZXF1ZW5jZShPaWQg c2VxX3JlbGlkKQogCS8qCiAJICogSW5zZXJ0IHRoZSBtb2RpZmllZCB0dXBsZSBpbnRvIHRo ZSBuZXcgc3RvcmFnZSBmaWxlLgogCSAqLwotCWZpbGxfc2VxX3dpdGhfZGF0YShzZXFfcmVs LCB0dXBsZSwgdHJ1ZSk7CisJZmlsbF9zZXFfd2l0aF9kYXRhKHNlcV9yZWwsIHR1cGxlKTsK IAogCS8qIENsZWFyIGxvY2FsIGNhY2hlIHNvIHRoYXQgd2UgZG9uJ3QgdGhpbmsgd2UgaGF2 ZSBjYWNoZWQgbnVtYmVycyAqLwogCS8qIE5vdGUgdGhhdCB3ZSBkbyBub3QgY2hhbmdlIHRo ZSBjdXJydmFsKCkgc3RhdGUgKi8KIAllbG0tPmNhY2hlZCA9IGVsbS0+bGFzdDsKIAorCS8q IFJlbWVtYmVyIHdlIG5lZWQgdG8gd3JpdGUgdGhlIHNlcXVlbmNlIHRvIFdBTCBhdCBjb21t aXQuICovCisJZWxtLT5uZWVkX2xvZyA9IHRydWU7CisJZWxtLT5pc19jYWxsZWQgPSBmYWxz ZTsKKwllbG0tPmxvZ19jbnQgPSAwOworCiAJcmVsYXRpb25fY2xvc2Uoc2VxX3JlbCwgTm9M b2NrKTsKIH0KIApAQCAtMzQwLDcgKzM1MSw3IEBAIFJlc2V0U2VxdWVuY2UoT2lkIHNlcV9y ZWxpZCkKICAqIEluaXRpYWxpemUgYSBzZXF1ZW5jZSdzIHJlbGF0aW9uIHdpdGggdGhlIHNw ZWNpZmllZCB0dXBsZSBhcyBjb250ZW50CiAgKi8KIHN0YXRpYyB2b2lkCi1maWxsX3NlcV93 aXRoX2RhdGEoUmVsYXRpb24gcmVsLCBIZWFwVHVwbGUgdHVwbGUsIGJvb2wgY3JlYXRlKQor ZmlsbF9zZXFfd2l0aF9kYXRhKFJlbGF0aW9uIHJlbCwgSGVhcFR1cGxlIHR1cGxlKQogewog CUJ1ZmZlcgkJYnVmOwogCVBhZ2UJCXBhZ2U7CkBAIC0zODAsMjcgKzM5MSw3IEBAIGZpbGxf c2VxX3dpdGhfZGF0YShSZWxhdGlvbiByZWwsIEhlYXBUdXBsZSB0dXBsZSwgYm9vbCBjcmVh dGUpCiAJaWYgKFJlbGF0aW9uTmVlZHNXQUwocmVsKSkKIAl7CiAJCUdldFRvcFRyYW5zYWN0 aW9uSWQoKTsKLQotCQkvKgotCQkgKiBFbnN1cmUgd2UgaGF2ZSBhIHByb3BlciBYSUQsIHdo aWNoIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIFhMT0cKLQkJICogcmVjb3JkIGJ5IFhMb2dS ZWNvcmRBc3NlbWJsZS4gT3RoZXJ3aXNlIHRoZSBmaXJzdCBuZXh0dmFsKCkgaW4KLQkJICog YSBzdWJ4YWN0ICh3aXRob3V0IGFueSBwcmVjZWRpbmcgY2hhbmdlcykgd291bGQgZ2V0IFhJ RCAwLAotCQkgKiBhbmQgaXQnZCBiZSBpbXBvc3NpYmxlIHRvIGRlY2lkZSB3aGljaCB0b3Ag eGFjdCBpdCBiZWxvbmdzIHRvLgotCQkgKiBJdCdkIGFsc28gdHJpZ2dlciBhc3NlcnQgaW4g RGVjb2RlU2VxdWVuY2UuCi0JCSAqCi0JCSAqIFhYWCBUaGlzIG1pZ2h0IHNlZW0gdW5uZWNl c3NhcnksIGJlY2F1c2UgaWYgdGhlcmUncyBubyBYSUQgdGhlCi0JCSAqIHRyYW5zYWN0aW9u IGNvdWxkbid0IGhhdmUgZG9uZSBhbnl0aGluZyBpbXBvcnRhbnQgeWV0LCBlLmcuIGl0Ci0J CSAqIGNvdWxkIG5vdCBoYXZlIGNyZWF0ZWQgYSBzZXF1ZW5jZS4gQnV0IHRoYXQncyBpbmNv cnJlY3QsIGFzIGl0Ci0JCSAqIGlnbm9yZXMgc3VidHJhbnNhY3Rpb25zLiBUaGUgY3VycmVu dCBzdWJ0cmFuc2FjdGlvbiBtaWdodCBub3QKLQkJICogaGF2ZSBkb25lIGFueXRoaW5nIHll dCAodGh1cyBubyBYSUQpLCBidXQgYW4gZWFybGllciBvbmUgbWlnaHQKLQkJICogaGF2ZSBj cmVhdGVkIHRoZSBzZXF1ZW5jZS4KLQkJICoKLQkJICogWFhYIE5vdCBzdXJlIGlmIHRoaXMg aXMgdGhlIGJlc3Qgc29sdXRpb24uIE1heWJlIGRvIHRoaXMgb25seQotCQkgKiB3aXRoIHdh bF9sZXZlbD1sb2dpY2FsIHRvIG1pbmltaXplIHRoZSBvdmVyaGVhZC4gT1RPSCBhZHZhbmNp bmcKLQkJICogdGhlIHNlcXVlbmNlIGlzIGxpa2VseSBmb2xsb3dlZCBieSB1c2luZyB0aGUg dmFsdWUocykgZm9yIHNvbWUKLQkJICogb3RoZXIgYWN0aXZpdHksIHdoaWNoIGFzc2lnbnMg dGhlIFhJRC4KLQkJICovCi0JCUdldEN1cnJlbnRUcmFuc2FjdGlvbklkKCk7CisJCS8vIEdl dEN1cnJlbnRUcmFuc2FjdGlvbklkKCk7CiAJfQogCiAJU1RBUlRfQ1JJVF9TRUNUSU9OKCk7 CkBAIC00MjIsNyArNDEzLDYgQEAgZmlsbF9zZXFfd2l0aF9kYXRhKFJlbGF0aW9uIHJlbCwg SGVhcFR1cGxlIHR1cGxlLCBib29sIGNyZWF0ZSkKIAkJWExvZ1JlZ2lzdGVyQnVmZmVyKDAs IGJ1ZiwgUkVHQlVGX1dJTExfSU5JVCk7CiAKIAkJeGxyZWMubm9kZSA9IHJlbC0+cmRfbm9k ZTsKLQkJeGxyZWMuY3JlYXRlZCA9IGNyZWF0ZTsKIAogCQlYTG9nUmVnaXN0ZXJEYXRhKChj aGFyICopICZ4bHJlYywgc2l6ZW9mKHhsX3NlcV9yZWMpKTsKIAkJWExvZ1JlZ2lzdGVyRGF0 YSgoY2hhciAqKSB0dXBsZS0+dF9kYXRhLCB0dXBsZS0+dF9sZW4pOwpAQCAtNTI2LDcgKzUx NiwxMSBAQCBBbHRlclNlcXVlbmNlKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQWx0ZXJTZXFTdG10 ICpzdG10KQogCQkvKgogCQkgKiBJbnNlcnQgdGhlIG1vZGlmaWVkIHR1cGxlIGludG8gdGhl IG5ldyBzdG9yYWdlIGZpbGUuCiAJCSAqLwotCQlmaWxsX3NlcV93aXRoX2RhdGEoc2VxcmVs LCBuZXdkYXRhdHVwbGUsIHRydWUpOworCQlmaWxsX3NlcV93aXRoX2RhdGEoc2VxcmVsLCBu ZXdkYXRhdHVwbGUpOworCisJCWVsbS0+bmVlZF9sb2cgPSB0cnVlOworCQllbG0tPmlzX2Nh bGxlZCA9IGZhbHNlOworCQllbG0tPmxvZ19jbnQgPSAwOwogCX0KIAogCS8qIHByb2Nlc3Mg T1dORUQgQlkgaWYgZ2l2ZW4gKi8KQEAgLTc5MiwyNyArNzg2LDcgQEAgbmV4dHZhbF9pbnRl cm5hbChPaWQgcmVsaWQsIGJvb2wgY2hlY2tfcGVybWlzc2lvbnMpCiAJaWYgKGxvZ2l0ICYm IFJlbGF0aW9uTmVlZHNXQUwoc2VxcmVsKSkKIAl7CiAJCUdldFRvcFRyYW5zYWN0aW9uSWQo KTsKLQotCQkvKgotCQkgKiBFbnN1cmUgd2UgaGF2ZSBhIHByb3BlciBYSUQsIHdoaWNoIHdp bGwgYmUgaW5jbHVkZWQgaW4gdGhlIFhMT0cKLQkJICogcmVjb3JkIGJ5IFhMb2dSZWNvcmRB c3NlbWJsZS4gT3RoZXJ3aXNlIHRoZSBmaXJzdCBuZXh0dmFsKCkgaW4KLQkJICogYSBzdWJ4 YWN0ICh3aXRob3V0IGFueSBwcmVjZWRpbmcgY2hhbmdlcykgd291bGQgZ2V0IFhJRCAwLAot CQkgKiBhbmQgaXQnZCBiZSBpbXBvc3NpYmxlIHRvIGRlY2lkZSB3aGljaCB0b3AgeGFjdCBp dCBiZWxvbmdzIHRvLgotCQkgKiBJdCdkIGFsc28gdHJpZ2dlciBhc3NlcnQgaW4gRGVjb2Rl U2VxdWVuY2UuCi0JCSAqCi0JCSAqIFhYWCBUaGlzIG1pZ2h0IHNlZW0gdW5uZWNlc3Nhcnks IGJlY2F1c2UgaWYgdGhlcmUncyBubyBYSUQgdGhlCi0JCSAqIHRyYW5zYWN0aW9uIGNvdWxk bid0IGhhdmUgZG9uZSBhbnl0aGluZyBpbXBvcnRhbnQgeWV0LCBlLmcuIGl0Ci0JCSAqIGNv dWxkIG5vdCBoYXZlIGNyZWF0ZWQgYSBzZXF1ZW5jZS4gQnV0IHRoYXQncyBpbmNvcnJlY3Qs IGFzIGl0Ci0JCSAqIGlnbm9yZXMgc3VidHJhbnNhY3Rpb25zLiBUaGUgY3VycmVudCBzdWJ0 cmFuc2FjdGlvbiBtaWdodCBub3QKLQkJICogaGF2ZSBkb25lIGFueXRoaW5nIHlldCAodGh1 cyBubyBYSUQpLCBidXQgYW4gZWFybGllciBvbmUgbWlnaHQKLQkJICogaGF2ZSBjcmVhdGVk IHRoZSBzZXF1ZW5jZS4KLQkJICoKLQkJICogWFhYIE5vdCBzdXJlIGlmIHRoaXMgaXMgdGhl IGJlc3Qgc29sdXRpb24uIE1heWJlIGRvIHRoaXMgb25seQotCQkgKiB3aXRoIHdhbF9sZXZl bD1sb2dpY2FsIHRvIG1pbmltaXplIHRoZSBvdmVyaGVhZC4gT1RPSCBhZHZhbmNpbmcKLQkJ ICogdGhlIHNlcXVlbmNlIGlzIGxpa2VseSBmb2xsb3dlZCBieSB1c2luZyB0aGUgdmFsdWUo cykgZm9yIHNvbWUKLQkJICogb3RoZXIgYWN0aXZpdHksIHdoaWNoIGFzc2lnbnMgdGhlIFhJ RC4KLQkJICovCi0JCUdldEN1cnJlbnRUcmFuc2FjdGlvbklkKCk7CisJCS8vIEdldEN1cnJl bnRUcmFuc2FjdGlvbklkKCk7CiAJfQogCiAJLyogcmVhZHkgdG8gY2hhbmdlIHRoZSBvbi1k aXNrIChvciByZWFsbHksIGluLWJ1ZmZlcikgdHVwbGUgKi8KQEAgLTg1MCw3ICs4MjQsNiBA QCBuZXh0dmFsX2ludGVybmFsKE9pZCByZWxpZCwgYm9vbCBjaGVja19wZXJtaXNzaW9ucykK IAkJc2VxLT5sb2dfY250ID0gMDsKIAogCQl4bHJlYy5ub2RlID0gc2VxcmVsLT5yZF9ub2Rl OwotCQl4bHJlYy5jcmVhdGVkID0gZmFsc2U7CiAKIAkJWExvZ1JlZ2lzdGVyRGF0YSgoY2hh ciAqKSAmeGxyZWMsIHNpemVvZih4bF9zZXFfcmVjKSk7CiAJCVhMb2dSZWdpc3RlckRhdGEo KGNoYXIgKikgc2VxZGF0YXR1cGxlLnRfZGF0YSwgc2VxZGF0YXR1cGxlLnRfbGVuKTsKQEAg LTg1OCw2ICs4MzEsMTAgQEAgbmV4dHZhbF9pbnRlcm5hbChPaWQgcmVsaWQsIGJvb2wgY2hl Y2tfcGVybWlzc2lvbnMpCiAJCXJlY3B0ciA9IFhMb2dJbnNlcnQoUk1fU0VRX0lELCBYTE9H X1NFUV9MT0cpOwogCiAJCVBhZ2VTZXRMU04ocGFnZSwgcmVjcHRyKTsKKworCQllbG0tPm5l ZWRfbG9nID0gdHJ1ZTsKKwkJZWxtLT5pc19jYWxsZWQgPSB0cnVlOworCQllbG0tPmxvZ19j bnQgPSAwOwogCX0KIAogCS8qIE5vdyB1cGRhdGUgc2VxdWVuY2UgdHVwbGUgdG8gdGhlIGlu dGVuZGVkIGZpbmFsIHN0YXRlICovCkBAIC0xMDI3LDI3ICsxMDA0LDcgQEAgZG9fc2V0dmFs KE9pZCByZWxpZCwgaW50NjQgbmV4dCwgYm9vbCBpc2NhbGxlZCkKIAlpZiAoUmVsYXRpb25O ZWVkc1dBTChzZXFyZWwpKQogCXsKIAkJR2V0VG9wVHJhbnNhY3Rpb25JZCgpOwotCi0JCS8q Ci0JCSAqIEVuc3VyZSB3ZSBoYXZlIGEgcHJvcGVyIFhJRCwgd2hpY2ggd2lsbCBiZSBpbmNs dWRlZCBpbiB0aGUgWExPRwotCQkgKiByZWNvcmQgYnkgWExvZ1JlY29yZEFzc2VtYmxlLiBP dGhlcndpc2UgdGhlIGZpcnN0IG5leHR2YWwoKSBpbgotCQkgKiBhIHN1YnhhY3QgKHdpdGhv dXQgYW55IHByZWNlZGluZyBjaGFuZ2VzKSB3b3VsZCBnZXQgWElEIDAsCi0JCSAqIGFuZCBp dCdkIGJlIGltcG9zc2libGUgdG8gZGVjaWRlIHdoaWNoIHRvcCB4YWN0IGl0IGJlbG9uZ3Mg dG8uCi0JCSAqIEl0J2QgYWxzbyB0cmlnZ2VyIGFzc2VydCBpbiBEZWNvZGVTZXF1ZW5jZS4K LQkJICoKLQkJICogWFhYIFRoaXMgbWlnaHQgc2VlbSB1bm5lY2Vzc2FyeSwgYmVjYXVzZSBp ZiB0aGVyZSdzIG5vIFhJRCB0aGUKLQkJICogdHJhbnNhY3Rpb24gY291bGRuJ3QgaGF2ZSBk b25lIGFueXRoaW5nIGltcG9ydGFudCB5ZXQsIGUuZy4gaXQKLQkJICogY291bGQgbm90IGhh dmUgY3JlYXRlZCBhIHNlcXVlbmNlLiBCdXQgdGhhdCdzIGluY29ycmVjdCwgYXMgaXQKLQkJ ICogaWdub3JlcyBzdWJ0cmFuc2FjdGlvbnMuIFRoZSBjdXJyZW50IHN1YnRyYW5zYWN0aW9u IG1pZ2h0IG5vdAotCQkgKiBoYXZlIGRvbmUgYW55dGhpbmcgeWV0ICh0aHVzIG5vIFhJRCks IGJ1dCBhbiBlYXJsaWVyIG9uZSBtaWdodAotCQkgKiBoYXZlIGNyZWF0ZWQgdGhlIHNlcXVl bmNlLgotCQkgKgotCQkgKiBYWFggTm90IHN1cmUgaWYgdGhpcyBpcyB0aGUgYmVzdCBzb2x1 dGlvbi4gTWF5YmUgZG8gdGhpcyBvbmx5Ci0JCSAqIHdpdGggd2FsX2xldmVsPWxvZ2ljYWwg dG8gbWluaW1pemUgdGhlIG92ZXJoZWFkLiBPVE9IIGFkdmFuY2luZwotCQkgKiB0aGUgc2Vx dWVuY2UgaXMgbGlrZWx5IGZvbGxvd2VkIGJ5IHVzaW5nIHRoZSB2YWx1ZShzKSBmb3Igc29t ZQotCQkgKiBvdGhlciBhY3Rpdml0eSwgd2hpY2ggYXNzaWducyB0aGUgWElELgotCQkgKi8K LQkJR2V0Q3VycmVudFRyYW5zYWN0aW9uSWQoKTsKKwkJLy8gR2V0Q3VycmVudFRyYW5zYWN0 aW9uSWQoKTsKIAl9CiAKIAkvKiByZWFkeSB0byBjaGFuZ2UgdGhlIG9uLWRpc2sgKG9yIHJl YWxseSwgaW4tYnVmZmVyKSB0dXBsZSAqLwpAQCAtMTA3MCwxNCArMTAyNywxNiBAQCBkb19z ZXR2YWwoT2lkIHJlbGlkLCBpbnQ2NCBuZXh0LCBib29sIGlzY2FsbGVkKQogCQlYTG9nUmVn aXN0ZXJCdWZmZXIoMCwgYnVmLCBSRUdCVUZfV0lMTF9JTklUKTsKIAogCQl4bHJlYy5ub2Rl ID0gc2VxcmVsLT5yZF9ub2RlOwotCQl4bHJlYy5jcmVhdGVkID0gZmFsc2U7Ci0KIAkJWExv Z1JlZ2lzdGVyRGF0YSgoY2hhciAqKSAmeGxyZWMsIHNpemVvZih4bF9zZXFfcmVjKSk7CiAJ CVhMb2dSZWdpc3RlckRhdGEoKGNoYXIgKikgc2VxZGF0YXR1cGxlLnRfZGF0YSwgc2VxZGF0 YXR1cGxlLnRfbGVuKTsKIAogCQlyZWNwdHIgPSBYTG9nSW5zZXJ0KFJNX1NFUV9JRCwgWExP R19TRVFfTE9HKTsKIAogCQlQYWdlU2V0TFNOKHBhZ2UsIHJlY3B0cik7CisKKwkJZWxtLT5u ZWVkX2xvZyA9IHRydWU7CisJCWVsbS0+aXNfY2FsbGVkID0gZmFsc2U7CisJCWVsbS0+bG9n X2NudCA9IDA7CiAJfQogCiAJRU5EX0NSSVRfU0VDVElPTigpOwpAQCAtMTE5NiwxMSArMTE1 NSwxNCBAQCBpbml0X3NlcXVlbmNlKE9pZCByZWxpZCwgU2VxVGFibGUgKnBfZWxtLCBSZWxh dGlvbiAqcF9yZWwpCiAJewogCQkvKiByZWxpZCBhbHJlYWR5IGZpbGxlZCBpbiAqLwogCQll bG0tPmZpbGVub2RlID0gSW52YWxpZE9pZDsKKwkJZWxtLT50YWJsZXNwYWNlID0gSW52YWxp ZE9pZDsKIAkJZWxtLT5seGlkID0gSW52YWxpZExvY2FsVHJhbnNhY3Rpb25JZDsKIAkJZWxt LT5sYXN0X3ZhbGlkID0gZmFsc2U7CiAJCWVsbS0+bGFzdCA9IGVsbS0+Y2FjaGVkID0gMDsK IAl9CiAKKwllbG0tPnRvdWNoZWQgPSB0cnVlOworCiAJLyoKIAkgKiBPcGVuIHRoZSBzZXF1 ZW5jZSByZWxhdGlvbi4KIAkgKi8KQEAgLTEyMTksNiArMTE4MSw3IEBAIGluaXRfc2VxdWVu Y2UoT2lkIHJlbGlkLCBTZXFUYWJsZSAqcF9lbG0sIFJlbGF0aW9uICpwX3JlbCkKIAkgKi8K IAlpZiAoc2VxcmVsLT5yZF9yZWwtPnJlbGZpbGVub2RlICE9IGVsbS0+ZmlsZW5vZGUpCiAJ eworCQllbG0tPnRhYmxlc3BhY2UgPSBzZXFyZWwtPnJkX3JlbC0+cmVsdGFibGVzcGFjZTsK IAkJZWxtLT5maWxlbm9kZSA9IHNlcXJlbC0+cmRfcmVsLT5yZWxmaWxlbm9kZTsKIAkJZWxt LT5jYWNoZWQgPSBlbG0tPmxhc3Q7CiAJfQpAQCAtMTk3Nyw2ICsxOTQwLDggQEAgc2VxX3Jl ZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAKIC8qCiAgKiBGbHVzaCBjYWNoZWQgc2Vx dWVuY2UgaW5mb3JtYXRpb24uCisgKgorICogWFhYIERvIHdlIG5lZWQgdG8gV0FMLWxvZyB0 aGUgZW50cmllcyBiYXNlZCBvbiBuZWVkX2xvZz8KICAqLwogdm9pZAogUmVzZXRTZXF1ZW5j ZUNhY2hlcyh2b2lkKQpAQCAtMjAwMCwzICsxOTY1LDc0IEBAIHNlcV9tYXNrKGNoYXIgKnBh Z2UsIEJsb2NrTnVtYmVyIGJsa25vKQogCiAJbWFza191bnVzZWRfc3BhY2UocGFnZSk7CiB9 CisKKy8qIFhYWCBEbyB0aGlzIG9ubHkgZm9yIHdhbF9sZXZlbCA9IGxvZ2ljYWwsIHByb2Jh Ymx5PyAqLwordm9pZAorQXRFT1hhY3RfU2VxdWVuY2VzKGJvb2wgaXNDb21taXQpCit7CisJ U2VxVGFibGUJCWVudHJ5OworCUhBU0hfU0VRX1NUQVRVUwlzY2FuOworCisJaWYgKCFzZXFo YXNodGFiKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFhYWCBJZiB3ZSBydW4ganVzdCBuZXh0 dmFsKCkgdGhhdCByZXR1cm5zIGNhY2hlZCB2YWx1ZSwgdGhlIHhhY3QgbWF5CisJICogbm90 IGhhdmUgWElELCBidXQgd2UgZXhwZWN0IGl0IGluIHJlb3JkZXJidWZmZXIuIE1heWJlIHRy ZWF0IHRoYXQgYXMKKwkgKiB0cmFuc2FjdGlvbmFsPworCSAqLworCS8vIEdldFRvcFRyYW5z YWN0aW9uSWQoKTsKKwkvLyBHZXRDdXJyZW50VHJhbnNhY3Rpb25JZCgpOworCisJaGFzaF9z ZXFfaW5pdCgmc2Nhbiwgc2VxaGFzaHRhYik7CisKKwl3aGlsZSAoKGVudHJ5ID0gKFNlcVRh YmxlKSBoYXNoX3NlcV9zZWFyY2goJnNjYW4pKSkKKwl7CisJCVJlbEZpbGVOb2RlCQkJcm5v ZGU7CisJCXhsX2xvZ2ljYWxfc2VxdWVuY2UJeGxyZWM7CisKKwkJaWYgKCFpc0NvbW1pdCkK KwkJCWVudHJ5LT50b3VjaGVkID0gZmFsc2U7CisKKwkJLyoKKwkJICogSWYgbm90IHRvdWNo ZWQgaW4gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24sIGRvbid0IGxvZyBhbnl0aGluZy4KKwkJ ICogV2UgbGVhdmUgbmVlZHNfbG9nIHNldCwgc28gdGhhdCBpZiBmdXR1cmUgdHJhbnNhY3Rp b25zIHRvdWNoCisJCSAqIHRoZSBzZXF1ZW5jZSB3ZSdsbCBsb2cgaXQgcHJvcGVybHkuCisJ CSAqLworCQlpZiAoIWVudHJ5LT50b3VjaGVkKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJ ICogTGlrZXdpc2UsIGlmIHRoZSBzZXF1ZW5jZSBkb2VzIG5vdCBuZWVkIGxvZ2dpbmcsIHdl J3JlIGRvbmUuCisJCSAqLworCQlpZiAoIWVudHJ5LT5uZWVkX2xvZykKKwkJCWNvbnRpbnVl OworCisJCS8qIGlmIHRoaXMgaXMgY29tbWl0LCB3ZSdsbCBsb2cgdGhlICovCisJCWVudHJ5 LT5uZWVkX2xvZyA9IGZhbHNlOworCQllbnRyeS0+dG91Y2hlZCA9IGZhbHNlOworCisJCXJu b2RlLnNwY05vZGUgPSBlbnRyeS0+dGFibGVzcGFjZTsJCS8qIHRhYmxlc3BhY2UgKi8KKwkJ cm5vZGUuZGJOb2RlID0gTXlEYXRhYmFzZUlkOwkJCS8qIGRhdGFiYXNlICovCisJCXJub2Rl LnJlbE5vZGUgPSBlbnRyeS0+ZmlsZW5vZGU7CQkvKiByZWxhdGlvbiAqLworCisJCXhscmVj Lm5vZGUgPSBybm9kZTsKKwkJeGxyZWMucmVsb2lkID0gZW50cnktPnJlbGlkOworCisJCS8q IFhYWCBpcyBpdCBnb29kIGVub3VnaCB0byBsb2cgdmFsdWVzIHdlIGhhdmUgaW4gY2FjaGU/ IHNlZW1zCisJCSAqIHdyb25nIGFuZCB3ZSBtYXkgbmVlZCB0byByZS1yZWFkIHRoYXQuICov CisJCS8vIHhscmVjLmRiSWQgPSBNeURhdGFiYXNlSWQ7CisJCS8vIHhscmVjLnJlbElkID0g ZW50cnktPnJlbGlkOworCQl4bHJlYy5sYXN0ID0gZW50cnktPmxhc3Q7CisJCXhscmVjLmxv Z19jbnQgPSBlbnRyeS0+bG9nX2NudDsKKwkJeGxyZWMuaXNfY2FsbGVkID0gZW50cnktPmlz X2NhbGxlZDsKKworCQlYTG9nQmVnaW5JbnNlcnQoKTsKKwkJWExvZ1JlZ2lzdGVyRGF0YSgo Y2hhciAqKSAmeGxyZWMsIFNpemVPZkxvZ2ljYWxTZXF1ZW5jZSk7CisKKwkJLyogYWxsb3cg b3JpZ2luIGZpbHRlcmluZyAqLworCQlYTG9nU2V0UmVjb3JkRmxhZ3MoWExPR19JTkNMVURF X09SSUdJTik7CisKKwkJKHZvaWQpIFhMb2dJbnNlcnQoUk1fTE9HSUNBTE1TR19JRCwgWExP R19MT0dJQ0FMX1NFUVVFTkNFKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9kZWNvZGUuYwppbmRleCBiNjFmMmUyNjRhLi5kMjk4NDRhZGY5IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jCisrKyBiL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMKQEAgLTU5LDYgKzU5LDkg QEAgc3RhdGljIHZvaWQgRGVjb2RlWGFjdE9wKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0 eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKTsKIHN0YXRpYyB2b2lkIERlY29kZVN0YW5kYnlP cChMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1Zik7 CiBzdGF0aWMgdm9pZCBEZWNvZGVMb2dpY2FsTXNnT3AoTG9naWNhbERlY29kaW5nQ29udGV4 dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpOwogCitzdGF0aWMgdm9pZCBEZWNvZGVM b2dpY2FsTWVzc2FnZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRC dWZmZXIgKmJ1Zik7CitzdGF0aWMgdm9pZCBEZWNvZGVMb2dpY2FsU2VxdWVuY2UoTG9naWNh bERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpOworCiAvKiBp bmRpdmlkdWFsIHJlY29yZChncm91cCkncyBoYW5kbGVycyAqLwogc3RhdGljIHZvaWQgRGVj b2RlSW5zZXJ0KExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZl ciAqYnVmKTsKIHN0YXRpYyB2b2lkIERlY29kZVVwZGF0ZShMb2dpY2FsRGVjb2RpbmdDb250 ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1Zik7CkBAIC03NSwxMSArNzgsOSBAQCBz dGF0aWMgdm9pZCBEZWNvZGVBYm9ydChMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhM b2dSZWNvcmRCdWZmZXIgKmJ1ZiwKIAkJCQkJCWJvb2wgdHdvX3BoYXNlKTsKIHN0YXRpYyB2 b2lkIERlY29kZVByZXBhcmUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVj b3JkQnVmZmVyICpidWYsCiAJCQkJCQkgIHhsX3hhY3RfcGFyc2VkX3ByZXBhcmUgKnBhcnNl ZCk7Ci1zdGF0aWMgdm9pZCBEZWNvZGVTZXF1ZW5jZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0 ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1Zik7CiAKIC8qIGNvbW1vbiBmdW5jdGlvbiB0 byBkZWNvZGUgdHVwbGVzICovCiBzdGF0aWMgdm9pZCBEZWNvZGVYTG9nVHVwbGUoY2hhciAq ZGF0YSwgU2l6ZSBsZW4sIFJlb3JkZXJCdWZmZXJUdXBsZUJ1ZiAqdHVwKTsKLXN0YXRpYyB2 b2lkIERlY29kZVNlcVR1cGxlKGNoYXIgKmRhdGEsIFNpemUgbGVuLCBSZW9yZGVyQnVmZmVy VHVwbGVCdWYgKnR1cGxlKTsKIAogLyogaGVscGVyIGZ1bmN0aW9ucyBmb3IgZGVjb2Rpbmcg dHJhbnNhY3Rpb25zICovCiBzdGF0aWMgaW5saW5lIGJvb2wgRmlsdGVyUHJlcGFyZShMb2dp Y2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCkBAIC0xNjAsMTAgKzE2MSw2IEBAIExvZ2ljYWxE ZWNvZGluZ1Byb2Nlc3NSZWNvcmQoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9n UmVhZGVyU3RhdGUgKnJlY29yCiAJCQlEZWNvZGVMb2dpY2FsTXNnT3AoY3R4LCAmYnVmKTsK IAkJCWJyZWFrOwogCi0JCWNhc2UgUk1fU0VRX0lEOgotCQkJRGVjb2RlU2VxdWVuY2UoY3R4 LCAmYnVmKTsKLQkJCWJyZWFrOwotCiAJCQkvKgogCQkJICogUm1ncnMgaXJyZWxldmFudCBm b3IgbG9naWNhbCBkZWNvZGluZzsgdGhleSBkZXNjcmliZSBzdHVmZiBub3QKIAkJCSAqIHJl cHJlc2VudGVkIGluIGxvZ2ljYWwgZGVjb2RpbmcuIEFkZCBuZXcgcm1ncnMgaW4gcm1ncmxp c3QuaCdzCkBAIC02MjYsNiArNjIzLDI3IEBAIEZpbHRlckJ5T3JpZ2luKExvZ2ljYWxEZWNv ZGluZ0NvbnRleHQgKmN0eCwgUmVwT3JpZ2luSWQgb3JpZ2luX2lkKQogICovCiBzdGF0aWMg dm9pZAogRGVjb2RlTG9naWNhbE1zZ09wKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwg WExvZ1JlY29yZEJ1ZmZlciAqYnVmKQoreworCVhMb2dSZWFkZXJTdGF0ZSAqciA9IGJ1Zi0+ cmVjb3JkOworCXVpbnQ4CQlpbmZvID0gWExvZ1JlY0dldEluZm8ocikgJiB+WExSX0lORk9f TUFTSzsKKworCXN3aXRjaCAoaW5mbykKKwl7CisJCWNhc2UgWExPR19MT0dJQ0FMX01FU1NB R0U6CisJCQlEZWNvZGVMb2dpY2FsTWVzc2FnZShjdHgsIGJ1Zik7CisJCQlicmVhazsKKwor CQljYXNlIFhMT0dfTE9HSUNBTF9TRVFVRU5DRToKKwkJCURlY29kZUxvZ2ljYWxTZXF1ZW5j ZShjdHgsIGJ1Zik7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwg InVuZXhwZWN0ZWQgUk1fTE9HSUNBTE1TR19JRCByZWNvcmQgdHlwZTogJXUiLCBpbmZvKTsK Kwl9Cit9CisKK3N0YXRpYyB2b2lkCitEZWNvZGVMb2dpY2FsTWVzc2FnZShMb2dpY2FsRGVj b2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1ZikKIHsKIAlTbmFwQnVp bGQgICpidWlsZGVyID0gY3R4LT5zbmFwc2hvdF9idWlsZGVyOwogCVhMb2dSZWFkZXJTdGF0 ZSAqciA9IGJ1Zi0+cmVjb3JkOwpAQCAtMTMxOSwzMSArMTMzNyw2IEBAIERlY29kZVRYTk5l ZWRTa2lwKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAq YnVmLAogCQkJY3R4LT5mYXN0X2ZvcndhcmQgfHwgRmlsdGVyQnlPcmlnaW4oY3R4LCBvcmln aW5faWQpKTsKIH0KIAotLyoKLSAqIERlY29kZSBTZXF1ZW5jZSBUdXBsZQotICovCi1zdGF0 aWMgdm9pZAotRGVjb2RlU2VxVHVwbGUoY2hhciAqZGF0YSwgU2l6ZSBsZW4sIFJlb3JkZXJC dWZmZXJUdXBsZUJ1ZiAqdHVwbGUpCi17Ci0JaW50CQkJZGF0YWxlbiA9IGxlbiAtIHNpemVv Zih4bF9zZXFfcmVjKSAtIFNpemVvZkhlYXBUdXBsZUhlYWRlcjsKLQotCUFzc2VydChkYXRh bGVuID49IDApOwotCi0JdHVwbGUtPnR1cGxlLnRfbGVuID0gZGF0YWxlbiArIFNpemVvZkhl YXBUdXBsZUhlYWRlcjs7Ci0KLQlJdGVtUG9pbnRlclNldEludmFsaWQoJnR1cGxlLT50dXBs ZS50X3NlbGYpOwotCi0JdHVwbGUtPnR1cGxlLnRfdGFibGVPaWQgPSBJbnZhbGlkT2lkOwot Ci0JbWVtY3B5KCgoY2hhciAqKSB0dXBsZS0+dHVwbGUudF9kYXRhKSwKLQkJICAgZGF0YSAr IHNpemVvZih4bF9zZXFfcmVjKSwKLQkJICAgU2l6ZW9mSGVhcFR1cGxlSGVhZGVyKTsKLQot CW1lbWNweSgoKGNoYXIgKikgdHVwbGUtPnR1cGxlLnRfZGF0YSkgKyBTaXplb2ZIZWFwVHVw bGVIZWFkZXIsCi0JCSAgIGRhdGEgKyBzaXplb2YoeGxfc2VxX3JlYykgKyBTaXplb2ZIZWFw VHVwbGVIZWFkZXIsCi0JCSAgIGRhdGFsZW4pOwotfQotCiAvKgogICogSGFuZGxlIHNlcXVl bmNlIGRlY29kZQogICoKQEAgLTEzNjIsMjQgKzEzNTUsMjAgQEAgRGVjb2RlU2VxVHVwbGUo Y2hhciAqZGF0YSwgU2l6ZSBsZW4sIFJlb3JkZXJCdWZmZXJUdXBsZUJ1ZiAqdHVwbGUpCiAg KiBwbHVnaW4gLSBpdCBtaWdodCBnZXQgY29uZnVzZWQgYWJvdXQgd2hpY2ggc2VxdWVuY2Ug aXQncyByZWxhdGVkIHRvIGV0Yy4KICAqLwogc3RhdGljIHZvaWQKLURlY29kZVNlcXVlbmNl KExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKQor RGVjb2RlTG9naWNhbFNlcXVlbmNlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExv Z1JlY29yZEJ1ZmZlciAqYnVmKQogewogCVNuYXBCdWlsZCAgKmJ1aWxkZXIgPSBjdHgtPnNu YXBzaG90X2J1aWxkZXI7Ci0JUmVvcmRlckJ1ZmZlclR1cGxlQnVmICp0dXBsZWJ1ZjsKIAlS ZWxGaWxlTm9kZSB0YXJnZXRfbm9kZTsKIAlYTG9nUmVhZGVyU3RhdGUgKnIgPSBidWYtPnJl Y29yZDsKLQljaGFyCSAgICp0dXBsZWRhdGEgPSBOVUxMOwotCVNpemUJCXR1cGxlbGVuOwot CVNpemUJCWRhdGFsZW4gPSAwOwogCVRyYW5zYWN0aW9uSWQgeGlkID0gWExvZ1JlY0dldFhp ZChyKTsKIAl1aW50OAkJaW5mbyA9IFhMb2dSZWNHZXRJbmZvKGJ1Zi0+cmVjb3JkKSAmIH5Y TFJfSU5GT19NQVNLOwotCXhsX3NlcV9yZWMgKnhscmVjOworCXhsX2xvZ2ljYWxfc2VxdWVu Y2UgKnhscmVjOwogCVNuYXBzaG90CXNuYXBzaG90OwogCVJlcE9yaWdpbklkIG9yaWdpbl9p ZCA9IFhMb2dSZWNHZXRPcmlnaW4ocik7Ci0JYm9vbAkJdHJhbnNhY3Rpb25hbDsKKwlib29s CQl0cmFuc2FjdGlvbmFsID0gVHJhbnNhY3Rpb25JZElzVmFsaWQoeGlkKTsKIAogCS8qIG9u bHkgZGVjb2RlIGNoYW5nZXMgZmxhZ2dlZCB3aXRoIFhMT0dfU0VRX0xPRyAqLwotCWlmIChp bmZvICE9IFhMT0dfU0VRX0xPRykKKwlpZiAoaW5mbyAhPSBYTE9HX0xPR0lDQUxfU0VRVUVO Q0UpCiAJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIFJNX1NFUV9JRCByZWNvcmQgdHlwZTog JXUiLCBpbmZvKTsKIAogCS8qCkBAIC0xMzkwLDggKzEzNzksMTEgQEAgRGVjb2RlU2VxdWVu Y2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYp CiAJCWN0eC0+ZmFzdF9mb3J3YXJkKQogCQlyZXR1cm47CiAKKwkvKiBleHRyYWN0IHRoZSBX QUwgcmVjb3JkLCB3aXRoICJjcmVhdGVkIiBmbGFnICovCisJeGxyZWMgPSAoeGxfbG9naWNh bF9zZXF1ZW5jZSAqKSBYTG9nUmVjR2V0RGF0YShyKTsKKwogCS8qIG9ubHkgaW50ZXJlc3Rl ZCBpbiBvdXIgZGF0YWJhc2UgKi8KLQlYTG9nUmVjR2V0QmxvY2tUYWcociwgMCwgJnRhcmdl dF9ub2RlLCBOVUxMLCBOVUxMKTsKKwl0YXJnZXRfbm9kZSA9IHhscmVjLT5ub2RlOwogCWlm ICh0YXJnZXRfbm9kZS5kYk5vZGUgIT0gY3R4LT5zbG90LT5kYXRhLmRhdGFiYXNlKQogCQly ZXR1cm47CiAKQEAgLTEzOTksNDQgKzEzOTEsMTggQEAgRGVjb2RlU2VxdWVuY2UoTG9naWNh bERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpCiAJaWYgKEZp bHRlckJ5T3JpZ2luKGN0eCwgWExvZ1JlY0dldE9yaWdpbihyKSkpCiAJCXJldHVybjsKIAot CXR1cGxlZGF0YSA9IFhMb2dSZWNHZXREYXRhKHIpOwotCWRhdGFsZW4gPSBYTG9nUmVjR2V0 RGF0YUxlbihyKTsKLQl0dXBsZWxlbiA9IGRhdGFsZW4gLSBTaXplT2ZIZWFwSGVhZGVyIC0g c2l6ZW9mKHhsX3NlcV9yZWMpOwotCi0JLyogZXh0cmFjdCB0aGUgV0FMIHJlY29yZCwgd2l0 aCAiY3JlYXRlZCIgZmxhZyAqLwotCXhscmVjID0gKHhsX3NlcV9yZWMgKikgWExvZ1JlY0dl dERhdGEocik7Ci0KLQkvKiBYWFggaG93IGNvdWxkIHdlIGhhdmUgc2VxdWVuY2UgY2hhbmdl IHdpdGhvdXQgZGF0YT8gKi8KLQlpZighZGF0YWxlbiB8fCAhdHVwbGVkYXRhKQotCQlyZXR1 cm47Ci0KLQl0dXBsZWJ1ZiA9IFJlb3JkZXJCdWZmZXJHZXRUdXBsZUJ1ZihjdHgtPnJlb3Jk ZXIsIHR1cGxlbGVuKTsKLQlEZWNvZGVTZXFUdXBsZSh0dXBsZWRhdGEsIGRhdGFsZW4sIHR1 cGxlYnVmKTsKLQotCS8qCi0JICogU2hvdWxkIHdlIGhhbmRsZSB0aGUgc2VxdWVuY2UgaW5j cmVtZW50IGFzIHRyYW5zYWN0aW9uYWwgb3Igbm90PwotCSAqCi0JICogSWYgdGhlIHNlcXVl bmNlIHdhcyBjcmVhdGVkIGluIGEgc3RpbGwtcnVubmluZyB0cmFuc2FjdGlvbiwgdHJlYXQK LQkgKiBpdCBhcyB0cmFuc2FjdGlvbmFsIGFuZCBxdWV1ZSB0aGUgaW5jcmVtZW50cy4gT3Ro ZXJ3aXNlIGl0IG5lZWRzCi0JICogdG8gYmUgdHJlYXRlZCBhcyBub24tdHJhbnNhY3Rpb25h bCwgaW4gd2hpY2ggY2FzZSB3ZSBzZW5kIGl0IHRvCi0JICogdGhlIHBsdWdpbiByaWdodCBh d2F5LgotCSAqLwotCXRyYW5zYWN0aW9uYWwgPSBSZW9yZGVyQnVmZmVyU2VxdWVuY2VJc1Ry YW5zYWN0aW9uYWwoY3R4LT5yZW9yZGVyLAotCQkJCQkJCQkJCQkJCQkgdGFyZ2V0X25vZGUs Ci0JCQkJCQkJCQkJCQkJCSB4bHJlYy0+Y3JlYXRlZCk7Ci0KIAkvKiBTa2lwIHRoZSBjaGFu Z2UgaWYgYWxyZWFkeSBwcm9jZXNzZWQgKHBlciB0aGUgc25hcHNob3QpLiAqLwogCWlmICh0 cmFuc2FjdGlvbmFsICYmCiAJCSFTbmFwQnVpbGRQcm9jZXNzQ2hhbmdlKGJ1aWxkZXIsIHhp ZCwgYnVmLT5vcmlncHRyKSkKIAkJcmV0dXJuOwogCWVsc2UgaWYgKCF0cmFuc2FjdGlvbmFs ICYmCiAJCQkgKFNuYXBCdWlsZEN1cnJlbnRTdGF0ZShidWlsZGVyKSAhPSBTTkFQQlVJTERf Q09OU0lTVEVOVCB8fAotCQkJICBTbmFwQnVpbGRYYWN0TmVlZHNTa2lwKGJ1aWxkZXIsIGJ1 Zi0+b3JpZ3B0cikpKQorCQkJIFNuYXBCdWlsZFhhY3ROZWVkc1NraXAoYnVpbGRlciwgYnVm LT5vcmlncHRyKSkpCiAJCXJldHVybjsKIAogCS8qIFF1ZXVlIHRoZSBpbmNyZW1lbnQgKG9y IHNlbmQgaW1tZWRpYXRlbHkgaWYgbm90IHRyYW5zYWN0aW9uYWwpLiAqLwogCXNuYXBzaG90 ID0gU25hcEJ1aWxkR2V0T3JCdWlsZFNuYXBzaG90KGJ1aWxkZXIsIHhpZCk7CiAJUmVvcmRl ckJ1ZmZlclF1ZXVlU2VxdWVuY2UoY3R4LT5yZW9yZGVyLCB4aWQsIHNuYXBzaG90LCBidWYt PmVuZHB0ciwKLQkJCQkJCQkgICBvcmlnaW5faWQsIHRhcmdldF9ub2RlLCB0cmFuc2FjdGlv bmFsLAotCQkJCQkJCSAgIHhscmVjLT5jcmVhdGVkLCB0dXBsZWJ1Zik7CisJCQkJCQkJICAg b3JpZ2luX2lkLCB4bHJlYy0+cmVsb2lkLCB0YXJnZXRfbm9kZSwKKwkJCQkJCQkgICB4bHJl Yy0+bGFzdCwgeGxyZWMtPmxvZ19jbnQsIHhscmVjLT5pc19jYWxsZWQpOwogfQpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9tZXNzYWdlLmMgYi9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL21lc3NhZ2UuYwppbmRleCA5M2JkMzcyNDIx Li4zZjBhYzU3ZmM2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL21lc3NhZ2UuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL21l c3NhZ2UuYwpAQCAtODEsNyArODEsOCBAQCBsb2dpY2FsbXNnX3JlZG8oWExvZ1JlYWRlclN0 YXRlICpyZWNvcmQpCiB7CiAJdWludDgJCWluZm8gPSBYTG9nUmVjR2V0SW5mbyhyZWNvcmQp ICYgflhMUl9JTkZPX01BU0s7CiAKLQlpZiAoaW5mbyAhPSBYTE9HX0xPR0lDQUxfTUVTU0FH RSkKKwlpZiAoaW5mbyAhPSBYTE9HX0xPR0lDQUxfTUVTU0FHRSAmJgorCQlpbmZvICE9IFhM T0dfTE9HSUNBTF9TRVFVRU5DRSkKIAkJZWxvZyhQQU5JQywgImxvZ2ljYWxtc2dfcmVkbzog dW5rbm93biBvcCBjb2RlICV1IiwgaW5mbyk7CiAKIAkvKiBUaGlzIGlzIG9ubHkgaW50ZXJl c3RpbmcgZm9yIGxvZ2ljYWwgZGVjb2RpbmcsIHNlZSBkZWNvZGUuYy4gKi8KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jIGIv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMKaW5kZXgg NDM0OTI2NDU5Zi4uMWQ5YTM5YWM0YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMKQEAgLTU2OSwxNyArNTY5LDExIEBAIFJl b3JkZXJCdWZmZXJSZXR1cm5DaGFuZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZm ZXJDaGFuZ2UgKmNoYW5nZSwKIAkJCQljaGFuZ2UtPmRhdGEudHJ1bmNhdGUucmVsaWRzID0g TlVMTDsKIAkJCX0KIAkJCWJyZWFrOwotCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9T RVFVRU5DRToKLQkJCWlmIChjaGFuZ2UtPmRhdGEuc2VxdWVuY2UudHVwbGUpCi0JCQl7Ci0J CQkJUmVvcmRlckJ1ZmZlclJldHVyblR1cGxlQnVmKHJiLCBjaGFuZ2UtPmRhdGEuc2VxdWVu Y2UudHVwbGUpOwotCQkJCWNoYW5nZS0+ZGF0YS5zZXF1ZW5jZS50dXBsZSA9IE5VTEw7Ci0J CQl9Ci0JCQlicmVhazsKIAkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfSU5URVJOQUxf U1BFQ19DT05GSVJNOgogCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlRFUk5BTF9T UEVDX0FCT1JUOgogCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlRFUk5BTF9DT01N QU5EX0lEOgogCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlRFUk5BTF9UVVBMRUNJ RDoKKwkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfU0VRVUVOQ0U6CiAJCQlicmVhazsK IAl9CiAKQEAgLTk3Myw5ICs5NjcsMTAgQEAgUmVvcmRlckJ1ZmZlclNlcXVlbmNlQ2xlYW51 cChSZW9yZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQpCiB2b2lkCiBSZW9yZGVy QnVmZmVyUXVldWVTZXF1ZW5jZShSZW9yZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4 aWQsCiAJCQkJCQkgICBTbmFwc2hvdCBzbmFwc2hvdCwgWExvZ1JlY1B0ciBsc24sIFJlcE9y aWdpbklkIG9yaWdpbl9pZCwKLQkJCQkJCSAgIFJlbEZpbGVOb2RlIHJub2RlLCBib29sIHRy YW5zYWN0aW9uYWwsIGJvb2wgY3JlYXRlZCwKLQkJCQkJCSAgIFJlb3JkZXJCdWZmZXJUdXBs ZUJ1ZiAqdHVwbGVidWYpCisJCQkJCQkgICBPaWQgcmVsb2lkLCBSZWxGaWxlTm9kZSBybm9k ZSwgaW50NjQgbGFzdCwgaW50NjQgbG9nX2NudCwgYm9vbCBpc19jYWxsZWQpCiB7CisJYm9v bCB0cmFuc2FjdGlvbmFsID0gVHJhbnNhY3Rpb25JZElzVmFsaWQoeGlkKTsKKwogCS8qCiAJ ICogQ2hhbmdlIG5lZWRzIHRvIGJlIGhhbmRsZWQgYXMgdHJhbnNhY3Rpb25hbCwgYmVjYXVz ZSB0aGUgc2VxdWVuY2Ugd2FzCiAJICogY3JlYXRlZCBpbiBhIHRyYW5zYWN0aW9uIHRoYXQg aXMgc3RpbGwgcnVubmluZy4gSW4gdGhhdCBjYXNlIGFsbCB0aGUKQEAgLTk5MiwzOCArOTg3 LDYgQEAgUmVvcmRlckJ1ZmZlclF1ZXVlU2VxdWVuY2UoUmVvcmRlckJ1ZmZlciAqcmIsIFRy YW5zYWN0aW9uSWQgeGlkLAogCQlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CiAJCVJlb3Jk ZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZTsKIAotCQkvKiBsb29rdXAgc2VxdWVuY2UgYnkgcmVs ZmlsZW5vZGUgKi8KLQkJUmVvcmRlckJ1ZmZlclNlcXVlbmNlRW50ICAgKmVudDsKLQkJYm9v bAkJCQkJCWZvdW5kOwotCi0JCS8qIHRyYW5zYWN0aW9uYWwgY2hhbmdlcyByZXF1aXJlIGEg dHJhbnNhY3Rpb24gKi8KLQkJQXNzZXJ0KHhpZCAhPSBJbnZhbGlkVHJhbnNhY3Rpb25JZCk7 Ci0KLQkJLyogc2VhcmNoIHRoZSBsb29rdXAgdGFibGUgKHdlIGlnbm9yZSB0aGUgcmV0dXJu IHZhbHVlLCBmb3VuZCBpcyBlbm91Z2gpICovCi0JCWVudCA9IGhhc2hfc2VhcmNoKHJiLT5z ZXF1ZW5jZXMsCi0JCQkJCQkgICh2b2lkICopICZybm9kZSwKLQkJCQkJCSAgY3JlYXRlZCA/ IEhBU0hfRU5URVIgOiBIQVNIX0ZJTkQsCi0JCQkJCQkgICZmb3VuZCk7Ci0KLQkJLyoKLQkJ ICogSWYgdGhpcyBpcyB0aGUgImNyZWF0ZSIgaW5jcmVtZW50LCB3ZSBtdXN0IG5vdCBoYXZl IGZvdW5kIGFueQotCQkgKiBwcmUtZXhpc3RpbmcgZW50cnkgaW4gdGhlIGhhc2ggdGFibGUg KGkuZS4gdGhlcmUgbXVzdCBub3QgYmUKLQkJICogYW55IGNvbmZsaWN0aW5nIHNlcXVlbmNl KS4KLQkJICovCi0JCUFzc2VydCghKGNyZWF0ZWQgJiYgZm91bmQpKTsKLQotCQkvKiBCdXQg d2UgbXVzdCBoYXZlIGVpdGhlciBjcmVhdGVkIG9yIGZvdW5kIGFuIGV4aXN0aW5nIGVudHJ5 LiAqLwotCQlBc3NlcnQoY3JlYXRlZCB8fCBmb3VuZCk7Ci0KLQkJLyoKLQkJICogV2hlbiBj cmVhdGluZyB0aGUgc2VxdWVuY2UsIHJlbWVtYmVyIHRoZSBYSUQgb2YgdGhlIHRyYW5zYWN0 aW9uCi0JCSAqIHRoYXQgY3JlYXRlZCBpZC4KLQkJICovCi0JCWlmIChjcmVhdGVkKQotCQkJ ZW50LT54aWQgPSB4aWQ7Ci0KLQkJLyogWFhYIE1heWJlIGNoZWNrIHRoYXQgd2UncmUgc3Rp bGwgaW4gdGhlIHNhbWUgdG9wLWxldmVsIHhhY3Q/ICovCi0KIAkJLyogT0ssIGFsbG9jYXRl IGFuZCBxdWV1ZSB0aGUgY2hhbmdlICovCiAJCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0 U3dpdGNoVG8ocmItPmNvbnRleHQpOwogCkBAIC0xMDM0LDM4ICs5OTcsMjYgQEAgUmVvcmRl ckJ1ZmZlclF1ZXVlU2VxdWVuY2UoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQg eGlkLAogCiAJCW1lbWNweSgmY2hhbmdlLT5kYXRhLnNlcXVlbmNlLnJlbG5vZGUsICZybm9k ZSwgc2l6ZW9mKFJlbEZpbGVOb2RlKSk7CiAKLQkJY2hhbmdlLT5kYXRhLnNlcXVlbmNlLmNy ZWF0ZWQgPSBjcmVhdGVkOwotCQljaGFuZ2UtPmRhdGEuc2VxdWVuY2UudHVwbGUgPSB0dXBs ZWJ1ZjsKKwkJY2hhbmdlLT5kYXRhLnNlcXVlbmNlLnJlbG9pZCA9IHJlbG9pZDsKKwkJY2hh bmdlLT5kYXRhLnNlcXVlbmNlLmxhc3QgPSBsYXN0OworCQljaGFuZ2UtPmRhdGEuc2VxdWVu Y2UubG9nX2NudCA9IGxvZ19jbnQ7CisJCWNoYW5nZS0+ZGF0YS5zZXF1ZW5jZS5pc19jYWxs ZWQgPSBpc19jYWxsZWQ7CiAKIAkJLyogYWRkIGl0IHRvIHRoZSBzYW1lIHN1YnhhY3QgdGhh dCBjcmVhdGVkIHRoZSBzZXF1ZW5jZSAqLwotCQlSZW9yZGVyQnVmZmVyUXVldWVDaGFuZ2Uo cmIsIGVudC0+eGlkLCBsc24sIGNoYW5nZSwgZmFsc2UpOworCQlSZW9yZGVyQnVmZmVyUXVl dWVDaGFuZ2UocmIsIHhpZCwgbHNuLCBjaGFuZ2UsIGZhbHNlKTsKIAogCQlNZW1vcnlDb250 ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CiAJfQogCWVsc2UKIAl7CiAJCS8qCi0JCSAqIFRo aXMgaW5jcmVtZW50IGlzIGZvciBhIHNlcXVlbmNlIHRoYXQgd2FzIG5vdCBjcmVhdGVkIGlu IGFueQotCQkgKiBydW5uaW5nIHRyYW5zYWN0aW9uLCBzbyB3ZSB0cmVhdCBpdCBhcyBub24t dHJhbnNhY3Rpb25hbCBhbmQKLQkJICoganVzdCBzZW5kIGl0IHRvIHRoZSBvdXRwdXQgcGx1 Z2luIGRpcmVjdGx5LgotCQkgKi8KKwkJKiBUaGlzIGluY3JlbWVudCBpcyBmb3IgYSBzZXF1 ZW5jZSB0aGF0IHdhcyBub3QgY3JlYXRlZCBpbiBhbnkKKwkJKiBydW5uaW5nIHRyYW5zYWN0 aW9uLCBzbyB3ZSB0cmVhdCBpdCBhcyBub24tdHJhbnNhY3Rpb25hbCBhbmQKKwkJKiBqdXN0 IHNlbmQgaXQgdG8gdGhlIG91dHB1dCBwbHVnaW4gZGlyZWN0bHkuCisJCSovCiAJCVJlb3Jk ZXJCdWZmZXJUWE4gKnR4biA9IE5VTEw7CiAJCXZvbGF0aWxlIFNuYXBzaG90IHNuYXBzaG90 X25vdyA9IHNuYXBzaG90OwotCQlib29sCXVzaW5nX3N1YnR4bjsKLQotI2lmZGVmIFVTRV9B U1NFUlRfQ0hFQ0tJTkcKLQkJLyogQWxsICJjcmVhdGVzIiBoYXZlIHRvIGJlIGhhbmRsZWQg YXMgdHJhbnNhY3Rpb25hbC4gKi8KLQkJQXNzZXJ0KCFjcmVhdGVkKTsKLQotCQkvKiBNYWtl IHN1cmUgdGhlIHNlcXVlbmNlIGlzIG5vdCBpbiB0aGUgaGFzaCB0YWJsZS4gKi8KLQkJewot CQkJYm9vbAlmb3VuZDsKLQkJCWhhc2hfc2VhcmNoKHJiLT5zZXF1ZW5jZXMsCi0JCQkJCQko dm9pZCAqKSAmcm5vZGUsCi0JCQkJCQlIQVNIX0ZJTkQsICZmb3VuZCk7Ci0JCQlBc3NlcnQo IWZvdW5kKTsKLQkJfQotI2VuZGlmCisJCWJvb2wgICAgdXNpbmdfc3VidHhuOwogCiAJCWlm ICh4aWQgIT0gSW52YWxpZFRyYW5zYWN0aW9uSWQpCiAJCQl0eG4gPSBSZW9yZGVyQnVmZmVy VFhOQnlYaWQocmIsIHhpZCwgdHJ1ZSwgTlVMTCwgbHNuLCB0cnVlKTsKQEAgLTEwNzQsNDAg KzEwMjUsMzUgQEAgUmVvcmRlckJ1ZmZlclF1ZXVlU2VxdWVuY2UoUmVvcmRlckJ1ZmZlciAq cmIsIFRyYW5zYWN0aW9uSWQgeGlkLAogCQlTZXR1cEhpc3RvcmljU25hcHNob3Qoc25hcHNo b3Rfbm93LCBOVUxMKTsKIAogCQkvKgotCQkgKiBEZWNvZGluZyBuZWVkcyBhY2Nlc3MgdG8g c3lzY2FjaGVzIGV0IGFsLiwgd2hpY2ggaW4gdHVybiB1c2UKLQkJICogaGVhdnl3ZWlnaHQg bG9ja3MgYW5kIHN1Y2guIFRodXMgd2UgbmVlZCB0byBoYXZlIGVub3VnaCBzdGF0ZSBhcm91 bmQgdG8KLQkJICoga2VlcCB0cmFjayBvZiB0aG9zZS4gIFRoZSBlYXNpZXN0IHdheSBpcyB0 byBzaW1wbHkgdXNlIGEgdHJhbnNhY3Rpb24KLQkJICogaW50ZXJuYWxseS4gIFRoYXQgYWxz byBhbGxvd3MgdXMgdG8gZWFzaWx5IGVuZm9yY2UgdGhhdCBub3RoaW5nIHdyaXRlcwotCQkg KiB0byB0aGUgZGF0YWJhc2UgYnkgY2hlY2tpbmcgZm9yIHhpZCBhc3NpZ25tZW50cy4KLQkJ ICoKLQkJICogV2hlbiB3ZSdyZSBjYWxsZWQgdmlhIHRoZSBTUUwgU1JGIHRoZXJlJ3MgYWxy ZWFkeSBhIHRyYW5zYWN0aW9uCi0JCSAqIHN0YXJ0ZWQsIHNvIHN0YXJ0IGFuIGV4cGxpY2l0 IHN1YnRyYW5zYWN0aW9uIHRoZXJlLgotCQkgKi8KKwkJKiBEZWNvZGluZyBuZWVkcyBhY2Nl c3MgdG8gc3lzY2FjaGVzIGV0IGFsLiwgd2hpY2ggaW4gdHVybiB1c2UKKwkJKiBoZWF2eXdl aWdodCBsb2NrcyBhbmQgc3VjaC4gVGh1cyB3ZSBuZWVkIHRvIGhhdmUgZW5vdWdoIHN0YXRl IGFyb3VuZCB0bworCQkqIGtlZXAgdHJhY2sgb2YgdGhvc2UuICBUaGUgZWFzaWVzdCB3YXkg aXMgdG8gc2ltcGx5IHVzZSBhIHRyYW5zYWN0aW9uCisJCSogaW50ZXJuYWxseS4gIFRoYXQg YWxzbyBhbGxvd3MgdXMgdG8gZWFzaWx5IGVuZm9yY2UgdGhhdCBub3RoaW5nIHdyaXRlcwor CQkqIHRvIHRoZSBkYXRhYmFzZSBieSBjaGVja2luZyBmb3IgeGlkIGFzc2lnbm1lbnRzLgor CQkqCisJCSogV2hlbiB3ZSdyZSBjYWxsZWQgdmlhIHRoZSBTUUwgU1JGIHRoZXJlJ3MgYWxy ZWFkeSBhIHRyYW5zYWN0aW9uCisJCSogc3RhcnRlZCwgc28gc3RhcnQgYW4gZXhwbGljaXQg c3VidHJhbnNhY3Rpb24gdGhlcmUuCisJCSovCiAJCXVzaW5nX3N1YnR4biA9IElzVHJhbnNh Y3Rpb25PclRyYW5zYWN0aW9uQmxvY2soKTsKIAogCQlQR19UUlkoKTsKIAkJewogCQkJUmVs YXRpb24JcmVsYXRpb247Ci0JCQlIZWFwVHVwbGUJdHVwbGU7Ci0JCQlib29sCQlpc251bGw7 Ci0JCQlpbnQ2NAkJbGFzdF92YWx1ZSwgbG9nX2NudDsKLQkJCWJvb2wJCWlzX2NhbGxlZDsK LQkJCU9pZAkJCXJlbG9pZDsKKy8vCQkJT2lkCQkJcmVsb2lkOwogCiAJCQlpZiAodXNpbmdf c3VidHhuKQogCQkJCUJlZ2luSW50ZXJuYWxTdWJUcmFuc2FjdGlvbigic2VxdWVuY2UiKTsK IAkJCWVsc2UKIAkJCQlTdGFydFRyYW5zYWN0aW9uQ29tbWFuZCgpOwotCisvKgogCQkJcmVs b2lkID0gUmVsaWRCeVJlbGZpbGVub2RlKHJub2RlLnNwY05vZGUsIHJub2RlLnJlbE5vZGUp OwogCiAJCQlpZiAocmVsb2lkID09IEludmFsaWRPaWQpCiAJCQkJZWxvZyhFUlJPUiwgImNv dWxkIG5vdCBtYXAgZmlsZW5vZGUgXCIlc1wiIHRvIHJlbGF0aW9uIE9JRCIsCi0JCQkJCSBy ZWxwYXRocGVybShybm9kZSwKLQkJCQkJCQkJIE1BSU5fRk9SS05VTSkpOwotCisJCQkJCXJl bHBhdGhwZXJtKHJub2RlLAorCQkJCQkJCQlNQUlOX0ZPUktOVU0pKTsKKyovCiAJCQlyZWxh dGlvbiA9IFJlbGF0aW9uSWRHZXRSZWxhdGlvbihyZWxvaWQpOwotCQkJdHVwbGUgPSAmdHVw bGVidWYtPnR1cGxlOwogCiAJCQkvKgogCQkJICogRXh0cmFjdCB0aGUgaW50ZXJuYWwgc2Vx dWVuY2UgdmFsdWVzLCBkZXNjcmliaW5nIHRoZSBzdGF0ZS4KQEAgLTExMTUsMTIgKzEwNjEs OCBAQCBSZW9yZGVyQnVmZmVyUXVldWVTZXF1ZW5jZShSZW9yZGVyQnVmZmVyICpyYiwgVHJh bnNhY3Rpb25JZCB4aWQsCiAJCQkgKiBYWFggU2VlbXMgYSBiaXQgc3RyYW5nZSB0byBhY2Nl c3MgaXQgZGlyZWN0bHkuIE1heWJlIHRoZXJlJ3MKIAkJCSAqIGEgYmV0dGVyIC8gbW9yZSBj b3JyZWN0IHdheT8KIAkJCSAqLwotCQkJbGFzdF92YWx1ZSA9IGhlYXBfZ2V0YXR0cih0dXBs ZSwgMSwgUmVsYXRpb25HZXREZXNjcihyZWxhdGlvbiksICZpc251bGwpOwotCQkJbG9nX2Nu dCA9IGhlYXBfZ2V0YXR0cih0dXBsZSwgMiwgUmVsYXRpb25HZXREZXNjcihyZWxhdGlvbiks ICZpc251bGwpOwotCQkJaXNfY2FsbGVkID0gaGVhcF9nZXRhdHRyKHR1cGxlLCAzLCBSZWxh dGlvbkdldERlc2NyKHJlbGF0aW9uKSwgJmlzbnVsbCk7Ci0KLQkJCXJiLT5zZXF1ZW5jZShy YiwgdHhuLCBsc24sIHJlbGF0aW9uLCB0cmFuc2FjdGlvbmFsLCBjcmVhdGVkLAotCQkJCQkJ IGxhc3RfdmFsdWUsIGxvZ19jbnQsIGlzX2NhbGxlZCk7CisJCQlyYi0+c2VxdWVuY2UocmIs IHR4biwgbHNuLCByZWxhdGlvbiwgdHJhbnNhY3Rpb25hbCwgZmFsc2UsCisJCQkJCQlsYXN0 LCBsb2dfY250LCBpc19jYWxsZWQpOwogCiAJCQlSZWxhdGlvbkNsb3NlKHJlbGF0aW9uKTsK IApAQCAtMjI0OCwzMSArMjE5MCwyNyBAQCBSZW9yZGVyQnVmZmVyQXBwbHlTZXF1ZW5jZShS ZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQkJICAgUmVs YXRpb24gcmVsYXRpb24sIFJlb3JkZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZSwKIAkJCQkJCSAg IGJvb2wgc3RyZWFtaW5nKQogewotCUhlYXBUdXBsZQl0dXBsZTsKLQlib29sCQlpc251bGw7 CiAJaW50NjQJCWxhc3RfdmFsdWUsIGxvZ19jbnQ7CiAJYm9vbAkJaXNfY2FsbGVkOwogCi0J dHVwbGUgPSAmY2hhbmdlLT5kYXRhLnNlcXVlbmNlLnR1cGxlLT50dXBsZTsKLQogCS8qCiAJ ICogRXh0cmFjdCB0aGUgaW50ZXJuYWwgc2VxdWVuY2UgdmFsdWVzLCBkZXNjcmliaW5nIHRo ZSBzdGF0ZS4KIAkgKgogCSAqIFhYWCBTZWVtcyBhIGJpdCBzdHJhbmdlIHRvIGFjY2VzcyBp dCBkaXJlY3RseS4gTWF5YmUgdGhlcmUncwogCSAqIGEgYmV0dGVyIC8gbW9yZSBjb3JyZWN0 IHdheT8KIAkgKi8KLQlsYXN0X3ZhbHVlID0gaGVhcF9nZXRhdHRyKHR1cGxlLCAxLCBSZWxh dGlvbkdldERlc2NyKHJlbGF0aW9uKSwgJmlzbnVsbCk7Ci0JbG9nX2NudCA9IGhlYXBfZ2V0 YXR0cih0dXBsZSwgMiwgUmVsYXRpb25HZXREZXNjcihyZWxhdGlvbiksICZpc251bGwpOwot CWlzX2NhbGxlZCA9IGhlYXBfZ2V0YXR0cih0dXBsZSwgMywgUmVsYXRpb25HZXREZXNjcihy ZWxhdGlvbiksICZpc251bGwpOworCWxhc3RfdmFsdWUgPSBjaGFuZ2UtPmRhdGEuc2VxdWVu Y2UubGFzdDsKKwlsb2dfY250ID0gY2hhbmdlLT5kYXRhLnNlcXVlbmNlLmxvZ19jbnQ7CisJ aXNfY2FsbGVkID0gY2hhbmdlLT5kYXRhLnNlcXVlbmNlLmlzX2NhbGxlZDsKIAogCS8qIE9u bHkgZXZlciBjYWxsZWQgZnJvbSBSZW9yZGVyQnVmZmVyQXBwbHlTZXF1ZW5jZSwgc28gdHJh bnNhdGlvbmFsLiAqLwogCWlmIChzdHJlYW1pbmcpCiAJCXJiLT5zdHJlYW1fc2VxdWVuY2Uo cmIsIHR4biwgY2hhbmdlLT5sc24sIHJlbGF0aW9uLCB0cnVlLAotCQkJCQkJCWNoYW5nZS0+ ZGF0YS5zZXF1ZW5jZS5jcmVhdGVkLAorCQkJCQkJCWZhbHNlLAkvKiBGSVhNRSAqLwogCQkJ CQkJCWxhc3RfdmFsdWUsIGxvZ19jbnQsIGlzX2NhbGxlZCk7CiAJZWxzZQogCQlyYi0+c2Vx dWVuY2UocmIsIHR4biwgY2hhbmdlLT5sc24sIHJlbGF0aW9uLCB0cnVlLAotCQkJCQkgY2hh bmdlLT5kYXRhLnNlcXVlbmNlLmNyZWF0ZWQsCisJCQkJCSBmYWxzZSwJLyogRklYTUUgKi8K IAkJCQkJIGxhc3RfdmFsdWUsIGxvZ19jbnQsIGlzX2NhbGxlZCk7CiB9CiAKQEAgLTI3MjIs MTUgKzI2NjAsMTcgQEAgUmVvcmRlckJ1ZmZlclByb2Nlc3NUWE4oUmVvcmRlckJ1ZmZlciAq cmIsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQljYXNlIFJFT1JERVJfQlVGRkVSX0NI QU5HRV9TRVFVRU5DRToKIAkJCQkJQXNzZXJ0KHNuYXBzaG90X25vdyk7CiAKKwkJCQkJLyoK IAkJCQkJcmVsb2lkID0gUmVsaWRCeVJlbGZpbGVub2RlKGNoYW5nZS0+ZGF0YS5zZXF1ZW5j ZS5yZWxub2RlLnNwY05vZGUsCiAJCQkJCQkJCQkJCQljaGFuZ2UtPmRhdGEuc2VxdWVuY2Uu cmVsbm9kZS5yZWxOb2RlKTsKIAogCQkJCQlpZiAocmVsb2lkID09IEludmFsaWRPaWQpCi0J CQkJCQllbG9nKEVSUk9SLCAiY291bGQgbm90IG1hcCBmaWxlbm9kZSBcIiVzXCIgdG8gcmVs YXRpb24gT0lEIiwKKwkJCQkJCWVsb2coRVJST1IsICJ6eiBjb3VsZCBub3QgbWFwIGZpbGVu b2RlIFwiJXNcIiB0byByZWxhdGlvbiBPSUQiLAogCQkJCQkJCSByZWxwYXRocGVybShjaGFu Z2UtPmRhdGEuc2VxdWVuY2UucmVsbm9kZSwKIAkJCQkJCQkJCQkgTUFJTl9GT1JLTlVNKSk7 CiAKLQkJCQkJcmVsYXRpb24gPSBSZWxhdGlvbklkR2V0UmVsYXRpb24ocmVsb2lkKTsKKwkJ CQkJKi8KKwkJCQkJcmVsYXRpb24gPSBSZWxhdGlvbklkR2V0UmVsYXRpb24oY2hhbmdlLT5k YXRhLnNlcXVlbmNlLnJlbG9pZCk7CiAKIAkJCQkJaWYgKCFSZWxhdGlvbklzVmFsaWQocmVs YXRpb24pKQogCQkJCQkJZWxvZyhFUlJPUiwgImNvdWxkIG5vdCBvcGVuIHJlbGF0aW9uIHdp dGggT0lEICV1IChmb3IgZmlsZW5vZGUgXCIlc1wiKSIsCkBAIC00MTI3LDQ1ICs0MDY3LDEz IEBAIFJlb3JkZXJCdWZmZXJTZXJpYWxpemVDaGFuZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFJl b3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQltZW1jcHkoZGF0YSwgY2hhbmdlLT5kYXRhLnRy dW5jYXRlLnJlbGlkcywgc2l6ZSk7CiAJCQkJZGF0YSArPSBzaXplOwogCi0JCQkJYnJlYWs7 Ci0JCQl9Ci0JCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX1NFUVVFTkNFOgotCQkJewot CQkJCWNoYXIJICAgKmRhdGE7Ci0JCQkJUmVvcmRlckJ1ZmZlclR1cGxlQnVmICp0dXA7Ci0J CQkJU2l6ZQkJbGVuID0gMDsKLQotCQkJCXR1cCA9IGNoYW5nZS0+ZGF0YS5zZXF1ZW5jZS50 dXBsZTsKLQotCQkJCWlmICh0dXApCi0JCQkJewotCQkJCQlzeiArPSBzaXplb2YoSGVhcFR1 cGxlRGF0YSk7Ci0JCQkJCWxlbiA9IHR1cC0+dHVwbGUudF9sZW47Ci0JCQkJCXN6ICs9IGxl bjsKLQkJCQl9Ci0KLQkJCQkvKiBtYWtlIHN1cmUgd2UgaGF2ZSBlbm91Z2ggc3BhY2UgKi8K LQkJCQlSZW9yZGVyQnVmZmVyU2VyaWFsaXplUmVzZXJ2ZShyYiwgc3opOwotCi0JCQkJZGF0 YSA9ICgoY2hhciAqKSByYi0+b3V0YnVmKSArIHNpemVvZihSZW9yZGVyQnVmZmVyRGlza0No YW5nZSk7Ci0JCQkJLyogbWlnaHQgaGF2ZSBiZWVuIHJlYWxsb2NhdGVkIGFib3ZlICovCi0J CQkJb25kaXNrID0gKFJlb3JkZXJCdWZmZXJEaXNrQ2hhbmdlICopIHJiLT5vdXRidWY7Ci0K LQkJCQlpZiAobGVuKQotCQkJCXsKLQkJCQkJbWVtY3B5KGRhdGEsICZ0dXAtPnR1cGxlLCBz aXplb2YoSGVhcFR1cGxlRGF0YSkpOwotCQkJCQlkYXRhICs9IHNpemVvZihIZWFwVHVwbGVE YXRhKTsKLQotCQkJCQltZW1jcHkoZGF0YSwgdHVwLT50dXBsZS50X2RhdGEsIGxlbik7Ci0J CQkJCWRhdGEgKz0gbGVuOwotCQkJCX0KLQogCQkJCWJyZWFrOwogCQkJfQogCQljYXNlIFJF T1JERVJfQlVGRkVSX0NIQU5HRV9JTlRFUk5BTF9TUEVDX0NPTkZJUk06CiAJCWNhc2UgUkVP UkRFUl9CVUZGRVJfQ0hBTkdFX0lOVEVSTkFMX1NQRUNfQUJPUlQ6CiAJCWNhc2UgUkVPUkRF Ul9CVUZGRVJfQ0hBTkdFX0lOVEVSTkFMX0NPTU1BTkRfSUQ6CiAJCWNhc2UgUkVPUkRFUl9C VUZGRVJfQ0hBTkdFX0lOVEVSTkFMX1RVUExFQ0lEOgorCQljYXNlIFJFT1JERVJfQlVGRkVS X0NIQU5HRV9TRVFVRU5DRToKIAkJCS8qIFJlb3JkZXJCdWZmZXJDaGFuZ2UgY29udGFpbnMg ZXZlcnl0aGluZyBpbXBvcnRhbnQgKi8KIAkJCWJyZWFrOwogCX0KQEAgLTQ0MjQsMjggKzQz MzIsMTMgQEAgUmVvcmRlckJ1ZmZlckNoYW5nZVNpemUoUmVvcmRlckJ1ZmZlckNoYW5nZSAq Y2hhbmdlKQogCQkJewogCQkJCXN6ICs9IHNpemVvZihPaWQpICogY2hhbmdlLT5kYXRhLnRy dW5jYXRlLm5yZWxpZHM7CiAKLQkJCQlicmVhazsKLQkJCX0KLQkJY2FzZSBSRU9SREVSX0JV RkZFUl9DSEFOR0VfU0VRVUVOQ0U6Ci0JCQl7Ci0JCQkJUmVvcmRlckJ1ZmZlclR1cGxlQnVm ICp0dXA7Ci0JCQkJU2l6ZQkJbGVuID0gMDsKLQotCQkJCXR1cCA9IGNoYW5nZS0+ZGF0YS5z ZXF1ZW5jZS50dXBsZTsKLQotCQkJCWlmICh0dXApCi0JCQkJewotCQkJCQlzeiArPSBzaXpl b2YoSGVhcFR1cGxlRGF0YSk7Ci0JCQkJCWxlbiA9IHR1cC0+dHVwbGUudF9sZW47Ci0JCQkJ CXN6ICs9IGxlbjsKLQkJCQl9Ci0KIAkJCQlicmVhazsKIAkJCX0KIAkJY2FzZSBSRU9SREVS X0JVRkZFUl9DSEFOR0VfSU5URVJOQUxfU1BFQ19DT05GSVJNOgogCQljYXNlIFJFT1JERVJf QlVGRkVSX0NIQU5HRV9JTlRFUk5BTF9TUEVDX0FCT1JUOgogCQljYXNlIFJFT1JERVJfQlVG RkVSX0NIQU5HRV9JTlRFUk5BTF9DT01NQU5EX0lEOgogCQljYXNlIFJFT1JERVJfQlVGRkVS X0NIQU5HRV9JTlRFUk5BTF9UVVBMRUNJRDoKKwkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFO R0VfU0VRVUVOQ0U6CiAJCQkvKiBSZW9yZGVyQnVmZmVyQ2hhbmdlIGNvbnRhaW5zIGV2ZXJ5 dGhpbmcgaW1wb3J0YW50ICovCiAJCQlicmVhazsKIAl9CkBAIC00NzQyLDMzICs0NjM1LDEx IEBAIFJlb3JkZXJCdWZmZXJSZXN0b3JlQ2hhbmdlKFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9y ZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJYnJlYWs7CiAJCQl9CiAKLQkJY2FzZSBSRU9SREVS X0JVRkZFUl9DSEFOR0VfU0VRVUVOQ0U6Ci0JCQlpZiAoY2hhbmdlLT5kYXRhLnNlcXVlbmNl LnR1cGxlKQotCQkJewotCQkJCXVpbnQzMgkJdHVwbGVsZW4gPSAoKEhlYXBUdXBsZSkgZGF0 YSktPnRfbGVuOwotCi0JCQkJY2hhbmdlLT5kYXRhLnNlcXVlbmNlLnR1cGxlID0KLQkJCQkJ UmVvcmRlckJ1ZmZlckdldFR1cGxlQnVmKHJiLCB0dXBsZWxlbiAtIFNpemVvZkhlYXBUdXBs ZUhlYWRlcik7Ci0KLQkJCQkvKiByZXN0b3JlIC0+dHVwbGUgKi8KLQkJCQltZW1jcHkoJmNo YW5nZS0+ZGF0YS5zZXF1ZW5jZS50dXBsZS0+dHVwbGUsIGRhdGEsCi0JCQkJCSAgIHNpemVv ZihIZWFwVHVwbGVEYXRhKSk7Ci0JCQkJZGF0YSArPSBzaXplb2YoSGVhcFR1cGxlRGF0YSk7 Ci0KLQkJCQkvKiByZXNldCB0X2RhdGEgcG9pbnRlciBpbnRvIHRoZSBuZXcgdHVwbGVidWYg Ki8KLQkJCQljaGFuZ2UtPmRhdGEuc2VxdWVuY2UudHVwbGUtPnR1cGxlLnRfZGF0YSA9Ci0J CQkJCVJlb3JkZXJCdWZmZXJUdXBsZUJ1ZkRhdGEoY2hhbmdlLT5kYXRhLnNlcXVlbmNlLnR1 cGxlKTsKLQotCQkJCS8qIHJlc3RvcmUgdHVwbGUgZGF0YSBpdHNlbGYgKi8KLQkJCQltZW1j cHkoY2hhbmdlLT5kYXRhLnNlcXVlbmNlLnR1cGxlLT50dXBsZS50X2RhdGEsIGRhdGEsIHR1 cGxlbGVuKTsKLQkJCQlkYXRhICs9IHR1cGxlbGVuOwotCQkJfQotCQkJYnJlYWs7Ci0KIAkJ Y2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfSU5URVJOQUxfU1BFQ19DT05GSVJNOgogCQlj YXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlRFUk5BTF9TUEVDX0FCT1JUOgogCQljYXNl IFJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlRFUk5BTF9DT01NQU5EX0lEOgogCQljYXNlIFJF T1JERVJfQlVGRkVSX0NIQU5HRV9JTlRFUk5BTF9UVVBMRUNJRDoKKwkJY2FzZSBSRU9SREVS X0JVRkZFUl9DSEFOR0VfU0VRVUVOQ0U6CiAJCQlicmVhazsKIAl9CiAKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmggYi9zcmMvaW5jbHVkZS9jb21tYW5k cy9zZXF1ZW5jZS5oCmluZGV4IDU5MTlmYjkwZWUuLmRkYjM2YjViMTcgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmgKKysrIGIvc3JjL2luY2x1ZGUvY29t bWFuZHMvc2VxdWVuY2UuaApAQCAtNjIsNiArNjIsOCBAQCBleHRlcm4gdm9pZCBEZWxldGVT ZXF1ZW5jZVR1cGxlKE9pZCByZWxpZCk7CiBleHRlcm4gdm9pZCBSZXNldFNlcXVlbmNlKE9p ZCBzZXFfcmVsaWQpOwogZXh0ZXJuIHZvaWQgUmVzZXRTZXF1ZW5jZUNhY2hlcyh2b2lkKTsK IAorZXh0ZXJuIHZvaWQgQXRFT1hhY3RfU2VxdWVuY2VzKGJvb2wgaXNDb21taXQpOworCiBl eHRlcm4gdm9pZCBzZXFfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJwdHIpOwogZXh0ZXJuIHZv aWQgc2VxX2Rlc2MoU3RyaW5nSW5mbyBidWYsIFhMb2dSZWFkZXJTdGF0ZSAqcnB0cik7CiBl eHRlcm4gY29uc3QgY2hhciAqc2VxX2lkZW50aWZ5KHVpbnQ4IGluZm8pOwpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbWVzc2FnZS5oIGIvc3JjL2luY2x1ZGUvcmVw bGljYXRpb24vbWVzc2FnZS5oCmluZGV4IGQzZmIzMjRjODEuLmEzOWU4ZTk4NGQgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL21lc3NhZ2UuaAorKysgYi9zcmMvaW5j bHVkZS9yZXBsaWNhdGlvbi9tZXNzYWdlLmgKQEAgLTI3LDEzICsyNywyOCBAQCB0eXBlZGVm IHN0cnVjdCB4bF9sb2dpY2FsX21lc3NhZ2UKIAljaGFyCQltZXNzYWdlW0ZMRVhJQkxFX0FS UkFZX01FTUJFUl07CiB9IHhsX2xvZ2ljYWxfbWVzc2FnZTsKIAorLyoKKyAqIEdlbmVyaWMg bG9naWNhbCBkZWNvZGluZyBzZXF1ZW5jZSB3YWwgcmVjb3JkLgorICovCit0eXBlZGVmIHN0 cnVjdCB4bF9sb2dpY2FsX3NlcXVlbmNlCit7CisJUmVsRmlsZU5vZGUJbm9kZTsKKwlPaWQJ CQlyZWxvaWQ7CisJaW50NjQJCWxhc3Q7CQkJLyogbGFzdCB2YWx1ZSBlbWl0dGVkIGZvciBz ZXF1ZW5jZSAqLworCWludDY0CQlsb2dfY250OwkJLyogbGFzdCB2YWx1ZSBjYWNoZWQgZm9y IHNlcXVlbmNlICovCisJYm9vbAkJaXNfY2FsbGVkOworfSB4bF9sb2dpY2FsX3NlcXVlbmNl OworCiAjZGVmaW5lIFNpemVPZkxvZ2ljYWxNZXNzYWdlCShvZmZzZXRvZih4bF9sb2dpY2Fs X21lc3NhZ2UsIG1lc3NhZ2UpKQorI2RlZmluZSBTaXplT2ZMb2dpY2FsU2VxdWVuY2UJKHNp emVvZih4bF9sb2dpY2FsX3NlcXVlbmNlKSkKIAogZXh0ZXJuIFhMb2dSZWNQdHIgTG9nTG9n aWNhbE1lc3NhZ2UoY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICptZXNzYWdlLAog CQkJCQkJCQkJc2l6ZV90IHNpemUsIGJvb2wgdHJhbnNhY3Rpb25hbCk7CiAKIC8qIFJNR1Ig QVBJKi8KICNkZWZpbmUgWExPR19MT0dJQ0FMX01FU1NBR0UJMHgwMAorI2RlZmluZSBYTE9H X0xPR0lDQUxfU0VRVUVOQ0UJMHgxMAorCiB2b2lkCQlsb2dpY2FsbXNnX3JlZG8oWExvZ1Jl YWRlclN0YXRlICpyZWNvcmQpOwogdm9pZAkJbG9naWNhbG1zZ19kZXNjKFN0cmluZ0luZm8g YnVmLCBYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCk7CiBjb25zdCBjaGFyICpsb2dpY2FsbXNn X2lkZW50aWZ5KHVpbnQ4IGluZm8pOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGlj YXRpb24vcmVvcmRlcmJ1ZmZlci5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRl cmJ1ZmZlci5oCmluZGV4IDYzZTZlZDAzN2IuLmViNzhkNWRmZjQgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaAorKysgYi9zcmMvaW5jbHVk ZS9yZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmgKQEAgLTE2NCw4ICsxNjQsMTAgQEAgdHlw ZWRlZiBzdHJ1Y3QgUmVvcmRlckJ1ZmZlckNoYW5nZQogCQlzdHJ1Y3QKIAkJewogCQkJUmVs RmlsZU5vZGUgcmVsbm9kZTsKLQkJCWJvb2wJCWNyZWF0ZWQ7Ci0JCQlSZW9yZGVyQnVmZmVy VHVwbGVCdWYgKnR1cGxlOworCQkJT2lkCQkJcmVsb2lkOworCQkJaW50NjQJCWxhc3Q7CisJ CQlpbnQ2NAkJbG9nX2NudDsKKwkJCWJvb2wJCWlzX2NhbGxlZDsKIAkJfQkJCXNlcXVlbmNl OwogCX0JCQlkYXRhOwogCkBAIC02NzIsOCArNjc0LDggQEAgdm9pZAkJUmVvcmRlckJ1ZmZl clF1ZXVlTWVzc2FnZShSZW9yZGVyQnVmZmVyICosIFRyYW5zYWN0aW9uSWQsIFNuYXBzaG90 IHNuYXBzaG8KIAkJCQkJCQkJCSAgU2l6ZSBtZXNzYWdlX3NpemUsIGNvbnN0IGNoYXIgKm1l c3NhZ2UpOwogdm9pZAkJUmVvcmRlckJ1ZmZlclF1ZXVlU2VxdWVuY2UoUmVvcmRlckJ1ZmZl ciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLAogCQkJCQkJCQkJICAgU25hcHNob3Qgc25hcHNo b3QsIFhMb2dSZWNQdHIgbHNuLCBSZXBPcmlnaW5JZCBvcmlnaW5faWQsCi0JCQkJCQkJCQkg ICBSZWxGaWxlTm9kZSBybm9kZSwgYm9vbCB0cmFuc2FjdGlvbmFsLCBib29sIGNyZWF0ZWQs Ci0JCQkJCQkJCQkgICBSZW9yZGVyQnVmZmVyVHVwbGVCdWYgKnR1cGxlYnVmKTsKKwkJCQkJ CQkJCSAgIE9pZCByZWxvaWQsIFJlbEZpbGVOb2RlIHJub2RlLAorCQkJCQkJCQkJICAgaW50 NjQgbGFzdCwgaW50NjQgbG9nX2NudCwgYm9vbCBpc19jYWxsZWQpOwogdm9pZAkJUmVvcmRl ckJ1ZmZlckNvbW1pdChSZW9yZGVyQnVmZmVyICosIFRyYW5zYWN0aW9uSWQsCiAJCQkJCQkJ CVhMb2dSZWNQdHIgY29tbWl0X2xzbiwgWExvZ1JlY1B0ciBlbmRfbHNuLAogCQkJCQkJCQlU aW1lc3RhbXBUeiBjb21taXRfdGltZSwgUmVwT3JpZ2luSWQgb3JpZ2luX2lkLCBYTG9nUmVj UHRyIG9yaWdpbl9sc24pOwotLSAKMi4zMS4xCgo= --------------PSu0kcrJZId8sBgRJ9Ec0YQG Content-Type: text/x-patch; charset=UTF-8; name="0001-Logical-decoding-of-sequences-20211118.patch" Content-Disposition: attachment; filename="0001-Logical-decoding-of-sequences-20211118.patch" Content-Transfer-Encoding: base64 RnJvbSBlNjFhN2M5OTk0MTMzZDFhMGRjMjVjMzY5YzAyNjIwNTYwMmIzMzE0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogRnJpLCAyNCBTZXAgMjAyMSAwMDo0MTozMyArMDIwMApTdWJq ZWN0OiBbUEFUQ0ggMS80XSBMb2dpY2FsIGRlY29kaW5nIG9mIHNlcXVlbmNlcwoKVGhpcyBh ZGRzIHRoZSBpbmZyYXN0cnVjdHVyZSBmb3IgbG9naWNhbCBkZWNvZGluZyBvZiBzZXF1ZW5j ZXMuIFN1cHBvcnQKZm9yIGJ1aWx0LWluIGxvZ2ljYWwgcmVwbGljYXRpb24gYW5kIHRlc3Rf ZGVjb2RpbmcgaXMgYWRkZWQgc2VwYXJhdGVseS4KCldoZW4gZGVjb2Rpbmcgc2VxdWVuY2Vz LCB3ZSBkaWZmZXJlbnRpYXRlIGJldHdlZW4gYSBzZXF1ZW5jZXMgY3JlYXRlZCBpbgphIChy dW5uaW5nKSB0cmFuc2FjdGlvbiwgYW5kIHNlcXVlbmNlcyBjcmVhdGVkIGluIG90aGVyIChh bHJlYWR5CmNvbW1pdHRlZCkgdHJhbnNhY3Rpb25zLiBDaGFuZ2VzIGZvciBzZXF1ZW5jZXMg Y3JlYXRlZCBpbiB0aGUgc2FtZQp0b3AtbGV2ZWwgdHJhbnNhY3Rpb24gYXJlIHRyZWF0ZWQg YXMgInRyYW5zYWN0aW9uYWwiIGkuZS4ganVzdCBsaWtlIGFueQpvdGhlciBjaGFuZ2UgZnJv bSB0aGF0IHRyYW5zYWN0aW9uIChhbmQgZGlzY2FyZGVkIGluIGNhc2Ugb2YgYQpyb2xsYmFj aykuIENoYW5nZXMgZm9yIHNlcXVlbmNlcyBjcmVhdGVkIGVhcmxpZXIgYXJlIHRyZWF0ZWQg YXMgbm90CnRyYW5zYWN0aW9uYWwgLSBhcmUgcHJvY2Vzc2VkIGltbWVkaWF0ZWx5LCBhcyBp ZiBwZXJmb3JtZWQgb3V0c2lkZSBhbnkKdHJhbnNhY3Rpb24gKGFuZCB0aHVzIG5vdCByb2xs ZWQgYmFjaykuCgpUaGlzIG1peGVkIGJlaGF2aW9yIGlzIG5lY2Vzc2FyeSAtIHNlcXVlbmNl cyBhcmUgbm9uLXRyYW5zYWN0aW9uYWwgKGUuZy4KUk9MTEJBQ0sgZG9lcyBub3QgdW5kbyB0 aGUgc2VxdWVuY2UgaW5jcmVtZW50cykuIEJ1dCBmb3IgbmV3IHNlcXVlbmNlcywKd2UgbmVl ZCB0byBoYW5kbGUgdGhlbSBpbiBhIHRyYW5zYWN0aW9uYWwgd2F5LCBiZWNhdXNlIGlmIHdl IGV2ZXIgZ2V0CnNvbWUgRERMIHN1cHBvcnQsIHRoZSBzZXF1ZW5jZSB3b24ndCBleGlzdCB1 bnRpbCB0aGUgdHJhbnNhY3Rpb24gZ2V0cwphcHBsaWVkLiBTbyB3ZSBuZWVkIHRvIGVuc3Vy ZSB0aGUgaW5jcmVtZW50cyBkb24ndCBoYXBwZW4gdW50aWwgdGhlCnNlcXVlbmNlIGdldHMg Y3JlYXRlZC4KClRvIGRpZmZlcmVudGlhdGUgd2hpY2ggc2VxdWVuY2VzIGFyZSAib2xkIiBh bmQgd2hpY2ggd2VyZSBjcmVhdGVkIGluIGEKc3RpbGwtcnVubmluZyB0cmFuc2FjdGlvbiwg d2UgdHJhY2sgc2VxdWVuY2VzIGNyZWF0ZWQgaW4gcnVubmluZwp0cmFuc2FjdGlvbnMgaW4g YSBoYXNoIHRhYmxlLiBFYWNoIHNlcXVlbmNlIGlzIGlkZW50aWZpZWQgYnkgaXQncwpyZWxm aWxlbm9kZSwgYW5kIGF0IHRyYW5zYWN0aW9uIGNvbW1pdCB3ZSBkaXNjYXJkIGFsbCBzZXF1 ZW5jZXMgY3JlYXRlZAppbiB0aGF0IHBhcnRpY3VsYXIgdHJhbnNhY3Rpb24uIEZvciBlYWNo IHNlcXVlbmNlIHdlIHRyYWNrIHRoZSBYSUQgb2YKdGhlIChzdWIpdHJhbnNhY3Rpb24gdGhh dCBjcmVhdGVkIGl0LCBhbmQgd2UgY2xlYW51cCB0aGUgc2VxdWVuY2VzIGZvcgplYWNoIHN1 YnRyYW5zYWN0aW9uIHdoZW4gaXQgY29tcGxldGVzIChjb21taXQvcm9sbGJhY2spLgoKV2Ug ZG9uJ3QgdXNlIHRoZSBYSUQgdG8gY2hlY2sgaWYgaXQncyB0aGUgc2FtZSB0b3AtbGV2ZWwg dHJhbnNhY3Rpb24uCkl0J3MgZW5vdWdoIHRvIGtub3cgaXQgd2FzIGNyZWF0ZWQgaW4gYW4g aW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb24sIGFuZCB3ZQprbm93IGl0IG11c3QgYmUgdGhlIGN1 cnJlbnQgb25lIGJlY2F1c2Ugb3RoZXJ3aXNlIGl0IHdvdWxkbid0IHNlZSB0aGUKc2VxdWVu Y2Ugb2JqZWN0LgoKVGhlIG1haW4gY2hhbmdlcyBpbiB0aGlzIHBhdGNoIGFyZToKCjEpIGVu c3VyZSBXQUwtbG9nZ2luZyBvZiBhbGwgbmVjZXNzYXJ5IGluZm8gZm9yIHNlcXVlbmNlIGFk dmFuY2VzCgpXZSBuZWVkIHRvIGJlIGFibGUgdG8gYXNzb2NpYXRlIHRoZSBhZHZhbmNlIHdp dGggYSBYSUQsIGJ1dCB1bnRpbCBub3cKc2VxdWVuY2UgYWR2YW5jZSBtaWdodCBoYXZlIFhJ RCAwIGlmIGl0IHdhcyB0aGUgZmlyc3QgdGhpbmcgdGhlCnRyYW5zYWN0aW9uIGRpZC4gU28g d2UgZW5zdXJlIHRoZSB0cmFuc2FjdGlvbiBoYXMgWElELgoKTm90ZTogVGhpcyBpcyBuZWVk ZWQgYmVjYXVzZSBvZiBzdWJ4YWN0cy4gQSBYSUQgMCBtaWdodCBzdGlsbCBoYXZlIHRoZQpz ZXF1ZW5jZSBjcmVhdGVkIGluIGEgZGlmZmVyZW50IHN1YnhhY3Qgb2YgdGhlIHNhbWUgdG9w LWxldmVsIHhhY3QuCgpUaGVuIHRoZXJlJ3MgYSAiY3JlYXRlZCIgZmxhZyBhZGRlZCB0byB0 aGUgeGxfc2VxX3JlYywgd2hpY2ggaXMKbmVjZXNzYXJ5IHRvIGRpZmZlcmVudGlhdGUgV0FM IGZvciBjcmVhdGVkL3Jlc2V0IHNlcXVlbmNlcy4KCjIpIGRlY29kaW5nIC8gcXVldWVpbmcg b2Ygc2VxdWVuY2VzIGludG8gUmVvcmRlckJ1ZmZlcgoKVGhpcyBpcyBtb3N0bHkgY29weS1w YXN0ZSBvZiBleGlzdGluZyBjb2RlIGZvciBvdGhlciBkZWNvZGVkIGV2ZW50cy4KCjMpIHRy YWNraW5nIHNlcXVlbmNlcyBjcmVhdGVkIGluIGluLXByb2dyZXNzIHRyYW5zYWN0aW9ucwoK V2UgdXNlIGEgc2ltcGxlIGhhc2ggdGFibGUsIGluZGV4ZWQgYnkgcmVsZmlsZW5vZGUuCi0t LQogc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYyAgICAgICAgICAgICAgIHwgIDgz ICsrKy0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMgICAgICB8 IDEzMSArKysrKy0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5j ICAgICB8ICA4OSArKysrCiAuLi4vcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVy LmMgICAgICAgfCA0MjQgKysrKysrKysrKysrKysrKysrCiBzcmMvaW5jbHVkZS9jb21tYW5k cy9zZXF1ZW5jZS5oICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvcmVwbGlj YXRpb24vb3V0cHV0X3BsdWdpbi5oICAgICAgIHwgIDI5ICsrCiBzcmMvaW5jbHVkZS9yZXBs aWNhdGlvbi9yZW9yZGVyYnVmZmVyLmggICAgICAgfCAgNDQgKy0KIDcgZmlsZXMgY2hhbmdl ZCwgNzkzIGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3Nl cXVlbmNlLmMKaW5kZXggNzJiZmRjMDdhNC4uYTk4ZmNjMmU5NyAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5k cy9zZXF1ZW5jZS5jCkBAIC05NCw3ICs5NCw3IEBAIHN0YXRpYyBIVEFCICpzZXFoYXNodGFi ID0gTlVMTDsgLyogaGFzaCB0YWJsZSBmb3IgU2VxVGFibGUgaXRlbXMgKi8KICAqLwogc3Rh dGljIFNlcVRhYmxlRGF0YSAqbGFzdF91c2VkX3NlcSA9IE5VTEw7CiAKLXN0YXRpYyB2b2lk IGZpbGxfc2VxX3dpdGhfZGF0YShSZWxhdGlvbiByZWwsIEhlYXBUdXBsZSB0dXBsZSk7Citz dGF0aWMgdm9pZCBmaWxsX3NlcV93aXRoX2RhdGEoUmVsYXRpb24gcmVsLCBIZWFwVHVwbGUg dHVwbGUsIGJvb2wgY3JlYXRlKTsKIHN0YXRpYyBSZWxhdGlvbiBsb2NrX2FuZF9vcGVuX3Nl cXVlbmNlKFNlcVRhYmxlIHNlcSk7CiBzdGF0aWMgdm9pZCBjcmVhdGVfc2VxX2hhc2h0YWJs ZSh2b2lkKTsKIHN0YXRpYyB2b2lkIGluaXRfc2VxdWVuY2UoT2lkIHJlbGlkLCBTZXFUYWJs ZSAqcF9lbG0sIFJlbGF0aW9uICpwX3JlbCk7CkBAIC0yMjIsNyArMjIyLDcgQEAgRGVmaW5l U2VxdWVuY2UoUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVTZXFTdG10ICpzZXEpCiAKIAkv KiBub3cgaW5pdGlhbGl6ZSB0aGUgc2VxdWVuY2UncyBkYXRhICovCiAJdHVwbGUgPSBoZWFw X2Zvcm1fdHVwbGUodHVwRGVzYywgdmFsdWUsIG51bGwpOwotCWZpbGxfc2VxX3dpdGhfZGF0 YShyZWwsIHR1cGxlKTsKKwlmaWxsX3NlcV93aXRoX2RhdGEocmVsLCB0dXBsZSwgdHJ1ZSk7 CiAKIAkvKiBwcm9jZXNzIE9XTkVEIEJZIGlmIGdpdmVuICovCiAJaWYgKG93bmVkX2J5KQpA QCAtMzI3LDcgKzMyNyw3IEBAIFJlc2V0U2VxdWVuY2UoT2lkIHNlcV9yZWxpZCkKIAkvKgog CSAqIEluc2VydCB0aGUgbW9kaWZpZWQgdHVwbGUgaW50byB0aGUgbmV3IHN0b3JhZ2UgZmls ZS4KIAkgKi8KLQlmaWxsX3NlcV93aXRoX2RhdGEoc2VxX3JlbCwgdHVwbGUpOworCWZpbGxf c2VxX3dpdGhfZGF0YShzZXFfcmVsLCB0dXBsZSwgdHJ1ZSk7CiAKIAkvKiBDbGVhciBsb2Nh bCBjYWNoZSBzbyB0aGF0IHdlIGRvbid0IHRoaW5rIHdlIGhhdmUgY2FjaGVkIG51bWJlcnMg Ki8KIAkvKiBOb3RlIHRoYXQgd2UgZG8gbm90IGNoYW5nZSB0aGUgY3VycnZhbCgpIHN0YXRl ICovCkBAIC0zNDAsNyArMzQwLDcgQEAgUmVzZXRTZXF1ZW5jZShPaWQgc2VxX3JlbGlkKQog ICogSW5pdGlhbGl6ZSBhIHNlcXVlbmNlJ3MgcmVsYXRpb24gd2l0aCB0aGUgc3BlY2lmaWVk IHR1cGxlIGFzIGNvbnRlbnQKICAqLwogc3RhdGljIHZvaWQKLWZpbGxfc2VxX3dpdGhfZGF0 YShSZWxhdGlvbiByZWwsIEhlYXBUdXBsZSB0dXBsZSkKK2ZpbGxfc2VxX3dpdGhfZGF0YShS ZWxhdGlvbiByZWwsIEhlYXBUdXBsZSB0dXBsZSwgYm9vbCBjcmVhdGUpCiB7CiAJQnVmZmVy CQlidWY7CiAJUGFnZQkJcGFnZTsKQEAgLTM3OCw4ICszNzgsMzEgQEAgZmlsbF9zZXFfd2l0 aF9kYXRhKFJlbGF0aW9uIHJlbCwgSGVhcFR1cGxlIHR1cGxlKQogCiAJLyogY2hlY2sgdGhl IGNvbW1lbnQgYWJvdmUgbmV4dHZhbF9pbnRlcm5hbCgpJ3MgZXF1aXZhbGVudCBjYWxsLiAq LwogCWlmIChSZWxhdGlvbk5lZWRzV0FMKHJlbCkpCisJewogCQlHZXRUb3BUcmFuc2FjdGlv bklkKCk7CiAKKwkJLyoKKwkJICogRW5zdXJlIHdlIGhhdmUgYSBwcm9wZXIgWElELCB3aGlj aCB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBYTE9HCisJCSAqIHJlY29yZCBieSBYTG9nUmVj b3JkQXNzZW1ibGUuIE90aGVyd2lzZSB0aGUgZmlyc3QgbmV4dHZhbCgpIGluCisJCSAqIGEg c3VieGFjdCAod2l0aG91dCBhbnkgcHJlY2VkaW5nIGNoYW5nZXMpIHdvdWxkIGdldCBYSUQg MCwKKwkJICogYW5kIGl0J2QgYmUgaW1wb3NzaWJsZSB0byBkZWNpZGUgd2hpY2ggdG9wIHhh Y3QgaXQgYmVsb25ncyB0by4KKwkJICogSXQnZCBhbHNvIHRyaWdnZXIgYXNzZXJ0IGluIERl Y29kZVNlcXVlbmNlLgorCQkgKgorCQkgKiBYWFggVGhpcyBtaWdodCBzZWVtIHVubmVjZXNz YXJ5LCBiZWNhdXNlIGlmIHRoZXJlJ3Mgbm8gWElEIHRoZQorCQkgKiB0cmFuc2FjdGlvbiBj b3VsZG4ndCBoYXZlIGRvbmUgYW55dGhpbmcgaW1wb3J0YW50IHlldCwgZS5nLiBpdAorCQkg KiBjb3VsZCBub3QgaGF2ZSBjcmVhdGVkIGEgc2VxdWVuY2UuIEJ1dCB0aGF0J3MgaW5jb3Jy ZWN0LCBhcyBpdAorCQkgKiBpZ25vcmVzIHN1YnRyYW5zYWN0aW9ucy4gVGhlIGN1cnJlbnQg c3VidHJhbnNhY3Rpb24gbWlnaHQgbm90CisJCSAqIGhhdmUgZG9uZSBhbnl0aGluZyB5ZXQg KHRodXMgbm8gWElEKSwgYnV0IGFuIGVhcmxpZXIgb25lIG1pZ2h0CisJCSAqIGhhdmUgY3Jl YXRlZCB0aGUgc2VxdWVuY2UuCisJCSAqCisJCSAqIFhYWCBOb3Qgc3VyZSBpZiB0aGlzIGlz IHRoZSBiZXN0IHNvbHV0aW9uLiBNYXliZSBkbyB0aGlzIG9ubHkKKwkJICogd2l0aCB3YWxf bGV2ZWw9bG9naWNhbCB0byBtaW5pbWl6ZSB0aGUgb3ZlcmhlYWQuIE9UT0ggYWR2YW5jaW5n CisJCSAqIHRoZSBzZXF1ZW5jZSBpcyBsaWtlbHkgZm9sbG93ZWQgYnkgdXNpbmcgdGhlIHZh bHVlKHMpIGZvciBzb21lCisJCSAqIG90aGVyIGFjdGl2aXR5LCB3aGljaCBhc3NpZ25zIHRo ZSBYSUQuCisJCSAqLworCQlHZXRDdXJyZW50VHJhbnNhY3Rpb25JZCgpOworCX0KKwogCVNU QVJUX0NSSVRfU0VDVElPTigpOwogCiAJTWFya0J1ZmZlckRpcnR5KGJ1Zik7CkBAIC0zOTks NiArNDIyLDcgQEAgZmlsbF9zZXFfd2l0aF9kYXRhKFJlbGF0aW9uIHJlbCwgSGVhcFR1cGxl IHR1cGxlKQogCQlYTG9nUmVnaXN0ZXJCdWZmZXIoMCwgYnVmLCBSRUdCVUZfV0lMTF9JTklU KTsKIAogCQl4bHJlYy5ub2RlID0gcmVsLT5yZF9ub2RlOworCQl4bHJlYy5jcmVhdGVkID0g Y3JlYXRlOwogCiAJCVhMb2dSZWdpc3RlckRhdGEoKGNoYXIgKikgJnhscmVjLCBzaXplb2Yo eGxfc2VxX3JlYykpOwogCQlYTG9nUmVnaXN0ZXJEYXRhKChjaGFyICopIHR1cGxlLT50X2Rh dGEsIHR1cGxlLT50X2xlbik7CkBAIC01MDIsNyArNTI2LDcgQEAgQWx0ZXJTZXF1ZW5jZShQ YXJzZVN0YXRlICpwc3RhdGUsIEFsdGVyU2VxU3RtdCAqc3RtdCkKIAkJLyoKIAkJICogSW5z ZXJ0IHRoZSBtb2RpZmllZCB0dXBsZSBpbnRvIHRoZSBuZXcgc3RvcmFnZSBmaWxlLgogCQkg Ki8KLQkJZmlsbF9zZXFfd2l0aF9kYXRhKHNlcXJlbCwgbmV3ZGF0YXR1cGxlKTsKKwkJZmls bF9zZXFfd2l0aF9kYXRhKHNlcXJlbCwgbmV3ZGF0YXR1cGxlLCB0cnVlKTsKIAl9CiAKIAkv KiBwcm9jZXNzIE9XTkVEIEJZIGlmIGdpdmVuICovCkBAIC03NjYsOCArNzkwLDMxIEBAIG5l eHR2YWxfaW50ZXJuYWwoT2lkIHJlbGlkLCBib29sIGNoZWNrX3Blcm1pc3Npb25zKQogCSAq IChIYXZlIHRvIGRvIHRoYXQgaGVyZSwgc28gd2UncmUgb3V0c2lkZSB0aGUgY3JpdGljYWwg c2VjdGlvbikKIAkgKi8KIAlpZiAobG9naXQgJiYgUmVsYXRpb25OZWVkc1dBTChzZXFyZWwp KQorCXsKIAkJR2V0VG9wVHJhbnNhY3Rpb25JZCgpOwogCisJCS8qCisJCSAqIEVuc3VyZSB3 ZSBoYXZlIGEgcHJvcGVyIFhJRCwgd2hpY2ggd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgWExP RworCQkgKiByZWNvcmQgYnkgWExvZ1JlY29yZEFzc2VtYmxlLiBPdGhlcndpc2UgdGhlIGZp cnN0IG5leHR2YWwoKSBpbgorCQkgKiBhIHN1YnhhY3QgKHdpdGhvdXQgYW55IHByZWNlZGlu ZyBjaGFuZ2VzKSB3b3VsZCBnZXQgWElEIDAsCisJCSAqIGFuZCBpdCdkIGJlIGltcG9zc2li bGUgdG8gZGVjaWRlIHdoaWNoIHRvcCB4YWN0IGl0IGJlbG9uZ3MgdG8uCisJCSAqIEl0J2Qg YWxzbyB0cmlnZ2VyIGFzc2VydCBpbiBEZWNvZGVTZXF1ZW5jZS4KKwkJICoKKwkJICogWFhY IFRoaXMgbWlnaHQgc2VlbSB1bm5lY2Vzc2FyeSwgYmVjYXVzZSBpZiB0aGVyZSdzIG5vIFhJ RCB0aGUKKwkJICogdHJhbnNhY3Rpb24gY291bGRuJ3QgaGF2ZSBkb25lIGFueXRoaW5nIGlt cG9ydGFudCB5ZXQsIGUuZy4gaXQKKwkJICogY291bGQgbm90IGhhdmUgY3JlYXRlZCBhIHNl cXVlbmNlLiBCdXQgdGhhdCdzIGluY29ycmVjdCwgYXMgaXQKKwkJICogaWdub3JlcyBzdWJ0 cmFuc2FjdGlvbnMuIFRoZSBjdXJyZW50IHN1YnRyYW5zYWN0aW9uIG1pZ2h0IG5vdAorCQkg KiBoYXZlIGRvbmUgYW55dGhpbmcgeWV0ICh0aHVzIG5vIFhJRCksIGJ1dCBhbiBlYXJsaWVy IG9uZSBtaWdodAorCQkgKiBoYXZlIGNyZWF0ZWQgdGhlIHNlcXVlbmNlLgorCQkgKgorCQkg KiBYWFggTm90IHN1cmUgaWYgdGhpcyBpcyB0aGUgYmVzdCBzb2x1dGlvbi4gTWF5YmUgZG8g dGhpcyBvbmx5CisJCSAqIHdpdGggd2FsX2xldmVsPWxvZ2ljYWwgdG8gbWluaW1pemUgdGhl IG92ZXJoZWFkLiBPVE9IIGFkdmFuY2luZworCQkgKiB0aGUgc2VxdWVuY2UgaXMgbGlrZWx5 IGZvbGxvd2VkIGJ5IHVzaW5nIHRoZSB2YWx1ZShzKSBmb3Igc29tZQorCQkgKiBvdGhlciBh Y3Rpdml0eSwgd2hpY2ggYXNzaWducyB0aGUgWElELgorCQkgKi8KKwkJR2V0Q3VycmVudFRy YW5zYWN0aW9uSWQoKTsKKwl9CisKIAkvKiByZWFkeSB0byBjaGFuZ2UgdGhlIG9uLWRpc2sg KG9yIHJlYWxseSwgaW4tYnVmZmVyKSB0dXBsZSAqLwogCVNUQVJUX0NSSVRfU0VDVElPTigp OwogCkBAIC04MDMsNiArODUwLDcgQEAgbmV4dHZhbF9pbnRlcm5hbChPaWQgcmVsaWQsIGJv b2wgY2hlY2tfcGVybWlzc2lvbnMpCiAJCXNlcS0+bG9nX2NudCA9IDA7CiAKIAkJeGxyZWMu bm9kZSA9IHNlcXJlbC0+cmRfbm9kZTsKKwkJeGxyZWMuY3JlYXRlZCA9IGZhbHNlOwogCiAJ CVhMb2dSZWdpc3RlckRhdGEoKGNoYXIgKikgJnhscmVjLCBzaXplb2YoeGxfc2VxX3JlYykp OwogCQlYTG9nUmVnaXN0ZXJEYXRhKChjaGFyICopIHNlcWRhdGF0dXBsZS50X2RhdGEsIHNl cWRhdGF0dXBsZS50X2xlbik7CkBAIC05NzcsOCArMTAyNSwzMSBAQCBkb19zZXR2YWwoT2lk IHJlbGlkLCBpbnQ2NCBuZXh0LCBib29sIGlzY2FsbGVkKQogCiAJLyogY2hlY2sgdGhlIGNv bW1lbnQgYWJvdmUgbmV4dHZhbF9pbnRlcm5hbCgpJ3MgZXF1aXZhbGVudCBjYWxsLiAqLwog CWlmIChSZWxhdGlvbk5lZWRzV0FMKHNlcXJlbCkpCisJewogCQlHZXRUb3BUcmFuc2FjdGlv bklkKCk7CiAKKwkJLyoKKwkJICogRW5zdXJlIHdlIGhhdmUgYSBwcm9wZXIgWElELCB3aGlj aCB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBYTE9HCisJCSAqIHJlY29yZCBieSBYTG9nUmVj b3JkQXNzZW1ibGUuIE90aGVyd2lzZSB0aGUgZmlyc3QgbmV4dHZhbCgpIGluCisJCSAqIGEg c3VieGFjdCAod2l0aG91dCBhbnkgcHJlY2VkaW5nIGNoYW5nZXMpIHdvdWxkIGdldCBYSUQg MCwKKwkJICogYW5kIGl0J2QgYmUgaW1wb3NzaWJsZSB0byBkZWNpZGUgd2hpY2ggdG9wIHhh Y3QgaXQgYmVsb25ncyB0by4KKwkJICogSXQnZCBhbHNvIHRyaWdnZXIgYXNzZXJ0IGluIERl Y29kZVNlcXVlbmNlLgorCQkgKgorCQkgKiBYWFggVGhpcyBtaWdodCBzZWVtIHVubmVjZXNz YXJ5LCBiZWNhdXNlIGlmIHRoZXJlJ3Mgbm8gWElEIHRoZQorCQkgKiB0cmFuc2FjdGlvbiBj b3VsZG4ndCBoYXZlIGRvbmUgYW55dGhpbmcgaW1wb3J0YW50IHlldCwgZS5nLiBpdAorCQkg KiBjb3VsZCBub3QgaGF2ZSBjcmVhdGVkIGEgc2VxdWVuY2UuIEJ1dCB0aGF0J3MgaW5jb3Jy ZWN0LCBhcyBpdAorCQkgKiBpZ25vcmVzIHN1YnRyYW5zYWN0aW9ucy4gVGhlIGN1cnJlbnQg c3VidHJhbnNhY3Rpb24gbWlnaHQgbm90CisJCSAqIGhhdmUgZG9uZSBhbnl0aGluZyB5ZXQg KHRodXMgbm8gWElEKSwgYnV0IGFuIGVhcmxpZXIgb25lIG1pZ2h0CisJCSAqIGhhdmUgY3Jl YXRlZCB0aGUgc2VxdWVuY2UuCisJCSAqCisJCSAqIFhYWCBOb3Qgc3VyZSBpZiB0aGlzIGlz IHRoZSBiZXN0IHNvbHV0aW9uLiBNYXliZSBkbyB0aGlzIG9ubHkKKwkJICogd2l0aCB3YWxf bGV2ZWw9bG9naWNhbCB0byBtaW5pbWl6ZSB0aGUgb3ZlcmhlYWQuIE9UT0ggYWR2YW5jaW5n CisJCSAqIHRoZSBzZXF1ZW5jZSBpcyBsaWtlbHkgZm9sbG93ZWQgYnkgdXNpbmcgdGhlIHZh bHVlKHMpIGZvciBzb21lCisJCSAqIG90aGVyIGFjdGl2aXR5LCB3aGljaCBhc3NpZ25zIHRo ZSBYSUQuCisJCSAqLworCQlHZXRDdXJyZW50VHJhbnNhY3Rpb25JZCgpOworCX0KKwogCS8q IHJlYWR5IHRvIGNoYW5nZSB0aGUgb24tZGlzayAob3IgcmVhbGx5LCBpbi1idWZmZXIpIHR1 cGxlICovCiAJU1RBUlRfQ1JJVF9TRUNUSU9OKCk7CiAKQEAgLTk5OSw2ICsxMDcwLDggQEAg ZG9fc2V0dmFsKE9pZCByZWxpZCwgaW50NjQgbmV4dCwgYm9vbCBpc2NhbGxlZCkKIAkJWExv Z1JlZ2lzdGVyQnVmZmVyKDAsIGJ1ZiwgUkVHQlVGX1dJTExfSU5JVCk7CiAKIAkJeGxyZWMu bm9kZSA9IHNlcXJlbC0+cmRfbm9kZTsKKwkJeGxyZWMuY3JlYXRlZCA9IGZhbHNlOworCiAJ CVhMb2dSZWdpc3RlckRhdGEoKGNoYXIgKikgJnhscmVjLCBzaXplb2YoeGxfc2VxX3JlYykp OwogCQlYTG9nUmVnaXN0ZXJEYXRhKChjaGFyICopIHNlcWRhdGF0dXBsZS50X2RhdGEsIHNl cWRhdGF0dXBsZS50X2xlbik7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL2xvZ2ljYWwvZGVjb2RlLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L2RlY29kZS5jCmluZGV4IGEyYjY5NTExYjQuLmI2MWYyZTI2NGEgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMKKysrIGIvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYwpAQCAtNDIsNiArNDIsNyBAQAogI2lu Y2x1ZGUgInJlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaCIKICNpbmNsdWRlICJyZXBsaWNh dGlvbi9zbmFwYnVpbGQuaCIKICNpbmNsdWRlICJzdG9yYWdlL3N0YW5kYnkuaCIKKyNpbmNs dWRlICJjb21tYW5kcy9zZXF1ZW5jZS5oIgogCiB0eXBlZGVmIHN0cnVjdCBYTG9nUmVjb3Jk QnVmZmVyCiB7CkBAIC03NCwxMCArNzUsMTEgQEAgc3RhdGljIHZvaWQgRGVjb2RlQWJvcnQo TG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYsCiAJ CQkJCQlib29sIHR3b19waGFzZSk7CiBzdGF0aWMgdm9pZCBEZWNvZGVQcmVwYXJlKExvZ2lj YWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmLAogCQkJCQkJ ICB4bF94YWN0X3BhcnNlZF9wcmVwYXJlICpwYXJzZWQpOwotCitzdGF0aWMgdm9pZCBEZWNv ZGVTZXF1ZW5jZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZm ZXIgKmJ1Zik7CiAKIC8qIGNvbW1vbiBmdW5jdGlvbiB0byBkZWNvZGUgdHVwbGVzICovCiBz dGF0aWMgdm9pZCBEZWNvZGVYTG9nVHVwbGUoY2hhciAqZGF0YSwgU2l6ZSBsZW4sIFJlb3Jk ZXJCdWZmZXJUdXBsZUJ1ZiAqdHVwKTsKK3N0YXRpYyB2b2lkIERlY29kZVNlcVR1cGxlKGNo YXIgKmRhdGEsIFNpemUgbGVuLCBSZW9yZGVyQnVmZmVyVHVwbGVCdWYgKnR1cGxlKTsKIAog LyogaGVscGVyIGZ1bmN0aW9ucyBmb3IgZGVjb2RpbmcgdHJhbnNhY3Rpb25zICovCiBzdGF0 aWMgaW5saW5lIGJvb2wgRmlsdGVyUHJlcGFyZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpj dHgsCkBAIC0xNTgsNiArMTYwLDEwIEBAIExvZ2ljYWxEZWNvZGluZ1Byb2Nlc3NSZWNvcmQo TG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVhZGVyU3RhdGUgKnJlY29yCiAJ CQlEZWNvZGVMb2dpY2FsTXNnT3AoY3R4LCAmYnVmKTsKIAkJCWJyZWFrOwogCisJCWNhc2Ug Uk1fU0VRX0lEOgorCQkJRGVjb2RlU2VxdWVuY2UoY3R4LCAmYnVmKTsKKwkJCWJyZWFrOwor CiAJCQkvKgogCQkJICogUm1ncnMgaXJyZWxldmFudCBmb3IgbG9naWNhbCBkZWNvZGluZzsg dGhleSBkZXNjcmliZSBzdHVmZiBub3QKIAkJCSAqIHJlcHJlc2VudGVkIGluIGxvZ2ljYWwg ZGVjb2RpbmcuIEFkZCBuZXcgcm1ncnMgaW4gcm1ncmxpc3QuaCdzCkBAIC0xNzMsNyArMTc5 LDYgQEAgTG9naWNhbERlY29kaW5nUHJvY2Vzc1JlY29yZChMb2dpY2FsRGVjb2RpbmdDb250 ZXh0ICpjdHgsIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3IKIAkJY2FzZSBSTV9IQVNIX0lEOgog CQljYXNlIFJNX0dJTl9JRDoKIAkJY2FzZSBSTV9HSVNUX0lEOgotCQljYXNlIFJNX1NFUV9J RDoKIAkJY2FzZSBSTV9TUEdJU1RfSUQ6CiAJCWNhc2UgUk1fQlJJTl9JRDoKIAkJY2FzZSBS TV9DT01NSVRfVFNfSUQ6CkBAIC0xMzEzLDMgKzEzMTgsMTI1IEBAIERlY29kZVRYTk5lZWRT a2lwKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVm LAogCQkJKHR4bl9kYmlkICE9IEludmFsaWRPaWQgJiYgdHhuX2RiaWQgIT0gY3R4LT5zbG90 LT5kYXRhLmRhdGFiYXNlKSB8fAogCQkJY3R4LT5mYXN0X2ZvcndhcmQgfHwgRmlsdGVyQnlP cmlnaW4oY3R4LCBvcmlnaW5faWQpKTsKIH0KKworLyoKKyAqIERlY29kZSBTZXF1ZW5jZSBU dXBsZQorICovCitzdGF0aWMgdm9pZAorRGVjb2RlU2VxVHVwbGUoY2hhciAqZGF0YSwgU2l6 ZSBsZW4sIFJlb3JkZXJCdWZmZXJUdXBsZUJ1ZiAqdHVwbGUpCit7CisJaW50CQkJZGF0YWxl biA9IGxlbiAtIHNpemVvZih4bF9zZXFfcmVjKSAtIFNpemVvZkhlYXBUdXBsZUhlYWRlcjsK KworCUFzc2VydChkYXRhbGVuID49IDApOworCisJdHVwbGUtPnR1cGxlLnRfbGVuID0gZGF0 YWxlbiArIFNpemVvZkhlYXBUdXBsZUhlYWRlcjs7CisKKwlJdGVtUG9pbnRlclNldEludmFs aWQoJnR1cGxlLT50dXBsZS50X3NlbGYpOworCisJdHVwbGUtPnR1cGxlLnRfdGFibGVPaWQg PSBJbnZhbGlkT2lkOworCisJbWVtY3B5KCgoY2hhciAqKSB0dXBsZS0+dHVwbGUudF9kYXRh KSwKKwkJICAgZGF0YSArIHNpemVvZih4bF9zZXFfcmVjKSwKKwkJICAgU2l6ZW9mSGVhcFR1 cGxlSGVhZGVyKTsKKworCW1lbWNweSgoKGNoYXIgKikgdHVwbGUtPnR1cGxlLnRfZGF0YSkg KyBTaXplb2ZIZWFwVHVwbGVIZWFkZXIsCisJCSAgIGRhdGEgKyBzaXplb2YoeGxfc2VxX3Jl YykgKyBTaXplb2ZIZWFwVHVwbGVIZWFkZXIsCisJCSAgIGRhdGFsZW4pOworfQorCisvKgor ICogSGFuZGxlIHNlcXVlbmNlIGRlY29kZQorICoKKyAqIERlY29kaW5nIHNlcXVlbmNlcyBp cyBhIGJpdCB0cmlja3ksIGJlY2F1c2Ugd2hpbGUgbW9zdCBzZXF1ZW5jZSBhY3Rpb25zCisg KiBhcmUgbm9uLXRyYW5zYWN0aW9uYWwgKG5vdCBzdWJqZWN0IHRvIHJvbGxiYWNrKSwgc29t ZSBuZWVkIHRvIGJlIGhhbmRsZWQKKyAqIGFzIHRyYW5zYWN0aW9uYWwuCisgKgorICogQnkg ZGVmYXVsdCwgYSBzZXF1ZW5jZSBpbmNyZW1lbnQgaXMgbm9uLXRyYW5zYWN0aW9uYWwgLSB3 ZSBtdXN0IG5vdCBxdWV1ZQorICogaXQgaW4gYSB0cmFuc2FjdGlvbiBhcyBvdGhlciBjaGFu Z2VzLCBiZWNhdXNlIHRoZSB0cmFuc2FjdGlvbiBtaWdodCBnZXQKKyAqIHJvbGxlZCBiYWNr IGFuZCB3ZSdkIGRpc2NhcmQgdGhlIGluY3JlbWVudC4gVGhlIGRvd25zdHJlYW0gd291bGQg bm90IGJlCisgKiBub3RpZmllZCBhYm91dCB0aGUgaW5jcmVtZW50LCB3aGljaCBpcyB3cm9u Zy4KKyAqCisgKiBPbiB0aGUgb3RoZXIgaGFuZCwgdGhlIHNlcXVlbmNlIG1heSBiZSBjcmVh dGVkIGluIGEgdHJhbnNhY3Rpb24uIEluIHRoaXMKKyAqIGNhc2Ugd2UgKnNob3VsZCogcXVl dWUgdGhlIGNoYW5nZSBhcyBvdGhlciBjaGFuZ2VzIGluIHRoZSB0cmFuc2FjdGlvbiwKKyAq IGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBzZW5kIHRoZSBpbmNyZW1lbnRzIGZvciB1bmtu b3duIHNlcXVlbmNlIHRvIHRoZQorICogcGx1Z2luIC0gaXQgbWlnaHQgZ2V0IGNvbmZ1c2Vk IGFib3V0IHdoaWNoIHNlcXVlbmNlIGl0J3MgcmVsYXRlZCB0byBldGMuCisgKi8KK3N0YXRp YyB2b2lkCitEZWNvZGVTZXF1ZW5jZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhM b2dSZWNvcmRCdWZmZXIgKmJ1ZikKK3sKKwlTbmFwQnVpbGQgICpidWlsZGVyID0gY3R4LT5z bmFwc2hvdF9idWlsZGVyOworCVJlb3JkZXJCdWZmZXJUdXBsZUJ1ZiAqdHVwbGVidWY7CisJ UmVsRmlsZU5vZGUgdGFyZ2V0X25vZGU7CisJWExvZ1JlYWRlclN0YXRlICpyID0gYnVmLT5y ZWNvcmQ7CisJY2hhcgkgICAqdHVwbGVkYXRhID0gTlVMTDsKKwlTaXplCQl0dXBsZWxlbjsK KwlTaXplCQlkYXRhbGVuID0gMDsKKwlUcmFuc2FjdGlvbklkIHhpZCA9IFhMb2dSZWNHZXRY aWQocik7CisJdWludDgJCWluZm8gPSBYTG9nUmVjR2V0SW5mbyhidWYtPnJlY29yZCkgJiB+ WExSX0lORk9fTUFTSzsKKwl4bF9zZXFfcmVjICp4bHJlYzsKKwlTbmFwc2hvdAlzbmFwc2hv dDsKKwlSZXBPcmlnaW5JZCBvcmlnaW5faWQgPSBYTG9nUmVjR2V0T3JpZ2luKHIpOworCWJv b2wJCXRyYW5zYWN0aW9uYWw7CisKKwkvKiBvbmx5IGRlY29kZSBjaGFuZ2VzIGZsYWdnZWQg d2l0aCBYTE9HX1NFUV9MT0cgKi8KKwlpZiAoaW5mbyAhPSBYTE9HX1NFUV9MT0cpCisJCWVs b2coRVJST1IsICJ1bmV4cGVjdGVkIFJNX1NFUV9JRCByZWNvcmQgdHlwZTogJXUiLCBpbmZv KTsKKworCS8qCisJICogSWYgd2UgZG9uJ3QgaGF2ZSBzbmFwc2hvdCBvciB3ZSBhcmUganVz dCBmYXN0LWZvcndhcmRpbmcsIHRoZXJlIGlzIG5vCisJICogcG9pbnQgaW4gZGVjb2Rpbmcg bWVzc2FnZXMuCisJICovCisJaWYgKFNuYXBCdWlsZEN1cnJlbnRTdGF0ZShidWlsZGVyKSA8 IFNOQVBCVUlMRF9GVUxMX1NOQVBTSE9UIHx8CisJCWN0eC0+ZmFzdF9mb3J3YXJkKQorCQly ZXR1cm47CisKKwkvKiBvbmx5IGludGVyZXN0ZWQgaW4gb3VyIGRhdGFiYXNlICovCisJWExv Z1JlY0dldEJsb2NrVGFnKHIsIDAsICZ0YXJnZXRfbm9kZSwgTlVMTCwgTlVMTCk7CisJaWYg KHRhcmdldF9ub2RlLmRiTm9kZSAhPSBjdHgtPnNsb3QtPmRhdGEuZGF0YWJhc2UpCisJCXJl dHVybjsKKworCS8qIG91dHB1dCBwbHVnaW4gZG9lc24ndCBsb29rIGZvciB0aGlzIG9yaWdp biwgbm8gbmVlZCB0byBxdWV1ZSAqLworCWlmIChGaWx0ZXJCeU9yaWdpbihjdHgsIFhMb2dS ZWNHZXRPcmlnaW4ocikpKQorCQlyZXR1cm47CisKKwl0dXBsZWRhdGEgPSBYTG9nUmVjR2V0 RGF0YShyKTsKKwlkYXRhbGVuID0gWExvZ1JlY0dldERhdGFMZW4ocik7CisJdHVwbGVsZW4g PSBkYXRhbGVuIC0gU2l6ZU9mSGVhcEhlYWRlciAtIHNpemVvZih4bF9zZXFfcmVjKTsKKwor CS8qIGV4dHJhY3QgdGhlIFdBTCByZWNvcmQsIHdpdGggImNyZWF0ZWQiIGZsYWcgKi8KKwl4 bHJlYyA9ICh4bF9zZXFfcmVjICopIFhMb2dSZWNHZXREYXRhKHIpOworCisJLyogWFhYIGhv dyBjb3VsZCB3ZSBoYXZlIHNlcXVlbmNlIGNoYW5nZSB3aXRob3V0IGRhdGE/ICovCisJaWYo IWRhdGFsZW4gfHwgIXR1cGxlZGF0YSkKKwkJcmV0dXJuOworCisJdHVwbGVidWYgPSBSZW9y ZGVyQnVmZmVyR2V0VHVwbGVCdWYoY3R4LT5yZW9yZGVyLCB0dXBsZWxlbik7CisJRGVjb2Rl U2VxVHVwbGUodHVwbGVkYXRhLCBkYXRhbGVuLCB0dXBsZWJ1Zik7CisKKwkvKgorCSAqIFNo b3VsZCB3ZSBoYW5kbGUgdGhlIHNlcXVlbmNlIGluY3JlbWVudCBhcyB0cmFuc2FjdGlvbmFs IG9yIG5vdD8KKwkgKgorCSAqIElmIHRoZSBzZXF1ZW5jZSB3YXMgY3JlYXRlZCBpbiBhIHN0 aWxsLXJ1bm5pbmcgdHJhbnNhY3Rpb24sIHRyZWF0CisJICogaXQgYXMgdHJhbnNhY3Rpb25h bCBhbmQgcXVldWUgdGhlIGluY3JlbWVudHMuIE90aGVyd2lzZSBpdCBuZWVkcworCSAqIHRv IGJlIHRyZWF0ZWQgYXMgbm9uLXRyYW5zYWN0aW9uYWwsIGluIHdoaWNoIGNhc2Ugd2Ugc2Vu ZCBpdCB0bworCSAqIHRoZSBwbHVnaW4gcmlnaHQgYXdheS4KKwkgKi8KKwl0cmFuc2FjdGlv bmFsID0gUmVvcmRlckJ1ZmZlclNlcXVlbmNlSXNUcmFuc2FjdGlvbmFsKGN0eC0+cmVvcmRl ciwKKwkJCQkJCQkJCQkJCQkJIHRhcmdldF9ub2RlLAorCQkJCQkJCQkJCQkJCQkgeGxyZWMt PmNyZWF0ZWQpOworCisJLyogU2tpcCB0aGUgY2hhbmdlIGlmIGFscmVhZHkgcHJvY2Vzc2Vk IChwZXIgdGhlIHNuYXBzaG90KS4gKi8KKwlpZiAodHJhbnNhY3Rpb25hbCAmJgorCQkhU25h cEJ1aWxkUHJvY2Vzc0NoYW5nZShidWlsZGVyLCB4aWQsIGJ1Zi0+b3JpZ3B0cikpCisJCXJl dHVybjsKKwllbHNlIGlmICghdHJhbnNhY3Rpb25hbCAmJgorCQkJIChTbmFwQnVpbGRDdXJy ZW50U3RhdGUoYnVpbGRlcikgIT0gU05BUEJVSUxEX0NPTlNJU1RFTlQgfHwKKwkJCSAgU25h cEJ1aWxkWGFjdE5lZWRzU2tpcChidWlsZGVyLCBidWYtPm9yaWdwdHIpKSkKKwkJcmV0dXJu OworCisJLyogUXVldWUgdGhlIGluY3JlbWVudCAob3Igc2VuZCBpbW1lZGlhdGVseSBpZiBu b3QgdHJhbnNhY3Rpb25hbCkuICovCisJc25hcHNob3QgPSBTbmFwQnVpbGRHZXRPckJ1aWxk U25hcHNob3QoYnVpbGRlciwgeGlkKTsKKwlSZW9yZGVyQnVmZmVyUXVldWVTZXF1ZW5jZShj dHgtPnJlb3JkZXIsIHhpZCwgc25hcHNob3QsIGJ1Zi0+ZW5kcHRyLAorCQkJCQkJCSAgIG9y aWdpbl9pZCwgdGFyZ2V0X25vZGUsIHRyYW5zYWN0aW9uYWwsCisJCQkJCQkJICAgeGxyZWMt PmNyZWF0ZWQsIHR1cGxlYnVmKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9sb2dpY2FsLmMKaW5kZXggYjdkOTUyMTU3Ni4uODExZDk5MTJhMSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2FsLmMKKysrIGIvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2FsLmMKQEAgLTczLDYgKzczLDEw IEBAIHN0YXRpYyB2b2lkIHRydW5jYXRlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2Fj aGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIHN0YXRpYyB2b2lkIG1lc3NhZ2VfY2Jfd3Jh cHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJ CQkJCSAgIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sIGJvb2wgdHJhbnNhY3Rpb25hbCwKIAkJ CQkJCQkgICBjb25zdCBjaGFyICpwcmVmaXgsIFNpemUgbWVzc2FnZV9zaXplLCBjb25zdCBj aGFyICptZXNzYWdlKTsKK3N0YXRpYyB2b2lkIHNlcXVlbmNlX2NiX3dyYXBwZXIoUmVvcmRl ckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJCQkJWExvZ1Jl Y1B0ciBzZXF1ZW5jZV9sc24sIFJlbGF0aW9uIHJlbCwKKwkJCQkJCQkJYm9vbCB0cmFuc2Fj dGlvbmFsLCBib29sIGNyZWF0ZWQsCisJCQkJCQkJCWludDY0IGxhc3RfdmFsdWUsIGludDY0 IGxvZ19jbnQsIGJvb2wgaXNfY2FsbGVkKTsKIAogLyogc3RyZWFtaW5nIGNhbGxiYWNrcyAq Lwogc3RhdGljIHZvaWQgc3RyZWFtX3N0YXJ0X2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAq Y2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKQEAgLTkwLDYgKzk0LDEwIEBAIHN0YXRp YyB2b2lkIHN0cmVhbV9jaGFuZ2VfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwg UmVvcmRlckJ1ZmZlclRYTiAqdHhuCiBzdGF0aWMgdm9pZCBzdHJlYW1fbWVzc2FnZV9jYl93 cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJ CQkJCQkJCQkgIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sIGJvb2wgdHJhbnNhY3Rpb25hbCwK IAkJCQkJCQkJCSAgY29uc3QgY2hhciAqcHJlZml4LCBTaXplIG1lc3NhZ2Vfc2l6ZSwgY29u c3QgY2hhciAqbWVzc2FnZSk7CitzdGF0aWMgdm9pZCBzdHJlYW1fc2VxdWVuY2VfY2Jfd3Jh cHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJ CQkJCQkJICAgWExvZ1JlY1B0ciBzZXF1ZW5jZV9sc24sIFJlbGF0aW9uIHJlbCwKKwkJCQkJ CQkJCSAgIGJvb2wgdHJhbnNhY3Rpb25hbCwgYm9vbCBjcmVhdGVkLAorCQkJCQkJCQkJICAg aW50NjQgbGFzdF92YWx1ZSwgaW50NjQgbG9nX2NudCwgYm9vbCBpc19jYWxsZWQpOwogc3Rh dGljIHZvaWQgc3RyZWFtX3RydW5jYXRlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2Fj aGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJCQkJCSAgIGludCBucmVsYXRpb25z LCBSZWxhdGlvbiByZWxhdGlvbnNbXSwgUmVvcmRlckJ1ZmZlckNoYW5nZSAqY2hhbmdlKTsK IApAQCAtMjE3LDYgKzIyNSw3IEBAIFN0YXJ0dXBEZWNvZGluZ0NvbnRleHQoTGlzdCAqb3V0 cHV0X3BsdWdpbl9vcHRpb25zLAogCWN0eC0+cmVvcmRlci0+YXBwbHlfdHJ1bmNhdGUgPSB0 cnVuY2F0ZV9jYl93cmFwcGVyOwogCWN0eC0+cmVvcmRlci0+Y29tbWl0ID0gY29tbWl0X2Ni X3dyYXBwZXI7CiAJY3R4LT5yZW9yZGVyLT5tZXNzYWdlID0gbWVzc2FnZV9jYl93cmFwcGVy OworCWN0eC0+cmVvcmRlci0+c2VxdWVuY2UgPSBzZXF1ZW5jZV9jYl93cmFwcGVyOwogCiAJ LyoKIAkgKiBUbyBzdXBwb3J0IHN0cmVhbWluZywgd2UgcmVxdWlyZSBzdGFydC9zdG9wL2Fi b3J0L2NvbW1pdC9jaGFuZ2UKQEAgLTIzMyw2ICsyNDIsNyBAQCBTdGFydHVwRGVjb2RpbmdD b250ZXh0KExpc3QgKm91dHB1dF9wbHVnaW5fb3B0aW9ucywKIAkJKGN0eC0+Y2FsbGJhY2tz LnN0cmVhbV9jb21taXRfY2IgIT0gTlVMTCkgfHwKIAkJKGN0eC0+Y2FsbGJhY2tzLnN0cmVh bV9jaGFuZ2VfY2IgIT0gTlVMTCkgfHwKIAkJKGN0eC0+Y2FsbGJhY2tzLnN0cmVhbV9tZXNz YWdlX2NiICE9IE5VTEwpIHx8CisJCShjdHgtPmNhbGxiYWNrcy5zdHJlYW1fc2VxdWVuY2Vf Y2IgIT0gTlVMTCkgfHwKIAkJKGN0eC0+Y2FsbGJhY2tzLnN0cmVhbV90cnVuY2F0ZV9jYiAh PSBOVUxMKTsKIAogCS8qCkBAIC0yNTAsNiArMjYwLDcgQEAgU3RhcnR1cERlY29kaW5nQ29u dGV4dChMaXN0ICpvdXRwdXRfcGx1Z2luX29wdGlvbnMsCiAJY3R4LT5yZW9yZGVyLT5zdHJl YW1fY29tbWl0ID0gc3RyZWFtX2NvbW1pdF9jYl93cmFwcGVyOwogCWN0eC0+cmVvcmRlci0+ c3RyZWFtX2NoYW5nZSA9IHN0cmVhbV9jaGFuZ2VfY2Jfd3JhcHBlcjsKIAljdHgtPnJlb3Jk ZXItPnN0cmVhbV9tZXNzYWdlID0gc3RyZWFtX21lc3NhZ2VfY2Jfd3JhcHBlcjsKKwljdHgt PnJlb3JkZXItPnN0cmVhbV9zZXF1ZW5jZSA9IHN0cmVhbV9zZXF1ZW5jZV9jYl93cmFwcGVy OwogCWN0eC0+cmVvcmRlci0+c3RyZWFtX3RydW5jYXRlID0gc3RyZWFtX3RydW5jYXRlX2Ni X3dyYXBwZXI7CiAKIApAQCAtMTIwMiw2ICsxMjEzLDQzIEBAIG1lc3NhZ2VfY2Jfd3JhcHBl cihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCWVycm9y X2NvbnRleHRfc3RhY2sgPSBlcnJjYWxsYmFjay5wcmV2aW91czsKIH0KIAorc3RhdGljIHZv aWQKK3NlcXVlbmNlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJC dWZmZXJUWE4gKnR4biwKKwkJCQkJWExvZ1JlY1B0ciBzZXF1ZW5jZV9sc24sIFJlbGF0aW9u IHJlbCwKKwkJCQkJYm9vbCB0cmFuc2FjdGlvbmFsLCBib29sIGNyZWF0ZWQsCisJCQkJCWlu dDY0IGxhc3RfdmFsdWUsIGludDY0IGxvZ19jbnQsIGJvb2wgaXNfY2FsbGVkKQoreworCUxv Z2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCA9IGNhY2hlLT5wcml2YXRlX2RhdGE7CisJTG9n aWNhbEVycm9yQ2FsbGJhY2tTdGF0ZSBzdGF0ZTsKKwlFcnJvckNvbnRleHRDYWxsYmFjayBl cnJjYWxsYmFjazsKKworCUFzc2VydCghY3R4LT5mYXN0X2ZvcndhcmQpOworCisJaWYgKGN0 eC0+Y2FsbGJhY2tzLnNlcXVlbmNlX2NiID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIFB1 c2ggY2FsbGJhY2sgKyBpbmZvIG9uIHRoZSBlcnJvciBjb250ZXh0IHN0YWNrICovCisJc3Rh dGUuY3R4ID0gY3R4OworCXN0YXRlLmNhbGxiYWNrX25hbWUgPSAic2VxdWVuY2UiOworCXN0 YXRlLnJlcG9ydF9sb2NhdGlvbiA9IHNlcXVlbmNlX2xzbjsKKwllcnJjYWxsYmFjay5jYWxs YmFjayA9IG91dHB1dF9wbHVnaW5fZXJyb3JfY2FsbGJhY2s7CisJZXJyY2FsbGJhY2suYXJn ID0gKHZvaWQgKikgJnN0YXRlOworCWVycmNhbGxiYWNrLnByZXZpb3VzID0gZXJyb3JfY29u dGV4dF9zdGFjazsKKwllcnJvcl9jb250ZXh0X3N0YWNrID0gJmVycmNhbGxiYWNrOworCisJ Lyogc2V0IG91dHB1dCBzdGF0ZSAqLworCWN0eC0+YWNjZXB0X3dyaXRlcyA9IHRydWU7CisJ Y3R4LT53cml0ZV94aWQgPSB0eG4gIT0gTlVMTCA/IHR4bi0+eGlkIDogSW52YWxpZFRyYW5z YWN0aW9uSWQ7CisJY3R4LT53cml0ZV9sb2NhdGlvbiA9IHNlcXVlbmNlX2xzbjsKKworCS8q IGRvIHRoZSBhY3R1YWwgd29yazogY2FsbCBjYWxsYmFjayAqLworCWN0eC0+Y2FsbGJhY2tz LnNlcXVlbmNlX2NiKGN0eCwgdHhuLCBzZXF1ZW5jZV9sc24sIHJlbCwgdHJhbnNhY3Rpb25h bCwKKwkJCQkJCQkgICBjcmVhdGVkLCBsYXN0X3ZhbHVlLCBsb2dfY250LCBpc19jYWxsZWQp OworCisJLyogUG9wIHRoZSBlcnJvciBjb250ZXh0IHN0YWNrICovCisJZXJyb3JfY29udGV4 dF9zdGFjayA9IGVycmNhbGxiYWNrLnByZXZpb3VzOworfQorCiBzdGF0aWMgdm9pZAogc3Ry ZWFtX3N0YXJ0X2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZm ZXJUWE4gKnR4biwKIAkJCQkJCVhMb2dSZWNQdHIgZmlyc3RfbHNuKQpAQCAtMTUwNyw2ICsx NTU1LDQ3IEBAIHN0cmVhbV9tZXNzYWdlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2Fj aGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAllcnJvcl9jb250ZXh0X3N0YWNrID0gZXJy Y2FsbGJhY2sucHJldmlvdXM7CiB9CiAKK3N0YXRpYyB2b2lkCitzdHJlYW1fc2VxdWVuY2Vf Y2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhu LAorCQkJCQkJICAgWExvZ1JlY1B0ciBzZXF1ZW5jZV9sc24sIFJlbGF0aW9uIHJlbCwKKwkJ CQkJCSAgIGJvb2wgdHJhbnNhY3Rpb25hbCwgYm9vbCBjcmVhdGVkLAorCQkJCQkJICAgaW50 NjQgbGFzdF92YWx1ZSwgaW50NjQgbG9nX2NudCwgYm9vbCBpc19jYWxsZWQpCit7CisJTG9n aWNhbERlY29kaW5nQ29udGV4dCAqY3R4ID0gY2FjaGUtPnByaXZhdGVfZGF0YTsKKwlMb2dp Y2FsRXJyb3JDYWxsYmFja1N0YXRlIHN0YXRlOworCUVycm9yQ29udGV4dENhbGxiYWNrIGVy cmNhbGxiYWNrOworCisJQXNzZXJ0KCFjdHgtPmZhc3RfZm9yd2FyZCk7CisKKwkvKiBXZSdy ZSBvbmx5IHN1cHBvc2VkIHRvIGNhbGwgdGhpcyB3aGVuIHN0cmVhbWluZyBpcyBzdXBwb3J0 ZWQuICovCisJQXNzZXJ0KGN0eC0+c3RyZWFtaW5nKTsKKworCS8qIHRoaXMgY2FsbGJhY2sg aXMgb3B0aW9uYWwgKi8KKwlpZiAoY3R4LT5jYWxsYmFja3Muc3RyZWFtX3NlcXVlbmNlX2Ni ID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIFB1c2ggY2FsbGJhY2sgKyBpbmZvIG9uIHRo ZSBlcnJvciBjb250ZXh0IHN0YWNrICovCisJc3RhdGUuY3R4ID0gY3R4OworCXN0YXRlLmNh bGxiYWNrX25hbWUgPSAic3RyZWFtX3NlcXVlbmNlIjsKKwlzdGF0ZS5yZXBvcnRfbG9jYXRp b24gPSBzZXF1ZW5jZV9sc247CisJZXJyY2FsbGJhY2suY2FsbGJhY2sgPSBvdXRwdXRfcGx1 Z2luX2Vycm9yX2NhbGxiYWNrOworCWVycmNhbGxiYWNrLmFyZyA9ICh2b2lkICopICZzdGF0 ZTsKKwllcnJjYWxsYmFjay5wcmV2aW91cyA9IGVycm9yX2NvbnRleHRfc3RhY2s7CisJZXJy b3JfY29udGV4dF9zdGFjayA9ICZlcnJjYWxsYmFjazsKKworCS8qIHNldCBvdXRwdXQgc3Rh dGUgKi8KKwljdHgtPmFjY2VwdF93cml0ZXMgPSB0cnVlOworCWN0eC0+d3JpdGVfeGlkID0g dHhuICE9IE5VTEwgPyB0eG4tPnhpZCA6IEludmFsaWRUcmFuc2FjdGlvbklkOworCWN0eC0+ d3JpdGVfbG9jYXRpb24gPSBzZXF1ZW5jZV9sc247CisKKwkvKiBkbyB0aGUgYWN0dWFsIHdv cms6IGNhbGwgY2FsbGJhY2sgKi8KKwljdHgtPmNhbGxiYWNrcy5zZXF1ZW5jZV9jYihjdHgs IHR4biwgc2VxdWVuY2VfbHNuLCByZWwsIHRyYW5zYWN0aW9uYWwsCisJCQkJCQkJICAgY3Jl YXRlZCwgbGFzdF92YWx1ZSwgbG9nX2NudCwgaXNfY2FsbGVkKTsKKworCS8qIFBvcCB0aGUg ZXJyb3IgY29udGV4dCBzdGFjayAqLworCWVycm9yX2NvbnRleHRfc3RhY2sgPSBlcnJjYWxs YmFjay5wcmV2aW91czsKK30KKwogc3RhdGljIHZvaWQKIHN0cmVhbV90cnVuY2F0ZV9jYl93 cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJ CQkJCQkgICBpbnQgbnJlbGF0aW9ucywgUmVsYXRpb24gcmVsYXRpb25zW10sCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYyBi L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCmluZGV4 IDQ2ZTY2NjA4Y2YuLjQzNDkyNjQ1OWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCkBAIC03Nyw2ICs3NywzNSBAQAogICoJ ICBhIGJpdCBtb3JlIG1lbW9yeSB0byB0aGUgb2xkZXN0IHN1YnRyYW5zYWN0aW9ucywgYmVj YXVzZSBpdCdzIGxpa2VseQogICoJICB0aGV5IGFyZSB0aGUgc291cmNlIGZvciB0aGUgbmV4 dCBzZXF1ZW5jZSBvZiBjaGFuZ2VzLgogICoKKyAqCSAgV2hlbiBkZWNvZGluZyBzZXF1ZW5j ZXMsIHdlIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBhIHNlcXVlbmNlcyBjcmVhdGVkCisgKgkg IGluIGEgKHJ1bm5pbmcpIHRyYW5zYWN0aW9uLCBhbmQgc2VxdWVuY2VzIGNyZWF0ZWQgaW4g b3RoZXIgKGFscmVhZHkKKyAqCSAgY29tbWl0dGVkKSB0cmFuc2FjdGlvbnMuIENoYW5nZXMg Zm9yIHNlcXVlbmNlcyBjcmVhdGVkIGluIHRoZSBzYW1lCisgKgkgIHRvcC1sZXZlbCB0cmFu c2FjdGlvbiBhcmUgdHJlYXRlZCBhcyAidHJhbnNhY3Rpb25hbCIgaS5lLiBqdXN0IGxpa2UK KyAqCSAgYW55IG90aGVyIGNoYW5nZSBmcm9tIHRoYXQgdHJhbnNhY3Rpb24gKGFuZCBkaXNj YXJkZWQgaW4gY2FzZSBvZiBhCisgKgkgIHJvbGxiYWNrKS4gQ2hhbmdlcyBmb3Igc2VxdWVu Y2VzIGNyZWF0ZWQgZWFybGllciBhcmUgdHJlYXRlZCBhcyBub3QKKyAqCSAgdHJhbnNhY3Rp b25hbCAtIGFyZSBwcm9jZXNzZWQgaW1tZWRpYXRlbHksIGFzIGlmIHBlcmZvcm1lZCBvdXRz aWRlCisgKgkgIGFueSB0cmFuc2FjdGlvbiAoYW5kIHRodXMgbm90IHJvbGxlZCBiYWNrKS4K KyAqCisgKgkgIFRoaXMgbWl4ZWQgYmVoYXZpb3IgaXMgbmVjZXNzYXJ5IC0gc2VxdWVuY2Vz IGFyZSBub24tdHJhbnNhY3Rpb25hbAorICoJICAoZS5nLiBST0xMQkFDSyBkb2VzIG5vdCB1 bmRvIHRoZSBzZXF1ZW5jZSBpbmNyZW1lbnRzKS4gQnV0IGZvciBuZXcKKyAqCSAgc2VxdWVu Y2VzLCB3ZSBuZWVkIHRvIGhhbmRsZSB0aGVtIGluIGEgdHJhbnNhY3Rpb25hbCB3YXksIGJl Y2F1c2UgaWYKKyAqCSAgd2UgZXZlciBnZXQgc29tZSBEREwgc3VwcG9ydCwgdGhlIHNlcXVl bmNlIHdvbid0IGV4aXN0IHVudGlsIHRoZQorICoJICB0cmFuc2FjdGlvbiBnZXRzIGFwcGxp ZWQuIFNvIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBpbmNyZW1lbnRzIGRvbid0CisgKgkgIGhh cHBlbiB1bnRpbCB0aGUgc2VxdWVuY2UgZ2V0cyBjcmVhdGVkLgorICoKKyAqCSAgVG8gZGlm ZmVyZW50aWF0ZSB3aGljaCBzZXF1ZW5jZXMgYXJlICJvbGQiIGFuZCB3aGljaCB3ZXJlIGNy ZWF0ZWQKKyAqCSAgaW4gYSBzdGlsbC1ydW5uaW5nIHRyYW5zYWN0aW9uLCB3ZSB0cmFjayBz ZXF1ZW5jZXMgY3JlYXRlZCBpbiBydW5uaW5nCisgKgkgIHRyYW5zYWN0aW9ucyBpbiBhIGhh c2ggdGFibGUuIEVhY2ggc2VxdWVuY2UgaXMgaWRlbnRpZmllZCBieSBpdCdzCisgKgkgIHJl bGZpbGVub2RlLCBhbmQgYXQgdHJhbnNhY3Rpb24gY29tbWl0IHdlIGRpc2NhcmQgYWxsIHNl cXVlbmNlcworICoJICBjcmVhdGVkIGluIHRoYXQgcGFydGljdWxhciB0cmFuc2FjdGlvbi4g Rm9yIGVhY2ggc2VxdWVuY2Ugd2UgdHJhY2sKKyAqCSAgdGhlIFhJRCBvZiB0aGUgKHN1Yil0 cmFuc2FjdGlvbiB0aGF0IGNyZWF0ZWQgaXQsIGFuZCB3ZSBjbGVhbnVwIHRoZQorICoJICBz ZXF1ZW5jZXMgZm9yIGVhY2ggc3VidHJhbnNhY3Rpb24gd2hlbiBpdCBjb21wbGV0ZXMgKGNv bW1pdC9yb2xsYmFjaykuCisgKgorICoJICBXZSBkb24ndCB1c2UgdGhlIFhJRCB0byBjaGVj ayBpZiBpdCdzIHRoZSBzYW1lIHRvcC1sZXZlbCB0cmFuc2FjdGlvbi4KKyAqCSAgSXQncyBl bm91Z2ggdG8ga25vdyBpdCB3YXMgY3JlYXRlZCBpbiBhbiBpbi1wcm9ncmVzcyB0cmFuc2Fj dGlvbiwKKyAqCSAgYW5kIHdlIGtub3cgaXQgbXVzdCBiZSB0aGUgY3VycmVudCBvbmUgYmVj YXVzZSBvdGhlcndpc2UgaXQgd291bGRuJ3QKKyAqCSAgc2VlIHRoZSBzZXF1ZW5jZSBvYmpl Y3QuCisgKgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAjaW5jbHVkZSAicG9zdGdy ZXMuaCIKQEAgLTExNiw2ICsxNDUsMTMgQEAgdHlwZWRlZiBzdHJ1Y3QgUmVvcmRlckJ1ZmZl clRYTkJ5SWRFbnQKIAlSZW9yZGVyQnVmZmVyVFhOICp0eG47CiB9IFJlb3JkZXJCdWZmZXJU WE5CeUlkRW50OwogCisvKiBlbnRyeSBmb3IgaGFzaCB0YWJsZSB3ZSB1c2UgdG8gdHJhY2sg c2VxdWVuY2VzIGNyZWF0ZWQgaW4gcnVubmluZyB4YWN0cyAqLwordHlwZWRlZiBzdHJ1Y3Qg UmVvcmRlckJ1ZmZlclNlcXVlbmNlRW50Cit7CisJUmVsRmlsZU5vZGUJCXJub2RlOworCVRy YW5zYWN0aW9uSWQJeGlkOworfSBSZW9yZGVyQnVmZmVyU2VxdWVuY2VFbnQ7CisKIC8qIGRh dGEgc3RydWN0dXJlcyBmb3IgKHJlbGZpbGVub2RlLCBjdGlkKSA9PiAoY21pbiwgY21heCkg bWFwcGluZyAqLwogdHlwZWRlZiBzdHJ1Y3QgUmVvcmRlckJ1ZmZlclR1cGxlQ2lkS2V5CiB7 CkBAIC0zMzksNiArMzc1LDE0IEBAIFJlb3JkZXJCdWZmZXJBbGxvY2F0ZSh2b2lkKQogCWJ1 ZmZlci0+YnlfdHhuID0gaGFzaF9jcmVhdGUoIlJlb3JkZXJCdWZmZXJCeVhpZCIsIDEwMDAs ICZoYXNoX2N0bCwKIAkJCQkJCQkJIEhBU0hfRUxFTSB8IEhBU0hfQkxPQlMgfCBIQVNIX0NP TlRFWFQpOwogCisJLyogaGFzaCB0YWJsZSBvZiBzZXF1ZW5jZXMsIG1hcHBpbmcgcmVsZmls ZW5vZGUgdG8gWElEIG9mIHRyYW5zYWN0aW9uICovCisJaGFzaF9jdGwua2V5c2l6ZSA9IHNp emVvZihSZWxGaWxlTm9kZSk7CisJaGFzaF9jdGwuZW50cnlzaXplID0gc2l6ZW9mKFJlb3Jk ZXJCdWZmZXJTZXF1ZW5jZUVudCk7CisJaGFzaF9jdGwuaGN4dCA9IGJ1ZmZlci0+Y29udGV4 dDsKKworCWJ1ZmZlci0+c2VxdWVuY2VzID0gaGFzaF9jcmVhdGUoIlJlb3JkZXJCdWZmZXJT ZXF1ZW5jZUhhc2giLCAxMDAwLCAmaGFzaF9jdGwsCisJCQkJCQkJCSBIQVNIX0VMRU0gfCBI QVNIX0JMT0JTIHwgSEFTSF9DT05URVhUKTsKKwogCWJ1ZmZlci0+YnlfdHhuX2xhc3RfeGlk ID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CiAJYnVmZmVyLT5ieV90eG5fbGFzdF90eG4gPSBO VUxMOwogCkBAIC01MjUsNiArNTY5LDEzIEBAIFJlb3JkZXJCdWZmZXJSZXR1cm5DaGFuZ2Uo UmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZSwKIAkJCQlj aGFuZ2UtPmRhdGEudHJ1bmNhdGUucmVsaWRzID0gTlVMTDsKIAkJCX0KIAkJCWJyZWFrOwor CQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9TRVFVRU5DRToKKwkJCWlmIChjaGFuZ2Ut PmRhdGEuc2VxdWVuY2UudHVwbGUpCisJCQl7CisJCQkJUmVvcmRlckJ1ZmZlclJldHVyblR1 cGxlQnVmKHJiLCBjaGFuZ2UtPmRhdGEuc2VxdWVuY2UudHVwbGUpOworCQkJCWNoYW5nZS0+ ZGF0YS5zZXF1ZW5jZS50dXBsZSA9IE5VTEw7CisJCQl9CisJCQlicmVhazsKIAkJY2FzZSBS RU9SREVSX0JVRkZFUl9DSEFOR0VfSU5URVJOQUxfU1BFQ19DT05GSVJNOgogCQljYXNlIFJF T1JERVJfQlVGRkVSX0NIQU5HRV9JTlRFUk5BTF9TUEVDX0FCT1JUOgogCQljYXNlIFJFT1JE RVJfQlVGRkVSX0NIQU5HRV9JTlRFUk5BTF9DT01NQU5EX0lEOgpAQCAtODU5LDYgKzkxMCwy NDIgQEAgUmVvcmRlckJ1ZmZlclF1ZXVlTWVzc2FnZShSZW9yZGVyQnVmZmVyICpyYiwgVHJh bnNhY3Rpb25JZCB4aWQsCiAJfQogfQogCisvKgorICogVHJlYXQgdGhlIHNlcXVlbmNlIGlu Y3JlbWVudCBhcyB0cmFuc2FjdGlvbmFsPworICoKKyAqIFRoZSBoYXNoIHRhYmxlIHRyYWNr cyBhbGwgc2VxdWVuY2VzIGNyZWF0ZWQgaW4gaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb25zLAor ICogc28gd2Ugc2ltcGx5IGRvIGEgbG9va3VwICh0aGUgc2VxdWVuY2UgaXMgaWRlbnRpZmll ZCBieSByZWxmaWxlbmRlKS4gSWYKKyAqIHdlIGZpbmQgYSBtYXRjaCwgdGhlIGluY3JlbWVu dCBzaG91bGQgYmUgaGFuZGxlZCBhcyB0cmFuc2FjdGlvbmFsLgorICovCitib29sCitSZW9y ZGVyQnVmZmVyU2VxdWVuY2VJc1RyYW5zYWN0aW9uYWwoUmVvcmRlckJ1ZmZlciAqcmIsCisJ CQkJCQkJCQkgUmVsRmlsZU5vZGUgcm5vZGUsIGJvb2wgY3JlYXRlZCkKK3sKKwlib29sCWZv dW5kID0gZmFsc2U7CisKKwlpZiAoY3JlYXRlZCkKKwkJcmV0dXJuIHRydWU7CisKKwloYXNo X3NlYXJjaChyYi0+c2VxdWVuY2VzLAorCQkJCSh2b2lkICopICZybm9kZSwKKwkJCQlIQVNI X0ZJTkQsCisJCQkJJmZvdW5kKTsKKworCXJldHVybiBmb3VuZDsKK30KKworLyoKKyAqIENs ZWFudXAgc2VxdWVuY2VzIGNyZWF0ZWQgaW4gaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb25zLgor ICoKKyAqIFRoZXJlJ3Mgbm8gd2F5IHRvIHNlYXJjaCBieSBYSUQsIHNvIHdlIHNpbXBseSBk byBhIHNlcXNjYW4gb2YgYWxsCisgKiB0aGUgZW50cmllcyBpbiB0aGUgaGFzaCB0YWJsZS4g SG9wZWZ1bGx5IHRoZXJlIGFyZSBvbmx5IGEgY291cGxlCisgKiBlbnRyaWVzIGluIG1vc3Qg Y2FzZXMgLSBwZW9wbGUgZ2VuZXJhbGx5IGRvbid0IGNyZWF0ZSBtYW55IG5ldworICogc2Vx dWVuY2VzIG92ZXIgYW5kIG92ZXIuCisgKi8KK3N0YXRpYyB2b2lkCitSZW9yZGVyQnVmZmVy U2VxdWVuY2VDbGVhbnVwKFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCkK K3sKKwlIQVNIX1NFUV9TVEFUVVMgc2Nhbl9zdGF0dXM7CisJUmVvcmRlckJ1ZmZlclNlcXVl bmNlRW50ICplbnQ7CisKKwloYXNoX3NlcV9pbml0KCZzY2FuX3N0YXR1cywgcmItPnNlcXVl bmNlcyk7CisJd2hpbGUgKChlbnQgPSAoUmVvcmRlckJ1ZmZlclNlcXVlbmNlRW50ICopIGhh c2hfc2VxX3NlYXJjaCgmc2Nhbl9zdGF0dXMpKSAhPSBOVUxMKQorCXsKKwkJLyogc2tpcCBz ZXF1ZW5jZXMgbm90IGZyb20gdGhpcyB0cmFuc2FjdGlvbiAqLworCQlpZiAoZW50LT54aWQg IT0geGlkKQorCQkJY29udGludWU7CisKKwkJKHZvaWQpIGhhc2hfc2VhcmNoKHJiLT5zZXF1 ZW5jZXMsCisJCQkJCSAgICh2b2lkICopICYoZW50LT5ybm9kZSksCisJCQkJCSAgIEhBU0hf UkVNT1ZFLCBOVUxMKTsKKwl9Cit9CisKKy8qCisgKiBBIHRyYW5zYWN0aW9uYWwgc2VxdWVu Y2UgaW5jcmVtZW50IGlzIHF1ZXVlZCB0byBiZSBwcm9jZXNzZWQgdXBvbiBjb21taXQKKyAq IGFuZCBhIG5vbi10cmFuc2FjdGlvbmFsIGluY3JlbWVudCBnZXRzIHByb2Nlc3NlZCBpbW1l ZGlhdGVseS4KKyAqCisgKiBBIHNlcXVlbmNlIHVwZGF0ZSBtYXkgYmUgYm90aCB0cmFuc2Fj dGlvbmFsIGFuZCBub24tdHJhbnNhY3Rpb25hbC4gV2hlbgorICogY3JlYXRlZCBpbiBhIHJ1 bm5pbmcgdHJhbnNhY3Rpb24sIHRyZWF0IGl0IGFzIHRyYW5zYWN0aW9uYWwgYW5kIHF1ZXVl CisgKiB0aGUgY2hhbmdlIGluIGl0LiBPdGhlcndpc2UgdHJlYXQgaXQgYXMgbm9uLXRyYW5z YWN0aW9uYWwsIHNvIHRoYXQgd2UKKyAqIGRvbid0IGZvcmdldCB0aGUgaW5jcmVtZW50IGlu IGNhc2Ugb2YgYSByb2xsYmFjay4KKyAqLwordm9pZAorUmVvcmRlckJ1ZmZlclF1ZXVlU2Vx dWVuY2UoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLAorCQkJCQkJICAg U25hcHNob3Qgc25hcHNob3QsIFhMb2dSZWNQdHIgbHNuLCBSZXBPcmlnaW5JZCBvcmlnaW5f aWQsCisJCQkJCQkgICBSZWxGaWxlTm9kZSBybm9kZSwgYm9vbCB0cmFuc2FjdGlvbmFsLCBi b29sIGNyZWF0ZWQsCisJCQkJCQkgICBSZW9yZGVyQnVmZmVyVHVwbGVCdWYgKnR1cGxlYnVm KQoreworCS8qCisJICogQ2hhbmdlIG5lZWRzIHRvIGJlIGhhbmRsZWQgYXMgdHJhbnNhY3Rp b25hbCwgYmVjYXVzZSB0aGUgc2VxdWVuY2Ugd2FzCisJICogY3JlYXRlZCBpbiBhIHRyYW5z YWN0aW9uIHRoYXQgaXMgc3RpbGwgcnVubmluZy4gSW4gdGhhdCBjYXNlIGFsbCB0aGUKKwkg KiBjaGFuZ2VzIG5lZWQgdG8gYmUgcXVldWVkIGluIHRoYXQgdHJhbnNhY3Rpb24sIHdlIG11 c3Qgbm90IHNlbmQgdGhlbQorCSAqIHRvIHRoZSBkb3duc3RyZWFtIHVudGlsIHRoZSB0cmFu c2FjdGlvbiBjb21taXRzLgorCSAqCisJICogVGhlcmUncyBhIGJpdCBvZiBhIHRyb3VibGUg d2l0aCBzdWJ0cmFuc2FjdGlvbnMgLSB3ZSBjYW4ndCBxdWV1ZSBpdAorCSAqIGludG8gdGhl IHN1YnhhY3QsIGJlY2F1c2UgaXQgbWlnaHQgYmUgcm9sbGVkIGJhY2sgYW5kIHdlJ2QgbG9z ZSB0aGUKKwkgKiBpbmNyZW1lbnQuIFdlIG5lZWQgdG8gcXVldWUgaXQgaW50byB0aGUgc2Ft ZSAoc3ViKXhhY3QgdGhhdCBjcmVhdGVkCisJICogdGhlIHNlcXVlbmNlLCB3aGljaCBpcyB3 aHkgd2UgdHJhY2sgdGhlIFhJRCBpbiB0aGUgaGFzaCB0YWJsZS4KKwkgKi8KKwlpZiAodHJh bnNhY3Rpb25hbCkKKwl7CisJCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKwkJUmVvcmRl ckJ1ZmZlckNoYW5nZSAqY2hhbmdlOworCisJCS8qIGxvb2t1cCBzZXF1ZW5jZSBieSByZWxm aWxlbm9kZSAqLworCQlSZW9yZGVyQnVmZmVyU2VxdWVuY2VFbnQgICAqZW50OworCQlib29s CQkJCQkJZm91bmQ7CisKKwkJLyogdHJhbnNhY3Rpb25hbCBjaGFuZ2VzIHJlcXVpcmUgYSB0 cmFuc2FjdGlvbiAqLworCQlBc3NlcnQoeGlkICE9IEludmFsaWRUcmFuc2FjdGlvbklkKTsK KworCQkvKiBzZWFyY2ggdGhlIGxvb2t1cCB0YWJsZSAod2UgaWdub3JlIHRoZSByZXR1cm4g dmFsdWUsIGZvdW5kIGlzIGVub3VnaCkgKi8KKwkJZW50ID0gaGFzaF9zZWFyY2gocmItPnNl cXVlbmNlcywKKwkJCQkJCSAgKHZvaWQgKikgJnJub2RlLAorCQkJCQkJICBjcmVhdGVkID8g SEFTSF9FTlRFUiA6IEhBU0hfRklORCwKKwkJCQkJCSAgJmZvdW5kKTsKKworCQkvKgorCQkg KiBJZiB0aGlzIGlzIHRoZSAiY3JlYXRlIiBpbmNyZW1lbnQsIHdlIG11c3Qgbm90IGhhdmUg Zm91bmQgYW55CisJCSAqIHByZS1leGlzdGluZyBlbnRyeSBpbiB0aGUgaGFzaCB0YWJsZSAo aS5lLiB0aGVyZSBtdXN0IG5vdCBiZQorCQkgKiBhbnkgY29uZmxpY3Rpbmcgc2VxdWVuY2Up LgorCQkgKi8KKwkJQXNzZXJ0KCEoY3JlYXRlZCAmJiBmb3VuZCkpOworCisJCS8qIEJ1dCB3 ZSBtdXN0IGhhdmUgZWl0aGVyIGNyZWF0ZWQgb3IgZm91bmQgYW4gZXhpc3RpbmcgZW50cnku ICovCisJCUFzc2VydChjcmVhdGVkIHx8IGZvdW5kKTsKKworCQkvKgorCQkgKiBXaGVuIGNy ZWF0aW5nIHRoZSBzZXF1ZW5jZSwgcmVtZW1iZXIgdGhlIFhJRCBvZiB0aGUgdHJhbnNhY3Rp b24KKwkJICogdGhhdCBjcmVhdGVkIGlkLgorCQkgKi8KKwkJaWYgKGNyZWF0ZWQpCisJCQll bnQtPnhpZCA9IHhpZDsKKworCQkvKiBYWFggTWF5YmUgY2hlY2sgdGhhdCB3ZSdyZSBzdGls bCBpbiB0aGUgc2FtZSB0b3AtbGV2ZWwgeGFjdD8gKi8KKworCQkvKiBPSywgYWxsb2NhdGUg YW5kIHF1ZXVlIHRoZSBjaGFuZ2UgKi8KKwkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRT d2l0Y2hUbyhyYi0+Y29udGV4dCk7CisKKwkJY2hhbmdlID0gUmVvcmRlckJ1ZmZlckdldENo YW5nZShyYik7CisKKwkJY2hhbmdlLT5hY3Rpb24gPSBSRU9SREVSX0JVRkZFUl9DSEFOR0Vf U0VRVUVOQ0U7CisJCWNoYW5nZS0+b3JpZ2luX2lkID0gb3JpZ2luX2lkOworCisJCW1lbWNw eSgmY2hhbmdlLT5kYXRhLnNlcXVlbmNlLnJlbG5vZGUsICZybm9kZSwgc2l6ZW9mKFJlbEZp bGVOb2RlKSk7CisKKwkJY2hhbmdlLT5kYXRhLnNlcXVlbmNlLmNyZWF0ZWQgPSBjcmVhdGVk OworCQljaGFuZ2UtPmRhdGEuc2VxdWVuY2UudHVwbGUgPSB0dXBsZWJ1ZjsKKworCQkvKiBh ZGQgaXQgdG8gdGhlIHNhbWUgc3VieGFjdCB0aGF0IGNyZWF0ZWQgdGhlIHNlcXVlbmNlICov CisJCVJlb3JkZXJCdWZmZXJRdWV1ZUNoYW5nZShyYiwgZW50LT54aWQsIGxzbiwgY2hhbmdl LCBmYWxzZSk7CisKKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCX0K KwllbHNlCisJeworCQkvKgorCQkgKiBUaGlzIGluY3JlbWVudCBpcyBmb3IgYSBzZXF1ZW5j ZSB0aGF0IHdhcyBub3QgY3JlYXRlZCBpbiBhbnkKKwkJICogcnVubmluZyB0cmFuc2FjdGlv biwgc28gd2UgdHJlYXQgaXQgYXMgbm9uLXRyYW5zYWN0aW9uYWwgYW5kCisJCSAqIGp1c3Qg c2VuZCBpdCB0byB0aGUgb3V0cHV0IHBsdWdpbiBkaXJlY3RseS4KKwkJICovCisJCVJlb3Jk ZXJCdWZmZXJUWE4gKnR4biA9IE5VTEw7CisJCXZvbGF0aWxlIFNuYXBzaG90IHNuYXBzaG90 X25vdyA9IHNuYXBzaG90OworCQlib29sCXVzaW5nX3N1YnR4bjsKKworI2lmZGVmIFVTRV9B U1NFUlRfQ0hFQ0tJTkcKKwkJLyogQWxsICJjcmVhdGVzIiBoYXZlIHRvIGJlIGhhbmRsZWQg YXMgdHJhbnNhY3Rpb25hbC4gKi8KKwkJQXNzZXJ0KCFjcmVhdGVkKTsKKworCQkvKiBNYWtl IHN1cmUgdGhlIHNlcXVlbmNlIGlzIG5vdCBpbiB0aGUgaGFzaCB0YWJsZS4gKi8KKwkJewor CQkJYm9vbAlmb3VuZDsKKwkJCWhhc2hfc2VhcmNoKHJiLT5zZXF1ZW5jZXMsCisJCQkJCQko dm9pZCAqKSAmcm5vZGUsCisJCQkJCQlIQVNIX0ZJTkQsICZmb3VuZCk7CisJCQlBc3NlcnQo IWZvdW5kKTsKKwkJfQorI2VuZGlmCisKKwkJaWYgKHhpZCAhPSBJbnZhbGlkVHJhbnNhY3Rp b25JZCkKKwkJCXR4biA9IFJlb3JkZXJCdWZmZXJUWE5CeVhpZChyYiwgeGlkLCB0cnVlLCBO VUxMLCBsc24sIHRydWUpOworCisJCS8qIHNldHVwIHNuYXBzaG90IHRvIGFsbG93IGNhdGFs b2cgYWNjZXNzICovCisJCVNldHVwSGlzdG9yaWNTbmFwc2hvdChzbmFwc2hvdF9ub3csIE5V TEwpOworCisJCS8qCisJCSAqIERlY29kaW5nIG5lZWRzIGFjY2VzcyB0byBzeXNjYWNoZXMg ZXQgYWwuLCB3aGljaCBpbiB0dXJuIHVzZQorCQkgKiBoZWF2eXdlaWdodCBsb2NrcyBhbmQg c3VjaC4gVGh1cyB3ZSBuZWVkIHRvIGhhdmUgZW5vdWdoIHN0YXRlIGFyb3VuZCB0bworCQkg KiBrZWVwIHRyYWNrIG9mIHRob3NlLiAgVGhlIGVhc2llc3Qgd2F5IGlzIHRvIHNpbXBseSB1 c2UgYSB0cmFuc2FjdGlvbgorCQkgKiBpbnRlcm5hbGx5LiAgVGhhdCBhbHNvIGFsbG93cyB1 cyB0byBlYXNpbHkgZW5mb3JjZSB0aGF0IG5vdGhpbmcgd3JpdGVzCisJCSAqIHRvIHRoZSBk YXRhYmFzZSBieSBjaGVja2luZyBmb3IgeGlkIGFzc2lnbm1lbnRzLgorCQkgKgorCQkgKiBX aGVuIHdlJ3JlIGNhbGxlZCB2aWEgdGhlIFNRTCBTUkYgdGhlcmUncyBhbHJlYWR5IGEgdHJh bnNhY3Rpb24KKwkJICogc3RhcnRlZCwgc28gc3RhcnQgYW4gZXhwbGljaXQgc3VidHJhbnNh Y3Rpb24gdGhlcmUuCisJCSAqLworCQl1c2luZ19zdWJ0eG4gPSBJc1RyYW5zYWN0aW9uT3JU cmFuc2FjdGlvbkJsb2NrKCk7CisKKwkJUEdfVFJZKCk7CisJCXsKKwkJCVJlbGF0aW9uCXJl bGF0aW9uOworCQkJSGVhcFR1cGxlCXR1cGxlOworCQkJYm9vbAkJaXNudWxsOworCQkJaW50 NjQJCWxhc3RfdmFsdWUsIGxvZ19jbnQ7CisJCQlib29sCQlpc19jYWxsZWQ7CisJCQlPaWQJ CQlyZWxvaWQ7CisKKwkJCWlmICh1c2luZ19zdWJ0eG4pCisJCQkJQmVnaW5JbnRlcm5hbFN1 YlRyYW5zYWN0aW9uKCJzZXF1ZW5jZSIpOworCQkJZWxzZQorCQkJCVN0YXJ0VHJhbnNhY3Rp b25Db21tYW5kKCk7CisKKwkJCXJlbG9pZCA9IFJlbGlkQnlSZWxmaWxlbm9kZShybm9kZS5z cGNOb2RlLCBybm9kZS5yZWxOb2RlKTsKKworCQkJaWYgKHJlbG9pZCA9PSBJbnZhbGlkT2lk KQorCQkJCWVsb2coRVJST1IsICJjb3VsZCBub3QgbWFwIGZpbGVub2RlIFwiJXNcIiB0byBy ZWxhdGlvbiBPSUQiLAorCQkJCQkgcmVscGF0aHBlcm0ocm5vZGUsCisJCQkJCQkJCSBNQUlO X0ZPUktOVU0pKTsKKworCQkJcmVsYXRpb24gPSBSZWxhdGlvbklkR2V0UmVsYXRpb24ocmVs b2lkKTsKKwkJCXR1cGxlID0gJnR1cGxlYnVmLT50dXBsZTsKKworCQkJLyoKKwkJCSAqIEV4 dHJhY3QgdGhlIGludGVybmFsIHNlcXVlbmNlIHZhbHVlcywgZGVzY3JpYmluZyB0aGUgc3Rh dGUuCisJCQkgKgorCQkJICogWFhYIFNlZW1zIGEgYml0IHN0cmFuZ2UgdG8gYWNjZXNzIGl0 IGRpcmVjdGx5LiBNYXliZSB0aGVyZSdzCisJCQkgKiBhIGJldHRlciAvIG1vcmUgY29ycmVj dCB3YXk/CisJCQkgKi8KKwkJCWxhc3RfdmFsdWUgPSBoZWFwX2dldGF0dHIodHVwbGUsIDEs IFJlbGF0aW9uR2V0RGVzY3IocmVsYXRpb24pLCAmaXNudWxsKTsKKwkJCWxvZ19jbnQgPSBo ZWFwX2dldGF0dHIodHVwbGUsIDIsIFJlbGF0aW9uR2V0RGVzY3IocmVsYXRpb24pLCAmaXNu dWxsKTsKKwkJCWlzX2NhbGxlZCA9IGhlYXBfZ2V0YXR0cih0dXBsZSwgMywgUmVsYXRpb25H ZXREZXNjcihyZWxhdGlvbiksICZpc251bGwpOworCisJCQlyYi0+c2VxdWVuY2UocmIsIHR4 biwgbHNuLCByZWxhdGlvbiwgdHJhbnNhY3Rpb25hbCwgY3JlYXRlZCwKKwkJCQkJCSBsYXN0 X3ZhbHVlLCBsb2dfY250LCBpc19jYWxsZWQpOworCisJCQlSZWxhdGlvbkNsb3NlKHJlbGF0 aW9uKTsKKworCQkJVGVhcmRvd25IaXN0b3JpY1NuYXBzaG90KGZhbHNlKTsKKworCQkJQWJv cnRDdXJyZW50VHJhbnNhY3Rpb24oKTsKKworCQkJaWYgKHVzaW5nX3N1YnR4bikKKwkJCQlS b2xsYmFja0FuZFJlbGVhc2VDdXJyZW50U3ViVHJhbnNhY3Rpb24oKTsKKwkJfQorCQlQR19D QVRDSCgpOworCQl7CisJCQlUZWFyZG93bkhpc3RvcmljU25hcHNob3QodHJ1ZSk7CisKKwkJ CUFib3J0Q3VycmVudFRyYW5zYWN0aW9uKCk7CisKKwkJCWlmICh1c2luZ19zdWJ0eG4pCisJ CQkJUm9sbGJhY2tBbmRSZWxlYXNlQ3VycmVudFN1YlRyYW5zYWN0aW9uKCk7CisKKwkJCVBH X1JFX1RIUk9XKCk7CisJCX0KKwkJUEdfRU5EX1RSWSgpOworCX0KK30KKwogLyoKICAqIEFz c2VydFRYTkxzbk9yZGVyCiAgKgkJVmVyaWZ5IExTTiBvcmRlcmluZyBvZiB0cmFuc2FjdGlv biBsaXN0cyBpbiB0aGUgcmVvcmRlcmJ1ZmZlcgpAQCAtMTUzNSw2ICsxODIyLDkgQEAgUmVv cmRlckJ1ZmZlckNsZWFudXBUWE4oUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJU WE4gKnR4bikKIAkJCQkmZm91bmQpOwogCUFzc2VydChmb3VuZCk7CiAKKwkvKiBSZW1vdmUg c2VxdWVuY2VzIGNyZWF0ZWQgaW4gdGhpcyB0cmFuc2FjdGlvbiAoaWYgYW55KS4gKi8KKwlS ZW9yZGVyQnVmZmVyU2VxdWVuY2VDbGVhbnVwKHJiLCB0eG4tPnhpZCk7CisKIAkvKiByZW1v dmUgZW50cmllcyBzcGlsbGVkIHRvIGRpc2sgKi8KIAlpZiAocmJ0eG5faXNfc2VyaWFsaXpl ZCh0eG4pKQogCQlSZW9yZGVyQnVmZmVyUmVzdG9yZUNsZWFudXAocmIsIHR4bik7CkBAIC0x OTUwLDYgKzIyNDAsNDIgQEAgUmVvcmRlckJ1ZmZlckFwcGx5TWVzc2FnZShSZW9yZGVyQnVm ZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQljaGFuZ2UtPmRhdGEubXNn Lm1lc3NhZ2UpOwogfQogCisvKgorICogSGVscGVyIGZ1bmN0aW9uIGZvciBSZW9yZGVyQnVm ZmVyUHJvY2Vzc1RYTiBmb3IgYXBwbHlpbmcgc2VxdWVuY2VzLgorICovCitzdGF0aWMgaW5s aW5lIHZvaWQKK1Jlb3JkZXJCdWZmZXJBcHBseVNlcXVlbmNlKFJlb3JkZXJCdWZmZXIgKnJi LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkgICBSZWxhdGlvbiByZWxhdGlvbiwg UmVvcmRlckJ1ZmZlckNoYW5nZSAqY2hhbmdlLAorCQkJCQkJICAgYm9vbCBzdHJlYW1pbmcp Cit7CisJSGVhcFR1cGxlCXR1cGxlOworCWJvb2wJCWlzbnVsbDsKKwlpbnQ2NAkJbGFzdF92 YWx1ZSwgbG9nX2NudDsKKwlib29sCQlpc19jYWxsZWQ7CisKKwl0dXBsZSA9ICZjaGFuZ2Ut PmRhdGEuc2VxdWVuY2UudHVwbGUtPnR1cGxlOworCisJLyoKKwkgKiBFeHRyYWN0IHRoZSBp bnRlcm5hbCBzZXF1ZW5jZSB2YWx1ZXMsIGRlc2NyaWJpbmcgdGhlIHN0YXRlLgorCSAqCisJ ICogWFhYIFNlZW1zIGEgYml0IHN0cmFuZ2UgdG8gYWNjZXNzIGl0IGRpcmVjdGx5LiBNYXli ZSB0aGVyZSdzCisJICogYSBiZXR0ZXIgLyBtb3JlIGNvcnJlY3Qgd2F5PworCSAqLworCWxh c3RfdmFsdWUgPSBoZWFwX2dldGF0dHIodHVwbGUsIDEsIFJlbGF0aW9uR2V0RGVzY3IocmVs YXRpb24pLCAmaXNudWxsKTsKKwlsb2dfY250ID0gaGVhcF9nZXRhdHRyKHR1cGxlLCAyLCBS ZWxhdGlvbkdldERlc2NyKHJlbGF0aW9uKSwgJmlzbnVsbCk7CisJaXNfY2FsbGVkID0gaGVh cF9nZXRhdHRyKHR1cGxlLCAzLCBSZWxhdGlvbkdldERlc2NyKHJlbGF0aW9uKSwgJmlzbnVs bCk7CisKKwkvKiBPbmx5IGV2ZXIgY2FsbGVkIGZyb20gUmVvcmRlckJ1ZmZlckFwcGx5U2Vx dWVuY2UsIHNvIHRyYW5zYXRpb25hbC4gKi8KKwlpZiAoc3RyZWFtaW5nKQorCQlyYi0+c3Ry ZWFtX3NlcXVlbmNlKHJiLCB0eG4sIGNoYW5nZS0+bHNuLCByZWxhdGlvbiwgdHJ1ZSwKKwkJ CQkJCQljaGFuZ2UtPmRhdGEuc2VxdWVuY2UuY3JlYXRlZCwKKwkJCQkJCQlsYXN0X3ZhbHVl LCBsb2dfY250LCBpc19jYWxsZWQpOworCWVsc2UKKwkJcmItPnNlcXVlbmNlKHJiLCB0eG4s IGNoYW5nZS0+bHNuLCByZWxhdGlvbiwgdHJ1ZSwKKwkJCQkJIGNoYW5nZS0+ZGF0YS5zZXF1 ZW5jZS5jcmVhdGVkLAorCQkJCQkgbGFzdF92YWx1ZSwgbG9nX2NudCwgaXNfY2FsbGVkKTsK K30KKwogLyoKICAqIEZ1bmN0aW9uIHRvIHN0b3JlIHRoZSBjb21tYW5kIGlkIGFuZCBzbmFw c2hvdCBhdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50CiAgKiBzdHJlYW0gc28gdGhhdCB3ZSBj YW4gcmV1c2UgdGhlIHNhbWUgd2hpbGUgc2VuZGluZyB0aGUgbmV4dCBzdHJlYW0uCkBAIC0y MzkyLDYgKzI3MTgsMzEgQEAgUmVvcmRlckJ1ZmZlclByb2Nlc3NUWE4oUmVvcmRlckJ1ZmZl ciAqcmIsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQljYXNlIFJFT1JERVJfQlVGRkVS X0NIQU5HRV9JTlRFUk5BTF9UVVBMRUNJRDoKIAkJCQkJZWxvZyhFUlJPUiwgInR1cGxlY2lk IHZhbHVlIGluIGNoYW5nZXF1ZXVlIik7CiAJCQkJCWJyZWFrOworCisJCQkJY2FzZSBSRU9S REVSX0JVRkZFUl9DSEFOR0VfU0VRVUVOQ0U6CisJCQkJCUFzc2VydChzbmFwc2hvdF9ub3cp OworCisJCQkJCXJlbG9pZCA9IFJlbGlkQnlSZWxmaWxlbm9kZShjaGFuZ2UtPmRhdGEuc2Vx dWVuY2UucmVsbm9kZS5zcGNOb2RlLAorCQkJCQkJCQkJCQkJY2hhbmdlLT5kYXRhLnNlcXVl bmNlLnJlbG5vZGUucmVsTm9kZSk7CisKKwkJCQkJaWYgKHJlbG9pZCA9PSBJbnZhbGlkT2lk KQorCQkJCQkJZWxvZyhFUlJPUiwgImNvdWxkIG5vdCBtYXAgZmlsZW5vZGUgXCIlc1wiIHRv IHJlbGF0aW9uIE9JRCIsCisJCQkJCQkJIHJlbHBhdGhwZXJtKGNoYW5nZS0+ZGF0YS5zZXF1 ZW5jZS5yZWxub2RlLAorCQkJCQkJCQkJCSBNQUlOX0ZPUktOVU0pKTsKKworCQkJCQlyZWxh dGlvbiA9IFJlbGF0aW9uSWRHZXRSZWxhdGlvbihyZWxvaWQpOworCisJCQkJCWlmICghUmVs YXRpb25Jc1ZhbGlkKHJlbGF0aW9uKSkKKwkJCQkJCWVsb2coRVJST1IsICJjb3VsZCBub3Qg b3BlbiByZWxhdGlvbiB3aXRoIE9JRCAldSAoZm9yIGZpbGVub2RlIFwiJXNcIikiLAorCQkJ CQkJCSByZWxvaWQsCisJCQkJCQkJIHJlbHBhdGhwZXJtKGNoYW5nZS0+ZGF0YS5zZXF1ZW5j ZS5yZWxub2RlLAorCQkJCQkJCQkJCSBNQUlOX0ZPUktOVU0pKTsKKworCQkJCQlpZiAoUmVs YXRpb25Jc0xvZ2ljYWxseUxvZ2dlZChyZWxhdGlvbikpCisJCQkJCQlSZW9yZGVyQnVmZmVy QXBwbHlTZXF1ZW5jZShyYiwgdHhuLCByZWxhdGlvbiwgY2hhbmdlLCBzdHJlYW1pbmcpOwor CisJCQkJCVJlbGF0aW9uQ2xvc2UocmVsYXRpb24pOworCQkJCQlicmVhazsKIAkJCX0KIAkJ fQogCkBAIC0zNzc2LDYgKzQxMjcsMzkgQEAgUmVvcmRlckJ1ZmZlclNlcmlhbGl6ZUNoYW5n ZShSZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCW1lbWNw eShkYXRhLCBjaGFuZ2UtPmRhdGEudHJ1bmNhdGUucmVsaWRzLCBzaXplKTsKIAkJCQlkYXRh ICs9IHNpemU7CiAKKwkJCQlicmVhazsKKwkJCX0KKwkJY2FzZSBSRU9SREVSX0JVRkZFUl9D SEFOR0VfU0VRVUVOQ0U6CisJCQl7CisJCQkJY2hhcgkgICAqZGF0YTsKKwkJCQlSZW9yZGVy QnVmZmVyVHVwbGVCdWYgKnR1cDsKKwkJCQlTaXplCQlsZW4gPSAwOworCisJCQkJdHVwID0g Y2hhbmdlLT5kYXRhLnNlcXVlbmNlLnR1cGxlOworCisJCQkJaWYgKHR1cCkKKwkJCQl7CisJ CQkJCXN6ICs9IHNpemVvZihIZWFwVHVwbGVEYXRhKTsKKwkJCQkJbGVuID0gdHVwLT50dXBs ZS50X2xlbjsKKwkJCQkJc3ogKz0gbGVuOworCQkJCX0KKworCQkJCS8qIG1ha2Ugc3VyZSB3 ZSBoYXZlIGVub3VnaCBzcGFjZSAqLworCQkJCVJlb3JkZXJCdWZmZXJTZXJpYWxpemVSZXNl cnZlKHJiLCBzeik7CisKKwkJCQlkYXRhID0gKChjaGFyICopIHJiLT5vdXRidWYpICsgc2l6 ZW9mKFJlb3JkZXJCdWZmZXJEaXNrQ2hhbmdlKTsKKwkJCQkvKiBtaWdodCBoYXZlIGJlZW4g cmVhbGxvY2F0ZWQgYWJvdmUgKi8KKwkJCQlvbmRpc2sgPSAoUmVvcmRlckJ1ZmZlckRpc2tD aGFuZ2UgKikgcmItPm91dGJ1ZjsKKworCQkJCWlmIChsZW4pCisJCQkJeworCQkJCQltZW1j cHkoZGF0YSwgJnR1cC0+dHVwbGUsIHNpemVvZihIZWFwVHVwbGVEYXRhKSk7CisJCQkJCWRh dGEgKz0gc2l6ZW9mKEhlYXBUdXBsZURhdGEpOworCisJCQkJCW1lbWNweShkYXRhLCB0dXAt PnR1cGxlLnRfZGF0YSwgbGVuKTsKKwkJCQkJZGF0YSArPSBsZW47CisJCQkJfQorCiAJCQkJ YnJlYWs7CiAJCQl9CiAJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVEVSTkFMX1NQ RUNfQ09ORklSTToKQEAgLTQwNDAsNiArNDQyNCwyMiBAQCBSZW9yZGVyQnVmZmVyQ2hhbmdl U2l6ZShSZW9yZGVyQnVmZmVyQ2hhbmdlICpjaGFuZ2UpCiAJCQl7CiAJCQkJc3ogKz0gc2l6 ZW9mKE9pZCkgKiBjaGFuZ2UtPmRhdGEudHJ1bmNhdGUubnJlbGlkczsKIAorCQkJCWJyZWFr OworCQkJfQorCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9TRVFVRU5DRToKKwkJCXsK KwkJCQlSZW9yZGVyQnVmZmVyVHVwbGVCdWYgKnR1cDsKKwkJCQlTaXplCQlsZW4gPSAwOwor CisJCQkJdHVwID0gY2hhbmdlLT5kYXRhLnNlcXVlbmNlLnR1cGxlOworCisJCQkJaWYgKHR1 cCkKKwkJCQl7CisJCQkJCXN6ICs9IHNpemVvZihIZWFwVHVwbGVEYXRhKTsKKwkJCQkJbGVu ID0gdHVwLT50dXBsZS50X2xlbjsKKwkJCQkJc3ogKz0gbGVuOworCQkJCX0KKwogCQkJCWJy ZWFrOwogCQkJfQogCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlRFUk5BTF9TUEVD X0NPTkZJUk06CkBAIC00MzQxLDYgKzQ3NDEsMzAgQEAgUmVvcmRlckJ1ZmZlclJlc3RvcmVD aGFuZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAogCQkJ CWJyZWFrOwogCQkJfQorCisJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX1NFUVVFTkNF OgorCQkJaWYgKGNoYW5nZS0+ZGF0YS5zZXF1ZW5jZS50dXBsZSkKKwkJCXsKKwkJCQl1aW50 MzIJCXR1cGxlbGVuID0gKChIZWFwVHVwbGUpIGRhdGEpLT50X2xlbjsKKworCQkJCWNoYW5n ZS0+ZGF0YS5zZXF1ZW5jZS50dXBsZSA9CisJCQkJCVJlb3JkZXJCdWZmZXJHZXRUdXBsZUJ1 ZihyYiwgdHVwbGVsZW4gLSBTaXplb2ZIZWFwVHVwbGVIZWFkZXIpOworCisJCQkJLyogcmVz dG9yZSAtPnR1cGxlICovCisJCQkJbWVtY3B5KCZjaGFuZ2UtPmRhdGEuc2VxdWVuY2UudHVw bGUtPnR1cGxlLCBkYXRhLAorCQkJCQkgICBzaXplb2YoSGVhcFR1cGxlRGF0YSkpOworCQkJ CWRhdGEgKz0gc2l6ZW9mKEhlYXBUdXBsZURhdGEpOworCisJCQkJLyogcmVzZXQgdF9kYXRh IHBvaW50ZXIgaW50byB0aGUgbmV3IHR1cGxlYnVmICovCisJCQkJY2hhbmdlLT5kYXRhLnNl cXVlbmNlLnR1cGxlLT50dXBsZS50X2RhdGEgPQorCQkJCQlSZW9yZGVyQnVmZmVyVHVwbGVC dWZEYXRhKGNoYW5nZS0+ZGF0YS5zZXF1ZW5jZS50dXBsZSk7CisKKwkJCQkvKiByZXN0b3Jl IHR1cGxlIGRhdGEgaXRzZWxmICovCisJCQkJbWVtY3B5KGNoYW5nZS0+ZGF0YS5zZXF1ZW5j ZS50dXBsZS0+dHVwbGUudF9kYXRhLCBkYXRhLCB0dXBsZWxlbik7CisJCQkJZGF0YSArPSB0 dXBsZWxlbjsKKwkJCX0KKwkJCWJyZWFrOworCiAJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hB TkdFX0lOVEVSTkFMX1NQRUNfQ09ORklSTToKIAkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFO R0VfSU5URVJOQUxfU1BFQ19BQk9SVDoKIAkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0Vf SU5URVJOQUxfQ09NTUFORF9JRDoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRz L3NlcXVlbmNlLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5jZS5oCmluZGV4IDQw NTQ0ZGQ0YzcuLjU5MTlmYjkwZWUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRz L3NlcXVlbmNlLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvc2VxdWVuY2UuaApAQCAt NDgsNiArNDgsNyBAQCB0eXBlZGVmIEZvcm1EYXRhX3BnX3NlcXVlbmNlX2RhdGEgKkZvcm1f cGdfc2VxdWVuY2VfZGF0YTsKIHR5cGVkZWYgc3RydWN0IHhsX3NlcV9yZWMKIHsKIAlSZWxG aWxlTm9kZSBub2RlOworCWJvb2wJCWNyZWF0ZWQ7CS8qIGlzIHRoaXMgYSBDUkVBVEUgU0VR VUVOQ0UgKi8KIAkvKiBTRVFVRU5DRSBUVVBMRSBEQVRBIEZPTExPV1MgQVQgVEhFIEVORCAq LwogfSB4bF9zZXFfcmVjOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi9vdXRwdXRfcGx1Z2luLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vdXRwdXRfcGx1 Z2luLmgKaW5kZXggODEwNDk1ZWQwZS4uNTdiYzEzZjExYyAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvcmVwbGljYXRpb24vb3V0cHV0X3BsdWdpbi5oCisrKyBiL3NyYy9pbmNsdWRlL3Jl cGxpY2F0aW9uL291dHB1dF9wbHVnaW4uaApAQCAtODgsNiArODgsMTkgQEAgdHlwZWRlZiB2 b2lkICgqTG9naWNhbERlY29kZU1lc3NhZ2VDQikgKHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdD b250ZXh0ICpjdHgsCiAJCQkJCQkJCQkJU2l6ZSBtZXNzYWdlX3NpemUsCiAJCQkJCQkJCQkJ Y29uc3QgY2hhciAqbWVzc2FnZSk7CiAKKy8qCisgKiBDYWxsZWQgZm9yIHRoZSBnZW5lcmlj IGxvZ2ljYWwgZGVjb2Rpbmcgc2VxdWVuY2VzLgorICovCit0eXBlZGVmIHZvaWQgKCpMb2dp Y2FsRGVjb2RlU2VxdWVuY2VDQikgKHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpj dHgsCisJCQkJCQkJCQkJIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJCQkJCQkgWExv Z1JlY1B0ciBzZXF1ZW5jZV9sc24sCisJCQkJCQkJCQkJIFJlbGF0aW9uIHJlbCwKKwkJCQkJ CQkJCQkgYm9vbCB0cmFuc2FjdGlvbmFsLAorCQkJCQkJCQkJCSBib29sIGNyZWF0ZWQsCisJ CQkJCQkJCQkJIGludDY0IGxhc3RfdmFsdWUsCisJCQkJCQkJCQkJIGludDY0IGxvZ19jbnQs CisJCQkJCQkJCQkJIGJvb2wgaXNfY2FsbGVkKTsKKwogLyoKICAqIEZpbHRlciBjaGFuZ2Vz IGJ5IG9yaWdpbi4KICAqLwpAQCAtMTk5LDYgKzIxMiwyMCBAQCB0eXBlZGVmIHZvaWQgKCpM b2dpY2FsRGVjb2RlU3RyZWFtTWVzc2FnZUNCKSAoc3RydWN0IExvZ2ljYWxEZWNvZGluZ0Nv bnRleHQgKmN0eAogCQkJCQkJCQkJCQkgIFNpemUgbWVzc2FnZV9zaXplLAogCQkJCQkJCQkJ CQkgIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwogCisvKgorICogQ2FsbGVkIGZvciB0aGUgc3Ry ZWFtaW5nIGdlbmVyaWMgbG9naWNhbCBkZWNvZGluZyBzZXF1ZW5jZXMgZnJvbSBpbi1wcm9n cmVzcworICogdHJhbnNhY3Rpb25zLgorICovCit0eXBlZGVmIHZvaWQgKCpMb2dpY2FsRGVj b2RlU3RyZWFtU2VxdWVuY2VDQikgKHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpj dHgsCisJCQkJCQkJCQkJCSAgIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJCQkJCQkJ ICAgWExvZ1JlY1B0ciBzZXF1ZW5jZV9sc24sCisJCQkJCQkJCQkJCSAgIFJlbGF0aW9uIHJl bCwKKwkJCQkJCQkJCQkJICAgYm9vbCB0cmFuc2FjdGlvbmFsLAorCQkJCQkJCQkJCQkgICBi b29sIGNyZWF0ZWQsCisJCQkJCQkJCQkJCSAgIGludDY0IGxhc3RfdmFsdWUsCisJCQkJCQkJ CQkJCSAgIGludDY0IGxvZ19jbnQsCisJCQkJCQkJCQkJCSAgIGJvb2wgaXNfY2FsbGVkKTsK KwogLyoKICAqIENhbGxiYWNrIGZvciBzdHJlYW1pbmcgdHJ1bmNhdGVzIGZyb20gaW4tcHJv Z3Jlc3MgdHJhbnNhY3Rpb25zLgogICovCkBAIC0yMTksNiArMjQ2LDcgQEAgdHlwZWRlZiBz dHJ1Y3QgT3V0cHV0UGx1Z2luQ2FsbGJhY2tzCiAJTG9naWNhbERlY29kZVRydW5jYXRlQ0Ig dHJ1bmNhdGVfY2I7CiAJTG9naWNhbERlY29kZUNvbW1pdENCIGNvbW1pdF9jYjsKIAlMb2dp Y2FsRGVjb2RlTWVzc2FnZUNCIG1lc3NhZ2VfY2I7CisJTG9naWNhbERlY29kZVNlcXVlbmNl Q0Igc2VxdWVuY2VfY2I7CiAJTG9naWNhbERlY29kZUZpbHRlckJ5T3JpZ2luQ0IgZmlsdGVy X2J5X29yaWdpbl9jYjsKIAlMb2dpY2FsRGVjb2RlU2h1dGRvd25DQiBzaHV0ZG93bl9jYjsK IApAQCAtMjM3LDYgKzI2NSw3IEBAIHR5cGVkZWYgc3RydWN0IE91dHB1dFBsdWdpbkNhbGxi YWNrcwogCUxvZ2ljYWxEZWNvZGVTdHJlYW1Db21taXRDQiBzdHJlYW1fY29tbWl0X2NiOwog CUxvZ2ljYWxEZWNvZGVTdHJlYW1DaGFuZ2VDQiBzdHJlYW1fY2hhbmdlX2NiOwogCUxvZ2lj YWxEZWNvZGVTdHJlYW1NZXNzYWdlQ0Igc3RyZWFtX21lc3NhZ2VfY2I7CisJTG9naWNhbERl Y29kZVN0cmVhbVNlcXVlbmNlQ0Igc3RyZWFtX3NlcXVlbmNlX2NiOwogCUxvZ2ljYWxEZWNv ZGVTdHJlYW1UcnVuY2F0ZUNCIHN0cmVhbV90cnVuY2F0ZV9jYjsKIH0gT3V0cHV0UGx1Z2lu Q2FsbGJhY2tzOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9y ZGVyYnVmZmVyLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmgK aW5kZXggNWI0MGZmNzVmNy4uNjNlNmVkMDM3YiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv cmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0 aW9uL3Jlb3JkZXJidWZmZXIuaApAQCAtNjQsNyArNjQsOCBAQCBlbnVtIFJlb3JkZXJCdWZm ZXJDaGFuZ2VUeXBlCiAJUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVEVSTkFMX1NQRUNfSU5T RVJULAogCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlRFUk5BTF9TUEVDX0NPTkZJUk0sCiAJ UkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVEVSTkFMX1NQRUNfQUJPUlQsCi0JUkVPUkRFUl9C VUZGRVJfQ0hBTkdFX1RSVU5DQVRFCisJUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX1RSVU5DQVRF LAorCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9TRVFVRU5DRQogfTsKIAogLyogZm9yd2FyZCBk ZWNsYXJhdGlvbiAqLwpAQCAtMTU4LDYgKzE1OSwxNCBAQCB0eXBlZGVmIHN0cnVjdCBSZW9y ZGVyQnVmZmVyQ2hhbmdlCiAJCQl1aW50MzIJCW5pbnZhbGlkYXRpb25zOyAvKiBOdW1iZXIg b2YgbWVzc2FnZXMgKi8KIAkJCVNoYXJlZEludmFsaWRhdGlvbk1lc3NhZ2UgKmludmFsaWRh dGlvbnM7CS8qIGludmFsaWRhdGlvbiBtZXNzYWdlICovCiAJCX0JCQlpbnZhbDsKKworCQkv KiBDb250ZXh0IGRhdGEgZm9yIFNlcXVlbmNlIGNoYW5nZXMgKi8KKwkJc3RydWN0CisJCXsK KwkJCVJlbEZpbGVOb2RlIHJlbG5vZGU7CisJCQlib29sCQljcmVhdGVkOworCQkJUmVvcmRl ckJ1ZmZlclR1cGxlQnVmICp0dXBsZTsKKwkJfQkJCXNlcXVlbmNlOwogCX0JCQlkYXRhOwog CiAJLyoKQEAgLTQzMCw2ICs0MzksMTUgQEAgdHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZl ck1lc3NhZ2VDQikgKFJlb3JkZXJCdWZmZXIgKnJiLAogCQkJCQkJCQkJCWNvbnN0IGNoYXIg KnByZWZpeCwgU2l6ZSBzeiwKIAkJCQkJCQkJCQljb25zdCBjaGFyICptZXNzYWdlKTsKIAor Lyogc2VxdWVuY2UgY2FsbGJhY2sgc2lnbmF0dXJlICovCit0eXBlZGVmIHZvaWQgKCpSZW9y ZGVyQnVmZmVyU2VxdWVuY2VDQikgKFJlb3JkZXJCdWZmZXIgKnJiLAorCQkJCQkJCQkJCSBS ZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCQkJIFhMb2dSZWNQdHIgc2VxdWVuY2Vf bHNuLAorCQkJCQkJCQkJCSBSZWxhdGlvbiByZWwsCisJCQkJCQkJCQkJIGJvb2wgdHJhbnNh Y3Rpb25hbCwgYm9vbCBjcmVhdGVkLAorCQkJCQkJCQkJCSBpbnQ2NCBsYXN0X3ZhbHVlLCBp bnQ2NCBsb2dfY250LAorCQkJCQkJCQkJCSBib29sIGlzX2NhbGxlZCk7CisKIC8qIGJlZ2lu IHByZXBhcmUgY2FsbGJhY2sgc2lnbmF0dXJlICovCiB0eXBlZGVmIHZvaWQgKCpSZW9yZGVy QnVmZmVyQmVnaW5QcmVwYXJlQ0IpIChSZW9yZGVyQnVmZmVyICpyYiwKIAkJCQkJCQkJCQkJ IFJlb3JkZXJCdWZmZXJUWE4gKnR4bik7CkBAIC00OTYsNiArNTE0LDE1IEBAIHR5cGVkZWYg dm9pZCAoKlJlb3JkZXJCdWZmZXJTdHJlYW1NZXNzYWdlQ0IpICgKIAkJCQkJCQkJCQkJICBj b25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3osCiAJCQkJCQkJCQkJCSAgY29uc3QgY2hhciAq bWVzc2FnZSk7CiAKKy8qIHN0cmVhbSBzZXF1ZW5jZSBjYWxsYmFjayBzaWduYXR1cmUgKi8K K3R5cGVkZWYgdm9pZCAoKlJlb3JkZXJCdWZmZXJTdHJlYW1TZXF1ZW5jZUNCKSAoUmVvcmRl ckJ1ZmZlciAqcmIsCisJCQkJCQkJCQkJCSAgIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJ CQkJCQkJCQkJICAgWExvZ1JlY1B0ciBzZXF1ZW5jZV9sc24sCisJCQkJCQkJCQkJCSAgIFJl bGF0aW9uIHJlbCwKKwkJCQkJCQkJCQkJICAgYm9vbCB0cmFuc2FjdGlvbmFsLCBib29sIGNy ZWF0ZWQsCisJCQkJCQkJCQkJCSAgIGludDY0IGxhc3RfdmFsdWUsIGludDY0IGxvZ19jbnQs CisJCQkJCQkJCQkJCSAgIGJvb2wgaXNfY2FsbGVkKTsKKwogLyogc3RyZWFtIHRydW5jYXRl IGNhbGxiYWNrIHNpZ25hdHVyZSAqLwogdHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZlclN0 cmVhbVRydW5jYXRlQ0IpICgKIAkJCQkJCQkJCQkJICAgUmVvcmRlckJ1ZmZlciAqcmIsCkBA IC01MTEsNiArNTM4LDEyIEBAIHN0cnVjdCBSZW9yZGVyQnVmZmVyCiAJICovCiAJSFRBQgkg ICAqYnlfdHhuOwogCisJLyoKKwkgKiByZWxmaWxlbm9kZSA9PiBYSUQgbG9va3VwIHRhYmxl IGZvciBzZXF1ZW5jZXMgY3JlYXRlZCBpbiBhIHRyYW5zYWN0aW9uCisJICogKGFsc28gaW5j bHVkZXMgYWx0ZXJlZCBzZXF1ZW5jZXMsIHdoaWNoIGFzc2lnbnMgbmV3IHJlbGZpbGVub2Rl KQorCSAqLworCUhUQUIJICAgKnNlcXVlbmNlczsKKwogCS8qCiAJICogVHJhbnNhY3Rpb25z IHRoYXQgY291bGQgYmUgYSB0b3BsZXZlbCB4YWN0LCBvcmRlcmVkIGJ5IExTTiBvZiB0aGUg Zmlyc3QKIAkgKiByZWNvcmQgYmVhcmluZyB0aGF0IHhpZC4KQEAgLTU0MSw2ICs1NzQsNyBA QCBzdHJ1Y3QgUmVvcmRlckJ1ZmZlcgogCVJlb3JkZXJCdWZmZXJBcHBseVRydW5jYXRlQ0Ig YXBwbHlfdHJ1bmNhdGU7CiAJUmVvcmRlckJ1ZmZlckNvbW1pdENCIGNvbW1pdDsKIAlSZW9y ZGVyQnVmZmVyTWVzc2FnZUNCIG1lc3NhZ2U7CisJUmVvcmRlckJ1ZmZlclNlcXVlbmNlQ0Ig c2VxdWVuY2U7CiAKIAkvKgogCSAqIENhbGxiYWNrcyB0byBiZSBjYWxsZWQgd2hlbiBzdHJl YW1pbmcgYSB0cmFuc2FjdGlvbiBhdCBwcmVwYXJlIHRpbWUuCkBAIC01NjAsNiArNTk0LDcg QEAgc3RydWN0IFJlb3JkZXJCdWZmZXIKIAlSZW9yZGVyQnVmZmVyU3RyZWFtQ29tbWl0Q0Ig c3RyZWFtX2NvbW1pdDsKIAlSZW9yZGVyQnVmZmVyU3RyZWFtQ2hhbmdlQ0Igc3RyZWFtX2No YW5nZTsKIAlSZW9yZGVyQnVmZmVyU3RyZWFtTWVzc2FnZUNCIHN0cmVhbV9tZXNzYWdlOwor CVJlb3JkZXJCdWZmZXJTdHJlYW1TZXF1ZW5jZUNCIHN0cmVhbV9zZXF1ZW5jZTsKIAlSZW9y ZGVyQnVmZmVyU3RyZWFtVHJ1bmNhdGVDQiBzdHJlYW1fdHJ1bmNhdGU7CiAKIAkvKgpAQCAt NjM1LDYgKzY3MCwxMCBAQCB2b2lkCQlSZW9yZGVyQnVmZmVyUXVldWVDaGFuZ2UoUmVvcmRl ckJ1ZmZlciAqLCBUcmFuc2FjdGlvbklkLAogdm9pZAkJUmVvcmRlckJ1ZmZlclF1ZXVlTWVz c2FnZShSZW9yZGVyQnVmZmVyICosIFRyYW5zYWN0aW9uSWQsIFNuYXBzaG90IHNuYXBzaG90 LCBYTG9nUmVjUHRyIGxzbiwKIAkJCQkJCQkJCSAgYm9vbCB0cmFuc2FjdGlvbmFsLCBjb25z dCBjaGFyICpwcmVmaXgsCiAJCQkJCQkJCQkgIFNpemUgbWVzc2FnZV9zaXplLCBjb25zdCBj aGFyICptZXNzYWdlKTsKK3ZvaWQJCVJlb3JkZXJCdWZmZXJRdWV1ZVNlcXVlbmNlKFJlb3Jk ZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwKKwkJCQkJCQkJCSAgIFNuYXBzaG90 IHNuYXBzaG90LCBYTG9nUmVjUHRyIGxzbiwgUmVwT3JpZ2luSWQgb3JpZ2luX2lkLAorCQkJ CQkJCQkJICAgUmVsRmlsZU5vZGUgcm5vZGUsIGJvb2wgdHJhbnNhY3Rpb25hbCwgYm9vbCBj cmVhdGVkLAorCQkJCQkJCQkJICAgUmVvcmRlckJ1ZmZlclR1cGxlQnVmICp0dXBsZWJ1Zik7 CiB2b2lkCQlSZW9yZGVyQnVmZmVyQ29tbWl0KFJlb3JkZXJCdWZmZXIgKiwgVHJhbnNhY3Rp b25JZCwKIAkJCQkJCQkJWExvZ1JlY1B0ciBjb21taXRfbHNuLCBYTG9nUmVjUHRyIGVuZF9s c24sCiAJCQkJCQkJCVRpbWVzdGFtcFR6IGNvbW1pdF90aW1lLCBSZXBPcmlnaW5JZCBvcmln aW5faWQsIFhMb2dSZWNQdHIgb3JpZ2luX2xzbik7CkBAIC02ODIsNCArNzIxLDcgQEAgdm9p ZAkJUmVvcmRlckJ1ZmZlclNldFJlc3RhcnRQb2ludChSZW9yZGVyQnVmZmVyICosIFhMb2dS ZWNQdHIgcHRyKTsKIAogdm9pZAkJU3RhcnR1cFJlb3JkZXJCdWZmZXIodm9pZCk7CiAKK2Jv b2wJCVJlb3JkZXJCdWZmZXJTZXF1ZW5jZUlzVHJhbnNhY3Rpb25hbChSZW9yZGVyQnVmZmVy ICpyYiwKKwkJCQkJCQkJCQkJCSBSZWxGaWxlTm9kZSBybm9kZSwgYm9vbCBjcmVhdGVkKTsK KwogI2VuZGlmCi0tIAoyLjMxLjEKCg== --------------PSu0kcrJZId8sBgRJ9Ec0YQG--