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 1nYjcx-0001y9-TW for pgsql-hackers@arkaria.postgresql.org; Mon, 28 Mar 2022 07:17:24 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nYjcw-0002uz-It for pgsql-hackers@arkaria.postgresql.org; Mon, 28 Mar 2022 07:17:22 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nYjcw-0002up-0G for pgsql-hackers@lists.postgresql.org; Mon, 28 Mar 2022 07:17:22 +0000 Received: from mail-pl1-x636.google.com ([2607:f8b0:4864:20::636]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1nYjcs-0004CH-J8 for pgsql-hackers@postgresql.org; Mon, 28 Mar 2022 07:17:21 +0000 Received: by mail-pl1-x636.google.com with SMTP id w8so14034573pll.10 for ; Mon, 28 Mar 2022 00:17:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=M+yJ7935hkPi7lWwXWGdPzgcNs/Z+jCL/O9HMVTiOEM=; b=V1OlLbn+iGM6MciFe6cQ1YcgHXc5pEmNFXjBiaIZPmu0VGF/GTq0FUsRxPT+DRHxFW hLnJZq+87FhnrDl62nx87eSdvCiEPh9JRUjrOrMpS6i9A0wvbdYCeaZcsenF6o7bLD+z CFYa5niIjuRiJvrGiN+l8aOmvVoP5cLOA7iCSPkey6xAtC0x1MHZ54o1X2DoOT9R3WAM qAEwqlM9F+oqPJS+U8yTvguwgqlRxuyUmRBO+EI4DoAdx+W/BPH2DGYfcPM02f2j2yKs hXhcM4WEDR0l0KHhGx0ie2O5IlCMDb+vdsk2xsFXGLd6CI/UMWZznr1F5M6gYSZevRPH udUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=M+yJ7935hkPi7lWwXWGdPzgcNs/Z+jCL/O9HMVTiOEM=; b=D94V5IKALywci953Zt6ym487vqeR6jpVqan29sV/aRQ09lZjxGmaKiXtEHR2gtnDpJ ENExxjS3hw9S/TVsGAMbGxI0QrY1EGG0b0V+wJkJgaieQIC4l8h15DgMYYzMvWrh1snu VqwKcHQ7FvaHHTtIeHue5phUMNO8mhhQaXa3veEbcQDVGI5fLhM3dNHJfCuyZFE1Bai4 xY4H38Hr6Itk+TCLAjMpsXC2BA2wduvHGWOGyBZD30AOlcn/urLlpg16bvdEi2CFeYcS J+0zf8kfP0K9D7T/1xTHQL5GSmf4RDEQv25ywO6YuwtHVxS1Prv2oa7CplWWhrRaCU5A UEAA== X-Gm-Message-State: AOAM531OSUGqtdD5piCv0Oo7J/shPCDZ+56cQNPWMs2p4npclBqHlEAm 4fV30Xmswy4Z/g7Zqhjq5DNG07959kqO0FFlRFMwLlB07bI= X-Google-Smtp-Source: ABdhPJw/AAUX7RhMx8U2yDHXkqFXixLMBkeaAuXEdJNEFz28jg37ikl3Sd7uOKwSXsC2iwtODBaLxgM5H0awXNI4x4o= X-Received: by 2002:a17:90a:e54a:b0:1c9:7ee5:abe with SMTP id ei10-20020a17090ae54a00b001c97ee50abemr10697790pjb.128.1648451836356; Mon, 28 Mar 2022 00:17:16 -0700 (PDT) MIME-Version: 1.0 References: <215356.1647286703@sss.pgh.pa.us> In-Reply-To: From: Amit Langote Date: Mon, 28 Mar 2022 16:17:00 +0900 Message-ID: Subject: Re: generic plans and "initial" pruning To: Robert Haas Cc: Tom Lane , PostgreSQL-development , "David Rowley *EXTERN*" Content-Type: multipart/mixed; boundary="00000000000022c13705db421aa9" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000022c13705db421aa9 Content-Type: text/plain; charset="UTF-8" On Tue, Mar 22, 2022 at 9:44 PM Amit Langote wrote: > On Tue, Mar 15, 2022 at 3:19 PM Amit Langote wrote: > > On Tue, Mar 15, 2022 at 5:06 AM Robert Haas wrote: > > > On Mon, Mar 14, 2022 at 3:38 PM Tom Lane wrote: > > > > Also, while I've not spent much time at all reading this patch, > > > > it seems rather desperately undercommented, and a lot of the > > > > new names are unintelligible. In particular, I suspect that the > > > > patch is significantly redesigning when/where run-time pruning > > > > happens (unless it's just letting that be run twice); but I don't > > > > see any documentation or name changes suggesting where that > > > > responsibility is now. > > > > > > I am sympathetic to that concern. I spent a while staring at a > > > baffling comment in 0001 only to discover it had just been moved from > > > elsewhere. I really don't feel that things in this are as clear as > > > they could be -- although I hasten to add that I respect the people > > > who have done work in this area previously and am grateful for what > > > they did. It's been a huge benefit to the project in spite of the > > > bumps in the road. Moreover, this isn't the only code in PostgreSQL > > > that needs improvement, or the worst. That said, I do think there are > > > problems. I don't yet have a position on whether this patch is making > > > that better or worse. > > > > Okay, I'd like to post a new version with the comments edited to make > > them a bit more intelligible. I understand that the comments around > > the new invocation mode(s) of runtime pruning are not as clear as they > > should be, especially as the changes that this patch wants to make to > > how things work are not very localized. > > Actually, another area where the comments may not be as clear as they > should have been is the changes that the patch makes to the > AcquireExecutorLocks() logic that decides which relations are locked > to safeguard the plan tree for execution, which are those given by > RTE_RELATION entries in the range table. > > Without the patch, they are found by actually scanning the range table. > > With the patch, it's the same set of RTEs if the plan doesn't contain > any pruning nodes, though instead of the range table, what is scanned > is a bitmapset of their RT indexes that is made available by the > planner in the form of PlannedStmt.lockrels. When the plan does > contain a pruning node (PlannedStmt.containsInitialPruning), the > bitmapset is constructed by calling ExecutorGetLockRels() on the plan > tree, which walks it to add RT indexes of relations mentioned in the > Scan nodes, while skipping any nodes that are pruned after performing > initial pruning steps that may be present in their containing parent > node's PartitionPruneInfo. Also, the RT indexes of partitioned tables > that are present in the PartitionPruneInfo itself are also added to > the set. > > While expanding comments added by the patch to make this clear, I > realized that there are two problems, one of them quite glaring: > > * Planner's constructing this bitmapset and its copying along with the > PlannedStmt is pure overhead in the cases that this patch has nothing > to do with, which is the kind of thing that Andres cautioned against > upthread. > > * Not all partitioned tables that would have been locked without the > patch to come up with a Append/MergeAppend plan may be returned by > ExecutorGetLockRels(). For example, if none of the query's > runtime-prunable quals were found to match the partition key of an > intermediate partitioned table and thus that partitioned table not > included in the PartitionPruneInfo. Or if an Append/MergeAppend > covering a partition tree doesn't contain any PartitionPruneInfo to > begin with, in which case, only the leaf partitions and none of > partitioned parents would be accounted for by the > ExecutorGetLockRels() logic. > > The 1st one seems easy to fix by not inventing PlannedStmt.lockrels > and just doing what's being done now: scan the range table if > (!PlannedStmt.containsInitialPruning). The attached updated patch does it like this. > The only way perhaps to fix the second one is to reconsider the > decision we made in the following commit: > > commit 52ed730d511b7b1147f2851a7295ef1fb5273776 > Author: Tom Lane > Date: Sun Oct 7 14:33:17 2018 -0400 > > Remove some unnecessary fields from Plan trees. > > In the wake of commit f2343653f, we no longer need some fields that > were used before to control executor lock acquisitions: > > * PlannedStmt.nonleafResultRelations can go away entirely. > > * partitioned_rels can go away from Append, MergeAppend, and ModifyTable. > However, ModifyTable still needs to know the RT index of the partition > root table if any, which was formerly kept in the first entry of that > list. Add a new field "rootRelation" to remember that. rootRelation is > partly redundant with nominalRelation, in that if it's set it will have > the same value as nominalRelation. However, the latter field has a > different purpose so it seems best to keep them distinct. > > That is, add back the partitioned_rels field, at least to Append and > MergeAppend, to store the RT indexes of partitioned tables whose > children's paths are present in Append/MergeAppend.subpaths. And implemented this in the attached 0002 that reintroduces partitioned_rels in Append/MergeAppend nodes as a bitmapset of RT indexes. The set contains the RT indexes of partitioned ancestors whose expansion produced the leaf partitions that a given Append/MergeAppend node scans. This project needs this way of knowing the partitioned tables involved in producing an Append/MergeAppend node, because we'd like to give plancache.c the ability to glean the set of relations to be locked by scanning a plan tree to make the tree ready for execution rather than by scanning the range table and the only relations we're missing in the tree right now are partitioned tables. One fly-in-the-ointment situation I faced when doing that is the fact that setrefs.c in most situations removes the Append/MergeAppend from the final plan if it contains only one child subplan. I got around it by inventing a PlannerGlobal/PlannedStmt.elidedAppendPartedRels set which is a union of partitioned_rels of all the Append/MergeAppend nodes in the plan tree that were removed as described. Other than the changes mentioned above, the updated patch now contains a bit more commentary than earlier versions, mostly around AcquireExecutorLocks()'s new way of determining the set of relations to lock and the significantly redesigned working of the "initial" execution pruning. -- Amit Langote EDB: http://www.enterprisedb.com --00000000000022c13705db421aa9 Content-Type: application/x-patch; name="v6-0003-Add-a-plan_tree_walker.patch" Content-Disposition: attachment; filename="v6-0003-Add-a-plan_tree_walker.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l1admeab1 RnJvbSA0N2EwMGE2YjhjZjY5NWU1ODkwZmM2NTU1ZTJkZjI5ODBlYjIxMTViIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBhbWl0bGFuIDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4KRGF0 ZTogVGh1LCAzIE1hciAyMDIyIDE2OjA0OjEzICswOTAwClN1YmplY3Q6IFtQQVRDSCB2NiAzLzRd IEFkZCBhIHBsYW5fdHJlZV93YWxrZXIoKQoKTGlrZSBwbGFuc3RhdGVfdHJlZV93YWxrZXIoKSBi dXQgZm9yIHVuaW5pdGlhbGl6ZWQgcGxhbiB0cmVlcy4KLS0tCiBzcmMvYmFja2VuZC9ub2Rlcy9u b2RlRnVuY3MuYyB8IDExNiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMv aW5jbHVkZS9ub2Rlcy9ub2RlRnVuY3MuaCB8ICAgMyArCiAyIGZpbGVzIGNoYW5nZWQsIDExOSBp bnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvbm9kZUZ1bmNzLmMg Yi9zcmMvYmFja2VuZC9ub2Rlcy9ub2RlRnVuY3MuYwppbmRleCBlYzI1YWFlNmUzLi5jMTZmOWM2 YjQwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9ub2RlRnVuY3MuYworKysgYi9zcmMv YmFja2VuZC9ub2Rlcy9ub2RlRnVuY3MuYwpAQCAtMzEsNiArMzEsMTAgQEAgc3RhdGljIGJvb2wg cGxhbnN0YXRlX3dhbGtfc3VicGxhbnMoTGlzdCAqcGxhbnMsIGJvb2wgKCp3YWxrZXIpICgpLAog CQkJCQkJCQkJdm9pZCAqY29udGV4dCk7CiBzdGF0aWMgYm9vbCBwbGFuc3RhdGVfd2Fsa19tZW1i ZXJzKFBsYW5TdGF0ZSAqKnBsYW5zdGF0ZXMsIGludCBucGxhbnMsCiAJCQkJCQkJCSAgIGJvb2wg KCp3YWxrZXIpICgpLCB2b2lkICpjb250ZXh0KTsKK3N0YXRpYyBib29sIHBsYW5fd2Fsa19zdWJw bGFucyhMaXN0ICpwbGFucywKKwkJCQkgICBib29sICgqd2Fsa2VyKSAoKSwKKwkJCQkgICB2b2lk ICpjb250ZXh0KTsKK3N0YXRpYyBib29sIHBsYW5fd2Fsa19tZW1iZXJzKExpc3QgKnBsYW5zLCBi b29sICgqd2Fsa2VyKSAoKSwgdm9pZCAqY29udGV4dCk7CiAKIAogLyoKQEAgLTQxNTAsMyArNDE1 NCwxMTUgQEAgcGxhbnN0YXRlX3dhbGtfbWVtYmVycyhQbGFuU3RhdGUgKipwbGFuc3RhdGVzLCBp bnQgbnBsYW5zLAogCiAJcmV0dXJuIGZhbHNlOwogfQorCisvKgorICogcGxhbl90cmVlX3dhbGtl ciAtLS0gd2FsayBwbGFudHJlZXMKKyAqCisgKiBUaGUgd2Fsa2VyIGhhcyBhbHJlYWR5IHZpc2l0 ZWQgdGhlIGN1cnJlbnQgbm9kZSwgYW5kIHNvIHdlIG5lZWQgb25seQorICogcmVjdXJzZSBpbnRv IGFueSBzdWItbm9kZXMgaXQgaGFzLgorICovCitib29sCitwbGFuX3RyZWVfd2Fsa2VyKFBsYW4g KnBsYW4sCisJCQkJIGJvb2wgKCp3YWxrZXIpICgpLAorCQkJCSB2b2lkICpjb250ZXh0KQorewor CS8qIEd1YXJkIGFnYWluc3Qgc3RhY2sgb3ZlcmZsb3cgZHVlIHRvIG92ZXJseSBjb21wbGV4IHBs YW4gdHJlZXMgKi8KKwljaGVja19zdGFja19kZXB0aCgpOworCisJLyogaW5pdFBsYW4tcyAqLwor CWlmIChwbGFuX3dhbGtfc3VicGxhbnMocGxhbi0+aW5pdFBsYW4sIHdhbGtlciwgY29udGV4dCkp CisJCXJldHVybiB0cnVlOworCisJLyogbGVmdHRyZWUgKi8KKwlpZiAob3V0ZXJQbGFuKHBsYW4p KQorCXsKKwkJaWYgKHdhbGtlcihvdXRlclBsYW4ocGxhbiksIGNvbnRleHQpKQorCQkJcmV0dXJu IHRydWU7CisJfQorCisJLyogcmlnaHR0cmVlICovCisJaWYgKGlubmVyUGxhbihwbGFuKSkKKwl7 CisJCWlmICh3YWxrZXIoaW5uZXJQbGFuKHBsYW4pLCBjb250ZXh0KSkKKwkJCXJldHVybiB0cnVl OworCX0KKworCS8qIHNwZWNpYWwgY2hpbGQgcGxhbnMgKi8KKwlzd2l0Y2ggKG5vZGVUYWcocGxh bikpCisJeworCQljYXNlIFRfQXBwZW5kOgorCQkJaWYgKHBsYW5fd2Fsa19tZW1iZXJzKCgoQXBw ZW5kICopIHBsYW4pLT5hcHBlbmRwbGFucywKKwkJCQkJCQkJICB3YWxrZXIsIGNvbnRleHQpKQor CQkJCXJldHVybiB0cnVlOworCQkJYnJlYWs7CisJCWNhc2UgVF9NZXJnZUFwcGVuZDoKKwkJCWlm IChwbGFuX3dhbGtfbWVtYmVycygoKE1lcmdlQXBwZW5kICopIHBsYW4pLT5tZXJnZXBsYW5zLAor CQkJCQkJCQkgIHdhbGtlciwgY29udGV4dCkpCisJCQkJcmV0dXJuIHRydWU7CisJCQlicmVhazsK KwkJY2FzZSBUX0JpdG1hcEFuZDoKKwkJCWlmIChwbGFuX3dhbGtfbWVtYmVycygoKEJpdG1hcEFu ZCAqKSBwbGFuKS0+Yml0bWFwcGxhbnMsCisJCQkJCQkJCSAgd2Fsa2VyLCBjb250ZXh0KSkKKwkJ CQlyZXR1cm4gdHJ1ZTsKKwkJCWJyZWFrOworCQljYXNlIFRfQml0bWFwT3I6CisJCQlpZiAocGxh bl93YWxrX21lbWJlcnMoKChCaXRtYXBPciAqKSBwbGFuKS0+Yml0bWFwcGxhbnMsCisJCQkJCQkJ CSAgd2Fsa2VyLCBjb250ZXh0KSkKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCWJyZWFrOworCQljYXNl IFRfQ3VzdG9tU2NhbjoKKwkJCWlmIChwbGFuX3dhbGtfbWVtYmVycygoKEN1c3RvbVNjYW4gKikg cGxhbiktPmN1c3RvbV9wbGFucywKKwkJCQkJCQkJICB3YWxrZXIsIGNvbnRleHQpKQorCQkJCXJl dHVybiB0cnVlOworCQkJYnJlYWs7CisJCWNhc2UgVF9TdWJxdWVyeVNjYW46CisJCQlpZiAod2Fs a2VyKCgoU3VicXVlcnlTY2FuICopIHBsYW4pLT5zdWJwbGFuLCBjb250ZXh0KSkKKwkJCQlyZXR1 cm4gdHJ1ZTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJfQorCisJcmV0dXJu IGZhbHNlOworfQorCisvKgorICogV2FsayBhIGxpc3Qgb2YgU3ViUGxhbnMgKG9yIGluaXRQbGFu cywgd2hpY2ggYWxzbyB1c2UgU3ViUGxhbiBub2RlcykuCisgKi8KK3N0YXRpYyBib29sCitwbGFu X3dhbGtfc3VicGxhbnMoTGlzdCAqcGxhbnMsCisJCQkJICAgYm9vbCAoKndhbGtlcikgKCksCisJ CQkJICAgdm9pZCAqY29udGV4dCkKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKwlQbGFubmVkU3RtdCAq cGxhbm5lZHN0bXQgPSAoUGxhbm5lZFN0bXQgKikgY29udGV4dDsKKworCWZvcmVhY2gobGMsIHBs YW5zKQorCXsKKwkJU3ViUGxhbiAqc3AgPSBsZmlyc3Rfbm9kZShTdWJQbGFuLCBsYyk7CisJCVBs YW4gKnAgPSBsaXN0X250aChwbGFubmVkc3RtdC0+c3VicGxhbnMsIHNwLT5wbGFuX2lkIC0gMSk7 CisKKwkJaWYgKHdhbGtlcihwLCBjb250ZXh0KSkKKwkJCXJldHVybiB0cnVlOworCX0KKworCXJl dHVybiBmYWxzZTsKK30KKworLyoKKyAqIFdhbGsgdGhlIGNvbnN0aXR1ZW50IHBsYW5zIG9mIGEg TW9kaWZ5VGFibGUsIEFwcGVuZCwgTWVyZ2VBcHBlbmQsCisgKiBCaXRtYXBBbmQsIG9yIEJpdG1h cE9yIG5vZGUuCisgKi8KK3N0YXRpYyBib29sCitwbGFuX3dhbGtfbWVtYmVycyhMaXN0ICpwbGFu cywgYm9vbCAoKndhbGtlcikgKCksIHZvaWQgKmNvbnRleHQpCit7CisJTGlzdENlbGwgKmxjOwor CisJZm9yZWFjaChsYywgcGxhbnMpCisJeworCQlpZiAod2Fsa2VyKGxmaXJzdChsYyksIGNvbnRl eHQpKQorCQkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvbm9kZXMvbm9kZUZ1bmNzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9ub2Rl RnVuY3MuaAppbmRleCA5M2M2MGJkZTY2Li5mY2ExMDdhZDY1IDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9ub2Rlcy9ub2RlRnVuY3MuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9ub2RlRnVuY3Mu aApAQCAtMTU4LDUgKzE1OCw4IEBAIGV4dGVybiBib29sIHJhd19leHByZXNzaW9uX3RyZWVfd2Fs a2VyKE5vZGUgKm5vZGUsIGJvb2wgKCp3YWxrZXIpICgpLAogc3RydWN0IFBsYW5TdGF0ZTsKIGV4 dGVybiBib29sIHBsYW5zdGF0ZV90cmVlX3dhbGtlcihzdHJ1Y3QgUGxhblN0YXRlICpwbGFuc3Rh dGUsIGJvb2wgKCp3YWxrZXIpICgpLAogCQkJCQkJCQkgIHZvaWQgKmNvbnRleHQpOworc3RydWN0 IFBsYW47CitleHRlcm4gYm9vbCBwbGFuX3RyZWVfd2Fsa2VyKHN0cnVjdCBQbGFuICpwbGFuLCBi b29sICgqd2Fsa2VyKSAoKSwKKwkJCQkgdm9pZCAqY29udGV4dCk7CiAKICNlbmRpZgkJCQkJCQkv KiBOT0RFRlVOQ1NfSCAqLwotLSAKMi4yNC4xCgo= --00000000000022c13705db421aa9 Content-Type: application/x-patch; name="v6-0002-Add-Merge-Append.partitioned_rels.patch" Content-Disposition: attachment; filename="v6-0002-Add-Merge-Append.partitioned_rels.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l1admead2 RnJvbSA4YzgxMjM3NDAyOTIyZWJmODI3ODZmM2ZmMzQ5NzJhNmEzY2I4YzAzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBhbWl0bGFuIDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4KRGF0 ZTogVGh1LCAyNCBNYXIgMjAyMiAyMjo0NzowMyArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjYgMi80 XSBBZGQgW01lcmdlXUFwcGVuZC5wYXJ0aXRpb25lZF9yZWxzCgpUbyByZWNvcmQgdGhlIFJUIGlu ZGV4ZXMgb2YgYWxsIHBhcnRpdGlvbmVkIGFuY2VzdG9ycyBsZWFkaW5nIHVwIHRvCmxlYWYgcGFy dGl0aW9ucyB0aGF0IGFyZSBhcHBlbmRlZCBieSB0aGUgbm9kZS4KCklmIGEgZ2l2ZW4gW01lcmdl XUFwcGVuZCBub2RlIGlzIGxlZnQgb3V0IGZyb20gdGhlIHBsYW4gZHVlIHRvIHRoZXJlCmJlaW5n IG9ubHkgb25lIGVsZW1lbnQgaW4gaXRzIGxpc3Qgb2YgY2hpbGQgc3VicGxhbnMsIHRoZW4gaXRz CnBhcnRpdGlvbmVkX3JlbHMgc2V0IGlzIGFkZGVkIHRvIFBsYW5uZXJHbG9iYWwuZWxpZGVkQXBw ZW5kUGFydGVkUmVscwp0aGF0IGlzIHBhc3NlZCBkb3duIHRvIHRoZSBleGVjdXRvciB0aHJvdWdo IFBsYW5uZWRTdG10LgoKVGhlcmUgYXJlIG5vIHVzZXJzIGZvciBwYXJ0aXRpb25lZF9yZWxzIGFu ZCBlbGlkZWRBcHBlbmRQYXJ0ZWRSZWxzCmFzIG9mIHRoaXMgY29tbWl0LCB0aG91Z2ggYSBsYXRl ciBjb21taXQgd2lsbCByZXF1aXJlIHRoZSBhYmlsaXR5CnRvIGV4dHJhY3QgdGhlIHNldCBvZiBy ZWxhdGlvbnMgdGhhdCBtdXN0IGJlIGxvY2tlZCB0byBtYWtlIGEgcGxhbgp0cmVlIHNhZmUgZm9y IGV4ZWN1dGlvbiBieSB3YWxraW5nIHRoZSBwbGFuIHRyZWUgaXRzZWxmLCBzbyBoYXZpbmcKdGhl IHBhcnRpdGlvbmVkIHRhYmxlcyBiZSBhbHNvIHByZXNlbnQgaW4gdGhlIHBsYW4gdHJlZSB3aWxs IGJlCmhlbHBmdWwuICBOb3RlIHRoYXQgY3VycmVudGx5IHRoZSBleGVjdXRvciByZWxpZXMgb24g dGhlIGZhY3QgdGhhdAp0aGUgc2V0IG9mIHJlbGF0aW9ucyB0byBiZSBsb2NrZWQgY2FuIGJlIG9i dGFpbmVkIGJ5IHNpbXBseSBzY2FubmluZwp0aGUgcmFuZ2UgdGFibGUgdGhhdCdzIG1hZGUgYXZh aWxhYmxlIGluIFBsYW5uZWRTdG10IGFsb25nIHdpdGggdGhlCnBsYW4gdHJlZS4KLS0tCiBzcmMv YmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYyAgICAgICAgICAgfCAgMyArKysKIHNyYy9iYWNrZW5k L25vZGVzL291dGZ1bmNzLmMgICAgICAgICAgICB8ICA1ICsrKysrCiBzcmMvYmFja2VuZC9ub2Rl cy9yZWFkZnVuY3MuYyAgICAgICAgICAgfCAgMyArKysKIHNyYy9iYWNrZW5kL29wdGltaXplci9w YXRoL2pvaW5yZWxzLmMgICB8ICA5ICsrKysrKysrCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9jcmVhdGVwbGFuLmMgfCAxOCArKysrKysrKysrKysrKystCiBzcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGxhbi9wbGFubmVyLmMgICAgfCAgOCArKysrKysrCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGxhbi9zZXRyZWZzLmMgICAgfCAyOCArKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmFj a2VuZC9vcHRpbWl6ZXIvdXRpbC9pbmhlcml0LmMgICAgfCAxNiArKysrKysrKysrKysrKwogc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jICAgIHwgMjAgKysrKysrKysrKysrKysr KysrCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCAgICAgICAgICAgfCAyMiArKysrKysr KysrKysrKysrKysrCiBzcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaCAgICAgICAgICAgfCAx NyArKysrKysrKysrKysrKysKIDExIGZpbGVzIGNoYW5nZWQsIDE0OCBpbnNlcnRpb25zKCspLCAx IGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvY29weWZ1bmNzLmMg Yi9zcmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYwppbmRleCA1NWY3MjBhODhmLi5kYzY4YTEy NDg2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYworKysgYi9zcmMv YmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYwpAQCAtMTA2LDYgKzEwNiw3IEBAIF9jb3B5UGxhbm5l ZFN0bXQoY29uc3QgUGxhbm5lZFN0bXQgKmZyb20pCiAJQ09QWV9OT0RFX0ZJRUxEKGludmFsSXRl bXMpOwogCUNPUFlfTk9ERV9GSUVMRChwYXJhbUV4ZWNUeXBlcyk7CiAJQ09QWV9OT0RFX0ZJRUxE KHV0aWxpdHlTdG10KTsKKwlDT1BZX0JJVE1BUFNFVF9GSUVMRChlbGlkZWRBcHBlbmRQYXJ0ZWRS ZWxzKTsKIAlDT1BZX0xPQ0FUSU9OX0ZJRUxEKHN0bXRfbG9jYXRpb24pOwogCUNPUFlfU0NBTEFS X0ZJRUxEKHN0bXRfbGVuKTsKIApAQCAtMjUzLDYgKzI1NCw3IEBAIF9jb3B5QXBwZW5kKGNvbnN0 IEFwcGVuZCAqZnJvbSkKIAlDT1BZX1NDQUxBUl9GSUVMRChuYXN5bmNwbGFucyk7CiAJQ09QWV9T Q0FMQVJfRklFTEQoZmlyc3RfcGFydGlhbF9wbGFuKTsKIAlDT1BZX05PREVfRklFTEQocGFydF9w cnVuZV9pbmZvKTsKKwlDT1BZX0JJVE1BUFNFVF9GSUVMRChwYXJ0aXRpb25lZF9yZWxzKTsKIAog CXJldHVybiBuZXdub2RlOwogfQpAQCAtMjgxLDYgKzI4Myw3IEBAIF9jb3B5TWVyZ2VBcHBlbmQo Y29uc3QgTWVyZ2VBcHBlbmQgKmZyb20pCiAJQ09QWV9QT0lOVEVSX0ZJRUxEKGNvbGxhdGlvbnMs IGZyb20tPm51bUNvbHMgKiBzaXplb2YoT2lkKSk7CiAJQ09QWV9QT0lOVEVSX0ZJRUxEKG51bGxz Rmlyc3QsIGZyb20tPm51bUNvbHMgKiBzaXplb2YoYm9vbCkpOwogCUNPUFlfTk9ERV9GSUVMRChw YXJ0X3BydW5lX2luZm8pOworCUNPUFlfQklUTUFQU0VUX0ZJRUxEKHBhcnRpdGlvbmVkX3JlbHMp OwogCiAJcmV0dXJuIG5ld25vZGU7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9v dXRmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYwppbmRleCA2YmRhZDQ2MmM3 Li5iYzE3OGQ1M2JmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jCisr KyBiL3NyYy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMKQEAgLTMyNCw2ICszMjQsNyBAQCBfb3V0 UGxhbm5lZFN0bXQoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IFBsYW5uZWRTdG10ICpub2RlKQogCVdS SVRFX05PREVfRklFTEQoaW52YWxJdGVtcyk7CiAJV1JJVEVfTk9ERV9GSUVMRChwYXJhbUV4ZWNU eXBlcyk7CiAJV1JJVEVfTk9ERV9GSUVMRCh1dGlsaXR5U3RtdCk7CisJV1JJVEVfQklUTUFQU0VU X0ZJRUxEKGVsaWRlZEFwcGVuZFBhcnRlZFJlbHMpOwogCVdSSVRFX0xPQ0FUSU9OX0ZJRUxEKHN0 bXRfbG9jYXRpb24pOwogCVdSSVRFX0lOVF9GSUVMRChzdG10X2xlbik7CiB9CkBAIC00NDMsNiAr NDQ0LDcgQEAgX291dEFwcGVuZChTdHJpbmdJbmZvIHN0ciwgY29uc3QgQXBwZW5kICpub2RlKQog CVdSSVRFX0lOVF9GSUVMRChuYXN5bmNwbGFucyk7CiAJV1JJVEVfSU5UX0ZJRUxEKGZpcnN0X3Bh cnRpYWxfcGxhbik7CiAJV1JJVEVfTk9ERV9GSUVMRChwYXJ0X3BydW5lX2luZm8pOworCVdSSVRF X0JJVE1BUFNFVF9GSUVMRChwYXJ0aXRpb25lZF9yZWxzKTsKIH0KIAogc3RhdGljIHZvaWQKQEAg LTQ2MCw2ICs0NjIsNyBAQCBfb3V0TWVyZ2VBcHBlbmQoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IE1l cmdlQXBwZW5kICpub2RlKQogCVdSSVRFX09JRF9BUlJBWShjb2xsYXRpb25zLCBub2RlLT5udW1D b2xzKTsKIAlXUklURV9CT09MX0FSUkFZKG51bGxzRmlyc3QsIG5vZGUtPm51bUNvbHMpOwogCVdS SVRFX05PREVfRklFTEQocGFydF9wcnVuZV9pbmZvKTsKKwlXUklURV9CSVRNQVBTRVRfRklFTEQo cGFydGl0aW9uZWRfcmVscyk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0yMjg4LDYgKzIyOTEsNyBA QCBfb3V0UGxhbm5lckdsb2JhbChTdHJpbmdJbmZvIHN0ciwgY29uc3QgUGxhbm5lckdsb2JhbCAq bm9kZSkKIAlXUklURV9CT09MX0ZJRUxEKHBhcmFsbGVsTW9kZU9LKTsKIAlXUklURV9CT09MX0ZJ RUxEKHBhcmFsbGVsTW9kZU5lZWRlZCk7CiAJV1JJVEVfQ0hBUl9GSUVMRChtYXhQYXJhbGxlbEhh emFyZCk7CisJV1JJVEVfQklUTUFQU0VUX0ZJRUxEKGVsaWRlZEFwcGVuZFBhcnRlZFJlbHMpOwog fQogCiBzdGF0aWMgdm9pZApAQCAtMjM5OSw2ICsyNDAzLDcgQEAgX291dFJlbE9wdEluZm8oU3Ry aW5nSW5mbyBzdHIsIGNvbnN0IFJlbE9wdEluZm8gKm5vZGUpCiAJV1JJVEVfQk9PTF9GSUVMRChw YXJ0Ym91bmRzX21lcmdlZCk7CiAJV1JJVEVfQklUTUFQU0VUX0ZJRUxEKGxpdmVfcGFydHMpOwog CVdSSVRFX0JJVE1BUFNFVF9GSUVMRChhbGxfcGFydHJlbHMpOworCVdSSVRFX0JJVE1BUFNFVF9G SUVMRChwYXJ0aXRpb25lZF9yZWxzKTsKIH0KIAogc3RhdGljIHZvaWQKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL25vZGVzL3JlYWRmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1bmNz LmMKaW5kZXggM2Y2OGY3YzE4ZC4uM2M2NzNjNDJkNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv bm9kZXMvcmVhZGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1bmNzLmMKQEAg LTE1OTcsNiArMTU5Nyw3IEBAIF9yZWFkUGxhbm5lZFN0bXQodm9pZCkKIAlSRUFEX05PREVfRklF TEQoaW52YWxJdGVtcyk7CiAJUkVBRF9OT0RFX0ZJRUxEKHBhcmFtRXhlY1R5cGVzKTsKIAlSRUFE X05PREVfRklFTEQodXRpbGl0eVN0bXQpOworCVJFQURfQklUTUFQU0VUX0ZJRUxEKGVsaWRlZEFw cGVuZFBhcnRlZFJlbHMpOwogCVJFQURfTE9DQVRJT05fRklFTEQoc3RtdF9sb2NhdGlvbik7CiAJ UkVBRF9JTlRfRklFTEQoc3RtdF9sZW4pOwogCkBAIC0xNzE5LDYgKzE3MjAsNyBAQCBfcmVhZEFw cGVuZCh2b2lkKQogCVJFQURfSU5UX0ZJRUxEKG5hc3luY3BsYW5zKTsKIAlSRUFEX0lOVF9GSUVM RChmaXJzdF9wYXJ0aWFsX3BsYW4pOwogCVJFQURfTk9ERV9GSUVMRChwYXJ0X3BydW5lX2luZm8p OworCVJFQURfQklUTUFQU0VUX0ZJRUxEKHBhcnRpdGlvbmVkX3JlbHMpOwogCiAJUkVBRF9ET05F KCk7CiB9CkBAIC0xNzQxLDYgKzE3NDMsNyBAQCBfcmVhZE1lcmdlQXBwZW5kKHZvaWQpCiAJUkVB RF9PSURfQVJSQVkoY29sbGF0aW9ucywgbG9jYWxfbm9kZS0+bnVtQ29scyk7CiAJUkVBRF9CT09M X0FSUkFZKG51bGxzRmlyc3QsIGxvY2FsX25vZGUtPm51bUNvbHMpOwogCVJFQURfTk9ERV9GSUVM RChwYXJ0X3BydW5lX2luZm8pOworCVJFQURfQklUTUFQU0VUX0ZJRUxEKHBhcnRpdGlvbmVkX3Jl bHMpOwogCiAJUkVBRF9ET05FKCk7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGF0aC9qb2lucmVscy5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnJlbHMu YwppbmRleCA5ZGEzZmYyZjlhLi5lNzRkNDBmZWUzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGF0aC9qb2lucmVscy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRo L2pvaW5yZWxzLmMKQEAgLTE1NDksNiArMTU0OSwxNSBAQCB0cnlfcGFydGl0aW9ud2lzZV9qb2lu KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwxLCBSZWxPcHRJbmZvICpyZWwyLAog CQlwb3B1bGF0ZV9qb2lucmVsX3dpdGhfcGF0aHMocm9vdCwgY2hpbGRfcmVsMSwgY2hpbGRfcmVs MiwKIAkJCQkJCQkJCWNoaWxkX2pvaW5yZWwsIGNoaWxkX3NqaW5mbywKIAkJCQkJCQkJCWNoaWxk X3Jlc3RyaWN0bGlzdCk7CisKKwkJLyoKKwkJICogQSBwYXJlbnQgcmVsYXRpb24ncyBwYXJ0aXRp b25lZF9yZWxzIG11c3QgYmUgYSBzdXBlcnNldCBvZiB0aGUgc2V0cworCQkgKiBvZiBhbGwgaXRz IGNoaWxkcmVuLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHNvIGJ1YmJsZSB1cCB0aGUgY2hpbGQKKwkJ ICogam9pbnJlbCdzIHNldC4KKwkJICovCisJCWpvaW5yZWwtPnBhcnRpdGlvbmVkX3JlbHMgPQor CQkJYm1zX2FkZF9tZW1iZXJzKGpvaW5yZWwtPnBhcnRpdGlvbmVkX3JlbHMsCisJCQkJCQkJY2hp bGRfam9pbnJlbC0+cGFydGl0aW9uZWRfcmVscyk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGxhbi9jcmVhdGVwbGFuLmMKaW5kZXggZmEwNjlhMjE3Yy4uMDAyNjA4NjU5MSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCisrKyBiL3NyYy9i YWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYwpAQCAtMjYsMTAgKzI2LDEyIEBACiAj aW5jbHVkZSAibm9kZXMvZXh0ZW5zaWJsZS5oIgogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5o IgogI2luY2x1ZGUgIm5vZGVzL25vZGVGdW5jcy5oIgorI2luY2x1ZGUgIm9wdGltaXplci9hcHBl bmRpbmZvLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL2NsYXVzZXMuaCIKICNpbmNsdWRlICJvcHRp bWl6ZXIvY29zdC5oIgogI2luY2x1ZGUgIm9wdGltaXplci9vcHRpbWl6ZXIuaCIKICNpbmNsdWRl ICJvcHRpbWl6ZXIvcGFyYW1hc3NpZ24uaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvcGF0aG5vZGUu aCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvcGF0aHMuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvcGxh Y2Vob2xkZXIuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvcGxhbmNhdC5oIgpAQCAtMTMzMSwxMSAr MTMzMywxMSBAQCBjcmVhdGVfYXBwZW5kX3BsYW4oUGxhbm5lckluZm8gKnJvb3QsIEFwcGVuZFBh dGggKmJlc3RfcGF0aCwgaW50IGZsYWdzKQogCQkJCQkJCQkJCSBiZXN0X3BhdGgtPnN1YnBhdGhz LAogCQkJCQkJCQkJCSBwcnVuZXF1YWwpOwogCX0KLQogCXBsYW4tPmFwcGVuZHBsYW5zID0gc3Vi cGxhbnM7CiAJcGxhbi0+bmFzeW5jcGxhbnMgPSBuYXN5bmNwbGFuczsKIAlwbGFuLT5maXJzdF9w YXJ0aWFsX3BsYW4gPSBiZXN0X3BhdGgtPmZpcnN0X3BhcnRpYWxfcGF0aDsKIAlwbGFuLT5wYXJ0 X3BydW5lX2luZm8gPSBwYXJ0cHJ1bmVpbmZvOworCXBsYW4tPnBhcnRpdGlvbmVkX3JlbHMgPSBi bXNfY29weShyZWwtPnBhcnRpdGlvbmVkX3JlbHMpOwogCiAJY29weV9nZW5lcmljX3BhdGhfaW5m bygmcGxhbi0+cGxhbiwgKFBhdGggKikgYmVzdF9wYXRoKTsKIApAQCAtMTQ5OSw2ICsxNTAxLDIw IEBAIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGxhbihQbGFubmVySW5mbyAqcm9vdCwgTWVyZ2VBcHBl bmRQYXRoICpiZXN0X3BhdGgsCiAJbm9kZS0+bWVyZ2VwbGFucyA9IHN1YnBsYW5zOwogCW5vZGUt PnBhcnRfcHJ1bmVfaW5mbyA9IHBhcnRwcnVuZWluZm87CiAKKwkvKgorCSAqIFdlIG5lZWQgdG8g ZXhwbGljaXRseSBhZGQgdG8gdGhlIHBsYW4gbm9kZSB0aGUgUlQgaW5kZXhlcyBvZiBhbnkKKwkg KiBwYXJ0aXRpb25lZCB0YWJsZXMgd2hvc2UgcGFydGl0aW9ucyB3aWxsIGJlIHNjYW5uZWQgYnkg dGhlIG5vZGVzIGluCisJICogJ3N1YnBsYW5zJy4gIFRoZXJlIGNhbiBiZSBtdWx0aXBsZSBSVCBp bmRleGVzIGluIHRoZSBzZXQgZHVlIHRvIHRoZQorCSAqIHBhcnRpdGlvbiB0cmVlIGJlaW5nIG11 bHRpLWxldmVsIGFuZC9vciB0aGlzIGJlaW5nIGEgcGxhbiBmb3IgVU5JT04gQUxMCisJICogb3Zl ciBtdWx0aXBsZSBwYXJ0aXRpb24gdHJlZXMuICBBbG9uZyB3aXRoIHNjYW5yZWxpZHMgb2YgbGVh Zi1sZXZlbCBTY2FuCisJICogbm9kZXMsIHRoaXMgYWxsb3dzIHRoZSBleGVjdXRvciB0byBsb2Nr IHRoZSBmdWxsIHNldCBvZiByZWxhdGlvbnMgYmVpbmcKKwkgKiBzY2FubmVkIGJ5IHRoaXMgbm9k ZS4KKwkgKgorCSAqIE5vdGUgdGhhdCAnYXBwcmVsaWRzJyBvbmx5IGNvbnRhaW5zIHRoZSB0b3At bGV2ZWwgYmFzZSByZWxhdGlvbihzKSwgc28KKwkgKiBpcyBub3Qgc3VmZmljaWVudCBmb3IgdGhl IHB1cnBvc2UuCisJICovCisJbm9kZS0+cGFydGl0aW9uZWRfcmVscyA9IGJtc19jb3B5KHJlbC0+ cGFydGl0aW9uZWRfcmVscyk7CisKIAkvKgogCSAqIElmIHByZXBhcmVfc29ydF9mcm9tX3BhdGhr ZXlzIGFkZGVkIHNvcnQgY29sdW1ucywgYnV0IHdlIHdlcmUgdG9sZCB0bwogCSAqIHByb2R1Y2Ug ZWl0aGVyIHRoZSBleGFjdCB0bGlzdCBvciBhIG5hcnJvdyB0bGlzdCwgd2Ugc2hvdWxkIGdldCBy aWQgb2YKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYyBi L3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwppbmRleCBiZDA5Zjg1YWVhLi4z NzRhOWQ5NzUzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVy LmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCkBAIC01MjksNiAr NTI5LDcgQEAgc3RhbmRhcmRfcGxhbm5lcihRdWVyeSAqcGFyc2UsIGNvbnN0IGNoYXIgKnF1ZXJ5 X3N0cmluZywgaW50IGN1cnNvck9wdGlvbnMsCiAJcmVzdWx0LT5wYXJhbUV4ZWNUeXBlcyA9IGds b2ItPnBhcmFtRXhlY1R5cGVzOwogCS8qIHV0aWxpdHlTdG10IHNob3VsZCBiZSBudWxsLCBidXQg d2UgbWlnaHQgYXMgd2VsbCBjb3B5IGl0ICovCiAJcmVzdWx0LT51dGlsaXR5U3RtdCA9IHBhcnNl LT51dGlsaXR5U3RtdDsKKwlyZXN1bHQtPmVsaWRlZEFwcGVuZFBhcnRlZFJlbHMgPSBnbG9iLT5l bGlkZWRBcHBlbmRQYXJ0ZWRSZWxzOwogCXJlc3VsdC0+c3RtdF9sb2NhdGlvbiA9IHBhcnNlLT5z dG10X2xvY2F0aW9uOwogCXJlc3VsdC0+c3RtdF9sZW4gPSBwYXJzZS0+c3RtdF9sZW47CiAKQEAg LTczNjUsNiArNzM2NiwxMyBAQCBjcmVhdGVfcGFydGl0aW9ud2lzZV9ncm91cGluZ19wYXRocyhQ bGFubmVySW5mbyAqcm9vdCwKIAogCQlhZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChyb290LCBncm91 cGVkX3JlbCwgZ3JvdXBlZF9saXZlX2NoaWxkcmVuKTsKIAl9CisKKwkvKgorCSAqIElucHV0IHJl bCBtaWdodCBiZSBhIHBhcnRpdGlvbmVkIGFwcGVuZHJlbCwgdGhvdWdoIGdyb3VwZWRfcmVsIGhh cyBhdAorCSAqIHRoaXMgcG9pbnQgdGFrZW4gaXRzIHJvbGUgYXMgdGhlIGFuIGFwcGVuZHJlbCBv d25pbmcgdGhlIGZvcm1lcidzCisJICogY2hpbGRyZW4sIHNvIGNvcHkgdGhlIGZvcm1lcidzIHBh cnRpdGlvbmVkX3JlbHMgc2V0IGludG8gdGhlIGxhdHRlci4KKwkgKi8KKwlncm91cGVkX3JlbC0+ cGFydGl0aW9uZWRfcmVscyA9IGJtc19jb3B5KGlucHV0X3JlbC0+cGFydGl0aW9uZWRfcmVscyk7 CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZz LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKaW5kZXggYTdiMTFiN2Yw My4uZGJkZWI4ZWM5ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0 cmVmcy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYwpAQCAtMTUx Miw2ICsxNTEyLDEwIEBAIHNldF9hcHBlbmRfcmVmZXJlbmNlcyhQbGFubmVySW5mbyAqcm9vdCwK IAkJbGZpcnN0KGwpID0gc2V0X3BsYW5fcmVmcyhyb290LCAoUGxhbiAqKSBsZmlyc3QobCksIHJ0 b2Zmc2V0KTsKIAl9CiAKKwkvKiBGaXggdXAgcGFydGl0aW9uZWRfcmVscyBiZWZvcmUgcG9zc2li bHkgcmVtb3ZpbmcgdGhlIEFwcGVuZCBiZWxvdy4gKi8KKwlhcGxhbi0+cGFydGl0aW9uZWRfcmVs cyA9IG9mZnNldF9yZWxpZF9zZXQoYXBsYW4tPnBhcnRpdGlvbmVkX3JlbHMsCisJCQkJCQkJCQkJ CSAgIHJ0b2Zmc2V0KTsKKwogCS8qCiAJICogU2VlIGlmIGl0J3Mgc2FmZSB0byBnZXQgcmlkIG9m IHRoZSBBcHBlbmQgZW50aXJlbHkuICBGb3IgdGhpcyB0byBiZQogCSAqIHNhZmUsIHRoZXJlIG11 c3QgYmUgb25seSBvbmUgY2hpbGQgcGxhbiBhbmQgdGhhdCBjaGlsZCBwbGFuJ3MgcGFyYWxsZWwK QEAgLTE1MjIsOCArMTUyNiwxNyBAQCBzZXRfYXBwZW5kX3JlZmVyZW5jZXMoUGxhbm5lckluZm8g KnJvb3QsCiAJICovCiAJaWYgKGxpc3RfbGVuZ3RoKGFwbGFuLT5hcHBlbmRwbGFucykgPT0gMSAm JgogCQkoKFBsYW4gKikgbGluaXRpYWwoYXBsYW4tPmFwcGVuZHBsYW5zKSktPnBhcmFsbGVsX2F3 YXJlID09IGFwbGFuLT5wbGFuLnBhcmFsbGVsX2F3YXJlKQorCXsKKwkJLyoKKwkJICogUGFydGl0 aW9uZWQgdGFibGUgaW52b2x2ZWQsIGlmIGFueSwgbXVzdCBiZSBtYWRlIGtub3duIHRvIHRoZQor CQkgKiBleGVjdXRvci4KKwkJICovCisJCXJvb3QtPmdsb2ItPmVsaWRlZEFwcGVuZFBhcnRlZFJl bHMgPQorCQkJYm1zX2FkZF9tZW1iZXJzKHJvb3QtPmdsb2ItPmVsaWRlZEFwcGVuZFBhcnRlZFJl bHMsCisJCQkJCQkJYXBsYW4tPnBhcnRpdGlvbmVkX3JlbHMpOwogCQlyZXR1cm4gY2xlYW5fdXBf cmVtb3ZlZF9wbGFuX2xldmVsKChQbGFuICopIGFwbGFuLAogCQkJCQkJCQkJCSAgIChQbGFuICop IGxpbml0aWFsKGFwbGFuLT5hcHBlbmRwbGFucykpOworCX0KIAogCS8qCiAJICogT3RoZXJ3aXNl LCBjbGVhbiB1cCB0aGUgQXBwZW5kIGFzIG5lZWRlZC4gIEl0J3Mgb2theSB0byBkbyB0aGlzIGFm dGVyCkBAIC0xNTg0LDYgKzE1OTcsMTIgQEAgc2V0X21lcmdlYXBwZW5kX3JlZmVyZW5jZXMoUGxh bm5lckluZm8gKnJvb3QsCiAJCWxmaXJzdChsKSA9IHNldF9wbGFuX3JlZnMocm9vdCwgKFBsYW4g KikgbGZpcnN0KGwpLCBydG9mZnNldCk7CiAJfQogCisJLyoKKwkgKiBGaXggdXAgcGFydGl0aW9u ZWRfcmVscyBiZWZvcmUgcG9zc2libHkgcmVtb3ZpbmcgdGhlIE1lcmdlQXBwZW5kIGJlbG93Lgor CSAqLworCW1wbGFuLT5wYXJ0aXRpb25lZF9yZWxzID0gb2Zmc2V0X3JlbGlkX3NldChtcGxhbi0+ cGFydGl0aW9uZWRfcmVscywKKwkJCQkJCQkJCQkJICAgcnRvZmZzZXQpOworCiAJLyoKIAkgKiBT ZWUgaWYgaXQncyBzYWZlIHRvIGdldCByaWQgb2YgdGhlIE1lcmdlQXBwZW5kIGVudGlyZWx5LiAg Rm9yIHRoaXMgdG8KIAkgKiBiZSBzYWZlLCB0aGVyZSBtdXN0IGJlIG9ubHkgb25lIGNoaWxkIHBs YW4gYW5kIHRoYXQgY2hpbGQgcGxhbidzCkBAIC0xNTk0LDggKzE2MTMsMTcgQEAgc2V0X21lcmdl YXBwZW5kX3JlZmVyZW5jZXMoUGxhbm5lckluZm8gKnJvb3QsCiAJICovCiAJaWYgKGxpc3RfbGVu Z3RoKG1wbGFuLT5tZXJnZXBsYW5zKSA9PSAxICYmCiAJCSgoUGxhbiAqKSBsaW5pdGlhbChtcGxh bi0+bWVyZ2VwbGFucykpLT5wYXJhbGxlbF9hd2FyZSA9PSBtcGxhbi0+cGxhbi5wYXJhbGxlbF9h d2FyZSkKKwl7CisJCS8qCisJCSAqIFBhcnRpdGlvbmVkIHRhYmxlcyBpbnZvbHZlZCwgaWYgYW55 LCBtdXN0IGJlIG1hZGUga25vd24gdG8gdGhlCisJCSAqIGV4ZWN1dG9yLgorCQkgKi8KKwkJcm9v dC0+Z2xvYi0+ZWxpZGVkQXBwZW5kUGFydGVkUmVscyA9CisJCQlibXNfYWRkX21lbWJlcnMocm9v dC0+Z2xvYi0+ZWxpZGVkQXBwZW5kUGFydGVkUmVscywKKwkJCQkJCQltcGxhbi0+cGFydGl0aW9u ZWRfcmVscyk7CiAJCXJldHVybiBjbGVhbl91cF9yZW1vdmVkX3BsYW5fbGV2ZWwoKFBsYW4gKikg bXBsYW4sCiAJCQkJCQkJCQkJICAgKFBsYW4gKikgbGluaXRpYWwobXBsYW4tPm1lcmdlcGxhbnMp KTsKKwl9CiAKIAkvKgogCSAqIE90aGVyd2lzZSwgY2xlYW4gdXAgdGhlIE1lcmdlQXBwZW5kIGFz IG5lZWRlZC4gIEl0J3Mgb2theSB0byBkbyB0aGlzCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvdXRpbC9pbmhlcml0LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9pbmhl cml0LmMKaW5kZXggN2UxMzQ4MjJmMy4uNTY5MTJlNDEwMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3V0aWwvaW5oZXJpdC5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91 dGlsL2luaGVyaXQuYwpAQCAtNDA2LDYgKzQwNiwxNCBAQCBleHBhbmRfcGFydGl0aW9uZWRfcnRl bnRyeShQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsaW5mbywKIAkJCQkJCQkJCSAg IGNoaWxkcnRlLCBjaGlsZFJUaW5kZXgsCiAJCQkJCQkJCQkgICBjaGlsZHJlbCwgdG9wX3BhcmVu dHJjLCBsb2NrbW9kZSk7CiAKKwkJLyoKKwkJICogQSBwYXJlbnQgcmVsYXRpb24ncyBwYXJ0aXRp b25lZF9yZWxzIG11c3QgYmUgYSBzdXBlcnNldCBvZiB0aGUgc2V0cworCQkgKiBvZiBhbGwgaXRz IGNoaWxkcmVuLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHNvIGJ1YmJsZSB1cCB0aGUgY2hpbGQKKwkJ ICogcmVsJ3Mgc2V0LgorCQkgKi8KKwkJcmVsaW5mby0+cGFydGl0aW9uZWRfcmVscyA9IGJtc19h ZGRfbWVtYmVycyhyZWxpbmZvLT5wYXJ0aXRpb25lZF9yZWxzLAorCQkJCQkJCQkJCQkJCWNoaWxk cmVsaW5mby0+cGFydGl0aW9uZWRfcmVscyk7CisKIAkJLyogQ2xvc2UgY2hpbGQgcmVsYXRpb24s IGJ1dCBrZWVwIGxvY2tzICovCiAJCXRhYmxlX2Nsb3NlKGNoaWxkcmVsLCBOb0xvY2spOwogCX0K QEAgLTczNyw2ICs3NDUsMTQgQEAgZXhwYW5kX2FwcGVuZHJlbF9zdWJxdWVyeShQbGFubmVySW5m byAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkvKiBDaGlsZCBtYXkgaXRzZWxmIGJlIGFuIGlu aGVyaXRlZCByZWwsIGVpdGhlciB0YWJsZSBvciBzdWJxdWVyeS4gKi8KIAkJaWYgKGNoaWxkcnRl LT5pbmgpCiAJCQlleHBhbmRfaW5oZXJpdGVkX3J0ZW50cnkocm9vdCwgY2hpbGRyZWwsIGNoaWxk cnRlLCBjaGlsZFJUaW5kZXgpOworCisJCS8qCisJCSAqIEEgcGFyZW50IHJlbGF0aW9uJ3MgcGFy dGl0aW9uZWRfcmVscyBtdXN0IGJlIGEgc3VwZXJzZXQgb2YgdGhlIHNldHMKKwkJICogb2YgYWxs IGl0cyBjaGlsZHJlbiwgZGlyZWN0IG9yIGluZGlyZWN0LCBzbyBidWJibGUgdXAgdGhlIGNoaWxk CisJCSAqIHJlbCdzIHNldC4KKwkJICovCisJCXJlbC0+cGFydGl0aW9uZWRfcmVscyA9IGJtc19h ZGRfbWVtYmVycyhyZWwtPnBhcnRpdGlvbmVkX3JlbHMsCisJCQkJCQkJCQkJCQljaGlsZHJlbC0+ cGFydGl0aW9uZWRfcmVscyk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvdXRpbC9yZWxub2RlLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxub2Rl LmMKaW5kZXggNTIwNDA5ZjRiYS4uMWQwODJhOGZkZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGls L3JlbG5vZGUuYwpAQCAtMzYxLDYgKzM2MSwxMCBAQCBidWlsZF9zaW1wbGVfcmVsKFBsYW5uZXJJ bmZvICpyb290LCBpbnQgcmVsaWQsIFJlbE9wdEluZm8gKnBhcmVudCkKIAkJfQogCX0KIAorCS8q IEEgcGFydGl0aW9uZWQgYXBwZW5kcmVsLiAqLworCWlmIChyZWwtPnBhcnRfc2NoZW1lICE9IE5V TEwpCisJCXJlbC0+cGFydGl0aW9uZWRfcmVscyA9IGJtc19jb3B5KHJlbC0+cmVsaWRzKTsKKwog CS8qIFNhdmUgdGhlIGZpbmlzaGVkIHN0cnVjdCBpbiB0aGUgcXVlcnkncyBzaW1wbGVfcmVsX2Fy cmF5ICovCiAJcm9vdC0+c2ltcGxlX3JlbF9hcnJheVtyZWxpZF0gPSByZWw7CiAKQEAgLTcyOSw2 ICs3MzMsMTQgQEAgYnVpbGRfam9pbl9yZWwoUGxhbm5lckluZm8gKnJvb3QsCiAJc2V0X2pvaW5y ZWxfc2l6ZV9lc3RpbWF0ZXMocm9vdCwgam9pbnJlbCwgb3V0ZXJfcmVsLCBpbm5lcl9yZWwsCiAJ CQkJCQkJICAgc2ppbmZvLCByZXN0cmljdGxpc3QpOwogCisJLyoKKwkgKiBUaGUgam9pbnJlbCBt YXkgZ2V0IHByb2Nlc3NlZCBhcyBhbiBhcHBlbmRyZWwgdmlhIHBhcnRpdGlvbndpc2Ugam9pbgor CSAqIGlmIGJvdGggb3V0ZXIgYW5kIGlubmVyIHJlbHMgYXJlIHBhcnRpdGlvbmVkLCBzbyBzZXQg cGFydGl0aW9uZWRfcmVscworCSAqIGFwcHJvcHJpYXRlbHkuCisJICovCisJam9pbnJlbC0+cGFy dGl0aW9uZWRfcmVscyA9IGJtc191bmlvbihvdXRlcl9yZWwtPnBhcnRpdGlvbmVkX3JlbHMsCisJ CQkJCQkJCQkJICBpbm5lcl9yZWwtPnBhcnRpdGlvbmVkX3JlbHMpOworCiAJLyoKIAkgKiBTZXQg dGhlIGNvbnNpZGVyX3BhcmFsbGVsIGZsYWcgaWYgdGhpcyBqb2lucmVsIGNvdWxkIHBvdGVudGlh bGx5IGJlCiAJICogc2Nhbm5lZCB3aXRoaW4gYSBwYXJhbGxlbCB3b3JrZXIuICBJZiB0aGlzIGZs YWcgaXMgZmFsc2UgZm9yIGVpdGhlcgpAQCAtODk3LDYgKzkwOSwxNCBAQCBidWlsZF9jaGlsZF9q b2luX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqb3V0ZXJfcmVsLAogCXNldF9q b2lucmVsX3NpemVfZXN0aW1hdGVzKHJvb3QsIGpvaW5yZWwsIG91dGVyX3JlbCwgaW5uZXJfcmVs LAogCQkJCQkJCSAgIHNqaW5mbywgcmVzdHJpY3RsaXN0KTsKIAorCS8qCisJICogVGhlIGpvaW5y ZWwgbWF5IGdldCBwcm9jZXNzZWQgYXMgYW4gYXBwZW5kcmVsIHZpYSBwYXJ0aXRpb253aXNlIGpv aW4KKwkgKiBpZiBib3RoIG91dGVyIGFuZCBpbm5lciByZWxzIGFyZSBwYXJ0aXRpb25lZCwgc28g c2V0IHBhcnRpdGlvbmVkX3JlbHMKKwkgKiBhcHByb3ByaWF0ZWx5LgorCSAqLworCWpvaW5yZWwt PnBhcnRpdGlvbmVkX3JlbHMgPSBibXNfdW5pb24ob3V0ZXJfcmVsLT5wYXJ0aXRpb25lZF9yZWxz LAorCQkJCQkJCQkJCSAgaW5uZXJfcmVsLT5wYXJ0aXRpb25lZF9yZWxzKTsKKwogCS8qIFdlIGJ1 aWxkIHRoZSBqb2luIG9ubHkgb25jZS4gKi8KIAlBc3NlcnQoIWZpbmRfam9pbl9yZWwocm9vdCwg am9pbnJlbC0+cmVsaWRzKSk7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhu b2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKaW5kZXggMWYzODQ1YjNmZS4u NTMyN2Q5YmE4YiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKKysr IGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAgLTEzMCw2ICsxMzAsMTEgQEAgdHlw ZWRlZiBzdHJ1Y3QgUGxhbm5lckdsb2JhbAogCWNoYXIJCW1heFBhcmFsbGVsSGF6YXJkOwkvKiB3 b3JzdCBQUk9QQVJBTExFTCBoYXphcmQgbGV2ZWwgKi8KIAogCVBhcnRpdGlvbkRpcmVjdG9yeSBw YXJ0aXRpb25fZGlyZWN0b3J5OyAvKiBwYXJ0aXRpb24gZGVzY3JpcHRvcnMgKi8KKworCUJpdG1h cHNldCAqZWxpZGVkQXBwZW5kUGFydGVkUmVsczsJLyogQ29tYmluZWQgcGFydGl0aW9uZWRfcmVs cyBvZiBhbGwKKwkJCQkJCQkJCQkgKiBzaW5nbGUtc3VicGxhbiBbTWVyZ2VdQXBwZW5kIG5vZGVz CisJCQkJCQkJCQkJICogdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9uIHRoZQorCQkJCQkJCQkJ CSAqIHZhcmlvdXMgcGxhbiB0cmVlcy4gKi8KIH0gUGxhbm5lckdsb2JhbDsKIAogLyogbWFjcm8g Zm9yIGZldGNoaW5nIHRoZSBQbGFuIGFzc29jaWF0ZWQgd2l0aCBhIFN1YlBsYW4gbm9kZSAqLwpA QCAtNzczLDYgKzc3OCwyMyBAQCB0eXBlZGVmIHN0cnVjdCBSZWxPcHRJbmZvCiAJUmVsaWRzCQlh bGxfcGFydHJlbHM7CS8qIFJlbGlkcyBzZXQgb2YgYWxsIHBhcnRpdGlvbiByZWxpZHMgKi8KIAlM aXN0CSAgKipwYXJ0ZXhwcnM7CQkvKiBOb24tbnVsbGFibGUgcGFydGl0aW9uIGtleSBleHByZXNz aW9ucyAqLwogCUxpc3QJICAqKm51bGxhYmxlX3BhcnRleHByczsgLyogTnVsbGFibGUgcGFydGl0 aW9uIGtleSBleHByZXNzaW9ucyAqLworCisJLyoKKwkgKiBGb3IgYW4gYXBwZW5kcmVsIHBhcmVu dCByZWxhdGlvbiAoYmFzZSwgam9pbiwgb3IgdXBwZXIpIHRoYXQgaXMKKwkgKiBwYXJ0aXRpb25l ZCwgdGhpcyBzdG9yZXMgdGhlIFJUIGluZGV4ZXMgb2YgYWxsIHRoZSBwYXJpdGlvbmVkIGFuY2Vz dG9ycworCSAqIGluY2x1ZGluZyBpdHNlbGYgdGhhdCBsZWFkIHVwIHRvIHRoZSBpbmRpdmlkdWFs IGxlYWYgcGFydGl0aW9ucyB0aGF0CisJICogd2lsbCBiZSBzY2FubmVkIHRvIHByb2R1Y2UgdGhp cyByZWxhdGlvbidzIG91dHB1dCByb3dzLiAgVGhlIHJlbGlkIHNldAorCSAqIGlzIGNvcGllZCBp bnRvIHRoZSByZXN1bHRpbmcgQXBwZW5kIG9yIE1lcmdlQXBwZW5kIHBsYW4gbm9kZSBmb3IKKwkg KiBhbGxvd2luZyB0aGUgZXhlY3V0b3IgdG8gdGFrZSBhcHByb3ByaWF0ZSBsb2NrcyBvbiB0aG9z ZSByZWxhdGlvbnMsCisJICogdW5sZXNzIHRoZSBub2RlIGlzIGRlZW1lZCB1c2VsZXNzIGluIHNl dHJlZnMuYyBkdWUgdG8gaGF2aW5nIGEgc2luZ2xlCisJICogbGVhZiBzdWJwbGFuIGFuZCB0aHVz IGVsaWRlZCBmcm9tIHRoZSBmaW5hbCBwbGFuLCBpbiB3aGljaCBjYXNlLCB0aGUgc2V0CisJICog aXMgYWRkZWQgaW50byBQbGFubmVyR2xvYmFsLmVsaWRlZEFwcGVuZFBhcnRlZFJlbHMuCisJICoK KwkgKiBOb3RlIHRoYXQgJ2FwcHJlbGlkcycgb2YgdGhvc2Ugbm9kZXMgb25seSBjb250YWlucyB0 aGUgdG9wLWxldmVsIGJhc2UKKwkgKiByZWxhdGlvbihzKSwgc28gaXMgbm90IHN1ZmZpY2llbnQg Zm9yIHNhaWQgcHVycG9zZS4KKwkgKi8KKworCUJpdG1hcHNldCAgKnBhcnRpdGlvbmVkX3JlbHM7 CiB9IFJlbE9wdEluZm87CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFu bm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCmluZGV4IDBiNTE4Y2U2YjIu LmJkODdjMzVkNmMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCisr KyBiL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCkBAIC04NSw2ICs4NSwxMSBAQCB0eXBl ZGVmIHN0cnVjdCBQbGFubmVkU3RtdAogCiAJTm9kZQkgICAqdXRpbGl0eVN0bXQ7CS8qIG5vbi1u dWxsIGlmIHRoaXMgaXMgdXRpbGl0eSBzdG10ICovCiAKKwlCaXRtYXBzZXQgKmVsaWRlZEFwcGVu ZFBhcnRlZFJlbHM7CS8qIENvbWJpbmVkIHBhcnRpdGlvbmVkX3JlbHMgb2YgYWxsCisJCQkJCQkJ CQkJICogc2luZ2xlLXN1YnBsYW4gW01lcmdlXUFwcGVuZCBub2RlcworCQkJCQkJCQkJCSAqIHRo YXQgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUKKwkJCQkJCQkJCQkgKiB2YXJpb3VzIHBsYW4g dHJlZXMuICovCisKIAkvKiBzdGF0ZW1lbnQgbG9jYXRpb24gaW4gc291cmNlIHN0cmluZyAoY29w aWVkIGZyb20gUXVlcnkpICovCiAJaW50CQkJc3RtdF9sb2NhdGlvbjsJLyogc3RhcnQgbG9jYXRp b24sIG9yIC0xIGlmIHVua25vd24gKi8KIAlpbnQJCQlzdG10X2xlbjsJCS8qIGxlbmd0aCBpbiBi eXRlczsgMCBtZWFucyAicmVzdCBvZiBzdHJpbmciICovCkBAIC0yNjEsNiArMjY2LDEyIEBAIHR5 cGVkZWYgc3RydWN0IEFwcGVuZAogCiAJLyogSW5mbyBmb3IgcnVuLXRpbWUgc3VicGxhbiBwcnVu aW5nOyBOVUxMIGlmIHdlJ3JlIG5vdCBkb2luZyB0aGF0ICovCiAJc3RydWN0IFBhcnRpdGlvblBy dW5lSW5mbyAqcGFydF9wcnVuZV9pbmZvOworCisJLyoKKwkgKiBSVCBpbmRleGVzIG9mIGFsbCBw YXJ0aXRpb25lZCBwYXJlbnRzIHdob3NlIHBhcnRpdGlvbnMnIHBsYW5zIGFyZQorCSAqIHByZXNl bnQgaW4gYXBwZW5kcGxhbnMuCisJICovCisJQml0bWFwc2V0ICAqcGFydGl0aW9uZWRfcmVsczsK IH0gQXBwZW5kOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCkBAIC0yODEsNiArMjkyLDEyIEBAIHR5 cGVkZWYgc3RydWN0IE1lcmdlQXBwZW5kCiAJYm9vbAkgICAqbnVsbHNGaXJzdDsJCS8qIE5VTExT IEZJUlNUL0xBU1QgZGlyZWN0aW9ucyAqLwogCS8qIEluZm8gZm9yIHJ1bi10aW1lIHN1YnBsYW4g cHJ1bmluZzsgTlVMTCBpZiB3ZSdyZSBub3QgZG9pbmcgdGhhdCAqLwogCXN0cnVjdCBQYXJ0aXRp b25QcnVuZUluZm8gKnBhcnRfcHJ1bmVfaW5mbzsKKworCS8qCisJICogUlQgaW5kZXhlcyBvZiBh bGwgcGFydGl0aW9uZWQgcGFyZW50cyB3aG9zZSBwYXJ0aXRpb25zJyBwbGFucyBhcmUKKwkgKiBw cmVzZW50IGluIGFwcGVuZHBsYW5zLgorCSAqLworCUJpdG1hcHNldCAgKnBhcnRpdGlvbmVkX3Jl bHM7CiB9IE1lcmdlQXBwZW5kOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCi0tIAoyLjI0LjEKCg== --00000000000022c13705db421aa9 Content-Type: application/x-patch; name="v6-0004-Optimize-AcquireExecutorLocks-to-skip-pruned-part.patch" Content-Disposition: attachment; filename="v6-0004-Optimize-AcquireExecutorLocks-to-skip-pruned-part.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l1admea30 RnJvbSA1ZTA3NmY1ODI3NGY2Y2QwNWFmYzg1MzNhZjEzMGUxNjVjOWI4NjJlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBhbWl0bGFuIDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4KRGF0 ZTogV2VkLCAyMiBEZWMgMjAyMSAxNjo1NToxNyArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjYgNC80 XSBPcHRpbWl6ZSBBY3F1aXJlRXhlY3V0b3JMb2NrcygpIHRvIHNraXAgcHJ1bmVkCiBwYXJ0aXRp b25zCgpJbnN0ZWFkIG9mIGxvY2tpbmcgYWxsIHJlbGF0aW9ucyBsaXN0ZWQgaW4gdGhlIHJhbmdl IHRhYmxlIGluIHRoZQpjYXNlcyB3aGVyZSB0aGUgUGxhbm5lZFN0bXQgaW5kaWNhdGVzIHRoYXQg c29tZSBub2RlcyBpbiB0aGUgcGxhbgp0cmVlIGNhbiBkbyBwYXJ0aXRpb24gcHJ1bmluZyB3aXRo b3V0IGRlcGVuZGluZyBvbiBleGVjdXRpb24gaGF2aW5nCnN0YXJ0ZWQgKHNvIGNhbGxlZCAiaW5p dGlhbCIgcHJ1bmluZyksIEFjcXVpcmVFeGVjdXRvckxvY2tzKCkgbm93CmNhbGxzIHRoZSBuZXcg ZXhlY3V0b3IgZnVuY3Rpb24gRXhlY3V0b3JHZXRMb2NrUmVscygpIHdoaWNoIHJldHVybnMKYSBz ZXQgb2YgcmVsYXRpb25zICh0aGVpciBSVCBpbmRleGVzKSB0byBiZSBsb2NrZWQgbm90IGluY2x1 ZGluZwp0aG9zZSBzY2FubmVkIGJ5IHRoZSBzdWJwbGFucyB0aGF0IHBydW5lZC4KClRoZSByZXN1 bHQgb2YgcHJ1bmluZyBkb25lIHRoaXMgd2F5IG11c3QgYmUgcmVtZW1iZXJlZCBhbmQgcmV1c2Vk CmR1cmluZyBhY3R1YWwgZXhlY3V0aW9uIG9mIHRoZSBwbGFuLCB3aGljaCBpcyBkb25lIGJ5IGNy ZWF0aW5nIGEKUGxhbkluaXRQcnVuaW5nT3V0cHV0IG5vZGVzIGZvciBmb3IgZWFjaCBwbGFuIG5v ZGUgdGhhdCB1bmRlcmdvZXMKcHJ1bmluZyBhbmQgYSBzZXQgb2YgdGhvc2UgZm9yIHRoZSB3aG9s ZSBwbGFuIHRyZWUgYXJlIGFkZGVkIHRvCkV4ZWNMb2NrUmVsc0luZm8gd2hpY2ggYWxzbyBzdG9y ZXMgdGhlIGJpdG1hcHNldCBvZiBSVCBpbmRleGVzIG9mCnJlbGF0aW9ucyB0aGF0IGFyZSBhY3R1 YWxseSBsb2NrZWQgYnkgQWNxdWlyZUV4ZWN1dG9yTG9ja3MoKS4KRXhlY0xvY2tSZWxzSW5mb3Mg YXJlIHBhc3NlZCBkb3duIHRoZSBleGVjdXRvciBhbG9uZ3NpZGUgdGhlClBsYW5uZWRTdG10cy4g IFRoaXMgYXJyYW5nZW1lbnQgZW5zdXJlcyB0aGF0IHRoZSBleGVjdXRvciBkb2Vzbid0CmFjY2lk ZW50YWxseSB0cnkgdG8gcHJvY2VzcyBhIHBsYW4gdHJlZSBzdWJub2RlcyB0aGF0IGhhcyBiZWVu CmRlZW1lZCBwcnVuZWQgYnkgQWNxdWlyZUV4ZWN1dG9yTG9ja3MoKS4KLS0tCiBzcmMvYmFja2Vu ZC9jb21tYW5kcy9jb3B5dG8uYyAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvY29tbWFu ZHMvY3JlYXRlYXMuYyAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxh aW4uYyAgICAgICAgIHwgICA3ICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9leHRlbnNpb24uYyAg ICAgICB8ICAxMyArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0dmlldy5jICAgICAgICAgfCAg IDIgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3BvcnRhbGNtZHMuYyAgICAgIHwgICAxICsKIHNy Yy9iYWNrZW5kL2NvbW1hbmRzL3ByZXBhcmUuYyAgICAgICAgIHwgIDE3ICstCiBzcmMvYmFja2Vu ZC9leGVjdXRvci9SRUFETUUgICAgICAgICAgICB8ICAyNCArKysKIHNyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNNYWluLmMgICAgICAgIHwgMjAyICsrKysrKysrKysrKysrKysrKysrCiBzcmMvYmFj a2VuZC9leGVjdXRvci9leGVjUGFyYWxsZWwuYyAgICB8ICAyNiArKy0KIHNyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uYyAgIHwgMjI0ICsrKysrKysrKysrKysrKysrKy0tLS0KIHNy Yy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNVdGlscy5jICAgICAgIHwgICA4ICsKIHNyYy9iYWNrZW5k L2V4ZWN1dG9yL2Z1bmN0aW9ucy5jICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9leGVjdXRv ci9ub2RlQXBwZW5kLmMgICAgICB8ICA1MiArKysrLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9k ZU1lcmdlQXBwZW5kLmMgfCAgNTIgKysrKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2Rp ZnlUYWJsZS5jIHwgIDI1ICsrKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivc3BpLmMgICAgICAgICAg ICAgfCAgMTQgKy0KIHNyYy9iYWNrZW5kL25vZGVzL2NvcHlmdW5jcy5jICAgICAgICAgIHwgIDQ5 ICsrKystCiBzcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jICAgICAgICAgICB8ICAzOSArKysr CiBzcmMvYmFja2VuZC9ub2Rlcy9yZWFkZnVuY3MuYyAgICAgICAgICB8ICAzNyArKysrCiBzcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgICB8ICAgMiArCiBzcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMgICB8ICAgNiArCiBzcmMvYmFja2VuZC9wYXJ0aXRpb25p bmcvcGFydHBydW5lLmMgICB8ICAzNyArKystCiBzcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMg ICAgICAgICAgICB8ICAxNSArLQogc3JjL2JhY2tlbmQvdGNvcC9wcXVlcnkuYyAgICAgICAgICAg ICAgfCAgMjEgKystCiBzcmMvYmFja2VuZC91dGlscy9jYWNoZS9wbGFuY2FjaGUuYyAgICB8IDI1 MiArKysrKysrKysrKysrKysrKysrKysrLS0tCiBzcmMvYmFja2VuZC91dGlscy9tbWdyL3BvcnRh bG1lbS5jICAgICB8ICAgMiArCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluLmggICAgICAg ICB8ICAgMyArLQogc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oICAgfCAgIDIg Kwogc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY2Rlc2MuaCAgICAgICAgfCAgIDIgKwogc3JjL2lu Y2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaCAgICAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvZXhl Y3V0b3Ivbm9kZUFwcGVuZC5oICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9k ZU1lcmdlQXBwZW5kLmggfCAgIDEgKwogc3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZU1vZGlmeVRh YmxlLmggfCAgIDEgKwogc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggICAgICAgICAgfCAg OTYgKysrKysrKysrKwogc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMuaCAgICAgICAgICAgICAgfCAg IDUgKwogc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggICAgICAgICAgfCAgIDQgKwogc3Jj L2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmggICAgICAgICAgfCAgMTUgKysKIHNyYy9pbmNsdWRl L3Rjb3AvdGNvcHByb3QuaCAgICAgICAgICAgIHwgICAyICstCiBzcmMvaW5jbHVkZS91dGlscy9w bGFuY2FjaGUuaCAgICAgICAgICB8ICAgNiArCiBzcmMvaW5jbHVkZS91dGlscy9wb3J0YWwuaCAg ICAgICAgICAgICB8ICAgNSArCiA0MSBmaWxlcyBjaGFuZ2VkLCAxMTc0IGluc2VydGlvbnMoKyks IDEwNCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5 dG8uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHl0by5jCmluZGV4IDU1YzM4YjA0YzQuLmQ0 MDNlYjIzMDkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHl0by5jCisrKyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHl0by5jCkBAIC01NDIsNyArNTQyLDcgQEAgQmVnaW5D b3B5VG8oUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkoKERSX2NvcHkgKikgZGVzdCktPmNzdGF0ZSA9 IGNzdGF0ZTsKIAogCQkvKiBDcmVhdGUgYSBRdWVyeURlc2MgcmVxdWVzdGluZyBubyBvdXRwdXQg Ki8KLQkJY3N0YXRlLT5xdWVyeURlc2MgPSBDcmVhdGVRdWVyeURlc2MocGxhbiwgcHN0YXRlLT5w X3NvdXJjZXRleHQsCisJCWNzdGF0ZS0+cXVlcnlEZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHBsYW4s IE5VTEwsIHBzdGF0ZS0+cF9zb3VyY2V0ZXh0LAogCQkJCQkJCQkJCQlHZXRBY3RpdmVTbmFwc2hv dCgpLAogCQkJCQkJCQkJCQlJbnZhbGlkU25hcHNob3QsCiAJCQkJCQkJCQkJCWRlc3QsIE5VTEws IE5VTEwsIDApOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMKaW5kZXggOWFiYmI2YjU1NS4uZjY2MDdm MjQ1NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYworKysgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jCkBAIC0zMjUsNyArMzI1LDcgQEAgRXhlY0Ny ZWF0ZVRhYmxlQXMoUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVUYWJsZUFzU3RtdCAqc3RtdCwK IAkJVXBkYXRlQWN0aXZlU25hcHNob3RDb21tYW5kSWQoKTsKIAogCQkvKiBDcmVhdGUgYSBRdWVy eURlc2MsIHJlZGlyZWN0aW5nIG91dHB1dCB0byBvdXIgdHVwbGUgcmVjZWl2ZXIgKi8KLQkJcXVl cnlEZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHBsYW4sIHBzdGF0ZS0+cF9zb3VyY2V0ZXh0LAorCQlx dWVyeURlc2MgPSBDcmVhdGVRdWVyeURlc2MocGxhbiwgTlVMTCwgcHN0YXRlLT5wX3NvdXJjZXRl eHQsCiAJCQkJCQkJCQlHZXRBY3RpdmVTbmFwc2hvdCgpLCBJbnZhbGlkU25hcHNob3QsCiAJCQkJ CQkJCQlkZXN0LCBwYXJhbXMsIHF1ZXJ5RW52LCAwKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvZXhwbGFpbi5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCmlu ZGV4IDlmNjMyMjg1YjYuLjFmMWE0NGI5YmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1h bmRzL2V4cGxhaW4uYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKQEAgLTQw Nyw3ICs0MDcsNyBAQCBFeHBsYWluT25lUXVlcnkoUXVlcnkgKnF1ZXJ5LCBpbnQgY3Vyc29yT3B0 aW9ucywKIAkJfQogCiAJCS8qIHJ1biBpdCAoaWYgbmVlZGVkKSBhbmQgcHJvZHVjZSBvdXRwdXQg Ki8KLQkJRXhwbGFpbk9uZVBsYW4ocGxhbiwgaW50bywgZXMsIHF1ZXJ5U3RyaW5nLCBwYXJhbXMs IHF1ZXJ5RW52LAorCQlFeHBsYWluT25lUGxhbihwbGFuLCBOVUxMLCBpbnRvLCBlcywgcXVlcnlT dHJpbmcsIHBhcmFtcywgcXVlcnlFbnYsCiAJCQkJCSAgICZwbGFuZHVyYXRpb24sIChlcy0+YnVm ZmVycyA/ICZidWZ1c2FnZSA6IE5VTEwpKTsKIAl9CiB9CkBAIC01MTUsNyArNTE1LDggQEAgRXhw bGFpbk9uZVV0aWxpdHkoTm9kZSAqdXRpbGl0eVN0bXQsIEludG9DbGF1c2UgKmludG8sIEV4cGxh aW5TdGF0ZSAqZXMsCiAgKiB0byBjYWxsIGl0LgogICovCiB2b2lkCi1FeHBsYWluT25lUGxhbihQ bGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsIEludG9DbGF1c2UgKmludG8sIEV4cGxhaW5TdGF0ZSAq ZXMsCitFeHBsYWluT25lUGxhbihQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsIEV4ZWNMb2NrUmVs c0luZm8gKmV4ZWNsb2NrcmVsc2luZm8sCisJCQkgICBJbnRvQ2xhdXNlICppbnRvLCBFeHBsYWlu U3RhdGUgKmVzLAogCQkJICAgY29uc3QgY2hhciAqcXVlcnlTdHJpbmcsIFBhcmFtTGlzdEluZm8g cGFyYW1zLAogCQkJICAgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYsIGNvbnN0IGluc3RyX3Rp bWUgKnBsYW5kdXJhdGlvbiwKIAkJCSAgIGNvbnN0IEJ1ZmZlclVzYWdlICpidWZ1c2FnZSkKQEAg LTU2Myw3ICs1NjQsNyBAQCBFeHBsYWluT25lUGxhbihQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQs IEludG9DbGF1c2UgKmludG8sIEV4cGxhaW5TdGF0ZSAqZXMsCiAJCWRlc3QgPSBOb25lX1JlY2Vp dmVyOwogCiAJLyogQ3JlYXRlIGEgUXVlcnlEZXNjIGZvciB0aGUgcXVlcnkgKi8KLQlxdWVyeURl c2MgPSBDcmVhdGVRdWVyeURlc2MocGxhbm5lZHN0bXQsIHF1ZXJ5U3RyaW5nLAorCXF1ZXJ5RGVz YyA9IENyZWF0ZVF1ZXJ5RGVzYyhwbGFubmVkc3RtdCwgZXhlY2xvY2tyZWxzaW5mbywgcXVlcnlT dHJpbmcsCiAJCQkJCQkJCUdldEFjdGl2ZVNuYXBzaG90KCksIEludmFsaWRTbmFwc2hvdCwKIAkJ CQkJCQkJZGVzdCwgcGFyYW1zLCBxdWVyeUVudiwgaW5zdHJ1bWVudF9vcHRpb24pOwogCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHRlbnNpb24uYyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2V4dGVuc2lvbi5jCmluZGV4IDEwMTM3OTBkYmIuLjAwOGI4Y2UwZTkgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4dGVuc2lvbi5jCisrKyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2V4dGVuc2lvbi5jCkBAIC03NDEsOCArNzQxLDEwIEBAIGV4ZWN1dGVfc3FsX3N0cmlu Zyhjb25zdCBjaGFyICpzcWwpCiAJCVJhd1N0bXQgICAgKnBhcnNldHJlZSA9IGxmaXJzdF9ub2Rl KFJhd1N0bXQsIGxjMSk7CiAJCU1lbW9yeUNvbnRleHQgcGVyX3BhcnNldHJlZV9jb250ZXh0LAog CQkJCQlvbGRjb250ZXh0OwotCQlMaXN0CSAgICpzdG10X2xpc3Q7Ci0JCUxpc3RDZWxsICAgKmxj MjsKKwkJTGlzdAkgICAqc3RtdF9saXN0LAorCQkJCSAgICpleGVjbG9ja3JlbHNpbmZvX2xpc3Q7 CisJCUxpc3RDZWxsICAgKmxjMiwKKwkJCQkgICAqbGMzOwogCiAJCS8qCiAJCSAqIFdlIGRvIHRo ZSB3b3JrIGZvciBlYWNoIHBhcnNldHJlZSBpbiBhIHNob3J0LWxpdmVkIGNvbnRleHQsIHRvCkBA IC03NjIsMTEgKzc2NCwxMyBAQCBleGVjdXRlX3NxbF9zdHJpbmcoY29uc3QgY2hhciAqc3FsKQog CQkJCQkJCQkJCSAgIE5VTEwsCiAJCQkJCQkJCQkJICAgMCwKIAkJCQkJCQkJCQkgICBOVUxMKTsK LQkJc3RtdF9saXN0ID0gcGdfcGxhbl9xdWVyaWVzKHN0bXRfbGlzdCwgc3FsLCBDVVJTT1JfT1BU X1BBUkFMTEVMX09LLCBOVUxMKTsKKwkJc3RtdF9saXN0ID0gcGdfcGxhbl9xdWVyaWVzKHN0bXRf bGlzdCwgc3FsLCBDVVJTT1JfT1BUX1BBUkFMTEVMX09LLCBOVUxMLAorCQkJCQkJCQkJJmV4ZWNs b2NrcmVsc2luZm9fbGlzdCk7CiAKLQkJZm9yZWFjaChsYzIsIHN0bXRfbGlzdCkKKwkJZm9yYm90 aChsYzIsIHN0bXRfbGlzdCwgbGMzLCBleGVjbG9ja3JlbHNpbmZvX2xpc3QpCiAJCXsKIAkJCVBs YW5uZWRTdG10ICpzdG10ID0gbGZpcnN0X25vZGUoUGxhbm5lZFN0bXQsIGxjMik7CisJCQlFeGVj TG9ja1JlbHNJbmZvICpleGVjbG9ja3JlbHNpbmZvID0gbGZpcnN0X25vZGUoRXhlY0xvY2tSZWxz SW5mbywgbGMzKTsKIAogCQkJQ29tbWFuZENvdW50ZXJJbmNyZW1lbnQoKTsKIApAQCAtNzc3LDYg Kzc4MSw3IEBAIGV4ZWN1dGVfc3FsX3N0cmluZyhjb25zdCBjaGFyICpzcWwpCiAJCQkJUXVlcnlE ZXNjICAqcWRlc2M7CiAKIAkJCQlxZGVzYyA9IENyZWF0ZVF1ZXJ5RGVzYyhzdG10LAorCQkJCQkJ CQkJCWV4ZWNsb2NrcmVsc2luZm8sCiAJCQkJCQkJCQkJc3FsLAogCQkJCQkJCQkJCUdldEFjdGl2 ZVNuYXBzaG90KCksIE5VTEwsCiAJCQkJCQkJCQkJZGVzdCwgTlVMTCwgTlVMTCwgMCk7CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9tYXR2aWV3LmMgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9tYXR2aWV3LmMKaW5kZXggMDVlN2I2MDA1OS4uNGVmNDRhYWYyMyAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0dmlldy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L21hdHZpZXcuYwpAQCAtNDE2LDcgKzQxNiw3IEBAIHJlZnJlc2hfbWF0dmlld19kYXRhZmlsbChE ZXN0UmVjZWl2ZXIgKmRlc3QsIFF1ZXJ5ICpxdWVyeSwKIAlVcGRhdGVBY3RpdmVTbmFwc2hvdENv bW1hbmRJZCgpOwogCiAJLyogQ3JlYXRlIGEgUXVlcnlEZXNjLCByZWRpcmVjdGluZyBvdXRwdXQg dG8gb3VyIHR1cGxlIHJlY2VpdmVyICovCi0JcXVlcnlEZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHBs YW4sIHF1ZXJ5U3RyaW5nLAorCXF1ZXJ5RGVzYyA9IENyZWF0ZVF1ZXJ5RGVzYyhwbGFuLCBOVUxM LCBxdWVyeVN0cmluZywKIAkJCQkJCQkJR2V0QWN0aXZlU25hcHNob3QoKSwgSW52YWxpZFNuYXBz aG90LAogCQkJCQkJCQlkZXN0LCBOVUxMLCBOVUxMLCAwKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvcG9ydGFsY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcG9ydGFs Y21kcy5jCmluZGV4IDk5MDJjNWM1NjYuLjg1ZTczZGRkZWQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL3BvcnRhbGNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9wb3J0 YWxjbWRzLmMKQEAgLTEwNyw2ICsxMDcsNyBAQCBQZXJmb3JtQ3Vyc29yT3BlbihQYXJzZVN0YXRl ICpwc3RhdGUsIERlY2xhcmVDdXJzb3JTdG10ICpjc3RtdCwgUGFyYW1MaXN0SW5mbyBwYQogCQkJ CQkgIHF1ZXJ5U3RyaW5nLAogCQkJCQkgIENNRFRBR19TRUxFQ1QsCS8qIGN1cnNvcidzIHF1ZXJ5 IGlzIGFsd2F5cyBhIFNFTEVDVCAqLwogCQkJCQkgIGxpc3RfbWFrZTEocGxhbiksCisJCQkJCSAg bGlzdF9tYWtlMShOVUxMKSwJLyogbm8gRXhlY0xvY2tSZWxzSW5mbyB0byBwYXNzICovCiAJCQkJ CSAgTlVMTCk7CiAKIAkvKi0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1h bmRzL3ByZXBhcmUuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ByZXBhcmUuYwppbmRleCA4MDcz ODU0N2VkLi5iYmJmOGJiY2JkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9wcmVw YXJlLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHJlcGFyZS5jCkBAIC0xNTUsNiArMTU1 LDcgQEAgRXhlY3V0ZVF1ZXJ5KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAlQcmVwYXJlZFN0YXRlbWVu dCAqZW50cnk7CiAJQ2FjaGVkUGxhbiAqY3BsYW47CiAJTGlzdAkgICAqcGxhbl9saXN0OworCUxp c3QJICAgKnBsYW5fZXhlY2xvY2tyZWxzaW5mb19saXN0OwogCVBhcmFtTGlzdEluZm8gcGFyYW1M SSA9IE5VTEw7CiAJRVN0YXRlCSAgICplc3RhdGUgPSBOVUxMOwogCVBvcnRhbAkJcG9ydGFsOwpA QCAtMTk1LDYgKzE5Niw3IEBAIEV4ZWN1dGVRdWVyeShQYXJzZVN0YXRlICpwc3RhdGUsCiAJLyog UmVwbGFuIGlmIG5lZWRlZCwgYW5kIGluY3JlbWVudCBwbGFuIHJlZmNvdW50IGZvciBwb3J0YWwg Ki8KIAljcGxhbiA9IEdldENhY2hlZFBsYW4oZW50cnktPnBsYW5zb3VyY2UsIHBhcmFtTEksIE5V TEwsIE5VTEwpOwogCXBsYW5fbGlzdCA9IGNwbGFuLT5zdG10X2xpc3Q7CisJcGxhbl9leGVjbG9j a3JlbHNpbmZvX2xpc3QgPSBjcGxhbi0+ZXhlY2xvY2tyZWxzaW5mb19saXN0OwogCiAJLyoKIAkg KiBETyBOT1QgYWRkIGFueSBsb2dpYyB0aGF0IGNvdWxkIHBvc3NpYmx5IHRocm93IGFuIGVycm9y IGJldHdlZW4KQEAgLTIwNCw3ICsyMDYsNyBAQCBFeGVjdXRlUXVlcnkoUGFyc2VTdGF0ZSAqcHN0 YXRlLAogCQkJCQkgIE5VTEwsCiAJCQkJCSAgcXVlcnlfc3RyaW5nLAogCQkJCQkgIGVudHJ5LT5w bGFuc291cmNlLT5jb21tYW5kVGFnLAotCQkJCQkgIHBsYW5fbGlzdCwKKwkJCQkJICBwbGFuX2xp c3QsIHBsYW5fZXhlY2xvY2tyZWxzaW5mb19saXN0LAogCQkJCQkgIGNwbGFuKTsKIAogCS8qCkBA IC01NzYsNyArNTc4LDkgQEAgRXhwbGFpbkV4ZWN1dGVRdWVyeShFeGVjdXRlU3RtdCAqZXhlY3N0 bXQsIEludG9DbGF1c2UgKmludG8sIEV4cGxhaW5TdGF0ZSAqZXMsCiAJY29uc3QgY2hhciAqcXVl cnlfc3RyaW5nOwogCUNhY2hlZFBsYW4gKmNwbGFuOwogCUxpc3QJICAgKnBsYW5fbGlzdDsKLQlM aXN0Q2VsbCAgICpwOworCUxpc3QJICAgKnBsYW5fZXhlY2xvY2tyZWxzaW5mb19saXN0OworCUxp c3RDZWxsICAgKnAsCisJCQkgICAqcGU7CiAJUGFyYW1MaXN0SW5mbyBwYXJhbUxJID0gTlVMTDsK IAlFU3RhdGUJICAgKmVzdGF0ZSA9IE5VTEw7CiAJaW5zdHJfdGltZQlwbGFuc3RhcnQ7CkBAIC02 MzIsMTUgKzYzNiwxOCBAQCBFeHBsYWluRXhlY3V0ZVF1ZXJ5KEV4ZWN1dGVTdG10ICpleGVjc3Rt dCwgSW50b0NsYXVzZSAqaW50bywgRXhwbGFpblN0YXRlICplcywKIAl9CiAKIAlwbGFuX2xpc3Qg PSBjcGxhbi0+c3RtdF9saXN0OworCXBsYW5fZXhlY2xvY2tyZWxzaW5mb19saXN0ID0gY3BsYW4t PmV4ZWNsb2NrcmVsc2luZm9fbGlzdDsKIAogCS8qIEV4cGxhaW4gZWFjaCBxdWVyeSAqLwotCWZv cmVhY2gocCwgcGxhbl9saXN0KQorCWZvcmJvdGgocCwgcGxhbl9saXN0LCBwZSwgcGxhbl9leGVj bG9ja3JlbHNpbmZvX2xpc3QpCiAJewogCQlQbGFubmVkU3RtdCAqcHN0bXQgPSBsZmlyc3Rfbm9k ZShQbGFubmVkU3RtdCwgcCk7CisJCUV4ZWNMb2NrUmVsc0luZm8gKmV4ZWNsb2NrcmVsc2luZm8g PSBsZmlyc3Rfbm9kZShFeGVjTG9ja1JlbHNJbmZvLCBwZSk7CiAKIAkJaWYgKHBzdG10LT5jb21t YW5kVHlwZSAhPSBDTURfVVRJTElUWSkKLQkJCUV4cGxhaW5PbmVQbGFuKHBzdG10LCBpbnRvLCBl cywgcXVlcnlfc3RyaW5nLCBwYXJhbUxJLCBxdWVyeUVudiwKLQkJCQkJCSAgICZwbGFuZHVyYXRp b24sIChlcy0+YnVmZmVycyA/ICZidWZ1c2FnZSA6IE5VTEwpKTsKKwkJCUV4cGxhaW5PbmVQbGFu KHBzdG10LCBleGVjbG9ja3JlbHNpbmZvLCBpbnRvLCBlcywgcXVlcnlfc3RyaW5nLAorCQkJCQkJ ICAgcGFyYW1MSSwgcXVlcnlFbnYsICZwbGFuZHVyYXRpb24sCisJCQkJCQkgICAoZXMtPmJ1ZmZl cnMgPyAmYnVmdXNhZ2UgOiBOVUxMKSk7CiAJCWVsc2UKIAkJCUV4cGxhaW5PbmVVdGlsaXR5KHBz dG10LT51dGlsaXR5U3RtdCwgaW50bywgZXMsIHF1ZXJ5X3N0cmluZywKIAkJCQkJCQkgIHBhcmFt TEksIHF1ZXJ5RW52KTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL1JFQURNRSBi L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL1JFQURNRQppbmRleCBiZjVlNzA4NjBkLi45NzIwZDBhYzJj IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9SRUFETUUKKysrIGIvc3JjL2JhY2tl bmQvZXhlY3V0b3IvUkVBRE1FCkBAIC02NSw2ICs2NSwyNyBAQCBmb3VuZCB0aGVyZS4gIFRoaXMg Y3VycmVudGx5IG9ubHkgb2NjdXJzIGZvciBBcHBlbmQgYW5kIE1lcmdlQXBwZW5kIG5vZGVzLiAg SW4KIHRoaXMgY2FzZSB0aGUgbm9uLXJlcXVpcmVkIHN1YnBsYW5zIGFyZSBpZ25vcmVkIGFuZCB0 aGUgZXhlY3V0b3Igc3RhdGUncwogc3Vibm9kZSBhcnJheSB3aWxsIGJlY29tZSBvdXQgb2Ygc2Vx dWVuY2UgdG8gdGhlIHBsYW4ncyBzdWJwbGFuIGxpc3QuCiAKK0FjdHVhbGx5LCB0aGUgc28tY2Fs bGVkIGV4ZWN1dGlvbiB0aW1lIHBydW5pbmcgbWF5IGFsc28gb2NjdXIgZXZlbiBiZWZvcmUgdGhl CitleGVjdXRpb24gaGFzIHN0YXJ0ZWQuICBPbmUgY2FzZSB3aGVyZSB0aGF0IG9jY3VycyBpcyB3 aGVuIGEgY2FjaGVkIGdlbmVyaWMKK3BsYW4gaXMgYmVpbmcgdmFsaWRhdGVkIGZvciBleGVjdXRp b24gYnkgcGxhbmNhY2hlLmM6IEdldENhY2hlZFBsYW4oKSwgd2hpY2gKK3Byb2NlZWRzIGJ5IGxv Y2tpbmcgYWxsIHRoZSByZWxhdGlvbnMgdGhhdCB3aWxsIGJlIHNjYW5uZWQgYnkgdGhhdCBwbGFu LiAgSWYKK3RoZSBnZW5lcmljIHBsYW4gaGFzIG5vZGVzIHRoYXQgY29udGFpbiBzby1jYWxsZWQg aW5pdGlhbCBwcnVuaW5nIHN0ZXBzIChhCitzdWJzZXQgb2YgZXhlY3V0aW9uIHBydW5pbmcgc3Rl cHMgdGhhdCBkbyBub3QgZGVwZW5kIG9uIGZ1bGwtZmxlZGdlZCBleGVjdXRpb24KK2hhdmluZyBz dGFydGVkKSwgdGhleSBhcmUgcGVyZm9ybWVkIGF0IHRoaXMgcG9pbnQgdG8gZmlndXJlIG91dCB0 aGUgbWluaW1hbAorc2V0IG9mIGNoaWxkIHN1YnBsYW5zIHRoYXQgc2F0aXNmeSB0aG9zZSBwcnVu aW5nIGluc3RydWN0aW9ucyBhbmQgdGhlIHJlc3VsdAorb2YgcGVyZm9ybWluZyB0aGF0IHBydW5p bmcgaXMgc2F2ZWQgaW4gYSBkYXRhIHN0cnVjdHVyZSB0aGF0IGdldHMgcGFzc2VkIHRvCit0aGUg ZXhlY3V0b3IgYWxvbmdzaWRlIHRoZSBwbGFuIHRyZWUuICBSZWxhdGlvbnMgc2Nhbm5lZCBieSBv bmx5IHRob3NlCitzdXJ2aXZpbmcgc3VicGxhbnMgYXJlIHRoZW4gbG9ja2VkIHdoaWxlIHRob3Nl IHNjYW5uZWQgYnkgdGhlIHBydW5lZCBzdWJwbGFucworYXJlIG5vdCwgZXZlbiB0aG91Z2ggdGhl IHBydW5lZCBzdWJwbGFucyB0aGVtc2VsdmVzIGFyZSBub3QgcmVtb3ZlZCBmcm9tIHRoZQorcGxh biB0cmVlLiBTbywgaXQgaXMgaW1wZXJhdGl2ZSB0aGF0IHRoZSBleGVjdXRvciBhbmQgYW55IHRo aXJkIHBhcnR5IGNvZGUKK2ludm9rZWQgYnkgaXQgdGhhdCBnZXRzIHBhc3NlZCB0aGUgcGxhbiB0 cmVlIGxvb2sgYXQgdGhlIGluaXRpYWwgcHJ1bmluZyByZXN1bHQKK21hZGUgYXZhaWxhYmxlIHZp YSB0aGUgYWZvcmVtZW50aW9uZWQgZGF0YSBzdHJ1Y3R1cmUgdG8gZGV0ZXJtaW5lIHdoZXRoZXIg b3IKK25vdCBhIHBhcnRpY3VsYXIgc3VicGxhbiBpcyB2YWxpZC4gIChUaGUgZGF0YSBzdHJ1Y3R1 cmUgYmFzaWNhbGx5IGNvbnNpc3RzIG9mCithbiBhcnJheSBvZiBQbGFuSW5pdFBydW5pbmdPdXRw dXQgbm9kZXMgY29udGFpbmluZyBvbmUgZWxlbWVudCBmb3IgZWFjaCBub2RlCitvZiB0aGUgcGxh biB0cmVlIGluZGV4YWJsZSB1c2luZyBwbGFuX25vZGVfaWQgb2YgdGhlIGluZGl2aWR1YWwgcGxh biBub2RlcywKK3doZXJlIGVhY2ggbm9kZSBjb250YWlucyBhIGJpdG1hcHNldCBvZiBpbmRleGVz IG9mIHVucHJ1bmVkIGNoaWxkIHN1YnBsYW5zIG9mCithIGdpdmVuIG5vZGUuKQorCiBFYWNoIFBs YW4gbm9kZSBtYXkgaGF2ZSBleHByZXNzaW9uIHRyZWVzIGFzc29jaWF0ZWQgd2l0aCBpdCwgdG8g cmVwcmVzZW50CiBpdHMgdGFyZ2V0IGxpc3QsIHF1YWxpZmljYXRpb24gY29uZGl0aW9ucywgZXRj LiAgVGhlc2UgdHJlZXMgYXJlIGFsc28KIHJlYWQtb25seSB0byB0aGUgZXhlY3V0b3IsIGJ1dCB0 aGUgZXhlY3V0b3Igc3RhdGUgZm9yIGV4cHJlc3Npb24gZXZhbHVhdGlvbgpAQCAtMjQ3LDYgKzI2 OCw5IEBAIFF1ZXJ5IFByb2Nlc3NpbmcgQ29udHJvbCBGbG93CiAKIFRoaXMgaXMgYSBza2V0Y2gg b2YgY29udHJvbCBmbG93IGZvciBmdWxsIHF1ZXJ5IHByb2Nlc3Npbmc6CiAKKyAgWyBFeGVjdXRv ckdldExvY2tSZWxzIF0gLS0tIGFuIG9wdGlvbmFsIHN0ZXAgdG8gd2FsayBvdmVyIHRoZSBwbGFu IHRyZWUKKwkJdG8gcHJvZHVjZSBhbiBFeGVjTG9ja1JlbHNJbmZvIHRvIGJlIHBhc3NlZCB0byBD cmVhdGVRdWVyeURlc2MKKwogCUNyZWF0ZVF1ZXJ5RGVzYwogCiAJRXhlY3V0b3JTdGFydApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01haW4uYyBiL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNNYWluLmMKaW5kZXggNDczZDJlMDBhMi4uMWRkZDFkZmI4MyAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01haW4uYworKysgYi9zcmMvYmFja2VuZC9leGVj dXRvci9leGVjTWFpbi5jCkBAIC00OSwxMSArNDksMTUgQEAKICNpbmNsdWRlICJjb21tYW5kcy9t YXR2aWV3LmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvdHJpZ2dlci5oIgogI2luY2x1ZGUgImV4ZWN1 dG9yL2V4ZWNkZWJ1Zy5oIgorI2luY2x1ZGUgImV4ZWN1dG9yL25vZGVBcHBlbmQuaCIKKyNpbmNs dWRlICJleGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuaCIKKyNpbmNsdWRlICJleGVjdXRvci9ub2Rl TW9kaWZ5VGFibGUuaCIKICNpbmNsdWRlICJleGVjdXRvci9ub2RlU3VicGxhbi5oIgogI2luY2x1 ZGUgImZvcmVpZ24vZmR3YXBpLmgiCiAjaW5jbHVkZSAiaml0L2ppdC5oIgogI2luY2x1ZGUgIm1i L3BnX3djaGFyLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAibm9kZXMvbm9k ZUZ1bmNzLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNldHJlZS5oIgogI2luY2x1ZGUgInN0b3Jh Z2UvYnVmbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCkBAIC0xMDEsOSArMTA1LDIw NSBAQCBzdGF0aWMgY2hhciAqRXhlY0J1aWxkU2xvdFZhbHVlRGVzY3JpcHRpb24oT2lkIHJlbG9p ZCwKIAkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKm1vZGlmaWVkQ29scywKIAkJCQkJCQkJCQkgICBp bnQgbWF4ZmllbGRsZW4pOwogc3RhdGljIHZvaWQgRXZhbFBsYW5RdWFsU3RhcnQoRVBRU3RhdGUg KmVwcXN0YXRlLCBQbGFuICpwbGFuVHJlZSk7CitzdGF0aWMgYm9vbCBFeGVjR2V0U2NhbkxvY2tS ZWxzKFNjYW4gKnNjYW4sIEV4ZWNHZXRMb2NrUmVsc0NvbnRleHQgKmNvbnRleHQpOwogCiAvKiBl bmQgb2YgbG9jYWwgZGVjbHMgKi8KIAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoJCUV4ZWN1dG9yR2V0TG9ja1Jl bHMKKyAqCisgKgkJRmlndXJlIG91dCB0aGUgbWluaW1hbCBzZXQgb2YgcmVsYXRpb25zIHRvIGxv Y2sgdG8gYmUgYWJsZSB0byBzYWZlbHkKKyAqCQlleGVjdXRlIGEgZ2l2ZW4gcGxhbgorICoKKyAq IFRoaXMgaWdub3JlcyB0aGUgcmVsYXRpb25zIHNjYW5uZWQgYnkgY2hpbGQgc3VicGxhbnMgdGhh dCBhcmUgcHJ1bmVkIGF3YXkKKyAqIGFmdGVyIHBlcmZvcm1pbmcgaW5pdGlhbCBwcnVuaW5nIHN0 ZXBzIHByZXNlbnQgaW4gdGhlIHBsYW4gdXNpbmcgdGhlCisgKiBwcm92aWRlZCBzZXQgb2YgRVhU RVJOIHBhcmFtZXRlcnMuCisgKgorICogQWxvbmcgd2l0aCB0aGUgc2V0IG9mIFJUIGluZGV4ZXMg b2YgcmVsYXRpb25zIHRoYXQgbXVzdCBiZSBsb2NrZWQsIHRoZQorICogcmV0dXJuZWQgc3RydWN0 IGFsc28gY29udGFpbnMgYW4gYXJyYXkgb2YgUGxhbkluaXRQcnVuaW5nT3V0cHV0IG5vZGVzIGVh Y2gKKyAqIG9mIHdoaWNoIGNvbnRhaW5zIHRoZSByZXN1bHQgb2YgaW5pdGlhbCBwcnVuaW5nIGZv ciBhIGdpdmVuIHBsYW4gbm9kZSwgd2hpY2gKKyAqIGlzIGJhc2ljYWxseSBhIGJpdG1hcHNldCBv ZiB0aGUgaW5kZXhlcyBvZiBzdXJ2aXZpbmcgY2hpbGQgc3VicGxhbnMuICBFYWNoCisgKiBwbGFu IG5vZGUgaW4gdGhlIHRyZWUgdGhhdCB1bmRlcmdvZXMgcHJ1bmluZyB3aWxsIGhhdmUgYW4gZWxl bWVudCBpbiB0aGUKKyAqIGFycmF5LgorICoKKyAqIE5vdGUgdGhhdCB3aGlsZSByZWxhdGlvbnMg c2Nhbm5lZCBieSB0aGUgc3VicGxhbnMgdGhhdCBhcmUgcHJ1bmVkIHdpbGwgbm90CisgKiBiZSBs b2NrZWQsIHRoZSBzdWJwbGFucyB0aGVtc2VsdmVzIGFyZSBsZWZ0IGFzLWlzIGluIHRoZSBwbGFu IHRyZWUsIGFzc3VtaW5nCisgKiBhbnl0aGluZyB0aGF0IHJlYWRzIHRoZSBwbGFuIHRyZWUgZHVy aW5nIGV4ZWN1dGlvbiBrbm93cyB0byBpZ25vcmUgdGhlbSBieQorICogbG9va2luZyBhdCB0aGUg UGxhbkluaXRQcnVuaW5nT3V0cHV0J3MgbGlzdCBvZiB2YWxpZCBzdWJwbGFucy4KKyAqCisgKiBQ YXJ0aXRpb25lZCB0YWJsZXMgbWVudGlvbmVkIGluIFBhcnRpdGlvbmVkUmVsUHJ1bmVJbmZvIG5v ZGVzIHRoYXQgZHJpdmUKKyAqIHRoZSBwcnVuaW5nIHdpbGwgYmUgbG9ja2VkIGJlZm9yZSBkb2lu ZyB0aGUgcHJ1bmluZyBhbmQgYWxzbyBhZGRlZCB0byB0aGUKKyAqIHRoZSByZXR1cm5lZCBzZXQu CisgKi8KK0V4ZWNMb2NrUmVsc0luZm8gKgorRXhlY3V0b3JHZXRMb2NrUmVscyhQbGFubmVkU3Rt dCAqcGxhbm5lZHN0bXQsIFBhcmFtTGlzdEluZm8gcGFyYW1zKQoreworCWludAkJbnVtUGxhbk5v ZGVzID0gcGxhbm5lZHN0bXQtPm51bVBsYW5Ob2RlczsKKwlFeGVjR2V0TG9ja1JlbHNDb250ZXh0 IGNvbnRleHQ7CisJRXhlY0xvY2tSZWxzSW5mbyAqcmVzdWx0OworCUxpc3RDZWxsICpsYzsKKwor CS8qIE9ubHkgZ2V0IGhlcmUgaWYgdGhlcmUgaXMgYW55IHBydW5pbmcgdG8gZG8uICovCisJQXNz ZXJ0KHBsYW5uZWRzdG10LT5jb250YWluc0luaXRpYWxQcnVuaW5nKTsKKworCWNvbnRleHQuc3Rt dCA9IHBsYW5uZWRzdG10OworCWNvbnRleHQucGFyYW1zID0gcGFyYW1zOworCisJLyoKKwkgKiBH byB3YWxrIGFsbCB0aGUgcGxhbiB0cmVlKHMpIHByZXNlbnQgaW4gdGhlIFBsYW5uZWRTdG10LCBm aWxsaW5nCisJICogY29udGV4dC5sb2NrcmVscyB3aXRoIG9ubHkgdGhlIHJlbGF0aW9ucyBmcm9t IHBsYW4gbm9kZXMgdGhhdAorCSAqIHN1cnZpdmUgaW5pdGlhbCBwcnVuaW5nIGFuZCBhbHNvIHRo ZSB0YWJsZXMgbWVudGlvbmVkIGluCisJICogcGFydGl0aW9uZWRfcmVscyBzZXRzIGZvdW5kIGlu IHRoZSBwbGFuLgorCSAqLworCWNvbnRleHQubG9ja3JlbHMgPSBOVUxMOworCWNvbnRleHQuaW5p dFBydW5pbmdPdXRwdXRzID0gTklMOworCWNvbnRleHQuaXBvSW5kZXhlcyA9IHBhbGxvYzAoc2l6 ZW9mKGludCkgKiBudW1QbGFuTm9kZXMpOworCisJLyogQWxsIHRoZSBzdWJwbGFucy4gKi8KKwlm b3JlYWNoKGxjLCBwbGFubmVkc3RtdC0+c3VicGxhbnMpCisJeworCQlQbGFuICpzdWJwbGFuID0g bGZpcnN0KGxjKTsKKworCQkodm9pZCkgRXhlY0dldExvY2tSZWxzKHN1YnBsYW4sICZjb250ZXh0 KTsKKwl9CisKKwkvKiBBbmQgdGhlIG1haW4gdHJlZS4gKi8KKwkodm9pZCkgRXhlY0dldExvY2tS ZWxzKHBsYW5uZWRzdG10LT5wbGFuVHJlZSwgJmNvbnRleHQpOworCisJLyoKKwkgKiBBbHNvIGJl IHN1cmUgdG8gbG9jayBwYXJ0aXRpb25lZCByZWxhdGlvbnMgZnJvbSBhbnkgW01lcmdlXUFwcGVu ZCBub2RlcworCSAqIHRoYXQgd2VyZSBvcmlnaW5hbGx5IHByZXNlbnQgYnV0IHdlcmUgdWx0aW1h dGVseSBsZWZ0IG91dCBmcm9tIHRoZSBwbGFuCisJICogZHVlIHRvIGJlaW5nIGRlZW1lZCBuby1v cCBub2Rlcy4KKwkgKi8KKwljb250ZXh0LmxvY2tyZWxzID0gYm1zX2FkZF9tZW1iZXJzKGNvbnRl eHQubG9ja3JlbHMsCisJCQkJCQkJCQkgICBwbGFubmVkc3RtdC0+ZWxpZGVkQXBwZW5kUGFydGVk UmVscyk7CisKKwlyZXN1bHQgPSBtYWtlTm9kZShFeGVjTG9ja1JlbHNJbmZvKTsKKwlyZXN1bHQt PmxvY2tyZWxzID0gY29udGV4dC5sb2NrcmVsczsKKwlyZXN1bHQtPm51bVBsYW5Ob2RlcyA9IG51 bVBsYW5Ob2RlczsKKwlyZXN1bHQtPmluaXRQcnVuaW5nT3V0cHV0cyA9IGNvbnRleHQuaW5pdFBy dW5pbmdPdXRwdXRzOworCXJlc3VsdC0+aXBvSW5kZXhlcyA9IGNvbnRleHQuaXBvSW5kZXhlczsK KworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRXhlY0dldExv Y2tSZWxzCisgKgkJQWRkcyBhbGwgdGhlIHJlbGF0aW9ucyB0aGF0IHdpbGwgYmUgc2Nhbm5lZCBi eSAnbm9kZScgYW5kIGl0cyBjaGlsZAorICoJCXBsYW5zIHRvIGNvbnRleHQtPmxvY2tyZWxzIGFm dGVyIHRha2luZyBpbnRvIHRoZSBhY2NvdW50IHRoZSBlZmZlY3QKKyAqCQlvZiBwZXJmb3JtaW5n IGluaXRpYWwgcHJ1bmluZyBpZiBhbnkKKyAqCisgKiBjb250ZXh0LT5zdG10IGdpdmVzIHRoZSBQ bGFubmVkU3RtdCBiZWluZyBpbnNwZWN0ZWQgdG8gYWNjZXNzIHRoZSBwbGFuJ3MKKyAqIHJhbmdl IHRhYmxlIGlmIG5lZWRlZCBhbmQgY29udGV4dC0+cGFyYW1zIHRoZSBzZXQgb2YgRVhURVJOIHBh cmFtZXRlcnMKKyAqIGF2YWlsYWJsZSB0byBldmFsdWF0ZSBwcnVuaW5nIHBhcmFtZXRlcnMuCisg KgorICogSWYgaW5pdGlhbCBwcnVuaW5nIGlzIGRvbmUsIGEgUGxhbkluaXRQcnVuaW5nT3V0cHV0 IG5vZGUgY29udGFpbmluZyB0aGUKKyAqIHJlc3VsdCBvZiBwcnVuaW5nIHdpbGwgYmUgc3RvcmVk IGluIGNvbnRleHQtPmluaXRQcnVuaW5nT3V0cHV0cyB0aGF0IHdpbGwKKyAqIGJlIG1hZGUgYXZh aWxhYmxlIHRvIHRoZSBleGVjdXRvciB0byByZXVzZS4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICov Citib29sCitFeGVjR2V0TG9ja1JlbHMoUGxhbiAqbm9kZSwgRXhlY0dldExvY2tSZWxzQ29udGV4 dCAqY29udGV4dCkKK3sKKwkvKiBEbyBub3RoaW5nIHdoZW4gd2UgZ2V0IHRvIHRoZSBlbmQgb2Yg YSBsZWFmIG9uIHRyZWUuICovCisJaWYgKG5vZGUgPT0gTlVMTCkKKwkJcmV0dXJuIHRydWU7CisK KwkvKiBNYWtlIHN1cmUgdGhlcmUncyBlbm91Z2ggc3RhY2sgYXZhaWxhYmxlLiAqLworCWNoZWNr X3N0YWNrX2RlcHRoKCk7CisKKwlzd2l0Y2ggKG5vZGVUYWcobm9kZSkpCisJeworCQkvKiBDdXJy ZW50bHksIG9ubHkgdGhlc2UgdHdvIG5vZGVzIGhhdmUgcHJ1bmFibGUgY2hpbGQgc3VicGxhbnMu ICovCisJCWNhc2UgVF9BcHBlbmQ6CisJCQlpZiAoRXhlY0dldEFwcGVuZExvY2tSZWxzKChBcHBl bmQgKikgbm9kZSwgY29udGV4dCkpCisJCQkJcmV0dXJuIHRydWU7CisJCQlicmVhazsKKwkJY2Fz ZSBUX01lcmdlQXBwZW5kOgorCQkJaWYgKEV4ZWNHZXRNZXJnZUFwcGVuZExvY2tSZWxzKChNZXJn ZUFwcGVuZCAqKSBub2RlLAorCQkJCQkJCQkJCQkJY29udGV4dCkpCisJCQkJcmV0dXJuIHRydWU7 CisJCQlicmVhazsKKworCQkvKgorCQkgKiBBbmQgdGhlc2UgbWFuaXB1bGF0ZSByZWxhdGlvbnMg dGhhdCBtdXN0IGJlIGFkZGVkIGNvbnRleHQtPmxvY2tyZWxzLgorCQkgKi8KKwkJY2FzZSBUX1Nl cVNjYW46CisJCWNhc2UgVF9TYW1wbGVTY2FuOgorCQljYXNlIFRfSW5kZXhTY2FuOgorCQljYXNl IFRfSW5kZXhPbmx5U2NhbjoKKwkJY2FzZSBUX0JpdG1hcEluZGV4U2NhbjoKKwkJY2FzZSBUX0Jp dG1hcEhlYXBTY2FuOgorCQljYXNlIFRfVGlkU2NhbjoKKwkJY2FzZSBUX1RpZFJhbmdlU2NhbjoK KwkJY2FzZSBUX0ZvcmVpZ25TY2FuOgorCQljYXNlIFRfU3VicXVlcnlTY2FuOgorCQljYXNlIFRf Q3VzdG9tU2NhbjoKKwkJCWlmIChFeGVjR2V0U2NhbkxvY2tSZWxzKChTY2FuICopIG5vZGUsIGNv bnRleHQpKQorCQkJCXJldHVybiB0cnVlOworCQkJYnJlYWs7CisJCWNhc2UgVF9Nb2RpZnlUYWJs ZToKKwkJCWlmIChFeGVjR2V0TW9kaWZ5VGFibGVMb2NrUmVscygoTW9kaWZ5VGFibGUgKikgbm9k ZSwgY29udGV4dCkpCisJCQkJcmV0dXJuIHRydWU7CisJCQkvKiBwbGFuX3RyZWVfd2Fsa2VyKCkg d2lsbCB2aXNpdCB0aGUgc3VicGxhbiAob3V0ZXJOb2RlKSAqLworCQkJYnJlYWs7CisKKwkJZGVm YXVsdDoKKwkJCWJyZWFrOworCX0KKworCS8qIFJlY3Vyc2UgdG8gc3Vibm9kZXMuICovCisJcmV0 dXJuIHBsYW5fdHJlZV93YWxrZXIobm9kZSwgRXhlY0dldExvY2tSZWxzLCAodm9pZCAqKSBjb250 ZXh0KTsKK30KKworLyoKKyAqIEV4ZWNHZXRTY2FuTG9ja1JlbHMKKyAqIAkJRG8gRXhlY0dldExv Y2tSZWxzKCkncyB3b3JrIGZvciBhIGxlYWYgU2NhbiBub2RlCisgKi8KK3N0YXRpYyBib29sCitF eGVjR2V0U2NhbkxvY2tSZWxzKFNjYW4gKnNjYW4sIEV4ZWNHZXRMb2NrUmVsc0NvbnRleHQgKmNv bnRleHQpCit7CisJc3dpdGNoIChub2RlVGFnKHNjYW4pKQorCXsKKwkJY2FzZSBUX0ZvcmVpZ25T Y2FuOgorCQkJeworCQkJCUZvcmVpZ25TY2FuICpmc2NhbiA9IChGb3JlaWduU2NhbiAqKSBzY2Fu OworCisJCQkJY29udGV4dC0+bG9ja3JlbHMgPSBibXNfYWRkX21lbWJlcnMoY29udGV4dC0+bG9j a3JlbHMsCisJCQkJCQkJCQkJCQkJZnNjYW4tPmZzX3JlbGlkcyk7CisJCQl9CisJCQlicmVhazsK KworCQljYXNlIFRfU3VicXVlcnlTY2FuOgorCQkJeworCQkJCVN1YnF1ZXJ5U2NhbiAqc3NjYW4g PSAoU3VicXVlcnlTY2FuICopIHNjYW47CisKKwkJCQkodm9pZCkgRXhlY0dldExvY2tSZWxzKChQ bGFuICopIHNzY2FuLT5zdWJwbGFuLCBjb250ZXh0KTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNh c2UgVF9DdXN0b21TY2FuOgorCQkJeworCQkJCUN1c3RvbVNjYW4gKmNzY2FuID0gKEN1c3RvbVNj YW4gKikgc2NhbjsKKwkJCQlMaXN0Q2VsbCAqbGM7CisKKwkJCQljb250ZXh0LT5sb2NrcmVscyA9 IGJtc19hZGRfbWVtYmVycyhjb250ZXh0LT5sb2NrcmVscywKKwkJCQkJCQkJCQkJCQljc2Nhbi0+ Y3VzdG9tX3JlbGlkcyk7CisJCQkJZm9yZWFjaChsYywgY3NjYW4tPmN1c3RvbV9wbGFucykKKwkJ CQl7CisJCQkJCSh2b2lkKSBFeGVjR2V0TG9ja1JlbHMoKFBsYW4gKikgbGZpcnN0KGxjKSwgY29u dGV4dCk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWNvbnRleHQt PmxvY2tyZWxzID0gYm1zX2FkZF9tZW1iZXIoY29udGV4dC0+bG9ja3JlbHMsCisJCQkJCQkJCQkJ CSAgIHNjYW4tPnNjYW5yZWxpZCk7CisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30K IAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQogICoJCUV4ZWN1dG9yU3RhcnQKQEAgLTgwNSw2ICsxMDA1LDcgQEAgSW5p dFBsYW4oUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxhZ3MpCiB7CiAJQ21kVHlwZQkJb3Bl cmF0aW9uID0gcXVlcnlEZXNjLT5vcGVyYXRpb247CiAJUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10 ID0gcXVlcnlEZXNjLT5wbGFubmVkc3RtdDsKKwlFeGVjTG9ja1JlbHNJbmZvICpleGVjbG9ja3Jl bHNpbmZvID0gcXVlcnlEZXNjLT5leGVjbG9ja3JlbHNpbmZvOwogCVBsYW4JICAgKnBsYW4gPSBw bGFubmVkc3RtdC0+cGxhblRyZWU7CiAJTGlzdAkgICAqcmFuZ2VUYWJsZSA9IHBsYW5uZWRzdG10 LT5ydGFibGU7CiAJRVN0YXRlCSAgICplc3RhdGUgPSBxdWVyeURlc2MtPmVzdGF0ZTsKQEAgLTgy NCw2ICsxMDI1LDcgQEAgSW5pdFBsYW4oUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxhZ3Mp CiAJRXhlY0luaXRSYW5nZVRhYmxlKGVzdGF0ZSwgcmFuZ2VUYWJsZSk7CiAKIAllc3RhdGUtPmVz X3BsYW5uZWRzdG10ID0gcGxhbm5lZHN0bXQ7CisJZXN0YXRlLT5lc19leGVjbG9ja3JlbHNpbmZv ID0gZXhlY2xvY2tyZWxzaW5mbzsKIAogCS8qCiAJICogTmV4dCwgYnVpbGQgdGhlIEV4ZWNSb3dN YXJrIGFycmF5IGZyb20gdGhlIFBsYW5Sb3dNYXJrKHMpLCBpZiBhbnkuCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFyYWxsZWwuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L2V4ZWNQYXJhbGxlbC5jCmluZGV4IDVkZDhhYjdkYjIuLjAyZjJjMjdmZGYgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jCisrKyBiL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jCkBAIC02Niw2ICs2Niw3IEBACiAjZGVmaW5lIFBBUkFMTEVM X0tFWV9RVUVSWV9URVhUCQlVSU5UNjRDT05TVCgweEUwMDAwMDAwMDAwMDAwMDgpCiAjZGVmaW5l IFBBUkFMTEVMX0tFWV9KSVRfSU5TVFJVTUVOVEFUSU9OIFVJTlQ2NENPTlNUKDB4RTAwMDAwMDAw MDAwMDAwOSkKICNkZWZpbmUgUEFSQUxMRUxfS0VZX1dBTF9VU0FHRQkJCVVJTlQ2NENPTlNUKDB4 RTAwMDAwMDAwMDAwMDAwQSkKKyNkZWZpbmUgUEFSQUxMRUxfS0VZX0VYRUNMT0NLUkVMU0lORk8J VUlOVDY0Q09OU1QoMHhFMDAwMDAwMDAwMDAwMDBCKQogCiAjZGVmaW5lIFBBUkFMTEVMX1RVUExF X1FVRVVFX1NJWkUJCTY1NTM2CiAKQEAgLTE4Miw2ICsxODMsNyBAQCBFeGVjU2VyaWFsaXplUGxh bihQbGFuICpwbGFuLCBFU3RhdGUgKmVzdGF0ZSkKIAlwc3RtdC0+dHJhbnNpZW50UGxhbiA9IGZh bHNlOwogCXBzdG10LT5kZXBlbmRzT25Sb2xlID0gZmFsc2U7CiAJcHN0bXQtPnBhcmFsbGVsTW9k ZU5lZWRlZCA9IGZhbHNlOworCXBzdG10LT5jb250YWluc0luaXRpYWxQcnVuaW5nID0gZmFsc2U7 CiAJcHN0bXQtPnBsYW5UcmVlID0gcGxhbjsKIAlwc3RtdC0+cnRhYmxlID0gZXN0YXRlLT5lc19y YW5nZV90YWJsZTsKIAlwc3RtdC0+cmVzdWx0UmVsYXRpb25zID0gTklMOwpAQCAtNTk2LDEyICs1 OTgsMTUgQEAgRXhlY0luaXRQYXJhbGxlbFBsYW4oUGxhblN0YXRlICpwbGFuc3RhdGUsIEVTdGF0 ZSAqZXN0YXRlLAogCUZpeGVkUGFyYWxsZWxFeGVjdXRvclN0YXRlICpmcGVzOwogCWNoYXIJICAg KnBzdG10X2RhdGE7CiAJY2hhcgkgICAqcHN0bXRfc3BhY2U7CisJY2hhcgkgICAqZXhlY2xvY2ty ZWxzaW5mb19kYXRhOworCWNoYXIJICAgKmV4ZWNsb2NrcmVsc2luZm9fc3BhY2U7CiAJY2hhcgkg ICAqcGFyYW1saXN0aW5mb19zcGFjZTsKIAlCdWZmZXJVc2FnZSAqYnVmdXNhZ2Vfc3BhY2U7CiAJ V2FsVXNhZ2UgICAqd2FsdXNhZ2Vfc3BhY2U7CiAJU2hhcmVkRXhlY3V0b3JJbnN0cnVtZW50YXRp b24gKmluc3RydW1lbnRhdGlvbiA9IE5VTEw7CiAJU2hhcmVkSml0SW5zdHJ1bWVudGF0aW9uICpq aXRfaW5zdHJ1bWVudGF0aW9uID0gTlVMTDsKIAlpbnQJCQlwc3RtdF9sZW47CisJaW50CQkJZXhl Y2xvY2tyZWxzaW5mb19sZW47CiAJaW50CQkJcGFyYW1saXN0aW5mb19sZW47CiAJaW50CQkJaW5z dHJ1bWVudGF0aW9uX2xlbiA9IDA7CiAJaW50CQkJaml0X2luc3RydW1lbnRhdGlvbl9sZW4gPSAw OwpAQCAtNjMwLDYgKzYzNSw3IEBAIEV4ZWNJbml0UGFyYWxsZWxQbGFuKFBsYW5TdGF0ZSAqcGxh bnN0YXRlLCBFU3RhdGUgKmVzdGF0ZSwKIAogCS8qIEZpeCB1cCBhbmQgc2VyaWFsaXplIHBsYW4g dG8gYmUgc2VudCB0byB3b3JrZXJzLiAqLwogCXBzdG10X2RhdGEgPSBFeGVjU2VyaWFsaXplUGxh bihwbGFuc3RhdGUtPnBsYW4sIGVzdGF0ZSk7CisJZXhlY2xvY2tyZWxzaW5mb19kYXRhID0gbm9k ZVRvU3RyaW5nKGVzdGF0ZS0+ZXNfZXhlY2xvY2tyZWxzaW5mbyk7CiAKIAkvKiBDcmVhdGUgYSBw YXJhbGxlbCBjb250ZXh0LiAqLwogCXBjeHQgPSBDcmVhdGVQYXJhbGxlbENvbnRleHQoInBvc3Rn cmVzIiwgIlBhcmFsbGVsUXVlcnlNYWluIiwgbndvcmtlcnMpOwpAQCAtNjU2LDYgKzY2MiwxMSBA QCBFeGVjSW5pdFBhcmFsbGVsUGxhbihQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgRVN0YXRlICplc3Rh dGUsCiAJc2htX3RvY19lc3RpbWF0ZV9jaHVuaygmcGN4dC0+ZXN0aW1hdG9yLCBwc3RtdF9sZW4p OwogCXNobV90b2NfZXN0aW1hdGVfa2V5cygmcGN4dC0+ZXN0aW1hdG9yLCAxKTsKIAorCS8qIEVz dGltYXRlIHNwYWNlIGZvciBzZXJpYWxpemVkIEV4ZWNMb2NrUmVsc0luZm8uICovCisJZXhlY2xv Y2tyZWxzaW5mb19sZW4gPSBzdHJsZW4oZXhlY2xvY2tyZWxzaW5mb19kYXRhKSArIDE7CisJc2ht X3RvY19lc3RpbWF0ZV9jaHVuaygmcGN4dC0+ZXN0aW1hdG9yLCBleGVjbG9ja3JlbHNpbmZvX2xl bik7CisJc2htX3RvY19lc3RpbWF0ZV9rZXlzKCZwY3h0LT5lc3RpbWF0b3IsIDEpOworCiAJLyog RXN0aW1hdGUgc3BhY2UgZm9yIHNlcmlhbGl6ZWQgUGFyYW1MaXN0SW5mby4gKi8KIAlwYXJhbWxp c3RpbmZvX2xlbiA9IEVzdGltYXRlUGFyYW1MaXN0U3BhY2UoZXN0YXRlLT5lc19wYXJhbV9saXN0 X2luZm8pOwogCXNobV90b2NfZXN0aW1hdGVfY2h1bmsoJnBjeHQtPmVzdGltYXRvciwgcGFyYW1s aXN0aW5mb19sZW4pOwpAQCAtNzUwLDYgKzc2MSwxMiBAQCBFeGVjSW5pdFBhcmFsbGVsUGxhbihQ bGFuU3RhdGUgKnBsYW5zdGF0ZSwgRVN0YXRlICplc3RhdGUsCiAJbWVtY3B5KHBzdG10X3NwYWNl LCBwc3RtdF9kYXRhLCBwc3RtdF9sZW4pOwogCXNobV90b2NfaW5zZXJ0KHBjeHQtPnRvYywgUEFS QUxMRUxfS0VZX1BMQU5ORURTVE1ULCBwc3RtdF9zcGFjZSk7CiAKKwkvKiBTdG9yZSBzZXJpYWxp emVkIEV4ZWNMb2NrUmVsc0luZm8gKi8KKwlleGVjbG9ja3JlbHNpbmZvX3NwYWNlID0gc2htX3Rv Y19hbGxvY2F0ZShwY3h0LT50b2MsIGV4ZWNsb2NrcmVsc2luZm9fbGVuKTsKKwltZW1jcHkoZXhl Y2xvY2tyZWxzaW5mb19zcGFjZSwgZXhlY2xvY2tyZWxzaW5mb19kYXRhLCBleGVjbG9ja3JlbHNp bmZvX2xlbik7CisJc2htX3RvY19pbnNlcnQocGN4dC0+dG9jLCBQQVJBTExFTF9LRVlfRVhFQ0xP Q0tSRUxTSU5GTywKKwkJCQkgICBleGVjbG9ja3JlbHNpbmZvX3NwYWNlKTsKKwogCS8qIFN0b3Jl IHNlcmlhbGl6ZWQgUGFyYW1MaXN0SW5mby4gKi8KIAlwYXJhbWxpc3RpbmZvX3NwYWNlID0gc2ht X3RvY19hbGxvY2F0ZShwY3h0LT50b2MsIHBhcmFtbGlzdGluZm9fbGVuKTsKIAlzaG1fdG9jX2lu c2VydChwY3h0LT50b2MsIFBBUkFMTEVMX0tFWV9QQVJBTUxJU1RJTkZPLCBwYXJhbWxpc3RpbmZv X3NwYWNlKTsKQEAgLTEyMzEsOCArMTI0OCwxMCBAQCBFeGVjUGFyYWxsZWxHZXRRdWVyeURlc2Mo c2htX3RvYyAqdG9jLCBEZXN0UmVjZWl2ZXIgKnJlY2VpdmVyLAogCQkJCQkJIGludCBpbnN0cnVt ZW50X29wdGlvbnMpCiB7CiAJY2hhcgkgICAqcHN0bXRzcGFjZTsKKwljaGFyCSAgICpleGVjbG9j a3JlbHNpbmZvc3BhY2U7CiAJY2hhcgkgICAqcGFyYW1zcGFjZTsKIAlQbGFubmVkU3RtdCAqcHN0 bXQ7CisJRXhlY0xvY2tSZWxzSW5mbyAqZXhlY2xvY2tyZWxzaW5mbzsKIAlQYXJhbUxpc3RJbmZv IHBhcmFtTEk7CiAJY2hhcgkgICAqcXVlcnlTdHJpbmc7CiAKQEAgLTEyNDMsMTIgKzEyNjIsMTcg QEAgRXhlY1BhcmFsbGVsR2V0UXVlcnlEZXNjKHNobV90b2MgKnRvYywgRGVzdFJlY2VpdmVyICpy ZWNlaXZlciwKIAlwc3RtdHNwYWNlID0gc2htX3RvY19sb29rdXAodG9jLCBQQVJBTExFTF9LRVlf UExBTk5FRFNUTVQsIGZhbHNlKTsKIAlwc3RtdCA9IChQbGFubmVkU3RtdCAqKSBzdHJpbmdUb05v ZGUocHN0bXRzcGFjZSk7CiAKKwkvKiBSZWNvbnN0cnVjdCBsZWFkZXItc3VwcGxpZWQgRXhlY0xv Y2tSZWxzSW5mby4gKi8KKwlleGVjbG9ja3JlbHNpbmZvc3BhY2UgPSBzaG1fdG9jX2xvb2t1cCh0 b2MsIFBBUkFMTEVMX0tFWV9FWEVDTE9DS1JFTFNJTkZPLAorCQkJCQkJCQkJCSAgZmFsc2UpOwor CWV4ZWNsb2NrcmVsc2luZm8gPSAoRXhlY0xvY2tSZWxzSW5mbyAqKSBzdHJpbmdUb05vZGUoZXhl Y2xvY2tyZWxzaW5mb3NwYWNlKTsKKwogCS8qIFJlY29uc3RydWN0IFBhcmFtTGlzdEluZm8uICov CiAJcGFyYW1zcGFjZSA9IHNobV90b2NfbG9va3VwKHRvYywgUEFSQUxMRUxfS0VZX1BBUkFNTElT VElORk8sIGZhbHNlKTsKIAlwYXJhbUxJID0gUmVzdG9yZVBhcmFtTGlzdCgmcGFyYW1zcGFjZSk7 CiAKIAkvKiBDcmVhdGUgYSBRdWVyeURlc2MgZm9yIHRoZSBxdWVyeS4gKi8KLQlyZXR1cm4gQ3Jl YXRlUXVlcnlEZXNjKHBzdG10LAorCXJldHVybiBDcmVhdGVRdWVyeURlc2MocHN0bXQsIGV4ZWNs b2NrcmVsc2luZm8sCiAJCQkJCQkgICBxdWVyeVN0cmluZywKIAkJCQkJCSAgIEdldEFjdGl2ZVNu YXBzaG90KCksIEludmFsaWRTbmFwc2hvdCwKIAkJCQkJCSAgIHJlY2VpdmVyLCBwYXJhbUxJLCBO VUxMLCBpbnN0cnVtZW50X29wdGlvbnMpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZXhlY1BhcnRpdGlvbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5j CmluZGV4IDdmZjVhOTVmMDUuLmZkZGM5NzI4MGUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFy dGl0aW9uLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJtYi9wZ193Y2hhci5oIgogI2lu Y2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgorI2luY2x1 ZGUgInBhcnNlci9wYXJzZXRyZWUuaCIKICNpbmNsdWRlICJwYXJ0aXRpb25pbmcvcGFydGJvdW5k cy5oIgogI2luY2x1ZGUgInBhcnRpdGlvbmluZy9wYXJ0ZGVzYy5oIgogI2luY2x1ZGUgInBhcnRp dGlvbmluZy9wYXJ0cHJ1bmUuaCIKQEAgLTE4Myw4ICsxODQsMTMgQEAgc3RhdGljIGNoYXIgKkV4 ZWNCdWlsZFNsb3RQYXJ0aXRpb25LZXlEZXNjcmlwdGlvbihSZWxhdGlvbiByZWwsCiAJCQkJCQkJ CQkJCQkgIGludCBtYXhmaWVsZGxlbik7CiBzdGF0aWMgTGlzdCAqYWRqdXN0X3BhcnRpdGlvbl9j b2xub3MoTGlzdCAqY29sbm9zLCBSZXN1bHRSZWxJbmZvICpsZWFmX3BhcnRfcnJpKTsKIHN0YXRp YyBQYXJ0aXRpb25QcnVuZVN0YXRlICpFeGVjQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZShQbGFu U3RhdGUgKnBsYW5zdGF0ZSwKLQkJCQkJCQkgIFBhcnRpdGlvblBydW5lSW5mbyAqcGFydGl0aW9u cHJ1bmVpbmZvKTsKLXN0YXRpYyBCaXRtYXBzZXQgKkV4ZWNGaW5kSW5pdGlhbE1hdGNoaW5nU3Vi UGxhbnMoUGFydGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0ZSk7CisJCQkJCQkJICBQYXJ0aXRp b25QcnVuZUluZm8gKnBhcnRpdGlvbnBydW5laW5mbywKKwkJCQkJCQkgIGJvb2wgY29uc2lkZXJf aW5pdGlhbF9zdGVwcywKKwkJCQkJCQkgIGJvb2wgY29uc2lkZXJfZXhlY19zdGVwcywKKwkJCQkJ CQkgIExpc3QgKnJ0YWJsZSwgRXhwckNvbnRleHQgKmVjb250ZXh0LAorCQkJCQkJCSAgUGFydGl0 aW9uRGlyZWN0b3J5IHBhcnRkaXIpOworc3RhdGljIEJpdG1hcHNldCAqRXhlY0ZpbmRJbml0aWFs TWF0Y2hpbmdTdWJQbGFucyhQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlLAorCQkJCQkJ CQlQYXJ0aXRpb25QcnVuZUluZm8gKnBydW5laW5mbyk7CiBzdGF0aWMgdm9pZCBFeGVjSW5pdFBy dW5pbmdDb250ZXh0KFBhcnRpdGlvblBydW5lQ29udGV4dCAqY29udGV4dCwKIAkJCQkJCQkJICAg TGlzdCAqcHJ1bmluZ19zdGVwcywKIAkJCQkJCQkJICAgUGFydGl0aW9uRGVzYyBwYXJ0ZGVzYywK QEAgLTE0ODMsOCArMTQ4OSw5IEBAIGFkanVzdF9wYXJ0aXRpb25fY29sbm9zKExpc3QgKmNvbG5v cywgUmVzdWx0UmVsSW5mbyAqbGVhZl9wYXJ0X3JyaSkKICAqIGNvbnNpZGVyZWQgdG8gYmUgYSBz dGFibGUgZXhwcmVzc2lvbiwgaXQgY2FuIGNoYW5nZSB2YWx1ZSBmcm9tIG9uZSBwbGFuCiAgKiBu b2RlIHNjYW4gdG8gdGhlIG5leHQgZHVyaW5nIHF1ZXJ5IGV4ZWN1dGlvbi4gIFN0YWJsZSBjb21w YXJpc29uCiAgKiBleHByZXNzaW9ucyB0aGF0IGRvbid0IGludm9sdmUgc3VjaCBQYXJhbXMgYWxs b3cgcGFydGl0aW9uIHBydW5pbmcgdG8gYmUKLSAqIGRvbmUgb25jZSBkdXJpbmcgZXhlY3V0b3Ig c3RhcnR1cC4gIEV4cHJlc3Npb25zIHRoYXQgZG8gaW52b2x2ZSBzdWNoIFBhcmFtcwotICogcmVx dWlyZSB1cyB0byBwcnVuZSBzZXBhcmF0ZWx5IGZvciBlYWNoIHNjYW4gb2YgdGhlIHBhcmVudCBw bGFuIG5vZGUuCisgKiBkb25lIG9uY2UgZHVyaW5nIGV4ZWN1dG9yIHN0YXJ0dXAgb3IgZXZlbiBi ZWZvcmUgZHVyaW5nIEV4ZWN1dG9yR2V0TG9ja1JlbHMoKS4KKyAqIEV4cHJlc3Npb25zIHRoYXQg ZG8gaW52b2x2ZSBzdWNoIFBhcmFtcyByZXF1aXJlIHVzIHRvIHBydW5lIHNlcGFyYXRlbHkgZm9y CisgKiBlYWNoIHNjYW4gb2YgdGhlIHBhcmVudCBwbGFuIG5vZGUuCiAgKgogICogTm90ZSB0aGF0 IHBydW5pbmcgYXdheSB1bm5lZWRlZCBzdWJwbGFucyBkdXJpbmcgZXhlY3V0b3Igc3RhcnR1cCBo YXMgdGhlCiAgKiBhZGRlZCBiZW5lZml0IG9mIG5vdCBoYXZpbmcgdG8gaW5pdGlhbGl6ZSB0aGUg dW5uZWVkZWQgc3VicGxhbnMgYXQgYWxsLgpAQCAtMTQ5NiwxMCArMTUwMywxNyBAQCBhZGp1c3Rf cGFydGl0aW9uX2NvbG5vcyhMaXN0ICpjb2xub3MsIFJlc3VsdFJlbEluZm8gKmxlYWZfcGFydF9y cmkpCiAgKgkJQ3JlYXRlcyB0aGUgUGFydGl0aW9uUHJ1bmVTdGF0ZSByZXF1aXJlZCBieSBlYWNo IG9mIHRoZSB0d28gcHJ1bmluZwogICoJCWZ1bmN0aW9ucy4gIERldGFpbHMgc3RvcmVkIGluY2x1 ZGUgaG93IHRvIG1hcCB0aGUgcGFydGl0aW9uIGluZGV4CiAgKgkJcmV0dXJuZWQgYnkgdGhlIHBh cnRpdGlvbiBwcnVuaW5nIGNvZGUgaW50byBzdWJwbGFuIGluZGV4ZXMuICBBbHNvCi0gKgkJZGV0 ZXJtaW5lcyB0aGUgc2V0IG9mIGluaXRpYWxseSB2YWxpZCBzdWJwbGFucyBieSBwZXJmb3JtaW5n IGluaXRpYWwKLSAqCQlwcnVuaW5nIHN0ZXBzLCBvbmx5IHdoaWNoIG5lZWQgYmUgaW5pdGlhbGl6 ZWQgYnkgdGhlIGNhbGxlciBzdWNoIGFzCi0gKgkJRXhlY0luaXRBcHBlbmQuICBNYXBzIGluIFBh cnRpdGlvblBydW5lU3RhdGUgYXJlIHVwZGF0ZWQgdG8gYWNjb3VudAotICoJCWZvciBpbml0aWFs IHBydW5pbmcgaGF2aW5nIGVsaW1pbmF0ZWQgc29tZSBvZiB0aGUgc3VicGxhbnMsIGlmIGFueS4K KyAqCQlkZXRlcm1pbmVzIHRoZSBzZXQgb2YgaW5pdGlhbGx5IHZhbGlkIHN1YnBsYW5zIGJ5IGVp dGhlciBsb29raW5nIHRoYXQKKyAqCQl1cCBpbiB0aGUgcGxhbiBub2RlJ3MgUGxhbkluaXRQcnVu aW5nT3V0cHV0IGlmIG9uZSBmb3VuZCBpbgorICoJCUVTdGF0ZS5lc19leGVjbG9ja3JlbGluZm8g b3IgYnkgcGVyZm9ybWluZyBpbml0aWFsIHBydW5pbmcgc3RlcHMuCisgKgkJT25seSB0aGUgc3Vi cGxhbnMgaW5jbHVkZWQgaW4gdGhhdCBuZWVkIGJlIGluaXRpYWxpemVkIGJ5IHRoZSBjYWxsZXIK KyAqCQlzdWNoIGFzIEV4ZWNJbml0QXBwZW5kLiAgTWFwcyBpbiBQYXJ0aXRpb25QcnVuZVN0YXRl IGFyZSB1cGRhdGVkIHRvCisgKgkJYWNjb3VudCBmb3IgaW5pdGlhbCBwcnVuaW5nIGhhdmluZyBl bGltaW5hdGVkIHNvbWUgb2YgdGhlIHN1YnBsYW5zLAorICoJCWlmIGFueS4KKyAqCisgKiBFeGVj R2V0TG9ja1JlbHNEb0luaXRpYWxQcnVuaW5nOgorICoJCURvIGluaXRpYWwgcHJ1bmluZyBhcyBw YXJ0IG9mIEV4ZWNHZXRMb2NrUmVscygpIG9uIHRoZSBwYXJlbnQgcGxhbgorICoJCW5vZGUKICAq CiAgKiBFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnM6CiAgKgkJUmV0dXJucyBpbmRleGVzIG9mIG1h dGNoaW5nIHN1YnBsYW5zIGFmdGVyIGV2YWx1YXRpbmcgYWxsIGF2YWlsYWJsZQpAQCAtMTUxNCw5 ICsxNTI4LDEwIEBAIGFkanVzdF9wYXJ0aXRpb25fY29sbm9zKExpc3QgKmNvbG5vcywgUmVzdWx0 UmVsSW5mbyAqbGVhZl9wYXJ0X3JyaSkKICAqIEV4ZWNJbml0UGFydGl0aW9uUHJ1bmluZwogICog CQlJbml0aWFsaXplIGRhdGEgc3RydWN0dXJlIG5lZWRlZCBmb3IgcnVuLXRpbWUgcGFydGl0aW9u IHBydW5pbmcKICAqCi0gKiBJbml0aWFsIHBydW5pbmcgY2FuIGJlIGRvbmUgaW1tZWRpYXRlbHks IHNvIGl0IGlzIGRvbmUgaGVyZSBpZiBuZWVkZWQgYW5kCi0gKiB0aGUgc2V0IG9mIHN1cnZpdmlu ZyBwYXJ0aXRpb24gc3VicGxhbnMnIGluZGV4ZXMgYXJlIGFkZGVkIHRvIHRoZSBvdXRwdXQKLSAq IHBhcmFtZXRlciAqaW5pdGlhbGx5X3ZhbGlkX3N1YnBsYW5zLgorICogSW5pdGlhbCBwcnVuaW5n IGNhbiBiZSBkb25lIGltbWVkaWF0ZWx5LCBzbyBpdCBpcyBkb25lIGhlcmUgdW5sZXNzIGl0IGhh cworICogYWxyZWFkeSBiZWVuIGRvbmUgYnkgRXhlY0dldExvY2tSZWxzRG9Jbml0aWFsUHJ1bmlu ZygpLCBhbmQgdGhlIHNldCBvZgorICogc3Vydml2aW5nIHBhcnRpdGlvbiBzdWJwbGFucycgaW5k ZXhlcyBhcmUgYWRkZWQgdG8gdGhlIG91dHB1dCBwYXJhbWV0ZXIKKyAqICppbml0aWFsbHlfdmFs aWRfc3VicGxhbnMuCiAgKgogICogSWYgc3VicGxhbnMgYXJlIGluZGVlZCBwcnVuZWQsIHN1YnBs YW5fbWFwIGFycmF5cyBjb250YWluZWQgaW4gdGhlIHJldHVybmVkCiAgKiBQYXJ0aXRpb25QcnVu ZVN0YXRlIGFyZSByZS1zZXF1ZW5jZWQgdG8gbm90IGNvdW50IHRob3NlLCB0aG91Z2ggb25seSBp ZiB0aGUKQEAgLTE1MzAsMjIgKzE1NDUsNTcgQEAgRXhlY0luaXRQYXJ0aXRpb25QcnVuaW5nKFBs YW5TdGF0ZSAqcGxhbnN0YXRlLAogewogCVBhcnRpdGlvblBydW5lU3RhdGUgKnBydW5lc3RhdGU7 CiAJRVN0YXRlICplc3RhdGUgPSBwbGFuc3RhdGUtPnN0YXRlOworCVBsYW4gICAqcGxhbiA9IHBs YW5zdGF0ZS0+cGxhbjsKKwlQbGFuSW5pdFBydW5pbmdPdXRwdXQgKmluaXRQcnVuaW5nT3V0cHV0 ID0gTlVMTDsKKwlib29sCWRvX3BydW5pbmcgPSAocHJ1bmVpbmZvLT5uZWVkc19pbml0X3BydW5p bmcgfHwKKwkJCQkJCSAgcHJ1bmVpbmZvLT5uZWVkc19leGVjX3BydW5pbmcpOwogCi0JLyogV2Ug bWF5IG5lZWQgYW4gZXhwcmVzc2lvbiBjb250ZXh0IHRvIGV2YWx1YXRlIHBhcnRpdGlvbiBleHBy cyAqLwotCUV4ZWNBc3NpZ25FeHByQ29udGV4dChlc3RhdGUsIHBsYW5zdGF0ZSk7CisJLyogUmV0 cmlldmUgdGhlIHBhcmVudCBwbGFuJ3MgUGxhbkluaXRQcnVuaW5nT3V0cHV0LCBpZiBhbnkuICov CisJaWYgKGVzdGF0ZS0+ZXNfZXhlY2xvY2tyZWxzaW5mbykKKwl7CisJCWluaXRQcnVuaW5nT3V0 cHV0ID0gKFBsYW5Jbml0UHJ1bmluZ091dHB1dCAqKQorCQkJRXhlY0ZldGNoUGxhbkluaXRQcnVu aW5nT3V0cHV0KGVzdGF0ZS0+ZXNfZXhlY2xvY2tyZWxzaW5mbywgcGxhbik7CiAKLQkvKgotCSAq IENyZWF0ZSB0aGUgd29ya2luZyBkYXRhIHN0cnVjdHVyZSBmb3IgcHJ1bmluZy4KLQkgKi8KLQlw cnVuZXN0YXRlID0gRXhlY0NyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUocGxhbnN0YXRlLCBwcnVu ZWluZm8pOworCQlBc3NlcnQoaW5pdFBydW5pbmdPdXRwdXQgIT0gTlVMTCAmJgorCQkJICAgSXNB KGluaXRQcnVuaW5nT3V0cHV0LCBQbGFuSW5pdFBydW5pbmdPdXRwdXQpKTsKKwkJLyogTm8gbmVl ZCB0byBkbyBpbml0aWFsIHBydW5pbmcgYWdhaW4sIG9ubHkgZXhlYyBwcnVuaW5nLiAqLworCQlk b19wcnVuaW5nID0gcHJ1bmVpbmZvLT5uZWVkc19leGVjX3BydW5pbmc7CisJfQorCisJcHJ1bmVz dGF0ZSA9IE5VTEw7CisJaWYgKGRvX3BydW5pbmcpCisJeworCQkvKiBXZSBtYXkgbmVlZCBhbiBl eHByZXNzaW9uIGNvbnRleHQgdG8gZXZhbHVhdGUgcGFydGl0aW9uIGV4cHJzICovCisJCUV4ZWNB c3NpZ25FeHByQ29udGV4dChlc3RhdGUsIHBsYW5zdGF0ZSk7CisKKwkJLyogRm9yIGRhdGEgcmVh ZGluZywgZXhlY3V0b3IgYWx3YXlzIG9taXRzIGRldGFjaGVkIHBhcnRpdGlvbnMgKi8KKwkJaWYg KGVzdGF0ZS0+ZXNfcGFydGl0aW9uX2RpcmVjdG9yeSA9PSBOVUxMKQorCQkJZXN0YXRlLT5lc19w YXJ0aXRpb25fZGlyZWN0b3J5ID0KKwkJCQlDcmVhdGVQYXJ0aXRpb25EaXJlY3RvcnkoZXN0YXRl LT5lc19xdWVyeV9jeHQsIGZhbHNlKTsKKworCQkvKgorCQkgKiBDcmVhdGUgdGhlIHdvcmtpbmcg ZGF0YSBzdHJ1Y3R1cmUgZm9yIHBydW5pbmcuICBObyBuZWVkIHRvIGNvbnNpZGVyCisJCSAqIGlu aXRpYWwgcHJ1bmluZyBzdGVwcyBpZiB3ZSBoYXZlIGEgUGxhbkluaXRQcnVuaW5nT3V0cHV0Lgor CQkgKi8KKwkJcHJ1bmVzdGF0ZSA9IEV4ZWNDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlKHBsYW5z dGF0ZSwgcHJ1bmVpbmZvLAorCQkJCQkJCQkJCQkJICAgaW5pdFBydW5pbmdPdXRwdXQgPT0gTlVM TCwgdHJ1ZSwKKwkJCQkJCQkJCQkJCSAgIE5JTCwgcGxhbnN0YXRlLT5wc19FeHByQ29udGV4dCwK KwkJCQkJCQkJCQkJCSAgIGVzdGF0ZS0+ZXNfcGFydGl0aW9uX2RpcmVjdG9yeSk7CisJfQogCiAJ LyoKIAkgKiBQZXJmb3JtIGFuIGluaXRpYWwgcGFydGl0aW9uIHBydW5lLCBpZiByZXF1aXJlZC4K IAkgKi8KLQlpZiAocHJ1bmVzdGF0ZS0+ZG9faW5pdGlhbF9wcnVuZSkKKwlpZiAoaW5pdFBydW5p bmdPdXRwdXQpCisJeworCQkvKiBFeGVjR2V0TG9ja1JlbHNEb0luaXRpYWxQcnVuaW5nKCkgYWxy ZWFkeSBkaWQgaXQgZm9yIHVzISAqLworCQkqaW5pdGlhbGx5X3ZhbGlkX3N1YnBsYW5zID0gaW5p dFBydW5pbmdPdXRwdXQtPmluaXRpYWxseV92YWxpZF9zdWJwbGFuczsKKwl9CisJZWxzZSBpZiAo cHJ1bmVzdGF0ZSAmJiBwcnVuZXN0YXRlLT5kb19pbml0aWFsX3BydW5lKQogCXsKIAkJLyogRGV0 ZXJtaW5lIHdoaWNoIHN1YnBsYW5zIHN1cnZpdmUgaW5pdGlhbCBwcnVuaW5nICovCi0JCSppbml0 aWFsbHlfdmFsaWRfc3VicGxhbnMgPSBFeGVjRmluZEluaXRpYWxNYXRjaGluZ1N1YlBsYW5zKHBy dW5lc3RhdGUpOworCQkqaW5pdGlhbGx5X3ZhbGlkX3N1YnBsYW5zID0gRXhlY0ZpbmRJbml0aWFs TWF0Y2hpbmdTdWJQbGFucyhwcnVuZXN0YXRlLAorCQkJCQkJCQkJCQkJCQkJCQlwcnVuZWluZm8p OwogCX0KIAllbHNlCiAJewpAQCAtMTU2Myw3ICsxNjEzLDcgQEAgRXhlY0luaXRQYXJ0aXRpb25Q cnVuaW5nKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLAogCSAqIGludmFsaWQgZGF0YSBpbiBwcnVuZXN0 YXRlLCBiZWNhdXNlIHRoYXQgZGF0YSB3b24ndCBiZSBjb25zdWx0ZWQgYWdhaW4KIAkgKiAoY2Yg aW5pdGlhbCBBc3NlcnQgaW4gRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKS4KIAkgKi8KLQlpZiAo cHJ1bmVzdGF0ZS0+ZG9fZXhlY19wcnVuZSAmJgorCWlmIChwcnVuZXN0YXRlICYmIHBydW5lc3Rh dGUtPmRvX2V4ZWNfcHJ1bmUgJiYKIAkJYm1zX251bV9tZW1iZXJzKCppbml0aWFsbHlfdmFsaWRf c3VicGxhbnMpIDwgbl90b3RhbF9zdWJwbGFucykKIAkJUGFydGl0aW9uUHJ1bmVTdGF0ZUZpeFN1 YlBsYW5NYXAocHJ1bmVzdGF0ZSwKIAkJCQkJCQkJCQkgKmluaXRpYWxseV92YWxpZF9zdWJwbGFu cywKQEAgLTE1NzIsMTIgKzE2MjIsNzUgQEAgRXhlY0luaXRQYXJ0aXRpb25QcnVuaW5nKFBsYW5T dGF0ZSAqcGxhbnN0YXRlLAogCXJldHVybiBwcnVuZXN0YXRlOwogfQogCisvKgorICogRXhlY0dl dExvY2tSZWxzRG9Jbml0aWFsUHJ1bmluZworICoJCVBlcmZvcm0gaW5pdGlhbCBwcnVuaW5nIGFz IHBhcnQgb2YgZG9pbmcgRXhlY0dldExvY2tSZWxzKCkgb24gdGhlIHBhcmVudAorICoJCXBsYW4g bm9kZQorICovCitCaXRtYXBzZXQgKgorRXhlY0dldExvY2tSZWxzRG9Jbml0aWFsUHJ1bmluZyhQ bGFuICpwbGFuLCBFeGVjR2V0TG9ja1JlbHNDb250ZXh0ICpjb250ZXh0LAorCQkJCQkJCQlQYXJ0 aXRpb25QcnVuZUluZm8gKnBydW5laW5mbykKK3sKKwlMaXN0CQkgKnJ0YWJsZSA9IGNvbnRleHQt PnN0bXQtPnJ0YWJsZTsKKwlQYXJhbUxpc3RJbmZvIHBhcmFtcyA9IGNvbnRleHQtPnBhcmFtczsK KwlFeHByQ29udGV4dAkgKmVjb250ZXh0OworCVBhcnRpdGlvbkRpcmVjdG9yeSBwZGlyOworCU1l bW9yeUNvbnRleHQgb2xkY29udGV4dCwKKwkJCQkgIHRtcGNvbnRleHQ7CisJUGFydGl0aW9uUHJ1 bmVTdGF0ZSAqcHJ1bmVzdGF0ZTsKKwlQbGFuSW5pdFBydW5pbmdPdXRwdXQgKmluaXRQcnVuaW5n T3V0cHV0OworCisJLyoKKwkgKiBBIHRlbXBvcmFyeSBjb250ZXh0IHRvIGFsbG9jYXRlIHN0dWZm IG5lZWRkZWQgdG8gcnVuIHRoZSBwcnVuaW5nIHN0ZXBzLgorCSAqLworCXRtcGNvbnRleHQgPSBB bGxvY1NldENvbnRleHRDcmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCQkgICAi aW5pdGlhbCBwcnVuaW5nIHdvcmtpbmcgZGF0YSIsCisJCQkJCQkJCQkgICBBTExPQ1NFVF9ERUZB VUxUX1NJWkVTKTsKKwlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHRtcGNvbnRl eHQpOworCisJLyoKKwkgKiBQYXJ0aXRpb25EaXJlY3RvcnkgdG8gbG9vayB1cCBwYXJ0aXRpb24g ZGVzY3JpcHRvcnMsIHdoaWNoIG9taXRzCisJICogZGV0YWNoZWQgcGFydGl0aW9ucywganVzdCBs aWtlIGluIHRoZSBleGVjdXRvciBwcm9wZXIuCisJICovCisJcGRpciA9IENyZWF0ZVBhcnRpdGlv bkRpcmVjdG9yeShDdXJyZW50TWVtb3J5Q29udGV4dCwgZmFsc2UpOworCisJLyoKKwkgKiBXZSBk b24ndCB5ZXQgaGF2ZSBhIFBsYW5TdGF0ZSBmb3IgdGhlIHBhcmVudCBwbGFuIG5vZGUsIHNvIG11 c3QgY3JlYXRlCisJICogYSBzdGFuZGFsb25lIEV4cHJDb250ZXh0IHRvIGV2YWx1YXRlIHBydW5p bmcgZXhwcmVzc2lvbnMsIGVxdWlwcGVkIHdpdGgKKwkgKiB0aGUgaW5mb3JtYXRpb24gYWJvdXQg dGhlIEVYVEVSTiBwYXJhbWV0ZXJzIHRoYXQgdGhlIGNhbGxlciBwYXNzZWQgdXMuCisJICogTm90 ZSB0aGF0IHRoYXQncyBva2F5IGJlY2F1c2UgdGhlIGluaXRpYWwgcHJ1bmluZyBzdGVwcyBkbyBu b3QgY29udGFpbgorCSAqIGFueXRoaW5nIHRoYXQgcmVxdWlyZXMgdGhlIGV4ZWN1dGlvbiB0byBo YXZlIHN0YXJ0ZWQuCisJICovCisJZWNvbnRleHQgPSBDcmVhdGVTdGFuZGFsb25lRXhwckNvbnRl eHQoKTsKKwllY29udGV4dC0+ZWN4dF9wYXJhbV9saXN0X2luZm8gPSBwYXJhbXM7CisJcHJ1bmVz dGF0ZSA9IEV4ZWNDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlKE5VTEwsIHBydW5laW5mbywKKwkJ CQkJCQkJCQkJICAgdHJ1ZSwgZmFsc2UsCisJCQkJCQkJCQkJCSAgIHJ0YWJsZSwgZWNvbnRleHQs CisJCQkJCQkJCQkJCSAgIHBkaXIpOworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0 KTsKKworCS8qIERvIHRoZSBwcnVuaW5nIGFuZCBwb3B1bGF0ZSBhIFBsYW5Jbml0UHJ1bmluZ091 dHB1dCBmb3IgdGhpcyBub2RlLiAqLworCWluaXRQcnVuaW5nT3V0cHV0ID0gbWFrZU5vZGUoUGxh bkluaXRQcnVuaW5nT3V0cHV0KTsKKwlpbml0UHJ1bmluZ091dHB1dC0+aW5pdGlhbGx5X3ZhbGlk X3N1YnBsYW5zID0KKwkJRXhlY0ZpbmRJbml0aWFsTWF0Y2hpbmdTdWJQbGFucyhwcnVuZXN0YXRl LCBwcnVuZWluZm8pOworCUV4ZWNTdG9yZVBsYW5Jbml0UHJ1bmluZ091dHB1dChjb250ZXh0LCBp bml0UHJ1bmluZ091dHB1dCwgcGxhbik7CisKKwlGcmVlRXhwckNvbnRleHQoZWNvbnRleHQsIHRy dWUpOworCURlc3Ryb3lQYXJ0aXRpb25EaXJlY3RvcnkocGRpcik7CisJTWVtb3J5Q29udGV4dERl bGV0ZSh0bXBjb250ZXh0KTsKKworCXJldHVybiBpbml0UHJ1bmluZ091dHB1dC0+aW5pdGlhbGx5 X3ZhbGlkX3N1YnBsYW5zOworfQorCiAvKgogICogRXhlY0NyZWF0ZVBhcnRpdGlvblBydW5lU3Rh dGUKICAqCQlCdWlsZCB0aGUgZGF0YSBzdHJ1Y3R1cmUgcmVxdWlyZWQgZm9yIGNhbGxpbmcKICAq CQlFeGVjRmluZEluaXRpYWxNYXRjaGluZ1N1YlBsYW5zIGFuZCBFeGVjRmluZE1hdGNoaW5nU3Vi UGxhbnMuCiAgKgotICogJ3BsYW5zdGF0ZScgaXMgdGhlIHBhcmVudCBwbGFuIG5vZGUncyBleGVj dXRpb24gc3RhdGUuCisgKiAncGxhbnN0YXRlJywgaWYgbm90IE5VTEwsIGlzIHRoZSBwYXJlbnQg cGxhbiBub2RlJ3MgZXhlY3V0aW9uIHN0YXRlLiAgSXQKKyAqIGNhbiBiZSBOVUxMIGlmIGJlaW5n IGNhbGxlZCBiZWZvcmUgRXhlY3V0b3JTdGFydCgpLCBpbiB3aGljaCBjYXNlLAorICogJ3J0YWJs ZScgKHJhbmdlIHRhYmxlKSwgJ2Vjb250ZXh0JywgYW5kICdwYXJ0ZGlyJyBtdXN0IGJlIGV4cGxp Y2l0bHkKKyAqIHByb3ZpZGVkLgogICoKICAqICdwYXJ0aXRpb25wcnVuZWluZm8nIGlzIGEgUGFy dGl0aW9uUHJ1bmVJbmZvIGFzIGdlbmVyYXRlZCBieQogICogbWFrZV9wYXJ0aXRpb25fcHJ1bmVp bmZvLiAgSGVyZSB3ZSBidWlsZCBhIFBhcnRpdGlvblBydW5lU3RhdGUgY29udGFpbmluZyBhCkBA IC0xNTkyLDE5ICsxNzA1LDIwIEBAIEV4ZWNJbml0UGFydGl0aW9uUHJ1bmluZyhQbGFuU3RhdGUg KnBsYW5zdGF0ZSwKICAqLwogc3RhdGljIFBhcnRpdGlvblBydW5lU3RhdGUgKgogRXhlY0NyZWF0 ZVBhcnRpdGlvblBydW5lU3RhdGUoUGxhblN0YXRlICpwbGFuc3RhdGUsCi0JCQkJCQkJICBQYXJ0 aXRpb25QcnVuZUluZm8gKnBhcnRpdGlvbnBydW5laW5mbykKKwkJCQkJCQkgIFBhcnRpdGlvblBy dW5lSW5mbyAqcGFydGl0aW9ucHJ1bmVpbmZvLAorCQkJCQkJCSAgYm9vbCBjb25zaWRlcl9pbml0 aWFsX3N0ZXBzLAorCQkJCQkJCSAgYm9vbCBjb25zaWRlcl9leGVjX3N0ZXBzLAorCQkJCQkJCSAg TGlzdCAqcnRhYmxlLCBFeHByQ29udGV4dCAqZWNvbnRleHQsCisJCQkJCQkJICBQYXJ0aXRpb25E aXJlY3RvcnkgcGFydGRpcikKIHsKLQlFU3RhdGUJICAgKmVzdGF0ZSA9IHBsYW5zdGF0ZS0+c3Rh dGU7CisJRVN0YXRlCSAgICplc3RhdGUgPSBwbGFuc3RhdGUgPyBwbGFuc3RhdGUtPnN0YXRlIDog TlVMTDsKIAlQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlOwogCWludAkJCW5fcGFydF9o aWVyYXJjaGllczsKIAlMaXN0Q2VsbCAgICpsYzsKIAlpbnQJCQlpOwotCUV4cHJDb250ZXh0CSpl Y29udGV4dCA9IHBsYW5zdGF0ZS0+cHNfRXhwckNvbnRleHQ7CiAKLQkvKiBGb3IgZGF0YSByZWFk aW5nLCBleGVjdXRvciBhbHdheXMgb21pdHMgZGV0YWNoZWQgcGFydGl0aW9ucyAqLwotCWlmIChl c3RhdGUtPmVzX3BhcnRpdGlvbl9kaXJlY3RvcnkgPT0gTlVMTCkKLQkJZXN0YXRlLT5lc19wYXJ0 aXRpb25fZGlyZWN0b3J5ID0KLQkJCUNyZWF0ZVBhcnRpdGlvbkRpcmVjdG9yeShlc3RhdGUtPmVz X3F1ZXJ5X2N4dCwgZmFsc2UpOworCUFzc2VydCgoZXN0YXRlICE9IE5VTEwpIHx8CisJCQkocGFy dGRpciAhPSBOVUxMICYmIGVjb250ZXh0ICE9IE5VTEwgJiYgcnRhYmxlICE9IE5JTCkpOwogCiAJ bl9wYXJ0X2hpZXJhcmNoaWVzID0gbGlzdF9sZW5ndGgocGFydGl0aW9ucHJ1bmVpbmZvLT5wcnVu ZV9pbmZvcyk7CiAJQXNzZXJ0KG5fcGFydF9oaWVyYXJjaGllcyA+IDApOwpAQCAtMTY1NSwxOSAr MTc2OSw0OCBAQCBFeGVjQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZShQbGFuU3RhdGUgKnBsYW5z dGF0ZSwKIAkJCVBhcnRpdGlvbmVkUmVsUHJ1bmVJbmZvICpwaW5mbyA9IGxmaXJzdF9ub2RlKFBh cnRpdGlvbmVkUmVsUHJ1bmVJbmZvLCBsYzIpOwogCQkJUGFydGl0aW9uZWRSZWxQcnVuaW5nRGF0 YSAqcHBydW5lID0gJnBydW5lZGF0YS0+cGFydHJlbHBydW5lZGF0YVtqXTsKIAkJCVJlbGF0aW9u CXBhcnRyZWw7CisJCQlib29sCQljbG9zZV9wYXJ0cmVsID0gZmFsc2U7CiAJCQlQYXJ0aXRpb25E ZXNjIHBhcnRkZXNjOwogCQkJUGFydGl0aW9uS2V5IHBhcnRrZXk7CiAKIAkJCS8qCi0JCQkgKiBX ZSBjYW4gcmVseSBvbiB0aGUgY29waWVzIG9mIHRoZSBwYXJ0aXRpb25lZCB0YWJsZSdzIHBhcnRp dGlvbgotCQkJICoga2V5IGFuZCBwYXJ0aXRpb24gZGVzY3JpcHRvciBhcHBlYXJpbmcgaW4gaXRz IHJlbGNhY2hlIGVudHJ5LAotCQkJICogYmVjYXVzZSB0aGF0IGVudHJ5IHdpbGwgYmUgaGVsZCBv cGVuIGFuZCBsb2NrZWQgZm9yIHRoZQotCQkJICogZHVyYXRpb24gb2YgdGhpcyBleGVjdXRvciBy dW4uCisJCQkgKiBNdXN0IG9wZW4gdGhlIHJlbGF0aW9uIGJ5IG91cnNlbHZlcyB3aGVuIGNhbGxl ZCBiZWZvcmUgdGhlCisJCQkgKiBleGVjdXRpb24gaGFzIHN0YXJ0ZWQsIHN1Y2ggYXMsIHdoZW4g Y2FsbGVkIGR1cmluZworCQkJICogRXhlY3V0b3JHZXRMb2NrUmVscygpIG9uIGEgY2FjaGVkIHBs YW4uICBJbiB0aGF0IGNhc2UsCisJCQkgKiBzdWItcGFydGl0aW9ucyBtdXN0IGJlIGxvY2tlZCwg YmVjYXVzZSBBY3F1aXJlUGxhbm5lckxvY2tzKCkKKwkJCSAqIHdvdWxkIG5vdCBoYXZlIHNlZW4g dGhlbS4gKDFzdCByZWxhdGlvbiBpbiBhIHBhcnRyZWxwcnVuZWluZm9zCisJCQkgKiBsaXN0IGlz IGFsd2F5cyB0aGUgcm9vdCBwYXJ0aXRpb25lZCB0YWJsZSBhcHBlYXJpbmcgaW4gdGhlCisJCQkg KiBxdWVyeSwgd2hpY2ggQWNxdWlyZVBsYW5uZXJMb2NrcygpIHdvdWxkIGhhdmUgbG9ja2VkOyB0 aGUKKwkJCSAqIEFzc2VydCBpbiByZWxhdGlvbl9vcGVuKCkgZ3VhcmRzIHRoYXQgYXNzdW1wdGlv bi4pCisJCQkgKi8KKwkJCWlmIChlc3RhdGUgPT0gTlVMTCkKKwkJCXsKKwkJCQlSYW5nZVRibEVu dHJ5ICpydGUgPSBydF9mZXRjaChwaW5mby0+cnRpbmRleCwgcnRhYmxlKTsKKwkJCQlpbnQJCWxv Y2ttb2RlID0gKGogPT0gMCkgPyBOb0xvY2sgOiBydGUtPnJlbGxvY2ttb2RlOworCisJCQkJcGFy dHJlbCA9IHRhYmxlX29wZW4ocnRlLT5yZWxpZCwgbG9ja21vZGUpOworCQkJCWNsb3NlX3BhcnRy ZWwgPSB0cnVlOworCQkJfQorCQkJZWxzZQorCQkJCXBhcnRyZWwgPSBFeGVjR2V0UmFuZ2VUYWJs ZVJlbGF0aW9uKGVzdGF0ZSwgcGluZm8tPnJ0aW5kZXgpOworCisJCQkvKgorCQkJICogV2UgY2Fu IHJlbHkgb24gdGhlIGNvcHkgb2YgdGhlIHBhcnRpdGlvbmVkIHRhYmxlJ3MgcGFydGl0aW9uCisJ CQkgKiBrZXkgZnJvbSBpbiBpdHMgcmVsY2FjaGUgZW50cnksIGJlY2F1c2UgaXQgY2FuJ3QgY2hh bmdlIChvcgorCQkJICogZ2V0IGRlc3Ryb3llZCkgYXMgbG9uZyBhcyB0aGUgcmVsYXRpb24gaXMg bG9ja2VkLiAgUGFydGl0aW9uCisJCQkgKiBkZXNjcmlwdG9yIGlzIHRha2VuIGZyb20gdGhlIFBh cnRpdGlvbkRpcmVjdG9yeSBhc3NvY2lhdGVkIHdpdGgKKwkJCSAqIHRoZSB0YWJsZSB0aGF0IGlz IGhlbGQgb3BlbiBsb25nIGVub3VnaCBmb3IgdGhlIGRlc2NyaXB0b3IgdG8KKwkJCSAqIHJlbWFp biB2YWxpZCB3aGlsZSBpdCdzIHVzZWQgdG8gcGVyZm9ybSB0aGUgcHJ1bmluZyBzdGVwcy4KIAkJ CSAqLwotCQkJcGFydHJlbCA9IEV4ZWNHZXRSYW5nZVRhYmxlUmVsYXRpb24oZXN0YXRlLCBwaW5m by0+cnRpbmRleCk7CiAJCQlwYXJ0a2V5ID0gUmVsYXRpb25HZXRQYXJ0aXRpb25LZXkocGFydHJl bCk7Ci0JCQlwYXJ0ZGVzYyA9IFBhcnRpdGlvbkRpcmVjdG9yeUxvb2t1cChlc3RhdGUtPmVzX3Bh cnRpdGlvbl9kaXJlY3RvcnksCi0JCQkJCQkJCQkJCQlwYXJ0cmVsKTsKKwkJCXBhcnRkZXNjID0g UGFydGl0aW9uRGlyZWN0b3J5TG9va3VwKHBhcnRkaXIsIHBhcnRyZWwpOworCisJCQkvKgorCQkJ ICogTXVzdCBjbG9zZSBwYXJ0cmVsLCBrZWVwaW5nIHRoZSBsb2NrIHRha2VuLCBpZiB3ZSdyZSBu b3QgdXNpbmcKKwkJCSAqIEVTdGF0ZSdzIGVudHJ5LgorCQkJICovCisJCQlpZiAoY2xvc2VfcGFy dHJlbCkKKwkJCQl0YWJsZV9jbG9zZShwYXJ0cmVsLCBOb0xvY2spOwogCiAJCQkvKgogCQkJICog SW5pdGlhbGl6ZSB0aGUgc3VicGxhbl9tYXAgYW5kIHN1YnBhcnRfbWFwLgpAQCAtMTc2OSw3ICsx OTEyLDcgQEAgRXhlY0NyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUoUGxhblN0YXRlICpwbGFuc3Rh dGUsCiAJCQkgKiBJbml0aWFsaXplIHBydW5pbmcgY29udGV4dHMgYXMgbmVlZGVkLgogCQkJICov CiAJCQlwcHJ1bmUtPmluaXRpYWxfcHJ1bmluZ19zdGVwcyA9IHBpbmZvLT5pbml0aWFsX3BydW5p bmdfc3RlcHM7Ci0JCQlpZiAocGluZm8tPmluaXRpYWxfcHJ1bmluZ19zdGVwcykKKwkJCWlmIChj b25zaWRlcl9pbml0aWFsX3N0ZXBzICYmIHBpbmZvLT5pbml0aWFsX3BydW5pbmdfc3RlcHMpCiAJ CQl7CiAJCQkJRXhlY0luaXRQcnVuaW5nQ29udGV4dCgmcHBydW5lLT5pbml0aWFsX2NvbnRleHQs CiAJCQkJCQkJCQkgICBwaW5mby0+aW5pdGlhbF9wcnVuaW5nX3N0ZXBzLApAQCAtMTc3OSw3ICsx OTIyLDcgQEAgRXhlY0NyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUoUGxhblN0YXRlICpwbGFuc3Rh dGUsCiAJCQkJcHJ1bmVzdGF0ZS0+ZG9faW5pdGlhbF9wcnVuZSA9IHRydWU7CiAJCQl9CiAJCQlw cHJ1bmUtPmV4ZWNfcHJ1bmluZ19zdGVwcyA9IHBpbmZvLT5leGVjX3BydW5pbmdfc3RlcHM7Ci0J CQlpZiAocGluZm8tPmV4ZWNfcHJ1bmluZ19zdGVwcykKKwkJCWlmIChjb25zaWRlcl9leGVjX3N0 ZXBzICYmIHBpbmZvLT5leGVjX3BydW5pbmdfc3RlcHMpCiAJCQl7CiAJCQkJRXhlY0luaXRQcnVu aW5nQ29udGV4dCgmcHBydW5lLT5leGVjX2NvbnRleHQsCiAJCQkJCQkJCQkgICBwaW5mby0+ZXhl Y19wcnVuaW5nX3N0ZXBzLApAQCAtMTg5Myw3ICsyMDM2LDggQEAgRXhlY0luaXRQcnVuaW5nQ29u dGV4dChQYXJ0aXRpb25QcnVuZUNvbnRleHQgKmNvbnRleHQsCiAgKiBpcyByZXF1aXJlZC4KICAq Lwogc3RhdGljIEJpdG1hcHNldCAqCi1FeGVjRmluZEluaXRpYWxNYXRjaGluZ1N1YlBsYW5zKFBh cnRpdGlvblBydW5lU3RhdGUgKnBydW5lc3RhdGUpCitFeGVjRmluZEluaXRpYWxNYXRjaGluZ1N1 YlBsYW5zKFBhcnRpdGlvblBydW5lU3RhdGUgKnBydW5lc3RhdGUsCisJCQkJCQkJCVBhcnRpdGlv blBydW5lSW5mbyAqcHJ1bmVpbmZvKQogewogCUJpdG1hcHNldCAgKnJlc3VsdCA9IE5VTEw7CiAJ TWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OwpAQCAtMTkwMyw4ICsyMDQ3LDggQEAgRXhlY0ZpbmRJ bml0aWFsTWF0Y2hpbmdTdWJQbGFucyhQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlKQog CUFzc2VydChwcnVuZXN0YXRlLT5kb19pbml0aWFsX3BydW5lKTsKIAogCS8qCi0JICogU3dpdGNo IHRvIGEgdGVtcCBjb250ZXh0IHRvIGF2b2lkIGxlYWtpbmcgbWVtb3J5IGluIHRoZSBleGVjdXRv cidzCi0JICogcXVlcnktbGlmZXNwYW4gbWVtb3J5IGNvbnRleHQuCisJICogU3dpdGNoIHRvIGEg dGVtcCBjb250ZXh0IHRvIGF2b2lkIGxlYWtpbmcgbWVtb3J5IGluIHRoZSBsb25nZXItdGVybQor CSAqIG1lbW9yeSBjb250ZXh0LgogCSAqLwogCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dp dGNoVG8ocHJ1bmVzdGF0ZS0+cHJ1bmVfY29udGV4dCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL2V4ZWNVdGlscy5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1V0aWxz LmMKaW5kZXggOWRmMWY4MWVhOC4uNzI0NmY5MTc1ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZXhlY1V0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1V0aWxz LmMKQEAgLTExOSw2ICsxMTksNyBAQCBDcmVhdGVFeGVjdXRvclN0YXRlKHZvaWQpCiAJZXN0YXRl LT5lc19yZWxhdGlvbnMgPSBOVUxMOwogCWVzdGF0ZS0+ZXNfcm93bWFya3MgPSBOVUxMOwogCWVz dGF0ZS0+ZXNfcGxhbm5lZHN0bXQgPSBOVUxMOworCWVzdGF0ZS0+ZXNfZXhlY2xvY2tyZWxzaW5m byA9IE5VTEw7CiAKIAllc3RhdGUtPmVzX2p1bmtGaWx0ZXIgPSBOVUxMOwogCkBAIC03ODUsNiAr Nzg2LDEzIEBAIEV4ZWNHZXRSYW5nZVRhYmxlUmVsYXRpb24oRVN0YXRlICplc3RhdGUsIEluZGV4 IHJ0aSkKIAogCUFzc2VydChydGkgPiAwICYmIHJ0aSA8PSBlc3RhdGUtPmVzX3JhbmdlX3RhYmxl X3NpemUpOwogCisJLyoKKwkgKiBBIGNyb3NzLWNoZWNrIHRoYXQgQWNxdWlyZUV4ZWN1dG9yTG9j a3MoKSBoYXNuJ3QgbWlzc2VkIGFueSByZWxhdGlvbnMKKwkgKiBpdCBtdXN0IG5vdCBoYXZlLgor CSAqLworCUFzc2VydChlc3RhdGUtPmVzX2V4ZWNsb2NrcmVsc2luZm8gPT0gTlVMTCB8fAorCQkg ICBibXNfaXNfbWVtYmVyKHJ0aSwgZXN0YXRlLT5lc19leGVjbG9ja3JlbHNpbmZvLT5sb2NrcmVs cykpOworCiAJcmVsID0gZXN0YXRlLT5lc19yZWxhdGlvbnNbcnRpIC0gMV07CiAJaWYgKHJlbCA9 PSBOVUxMKQogCXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2Z1bmN0aW9ucy5j IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZnVuY3Rpb25zLmMKaW5kZXggZjk0NjBhZTUwNi4uYTIx ODJhNmIxZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZnVuY3Rpb25zLmMKKysr IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZnVuY3Rpb25zLmMKQEAgLTg0NCw3ICs4NDQsNyBAQCBw b3N0cXVlbF9zdGFydChleGVjdXRpb25fc3RhdGUgKmVzLCBTUUxGdW5jdGlvbkNhY2hlUHRyIGZj YWNoZSkKIAllbHNlCiAJCWRlc3QgPSBOb25lX1JlY2VpdmVyOwogCi0JZXMtPnFkID0gQ3JlYXRl UXVlcnlEZXNjKGVzLT5zdG10LAorCWVzLT5xZCA9IENyZWF0ZVF1ZXJ5RGVzYyhlcy0+c3RtdCwg TlVMTCwKIAkJCQkJCQkgZmNhY2hlLT5zcmMsCiAJCQkJCQkJIEdldEFjdGl2ZVNuYXBzaG90KCks CiAJCQkJCQkJIEludmFsaWRTbmFwc2hvdCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL25vZGVBcHBlbmQuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBlbmQuYwppbmRl eCA1YjZkM2ViMjNiLi45YzZmOTA3Njg3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRv ci9ub2RlQXBwZW5kLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVuZC5jCkBA IC05NCw2ICs5NCw1NSBAQCBzdGF0aWMgYm9vbCBFeGVjQXBwZW5kQXN5bmNSZXF1ZXN0KEFwcGVu ZFN0YXRlICpub2RlLCBUdXBsZVRhYmxlU2xvdCAqKnJlc3VsdCk7CiBzdGF0aWMgdm9pZCBFeGVj QXBwZW5kQXN5bmNFdmVudFdhaXQoQXBwZW5kU3RhdGUgKm5vZGUpOwogc3RhdGljIHZvaWQgY2xh c3NpZnlfbWF0Y2hpbmdfc3VicGxhbnMoQXBwZW5kU3RhdGUgKm5vZGUpOwogCisvKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKgkJRXhlY0dldEFwcGVuZExvY2tSZWxzCisgKgkJCURvIEV4ZWNHZXRMb2NrUmVscygpJ3Mg d29yayBmb3IgYW4gQXBwZW5kIHBsYW4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworYm9vbAorRXhlY0dldEFw cGVuZExvY2tSZWxzKEFwcGVuZCAqbm9kZSwgRXhlY0dldExvY2tSZWxzQ29udGV4dCAqY29udGV4 dCkKK3sKKwlQYXJ0aXRpb25QcnVuZUluZm8gKnBydW5laW5mbyA9IG5vZGUtPnBhcnRfcHJ1bmVf aW5mbzsKKworCS8qCisJICogTXVzdCBhbHdheXMgbG9jayBhbGwgdGhlIHBhcnRpdGlvbmVkIHRh YmxlcyB3aG9zZSBkaXJlY3QgYW5kIGluZGlyZWN0CisJICogcGFydGl0aW9ucyB3aWxsIGJlIHNj YW5uZWQgYnkgdGhpcyBBcHBlbmQuCisJICovCisJY29udGV4dC0+bG9ja3JlbHMgPSBibXNfYWRk X21lbWJlcnMoY29udGV4dC0+bG9ja3JlbHMsCisJCQkJCQkJCQkJbm9kZS0+cGFydGl0aW9uZWRf cmVscyk7CisKKwkvKgorCSAqIE5vdyByZWN1cnNlIHRvIHN1YnBsYW5zIHRvIGFkZCByZWxhdGlv bnMgc2Nhbm5lZCB0aGVyZWluLgorCSAqCisJICogSWYgaW5pdGlhbCBwcnVuaW5nIGNhbiBiZSBk b25lLCBkbyB0aGF0IG5vdyBhbmQgb25seSByZWN1cnNlIHRvIHRoZQorCSAqIHN1cnZpdmluZyBz dWJwbGFucy4KKwkgKi8KKwlpZiAocHJ1bmVpbmZvICYmIHBydW5laW5mby0+bmVlZHNfaW5pdF9w cnVuaW5nKQorCXsKKwkJTGlzdAkgICAqc3VicGxhbnMgPSBub2RlLT5hcHBlbmRwbGFuczsKKwkJ Qml0bWFwc2V0ICAqdmFsaWRzdWJwbGFuczsKKwkJaW50CQkJaTsKKworCQl2YWxpZHN1YnBsYW5z ID0gRXhlY0dldExvY2tSZWxzRG9Jbml0aWFsUHJ1bmluZygoUGxhbiAqKSBub2RlLAorCQkJCQkJ CQkJCQkJCQljb250ZXh0LCBwcnVuZWluZm8pOworCisJCS8qIFJlY3Vyc2UgdG8gc3Vydml2aW5n IHN1YnBsYW5zLiAqLworCQlpID0gLTE7CisJCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcih2 YWxpZHN1YnBsYW5zLCBpKSkgPj0gMCkKKwkJeworCQkJUGxhbiAgICpzdWJwbGFuID0gbGlzdF9u dGgoc3VicGxhbnMsIGkpOworCisJCQkodm9pZCkgRXhlY0dldExvY2tSZWxzKHN1YnBsYW4sIGNv bnRleHQpOworCQl9CisKKwkJLyogZG9uZSB3aXRoIHRoaXMgbm9kZSAqLworCQlyZXR1cm4gdHJ1 ZTsKKwl9CisKKwkvKiBUZWxsIHRoZSBjYWxsZXIgdG8gcmVjdXJzZSB0byAqYWxsKiB0aGUgc3Vi cGxhbnMuICovCisJcmV0dXJuIGZhbHNlOworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgkJRXhlY0luaXRB cHBlbmQKICAqCkBAIC0xNTUsNyArMjA0LDggQEAgRXhlY0luaXRBcHBlbmQoQXBwZW5kICpub2Rl LCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkJICogc3VicGxhbiwgd2UgY2FuIGZpbGwg YXNfdmFsaWRfc3VicGxhbnMgaW1tZWRpYXRlbHksIHByZXZlbnRpbmcKIAkJICogbGF0ZXIgY2Fs bHMgdG8gRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zLgogCQkgKi8KLQkJaWYgKCFwcnVuZXN0YXRl LT5kb19leGVjX3BydW5lICYmIG5wbGFucyA+IDApCisJCWlmIChhcHBlbmRzdGF0ZS0+YXNfcHJ1 bmVfc3RhdGUgPT0gTlVMTCB8fAorCQkJKCFhcHBlbmRzdGF0ZS0+YXNfcHJ1bmVfc3RhdGUtPmRv X2V4ZWNfcHJ1bmUgJiYgbnBsYW5zID4gMCkpCiAJCQlhcHBlbmRzdGF0ZS0+YXNfdmFsaWRfc3Vi cGxhbnMgPSBibXNfYWRkX3JhbmdlKE5VTEwsIDAsIG5wbGFucyAtIDEpOwogCX0KIAllbHNlCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYyBiL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5jCmluZGV4IDlhOWYyOWU4NDUuLjRiMDRm Y2RiYzIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5j CisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5jCkBAIC01NCw2ICs1 NCw1NSBAQCB0eXBlZGVmIGludDMyIFNsb3ROdW1iZXI7CiBzdGF0aWMgVHVwbGVUYWJsZVNsb3Qg KkV4ZWNNZXJnZUFwcGVuZChQbGFuU3RhdGUgKnBzdGF0ZSk7CiBzdGF0aWMgaW50CWhlYXBfY29t cGFyZV9zbG90cyhEYXR1bSBhLCBEYXR1bSBiLCB2b2lkICphcmcpOwogCisvKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg KgkJRXhlY0dldE1lcmdlQXBwZW5kTG9ja1JlbHMKKyAqCQkJRG8gRXhlY0dldExvY2tSZWxzKCkn cyB3b3JrIGZvciBhIE1lcmdlQXBwZW5kIHBsYW4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworYm9vbAorRXhl Y0dldE1lcmdlQXBwZW5kTG9ja1JlbHMoTWVyZ2VBcHBlbmQgKm5vZGUsIEV4ZWNHZXRMb2NrUmVs c0NvbnRleHQgKmNvbnRleHQpCit7CisJUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWluZm8gPSBu b2RlLT5wYXJ0X3BydW5lX2luZm87CisKKwkvKgorCSAqIE11c3QgYWx3YXlzIGxvY2sgYWxsIHRo ZSBwYXJ0aXRpb25lZCB0YWJsZXMgd2hvc2UgZGlyZWN0IGFuZCBpbmRpcmVjdAorCSAqIHBhcnRp dGlvbnMgd2lsbCBiZSBzY2FubmVkIGJ5IHRoaXMgQXBwZW5kLgorCSAqLworCWNvbnRleHQtPmxv Y2tyZWxzID0gYm1zX2FkZF9tZW1iZXJzKGNvbnRleHQtPmxvY2tyZWxzLAorCQkJCQkJCQkJCW5v ZGUtPnBhcnRpdGlvbmVkX3JlbHMpOworCisJLyoKKwkgKiBOb3cgcmVjdXJzZSB0byBzdWJwbGFu cyB0byBhZGQgcmVsYXRpb25zIHNjYW5uZWQgdGhlcmVpbi4KKwkgKgorCSAqIElmIGluaXRpYWwg cHJ1bmluZyBjYW4gYmUgZG9uZSwgZG8gdGhhdCBub3cgYW5kIG9ubHkgcmVjdXJzZSB0byB0aGUK KwkgKiBzdXJ2aXZpbmcgc3VicGxhbnMuCisJICovCisJaWYgKHBydW5laW5mbyAmJiBwcnVuZWlu Zm8tPm5lZWRzX2luaXRfcHJ1bmluZykKKwl7CisJCUxpc3QJICAgKnN1YnBsYW5zID0gbm9kZS0+ bWVyZ2VwbGFuczsKKwkJQml0bWFwc2V0ICAqdmFsaWRzdWJwbGFuczsKKwkJaW50CQkJaTsKKwor CQl2YWxpZHN1YnBsYW5zID0gRXhlY0dldExvY2tSZWxzRG9Jbml0aWFsUHJ1bmluZygoUGxhbiAq KSBub2RlLAorCQkJCQkJCQkJCQkJCQljb250ZXh0LCBwcnVuZWluZm8pOworCisJCS8qIFJlY3Vy c2UgdG8gc3Vydml2aW5nIHN1YnBsYW5zLiAqLworCQlpID0gLTE7CisJCXdoaWxlICgoaSA9IGJt c19uZXh0X21lbWJlcih2YWxpZHN1YnBsYW5zLCBpKSkgPj0gMCkKKwkJeworCQkJUGxhbiAgICpz dWJwbGFuID0gbGlzdF9udGgoc3VicGxhbnMsIGkpOworCisJCQkodm9pZCkgRXhlY0dldExvY2tS ZWxzKHN1YnBsYW4sIGNvbnRleHQpOworCQl9CisKKwkJLyogZG9uZSB3aXRoIHRoaXMgbm9kZSAq LworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKiBUZWxsIHRoZSBjYWxsZXIgdG8gcmVjdXJzZSB0 byAqYWxsKiB0aGUgc3VicGxhbnMuICovCisJcmV0dXJuIGZhbHNlOworfQorCiAKIC8qIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KICAqCQlFeGVjSW5pdE1lcmdlQXBwZW5kCkBAIC0xMDMsNyArMTUyLDggQEAgRXhlY0luaXRN ZXJnZUFwcGVuZChNZXJnZUFwcGVuZCAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3Mp CiAJCSAqIHN1YnBsYW4sIHdlIGNhbiBmaWxsIGFzX3ZhbGlkX3N1YnBsYW5zIGltbWVkaWF0ZWx5 LCBwcmV2ZW50aW5nCiAJCSAqIGxhdGVyIGNhbGxzIHRvIEV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFu cy4KIAkJICovCi0JCWlmICghcHJ1bmVzdGF0ZS0+ZG9fZXhlY19wcnVuZSAmJiBucGxhbnMgPiAw KQorCQlpZiAobWVyZ2VzdGF0ZS0+bXNfcHJ1bmVfc3RhdGUgPT0gTlVMTCB8fAorCQkJKCFtZXJn ZXN0YXRlLT5tc19wcnVuZV9zdGF0ZS0+ZG9fZXhlY19wcnVuZSAmJiBucGxhbnMgPiAwKSkKIAkJ CW1lcmdlc3RhdGUtPm1zX3ZhbGlkX3N1YnBsYW5zID0gYm1zX2FkZF9yYW5nZShOVUxMLCAwLCBu cGxhbnMgLSAxKTsKIAl9CiAJZWxzZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv bm9kZU1vZGlmeVRhYmxlLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUu YwppbmRleCA3MDFmZTA1Mjk2Li4yM2RmM2VmZWYwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9l eGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2Rl TW9kaWZ5VGFibGUuYwpAQCAtMzAwOCw2ICszMDA4LDMxIEBAIEV4ZWNMb29rdXBSZXN1bHRSZWxC eU9pZChNb2RpZnlUYWJsZVN0YXRlICpub2RlLCBPaWQgcmVzdWx0b2lkLAogCXJldHVybiBOVUxM OwogfQogCisvKgorICogRXhlY0dldE1vZGlmeVRhYmxlTG9ja1JlbHMKKyAqIAkJRG8gRXhlY0dl dExvY2tSZWxzKCkncyB3b3JrIGZvciBhIE1vZGlmeVRhYmxlIHBsYW4KKyAqLworYm9vbAorRXhl Y0dldE1vZGlmeVRhYmxlTG9ja1JlbHMoTW9kaWZ5VGFibGUgKnBsYW4sIEV4ZWNHZXRMb2NrUmVs c0NvbnRleHQgKmNvbnRleHQpCit7CisJTGlzdENlbGwgKmxjOworCisJLyogRmlyc3QgYWRkIHRo ZSByZXN1bHQgcmVsYXRpb24gUlRJcyBtZW50aW9uZWQgaW4gdGhlIG5vZGUuICovCisJaWYgKHBs YW4tPnJvb3RSZWxhdGlvbiA+IDApCisJCWNvbnRleHQtPmxvY2tyZWxzID0gYm1zX2FkZF9tZW1i ZXIoY29udGV4dC0+bG9ja3JlbHMsCisJCQkJCQkJCQkJICAgcGxhbi0+cm9vdFJlbGF0aW9uKTsK Kwljb250ZXh0LT5sb2NrcmVscyA9IGJtc19hZGRfbWVtYmVyKGNvbnRleHQtPmxvY2tyZWxzLAor CQkJCQkJCQkJICAgcGxhbi0+bm9taW5hbFJlbGF0aW9uKTsKKwlmb3JlYWNoKGxjLCBwbGFuLT5y ZXN1bHRSZWxhdGlvbnMpCisJeworCQljb250ZXh0LT5sb2NrcmVscyA9IGJtc19hZGRfbWVtYmVy KGNvbnRleHQtPmxvY2tyZWxzLAorCQkJCQkJCQkJCSAgIGxmaXJzdF9pbnQobGMpKTsKKwl9CisK KwkvKiBUZWxsIHRoZSBjYWxsZXIgdG8gcmVjdXJzZSB0byB0aGUgc3VicGxhbiAob3V0ZXJQbGFu KHBsYW4pKS4gKi8KKwlyZXR1cm4gZmFsc2U7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCQlFeGVjSW5p dE1vZGlmeVRhYmxlCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRv ci9zcGkuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL3NwaS5jCmluZGV4IGE4MmU5ODY2NjcuLjIx MDcwMDk1OTEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL3NwaS5jCisrKyBiL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL3NwaS5jCkBAIC0xNTc4LDYgKzE1NzgsNyBAQCBTUElfY3Vyc29y X29wZW5faW50ZXJuYWwoY29uc3QgY2hhciAqbmFtZSwgU1BJUGxhblB0ciBwbGFuLAogCUNhY2hl ZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2U7CiAJQ2FjaGVkUGxhbiAqY3BsYW47CiAJTGlzdAkgICAq c3RtdF9saXN0OworCUxpc3QJICAgKmV4ZWNsb2NrcmVsc2luZm9fbGlzdDsKIAljaGFyCSAgICpx dWVyeV9zdHJpbmc7CiAJU25hcHNob3QJc25hcHNob3Q7CiAJTWVtb3J5Q29udGV4dCBvbGRjb250 ZXh0OwpAQCAtMTY1OSw2ICsxNjYwLDcgQEAgU1BJX2N1cnNvcl9vcGVuX2ludGVybmFsKGNvbnN0 IGNoYXIgKm5hbWUsIFNQSVBsYW5QdHIgcGxhbiwKIAkvKiBSZXBsYW4gaWYgbmVlZGVkLCBhbmQg aW5jcmVtZW50IHBsYW4gcmVmY291bnQgZm9yIHBvcnRhbCAqLwogCWNwbGFuID0gR2V0Q2FjaGVk UGxhbihwbGFuc291cmNlLCBwYXJhbUxJLCBOVUxMLCBfU1BJX2N1cnJlbnQtPnF1ZXJ5RW52KTsK IAlzdG10X2xpc3QgPSBjcGxhbi0+c3RtdF9saXN0OworCWV4ZWNsb2NrcmVsc2luZm9fbGlzdCA9 IGNwbGFuLT5leGVjbG9ja3JlbHNpbmZvX2xpc3Q7CiAKIAlpZiAoIXBsYW4tPnNhdmVkKQogCXsK QEAgLTE2NzAsNiArMTY3Miw3IEBAIFNQSV9jdXJzb3Jfb3Blbl9pbnRlcm5hbChjb25zdCBjaGFy ICpuYW1lLCBTUElQbGFuUHRyIHBsYW4sCiAJCSAqLwogCQlvbGRjb250ZXh0ID0gTWVtb3J5Q29u dGV4dFN3aXRjaFRvKHBvcnRhbC0+cG9ydGFsQ29udGV4dCk7CiAJCXN0bXRfbGlzdCA9IGNvcHlP YmplY3Qoc3RtdF9saXN0KTsKKwkJZXhlY2xvY2tyZWxzaW5mb19saXN0ID0gY29weU9iamVjdChl eGVjbG9ja3JlbHNpbmZvX2xpc3QpOwogCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4 dCk7CiAJCVJlbGVhc2VDYWNoZWRQbGFuKGNwbGFuLCBOVUxMKTsKIAkJY3BsYW4gPSBOVUxMOwkJ CS8qIHBvcnRhbCBzaG91bGRuJ3QgZGVwZW5kIG9uIGNwbGFuICovCkBAIC0xNjgzLDYgKzE2ODYs NyBAQCBTUElfY3Vyc29yX29wZW5faW50ZXJuYWwoY29uc3QgY2hhciAqbmFtZSwgU1BJUGxhblB0 ciBwbGFuLAogCQkJCQkgIHF1ZXJ5X3N0cmluZywKIAkJCQkJICBwbGFuc291cmNlLT5jb21tYW5k VGFnLAogCQkJCQkgIHN0bXRfbGlzdCwKKwkJCQkJICBleGVjbG9ja3JlbHNpbmZvX2xpc3QsCiAJ CQkJCSAgY3BsYW4pOwogCiAJLyoKQEAgLTI0NzMsNyArMjQ3Nyw5IEBAIF9TUElfZXhlY3V0ZV9w bGFuKFNQSVBsYW5QdHIgcGxhbiwgY29uc3QgU1BJRXhlY3V0ZU9wdGlvbnMgKm9wdGlvbnMsCiAJ ewogCQlDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlID0gKENhY2hlZFBsYW5Tb3VyY2UgKikg bGZpcnN0KGxjMSk7CiAJCUxpc3QJICAgKnN0bXRfbGlzdDsKLQkJTGlzdENlbGwgICAqbGMyOwor CQlMaXN0CSAgICpleGVjbG9ja3JlbHNpbmZvX2xpc3Q7CisJCUxpc3RDZWxsICAgKmxjMiwKKwkJ CQkgICAqbGMzOwogCiAJCXNwaWNhbGxiYWNrYXJnLnF1ZXJ5ID0gcGxhbnNvdXJjZS0+cXVlcnlf c3RyaW5nOwogCkBAIC0yNTUyLDYgKzI1NTgsNyBAQCBfU1BJX2V4ZWN1dGVfcGxhbihTUElQbGFu UHRyIHBsYW4sIGNvbnN0IFNQSUV4ZWN1dGVPcHRpb25zICpvcHRpb25zLAogCQkJCQkJCSAgcGxh bl9vd25lciwgX1NQSV9jdXJyZW50LT5xdWVyeUVudik7CiAKIAkJc3RtdF9saXN0ID0gY3BsYW4t PnN0bXRfbGlzdDsKKwkJZXhlY2xvY2tyZWxzaW5mb19saXN0ID0gY3BsYW4tPmV4ZWNsb2NrcmVs c2luZm9fbGlzdDsKIAogCQkvKgogCQkgKiBJZiB3ZSB3ZXJlbid0IGdpdmVuIGEgc3BlY2lmaWMg c25hcHNob3QgdG8gdXNlLCBhbmQgdGhlIHN0YXRlbWVudApAQCAtMjU4OSw5ICsyNTk2LDEwIEBA IF9TUElfZXhlY3V0ZV9wbGFuKFNQSVBsYW5QdHIgcGxhbiwgY29uc3QgU1BJRXhlY3V0ZU9wdGlv bnMgKm9wdGlvbnMsCiAJCQl9CiAJCX0KIAotCQlmb3JlYWNoKGxjMiwgc3RtdF9saXN0KQorCQlm b3Jib3RoKGxjMiwgc3RtdF9saXN0LCBsYzMsIGV4ZWNsb2NrcmVsc2luZm9fbGlzdCkKIAkJewog CQkJUGxhbm5lZFN0bXQgKnN0bXQgPSBsZmlyc3Rfbm9kZShQbGFubmVkU3RtdCwgbGMyKTsKKwkJ CUV4ZWNMb2NrUmVsc0luZm8gKmV4ZWNsb2NrcmVsc2luZm8gPSBsZmlyc3Rfbm9kZShFeGVjTG9j a1JlbHNJbmZvLCBsYzMpOwogCQkJYm9vbAkJY2FuU2V0VGFnID0gc3RtdC0+Y2FuU2V0VGFnOwog CQkJRGVzdFJlY2VpdmVyICpkZXN0OwogCkBAIC0yNjYzLDcgKzI2NzEsNyBAQCBfU1BJX2V4ZWN1 dGVfcGxhbihTUElQbGFuUHRyIHBsYW4sIGNvbnN0IFNQSUV4ZWN1dGVPcHRpb25zICpvcHRpb25z LAogCQkJCWVsc2UKIAkJCQkJc25hcCA9IEludmFsaWRTbmFwc2hvdDsKIAotCQkJCXFkZXNjID0g Q3JlYXRlUXVlcnlEZXNjKHN0bXQsCisJCQkJcWRlc2MgPSBDcmVhdGVRdWVyeURlc2Moc3RtdCwg ZXhlY2xvY2tyZWxzaW5mbywKIAkJCQkJCQkJCQlwbGFuc291cmNlLT5xdWVyeV9zdHJpbmcsCiAJ CQkJCQkJCQkJc25hcCwgY3Jvc3NjaGVja19zbmFwc2hvdCwKIAkJCQkJCQkJCQlkZXN0LApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvY29weWZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rl cy9jb3B5ZnVuY3MuYwppbmRleCBkYzY4YTEyNDg2Li4xYjk0ZDdjODgxIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9jb3B5 ZnVuY3MuYwpAQCAtNjgsNiArNjgsMTMgQEAKIAkJfSBcCiAJfSB3aGlsZSAoMCkKIAorLyogQ29w eSBhIGZpZWxkIHRoYXQgaXMgYW4gYXJyYXkgd2l0aCBudW1FbGVtIGludHMgKi8KKyNkZWZpbmUg Q09QWV9JTlRfQVJSQVkoZmxkbmFtZSwgbnVtRWxlbSkgXAorCWRvIHsgXAorCQluZXdub2RlLT5m bGRuYW1lID0gKG51bUVsZW0pID4gMCA/IHBhbGxvYygobnVtRWxlbSkgKiBzaXplb2YoaW50KSkg OiBOVUxMOyBcCisJCW1lbWNweShuZXdub2RlLT5mbGRuYW1lLCBmcm9tLT5mbGRuYW1lLCBzaXpl b2YoaW50KSAqIChudW1FbGVtKSk7IFwKKwl9IHdoaWxlICgwKQorCiAvKiBDb3B5IGEgcGFyc2Ug bG9jYXRpb24gZmllbGQgKGZvciBDb3B5LCB0aGlzIGlzIHNhbWUgYXMgc2NhbGFyIGNhc2UpICov CiAjZGVmaW5lIENPUFlfTE9DQVRJT05fRklFTEQoZmxkbmFtZSkgXAogCShuZXdub2RlLT5mbGRu YW1lID0gZnJvbS0+ZmxkbmFtZSkKQEAgLTk0LDggKzEwMSwxMCBAQCBfY29weVBsYW5uZWRTdG10 KGNvbnN0IFBsYW5uZWRTdG10ICpmcm9tKQogCUNPUFlfU0NBTEFSX0ZJRUxEKHRyYW5zaWVudFBs YW4pOwogCUNPUFlfU0NBTEFSX0ZJRUxEKGRlcGVuZHNPblJvbGUpOwogCUNPUFlfU0NBTEFSX0ZJ RUxEKHBhcmFsbGVsTW9kZU5lZWRlZCk7CisJQ09QWV9TQ0FMQVJfRklFTEQoY29udGFpbnNJbml0 aWFsUHJ1bmluZyk7CiAJQ09QWV9TQ0FMQVJfRklFTEQoaml0RmxhZ3MpOwogCUNPUFlfTk9ERV9G SUVMRChwbGFuVHJlZSk7CisJQ09QWV9TQ0FMQVJfRklFTEQobnVtUGxhbk5vZGVzKTsKIAlDT1BZ X05PREVfRklFTEQocnRhYmxlKTsKIAlDT1BZX05PREVfRklFTEQocmVzdWx0UmVsYXRpb25zKTsK IAlDT1BZX05PREVfRklFTEQoYXBwZW5kUmVsYXRpb25zKTsKQEAgLTEyODEsNiArMTI5MCw4IEBA IF9jb3B5UGFydGl0aW9uUHJ1bmVJbmZvKGNvbnN0IFBhcnRpdGlvblBydW5lSW5mbyAqZnJvbSkK IAlQYXJ0aXRpb25QcnVuZUluZm8gKm5ld25vZGUgPSBtYWtlTm9kZShQYXJ0aXRpb25QcnVuZUlu Zm8pOwogCiAJQ09QWV9OT0RFX0ZJRUxEKHBydW5lX2luZm9zKTsKKwlDT1BZX1NDQUxBUl9GSUVM RChuZWVkc19pbml0X3BydW5pbmcpOworCUNPUFlfU0NBTEFSX0ZJRUxEKG5lZWRzX2V4ZWNfcHJ1 bmluZyk7CiAJQ09QWV9CSVRNQVBTRVRfRklFTEQob3RoZXJfc3VicGxhbnMpOwogCiAJcmV0dXJu IG5ld25vZGU7CkBAIC00OTQ0LDYgKzQ5NTUsMzMgQEAgX2NvcHlFeHRlbnNpYmxlTm9kZShjb25z dCBFeHRlbnNpYmxlTm9kZSAqZnJvbSkKIAlyZXR1cm4gbmV3bm9kZTsKIH0KIAorLyogKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KgorICoJCQkJCWV4ZWNub2Rlcy5oIGNvcHkgZnVuY3Rpb25zCisgKiAqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3N0 YXRpYyBFeGVjTG9ja1JlbHNJbmZvICoKK19jb3B5RXhlY0xvY2tSZWxzSW5mbyhjb25zdCBFeGVj TG9ja1JlbHNJbmZvICpmcm9tKQoreworCUV4ZWNMb2NrUmVsc0luZm8gKm5ld25vZGUgPSBtYWtl Tm9kZShFeGVjTG9ja1JlbHNJbmZvKTsKKworCUNPUFlfQklUTUFQU0VUX0ZJRUxEKGxvY2tyZWxz KTsKKwlDT1BZX1NDQUxBUl9GSUVMRChudW1QbGFuTm9kZXMpOworCUNPUFlfTk9ERV9GSUVMRChp bml0UHJ1bmluZ091dHB1dHMpOworCUNPUFlfSU5UX0FSUkFZKGlwb0luZGV4ZXMsIGZyb20tPm51 bVBsYW5Ob2Rlcyk7CisKKwlyZXR1cm4gbmV3bm9kZTsKK30KKworc3RhdGljIFBsYW5Jbml0UHJ1 bmluZ091dHB1dCAqCitfY29weVBsYW5Jbml0UHJ1bmluZ091dHB1dChjb25zdCBQbGFuSW5pdFBy dW5pbmdPdXRwdXQgKmZyb20pCit7CisJUGxhbkluaXRQcnVuaW5nT3V0cHV0ICpuZXdub2RlID0g bWFrZU5vZGUoUGxhbkluaXRQcnVuaW5nT3V0cHV0KTsKKworCUNPUFlfQklUTUFQU0VUX0ZJRUxE KGluaXRpYWxseV92YWxpZF9zdWJwbGFucyk7CisKKwlyZXR1cm4gbmV3bm9kZTsKK30KKwogLyog KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKgogICoJCQkJCXZhbHVlLmggY29weSBmdW5jdGlvbnMKICAqICoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTQ5 OTgsNyArNTAzNiw2IEBAIF9jb3B5Qml0U3RyaW5nKGNvbnN0IEJpdFN0cmluZyAqZnJvbSkKIAly ZXR1cm4gbmV3bm9kZTsKIH0KIAotCiBzdGF0aWMgRm9yZWlnbktleUNhY2hlSW5mbyAqCiBfY29w eUZvcmVpZ25LZXlDYWNoZUluZm8oY29uc3QgRm9yZWlnbktleUNhY2hlSW5mbyAqZnJvbSkKIHsK QEAgLTU5NDcsNiArNTk4NCwxNiBAQCBjb3B5T2JqZWN0SW1wbChjb25zdCB2b2lkICpmcm9tKQog CQkJcmV0dmFsID0gX2NvcHlQdWJsaWNhdGlvblRhYmxlKGZyb20pOwogCQkJYnJlYWs7CiAKKwkJ CS8qCisJCQkgKiBFWEVDVVRJT04gTk9ERVMKKwkJCSAqLworCQljYXNlIFRfRXhlY0xvY2tSZWxz SW5mbzoKKwkJCXJldHZhbCA9IF9jb3B5RXhlY0xvY2tSZWxzSW5mbyhmcm9tKTsKKwkJCWJyZWFr OworCQljYXNlIFRfUGxhbkluaXRQcnVuaW5nT3V0cHV0OgorCQkJcmV0dmFsID0gX2NvcHlQbGFu SW5pdFBydW5pbmdPdXRwdXQoZnJvbSk7CisJCQlicmVhazsKKwogCQkJLyoKIAkJCSAqIE1JU0NF TExBTkVPVVMgTk9ERVMKIAkJCSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvb3V0 ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMKaW5kZXggYmMxNzhkNTNiZi4u NmM0MDRjODY2NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYworKysg Yi9zcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jCkBAIC0zMTIsOCArMzEyLDEwIEBAIF9vdXRQ bGFubmVkU3RtdChTdHJpbmdJbmZvIHN0ciwgY29uc3QgUGxhbm5lZFN0bXQgKm5vZGUpCiAJV1JJ VEVfQk9PTF9GSUVMRCh0cmFuc2llbnRQbGFuKTsKIAlXUklURV9CT09MX0ZJRUxEKGRlcGVuZHNP blJvbGUpOwogCVdSSVRFX0JPT0xfRklFTEQocGFyYWxsZWxNb2RlTmVlZGVkKTsKKwlXUklURV9C T09MX0ZJRUxEKGNvbnRhaW5zSW5pdGlhbFBydW5pbmcpOwogCVdSSVRFX0lOVF9GSUVMRChqaXRG bGFncyk7CiAJV1JJVEVfTk9ERV9GSUVMRChwbGFuVHJlZSk7CisJV1JJVEVfSU5UX0ZJRUxEKG51 bVBsYW5Ob2Rlcyk7CiAJV1JJVEVfTk9ERV9GSUVMRChydGFibGUpOwogCVdSSVRFX05PREVfRklF TEQocmVzdWx0UmVsYXRpb25zKTsKIAlXUklURV9OT0RFX0ZJRUxEKGFwcGVuZFJlbGF0aW9ucyk7 CkBAIC0xMDA3LDYgKzEwMDksOCBAQCBfb3V0UGFydGl0aW9uUHJ1bmVJbmZvKFN0cmluZ0luZm8g c3RyLCBjb25zdCBQYXJ0aXRpb25QcnVuZUluZm8gKm5vZGUpCiAJV1JJVEVfTk9ERV9UWVBFKCJQ QVJUSVRJT05QUlVORUlORk8iKTsKIAogCVdSSVRFX05PREVfRklFTEQocHJ1bmVfaW5mb3MpOwor CVdSSVRFX0JPT0xfRklFTEQobmVlZHNfaW5pdF9wcnVuaW5nKTsKKwlXUklURV9CT09MX0ZJRUxE KG5lZWRzX2V4ZWNfcHJ1bmluZyk7CiAJV1JJVEVfQklUTUFQU0VUX0ZJRUxEKG90aGVyX3N1YnBs YW5zKTsKIH0KIApAQCAtMjcwMiw2ICsyNzA2LDMxIEBAIF9vdXRFeHRlbnNpYmxlTm9kZShTdHJp bmdJbmZvIHN0ciwgY29uc3QgRXh0ZW5zaWJsZU5vZGUgKm5vZGUpCiAJbWV0aG9kcy0+bm9kZU91 dChzdHIsIG5vZGUpOwogfQogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKglTdHVmZiBm cm9tIGV4ZWNub2Rlcy5oCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9p ZAorX291dEV4ZWNMb2NrUmVsc0luZm8oU3RyaW5nSW5mbyBzdHIsIGNvbnN0IEV4ZWNMb2NrUmVs c0luZm8gKm5vZGUpCit7CisJV1JJVEVfTk9ERV9UWVBFKCJFWEVDTE9DS1JFTFNJTkZPIik7CisK KwlXUklURV9CSVRNQVBTRVRfRklFTEQobG9ja3JlbHMpOworCVdSSVRFX0lOVF9GSUVMRChudW1Q bGFuTm9kZXMpOworCVdSSVRFX05PREVfRklFTEQoaW5pdFBydW5pbmdPdXRwdXRzKTsKKwlXUklU RV9JTlRfQVJSQVkoaXBvSW5kZXhlcywgbm9kZS0+bnVtUGxhbk5vZGVzKTsKK30KKworc3RhdGlj IHZvaWQKK19vdXRQbGFuSW5pdFBydW5pbmdPdXRwdXQoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IFBs YW5Jbml0UHJ1bmluZ091dHB1dCAqbm9kZSkKK3sKKwlXUklURV9OT0RFX1RZUEUoIlBBUlRJVElP TklOSVRQUlVOSU5HT1VUUFVUIik7CisKKwlXUklURV9CSVRNQVBTRVRfRklFTEQoaW5pdGlhbGx5 X3ZhbGlkX3N1YnBsYW5zKTsKK30KKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICoJU3R1 ZmYgZnJvbSBwYXJzZW5vZGVzLmguCkBAIC00NTQzLDYgKzQ1NzIsMTYgQEAgb3V0Tm9kZShTdHJp bmdJbmZvIHN0ciwgY29uc3Qgdm9pZCAqb2JqKQogCQkJCV9vdXRQYXJ0aXRpb25SYW5nZURhdHVt KHN0ciwgb2JqKTsKIAkJCQlicmVhazsKIAorCQkJCS8qCisJCQkJICogRVhFQ1VUSU9OIE5PREVT CisJCQkJICovCisJCQljYXNlIFRfRXhlY0xvY2tSZWxzSW5mbzoKKwkJCQlfb3V0RXhlY0xvY2tS ZWxzSW5mbyhzdHIsIG9iaik7CisJCQkJYnJlYWs7CisJCQljYXNlIFRfUGxhbkluaXRQcnVuaW5n T3V0cHV0OgorCQkJCV9vdXRQbGFuSW5pdFBydW5pbmdPdXRwdXQoc3RyLCBvYmopOworCQkJCWJy ZWFrOworCiAJCQlkZWZhdWx0OgogCiAJCQkJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25v ZGVzL3JlYWRmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1bmNzLmMKaW5kZXggM2M2 NzNjNDJkNS4uODYzZjA4MjcyOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1 bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1bmNzLmMKQEAgLTE1ODUsOCArMTU4 NSwxMCBAQCBfcmVhZFBsYW5uZWRTdG10KHZvaWQpCiAJUkVBRF9CT09MX0ZJRUxEKHRyYW5zaWVu dFBsYW4pOwogCVJFQURfQk9PTF9GSUVMRChkZXBlbmRzT25Sb2xlKTsKIAlSRUFEX0JPT0xfRklF TEQocGFyYWxsZWxNb2RlTmVlZGVkKTsKKwlSRUFEX0JPT0xfRklFTEQoY29udGFpbnNJbml0aWFs UHJ1bmluZyk7CiAJUkVBRF9JTlRfRklFTEQoaml0RmxhZ3MpOwogCVJFQURfTk9ERV9GSUVMRChw bGFuVHJlZSk7CisJUkVBRF9JTlRfRklFTEQobnVtUGxhbk5vZGVzKTsKIAlSRUFEX05PREVfRklF TEQocnRhYmxlKTsKIAlSRUFEX05PREVfRklFTEQocmVzdWx0UmVsYXRpb25zKTsKIAlSRUFEX05P REVfRklFTEQoYXBwZW5kUmVsYXRpb25zKTsKQEAgLTI1MzcsNiArMjUzOSw4IEBAIF9yZWFkUGFy dGl0aW9uUHJ1bmVJbmZvKHZvaWQpCiAJUkVBRF9MT0NBTFMoUGFydGl0aW9uUHJ1bmVJbmZvKTsK IAogCVJFQURfTk9ERV9GSUVMRChwcnVuZV9pbmZvcyk7CisJUkVBRF9CT09MX0ZJRUxEKG5lZWRz X2luaXRfcHJ1bmluZyk7CisJUkVBRF9CT09MX0ZJRUxEKG5lZWRzX2V4ZWNfcHJ1bmluZyk7CiAJ UkVBRF9CSVRNQVBTRVRfRklFTEQob3RoZXJfc3VicGxhbnMpOwogCiAJUkVBRF9ET05FKCk7CkBA IC0yNzA2LDYgKzI3MTAsMzUgQEAgX3JlYWRQYXJ0aXRpb25SYW5nZURhdHVtKHZvaWQpCiAJUkVB RF9ET05FKCk7CiB9CiAKKy8qCisgKiBfcmVhZEV4ZWNMb2NrUmVsc0luZm8KKyAqLworc3RhdGlj IEV4ZWNMb2NrUmVsc0luZm8gKgorX3JlYWRFeGVjTG9ja1JlbHNJbmZvKHZvaWQpCit7CisJUkVB RF9MT0NBTFMoRXhlY0xvY2tSZWxzSW5mbyk7CisKKwlSRUFEX0JJVE1BUFNFVF9GSUVMRChsb2Nr cmVscyk7CisJUkVBRF9JTlRfRklFTEQobnVtUGxhbk5vZGVzKTsKKwlSRUFEX05PREVfRklFTEQo aW5pdFBydW5pbmdPdXRwdXRzKTsKKwlSRUFEX0lOVF9BUlJBWShpcG9JbmRleGVzLCBsb2NhbF9u b2RlLT5udW1QbGFuTm9kZXMpOworCisJUkVBRF9ET05FKCk7Cit9CisKKy8qCisgKiBfcmVhZFBs YW5Jbml0UHJ1bmluZ091dHB1dAorICovCitzdGF0aWMgUGxhbkluaXRQcnVuaW5nT3V0cHV0ICoK K19yZWFkUGxhbkluaXRQcnVuaW5nT3V0cHV0KHZvaWQpCit7CisJUkVBRF9MT0NBTFMoUGxhbklu aXRQcnVuaW5nT3V0cHV0KTsKKworCVJFQURfQklUTUFQU0VUX0ZJRUxEKGluaXRpYWxseV92YWxp ZF9zdWJwbGFucyk7CisKKwlSRUFEX0RPTkUoKTsKK30KKwogLyoKICAqIHBhcnNlTm9kZVN0cmlu ZwogICoKQEAgLTI5NzcsNiArMzAxMCwxMCBAQCBwYXJzZU5vZGVTdHJpbmcodm9pZCkKIAkJcmV0 dXJuX3ZhbHVlID0gX3JlYWRQYXJ0aXRpb25Cb3VuZFNwZWMoKTsKIAllbHNlIGlmIChNQVRDSCgi UEFSVElUSU9OUkFOR0VEQVRVTSIsIDE5KSkKIAkJcmV0dXJuX3ZhbHVlID0gX3JlYWRQYXJ0aXRp b25SYW5nZURhdHVtKCk7CisJZWxzZSBpZiAoTUFUQ0goIkVYRUNMT0NLUkVMU0lORk8iLCAxNikp CisJCXJldHVybl92YWx1ZSA9IF9yZWFkRXhlY0xvY2tSZWxzSW5mbygpOworCWVsc2UgaWYgKE1B VENIKCJQQVJUSVRJT05JTklUUFJVTklOR09VVFBVVCIsIDI2KSkKKwkJcmV0dXJuX3ZhbHVlID0g X3JlYWRQbGFuSW5pdFBydW5pbmdPdXRwdXQoKTsKIAllbHNlCiAJewogCQllbG9nKEVSUk9SLCAi YmFkbHkgZm9ybWF0dGVkIG5vZGUgc3RyaW5nIFwiJS4zMnNcIi4uLiIsIHRva2VuKTsKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYyBiL3NyYy9iYWNrZW5k L29wdGltaXplci9wbGFuL3BsYW5uZXIuYwppbmRleCAzNzRhOWQ5NzUzLi4zMjlmYjlkNmU3IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKKysrIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCkBAIC01MTcsNyArNTE3LDkgQEAgc3Rh bmRhcmRfcGxhbm5lcihRdWVyeSAqcGFyc2UsIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywgaW50 IGN1cnNvck9wdGlvbnMsCiAJcmVzdWx0LT50cmFuc2llbnRQbGFuID0gZ2xvYi0+dHJhbnNpZW50 UGxhbjsKIAlyZXN1bHQtPmRlcGVuZHNPblJvbGUgPSBnbG9iLT5kZXBlbmRzT25Sb2xlOwogCXJl c3VsdC0+cGFyYWxsZWxNb2RlTmVlZGVkID0gZ2xvYi0+cGFyYWxsZWxNb2RlTmVlZGVkOworCXJl c3VsdC0+Y29udGFpbnNJbml0aWFsUHJ1bmluZyA9IGdsb2ItPmNvbnRhaW5zSW5pdGlhbFBydW5p bmc7CiAJcmVzdWx0LT5wbGFuVHJlZSA9IHRvcF9wbGFuOworCXJlc3VsdC0+bnVtUGxhbk5vZGVz ID0gZ2xvYi0+bGFzdFBsYW5Ob2RlSWQ7CiAJcmVzdWx0LT5ydGFibGUgPSBnbG9iLT5maW5hbHJ0 YWJsZTsKIAlyZXN1bHQtPnJlc3VsdFJlbGF0aW9ucyA9IGdsb2ItPnJlc3VsdFJlbGF0aW9uczsK IAlyZXN1bHQtPmFwcGVuZFJlbGF0aW9ucyA9IGdsb2ItPmFwcGVuZFJlbGF0aW9uczsKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYyBiL3NyYy9iYWNrZW5k L29wdGltaXplci9wbGFuL3NldHJlZnMuYwppbmRleCBkYmRlYjhlYzlkLi5hYzc5NWFlOWQ5IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKKysrIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jCkBAIC0xNTYxLDYgKzE1NjEsOSBAQCBz ZXRfYXBwZW5kX3JlZmVyZW5jZXMoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJcGluZm8tPnJ0aW5k ZXggKz0gcnRvZmZzZXQ7CiAJCQl9CiAJCX0KKworCQlpZiAoYXBsYW4tPnBhcnRfcHJ1bmVfaW5m by0+bmVlZHNfaW5pdF9wcnVuaW5nKQorCQkJcm9vdC0+Z2xvYi0+Y29udGFpbnNJbml0aWFsUHJ1 bmluZyA9IHRydWU7CiAJfQogCiAJLyogV2UgZG9uJ3QgbmVlZCB0byByZWN1cnNlIHRvIGxlZnR0 cmVlIG9yIHJpZ2h0dHJlZSAuLi4gKi8KQEAgLTE2NDgsNiArMTY1MSw5IEBAIHNldF9tZXJnZWFw cGVuZF9yZWZlcmVuY2VzKFBsYW5uZXJJbmZvICpyb290LAogCQkJCXBpbmZvLT5ydGluZGV4ICs9 IHJ0b2Zmc2V0OwogCQkJfQogCQl9CisKKwkJaWYgKG1wbGFuLT5wYXJ0X3BydW5lX2luZm8tPm5l ZWRzX2luaXRfcHJ1bmluZykKKwkJCXJvb3QtPmdsb2ItPmNvbnRhaW5zSW5pdGlhbFBydW5pbmcg PSB0cnVlOwogCX0KIAogCS8qIFdlIGRvbid0IG5lZWQgdG8gcmVjdXJzZSB0byBsZWZ0dHJlZSBv ciByaWdodHRyZWUgLi4uICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJ0aXRpb25pbmcv cGFydHBydW5lLmMgYi9zcmMvYmFja2VuZC9wYXJ0aXRpb25pbmcvcGFydHBydW5lLmMKaW5kZXgg NzA4MGNiMjVkOS4uMzMyMmRjNzlmMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFydGl0aW9u aW5nL3BhcnRwcnVuZS5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnRpdGlvbmluZy9wYXJ0cHJ1bmUu YwpAQCAtMTQ0LDcgKzE0NCw5IEBAIHN0YXRpYyBMaXN0ICptYWtlX3BhcnRpdGlvbmVkcmVsX3By dW5laW5mbyhQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCQkgICBMaXN0ICpwcnVuZXF1YWws CiAJCQkJCQkJCQkJICAgQml0bWFwc2V0ICpwYXJ0cmVsaWRzLAogCQkJCQkJCQkJCSAgIGludCAq cmVsaWRfc3VicGxhbl9tYXAsCi0JCQkJCQkJCQkJICAgQml0bWFwc2V0ICoqbWF0Y2hlZHN1YnBs YW5zKTsKKwkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKiptYXRjaGVkc3VicGxhbnMsCisJCQkJCQkJ CQkJICAgYm9vbCAqbmVlZHNfaW5pdF9wcnVuaW5nLAorCQkJCQkJCQkJCSAgIGJvb2wgKm5lZWRz X2V4ZWNfcHJ1bmluZyk7CiBzdGF0aWMgdm9pZCBnZW5fcGFydHBydW5lX3N0ZXBzKFJlbE9wdElu Zm8gKnJlbCwgTGlzdCAqY2xhdXNlcywKIAkJCQkJCQkJUGFydENsYXVzZVRhcmdldCB0YXJnZXQs CiAJCQkJCQkJCUdlbmVyYXRlUHJ1bmluZ1N0ZXBzQ29udGV4dCAqY29udGV4dCk7CkBAIC0yMzAs NiArMjMyLDggQEAgbWFrZV9wYXJ0aXRpb25fcHJ1bmVpbmZvKFBsYW5uZXJJbmZvICpyb290LCBS ZWxPcHRJbmZvICpwYXJlbnRyZWwsCiAJaW50CQkgICAqcmVsaWRfc3VicGxhbl9tYXA7CiAJTGlz dENlbGwgICAqbGM7CiAJaW50CQkJaTsKKwlib29sCQluZWVkc19pbml0X3BydW5pbmcgPSBmYWxz ZTsKKwlib29sCQluZWVkc19leGVjX3BydW5pbmcgPSBmYWxzZTsKIAogCS8qCiAJICogU2NhbiB0 aGUgc3VicGF0aHMgdG8gc2VlIHdoaWNoIG9uZXMgYXJlIHNjYW5zIG9mIHBhcnRpdGlvbiBjaGls ZApAQCAtMzA5LDEyICszMTMsMTYgQEAgbWFrZV9wYXJ0aXRpb25fcHJ1bmVpbmZvKFBsYW5uZXJJ bmZvICpyb290LCBSZWxPcHRJbmZvICpwYXJlbnRyZWwsCiAJCUJpdG1hcHNldCAgKnBhcnRyZWxp ZHMgPSAoQml0bWFwc2V0ICopIGxmaXJzdChsYyk7CiAJCUxpc3QJICAgKnBpbmZvbGlzdDsKIAkJ Qml0bWFwc2V0ICAqbWF0Y2hlZHN1YnBsYW5zID0gTlVMTDsKKwkJYm9vbAkJcGFydHJlbF9uZWVk c19pbml0X3BydW5pbmc7CisJCWJvb2wJCXBhcnRyZWxfbmVlZHNfZXhlY19wcnVuaW5nOwogCiAJ CXBpbmZvbGlzdCA9IG1ha2VfcGFydGl0aW9uZWRyZWxfcHJ1bmVpbmZvKHJvb3QsIHBhcmVudHJl bCwKIAkJCQkJCQkJCQkJCSAgcHJ1bmVxdWFsLAogCQkJCQkJCQkJCQkJICBwYXJ0cmVsaWRzLAog CQkJCQkJCQkJCQkJICByZWxpZF9zdWJwbGFuX21hcCwKLQkJCQkJCQkJCQkJCSAgJm1hdGNoZWRz dWJwbGFucyk7CisJCQkJCQkJCQkJCQkgICZtYXRjaGVkc3VicGxhbnMsCisJCQkJCQkJCQkJCQkg ICZwYXJ0cmVsX25lZWRzX2luaXRfcHJ1bmluZywKKwkJCQkJCQkJCQkJCSAgJnBhcnRyZWxfbmVl ZHNfZXhlY19wcnVuaW5nKTsKIAogCQkvKiBXaGVuIHBydW5pbmcgaXMgcG9zc2libGUsIHJlY29y ZCB0aGUgbWF0Y2hlZCBzdWJwbGFucyAqLwogCQlpZiAocGluZm9saXN0ICE9IE5JTCkKQEAgLTMy Myw2ICszMzEsMTAgQEAgbWFrZV9wYXJ0aXRpb25fcHJ1bmVpbmZvKFBsYW5uZXJJbmZvICpyb290 LCBSZWxPcHRJbmZvICpwYXJlbnRyZWwsCiAJCQlhbGxtYXRjaGVkc3VicGxhbnMgPSBibXNfam9p bihtYXRjaGVkc3VicGxhbnMsCiAJCQkJCQkJCQkJICBhbGxtYXRjaGVkc3VicGxhbnMpOwogCQl9 CisJCWlmICghbmVlZHNfaW5pdF9wcnVuaW5nKQorCQkJbmVlZHNfaW5pdF9wcnVuaW5nID0gcGFy dHJlbF9uZWVkc19pbml0X3BydW5pbmc7CisJCWlmICghbmVlZHNfZXhlY19wcnVuaW5nKQorCQkJ bmVlZHNfZXhlY19wcnVuaW5nID0gcGFydHJlbF9uZWVkc19leGVjX3BydW5pbmc7CiAJfQogCiAJ cGZyZWUocmVsaWRfc3VicGxhbl9tYXApOwpAQCAtMzM3LDYgKzM0OSw4IEBAIG1ha2VfcGFydGl0 aW9uX3BydW5laW5mbyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcGFyZW50cmVsLAog CS8qIEVsc2UgYnVpbGQgdGhlIHJlc3VsdCBkYXRhIHN0cnVjdHVyZSAqLwogCXBydW5laW5mbyA9 IG1ha2VOb2RlKFBhcnRpdGlvblBydW5lSW5mbyk7CiAJcHJ1bmVpbmZvLT5wcnVuZV9pbmZvcyA9 IHBydW5lcmVsaW5mb3M7CisJcHJ1bmVpbmZvLT5uZWVkc19pbml0X3BydW5pbmcgPSBuZWVkc19p bml0X3BydW5pbmc7CisJcHJ1bmVpbmZvLT5uZWVkc19leGVjX3BydW5pbmcgPSBuZWVkc19leGVj X3BydW5pbmc7CiAKIAkvKgogCSAqIFNvbWUgc3VicGxhbnMgbWF5IG5vdCBiZWxvbmcgdG8gYW55 IG9mIHRoZSBpZGVudGlmaWVkIHBhcnRpdGlvbmVkIHJlbHMuCkBAIC00MzUsMTMgKzQ0OSwxOCBA QCBhZGRfcGFydF9yZWxpZHMoTGlzdCAqYWxscGFydHJlbGlkcywgQml0bWFwc2V0ICpwYXJ0cmVs aWRzKQogICogSWYgd2UgY2Fubm90IGZpbmQgYW55IHVzZWZ1bCBydW4tdGltZSBwcnVuaW5nIHN0 ZXBzLCByZXR1cm4gTklMLgogICogSG93ZXZlciwgb24gc3VjY2VzcywgZWFjaCByZWwgaWRlbnRp ZmllZCBpbiBwYXJ0cmVsaWRzIHdpbGwgaGF2ZQogICogYW4gZWxlbWVudCBpbiB0aGUgcmVzdWx0 IGxpc3QsIGV2ZW4gaWYgc29tZSBvZiB0aGVtIGFyZSB1c2VsZXNzLgorICogKm5lZWRzX2luaXRf cHJ1bmluZyBhbmQgKm5lZWRzX2V4ZWNfcHJ1bmluZyBhcmUgc2V0IHRvIGluZGljYXRlIHRoYXQg dGhlCisgKiByZXR1cm5lZCBQYXJ0aXRpb25lZFJlbFBydW5lSW5mb3MgY29udGFpbnMgcHJ1bmlu ZyBzdGVwcyB0aGF0IGNhbiBiZQorICogcGVyZm9ybWVkIGJlZm9yZSBhbmQgYWZ0ZXIgZXhlY3V0 aW9uIGJlZ2lucywgcmVzcGVjdGl2ZWx5LgogICovCiBzdGF0aWMgTGlzdCAqCiBtYWtlX3BhcnRp dGlvbmVkcmVsX3BydW5laW5mbyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcGFyZW50 cmVsLAogCQkJCQkJCSAgTGlzdCAqcHJ1bmVxdWFsLAogCQkJCQkJCSAgQml0bWFwc2V0ICpwYXJ0 cmVsaWRzLAogCQkJCQkJCSAgaW50ICpyZWxpZF9zdWJwbGFuX21hcCwKLQkJCQkJCQkgIEJpdG1h cHNldCAqKm1hdGNoZWRzdWJwbGFucykKKwkJCQkJCQkgIEJpdG1hcHNldCAqKm1hdGNoZWRzdWJw bGFucywKKwkJCQkJCQkgIGJvb2wgKm5lZWRzX2luaXRfcHJ1bmluZywKKwkJCQkJCQkgIGJvb2wg Km5lZWRzX2V4ZWNfcHJ1bmluZykKIHsKIAlSZWxPcHRJbmZvICp0YXJnZXRwYXJ0ID0gTlVMTDsK IAlMaXN0CSAgICpwaW5mb2xpc3QgPSBOSUw7CkBAIC00NTIsNiArNDcxLDEwIEBAIG1ha2VfcGFy dGl0aW9uZWRyZWxfcHJ1bmVpbmZvKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpwYXJl bnRyZWwsCiAJaW50CQkJcnRpOwogCWludAkJCWk7CiAKKwkvKiBXaWxsIGZpbmQgb3V0IGJlbG93 LiAqLworCSpuZWVkc19pbml0X3BydW5pbmcgPSBmYWxzZTsKKwkqbmVlZHNfZXhlY19wcnVuaW5n ID0gZmFsc2U7CisKIAkvKgogCSAqIEV4YW1pbmUgZWFjaCBwYXJ0aXRpb25lZCByZWwsIGNvbnN0 cnVjdGluZyBhIHRlbXBvcmFyeSBhcnJheSB0byBtYXAKIAkgKiBmcm9tIHBsYW5uZXIgcmVsaWRz IHRvIGluZGV4IG9mIHRoZSBwYXJ0aXRpb25lZCByZWwsIGFuZCBidWlsZGluZyBhCkBAIC01Mzks NiArNTYyLDkgQEAgbWFrZV9wYXJ0aXRpb25lZHJlbF9wcnVuZWluZm8oUGxhbm5lckluZm8gKnJv b3QsIFJlbE9wdEluZm8gKnBhcmVudHJlbCwKIAkJICogZXhlY3V0b3IgcGVyLXNjYW4gcHJ1bmlu ZyBzdGVwcy4gIFRoaXMgZmlyc3QgcGFzcyBjcmVhdGVzIHN0YXJ0dXAKIAkJICogcHJ1bmluZyBz dGVwcyBhbmQgZGV0ZWN0cyB3aGV0aGVyIHRoZXJlJ3MgYW55IHBvc3NpYmx5LXVzZWZ1bCBxdWFs cwogCQkgKiB0aGF0IHdvdWxkIHJlcXVpcmUgcGVyLXNjYW4gcHJ1bmluZy4KKwkJICoKKwkJICog SW4gdGhlIGZpcnN0IHBhc3MsIHdlIG5vdGUgd2hldGhlciB0aGUgMm5kIHBhc3MgaXMgbmVjZXNz YXJ5IGJ5CisJCSAqIGJ5IG5vdGluZyB0aGUgcHJlc2VuY2Ugb2YgRVhFQyBwYXJhbWV0ZXJzLgog CQkgKi8KIAkJZ2VuX3BhcnRwcnVuZV9zdGVwcyhzdWJwYXJ0LCBwYXJ0cHJ1bmVxdWFsLCBQQVJU VEFSR0VUX0lOSVRJQUwsCiAJCQkJCQkJJmNvbnRleHQpOwpAQCAtNjEzLDYgKzYzOSwxMSBAQCBt YWtlX3BhcnRpdGlvbmVkcmVsX3BydW5laW5mbyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5m byAqcGFyZW50cmVsLAogCQlwaW5mby0+ZXhlY3BhcmFtaWRzID0gZXhlY3BhcmFtaWRzOwogCQkv KiBSZW1haW5pbmcgZmllbGRzIHdpbGwgYmUgZmlsbGVkIGluIHRoZSBuZXh0IGxvb3AgKi8KIAor CQlpZiAoISpuZWVkc19pbml0X3BydW5pbmcpCisJCQkqbmVlZHNfaW5pdF9wcnVuaW5nID0gKGlu aXRpYWxfcHJ1bmluZ19zdGVwcyAhPSBOSUwpOworCQlpZiAoISpuZWVkc19leGVjX3BydW5pbmcp CisJCQkqbmVlZHNfZXhlY19wcnVuaW5nID0gKGV4ZWNfcHJ1bmluZ19zdGVwcyAhPSBOSUwpOwor CiAJCXBpbmZvbGlzdCA9IGxhcHBlbmQocGluZm9saXN0LCBwaW5mbyk7CiAJfQogCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3Rn cmVzLmMKaW5kZXggYmEyZmNmZWI0YS4uMDg1ZWIzZjIwOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvdGNvcC9wb3N0Z3Jlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYwpAQCAt OTQ1LDE1ICs5NDUsMTcgQEAgcGdfcGxhbl9xdWVyeShRdWVyeSAqcXVlcnl0cmVlLCBjb25zdCBj aGFyICpxdWVyeV9zdHJpbmcsIGludCBjdXJzb3JPcHRpb25zLAogICogRm9yIG5vcm1hbCBvcHRp bWl6YWJsZSBzdGF0ZW1lbnRzLCBpbnZva2UgdGhlIHBsYW5uZXIuICBGb3IgdXRpbGl0eQogICog c3RhdGVtZW50cywganVzdCBtYWtlIGEgd3JhcHBlciBQbGFubmVkU3RtdCBub2RlLgogICoKLSAq IFRoZSByZXN1bHQgaXMgYSBsaXN0IG9mIFBsYW5uZWRTdG10IG5vZGVzLgorICogVGhlIHJlc3Vs dCBpcyBhIGxpc3Qgb2YgUGxhbm5lZFN0bXQgbm9kZXMuICBBbHNvLCBhIE5VTEwgaXMgYXBwZW5k ZWQgdG8KKyAqICpleGVjbG9ja3JlbHNpbmZvX2xpc3QgZm9yIGVhY2ggUGxhbm5lZFN0bXQgYWRk ZWQgdG8gdGhlIHJldHVybmVkIGxpc3QuCiAgKi8KIExpc3QgKgogcGdfcGxhbl9xdWVyaWVzKExp c3QgKnF1ZXJ5dHJlZXMsIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywgaW50IGN1cnNvck9wdGlv bnMsCi0JCQkJUGFyYW1MaXN0SW5mbyBib3VuZFBhcmFtcykKKwkJCQlQYXJhbUxpc3RJbmZvIGJv dW5kUGFyYW1zLCBMaXN0ICoqZXhlY2xvY2tyZWxzaW5mb19saXN0KQogewogCUxpc3QJICAgKnN0 bXRfbGlzdCA9IE5JTDsKIAlMaXN0Q2VsbCAgICpxdWVyeV9saXN0OwogCisJKmV4ZWNsb2NrcmVs c2luZm9fbGlzdCA9IE5JTDsKIAlmb3JlYWNoKHF1ZXJ5X2xpc3QsIHF1ZXJ5dHJlZXMpCiAJewog CQlRdWVyeQkgICAqcXVlcnkgPSBsZmlyc3Rfbm9kZShRdWVyeSwgcXVlcnlfbGlzdCk7CkBAIC05 NzcsNiArOTc5LDcgQEAgcGdfcGxhbl9xdWVyaWVzKExpc3QgKnF1ZXJ5dHJlZXMsIGNvbnN0IGNo YXIgKnF1ZXJ5X3N0cmluZywgaW50IGN1cnNvck9wdGlvbnMsCiAJCX0KIAogCQlzdG10X2xpc3Qg PSBsYXBwZW5kKHN0bXRfbGlzdCwgc3RtdCk7CisJCSpleGVjbG9ja3JlbHNpbmZvX2xpc3QgPSBs YXBwZW5kKCpleGVjbG9ja3JlbHNpbmZvX2xpc3QsIE5VTEwpOwogCX0KIAogCXJldHVybiBzdG10 X2xpc3Q7CkBAIC0xMDgwLDcgKzEwODMsOCBAQCBleGVjX3NpbXBsZV9xdWVyeShjb25zdCBjaGFy ICpxdWVyeV9zdHJpbmcpCiAJCVF1ZXJ5Q29tcGxldGlvbiBxYzsKIAkJTWVtb3J5Q29udGV4dCBw ZXJfcGFyc2V0cmVlX2NvbnRleHQgPSBOVUxMOwogCQlMaXN0CSAgICpxdWVyeXRyZWVfbGlzdCwK LQkJCQkgICAqcGxhbnRyZWVfbGlzdDsKKwkJCQkgICAqcGxhbnRyZWVfbGlzdCwKKwkJCQkgICAq cGxhbnRyZWVfZXhlY2xvY2tyZWxzaW5mb19saXN0OwogCQlQb3J0YWwJCXBvcnRhbDsKIAkJRGVz dFJlY2VpdmVyICpyZWNlaXZlcjsKIAkJaW50MTYJCWZvcm1hdDsKQEAgLTExNjcsNyArMTE3MSw4 IEBAIGV4ZWNfc2ltcGxlX3F1ZXJ5KGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZykKIAkJCQkJCQkJ CQkJCU5VTEwsIDAsIE5VTEwpOwogCiAJCXBsYW50cmVlX2xpc3QgPSBwZ19wbGFuX3F1ZXJpZXMo cXVlcnl0cmVlX2xpc3QsIHF1ZXJ5X3N0cmluZywKLQkJCQkJCQkJCQlDVVJTT1JfT1BUX1BBUkFM TEVMX09LLCBOVUxMKTsKKwkJCQkJCQkJCQlDVVJTT1JfT1BUX1BBUkFMTEVMX09LLCBOVUxMLAor CQkJCQkJCQkJCSZwbGFudHJlZV9leGVjbG9ja3JlbHNpbmZvX2xpc3QpOwogCiAJCS8qCiAJCSAq IERvbmUgd2l0aCB0aGUgc25hcHNob3QgdXNlZCBmb3IgcGFyc2luZy9wbGFubmluZy4KQEAgLTEy MDMsNiArMTIwOCw3IEBAIGV4ZWNfc2ltcGxlX3F1ZXJ5KGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmlu ZykKIAkJCQkJCSAgcXVlcnlfc3RyaW5nLAogCQkJCQkJICBjb21tYW5kVGFnLAogCQkJCQkJICBw bGFudHJlZV9saXN0LAorCQkJCQkJICBwbGFudHJlZV9leGVjbG9ja3JlbHNpbmZvX2xpc3QsCiAJ CQkJCQkgIE5VTEwpOwogCiAJCS8qCkBAIC0xOTkxLDYgKzE5OTcsNyBAQCBleGVjX2JpbmRfbWVz c2FnZShTdHJpbmdJbmZvIGlucHV0X21lc3NhZ2UpCiAJCQkJCSAgcXVlcnlfc3RyaW5nLAogCQkJ CQkgIHBzcmMtPmNvbW1hbmRUYWcsCiAJCQkJCSAgY3BsYW4tPnN0bXRfbGlzdCwKKwkJCQkJICBj cGxhbi0+ZXhlY2xvY2tyZWxzaW5mb19saXN0LAogCQkJCQkgIGNwbGFuKTsKIAogCS8qIERvbmUg d2l0aCB0aGUgc25hcHNob3QgdXNlZCBmb3IgcGFyYW1ldGVyIEkvTyBhbmQgcGFyc2luZy9wbGFu bmluZyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC9wcXVlcnkuYyBiL3NyYy9iYWNr ZW5kL3Rjb3AvcHF1ZXJ5LmMKaW5kZXggNWY5MDc4MzFhMy4uOTcyZGRjMDE0ZSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvdGNvcC9wcXVlcnkuYworKysgYi9zcmMvYmFja2VuZC90Y29wL3BxdWVy eS5jCkBAIC0zNSw3ICszNSw3IEBACiBQb3J0YWwJCUFjdGl2ZVBvcnRhbCA9IE5VTEw7CiAKIAot c3RhdGljIHZvaWQgUHJvY2Vzc1F1ZXJ5KFBsYW5uZWRTdG10ICpwbGFuLAorc3RhdGljIHZvaWQg UHJvY2Vzc1F1ZXJ5KFBsYW5uZWRTdG10ICpwbGFuLCBFeGVjTG9ja1JlbHNJbmZvICpleGVjbG9j a3JlbHNpbmZvLAogCQkJCQkJIGNvbnN0IGNoYXIgKnNvdXJjZVRleHQsCiAJCQkJCQkgUGFyYW1M aXN0SW5mbyBwYXJhbXMsCiAJCQkJCQkgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYsCkBAIC02 NSw2ICs2NSw3IEBAIHN0YXRpYyB2b2lkIERvUG9ydGFsUmV3aW5kKFBvcnRhbCBwb3J0YWwpOwog ICovCiBRdWVyeURlc2MgKgogQ3JlYXRlUXVlcnlEZXNjKFBsYW5uZWRTdG10ICpwbGFubmVkc3Rt dCwKKwkJCQlFeGVjTG9ja1JlbHNJbmZvICpleGVjbG9ja3JlbHNpbmZvLAogCQkJCWNvbnN0IGNo YXIgKnNvdXJjZVRleHQsCiAJCQkJU25hcHNob3Qgc25hcHNob3QsCiAJCQkJU25hcHNob3QgY3Jv c3NjaGVja19zbmFwc2hvdCwKQEAgLTc3LDYgKzc4LDcgQEAgQ3JlYXRlUXVlcnlEZXNjKFBsYW5u ZWRTdG10ICpwbGFubmVkc3RtdCwKIAogCXFkLT5vcGVyYXRpb24gPSBwbGFubmVkc3RtdC0+Y29t bWFuZFR5cGU7CS8qIG9wZXJhdGlvbiAqLwogCXFkLT5wbGFubmVkc3RtdCA9IHBsYW5uZWRzdG10 OwkvKiBwbGFuICovCisJcWQtPmV4ZWNsb2NrcmVsc2luZm8gPSBleGVjbG9ja3JlbHNpbmZvOwkJ LyogRXhlY3V0b3JHZXRMb2NrUmVscygpIG91dHB1dCBmb3IgcGxhbiAqLwogCXFkLT5zb3VyY2VU ZXh0ID0gc291cmNlVGV4dDsJLyogcXVlcnkgdGV4dCAqLwogCXFkLT5zbmFwc2hvdCA9IFJlZ2lz dGVyU25hcHNob3Qoc25hcHNob3QpOwkvKiBzbmFwc2hvdCAqLwogCS8qIFJJIGNoZWNrIHNuYXBz aG90ICovCkBAIC0xMjIsNiArMTI0LDcgQEAgRnJlZVF1ZXJ5RGVzYyhRdWVyeURlc2MgKnFkZXNj KQogICoJCVBPUlRBTF9PTkVfUkVUVVJOSU5HLCBvciBQT1JUQUxfT05FX01PRF9XSVRIIHBvcnRh bAogICoKICAqCXBsYW46IHRoZSBwbGFuIHRyZWUgZm9yIHRoZSBxdWVyeQorICoJZXhlY2xvY2ty ZWxzaW5mbzogRXhlY3V0b3JHZXRMb2NrUmVscygpIG91dHB1dCBmb3IgdGhlIHBsYW4gdHJlZQog ICoJc291cmNlVGV4dDogdGhlIHNvdXJjZSB0ZXh0IG9mIHRoZSBxdWVyeQogICoJcGFyYW1zOiBh bnkgcGFyYW1ldGVycyBuZWVkZWQKICAqCWRlc3Q6IHdoZXJlIHRvIHNlbmQgcmVzdWx0cwpAQCAt MTM0LDYgKzEzNyw3IEBAIEZyZWVRdWVyeURlc2MoUXVlcnlEZXNjICpxZGVzYykKICAqLwogc3Rh dGljIHZvaWQKIFByb2Nlc3NRdWVyeShQbGFubmVkU3RtdCAqcGxhbiwKKwkJCSBFeGVjTG9ja1Jl bHNJbmZvICpleGVjbG9ja3JlbHNpbmZvLAogCQkJIGNvbnN0IGNoYXIgKnNvdXJjZVRleHQsCiAJ CQkgUGFyYW1MaXN0SW5mbyBwYXJhbXMsCiAJCQkgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYs CkBAIC0xNDUsNyArMTQ5LDcgQEAgUHJvY2Vzc1F1ZXJ5KFBsYW5uZWRTdG10ICpwbGFuLAogCS8q CiAJICogQ3JlYXRlIHRoZSBRdWVyeURlc2Mgb2JqZWN0CiAJICovCi0JcXVlcnlEZXNjID0gQ3Jl YXRlUXVlcnlEZXNjKHBsYW4sIHNvdXJjZVRleHQsCisJcXVlcnlEZXNjID0gQ3JlYXRlUXVlcnlE ZXNjKHBsYW4sIGV4ZWNsb2NrcmVsc2luZm8sIHNvdXJjZVRleHQsCiAJCQkJCQkJCUdldEFjdGl2 ZVNuYXBzaG90KCksIEludmFsaWRTbmFwc2hvdCwKIAkJCQkJCQkJZGVzdCwgcGFyYW1zLCBxdWVy eUVudiwgMCk7CiAKQEAgLTQ5MCw2ICs0OTQsNyBAQCBQb3J0YWxTdGFydChQb3J0YWwgcG9ydGFs LCBQYXJhbUxpc3RJbmZvIHBhcmFtcywKIAkJCQkgKiB0aGUgZGVzdGluYXRpb24gdG8gRGVzdE5v bmUuCiAJCQkJICovCiAJCQkJcXVlcnlEZXNjID0gQ3JlYXRlUXVlcnlEZXNjKGxpbml0aWFsX25v ZGUoUGxhbm5lZFN0bXQsIHBvcnRhbC0+c3RtdHMpLAorCQkJCQkJCQkJCQlsaW5pdGlhbF9ub2Rl KEV4ZWNMb2NrUmVsc0luZm8sIHBvcnRhbC0+ZXhlY2xvY2tyZWxzaW5mb3MpLAogCQkJCQkJCQkJ CQlwb3J0YWwtPnNvdXJjZVRleHQsCiAJCQkJCQkJCQkJCUdldEFjdGl2ZVNuYXBzaG90KCksCiAJ CQkJCQkJCQkJCUludmFsaWRTbmFwc2hvdCwKQEAgLTExOTAsNyArMTE5NSw4IEBAIFBvcnRhbFJ1 bk11bHRpKFBvcnRhbCBwb3J0YWwsCiAJCQkgICBRdWVyeUNvbXBsZXRpb24gKnFjKQogewogCWJv b2wJCWFjdGl2ZV9zbmFwc2hvdF9zZXQgPSBmYWxzZTsKLQlMaXN0Q2VsbCAgICpzdG10bGlzdF9p dGVtOworCUxpc3RDZWxsICAgKnN0bXRsaXN0X2l0ZW0sCisJCQkgICAqZXhlY2xvY2tyZWxzaW5m b2xpc3RfaXRlbTsKIAogCS8qCiAJICogSWYgdGhlIGRlc3RpbmF0aW9uIGlzIERlc3RSZW1vdGVF eGVjdXRlLCBjaGFuZ2UgdG8gRGVzdE5vbmUuICBUaGUKQEAgLTEyMTEsOSArMTIxNywxMiBAQCBQ b3J0YWxSdW5NdWx0aShQb3J0YWwgcG9ydGFsLAogCSAqIExvb3AgdG8gaGFuZGxlIHRoZSBpbmRp dmlkdWFsIHF1ZXJpZXMgZ2VuZXJhdGVkIGZyb20gYSBzaW5nbGUgcGFyc2V0cmVlCiAJICogYnkg YW5hbHlzaXMgYW5kIHJld3JpdGUuCiAJICovCi0JZm9yZWFjaChzdG10bGlzdF9pdGVtLCBwb3J0 YWwtPnN0bXRzKQorCWZvcmJvdGgoc3RtdGxpc3RfaXRlbSwgcG9ydGFsLT5zdG10cywKKwkJCWV4 ZWNsb2NrcmVsc2luZm9saXN0X2l0ZW0sIHBvcnRhbC0+ZXhlY2xvY2tyZWxzaW5mb3MpCiAJewog CQlQbGFubmVkU3RtdCAqcHN0bXQgPSBsZmlyc3Rfbm9kZShQbGFubmVkU3RtdCwgc3RtdGxpc3Rf aXRlbSk7CisJCUV4ZWNMb2NrUmVsc0luZm8gKmV4ZWNsb2NrcmVsc2luZm8gPSBsZmlyc3Rfbm9k ZShFeGVjTG9ja1JlbHNJbmZvLAorCQkJCQkJCQkJCQkgICBleGVjbG9ja3JlbHNpbmZvbGlzdF9p dGVtKTsKIAogCQkvKgogCQkgKiBJZiB3ZSBnb3QgYSBjYW5jZWwgc2lnbmFsIGluIHByaW9yIGNv bW1hbmQsIHF1aXQKQEAgLTEyNzEsNyArMTI4MCw3IEBAIFBvcnRhbFJ1bk11bHRpKFBvcnRhbCBw b3J0YWwsCiAJCQlpZiAocHN0bXQtPmNhblNldFRhZykKIAkJCXsKIAkJCQkvKiBzdGF0ZW1lbnQg Y2FuIHNldCB0YWcgc3RyaW5nICovCi0JCQkJUHJvY2Vzc1F1ZXJ5KHBzdG10LAorCQkJCVByb2Nl c3NRdWVyeShwc3RtdCwgZXhlY2xvY2tyZWxzaW5mbywKIAkJCQkJCQkgcG9ydGFsLT5zb3VyY2VU ZXh0LAogCQkJCQkJCSBwb3J0YWwtPnBvcnRhbFBhcmFtcywKIAkJCQkJCQkgcG9ydGFsLT5xdWVy eUVudiwKQEAgLTEyODAsNyArMTI4OSw3IEBAIFBvcnRhbFJ1bk11bHRpKFBvcnRhbCBwb3J0YWws CiAJCQllbHNlCiAJCQl7CiAJCQkJLyogc3RtdCBhZGRlZCBieSByZXdyaXRlIGNhbm5vdCBzZXQg dGFnICovCi0JCQkJUHJvY2Vzc1F1ZXJ5KHBzdG10LAorCQkJCVByb2Nlc3NRdWVyeShwc3RtdCwg ZXhlY2xvY2tyZWxzaW5mbywKIAkJCQkJCQkgcG9ydGFsLT5zb3VyY2VUZXh0LAogCQkJCQkJCSBw b3J0YWwtPnBvcnRhbFBhcmFtcywKIAkJCQkJCQkgcG9ydGFsLT5xdWVyeUVudiwKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3BsYW5jYWNoZS5jIGIvc3JjL2JhY2tlbmQvdXRp bHMvY2FjaGUvcGxhbmNhY2hlLmMKaW5kZXggNGNmNmRiNTA0Zi4uOWY1YTQwYTBhNiAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcGxhbmNhY2hlLmMKKysrIGIvc3JjL2JhY2tl bmQvdXRpbHMvY2FjaGUvcGxhbmNhY2hlLmMKQEAgLTk5LDE0ICs5OSwxNiBAQCBzdGF0aWMgZGxp c3RfaGVhZCBjYWNoZWRfZXhwcmVzc2lvbl9saXN0ID0gRExJU1RfU1RBVElDX0lOSVQoY2FjaGVk X2V4cHJlc3Npb25fbAogc3RhdGljIHZvaWQgUmVsZWFzZUdlbmVyaWNQbGFuKENhY2hlZFBsYW5T b3VyY2UgKnBsYW5zb3VyY2UpOwogc3RhdGljIExpc3QgKlJldmFsaWRhdGVDYWNoZWRRdWVyeShD YWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlLAogCQkJCQkJCQkgICBRdWVyeUVudmlyb25tZW50 ICpxdWVyeUVudik7Ci1zdGF0aWMgYm9vbCBDaGVja0NhY2hlZFBsYW4oQ2FjaGVkUGxhblNvdXJj ZSAqcGxhbnNvdXJjZSk7CitzdGF0aWMgYm9vbCBDaGVja0NhY2hlZFBsYW4oQ2FjaGVkUGxhblNv dXJjZSAqcGxhbnNvdXJjZSwgUGFyYW1MaXN0SW5mbyBib3VuZFBhcmFtcyk7CiBzdGF0aWMgQ2Fj aGVkUGxhbiAqQnVpbGRDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsIExp c3QgKnFsaXN0LAogCQkJCQkJCQkgICBQYXJhbUxpc3RJbmZvIGJvdW5kUGFyYW1zLCBRdWVyeUVu dmlyb25tZW50ICpxdWVyeUVudik7CitzdGF0aWMgdm9pZCBDYWNoZWRQbGFuU2F2ZUV4ZWNMb2Nr UmVsc0luZm9zKENhY2hlZFBsYW4gKnBsYW4sIExpc3QgKmV4ZWNsb2NrcmVsc2luZm9fbGlzdCk7 CiBzdGF0aWMgYm9vbCBjaG9vc2VfY3VzdG9tX3BsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNv dXJjZSwKIAkJCQkJCQkgICBQYXJhbUxpc3RJbmZvIGJvdW5kUGFyYW1zKTsKIHN0YXRpYyBkb3Vi bGUgY2FjaGVkX3BsYW5fY29zdChDYWNoZWRQbGFuICpwbGFuLCBib29sIGluY2x1ZGVfcGxhbm5l cik7CiBzdGF0aWMgUXVlcnkgKlF1ZXJ5TGlzdEdldFByaW1hcnlTdG10KExpc3QgKnN0bXRzKTsK LXN0YXRpYyB2b2lkIEFjcXVpcmVFeGVjdXRvckxvY2tzKExpc3QgKnN0bXRfbGlzdCwgYm9vbCBh Y3F1aXJlKTsKK3N0YXRpYyBMaXN0ICpBY3F1aXJlRXhlY3V0b3JMb2NrcyhMaXN0ICpzdG10X2xp c3QsIFBhcmFtTGlzdEluZm8gYm91bmRQYXJhbXMpOworc3RhdGljIHZvaWQgUmVsZWFzZUV4ZWN1 dG9yTG9ja3MoTGlzdCAqc3RtdF9saXN0LCBMaXN0ICpleGVjbG9ja3JlbHNpbmZvX2xpc3QpOwog c3RhdGljIHZvaWQgQWNxdWlyZVBsYW5uZXJMb2NrcyhMaXN0ICpzdG10X2xpc3QsIGJvb2wgYWNx dWlyZSk7CiBzdGF0aWMgdm9pZCBTY2FuUXVlcnlGb3JMb2NrcyhRdWVyeSAqcGFyc2V0cmVlLCBi b29sIGFjcXVpcmUpOwogc3RhdGljIGJvb2wgU2NhblF1ZXJ5V2Fsa2VyKE5vZGUgKm5vZGUsIGJv b2wgKmFjcXVpcmUpOwpAQCAtNzkwLDkgKzc5MiwyMSBAQCBSZXZhbGlkYXRlQ2FjaGVkUXVlcnko Q2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwKICAqCiAgKiBPbiBhICJ0cnVlIiByZXR1cm4s IHdlIGhhdmUgYWNxdWlyZWQgdGhlIGxvY2tzIG5lZWRlZCB0byBydW4gdGhlIHBsYW4uCiAgKiAo V2UgbXVzdCBkbyB0aGlzIGZvciB0aGUgInRydWUiIHJlc3VsdCB0byBiZSByYWNlLWNvbmRpdGlv bi1mcmVlLikKKyAqCisgKiBJZiB0aGUgQ2FjaGVkUGxhbiBpcyB2YWxpZCwgdGhpcyBtYXkgaW4g c29tZSBjYXNlcyBjYWxsIEV4ZWN1dG9yR2V0TG9ja1JlbHMKKyAqIG9uIGVhY2ggUGxhbm5lZFN0 bXQgY29udGFpbmVkIGluIGl0IHRvIGRldGVybWluZSB0aGUgc2V0IG9mIHJlbGF0aW9ucyB0byBi ZQorICogbG9ja2VkIGJ5IEFjcXVpcmVFeGVjdXRvckxvY2tzKCksIGluc3RlYWQgb2YganVzdCBz Y2FubmluZyBpdHMgcmFuZ2UgdGFibGUsCisgKiB3aGljaCBpcyBkb25lIHRvIHBydW5lIGF3YXkg YW55IG5vZGVzIGluIHRoZSB0cmVlIHRoYXQgbmVlZCBub3QgYmUgZXhlY3V0ZWQKKyAqIGJhc2Vk IG9uIHRoZSByZXN1bHQgb2YgaW5pdGlhbCBwYXJ0aXRpb24gcHJ1bmluZy4gIFJlc3VsdGluZwor ICogRXhlY0xvY2tSZWxzSW5mbyBub2RlcyBjb250YWluaW5nIHRoZSByZXN1bHQgb2Ygc3VjaCBw cnVuaW5nLCBhbGxvY2F0ZWQgaW4KKyAqIGEgY2hpbGQgY29udGV4dCBvZiB0aGUgY29udGV4dCBj b250YWluaW5nIHRoZSBwbGFuIGl0c2VsZiwgYXJlIGFkZGVkIGludG8KKyAqIHBsYW4tPmV4ZWNs b2NrcmVsc2luZm9fbGlzdC4gIFRoZSBwcmV2aW91cyBjb250ZW50cyBvZiB0aGUgbGlzdCBmcm9t IHRoZQorICogbGFzdCBpbnZvY2F0aW9uIG9uIHRoZSBzYW1lIENhY2hlZFBsYW4gYXJlIGRlbGV0 ZWQsIGJlY2F1c2UgdGhleSB3b3VsZCBubworICogbG9uZ2VyIGJlIHZhbGlkIGdpdmVuIHRoZSBm cmVzaCBzZXQgb2YgcGFyYW1ldGVyIHZhbHVlcyB3aGljaCBtYXkgYmUgdXNlZAorICogYXMgcHJ1 bmluZyBwYXJhbWV0ZXJzLgogICovCiBzdGF0aWMgYm9vbAotQ2hlY2tDYWNoZWRQbGFuKENhY2hl ZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UpCitDaGVja0NhY2hlZFBsYW4oQ2FjaGVkUGxhblNvdXJj ZSAqcGxhbnNvdXJjZSwgUGFyYW1MaXN0SW5mbyBib3VuZFBhcmFtcykKIHsKIAlDYWNoZWRQbGFu ICpwbGFuID0gcGxhbnNvdXJjZS0+Z3BsYW47CiAKQEAgLTgyMCwxMyArODM0LDI1IEBAIENoZWNr Q2FjaGVkUGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlKQogCSAqLwogCWlmIChwbGFu LT5pc192YWxpZCkKIAl7CisJCUxpc3QgICAqZXhlY2xvY2tyZWxzaW5mb19saXN0OworCiAJCS8q CiAJCSAqIFBsYW4gbXVzdCBoYXZlIHBvc2l0aXZlIHJlZmNvdW50IGJlY2F1c2UgaXQgaXMgcmVm ZXJlbmNlZCBieQogCQkgKiBwbGFuc291cmNlOyBzbyBubyBuZWVkIHRvIGZlYXIgaXQgZGlzYXBw ZWFycyB1bmRlciB1cyBoZXJlLgogCQkgKi8KIAkJQXNzZXJ0KHBsYW4tPnJlZmNvdW50ID4gMCk7 CiAKLQkJQWNxdWlyZUV4ZWN1dG9yTG9ja3MocGxhbi0+c3RtdF9saXN0LCB0cnVlKTsKKwkJLyoK KwkJICogTG9jayByZWxhdGlvbnMgc2Nhbm5lZCBieSB0aGUgcGxhbi4gIElmIEV4ZWN1dG9yR2V0 TG9ja1JlbHMoKSBhc2tlZAorCQkgKiB0byBvbWl0IHNvbWUgcmVsYXRpb25zIGJlY2F1c2UgdGhl IHBsYW4gbm9kZXMgdGhhdCBzY2FuIHRoZW0gd2VyZQorCQkgKiBmb3VuZCB0byBiZSBwcnVuZWQs IHRoZSBleGVjdXRvciB3aWxsIGJlIGluZm9ybWVkIG9mIHRoZSBvbWlzc2lvbiBvZgorCQkgKiB0 aGUgcGxhbiBub2RlcyB0aGVtc2VsdmVzLCBzbyB0aGF0IGl0IGRvZXNuJ3QgYWNjaWRlbnRhbGx5 IHRyeSB0bworCQkgKiBleGVjdXRlIHRob3NlIG5vZGVzLCB2aWEgdGhlIEV4ZWNMb2NrUmVsc0lu Zm8gbm9kZXMgY29sbGVjdGVkIGluIHRoZQorCQkgKiByZXR1cm5lZCBsaXN0IHRoYXQgaXMgYWxz byBwYXNzZWQgdG8gaXQgYWxvbmcgd2l0aCB0aGUgbGlzdCBvZgorCQkgKiBQbGFubmVkU3RtdHMu CisJCSAqLworCQlleGVjbG9ja3JlbHNpbmZvX2xpc3QgPSBBY3F1aXJlRXhlY3V0b3JMb2Nrcyhw bGFuLT5zdG10X2xpc3QsCisJCQkJCQkJCQkJCQkJIGJvdW5kUGFyYW1zKTsKIAogCQkvKgogCQkg KiBJZiBwbGFuIHdhcyB0cmFuc2llbnQsIGNoZWNrIHRvIHNlZSBpZiBUcmFuc2FjdGlvblhtaW4g aGFzCkBAIC04NDQsMTEgKzg3MCwxNCBAQCBDaGVja0NhY2hlZFBsYW4oQ2FjaGVkUGxhblNvdXJj ZSAqcGxhbnNvdXJjZSkKIAkJaWYgKHBsYW4tPmlzX3ZhbGlkKQogCQl7CiAJCQkvKiBTdWNjZXNz ZnVsbHkgcmV2YWxpZGF0ZWQgYW5kIGxvY2tlZCB0aGUgcXVlcnkuICovCisKKwkJCS8qIFJlbWVt YmVyIEV4ZWNMb2NrUmVsc0luZm9zIGluIHRoZSBDYWNoZWRQbGFuLiAqLworCQkJQ2FjaGVkUGxh blNhdmVFeGVjTG9ja1JlbHNJbmZvcyhwbGFuLCBleGVjbG9ja3JlbHNpbmZvX2xpc3QpOwogCQkJ cmV0dXJuIHRydWU7CiAJCX0KIAogCQkvKiBPb3BzLCB0aGUgcmFjZSBjYXNlIGhhcHBlbmVkLiAg UmVsZWFzZSB1c2VsZXNzIGxvY2tzLiAqLwotCQlBY3F1aXJlRXhlY3V0b3JMb2NrcyhwbGFuLT5z dG10X2xpc3QsIGZhbHNlKTsKKwkJUmVsZWFzZUV4ZWN1dG9yTG9ja3MocGxhbi0+c3RtdF9saXN0 LCBleGVjbG9ja3JlbHNpbmZvX2xpc3QpOwogCX0KIAogCS8qCkBAIC04ODAsNyArOTA5LDggQEAg QnVpbGRDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsIExpc3QgKnFsaXN0 LAogCQkJCVBhcmFtTGlzdEluZm8gYm91bmRQYXJhbXMsIFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5 RW52KQogewogCUNhY2hlZFBsYW4gKnBsYW47Ci0JTGlzdAkgICAqcGxpc3Q7CisJTGlzdAkgICAq cGxpc3QsCisJCQkgICAqZXhlY2xvY2tyZWxzaW5mb19saXN0OwogCWJvb2wJCXNuYXBzaG90X3Nl dDsKIAlib29sCQlpc190cmFuc2llbnQ7CiAJTWVtb3J5Q29udGV4dCBwbGFuX2NvbnRleHQ7CkBA IC05MzMsNyArOTYzLDggQEAgQnVpbGRDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5z b3VyY2UsIExpc3QgKnFsaXN0LAogCSAqIEdlbmVyYXRlIHRoZSBwbGFuLgogCSAqLwogCXBsaXN0 ID0gcGdfcGxhbl9xdWVyaWVzKHFsaXN0LCBwbGFuc291cmNlLT5xdWVyeV9zdHJpbmcsCi0JCQkJ CQkJcGxhbnNvdXJjZS0+Y3Vyc29yX29wdGlvbnMsIGJvdW5kUGFyYW1zKTsKKwkJCQkJCQlwbGFu c291cmNlLT5jdXJzb3Jfb3B0aW9ucywgYm91bmRQYXJhbXMsCisJCQkJCQkJJmV4ZWNsb2NrcmVs c2luZm9fbGlzdCk7CiAKIAkvKiBSZWxlYXNlIHNuYXBzaG90IGlmIHdlIGdvdCBvbmUgKi8KIAlp ZiAoc25hcHNob3Rfc2V0KQpAQCAtMTAwMiw2ICsxMDMzLDE2IEBAIEJ1aWxkQ2FjaGVkUGxhbihD YWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlLCBMaXN0ICpxbGlzdCwKIAlwbGFuLT5pc19zYXZl ZCA9IGZhbHNlOwogCXBsYW4tPmlzX3ZhbGlkID0gdHJ1ZTsKIAorCS8qCisJICogU2F2ZSB0aGUg ZHVtbXkgRXhlY0xvY2tSZWxzSW5mbyBsaXN0LCB0aGF0IGlzIGEgbGlzdCBjb250YWluaW5nIE5V TExzCisJICogYXMgZWxlbWVudHMuICBXZSBtdXN0IGRvIHRoaXMsIGJlY2FzdWUgdXNlcnMgb2Yg dGhlIENhY2hlZFBsYW4gZXhwZWN0CisJICogb25lIHRvIGdvIHdpdGggdGhlIGxpc3Qgb2YgUGxh bm5lZFN0bXRzLgorCSAqIFhYWCBtYXliZSBnZXQgcmlkIG9mIHRoYXQgY29udHJhY3QuCisJICov CisJcGxhbi0+ZXhlY2xvY2tyZWxzaW5mb19jb250ZXh0ID0gTlVMTDsKKwlDYWNoZWRQbGFuU2F2 ZUV4ZWNMb2NrUmVsc0luZm9zKHBsYW4sIGV4ZWNsb2NrcmVsc2luZm9fbGlzdCk7CisJQXNzZXJ0 KE1lbW9yeUNvbnRleHRJc1ZhbGlkKHBsYW4tPmV4ZWNsb2NrcmVsc2luZm9fY29udGV4dCkpOwor CiAJLyogYXNzaWduIGdlbmVyYXRpb24gbnVtYmVyIHRvIG5ldyBwbGFuICovCiAJcGxhbi0+Z2Vu ZXJhdGlvbiA9ICsrKHBsYW5zb3VyY2UtPmdlbmVyYXRpb24pOwogCkBAIC0xMTYwLDcgKzEyMDEs NyBAQCBHZXRDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsIFBhcmFtTGlz dEluZm8gYm91bmRQYXJhbXMsCiAKIAlpZiAoIWN1c3RvbXBsYW4pCiAJewotCQlpZiAoQ2hlY2tD YWNoZWRQbGFuKHBsYW5zb3VyY2UpKQorCQlpZiAoQ2hlY2tDYWNoZWRQbGFuKHBsYW5zb3VyY2Us IGJvdW5kUGFyYW1zKSkKIAkJewogCQkJLyogV2Ugd2FudCBhIGdlbmVyaWMgcGxhbiwgYW5kIHdl IGFscmVhZHkgaGF2ZSBhIHZhbGlkIG9uZSAqLwogCQkJcGxhbiA9IHBsYW5zb3VyY2UtPmdwbGFu OwpAQCAtMTU4Niw2ICsxNjI3LDQ5IEBAIENvcHlDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2Ug KnBsYW5zb3VyY2UpCiAJcmV0dXJuIG5ld3NvdXJjZTsKIH0KIAorLyoKKyAqIENhY2hlZFBsYW5T YXZlRXhlY0xvY2tSZWxzSW5mb3MKKyAqCQlTYXZlIHRoZSBsaXN0IGNvbnRhaW5pbmcgRXhlY0xv Y2tSZWxzSW5mbyBub2RlcyBpbnRvIHRoZSBnaXZlbgorICoJCUNhY2hlZFBsYW4KKyAqCisgKiBU aGUgcHJvdmlkZWQgbGlzdCBpcyBjb3BpZWQgaW50byBhIGRlZGljYXRlZCBjb250ZXh0IHRoYXQg aXMgYSBjaGlsZCBvZgorICogcGxhbi0+Y29udGV4dC4gIElmIHRoZSBjaGlsZCBjb250ZXh0IGFs cmVhZHkgZXhpc3RzLCBpdCBpcyBlbXB0aWVkLCBiZWNhdXNlCisgKiBhbnkgRXhlY0xvY2tSZWxz SW5mbyBjb250YWluZWQgdGhlcmVpbiB3b3VsZCBubyBsb25nZXIgYmUgdXNlZnVsLgorICovCitz dGF0aWMgdm9pZAorQ2FjaGVkUGxhblNhdmVFeGVjTG9ja1JlbHNJbmZvcyhDYWNoZWRQbGFuICpw bGFuLCBMaXN0ICpleGVjbG9ja3JlbHNpbmZvX2xpc3QpCit7CisJTWVtb3J5Q29udGV4dAlleGVj bG9ja3JlbHNpbmZvX2NvbnRleHQgPSBwbGFuLT5leGVjbG9ja3JlbHNpbmZvX2NvbnRleHQsCisJ CQkJCW9sZGNvbnRleHQgPSBDdXJyZW50TWVtb3J5Q29udGV4dDsKKwlMaXN0CQkgICAqZXhlY2xv Y2tyZWxzaW5mb19saXN0X2NvcHk7CisKKwkvKgorCSAqIFNldCB1cCB0aGUgZGVkaWNhdGVkIGNv bnRleHQgaWYgbm90IGFscmVhZHkgZG9uZSwgc2F2aW5nIGl0IGFzIGEgY2hpbGQKKwkgKiBvZiB0 aGUgQ2FjaGVkUGxhbidzIGNvbnRleHQuCisJICovCisJaWYgKGV4ZWNsb2NrcmVsc2luZm9fY29u dGV4dCA9PSBOVUxMKQorCXsKKwkJZXhlY2xvY2tyZWxzaW5mb19jb250ZXh0ID0gQWxsb2NTZXRD b250ZXh0Q3JlYXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkJCQkJICJDYWNoZWRQ bGFuIGV4ZWNsb2NrcmVsc2luZm8gbGlzdCIsCisJCQkJCQkJCQkJCQkgQUxMT0NTRVRfU1RBUlRf U01BTExfU0laRVMpOworCQlNZW1vcnlDb250ZXh0U2V0UGFyZW50KGV4ZWNsb2NrcmVsc2luZm9f Y29udGV4dCwgcGxhbi0+Y29udGV4dCk7CisJCU1lbW9yeUNvbnRleHRTZXRJZGVudGlmaWVyKGV4 ZWNsb2NrcmVsc2luZm9fY29udGV4dCwgcGxhbi0+Y29udGV4dC0+aWRlbnQpOworCQlwbGFuLT5l eGVjbG9ja3JlbHNpbmZvX2NvbnRleHQgPSBleGVjbG9ja3JlbHNpbmZvX2NvbnRleHQ7CisJfQor CWVsc2UKKwl7CisJCS8qIEp1c3QgY2xlYXIgZXhpc3RpbmcgY29udGVudHMgYnkgcmVzZXR0aW5n IHRoZSBjb250ZXh0LiAqLworCQlBc3NlcnQoTWVtb3J5Q29udGV4dElzVmFsaWQoZXhlY2xvY2ty ZWxzaW5mb19jb250ZXh0KSk7CisJCU1lbW9yeUNvbnRleHRSZXNldChleGVjbG9ja3JlbHNpbmZv X2NvbnRleHQpOworCX0KKworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhleGVjbG9ja3JlbHNpbmZv X2NvbnRleHQpOworCWV4ZWNsb2NrcmVsc2luZm9fbGlzdF9jb3B5ID0gY29weU9iamVjdChleGVj bG9ja3JlbHNpbmZvX2xpc3QpOworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsK KworCXBsYW4tPmV4ZWNsb2NrcmVsc2luZm9fbGlzdCA9IGV4ZWNsb2NrcmVsc2luZm9fbGlzdF9j b3B5OworfQorCiAvKgogICogQ2FjaGVkUGxhbklzVmFsaWQ6IHRlc3Qgd2hldGhlciB0aGUgcmV3 cml0dGVuIHF1ZXJ5dHJlZSB3aXRoaW4gYQogICogQ2FjaGVkUGxhblNvdXJjZSBpcyBjdXJyZW50 bHkgdmFsaWQgKHRoYXQgaXMsIG5vdCBtYXJrZWQgYXMgYmVpbmcgaW4gbmVlZApAQCAtMTczNywx NyArMTgyMSwyMSBAQCBRdWVyeUxpc3RHZXRQcmltYXJ5U3RtdChMaXN0ICpzdG10cykKIAogLyoK ICAqIEFjcXVpcmVFeGVjdXRvckxvY2tzOiBhY3F1aXJlIGxvY2tzIG5lZWRlZCBmb3IgZXhlY3V0 aW9uIG9mIGEgY2FjaGVkIHBsYW47Ci0gKiBvciByZWxlYXNlIHRoZW0gaWYgYWNxdWlyZSBpcyBm YWxzZS4KKyAqCisgKiBSZXR1cm5zIGEgbGlzdCBvZiBFeGVjTG9ja1JlbHNJbmZvIG5vZGVzIGNv bnRhaW5pbmcgb25lIGVsZW1lbnQgZm9yIGVhY2gKKyAqIFBsYW5uZWRTdG10IGluIHN0bXRfbGlz dCBvciBOVUxMIGlmIHRoZSBsYXR0ZXIgaXMgdXRpbGl0eSBzdGF0ZW1lbnQgb3IgaXRzCisgKiBj b250YWluc0luaXRpYWxQcnVuaW5nIGlzIGZhbHNlLgogICovCi1zdGF0aWMgdm9pZAotQWNxdWly ZUV4ZWN1dG9yTG9ja3MoTGlzdCAqc3RtdF9saXN0LCBib29sIGFjcXVpcmUpCitzdGF0aWMgTGlz dCAqCitBY3F1aXJlRXhlY3V0b3JMb2NrcyhMaXN0ICpzdG10X2xpc3QsIFBhcmFtTGlzdEluZm8g Ym91bmRQYXJhbXMpCiB7CiAJTGlzdENlbGwgICAqbGMxOworCUxpc3QJICAgKmV4ZWNsb2NrcmVs c2luZm9fbGlzdCA9IE5JTDsKIAogCWZvcmVhY2gobGMxLCBzdG10X2xpc3QpCiAJewogCQlQbGFu bmVkU3RtdCAqcGxhbm5lZHN0bXQgPSBsZmlyc3Rfbm9kZShQbGFubmVkU3RtdCwgbGMxKTsKLQkJ TGlzdENlbGwgICAqbGMyOworCQlFeGVjTG9ja1JlbHNJbmZvICpleGVjbG9ja3JlbHNpbmZvID0g TlVMTDsKIAogCQlpZiAocGxhbm5lZHN0bXQtPmNvbW1hbmRUeXBlID09IENNRF9VVElMSVRZKQog CQl7CkBAIC0xNzYxLDI3ICsxODQ5LDEzOSBAQCBBY3F1aXJlRXhlY3V0b3JMb2NrcyhMaXN0ICpz dG10X2xpc3QsIGJvb2wgYWNxdWlyZSkKIAkJCVF1ZXJ5CSAgICpxdWVyeSA9IFV0aWxpdHlDb250 YWluc1F1ZXJ5KHBsYW5uZWRzdG10LT51dGlsaXR5U3RtdCk7CiAKIAkJCWlmIChxdWVyeSkKLQkJ CQlTY2FuUXVlcnlGb3JMb2NrcyhxdWVyeSwgYWNxdWlyZSk7Ci0JCQljb250aW51ZTsKKwkJCQlT Y2FuUXVlcnlGb3JMb2NrcyhxdWVyeSwgdHJ1ZSk7CiAJCX0KLQotCQlmb3JlYWNoKGxjMiwgcGxh bm5lZHN0bXQtPnJ0YWJsZSkKKwkJZWxzZQogCQl7Ci0JCQlSYW5nZVRibEVudHJ5ICpydGUgPSAo UmFuZ2VUYmxFbnRyeSAqKSBsZmlyc3QobGMyKTsKKwkJCS8qCisJCQkgKiBGaWd1cmUgb3V0IHRo ZSBzZXQgb2YgcmVsYXRpb25zIHRoYXQgd291bGQgbmVlZCB0byBiZSBsb2NrZWQKKwkJCSAqIGJl Zm9yZSBleGVjdXRpbmcgdGhlIHBsYW4uCisJCQkgKi8KKwkJCWlmICghcGxhbm5lZHN0bXQtPmNv bnRhaW5zSW5pdGlhbFBydW5pbmcpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBJZiB0aGUgcGxhbiBj b250YWlucyBubyBpbml0aWFsIHBydW5pbmcgc3RlcHMsIGp1c3QgbG9jaworCQkJCSAqIGFsbCB0 aGUgcmVsYXRpb25zIGZvdW5kIGluIHRoZSByYW5nZSB0YWJsZS4KKwkJCQkgKi8KKwkJCQlMaXN0 Q2VsbCAqbGM7CiAKLQkJCWlmIChydGUtPnJ0ZWtpbmQgIT0gUlRFX1JFTEFUSU9OKQotCQkJCWNv bnRpbnVlOworCQkJCWZvcmVhY2gobGMsIHBsYW5uZWRzdG10LT5ydGFibGUpCisJCQkJeworCQkJ CQlSYW5nZVRibEVudHJ5ICpydGUgPSBsZmlyc3QobGMpOworCisJCQkJCWlmIChydGUtPnJ0ZWtp bmQgIT0gUlRFX1JFTEFUSU9OKQorCQkJCQkJY29udGludWU7CisKKwkJCQkJLyoKKwkJCQkJICog QWNxdWlyZSB0aGUgYXBwcm9wcmlhdGUgdHlwZSBvZiBsb2NrIG9uIGVhY2ggcmVsYXRpb24KKwkJ CQkJICogT0lELiBOb3RlIHRoYXQgd2UgZG9uJ3QgYWN0dWFsbHkgdHJ5IHRvIG9wZW4gdGhlIHJl bCwKKwkJCQkJICogYW5kIGhlbmNlIHdpbGwgbm90IGZhaWwgaWYgaXQncyBiZWVuIGRyb3BwZWQg ZW50aXJlbHkKKwkJCQkJICogLS0tIHdlJ2xsIGp1c3QgdHJhbnNpZW50bHkgYWNxdWlyZSBhIG5v bi1jb25mbGljdGluZworCQkJCQkgKiAgbG9jay4KKwkJCQkJICovCisJCQkJCUxvY2tSZWxhdGlv bk9pZChydGUtPnJlbGlkLCBydGUtPnJlbGxvY2ttb2RlKTsKKwkJCQl9CisJCQl9CisJCQllbHNl CisJCQl7CisJCQkJaW50CQkJcnRpOworCQkJCUJpdG1hcHNldCAgKmxvY2tyZWxzOworCisJCQkJ LyoKKwkJCQkgKiBXYWxrIHRoZSBwbGFuIHRyZWUgdG8gZmluZCBvbmx5IHRoZSBtaW5pbWFsIHNl dCBvZgorCQkJCSAqIHJlbGF0aW9ucyB0byBiZSBsb2NrZWQsIGNvbnNpZGVyaW5nIHRoZSBlZmZl Y3Qgb2YgcGVyZm9ybWluZworCQkJCSAqIGluaXRpYWwgcGFydGl0aW9uIHBydW5pbmcuCisJCQkJ ICovCisJCQkJZXhlY2xvY2tyZWxzaW5mbyA9IEV4ZWN1dG9yR2V0TG9ja1JlbHMocGxhbm5lZHN0 bXQsIGJvdW5kUGFyYW1zKTsKKwkJCQlsb2NrcmVscyA9IGV4ZWNsb2NrcmVsc2luZm8tPmxvY2ty ZWxzOworCisJCQkJcnRpID0gLTE7CisJCQkJd2hpbGUgKChydGkgPSBibXNfbmV4dF9tZW1iZXIo bG9ja3JlbHMsIHJ0aSkpID49IDApCisJCQkJeworCQkJCQlSYW5nZVRibEVudHJ5ICpydGUgPSBy dF9mZXRjaChydGksIHBsYW5uZWRzdG10LT5ydGFibGUpOwogCisJCQkJCUFzc2VydChydGUtPnJ0 ZWtpbmQgPT0gUlRFX1JFTEFUSU9OKTsKKworCQkJCQkvKiBTZWUgdGhlIGNvbW1lbnQgYWJvdmUu ICovCisJCQkJCUxvY2tSZWxhdGlvbk9pZChydGUtPnJlbGlkLCBydGUtPnJlbGxvY2ttb2RlKTsK KwkJCQl9CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBSZW1lbWJlciBFeGVjTG9ja1JlbHNJbmZv IGZvciBsYXRlciBhZGRpbmcgdG8gdGhlIFF1ZXJ5RGVzYyB0aGF0CisJCSAqIHdpbGwgYmUgcGFz c2VkIHRvIHRoZSBleGVjdXRvciB3aGVuIGV4ZWN1dGluZyB0aGlzIHBsYW4uICBNYXkgYmUKKwkJ ICogTlVMTCwgYnV0IG11c3Qga2VlcCB0aGUgbGlzdCB0aGUgc2FtZSBsZW5ndGggYXMgc3RtdF9s aXN0LgorCQkgKi8KKwkJZXhlY2xvY2tyZWxzaW5mb19saXN0ID0gbGFwcGVuZChleGVjbG9ja3Jl bHNpbmZvX2xpc3QsCisJCQkJCQkJCQkJZXhlY2xvY2tyZWxzaW5mbyk7CisJfQorCisJcmV0dXJu IGV4ZWNsb2NrcmVsc2luZm9fbGlzdDsKK30KKworLyoKKyAqIFJlbGVhc2VFeGVjdXRvckxvY2tz CisgKiAJCVJlbGVhc2UgbG9ja3MgdGhhdCB3b3VsZCd2ZSBiZWVuIGFjcXVpcmVkIGJ5IGFuIGVh cmxpZXIgY2FsbCB0bworICogCQlBY3F1aXJlRXhlY3V0b3JMb2NrcygpCisgKi8KK3N0YXRpYyB2 b2lkCitSZWxlYXNlRXhlY3V0b3JMb2NrcyhMaXN0ICpzdG10X2xpc3QsIExpc3QgKmV4ZWNsb2Nr cmVsc2luZm9fbGlzdCkKK3sKKwlMaXN0Q2VsbCAgICpsYzEsCisJCQkgICAqbGMyOworCisJZm9y Ym90aChsYzEsIHN0bXRfbGlzdCwgbGMyLCBleGVjbG9ja3JlbHNpbmZvX2xpc3QpCisJeworCQlQ bGFubmVkU3RtdCAqcGxhbm5lZHN0bXQgPSBsZmlyc3Rfbm9kZShQbGFubmVkU3RtdCwgbGMxKTsK KwkJRXhlY0xvY2tSZWxzSW5mbyAqZXhlY2xvY2tyZWxzaW5mbyA9IGxmaXJzdF9ub2RlKEV4ZWNM b2NrUmVsc0luZm8sIGxjMik7CisKKwkJaWYgKHBsYW5uZWRzdG10LT5jb21tYW5kVHlwZSA9PSBD TURfVVRJTElUWSkKKwkJewogCQkJLyoKLQkJCSAqIEFjcXVpcmUgdGhlIGFwcHJvcHJpYXRlIHR5 cGUgb2YgbG9jayBvbiBlYWNoIHJlbGF0aW9uIE9JRC4gTm90ZQotCQkJICogdGhhdCB3ZSBkb24n dCBhY3R1YWxseSB0cnkgdG8gb3BlbiB0aGUgcmVsLCBhbmQgaGVuY2Ugd2lsbCBub3QKLQkJCSAq IGZhaWwgaWYgaXQncyBiZWVuIGRyb3BwZWQgZW50aXJlbHkgLS0tIHdlJ2xsIGp1c3QgdHJhbnNp ZW50bHkKLQkJCSAqIGFjcXVpcmUgYSBub24tY29uZmxpY3RpbmcgbG9jay4KKwkJCSAqIElnbm9y ZSB1dGlsaXR5IHN0YXRlbWVudHMsIGV4Y2VwdCB0aG9zZSAoc3VjaCBhcyBFWFBMQUlOKSB0aGF0 CisJCQkgKiBjb250YWluIGEgcGFyc2VkLWJ1dC1ub3QtcGxhbm5lZCBxdWVyeS4gIE5vdGU6IGl0 J3Mgb2theSB0byB1c2UKKwkJCSAqIFNjYW5RdWVyeUZvckxvY2tzLCBldmVuIHRob3VnaCB0aGUg cXVlcnkgaGFzbid0IGJlZW4gdGhyb3VnaAorCQkJICogcnVsZSByZXdyaXRpbmcsIGJlY2F1c2Ug cmV3cml0aW5nIGRvZXNuJ3QgY2hhbmdlIHRoZSBxdWVyeQorCQkJICogcmVwcmVzZW50YXRpb24u CiAJCQkgKi8KLQkJCWlmIChhY3F1aXJlKQotCQkJCUxvY2tSZWxhdGlvbk9pZChydGUtPnJlbGlk LCBydGUtPnJlbGxvY2ttb2RlKTsKKwkJCVF1ZXJ5CSAgICpxdWVyeSA9IFV0aWxpdHlDb250YWlu c1F1ZXJ5KHBsYW5uZWRzdG10LT51dGlsaXR5U3RtdCk7CisKKwkJCWlmIChxdWVyeSkKKwkJCQlT Y2FuUXVlcnlGb3JMb2NrcyhxdWVyeSwgZmFsc2UpOworCQl9CisJCWVsc2UKKwkJeworCQkJaWYg KGV4ZWNsb2NrcmVsc2luZm8gPT0gTlVMTCkKKwkJCXsKKwkJCQlMaXN0Q2VsbCAqbGM7CisKKwkJ CQlmb3JlYWNoKGxjLCBwbGFubmVkc3RtdC0+cnRhYmxlKQorCQkJCXsKKwkJCQkJUmFuZ2VUYmxF bnRyeSAqcnRlID0gbGZpcnN0KGxjKTsKKworCQkJCQlpZiAocnRlLT5ydGVraW5kICE9IFJURV9S RUxBVElPTikKKwkJCQkJCWNvbnRpbnVlOworCisJCQkJCUxvY2tSZWxhdGlvbk9pZChydGUtPnJl bGlkLCBydGUtPnJlbGxvY2ttb2RlKTsKKwkJCQl9CisJCQl9CiAJCQllbHNlCi0JCQkJVW5sb2Nr UmVsYXRpb25PaWQocnRlLT5yZWxpZCwgcnRlLT5yZWxsb2NrbW9kZSk7CisJCQl7CisJCQkJaW50 CQkJcnRpOworCQkJCUJpdG1hcHNldCAgKmxvY2tyZWxzOworCisJCQkJbG9ja3JlbHMgPSBleGVj bG9ja3JlbHNpbmZvLT5sb2NrcmVsczsKKwkJCQlydGkgPSAtMTsKKwkJCQl3aGlsZSAoKHJ0aSA9 IGJtc19uZXh0X21lbWJlcihsb2NrcmVscywgcnRpKSkgPj0gMCkKKwkJCQl7CisJCQkJCVJhbmdl VGJsRW50cnkgKnJ0ZSA9IHJ0X2ZldGNoKHJ0aSwgcGxhbm5lZHN0bXQtPnJ0YWJsZSk7CisKKwkJ CQkJQXNzZXJ0KHJ0ZS0+cnRla2luZCA9PSBSVEVfUkVMQVRJT04pOworCisJCQkJCVVubG9ja1Jl bGF0aW9uT2lkKHJ0ZS0+cmVsaWQsIHJ0ZS0+cmVsbG9ja21vZGUpOworCQkJCX0KKwkJCX0KIAkJ fQogCX0KIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvcG9ydGFsbWVtLmMg Yi9zcmMvYmFja2VuZC91dGlscy9tbWdyL3BvcnRhbG1lbS5jCmluZGV4IGQ1NDlmNjZkNGEuLjg5 NmY1MWJlMDggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvcG9ydGFsbWVtLmMK KysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9wb3J0YWxtZW0uYwpAQCAtMjg1LDYgKzI4NSw3 IEBAIFBvcnRhbERlZmluZVF1ZXJ5KFBvcnRhbCBwb3J0YWwsCiAJCQkJICBjb25zdCBjaGFyICpz b3VyY2VUZXh0LAogCQkJCSAgQ29tbWFuZFRhZyBjb21tYW5kVGFnLAogCQkJCSAgTGlzdCAqc3Rt dHMsCisJCQkJICBMaXN0ICpleGVjbG9ja3JlbHNpbmZvcywKIAkJCQkgIENhY2hlZFBsYW4gKmNw bGFuKQogewogCUFzc2VydEFyZyhQb3J0YWxJc1ZhbGlkKHBvcnRhbCkpOwpAQCAtMjk5LDYgKzMw MCw3IEBAIFBvcnRhbERlZmluZVF1ZXJ5KFBvcnRhbCBwb3J0YWwsCiAJcG9ydGFsLT5xYy5ucHJv Y2Vzc2VkID0gMDsKIAlwb3J0YWwtPmNvbW1hbmRUYWcgPSBjb21tYW5kVGFnOwogCXBvcnRhbC0+ c3RtdHMgPSBzdG10czsKKwlwb3J0YWwtPmV4ZWNsb2NrcmVsc2luZm9zID0gZXhlY2xvY2tyZWxz aW5mb3M7CiAJcG9ydGFsLT5jcGxhbiA9IGNwbGFuOwogCXBvcnRhbC0+c3RhdHVzID0gUE9SVEFM X0RFRklORUQ7CiB9CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluLmgg Yi9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluLmgKaW5kZXggNjY2OTc3ZmIxZi4uZmVmNzVi YTE0NyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXhwbGFpbi5oCisrKyBiL3Ny Yy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW4uaApAQCAtODcsNyArODcsOCBAQCBleHRlcm4gdm9p ZCBFeHBsYWluT25lVXRpbGl0eShOb2RlICp1dGlsaXR5U3RtdCwgSW50b0NsYXVzZSAqaW50bywK IAkJCQkJCQkgIEV4cGxhaW5TdGF0ZSAqZXMsIGNvbnN0IGNoYXIgKnF1ZXJ5U3RyaW5nLAogCQkJ CQkJCSAgUGFyYW1MaXN0SW5mbyBwYXJhbXMsIFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52KTsK IAotZXh0ZXJuIHZvaWQgRXhwbGFpbk9uZVBsYW4oUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LCBJ bnRvQ2xhdXNlICppbnRvLAorZXh0ZXJuIHZvaWQgRXhwbGFpbk9uZVBsYW4oUGxhbm5lZFN0bXQg KnBsYW5uZWRzdG10LCBFeGVjTG9ja1JlbHNJbmZvICpleGVjbG9ja3JlbHNpbmZvLAorCQkJCQkJ ICAgSW50b0NsYXVzZSAqaW50bywKIAkJCQkJCSAgIEV4cGxhaW5TdGF0ZSAqZXMsIGNvbnN0IGNo YXIgKnF1ZXJ5U3RyaW5nLAogCQkJCQkJICAgUGFyYW1MaXN0SW5mbyBwYXJhbXMsIFF1ZXJ5RW52 aXJvbm1lbnQgKnF1ZXJ5RW52LAogCQkJCQkJICAgY29uc3QgaW5zdHJfdGltZSAqcGxhbmR1cmF0 aW9uLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oIGIv c3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oCmluZGV4IGZkNTczNWE5NDYuLmRl ZDE5YjhjYmIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24u aAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjUGFydGl0aW9uLmgKQEAgLTEyNCw0ICsx MjQsNiBAQCBleHRlcm4gUGFydGl0aW9uUHJ1bmVTdGF0ZSAqRXhlY0luaXRQYXJ0aXRpb25QcnVu aW5nKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLAogCQkJCQkJIFBhcnRpdGlvblBydW5lSW5mbyAqcHJ1 bmVpbmZvLAogCQkJCQkJIEJpdG1hcHNldCAqKmluaXRpYWxseV92YWxpZF9zdWJwbGFucyk7CiBl eHRlcm4gQml0bWFwc2V0ICpFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMoUGFydGl0aW9uUHJ1bmVT dGF0ZSAqcHJ1bmVzdGF0ZSk7CitleHRlcm4gQml0bWFwc2V0ICpFeGVjR2V0TG9ja1JlbHNEb0lu aXRpYWxQcnVuaW5nKFBsYW4gKnBsYW4sIEV4ZWNHZXRMb2NrUmVsc0NvbnRleHQgKmNvbnRleHQs CisJCQkJCQkJCVBhcnRpdGlvblBydW5lSW5mbyAqcHJ1bmVpbmZvKTsKICNlbmRpZgkJCQkJCQkv KiBFWEVDUEFSVElUSU9OX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4 ZWNkZXNjLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjZGVzYy5oCmluZGV4IGU3OWUyYzAw MWYuLjQzMzg0NjM0NzkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNkZXNj LmgKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY2Rlc2MuaApAQCAtMzUsNiArMzUsNyBA QCB0eXBlZGVmIHN0cnVjdCBRdWVyeURlc2MKIAkvKiBUaGVzZSBmaWVsZHMgYXJlIHByb3ZpZGVk IGJ5IENyZWF0ZVF1ZXJ5RGVzYyAqLwogCUNtZFR5cGUJCW9wZXJhdGlvbjsJCS8qIENNRF9TRUxF Q1QsIENNRF9VUERBVEUsIGV0Yy4gKi8KIAlQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQ7CS8qIHBs YW5uZXIncyBvdXRwdXQgKGNvdWxkIGJlIHV0aWxpdHksIHRvbykgKi8KKwlFeGVjTG9ja1JlbHNJ bmZvICpleGVjbG9ja3JlbHNpbmZvOwkvKiBFeGVjdXRvckdldExvY2tSZWxzKCkncyBvdXRwdXQg Z2l2ZW4gcGxhbm5lZHN0bXQgKi8KIAljb25zdCBjaGFyICpzb3VyY2VUZXh0OwkJLyogc291cmNl IHRleHQgb2YgdGhlIHF1ZXJ5ICovCiAJU25hcHNob3QJc25hcHNob3Q7CQkvKiBzbmFwc2hvdCB0 byB1c2UgZm9yIHF1ZXJ5ICovCiAJU25hcHNob3QJY3Jvc3NjaGVja19zbmFwc2hvdDsJLyogY3Jv c3NjaGVjayBmb3IgUkkgdXBkYXRlL2RlbGV0ZSAqLwpAQCAtNTcsNiArNTgsNyBAQCB0eXBlZGVm IHN0cnVjdCBRdWVyeURlc2MKIAogLyogaW4gcHF1ZXJ5LmMgKi8KIGV4dGVybiBRdWVyeURlc2Mg KkNyZWF0ZVF1ZXJ5RGVzYyhQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsCisJCQkJCQkJCSAgRXhl Y0xvY2tSZWxzSW5mbyAqZXhlY2xvY2tyZWxzaW5mbywKIAkJCQkJCQkJICBjb25zdCBjaGFyICpz b3VyY2VUZXh0LAogCQkJCQkJCQkgIFNuYXBzaG90IHNuYXBzaG90LAogCQkJCQkJCQkgIFNuYXBz aG90IGNyb3NzY2hlY2tfc25hcHNob3QsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRv ci9leGVjdXRvci5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaAppbmRleCA4Mjky NWI0YjYzLi41Y2Y0MTRjYzExIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVj dXRvci5oCisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgKQEAgLTE4NSw2ICsx ODUsOCBAQCBFeGVjR2V0SnVua0F0dHJpYnV0ZShUdXBsZVRhYmxlU2xvdCAqc2xvdCwgQXR0ck51 bWJlciBhdHRubywgYm9vbCAqaXNOdWxsKQogLyoKICAqIHByb3RvdHlwZXMgZnJvbSBmdW5jdGlv bnMgaW4gZXhlY01haW4uYwogICovCitleHRlcm4gRXhlY0xvY2tSZWxzSW5mbyAqRXhlY3V0b3JH ZXRMb2NrUmVscyhQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsIFBhcmFtTGlzdEluZm8gcGFyYW1z KTsKK2V4dGVybiBib29sIEV4ZWNHZXRMb2NrUmVscyhQbGFuICpub2RlLCBFeGVjR2V0TG9ja1Jl bHNDb250ZXh0ICpjb250ZXh0KTsKIGV4dGVybiB2b2lkIEV4ZWN1dG9yU3RhcnQoUXVlcnlEZXNj ICpxdWVyeURlc2MsIGludCBlZmxhZ3MpOwogZXh0ZXJuIHZvaWQgc3RhbmRhcmRfRXhlY3V0b3JT dGFydChRdWVyeURlc2MgKnF1ZXJ5RGVzYywgaW50IGVmbGFncyk7CiBleHRlcm4gdm9pZCBFeGVj dXRvclJ1bihRdWVyeURlc2MgKnF1ZXJ5RGVzYywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4 ZWN1dG9yL25vZGVBcHBlbmQuaCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL25vZGVBcHBlbmQuaApp bmRleCA0Y2I3OGVlNWI2Li5iNTM1MzVjMmE0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9leGVj dXRvci9ub2RlQXBwZW5kLmgKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZUFwcGVuZC5o CkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL3BhcmFsbGVsLmgiCiAjaW5jbHVk ZSAibm9kZXMvZXhlY25vZGVzLmgiCiAKK2V4dGVybiBib29sIEV4ZWNHZXRBcHBlbmRMb2NrUmVs cyhBcHBlbmQgKm5vZGUsIEV4ZWNHZXRMb2NrUmVsc0NvbnRleHQgKmNvbnRleHQpOwogZXh0ZXJu IEFwcGVuZFN0YXRlICpFeGVjSW5pdEFwcGVuZChBcHBlbmQgKm5vZGUsIEVTdGF0ZSAqZXN0YXRl LCBpbnQgZWZsYWdzKTsKIGV4dGVybiB2b2lkIEV4ZWNFbmRBcHBlbmQoQXBwZW5kU3RhdGUgKm5v ZGUpOwogZXh0ZXJuIHZvaWQgRXhlY1JlU2NhbkFwcGVuZChBcHBlbmRTdGF0ZSAqbm9kZSk7CmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuaCBiL3NyYy9p bmNsdWRlL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5oCmluZGV4IDk3ZmUzYjA2NjUuLjhlYjRl OWRmOTMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5o CisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5oCkBAIC0xNiw2ICsx Niw3IEBACiAKICNpbmNsdWRlICJub2Rlcy9leGVjbm9kZXMuaCIKIAorZXh0ZXJuIGJvb2wgRXhl Y0dldE1lcmdlQXBwZW5kTG9ja1JlbHMoTWVyZ2VBcHBlbmQgKm5vZGUsIEV4ZWNHZXRMb2NrUmVs c0NvbnRleHQgKmNvbnRleHQpOwogZXh0ZXJuIE1lcmdlQXBwZW5kU3RhdGUgKkV4ZWNJbml0TWVy Z2VBcHBlbmQoTWVyZ2VBcHBlbmQgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKTsK IGV4dGVybiB2b2lkIEV4ZWNFbmRNZXJnZUFwcGVuZChNZXJnZUFwcGVuZFN0YXRlICpub2RlKTsK IGV4dGVybiB2b2lkIEV4ZWNSZVNjYW5NZXJnZUFwcGVuZChNZXJnZUFwcGVuZFN0YXRlICpub2Rl KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5oIGIv c3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmgKaW5kZXggMWQyMjViYzg4ZC4u NTAwNjQ5OTA4OCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZU1vZGlmeVRh YmxlLmgKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmgKQEAgLTE5 LDYgKzE5LDcgQEAgZXh0ZXJuIHZvaWQgRXhlY0NvbXB1dGVTdG9yZWRHZW5lcmF0ZWQoUmVzdWx0 UmVsSW5mbyAqcmVzdWx0UmVsSW5mbywKIAkJCQkJCQkJCSAgIEVTdGF0ZSAqZXN0YXRlLCBUdXBs ZVRhYmxlU2xvdCAqc2xvdCwKIAkJCQkJCQkJCSAgIENtZFR5cGUgY21kdHlwZSk7CiAKK2V4dGVy biBib29sIEV4ZWNHZXRNb2RpZnlUYWJsZUxvY2tSZWxzKE1vZGlmeVRhYmxlICpwbGFuLCBFeGVj R2V0TG9ja1JlbHNDb250ZXh0ICpjb250ZXh0KTsKIGV4dGVybiBNb2RpZnlUYWJsZVN0YXRlICpF eGVjSW5pdE1vZGlmeVRhYmxlKE1vZGlmeVRhYmxlICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50 IGVmbGFncyk7CiBleHRlcm4gdm9pZCBFeGVjRW5kTW9kaWZ5VGFibGUoTW9kaWZ5VGFibGVTdGF0 ZSAqbm9kZSk7CiBleHRlcm4gdm9pZCBFeGVjUmVTY2FuTW9kaWZ5VGFibGUoTW9kaWZ5VGFibGVT dGF0ZSAqbm9kZSk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBi L3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCmluZGV4IDQ0ZGQ3M2ZjODAuLjEyNTNmZGIw ZWQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCisrKyBiL3NyYy9p bmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCkBAIC01NzYsNiArNTc2LDcgQEAgdHlwZWRlZiBzdHJ1 Y3QgRVN0YXRlCiAJc3RydWN0IEV4ZWNSb3dNYXJrICoqZXNfcm93bWFya3M7CS8qIEFycmF5IG9m IHBlci1yYW5nZS10YWJsZS1lbnRyeQogCQkJCQkJCQkJCSAqIEV4ZWNSb3dNYXJrcywgb3IgTlVM TCBpZiBub25lICovCiAJUGxhbm5lZFN0bXQgKmVzX3BsYW5uZWRzdG10OwkvKiBsaW5rIHRvIHRv cCBvZiBwbGFuIHRyZWUgKi8KKwlzdHJ1Y3QgRXhlY0xvY2tSZWxzSW5mbyAqZXNfZXhlY2xvY2ty ZWxzaW5mbzsgLyogUXVlcnlEZXNjLmV4ZWNsb2NrcmVsc2luZm8gKi8KIAljb25zdCBjaGFyICpl c19zb3VyY2VUZXh0OwkvKiBTb3VyY2UgdGV4dCBmcm9tIFF1ZXJ5RGVzYyAqLwogCiAJSnVua0Zp bHRlciAqZXNfanVua0ZpbHRlcjsJLyogdG9wLWxldmVsIGp1bmsgZmlsdGVyLCBpZiBhbnkgKi8K QEAgLTk2NCw2ICs5NjUsMTAxIEBAIHR5cGVkZWYgc3RydWN0IERvbWFpbkNvbnN0cmFpbnRTdGF0 ZQogICovCiB0eXBlZGVmIFR1cGxlVGFibGVTbG90ICooKkV4ZWNQcm9jTm9kZU10ZCkgKHN0cnVj dCBQbGFuU3RhdGUgKnBzdGF0ZSk7CiAKKy8qLS0tLS0tLS0tLS0tLS0tLQorICogRXhlY0xvY2tS ZWxzSW5mbworICoKKyAqIFJlc3VsdCBvZiBwZXJmb3JtaW5nIEV4ZWN1dG9yR2V0TG9ja1JlbHMo KSBmb3IgYSBnaXZlbiBQbGFubmVkU3RtdAorICovCit0eXBlZGVmIHN0cnVjdCBFeGVjTG9ja1Jl bHNJbmZvCit7CisJTm9kZVRhZwkJdHlwZTsKKworCS8qCisJICogUmVsYXRpb25zIHRoYXQgbXVz dCBiZSBsb2NrZWQgdG8gZXhlY3V0ZSB0aGUgcGxhbiB0cmVlIGNvbnRhaW5lZCBpbgorCSAqIHRo ZSBQbGFubmVkU3RtdC4KKwkgKi8KKwlCaXRtYXBzZXQgICpsb2NrcmVsczsKKworCS8qIFBsYW5u ZWRTdG10Lm51bVBsYW5Ob2RlcyAqLworCWludAkJCW51bVBsYW5Ob2RlczsKKworCS8qCisJICog TGlzdCBvZiBQbGFuSW5pdFBydW5pbmdPdXRwdXQsIGVhY2ggcmVwcmVzZW50aW5nIHRoZSBvdXRw dXQgb2YKKwkgKiBwZXJmb3JtaW5nIGluaXRpYWwgcHJ1bmluZyBvbiBhIGdpdmVuIHBsYW4gbm9k ZSwgZm9yIGFsbCBub2RlcyBpbiB0aGUKKwkgKiBwbGFuIHRyZWUgdGhhdCBoYXZlIGJlZW4gbWFy a2VkIGFzIG5lZWRpbmcgaW5pdGlhbCBwcnVuaW5nLgorCSAqCisJICogJ2lwb0luZGV4ZXMnIGlz IGFuIGFycmF5IG9mICdudW1QbGFuTm9kZXMnIGVsZW1lbnRzLCBpbmRleGVkIHdpdGgKKwkgKiBw bGFuX25vZGVfaWQgb2YgdGhlIGluZGl2aWR1YWwgbm9kZXMgaW4gdGhlIHBsYW4gdHJlZSwgZWFj aCBhIDEtYmFzZWQKKwkgKiBpbmRleCBpbnRvICdpbml0UHJ1bmluZ091dHB1dHMnIGxpc3QgZm9y IGEgZ2l2ZW4gcGxhbiBub2RlLiAgMCBtZWFucworCSAqIHRoYXQgYSBnaXZlbiBwbGFuIG5vZGUg aGFzIG5vIGVudHJ5IGluIHRoZSBsaXN0IGJlY2F1c2Ugb2Ygbm90IG5lZWRpbmcKKwkgKiBhbnkg aW5pdGlhbCBwcnVuaW5nIGRvbmUgb24gaXQuCisJICovCisJTGlzdAkgICAqaW5pdFBydW5pbmdP dXRwdXRzOworCWludAkJICAgKmlwb0luZGV4ZXM7Cit9IEV4ZWNMb2NrUmVsc0luZm87CisKKy8q LS0tLS0tLS0tLS0tLS0tLQorICogRXhlY0dldExvY2tSZWxzQ29udGV4dAorICoKKyAqIEluZm9y bWF0aW9uIHBlcnRhaW5pbmcgdG8gRXhlY3V0b3JHZXRMb2NrUmVscygpIGludm9jYXRpb24gZm9y IGEgZ2l2ZW4KKyAqIHBsYW4uCisgKi8KK3R5cGVkZWYgc3RydWN0IEV4ZWNHZXRMb2NrUmVsc0Nv bnRleHQKK3sKKwlOb2RlVGFnCQl0eXBlOworCisJUGxhbm5lZFN0bXQJICAgKnN0bXQ7CQkvKiB0 YXJnZXQgcGxhbiAqLworCVBhcmFtTGlzdEluZm8JcGFyYW1zOwkJLyogRVhURVJOIHBhcmFtZXRl cnMgYXZhaWxhYmxlIGZvciBwcnVuaW5nICovCisKKwkvKiBPdXRwdXQgcGFyYW1ldGVycyBmb3Ig RXhlY0dldExvY2tSZWxzIGFuZCBpdHMgc3Vicm91dGluZXMuICovCisJQml0bWFwc2V0CSAgICps b2NrcmVsczsKKworCS8qIFNlZSB0aGUgb21tZW50IGluIHRoZSBkZWZpbml0aW9uIG9mIEV4ZWNM b2NrUmVsc0luZm8gc3RydWN0LiAqLworCUxpc3QJCSAgICppbml0UHJ1bmluZ091dHB1dHM7CisJ aW50CQkJICAgKmlwb0luZGV4ZXM7Cit9IEV4ZWNHZXRMb2NrUmVsc0NvbnRleHQ7CisKKy8qCisg KiBBcHBlbmRzIHRoZSBwcm92aWRlZCBQbGFuSW5pdFBydW5pbmdPdXRwdXQgdG8KKyAqIEV4ZWNH ZXRMb2NrUmVsc0NvbnRleHQuaW5pdFBydW5pbmdPdXRwdXQKKyAqLworI2RlZmluZSBFeGVjU3Rv cmVQbGFuSW5pdFBydW5pbmdPdXRwdXQoY3h0LCBpbml0UHJ1bmluZ091dHB1dCwgcGxhbm5vZGUp IFwKKwlkbyB7IFwKKwkJKGN4dCktPmluaXRQcnVuaW5nT3V0cHV0cyA9IGxhcHBlbmQoKGN4dCkt PmluaXRQcnVuaW5nT3V0cHV0cywgaW5pdFBydW5pbmdPdXRwdXQpOyBcCisJCShjeHQpLT5pcG9J bmRleGVzWyhwbGFubm9kZSktPnBsYW5fbm9kZV9pZF0gPSBsaXN0X2xlbmd0aCgoY3h0KS0+aW5p dFBydW5pbmdPdXRwdXRzKTsgXAorCX0gd2hpbGUgKDApCisKKy8qCisgKiBGaW5kcyB0aGUgUGxh bkluaXRQcnVuaW5nT3V0cHV0IGZvciBhIGdpdmVuIFBsYW4gbm9kZSBpbgorICogRXhlY0xvY2tS ZWxzSW5mby5pbml0UHJ1bmluZ091dHB1dHMuCisgKi8KKyNkZWZpbmUgRXhlY0ZldGNoUGxhbklu aXRQcnVuaW5nT3V0cHV0KGV4ZWNsb2NrcmVsc2luZm8sIHBsYW5ub2RlKSBcCisJCSgoKGV4ZWNs b2NrcmVsc2luZm8pICE9IE5VTEwgJiYgKGV4ZWNsb2NrcmVsc2luZm8pLT5pbml0UHJ1bmluZ091 dHB1dHMgIT0gTklMKSA/IFwKKwkJIGxpc3RfbnRoKChleGVjbG9ja3JlbHNpbmZvKS0+aW5pdFBy dW5pbmdPdXRwdXRzLCBcCisJCQkJICAoZXhlY2xvY2tyZWxzaW5mbyktPmlwb0luZGV4ZXNbKHBs YW5ub2RlKS0+cGxhbl9ub2RlX2lkXSAtIDEpIDogTlVMTCkKKworLyogLS0tLS0tLS0tLS0tLS0t CisgKiBQbGFuSW5pdFBydW5pbmdPdXRwdXQKKyAqCisgKiBOb2RlIHRvIHJlbWVtYmVyIHRoZSBy ZXN1bHQgb2YgcGVyZm9ybWluZyBpbml0aWFsIHBhcnRpdGlvbiBwcnVuaW5nIHN0ZXBzCisgKiBk dXJpbmcgRXhlY3V0b3JHZXRMb2NrUmVscygpIG9uIG5vZGVzIHRoYXQgc3VwcG9ydCBwcnVuaW5n LgorICoKKyAqIEV4ZWNMb2NrUmVsc0RvSW5pdFBydW5pbmcoKSwgd2hpY2ggcnVucyBkdXJpbmcg RXhlY3V0b3JHZXRMb2NrUmVscygpLAorICogY3JlYXRlcyBpdCBhbmQgc3RvcmVzIGl0IGluIHRo ZSBjb3JyZXNwb25kaW5nIEV4ZWNMb2NrUmVsc0luZm8uCisgKgorICogRXhlY0luaXRQYXJ0aXRp b25QcnVuaW5nKCksIHdoaWNoIHJ1bnMgZHVyaW5nIEV4ZWN1b3JTdGFydCgpLCBmZXRjaGVzIGl0 CisgKiBmcm9tIHRoZSBFU3RhdGUncyBFeGVjTG9ja1JlbHNJbmZvIChpZiBhbnkpIGFuZCB1c2Vz IHRoZSB2YWx1ZSBvZgorICogaW5pdGlhbGx5X3ZhbGlkX3N1YnBsYW5zIGNvbnRhaW5lZCBpbiBp dCBhcy1pcyB0byBzZWxlY3QgdGhlIHN1YnBsYW5zIHRvIGJlCisgKiBpbml0aWFsaXplZCBmb3Ig ZXhlY3V0aW9uLCBpbnN0ZWFkIG9mIHJlLWV2YWx1YXRpbmcgdGhhdCBieSBwZXJmb3JtaW5nCisg KiBpbml0aWFsIHBydW5pbmcgYWdhaW4uCisgKi8KK3R5cGVkZWYgc3RydWN0IFBsYW5Jbml0UHJ1 bmluZ091dHB1dAoreworCU5vZGVUYWcJCXR5cGU7CisKKwlCaXRtYXBzZXQgICppbml0aWFsbHlf dmFsaWRfc3VicGxhbnM7Cit9IFBsYW5Jbml0UHJ1bmluZ091dHB1dDsKKwogLyogLS0tLS0tLS0t LS0tLS0tLQogICoJCVBsYW5TdGF0ZSBub2RlCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv bm9kZXMvbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL25vZGVzLmgKaW5kZXggNWQwNzVmMGMz NC4uZDM2NWZjNDQwMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMuaAorKysg Yi9zcmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5oCkBAIC05Niw2ICs5NiwxMSBAQCB0eXBlZGVmIGVu dW0gTm9kZVRhZwogCVRfUGFydGl0aW9uUHJ1bmVTdGVwQ29tYmluZSwKIAlUX1BsYW5JbnZhbEl0 ZW0sCiAKKwkvKiBUQUdTIEZPUiBFWEVDVVRPUiBQUkVQIE5PREVTIChleGVjbm9kZXMuaCkgKi8K KwlUX0V4ZWNHZXRMb2NrUmVsc0NvbnRleHQsCisJVF9FeGVjTG9ja1JlbHNJbmZvLAorCVRfUGxh bkluaXRQcnVuaW5nT3V0cHV0LAorCiAJLyoKIAkgKiBUQUdTIEZPUiBQTEFOIFNUQVRFIE5PREVT IChleGVjbm9kZXMuaCkKIAkgKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5v ZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAppbmRleCA1MzI3ZDliYThiLi4w MTk3MTljMWE0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAorKysg Yi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaApAQCAtMTI5LDYgKzEyOSwxMCBAQCB0eXBl ZGVmIHN0cnVjdCBQbGFubmVyR2xvYmFsCiAKIAljaGFyCQltYXhQYXJhbGxlbEhhemFyZDsJLyog d29yc3QgUFJPUEFSQUxMRUwgaGF6YXJkIGxldmVsICovCiAKKwlib29sCQljb250YWluc0luaXRp YWxQcnVuaW5nOwkvKiBEbyBzb21lIFBsYW4gbm9kZXMgaW4gdGhlIHRyZWUKKwkJCQkJCQkJCQkg KiBoYXZlIGluaXRpYWwgKHByZS1leGVjKSBwcnVuaW5nCisJCQkJCQkJCQkJICogc3RlcHM/ICov CisKIAlQYXJ0aXRpb25EaXJlY3RvcnkgcGFydGl0aW9uX2RpcmVjdG9yeTsgLyogcGFydGl0aW9u IGRlc2NyaXB0b3JzICovCiAKIAlCaXRtYXBzZXQgKmVsaWRlZEFwcGVuZFBhcnRlZFJlbHM7CS8q IENvbWJpbmVkIHBhcnRpdGlvbmVkX3JlbHMgb2YgYWxsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9ub2Rlcy9wbGFubm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCmluZGV4 IGJkODdjMzVkNmMuLmJmZGI1YmJmMjggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3Bs YW5ub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCkBAIC01OSwxMCAr NTksMTYgQEAgdHlwZWRlZiBzdHJ1Y3QgUGxhbm5lZFN0bXQKIAogCWJvb2wJCXBhcmFsbGVsTW9k ZU5lZWRlZDsgLyogcGFyYWxsZWwgbW9kZSByZXF1aXJlZCB0byBleGVjdXRlPyAqLwogCisJYm9v bAkJY29udGFpbnNJbml0aWFsUHJ1bmluZzsJLyogRG8gc29tZSBQbGFuIG5vZGVzIGluIHRoZSB0 cmVlCisJCQkJCQkJCQkJICogaGF2ZSBpbml0aWFsIChwcmUtZXhlYykgcHJ1bmluZworCQkJCQkJ CQkJCSAqIHN0ZXBzPyAqLworCiAJaW50CQkJaml0RmxhZ3M7CQkvKiB3aGljaCBmb3JtcyBvZiBK SVQgc2hvdWxkIGJlIHBlcmZvcm1lZCAqLwogCiAJc3RydWN0IFBsYW4gKnBsYW5UcmVlOwkJLyog dHJlZSBvZiBQbGFuIG5vZGVzICovCiAKKwlpbnQJCQludW1QbGFuTm9kZXM7CS8qIG51bWJlciBv ZiBub2RlcyBpbiBwbGFuVHJlZSAqLworCiAJTGlzdAkgICAqcnRhYmxlOwkJCS8qIGxpc3Qgb2Yg UmFuZ2VUYmxFbnRyeSBub2RlcyAqLwogCiAJLyogcnRhYmxlIGluZGV4ZXMgb2YgdGFyZ2V0IHJl bGF0aW9ucyBmb3IgSU5TRVJUL1VQREFURS9ERUxFVEUgKi8KQEAgLTExODksNiArMTE5NSwxMyBA QCB0eXBlZGVmIHN0cnVjdCBQbGFuUm93TWFyawogICogcHJ1bmVfaW5mb3MJCQlMaXN0IG9mIExp c3RzIGNvbnRhaW5pbmcgUGFydGl0aW9uZWRSZWxQcnVuZUluZm8gbm9kZXMsCiAgKgkJCQkJCW9u ZSBzdWJsaXN0IHBlciBydW4tdGltZS1wcnVuYWJsZSBwYXJ0aXRpb24gaGllcmFyY2h5CiAgKgkJ CQkJCWFwcGVhcmluZyBpbiB0aGUgcGFyZW50IHBsYW4gbm9kZSdzIHN1YnBsYW5zLgorICoKKyAq IG5lZWRzX2luaXRfcHJ1bmluZwlEb2VzIGFueSBvZiB0aGUgUGFydGl0aW9uZWRSZWxQcnVuZUlu Zm9zIGluCisgKgkJCQkJCXBydW5lX2luZm9zIGhhdmUgaXRzIGluaXRpYWxfcHJ1bmluZ19zdGVw cyBzZXQ/CisgKgorICogbmVlZHNfZXhlY19wcnVuaW5nCURvZXMgYW55IG9mIHRoZSBQYXJ0aXRp b25lZFJlbFBydW5lSW5mb3MgaW4KKyAqCQkJCQkJcHJ1bmVfaW5mb3MgaGF2ZSBpdHMgZXhlY19w cnVuaW5nX3N0ZXBzIHNldD8KKyAqCiAgKiBvdGhlcl9zdWJwbGFucwkJSW5kZXhlcyBvZiBhbnkg c3VicGxhbnMgdGhhdCBhcmUgbm90IGFjY291bnRlZCBmb3IKICAqCQkJCQkJYnkgYW55IG9mIHRo ZSBQYXJ0aXRpb25lZFJlbFBydW5lSW5mbyBub2RlcyBpbgogICoJCQkJCQkicHJ1bmVfaW5mb3Mi LiAgVGhlc2Ugc3VicGxhbnMgbXVzdCBub3QgYmUgcHJ1bmVkLgpAQCAtMTE5Nyw2ICsxMjEwLDgg QEAgdHlwZWRlZiBzdHJ1Y3QgUGFydGl0aW9uUHJ1bmVJbmZvCiB7CiAJTm9kZVRhZwkJdHlwZTsK IAlMaXN0CSAgICpwcnVuZV9pbmZvczsKKwlib29sCQluZWVkc19pbml0X3BydW5pbmc7CisJYm9v bAkJbmVlZHNfZXhlY19wcnVuaW5nOwogCUJpdG1hcHNldCAgKm90aGVyX3N1YnBsYW5zOwogfSBQ YXJ0aXRpb25QcnVuZUluZm87CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Rjb3AvdGNvcHBy b3QuaCBiL3NyYy9pbmNsdWRlL3Rjb3AvdGNvcHByb3QuaAppbmRleCA5MjI5MWE3NTBkLi5iZjgw YzUzYmVkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS90Y29wL3Rjb3Bwcm90LmgKKysrIGIvc3Jj L2luY2x1ZGUvdGNvcC90Y29wcHJvdC5oCkBAIC02NCw3ICs2NCw3IEBAIGV4dGVybiBQbGFubmVk U3RtdCAqcGdfcGxhbl9xdWVyeShRdWVyeSAqcXVlcnl0cmVlLCBjb25zdCBjaGFyICpxdWVyeV9z dHJpbmcsCiAJCQkJCQkJCSAgUGFyYW1MaXN0SW5mbyBib3VuZFBhcmFtcyk7CiBleHRlcm4gTGlz dCAqcGdfcGxhbl9xdWVyaWVzKExpc3QgKnF1ZXJ5dHJlZXMsIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0 cmluZywKIAkJCQkJCQkgaW50IGN1cnNvck9wdGlvbnMsCi0JCQkJCQkJIFBhcmFtTGlzdEluZm8g Ym91bmRQYXJhbXMpOworCQkJCQkJCSBQYXJhbUxpc3RJbmZvIGJvdW5kUGFyYW1zLCBMaXN0ICoq ZXhlY2xvY2tyZWxzaW5mb19saXN0KTsKIAogZXh0ZXJuIGJvb2wgY2hlY2tfbWF4X3N0YWNrX2Rl cHRoKGludCAqbmV3dmFsLCB2b2lkICoqZXh0cmEsIEd1Y1NvdXJjZSBzb3VyY2UpOwogZXh0ZXJu IHZvaWQgYXNzaWduX21heF9zdGFja19kZXB0aChpbnQgbmV3dmFsLCB2b2lkICpleHRyYSk7CmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9wbGFuY2FjaGUuaCBiL3NyYy9pbmNsdWRlL3V0 aWxzL3BsYW5jYWNoZS5oCmluZGV4IDk1Yjk5ZTNkMjUuLjU2YjBkY2M2YmQgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL3V0aWxzL3BsYW5jYWNoZS5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL3Bs YW5jYWNoZS5oCkBAIC0xNDgsNiArMTQ4LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgQ2FjaGVkUGxhbgog ewogCWludAkJCW1hZ2ljOwkJCS8qIHNob3VsZCBlcXVhbCBDQUNIRURQTEFOX01BR0lDICovCiAJ TGlzdAkgICAqc3RtdF9saXN0OwkJLyogbGlzdCBvZiBQbGFubmVkU3RtdHMgKi8KKwlMaXN0CSAg ICpleGVjbG9ja3JlbHNpbmZvX2xpc3Q7CS8qIGxpc3Qgb2YgRXhlY3V0b3JHZXRMb2NrUmVsc1Jl c3VsdCB3aXRoIG9uZQorCQkJCQkJCQkJICogZWxlbWVudCBmb3IgZWFjaCBvZiBzdG10X2xpc3Q7 IE5JTAorCQkJCQkJCQkJICogaWYgbm90IGEgZ2VuZXJpYyBwbGFuICovCiAJYm9vbAkJaXNfb25l c2hvdDsJCS8qIGlzIGl0IGEgIm9uZXNob3QiIHBsYW4/ICovCiAJYm9vbAkJaXNfc2F2ZWQ7CQkv KiBpcyBDYWNoZWRQbGFuIGluIGEgbG9uZy1saXZlZCBjb250ZXh0PyAqLwogCWJvb2wJCWlzX3Zh bGlkOwkJLyogaXMgdGhlIHN0bXRfbGlzdCBjdXJyZW50bHkgdmFsaWQ/ICovCkBAIC0xNTgsNiAr MTYxLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgQ2FjaGVkUGxhbgogCWludAkJCWdlbmVyYXRpb247CQkv KiBwYXJlbnQncyBnZW5lcmF0aW9uIG51bWJlciBmb3IgdGhpcyBwbGFuICovCiAJaW50CQkJcmVm Y291bnQ7CQkvKiBjb3VudCBvZiBsaXZlIHJlZmVyZW5jZXMgdG8gdGhpcyBzdHJ1Y3QgKi8KIAlN ZW1vcnlDb250ZXh0IGNvbnRleHQ7CQkvKiBjb250ZXh0IGNvbnRhaW5pbmcgdGhpcyBDYWNoZWRQ bGFuICovCisJTWVtb3J5Q29udGV4dCBleGVjbG9ja3JlbHNpbmZvX2NvbnRleHQ7CS8qIGNvbnRl eHQgY29udGFpbmluZworCQkJCQkJCQkJCQkgKiBleGVjbG9ja3JlbHNpbmZvX2xpc3QsCisJCQkJ CQkJCQkJCSAqIGEgY2hpbGQgb2YgdGhlIGFib3ZlIGNvbnRleHQgKi8KIH0gQ2FjaGVkUGxhbjsK IAogLyoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3BvcnRhbC5oIGIvc3JjL2luY2x1 ZGUvdXRpbHMvcG9ydGFsLmgKaW5kZXggYWVkZGJkYWZlNS4uOWFiYWNlNjczNCAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvdXRpbHMvcG9ydGFsLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvcG9y dGFsLmgKQEAgLTEzNyw2ICsxMzcsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgUG9ydGFsRGF0YQogCUNv bW1hbmRUYWcJY29tbWFuZFRhZzsJCS8qIGNvbW1hbmQgdGFnIGZvciBvcmlnaW5hbCBxdWVyeSAq LwogCVF1ZXJ5Q29tcGxldGlvbiBxYzsJCQkvKiBjb21tYW5kIGNvbXBsZXRpb24gZGF0YSBmb3Ig ZXhlY3V0ZWQgcXVlcnkgKi8KIAlMaXN0CSAgICpzdG10czsJCQkvKiBsaXN0IG9mIFBsYW5uZWRT dG10cyAqLworCUxpc3QJICAgKmV4ZWNsb2NrcmVsc2luZm9zOwkvKiBsaXN0IG9mIEV4ZWN1dG9y R2V0TG9ja1JlbHNSZXN1bHRzIHdpdGggb25lIGVsZW1lbnQKKwkJCQkJCQkJICogZm9yIGVhY2gg b2YgJ3N0bXRzJzsgc2FtZSBhcworCQkJCQkJCQkgKiBjcGxhbi0+ZXhlY2xvY2tyZWxzaW5mb19s aXN0IGlmIGNwbGFuIGlzCisJCQkJCQkJCSAqIG5vdCBOVUxMICovCiAJQ2FjaGVkUGxhbiAqY3Bs YW47CQkJLyogQ2FjaGVkUGxhbiwgaWYgc3RtdHMgYXJlIGZyb20gb25lICovCiAKIAlQYXJhbUxp c3RJbmZvIHBvcnRhbFBhcmFtczsgLyogcGFyYW1zIHRvIHBhc3MgdG8gcXVlcnkgKi8KQEAgLTI0 MSw2ICsyNDUsNyBAQCBleHRlcm4gdm9pZCBQb3J0YWxEZWZpbmVRdWVyeShQb3J0YWwgcG9ydGFs LAogCQkJCQkJCSAgY29uc3QgY2hhciAqc291cmNlVGV4dCwKIAkJCQkJCQkgIENvbW1hbmRUYWcg Y29tbWFuZFRhZywKIAkJCQkJCQkgIExpc3QgKnN0bXRzLAorCQkJCQkJCSAgTGlzdCAqZXhlY2xv Y2tyZWxzaW5mb3MsCiAJCQkJCQkJICBDYWNoZWRQbGFuICpjcGxhbik7CiBleHRlcm4gUGxhbm5l ZFN0bXQgKlBvcnRhbEdldFByaW1hcnlTdG10KFBvcnRhbCBwb3J0YWwpOwogZXh0ZXJuIHZvaWQg UG9ydGFsQ3JlYXRlSG9sZFN0b3JlKFBvcnRhbCBwb3J0YWwpOwotLSAKMi4yNC4xCgo= --00000000000022c13705db421aa9 Content-Type: application/x-patch; name="v6-0001-Some-refactoring-of-runtime-pruning-code.patch" Content-Disposition: attachment; filename="v6-0001-Some-refactoring-of-runtime-pruning-code.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l1admeaf3 RnJvbSBkZjgxODZjMGU0YTc2ZjMxYzFmODAzYTk1M2YyYzk4YWM4OGY5ZGM4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBhbWl0bGFuIDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4KRGF0 ZTogV2VkLCAyIE1hciAyMDIyIDE1OjE3OjU1ICswOTAwClN1YmplY3Q6IFtQQVRDSCB2NiAxLzRd IFNvbWUgcmVmYWN0b3Jpbmcgb2YgcnVudGltZSBwcnVuaW5nIGNvZGUKClRoaXMgZG9lcyB0d28g dGhpbmdzIG1haW5seToKCiogTW92ZSB0aGUgZXhlY3V0aW9uIHBydW5pbmcgaW5pdGlhbGl6YXRp b24gc3RlcHMgdGhhdCBhcmUgY29tbW9uCmJldHdlZW4gYm90aCBFeGVjSW5pdEFwcGVuZCgpIGFu ZCBFeGVjSW5pdE1lcmdlQXBwZW5kKCkgaW50byBhIG5ldwpmdW5jdGlvbiBFeGVjSW5pdFBhcnRp dGlvblBydW5pbmcoKSBkZWZpbmVkIGluIGV4ZWNQYXJ0aXRpb24uYy4KVGh1cywgRXhlY0NyZWF0 ZVBhcnRpdGlvblBydW5lU3RhdGUoKSBhbmQKRXhlY0ZpbmRJbml0aWFsTWF0Y2hpbmdTdWJQbGFu cygpIG5lZWQgbm90IGJlIGV4cG9ydGVkLgoKKiBBZGQgYW4gRXhwckNvbnRleHQgZmllbGQgdG8g UGFydGl0aW9uUHJ1bmVDb250ZXh0IHRvIHJlbW92ZSB0aGUKaW1wbGljaXQgYXNzdW1wdGlvbiBp biB0aGUgcnVudGltZSBwcnVuaW5nIGNvZGUgdGhhdCB0aGUgRXhwckNvbnRleHQKdG8gdXNlIHRv IGNvbXB1dGUgcHJ1bmluZyBleHByZXNzaW9ucyB0aGF0IG5lZWQgb25lIGNhbiBhbHdheXMgcmVs eQpvbiB0aGUgUGxhblN0YXRlIHByb3ZpZGluZyBpdC4gIEEgZnV0dXJlIHBhdGNoIHdpbGwgYWxs b3cgcnVudGltZQpwcnVuaW5nIChhdCBsZWFzdCB0aGUgaW5pdGlhbCBwcnVuaW5nIHN0ZXBzKSB0 byBiZSBwZXJmb3JtZWQgd2l0aG91dAp0aGUgY29ycmVzcG9uZGluZyBQbGFuU3RhdGUgeWV0IGhh dmluZyBiZWVuIGNyZWF0ZWQsIHNvIHRoaXMgd2lsbApoZWxwLgotLS0KIHNyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uYyAgIHwgMzQwICsrKysrKysrKysrKysrKystLS0tLS0tLS0K IHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBlbmQuYyAgICAgIHwgIDMzICstLQogc3JjL2Jh Y2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMgfCAgMzIgKy0tCiBzcmMvYmFja2VuZC9w YXJ0aXRpb25pbmcvcGFydHBydW5lLmMgICB8ICAyMCArLQogc3JjL2luY2x1ZGUvZXhlY3V0b3Iv ZXhlY1BhcnRpdGlvbi5oICAgfCAgIDkgKy0KIHNyYy9pbmNsdWRlL3BhcnRpdGlvbmluZy9wYXJ0 cHJ1bmUuaCAgIHwgICAyICsKIDYgZmlsZXMgY2hhbmdlZCwgMjUyIGluc2VydGlvbnMoKyksIDE4 NCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFy dGl0aW9uLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMKaW5kZXggOTBl ZDE0ODVkMS4uN2ZmNWE5NWYwNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y1BhcnRpdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uYwpA QCAtMTgyLDExICsxODIsMTggQEAgc3RhdGljIGNoYXIgKkV4ZWNCdWlsZFNsb3RQYXJ0aXRpb25L ZXlEZXNjcmlwdGlvbihSZWxhdGlvbiByZWwsCiAJCQkJCQkJCQkJCQkgIGJvb2wgKmlzbnVsbCwK IAkJCQkJCQkJCQkJCSAgaW50IG1heGZpZWxkbGVuKTsKIHN0YXRpYyBMaXN0ICphZGp1c3RfcGFy dGl0aW9uX2NvbG5vcyhMaXN0ICpjb2xub3MsIFJlc3VsdFJlbEluZm8gKmxlYWZfcGFydF9ycmkp Oworc3RhdGljIFBhcnRpdGlvblBydW5lU3RhdGUgKkV4ZWNDcmVhdGVQYXJ0aXRpb25QcnVuZVN0 YXRlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLAorCQkJCQkJCSAgUGFydGl0aW9uUHJ1bmVJbmZvICpw YXJ0aXRpb25wcnVuZWluZm8pOworc3RhdGljIEJpdG1hcHNldCAqRXhlY0ZpbmRJbml0aWFsTWF0 Y2hpbmdTdWJQbGFucyhQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlKTsKIHN0YXRpYyB2 b2lkIEV4ZWNJbml0UHJ1bmluZ0NvbnRleHQoUGFydGl0aW9uUHJ1bmVDb250ZXh0ICpjb250ZXh0 LAogCQkJCQkJCQkgICBMaXN0ICpwcnVuaW5nX3N0ZXBzLAogCQkJCQkJCQkgICBQYXJ0aXRpb25E ZXNjIHBhcnRkZXNjLAogCQkJCQkJCQkgICBQYXJ0aXRpb25LZXkgcGFydGtleSwKLQkJCQkJCQkJ ICAgUGxhblN0YXRlICpwbGFuc3RhdGUpOworCQkJCQkJCQkgICBQbGFuU3RhdGUgKnBsYW5zdGF0 ZSwKKwkJCQkJCQkJICAgRXhwckNvbnRleHQgKmVjb250ZXh0KTsKK3N0YXRpYyB2b2lkIFBhcnRp dGlvblBydW5lU3RhdGVGaXhTdWJQbGFuTWFwKFBhcnRpdGlvblBydW5lU3RhdGUgKnBydW5lc3Rh dGUsCisJCQkJCQkJCSBCaXRtYXBzZXQgKmluaXRpYWxseV92YWxpZF9zdWJwbGFucywKKwkJCQkJ CQkJIGludCBuX3RvdGFsX3N1YnBsYW5zKTsKIHN0YXRpYyB2b2lkIGZpbmRfbWF0Y2hpbmdfc3Vi cGxhbnNfcmVjdXJzZShQYXJ0aXRpb25QcnVuaW5nRGF0YSAqcHJ1bmVkYXRhLAogCQkJCQkJCQkJ CSAgIFBhcnRpdGlvbmVkUmVsUHJ1bmluZ0RhdGEgKnBwcnVuZSwKIAkJCQkJCQkJCQkgICBib29s IGluaXRpYWxfcHJ1bmUsCkBAIC0xNDg1LDMwICsxNDkyLDg2IEBAIGFkanVzdF9wYXJ0aXRpb25f Y29sbm9zKExpc3QgKmNvbG5vcywgUmVzdWx0UmVsSW5mbyAqbGVhZl9wYXJ0X3JyaSkKICAqCiAg KiBGdW5jdGlvbnM6CiAgKgotICogRXhlY0NyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGU6CisgKiBF eGVjSW5pdFBhcnRpdGlvblBydW5pbmc6CiAgKgkJQ3JlYXRlcyB0aGUgUGFydGl0aW9uUHJ1bmVT dGF0ZSByZXF1aXJlZCBieSBlYWNoIG9mIHRoZSB0d28gcHJ1bmluZwogICoJCWZ1bmN0aW9ucy4g IERldGFpbHMgc3RvcmVkIGluY2x1ZGUgaG93IHRvIG1hcCB0aGUgcGFydGl0aW9uIGluZGV4Ci0g KgkJcmV0dXJuZWQgYnkgdGhlIHBhcnRpdGlvbiBwcnVuaW5nIGNvZGUgaW50byBzdWJwbGFuIGlu ZGV4ZXMuCi0gKgotICogRXhlY0ZpbmRJbml0aWFsTWF0Y2hpbmdTdWJQbGFuczoKLSAqCQlSZXR1 cm5zIGluZGV4ZXMgb2YgbWF0Y2hpbmcgc3VicGxhbnMuICBQYXJ0aXRpb24gcHJ1bmluZyBpcyBh dHRlbXB0ZWQKLSAqCQl3aXRob3V0IGFueSBldmFsdWF0aW9uIG9mIGV4cHJlc3Npb25zIGNvbnRh aW5pbmcgUEFSQU1fRVhFQyBQYXJhbXMuCi0gKgkJVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxl ZCBkdXJpbmcgZXhlY3V0b3Igc3RhcnR1cCBmb3IgdGhlIHBhcmVudAotICoJCXBsYW4gYmVmb3Jl IHRoZSBzdWJwbGFucyB0aGVtc2VsdmVzIGFyZSBpbml0aWFsaXplZC4gIFN1YnBsYW5zIHdoaWNo Ci0gKgkJYXJlIGZvdW5kIG5vdCB0byBtYXRjaCBieSB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgcmVt b3ZlZCBmcm9tIHRoZQotICoJCXBsYW4ncyBsaXN0IG9mIHN1YnBsYW5zIGR1cmluZyBleGVjdXRp b24sIGFzIHRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgYQotICoJCXJlbWFwIG9mIHRoZSBwYXJ0aXRp b24gaW5kZXggdG8gc3VicGxhbiBpbmRleCBtYXAgYW5kIHRoZSBuZXdseQotICoJCWNyZWF0ZWQg bWFwIHByb3ZpZGVzIGluZGV4ZXMgb25seSBmb3Igc3VicGxhbnMgd2hpY2ggcmVtYWluIGFmdGVy Ci0gKgkJY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICoJCXJldHVybmVkIGJ5IHRoZSBwYXJ0aXRp b24gcHJ1bmluZyBjb2RlIGludG8gc3VicGxhbiBpbmRleGVzLiAgQWxzbworICoJCWRldGVybWlu ZXMgdGhlIHNldCBvZiBpbml0aWFsbHkgdmFsaWQgc3VicGxhbnMgYnkgcGVyZm9ybWluZyBpbml0 aWFsCisgKgkJcHJ1bmluZyBzdGVwcywgb25seSB3aGljaCBuZWVkIGJlIGluaXRpYWxpemVkIGJ5 IHRoZSBjYWxsZXIgc3VjaCBhcworICoJCUV4ZWNJbml0QXBwZW5kLiAgTWFwcyBpbiBQYXJ0aXRp b25QcnVuZVN0YXRlIGFyZSB1cGRhdGVkIHRvIGFjY291bnQKKyAqCQlmb3IgaW5pdGlhbCBwcnVu aW5nIGhhdmluZyBlbGltaW5hdGVkIHNvbWUgb2YgdGhlIHN1YnBsYW5zLCBpZiBhbnkuCiAgKgog ICogRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zOgogICoJCVJldHVybnMgaW5kZXhlcyBvZiBtYXRj aGluZyBzdWJwbGFucyBhZnRlciBldmFsdWF0aW5nIGFsbCBhdmFpbGFibGUKLSAqCQlleHByZXNz aW9ucy4gIFRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBleGVjdXRpb24g YW5kCi0gKgkJbXVzdCBiZSBjYWxsZWQgYWdhaW4gZWFjaCB0aW1lIHRoZSB2YWx1ZSBvZiBhIFBh cmFtIGxpc3RlZCBpbgotICoJCVBhcnRpdGlvblBydW5lU3RhdGUncyAnZXhlY3BhcmFtaWRzJyBj aGFuZ2VzLgorICoJCWV4cHJlc3Npb25zLCB0aGF0IGlzLCB1c2luZyBleGVjdXRpb24gcHJ1bmlu ZyBzdGVwcy4gIFRoaXMgZnVuY3Rpb24gY2FuCisgKgkJY2FuIG9ubHkgYmUgY2FsbGVkIGR1cmlu ZyBleGVjdXRpb24gYW5kIG11c3QgYmUgY2FsbGVkIGFnYWluIGVhY2ggdGltZQorICoJCXRoZSB2 YWx1ZSBvZiBhIFBhcmFtIGxpc3RlZCBpbiBQYXJ0aXRpb25QcnVuZVN0YXRlJ3MgJ2V4ZWNwYXJh bWlkcycKKyAqCQljaGFuZ2VzLgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIAorLyoKKyAqIEV4 ZWNJbml0UGFydGl0aW9uUHJ1bmluZworICogCQlJbml0aWFsaXplIGRhdGEgc3RydWN0dXJlIG5l ZWRlZCBmb3IgcnVuLXRpbWUgcGFydGl0aW9uIHBydW5pbmcKKyAqCisgKiBJbml0aWFsIHBydW5p bmcgY2FuIGJlIGRvbmUgaW1tZWRpYXRlbHksIHNvIGl0IGlzIGRvbmUgaGVyZSBpZiBuZWVkZWQg YW5kCisgKiB0aGUgc2V0IG9mIHN1cnZpdmluZyBwYXJ0aXRpb24gc3VicGxhbnMnIGluZGV4ZXMg YXJlIGFkZGVkIHRvIHRoZSBvdXRwdXQKKyAqIHBhcmFtZXRlciAqaW5pdGlhbGx5X3ZhbGlkX3N1 YnBsYW5zLgorICoKKyAqIElmIHN1YnBsYW5zIGFyZSBpbmRlZWQgcHJ1bmVkLCBzdWJwbGFuX21h cCBhcnJheXMgY29udGFpbmVkIGluIHRoZSByZXR1cm5lZAorICogUGFydGl0aW9uUHJ1bmVTdGF0 ZSBhcmUgcmUtc2VxdWVuY2VkIHRvIG5vdCBjb3VudCB0aG9zZSwgdGhvdWdoIG9ubHkgaWYgdGhl CisgKiBtYXBzIHdpbGwgYmUgbmVlZGVkIGZvciBzdWJzZXF1ZW50IGV4ZWN1dGlvbiBwcnVuaW5n IHBhc3Nlcy4KKyAqLworUGFydGl0aW9uUHJ1bmVTdGF0ZSAqCitFeGVjSW5pdFBhcnRpdGlvblBy dW5pbmcoUGxhblN0YXRlICpwbGFuc3RhdGUsCisJCQkJCQkgaW50IG5fdG90YWxfc3VicGxhbnMs CisJCQkJCQkgUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWluZm8sCisJCQkJCQkgQml0bWFwc2V0 ICoqaW5pdGlhbGx5X3ZhbGlkX3N1YnBsYW5zKQoreworCVBhcnRpdGlvblBydW5lU3RhdGUgKnBy dW5lc3RhdGU7CisJRVN0YXRlICplc3RhdGUgPSBwbGFuc3RhdGUtPnN0YXRlOworCisJLyogV2Ug bWF5IG5lZWQgYW4gZXhwcmVzc2lvbiBjb250ZXh0IHRvIGV2YWx1YXRlIHBhcnRpdGlvbiBleHBy cyAqLworCUV4ZWNBc3NpZ25FeHByQ29udGV4dChlc3RhdGUsIHBsYW5zdGF0ZSk7CisKKwkvKgor CSAqIENyZWF0ZSB0aGUgd29ya2luZyBkYXRhIHN0cnVjdHVyZSBmb3IgcHJ1bmluZy4KKwkgKi8K KwlwcnVuZXN0YXRlID0gRXhlY0NyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUocGxhbnN0YXRlLCBw cnVuZWluZm8pOworCisJLyoKKwkgKiBQZXJmb3JtIGFuIGluaXRpYWwgcGFydGl0aW9uIHBydW5l LCBpZiByZXF1aXJlZC4KKwkgKi8KKwlpZiAocHJ1bmVzdGF0ZS0+ZG9faW5pdGlhbF9wcnVuZSkK Kwl7CisJCS8qIERldGVybWluZSB3aGljaCBzdWJwbGFucyBzdXJ2aXZlIGluaXRpYWwgcHJ1bmlu ZyAqLworCQkqaW5pdGlhbGx5X3ZhbGlkX3N1YnBsYW5zID0gRXhlY0ZpbmRJbml0aWFsTWF0Y2hp bmdTdWJQbGFucyhwcnVuZXN0YXRlKTsKKwl9CisJZWxzZQorCXsKKwkJLyogV2UnbGwgbmVlZCB0 byBpbml0aWFsaXplIGFsbCBzdWJwbGFucyAqLworCQlBc3NlcnQobl90b3RhbF9zdWJwbGFucyA+ IDApOworCQkqaW5pdGlhbGx5X3ZhbGlkX3N1YnBsYW5zID0gYm1zX2FkZF9yYW5nZShOVUxMLCAw LAorCQkJCQkJCQkJCQkJICBuX3RvdGFsX3N1YnBsYW5zIC0gMSk7CisJfQorCisJLyoKKwkgKiBS ZS1zZXF1ZW5jZSBzdWJwbGFuIGluZGV4ZXMgY29udGFpbmVkIGluIHBydW5lc3RhdGUgdG8gYWNj b3VudCBmb3IgYW55CisJICogdGhhdCB3ZXJlIHJlbW92ZWQgYWJvdmUgZHVlIHRvIGluaXRpYWwg cHJ1bmluZy4KKwkgKgorCSAqIFdlIGNhbiBzYWZlbHkgc2tpcCB0aGlzIHdoZW4gIWRvX2V4ZWNf cHJ1bmUsIGV2ZW4gdGhvdWdoIHRoYXQgbGVhdmVzCisJICogaW52YWxpZCBkYXRhIGluIHBydW5l c3RhdGUsIGJlY2F1c2UgdGhhdCBkYXRhIHdvbid0IGJlIGNvbnN1bHRlZCBhZ2FpbgorCSAqIChj ZiBpbml0aWFsIEFzc2VydCBpbiBFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMpLgorCSAqLworCWlm IChwcnVuZXN0YXRlLT5kb19leGVjX3BydW5lICYmCisJCWJtc19udW1fbWVtYmVycygqaW5pdGlh bGx5X3ZhbGlkX3N1YnBsYW5zKSA8IG5fdG90YWxfc3VicGxhbnMpCisJCVBhcnRpdGlvblBydW5l U3RhdGVGaXhTdWJQbGFuTWFwKHBydW5lc3RhdGUsCisJCQkJCQkJCQkJICppbml0aWFsbHlfdmFs aWRfc3VicGxhbnMsCisJCQkJCQkJCQkJIG5fdG90YWxfc3VicGxhbnMpOworCisJcmV0dXJuIHBy dW5lc3RhdGU7Cit9CisKIC8qCiAgKiBFeGVjQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZQogICoJ CUJ1aWxkIHRoZSBkYXRhIHN0cnVjdHVyZSByZXF1aXJlZCBmb3IgY2FsbGluZwpAQCAtMTUyNyw3 ICsxNTkwLDcgQEAgYWRqdXN0X3BhcnRpdGlvbl9jb2xub3MoTGlzdCAqY29sbm9zLCBSZXN1bHRS ZWxJbmZvICpsZWFmX3BhcnRfcnJpKQogICogcmUtdXNlZCBlYWNoIHRpbWUgd2UgcmUtZXZhbHVh dGUgd2hpY2ggcGFydGl0aW9ucyBtYXRjaCB0aGUgcHJ1bmluZyBzdGVwcwogICogcHJvdmlkZWQg aW4gZWFjaCBQYXJ0aXRpb25lZFJlbFBydW5lSW5mby4KICAqLwotUGFydGl0aW9uUHJ1bmVTdGF0 ZSAqCitzdGF0aWMgUGFydGl0aW9uUHJ1bmVTdGF0ZSAqCiBFeGVjQ3JlYXRlUGFydGl0aW9uUHJ1 bmVTdGF0ZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwKIAkJCQkJCQkgIFBhcnRpdGlvblBydW5lSW5m byAqcGFydGl0aW9ucHJ1bmVpbmZvKQogewpAQCAtMTUzNiw2ICsxNTk5LDcgQEAgRXhlY0NyZWF0 ZVBhcnRpdGlvblBydW5lU3RhdGUoUGxhblN0YXRlICpwbGFuc3RhdGUsCiAJaW50CQkJbl9wYXJ0 X2hpZXJhcmNoaWVzOwogCUxpc3RDZWxsICAgKmxjOwogCWludAkJCWk7CisJRXhwckNvbnRleHQJ KmVjb250ZXh0ID0gcGxhbnN0YXRlLT5wc19FeHByQ29udGV4dDsKIAogCS8qIEZvciBkYXRhIHJl YWRpbmcsIGV4ZWN1dG9yIGFsd2F5cyBvbWl0cyBkZXRhY2hlZCBwYXJ0aXRpb25zICovCiAJaWYg KGVzdGF0ZS0+ZXNfcGFydGl0aW9uX2RpcmVjdG9yeSA9PSBOVUxMKQpAQCAtMTcwOSw3ICsxNzcz LDggQEAgRXhlY0NyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUoUGxhblN0YXRlICpwbGFuc3RhdGUs CiAJCQl7CiAJCQkJRXhlY0luaXRQcnVuaW5nQ29udGV4dCgmcHBydW5lLT5pbml0aWFsX2NvbnRl eHQsCiAJCQkJCQkJCQkgICBwaW5mby0+aW5pdGlhbF9wcnVuaW5nX3N0ZXBzLAotCQkJCQkJCQkJ ICAgcGFydGRlc2MsIHBhcnRrZXksIHBsYW5zdGF0ZSk7CisJCQkJCQkJCQkgICBwYXJ0ZGVzYywg cGFydGtleSwgcGxhbnN0YXRlLAorCQkJCQkJCQkJICAgZWNvbnRleHQpOwogCQkJCS8qIFJlY29y ZCB3aGV0aGVyIGluaXRpYWwgcHJ1bmluZyBpcyBuZWVkZWQgYXQgYW55IGxldmVsICovCiAJCQkJ cHJ1bmVzdGF0ZS0+ZG9faW5pdGlhbF9wcnVuZSA9IHRydWU7CiAJCQl9CkBAIC0xNzE4LDcgKzE3 ODMsOCBAQCBFeGVjQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZShQbGFuU3RhdGUgKnBsYW5zdGF0 ZSwKIAkJCXsKIAkJCQlFeGVjSW5pdFBydW5pbmdDb250ZXh0KCZwcHJ1bmUtPmV4ZWNfY29udGV4 dCwKIAkJCQkJCQkJCSAgIHBpbmZvLT5leGVjX3BydW5pbmdfc3RlcHMsCi0JCQkJCQkJCQkgICBw YXJ0ZGVzYywgcGFydGtleSwgcGxhbnN0YXRlKTsKKwkJCQkJCQkJCSAgIHBhcnRkZXNjLCBwYXJ0 a2V5LCBwbGFuc3RhdGUsCisJCQkJCQkJCQkgICBlY29udGV4dCk7CiAJCQkJLyogUmVjb3JkIHdo ZXRoZXIgZXhlYyBwcnVuaW5nIGlzIG5lZWRlZCBhdCBhbnkgbGV2ZWwgKi8KIAkJCQlwcnVuZXN0 YXRlLT5kb19leGVjX3BydW5lID0gdHJ1ZTsKIAkJCX0KQEAgLTE3NDYsNyArMTgxMiw4IEBAIEV4 ZWNJbml0UHJ1bmluZ0NvbnRleHQoUGFydGl0aW9uUHJ1bmVDb250ZXh0ICpjb250ZXh0LAogCQkJ CQkgICBMaXN0ICpwcnVuaW5nX3N0ZXBzLAogCQkJCQkgICBQYXJ0aXRpb25EZXNjIHBhcnRkZXNj LAogCQkJCQkgICBQYXJ0aXRpb25LZXkgcGFydGtleSwKLQkJCQkJICAgUGxhblN0YXRlICpwbGFu c3RhdGUpCisJCQkJCSAgIFBsYW5TdGF0ZSAqcGxhbnN0YXRlLAorCQkJCQkgICBFeHByQ29udGV4 dCAqZWNvbnRleHQpCiB7CiAJaW50CQkJbl9zdGVwczsKIAlpbnQJCQlwYXJ0bmF0dHM7CkBAIC0x NzY3LDYgKzE4MzQsNyBAQCBFeGVjSW5pdFBydW5pbmdDb250ZXh0KFBhcnRpdGlvblBydW5lQ29u dGV4dCAqY29udGV4dCwKIAogCWNvbnRleHQtPnBwY2NvbnRleHQgPSBDdXJyZW50TWVtb3J5Q29u dGV4dDsKIAljb250ZXh0LT5wbGFuc3RhdGUgPSBwbGFuc3RhdGU7CisJY29udGV4dC0+ZXhwcmNv bnRleHQgPSBlY29udGV4dDsKIAogCS8qIEluaXRpYWxpemUgZXhwcmVzc2lvbiBzdGF0ZSBmb3Ig ZWFjaCBleHByZXNzaW9uIHdlIG5lZWQgKi8KIAljb250ZXh0LT5leHByc3RhdGVzID0gKEV4cHJT dGF0ZSAqKikKQEAgLTE3OTUsOCArMTg2MywyMCBAQCBFeGVjSW5pdFBydW5pbmdDb250ZXh0KFBh cnRpdGlvblBydW5lQ29udGV4dCAqY29udGV4dCwKIAkJCQkJCQkJCQkJCQkJc3RlcC0+c3RlcC5z dGVwX2lkLAogCQkJCQkJCQkJCQkJCQlrZXlubyk7CiAKLQkJCQljb250ZXh0LT5leHByc3RhdGVz W3N0YXRlaWR4XSA9Ci0JCQkJCUV4ZWNJbml0RXhwcihleHByLCBjb250ZXh0LT5wbGFuc3RhdGUp OworCQkJCS8qCisJCQkJICogV2hlbiBwbGFuc3RhdGUgaXMgTlVMTCwgcHJ1bmluZ19zdGVwcyBp cyBrbm93biBub3QgdG8KKwkJCQkgKiBjb250YWluIGFueSBleHByZXNzaW9ucyB0aGF0IGRlcGVu ZCBvbiB0aGUgcGFyZW50IHBsYW4uCisJCQkJICogSW5mb3JtYXRpb24gb2YgYW55IGF2YWlsYWJs ZSBFWFRFUk4gcGFyYW1ldGVycyBtdXN0IGJlCisJCQkJICogcGFzc2VkIGV4cGxpY2l0bHkgaW4g dGhhdCBjYXNlLCB3aGljaCB0aGUgY2FsbGVyIG11c3QKKwkJCQkgKiBoYXZlIG1hZGUgYXZhaWxh YmxlIHZpYSBlY29udGV4dC4KKwkJCQkgKi8KKwkJCQlpZiAocGxhbnN0YXRlID09IE5VTEwpCisJ CQkJCWNvbnRleHQtPmV4cHJzdGF0ZXNbc3RhdGVpZHhdID0KKwkJCQkJCUV4ZWNJbml0RXhwcldp dGhQYXJhbXMoZXhwciwKKwkJCQkJCQkJCQkJICAgZWNvbnRleHQtPmVjeHRfcGFyYW1fbGlzdF9p bmZvKTsKKwkJCQllbHNlCisJCQkJCWNvbnRleHQtPmV4cHJzdGF0ZXNbc3RhdGVpZHhdID0KKwkJ CQkJCUV4ZWNJbml0RXhwcihleHByLCBjb250ZXh0LT5wbGFuc3RhdGUpOwogCQkJfQogCQkJa2V5 bm8rKzsKIAkJfQpAQCAtMTgwOSwxOCArMTg4OSwxMSBAQCBFeGVjSW5pdFBydW5pbmdDb250ZXh0 KFBhcnRpdGlvblBydW5lQ29udGV4dCAqY29udGV4dCwKICAqCQlwcnVuaW5nLCBkaXNyZWdhcmRp bmcgYW55IHBydW5pbmcgY29uc3RyYWludHMgaW52b2x2aW5nIFBBUkFNX0VYRUMKICAqCQlQYXJh bXMuCiAgKgotICogSWYgYWRkaXRpb25hbCBwcnVuaW5nIHBhc3NlcyB3aWxsIGJlIHJlcXVpcmVk IChiZWNhdXNlIG9mIFBBUkFNX0VYRUMKLSAqIFBhcmFtcyksIHdlIG11c3QgYWxzbyB1cGRhdGUg dGhlIHRyYW5zbGF0aW9uIGRhdGEgdGhhdCBhbGxvd3MgY29udmVyc2lvbgotICogb2YgcGFydGl0 aW9uIGluZGV4ZXMgaW50byBzdWJwbGFuIGluZGV4ZXMgdG8gYWNjb3VudCBmb3IgdGhlIHVubmVl ZGVkCi0gKiBzdWJwbGFucyBoYXZpbmcgYmVlbiByZW1vdmVkLgotICoKICAqIE11c3Qgb25seSBi ZSBjYWxsZWQgb25jZSBwZXIgJ3BydW5lc3RhdGUnLCBhbmQgb25seSBpZiBpbml0aWFsIHBydW5p bmcKICAqIGlzIHJlcXVpcmVkLgotICoKLSAqICduc3VicGxhbnMnIG11c3QgYmUgcGFzc2VkIGFz IHRoZSB0b3RhbCBudW1iZXIgb2YgdW5wcnVuZWQgc3VicGxhbnMuCiAgKi8KLUJpdG1hcHNldCAq Ci1FeGVjRmluZEluaXRpYWxNYXRjaGluZ1N1YlBsYW5zKFBhcnRpdGlvblBydW5lU3RhdGUgKnBy dW5lc3RhdGUsIGludCBuc3VicGxhbnMpCitzdGF0aWMgQml0bWFwc2V0ICoKK0V4ZWNGaW5kSW5p dGlhbE1hdGNoaW5nU3ViUGxhbnMoUGFydGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0ZSkKIHsK IAlCaXRtYXBzZXQgICpyZXN1bHQgPSBOVUxMOwogCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsK QEAgLTE4NDUsMTQgKzE5MTgsMjAgQEAgRXhlY0ZpbmRJbml0aWFsTWF0Y2hpbmdTdWJQbGFucyhQ YXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlLCBpbnQgbnN1YnBsYW5zKQogCQlQYXJ0aXRp b25lZFJlbFBydW5pbmdEYXRhICpwcHJ1bmU7CiAKIAkJcHJ1bmVkYXRhID0gcHJ1bmVzdGF0ZS0+ cGFydHBydW5lZGF0YVtpXTsKKworCQkvKgorCQkgKiBXZSBwYXNzIHRoZSAxc3QgaXRlbSBiZWxv bmdpbmcgdG8gdGhlIHJvb3QgdGFibGUgb2YgdGhlIGhpZXJhcmNoeQorCQkgKiBhbmQgZmluZF9t YXRjaGluZ19zdWJwbGFuc19yZWN1cnNlKCkgdGFrZXMgY2FyZSBvZiByZWN1cnNpbmcgdG8KKwkJ ICogb3RoZXIgKGxvd2VyLWxldmVsKSBwYXJlbnRzIGFzIG5lZWRlZC4KKwkJICovCiAJCXBwcnVu ZSA9ICZwcnVuZWRhdGEtPnBhcnRyZWxwcnVuZWRhdGFbMF07CiAKIAkJLyogUGVyZm9ybSBwcnVu aW5nIHdpdGhvdXQgdXNpbmcgUEFSQU1fRVhFQyBQYXJhbXMgKi8KIAkJZmluZF9tYXRjaGluZ19z dWJwbGFuc19yZWN1cnNlKHBydW5lZGF0YSwgcHBydW5lLCB0cnVlLCAmcmVzdWx0KTsKIAotCQkv KiBFeHByZXNzaW9uIGV2YWwgbWF5IGhhdmUgdXNlZCBzcGFjZSBpbiBub2RlJ3MgcHNfRXhwckNv bnRleHQgdG9vICovCisJCS8qIEV4cHJlc3Npb24gZXZhbCBtYXkgaGF2ZSB1c2VkIHNwYWNlIGlu IEV4cHJDb250ZXh0IHRvbyAqLwogCQlpZiAocHBydW5lLT5pbml0aWFsX3BydW5pbmdfc3RlcHMp Ci0JCQlSZXNldEV4cHJDb250ZXh0KHBwcnVuZS0+aW5pdGlhbF9jb250ZXh0LnBsYW5zdGF0ZS0+ cHNfRXhwckNvbnRleHQpOworCQkJUmVzZXRFeHByQ29udGV4dChwcHJ1bmUtPmluaXRpYWxfY29u dGV4dC5leHByY29udGV4dCk7CiAJfQogCiAJLyogQWRkIGluIGFueSBzdWJwbGFucyB0aGF0IHBh cnRpdGlvbiBwcnVuaW5nIGRpZG4ndCBhY2NvdW50IGZvciAqLwpAQCAtMTg2NSwxMTggKzE5NDQs MTIwIEBAIEV4ZWNGaW5kSW5pdGlhbE1hdGNoaW5nU3ViUGxhbnMoUGFydGl0aW9uUHJ1bmVTdGF0 ZSAqcHJ1bmVzdGF0ZSwgaW50IG5zdWJwbGFucykKIAogCU1lbW9yeUNvbnRleHRSZXNldChwcnVu ZXN0YXRlLT5wcnVuZV9jb250ZXh0KTsKIAorCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBQ YXJ0aXRpb25QcnVuZVN0YXRlRml4U3ViUGxhbk1hcAorICoJCUZpeCBtYXBwaW5nIG9mIHBhcnRp dGlvbiBpbmRleGVzIHRvIHN1YnBsYW4gaW5kZXhlcyBjb250YWluZWQgaW4KKyAqCQlwcnVuZXN0 YXRlIGJ5IGNvbnNpZGVyaW5nIHRoZSBuZXcgbGlzdCBvZiBzdWJwbGFucyB0aGF0IHN1cnZpdmVk CisgKgkJaW5pdGlhbCBwcnVuaW5nCisgKgorICogU3VicGxhbnMgd291bGQgcHJldmlvdXNseSBi ZSBpbmRleGVkIDAuLihuX3RvdGFsX3N1YnBsYW5zIC0gMSkgc2hvdWxkIGJlCisgKiBjaGFuZ2Vk IHRvIGluZGV4IHJhbmdlIDAuLm51bShpbml0aWFsbHlfdmFsaWRfc3VicGxhbnMpLgorICovCitz dGF0aWMgdm9pZAorUGFydGl0aW9uUHJ1bmVTdGF0ZUZpeFN1YlBsYW5NYXAoUGFydGl0aW9uUHJ1 bmVTdGF0ZSAqcHJ1bmVzdGF0ZSwKKwkJCQkJCQkJIEJpdG1hcHNldCAqaW5pdGlhbGx5X3ZhbGlk X3N1YnBsYW5zLAorCQkJCQkJCQkgaW50IG5fdG90YWxfc3VicGxhbnMpCit7CisJaW50CQkgICAq bmV3X3N1YnBsYW5faW5kZXhlczsKKwlCaXRtYXBzZXQgICpuZXdfb3RoZXJfc3VicGxhbnM7CisJ aW50CQkJaTsKKwlpbnQJCQluZXdpZHg7CisKIAkvKgotCSAqIElmIGV4ZWMtdGltZSBwcnVuaW5n IGlzIHJlcXVpcmVkIGFuZCB3ZSBwcnVuZWQgc3VicGxhbnMgYWJvdmUsIHRoZW4gd2UKLQkgKiBt dXN0IHJlLXNlcXVlbmNlIHRoZSBzdWJwbGFuIGluZGV4ZXMgc28gdGhhdCBFeGVjRmluZE1hdGNo aW5nU3ViUGxhbnMKLQkgKiBwcm9wZXJseSByZXR1cm5zIHRoZSBpbmRleGVzIGZyb20gdGhlIHN1 YnBsYW5zIHdoaWNoIHdpbGwgcmVtYWluIGFmdGVyCi0JICogZXhlY3V0aW9uIG9mIHRoaXMgZnVu Y3Rpb24uCi0JICoKLQkgKiBXZSBjYW4gc2FmZWx5IHNraXAgdGhpcyB3aGVuICFkb19leGVjX3By dW5lLCBldmVuIHRob3VnaCB0aGF0IGxlYXZlcwotCSAqIGludmFsaWQgZGF0YSBpbiBwcnVuZXN0 YXRlLCBiZWNhdXNlIHRoYXQgZGF0YSB3b24ndCBiZSBjb25zdWx0ZWQgYWdhaW4KLQkgKiAoY2Yg aW5pdGlhbCBBc3NlcnQgaW4gRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKS4KKwkgKiBGaXJzdCB3 ZSBtdXN0IGJ1aWxkIGEgdGVtcG9yYXJ5IGFycmF5IHdoaWNoIG1hcHMgb2xkIHN1YnBsYW4KKwkg KiBpbmRleGVzIHRvIG5ldyBvbmVzLiAgRm9yIGNvbnZlbmllbmNlIG9mIGluaXRpYWxpemF0aW9u LCB3ZSB1c2UKKwkgKiAxLWJhc2VkIGluZGV4ZXMgaW4gdGhpcyBhcnJheSBhbmQgbGVhdmUgcHJ1 bmVkIGl0ZW1zIGFzIDAuCiAJICovCi0JaWYgKHBydW5lc3RhdGUtPmRvX2V4ZWNfcHJ1bmUgJiYg Ym1zX251bV9tZW1iZXJzKHJlc3VsdCkgPCBuc3VicGxhbnMpCisJbmV3X3N1YnBsYW5faW5kZXhl cyA9IChpbnQgKikgcGFsbG9jMChzaXplb2YoaW50KSAqIG5fdG90YWxfc3VicGxhbnMpOworCW5l d2lkeCA9IDE7CisJaSA9IC0xOworCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihpbml0aWFs bHlfdmFsaWRfc3VicGxhbnMsIGkpKSA+PSAwKQogCXsKLQkJaW50CQkgICAqbmV3X3N1YnBsYW5f aW5kZXhlczsKLQkJQml0bWFwc2V0ICAqbmV3X290aGVyX3N1YnBsYW5zOwotCQlpbnQJCQlpOwot CQlpbnQJCQluZXdpZHg7CisJCUFzc2VydChpIDwgbl90b3RhbF9zdWJwbGFucyk7CisJCW5ld19z dWJwbGFuX2luZGV4ZXNbaV0gPSBuZXdpZHgrKzsKKwl9CiAKLQkJLyoKLQkJICogRmlyc3Qgd2Ug bXVzdCBidWlsZCBhIHRlbXBvcmFyeSBhcnJheSB3aGljaCBtYXBzIG9sZCBzdWJwbGFuCi0JCSAq IGluZGV4ZXMgdG8gbmV3IG9uZXMuICBGb3IgY29udmVuaWVuY2Ugb2YgaW5pdGlhbGl6YXRpb24s IHdlIHVzZQotCQkgKiAxLWJhc2VkIGluZGV4ZXMgaW4gdGhpcyBhcnJheSBhbmQgbGVhdmUgcHJ1 bmVkIGl0ZW1zIGFzIDAuCi0JCSAqLwotCQluZXdfc3VicGxhbl9pbmRleGVzID0gKGludCAqKSBw YWxsb2MwKHNpemVvZihpbnQpICogbnN1YnBsYW5zKTsKLQkJbmV3aWR4ID0gMTsKLQkJaSA9IC0x OwotCQl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIocmVzdWx0LCBpKSkgPj0gMCkKLQkJewot CQkJQXNzZXJ0KGkgPCBuc3VicGxhbnMpOwotCQkJbmV3X3N1YnBsYW5faW5kZXhlc1tpXSA9IG5l d2lkeCsrOwotCQl9CisJLyoKKwkgKiBOb3cgd2UgY2FuIHVwZGF0ZSBlYWNoIFBhcnRpdGlvbmVk UmVsUHJ1bmVJbmZvJ3Mgc3VicGxhbl9tYXAgd2l0aAorCSAqIG5ldyBzdWJwbGFuIGluZGV4ZXMu ICBXZSBtdXN0IGFsc28gcmVjb21wdXRlIGl0cyBwcmVzZW50X3BhcnRzCisJICogYml0bWFwLgor CSAqLworCWZvciAoaSA9IDA7IGkgPCBwcnVuZXN0YXRlLT5udW1fcGFydHBydW5lZGF0YTsgaSsr KQorCXsKKwkJUGFydGl0aW9uUHJ1bmluZ0RhdGEgKnBydW5lZGF0YSA9IHBydW5lc3RhdGUtPnBh cnRwcnVuZWRhdGFbaV07CisJCWludAkJCWo7CiAKIAkJLyoKLQkJICogTm93IHdlIGNhbiB1cGRh dGUgZWFjaCBQYXJ0aXRpb25lZFJlbFBydW5lSW5mbydzIHN1YnBsYW5fbWFwIHdpdGgKLQkJICog bmV3IHN1YnBsYW4gaW5kZXhlcy4gIFdlIG11c3QgYWxzbyByZWNvbXB1dGUgaXRzIHByZXNlbnRf cGFydHMKLQkJICogYml0bWFwLgorCQkgKiBXaXRoaW4gZWFjaCBoaWVyYXJjaHksIHdlIHBlcmZv cm0gdGhpcyBsb29wIGluIGJhY2stdG8tZnJvbnQKKwkJICogb3JkZXIgc28gdGhhdCB3ZSBkZXRl cm1pbmUgcHJlc2VudF9wYXJ0cyBmb3IgdGhlIGxvd2VzdC1sZXZlbAorCQkgKiBwYXJ0aXRpb25l ZCB0YWJsZXMgZmlyc3QuICBUaGlzIHdheSB3ZSBjYW4gdGVsbCB3aGV0aGVyIGEKKwkJICogc3Vi LXBhcnRpdGlvbmVkIHRhYmxlJ3MgcGFydGl0aW9ucyB3ZXJlIGVudGlyZWx5IHBydW5lZCBzbyB3 ZQorCQkgKiBjYW4gZXhjbHVkZSBpdCBmcm9tIHRoZSBjdXJyZW50IGxldmVsJ3MgcHJlc2VudF9w YXJ0cy4KIAkJICovCi0JCWZvciAoaSA9IDA7IGkgPCBwcnVuZXN0YXRlLT5udW1fcGFydHBydW5l ZGF0YTsgaSsrKQorCQlmb3IgKGogPSBwcnVuZWRhdGEtPm51bV9wYXJ0cmVscHJ1bmVkYXRhIC0g MTsgaiA+PSAwOyBqLS0pCiAJCXsKLQkJCVBhcnRpdGlvblBydW5pbmdEYXRhICpwcnVuZWRhdGEg PSBwcnVuZXN0YXRlLT5wYXJ0cHJ1bmVkYXRhW2ldOwotCQkJaW50CQkJajsKKwkJCVBhcnRpdGlv bmVkUmVsUHJ1bmluZ0RhdGEgKnBwcnVuZSA9ICZwcnVuZWRhdGEtPnBhcnRyZWxwcnVuZWRhdGFb al07CisJCQlpbnQJCQlucGFydHMgPSBwcHJ1bmUtPm5wYXJ0czsKKwkJCWludAkJCWs7CiAKLQkJ CS8qCi0JCQkgKiBXaXRoaW4gZWFjaCBoaWVyYXJjaHksIHdlIHBlcmZvcm0gdGhpcyBsb29wIGlu IGJhY2stdG8tZnJvbnQKLQkJCSAqIG9yZGVyIHNvIHRoYXQgd2UgZGV0ZXJtaW5lIHByZXNlbnRf cGFydHMgZm9yIHRoZSBsb3dlc3QtbGV2ZWwKLQkJCSAqIHBhcnRpdGlvbmVkIHRhYmxlcyBmaXJz dC4gIFRoaXMgd2F5IHdlIGNhbiB0ZWxsIHdoZXRoZXIgYQotCQkJICogc3ViLXBhcnRpdGlvbmVk IHRhYmxlJ3MgcGFydGl0aW9ucyB3ZXJlIGVudGlyZWx5IHBydW5lZCBzbyB3ZQotCQkJICogY2Fu IGV4Y2x1ZGUgaXQgZnJvbSB0aGUgY3VycmVudCBsZXZlbCdzIHByZXNlbnRfcGFydHMuCi0JCQkg Ki8KLQkJCWZvciAoaiA9IHBydW5lZGF0YS0+bnVtX3BhcnRyZWxwcnVuZWRhdGEgLSAxOyBqID49 IDA7IGotLSkKLQkJCXsKLQkJCQlQYXJ0aXRpb25lZFJlbFBydW5pbmdEYXRhICpwcHJ1bmUgPSAm cHJ1bmVkYXRhLT5wYXJ0cmVscHJ1bmVkYXRhW2pdOwotCQkJCWludAkJCW5wYXJ0cyA9IHBwcnVu ZS0+bnBhcnRzOwotCQkJCWludAkJCWs7CisJCQkvKiBXZSBqdXN0IHJlYnVpbGQgcHJlc2VudF9w YXJ0cyBmcm9tIHNjcmF0Y2ggKi8KKwkJCWJtc19mcmVlKHBwcnVuZS0+cHJlc2VudF9wYXJ0cyk7 CisJCQlwcHJ1bmUtPnByZXNlbnRfcGFydHMgPSBOVUxMOwogCi0JCQkJLyogV2UganVzdCByZWJ1 aWxkIHByZXNlbnRfcGFydHMgZnJvbSBzY3JhdGNoICovCi0JCQkJYm1zX2ZyZWUocHBydW5lLT5w cmVzZW50X3BhcnRzKTsKLQkJCQlwcHJ1bmUtPnByZXNlbnRfcGFydHMgPSBOVUxMOworCQkJZm9y IChrID0gMDsgayA8IG5wYXJ0czsgaysrKQorCQkJeworCQkJCWludAkJCW9sZGlkeCA9IHBwcnVu ZS0+c3VicGxhbl9tYXBba107CisJCQkJaW50CQkJc3ViaWR4OwogCi0JCQkJZm9yIChrID0gMDsg ayA8IG5wYXJ0czsgaysrKQorCQkJCS8qCisJCQkJICogSWYgdGhpcyBwYXJ0aXRpb24gZXhpc3Rl ZCBhcyBhIHN1YnBsYW4gdGhlbiBjaGFuZ2UgdGhlCisJCQkJICogb2xkIHN1YnBsYW4gaW5kZXgg dG8gdGhlIG5ldyBzdWJwbGFuIGluZGV4LiAgVGhlIG5ldworCQkJCSAqIGluZGV4IG1heSBiZWNv bWUgLTEgaWYgdGhlIHBhcnRpdGlvbiB3YXMgcHJ1bmVkIGFib3ZlLAorCQkJCSAqIG9yIGl0IG1h eSBqdXN0IGNvbWUgZWFybGllciBpbiB0aGUgc3VicGxhbiBsaXN0IGR1ZSB0bworCQkJCSAqIHNv bWUgc3VicGxhbnMgYmVpbmcgcmVtb3ZlZCBlYXJsaWVyIGluIHRoZSBsaXN0LiAgSWYKKwkJCQkg KiBpdCdzIGEgc3VicGFydGl0aW9uLCBhZGQgaXQgdG8gcHJlc2VudF9wYXJ0cyB1bmxlc3MKKwkJ CQkgKiBpdCdzIGVudGlyZWx5IHBydW5lZC4KKwkJCQkgKi8KKwkJCQlpZiAob2xkaWR4ID49IDAp CiAJCQkJewotCQkJCQlpbnQJCQlvbGRpZHggPSBwcHJ1bmUtPnN1YnBsYW5fbWFwW2tdOwotCQkJ CQlpbnQJCQlzdWJpZHg7Ci0KLQkJCQkJLyoKLQkJCQkJICogSWYgdGhpcyBwYXJ0aXRpb24gZXhp c3RlZCBhcyBhIHN1YnBsYW4gdGhlbiBjaGFuZ2UgdGhlCi0JCQkJCSAqIG9sZCBzdWJwbGFuIGlu ZGV4IHRvIHRoZSBuZXcgc3VicGxhbiBpbmRleC4gIFRoZSBuZXcKLQkJCQkJICogaW5kZXggbWF5 IGJlY29tZSAtMSBpZiB0aGUgcGFydGl0aW9uIHdhcyBwcnVuZWQgYWJvdmUsCi0JCQkJCSAqIG9y IGl0IG1heSBqdXN0IGNvbWUgZWFybGllciBpbiB0aGUgc3VicGxhbiBsaXN0IGR1ZSB0bwotCQkJ CQkgKiBzb21lIHN1YnBsYW5zIGJlaW5nIHJlbW92ZWQgZWFybGllciBpbiB0aGUgbGlzdC4gIElm Ci0JCQkJCSAqIGl0J3MgYSBzdWJwYXJ0aXRpb24sIGFkZCBpdCB0byBwcmVzZW50X3BhcnRzIHVu bGVzcwotCQkJCQkgKiBpdCdzIGVudGlyZWx5IHBydW5lZC4KLQkJCQkJICovCi0JCQkJCWlmIChv bGRpZHggPj0gMCkKLQkJCQkJewotCQkJCQkJQXNzZXJ0KG9sZGlkeCA8IG5zdWJwbGFucyk7Ci0J CQkJCQlwcHJ1bmUtPnN1YnBsYW5fbWFwW2tdID0gbmV3X3N1YnBsYW5faW5kZXhlc1tvbGRpZHhd IC0gMTsKKwkJCQkJQXNzZXJ0KG9sZGlkeCA8IG5fdG90YWxfc3VicGxhbnMpOworCQkJCQlwcHJ1 bmUtPnN1YnBsYW5fbWFwW2tdID0gbmV3X3N1YnBsYW5faW5kZXhlc1tvbGRpZHhdIC0gMTsKIAot CQkJCQkJaWYgKG5ld19zdWJwbGFuX2luZGV4ZXNbb2xkaWR4XSA+IDApCi0JCQkJCQkJcHBydW5l LT5wcmVzZW50X3BhcnRzID0KLQkJCQkJCQkJYm1zX2FkZF9tZW1iZXIocHBydW5lLT5wcmVzZW50 X3BhcnRzLCBrKTsKLQkJCQkJfQotCQkJCQllbHNlIGlmICgoc3ViaWR4ID0gcHBydW5lLT5zdWJw YXJ0X21hcFtrXSkgPj0gMCkKLQkJCQkJewotCQkJCQkJUGFydGl0aW9uZWRSZWxQcnVuaW5nRGF0 YSAqc3VicHJ1bmU7CisJCQkJCWlmIChuZXdfc3VicGxhbl9pbmRleGVzW29sZGlkeF0gPiAwKQor CQkJCQkJcHBydW5lLT5wcmVzZW50X3BhcnRzID0KKwkJCQkJCQlibXNfYWRkX21lbWJlcihwcHJ1 bmUtPnByZXNlbnRfcGFydHMsIGspOworCQkJCX0KKwkJCQllbHNlIGlmICgoc3ViaWR4ID0gcHBy dW5lLT5zdWJwYXJ0X21hcFtrXSkgPj0gMCkKKwkJCQl7CisJCQkJCVBhcnRpdGlvbmVkUmVsUHJ1 bmluZ0RhdGEgKnN1YnBydW5lOwogCi0JCQkJCQlzdWJwcnVuZSA9ICZwcnVuZWRhdGEtPnBhcnRy ZWxwcnVuZWRhdGFbc3ViaWR4XTsKKwkJCQkJc3VicHJ1bmUgPSAmcHJ1bmVkYXRhLT5wYXJ0cmVs cHJ1bmVkYXRhW3N1YmlkeF07CiAKLQkJCQkJCWlmICghYm1zX2lzX2VtcHR5KHN1YnBydW5lLT5w cmVzZW50X3BhcnRzKSkKLQkJCQkJCQlwcHJ1bmUtPnByZXNlbnRfcGFydHMgPQotCQkJCQkJCQli bXNfYWRkX21lbWJlcihwcHJ1bmUtPnByZXNlbnRfcGFydHMsIGspOwotCQkJCQl9CisJCQkJCWlm ICghYm1zX2lzX2VtcHR5KHN1YnBydW5lLT5wcmVzZW50X3BhcnRzKSkKKwkJCQkJCXBwcnVuZS0+ cHJlc2VudF9wYXJ0cyA9CisJCQkJCQkJYm1zX2FkZF9tZW1iZXIocHBydW5lLT5wcmVzZW50X3Bh cnRzLCBrKTsKIAkJCQl9CiAJCQl9CiAJCX0KKwl9CiAKLQkJLyoKLQkJICogV2UgbXVzdCBhbHNv IHJlY29tcHV0ZSB0aGUgb3RoZXJfc3VicGxhbnMgc2V0LCBzaW5jZSBpbmRleGVzIGluIGl0Ci0J CSAqIG1heSBjaGFuZ2UuCi0JCSAqLwotCQluZXdfb3RoZXJfc3VicGxhbnMgPSBOVUxMOwotCQlp ID0gLTE7Ci0JCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihwcnVuZXN0YXRlLT5vdGhlcl9z dWJwbGFucywgaSkpID49IDApCi0JCQluZXdfb3RoZXJfc3VicGxhbnMgPSBibXNfYWRkX21lbWJl cihuZXdfb3RoZXJfc3VicGxhbnMsCi0JCQkJCQkJCQkJCQluZXdfc3VicGxhbl9pbmRleGVzW2ld IC0gMSk7Ci0KLQkJYm1zX2ZyZWUocHJ1bmVzdGF0ZS0+b3RoZXJfc3VicGxhbnMpOwotCQlwcnVu ZXN0YXRlLT5vdGhlcl9zdWJwbGFucyA9IG5ld19vdGhlcl9zdWJwbGFuczsKKwkvKgorCSAqIFdl IG11c3QgYWxzbyByZWNvbXB1dGUgdGhlIG90aGVyX3N1YnBsYW5zIHNldCwgc2luY2UgaW5kZXhl cyBpbiBpdAorCSAqIG1heSBjaGFuZ2UuCisJICovCisJbmV3X290aGVyX3N1YnBsYW5zID0gTlVM TDsKKwlpID0gLTE7CisJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKHBydW5lc3RhdGUtPm90 aGVyX3N1YnBsYW5zLCBpKSkgPj0gMCkKKwkJbmV3X290aGVyX3N1YnBsYW5zID0gYm1zX2FkZF9t ZW1iZXIobmV3X290aGVyX3N1YnBsYW5zLAorCQkJCQkJCQkJCQluZXdfc3VicGxhbl9pbmRleGVz W2ldIC0gMSk7CiAKLQkJcGZyZWUobmV3X3N1YnBsYW5faW5kZXhlcyk7Ci0JfQorCWJtc19mcmVl KHBydW5lc3RhdGUtPm90aGVyX3N1YnBsYW5zKTsKKwlwcnVuZXN0YXRlLT5vdGhlcl9zdWJwbGFu cyA9IG5ld19vdGhlcl9zdWJwbGFuczsKIAotCXJldHVybiByZXN1bHQ7CisJcGZyZWUobmV3X3N1 YnBsYW5faW5kZXhlcyk7CiB9CiAKIC8qCkBAIC0yMDE4LDExICsyMDk5LDE2IEBAIEV4ZWNGaW5k TWF0Y2hpbmdTdWJQbGFucyhQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlKQogCQlwcnVu ZWRhdGEgPSBwcnVuZXN0YXRlLT5wYXJ0cHJ1bmVkYXRhW2ldOwogCQlwcHJ1bmUgPSAmcHJ1bmVk YXRhLT5wYXJ0cmVscHJ1bmVkYXRhWzBdOwogCisJCS8qCisJCSAqIFdlIHBhc3MgdGhlIDFzdCBp dGVtIGJlbG9uZ2luZyB0byB0aGUgcm9vdCB0YWJsZSBvZiB0aGUgaGllcmFyY2h5CisJCSAqIGFu ZCBmaW5kX21hdGNoaW5nX3N1YnBsYW5zX3JlY3Vyc2UoKSB0YWtlcyBjYXJlIG9mIHJlY3Vyc2lu ZyB0bworCQkgKiBvdGhlciAobG93ZXItbGV2ZWwpIHBhcmVudHMgYXMgbmVlZGVkLgorCQkgKi8K IAkJZmluZF9tYXRjaGluZ19zdWJwbGFuc19yZWN1cnNlKHBydW5lZGF0YSwgcHBydW5lLCBmYWxz ZSwgJnJlc3VsdCk7CiAKLQkJLyogRXhwcmVzc2lvbiBldmFsIG1heSBoYXZlIHVzZWQgc3BhY2Ug aW4gbm9kZSdzIHBzX0V4cHJDb250ZXh0IHRvbyAqLworCQkvKiBFeHByZXNzaW9uIGV2YWwgbWF5 IGhhdmUgdXNlZCBzcGFjZSBpbiBFeHByQ29udGV4dCB0b28gKi8KIAkJaWYgKHBwcnVuZS0+ZXhl Y19wcnVuaW5nX3N0ZXBzKQotCQkJUmVzZXRFeHByQ29udGV4dChwcHJ1bmUtPmV4ZWNfY29udGV4 dC5wbGFuc3RhdGUtPnBzX0V4cHJDb250ZXh0KTsKKwkJCVJlc2V0RXhwckNvbnRleHQocHBydW5l LT5leGVjX2NvbnRleHQuZXhwcmNvbnRleHQpOwogCX0KIAogCS8qIEFkZCBpbiBhbnkgc3VicGxh bnMgdGhhdCBwYXJ0aXRpb24gcHJ1bmluZyBkaWRuJ3QgYWNjb3VudCBmb3IgKi8KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBlbmQuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL25vZGVBcHBlbmQuYwppbmRleCA3OTM3ZjFjODhmLi41YjZkM2ViMjNiIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQXBwZW5kLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZUFwcGVuZC5jCkBAIC0xMzgsMzAgKzEzOCwxNyBAQCBFeGVjSW5pdEFwcGVuZChB cHBlbmQgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCXsKIAkJUGFydGl0aW9u UHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0ZTsKIAotCQkvKiBXZSBtYXkgbmVlZCBhbiBleHByZXNzaW9u IGNvbnRleHQgdG8gZXZhbHVhdGUgcGFydGl0aW9uIGV4cHJzICovCi0JCUV4ZWNBc3NpZ25FeHBy Q29udGV4dChlc3RhdGUsICZhcHBlbmRzdGF0ZS0+cHMpOwotCi0JCS8qIENyZWF0ZSB0aGUgd29y a2luZyBkYXRhIHN0cnVjdHVyZSBmb3IgcHJ1bmluZy4gKi8KLQkJcHJ1bmVzdGF0ZSA9IEV4ZWND cmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlKCZhcHBlbmRzdGF0ZS0+cHMsCi0JCQkJCQkJCQkJCQkg ICBub2RlLT5wYXJ0X3BydW5lX2luZm8pOworCQkvKgorCQkgKiBTZXQgdXAgcHJ1bmluZyBkYXRh IHN0cnVjdHVyZS4gIEluaXRpYWwgcHJ1bmluZyBzdGVwcywgaWYgYW55LCBhcmUKKwkJICogcGVy Zm9ybWVkIGFzIHBhcnQgb2YgdGhlIHNldHVwLCBhZGRpbmcgdGhlIHNldCBvZiBpbmRleGVzIG9m CisJCSAqIHN1cnZpdmluZyBzdWJwbGFucyB0byAndmFsaWRzdWJwbGFucycuCisJCSAqLworCQlw cnVuZXN0YXRlID0gRXhlY0luaXRQYXJ0aXRpb25QcnVuaW5nKCZhcHBlbmRzdGF0ZS0+cHMsCisJ CQkJCQkJCQkJCSAgbGlzdF9sZW5ndGgobm9kZS0+YXBwZW5kcGxhbnMpLAorCQkJCQkJCQkJCQkg IG5vZGUtPnBhcnRfcHJ1bmVfaW5mbywKKwkJCQkJCQkJCQkJICAmdmFsaWRzdWJwbGFucyk7CiAJ CWFwcGVuZHN0YXRlLT5hc19wcnVuZV9zdGF0ZSA9IHBydW5lc3RhdGU7Ci0KLQkJLyogUGVyZm9y bSBhbiBpbml0aWFsIHBhcnRpdGlvbiBwcnVuZSwgaWYgcmVxdWlyZWQuICovCi0JCWlmIChwcnVu ZXN0YXRlLT5kb19pbml0aWFsX3BydW5lKQotCQl7Ci0JCQkvKiBEZXRlcm1pbmUgd2hpY2ggc3Vi cGxhbnMgc3Vydml2ZSBpbml0aWFsIHBydW5pbmcgKi8KLQkJCXZhbGlkc3VicGxhbnMgPSBFeGVj RmluZEluaXRpYWxNYXRjaGluZ1N1YlBsYW5zKHBydW5lc3RhdGUsCi0JCQkJCQkJCQkJCQkJCQls aXN0X2xlbmd0aChub2RlLT5hcHBlbmRwbGFucykpOwotCi0JCQlucGxhbnMgPSBibXNfbnVtX21l bWJlcnModmFsaWRzdWJwbGFucyk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQkvKiBXZSdsbCBuZWVk IHRvIGluaXRpYWxpemUgYWxsIHN1YnBsYW5zICovCi0JCQlucGxhbnMgPSBsaXN0X2xlbmd0aChu b2RlLT5hcHBlbmRwbGFucyk7Ci0JCQlBc3NlcnQobnBsYW5zID4gMCk7Ci0JCQl2YWxpZHN1YnBs YW5zID0gYm1zX2FkZF9yYW5nZShOVUxMLCAwLCBucGxhbnMgLSAxKTsKLQkJfQorCQlucGxhbnMg PSBibXNfbnVtX21lbWJlcnModmFsaWRzdWJwbGFucyk7CiAKIAkJLyoKIAkJICogV2hlbiBubyBy dW4tdGltZSBwcnVuaW5nIGlzIHJlcXVpcmVkIGFuZCB0aGVyZSdzIGF0IGxlYXN0IG9uZQpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMgYi9zcmMvYmFj a2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYwppbmRleCA0MThmODlkZWE4Li45YTlmMjll ODQ1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYwor KysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYwpAQCAtODYsMjkgKzg2 LDE3IEBAIEV4ZWNJbml0TWVyZ2VBcHBlbmQoTWVyZ2VBcHBlbmQgKm5vZGUsIEVTdGF0ZSAqZXN0 YXRlLCBpbnQgZWZsYWdzKQogCXsKIAkJUGFydGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0ZTsK IAotCQkvKiBXZSBtYXkgbmVlZCBhbiBleHByZXNzaW9uIGNvbnRleHQgdG8gZXZhbHVhdGUgcGFy dGl0aW9uIGV4cHJzICovCi0JCUV4ZWNBc3NpZ25FeHByQ29udGV4dChlc3RhdGUsICZtZXJnZXN0 YXRlLT5wcyk7Ci0KLQkJcHJ1bmVzdGF0ZSA9IEV4ZWNDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRl KCZtZXJnZXN0YXRlLT5wcywKLQkJCQkJCQkJCQkJCSAgIG5vZGUtPnBhcnRfcHJ1bmVfaW5mbyk7 CisJCS8qCisJCSAqIFNldCB1cCBwcnVuaW5nIGRhdGEgc3RydWN0dXJlLiAgSW5pdGlhbCBwcnVu aW5nIHN0ZXBzLCBpZiBhbnksIGFyZQorCQkgKiBwZXJmb3JtZWQgYXMgcGFydCBvZiB0aGUgc2V0 dXAsIGFkZGluZyB0aGUgc2V0IG9mIGluZGV4ZXMgb2YKKwkJICogc3Vydml2aW5nIHN1YnBsYW5z IHRvICd2YWxpZHN1YnBsYW5zJy4KKwkJICovCisJCXBydW5lc3RhdGUgPSBFeGVjSW5pdFBhcnRp dGlvblBydW5pbmcoJm1lcmdlc3RhdGUtPnBzLAorCQkJCQkJCQkJCQkgIGxpc3RfbGVuZ3RoKG5v ZGUtPm1lcmdlcGxhbnMpLAorCQkJCQkJCQkJCQkgIG5vZGUtPnBhcnRfcHJ1bmVfaW5mbywKKwkJ CQkJCQkJCQkJICAmdmFsaWRzdWJwbGFucyk7CiAJCW1lcmdlc3RhdGUtPm1zX3BydW5lX3N0YXRl ID0gcHJ1bmVzdGF0ZTsKLQotCQkvKiBQZXJmb3JtIGFuIGluaXRpYWwgcGFydGl0aW9uIHBydW5l LCBpZiByZXF1aXJlZC4gKi8KLQkJaWYgKHBydW5lc3RhdGUtPmRvX2luaXRpYWxfcHJ1bmUpCi0J CXsKLQkJCS8qIERldGVybWluZSB3aGljaCBzdWJwbGFucyBzdXJ2aXZlIGluaXRpYWwgcHJ1bmlu ZyAqLwotCQkJdmFsaWRzdWJwbGFucyA9IEV4ZWNGaW5kSW5pdGlhbE1hdGNoaW5nU3ViUGxhbnMo cHJ1bmVzdGF0ZSwKLQkJCQkJCQkJCQkJCQkJCWxpc3RfbGVuZ3RoKG5vZGUtPm1lcmdlcGxhbnMp KTsKLQotCQkJbnBsYW5zID0gYm1zX251bV9tZW1iZXJzKHZhbGlkc3VicGxhbnMpOwotCQl9Ci0J CWVsc2UKLQkJewotCQkJLyogV2UnbGwgbmVlZCB0byBpbml0aWFsaXplIGFsbCBzdWJwbGFucyAq LwotCQkJbnBsYW5zID0gbGlzdF9sZW5ndGgobm9kZS0+bWVyZ2VwbGFucyk7Ci0JCQlBc3NlcnQo bnBsYW5zID4gMCk7Ci0JCQl2YWxpZHN1YnBsYW5zID0gYm1zX2FkZF9yYW5nZShOVUxMLCAwLCBu cGxhbnMgLSAxKTsKLQkJfQorCQlucGxhbnMgPSBibXNfbnVtX21lbWJlcnModmFsaWRzdWJwbGFu cyk7CiAKIAkJLyoKIAkJICogV2hlbiBubyBydW4tdGltZSBwcnVuaW5nIGlzIHJlcXVpcmVkIGFu ZCB0aGVyZSdzIGF0IGxlYXN0IG9uZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFydGl0aW9u aW5nL3BhcnRwcnVuZS5jIGIvc3JjL2JhY2tlbmQvcGFydGl0aW9uaW5nL3BhcnRwcnVuZS5jCmlu ZGV4IDFiYzAwODI2YzEuLjcwODBjYjI1ZDkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnRp dGlvbmluZy9wYXJ0cHJ1bmUuYworKysgYi9zcmMvYmFja2VuZC9wYXJ0aXRpb25pbmcvcGFydHBy dW5lLmMKQEAgLTc5OCw2ICs3OTgsNyBAQCBwcnVuZV9hcHBlbmRfcmVsX3BhcnRpdGlvbnMoUmVs T3B0SW5mbyAqcmVsKQogCiAJLyogVGhlc2UgYXJlIG5vdCB2YWxpZCB3aGVuIGJlaW5nIGNhbGxl ZCBmcm9tIHRoZSBwbGFubmVyICovCiAJY29udGV4dC5wbGFuc3RhdGUgPSBOVUxMOworCWNvbnRl eHQuZXhwcmNvbnRleHQgPSBOVUxMOwogCWNvbnRleHQuZXhwcnN0YXRlcyA9IE5VTEw7CiAKIAkv KiBBY3R1YWwgcHJ1bmluZyBoYXBwZW5zIGhlcmUuICovCkBAIC04MDgsOCArODA5LDggQEAgcHJ1 bmVfYXBwZW5kX3JlbF9wYXJ0aXRpb25zKFJlbE9wdEluZm8gKnJlbCkKICAqIGdldF9tYXRjaGlu Z19wYXJ0aXRpb25zCiAgKgkJRGV0ZXJtaW5lIHBhcnRpdGlvbnMgdGhhdCBzdXJ2aXZlIHBhcnRp dGlvbiBwcnVuaW5nCiAgKgotICogTm90ZTogY29udGV4dC0+cGxhbnN0YXRlIG11c3QgYmUgc2V0 IHRvIGEgdmFsaWQgUGxhblN0YXRlIHdoZW4gdGhlCi0gKiBwcnVuaW5nX3N0ZXBzIHdlcmUgZ2Vu ZXJhdGVkIHdpdGggYSB0YXJnZXQgb3RoZXIgdGhhbiBQQVJUVEFSR0VUX1BMQU5ORVIuCisgKiBO b3RlOiBjb250ZXh0LT5leHByY29udGV4dCBtdXN0IGJlIHZhbGlkIHdoZW4gdGhlIHBydW5pbmdf c3RlcHMgd2VyZQorICogZ2VuZXJhdGVkIHdpdGggYSB0YXJnZXQgb3RoZXIgdGhhbiBQQVJUVEFS R0VUX1BMQU5ORVIuCiAgKgogICogUmV0dXJucyBhIEJpdG1hcHNldCBvZiB0aGUgUmVsT3B0SW5m by0+cGFydF9yZWxzIGluZGV4ZXMgb2YgdGhlIHN1cnZpdmluZwogICogcGFydGl0aW9ucy4KQEAg LTM2NTQsNyArMzY1NSw3IEBAIG1hdGNoX2Jvb2xlYW5fcGFydGl0aW9uX2NsYXVzZShPaWQgcGFy dG9wZmFtaWx5LCBFeHByICpjbGF1c2UsIEV4cHIgKnBhcnRrZXksCiAgKiBleHByc3RhdGUgYXJy YXkuCiAgKgogICogTm90ZSB0aGF0IHRoZSBldmFsdWF0ZWQgcmVzdWx0IG1heSBiZSBpbiB0aGUg cGVyLXR1cGxlIG1lbW9yeSBjb250ZXh0IG9mCi0gKiBjb250ZXh0LT5wbGFuc3RhdGUtPnBzX0V4 cHJDb250ZXh0LCBhbmQgd2UgbWF5IGhhdmUgbGVha2VkIG90aGVyIG1lbW9yeQorICogY29udGV4 dC0+ZXhwcmNvbnRleHQsIGFuZCB3ZSBtYXkgaGF2ZSBsZWFrZWQgb3RoZXIgbWVtb3J5CiAgKiB0 aGVyZSB0b28uICBUaGlzIG1lbW9yeSBtdXN0IGJlIHJlY292ZXJlZCBieSByZXNldHRpbmcgdGhh dCBFeHByQ29udGV4dAogICogYWZ0ZXIgd2UncmUgZG9uZSB3aXRoIHRoZSBwcnVuaW5nIG9wZXJh dGlvbiAoc2VlIGV4ZWNQYXJ0aXRpb24uYykuCiAgKi8KQEAgLTM2NzcsMTMgKzM2NzgsMTggQEAg cGFydGtleV9kYXR1bV9mcm9tX2V4cHIoUGFydGl0aW9uUHJ1bmVDb250ZXh0ICpjb250ZXh0LAog CQlFeHByQ29udGV4dCAqZWN0eDsKIAogCQkvKgotCQkgKiBXZSBzaG91bGQgbmV2ZXIgc2VlIGEg bm9uLUNvbnN0IGluIGEgc3RlcCB1bmxlc3Mgd2UncmUgcnVubmluZyBpbgotCQkgKiB0aGUgZXhl Y3V0b3IuCisJCSAqIFdlIHNob3VsZCBuZXZlciBzZWUgYSBub24tQ29uc3QgaW4gYSBzdGVwIHVu bGVzcyB0aGUgY2FsbGVyIGhhcworCQkgKiBwYXNzZWQgYSB2YWxpZCBFeHByQ29udGV4dC4KKwkJ ICoKKwkJICogV2hlbiBjb250ZXh0LT5wbGFuc3RhdGUgaXMgdmFsaWQsIGNvbnRleHQtPmV4cHJj b250ZXh0IGlzIHNhbWUKKwkJICogYXMgY29udGV4dC0+cGxhbnN0YXRlLT5wc19FeHByQ29udGV4 dC4KIAkJICovCi0JCUFzc2VydChjb250ZXh0LT5wbGFuc3RhdGUgIT0gTlVMTCk7CisJCUFzc2Vy dChjb250ZXh0LT5wbGFuc3RhdGUgIT0gTlVMTCB8fCBjb250ZXh0LT5leHByY29udGV4dCAhPSBO VUxMKTsKKwkJQXNzZXJ0KGNvbnRleHQtPnBsYW5zdGF0ZSA9PSBOVUxMIHx8CisJCQkgICAoY29u dGV4dC0+ZXhwcmNvbnRleHQgPT0gY29udGV4dC0+cGxhbnN0YXRlLT5wc19FeHByQ29udGV4dCkp OwogCiAJCWV4cHJzdGF0ZSA9IGNvbnRleHQtPmV4cHJzdGF0ZXNbc3RhdGVpZHhdOwotCQllY3R4 ID0gY29udGV4dC0+cGxhbnN0YXRlLT5wc19FeHByQ29udGV4dDsKKwkJZWN0eCA9IGNvbnRleHQt PmV4cHJjb250ZXh0OwogCQkqdmFsdWUgPSBFeGVjRXZhbEV4cHJTd2l0Y2hDb250ZXh0KGV4cHJz dGF0ZSwgZWN0eCwgaXNudWxsKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVj dXRvci9leGVjUGFydGl0aW9uLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjUGFydGl0aW9u LmgKaW5kZXggNjAzZDhiZWNjNC4uZmQ1NzM1YTk0NiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv ZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oCisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNQ YXJ0aXRpb24uaApAQCAtMTE5LDEwICsxMTksOSBAQCBleHRlcm4gUmVzdWx0UmVsSW5mbyAqRXhl Y0ZpbmRQYXJ0aXRpb24oTW9kaWZ5VGFibGVTdGF0ZSAqbXRzdGF0ZSwKIAkJCQkJCQkJCQlFU3Rh dGUgKmVzdGF0ZSk7CiBleHRlcm4gdm9pZCBFeGVjQ2xlYW51cFR1cGxlUm91dGluZyhNb2RpZnlU YWJsZVN0YXRlICptdHN0YXRlLAogCQkJCQkJCQkJUGFydGl0aW9uVHVwbGVSb3V0aW5nICpwcm91 dGUpOwotZXh0ZXJuIFBhcnRpdGlvblBydW5lU3RhdGUgKkV4ZWNDcmVhdGVQYXJ0aXRpb25QcnVu ZVN0YXRlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLAotCQkJCQkJCQkJCQkJCQkgIFBhcnRpdGlvblBy dW5lSW5mbyAqcGFydGl0aW9ucHJ1bmVpbmZvKTsKK2V4dGVybiBQYXJ0aXRpb25QcnVuZVN0YXRl ICpFeGVjSW5pdFBhcnRpdGlvblBydW5pbmcoUGxhblN0YXRlICpwbGFuc3RhdGUsCisJCQkJCQkg aW50IG5fdG90YWxfc3VicGxhbnMsCisJCQkJCQkgUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWlu Zm8sCisJCQkJCQkgQml0bWFwc2V0ICoqaW5pdGlhbGx5X3ZhbGlkX3N1YnBsYW5zKTsKIGV4dGVy biBCaXRtYXBzZXQgKkV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhQYXJ0aXRpb25QcnVuZVN0YXRl ICpwcnVuZXN0YXRlKTsKLWV4dGVybiBCaXRtYXBzZXQgKkV4ZWNGaW5kSW5pdGlhbE1hdGNoaW5n U3ViUGxhbnMoUGFydGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0ZSwKLQkJCQkJCQkJCQkJCSAg aW50IG5zdWJwbGFucyk7Ci0KICNlbmRpZgkJCQkJCQkvKiBFWEVDUEFSVElUSU9OX0ggKi8KZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3BhcnRpdGlvbmluZy9wYXJ0cHJ1bmUuaCBiL3NyYy9pbmNs dWRlL3BhcnRpdGlvbmluZy9wYXJ0cHJ1bmUuaAppbmRleCBlZTExYjZmZWFlLi45MDY4NGVmYTI1 IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wYXJ0aXRpb25pbmcvcGFydHBydW5lLmgKKysrIGIv c3JjL2luY2x1ZGUvcGFydGl0aW9uaW5nL3BhcnRwcnVuZS5oCkBAIC00MSw2ICs0MSw3IEBAIHN0 cnVjdCBSZWxPcHRJbmZvOwogICoJCQkJCXN1YnNpZGlhcnkgZGF0YSwgc3VjaCBhcyB0aGUgRm1n ckluZm9zLgogICogcGxhbnN0YXRlCQlQb2ludHMgdG8gdGhlIHBhcmVudCBwbGFuIG5vZGUncyBQ bGFuU3RhdGUgd2hlbiBjYWxsZWQKICAqCQkJCQlkdXJpbmcgZXhlY3V0aW9uOyBOVUxMIHdoZW4g Y2FsbGVkIGZyb20gdGhlIHBsYW5uZXIuCisgKiBleHByY29udGV4dAkJRXhwckNvbnRleHQgdG8g dXNlIHdoZW4gZXZhbHVhdGluZyBwcnVuaW5nIGV4cHJlc3Npb25zCiAgKiBleHByc3RhdGVzCQlB cnJheSBvZiBFeHByU3RhdGVzLCBpbmRleGVkIGFzIHBlciBQcnVuZUN4dFN0YXRlSWR4OyBvbmUK ICAqCQkJCQlmb3IgZWFjaCBwYXJ0aXRpb24ga2V5IGluIGVhY2ggcHJ1bmluZyBzdGVwLiAgQWxs b2NhdGVkIGlmCiAgKgkJCQkJcGxhbnN0YXRlIGlzIG5vbi1OVUxMLCBvdGhlcndpc2UgTlVMTC4K QEAgLTU2LDYgKzU3LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUGFydGl0aW9uUHJ1bmVDb250ZXh0CiAJ Rm1nckluZm8gICAqc3RlcGNtcGZ1bmNzOwogCU1lbW9yeUNvbnRleHQgcHBjY29udGV4dDsKIAlQ bGFuU3RhdGUgICpwbGFuc3RhdGU7CisJRXhwckNvbnRleHQgKmV4cHJjb250ZXh0OwogCUV4cHJT dGF0ZSAqKmV4cHJzdGF0ZXM7CiB9IFBhcnRpdGlvblBydW5lQ29udGV4dDsKIAotLSAKMi4yNC4x Cgo= --00000000000022c13705db421aa9--