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 1p0iuv-00013w-Kf for pgsql-hackers@arkaria.postgresql.org; Thu, 01 Dec 2022 12:43:54 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1p0iuu-0006BW-IK for pgsql-hackers@arkaria.postgresql.org; Thu, 01 Dec 2022 12:43:52 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1p0iut-0006BN-NA for pgsql-hackers@lists.postgresql.org; Thu, 01 Dec 2022 12:43:52 +0000 Received: from mail-pl1-x630.google.com ([2607:f8b0:4864:20::630]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1p0iuo-0003F1-Lq for pgsql-hackers@postgresql.org; Thu, 01 Dec 2022 12:43:50 +0000 Received: by mail-pl1-x630.google.com with SMTP id d18so1539510pls.4 for ; Thu, 01 Dec 2022 04:43:46 -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=Ikk3EfIsjUPhlr4LkmrdFSCA0V/C3V9JPPnjT/J3WOk=; b=e9zk4lP98n3eh1Kla/PSHK8vJNKyMsN7jh4O+DD3tZ314QXZV36+9k7WxV715jXYhR T7MW7hWjjpqbaRLro5NfrVYCnRUrcIM5vPvHlwxOJCHF1u/xoZgYgdQrL94CpY725Ur/ 3bb0A7A35dFkPH5l5zYRcO+Uv31hXVirEaaN1jPUJOTKfcTcqpq5keQJUji0eqW2dEFo 3URD8VK5n9NNhiXg3kyrV2L00CBkykttWdXk2W4dlJyYN2015OoKhkATCzVktnOM4Ulm w2Ve2fyU8YLyMyP3LfpZj1rBdzyr3CI7/EyRpi3GWAvTQp+9/j2h2D5eDj4ITmeNVCN3 W+4A== 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=Ikk3EfIsjUPhlr4LkmrdFSCA0V/C3V9JPPnjT/J3WOk=; b=vB115rcuUQp/R692XRMJXWRlbVZjy5Vt5Fgcg/pIXOu+Ln7fE/jhZJuUNXcUYqcwDY hsZpVJqlb1ziGQ26CYOttr7Rwq+jOxkvrmXDGRAaVpEe10bG9g9/B8J7SBv62oX0CfE1 9k0PqGT+5gEwOUD2kO0iztWnlyUUw7L0ARAzZa25qtwGAI3g4gYEY6S/9HBpnmVfCbA3 GK4NQdORyCBNx74vJsoRcsZx53VcVQ5Os2GgBCZUSN9opwnb+TlfP0zZ88OnNDQGVNfE yGoe0iUFRmHS7zGP2PqiJvGvrfHUTxyESyvKD94Hw64GItl3ifbHN/nersKTq1OmPlQI EkVA== X-Gm-Message-State: ANoB5plRGFnpHrydP9GLS1evIMMsrZL8pNbxQYLWUfgdv3var0ZKWXsC EhOCla+508+pzrhRsymV/5RRqiM18xdddFtflxQ= X-Google-Smtp-Source: AA0mqf5yadFV3B5JY4T6CfJ49wBAFnAGr7bwHJn9ap4MR7wrTgRbhHQPXSa6X3q4XkNPOOfdJSotfpZ8mLl3IXk/UhQ= X-Received: by 2002:a17:90a:6547:b0:213:d08f:a483 with SMTP id f7-20020a17090a654700b00213d08fa483mr69079454pjs.21.1669898625444; Thu, 01 Dec 2022 04:43:45 -0800 (PST) MIME-Version: 1.0 References: <20221201112106.gjlcv6nvndjbnoez@alvherre.pgsql> In-Reply-To: <20221201112106.gjlcv6nvndjbnoez@alvherre.pgsql> From: Amit Langote Date: Thu, 1 Dec 2022 21:43:28 +0900 Message-ID: Subject: Re: generic plans and "initial" pruning To: Alvaro Herrera Cc: Robert Haas , Jacob Champion , Zhihong Yu , David Rowley , Tom Lane , PostgreSQL-development Content-Type: multipart/mixed; boundary="00000000000062068905eec39225" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000062068905eec39225 Content-Type: text/plain; charset="UTF-8" On Thu, Dec 1, 2022 at 8:21 PM Alvaro Herrera wrote: > On 2022-Dec-01, Amit Langote wrote: > > Hmm, how about keeping the [Merge]Append's parent relation's RT index > > in the PartitionPruneInfo and passing it down to > > ExecInitPartitionPruning() from ExecInit[Merge]Append() for > > cross-checking? Both Append and MergeAppend already have a > > 'apprelids' field that we can save a copy of in the > > PartitionPruneInfo. Tried that in the attached delta patch. > > Ah yeah, that sounds about what I was thinking. I've merged that in and > pushed to github, which had a strange pg_upgrade failure on Windows > mentioning log files that were not captured by the CI tooling. So I > pushed another one trying to grab those files, in case it wasn't an > one-off failure. It's running now: > https://cirrus-ci.com/task/5857239638999040 > > If all goes well with this run, I'll get this 0001 pushed. Thanks for pushing 0001. Rebased 0002 attached. -- Thanks, Amit Langote EDB: http://www.enterprisedb.com --00000000000062068905eec39225 Content-Type: application/octet-stream; name="v25-0001-Optimize-AcquireExecutorLocks-by-locking-only-un.patch" Content-Disposition: attachment; filename="v25-0001-Optimize-AcquireExecutorLocks-by-locking-only-un.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lb52i67b0 RnJvbSBjZmY0MDBhZjZjMjY0ZDdhMjY1MWZhZWM0ZDk2M2U5ODc3OTdmNTg4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBhbWl0bGFuIDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4KRGF0 ZTogV2VkLCAyMiBEZWMgMjAyMSAxNjo1NToxNyArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjI1XSBP cHRpbWl6ZSBBY3F1aXJlRXhlY3V0b3JMb2NrcygpIGJ5IGxvY2tpbmcgb25seSB1bnBydW5lZAog cGFydGl0aW9ucwoKVGhpcyBjb21taXQgdGVhY2hlcyBBY3F1aXJlRXhlY3V0b3JMb2NrcygpIHRv IHBlcmZvcm0gaW5pdGlhbApwYXJ0aXRpb24gcHJ1bmluZyB0byBub3Rpb25hbGx5IGVsaW1pbmF0 ZSB0aGUgc3Vibm9kZXMgY29udGFpbmVkIGluIGEKZ2VuZXJpYyBjYWNoZWQgcGxhbiB0aGF0IG5l ZWQgbm90IGJlIGluaXRpYWxpemVkIGR1cmluZyB0aGUgYWN0dWFsCmV4ZWN1dGlvbiBvZiB0aGUg cGxhbiBhbmQgc2tpcCBsb2NraW5nIHRoZSBwYXJ0aXRpb24gc2Nhbm5lZCBieSB0aG9zZQpzdWJu b2Rlcy4KClRoZSByZXN1bHQgb2YgcGVyZm9ybWluZyBpbml0aWFsIHBhcnRpdGlvbiBwcnVuaW5n IHRoaXMgd2F5IGJlZm9yZSB0aGUKYWN0dWFsIGV4ZWN1dGlvbiBoYXMgc3RhcnRlZCBpcyBtYWRl IGF2YWlsYWJsZSB0byB0aGUgYWN0dWFsIGV4ZWN1dGlvbiB2aWEKUGFydGl0aW9uUHJ1bmVSZXN1 bHQsIG1hZGUgYXZhaWxhYmxlIGFsb25nIHdpdGggdGhlIFBsYW5uZWRTdG10IGJ5IHRoZQpjYWxs ZXJzIG9mIHRoZSBleGVjdXRvciB0aGF0IHVzZWQgcGxhbmNhY2hlLmMgdG8gZ2V0IHRoZSBwbGFu LiAgSXQgaXMgTlVMTAppbiB0aGUgY2FzZXMgaW4gd2hpY2ggdGhlIHBsYW4gaXMgb2J0YWluZWQg YnkgY2FsbGluZyB0aGUgcGxhbm5lcgpkaXJlY3RseSBvciBpZiB0aGUgcGxhbiBvYnRhaW5lZCBi eSBwbGFuY2FjaGUuYyBpcyBub3QgYSBnZW5lcmljIG9uZS4KLS0tCiBzcmMvYmFja2VuZC9jb21t YW5kcy9jb3B5dG8uYyAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY3Jl YXRlYXMuYyAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyAg ICAgICAgIHwgICA3ICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9leHRlbnNpb24uYyAgICAgICB8 ICAgMiArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0dmlldy5jICAgICAgICAgfCAgIDIgKy0K IHNyYy9iYWNrZW5kL2NvbW1hbmRzL3ByZXBhcmUuYyAgICAgICAgIHwgIDI2ICsrLQogc3JjL2Jh Y2tlbmQvZXhlY3V0b3IvUkVBRE1FICAgICAgICAgICAgfCAgMzIgKysrKwogc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZXhlY01haW4uYyAgICAgICAgfCAgNTEgKysrKysrCiBzcmMvYmFja2VuZC9leGVj dXRvci9leGVjUGFyYWxsZWwuYyAgICB8ICAyNiArKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNQYXJ0aXRpb24uYyAgIHwgMjM4ICsrKysrKysrKysrKysrKysrKysrKy0tLS0KIHNyYy9iYWNr ZW5kL2V4ZWN1dG9yL2V4ZWNVdGlscy5jICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2V4ZWN1 dG9yL2Z1bmN0aW9ucy5jICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2Rl QXBwZW5kLmMgICAgICB8ICAxMSArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBw ZW5kLmMgfCAgIDUgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL3NwaS5jICAgICAgICAgICAgIHwg IDI3ICsrLQogc3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1bmNzLmMgICAgICAgICAgfCAgIDggKy0K IHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYyAgIHwgICAyICsKIHNyYy9iYWNr ZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYyAgIHwgIDQ2ICsrKysrCiBzcmMvYmFja2VuZC9w YXJ0aXRpb25pbmcvcGFydHBydW5lLmMgICB8ICA0MSArKysrLQogc3JjL2JhY2tlbmQvdGNvcC9w b3N0Z3Jlcy5jICAgICAgICAgICAgfCAgIDggKy0KIHNyYy9iYWNrZW5kL3Rjb3AvcHF1ZXJ5LmMg ICAgICAgICAgICAgIHwgIDI4ICsrLQogc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcGxhbmNhY2hl LmMgICAgfCAyMDggKysrKysrKysrKysrKysrKysrLS0tCiBzcmMvYmFja2VuZC91dGlscy9tbWdy L3BvcnRhbG1lbS5jICAgICB8ICAxOSArKwogc3JjL2luY2x1ZGUvY29tbWFuZHMvZXhwbGFpbi5o ICAgICAgICAgfCAgIDQgKy0KIHNyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uaCAg IHwgICA5ICstCiBzcmMvaW5jbHVkZS9leGVjdXRvci9leGVjZGVzYy5oICAgICAgICB8ICAgMyAr CiBzcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oICAgICAgICB8ICAgMyArCiBzcmMvaW5j bHVkZS9ub2Rlcy9leGVjbm9kZXMuaCAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9ub2Rl cy9ub2Rlcy5oICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9k ZXMuaCAgICAgICAgICB8ICAxMiArKwogc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmggICAg ICAgICAgfCAgNDYgKysrKysKIHNyYy9pbmNsdWRlL3V0aWxzL3BsYW5jYWNoZS5oICAgICAgICAg IHwgICAzICstCiBzcmMvaW5jbHVkZS91dGlscy9wb3J0YWwuaCAgICAgICAgICAgICB8ICAgMyAr CiAzMyBmaWxlcyBjaGFuZ2VkLCA3ODEgaW5zZXJ0aW9ucygrKSwgOTggZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weXRvLmMgYi9zcmMvYmFja2VuZC9j b21tYW5kcy9jb3B5dG8uYwppbmRleCBmMjZjYzBkMTYyLi40MDFhMjI4MGEzIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5dG8uYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5k cy9jb3B5dG8uYwpAQCAtNTU4LDcgKzU1OCw3IEBAIEJlZ2luQ29weVRvKFBhcnNlU3RhdGUgKnBz dGF0ZSwKIAkJKChEUl9jb3B5ICopIGRlc3QpLT5jc3RhdGUgPSBjc3RhdGU7CiAKIAkJLyogQ3Jl YXRlIGEgUXVlcnlEZXNjIHJlcXVlc3Rpbmcgbm8gb3V0cHV0ICovCi0JCWNzdGF0ZS0+cXVlcnlE ZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHBsYW4sIHBzdGF0ZS0+cF9zb3VyY2V0ZXh0LAorCQljc3Rh dGUtPnF1ZXJ5RGVzYyA9IENyZWF0ZVF1ZXJ5RGVzYyhwbGFuLCBOSUwsIHBzdGF0ZS0+cF9zb3Vy Y2V0ZXh0LAogCQkJCQkJCQkJCQlHZXRBY3RpdmVTbmFwc2hvdCgpLAogCQkJCQkJCQkJCQlJbnZh bGlkU25hcHNob3QsCiAJCQkJCQkJCQkJCWRlc3QsIE5VTEwsIE5VTEwsIDApOwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2NyZWF0ZWFzLmMKaW5kZXggMTUyYzI5YjU1MS4uOTQyNDQ5NTQ0YyAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9j cmVhdGVhcy5jCkBAIC0zMjUsNyArMzI1LDcgQEAgRXhlY0NyZWF0ZVRhYmxlQXMoUGFyc2VTdGF0 ZSAqcHN0YXRlLCBDcmVhdGVUYWJsZUFzU3RtdCAqc3RtdCwKIAkJVXBkYXRlQWN0aXZlU25hcHNo b3RDb21tYW5kSWQoKTsKIAogCQkvKiBDcmVhdGUgYSBRdWVyeURlc2MsIHJlZGlyZWN0aW5nIG91 dHB1dCB0byBvdXIgdHVwbGUgcmVjZWl2ZXIgKi8KLQkJcXVlcnlEZXNjID0gQ3JlYXRlUXVlcnlE ZXNjKHBsYW4sIHBzdGF0ZS0+cF9zb3VyY2V0ZXh0LAorCQlxdWVyeURlc2MgPSBDcmVhdGVRdWVy eURlc2MocGxhbiwgTklMLCBwc3RhdGUtPnBfc291cmNldGV4dCwKIAkJCQkJCQkJCUdldEFjdGl2 ZVNuYXBzaG90KCksIEludmFsaWRTbmFwc2hvdCwKIAkJCQkJCQkJCWRlc3QsIHBhcmFtcywgcXVl cnlFbnYsIDApOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKaW5kZXggZjg2OTgzYzY2MC4uMmYyYjU1 ODYwOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCisrKyBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwpAQCAtNDA3LDcgKzQwNyw3IEBAIEV4cGxhaW5P bmVRdWVyeShRdWVyeSAqcXVlcnksIGludCBjdXJzb3JPcHRpb25zLAogCQl9CiAKIAkJLyogcnVu IGl0IChpZiBuZWVkZWQpIGFuZCBwcm9kdWNlIG91dHB1dCAqLwotCQlFeHBsYWluT25lUGxhbihw bGFuLCBpbnRvLCBlcywgcXVlcnlTdHJpbmcsIHBhcmFtcywgcXVlcnlFbnYsCisJCUV4cGxhaW5P bmVQbGFuKHBsYW4sIE5JTCwgaW50bywgZXMsIHF1ZXJ5U3RyaW5nLCBwYXJhbXMsIHF1ZXJ5RW52 LAogCQkJCQkgICAmcGxhbmR1cmF0aW9uLCAoZXMtPmJ1ZmZlcnMgPyAmYnVmdXNhZ2UgOiBOVUxM KSk7CiAJfQogfQpAQCAtNTE1LDcgKzUxNSw4IEBAIEV4cGxhaW5PbmVVdGlsaXR5KE5vZGUgKnV0 aWxpdHlTdG10LCBJbnRvQ2xhdXNlICppbnRvLCBFeHBsYWluU3RhdGUgKmVzLAogICogdG8gY2Fs bCBpdC4KICAqLwogdm9pZAotRXhwbGFpbk9uZVBsYW4oUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10 LCBJbnRvQ2xhdXNlICppbnRvLCBFeHBsYWluU3RhdGUgKmVzLAorRXhwbGFpbk9uZVBsYW4oUGxh bm5lZFN0bXQgKnBsYW5uZWRzdG10LCBMaXN0ICpwYXJ0X3BydW5lX3Jlc3VsdHMsCisJCQkgICBJ bnRvQ2xhdXNlICppbnRvLCBFeHBsYWluU3RhdGUgKmVzLAogCQkJICAgY29uc3QgY2hhciAqcXVl cnlTdHJpbmcsIFBhcmFtTGlzdEluZm8gcGFyYW1zLAogCQkJICAgUXVlcnlFbnZpcm9ubWVudCAq cXVlcnlFbnYsIGNvbnN0IGluc3RyX3RpbWUgKnBsYW5kdXJhdGlvbiwKIAkJCSAgIGNvbnN0IEJ1 ZmZlclVzYWdlICpidWZ1c2FnZSkKQEAgLTU2Myw3ICs1NjQsNyBAQCBFeHBsYWluT25lUGxhbihQ bGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsIEludG9DbGF1c2UgKmludG8sIEV4cGxhaW5TdGF0ZSAq ZXMsCiAJCWRlc3QgPSBOb25lX1JlY2VpdmVyOwogCiAJLyogQ3JlYXRlIGEgUXVlcnlEZXNjIGZv ciB0aGUgcXVlcnkgKi8KLQlxdWVyeURlc2MgPSBDcmVhdGVRdWVyeURlc2MocGxhbm5lZHN0bXQs IHF1ZXJ5U3RyaW5nLAorCXF1ZXJ5RGVzYyA9IENyZWF0ZVF1ZXJ5RGVzYyhwbGFubmVkc3RtdCwg cGFydF9wcnVuZV9yZXN1bHRzLCBxdWVyeVN0cmluZywKIAkJCQkJCQkJR2V0QWN0aXZlU25hcHNo b3QoKSwgSW52YWxpZFNuYXBzaG90LAogCQkJCQkJCQlkZXN0LCBwYXJhbXMsIHF1ZXJ5RW52LCBp bnN0cnVtZW50X29wdGlvbik7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4 dGVuc2lvbi5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXh0ZW5zaW9uLmMKaW5kZXggY2YxYjFj YTU3MS4uOTA0Y2JjYmE0YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXh0ZW5z aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXh0ZW5zaW9uLmMKQEAgLTc3OSw3ICs3 NzksNyBAQCBleGVjdXRlX3NxbF9zdHJpbmcoY29uc3QgY2hhciAqc3FsKQogCQkJewogCQkJCVF1 ZXJ5RGVzYyAgKnFkZXNjOwogCi0JCQkJcWRlc2MgPSBDcmVhdGVRdWVyeURlc2Moc3RtdCwKKwkJ CQlxZGVzYyA9IENyZWF0ZVF1ZXJ5RGVzYyhzdG10LCBOSUwsCiAJCQkJCQkJCQkJc3FsLAogCQkJ CQkJCQkJCUdldEFjdGl2ZVNuYXBzaG90KCksIE5VTEwsCiAJCQkJCQkJCQkJZGVzdCwgTlVMTCwg TlVMTCwgMCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9tYXR2aWV3LmMgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9tYXR2aWV3LmMKaW5kZXggOWFjMDM4MzQ1OS4uNjVjOGQwYWE1 OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0dmlldy5jCisrKyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL21hdHZpZXcuYwpAQCAtNDA4LDcgKzQwOCw3IEBAIHJlZnJlc2hfbWF0 dmlld19kYXRhZmlsbChEZXN0UmVjZWl2ZXIgKmRlc3QsIFF1ZXJ5ICpxdWVyeSwKIAlVcGRhdGVB Y3RpdmVTbmFwc2hvdENvbW1hbmRJZCgpOwogCiAJLyogQ3JlYXRlIGEgUXVlcnlEZXNjLCByZWRp cmVjdGluZyBvdXRwdXQgdG8gb3VyIHR1cGxlIHJlY2VpdmVyICovCi0JcXVlcnlEZXNjID0gQ3Jl YXRlUXVlcnlEZXNjKHBsYW4sIHF1ZXJ5U3RyaW5nLAorCXF1ZXJ5RGVzYyA9IENyZWF0ZVF1ZXJ5 RGVzYyhwbGFuLCBOSUwsIHF1ZXJ5U3RyaW5nLAogCQkJCQkJCQlHZXRBY3RpdmVTbmFwc2hvdCgp LCBJbnZhbGlkU25hcHNob3QsCiAJCQkJCQkJCWRlc3QsIE5VTEwsIE5VTEwsIDApOwogCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9wcmVwYXJlLmMgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9wcmVwYXJlLmMKaW5kZXggOWUyOTU4NGQ5My4uMjliNDU1MzlkMyAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvcHJlcGFyZS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3ByZXBhcmUuYwpAQCAtMTU1LDYgKzE1NSw3IEBAIEV4ZWN1dGVRdWVyeShQYXJzZVN0YXRlICpw c3RhdGUsCiAJUHJlcGFyZWRTdGF0ZW1lbnQgKmVudHJ5OwogCUNhY2hlZFBsYW4gKmNwbGFuOwog CUxpc3QJICAgKnBsYW5fbGlzdDsKKwlMaXN0CSAgICpwYXJ0X3BydW5lX3Jlc3VsdHNfbGlzdDsK IAlQYXJhbUxpc3RJbmZvIHBhcmFtTEkgPSBOVUxMOwogCUVTdGF0ZQkgICAqZXN0YXRlID0gTlVM TDsKIAlQb3J0YWwJCXBvcnRhbDsKQEAgLTE5Myw3ICsxOTQsMTAgQEAgRXhlY3V0ZVF1ZXJ5KFBh cnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkJCQkJCSAgIGVudHJ5LT5wbGFuc291cmNlLT5xdWVyeV9z dHJpbmcpOwogCiAJLyogUmVwbGFuIGlmIG5lZWRlZCwgYW5kIGluY3JlbWVudCBwbGFuIHJlZmNv dW50IGZvciBwb3J0YWwgKi8KLQljcGxhbiA9IEdldENhY2hlZFBsYW4oZW50cnktPnBsYW5zb3Vy Y2UsIHBhcmFtTEksIE5VTEwsIE5VTEwpOworCWNwbGFuID0gR2V0Q2FjaGVkUGxhbihlbnRyeS0+ cGxhbnNvdXJjZSwgcGFyYW1MSSwgTlVMTCwgTlVMTCwKKwkJCQkJCSAgJnBhcnRfcHJ1bmVfcmVz dWx0c19saXN0KTsKKwlBc3NlcnQobGlzdF9sZW5ndGgoY3BsYW4tPnN0bXRfbGlzdCkgPT0KKwkJ ICAgbGlzdF9sZW5ndGgocGFydF9wcnVuZV9yZXN1bHRzX2xpc3QpKTsKIAlwbGFuX2xpc3QgPSBj cGxhbi0+c3RtdF9saXN0OwogCiAJLyoKQEAgLTIwNyw2ICsyMTEsOSBAQCBFeGVjdXRlUXVlcnko UGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCQkgIHBsYW5fbGlzdCwKIAkJCQkJICBjcGxhbik7CiAK KwkvKiBDb3B5IExpc3RzIG9mIFBhcnRpdGlvblBydW5lUmVzdWx0cyBpbnRvIHRoZSBwb3J0YWwn cyBjb250ZXh0LiAqLworCVBvcnRhbFN0b3JlUGFydGl0aW9uUHJ1bmVSZXN1bHRzKHBvcnRhbCwg cGFydF9wcnVuZV9yZXN1bHRzX2xpc3QpOworCiAJLyoKIAkgKiBGb3IgQ1JFQVRFIFRBQkxFIC4u LiBBUyBFWEVDVVRFLCB3ZSBtdXN0IHZlcmlmeSB0aGF0IHRoZSBwcmVwYXJlZAogCSAqIHN0YXRl bWVudCBpcyBvbmUgdGhhdCBwcm9kdWNlcyB0dXBsZXMuICBDdXJyZW50bHkgd2UgaW5zaXN0IHRo YXQgaXQgYmUKQEAgLTU3Niw3ICs1ODMsOSBAQCBFeHBsYWluRXhlY3V0ZVF1ZXJ5KEV4ZWN1dGVT dG10ICpleGVjc3RtdCwgSW50b0NsYXVzZSAqaW50bywgRXhwbGFpblN0YXRlICplcywKIAljb25z dCBjaGFyICpxdWVyeV9zdHJpbmc7CiAJQ2FjaGVkUGxhbiAqY3BsYW47CiAJTGlzdAkgICAqcGxh bl9saXN0OwotCUxpc3RDZWxsICAgKnA7CisJTGlzdAkgICAqcGFydF9wcnVuZV9yZXN1bHRzX2xp c3Q7CisJTGlzdENlbGwgICAqcCwKKwkJCSAgICpwcDsKIAlQYXJhbUxpc3RJbmZvIHBhcmFtTEkg PSBOVUxMOwogCUVTdGF0ZQkgICAqZXN0YXRlID0gTlVMTDsKIAlpbnN0cl90aW1lCXBsYW5zdGFy dDsKQEAgLTYxOSw3ICs2MjgsMTAgQEAgRXhwbGFpbkV4ZWN1dGVRdWVyeShFeGVjdXRlU3RtdCAq ZXhlY3N0bXQsIEludG9DbGF1c2UgKmludG8sIEV4cGxhaW5TdGF0ZSAqZXMsCiAKIAkvKiBSZXBs YW4gaWYgbmVlZGVkLCBhbmQgYWNxdWlyZSBhIHRyYW5zaWVudCByZWZjb3VudCAqLwogCWNwbGFu ID0gR2V0Q2FjaGVkUGxhbihlbnRyeS0+cGxhbnNvdXJjZSwgcGFyYW1MSSwKLQkJCQkJCSAgQ3Vy cmVudFJlc291cmNlT3duZXIsIHF1ZXJ5RW52KTsKKwkJCQkJCSAgQ3VycmVudFJlc291cmNlT3du ZXIsIHF1ZXJ5RW52LAorCQkJCQkJICAmcGFydF9wcnVuZV9yZXN1bHRzX2xpc3QpOworCUFzc2Vy dChsaXN0X2xlbmd0aChjcGxhbi0+c3RtdF9saXN0KSA9PQorCQkgICBsaXN0X2xlbmd0aChwYXJ0 X3BydW5lX3Jlc3VsdHNfbGlzdCkpOwogCiAJSU5TVFJfVElNRV9TRVRfQ1VSUkVOVChwbGFuZHVy YXRpb24pOwogCUlOU1RSX1RJTUVfU1VCVFJBQ1QocGxhbmR1cmF0aW9uLCBwbGFuc3RhcnQpOwpA QCAtNjM0LDEzICs2NDYsMTUgQEAgRXhwbGFpbkV4ZWN1dGVRdWVyeShFeGVjdXRlU3RtdCAqZXhl Y3N0bXQsIEludG9DbGF1c2UgKmludG8sIEV4cGxhaW5TdGF0ZSAqZXMsCiAJcGxhbl9saXN0ID0g Y3BsYW4tPnN0bXRfbGlzdDsKIAogCS8qIEV4cGxhaW4gZWFjaCBxdWVyeSAqLwotCWZvcmVhY2go cCwgcGxhbl9saXN0KQorCWZvcmJvdGgocCwgcGxhbl9saXN0LCBwcCwgcGFydF9wcnVuZV9yZXN1 bHRzX2xpc3QpCiAJewogCQlQbGFubmVkU3RtdCAqcHN0bXQgPSBsZmlyc3Rfbm9kZShQbGFubmVk U3RtdCwgcCk7CisJCUxpc3QgKnBhcnRfcHJ1bmVfcmVzdWx0cyA9IGxmaXJzdF9ub2RlKExpc3Qs IHBwKTsKIAogCQlpZiAocHN0bXQtPmNvbW1hbmRUeXBlICE9IENNRF9VVElMSVRZKQotCQkJRXhw bGFpbk9uZVBsYW4ocHN0bXQsIGludG8sIGVzLCBxdWVyeV9zdHJpbmcsIHBhcmFtTEksIHF1ZXJ5 RW52LAotCQkJCQkJICAgJnBsYW5kdXJhdGlvbiwgKGVzLT5idWZmZXJzID8gJmJ1ZnVzYWdlIDog TlVMTCkpOworCQkJRXhwbGFpbk9uZVBsYW4ocHN0bXQsIHBhcnRfcHJ1bmVfcmVzdWx0cywgaW50 bywgZXMsIHF1ZXJ5X3N0cmluZywKKwkJCQkJCSAgIHBhcmFtTEksIHF1ZXJ5RW52LCAmcGxhbmR1 cmF0aW9uLAorCQkJCQkJICAgKGVzLT5idWZmZXJzID8gJmJ1ZnVzYWdlIDogTlVMTCkpOwogCQll bHNlCiAJCQlFeHBsYWluT25lVXRpbGl0eShwc3RtdC0+dXRpbGl0eVN0bXQsIGludG8sIGVzLCBx dWVyeV9zdHJpbmcsCiAJCQkJCQkJICBwYXJhbUxJLCBxdWVyeUVudik7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9leGVjdXRvci9SRUFETUUgYi9zcmMvYmFja2VuZC9leGVjdXRvci9SRUFETUUK aW5kZXggMTc3NzVhNDllMi4uNWM1OWFjNWRhNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhl Y3V0b3IvUkVBRE1FCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL1JFQURNRQpAQCAtNjUsNiAr NjUsMzQgQEAgZm91bmQgdGhlcmUuICBUaGlzIGN1cnJlbnRseSBvbmx5IG9jY3VycyBmb3IgQXBw ZW5kIGFuZCBNZXJnZUFwcGVuZCBub2Rlcy4gIEluCiB0aGlzIGNhc2UgdGhlIG5vbi1yZXF1aXJl ZCBzdWJwbGFucyBhcmUgaWdub3JlZCBhbmQgdGhlIGV4ZWN1dG9yIHN0YXRlJ3MKIHN1Ym5vZGUg YXJyYXkgd2lsbCBiZWNvbWUgb3V0IG9mIHNlcXVlbmNlIHRvIHRoZSBwbGFuJ3Mgc3VicGxhbiBs aXN0LgogCitBY3R1YWxseSwgdGhlIHNvLWNhbGxlZCBleGVjdXRpb24gdGltZSBwcnVuaW5nIG1h eSBhbHNvIG9jY3VyIGV2ZW4gYmVmb3JlIHRoZQorZXhlY3V0aW9uIGhhcyBzdGFydGVkLiAgT25l IGNhc2Ugd2hlcmUgdGhhdCBvY2N1cnMgaXMgd2hlbiBhIGNhY2hlZCBnZW5lcmljCitwbGFuIGlz IGJlaW5nIHZhbGlkYXRlZCBmb3IgZXhlY3V0aW9uIGJ5IHBsYW5jYWNoZS5jOiBHZXRDYWNoZWRQ bGFuKCksIHdoaWNoCit3b3JrcyBieSBsb2NraW5nIGFsbCB0aGUgcmVsYXRpb25zIHRoYXQgd2ls bCBiZSBzY2FubmVkIGJ5IHRoYXQgcGxhbi4gIElmIHRoZQorZ2VuZXJpYyBwbGFuIGNvbnRhaW5z IG5vZGVzIHRoYXQgY2FuIHBlcmZvcm0gZXhlY3V0aW9uIHRpbWUgcGFydGl0aW9uIHBydW5pbmcK Kyh0aGF0IGlzLCBjb250YWluIGEgUGFydGl0aW9uUHJ1bmVJbmZvKSwgYSBzdWJzZXQgb2YgcHJ1 bmluZyBzdGVwcyBjb250YWluZWQKK2luIGEgZ2l2ZW4gbm9kZSdzIFBhcnRpdGlvblBydW5lSW5m byB0aGF0IGRvIG5vdCBkZXBlbmQgb24gdGhlIGV4ZWN1dGlvbgorYWN0dWFsbHkgaGF2aW5nIHN0 YXJ0ZWQgKGNhbGxlZCAiaW5pdGlhbCIgcHJ1bmluZyBzdGVwcykgYXJlIHBlcmZvcm1lZCB0bwor ZmlndXJlIG91dCB0aGUgbWluaW1hbCBzZXQgb2YgY2hpbGQgc3VicGxhbnMgdGhhdCBzYXRpc2Z5 IHRob3NlIHBydW5pbmcgc3RlcHMuCitBY3F1aXJlRXhlY3V0b3JMb2NrcygpIGxvb2tpbmcgYXQg YSBnaXZlbiBnZW5lcmljIHBsYW4gd2lsbCB0aGVuIGxvY2sgb25seSB0aGUKK3JlbGF0aW9ucyBz Y2FubmVkIGJ5IHRoZSBjaGlsZCBzdWJwbGFucyB0aGF0IHN1cnZpdmVkIHN1Y2ggcHJ1bmluZywg YWxvbmcgd2l0aAordGhvc2UgcHJlc2VudCBpbiBQbGFubmVkU3RtdC5taW5Mb2NrUmVsaWRzLiAg Tm90ZSB0aGF0IHRoZSBzdWJwbGFucyBhcmUgb25seQorbm90aW9uYWxseSBwcnVuZWQsIHRoYXQg aXMsIHRoZXkgYXJlIG5vdCByZW1vdmVkIGZyb20gdGhlIHBsYW4gdHJlZSBhcyBzdWNoLgorCitU byBwcmV2ZW50IHRoZSBleGVjdXRvciBhbmQgYW55IHRoaXJkIHBhcnR5IGV4ZWN1dGlvbiBjb2Rl IHRoYXQgY2FuIGxvb2sgYXQKK3RoZSBwbGFuIHRyZWUgZnJvbSB0cnlpbmcgdG8gZXhlY3V0ZSB0 aGUgc3VicGxhbnMgdGhhdCB3ZXJlIHBydW5lZCBhcworZGVzY3JpYmVkIGFib3ZlLCB0aGUgcmVz dWx0IG9mIHBydW5pbmcgaXMgcGFzc2VkIHRvIHRoZSBleGVjdXRvciBhcyBhIExpc3QKK29mIFBh cnRpdGlvblBydW5lUmVzdWx0IG5vZGVzIHZpYSB0aGUgUXVlcnlEZXNjLiAgRWFjaCBQYXJ0aXRp b25QcnVuZVJlc3VsdAorY29uc2lzdHMgb2YgdGhlIHNldCBvZiBpbmRleGVzIG9mIHN1cnZpdmlu ZyBzdWJwbGFucyBpbiB0aGUgcmVzcGVjdGl2ZSBwYXJlbnQKK3BsYW4gbm9kZSdzICh0aGUgb25l IHRvIHdoaWNoIHRoZSBjb3JyZXNwb25kaW5nIFBhcnRpdGlvblBydW5lSW5mbyBiZWxvbmdzKQor bGlzdCBvZiBjaGlsZCBzdWJwbGFucywgc2F2ZWQgYXMgYSBiaXRtYXBzZXQgKHZhbGlkX3N1YnBs YW5fb2ZmcykuICBJbiBvdGhlcgord29yZHMsIHRoZSBleGVjdXRvciBleGVjdXRpbmcgYSBnZW5l cmljIHBsYW4gc2hvdWxkIG5vdCByZS1ldmFsdWF0ZSB0aGUgc2V0IG9mCitpbml0aWFsbHkgdmFs aWQgc3VicGxhbnMgZm9yIGEgZ2l2ZW4gcGxhbiBub2RlIGJ5IHJlZG9pbmcgdGhlIGluaXRpYWwg cHJ1bmluZworaWYgaXQgd2FzIGFscmVhZHkgZG9uZSBieSBBY3F1aXJlRXhlY3V0b3JMb2Nrcygp IHdoZW4gdmFsaWRhdGluZyB0aGUgcGxhbi4KK1N1Y2ggcmUtZXZhbHVhdGlvbiBvZiB0aGUgcHJ1 bmluZyBzdGVwcyBtYXkgdmVyeSB3ZWxsIGVuZCB1cCByZXN1bHRpbmcgaW4gYQorZGlmZmVyZW50 IHNldCBvZiBzdWJwbGFucywgY29udGFpbmluZyBzb21lIHdob3NlIHJlbGF0aW9ucyB3ZXJlIG5v dCBsb2NrZWQgYnkKK0FjcXVpcmVFeGVjdXRvckxvY2tzKCkuCisKIEVhY2ggUGxhbiBub2RlIG1h eSBoYXZlIGV4cHJlc3Npb24gdHJlZXMgYXNzb2NpYXRlZCB3aXRoIGl0LCB0byByZXByZXNlbnQK IGl0cyB0YXJnZXQgbGlzdCwgcXVhbGlmaWNhdGlvbiBjb25kaXRpb25zLCBldGMuICBUaGVzZSB0 cmVlcyBhcmUgYWxzbwogcmVhZC1vbmx5IHRvIHRoZSBleGVjdXRvciwgYnV0IHRoZSBleGVjdXRv ciBzdGF0ZSBmb3IgZXhwcmVzc2lvbiBldmFsdWF0aW9uCkBAIC0yODYsNiArMzE0LDEwIEBAIFF1 ZXJ5IFByb2Nlc3NpbmcgQ29udHJvbCBGbG93CiAKIFRoaXMgaXMgYSBza2V0Y2ggb2YgY29udHJv bCBmbG93IGZvciBmdWxsIHF1ZXJ5IHByb2Nlc3Npbmc6CiAKKyAgWyBFeGVjdXRvckRvSW5pdGlh bFBydW5pbmcgXSAtLS0gYW4gb3B0aW9uYWwgc3RlcCB0byBwZXJmb3JtIGluaXRpYWwKKwkJcGFy dGl0aW9uIHBydW5pbmcgb24gdGhlIHBsYW4gdHJlZSB0aGUgcmVzdWx0IG9mIHdoaWNoIGlzIHBh c3NlZAorCQl0byB0aGUgZXhlY3V0b3IgdmlhIFF1ZXJ5RGVzYworCiAJQ3JlYXRlUXVlcnlEZXNj CiAKIAlFeGVjdXRvclN0YXJ0CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVj TWFpbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01haW4uYwppbmRleCBiNjc1MWRhNTc0 Li43YTRkYjgwMTA0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5j CisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMKQEAgLTQ5LDYgKzQ5LDcgQEAK ICNpbmNsdWRlICJjb21tYW5kcy9tYXR2aWV3LmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvdHJpZ2dl ci5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNkZWJ1Zy5oIgorI2luY2x1ZGUgImV4ZWN1dG9y L2V4ZWNQYXJ0aXRpb24uaCIKICNpbmNsdWRlICJleGVjdXRvci9ub2RlU3VicGxhbi5oIgogI2lu Y2x1ZGUgImZvcmVpZ24vZmR3YXBpLmgiCiAjaW5jbHVkZSAiaml0L2ppdC5oIgpAQCAtMTA0LDYg KzEwNSw1NCBAQCBzdGF0aWMgdm9pZCBFdmFsUGxhblF1YWxTdGFydChFUFFTdGF0ZSAqZXBxc3Rh dGUsIFBsYW4gKnBsYW5UcmVlKTsKIAogLyogZW5kIG9mIGxvY2FsIGRlY2xzICovCiAKKy8qIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqCQlFeGVjdXRvckRvSW5pdGlhbFBydW5pbmcKKyAqCisgKgkJRm9yIGVhY2ggcGxh biB0cmVlIG5vZGUgdGhhdCBoYXMgYmVlbiBhc3NpZ25lZCBhIFBhcnRpdGlvblBydW5lSW5mbywK KyAqCQl0aGlzIHBlcmZvcm1zIGluaXRpYWwgcGFydGl0aW9uIHBydW5pbmcgdXNpbmcgdGhlIGlu Zm9ybWF0aW9uIGNvbnRhaW5lZAorICoJCXRoZXJlaW4gdG8gZGV0ZXJtaW5lIHRoZSBzZXQgb2Yg Y2hpbGQgc3VicGxhbnMgdGhhdCBzYXRpc2Z5IHRoZSBpbml0aWFsCisgKgkJcHJ1bmluZyBzdGVw cywgdG8gYmUgcmV0dXJuZWQgYXMgYSBiaXRtYXBzZXQgb2YgdGhlaXIgaW5kZXhlcyBpbiB0aGUK KyAqCQlub2RlJ3MgbGlzdCBvZiBjaGlsZCBzdWJwbGFucyAoZm9yIGV4YW1wbGUsIGFuIEFwcGVu ZCdzIGFwcGVuZHBsYW5zKS4KKyAqCisgKiBSZXR1cm4gdmFsdWUgaXMgYSBQYXJ0aXRpb25QcnVu ZVJlc3VsdCBub2RlIHRoYXQgY29udGFpbnMgYSBsaXN0IG9mIHRob3NlCisgKiBiaXRtYXBzZXRz LCB3aXRoIG9uZSBlbGVtZW50IGZvciBldmVyeSBQYXJ0aXRpb25QcnVuZUluZm8sIGFuZCBhIGJp dG1hcHNldAorICogb2YgdGhlIFJUIGluZGV4ZXMgb2YgYWxsIHRoZSBsZWFmIHBhcnRpdGlvbnMg c2Nhbm5lZCBieSB0aG9zZSBjaG9zZW4KKyAqIHN1YnBsYW5zLiAgTm90ZSB0aGF0IHRoZSBsYXR0 ZXIgaXMgc2hhcmVkIGFjcm9zcyBhbGwgUGFydGl0aW9uUHJ1bmVJbmZvcy4KKyAqCisgKiBUaGUg ZXhlY3V0b3IgbXVzdCBzZWUgdGhlIGV4YWN0bHkgc2FtZSBzZXQgb2Ygc3VicGxhbnMgYXMgdmFs aWQgZm9yCisgKiBleGVjdXRpb24gd2hlbiBkb2luZyBFeGVjSW5pdE5vZGUoKSBvbiB0aGUgcGxh biBub2RlcyB3aG9zZQorICogUGFydGl0aW9uUHJ1bmVJbmZvcyBhcmUgcHJvY2Vzc2VkIGhlcmUu ICBTbywgaXQgbXVzdCBnZXQgdGhlIHNldCBmcm9tIHRoZQorICogYWZvcmVtZW50aW9uZWQgUGFy dGl0aW9uUHJ1bmVSZXN1bHQsIGluc3RlYWQgb2YgY29tcHV0aW5nIGl0IGFsbCBvdmVyCisgKiBh Z2FpbiBieSByZWRvaW5nIHRoZSBpbml0aWFsIHBydW5pbmcuICBJdCdzIHRoZSBjYWxsZXIncyBq b2IgdG8gcGFzcyB0aGUKKyAqIFBhcnRpdGlvblBydW5lUmVzdWx0IHRvIHRoZSBleGVjdXRvci4K KyAqCisgKiBOb3RlOiBQYXJ0aXRpb25lZCB0YWJsZXMgbWVudGlvbmVkIGluIFBhcnRpdGlvbmVk UmVsUHJ1bmVJbmZvIG5vZGVzIHRoYXQKKyAqIGRyaXZlIHRoZSBwcnVuaW5nIHdpbGwgYmUgbG9j a2VkIGJlZm9yZSBkb2luZyB0aGUgcHJ1bmluZy4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworTGlzdCAqCitF eGVjdXRvckRvSW5pdGlhbFBydW5pbmcoUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LCBQYXJhbUxp c3RJbmZvIHBhcmFtcywKKwkJCQkJCSBCaXRtYXBzZXQgKipzY2FuX2xlYWZwYXJ0X3J0aXMpCit7 CisJTGlzdAkgKnBhcnRfcHJ1bmVfcmVzdWx0cyA9IE5JTDsKKwlMaXN0Q2VsbCAqbGM7CisKKwkv KiBPbmx5IGdldCBoZXJlIGlmIHRoZXJlIGlzIGFueSBwcnVuaW5nIHRvIGRvLiAqLworCUFzc2Vy dChwbGFubmVkc3RtdC0+Y29udGFpbnNJbml0aWFsUHJ1bmluZyk7CisKKwlmb3JlYWNoKGxjLCBw bGFubmVkc3RtdC0+cGFydFBydW5lSW5mb3MpCisJeworCQlQYXJ0aXRpb25QcnVuZUluZm8gKnBy dW5laW5mbyA9IGxmaXJzdChsYyk7CisJCVBhcnRpdGlvblBydW5lUmVzdWx0ICpwcnVuZXJlc3Vs dCA9IG1ha2VOb2RlKFBhcnRpdGlvblBydW5lUmVzdWx0KTsKKworCQlwcnVuZXJlc3VsdC0+dmFs aWRfc3VicGxhbl9vZmZzID0KKwkJCUV4ZWNQYXJ0aXRpb25Eb0luaXRpYWxQcnVuaW5nKHBsYW5u ZWRzdG10LCBwYXJhbXMsIHBydW5laW5mbywKKwkJCQkJCQkJCQkgIHNjYW5fbGVhZnBhcnRfcnRp cyk7CisJCXBhcnRfcHJ1bmVfcmVzdWx0cyA9IGxhcHBlbmQocGFydF9wcnVuZV9yZXN1bHRzLCBw cnVuZXJlc3VsdCk7CisJfQorCisJcmV0dXJuIHBhcnRfcHJ1bmVfcmVzdWx0czsKK30KIAogLyog LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQogICoJCUV4ZWN1dG9yU3RhcnQKQEAgLTgwNiw2ICs4NTUsNyBAQCBJbml0UGxhbihR dWVyeURlc2MgKnF1ZXJ5RGVzYywgaW50IGVmbGFncykKIHsKIAlDbWRUeXBlCQlvcGVyYXRpb24g PSBxdWVyeURlc2MtPm9wZXJhdGlvbjsKIAlQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQgPSBxdWVy eURlc2MtPnBsYW5uZWRzdG10OworCUxpc3QJICAgKnBhcnRfcHJ1bmVfcmVzdWx0cyA9IHF1ZXJ5 RGVzYy0+cGFydF9wcnVuZV9yZXN1bHRzOwogCVBsYW4JICAgKnBsYW4gPSBwbGFubmVkc3RtdC0+ cGxhblRyZWU7CiAJTGlzdAkgICAqcmFuZ2VUYWJsZSA9IHBsYW5uZWRzdG10LT5ydGFibGU7CiAJ RVN0YXRlCSAgICplc3RhdGUgPSBxdWVyeURlc2MtPmVzdGF0ZTsKQEAgLTgyNiw2ICs4NzYsNyBA QCBJbml0UGxhbihRdWVyeURlc2MgKnF1ZXJ5RGVzYywgaW50IGVmbGFncykKIAogCWVzdGF0ZS0+ ZXNfcGxhbm5lZHN0bXQgPSBwbGFubmVkc3RtdDsKIAllc3RhdGUtPmVzX3BhcnRfcHJ1bmVfaW5m b3MgPSBwbGFubmVkc3RtdC0+cGFydFBydW5lSW5mb3M7CisJZXN0YXRlLT5lc19wYXJ0X3BydW5l X3Jlc3VsdHMgPSBwYXJ0X3BydW5lX3Jlc3VsdHM7CiAKIAkvKgogCSAqIE5leHQsIGJ1aWxkIHRo ZSBFeGVjUm93TWFyayBhcnJheSBmcm9tIHRoZSBQbGFuUm93TWFyayhzKSwgaWYgYW55LgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcmFsbGVsLmMgYi9zcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjUGFyYWxsZWwuYwppbmRleCBhY2EwYzZmMzIzLi45MTcwNzlhMDM0IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFyYWxsZWwuYworKysgYi9zcmMv YmFja2VuZC9leGVjdXRvci9leGVjUGFyYWxsZWwuYwpAQCAtNjYsNiArNjYsNyBAQAogI2RlZmlu ZSBQQVJBTExFTF9LRVlfUVVFUllfVEVYVAkJVUlOVDY0Q09OU1QoMHhFMDAwMDAwMDAwMDAwMDA4 KQogI2RlZmluZSBQQVJBTExFTF9LRVlfSklUX0lOU1RSVU1FTlRBVElPTiBVSU5UNjRDT05TVCgw eEUwMDAwMDAwMDAwMDAwMDkpCiAjZGVmaW5lIFBBUkFMTEVMX0tFWV9XQUxfVVNBR0UJCQlVSU5U NjRDT05TVCgweEUwMDAwMDAwMDAwMDAwMEEpCisjZGVmaW5lIFBBUkFMTEVMX0tFWV9QQVJUSVRJ T05fUFJVTkVfUkVTVUxUUwlVSU5UNjRDT05TVCgweEUwMDAwMDAwMDAwMDAwMEIpCiAKICNkZWZp bmUgUEFSQUxMRUxfVFVQTEVfUVVFVUVfU0laRQkJNjU1MzYKIApAQCAtMTgyLDYgKzE4Myw3IEBA IEV4ZWNTZXJpYWxpemVQbGFuKFBsYW4gKnBsYW4sIEVTdGF0ZSAqZXN0YXRlKQogCXBzdG10LT50 cmFuc2llbnRQbGFuID0gZmFsc2U7CiAJcHN0bXQtPmRlcGVuZHNPblJvbGUgPSBmYWxzZTsKIAlw c3RtdC0+cGFyYWxsZWxNb2RlTmVlZGVkID0gZmFsc2U7CisJcHN0bXQtPmNvbnRhaW5zSW5pdGlh bFBydW5pbmcgPSBmYWxzZTsKIAlwc3RtdC0+cGxhblRyZWUgPSBwbGFuOwogCXBzdG10LT5wYXJ0 UHJ1bmVJbmZvcyA9IGVzdGF0ZS0+ZXNfcGFydF9wcnVuZV9pbmZvczsKIAlwc3RtdC0+cnRhYmxl ID0gZXN0YXRlLT5lc19yYW5nZV90YWJsZTsKQEAgLTU5NywxMiArNTk5LDE1IEBAIEV4ZWNJbml0 UGFyYWxsZWxQbGFuKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBFU3RhdGUgKmVzdGF0ZSwKIAlGaXhl ZFBhcmFsbGVsRXhlY3V0b3JTdGF0ZSAqZnBlczsKIAljaGFyCSAgICpwc3RtdF9kYXRhOwogCWNo YXIJICAgKnBzdG10X3NwYWNlOworCWNoYXIJICAgKnBhcnRfcHJ1bmVfcmVzdWx0c19kYXRhOwor CWNoYXIJICAgKnBhcnRfcHJ1bmVfcmVzdWx0c19zcGFjZTsKIAljaGFyCSAgICpwYXJhbWxpc3Rp bmZvX3NwYWNlOwogCUJ1ZmZlclVzYWdlICpidWZ1c2FnZV9zcGFjZTsKIAlXYWxVc2FnZSAgICp3 YWx1c2FnZV9zcGFjZTsKIAlTaGFyZWRFeGVjdXRvckluc3RydW1lbnRhdGlvbiAqaW5zdHJ1bWVu dGF0aW9uID0gTlVMTDsKIAlTaGFyZWRKaXRJbnN0cnVtZW50YXRpb24gKmppdF9pbnN0cnVtZW50 YXRpb24gPSBOVUxMOwogCWludAkJCXBzdG10X2xlbjsKKwlpbnQJCQlwYXJ0X3BydW5lX3Jlc3Vs dHNfbGVuOwogCWludAkJCXBhcmFtbGlzdGluZm9fbGVuOwogCWludAkJCWluc3RydW1lbnRhdGlv bl9sZW4gPSAwOwogCWludAkJCWppdF9pbnN0cnVtZW50YXRpb25fbGVuID0gMDsKQEAgLTYzMSw2 ICs2MzYsNyBAQCBFeGVjSW5pdFBhcmFsbGVsUGxhbihQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgRVN0 YXRlICplc3RhdGUsCiAKIAkvKiBGaXggdXAgYW5kIHNlcmlhbGl6ZSBwbGFuIHRvIGJlIHNlbnQg dG8gd29ya2Vycy4gKi8KIAlwc3RtdF9kYXRhID0gRXhlY1NlcmlhbGl6ZVBsYW4ocGxhbnN0YXRl LT5wbGFuLCBlc3RhdGUpOworCXBhcnRfcHJ1bmVfcmVzdWx0c19kYXRhID0gbm9kZVRvU3RyaW5n KGVzdGF0ZS0+ZXNfcGFydF9wcnVuZV9yZXN1bHRzKTsKIAogCS8qIENyZWF0ZSBhIHBhcmFsbGVs IGNvbnRleHQuICovCiAJcGN4dCA9IENyZWF0ZVBhcmFsbGVsQ29udGV4dCgicG9zdGdyZXMiLCAi UGFyYWxsZWxRdWVyeU1haW4iLCBud29ya2Vycyk7CkBAIC02NTcsNiArNjYzLDExIEBAIEV4ZWNJ bml0UGFyYWxsZWxQbGFuKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBFU3RhdGUgKmVzdGF0ZSwKIAlz aG1fdG9jX2VzdGltYXRlX2NodW5rKCZwY3h0LT5lc3RpbWF0b3IsIHBzdG10X2xlbik7CiAJc2ht X3RvY19lc3RpbWF0ZV9rZXlzKCZwY3h0LT5lc3RpbWF0b3IsIDEpOwogCisJLyogRXN0aW1hdGUg c3BhY2UgZm9yIHNlcmlhbGl6ZWQgTGlzdCBvZiBQYXJ0aXRpb25QcnVuZVJlc3VsdC4gKi8KKwlw YXJ0X3BydW5lX3Jlc3VsdHNfbGVuID0gc3RybGVuKHBhcnRfcHJ1bmVfcmVzdWx0c19kYXRhKSAr IDE7CisJc2htX3RvY19lc3RpbWF0ZV9jaHVuaygmcGN4dC0+ZXN0aW1hdG9yLCBwYXJ0X3BydW5l X3Jlc3VsdHNfbGVuKTsKKwlzaG1fdG9jX2VzdGltYXRlX2tleXMoJnBjeHQtPmVzdGltYXRvciwg MSk7CisKIAkvKiBFc3RpbWF0ZSBzcGFjZSBmb3Igc2VyaWFsaXplZCBQYXJhbUxpc3RJbmZvLiAq LwogCXBhcmFtbGlzdGluZm9fbGVuID0gRXN0aW1hdGVQYXJhbUxpc3RTcGFjZShlc3RhdGUtPmVz X3BhcmFtX2xpc3RfaW5mbyk7CiAJc2htX3RvY19lc3RpbWF0ZV9jaHVuaygmcGN4dC0+ZXN0aW1h dG9yLCBwYXJhbWxpc3RpbmZvX2xlbik7CkBAIC03NTEsNiArNzYyLDEyIEBAIEV4ZWNJbml0UGFy YWxsZWxQbGFuKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBFU3RhdGUgKmVzdGF0ZSwKIAltZW1jcHko cHN0bXRfc3BhY2UsIHBzdG10X2RhdGEsIHBzdG10X2xlbik7CiAJc2htX3RvY19pbnNlcnQocGN4 dC0+dG9jLCBQQVJBTExFTF9LRVlfUExBTk5FRFNUTVQsIHBzdG10X3NwYWNlKTsKIAorCS8qIFN0 b3JlIHNlcmlhbGl6ZWQgTGlzdCBvZiBQYXJ0aXRpb25QcnVuZVJlc3VsdCAqLworCXBhcnRfcHJ1 bmVfcmVzdWx0c19zcGFjZSA9IHNobV90b2NfYWxsb2NhdGUocGN4dC0+dG9jLCBwYXJ0X3BydW5l X3Jlc3VsdHNfbGVuKTsKKwltZW1jcHkocGFydF9wcnVuZV9yZXN1bHRzX3NwYWNlLCBwYXJ0X3By dW5lX3Jlc3VsdHNfZGF0YSwgcGFydF9wcnVuZV9yZXN1bHRzX2xlbik7CisJc2htX3RvY19pbnNl cnQocGN4dC0+dG9jLCBQQVJBTExFTF9LRVlfUEFSVElUSU9OX1BSVU5FX1JFU1VMVFMsCisJCQkJ ICAgcGFydF9wcnVuZV9yZXN1bHRzX3NwYWNlKTsKKwogCS8qIFN0b3JlIHNlcmlhbGl6ZWQgUGFy YW1MaXN0SW5mby4gKi8KIAlwYXJhbWxpc3RpbmZvX3NwYWNlID0gc2htX3RvY19hbGxvY2F0ZShw Y3h0LT50b2MsIHBhcmFtbGlzdGluZm9fbGVuKTsKIAlzaG1fdG9jX2luc2VydChwY3h0LT50b2Ms IFBBUkFMTEVMX0tFWV9QQVJBTUxJU1RJTkZPLCBwYXJhbWxpc3RpbmZvX3NwYWNlKTsKQEAgLTEy MzIsOCArMTI0OSwxMCBAQCBFeGVjUGFyYWxsZWxHZXRRdWVyeURlc2Moc2htX3RvYyAqdG9jLCBE ZXN0UmVjZWl2ZXIgKnJlY2VpdmVyLAogCQkJCQkJIGludCBpbnN0cnVtZW50X29wdGlvbnMpCiB7 CiAJY2hhcgkgICAqcHN0bXRzcGFjZTsKKwljaGFyCSAgICpwYXJ0X3BydW5lX3Jlc3VsdHNfc3Bh Y2U7CiAJY2hhcgkgICAqcGFyYW1zcGFjZTsKIAlQbGFubmVkU3RtdCAqcHN0bXQ7CisJTGlzdAkg ICAqcGFydF9wcnVuZV9yZXN1bHRzOwogCVBhcmFtTGlzdEluZm8gcGFyYW1MSTsKIAljaGFyCSAg ICpxdWVyeVN0cmluZzsKIApAQCAtMTI0NCwxMiArMTI2MywxNyBAQCBFeGVjUGFyYWxsZWxHZXRR dWVyeURlc2Moc2htX3RvYyAqdG9jLCBEZXN0UmVjZWl2ZXIgKnJlY2VpdmVyLAogCXBzdG10c3Bh Y2UgPSBzaG1fdG9jX2xvb2t1cCh0b2MsIFBBUkFMTEVMX0tFWV9QTEFOTkVEU1RNVCwgZmFsc2Up OwogCXBzdG10ID0gKFBsYW5uZWRTdG10ICopIHN0cmluZ1RvTm9kZShwc3RtdHNwYWNlKTsKIAor CS8qIFJlY29uc3RydWN0IGxlYWRlci1zdXBwbGllZCBQYXJ0aXRpb25QcnVuZVJlc3VsdC4gKi8K KwlwYXJ0X3BydW5lX3Jlc3VsdHNfc3BhY2UgPQorCQlzaG1fdG9jX2xvb2t1cCh0b2MsIFBBUkFM TEVMX0tFWV9QQVJUSVRJT05fUFJVTkVfUkVTVUxUUywgZmFsc2UpOworCXBhcnRfcHJ1bmVfcmVz dWx0cyA9IChMaXN0ICopIHN0cmluZ1RvTm9kZShwYXJ0X3BydW5lX3Jlc3VsdHNfc3BhY2UpOwor CiAJLyogUmVjb25zdHJ1Y3QgUGFyYW1MaXN0SW5mby4gKi8KIAlwYXJhbXNwYWNlID0gc2htX3Rv Y19sb29rdXAodG9jLCBQQVJBTExFTF9LRVlfUEFSQU1MSVNUSU5GTywgZmFsc2UpOwogCXBhcmFt TEkgPSBSZXN0b3JlUGFyYW1MaXN0KCZwYXJhbXNwYWNlKTsKIAogCS8qIENyZWF0ZSBhIFF1ZXJ5 RGVzYyBmb3IgdGhlIHF1ZXJ5LiAqLwotCXJldHVybiBDcmVhdGVRdWVyeURlc2MocHN0bXQsCisJ cmV0dXJuIENyZWF0ZVF1ZXJ5RGVzYyhwc3RtdCwgcGFydF9wcnVuZV9yZXN1bHRzLAogCQkJCQkJ ICAgcXVlcnlTdHJpbmcsCiAJCQkJCQkgICBHZXRBY3RpdmVTbmFwc2hvdCgpLCBJbnZhbGlkU25h cHNob3QsCiAJCQkJCQkgICByZWNlaXZlciwgcGFyYW1MSSwgTlVMTCwgaW5zdHJ1bWVudF9vcHRp b25zKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uYyBi L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uYwppbmRleCA4ZTY0NTNhZWMyLi4x M2U0NTBjMGZhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9u LmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jCkBAIC0yNSw2ICsy NSw3IEBACiAjaW5jbHVkZSAibWIvcGdfd2NoYXIuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIK ICNpbmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2V0cmVl LmgiCiAjaW5jbHVkZSAicGFydGl0aW9uaW5nL3BhcnRib3VuZHMuaCIKICNpbmNsdWRlICJwYXJ0 aXRpb25pbmcvcGFydGRlc2MuaCIKICNpbmNsdWRlICJwYXJ0aXRpb25pbmcvcGFydHBydW5lLmgi CkBAIC0xODUsNyArMTg2LDExIEBAIHN0YXRpYyBjaGFyICpFeGVjQnVpbGRTbG90UGFydGl0aW9u S2V5RGVzY3JpcHRpb24oUmVsYXRpb24gcmVsLAogc3RhdGljIExpc3QgKmFkanVzdF9wYXJ0aXRp b25fY29sbm9zKExpc3QgKmNvbG5vcywgUmVzdWx0UmVsSW5mbyAqbGVhZl9wYXJ0X3JyaSk7CiBz dGF0aWMgTGlzdCAqYWRqdXN0X3BhcnRpdGlvbl9jb2xub3NfdXNpbmdfbWFwKExpc3QgKmNvbG5v cywgQXR0ck1hcCAqYXR0ck1hcCk7CiBzdGF0aWMgUGFydGl0aW9uUHJ1bmVTdGF0ZSAqQ3JlYXRl UGFydGl0aW9uUHJ1bmVTdGF0ZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwKLQkJCQkJCQkJCQkJCQkg IFBhcnRpdGlvblBydW5lSW5mbyAqcHJ1bmVpbmZvKTsKKwkJCQkJCQkJCQkJCQkgIFBhcnRpdGlv blBydW5lSW5mbyAqcHJ1bmVpbmZvLAorCQkJCQkJCQkJCQkJCSAgYm9vbCBjb25zaWRlcl9pbml0 aWFsX3N0ZXBzLAorCQkJCQkJCQkJCQkJCSAgYm9vbCBjb25zaWRlcl9leGVjX3N0ZXBzLAorCQkJ CQkJCQkJCQkJCSAgTGlzdCAqcnRhYmxlLCBFeHByQ29udGV4dCAqZWNvbnRleHQsCisJCQkJCQkJ CQkJCQkJICBQYXJ0aXRpb25EaXJlY3RvcnkgcGFydGRpcik7CiBzdGF0aWMgdm9pZCBJbml0UGFy dGl0aW9uUHJ1bmVDb250ZXh0KFBhcnRpdGlvblBydW5lQ29udGV4dCAqY29udGV4dCwKIAkJCQkJ CQkJCSAgTGlzdCAqcHJ1bmluZ19zdGVwcywKIAkJCQkJCQkJCSAgUGFydGl0aW9uRGVzYyBwYXJ0 ZGVzYywKQEAgLTE5OCw3ICsyMDMsOCBAQCBzdGF0aWMgdm9pZCBQYXJ0aXRpb25QcnVuZUZpeFN1 YlBsYW5NYXAoUGFydGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0ZSwKIHN0YXRpYyB2b2lkIGZp bmRfbWF0Y2hpbmdfc3VicGxhbnNfcmVjdXJzZShQYXJ0aXRpb25QcnVuaW5nRGF0YSAqcHJ1bmVk YXRhLAogCQkJCQkJCQkJCSAgIFBhcnRpdGlvbmVkUmVsUHJ1bmluZ0RhdGEgKnBwcnVuZSwKIAkJ CQkJCQkJCQkgICBib29sIGluaXRpYWxfcHJ1bmUsCi0JCQkJCQkJCQkJICAgQml0bWFwc2V0ICoq dmFsaWRzdWJwbGFucyk7CisJCQkJCQkJCQkJICAgQml0bWFwc2V0ICoqdmFsaWRzdWJwbGFucywK KwkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKipzY2FuX2xlYWZwYXJ0X3J0aXMpOwogCiAKIC8qCkBA IC0xNzU4LDggKzE3NjQsMTAgQEAgYWRqdXN0X3BhcnRpdGlvbl9jb2xub3NfdXNpbmdfbWFwKExp c3QgKmNvbG5vcywgQXR0ck1hcCAqYXR0ck1hcCkKICAqIGNvbnNpZGVyZWQgdG8gYmUgYSBzdGFi bGUgZXhwcmVzc2lvbiwgaXQgY2FuIGNoYW5nZSB2YWx1ZSBmcm9tIG9uZSBwbGFuCiAgKiBub2Rl IHNjYW4gdG8gdGhlIG5leHQgZHVyaW5nIHF1ZXJ5IGV4ZWN1dGlvbi4gIFN0YWJsZSBjb21wYXJp c29uCiAgKiBleHByZXNzaW9ucyB0aGF0IGRvbid0IGludm9sdmUgc3VjaCBQYXJhbXMgYWxsb3cg cGFydGl0aW9uIHBydW5pbmcgdG8gYmUKLSAqIGRvbmUgb25jZSBkdXJpbmcgZXhlY3V0b3Igc3Rh cnR1cC4gIEV4cHJlc3Npb25zIHRoYXQgZG8gaW52b2x2ZSBzdWNoIFBhcmFtcwotICogcmVxdWly ZSB1cyB0byBwcnVuZSBzZXBhcmF0ZWx5IGZvciBlYWNoIHNjYW4gb2YgdGhlIHBhcmVudCBwbGFu IG5vZGUuCisgKiBkb25lIG9uY2UgZHVyaW5nIGV4ZWN1dG9yIHN0YXJ0dXAgb3IgZHVyaW5nIEV4 ZWN1dG9yRG9Jbml0aWFsUHJ1bmluZygpIHRoYXQKKyAqIHJ1bnMgYXMgcGFydCBvZiBwZXJmb3Jt aW5nIEFjcXVpcmVFeGVjdXRvckxvY2tzKCkgb24gYSBnaXZlbiBwbGFuIHRyZWUuCisgKiBFeHBy ZXNzaW9ucyB0aGF0IGRvIGludm9sdmUgc3VjaCBQYXJhbXMgcmVxdWlyZSB1cyB0byBwcnVuZSBz ZXBhcmF0ZWx5IGZvcgorICogZWFjaCBzY2FuIG9mIHRoZSBwYXJlbnQgcGxhbiBub2RlLgogICoK ICAqIE5vdGUgdGhhdCBwcnVuaW5nIGF3YXkgdW5uZWVkZWQgc3VicGxhbnMgZHVyaW5nIGV4ZWN1 dG9yIHN0YXJ0dXAgaGFzIHRoZQogICogYWRkZWQgYmVuZWZpdCBvZiBub3QgaGF2aW5nIHRvIGlu aXRpYWxpemUgdGhlIHVubmVlZGVkIHN1YnBsYW5zIGF0IGFsbC4KQEAgLTE3NzYsNiArMTc4NCwx MyBAQCBhZGp1c3RfcGFydGl0aW9uX2NvbG5vc191c2luZ19tYXAoTGlzdCAqY29sbm9zLCBBdHRy TWFwICphdHRyTWFwKQogICoJCWFjY291bnQgZm9yIGluaXRpYWwgcHJ1bmluZyBwb3NzaWJseSBo YXZpbmcgZWxpbWluYXRlZCBzb21lIG9mIHRoZQogICoJCXN1YnBsYW5zLgogICoKKyAqIEV4ZWNQ YXJ0aXRpb25Eb0luaXRpYWxQcnVuaW5nOgorICoJCURvIGluaXRpYWwgcHJ1bmluZyB3aXRoIHRo ZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4gYSBnaXZlbgorICoJCVBhcnRpdGlvblBydW5lSW5m byB0byBkZXRlcm1pbmUgdGhlIG1pbmltYWwgc2V0IG9mIGNoaWxkIHN1YnBsYW5zCisgKgkJdG8g YmUgZXhlY3V0ZWQgb2YgdGhlIHBhcmVudCBwbGFuIG5vZGUgdG8gd2hpY2ggdGhlIFBhcnRpdGlv blBydW5lSW5mbworICoJCWJlbG9uZ3MgYW5kIGFsc28gdGhlIHNldCBvZiB0aGUgUlQgaW5kZXhl cyBvZiBsZWFmIHBhcnRpdGlvbnMgdGhhdCB3aWxsCisgKgkJYmUgc2Nhbm5lZCB3aXRoIHRob3Nl IHN1YnBsYW5zLgorICoKICAqIEV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFuczoKICAqCQlSZXR1cm5z IGluZGV4ZXMgb2YgbWF0Y2hpbmcgc3VicGxhbnMgYWZ0ZXIgZXZhbHVhdGluZyB0aGUgZXhwcmVz c2lvbnMKICAqCQl0aGF0IGFyZSBzYWZlIHRvIGV2YWx1YXRlIGF0IGEgZ2l2ZW4gcG9pbnQuICBU aGlzIGZ1bmN0aW9uIGlzIGZpcnN0CkBAIC0xNzk2LDggKzE4MTEsOSBAQCBhZGp1c3RfcGFydGl0 aW9uX2NvbG5vc191c2luZ19tYXAoTGlzdCAqY29sbm9zLCBBdHRyTWFwICphdHRyTWFwKQogICoK ICAqIE9uIHJldHVybiwgKmluaXRpYWxseV92YWxpZF9zdWJwbGFucyBpcyBhc3NpZ25lZCB0aGUg c2V0IG9mIGluZGV4ZXMgb2YKICAqIGNoaWxkIHN1YnBsYW5zIHRoYXQgbXVzdCBiZSBpbml0aWFs aXplZCBhbG9uZyB3aXRoIHRoZSBwYXJlbnQgcGxhbiBub2RlLgotICogSW5pdGlhbCBwcnVuaW5n IGlzIHBlcmZvcm1lZCBoZXJlIGlmIG5lZWRlZCBhbmQgaW4gdGhhdCBjYXNlIG9ubHkgdGhlCi0g KiBzdXJ2aXZpbmcgc3VicGxhbnMnIGluZGV4ZXMgYXJlIGFkZGVkLgorICogSW5pdGlhbCBwcnVu aW5nIGlzIHBlcmZvcm1lZCBoZXJlIGlmIG5lZWRlZCAodW5sZXNzIGl0IGhhcyBhbHJlYWR5IGJl ZW4gZG9uZQorICogYnkgRXhlY3V0b3JEb0luaXRpYWxQcnVuaW5nKCkpLCBhbmQgaW4gdGhhdCBj YXNlIG9ubHkgdGhlIHN1cnZpdmluZworICogc3VicGxhbnMnIGluZGV4ZXMgYXJlIGFkZGVkLgog ICoKICAqIElmIHN1YnBsYW5zIGFyZSBpbmRlZWQgcHJ1bmVkLCBzdWJwbGFuX21hcCBhcnJheXMg Y29udGFpbmVkIGluIHRoZSByZXR1cm5lZAogICogUGFydGl0aW9uUHJ1bmVTdGF0ZSBhcmUgcmUt c2VxdWVuY2VkIHRvIG5vdCBjb3VudCB0aG9zZSwgdGhvdWdoIG9ubHkgaWYgdGhlCkBAIC0xODEw LDkgKzE4MjYsMTAgQEAgRXhlY0luaXRQYXJ0aXRpb25QcnVuaW5nKFBsYW5TdGF0ZSAqcGxhbnN0 YXRlLAogCQkJCQkJIEJpdG1hcHNldCAqcm9vdF9wYXJlbnRfcmVsaWRzLAogCQkJCQkJIEJpdG1h cHNldCAqKmluaXRpYWxseV92YWxpZF9zdWJwbGFucykKIHsKLQlQYXJ0aXRpb25QcnVuZVN0YXRl ICpwcnVuZXN0YXRlOworCVBhcnRpdGlvblBydW5lU3RhdGUgKnBydW5lc3RhdGUgPSBOVUxMOwog CUVTdGF0ZQkgICAqZXN0YXRlID0gcGxhbnN0YXRlLT5zdGF0ZTsKIAlQYXJ0aXRpb25QcnVuZUlu Zm8gKnBydW5laW5mbzsKKwlQYXJ0aXRpb25QcnVuZVJlc3VsdCAqcHJ1bmVyZXN1bHQgPSBOVUxM OwogCiAJLyogT2J0YWluIHRoZSBwcnVuZWluZm8gd2UgbmVlZCwgYW5kIG1ha2Ugc3VyZSBpdCdz IHRoZSByaWdodCBvbmUgKi8KIAlwcnVuZWluZm8gPSBsaXN0X250aChlc3RhdGUtPmVzX3BhcnRf cHJ1bmVfaW5mb3MsIHBhcnRfcHJ1bmVfaW5kZXgpOwpAQCAtMTgyOCwyMCArMTg0NSw1NyBAQCBF eGVjSW5pdFBhcnRpdGlvblBydW5pbmcoUGxhblN0YXRlICpwbGFuc3RhdGUsCiAJLyogV2UgbWF5 IG5lZWQgYW4gZXhwcmVzc2lvbiBjb250ZXh0IHRvIGV2YWx1YXRlIHBhcnRpdGlvbiBleHBycyAq LwogCUV4ZWNBc3NpZ25FeHByQ29udGV4dChlc3RhdGUsIHBsYW5zdGF0ZSk7CiAKLQkvKiBDcmVh dGUgdGhlIHdvcmtpbmcgZGF0YSBzdHJ1Y3R1cmUgZm9yIHBydW5pbmcgKi8KLQlwcnVuZXN0YXRl ID0gQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZShwbGFuc3RhdGUsIHBydW5laW5mbyk7CisJLyoK KwkgKiBObyBuZWVkIHRvIGRvIGluaXRpYWwgcHJ1bmluZyBpZiBpdCB3YXMgZG9uZSBhbHJlYWR5 IGJ5CisJICogRXhlY3V0b3JEb0luaXRpYWxQcnVuaW5nKCksIHdoaWNoIGl0IHdvdWxkIGJlIGlm IGVzX3BhcnRfcHJ1bmVfcmVzdWx0cworCSAqIGlzIHNldC4KKwkgKi8KKwlpZiAoZXN0YXRlLT5l c19wYXJ0X3BydW5lX3Jlc3VsdHMpCisJeworCQlwcnVuZXJlc3VsdCA9IGxpc3RfbnRoKGVzdGF0 ZS0+ZXNfcGFydF9wcnVuZV9yZXN1bHRzLCBwYXJ0X3BydW5lX2luZGV4KTsKKwkJQXNzZXJ0KElz QShwcnVuZXJlc3VsdCwgUGFydGl0aW9uUHJ1bmVSZXN1bHQpKTsKKwl9CisKKwlpZiAocHJ1bmVy ZXN1bHQgPT0gTlVMTCB8fCBwcnVuZWluZm8tPm5lZWRzX2V4ZWNfcHJ1bmluZykKKwl7CisJCS8q IFdlIG1heSBuZWVkIGFuIGV4cHJlc3Npb24gY29udGV4dCB0byBldmFsdWF0ZSBwYXJ0aXRpb24g ZXhwcnMgKi8KKwkJRXhlY0Fzc2lnbkV4cHJDb250ZXh0KGVzdGF0ZSwgcGxhbnN0YXRlKTsKKwor CQkvKiBGb3IgZGF0YSByZWFkaW5nLCBleGVjdXRvciBhbHdheXMgb21pdHMgZGV0YWNoZWQgcGFy dGl0aW9ucyAqLworCQlpZiAoZXN0YXRlLT5lc19wYXJ0aXRpb25fZGlyZWN0b3J5ID09IE5VTEwp CisJCQllc3RhdGUtPmVzX3BhcnRpdGlvbl9kaXJlY3RvcnkgPQorCQkJCUNyZWF0ZVBhcnRpdGlv bkRpcmVjdG9yeShlc3RhdGUtPmVzX3F1ZXJ5X2N4dCwgZmFsc2UpOworCisJCS8qCisJCSAqIENy ZWF0ZSB0aGUgd29ya2luZyBkYXRhIHN0cnVjdHVyZSBmb3IgcHJ1bmluZy4gIE5vIG5lZWQgdG8g Y29uc2lkZXIKKwkJICogaW5pdGlhbCBwcnVuaW5nIHN0ZXBzIGlmIHdlIGhhdmUgYSBQYXJ0aXRp b25QcnVuZVJlc3VsdC4KKwkJICovCisJCXBydW5lc3RhdGUgPSBDcmVhdGVQYXJ0aXRpb25QcnVu ZVN0YXRlKHBsYW5zdGF0ZSwgcHJ1bmVpbmZvLAorCQkJCQkJCQkJCQkgICBwcnVuZXJlc3VsdCA9 PSBOVUxMLAorCQkJCQkJCQkJCQkgICBwcnVuZWluZm8tPm5lZWRzX2V4ZWNfcHJ1bmluZywKKwkJ CQkJCQkJCQkJICAgTklMLCBwbGFuc3RhdGUtPnBzX0V4cHJDb250ZXh0LAorCQkJCQkJCQkJCQkg ICBlc3RhdGUtPmVzX3BhcnRpdGlvbl9kaXJlY3RvcnkpOworCX0KIAogCS8qCiAJICogUGVyZm9y bSBhbiBpbml0aWFsIHBhcnRpdGlvbiBwcnVuZSBwYXNzLCBpZiByZXF1aXJlZC4KIAkgKi8KLQlp ZiAocHJ1bmVzdGF0ZS0+ZG9faW5pdGlhbF9wcnVuZSkKLQkJKmluaXRpYWxseV92YWxpZF9zdWJw bGFucyA9IEV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhwcnVuZXN0YXRlLCB0cnVlKTsKKwlpZiAo cHJ1bmVyZXN1bHQpCisJeworCQkqaW5pdGlhbGx5X3ZhbGlkX3N1YnBsYW5zID0gYm1zX2NvcHko cHJ1bmVyZXN1bHQtPnZhbGlkX3N1YnBsYW5fb2Zmcyk7CisJfQorCWVsc2UgaWYgKHBydW5lc3Rh dGUgJiYgcHJ1bmVzdGF0ZS0+ZG9faW5pdGlhbF9wcnVuZSkKKwl7CisJCSppbml0aWFsbHlfdmFs aWRfc3VicGxhbnMgPSBFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMocHJ1bmVzdGF0ZSwgdHJ1ZSwK KwkJCQkJCQkJCQkJCQkJCSBOVUxMKTsKKwl9CiAJZWxzZQogCXsKLQkJLyogTm8gcHJ1bmluZywg c28gd2UnbGwgbmVlZCB0byBpbml0aWFsaXplIGFsbCBzdWJwbGFucyAqLworCQkvKiBObyBpbml0 aWFsIHBydW5pbmcsIHNvIHdlJ2xsIG5lZWQgdG8gaW5pdGlhbGl6ZSBhbGwgc3VicGxhbnMgKi8K IAkJQXNzZXJ0KG5fdG90YWxfc3VicGxhbnMgPiAwKTsKIAkJKmluaXRpYWxseV92YWxpZF9zdWJw bGFucyA9IGJtc19hZGRfcmFuZ2UoTlVMTCwgMCwKIAkJCQkJCQkJCQkJCSAgbl90b3RhbF9zdWJw bGFucyAtIDEpOworCQlyZXR1cm4gcHJ1bmVzdGF0ZTsKIAl9CiAKIAkvKgpAQCAtMTg0OSw3ICsx OTAzLDggQEAgRXhlY0luaXRQYXJ0aXRpb25QcnVuaW5nKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLAog CSAqIHRoYXQgd2VyZSByZW1vdmVkIGFib3ZlIGR1ZSB0byBpbml0aWFsIHBydW5pbmcuICBObyBu ZWVkIHRvIGRvIHRoaXMgaWYKIAkgKiBubyBzdGVwcyB3ZXJlIHJlbW92ZWQuCiAJICovCi0JaWYg KGJtc19udW1fbWVtYmVycygqaW5pdGlhbGx5X3ZhbGlkX3N1YnBsYW5zKSA8IG5fdG90YWxfc3Vi cGxhbnMpCisJaWYgKHBydW5lc3RhdGUgJiYKKwkJYm1zX251bV9tZW1iZXJzKCppbml0aWFsbHlf dmFsaWRfc3VicGxhbnMpIDwgbl90b3RhbF9zdWJwbGFucykKIAl7CiAJCS8qCiAJCSAqIFdlIGNh biBzYWZlbHkgc2tpcCB0aGlzIHdoZW4gIWRvX2V4ZWNfcHJ1bmUsIGV2ZW4gdGhvdWdoIHRoYXQK QEAgLTE4NjUsMTEgKzE5MjAsNzQgQEAgRXhlY0luaXRQYXJ0aXRpb25QcnVuaW5nKFBsYW5TdGF0 ZSAqcGxhbnN0YXRlLAogCXJldHVybiBwcnVuZXN0YXRlOwogfQogCisvKgorICogRXhlY1BhcnRp dGlvbkRvSW5pdGlhbFBydW5pbmcKKyAqCQlQZXJmb3JtIGluaXRpYWwgcHJ1bmluZyB1c2luZyBn aXZlbiBQYXJ0aXRpb25QcnVuZUluZm8gdG8gZGV0ZXJtaW5lCisgKgkJdGhlIG1pbmltYWwgc2V0 IG9mIGNoaWxkIHN1YnBsYW5zIHRoYXQgd2lsbCBiZSBleGVjdXRlZCBhbmQgYWxzbyB0aGUKKyAq CQlzZXQgb2YgUlQgaW5kZXhlcyBvZiB0aGUgbGVhZiBwYXJ0aXRpb25zIHNjYW5uZWQgYnkgdGhv c2Ugc3VicGxhbnMuCisgKi8KK0JpdG1hcHNldCAqCitFeGVjUGFydGl0aW9uRG9Jbml0aWFsUHJ1 bmluZyhQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsIFBhcmFtTGlzdEluZm8gcGFyYW1zLAorCQkJ CQkJCSAgUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWluZm8sCisJCQkJCQkJICBCaXRtYXBzZXQg KipzY2FuX2xlYWZwYXJ0X3J0aXMpCit7CisJTGlzdAkJICpydGFibGUgPSBwbGFubmVkc3RtdC0+ cnRhYmxlOworCUV4cHJDb250ZXh0CSAqZWNvbnRleHQ7CisJUGFydGl0aW9uRGlyZWN0b3J5IHBk aXI7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0LAorCQkJCSAgdG1wY29udGV4dDsKKwlQYXJ0 aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlOworCUJpdG1hcHNldAkgKnZhbGlkX3N1YnBsYW5f b2ZmczsKKworCS8qCisJICogQSB0ZW1wb3JhcnkgY29udGV4dCBmb3IgbWVtb3J5IGFsbG9jYXRp b25zIHJlcXVpcmVkIHdoaWxlIGV4ZWN1dGluZworCSAqIHBhcnRpdGlvbiBwcnVuaW5nIHN0ZXBz LgorCSAqLworCXRtcGNvbnRleHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoQ3VycmVudE1lbW9y eUNvbnRleHQsCisJCQkJCQkJCQkgICAiaW5pdGlhbCBwcnVuaW5nIHdvcmtpbmcgZGF0YSIsCisJ CQkJCQkJCQkgICBBTExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsKKwlvbGRjb250ZXh0ID0gTWVtb3J5 Q29udGV4dFN3aXRjaFRvKHRtcGNvbnRleHQpOworCisJLyoKKwkgKiBQYXJ0aXRpb25EaXJlY3Rv cnkgdG8gbG9vayB1cCBwYXJ0aXRpb24gZGVzY3JpcHRvcnMuCisJICogTm90ZSB0aGF0IHdlIGRv bid0IG9taXQgZGV0YWNoZWQgcGFydGl0aW9ucywganVzdCBsaWtlIGR1cmluZworCSAqIGV4ZWN1 dGlvbiBwcm9wZXIuCisJICovCisJcGRpciA9IENyZWF0ZVBhcnRpdGlvbkRpcmVjdG9yeShDdXJy ZW50TWVtb3J5Q29udGV4dCwgZmFsc2UpOworCisJLyoKKwkgKiBXZSBkb24ndCB5ZXQgaGF2ZSBh IFBsYW5TdGF0ZSBmb3IgdGhlIHBhcmVudCBwbGFuIG5vZGUsIHNvIHdlIG11c3QKKwkgKiBjcmVh dGUgYSBzdGFuZGFsb25lIEV4cHJDb250ZXh0IHRvIGV2YWx1YXRlIHBydW5pbmcgZXhwcmVzc2lv bnMsCisJICogZXF1aXBwZWQgd2l0aCB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIEVYVEVSTiBw YXJhbWV0ZXJzIHRoYXQgdGhlCisJICogY2FsbGVyIHBhc3NlZCB1cy4gIE5vdGUgdGhhdCB0aGF0 J3Mgb2theSBiZWNhdXNlIHRoZSBpbml0aWFsIHBydW5pbmcKKwkgKiBzdGVwcyBkbyBub3QgY29u dGFpbiBhbnl0aGluZyB0aGF0IHJlcXVpcmVzIHRoZSBleGVjdXRpb24gdG8gaGF2ZQorCSAqIHN0 YXJ0ZWQgYW5kIHRodXMgbmVlZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkIGluIGEgUGxhblN0 YXRlLgorCSAqLworCWVjb250ZXh0ID0gQ3JlYXRlU3RhbmRhbG9uZUV4cHJDb250ZXh0KCk7CisJ ZWNvbnRleHQtPmVjeHRfcGFyYW1fbGlzdF9pbmZvID0gcGFyYW1zOworCXBydW5lc3RhdGUgPSBD cmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlKE5VTEwsIHBydW5laW5mbywgdHJ1ZSwgZmFsc2UsCisJ CQkJCQkJCQkJICAgcnRhYmxlLCBlY29udGV4dCwgcGRpcik7CisJTWVtb3J5Q29udGV4dFN3aXRj aFRvKG9sZGNvbnRleHQpOworCisJLyogRG8gdGhlIGluaXRpYWwgcHJ1bmluZy4gKi8KKwl2YWxp ZF9zdWJwbGFuX29mZnMgPSBFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMocHJ1bmVzdGF0ZSwgdHJ1 ZSwKKwkJCQkJCQkJCQkJCSAgc2Nhbl9sZWFmcGFydF9ydGlzKTsKKworCUZyZWVFeHByQ29udGV4 dChlY29udGV4dCwgdHJ1ZSk7CisJRGVzdHJveVBhcnRpdGlvbkRpcmVjdG9yeShwZGlyKTsKKwlN ZW1vcnlDb250ZXh0RGVsZXRlKHRtcGNvbnRleHQpOworCisJcmV0dXJuIHZhbGlkX3N1YnBsYW5f b2ZmczsKK30KKwogLyoKICAqIENyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUKICAqCQlCdWlsZCB0 aGUgZGF0YSBzdHJ1Y3R1cmUgcmVxdWlyZWQgZm9yIGNhbGxpbmcgRXhlY0ZpbmRNYXRjaGluZ1N1 YlBsYW5zCiAgKgotICogJ3BsYW5zdGF0ZScgaXMgdGhlIHBhcmVudCBwbGFuIG5vZGUncyBleGVj dXRpb24gc3RhdGUuCisgKiAncGxhbnN0YXRlJywgaWYgbm90IE5VTEwsIGlzIHRoZSBwYXJlbnQg cGxhbiBub2RlJ3MgZXhlY3V0aW9uIHN0YXRlLiAgSXQKKyAqIGNhbiBiZSBOVUxMIGlmIGJlaW5n IGNhbGxlZCBiZWZvcmUgRXhlY3V0b3JTdGFydCgpLCBpbiB3aGljaCBjYXNlLAorICogJ3J0YWJs ZScgKHJhbmdlIHRhYmxlKSwgJ2Vjb250ZXh0JywgYW5kICdwYXJ0ZGlyJyBtdXN0IGJlIGV4cGxp Y2l0bHkKKyAqIHByb3ZpZGVkLgogICoKICAqICdwcnVuZWluZm8nIGlzIGEgUGFydGl0aW9uUHJ1 bmVJbmZvIGFzIGdlbmVyYXRlZCBieQogICogbWFrZV9wYXJ0aXRpb25fcHJ1bmVpbmZvLiAgSGVy ZSB3ZSBidWlsZCBhIFBhcnRpdGlvblBydW5lU3RhdGUgY29udGFpbmluZyBhCkBAIC0xODgzLDE5 ICsyMDAxLDIxIEBAIEV4ZWNJbml0UGFydGl0aW9uUHJ1bmluZyhQbGFuU3RhdGUgKnBsYW5zdGF0 ZSwKICAqIFBhcnRpdGlvbmVkUmVsUHJ1bmVJbmZvLgogICovCiBzdGF0aWMgUGFydGl0aW9uUHJ1 bmVTdGF0ZSAqCi1DcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlKFBsYW5TdGF0ZSAqcGxhbnN0YXRl LCBQYXJ0aXRpb25QcnVuZUluZm8gKnBydW5laW5mbykKK0NyZWF0ZVBhcnRpdGlvblBydW5lU3Rh dGUoUGxhblN0YXRlICpwbGFuc3RhdGUsCisJCQkJCQkgIFBhcnRpdGlvblBydW5lSW5mbyAqcHJ1 bmVpbmZvLAorCQkJCQkJICBib29sIGNvbnNpZGVyX2luaXRpYWxfc3RlcHMsCisJCQkJCQkgIGJv b2wgY29uc2lkZXJfZXhlY19zdGVwcywKKwkJCQkJCSAgTGlzdCAqcnRhYmxlLCBFeHByQ29udGV4 dCAqZWNvbnRleHQsCisJCQkJCQkgIFBhcnRpdGlvbkRpcmVjdG9yeSBwYXJ0ZGlyKQogewotCUVT dGF0ZQkgICAqZXN0YXRlID0gcGxhbnN0YXRlLT5zdGF0ZTsKKwlFU3RhdGUJICAgKmVzdGF0ZSA9 IHBsYW5zdGF0ZSA/IHBsYW5zdGF0ZS0+c3RhdGUgOiBOVUxMOwogCVBhcnRpdGlvblBydW5lU3Rh dGUgKnBydW5lc3RhdGU7CiAJaW50CQkJbl9wYXJ0X2hpZXJhcmNoaWVzOwogCUxpc3RDZWxsICAg KmxjOwogCWludAkJCWk7Ci0JRXhwckNvbnRleHQgKmVjb250ZXh0ID0gcGxhbnN0YXRlLT5wc19F eHByQ29udGV4dDsKIAotCS8qIEZvciBkYXRhIHJlYWRpbmcsIGV4ZWN1dG9yIGFsd2F5cyBvbWl0 cyBkZXRhY2hlZCBwYXJ0aXRpb25zICovCi0JaWYgKGVzdGF0ZS0+ZXNfcGFydGl0aW9uX2RpcmVj dG9yeSA9PSBOVUxMKQotCQllc3RhdGUtPmVzX3BhcnRpdGlvbl9kaXJlY3RvcnkgPQotCQkJQ3Jl YXRlUGFydGl0aW9uRGlyZWN0b3J5KGVzdGF0ZS0+ZXNfcXVlcnlfY3h0LCBmYWxzZSk7CisJQXNz ZXJ0KChlc3RhdGUgIT0gTlVMTCkgfHwKKwkJCShwYXJ0ZGlyICE9IE5VTEwgJiYgZWNvbnRleHQg IT0gTlVMTCAmJiBydGFibGUgIT0gTklMKSk7CiAKIAluX3BhcnRfaGllcmFyY2hpZXMgPSBsaXN0 X2xlbmd0aChwcnVuZWluZm8tPnBydW5lX2luZm9zKTsKIAlBc3NlcnQobl9wYXJ0X2hpZXJhcmNo aWVzID4gMCk7CkBAIC0xOTUwLDE1ICsyMDcwLDQyIEBAIENyZWF0ZVBhcnRpdGlvblBydW5lU3Rh dGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIFBhcnRpdGlvblBydW5lSW5mbyAqcHJ1bmVpbmZvKQog CQkJUGFydGl0aW9uS2V5IHBhcnRrZXk7CiAKIAkJCS8qCi0JCQkgKiBXZSBjYW4gcmVseSBvbiB0 aGUgY29waWVzIG9mIHRoZSBwYXJ0aXRpb25lZCB0YWJsZSdzIHBhcnRpdGlvbgotCQkJICoga2V5 IGFuZCBwYXJ0aXRpb24gZGVzY3JpcHRvciBhcHBlYXJpbmcgaW4gaXRzIHJlbGNhY2hlIGVudHJ5 LAotCQkJICogYmVjYXVzZSB0aGF0IGVudHJ5IHdpbGwgYmUgaGVsZCBvcGVuIGFuZCBsb2NrZWQg Zm9yIHRoZQotCQkJICogZHVyYXRpb24gb2YgdGhpcyBleGVjdXRvciBydW4uCisJCQkgKiBNdXN0 IG9wZW4gdGhlIHJlbGF0aW9uIGJ5IG91cnNlbHZlcyB3aGVuIGNhbGxlZCBiZWZvcmUgdGhlCisJ CQkgKiBleGVjdXRpb24gaGFzIHN0YXJ0ZWQsIHN1Y2ggYXMsIHdoZW4gY2FsbGVkIGR1cmluZwor CQkJICogRXhlY3V0b3JEb0luaXRpYWxQcnVuaW5nKCkgb24gYSBjYWNoZWQgcGxhbi4gIEluIHRo YXQgY2FzZSwKKwkJCSAqIHN1Yi1wYXJ0aXRpb25zIG11c3QgYmUgbG9ja2VkLCBiZWNhdXNlIEFj cXVpcmVQbGFubmVyTG9ja3MoKQorCQkJICogd291bGQgbm90IGhhdmUgc2VlbiB0aGVtLiAoMXN0 IHJlbGF0aW9uIGluIGEgcGFydHJlbHBydW5laW5mb3MKKwkJCSAqIGxpc3QgaXMgYWx3YXlzIHRo ZSByb290IHBhcnRpdGlvbmVkIHRhYmxlIGFwcGVhcmluZyBpbiB0aGUKKwkJCSAqIHF1ZXJ5LCB3 aGljaCBBY3F1aXJlUGxhbm5lckxvY2tzKCkgd291bGQgaGF2ZSBsb2NrZWQ7IHRoZQorCQkJICog QXNzZXJ0IGluIHJlbGF0aW9uX29wZW4oKSBndWFyZHMgdGhhdCBhc3N1bXB0aW9uLikKKwkJCSAq LworCQkJaWYgKGVzdGF0ZSA9PSBOVUxMKQorCQkJeworCQkJCVJhbmdlVGJsRW50cnkgKnJ0ZSA9 IHJ0X2ZldGNoKHBpbmZvLT5ydGluZGV4LCBydGFibGUpOworCQkJCWludAkJbG9ja21vZGUgPSAo aiA9PSAwKSA/IE5vTG9jayA6IHJ0ZS0+cmVsbG9ja21vZGU7CisKKwkJCQlwYXJ0cmVsID0gdGFi bGVfb3BlbihydGUtPnJlbGlkLCBsb2NrbW9kZSk7CisJCQl9CisJCQllbHNlCisJCQkJcGFydHJl bCA9IEV4ZWNHZXRSYW5nZVRhYmxlUmVsYXRpb24oZXN0YXRlLCBwaW5mby0+cnRpbmRleCk7CisK KwkJCS8qCisJCQkgKiBXZSBjYW4gcmVseSBvbiB0aGUgY29weSBvZiB0aGUgcGFydGl0aW9uZWQg dGFibGUncyBwYXJ0aXRpb24KKwkJCSAqIGtleSBmcm9tIGluIGl0cyByZWxjYWNoZSBlbnRyeSwg YmVjYXVzZSBpdCBjYW4ndCBjaGFuZ2UgKG9yCisJCQkgKiBnZXQgZGVzdHJveWVkKSBhcyBsb25n IGFzIHRoZSByZWxhdGlvbiBpcyBsb2NrZWQuICBQYXJ0aXRpb24KKwkJCSAqIGRlc2NyaXB0b3Ig aXMgdGFrZW4gZnJvbSB0aGUgUGFydGl0aW9uRGlyZWN0b3J5IGFzc29jaWF0ZWQgd2l0aAorCQkJ ICogdGhlIHRhYmxlIHRoYXQgaXMgaGVsZCBvcGVuIGxvbmcgZW5vdWdoIGZvciB0aGUgZGVzY3Jp cHRvciB0bworCQkJICogcmVtYWluIHZhbGlkIHdoaWxlIGl0J3MgdXNlZCB0byBwZXJmb3JtIHRo ZSBwcnVuaW5nIHN0ZXBzLgogCQkJICovCi0JCQlwYXJ0cmVsID0gRXhlY0dldFJhbmdlVGFibGVS ZWxhdGlvbihlc3RhdGUsIHBpbmZvLT5ydGluZGV4KTsKIAkJCXBhcnRrZXkgPSBSZWxhdGlvbkdl dFBhcnRpdGlvbktleShwYXJ0cmVsKTsKLQkJCXBhcnRkZXNjID0gUGFydGl0aW9uRGlyZWN0b3J5 TG9va3VwKGVzdGF0ZS0+ZXNfcGFydGl0aW9uX2RpcmVjdG9yeSwKLQkJCQkJCQkJCQkJCXBhcnRy ZWwpOworCQkJcGFydGRlc2MgPSBQYXJ0aXRpb25EaXJlY3RvcnlMb29rdXAocGFydGRpciwgcGFy dHJlbCk7CisKKwkJCS8qCisJCQkgKiBNdXN0IGNsb3NlIHBhcnRyZWwsIGtlZXBpbmcgdGhlIGxv Y2sgdGFrZW4sIGlmIHdlJ3JlIG5vdCB1c2luZworCQkJICogRVN0YXRlJ3MgZW50cnkuCisJCQkg Ki8KKwkJCWlmIChlc3RhdGUgPT0gTlVMTCkKKwkJCQl0YWJsZV9jbG9zZShwYXJ0cmVsLCBOb0xv Y2spOwogCiAJCQkvKgogCQkJICogSW5pdGlhbGl6ZSB0aGUgc3VicGxhbl9tYXAgYW5kIHN1YnBh cnRfbWFwLgpAQCAtMTk3Miw2ICsyMTE5LDcgQEAgQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZShQ bGFuU3RhdGUgKnBsYW5zdGF0ZSwgUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWluZm8pCiAJCQlB c3NlcnQocGFydGRlc2MtPm5wYXJ0cyA+PSBwaW5mby0+bnBhcnRzKTsKIAkJCXBwcnVuZS0+bnBh cnRzID0gcGFydGRlc2MtPm5wYXJ0czsKIAkJCXBwcnVuZS0+c3VicGxhbl9tYXAgPSBwYWxsb2Mo c2l6ZW9mKGludCkgKiBwYXJ0ZGVzYy0+bnBhcnRzKTsKKwkJCXBwcnVuZS0+cnRpX21hcCA9IHBh bGxvYyhzaXplb2YoSW5kZXgpICogcGFydGRlc2MtPm5wYXJ0cyk7CiAJCQlpZiAocGFydGRlc2Mt Pm5wYXJ0cyA9PSBwaW5mby0+bnBhcnRzKQogCQkJewogCQkJCS8qCkBAIC0xOTgyLDYgKzIxMzAs OCBAQCBDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBQYXJ0 aXRpb25QcnVuZUluZm8gKnBydW5laW5mbykKIAkJCQlwcHJ1bmUtPnN1YnBhcnRfbWFwID0gcGlu Zm8tPnN1YnBhcnRfbWFwOwogCQkJCW1lbWNweShwcHJ1bmUtPnN1YnBsYW5fbWFwLCBwaW5mby0+ c3VicGxhbl9tYXAsCiAJCQkJCSAgIHNpemVvZihpbnQpICogcGluZm8tPm5wYXJ0cyk7CisJCQkJ bWVtY3B5KHBwcnVuZS0+cnRpX21hcCwgcGluZm8tPnJ0aV9tYXAsCisJCQkJCSAgIHNpemVvZihp bnQpICogcGluZm8tPm5wYXJ0cyk7CiAKIAkJCQkvKgogCQkJCSAqIERvdWJsZS1jaGVjayB0aGF0 IHRoZSBsaXN0IG9mIHVucHJ1bmVkIHJlbGF0aW9ucyBoYXMgbm90CkBAIC0yMDMyLDYgKzIxODIs OCBAQCBDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBQYXJ0 aXRpb25QcnVuZUluZm8gKnBydW5laW5mbykKIAkJCQkJCQlwaW5mby0+c3VicGxhbl9tYXBbcGRf aWR4XTsKIAkJCQkJCXBwcnVuZS0+c3VicGFydF9tYXBbcHBfaWR4XSA9CiAJCQkJCQkJcGluZm8t PnN1YnBhcnRfbWFwW3BkX2lkeF07CisJCQkJCQlwcHJ1bmUtPnJ0aV9tYXBbcHBfaWR4XSA9CisJ CQkJCQkJcGluZm8tPnJ0aV9tYXBbcGRfaWR4XTsKIAkJCQkJCXBkX2lkeCsrOwogCQkJCQl9CiAJ CQkJCWVsc2UKQEAgLTIwMzksNiArMjE5MSw3IEBAIENyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUo UGxhblN0YXRlICpwbGFuc3RhdGUsIFBhcnRpdGlvblBydW5lSW5mbyAqcHJ1bmVpbmZvKQogCQkJ CQkJLyogdGhpcyBwYXJ0ZGVzYyBlbnRyeSBpcyBub3QgaW4gdGhlIHBsYW4gKi8KIAkJCQkJCXBw cnVuZS0+c3VicGxhbl9tYXBbcHBfaWR4XSA9IC0xOwogCQkJCQkJcHBydW5lLT5zdWJwYXJ0X21h cFtwcF9pZHhdID0gLTE7CisJCQkJCQlwcHJ1bmUtPnJ0aV9tYXBbcHBfaWR4XSA9IDA7CiAJCQkJ CX0KIAkJCQl9CiAKQEAgLTIwNjAsNyArMjIxMyw3IEBAIENyZWF0ZVBhcnRpdGlvblBydW5lU3Rh dGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIFBhcnRpdGlvblBydW5lSW5mbyAqcHJ1bmVpbmZvKQog CQkJICogSW5pdGlhbGl6ZSBwcnVuaW5nIGNvbnRleHRzIGFzIG5lZWRlZC4KIAkJCSAqLwogCQkJ cHBydW5lLT5pbml0aWFsX3BydW5pbmdfc3RlcHMgPSBwaW5mby0+aW5pdGlhbF9wcnVuaW5nX3N0 ZXBzOwotCQkJaWYgKHBpbmZvLT5pbml0aWFsX3BydW5pbmdfc3RlcHMpCisJCQlpZiAoY29uc2lk ZXJfaW5pdGlhbF9zdGVwcyAmJiBwaW5mby0+aW5pdGlhbF9wcnVuaW5nX3N0ZXBzKQogCQkJewog CQkJCUluaXRQYXJ0aXRpb25QcnVuZUNvbnRleHQoJnBwcnVuZS0+aW5pdGlhbF9jb250ZXh0LAog CQkJCQkJCQkJCSAgcGluZm8tPmluaXRpYWxfcHJ1bmluZ19zdGVwcywKQEAgLTIwNzAsNyArMjIy Myw3IEBAIENyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIFBh cnRpdGlvblBydW5lSW5mbyAqcHJ1bmVpbmZvKQogCQkJCXBydW5lc3RhdGUtPmRvX2luaXRpYWxf cHJ1bmUgPSB0cnVlOwogCQkJfQogCQkJcHBydW5lLT5leGVjX3BydW5pbmdfc3RlcHMgPSBwaW5m by0+ZXhlY19wcnVuaW5nX3N0ZXBzOwotCQkJaWYgKHBpbmZvLT5leGVjX3BydW5pbmdfc3RlcHMp CisJCQlpZiAoY29uc2lkZXJfZXhlY19zdGVwcyAmJiBwaW5mby0+ZXhlY19wcnVuaW5nX3N0ZXBz KQogCQkJewogCQkJCUluaXRQYXJ0aXRpb25QcnVuZUNvbnRleHQoJnBwcnVuZS0+ZXhlY19jb250 ZXh0LAogCQkJCQkJCQkJCSAgcGluZm8tPmV4ZWNfcHJ1bmluZ19zdGVwcywKQEAgLTIyOTgsMTAg KzI0NTEsMTQgQEAgUGFydGl0aW9uUHJ1bmVGaXhTdWJQbGFuTWFwKFBhcnRpdGlvblBydW5lU3Rh dGUgKnBydW5lc3RhdGUsCiAgKiBQYXNzIGluaXRpYWxfcHJ1bmUgaWYgUEFSQU1fRVhFQyBQYXJh bXMgY2Fubm90IHlldCBiZSBldmFsdWF0ZWQuICBUaGlzCiAgKiBkaWZmZXJlbnRpYXRlcyB0aGUg aW5pdGlhbCBleGVjdXRvci10aW1lIHBydW5pbmcgc3RlcCBmcm9tIGxhdGVyCiAgKiBydW50aW1l IHBydW5pbmcuCisgKgorICogUlQgaW5kZXhlcyBvZiBsZWFmIHBhcnRpdGlvbnMgc2Nhbm5lZCBi eSB0aGUgY2hvc2VuIHN1YnBsYW5zIGFyZSBhZGRlZCB0bworICogKnNjYW5fbGVhZnBhcnRfcnRp cyBpZiB0aGUgcG9pbnRlciBpcyBub24tTlVMTC4KICAqLwogQml0bWFwc2V0ICoKIEV4ZWNGaW5k TWF0Y2hpbmdTdWJQbGFucyhQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlLAotCQkJCQkJ IGJvb2wgaW5pdGlhbF9wcnVuZSkKKwkJCQkJCSBib29sIGluaXRpYWxfcHJ1bmUsCisJCQkJCQkg Qml0bWFwc2V0ICoqc2Nhbl9sZWFmcGFydF9ydGlzKQogewogCUJpdG1hcHNldCAgKnJlc3VsdCA9 IE5VTEw7CiAJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OwpAQCAtMjMzNiw3ICsyNDkzLDcgQEAg RXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKFBhcnRpdGlvblBydW5lU3RhdGUgKnBydW5lc3RhdGUs CiAJCSAqLwogCQlwcHJ1bmUgPSAmcHJ1bmVkYXRhLT5wYXJ0cmVscHJ1bmVkYXRhWzBdOwogCQlm aW5kX21hdGNoaW5nX3N1YnBsYW5zX3JlY3Vyc2UocHJ1bmVkYXRhLCBwcHJ1bmUsIGluaXRpYWxf cHJ1bmUsCi0JCQkJCQkJCQkgICAmcmVzdWx0KTsKKwkJCQkJCQkJCSAgICZyZXN1bHQsIHNjYW5f bGVhZnBhcnRfcnRpcyk7CiAKIAkJLyogRXhwcmVzc2lvbiBldmFsIG1heSBoYXZlIHVzZWQgc3Bh Y2UgaW4gRXhwckNvbnRleHQgdG9vICovCiAJCWlmIChwcHJ1bmUtPmV4ZWNfcHJ1bmluZ19zdGVw cykKQEAgLTIzNTAsNiArMjUwNyw4IEBAIEV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhQYXJ0aXRp b25QcnVuZVN0YXRlICpwcnVuZXN0YXRlLAogCiAJLyogQ29weSByZXN1bHQgb3V0IG9mIHRoZSB0 ZW1wIGNvbnRleHQgYmVmb3JlIHdlIHJlc2V0IGl0ICovCiAJcmVzdWx0ID0gYm1zX2NvcHkocmVz dWx0KTsKKwlpZiAoc2Nhbl9sZWFmcGFydF9ydGlzKQorCQkqc2Nhbl9sZWFmcGFydF9ydGlzID0g Ym1zX2NvcHkoKnNjYW5fbGVhZnBhcnRfcnRpcyk7CiAKIAlNZW1vcnlDb250ZXh0UmVzZXQocHJ1 bmVzdGF0ZS0+cHJ1bmVfY29udGV4dCk7CiAKQEAgLTIzNjAsMTMgKzI1MTksMTUgQEAgRXhlY0Zp bmRNYXRjaGluZ1N1YlBsYW5zKFBhcnRpdGlvblBydW5lU3RhdGUgKnBydW5lc3RhdGUsCiAgKiBm aW5kX21hdGNoaW5nX3N1YnBsYW5zX3JlY3Vyc2UKICAqCQlSZWN1cnNpdmUgd29ya2VyIGZ1bmN0 aW9uIGZvciBFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMKICAqCi0gKiBBZGRzIHZhbGlkIChub24t cHJ1bmFibGUpIHN1YnBsYW4gSURzIHRvICp2YWxpZHN1YnBsYW5zCisgKiBBZGRzIHZhbGlkIChu b24tcHJ1bmFibGUpIHN1YnBsYW4gSURzIHRvICp2YWxpZHN1YnBsYW5zIGFuZCBSVCBpbmRleGVz IG9mCisgKiBvZiB0aGUgY29ycmVzcG9uZGluZyBsZWFmIHBhcnRpdGlvbnMgdG8gKnNjYW5fbGVh ZnBhcnRfcnRpcyAoaWYgYXNrZWQgZm9yKS4KICAqLwogc3RhdGljIHZvaWQKIGZpbmRfbWF0Y2hp bmdfc3VicGxhbnNfcmVjdXJzZShQYXJ0aXRpb25QcnVuaW5nRGF0YSAqcHJ1bmVkYXRhLAogCQkJ CQkJCSAgIFBhcnRpdGlvbmVkUmVsUHJ1bmluZ0RhdGEgKnBwcnVuZSwKIAkJCQkJCQkgICBib29s IGluaXRpYWxfcHJ1bmUsCi0JCQkJCQkJICAgQml0bWFwc2V0ICoqdmFsaWRzdWJwbGFucykKKwkJ CQkJCQkgICBCaXRtYXBzZXQgKip2YWxpZHN1YnBsYW5zLAorCQkJCQkJCSAgIEJpdG1hcHNldCAq KnNjYW5fbGVhZnBhcnRfcnRpcykKIHsKIAlCaXRtYXBzZXQgICpwYXJ0c2V0OwogCWludAkJCWk7 CkBAIC0yMzkzLDggKzI1NTQsMTQgQEAgZmluZF9tYXRjaGluZ19zdWJwbGFuc19yZWN1cnNlKFBh cnRpdGlvblBydW5pbmdEYXRhICpwcnVuZWRhdGEsCiAJd2hpbGUgKChpID0gYm1zX25leHRfbWVt YmVyKHBhcnRzZXQsIGkpKSA+PSAwKQogCXsKIAkJaWYgKHBwcnVuZS0+c3VicGxhbl9tYXBbaV0g Pj0gMCkKKwkJewogCQkJKnZhbGlkc3VicGxhbnMgPSBibXNfYWRkX21lbWJlcigqdmFsaWRzdWJw bGFucywKIAkJCQkJCQkJCQkJcHBydW5lLT5zdWJwbGFuX21hcFtpXSk7CisJCQlBc3NlcnQocHBy dW5lLT5ydGlfbWFwW2ldID4gMCk7CisJCQlpZiAoc2Nhbl9sZWFmcGFydF9ydGlzKQorCQkJCSpz Y2FuX2xlYWZwYXJ0X3J0aXMgPSBibXNfYWRkX21lbWJlcigqc2Nhbl9sZWFmcGFydF9ydGlzLAor CQkJCQkJCQkJCQkJCSBwcHJ1bmUtPnJ0aV9tYXBbaV0pOworCQl9CiAJCWVsc2UKIAkJewogCQkJ aW50CQkJcGFydGlkeCA9IHBwcnVuZS0+c3VicGFydF9tYXBbaV07CkBAIC0yNDAyLDcgKzI1Njks OCBAQCBmaW5kX21hdGNoaW5nX3N1YnBsYW5zX3JlY3Vyc2UoUGFydGl0aW9uUHJ1bmluZ0RhdGEg KnBydW5lZGF0YSwKIAkJCWlmIChwYXJ0aWR4ID49IDApCiAJCQkJZmluZF9tYXRjaGluZ19zdWJw bGFuc19yZWN1cnNlKHBydW5lZGF0YSwKIAkJCQkJCQkJCQkJICAgJnBydW5lZGF0YS0+cGFydHJl bHBydW5lZGF0YVtwYXJ0aWR4XSwKLQkJCQkJCQkJCQkJICAgaW5pdGlhbF9wcnVuZSwgdmFsaWRz dWJwbGFucyk7CisJCQkJCQkJCQkJCSAgIGluaXRpYWxfcHJ1bmUsIHZhbGlkc3VicGxhbnMsCisJ CQkJCQkJCQkJCSAgIHNjYW5fbGVhZnBhcnRfcnRpcyk7CiAJCQllbHNlCiAJCQl7CiAJCQkJLyoK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNVdGlscy5jIGIvc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY1V0aWxzLmMKaW5kZXggOTY5NWRlODViOS4uZGNlOTNhOGM5ZiAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1V0aWxzLmMKKysrIGIvc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY1V0aWxzLmMKQEAgLTEzNSw2ICsxMzUsNyBAQCBDcmVhdGVFeGVjdXRv clN0YXRlKHZvaWQpCiAJZXN0YXRlLT5lc19wYXJhbV9leGVjX3ZhbHMgPSBOVUxMOwogCiAJZXN0 YXRlLT5lc19xdWVyeUVudiA9IE5VTEw7CisJZXN0YXRlLT5lc19wYXJ0X3BydW5lX3Jlc3VsdHMg PSBOSUw7CiAKIAllc3RhdGUtPmVzX3F1ZXJ5X2N4dCA9IHFjb250ZXh0OwogCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9leGVjdXRvci9mdW5jdGlvbnMuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L2Z1bmN0aW9ucy5jCmluZGV4IGRjMTM2MjUxNzEuLmJmZmI0MmNlNzEgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL2Z1bmN0aW9ucy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L2Z1bmN0aW9ucy5jCkBAIC04NDIsNyArODQyLDcgQEAgcG9zdHF1ZWxfc3RhcnQoZXhlY3V0aW9u X3N0YXRlICplcywgU1FMRnVuY3Rpb25DYWNoZVB0ciBmY2FjaGUpCiAJZWxzZQogCQlkZXN0ID0g Tm9uZV9SZWNlaXZlcjsKIAotCWVzLT5xZCA9IENyZWF0ZVF1ZXJ5RGVzYyhlcy0+c3RtdCwKKwll cy0+cWQgPSBDcmVhdGVRdWVyeURlc2MoZXMtPnN0bXQsIE5JTCwKIAkJCQkJCQkgZmNhY2hlLT5z cmMsCiAJCQkJCQkJIEdldEFjdGl2ZVNuYXBzaG90KCksCiAJCQkJCQkJIEludmFsaWRTbmFwc2hv dCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBlbmQuYyBiL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBlbmQuYwppbmRleCA5OTgzMDE5OGJkLi4zYjkxNzU4NGRl IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQXBwZW5kLmMKKysrIGIvc3Jj L2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVuZC5jCkBAIC0xNTYsNyArMTU2LDggQEAgRXhlY0lu aXRBcHBlbmQoQXBwZW5kICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkJICog c3VicGxhbiwgd2UgY2FuIGZpbGwgYXNfdmFsaWRfc3VicGxhbnMgaW1tZWRpYXRlbHksIHByZXZl bnRpbmcKIAkJICogbGF0ZXIgY2FsbHMgdG8gRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zLgogCQkg Ki8KLQkJaWYgKCFwcnVuZXN0YXRlLT5kb19leGVjX3BydW5lICYmIG5wbGFucyA+IDApCisJCWlm IChhcHBlbmRzdGF0ZS0+YXNfcHJ1bmVfc3RhdGUgPT0gTlVMTCB8fAorCQkJKCFhcHBlbmRzdGF0 ZS0+YXNfcHJ1bmVfc3RhdGUtPmRvX2V4ZWNfcHJ1bmUgJiYgbnBsYW5zID4gMCkpCiAJCQlhcHBl bmRzdGF0ZS0+YXNfdmFsaWRfc3VicGxhbnMgPSBibXNfYWRkX3JhbmdlKE5VTEwsIDAsIG5wbGFu cyAtIDEpOwogCX0KIAllbHNlCkBAIC01NzgsNyArNTc5LDcgQEAgY2hvb3NlX25leHRfc3VicGxh bl9sb2NhbGx5KEFwcGVuZFN0YXRlICpub2RlKQogCQl9CiAJCWVsc2UgaWYgKG5vZGUtPmFzX3Zh bGlkX3N1YnBsYW5zID09IE5VTEwpCiAJCQlub2RlLT5hc192YWxpZF9zdWJwbGFucyA9Ci0JCQkJ RXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKG5vZGUtPmFzX3BydW5lX3N0YXRlLCBmYWxzZSk7CisJ CQkJRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKG5vZGUtPmFzX3BydW5lX3N0YXRlLCBmYWxzZSwg TlVMTCk7CiAKIAkJd2hpY2hwbGFuID0gLTE7CiAJfQpAQCAtNjQzLDcgKzY0NCw3IEBAIGNob29z ZV9uZXh0X3N1YnBsYW5fZm9yX2xlYWRlcihBcHBlbmRTdGF0ZSAqbm9kZSkKIAkJaWYgKG5vZGUt PmFzX3ZhbGlkX3N1YnBsYW5zID09IE5VTEwpCiAJCXsKIAkJCW5vZGUtPmFzX3ZhbGlkX3N1YnBs YW5zID0KLQkJCQlFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMobm9kZS0+YXNfcHJ1bmVfc3RhdGUs IGZhbHNlKTsKKwkJCQlFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMobm9kZS0+YXNfcHJ1bmVfc3Rh dGUsIGZhbHNlLCBOVUxMKTsKIAogCQkJLyoKIAkJCSAqIE1hcmsgZWFjaCBpbnZhbGlkIHBsYW4g YXMgZmluaXNoZWQgdG8gYWxsb3cgdGhlIGxvb3AgYmVsb3cgdG8KQEAgLTcxOCw3ICs3MTksNyBA QCBjaG9vc2VfbmV4dF9zdWJwbGFuX2Zvcl93b3JrZXIoQXBwZW5kU3RhdGUgKm5vZGUpCiAJZWxz ZSBpZiAobm9kZS0+YXNfdmFsaWRfc3VicGxhbnMgPT0gTlVMTCkKIAl7CiAJCW5vZGUtPmFzX3Zh bGlkX3N1YnBsYW5zID0KLQkJCUV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhub2RlLT5hc19wcnVu ZV9zdGF0ZSwgZmFsc2UpOworCQkJRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKG5vZGUtPmFzX3By dW5lX3N0YXRlLCBmYWxzZSwgTlVMTCk7CiAJCW1hcmtfaW52YWxpZF9zdWJwbGFuc19hc19maW5p c2hlZChub2RlKTsKIAl9CiAKQEAgLTg2OSw3ICs4NzAsNyBAQCBFeGVjQXBwZW5kQXN5bmNCZWdp bihBcHBlbmRTdGF0ZSAqbm9kZSkKIAlpZiAobm9kZS0+YXNfdmFsaWRfc3VicGxhbnMgPT0gTlVM TCkKIAl7CiAJCW5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zID0KLQkJCUV4ZWNGaW5kTWF0Y2hpbmdT dWJQbGFucyhub2RlLT5hc19wcnVuZV9zdGF0ZSwgZmFsc2UpOworCQkJRXhlY0ZpbmRNYXRjaGlu Z1N1YlBsYW5zKG5vZGUtPmFzX3BydW5lX3N0YXRlLCBmYWxzZSwgTlVMTCk7CiAKIAkJY2xhc3Np ZnlfbWF0Y2hpbmdfc3VicGxhbnMobm9kZSk7CiAJfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv ZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVy Z2VBcHBlbmQuYwppbmRleCBmMzcwZjlmMjg3Li5jY2ZhMDgzOTQ1IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYworKysgYi9zcmMvYmFja2VuZC9leGVj dXRvci9ub2RlTWVyZ2VBcHBlbmQuYwpAQCAtMTA0LDcgKzEwNCw4IEBAIEV4ZWNJbml0TWVyZ2VB cHBlbmQoTWVyZ2VBcHBlbmQgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCQkg KiBzdWJwbGFuLCB3ZSBjYW4gZmlsbCBtc192YWxpZF9zdWJwbGFucyBpbW1lZGlhdGVseSwgcHJl dmVudGluZwogCQkgKiBsYXRlciBjYWxscyB0byBFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMuCiAJ CSAqLwotCQlpZiAoIXBydW5lc3RhdGUtPmRvX2V4ZWNfcHJ1bmUgJiYgbnBsYW5zID4gMCkKKwkJ aWYgKG1lcmdlc3RhdGUtPm1zX3BydW5lX3N0YXRlID09IE5VTEwgfHwKKwkJCSghbWVyZ2VzdGF0 ZS0+bXNfcHJ1bmVfc3RhdGUtPmRvX2V4ZWNfcHJ1bmUgJiYgbnBsYW5zID4gMCkpCiAJCQltZXJn ZXN0YXRlLT5tc192YWxpZF9zdWJwbGFucyA9IGJtc19hZGRfcmFuZ2UoTlVMTCwgMCwgbnBsYW5z IC0gMSk7CiAJfQogCWVsc2UKQEAgLTIxOSw3ICsyMjAsNyBAQCBFeGVjTWVyZ2VBcHBlbmQoUGxh blN0YXRlICpwc3RhdGUpCiAJCSAqLwogCQlpZiAobm9kZS0+bXNfdmFsaWRfc3VicGxhbnMgPT0g TlVMTCkKIAkJCW5vZGUtPm1zX3ZhbGlkX3N1YnBsYW5zID0KLQkJCQlFeGVjRmluZE1hdGNoaW5n U3ViUGxhbnMobm9kZS0+bXNfcHJ1bmVfc3RhdGUsIGZhbHNlKTsKKwkJCQlFeGVjRmluZE1hdGNo aW5nU3ViUGxhbnMobm9kZS0+bXNfcHJ1bmVfc3RhdGUsIGZhbHNlLCBOVUxMKTsKIAogCQkvKgog CQkgKiBGaXJzdCB0aW1lIHRocm91Z2g6IHB1bGwgdGhlIGZpcnN0IHR1cGxlIGZyb20gZWFjaCB2 YWxpZCBzdWJwbGFuLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivc3BpLmMgYi9z cmMvYmFja2VuZC9leGVjdXRvci9zcGkuYwppbmRleCBmZDU3OTZmMWI5Li45MzAxMmE1YjNiIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9zcGkuYworKysgYi9zcmMvYmFja2VuZC9l eGVjdXRvci9zcGkuYwpAQCAtMTU3OCw2ICsxNTc4LDcgQEAgU1BJX2N1cnNvcl9vcGVuX2ludGVy bmFsKGNvbnN0IGNoYXIgKm5hbWUsIFNQSVBsYW5QdHIgcGxhbiwKIAlDYWNoZWRQbGFuU291cmNl ICpwbGFuc291cmNlOwogCUNhY2hlZFBsYW4gKmNwbGFuOwogCUxpc3QJICAgKnN0bXRfbGlzdDsK KwlMaXN0CSAgICpwYXJ0X3BydW5lX3Jlc3VsdHNfbGlzdDsKIAljaGFyCSAgICpxdWVyeV9zdHJp bmc7CiAJU25hcHNob3QJc25hcHNob3Q7CiAJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OwpAQCAt MTY1Nyw3ICsxNjU4LDEwIEBAIFNQSV9jdXJzb3Jfb3Blbl9pbnRlcm5hbChjb25zdCBjaGFyICpu YW1lLCBTUElQbGFuUHRyIHBsYW4sCiAJICovCiAKIAkvKiBSZXBsYW4gaWYgbmVlZGVkLCBhbmQg aW5jcmVtZW50IHBsYW4gcmVmY291bnQgZm9yIHBvcnRhbCAqLwotCWNwbGFuID0gR2V0Q2FjaGVk UGxhbihwbGFuc291cmNlLCBwYXJhbUxJLCBOVUxMLCBfU1BJX2N1cnJlbnQtPnF1ZXJ5RW52KTsK KwljcGxhbiA9IEdldENhY2hlZFBsYW4ocGxhbnNvdXJjZSwgcGFyYW1MSSwgTlVMTCwgX1NQSV9j dXJyZW50LT5xdWVyeUVudiwKKwkJCQkJCSAgJnBhcnRfcHJ1bmVfcmVzdWx0c19saXN0KTsKKwlB c3NlcnQobGlzdF9sZW5ndGgoY3BsYW4tPnN0bXRfbGlzdCkgPT0KKwkJICAgbGlzdF9sZW5ndGgo cGFydF9wcnVuZV9yZXN1bHRzX2xpc3QpKTsKIAlzdG10X2xpc3QgPSBjcGxhbi0+c3RtdF9saXN0 OwogCiAJaWYgKCFwbGFuLT5zYXZlZCkKQEAgLTE2ODUsNiArMTY4OSw5IEBAIFNQSV9jdXJzb3Jf b3Blbl9pbnRlcm5hbChjb25zdCBjaGFyICpuYW1lLCBTUElQbGFuUHRyIHBsYW4sCiAJCQkJCSAg c3RtdF9saXN0LAogCQkJCQkgIGNwbGFuKTsKIAorCS8qIENvcHkgTGlzdHMgb2YgUGFydGl0aW9u UHJ1bmVSZXN1bHRzIGludG8gdGhlIHBvcnRhbCdzIGNvbnRleHQuICovCisJUG9ydGFsU3RvcmVQ YXJ0aXRpb25QcnVuZVJlc3VsdHMocG9ydGFsLCBwYXJ0X3BydW5lX3Jlc3VsdHNfbGlzdCk7CisK IAkvKgogCSAqIFNldCB1cCBvcHRpb25zIGZvciBwb3J0YWwuICBEZWZhdWx0IFNDUk9MTCB0eXBl IGlzIGNob3NlbiB0aGUgc2FtZSB3YXkKIAkgKiBhcyBQZXJmb3JtQ3Vyc29yT3BlbiBkb2VzIGl0 LgpAQCAtMjA5Miw3ICsyMDk5LDggQEAgU1BJX3BsYW5fZ2V0X2NhY2hlZF9wbGFuKFNQSVBsYW5Q dHIgcGxhbikKIAkvKiBHZXQgdGhlIGdlbmVyaWMgcGxhbiBmb3IgdGhlIHF1ZXJ5ICovCiAJY3Bs YW4gPSBHZXRDYWNoZWRQbGFuKHBsYW5zb3VyY2UsIE5VTEwsCiAJCQkJCQkgIHBsYW4tPnNhdmVk ID8gQ3VycmVudFJlc291cmNlT3duZXIgOiBOVUxMLAotCQkJCQkJICBfU1BJX2N1cnJlbnQtPnF1 ZXJ5RW52KTsKKwkJCQkJCSAgX1NQSV9jdXJyZW50LT5xdWVyeUVudiwKKwkJCQkJCSAgTlVMTCAv KiBOb3QgaW50ZXJlc3RlZCBpbiBQYXJ0aXRpb25QcnVuZVJlc3VsdHMgKi8pOwogCUFzc2VydChj cGxhbiA9PSBwbGFuc291cmNlLT5ncGxhbik7CiAKIAkvKiBQb3AgdGhlIGVycm9yIGNvbnRleHQg c3RhY2sgKi8KQEAgLTI0NzMsNyArMjQ4MSw5IEBAIF9TUElfZXhlY3V0ZV9wbGFuKFNQSVBsYW5Q dHIgcGxhbiwgY29uc3QgU1BJRXhlY3V0ZU9wdGlvbnMgKm9wdGlvbnMsCiAJewogCQlDYWNoZWRQ bGFuU291cmNlICpwbGFuc291cmNlID0gKENhY2hlZFBsYW5Tb3VyY2UgKikgbGZpcnN0KGxjMSk7 CiAJCUxpc3QJICAgKnN0bXRfbGlzdDsKLQkJTGlzdENlbGwgICAqbGMyOworCQlMaXN0CSAgICpw YXJ0X3BydW5lX3Jlc3VsdHNfbGlzdDsKKwkJTGlzdENlbGwgICAqbGMyLAorCQkJCSAgICpsYzM7 CiAKIAkJc3BpY2FsbGJhY2thcmcucXVlcnkgPSBwbGFuc291cmNlLT5xdWVyeV9zdHJpbmc7CiAK QEAgLTI1NDksOCArMjU1OSwxMCBAQCBfU1BJX2V4ZWN1dGVfcGxhbihTUElQbGFuUHRyIHBsYW4s IGNvbnN0IFNQSUV4ZWN1dGVPcHRpb25zICpvcHRpb25zLAogCQkgKiBwbGFuLCB0aGUgcmVmY291 bnQgbXVzdCBiZSBiYWNrZWQgYnkgdGhlIHBsYW5fb3duZXIuCiAJCSAqLwogCQljcGxhbiA9IEdl dENhY2hlZFBsYW4ocGxhbnNvdXJjZSwgb3B0aW9ucy0+cGFyYW1zLAotCQkJCQkJCSAgcGxhbl9v d25lciwgX1NQSV9jdXJyZW50LT5xdWVyeUVudik7Ci0KKwkJCQkJCQkgIHBsYW5fb3duZXIsIF9T UElfY3VycmVudC0+cXVlcnlFbnYsCisJCQkJCQkJICZwYXJ0X3BydW5lX3Jlc3VsdHNfbGlzdCk7 CisJCUFzc2VydChsaXN0X2xlbmd0aChjcGxhbi0+c3RtdF9saXN0KSA9PQorCQkJICAgbGlzdF9s ZW5ndGgocGFydF9wcnVuZV9yZXN1bHRzX2xpc3QpKTsKIAkJc3RtdF9saXN0ID0gY3BsYW4tPnN0 bXRfbGlzdDsKIAogCQkvKgpAQCAtMjU4OSw5ICsyNjAxLDEwIEBAIF9TUElfZXhlY3V0ZV9wbGFu KFNQSVBsYW5QdHIgcGxhbiwgY29uc3QgU1BJRXhlY3V0ZU9wdGlvbnMgKm9wdGlvbnMsCiAJCQl9 CiAJCX0KIAotCQlmb3JlYWNoKGxjMiwgc3RtdF9saXN0KQorCQlmb3Jib3RoKGxjMiwgc3RtdF9s aXN0LCBsYzMsIHBhcnRfcHJ1bmVfcmVzdWx0c19saXN0KQogCQl7CiAJCQlQbGFubmVkU3RtdCAq c3RtdCA9IGxmaXJzdF9ub2RlKFBsYW5uZWRTdG10LCBsYzIpOworCQkJTGlzdAkgICAqcGFydF9w cnVuZV9yZXN1bHRzID0gbGZpcnN0X25vZGUoTGlzdCwgbGMzKTsKIAkJCWJvb2wJCWNhblNldFRh ZyA9IHN0bXQtPmNhblNldFRhZzsKIAkJCURlc3RSZWNlaXZlciAqZGVzdDsKIApAQCAtMjY2Myw3 ICsyNjc2LDcgQEAgX1NQSV9leGVjdXRlX3BsYW4oU1BJUGxhblB0ciBwbGFuLCBjb25zdCBTUElF eGVjdXRlT3B0aW9ucyAqb3B0aW9ucywKIAkJCQllbHNlCiAJCQkJCXNuYXAgPSBJbnZhbGlkU25h cHNob3Q7CiAKLQkJCQlxZGVzYyA9IENyZWF0ZVF1ZXJ5RGVzYyhzdG10LAorCQkJCXFkZXNjID0g Q3JlYXRlUXVlcnlEZXNjKHN0bXQsIHBhcnRfcHJ1bmVfcmVzdWx0cywKIAkJCQkJCQkJCQlwbGFu c291cmNlLT5xdWVyeV9zdHJpbmcsCiAJCQkJCQkJCQkJc25hcCwgY3Jvc3NjaGVja19zbmFwc2hv dCwKIAkJCQkJCQkJCQlkZXN0LApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1 bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9yZWFkZnVuY3MuYwppbmRleCAyMzc3NjM2N2M1Li5i MDFmNTVmYjRmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9yZWFkZnVuY3MuYworKysg Yi9zcmMvYmFja2VuZC9ub2Rlcy9yZWFkZnVuY3MuYwpAQCAtMTU4LDYgKzE1OCwxMSBAQAogCXRv a2VuID0gcGdfc3RydG9rKCZsZW5ndGgpOwkJLyogc2tpcCA6ZmxkbmFtZSAqLyBcCiAJbG9jYWxf bm9kZS0+ZmxkbmFtZSA9IHJlYWRJbnRDb2xzKGxlbikKIAorLyogUmVhZCBhbiBJbmRleCBhcnJh eSAqLworI2RlZmluZSBSRUFEX0lOREVYX0FSUkFZKGZsZG5hbWUsIGxlbikgXAorCXRva2VuID0g cGdfc3RydG9rKCZsZW5ndGgpOwkJLyogc2tpcCA6ZmxkbmFtZSAqLyBcCisJbG9jYWxfbm9kZS0+ ZmxkbmFtZSA9IHJlYWRJbmRleENvbHMobGVuKQorCiAvKiBSZWFkIGEgYm9vbCBhcnJheSAqLwog I2RlZmluZSBSRUFEX0JPT0xfQVJSQVkoZmxkbmFtZSwgbGVuKSBcCiAJdG9rZW4gPSBwZ19zdHJ0 b2soJmxlbmd0aCk7CQkvKiBza2lwIDpmbGRuYW1lICovIFwKQEAgLTgwMCw3ICs4MDUsNiBAQCBm bm5hbWUoaW50IG51bUNvbHMpIFwKICAqLwogUkVBRF9TQ0FMQVJfQVJSQVkocmVhZEF0dHJOdW1i ZXJDb2xzLCBpbnQxNiwgYXRvaSkKIFJFQURfU0NBTEFSX0FSUkFZKHJlYWRPaWRDb2xzLCBPaWQs IGF0b29pZCkKLS8qIG91dGZ1bmNzLmMgaGFzIHdyaXRlSW5kZXhDb2xzLCBidXQgd2UgZG9uJ3Qg eWV0IG5lZWQgdGhhdCBoZXJlICovCi0vKiBSRUFEX1NDQUxBUl9BUlJBWShyZWFkSW5kZXhDb2xz LCBJbmRleCwgYXRvdWkpICovCitSRUFEX1NDQUxBUl9BUlJBWShyZWFkSW5kZXhDb2xzLCBJbmRl eCwgYXRvdWkpCiBSRUFEX1NDQUxBUl9BUlJBWShyZWFkSW50Q29scywgaW50LCBhdG9pKQogUkVB RF9TQ0FMQVJfQVJSQVkocmVhZEJvb2xDb2xzLCBib29sLCBzdHJ0b2Jvb2wpCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgYi9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGxhbi9wbGFubmVyLmMKaW5kZXggNzk5NjAyZjVlYS4uYTk2ZDMxNmRjYSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCisrKyBiL3NyYy9iYWNr ZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwpAQCAtNTIwLDcgKzUyMCw5IEBAIHN0YW5kYXJk X3BsYW5uZXIoUXVlcnkgKnBhcnNlLCBjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcsIGludCBjdXJz b3JPcHRpb25zLAogCXJlc3VsdC0+cGFyYWxsZWxNb2RlTmVlZGVkID0gZ2xvYi0+cGFyYWxsZWxN b2RlTmVlZGVkOwogCXJlc3VsdC0+cGxhblRyZWUgPSB0b3BfcGxhbjsKIAlyZXN1bHQtPnBhcnRQ cnVuZUluZm9zID0gZ2xvYi0+cGFydFBydW5lSW5mb3M7CisJcmVzdWx0LT5jb250YWluc0luaXRp YWxQcnVuaW5nID0gZ2xvYi0+Y29udGFpbnNJbml0aWFsUHJ1bmluZzsKIAlyZXN1bHQtPnJ0YWJs ZSA9IGdsb2ItPmZpbmFscnRhYmxlOworCXJlc3VsdC0+bWluTG9ja1JlbGlkcyA9IGdsb2ItPm1p bkxvY2tSZWxpZHM7CiAJcmVzdWx0LT5yZXN1bHRSZWxhdGlvbnMgPSBnbG9iLT5yZXN1bHRSZWxh dGlvbnM7CiAJcmVzdWx0LT5hcHBlbmRSZWxhdGlvbnMgPSBnbG9iLT5hcHBlbmRSZWxhdGlvbnM7 CiAJcmVzdWx0LT5zdWJwbGFucyA9IGdsb2ItPnN1YnBsYW5zOwpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bs YW4vc2V0cmVmcy5jCmluZGV4IGU2N2YwZTM1MDkuLjU4MjBmMjZmZGIgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYworKysgYi9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGxhbi9zZXRyZWZzLmMKQEAgLTI3MCw2ICsyNzAsMTYgQEAgc2V0X3BsYW5fcmVmZXJl bmNlcyhQbGFubmVySW5mbyAqcm9vdCwgUGxhbiAqcGxhbikKIAkgKi8KIAlhZGRfcnRlc190b19m bGF0X3J0YWJsZShyb290LCBmYWxzZSk7CiAKKwkvKgorCSAqIEFkZCB0aGUgcXVlcnkncyBhZGp1 c3RlZCByYW5nZSBvZiBSVCBpbmRleGVzIHRvIGdsb2ItPm1pbkxvY2tSZWxpZHMuCisJICogVGhl IGFkanVzdGVkIFJUIGluZGV4ZXMgb2YgcHJ1bmFibGUgcmVsYXRpb25zIHdpbGwgYmUgZGVsZXRl ZCBmcm9tIHRoZQorCSAqIHNldCBiZWxvdyB3aGVyZSBQYXJ0aXRpb25QcnVuZUluZm9zIGFyZSBw cm9jZXNzZWQuCisJICovCisJZ2xvYi0+bWluTG9ja1JlbGlkcyA9CisJCWJtc19hZGRfcmFuZ2Uo Z2xvYi0+bWluTG9ja1JlbGlkcywKKwkJCQkJICBydG9mZnNldCArIDEsCisJCQkJCSAgcnRvZmZz ZXQgKyBsaXN0X2xlbmd0aChyb290LT5wYXJzZS0+cnRhYmxlKSk7CisKIAkvKgogCSAqIEFkanVz dCBSVCBpbmRleGVzIG9mIFBsYW5Sb3dNYXJrcyBhbmQgYWRkIHRvIGZpbmFsIHJvd21hcmtzIGxp c3QKIAkgKi8KQEAgLTM1Miw2ICszNjIsNyBAQCBzZXRfcGxhbl9yZWZlcmVuY2VzKFBsYW5uZXJJ bmZvICpyb290LCBQbGFuICpwbGFuKQogCWZvcmVhY2ggKGxjLCByb290LT5wYXJ0UHJ1bmVJbmZv cykKIAl7CiAJCVBhcnRpdGlvblBydW5lSW5mbyAqcHJ1bmVpbmZvID0gbGZpcnN0KGxjKTsKKwkJ Qml0bWFwc2V0ICpsZWFmcGFydF9ydGlzID0gTlVMTDsKIAkJTGlzdENlbGwgICpsOwogCiAJCXBy dW5laW5mby0+cm9vdF9wYXJlbnRfcmVsaWRzID0KQEAgLTM2NCwxNSArMzc1LDUwIEBAIHNldF9w bGFuX3JlZmVyZW5jZXMoUGxhbm5lckluZm8gKnJvb3QsIFBsYW4gKnBsYW4pCiAJCQlmb3JlYWNo KGwyLCBwcnVuZV9pbmZvcykKIAkJCXsKIAkJCQlQYXJ0aXRpb25lZFJlbFBydW5lSW5mbyAqcGlu Zm8gPSBsZmlyc3QobDIpOworCQkJCWludAkJaTsKIAogCQkJCS8qIFJUIGluZGV4IG9mIHRoZSB0 YWJsZSB0byB3aGljaCB0aGUgcGluZm8gYmVsb25ncy4gKi8KIAkJCQlwaW5mby0+cnRpbmRleCAr PSBydG9mZnNldDsKKworCQkJCS8qIEFsc28gb2YgdGhlIGxlYWYgcGFydGl0aW9ucyB0aGF0IG1p Z2h0IGJlIHNjYW5uZWQuICovCisJCQkJZm9yIChpID0gMDsgaSA8IHBpbmZvLT5ucGFydHM7IGkr KykKKwkJCQl7CisJCQkJCWlmIChwaW5mby0+cnRpX21hcFtpXSA+IDAgJiYgcGluZm8tPnN1YnBs YW5fbWFwW2ldID49IDApCisJCQkJCXsKKwkJCQkJCXBpbmZvLT5ydGlfbWFwW2ldICs9IHJ0b2Zm c2V0OworCQkJCQkJbGVhZnBhcnRfcnRpcyA9IGJtc19hZGRfbWVtYmVyKGxlYWZwYXJ0X3J0aXMs CisJCQkJCQkJCQkJCQkJICAgcGluZm8tPnJ0aV9tYXBbaV0pOworCQkJCQl9CisJCQkJfQogCQkJ fQogCQl9CiAKKwkJaWYgKHBydW5laW5mby0+bmVlZHNfaW5pdF9wcnVuaW5nKQorCQl7CisJCQln bG9iLT5jb250YWluc0luaXRpYWxQcnVuaW5nID0gdHJ1ZTsKKworCQkJLyoKKwkJCSAqIERlbGV0 ZSB0aGUgbGVhZiBwYXJ0aXRpb24gUlRJcyBmcm9tIHRoZSBnbG9iYWwgc2V0IG9mIHJlbGF0aW9u cworCQkJICogdG8gYmUgbG9ja2VkIGJlZm9yZSBleGVjdXRpbmcgdGhlIHBsYW4uICBBY3F1aXJl RXhlY3V0b3JMb2NrcygpCisJCQkgKiB3aWxsIGZpbmQgdGhlIG9uZXMgdG8gYWRkIHRvIHRoZSBz ZXQgYWZ0ZXIgcGVyZm9ybWluZyBpbml0aWFsCisJCQkgKiBwcnVuaW5nLgorCQkJICovCisJCQln bG9iLT5taW5Mb2NrUmVsaWRzID0gYm1zX2RlbF9tZW1iZXJzKGdsb2ItPm1pbkxvY2tSZWxpZHMs CisJCQkJCQkJCQkJCQkgIGxlYWZwYXJ0X3J0aXMpOworCQl9CisKIAkJZ2xvYi0+cGFydFBydW5l SW5mb3MgPSBsYXBwZW5kKGdsb2ItPnBhcnRQcnVuZUluZm9zLCBwcnVuZWluZm8pOwogCX0KIAor CS8qCisJICogSXQgc2VlbXMgd29ydGggZG9pbmcgYSBibXNfY29weSgpIG9uIGdsb2ItPm1pbkxv Y2tSZWxpZHMgaWYgd2UgZGVsZXRlZAorCSAqIGJpdHMgZnJvbSBpdCBhYm92ZSB0byBnZXQgcmlk IG9mIGFueSBlbXB0eSB0YWlsIGJpdHMuICBJdCBzZWVtcyBiZXR0ZXIKKwkgKiBmb3IgdGhlIGxv b3Agb3ZlciB0aGlzIHNldCBpbiBBY3F1aXJlRXhlY3V0b3JMb2NrcygpIHRvIG5vdCBoYXZlIHRv IGdvCisJICogdGhyb3VnaCB0aG9zZSB1c2VsZXNzIGJpdCB3b3Jkcy4KKwkgKi8KKwlpZiAoZ2xv Yi0+Y29udGFpbnNJbml0aWFsUHJ1bmluZykKKwkJZ2xvYi0+bWluTG9ja1JlbGlkcyA9IGJtc19j b3B5KGdsb2ItPm1pbkxvY2tSZWxpZHMpOworCiAJcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvcGFydGl0aW9uaW5nL3BhcnRwcnVuZS5jIGIvc3JjL2JhY2tlbmQv cGFydGl0aW9uaW5nL3BhcnRwcnVuZS5jCmluZGV4IGQ0OGY2Nzg0YzEuLmQ1NTU2MzU0ZjcgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnRpdGlvbmluZy9wYXJ0cHJ1bmUuYworKysgYi9zcmMv YmFja2VuZC9wYXJ0aXRpb25pbmcvcGFydHBydW5lLmMKQEAgLTE0NCw3ICsxNDQsOSBAQCBzdGF0 aWMgTGlzdCAqbWFrZV9wYXJ0aXRpb25lZHJlbF9wcnVuZWluZm8oUGxhbm5lckluZm8gKnJvb3Qs CiAJCQkJCQkJCQkJICAgTGlzdCAqcHJ1bmVxdWFsLAogCQkJCQkJCQkJCSAgIEJpdG1hcHNldCAq cGFydHJlbGlkcywKIAkJCQkJCQkJCQkgICBpbnQgKnJlbGlkX3N1YnBsYW5fbWFwLAotCQkJCQkJ CQkJCSAgIEJpdG1hcHNldCAqKm1hdGNoZWRzdWJwbGFucyk7CisJCQkJCQkJCQkJICAgQml0bWFw c2V0ICoqbWF0Y2hlZHN1YnBsYW5zLAorCQkJCQkJCQkJCSAgIGJvb2wgKm5lZWRzX2luaXRfcHJ1 bmluZywKKwkJCQkJCQkJCQkgICBib29sICpuZWVkc19leGVjX3BydW5pbmcpOwogc3RhdGljIHZv aWQgZ2VuX3BhcnRwcnVuZV9zdGVwcyhSZWxPcHRJbmZvICpyZWwsIExpc3QgKmNsYXVzZXMsCiAJ CQkJCQkJCVBhcnRDbGF1c2VUYXJnZXQgdGFyZ2V0LAogCQkJCQkJCQlHZW5lcmF0ZVBydW5pbmdT dGVwc0NvbnRleHQgKmNvbnRleHQpOwpAQCAtMjM0LDYgKzIzNiw4IEBAIG1ha2VfcGFydGl0aW9u X3BydW5laW5mbyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcGFyZW50cmVsLAogCWlu dAkJICAgKnJlbGlkX3N1YnBsYW5fbWFwOwogCUxpc3RDZWxsICAgKmxjOwogCWludAkJCWk7CisJ Ym9vbAkJbmVlZHNfaW5pdF9wcnVuaW5nID0gZmFsc2U7CisJYm9vbAkJbmVlZHNfZXhlY19wcnVu aW5nID0gZmFsc2U7CiAKIAkvKgogCSAqIFNjYW4gdGhlIHN1YnBhdGhzIHRvIHNlZSB3aGljaCBv bmVzIGFyZSBzY2FucyBvZiBwYXJ0aXRpb24gY2hpbGQKQEAgLTMxMywxMiArMzE3LDE2IEBAIG1h a2VfcGFydGl0aW9uX3BydW5laW5mbyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcGFy ZW50cmVsLAogCQlCaXRtYXBzZXQgICpwYXJ0cmVsaWRzID0gKEJpdG1hcHNldCAqKSBsZmlyc3Qo bGMpOwogCQlMaXN0CSAgICpwaW5mb2xpc3Q7CiAJCUJpdG1hcHNldCAgKm1hdGNoZWRzdWJwbGFu cyA9IE5VTEw7CisJCWJvb2wJCXBhcnRyZWxfbmVlZHNfaW5pdF9wcnVuaW5nOworCQlib29sCQlw YXJ0cmVsX25lZWRzX2V4ZWNfcHJ1bmluZzsKIAogCQlwaW5mb2xpc3QgPSBtYWtlX3BhcnRpdGlv bmVkcmVsX3BydW5laW5mbyhyb290LCBwYXJlbnRyZWwsCiAJCQkJCQkJCQkJCQkgIHBydW5lcXVh bCwKIAkJCQkJCQkJCQkJCSAgcGFydHJlbGlkcywKIAkJCQkJCQkJCQkJCSAgcmVsaWRfc3VicGxh bl9tYXAsCi0JCQkJCQkJCQkJCQkgICZtYXRjaGVkc3VicGxhbnMpOworCQkJCQkJCQkJCQkJICAm bWF0Y2hlZHN1YnBsYW5zLAorCQkJCQkJCQkJCQkJICAmcGFydHJlbF9uZWVkc19pbml0X3BydW5p bmcsCisJCQkJCQkJCQkJCQkgICZwYXJ0cmVsX25lZWRzX2V4ZWNfcHJ1bmluZyk7CiAKIAkJLyog V2hlbiBwcnVuaW5nIGlzIHBvc3NpYmxlLCByZWNvcmQgdGhlIG1hdGNoZWQgc3VicGxhbnMgKi8K IAkJaWYgKHBpbmZvbGlzdCAhPSBOSUwpCkBAIC0zMjcsNiArMzM1LDkgQEAgbWFrZV9wYXJ0aXRp b25fcHJ1bmVpbmZvKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpwYXJlbnRyZWwsCiAJ CQlhbGxtYXRjaGVkc3VicGxhbnMgPSBibXNfam9pbihtYXRjaGVkc3VicGxhbnMsCiAJCQkJCQkJ CQkJICBhbGxtYXRjaGVkc3VicGxhbnMpOwogCQl9CisKKwkJbmVlZHNfaW5pdF9wcnVuaW5nIHw9 IHBhcnRyZWxfbmVlZHNfaW5pdF9wcnVuaW5nOworCQluZWVkc19leGVjX3BydW5pbmcgfD0gcGFy dHJlbF9uZWVkc19leGVjX3BydW5pbmc7CiAJfQogCiAJcGZyZWUocmVsaWRfc3VicGxhbl9tYXAp OwpAQCAtMzQyLDYgKzM1Myw4IEBAIG1ha2VfcGFydGl0aW9uX3BydW5laW5mbyhQbGFubmVySW5m byAqcm9vdCwgUmVsT3B0SW5mbyAqcGFyZW50cmVsLAogCXBydW5laW5mbyA9IG1ha2VOb2RlKFBh cnRpdGlvblBydW5lSW5mbyk7CiAJcHJ1bmVpbmZvLT5yb290X3BhcmVudF9yZWxpZHMgPSBwYXJl bnRyZWwtPnJlbGlkczsKIAlwcnVuZWluZm8tPnBydW5lX2luZm9zID0gcHJ1bmVyZWxpbmZvczsK KwlwcnVuZWluZm8tPm5lZWRzX2luaXRfcHJ1bmluZyA9IG5lZWRzX2luaXRfcHJ1bmluZzsKKwlw cnVuZWluZm8tPm5lZWRzX2V4ZWNfcHJ1bmluZyA9IG5lZWRzX2V4ZWNfcHJ1bmluZzsKIAogCS8q CiAJICogU29tZSBzdWJwbGFucyBtYXkgbm90IGJlbG9uZyB0byBhbnkgb2YgdGhlIGlkZW50aWZp ZWQgcGFydGl0aW9uZWQgcmVscy4KQEAgLTQ0MiwxMyArNDU1LDE4IEBAIGFkZF9wYXJ0X3JlbGlk cyhMaXN0ICphbGxwYXJ0cmVsaWRzLCBCaXRtYXBzZXQgKnBhcnRyZWxpZHMpCiAgKiBJZiB3ZSBj YW5ub3QgZmluZCBhbnkgdXNlZnVsIHJ1bi10aW1lIHBydW5pbmcgc3RlcHMsIHJldHVybiBOSUwu CiAgKiBIb3dldmVyLCBvbiBzdWNjZXNzLCBlYWNoIHJlbCBpZGVudGlmaWVkIGluIHBhcnRyZWxp ZHMgd2lsbCBoYXZlCiAgKiBhbiBlbGVtZW50IGluIHRoZSByZXN1bHQgbGlzdCwgZXZlbiBpZiBz b21lIG9mIHRoZW0gYXJlIHVzZWxlc3MuCisgKiAqbmVlZHNfaW5pdF9wcnVuaW5nIGFuZCAqbmVl ZHNfZXhlY19wcnVuaW5nIGFyZSBzZXQgdG8gaW5kaWNhdGUgdGhhdCB0aGUKKyAqIHJldHVybmVk IFBhcnRpdGlvbmVkUmVsUHJ1bmVJbmZvcyBjb250YWlucyBwcnVuaW5nIHN0ZXBzIHRoYXQgY2Fu IGJlCisgKiBwZXJmb3JtZWQgYmVmb3JlIGFuZCBhZnRlciBleGVjdXRpb24gYmVnaW5zLCByZXNw ZWN0aXZlbHkuCiAgKi8KIHN0YXRpYyBMaXN0ICoKIG1ha2VfcGFydGl0aW9uZWRyZWxfcHJ1bmVp bmZvKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpwYXJlbnRyZWwsCiAJCQkJCQkJICBM aXN0ICpwcnVuZXF1YWwsCiAJCQkJCQkJICBCaXRtYXBzZXQgKnBhcnRyZWxpZHMsCiAJCQkJCQkJ ICBpbnQgKnJlbGlkX3N1YnBsYW5fbWFwLAotCQkJCQkJCSAgQml0bWFwc2V0ICoqbWF0Y2hlZHN1 YnBsYW5zKQorCQkJCQkJCSAgQml0bWFwc2V0ICoqbWF0Y2hlZHN1YnBsYW5zLAorCQkJCQkJCSAg Ym9vbCAqbmVlZHNfaW5pdF9wcnVuaW5nLAorCQkJCQkJCSAgYm9vbCAqbmVlZHNfZXhlY19wcnVu aW5nKQogewogCVJlbE9wdEluZm8gKnRhcmdldHBhcnQgPSBOVUxMOwogCUxpc3QJICAgKnBpbmZv bGlzdCA9IE5JTDsKQEAgLTQ1OSw2ICs0NzcsMTAgQEAgbWFrZV9wYXJ0aXRpb25lZHJlbF9wcnVu ZWluZm8oUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnBhcmVudHJlbCwKIAlpbnQJCQly dGk7CiAJaW50CQkJaTsKIAorCS8qIFdpbGwgZmluZCBvdXQgYmVsb3cuICovCisJKm5lZWRzX2lu aXRfcHJ1bmluZyA9IGZhbHNlOworCSpuZWVkc19leGVjX3BydW5pbmcgPSBmYWxzZTsKKwogCS8q CiAJICogRXhhbWluZSBlYWNoIHBhcnRpdGlvbmVkIHJlbCwgY29uc3RydWN0aW5nIGEgdGVtcG9y YXJ5IGFycmF5IHRvIG1hcAogCSAqIGZyb20gcGxhbm5lciByZWxpZHMgdG8gaW5kZXggb2YgdGhl IHBhcnRpdGlvbmVkIHJlbCwgYW5kIGJ1aWxkaW5nIGEKQEAgLTU0Niw2ICs1NjgsOSBAQCBtYWtl X3BhcnRpdGlvbmVkcmVsX3BydW5laW5mbyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAq cGFyZW50cmVsLAogCQkgKiBleGVjdXRvciBwZXItc2NhbiBwcnVuaW5nIHN0ZXBzLiAgVGhpcyBm aXJzdCBwYXNzIGNyZWF0ZXMgc3RhcnR1cAogCQkgKiBwcnVuaW5nIHN0ZXBzIGFuZCBkZXRlY3Rz IHdoZXRoZXIgdGhlcmUncyBhbnkgcG9zc2libHktdXNlZnVsIHF1YWxzCiAJCSAqIHRoYXQgd291 bGQgcmVxdWlyZSBwZXItc2NhbiBwcnVuaW5nLgorCQkgKgorCQkgKiBJbiB0aGUgZmlyc3QgcGFz cywgd2Ugbm90ZSB3aGV0aGVyIHRoZSAybmQgcGFzcyBpcyBuZWNlc3NhcnkgYnkKKwkJICogbm90 aW5nIHRoZSBwcmVzZW5jZSBvZiBFWEVDIHBhcmFtZXRlcnMuCiAJCSAqLwogCQlnZW5fcGFydHBy dW5lX3N0ZXBzKHN1YnBhcnQsIHBhcnRwcnVuZXF1YWwsIFBBUlRUQVJHRVRfSU5JVElBTCwKIAkJ CQkJCQkmY29udGV4dCk7CkBAIC02MjAsNiArNjQ1LDEyIEBAIG1ha2VfcGFydGl0aW9uZWRyZWxf cHJ1bmVpbmZvKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpwYXJlbnRyZWwsCiAJCXBp bmZvLT5leGVjcGFyYW1pZHMgPSBleGVjcGFyYW1pZHM7CiAJCS8qIFJlbWFpbmluZyBmaWVsZHMg d2lsbCBiZSBmaWxsZWQgaW4gdGhlIG5leHQgbG9vcCAqLwogCisJCS8qIHJlY29yZCB3aGljaCB0 eXBlcyBvZiBwcnVuaW5nIHN0ZXBzIHdlJ3ZlIHNlZW4gc28gZmFyICovCisJCWlmIChpbml0aWFs X3BydW5pbmdfc3RlcHMgIT0gTklMKQorCQkJKm5lZWRzX2luaXRfcHJ1bmluZyA9IHRydWU7CisJ CWlmIChleGVjX3BydW5pbmdfc3RlcHMgIT0gTklMKQorCQkJKm5lZWRzX2V4ZWNfcHJ1bmluZyA9 IHRydWU7CisKIAkJcGluZm9saXN0ID0gbGFwcGVuZChwaW5mb2xpc3QsIHBpbmZvKTsKIAl9CiAK QEAgLTY0Nyw2ICs2NzgsNyBAQCBtYWtlX3BhcnRpdGlvbmVkcmVsX3BydW5laW5mbyhQbGFubmVy SW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcGFyZW50cmVsLAogCQlpbnQJCSAgICpzdWJwbGFuX21h cDsKIAkJaW50CQkgICAqc3VicGFydF9tYXA7CiAJCU9pZAkJICAgKnJlbGlkX21hcDsKKwkJSW5k ZXgJICAgKnJ0aV9tYXA7CiAKIAkJLyoKIAkJICogQ29uc3RydWN0IHRoZSBzdWJwbGFuIGFuZCBz dWJwYXJ0IG1hcHMgZm9yIHRoaXMgcGFydGl0aW9uaW5nIGxldmVsLgpAQCAtNjU5LDYgKzY5MSw3 IEBAIG1ha2VfcGFydGl0aW9uZWRyZWxfcHJ1bmVpbmZvKFBsYW5uZXJJbmZvICpyb290LCBSZWxP cHRJbmZvICpwYXJlbnRyZWwsCiAJCXN1YnBhcnRfbWFwID0gKGludCAqKSBwYWxsb2MobnBhcnRz ICogc2l6ZW9mKGludCkpOwogCQltZW1zZXQoc3VicGFydF9tYXAsIC0xLCBucGFydHMgKiBzaXpl b2YoaW50KSk7CiAJCXJlbGlkX21hcCA9IChPaWQgKikgcGFsbG9jMChucGFydHMgKiBzaXplb2Yo T2lkKSk7CisJCXJ0aV9tYXAgPSAoSW5kZXggKikgcGFsbG9jMChucGFydHMgKiBzaXplb2YoSW5k ZXgpKTsKIAkJcHJlc2VudF9wYXJ0cyA9IE5VTEw7CiAKIAkJaSA9IC0xOwpAQCAtNjczLDYgKzcw Niw3IEBAIG1ha2VfcGFydGl0aW9uZWRyZWxfcHJ1bmVpbmZvKFBsYW5uZXJJbmZvICpyb290LCBS ZWxPcHRJbmZvICpwYXJlbnRyZWwsCiAJCQlzdWJwbGFuX21hcFtpXSA9IHN1YnBsYW5pZHggPSBy ZWxpZF9zdWJwbGFuX21hcFtwYXJ0cmVsLT5yZWxpZF0gLSAxOwogCQkJc3VicGFydF9tYXBbaV0g PSBzdWJwYXJ0aWR4ID0gcmVsaWRfc3VicGFydF9tYXBbcGFydHJlbC0+cmVsaWRdIC0gMTsKIAkJ CXJlbGlkX21hcFtpXSA9IHBsYW5uZXJfcnRfZmV0Y2gocGFydHJlbC0+cmVsaWQsIHJvb3QpLT5y ZWxpZDsKKwkJCXJ0aV9tYXBbaV0gPSBwYXJ0cmVsLT5yZWxpZDsKIAkJCWlmIChzdWJwbGFuaWR4 ID49IDApCiAJCQl7CiAJCQkJcHJlc2VudF9wYXJ0cyA9IGJtc19hZGRfbWVtYmVyKHByZXNlbnRf cGFydHMsIGkpOwpAQCAtNjk3LDYgKzczMSw3IEBAIG1ha2VfcGFydGl0aW9uZWRyZWxfcHJ1bmVp bmZvKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpwYXJlbnRyZWwsCiAJCXBpbmZvLT5z dWJwbGFuX21hcCA9IHN1YnBsYW5fbWFwOwogCQlwaW5mby0+c3VicGFydF9tYXAgPSBzdWJwYXJ0 X21hcDsKIAkJcGluZm8tPnJlbGlkX21hcCA9IHJlbGlkX21hcDsKKwkJcGluZm8tPnJ0aV9tYXAg PSBydGlfbWFwOwogCX0KIAogCXBmcmVlKHJlbGlkX3N1YnBhcnRfbWFwKTsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYyBiL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMu YwppbmRleCAzMDgyMDkzZDFlLi45NWFiMWQwZWVmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC90 Y29wL3Bvc3RncmVzLmMKKysrIGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCkBAIC0xNTk4 LDYgKzE1OTgsNyBAQCBleGVjX2JpbmRfbWVzc2FnZShTdHJpbmdJbmZvIGlucHV0X21lc3NhZ2Up CiAJaW50MTYJICAgKnJmb3JtYXRzID0gTlVMTDsKIAlDYWNoZWRQbGFuU291cmNlICpwc3JjOwog CUNhY2hlZFBsYW4gKmNwbGFuOworCUxpc3QJICAgKnBhcnRfcHJ1bmVfcmVzdWx0c19saXN0Owog CVBvcnRhbAkJcG9ydGFsOwogCWNoYXIJICAgKnF1ZXJ5X3N0cmluZzsKIAljaGFyCSAgICpzYXZl ZF9zdG10X25hbWU7CkBAIC0xOTcyLDcgKzE5NzMsOSBAQCBleGVjX2JpbmRfbWVzc2FnZShTdHJp bmdJbmZvIGlucHV0X21lc3NhZ2UpCiAJICogd2lsbCBiZSBnZW5lcmF0ZWQgaW4gTWVzc2FnZUNv bnRleHQuICBUaGUgcGxhbiByZWZjb3VudCB3aWxsIGJlCiAJICogYXNzaWduZWQgdG8gdGhlIFBv cnRhbCwgc28gaXQgd2lsbCBiZSByZWxlYXNlZCBhdCBwb3J0YWwgZGVzdHJ1Y3Rpb24uCiAJICov Ci0JY3BsYW4gPSBHZXRDYWNoZWRQbGFuKHBzcmMsIHBhcmFtcywgTlVMTCwgTlVMTCk7CisJY3Bs YW4gPSBHZXRDYWNoZWRQbGFuKHBzcmMsIHBhcmFtcywgTlVMTCwgTlVMTCwgJnBhcnRfcHJ1bmVf cmVzdWx0c19saXN0KTsKKwlBc3NlcnQobGlzdF9sZW5ndGgoY3BsYW4tPnN0bXRfbGlzdCkgPT0K KwkJICAgbGlzdF9sZW5ndGgocGFydF9wcnVuZV9yZXN1bHRzX2xpc3QpKTsKIAogCS8qCiAJICog Tm93IHdlIGNhbiBkZWZpbmUgdGhlIHBvcnRhbC4KQEAgLTE5ODcsNiArMTk5MCw5IEBAIGV4ZWNf YmluZF9tZXNzYWdlKFN0cmluZ0luZm8gaW5wdXRfbWVzc2FnZSkKIAkJCQkJICBjcGxhbi0+c3Rt dF9saXN0LAogCQkJCQkgIGNwbGFuKTsKIAorCS8qIENvcHkgTGlzdHMgb2YgUGFydGl0aW9uUHJ1 bmVSZXN1bHRzIGludG8gdGhlIHBvcnRhbCdzIGNvbnRleHQuICovCisJUG9ydGFsU3RvcmVQYXJ0 aXRpb25QcnVuZVJlc3VsdHMocG9ydGFsLCBwYXJ0X3BydW5lX3Jlc3VsdHNfbGlzdCk7CisKIAkv KiBEb25lIHdpdGggdGhlIHNuYXBzaG90IHVzZWQgZm9yIHBhcmFtZXRlciBJL08gYW5kIHBhcnNp bmcvcGxhbm5pbmcgKi8KIAlpZiAoc25hcHNob3Rfc2V0KQogCQlQb3BBY3RpdmVTbmFwc2hvdCgp OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC9wcXVlcnkuYyBiL3NyYy9iYWNrZW5kL3Rj b3AvcHF1ZXJ5LmMKaW5kZXggNTJlMmRiNjQ1Mi4uMjgwZWQ3ZDIzOSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvdGNvcC9wcXVlcnkuYworKysgYi9zcmMvYmFja2VuZC90Y29wL3BxdWVyeS5jCkBA IC0zNSw3ICszNSw3IEBACiBQb3J0YWwJCUFjdGl2ZVBvcnRhbCA9IE5VTEw7CiAKIAotc3RhdGlj IHZvaWQgUHJvY2Vzc1F1ZXJ5KFBsYW5uZWRTdG10ICpwbGFuLAorc3RhdGljIHZvaWQgUHJvY2Vz c1F1ZXJ5KFBsYW5uZWRTdG10ICpwbGFuLCBMaXN0ICpwYXJ0X3BydW5lX3Jlc3VsdHMsCiAJCQkJ CQkgY29uc3QgY2hhciAqc291cmNlVGV4dCwKIAkJCQkJCSBQYXJhbUxpc3RJbmZvIHBhcmFtcywK IAkJCQkJCSBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudiwKQEAgLTY1LDYgKzY1LDcgQEAgc3Rh dGljIHZvaWQgRG9Qb3J0YWxSZXdpbmQoUG9ydGFsIHBvcnRhbCk7CiAgKi8KIFF1ZXJ5RGVzYyAq CiBDcmVhdGVRdWVyeURlc2MoUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LAorCQkJCUxpc3QgKnBh cnRfcHJ1bmVfcmVzdWx0cywKIAkJCQljb25zdCBjaGFyICpzb3VyY2VUZXh0LAogCQkJCVNuYXBz aG90IHNuYXBzaG90LAogCQkJCVNuYXBzaG90IGNyb3NzY2hlY2tfc25hcHNob3QsCkBAIC03Nyw2 ICs3OCw4IEBAIENyZWF0ZVF1ZXJ5RGVzYyhQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsCiAKIAlx ZC0+b3BlcmF0aW9uID0gcGxhbm5lZHN0bXQtPmNvbW1hbmRUeXBlOwkvKiBvcGVyYXRpb24gKi8K IAlxZC0+cGxhbm5lZHN0bXQgPSBwbGFubmVkc3RtdDsJLyogcGxhbiAqLworCXFkLT5wYXJ0X3By dW5lX3Jlc3VsdHMgPSBwYXJ0X3BydW5lX3Jlc3VsdHM7IC8qIEV4ZWN1dG9yRG9Jbml0aWFsUHJ1 bmluZygpCisJCQkJCQkJCQkJCQkgICogb3V0cHV0IGZvciBwbGFuICovCiAJcWQtPnNvdXJjZVRl eHQgPSBzb3VyY2VUZXh0OwkvKiBxdWVyeSB0ZXh0ICovCiAJcWQtPnNuYXBzaG90ID0gUmVnaXN0 ZXJTbmFwc2hvdChzbmFwc2hvdCk7CS8qIHNuYXBzaG90ICovCiAJLyogUkkgY2hlY2sgc25hcHNo b3QgKi8KQEAgLTEyMiw2ICsxMjUsNyBAQCBGcmVlUXVlcnlEZXNjKFF1ZXJ5RGVzYyAqcWRlc2Mp CiAgKgkJUE9SVEFMX09ORV9SRVRVUk5JTkcsIG9yIFBPUlRBTF9PTkVfTU9EX1dJVEggcG9ydGFs CiAgKgogICoJcGxhbjogdGhlIHBsYW4gdHJlZSBmb3IgdGhlIHF1ZXJ5CisgKglwYXJ0X3BydW5l X3Jlc3VsdHM6IEV4ZWN1dG9yRG9Jbml0aWFsUHJ1bmluZygpIG91dHB1dCBmb3IgdGhlIFBsYW5u ZWRTdG10CiAgKglzb3VyY2VUZXh0OiB0aGUgc291cmNlIHRleHQgb2YgdGhlIHF1ZXJ5CiAgKglw YXJhbXM6IGFueSBwYXJhbWV0ZXJzIG5lZWRlZAogICoJZGVzdDogd2hlcmUgdG8gc2VuZCByZXN1 bHRzCkBAIC0xMzQsNiArMTM4LDcgQEAgRnJlZVF1ZXJ5RGVzYyhRdWVyeURlc2MgKnFkZXNjKQog ICovCiBzdGF0aWMgdm9pZAogUHJvY2Vzc1F1ZXJ5KFBsYW5uZWRTdG10ICpwbGFuLAorCQkJIExp c3QgKnBhcnRfcHJ1bmVfcmVzdWx0cywKIAkJCSBjb25zdCBjaGFyICpzb3VyY2VUZXh0LAogCQkJ IFBhcmFtTGlzdEluZm8gcGFyYW1zLAogCQkJIFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52LApA QCAtMTQ1LDcgKzE1MCw3IEBAIFByb2Nlc3NRdWVyeShQbGFubmVkU3RtdCAqcGxhbiwKIAkvKgog CSAqIENyZWF0ZSB0aGUgUXVlcnlEZXNjIG9iamVjdAogCSAqLwotCXF1ZXJ5RGVzYyA9IENyZWF0 ZVF1ZXJ5RGVzYyhwbGFuLCBzb3VyY2VUZXh0LAorCXF1ZXJ5RGVzYyA9IENyZWF0ZVF1ZXJ5RGVz YyhwbGFuLCBwYXJ0X3BydW5lX3Jlc3VsdHMsIHNvdXJjZVRleHQsCiAJCQkJCQkJCUdldEFjdGl2 ZVNuYXBzaG90KCksIEludmFsaWRTbmFwc2hvdCwKIAkJCQkJCQkJZGVzdCwgcGFyYW1zLCBxdWVy eUVudiwgMCk7CiAKQEAgLTQ5MSw4ICs0OTYsMTMgQEAgUG9ydGFsU3RhcnQoUG9ydGFsIHBvcnRh bCwgUGFyYW1MaXN0SW5mbyBwYXJhbXMsCiAJCQkJLyoKIAkJCQkgKiBDcmVhdGUgUXVlcnlEZXNj IGluIHBvcnRhbCdzIGNvbnRleHQ7IGZvciB0aGUgbW9tZW50LCBzZXQKIAkJCQkgKiB0aGUgZGVz dGluYXRpb24gdG8gRGVzdE5vbmUuCisJCQkJICoKKwkJCQkgKiBUaGVyZSBpcyBubyBQYXJ0aXRp b25QcnVuZVJlc3VsdCB1bmxlc3MgdGhlIFBsYW5uZWRTdG10IGlzCisJCQkJICogZnJvbSBhIENh Y2hlZFBsYW4uCiAJCQkJICovCiAJCQkJcXVlcnlEZXNjID0gQ3JlYXRlUXVlcnlEZXNjKGxpbml0 aWFsX25vZGUoUGxhbm5lZFN0bXQsIHBvcnRhbC0+c3RtdHMpLAorCQkJCQkJCQkJCQlwb3J0YWwt PnBhcnRfcHJ1bmVfcmVzdWx0c19saXN0ID09IE5JTCA/IE5JTCA6CisJCQkJCQkJCQkJCWxpbml0 aWFsKHBvcnRhbC0+cGFydF9wcnVuZV9yZXN1bHRzX2xpc3QpLAogCQkJCQkJCQkJCQlwb3J0YWwt PnNvdXJjZVRleHQsCiAJCQkJCQkJCQkJCUdldEFjdGl2ZVNuYXBzaG90KCksCiAJCQkJCQkJCQkJ CUludmFsaWRTbmFwc2hvdCwKQEAgLTEyMjUsNiArMTIzNSw4IEBAIFBvcnRhbFJ1bk11bHRpKFBv cnRhbCBwb3J0YWwsCiAKIAkJaWYgKHBzdG10LT51dGlsaXR5U3RtdCA9PSBOVUxMKQogCQl7CisJ CQlMaXN0ICpwYXJ0X3BydW5lX3Jlc3VsdHMgPSBOSUw7CisKIAkJCS8qCiAJCQkgKiBwcm9jZXNz IGEgcGxhbm5hYmxlIHF1ZXJ5LgogCQkJICovCkBAIC0xMjcxLDEwICsxMjgzLDE4IEBAIFBvcnRh bFJ1bk11bHRpKFBvcnRhbCBwb3J0YWwsCiAJCQllbHNlCiAJCQkJVXBkYXRlQWN0aXZlU25hcHNo b3RDb21tYW5kSWQoKTsKIAorCQkJLyoKKwkJCSAqIERldGVybWluZSBpZiB0aGVyZSdzIGEgY29y cmVzcG9uZGluZyBMaXN0IG9mIFBhcnRpdGlvblBydW5lUmVzdWx0CisJCQkgKiBmb3IgdGhpcyBQ bGFubmVkU3RtdC4KKwkJCSAqLworCQkJaWYgKHBvcnRhbC0+cGFydF9wcnVuZV9yZXN1bHRzX2xp c3QgIT0gTklMKQorCQkJCXBhcnRfcHJ1bmVfcmVzdWx0cyA9IGxpc3RfbnRoKHBvcnRhbC0+cGFy dF9wcnVuZV9yZXN1bHRzX2xpc3QsCisJCQkJCQkJCQkJCSAgZm9yZWFjaF9jdXJyZW50X2luZGV4 KHN0bXRsaXN0X2l0ZW0pKTsKKwogCQkJaWYgKHBzdG10LT5jYW5TZXRUYWcpCiAJCQl7CiAJCQkJ Lyogc3RhdGVtZW50IGNhbiBzZXQgdGFnIHN0cmluZyAqLwotCQkJCVByb2Nlc3NRdWVyeShwc3Rt dCwKKwkJCQlQcm9jZXNzUXVlcnkocHN0bXQsIHBhcnRfcHJ1bmVfcmVzdWx0cywKIAkJCQkJCQkg cG9ydGFsLT5zb3VyY2VUZXh0LAogCQkJCQkJCSBwb3J0YWwtPnBvcnRhbFBhcmFtcywKIAkJCQkJ CQkgcG9ydGFsLT5xdWVyeUVudiwKQEAgLTEyODMsNyArMTMwMyw3IEBAIFBvcnRhbFJ1bk11bHRp KFBvcnRhbCBwb3J0YWwsCiAJCQllbHNlCiAJCQl7CiAJCQkJLyogc3RtdCBhZGRlZCBieSByZXdy aXRlIGNhbm5vdCBzZXQgdGFnICovCi0JCQkJUHJvY2Vzc1F1ZXJ5KHBzdG10LAorCQkJCVByb2Nl c3NRdWVyeShwc3RtdCwgcGFydF9wcnVuZV9yZXN1bHRzLAogCQkJCQkJCSBwb3J0YWwtPnNvdXJj ZVRleHQsCiAJCQkJCQkJIHBvcnRhbC0+cG9ydGFsUGFyYW1zLAogCQkJCQkJCSBwb3J0YWwtPnF1 ZXJ5RW52LApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcGxhbmNhY2hlLmMg Yi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9wbGFuY2FjaGUuYwppbmRleCBjYzk0MzIwNWQzLi5h ZjZmYWU2ZTNiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9wbGFuY2FjaGUu YworKysgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9wbGFuY2FjaGUuYwpAQCAtOTksMTQgKzk5 LDE5IEBAIHN0YXRpYyBkbGlzdF9oZWFkIGNhY2hlZF9leHByZXNzaW9uX2xpc3QgPSBETElTVF9T VEFUSUNfSU5JVChjYWNoZWRfZXhwcmVzc2lvbl9sCiBzdGF0aWMgdm9pZCBSZWxlYXNlR2VuZXJp Y1BsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSk7CiBzdGF0aWMgTGlzdCAqUmV2YWxp ZGF0ZUNhY2hlZFF1ZXJ5KENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsCiAJCQkJCQkJCSAg IFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52KTsKLXN0YXRpYyBib29sIENoZWNrQ2FjaGVkUGxh bihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlKTsKK3N0YXRpYyBib29sIENoZWNrQ2FjaGVk UGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlLCBQYXJhbUxpc3RJbmZvIGJvdW5kUGFy YW1zLAorCQkJCQkJCUxpc3QgKipwYXJ0X3BydW5lX3Jlc3VsdHNfbGlzdCk7CiBzdGF0aWMgQ2Fj aGVkUGxhbiAqQnVpbGRDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsIExp c3QgKnFsaXN0LAotCQkJCQkJCQkgICBQYXJhbUxpc3RJbmZvIGJvdW5kUGFyYW1zLCBRdWVyeUVu dmlyb25tZW50ICpxdWVyeUVudik7CisJCQkJCQkJCSAgIFBhcmFtTGlzdEluZm8gYm91bmRQYXJh bXMsIFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52LAorCQkJCQkJCQkgICBMaXN0ICoqcGFydF9w cnVuZV9yZXN1bHRzX2xpc3QpOwogc3RhdGljIGJvb2wgY2hvb3NlX2N1c3RvbV9wbGFuKENhY2hl ZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsCiAJCQkJCQkJICAgUGFyYW1MaXN0SW5mbyBib3VuZFBh cmFtcyk7CiBzdGF0aWMgZG91YmxlIGNhY2hlZF9wbGFuX2Nvc3QoQ2FjaGVkUGxhbiAqcGxhbiwg Ym9vbCBpbmNsdWRlX3BsYW5uZXIpOwogc3RhdGljIFF1ZXJ5ICpRdWVyeUxpc3RHZXRQcmltYXJ5 U3RtdChMaXN0ICpzdG10cyk7Ci1zdGF0aWMgdm9pZCBBY3F1aXJlRXhlY3V0b3JMb2NrcyhMaXN0 ICpzdG10X2xpc3QsIGJvb2wgYWNxdWlyZSk7CitzdGF0aWMgdm9pZCBBY3F1aXJlRXhlY3V0b3JM b2NrcyhMaXN0ICpzdG10X2xpc3QsIFBhcmFtTGlzdEluZm8gYm91bmRQYXJhbXMsCisJCQkJCQkJ CSBMaXN0ICoqcGFydF9wcnVuZV9yZXN1bHRzX2xpc3QsCisJCQkJCQkJCSBMaXN0ICoqbG9ja2Vk UmVsaWRzX3Blcl9zdG10KTsKK3N0YXRpYyB2b2lkIFJlbGVhc2VFeGVjdXRvckxvY2tzKExpc3Qg KnN0bXRfbGlzdCwgTGlzdCAqbG9ja2VkUmVsaWRzX3Blcl9zdG10KTsKIHN0YXRpYyB2b2lkIEFj cXVpcmVQbGFubmVyTG9ja3MoTGlzdCAqc3RtdF9saXN0LCBib29sIGFjcXVpcmUpOwogc3RhdGlj IHZvaWQgU2NhblF1ZXJ5Rm9yTG9ja3MoUXVlcnkgKnBhcnNldHJlZSwgYm9vbCBhY3F1aXJlKTsK IHN0YXRpYyBib29sIFNjYW5RdWVyeVdhbGtlcihOb2RlICpub2RlLCBib29sICphY3F1aXJlKTsK QEAgLTc4Miw2ICs3ODcsMjYgQEAgUmV2YWxpZGF0ZUNhY2hlZFF1ZXJ5KENhY2hlZFBsYW5Tb3Vy Y2UgKnBsYW5zb3VyY2UsCiAJcmV0dXJuIHRsaXN0OwogfQogCisvKiAKKyAqIEZyZWVQYXJ0aXRp b25QcnVuZVJlc3VsdHMKKyAqCQlGcmVlcyB0aGUgTGlzdCBvZiBMaXN0cyBvZiBQYXJ0aXRpb25Q cnVuZVJlc3VsdHMgZm9yIENoZWNrQ2FjaGVkUGxhbigpCisgKi8KK3N0YXRpYyB2b2lkCitGcmVl UGFydGl0aW9uUHJ1bmVSZXN1bHRzKExpc3QgKnBhcnRfcHJ1bmVfcmVzdWx0c19saXN0KQorewor CUxpc3RDZWxsICpsYzsKKworCWZvcmVhY2gobGMsIHBhcnRfcHJ1bmVfcmVzdWx0c19saXN0KQor CXsKKwkJTGlzdCAqcGFydF9wcnVuZV9yZXN1bHRzID0gbGZpcnN0KGxjKTsKKworCQkvKiBGcmVl IGJvdGggdGhlIFBhcnRpdGlvblBydW5lUmVzdWx0cyBhbmQgdGhlIGNvbnRhaW5pbmcgTGlzdC4g Ki8KKwkJbGlzdF9mcmVlX2RlZXAocGFydF9wcnVuZV9yZXN1bHRzKTsKKwl9CisKKwlsaXN0X2Zy ZWUocGFydF9wcnVuZV9yZXN1bHRzX2xpc3QpOworfQorCiAvKgogICogQ2hlY2tDYWNoZWRQbGFu OiBzZWUgaWYgdGhlIENhY2hlZFBsYW5Tb3VyY2UncyBnZW5lcmljIHBsYW4gaXMgdmFsaWQuCiAg KgpAQCAtNzkwLDE1ICs4MTUsMjAgQEAgUmV2YWxpZGF0ZUNhY2hlZFF1ZXJ5KENhY2hlZFBsYW5T b3VyY2UgKnBsYW5zb3VyY2UsCiAgKgogICogT24gYSAidHJ1ZSIgcmV0dXJuLCB3ZSBoYXZlIGFj cXVpcmVkIHRoZSBsb2NrcyBuZWVkZWQgdG8gcnVuIHRoZSBwbGFuLgogICogKFdlIG11c3QgZG8g dGhpcyBmb3IgdGhlICJ0cnVlIiByZXN1bHQgdG8gYmUgcmFjZS1jb25kaXRpb24tZnJlZS4pCisg KgorICogU2VlIEdldENhY2hlZFBsYW4oKSdzIGNvbW1lbnQgZm9yIGEgZGVzY3JpcHRpb24gb2Yg cGFydF9wcnVuZV9yZXN1bHRzX2xpc3QuCiAgKi8KIHN0YXRpYyBib29sCi1DaGVja0NhY2hlZFBs YW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSkKK0NoZWNrQ2FjaGVkUGxhbihDYWNoZWRQ bGFuU291cmNlICpwbGFuc291cmNlLCBQYXJhbUxpc3RJbmZvIGJvdW5kUGFyYW1zLAorCQkJCUxp c3QgKipwYXJ0X3BydW5lX3Jlc3VsdHNfbGlzdCkKIHsKIAlDYWNoZWRQbGFuICpwbGFuID0gcGxh bnNvdXJjZS0+Z3BsYW47CiAKIAkvKiBBc3NlcnQgdGhhdCBjYWxsZXIgY2hlY2tlZCB0aGUgcXVl cnl0cmVlICovCiAJQXNzZXJ0KHBsYW5zb3VyY2UtPmlzX3ZhbGlkKTsKIAorCSpwYXJ0X3BydW5l X3Jlc3VsdHNfbGlzdCA9IE5JTDsKKwogCS8qIElmIHRoZXJlJ3Mgbm8gZ2VuZXJpYyBwbGFuLCBq dXN0IHNheSAiZmFsc2UiICovCiAJaWYgKCFwbGFuKQogCQlyZXR1cm4gZmFsc2U7CkBAIC04MjAs MTMgKzg1MCwyMSBAQCBDaGVja0NhY2hlZFBsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJj ZSkKIAkgKi8KIAlpZiAocGxhbi0+aXNfdmFsaWQpCiAJeworCQlMaXN0ICAgKmxvY2tlZFJlbGlk c19wZXJfc3RtdDsKKwogCQkvKgogCQkgKiBQbGFuIG11c3QgaGF2ZSBwb3NpdGl2ZSByZWZjb3Vu dCBiZWNhdXNlIGl0IGlzIHJlZmVyZW5jZWQgYnkKIAkJICogcGxhbnNvdXJjZTsgc28gbm8gbmVl ZCB0byBmZWFyIGl0IGRpc2FwcGVhcnMgdW5kZXIgdXMgaGVyZS4KIAkJICovCiAJCUFzc2VydChw bGFuLT5yZWZjb3VudCA+IDApOwogCi0JCUFjcXVpcmVFeGVjdXRvckxvY2tzKHBsYW4tPnN0bXRf bGlzdCwgdHJ1ZSk7CisJCS8qCisJCSAqIExvY2sgcmVsYXRpb25zIHNjYW5uZWQgYnkgdGhlIHBs YW4uICBUaGlzIGlzIHdoZXJlIHRoZSBwcnVuaW5nCisJCSAqIGhhcHBlbnMgaWYgbmVlZGVkLgor CQkgKi8KKwkJQWNxdWlyZUV4ZWN1dG9yTG9ja3MocGxhbi0+c3RtdF9saXN0LCBib3VuZFBhcmFt cywKKwkJCQkJCQkgcGFydF9wcnVuZV9yZXN1bHRzX2xpc3QsCisJCQkJCQkJICZsb2NrZWRSZWxp ZHNfcGVyX3N0bXQpOwogCiAJCS8qCiAJCSAqIElmIHBsYW4gd2FzIHRyYW5zaWVudCwgY2hlY2sg dG8gc2VlIGlmIFRyYW5zYWN0aW9uWG1pbiBoYXMKQEAgLTg0OCw3ICs4ODYsMTEgQEAgQ2hlY2tD YWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UpCiAJCX0KIAogCQkvKiBPb3Bz LCB0aGUgcmFjZSBjYXNlIGhhcHBlbmVkLiAgUmVsZWFzZSB1c2VsZXNzIGxvY2tzLiAqLwotCQlB Y3F1aXJlRXhlY3V0b3JMb2NrcyhwbGFuLT5zdG10X2xpc3QsIGZhbHNlKTsKKwkJUmVsZWFzZUV4 ZWN1dG9yTG9ja3MocGxhbi0+c3RtdF9saXN0LCBsb2NrZWRSZWxpZHNfcGVyX3N0bXQpOworCisJ CS8qIFJlbGVhc2UgYW55IFBhcnRpdGlvblBydW5lUmVzdWx0cyB0aGF0IG1heSBiZWVuIGNyZWF0 ZWQuICovCisJCUZyZWVQYXJ0aXRpb25QcnVuZVJlc3VsdHMoKnBhcnRfcHJ1bmVfcmVzdWx0c19s aXN0KTsKKwkJKnBhcnRfcHJ1bmVfcmVzdWx0c19saXN0ID0gTklMOwogCX0KIAogCS8qCkBAIC04 NzQsMTAgKzkxNiwxNCBAQCBDaGVja0NhY2hlZFBsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNv dXJjZSkKICAqIFBsYW5uaW5nIHdvcmsgaXMgZG9uZSBpbiB0aGUgY2FsbGVyJ3MgbWVtb3J5IGNv bnRleHQuICBUaGUgZmluaXNoZWQgcGxhbgogICogaXMgaW4gYSBjaGlsZCBtZW1vcnkgY29udGV4 dCwgd2hpY2ggdHlwaWNhbGx5IHNob3VsZCBnZXQgcmVwYXJlbnRlZAogICogKHVubGVzcyB0aGlz IGlzIGEgb25lLXNob3QgcGxhbiwgaW4gd2hpY2ggY2FzZSB3ZSBkb24ndCBjb3B5IHRoZSBwbGFu KS4KKyAqCisgKiBBIGxpc3Qgb2YgTklMcyBpcyByZXR1cm5lZCBpbiAqcGFydF9wcnVuZV9yZXN1 bHRzX2xpc3QsIG1lYW5pbmcgdGhhdCBubworICogbm8gcGFydGl0aW9uIHBydW5pbmcgaGFzIGJl ZW4gZG9uZSB5ZXQgZm9yIHRoZSBwbGFucyBpbiBzdG10X2xpc3QuCiAgKi8KIHN0YXRpYyBDYWNo ZWRQbGFuICoKIEJ1aWxkQ2FjaGVkUGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlLCBM aXN0ICpxbGlzdCwKLQkJCQlQYXJhbUxpc3RJbmZvIGJvdW5kUGFyYW1zLCBRdWVyeUVudmlyb25t ZW50ICpxdWVyeUVudikKKwkJCQlQYXJhbUxpc3RJbmZvIGJvdW5kUGFyYW1zLCBRdWVyeUVudmly b25tZW50ICpxdWVyeUVudiwKKwkJCQlMaXN0ICoqcGFydF9wcnVuZV9yZXN1bHRzX2xpc3QpCiB7 CiAJQ2FjaGVkUGxhbiAqcGxhbjsKIAlMaXN0CSAgICpwbGlzdDsKQEAgLTEwMDcsNiArMTA1Mywx NyBAQCBCdWlsZENhY2hlZFBsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwgTGlzdCAq cWxpc3QsCiAKIAlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKIAorCS8qCisJICogTm8g YWN0dWFsIFBhcnRpdGlvblBydW5lUmVzdWx0cyB5ZXQgdG8gYWRkLCB0aG91Z2ggbXVzdCBpbml0 aWFsaXplCisJICogdGhlIGxpc3QgdG8gaGF2ZSB0aGUgc2FtZSBudW1iZXIgb2YgZWxlbWVudHMg YXMgdGhlIGxpc3Qgb2YKKwkgKiBQbGFubmVkU3RtdHMuCisJICovCisJKnBhcnRfcHJ1bmVfcmVz dWx0c19saXN0ID0gTklMOworCWZvcmVhY2gobGMsIHBsaXN0KQorCXsKKwkJKnBhcnRfcHJ1bmVf cmVzdWx0c19saXN0ID0gbGFwcGVuZCgqcGFydF9wcnVuZV9yZXN1bHRzX2xpc3QsIE5JTCk7CisJ fQorCiAJcmV0dXJuIHBsYW47CiB9CiAKQEAgLTExMjYsNiArMTE4MywxOSBAQCBjYWNoZWRfcGxh bl9jb3N0KENhY2hlZFBsYW4gKnBsYW4sIGJvb2wgaW5jbHVkZV9wbGFubmVyKQogICogcGxhbiBv ciBhIGN1c3RvbSBwbGFuIGZvciB0aGUgZ2l2ZW4gcGFyYW1ldGVyczogdGhlIGNhbGxlciBkb2Vz IG5vdCBrbm93CiAgKiB3aGljaCBpdCB3aWxsIGdldC4KICAqCisgKiBGb3IgZXZlcnkgUGxhbm5l ZFN0bXQgZm91bmQgaW4gdGhlIHJldHVybmVkIENhY2hlZFBsYW4sIGFuIGVsZW1lbnQgdGhhdAor ICogaXMgZWl0aGVyIGEgTGlzdCBvZiBQYXJ0aXRpb25QcnVuZVJlc3VsdCBvciBhIE5JTCBpcyBh ZGRlZCB0bworICogKnBhcnRfcHJ1bmVfcmVzdWx0c19saXN0LiAgVGhlIGZvcm1lciBpZiB0aGUg UGxhbm5lZFN0bXQgaXMgZnJvbQorICogdGhlIGV4aXN0aW5nIENhY2hlZFBsYW4gdGhhdCBpcyBv dGhlcndpc2UgdmFsaWQgYW5kIGhhcworICogY29udGFpbnNJbml0aWFsUHJ1bmluZyBzZXQgdG8g dHJ1ZS4gIEJlZm9yZSByZXR1cm5pbmcgc3VjaCBhIENhY2hlZFBsYW4sCisgKiB0aG9zZSAiaW5p dGlhbCIgc3RlcHMgYXJlIHBlcmZvcm1lZCBieSBjYWxsaW5nIEV4ZWN1dG9yRG9Jbml0aWFsUHJ1 bmluZygpCisgKiB0byBkZXRlcm1pbmUgb25seSB0aG9zZSBsZWFmIHBhcnRpdGlvbnMgdGhhdCBu ZWVkIHRvIGJlIGxvY2tlZCBieQorICogQWNxdWlyZUV4ZWN1dG9yTG9ja3MoKSBieSBwcnVuaW5n IGF3YXkgc3VicGxhbnMgdGhhdCBkb24ndCBtYXRjaCB0aGUKKyAqICJpbml0aWFsIiBwcnVuaW5n IGNvbmRpdGlvbnMuICBGb3IgZWFjaCBQYXJ0aXRpb25QcnVuZUluZm8gZm91bmQgaW4KKyAqIFBs YW5uZWRTdG10LnBhcnRQcnVuZUluZm9zLCBhIFBhcnRpdGlvblBydW5lUmVzdWx0IGNvbnRhaW5p bmcgdGhlIGJpdG1hcHNldAorICogb2YgdGhlIGluZGV4ZXMgb2Ygc3Vydml2aW5nIHN1YnBsYW5z IGlzIGFkZGVkIHRvIHRoZSBMaXN0IGZvciB0aGUKKyAqIFBsYW5uZWRTdG10LgorICoKICAqIE9u IHJldHVybiwgdGhlIHBsYW4gaXMgdmFsaWQgYW5kIHdlIGhhdmUgc3VmZmljaWVudCBsb2NrcyB0 byBiZWdpbgogICogZXhlY3V0aW9uLgogICoKQEAgLTExMzksMTEgKzEyMDksMTMgQEAgY2FjaGVk X3BsYW5fY29zdChDYWNoZWRQbGFuICpwbGFuLCBib29sIGluY2x1ZGVfcGxhbm5lcikKICAqLwog Q2FjaGVkUGxhbiAqCiBHZXRDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2Us IFBhcmFtTGlzdEluZm8gYm91bmRQYXJhbXMsCi0JCQkgIFJlc291cmNlT3duZXIgb3duZXIsIFF1 ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52KQorCQkJICBSZXNvdXJjZU93bmVyIG93bmVyLCBRdWVy eUVudmlyb25tZW50ICpxdWVyeUVudiwKKwkJCSAgTGlzdCAqKnBhcnRfcHJ1bmVfcmVzdWx0c19s aXN0KQogewogCUNhY2hlZFBsYW4gKnBsYW4gPSBOVUxMOwogCUxpc3QJICAgKnFsaXN0OwogCWJv b2wJCWN1c3RvbXBsYW47CisJTGlzdAkgICAqbXlfcGFydF9wcnVuZV9yZXN1bHRzX2xpc3Q7CiAK IAkvKiBBc3NlcnQgY2FsbGVyIGlzIGRvaW5nIHRoaW5ncyBpbiBhIHNhbmUgb3JkZXIgKi8KIAlB c3NlcnQocGxhbnNvdXJjZS0+bWFnaWMgPT0gQ0FDSEVEUExBTlNPVVJDRV9NQUdJQyk7CkBAIC0x MTYwLDcgKzEyMzIsOCBAQCBHZXRDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3Vy Y2UsIFBhcmFtTGlzdEluZm8gYm91bmRQYXJhbXMsCiAKIAlpZiAoIWN1c3RvbXBsYW4pCiAJewot CQlpZiAoQ2hlY2tDYWNoZWRQbGFuKHBsYW5zb3VyY2UpKQorCQlpZiAoQ2hlY2tDYWNoZWRQbGFu KHBsYW5zb3VyY2UsIGJvdW5kUGFyYW1zLAorCQkJCQkJCSZteV9wYXJ0X3BydW5lX3Jlc3VsdHNf bGlzdCkpCiAJCXsKIAkJCS8qIFdlIHdhbnQgYSBnZW5lcmljIHBsYW4sIGFuZCB3ZSBhbHJlYWR5 IGhhdmUgYSB2YWxpZCBvbmUgKi8KIAkJCXBsYW4gPSBwbGFuc291cmNlLT5ncGxhbjsKQEAgLTEx NjksNyArMTI0Miw4IEBAIEdldENhY2hlZFBsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJj ZSwgUGFyYW1MaXN0SW5mbyBib3VuZFBhcmFtcywKIAkJZWxzZQogCQl7CiAJCQkvKiBCdWlsZCBh IG5ldyBnZW5lcmljIHBsYW4gKi8KLQkJCXBsYW4gPSBCdWlsZENhY2hlZFBsYW4ocGxhbnNvdXJj ZSwgcWxpc3QsIE5VTEwsIHF1ZXJ5RW52KTsKKwkJCXBsYW4gPSBCdWlsZENhY2hlZFBsYW4ocGxh bnNvdXJjZSwgcWxpc3QsIE5VTEwsIHF1ZXJ5RW52LAorCQkJCQkJCQkgICAmbXlfcGFydF9wcnVu ZV9yZXN1bHRzX2xpc3QpOwogCQkJLyogSnVzdCBtYWtlIHJlYWwgc3VyZSBwbGFuc291cmNlLT5n cGxhbiBpcyBjbGVhciAqLwogCQkJUmVsZWFzZUdlbmVyaWNQbGFuKHBsYW5zb3VyY2UpOwogCQkJ LyogTGluayB0aGUgbmV3IGdlbmVyaWMgcGxhbiBpbnRvIHRoZSBwbGFuc291cmNlICovCkBAIC0x MjE0LDcgKzEyODgsOCBAQCBHZXRDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3Vy Y2UsIFBhcmFtTGlzdEluZm8gYm91bmRQYXJhbXMsCiAJaWYgKGN1c3RvbXBsYW4pCiAJewogCQkv KiBCdWlsZCBhIGN1c3RvbSBwbGFuICovCi0JCXBsYW4gPSBCdWlsZENhY2hlZFBsYW4ocGxhbnNv dXJjZSwgcWxpc3QsIGJvdW5kUGFyYW1zLCBxdWVyeUVudik7CisJCXBsYW4gPSBCdWlsZENhY2hl ZFBsYW4ocGxhbnNvdXJjZSwgcWxpc3QsIGJvdW5kUGFyYW1zLCBxdWVyeUVudiwKKwkJCQkJCQkg ICAmbXlfcGFydF9wcnVuZV9yZXN1bHRzX2xpc3QpOwogCQkvKiBBY2N1bXVsYXRlIHRvdGFsIGNv c3RzIG9mIGN1c3RvbSBwbGFucyAqLwogCQlwbGFuc291cmNlLT50b3RhbF9jdXN0b21fY29zdCAr PSBjYWNoZWRfcGxhbl9jb3N0KHBsYW4sIHRydWUpOwogCkBAIC0xMjQ2LDYgKzEzMjEsOSBAQCBH ZXRDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsIFBhcmFtTGlzdEluZm8g Ym91bmRQYXJhbXMsCiAJCXBsYW4tPmlzX3NhdmVkID0gdHJ1ZTsKIAl9CiAKKwlpZiAocGFydF9w cnVuZV9yZXN1bHRzX2xpc3QpCisJCSpwYXJ0X3BydW5lX3Jlc3VsdHNfbGlzdCA9IG15X3BhcnRf cHJ1bmVfcmVzdWx0c19saXN0OworCiAJcmV0dXJuIHBsYW47CiB9CiAKQEAgLTE3MzcsMTcgKzE4 MTUsMjkgQEAgUXVlcnlMaXN0R2V0UHJpbWFyeVN0bXQoTGlzdCAqc3RtdHMpCiAKIC8qCiAgKiBB Y3F1aXJlRXhlY3V0b3JMb2NrczogYWNxdWlyZSBsb2NrcyBuZWVkZWQgZm9yIGV4ZWN1dGlvbiBv ZiBhIGNhY2hlZCBwbGFuOwotICogb3IgcmVsZWFzZSB0aGVtIGlmIGFjcXVpcmUgaXMgZmFsc2Uu CisgKgorICogU2VlIEdldENhY2hlZFBsYW4oKSdzIGNvbW1lbnQgZm9yIGEgZGVzY3JpcHRpb24g b2YgcGFydF9wcnVuZV9yZXN1bHRzX2xpc3QuCisgKgorICogT24gcmV0dXJuLCAqbG9ja2VkUmVs aWRzX3Blcl9zdG10IHdpbGwgY29udGFpbiBhIGJpdG1hcHNldCBmb3IgZXZlcnkKKyAqIFBsYW5u ZWRTdG10IGluIHN0bXRfbGlzdCwgY29udGFpbmluZyB0aGUgUlQgaW5kZXhlcyBvZiByZWxhdGlv biBlbnRyaWVzCisgKiBpbiBpdHMgcmFuZ2UgdGFibGUgdGhhdCB3ZXJlIGFjdHVhbGx5IGxvY2tl ZCwgb3IgTlVMTCBpZiB0aGUgUGxhbm5lZFN0bXQKKyAqIGNvbnRhaW5zIGEgdXRpbGl0eSBzdGF0 ZW1lbnQuCiAgKi8KIHN0YXRpYyB2b2lkCi1BY3F1aXJlRXhlY3V0b3JMb2NrcyhMaXN0ICpzdG10 X2xpc3QsIGJvb2wgYWNxdWlyZSkKK0FjcXVpcmVFeGVjdXRvckxvY2tzKExpc3QgKnN0bXRfbGlz dCwgUGFyYW1MaXN0SW5mbyBib3VuZFBhcmFtcywKKwkJCQkJIExpc3QgKipwYXJ0X3BydW5lX3Jl c3VsdHNfbGlzdCwKKwkJCQkJIExpc3QgKipsb2NrZWRSZWxpZHNfcGVyX3N0bXQpCiB7CiAJTGlz dENlbGwgICAqbGMxOwogCisJKnBhcnRfcHJ1bmVfcmVzdWx0c19saXN0ID0gKmxvY2tlZFJlbGlk c19wZXJfc3RtdCA9IE5JTDsKIAlmb3JlYWNoKGxjMSwgc3RtdF9saXN0KQogCXsKIAkJUGxhbm5l ZFN0bXQgKnBsYW5uZWRzdG10ID0gbGZpcnN0X25vZGUoUGxhbm5lZFN0bXQsIGxjMSk7Ci0JCUxp c3RDZWxsICAgKmxjMjsKKwkJTGlzdAkgICAqcGFydF9wcnVuZV9yZXN1bHRzID0gTklMOworCQlC aXRtYXBzZXQgICphbGxMb2NrUmVsaWRzOworCQlCaXRtYXBzZXQgICpsb2NrZWRSZWxpZHMgPSBO VUxMOworCQlpbnQJCQlydGk7CiAKIAkJaWYgKHBsYW5uZWRzdG10LT5jb21tYW5kVHlwZSA9PSBD TURfVVRJTElUWSkKIAkJewpAQCAtMTc2MSwxMyArMTg1MSw0MCBAQCBBY3F1aXJlRXhlY3V0b3JM b2NrcyhMaXN0ICpzdG10X2xpc3QsIGJvb2wgYWNxdWlyZSkKIAkJCVF1ZXJ5CSAgICpxdWVyeSA9 IFV0aWxpdHlDb250YWluc1F1ZXJ5KHBsYW5uZWRzdG10LT51dGlsaXR5U3RtdCk7CiAKIAkJCWlm IChxdWVyeSkKLQkJCQlTY2FuUXVlcnlGb3JMb2NrcyhxdWVyeSwgYWNxdWlyZSk7CisJCQkJU2Nh blF1ZXJ5Rm9yTG9ja3MocXVlcnksIHRydWUpOworCQkJKnBhcnRfcHJ1bmVfcmVzdWx0c19saXN0 ID0gbGFwcGVuZCgqcGFydF9wcnVuZV9yZXN1bHRzX2xpc3QsIE5JTCk7CiAJCQljb250aW51ZTsK IAkJfQogCi0JCWZvcmVhY2gobGMyLCBwbGFubmVkc3RtdC0+cnRhYmxlKQorCQkvKgorCQkgKiBG aWd1cmUgb3V0IHRoZSBzZXQgb2YgcmVsYXRpb25zIHRoYXQgd291bGQgbmVlZCB0byBiZSBsb2Nr ZWQKKwkJICogYmVmb3JlIGV4ZWN1dGluZyB0aGUgcGxhbi4KKwkJICovCisJCWlmIChwbGFubmVk c3RtdC0+Y29udGFpbnNJbml0aWFsUHJ1bmluZykKIAkJewotCQkJUmFuZ2VUYmxFbnRyeSAqcnRl ID0gKFJhbmdlVGJsRW50cnkgKikgbGZpcnN0KGxjMik7CisJCQlCaXRtYXBzZXQgKnNjYW5fbGVh ZnBhcnRfcnRpcyA9IE5VTEw7CisKKwkJCS8qCisJCQkgKiBPYnRhaW4gdGhlIHNldCBvZiBsZWFm IHBhcnRpdGlvbnMgdG8gYmUgbG9ja2VkLgorCQkJICoKKwkJCSAqIFRoZSBmb2xsb3dpbmcgZG9l cyBpbml0aWFsIHBhcnRpdGlvbiBwcnVuaW5nIHVzaW5nIHRoZQorCQkJICogUGFydGl0aW9uUHJ1 bmVJbmZvcyBmb3VuZCBpbiBwbGFubmVkc3RtdC0+cGFydFBydW5lSW5mb3MgYW5kCisJCQkgKiBm aW5kcyBsZWFmIHBhcnRpdGlvbnMgdGhhdCBzdXJ2aXZlIHRoYXQgcHJ1bmluZyBhY3Jvc3MgYWxs IHRoZQorCQkJICogbm9kZXMgaW4gdGhlIHBsYW4gdHJlZS4KKwkJCSAqLworCQkJcGFydF9wcnVu ZV9yZXN1bHRzID0gRXhlY3V0b3JEb0luaXRpYWxQcnVuaW5nKHBsYW5uZWRzdG10LAorCQkJCQkJ CQkJCQkJCQkgIGJvdW5kUGFyYW1zLAorCQkJCQkJCQkJCQkJCQkgICZzY2FuX2xlYWZwYXJ0X3J0 aXMpOworCQkJYWxsTG9ja1JlbGlkcyA9IGJtc191bmlvbihwbGFubmVkc3RtdC0+bWluTG9ja1Jl bGlkcywKKwkJCQkJCQkJCSAgc2Nhbl9sZWFmcGFydF9ydGlzKTsKKwkJfQorCQllbHNlCisJCQlh bGxMb2NrUmVsaWRzID0gcGxhbm5lZHN0bXQtPm1pbkxvY2tSZWxpZHM7CisKKwkJcnRpID0gLTE7 CisJCXdoaWxlICgocnRpID0gYm1zX25leHRfbWVtYmVyKGFsbExvY2tSZWxpZHMsIHJ0aSkpID4g MCkKKwkJeworCQkJUmFuZ2VUYmxFbnRyeSAqcnRlID0gcnRfZmV0Y2gocnRpLCBwbGFubmVkc3Rt dC0+cnRhYmxlKTsKIAogCQkJaWYgKHJ0ZS0+cnRla2luZCAhPSBSVEVfUkVMQVRJT04pCiAJCQkJ Y29udGludWU7CkBAIC0xNzc4LDEwICsxODk1LDU5IEBAIEFjcXVpcmVFeGVjdXRvckxvY2tzKExp c3QgKnN0bXRfbGlzdCwgYm9vbCBhY3F1aXJlKQogCQkJICogZmFpbCBpZiBpdCdzIGJlZW4gZHJv cHBlZCBlbnRpcmVseSAtLS0gd2UnbGwganVzdCB0cmFuc2llbnRseQogCQkJICogYWNxdWlyZSBh IG5vbi1jb25mbGljdGluZyBsb2NrLgogCQkJICovCi0JCQlpZiAoYWNxdWlyZSkKLQkJCQlMb2Nr UmVsYXRpb25PaWQocnRlLT5yZWxpZCwgcnRlLT5yZWxsb2NrbW9kZSk7Ci0JCQllbHNlCi0JCQkJ VW5sb2NrUmVsYXRpb25PaWQocnRlLT5yZWxpZCwgcnRlLT5yZWxsb2NrbW9kZSk7CisJCQlMb2Nr UmVsYXRpb25PaWQocnRlLT5yZWxpZCwgcnRlLT5yZWxsb2NrbW9kZSk7CisJCQlsb2NrZWRSZWxp ZHMgPSBibXNfYWRkX21lbWJlcihsb2NrZWRSZWxpZHMsIHJ0aSk7CisJCX0KKworCQkqcGFydF9w cnVuZV9yZXN1bHRzX2xpc3QgPSBsYXBwZW5kKCpwYXJ0X3BydW5lX3Jlc3VsdHNfbGlzdCwKKwkJ CQkJCQkJCQkgICBwYXJ0X3BydW5lX3Jlc3VsdHMpOworCQkqbG9ja2VkUmVsaWRzX3Blcl9zdG10 ID0gbGFwcGVuZCgqbG9ja2VkUmVsaWRzX3Blcl9zdG10LCBsb2NrZWRSZWxpZHMpOworCX0KK30K KworLyoKKyAqIFJlbGVhc2VFeGVjdXRvckxvY2tzCisgKiAJCVJlbGVhc2UgbG9ja3MgdGhhdCB3 b3VsZCd2ZSBiZWVuIGFjcXVpcmVkIGJ5IGFuIGVhcmxpZXIgY2FsbCB0bworICogCQlBY3F1aXJl RXhlY3V0b3JMb2NrcygpCisgKi8KK3N0YXRpYyB2b2lkCitSZWxlYXNlRXhlY3V0b3JMb2NrcyhM aXN0ICpzdG10X2xpc3QsIExpc3QgKmxvY2tlZFJlbGlkc19wZXJfc3RtdCkKK3sKKwlMaXN0Q2Vs bCAgICpsYzEsCisJCQkgICAqbGMyOworCisJZm9yYm90aChsYzEsIHN0bXRfbGlzdCwgbGMyLCBs b2NrZWRSZWxpZHNfcGVyX3N0bXQpCisJeworCQlQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQgPSBs Zmlyc3Rfbm9kZShQbGFubmVkU3RtdCwgbGMxKTsKKwkJQml0bWFwc2V0ICAqbG9ja2VkUmVsaWRz ID0gbGZpcnN0KGxjMik7CisJCWludAkJCXJ0aTsKKworCQlpZiAocGxhbm5lZHN0bXQtPmNvbW1h bmRUeXBlID09IENNRF9VVElMSVRZKQorCQl7CisJCQkvKgorCQkJICogSWdub3JlIHV0aWxpdHkg c3RhdGVtZW50cywgZXhjZXB0IHRob3NlIChzdWNoIGFzIEVYUExBSU4pIHRoYXQKKwkJCSAqIGNv bnRhaW4gYSBwYXJzZWQtYnV0LW5vdC1wbGFubmVkIHF1ZXJ5LiAgTm90ZTogaXQncyBva2F5IHRv IHVzZQorCQkJICogU2NhblF1ZXJ5Rm9yTG9ja3MsIGV2ZW4gdGhvdWdoIHRoZSBxdWVyeSBoYXNu J3QgYmVlbiB0aHJvdWdoCisJCQkgKiBydWxlIHJld3JpdGluZywgYmVjYXVzZSByZXdyaXRpbmcg ZG9lc24ndCBjaGFuZ2UgdGhlIHF1ZXJ5CisJCQkgKiByZXByZXNlbnRhdGlvbi4KKwkJCSAqLwor CQkJUXVlcnkJICAgKnF1ZXJ5ID0gVXRpbGl0eUNvbnRhaW5zUXVlcnkocGxhbm5lZHN0bXQtPnV0 aWxpdHlTdG10KTsKKworCQkJQXNzZXJ0KGxvY2tlZFJlbGlkcyA9PSBOVUxMKTsKKwkJCWlmIChx dWVyeSkKKwkJCQlTY2FuUXVlcnlGb3JMb2NrcyhxdWVyeSwgZmFsc2UpOworCQkJY29udGludWU7 CisJCX0KKworCQlydGkgPSAtMTsKKwkJd2hpbGUgKChydGkgPSBibXNfbmV4dF9tZW1iZXIobG9j a2VkUmVsaWRzLCBydGkpKSA+PSAwKQorCQl7CisJCQlSYW5nZVRibEVudHJ5ICpydGUgPSBydF9m ZXRjaChydGksIHBsYW5uZWRzdG10LT5ydGFibGUpOworCisJCQlBc3NlcnQocnRlLT5ydGVraW5k ID09IFJURV9SRUxBVElPTik7CisKKwkJCS8qIFNlZSB0aGUgY29tbWVudCBpbiBBY3F1aXJlRXhl Y3V0b3JMb2NrcygpLiAqLworCQkJVW5sb2NrUmVsYXRpb25PaWQocnRlLT5yZWxpZCwgcnRlLT5y ZWxsb2NrbW9kZSk7CiAJCX0KIAl9CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9t bWdyL3BvcnRhbG1lbS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9wb3J0YWxtZW0uYwppbmRl eCA3YjFhZTZmZGNmLi41YjkwOTg5NzFiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9t bWdyL3BvcnRhbG1lbS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvcG9ydGFsbWVtLmMK QEAgLTMwMyw2ICszMDMsMjUgQEAgUG9ydGFsRGVmaW5lUXVlcnkoUG9ydGFsIHBvcnRhbCwKIAlw b3J0YWwtPnN0YXR1cyA9IFBPUlRBTF9ERUZJTkVEOwogfQogCisvKgorICogUG9ydGFsU3RvcmVQ YXJ0aXRpb25QcnVuZVJlc3VsdHMKKyAqCQlDb3B5IHRoZSBnaXZlbiBMaXN0IG9mIExpc3RzIG9m IFBhcnRpdGlvblBydW5lUmVzdWx0cyBpbnRvIHRoZQorICoJCXBvcnRhbCdzIGNvbnRleHQKKyAq CisgKiBUaGlzIGFsbG93cyB0aGUgY2FsbGVyIHRvIGVuc3VyZSB0aGF0IHRoZSBsaXN0IGV4aXN0 cyBhcyBsb25nIGFzIHRoZSBwb3J0YWwKKyAqIGRvZXMuCisgKi8KK3ZvaWQKK1BvcnRhbFN0b3Jl UGFydGl0aW9uUHJ1bmVSZXN1bHRzKFBvcnRhbCBwb3J0YWwsIExpc3QgKnBhcnRfcHJ1bmVfcmVz dWx0c19saXN0KQoreworCU1lbW9yeUNvbnRleHQJb2xkY3h0OworCisJQXNzZXJ0KFBvcnRhbElz VmFsaWQocG9ydGFsKSk7CisJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHBvcnRhbC0+ cG9ydGFsQ29udGV4dCk7CisJcG9ydGFsLT5wYXJ0X3BydW5lX3Jlc3VsdHNfbGlzdCA9IGNvcHlP YmplY3QocGFydF9wcnVuZV9yZXN1bHRzX2xpc3QpOworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhv bGRjeHQpOworfQorCiAvKgogICogUG9ydGFsUmVsZWFzZUNhY2hlZFBsYW4KICAqCQlSZWxlYXNl IGEgcG9ydGFsJ3MgcmVmZXJlbmNlIHRvIGl0cyBjYWNoZWQgcGxhbiwgaWYgYW55LgpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXhwbGFpbi5oIGIvc3JjL2luY2x1ZGUvY29tbWFu ZHMvZXhwbGFpbi5oCmluZGV4IDllYmRlMDg5YWUuLjI2OWNjNGQ1NjIgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW4uaAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9l eHBsYWluLmgKQEAgLTg3LDcgKzg3LDkgQEAgZXh0ZXJuIHZvaWQgRXhwbGFpbk9uZVV0aWxpdHko Tm9kZSAqdXRpbGl0eVN0bXQsIEludG9DbGF1c2UgKmludG8sCiAJCQkJCQkJICBFeHBsYWluU3Rh dGUgKmVzLCBjb25zdCBjaGFyICpxdWVyeVN0cmluZywKIAkJCQkJCQkgIFBhcmFtTGlzdEluZm8g cGFyYW1zLCBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudik7CiAKLWV4dGVybiB2b2lkIEV4cGxh aW5PbmVQbGFuKFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwgSW50b0NsYXVzZSAqaW50bywKK2V4 dGVybiB2b2lkIEV4cGxhaW5PbmVQbGFuKFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwKKwkJCQkJ CSAgIExpc3QgKnBhcnRfcHJ1bmVfcmVzdWx0cywKKwkJCQkJCSAgIEludG9DbGF1c2UgKmludG8s CiAJCQkJCQkgICBFeHBsYWluU3RhdGUgKmVzLCBjb25zdCBjaGFyICpxdWVyeVN0cmluZywKIAkJ CQkJCSAgIFBhcmFtTGlzdEluZm8gcGFyYW1zLCBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudiwK IAkJCQkJCSAgIGNvbnN0IGluc3RyX3RpbWUgKnBsYW5kdXJhdGlvbiwKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uaCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9y L2V4ZWNQYXJ0aXRpb24uaAppbmRleCAxN2ZhYmMxOGM5Li40Yjk4ZDBkMmVmIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjUGFydGl0aW9uLmgKKysrIGIvc3JjL2luY2x1ZGUv ZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oCkBAIC00NSw2ICs0NSw3IEBAIGV4dGVybiB2b2lkIEV4 ZWNDbGVhbnVwVHVwbGVSb3V0aW5nKE1vZGlmeVRhYmxlU3RhdGUgKm10c3RhdGUsCiAgKiBucGFy dHMJCQkJCQlMZW5ndGggb2Ygc3VicGxhbl9tYXBbXSBhbmQgc3VicGFydF9tYXBbXS4KICAqIHN1 YnBsYW5fbWFwCQkJCQlTdWJwbGFuIGluZGV4IGJ5IHBhcnRpdGlvbiBpbmRleCwgb3IgLTEuCiAg KiBzdWJwYXJ0X21hcAkJCQkJU3VicGFydCBpbmRleCBieSBwYXJ0aXRpb24gaW5kZXgsIG9yIC0x LgorICogcnRpX21hcAkJCQkJCVJhbmdlIHRhYmxlIGluZGV4IGJ5IHBhcnRpdGlvbiBpbmRleCwg b3IgMC4KICAqIHByZXNlbnRfcGFydHMJCQkJQSBCaXRtYXBzZXQgb2YgdGhlIHBhcnRpdGlvbiBp bmRleGVzIHRoYXQgd2UKICAqCQkJCQkJCQloYXZlIHN1YnBsYW5zIG9yIHN1YnBhcnRzIGZvci4K ICAqIGluaXRpYWxfcHJ1bmluZ19zdGVwcwkJTGlzdCBvZiBQYXJ0aXRpb25QcnVuZVN0ZXBzIHVz ZWQgdG8KQEAgLTYxLDYgKzYyLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUGFydGl0aW9uZWRSZWxQcnVu aW5nRGF0YQogCWludAkJCW5wYXJ0czsKIAlpbnQJCSAgICpzdWJwbGFuX21hcDsKIAlpbnQJCSAg ICpzdWJwYXJ0X21hcDsKKwlJbmRleAkgICAqcnRpX21hcDsKIAlCaXRtYXBzZXQgICpwcmVzZW50 X3BhcnRzOwogCUxpc3QJICAgKmluaXRpYWxfcHJ1bmluZ19zdGVwczsKIAlMaXN0CSAgICpleGVj X3BydW5pbmdfc3RlcHM7CkBAIC0xMjcsNSArMTI5LDEwIEBAIGV4dGVybiBQYXJ0aXRpb25QcnVu ZVN0YXRlICpFeGVjSW5pdFBhcnRpdGlvblBydW5pbmcoUGxhblN0YXRlICpwbGFuc3RhdGUsCiAJ CQkJCQkJCQkJCQkJIEJpdG1hcHNldCAqcm9vdF9wYXJlbnRfcmVsaWRzLAogCQkJCQkJCQkJCQkJ CSBCaXRtYXBzZXQgKippbml0aWFsbHlfdmFsaWRfc3VicGxhbnMpOwogZXh0ZXJuIEJpdG1hcHNl dCAqRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKFBhcnRpdGlvblBydW5lU3RhdGUgKnBydW5lc3Rh dGUsCi0JCQkJCQkJCQkJICAgYm9vbCBpbml0aWFsX3BydW5lKTsKKwkJCQkJCQkJCQkgICBib29s IGluaXRpYWxfcHJ1bmUsCisJCQkJCQkJCQkJICAgQml0bWFwc2V0ICoqc2Nhbl9sZWFmcGFydF9y dGlzKTsKK2V4dGVybiBCaXRtYXBzZXQgKkV4ZWNQYXJ0aXRpb25Eb0luaXRpYWxQcnVuaW5nKFBs YW5uZWRTdG10ICpwbGFubmVkc3RtdCwKKwkJCQkJCQkJUGFyYW1MaXN0SW5mbyBwYXJhbXMsCisJ CQkJCQkJCVBhcnRpdGlvblBydW5lSW5mbyAqcHJ1bmVpbmZvLAorCQkJCQkJCQlCaXRtYXBzZXQg KipzY2FuX2xlYWZwYXJ0X3J0aXMpOwogI2VuZGlmCQkJCQkJCS8qIEVYRUNQQVJUSVRJT05fSCAq LwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY2Rlc2MuaCBiL3NyYy9pbmNs dWRlL2V4ZWN1dG9yL2V4ZWNkZXNjLmgKaW5kZXggZTc5ZTJjMDAxZi4uN2Q0Mzc5ZGE3YiAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY2Rlc2MuaAorKysgYi9zcmMvaW5jbHVk ZS9leGVjdXRvci9leGVjZGVzYy5oCkBAIC0zNSw2ICszNSw4IEBAIHR5cGVkZWYgc3RydWN0IFF1 ZXJ5RGVzYwogCS8qIFRoZXNlIGZpZWxkcyBhcmUgcHJvdmlkZWQgYnkgQ3JlYXRlUXVlcnlEZXNj ICovCiAJQ21kVHlwZQkJb3BlcmF0aW9uOwkJLyogQ01EX1NFTEVDVCwgQ01EX1VQREFURSwgZXRj LiAqLwogCVBsYW5uZWRTdG10ICpwbGFubmVkc3RtdDsJLyogcGxhbm5lcidzIG91dHB1dCAoY291 bGQgYmUgdXRpbGl0eSwgdG9vKSAqLworCUxpc3QJCSpwYXJ0X3BydW5lX3Jlc3VsdHM7IC8qIEV4 ZWN1dG9yRG9Jbml0aWFsUHJ1bmluZygpJ3MKKwkJCQkJCQkJCSAgKiBvdXRwdXQgZm9yIHBsYW5u ZWRzdG10ICovCiAJY29uc3QgY2hhciAqc291cmNlVGV4dDsJCS8qIHNvdXJjZSB0ZXh0IG9mIHRo ZSBxdWVyeSAqLwogCVNuYXBzaG90CXNuYXBzaG90OwkJLyogc25hcHNob3QgdG8gdXNlIGZvciBx dWVyeSAqLwogCVNuYXBzaG90CWNyb3NzY2hlY2tfc25hcHNob3Q7CS8qIGNyb3NzY2hlY2sgZm9y IFJJIHVwZGF0ZS9kZWxldGUgKi8KQEAgLTU3LDYgKzU5LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUXVl cnlEZXNjCiAKIC8qIGluIHBxdWVyeS5jICovCiBleHRlcm4gUXVlcnlEZXNjICpDcmVhdGVRdWVy eURlc2MoUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LAorCQkJCQkJCQkgIExpc3QgKnBhcnRfcHJ1 bmVfcmVzdWx0cywKIAkJCQkJCQkJICBjb25zdCBjaGFyICpzb3VyY2VUZXh0LAogCQkJCQkJCQkg IFNuYXBzaG90IHNuYXBzaG90LAogCQkJCQkJCQkgIFNuYXBzaG90IGNyb3NzY2hlY2tfc25hcHNo b3QsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oIGIvc3JjL2lu Y2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaAppbmRleCBlZDk1ZWQxMTc2Li5jOWE1ZTVmYjY4IDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oCisrKyBiL3NyYy9pbmNs dWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgKQEAgLTE4NSw2ICsxODUsOSBAQCBFeGVjR2V0SnVua0F0 dHJpYnV0ZShUdXBsZVRhYmxlU2xvdCAqc2xvdCwgQXR0ck51bWJlciBhdHRubywgYm9vbCAqaXNO dWxsKQogLyoKICAqIHByb3RvdHlwZXMgZnJvbSBmdW5jdGlvbnMgaW4gZXhlY01haW4uYwogICov CitleHRlcm4gTGlzdCAqRXhlY3V0b3JEb0luaXRpYWxQcnVuaW5nKFBsYW5uZWRTdG10ICpwbGFu bmVkc3RtdCwKKwkJCQkJCQkJCSAgUGFyYW1MaXN0SW5mbyBwYXJhbXMsCisJCQkJCQkJCQkgIEJp dG1hcHNldCAqKnNjYW5fbGVhZnBhcnRfcnRpcyk7CiBleHRlcm4gdm9pZCBFeGVjdXRvclN0YXJ0 KFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdzKTsKIGV4dGVybiB2b2lkIHN0YW5kYXJk X0V4ZWN1dG9yU3RhcnQoUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxhZ3MpOwogZXh0ZXJu IHZvaWQgRXhlY3V0b3JSdW4oUXVlcnlEZXNjICpxdWVyeURlc2MsCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5o CmluZGV4IGEyMDA4ODQ2YzYuLjM2OWRlNDJjYWYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25v ZGVzL2V4ZWNub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCkBAIC02 MTUsNiArNjE1LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgRVN0YXRlCiAJCQkJCQkJCQkJICogRXhlY1Jv d01hcmtzLCBvciBOVUxMIGlmIG5vbmUgKi8KIAlQbGFubmVkU3RtdCAqZXNfcGxhbm5lZHN0bXQ7 CS8qIGxpbmsgdG8gdG9wIG9mIHBsYW4gdHJlZSAqLwogCUxpc3QJCSplc19wYXJ0X3BydW5lX2lu Zm9zOwkvKiBQbGFubmVkU3RtdC5wYXJ0UHJ1bmVJbmZvcyAqLworCUxpc3QJCSplc19wYXJ0X3By dW5lX3Jlc3VsdHM7IC8qIFF1ZXJ5RGVzYy5wYXJ0X3BydW5lX3Jlc3VsdHMgKi8KIAljb25zdCBj aGFyICplc19zb3VyY2VUZXh0OwkvKiBTb3VyY2UgdGV4dCBmcm9tIFF1ZXJ5RGVzYyAqLwogCiAJ SnVua0ZpbHRlciAqZXNfanVua0ZpbHRlcjsJLyogdG9wLWxldmVsIGp1bmsgZmlsdGVyLCBpZiBh bnkgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL25vZGVzLmggYi9zcmMvaW5jbHVk ZS9ub2Rlcy9ub2Rlcy5oCmluZGV4IGE4MGY0M2U1NDAuLjkzN2NjNDYyOWQgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL25vZGVzL25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMu aApAQCAtMjEyLDYgKzIxMiw3IEBAIGV4dGVybiBzdHJ1Y3QgQml0bWFwc2V0ICpyZWFkQml0bWFw c2V0KHZvaWQpOwogZXh0ZXJuIHVpbnRwdHJfdCByZWFkRGF0dW0oYm9vbCB0eXBieXZhbCk7CiBl eHRlcm4gYm9vbCAqcmVhZEJvb2xDb2xzKGludCBudW1Db2xzKTsKIGV4dGVybiBpbnQgKnJlYWRJ bnRDb2xzKGludCBudW1Db2xzKTsKK2V4dGVybiBJbmRleCAqcmVhZEluZGV4Q29scyhpbnQgbnVt Q29scyk7CiBleHRlcm4gT2lkICpyZWFkT2lkQ29scyhpbnQgbnVtQ29scyk7CiBleHRlcm4gaW50 MTYgKnJlYWRBdHRyTnVtYmVyQ29scyhpbnQgbnVtQ29scyk7CiAKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgK aW5kZXggZGQ0ZWI4Njc5ZC4uMzZhYmU0Y2Y5ZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9k ZXMvcGF0aG5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAgLTEy NSw2ICsxMjUsMTggQEAgdHlwZWRlZiBzdHJ1Y3QgUGxhbm5lckdsb2JhbAogCS8qIExpc3Qgb2Yg UGFydGl0aW9uUHJ1bmVJbmZvIGNvbnRhaW5lZCBpbiB0aGUgcGxhbiAqLwogCUxpc3QJICAgKnBh cnRQcnVuZUluZm9zOwogCisJLyoKKwkgKiBEbyBhbnkgb2YgdGhvc2UgUGFydGl0aW9uUHJ1bmVJ bmZvcyBoYXZlIGluaXRpYWwgcHJ1bmluZyBzdGVwcyBpbiB0aGVtPworCSAqLworCWJvb2wJCWNv bnRhaW5zSW5pdGlhbFBydW5pbmc7CisKKwkvKgorCSAqIEluZGV4ZXMgb2YgYWxsIHJhbmdlIHRh YmxlIGVudHJpZXMgbWludXMgaW5kZXhlcyBvZiByYW5nZSB0YWJsZSBlbnRyaWVzCisJICogb2Yg dGhlIGxlYWYgcGFydGl0aW9ucyBzY2FubmVkIGJ5IHBydW5hYmxlIHN1YnBsYW5zOyBzZWUKKwkg KiBBY3F1aXJlRXhlY3V0b3JMb2NrcygpCisJICovCisJQml0bWFwc2V0ICAqbWluTG9ja1JlbGlk czsKKwogCS8qIE9JRHMgb2YgcmVsYXRpb25zIHRoZSBwbGFuIGRlcGVuZHMgb24gKi8KIAlMaXN0 CSAgICpyZWxhdGlvbk9pZHM7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5u b2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKaW5kZXggMmUyMDI4OTJhNy4u MGNhYjY5NThkNyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKKysr IGIvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKQEAgLTczLDggKzczLDE3IEBAIHR5cGVk ZWYgc3RydWN0IFBsYW5uZWRTdG10CiAJTGlzdAkgICAqcGFydFBydW5lSW5mb3M7CS8qIExpc3Qg b2YgUGFydGl0aW9uUHJ1bmVJbmZvIGNvbnRhaW5lZCBpbgogCQkJCQkJCQkgKiB0aGUgcGxhbiAq LwogCisJYm9vbAkJY29udGFpbnNJbml0aWFsUHJ1bmluZzsJLyogRG8gYW55IG9mIHRob3NlIFBh cnRpdGlvblBydW5lSW5mb3MKKwkJCQkJCQkJCQkgKiBoYXZlIGluaXRpYWwgcHJ1bmluZyBzdGVw cyBpbiB0aGVtPworCQkJCQkJCQkJCSAqLworCiAJTGlzdAkgICAqcnRhYmxlOwkJCS8qIGxpc3Qg b2YgUmFuZ2VUYmxFbnRyeSBub2RlcyAqLwogCisJQml0bWFwc2V0ICAqbWluTG9ja1JlbGlkczsJ LyogSW5kZXhlcyBvZiBhbGwgcmFuZ2UgdGFibGUgZW50cmllcyBtaW51cworCQkJCQkJCQkgKiBp bmRleGVzIG9mIHJhbmdlIHRhYmxlIGVudHJpZXMgb2YgdGhlIGxlYWYKKwkJCQkJCQkJICogcGFy dGl0aW9ucyBzY2FubmVkIGJ5IHBydW5hYmxlIHN1YnBsYW5zOworCQkJCQkJCQkgKiBzZWUgQWNx dWlyZUV4ZWN1dG9yTG9ja3MoKSAqLworCiAJLyogcnRhYmxlIGluZGV4ZXMgb2YgdGFyZ2V0IHJl bGF0aW9ucyBmb3IgSU5TRVJUL1VQREFURS9ERUxFVEUvTUVSR0UgKi8KIAlMaXN0CSAgICpyZXN1 bHRSZWxhdGlvbnM7CS8qIGludGVnZXIgbGlzdCBvZiBSVCBpbmRleGVzLCBvciBOSUwgKi8KIApA QCAtMTQxNCw2ICsxNDIzLDEzIEBAIHR5cGVkZWYgc3RydWN0IFBsYW5Sb3dNYXJrCiAgKiBwcnVu ZV9pbmZvcwkJCUxpc3Qgb2YgTGlzdHMgY29udGFpbmluZyBQYXJ0aXRpb25lZFJlbFBydW5lSW5m byBub2RlcywKICAqCQkJCQkJb25lIHN1Ymxpc3QgcGVyIHJ1bi10aW1lLXBydW5hYmxlIHBhcnRp dGlvbiBoaWVyYXJjaHkKICAqCQkJCQkJYXBwZWFyaW5nIGluIHRoZSBwYXJlbnQgcGxhbiBub2Rl J3Mgc3VicGxhbnMuCisgKgorICogbmVlZHNfaW5pdF9wcnVuaW5nCURvZXMgYW55IG9mIHRoZSBQ YXJ0aXRpb25lZFJlbFBydW5lSW5mb3MgaW4KKyAqCQkJCQkJcHJ1bmVfaW5mb3MgaGF2ZSBpdHMg aW5pdGlhbF9wcnVuaW5nX3N0ZXBzIHNldD8KKyAqCisgKiBuZWVkc19leGVjX3BydW5pbmcJRG9l cyBhbnkgb2YgdGhlIFBhcnRpdGlvbmVkUmVsUHJ1bmVJbmZvcyBpbgorICoJCQkJCQlwcnVuZV9p bmZvcyBoYXZlIGl0cyBleGVjX3BydW5pbmdfc3RlcHMgc2V0PworICoKICAqIG90aGVyX3N1YnBs YW5zCQlJbmRleGVzIG9mIGFueSBzdWJwbGFucyB0aGF0IGFyZSBub3QgYWNjb3VudGVkIGZvcgog ICoJCQkJCQlieSBhbnkgb2YgdGhlIFBhcnRpdGlvbmVkUmVsUHJ1bmVJbmZvIG5vZGVzIGluCiAg KgkJCQkJCSJwcnVuZV9pbmZvcyIuICBUaGVzZSBzdWJwbGFucyBtdXN0IG5vdCBiZSBwcnVuZWQu CkBAIC0xNDI1LDYgKzE0NDEsOCBAQCB0eXBlZGVmIHN0cnVjdCBQYXJ0aXRpb25QcnVuZUluZm8K IAlOb2RlVGFnCQl0eXBlOwogCUJpdG1hcHNldCAgKnJvb3RfcGFyZW50X3JlbGlkczsKIAlMaXN0 CSAgICpwcnVuZV9pbmZvczsKKwlib29sCQluZWVkc19pbml0X3BydW5pbmc7CisJYm9vbAkJbmVl ZHNfZXhlY19wcnVuaW5nOwogCUJpdG1hcHNldCAgKm90aGVyX3N1YnBsYW5zOwogfSBQYXJ0aXRp b25QcnVuZUluZm87CiAKQEAgLTE0NjksNiArMTQ4Nyw5IEBAIHR5cGVkZWYgc3RydWN0IFBhcnRp dGlvbmVkUmVsUHJ1bmVJbmZvCiAJLyogcmVsYXRpb24gT0lEIGJ5IHBhcnRpdGlvbiBpbmRleCwg b3IgMCAqLwogCU9pZAkJICAgKnJlbGlkX21hcCBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShucGFy dHMpKTsKIAorCS8qIFJhbmdlIHRhYmxlIGluZGV4IGJ5IHBhcnRpdGlvbiBpbmRleCwgb3IgMC4g Ki8KKwlJbmRleAkgICAqcnRpX21hcCBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShucGFydHMpKTsK KwogCS8qCiAJICogaW5pdGlhbF9wcnVuaW5nX3N0ZXBzIHNob3dzIGhvdyB0byBwcnVuZSBkdXJp bmcgZXhlY3V0b3Igc3RhcnR1cCAoaS5lLiwKIAkgKiB3aXRob3V0IHVzZSBvZiBhbnkgUEFSQU1f RVhFQyBQYXJhbXMpOyBpdCBpcyBOSUwgaWYgbm8gc3RhcnR1cCBwcnVuaW5nCkBAIC0xNTUzLDYg KzE1NzQsMzEgQEAgdHlwZWRlZiBzdHJ1Y3QgUGFydGl0aW9uUHJ1bmVTdGVwQ29tYmluZQogCUxp c3QJICAgKnNvdXJjZV9zdGVwaWRzOwogfSBQYXJ0aXRpb25QcnVuZVN0ZXBDb21iaW5lOwogCisv Ki0tLS0tLS0tLS0tLS0tLS0KKyAqIFBhcnRpdGlvblBydW5lUmVzdWx0CisgKgorICogVGhlIHJl c3VsdCBvZiBwZXJmb3JtaW5nIEV4ZWNQYXJ0aXRpb25Eb0luaXRpYWxQcnVuaW5nKCkgb24gYSBn aXZlbgorICogUGFydGl0aW9uUHJ1bmVJbmZvLgorICoKKyAqIHZhbGlkX3N1YnBsYW5zX29mZnMg Y29udGFpbnMgdGhlIGluZGV4ZXMgb2Ygc3VicGxhbnMgcmVtYWluaW5nIGFmdGVyCisgKiBwZXJm b3JtaW5nIGluaXRpYWwgcHJ1bmluZyBieSBjYWxsaW5nIEV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFu cygpIG9uIHRoZQorICogUGFydGl0aW9uUHJ1bmVJbmZvLgorICoKKyAqIFRoaXMgaXMgdXNlZCB0 byBzdG9yZSB0aGUgcmVzdWx0IG9mIGluaXRpYWwgcGFydGl0aW9uIHBydW5pbmcgdGhhdCBpcwor ICogcGVmb3JtZWQgYmVmb3JlIHRoZSBleGVjdXRpb24gaGFzIHN0YXJ0ZWQuICBBIG1vZHVsZSB0 aGF0IG5lZWRzIHRvIGRvIHNvCisgKiBzaG91bGQgY2FsbCBFeGVjdXRvckRvSW5pdGlhbFBydW5p bmcoKSBvbiBhIGdpdmVuIFBsYW5uZWRTdG10LCB3aGljaAorICogcmV0dXJucyBhIExpc3Qgb2Yg UGFydGl0aW9uUHJ1bmVSZXN1bHQgY29udGFpbmluZyBhbiBlbnRyeSBmb3IgZWFjaAorICogUGFy dGl0aW9uUHJ1bmVJbmZvIHByZXNlbnQgaW4gUGxhbm5lZFN0bXQucGFydF9wcnVuZV9pbmZvcy4g IFRoZSBtb2R1bGUKKyAqIHNob3VsZCB0aGVuIHBhc3MgdGhhdCBsaXN0LCBhbG9uZyB3aXRoIHRo ZSBQbGFubmVkU3RtdCwgdG8gdGhlIGV4ZWN1dG9yLAorICogc28gdGhhdCBpdCBjYW4gcmV1c2Ug dGhlIHJlc3VsdCBvZiBpbml0aWFsIHBhcnRpdGlvbiBwcnVuaW5nIHdoZW4KKyAqIGluaXRpYWxp emluZyB0aGUgc3VicGxhbnMgZm9yIGV4ZWN1dGlvbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgUGFy dGl0aW9uUHJ1bmVSZXN1bHQKK3sKKwlOb2RlVGFnCQl0eXBlOworCisJQml0bWFwc2V0CSAgICp2 YWxpZF9zdWJwbGFuX29mZnM7Cit9IFBhcnRpdGlvblBydW5lUmVzdWx0OwogCiAvKgogICogUGxh biBpbnZhbGlkYXRpb24gaW5mbwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvcGxhbmNh Y2hlLmggYi9zcmMvaW5jbHVkZS91dGlscy9wbGFuY2FjaGUuaAppbmRleCAwNDk5NjM1ZjU5Li4z MjU3OWQ0Nzg4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9wbGFuY2FjaGUuaAorKysg Yi9zcmMvaW5jbHVkZS91dGlscy9wbGFuY2FjaGUuaApAQCAtMjIwLDcgKzIyMCw4IEBAIGV4dGVy biBMaXN0ICpDYWNoZWRQbGFuR2V0VGFyZ2V0TGlzdChDYWNoZWRQbGFuU291cmNlICpwbGFuc291 cmNlLAogZXh0ZXJuIENhY2hlZFBsYW4gKkdldENhY2hlZFBsYW4oQ2FjaGVkUGxhblNvdXJjZSAq cGxhbnNvdXJjZSwKIAkJCQkJCQkJIFBhcmFtTGlzdEluZm8gYm91bmRQYXJhbXMsCiAJCQkJCQkJ CSBSZXNvdXJjZU93bmVyIG93bmVyLAotCQkJCQkJCQkgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlF bnYpOworCQkJCQkJCQkgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYsCisJCQkJCQkJCSBMaXN0 ICoqcGFydF9wcnVuZV9yZXN1bHRzX2xpc3QpOwogZXh0ZXJuIHZvaWQgUmVsZWFzZUNhY2hlZFBs YW4oQ2FjaGVkUGxhbiAqcGxhbiwgUmVzb3VyY2VPd25lciBvd25lcik7CiAKIGV4dGVybiBib29s IENhY2hlZFBsYW5BbGxvd3NTaW1wbGVWYWxpZGl0eUNoZWNrKENhY2hlZFBsYW5Tb3VyY2UgKnBs YW5zb3VyY2UsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9wb3J0YWwuaCBiL3NyYy9p bmNsdWRlL3V0aWxzL3BvcnRhbC5oCmluZGV4IGFlZGRiZGFmZTUuLjE5MDFmYzVmMjggMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3BvcnRhbC5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxz L3BvcnRhbC5oCkBAIC0xMzgsNiArMTM4LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUG9ydGFsRGF0YQog CVF1ZXJ5Q29tcGxldGlvbiBxYzsJCQkvKiBjb21tYW5kIGNvbXBsZXRpb24gZGF0YSBmb3IgZXhl Y3V0ZWQgcXVlcnkgKi8KIAlMaXN0CSAgICpzdG10czsJCQkvKiBsaXN0IG9mIFBsYW5uZWRTdG10 cyAqLwogCUNhY2hlZFBsYW4gKmNwbGFuOwkJCS8qIENhY2hlZFBsYW4sIGlmIHN0bXRzIGFyZSBm cm9tIG9uZSAqLworCUxpc3QJICAgKnBhcnRfcHJ1bmVfcmVzdWx0c19saXN0OwkvKiBMaXN0IG9m IExpc3RzIG9mIFBhcnRpdGlvblBydW5lUmVzdWx0cyAqLwogCiAJUGFyYW1MaXN0SW5mbyBwb3J0 YWxQYXJhbXM7IC8qIHBhcmFtcyB0byBwYXNzIHRvIHF1ZXJ5ICovCiAJUXVlcnlFbnZpcm9ubWVu dCAqcXVlcnlFbnY7IC8qIGVudmlyb25tZW50IGZvciBxdWVyeSAqLwpAQCAtMjQyLDYgKzI0Myw4 IEBAIGV4dGVybiB2b2lkIFBvcnRhbERlZmluZVF1ZXJ5KFBvcnRhbCBwb3J0YWwsCiAJCQkJCQkJ ICBDb21tYW5kVGFnIGNvbW1hbmRUYWcsCiAJCQkJCQkJICBMaXN0ICpzdG10cywKIAkJCQkJCQkg IENhY2hlZFBsYW4gKmNwbGFuKTsKK2V4dGVybiB2b2lkIFBvcnRhbFN0b3JlUGFydGl0aW9uUHJ1 bmVSZXN1bHRzKFBvcnRhbCBwb3J0YWwsCisJCQkJCQkJCQkJCSBMaXN0ICpwYXJ0X3BydW5lX3Jl c3VsdHNfbGlzdCk7CiBleHRlcm4gUGxhbm5lZFN0bXQgKlBvcnRhbEdldFByaW1hcnlTdG10KFBv cnRhbCBwb3J0YWwpOwogZXh0ZXJuIHZvaWQgUG9ydGFsQ3JlYXRlSG9sZFN0b3JlKFBvcnRhbCBw b3J0YWwpOwogZXh0ZXJuIHZvaWQgUG9ydGFsSGFzaFRhYmxlRGVsZXRlQWxsKHZvaWQpOwotLSAK Mi4zNS4zCgo= --00000000000062068905eec39225--