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 1pLIjp-0000hL-R1 for pgsql-hackers@arkaria.postgresql.org; Fri, 27 Jan 2023 07:01:30 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pLIjo-00010R-O9 for pgsql-hackers@arkaria.postgresql.org; Fri, 27 Jan 2023 07:01:28 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pLIjo-00010I-4x for pgsql-hackers@lists.postgresql.org; Fri, 27 Jan 2023 07:01:28 +0000 Received: from mail-pg1-x52c.google.com ([2607:f8b0:4864:20::52c]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1pLIjk-00040x-RR for pgsql-hackers@postgresql.org; Fri, 27 Jan 2023 07:01:27 +0000 Received: by mail-pg1-x52c.google.com with SMTP id s67so2664757pgs.3 for ; Thu, 26 Jan 2023 23:01:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=iDfrVE4ewiJIiwnaH1qi5IAwAvtBxCbYEIjyuORQllg=; b=q8Fz36efv7Yo3LfkcsF1dZYAZSwqfsFTcvnjDm5aoEeOKKaL5z5tH82fwMpXvExXzw cmFceAzDeyDMQPka0foc+ZRGlyKWUBhcUHSGLfoqsL1RDToP4Mai+Gkoscu+vMCDKv6E JnvHKpNW78f9gsgSKHNZEZu/FQ7NsWwZIc9ifmr5kS1d3DzTRVmV/ldMh8EQc9caLJMF lihu2EIHgzHqyxjm/RifQQfYk+5Fdw/ecoU5IS8x7ML9e/0Kpo4THh6vcDJGUzQzHupW JMZMAMYhyxKJ/CWW3fbunQRwfXAlWuzf/LdsGUJdHLDb5k3JLbASZgtt9D6IOYVICBhd OX8w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=iDfrVE4ewiJIiwnaH1qi5IAwAvtBxCbYEIjyuORQllg=; b=tGFjGKwyd2/LdLOk15fAWHtambQ5niUtnsfIkn27LL5rE4LVHCRzz8MnoVwaWTEAhg NJ2sj/7MdZTpt79WwUqpJrCliJVTlCzMwick+1J9l67OOEix2APSiQeoZHrbE7Uwe+ke kYWgfKLYPNYj45eH6SjXkn1z+gLMQsfJfSOtMI8GQrFB+T66Dm848but6Cb2mtu71IJV 8sRs6W0SdbgQhi943p1nzB3SXfkEBP3HpH6VmjydXqso5yRNrlavBTJAmHqci79xZ2zD At7SMuh/CywM2uCJ6OmlR3xNZ31ynwm8UrryED7W9xZOxY8029S0KirRFGZ/HSYS/73/ Cd5A== X-Gm-Message-State: AO0yUKVS+HntaXyyMAfq/gXZy8174TDZjodgNrxXT/6F/gI9JJge5Ws8 YyAXVwdVRaogNcO4zVza1LJgE6va98KOBBavt8c= X-Google-Smtp-Source: AK7set/X4XqT2wJc6yrpkWY2Pq0FV0VBIDMBDE109Gv5UlGIMiSdOoVJJQc2pwWzuBYO4kLcYg2GRZhq4/TNyvTkXCU= X-Received: by 2002:aa7:8381:0:b0:590:bfd1:b980 with SMTP id u1-20020aa78381000000b00590bfd1b980mr869637pfm.64.1674802882022; Thu, 26 Jan 2023 23:01:22 -0800 (PST) MIME-Version: 1.0 References: <20221221101846.7zsi7lscnm5ediik@alvherre.pgsql> <1350682.1671635927@sss.pgh.pa.us> <4191508.1674157166@sss.pgh.pa.us> <349124.1674185509@sss.pgh.pa.us> In-Reply-To: From: Amit Langote Date: Fri, 27 Jan 2023 16:01:05 +0900 Message-ID: Subject: Re: generic plans and "initial" pruning To: Tom Lane Cc: Alvaro Herrera , Robert Haas , Jacob Champion , David Rowley , PostgreSQL-development Content-Type: multipart/mixed; boundary="000000000000dc2ca505f3396ed1" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000dc2ca505f3396ed1 Content-Type: text/plain; charset="UTF-8" On Fri, Jan 20, 2023 at 12:52 PM Amit Langote wrote: > Alright, I'll try to get something out early next week. Thanks for > all the pointers. Sorry for the delay. Attached is what I've come up with so far. I didn't actually go with calling the plancache on every lock taken on a relation, that is, in ExecGetRangeTableRelation(). One thing about doing it that way that I didn't quite like (or didn't see a clean enough way to code) is the need to complicate the ExecInitNode() traversal for handling the abrupt suspension of the ongoing setup of the PlanState tree. So, I decided to keep the current model of locking all the relations that need to be locked before doing anything else in InitPlan(), much as how AcquireExecutorLocks() does it. A new function called from the top of InitPlan that I've called ExecLockRelationsIfNeeded() does that locking after performing the initial pruning in the same manner as the earlier patch did. That does mean that I needed to keep all the adjustments of the pruning code that are required for such out-of-ExecInitNode() invocation of initial pruning, including those PartitionPruneResult to carry the result of that pruning for ExecInitNode()-time reuse, though they no longer need be passed through many unrelated interfaces. Anyways, here's a description of the patches: 0001 adjusts various call sites of ExecutorStart() to cope with the possibility of being asked to recreate a CachedPlan, if one is involved. The main objective here is to have as little stuff as sensible happen between GetCachedPlan() that returned the CachedPlan and ExecutorStart() so as to minimize the chances of missing cleaning up resources that must not be missed. 0002 is preparatory refactoring to make out-of-ExecInitNode() invocation of pruning possible. 0003 moves the responsibility of CachedPlan validation locking into ExecutorStart() as described above. -- Thanks, Amit Langote EDB: http://www.enterprisedb.com --000000000000dc2ca505f3396ed1 Content-Type: application/octet-stream; name="v31-0001-Move-ExecutorStart-closer-to-GetCachedPlan.patch" Content-Disposition: attachment; filename="v31-0001-Move-ExecutorStart-closer-to-GetCachedPlan.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lde6c7bs2 RnJvbSA0Y2ZjM2ZkZmI0YzMxYTE2M2ZjM2IwNjU3YmU3NzkyNzMxNGNjMWNhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBhbWl0bGFuIDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4KRGF0 ZTogRnJpLCAyMCBKYW4gMjAyMyAxNjo1MjozMSArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjMxIDEv M10gTW92ZSBFeGVjdXRvclN0YXJ0KCkgY2xvc2VyIHRvIEdldENhY2hlZFBsYW4oKQoKVGhpcyBp cyBpbiBwcmVwYXJhdGlvbiBmb3IgbW92aW5nIENhY2hlZFBsYW4gdmFsaWRhdGlvbiBsb2NraW5n CmludG8gRXhlY3V0b3JTdGFydCgpLiAgVGhlIGludGVudCBpcyB0byBub3QgaGF2ZSBtYW55IHN0 ZXBzIGJldHdlZW4KR2V0Q2FjaGVkUGxhbigpIGFuZCBFeGVjdXRvclN0YXJ0KCkgc28gdGhhdCBp ZiB0aGUgbGF0dGVyIGludmFsaWRhdGVzCmEgQ2FjaGVkUGxhbiwgdGhlcmUncyBub3QgbXVjaCBy ZXNvdXJjZSBjbGVhbnVwIHRvIHdvcnJ5IGFib3V0LgotLS0KIGNvbnRyaWIvYXV0b19leHBsYWlu L2F1dG9fZXhwbGFpbi5jICAgICAgICAgICB8ICAgOSArLQogLi4uL3BnX3N0YXRfc3RhdGVtZW50 cy9wZ19zdGF0X3N0YXRlbWVudHMuYyAgIHwgICA4ICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9j b3B5dG8uYyAgICAgICAgICAgICAgICAgfCAgIDUgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2Ny ZWF0ZWFzLmMgICAgICAgICAgICAgICB8ICAgNCArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhw bGFpbi5jICAgICAgICAgICAgICAgIHwgMTQ4ICsrKysrKy0tLQogc3JjL2JhY2tlbmQvY29tbWFu ZHMvZXh0ZW5zaW9uLmMgICAgICAgICAgICAgIHwgICAzICstCiBzcmMvYmFja2VuZC9jb21tYW5k cy9tYXR2aWV3LmMgICAgICAgICAgICAgICAgfCAgIDQgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRz L3BvcnRhbGNtZHMuYyAgICAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMv cHJlcGFyZS5jICAgICAgICAgICAgICAgIHwgIDg1ICsrKy0tCiBzcmMvYmFja2VuZC9leGVjdXRv ci9leGVjTWFpbi5jICAgICAgICAgICAgICAgfCAgMTggKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9y L2V4ZWNQYXJhbGxlbC5jICAgICAgICAgICB8ICAgOSArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZnVuY3Rpb25zLmMgICAgICAgICAgICAgIHwgICAzICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9z cGkuYyAgICAgICAgICAgICAgICAgICAgfCAgNDcgKystCiBzcmMvYmFja2VuZC9ub2Rlcy9NYWtl ZmlsZSAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvbm9kZXMvZ2VuX25v ZGVfc3VwcG9ydC5wbCAgICAgICAgIHwgICAyICsKIHNyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMu YyAgICAgICAgICAgICAgICAgICB8ICAxMiArLQogc3JjL2JhY2tlbmQvdGNvcC9wcXVlcnkuYyAg ICAgICAgICAgICAgICAgICAgIHwgMjkyICsrKysrKysrKy0tLS0tLS0tLQogc3JjL2JhY2tlbmQv dXRpbHMvbW1nci9wb3J0YWxtZW0uYyAgICAgICAgICAgIHwgICA2ICsKIHNyYy9pbmNsdWRlL2Nv bW1hbmRzL2V4cGxhaW4uaCAgICAgICAgICAgICAgICB8ICAgOCArLQogc3JjL2luY2x1ZGUvZXhl Y3V0b3IvZXhlY2Rlc2MuaCAgICAgICAgICAgICAgIHwgICA0ICsKIHNyYy9pbmNsdWRlL2V4ZWN1 dG9yL2V4ZWN1dG9yLmggICAgICAgICAgICAgICB8ICAgNiArLQogc3JjL2luY2x1ZGUvbm9kZXMv bWVzb24uYnVpbGQgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3Rjb3AvcHF1 ZXJ5LmggICAgICAgICAgICAgICAgICAgICB8ICAgMyArLQogc3JjL2luY2x1ZGUvdXRpbHMvcG9y dGFsLmggICAgICAgICAgICAgICAgICAgIHwgICAyICsKIDI0IGZpbGVzIGNoYW5nZWQsIDQxMSBp bnNlcnRpb25zKCspLCAyNzEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9hdXRv X2V4cGxhaW4vYXV0b19leHBsYWluLmMgYi9jb250cmliL2F1dG9fZXhwbGFpbi9hdXRvX2V4cGxh aW4uYwppbmRleCBjM2FjMjdhZTk5Li4wZjIwYjk3NzgxIDEwMDY0NAotLS0gYS9jb250cmliL2F1 dG9fZXhwbGFpbi9hdXRvX2V4cGxhaW4uYworKysgYi9jb250cmliL2F1dG9fZXhwbGFpbi9hdXRv X2V4cGxhaW4uYwpAQCAtNzgsNyArNzgsOCBAQCBzdGF0aWMgRXhlY3V0b3JSdW5faG9va190eXBl IHByZXZfRXhlY3V0b3JSdW4gPSBOVUxMOwogc3RhdGljIEV4ZWN1dG9yRmluaXNoX2hvb2tfdHlw ZSBwcmV2X0V4ZWN1dG9yRmluaXNoID0gTlVMTDsKIHN0YXRpYyBFeGVjdXRvckVuZF9ob29rX3R5 cGUgcHJldl9FeGVjdXRvckVuZCA9IE5VTEw7CiAKLXN0YXRpYyB2b2lkIGV4cGxhaW5fRXhlY3V0 b3JTdGFydChRdWVyeURlc2MgKnF1ZXJ5RGVzYywgaW50IGVmbGFncyk7CitzdGF0aWMgdm9pZCBl eHBsYWluX0V4ZWN1dG9yU3RhcnQoUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxhZ3MsCisJ CQkJCQkJCSAgYm9vbCAqcmVwbGFuKTsKIHN0YXRpYyB2b2lkIGV4cGxhaW5fRXhlY3V0b3JSdW4o UXVlcnlEZXNjICpxdWVyeURlc2MsCiAJCQkJCQkJCVNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAog CQkJCQkJCQl1aW50NjQgY291bnQsIGJvb2wgZXhlY3V0ZV9vbmNlKTsKQEAgLTI1OSw3ICsyNjAs NyBAQCBfUEdfaW5pdCh2b2lkKQogICogRXhlY3V0b3JTdGFydCBob29rOiBzdGFydCB1cCBsb2dn aW5nIGlmIG5lZWRlZAogICovCiBzdGF0aWMgdm9pZAotZXhwbGFpbl9FeGVjdXRvclN0YXJ0KFF1 ZXJ5RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdzKQorZXhwbGFpbl9FeGVjdXRvclN0YXJ0KFF1 ZXJ5RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdzLCBib29sICpyZXBsYW4pCiB7CiAJLyoKIAkg KiBBdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggdG9wLWxldmVsIHN0YXRlbWVudCwgZGVjaWRlIHdo ZXRoZXIgd2UnbGwKQEAgLTI5Niw5ICsyOTcsOSBAQCBleHBsYWluX0V4ZWN1dG9yU3RhcnQoUXVl cnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxhZ3MpCiAJfQogCiAJaWYgKHByZXZfRXhlY3V0b3JT dGFydCkKLQkJcHJldl9FeGVjdXRvclN0YXJ0KHF1ZXJ5RGVzYywgZWZsYWdzKTsKKwkJcHJldl9F eGVjdXRvclN0YXJ0KHF1ZXJ5RGVzYywgZWZsYWdzLCByZXBsYW4pOwogCWVsc2UKLQkJc3RhbmRh cmRfRXhlY3V0b3JTdGFydChxdWVyeURlc2MsIGVmbGFncyk7CisJCXN0YW5kYXJkX0V4ZWN1dG9y U3RhcnQocXVlcnlEZXNjLCBlZmxhZ3MsIHJlcGxhbik7CiAKIAlpZiAoYXV0b19leHBsYWluX2Vu YWJsZWQoKSkKIAl7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19z dGF0X3N0YXRlbWVudHMuYyBiL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3Rh dGVtZW50cy5jCmluZGV4IGFkMWZlNDQ0OTYuLjc2MzQ4NDE5YWUgMTAwNjQ0Ci0tLSBhL2NvbnRy aWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy5jCisrKyBiL2NvbnRyaWIv cGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy5jCkBAIC0zMjUsNyArMzI1LDcg QEAgc3RhdGljIFBsYW5uZWRTdG10ICpwZ3NzX3BsYW5uZXIoUXVlcnkgKnBhcnNlLAogCQkJCQkJ CQkgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLAogCQkJCQkJCQkgaW50IGN1cnNvck9wdGlvbnMs CiAJCQkJCQkJCSBQYXJhbUxpc3RJbmZvIGJvdW5kUGFyYW1zKTsKLXN0YXRpYyB2b2lkIHBnc3Nf RXhlY3V0b3JTdGFydChRdWVyeURlc2MgKnF1ZXJ5RGVzYywgaW50IGVmbGFncyk7CitzdGF0aWMg dm9pZCBwZ3NzX0V4ZWN1dG9yU3RhcnQoUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxhZ3Ms IGJvb2wgKnJlcGxhbik7CiBzdGF0aWMgdm9pZCBwZ3NzX0V4ZWN1dG9yUnVuKFF1ZXJ5RGVzYyAq cXVlcnlEZXNjLAogCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKIAkJCQkJCQkgdWlu dDY0IGNvdW50LCBib29sIGV4ZWN1dGVfb25jZSk7CkBAIC05NjIsMTIgKzk2MiwxMiBAQCBwZ3Nz X3BsYW5uZXIoUXVlcnkgKnBhcnNlLAogICogRXhlY3V0b3JTdGFydCBob29rOiBzdGFydCB1cCB0 cmFja2luZyBpZiBuZWVkZWQKICAqLwogc3RhdGljIHZvaWQKLXBnc3NfRXhlY3V0b3JTdGFydChR dWVyeURlc2MgKnF1ZXJ5RGVzYywgaW50IGVmbGFncykKK3Bnc3NfRXhlY3V0b3JTdGFydChRdWVy eURlc2MgKnF1ZXJ5RGVzYywgaW50IGVmbGFncywgYm9vbCAqcmVwbGFuKQogewogCWlmIChwcmV2 X0V4ZWN1dG9yU3RhcnQpCi0JCXByZXZfRXhlY3V0b3JTdGFydChxdWVyeURlc2MsIGVmbGFncyk7 CisJCXByZXZfRXhlY3V0b3JTdGFydChxdWVyeURlc2MsIGVmbGFncywgcmVwbGFuKTsKIAllbHNl Ci0JCXN0YW5kYXJkX0V4ZWN1dG9yU3RhcnQocXVlcnlEZXNjLCBlZmxhZ3MpOworCQlzdGFuZGFy ZF9FeGVjdXRvclN0YXJ0KHF1ZXJ5RGVzYywgZWZsYWdzLCByZXBsYW4pOwogCiAJLyoKIAkgKiBJ ZiBxdWVyeSBoYXMgcXVlcnlJZCB6ZXJvLCBkb24ndCB0cmFjayBpdC4gIFRoaXMgcHJldmVudHMg ZG91YmxlCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5dG8uYyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2NvcHl0by5jCmluZGV4IDgwNDNiNGU5YjEuLmI2ZDhmYTU5ZDUgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHl0by5jCisrKyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2NvcHl0by5jCkBAIC01NTgsNyArNTU4LDggQEAgQmVnaW5Db3B5VG8oUGFyc2VT dGF0ZSAqcHN0YXRlLAogCQkoKERSX2NvcHkgKikgZGVzdCktPmNzdGF0ZSA9IGNzdGF0ZTsKIAog CQkvKiBDcmVhdGUgYSBRdWVyeURlc2MgcmVxdWVzdGluZyBubyBvdXRwdXQgKi8KLQkJY3N0YXRl LT5xdWVyeURlc2MgPSBDcmVhdGVRdWVyeURlc2MocGxhbiwgcHN0YXRlLT5wX3NvdXJjZXRleHQs CisJCWNzdGF0ZS0+cXVlcnlEZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHBsYW4sIE5VTEwsCisJCQkJ CQkJCQkJCXBzdGF0ZS0+cF9zb3VyY2V0ZXh0LAogCQkJCQkJCQkJCQlHZXRBY3RpdmVTbmFwc2hv dCgpLAogCQkJCQkJCQkJCQlJbnZhbGlkU25hcHNob3QsCiAJCQkJCQkJCQkJCWRlc3QsIE5VTEws IE5VTEwsIDApOwpAQCAtNTY4LDcgKzU2OSw3IEBAIEJlZ2luQ29weVRvKFBhcnNlU3RhdGUgKnBz dGF0ZSwKIAkJICoKIAkJICogRXhlY3V0b3JTdGFydCBjb21wdXRlcyBhIHJlc3VsdCB0dXBkZXNj IGZvciB1cwogCQkgKi8KLQkJRXhlY3V0b3JTdGFydChjc3RhdGUtPnF1ZXJ5RGVzYywgMCk7CisJ CUV4ZWN1dG9yU3RhcnQoY3N0YXRlLT5xdWVyeURlc2MsIDAsIE5VTEwpOwogCiAJCXR1cERlc2Mg PSBjc3RhdGUtPnF1ZXJ5RGVzYy0+dHVwRGVzYzsKIAl9CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy9jcmVhdGVhcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYwpp bmRleCBkNmM2ZDUxNGYzLi5lZTMzZjAyNjAyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21t YW5kcy9jcmVhdGVhcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMKQEAg LTMyNSwxMiArMzI1LDEyIEBAIEV4ZWNDcmVhdGVUYWJsZUFzKFBhcnNlU3RhdGUgKnBzdGF0ZSwg Q3JlYXRlVGFibGVBc1N0bXQgKnN0bXQsCiAJCVVwZGF0ZUFjdGl2ZVNuYXBzaG90Q29tbWFuZElk KCk7CiAKIAkJLyogQ3JlYXRlIGEgUXVlcnlEZXNjLCByZWRpcmVjdGluZyBvdXRwdXQgdG8gb3Vy IHR1cGxlIHJlY2VpdmVyICovCi0JCXF1ZXJ5RGVzYyA9IENyZWF0ZVF1ZXJ5RGVzYyhwbGFuLCBw c3RhdGUtPnBfc291cmNldGV4dCwKKwkJcXVlcnlEZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHBsYW4s IE5VTEwsIHBzdGF0ZS0+cF9zb3VyY2V0ZXh0LAogCQkJCQkJCQkJR2V0QWN0aXZlU25hcHNob3Qo KSwgSW52YWxpZFNuYXBzaG90LAogCQkJCQkJCQkJZGVzdCwgcGFyYW1zLCBxdWVyeUVudiwgMCk7 CiAKIAkJLyogY2FsbCBFeGVjdXRvclN0YXJ0IHRvIHByZXBhcmUgdGhlIHBsYW4gZm9yIGV4ZWN1 dGlvbiAqLwotCQlFeGVjdXRvclN0YXJ0KHF1ZXJ5RGVzYywgR2V0SW50b1JlbEVGbGFncyhpbnRv KSk7CisJCUV4ZWN1dG9yU3RhcnQocXVlcnlEZXNjLCBHZXRJbnRvUmVsRUZsYWdzKGludG8pLCBO VUxMKTsKIAogCQkvKiBydW4gdGhlIHBsYW4gdG8gY29tcGxldGlvbiAqLwogCQlFeGVjdXRvclJ1 bihxdWVyeURlc2MsIEZvcndhcmRTY2FuRGlyZWN0aW9uLCAwTCwgdHJ1ZSk7CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9l eHBsYWluLmMKaW5kZXggNTIxMmE2NGIxZS4uZmNiMjI3NTMzYyAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxh aW4uYwpAQCAtMzg0LDYgKzM4NCw3IEBAIEV4cGxhaW5PbmVRdWVyeShRdWVyeSAqcXVlcnksIGlu dCBjdXJzb3JPcHRpb25zLAogCWVsc2UKIAl7CiAJCVBsYW5uZWRTdG10ICpwbGFuOworCQlRdWVy eURlc2MgICAqcXVlcnlEZXNjOwogCQlpbnN0cl90aW1lCXBsYW5zdGFydCwKIAkJCQkJcGxhbmR1 cmF0aW9uOwogCQlCdWZmZXJVc2FnZSBidWZ1c2FnZV9zdGFydCwKQEAgLTQwNiwxMiArNDA3LDk0 IEBAIEV4cGxhaW5PbmVRdWVyeShRdWVyeSAqcXVlcnksIGludCBjdXJzb3JPcHRpb25zLAogCQkJ QnVmZmVyVXNhZ2VBY2N1bURpZmYoJmJ1ZnVzYWdlLCAmcGdCdWZmZXJVc2FnZSwgJmJ1ZnVzYWdl X3N0YXJ0KTsKIAkJfQogCisJCXF1ZXJ5RGVzYyA9IEV4cGxhaW5RdWVyeURlc2MocGxhbiwgTlVM TCwgcXVlcnlTdHJpbmcsIGludG8sIGVzLAorCQkJCQkJCQkJIHBhcmFtcywgcXVlcnlFbnYsIE5V TEwpOworCiAJCS8qIHJ1biBpdCAoaWYgbmVlZGVkKSBhbmQgcHJvZHVjZSBvdXRwdXQgKi8KLQkJ RXhwbGFpbk9uZVBsYW4ocGxhbiwgaW50bywgZXMsIHF1ZXJ5U3RyaW5nLCBwYXJhbXMsIHF1ZXJ5 RW52LAorCQlFeHBsYWluT25lUGxhbihxdWVyeURlc2MsIGludG8sIGVzLCBxdWVyeVN0cmluZywg cGFyYW1zLCBxdWVyeUVudiwKIAkJCQkJICAgJnBsYW5kdXJhdGlvbiwgKGVzLT5idWZmZXJzID8g JmJ1ZnVzYWdlIDogTlVMTCkpOworCisJCS8qIE9uZSBwdXNoZWQgYnkgRXhwbGFpblF1ZXJ5RGVz YygpLiAqLworCQlQb3BBY3RpdmVTbmFwc2hvdCgpOwogCX0KIH0KIAorLyoKKyAqIEV4cGxhaW5R dWVyeURlc2MKKyAqCQlTZXQgdXAgUXVlcnlEZXNjIGZvciBFWFBMQUlOaW5nIGEgZ2l2ZW4gcGxh bgorICoKKyAqIE9uIHJldHVybiwgKnJlcGxhbiBpcyBzZXQgdG8gdHJ1ZSBpZiBjcGxhbiBpcyBm b3VuZCB0byBoYXZlIGJlZW4KKyAqIGludmFsaWRhdGVkIHNpbmNlIGl0cyBjcmVhdGlvbi4KKyAq LworUXVlcnlEZXNjICoKK0V4cGxhaW5RdWVyeURlc2MoUGxhbm5lZFN0bXQgKnN0bXQsIENhY2hl ZFBsYW4gKmNwbGFuLAorCQkJCSBjb25zdCBjaGFyICpxdWVyeVN0cmluZywgSW50b0NsYXVzZSAq aW50bywgRXhwbGFpblN0YXRlICplcywKKwkJCQkgUGFyYW1MaXN0SW5mbyBwYXJhbXMsIFF1ZXJ5 RW52aXJvbm1lbnQgKnF1ZXJ5RW52LAorCQkJCSBib29sICpyZXBsYW4pCit7CisJUXVlcnlEZXNj ICAqcXVlcnlEZXNjOworCURlc3RSZWNlaXZlciAqZGVzdDsKKwlpbnQJCQllZmxhZ3M7CisJaW50 CQkJaW5zdHJ1bWVudF9vcHRpb24gPSAwOworCisJLyoKKwkgKiBOb3JtYWxseSB3ZSBkaXNjYXJk IHRoZSBxdWVyeSdzIG91dHB1dCwgYnV0IGlmIGV4cGxhaW5pbmcgQ1JFQVRFIFRBQkxFCisJICog QVMsIHdlJ2QgYmV0dGVyIHVzZSB0aGUgYXBwcm9wcmlhdGUgdHVwbGUgcmVjZWl2ZXIuCisJICov CisJaWYgKGludG8pCisJCWRlc3QgPSBDcmVhdGVJbnRvUmVsRGVzdFJlY2VpdmVyKGludG8pOwor CWVsc2UKKwkJZGVzdCA9IE5vbmVfUmVjZWl2ZXI7CisKKwlpZiAoZXMtPmFuYWx5emUgJiYgZXMt PnRpbWluZykKKwkJaW5zdHJ1bWVudF9vcHRpb24gfD0gSU5TVFJVTUVOVF9USU1FUjsKKwllbHNl IGlmIChlcy0+YW5hbHl6ZSkKKwkJaW5zdHJ1bWVudF9vcHRpb24gfD0gSU5TVFJVTUVOVF9ST1dT OworCisJaWYgKGVzLT5idWZmZXJzKQorCQlpbnN0cnVtZW50X29wdGlvbiB8PSBJTlNUUlVNRU5U X0JVRkZFUlM7CisJaWYgKGVzLT53YWwpCisJCWluc3RydW1lbnRfb3B0aW9uIHw9IElOU1RSVU1F TlRfV0FMOworCisJLyoKKwkgKiBVc2UgYSBzbmFwc2hvdCB3aXRoIGFuIHVwZGF0ZWQgY29tbWFu ZCBJRCB0byBlbnN1cmUgdGhpcyBxdWVyeSBzZWVzCisJICogcmVzdWx0cyBvZiBhbnkgcHJldmlv dXNseSBleGVjdXRlZCBxdWVyaWVzLgorCSAqLworCVB1c2hDb3BpZWRTbmFwc2hvdChHZXRBY3Rp dmVTbmFwc2hvdCgpKTsKKwlVcGRhdGVBY3RpdmVTbmFwc2hvdENvbW1hbmRJZCgpOworCisJLyog Q3JlYXRlIGEgUXVlcnlEZXNjIGZvciB0aGUgcXVlcnkgKi8KKwlxdWVyeURlc2MgPSBDcmVhdGVR dWVyeURlc2Moc3RtdCwgY3BsYW4sIHF1ZXJ5U3RyaW5nLAorCQkJCQkJCQlHZXRBY3RpdmVTbmFw c2hvdCgpLCBJbnZhbGlkU25hcHNob3QsCisJCQkJCQkJCWRlc3QsIHBhcmFtcywgcXVlcnlFbnYs IGluc3RydW1lbnRfb3B0aW9uKTsKKworCS8qIFNlbGVjdCBleGVjdXRpb24gb3B0aW9ucyAqLwor CWlmIChlcy0+YW5hbHl6ZSkKKwkJZWZsYWdzID0gMDsJCQkJLyogZGVmYXVsdCBydW4tdG8tY29t cGxldGlvbiBmbGFncyAqLworCWVsc2UKKwkJZWZsYWdzID0gRVhFQ19GTEFHX0VYUExBSU5fT05M WTsKKwlpZiAoaW50bykKKwkJZWZsYWdzIHw9IEdldEludG9SZWxFRmxhZ3MoaW50byk7CisKKwkv KgorCSAqIENhbGwgRXhlY3V0b3JTdGFydCB0byBwcmVwYXJlIHRoZSBwbGFuIGZvciBleGVjdXRp b24uICBBIGNhY2hlZCBwbGFuCisJICogbWF5IGdldCBpbnZhbGlkYXRlZCBhcyB3ZSdyZSBkb2lu ZyB0aGF0LgorCSAqLworCWlmIChyZXBsYW4pCisJCSpyZXBsYW4gPSBmYWxzZTsKKwlFeGVjdXRv clN0YXJ0KHF1ZXJ5RGVzYywgZWZsYWdzLCByZXBsYW4pOworCWlmIChyZXBsYW4gJiYgKnJlcGxh bikKKwl7CisJCS8qIENsZWFuIHVwLiAqLworCQlFeGVjdXRvckVuZChxdWVyeURlc2MpOworCQlG cmVlUXVlcnlEZXNjKHF1ZXJ5RGVzYyk7CisJCVBvcEFjdGl2ZVNuYXBzaG90KCk7CisJCXJldHVy biBOVUxMOworCX0KKworCXJldHVybiBxdWVyeURlc2M7Cit9CisKIC8qCiAgKiBFeHBsYWluT25l VXRpbGl0eSAtCiAgKgkgIHByaW50IG91dCB0aGUgZXhlY3V0aW9uIHBsYW4gZm9yIG9uZSB1dGls aXR5IHN0YXRlbWVudApAQCAtNTE1LDMwICs1OTgsMTggQEAgRXhwbGFpbk9uZVV0aWxpdHkoTm9k ZSAqdXRpbGl0eVN0bXQsIEludG9DbGF1c2UgKmludG8sIEV4cGxhaW5TdGF0ZSAqZXMsCiAgKiB0 byBjYWxsIGl0LgogICovCiB2b2lkCi1FeHBsYWluT25lUGxhbihQbGFubmVkU3RtdCAqcGxhbm5l ZHN0bXQsIEludG9DbGF1c2UgKmludG8sIEV4cGxhaW5TdGF0ZSAqZXMsCitFeHBsYWluT25lUGxh bihRdWVyeURlc2MgKnF1ZXJ5RGVzYywKKwkJCSAgIEludG9DbGF1c2UgKmludG8sIEV4cGxhaW5T dGF0ZSAqZXMsCiAJCQkgICBjb25zdCBjaGFyICpxdWVyeVN0cmluZywgUGFyYW1MaXN0SW5mbyBw YXJhbXMsCiAJCQkgICBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudiwgY29uc3QgaW5zdHJfdGlt ZSAqcGxhbmR1cmF0aW9uLAogCQkJICAgY29uc3QgQnVmZmVyVXNhZ2UgKmJ1ZnVzYWdlKQogewot CURlc3RSZWNlaXZlciAqZGVzdDsKLQlRdWVyeURlc2MgICpxdWVyeURlc2M7CisJUGxhbm5lZFN0 bXQgKnBsYW5uZWRzdG10ID0gcXVlcnlEZXNjLT5wbGFubmVkc3RtdDsKIAlpbnN0cl90aW1lCXN0 YXJ0dGltZTsKIAlkb3VibGUJCXRvdGFsdGltZSA9IDA7Ci0JaW50CQkJZWZsYWdzOwotCWludAkJ CWluc3RydW1lbnRfb3B0aW9uID0gMDsKIAogCUFzc2VydChwbGFubmVkc3RtdC0+Y29tbWFuZFR5 cGUgIT0gQ01EX1VUSUxJVFkpOwogCi0JaWYgKGVzLT5hbmFseXplICYmIGVzLT50aW1pbmcpCi0J CWluc3RydW1lbnRfb3B0aW9uIHw9IElOU1RSVU1FTlRfVElNRVI7Ci0JZWxzZSBpZiAoZXMtPmFu YWx5emUpCi0JCWluc3RydW1lbnRfb3B0aW9uIHw9IElOU1RSVU1FTlRfUk9XUzsKLQotCWlmIChl cy0+YnVmZmVycykKLQkJaW5zdHJ1bWVudF9vcHRpb24gfD0gSU5TVFJVTUVOVF9CVUZGRVJTOwot CWlmIChlcy0+d2FsKQotCQlpbnN0cnVtZW50X29wdGlvbiB8PSBJTlNUUlVNRU5UX1dBTDsKLQog CS8qCiAJICogV2UgYWx3YXlzIGNvbGxlY3QgdGltaW5nIGZvciB0aGUgZW50aXJlIHN0YXRlbWVu dCwgZXZlbiB3aGVuIG5vZGUtbGV2ZWwKIAkgKiB0aW1pbmcgaXMgb2ZmLCBzbyB3ZSBkb24ndCBs b29rIGF0IGVzLT50aW1pbmcgaGVyZS4gIChXZSBjb3VsZCBza2lwCkBAIC01NDYsMzggKzYxNyw2 IEBAIEV4cGxhaW5PbmVQbGFuKFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwgSW50b0NsYXVzZSAq aW50bywgRXhwbGFpblN0YXRlICplcywKIAkgKi8KIAlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKHN0 YXJ0dGltZSk7CiAKLQkvKgotCSAqIFVzZSBhIHNuYXBzaG90IHdpdGggYW4gdXBkYXRlZCBjb21t YW5kIElEIHRvIGVuc3VyZSB0aGlzIHF1ZXJ5IHNlZXMKLQkgKiByZXN1bHRzIG9mIGFueSBwcmV2 aW91c2x5IGV4ZWN1dGVkIHF1ZXJpZXMuCi0JICovCi0JUHVzaENvcGllZFNuYXBzaG90KEdldEFj dGl2ZVNuYXBzaG90KCkpOwotCVVwZGF0ZUFjdGl2ZVNuYXBzaG90Q29tbWFuZElkKCk7Ci0KLQkv KgotCSAqIE5vcm1hbGx5IHdlIGRpc2NhcmQgdGhlIHF1ZXJ5J3Mgb3V0cHV0LCBidXQgaWYgZXhw bGFpbmluZyBDUkVBVEUgVEFCTEUKLQkgKiBBUywgd2UnZCBiZXR0ZXIgdXNlIHRoZSBhcHByb3By aWF0ZSB0dXBsZSByZWNlaXZlci4KLQkgKi8KLQlpZiAoaW50bykKLQkJZGVzdCA9IENyZWF0ZUlu dG9SZWxEZXN0UmVjZWl2ZXIoaW50byk7Ci0JZWxzZQotCQlkZXN0ID0gTm9uZV9SZWNlaXZlcjsK LQotCS8qIENyZWF0ZSBhIFF1ZXJ5RGVzYyBmb3IgdGhlIHF1ZXJ5ICovCi0JcXVlcnlEZXNjID0g Q3JlYXRlUXVlcnlEZXNjKHBsYW5uZWRzdG10LCBxdWVyeVN0cmluZywKLQkJCQkJCQkJR2V0QWN0 aXZlU25hcHNob3QoKSwgSW52YWxpZFNuYXBzaG90LAotCQkJCQkJCQlkZXN0LCBwYXJhbXMsIHF1 ZXJ5RW52LCBpbnN0cnVtZW50X29wdGlvbik7Ci0KLQkvKiBTZWxlY3QgZXhlY3V0aW9uIG9wdGlv bnMgKi8KLQlpZiAoZXMtPmFuYWx5emUpCi0JCWVmbGFncyA9IDA7CQkJCS8qIGRlZmF1bHQgcnVu LXRvLWNvbXBsZXRpb24gZmxhZ3MgKi8KLQllbHNlCi0JCWVmbGFncyA9IEVYRUNfRkxBR19FWFBM QUlOX09OTFk7Ci0JaWYgKGludG8pCi0JCWVmbGFncyB8PSBHZXRJbnRvUmVsRUZsYWdzKGludG8p OwotCi0JLyogY2FsbCBFeGVjdXRvclN0YXJ0IHRvIHByZXBhcmUgdGhlIHBsYW4gZm9yIGV4ZWN1 dGlvbiAqLwotCUV4ZWN1dG9yU3RhcnQocXVlcnlEZXNjLCBlZmxhZ3MpOwotCiAJLyogRXhlY3V0 ZSB0aGUgcGxhbiBmb3Igc3RhdGlzdGljcyBpZiBhc2tlZCBmb3IgKi8KIAlpZiAoZXMtPmFuYWx5 emUpCiAJewpAQCAtNjU4LDggKzY5Nyw2IEBAIEV4cGxhaW5PbmVQbGFuKFBsYW5uZWRTdG10ICpw bGFubmVkc3RtdCwgSW50b0NsYXVzZSAqaW50bywgRXhwbGFpblN0YXRlICplcywKIAogCUZyZWVR dWVyeURlc2MocXVlcnlEZXNjKTsKIAotCVBvcEFjdGl2ZVNuYXBzaG90KCk7Ci0KIAkvKiBXZSBu ZWVkIGEgQ0NJIGp1c3QgaW4gY2FzZSBxdWVyeSBleHBhbmRlZCB0byBtdWx0aXBsZSBwbGFucyAq LwogCWlmIChlcy0+YW5hbHl6ZSkKIAkJQ29tbWFuZENvdW50ZXJJbmNyZW1lbnQoKTsKQEAgLTQ4 NTQsNiArNDg5MSwxNyBAQCBFeHBsYWluRHVtbXlHcm91cChjb25zdCBjaGFyICpvYmp0eXBlLCBj b25zdCBjaGFyICpsYWJlbG5hbWUsIEV4cGxhaW5TdGF0ZSAqZXMpCiAJfQogfQogCisvKgorICog RGlzY2FyZCBvdXRwdXQgYnVmZmVyIGZvciBhIGZyZXNoIHJlc3RhcnQuCisgKi8KK3ZvaWQKK0V4 cGxhaW5SZXNldE91dHB1dChFeHBsYWluU3RhdGUgKmVzKQoreworCUFzc2VydChlcy0+c3RyKTsK KwlyZXNldFN0cmluZ0luZm8oZXMtPnN0cik7CisJRXhwbGFpbkJlZ2luT3V0cHV0KGVzKTsKK30K KwogLyoKICAqIEVtaXQgdGhlIHN0YXJ0LW9mLW91dHB1dCBib2lsZXJwbGF0ZS4KICAqCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHRlbnNpb24uYyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2V4dGVuc2lvbi5jCmluZGV4IGIxNTA5Y2M1MDUuLjE0OTNiOTliZWIgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4dGVuc2lvbi5jCisrKyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2V4dGVuc2lvbi5jCkBAIC03ODAsMTEgKzc4MCwxMiBAQCBleGVjdXRlX3NxbF9zdHJp bmcoY29uc3QgY2hhciAqc3FsKQogCQkJCVF1ZXJ5RGVzYyAgKnFkZXNjOwogCiAJCQkJcWRlc2Mg PSBDcmVhdGVRdWVyeURlc2Moc3RtdCwKKwkJCQkJCQkJCQlOVUxMLAogCQkJCQkJCQkJCXNxbCwK IAkJCQkJCQkJCQlHZXRBY3RpdmVTbmFwc2hvdCgpLCBOVUxMLAogCQkJCQkJCQkJCWRlc3QsIE5V TEwsIE5VTEwsIDApOwogCi0JCQkJRXhlY3V0b3JTdGFydChxZGVzYywgMCk7CisJCQkJRXhlY3V0 b3JTdGFydChxZGVzYywgMCwgTlVMTCk7CiAJCQkJRXhlY3V0b3JSdW4ocWRlc2MsIEZvcndhcmRT Y2FuRGlyZWN0aW9uLCAwLCB0cnVlKTsKIAkJCQlFeGVjdXRvckZpbmlzaChxZGVzYyk7CiAJCQkJ RXhlY3V0b3JFbmQocWRlc2MpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0 dmlldy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0dmlldy5jCmluZGV4IGZiMzBkMjU5NWMu LmUxM2IzNDRiYTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21hdHZpZXcuYwor KysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9tYXR2aWV3LmMKQEAgLTQwOSwxMiArNDA5LDEyIEBA IHJlZnJlc2hfbWF0dmlld19kYXRhZmlsbChEZXN0UmVjZWl2ZXIgKmRlc3QsIFF1ZXJ5ICpxdWVy eSwKIAlVcGRhdGVBY3RpdmVTbmFwc2hvdENvbW1hbmRJZCgpOwogCiAJLyogQ3JlYXRlIGEgUXVl cnlEZXNjLCByZWRpcmVjdGluZyBvdXRwdXQgdG8gb3VyIHR1cGxlIHJlY2VpdmVyICovCi0JcXVl cnlEZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHBsYW4sIHF1ZXJ5U3RyaW5nLAorCXF1ZXJ5RGVzYyA9 IENyZWF0ZVF1ZXJ5RGVzYyhwbGFuLCBOVUxMLCBxdWVyeVN0cmluZywKIAkJCQkJCQkJR2V0QWN0 aXZlU25hcHNob3QoKSwgSW52YWxpZFNuYXBzaG90LAogCQkJCQkJCQlkZXN0LCBOVUxMLCBOVUxM LCAwKTsKIAogCS8qIGNhbGwgRXhlY3V0b3JTdGFydCB0byBwcmVwYXJlIHRoZSBwbGFuIGZvciBl eGVjdXRpb24gKi8KLQlFeGVjdXRvclN0YXJ0KHF1ZXJ5RGVzYywgMCk7CisJRXhlY3V0b3JTdGFy dChxdWVyeURlc2MsIDAsIE5VTEwpOwogCiAJLyogcnVuIHRoZSBwbGFuICovCiAJRXhlY3V0b3JS dW4ocXVlcnlEZXNjLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgMEwsIHRydWUpOwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcG9ydGFsY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFu ZHMvcG9ydGFsY21kcy5jCmluZGV4IDhhM2NmOThjY2UuLjlmZDI3YmYwN2EgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL3BvcnRhbGNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9wb3J0YWxjbWRzLmMKQEAgLTE0Myw3ICsxNDMsNyBAQCBQZXJmb3JtQ3Vyc29yT3BlbihQ YXJzZVN0YXRlICpwc3RhdGUsIERlY2xhcmVDdXJzb3JTdG10ICpjc3RtdCwgUGFyYW1MaXN0SW5m byBwYQogCS8qCiAJICogU3RhcnQgZXhlY3V0aW9uLCBpbnNlcnRpbmcgcGFyYW1ldGVycyBpZiBh bnkuCiAJICovCi0JUG9ydGFsU3RhcnQocG9ydGFsLCBwYXJhbXMsIDAsIEdldEFjdGl2ZVNuYXBz aG90KCkpOworCVBvcnRhbFN0YXJ0KHBvcnRhbCwgcGFyYW1zLCAwLCBHZXRBY3RpdmVTbmFwc2hv dCgpLCBOVUxMKTsKIAogCUFzc2VydChwb3J0YWwtPnN0cmF0ZWd5ID09IFBPUlRBTF9PTkVfU0VM RUNUKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHJlcGFyZS5jIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvcHJlcGFyZS5jCmluZGV4IDE4ZjcwMzE5ZmMuLmMxZmExYjcyYmUg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ByZXBhcmUuYworKysgYi9zcmMvYmFj a2VuZC9jb21tYW5kcy9wcmVwYXJlLmMKQEAgLTE1NSw2ICsxNTUsNyBAQCBFeGVjdXRlUXVlcnko UGFyc2VTdGF0ZSAqcHN0YXRlLAogCVByZXBhcmVkU3RhdGVtZW50ICplbnRyeTsKIAlDYWNoZWRQ bGFuICpjcGxhbjsKIAlMaXN0CSAgICpwbGFuX2xpc3Q7CisJYm9vbAkJcmVwbGFuOwogCVBhcmFt TGlzdEluZm8gcGFyYW1MSSA9IE5VTEw7CiAJRVN0YXRlCSAgICplc3RhdGUgPSBOVUxMOwogCVBv cnRhbAkJcG9ydGFsOwpAQCAtMTkzLDYgKzE5NCw3IEBAIEV4ZWN1dGVRdWVyeShQYXJzZVN0YXRl ICpwc3RhdGUsCiAJCQkJCQkJCQkgICBlbnRyeS0+cGxhbnNvdXJjZS0+cXVlcnlfc3RyaW5nKTsK IAogCS8qIFJlcGxhbiBpZiBuZWVkZWQsIGFuZCBpbmNyZW1lbnQgcGxhbiByZWZjb3VudCBmb3Ig cG9ydGFsICovCityZXBsYW46CiAJY3BsYW4gPSBHZXRDYWNoZWRQbGFuKGVudHJ5LT5wbGFuc291 cmNlLCBwYXJhbUxJLCBOVUxMLCBOVUxMKTsKIAlwbGFuX2xpc3QgPSBjcGxhbi0+c3RtdF9saXN0 OwogCkBAIC0yNTEsOSArMjUzLDE2IEBAIEV4ZWN1dGVRdWVyeShQYXJzZVN0YXRlICpwc3RhdGUs CiAJfQogCiAJLyoKLQkgKiBSdW4gdGhlIHBvcnRhbCBhcyBhcHByb3ByaWF0ZS4KKwkgKiBSdW4g dGhlIHBvcnRhbCBhcyBhcHByb3ByaWF0ZS4gIElmIHRoZSBwb3J0YWwgY29udGFpbnMgYSBjYWNo ZWQgcGxhbiwKKwkgKiBpdCBtdXN0IGJlIHJlY3JlYXRlZCBpZiAqcmVwbGFuIGlzIHNldC4KIAkg Ki8KLQlQb3J0YWxTdGFydChwb3J0YWwsIHBhcmFtTEksIGVmbGFncywgR2V0QWN0aXZlU25hcHNo b3QoKSk7CisJUG9ydGFsU3RhcnQocG9ydGFsLCBwYXJhbUxJLCBlZmxhZ3MsIEdldEFjdGl2ZVNu YXBzaG90KCksICZyZXBsYW4pOworCisJaWYgKHJlcGxhbikKKwl7CisJCU1hcmtQb3J0YWxGYWls ZWQocG9ydGFsKTsKKwkJZ290byByZXBsYW47CisJfQogCiAJKHZvaWQpIFBvcnRhbFJ1bihwb3J0 YWwsIGNvdW50LCBmYWxzZSwgdHJ1ZSwgZGVzdCwgZGVzdCwgcWMpOwogCkBAIC01NzQsNyArNTgz LDcgQEAgRXhwbGFpbkV4ZWN1dGVRdWVyeShFeGVjdXRlU3RtdCAqZXhlY3N0bXQsIEludG9DbGF1 c2UgKmludG8sIEV4cGxhaW5TdGF0ZSAqZXMsCiB7CiAJUHJlcGFyZWRTdGF0ZW1lbnQgKmVudHJ5 OwogCWNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZzsKLQlDYWNoZWRQbGFuICpjcGxhbjsKKwlDYWNo ZWRQbGFuICpjcGxhbiA9IE5VTEw7CiAJTGlzdAkgICAqcGxhbl9saXN0OwogCUxpc3RDZWxsICAg KnA7CiAJUGFyYW1MaXN0SW5mbyBwYXJhbUxJID0gTlVMTDsKQEAgLTU4Myw2ICs1OTIsNyBAQCBF eHBsYWluRXhlY3V0ZVF1ZXJ5KEV4ZWN1dGVTdG10ICpleGVjc3RtdCwgSW50b0NsYXVzZSAqaW50 bywgRXhwbGFpblN0YXRlICplcywKIAlpbnN0cl90aW1lCXBsYW5kdXJhdGlvbjsKIAlCdWZmZXJV c2FnZSBidWZ1c2FnZV9zdGFydCwKIAkJCQlidWZ1c2FnZTsKKwlib29sCQlyZXBsYW4gPSB0cnVl OwogCiAJaWYgKGVzLT5idWZmZXJzKQogCQlidWZ1c2FnZV9zdGFydCA9IHBnQnVmZmVyVXNhZ2U7 CkBAIC02MTgsMzggKzYyOCw1NyBAQCBFeHBsYWluRXhlY3V0ZVF1ZXJ5KEV4ZWN1dGVTdG10ICpl eGVjc3RtdCwgSW50b0NsYXVzZSAqaW50bywgRXhwbGFpblN0YXRlICplcywKIAl9CiAKIAkvKiBS ZXBsYW4gaWYgbmVlZGVkLCBhbmQgYWNxdWlyZSBhIHRyYW5zaWVudCByZWZjb3VudCAqLwotCWNw bGFuID0gR2V0Q2FjaGVkUGxhbihlbnRyeS0+cGxhbnNvdXJjZSwgcGFyYW1MSSwKLQkJCQkJCSAg Q3VycmVudFJlc291cmNlT3duZXIsIHF1ZXJ5RW52KTsKKwl3aGlsZSAocmVwbGFuKQorCXsKKwkJ Y3BsYW4gPSBHZXRDYWNoZWRQbGFuKGVudHJ5LT5wbGFuc291cmNlLCBwYXJhbUxJLAorCQkJCQkJ CSAgQ3VycmVudFJlc291cmNlT3duZXIsIHF1ZXJ5RW52KTsKIAotCUlOU1RSX1RJTUVfU0VUX0NV UlJFTlQocGxhbmR1cmF0aW9uKTsKLQlJTlNUUl9USU1FX1NVQlRSQUNUKHBsYW5kdXJhdGlvbiwg cGxhbnN0YXJ0KTsKKwkJSU5TVFJfVElNRV9TRVRfQ1VSUkVOVChwbGFuZHVyYXRpb24pOworCQlJ TlNUUl9USU1FX1NVQlRSQUNUKHBsYW5kdXJhdGlvbiwgcGxhbnN0YXJ0KTsKIAotCS8qIGNhbGMg ZGlmZmVyZW5jZXMgb2YgYnVmZmVyIGNvdW50ZXJzLiAqLwotCWlmIChlcy0+YnVmZmVycykKLQl7 Ci0JCW1lbXNldCgmYnVmdXNhZ2UsIDAsIHNpemVvZihCdWZmZXJVc2FnZSkpOwotCQlCdWZmZXJV c2FnZUFjY3VtRGlmZigmYnVmdXNhZ2UsICZwZ0J1ZmZlclVzYWdlLCAmYnVmdXNhZ2Vfc3RhcnQp OwotCX0KKwkJLyogY2FsYyBkaWZmZXJlbmNlcyBvZiBidWZmZXIgY291bnRlcnMuICovCisJCWlm IChlcy0+YnVmZmVycykKKwkJeworCQkJbWVtc2V0KCZidWZ1c2FnZSwgMCwgc2l6ZW9mKEJ1ZmZl clVzYWdlKSk7CisJCQlCdWZmZXJVc2FnZUFjY3VtRGlmZigmYnVmdXNhZ2UsICZwZ0J1ZmZlclVz YWdlLCAmYnVmdXNhZ2Vfc3RhcnQpOworCQl9CiAKLQlwbGFuX2xpc3QgPSBjcGxhbi0+c3RtdF9s aXN0OworCQlwbGFuX2xpc3QgPSBjcGxhbi0+c3RtdF9saXN0OwogCi0JLyogRXhwbGFpbiBlYWNo IHF1ZXJ5ICovCi0JZm9yZWFjaChwLCBwbGFuX2xpc3QpCi0JewotCQlQbGFubmVkU3RtdCAqcHN0 bXQgPSBsZmlyc3Rfbm9kZShQbGFubmVkU3RtdCwgcCk7CisJCS8qIEV4cGxhaW4gZWFjaCBxdWVy eSAqLworCQlmb3JlYWNoKHAsIHBsYW5fbGlzdCkKKwkJeworCQkJUGxhbm5lZFN0bXQgKnBzdG10 ID0gbGZpcnN0X25vZGUoUGxhbm5lZFN0bXQsIHApOwogCi0JCWlmIChwc3RtdC0+Y29tbWFuZFR5 cGUgIT0gQ01EX1VUSUxJVFkpCi0JCQlFeHBsYWluT25lUGxhbihwc3RtdCwgaW50bywgZXMsIHF1 ZXJ5X3N0cmluZywgcGFyYW1MSSwgcXVlcnlFbnYsCi0JCQkJCQkgICAmcGxhbmR1cmF0aW9uLCAo ZXMtPmJ1ZmZlcnMgPyAmYnVmdXNhZ2UgOiBOVUxMKSk7Ci0JCWVsc2UKLQkJCUV4cGxhaW5PbmVV dGlsaXR5KHBzdG10LT51dGlsaXR5U3RtdCwgaW50bywgZXMsIHF1ZXJ5X3N0cmluZywKLQkJCQkJ CQkgIHBhcmFtTEksIHF1ZXJ5RW52KTsKKwkJCWlmIChwc3RtdC0+Y29tbWFuZFR5cGUgIT0gQ01E X1VUSUxJVFkpCisJCQl7CisJCQkJUXVlcnlEZXNjICpxdWVyeURlc2M7CisKKwkJCQlxdWVyeURl c2MgPSBFeHBsYWluUXVlcnlEZXNjKHBzdG10LCBjcGxhbiwgcXVlcnlTdHJpbmcsCisJCQkJCQkJ CQkJCSBpbnRvLCBlcywgcGFyYW1MSSwgcXVlcnlFbnYsCisJCQkJCQkJCQkJCSAmcmVwbGFuKTsK KwkJCQlpZiAocmVwbGFuKQorCQkJCXsKKwkJCQkJRXhwbGFpblJlc2V0T3V0cHV0KGVzKTsKKwkJ CQkJYnJlYWs7CisJCQkJfQorCQkJCUV4cGxhaW5PbmVQbGFuKHF1ZXJ5RGVzYywgaW50bywgZXMs IHF1ZXJ5X3N0cmluZywgcGFyYW1MSSwKKwkJCQkJCQkgICBxdWVyeUVudiwgJnBsYW5kdXJhdGlv biwKKwkJCQkJCQkgICAoZXMtPmJ1ZmZlcnMgPyAmYnVmdXNhZ2UgOiBOVUxMKSk7CisKKwkJCQkv KiBPbmUgcHVzaGVkIGJ5IEV4cGxhaW5RdWVyeURlc2MoKS4gKi8KKwkJCQlQb3BBY3RpdmVTbmFw c2hvdCgpOworCQkJfQorCQkJZWxzZQorCQkJCUV4cGxhaW5PbmVVdGlsaXR5KHBzdG10LT51dGls aXR5U3RtdCwgaW50bywgZXMsIHF1ZXJ5X3N0cmluZywKKwkJCQkJCQkJICBwYXJhbUxJLCBxdWVy eUVudik7CiAKLQkJLyogTm8gbmVlZCBmb3IgQ29tbWFuZENvdW50ZXJJbmNyZW1lbnQsIGFzIEV4 cGxhaW5PbmVQbGFuIGRpZCBpdCAqLworCQkJLyogTm8gbmVlZCBmb3IgQ29tbWFuZENvdW50ZXJJ bmNyZW1lbnQsIGFzIEV4cGxhaW5PbmVQbGFuIGRpZCBpdCAqLwogCi0JCS8qIFNlcGFyYXRlIHBs YW5zIHdpdGggYW4gYXBwcm9wcmlhdGUgc2VwYXJhdG9yICovCi0JCWlmIChsbmV4dChwbGFuX2xp c3QsIHApICE9IE5VTEwpCi0JCQlFeHBsYWluU2VwYXJhdGVQbGFucyhlcyk7CisJCQkvKiBTZXBh cmF0ZSBwbGFucyB3aXRoIGFuIGFwcHJvcHJpYXRlIHNlcGFyYXRvciAqLworCQkJaWYgKGxuZXh0 KHBsYW5fbGlzdCwgcCkgIT0gTlVMTCkKKwkJCQlFeHBsYWluU2VwYXJhdGVQbGFucyhlcyk7CisJ CX0KIAl9CiAKIAlpZiAoZXN0YXRlKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY01haW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMKaW5kZXggYTUxMTVi OWMxZi4uNDVjOTk5YmNkYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01h aW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jCkBAIC0xMTksNiArMTE5 LDExIEBAIHN0YXRpYyB2b2lkIEV2YWxQbGFuUXVhbFN0YXJ0KEVQUVN0YXRlICplcHFzdGF0ZSwg UGxhbiAqcGxhblRyZWUpOwogICoKICAqIGVmbGFncyBjb250YWlucyBmbGFnIGJpdHMgYXMgZGVz Y3JpYmVkIGluIGV4ZWN1dG9yLmguCiAgKgorICogcmVwbGFuIG11c3QgYmUgbm9uLU5VTEwgd2hl biBleGVjdXRpbmcgYSBjYWNoZWQgcXVlcnkgcGxhbi4gIE9uIHJldHVybiwKKyAqICpyZXBsYW4g aXMgc2V0IGlmIHF1ZXJ5RGVzYy0+Y3BsYW4gaXMgZm91bmQgdG8gaGF2ZSBiZWVuIGludmFsaWRh dGVkLiAgSW4KKyAqIHRoYXQgY2FzZSwgY2FsbGVycyBtdXN0IHJlY3JlYXRlIHRoZSBDYWNoZWRQ bGFuIGJlZm9yZSByZXRyeWluZyB0aGUKKyAqIGV4ZWN1dGlvbi4KKyAqCiAgKiBOQjogdGhlIEN1 cnJlbnRNZW1vcnlDb250ZXh0IHdoZW4gdGhpcyBpcyBjYWxsZWQgd2lsbCBiZWNvbWUgdGhlIHBh cmVudAogICogb2YgdGhlIHBlci1xdWVyeSBjb250ZXh0IHVzZWQgZm9yIHRoaXMgRXhlY3V0b3Ig aW52b2NhdGlvbi4KICAqCkBAIC0xMjksOCArMTM0LDEwIEBAIHN0YXRpYyB2b2lkIEV2YWxQbGFu UXVhbFN0YXJ0KEVQUVN0YXRlICplcHFzdGF0ZSwgUGxhbiAqcGxhblRyZWUpOwogICogLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQogICovCiB2b2lkCi1FeGVjdXRvclN0YXJ0KFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZs YWdzKQorRXhlY3V0b3JTdGFydChRdWVyeURlc2MgKnF1ZXJ5RGVzYywgaW50IGVmbGFncywgYm9v bCAqcmVwbGFuKQogeworCUFzc2VydChyZXBsYW4gIT0gTlVMTCB8fCBxdWVyeURlc2MtPmNwbGFu ID09IE5VTEwpOworCiAJLyoKIAkgKiBJbiBzb21lIGNhc2VzIChlLmcuIGFuIEVYRUNVVEUgc3Rh dGVtZW50KSBhIHF1ZXJ5IGV4ZWN1dGlvbiB3aWxsIHNraXAKIAkgKiBwYXJzZSBhbmFseXNpcywg d2hpY2ggbWVhbnMgdGhhdCB0aGUgcXVlcnlfaWQgd29uJ3QgYmUgcmVwb3J0ZWQuICBOb3RlCkBA IC0xNDAsMTMgKzE0NywxMyBAQCBFeGVjdXRvclN0YXJ0KFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBp bnQgZWZsYWdzKQogCXBnc3RhdF9yZXBvcnRfcXVlcnlfaWQocXVlcnlEZXNjLT5wbGFubmVkc3Rt dC0+cXVlcnlJZCwgZmFsc2UpOwogCiAJaWYgKEV4ZWN1dG9yU3RhcnRfaG9vaykKLQkJKCpFeGVj dXRvclN0YXJ0X2hvb2spIChxdWVyeURlc2MsIGVmbGFncyk7CisJCSgqRXhlY3V0b3JTdGFydF9o b29rKSAocXVlcnlEZXNjLCBlZmxhZ3MsIHJlcGxhbik7CiAJZWxzZQotCQlzdGFuZGFyZF9FeGVj dXRvclN0YXJ0KHF1ZXJ5RGVzYywgZWZsYWdzKTsKKwkJc3RhbmRhcmRfRXhlY3V0b3JTdGFydChx dWVyeURlc2MsIGVmbGFncywgcmVwbGFuKTsKIH0KIAogdm9pZAotc3RhbmRhcmRfRXhlY3V0b3JT dGFydChRdWVyeURlc2MgKnF1ZXJ5RGVzYywgaW50IGVmbGFncykKK3N0YW5kYXJkX0V4ZWN1dG9y U3RhcnQoUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxhZ3MsIGJvb2wgKnJlcGxhbikKIHsK IAlFU3RhdGUJICAgKmVzdGF0ZTsKIAlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CkBAIC0yNzk3 LDcgKzI4MDQsOCBAQCBFdmFsUGxhblF1YWxTdGFydChFUFFTdGF0ZSAqZXBxc3RhdGUsIFBsYW4g KnBsYW5UcmVlKQogCSAqIENoaWxkIEVQUSBFU3RhdGVzIHNoYXJlIHRoZSBwYXJlbnQncyBjb3B5 IG9mIHVuY2hhbmdpbmcgc3RhdGUgc3VjaCBhcwogCSAqIHRoZSBzbmFwc2hvdCwgcmFuZ2V0YWJs ZSwgYW5kIGV4dGVybmFsIFBhcmFtIGluZm8uICBUaGV5IG5lZWQgdGhlaXIgb3duCiAJICogY29w aWVzIG9mIGxvY2FsIHN0YXRlLCBpbmNsdWRpbmcgYSB0dXBsZSB0YWJsZSwgZXNfcGFyYW1fZXhl Y192YWxzLAotCSAqIHJlc3VsdC1yZWwgaW5mbywgZXRjLgorCSAqIHJlc3VsdC1yZWwgaW5mbywg ZXRjLiAgQWxzbywgd2UgZG9uJ3QgcGFzcyB0aGUgcGFyZW50J3QgY29weSBvZiB0aGUKKwkgKiBD YWNoZWRQbGFuLCBiZWNhdXNlIG5vIG5ldyBsb2NrcyB3aWxsIGJlIHRha2VuIGZvciBFdmFsUGxh blF1YWwoKS4KIAkgKi8KIAlyY2VzdGF0ZS0+ZXNfZGlyZWN0aW9uID0gRm9yd2FyZFNjYW5EaXJl Y3Rpb247CiAJcmNlc3RhdGUtPmVzX3NuYXBzaG90ID0gcGFyZW50ZXN0YXRlLT5lc19zbmFwc2hv dDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jIGIvc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcmFsbGVsLmMKaW5kZXggYWEzZjI4MzQ1My4uNWY5N2Y1 MzUzZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcmFsbGVsLmMKKysr IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcmFsbGVsLmMKQEAgLTEyNDksOCArMTI0OSwx MyBAQCBFeGVjUGFyYWxsZWxHZXRRdWVyeURlc2Moc2htX3RvYyAqdG9jLCBEZXN0UmVjZWl2ZXIg KnJlY2VpdmVyLAogCXBhcmFtc3BhY2UgPSBzaG1fdG9jX2xvb2t1cCh0b2MsIFBBUkFMTEVMX0tF WV9QQVJBTUxJU1RJTkZPLCBmYWxzZSk7CiAJcGFyYW1MSSA9IFJlc3RvcmVQYXJhbUxpc3QoJnBh cmFtc3BhY2UpOwogCi0JLyogQ3JlYXRlIGEgUXVlcnlEZXNjIGZvciB0aGUgcXVlcnkuICovCisJ LyoKKwkgKiBDcmVhdGUgYSBRdWVyeURlc2MgZm9yIHRoZSBxdWVyeS4gIE5vdGUgdGhhdCBubyBD YWNoZWRQbGFuIGlzIGF2YWlsYWJsZQorCSAqIGhlcmUgZXZlbiBpZiB0aGUgY29udGFpbmluZyBw bGFuIHRyZWUgbWF5IGhhdmUgY29tZSBmcm9tIG9uZSBpbiB0aGUKKwkgKiBsZWFkZXIuCisJICov CiAJcmV0dXJuIENyZWF0ZVF1ZXJ5RGVzYyhwc3RtdCwKKwkJCQkJCSAgIE5VTEwsCiAJCQkJCQkg ICBxdWVyeVN0cmluZywKIAkJCQkJCSAgIEdldEFjdGl2ZVNuYXBzaG90KCksIEludmFsaWRTbmFw c2hvdCwKIAkJCQkJCSAgIHJlY2VpdmVyLCBwYXJhbUxJLCBOVUxMLCBpbnN0cnVtZW50X29wdGlv bnMpOwpAQCAtMTQzMSw3ICsxNDM2LDcgQEAgUGFyYWxsZWxRdWVyeU1haW4oZHNtX3NlZ21lbnQg KnNlZywgc2htX3RvYyAqdG9jKQogCiAJLyogU3RhcnQgdXAgdGhlIGV4ZWN1dG9yICovCiAJcXVl cnlEZXNjLT5wbGFubmVkc3RtdC0+aml0RmxhZ3MgPSBmcGVzLT5qaXRfZmxhZ3M7Ci0JRXhlY3V0 b3JTdGFydChxdWVyeURlc2MsIGZwZXMtPmVmbGFncyk7CisJRXhlY3V0b3JTdGFydChxdWVyeURl c2MsIGZwZXMtPmVmbGFncywgTlVMTCk7CiAKIAkvKiBTcGVjaWFsIGV4ZWN1dG9yIGluaXRpYWxp emF0aW9uIHN0ZXBzIGZvciBwYXJhbGxlbCB3b3JrZXJzICovCiAJcXVlcnlEZXNjLT5wbGFuc3Rh dGUtPnN0YXRlLT5lc19xdWVyeV9kc2EgPSBhcmVhOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZnVuY3Rpb25zLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9mdW5jdGlvbnMuYwpp bmRleCA1MGUwNmVjNjkzLi5kZjM3YmZiNGVkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVj dXRvci9mdW5jdGlvbnMuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9mdW5jdGlvbnMuYwpA QCAtODQzLDYgKzg0Myw3IEBAIHBvc3RxdWVsX3N0YXJ0KGV4ZWN1dGlvbl9zdGF0ZSAqZXMsIFNR TEZ1bmN0aW9uQ2FjaGVQdHIgZmNhY2hlKQogCQlkZXN0ID0gTm9uZV9SZWNlaXZlcjsKIAogCWVz LT5xZCA9IENyZWF0ZVF1ZXJ5RGVzYyhlcy0+c3RtdCwKKwkJCQkJCQkgTlVMTCwJLyogZm1ncl9z cWwoKSBkb2Vzbid0IHVzZSBDYWNoZWRQbGFucyAqLwogCQkJCQkJCSBmY2FjaGUtPnNyYywKIAkJ CQkJCQkgR2V0QWN0aXZlU25hcHNob3QoKSwKIAkJCQkJCQkgSW52YWxpZFNuYXBzaG90LApAQCAt ODY3LDcgKzg2OCw3IEBAIHBvc3RxdWVsX3N0YXJ0KGV4ZWN1dGlvbl9zdGF0ZSAqZXMsIFNRTEZ1 bmN0aW9uQ2FjaGVQdHIgZmNhY2hlKQogCQkJZWZsYWdzID0gRVhFQ19GTEFHX1NLSVBfVFJJR0dF UlM7CiAJCWVsc2UKIAkJCWVmbGFncyA9IDA7CQkJLyogZGVmYXVsdCBydW4tdG8tY29tcGxldGlv biBmbGFncyAqLwotCQlFeGVjdXRvclN0YXJ0KGVzLT5xZCwgZWZsYWdzKTsKKwkJRXhlY3V0b3JT dGFydChlcy0+cWQsIGVmbGFncywgTlVMTCk7CiAJfQogCiAJZXMtPnN0YXR1cyA9IEZfRVhFQ19S VU47CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9zcGkuYyBiL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL3NwaS5jCmluZGV4IDYxZjAzZTM5OTkuLjlhMzM5OGI1OTEgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL3NwaS5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL3Nw aS5jCkBAIC03MSw3ICs3MSw3IEBAIHN0YXRpYyBpbnQJX1NQSV9leGVjdXRlX3BsYW4oU1BJUGxh blB0ciBwbGFuLCBjb25zdCBTUElFeGVjdXRlT3B0aW9ucyAqb3B0aW9ucywKIHN0YXRpYyBQYXJh bUxpc3RJbmZvIF9TUElfY29udmVydF9wYXJhbXMoaW50IG5hcmdzLCBPaWQgKmFyZ3R5cGVzLAog CQkJCQkJCQkJCSBEYXR1bSAqVmFsdWVzLCBjb25zdCBjaGFyICpOdWxscyk7CiAKLXN0YXRpYyBp bnQJX1NQSV9wcXVlcnkoUXVlcnlEZXNjICpxdWVyeURlc2MsIGJvb2wgZmlyZV90cmlnZ2Vycywg dWludDY0IHRjb3VudCk7CitzdGF0aWMgaW50CV9TUElfcHF1ZXJ5KFF1ZXJ5RGVzYyAqcXVlcnlE ZXNjLCB1aW50NjQgdGNvdW50KTsKIAogc3RhdGljIHZvaWQgX1NQSV9lcnJvcl9jYWxsYmFjayh2 b2lkICphcmcpOwogCkBAIC0xNTc4LDYgKzE1NzgsNyBAQCBTUElfY3Vyc29yX29wZW5faW50ZXJu YWwoY29uc3QgY2hhciAqbmFtZSwgU1BJUGxhblB0ciBwbGFuLAogCUNhY2hlZFBsYW5Tb3VyY2Ug KnBsYW5zb3VyY2U7CiAJQ2FjaGVkUGxhbiAqY3BsYW47CiAJTGlzdAkgICAqc3RtdF9saXN0Owor CWJvb2wJCXJlcGxhbjsKIAljaGFyCSAgICpxdWVyeV9zdHJpbmc7CiAJU25hcHNob3QJc25hcHNo b3Q7CiAJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OwpAQCAtMTY1Nyw2ICsxNjU4LDcgQEAgU1BJ X2N1cnNvcl9vcGVuX2ludGVybmFsKGNvbnN0IGNoYXIgKm5hbWUsIFNQSVBsYW5QdHIgcGxhbiwK IAkgKi8KIAogCS8qIFJlcGxhbiBpZiBuZWVkZWQsIGFuZCBpbmNyZW1lbnQgcGxhbiByZWZjb3Vu dCBmb3IgcG9ydGFsICovCityZXBsYW46CiAJY3BsYW4gPSBHZXRDYWNoZWRQbGFuKHBsYW5zb3Vy Y2UsIHBhcmFtTEksIE5VTEwsIF9TUElfY3VycmVudC0+cXVlcnlFbnYpOwogCXN0bXRfbGlzdCA9 IGNwbGFuLT5zdG10X2xpc3Q7CiAKQEAgLTE3NjYsOSArMTc2OCwxNiBAQCBTUElfY3Vyc29yX29w ZW5faW50ZXJuYWwoY29uc3QgY2hhciAqbmFtZSwgU1BJUGxhblB0ciBwbGFuLAogCX0KIAogCS8q Ci0JICogU3RhcnQgcG9ydGFsIGV4ZWN1dGlvbi4KKwkgKiBTdGFydCBwb3J0YWwgZXhlY3V0aW9u LiAgSWYgdGhlIHBvcnRhbCBjb250YWlucyBhIGNhY2hlZCBwbGFuLCBpdCBtdXN0CisJICogYmUg cmVjcmVhdGVkIGlmICpyZXBsYW4gaXMgc2V0LgogCSAqLwotCVBvcnRhbFN0YXJ0KHBvcnRhbCwg cGFyYW1MSSwgMCwgc25hcHNob3QpOworCVBvcnRhbFN0YXJ0KHBvcnRhbCwgcGFyYW1MSSwgMCwg c25hcHNob3QsICZyZXBsYW4pOworCisJaWYgKHJlcGxhbikKKwl7CisJCU1hcmtQb3J0YWxGYWls ZWQocG9ydGFsKTsKKwkJZ290byByZXBsYW47CisJfQogCiAJQXNzZXJ0KHBvcnRhbC0+c3RyYXRl Z3kgIT0gUE9SVEFMX01VTFRJX1FVRVJZKTsKIApAQCAtMjU0OCw2ICsyNTU3LDcgQEAgX1NQSV9l eGVjdXRlX3BsYW4oU1BJUGxhblB0ciBwbGFuLCBjb25zdCBTUElFeGVjdXRlT3B0aW9ucyAqb3B0 aW9ucywKIAkJICogUmVwbGFuIGlmIG5lZWRlZCwgYW5kIGluY3JlbWVudCBwbGFuIHJlZmNvdW50 LiAgSWYgaXQncyBhIHNhdmVkCiAJCSAqIHBsYW4sIHRoZSByZWZjb3VudCBtdXN0IGJlIGJhY2tl ZCBieSB0aGUgcGxhbl9vd25lci4KIAkJICovCityZXBsYW46CiAJCWNwbGFuID0gR2V0Q2FjaGVk UGxhbihwbGFuc291cmNlLCBvcHRpb25zLT5wYXJhbXMsCiAJCQkJCQkJICBwbGFuX293bmVyLCBf U1BJX2N1cnJlbnQtPnF1ZXJ5RW52KTsKIApAQCAtMjY1Nyw2ICsyNjY3LDggQEAgX1NQSV9leGVj dXRlX3BsYW4oU1BJUGxhblB0ciBwbGFuLCBjb25zdCBTUElFeGVjdXRlT3B0aW9ucyAqb3B0aW9u cywKIAkJCXsKIAkJCQlRdWVyeURlc2MgICpxZGVzYzsKIAkJCQlTbmFwc2hvdAlzbmFwOworCQkJ CWludAkJCWVmbGFnczsKKwkJCQlib29sCQlyZXBsYW4gPSBmYWxzZTsKIAogCQkJCWlmIChBY3Rp dmVTbmFwc2hvdFNldCgpKQogCQkJCQlzbmFwID0gR2V0QWN0aXZlU25hcHNob3QoKTsKQEAgLTI2 NjQsMTQgKzI2NzYsMjggQEAgX1NQSV9leGVjdXRlX3BsYW4oU1BJUGxhblB0ciBwbGFuLCBjb25z dCBTUElFeGVjdXRlT3B0aW9ucyAqb3B0aW9ucywKIAkJCQkJc25hcCA9IEludmFsaWRTbmFwc2hv dDsKIAogCQkJCXFkZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHN0bXQsCisJCQkJCQkJCQkJY3BsYW4s CiAJCQkJCQkJCQkJcGxhbnNvdXJjZS0+cXVlcnlfc3RyaW5nLAogCQkJCQkJCQkJCXNuYXAsIGNy b3NzY2hlY2tfc25hcHNob3QsCiAJCQkJCQkJCQkJZGVzdCwKIAkJCQkJCQkJCQlvcHRpb25zLT5w YXJhbXMsCiAJCQkJCQkJCQkJX1NQSV9jdXJyZW50LT5xdWVyeUVudiwKIAkJCQkJCQkJCQkwKTsK LQkJCQlyZXMgPSBfU1BJX3BxdWVyeShxZGVzYywgZmlyZV90cmlnZ2VycywKLQkJCQkJCQkJICBj YW5TZXRUYWcgPyBvcHRpb25zLT50Y291bnQgOiAwKTsKKworCQkJCS8qIFNlbGVjdCBleGVjdXRp b24gb3B0aW9ucyAqLworCQkJCWlmIChmaXJlX3RyaWdnZXJzKQorCQkJCQllZmxhZ3MgPSAwOwkJ CQkvKiBkZWZhdWx0IHJ1bi10by1jb21wbGV0aW9uIGZsYWdzICovCisJCQkJZWxzZQorCQkJCQll ZmxhZ3MgPSBFWEVDX0ZMQUdfU0tJUF9UUklHR0VSUzsKKwkJCQlFeGVjdXRvclN0YXJ0KHFkZXNj LCBlZmxhZ3MsICZyZXBsYW4pOworCQkJCWlmIChyZXBsYW4pCisJCQkJeworCQkJCQlFeGVjdXRv ckVuZChxZGVzYyk7CisJCQkJCUZyZWVRdWVyeURlc2MocWRlc2MpOworCQkJCQlnb3RvIHJlcGxh bjsKKwkJCQl9CisKKwkJCQlyZXMgPSBfU1BJX3BxdWVyeShxZGVzYywgY2FuU2V0VGFnID8gb3B0 aW9ucy0+dGNvdW50IDogMCk7CiAJCQkJRnJlZVF1ZXJ5RGVzYyhxZGVzYyk7CiAJCQl9CiAJCQll bHNlCkBAIC0yODQ2LDEwICsyODcyLDkgQEAgX1NQSV9jb252ZXJ0X3BhcmFtcyhpbnQgbmFyZ3Ms IE9pZCAqYXJndHlwZXMsCiB9CiAKIHN0YXRpYyBpbnQKLV9TUElfcHF1ZXJ5KFF1ZXJ5RGVzYyAq cXVlcnlEZXNjLCBib29sIGZpcmVfdHJpZ2dlcnMsIHVpbnQ2NCB0Y291bnQpCitfU1BJX3BxdWVy eShRdWVyeURlc2MgKnF1ZXJ5RGVzYywgdWludDY0IHRjb3VudCkKIHsKIAlpbnQJCQlvcGVyYXRp b24gPSBxdWVyeURlc2MtPm9wZXJhdGlvbjsKLQlpbnQJCQllZmxhZ3M7CiAJaW50CQkJcmVzOwog CiAJc3dpdGNoIChvcGVyYXRpb24pCkBAIC0yODkzLDE0ICsyOTE4LDYgQEAgX1NQSV9wcXVlcnko UXVlcnlEZXNjICpxdWVyeURlc2MsIGJvb2wgZmlyZV90cmlnZ2VycywgdWludDY0IHRjb3VudCkK IAkJUmVzZXRVc2FnZSgpOwogI2VuZGlmCiAKLQkvKiBTZWxlY3QgZXhlY3V0aW9uIG9wdGlvbnMg Ki8KLQlpZiAoZmlyZV90cmlnZ2VycykKLQkJZWZsYWdzID0gMDsJCQkJLyogZGVmYXVsdCBydW4t dG8tY29tcGxldGlvbiBmbGFncyAqLwotCWVsc2UKLQkJZWZsYWdzID0gRVhFQ19GTEFHX1NLSVBf VFJJR0dFUlM7Ci0KLQlFeGVjdXRvclN0YXJ0KHF1ZXJ5RGVzYywgZWZsYWdzKTsKLQogCUV4ZWN1 dG9yUnVuKHF1ZXJ5RGVzYywgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHRjb3VudCwgdHJ1ZSk7CiAK IAlfU1BJX2N1cnJlbnQtPnByb2Nlc3NlZCA9IHF1ZXJ5RGVzYy0+ZXN0YXRlLT5lc19wcm9jZXNz ZWQ7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9NYWtlZmlsZSBiL3NyYy9iYWNrZW5k L25vZGVzL01ha2VmaWxlCmluZGV4IGFmMTJjNjQ4NzguLjdmYjBkMmQyMDIgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL25vZGVzL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL01ha2Vm aWxlCkBAIC01Miw2ICs1Miw3IEBAIG5vZGVfaGVhZGVycyA9IFwKIAlhY2Nlc3MvdHNtYXBpLmgg XAogCWNvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCBcCiAJY29tbWFuZHMvdHJpZ2dlci5oIFwKKwll eGVjdXRvci9leGVjZGVzYy5oIFwKIAlleGVjdXRvci90dXB0YWJsZS5oIFwKIAlmb3JlaWduL2Zk d2FwaS5oIFwKIAlub2Rlcy9iaXRtYXBzZXQuaCBcCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9u b2Rlcy9nZW5fbm9kZV9zdXBwb3J0LnBsIGIvc3JjL2JhY2tlbmQvbm9kZXMvZ2VuX25vZGVfc3Vw cG9ydC5wbAppbmRleCBiM2MxZWFkNDk2Li43NGY4M2YxMmE2IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9ub2Rlcy9nZW5fbm9kZV9zdXBwb3J0LnBsCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL2dl bl9ub2RlX3N1cHBvcnQucGwKQEAgLTYzLDYgKzYzLDcgQEAgbXkgQGFsbF9pbnB1dF9maWxlcyA9 IHF3KAogICBhY2Nlc3MvdHNtYXBpLmgKICAgY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oCiAgIGNv bW1hbmRzL3RyaWdnZXIuaAorICBleGVjdXRvci9leGVjZGVzYy5oCiAgIGV4ZWN1dG9yL3R1cHRh YmxlLmgKICAgZm9yZWlnbi9mZHdhcGkuaAogICBub2Rlcy9iaXRtYXBzZXQuaApAQCAtODcsNiAr ODgsNyBAQCBteSBAbm9kZXRhZ19vbmx5X2ZpbGVzID0gcXcoCiAgIGFjY2Vzcy90c21hcGkuaAog ICBjb21tYW5kcy9ldmVudF90cmlnZ2VyLmgKICAgY29tbWFuZHMvdHJpZ2dlci5oCisgIGV4ZWN1 dG9yL2V4ZWNkZXNjLmgKICAgZXhlY3V0b3IvdHVwdGFibGUuaAogICBmb3JlaWduL2Zkd2FwaS5o CiAgIG5vZGVzL2xvY2tvcHRpb25zLmgKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Rjb3AvcG9z dGdyZXMuYyBiL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYwppbmRleCA0NzBiNzM0ZTllLi4x NjE3YjkzZWNjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKKysrIGIv c3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCkBAIC0xMTk1LDcgKzExOTUsNyBAQCBleGVjX3Np bXBsZV9xdWVyeShjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcpCiAJCS8qCiAJCSAqIFN0YXJ0IHRo ZSBwb3J0YWwuICBObyBwYXJhbWV0ZXJzIGhlcmUuCiAJCSAqLwotCQlQb3J0YWxTdGFydChwb3J0 YWwsIE5VTEwsIDAsIEludmFsaWRTbmFwc2hvdCk7CisJCVBvcnRhbFN0YXJ0KHBvcnRhbCwgTlVM TCwgMCwgSW52YWxpZFNuYXBzaG90LCBOVUxMKTsKIAogCQkvKgogCQkgKiBTZWxlY3QgdGhlIGFw cHJvcHJpYXRlIG91dHB1dCBmb3JtYXQ6IHRleHQgdW5sZXNzIHdlIGFyZSBkb2luZyBhCkBAIC0x NTk3LDYgKzE1OTcsNyBAQCBleGVjX2JpbmRfbWVzc2FnZShTdHJpbmdJbmZvIGlucHV0X21lc3Nh Z2UpCiAJaW50MTYJICAgKnJmb3JtYXRzID0gTlVMTDsKIAlDYWNoZWRQbGFuU291cmNlICpwc3Jj OwogCUNhY2hlZFBsYW4gKmNwbGFuOworCWJvb2wJCXJlcGxhbjsKIAlQb3J0YWwJCXBvcnRhbDsK IAljaGFyCSAgICpxdWVyeV9zdHJpbmc7CiAJY2hhcgkgICAqc2F2ZWRfc3RtdF9uYW1lOwpAQCAt MTk3MSw2ICsxOTcyLDcgQEAgZXhlY19iaW5kX21lc3NhZ2UoU3RyaW5nSW5mbyBpbnB1dF9tZXNz YWdlKQogCSAqIHdpbGwgYmUgZ2VuZXJhdGVkIGluIE1lc3NhZ2VDb250ZXh0LiAgVGhlIHBsYW4g cmVmY291bnQgd2lsbCBiZQogCSAqIGFzc2lnbmVkIHRvIHRoZSBQb3J0YWwsIHNvIGl0IHdpbGwg YmUgcmVsZWFzZWQgYXQgcG9ydGFsIGRlc3RydWN0aW9uLgogCSAqLworcmVwbGFuOgogCWNwbGFu ID0gR2V0Q2FjaGVkUGxhbihwc3JjLCBwYXJhbXMsIE5VTEwsIE5VTEwpOwogCiAJLyoKQEAgLTE5 OTMsNyArMTk5NSwxMyBAQCBleGVjX2JpbmRfbWVzc2FnZShTdHJpbmdJbmZvIGlucHV0X21lc3Nh Z2UpCiAJLyoKIAkgKiBBbmQgd2UncmUgcmVhZHkgdG8gc3RhcnQgcG9ydGFsIGV4ZWN1dGlvbi4K IAkgKi8KLQlQb3J0YWxTdGFydChwb3J0YWwsIHBhcmFtcywgMCwgSW52YWxpZFNuYXBzaG90KTsK KwlQb3J0YWxTdGFydChwb3J0YWwsIHBhcmFtcywgMCwgSW52YWxpZFNuYXBzaG90LCAmcmVwbGFu KTsKKworCWlmIChyZXBsYW4pCisJeworCQlNYXJrUG9ydGFsRmFpbGVkKHBvcnRhbCk7CisJCWdv dG8gcmVwbGFuOworCX0KIAogCS8qCiAJICogQXBwbHkgdGhlIHJlc3VsdCBmb3JtYXQgcmVxdWVz dHMgdG8gdGhlIHBvcnRhbC4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Rjb3AvcHF1ZXJ5LmMg Yi9zcmMvYmFja2VuZC90Y29wL3BxdWVyeS5jCmluZGV4IDVmMDI0OGFjYzUuLjk3ZGU1YzUzZTMg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3AvcHF1ZXJ5LmMKKysrIGIvc3JjL2JhY2tlbmQv dGNvcC9wcXVlcnkuYwpAQCAtMTksNiArMTksNyBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL3hhY3Qu aCIKICNpbmNsdWRlICJjb21tYW5kcy9wcmVwYXJlLmgiCisjaW5jbHVkZSAiZXhlY3V0b3IvZXhl Y2Rlc2MuaCIKICNpbmNsdWRlICJleGVjdXRvci90c3RvcmVSZWNlaXZlci5oIgogI2luY2x1ZGUg Im1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnX3RyYWNlLmgiCkBAIC0zNSwxMiArMzYsNiBAQAog UG9ydGFsCQlBY3RpdmVQb3J0YWwgPSBOVUxMOwogCiAKLXN0YXRpYyB2b2lkIFByb2Nlc3NRdWVy eShQbGFubmVkU3RtdCAqcGxhbiwKLQkJCQkJCSBjb25zdCBjaGFyICpzb3VyY2VUZXh0LAotCQkJ CQkJIFBhcmFtTGlzdEluZm8gcGFyYW1zLAotCQkJCQkJIFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5 RW52LAotCQkJCQkJIERlc3RSZWNlaXZlciAqZGVzdCwKLQkJCQkJCSBRdWVyeUNvbXBsZXRpb24g KnFjKTsKIHN0YXRpYyB2b2lkIEZpbGxQb3J0YWxTdG9yZShQb3J0YWwgcG9ydGFsLCBib29sIGlz VG9wTGV2ZWwpOwogc3RhdGljIHVpbnQ2NCBSdW5Gcm9tU3RvcmUoUG9ydGFsIHBvcnRhbCwgU2Nh bkRpcmVjdGlvbiBkaXJlY3Rpb24sIHVpbnQ2NCBjb3VudCwKIAkJCQkJCSAgIERlc3RSZWNlaXZl ciAqZGVzdCk7CkBAIC02NSw2ICs2MCw3IEBAIHN0YXRpYyB2b2lkIERvUG9ydGFsUmV3aW5kKFBv cnRhbCBwb3J0YWwpOwogICovCiBRdWVyeURlc2MgKgogQ3JlYXRlUXVlcnlEZXNjKFBsYW5uZWRT dG10ICpwbGFubmVkc3RtdCwKKwkJCQlDYWNoZWRQbGFuICpjcGxhbiwKIAkJCQljb25zdCBjaGFy ICpzb3VyY2VUZXh0LAogCQkJCVNuYXBzaG90IHNuYXBzaG90LAogCQkJCVNuYXBzaG90IGNyb3Nz Y2hlY2tfc25hcHNob3QsCkBAIC03NSw4ICs3MSwxMCBAQCBDcmVhdGVRdWVyeURlc2MoUGxhbm5l ZFN0bXQgKnBsYW5uZWRzdG10LAogewogCVF1ZXJ5RGVzYyAgKnFkID0gKFF1ZXJ5RGVzYyAqKSBw YWxsb2Moc2l6ZW9mKFF1ZXJ5RGVzYykpOwogCisJcWQtPnR5cGUgPSBUX1F1ZXJ5RGVzYzsKIAlx ZC0+b3BlcmF0aW9uID0gcGxhbm5lZHN0bXQtPmNvbW1hbmRUeXBlOwkvKiBvcGVyYXRpb24gKi8K IAlxZC0+cGxhbm5lZHN0bXQgPSBwbGFubmVkc3RtdDsJLyogcGxhbiAqLworCXFkLT5jcGxhbiA9 IGNwbGFuOwkJCQkvKiBDYWNoZWRQbGFuLCBpZiBwbGFuIGlzIGZyb20gb25lICovCiAJcWQtPnNv dXJjZVRleHQgPSBzb3VyY2VUZXh0OwkvKiBxdWVyeSB0ZXh0ICovCiAJcWQtPnNuYXBzaG90ID0g UmVnaXN0ZXJTbmFwc2hvdChzbmFwc2hvdCk7CS8qIHNuYXBzaG90ICovCiAJLyogUkkgY2hlY2sg c25hcHNob3QgKi8KQEAgLTExNiw4NiArMTE0LDYgQEAgRnJlZVF1ZXJ5RGVzYyhRdWVyeURlc2Mg KnFkZXNjKQogfQogCiAKLS8qCi0gKiBQcm9jZXNzUXVlcnkKLSAqCQlFeGVjdXRlIGEgc2luZ2xl IHBsYW5uYWJsZSBxdWVyeSB3aXRoaW4gYSBQT1JUQUxfTVVMVElfUVVFUlksCi0gKgkJUE9SVEFM X09ORV9SRVRVUk5JTkcsIG9yIFBPUlRBTF9PTkVfTU9EX1dJVEggcG9ydGFsCi0gKgotICoJcGxh bjogdGhlIHBsYW4gdHJlZSBmb3IgdGhlIHF1ZXJ5Ci0gKglzb3VyY2VUZXh0OiB0aGUgc291cmNl IHRleHQgb2YgdGhlIHF1ZXJ5Ci0gKglwYXJhbXM6IGFueSBwYXJhbWV0ZXJzIG5lZWRlZAotICoJ ZGVzdDogd2hlcmUgdG8gc2VuZCByZXN1bHRzCi0gKglxYzogd2hlcmUgdG8gc3RvcmUgdGhlIGNv bW1hbmQgY29tcGxldGlvbiBzdGF0dXMgZGF0YS4KLSAqCi0gKiBxYyBtYXkgYmUgTlVMTCBpZiBj YWxsZXIgZG9lc24ndCB3YW50IGEgc3RhdHVzIHN0cmluZy4KLSAqCi0gKiBNdXN0IGJlIGNhbGxl ZCBpbiBhIG1lbW9yeSBjb250ZXh0IHRoYXQgd2lsbCBiZSByZXNldCBvciBkZWxldGVkIG9uCi0g KiBlcnJvcjsgb3RoZXJ3aXNlIHRoZSBleGVjdXRvcidzIG1lbW9yeSB1c2FnZSB3aWxsIGJlIGxl YWtlZC4KLSAqLwotc3RhdGljIHZvaWQKLVByb2Nlc3NRdWVyeShQbGFubmVkU3RtdCAqcGxhbiwK LQkJCSBjb25zdCBjaGFyICpzb3VyY2VUZXh0LAotCQkJIFBhcmFtTGlzdEluZm8gcGFyYW1zLAot CQkJIFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52LAotCQkJIERlc3RSZWNlaXZlciAqZGVzdCwK LQkJCSBRdWVyeUNvbXBsZXRpb24gKnFjKQotewotCVF1ZXJ5RGVzYyAgKnF1ZXJ5RGVzYzsKLQot CS8qCi0JICogQ3JlYXRlIHRoZSBRdWVyeURlc2Mgb2JqZWN0Ci0JICovCi0JcXVlcnlEZXNjID0g Q3JlYXRlUXVlcnlEZXNjKHBsYW4sIHNvdXJjZVRleHQsCi0JCQkJCQkJCUdldEFjdGl2ZVNuYXBz aG90KCksIEludmFsaWRTbmFwc2hvdCwKLQkJCQkJCQkJZGVzdCwgcGFyYW1zLCBxdWVyeUVudiwg MCk7Ci0KLQkvKgotCSAqIENhbGwgRXhlY3V0b3JTdGFydCB0byBwcmVwYXJlIHRoZSBwbGFuIGZv ciBleGVjdXRpb24KLQkgKi8KLQlFeGVjdXRvclN0YXJ0KHF1ZXJ5RGVzYywgMCk7Ci0KLQkvKgot CSAqIFJ1biB0aGUgcGxhbiB0byBjb21wbGV0aW9uLgotCSAqLwotCUV4ZWN1dG9yUnVuKHF1ZXJ5 RGVzYywgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIDBMLCB0cnVlKTsKLQotCS8qCi0JICogQnVpbGQg Y29tbWFuZCBjb21wbGV0aW9uIHN0YXR1cyBkYXRhLCBpZiBjYWxsZXIgd2FudHMgb25lLgotCSAq LwotCWlmIChxYykKLQl7Ci0JCXN3aXRjaCAocXVlcnlEZXNjLT5vcGVyYXRpb24pCi0JCXsKLQkJ CWNhc2UgQ01EX1NFTEVDVDoKLQkJCQlTZXRRdWVyeUNvbXBsZXRpb24ocWMsIENNRFRBR19TRUxF Q1QsIHF1ZXJ5RGVzYy0+ZXN0YXRlLT5lc19wcm9jZXNzZWQpOwotCQkJCWJyZWFrOwotCQkJY2Fz ZSBDTURfSU5TRVJUOgotCQkJCVNldFF1ZXJ5Q29tcGxldGlvbihxYywgQ01EVEFHX0lOU0VSVCwg cXVlcnlEZXNjLT5lc3RhdGUtPmVzX3Byb2Nlc3NlZCk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIENN RF9VUERBVEU6Ci0JCQkJU2V0UXVlcnlDb21wbGV0aW9uKHFjLCBDTURUQUdfVVBEQVRFLCBxdWVy eURlc2MtPmVzdGF0ZS0+ZXNfcHJvY2Vzc2VkKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgQ01EX0RF TEVURToKLQkJCQlTZXRRdWVyeUNvbXBsZXRpb24ocWMsIENNRFRBR19ERUxFVEUsIHF1ZXJ5RGVz Yy0+ZXN0YXRlLT5lc19wcm9jZXNzZWQpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBDTURfTUVSR0U6 Ci0JCQkJU2V0UXVlcnlDb21wbGV0aW9uKHFjLCBDTURUQUdfTUVSR0UsIHF1ZXJ5RGVzYy0+ZXN0 YXRlLT5lc19wcm9jZXNzZWQpOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlTZXRRdWVy eUNvbXBsZXRpb24ocWMsIENNRFRBR19VTktOT1dOLCBxdWVyeURlc2MtPmVzdGF0ZS0+ZXNfcHJv Y2Vzc2VkKTsKLQkJCQlicmVhazsKLQkJfQotCX0KLQotCS8qCi0JICogTm93LCB3ZSBjbG9zZSBk b3duIGFsbCB0aGUgc2NhbnMgYW5kIGZyZWUgYWxsb2NhdGVkIHJlc291cmNlcy4KLQkgKi8KLQlF eGVjdXRvckZpbmlzaChxdWVyeURlc2MpOwotCUV4ZWN1dG9yRW5kKHF1ZXJ5RGVzYyk7Ci0KLQlG cmVlUXVlcnlEZXNjKHF1ZXJ5RGVzYyk7Ci19Ci0KIC8qCiAgKiBDaG9vc2VQb3J0YWxTdHJhdGVn eQogICoJCVNlbGVjdCBwb3J0YWwgZXhlY3V0aW9uIHN0cmF0ZWd5IGdpdmVuIHRoZSBpbnRlbmRl ZCBzdGF0ZW1lbnQgbGlzdC4KQEAgLTQyNywxNSArMzQ1LDE2IEBAIEZldGNoU3RhdGVtZW50VGFy Z2V0TGlzdChOb2RlICpzdG10KQogICogdG8gYmUgdXNlZCBmb3IgY3Vyc29ycykuCiAgKgogICog T24gcmV0dXJuLCBwb3J0YWwgaXMgcmVhZHkgdG8gYWNjZXB0IFBvcnRhbFJ1bigpIGNhbGxzLCBh bmQgdGhlIHJlc3VsdAotICogdHVwZGVzYyAoaWYgYW55KSBpcyBrbm93bi4KKyAqIHR1cGRlc2Mg KGlmIGFueSkgaXMga25vd24sIHVubGVzcyAqcmVwbGFuIGlzIHNldCB0byB0cnVlLCBpbiB3aGlj aCBjYXNlLAorICogdGhlIGNhbGxlciBtdXN0IHJldHJ5IGFmdGVyIGdlbmVyYXRpbmcgYSBuZXcg Q2FjaGVkUGxhbi4KICAqLwogdm9pZAogUG9ydGFsU3RhcnQoUG9ydGFsIHBvcnRhbCwgUGFyYW1M aXN0SW5mbyBwYXJhbXMsCi0JCQlpbnQgZWZsYWdzLCBTbmFwc2hvdCBzbmFwc2hvdCkKKwkJCWlu dCBlZmxhZ3MsIFNuYXBzaG90IHNuYXBzaG90LAorCQkJYm9vbCAqcmVwbGFuKQogewogCVBvcnRh bAkJc2F2ZUFjdGl2ZVBvcnRhbDsKIAlSZXNvdXJjZU93bmVyIHNhdmVSZXNvdXJjZU93bmVyOwot CU1lbW9yeUNvbnRleHQgc2F2ZVBvcnRhbENvbnRleHQ7CiAJTWVtb3J5Q29udGV4dCBvbGRDb250 ZXh0OwogCVF1ZXJ5RGVzYyAgKnF1ZXJ5RGVzYzsKIAlpbnQJCQlteWVmbGFnczsKQEAgLTQ0Mywy MCArMzYyLDIxIEBAIFBvcnRhbFN0YXJ0KFBvcnRhbCBwb3J0YWwsIFBhcmFtTGlzdEluZm8gcGFy YW1zLAogCUFzc2VydChQb3J0YWxJc1ZhbGlkKHBvcnRhbCkpOwogCUFzc2VydChwb3J0YWwtPnN0 YXR1cyA9PSBQT1JUQUxfREVGSU5FRCk7CiAKKwlpZiAocmVwbGFuKQorCQkqcmVwbGFuID0gZmFs c2U7CisKIAkvKgogCSAqIFNldCB1cCBnbG9iYWwgcG9ydGFsIGNvbnRleHQgcG9pbnRlcnMuCiAJ ICovCiAJc2F2ZUFjdGl2ZVBvcnRhbCA9IEFjdGl2ZVBvcnRhbDsKIAlzYXZlUmVzb3VyY2VPd25l ciA9IEN1cnJlbnRSZXNvdXJjZU93bmVyOwotCXNhdmVQb3J0YWxDb250ZXh0ID0gUG9ydGFsQ29u dGV4dDsKIAlQR19UUlkoKTsKIAl7CiAJCUFjdGl2ZVBvcnRhbCA9IHBvcnRhbDsKIAkJaWYgKHBv cnRhbC0+cmVzb3duZXIpCiAJCQlDdXJyZW50UmVzb3VyY2VPd25lciA9IHBvcnRhbC0+cmVzb3du ZXI7Ci0JCVBvcnRhbENvbnRleHQgPSBwb3J0YWwtPnBvcnRhbENvbnRleHQ7CiAKLQkJb2xkQ29u dGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhQb3J0YWxDb250ZXh0KTsKKwkJb2xkQ29udGV4 dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhwb3J0YWwtPnF1ZXJ5Q29udGV4dCk7CiAKIAkJLyog TXVzdCByZW1lbWJlciBwb3J0YWwgcGFyYW0gbGlzdCwgaWYgYW55ICovCiAJCXBvcnRhbC0+cG9y dGFsUGFyYW1zID0gcGFyYW1zOwpAQCAtNDcyLDYgKzM5Miw4IEBAIFBvcnRhbFN0YXJ0KFBvcnRh bCBwb3J0YWwsIFBhcmFtTGlzdEluZm8gcGFyYW1zLAogCQlzd2l0Y2ggKHBvcnRhbC0+c3RyYXRl Z3kpCiAJCXsKIAkJCWNhc2UgUE9SVEFMX09ORV9TRUxFQ1Q6CisJCQljYXNlIFBPUlRBTF9PTkVf UkVUVVJOSU5HOgorCQkJY2FzZSBQT1JUQUxfT05FX01PRF9XSVRIOgogCiAJCQkJLyogTXVzdCBz ZXQgc25hcHNob3QgYmVmb3JlIHN0YXJ0aW5nIGV4ZWN1dG9yLiAqLwogCQkJCWlmIChzbmFwc2hv dCkKQEAgLTQ5Myw2ICs0MTUsNyBAQCBQb3J0YWxTdGFydChQb3J0YWwgcG9ydGFsLCBQYXJhbUxp c3RJbmZvIHBhcmFtcywKIAkJCQkgKiB0aGUgZGVzdGluYXRpb24gdG8gRGVzdE5vbmUuCiAJCQkJ ICovCiAJCQkJcXVlcnlEZXNjID0gQ3JlYXRlUXVlcnlEZXNjKGxpbml0aWFsX25vZGUoUGxhbm5l ZFN0bXQsIHBvcnRhbC0+c3RtdHMpLAorCQkJCQkJCQkJCQlwb3J0YWwtPmNwbGFuLAogCQkJCQkJ CQkJCQlwb3J0YWwtPnNvdXJjZVRleHQsCiAJCQkJCQkJCQkJCUdldEFjdGl2ZVNuYXBzaG90KCks CiAJCQkJCQkJCQkJCUludmFsaWRTbmFwc2hvdCwKQEAgLTUwMSwzMCArNDI0LDQ4IEBAIFBvcnRh bFN0YXJ0KFBvcnRhbCBwb3J0YWwsIFBhcmFtTGlzdEluZm8gcGFyYW1zLAogCQkJCQkJCQkJCQlw b3J0YWwtPnF1ZXJ5RW52LAogCQkJCQkJCQkJCQkwKTsKIAorCQkJCS8qIFJlbWVtYmVyIGZvciBQ b3J0YWxSdW5NdWx0aSgpICovCisJCQkJcG9ydGFsLT5xZGVzY3MgPSBsYXBwZW5kKHBvcnRhbC0+ cWRlc2NzLCBxdWVyeURlc2MpOworCiAJCQkJLyoKIAkJCQkgKiBJZiBpdCdzIGEgc2Nyb2xsYWJs ZSBjdXJzb3IsIGV4ZWN1dG9yIG5lZWRzIHRvIHN1cHBvcnQKIAkJCQkgKiBSRVdJTkQgYW5kIGJh Y2t3YXJkcyBzY2FuLCBhcyB3ZWxsIGFzIHdoYXRldmVyIHRoZSBjYWxsZXIKIAkJCQkgKiBtaWdo dCd2ZSBhc2tlZCBmb3IuCiAJCQkJICovCi0JCQkJaWYgKHBvcnRhbC0+Y3Vyc29yT3B0aW9ucyAm IENVUlNPUl9PUFRfU0NST0xMKQorCQkJCWlmIChwb3J0YWwtPnN0cmF0ZWd5ID09IFBPUlRBTF9P TkVfU0VMRUNUICYmCisJCQkJCShwb3J0YWwtPmN1cnNvck9wdGlvbnMgJiBDVVJTT1JfT1BUX1ND Uk9MTCkpCiAJCQkJCW15ZWZsYWdzID0gZWZsYWdzIHwgRVhFQ19GTEFHX1JFV0lORCB8IEVYRUNf RkxBR19CQUNLV0FSRDsKIAkJCQllbHNlCiAJCQkJCW15ZWZsYWdzID0gZWZsYWdzOwogCiAJCQkJ LyoKLQkJCQkgKiBDYWxsIEV4ZWN1dG9yU3RhcnQgdG8gcHJlcGFyZSB0aGUgcGxhbiBmb3IgZXhl Y3V0aW9uCisJCQkJICogQ2FsbCBFeGVjdXRvclN0YXJ0IHRvIHByZXBhcmUgdGhlIHBsYW4gZm9y IGV4ZWN1dGlvbi4gIEEKKwkJCQkgKiBjYWNoZWQgcGxhbiBtYXkgZ2V0IGludmFsaWRhdGVkIGFz IHdlJ3JlIGRvaW5nIHRoYXQuCiAJCQkJICovCi0JCQkJRXhlY3V0b3JTdGFydChxdWVyeURlc2Ms IG15ZWZsYWdzKTsKKwkJCQlFeGVjdXRvclN0YXJ0KHF1ZXJ5RGVzYywgbXllZmxhZ3MsIHJlcGxh bik7CisJCQkJaWYgKHJlcGxhbiAmJiAqcmVwbGFuKQorCQkJCXsKKwkJCQkJQXNzZXJ0KHF1ZXJ5 RGVzYy0+Y3BsYW4pOworCQkJCQlQb3BBY3RpdmVTbmFwc2hvdCgpOworCQkJCQlnb3RvIGVhcmx5 X2V4aXQ7CisJCQkJfQogCiAJCQkJLyoKLQkJCQkgKiBUaGlzIHRlbGxzIFBvcnRhbENsZWFudXAg dG8gc2h1dCBkb3duIHRoZSBleGVjdXRvcgorCQkJCSAqIFRoaXMgdGVsbHMgUG9ydGFsQ2xlYW51 cCB0byBzaHV0IGRvd24gdGhlIGV4ZWN1dG9yLCB0aG91Z2gKKwkJCQkgKiBub3QgbmVlZGVkIGZv ciBxdWVyaWVzIGhhbmRsZWQgYnkgUG9ydGFsUnVuTXVsdGkoKS4KIAkJCQkgKi8KLQkJCQlwb3J0 YWwtPnF1ZXJ5RGVzYyA9IHF1ZXJ5RGVzYzsKKwkJCQlpZiAocG9ydGFsLT5zdHJhdGVneSA9PSBQ T1JUQUxfT05FX1NFTEVDVCkKKwkJCQkJcG9ydGFsLT5xdWVyeURlc2MgPSBxdWVyeURlc2M7CiAK IAkJCQkvKgotCQkJCSAqIFJlbWVtYmVyIHR1cGxlIGRlc2NyaXB0b3IgKGNvbXB1dGVkIGJ5IEV4 ZWN1dG9yU3RhcnQpCisJCQkJICogUmVtZW1iZXIgdHVwbGUgZGVzY3JpcHRvciAoY29tcHV0ZWQg YnkgRXhlY3V0b3JTdGFydCksCisJCQkJICogdGhvdWdoIG1ha2UgaXQgaW5kZXBlbmRlbnQgb2Yg UXVlcnlEZXNjIGZvciBxdWVyaWVzIGhhbmRsZWQKKwkJCQkgKiBieSBQb3J0YWxSdW5NdWx0aSgp LgogCQkJCSAqLwotCQkJCXBvcnRhbC0+dHVwRGVzYyA9IHF1ZXJ5RGVzYy0+dHVwRGVzYzsKKwkJ CQlpZiAocG9ydGFsLT5zdHJhdGVneSAhPSBQT1JUQUxfT05FX1NFTEVDVCkKKwkJCQkJcG9ydGFs LT50dXBEZXNjID0gQ3JlYXRlVHVwbGVEZXNjQ29weShxdWVyeURlc2MtPnR1cERlc2MpOworCQkJ CWVsc2UKKwkJCQkJcG9ydGFsLT50dXBEZXNjID0gcXVlcnlEZXNjLT50dXBEZXNjOwogCiAJCQkJ LyoKIAkJCQkgKiBSZXNldCBjdXJzb3IgcG9zaXRpb24gZGF0YSB0byAic3RhcnQgb2YgcXVlcnki CkBAIC01MzYsMjkgKzQ3Nyw2IEBAIFBvcnRhbFN0YXJ0KFBvcnRhbCBwb3J0YWwsIFBhcmFtTGlz dEluZm8gcGFyYW1zLAogCQkJCVBvcEFjdGl2ZVNuYXBzaG90KCk7CiAJCQkJYnJlYWs7CiAKLQkJ CWNhc2UgUE9SVEFMX09ORV9SRVRVUk5JTkc6Ci0JCQljYXNlIFBPUlRBTF9PTkVfTU9EX1dJVEg6 Ci0KLQkJCQkvKgotCQkJCSAqIFdlIGRvbid0IHN0YXJ0IHRoZSBleGVjdXRvciB1bnRpbCB3ZSBh cmUgdG9sZCB0byBydW4gdGhlCi0JCQkJICogcG9ydGFsLiAgV2UgZG8gbmVlZCB0byBzZXQgdXAg dGhlIHJlc3VsdCB0dXBkZXNjLgotCQkJCSAqLwotCQkJCXsKLQkJCQkJUGxhbm5lZFN0bXQgKnBz dG10OwotCi0JCQkJCXBzdG10ID0gUG9ydGFsR2V0UHJpbWFyeVN0bXQocG9ydGFsKTsKLQkJCQkJ cG9ydGFsLT50dXBEZXNjID0KLQkJCQkJCUV4ZWNDbGVhblR5cGVGcm9tVEwocHN0bXQtPnBsYW5U cmVlLT50YXJnZXRsaXN0KTsKLQkJCQl9Ci0KLQkJCQkvKgotCQkJCSAqIFJlc2V0IGN1cnNvciBw b3NpdGlvbiBkYXRhIHRvICJzdGFydCBvZiBxdWVyeSIKLQkJCQkgKi8KLQkJCQlwb3J0YWwtPmF0 U3RhcnQgPSB0cnVlOwotCQkJCXBvcnRhbC0+YXRFbmQgPSBmYWxzZTsJLyogYWxsb3cgZmV0Y2hl cyAqLwotCQkJCXBvcnRhbC0+cG9ydGFsUG9zID0gMDsKLQkJCQlicmVhazsKLQogCQkJY2FzZSBQ T1JUQUxfVVRJTF9TRUxFQ1Q6CiAKIAkJCQkvKgpAQCAtNTgxLDcgKzQ5OSw2MSBAQCBQb3J0YWxT dGFydChQb3J0YWwgcG9ydGFsLCBQYXJhbUxpc3RJbmZvIHBhcmFtcywKIAkJCQlicmVhazsKIAog CQkJY2FzZSBQT1JUQUxfTVVMVElfUVVFUlk6Ci0JCQkJLyogTmVlZCBkbyBub3RoaW5nIG5vdyAq LworCQkJCXsKKwkJCQkJTGlzdENlbGwgICAqbGM7CisJCQkJCWJvb2wJCXB1c2hlZF9hY3RpdmVf c25hcHNob3QgPSBmYWxzZTsKKworCQkJCQlmb3JlYWNoKGxjLCBwb3J0YWwtPnN0bXRzKQorCQkJ CQl7CisJCQkJCQlQbGFubmVkU3RtdCAqcGxhbiA9IGxmaXJzdF9ub2RlKFBsYW5uZWRTdG10LCBs Yyk7CisJCQkJCQlib29sCQlpc191dGlsaXR5ID0gKHBsYW4tPnV0aWxpdHlTdG10ICE9IE5VTEwp OworCisJCQkJCQkvKiBNdXN0IHNldCBzbmFwc2hvdCBiZWZvcmUgc3RhcnRpbmcgZXhlY3V0b3Iu ICovCisJCQkJCQlpZiAoIXB1c2hlZF9hY3RpdmVfc25hcHNob3QgJiYgIWlzX3V0aWxpdHkpCisJ CQkJCQl7CisJCQkJCQkJUHVzaEFjdGl2ZVNuYXBzaG90KEdldFRyYW5zYWN0aW9uU25hcHNob3Qo KSk7CisJCQkJCQkJcHVzaGVkX2FjdGl2ZV9zbmFwc2hvdCA9IHRydWU7CisJCQkJCQl9CisKKwkJ CQkJCS8qCisJCQkJCQkgKiBDcmVhdGUgdGhlIFF1ZXJ5RGVzYyBvYmplY3QuICBEZXN0UmVjZWl2 ZXIgd2lsbAorCQkJCQkJICogYmUgc2V0IGluIFBvcnRhbFJ1bk11bHRpKCkuCisJCQkJCQkgKi8K KwkJCQkJCXF1ZXJ5RGVzYyA9IENyZWF0ZVF1ZXJ5RGVzYyhwbGFuLCBwb3J0YWwtPmNwbGFuLAor CQkJCQkJCQkJCQkJCXBvcnRhbC0+c291cmNlVGV4dCwKKwkJCQkJCQkJCQkJCQlwdXNoZWRfYWN0 aXZlX3NuYXBzaG90ID8KKwkJCQkJCQkJCQkJCQlHZXRBY3RpdmVTbmFwc2hvdCgpIDoKKwkJCQkJ CQkJCQkJCQlJbnZhbGlkU25hcHNob3QsCisJCQkJCQkJCQkJCQkJSW52YWxpZFNuYXBzaG90LAor CQkJCQkJCQkJCQkJCU5VTEwsCisJCQkJCQkJCQkJCQkJcGFyYW1zLAorCQkJCQkJCQkJCQkJCXBv cnRhbC0+cXVlcnlFbnYsIDApOworCisJCQkJCQkvKiBSZW1lbWJlciBmb3IgUG9ydGFsTXVsdGlS dW4oKSAqLworCQkJCQkJcG9ydGFsLT5xZGVzY3MgPSBsYXBwZW5kKHBvcnRhbC0+cWRlc2NzLCBx dWVyeURlc2MpOworCisJCQkJCQkvKgorCQkJCQkJICogQ2FsbCBFeGVjdXRvclN0YXJ0IHRvIHBy ZXBhcmUgdGhlIHBsYW4gZm9yCisJCQkJCQkgKiBleGVjdXRpb24uICBBIGNhY2hlZCBwbGFuIG1h eSBnZXQgaW52YWxpZGF0ZWQgYXMKKwkJCQkJCSAqIHdlJ3JlIGRvaW5nIHRoYXQuCisJCQkJCQkg Ki8KKwkJCQkJCWlmICghaXNfdXRpbGl0eSkKKwkJCQkJCXsKKwkJCQkJCQlFeGVjdXRvclN0YXJ0 KHF1ZXJ5RGVzYywgMCwgcmVwbGFuKTsKKwkJCQkJCQlpZiAocmVwbGFuICYmICpyZXBsYW4pCisJ CQkJCQkJeworCQkJCQkJCQlBc3NlcnQocXVlcnlEZXNjLT5jcGxhbik7CisJCQkJCQkJCWlmIChw dXNoZWRfYWN0aXZlX3NuYXBzaG90KQorCQkJCQkJCQkJUG9wQWN0aXZlU25hcHNob3QoKTsKKwkJ CQkJCQkJZ290byBlYXJseV9leGl0OworCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJfQorCisJCQkJ CWlmIChwdXNoZWRfYWN0aXZlX3NuYXBzaG90KQorCQkJCQkJUG9wQWN0aXZlU25hcHNob3QoKTsK KwkJCQl9CisKIAkJCQlwb3J0YWwtPnR1cERlc2MgPSBOVUxMOwogCQkJCWJyZWFrOwogCQl9CkBA IC01OTQsMTkgKzU2NiwxOCBAQCBQb3J0YWxTdGFydChQb3J0YWwgcG9ydGFsLCBQYXJhbUxpc3RJ bmZvIHBhcmFtcywKIAkJLyogUmVzdG9yZSBnbG9iYWwgdmFycyBhbmQgcHJvcGFnYXRlIGVycm9y ICovCiAJCUFjdGl2ZVBvcnRhbCA9IHNhdmVBY3RpdmVQb3J0YWw7CiAJCUN1cnJlbnRSZXNvdXJj ZU93bmVyID0gc2F2ZVJlc291cmNlT3duZXI7Ci0JCVBvcnRhbENvbnRleHQgPSBzYXZlUG9ydGFs Q29udGV4dDsKIAogCQlQR19SRV9USFJPVygpOwogCX0KIAlQR19FTkRfVFJZKCk7CiAKKwlwb3J0 YWwtPnN0YXR1cyA9IFBPUlRBTF9SRUFEWTsKKworZWFybHlfZXhpdDoKIAlNZW1vcnlDb250ZXh0 U3dpdGNoVG8ob2xkQ29udGV4dCk7CiAKIAlBY3RpdmVQb3J0YWwgPSBzYXZlQWN0aXZlUG9ydGFs OwogCUN1cnJlbnRSZXNvdXJjZU93bmVyID0gc2F2ZVJlc291cmNlT3duZXI7Ci0JUG9ydGFsQ29u dGV4dCA9IHNhdmVQb3J0YWxDb250ZXh0OwotCi0JcG9ydGFsLT5zdGF0dXMgPSBQT1JUQUxfUkVB RFk7CiB9CiAKIC8qCkBAIC0xMTkzLDcgKzExNjQsNyBAQCBQb3J0YWxSdW5NdWx0aShQb3J0YWwg cG9ydGFsLAogCQkJICAgUXVlcnlDb21wbGV0aW9uICpxYykKIHsKIAlib29sCQlhY3RpdmVfc25h cHNob3Rfc2V0ID0gZmFsc2U7Ci0JTGlzdENlbGwgICAqc3RtdGxpc3RfaXRlbTsKKwlMaXN0Q2Vs bCAgICpxZGVzY19pdGVtOwogCiAJLyoKIAkgKiBJZiB0aGUgZGVzdGluYXRpb24gaXMgRGVzdFJl bW90ZUV4ZWN1dGUsIGNoYW5nZSB0byBEZXN0Tm9uZS4gIFRoZQpAQCAtMTIxNCw5ICsxMTg1LDEw IEBAIFBvcnRhbFJ1bk11bHRpKFBvcnRhbCBwb3J0YWwsCiAJICogTG9vcCB0byBoYW5kbGUgdGhl IGluZGl2aWR1YWwgcXVlcmllcyBnZW5lcmF0ZWQgZnJvbSBhIHNpbmdsZSBwYXJzZXRyZWUKIAkg KiBieSBhbmFseXNpcyBhbmQgcmV3cml0ZS4KIAkgKi8KLQlmb3JlYWNoKHN0bXRsaXN0X2l0ZW0s IHBvcnRhbC0+c3RtdHMpCisJZm9yZWFjaChxZGVzY19pdGVtLCBwb3J0YWwtPnFkZXNjcykKIAl7 Ci0JCVBsYW5uZWRTdG10ICpwc3RtdCA9IGxmaXJzdF9ub2RlKFBsYW5uZWRTdG10LCBzdG10bGlz dF9pdGVtKTsKKwkJUXVlcnlEZXNjICpxZGVzYyA9IGxmaXJzdF9ub2RlKFF1ZXJ5RGVzYywgcWRl c2NfaXRlbSk7CisJCVBsYW5uZWRTdG10ICpwc3RtdCA9IHFkZXNjLT5wbGFubmVkc3RtdDsKIAog CQkvKgogCQkgKiBJZiB3ZSBnb3QgYSBjYW5jZWwgc2lnbmFsIGluIHByaW9yIGNvbW1hbmQsIHF1 aXQKQEAgLTEyNDEsNyArMTIxMyw3IEBAIFBvcnRhbFJ1bk11bHRpKFBvcnRhbCBwb3J0YWwsCiAJ CQkgKi8KIAkJCWlmICghYWN0aXZlX3NuYXBzaG90X3NldCkKIAkJCXsKLQkJCQlTbmFwc2hvdAlz bmFwc2hvdCA9IEdldFRyYW5zYWN0aW9uU25hcHNob3QoKTsKKwkJCQlTbmFwc2hvdCAgICBzbmFw c2hvdCA9IHFkZXNjLT5zbmFwc2hvdDsKIAogCQkJCS8qIElmIHRvbGQgdG8sIHJlZ2lzdGVyIHRo ZSBzbmFwc2hvdCBhbmQgc2F2ZSBpbiBwb3J0YWwgKi8KIAkJCQlpZiAoc2V0SG9sZFNuYXBzaG90 KQpAQCAtMTI3MSwyMyArMTI0MywzOCBAQCBQb3J0YWxSdW5NdWx0aShQb3J0YWwgcG9ydGFsLAog CQkJZWxzZQogCQkJCVVwZGF0ZUFjdGl2ZVNuYXBzaG90Q29tbWFuZElkKCk7CiAKKwkJCS8qCisJ CQkgKiBSdW4gdGhlIHBsYW4gdG8gY29tcGxldGlvbi4KKwkJCSAqLworCQkJcWRlc2MtPmRlc3Qg PSBkZXN0OworCQkJRXhlY3V0b3JSdW4ocWRlc2MsIEZvcndhcmRTY2FuRGlyZWN0aW9uLCAwTCwg dHJ1ZSk7CisKKwkJCS8qCisJCQkgKiBCdWlsZCBjb21tYW5kIGNvbXBsZXRpb24gc3RhdHVzIGRh dGEgaWYgbmVlZGVkLgorCQkJICovCiAJCQlpZiAocHN0bXQtPmNhblNldFRhZykKIAkJCXsKLQkJ CQkvKiBzdGF0ZW1lbnQgY2FuIHNldCB0YWcgc3RyaW5nICovCi0JCQkJUHJvY2Vzc1F1ZXJ5KHBz dG10LAotCQkJCQkJCSBwb3J0YWwtPnNvdXJjZVRleHQsCi0JCQkJCQkJIHBvcnRhbC0+cG9ydGFs UGFyYW1zLAotCQkJCQkJCSBwb3J0YWwtPnF1ZXJ5RW52LAotCQkJCQkJCSBkZXN0LCBxYyk7Ci0J CQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJLyogc3RtdCBhZGRlZCBieSByZXdyaXRlIGNhbm5vdCBz ZXQgdGFnICovCi0JCQkJUHJvY2Vzc1F1ZXJ5KHBzdG10LAotCQkJCQkJCSBwb3J0YWwtPnNvdXJj ZVRleHQsCi0JCQkJCQkJIHBvcnRhbC0+cG9ydGFsUGFyYW1zLAotCQkJCQkJCSBwb3J0YWwtPnF1 ZXJ5RW52LAotCQkJCQkJCSBhbHRkZXN0LCBOVUxMKTsKKwkJCQlzd2l0Y2ggKHFkZXNjLT5vcGVy YXRpb24pCisJCQkJeworCQkJCQljYXNlIENNRF9TRUxFQ1Q6CisJCQkJCQlTZXRRdWVyeUNvbXBs ZXRpb24ocWMsIENNRFRBR19TRUxFQ1QsIHFkZXNjLT5lc3RhdGUtPmVzX3Byb2Nlc3NlZCk7CisJ CQkJCQlicmVhazsKKwkJCQkJY2FzZSBDTURfSU5TRVJUOgorCQkJCQkJU2V0UXVlcnlDb21wbGV0 aW9uKHFjLCBDTURUQUdfSU5TRVJULCBxZGVzYy0+ZXN0YXRlLT5lc19wcm9jZXNzZWQpOworCQkJ CQkJYnJlYWs7CisJCQkJCWNhc2UgQ01EX1VQREFURToKKwkJCQkJCVNldFF1ZXJ5Q29tcGxldGlv bihxYywgQ01EVEFHX1VQREFURSwgcWRlc2MtPmVzdGF0ZS0+ZXNfcHJvY2Vzc2VkKTsKKwkJCQkJ CWJyZWFrOworCQkJCQljYXNlIENNRF9ERUxFVEU6CisJCQkJCQlTZXRRdWVyeUNvbXBsZXRpb24o cWMsIENNRFRBR19ERUxFVEUsIHFkZXNjLT5lc3RhdGUtPmVzX3Byb2Nlc3NlZCk7CisJCQkJCQli cmVhazsKKwkJCQkJY2FzZSBDTURfTUVSR0U6CisJCQkJCQlTZXRRdWVyeUNvbXBsZXRpb24ocWMs IENNRFRBR19NRVJHRSwgcWRlc2MtPmVzdGF0ZS0+ZXNfcHJvY2Vzc2VkKTsKKwkJCQkJCWJyZWFr OworCQkJCQlkZWZhdWx0OgorCQkJCQkJU2V0UXVlcnlDb21wbGV0aW9uKHFjLCBDTURUQUdfVU5L Tk9XTiwgcWRlc2MtPmVzdGF0ZS0+ZXNfcHJvY2Vzc2VkKTsKKwkJCQkJCWJyZWFrOworCQkJCX0K IAkJCX0KIAogCQkJaWYgKGxvZ19leGVjdXRvcl9zdGF0cykKQEAgLTEzNDYsOCArMTMzMywxOSBA QCBQb3J0YWxSdW5NdWx0aShQb3J0YWwgcG9ydGFsLAogCQkgKiBJbmNyZW1lbnQgY29tbWFuZCBj b3VudGVyIGJldHdlZW4gcXVlcmllcywgYnV0IG5vdCBhZnRlciB0aGUgbGFzdAogCQkgKiBvbmUu CiAJCSAqLwotCQlpZiAobG5leHQocG9ydGFsLT5zdG10cywgc3RtdGxpc3RfaXRlbSkgIT0gTlVM TCkKKwkJaWYgKGxuZXh0KHBvcnRhbC0+cWRlc2NzLCBxZGVzY19pdGVtKSAhPSBOVUxMKQogCQkJ Q29tbWFuZENvdW50ZXJJbmNyZW1lbnQoKTsKKworCQkvKiBwb3J0YWwtPnF1ZXJ5RGVzYyBpcyBm cmVlJ2QgYnkgUG9ydGFsQ2xlYW51cCgpLiAqLworCQlpZiAocWRlc2MgIT0gcG9ydGFsLT5xdWVy eURlc2MpCisJCXsKKwkJCWlmIChxZGVzYy0+ZXN0YXRlKQorCQkJeworCQkJCUV4ZWN1dG9yRmlu aXNoKHFkZXNjKTsKKwkJCQlFeGVjdXRvckVuZChxZGVzYyk7CisJCQl9CisJCQlGcmVlUXVlcnlE ZXNjKHFkZXNjKTsKKwkJfQogCX0KIAogCS8qIFBvcCB0aGUgc25hcHNob3QgaWYgd2UgcHVzaGVk IG9uZS4gKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvcG9ydGFsbWVtLmMg Yi9zcmMvYmFja2VuZC91dGlscy9tbWdyL3BvcnRhbG1lbS5jCmluZGV4IDA2ZGZhODVmMDQuLjNh ZDgwYzdlY2IgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvcG9ydGFsbWVtLmMK KysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9wb3J0YWxtZW0uYwpAQCAtMjAxLDYgKzIwMSwx MCBAQCBDcmVhdGVQb3J0YWwoY29uc3QgY2hhciAqbmFtZSwgYm9vbCBhbGxvd0R1cCwgYm9vbCBk dXBTaWxlbnQpCiAJcG9ydGFsLT5wb3J0YWxDb250ZXh0ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRl KFRvcFBvcnRhbENvbnRleHQsCiAJCQkJCQkJCQkJCQkgICJQb3J0YWxDb250ZXh0IiwKIAkJCQkJ CQkJCQkJCSAgQUxMT0NTRVRfU01BTExfU0laRVMpOworCS8qIGluaXRpYWxpemUgcG9ydGFsJ3Mg cXVlcnkgY29udGV4dCB0byBzdG9yZSBRdWVyeURlc2NzICovCisJcG9ydGFsLT5xdWVyeUNvbnRl eHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoVG9wUG9ydGFsQ29udGV4dCwKKwkJCQkJCQkJCQkJ CSAiUG9ydGFsUXVlcnlDb250ZXh0IiwKKwkJCQkJCQkJCQkJCSBBTExPQ1NFVF9TTUFMTF9TSVpF Uyk7CiAKIAkvKiBjcmVhdGUgYSByZXNvdXJjZSBvd25lciBmb3IgdGhlIHBvcnRhbCAqLwogCXBv cnRhbC0+cmVzb3duZXIgPSBSZXNvdXJjZU93bmVyQ3JlYXRlKEN1clRyYW5zYWN0aW9uUmVzb3Vy Y2VPd25lciwKQEAgLTIyNCw2ICsyMjgsNyBAQCBDcmVhdGVQb3J0YWwoY29uc3QgY2hhciAqbmFt ZSwgYm9vbCBhbGxvd0R1cCwgYm9vbCBkdXBTaWxlbnQpCiAKIAkvKiBmb3IgbmFtZWQgcG9ydGFs cyByZXVzZSBwb3J0YWwtPm5hbWUgY29weSAqLwogCU1lbW9yeUNvbnRleHRTZXRJZGVudGlmaWVy KHBvcnRhbC0+cG9ydGFsQ29udGV4dCwgcG9ydGFsLT5uYW1lWzBdID8gcG9ydGFsLT5uYW1lIDog Ijx1bm5hbWVkPiIpOworCU1lbW9yeUNvbnRleHRTZXRJZGVudGlmaWVyKHBvcnRhbC0+cXVlcnlD b250ZXh0LCBwb3J0YWwtPm5hbWVbMF0gPyBwb3J0YWwtPm5hbWUgOiAiPHVubmFtZWQ+Iik7CiAK IAlyZXR1cm4gcG9ydGFsOwogfQpAQCAtNTk0LDYgKzU5OSw3IEBAIFBvcnRhbERyb3AoUG9ydGFs IHBvcnRhbCwgYm9vbCBpc1RvcENvbW1pdCkKIAogCS8qIHJlbGVhc2Ugc3Vic2lkaWFyeSBzdG9y YWdlICovCiAJTWVtb3J5Q29udGV4dERlbGV0ZShwb3J0YWwtPnBvcnRhbENvbnRleHQpOworCU1l bW9yeUNvbnRleHREZWxldGUocG9ydGFsLT5xdWVyeUNvbnRleHQpOwogCiAJLyogcmVsZWFzZSBw b3J0YWwgc3RydWN0IChpdCdzIGluIFRvcFBvcnRhbENvbnRleHQpICovCiAJcGZyZWUocG9ydGFs KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW4uaCBiL3NyYy9pbmNs dWRlL2NvbW1hbmRzL2V4cGxhaW4uaAppbmRleCA3YzEwNzFkZGQxLi5lYTM1YWRmYjNkIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluLmgKKysrIGIvc3JjL2luY2x1ZGUv Y29tbWFuZHMvZXhwbGFpbi5oCkBAIC04Nyw3ICs4NywxMiBAQCBleHRlcm4gdm9pZCBFeHBsYWlu T25lVXRpbGl0eShOb2RlICp1dGlsaXR5U3RtdCwgSW50b0NsYXVzZSAqaW50bywKIAkJCQkJCQkg IEV4cGxhaW5TdGF0ZSAqZXMsIGNvbnN0IGNoYXIgKnF1ZXJ5U3RyaW5nLAogCQkJCQkJCSAgUGFy YW1MaXN0SW5mbyBwYXJhbXMsIFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52KTsKIAotZXh0ZXJu IHZvaWQgRXhwbGFpbk9uZVBsYW4oUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LCBJbnRvQ2xhdXNl ICppbnRvLAorZXh0ZXJuIFF1ZXJ5RGVzYyAqRXhwbGFpblF1ZXJ5RGVzYyhQbGFubmVkU3RtdCAq c3RtdCwgc3RydWN0IENhY2hlZFBsYW4gKmNwbGFuLAorCQkJCSBjb25zdCBjaGFyICpxdWVyeVN0 cmluZywgSW50b0NsYXVzZSAqaW50bywgRXhwbGFpblN0YXRlICplcywKKwkJCQkgUGFyYW1MaXN0 SW5mbyBwYXJhbXMsIFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52LAorCQkJCSBib29sICpyZXBs YW4pOworZXh0ZXJuIHZvaWQgRXhwbGFpbk9uZVBsYW4oUXVlcnlEZXNjICpxdWVyeURlc2MsCisJ CQkJCQkgICBJbnRvQ2xhdXNlICppbnRvLAogCQkJCQkJICAgRXhwbGFpblN0YXRlICplcywgY29u c3QgY2hhciAqcXVlcnlTdHJpbmcsCiAJCQkJCQkgICBQYXJhbUxpc3RJbmZvIHBhcmFtcywgUXVl cnlFbnZpcm9ubWVudCAqcXVlcnlFbnYsCiAJCQkJCQkgICBjb25zdCBpbnN0cl90aW1lICpwbGFu ZHVyYXRpb24sCkBAIC0xMDMsNiArMTA4LDcgQEAgZXh0ZXJuIHZvaWQgRXhwbGFpblF1ZXJ5UGFy YW1ldGVycyhFeHBsYWluU3RhdGUgKmVzLCBQYXJhbUxpc3RJbmZvIHBhcmFtcywgaW50IG0KIAog ZXh0ZXJuIHZvaWQgRXhwbGFpbkJlZ2luT3V0cHV0KEV4cGxhaW5TdGF0ZSAqZXMpOwogZXh0ZXJu IHZvaWQgRXhwbGFpbkVuZE91dHB1dChFeHBsYWluU3RhdGUgKmVzKTsKK2V4dGVybiB2b2lkIEV4 cGxhaW5SZXNldE91dHB1dChFeHBsYWluU3RhdGUgKmVzKTsKIGV4dGVybiB2b2lkIEV4cGxhaW5T ZXBhcmF0ZVBsYW5zKEV4cGxhaW5TdGF0ZSAqZXMpOwogCiBleHRlcm4gdm9pZCBFeHBsYWluUHJv cGVydHlMaXN0KGNvbnN0IGNoYXIgKnFsYWJlbCwgTGlzdCAqZGF0YSwKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNkZXNjLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVj ZGVzYy5oCmluZGV4IGFmMmJmMzZkZmIuLjRiNzM2OGEwZGMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL2V4ZWN1dG9yL2V4ZWNkZXNjLmgKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY2Rl c2MuaApAQCAtMzIsOSArMzIsMTIgQEAKICAqLwogdHlwZWRlZiBzdHJ1Y3QgUXVlcnlEZXNjCiB7 CisJTm9kZVRhZwkJdHlwZTsKKwogCS8qIFRoZXNlIGZpZWxkcyBhcmUgcHJvdmlkZWQgYnkgQ3Jl YXRlUXVlcnlEZXNjICovCiAJQ21kVHlwZQkJb3BlcmF0aW9uOwkJLyogQ01EX1NFTEVDVCwgQ01E X1VQREFURSwgZXRjLiAqLwogCVBsYW5uZWRTdG10ICpwbGFubmVkc3RtdDsJLyogcGxhbm5lcidz IG91dHB1dCAoY291bGQgYmUgdXRpbGl0eSwgdG9vKSAqLworCXN0cnVjdCBDYWNoZWRQbGFuICpj cGxhbjsJLyogQ2FjaGVkUGxhbiwgaWYgcGxhbm5lZHN0bXQgaXMgZnJvbSBvbmUgKi8KIAljb25z dCBjaGFyICpzb3VyY2VUZXh0OwkJLyogc291cmNlIHRleHQgb2YgdGhlIHF1ZXJ5ICovCiAJU25h cHNob3QJc25hcHNob3Q7CQkvKiBzbmFwc2hvdCB0byB1c2UgZm9yIHF1ZXJ5ICovCiAJU25hcHNo b3QJY3Jvc3NjaGVja19zbmFwc2hvdDsJLyogY3Jvc3NjaGVjayBmb3IgUkkgdXBkYXRlL2RlbGV0 ZSAqLwpAQCAtNTcsNiArNjAsNyBAQCB0eXBlZGVmIHN0cnVjdCBRdWVyeURlc2MKIAogLyogaW4g cHF1ZXJ5LmMgKi8KIGV4dGVybiBRdWVyeURlc2MgKkNyZWF0ZVF1ZXJ5RGVzYyhQbGFubmVkU3Rt dCAqcGxhbm5lZHN0bXQsCisJCQkJCQkJCSAgc3RydWN0IENhY2hlZFBsYW4gKmNwbGFuLAogCQkJ CQkJCQkgIGNvbnN0IGNoYXIgKnNvdXJjZVRleHQsCiAJCQkJCQkJCSAgU25hcHNob3Qgc25hcHNo b3QsCiAJCQkJCQkJCSAgU25hcHNob3QgY3Jvc3NjaGVja19zbmFwc2hvdCwKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9l eGVjdXRvci5oCmluZGV4IGU3ZTI1YzA1N2UuLjYzZjNkMDk4MDQgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhl Y3V0b3IuaApAQCAtNjIsNyArNjIsNyBAQAogCiAKIC8qIEhvb2sgZm9yIHBsdWdpbnMgdG8gZ2V0 IGNvbnRyb2wgaW4gRXhlY3V0b3JTdGFydCgpICovCi10eXBlZGVmIHZvaWQgKCpFeGVjdXRvclN0 YXJ0X2hvb2tfdHlwZSkgKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdzKTsKK3R5cGVk ZWYgdm9pZCAoKkV4ZWN1dG9yU3RhcnRfaG9va190eXBlKSAoUXVlcnlEZXNjICpxdWVyeURlc2Ms IGludCBlZmxhZ3MsIGJvb2wgKnJlcGxhbik7CiBleHRlcm4gUEdETExJTVBPUlQgRXhlY3V0b3JT dGFydF9ob29rX3R5cGUgRXhlY3V0b3JTdGFydF9ob29rOwogCiAvKiBIb29rIGZvciBwbHVnaW5z IHRvIGdldCBjb250cm9sIGluIEV4ZWN1dG9yUnVuKCkgKi8KQEAgLTE4Nyw4ICsxODcsOCBAQCBF eGVjR2V0SnVua0F0dHJpYnV0ZShUdXBsZVRhYmxlU2xvdCAqc2xvdCwgQXR0ck51bWJlciBhdHRu bywgYm9vbCAqaXNOdWxsKQogLyoKICAqIHByb3RvdHlwZXMgZnJvbSBmdW5jdGlvbnMgaW4gZXhl Y01haW4uYwogICovCi1leHRlcm4gdm9pZCBFeGVjdXRvclN0YXJ0KFF1ZXJ5RGVzYyAqcXVlcnlE ZXNjLCBpbnQgZWZsYWdzKTsKLWV4dGVybiB2b2lkIHN0YW5kYXJkX0V4ZWN1dG9yU3RhcnQoUXVl cnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxhZ3MpOworZXh0ZXJuIHZvaWQgRXhlY3V0b3JTdGFy dChRdWVyeURlc2MgKnF1ZXJ5RGVzYywgaW50IGVmbGFncywgYm9vbCAqcmVwbGFuKTsKK2V4dGVy biB2b2lkIHN0YW5kYXJkX0V4ZWN1dG9yU3RhcnQoUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBl ZmxhZ3MsIGJvb2wgKnJlcGxhbik7CiBleHRlcm4gdm9pZCBFeGVjdXRvclJ1bihRdWVyeURlc2Mg KnF1ZXJ5RGVzYywKIAkJCQkJCVNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLCB1aW50NjQgY291bnQs IGJvb2wgZXhlY3V0ZV9vbmNlKTsKIGV4dGVybiB2b2lkIHN0YW5kYXJkX0V4ZWN1dG9yUnVuKFF1 ZXJ5RGVzYyAqcXVlcnlEZXNjLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvbWVzb24u YnVpbGQgYi9zcmMvaW5jbHVkZS9ub2Rlcy9tZXNvbi5idWlsZAppbmRleCBlZmUwODM0YWZiLi5h OGZkZDllMTc2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9tZXNvbi5idWlsZAorKysg Yi9zcmMvaW5jbHVkZS9ub2Rlcy9tZXNvbi5idWlsZApAQCAtMTMsNiArMTMsNyBAQCBub2RlX3N1 cHBvcnRfaW5wdXRfaSA9IFsKICAgJ2FjY2Vzcy90c21hcGkuaCcsCiAgICdjb21tYW5kcy9ldmVu dF90cmlnZ2VyLmgnLAogICAnY29tbWFuZHMvdHJpZ2dlci5oJywKKyAgJ2V4ZWN1dG9yL2V4ZWNk ZXNjLmgnLAogICAnZXhlY3V0b3IvdHVwdGFibGUuaCcsCiAgICdmb3JlaWduL2Zkd2FwaS5oJywK ICAgJ25vZGVzL2JpdG1hcHNldC5oJywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Rjb3AvcHF1 ZXJ5LmggYi9zcmMvaW5jbHVkZS90Y29wL3BxdWVyeS5oCmluZGV4IGE1ZTY1Yjk4YWEuLjA4Nzgz ZjFiNDMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Rjb3AvcHF1ZXJ5LmgKKysrIGIvc3JjL2lu Y2x1ZGUvdGNvcC9wcXVlcnkuaApAQCAtMzAsNyArMzAsOCBAQCBleHRlcm4gTGlzdCAqRmV0Y2hQ b3J0YWxUYXJnZXRMaXN0KFBvcnRhbCBwb3J0YWwpOwogZXh0ZXJuIExpc3QgKkZldGNoU3RhdGVt ZW50VGFyZ2V0TGlzdChOb2RlICpzdG10KTsKIAogZXh0ZXJuIHZvaWQgUG9ydGFsU3RhcnQoUG9y dGFsIHBvcnRhbCwgUGFyYW1MaXN0SW5mbyBwYXJhbXMsCi0JCQkJCQlpbnQgZWZsYWdzLCBTbmFw c2hvdCBzbmFwc2hvdCk7CisJCQkJCQlpbnQgZWZsYWdzLCBTbmFwc2hvdCBzbmFwc2hvdCwKKwkJ CQkJCWJvb2wgKnJlcGxhbik7CiAKIGV4dGVybiB2b2lkIFBvcnRhbFNldFJlc3VsdEZvcm1hdChQ b3J0YWwgcG9ydGFsLCBpbnQgbkZvcm1hdHMsCiAJCQkJCQkJCSAgaW50MTYgKmZvcm1hdHMpOwpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvcG9ydGFsLmggYi9zcmMvaW5jbHVkZS91dGls cy9wb3J0YWwuaAppbmRleCBhYTA4YjFlMGZjLi5hZjA1OWUzMGY4IDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS91dGlscy9wb3J0YWwuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9wb3J0YWwuaApA QCAtMTM4LDYgKzEzOCw4IEBAIHR5cGVkZWYgc3RydWN0IFBvcnRhbERhdGEKIAlRdWVyeUNvbXBs ZXRpb24gcWM7CQkJLyogY29tbWFuZCBjb21wbGV0aW9uIGRhdGEgZm9yIGV4ZWN1dGVkIHF1ZXJ5 ICovCiAJTGlzdAkgICAqc3RtdHM7CQkJLyogbGlzdCBvZiBQbGFubmVkU3RtdHMgKi8KIAlDYWNo ZWRQbGFuICpjcGxhbjsJCQkvKiBDYWNoZWRQbGFuLCBpZiBzdG10cyBhcmUgZnJvbSBvbmUgKi8K KwlMaXN0CSAgICpxZGVzY3M7CQkJLyogbGlzdCBvZiBRdWVyeURlc2NzICovCisJTWVtb3J5Q29u dGV4dCBxdWVyeUNvbnRleHQ7CS8qIG1lbW9yeSBmb3IgUXVlcnlEZXNjcyBhbmQgY2hpbGRyZW4g Ki8KIAogCVBhcmFtTGlzdEluZm8gcG9ydGFsUGFyYW1zOyAvKiBwYXJhbXMgdG8gcGFzcyB0byBx dWVyeSAqLwogCVF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52OyAvKiBlbnZpcm9ubWVudCBmb3Ig cXVlcnkgKi8KLS0gCjIuMzUuMwoK --000000000000dc2ca505f3396ed1 Content-Type: application/octet-stream; name="v31-0003-Move-CachedPlan-validation-locking-to-ExecutorSt.patch" Content-Disposition: attachment; filename="v31-0003-Move-CachedPlan-validation-locking-to-ExecutorSt.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lde6c7bn0 RnJvbSAwNTIyNDQ3ZjU4MTYyMTFhYzNlMzJlYmM2OTIwZDdmNzgwNTcxOGQ2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBhbWl0bGFuIDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4KRGF0 ZTogVGh1LCAyNiBKYW4gMjAyMyAxMDo1MjoyNCArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjMxIDMv M10gTW92ZSBDYWNoZWRQbGFuIHZhbGlkYXRpb24gbG9ja2luZyB0byBFeGVjdXRvclN0YXJ0KCkK Ci0tLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01haW4uYyAgICAgICAgfCAxNjMgKysrKysr KysrKysrKysrKysrKysrKystLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcmFsbGVsLmMg ICAgfCAgMzggKysrKystCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMgICB8 ICA5MCArKysrKysrKysrKy0tLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1V0aWxzLmMgICAg ICAgfCAgIDggKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBlbmQuYyAgICAgIHwgIDEx ICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYyB8ICAgNSArLQogc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jICAgfCAgMzYgKysrKysrCiBzcmMvYmFj a2VuZC91dGlscy9jYWNoZS9wbGFuY2FjaGUuYyAgICB8IDE0NiArKysrKysrLS0tLS0tLS0tLS0t LS0tCiBzcmMvaW5jbHVkZS9leGVjdXRvci9leGVjUGFydGl0aW9uLmggICB8ICAgOCArLQogc3Jj L2luY2x1ZGUvZXhlY3V0b3IvZXhlY2Rlc2MuaCAgICAgICAgfCAgIDYgKwogc3JjL2luY2x1ZGUv ZXhlY3V0b3IvZXhlY3V0b3IuaCAgICAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvbm9kZXMvZXhl Y25vZGVzLmggICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgg ICAgICAgICAgfCAgIDQgKy0KIHNyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oICAgICAgICAg IHwgIDMxICsrKystCiBzcmMvaW5jbHVkZS91dGlscy9wbGFuY2FjaGUuaCAgICAgICAgICB8ICAg MSArCiAxNSBmaWxlcyBjaGFuZ2VkLCA0MDQgaW5zZXJ0aW9ucygrKSwgMTQ2IGRlbGV0aW9ucygt KQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMgYi9zcmMvYmFj a2VuZC9leGVjdXRvci9leGVjTWFpbi5jCmluZGV4IDQ1Yzk5OWJjZGIuLjY4NzQzZDVmNjYgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMKKysrIGIvc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY01haW4uYwpAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgImNvbW1h bmRzL21hdHZpZXcuaCIKICNpbmNsdWRlICJjb21tYW5kcy90cmlnZ2VyLmgiCiAjaW5jbHVkZSAi ZXhlY3V0b3IvZXhlY2RlYnVnLmgiCisjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5o IgogI2luY2x1ZGUgImV4ZWN1dG9yL25vZGVTdWJwbGFuLmgiCiAjaW5jbHVkZSAiZm9yZWlnbi9m ZHdhcGkuaCIKICNpbmNsdWRlICJqaXQvaml0LmgiCkBAIC02NCw2ICs2NSw3IEBACiAjaW5jbHVk ZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNs dWRlICJ1dGlscy9wYXJ0Y2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlscy9wbGFuY2FjaGUuaCIKICNp bmNsdWRlICJ1dGlscy9ybHMuaCIKICNpbmNsdWRlICJ1dGlscy9ydWxldXRpbHMuaCIKICNpbmNs dWRlICJ1dGlscy9zbmFwbWdyLmgiCkBAIC03OSw3ICs4MSwxMiBAQCBFeGVjdXRvckVuZF9ob29r X3R5cGUgRXhlY3V0b3JFbmRfaG9vayA9IE5VTEw7CiBFeGVjdXRvckNoZWNrUGVybXNfaG9va190 eXBlIEV4ZWN1dG9yQ2hlY2tQZXJtc19ob29rID0gTlVMTDsKIAogLyogZGVjbHMgZm9yIGxvY2Fs IHJvdXRpbmVzIG9ubHkgdXNlZCB3aXRoaW4gdGhpcyBtb2R1bGUgKi8KLXN0YXRpYyB2b2lkIElu aXRQbGFuKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdzKTsKK3N0YXRpYyB2b2lkIElu aXRQbGFuKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdzLCBib29sICpyZXBsYW4pOwor c3RhdGljIHZvaWQgRXhlY0xvY2tSZWxhdGlvbnNJZk5lZWRlZChRdWVyeURlc2MgKnF1ZXJ5RGVz YywgYm9vbCAqcmVwbGFuKTsKK3N0YXRpYyBCaXRtYXBzZXQgKkV4ZWNEb0luaXRpYWxQYXJ0aXRp b25QcnVuaW5nKFBsYW5uZWRTdG10ICpzdG10LAorCQkJCQkJCQkJCQkJRVN0YXRlICplc3RhdGUp Oworc3RhdGljIHZvaWQgQWNxdWlyZUV4ZWN1dG9yTG9ja3MoQml0bWFwc2V0ICpsb2NrUmVsaWRz LCBFU3RhdGUgKmVzdGF0ZSwKKwkJCQkJCQkJIGJvb2wgYWNxdWlyZSk7CiBzdGF0aWMgdm9pZCBD aGVja1ZhbGlkUm93TWFya1JlbChSZWxhdGlvbiByZWwsIFJvd01hcmtUeXBlIG1hcmtUeXBlKTsK IHN0YXRpYyB2b2lkIEV4ZWNQb3N0cHJvY2Vzc1BsYW4oRVN0YXRlICplc3RhdGUpOwogc3RhdGlj IHZvaWQgRXhlY0VuZFBsYW4oUGxhblN0YXRlICpwbGFuc3RhdGUsIEVTdGF0ZSAqZXN0YXRlKTsK QEAgLTI3MCw3ICsyNzcsNyBAQCBzdGFuZGFyZF9FeGVjdXRvclN0YXJ0KFF1ZXJ5RGVzYyAqcXVl cnlEZXNjLCBpbnQgZWZsYWdzLCBib29sICpyZXBsYW4pCiAJLyoKIAkgKiBJbml0aWFsaXplIHRo ZSBwbGFuIHN0YXRlIHRyZWUKIAkgKi8KLQlJbml0UGxhbihxdWVyeURlc2MsIGVmbGFncyk7CisJ SW5pdFBsYW4ocXVlcnlEZXNjLCBlZmxhZ3MsIHJlcGxhbik7CiAKIAlNZW1vcnlDb250ZXh0U3dp dGNoVG8ob2xkY29udGV4dCk7CiB9CkBAIC04MDEsNyArODA4LDcgQEAgRXhlY0NoZWNrWGFjdFJl YWRPbmx5KFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCkKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogc3RhdGlj IHZvaWQKLUluaXRQbGFuKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdzKQorSW5pdFBs YW4oUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxhZ3MsIGJvb2wgKnJlcGxhbikKIHsKIAlD bWRUeXBlCQlvcGVyYXRpb24gPSBxdWVyeURlc2MtPm9wZXJhdGlvbjsKIAlQbGFubmVkU3RtdCAq cGxhbm5lZHN0bXQgPSBxdWVyeURlc2MtPnBsYW5uZWRzdG10OwpAQCAtODE0LDE5ICs4MjEsMjYg QEAgSW5pdFBsYW4oUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxhZ3MpCiAJaW50CQkJaTsK IAogCS8qCi0JICogRG8gcGVybWlzc2lvbnMgY2hlY2tzIGFuZCBzYXZlIHRoZSBsaXN0IGZvciBs YXRlciB1c2UuCi0JICovCi0JRXhlY0NoZWNrUGVybWlzc2lvbnMocmFuZ2VUYWJsZSwgcGxhbm5l ZHN0bXQtPnBlcm1JbmZvcywgdHJ1ZSk7Ci0JZXN0YXRlLT5lc19ydGVwZXJtaW5mb3MgPSBwbGFu bmVkc3RtdC0+cGVybUluZm9zOwotCi0JLyoKLQkgKiBpbml0aWFsaXplIHRoZSBub2RlJ3MgZXhl Y3V0aW9uIHN0YXRlCisJICogSW5pdGlhbGl6ZSBlc19yYW5nZV90YWJsZSBhbmQgZXNfcmVsYXRp b25zLgogCSAqLwogCUV4ZWNJbml0UmFuZ2VUYWJsZShlc3RhdGUsIHJhbmdlVGFibGUpOwogCiAJ ZXN0YXRlLT5lc19wbGFubmVkc3RtdCA9IHBsYW5uZWRzdG10OwogCWVzdGF0ZS0+ZXNfcGFydF9w cnVuZV9pbmZvcyA9IHBsYW5uZWRzdG10LT5wYXJ0UHJ1bmVJbmZvczsKIAorCS8qCisJICogQWNx dWlyZSBsb2NrcyBvbiByZWxhdGlvbnMgcmVmZXJlbmNlZCBpbiB0aGUgcGxhbiBpZiBpdCBjb21l cworCSAqIGZyb20gYSBDYWNoZWRQbGFuIGFmdGVyIHBlcmZvcm1pbmcgImluaXRpYWwiIHBhcnRp dGlvbiBwcnVuaW5nLgorCSAqIFJlc3VsdHMgb2YgcHJ1bmluZywgaWYgYW55LCBhcmUgc2F2ZWQg aW4gZXNfcGFydF9wcnVuZV9yZXN1bHRzLgorCSAqLworCUV4ZWNMb2NrUmVsYXRpb25zSWZOZWVk ZWQocXVlcnlEZXNjLCByZXBsYW4pOworCisJLyoKKwkgKiBEbyBwZXJtaXNzaW9ucyBjaGVja3Mg YW5kIHNhdmUgdGhlIGxpc3QgZm9yIGxhdGVyIHVzZS4KKwkgKi8KKwlFeGVjQ2hlY2tQZXJtaXNz aW9ucyhyYW5nZVRhYmxlLCBwbGFubmVkc3RtdC0+cGVybUluZm9zLCB0cnVlKTsKKwllc3RhdGUt PmVzX3J0ZXBlcm1pbmZvcyA9IHBsYW5uZWRzdG10LT5wZXJtSW5mb3M7CisKIAkvKgogCSAqIE5l eHQsIGJ1aWxkIHRoZSBFeGVjUm93TWFyayBhcnJheSBmcm9tIHRoZSBQbGFuUm93TWFyayhzKSwg aWYgYW55LgogCSAqLwpAQCAtOTgyLDYgKzk5NiwxMzMgQEAgSW5pdFBsYW4oUXVlcnlEZXNjICpx dWVyeURlc2MsIGludCBlZmxhZ3MpCiAJcXVlcnlEZXNjLT5wbGFuc3RhdGUgPSBwbGFuc3RhdGU7 CiB9CiAKKy8qCisgKiBFeGVjTG9ja1JlbGF0aW9uc0lmTmVlZGVkCisgKgkJTG9jayByZWxhdGlv bnMgdGhhdCBhIHF1ZXJ5J3MgcGxhbiBkZXBlbmRzIG9uIGlmIHRoZSBwbGFuIGNvbWVzCisgKgkJ ZnJvbSBhIENhY2hlZFBsYW4KKyAqCisgKiBPbiByZXR1cm4sIHdlIGhhdmUgYWxsIGFjcXVpcmVk IHRoZSBsb2NrcyBuZWVkZWQgdG8gcnVuIHRoZSBwbGFuLgorICogQWxzbyAqcmVwbGFuIGlzIHNl dCB0byB0cnVlIGlmIGFjcXVpcmluZyB0aG9zZSBsb2NrcyB3b3VsZCBoYXZlIGludmFsaWRhdGVk CisgKiB0aGUgQ2FjaGVkUGxhbi4KKyAqLworc3RhdGljIHZvaWQKK0V4ZWNMb2NrUmVsYXRpb25z SWZOZWVkZWQoUXVlcnlEZXNjICpxdWVyeURlc2MsIGJvb2wgKnJlcGxhbikKK3sKKwlQbGFubmVk U3RtdAkqcGxhbm5lZHN0bXQgPSBxdWVyeURlc2MtPnBsYW5uZWRzdG10OworCUVTdGF0ZQkJKmVz dGF0ZSA9IHF1ZXJ5RGVzYy0+ZXN0YXRlOworCUNhY2hlZFBsYW4JKmNwbGFuID0gcXVlcnlEZXNj LT5jcGxhbjsKKwlCaXRtYXBzZXQJKmFsbExvY2tSZWxpZHM7CisKKwkvKiBOb3RoaW5nIHRvIGRv IGlmIHRoZSBwbGFuIHRyZWUgaXMgbm90IGNhY2hlZC4gKi8KKwlpZiAoY3BsYW4gPT0gTlVMTCB8 fCBjcGxhbi0+aXNfb25lc2hvdCkKKwkJcmV0dXJuOworCisJQXNzZXJ0KHBsYW5uZWRzdG10KTsK KwlBc3NlcnQocmVwbGFuKTsKKwkqcmVwbGFuID0gZmFsc2U7CisKKwkvKgorCSAqIFRlbXBvcmFy aWx5IHNpZ25hbCB0byBFeGVjR2V0UmFuZ2VUYWJsZVJlbGF0aW9uKCkgdGhhdCBpdCBtdXN0IHRh a2UKKwkgKiB0YWtlIGEgbG9jay4gIFRoaXMgaXMgbmVlZGVkIGZvciBDcmVhdGVQYXJ0aXRpb25Q cnVuZVN0YXRlKCkgdG8gYmUKKwkgKiBhYmxlIHRvIG9wZW4gcGFyZW50IHBhcnRpdGlvbmVkIHRh YmxlcyB1c2luZworCSAqIEV4ZWNHZXRSYW5nZVRhYmxlUmVsYXRpb24oKS4KKwkgKi8KKwllc3Rh dGUtPmVzX3RvcF9lZmxhZ3MgfD0gRVhFQ19GTEFHX0dFVF9MT0NLUzsKKworCWFsbExvY2tSZWxp ZHMgPSBwbGFubmVkc3RtdC0+bWluTG9ja1JlbGlkczsKKwlpZiAocGxhbm5lZHN0bXQtPmNvbnRh aW5zSW5pdGlhbFBydW5pbmcpCisJeworCQlCaXRtYXBzZXQgKnBhcnRSZWxpZHMgPSBFeGVjRG9J bml0aWFsUGFydGl0aW9uUHJ1bmluZyhwbGFubmVkc3RtdCwKKwkJCQkJCQkJCQkJCQkJCSAgZXN0 YXRlKTsKKworCQlhbGxMb2NrUmVsaWRzID0gYm1zX2FkZF9tZW1iZXJzKGFsbExvY2tSZWxpZHMs IHBhcnRSZWxpZHMpOworCX0KKworCS8qIERvbmUgd2l0aCBpdC4gICovCisJZXN0YXRlLT5lc190 b3BfZWZsYWdzICY9IH5FWEVDX0ZMQUdfR0VUX0xPQ0tTOworCisJLyogQWNxdWlyZSBsb2Nrcy4g Ki8KKwlBY3F1aXJlRXhlY3V0b3JMb2NrcyhhbGxMb2NrUmVsaWRzLCBlc3RhdGUsIHRydWUpOwor CisJLyogQ2hlY2sgaWYgYWNxdWlyaW5nIHRob3NlIGxvY2tzIGhhcyBpbnZhbGlkYXRlZCB0aGUg cGxhbi4gKi8KKwkqcmVwbGFuID0gIUNhY2hlZFBsYW5TdGlsbFZhbGlkKGNwbGFuKTsKKworCS8q IFJlbGVhc2UgdXNlbGVzcyBsb2NrcyBpZiBuZWVkZWQuICovCisJaWYgKCpyZXBsYW4pCisJCUFj cXVpcmVFeGVjdXRvckxvY2tzKGFsbExvY2tSZWxpZHMsIGVzdGF0ZSwgZmFsc2UpOworfQorCisv KgorICogRXhlY0RvSW5pdGlhbFBhcnRpdGlvblBydW5pbmcKKyAqIAkJUGVyZm9ybSBpbml0aWFs IHBhcnRpdGlvbiBwcnVuaW5nIGlmIG5lZWRlZCBieSB0aGUgcGxhbgorICoKKyAqIFRoZSByZXR1 cm4gdmFsdWUgaXMgdGhlIHNldCBvZiBSVCBpbmRleGVzIG9mIHN1cnZpdmluZyBwYXJ0aXRpb25z LgorICogQSBsaXN0IG9mIFBhcnRpdGlvblBydW5lUmVzdWx0IHdpdGggYW4gZWxlbWVudCBmb3Ig ZWFjaCBpbgorICogcGxhbm5lZHN0bXQtPnBhcnRQcnVuZUluZm9zIGlzIHNhdmVkIGluIGVzdGF0 ZS0+ZXNfcGFydF9wcnVuZV9yZXN1bHRzLgorICovCitzdGF0aWMgQml0bWFwc2V0ICoKK0V4ZWNE b0luaXRpYWxQYXJ0aXRpb25QcnVuaW5nKFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwgRVN0YXRl ICplc3RhdGUpCit7CisJTGlzdENlbGwgICAqbGM7CisJQml0bWFwc2V0ICAqbG9ja1BhcnRSZWxp ZHMgPSBOVUxMOworCisJQXNzZXJ0KHBsYW5uZWRzdG10LT5jb250YWluc0luaXRpYWxQcnVuaW5n KTsKKwlBc3NlcnQocGxhbm5lZHN0bXQtPnBhcnRQcnVuZUluZm9zKTsKKworCWZvcmVhY2gobGMs IHBsYW5uZWRzdG10LT5wYXJ0UHJ1bmVJbmZvcykKKwl7CisJCVBhcnRpdGlvblBydW5lSW5mbyAq cHJ1bmVpbmZvID0gbGZpcnN0X25vZGUoUGFydGl0aW9uUHJ1bmVJbmZvLCBsYyk7CisJCVBhcnRp dGlvblBydW5lU3RhdGUgKnBydW5lc3RhdGU7CisJCVBhcnRpdGlvblBydW5lUmVzdWx0ICpwcnVu ZXJlc3VsdDsKKwkJQml0bWFwc2V0ICp2YWxpZHN1YnBsYW5zOworCisJCS8qIE5vIFBsYW5TdGF0 ZSBoZXJlOyB1bm5lY2Vzc2FyeSBmb3IgImluaXRpYWwiIHBydW5pbmcuICovCisJCXBydW5lc3Rh dGUgPSBFeGVjQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZShOVUxMLCBlc3RhdGUsIHBydW5laW5m bywKKwkJCQkJCQkJCQkJCSAgIHRydWUsIGZhbHNlKTsKKwkJdmFsaWRzdWJwbGFucyA9IEV4ZWNG aW5kTWF0Y2hpbmdTdWJQbGFucyhwcnVuZXN0YXRlLCB0cnVlLAorCQkJCQkJCQkJCQkJICZsb2Nr UGFydFJlbGlkcyk7CisKKwkJcHJ1bmVyZXN1bHQgPSBtYWtlTm9kZShQYXJ0aXRpb25QcnVuZVJl c3VsdCk7CisJCXBydW5lcmVzdWx0LT5yb290X3BhcmVudF9yZWxpZHMgPSBibXNfY29weShwcnVu ZWluZm8tPnJvb3RfcGFyZW50X3JlbGlkcyk7CisJCXBydW5lcmVzdWx0LT52YWxpZHN1YnBsYW5z ID0gYm1zX2NvcHkodmFsaWRzdWJwbGFucyk7CisJCWVzdGF0ZS0+ZXNfcGFydF9wcnVuZV9yZXN1 bHRzID0gbGFwcGVuZChlc3RhdGUtPmVzX3BhcnRfcHJ1bmVfcmVzdWx0cywKKwkJCQkJCQkJCQkJ CXBydW5lcmVzdWx0KTsKKwl9CisKKwlyZXR1cm4gbG9ja1BhcnRSZWxpZHM7Cit9CisKKy8qCisg KiBBY3F1aXJlRXhlY3V0b3JMb2NrczogYWNxdWlyZSBsb2NrcyBuZWVkZWQgZm9yIGV4ZWN1dGlv biBvZiBhIGNhY2hlZCBwbGFuOworICogb3IgcmVsZWFzZSB0aGVtIGlmIGFjcXVpcmUgaXMgZmFs c2UuCisgKi8KK3N0YXRpYyB2b2lkCitBY3F1aXJlRXhlY3V0b3JMb2NrcyhCaXRtYXBzZXQgKmxv Y2tSZWxpZHMsIEVTdGF0ZSAqZXN0YXRlLCBib29sIGFjcXVpcmUpCit7CisJaW50CQkJcnRpOwor CisJcnRpID0gLTE7CisJd2hpbGUgKChydGkgPSBibXNfbmV4dF9tZW1iZXIobG9ja1JlbGlkcywg cnRpKSkgPiAwKQorCXsKKwkJUmFuZ2VUYmxFbnRyeSAqcnRlID0gZXhlY19ydF9mZXRjaChydGks IGVzdGF0ZSk7CisKKwkJaWYgKCEocnRlLT5ydGVraW5kID09IFJURV9SRUxBVElPTiB8fAorCQkJ ICAocnRlLT5ydGVraW5kID09IFJURV9TVUJRVUVSWSAmJiBPaWRJc1ZhbGlkKHJ0ZS0+cmVsaWQp KSkpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBBY3F1aXJlIHRoZSBhcHByb3ByaWF0ZSB0 eXBlIG9mIGxvY2sgb24gZWFjaCByZWxhdGlvbiBPSUQuIE5vdGUKKwkJICogdGhhdCB3ZSBkb24n dCBhY3R1YWxseSB0cnkgdG8gb3BlbiB0aGUgcmVsLCBhbmQgaGVuY2Ugd2lsbCBub3QKKwkJICog ZmFpbCBpZiBpdCdzIGJlZW4gZHJvcHBlZCBlbnRpcmVseSAtLS0gd2UnbGwganVzdCB0cmFuc2ll bnRseQorCQkgKiBhY3F1aXJlIGEgbm9uLWNvbmZsaWN0aW5nIGxvY2suCisJCSAqLworCQlpZiAo YWNxdWlyZSkKKwkJCUxvY2tSZWxhdGlvbk9pZChydGUtPnJlbGlkLCBydGUtPnJlbGxvY2ttb2Rl KTsKKwkJZWxzZQorCQkJVW5sb2NrUmVsYXRpb25PaWQocnRlLT5yZWxpZCwgcnRlLT5yZWxsb2Nr bW9kZSk7CisJfQorfQorCiAvKgogICogQ2hlY2sgdGhhdCBhIHByb3Bvc2VkIHJlc3VsdCByZWxh dGlvbiBpcyBhIGxlZ2FsIHRhcmdldCBmb3IgdGhlIG9wZXJhdGlvbgogICoKQEAgLTEzOTYsNyAr MTUzNyw3IEBAIEV4ZWNHZXRBbmNlc3RvclJlc3VsdFJlbHMoRVN0YXRlICplc3RhdGUsIFJlc3Vs dFJlbEluZm8gKnJlc3VsdFJlbEluZm8pCiAKIAkJCS8qCiAJCQkgKiBBbGwgYW5jZXN0b3JzIHVw IHRvIHRoZSByb290IHRhcmdldCByZWxhdGlvbiBtdXN0IGhhdmUgYmVlbgotCQkJICogbG9ja2Vk IGJ5IHRoZSBwbGFubmVyIG9yIEFjcXVpcmVFeGVjdXRvckxvY2tzKCkuCisJCQkgKiBsb2NrZWQg YnkgdGhlIHBsYW5uZXIuCiAJCQkgKi8KIAkJCWFuY1JlbCA9IHRhYmxlX29wZW4oYW5jT2lkLCBO b0xvY2spOwogCQkJckluZm8gPSBtYWtlTm9kZShSZXN1bHRSZWxJbmZvKTsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZXhlY1BhcmFsbGVsLmMKaW5kZXggMWY1ZDZkNGQ2NC4uNWM5Njc0NTFjZSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcmFsbGVsLmMKKysrIGIvc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZXhlY1BhcmFsbGVsLmMKQEAgLTY2LDYgKzY2LDcgQEAKICNkZWZpbmUgUEFSQUxM RUxfS0VZX1FVRVJZX1RFWFQJCVVJTlQ2NENPTlNUKDB4RTAwMDAwMDAwMDAwMDAwOCkKICNkZWZp bmUgUEFSQUxMRUxfS0VZX0pJVF9JTlNUUlVNRU5UQVRJT04gVUlOVDY0Q09OU1QoMHhFMDAwMDAw MDAwMDAwMDA5KQogI2RlZmluZSBQQVJBTExFTF9LRVlfV0FMX1VTQUdFCQkJVUlOVDY0Q09OU1Qo MHhFMDAwMDAwMDAwMDAwMDBBKQorI2RlZmluZSBQQVJBTExFTF9LRVlfUEFSVElUSU9OX1BSVU5F X1JFU1VMVFMJVUlOVDY0Q09OU1QoMHhFMDAwMDAwMDAwMDAwMDBCKQogCiAjZGVmaW5lIFBBUkFM TEVMX1RVUExFX1FVRVVFX1NJWkUJCTY1NTM2CiAKQEAgLTU5OSwxMiArNjAwLDE1IEBAIEV4ZWNJ bml0UGFyYWxsZWxQbGFuKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBFU3RhdGUgKmVzdGF0ZSwKIAlG aXhlZFBhcmFsbGVsRXhlY3V0b3JTdGF0ZSAqZnBlczsKIAljaGFyCSAgICpwc3RtdF9kYXRhOwog CWNoYXIJICAgKnBzdG10X3NwYWNlOworCWNoYXIJICAgKnBhcnRfcHJ1bmVfcmVzdWx0c19kYXRh OworCWNoYXIJICAgKnBhcnRfcHJ1bmVfcmVzdWx0c19zcGFjZTsKIAljaGFyCSAgICpwYXJhbWxp c3RpbmZvX3NwYWNlOwogCUJ1ZmZlclVzYWdlICpidWZ1c2FnZV9zcGFjZTsKIAlXYWxVc2FnZSAg ICp3YWx1c2FnZV9zcGFjZTsKIAlTaGFyZWRFeGVjdXRvckluc3RydW1lbnRhdGlvbiAqaW5zdHJ1 bWVudGF0aW9uID0gTlVMTDsKIAlTaGFyZWRKaXRJbnN0cnVtZW50YXRpb24gKmppdF9pbnN0cnVt ZW50YXRpb24gPSBOVUxMOwogCWludAkJCXBzdG10X2xlbjsKKwlpbnQJCQlwYXJ0X3BydW5lX3Jl c3VsdHNfbGVuOwogCWludAkJCXBhcmFtbGlzdGluZm9fbGVuOwogCWludAkJCWluc3RydW1lbnRh dGlvbl9sZW4gPSAwOwogCWludAkJCWppdF9pbnN0cnVtZW50YXRpb25fbGVuID0gMDsKQEAgLTYz Myw2ICs2MzcsNyBAQCBFeGVjSW5pdFBhcmFsbGVsUGxhbihQbGFuU3RhdGUgKnBsYW5zdGF0ZSwg RVN0YXRlICplc3RhdGUsCiAKIAkvKiBGaXggdXAgYW5kIHNlcmlhbGl6ZSBwbGFuIHRvIGJlIHNl bnQgdG8gd29ya2Vycy4gKi8KIAlwc3RtdF9kYXRhID0gRXhlY1NlcmlhbGl6ZVBsYW4ocGxhbnN0 YXRlLT5wbGFuLCBlc3RhdGUpOworCXBhcnRfcHJ1bmVfcmVzdWx0c19kYXRhID0gbm9kZVRvU3Ry aW5nKGVzdGF0ZS0+ZXNfcGFydF9wcnVuZV9yZXN1bHRzKTsKIAogCS8qIENyZWF0ZSBhIHBhcmFs bGVsIGNvbnRleHQuICovCiAJcGN4dCA9IENyZWF0ZVBhcmFsbGVsQ29udGV4dCgicG9zdGdyZXMi LCAiUGFyYWxsZWxRdWVyeU1haW4iLCBud29ya2Vycyk7CkBAIC02NTksNiArNjY0LDExIEBAIEV4 ZWNJbml0UGFyYWxsZWxQbGFuKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBFU3RhdGUgKmVzdGF0ZSwK IAlzaG1fdG9jX2VzdGltYXRlX2NodW5rKCZwY3h0LT5lc3RpbWF0b3IsIHBzdG10X2xlbik7CiAJ c2htX3RvY19lc3RpbWF0ZV9rZXlzKCZwY3h0LT5lc3RpbWF0b3IsIDEpOwogCisJLyogRXN0aW1h dGUgc3BhY2UgZm9yIHNlcmlhbGl6ZWQgTGlzdCBvZiBQYXJ0aXRpb25QcnVuZVJlc3VsdC4gKi8K KwlwYXJ0X3BydW5lX3Jlc3VsdHNfbGVuID0gc3RybGVuKHBhcnRfcHJ1bmVfcmVzdWx0c19kYXRh KSArIDE7CisJc2htX3RvY19lc3RpbWF0ZV9jaHVuaygmcGN4dC0+ZXN0aW1hdG9yLCBwYXJ0X3By dW5lX3Jlc3VsdHNfbGVuKTsKKwlzaG1fdG9jX2VzdGltYXRlX2tleXMoJnBjeHQtPmVzdGltYXRv ciwgMSk7CisKIAkvKiBFc3RpbWF0ZSBzcGFjZSBmb3Igc2VyaWFsaXplZCBQYXJhbUxpc3RJbmZv LiAqLwogCXBhcmFtbGlzdGluZm9fbGVuID0gRXN0aW1hdGVQYXJhbUxpc3RTcGFjZShlc3RhdGUt PmVzX3BhcmFtX2xpc3RfaW5mbyk7CiAJc2htX3RvY19lc3RpbWF0ZV9jaHVuaygmcGN4dC0+ZXN0 aW1hdG9yLCBwYXJhbWxpc3RpbmZvX2xlbik7CkBAIC03NTMsNiArNzYzLDEyIEBAIEV4ZWNJbml0 UGFyYWxsZWxQbGFuKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBFU3RhdGUgKmVzdGF0ZSwKIAltZW1j cHkocHN0bXRfc3BhY2UsIHBzdG10X2RhdGEsIHBzdG10X2xlbik7CiAJc2htX3RvY19pbnNlcnQo cGN4dC0+dG9jLCBQQVJBTExFTF9LRVlfUExBTk5FRFNUTVQsIHBzdG10X3NwYWNlKTsKIAorCS8q IFN0b3JlIHNlcmlhbGl6ZWQgTGlzdCBvZiBQYXJ0aXRpb25QcnVuZVJlc3VsdCAqLworCXBhcnRf cHJ1bmVfcmVzdWx0c19zcGFjZSA9IHNobV90b2NfYWxsb2NhdGUocGN4dC0+dG9jLCBwYXJ0X3By dW5lX3Jlc3VsdHNfbGVuKTsKKwltZW1jcHkocGFydF9wcnVuZV9yZXN1bHRzX3NwYWNlLCBwYXJ0 X3BydW5lX3Jlc3VsdHNfZGF0YSwgcGFydF9wcnVuZV9yZXN1bHRzX2xlbik7CisJc2htX3RvY19p bnNlcnQocGN4dC0+dG9jLCBQQVJBTExFTF9LRVlfUEFSVElUSU9OX1BSVU5FX1JFU1VMVFMsCisJ CQkJICAgcGFydF9wcnVuZV9yZXN1bHRzX3NwYWNlKTsKKwogCS8qIFN0b3JlIHNlcmlhbGl6ZWQg UGFyYW1MaXN0SW5mby4gKi8KIAlwYXJhbWxpc3RpbmZvX3NwYWNlID0gc2htX3RvY19hbGxvY2F0 ZShwY3h0LT50b2MsIHBhcmFtbGlzdGluZm9fbGVuKTsKIAlzaG1fdG9jX2luc2VydChwY3h0LT50 b2MsIFBBUkFMTEVMX0tFWV9QQVJBTUxJU1RJTkZPLCBwYXJhbWxpc3RpbmZvX3NwYWNlKTsKQEAg LTEyMzQsOCArMTI1MCwxMSBAQCBFeGVjUGFyYWxsZWxHZXRRdWVyeURlc2Moc2htX3RvYyAqdG9j LCBEZXN0UmVjZWl2ZXIgKnJlY2VpdmVyLAogCQkJCQkJIGludCBpbnN0cnVtZW50X29wdGlvbnMp CiB7CiAJY2hhcgkgICAqcHN0bXRzcGFjZTsKKwljaGFyCSAgICpwYXJ0X3BydW5lX3Jlc3VsdHNf c3BhY2U7CiAJY2hhcgkgICAqcGFyYW1zcGFjZTsKIAlQbGFubmVkU3RtdCAqcHN0bXQ7CisJUXVl cnlEZXNjICAqcXVlcnlEZXNjOworCUxpc3QJICAgKnBhcnRfcHJ1bmVfcmVzdWx0czsKIAlQYXJh bUxpc3RJbmZvIHBhcmFtTEk7CiAJY2hhcgkgICAqcXVlcnlTdHJpbmc7CiAKQEAgLTEyNDYsNiAr MTI2NSwxMSBAQCBFeGVjUGFyYWxsZWxHZXRRdWVyeURlc2Moc2htX3RvYyAqdG9jLCBEZXN0UmVj ZWl2ZXIgKnJlY2VpdmVyLAogCXBzdG10c3BhY2UgPSBzaG1fdG9jX2xvb2t1cCh0b2MsIFBBUkFM TEVMX0tFWV9QTEFOTkVEU1RNVCwgZmFsc2UpOwogCXBzdG10ID0gKFBsYW5uZWRTdG10ICopIHN0 cmluZ1RvTm9kZShwc3RtdHNwYWNlKTsKIAorCS8qIFJlY29uc3RydWN0IGxlYWRlci1zdXBwbGll ZCBQYXJ0aXRpb25QcnVuZVJlc3VsdC4gKi8KKwlwYXJ0X3BydW5lX3Jlc3VsdHNfc3BhY2UgPQor CQlzaG1fdG9jX2xvb2t1cCh0b2MsIFBBUkFMTEVMX0tFWV9QQVJUSVRJT05fUFJVTkVfUkVTVUxU UywgZmFsc2UpOworCXBhcnRfcHJ1bmVfcmVzdWx0cyA9IChMaXN0ICopIHN0cmluZ1RvTm9kZShw YXJ0X3BydW5lX3Jlc3VsdHNfc3BhY2UpOworCiAJLyogUmVjb25zdHJ1Y3QgUGFyYW1MaXN0SW5m by4gKi8KIAlwYXJhbXNwYWNlID0gc2htX3RvY19sb29rdXAodG9jLCBQQVJBTExFTF9LRVlfUEFS QU1MSVNUSU5GTywgZmFsc2UpOwogCXBhcmFtTEkgPSBSZXN0b3JlUGFyYW1MaXN0KCZwYXJhbXNw YWNlKTsKQEAgLTEyNTUsMTEgKzEyNzksMTUgQEAgRXhlY1BhcmFsbGVsR2V0UXVlcnlEZXNjKHNo bV90b2MgKnRvYywgRGVzdFJlY2VpdmVyICpyZWNlaXZlciwKIAkgKiBoZXJlIGV2ZW4gaWYgdGhl IGNvbnRhaW5pbmcgcGxhbiB0cmVlIG1heSBoYXZlIGNvbWUgZnJvbSBvbmUgaW4gdGhlCiAJICog bGVhZGVyLgogCSAqLwotCXJldHVybiBDcmVhdGVRdWVyeURlc2MocHN0bXQsCi0JCQkJCQkgICBO VUxMLAotCQkJCQkJICAgcXVlcnlTdHJpbmcsCi0JCQkJCQkgICBHZXRBY3RpdmVTbmFwc2hvdCgp LCBJbnZhbGlkU25hcHNob3QsCi0JCQkJCQkgICByZWNlaXZlciwgcGFyYW1MSSwgTlVMTCwgaW5z dHJ1bWVudF9vcHRpb25zKTsKKwlxdWVyeURlc2MgPSBDcmVhdGVRdWVyeURlc2MocHN0bXQsCisJ CQkJCQkJCU5VTEwsCisJCQkJCQkJCXF1ZXJ5U3RyaW5nLAorCQkJCQkJCQlHZXRBY3RpdmVTbmFw c2hvdCgpLCBJbnZhbGlkU25hcHNob3QsCisJCQkJCQkJCXJlY2VpdmVyLCBwYXJhbUxJLCBOVUxM LCBpbnN0cnVtZW50X29wdGlvbnMpOworCisJcXVlcnlEZXNjLT5wYXJ0X3BydW5lX3Jlc3VsdHMg PSBwYXJ0X3BydW5lX3Jlc3VsdHM7CisKKwlyZXR1cm4gcXVlcnlEZXNjOwogfQogCiAvKgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jIGIvc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jCmluZGV4IDRiOTFiYjc0MDMuLjA5ZTBkN2FhOWMg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uYworKysgYi9z cmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMKQEAgLTE5Niw3ICsxOTYsOCBAQCBz dGF0aWMgdm9pZCBQYXJ0aXRpb25QcnVuZUZpeFN1YlBsYW5NYXAoUGFydGl0aW9uUHJ1bmVTdGF0 ZSAqcHJ1bmVzdGF0ZSwKIHN0YXRpYyB2b2lkIGZpbmRfbWF0Y2hpbmdfc3VicGxhbnNfcmVjdXJz ZShQYXJ0aXRpb25QcnVuaW5nRGF0YSAqcHJ1bmVkYXRhLAogCQkJCQkJCQkJCSAgIFBhcnRpdGlv bmVkUmVsUHJ1bmluZ0RhdGEgKnBwcnVuZSwKIAkJCQkJCQkJCQkgICBib29sIGluaXRpYWxfcHJ1 bmUsCi0JCQkJCQkJCQkJICAgQml0bWFwc2V0ICoqdmFsaWRzdWJwbGFucyk7CisJCQkJCQkJCQkJ ICAgQml0bWFwc2V0ICoqdmFsaWRzdWJwbGFucywKKwkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKipz Y2FuX2xlYWZwYXJ0X3J0aXMpOwogCiAKIC8qCkBAIC0xNzgyLDggKzE3ODMsMTAgQEAgYWRqdXN0 X3BhcnRpdGlvbl9jb2xub3NfdXNpbmdfbWFwKExpc3QgKmNvbG5vcywgQXR0ck1hcCAqYXR0ck1h cCkKICAqCiAgKiBPbiByZXR1cm4sICppbml0aWFsbHlfdmFsaWRfc3VicGxhbnMgaXMgYXNzaWdu ZWQgdGhlIHNldCBvZiBpbmRleGVzIG9mCiAgKiBjaGlsZCBzdWJwbGFucyB0aGF0IG11c3QgYmUg aW5pdGlhbGl6ZWQgYWxvbmcgd2l0aCB0aGUgcGFyZW50IHBsYW4gbm9kZS4KLSAqIEluaXRpYWwg cHJ1bmluZyBpcyBwZXJmb3JtZWQgaGVyZSBpZiBuZWVkZWQgYW5kIGluIHRoYXQgY2FzZSBvbmx5 IHRoZQotICogc3Vydml2aW5nIHN1YnBsYW5zJyBpbmRleGVzIGFyZSBhZGRlZC4KKyAqIFRoYXQg c2V0IGlzIGNvbXB1dGVkIGJ5IGVpdGhlciBwZXJmb3JtaW5nIHRoZSAiaW5pdGlhbCBwcnVuaW5n IiBoZXJlIG9yCisgKiByZXVzaW5nIHRoZSBvbmUgcHJlc2VudCBpbiBFU3RhdGUuZXNfcGFydF9w cnVuZV9yZXN1bHRzW3BhcnRfcHJ1bmVfaW5kZXhdCisgKiBpZiBpdCBoYXMgYmVlbiBzZXQsIHdo aWNoIGl0IHdvdWxkIGJlIGlmIEV4ZWNEb0luaXRpYWxQYXJ0aXRpb25QcnVuaW5nKCkKKyAqIHdv dWxkIGhhdmUgZG9uZSB0aGUgaW5pdGlhbCBwcnVuaW5nLgogICoKICAqIElmIHN1YnBsYW5zIGFy ZSBpbmRlZWQgcHJ1bmVkLCBzdWJwbGFuX21hcCBhcnJheXMgY29udGFpbmVkIGluIHRoZSByZXR1 cm5lZAogICogUGFydGl0aW9uUHJ1bmVTdGF0ZSBhcmUgcmUtc2VxdWVuY2VkIHRvIG5vdCBjb3Vu dCB0aG9zZSwgdGhvdWdoIG9ubHkgaWYgdGhlCkBAIC0xNzk2LDkgKzE3OTksMTAgQEAgRXhlY0lu aXRQYXJ0aXRpb25QcnVuaW5nKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLAogCQkJCQkJIEJpdG1hcHNl dCAqcm9vdF9wYXJlbnRfcmVsaWRzLAogCQkJCQkJIEJpdG1hcHNldCAqKmluaXRpYWxseV92YWxp ZF9zdWJwbGFucykKIHsKLQlQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlOworCVBhcnRp dGlvblBydW5lU3RhdGUgKnBydW5lc3RhdGUgPSBOVUxMOwogCUVTdGF0ZQkgICAqZXN0YXRlID0g cGxhbnN0YXRlLT5zdGF0ZTsKIAlQYXJ0aXRpb25QcnVuZUluZm8gKnBydW5laW5mbzsKKwlQYXJ0 aXRpb25QcnVuZVJlc3VsdCAqcHJ1bmVyZXN1bHQgPSBOVUxMOwogCiAJLyogT2J0YWluIHRoZSBw cnVuZWluZm8gd2UgbmVlZCwgYW5kIG1ha2Ugc3VyZSBpdCdzIHRoZSByaWdodCBvbmUgKi8KIAlw cnVuZWluZm8gPSBsaXN0X250aChlc3RhdGUtPmVzX3BhcnRfcHJ1bmVfaW5mb3MsIHBhcnRfcHJ1 bmVfaW5kZXgpOwpAQCAtMTgxNCwyMiArMTgxOCw1NiBAQCBFeGVjSW5pdFBhcnRpdGlvblBydW5p bmcoUGxhblN0YXRlICpwbGFuc3RhdGUsCiAJLyogV2UgbWF5IG5lZWQgYW4gZXhwcmVzc2lvbiBj b250ZXh0IHRvIGV2YWx1YXRlIHBhcnRpdGlvbiBleHBycyAqLwogCUV4ZWNBc3NpZ25FeHByQ29u dGV4dChlc3RhdGUsIHBsYW5zdGF0ZSk7CiAKLQkvKiBDcmVhdGUgdGhlIHdvcmtpbmcgZGF0YSBz dHJ1Y3R1cmUgZm9yIHBydW5pbmcgKi8KLQlwcnVuZXN0YXRlID0gRXhlY0NyZWF0ZVBhcnRpdGlv blBydW5lU3RhdGUocGxhbnN0YXRlLCBlc3RhdGUsIHBydW5laW5mbywKLQkJCQkJCQkJCQkJICAg cHJ1bmVpbmZvLT5uZWVkc19pbml0X3BydW5pbmcsCi0JCQkJCQkJCQkJCSAgIHBydW5laW5mby0+ bmVlZHNfZXhlY19wcnVuaW5nKTsKKwkvKiBJbml0aWFsIHBydW5pbmcgYWxyZWFkeSBkb25lIGlm IGVzX3BhcnRfcHJ1bmVfcmVzdWx0cyBoYXMgYmVlbiBzZXQuICovCisJaWYgKGVzdGF0ZS0+ZXNf cGFydF9wcnVuZV9yZXN1bHRzKQorCXsKKwkJcHJ1bmVyZXN1bHQgPSBsaXN0X250aF9ub2RlKFBh cnRpdGlvblBydW5lUmVzdWx0LAorCQkJCQkJCQkJZXN0YXRlLT5lc19wYXJ0X3BydW5lX3Jlc3Vs dHMsCisJCQkJCQkJCQlwYXJ0X3BydW5lX2luZGV4KTsKKwkJaWYgKCFibXNfZXF1YWwocm9vdF9w YXJlbnRfcmVsaWRzLCBwcnVuZWluZm8tPnJvb3RfcGFyZW50X3JlbGlkcykpCisJCQllcmVwb3J0 KEVSUk9SLAorCQkJCQllcnJjb2RlKEVSUkNPREVfSU5URVJOQUxfRVJST1IpLAorCQkJCQllcnJt c2dfaW50ZXJuYWwoIm1pc21hdGNoaW5nIFBhcnRpdGlvblBydW5lSW5mbyBhbmQgUGFydGl0aW9u UHJ1bmVSZXN1bHQgYXQgcGFydF9wcnVuZV9pbmRleCAlZCIsCisJCQkJCQkJCQlwYXJ0X3BydW5l X2luZGV4KSwKKwkJCQkJZXJyZGV0YWlsX2ludGVybmFsKCJwcnVucmVzdWx0IHJlbGlkcyAlcywg cHJ1bmVpbmZvIHJlbGlkcyAlcyIsCisJCQkJCQkJCQkgICBibXNUb1N0cmluZyhwcnVuZXJlc3Vs dC0+cm9vdF9wYXJlbnRfcmVsaWRzKSwKKwkJCQkJCQkJCSAgIGJtc1RvU3RyaW5nKHBydW5laW5m by0+cm9vdF9wYXJlbnRfcmVsaWRzKSkpOworCX0KKworCWlmIChwcnVuZXJlc3VsdCA9PSBOVUxM IHx8IHBydW5laW5mby0+bmVlZHNfZXhlY19wcnVuaW5nKQorCXsKKwkJLyogV2UgbWF5IG5lZWQg YW4gZXhwcmVzc2lvbiBjb250ZXh0IHRvIGV2YWx1YXRlIHBhcnRpdGlvbiBleHBycyAqLworCQlF eGVjQXNzaWduRXhwckNvbnRleHQoZXN0YXRlLCBwbGFuc3RhdGUpOworCisJCS8qCisJCSAqIENy ZWF0ZSB0aGUgd29ya2luZyBkYXRhIHN0cnVjdHVyZSBmb3IgcHJ1bmluZy4gIE5vIG5lZWQgdG8g Y29uc2lkZXIKKwkJICogaW5pdGlhbCBwcnVuaW5nIHN0ZXBzIGlmIHdlIGhhdmUgYSBQYXJ0aXRp b25QcnVuZVJlc3VsdC4KKwkJICovCisJCXBydW5lc3RhdGUgPSBFeGVjQ3JlYXRlUGFydGl0aW9u UHJ1bmVTdGF0ZShwbGFuc3RhdGUsIGVzdGF0ZSwKKwkJCQkJCQkJCQkJCSAgIHBydW5laW5mbywK KwkJCQkJCQkJCQkJCSAgIHBydW5lcmVzdWx0ID09IE5VTEwsCisJCQkJCQkJCQkJCXBydW5laW5m by0+bmVlZHNfZXhlY19wcnVuaW5nKTsKKwl9CiAKIAkvKgogCSAqIFBlcmZvcm0gYW4gaW5pdGlh bCBwYXJ0aXRpb24gcHJ1bmUgcGFzcywgaWYgcmVxdWlyZWQuCiAJICovCi0JaWYgKHBydW5lc3Rh dGUtPmRvX2luaXRpYWxfcHJ1bmUpCi0JCSppbml0aWFsbHlfdmFsaWRfc3VicGxhbnMgPSBFeGVj RmluZE1hdGNoaW5nU3ViUGxhbnMocHJ1bmVzdGF0ZSwgdHJ1ZSk7CisJaWYgKHBydW5lcmVzdWx0 KQorCXsKKwkJKmluaXRpYWxseV92YWxpZF9zdWJwbGFucyA9IGJtc19jb3B5KHBydW5lcmVzdWx0 LT52YWxpZHN1YnBsYW5zKTsKKwl9CisJZWxzZSBpZiAocHJ1bmVzdGF0ZSAmJiBwcnVuZXN0YXRl LT5kb19pbml0aWFsX3BydW5lKQorCXsKKwkJKmluaXRpYWxseV92YWxpZF9zdWJwbGFucyA9IEV4 ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhwcnVuZXN0YXRlLCB0cnVlLAorCQkJCQkJCQkJCQkJCQkJ IE5VTEwpOworCX0KIAllbHNlCiAJewotCQkvKiBObyBwcnVuaW5nLCBzbyB3ZSdsbCBuZWVkIHRv IGluaXRpYWxpemUgYWxsIHN1YnBsYW5zICovCisJCS8qIE5vIGluaXRpYWwgcHJ1bmluZywgc28g d2UnbGwgbmVlZCB0byBpbml0aWFsaXplIGFsbCBzdWJwbGFucyAqLwogCQlBc3NlcnQobl90b3Rh bF9zdWJwbGFucyA+IDApOwogCQkqaW5pdGlhbGx5X3ZhbGlkX3N1YnBsYW5zID0gYm1zX2FkZF9y YW5nZShOVUxMLCAwLAogCQkJCQkJCQkJCQkJICBuX3RvdGFsX3N1YnBsYW5zIC0gMSk7CisJCXJl dHVybiBwcnVuZXN0YXRlOwogCX0KIAogCS8qCkBAIC0xODM3LDcgKzE4NzUsOCBAQCBFeGVjSW5p dFBhcnRpdGlvblBydW5pbmcoUGxhblN0YXRlICpwbGFuc3RhdGUsCiAJICogdGhhdCB3ZXJlIHJl bW92ZWQgYWJvdmUgZHVlIHRvIGluaXRpYWwgcHJ1bmluZy4gIE5vIG5lZWQgdG8gZG8gdGhpcyBp ZgogCSAqIG5vIHN0ZXBzIHdlcmUgcmVtb3ZlZC4KIAkgKi8KLQlpZiAoYm1zX251bV9tZW1iZXJz KCppbml0aWFsbHlfdmFsaWRfc3VicGxhbnMpIDwgbl90b3RhbF9zdWJwbGFucykKKwlpZiAocHJ1 bmVzdGF0ZSAmJgorCQlibXNfbnVtX21lbWJlcnMoKmluaXRpYWxseV92YWxpZF9zdWJwbGFucykg PCBuX3RvdGFsX3N1YnBsYW5zKQogCXsKIAkJLyoKIAkJICogV2UgY2FuIHNhZmVseSBza2lwIHRo aXMgd2hlbiAhZG9fZXhlY19wcnVuZSwgZXZlbiB0aG91Z2ggdGhhdApAQCAtMjI5NSwxMCArMjMz NCwxNCBAQCBQYXJ0aXRpb25QcnVuZUZpeFN1YlBsYW5NYXAoUGFydGl0aW9uUHJ1bmVTdGF0ZSAq cHJ1bmVzdGF0ZSwKICAqIFBhc3MgaW5pdGlhbF9wcnVuZSBpZiBQQVJBTV9FWEVDIFBhcmFtcyBj YW5ub3QgeWV0IGJlIGV2YWx1YXRlZC4gIFRoaXMKICAqIGRpZmZlcmVudGlhdGVzIHRoZSBpbml0 aWFsIGV4ZWN1dG9yLXRpbWUgcHJ1bmluZyBzdGVwIGZyb20gbGF0ZXIKICAqIHJ1bnRpbWUgcHJ1 bmluZy4KKyAqCisgKiBSVCBpbmRleGVzIG9mIGxlYWYgcGFydGl0aW9ucyBzY2FubmVkIGJ5IHRo ZSBjaG9zZW4gc3VicGxhbnMgYXJlIGFkZGVkIHRvCisgKiAqc2Nhbl9sZWFmcGFydF9ydGlzIGlm IHRoZSBwb2ludGVyIGlzIG5vbi1OVUxMLgogICovCiBCaXRtYXBzZXQgKgogRXhlY0ZpbmRNYXRj aGluZ1N1YlBsYW5zKFBhcnRpdGlvblBydW5lU3RhdGUgKnBydW5lc3RhdGUsCi0JCQkJCQkgYm9v bCBpbml0aWFsX3BydW5lKQorCQkJCQkJIGJvb2wgaW5pdGlhbF9wcnVuZSwKKwkJCQkJCSBCaXRt YXBzZXQgKipzY2FuX2xlYWZwYXJ0X3J0aXMpCiB7CiAJQml0bWFwc2V0ICAqcmVzdWx0ID0gTlVM TDsKIAlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CkBAIC0yMzMzLDEwICsyMzc2LDEwIEBAIEV4 ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlLAog CQkgKi8KIAkJcHBydW5lID0gJnBydW5lZGF0YS0+cGFydHJlbHBydW5lZGF0YVswXTsKIAkJZmlu ZF9tYXRjaGluZ19zdWJwbGFuc19yZWN1cnNlKHBydW5lZGF0YSwgcHBydW5lLCBpbml0aWFsX3By dW5lLAotCQkJCQkJCQkJICAgJnJlc3VsdCk7CisJCQkJCQkJCQkgICAmcmVzdWx0LCBzY2FuX2xl YWZwYXJ0X3J0aXMpOwogCiAJCS8qIEV4cHJlc3Npb24gZXZhbCBtYXkgaGF2ZSB1c2VkIHNwYWNl IGluIEV4cHJDb250ZXh0IHRvbyAqLwotCQlpZiAocHBydW5lLT5leGVjX3BydW5pbmdfc3RlcHMp CisJCWlmIChwcHJ1bmUtPmV4ZWNfcHJ1bmluZ19zdGVwcyAmJiAhaW5pdGlhbF9wcnVuZSkKIAkJ CVJlc2V0RXhwckNvbnRleHQocHBydW5lLT5leGVjX2NvbnRleHQuZXhwcmNvbnRleHQpOwogCX0K IApAQCAtMjM0Nyw2ICsyMzkwLDggQEAgRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKFBhcnRpdGlv blBydW5lU3RhdGUgKnBydW5lc3RhdGUsCiAKIAkvKiBDb3B5IHJlc3VsdCBvdXQgb2YgdGhlIHRl bXAgY29udGV4dCBiZWZvcmUgd2UgcmVzZXQgaXQgKi8KIAlyZXN1bHQgPSBibXNfY29weShyZXN1 bHQpOworCWlmIChzY2FuX2xlYWZwYXJ0X3J0aXMpCisJCSpzY2FuX2xlYWZwYXJ0X3J0aXMgPSBi bXNfY29weSgqc2Nhbl9sZWFmcGFydF9ydGlzKTsKIAogCU1lbW9yeUNvbnRleHRSZXNldChwcnVu ZXN0YXRlLT5wcnVuZV9jb250ZXh0KTsKIApAQCAtMjM1NywxMyArMjQwMiwxNSBAQCBFeGVjRmlu ZE1hdGNoaW5nU3ViUGxhbnMoUGFydGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0ZSwKICAqIGZp bmRfbWF0Y2hpbmdfc3VicGxhbnNfcmVjdXJzZQogICoJCVJlY3Vyc2l2ZSB3b3JrZXIgZnVuY3Rp b24gZm9yIEV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucwogICoKLSAqIEFkZHMgdmFsaWQgKG5vbi1w cnVuYWJsZSkgc3VicGxhbiBJRHMgdG8gKnZhbGlkc3VicGxhbnMKKyAqIEFkZHMgdmFsaWQgKG5v bi1wcnVuYWJsZSkgc3VicGxhbiBJRHMgdG8gKnZhbGlkc3VicGxhbnMgYW5kIFJUIGluZGV4ZXMg b2YKKyAqIG9mIHRoZSBjb3JyZXNwb25kaW5nIGxlYWYgcGFydGl0aW9ucyB0byAqc2Nhbl9sZWFm cGFydF9ydGlzIChpZiBhc2tlZCBmb3IpLgogICovCiBzdGF0aWMgdm9pZAogZmluZF9tYXRjaGlu Z19zdWJwbGFuc19yZWN1cnNlKFBhcnRpdGlvblBydW5pbmdEYXRhICpwcnVuZWRhdGEsCiAJCQkJ CQkJICAgUGFydGl0aW9uZWRSZWxQcnVuaW5nRGF0YSAqcHBydW5lLAogCQkJCQkJCSAgIGJvb2wg aW5pdGlhbF9wcnVuZSwKLQkJCQkJCQkgICBCaXRtYXBzZXQgKip2YWxpZHN1YnBsYW5zKQorCQkJ CQkJCSAgIEJpdG1hcHNldCAqKnZhbGlkc3VicGxhbnMsCisJCQkJCQkJICAgQml0bWFwc2V0ICoq c2Nhbl9sZWFmcGFydF9ydGlzKQogewogCUJpdG1hcHNldCAgKnBhcnRzZXQ7CiAJaW50CQkJaTsK QEAgLTIzOTAsOCArMjQzNywxNCBAQCBmaW5kX21hdGNoaW5nX3N1YnBsYW5zX3JlY3Vyc2UoUGFy dGl0aW9uUHJ1bmluZ0RhdGEgKnBydW5lZGF0YSwKIAl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1i ZXIocGFydHNldCwgaSkpID49IDApCiAJewogCQlpZiAocHBydW5lLT5zdWJwbGFuX21hcFtpXSA+ PSAwKQorCQl7CiAJCQkqdmFsaWRzdWJwbGFucyA9IGJtc19hZGRfbWVtYmVyKCp2YWxpZHN1YnBs YW5zLAogCQkJCQkJCQkJCQlwcHJ1bmUtPnN1YnBsYW5fbWFwW2ldKTsKKwkJCUFzc2VydChwcHJ1 bmUtPnJ0aV9tYXBbaV0gPiAwKTsKKwkJCWlmIChzY2FuX2xlYWZwYXJ0X3J0aXMpCisJCQkJKnNj YW5fbGVhZnBhcnRfcnRpcyA9IGJtc19hZGRfbWVtYmVyKCpzY2FuX2xlYWZwYXJ0X3J0aXMsCisJ CQkJCQkJCQkJCQkJIHBwcnVuZS0+cnRpX21hcFtpXSk7CisJCX0KIAkJZWxzZQogCQl7CiAJCQlp bnQJCQlwYXJ0aWR4ID0gcHBydW5lLT5zdWJwYXJ0X21hcFtpXTsKQEAgLTIzOTksNyArMjQ1Miw4 IEBAIGZpbmRfbWF0Y2hpbmdfc3VicGxhbnNfcmVjdXJzZShQYXJ0aXRpb25QcnVuaW5nRGF0YSAq cHJ1bmVkYXRhLAogCQkJaWYgKHBhcnRpZHggPj0gMCkKIAkJCQlmaW5kX21hdGNoaW5nX3N1YnBs YW5zX3JlY3Vyc2UocHJ1bmVkYXRhLAogCQkJCQkJCQkJCQkgICAmcHJ1bmVkYXRhLT5wYXJ0cmVs cHJ1bmVkYXRhW3BhcnRpZHhdLAotCQkJCQkJCQkJCQkgICBpbml0aWFsX3BydW5lLCB2YWxpZHN1 YnBsYW5zKTsKKwkJCQkJCQkJCQkJICAgaW5pdGlhbF9wcnVuZSwgdmFsaWRzdWJwbGFucywKKwkJ CQkJCQkJCQkJICAgc2Nhbl9sZWFmcGFydF9ydGlzKTsKIAkJCWVsc2UKIAkJCXsKIAkJCQkvKgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1V0aWxzLmMgYi9zcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjVXRpbHMuYwppbmRleCBjMzNhM2MwYmVjLi4wMzVlZDhhODcyIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjVXRpbHMuYworKysgYi9zcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjVXRpbHMuYwpAQCAtMTQwLDYgKzE0MCw3IEBAIENyZWF0ZUV4ZWN1dG9y U3RhdGUodm9pZCkKIAllc3RhdGUtPmVzX3BhcmFtX2V4ZWNfdmFscyA9IE5VTEw7CiAKIAllc3Rh dGUtPmVzX3F1ZXJ5RW52ID0gTlVMTDsKKwllc3RhdGUtPmVzX3BhcnRfcHJ1bmVfcmVzdWx0cyA9 IE5JTDsKIAogCWVzdGF0ZS0+ZXNfcXVlcnlfY3h0ID0gcWNvbnRleHQ7CiAKQEAgLTgwMCw3ICs4 MDEsMTIgQEAgRXhlY0dldFJhbmdlVGFibGVSZWxhdGlvbihFU3RhdGUgKmVzdGF0ZSwgSW5kZXgg cnRpKQogCiAJCUFzc2VydChydGUtPnJ0ZWtpbmQgPT0gUlRFX1JFTEFUSU9OKTsKIAotCQlpZiAo IUlzUGFyYWxsZWxXb3JrZXIoKSkKKwkJLyoKKwkJICogTXVzdCB0YWtlIGEgbG9jayBvbiB0aGUg cmVsYXRpb24gaWYgd2UgZ290IGhlcmUgYnkgd2F5IG9mCisJCSAqIEV4ZWNMb2NrUmVsYXRpb25z SWZOZWVkZWQoKS4KKwkJICovCisJCWlmICghSXNQYXJhbGxlbFdvcmtlcigpICYmCisJCQkoZXN0 YXRlLT5lc190b3BfZWZsYWdzICYgRVhFQ19GTEFHX0dFVF9MT0NLUykgPT0gMCkKIAkJewogCQkJ LyoKIAkJCSAqIEluIGEgbm9ybWFsIHF1ZXJ5LCB3ZSBzaG91bGQgYWxyZWFkeSBoYXZlIHRoZSBh cHByb3ByaWF0ZSBsb2NrLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFw cGVuZC5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVuZC5jCmluZGV4IGNiMjU0OTli M2YuLjJmNTg1NzkzZGEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBl bmQuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQXBwZW5kLmMKQEAgLTE1Niw3ICsx NTYsOCBAQCBFeGVjSW5pdEFwcGVuZChBcHBlbmQgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQg ZWZsYWdzKQogCQkgKiBzdWJwbGFuLCB3ZSBjYW4gZmlsbCBhc192YWxpZF9zdWJwbGFucyBpbW1l ZGlhdGVseSwgcHJldmVudGluZwogCQkgKiBsYXRlciBjYWxscyB0byBFeGVjRmluZE1hdGNoaW5n U3ViUGxhbnMuCiAJCSAqLwotCQlpZiAoIXBydW5lc3RhdGUtPmRvX2V4ZWNfcHJ1bmUgJiYgbnBs YW5zID4gMCkKKwkJaWYgKGFwcGVuZHN0YXRlLT5hc19wcnVuZV9zdGF0ZSA9PSBOVUxMIHx8CisJ CQkoIWFwcGVuZHN0YXRlLT5hc19wcnVuZV9zdGF0ZS0+ZG9fZXhlY19wcnVuZSAmJiBucGxhbnMg PiAwKSkKIAkJCWFwcGVuZHN0YXRlLT5hc192YWxpZF9zdWJwbGFucyA9IGJtc19hZGRfcmFuZ2Uo TlVMTCwgMCwgbnBsYW5zIC0gMSk7CiAJfQogCWVsc2UKQEAgLTU3OCw3ICs1NzksNyBAQCBjaG9v c2VfbmV4dF9zdWJwbGFuX2xvY2FsbHkoQXBwZW5kU3RhdGUgKm5vZGUpCiAJCX0KIAkJZWxzZSBp ZiAobm9kZS0+YXNfdmFsaWRfc3VicGxhbnMgPT0gTlVMTCkKIAkJCW5vZGUtPmFzX3ZhbGlkX3N1 YnBsYW5zID0KLQkJCQlFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMobm9kZS0+YXNfcHJ1bmVfc3Rh dGUsIGZhbHNlKTsKKwkJCQlFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMobm9kZS0+YXNfcHJ1bmVf c3RhdGUsIGZhbHNlLCBOVUxMKTsKIAogCQl3aGljaHBsYW4gPSAtMTsKIAl9CkBAIC02NDMsNyAr NjQ0LDcgQEAgY2hvb3NlX25leHRfc3VicGxhbl9mb3JfbGVhZGVyKEFwcGVuZFN0YXRlICpub2Rl KQogCQlpZiAobm9kZS0+YXNfdmFsaWRfc3VicGxhbnMgPT0gTlVMTCkKIAkJewogCQkJbm9kZS0+ YXNfdmFsaWRfc3VicGxhbnMgPQotCQkJCUV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhub2RlLT5h c19wcnVuZV9zdGF0ZSwgZmFsc2UpOworCQkJCUV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhub2Rl LT5hc19wcnVuZV9zdGF0ZSwgZmFsc2UsIE5VTEwpOwogCiAJCQkvKgogCQkJICogTWFyayBlYWNo IGludmFsaWQgcGxhbiBhcyBmaW5pc2hlZCB0byBhbGxvdyB0aGUgbG9vcCBiZWxvdyB0bwpAQCAt NzE4LDcgKzcxOSw3IEBAIGNob29zZV9uZXh0X3N1YnBsYW5fZm9yX3dvcmtlcihBcHBlbmRTdGF0 ZSAqbm9kZSkKIAllbHNlIGlmIChub2RlLT5hc192YWxpZF9zdWJwbGFucyA9PSBOVUxMKQogCXsK IAkJbm9kZS0+YXNfdmFsaWRfc3VicGxhbnMgPQotCQkJRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5z KG5vZGUtPmFzX3BydW5lX3N0YXRlLCBmYWxzZSk7CisJCQlFeGVjRmluZE1hdGNoaW5nU3ViUGxh bnMobm9kZS0+YXNfcHJ1bmVfc3RhdGUsIGZhbHNlLCBOVUxMKTsKIAkJbWFya19pbnZhbGlkX3N1 YnBsYW5zX2FzX2ZpbmlzaGVkKG5vZGUpOwogCX0KIApAQCAtODY5LDcgKzg3MCw3IEBAIEV4ZWNB cHBlbmRBc3luY0JlZ2luKEFwcGVuZFN0YXRlICpub2RlKQogCWlmIChub2RlLT5hc192YWxpZF9z dWJwbGFucyA9PSBOVUxMKQogCXsKIAkJbm9kZS0+YXNfdmFsaWRfc3VicGxhbnMgPQotCQkJRXhl Y0ZpbmRNYXRjaGluZ1N1YlBsYW5zKG5vZGUtPmFzX3BydW5lX3N0YXRlLCBmYWxzZSk7CisJCQlF eGVjRmluZE1hdGNoaW5nU3ViUGxhbnMobm9kZS0+YXNfcHJ1bmVfc3RhdGUsIGZhbHNlLCBOVUxM KTsKIAogCQljbGFzc2lmeV9tYXRjaGluZ19zdWJwbGFucyhub2RlKTsKIAl9CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYyBiL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5jCmluZGV4IDM5OWIzOWM1OTguLmM2NTMwODQ1MTUgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5jCisrKyBiL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5jCkBAIC0xMDQsNyArMTA0LDggQEAg RXhlY0luaXRNZXJnZUFwcGVuZChNZXJnZUFwcGVuZCAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGlu dCBlZmxhZ3MpCiAJCSAqIHN1YnBsYW4sIHdlIGNhbiBmaWxsIG1zX3ZhbGlkX3N1YnBsYW5zIGlt bWVkaWF0ZWx5LCBwcmV2ZW50aW5nCiAJCSAqIGxhdGVyIGNhbGxzIHRvIEV4ZWNGaW5kTWF0Y2hp bmdTdWJQbGFucy4KIAkJICovCi0JCWlmICghcHJ1bmVzdGF0ZS0+ZG9fZXhlY19wcnVuZSAmJiBu cGxhbnMgPiAwKQorCQlpZiAobWVyZ2VzdGF0ZS0+bXNfcHJ1bmVfc3RhdGUgPT0gTlVMTCB8fAor CQkJKCFtZXJnZXN0YXRlLT5tc19wcnVuZV9zdGF0ZS0+ZG9fZXhlY19wcnVuZSAmJiBucGxhbnMg PiAwKSkKIAkJCW1lcmdlc3RhdGUtPm1zX3ZhbGlkX3N1YnBsYW5zID0gYm1zX2FkZF9yYW5nZShO VUxMLCAwLCBucGxhbnMgLSAxKTsKIAl9CiAJZWxzZQpAQCAtMjE5LDcgKzIyMCw3IEBAIEV4ZWNN ZXJnZUFwcGVuZChQbGFuU3RhdGUgKnBzdGF0ZSkKIAkJICovCiAJCWlmIChub2RlLT5tc192YWxp ZF9zdWJwbGFucyA9PSBOVUxMKQogCQkJbm9kZS0+bXNfdmFsaWRfc3VicGxhbnMgPQotCQkJCUV4 ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhub2RlLT5tc19wcnVuZV9zdGF0ZSwgZmFsc2UpOworCQkJ CUV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhub2RlLT5tc19wcnVuZV9zdGF0ZSwgZmFsc2UsIE5V TEwpOwogCiAJCS8qCiAJCSAqIEZpcnN0IHRpbWUgdGhyb3VnaDogcHVsbCB0aGUgZmlyc3QgdHVw bGUgZnJvbSBlYWNoIHZhbGlkIHN1YnBsYW4sCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGxhbi9zZXRyZWZzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZz LmMKaW5kZXggYjRmYThkOTBiYy4uZmYzNjNiZTgxMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L3NldHJlZnMuYwpAQCAtMzcyLDYgKzM3Miw3IEBAIHNldF9wbGFuX3JlZmVyZW5jZXMoUGxhbm5l ckluZm8gKnJvb3QsIFBsYW4gKnBsYW4pCiAJewogCQlQYXJ0aXRpb25QcnVuZUluZm8gKnBydW5l aW5mbyA9IGxmaXJzdChsYyk7CiAJCUxpc3RDZWxsICAgKmw7CisJCUJpdG1hcHNldCAgKmxlYWZw YXJ0X3J0aXMgPSBOVUxMOwogCiAJCXBydW5laW5mby0+cm9vdF9wYXJlbnRfcmVsaWRzID0KIAkJ CW9mZnNldF9yZWxpZF9zZXQocHJ1bmVpbmZvLT5yb290X3BhcmVudF9yZWxpZHMsIHJ0b2Zmc2V0 KTsKQEAgLTM4MywxNyArMzg0LDUyIEBAIHNldF9wbGFuX3JlZmVyZW5jZXMoUGxhbm5lckluZm8g KnJvb3QsIFBsYW4gKnBsYW4pCiAJCQlmb3JlYWNoKGwyLCBwcnVuZV9pbmZvcykKIAkJCXsKIAkJ CQlQYXJ0aXRpb25lZFJlbFBydW5lSW5mbyAqcGluZm8gPSBsZmlyc3QobDIpOworCQkJCWludAkJ aTsKIAogCQkJCS8qIFJUIGluZGV4IG9mIHRoZSB0YWJsZSB0byB3aGljaCB0aGUgcGluZm8gYmVs b25ncy4gKi8KIAkJCQlwaW5mby0+cnRpbmRleCArPSBydG9mZnNldDsKKworCQkJCS8qIEFsc28g b2YgdGhlIGxlYWYgcGFydGl0aW9ucyB0aGF0IG1pZ2h0IGJlIHNjYW5uZWQuICovCisJCQkJZm9y IChpID0gMDsgaSA8IHBpbmZvLT5ucGFydHM7IGkrKykKKwkJCQl7CisJCQkJCWlmIChwaW5mby0+ cnRpX21hcFtpXSA+IDAgJiYgcGluZm8tPnN1YnBsYW5fbWFwW2ldID49IDApCisJCQkJCXsKKwkJ CQkJCXBpbmZvLT5ydGlfbWFwW2ldICs9IHJ0b2Zmc2V0OworCQkJCQkJbGVhZnBhcnRfcnRpcyA9 IGJtc19hZGRfbWVtYmVyKGxlYWZwYXJ0X3J0aXMsCisJCQkJCQkJCQkJCQkJICAgcGluZm8tPnJ0 aV9tYXBbaV0pOworCQkJCQl9CisJCQkJfQogCQkJfQogCiAJCX0KIAorCQlpZiAocHJ1bmVpbmZv LT5uZWVkc19pbml0X3BydW5pbmcpCisJCXsKKwkJCWdsb2ItPmNvbnRhaW5zSW5pdGlhbFBydW5p bmcgPSB0cnVlOworCisJCQkvKgorCQkJICogRGVsZXRlIHRoZSBsZWFmIHBhcnRpdGlvbiBSVElz IGZyb20gdGhlIHNldCBvZiByZWxhdGlvbnMgdG8gYmUKKwkJCSAqIGxvY2tlZCBieSBBY3F1aXJl RXhlY3V0b3JMb2NrcygpLiAgVGhlIGFjdHVhbCBzZXQgb2YgbGVhZgorCQkJICogcGFydGl0aW9u cyB0byBiZSBsb2NrZWQgaXMgY29tcHV0ZWQgYnkKKwkJCSAqIEV4ZWNMb2NrUmVsYXRpb25zSWZO ZWVkZWQoKS4KKwkJCSAqLworCQkJZ2xvYi0+bWluTG9ja1JlbGlkcyA9IGJtc19kZWxfbWVtYmVy cyhnbG9iLT5taW5Mb2NrUmVsaWRzLAorCQkJCQkJCQkJCQkJICBsZWFmcGFydF9ydGlzKTsKKwkJ fQorCiAJCWdsb2ItPnBhcnRQcnVuZUluZm9zID0gbGFwcGVuZChnbG9iLT5wYXJ0UHJ1bmVJbmZv cywgcHJ1bmVpbmZvKTsKIAkJZ2xvYi0+Y29udGFpbnNJbml0aWFsUHJ1bmluZyB8PSBwcnVuZWlu Zm8tPm5lZWRzX2luaXRfcHJ1bmluZzsKIAl9CiAKKwkvKgorCSAqIEl0IHNlZW1zIHdvcnRoIGRv aW5nIGEgYm1zX2NvcHkoKSBvbiBnbG9iLT5taW5Mb2NrUmVsaWRzIGlmIHdlIGRlbGV0ZWQKKwkg KiBiaXRzIGZyb20gaXQgYWJvdmUgdG8gZ2V0IHJpZCBvZiBhbnkgZW1wdHkgdGFpbCBiaXRzLiAg SXQgc2VlbXMgYmV0dGVyCisJICogZm9yIHRoZSBsb29wIG92ZXIgdGhpcyBzZXQgaW4gQWNxdWly ZUV4ZWN1dG9yTG9ja3MoKSB0byBub3QgaGF2ZSB0byBnbworCSAqIHRocm91Z2ggdGhvc2UgdXNl bGVzcyBiaXQgd29yZHMuCisJICovCisJaWYgKGdsb2ItPmNvbnRhaW5zSW5pdGlhbFBydW5pbmcp CisJCWdsb2ItPm1pbkxvY2tSZWxpZHMgPSBibXNfY29weShnbG9iLT5taW5Mb2NrUmVsaWRzKTsK KwogCXJldHVybiByZXN1bHQ7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2Nh Y2hlL3BsYW5jYWNoZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcGxhbmNhY2hlLmMKaW5k ZXggZjExMzE3MDE0MC4uYWY1ZTliMTYwOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMv Y2FjaGUvcGxhbmNhY2hlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcGxhbmNhY2hl LmMKQEAgLTEwMCwxMyArMTAwLDEzIEBAIHN0YXRpYyB2b2lkIFJlbGVhc2VHZW5lcmljUGxhbihD YWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlKTsKIHN0YXRpYyBMaXN0ICpSZXZhbGlkYXRlQ2Fj aGVkUXVlcnkoQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwKIAkJCQkJCQkJICAgUXVlcnlF bnZpcm9ubWVudCAqcXVlcnlFbnYpOwogc3RhdGljIGJvb2wgQ2hlY2tDYWNoZWRQbGFuKENhY2hl ZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UpOworc3RhdGljIGJvb2wgR2VuZXJpY1BsYW5Jc1ZhbGlk KENhY2hlZFBsYW4gKmNwbGFuKTsKIHN0YXRpYyBDYWNoZWRQbGFuICpCdWlsZENhY2hlZFBsYW4o Q2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwgTGlzdCAqcWxpc3QsCiAJCQkJCQkJCSAgIFBh cmFtTGlzdEluZm8gYm91bmRQYXJhbXMsIFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52KTsKIHN0 YXRpYyBib29sIGNob29zZV9jdXN0b21fcGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNl LAogCQkJCQkJCSAgIFBhcmFtTGlzdEluZm8gYm91bmRQYXJhbXMpOwogc3RhdGljIGRvdWJsZSBj YWNoZWRfcGxhbl9jb3N0KENhY2hlZFBsYW4gKnBsYW4sIGJvb2wgaW5jbHVkZV9wbGFubmVyKTsK IHN0YXRpYyBRdWVyeSAqUXVlcnlMaXN0R2V0UHJpbWFyeVN0bXQoTGlzdCAqc3RtdHMpOwotc3Rh dGljIHZvaWQgQWNxdWlyZUV4ZWN1dG9yTG9ja3MoTGlzdCAqc3RtdF9saXN0LCBib29sIGFjcXVp cmUpOwogc3RhdGljIHZvaWQgQWNxdWlyZVBsYW5uZXJMb2NrcyhMaXN0ICpzdG10X2xpc3QsIGJv b2wgYWNxdWlyZSk7CiBzdGF0aWMgdm9pZCBTY2FuUXVlcnlGb3JMb2NrcyhRdWVyeSAqcGFyc2V0 cmVlLCBib29sIGFjcXVpcmUpOwogc3RhdGljIGJvb2wgU2NhblF1ZXJ5V2Fsa2VyKE5vZGUgKm5v ZGUsIGJvb2wgKmFjcXVpcmUpOwpAQCAtNzg3LDkgKzc4Nyw2IEBAIFJldmFsaWRhdGVDYWNoZWRR dWVyeShDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlLAogICoKICAqIENhbGxlciBtdXN0IGhh dmUgYWxyZWFkeSBjYWxsZWQgUmV2YWxpZGF0ZUNhY2hlZFF1ZXJ5IHRvIHZlcmlmeSB0aGF0IHRo ZQogICogcXVlcnl0cmVlIGlzIHVwIHRvIGRhdGUuCi0gKgotICogT24gYSAidHJ1ZSIgcmV0dXJu LCB3ZSBoYXZlIGFjcXVpcmVkIHRoZSBsb2NrcyBuZWVkZWQgdG8gcnVuIHRoZSBwbGFuLgotICog KFdlIG11c3QgZG8gdGhpcyBmb3IgdGhlICJ0cnVlIiByZXN1bHQgdG8gYmUgcmFjZS1jb25kaXRp b24tZnJlZS4pCiAgKi8KIHN0YXRpYyBib29sCiBDaGVja0NhY2hlZFBsYW4oQ2FjaGVkUGxhblNv dXJjZSAqcGxhbnNvdXJjZSkKQEAgLTgwMyw2MCArODAwLDY5IEBAIENoZWNrQ2FjaGVkUGxhbihD YWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlKQogCWlmICghcGxhbikKIAkJcmV0dXJuIGZhbHNl OwogCi0JQXNzZXJ0KHBsYW4tPm1hZ2ljID09IENBQ0hFRFBMQU5fTUFHSUMpOwotCS8qIEdlbmVy aWMgcGxhbnMgYXJlIG5ldmVyIG9uZS1zaG90ICovCi0JQXNzZXJ0KCFwbGFuLT5pc19vbmVzaG90 KTsKKwlpZiAoR2VuZXJpY1BsYW5Jc1ZhbGlkKHBsYW4pKQorCQlyZXR1cm4gdHJ1ZTsKIAogCS8q Ci0JICogSWYgcGxhbiBpc24ndCB2YWxpZCBmb3IgY3VycmVudCByb2xlLCB3ZSBjYW4ndCB1c2Ug aXQuCisJICogUGxhbiBoYXMgYmVlbiBpbnZhbGlkYXRlZCwgc28gdW5saW5rIGl0IGZyb20gdGhl IHBhcmVudCBhbmQgcmVsZWFzZSBpdC4KIAkgKi8KLQlpZiAocGxhbi0+aXNfdmFsaWQgJiYgcGxh bi0+ZGVwZW5kc09uUm9sZSAmJgotCQlwbGFuLT5wbGFuUm9sZUlkICE9IEdldFVzZXJJZCgpKQot CQlwbGFuLT5pc192YWxpZCA9IGZhbHNlOworCVJlbGVhc2VHZW5lcmljUGxhbihwbGFuc291cmNl KTsKIAotCS8qCi0JICogSWYgaXQgYXBwZWFycyB2YWxpZCwgYWNxdWlyZSBsb2NrcyBhbmQgcmVj aGVjazsgdGhpcyBpcyBtdWNoIHRoZSBzYW1lCi0JICogbG9naWMgYXMgaW4gUmV2YWxpZGF0ZUNh Y2hlZFF1ZXJ5LCBidXQgZm9yIGEgcGxhbi4KLQkgKi8KLQlpZiAocGxhbi0+aXNfdmFsaWQpCisJ cmV0dXJuIGZhbHNlOworfQorCisvKgorICogR2VuZXJpY1BsYW5Jc1ZhbGlkCisgKgkJSXMgYSBn ZW5lcmljIHBsYW4gc3RpbGwgdmFsaWQ/CisgKgorICogSXQgbWF5IGhhdmUgZ29uZSBzdGFsZSBk dWUgdG8gY29uY3VycmVudCBzY2hlbWEgbW9kaWZpY2F0aW9ucyBvZiByZWxhdGlvbnMKKyAqIG1l bnRpb25lZCBpbiB0aGUgcGxhbiBvciBhIGNvdXBsZSBvZiBvdGhlciB0aGluZ3MgbWVudGlvbmVk IGJlbG93LgorICovCitzdGF0aWMgYm9vbAorR2VuZXJpY1BsYW5Jc1ZhbGlkKENhY2hlZFBsYW4g KmNwbGFuKQoreworCUFzc2VydChjcGxhbiAhPSBOVUxMKTsKKwlBc3NlcnQoY3BsYW4tPm1hZ2lj ID09IENBQ0hFRFBMQU5fTUFHSUMpOworCS8qIEdlbmVyaWMgcGxhbnMgYXJlIG5ldmVyIG9uZS1z aG90ICovCisJQXNzZXJ0KCFjcGxhbi0+aXNfb25lc2hvdCk7CisKKwlpZiAoY3BsYW4tPmlzX3Zh bGlkKQogCXsKIAkJLyoKIAkJICogUGxhbiBtdXN0IGhhdmUgcG9zaXRpdmUgcmVmY291bnQgYmVj YXVzZSBpdCBpcyByZWZlcmVuY2VkIGJ5CiAJCSAqIHBsYW5zb3VyY2U7IHNvIG5vIG5lZWQgdG8g ZmVhciBpdCBkaXNhcHBlYXJzIHVuZGVyIHVzIGhlcmUuCiAJCSAqLwotCQlBc3NlcnQocGxhbi0+ cmVmY291bnQgPiAwKTsKLQotCQlBY3F1aXJlRXhlY3V0b3JMb2NrcyhwbGFuLT5zdG10X2xpc3Qs IHRydWUpOworCQlBc3NlcnQoY3BsYW4tPnJlZmNvdW50ID4gMCk7CiAKIAkJLyoKLQkJICogSWYg cGxhbiB3YXMgdHJhbnNpZW50LCBjaGVjayB0byBzZWUgaWYgVHJhbnNhY3Rpb25YbWluIGhhcwot CQkgKiBhZHZhbmNlZCwgYW5kIGlmIHNvIGludmFsaWRhdGUgaXQuCisJCSAqIElmIHBsYW4gaXNu J3QgdmFsaWQgZm9yIGN1cnJlbnQgcm9sZSwgd2UgY2FuJ3QgdXNlIGl0LgogCQkgKi8KLQkJaWYg KHBsYW4tPmlzX3ZhbGlkICYmCi0JCQlUcmFuc2FjdGlvbklkSXNWYWxpZChwbGFuLT5zYXZlZF94 bWluKSAmJgotCQkJIVRyYW5zYWN0aW9uSWRFcXVhbHMocGxhbi0+c2F2ZWRfeG1pbiwgVHJhbnNh Y3Rpb25YbWluKSkKLQkJCXBsYW4tPmlzX3ZhbGlkID0gZmFsc2U7CisJCWlmIChjcGxhbi0+ZGVw ZW5kc09uUm9sZSAmJiBjcGxhbi0+cGxhblJvbGVJZCAhPSBHZXRVc2VySWQoKSkKKwkJCWNwbGFu LT5pc192YWxpZCA9IGZhbHNlOwogCiAJCS8qCi0JCSAqIEJ5IG5vdywgaWYgYW55IGludmFsaWRh dGlvbiBoYXMgaGFwcGVuZWQsIHRoZSBpbnZhbCBjYWxsYmFjawotCQkgKiBmdW5jdGlvbnMgd2ls bCBoYXZlIG1hcmtlZCB0aGUgcGxhbiBpbnZhbGlkLgorCQkgKiBJZiBwbGFuIHdhcyB0cmFuc2ll bnQsIGNoZWNrIHRvIHNlZSBpZiBUcmFuc2FjdGlvblhtaW4gaGFzCisJCSAqIGFkdmFuY2VkLCBh bmQgaWYgc28gaW52YWxpZGF0ZSBpdC4KIAkJICovCi0JCWlmIChwbGFuLT5pc192YWxpZCkKLQkJ ewotCQkJLyogU3VjY2Vzc2Z1bGx5IHJldmFsaWRhdGVkIGFuZCBsb2NrZWQgdGhlIHF1ZXJ5LiAq LwotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQotCQkvKiBPb3BzLCB0aGUgcmFjZSBjYXNlIGhhcHBl bmVkLiAgUmVsZWFzZSB1c2VsZXNzIGxvY2tzLiAqLwotCQlBY3F1aXJlRXhlY3V0b3JMb2Nrcyhw bGFuLT5zdG10X2xpc3QsIGZhbHNlKTsKKwkJaWYgKFRyYW5zYWN0aW9uSWRJc1ZhbGlkKGNwbGFu LT5zYXZlZF94bWluKSAmJgorCQkJIVRyYW5zYWN0aW9uSWRFcXVhbHMoY3BsYW4tPnNhdmVkX3ht aW4sIFRyYW5zYWN0aW9uWG1pbikpCisJCQljcGxhbi0+aXNfdmFsaWQgPSBmYWxzZTsKIAl9CiAK LQkvKgotCSAqIFBsYW4gaGFzIGJlZW4gaW52YWxpZGF0ZWQsIHNvIHVubGluayBpdCBmcm9tIHRo ZSBwYXJlbnQgYW5kIHJlbGVhc2UgaXQuCi0JICovCi0JUmVsZWFzZUdlbmVyaWNQbGFuKHBsYW5z b3VyY2UpOworCXJldHVybiBjcGxhbi0+aXNfdmFsaWQ7Cit9CiAKLQlyZXR1cm4gZmFsc2U7Cisv KgorICogQ2FjaGVkUGxhblN0aWxsVmFsaWQKKyAqCQlSZXR1cm5zIGlmIGEgY2FjaGVkIGdlbmVy aWMgcGxhbiBpcyBzdGlsbCB2YWxpZAorICoKKyAqIENhbGxlZCBieSB0aGUgZXhlY3V0b3IgYWZ0 ZXIgaXQgaGFzIGZpbmlzaGVkIHRha2luZyBsb2NrcyBvbiBhIHBsYW4gdHJlZQorICogaW4gYSBD YWNoZWRQbGFuLgorICovCitib29sCitDYWNoZWRQbGFuU3RpbGxWYWxpZChDYWNoZWRQbGFuICpj cGxhbikKK3sKKwlyZXR1cm4gR2VuZXJpY1BsYW5Jc1ZhbGlkKGNwbGFuKTsKIH0KIAogLyoKQEAg LTExMjYsOSArMTEzMiw2IEBAIGNhY2hlZF9wbGFuX2Nvc3QoQ2FjaGVkUGxhbiAqcGxhbiwgYm9v bCBpbmNsdWRlX3BsYW5uZXIpCiAgKiBwbGFuIG9yIGEgY3VzdG9tIHBsYW4gZm9yIHRoZSBnaXZl biBwYXJhbWV0ZXJzOiB0aGUgY2FsbGVyIGRvZXMgbm90IGtub3cKICAqIHdoaWNoIGl0IHdpbGwg Z2V0LgogICoKLSAqIE9uIHJldHVybiwgdGhlIHBsYW4gaXMgdmFsaWQgYW5kIHdlIGhhdmUgc3Vm ZmljaWVudCBsb2NrcyB0byBiZWdpbgotICogZXhlY3V0aW9uLgotICoKICAqIE9uIHJldHVybiwg dGhlIHJlZmNvdW50IG9mIHRoZSBwbGFuIGhhcyBiZWVuIGluY3JlbWVudGVkOyBhIGxhdGVyCiAg KiBSZWxlYXNlQ2FjaGVkUGxhbigpIGNhbGwgaXMgZXhwZWN0ZWQuICBJZiAib3duZXIiIGlzIG5v dCBOVUxMIHRoZW4KICAqIHRoZSByZWZjb3VudCBoYXMgYmVlbiByZXBvcnRlZCB0byB0aGF0IFJl c291cmNlT3duZXIgKG5vdGUgdGhhdCB0aGlzCkBAIC0xMzYyLDYgKzEzNjUsNyBAQCBDYWNoZWRQ bGFuQWxsb3dzU2ltcGxlVmFsaWRpdHlDaGVjayhDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNl LAogCS8qCiAJICogUmVqZWN0IGlmIEFjcXVpcmVFeGVjdXRvckxvY2tzIHdvdWxkIGhhdmUgYW55 dGhpbmcgdG8gZG8uICBUaGlzIGlzCiAJICogcHJvYmFibHkgdW5uZWNlc3NhcnkgZ2l2ZW4gdGhl IHByZXZpb3VzIGNoZWNrLCBidXQgbGV0J3MgYmUgc2FmZS4KKwkgKiBYWFggLSBtYXliZSByZW1v dmU/CiAJICovCiAJZm9yZWFjaChsYywgcGxhbi0+c3RtdF9saXN0KQogCXsKQEAgLTE3MzUsNjIg KzE3MzksNiBAQCBRdWVyeUxpc3RHZXRQcmltYXJ5U3RtdChMaXN0ICpzdG10cykKIAlyZXR1cm4g TlVMTDsKIH0KIAotLyoKLSAqIEFjcXVpcmVFeGVjdXRvckxvY2tzOiBhY3F1aXJlIGxvY2tzIG5l ZWRlZCBmb3IgZXhlY3V0aW9uIG9mIGEgY2FjaGVkIHBsYW47Ci0gKiBvciByZWxlYXNlIHRoZW0g aWYgYWNxdWlyZSBpcyBmYWxzZS4KLSAqLwotc3RhdGljIHZvaWQKLUFjcXVpcmVFeGVjdXRvckxv Y2tzKExpc3QgKnN0bXRfbGlzdCwgYm9vbCBhY3F1aXJlKQotewotCUxpc3RDZWxsICAgKmxjMTsK LQotCWZvcmVhY2gobGMxLCBzdG10X2xpc3QpCi0JewotCQlQbGFubmVkU3RtdCAqcGxhbm5lZHN0 bXQgPSBsZmlyc3Rfbm9kZShQbGFubmVkU3RtdCwgbGMxKTsKLQkJQml0bWFwc2V0ICAqYWxsTG9j a1JlbGlkczsKLQkJaW50CQkJcnRpOwotCi0JCWlmIChwbGFubmVkc3RtdC0+Y29tbWFuZFR5cGUg PT0gQ01EX1VUSUxJVFkpCi0JCXsKLQkJCS8qCi0JCQkgKiBJZ25vcmUgdXRpbGl0eSBzdGF0ZW1l bnRzLCBleGNlcHQgdGhvc2UgKHN1Y2ggYXMgRVhQTEFJTikgdGhhdAotCQkJICogY29udGFpbiBh IHBhcnNlZC1idXQtbm90LXBsYW5uZWQgcXVlcnkuICBOb3RlOiBpdCdzIG9rYXkgdG8gdXNlCi0J CQkgKiBTY2FuUXVlcnlGb3JMb2NrcywgZXZlbiB0aG91Z2ggdGhlIHF1ZXJ5IGhhc24ndCBiZWVu IHRocm91Z2gKLQkJCSAqIHJ1bGUgcmV3cml0aW5nLCBiZWNhdXNlIHJld3JpdGluZyBkb2Vzbid0 IGNoYW5nZSB0aGUgcXVlcnkKLQkJCSAqIHJlcHJlc2VudGF0aW9uLgotCQkJICovCi0JCQlRdWVy eQkgICAqcXVlcnkgPSBVdGlsaXR5Q29udGFpbnNRdWVyeShwbGFubmVkc3RtdC0+dXRpbGl0eVN0 bXQpOwotCi0JCQlBc3NlcnQocGxhbm5lZHN0bXQtPm1pbkxvY2tSZWxpZHMgPT0gTlVMTCk7Ci0J CQlpZiAocXVlcnkpCi0JCQkJU2NhblF1ZXJ5Rm9yTG9ja3MocXVlcnksIGFjcXVpcmUpOwotCQkJ Y29udGludWU7Ci0JCX0KLQotCQlhbGxMb2NrUmVsaWRzID0gcGxhbm5lZHN0bXQtPm1pbkxvY2tS ZWxpZHM7Ci0JCXJ0aSA9IC0xOwotCQl3aGlsZSAoKHJ0aSA9IGJtc19uZXh0X21lbWJlcihhbGxM b2NrUmVsaWRzLCBydGkpKSA+IDApCi0JCXsKLQkJCVJhbmdlVGJsRW50cnkgKnJ0ZSA9IHJ0X2Zl dGNoKHJ0aSwgcGxhbm5lZHN0bXQtPnJ0YWJsZSk7Ci0KLQkJCWlmICghKHJ0ZS0+cnRla2luZCA9 PSBSVEVfUkVMQVRJT04gfHwKLQkJCQkgIChydGUtPnJ0ZWtpbmQgPT0gUlRFX1NVQlFVRVJZICYm IE9pZElzVmFsaWQocnRlLT5yZWxpZCkpKSkKLQkJCQljb250aW51ZTsKLQotCQkJLyoKLQkJCSAq IEFjcXVpcmUgdGhlIGFwcHJvcHJpYXRlIHR5cGUgb2YgbG9jayBvbiBlYWNoIHJlbGF0aW9uIE9J RC4gTm90ZQotCQkJICogdGhhdCB3ZSBkb24ndCBhY3R1YWxseSB0cnkgdG8gb3BlbiB0aGUgcmVs LCBhbmQgaGVuY2Ugd2lsbCBub3QKLQkJCSAqIGZhaWwgaWYgaXQncyBiZWVuIGRyb3BwZWQgZW50 aXJlbHkgLS0tIHdlJ2xsIGp1c3QgdHJhbnNpZW50bHkKLQkJCSAqIGFjcXVpcmUgYSBub24tY29u ZmxpY3RpbmcgbG9jay4KLQkJCSAqLwotCQkJaWYgKGFjcXVpcmUpCi0JCQkJTG9ja1JlbGF0aW9u T2lkKHJ0ZS0+cmVsaWQsIHJ0ZS0+cmVsbG9ja21vZGUpOwotCQkJZWxzZQotCQkJCVVubG9ja1Jl bGF0aW9uT2lkKHJ0ZS0+cmVsaWQsIHJ0ZS0+cmVsbG9ja21vZGUpOwotCQl9Ci0JfQotfQotCiAv KgogICogQWNxdWlyZVBsYW5uZXJMb2NrczogYWNxdWlyZSBsb2NrcyBuZWVkZWQgZm9yIHBsYW5u aW5nIG9mIGEgcXVlcnl0cmVlIGxpc3Q7CiAgKiBvciByZWxlYXNlIHRoZW0gaWYgYWNxdWlyZSBp cyBmYWxzZS4KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24u aCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uaAppbmRleCAyMWQ4NWE3ODA5 Li41MjZmNTc4MWRhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjUGFydGl0 aW9uLmgKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oCkBAIC0xMzMs NSArMTMzLDExIEBAIGV4dGVybiBQYXJ0aXRpb25QcnVuZVN0YXRlICpFeGVjQ3JlYXRlUGFydGl0 aW9uUHJ1bmVTdGF0ZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwKIAkJCQkJCQkgIGJvb2wgY29uc2lk ZXJfaW5pdGlhbF9zdGVwcywKIAkJCQkJCQkgIGJvb2wgY29uc2lkZXJfZXhlY19zdGVwcyk7CiBl eHRlcm4gQml0bWFwc2V0ICpFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMoUGFydGl0aW9uUHJ1bmVT dGF0ZSAqcHJ1bmVzdGF0ZSwKLQkJCQkJCQkJCQkgICBib29sIGluaXRpYWxfcHJ1bmUpOworCQkJ CQkJCQkJCSAgIGJvb2wgaW5pdGlhbF9wcnVuZSwKKwkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKipz Y2FuX2xlYWZwYXJ0X3J0aXMpOworZXh0ZXJuIFBhcnRpdGlvblBydW5lU3RhdGUgKkV4ZWNDcmVh dGVQYXJ0aXRpb25QcnVuZVN0YXRlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLAorCQkJCQkJCQkJCQkJ CQkgIEVTdGF0ZSAqZXN0YXRlLAorCQkJCQkJCQkJCQkJCQkgIFBhcnRpdGlvblBydW5lSW5mbyAq cHJ1bmVpbmZvLAorCQkJCQkJCQkJCQkJCQkgIGJvb2wgY29uc2lkZXJfaW5pdGlhbF9zdGVwcywK KwkJCQkJCQkJCQkJCQkJICBib29sIGNvbnNpZGVyX2V4ZWNfc3RlcHMpOwogI2VuZGlmCQkJCQkJ CS8qIEVYRUNQQVJUSVRJT05fSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3Iv ZXhlY2Rlc2MuaCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNkZXNjLmgKaW5kZXggNGI3MzY4 YTBkYy4uNTk1Mjk3ZGY2YyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY2Rl c2MuaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjZGVzYy5oCkBAIC00Niw2ICs0Niwx MiBAQCB0eXBlZGVmIHN0cnVjdCBRdWVyeURlc2MKIAlRdWVyeUVudmlyb25tZW50ICpxdWVyeUVu djsgLyogcXVlcnkgZW52aXJvbm1lbnQgcGFzc2VkIGluICovCiAJaW50CQkJaW5zdHJ1bWVudF9v cHRpb25zOyAvKiBPUiBvZiBJbnN0cnVtZW50T3B0aW9uIGZsYWdzICovCiAKKwkvKgorCSAqIFVz ZWQgYnkgRXhlY1BhcmFsbGVsR2V0UXVlcnlEZXNjKCkgdG8gc2F2ZSB0aGUgcmVzdWx0IG9mIGlu aXRpYWwKKwkgKiBwYXJ0aXRpb24gcHJ1bmluZyBwZXJmb3JtZWQgYnkgdGhlIGxlYWRlci4KKwkg Ki8KKwlMaXN0CQkqcGFydF9wcnVuZV9yZXN1bHRzOyAvKiBsaXN0IG9mIFBhcnRpdGlvblBydW5l UmVzdWx0ICovCisKIAkvKiBUaGVzZSBmaWVsZHMgYXJlIHNldCBieSBFeGVjdXRvclN0YXJ0ICov CiAJVHVwbGVEZXNjCXR1cERlc2M7CQkvKiBkZXNjcmlwdG9yIGZvciByZXN1bHQgdHVwbGVzICov CiAJRVN0YXRlCSAgICplc3RhdGU7CQkJLyogZXhlY3V0b3IncyBxdWVyeS13aWRlIHN0YXRlICov CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oIGIvc3JjL2luY2x1 ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaAppbmRleCA2M2YzZDA5ODA0Li43NTVlMjMxNjc1IDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oCisrKyBiL3NyYy9pbmNsdWRl L2V4ZWN1dG9yL2V4ZWN1dG9yLmgKQEAgLTU5LDYgKzU5LDggQEAKICNkZWZpbmUgRVhFQ19GTEFH X01BUksJCQkweDAwMDgJLyogbmVlZCBtYXJrL3Jlc3RvcmUgKi8KICNkZWZpbmUgRVhFQ19GTEFH X1NLSVBfVFJJR0dFUlMgMHgwMDEwCS8qIHNraXAgQWZ0ZXJUcmlnZ2VyIGNhbGxzICovCiAjZGVm aW5lIEVYRUNfRkxBR19XSVRIX05PX0RBVEEJMHgwMDIwCS8qIHJlbCBzY2FubmFiaWxpdHkgZG9l c24ndCBtYXR0ZXIgKi8KKyNkZWZpbmUgRVhFQ19GTEFHX0dFVF9MT0NLUwkJMHgwNDAwCS8qIHNo b3VsZCBFeGVjR2V0UmFuZ2VUYWJsZVJlbGF0aW9uKCkKKwkJCQkJCQkJCQkgKiBsb2NrIHJlbGF0 aW9ucz8gKi8KIAogCiAvKiBIb29rIGZvciBwbHVnaW5zIHRvIGdldCBjb250cm9sIGluIEV4ZWN1 dG9yU3RhcnQoKSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgg Yi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAppbmRleCAyMGY0YzhiMzVmLi5iMzYxNTky ZTJkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAorKysgYi9zcmMv aW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAtNjIwLDYgKzYyMCw3IEBAIHR5cGVkZWYgc3Ry dWN0IEVTdGF0ZQogCUxpc3QJICAgKmVzX3J0ZXBlcm1pbmZvczsJLyogTGlzdCBvZiBSVEVQZXJt aXNzaW9uSW5mbyAqLwogCVBsYW5uZWRTdG10ICplc19wbGFubmVkc3RtdDsJLyogbGluayB0byB0 b3Agb2YgcGxhbiB0cmVlICovCiAJTGlzdAkgICAqZXNfcGFydF9wcnVuZV9pbmZvczsJLyogUGxh bm5lZFN0bXQucGFydFBydW5lSW5mb3MgKi8KKwlMaXN0CSAgICplc19wYXJ0X3BydW5lX3Jlc3Vs dHM7IC8qIFF1ZXJ5RGVzYy5wYXJ0X3BydW5lX3Jlc3VsdHMgKi8KIAljb25zdCBjaGFyICplc19z b3VyY2VUZXh0OwkvKiBTb3VyY2UgdGV4dCBmcm9tIFF1ZXJ5RGVzYyAqLwogCiAJSnVua0ZpbHRl ciAqZXNfanVua0ZpbHRlcjsJLyogdG9wLWxldmVsIGp1bmsgZmlsdGVyLCBpZiBhbnkgKi8KZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9k ZXMvcGF0aG5vZGVzLmgKaW5kZXggZDAwYjVkY2IwMy4uODNlNWM2NjVjNyAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0 aG5vZGVzLmgKQEAgLTEzNCw4ICsxMzQsOCBAQCB0eXBlZGVmIHN0cnVjdCBQbGFubmVyR2xvYmFs CiAJYm9vbAkJY29udGFpbnNJbml0aWFsUHJ1bmluZzsKIAogCS8qCi0JICogSW5kZXhlcyBvZiBh bGwgcmFuZ2UgdGFibGUgZW50cmllczsgZm9yIEFjcXVpcmVFeGVjdXRvckxvY2tzKCkncwotCSAq IHBlcnVzYWwuCisJICogSW5kZXhlcyBvZiBhbGwgcmFuZ2UgdGFibGUgZW50cmllcyBleGNlcHQg dGhvc2Ugb2YgbGVhZiBwYXJ0aXRpb25zCisJICogc2Nhbm5lZCBieSBwcnVuYWJsZSBzdWJwbGFu czsgZm9yIEFjcXVpcmVFeGVjdXRvckxvY2tzKCkgcGVydXNhbC4KIAkgKi8KIAlCaXRtYXBzZXQg ICptaW5Mb2NrUmVsaWRzOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9k ZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCmluZGV4IDdiNTNmOTkwZTAuLmU3 NmU5NDVjOGMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCisrKyBi L3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCkBAIC04Miw4ICs4Miw5IEBAIHR5cGVkZWYg c3RydWN0IFBsYW5uZWRTdG10CiAJTGlzdAkgICAqcGVybUluZm9zOwkJLyogbGlzdCBvZiBSVEVQ ZXJtaXNzaW9uSW5mbyBub2RlcyBmb3IgcnRhYmxlCiAJCQkJCQkJCSAqIGVudHJpZXMgbmVlZGlu ZyBvbmUgKi8KIAotCUJpdG1hcHNldCAgKm1pbkxvY2tSZWxpZHM7CS8qIEluZGV4ZXMgb2YgYWxs IHJhbmdlIHRhYmxlIGVudHJpZXM7IGZvcgotCQkJCQkJCQkgKiBBY3F1aXJlRXhlY3V0b3JMb2Nr cygpJ3MgcGVydXNhbCAqLworCUJpdG1hcHNldCAgKm1pbkxvY2tSZWxpZHM7CS8qIEluZGV4ZXMg b2YgYWxsIHJhbmdlIHRhYmxlIGVudHJpZXMgZXhjZXB0CisJCQkJCQkJCSAqIHRob3NlIG9mIGxl YWYgcGFydGl0aW9ucyBzY2FubmVkIGJ5CisJCQkJCQkJCSAqIHBydW5hYmxlIHN1YnBsYW5zICov CiAKIAkvKiBydGFibGUgaW5kZXhlcyBvZiB0YXJnZXQgcmVsYXRpb25zIGZvciBJTlNFUlQvVVBE QVRFL0RFTEVURS9NRVJHRSAqLwogCUxpc3QJICAgKnJlc3VsdFJlbGF0aW9uczsJLyogaW50ZWdl ciBsaXN0IG9mIFJUIGluZGV4ZXMsIG9yIE5JTCAqLwpAQCAtMTU3NSw2ICsxNTc2LDMyIEBAIHR5 cGVkZWYgc3RydWN0IFBhcnRpdGlvblBydW5lU3RlcENvbWJpbmUKIAlMaXN0CSAgICpzb3VyY2Vf c3RlcGlkczsKIH0gUGFydGl0aW9uUHJ1bmVTdGVwQ29tYmluZTsKIAorLyotLS0tLS0tLS0tLS0t LS0tCisgKiBQYXJ0aXRpb25QcnVuZVJlc3VsdAorICoKKyAqIFRoZSByZXN1bHQgb2YgcGVyZm9y bWluZyBFeGVjUGFydGl0aW9uRG9Jbml0aWFsUHJ1bmluZygpIG9uIGEgZ2l2ZW4KKyAqIFBhcnRp dGlvblBydW5lSW5mby4KKyAqCisgKiByb290X3BhcmVudF9yZWxpZHMgaXMgc2FtZSBhcyBQYXJ0 aXRpb25QcnVuZUluZm8ucm9vdF9wYXJlbnRfcmVsaWRzLiAgSXQncworICogdGhlcmUgZm9yIGNy b3NzLWNoZWNraW5nIGluIEV4ZWNJbml0UGFydGl0aW9uUHJ1bmluZygpIHRoYXQgdGhlCisgKiBQ YXJ0aXRpb25QcnVuZVJlc3VsdCBhbmQgdGhlIFBhcnRpdGlvblBydW5lSW5mbyBhdCBhIGdpdmVu IGluZGV4IGluCisgKiBFU3RhdGUuZXNfcGFydF9wcnVuZV9yZXN1bHRzIGFuZCBFU3RhdGUuZXNf cGFydF9wcnVuZV9pbmZvcywgcmVzcGVjdGl2ZWx5LAorICogYmVsb25nIHRvIHRoZSBzYW1lIHBh cmVudCBwbGFuIG5vZGUuCisgKgorICogdmFsaWRzdWJwbGFucyBjb250YWlucyB0aGUgaW5kZXhl cyBvZiBzdWJwbGFucyByZW1haW5pbmcgYWZ0ZXIgcGVyZm9ybWluZworICogaW5pdGlhbCBwcnVu aW5nIGJ5IGNhbGxpbmcgRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKCkgb24gdGhlCisgKiBQYXJ0 aXRpb25QcnVuZUluZm8uCisgKgorICogVGhpcyBpcyB1c2VkIHRvIHN0b3JlIHRoZSByZXN1bHQg b2YgaW5pdGlhbCBwYXJ0aXRpb24gcHJ1bmluZyB0aGF0IGlzCisgKiBwZWZvcm1lZCBpbiBFeGVj RG9Jbml0aWFsUGFydGl0aW9uUHJ1bmluZygpLgorICovCit0eXBlZGVmIHN0cnVjdCBQYXJ0aXRp b25QcnVuZVJlc3VsdAoreworCU5vZGVUYWcJCXR5cGU7CisKKwlCaXRtYXBzZXQJICAgKnJvb3Rf cGFyZW50X3JlbGlkczsKKwlCaXRtYXBzZXQJICAgKnZhbGlkc3VicGxhbnM7Cit9IFBhcnRpdGlv blBydW5lUmVzdWx0OwogCiAvKgogICogUGxhbiBpbnZhbGlkYXRpb24gaW5mbwpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvdXRpbHMvcGxhbmNhY2hlLmggYi9zcmMvaW5jbHVkZS91dGlscy9wbGFu Y2FjaGUuaAppbmRleCBhNDQzMTgxZDQxLi43YzY2NGJhZDM1IDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS91dGlscy9wbGFuY2FjaGUuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9wbGFuY2FjaGUu aApAQCAtMjIxLDYgKzIyMSw3IEBAIGV4dGVybiBDYWNoZWRQbGFuICpHZXRDYWNoZWRQbGFuKENh Y2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsCiAJCQkJCQkJCSBQYXJhbUxpc3RJbmZvIGJvdW5k UGFyYW1zLAogCQkJCQkJCQkgUmVzb3VyY2VPd25lciBvd25lciwKIAkJCQkJCQkJIFF1ZXJ5RW52 aXJvbm1lbnQgKnF1ZXJ5RW52KTsKK2V4dGVybiBib29sIENhY2hlZFBsYW5TdGlsbFZhbGlkKENh Y2hlZFBsYW4gKmNwbGFuKTsKIGV4dGVybiB2b2lkIFJlbGVhc2VDYWNoZWRQbGFuKENhY2hlZFBs YW4gKnBsYW4sIFJlc291cmNlT3duZXIgb3duZXIpOwogCiBleHRlcm4gYm9vbCBDYWNoZWRQbGFu QWxsb3dzU2ltcGxlVmFsaWRpdHlDaGVjayhDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlLAot LSAKMi4zNS4zCgo= --000000000000dc2ca505f3396ed1 Content-Type: application/octet-stream; name="v31-0002-Preparatory-refactoring-before-reworking-CachedP.patch" Content-Disposition: attachment; filename="v31-0002-Preparatory-refactoring-before-reworking-CachedP.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lde6c7bs1 RnJvbSA5MzZlZjExMWE5YjUxNWMwZDAxMTE2MzdhMjI5NTllYTYyZTkyYjVkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBhbWl0bGFuIDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4KRGF0 ZTogVHVlLCAxMyBEZWMgMjAyMiAxMTo1ODowNyArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjMxIDIv M10gUHJlcGFyYXRvcnkgcmVmYWN0b3JpbmcgYmVmb3JlIHJld29ya2luZyBDYWNoZWRQbGFuCiBs b2NraW5nCgpSZW1lbWJlciB0aGUgUlQgaW5kZXhlcyBvZiBSVEVzIHRoYXQgQWNxdWlyZUV4ZWN1 dG9yTG9ja3MoKSBtdXN0Cmxvb2sgYXQgdG8gY29uc2lkZXIgbG9ja2luZyBpbiBhIGJpdG1hcHNl dCwgc28gdGhhdCBuc3RlYWQgb2YgbG9vcGluZwpvdmVyIHRoZSByYW5nZSB0YWJsZSB0byBmaW5k IHRob3NlIFJURXMsIGl0IGNhbiBsb29rIHRoZW0gdXAgdXNpbmcKdGhlIFJUIGluZGV4ZXMgc2V0 IGluIHRoZSBiaXRtYXBzZXQuCgpUaGlzIGFsc28gYWRkcyBzb21lIGV4dHJhIGluZm9ybWF0aW9u IHJlbGF0ZWQgdG8gZXhlY3V0aW9uLXRpbWUKcHJ1bmluZyB0byB0aGUgcmVsZXZhbnQgcGxhbiBu b2Rlcy4KLS0tCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFyYWxsZWwuYyAgfCAgMSArCiBz cmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMgfCAzNCArKysrKysrKysrKysrKyst LS0tLS0tCiBzcmMvYmFja2VuZC9ub2Rlcy9yZWFkZnVuY3MuYyAgICAgICAgfCAgOCArKysrLS0K IHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYyB8ICAyICsrCiBzcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMgfCAxMiArKysrKysrKwogc3JjL2JhY2tlbmQvcGFy dGl0aW9uaW5nL3BhcnRwcnVuZS5jIHwgNDIgKysrKysrKysrKysrKysrKysrKysrKysrKystLQog c3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcGxhbmNhY2hlLmMgIHwgMTAgKysrKystLQogc3JjL2lu Y2x1ZGUvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oIHwgIDYgKysrKwogc3JjL2luY2x1ZGUvbm9k ZXMvbm9kZXMuaCAgICAgICAgICAgIHwgIDEgKwogc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVz LmggICAgICAgIHwgMTEgKysrKysrKysKIHNyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oICAg ICAgICB8IDE5ICsrKysrKysrKysrKysKIDExIGZpbGVzIGNoYW5nZWQsIDEyOCBpbnNlcnRpb25z KCspLCAxOCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9l eGVjUGFyYWxsZWwuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jCmluZGV4 IDVmOTdmNTM1M2YuLjFmNWQ2ZDRkNjQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L2V4ZWNQYXJhbGxlbC5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5j CkBAIC0xODIsNiArMTgyLDcgQEAgRXhlY1NlcmlhbGl6ZVBsYW4oUGxhbiAqcGxhbiwgRVN0YXRl ICplc3RhdGUpCiAJcHN0bXQtPnRyYW5zaWVudFBsYW4gPSBmYWxzZTsKIAlwc3RtdC0+ZGVwZW5k c09uUm9sZSA9IGZhbHNlOwogCXBzdG10LT5wYXJhbGxlbE1vZGVOZWVkZWQgPSBmYWxzZTsKKwlw c3RtdC0+Y29udGFpbnNJbml0aWFsUHJ1bmluZyA9IGZhbHNlOwkvKiB3b3JrZXJzIG5lZWQgbm90 IGtub3chICovCiAJcHN0bXQtPnBsYW5UcmVlID0gcGxhbjsKIAlwc3RtdC0+cGFydFBydW5lSW5m b3MgPSBlc3RhdGUtPmVzX3BhcnRfcHJ1bmVfaW5mb3M7CiAJcHN0bXQtPnJ0YWJsZSA9IGVzdGF0 ZS0+ZXNfcmFuZ2VfdGFibGU7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVj UGFydGl0aW9uLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMKaW5kZXgg NjUxYWQyNGZjMS4uNGI5MWJiNzQwMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY1BhcnRpdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24u YwpAQCAtMTg0LDggKzE4NCw2IEBAIHN0YXRpYyBjaGFyICpFeGVjQnVpbGRTbG90UGFydGl0aW9u S2V5RGVzY3JpcHRpb24oUmVsYXRpb24gcmVsLAogCQkJCQkJCQkJCQkJICBpbnQgbWF4ZmllbGRs ZW4pOwogc3RhdGljIExpc3QgKmFkanVzdF9wYXJ0aXRpb25fY29sbm9zKExpc3QgKmNvbG5vcywg UmVzdWx0UmVsSW5mbyAqbGVhZl9wYXJ0X3JyaSk7CiBzdGF0aWMgTGlzdCAqYWRqdXN0X3BhcnRp dGlvbl9jb2xub3NfdXNpbmdfbWFwKExpc3QgKmNvbG5vcywgQXR0ck1hcCAqYXR0ck1hcCk7Ci1z dGF0aWMgUGFydGl0aW9uUHJ1bmVTdGF0ZSAqQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZShQbGFu U3RhdGUgKnBsYW5zdGF0ZSwKLQkJCQkJCQkJCQkJCQkgIFBhcnRpdGlvblBydW5lSW5mbyAqcHJ1 bmVpbmZvKTsKIHN0YXRpYyB2b2lkIEluaXRQYXJ0aXRpb25QcnVuZUNvbnRleHQoUGFydGl0aW9u UHJ1bmVDb250ZXh0ICpjb250ZXh0LAogCQkJCQkJCQkJICBMaXN0ICpwcnVuaW5nX3N0ZXBzLAog CQkJCQkJCQkJICBQYXJ0aXRpb25EZXNjIHBhcnRkZXNjLApAQCAtMTc1OSw2ICsxNzU3LDExIEBA IGFkanVzdF9wYXJ0aXRpb25fY29sbm9zX3VzaW5nX21hcChMaXN0ICpjb2xub3MsIEF0dHJNYXAg KmF0dHJNYXApCiAgKgkJYWNjb3VudCBmb3IgaW5pdGlhbCBwcnVuaW5nIHBvc3NpYmx5IGhhdmlu ZyBlbGltaW5hdGVkIHNvbWUgb2YgdGhlCiAgKgkJc3VicGxhbnMuCiAgKgorICogRXhlY0NyZWF0 ZVBhcnRpdGlvblBydW5lU3RhdGU6CisgKgkJQSBzdWItcm91dGluZSBvZiBFeGVjSW5pdFBhcnRp dGlvblBydW5pbmcoKSB0aGF0IGNyZWF0ZXMgdGhlCisgKgkJUGFydGl0aW9uUHJ1bmVTdGF0ZSBm cm9tIGEgZ2l2ZW4gUGFydGl0aW9uUHJ1bmVJbmZvLiAgRXhwb3J0ZWQgZm9yIHRoZQorICoJCXVz ZSBieSBjYWxsZXJzIHRoYXQgZG9uJ3QgbmVlZCB0byBkbyBFeGVjSW5pdFBhcnRpdGlvblBydW5p bmcoKS4KKyAqCiAgKiBFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnM6CiAgKgkJUmV0dXJucyBpbmRl eGVzIG9mIG1hdGNoaW5nIHN1YnBsYW5zIGFmdGVyIGV2YWx1YXRpbmcgdGhlIGV4cHJlc3Npb25z CiAgKgkJdGhhdCBhcmUgc2FmZSB0byBldmFsdWF0ZSBhdCBhIGdpdmVuIHBvaW50LiAgVGhpcyBm dW5jdGlvbiBpcyBmaXJzdApAQCAtMTgxMiw3ICsxODE1LDkgQEAgRXhlY0luaXRQYXJ0aXRpb25Q cnVuaW5nKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLAogCUV4ZWNBc3NpZ25FeHByQ29udGV4dChlc3Rh dGUsIHBsYW5zdGF0ZSk7CiAKIAkvKiBDcmVhdGUgdGhlIHdvcmtpbmcgZGF0YSBzdHJ1Y3R1cmUg Zm9yIHBydW5pbmcgKi8KLQlwcnVuZXN0YXRlID0gQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZShw bGFuc3RhdGUsIHBydW5laW5mbyk7CisJcHJ1bmVzdGF0ZSA9IEV4ZWNDcmVhdGVQYXJ0aXRpb25Q cnVuZVN0YXRlKHBsYW5zdGF0ZSwgZXN0YXRlLCBwcnVuZWluZm8sCisJCQkJCQkJCQkJCSAgIHBy dW5laW5mby0+bmVlZHNfaW5pdF9wcnVuaW5nLAorCQkJCQkJCQkJCQkgICBwcnVuZWluZm8tPm5l ZWRzX2V4ZWNfcHJ1bmluZyk7CiAKIAkvKgogCSAqIFBlcmZvcm0gYW4gaW5pdGlhbCBwYXJ0aXRp b24gcHJ1bmUgcGFzcywgaWYgcmVxdWlyZWQuCkBAIC0xODQ5LDcgKzE4NTQsNyBAQCBFeGVjSW5p dFBhcnRpdGlvblBydW5pbmcoUGxhblN0YXRlICpwbGFuc3RhdGUsCiB9CiAKIC8qCi0gKiBDcmVh dGVQYXJ0aXRpb25QcnVuZVN0YXRlCisgKiBFeGVjQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZQog ICoJCUJ1aWxkIHRoZSBkYXRhIHN0cnVjdHVyZSByZXF1aXJlZCBmb3IgY2FsbGluZyBFeGVjRmlu ZE1hdGNoaW5nU3ViUGxhbnMKICAqCiAgKiAncGxhbnN0YXRlJyBpcyB0aGUgcGFyZW50IHBsYW4g bm9kZSdzIGV4ZWN1dGlvbiBzdGF0ZS4KQEAgLTE4NjUsMTUgKzE4NzAsMTggQEAgRXhlY0luaXRQ YXJ0aXRpb25QcnVuaW5nKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLAogICogcmUtZXZhbHVhdGUgd2hp Y2ggcGFydGl0aW9ucyBtYXRjaCB0aGUgcHJ1bmluZyBzdGVwcyBwcm92aWRlZCBpbiBlYWNoCiAg KiBQYXJ0aXRpb25lZFJlbFBydW5lSW5mby4KICAqLwotc3RhdGljIFBhcnRpdGlvblBydW5lU3Rh dGUgKgotQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgUGFy dGl0aW9uUHJ1bmVJbmZvICpwcnVuZWluZm8pCitQYXJ0aXRpb25QcnVuZVN0YXRlICoKK0V4ZWND cmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBFU3RhdGUgKmVz dGF0ZSwKKwkJCQkJCQkgIFBhcnRpdGlvblBydW5lSW5mbyAqcHJ1bmVpbmZvLAorCQkJCQkJCSAg Ym9vbCBjb25zaWRlcl9pbml0aWFsX3N0ZXBzLAorCQkJCQkJCSAgYm9vbCBjb25zaWRlcl9leGVj X3N0ZXBzKQogewotCUVTdGF0ZQkgICAqZXN0YXRlID0gcGxhbnN0YXRlLT5zdGF0ZTsKIAlQYXJ0 aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlOwogCWludAkJCW5fcGFydF9oaWVyYXJjaGllczsK IAlMaXN0Q2VsbCAgICpsYzsKIAlpbnQJCQlpOwotCUV4cHJDb250ZXh0ICplY29udGV4dCA9IHBs YW5zdGF0ZS0+cHNfRXhwckNvbnRleHQ7CisJRXhwckNvbnRleHQgKmVjb250ZXh0ID0gcGxhbnN0 YXRlID8gcGxhbnN0YXRlLT5wc19FeHByQ29udGV4dCA6CisJCUdldFBlclR1cGxlRXhwckNvbnRl eHQoZXN0YXRlKTsKIAogCS8qIEZvciBkYXRhIHJlYWRpbmcsIGV4ZWN1dG9yIGFsd2F5cyBvbWl0 cyBkZXRhY2hlZCBwYXJ0aXRpb25zICovCiAJaWYgKGVzdGF0ZS0+ZXNfcGFydGl0aW9uX2RpcmVj dG9yeSA9PSBOVUxMKQpAQCAtMTk1NSw2ICsxOTYzLDcgQEAgQ3JlYXRlUGFydGl0aW9uUHJ1bmVT dGF0ZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWluZm8p CiAJCQlBc3NlcnQocGFydGRlc2MtPm5wYXJ0cyA+PSBwaW5mby0+bnBhcnRzKTsKIAkJCXBwcnVu ZS0+bnBhcnRzID0gcGFydGRlc2MtPm5wYXJ0czsKIAkJCXBwcnVuZS0+c3VicGxhbl9tYXAgPSBw YWxsb2Moc2l6ZW9mKGludCkgKiBwYXJ0ZGVzYy0+bnBhcnRzKTsKKwkJCXBwcnVuZS0+cnRpX21h cCA9IHBhbGxvYyhzaXplb2YoSW5kZXgpICogcGFydGRlc2MtPm5wYXJ0cyk7CiAJCQlpZiAocGFy dGRlc2MtPm5wYXJ0cyA9PSBwaW5mby0+bnBhcnRzKQogCQkJewogCQkJCS8qCkBAIC0xOTY1LDYg KzE5NzQsOCBAQCBDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlKFBsYW5TdGF0ZSAqcGxhbnN0YXRl LCBQYXJ0aXRpb25QcnVuZUluZm8gKnBydW5laW5mbykKIAkJCQlwcHJ1bmUtPnN1YnBhcnRfbWFw ID0gcGluZm8tPnN1YnBhcnRfbWFwOwogCQkJCW1lbWNweShwcHJ1bmUtPnN1YnBsYW5fbWFwLCBw aW5mby0+c3VicGxhbl9tYXAsCiAJCQkJCSAgIHNpemVvZihpbnQpICogcGluZm8tPm5wYXJ0cyk7 CisJCQkJbWVtY3B5KHBwcnVuZS0+cnRpX21hcCwgcGluZm8tPnJ0aV9tYXAsCisJCQkJCSAgIHNp emVvZihpbnQpICogcGluZm8tPm5wYXJ0cyk7CiAKIAkJCQkvKgogCQkJCSAqIERvdWJsZS1jaGVj ayB0aGF0IHRoZSBsaXN0IG9mIHVucHJ1bmVkIHJlbGF0aW9ucyBoYXMgbm90CkBAIC0yMDE1LDYg KzIwMjYsOCBAQCBDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlKFBsYW5TdGF0ZSAqcGxhbnN0YXRl LCBQYXJ0aXRpb25QcnVuZUluZm8gKnBydW5laW5mbykKIAkJCQkJCQlwaW5mby0+c3VicGxhbl9t YXBbcGRfaWR4XTsKIAkJCQkJCXBwcnVuZS0+c3VicGFydF9tYXBbcHBfaWR4XSA9CiAJCQkJCQkJ cGluZm8tPnN1YnBhcnRfbWFwW3BkX2lkeF07CisJCQkJCQlwcHJ1bmUtPnJ0aV9tYXBbcHBfaWR4 XSA9CisJCQkJCQkJcGluZm8tPnJ0aV9tYXBbcGRfaWR4XTsKIAkJCQkJCXBkX2lkeCsrOwogCQkJ CQl9CiAJCQkJCWVsc2UKQEAgLTIwMjIsNiArMjAzNSw3IEBAIENyZWF0ZVBhcnRpdGlvblBydW5l U3RhdGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIFBhcnRpdGlvblBydW5lSW5mbyAqcHJ1bmVpbmZv KQogCQkJCQkJLyogdGhpcyBwYXJ0ZGVzYyBlbnRyeSBpcyBub3QgaW4gdGhlIHBsYW4gKi8KIAkJ CQkJCXBwcnVuZS0+c3VicGxhbl9tYXBbcHBfaWR4XSA9IC0xOwogCQkJCQkJcHBydW5lLT5zdWJw YXJ0X21hcFtwcF9pZHhdID0gLTE7CisJCQkJCQlwcHJ1bmUtPnJ0aV9tYXBbcHBfaWR4XSA9IDA7 CiAJCQkJCX0KIAkJCQl9CiAKQEAgLTIwNDMsNyArMjA1Nyw3IEBAIENyZWF0ZVBhcnRpdGlvblBy dW5lU3RhdGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIFBhcnRpdGlvblBydW5lSW5mbyAqcHJ1bmVp bmZvKQogCQkJICogSW5pdGlhbGl6ZSBwcnVuaW5nIGNvbnRleHRzIGFzIG5lZWRlZC4KIAkJCSAq LwogCQkJcHBydW5lLT5pbml0aWFsX3BydW5pbmdfc3RlcHMgPSBwaW5mby0+aW5pdGlhbF9wcnVu aW5nX3N0ZXBzOwotCQkJaWYgKHBpbmZvLT5pbml0aWFsX3BydW5pbmdfc3RlcHMpCisJCQlpZiAo Y29uc2lkZXJfaW5pdGlhbF9zdGVwcyAmJiBwaW5mby0+aW5pdGlhbF9wcnVuaW5nX3N0ZXBzKQog CQkJewogCQkJCUluaXRQYXJ0aXRpb25QcnVuZUNvbnRleHQoJnBwcnVuZS0+aW5pdGlhbF9jb250 ZXh0LAogCQkJCQkJCQkJCSAgcGluZm8tPmluaXRpYWxfcHJ1bmluZ19zdGVwcywKQEAgLTIwNTMs NyArMjA2Nyw3IEBAIENyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUoUGxhblN0YXRlICpwbGFuc3Rh dGUsIFBhcnRpdGlvblBydW5lSW5mbyAqcHJ1bmVpbmZvKQogCQkJCXBydW5lc3RhdGUtPmRvX2lu aXRpYWxfcHJ1bmUgPSB0cnVlOwogCQkJfQogCQkJcHBydW5lLT5leGVjX3BydW5pbmdfc3RlcHMg PSBwaW5mby0+ZXhlY19wcnVuaW5nX3N0ZXBzOwotCQkJaWYgKHBpbmZvLT5leGVjX3BydW5pbmdf c3RlcHMpCisJCQlpZiAoY29uc2lkZXJfZXhlY19zdGVwcyAmJiBwaW5mby0+ZXhlY19wcnVuaW5n X3N0ZXBzKQogCQkJewogCQkJCUluaXRQYXJ0aXRpb25QcnVuZUNvbnRleHQoJnBwcnVuZS0+ZXhl Y19jb250ZXh0LAogCQkJCQkJCQkJCSAgcGluZm8tPmV4ZWNfcHJ1bmluZ19zdGVwcywKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL3JlYWRmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMv cmVhZGZ1bmNzLmMKaW5kZXggZjM2MjljZGZkMS4uY2FmMmE2MDQ5MyAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvbm9kZXMvcmVhZGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1 bmNzLmMKQEAgLTE1OCw2ICsxNTgsMTEgQEAKIAl0b2tlbiA9IHBnX3N0cnRvaygmbGVuZ3RoKTsJ CS8qIHNraXAgOmZsZG5hbWUgKi8gXAogCWxvY2FsX25vZGUtPmZsZG5hbWUgPSByZWFkSW50Q29s cyhsZW4pCiAKKy8qIFJlYWQgYW4gSW5kZXggYXJyYXkgKi8KKyNkZWZpbmUgUkVBRF9JTkRFWF9B UlJBWShmbGRuYW1lLCBsZW4pIFwKKwl0b2tlbiA9IHBnX3N0cnRvaygmbGVuZ3RoKTsJCS8qIHNr aXAgOmZsZG5hbWUgKi8gXAorCWxvY2FsX25vZGUtPmZsZG5hbWUgPSByZWFkSW5kZXhDb2xzKGxl bikKKwogLyogUmVhZCBhIGJvb2wgYXJyYXkgKi8KICNkZWZpbmUgUkVBRF9CT09MX0FSUkFZKGZs ZG5hbWUsIGxlbikgXAogCXRva2VuID0gcGdfc3RydG9rKCZsZW5ndGgpOwkJLyogc2tpcCA6Zmxk bmFtZSAqLyBcCkBAIC04MDAsNyArODA1LDYgQEAgZm5uYW1lKGludCBudW1Db2xzKSBcCiAgKi8K IFJFQURfU0NBTEFSX0FSUkFZKHJlYWRBdHRyTnVtYmVyQ29scywgaW50MTYsIGF0b2kpCiBSRUFE X1NDQUxBUl9BUlJBWShyZWFkT2lkQ29scywgT2lkLCBhdG9vaWQpCi0vKiBvdXRmdW5jcy5jIGhh cyB3cml0ZUluZGV4Q29scywgYnV0IHdlIGRvbid0IHlldCBuZWVkIHRoYXQgaGVyZSAqLwotLyog UkVBRF9TQ0FMQVJfQVJSQVkocmVhZEluZGV4Q29scywgSW5kZXgsIGF0b3VpKSAqLworUkVBRF9T Q0FMQVJfQVJSQVkocmVhZEluZGV4Q29scywgSW5kZXgsIGF0b3VpKQogUkVBRF9TQ0FMQVJfQVJS QVkocmVhZEludENvbHMsIGludCwgYXRvaSkKIFJFQURfU0NBTEFSX0FSUkFZKHJlYWRCb29sQ29s cywgYm9vbCwgc3RydG9ib29sKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bs YW4vcGxhbm5lci5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCmluZGV4 IDA1ZjQ0ZmFmNmUuLjJiNzIzOGNmMjQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wbGFuL3BsYW5uZXIuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVy LmMKQEAgLTUyNSw4ICs1MjUsMTAgQEAgc3RhbmRhcmRfcGxhbm5lcihRdWVyeSAqcGFyc2UsIGNv bnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywgaW50IGN1cnNvck9wdGlvbnMsCiAJcmVzdWx0LT5wYXJh bGxlbE1vZGVOZWVkZWQgPSBnbG9iLT5wYXJhbGxlbE1vZGVOZWVkZWQ7CiAJcmVzdWx0LT5wbGFu VHJlZSA9IHRvcF9wbGFuOwogCXJlc3VsdC0+cGFydFBydW5lSW5mb3MgPSBnbG9iLT5wYXJ0UHJ1 bmVJbmZvczsKKwlyZXN1bHQtPmNvbnRhaW5zSW5pdGlhbFBydW5pbmcgPSBnbG9iLT5jb250YWlu c0luaXRpYWxQcnVuaW5nOwogCXJlc3VsdC0+cnRhYmxlID0gZ2xvYi0+ZmluYWxydGFibGU7CiAJ cmVzdWx0LT5wZXJtSW5mb3MgPSBnbG9iLT5maW5hbHJ0ZXBlcm1pbmZvczsKKwlyZXN1bHQtPm1p bkxvY2tSZWxpZHMgPSBnbG9iLT5taW5Mb2NrUmVsaWRzOwogCXJlc3VsdC0+cmVzdWx0UmVsYXRp b25zID0gZ2xvYi0+cmVzdWx0UmVsYXRpb25zOwogCXJlc3VsdC0+YXBwZW5kUmVsYXRpb25zID0g Z2xvYi0+YXBwZW5kUmVsYXRpb25zOwogCXJlc3VsdC0+c3VicGxhbnMgPSBnbG9iLT5zdWJwbGFu czsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYyBiL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYwppbmRleCA4NWJhOWQxY2ExLi5iNGZh OGQ5MGJjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMK KysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jCkBAIC0yNzksNiArMjc5 LDE2IEBAIHNldF9wbGFuX3JlZmVyZW5jZXMoUGxhbm5lckluZm8gKnJvb3QsIFBsYW4gKnBsYW4p CiAJICovCiAJYWRkX3J0ZXNfdG9fZmxhdF9ydGFibGUocm9vdCwgZmFsc2UpOwogCisJLyoKKwkg KiBBZGQgdGhlIHF1ZXJ5J3MgYWRqdXN0ZWQgcmFuZ2Ugb2YgUlQgaW5kZXhlcyB0byBnbG9iLT5t aW5Mb2NrUmVsaWRzLgorCSAqIFRoZSBhZGp1c3RlZCBSVCBpbmRleGVzIG9mIHBydW5hYmxlIHJl bGF0aW9ucyB3aWxsIGJlIGRlbGV0ZWQgZnJvbSB0aGUKKwkgKiBzZXQgYmVsb3cgd2hlcmUgUGFy dGl0aW9uUHJ1bmVJbmZvcyBhcmUgcHJvY2Vzc2VkLgorCSAqLworCWdsb2ItPm1pbkxvY2tSZWxp ZHMgPQorCQlibXNfYWRkX3JhbmdlKGdsb2ItPm1pbkxvY2tSZWxpZHMsCisJCQkJCSAgcnRvZmZz ZXQgKyAxLAorCQkJCQkgIHJ0b2Zmc2V0ICsgbGlzdF9sZW5ndGgocm9vdC0+cGFyc2UtPnJ0YWJs ZSkpOworCiAJLyoKIAkgKiBBZGp1c3QgUlQgaW5kZXhlcyBvZiBQbGFuUm93TWFya3MgYW5kIGFk ZCB0byBmaW5hbCByb3dtYXJrcyBsaXN0CiAJICovCkBAIC0zNzcsOSArMzg3LDExIEBAIHNldF9w bGFuX3JlZmVyZW5jZXMoUGxhbm5lckluZm8gKnJvb3QsIFBsYW4gKnBsYW4pCiAJCQkJLyogUlQg aW5kZXggb2YgdGhlIHRhYmxlIHRvIHdoaWNoIHRoZSBwaW5mbyBiZWxvbmdzLiAqLwogCQkJCXBp bmZvLT5ydGluZGV4ICs9IHJ0b2Zmc2V0OwogCQkJfQorCiAJCX0KIAogCQlnbG9iLT5wYXJ0UHJ1 bmVJbmZvcyA9IGxhcHBlbmQoZ2xvYi0+cGFydFBydW5lSW5mb3MsIHBydW5laW5mbyk7CisJCWds b2ItPmNvbnRhaW5zSW5pdGlhbFBydW5pbmcgfD0gcHJ1bmVpbmZvLT5uZWVkc19pbml0X3BydW5p bmc7CiAJfQogCiAJcmV0dXJuIHJlc3VsdDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnRp dGlvbmluZy9wYXJ0cHJ1bmUuYyBiL3NyYy9iYWNrZW5kL3BhcnRpdGlvbmluZy9wYXJ0cHJ1bmUu YwppbmRleCA1MTAxNDVlM2MwLi45YWU0MTA1M2RhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9w YXJ0aXRpb25pbmcvcGFydHBydW5lLmMKKysrIGIvc3JjL2JhY2tlbmQvcGFydGl0aW9uaW5nL3Bh cnRwcnVuZS5jCkBAIC0xNDQsNyArMTQ0LDkgQEAgc3RhdGljIExpc3QgKm1ha2VfcGFydGl0aW9u ZWRyZWxfcHJ1bmVpbmZvKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJCSAgIExpc3QgKnBy dW5lcXVhbCwKIAkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKnBhcnRyZWxpZHMsCiAJCQkJCQkJCQkJ ICAgaW50ICpyZWxpZF9zdWJwbGFuX21hcCwKLQkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKiptYXRj aGVkc3VicGxhbnMpOworCQkJCQkJCQkJCSAgIEJpdG1hcHNldCAqKm1hdGNoZWRzdWJwbGFucywK KwkJCQkJCQkJCQkgICBib29sICpuZWVkc19pbml0X3BydW5pbmcsCisJCQkJCQkJCQkJICAgYm9v bCAqbmVlZHNfZXhlY19wcnVuaW5nKTsKIHN0YXRpYyB2b2lkIGdlbl9wYXJ0cHJ1bmVfc3RlcHMo UmVsT3B0SW5mbyAqcmVsLCBMaXN0ICpjbGF1c2VzLAogCQkJCQkJCQlQYXJ0Q2xhdXNlVGFyZ2V0 IHRhcmdldCwKIAkJCQkJCQkJR2VuZXJhdGVQcnVuaW5nU3RlcHNDb250ZXh0ICpjb250ZXh0KTsK QEAgLTIzNCw2ICsyMzYsOCBAQCBtYWtlX3BhcnRpdGlvbl9wcnVuZWluZm8oUGxhbm5lckluZm8g KnJvb3QsIFJlbE9wdEluZm8gKnBhcmVudHJlbCwKIAlpbnQJCSAgICpyZWxpZF9zdWJwbGFuX21h cDsKIAlMaXN0Q2VsbCAgICpsYzsKIAlpbnQJCQlpOworCWJvb2wJCW5lZWRzX2luaXRfcHJ1bmlu ZyA9IGZhbHNlOworCWJvb2wJCW5lZWRzX2V4ZWNfcHJ1bmluZyA9IGZhbHNlOwogCiAJLyoKIAkg KiBTY2FuIHRoZSBzdWJwYXRocyB0byBzZWUgd2hpY2ggb25lcyBhcmUgc2NhbnMgb2YgcGFydGl0 aW9uIGNoaWxkCkBAIC0zMTMsMTIgKzMxNywxNiBAQCBtYWtlX3BhcnRpdGlvbl9wcnVuZWluZm8o UGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnBhcmVudHJlbCwKIAkJQml0bWFwc2V0ICAq cGFydHJlbGlkcyA9IChCaXRtYXBzZXQgKikgbGZpcnN0KGxjKTsKIAkJTGlzdAkgICAqcGluZm9s aXN0OwogCQlCaXRtYXBzZXQgICptYXRjaGVkc3VicGxhbnMgPSBOVUxMOworCQlib29sCQlwYXJ0 cmVsX25lZWRzX2luaXRfcHJ1bmluZzsKKwkJYm9vbAkJcGFydHJlbF9uZWVkc19leGVjX3BydW5p bmc7CiAKIAkJcGluZm9saXN0ID0gbWFrZV9wYXJ0aXRpb25lZHJlbF9wcnVuZWluZm8ocm9vdCwg cGFyZW50cmVsLAogCQkJCQkJCQkJCQkJICBwcnVuZXF1YWwsCiAJCQkJCQkJCQkJCQkgIHBhcnRy ZWxpZHMsCiAJCQkJCQkJCQkJCQkgIHJlbGlkX3N1YnBsYW5fbWFwLAotCQkJCQkJCQkJCQkJICAm bWF0Y2hlZHN1YnBsYW5zKTsKKwkJCQkJCQkJCQkJCSAgJm1hdGNoZWRzdWJwbGFucywKKwkJCQkJ CQkJCQkJCSAgJnBhcnRyZWxfbmVlZHNfaW5pdF9wcnVuaW5nLAorCQkJCQkJCQkJCQkJICAmcGFy dHJlbF9uZWVkc19leGVjX3BydW5pbmcpOwogCiAJCS8qIFdoZW4gcHJ1bmluZyBpcyBwb3NzaWJs ZSwgcmVjb3JkIHRoZSBtYXRjaGVkIHN1YnBsYW5zICovCiAJCWlmIChwaW5mb2xpc3QgIT0gTklM KQpAQCAtMzI3LDYgKzMzNSw5IEBAIG1ha2VfcGFydGl0aW9uX3BydW5laW5mbyhQbGFubmVySW5m byAqcm9vdCwgUmVsT3B0SW5mbyAqcGFyZW50cmVsLAogCQkJYWxsbWF0Y2hlZHN1YnBsYW5zID0g Ym1zX2pvaW4obWF0Y2hlZHN1YnBsYW5zLAogCQkJCQkJCQkJCSAgYWxsbWF0Y2hlZHN1YnBsYW5z KTsKIAkJfQorCisJCW5lZWRzX2luaXRfcHJ1bmluZyB8PSBwYXJ0cmVsX25lZWRzX2luaXRfcHJ1 bmluZzsKKwkJbmVlZHNfZXhlY19wcnVuaW5nIHw9IHBhcnRyZWxfbmVlZHNfZXhlY19wcnVuaW5n OwogCX0KIAogCXBmcmVlKHJlbGlkX3N1YnBsYW5fbWFwKTsKQEAgLTM0Miw2ICszNTMsOCBAQCBt YWtlX3BhcnRpdGlvbl9wcnVuZWluZm8oUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnBh cmVudHJlbCwKIAlwcnVuZWluZm8gPSBtYWtlTm9kZShQYXJ0aXRpb25QcnVuZUluZm8pOwogCXBy dW5laW5mby0+cm9vdF9wYXJlbnRfcmVsaWRzID0gcGFyZW50cmVsLT5yZWxpZHM7CiAJcHJ1bmVp bmZvLT5wcnVuZV9pbmZvcyA9IHBydW5lcmVsaW5mb3M7CisJcHJ1bmVpbmZvLT5uZWVkc19pbml0 X3BydW5pbmcgPSBuZWVkc19pbml0X3BydW5pbmc7CisJcHJ1bmVpbmZvLT5uZWVkc19leGVjX3By dW5pbmcgPSBuZWVkc19leGVjX3BydW5pbmc7CiAKIAkvKgogCSAqIFNvbWUgc3VicGxhbnMgbWF5 IG5vdCBiZWxvbmcgdG8gYW55IG9mIHRoZSBpZGVudGlmaWVkIHBhcnRpdGlvbmVkIHJlbHMuCkBA IC00NDIsMTMgKzQ1NSwxOSBAQCBhZGRfcGFydF9yZWxpZHMoTGlzdCAqYWxscGFydHJlbGlkcywg Qml0bWFwc2V0ICpwYXJ0cmVsaWRzKQogICogSWYgd2UgY2Fubm90IGZpbmQgYW55IHVzZWZ1bCBy dW4tdGltZSBwcnVuaW5nIHN0ZXBzLCByZXR1cm4gTklMLgogICogSG93ZXZlciwgb24gc3VjY2Vz cywgZWFjaCByZWwgaWRlbnRpZmllZCBpbiBwYXJ0cmVsaWRzIHdpbGwgaGF2ZQogICogYW4gZWxl bWVudCBpbiB0aGUgcmVzdWx0IGxpc3QsIGV2ZW4gaWYgc29tZSBvZiB0aGVtIGFyZSB1c2VsZXNz LgorICogKm5lZWRzX2luaXRfcHJ1bmluZyBhbmQgKm5lZWRzX2V4ZWNfcHJ1bmluZyBhcmUgc2V0 IHRvIGluZGljYXRlIHdoZXRoZXIKKyAqIHRoZSBwcnVuaW5nIHN0ZXBzIGNvbnRhaW5lZCBpbiB0 aGUgcmV0dXJuZWQgUGFydGl0aW9uZWRSZWxQcnVuZUluZm9zCisgKiBjYW4gYmUgcGVyZm9ybWVk IGR1cmluZyBleGVjdXRvciBzdGFydHVwIGFuZCBkdXJpbmcgZXhlY3V0aW9uLAorICogcmVzcGVj dGl2ZWx5LgogICovCiBzdGF0aWMgTGlzdCAqCiBtYWtlX3BhcnRpdGlvbmVkcmVsX3BydW5laW5m byhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcGFyZW50cmVsLAogCQkJCQkJCSAgTGlz dCAqcHJ1bmVxdWFsLAogCQkJCQkJCSAgQml0bWFwc2V0ICpwYXJ0cmVsaWRzLAogCQkJCQkJCSAg aW50ICpyZWxpZF9zdWJwbGFuX21hcCwKLQkJCQkJCQkgIEJpdG1hcHNldCAqKm1hdGNoZWRzdWJw bGFucykKKwkJCQkJCQkgIEJpdG1hcHNldCAqKm1hdGNoZWRzdWJwbGFucywKKwkJCQkJCQkgIGJv b2wgKm5lZWRzX2luaXRfcHJ1bmluZywKKwkJCQkJCQkgIGJvb2wgKm5lZWRzX2V4ZWNfcHJ1bmlu ZykKIHsKIAlSZWxPcHRJbmZvICp0YXJnZXRwYXJ0ID0gTlVMTDsKIAlMaXN0CSAgICpwaW5mb2xp c3QgPSBOSUw7CkBAIC00NTksNiArNDc4LDEwIEBAIG1ha2VfcGFydGl0aW9uZWRyZWxfcHJ1bmVp bmZvKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpwYXJlbnRyZWwsCiAJaW50CQkJcnRp OwogCWludAkJCWk7CiAKKwkvKiBXaWxsIGZpbmQgb3V0IGJlbG93LiAqLworCSpuZWVkc19pbml0 X3BydW5pbmcgPSBmYWxzZTsKKwkqbmVlZHNfZXhlY19wcnVuaW5nID0gZmFsc2U7CisKIAkvKgog CSAqIEV4YW1pbmUgZWFjaCBwYXJ0aXRpb25lZCByZWwsIGNvbnN0cnVjdGluZyBhIHRlbXBvcmFy eSBhcnJheSB0byBtYXAKIAkgKiBmcm9tIHBsYW5uZXIgcmVsaWRzIHRvIGluZGV4IG9mIHRoZSBw YXJ0aXRpb25lZCByZWwsIGFuZCBidWlsZGluZyBhCkBAIC01NDYsNiArNTY5LDkgQEAgbWFrZV9w YXJ0aXRpb25lZHJlbF9wcnVuZWluZm8oUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnBh cmVudHJlbCwKIAkJICogZXhlY3V0b3IgcGVyLXNjYW4gcHJ1bmluZyBzdGVwcy4gIFRoaXMgZmly c3QgcGFzcyBjcmVhdGVzIHN0YXJ0dXAKIAkJICogcHJ1bmluZyBzdGVwcyBhbmQgZGV0ZWN0cyB3 aGV0aGVyIHRoZXJlJ3MgYW55IHBvc3NpYmx5LXVzZWZ1bCBxdWFscwogCQkgKiB0aGF0IHdvdWxk IHJlcXVpcmUgcGVyLXNjYW4gcHJ1bmluZy4KKwkJICoKKwkJICogSW4gdGhlIGZpcnN0IHBhc3Ms IHdlIG5vdGUgd2hldGhlciB0aGUgMm5kIHBhc3MgaXMgbmVjZXNzYXJ5IGJ5CisJCSAqIG5vdGlu ZyB0aGUgcHJlc2VuY2Ugb2YgRVhFQyBwYXJhbWV0ZXJzLgogCQkgKi8KIAkJZ2VuX3BhcnRwcnVu ZV9zdGVwcyhzdWJwYXJ0LCBwYXJ0cHJ1bmVxdWFsLCBQQVJUVEFSR0VUX0lOSVRJQUwsCiAJCQkJ CQkJJmNvbnRleHQpOwpAQCAtNjIwLDYgKzY0NiwxMiBAQCBtYWtlX3BhcnRpdGlvbmVkcmVsX3By dW5laW5mbyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcGFyZW50cmVsLAogCQlwaW5m by0+ZXhlY3BhcmFtaWRzID0gZXhlY3BhcmFtaWRzOwogCQkvKiBSZW1haW5pbmcgZmllbGRzIHdp bGwgYmUgZmlsbGVkIGluIHRoZSBuZXh0IGxvb3AgKi8KIAorCQkvKiByZWNvcmQgd2hpY2ggdHlw ZXMgb2YgcHJ1bmluZyBzdGVwcyB3ZSd2ZSBzZWVuIHNvIGZhciAqLworCQlpZiAoaW5pdGlhbF9w cnVuaW5nX3N0ZXBzICE9IE5JTCkKKwkJCSpuZWVkc19pbml0X3BydW5pbmcgPSB0cnVlOworCQlp ZiAoZXhlY19wcnVuaW5nX3N0ZXBzICE9IE5JTCkKKwkJCSpuZWVkc19leGVjX3BydW5pbmcgPSB0 cnVlOworCiAJCXBpbmZvbGlzdCA9IGxhcHBlbmQocGluZm9saXN0LCBwaW5mbyk7CiAJfQogCkBA IC02NDcsNiArNjc5LDcgQEAgbWFrZV9wYXJ0aXRpb25lZHJlbF9wcnVuZWluZm8oUGxhbm5lcklu Zm8gKnJvb3QsIFJlbE9wdEluZm8gKnBhcmVudHJlbCwKIAkJaW50CQkgICAqc3VicGxhbl9tYXA7 CiAJCWludAkJICAgKnN1YnBhcnRfbWFwOwogCQlPaWQJCSAgICpyZWxpZF9tYXA7CisJCUluZGV4 CSAgICpydGlfbWFwOwogCiAJCS8qCiAJCSAqIENvbnN0cnVjdCB0aGUgc3VicGxhbiBhbmQgc3Vi cGFydCBtYXBzIGZvciB0aGlzIHBhcnRpdGlvbmluZyBsZXZlbC4KQEAgLTY1OSw2ICs2OTIsNyBA QCBtYWtlX3BhcnRpdGlvbmVkcmVsX3BydW5laW5mbyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0 SW5mbyAqcGFyZW50cmVsLAogCQlzdWJwYXJ0X21hcCA9IChpbnQgKikgcGFsbG9jKG5wYXJ0cyAq IHNpemVvZihpbnQpKTsKIAkJbWVtc2V0KHN1YnBhcnRfbWFwLCAtMSwgbnBhcnRzICogc2l6ZW9m KGludCkpOwogCQlyZWxpZF9tYXAgPSAoT2lkICopIHBhbGxvYzAobnBhcnRzICogc2l6ZW9mKE9p ZCkpOworCQlydGlfbWFwID0gKEluZGV4ICopIHBhbGxvYzAobnBhcnRzICogc2l6ZW9mKEluZGV4 KSk7CiAJCXByZXNlbnRfcGFydHMgPSBOVUxMOwogCiAJCWkgPSAtMTsKQEAgLTY3Myw2ICs3MDcs NyBAQCBtYWtlX3BhcnRpdGlvbmVkcmVsX3BydW5laW5mbyhQbGFubmVySW5mbyAqcm9vdCwgUmVs T3B0SW5mbyAqcGFyZW50cmVsLAogCQkJc3VicGxhbl9tYXBbaV0gPSBzdWJwbGFuaWR4ID0gcmVs aWRfc3VicGxhbl9tYXBbcGFydHJlbC0+cmVsaWRdIC0gMTsKIAkJCXN1YnBhcnRfbWFwW2ldID0g c3VicGFydGlkeCA9IHJlbGlkX3N1YnBhcnRfbWFwW3BhcnRyZWwtPnJlbGlkXSAtIDE7CiAJCQly ZWxpZF9tYXBbaV0gPSBwbGFubmVyX3J0X2ZldGNoKHBhcnRyZWwtPnJlbGlkLCByb290KS0+cmVs aWQ7CisJCQlydGlfbWFwW2ldID0gcGFydHJlbC0+cmVsaWQ7CiAJCQlpZiAoc3VicGxhbmlkeCA+ PSAwKQogCQkJewogCQkJCXByZXNlbnRfcGFydHMgPSBibXNfYWRkX21lbWJlcihwcmVzZW50X3Bh cnRzLCBpKTsKQEAgLTY5Nyw2ICs3MzIsNyBAQCBtYWtlX3BhcnRpdGlvbmVkcmVsX3BydW5laW5m byhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcGFyZW50cmVsLAogCQlwaW5mby0+c3Vi cGxhbl9tYXAgPSBzdWJwbGFuX21hcDsKIAkJcGluZm8tPnN1YnBhcnRfbWFwID0gc3VicGFydF9t YXA7CiAJCXBpbmZvLT5yZWxpZF9tYXAgPSByZWxpZF9tYXA7CisJCXBpbmZvLT5ydGlfbWFwID0g cnRpX21hcDsKIAl9CiAKIAlwZnJlZShyZWxpZF9zdWJwYXJ0X21hcCk7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC91dGlscy9jYWNoZS9wbGFuY2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Nh Y2hlL3BsYW5jYWNoZS5jCmluZGV4IDc3YzJiYTNmOGYuLmYxMTMxNzAxNDAgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3BsYW5jYWNoZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2NhY2hlL3BsYW5jYWNoZS5jCkBAIC0xNzQ3LDcgKzE3NDcsOCBAQCBBY3F1aXJlRXhlY3V0 b3JMb2NrcyhMaXN0ICpzdG10X2xpc3QsIGJvb2wgYWNxdWlyZSkKIAlmb3JlYWNoKGxjMSwgc3Rt dF9saXN0KQogCXsKIAkJUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10ID0gbGZpcnN0X25vZGUoUGxh bm5lZFN0bXQsIGxjMSk7Ci0JCUxpc3RDZWxsICAgKmxjMjsKKwkJQml0bWFwc2V0ICAqYWxsTG9j a1JlbGlkczsKKwkJaW50CQkJcnRpOwogCiAJCWlmIChwbGFubmVkc3RtdC0+Y29tbWFuZFR5cGUg PT0gQ01EX1VUSUxJVFkpCiAJCXsKQEAgLTE3NjAsMTQgKzE3NjEsMTcgQEAgQWNxdWlyZUV4ZWN1 dG9yTG9ja3MoTGlzdCAqc3RtdF9saXN0LCBib29sIGFjcXVpcmUpCiAJCQkgKi8KIAkJCVF1ZXJ5 CSAgICpxdWVyeSA9IFV0aWxpdHlDb250YWluc1F1ZXJ5KHBsYW5uZWRzdG10LT51dGlsaXR5U3Rt dCk7CiAKKwkJCUFzc2VydChwbGFubmVkc3RtdC0+bWluTG9ja1JlbGlkcyA9PSBOVUxMKTsKIAkJ CWlmIChxdWVyeSkKIAkJCQlTY2FuUXVlcnlGb3JMb2NrcyhxdWVyeSwgYWNxdWlyZSk7CiAJCQlj b250aW51ZTsKIAkJfQogCi0JCWZvcmVhY2gobGMyLCBwbGFubmVkc3RtdC0+cnRhYmxlKQorCQlh bGxMb2NrUmVsaWRzID0gcGxhbm5lZHN0bXQtPm1pbkxvY2tSZWxpZHM7CisJCXJ0aSA9IC0xOwor CQl3aGlsZSAoKHJ0aSA9IGJtc19uZXh0X21lbWJlcihhbGxMb2NrUmVsaWRzLCBydGkpKSA+IDAp CiAJCXsKLQkJCVJhbmdlVGJsRW50cnkgKnJ0ZSA9IChSYW5nZVRibEVudHJ5ICopIGxmaXJzdChs YzIpOworCQkJUmFuZ2VUYmxFbnRyeSAqcnRlID0gcnRfZmV0Y2gocnRpLCBwbGFubmVkc3RtdC0+ cnRhYmxlKTsKIAogCQkJaWYgKCEocnRlLT5ydGVraW5kID09IFJURV9SRUxBVElPTiB8fAogCQkJ CSAgKHJ0ZS0+cnRla2luZCA9PSBSVEVfU1VCUVVFUlkgJiYgT2lkSXNWYWxpZChydGUtPnJlbGlk KSkpKQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oIGIv c3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oCmluZGV4IGVlNDg3ZTQyZGQuLjIx ZDg1YTc4MDkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24u aAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjUGFydGl0aW9uLmgKQEAgLTQ1LDYgKzQ1 LDcgQEAgZXh0ZXJuIHZvaWQgRXhlY0NsZWFudXBUdXBsZVJvdXRpbmcoTW9kaWZ5VGFibGVTdGF0 ZSAqbXRzdGF0ZSwKICAqIG5wYXJ0cwkJCQkJCUxlbmd0aCBvZiBzdWJwbGFuX21hcFtdIGFuZCBz dWJwYXJ0X21hcFtdLgogICogc3VicGxhbl9tYXAJCQkJCVN1YnBsYW4gaW5kZXggYnkgcGFydGl0 aW9uIGluZGV4LCBvciAtMS4KICAqIHN1YnBhcnRfbWFwCQkJCQlTdWJwYXJ0IGluZGV4IGJ5IHBh cnRpdGlvbiBpbmRleCwgb3IgLTEuCisgKiBydGlfbWFwCQkJCQkJUmFuZ2UgdGFibGUgaW5kZXgg YnkgcGFydGl0aW9uIGluZGV4LCBvciAwLgogICogcHJlc2VudF9wYXJ0cwkJCQlBIEJpdG1hcHNl dCBvZiB0aGUgcGFydGl0aW9uIGluZGV4ZXMgdGhhdCB3ZQogICoJCQkJCQkJCWhhdmUgc3VicGxh bnMgb3Igc3VicGFydHMgZm9yLgogICogaW5pdGlhbF9wcnVuaW5nX3N0ZXBzCQlMaXN0IG9mIFBh cnRpdGlvblBydW5lU3RlcHMgdXNlZCB0bwpAQCAtNjEsNiArNjIsNyBAQCB0eXBlZGVmIHN0cnVj dCBQYXJ0aXRpb25lZFJlbFBydW5pbmdEYXRhCiAJaW50CQkJbnBhcnRzOwogCWludAkJICAgKnN1 YnBsYW5fbWFwOwogCWludAkJICAgKnN1YnBhcnRfbWFwOworCUluZGV4CSAgICpydGlfbWFwOwog CUJpdG1hcHNldCAgKnByZXNlbnRfcGFydHM7CiAJTGlzdAkgICAqaW5pdGlhbF9wcnVuaW5nX3N0 ZXBzOwogCUxpc3QJICAgKmV4ZWNfcHJ1bmluZ19zdGVwczsKQEAgLTEyNiw2ICsxMjgsMTAgQEAg ZXh0ZXJuIFBhcnRpdGlvblBydW5lU3RhdGUgKkV4ZWNJbml0UGFydGl0aW9uUHJ1bmluZyhQbGFu U3RhdGUgKnBsYW5zdGF0ZSwKIAkJCQkJCQkJCQkJCQkgaW50IHBhcnRfcHJ1bmVfaW5kZXgsCiAJ CQkJCQkJCQkJCQkJIEJpdG1hcHNldCAqcm9vdF9wYXJlbnRfcmVsaWRzLAogCQkJCQkJCQkJCQkJ CSBCaXRtYXBzZXQgKippbml0aWFsbHlfdmFsaWRfc3VicGxhbnMpOworZXh0ZXJuIFBhcnRpdGlv blBydW5lU3RhdGUgKkV4ZWNDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlKFBsYW5TdGF0ZSAqcGxh bnN0YXRlLCBFU3RhdGUgKmVzdGF0ZSwKKwkJCQkJCQkgIFBhcnRpdGlvblBydW5lSW5mbyAqcHJ1 bmVpbmZvLAorCQkJCQkJCSAgYm9vbCBjb25zaWRlcl9pbml0aWFsX3N0ZXBzLAorCQkJCQkJCSAg Ym9vbCBjb25zaWRlcl9leGVjX3N0ZXBzKTsKIGV4dGVybiBCaXRtYXBzZXQgKkV4ZWNGaW5kTWF0 Y2hpbmdTdWJQbGFucyhQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlLAogCQkJCQkJCQkJ CSAgIGJvb2wgaW5pdGlhbF9wcnVuZSk7CiAjZW5kaWYJCQkJCQkJLyogRVhFQ1BBUlRJVElPTl9I ICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5oIGIvc3JjL2luY2x1ZGUv bm9kZXMvbm9kZXMuaAppbmRleCAxMDc1MmU4MDExLi4xZGU4ZjNmYWRjIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL25vZGVzLmgK QEAgLTIxOCw2ICsyMTgsNyBAQCBleHRlcm4gc3RydWN0IEJpdG1hcHNldCAqcmVhZEJpdG1hcHNl dCh2b2lkKTsKIGV4dGVybiB1aW50cHRyX3QgcmVhZERhdHVtKGJvb2wgdHlwYnl2YWwpOwogZXh0 ZXJuIGJvb2wgKnJlYWRCb29sQ29scyhpbnQgbnVtQ29scyk7CiBleHRlcm4gaW50ICpyZWFkSW50 Q29scyhpbnQgbnVtQ29scyk7CitleHRlcm4gSW5kZXggKnJlYWRJbmRleENvbHMoaW50IG51bUNv bHMpOwogZXh0ZXJuIE9pZCAqcmVhZE9pZENvbHMoaW50IG51bUNvbHMpOwogZXh0ZXJuIGludDE2 ICpyZWFkQXR0ck51bWJlckNvbHMoaW50IG51bUNvbHMpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9ub2Rlcy9wYXRobm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmlu ZGV4IDJkMWQ4ZjRiY2QuLmQwMGI1ZGNiMDMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVz L3BhdGhub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCkBAIC0xMjgs NiArMTI4LDE3IEBAIHR5cGVkZWYgc3RydWN0IFBsYW5uZXJHbG9iYWwKIAkvKiBMaXN0IG9mIFBh cnRpdGlvblBydW5lSW5mbyBjb250YWluZWQgaW4gdGhlIHBsYW4gKi8KIAlMaXN0CSAgICpwYXJ0 UHJ1bmVJbmZvczsKIAorCS8qCisJICogRG8gYW55IG9mIHRob3NlIFBhcnRpdGlvblBydW5lSW5m b3MgaGF2ZSBpbml0aWFsIHBydW5pbmcgc3RlcHMgaW4gdGhlbT8KKwkgKi8KKwlib29sCQljb250 YWluc0luaXRpYWxQcnVuaW5nOworCisJLyoKKwkgKiBJbmRleGVzIG9mIGFsbCByYW5nZSB0YWJs ZSBlbnRyaWVzOyBmb3IgQWNxdWlyZUV4ZWN1dG9yTG9ja3MoKSdzCisJICogcGVydXNhbC4KKwkg Ki8KKwlCaXRtYXBzZXQgICptaW5Mb2NrUmVsaWRzOworCiAJLyogT0lEcyBvZiByZWxhdGlvbnMg dGhlIHBsYW4gZGVwZW5kcyBvbiAqLwogCUxpc3QJICAgKnJlbGF0aW9uT2lkczsKIApkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9w bGFubm9kZXMuaAppbmRleCBjMTIzNGZjZjM2Li43YjUzZjk5MGUwIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9k ZXMuaApAQCAtNzMsMTEgKzczLDE4IEBAIHR5cGVkZWYgc3RydWN0IFBsYW5uZWRTdG10CiAJTGlz dAkgICAqcGFydFBydW5lSW5mb3M7IC8qIExpc3Qgb2YgUGFydGl0aW9uUHJ1bmVJbmZvIGNvbnRh aW5lZCBpbiB0aGUKIAkJCQkJCQkJICogcGxhbiAqLwogCisJYm9vbAkJY29udGFpbnNJbml0aWFs UHJ1bmluZzsJLyogRG8gYW55IG9mIHRob3NlIFBhcnRpdGlvblBydW5lSW5mb3MKKwkJCQkJCQkJ CQkgKiBoYXZlIGluaXRpYWwgcHJ1bmluZyBzdGVwcyBpbiB0aGVtPworCQkJCQkJCQkJCSAqLwor CiAJTGlzdAkgICAqcnRhYmxlOwkJCS8qIGxpc3Qgb2YgUmFuZ2VUYmxFbnRyeSBub2RlcyAqLwog CiAJTGlzdAkgICAqcGVybUluZm9zOwkJLyogbGlzdCBvZiBSVEVQZXJtaXNzaW9uSW5mbyBub2Rl cyBmb3IgcnRhYmxlCiAJCQkJCQkJCSAqIGVudHJpZXMgbmVlZGluZyBvbmUgKi8KIAorCUJpdG1h cHNldCAgKm1pbkxvY2tSZWxpZHM7CS8qIEluZGV4ZXMgb2YgYWxsIHJhbmdlIHRhYmxlIGVudHJp ZXM7IGZvcgorCQkJCQkJCQkgKiBBY3F1aXJlRXhlY3V0b3JMb2NrcygpJ3MgcGVydXNhbCAqLwor CiAJLyogcnRhYmxlIGluZGV4ZXMgb2YgdGFyZ2V0IHJlbGF0aW9ucyBmb3IgSU5TRVJUL1VQREFU RS9ERUxFVEUvTUVSR0UgKi8KIAlMaXN0CSAgICpyZXN1bHRSZWxhdGlvbnM7CS8qIGludGVnZXIg bGlzdCBvZiBSVCBpbmRleGVzLCBvciBOSUwgKi8KIApAQCAtMTQxNyw2ICsxNDI0LDEzIEBAIHR5 cGVkZWYgc3RydWN0IFBsYW5Sb3dNYXJrCiAgKiBwcnVuZV9pbmZvcwkJCUxpc3Qgb2YgTGlzdHMg Y29udGFpbmluZyBQYXJ0aXRpb25lZFJlbFBydW5lSW5mbyBub2RlcywKICAqCQkJCQkJb25lIHN1 Ymxpc3QgcGVyIHJ1bi10aW1lLXBydW5hYmxlIHBhcnRpdGlvbiBoaWVyYXJjaHkKICAqCQkJCQkJ YXBwZWFyaW5nIGluIHRoZSBwYXJlbnQgcGxhbiBub2RlJ3Mgc3VicGxhbnMuCisgKgorICogbmVl ZHNfaW5pdF9wcnVuaW5nCURvZXMgYW55IG9mIHRoZSBQYXJ0aXRpb25lZFJlbFBydW5lSW5mb3Mg aW4KKyAqCQkJCQkJcHJ1bmVfaW5mb3MgaGF2ZSBpdHMgaW5pdGlhbF9wcnVuaW5nX3N0ZXBzIHNl dD8KKyAqCisgKiBuZWVkc19leGVjX3BydW5pbmcJRG9lcyBhbnkgb2YgdGhlIFBhcnRpdGlvbmVk UmVsUHJ1bmVJbmZvcyBpbgorICoJCQkJCQlwcnVuZV9pbmZvcyBoYXZlIGl0cyBleGVjX3BydW5p bmdfc3RlcHMgc2V0PworICoKICAqIG90aGVyX3N1YnBsYW5zCQlJbmRleGVzIG9mIGFueSBzdWJw bGFucyB0aGF0IGFyZSBub3QgYWNjb3VudGVkIGZvcgogICoJCQkJCQlieSBhbnkgb2YgdGhlIFBh cnRpdGlvbmVkUmVsUHJ1bmVJbmZvIG5vZGVzIGluCiAgKgkJCQkJCSJwcnVuZV9pbmZvcyIuICBU aGVzZSBzdWJwbGFucyBtdXN0IG5vdCBiZSBwcnVuZWQuCkBAIC0xNDI4LDYgKzE0NDIsOCBAQCB0 eXBlZGVmIHN0cnVjdCBQYXJ0aXRpb25QcnVuZUluZm8KIAlOb2RlVGFnCQl0eXBlOwogCUJpdG1h cHNldCAgKnJvb3RfcGFyZW50X3JlbGlkczsKIAlMaXN0CSAgICpwcnVuZV9pbmZvczsKKwlib29s CQluZWVkc19pbml0X3BydW5pbmc7CisJYm9vbAkJbmVlZHNfZXhlY19wcnVuaW5nOwogCUJpdG1h cHNldCAgKm90aGVyX3N1YnBsYW5zOwogfSBQYXJ0aXRpb25QcnVuZUluZm87CiAKQEAgLTE0NzIs NiArMTQ4OCw5IEBAIHR5cGVkZWYgc3RydWN0IFBhcnRpdGlvbmVkUmVsUHJ1bmVJbmZvCiAJLyog cmVsYXRpb24gT0lEIGJ5IHBhcnRpdGlvbiBpbmRleCwgb3IgMCAqLwogCU9pZAkJICAgKnJlbGlk X21hcCBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShucGFydHMpKTsKIAorCS8qIFJhbmdlIHRhYmxl IGluZGV4IGJ5IHBhcnRpdGlvbiBpbmRleCwgb3IgMC4gKi8KKwlJbmRleAkgICAqcnRpX21hcCBw Z19ub2RlX2F0dHIoYXJyYXlfc2l6ZShucGFydHMpKTsKKwogCS8qCiAJICogaW5pdGlhbF9wcnVu aW5nX3N0ZXBzIHNob3dzIGhvdyB0byBwcnVuZSBkdXJpbmcgZXhlY3V0b3Igc3RhcnR1cCAoaS5l LiwKIAkgKiB3aXRob3V0IHVzZSBvZiBhbnkgUEFSQU1fRVhFQyBQYXJhbXMpOyBpdCBpcyBOSUwg aWYgbm8gc3RhcnR1cCBwcnVuaW5nCi0tIAoyLjM1LjMKCg== --000000000000dc2ca505f3396ed1--