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 1nbzya-0007dm-Ns for pgsql-hackers@arkaria.postgresql.org; Wed, 06 Apr 2022 07:21:13 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nbzyZ-0001ze-KC for pgsql-hackers@arkaria.postgresql.org; Wed, 06 Apr 2022 07:21:11 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nbzyY-0001zV-M7 for pgsql-hackers@lists.postgresql.org; Wed, 06 Apr 2022 07:21:11 +0000 Received: from mail-ej1-x62a.google.com ([2a00:1450:4864:20::62a]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1nbzyS-0000fw-1X for pgsql-hackers@postgresql.org; Wed, 06 Apr 2022 07:21:09 +0000 Received: by mail-ej1-x62a.google.com with SMTP id bh17so2338478ejb.8 for ; Wed, 06 Apr 2022 00:21:03 -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=NFqtPniGwrB5YBGzBkd4hsmuMsb2sfCbKlTe2D6DXL0=; b=lSBwKSQZS4dkWZoc0YXyaJqSNJmkOFpyWz6CNHVmrXgtvmClMa+c10QYJe9IplVDld 3nLwPT+UdrQX7xu0tzMowmsDewTv4kajnAiSLmG+ADXgEJBYOBuVeZWrmGW/kr8TYd4k rQCj5XlpPppXXFeVwR126j91a0zRjWCNTxROXlvXl1KW3jy7s5TnXYHww72vChNQPm17 SzQfeZFoueov1ln5DVUAzPhDPLNT8q62aNsuGH+9l3fwrqnvOBw/xeEoJNOBvjotnXtn e/pvTd6G0VXWW82hh5D751+wc+22adZjINNzNsohFoL/K5SsNGUc+jjEQw8Ocli4pUqX D9TA== 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=NFqtPniGwrB5YBGzBkd4hsmuMsb2sfCbKlTe2D6DXL0=; b=YACqotPPqMKlqIJLNUCdjvzdW/E61Q/AkmPHK41nQbz4MMbxUlYtqgz+6JjzhnPwar hem11ato7wyuf+3IzldWW8Qyd3R1vFxcDf0NaQK8NxykSc+JzvcFdY4BgV1x6q+y9fNi mxEkhhuQSphaejQ8CPK6zty3XEwH7fGN70vGJ98SBQKllNNguIr8q7dGFH7UzkOmWSpl x6hCtBExef/dPxn9SgM8g+e6RJiBmMA8pDhLwVVnwPh8eCU8kqh5b04tSATrhCQu2FKY haEV+8S8wMijmxGVw6tj1n7fZNsNn1ndz68zOnVLRDBu2YEKjk7zxsj8OPP0VfQn5LUz GAyw== X-Gm-Message-State: AOAM530NzHOx0ZRakzdIhf8m3kocrvZ0cloftaA+t/Se3vxksJZ6Xz31 QCh6rkusi9vgLXDNBPCOU8hWWBfddJi+bHaDJts= X-Google-Smtp-Source: ABdhPJwuIgJ+HsrOFJOlA81cDypmvUS7rV4LozJghilpnqA4iTP5/GAuJsnTCYtTe+Icj7sONL0GNgC/SWegqD3JmCQ= X-Received: by 2002:a17:907:1b10:b0:6e4:dae9:b8e5 with SMTP id mp16-20020a1709071b1000b006e4dae9b8e5mr7062532ejc.470.1649229662410; Wed, 06 Apr 2022 00:21:02 -0700 (PDT) MIME-Version: 1.0 References: <215356.1647286703@sss.pgh.pa.us> In-Reply-To: From: Amit Langote Date: Wed, 6 Apr 2022 16:20:46 +0900 Message-ID: Subject: Re: generic plans and "initial" pruning To: David Rowley Cc: Robert Haas , Tom Lane , PostgreSQL-development Content-Type: multipart/mixed; boundary="0000000000002e7c3b05dbf73433" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000002e7c3b05dbf73433 Content-Type: text/plain; charset="UTF-8" On Fri, Apr 1, 2022 at 5:36 PM Amit Langote wrote: > On Fri, Apr 1, 2022 at 5:20 PM David Rowley wrote: > > On Fri, 1 Apr 2022 at 19:58, Amit Langote wrote: > > > Yes, the ExecLockRelsInfo node in the current patch, that first gets > > > added to the QueryDesc and subsequently to the EState of the query, > > > serves as that stashing place. Not sure if you've looked at > > > ExecLockRelInfo in detail in your review of the patch so far, but it > > > carries the initial pruning result in what are called > > > PlanInitPruningOutput nodes, which are stored in a list in > > > ExecLockRelsInfo and their offsets in the list are in turn stored in > > > an adjacent array that contains an element for every plan node in the > > > tree. If we go with a PlannedStmt.partpruneinfos list, then maybe we > > > don't need to have that array, because the Append/MergeAppend nodes > > > would be carrying those offsets by themselves. > > > > I saw it, just not in great detail. I saw that you had an array that > > was indexed by the plan node's ID. I thought that wouldn't be so good > > with large complex plans that we often get with partitioning > > workloads. That's why I mentioned using another index that you store > > in Append/MergeAppend that starts at 0 and increments by 1 for each > > node that has a PartitionPruneInfo made for it during create_plan. > > > > > Maybe a different name for ExecLockRelsInfo would be better? > > > > > > Also, given Tom's apparent dislike for carrying that in PlannedStmt, > > > maybe the way I have it now is fine? > > > > I think if you change how it's indexed and the other stuff then we can > > have another look. I think the patch will be much easier to review > > once the ParitionPruneInfos are moved into PlannedStmt. > > Will do, thanks. And here is a version like that that passes make check-world. Maybe still a WIP as I think comments could use more editing. Here's how the new implementation works: AcquireExecutorLocks() calls ExecutorDoInitialPruning(), which in turn iterates over a list of PartitionPruneInfos in a given PlannedStmt coming from a CachedPlan. For each PartitionPruneInfo, ExecPartitionDoInitialPruning() is called, which sets up PartitionPruneState and performs initial pruning steps present in the PartitionPruneInfo. The resulting bitmapsets of valid subplans, one for each PartitionPruneInfo, are collected in a list and added to a result node called PartitionPruneResult. It represents the result of performing initial pruning on all PartitionPruneInfos found in a plan. A list of PartitionPruneResults is passed along with the PlannedStmt to the executor, which is referenced when initializing Append/MergeAppend nodes. PlannedStmt.minLockRelids defined by the planner contains the RT indexes of all the entries in the range table minus those of the leaf partitions whose subplans are subject to removal due to initial pruning. AcquireExecutoLocks() adds back the RT indexes of only those leaf partitions whose subplans survive ExecutorDoInitialPruning(). To get the leaf partition RT indexes from the PartitionPruneInfo, a new rti_map array is added to PartitionedRelPruneInfo. There's only one patch this time. Patches that added partitioned_rels and plan_tree_walker() are no longer necessary. -- Amit Langote EDB: http://www.enterprisedb.com --0000000000002e7c3b05dbf73433 Content-Type: application/octet-stream; name="v11-0001-Optimize-AcquireExecutorLocks-to-skip-pruned-par.patch" Content-Disposition: attachment; filename="v11-0001-Optimize-AcquireExecutorLocks-to-skip-pruned-par.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l1n8pkg90 RnJvbSBiMGM4ZjE4ODM1ZWEyZjQ1NWVhNTAzYTdjMTcwMjE5NWJlOTg5ZGY4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBhbWl0bGFuIDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4KRGF0 ZTogV2VkLCAyMiBEZWMgMjAyMSAxNjo1NToxNyArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjExXSBP cHRpbWl6ZSBBY3F1aXJlRXhlY3V0b3JMb2NrcygpIHRvIHNraXAgcHJ1bmVkIHBhcnRpdGlvbnMK Ci0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weXRvLmMgICAgICAgICAgIHwgICAyICstCiBz cmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNr ZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyAgICAgICAgICB8ICAgNyArLQogc3JjL2JhY2tlbmQvY29t bWFuZHMvZXh0ZW5zaW9uLmMgICAgICAgIHwgIDEzICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9t YXR2aWV3LmMgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3BvcnRhbGNt ZHMuYyAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9wcmVwYXJlLmMgICAgICAg ICAgfCAgMTcgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL1JFQURNRSAgICAgICAgICAgICB8ICAy OCArKysKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMgICAgICAgICB8ICA0NiArKysr Kwogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcmFsbGVsLmMgICAgIHwgIDI4ICsrLQogc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jICAgIHwgMjM4ICsrKysrKysrKysrKysr KysrKysrLS0tLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1V0aWxzLmMgICAgICAgIHwgICAx ICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2Z1bmN0aW9ucy5jICAgICAgICB8ICAgMiArLQogc3Jj L2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVuZC5jICAgICAgIHwgIDE2ICstCiBzcmMvYmFja2Vu ZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYyAgfCAgIDkgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1 dG9yL3NwaS5jICAgICAgICAgICAgICB8ICAxNCArLQogc3JjL2JhY2tlbmQvbm9kZXMvY29weWZ1 bmNzLmMgICAgICAgICAgIHwgIDMzICsrKy0KIHNyYy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMg ICAgICAgICAgICB8ICAzNiArKystCiBzcmMvYmFja2VuZC9ub2Rlcy9yZWFkZnVuY3MuYyAgICAg ICAgICAgfCAgNTYgKysrKystCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFu LmMgfCAgMjAgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYyAgICB8ICAg MyArCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMgICAgfCAxMDQgKysrKysr KystLS0KIHNyYy9iYWNrZW5kL3BhcnRpdGlvbmluZy9wYXJ0cHJ1bmUuYyAgICB8ICA0MSArKyst CiBzcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMgICAgICAgICAgICAgfCAgMTUgKy0KIHNyYy9i YWNrZW5kL3Rjb3AvcHF1ZXJ5LmMgICAgICAgICAgICAgICB8ICAyMiArKy0KIHNyYy9iYWNrZW5k L3V0aWxzL2NhY2hlL3BsYW5jYWNoZS5jICAgICB8IDIzMiArKysrKysrKysrKysrKysrKysrKy0t LQogc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9wb3J0YWxtZW0uYyAgICAgIHwgICAyICsKIHNyYy9p bmNsdWRlL2NvbW1hbmRzL2V4cGxhaW4uaCAgICAgICAgICB8ICAgMyArLQogc3JjL2luY2x1ZGUv ZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oICAgIHwgIDEyICstCiBzcmMvaW5jbHVkZS9leGVjdXRv ci9leGVjZGVzYy5oICAgICAgICAgfCAgIDMgKwogc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0 b3IuaCAgICAgICAgIHwgICAyICsKIHNyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oICAgICAg ICAgICB8ICAxNSArKwogc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMuaCAgICAgICAgICAgICAgIHwg ICA0ICsKIHNyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oICAgICAgICAgICB8ICAxNSArKwog c3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmggICAgICAgICAgIHwgIDM5ICsrKy0KIHNyYy9p bmNsdWRlL3Rjb3AvdGNvcHByb3QuaCAgICAgICAgICAgICB8ICAgMiArLQogc3JjL2luY2x1ZGUv dXRpbHMvcGxhbmNhY2hlLmggICAgICAgICAgIHwgICA3ICsKIHNyYy9pbmNsdWRlL3V0aWxzL3Bv cnRhbC5oICAgICAgICAgICAgICB8ICAgNSArCiAzOCBmaWxlcyBjaGFuZ2VkLCA5NDIgaW5zZXJ0 aW9ucygrKSwgMTU1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1h bmRzL2NvcHl0by5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weXRvLmMKaW5kZXggNTVjMzhi MDRjNC4uZDQwM2ViMjMwOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weXRv LmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weXRvLmMKQEAgLTU0Miw3ICs1NDIsNyBA QCBCZWdpbkNvcHlUbyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJCSgoRFJfY29weSAqKSBkZXN0KS0+ Y3N0YXRlID0gY3N0YXRlOwogCiAJCS8qIENyZWF0ZSBhIFF1ZXJ5RGVzYyByZXF1ZXN0aW5nIG5v IG91dHB1dCAqLwotCQljc3RhdGUtPnF1ZXJ5RGVzYyA9IENyZWF0ZVF1ZXJ5RGVzYyhwbGFuLCBw c3RhdGUtPnBfc291cmNldGV4dCwKKwkJY3N0YXRlLT5xdWVyeURlc2MgPSBDcmVhdGVRdWVyeURl c2MocGxhbiwgTlVMTCwgcHN0YXRlLT5wX3NvdXJjZXRleHQsCiAJCQkJCQkJCQkJCUdldEFjdGl2 ZVNuYXBzaG90KCksCiAJCQkJCQkJCQkJCUludmFsaWRTbmFwc2hvdCwKIAkJCQkJCQkJCQkJZGVz dCwgTlVMTCwgTlVMTCwgMCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jcmVh dGVhcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYwppbmRleCA5YWJiYjZiNTU1 Li5mNjYwN2YyNDU0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5j CisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMKQEAgLTMyNSw3ICszMjUsNyBA QCBFeGVjQ3JlYXRlVGFibGVBcyhQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVRhYmxlQXNTdG10 ICpzdG10LAogCQlVcGRhdGVBY3RpdmVTbmFwc2hvdENvbW1hbmRJZCgpOwogCiAJCS8qIENyZWF0 ZSBhIFF1ZXJ5RGVzYywgcmVkaXJlY3Rpbmcgb3V0cHV0IHRvIG91ciB0dXBsZSByZWNlaXZlciAq LwotCQlxdWVyeURlc2MgPSBDcmVhdGVRdWVyeURlc2MocGxhbiwgcHN0YXRlLT5wX3NvdXJjZXRl eHQsCisJCXF1ZXJ5RGVzYyA9IENyZWF0ZVF1ZXJ5RGVzYyhwbGFuLCBOVUxMLCBwc3RhdGUtPnBf c291cmNldGV4dCwKIAkJCQkJCQkJCUdldEFjdGl2ZVNuYXBzaG90KCksIEludmFsaWRTbmFwc2hv dCwKIAkJCQkJCQkJCWRlc3QsIHBhcmFtcywgcXVlcnlFbnYsIDApOwogCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBs YWluLmMKaW5kZXggMWU1NzAxYjhlYi4uN2JhOTg1MmU1MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvZXhwbGFpbi5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4u YwpAQCAtNDA3LDcgKzQwNyw3IEBAIEV4cGxhaW5PbmVRdWVyeShRdWVyeSAqcXVlcnksIGludCBj dXJzb3JPcHRpb25zLAogCQl9CiAKIAkJLyogcnVuIGl0IChpZiBuZWVkZWQpIGFuZCBwcm9kdWNl IG91dHB1dCAqLwotCQlFeHBsYWluT25lUGxhbihwbGFuLCBpbnRvLCBlcywgcXVlcnlTdHJpbmcs IHBhcmFtcywgcXVlcnlFbnYsCisJCUV4cGxhaW5PbmVQbGFuKHBsYW4sIE5VTEwsIGludG8sIGVz LCBxdWVyeVN0cmluZywgcGFyYW1zLCBxdWVyeUVudiwKIAkJCQkJICAgJnBsYW5kdXJhdGlvbiwg KGVzLT5idWZmZXJzID8gJmJ1ZnVzYWdlIDogTlVMTCkpOwogCX0KIH0KQEAgLTUxNSw3ICs1MTUs OCBAQCBFeHBsYWluT25lVXRpbGl0eShOb2RlICp1dGlsaXR5U3RtdCwgSW50b0NsYXVzZSAqaW50 bywgRXhwbGFpblN0YXRlICplcywKICAqIHRvIGNhbGwgaXQuCiAgKi8KIHZvaWQKLUV4cGxhaW5P bmVQbGFuKFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwgSW50b0NsYXVzZSAqaW50bywgRXhwbGFp blN0YXRlICplcywKK0V4cGxhaW5PbmVQbGFuKFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwgUGFy dGl0aW9uUHJ1bmVSZXN1bHQgKnBhcnRfcHJ1bmVfcmVzdWx0LAorCQkJICAgSW50b0NsYXVzZSAq aW50bywgRXhwbGFpblN0YXRlICplcywKIAkJCSAgIGNvbnN0IGNoYXIgKnF1ZXJ5U3RyaW5nLCBQ YXJhbUxpc3RJbmZvIHBhcmFtcywKIAkJCSAgIFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52LCBj b25zdCBpbnN0cl90aW1lICpwbGFuZHVyYXRpb24sCiAJCQkgICBjb25zdCBCdWZmZXJVc2FnZSAq YnVmdXNhZ2UpCkBAIC01NjMsNyArNTY0LDcgQEAgRXhwbGFpbk9uZVBsYW4oUGxhbm5lZFN0bXQg KnBsYW5uZWRzdG10LCBJbnRvQ2xhdXNlICppbnRvLCBFeHBsYWluU3RhdGUgKmVzLAogCQlkZXN0 ID0gTm9uZV9SZWNlaXZlcjsKIAogCS8qIENyZWF0ZSBhIFF1ZXJ5RGVzYyBmb3IgdGhlIHF1ZXJ5 ICovCi0JcXVlcnlEZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHBsYW5uZWRzdG10LCBxdWVyeVN0cmlu ZywKKwlxdWVyeURlc2MgPSBDcmVhdGVRdWVyeURlc2MocGxhbm5lZHN0bXQsIHBhcnRfcHJ1bmVf cmVzdWx0LCBxdWVyeVN0cmluZywKIAkJCQkJCQkJR2V0QWN0aXZlU25hcHNob3QoKSwgSW52YWxp ZFNuYXBzaG90LAogCQkJCQkJCQlkZXN0LCBwYXJhbXMsIHF1ZXJ5RW52LCBpbnN0cnVtZW50X29w dGlvbik7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4dGVuc2lvbi5jIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvZXh0ZW5zaW9uLmMKaW5kZXggMTAxMzc5MGRiYi4uMTE1MWQ5 NWUxZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXh0ZW5zaW9uLmMKKysrIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvZXh0ZW5zaW9uLmMKQEAgLTc0MSw4ICs3NDEsMTAgQEAgZXhl Y3V0ZV9zcWxfc3RyaW5nKGNvbnN0IGNoYXIgKnNxbCkKIAkJUmF3U3RtdCAgICAqcGFyc2V0cmVl ID0gbGZpcnN0X25vZGUoUmF3U3RtdCwgbGMxKTsKIAkJTWVtb3J5Q29udGV4dCBwZXJfcGFyc2V0 cmVlX2NvbnRleHQsCiAJCQkJCW9sZGNvbnRleHQ7Ci0JCUxpc3QJICAgKnN0bXRfbGlzdDsKLQkJ TGlzdENlbGwgICAqbGMyOworCQlMaXN0CSAgICpzdG10X2xpc3QsCisJCQkJICAgKnBhcnRfcHJ1 bmVfcmVzdWx0X2xpc3Q7CisJCUxpc3RDZWxsICAgKmxjMiwKKwkJCQkgICAqbGMzOwogCiAJCS8q CiAJCSAqIFdlIGRvIHRoZSB3b3JrIGZvciBlYWNoIHBhcnNldHJlZSBpbiBhIHNob3J0LWxpdmVk IGNvbnRleHQsIHRvCkBAIC03NjIsMTEgKzc2NCwxMyBAQCBleGVjdXRlX3NxbF9zdHJpbmcoY29u c3QgY2hhciAqc3FsKQogCQkJCQkJCQkJCSAgIE5VTEwsCiAJCQkJCQkJCQkJICAgMCwKIAkJCQkJ CQkJCQkgICBOVUxMKTsKLQkJc3RtdF9saXN0ID0gcGdfcGxhbl9xdWVyaWVzKHN0bXRfbGlzdCwg c3FsLCBDVVJTT1JfT1BUX1BBUkFMTEVMX09LLCBOVUxMKTsKKwkJc3RtdF9saXN0ID0gcGdfcGxh bl9xdWVyaWVzKHN0bXRfbGlzdCwgc3FsLCBDVVJTT1JfT1BUX1BBUkFMTEVMX09LLCBOVUxMLAor CQkJCQkJCQkJJnBhcnRfcHJ1bmVfcmVzdWx0X2xpc3QpOwogCi0JCWZvcmVhY2gobGMyLCBzdG10 X2xpc3QpCisJCWZvcmJvdGgobGMyLCBzdG10X2xpc3QsIGxjMywgcGFydF9wcnVuZV9yZXN1bHRf bGlzdCkKIAkJewogCQkJUGxhbm5lZFN0bXQgKnN0bXQgPSBsZmlyc3Rfbm9kZShQbGFubmVkU3Rt dCwgbGMyKTsKKwkJCVBhcnRpdGlvblBydW5lUmVzdWx0ICpwYXJ0X3BydW5lX3Jlc3VsdCA9IGxm aXJzdF9ub2RlKFBhcnRpdGlvblBydW5lUmVzdWx0LCBsYzMpOwogCiAJCQlDb21tYW5kQ291bnRl ckluY3JlbWVudCgpOwogCkBAIC03NzcsNiArNzgxLDcgQEAgZXhlY3V0ZV9zcWxfc3RyaW5nKGNv bnN0IGNoYXIgKnNxbCkKIAkJCQlRdWVyeURlc2MgICpxZGVzYzsKIAogCQkJCXFkZXNjID0gQ3Jl YXRlUXVlcnlEZXNjKHN0bXQsCisJCQkJCQkJCQkJcGFydF9wcnVuZV9yZXN1bHQsCiAJCQkJCQkJ CQkJc3FsLAogCQkJCQkJCQkJCUdldEFjdGl2ZVNuYXBzaG90KCksIE5VTEwsCiAJCQkJCQkJCQkJ ZGVzdCwgTlVMTCwgTlVMTCwgMCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9t YXR2aWV3LmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9tYXR2aWV3LmMKaW5kZXggMDVlN2I2MDA1 OS4uNGVmNDRhYWYyMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0dmlldy5j CisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21hdHZpZXcuYwpAQCAtNDE2LDcgKzQxNiw3IEBA IHJlZnJlc2hfbWF0dmlld19kYXRhZmlsbChEZXN0UmVjZWl2ZXIgKmRlc3QsIFF1ZXJ5ICpxdWVy eSwKIAlVcGRhdGVBY3RpdmVTbmFwc2hvdENvbW1hbmRJZCgpOwogCiAJLyogQ3JlYXRlIGEgUXVl cnlEZXNjLCByZWRpcmVjdGluZyBvdXRwdXQgdG8gb3VyIHR1cGxlIHJlY2VpdmVyICovCi0JcXVl cnlEZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHBsYW4sIHF1ZXJ5U3RyaW5nLAorCXF1ZXJ5RGVzYyA9 IENyZWF0ZVF1ZXJ5RGVzYyhwbGFuLCBOVUxMLCBxdWVyeVN0cmluZywKIAkJCQkJCQkJR2V0QWN0 aXZlU25hcHNob3QoKSwgSW52YWxpZFNuYXBzaG90LAogCQkJCQkJCQlkZXN0LCBOVUxMLCBOVUxM LCAwKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcG9ydGFsY21kcy5jIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvcG9ydGFsY21kcy5jCmluZGV4IDk5MDJjNWM1NjYuLmNhYzY1 M2Y1MzUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3BvcnRhbGNtZHMuYworKysg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy9wb3J0YWxjbWRzLmMKQEAgLTEwNyw2ICsxMDcsNyBAQCBQ ZXJmb3JtQ3Vyc29yT3BlbihQYXJzZVN0YXRlICpwc3RhdGUsIERlY2xhcmVDdXJzb3JTdG10ICpj c3RtdCwgUGFyYW1MaXN0SW5mbyBwYQogCQkJCQkgIHF1ZXJ5U3RyaW5nLAogCQkJCQkgIENNRFRB R19TRUxFQ1QsCS8qIGN1cnNvcidzIHF1ZXJ5IGlzIGFsd2F5cyBhIFNFTEVDVCAqLwogCQkJCQkg IGxpc3RfbWFrZTEocGxhbiksCisJCQkJCSAgbGlzdF9tYWtlMShOVUxMKSwJLyogbm8gUGFydGl0 aW9uUHJ1bmVSZXN1bHQgdG8gcGFzcyAqLwogCQkJCQkgIE5VTEwpOwogCiAJLyotLS0tLS0tLS0t CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9wcmVwYXJlLmMgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9wcmVwYXJlLmMKaW5kZXggODA3Mzg1NDdlZC4uOGIxNTE1OTM3NCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHJlcGFyZS5jCisrKyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL3ByZXBhcmUuYwpAQCAtMTU1LDYgKzE1NSw3IEBAIEV4ZWN1dGVRdWVyeShQYXJzZVN0 YXRlICpwc3RhdGUsCiAJUHJlcGFyZWRTdGF0ZW1lbnQgKmVudHJ5OwogCUNhY2hlZFBsYW4gKmNw bGFuOwogCUxpc3QJICAgKnBsYW5fbGlzdDsKKwlMaXN0CSAgICpwbGFuX3BhcnRfcHJ1bmVfcmVz dWx0X2xpc3Q7CiAJUGFyYW1MaXN0SW5mbyBwYXJhbUxJID0gTlVMTDsKIAlFU3RhdGUJICAgKmVz dGF0ZSA9IE5VTEw7CiAJUG9ydGFsCQlwb3J0YWw7CkBAIC0xOTUsNiArMTk2LDcgQEAgRXhlY3V0 ZVF1ZXJ5KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkvKiBSZXBsYW4gaWYgbmVlZGVkLCBhbmQgaW5j cmVtZW50IHBsYW4gcmVmY291bnQgZm9yIHBvcnRhbCAqLwogCWNwbGFuID0gR2V0Q2FjaGVkUGxh bihlbnRyeS0+cGxhbnNvdXJjZSwgcGFyYW1MSSwgTlVMTCwgTlVMTCk7CiAJcGxhbl9saXN0ID0g Y3BsYW4tPnN0bXRfbGlzdDsKKwlwbGFuX3BhcnRfcHJ1bmVfcmVzdWx0X2xpc3QgPSBjcGxhbi0+ cGFydF9wcnVuZV9yZXN1bHRfbGlzdDsKIAogCS8qCiAJICogRE8gTk9UIGFkZCBhbnkgbG9naWMg dGhhdCBjb3VsZCBwb3NzaWJseSB0aHJvdyBhbiBlcnJvciBiZXR3ZWVuCkBAIC0yMDQsNyArMjA2 LDcgQEAgRXhlY3V0ZVF1ZXJ5KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkJICBOVUxMLAogCQkJ CQkgIHF1ZXJ5X3N0cmluZywKIAkJCQkJICBlbnRyeS0+cGxhbnNvdXJjZS0+Y29tbWFuZFRhZywK LQkJCQkJICBwbGFuX2xpc3QsCisJCQkJCSAgcGxhbl9saXN0LCBwbGFuX3BhcnRfcHJ1bmVfcmVz dWx0X2xpc3QsCiAJCQkJCSAgY3BsYW4pOwogCiAJLyoKQEAgLTU3Niw3ICs1NzgsOSBAQCBFeHBs YWluRXhlY3V0ZVF1ZXJ5KEV4ZWN1dGVTdG10ICpleGVjc3RtdCwgSW50b0NsYXVzZSAqaW50bywg RXhwbGFpblN0YXRlICplcywKIAljb25zdCBjaGFyICpxdWVyeV9zdHJpbmc7CiAJQ2FjaGVkUGxh biAqY3BsYW47CiAJTGlzdAkgICAqcGxhbl9saXN0OwotCUxpc3RDZWxsICAgKnA7CisJTGlzdAkg ICAqcGxhbl9wYXJ0X3BydW5lX3Jlc3VsdF9saXN0OworCUxpc3RDZWxsICAgKnAsCisJCQkgICAq cHA7CiAJUGFyYW1MaXN0SW5mbyBwYXJhbUxJID0gTlVMTDsKIAlFU3RhdGUJICAgKmVzdGF0ZSA9 IE5VTEw7CiAJaW5zdHJfdGltZQlwbGFuc3RhcnQ7CkBAIC02MzIsMTUgKzYzNiwxOCBAQCBFeHBs YWluRXhlY3V0ZVF1ZXJ5KEV4ZWN1dGVTdG10ICpleGVjc3RtdCwgSW50b0NsYXVzZSAqaW50bywg RXhwbGFpblN0YXRlICplcywKIAl9CiAKIAlwbGFuX2xpc3QgPSBjcGxhbi0+c3RtdF9saXN0Owor CXBsYW5fcGFydF9wcnVuZV9yZXN1bHRfbGlzdCA9IGNwbGFuLT5wYXJ0X3BydW5lX3Jlc3VsdF9s aXN0OwogCiAJLyogRXhwbGFpbiBlYWNoIHF1ZXJ5ICovCi0JZm9yZWFjaChwLCBwbGFuX2xpc3Qp CisJZm9yYm90aChwLCBwbGFuX2xpc3QsIHBwLCBwbGFuX3BhcnRfcHJ1bmVfcmVzdWx0X2xpc3Qp CiAJewogCQlQbGFubmVkU3RtdCAqcHN0bXQgPSBsZmlyc3Rfbm9kZShQbGFubmVkU3RtdCwgcCk7 CisJCVBhcnRpdGlvblBydW5lUmVzdWx0ICpwYXJ0X3BydW5lX3Jlc3VsdCA9IGxmaXJzdF9ub2Rl KFBhcnRpdGlvblBydW5lUmVzdWx0LCBwcCk7CiAKIAkJaWYgKHBzdG10LT5jb21tYW5kVHlwZSAh PSBDTURfVVRJTElUWSkKLQkJCUV4cGxhaW5PbmVQbGFuKHBzdG10LCBpbnRvLCBlcywgcXVlcnlf c3RyaW5nLCBwYXJhbUxJLCBxdWVyeUVudiwKLQkJCQkJCSAgICZwbGFuZHVyYXRpb24sIChlcy0+ YnVmZmVycyA/ICZidWZ1c2FnZSA6IE5VTEwpKTsKKwkJCUV4cGxhaW5PbmVQbGFuKHBzdG10LCBw YXJ0X3BydW5lX3Jlc3VsdCwgaW50bywgZXMsIHF1ZXJ5X3N0cmluZywKKwkJCQkJCSAgIHBhcmFt TEksIHF1ZXJ5RW52LCAmcGxhbmR1cmF0aW9uLAorCQkJCQkJICAgKGVzLT5idWZmZXJzID8gJmJ1 ZnVzYWdlIDogTlVMTCkpOwogCQllbHNlCiAJCQlFeHBsYWluT25lVXRpbGl0eShwc3RtdC0+dXRp bGl0eVN0bXQsIGludG8sIGVzLCBxdWVyeV9zdHJpbmcsCiAJCQkJCQkJICBwYXJhbUxJLCBxdWVy eUVudik7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9SRUFETUUgYi9zcmMvYmFj a2VuZC9leGVjdXRvci9SRUFETUUKaW5kZXggMGI1MTgzZmM0YS4uODQxOGU3NThkYSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvUkVBRE1FCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL1JFQURNRQpAQCAtNjUsNiArNjUsMzAgQEAgZm91bmQgdGhlcmUuICBUaGlzIGN1cnJlbnRs eSBvbmx5IG9jY3VycyBmb3IgQXBwZW5kIGFuZCBNZXJnZUFwcGVuZCBub2Rlcy4gIEluCiB0aGlz IGNhc2UgdGhlIG5vbi1yZXF1aXJlZCBzdWJwbGFucyBhcmUgaWdub3JlZCBhbmQgdGhlIGV4ZWN1 dG9yIHN0YXRlJ3MKIHN1Ym5vZGUgYXJyYXkgd2lsbCBiZWNvbWUgb3V0IG9mIHNlcXVlbmNlIHRv IHRoZSBwbGFuJ3Mgc3VicGxhbiBsaXN0LgogCitBY3R1YWxseSwgdGhlIHNvLWNhbGxlZCBleGVj dXRpb24gdGltZSBwcnVuaW5nIG1heSBhbHNvIG9jY3VyIGV2ZW4gYmVmb3JlIHRoZQorZXhlY3V0 aW9uIGhhcyBzdGFydGVkLiAgT25lIGNhc2Ugd2hlcmUgdGhhdCBvY2N1cnMgaXMgd2hlbiBhIGNh Y2hlZCBnZW5lcmljCitwbGFuIGlzIGJlaW5nIHZhbGlkYXRlZCBmb3IgZXhlY3V0aW9uIGJ5IHBs YW5jYWNoZS5jOiBHZXRDYWNoZWRQbGFuKCksIHdoaWNoCitwcm9jZWVkcyBieSBsb2NraW5nIGFs bCB0aGUgcmVsYXRpb25zIHRoYXQgd2lsbCBiZSBzY2FubmVkIGJ5IHRoYXQgcGxhbi4gIElmCit0 aGUgZ2VuZXJpYyBwbGFuIGhhcyBub2RlcyB0aGF0IGNvbnRhaW4gc28tY2FsbGVkIGluaXRpYWwg cHJ1bmluZyBzdGVwcyAoYQorc3Vic2V0IG9mIGV4ZWN1dGlvbiBwcnVuaW5nIHN0ZXBzIHRoYXQg ZG8gbm90IGRlcGVuZCBvbiBmdWxsLWZsZWRnZWQgZXhlY3V0aW9uCitoYXZpbmcgc3RhcnRlZCks IHRoZXkgYXJlIHBlcmZvcm1lZCBhdCB0aGlzIHBvaW50IHRvIGZpZ3VyZSBvdXQgdGhlIG1pbmlt YWwKK3NldCBvZiBjaGlsZCBzdWJwbGFucyB0aGF0IHNhdGlzZnkgdGhvc2UgcHJ1bmluZyBpbnN0 cnVjdGlvbnMgYW5kIHRoZSByZXN1bHQKK29mIHBlcmZvcm1pbmcgdGhhdCBwcnVuaW5nIGlzIHNh dmVkIGluIGEgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBnZXRzIHBhc3NlZCB0bwordGhlIGV4ZWN1dG9y IGFsb25nc2lkZSB0aGUgcGxhbiB0cmVlLiAgUmVsYXRpb25zIHNjYW5uZWQgYnkgb25seSB0aG9z ZQorc3Vydml2aW5nIHN1YnBsYW5zIGFyZSB0aGVuIGxvY2tlZCB3aGlsZSB0aG9zZSBzY2FubmVk IGJ5IHRoZSBwcnVuZWQgc3VicGxhbnMKK2FyZSBub3QsIGV2ZW4gdGhvdWdoIHRoZSBwcnVuZWQg c3VicGxhbnMgdGhlbXNlbHZlcyBhcmUgbm90IHJlbW92ZWQgZnJvbSB0aGUKK3BsYW4gdHJlZS4g U28sIGl0IGlzIGltcGVyYXRpdmUgdGhhdCB0aGUgZXhlY3V0b3IgYW5kIGFueSB0aGlyZCBwYXJ0 eSBjb2RlCitpbnZva2VkIGJ5IGl0IHRoYXQgZ2V0cyBwYXNzZWQgdGhlIHBsYW4gdHJlZSBsb29r IGF0IHRoZSBpbml0aWFsIHBydW5pbmcgcmVzdWx0CittYWRlIGF2YWlsYWJsZSB2aWEgdGhlIGFm b3JlbWVudGlvbmVkIGRhdGEgc3RydWN0dXJlIHRvIGRldGVybWluZSB3aGV0aGVyIG9yCitub3Qg YSBwYXJ0aWN1bGFyIHN1YnBsYW4gaXMgdmFsaWQuICBUaGUgZGF0YSBzdHJ1Y3R1cmUgYmFzaWNh bGx5IGNvbnNpc3RzIG9mCithIFBhcnRpdGlvblBydW5lUmVzdWx0IG5vZGUgcGFzc2VkIHRocm91 Z2ggdGhlIFF1ZXJ5RGVzYyAoc3Vic2VxdWVudGx5IGFkZGVkCit0byBFU3RhdGUpIGNvbnRhaW5p bmcgYSBsaXN0IG9mIGJpdG1hcHNldHMgd2l0aCBvbmUgZWxlbWVudCBmb3IgZXZlcnkKK1BhcnRp dGlvblBydW5lSW5mbyBmb3VuZCBpbiBQbGFubmVkU3RtdC5wYXJ0UHJ1bmVJbmZvcy4gIFRoZSBs aXN0IGlzIGluZGV4ZWQKK3dpdGggcGFydF9wcnVuZV9pbmRleCBvZiB0aGUgaW5kaXZpZHVhbCBQ YXJ0aXRpb25QcnVuZUluZm9zIHRoYXQncyBzdG9yZWQgaW4KK3RoZSBwYXJlbnQgcGxhbiBub2Rl cyB0byB3aGljaCBhIGdpdmVuIFBhcnRpdGlvblBydW5lSW5mbyBiZWxvbmdzLiAgRWFjaAorYml0 bWFwc2V0IG9mIHRoZSBpbmRleGVzIG9mIHRoZSBjaGlsZCBzdWJwbGFucyBvZiB0aGUgZ2l2ZW4g cGFyZW50IHBsYW4KK25vZGUgdGhhdCBzdXJ2aXZlIGluaXRpYWwgcGFydGlpdG9uIHBydW5pbmcu CisKIEVhY2ggUGxhbiBub2RlIG1heSBoYXZlIGV4cHJlc3Npb24gdHJlZXMgYXNzb2NpYXRlZCB3 aXRoIGl0LCB0byByZXByZXNlbnQKIGl0cyB0YXJnZXQgbGlzdCwgcXVhbGlmaWNhdGlvbiBjb25k aXRpb25zLCBldGMuICBUaGVzZSB0cmVlcyBhcmUgYWxzbwogcmVhZC1vbmx5IHRvIHRoZSBleGVj dXRvciwgYnV0IHRoZSBleGVjdXRvciBzdGF0ZSBmb3IgZXhwcmVzc2lvbiBldmFsdWF0aW9uCkBA IC0yODYsNiArMzEwLDEwIEBAIFF1ZXJ5IFByb2Nlc3NpbmcgQ29udHJvbCBGbG93CiAKIFRoaXMg aXMgYSBza2V0Y2ggb2YgY29udHJvbCBmbG93IGZvciBmdWxsIHF1ZXJ5IHByb2Nlc3Npbmc6CiAK KyAgWyBFeGVjdXRvckRvSW5pdGlhbFBydW5pbmcgXSAtLS0gYW4gb3B0aW9uYWwgc3RlcCB0byBw ZXJmb3JtIGluaXRpYWwKKwkJcGFydGl0aW9uIHBydW5pbmcgb24gdGhlIHBsYW4gdHJlZSB0aGUg cmVzdWx0IG9mIHdoaWNoIGlzIHBhc3NlZAorCQl0byB0aGUgZXhlY3V0b3IgdmlhIFF1ZXJ5RGVz YworCiAJQ3JlYXRlUXVlcnlEZXNjCiAKIAlFeGVjdXRvclN0YXJ0CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01h aW4uYwppbmRleCBlZjJmZDQ2MDkyLi4wNWNjOTlkZjhmIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjTWFpbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWlu LmMKQEAgLTQ5LDExICs0OSwxMyBAQAogI2luY2x1ZGUgImNvbW1hbmRzL21hdHZpZXcuaCIKICNp bmNsdWRlICJjb21tYW5kcy90cmlnZ2VyLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY2RlYnVn LmgiCisjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oIgogI2luY2x1ZGUgImV4ZWN1 dG9yL25vZGVTdWJwbGFuLmgiCiAjaW5jbHVkZSAiZm9yZWlnbi9mZHdhcGkuaCIKICNpbmNsdWRl ICJqaXQvaml0LmgiCiAjaW5jbHVkZSAibWIvcGdfd2NoYXIuaCIKICNpbmNsdWRlICJtaXNjYWRt aW4uaCIKKyNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIKICNpbmNsdWRlICJwYXJzZXIvcGFy c2V0cmVlLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdl L2xtZ3IuaCIKQEAgLTEwNCw2ICsxMDYsNDcgQEAgc3RhdGljIHZvaWQgRXZhbFBsYW5RdWFsU3Rh cnQoRVBRU3RhdGUgKmVwcXN0YXRlLCBQbGFuICpwbGFuVHJlZSk7CiAKIC8qIGVuZCBvZiBsb2Nh bCBkZWNscyAqLwogCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgkJRXhlY3V0b3JEb0luaXRpYWxQcnVuaW5nCisg KgorICoJCVBlcmZvcm1zIGluaXRpYWwgcGFydGl0aW9uIHBydW5pbmcgdG8gZmlndXJlIG91dCB0 aGUgbWluaW1hbCBzZXQgb2YKKyAqCQlzdWJwbGFucyB0byBiZSBleGVjdXRlZCBhbmQgdGhlIHNl dCBvZiBSVCBpbmRleGVzIG9mIHRoZSBjb3JyZXNwb25kaW5nCisgKgkJbGVhZiBwYXJ0aXRpb25z CisgKgorICogUmV0dXJuZWQgUGFydGl0aW9uUHJ1bmVSZXN1bHQgbXVzdCBiZSBzdWJzZXF1ZW50 bHkgcGFzc2VkIHRvIHRoZSBleGVjdXRvcgorICogc28gdGhhdCBpdCBjYW4gcmV1c2UgdGhlIHJl c3VsdCBvZiBwcnVuaW5nLiAgSXQncyBpbXBvcnRhbnQgdGhhdCB0aGUKKyAqIGhhcyB0aGUgc2Ft ZSB2aWV3IG9mIHdoaWNoIHBhcnRpdGlvbnMgYXJlIGluaXRpYWxseSBwcnVuZWQgKGJ5IG5vdCBk b2luZworICogdGhlIHBydW5pbmcgYWdhaW4gaXRzZWxmKSBvciBvdGhlcndpc2UgaXQgcmlza3Mg aW5pdGlhbGl6aW5nIHN1YnBsYW5zIHdob3NlCisgKiBwYXJ0aXRpb25zIHdvdWxkIG5vdCBoYXZl IGJlZW4gbG9ja2VkLgorICoKKyAqIE5vdGU6IFBhcnRpdGlvbmVkIHRhYmxlcyBtZW50aW9uZWQg aW4gUGFydGl0aW9uZWRSZWxQcnVuZUluZm8gbm9kZXMgdGhhdAorICogZHJpdmUgdGhlIHBydW5p bmcgd2lsbCBiZSBsb2NrZWQgYmVmb3JlIGRvaW5nIHRoZSBwcnVuaW5nLgorICovCitQYXJ0aXRp b25QcnVuZVJlc3VsdCAqCitFeGVjdXRvckRvSW5pdGlhbFBydW5pbmcoUGxhbm5lZFN0bXQgKnBs YW5uZWRzdG10LCBQYXJhbUxpc3RJbmZvIHBhcmFtcykKK3sKKwlQYXJ0aXRpb25QcnVuZVJlc3Vs dCAqcmVzdWx0OworCUxpc3RDZWxsICpsYzsKKworCS8qIE9ubHkgZ2V0IGhlcmUgaWYgdGhlcmUg aXMgYW55IHBydW5pbmcgdG8gZG8uICovCisJQXNzZXJ0KHBsYW5uZWRzdG10LT5jb250YWluc0lu aXRpYWxQcnVuaW5nKTsKKworCXJlc3VsdCA9IG1ha2VOb2RlKFBhcnRpdGlvblBydW5lUmVzdWx0 KTsKKwlmb3JlYWNoKGxjLCBwbGFubmVkc3RtdC0+cGFydFBydW5lSW5mb3MpCisJeworCQlQYXJ0 aXRpb25QcnVuZUluZm8gKnBydW5laW5mbyA9IGxmaXJzdChsYyk7CisJCUJpdG1hcHNldCAqdmFs aWRfc3VicGxhbl9vZmZzOworCisJCXZhbGlkX3N1YnBsYW5fb2ZmcyA9CisJCQlFeGVjUGFydGl0 aW9uRG9Jbml0aWFsUHJ1bmluZyhwbGFubmVkc3RtdCwgcGFyYW1zLCBwcnVuZWluZm8sCisJCQkJ CQkJCQkJICAmcmVzdWx0LT5zY2FuX2xlYWZwYXJ0X3J0aXMpOworCQlyZXN1bHQtPnZhbGlkX3N1 YnBsYW5fb2Zmc19saXN0ID0KKwkJCWxhcHBlbmQocmVzdWx0LT52YWxpZF9zdWJwbGFuX29mZnNf bGlzdCwKKwkJCQkJdmFsaWRfc3VicGxhbl9vZmZzKTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0Owor fQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCiAgKgkJRXhlY3V0b3JTdGFydApAQCAtODA2LDYgKzg0OSw3IEBAIElu aXRQbGFuKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdzKQogewogCUNtZFR5cGUJCW9w ZXJhdGlvbiA9IHF1ZXJ5RGVzYy0+b3BlcmF0aW9uOwogCVBsYW5uZWRTdG10ICpwbGFubmVkc3Rt dCA9IHF1ZXJ5RGVzYy0+cGxhbm5lZHN0bXQ7CisJUGFydGl0aW9uUHJ1bmVSZXN1bHQgKnBhcnRf cHJ1bmVfcmVzdWx0ID0gcXVlcnlEZXNjLT5wYXJ0X3BydW5lX3Jlc3VsdDsKIAlQbGFuCSAgICpw bGFuID0gcGxhbm5lZHN0bXQtPnBsYW5UcmVlOwogCUxpc3QJICAgKnJhbmdlVGFibGUgPSBwbGFu bmVkc3RtdC0+cnRhYmxlOwogCUVTdGF0ZQkgICAqZXN0YXRlID0gcXVlcnlEZXNjLT5lc3RhdGU7 CkBAIC04MjUsNiArODY5LDggQEAgSW5pdFBsYW4oUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBl ZmxhZ3MpCiAJRXhlY0luaXRSYW5nZVRhYmxlKGVzdGF0ZSwgcmFuZ2VUYWJsZSk7CiAKIAllc3Rh dGUtPmVzX3BsYW5uZWRzdG10ID0gcGxhbm5lZHN0bXQ7CisJZXN0YXRlLT5lc19wYXJ0X3BydW5l X2luZm9zID0gcGxhbm5lZHN0bXQtPnBhcnRQcnVuZUluZm9zOworCWVzdGF0ZS0+ZXNfcGFydF9w cnVuZV9yZXN1bHQgPSBwYXJ0X3BydW5lX3Jlc3VsdDsKIAogCS8qCiAJICogTmV4dCwgYnVpbGQg dGhlIEV4ZWNSb3dNYXJrIGFycmF5IGZyb20gdGhlIFBsYW5Sb3dNYXJrKHMpLCBpZiBhbnkuCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFyYWxsZWwuYyBiL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jCmluZGV4IDlhMGQ1ZDU5ZWYuLjgwNWY4NmM1MDMg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jCisrKyBiL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jCkBAIC02Niw2ICs2Niw3IEBACiAjZGVm aW5lIFBBUkFMTEVMX0tFWV9RVUVSWV9URVhUCQlVSU5UNjRDT05TVCgweEUwMDAwMDAwMDAwMDAw MDgpCiAjZGVmaW5lIFBBUkFMTEVMX0tFWV9KSVRfSU5TVFJVTUVOVEFUSU9OIFVJTlQ2NENPTlNU KDB4RTAwMDAwMDAwMDAwMDAwOSkKICNkZWZpbmUgUEFSQUxMRUxfS0VZX1dBTF9VU0FHRQkJCVVJ TlQ2NENPTlNUKDB4RTAwMDAwMDAwMDAwMDAwQSkKKyNkZWZpbmUgUEFSQUxMRUxfS0VZX1BBUlRJ VElPTlBSVU5FUkVTVUxUCVVJTlQ2NENPTlNUKDB4RTAwMDAwMDAwMDAwMDAwQikKIAogI2RlZmlu ZSBQQVJBTExFTF9UVVBMRV9RVUVVRV9TSVpFCQk2NTUzNgogCkBAIC0xODIsNyArMTgzLDkgQEAg RXhlY1NlcmlhbGl6ZVBsYW4oUGxhbiAqcGxhbiwgRVN0YXRlICplc3RhdGUpCiAJcHN0bXQtPnRy YW5zaWVudFBsYW4gPSBmYWxzZTsKIAlwc3RtdC0+ZGVwZW5kc09uUm9sZSA9IGZhbHNlOwogCXBz dG10LT5wYXJhbGxlbE1vZGVOZWVkZWQgPSBmYWxzZTsKKwlwc3RtdC0+Y29udGFpbnNJbml0aWFs UHJ1bmluZyA9IGZhbHNlOwogCXBzdG10LT5wbGFuVHJlZSA9IHBsYW47CisJcHN0bXQtPnBhcnRQ cnVuZUluZm9zID0gZXN0YXRlLT5lc19wYXJ0X3BydW5lX2luZm9zOwogCXBzdG10LT5ydGFibGUg PSBlc3RhdGUtPmVzX3JhbmdlX3RhYmxlOwogCXBzdG10LT5yZXN1bHRSZWxhdGlvbnMgPSBOSUw7 CiAJcHN0bXQtPmFwcGVuZFJlbGF0aW9ucyA9IE5JTDsKQEAgLTU5NiwxMiArNTk5LDE1IEBAIEV4 ZWNJbml0UGFyYWxsZWxQbGFuKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBFU3RhdGUgKmVzdGF0ZSwK IAlGaXhlZFBhcmFsbGVsRXhlY3V0b3JTdGF0ZSAqZnBlczsKIAljaGFyCSAgICpwc3RtdF9kYXRh OwogCWNoYXIJICAgKnBzdG10X3NwYWNlOworCWNoYXIJICAgKnBhcnRfcHJ1bmVfcmVzdWx0X2Rh dGE7CisJY2hhcgkgICAqcGFydF9wcnVuZV9yZXN1bHRfc3BhY2U7CiAJY2hhcgkgICAqcGFyYW1s aXN0aW5mb19zcGFjZTsKIAlCdWZmZXJVc2FnZSAqYnVmdXNhZ2Vfc3BhY2U7CiAJV2FsVXNhZ2Ug ICAqd2FsdXNhZ2Vfc3BhY2U7CiAJU2hhcmVkRXhlY3V0b3JJbnN0cnVtZW50YXRpb24gKmluc3Ry dW1lbnRhdGlvbiA9IE5VTEw7CiAJU2hhcmVkSml0SW5zdHJ1bWVudGF0aW9uICpqaXRfaW5zdHJ1 bWVudGF0aW9uID0gTlVMTDsKIAlpbnQJCQlwc3RtdF9sZW47CisJaW50CQkJcGFydF9wcnVuZV9y ZXN1bHRfbGVuOwogCWludAkJCXBhcmFtbGlzdGluZm9fbGVuOwogCWludAkJCWluc3RydW1lbnRh dGlvbl9sZW4gPSAwOwogCWludAkJCWppdF9pbnN0cnVtZW50YXRpb25fbGVuID0gMDsKQEAgLTYz MCw2ICs2MzYsNyBAQCBFeGVjSW5pdFBhcmFsbGVsUGxhbihQbGFuU3RhdGUgKnBsYW5zdGF0ZSwg RVN0YXRlICplc3RhdGUsCiAKIAkvKiBGaXggdXAgYW5kIHNlcmlhbGl6ZSBwbGFuIHRvIGJlIHNl bnQgdG8gd29ya2Vycy4gKi8KIAlwc3RtdF9kYXRhID0gRXhlY1NlcmlhbGl6ZVBsYW4ocGxhbnN0 YXRlLT5wbGFuLCBlc3RhdGUpOworCXBhcnRfcHJ1bmVfcmVzdWx0X2RhdGEgPSBub2RlVG9TdHJp bmcoZXN0YXRlLT5lc19wYXJ0X3BydW5lX3Jlc3VsdCk7CiAKIAkvKiBDcmVhdGUgYSBwYXJhbGxl bCBjb250ZXh0LiAqLwogCXBjeHQgPSBDcmVhdGVQYXJhbGxlbENvbnRleHQoInBvc3RncmVzIiwg IlBhcmFsbGVsUXVlcnlNYWluIiwgbndvcmtlcnMpOwpAQCAtNjU2LDYgKzY2MywxMSBAQCBFeGVj SW5pdFBhcmFsbGVsUGxhbihQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgRVN0YXRlICplc3RhdGUsCiAJ c2htX3RvY19lc3RpbWF0ZV9jaHVuaygmcGN4dC0+ZXN0aW1hdG9yLCBwc3RtdF9sZW4pOwogCXNo bV90b2NfZXN0aW1hdGVfa2V5cygmcGN4dC0+ZXN0aW1hdG9yLCAxKTsKIAorCS8qIEVzdGltYXRl IHNwYWNlIGZvciBzZXJpYWxpemVkIFBhcnRpdGlvblBydW5lUmVzdWx0LiAqLworCXBhcnRfcHJ1 bmVfcmVzdWx0X2xlbiA9IHN0cmxlbihwYXJ0X3BydW5lX3Jlc3VsdF9kYXRhKSArIDE7CisJc2ht X3RvY19lc3RpbWF0ZV9jaHVuaygmcGN4dC0+ZXN0aW1hdG9yLCBwYXJ0X3BydW5lX3Jlc3VsdF9s ZW4pOworCXNobV90b2NfZXN0aW1hdGVfa2V5cygmcGN4dC0+ZXN0aW1hdG9yLCAxKTsKKwogCS8q IEVzdGltYXRlIHNwYWNlIGZvciBzZXJpYWxpemVkIFBhcmFtTGlzdEluZm8uICovCiAJcGFyYW1s aXN0aW5mb19sZW4gPSBFc3RpbWF0ZVBhcmFtTGlzdFNwYWNlKGVzdGF0ZS0+ZXNfcGFyYW1fbGlz dF9pbmZvKTsKIAlzaG1fdG9jX2VzdGltYXRlX2NodW5rKCZwY3h0LT5lc3RpbWF0b3IsIHBhcmFt bGlzdGluZm9fbGVuKTsKQEAgLTc1MCw2ICs3NjIsMTIgQEAgRXhlY0luaXRQYXJhbGxlbFBsYW4o UGxhblN0YXRlICpwbGFuc3RhdGUsIEVTdGF0ZSAqZXN0YXRlLAogCW1lbWNweShwc3RtdF9zcGFj ZSwgcHN0bXRfZGF0YSwgcHN0bXRfbGVuKTsKIAlzaG1fdG9jX2luc2VydChwY3h0LT50b2MsIFBB UkFMTEVMX0tFWV9QTEFOTkVEU1RNVCwgcHN0bXRfc3BhY2UpOwogCisJLyogU3RvcmUgc2VyaWFs aXplZCBQYXJ0aXRpb25QcnVuZVJlc3VsdCAqLworCXBhcnRfcHJ1bmVfcmVzdWx0X3NwYWNlID0g c2htX3RvY19hbGxvY2F0ZShwY3h0LT50b2MsIHBhcnRfcHJ1bmVfcmVzdWx0X2xlbik7CisJbWVt Y3B5KHBhcnRfcHJ1bmVfcmVzdWx0X3NwYWNlLCBwYXJ0X3BydW5lX3Jlc3VsdF9kYXRhLCBwYXJ0 X3BydW5lX3Jlc3VsdF9sZW4pOworCXNobV90b2NfaW5zZXJ0KHBjeHQtPnRvYywgUEFSQUxMRUxf S0VZX1BBUlRJVElPTlBSVU5FUkVTVUxULAorCQkJCSAgIHBhcnRfcHJ1bmVfcmVzdWx0X3NwYWNl KTsKKwogCS8qIFN0b3JlIHNlcmlhbGl6ZWQgUGFyYW1MaXN0SW5mby4gKi8KIAlwYXJhbWxpc3Rp bmZvX3NwYWNlID0gc2htX3RvY19hbGxvY2F0ZShwY3h0LT50b2MsIHBhcmFtbGlzdGluZm9fbGVu KTsKIAlzaG1fdG9jX2luc2VydChwY3h0LT50b2MsIFBBUkFMTEVMX0tFWV9QQVJBTUxJU1RJTkZP LCBwYXJhbWxpc3RpbmZvX3NwYWNlKTsKQEAgLTEyMzEsOCArMTI0OSwxMCBAQCBFeGVjUGFyYWxs ZWxHZXRRdWVyeURlc2Moc2htX3RvYyAqdG9jLCBEZXN0UmVjZWl2ZXIgKnJlY2VpdmVyLAogCQkJ CQkJIGludCBpbnN0cnVtZW50X29wdGlvbnMpCiB7CiAJY2hhcgkgICAqcHN0bXRzcGFjZTsKKwlj aGFyCSAgICpwYXJ0X3BydW5lX3Jlc3VsdF9zcGFjZTsKIAljaGFyCSAgICpwYXJhbXNwYWNlOwog CVBsYW5uZWRTdG10ICpwc3RtdDsKKwlQYXJ0aXRpb25QcnVuZVJlc3VsdCAqcGFydF9wcnVuZV9y ZXN1bHQ7CiAJUGFyYW1MaXN0SW5mbyBwYXJhbUxJOwogCWNoYXIJICAgKnF1ZXJ5U3RyaW5nOwog CkBAIC0xMjQzLDEyICsxMjYzLDE4IEBAIEV4ZWNQYXJhbGxlbEdldFF1ZXJ5RGVzYyhzaG1fdG9j ICp0b2MsIERlc3RSZWNlaXZlciAqcmVjZWl2ZXIsCiAJcHN0bXRzcGFjZSA9IHNobV90b2NfbG9v a3VwKHRvYywgUEFSQUxMRUxfS0VZX1BMQU5ORURTVE1ULCBmYWxzZSk7CiAJcHN0bXQgPSAoUGxh bm5lZFN0bXQgKikgc3RyaW5nVG9Ob2RlKHBzdG10c3BhY2UpOwogCisJLyogUmVjb25zdHJ1Y3Qg bGVhZGVyLXN1cHBsaWVkIFBhcnRpdGlvblBydW5lUmVzdWx0LiAqLworCXBhcnRfcHJ1bmVfcmVz dWx0X3NwYWNlID0KKwkJc2htX3RvY19sb29rdXAodG9jLCBQQVJBTExFTF9LRVlfUEFSVElUSU9O UFJVTkVSRVNVTFQsIGZhbHNlKTsKKwlwYXJ0X3BydW5lX3Jlc3VsdCA9IChQYXJ0aXRpb25QcnVu ZVJlc3VsdCAqKQorCQlzdHJpbmdUb05vZGUocGFydF9wcnVuZV9yZXN1bHRfc3BhY2UpOworCiAJ LyogUmVjb25zdHJ1Y3QgUGFyYW1MaXN0SW5mby4gKi8KIAlwYXJhbXNwYWNlID0gc2htX3RvY19s b29rdXAodG9jLCBQQVJBTExFTF9LRVlfUEFSQU1MSVNUSU5GTywgZmFsc2UpOwogCXBhcmFtTEkg PSBSZXN0b3JlUGFyYW1MaXN0KCZwYXJhbXNwYWNlKTsKIAogCS8qIENyZWF0ZSBhIFF1ZXJ5RGVz YyBmb3IgdGhlIHF1ZXJ5LiAqLwotCXJldHVybiBDcmVhdGVRdWVyeURlc2MocHN0bXQsCisJcmV0 dXJuIENyZWF0ZVF1ZXJ5RGVzYyhwc3RtdCwgcGFydF9wcnVuZV9yZXN1bHQsCiAJCQkJCQkgICBx dWVyeVN0cmluZywKIAkJCQkJCSAgIEdldEFjdGl2ZVNuYXBzaG90KCksIEludmFsaWRTbmFwc2hv dCwKIAkJCQkJCSAgIHJlY2VpdmVyLCBwYXJhbUxJLCBOVUxMLCBpbnN0cnVtZW50X29wdGlvbnMp OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jIGIvc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jCmluZGV4IDYxNWJkODA5NzMuLjMwMzc3 NDJiOGQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uYwor KysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMKQEAgLTI1LDYgKzI1LDcg QEAKICNpbmNsdWRlICJtYi9wZ193Y2hhci5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2lu Y2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgorI2luY2x1ZGUgInBhcnNlci9wYXJzZXRyZWUuaCIK ICNpbmNsdWRlICJwYXJ0aXRpb25pbmcvcGFydGJvdW5kcy5oIgogI2luY2x1ZGUgInBhcnRpdGlv bmluZy9wYXJ0ZGVzYy5oIgogI2luY2x1ZGUgInBhcnRpdGlvbmluZy9wYXJ0cHJ1bmUuaCIKQEAg LTE4NSw3ICsxODYsMTEgQEAgc3RhdGljIGNoYXIgKkV4ZWNCdWlsZFNsb3RQYXJ0aXRpb25LZXlE ZXNjcmlwdGlvbihSZWxhdGlvbiByZWwsCiBzdGF0aWMgTGlzdCAqYWRqdXN0X3BhcnRpdGlvbl9j b2xub3MoTGlzdCAqY29sbm9zLCBSZXN1bHRSZWxJbmZvICpsZWFmX3BhcnRfcnJpKTsKIHN0YXRp YyBMaXN0ICphZGp1c3RfcGFydGl0aW9uX2NvbG5vc191c2luZ19tYXAoTGlzdCAqY29sbm9zLCBB dHRyTWFwICphdHRyTWFwKTsKIHN0YXRpYyBQYXJ0aXRpb25QcnVuZVN0YXRlICpDcmVhdGVQYXJ0 aXRpb25QcnVuZVN0YXRlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLAotCQkJCQkJCQkJCQkJCSAgUGFy dGl0aW9uUHJ1bmVJbmZvICpwcnVuZWluZm8pOworCQkJCQkJCQkJCQkJCSAgUGFydGl0aW9uUHJ1 bmVJbmZvICpwcnVuZWluZm8sCisJCQkJCQkJCQkJCQkJICBib29sIGNvbnNpZGVyX2luaXRpYWxf c3RlcHMsCisJCQkJCQkJCQkJCQkJICBib29sIGNvbnNpZGVyX2V4ZWNfc3RlcHMsCisJCQkJCQkJ CQkJCQkJICBMaXN0ICpydGFibGUsIEV4cHJDb250ZXh0ICplY29udGV4dCwKKwkJCQkJCQkJCQkJ CQkgIFBhcnRpdGlvbkRpcmVjdG9yeSBwYXJ0ZGlyKTsKIHN0YXRpYyB2b2lkIEluaXRQYXJ0aXRp b25QcnVuZUNvbnRleHQoUGFydGl0aW9uUHJ1bmVDb250ZXh0ICpjb250ZXh0LAogCQkJCQkJCQkJ ICBMaXN0ICpwcnVuaW5nX3N0ZXBzLAogCQkJCQkJCQkJICBQYXJ0aXRpb25EZXNjIHBhcnRkZXNj LApAQCAtMTk4LDcgKzIwMyw4IEBAIHN0YXRpYyB2b2lkIFBhcnRpdGlvblBydW5lRml4U3ViUGxh bk1hcChQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlLAogc3RhdGljIHZvaWQgZmluZF9t YXRjaGluZ19zdWJwbGFuc19yZWN1cnNlKFBhcnRpdGlvblBydW5pbmdEYXRhICpwcnVuZWRhdGEs CiAJCQkJCQkJCQkJICAgUGFydGl0aW9uZWRSZWxQcnVuaW5nRGF0YSAqcHBydW5lLAogCQkJCQkJ CQkJCSAgIGJvb2wgaW5pdGlhbF9wcnVuZSwKLQkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKip2YWxp ZHN1YnBsYW5zKTsKKwkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKip2YWxpZHN1YnBsYW5zLAorCQkJ CQkJCQkJCSAgIEJpdG1hcHNldCAqKnNjYW5fbGVhZnBhcnRfcnRpcyk7CiAKIAogLyoKQEAgLTE1 ODcsOCArMTU5MywxMCBAQCBhZGp1c3RfcGFydGl0aW9uX2NvbG5vc191c2luZ19tYXAoTGlzdCAq Y29sbm9zLCBBdHRyTWFwICphdHRyTWFwKQogICogY29uc2lkZXJlZCB0byBiZSBhIHN0YWJsZSBl eHByZXNzaW9uLCBpdCBjYW4gY2hhbmdlIHZhbHVlIGZyb20gb25lIHBsYW4KICAqIG5vZGUgc2Nh biB0byB0aGUgbmV4dCBkdXJpbmcgcXVlcnkgZXhlY3V0aW9uLiAgU3RhYmxlIGNvbXBhcmlzb24K ICAqIGV4cHJlc3Npb25zIHRoYXQgZG9uJ3QgaW52b2x2ZSBzdWNoIFBhcmFtcyBhbGxvdyBwYXJ0 aXRpb24gcHJ1bmluZyB0byBiZQotICogZG9uZSBvbmNlIGR1cmluZyBleGVjdXRvciBzdGFydHVw LiAgRXhwcmVzc2lvbnMgdGhhdCBkbyBpbnZvbHZlIHN1Y2ggUGFyYW1zCi0gKiByZXF1aXJlIHVz IHRvIHBydW5lIHNlcGFyYXRlbHkgZm9yIGVhY2ggc2NhbiBvZiB0aGUgcGFyZW50IHBsYW4gbm9k ZS4KKyAqIGRvbmUgb25jZSBkdXJpbmcgZXhlY3V0b3Igc3RhcnR1cCBvciBkdXJpbmcgRXhlY3V0 b3JEb0luaXRpYWxQcnVuaW5nKCkgdGhhdAorICogcnVucyBhcyBwYXJ0IG9mIHBlcmZvcm1pbmcg QWNxdWlyZUV4ZWN1dG9yTG9ja3MoKSBvbiBhIGdpdmVuIHBsYW4gdHJlZS4KKyAqIEV4cHJlc3Np b25zIHRoYXQgZG8gaW52b2x2ZSBzdWNoIFBhcmFtcyByZXF1aXJlIHVzIHRvIHBydW5lIHNlcGFy YXRlbHkgZm9yCisgKiBlYWNoIHNjYW4gb2YgdGhlIHBhcmVudCBwbGFuIG5vZGUuCiAgKgogICog Tm90ZSB0aGF0IHBydW5pbmcgYXdheSB1bm5lZWRlZCBzdWJwbGFucyBkdXJpbmcgZXhlY3V0b3Ig c3RhcnR1cCBoYXMgdGhlCiAgKiBhZGRlZCBiZW5lZml0IG9mIG5vdCBoYXZpbmcgdG8gaW5pdGlh bGl6ZSB0aGUgdW5uZWVkZWQgc3VicGxhbnMgYXQgYWxsLgpAQCAtMTYwNSw2ICsxNjEzLDEzIEBA IGFkanVzdF9wYXJ0aXRpb25fY29sbm9zX3VzaW5nX21hcChMaXN0ICpjb2xub3MsIEF0dHJNYXAg KmF0dHJNYXApCiAgKgkJYWNjb3VudCBmb3IgaW5pdGlhbCBwcnVuaW5nIHBvc3NpYmx5IGhhdmlu ZyBlbGltaW5hdGVkIHNvbWUgb2YgdGhlCiAgKgkJc3VicGxhbnMuCiAgKgorICogRXhlY1BhcnRp dGlvbkRvSW5pdGlhbFBydW5pbmc6CisgKgkJRG8gaW5pdGlhbCBwcnVuaW5nIHdpdGggdGhlIGlu Zm9ybWF0aW9uIGNvbnRhaW5lZCBpbiBhIGdpdmVuCisgKgkJUGFydGl0aW9uUHJ1bmVJbmZvIHRv IGRldGVybWluZSB0aGUgbWluaW1hbCBzZXQgb2YgY2hpbGQgc3VicGxhbnMKKyAqCQl0byBiZSBl eGVjdXRlZCBvZiB0aGUgcGFyZW50IHBsYW4gbm9kZSB0byB3aGljaCB0aGUgUGFydGl0aW9uUHJ1 bmVJbmZvCisgKgkJYmVsb25ncyBhbmQgYWxzbyB0aGUgc2V0IG9mIHRoZSBSVCBpbmRleGVzIG9m IGxlYWYgcGFydGl0aW9ucyB0aGF0IHdpbGwKKyAqCQliZSBzY2FubmVkIHdpdGggdGhvc2Ugc3Vi cGxhbnMuCisgKgogICogRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zOgogICoJCVJldHVybnMgaW5k ZXhlcyBvZiBtYXRjaGluZyBzdWJwbGFucyBhZnRlciBldmFsdWF0aW5nIHRoZSBleHByZXNzaW9u cwogICoJCXRoYXQgYXJlIHNhZmUgdG8gZXZhbHVhdGUgYXQgYSBnaXZlbiBwb2ludC4gIFRoaXMg ZnVuY3Rpb24gaXMgZmlyc3QKQEAgLTE2MjIsOCArMTYzNyw5IEBAIGFkanVzdF9wYXJ0aXRpb25f Y29sbm9zX3VzaW5nX21hcChMaXN0ICpjb2xub3MsIEF0dHJNYXAgKmF0dHJNYXApCiAgKgogICog T24gcmV0dXJuLCAqaW5pdGlhbGx5X3ZhbGlkX3N1YnBsYW5zIGlzIGFzc2lnbmVkIHRoZSBzZXQg b2YgaW5kZXhlcyBvZgogICogY2hpbGQgc3VicGxhbnMgdGhhdCBtdXN0IGJlIGluaXRpYWxpemVk IGFsb25nIHdpdGggdGhlIHBhcmVudCBwbGFuIG5vZGUuCi0gKiBJbml0aWFsIHBydW5pbmcgaXMg cGVyZm9ybWVkIGhlcmUgaWYgbmVlZGVkIGFuZCBpbiB0aGF0IGNhc2Ugb25seSB0aGUKLSAqIHN1 cnZpdmluZyBzdWJwbGFucycgaW5kZXhlcyBhcmUgYWRkZWQuCisgKiBJbml0aWFsIHBydW5pbmcg aXMgcGVyZm9ybWVkIGhlcmUgaWYgbmVlZGVkICh1bmxlc3MgaXQgaGFzIGFscmVhZHkgYmVlbiBk b25lCisgKiBieSBFeGVjRG9Jbml0aWFsUHJ1bmluZygpKSwgYW5kIGluIHRoYXQgY2FzZSBvbmx5 IHRoZSBzdXJ2aXZpbmcgc3VicGxhbnMnCisgKiBpbmRleGVzIGFyZSBhZGRlZC4KICAqCiAgKiBJ ZiBzdWJwbGFucyBhcmUgaW5kZWVkIHBydW5lZCwgc3VicGxhbl9tYXAgYXJyYXlzIGNvbnRhaW5l ZCBpbiB0aGUgcmV0dXJuZWQKICAqIFBhcnRpdGlvblBydW5lU3RhdGUgYXJlIHJlLXNlcXVlbmNl ZCB0byBub3QgY291bnQgdGhvc2UsIHRob3VnaCBvbmx5IGlmIHRoZQpAQCAtMTYzMiwyMyArMTY0 OCw1OSBAQCBhZGp1c3RfcGFydGl0aW9uX2NvbG5vc191c2luZ19tYXAoTGlzdCAqY29sbm9zLCBB dHRyTWFwICphdHRyTWFwKQogUGFydGl0aW9uUHJ1bmVTdGF0ZSAqCiBFeGVjSW5pdFBhcnRpdGlv blBydW5pbmcoUGxhblN0YXRlICpwbGFuc3RhdGUsCiAJCQkJCQkgaW50IG5fdG90YWxfc3VicGxh bnMsCi0JCQkJCQkgUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWluZm8sCisJCQkJCQkgaW50IHBh cnRfcHJ1bmVfaW5kZXgsCiAJCQkJCQkgQml0bWFwc2V0ICoqaW5pdGlhbGx5X3ZhbGlkX3N1YnBs YW5zKQogewotCVBhcnRpdGlvblBydW5lU3RhdGUgKnBydW5lc3RhdGU7CiAJRVN0YXRlCSAgICpl c3RhdGUgPSBwbGFuc3RhdGUtPnN0YXRlOworCVBhcnRpdGlvblBydW5lSW5mbyAgKnBydW5laW5m byA9IGxpc3RfbnRoKGVzdGF0ZS0+ZXNfcGFydF9wcnVuZV9pbmZvcywKKwkJCQkJCQkJCQkJICBw YXJ0X3BydW5lX2luZGV4KTsKKwlQYXJ0aXRpb25QcnVuZVJlc3VsdCAqcHJ1bmVyZXN1bHQgPSBl c3RhdGUtPmVzX3BhcnRfcHJ1bmVfcmVzdWx0OworCVBhcnRpdGlvblBydW5lU3RhdGUgKnBydW5l c3RhdGU7CisJYm9vbAlkb19wcnVuaW5nID0gKHBydW5laW5mby0+bmVlZHNfaW5pdF9wcnVuaW5n IHx8CisJCQkJCQkgIHBydW5laW5mby0+bmVlZHNfZXhlY19wcnVuaW5nKTsKIAotCS8qIFdlIG1h eSBuZWVkIGFuIGV4cHJlc3Npb24gY29udGV4dCB0byBldmFsdWF0ZSBwYXJ0aXRpb24gZXhwcnMg Ki8KLQlFeGVjQXNzaWduRXhwckNvbnRleHQoZXN0YXRlLCBwbGFuc3RhdGUpOworCS8qCisJICog Tm8gbmVlZCB0byBkbyBpbml0aWFsIHBydW5pbmcgaWYgaXQgd2FzIGRvbmUgYWxyZWFkeSBieQor CSAqIEV4ZWN1dG9yRG9Jbml0aWFsUHJ1bmluZygpLCB3aGljaCBpdCB3b3VsZCBiZSBpZiBlc19w YXJ0X3BydW5lX3Jlc3VsdAorCSAqIGhhcyBiZWVuIHNldC4KKwkgKi8KKwlpZiAocHJ1bmVyZXN1 bHQpCisJCWRvX3BydW5pbmcgPSBwcnVuZWluZm8tPm5lZWRzX2V4ZWNfcHJ1bmluZzsKKworCXBy dW5lc3RhdGUgPSBOVUxMOworCWlmIChkb19wcnVuaW5nKQorCXsKKwkJLyogV2UgbWF5IG5lZWQg YW4gZXhwcmVzc2lvbiBjb250ZXh0IHRvIGV2YWx1YXRlIHBhcnRpdGlvbiBleHBycyAqLworCQlF eGVjQXNzaWduRXhwckNvbnRleHQoZXN0YXRlLCBwbGFuc3RhdGUpOwogCi0JLyogQ3JlYXRlIHRo ZSB3b3JraW5nIGRhdGEgc3RydWN0dXJlIGZvciBwcnVuaW5nICovCi0JcHJ1bmVzdGF0ZSA9IENy ZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUocGxhbnN0YXRlLCBwcnVuZWluZm8pOworCQkvKiBGb3Ig ZGF0YSByZWFkaW5nLCBleGVjdXRvciBhbHdheXMgb21pdHMgZGV0YWNoZWQgcGFydGl0aW9ucyAq LworCQlpZiAoZXN0YXRlLT5lc19wYXJ0aXRpb25fZGlyZWN0b3J5ID09IE5VTEwpCisJCQllc3Rh dGUtPmVzX3BhcnRpdGlvbl9kaXJlY3RvcnkgPQorCQkJCUNyZWF0ZVBhcnRpdGlvbkRpcmVjdG9y eShlc3RhdGUtPmVzX3F1ZXJ5X2N4dCwgZmFsc2UpOworCisJCS8qCisJCSAqIENyZWF0ZSB0aGUg d29ya2luZyBkYXRhIHN0cnVjdHVyZSBmb3IgcHJ1bmluZy4gIE5vIG5lZWQgdG8gY29uc2lkZXIK KwkJICogaW5pdGlhbCBwcnVuaW5nIHN0ZXBzIGlmIHdlIGhhdmUgYSBQYXJ0aXRpb25QcnVuZVJl c3VsdC4KKwkJICovCisJCXBydW5lc3RhdGUgPSBDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlKHBs YW5zdGF0ZSwgcHJ1bmVpbmZvLAorCQkJCQkJCQkJCQkgICBwcnVuZXJlc3VsdCA9PSBOVUxMLCB0 cnVlLAorCQkJCQkJCQkJCQkgICBOSUwsIHBsYW5zdGF0ZS0+cHNfRXhwckNvbnRleHQsCisJCQkJ CQkJCQkJCSAgIGVzdGF0ZS0+ZXNfcGFydGl0aW9uX2RpcmVjdG9yeSk7CisJfQogCiAJLyoKIAkg KiBQZXJmb3JtIGFuIGluaXRpYWwgcGFydGl0aW9uIHBydW5lIHBhc3MsIGlmIHJlcXVpcmVkLgog CSAqLwotCWlmIChwcnVuZXN0YXRlLT5kb19pbml0aWFsX3BydW5lKQotCQkqaW5pdGlhbGx5X3Zh bGlkX3N1YnBsYW5zID0gRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKHBydW5lc3RhdGUsIHRydWUp OworCWlmIChwcnVuZXJlc3VsdCkKKwl7CisJCSppbml0aWFsbHlfdmFsaWRfc3VicGxhbnMgPQor CQkJbGlzdF9udGgocHJ1bmVyZXN1bHQtPnZhbGlkX3N1YnBsYW5fb2Zmc19saXN0LCBwYXJ0X3By dW5lX2luZGV4KTsKKwl9CisJZWxzZSBpZiAocHJ1bmVzdGF0ZSAmJiBwcnVuZXN0YXRlLT5kb19p bml0aWFsX3BydW5lKQorCXsKKwkJKmluaXRpYWxseV92YWxpZF9zdWJwbGFucyA9IEV4ZWNGaW5k TWF0Y2hpbmdTdWJQbGFucyhwcnVuZXN0YXRlLCB0cnVlLAorCQkJCQkJCQkJCQkJCQkJIE5VTEwp OworCX0KIAllbHNlCiAJewogCQkvKiBObyBwcnVuaW5nLCBzbyB3ZSdsbCBuZWVkIHRvIGluaXRp YWxpemUgYWxsIHN1YnBsYW5zICovCkBAIC0xNjY5LDcgKzE3MjEsNyBAQCBFeGVjSW5pdFBhcnRp dGlvblBydW5pbmcoUGxhblN0YXRlICpwbGFuc3RhdGUsCiAJCSAqIGxlYXZlcyBpbnZhbGlkIGRh dGEgaW4gcHJ1bmVzdGF0ZSwgYmVjYXVzZSB0aGF0IGRhdGEgd29uJ3QgYmUKIAkJICogY29uc3Vs dGVkIGFnYWluIChjZiBpbml0aWFsIEFzc2VydCBpbiBFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMp LgogCQkgKi8KLQkJaWYgKHBydW5lc3RhdGUtPmRvX2V4ZWNfcHJ1bmUpCisJCWlmIChwcnVuZXN0 YXRlICYmIHBydW5lc3RhdGUtPmRvX2V4ZWNfcHJ1bmUpCiAJCQlQYXJ0aXRpb25QcnVuZUZpeFN1 YlBsYW5NYXAocHJ1bmVzdGF0ZSwKIAkJCQkJCQkJCQkqaW5pdGlhbGx5X3ZhbGlkX3N1YnBsYW5z LAogCQkJCQkJCQkJCW5fdG90YWxfc3VicGxhbnMpOwpAQCAtMTY3OCwxMSArMTczMCw3MiBAQCBF eGVjSW5pdFBhcnRpdGlvblBydW5pbmcoUGxhblN0YXRlICpwbGFuc3RhdGUsCiAJcmV0dXJuIHBy dW5lc3RhdGU7CiB9CiAKKy8qCisgKiBFeGVjUGFydGl0aW9uRG9Jbml0aWFsUHJ1bmluZworICoJ CVBlcmZvcm0gaW5pdGlhbCBwcnVuaW5nIHVzaW5nIGdpdmVuIFBhcnRpdGlvblBydW5lSW5mbyB0 byBkZXRlcm1pbmUKKyAqCQl0aGUgbWluaW1hbCBzZXQgb2YgY2hpbGQgc3VicGxhbnMgdG8gYmUg ZXhlY3V0ZWQgb2YgdGhlIHBhcmVudCBwbGFuCisgKgkJbm9kZSB0byB3aGljaCB0aGUgUGFydGl0 aW9uUHJ1bmVJbmZvIGJlbG9uZ3MgYW5kIGFsc28gdGhlIHNldCBvZiBSVAorICoJCWluZGV4ZXMg b2YgbGVhZiBwYXJ0aXRpb25zIHRoYXQgd2lsbCBzY2FubmVkIHdpdGggdGhvc2Ugc3VicGxhbnMu CisgKi8KK0JpdG1hcHNldCAqCitFeGVjUGFydGl0aW9uRG9Jbml0aWFsUHJ1bmluZyhQbGFubmVk U3RtdCAqcGxhbm5lZHN0bXQsIFBhcmFtTGlzdEluZm8gcGFyYW1zLAorCQkJCQkJCSAgUGFydGl0 aW9uUHJ1bmVJbmZvICpwcnVuZWluZm8sCisJCQkJCQkJICBCaXRtYXBzZXQgKipzY2FuX2xlYWZw YXJ0X3J0aXMpCit7CisJTGlzdAkJICpydGFibGUgPSBwbGFubmVkc3RtdC0+cnRhYmxlOworCUV4 cHJDb250ZXh0CSAqZWNvbnRleHQ7CisJUGFydGl0aW9uRGlyZWN0b3J5IHBkaXI7CisJTWVtb3J5 Q29udGV4dCBvbGRjb250ZXh0LAorCQkJCSAgdG1wY29udGV4dDsKKwlQYXJ0aXRpb25QcnVuZVN0 YXRlICpwcnVuZXN0YXRlOworCUJpdG1hcHNldAkgKnZhbGlkX3N1YnBsYW5fb2ZmczsKKworCS8q CisJICogQSB0ZW1wb3JhcnkgY29udGV4dCB0byBhbGxvY2F0ZSBzdHVmZiBuZWVkZGVkIHRvIHJ1 biB0aGUgcHJ1bmluZyBzdGVwcy4KKwkgKi8KKwl0bXBjb250ZXh0ID0gQWxsb2NTZXRDb250ZXh0 Q3JlYXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkJICAgImluaXRpYWwgcHJ1bmlu ZyB3b3JraW5nIGRhdGEiLAorCQkJCQkJCQkJICAgQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7CisJ b2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyh0bXBjb250ZXh0KTsKKworCS8qCisJ ICogUGFydGl0aW9uRGlyZWN0b3J5IHRvIGxvb2sgdXAgcGFydGl0aW9uIGRlc2NyaXB0b3JzLCB3 aGljaCBvbWl0cworCSAqIGRldGFjaGVkIHBhcnRpdGlvbnMsIGp1c3QgbGlrZSBpbiB0aGUgZXhl Y3V0b3IgcHJvcGVyLgorCSAqLworCXBkaXIgPSBDcmVhdGVQYXJ0aXRpb25EaXJlY3RvcnkoQ3Vy cmVudE1lbW9yeUNvbnRleHQsIGZhbHNlKTsKKworCS8qCisJICogV2UgZG9uJ3QgeWV0IGhhdmUg YSBQbGFuU3RhdGUgZm9yIHRoZSBwYXJlbnQgcGxhbiBub2RlLCBzbyBtdXN0IGNyZWF0ZQorCSAq IGEgc3RhbmRhbG9uZSBFeHByQ29udGV4dCB0byBldmFsdWF0ZSBwcnVuaW5nIGV4cHJlc3Npb25z LCBlcXVpcHBlZCB3aXRoCisJICogdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBFWFRFUk4gcGFy YW1ldGVycyB0aGF0IHRoZSBjYWxsZXIgcGFzc2VkIHVzLgorCSAqIE5vdGUgdGhhdCB0aGF0J3Mg b2theSBiZWNhdXNlIHRoZSBpbml0aWFsIHBydW5pbmcgc3RlcHMgZG8gbm90IGNvbnRhaW4KKwkg KiBhbnl0aGluZyB0aGF0IHJlcXVpcmVzIHRoZSBleGVjdXRpb24gdG8gaGF2ZSBzdGFydGVkLgor CSAqLworCWVjb250ZXh0ID0gQ3JlYXRlU3RhbmRhbG9uZUV4cHJDb250ZXh0KCk7CisJZWNvbnRl eHQtPmVjeHRfcGFyYW1fbGlzdF9pbmZvID0gcGFyYW1zOworCXBydW5lc3RhdGUgPSBDcmVhdGVQ YXJ0aXRpb25QcnVuZVN0YXRlKE5VTEwsIHBydW5laW5mbywgdHJ1ZSwgZmFsc2UsCisJCQkJCQkJ CQkJICAgcnRhYmxlLCBlY29udGV4dCwgcGRpcik7CisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9s ZGNvbnRleHQpOworCisJLyogRG8gdGhlIGluaXRpYWwgcHJ1bmluZy4gKi8KKwl2YWxpZF9zdWJw bGFuX29mZnMgPSBFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMocHJ1bmVzdGF0ZSwgdHJ1ZSwKKwkJ CQkJCQkJCQkJCSAgc2Nhbl9sZWFmcGFydF9ydGlzKTsKKworCUZyZWVFeHByQ29udGV4dChlY29u dGV4dCwgdHJ1ZSk7CisJRGVzdHJveVBhcnRpdGlvbkRpcmVjdG9yeShwZGlyKTsKKwlNZW1vcnlD b250ZXh0RGVsZXRlKHRtcGNvbnRleHQpOworCisJcmV0dXJuIHZhbGlkX3N1YnBsYW5fb2ZmczsK K30KKwogLyoKICAqIENyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUKICAqCQlCdWlsZCB0aGUgZGF0 YSBzdHJ1Y3R1cmUgcmVxdWlyZWQgZm9yIGNhbGxpbmcgRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5z CiAgKgotICogJ3BsYW5zdGF0ZScgaXMgdGhlIHBhcmVudCBwbGFuIG5vZGUncyBleGVjdXRpb24g c3RhdGUuCisgKiAncGxhbnN0YXRlJywgaWYgbm90IE5VTEwsIGlzIHRoZSBwYXJlbnQgcGxhbiBu b2RlJ3MgZXhlY3V0aW9uIHN0YXRlLiAgSXQKKyAqIGNhbiBiZSBOVUxMIGlmIGJlaW5nIGNhbGxl ZCBiZWZvcmUgRXhlY3V0b3JTdGFydCgpLCBpbiB3aGljaCBjYXNlLAorICogJ3J0YWJsZScgKHJh bmdlIHRhYmxlKSwgJ2Vjb250ZXh0JywgYW5kICdwYXJ0ZGlyJyBtdXN0IGJlIGV4cGxpY2l0bHkK KyAqIHByb3ZpZGVkLgogICoKICAqICdwcnVuZWluZm8nIGlzIGEgUGFydGl0aW9uUHJ1bmVJbmZv IGFzIGdlbmVyYXRlZCBieQogICogbWFrZV9wYXJ0aXRpb25fcHJ1bmVpbmZvLiAgSGVyZSB3ZSBi dWlsZCBhIFBhcnRpdGlvblBydW5lU3RhdGUgY29udGFpbmluZyBhCkBAIC0xNjk2LDE5ICsxODA5 LDIxIEBAIEV4ZWNJbml0UGFydGl0aW9uUHJ1bmluZyhQbGFuU3RhdGUgKnBsYW5zdGF0ZSwKICAq IFBhcnRpdGlvbmVkUmVsUHJ1bmVJbmZvLgogICovCiBzdGF0aWMgUGFydGl0aW9uUHJ1bmVTdGF0 ZSAqCi1DcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBQYXJ0 aXRpb25QcnVuZUluZm8gKnBydW5laW5mbykKK0NyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUoUGxh blN0YXRlICpwbGFuc3RhdGUsCisJCQkJCQkgIFBhcnRpdGlvblBydW5lSW5mbyAqcHJ1bmVpbmZv LAorCQkJCQkJICBib29sIGNvbnNpZGVyX2luaXRpYWxfc3RlcHMsCisJCQkJCQkgIGJvb2wgY29u c2lkZXJfZXhlY19zdGVwcywKKwkJCQkJCSAgTGlzdCAqcnRhYmxlLCBFeHByQ29udGV4dCAqZWNv bnRleHQsCisJCQkJCQkgIFBhcnRpdGlvbkRpcmVjdG9yeSBwYXJ0ZGlyKQogewotCUVTdGF0ZQkg ICAqZXN0YXRlID0gcGxhbnN0YXRlLT5zdGF0ZTsKKwlFU3RhdGUJICAgKmVzdGF0ZSA9IHBsYW5z dGF0ZSA/IHBsYW5zdGF0ZS0+c3RhdGUgOiBOVUxMOwogCVBhcnRpdGlvblBydW5lU3RhdGUgKnBy dW5lc3RhdGU7CiAJaW50CQkJbl9wYXJ0X2hpZXJhcmNoaWVzOwogCUxpc3RDZWxsICAgKmxjOwog CWludAkJCWk7Ci0JRXhwckNvbnRleHQgKmVjb250ZXh0ID0gcGxhbnN0YXRlLT5wc19FeHByQ29u dGV4dDsKIAotCS8qIEZvciBkYXRhIHJlYWRpbmcsIGV4ZWN1dG9yIGFsd2F5cyBvbWl0cyBkZXRh Y2hlZCBwYXJ0aXRpb25zICovCi0JaWYgKGVzdGF0ZS0+ZXNfcGFydGl0aW9uX2RpcmVjdG9yeSA9 PSBOVUxMKQotCQllc3RhdGUtPmVzX3BhcnRpdGlvbl9kaXJlY3RvcnkgPQotCQkJQ3JlYXRlUGFy dGl0aW9uRGlyZWN0b3J5KGVzdGF0ZS0+ZXNfcXVlcnlfY3h0LCBmYWxzZSk7CisJQXNzZXJ0KChl c3RhdGUgIT0gTlVMTCkgfHwKKwkJCShwYXJ0ZGlyICE9IE5VTEwgJiYgZWNvbnRleHQgIT0gTlVM TCAmJiBydGFibGUgIT0gTklMKSk7CiAKIAluX3BhcnRfaGllcmFyY2hpZXMgPSBsaXN0X2xlbmd0 aChwcnVuZWluZm8tPnBydW5lX2luZm9zKTsKIAlBc3NlcnQobl9wYXJ0X2hpZXJhcmNoaWVzID4g MCk7CkBAIC0xNzU5LDE5ICsxODc0LDQ4IEBAIENyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUoUGxh blN0YXRlICpwbGFuc3RhdGUsIFBhcnRpdGlvblBydW5lSW5mbyAqcHJ1bmVpbmZvKQogCQkJUGFy dGl0aW9uZWRSZWxQcnVuZUluZm8gKnBpbmZvID0gbGZpcnN0X25vZGUoUGFydGl0aW9uZWRSZWxQ cnVuZUluZm8sIGxjMik7CiAJCQlQYXJ0aXRpb25lZFJlbFBydW5pbmdEYXRhICpwcHJ1bmUgPSAm cHJ1bmVkYXRhLT5wYXJ0cmVscHJ1bmVkYXRhW2pdOwogCQkJUmVsYXRpb24JcGFydHJlbDsKKwkJ CWJvb2wJCWNsb3NlX3BhcnRyZWwgPSBmYWxzZTsKIAkJCVBhcnRpdGlvbkRlc2MgcGFydGRlc2M7 CiAJCQlQYXJ0aXRpb25LZXkgcGFydGtleTsKIAogCQkJLyoKLQkJCSAqIFdlIGNhbiByZWx5IG9u IHRoZSBjb3BpZXMgb2YgdGhlIHBhcnRpdGlvbmVkIHRhYmxlJ3MgcGFydGl0aW9uCi0JCQkgKiBr ZXkgYW5kIHBhcnRpdGlvbiBkZXNjcmlwdG9yIGFwcGVhcmluZyBpbiBpdHMgcmVsY2FjaGUgZW50 cnksCi0JCQkgKiBiZWNhdXNlIHRoYXQgZW50cnkgd2lsbCBiZSBoZWxkIG9wZW4gYW5kIGxvY2tl ZCBmb3IgdGhlCi0JCQkgKiBkdXJhdGlvbiBvZiB0aGlzIGV4ZWN1dG9yIHJ1bi4KKwkJCSAqIE11 c3Qgb3BlbiB0aGUgcmVsYXRpb24gYnkgb3Vyc2VsdmVzIHdoZW4gY2FsbGVkIGJlZm9yZSB0aGUK KwkJCSAqIGV4ZWN1dGlvbiBoYXMgc3RhcnRlZCwgc3VjaCBhcywgd2hlbiBjYWxsZWQgZHVyaW5n CisJCQkgKiBFeGVjdXRvckRvSW5pdGlhbFBydW5pbmcoKSBvbiBhIGNhY2hlZCBwbGFuLiAgSW4g dGhhdCBjYXNlLAorCQkJICogc3ViLXBhcnRpdGlvbnMgbXVzdCBiZSBsb2NrZWQsIGJlY2F1c2Ug QWNxdWlyZVBsYW5uZXJMb2NrcygpCisJCQkgKiB3b3VsZCBub3QgaGF2ZSBzZWVuIHRoZW0uICgx c3QgcmVsYXRpb24gaW4gYSBwYXJ0cmVscHJ1bmVpbmZvcworCQkJICogbGlzdCBpcyBhbHdheXMg dGhlIHJvb3QgcGFydGl0aW9uZWQgdGFibGUgYXBwZWFyaW5nIGluIHRoZQorCQkJICogcXVlcnks IHdoaWNoIEFjcXVpcmVQbGFubmVyTG9ja3MoKSB3b3VsZCBoYXZlIGxvY2tlZDsgdGhlCisJCQkg KiBBc3NlcnQgaW4gcmVsYXRpb25fb3BlbigpIGd1YXJkcyB0aGF0IGFzc3VtcHRpb24uKQorCQkJ ICovCisJCQlpZiAoZXN0YXRlID09IE5VTEwpCisJCQl7CisJCQkJUmFuZ2VUYmxFbnRyeSAqcnRl ID0gcnRfZmV0Y2gocGluZm8tPnJ0aW5kZXgsIHJ0YWJsZSk7CisJCQkJaW50CQlsb2NrbW9kZSA9 IChqID09IDApID8gTm9Mb2NrIDogcnRlLT5yZWxsb2NrbW9kZTsKKworCQkJCXBhcnRyZWwgPSB0 YWJsZV9vcGVuKHJ0ZS0+cmVsaWQsIGxvY2ttb2RlKTsKKwkJCQljbG9zZV9wYXJ0cmVsID0gdHJ1 ZTsKKwkJCX0KKwkJCWVsc2UKKwkJCQlwYXJ0cmVsID0gRXhlY0dldFJhbmdlVGFibGVSZWxhdGlv bihlc3RhdGUsIHBpbmZvLT5ydGluZGV4KTsKKworCQkJLyoKKwkJCSAqIFdlIGNhbiByZWx5IG9u IHRoZSBjb3B5IG9mIHRoZSBwYXJ0aXRpb25lZCB0YWJsZSdzIHBhcnRpdGlvbgorCQkJICoga2V5 IGZyb20gaW4gaXRzIHJlbGNhY2hlIGVudHJ5LCBiZWNhdXNlIGl0IGNhbid0IGNoYW5nZSAob3IK KwkJCSAqIGdldCBkZXN0cm95ZWQpIGFzIGxvbmcgYXMgdGhlIHJlbGF0aW9uIGlzIGxvY2tlZC4g IFBhcnRpdGlvbgorCQkJICogZGVzY3JpcHRvciBpcyB0YWtlbiBmcm9tIHRoZSBQYXJ0aXRpb25E aXJlY3RvcnkgYXNzb2NpYXRlZCB3aXRoCisJCQkgKiB0aGUgdGFibGUgdGhhdCBpcyBoZWxkIG9w ZW4gbG9uZyBlbm91Z2ggZm9yIHRoZSBkZXNjcmlwdG9yIHRvCisJCQkgKiByZW1haW4gdmFsaWQg d2hpbGUgaXQncyB1c2VkIHRvIHBlcmZvcm0gdGhlIHBydW5pbmcgc3RlcHMuCiAJCQkgKi8KLQkJ CXBhcnRyZWwgPSBFeGVjR2V0UmFuZ2VUYWJsZVJlbGF0aW9uKGVzdGF0ZSwgcGluZm8tPnJ0aW5k ZXgpOwogCQkJcGFydGtleSA9IFJlbGF0aW9uR2V0UGFydGl0aW9uS2V5KHBhcnRyZWwpOwotCQkJ cGFydGRlc2MgPSBQYXJ0aXRpb25EaXJlY3RvcnlMb29rdXAoZXN0YXRlLT5lc19wYXJ0aXRpb25f ZGlyZWN0b3J5LAotCQkJCQkJCQkJCQkJcGFydHJlbCk7CisJCQlwYXJ0ZGVzYyA9IFBhcnRpdGlv bkRpcmVjdG9yeUxvb2t1cChwYXJ0ZGlyLCBwYXJ0cmVsKTsKKworCQkJLyoKKwkJCSAqIE11c3Qg Y2xvc2UgcGFydHJlbCwga2VlcGluZyB0aGUgbG9jayB0YWtlbiwgaWYgd2UncmUgbm90IHVzaW5n CisJCQkgKiBFU3RhdGUncyBlbnRyeS4KKwkJCSAqLworCQkJaWYgKGNsb3NlX3BhcnRyZWwpCisJ CQkJdGFibGVfY2xvc2UocGFydHJlbCwgTm9Mb2NrKTsKIAogCQkJLyoKIAkJCSAqIEluaXRpYWxp emUgdGhlIHN1YnBsYW5fbWFwIGFuZCBzdWJwYXJ0X21hcC4KQEAgLTE3ODUsNiArMTkyOSw3IEBA IENyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIFBhcnRpdGlv blBydW5lSW5mbyAqcHJ1bmVpbmZvKQogCQkJQXNzZXJ0KHBhcnRkZXNjLT5ucGFydHMgPj0gcGlu Zm8tPm5wYXJ0cyk7CiAJCQlwcHJ1bmUtPm5wYXJ0cyA9IHBhcnRkZXNjLT5ucGFydHM7CiAJCQlw cHJ1bmUtPnN1YnBsYW5fbWFwID0gcGFsbG9jKHNpemVvZihpbnQpICogcGFydGRlc2MtPm5wYXJ0 cyk7CisJCQlwcHJ1bmUtPnJ0aV9tYXAgPSBwYWxsb2Moc2l6ZW9mKEluZGV4KSAqIHBhcnRkZXNj LT5ucGFydHMpOwogCQkJaWYgKHBhcnRkZXNjLT5ucGFydHMgPT0gcGluZm8tPm5wYXJ0cykKIAkJ CXsKIAkJCQkvKgpAQCAtMTc5NSw2ICsxOTQwLDggQEAgQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0 ZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWluZm8pCiAJ CQkJcHBydW5lLT5zdWJwYXJ0X21hcCA9IHBpbmZvLT5zdWJwYXJ0X21hcDsKIAkJCQltZW1jcHko cHBydW5lLT5zdWJwbGFuX21hcCwgcGluZm8tPnN1YnBsYW5fbWFwLAogCQkJCQkgICBzaXplb2Yo aW50KSAqIHBpbmZvLT5ucGFydHMpOworCQkJCW1lbWNweShwcHJ1bmUtPnJ0aV9tYXAsIHBpbmZv LT5ydGlfbWFwLAorCQkJCQkgICBzaXplb2YoaW50KSAqIHBpbmZvLT5ucGFydHMpOwogCiAJCQkJ LyoKIAkJCQkgKiBEb3VibGUtY2hlY2sgdGhhdCB0aGUgbGlzdCBvZiB1bnBydW5lZCByZWxhdGlv bnMgaGFzIG5vdApAQCAtMTg0NSw2ICsxOTkyLDggQEAgQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0 ZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWluZm8pCiAJ CQkJCQkJcGluZm8tPnN1YnBsYW5fbWFwW3BkX2lkeF07CiAJCQkJCQlwcHJ1bmUtPnN1YnBhcnRf bWFwW3BwX2lkeF0gPQogCQkJCQkJCXBpbmZvLT5zdWJwYXJ0X21hcFtwZF9pZHhdOworCQkJCQkJ cHBydW5lLT5ydGlfbWFwW3BwX2lkeF0gPQorCQkJCQkJCXBpbmZvLT5ydGlfbWFwW3BkX2lkeF07 CiAJCQkJCQlwZF9pZHgrKzsKIAkJCQkJfQogCQkJCQllbHNlCkBAIC0xODUyLDYgKzIwMDEsNyBA QCBDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBQYXJ0aXRp b25QcnVuZUluZm8gKnBydW5laW5mbykKIAkJCQkJCS8qIHRoaXMgcGFydGRlc2MgZW50cnkgaXMg bm90IGluIHRoZSBwbGFuICovCiAJCQkJCQlwcHJ1bmUtPnN1YnBsYW5fbWFwW3BwX2lkeF0gPSAt MTsKIAkJCQkJCXBwcnVuZS0+c3VicGFydF9tYXBbcHBfaWR4XSA9IC0xOworCQkJCQkJcHBydW5l LT5ydGlfbWFwW3BwX2lkeF0gPSAwOwogCQkJCQl9CiAJCQkJfQogCkBAIC0xODczLDcgKzIwMjMs NyBAQCBDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBQYXJ0 aXRpb25QcnVuZUluZm8gKnBydW5laW5mbykKIAkJCSAqIEluaXRpYWxpemUgcHJ1bmluZyBjb250 ZXh0cyBhcyBuZWVkZWQuCiAJCQkgKi8KIAkJCXBwcnVuZS0+aW5pdGlhbF9wcnVuaW5nX3N0ZXBz ID0gcGluZm8tPmluaXRpYWxfcHJ1bmluZ19zdGVwczsKLQkJCWlmIChwaW5mby0+aW5pdGlhbF9w cnVuaW5nX3N0ZXBzKQorCQkJaWYgKGNvbnNpZGVyX2luaXRpYWxfc3RlcHMgJiYgcGluZm8tPmlu aXRpYWxfcHJ1bmluZ19zdGVwcykKIAkJCXsKIAkJCQlJbml0UGFydGl0aW9uUHJ1bmVDb250ZXh0 KCZwcHJ1bmUtPmluaXRpYWxfY29udGV4dCwKIAkJCQkJCQkJCQkgIHBpbmZvLT5pbml0aWFsX3By dW5pbmdfc3RlcHMsCkBAIC0xODgzLDcgKzIwMzMsNyBAQCBDcmVhdGVQYXJ0aXRpb25QcnVuZVN0 YXRlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBQYXJ0aXRpb25QcnVuZUluZm8gKnBydW5laW5mbykK IAkJCQlwcnVuZXN0YXRlLT5kb19pbml0aWFsX3BydW5lID0gdHJ1ZTsKIAkJCX0KIAkJCXBwcnVu ZS0+ZXhlY19wcnVuaW5nX3N0ZXBzID0gcGluZm8tPmV4ZWNfcHJ1bmluZ19zdGVwczsKLQkJCWlm IChwaW5mby0+ZXhlY19wcnVuaW5nX3N0ZXBzKQorCQkJaWYgKGNvbnNpZGVyX2V4ZWNfc3RlcHMg JiYgcGluZm8tPmV4ZWNfcHJ1bmluZ19zdGVwcykKIAkJCXsKIAkJCQlJbml0UGFydGl0aW9uUHJ1 bmVDb250ZXh0KCZwcHJ1bmUtPmV4ZWNfY29udGV4dCwKIAkJCQkJCQkJCQkgIHBpbmZvLT5leGVj X3BydW5pbmdfc3RlcHMsCkBAIC0yMTExLDEwICsyMjYxLDE0IEBAIFBhcnRpdGlvblBydW5lRml4 U3ViUGxhbk1hcChQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlLAogICogUGFzcyBpbml0 aWFsX3BydW5lIGlmIFBBUkFNX0VYRUMgUGFyYW1zIGNhbm5vdCB5ZXQgYmUgZXZhbHVhdGVkLiAg VGhpcwogICogZGlmZmVyZW50aWF0ZXMgdGhlIGluaXRpYWwgZXhlY3V0b3ItdGltZSBwcnVuaW5n IHN0ZXAgZnJvbSBsYXRlcgogICogcnVudGltZSBwcnVuaW5nLgorICoKKyAqIFJUIGluZGV4ZXMg b2YgbGVhZiBwYXJ0aXRpb25zIHNjYW5uZWQgYnkgdGhlIGNob3NlbiBzdWJwbGFucyBhcmUgYWRk ZWQgdG8KKyAqICpzY2FuX2xlYWZwYXJ0X3J0aXMgaWYgdGhlIHBvaW50ZXIgaXMgbm9uLU5VTEwu CiAgKi8KIEJpdG1hcHNldCAqCiBFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMoUGFydGl0aW9uUHJ1 bmVTdGF0ZSAqcHJ1bmVzdGF0ZSwKLQkJCQkJCSBib29sIGluaXRpYWxfcHJ1bmUpCisJCQkJCQkg Ym9vbCBpbml0aWFsX3BydW5lLAorCQkJCQkJIEJpdG1hcHNldCAqKnNjYW5fbGVhZnBhcnRfcnRp cykKIHsKIAlCaXRtYXBzZXQgICpyZXN1bHQgPSBOVUxMOwogCU1lbW9yeUNvbnRleHQgb2xkY29u dGV4dDsKQEAgLTIxNDksNyArMjMwMyw3IEBAIEV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhQYXJ0 aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlLAogCQkgKi8KIAkJcHBydW5lID0gJnBydW5lZGF0 YS0+cGFydHJlbHBydW5lZGF0YVswXTsKIAkJZmluZF9tYXRjaGluZ19zdWJwbGFuc19yZWN1cnNl KHBydW5lZGF0YSwgcHBydW5lLCBpbml0aWFsX3BydW5lLAotCQkJCQkJCQkJICAgJnJlc3VsdCk7 CisJCQkJCQkJCQkgICAmcmVzdWx0LCBzY2FuX2xlYWZwYXJ0X3J0aXMpOwogCiAJCS8qIEV4cHJl c3Npb24gZXZhbCBtYXkgaGF2ZSB1c2VkIHNwYWNlIGluIEV4cHJDb250ZXh0IHRvbyAqLwogCQlp ZiAocHBydW5lLT5leGVjX3BydW5pbmdfc3RlcHMpCkBAIC0yMTYzLDYgKzIzMTcsOCBAQCBFeGVj RmluZE1hdGNoaW5nU3ViUGxhbnMoUGFydGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0ZSwKIAog CS8qIENvcHkgcmVzdWx0IG91dCBvZiB0aGUgdGVtcCBjb250ZXh0IGJlZm9yZSB3ZSByZXNldCBp dCAqLwogCXJlc3VsdCA9IGJtc19jb3B5KHJlc3VsdCk7CisJaWYgKHNjYW5fbGVhZnBhcnRfcnRp cykKKwkJKnNjYW5fbGVhZnBhcnRfcnRpcyA9IGJtc19jb3B5KCpzY2FuX2xlYWZwYXJ0X3J0aXMp OwogCiAJTWVtb3J5Q29udGV4dFJlc2V0KHBydW5lc3RhdGUtPnBydW5lX2NvbnRleHQpOwogCkBA IC0yMTczLDEzICsyMzI5LDE1IEBAIEV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhQYXJ0aXRpb25Q cnVuZVN0YXRlICpwcnVuZXN0YXRlLAogICogZmluZF9tYXRjaGluZ19zdWJwbGFuc19yZWN1cnNl CiAgKgkJUmVjdXJzaXZlIHdvcmtlciBmdW5jdGlvbiBmb3IgRXhlY0ZpbmRNYXRjaGluZ1N1YlBs YW5zCiAgKgotICogQWRkcyB2YWxpZCAobm9uLXBydW5hYmxlKSBzdWJwbGFuIElEcyB0byAqdmFs aWRzdWJwbGFucworICogQWRkcyB2YWxpZCAobm9uLXBydW5hYmxlKSBzdWJwbGFuIElEcyB0byAq dmFsaWRzdWJwbGFucyBhbmQgUlQgaW5kZXhlcyBvZgorICogb2YgdGhlIGNvcnJlc3BvbmRpbmcg bGVhZiBwYXJ0aXRpb25zIHRvICpzY2FuX2xlYWZwYXJ0X3J0aXMgKGlmIGFza2VkIGZvcikuCiAg Ki8KIHN0YXRpYyB2b2lkCiBmaW5kX21hdGNoaW5nX3N1YnBsYW5zX3JlY3Vyc2UoUGFydGl0aW9u UHJ1bmluZ0RhdGEgKnBydW5lZGF0YSwKIAkJCQkJCQkgICBQYXJ0aXRpb25lZFJlbFBydW5pbmdE YXRhICpwcHJ1bmUsCiAJCQkJCQkJICAgYm9vbCBpbml0aWFsX3BydW5lLAotCQkJCQkJCSAgIEJp dG1hcHNldCAqKnZhbGlkc3VicGxhbnMpCisJCQkJCQkJICAgQml0bWFwc2V0ICoqdmFsaWRzdWJw bGFucywKKwkJCQkJCQkgICBCaXRtYXBzZXQgKipzY2FuX2xlYWZwYXJ0X3J0aXMpCiB7CiAJQml0 bWFwc2V0ICAqcGFydHNldDsKIAlpbnQJCQlpOwpAQCAtMjIwNiw4ICsyMzY0LDEzIEBAIGZpbmRf bWF0Y2hpbmdfc3VicGxhbnNfcmVjdXJzZShQYXJ0aXRpb25QcnVuaW5nRGF0YSAqcHJ1bmVkYXRh LAogCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihwYXJ0c2V0LCBpKSkgPj0gMCkKIAl7CiAJ CWlmIChwcHJ1bmUtPnN1YnBsYW5fbWFwW2ldID49IDApCisJCXsKIAkJCSp2YWxpZHN1YnBsYW5z ID0gYm1zX2FkZF9tZW1iZXIoKnZhbGlkc3VicGxhbnMsCiAJCQkJCQkJCQkJCXBwcnVuZS0+c3Vi cGxhbl9tYXBbaV0pOworCQkJaWYgKHNjYW5fbGVhZnBhcnRfcnRpcyAmJiBwcHJ1bmUtPnJ0aV9t YXBbaV0gPiAwKQorCQkJCSpzY2FuX2xlYWZwYXJ0X3J0aXMgPSBibXNfYWRkX21lbWJlcigqc2Nh bl9sZWFmcGFydF9ydGlzLAorCQkJCQkJCQkJCQkJCSBwcHJ1bmUtPnJ0aV9tYXBbaV0pOworCQl9 CiAJCWVsc2UKIAkJewogCQkJaW50CQkJcGFydGlkeCA9IHBwcnVuZS0+c3VicGFydF9tYXBbaV07 CkBAIC0yMjE1LDcgKzIzNzgsOCBAQCBmaW5kX21hdGNoaW5nX3N1YnBsYW5zX3JlY3Vyc2UoUGFy dGl0aW9uUHJ1bmluZ0RhdGEgKnBydW5lZGF0YSwKIAkJCWlmIChwYXJ0aWR4ID49IDApCiAJCQkJ ZmluZF9tYXRjaGluZ19zdWJwbGFuc19yZWN1cnNlKHBydW5lZGF0YSwKIAkJCQkJCQkJCQkJICAg JnBydW5lZGF0YS0+cGFydHJlbHBydW5lZGF0YVtwYXJ0aWR4XSwKLQkJCQkJCQkJCQkJICAgaW5p dGlhbF9wcnVuZSwgdmFsaWRzdWJwbGFucyk7CisJCQkJCQkJCQkJCSAgIGluaXRpYWxfcHJ1bmUs IHZhbGlkc3VicGxhbnMsCisJCQkJCQkJCQkJCSAgIHNjYW5fbGVhZnBhcnRfcnRpcyk7CiAJCQll bHNlCiAJCQl7CiAJCQkJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNV dGlscy5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1V0aWxzLmMKaW5kZXggOWRmMWY4MWVh OC4uNjM5MTQ1YWJlOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1V0aWxz LmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1V0aWxzLmMKQEAgLTExOSw2ICsxMTks NyBAQCBDcmVhdGVFeGVjdXRvclN0YXRlKHZvaWQpCiAJZXN0YXRlLT5lc19yZWxhdGlvbnMgPSBO VUxMOwogCWVzdGF0ZS0+ZXNfcm93bWFya3MgPSBOVUxMOwogCWVzdGF0ZS0+ZXNfcGxhbm5lZHN0 bXQgPSBOVUxMOworCWVzdGF0ZS0+ZXNfcGFydF9wcnVuZV9yZXN1bHQgPSBOVUxMOwogCiAJZXN0 YXRlLT5lc19qdW5rRmlsdGVyID0gTlVMTDsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhl Y3V0b3IvZnVuY3Rpb25zLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9mdW5jdGlvbnMuYwppbmRl eCBmOTQ2MGFlNTA2Li5hMjE4MmE2YjFmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRv ci9mdW5jdGlvbnMuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9mdW5jdGlvbnMuYwpAQCAt ODQ0LDcgKzg0NCw3IEBAIHBvc3RxdWVsX3N0YXJ0KGV4ZWN1dGlvbl9zdGF0ZSAqZXMsIFNRTEZ1 bmN0aW9uQ2FjaGVQdHIgZmNhY2hlKQogCWVsc2UKIAkJZGVzdCA9IE5vbmVfUmVjZWl2ZXI7CiAK LQllcy0+cWQgPSBDcmVhdGVRdWVyeURlc2MoZXMtPnN0bXQsCisJZXMtPnFkID0gQ3JlYXRlUXVl cnlEZXNjKGVzLT5zdG10LCBOVUxMLAogCQkJCQkJCSBmY2FjaGUtPnNyYywKIAkJCQkJCQkgR2V0 QWN0aXZlU25hcHNob3QoKSwKIAkJCQkJCQkgSW52YWxpZFNuYXBzaG90LApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVuZC5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv bm9kZUFwcGVuZC5jCmluZGV4IDM1N2UxMGExZDcuLjA5ZjI2NjU4ZTIgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBlbmQuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRv ci9ub2RlQXBwZW5kLmMKQEAgLTk0LDYgKzk0LDcgQEAgc3RhdGljIGJvb2wgRXhlY0FwcGVuZEFz eW5jUmVxdWVzdChBcHBlbmRTdGF0ZSAqbm9kZSwgVHVwbGVUYWJsZVNsb3QgKipyZXN1bHQpOwog c3RhdGljIHZvaWQgRXhlY0FwcGVuZEFzeW5jRXZlbnRXYWl0KEFwcGVuZFN0YXRlICpub2RlKTsK IHN0YXRpYyB2b2lkIGNsYXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zKEFwcGVuZFN0YXRlICpub2Rl KTsKIAorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCiAgKgkJRXhlY0luaXRBcHBlbmQKICAqCkBAIC0xMzQsNyArMTM1 LDcgQEAgRXhlY0luaXRBcHBlbmQoQXBwZW5kICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVm bGFncykKIAlhcHBlbmRzdGF0ZS0+YXNfYmVndW4gPSBmYWxzZTsKIAogCS8qIElmIHJ1bi10aW1l IHBhcnRpdGlvbiBwcnVuaW5nIGlzIGVuYWJsZWQsIHRoZW4gc2V0IHRoYXQgdXAgbm93ICovCi0J aWYgKG5vZGUtPnBhcnRfcHJ1bmVfaW5mbyAhPSBOVUxMKQorCWlmIChub2RlLT5wYXJ0X3BydW5l X2luZGV4ID49IDApCiAJewogCQlQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlOwogCkBA IC0xNDUsNyArMTQ2LDcgQEAgRXhlY0luaXRBcHBlbmQoQXBwZW5kICpub2RlLCBFU3RhdGUgKmVz dGF0ZSwgaW50IGVmbGFncykKIAkJICovCiAJCXBydW5lc3RhdGUgPSBFeGVjSW5pdFBhcnRpdGlv blBydW5pbmcoJmFwcGVuZHN0YXRlLT5wcywKIAkJCQkJCQkJCQkJICBsaXN0X2xlbmd0aChub2Rl LT5hcHBlbmRwbGFucyksCi0JCQkJCQkJCQkJCSAgbm9kZS0+cGFydF9wcnVuZV9pbmZvLAorCQkJ CQkJCQkJCQkgIG5vZGUtPnBhcnRfcHJ1bmVfaW5kZXgsCiAJCQkJCQkJCQkJCSAgJnZhbGlkc3Vi cGxhbnMpOwogCQlhcHBlbmRzdGF0ZS0+YXNfcHJ1bmVfc3RhdGUgPSBwcnVuZXN0YXRlOwogCQlu cGxhbnMgPSBibXNfbnVtX21lbWJlcnModmFsaWRzdWJwbGFucyk7CkBAIC0xNTUsNyArMTU2LDgg QEAgRXhlY0luaXRBcHBlbmQoQXBwZW5kICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFn cykKIAkJICogc3VicGxhbiwgd2UgY2FuIGZpbGwgYXNfdmFsaWRfc3VicGxhbnMgaW1tZWRpYXRl bHksIHByZXZlbnRpbmcKIAkJICogbGF0ZXIgY2FsbHMgdG8gRXhlY0ZpbmRNYXRjaGluZ1N1YlBs YW5zLgogCQkgKi8KLQkJaWYgKCFwcnVuZXN0YXRlLT5kb19leGVjX3BydW5lICYmIG5wbGFucyA+ IDApCisJCWlmIChhcHBlbmRzdGF0ZS0+YXNfcHJ1bmVfc3RhdGUgPT0gTlVMTCB8fAorCQkJKCFh cHBlbmRzdGF0ZS0+YXNfcHJ1bmVfc3RhdGUtPmRvX2V4ZWNfcHJ1bmUgJiYgbnBsYW5zID4gMCkp CiAJCQlhcHBlbmRzdGF0ZS0+YXNfdmFsaWRfc3VicGxhbnMgPSBibXNfYWRkX3JhbmdlKE5VTEws IDAsIG5wbGFucyAtIDEpOwogCX0KIAllbHNlCkBAIC01NzcsNyArNTc5LDcgQEAgY2hvb3NlX25l eHRfc3VicGxhbl9sb2NhbGx5KEFwcGVuZFN0YXRlICpub2RlKQogCQl9CiAJCWVsc2UgaWYgKG5v ZGUtPmFzX3ZhbGlkX3N1YnBsYW5zID09IE5VTEwpCiAJCQlub2RlLT5hc192YWxpZF9zdWJwbGFu cyA9Ci0JCQkJRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKG5vZGUtPmFzX3BydW5lX3N0YXRlLCBm YWxzZSk7CisJCQkJRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKG5vZGUtPmFzX3BydW5lX3N0YXRl LCBmYWxzZSwgTlVMTCk7CiAKIAkJd2hpY2hwbGFuID0gLTE7CiAJfQpAQCAtNjQyLDcgKzY0NCw3 IEBAIGNob29zZV9uZXh0X3N1YnBsYW5fZm9yX2xlYWRlcihBcHBlbmRTdGF0ZSAqbm9kZSkKIAkJ aWYgKG5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zID09IE5VTEwpCiAJCXsKIAkJCW5vZGUtPmFzX3Zh bGlkX3N1YnBsYW5zID0KLQkJCQlFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMobm9kZS0+YXNfcHJ1 bmVfc3RhdGUsIGZhbHNlKTsKKwkJCQlFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMobm9kZS0+YXNf cHJ1bmVfc3RhdGUsIGZhbHNlLCBOVUxMKTsKIAogCQkJLyoKIAkJCSAqIE1hcmsgZWFjaCBpbnZh bGlkIHBsYW4gYXMgZmluaXNoZWQgdG8gYWxsb3cgdGhlIGxvb3AgYmVsb3cgdG8KQEAgLTcxNyw3 ICs3MTksNyBAQCBjaG9vc2VfbmV4dF9zdWJwbGFuX2Zvcl93b3JrZXIoQXBwZW5kU3RhdGUgKm5v ZGUpCiAJZWxzZSBpZiAobm9kZS0+YXNfdmFsaWRfc3VicGxhbnMgPT0gTlVMTCkKIAl7CiAJCW5v ZGUtPmFzX3ZhbGlkX3N1YnBsYW5zID0KLQkJCUV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhub2Rl LT5hc19wcnVuZV9zdGF0ZSwgZmFsc2UpOworCQkJRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKG5v ZGUtPmFzX3BydW5lX3N0YXRlLCBmYWxzZSwgTlVMTCk7CiAJCW1hcmtfaW52YWxpZF9zdWJwbGFu c19hc19maW5pc2hlZChub2RlKTsKIAl9CiAKQEAgLTg2OCw3ICs4NzAsNyBAQCBFeGVjQXBwZW5k QXN5bmNCZWdpbihBcHBlbmRTdGF0ZSAqbm9kZSkKIAlpZiAobm9kZS0+YXNfdmFsaWRfc3VicGxh bnMgPT0gTlVMTCkKIAl7CiAJCW5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zID0KLQkJCUV4ZWNGaW5k TWF0Y2hpbmdTdWJQbGFucyhub2RlLT5hc19wcnVuZV9zdGF0ZSwgZmFsc2UpOworCQkJRXhlY0Zp bmRNYXRjaGluZ1N1YlBsYW5zKG5vZGUtPmFzX3BydW5lX3N0YXRlLCBmYWxzZSwgTlVMTCk7CiAK IAkJY2xhc3NpZnlfbWF0Y2hpbmdfc3VicGxhbnMobm9kZSk7CiAJfQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMgYi9zcmMvYmFja2VuZC9leGVjdXRv ci9ub2RlTWVyZ2VBcHBlbmQuYwppbmRleCBlY2Y5MDUyZTAzLi43NzA4Y2ZmZmRhIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYworKysgYi9zcmMvYmFj a2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYwpAQCAtODIsNyArODIsNyBAQCBFeGVjSW5p dE1lcmdlQXBwZW5kKE1lcmdlQXBwZW5kICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFn cykKIAltZXJnZXN0YXRlLT5wcy5FeGVjUHJvY05vZGUgPSBFeGVjTWVyZ2VBcHBlbmQ7CiAKIAkv KiBJZiBydW4tdGltZSBwYXJ0aXRpb24gcHJ1bmluZyBpcyBlbmFibGVkLCB0aGVuIHNldCB0aGF0 IHVwIG5vdyAqLwotCWlmIChub2RlLT5wYXJ0X3BydW5lX2luZm8gIT0gTlVMTCkKKwlpZiAobm9k ZS0+cGFydF9wcnVuZV9pbmRleCA+PSAwKQogCXsKIAkJUGFydGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1 bmVzdGF0ZTsKIApAQCAtOTMsNyArOTMsNyBAQCBFeGVjSW5pdE1lcmdlQXBwZW5kKE1lcmdlQXBw ZW5kICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkJICovCiAJCXBydW5lc3Rh dGUgPSBFeGVjSW5pdFBhcnRpdGlvblBydW5pbmcoJm1lcmdlc3RhdGUtPnBzLAogCQkJCQkJCQkJ CQkgIGxpc3RfbGVuZ3RoKG5vZGUtPm1lcmdlcGxhbnMpLAotCQkJCQkJCQkJCQkgIG5vZGUtPnBh cnRfcHJ1bmVfaW5mbywKKwkJCQkJCQkJCQkJICBub2RlLT5wYXJ0X3BydW5lX2luZGV4LAogCQkJ CQkJCQkJCQkgICZ2YWxpZHN1YnBsYW5zKTsKIAkJbWVyZ2VzdGF0ZS0+bXNfcHJ1bmVfc3RhdGUg PSBwcnVuZXN0YXRlOwogCQlucGxhbnMgPSBibXNfbnVtX21lbWJlcnModmFsaWRzdWJwbGFucyk7 CkBAIC0xMDMsNyArMTAzLDggQEAgRXhlY0luaXRNZXJnZUFwcGVuZChNZXJnZUFwcGVuZCAqbm9k ZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJCSAqIHN1YnBsYW4sIHdlIGNhbiBmaWxs IGFzX3ZhbGlkX3N1YnBsYW5zIGltbWVkaWF0ZWx5LCBwcmV2ZW50aW5nCiAJCSAqIGxhdGVyIGNh bGxzIHRvIEV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucy4KIAkJICovCi0JCWlmICghcHJ1bmVzdGF0 ZS0+ZG9fZXhlY19wcnVuZSAmJiBucGxhbnMgPiAwKQorCQlpZiAobWVyZ2VzdGF0ZS0+bXNfcHJ1 bmVfc3RhdGUgPT0gTlVMTCB8fAorCQkJKCFtZXJnZXN0YXRlLT5tc19wcnVuZV9zdGF0ZS0+ZG9f ZXhlY19wcnVuZSAmJiBucGxhbnMgPiAwKSkKIAkJCW1lcmdlc3RhdGUtPm1zX3ZhbGlkX3N1YnBs YW5zID0gYm1zX2FkZF9yYW5nZShOVUxMLCAwLCBucGxhbnMgLSAxKTsKIAl9CiAJZWxzZQpAQCAt MjE4LDcgKzIxOSw3IEBAIEV4ZWNNZXJnZUFwcGVuZChQbGFuU3RhdGUgKnBzdGF0ZSkKIAkJICov CiAJCWlmIChub2RlLT5tc192YWxpZF9zdWJwbGFucyA9PSBOVUxMKQogCQkJbm9kZS0+bXNfdmFs aWRfc3VicGxhbnMgPQotCQkJCUV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhub2RlLT5tc19wcnVu ZV9zdGF0ZSwgZmFsc2UpOworCQkJCUV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhub2RlLT5tc19w cnVuZV9zdGF0ZSwgZmFsc2UsIE5VTEwpOwogCiAJCS8qCiAJCSAqIEZpcnN0IHRpbWUgdGhyb3Vn aDogcHVsbCB0aGUgZmlyc3QgdHVwbGUgZnJvbSBlYWNoIHZhbGlkIHN1YnBsYW4sCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9zcGkuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL3Nw aS5jCmluZGV4IDA0MmE1ZjhiMGEuLmQyZWEyYTg5MTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL3NwaS5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL3NwaS5jCkBAIC0xNTc4 LDYgKzE1NzgsNyBAQCBTUElfY3Vyc29yX29wZW5faW50ZXJuYWwoY29uc3QgY2hhciAqbmFtZSwg U1BJUGxhblB0ciBwbGFuLAogCUNhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2U7CiAJQ2FjaGVk UGxhbiAqY3BsYW47CiAJTGlzdAkgICAqc3RtdF9saXN0OworCUxpc3QJICAgKnBhcnRfcHJ1bmVf cmVzdWx0X2xpc3Q7CiAJY2hhcgkgICAqcXVlcnlfc3RyaW5nOwogCVNuYXBzaG90CXNuYXBzaG90 OwogCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKQEAgLTE2NTksNiArMTY2MCw3IEBAIFNQSV9j dXJzb3Jfb3Blbl9pbnRlcm5hbChjb25zdCBjaGFyICpuYW1lLCBTUElQbGFuUHRyIHBsYW4sCiAJ LyogUmVwbGFuIGlmIG5lZWRlZCwgYW5kIGluY3JlbWVudCBwbGFuIHJlZmNvdW50IGZvciBwb3J0 YWwgKi8KIAljcGxhbiA9IEdldENhY2hlZFBsYW4ocGxhbnNvdXJjZSwgcGFyYW1MSSwgTlVMTCwg X1NQSV9jdXJyZW50LT5xdWVyeUVudik7CiAJc3RtdF9saXN0ID0gY3BsYW4tPnN0bXRfbGlzdDsK KwlwYXJ0X3BydW5lX3Jlc3VsdF9saXN0ID0gY3BsYW4tPnBhcnRfcHJ1bmVfcmVzdWx0X2xpc3Q7 CiAKIAlpZiAoIXBsYW4tPnNhdmVkKQogCXsKQEAgLTE2NzAsNiArMTY3Miw3IEBAIFNQSV9jdXJz b3Jfb3Blbl9pbnRlcm5hbChjb25zdCBjaGFyICpuYW1lLCBTUElQbGFuUHRyIHBsYW4sCiAJCSAq LwogCQlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHBvcnRhbC0+cG9ydGFsQ29u dGV4dCk7CiAJCXN0bXRfbGlzdCA9IGNvcHlPYmplY3Qoc3RtdF9saXN0KTsKKwkJcGFydF9wcnVu ZV9yZXN1bHRfbGlzdCA9IGNvcHlPYmplY3QocGFydF9wcnVuZV9yZXN1bHRfbGlzdCk7CiAJCU1l bW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKIAkJUmVsZWFzZUNhY2hlZFBsYW4oY3Bs YW4sIE5VTEwpOwogCQljcGxhbiA9IE5VTEw7CQkJLyogcG9ydGFsIHNob3VsZG4ndCBkZXBlbmQg b24gY3BsYW4gKi8KQEAgLTE2ODMsNiArMTY4Niw3IEBAIFNQSV9jdXJzb3Jfb3Blbl9pbnRlcm5h bChjb25zdCBjaGFyICpuYW1lLCBTUElQbGFuUHRyIHBsYW4sCiAJCQkJCSAgcXVlcnlfc3RyaW5n LAogCQkJCQkgIHBsYW5zb3VyY2UtPmNvbW1hbmRUYWcsCiAJCQkJCSAgc3RtdF9saXN0LAorCQkJ CQkgIHBhcnRfcHJ1bmVfcmVzdWx0X2xpc3QsCiAJCQkJCSAgY3BsYW4pOwogCiAJLyoKQEAgLTI0 NzMsNyArMjQ3Nyw5IEBAIF9TUElfZXhlY3V0ZV9wbGFuKFNQSVBsYW5QdHIgcGxhbiwgY29uc3Qg U1BJRXhlY3V0ZU9wdGlvbnMgKm9wdGlvbnMsCiAJewogCQlDYWNoZWRQbGFuU291cmNlICpwbGFu c291cmNlID0gKENhY2hlZFBsYW5Tb3VyY2UgKikgbGZpcnN0KGxjMSk7CiAJCUxpc3QJICAgKnN0 bXRfbGlzdDsKLQkJTGlzdENlbGwgICAqbGMyOworCQlMaXN0CSAgICpwYXJ0X3BydW5lX3Jlc3Vs dF9saXN0OworCQlMaXN0Q2VsbCAgICpsYzIsCisJCQkJICAgKmxjMzsKIAogCQlzcGljYWxsYmFj a2FyZy5xdWVyeSA9IHBsYW5zb3VyY2UtPnF1ZXJ5X3N0cmluZzsKIApAQCAtMjU1Miw2ICsyNTU4 LDcgQEAgX1NQSV9leGVjdXRlX3BsYW4oU1BJUGxhblB0ciBwbGFuLCBjb25zdCBTUElFeGVjdXRl T3B0aW9ucyAqb3B0aW9ucywKIAkJCQkJCQkgIHBsYW5fb3duZXIsIF9TUElfY3VycmVudC0+cXVl cnlFbnYpOwogCiAJCXN0bXRfbGlzdCA9IGNwbGFuLT5zdG10X2xpc3Q7CisJCXBhcnRfcHJ1bmVf cmVzdWx0X2xpc3QgPSBjcGxhbi0+cGFydF9wcnVuZV9yZXN1bHRfbGlzdDsKIAogCQkvKgogCQkg KiBJZiB3ZSB3ZXJlbid0IGdpdmVuIGEgc3BlY2lmaWMgc25hcHNob3QgdG8gdXNlLCBhbmQgdGhl IHN0YXRlbWVudApAQCAtMjU4OSw5ICsyNTk2LDEwIEBAIF9TUElfZXhlY3V0ZV9wbGFuKFNQSVBs YW5QdHIgcGxhbiwgY29uc3QgU1BJRXhlY3V0ZU9wdGlvbnMgKm9wdGlvbnMsCiAJCQl9CiAJCX0K IAotCQlmb3JlYWNoKGxjMiwgc3RtdF9saXN0KQorCQlmb3Jib3RoKGxjMiwgc3RtdF9saXN0LCBs YzMsIHBhcnRfcHJ1bmVfcmVzdWx0X2xpc3QpCiAJCXsKIAkJCVBsYW5uZWRTdG10ICpzdG10ID0g bGZpcnN0X25vZGUoUGxhbm5lZFN0bXQsIGxjMik7CisJCQlQYXJ0aXRpb25QcnVuZVJlc3VsdCAq cGFydF9wcnVuZV9yZXN1bHQgPSBsZmlyc3Rfbm9kZShQYXJ0aXRpb25QcnVuZVJlc3VsdCwgbGMz KTsKIAkJCWJvb2wJCWNhblNldFRhZyA9IHN0bXQtPmNhblNldFRhZzsKIAkJCURlc3RSZWNlaXZl ciAqZGVzdDsKIApAQCAtMjY2Myw3ICsyNjcxLDcgQEAgX1NQSV9leGVjdXRlX3BsYW4oU1BJUGxh blB0ciBwbGFuLCBjb25zdCBTUElFeGVjdXRlT3B0aW9ucyAqb3B0aW9ucywKIAkJCQllbHNlCiAJ CQkJCXNuYXAgPSBJbnZhbGlkU25hcHNob3Q7CiAKLQkJCQlxZGVzYyA9IENyZWF0ZVF1ZXJ5RGVz YyhzdG10LAorCQkJCXFkZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHN0bXQsIHBhcnRfcHJ1bmVfcmVz dWx0LAogCQkJCQkJCQkJCXBsYW5zb3VyY2UtPnF1ZXJ5X3N0cmluZywKIAkJCQkJCQkJCQlzbmFw LCBjcm9zc2NoZWNrX3NuYXBzaG90LAogCQkJCQkJCQkJCWRlc3QsCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL2NvcHlmdW5jcy5j CmluZGV4IGQ1NzYwYjEwMDYuLmQyZDg2Yzk4NDEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25v ZGVzL2NvcHlmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL2NvcHlmdW5jcy5jCkBAIC05 Niw3ICs5NiwxMCBAQCBfY29weVBsYW5uZWRTdG10KGNvbnN0IFBsYW5uZWRTdG10ICpmcm9tKQog CUNPUFlfU0NBTEFSX0ZJRUxEKHBhcmFsbGVsTW9kZU5lZWRlZCk7CiAJQ09QWV9TQ0FMQVJfRklF TEQoaml0RmxhZ3MpOwogCUNPUFlfTk9ERV9GSUVMRChwbGFuVHJlZSk7CisJQ09QWV9OT0RFX0ZJ RUxEKHBhcnRQcnVuZUluZm9zKTsKKwlDT1BZX1NDQUxBUl9GSUVMRChjb250YWluc0luaXRpYWxQ cnVuaW5nKTsKIAlDT1BZX05PREVfRklFTEQocnRhYmxlKTsKKwlDT1BZX0JJVE1BUFNFVF9GSUVM RChtaW5Mb2NrUmVsaWRzKTsKIAlDT1BZX05PREVfRklFTEQocmVzdWx0UmVsYXRpb25zKTsKIAlD T1BZX05PREVfRklFTEQoYXBwZW5kUmVsYXRpb25zKTsKIAlDT1BZX05PREVfRklFTEQoc3VicGxh bnMpOwpAQCAtMjUzLDcgKzI1Niw3IEBAIF9jb3B5QXBwZW5kKGNvbnN0IEFwcGVuZCAqZnJvbSkK IAlDT1BZX05PREVfRklFTEQoYXBwZW5kcGxhbnMpOwogCUNPUFlfU0NBTEFSX0ZJRUxEKG5hc3lu Y3BsYW5zKTsKIAlDT1BZX1NDQUxBUl9GSUVMRChmaXJzdF9wYXJ0aWFsX3BsYW4pOwotCUNPUFlf Tk9ERV9GSUVMRChwYXJ0X3BydW5lX2luZm8pOworCUNPUFlfU0NBTEFSX0ZJRUxEKHBhcnRfcHJ1 bmVfaW5kZXgpOwogCiAJcmV0dXJuIG5ld25vZGU7CiB9CkBAIC0yODEsNyArMjg0LDcgQEAgX2Nv cHlNZXJnZUFwcGVuZChjb25zdCBNZXJnZUFwcGVuZCAqZnJvbSkKIAlDT1BZX1BPSU5URVJfRklF TEQoc29ydE9wZXJhdG9ycywgZnJvbS0+bnVtQ29scyAqIHNpemVvZihPaWQpKTsKIAlDT1BZX1BP SU5URVJfRklFTEQoY29sbGF0aW9ucywgZnJvbS0+bnVtQ29scyAqIHNpemVvZihPaWQpKTsKIAlD T1BZX1BPSU5URVJfRklFTEQobnVsbHNGaXJzdCwgZnJvbS0+bnVtQ29scyAqIHNpemVvZihib29s KSk7Ci0JQ09QWV9OT0RFX0ZJRUxEKHBhcnRfcHJ1bmVfaW5mbyk7CisJQ09QWV9TQ0FMQVJfRklF TEQocGFydF9wcnVuZV9pbmRleCk7CiAKIAlyZXR1cm4gbmV3bm9kZTsKIH0KQEAgLTEyNzksNiAr MTI4Miw4IEBAIF9jb3B5UGFydGl0aW9uUHJ1bmVJbmZvKGNvbnN0IFBhcnRpdGlvblBydW5lSW5m byAqZnJvbSkKIAlQYXJ0aXRpb25QcnVuZUluZm8gKm5ld25vZGUgPSBtYWtlTm9kZShQYXJ0aXRp b25QcnVuZUluZm8pOwogCiAJQ09QWV9OT0RFX0ZJRUxEKHBydW5lX2luZm9zKTsKKwlDT1BZX1ND QUxBUl9GSUVMRChuZWVkc19pbml0X3BydW5pbmcpOworCUNPUFlfU0NBTEFSX0ZJRUxEKG5lZWRz X2V4ZWNfcHJ1bmluZyk7CiAJQ09QWV9CSVRNQVBTRVRfRklFTEQob3RoZXJfc3VicGxhbnMpOwog CiAJcmV0dXJuIG5ld25vZGU7CkBAIC0xMjk1LDYgKzEzMDAsNyBAQCBfY29weVBhcnRpdGlvbmVk UmVsUHJ1bmVJbmZvKGNvbnN0IFBhcnRpdGlvbmVkUmVsUHJ1bmVJbmZvICpmcm9tKQogCUNPUFlf UE9JTlRFUl9GSUVMRChzdWJwbGFuX21hcCwgZnJvbS0+bnBhcnRzICogc2l6ZW9mKGludCkpOwog CUNPUFlfUE9JTlRFUl9GSUVMRChzdWJwYXJ0X21hcCwgZnJvbS0+bnBhcnRzICogc2l6ZW9mKGlu dCkpOwogCUNPUFlfUE9JTlRFUl9GSUVMRChyZWxpZF9tYXAsIGZyb20tPm5wYXJ0cyAqIHNpemVv ZihPaWQpKTsKKwlDT1BZX1BPSU5URVJfRklFTEQocnRpX21hcCwgZnJvbS0+bnBhcnRzICogc2l6 ZW9mKEluZGV4KSk7CiAJQ09QWV9OT0RFX0ZJRUxEKGluaXRpYWxfcHJ1bmluZ19zdGVwcyk7CiAJ Q09QWV9OT0RFX0ZJRUxEKGV4ZWNfcHJ1bmluZ19zdGVwcyk7CiAJQ09QWV9CSVRNQVBTRVRfRklF TEQoZXhlY3BhcmFtaWRzKTsKQEAgLTU0NjgsNiArNTQ3NCwyMSBAQCBfY29weUV4dGVuc2libGVO b2RlKGNvbnN0IEV4dGVuc2libGVOb2RlICpmcm9tKQogCXJldHVybiBuZXdub2RlOwogfQogCisv KiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqCisgKgkJCQkJZXhlY25vZGVzLmggY29weSBmdW5jdGlvbnMKKyAqICoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK KyAqLworc3RhdGljIFBhcnRpdGlvblBydW5lUmVzdWx0ICoKK19jb3B5UGFydGl0aW9uUHJ1bmVS ZXN1bHQoY29uc3QgUGFydGl0aW9uUHJ1bmVSZXN1bHQgKmZyb20pCit7CisJUGFydGl0aW9uUHJ1 bmVSZXN1bHQgKm5ld25vZGUgPSBtYWtlTm9kZShQYXJ0aXRpb25QcnVuZVJlc3VsdCk7CisKKwlD T1BZX0JJVE1BUFNFVF9GSUVMRChzY2FuX2xlYWZwYXJ0X3J0aXMpOworCUNPUFlfTk9ERV9GSUVM RCh2YWxpZF9zdWJwbGFuX29mZnNfbGlzdCk7CisKKwlyZXR1cm4gbmV3bm9kZTsKK30KKwogLyog KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKgogICoJCQkJCXZhbHVlLmggY29weSBmdW5jdGlvbnMKICAqICoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTU1 MjIsNyArNTU0Myw2IEBAIF9jb3B5Qml0U3RyaW5nKGNvbnN0IEJpdFN0cmluZyAqZnJvbSkKIAly ZXR1cm4gbmV3bm9kZTsKIH0KIAotCiBzdGF0aWMgRm9yZWlnbktleUNhY2hlSW5mbyAqCiBfY29w eUZvcmVpZ25LZXlDYWNoZUluZm8oY29uc3QgRm9yZWlnbktleUNhY2hlSW5mbyAqZnJvbSkKIHsK QEAgLTY1NjQsNiArNjU4NCwxMyBAQCBjb3B5T2JqZWN0SW1wbChjb25zdCB2b2lkICpmcm9tKQog CQkJcmV0dmFsID0gX2NvcHlQdWJsaWNhdGlvblRhYmxlKGZyb20pOwogCQkJYnJlYWs7CiAKKwkJ CS8qCisJCQkgKiBFWEVDVVRJT04gTk9ERVMKKwkJCSAqLworCQljYXNlIFRfUGFydGl0aW9uUHJ1 bmVSZXN1bHQ6CisJCQlyZXR2YWwgPSBfY29weVBhcnRpdGlvblBydW5lUmVzdWx0KGZyb20pOwor CQkJYnJlYWs7CisKIAkJCS8qCiAJCQkgKiBNSVNDRUxMQU5FT1VTIE5PREVTCiAJCQkgKi8KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rl cy9vdXRmdW5jcy5jCmluZGV4IGFiYjFmNzg3ZWYuLjk2ZDMwNTEwMmQgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVu Y3MuYwpAQCAtMzE0LDcgKzMxNCwxMCBAQCBfb3V0UGxhbm5lZFN0bXQoU3RyaW5nSW5mbyBzdHIs IGNvbnN0IFBsYW5uZWRTdG10ICpub2RlKQogCVdSSVRFX0JPT0xfRklFTEQocGFyYWxsZWxNb2Rl TmVlZGVkKTsKIAlXUklURV9JTlRfRklFTEQoaml0RmxhZ3MpOwogCVdSSVRFX05PREVfRklFTEQo cGxhblRyZWUpOworCVdSSVRFX05PREVfRklFTEQocGFydFBydW5lSW5mb3MpOworCVdSSVRFX0JP T0xfRklFTEQoY29udGFpbnNJbml0aWFsUHJ1bmluZyk7CiAJV1JJVEVfTk9ERV9GSUVMRChydGFi bGUpOworCVdSSVRFX0JJVE1BUFNFVF9GSUVMRChtaW5Mb2NrUmVsaWRzKTsKIAlXUklURV9OT0RF X0ZJRUxEKHJlc3VsdFJlbGF0aW9ucyk7CiAJV1JJVEVfTk9ERV9GSUVMRChhcHBlbmRSZWxhdGlv bnMpOwogCVdSSVRFX05PREVfRklFTEQoc3VicGxhbnMpOwpAQCAtNDQzLDcgKzQ0Niw3IEBAIF9v dXRBcHBlbmQoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IEFwcGVuZCAqbm9kZSkKIAlXUklURV9OT0RF X0ZJRUxEKGFwcGVuZHBsYW5zKTsKIAlXUklURV9JTlRfRklFTEQobmFzeW5jcGxhbnMpOwogCVdS SVRFX0lOVF9GSUVMRChmaXJzdF9wYXJ0aWFsX3BsYW4pOwotCVdSSVRFX05PREVfRklFTEQocGFy dF9wcnVuZV9pbmZvKTsKKwlXUklURV9JTlRfRklFTEQocGFydF9wcnVuZV9pbmRleCk7CiB9CiAK IHN0YXRpYyB2b2lkCkBAIC00NjAsNyArNDYzLDcgQEAgX291dE1lcmdlQXBwZW5kKFN0cmluZ0lu Zm8gc3RyLCBjb25zdCBNZXJnZUFwcGVuZCAqbm9kZSkKIAlXUklURV9PSURfQVJSQVkoc29ydE9w ZXJhdG9ycywgbm9kZS0+bnVtQ29scyk7CiAJV1JJVEVfT0lEX0FSUkFZKGNvbGxhdGlvbnMsIG5v ZGUtPm51bUNvbHMpOwogCVdSSVRFX0JPT0xfQVJSQVkobnVsbHNGaXJzdCwgbm9kZS0+bnVtQ29s cyk7Ci0JV1JJVEVfTk9ERV9GSUVMRChwYXJ0X3BydW5lX2luZm8pOworCVdSSVRFX0lOVF9GSUVM RChwYXJ0X3BydW5lX2luZGV4KTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTEwMDUsNiArMTAwOCw4 IEBAIF9vdXRQYXJ0aXRpb25QcnVuZUluZm8oU3RyaW5nSW5mbyBzdHIsIGNvbnN0IFBhcnRpdGlv blBydW5lSW5mbyAqbm9kZSkKIAlXUklURV9OT0RFX1RZUEUoIlBBUlRJVElPTlBSVU5FSU5GTyIp OwogCiAJV1JJVEVfTk9ERV9GSUVMRChwcnVuZV9pbmZvcyk7CisJV1JJVEVfQk9PTF9GSUVMRChu ZWVkc19pbml0X3BydW5pbmcpOworCVdSSVRFX0JPT0xfRklFTEQobmVlZHNfZXhlY19wcnVuaW5n KTsKIAlXUklURV9CSVRNQVBTRVRfRklFTEQob3RoZXJfc3VicGxhbnMpOwogfQogCkBAIC0xMDE5 LDYgKzEwMjQsNyBAQCBfb3V0UGFydGl0aW9uZWRSZWxQcnVuZUluZm8oU3RyaW5nSW5mbyBzdHIs IGNvbnN0IFBhcnRpdGlvbmVkUmVsUHJ1bmVJbmZvICpub2RlKQogCVdSSVRFX0lOVF9BUlJBWShz dWJwbGFuX21hcCwgbm9kZS0+bnBhcnRzKTsKIAlXUklURV9JTlRfQVJSQVkoc3VicGFydF9tYXAs IG5vZGUtPm5wYXJ0cyk7CiAJV1JJVEVfT0lEX0FSUkFZKHJlbGlkX21hcCwgbm9kZS0+bnBhcnRz KTsKKwlXUklURV9JTkRFWF9BUlJBWShydGlfbWFwLCBub2RlLT5ucGFydHMpOwogCVdSSVRFX05P REVfRklFTEQoaW5pdGlhbF9wcnVuaW5nX3N0ZXBzKTsKIAlXUklURV9OT0RFX0ZJRUxEKGV4ZWNf cHJ1bmluZ19zdGVwcyk7CiAJV1JJVEVfQklUTUFQU0VUX0ZJRUxEKGV4ZWNwYXJhbWlkcyk7CkBA IC0yNDE5LDYgKzI0MjUsOSBAQCBfb3V0UGxhbm5lckdsb2JhbChTdHJpbmdJbmZvIHN0ciwgY29u c3QgUGxhbm5lckdsb2JhbCAqbm9kZSkKIAlXUklURV9OT0RFX0ZJRUxEKGZpbmFscm93bWFya3Mp OwogCVdSSVRFX05PREVfRklFTEQocmVzdWx0UmVsYXRpb25zKTsKIAlXUklURV9OT0RFX0ZJRUxE KGFwcGVuZFJlbGF0aW9ucyk7CisJV1JJVEVfTk9ERV9GSUVMRChwYXJ0UHJ1bmVJbmZvcyk7CisJ V1JJVEVfQk9PTF9GSUVMRChjb250YWluc0luaXRpYWxQcnVuaW5nKTsKKwlXUklURV9CSVRNQVBT RVRfRklFTEQobWluTG9ja1JlbGlkcyk7CiAJV1JJVEVfTk9ERV9GSUVMRChyZWxhdGlvbk9pZHMp OwogCVdSSVRFX05PREVfRklFTEQoaW52YWxJdGVtcyk7CiAJV1JJVEVfTk9ERV9GSUVMRChwYXJh bUV4ZWNUeXBlcyk7CkBAIC0yNDg2LDYgKzI0OTUsNyBAQCBfb3V0UGxhbm5lckluZm8oU3RyaW5n SW5mbyBzdHIsIGNvbnN0IFBsYW5uZXJJbmZvICpub2RlKQogCVdSSVRFX0JJVE1BUFNFVF9GSUVM RChjdXJPdXRlclJlbHMpOwogCVdSSVRFX05PREVfRklFTEQoY3VyT3V0ZXJQYXJhbXMpOwogCVdS SVRFX0JPT0xfRklFTEQocGFydENvbHNVcGRhdGVkKTsKKwlXUklURV9OT0RFX0ZJRUxEKHBhcnRQ cnVuZUluZm9zKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTI4MzksNiArMjg0OSwyMSBAQCBfb3V0 RXh0ZW5zaWJsZU5vZGUoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IEV4dGVuc2libGVOb2RlICpub2Rl KQogCW1ldGhvZHMtPm5vZGVPdXQoc3RyLCBub2RlKTsKIH0KIAorLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqCisgKgorICoJU3R1ZmYgZnJvbSBleGVjbm9kZXMuaAorICoKKyAqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKi8KKworc3RhdGljIHZvaWQKK19vdXRQYXJ0aXRpb25QcnVuZVJlc3VsdChTdHJpbmdJbmZv IHN0ciwgY29uc3QgUGFydGl0aW9uUHJ1bmVSZXN1bHQgKm5vZGUpCit7CisJV1JJVEVfTk9ERV9U WVBFKCJQQVJUSVRJT05QUlVORVJFU1VMVCIpOworCisJV1JJVEVfQklUTUFQU0VUX0ZJRUxEKHNj YW5fbGVhZnBhcnRfcnRpcyk7CisJV1JJVEVfTk9ERV9GSUVMRCh2YWxpZF9zdWJwbGFuX29mZnNf bGlzdCk7Cit9CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqCVN0dWZmIGZyb20gcGFy c2Vub2Rlcy5oLgpAQCAtNDc0Nyw2ICs0NzcyLDEzIEBAIG91dE5vZGUoU3RyaW5nSW5mbyBzdHIs IGNvbnN0IHZvaWQgKm9iaikKIAkJCQlfb3V0SnNvblRhYmxlU2libGluZyhzdHIsIG9iaik7CiAJ CQkJYnJlYWs7CiAKKwkJCQkvKgorCQkJCSAqIEVYRUNVVElPTiBOT0RFUworCQkJCSAqLworCQkJ Y2FzZSBUX1BhcnRpdGlvblBydW5lUmVzdWx0OgorCQkJCV9vdXRQYXJ0aXRpb25QcnVuZVJlc3Vs dChzdHIsIG9iaik7CisJCQkJYnJlYWs7CisKIAkJCWRlZmF1bHQ6CiAKIAkJCQkvKgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9y ZWFkZnVuY3MuYwppbmRleCBlN2QwMDhiMmM1Li42NzdlYzA1NWQ2IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9ub2Rlcy9yZWFkZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9yZWFkZnVu Y3MuYwpAQCAtMTY0LDYgKzE2NCwxMSBAQAogCXRva2VuID0gcGdfc3RydG9rKCZsZW5ndGgpOwkJ Lyogc2tpcCA6ZmxkbmFtZSAqLyBcCiAJbG9jYWxfbm9kZS0+ZmxkbmFtZSA9IHJlYWRJbnRDb2xz KGxlbikKIAorLyogUmVhZCBhbiBJbmRleCBhcnJheSAqLworI2RlZmluZSBSRUFEX0lOREVYX0FS UkFZKGZsZG5hbWUsIGxlbikgXAorCXRva2VuID0gcGdfc3RydG9rKCZsZW5ndGgpOwkJLyogc2tp cCA6ZmxkbmFtZSAqLyBcCisJbG9jYWxfbm9kZS0+ZmxkbmFtZSA9IHJlYWRJbmRleENvbHMobGVu KQorCiAvKiBSZWFkIGEgYm9vbCBhcnJheSAqLwogI2RlZmluZSBSRUFEX0JPT0xfQVJSQVkoZmxk bmFtZSwgbGVuKSBcCiAJdG9rZW4gPSBwZ19zdHJ0b2soJmxlbmd0aCk7CQkvKiBza2lwIDpmbGRu YW1lICovIFwKQEAgLTE4MTQsNyArMTgxOSwxMCBAQCBfcmVhZFBsYW5uZWRTdG10KHZvaWQpCiAJ UkVBRF9CT09MX0ZJRUxEKHBhcmFsbGVsTW9kZU5lZWRlZCk7CiAJUkVBRF9JTlRfRklFTEQoaml0 RmxhZ3MpOwogCVJFQURfTk9ERV9GSUVMRChwbGFuVHJlZSk7CisJUkVBRF9OT0RFX0ZJRUxEKHBh cnRQcnVuZUluZm9zKTsKKwlSRUFEX0JPT0xfRklFTEQoY29udGFpbnNJbml0aWFsUHJ1bmluZyk7 CiAJUkVBRF9OT0RFX0ZJRUxEKHJ0YWJsZSk7CisJUkVBRF9CSVRNQVBTRVRfRklFTEQobWluTG9j a1JlbGlkcyk7CiAJUkVBRF9OT0RFX0ZJRUxEKHJlc3VsdFJlbGF0aW9ucyk7CiAJUkVBRF9OT0RF X0ZJRUxEKGFwcGVuZFJlbGF0aW9ucyk7CiAJUkVBRF9OT0RFX0ZJRUxEKHN1YnBsYW5zKTsKQEAg LTE5NDYsNyArMTk1NCw3IEBAIF9yZWFkQXBwZW5kKHZvaWQpCiAJUkVBRF9OT0RFX0ZJRUxEKGFw cGVuZHBsYW5zKTsKIAlSRUFEX0lOVF9GSUVMRChuYXN5bmNwbGFucyk7CiAJUkVBRF9JTlRfRklF TEQoZmlyc3RfcGFydGlhbF9wbGFuKTsKLQlSRUFEX05PREVfRklFTEQocGFydF9wcnVuZV9pbmZv KTsKKwlSRUFEX0lOVF9GSUVMRChwYXJ0X3BydW5lX2luZGV4KTsKIAogCVJFQURfRE9ORSgpOwog fQpAQCAtMTk2OCw3ICsxOTc2LDcgQEAgX3JlYWRNZXJnZUFwcGVuZCh2b2lkKQogCVJFQURfT0lE X0FSUkFZKHNvcnRPcGVyYXRvcnMsIGxvY2FsX25vZGUtPm51bUNvbHMpOwogCVJFQURfT0lEX0FS UkFZKGNvbGxhdGlvbnMsIGxvY2FsX25vZGUtPm51bUNvbHMpOwogCVJFQURfQk9PTF9BUlJBWShu dWxsc0ZpcnN0LCBsb2NhbF9ub2RlLT5udW1Db2xzKTsKLQlSRUFEX05PREVfRklFTEQocGFydF9w cnVuZV9pbmZvKTsKKwlSRUFEX0lOVF9GSUVMRChwYXJ0X3BydW5lX2luZGV4KTsKIAogCVJFQURf RE9ORSgpOwogfQpAQCAtMjc2Miw2ICsyNzcwLDggQEAgX3JlYWRQYXJ0aXRpb25QcnVuZUluZm8o dm9pZCkKIAlSRUFEX0xPQ0FMUyhQYXJ0aXRpb25QcnVuZUluZm8pOwogCiAJUkVBRF9OT0RFX0ZJ RUxEKHBydW5lX2luZm9zKTsKKwlSRUFEX0JPT0xfRklFTEQobmVlZHNfaW5pdF9wcnVuaW5nKTsK KwlSRUFEX0JPT0xfRklFTEQobmVlZHNfZXhlY19wcnVuaW5nKTsKIAlSRUFEX0JJVE1BUFNFVF9G SUVMRChvdGhlcl9zdWJwbGFucyk7CiAKIAlSRUFEX0RPTkUoKTsKQEAgLTI3NzgsNiArMjc4OCw3 IEBAIF9yZWFkUGFydGl0aW9uZWRSZWxQcnVuZUluZm8odm9pZCkKIAlSRUFEX0lOVF9BUlJBWShz dWJwbGFuX21hcCwgbG9jYWxfbm9kZS0+bnBhcnRzKTsKIAlSRUFEX0lOVF9BUlJBWShzdWJwYXJ0 X21hcCwgbG9jYWxfbm9kZS0+bnBhcnRzKTsKIAlSRUFEX09JRF9BUlJBWShyZWxpZF9tYXAsIGxv Y2FsX25vZGUtPm5wYXJ0cyk7CisJUkVBRF9JTkRFWF9BUlJBWShydGlfbWFwLCBsb2NhbF9ub2Rl LT5ucGFydHMpOwogCVJFQURfTk9ERV9GSUVMRChpbml0aWFsX3BydW5pbmdfc3RlcHMpOwogCVJF QURfTk9ERV9GSUVMRChleGVjX3BydW5pbmdfc3RlcHMpOwogCVJFQURfQklUTUFQU0VUX0ZJRUxE KGV4ZWNwYXJhbWlkcyk7CkBAIC0yOTMxLDYgKzI5NDIsMjEgQEAgX3JlYWRQYXJ0aXRpb25SYW5n ZURhdHVtKHZvaWQpCiAJUkVBRF9ET05FKCk7CiB9CiAKKworLyoKKyAqIF9yZWFkUGFydGl0aW9u UHJ1bmVSZXN1bHQKKyAqLworc3RhdGljIFBhcnRpdGlvblBydW5lUmVzdWx0ICoKK19yZWFkUGFy dGl0aW9uUHJ1bmVSZXN1bHQodm9pZCkKK3sKKwlSRUFEX0xPQ0FMUyhQYXJ0aXRpb25QcnVuZVJl c3VsdCk7CisKKwlSRUFEX0JJVE1BUFNFVF9GSUVMRChzY2FuX2xlYWZwYXJ0X3J0aXMpOworCVJF QURfTk9ERV9GSUVMRCh2YWxpZF9zdWJwbGFuX29mZnNfbGlzdCk7CisKKwlSRUFEX0RPTkUoKTsK K30KKwogLyoKICAqIHBhcnNlTm9kZVN0cmluZwogICoKQEAgLTMyMjgsNiArMzI1NCw4IEBAIHBh cnNlTm9kZVN0cmluZyh2b2lkKQogCQlyZXR1cm5fdmFsdWUgPSBfcmVhZEpzb25UYWJsZVBhcmVu dCgpOwogCWVsc2UgaWYgKE1BVENIKCJKU09OVEFCU05PREUiLCAxMikpCiAJCXJldHVybl92YWx1 ZSA9IF9yZWFkSnNvblRhYmxlU2libGluZygpOworCWVsc2UgaWYgKE1BVENIKCJQQVJUSVRJT05Q UlVORVJFU1VMVCIsIDIwKSkKKwkJcmV0dXJuX3ZhbHVlID0gX3JlYWRQYXJ0aXRpb25QcnVuZVJl c3VsdCgpOwogCWVsc2UKIAl7CiAJCWVsb2coRVJST1IsICJiYWRseSBmb3JtYXR0ZWQgbm9kZSBz dHJpbmcgXCIlLjMyc1wiLi4uIiwgdG9rZW4pOwpAQCAtMzM3MSw2ICszMzk5LDMwIEBAIHJlYWRJ bnRDb2xzKGludCBudW1Db2xzKQogCXJldHVybiBpbnRfdmFsczsKIH0KIAorLyoKKyAqIHJlYWRJ bmRleENvbHMKKyAqLworSW5kZXggKgorcmVhZEluZGV4Q29scyhpbnQgbnVtQ29scykKK3sKKwlp bnQJCQl0b2tlbkxlbmd0aCwKKwkJCQlpOworCWNvbnN0IGNoYXIgKnRva2VuOworCUluZGV4CSAg ICppbmRleF92YWxzOworCisJaWYgKG51bUNvbHMgPD0gMCkKKwkJcmV0dXJuIE5VTEw7CisKKwlp bmRleF92YWxzID0gKEluZGV4ICopIHBhbGxvYyhudW1Db2xzICogc2l6ZW9mKEluZGV4KSk7CisJ Zm9yIChpID0gMDsgaSA8IG51bUNvbHM7IGkrKykKKwl7CisJCXRva2VuID0gcGdfc3RydG9rKCZ0 b2tlbkxlbmd0aCk7CisJCWluZGV4X3ZhbHNbaV0gPSBhdG91aSh0b2tlbik7CisJfQorCisJcmV0 dXJuIGluZGV4X3ZhbHM7Cit9CisKIC8qCiAgKiByZWFkQm9vbENvbHMKICAqLwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jIGIvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCmluZGV4IDE3OWM4N2M2NzEuLjJmOTI2MGFiZWQg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYworKysg Yi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMKQEAgLTEzMzYsNyArMTMz NiwxNSBAQCBjcmVhdGVfYXBwZW5kX3BsYW4oUGxhbm5lckluZm8gKnJvb3QsIEFwcGVuZFBhdGgg KmJlc3RfcGF0aCwgaW50IGZsYWdzKQogCXBsYW4tPmFwcGVuZHBsYW5zID0gc3VicGxhbnM7CiAJ cGxhbi0+bmFzeW5jcGxhbnMgPSBuYXN5bmNwbGFuczsKIAlwbGFuLT5maXJzdF9wYXJ0aWFsX3Bs YW4gPSBiZXN0X3BhdGgtPmZpcnN0X3BhcnRpYWxfcGF0aDsKLQlwbGFuLT5wYXJ0X3BydW5lX2lu Zm8gPSBwYXJ0cHJ1bmVpbmZvOworCisJaWYgKHBhcnRwcnVuZWluZm8pCisJeworCQlyb290LT5w YXJ0UHJ1bmVJbmZvcyA9IGxhcHBlbmQocm9vdC0+cGFydFBydW5lSW5mb3MsIHBhcnRwcnVuZWlu Zm8pOworCQkvKiBXaWxsIGJlIHVwZGF0ZWQgbGF0ZXIgaW4gc2V0X3BsYW5fcmVmZXJlbmNlcygp LiAqLworCQlwbGFuLT5wYXJ0X3BydW5lX2luZGV4ID0gbGlzdF9sZW5ndGgocm9vdC0+cGFydFBy dW5lSW5mb3MpIC0gMTsKKwl9CisJZWxzZQorCQlwbGFuLT5wYXJ0X3BydW5lX2luZGV4ID0gLTE7 CiAKIAljb3B5X2dlbmVyaWNfcGF0aF9pbmZvKCZwbGFuLT5wbGFuLCAoUGF0aCAqKSBiZXN0X3Bh dGgpOwogCkBAIC0xNDk4LDcgKzE1MDYsMTUgQEAgY3JlYXRlX21lcmdlX2FwcGVuZF9wbGFuKFBs YW5uZXJJbmZvICpyb290LCBNZXJnZUFwcGVuZFBhdGggKmJlc3RfcGF0aCwKIAl9CiAKIAlub2Rl LT5tZXJnZXBsYW5zID0gc3VicGxhbnM7Ci0Jbm9kZS0+cGFydF9wcnVuZV9pbmZvID0gcGFydHBy dW5laW5mbzsKKworCWlmIChwYXJ0cHJ1bmVpbmZvKQorCXsKKwkJcm9vdC0+cGFydFBydW5lSW5m b3MgPSBsYXBwZW5kKHJvb3QtPnBhcnRQcnVuZUluZm9zLCBwYXJ0cHJ1bmVpbmZvKTsKKwkJLyog V2lsbCBiZSB1cGRhdGVkIGxhdGVyIGluIHNldF9wbGFuX3JlZmVyZW5jZXMoKS4gKi8KKwkJbm9k ZS0+cGFydF9wcnVuZV9pbmRleCA9IGxpc3RfbGVuZ3RoKHJvb3QtPnBhcnRQcnVuZUluZm9zKSAt IDE7CisJfQorCWVsc2UKKwkJbm9kZS0+cGFydF9wcnVuZV9pbmRleCA9IC0xOwogCiAJLyoKIAkg KiBJZiBwcmVwYXJlX3NvcnRfZnJvbV9wYXRoa2V5cyBhZGRlZCBzb3J0IGNvbHVtbnMsIGJ1dCB3 ZSB3ZXJlIHRvbGQgdG8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3Bs YW5uZXIuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwppbmRleCBiMjU2 OWM1ZDBjLi4yYWEwNTFkODYyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9wbGFubmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCkBA IC01MTgsNyArNTE4LDEwIEBAIHN0YW5kYXJkX3BsYW5uZXIoUXVlcnkgKnBhcnNlLCBjb25zdCBj aGFyICpxdWVyeV9zdHJpbmcsIGludCBjdXJzb3JPcHRpb25zLAogCXJlc3VsdC0+ZGVwZW5kc09u Um9sZSA9IGdsb2ItPmRlcGVuZHNPblJvbGU7CiAJcmVzdWx0LT5wYXJhbGxlbE1vZGVOZWVkZWQg PSBnbG9iLT5wYXJhbGxlbE1vZGVOZWVkZWQ7CiAJcmVzdWx0LT5wbGFuVHJlZSA9IHRvcF9wbGFu OworCXJlc3VsdC0+cGFydFBydW5lSW5mb3MgPSBnbG9iLT5wYXJ0UHJ1bmVJbmZvczsKKwlyZXN1 bHQtPmNvbnRhaW5zSW5pdGlhbFBydW5pbmcgPSBnbG9iLT5jb250YWluc0luaXRpYWxQcnVuaW5n OwogCXJlc3VsdC0+cnRhYmxlID0gZ2xvYi0+ZmluYWxydGFibGU7CisJcmVzdWx0LT5taW5Mb2Nr UmVsaWRzID0gZ2xvYi0+bWluTG9ja1JlbGlkczsKIAlyZXN1bHQtPnJlc3VsdFJlbGF0aW9ucyA9 IGdsb2ItPnJlc3VsdFJlbGF0aW9uczsKIAlyZXN1bHQtPmFwcGVuZFJlbGF0aW9ucyA9IGdsb2It PmFwcGVuZFJlbGF0aW9uczsKIAlyZXN1bHQtPnN1YnBsYW5zID0gZ2xvYi0+c3VicGxhbnM7CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMgYi9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKaW5kZXggYmY0YzcyMmMwMi4uOGQ5YWIyYzc0 ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jCisrKyBi L3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYwpAQCAtMjUyLDcgKzI1Miw3IEBA IHNldF9wbGFuX3JlZmVyZW5jZXMoUGxhbm5lckluZm8gKnJvb3QsIFBsYW4gKnBsYW4pCiAJUGxh bgkgICAqcmVzdWx0OwogCVBsYW5uZXJHbG9iYWwgKmdsb2IgPSByb290LT5nbG9iOwogCWludAkJ CXJ0b2Zmc2V0ID0gbGlzdF9sZW5ndGgoZ2xvYi0+ZmluYWxydGFibGUpOwotCUxpc3RDZWxsICAg KmxjOworCUxpc3RDZWxsICpsYzsKIAogCS8qCiAJICogQWRkIGFsbCB0aGUgcXVlcnkncyBSVEVz IHRvIHRoZSBmbGF0dGVuZWQgcmFuZ2V0YWJsZS4gIFRoZSBsaXZlIG9uZXMKQEAgLTI2MSw2ICsy NjEsMTYgQEAgc2V0X3BsYW5fcmVmZXJlbmNlcyhQbGFubmVySW5mbyAqcm9vdCwgUGxhbiAqcGxh bikKIAkgKi8KIAlhZGRfcnRlc190b19mbGF0X3J0YWJsZShyb290LCBmYWxzZSk7CiAKKwkvKgor CSAqIEFkZCB0aGUgcXVlcnkncyBhZGp1c3RlZCByYW5nZSBvZiBSVCBpbmRleGVzIHRvIGdsb2It Pm1pbkxvY2tSZWxpZHMuCisJICogVGhlIGFkanVzdGVkIFJUIGluZGV4ZXMgb2YgcHJ1bmFibGUg cmVsYXRpb25zIHdpbGwgYmUgZGVsZXRlZCBmcm9tIHRoZQorCSAqIHNldCBiZWxvdyB3aGVyZSBQ YXJ0aXRpb25QcnVuZUluZm9zIGFyZSBwcm9jZXNzZWQuCisJICovCisJZ2xvYi0+bWluTG9ja1Jl bGlkcyA9CisJCWJtc19hZGRfcmFuZ2UoZ2xvYi0+bWluTG9ja1JlbGlkcywKKwkJCQkJICBydG9m ZnNldCArIDEsCisJCQkJCSAgcnRvZmZzZXQgKyBsaXN0X2xlbmd0aChyb290LT5wYXJzZS0+cnRh YmxlKSk7CisKIAkvKgogCSAqIEFkanVzdCBSVCBpbmRleGVzIG9mIFBsYW5Sb3dNYXJrcyBhbmQg YWRkIHRvIGZpbmFsIHJvd21hcmtzIGxpc3QKIAkgKi8KQEAgLTMzOSw2ICszNDksNTYgQEAgc2V0 X3BsYW5fcmVmZXJlbmNlcyhQbGFubmVySW5mbyAqcm9vdCwgUGxhbiAqcGxhbikKIAkJfQogCX0K IAorCS8qIEFsc28gZml4IHVwIHRoZSBpbmZvcm1hdGlvbiBpbiBQYXJ0aXRpb25QcnVuZUluZm9z LiAqLworCWZvcmVhY2ggKGxjLCByb290LT5wYXJ0UHJ1bmVJbmZvcykKKwl7CisJCVBhcnRpdGlv blBydW5lSW5mbyAqcHJ1bmVpbmZvID0gbGZpcnN0KGxjKTsKKwkJQml0bWFwc2V0ICpsZWFmcGFy dF9ydGlzID0gTlVMTDsKKwkJTGlzdENlbGwgICpsOworCisJCWZvcmVhY2gobCwgcHJ1bmVpbmZv LT5wcnVuZV9pbmZvcykKKwkJeworCQkJTGlzdAkgICAqcHJ1bmVfaW5mb3MgPSBsZmlyc3QobCk7 CisJCQlMaXN0Q2VsbCAgICpsMjsKKworCQkJZm9yZWFjaChsMiwgcHJ1bmVfaW5mb3MpCisJCQl7 CisJCQkJUGFydGl0aW9uZWRSZWxQcnVuZUluZm8gKnBpbmZvID0gbGZpcnN0KGwyKTsKKwkJCQlp bnQJCWk7CisKKwkJCQkvKiBSVCBpbmRleCBvZiB0aGUgcGFydGl0aW9uZSB0YWJsZS4gKi8KKwkJ CQlwaW5mby0+cnRpbmRleCArPSBydG9mZnNldDsKKworCQkJCS8qIEFuZCBhbHNvIHRob3NlIG9m IHRoZSBsZWFmIHBhcnRpdGlvbnMuICovCisJCQkJZm9yIChpID0gMDsgaSA8IHBpbmZvLT5ucGFy dHM7IGkrKykKKwkJCQl7CisJCQkJCWlmIChwaW5mby0+cnRpX21hcFtpXSA+IDApCisJCQkJCXsK KwkJCQkJCXBpbmZvLT5ydGlfbWFwW2ldICs9IHJ0b2Zmc2V0OworCQkJCQkJbGVhZnBhcnRfcnRp cyA9IGJtc19hZGRfbWVtYmVyKGxlYWZwYXJ0X3J0aXMsCisJCQkJCQkJCQkJCQkJICAgcGluZm8t PnJ0aV9tYXBbaV0pOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisKKwkJaWYgKHBydW5laW5m by0+bmVlZHNfaW5pdF9wcnVuaW5nKQorCQl7CisJCQlnbG9iLT5jb250YWluc0luaXRpYWxQcnVu aW5nID0gdHJ1ZTsKKworCQkJLyoKKwkJCSAqIERlbGV0ZSB0aGUgbGVhZiBwYXJ0aXRpb24gUlRJ cyBmcm9tIHRoZSBnbG9iYWwgc2V0IG9mIHJlbGF0aW9ucworCQkJICogdG8gYmUgbG9ja2VkIGJl Zm9yZSBleGVjdXRpbmcgdGhlIHBsYW4uICBBY3F1aXJlRXhlY3V0b3JMb2NrcygpCisJCQkgKiB3 aWxsIGZpbmQgdGhlIG9uZXMgdG8gYWRkIHRvIHRoZSBzZXQgYWZ0ZXIgcGVyZm9ybWluZyBpbml0 aWFsCisJCQkgKiBwcnVuaW5nLgorCQkJICovCisJCQlnbG9iLT5taW5Mb2NrUmVsaWRzID0gYm1z X2RlbF9tZW1iZXJzKGdsb2ItPm1pbkxvY2tSZWxpZHMsCisJCQkJCQkJCQkJCQkgIGxlYWZwYXJ0 X3J0aXMpOworCQl9CisKKwkJZ2xvYi0+cGFydFBydW5lSW5mb3MgPSBsYXBwZW5kKGdsb2ItPnBh cnRQcnVuZUluZm9zLCBwcnVuZWluZm8pOworCX0KKwogCXJldHVybiByZXN1bHQ7CiB9CiAKQEAg LTE1OTYsMjEgKzE2NTYsMTIgQEAgc2V0X2FwcGVuZF9yZWZlcmVuY2VzKFBsYW5uZXJJbmZvICpy b290LAogCiAJYXBsYW4tPmFwcHJlbGlkcyA9IG9mZnNldF9yZWxpZF9zZXQoYXBsYW4tPmFwcHJl bGlkcywgcnRvZmZzZXQpOwogCi0JaWYgKGFwbGFuLT5wYXJ0X3BydW5lX2luZm8pCi0JewotCQlm b3JlYWNoKGwsIGFwbGFuLT5wYXJ0X3BydW5lX2luZm8tPnBydW5lX2luZm9zKQotCQl7Ci0JCQlM aXN0CSAgICpwcnVuZV9pbmZvcyA9IGxmaXJzdChsKTsKLQkJCUxpc3RDZWxsICAgKmwyOwotCi0J CQlmb3JlYWNoKGwyLCBwcnVuZV9pbmZvcykKLQkJCXsKLQkJCQlQYXJ0aXRpb25lZFJlbFBydW5l SW5mbyAqcGluZm8gPSBsZmlyc3QobDIpOwotCi0JCQkJcGluZm8tPnJ0aW5kZXggKz0gcnRvZmZz ZXQ7Ci0JCQl9Ci0JCX0KLQl9CisJLyoKKwkgKiBQYXJ0aXRpb25QcnVuZUluZm9zIHdpbGwgYmUg YWRkZWQgdG8gYSBsaXN0IGluIFBsYW5uZXJHbG9iYWwsIHNvIHVwZGF0ZQorCSAqIHRoZSBpbmRl eC4KKwkgKi8KKwlpZiAoYXBsYW4tPnBhcnRfcHJ1bmVfaW5kZXggPj0gMCkKKwkJYXBsYW4tPnBh cnRfcHJ1bmVfaW5kZXggKz0gbGlzdF9sZW5ndGgocm9vdC0+Z2xvYi0+cGFydFBydW5lSW5mb3Mp OwogCiAJLyogV2UgZG9uJ3QgbmVlZCB0byByZWN1cnNlIHRvIGxlZnR0cmVlIG9yIHJpZ2h0dHJl ZSAuLi4gKi8KIAlBc3NlcnQoYXBsYW4tPnBsYW4ubGVmdHRyZWUgPT0gTlVMTCk7CkBAIC0xNjY4 LDIxICsxNzE5LDEyIEBAIHNldF9tZXJnZWFwcGVuZF9yZWZlcmVuY2VzKFBsYW5uZXJJbmZvICpy b290LAogCiAJbXBsYW4tPmFwcHJlbGlkcyA9IG9mZnNldF9yZWxpZF9zZXQobXBsYW4tPmFwcHJl bGlkcywgcnRvZmZzZXQpOwogCi0JaWYgKG1wbGFuLT5wYXJ0X3BydW5lX2luZm8pCi0JewotCQlm b3JlYWNoKGwsIG1wbGFuLT5wYXJ0X3BydW5lX2luZm8tPnBydW5lX2luZm9zKQotCQl7Ci0JCQlM aXN0CSAgICpwcnVuZV9pbmZvcyA9IGxmaXJzdChsKTsKLQkJCUxpc3RDZWxsICAgKmwyOwotCi0J CQlmb3JlYWNoKGwyLCBwcnVuZV9pbmZvcykKLQkJCXsKLQkJCQlQYXJ0aXRpb25lZFJlbFBydW5l SW5mbyAqcGluZm8gPSBsZmlyc3QobDIpOwotCi0JCQkJcGluZm8tPnJ0aW5kZXggKz0gcnRvZmZz ZXQ7Ci0JCQl9Ci0JCX0KLQl9CisJLyoKKwkgKiBQYXJ0aXRpb25QcnVuZUluZm9zIHdpbGwgYmUg YWRkZWQgdG8gYSBsaXN0IGluIFBsYW5uZXJHbG9iYWwsIHNvIHVwZGF0ZQorCSAqIHRoZSBpbmRl eC4KKwkgKi8KKwlpZiAobXBsYW4tPnBhcnRfcHJ1bmVfaW5kZXggPj0gMCkKKwkJbXBsYW4tPnBh cnRfcHJ1bmVfaW5kZXggKz0gbGlzdF9sZW5ndGgocm9vdC0+Z2xvYi0+cGFydFBydW5lSW5mb3Mp OwogCiAJLyogV2UgZG9uJ3QgbmVlZCB0byByZWN1cnNlIHRvIGxlZnR0cmVlIG9yIHJpZ2h0dHJl ZSAuLi4gKi8KIAlBc3NlcnQobXBsYW4tPnBsYW4ubGVmdHRyZWUgPT0gTlVMTCk7CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9wYXJ0aXRpb25pbmcvcGFydHBydW5lLmMgYi9zcmMvYmFja2VuZC9w YXJ0aXRpb25pbmcvcGFydHBydW5lLmMKaW5kZXggOWQzYzA1YWVkMy4uMGVhZmYxNWVkMCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFydGl0aW9uaW5nL3BhcnRwcnVuZS5jCisrKyBiL3NyYy9i YWNrZW5kL3BhcnRpdGlvbmluZy9wYXJ0cHJ1bmUuYwpAQCAtMTQ0LDcgKzE0NCw5IEBAIHN0YXRp YyBMaXN0ICptYWtlX3BhcnRpdGlvbmVkcmVsX3BydW5laW5mbyhQbGFubmVySW5mbyAqcm9vdCwK IAkJCQkJCQkJCQkgICBMaXN0ICpwcnVuZXF1YWwsCiAJCQkJCQkJCQkJICAgQml0bWFwc2V0ICpw YXJ0cmVsaWRzLAogCQkJCQkJCQkJCSAgIGludCAqcmVsaWRfc3VicGxhbl9tYXAsCi0JCQkJCQkJ CQkJICAgQml0bWFwc2V0ICoqbWF0Y2hlZHN1YnBsYW5zKTsKKwkJCQkJCQkJCQkgICBCaXRtYXBz ZXQgKiptYXRjaGVkc3VicGxhbnMsCisJCQkJCQkJCQkJICAgYm9vbCAqbmVlZHNfaW5pdF9wcnVu aW5nLAorCQkJCQkJCQkJCSAgIGJvb2wgKm5lZWRzX2V4ZWNfcHJ1bmluZyk7CiBzdGF0aWMgdm9p ZCBnZW5fcGFydHBydW5lX3N0ZXBzKFJlbE9wdEluZm8gKnJlbCwgTGlzdCAqY2xhdXNlcywKIAkJ CQkJCQkJUGFydENsYXVzZVRhcmdldCB0YXJnZXQsCiAJCQkJCQkJCUdlbmVyYXRlUHJ1bmluZ1N0 ZXBzQ29udGV4dCAqY29udGV4dCk7CkBAIC0yMzAsNiArMjMyLDggQEAgbWFrZV9wYXJ0aXRpb25f cHJ1bmVpbmZvKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpwYXJlbnRyZWwsCiAJaW50 CQkgICAqcmVsaWRfc3VicGxhbl9tYXA7CiAJTGlzdENlbGwgICAqbGM7CiAJaW50CQkJaTsKKwli b29sCQluZWVkc19pbml0X3BydW5pbmcgPSBmYWxzZTsKKwlib29sCQluZWVkc19leGVjX3BydW5p bmcgPSBmYWxzZTsKIAogCS8qCiAJICogU2NhbiB0aGUgc3VicGF0aHMgdG8gc2VlIHdoaWNoIG9u ZXMgYXJlIHNjYW5zIG9mIHBhcnRpdGlvbiBjaGlsZApAQCAtMzA5LDEyICszMTMsMTYgQEAgbWFr ZV9wYXJ0aXRpb25fcHJ1bmVpbmZvKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpwYXJl bnRyZWwsCiAJCUJpdG1hcHNldCAgKnBhcnRyZWxpZHMgPSAoQml0bWFwc2V0ICopIGxmaXJzdChs Yyk7CiAJCUxpc3QJICAgKnBpbmZvbGlzdDsKIAkJQml0bWFwc2V0ICAqbWF0Y2hlZHN1YnBsYW5z ID0gTlVMTDsKKwkJYm9vbAkJcGFydHJlbF9uZWVkc19pbml0X3BydW5pbmc7CisJCWJvb2wJCXBh cnRyZWxfbmVlZHNfZXhlY19wcnVuaW5nOwogCiAJCXBpbmZvbGlzdCA9IG1ha2VfcGFydGl0aW9u ZWRyZWxfcHJ1bmVpbmZvKHJvb3QsIHBhcmVudHJlbCwKIAkJCQkJCQkJCQkJCSAgcHJ1bmVxdWFs LAogCQkJCQkJCQkJCQkJICBwYXJ0cmVsaWRzLAogCQkJCQkJCQkJCQkJICByZWxpZF9zdWJwbGFu X21hcCwKLQkJCQkJCQkJCQkJCSAgJm1hdGNoZWRzdWJwbGFucyk7CisJCQkJCQkJCQkJCQkgICZt YXRjaGVkc3VicGxhbnMsCisJCQkJCQkJCQkJCQkgICZwYXJ0cmVsX25lZWRzX2luaXRfcHJ1bmlu ZywKKwkJCQkJCQkJCQkJCSAgJnBhcnRyZWxfbmVlZHNfZXhlY19wcnVuaW5nKTsKIAogCQkvKiBX aGVuIHBydW5pbmcgaXMgcG9zc2libGUsIHJlY29yZCB0aGUgbWF0Y2hlZCBzdWJwbGFucyAqLwog CQlpZiAocGluZm9saXN0ICE9IE5JTCkKQEAgLTMyMyw2ICszMzEsMTAgQEAgbWFrZV9wYXJ0aXRp b25fcHJ1bmVpbmZvKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpwYXJlbnRyZWwsCiAJ CQlhbGxtYXRjaGVkc3VicGxhbnMgPSBibXNfam9pbihtYXRjaGVkc3VicGxhbnMsCiAJCQkJCQkJ CQkJICBhbGxtYXRjaGVkc3VicGxhbnMpOwogCQl9CisJCWlmICghbmVlZHNfaW5pdF9wcnVuaW5n KQorCQkJbmVlZHNfaW5pdF9wcnVuaW5nID0gcGFydHJlbF9uZWVkc19pbml0X3BydW5pbmc7CisJ CWlmICghbmVlZHNfZXhlY19wcnVuaW5nKQorCQkJbmVlZHNfZXhlY19wcnVuaW5nID0gcGFydHJl bF9uZWVkc19leGVjX3BydW5pbmc7CiAJfQogCiAJcGZyZWUocmVsaWRfc3VicGxhbl9tYXApOwpA QCAtMzM3LDYgKzM0OSw4IEBAIG1ha2VfcGFydGl0aW9uX3BydW5laW5mbyhQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqcGFyZW50cmVsLAogCS8qIEVsc2UgYnVpbGQgdGhlIHJlc3VsdCBk YXRhIHN0cnVjdHVyZSAqLwogCXBydW5laW5mbyA9IG1ha2VOb2RlKFBhcnRpdGlvblBydW5lSW5m byk7CiAJcHJ1bmVpbmZvLT5wcnVuZV9pbmZvcyA9IHBydW5lcmVsaW5mb3M7CisJcHJ1bmVpbmZv LT5uZWVkc19pbml0X3BydW5pbmcgPSBuZWVkc19pbml0X3BydW5pbmc7CisJcHJ1bmVpbmZvLT5u ZWVkc19leGVjX3BydW5pbmcgPSBuZWVkc19leGVjX3BydW5pbmc7CiAKIAkvKgogCSAqIFNvbWUg c3VicGxhbnMgbWF5IG5vdCBiZWxvbmcgdG8gYW55IG9mIHRoZSBpZGVudGlmaWVkIHBhcnRpdGlv bmVkIHJlbHMuCkBAIC00MzUsMTMgKzQ0OSwxOCBAQCBhZGRfcGFydF9yZWxpZHMoTGlzdCAqYWxs cGFydHJlbGlkcywgQml0bWFwc2V0ICpwYXJ0cmVsaWRzKQogICogSWYgd2UgY2Fubm90IGZpbmQg YW55IHVzZWZ1bCBydW4tdGltZSBwcnVuaW5nIHN0ZXBzLCByZXR1cm4gTklMLgogICogSG93ZXZl ciwgb24gc3VjY2VzcywgZWFjaCByZWwgaWRlbnRpZmllZCBpbiBwYXJ0cmVsaWRzIHdpbGwgaGF2 ZQogICogYW4gZWxlbWVudCBpbiB0aGUgcmVzdWx0IGxpc3QsIGV2ZW4gaWYgc29tZSBvZiB0aGVt IGFyZSB1c2VsZXNzLgorICogKm5lZWRzX2luaXRfcHJ1bmluZyBhbmQgKm5lZWRzX2V4ZWNfcHJ1 bmluZyBhcmUgc2V0IHRvIGluZGljYXRlIHRoYXQgdGhlCisgKiByZXR1cm5lZCBQYXJ0aXRpb25l ZFJlbFBydW5lSW5mb3MgY29udGFpbnMgcHJ1bmluZyBzdGVwcyB0aGF0IGNhbiBiZQorICogcGVy Zm9ybWVkIGJlZm9yZSBhbmQgYWZ0ZXIgZXhlY3V0aW9uIGJlZ2lucywgcmVzcGVjdGl2ZWx5Lgog ICovCiBzdGF0aWMgTGlzdCAqCiBtYWtlX3BhcnRpdGlvbmVkcmVsX3BydW5laW5mbyhQbGFubmVy SW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcGFyZW50cmVsLAogCQkJCQkJCSAgTGlzdCAqcHJ1bmVx dWFsLAogCQkJCQkJCSAgQml0bWFwc2V0ICpwYXJ0cmVsaWRzLAogCQkJCQkJCSAgaW50ICpyZWxp ZF9zdWJwbGFuX21hcCwKLQkJCQkJCQkgIEJpdG1hcHNldCAqKm1hdGNoZWRzdWJwbGFucykKKwkJ CQkJCQkgIEJpdG1hcHNldCAqKm1hdGNoZWRzdWJwbGFucywKKwkJCQkJCQkgIGJvb2wgKm5lZWRz X2luaXRfcHJ1bmluZywKKwkJCQkJCQkgIGJvb2wgKm5lZWRzX2V4ZWNfcHJ1bmluZykKIHsKIAlS ZWxPcHRJbmZvICp0YXJnZXRwYXJ0ID0gTlVMTDsKIAlMaXN0CSAgICpwaW5mb2xpc3QgPSBOSUw7 CkBAIC00NTIsNiArNDcxLDEwIEBAIG1ha2VfcGFydGl0aW9uZWRyZWxfcHJ1bmVpbmZvKFBsYW5u ZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpwYXJlbnRyZWwsCiAJaW50CQkJcnRpOwogCWludAkJ CWk7CiAKKwkvKiBXaWxsIGZpbmQgb3V0IGJlbG93LiAqLworCSpuZWVkc19pbml0X3BydW5pbmcg PSBmYWxzZTsKKwkqbmVlZHNfZXhlY19wcnVuaW5nID0gZmFsc2U7CisKIAkvKgogCSAqIEV4YW1p bmUgZWFjaCBwYXJ0aXRpb25lZCByZWwsIGNvbnN0cnVjdGluZyBhIHRlbXBvcmFyeSBhcnJheSB0 byBtYXAKIAkgKiBmcm9tIHBsYW5uZXIgcmVsaWRzIHRvIGluZGV4IG9mIHRoZSBwYXJ0aXRpb25l ZCByZWwsIGFuZCBidWlsZGluZyBhCkBAIC01MzksNiArNTYyLDkgQEAgbWFrZV9wYXJ0aXRpb25l ZHJlbF9wcnVuZWluZm8oUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnBhcmVudHJlbCwK IAkJICogZXhlY3V0b3IgcGVyLXNjYW4gcHJ1bmluZyBzdGVwcy4gIFRoaXMgZmlyc3QgcGFzcyBj cmVhdGVzIHN0YXJ0dXAKIAkJICogcHJ1bmluZyBzdGVwcyBhbmQgZGV0ZWN0cyB3aGV0aGVyIHRo ZXJlJ3MgYW55IHBvc3NpYmx5LXVzZWZ1bCBxdWFscwogCQkgKiB0aGF0IHdvdWxkIHJlcXVpcmUg cGVyLXNjYW4gcHJ1bmluZy4KKwkJICoKKwkJICogSW4gdGhlIGZpcnN0IHBhc3MsIHdlIG5vdGUg d2hldGhlciB0aGUgMm5kIHBhc3MgaXMgbmVjZXNzYXJ5IGJ5CisJCSAqIGJ5IG5vdGluZyB0aGUg cHJlc2VuY2Ugb2YgRVhFQyBwYXJhbWV0ZXJzLgogCQkgKi8KIAkJZ2VuX3BhcnRwcnVuZV9zdGVw cyhzdWJwYXJ0LCBwYXJ0cHJ1bmVxdWFsLCBQQVJUVEFSR0VUX0lOSVRJQUwsCiAJCQkJCQkJJmNv bnRleHQpOwpAQCAtNjEzLDYgKzYzOSwxMSBAQCBtYWtlX3BhcnRpdGlvbmVkcmVsX3BydW5laW5m byhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcGFyZW50cmVsLAogCQlwaW5mby0+ZXhl Y3BhcmFtaWRzID0gZXhlY3BhcmFtaWRzOwogCQkvKiBSZW1haW5pbmcgZmllbGRzIHdpbGwgYmUg ZmlsbGVkIGluIHRoZSBuZXh0IGxvb3AgKi8KIAorCQlpZiAoISpuZWVkc19pbml0X3BydW5pbmcp CisJCQkqbmVlZHNfaW5pdF9wcnVuaW5nID0gKGluaXRpYWxfcHJ1bmluZ19zdGVwcyAhPSBOSUwp OworCQlpZiAoISpuZWVkc19leGVjX3BydW5pbmcpCisJCQkqbmVlZHNfZXhlY19wcnVuaW5nID0g KGV4ZWNfcHJ1bmluZ19zdGVwcyAhPSBOSUwpOworCiAJCXBpbmZvbGlzdCA9IGxhcHBlbmQocGlu Zm9saXN0LCBwaW5mbyk7CiAJfQogCkBAIC02NDAsNiArNjcxLDcgQEAgbWFrZV9wYXJ0aXRpb25l ZHJlbF9wcnVuZWluZm8oUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnBhcmVudHJlbCwK IAkJaW50CQkgICAqc3VicGxhbl9tYXA7CiAJCWludAkJICAgKnN1YnBhcnRfbWFwOwogCQlPaWQJ CSAgICpyZWxpZF9tYXA7CisJCUluZGV4CSAgICpydGlfbWFwOwogCiAJCS8qCiAJCSAqIENvbnN0 cnVjdCB0aGUgc3VicGxhbiBhbmQgc3VicGFydCBtYXBzIGZvciB0aGlzIHBhcnRpdGlvbmluZyBs ZXZlbC4KQEAgLTY1Miw2ICs2ODQsNyBAQCBtYWtlX3BhcnRpdGlvbmVkcmVsX3BydW5laW5mbyhQ bGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcGFyZW50cmVsLAogCQlzdWJwYXJ0X21hcCA9 IChpbnQgKikgcGFsbG9jKG5wYXJ0cyAqIHNpemVvZihpbnQpKTsKIAkJbWVtc2V0KHN1YnBhcnRf bWFwLCAtMSwgbnBhcnRzICogc2l6ZW9mKGludCkpOwogCQlyZWxpZF9tYXAgPSAoT2lkICopIHBh bGxvYzAobnBhcnRzICogc2l6ZW9mKE9pZCkpOworCQlydGlfbWFwID0gKEluZGV4ICopIHBhbGxv YzAobnBhcnRzICogc2l6ZW9mKEluZGV4KSk7CiAJCXByZXNlbnRfcGFydHMgPSBOVUxMOwogCiAJ CWkgPSAtMTsKQEAgLTY2Niw2ICs2OTksNyBAQCBtYWtlX3BhcnRpdGlvbmVkcmVsX3BydW5laW5m byhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcGFyZW50cmVsLAogCQkJc3VicGxhbl9t YXBbaV0gPSBzdWJwbGFuaWR4ID0gcmVsaWRfc3VicGxhbl9tYXBbcGFydHJlbC0+cmVsaWRdIC0g MTsKIAkJCXN1YnBhcnRfbWFwW2ldID0gc3VicGFydGlkeCA9IHJlbGlkX3N1YnBhcnRfbWFwW3Bh cnRyZWwtPnJlbGlkXSAtIDE7CiAJCQlyZWxpZF9tYXBbaV0gPSBwbGFubmVyX3J0X2ZldGNoKHBh cnRyZWwtPnJlbGlkLCByb290KS0+cmVsaWQ7CisJCQlydGlfbWFwW2ldID0gcGFydHJlbC0+cmVs aWQ7CiAJCQlpZiAoc3VicGxhbmlkeCA+PSAwKQogCQkJewogCQkJCXByZXNlbnRfcGFydHMgPSBi bXNfYWRkX21lbWJlcihwcmVzZW50X3BhcnRzLCBpKTsKQEAgLTY5MCw2ICs3MjQsNyBAQCBtYWtl X3BhcnRpdGlvbmVkcmVsX3BydW5laW5mbyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAq cGFyZW50cmVsLAogCQlwaW5mby0+c3VicGxhbl9tYXAgPSBzdWJwbGFuX21hcDsKIAkJcGluZm8t PnN1YnBhcnRfbWFwID0gc3VicGFydF9tYXA7CiAJCXBpbmZvLT5yZWxpZF9tYXAgPSByZWxpZF9t YXA7CisJCXBpbmZvLT5ydGlfbWFwID0gcnRpX21hcDsKIAl9CiAKIAlwZnJlZShyZWxpZF9zdWJw YXJ0X21hcCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMgYi9zcmMv YmFja2VuZC90Y29wL3Bvc3RncmVzLmMKaW5kZXggYmEyZmNmZWI0YS4uZmVjZmZkYmE2NSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3Rj b3AvcG9zdGdyZXMuYwpAQCAtOTQ1LDE1ICs5NDUsMTcgQEAgcGdfcGxhbl9xdWVyeShRdWVyeSAq cXVlcnl0cmVlLCBjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcsIGludCBjdXJzb3JPcHRpb25zLAog ICogRm9yIG5vcm1hbCBvcHRpbWl6YWJsZSBzdGF0ZW1lbnRzLCBpbnZva2UgdGhlIHBsYW5uZXIu ICBGb3IgdXRpbGl0eQogICogc3RhdGVtZW50cywganVzdCBtYWtlIGEgd3JhcHBlciBQbGFubmVk U3RtdCBub2RlLgogICoKLSAqIFRoZSByZXN1bHQgaXMgYSBsaXN0IG9mIFBsYW5uZWRTdG10IG5v ZGVzLgorICogVGhlIHJlc3VsdCBpcyBhIGxpc3Qgb2YgUGxhbm5lZFN0bXQgbm9kZXMuICBBbHNv LCBhIE5VTEwgaXMgYXBwZW5kZWQgdG8KKyAqICpwYXJ0X3BydW5lX3Jlc3VsdF9saXN0IGZvciBl YWNoIFBsYW5uZWRTdG10IGFkZGVkIHRvIHRoZSByZXR1cm5lZCBsaXN0LgogICovCiBMaXN0ICoK IHBnX3BsYW5fcXVlcmllcyhMaXN0ICpxdWVyeXRyZWVzLCBjb25zdCBjaGFyICpxdWVyeV9zdHJp bmcsIGludCBjdXJzb3JPcHRpb25zLAotCQkJCVBhcmFtTGlzdEluZm8gYm91bmRQYXJhbXMpCisJ CQkJUGFyYW1MaXN0SW5mbyBib3VuZFBhcmFtcywgTGlzdCAqKnBhcnRfcHJ1bmVfcmVzdWx0X2xp c3QpCiB7CiAJTGlzdAkgICAqc3RtdF9saXN0ID0gTklMOwogCUxpc3RDZWxsICAgKnF1ZXJ5X2xp c3Q7CiAKKwkqcGFydF9wcnVuZV9yZXN1bHRfbGlzdCA9IE5JTDsKIAlmb3JlYWNoKHF1ZXJ5X2xp c3QsIHF1ZXJ5dHJlZXMpCiAJewogCQlRdWVyeQkgICAqcXVlcnkgPSBsZmlyc3Rfbm9kZShRdWVy eSwgcXVlcnlfbGlzdCk7CkBAIC05NzcsNiArOTc5LDcgQEAgcGdfcGxhbl9xdWVyaWVzKExpc3Qg KnF1ZXJ5dHJlZXMsIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywgaW50IGN1cnNvck9wdGlvbnMs CiAJCX0KIAogCQlzdG10X2xpc3QgPSBsYXBwZW5kKHN0bXRfbGlzdCwgc3RtdCk7CisJCSpwYXJ0 X3BydW5lX3Jlc3VsdF9saXN0ID0gbGFwcGVuZCgqcGFydF9wcnVuZV9yZXN1bHRfbGlzdCwgTlVM TCk7CiAJfQogCiAJcmV0dXJuIHN0bXRfbGlzdDsKQEAgLTEwODAsNyArMTA4Myw4IEBAIGV4ZWNf c2ltcGxlX3F1ZXJ5KGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZykKIAkJUXVlcnlDb21wbGV0aW9u IHFjOwogCQlNZW1vcnlDb250ZXh0IHBlcl9wYXJzZXRyZWVfY29udGV4dCA9IE5VTEw7CiAJCUxp c3QJICAgKnF1ZXJ5dHJlZV9saXN0LAotCQkJCSAgICpwbGFudHJlZV9saXN0OworCQkJCSAgICpw bGFudHJlZV9saXN0LAorCQkJCSAgICpwbGFudHJlZV9wYXJ0X3BydW5lX3Jlc3VsdF9saXN0Owog CQlQb3J0YWwJCXBvcnRhbDsKIAkJRGVzdFJlY2VpdmVyICpyZWNlaXZlcjsKIAkJaW50MTYJCWZv cm1hdDsKQEAgLTExNjcsNyArMTE3MSw4IEBAIGV4ZWNfc2ltcGxlX3F1ZXJ5KGNvbnN0IGNoYXIg KnF1ZXJ5X3N0cmluZykKIAkJCQkJCQkJCQkJCU5VTEwsIDAsIE5VTEwpOwogCiAJCXBsYW50cmVl X2xpc3QgPSBwZ19wbGFuX3F1ZXJpZXMocXVlcnl0cmVlX2xpc3QsIHF1ZXJ5X3N0cmluZywKLQkJ CQkJCQkJCQlDVVJTT1JfT1BUX1BBUkFMTEVMX09LLCBOVUxMKTsKKwkJCQkJCQkJCQlDVVJTT1Jf T1BUX1BBUkFMTEVMX09LLCBOVUxMLAorCQkJCQkJCQkJCSZwbGFudHJlZV9wYXJ0X3BydW5lX3Jl c3VsdF9saXN0KTsKIAogCQkvKgogCQkgKiBEb25lIHdpdGggdGhlIHNuYXBzaG90IHVzZWQgZm9y IHBhcnNpbmcvcGxhbm5pbmcuCkBAIC0xMjAzLDYgKzEyMDgsNyBAQCBleGVjX3NpbXBsZV9xdWVy eShjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcpCiAJCQkJCQkgIHF1ZXJ5X3N0cmluZywKIAkJCQkJ CSAgY29tbWFuZFRhZywKIAkJCQkJCSAgcGxhbnRyZWVfbGlzdCwKKwkJCQkJCSAgcGxhbnRyZWVf cGFydF9wcnVuZV9yZXN1bHRfbGlzdCwKIAkJCQkJCSAgTlVMTCk7CiAKIAkJLyoKQEAgLTE5OTEs NiArMTk5Nyw3IEBAIGV4ZWNfYmluZF9tZXNzYWdlKFN0cmluZ0luZm8gaW5wdXRfbWVzc2FnZSkK IAkJCQkJICBxdWVyeV9zdHJpbmcsCiAJCQkJCSAgcHNyYy0+Y29tbWFuZFRhZywKIAkJCQkJICBj cGxhbi0+c3RtdF9saXN0LAorCQkJCQkgIGNwbGFuLT5wYXJ0X3BydW5lX3Jlc3VsdF9saXN0LAog CQkJCQkgIGNwbGFuKTsKIAogCS8qIERvbmUgd2l0aCB0aGUgc25hcHNob3QgdXNlZCBmb3IgcGFy YW1ldGVyIEkvTyBhbmQgcGFyc2luZy9wbGFubmluZyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvdGNvcC9wcXVlcnkuYyBiL3NyYy9iYWNrZW5kL3Rjb3AvcHF1ZXJ5LmMKaW5kZXggNWFhNWEz NTBmMy4uZmNiYTMwM2I1MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdGNvcC9wcXVlcnkuYwor KysgYi9zcmMvYmFja2VuZC90Y29wL3BxdWVyeS5jCkBAIC0zNSw3ICszNSw3IEBACiBQb3J0YWwJ CUFjdGl2ZVBvcnRhbCA9IE5VTEw7CiAKIAotc3RhdGljIHZvaWQgUHJvY2Vzc1F1ZXJ5KFBsYW5u ZWRTdG10ICpwbGFuLAorc3RhdGljIHZvaWQgUHJvY2Vzc1F1ZXJ5KFBsYW5uZWRTdG10ICpwbGFu LCBQYXJ0aXRpb25QcnVuZVJlc3VsdCAqcGFydF9wcnVuZV9yZXN1bHQsCiAJCQkJCQkgY29uc3Qg Y2hhciAqc291cmNlVGV4dCwKIAkJCQkJCSBQYXJhbUxpc3RJbmZvIHBhcmFtcywKIAkJCQkJCSBR dWVyeUVudmlyb25tZW50ICpxdWVyeUVudiwKQEAgLTY1LDYgKzY1LDcgQEAgc3RhdGljIHZvaWQg RG9Qb3J0YWxSZXdpbmQoUG9ydGFsIHBvcnRhbCk7CiAgKi8KIFF1ZXJ5RGVzYyAqCiBDcmVhdGVR dWVyeURlc2MoUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LAorCQkJCVBhcnRpdGlvblBydW5lUmVz dWx0ICpwYXJ0X3BydW5lX3Jlc3VsdCwKIAkJCQljb25zdCBjaGFyICpzb3VyY2VUZXh0LAogCQkJ CVNuYXBzaG90IHNuYXBzaG90LAogCQkJCVNuYXBzaG90IGNyb3NzY2hlY2tfc25hcHNob3QsCkBA IC03Nyw2ICs3OCw4IEBAIENyZWF0ZVF1ZXJ5RGVzYyhQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQs CiAKIAlxZC0+b3BlcmF0aW9uID0gcGxhbm5lZHN0bXQtPmNvbW1hbmRUeXBlOwkvKiBvcGVyYXRp b24gKi8KIAlxZC0+cGxhbm5lZHN0bXQgPSBwbGFubmVkc3RtdDsJLyogcGxhbiAqLworCXFkLT5w YXJ0X3BydW5lX3Jlc3VsdCA9IHBhcnRfcHJ1bmVfcmVzdWx0OwkvKiBFeGVjdXRvckRvSW5pdGlh bFBydW5pbmcoKQorCQkJCQkJCQkJCQkJICogb3V0cHV0IGZvciBwbGFuICovCiAJcWQtPnNvdXJj ZVRleHQgPSBzb3VyY2VUZXh0OwkvKiBxdWVyeSB0ZXh0ICovCiAJcWQtPnNuYXBzaG90ID0gUmVn aXN0ZXJTbmFwc2hvdChzbmFwc2hvdCk7CS8qIHNuYXBzaG90ICovCiAJLyogUkkgY2hlY2sgc25h cHNob3QgKi8KQEAgLTEyMiw2ICsxMjUsNyBAQCBGcmVlUXVlcnlEZXNjKFF1ZXJ5RGVzYyAqcWRl c2MpCiAgKgkJUE9SVEFMX09ORV9SRVRVUk5JTkcsIG9yIFBPUlRBTF9PTkVfTU9EX1dJVEggcG9y dGFsCiAgKgogICoJcGxhbjogdGhlIHBsYW4gdHJlZSBmb3IgdGhlIHF1ZXJ5CisgKglwYXJ0X3By dW5lX3Jlc3VsdDogRXhlY3V0b3JEb0luaXRpYWxQcnVuaW5nKCkgb3V0cHV0IGZvciB0aGUgcGxh biB0cmVlCiAgKglzb3VyY2VUZXh0OiB0aGUgc291cmNlIHRleHQgb2YgdGhlIHF1ZXJ5CiAgKglw YXJhbXM6IGFueSBwYXJhbWV0ZXJzIG5lZWRlZAogICoJZGVzdDogd2hlcmUgdG8gc2VuZCByZXN1 bHRzCkBAIC0xMzQsNiArMTM4LDcgQEAgRnJlZVF1ZXJ5RGVzYyhRdWVyeURlc2MgKnFkZXNjKQog ICovCiBzdGF0aWMgdm9pZAogUHJvY2Vzc1F1ZXJ5KFBsYW5uZWRTdG10ICpwbGFuLAorCQkJIFBh cnRpdGlvblBydW5lUmVzdWx0ICpwYXJ0X3BydW5lX3Jlc3VsdCwKIAkJCSBjb25zdCBjaGFyICpz b3VyY2VUZXh0LAogCQkJIFBhcmFtTGlzdEluZm8gcGFyYW1zLAogCQkJIFF1ZXJ5RW52aXJvbm1l bnQgKnF1ZXJ5RW52LApAQCAtMTQ1LDcgKzE1MCw3IEBAIFByb2Nlc3NRdWVyeShQbGFubmVkU3Rt dCAqcGxhbiwKIAkvKgogCSAqIENyZWF0ZSB0aGUgUXVlcnlEZXNjIG9iamVjdAogCSAqLwotCXF1 ZXJ5RGVzYyA9IENyZWF0ZVF1ZXJ5RGVzYyhwbGFuLCBzb3VyY2VUZXh0LAorCXF1ZXJ5RGVzYyA9 IENyZWF0ZVF1ZXJ5RGVzYyhwbGFuLCBwYXJ0X3BydW5lX3Jlc3VsdCwgc291cmNlVGV4dCwKIAkJ CQkJCQkJR2V0QWN0aXZlU25hcHNob3QoKSwgSW52YWxpZFNuYXBzaG90LAogCQkJCQkJCQlkZXN0 LCBwYXJhbXMsIHF1ZXJ5RW52LCAwKTsKIApAQCAtNDkzLDYgKzQ5OCw3IEBAIFBvcnRhbFN0YXJ0 KFBvcnRhbCBwb3J0YWwsIFBhcmFtTGlzdEluZm8gcGFyYW1zLAogCQkJCSAqIHRoZSBkZXN0aW5h dGlvbiB0byBEZXN0Tm9uZS4KIAkJCQkgKi8KIAkJCQlxdWVyeURlc2MgPSBDcmVhdGVRdWVyeURl c2MobGluaXRpYWxfbm9kZShQbGFubmVkU3RtdCwgcG9ydGFsLT5zdG10cyksCisJCQkJCQkJCQkJ CWxpbml0aWFsX25vZGUoUGFydGl0aW9uUHJ1bmVSZXN1bHQsIHBvcnRhbC0+cGFydF9wcnVuZV9y ZXN1bHRzKSwKIAkJCQkJCQkJCQkJcG9ydGFsLT5zb3VyY2VUZXh0LAogCQkJCQkJCQkJCQlHZXRB Y3RpdmVTbmFwc2hvdCgpLAogCQkJCQkJCQkJCQlJbnZhbGlkU25hcHNob3QsCkBAIC0xMTkzLDcg KzExOTksOCBAQCBQb3J0YWxSdW5NdWx0aShQb3J0YWwgcG9ydGFsLAogCQkJICAgUXVlcnlDb21w bGV0aW9uICpxYykKIHsKIAlib29sCQlhY3RpdmVfc25hcHNob3Rfc2V0ID0gZmFsc2U7Ci0JTGlz dENlbGwgICAqc3RtdGxpc3RfaXRlbTsKKwlMaXN0Q2VsbCAgICpzdG10bGlzdF9pdGVtLAorCQkJ ICAgKnBhcnRfcHJ1bmVfcmVzdWx0c19pdGVtOwogCiAJLyoKIAkgKiBJZiB0aGUgZGVzdGluYXRp b24gaXMgRGVzdFJlbW90ZUV4ZWN1dGUsIGNoYW5nZSB0byBEZXN0Tm9uZS4gIFRoZQpAQCAtMTIx NCw5ICsxMjIxLDEyIEBAIFBvcnRhbFJ1bk11bHRpKFBvcnRhbCBwb3J0YWwsCiAJICogTG9vcCB0 byBoYW5kbGUgdGhlIGluZGl2aWR1YWwgcXVlcmllcyBnZW5lcmF0ZWQgZnJvbSBhIHNpbmdsZSBw YXJzZXRyZWUKIAkgKiBieSBhbmFseXNpcyBhbmQgcmV3cml0ZS4KIAkgKi8KLQlmb3JlYWNoKHN0 bXRsaXN0X2l0ZW0sIHBvcnRhbC0+c3RtdHMpCisJZm9yYm90aChzdG10bGlzdF9pdGVtLCBwb3J0 YWwtPnN0bXRzLAorCQkJcGFydF9wcnVuZV9yZXN1bHRzX2l0ZW0sIHBvcnRhbC0+cGFydF9wcnVu ZV9yZXN1bHRzKQogCXsKIAkJUGxhbm5lZFN0bXQgKnBzdG10ID0gbGZpcnN0X25vZGUoUGxhbm5l ZFN0bXQsIHN0bXRsaXN0X2l0ZW0pOworCQlQYXJ0aXRpb25QcnVuZVJlc3VsdCAqcGFydF9wcnVu ZV9yZXN1bHQgPSBsZmlyc3Rfbm9kZShQYXJ0aXRpb25QcnVuZVJlc3VsdCwKKwkJCQkJCQkJCQkJ CQkJCSAgcGFydF9wcnVuZV9yZXN1bHRzX2l0ZW0pOwogCiAJCS8qCiAJCSAqIElmIHdlIGdvdCBh IGNhbmNlbCBzaWduYWwgaW4gcHJpb3IgY29tbWFuZCwgcXVpdApAQCAtMTI3NCw3ICsxMjg0LDcg QEAgUG9ydGFsUnVuTXVsdGkoUG9ydGFsIHBvcnRhbCwKIAkJCWlmIChwc3RtdC0+Y2FuU2V0VGFn KQogCQkJewogCQkJCS8qIHN0YXRlbWVudCBjYW4gc2V0IHRhZyBzdHJpbmcgKi8KLQkJCQlQcm9j ZXNzUXVlcnkocHN0bXQsCisJCQkJUHJvY2Vzc1F1ZXJ5KHBzdG10LCBwYXJ0X3BydW5lX3Jlc3Vs dCwKIAkJCQkJCQkgcG9ydGFsLT5zb3VyY2VUZXh0LAogCQkJCQkJCSBwb3J0YWwtPnBvcnRhbFBh cmFtcywKIAkJCQkJCQkgcG9ydGFsLT5xdWVyeUVudiwKQEAgLTEyODMsNyArMTI5Myw3IEBAIFBv cnRhbFJ1bk11bHRpKFBvcnRhbCBwb3J0YWwsCiAJCQllbHNlCiAJCQl7CiAJCQkJLyogc3RtdCBh ZGRlZCBieSByZXdyaXRlIGNhbm5vdCBzZXQgdGFnICovCi0JCQkJUHJvY2Vzc1F1ZXJ5KHBzdG10 LAorCQkJCVByb2Nlc3NRdWVyeShwc3RtdCwgcGFydF9wcnVuZV9yZXN1bHQsCiAJCQkJCQkJIHBv cnRhbC0+c291cmNlVGV4dCwKIAkJCQkJCQkgcG9ydGFsLT5wb3J0YWxQYXJhbXMsCiAJCQkJCQkJ IHBvcnRhbC0+cXVlcnlFbnYsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9w bGFuY2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3BsYW5jYWNoZS5jCmluZGV4IDRj ZjZkYjUwNGYuLjgwNTY0ZGQ4NzQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hl L3BsYW5jYWNoZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3BsYW5jYWNoZS5jCkBA IC05OSwxNCArOTksMTYgQEAgc3RhdGljIGRsaXN0X2hlYWQgY2FjaGVkX2V4cHJlc3Npb25fbGlz dCA9IERMSVNUX1NUQVRJQ19JTklUKGNhY2hlZF9leHByZXNzaW9uX2wKIHN0YXRpYyB2b2lkIFJl bGVhc2VHZW5lcmljUGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlKTsKIHN0YXRpYyBM aXN0ICpSZXZhbGlkYXRlQ2FjaGVkUXVlcnkoQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwK IAkJCQkJCQkJICAgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYpOwotc3RhdGljIGJvb2wgQ2hl Y2tDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UpOworc3RhdGljIGJvb2wg Q2hlY2tDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsIFBhcmFtTGlzdElu Zm8gYm91bmRQYXJhbXMpOwogc3RhdGljIENhY2hlZFBsYW4gKkJ1aWxkQ2FjaGVkUGxhbihDYWNo ZWRQbGFuU291cmNlICpwbGFuc291cmNlLCBMaXN0ICpxbGlzdCwKIAkJCQkJCQkJICAgUGFyYW1M aXN0SW5mbyBib3VuZFBhcmFtcywgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYpOworc3RhdGlj IHZvaWQgQ2FjaGVkUGxhblNhdmVQYXJ0aXRpb25QcnVuZVJlc3VsdHMoQ2FjaGVkUGxhbiAqcGxh biwgTGlzdCAqcGFydF9wcnVuZV9yZXN1bHRfbGlzdCk7CiBzdGF0aWMgYm9vbCBjaG9vc2VfY3Vz dG9tX3BsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwKIAkJCQkJCQkgICBQYXJhbUxp c3RJbmZvIGJvdW5kUGFyYW1zKTsKIHN0YXRpYyBkb3VibGUgY2FjaGVkX3BsYW5fY29zdChDYWNo ZWRQbGFuICpwbGFuLCBib29sIGluY2x1ZGVfcGxhbm5lcik7CiBzdGF0aWMgUXVlcnkgKlF1ZXJ5 TGlzdEdldFByaW1hcnlTdG10KExpc3QgKnN0bXRzKTsKLXN0YXRpYyB2b2lkIEFjcXVpcmVFeGVj dXRvckxvY2tzKExpc3QgKnN0bXRfbGlzdCwgYm9vbCBhY3F1aXJlKTsKK3N0YXRpYyBMaXN0ICpB Y3F1aXJlRXhlY3V0b3JMb2NrcyhMaXN0ICpzdG10X2xpc3QsIFBhcmFtTGlzdEluZm8gYm91bmRQ YXJhbXMpOworc3RhdGljIHZvaWQgUmVsZWFzZUV4ZWN1dG9yTG9ja3MoTGlzdCAqc3RtdF9saXN0 LCBMaXN0ICpwYXJ0X3BydW5lX3Jlc3VsdF9saXN0KTsKIHN0YXRpYyB2b2lkIEFjcXVpcmVQbGFu bmVyTG9ja3MoTGlzdCAqc3RtdF9saXN0LCBib29sIGFjcXVpcmUpOwogc3RhdGljIHZvaWQgU2Nh blF1ZXJ5Rm9yTG9ja3MoUXVlcnkgKnBhcnNldHJlZSwgYm9vbCBhY3F1aXJlKTsKIHN0YXRpYyBi b29sIFNjYW5RdWVyeVdhbGtlcihOb2RlICpub2RlLCBib29sICphY3F1aXJlKTsKQEAgLTc5MCw5 ICs3OTIsMjEgQEAgUmV2YWxpZGF0ZUNhY2hlZFF1ZXJ5KENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5z b3VyY2UsCiAgKgogICogT24gYSAidHJ1ZSIgcmV0dXJuLCB3ZSBoYXZlIGFjcXVpcmVkIHRoZSBs b2NrcyBuZWVkZWQgdG8gcnVuIHRoZSBwbGFuLgogICogKFdlIG11c3QgZG8gdGhpcyBmb3IgdGhl ICJ0cnVlIiByZXN1bHQgdG8gYmUgcmFjZS1jb25kaXRpb24tZnJlZS4pCisgKgorICogSWYgdGhl IENhY2hlZFBsYW4gaXMgdmFsaWQsIHRoaXMgbWF5IGluIHNvbWUgY2FzZXMgY2FsbAorICogRXhl Y3V0b3JEb0luaXRpYWxQcnVuaW5nKCkgb24gZWFjaCBQbGFubmVkU3RtdCBjb250YWluZWQgaW4g aXQgdG8gZGV0ZXJtaW5lCisgKiB0aGUgc2V0IG9mIHJlbGF0aW9ucyB0byBiZSBsb2NrZWQgYnkg QWNxdWlyZUV4ZWN1dG9yTG9ja3MoKSwgaW5zdGVhZCBvZiBqdXN0CisgKiBzY2FubmluZyBpdHMg cmFuZ2UgdGFibGUsIHdoaWNoIGlzIGRvbmUgdG8gcHJ1bmUgYXdheSBhbnkgbm9kZXMgaW4gdGhl IHRyZWUKKyAqIHRoYXQgbmVlZCBub3QgYmUgZXhlY3V0ZWQgYmFzZWQgb24gdGhlIHJlc3VsdCBv ZiBpbml0aWFsIHBhcnRpdGlvbiBwcnVuaW5nLgorICogVGhlIHJlc3VsdCBvZiBwcnVuaW5nIHdo aWNoIGNvbnNpc3RzIG9mIExpc3Qgb2YgTGlzdHMgb2YgYml0bWFwc2V0cyBvZiBjaGlsZAorICog c3VicGxhbiBpbmRleGVzLCBhbGxvY2F0ZWQgaW4gYSBjaGlsZCBjb250ZXh0IG9mIHRoZSBjb250 ZXh0IGNvbnRhaW5pbmcgdGhlCisgKiBwbGFuIGl0c2VsZiwgYXJlIGFkZGVkIGludG8gcGxhbi0+ cGFydF9wcnVuZV9yZXN1bHRzLiAgVGhlIHByZXZpb3VzIGNvbnRlbnRzCisgKiBvZiB0aGUgbGlz dCBmcm9tIHRoZSBsYXN0IGludm9jYXRpb24gb24gdGhlIHNhbWUgQ2FjaGVkUGxhbiBhcmUgZGVs ZXRlZCwKKyAqIGJlY2F1c2UgdGhleSB3b3VsZCBubyBsb25nZXIgYmUgdmFsaWQgZ2l2ZW4gdGhl IGZyZXNoIHNldCBvZiBwYXJhbWV0ZXIKKyAqIHZhbHVlcyB3aGljaCBtYXkgYmUgdXNlZCBhcyBw cnVuaW5nIHBhcmFtZXRlcnMuCiAgKi8KIHN0YXRpYyBib29sCi1DaGVja0NhY2hlZFBsYW4oQ2Fj aGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSkKK0NoZWNrQ2FjaGVkUGxhbihDYWNoZWRQbGFuU291 cmNlICpwbGFuc291cmNlLCBQYXJhbUxpc3RJbmZvIGJvdW5kUGFyYW1zKQogewogCUNhY2hlZFBs YW4gKnBsYW4gPSBwbGFuc291cmNlLT5ncGxhbjsKIApAQCAtODIwLDEzICs4MzQsMjQgQEAgQ2hl Y2tDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UpCiAJICovCiAJaWYgKHBs YW4tPmlzX3ZhbGlkKQogCXsKKwkJTGlzdCAgICpwYXJ0X3BydW5lX3Jlc3VsdF9saXN0OworCiAJ CS8qCiAJCSAqIFBsYW4gbXVzdCBoYXZlIHBvc2l0aXZlIHJlZmNvdW50IGJlY2F1c2UgaXQgaXMg cmVmZXJlbmNlZCBieQogCQkgKiBwbGFuc291cmNlOyBzbyBubyBuZWVkIHRvIGZlYXIgaXQgZGlz YXBwZWFycyB1bmRlciB1cyBoZXJlLgogCQkgKi8KIAkJQXNzZXJ0KHBsYW4tPnJlZmNvdW50ID4g MCk7CiAKLQkJQWNxdWlyZUV4ZWN1dG9yTG9ja3MocGxhbi0+c3RtdF9saXN0LCB0cnVlKTsKKwkJ LyoKKwkJICogTG9jayByZWxhdGlvbnMgc2Nhbm5lZCBieSB0aGUgcGxhbi4gIElmIEV4ZWN1dG9y RG9Jbml0aWFsUHJ1bmluZygpCisJCSAqIGFza2VkIHRvIG9taXQgc29tZSByZWxhdGlvbnMgYmVj YXVzZSB0aGUgcGxhbiBub2RlcyB0aGF0IHNjYW4gdGhlbQorCQkgKiB3ZXJlIGZvdW5kIHRvIGJl IHBydW5lZCwgdGhlIGV4ZWN1dG9yIHdpbGwgYmUgaW5mb3JtZWQgb2YgdGhlCisJCSAqIG9taXNz aW9uIG9mIHRoZSBwbGFuIG5vZGVzIHRoZW1zZWx2ZXMgdmlhIHBhcnRfcHJ1bmVfcmVzdWx0X2xp c3QKKwkJICogdGhhdCBpcyBwYXNzZWQgdG8gaXQgYWxvbmcgd2l0aCB0aGUgbGlzdCBvZiBQbGFu bmVkU3RtdHMsIHNvIHRoYXQKKwkJICogaXQgZG9lc24ndCBhY2NpZGVudGFsbHkgdHJ5IHRvIGV4 ZWN1dGUgdGhvc2Ugbm9kZXMuCisJCSAqLworCQlwYXJ0X3BydW5lX3Jlc3VsdF9saXN0ID0gQWNx dWlyZUV4ZWN1dG9yTG9ja3MocGxhbi0+c3RtdF9saXN0LAorCQkJCQkJCQkJCQkJCSAgIGJvdW5k UGFyYW1zKTsKIAogCQkvKgogCQkgKiBJZiBwbGFuIHdhcyB0cmFuc2llbnQsIGNoZWNrIHRvIHNl ZSBpZiBUcmFuc2FjdGlvblhtaW4gaGFzCkBAIC04NDQsMTEgKzg2OSwxNCBAQCBDaGVja0NhY2hl ZFBsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSkKIAkJaWYgKHBsYW4tPmlzX3ZhbGlk KQogCQl7CiAJCQkvKiBTdWNjZXNzZnVsbHkgcmV2YWxpZGF0ZWQgYW5kIGxvY2tlZCB0aGUgcXVl cnkuICovCisKKwkJCS8qIFJlbWVtYmVyIHBydW5pbmcgcmVzdWx0cyBpbiB0aGUgQ2FjaGVkUGxh bi4gKi8KKwkJCUNhY2hlZFBsYW5TYXZlUGFydGl0aW9uUHJ1bmVSZXN1bHRzKHBsYW4sIHBhcnRf cHJ1bmVfcmVzdWx0X2xpc3QpOwogCQkJcmV0dXJuIHRydWU7CiAJCX0KIAogCQkvKiBPb3BzLCB0 aGUgcmFjZSBjYXNlIGhhcHBlbmVkLiAgUmVsZWFzZSB1c2VsZXNzIGxvY2tzLiAqLwotCQlBY3F1 aXJlRXhlY3V0b3JMb2NrcyhwbGFuLT5zdG10X2xpc3QsIGZhbHNlKTsKKwkJUmVsZWFzZUV4ZWN1 dG9yTG9ja3MocGxhbi0+c3RtdF9saXN0LCBwYXJ0X3BydW5lX3Jlc3VsdF9saXN0KTsKIAl9CiAK IAkvKgpAQCAtODgwLDcgKzkwOCw4IEBAIEJ1aWxkQ2FjaGVkUGxhbihDYWNoZWRQbGFuU291cmNl ICpwbGFuc291cmNlLCBMaXN0ICpxbGlzdCwKIAkJCQlQYXJhbUxpc3RJbmZvIGJvdW5kUGFyYW1z LCBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudikKIHsKIAlDYWNoZWRQbGFuICpwbGFuOwotCUxp c3QJICAgKnBsaXN0OworCUxpc3QJICAgKnBsaXN0LAorCQkJICAgKnBhcnRfcHJ1bmVfcmVzdWx0 X2xpc3Q7CiAJYm9vbAkJc25hcHNob3Rfc2V0OwogCWJvb2wJCWlzX3RyYW5zaWVudDsKIAlNZW1v cnlDb250ZXh0IHBsYW5fY29udGV4dDsKQEAgLTkzMyw3ICs5NjIsOCBAQCBCdWlsZENhY2hlZFBs YW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwgTGlzdCAqcWxpc3QsCiAJICogR2VuZXJh dGUgdGhlIHBsYW4uCiAJICovCiAJcGxpc3QgPSBwZ19wbGFuX3F1ZXJpZXMocWxpc3QsIHBsYW5z b3VyY2UtPnF1ZXJ5X3N0cmluZywKLQkJCQkJCQlwbGFuc291cmNlLT5jdXJzb3Jfb3B0aW9ucywg Ym91bmRQYXJhbXMpOworCQkJCQkJCXBsYW5zb3VyY2UtPmN1cnNvcl9vcHRpb25zLCBib3VuZFBh cmFtcywKKwkJCQkJCQkmcGFydF9wcnVuZV9yZXN1bHRfbGlzdCk7CiAKIAkvKiBSZWxlYXNlIHNu YXBzaG90IGlmIHdlIGdvdCBvbmUgKi8KIAlpZiAoc25hcHNob3Rfc2V0KQpAQCAtMTAwMiw2ICsx MDMyLDE2IEBAIEJ1aWxkQ2FjaGVkUGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlLCBM aXN0ICpxbGlzdCwKIAlwbGFuLT5pc19zYXZlZCA9IGZhbHNlOwogCXBsYW4tPmlzX3ZhbGlkID0g dHJ1ZTsKIAorCS8qCisJICogU2F2ZSBhIGR1bW15IHBhcnRfcHJ1bmVfcmVzdWx0X2xpc3QsIHRo YXQgaXMgYSBsaXN0IGNvbnRhaW5pbmcgTlVMTHMKKwkgKiBhcyBlbGVtZW50cy4gIFdlIG11c3Qg ZG8gdGhpcywgYmVjYXN1ZSB1c2VycyBvZiB0aGUgQ2FjaGVkUGxhbiBleHBlY3QKKwkgKiBvbmUg dG8gZ28gd2l0aCB0aGUgbGlzdCBvZiBQbGFubmVkU3RtdHMuCisJICogWFhYIG1heWJlIGdldCBy aWQgb2YgdGhhdCBjb250cmFjdC4KKwkgKi8KKwlwbGFuLT5wYXJ0X3BydW5lX3Jlc3VsdF9saXN0 X2NvbnRleHQgPSBOVUxMOworCUNhY2hlZFBsYW5TYXZlUGFydGl0aW9uUHJ1bmVSZXN1bHRzKHBs YW4sIHBhcnRfcHJ1bmVfcmVzdWx0X2xpc3QpOworCUFzc2VydChNZW1vcnlDb250ZXh0SXNWYWxp ZChwbGFuLT5wYXJ0X3BydW5lX3Jlc3VsdF9saXN0X2NvbnRleHQpKTsKKwogCS8qIGFzc2lnbiBn ZW5lcmF0aW9uIG51bWJlciB0byBuZXcgcGxhbiAqLwogCXBsYW4tPmdlbmVyYXRpb24gPSArKyhw bGFuc291cmNlLT5nZW5lcmF0aW9uKTsKIApAQCAtMTE2MCw3ICsxMjAwLDcgQEAgR2V0Q2FjaGVk UGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlLCBQYXJhbUxpc3RJbmZvIGJvdW5kUGFy YW1zLAogCiAJaWYgKCFjdXN0b21wbGFuKQogCXsKLQkJaWYgKENoZWNrQ2FjaGVkUGxhbihwbGFu c291cmNlKSkKKwkJaWYgKENoZWNrQ2FjaGVkUGxhbihwbGFuc291cmNlLCBib3VuZFBhcmFtcykp CiAJCXsKIAkJCS8qIFdlIHdhbnQgYSBnZW5lcmljIHBsYW4sIGFuZCB3ZSBhbHJlYWR5IGhhdmUg YSB2YWxpZCBvbmUgKi8KIAkJCXBsYW4gPSBwbGFuc291cmNlLT5ncGxhbjsKQEAgLTE1ODYsNiAr MTYyNiw0OSBAQCBDb3B5Q2FjaGVkUGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlKQog CXJldHVybiBuZXdzb3VyY2U7CiB9CiAKKy8qCisgKiBDYWNoZWRQbGFuU2F2ZVBhcnRpdGlvblBy dW5lUmVzdWx0cworICoJCVNhdmUgdGhlIGxpc3QgY29udGFpbmluZyBQYXJ0aXRpb25QcnVuZVJl c3VsdCBub2RlcyBpbnRvIHRoZSBnaXZlbgorICoJCUNhY2hlZFBsYW4KKyAqCisgKiBUaGUgcHJv dmlkZWQgbGlzdCBpcyBjb3BpZWQgaW50byBhIGRlZGljYXRlZCBjb250ZXh0IHRoYXQgaXMgYSBj aGlsZCBvZgorICogcGxhbi0+Y29udGV4dC4gIElmIHRoZSBjaGlsZCBjb250ZXh0IGFscmVhZHkg ZXhpc3RzLCBpdCBpcyBlbXB0aWVkLCBiZWNhdXNlCisgKiBhbnkgUGFydGl0aW9uUHJ1bmVSZXN1 bHQgY29udGFpbmVkIHRoZXJlaW4gd291bGQgbm8gbG9uZ2VyIGJlIHVzZWZ1bC4KKyAqLworc3Rh dGljIHZvaWQKK0NhY2hlZFBsYW5TYXZlUGFydGl0aW9uUHJ1bmVSZXN1bHRzKENhY2hlZFBsYW4g KnBsYW4sIExpc3QgKnBhcnRfcHJ1bmVfcmVzdWx0X2xpc3QpCit7CisJTWVtb3J5Q29udGV4dAlw YXJ0X3BydW5lX3Jlc3VsdF9saXN0X2NvbnRleHQgPSBwbGFuLT5wYXJ0X3BydW5lX3Jlc3VsdF9s aXN0X2NvbnRleHQsCisJCQkJCW9sZGNvbnRleHQgPSBDdXJyZW50TWVtb3J5Q29udGV4dDsKKwlM aXN0CQkgICAqcGFydF9wcnVuZV9yZXN1bHRfbGlzdF9jb3B5OworCisJLyoKKwkgKiBTZXQgdXAg dGhlIGRlZGljYXRlZCBjb250ZXh0IGlmIG5vdCBhbHJlYWR5IGRvbmUsIHNhdmluZyBpdCBhcyBh IGNoaWxkCisJICogb2YgdGhlIENhY2hlZFBsYW4ncyBjb250ZXh0LgorCSAqLworCWlmIChwYXJ0 X3BydW5lX3Jlc3VsdF9saXN0X2NvbnRleHQgPT0gTlVMTCkKKwl7CisJCXBhcnRfcHJ1bmVfcmVz dWx0X2xpc3RfY29udGV4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29u dGV4dCwKKwkJCQkJCQkJCQkJCSAiQ2FjaGVkUGxhbiBwYXJ0X3BydW5lX3Jlc3VsdHMgbGlzdCIs CisJCQkJCQkJCQkJCQkgQUxMT0NTRVRfU1RBUlRfU01BTExfU0laRVMpOworCQlNZW1vcnlDb250 ZXh0U2V0UGFyZW50KHBhcnRfcHJ1bmVfcmVzdWx0X2xpc3RfY29udGV4dCwgcGxhbi0+Y29udGV4 dCk7CisJCU1lbW9yeUNvbnRleHRTZXRJZGVudGlmaWVyKHBhcnRfcHJ1bmVfcmVzdWx0X2xpc3Rf Y29udGV4dCwgcGxhbi0+Y29udGV4dC0+aWRlbnQpOworCQlwbGFuLT5wYXJ0X3BydW5lX3Jlc3Vs dF9saXN0X2NvbnRleHQgPSBwYXJ0X3BydW5lX3Jlc3VsdF9saXN0X2NvbnRleHQ7CisJfQorCWVs c2UKKwl7CisJCS8qIEp1c3QgY2xlYXIgZXhpc3RpbmcgY29udGVudHMgYnkgcmVzZXR0aW5nIHRo ZSBjb250ZXh0LiAqLworCQlBc3NlcnQoTWVtb3J5Q29udGV4dElzVmFsaWQocGFydF9wcnVuZV9y ZXN1bHRfbGlzdF9jb250ZXh0KSk7CisJCU1lbW9yeUNvbnRleHRSZXNldChwYXJ0X3BydW5lX3Jl c3VsdF9saXN0X2NvbnRleHQpOworCX0KKworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhwYXJ0X3By dW5lX3Jlc3VsdF9saXN0X2NvbnRleHQpOworCXBhcnRfcHJ1bmVfcmVzdWx0X2xpc3RfY29weSA9 IGNvcHlPYmplY3QocGFydF9wcnVuZV9yZXN1bHRfbGlzdCk7CisJTWVtb3J5Q29udGV4dFN3aXRj aFRvKG9sZGNvbnRleHQpOworCisJcGxhbi0+cGFydF9wcnVuZV9yZXN1bHRfbGlzdCA9IHBhcnRf cHJ1bmVfcmVzdWx0X2xpc3RfY29weTsKK30KKwogLyoKICAqIENhY2hlZFBsYW5Jc1ZhbGlkOiB0 ZXN0IHdoZXRoZXIgdGhlIHJld3JpdHRlbiBxdWVyeXRyZWUgd2l0aGluIGEKICAqIENhY2hlZFBs YW5Tb3VyY2UgaXMgY3VycmVudGx5IHZhbGlkICh0aGF0IGlzLCBub3QgbWFya2VkIGFzIGJlaW5n IGluIG5lZWQKQEAgLTE3MzcsMTcgKzE4MjAsMjEgQEAgUXVlcnlMaXN0R2V0UHJpbWFyeVN0bXQo TGlzdCAqc3RtdHMpCiAKIC8qCiAgKiBBY3F1aXJlRXhlY3V0b3JMb2NrczogYWNxdWlyZSBsb2Nr cyBuZWVkZWQgZm9yIGV4ZWN1dGlvbiBvZiBhIGNhY2hlZCBwbGFuOwotICogb3IgcmVsZWFzZSB0 aGVtIGlmIGFjcXVpcmUgaXMgZmFsc2UuCisgKgorICogUmV0dXJucyBhIGxpc3Qgb2YgUGFydGl0 aW9uUHJ1bmVSZXN1bHQgbm9kZXMgY29udGFpbmluZyBvbmUgZWxlbWVudCBmb3IgZWFjaAorICog UGxhbm5lZFN0bXQgaW4gc3RtdF9saXN0IG9yIE5VTEwgaWYgdGhlIGxhdHRlciBpcyB1dGlsaXR5 IHN0YXRlbWVudCBvciBpdHMKKyAqIGNvbnRhaW5zSW5pdGlhbFBydW5pbmcgaXMgZmFsc2UuCiAg Ki8KLXN0YXRpYyB2b2lkCi1BY3F1aXJlRXhlY3V0b3JMb2NrcyhMaXN0ICpzdG10X2xpc3QsIGJv b2wgYWNxdWlyZSkKK3N0YXRpYyBMaXN0ICoKK0FjcXVpcmVFeGVjdXRvckxvY2tzKExpc3QgKnN0 bXRfbGlzdCwgUGFyYW1MaXN0SW5mbyBib3VuZFBhcmFtcykKIHsKIAlMaXN0Q2VsbCAgICpsYzE7 CisJTGlzdAkgICAqcGFydF9wcnVuZV9yZXN1bHRfbGlzdCA9IE5JTDsKIAogCWZvcmVhY2gobGMx LCBzdG10X2xpc3QpCiAJewogCQlQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQgPSBsZmlyc3Rfbm9k ZShQbGFubmVkU3RtdCwgbGMxKTsKLQkJTGlzdENlbGwgICAqbGMyOworCQlQYXJ0aXRpb25QcnVu ZVJlc3VsdCAqcGFydF9wcnVuZV9yZXN1bHQgPSBOVUxMOwogCiAJCWlmIChwbGFubmVkc3RtdC0+ Y29tbWFuZFR5cGUgPT0gQ01EX1VUSUxJVFkpCiAJCXsKQEAgLTE3NjEsMjcgKzE4NDgsMTIyIEBA IEFjcXVpcmVFeGVjdXRvckxvY2tzKExpc3QgKnN0bXRfbGlzdCwgYm9vbCBhY3F1aXJlKQogCQkJ UXVlcnkJICAgKnF1ZXJ5ID0gVXRpbGl0eUNvbnRhaW5zUXVlcnkocGxhbm5lZHN0bXQtPnV0aWxp dHlTdG10KTsKIAogCQkJaWYgKHF1ZXJ5KQotCQkJCVNjYW5RdWVyeUZvckxvY2tzKHF1ZXJ5LCBh Y3F1aXJlKTsKLQkJCWNvbnRpbnVlOworCQkJCVNjYW5RdWVyeUZvckxvY2tzKHF1ZXJ5LCB0cnVl KTsKIAkJfQotCi0JCWZvcmVhY2gobGMyLCBwbGFubmVkc3RtdC0+cnRhYmxlKQorCQllbHNlCiAJ CXsKLQkJCVJhbmdlVGJsRW50cnkgKnJ0ZSA9IChSYW5nZVRibEVudHJ5ICopIGxmaXJzdChsYzIp OwotCi0JCQlpZiAocnRlLT5ydGVraW5kICE9IFJURV9SRUxBVElPTikKLQkJCQljb250aW51ZTsK KwkJCUJpdG1hcHNldCAgKmxvY2tSZWxpZHM7CisJCQlpbnQJCQlydGk7CiAKIAkJCS8qCi0JCQkg KiBBY3F1aXJlIHRoZSBhcHByb3ByaWF0ZSB0eXBlIG9mIGxvY2sgb24gZWFjaCByZWxhdGlvbiBP SUQuIE5vdGUKLQkJCSAqIHRoYXQgd2UgZG9uJ3QgYWN0dWFsbHkgdHJ5IHRvIG9wZW4gdGhlIHJl bCwgYW5kIGhlbmNlIHdpbGwgbm90Ci0JCQkgKiBmYWlsIGlmIGl0J3MgYmVlbiBkcm9wcGVkIGVu dGlyZWx5IC0tLSB3ZSdsbCBqdXN0IHRyYW5zaWVudGx5Ci0JCQkgKiBhY3F1aXJlIGEgbm9uLWNv bmZsaWN0aW5nIGxvY2suCisJCQkgKiBGaWd1cmUgb3V0IHRoZSBzZXQgb2YgcmVsYXRpb25zIHRo YXQgd291bGQgbmVlZCB0byBiZSBsb2NrZWQKKwkJCSAqIGJlZm9yZSBleGVjdXRpbmcgdGhlIHBs YW4uCiAJCQkgKi8KLQkJCWlmIChhY3F1aXJlKQorCQkJaWYgKHBsYW5uZWRzdG10LT5jb250YWlu c0luaXRpYWxQcnVuaW5nKQorCQkJeworCQkJCS8qCisJCQkJICogT2J0YWluIHRoZSBzZXQgb2Yg cGFydGl0aW9ucyB0byBiZSBsb2NrZWQgZnJvbSB0aGUKKwkJCQkgKiBQYXJ0aXRpb25QcnVuZUlu Zm9zIGJ5IGNvbnNpZGVyaW5nIHRoZSByZXN1bHQgb2YgcGVyZm9ybWluZworCQkJCSAqIGluaXRp YWwgcGFydGl0aW9uIHBydW5pbmcuCisJCQkJICovCisJCQkJUGFydGl0aW9uUHJ1bmVSZXN1bHQg KnBhcnRfcHJ1bmVfcmVzdWx0ID0KKwkJCQkJRXhlY3V0b3JEb0luaXRpYWxQcnVuaW5nKHBsYW5u ZWRzdG10LCBib3VuZFBhcmFtcyk7CisKKwkJCQlsb2NrUmVsaWRzID0gYm1zX3VuaW9uKHBsYW5u ZWRzdG10LT5taW5Mb2NrUmVsaWRzLAorCQkJCQkJCQkJICAgcGFydF9wcnVuZV9yZXN1bHQtPnNj YW5fbGVhZnBhcnRfcnRpcyk7CisJCQl9CisJCQllbHNlCisJCQkJbG9ja1JlbGlkcyA9IHBsYW5u ZWRzdG10LT5taW5Mb2NrUmVsaWRzOworCisJCQlydGkgPSAtMTsKKwkJCXdoaWxlICgocnRpID0g Ym1zX25leHRfbWVtYmVyKGxvY2tSZWxpZHMsIHJ0aSkpID4gMCkKKwkJCXsKKwkJCQlSYW5nZVRi bEVudHJ5ICpydGUgPSBydF9mZXRjaChydGksIHBsYW5uZWRzdG10LT5ydGFibGUpOworCisJCQkJ aWYgKHJ0ZS0+cnRla2luZCAhPSBSVEVfUkVMQVRJT04pCisJCQkJCWNvbnRpbnVlOworCisJCQkJ LyoKKwkJCQkgKiBBY3F1aXJlIHRoZSBhcHByb3ByaWF0ZSB0eXBlIG9mIGxvY2sgb24gZWFjaCBy ZWxhdGlvbiBPSUQuCisJCQkJICogTm90ZSB0aGF0IHdlIGRvbid0IGFjdHVhbGx5IHRyeSB0byBv cGVuIHRoZSByZWwsIGFuZCBoZW5jZQorCQkJCSAqIHdpbGwgbm90IGZhaWwgaWYgaXQncyBiZWVu IGRyb3BwZWQgZW50aXJlbHkgLS0tIHdlJ2xsIGp1c3QKKwkJCQkgKiB0cmFuc2llbnRseSBhY3F1 aXJlIGEgbm9uLWNvbmZsaWN0aW5nIGxvY2suCisJCQkJICovCiAJCQkJTG9ja1JlbGF0aW9uT2lk KHJ0ZS0+cmVsaWQsIHJ0ZS0+cmVsbG9ja21vZGUpOworCQkJfQorCQl9CisKKwkJLyoKKwkJICog UmVtZW1iZXIgUGFydGl0aW9uUHJ1bmVSZXN1bHQgZm9yIGxhdGVyIGFkZGluZyB0byB0aGUgUXVl cnlEZXNjIHRoYXQKKwkJICogd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV4ZWN1dG9yIHdoZW4gZXhl Y3V0aW5nIHRoaXMgcGxhbi4gIE1heSBiZQorCQkgKiBOVUxMLCBidXQgbXVzdCBrZWVwIHRoZSBs aXN0IHRoZSBzYW1lIGxlbmd0aCBhcyBzdG10X2xpc3QuCisJCSAqLworCQlwYXJ0X3BydW5lX3Jl c3VsdF9saXN0ID0gbGFwcGVuZChwYXJ0X3BydW5lX3Jlc3VsdF9saXN0LAorCQkJCQkJCQkJCSBw YXJ0X3BydW5lX3Jlc3VsdCk7CisJfQorCisJcmV0dXJuIHBhcnRfcHJ1bmVfcmVzdWx0X2xpc3Q7 Cit9CisKKy8qCisgKiBSZWxlYXNlRXhlY3V0b3JMb2NrcworICogCQlSZWxlYXNlIGxvY2tzIHRo YXQgd291bGQndmUgYmVlbiBhY3F1aXJlZCBieSBhbiBlYXJsaWVyIGNhbGwgdG8KKyAqIAkJQWNx dWlyZUV4ZWN1dG9yTG9ja3MoKQorICovCitzdGF0aWMgdm9pZAorUmVsZWFzZUV4ZWN1dG9yTG9j a3MoTGlzdCAqc3RtdF9saXN0LCBMaXN0ICpwYXJ0X3BydW5lX3Jlc3VsdF9saXN0KQoreworCUxp c3RDZWxsICAgKmxjMSwKKwkJCSAgICpsYzI7CisKKwlmb3Jib3RoKGxjMSwgc3RtdF9saXN0LCBs YzIsIHBhcnRfcHJ1bmVfcmVzdWx0X2xpc3QpCisJeworCQlQbGFubmVkU3RtdCAqcGxhbm5lZHN0 bXQgPSBsZmlyc3Rfbm9kZShQbGFubmVkU3RtdCwgbGMxKTsKKwkJUGFydGl0aW9uUHJ1bmVSZXN1 bHQgKnBhcnRfcHJ1bmVfcmVzdWx0ID0gbGZpcnN0X25vZGUoUGFydGl0aW9uUHJ1bmVSZXN1bHQs IGxjMik7CisKKwkJaWYgKHBsYW5uZWRzdG10LT5jb21tYW5kVHlwZSA9PSBDTURfVVRJTElUWSkK KwkJeworCQkJLyoKKwkJCSAqIElnbm9yZSB1dGlsaXR5IHN0YXRlbWVudHMsIGV4Y2VwdCB0aG9z ZSAoc3VjaCBhcyBFWFBMQUlOKSB0aGF0CisJCQkgKiBjb250YWluIGEgcGFyc2VkLWJ1dC1ub3Qt cGxhbm5lZCBxdWVyeS4gIE5vdGU6IGl0J3Mgb2theSB0byB1c2UKKwkJCSAqIFNjYW5RdWVyeUZv ckxvY2tzLCBldmVuIHRob3VnaCB0aGUgcXVlcnkgaGFzbid0IGJlZW4gdGhyb3VnaAorCQkJICog cnVsZSByZXdyaXRpbmcsIGJlY2F1c2UgcmV3cml0aW5nIGRvZXNuJ3QgY2hhbmdlIHRoZSBxdWVy eQorCQkJICogcmVwcmVzZW50YXRpb24uCisJCQkgKi8KKwkJCVF1ZXJ5CSAgICpxdWVyeSA9IFV0 aWxpdHlDb250YWluc1F1ZXJ5KHBsYW5uZWRzdG10LT51dGlsaXR5U3RtdCk7CisKKwkJCWlmIChx dWVyeSkKKwkJCQlTY2FuUXVlcnlGb3JMb2NrcyhxdWVyeSwgZmFsc2UpOworCQl9CisJCWVsc2UK KwkJeworCQkJQml0bWFwc2V0ICAqbG9ja1JlbGlkczsKKwkJCWludAkJCXJ0aTsKKworCQkJaWYg KHBhcnRfcHJ1bmVfcmVzdWx0ID09IE5VTEwpCisJCQl7CisJCQkJQXNzZXJ0KCFwbGFubmVkc3Rt dC0+Y29udGFpbnNJbml0aWFsUHJ1bmluZyk7CisJCQkJbG9ja1JlbGlkcyA9IHBsYW5uZWRzdG10 LT5taW5Mb2NrUmVsaWRzOworCQkJfQogCQkJZWxzZQorCQkJeworCQkJCUFzc2VydChwbGFubmVk c3RtdC0+Y29udGFpbnNJbml0aWFsUHJ1bmluZyk7CisJCQkJbG9ja1JlbGlkcyA9IGJtc191bmlv bihwbGFubmVkc3RtdC0+bWluTG9ja1JlbGlkcywKKwkJCQkJCQkJCSAgIHBhcnRfcHJ1bmVfcmVz dWx0LT5zY2FuX2xlYWZwYXJ0X3J0aXMpOworCQkJfQorCisJCQlydGkgPSAtMTsKKwkJCXdoaWxl ICgocnRpID0gYm1zX25leHRfbWVtYmVyKGxvY2tSZWxpZHMsIHJ0aSkpID49IDApCisJCQl7CisJ CQkJUmFuZ2VUYmxFbnRyeSAqcnRlID0gcnRfZmV0Y2gocnRpLCBwbGFubmVkc3RtdC0+cnRhYmxl KTsKKworCQkJCWlmIChydGUtPnJ0ZWtpbmQgIT0gUlRFX1JFTEFUSU9OKQorCQkJCQljb250aW51 ZTsKKworCQkJCS8qIFNlZSB0aGUgY29tbWVudCBpbiBBY3F1aXJlRXhlY3V0b3JMb2NrcygpLiAq LwogCQkJCVVubG9ja1JlbGF0aW9uT2lkKHJ0ZS0+cmVsaWQsIHJ0ZS0+cmVsbG9ja21vZGUpOwor CQkJfQorCiAJCX0KIAl9CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9tbWdyL3Bv cnRhbG1lbS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9wb3J0YWxtZW0uYwppbmRleCBkNTQ5 ZjY2ZDRhLi40NzA1ZGM0MDk3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9tbWdyL3Bv cnRhbG1lbS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvcG9ydGFsbWVtLmMKQEAgLTI4 NSw2ICsyODUsNyBAQCBQb3J0YWxEZWZpbmVRdWVyeShQb3J0YWwgcG9ydGFsLAogCQkJCSAgY29u c3QgY2hhciAqc291cmNlVGV4dCwKIAkJCQkgIENvbW1hbmRUYWcgY29tbWFuZFRhZywKIAkJCQkg IExpc3QgKnN0bXRzLAorCQkJCSAgTGlzdCAqcGFydF9wcnVuZV9yZXN1bHRzLAogCQkJCSAgQ2Fj aGVkUGxhbiAqY3BsYW4pCiB7CiAJQXNzZXJ0QXJnKFBvcnRhbElzVmFsaWQocG9ydGFsKSk7CkBA IC0yOTksNiArMzAwLDcgQEAgUG9ydGFsRGVmaW5lUXVlcnkoUG9ydGFsIHBvcnRhbCwKIAlwb3J0 YWwtPnFjLm5wcm9jZXNzZWQgPSAwOwogCXBvcnRhbC0+Y29tbWFuZFRhZyA9IGNvbW1hbmRUYWc7 CiAJcG9ydGFsLT5zdG10cyA9IHN0bXRzOworCXBvcnRhbC0+cGFydF9wcnVuZV9yZXN1bHRzID0g cGFydF9wcnVuZV9yZXN1bHRzOwogCXBvcnRhbC0+Y3BsYW4gPSBjcGxhbjsKIAlwb3J0YWwtPnN0 YXR1cyA9IFBPUlRBTF9ERUZJTkVEOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFu ZHMvZXhwbGFpbi5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXhwbGFpbi5oCmluZGV4IDY2Njk3 N2ZiMWYuLjM0OTc1YzY5ZWUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxh aW4uaAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluLmgKQEAgLTg3LDcgKzg3LDgg QEAgZXh0ZXJuIHZvaWQgRXhwbGFpbk9uZVV0aWxpdHkoTm9kZSAqdXRpbGl0eVN0bXQsIEludG9D bGF1c2UgKmludG8sCiAJCQkJCQkJICBFeHBsYWluU3RhdGUgKmVzLCBjb25zdCBjaGFyICpxdWVy eVN0cmluZywKIAkJCQkJCQkgIFBhcmFtTGlzdEluZm8gcGFyYW1zLCBRdWVyeUVudmlyb25tZW50 ICpxdWVyeUVudik7CiAKLWV4dGVybiB2b2lkIEV4cGxhaW5PbmVQbGFuKFBsYW5uZWRTdG10ICpw bGFubmVkc3RtdCwgSW50b0NsYXVzZSAqaW50bywKK2V4dGVybiB2b2lkIEV4cGxhaW5PbmVQbGFu KFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwgUGFydGl0aW9uUHJ1bmVSZXN1bHQgKnBhcnRfcHJ1 bmVfcmVzdWwsCisJCQkJCQkgICBJbnRvQ2xhdXNlICppbnRvLAogCQkJCQkJICAgRXhwbGFpblN0 YXRlICplcywgY29uc3QgY2hhciAqcXVlcnlTdHJpbmcsCiAJCQkJCQkgICBQYXJhbUxpc3RJbmZv IHBhcmFtcywgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYsCiAJCQkJCQkgICBjb25zdCBpbnN0 cl90aW1lICpwbGFuZHVyYXRpb24sCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9l eGVjUGFydGl0aW9uLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjUGFydGl0aW9uLmgKaW5k ZXggNzA4NDM1ZTk1Mi4uYmQ4Nzc2NDAyZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0 b3IvZXhlY1BhcnRpdGlvbi5oCisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRp b24uaApAQCAtNDUsNiArNDUsNyBAQCBleHRlcm4gdm9pZCBFeGVjQ2xlYW51cFR1cGxlUm91dGlu ZyhNb2RpZnlUYWJsZVN0YXRlICptdHN0YXRlLAogICogbnBhcnRzCQkJCQkJTGVuZ3RoIG9mIHN1 YnBsYW5fbWFwW10gYW5kIHN1YnBhcnRfbWFwW10uCiAgKiBzdWJwbGFuX21hcAkJCQkJU3VicGxh biBpbmRleCBieSBwYXJ0aXRpb24gaW5kZXgsIG9yIC0xLgogICogc3VicGFydF9tYXAJCQkJCVN1 YnBhcnQgaW5kZXggYnkgcGFydGl0aW9uIGluZGV4LCBvciAtMS4KKyAqIHJ0aV9tYXAJCQkJCQlS YW5nZSB0YWJsZSBpbmRleCBieSBwYXJ0aXRpb24gaW5kZXgsIG9yIDAuCiAgKiBwcmVzZW50X3Bh cnRzCQkJCUEgQml0bWFwc2V0IG9mIHRoZSBwYXJ0aXRpb24gaW5kZXhlcyB0aGF0IHdlCiAgKgkJ CQkJCQkJaGF2ZSBzdWJwbGFucyBvciBzdWJwYXJ0cyBmb3IuCiAgKiBpbml0aWFsX3BydW5pbmdf c3RlcHMJCUxpc3Qgb2YgUGFydGl0aW9uUHJ1bmVTdGVwcyB1c2VkIHRvCkBAIC02MSw2ICs2Miw3 IEBAIHR5cGVkZWYgc3RydWN0IFBhcnRpdGlvbmVkUmVsUHJ1bmluZ0RhdGEKIAlpbnQJCQlucGFy dHM7CiAJaW50CQkgICAqc3VicGxhbl9tYXA7CiAJaW50CQkgICAqc3VicGFydF9tYXA7CisJSW5k ZXgJICAgKnJ0aV9tYXA7CiAJQml0bWFwc2V0ICAqcHJlc2VudF9wYXJ0czsKIAlMaXN0CSAgICpp bml0aWFsX3BydW5pbmdfc3RlcHM7CiAJTGlzdAkgICAqZXhlY19wcnVuaW5nX3N0ZXBzOwpAQCAt MTIzLDkgKzEyNSwxMyBAQCB0eXBlZGVmIHN0cnVjdCBQYXJ0aXRpb25QcnVuZVN0YXRlCiAKIGV4 dGVybiBQYXJ0aXRpb25QcnVuZVN0YXRlICpFeGVjSW5pdFBhcnRpdGlvblBydW5pbmcoUGxhblN0 YXRlICpwbGFuc3RhdGUsCiAJCQkJCQkJCQkJCQkJIGludCBuX3RvdGFsX3N1YnBsYW5zLAotCQkJ CQkJCQkJCQkJCSBQYXJ0aXRpb25QcnVuZUluZm8gKnBydW5laW5mbywKKwkJCQkJCQkJCQkJCQkg aW50IHBhcnRfcHJ1bmVfaW5kZXgsCiAJCQkJCQkJCQkJCQkJIEJpdG1hcHNldCAqKmluaXRpYWxs eV92YWxpZF9zdWJwbGFucyk7CiBleHRlcm4gQml0bWFwc2V0ICpFeGVjRmluZE1hdGNoaW5nU3Vi UGxhbnMoUGFydGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0ZSwKLQkJCQkJCQkJCQkgICBib29s IGluaXRpYWxfcHJ1bmUpOwotCisJCQkJCQkJCQkJICAgYm9vbCBpbml0aWFsX3BydW5lLAorCQkJ CQkJCQkJCSAgIEJpdG1hcHNldCAqKnNjYW5fbGVhZnBhcnRfcnRpcyk7CitleHRlcm4gQml0bWFw c2V0ICpFeGVjUGFydGl0aW9uRG9Jbml0aWFsUHJ1bmluZyhQbGFubmVkU3RtdCAqcGxhbm5lZHN0 bXQsCisJCQkJCQkJCVBhcmFtTGlzdEluZm8gcGFyYW1zLAorCQkJCQkJCQlQYXJ0aXRpb25QcnVu ZUluZm8gKnBydW5laW5mbywKKwkJCQkJCQkJQml0bWFwc2V0ICoqc2Nhbl9sZWFmcGFydF9ydGlz KTsKICNlbmRpZgkJCQkJCQkvKiBFWEVDUEFSVElUSU9OX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL2V4ZWN1dG9yL2V4ZWNkZXNjLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjZGVz Yy5oCmluZGV4IGU3OWUyYzAwMWYuLjYwZDU2NDQ5MDggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L2V4ZWN1dG9yL2V4ZWNkZXNjLmgKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY2Rlc2Mu aApAQCAtMzUsNiArMzUsOCBAQCB0eXBlZGVmIHN0cnVjdCBRdWVyeURlc2MKIAkvKiBUaGVzZSBm aWVsZHMgYXJlIHByb3ZpZGVkIGJ5IENyZWF0ZVF1ZXJ5RGVzYyAqLwogCUNtZFR5cGUJCW9wZXJh dGlvbjsJCS8qIENNRF9TRUxFQ1QsIENNRF9VUERBVEUsIGV0Yy4gKi8KIAlQbGFubmVkU3RtdCAq cGxhbm5lZHN0bXQ7CS8qIHBsYW5uZXIncyBvdXRwdXQgKGNvdWxkIGJlIHV0aWxpdHksIHRvbykg Ki8KKwlQYXJ0aXRpb25QcnVuZVJlc3VsdCAqcGFydF9wcnVuZV9yZXN1bHQ7IC8qIEV4ZWN1dG9y RG9Jbml0aWFsUHJ1bmluZygpJ3MKKwkJCQkJCQkJCQkJICAqIG91dHB1dCBmb3IgcGxhbm5lZHN0 bXQgKi8KIAljb25zdCBjaGFyICpzb3VyY2VUZXh0OwkJLyogc291cmNlIHRleHQgb2YgdGhlIHF1 ZXJ5ICovCiAJU25hcHNob3QJc25hcHNob3Q7CQkvKiBzbmFwc2hvdCB0byB1c2UgZm9yIHF1ZXJ5 ICovCiAJU25hcHNob3QJY3Jvc3NjaGVja19zbmFwc2hvdDsJLyogY3Jvc3NjaGVjayBmb3IgUkkg dXBkYXRlL2RlbGV0ZSAqLwpAQCAtNTcsNiArNTksNyBAQCB0eXBlZGVmIHN0cnVjdCBRdWVyeURl c2MKIAogLyogaW4gcHF1ZXJ5LmMgKi8KIGV4dGVybiBRdWVyeURlc2MgKkNyZWF0ZVF1ZXJ5RGVz YyhQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsCisJCQkJCQkJCSAgUGFydGl0aW9uUHJ1bmVSZXN1 bHQgKnBhcnRfcHJ1bmVfcmVzdWx0LAogCQkJCQkJCQkgIGNvbnN0IGNoYXIgKnNvdXJjZVRleHQs CiAJCQkJCQkJCSAgU25hcHNob3Qgc25hcHNob3QsCiAJCQkJCQkJCSAgU25hcHNob3QgY3Jvc3Nj aGVja19zbmFwc2hvdCwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9y LmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oCmluZGV4IDg3Mzc3MmYxODguLjU3 ZGMwZTgwNzcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgKKysr IGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaApAQCAtMTg1LDYgKzE4NSw4IEBAIEV4 ZWNHZXRKdW5rQXR0cmlidXRlKFR1cGxlVGFibGVTbG90ICpzbG90LCBBdHRyTnVtYmVyIGF0dG5v LCBib29sICppc051bGwpCiAvKgogICogcHJvdG90eXBlcyBmcm9tIGZ1bmN0aW9ucyBpbiBleGVj TWFpbi5jCiAgKi8KK2V4dGVybiBQYXJ0aXRpb25QcnVuZVJlc3VsdCAqRXhlY3V0b3JEb0luaXRp YWxQcnVuaW5nKFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwKKwkJCQkJCQkJCQkJCQkgIFBhcmFt TGlzdEluZm8gcGFyYW1zKTsKIGV4dGVybiB2b2lkIEV4ZWN1dG9yU3RhcnQoUXVlcnlEZXNjICpx dWVyeURlc2MsIGludCBlZmxhZ3MpOwogZXh0ZXJuIHZvaWQgc3RhbmRhcmRfRXhlY3V0b3JTdGFy dChRdWVyeURlc2MgKnF1ZXJ5RGVzYywgaW50IGVmbGFncyk7CiBleHRlcm4gdm9pZCBFeGVjdXRv clJ1bihRdWVyeURlc2MgKnF1ZXJ5RGVzYywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVz L2V4ZWNub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKaW5kZXggY2JiY2Zm ODFkMi4uYjVhN2ZkN2UxNiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVz LmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKQEAgLTU5Niw2ICs1OTYsOCBA QCB0eXBlZGVmIHN0cnVjdCBFU3RhdGUKIAlzdHJ1Y3QgRXhlY1Jvd01hcmsgKiplc19yb3dtYXJr czsJLyogQXJyYXkgb2YgcGVyLXJhbmdlLXRhYmxlLWVudHJ5CiAJCQkJCQkJCQkJICogRXhlY1Jv d01hcmtzLCBvciBOVUxMIGlmIG5vbmUgKi8KIAlQbGFubmVkU3RtdCAqZXNfcGxhbm5lZHN0bXQ7 CS8qIGxpbmsgdG8gdG9wIG9mIHBsYW4gdHJlZSAqLworCUxpc3QJCSplc19wYXJ0X3BydW5lX2lu Zm9zOwkvKiBQbGFubmVkU3RtdC5wYXJ0UHJ1bmVJbmZvcyAqLworCXN0cnVjdCBQYXJ0aXRpb25Q cnVuZVJlc3VsdCAqZXNfcGFydF9wcnVuZV9yZXN1bHQ7IC8qIFF1ZXJ5RGVzYy5wYXJ0X3BydW5l X3Jlc3VsdCAqLwogCWNvbnN0IGNoYXIgKmVzX3NvdXJjZVRleHQ7CS8qIFNvdXJjZSB0ZXh0IGZy b20gUXVlcnlEZXNjICovCiAKIAlKdW5rRmlsdGVyICplc19qdW5rRmlsdGVyOwkvKiB0b3AtbGV2 ZWwganVuayBmaWx0ZXIsIGlmIGFueSAqLwpAQCAtOTg0LDYgKzk4NiwxOSBAQCB0eXBlZGVmIHN0 cnVjdCBEb21haW5Db25zdHJhaW50U3RhdGUKICAqLwogdHlwZWRlZiBUdXBsZVRhYmxlU2xvdCAq KCpFeGVjUHJvY05vZGVNdGQpIChzdHJ1Y3QgUGxhblN0YXRlICpwc3RhdGUpOwogCisvKi0tLS0t LS0tLS0tLS0tLS0KKyAqIFBhcnRpdGlvblBydW5lUmVzdWx0CisgKgorICogUmVzdWx0IG9mIEV4 ZWN1dG9yRG9Jbml0aWFsUHJ1bmluZygpIGludm9jYXRpb24gb24gYSBnaXZlbiBwbGFuLgorICov Cit0eXBlZGVmIHN0cnVjdCBQYXJ0aXRpb25QcnVuZVJlc3VsdAoreworCU5vZGVUYWcJCXR5cGU7 CisKKwlCaXRtYXBzZXQJICAgKnNjYW5fbGVhZnBhcnRfcnRpczsKKwlMaXN0CQkgICAqdmFsaWRf c3VicGxhbl9vZmZzX2xpc3Q7Cit9IFBhcnRpdGlvblBydW5lUmVzdWx0OworCiAvKiAtLS0tLS0t LS0tLS0tLS0tCiAgKgkJUGxhblN0YXRlIG5vZGUKICAqCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9ub2Rlcy9ub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMuaAppbmRleCAzMDA4MjQy NThlLi5kZTMxMmI5MjE1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5oCisr KyBiL3NyYy9pbmNsdWRlL25vZGVzL25vZGVzLmgKQEAgLTk3LDYgKzk3LDkgQEAgdHlwZWRlZiBl bnVtIE5vZGVUYWcKIAlUX1BhcnRpdGlvblBydW5lU3RlcENvbWJpbmUsCiAJVF9QbGFuSW52YWxJ dGVtLAogCisJLyogVEFHUyBGT1IgRVhFQ1VUT1IgUFJFUCBOT0RFUyAoZXhlY25vZGVzLmgpICov CisJVF9QYXJ0aXRpb25QcnVuZVJlc3VsdCwKKwogCS8qCiAJICogVEFHUyBGT1IgUExBTiBTVEFU RSBOT0RFUyAoZXhlY25vZGVzLmgpCiAJICoKQEAgLTY3Myw2ICs2NzYsNyBAQCBleHRlcm4gc3Ry dWN0IEJpdG1hcHNldCAqcmVhZEJpdG1hcHNldCh2b2lkKTsKIGV4dGVybiB1aW50cHRyX3QgcmVh ZERhdHVtKGJvb2wgdHlwYnl2YWwpOwogZXh0ZXJuIGJvb2wgKnJlYWRCb29sQ29scyhpbnQgbnVt Q29scyk7CiBleHRlcm4gaW50ICpyZWFkSW50Q29scyhpbnQgbnVtQ29scyk7CitleHRlcm4gSW5k ZXggKnJlYWRJbmRleENvbHMoaW50IG51bUNvbHMpOwogZXh0ZXJuIE9pZCAqcmVhZE9pZENvbHMo aW50IG51bUNvbHMpOwogZXh0ZXJuIGludDE2ICpyZWFkQXR0ck51bWJlckNvbHMoaW50IG51bUNv bHMpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCBiL3NyYy9p bmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmluZGV4IDZjYmNiNjdiZGYuLmYyMDM5MDcxYzkgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRl L25vZGVzL3BhdGhub2Rlcy5oCkBAIC0xMDcsNiArMTA3LDE4IEBAIHR5cGVkZWYgc3RydWN0IFBs YW5uZXJHbG9iYWwKIAogCUxpc3QJICAgKmFwcGVuZFJlbGF0aW9uczsJLyogImZsYXQiIGxpc3Qg b2YgQXBwZW5kUmVsSW5mb3MgKi8KIAorCUxpc3QJICAgKnBhcnRQcnVuZUluZm9zOwkJLyogTGlz dCBvZiBQYXJ0aXRpb25QcnVuZUluZm8gY29udGFpbmVkIGluCisJCQkJCQkJCQkgKiB0aGUgcGxh biAqLworCisJYm9vbAkJY29udGFpbnNJbml0aWFsUHJ1bmluZzsJLyogRG8gYW55IG9mIHRob3Nl IFBhcnRpdGlvblBydW5lSW5mb3MKKwkJCQkJCQkJCQkgKiBoYXZlIGluaXRpYWwgKHByZS1leGVj KSBwcnVuaW5nCisJCQkJCQkJCQkJICogc3RlcHMgaW4gdGhlbT8gKi8KKworCUJpdG1hcHNldCAg Km1pbkxvY2tSZWxpZHM7CS8qIFJUIGluZGV4ZXMgb2YgUlRFX1JFTEFUSU9OIGVudHJpZXMgdGhh dAorCQkJCQkJCQkgKiBtdXN0IGFsd2F5cyBiZSBsb2NrZWQgdG8gZXhlY3V0ZSB0aGUgcGxhbjsK KwkJCQkJCQkJICogdGhvc2Ugc2Nhbm5lZCBieSBpbml0aWFsLXBydW5hYmxlIHBsYW4KKwkJCQkJ CQkJICogbm9kZXMgYXJlIG5vdCBpbmNsdWRlZCAqLworCiAJTGlzdAkgICAqcmVsYXRpb25PaWRz OwkvKiBPSURzIG9mIHJlbGF0aW9ucyB0aGUgcGxhbiBkZXBlbmRzIG9uICovCiAKIAlMaXN0CSAg ICppbnZhbEl0ZW1zOwkJLyogb3RoZXIgZGVwZW5kZW5jaWVzLCBhcyBQbGFuSW52YWxJdGVtcyAq LwpAQCAtMzc3LDYgKzM4OSw5IEBAIHN0cnVjdCBQbGFubmVySW5mbwogCiAJLyogRG9lcyB0aGlz IHF1ZXJ5IG1vZGlmeSBhbnkgcGFydGl0aW9uIGtleSBjb2x1bW5zPyAqLwogCWJvb2wJCXBhcnRD b2xzVXBkYXRlZDsKKworCS8qIFBhcnRpdGlvblBydW5lSW5mb3MgYWRkZWQgaW4gdGhpcyBxdWVy eSdzIHBsYW4uICovCisJTGlzdAkgICAqcGFydFBydW5lSW5mb3M7CiB9OwogCiAKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGxh bm5vZGVzLmgKaW5kZXggNTBlZjNkZGEwNS4uMGExNDRhMWU5MiAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVz LmgKQEAgLTY0LDggKzY0LDE5IEBAIHR5cGVkZWYgc3RydWN0IFBsYW5uZWRTdG10CiAKIAlzdHJ1 Y3QgUGxhbiAqcGxhblRyZWU7CQkvKiB0cmVlIG9mIFBsYW4gbm9kZXMgKi8KIAorCUxpc3QJICAg KnBhcnRQcnVuZUluZm9zOwkvKiBMaXN0IG9mIFBhcnRpdGlvblBydW5lSW5mbyBjb250YWluZWQg aW4KKwkJCQkJCQkJICogdGhlIHBsYW4gKi8KKworCWJvb2wJCWNvbnRhaW5zSW5pdGlhbFBydW5p bmc7CS8qIERvIGFueSBvZiB0aG9zZSBQYXJ0aXRpb25QcnVuZUluZm9zCisJCQkJCQkJCQkJICog aGF2ZSBpbml0aWFsIChwcmUtZXhlYykgcHJ1bmluZworCQkJCQkJCQkJCSAqIHN0ZXBzIGluIHRo ZW0/ICovCisKIAlMaXN0CSAgICpydGFibGU7CQkJLyogbGlzdCBvZiBSYW5nZVRibEVudHJ5IG5v ZGVzICovCiAKKwlCaXRtYXBzZXQgICptaW5Mb2NrUmVsaWRzOwkvKiBSVCBpbmRleGVzIG9mIFJU RV9SRUxBVElPTiBlbnRyaWVzIHRoYXQKKwkJCQkJCQkJICogbXVzdCBiZSBsb2NrZWQsIGV4Y2Vw dCB0aG9zZSBzY2FubmVkIGJ5CisJCQkJCQkJCSAqIGluaXRpYWwtcHJ1bmFibGUgcGxhbiBub2Rl cyAqLworCiAJLyogcnRhYmxlIGluZGV4ZXMgb2YgdGFyZ2V0IHJlbGF0aW9ucyBmb3IgSU5TRVJU L1VQREFURS9ERUxFVEUgKi8KIAlMaXN0CSAgICpyZXN1bHRSZWxhdGlvbnM7CS8qIGludGVnZXIg bGlzdCBvZiBSVCBpbmRleGVzLCBvciBOSUwgKi8KIApAQCAtMjYyLDggKzI3MywxMiBAQCB0eXBl ZGVmIHN0cnVjdCBBcHBlbmQKIAkgKi8KIAlpbnQJCQlmaXJzdF9wYXJ0aWFsX3BsYW47CiAKLQkv KiBJbmZvIGZvciBydW4tdGltZSBzdWJwbGFuIHBydW5pbmc7IE5VTEwgaWYgd2UncmUgbm90IGRv aW5nIHRoYXQgKi8KLQlzdHJ1Y3QgUGFydGl0aW9uUHJ1bmVJbmZvICpwYXJ0X3BydW5lX2luZm87 CisJLyoKKwkgKiBJbmRleCBvZiB0aGlzIHBsYW4ncyBQYXJ0aXRpb25QcnVuZUluZm8gaW4gUGxh bm5lZFN0bXQucGFydF9wcnVuZV9pbmZvcworCSAqIHRvIGJlIHVzZWQgZm9yIHJ1bi10aW1lIHN1 YnBsYW4gcHJ1bmluZzsgLTEgaWYgcnVuLXRpbWUgcHJ1bmluZyBpcworCSAqIG5vdCBuZWVkZWQu CisJICovCisJaW50CQkJcGFydF9wcnVuZV9pbmRleDsKIH0gQXBwZW5kOwogCiAvKiAtLS0tLS0t LS0tLS0tLS0tCkBAIC0yODIsOCArMjk3LDEzIEBAIHR5cGVkZWYgc3RydWN0IE1lcmdlQXBwZW5k CiAJT2lkCQkgICAqc29ydE9wZXJhdG9yczsJLyogT0lEcyBvZiBvcGVyYXRvcnMgdG8gc29ydCB0 aGVtIGJ5ICovCiAJT2lkCQkgICAqY29sbGF0aW9uczsJCS8qIE9JRHMgb2YgY29sbGF0aW9ucyAq LwogCWJvb2wJICAgKm51bGxzRmlyc3Q7CQkvKiBOVUxMUyBGSVJTVC9MQVNUIGRpcmVjdGlvbnMg Ki8KLQkvKiBJbmZvIGZvciBydW4tdGltZSBzdWJwbGFuIHBydW5pbmc7IE5VTEwgaWYgd2UncmUg bm90IGRvaW5nIHRoYXQgKi8KLQlzdHJ1Y3QgUGFydGl0aW9uUHJ1bmVJbmZvICpwYXJ0X3BydW5l X2luZm87CisKKwkvKgorCSAqIEluZGV4IG9mIHRoaXMgcGxhbidzIFBhcnRpdGlvblBydW5lSW5m byBpbiBQbGFubmVkU3RtdC5wYXJ0X3BydW5lX2luZm9zCisJICogdG8gYmUgdXNlZCBmb3IgcnVu LXRpbWUgc3VicGxhbiBwcnVuaW5nOyAtMSBpZiBydW4tdGltZSBwcnVuaW5nIGlzCisJICogbm90 IG5lZWRlZC4KKwkgKi8KKwlpbnQJCQlwYXJ0X3BydW5lX2luZGV4OwogfSBNZXJnZUFwcGVuZDsK IAogLyogLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTE3NSw2ICsxMTk1LDEzIEBAIHR5cGVkZWYgc3Ry dWN0IFBsYW5Sb3dNYXJrCiAgKiBwcnVuZV9pbmZvcwkJCUxpc3Qgb2YgTGlzdHMgY29udGFpbmlu ZyBQYXJ0aXRpb25lZFJlbFBydW5lSW5mbyBub2RlcywKICAqCQkJCQkJb25lIHN1Ymxpc3QgcGVy IHJ1bi10aW1lLXBydW5hYmxlIHBhcnRpdGlvbiBoaWVyYXJjaHkKICAqCQkJCQkJYXBwZWFyaW5n IGluIHRoZSBwYXJlbnQgcGxhbiBub2RlJ3Mgc3VicGxhbnMuCisgKgorICogbmVlZHNfaW5pdF9w cnVuaW5nCURvZXMgYW55IG9mIHRoZSBQYXJ0aXRpb25lZFJlbFBydW5lSW5mb3MgaW4KKyAqCQkJ CQkJcHJ1bmVfaW5mb3MgaGF2ZSBpdHMgaW5pdGlhbF9wcnVuaW5nX3N0ZXBzIHNldD8KKyAqCisg KiBuZWVkc19leGVjX3BydW5pbmcJRG9lcyBhbnkgb2YgdGhlIFBhcnRpdGlvbmVkUmVsUHJ1bmVJ bmZvcyBpbgorICoJCQkJCQlwcnVuZV9pbmZvcyBoYXZlIGl0cyBleGVjX3BydW5pbmdfc3RlcHMg c2V0PworICoKICAqIG90aGVyX3N1YnBsYW5zCQlJbmRleGVzIG9mIGFueSBzdWJwbGFucyB0aGF0 IGFyZSBub3QgYWNjb3VudGVkIGZvcgogICoJCQkJCQlieSBhbnkgb2YgdGhlIFBhcnRpdGlvbmVk UmVsUHJ1bmVJbmZvIG5vZGVzIGluCiAgKgkJCQkJCSJwcnVuZV9pbmZvcyIuICBUaGVzZSBzdWJw bGFucyBtdXN0IG5vdCBiZSBwcnVuZWQuCkBAIC0xMTgzLDYgKzEyMTAsOSBAQCB0eXBlZGVmIHN0 cnVjdCBQYXJ0aXRpb25QcnVuZUluZm8KIHsKIAlOb2RlVGFnCQl0eXBlOwogCUxpc3QJICAgKnBy dW5lX2luZm9zOworCUJpdG1hcHNldCAgKmxlYWZwYXJ0X3J0aXM7CisJYm9vbAkJbmVlZHNfaW5p dF9wcnVuaW5nOworCWJvb2wJCW5lZWRzX2V4ZWNfcHJ1bmluZzsKIAlCaXRtYXBzZXQgICpvdGhl cl9zdWJwbGFuczsKIH0gUGFydGl0aW9uUHJ1bmVJbmZvOwogCkBAIC0xMjEzLDYgKzEyNDMsNyBA QCB0eXBlZGVmIHN0cnVjdCBQYXJ0aXRpb25lZFJlbFBydW5lSW5mbwogCWludAkJICAgKnN1YnBs YW5fbWFwOwkvKiBzdWJwbGFuIGluZGV4IGJ5IHBhcnRpdGlvbiBpbmRleCwgb3IgLTEgKi8KIAlp bnQJCSAgICpzdWJwYXJ0X21hcDsJLyogc3VicGFydCBpbmRleCBieSBwYXJ0aXRpb24gaW5kZXgs IG9yIC0xICovCiAJT2lkCQkgICAqcmVsaWRfbWFwOwkJLyogcmVsYXRpb24gT0lEIGJ5IHBhcnRp dGlvbiBpbmRleCwgb3IgMCAqLworCUluZGV4CSAgICpydGlfbWFwOwkJLyogUmFuZ2UgdGFibGUg aW5kZXggYnkgcGFydGl0aW9uIGluZGV4LCAwLiAqLwogCiAJLyoKIAkgKiBpbml0aWFsX3BydW5p bmdfc3RlcHMgc2hvd3MgaG93IHRvIHBydW5lIGR1cmluZyBleGVjdXRvciBzdGFydHVwIChpLmUu LApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdGNvcC90Y29wcHJvdC5oIGIvc3JjL2luY2x1ZGUv dGNvcC90Y29wcHJvdC5oCmluZGV4IDkyMjkxYTc1MGQuLjExOWQ0YTFkMTAgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL3Rjb3AvdGNvcHByb3QuaAorKysgYi9zcmMvaW5jbHVkZS90Y29wL3Rjb3Bw cm90LmgKQEAgLTY0LDcgKzY0LDcgQEAgZXh0ZXJuIFBsYW5uZWRTdG10ICpwZ19wbGFuX3F1ZXJ5 KFF1ZXJ5ICpxdWVyeXRyZWUsIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywKIAkJCQkJCQkJICBQ YXJhbUxpc3RJbmZvIGJvdW5kUGFyYW1zKTsKIGV4dGVybiBMaXN0ICpwZ19wbGFuX3F1ZXJpZXMo TGlzdCAqcXVlcnl0cmVlcywgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLAogCQkJCQkJCSBpbnQg Y3Vyc29yT3B0aW9ucywKLQkJCQkJCQkgUGFyYW1MaXN0SW5mbyBib3VuZFBhcmFtcyk7CisJCQkJ CQkJIFBhcmFtTGlzdEluZm8gYm91bmRQYXJhbXMsIExpc3QgKipwYXJ0X3BydW5lX3Jlc3VsdF9s aXN0KTsKIAogZXh0ZXJuIGJvb2wgY2hlY2tfbWF4X3N0YWNrX2RlcHRoKGludCAqbmV3dmFsLCB2 b2lkICoqZXh0cmEsIEd1Y1NvdXJjZSBzb3VyY2UpOwogZXh0ZXJuIHZvaWQgYXNzaWduX21heF9z dGFja19kZXB0aChpbnQgbmV3dmFsLCB2b2lkICpleHRyYSk7CmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS91dGlscy9wbGFuY2FjaGUuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3BsYW5jYWNoZS5oCmlu ZGV4IDk1Yjk5ZTNkMjUuLmY1OTFiOWRmOWMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxz L3BsYW5jYWNoZS5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL3BsYW5jYWNoZS5oCkBAIC0xNDgs NiArMTQ4LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgQ2FjaGVkUGxhbgogewogCWludAkJCW1hZ2ljOwkJ CS8qIHNob3VsZCBlcXVhbCBDQUNIRURQTEFOX01BR0lDICovCiAJTGlzdAkgICAqc3RtdF9saXN0 OwkJLyogbGlzdCBvZiBQbGFubmVkU3RtdHMgKi8KKwlMaXN0CSAgICpwYXJ0X3BydW5lX3Jlc3Vs dF9saXN0OwkvKiBsaXN0IG9mIFBhcnRpdGlvblBydW5lUmVzdWx0IHdpdGgKKwkJCQkJCQkJCSAq IG9uZSBlbGVtZW50IGZvciBlYWNoIG9mIHN0bXRfbGlzdDsgTklMCisJCQkJCQkJCQkgKiBpZiBu b3QgYSBnZW5lcmljIHBsYW4gKi8KIAlib29sCQlpc19vbmVzaG90OwkJLyogaXMgaXQgYSAib25l c2hvdCIgcGxhbj8gKi8KIAlib29sCQlpc19zYXZlZDsJCS8qIGlzIENhY2hlZFBsYW4gaW4gYSBs b25nLWxpdmVkIGNvbnRleHQ/ICovCiAJYm9vbAkJaXNfdmFsaWQ7CQkvKiBpcyB0aGUgc3RtdF9s aXN0IGN1cnJlbnRseSB2YWxpZD8gKi8KQEAgLTE1OCw2ICsxNjEsMTAgQEAgdHlwZWRlZiBzdHJ1 Y3QgQ2FjaGVkUGxhbgogCWludAkJCWdlbmVyYXRpb247CQkvKiBwYXJlbnQncyBnZW5lcmF0aW9u IG51bWJlciBmb3IgdGhpcyBwbGFuICovCiAJaW50CQkJcmVmY291bnQ7CQkvKiBjb3VudCBvZiBs aXZlIHJlZmVyZW5jZXMgdG8gdGhpcyBzdHJ1Y3QgKi8KIAlNZW1vcnlDb250ZXh0IGNvbnRleHQ7 CQkvKiBjb250ZXh0IGNvbnRhaW5pbmcgdGhpcyBDYWNoZWRQbGFuICovCisJTWVtb3J5Q29udGV4 dCBwYXJ0X3BydW5lX3Jlc3VsdF9saXN0X2NvbnRleHQ7IC8qIGNvbnRleHQgY29udGFpbmluZwor CQkJCQkJCQkJCQkJICAgKiBwYXJ0X3BydW5lX3Jlc3VsdF9saXN0LAorCQkJCQkJCQkJCQkJICAg KiBhIGNoaWxkIG9mIHRoZSBhYm92ZQorCQkJCQkJCQkJCQkJICAgKiBjb250ZXh0ICovCiB9IENh Y2hlZFBsYW47CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9wb3J0YWwuaCBi L3NyYy9pbmNsdWRlL3V0aWxzL3BvcnRhbC5oCmluZGV4IGFlZGRiZGFmZTUuLmMxZTMwNGY5ZDcg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3BvcnRhbC5oCisrKyBiL3NyYy9pbmNsdWRl L3V0aWxzL3BvcnRhbC5oCkBAIC0xMzcsNiArMTM3LDEwIEBAIHR5cGVkZWYgc3RydWN0IFBvcnRh bERhdGEKIAlDb21tYW5kVGFnCWNvbW1hbmRUYWc7CQkvKiBjb21tYW5kIHRhZyBmb3Igb3JpZ2lu YWwgcXVlcnkgKi8KIAlRdWVyeUNvbXBsZXRpb24gcWM7CQkJLyogY29tbWFuZCBjb21wbGV0aW9u IGRhdGEgZm9yIGV4ZWN1dGVkIHF1ZXJ5ICovCiAJTGlzdAkgICAqc3RtdHM7CQkJLyogbGlzdCBv ZiBQbGFubmVkU3RtdHMgKi8KKwlMaXN0CSAgICpwYXJ0X3BydW5lX3Jlc3VsdHM7CS8qIGxpc3Qg b2YgUGFydGl0aW9uUHJ1bmVSZXN1bHRzIHdpdGggb25lIGVsZW1lbnQKKwkJCQkJCQkJICogZm9y IGVhY2ggb2YgJ3N0bXRzJzsgc2FtZSBhcworCQkJCQkJCQkgKiBjcGxhbi0+cGFydF9wcnVuZV9y ZXN1bHRfbGlzdCBpZiBjcGxhbiBpcworCQkJCQkJCQkgKiBub3QgTlVMTCAqLwogCUNhY2hlZFBs YW4gKmNwbGFuOwkJCS8qIENhY2hlZFBsYW4sIGlmIHN0bXRzIGFyZSBmcm9tIG9uZSAqLwogCiAJ UGFyYW1MaXN0SW5mbyBwb3J0YWxQYXJhbXM7IC8qIHBhcmFtcyB0byBwYXNzIHRvIHF1ZXJ5ICov CkBAIC0yNDEsNiArMjQ1LDcgQEAgZXh0ZXJuIHZvaWQgUG9ydGFsRGVmaW5lUXVlcnkoUG9ydGFs IHBvcnRhbCwKIAkJCQkJCQkgIGNvbnN0IGNoYXIgKnNvdXJjZVRleHQsCiAJCQkJCQkJICBDb21t YW5kVGFnIGNvbW1hbmRUYWcsCiAJCQkJCQkJICBMaXN0ICpzdG10cywKKwkJCQkJCQkgIExpc3Qg KnBhcnRfcHJ1bmVfcmVzdWx0cywKIAkJCQkJCQkgIENhY2hlZFBsYW4gKmNwbGFuKTsKIGV4dGVy biBQbGFubmVkU3RtdCAqUG9ydGFsR2V0UHJpbWFyeVN0bXQoUG9ydGFsIHBvcnRhbCk7CiBleHRl cm4gdm9pZCBQb3J0YWxDcmVhdGVIb2xkU3RvcmUoUG9ydGFsIHBvcnRhbCk7Ci0tIAoyLjI0LjEK Cg== --0000000000002e7c3b05dbf73433--