Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1eiZQh-0005ml-9o for pgsql-hackers@arkaria.postgresql.org; Mon, 05 Feb 2018 05:34:59 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eiZQf-0003aC-2T for pgsql-hackers@arkaria.postgresql.org; Mon, 05 Feb 2018 05:34:57 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1eiZQe-0003a3-P0 for pgsql-hackers@lists.postgresql.org; Mon, 05 Feb 2018 05:34:56 +0000 Received: from tama50.ecl.ntt.co.jp ([129.60.39.147]) by magus.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1eiZQS-0000pb-D1 for pgsql-hackers@lists.postgresql.org; Mon, 05 Feb 2018 05:34:54 +0000 Received: from vc2.ecl.ntt.co.jp (vc2.ecl.ntt.co.jp [129.60.86.154]) by tama50.ecl.ntt.co.jp (8.13.8/8.13.8) with ESMTP id w155Yexh030285 for ; Mon, 5 Feb 2018 14:34:40 +0900 Received: from vc2.ecl.ntt.co.jp (localhost [127.0.0.1]) by vc2.ecl.ntt.co.jp (Postfix) with ESMTP id 73607638CA9; Mon, 5 Feb 2018 14:34:40 +0900 (JST) Received: from jcms-pop21.ecl.ntt.co.jp (jcms-pop21.ecl.ntt.co.jp [129.60.87.134]) by vc2.ecl.ntt.co.jp (Postfix) with ESMTP id 5B4C06380B7; Mon, 5 Feb 2018 14:34:40 +0900 (JST) Received: from [127.0.0.1] (unknown [129.60.241.61]) by jcms-pop21.ecl.ntt.co.jp (Postfix) with ESMTPSA id 4A03840081E; Mon, 5 Feb 2018 14:34:40 +0900 (JST) Subject: Re: non-bulk inserts and tuple routing References: <8975331d-d961-cbdd-f862-fdd3d97dc2d0@lab.ntt.co.jp> <56c9f77b-830c-4652-233e-a1c5fa5a9938@lab.ntt.co.jp> <8f53a342-e0df-4fc9-7422-c3c3c601117c@lab.ntt.co.jp> <5A69A3B7.10403@lab.ntt.co.jp> <37f7cc10-def8-b2d0-615d-dfe035e7b1ee@lab.ntt.co.jp> <5A70396A.8090400@lab.ntt.co.jp> <8399fd28-07c2-3cbc-f807-f89cdf2f98f5@lab.ntt.co.jp> <5A704055.40207@lab.ntt.co.jp> <5A7443DF.1010408@lab.ntt.co.jp> From: Amit Langote Message-ID: <14870d0e-d9d4-2ab9-ddfe-182b3c8abfca@lab.ntt.co.jp> Date: Mon, 5 Feb 2018 14:34:25 +0900 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.5.2 MIME-Version: 1.0 In-Reply-To: <5A7443DF.1010408@lab.ntt.co.jp> Content-Type: multipart/mixed; boundary="------------F58884C9FDD105105B92EA91" Content-Language: en-US X-CC-Mail-RelayStamp: 1 To: Etsuro Fujita Cc: pgsql-hackers@lists.postgresql.org X-TM-AS-MML: disable List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk This is a multi-part message in MIME format. --------------F58884C9FDD105105B92EA91 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Fujita-san, Thank you for the review. On 2018/02/02 19:56, Etsuro Fujita wrote: > (2018/01/30 18:52), Etsuro Fujita wrote: >> (2018/01/30 18:39), Amit Langote wrote: >>> Will wait for your comments before sending a new version then. >> >> Ok, I'll post my comments as soon as possible. > > * ExecInitPartitionResultRelInfo is called from ExecFindPartition, but we > could call that another way; in ExecInsert/CopyFrom we call that after > ExecFindPartition if the partition chosen by ExecFindPartition has not > been initialized yet.  Maybe either would be OK, but I like that because I > think that would not only better divide that labor but better fit into the > existing code in ExecInsert/CopyFrom IMO. I see no problem with that, so done that way. > * In ExecInitPartitionResultRelInfo: > +       /* > +        * Note that the entries in this list appear in no predetermined > +        * order as result of initializing partition result rels as and when > +        * they're needed. > +        */ > +       estate->es_leaf_result_relations = > + lappend(estate->es_leaf_result_relations, > +                                           leaf_part_rri); > > Is it OK to put this within the "if (leaf_part_rri == NULL)" block? Good catch. I moved it outside the block. I was under the impression that leaf result relations that were reused from the mtstate->resultRelInfo arrary would have already been added to the list, but it seems they are not. > * In the same function: > +   /* > +    * Verify result relation is a valid target for INSERT. > +    */ > +   CheckValidResultRel(leaf_part_rri, CMD_INSERT); > > I think it would be better to leave the previous comments as-is here: > >         /* >          * Verify result relation is a valid target for an INSERT.  An UPDATE >          * of a partition-key becomes a DELETE+INSERT operation, so this > check >          * is still required when the operation is CMD_UPDATE. >          */ Oops, my bad. Didn't notice that I had ended up removing the part about UPDATE. > * ExecInitPartitionResultRelInfo does the work other than the > initialization of ResultRelInfo for the chosen partition (eg, create a > tuple conversion map to convert a tuple routed to the partition from the > parent's type to the partition's).  So I'd propose to rename that function > to eg, ExecInitPartition. I went with ExevInitPartitionInfo. > * CopyFrom is modified so that it calls ExecSetupPartitionTupleRouting and > ExecFindPartition with a mostly-dummy ModifyTableState node.  I'm not sure > that is a good idea.  My concern about that is that might be something > like a headache in future development. OK, I removed those changes. > * The patch 0001 and 0002 are pretty small but can't be reviewed without > the patch 0003.  The total size of the three patches aren't that large, so > I think it would be better to put those patches together into a single patch. As I said above, I got rid of 0001. Then, I merged the ExecFindPartition() refactoring patch 0002 into 0003. The code in tupconv_map_for_subplan() currently assumes that it can rely on all leaf partitions having been initialized. Since we're breaking that assumption with this proposal, that needed to be changed. So the patch contained some refactoring to make it not rely on that assumption. I carved that out into a separate patch which can be applied and tested before the main patch. > That's all for now.  I'll continue to review the patches! Here is the updated version that contains two patches as described above. Thanks, Amit --------------F58884C9FDD105105B92EA91 Content-Type: text/plain; charset=UTF-8; name="v24-0001-Refactor-partition-tuple-conversion-maps-handlin.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename*0="v24-0001-Refactor-partition-tuple-conversion-maps-handlin.pa"; filename*1="tch" RnJvbSAwM2VjNjMzODUyNTFmMzFiZGY5NTAwNjI1ODYxN2QxMGVkYTk0NzA5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBhbWl0IDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4K RGF0ZTogTW9uLCA1IEZlYiAyMDE4IDEzOjM4OjA1ICswOTAwClN1YmplY3Q6IFtQQVRDSCB2 MjQgMS8yXSBSZWZhY3RvciBwYXJ0aXRpb24gdHVwbGUgY29udmVyc2lvbiBtYXBzIGhhbmRs aW5nCiBjb2RlCgp0dXBjb252X21hcF9mb3Jfc3VicGxhbigpIGN1cnJlbnRseSBhc3N1bWVz IHRoYXQgaXQgZ2V0cyB0byB1c2UKdGhlIFJlbGF0aW9uIHBvaW50ZXIgZm9yICphbGwqIGxl YWYgcGFydGl0aW9ucy4gIFRoYXQgaXMsIGJvdGggdGhvc2UKdGhhdCBleGlzdCBpbiBtdHN0 YXRlLT5yZXN1bHRSZWxJbmZvIGFycmF5IGFuZCB0aG9zZSB0aGF0IGRvbid0IGFuZApoZW5j ZSB3b3VsZCBiZSBpbml0aWFsaXplZCBieSBFeGVjU2V0dXBQYXJ0aXRpb25UdXBsZVJvdXRp bmcoKS4KSG93ZXZlciwgYW4gdXBjb21pbmcgcGF0Y2ggd2lsbCBjaGFuZ2UgRXhlY1NldHVw UGFydGl0aW9uVHVwbGVSb3V0aW5nCnN1Y2ggdGhhdCBsZWFmIHBhcnRpdGlvbnMnIFJlc3Vs dFJlbEluZm8gYXJlIG5vIGxvbmdlciBpbml0aWFsaXplZAp0aGVyZS4gIFNvIG1ha2UgaXQg c3RvcCByZWx5aW5nIG9uIHRoZSBsYXR0ZXIuCi0tLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY1BhcnRpdGlvbi5jICAgfCA4NyArKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0t LS0tCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYyB8IDIzICsrLS0t LS0tLQogc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oICAgfCAgMiArCiAz IGZpbGVzIGNoYW5nZWQsIDczIGluc2VydGlvbnMoKyksIDM5IGRlbGV0aW9ucygtKQoKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uYyBiL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uYwppbmRleCAxMDZhOTZkOTEwLi5mMmE5 MjBmNGMzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9u LmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jCkBAIC0zNzMs NDAgKzM3Myw4OSBAQCBFeGVjU2V0dXBDaGlsZFBhcmVudE1hcEZvckxlYWYoUGFydGl0aW9u VHVwbGVSb3V0aW5nICpwcm91dGUpCiB9CiAKIC8qCi0gKiBUdXBDb252TWFwRm9yTGVhZiAt LSBHZXQgdGhlIHR1cGxlIGNvbnZlcnNpb24gbWFwIGZvciBhIGdpdmVuIGxlYWYgcGFydGl0 aW9uCi0gKiBpbmRleC4KKyAqIENoaWxkUGFyZW50VHVwQ29udk1hcCAtLSBSZXR1cm4gdHVw bGUgY29udmVyc2lvbiBtYXAgdG8gY29udmVydCB0dXBsZXMgb2YKKyAqCQkJCQkJCSdwYXJ0 cmVsJyBpbnRvIHRob3NlIG9mICdyb290cmVsJworICoKKyAqIElmIHRoZSBmdW5jdGlvbiB3 YXMgcHJldmlvdXNseSBjYWxsZWQgZm9yIHRoaXMgcGFydGl0aW9uLCB3ZSB3b3VsZCd2ZQor ICogZWl0aGVyIGFscmVhZHkgY3JlYXRlZCB0aGUgbWFwIGFuZCBzdG9yZWQgdGhlIHNhbWUg YXQKKyAqIHByb3V0ZS0+Y2hpbGRfcGFyZW50X3R1cGNvbnZfbWFwc1tpbmRleF0gb3IgZm91 bmQgb3V0IHRoYXQgc3VjaCBhIG1hcAorICogaXMgbm90IG5lZWRlZCBhbmQgdGh1cyBzZXQg cHJvdXRlLT5jaGlsZF9wYXJlbnRfbWFwX25vdF9yZXF1aXJlZFtpbmRleF0uCiAgKi8KLVR1 cGxlQ29udmVyc2lvbk1hcCAqCi1UdXBDb252TWFwRm9yTGVhZihQYXJ0aXRpb25UdXBsZVJv dXRpbmcgKnByb3V0ZSwKLQkJCQkgIFJlc3VsdFJlbEluZm8gKnJvb3RSZWxJbmZvLCBpbnQg bGVhZl9pbmRleCkKK3N0YXRpYyBUdXBsZUNvbnZlcnNpb25NYXAgKgorQ2hpbGRQYXJlbnRU dXBDb252TWFwKFJlbGF0aW9uIHBhcnRyZWwsIFJlbGF0aW9uIHJvb3RyZWwsCisJCQkJCSAg UGFydGl0aW9uVHVwbGVSb3V0aW5nICpwcm91dGUsIGludCBpbmRleCkKIHsKLQlSZXN1bHRS ZWxJbmZvICoqcmVzdWx0UmVsSW5mb3MgPSBwcm91dGUtPnBhcnRpdGlvbnM7Ci0JVHVwbGVD b252ZXJzaW9uTWFwICoqbWFwOwotCVR1cGxlRGVzYwl0dXBkZXNjOworCVR1cGxlQ29udmVy c2lvbk1hcCAqbWFwOwogCiAJLyogRG9uJ3QgY2FsbCB0aGlzIGlmIHdlJ3JlIG5vdCBzdXBw b3NlZCB0byBiZSB1c2luZyB0aGlzIHR5cGUgb2YgbWFwLiAqLwogCUFzc2VydChwcm91dGUt PmNoaWxkX3BhcmVudF90dXBjb252X21hcHMgIT0gTlVMTCk7CiAKIAkvKiBJZiBpdCdzIGFs cmVhZHkga25vd24gdGhhdCB3ZSBkb24ndCBuZWVkIGEgbWFwLCByZXR1cm4gTlVMTC4gKi8K LQlpZiAocHJvdXRlLT5jaGlsZF9wYXJlbnRfbWFwX25vdF9yZXF1aXJlZFtsZWFmX2luZGV4 XSkKKwlpZiAocHJvdXRlLT5jaGlsZF9wYXJlbnRfbWFwX25vdF9yZXF1aXJlZFtpbmRleF0p CiAJCXJldHVybiBOVUxMOwogCiAJLyogSWYgd2UndmUgYWxyZWFkeSBnb3QgYSBtYXAsIHJl dHVybiBpdC4gKi8KLQltYXAgPSAmcHJvdXRlLT5jaGlsZF9wYXJlbnRfdHVwY29udl9tYXBz W2xlYWZfaW5kZXhdOwotCWlmICgqbWFwICE9IE5VTEwpCi0JCXJldHVybiAqbWFwOworCW1h cCA9IHByb3V0ZS0+Y2hpbGRfcGFyZW50X3R1cGNvbnZfbWFwc1tpbmRleF07CisJaWYgKG1h cCAhPSBOVUxMKQorCQlyZXR1cm4gbWFwOwogCiAJLyogTm8gbWFwIHlldDsgdHJ5IHRvIGNy ZWF0ZSBvbmUuICovCi0JdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVzdWx0UmVsSW5m b3NbbGVhZl9pbmRleF0tPnJpX1JlbGF0aW9uRGVzYyk7Ci0JKm1hcCA9Ci0JCWNvbnZlcnRf dHVwbGVzX2J5X25hbWUodHVwZGVzYywKLQkJCQkJCQkgICBSZWxhdGlvbkdldERlc2NyKHJv b3RSZWxJbmZvLT5yaV9SZWxhdGlvbkRlc2MpLAotCQkJCQkJCSAgIGdldHRleHRfbm9vcCgi Y291bGQgbm90IGNvbnZlcnQgcm93IHR5cGUiKSk7CisJbWFwID0gY29udmVydF90dXBsZXNf YnlfbmFtZShSZWxhdGlvbkdldERlc2NyKHBhcnRyZWwpLAorCQkJCQkJCQkgUmVsYXRpb25H ZXREZXNjcihyb290cmVsKSwKKwkJCQkJCQkJIGdldHRleHRfbm9vcCgiY291bGQgbm90IGNv bnZlcnQgcm93IHR5cGUiKSk7CiAKIAkvKiBJZiBpdCB0dXJucyBvdXQgbm8gbWFwIGlzIG5l ZWRlZCwgcmVtZW1iZXIgZm9yIG5leHQgdGltZS4gKi8KLQlwcm91dGUtPmNoaWxkX3BhcmVu dF9tYXBfbm90X3JlcXVpcmVkW2xlYWZfaW5kZXhdID0gKCptYXAgPT0gTlVMTCk7CisJcHJv dXRlLT5jaGlsZF9wYXJlbnRfbWFwX25vdF9yZXF1aXJlZFtpbmRleF0gPSAobWFwID09IE5V TEwpOworCisJcmV0dXJuIG1hcDsKK30KKworLyoKKyAqIFR1cENvbnZNYXBGb3JMZWFmIC0t IEdldCB0aGUgdHVwbGUgY29udmVyc2lvbiBtYXAgZm9yIGEgZ2l2ZW4gbGVhZiBwYXJ0aXRp b24KKyAqIGluZGV4LgorICoKKyAqIENhbGwgdGhpcyBvbmx5IGlmIGl0J3Mga25vd24gdGhh dCB0aGUgcGFydGl0aW9uIGF0IGxlYWZfaW5kZXggaGFzIGJlZW4KKyAqIGluaXRpYWxpemVk LgorICovCitUdXBsZUNvbnZlcnNpb25NYXAgKgorVHVwQ29udk1hcEZvckxlYWYoUGFydGl0 aW9uVHVwbGVSb3V0aW5nICpwcm91dGUsCisJCQkJICBSZXN1bHRSZWxJbmZvICpyb290UmVs SW5mbywgaW50IGxlYWZfaW5kZXgpCit7CisJUmVzdWx0UmVsSW5mbyAqKnJlc3VsdHJlbHMg PSBwcm91dGUtPnBhcnRpdGlvbnM7CisKKwlBc3NlcnQocmVzdWx0cmVsc1tsZWFmX2luZGV4 XSAhPSBOVUxMKTsKIAotCXJldHVybiAqbWFwOworCXJldHVybiBDaGlsZFBhcmVudFR1cENv bnZNYXAocmVzdWx0cmVsc1tsZWFmX2luZGV4XS0+cmlfUmVsYXRpb25EZXNjLAorCQkJCQkJ CQkgcm9vdFJlbEluZm8tPnJpX1JlbGF0aW9uRGVzYywgcHJvdXRlLAorCQkJCQkJCQkgbGVh Zl9pbmRleCk7Cit9CisKKy8qCisgKiBUdXBDb252TWFwRm9yU3VicGxhbiAtLSBHZXQgdGhl IHR1cGxlIGNvbnZlcnNpb24gbWFwIGZvciBhIHBhcnRpdGlvbiBnaXZlbgorICogaXRzIHN1 YnBsYW4gaW5kZXguCisgKgorICogQ2FsbCB0aGlzIGlmIGl0J3MgdW5jbGVhciB3aGV0aGVy IHRoZSBwYXJ0aXRpb24ncyBSZXN1bHRSZWxJbmZvIGhhcyBiZWVuCisgKiBpbml0aWFsaXpl ZCBpbiBtdHN0YXRlLT5tdF9wYXJ0aXRpb25fdHVwbGVfcm91dGluZy4KKyAqLworVHVwbGVD b252ZXJzaW9uTWFwICoKK1R1cENvbnZNYXBGb3JTdWJwbGFuKE1vZGlmeVRhYmxlU3RhdGUg Km10c3RhdGUsIGludCBzdWJwbGFuX2luZGV4KQoreworCWludAkJbGVhZl9pbmRleDsKKwlQ YXJ0aXRpb25UdXBsZVJvdXRpbmcgKnByb3V0ZSA9IG10c3RhdGUtPm10X3BhcnRpdGlvbl90 dXBsZV9yb3V0aW5nOworCVJlc3VsdFJlbEluZm8gKnJlc3VsdHJlbHMgPSBtdHN0YXRlLT5y ZXN1bHRSZWxJbmZvLAorCQkJCSAgKnJvb3RSZWxJbmZvID0gKG10c3RhdGUtPnJvb3RSZXN1 bHRSZWxJbmZvICE9IE5VTEwpCisJCQkJCQkJCQk/IG10c3RhdGUtPnJvb3RSZXN1bHRSZWxJ bmZvCisJCQkJCQkJCQk6IG10c3RhdGUtPnJlc3VsdFJlbEluZm87CisKKwlBc3NlcnQocHJv dXRlICE9IE5VTEwgJiYKKwkJICAgcHJvdXRlLT5zdWJwbGFuX3BhcnRpdGlvbl9vZmZzZXRz ICE9IE5VTEwgJiYKKwkJICAgc3VicGxhbl9pbmRleCA8IHByb3V0ZS0+bnVtX3N1YnBsYW5f cGFydGl0aW9uX29mZnNldHMpOworCWxlYWZfaW5kZXggPSBwcm91dGUtPnN1YnBsYW5fcGFy dGl0aW9uX29mZnNldHNbc3VicGxhbl9pbmRleF07CisKKwlBc3NlcnQoc3VicGxhbl9pbmRl eCA+PSAwICYmIHN1YnBsYW5faW5kZXggPCBtdHN0YXRlLT5tdF9ucGxhbnMpOworCXJldHVy biBDaGlsZFBhcmVudFR1cENvbnZNYXAocmVzdWx0cmVsc1tzdWJwbGFuX2luZGV4XS5yaV9S ZWxhdGlvbkRlc2MsCisJCQkJCQkJCSByb290UmVsSW5mby0+cmlfUmVsYXRpb25EZXNjLAor CQkJCQkJCQkgcHJvdXRlLCBsZWFmX2luZGV4KTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMKaW5kZXggMmE4ZWNiZDgzMC4uZDA1NGRhNTMzMCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMKKysr IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMKQEAgLTE4MDQsMjcg KzE4MDQsMTAgQEAgdHVwY29udl9tYXBfZm9yX3N1YnBsYW4oTW9kaWZ5VGFibGVTdGF0ZSAq bXRzdGF0ZSwgaW50IHdoaWNocGxhbikKIAkgKiBhcnJheSAqb25seSogaWYgcGFydGl0aW9u LWluZGV4ZWQgYXJyYXkgaXMgbm90IHJlcXVpcmVkLgogCSAqLwogCWlmIChtdHN0YXRlLT5t dF9wZXJfc3VicGxhbl90dXBjb252X21hcHMgPT0gTlVMTCkKLQl7Ci0JCWludAkJCWxlYWZf aW5kZXg7Ci0JCVBhcnRpdGlvblR1cGxlUm91dGluZyAqcHJvdXRlID0gbXRzdGF0ZS0+bXRf cGFydGl0aW9uX3R1cGxlX3JvdXRpbmc7Ci0KLQkJLyoKLQkJICogSWYgc3VicGxhbi1pbmRl eGVkIGFycmF5IGlzIE5VTEwsIHRoaW5ncyBzaG91bGQgaGF2ZSBiZWVuIGFycmFuZ2VkCi0J CSAqIHRvIGNvbnZlcnQgdGhlIHN1YnBsYW4gaW5kZXggdG8gcGFydGl0aW9uIGluZGV4Lgot CQkgKi8KLQkJQXNzZXJ0KHByb3V0ZSAmJiBwcm91dGUtPnN1YnBsYW5fcGFydGl0aW9uX29m ZnNldHMgIT0gTlVMTCAmJgotCQkJICAgd2hpY2hwbGFuIDwgcHJvdXRlLT5udW1fc3VicGxh bl9wYXJ0aXRpb25fb2Zmc2V0cyk7CisJCXJldHVybiBUdXBDb252TWFwRm9yU3VicGxhbiht dHN0YXRlLCB3aGljaHBsYW4pOwogCi0JCWxlYWZfaW5kZXggPSBwcm91dGUtPnN1YnBsYW5f cGFydGl0aW9uX29mZnNldHNbd2hpY2hwbGFuXTsKLQotCQlyZXR1cm4gVHVwQ29udk1hcEZv ckxlYWYocHJvdXRlLCBnZXRUYXJnZXRSZXN1bHRSZWxJbmZvKG10c3RhdGUpLAotCQkJCQkJ CQkgbGVhZl9pbmRleCk7Ci0JfQotCWVsc2UKLQl7Ci0JCUFzc2VydCh3aGljaHBsYW4gPj0g MCAmJiB3aGljaHBsYW4gPCBtdHN0YXRlLT5tdF9ucGxhbnMpOwotCQlyZXR1cm4gbXRzdGF0 ZS0+bXRfcGVyX3N1YnBsYW5fdHVwY29udl9tYXBzW3doaWNocGxhbl07Ci0JfQorCUFzc2Vy dCh3aGljaHBsYW4gPj0gMCAmJiB3aGljaHBsYW4gPCBtdHN0YXRlLT5tdF9ucGxhbnMpOwor CXJldHVybiBtdHN0YXRlLT5tdF9wZXJfc3VicGxhbl90dXBjb252X21hcHNbd2hpY2hwbGFu XTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0 b3IvZXhlY1BhcnRpdGlvbi5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY1BhcnRpdGlv bi5oCmluZGV4IDNkZjljNDk4YmIuLmE3NWEzNzA2MGEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRv ci9leGVjUGFydGl0aW9uLmgKQEAgLTExMiw2ICsxMTIsOCBAQCBleHRlcm4gaW50IEV4ZWNG aW5kUGFydGl0aW9uKFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8sCiBleHRlcm4gdm9p ZCBFeGVjU2V0dXBDaGlsZFBhcmVudE1hcEZvckxlYWYoUGFydGl0aW9uVHVwbGVSb3V0aW5n ICpwcm91dGUpOwogZXh0ZXJuIFR1cGxlQ29udmVyc2lvbk1hcCAqVHVwQ29udk1hcEZvckxl YWYoUGFydGl0aW9uVHVwbGVSb3V0aW5nICpwcm91dGUsCiAJCQkJICBSZXN1bHRSZWxJbmZv ICpyb290UmVsSW5mbywgaW50IGxlYWZfaW5kZXgpOworZXh0ZXJuIFR1cGxlQ29udmVyc2lv bk1hcCAqVHVwQ29udk1hcEZvclN1YnBsYW4oTW9kaWZ5VGFibGVTdGF0ZSAqbXRzdGF0ZSwK KwkJCQlpbnQgc3VicGxhbl9pbmRleCk7CiBleHRlcm4gSGVhcFR1cGxlIENvbnZlcnRQYXJ0 aXRpb25UdXBsZVNsb3QoVHVwbGVDb252ZXJzaW9uTWFwICptYXAsCiAJCQkJCQkgIEhlYXBU dXBsZSB0dXBsZSwKIAkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKm5ld19zbG90LAotLSAKMi4x MS4wCgo= --------------F58884C9FDD105105B92EA91 Content-Type: text/plain; charset=UTF-8; name="v24-0002-During-tuple-routing-initialize-per-partition-ob.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename*0="v24-0002-During-tuple-routing-initialize-per-partition-ob.pa"; filename*1="tch" RnJvbSAzMTZjNTRlYjQ4ZDk5NzNhMjg1OWEzMWE5OTNkMDY1ZWZhNzkxMjk5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBhbWl0IDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4K RGF0ZTogVHVlLCAxOSBEZWMgMjAxNyAxNjoyMDowOSArMDkwMApTdWJqZWN0OiBbUEFUQ0gg djI0IDIvMl0gRHVyaW5nIHR1cGxlLXJvdXRpbmcsIGluaXRpYWxpemUgcGVyLXBhcnRpdGlv bgogb2JqZWN0cyBsYXppbHkKClRob3NlIG9iamVjdHMgaW5jbHVkZSBSZXN1bHRSZWxJbmZv LCB0dXBsZSBjb252ZXJzaW9uIG1hcCwKV0lUSCBDSEVDSyBPUFRJT04gcXVhbHMgYW5kIFJF VFVSTklORyBwcm9qZWN0aW9ucy4KClRoaXMgbWVhbnMgd2UgZG9uJ3QgYWxsb2NhdGUgdGhl c2Ugb2JqZWN0cyBmb3IgcGFydGl0aW9ucyB0aGF0IGFyZQpuZXZlciBpbnNlcnRlZCBpbnRv LgotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHkuYyAgICAgICAgICAgIHwgICA3ICst CiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMgICB8IDQwOSArKysrKysr KysrKysrKysrKysrKysrKy0tLS0tLS0tLS0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVN b2RpZnlUYWJsZS5jIHwgMTI4ICstLS0tLS0tLS0tCiBzcmMvaW5jbHVkZS9leGVjdXRvci9l eGVjUGFydGl0aW9uLmggICB8ICAgOCArLQogNCBmaWxlcyBjaGFuZ2VkLCAzMDIgaW5zZXJ0 aW9ucygrKSwgMjUwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2NvcHkuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHkuYwppbmRleCBiMzkz M2RmOWFmLi5kNjlkODhjOGE4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9j b3B5LmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weS5jCkBAIC0yNDcwLDcgKzI0 NzAsNyBAQCBDb3B5RnJvbShDb3B5U3RhdGUgY3N0YXRlKQogCQlQYXJ0aXRpb25UdXBsZVJv dXRpbmcgKnByb3V0ZTsKIAogCQlwcm91dGUgPSBjc3RhdGUtPnBhcnRpdGlvbl90dXBsZV9y b3V0aW5nID0KLQkJCUV4ZWNTZXR1cFBhcnRpdGlvblR1cGxlUm91dGluZyhOVUxMLCBjc3Rh dGUtPnJlbCwgMSwgZXN0YXRlKTsKKwkJCUV4ZWNTZXR1cFBhcnRpdGlvblR1cGxlUm91dGlu ZyhOVUxMLCBjc3RhdGUtPnJlbCk7CiAKIAkJLyoKIAkJICogSWYgd2UgYXJlIGNhcHR1cmlu ZyB0cmFuc2l0aW9uIHR1cGxlcywgdGhleSBtYXkgbmVlZCB0byBiZQpAQCAtMjU5MCw2ICsy NTkwLDEwIEBAIENvcHlGcm9tKENvcHlTdGF0ZSBjc3RhdGUpCiAJCQlBc3NlcnQobGVhZl9w YXJ0X2luZGV4ID49IDAgJiYKIAkJCQkgICBsZWFmX3BhcnRfaW5kZXggPCBwcm91dGUtPm51 bV9wYXJ0aXRpb25zKTsKIAorCQkJLyogSW5pdGlhbGl6ZSBwYXJ0aXRpb24gaW5mbywgaWYg bm90IGRvbmUgYWxyZWFkeS4gKi8KKwkJCUV4ZWNJbml0UGFydGl0aW9uSW5mbyhOVUxMLCBy ZXN1bHRSZWxJbmZvLCBwcm91dGUsIGVzdGF0ZSwKKwkJCQkJCQkJICBsZWFmX3BhcnRfaW5k ZXgpOworCiAJCQkvKgogCQkJICogSWYgdGhpcyB0dXBsZSBpcyBtYXBwZWQgdG8gYSBwYXJ0 aXRpb24gdGhhdCBpcyBub3Qgc2FtZSBhcyB0aGUKIAkJCSAqIHByZXZpb3VzIG9uZSwgd2Un ZCBiZXR0ZXIgbWFrZSB0aGUgYnVsayBpbnNlcnQgbWVjaGFuaXNtIGdldHMgYQpAQCAtMjYw Nyw2ICsyNjExLDcgQEAgQ29weUZyb20oQ29weVN0YXRlIGNzdGF0ZSkKIAkJCSAqLwogCQkJ c2F2ZWRfcmVzdWx0UmVsSW5mbyA9IHJlc3VsdFJlbEluZm87CiAJCQlyZXN1bHRSZWxJbmZv ID0gcHJvdXRlLT5wYXJ0aXRpb25zW2xlYWZfcGFydF9pbmRleF07CisJCQlBc3NlcnQocmVz dWx0UmVsSW5mbyAhPSBOVUxMKTsKIAogCQkJLyogV2UgZG8gbm90IHlldCBoYXZlIGEgd2F5 IHRvIGluc2VydCBpbnRvIGEgZm9yZWlnbiBwYXJ0aXRpb24gKi8KIAkJCWlmIChyZXN1bHRS ZWxJbmZvLT5yaV9GZHdSb3V0aW5lKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZXhlY1BhcnRpdGlvbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlv bi5jCmluZGV4IGYyYTkyMGY0YzMuLjYzODZkZWE1ZmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRv ci9leGVjUGFydGl0aW9uLmMKQEAgLTQ0LDIyICs0NCwyMyBAQCBzdGF0aWMgY2hhciAqRXhl Y0J1aWxkU2xvdFBhcnRpdGlvbktleURlc2NyaXB0aW9uKFJlbGF0aW9uIHJlbCwKICAqCiAg KiBOb3RlIHRoYXQgYWxsIHRoZSByZWxhdGlvbnMgaW4gdGhlIHBhcnRpdGlvbiB0cmVlIGFy ZSBsb2NrZWQgdXNpbmcgdGhlCiAgKiBSb3dFeGNsdXNpdmVMb2NrIG1vZGUgdXBvbiByZXR1 cm4gZnJvbSB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIFdoaWxlIHdlIGFsbG9jYXRlIHRoZSBh cnJheXMgb2YgcG9pbnRlcnMgb2YgdmFyaW91cyBvYmplY3RzIGZvciBhbGwKKyAqIHBhcnRp dGlvbnMgaGVyZSwgdGhlIG9iamVjdHMgdGhlbXNlbHZlcyBhcmUgbGF6aWx5IGFsbG9jYXRl ZCBhbmQKKyAqIGluaXRpYWxpemVkIGZvciBhIGdpdmVuIHBhcnRpdGlvbiBpZiBhIHR1cGxl IGlzIGFjdHVhbGx5IHJvdXRlZCB0byBpdDsKKyAqIHNlZSBFeGVjSW5pdFBhcnRpdGlvbklu Zm8uCiAgKi8KIFBhcnRpdGlvblR1cGxlUm91dGluZyAqCi1FeGVjU2V0dXBQYXJ0aXRpb25U dXBsZVJvdXRpbmcoTW9kaWZ5VGFibGVTdGF0ZSAqbXRzdGF0ZSwKLQkJCQkJCQkgICBSZWxh dGlvbiByZWwsIEluZGV4IHJlc3VsdFJUaW5kZXgsCi0JCQkJCQkJICAgRVN0YXRlICplc3Rh dGUpCitFeGVjU2V0dXBQYXJ0aXRpb25UdXBsZVJvdXRpbmcoTW9kaWZ5VGFibGVTdGF0ZSAq bXRzdGF0ZSwgUmVsYXRpb24gcmVsKQogewotCVR1cGxlRGVzYwl0dXBEZXNjID0gUmVsYXRp b25HZXREZXNjcihyZWwpOworCVBhcnRpdGlvblR1cGxlUm91dGluZyAqcHJvdXRlOwogCUxp c3QJICAgKmxlYWZfcGFydHM7CiAJTGlzdENlbGwgICAqY2VsbDsKLQlpbnQJCQlpOwotCVJl c3VsdFJlbEluZm8gKmxlYWZfcGFydF9hcnIgPSBOVUxMLAotCQkJICAgKnVwZGF0ZV9ycmkg PSBOVUxMOwotCWludAkJCW51bV91cGRhdGVfcnJpID0gMCwKLQkJCQl1cGRhdGVfcnJpX2lu ZGV4ID0gMDsKKwlpbnQJCQlsZWFmX2luZGV4LAorCQkJCXVwZGF0ZV9ycmlfaW5kZXgsCisJ CQkJbnVtX3VwZGF0ZV9ycmk7CiAJYm9vbAkJaXNfdXBkYXRlID0gZmFsc2U7Ci0JUGFydGl0 aW9uVHVwbGVSb3V0aW5nICpwcm91dGU7CisJUmVzdWx0UmVsSW5mbyAqdXBkYXRlX3JyaTsK IAogCS8qCiAJICogR2V0IHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGFydGl0aW9uIHRy ZWUgYWZ0ZXIgbG9ja2luZyBhbGwgdGhlCkBAIC03MSwyMCArNzIsMjQgQEAgRXhlY1NldHVw UGFydGl0aW9uVHVwbGVSb3V0aW5nKE1vZGlmeVRhYmxlU3RhdGUgKm10c3RhdGUsCiAJCVJl bGF0aW9uR2V0UGFydGl0aW9uRGlzcGF0Y2hJbmZvKHJlbCwgJnByb3V0ZS0+bnVtX2Rpc3Bh dGNoLAogCQkJCQkJCQkJCSAmbGVhZl9wYXJ0cyk7CiAJcHJvdXRlLT5udW1fcGFydGl0aW9u cyA9IGxpc3RfbGVuZ3RoKGxlYWZfcGFydHMpOwotCXByb3V0ZS0+cGFydGl0aW9ucyA9IChS ZXN1bHRSZWxJbmZvICoqKSBwYWxsb2MocHJvdXRlLT5udW1fcGFydGl0aW9ucyAqCi0JCQkJ CQkJCQkJCQkgICBzaXplb2YoUmVzdWx0UmVsSW5mbyAqKSk7CisJLyoKKwkgKiBBY3R1YWwg UmVzdWx0UmVsSW5mbydzIGFuZCBUdXBsZUNvbnZlcnNpb25NYXAncyBhcmUgYWxsb2NhdGVk IGluCisJICogRXhlY0luaXRSZXN1bHRSZWxJbmZvKCkuCisJICovCisJcHJvdXRlLT5wYXJ0 aXRpb25zID0gKFJlc3VsdFJlbEluZm8gKiopIHBhbGxvYzAocHJvdXRlLT5udW1fcGFydGl0 aW9ucyAqCisJCQkJCQkJCQkJCQkJc2l6ZW9mKFJlc3VsdFJlbEluZm8gKikpOwogCXByb3V0 ZS0+cGFyZW50X2NoaWxkX3R1cGNvbnZfbWFwcyA9CiAJCShUdXBsZUNvbnZlcnNpb25NYXAg KiopIHBhbGxvYzAocHJvdXRlLT5udW1fcGFydGl0aW9ucyAqCiAJCQkJCQkJCQkJc2l6ZW9m KFR1cGxlQ29udmVyc2lvbk1hcCAqKSk7CisJcHJvdXRlLT5wYXJ0aXRpb25fb2lkcyA9IChP aWQgKikgcGFsbG9jMChwcm91dGUtPm51bV9wYXJ0aXRpb25zICoKKwkJCQkJCQkJCQkJIHNp emVvZihPaWQpKTsKIAogCS8qIFNldCB1cCBkZXRhaWxzIHNwZWNpZmljIHRvIHRoZSB0eXBl IG9mIHR1cGxlIHJvdXRpbmcgd2UgYXJlIGRvaW5nLiAqLwogCWlmIChtdHN0YXRlICYmIG10 c3RhdGUtPm9wZXJhdGlvbiA9PSBDTURfVVBEQVRFKQogCXsKLQkJTW9kaWZ5VGFibGUgKm5v ZGUgPSAoTW9kaWZ5VGFibGUgKikgbXRzdGF0ZS0+cHMucGxhbjsKLQogCQlpc191cGRhdGUg PSB0cnVlOwogCQl1cGRhdGVfcnJpID0gbXRzdGF0ZS0+cmVzdWx0UmVsSW5mbzsKLQkJbnVt X3VwZGF0ZV9ycmkgPSBsaXN0X2xlbmd0aChub2RlLT5wbGFucyk7CisJCW51bV91cGRhdGVf cnJpID0gbXRzdGF0ZS0+bXRfbnBsYW5zOwogCQlwcm91dGUtPnN1YnBsYW5fcGFydGl0aW9u X29mZnNldHMgPQogCQkJcGFsbG9jKG51bV91cGRhdGVfcnJpICogc2l6ZW9mKGludCkpOwog CQlwcm91dGUtPm51bV9zdWJwbGFuX3BhcnRpdGlvbl9vZmZzZXRzID0gbnVtX3VwZGF0ZV9y cmk7CkBAIC05NSwxNSArMTAwLDI5IEBAIEV4ZWNTZXR1cFBhcnRpdGlvblR1cGxlUm91dGlu ZyhNb2RpZnlUYWJsZVN0YXRlICptdHN0YXRlLAogCQkgKi8KIAkJcHJvdXRlLT5yb290X3R1 cGxlX3Nsb3QgPSBNYWtlVHVwbGVUYWJsZVNsb3QoKTsKIAl9Ci0JZWxzZQorCisJbGVhZl9p bmRleCA9IHVwZGF0ZV9ycmlfaW5kZXggPSAwOworCWZvcmVhY2ggKGNlbGwsIGxlYWZfcGFy dHMpCiAJeworCQlPaWQJCWxlYWZfb2lkID0gbGZpcnN0X29pZChjZWxsKTsKKworCQlwcm91 dGUtPnBhcnRpdGlvbl9vaWRzW2xlYWZfaW5kZXhdID0gbGVhZl9vaWQ7CisKIAkJLyoKLQkJ ICogU2luY2Ugd2UgYXJlIGluc2VydGluZyB0dXBsZXMsIHdlIG5lZWQgdG8gY3JlYXRlIGFs bCBuZXcgcmVzdWx0Ci0JCSAqIHJlbHMuIEF2b2lkIHJlcGVhdGVkIHBhbGxvY3MgYnkgYWxs b2NhdGluZyBtZW1vcnkgZm9yIGFsbCB0aGUKLQkJICogcmVzdWx0IHJlbHMgaW4gYnVsay4K KwkJICogVGhlIHBlci1zdWJwbGFuIHJlc3VsdHJlbHMgYW5kIHRoZSByZXN1bHRyZWxzIG9m IHRoZSBsZWFmCisJCSAqIHBhcnRpdGlvbnMgYXJlIGJvdGggaW4gdGhlIHNhbWUgY2Fub25p Y2FsIG9yZGVyLiAgU28gd2hpbGUgZ29pbmcKKwkJICogdGhyb3VnaCB0aGUgbGVhZiBwYXJ0 aXRpb24gb2lkcywgd2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIHRoZQorCQkgKiBuZXh0IHBl ci1zdWJwbGFuIHJlc3VsdCByZWwgdG8gYmUgbG9va2VkIGZvciBpbiB0aGUgbGVhZgorCQkg KiBwYXJ0aXRpb24gcmVzdWx0cmVscy4KIAkJICovCi0JCWxlYWZfcGFydF9hcnIgPSAoUmVz dWx0UmVsSW5mbyAqKSBwYWxsb2MwKHByb3V0ZS0+bnVtX3BhcnRpdGlvbnMgKgotCQkJCQkJ CQkJCQkJICBzaXplb2YoUmVzdWx0UmVsSW5mbykpOworCQlpZiAoaXNfdXBkYXRlICYmIHVw ZGF0ZV9ycmlfaW5kZXggPCBudW1fdXBkYXRlX3JyaSAmJgorCQkJUmVsYXRpb25HZXRSZWxp ZCh1cGRhdGVfcnJpW3VwZGF0ZV9ycmlfaW5kZXhdLnJpX1JlbGF0aW9uRGVzYykgPT0gbGVh Zl9vaWQpCisJCXsKKwkJCXByb3V0ZS0+c3VicGxhbl9wYXJ0aXRpb25fb2Zmc2V0c1t1cGRh dGVfcnJpX2luZGV4XSA9IGxlYWZfaW5kZXg7CisJCQl1cGRhdGVfcnJpX2luZGV4Kys7CisJ CX0KKworCQlsZWFmX2luZGV4Kys7CiAJfQogCiAJLyoKQEAgLTExNCwxMDkgKzEzMyw2IEBA IEV4ZWNTZXR1cFBhcnRpdGlvblR1cGxlUm91dGluZyhNb2RpZnlUYWJsZVN0YXRlICptdHN0 YXRlLAogCSAqLwogCXByb3V0ZS0+cGFydGl0aW9uX3R1cGxlX3Nsb3QgPSBNYWtlVHVwbGVU YWJsZVNsb3QoKTsKIAotCWkgPSAwOwotCWZvcmVhY2goY2VsbCwgbGVhZl9wYXJ0cykKLQl7 Ci0JCVJlc3VsdFJlbEluZm8gKmxlYWZfcGFydF9ycmk7Ci0JCVJlbGF0aW9uCXBhcnRyZWwg PSBOVUxMOwotCQlUdXBsZURlc2MJcGFydF90dXBkZXNjOwotCQlPaWQJCQlsZWFmX29pZCA9 IGxmaXJzdF9vaWQoY2VsbCk7Ci0KLQkJaWYgKGlzX3VwZGF0ZSkKLQkJewotCQkJLyoKLQkJ CSAqIElmIHRoZSBsZWFmIHBhcnRpdGlvbiBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIHBl ci1zdWJwbGFuCi0JCQkgKiByZXN1bHQgcmVscywgd2UgcmUtdXNlIHRoYXQgcmF0aGVyIHRo YW4gaW5pdGlhbGl6ZSBhIG5ldyByZXN1bHQKLQkJCSAqIHJlbC4gVGhlIHBlci1zdWJwbGFu IHJlc3VsdHJlbHMgYW5kIHRoZSByZXN1bHRyZWxzIG9mIHRoZSBsZWFmCi0JCQkgKiBwYXJ0 aXRpb25zIGFyZSBib3RoIGluIHRoZSBzYW1lIGNhbm9uaWNhbCBvcmRlci4gU28gd2hpbGUg Z29pbmcKLQkJCSAqIHRocm91Z2ggdGhlIGxlYWYgcGFydGl0aW9uIG9pZHMsIHdlIG5lZWQg dG8ga2VlcCB0cmFjayBvZiB0aGUKLQkJCSAqIG5leHQgcGVyLXN1YnBsYW4gcmVzdWx0IHJl bCB0byBiZSBsb29rZWQgZm9yIGluIHRoZSBsZWFmCi0JCQkgKiBwYXJ0aXRpb24gcmVzdWx0 cmVscy4KLQkJCSAqLwotCQkJaWYgKHVwZGF0ZV9ycmlfaW5kZXggPCBudW1fdXBkYXRlX3Jy aSAmJgotCQkJCVJlbGF0aW9uR2V0UmVsaWQodXBkYXRlX3JyaVt1cGRhdGVfcnJpX2luZGV4 XS5yaV9SZWxhdGlvbkRlc2MpID09IGxlYWZfb2lkKQotCQkJewotCQkJCWxlYWZfcGFydF9y cmkgPSAmdXBkYXRlX3JyaVt1cGRhdGVfcnJpX2luZGV4XTsKLQkJCQlwYXJ0cmVsID0gbGVh Zl9wYXJ0X3JyaS0+cmlfUmVsYXRpb25EZXNjOwotCi0JCQkJLyoKLQkJCQkgKiBUaGlzIGlz IHJlcXVpcmVkIGluIG9yZGVyIHRvIHdlIGNvbnZlcnQgdGhlIHBhcnRpdGlvbidzCi0JCQkJ ICogdHVwbGUgdG8gYmUgY29tcGF0aWJsZSB3aXRoIHRoZSByb290IHBhcnRpdGlvbmVkIHRh YmxlJ3MKLQkJCQkgKiB0dXBsZSBkZXNjcmlwdG9yLiAgV2hlbiBnZW5lcmF0aW5nIHRoZSBw ZXItc3VicGxhbiByZXN1bHQKLQkJCQkgKiByZWxzLCB0aGlzIHdhcyBub3Qgc2V0LgotCQkJ CSAqLwotCQkJCWxlYWZfcGFydF9ycmktPnJpX1BhcnRpdGlvblJvb3QgPSByZWw7Ci0KLQkJ CQkvKiBSZW1lbWJlciB0aGUgc3VicGxhbiBvZmZzZXQgZm9yIHRoaXMgUmVzdWx0UmVsSW5m byAqLwotCQkJCXByb3V0ZS0+c3VicGxhbl9wYXJ0aXRpb25fb2Zmc2V0c1t1cGRhdGVfcnJp X2luZGV4XSA9IGk7Ci0KLQkJCQl1cGRhdGVfcnJpX2luZGV4Kys7Ci0JCQl9Ci0JCQllbHNl Ci0JCQkJbGVhZl9wYXJ0X3JyaSA9IChSZXN1bHRSZWxJbmZvICopIHBhbGxvYzAoc2l6ZW9m KFJlc3VsdFJlbEluZm8pKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCS8qIEZvciBJTlNFUlRz LCB3ZSBhbHJlYWR5IGhhdmUgYW4gYXJyYXkgb2YgcmVzdWx0IHJlbHMgYWxsb2NhdGVkICov Ci0JCQlsZWFmX3BhcnRfcnJpID0gJmxlYWZfcGFydF9hcnJbaV07Ci0JCX0KLQotCQkvKgot CQkgKiBJZiB3ZSBkaWRuJ3Qgb3BlbiB0aGUgcGFydGl0aW9uIHJlbCwgaXQgbWVhbnMgd2Ug aGF2ZW4ndAotCQkgKiBpbml0aWFsaXplZCB0aGUgcmVzdWx0IHJlbCBlaXRoZXIuCi0JCSAq LwotCQlpZiAoIXBhcnRyZWwpCi0JCXsKLQkJCS8qCi0JCQkgKiBXZSBsb2NrZWQgYWxsIHRo ZSBwYXJ0aXRpb25zIGFib3ZlIGluY2x1ZGluZyB0aGUgbGVhZgotCQkJICogcGFydGl0aW9u cy4gTm90ZSB0aGF0IGVhY2ggb2YgdGhlIG5ld2x5IG9wZW5lZCByZWxhdGlvbnMgaW4KLQkJ CSAqIHByb3V0ZS0+cGFydGl0aW9ucyBhcmUgZXZlbnR1YWxseSBjbG9zZWQgYnkgdGhlIGNh bGxlci4KLQkJCSAqLwotCQkJcGFydHJlbCA9IGhlYXBfb3BlbihsZWFmX29pZCwgTm9Mb2Nr KTsKLQkJCUluaXRSZXN1bHRSZWxJbmZvKGxlYWZfcGFydF9ycmksCi0JCQkJCQkJICBwYXJ0 cmVsLAotCQkJCQkJCSAgcmVzdWx0UlRpbmRleCwKLQkJCQkJCQkgIHJlbCwKLQkJCQkJCQkg IGVzdGF0ZS0+ZXNfaW5zdHJ1bWVudCk7Ci0JCX0KLQotCQlwYXJ0X3R1cGRlc2MgPSBSZWxh dGlvbkdldERlc2NyKHBhcnRyZWwpOwotCi0JCS8qCi0JCSAqIFNhdmUgYSB0dXBsZSBjb252 ZXJzaW9uIG1hcCB0byBjb252ZXJ0IGEgdHVwbGUgcm91dGVkIHRvIHRoaXMKLQkJICogcGFy dGl0aW9uIGZyb20gdGhlIHBhcmVudCdzIHR5cGUgdG8gdGhlIHBhcnRpdGlvbidzLgotCQkg Ki8KLQkJcHJvdXRlLT5wYXJlbnRfY2hpbGRfdHVwY29udl9tYXBzW2ldID0KLQkJCWNvbnZl cnRfdHVwbGVzX2J5X25hbWUodHVwRGVzYywgcGFydF90dXBkZXNjLAotCQkJCQkJCQkgICBn ZXR0ZXh0X25vb3AoImNvdWxkIG5vdCBjb252ZXJ0IHJvdyB0eXBlIikpOwotCi0JCS8qCi0J CSAqIFZlcmlmeSByZXN1bHQgcmVsYXRpb24gaXMgYSB2YWxpZCB0YXJnZXQgZm9yIGFuIElO U0VSVC4gIEFuIFVQREFURQotCQkgKiBvZiBhIHBhcnRpdGlvbi1rZXkgYmVjb21lcyBhIERF TEVURStJTlNFUlQgb3BlcmF0aW9uLCBzbyB0aGlzIGNoZWNrCi0JCSAqIGlzIHN0aWxsIHJl cXVpcmVkIHdoZW4gdGhlIG9wZXJhdGlvbiBpcyBDTURfVVBEQVRFLgotCQkgKi8KLQkJQ2hl Y2tWYWxpZFJlc3VsdFJlbChsZWFmX3BhcnRfcnJpLCBDTURfSU5TRVJUKTsKLQotCQkvKgot CQkgKiBPcGVuIHBhcnRpdGlvbiBpbmRpY2VzLiAgVGhlIHVzZXIgbWF5IGhhdmUgYXNrZWQg dG8gY2hlY2sgZm9yCi0JCSAqIGNvbmZsaWN0cyB3aXRoaW4gdGhpcyBsZWFmIHBhcnRpdGlv biBhbmQgZG8gIm5vdGhpbmciIGluc3RlYWQgb2YKLQkJICogdGhyb3dpbmcgYW4gZXJyb3Iu ICBCZSBwcmVwYXJlZCBpbiB0aGF0IGNhc2UgYnkgaW5pdGlhbGl6aW5nIHRoZQotCQkgKiBp bmRleCBpbmZvcm1hdGlvbiBuZWVkZWQgYnkgRXhlY0luc2VydCgpIHRvIHBlcmZvcm0gc3Bl Y3VsYXRpdmUKLQkJICogaW5zZXJ0aW9ucy4KLQkJICovCi0JCWlmIChsZWFmX3BhcnRfcnJp LT5yaV9SZWxhdGlvbkRlc2MtPnJkX3JlbC0+cmVsaGFzaW5kZXggJiYKLQkJCWxlYWZfcGFy dF9ycmktPnJpX0luZGV4UmVsYXRpb25EZXNjcyA9PSBOVUxMKQotCQkJRXhlY09wZW5JbmRp Y2VzKGxlYWZfcGFydF9ycmksCi0JCQkJCQkJbXRzdGF0ZSAhPSBOVUxMICYmCi0JCQkJCQkJ bXRzdGF0ZS0+bXRfb25jb25mbGljdCAhPSBPTkNPTkZMSUNUX05PTkUpOwotCi0JCWVzdGF0 ZS0+ZXNfbGVhZl9yZXN1bHRfcmVsYXRpb25zID0KLQkJCWxhcHBlbmQoZXN0YXRlLT5lc19s ZWFmX3Jlc3VsdF9yZWxhdGlvbnMsIGxlYWZfcGFydF9ycmkpOwotCi0JCXByb3V0ZS0+cGFy dGl0aW9uc1tpXSA9IGxlYWZfcGFydF9ycmk7Ci0JCWkrKzsKLQl9Ci0KIAkvKgogCSAqIEZv ciBVUERBVEUsIHdlIHNob3VsZCBoYXZlIGZvdW5kIGFsbCB0aGUgcGVyLXN1YnBsYW4gcmVz dWx0cmVscyBpbiB0aGUKIAkgKiBsZWFmIHBhcnRpdGlvbnMuCkBAIC0zNDUsNiArMjYxLDI0 NCBAQCBFeGVjRmluZFBhcnRpdGlvbihSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLCBQ YXJ0aXRpb25EaXNwYXRjaCAqcGQsCiAJcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIGlu dAorbGVhZnBhcnRfaW5kZXhfY21wKGNvbnN0IHZvaWQgKmFyZzEsIGNvbnN0IHZvaWQgKmFy ZzIpCit7CisJaW50CQlsZWFmaWR4MSA9ICooY29uc3QgaW50ICopIGFyZzE7CisJaW50CQls ZWFmaWR4MiA9ICooY29uc3QgaW50ICopIGFyZzI7CisKKwlpZiAobGVhZmlkeDEgPiBsZWFm aWR4MikKKwkJcmV0dXJuIDE7CisJZWxzZSBpZiAobGVhZmlkeDEgPCBsZWFmaWR4MikKKwkJ cmV0dXJuIC0xOworCXJldHVybiAwOworfQorCisvKgorICogRXhlY0luaXRQYXJ0aXRpb25J bmZvCisgKgkJSW5pdGlhbGl6ZSBSZXN1bHRSZWxJbmZvIGFuZCBvdGhlciBpbmZvcm1hdGlv biBmb3IgYSBwYXJ0aXRpb24gaWYgbm90CisgKgkJYWxyZWFkeSBkb25lCisgKi8KK3ZvaWQK K0V4ZWNJbml0UGFydGl0aW9uSW5mbyhNb2RpZnlUYWJsZVN0YXRlICptdHN0YXRlLAorCQkJ CQkgIFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8sCisJCQkJCSAgUGFydGl0aW9uVHVw bGVSb3V0aW5nICpwcm91dGUsCisJCQkJCSAgRVN0YXRlICplc3RhdGUsIGludCBwYXJ0aWR4 KQoreworCVJlbGF0aW9uCXBhcnRyZWwsCisJCQkJcm9vdHJlbDsKKwlSZXN1bHRSZWxJbmZv ICpsZWFmX3BhcnRfcnJpOworCisJLyogTm90aGluZyB0byBkbyBpZiBhbHJlYWR5IHNldC4g Ki8KKwlpZiAocHJvdXRlLT5wYXJ0aXRpb25zW3BhcnRpZHhdKQorCQlyZXR1cm47CisKKwls ZWFmX3BhcnRfcnJpID0gTlVMTDsKKwlyb290cmVsID0gcmVzdWx0UmVsSW5mby0+cmlfUmVs YXRpb25EZXNjOworCisJLyoKKwkgKiBJZiB3ZSBhcmUgZG9pbmcgdHVwbGUgcm91dGluZyBm b3IgdXBkYXRlLCB0cnkgdG8gcmV1c2UgdGhlCisJICogcGVyLXN1YnBsYW4gcmVzdWx0cmVs IGZvciB0aGlzIHBhcnRpdGlvbiB0aGF0IEV4ZWNJbml0TW9kaWZ5VGFibGUoKQorCSAqIG1p Z2h0IGFscmVhZHkgaGF2ZSBjcmVhdGVkLgorCSAqLworCWlmIChtdHN0YXRlICYmIG10c3Rh dGUtPm9wZXJhdGlvbiA9PSBDTURfVVBEQVRFKQorCXsKKwkJaW50ICAgKnBhcnRpZHhfZW50 cnk7CisKKwkJLyoKKwkJICogSWYgdGhlIHBhcnRpdGlvbidzIFJlc3VsdFJlbEluZm8gaGFz IGFscmVhZHkgYmVlbiBjcmVhdGVkLCB3ZSdkCisJCSAqIGZpbmQgaXRzIGluZGV4IGluIHBy b3V0ZS0+c3VicGxhbl9wYXJ0aXRpb25fb2Zmc2V0cy4KKwkJICovCisJCXBhcnRpZHhfZW50 cnkgPSAoaW50ICopIGJzZWFyY2goJnBhcnRpZHgsCisJCQkJCQkJCQkJcHJvdXRlLT5zdWJw bGFuX3BhcnRpdGlvbl9vZmZzZXRzLAorCQkJCQkJCQkJCW10c3RhdGUtPm10X25wbGFucywg c2l6ZW9mKGludCksCisJCQkJCQkJCQkJbGVhZnBhcnRfaW5kZXhfY21wKTsKKwkJaWYgKHBh cnRpZHhfZW50cnkpCisJCXsKKwkJCWludAkJdXBkYXRlX3JyaV9pbmRleCA9CisJCQkJCQkJ cGFydGlkeF9lbnRyeSAtIHByb3V0ZS0+c3VicGxhbl9wYXJ0aXRpb25fb2Zmc2V0czsKKwor CQkJQXNzZXJ0ICh1cGRhdGVfcnJpX2luZGV4IDwgbXRzdGF0ZS0+bXRfbnBsYW5zKTsKKwkJ CWxlYWZfcGFydF9ycmkgPSAmbXRzdGF0ZS0+cmVzdWx0UmVsSW5mb1t1cGRhdGVfcnJpX2lu ZGV4XTsKKwkJCXBhcnRyZWwgPSBsZWFmX3BhcnRfcnJpLT5yaV9SZWxhdGlvbkRlc2M7CisK KwkJCS8qCisJCQkgKiBUaGlzIGlzIHJlcXVpcmVkIGluIG9yZGVyIHRvIHdlIGNvbnZlcnQg dGhlIHBhcnRpdGlvbidzCisJCQkgKiB0dXBsZSB0byBiZSBjb21wYXRpYmxlIHdpdGggdGhl IHJvb3QgcGFydGl0aW9uZWQgdGFibGUncworCQkJICogdHVwbGUgZGVzY3JpcHRvci4gIFdo ZW4gZ2VuZXJhdGluZyB0aGUgcGVyLXN1YnBsYW4gcmVzdWx0CisJCQkgKiByZWxzLCB0aGlz IHdhcyBub3Qgc2V0LgorCQkJICovCisJCQlsZWFmX3BhcnRfcnJpLT5yaV9QYXJ0aXRpb25S b290ID0gcm9vdHJlbDsKKwkJfQorCX0KKworCS8qCisJICogQ3JlYXRlIG5ldyByZXN1bHQg cmVsLCBlaXRoZXIgaWYgd2UgYXJlICppbnNlcnRpbmcqIHRoZSBuZXcgdHVwbGUsIG9yCisJ ICogaWYgd2UgZGlkbid0IGZpbmQgdGhlIHJlc3VsdCByZWwgYWJvdmUgZm9yIHRoZSB1cGRh dGUgdHVwbGUgcm91dGluZworCSAqIGNhc2UuCisJICovCisJaWYgKGxlYWZfcGFydF9ycmkg PT0gTlVMTCkKKwl7CisJCWludAkJCWZpcnN0VmFybm87CisJCVJlbGF0aW9uCWZpcnN0UmVz dWx0UmVsOworCQlNb2RpZnlUYWJsZSAqbm9kZSA9IE5VTEw7CisKKwkJaWYgKG10c3RhdGUp CisJCXsKKwkJCW5vZGUgPSAoTW9kaWZ5VGFibGUgKikgbXRzdGF0ZS0+cHMucGxhbjsKKwkJ CWZpcnN0VmFybm8gPSBtdHN0YXRlLT5yZXN1bHRSZWxJbmZvWzBdLnJpX1JhbmdlVGFibGVJ bmRleDsKKwkJCWZpcnN0UmVzdWx0UmVsID0gbXRzdGF0ZS0+cmVzdWx0UmVsSW5mb1swXS5y aV9SZWxhdGlvbkRlc2M7CisJCX0KKworCQlsZWFmX3BhcnRfcnJpID0gKFJlc3VsdFJlbElu Zm8gKikgcGFsbG9jMChzaXplb2YoUmVzdWx0UmVsSW5mbykpOworCisJCS8qCisJCSAqIFdl IGxvY2tlZCBhbGwgdGhlIHBhcnRpdGlvbnMgaW4gRXhlY1NldHVwUGFydGl0aW9uVHVwbGVS b3V0aW5nCisJCSAqIGluY2x1ZGluZyB0aGUgbGVhZiBwYXJ0aXRpb25zLgorCQkgKi8KKwkJ cGFydHJlbCA9IGhlYXBfb3Blbihwcm91dGUtPnBhcnRpdGlvbl9vaWRzW3BhcnRpZHhdLCBO b0xvY2spOworCQlJbml0UmVzdWx0UmVsSW5mbyhsZWFmX3BhcnRfcnJpLAorCQkJCQkJICBw YXJ0cmVsLAorCQkJCQkJICBub2RlID8gbm9kZS0+bm9taW5hbFJlbGF0aW9uIDogMSwKKwkJ CQkJCSAgcm9vdHJlbCwKKwkJCQkJCSAgZXN0YXRlLT5lc19pbnN0cnVtZW50KTsKKworCQkv KgorCQkgKiBCdWlsZCBXSVRIIENIRUNLIE9QVElPTiBjb25zdHJhaW50cyBmb3IgdGhpcyBw YXJ0aXRpb24gcmVsLiAgTm90ZQorCQkgKiB0aGF0IHdlIGRpZG4ndCBidWlsZCB0aGUgd2l0 aENoZWNrT3B0aW9uTGlzdCBmb3IgZWFjaCBwYXJ0aXRpb24KKwkJICogd2l0aGluIHRoZSBw bGFubmVyLCBidXQgc2ltcGxlIHRyYW5zbGF0aW9uIG9mIHRoZSB2YXJhdHRub3Mgd2lsbAor CQkgKiBzdWZmaWNlLiAgVGhpcyBvbmx5IG9jY3VycyBmb3IgdGhlIElOU0VSVCBjYXNlIG9y IGluIHRoZSBjYXNlIG9mCisJCSAqIFVQREFURSBmb3Igd2hpY2ggd2UgZGlkbid0IGZpbmQg YSByZXN1bHQgcmVsIGFib3ZlIHRvIHJldXNlLgorCQkgKi8KKwkJaWYgKG5vZGUgJiYgbm9k ZS0+d2l0aENoZWNrT3B0aW9uTGlzdHMgIT0gTklMKQorCQl7CisJCQlMaXN0CSAgICp3Y29M aXN0OworCQkJTGlzdAkgICAqbWFwcGVkX3djb0xpc3Q7CisJCQlMaXN0CSAgICp3Y29FeHBy cyA9IE5JTDsKKwkJCUxpc3RDZWxsICAgKmxsOworCisJCQkvKgorCQkJICogSW4gdGhlIGNh c2Ugb2YgSU5TRVJUIG9uIHBhcnRpdGlvbmVkIHRhYmxlcywgdGhlcmUgaXMgb25seSBvbmUK KwkJCSAqIHBsYW4uICBMaWtld2lzZSwgdGhlcmUgaXMgb25seSBvbmUgV0NPIGxpc3QsIG5v dCBvbmUgcGVyCisJCQkgKiBwYXJ0aXRpb24uICBGb3IgVVBEQVRFLCB0aGVyZSB3b3VsZCBi ZSBhcyBtYW55IFdDTyBsaXN0cyBhcworCQkJICogdGhlcmUgYXJlIHBsYW5zLCBidXQgd2Ug dXNlIHRoZSBmaXJzdCBvbmUgYXMgcmVmZXJlbmNlLiAgTm90ZQorCQkJICogdGhhdCBpZiB0 aGVyZSBhcmUgU3ViUGxhbnMgaW4gdGhlcmUsIHRoZXkgYWxsIGVuZCB1cCBhdHRhY2hlZAor CQkJICogdG8gdGhlIG9uZSBwYXJlbnQgUGxhbiBub2RlLgorCQkJICovCisJCQlBc3NlcnQo KG5vZGUtPm9wZXJhdGlvbiA9PSBDTURfSU5TRVJUICYmCisJCQkJCWxpc3RfbGVuZ3RoKG5v ZGUtPndpdGhDaGVja09wdGlvbkxpc3RzKSA9PSAxICYmCisJCQkJCWxpc3RfbGVuZ3RoKG5v ZGUtPnBsYW5zKSA9PSAxKSB8fAorCQkJCSAgIChub2RlLT5vcGVyYXRpb24gPT0gQ01EX1VQ REFURSAmJgorCQkJCQlsaXN0X2xlbmd0aChub2RlLT53aXRoQ2hlY2tPcHRpb25MaXN0cykg PT0KKwkJCQkJbGlzdF9sZW5ndGgobm9kZS0+cGxhbnMpKSk7CisJCQl3Y29MaXN0ID0gbGlu aXRpYWwobm9kZS0+d2l0aENoZWNrT3B0aW9uTGlzdHMpOworCisJCQltYXBwZWRfd2NvTGlz dCA9IG1hcF9wYXJ0aXRpb25fdmFyYXR0bm9zKHdjb0xpc3QsCisJCQkJCQkJCQkJCQkJIGZp cnN0VmFybm8sCisJCQkJCQkJCQkJCQkJIHBhcnRyZWwsIGZpcnN0UmVzdWx0UmVsLAorCQkJ CQkJCQkJCQkJCSBOVUxMKTsKKwkJCWZvcmVhY2gobGwsIG1hcHBlZF93Y29MaXN0KQorCQkJ eworCQkJCVdpdGhDaGVja09wdGlvbiAqd2NvID0gY2FzdE5vZGUoV2l0aENoZWNrT3B0aW9u LCBsZmlyc3QobGwpKTsKKwkJCQlFeHByU3RhdGUgICp3Y29FeHByID0gRXhlY0luaXRRdWFs KGNhc3ROb2RlKExpc3QsIHdjby0+cXVhbCksCisJCQkJCQkJCQkJCQkgICBtdHN0YXRlLT5t dF9wbGFuc1swXSk7CisJCQkJd2NvRXhwcnMgPSBsYXBwZW5kKHdjb0V4cHJzLCB3Y29FeHBy KTsKKwkJCX0KKworCQkJbGVhZl9wYXJ0X3JyaS0+cmlfV2l0aENoZWNrT3B0aW9ucyA9IG1h cHBlZF93Y29MaXN0OworCQkJbGVhZl9wYXJ0X3JyaS0+cmlfV2l0aENoZWNrT3B0aW9uRXhw cnMgPSB3Y29FeHByczsKKwkJfQorCisJCS8qCisJCSAqIEJ1aWxkIHRoZSBSRVRVUk5JTkcg cHJvamVjdGlvbiBpZiBhbnkgZm9yIHRoZSBwYXJ0aXRpb24uICBOb3RlIHRoYXQKKwkJICog d2UgZGlkbid0IGJ1aWxkIHRoZSByZXR1cm5pbmdMaXN0IGZvciBlYWNoIHBhcnRpdGlvbiB3 aXRoaW4gdGhlCisJCSAqIHBsYW5uZXIsIGJ1dCBzaW1wbGUgdHJhbnNsYXRpb24gb2YgdGhl IHZhcmF0dG5vcyB3aWxsIHN1ZmZpY2UuCisJCSAqIFRoaXMgb25seSBvY2N1cnMgZm9yIHRo ZSBJTlNFUlQgY2FzZTsgaW4gdGhlIFVQREFURS9ERUxFVEUgY2FzZXMsCisJCSAqIEV4ZWNJ bml0TW9kaWZ5VGFibGUoKSB3b3VsZCd2ZSBpbml0aWFsaXplZCB0aGlzLgorCQkgKi8KKwkJ aWYgKG5vZGUgJiYgbm9kZS0+cmV0dXJuaW5nTGlzdHMgIT0gTklMKQorCQl7CisJCQlUdXBs ZVRhYmxlU2xvdCAqc2xvdDsKKwkJCUV4cHJDb250ZXh0ICplY29udGV4dDsKKwkJCUxpc3QJ ICAgKnJldHVybmluZ0xpc3Q7CisJCQlMaXN0CSAgICpybGlzdDsKKwkJCVR1cGxlRGVzYwl0 dXBEZXNjOworCisJCQkvKiBTZWUgdGhlIGNvbW1lbnQgd3JpdHRlbiBhYm92ZSBmb3IgV0NP IGxpc3RzLiAqLworCQkJQXNzZXJ0KChub2RlLT5vcGVyYXRpb24gPT0gQ01EX0lOU0VSVCAm JgorCQkJCQlsaXN0X2xlbmd0aChub2RlLT5yZXR1cm5pbmdMaXN0cykgPT0gMSAmJgorCQkJ CQlsaXN0X2xlbmd0aChub2RlLT5wbGFucykgPT0gMSkgfHwKKwkJCQkgICAobm9kZS0+b3Bl cmF0aW9uID09IENNRF9VUERBVEUgJiYKKwkJCQkJbGlzdF9sZW5ndGgobm9kZS0+cmV0dXJu aW5nTGlzdHMpID09CisJCQkJCWxpc3RfbGVuZ3RoKG5vZGUtPnBsYW5zKSkpOworCQkJcmV0 dXJuaW5nTGlzdCA9IGxpbml0aWFsKG5vZGUtPnJldHVybmluZ0xpc3RzKTsKKworCQkJLyoK KwkJCSAqIEluaXRpYWxpemUgcmVzdWx0IHR1cGxlIHNsb3QgYW5kIGFzc2lnbiBpdHMgcm93 dHlwZSB1c2luZyB0aGUgZmlyc3QKKwkJCSAqIFJFVFVSTklORyBsaXN0LiAgV2UgYXNzdW1l IHRoZSByZXN0IHdpbGwgbG9vayB0aGUgc2FtZS4KKwkJCSAqLworCQkJdHVwRGVzYyA9IEV4 ZWNUeXBlRnJvbVRMKHJldHVybmluZ0xpc3QsIGZhbHNlKTsKKworCQkJLyogU2V0IHVwIGEg c2xvdCBmb3IgdGhlIG91dHB1dCBvZiB0aGUgUkVUVVJOSU5HIHByb2plY3Rpb24ocykgKi8K KwkJCUV4ZWNJbml0UmVzdWx0VHVwbGVTbG90KGVzdGF0ZSwgJm10c3RhdGUtPnBzKTsKKwkJ CUV4ZWNBc3NpZ25SZXN1bHRUeXBlKCZtdHN0YXRlLT5wcywgdHVwRGVzYyk7CisJCQlzbG90 ID0gbXRzdGF0ZS0+cHMucHNfUmVzdWx0VHVwbGVTbG90OworCisJCQkvKiBOZWVkIGFuIGVj b250ZXh0IHRvbyAqLworCQkJaWYgKG10c3RhdGUtPnBzLnBzX0V4cHJDb250ZXh0ID09IE5V TEwpCisJCQkJRXhlY0Fzc2lnbkV4cHJDb250ZXh0KGVzdGF0ZSwgJm10c3RhdGUtPnBzKTsK KwkJCWVjb250ZXh0ID0gbXRzdGF0ZS0+cHMucHNfRXhwckNvbnRleHQ7CisKKwkJCXJsaXN0 ID0gbWFwX3BhcnRpdGlvbl92YXJhdHRub3MocmV0dXJuaW5nTGlzdCwKKwkJCQkJCQkJCQkJ Zmlyc3RWYXJubywKKwkJCQkJCQkJCQkJcGFydHJlbCwgZmlyc3RSZXN1bHRSZWwsIE5VTEwp OworCQkJbGVhZl9wYXJ0X3JyaS0+cmlfcHJvamVjdFJldHVybmluZyA9CisJCQkJRXhlY0J1 aWxkUHJvamVjdGlvbkluZm8ocmxpc3QsIGVjb250ZXh0LCBzbG90LCAmbXRzdGF0ZS0+cHMs CisJCQkJCQkJCQkJUmVsYXRpb25HZXREZXNjcihwYXJ0cmVsKSk7CisJCX0KKworCQkvKgor CQkgKiBPcGVuIHBhcnRpdGlvbiBpbmRpY2VzLiAgVGhlIHVzZXIgbWF5IGhhdmUgYXNrZWQg dG8gY2hlY2sgZm9yCisJCSAqIGNvbmZsaWN0cyB3aXRoaW4gdGhpcyBsZWFmIHBhcnRpdGlv biBhbmQgZG8gIm5vdGhpbmciIGluc3RlYWQgb2YKKwkJICogdGhyb3dpbmcgYW4gZXJyb3Iu ICBCZSBwcmVwYXJlZCBpbiB0aGF0IGNhc2UgYnkgaW5pdGlhbGl6aW5nIHRoZQorCQkgKiBp bmRleCBpbmZvcm1hdGlvbiBuZWVkZWQgYnkgRXhlY0luc2VydCgpIHRvIHBlcmZvcm0gc3Bl Y3VsYXRpdmUKKwkJICogaW5zZXJ0aW9ucy4KKwkJICovCisJCWlmIChwYXJ0cmVsLT5yZF9y ZWwtPnJlbGhhc2luZGV4ICYmCisJCQlsZWFmX3BhcnRfcnJpLT5yaV9JbmRleFJlbGF0aW9u RGVzY3MgPT0gTlVMTCkKKwkJCUV4ZWNPcGVuSW5kaWNlcyhsZWFmX3BhcnRfcnJpLAorCQkJ CQkJCW10c3RhdGUgIT0gTlVMTCAmJgorCQkJCQkJCW10c3RhdGUtPm10X29uY29uZmxpY3Qg IT0gT05DT05GTElDVF9OT05FKTsKKwl9CisKKwkvKgorCSAqIFZlcmlmeSByZXN1bHQgcmVs YXRpb24gaXMgYSB2YWxpZCB0YXJnZXQgZm9yIGFuIElOU0VSVC4gIEFuIFVQREFURQorCSAq IG9mIGEgcGFydGl0aW9uLWtleSBiZWNvbWVzIGEgREVMRVRFK0lOU0VSVCBvcGVyYXRpb24s IHNvIHRoaXMgY2hlY2sKKwkgKiBpcyBzdGlsbCByZXF1aXJlZCB3aGVuIHRoZSBvcGVyYXRp b24gaXMgQ01EX1VQREFURS4KKwkgKi8KKwlDaGVja1ZhbGlkUmVzdWx0UmVsKGxlYWZfcGFy dF9ycmksIENNRF9JTlNFUlQpOworCisJcHJvdXRlLT5wYXJ0aXRpb25zW3BhcnRpZHhdID0g bGVhZl9wYXJ0X3JyaTsKKworCS8qCisJICogTm90ZSB0aGF0IHRoZSBlbnRyaWVzIGluIHRo aXMgbGlzdCBhcHBlYXIgaW4gbm8gcHJlZGV0ZXJtaW5lZCBvcmRlciwKKwkgKiBiZWNhdXNl IHBhcnRpdGlvbiByZXN1bHQgcmVscyBhcmUgaW5pdGlhbGl6ZWQgYXMgYW5kIHdoZW4gdGhl eSdyZQorCSAqIG5lZWRlZC4KKwkgKi8KKwllc3RhdGUtPmVzX2xlYWZfcmVzdWx0X3JlbGF0 aW9ucyA9CisJCQkJCQkJCWxhcHBlbmQoZXN0YXRlLT5lc19sZWFmX3Jlc3VsdF9yZWxhdGlv bnMsCisJCQkJCQkJCQkJbGVhZl9wYXJ0X3JyaSk7CisKKwkvKgorCSAqIFNhdmUgYSB0dXBs ZSBjb252ZXJzaW9uIG1hcCB0byBjb252ZXJ0IGEgdHVwbGUgcm91dGVkIHRvIHRoaXMKKwkg KiBwYXJ0aXRpb24gZnJvbSB0aGUgcGFyZW50J3MgdHlwZSB0byB0aGUgcGFydGl0aW9uJ3Mu CisJICovCisJcHJvdXRlLT5wYXJlbnRfY2hpbGRfdHVwY29udl9tYXBzW3BhcnRpZHhdID0K KwkJCQkJCQljb252ZXJ0X3R1cGxlc19ieV9uYW1lKFJlbGF0aW9uR2V0RGVzY3Iocm9vdHJl bCksCisJCQkJCQkJCQkJCQkgICBSZWxhdGlvbkdldERlc2NyKHBhcnRyZWwpLAorCQkJCQkJ CQkJCQkgICBnZXR0ZXh0X25vb3AoImNvdWxkIG5vdCBjb252ZXJ0IHJvdyB0eXBlIikpOwor fQorCiAvKgogICogRXhlY1NldHVwQ2hpbGRQYXJlbnRNYXBGb3JMZWFmIC0tIEluaXRpYWxp emUgdGhlIHBlci1sZWFmLXBhcnRpdGlvbgogICogY2hpbGQtdG8tcm9vdCB0dXBsZSBjb252 ZXJzaW9uIG1hcCBhcnJheS4KQEAgLTUzOCw4ICs2OTIsMTEgQEAgRXhlY0NsZWFudXBUdXBs ZVJvdXRpbmcoUGFydGl0aW9uVHVwbGVSb3V0aW5nICpwcm91dGUpCiAJCQljb250aW51ZTsK IAkJfQogCi0JCUV4ZWNDbG9zZUluZGljZXMocmVzdWx0UmVsSW5mbyk7Ci0JCWhlYXBfY2xv c2UocmVzdWx0UmVsSW5mby0+cmlfUmVsYXRpb25EZXNjLCBOb0xvY2spOworCQlpZiAocmVz dWx0UmVsSW5mbykKKwkJeworCQkJRXhlY0Nsb3NlSW5kaWNlcyhyZXN1bHRSZWxJbmZvKTsK KwkJCWhlYXBfY2xvc2UocmVzdWx0UmVsSW5mby0+cmlfUmVsYXRpb25EZXNjLCBOb0xvY2sp OworCQl9CiAJfQogCiAJLyogUmVsZWFzZSB0aGUgc3RhbmRhbG9uZSBwYXJ0aXRpb24gdHVw bGUgZGVzY3JpcHRvcnMsIGlmIGFueSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9k aWZ5VGFibGUuYwppbmRleCBkMDU0ZGE1MzMwLi4xNWNhMzI4MWM5IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYworKysgYi9zcmMvYmFja2Vu ZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYwpAQCAtMzA0LDEyICszMDQsMTcgQEAgRXhl Y0luc2VydChNb2RpZnlUYWJsZVN0YXRlICptdHN0YXRlLAogCQlBc3NlcnQobGVhZl9wYXJ0 X2luZGV4ID49IDAgJiYKIAkJCSAgIGxlYWZfcGFydF9pbmRleCA8IHByb3V0ZS0+bnVtX3Bh cnRpdGlvbnMpOwogCisJCS8qIEluaXRpYWxpemUgcGFydGl0aW9uIGluZm8sIGlmIG5vdCBk b25lIGFscmVhZHkuICovCisJCUV4ZWNJbml0UGFydGl0aW9uSW5mbyhtdHN0YXRlLCByZXN1 bHRSZWxJbmZvLCBwcm91dGUsIGVzdGF0ZSwKKwkJCQkJCQkgIGxlYWZfcGFydF9pbmRleCk7 CisKIAkJLyoKIAkJICogU2F2ZSB0aGUgb2xkIFJlc3VsdFJlbEluZm8gYW5kIHN3aXRjaCB0 byB0aGUgb25lIGNvcnJlc3BvbmRpbmcgdG8KIAkJICogdGhlIHNlbGVjdGVkIHBhcnRpdGlv bi4KIAkJICovCiAJCXNhdmVkX3Jlc3VsdFJlbEluZm8gPSByZXN1bHRSZWxJbmZvOwogCQly ZXN1bHRSZWxJbmZvID0gcHJvdXRlLT5wYXJ0aXRpb25zW2xlYWZfcGFydF9pbmRleF07CisJ CUFzc2VydChyZXN1bHRSZWxJbmZvICE9IE5VTEwpOwogCiAJCS8qIFdlIGRvIG5vdCB5ZXQg aGF2ZSBhIHdheSB0byBpbnNlcnQgaW50byBhIGZvcmVpZ24gcGFydGl0aW9uICovCiAJCWlm IChyZXN1bHRSZWxJbmZvLT5yaV9GZHdSb3V0aW5lKQpAQCAtMjA4MSwxNCArMjA4NiwxMCBA QCBFeGVjSW5pdE1vZGlmeVRhYmxlKE1vZGlmeVRhYmxlICpub2RlLCBFU3RhdGUgKmVzdGF0 ZSwgaW50IGVmbGFncykKIAlSZXN1bHRSZWxJbmZvICpzYXZlZF9yZXN1bHRSZWxJbmZvOwog CVJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm87CiAJUGxhbgkgICAqc3VicGxhbjsKLQlp bnQJCQlmaXJzdFZhcm5vID0gMDsKLQlSZWxhdGlvbglmaXJzdFJlc3VsdFJlbCA9IE5VTEw7 CiAJTGlzdENlbGwgICAqbDsKIAlpbnQJCQlpOwogCVJlbGF0aW9uCXJlbDsKIAlib29sCQl1 cGRhdGVfdHVwbGVfcm91dGluZ19uZWVkZWQgPSBub2RlLT5wYXJ0Q29sc1VwZGF0ZWQ7Ci0J UGFydGl0aW9uVHVwbGVSb3V0aW5nICpwcm91dGUgPSBOVUxMOwotCWludAkJCW51bV9wYXJ0 aXRpb25zID0gMDsKIAogCS8qIGNoZWNrIGZvciB1bnN1cHBvcnRlZCBmbGFncyAqLwogCUFz c2VydCghKGVmbGFncyAmIChFWEVDX0ZMQUdfQkFDS1dBUkQgfCBFWEVDX0ZMQUdfTUFSSykp KTsKQEAgLTIyMTEsMjAgKzIyMTIsOCBAQCBFeGVjSW5pdE1vZGlmeVRhYmxlKE1vZGlmeVRh YmxlICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkgKi8KIAlpZiAocmVs LT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSAmJgogCQko b3BlcmF0aW9uID09IENNRF9JTlNFUlQgfHwgdXBkYXRlX3R1cGxlX3JvdXRpbmdfbmVlZGVk KSkKLQl7Ci0JCXByb3V0ZSA9IG10c3RhdGUtPm10X3BhcnRpdGlvbl90dXBsZV9yb3V0aW5n ID0KLQkJCUV4ZWNTZXR1cFBhcnRpdGlvblR1cGxlUm91dGluZyhtdHN0YXRlLAotCQkJCQkJ CQkJCSAgIHJlbCwgbm9kZS0+bm9taW5hbFJlbGF0aW9uLAotCQkJCQkJCQkJCSAgIGVzdGF0 ZSk7Ci0JCW51bV9wYXJ0aXRpb25zID0gcHJvdXRlLT5udW1fcGFydGl0aW9uczsKLQotCQkv KgotCQkgKiBCZWxvdyBhcmUgcmVxdWlyZWQgYXMgcmVmZXJlbmNlIG9iamVjdHMgZm9yIG1h cHBpbmcgcGFydGl0aW9uCi0JCSAqIGF0dG5vJ3MgaW4gZXhwcmVzc2lvbnMgc3VjaCBhcyBX aXRoQ2hlY2tPcHRpb25zIGFuZCBSRVRVUk5JTkcuCi0JCSAqLwotCQlmaXJzdFZhcm5vID0g bXRzdGF0ZS0+cmVzdWx0UmVsSW5mb1swXS5yaV9SYW5nZVRhYmxlSW5kZXg7Ci0JCWZpcnN0 UmVzdWx0UmVsID0gbXRzdGF0ZS0+cmVzdWx0UmVsSW5mb1swXS5yaV9SZWxhdGlvbkRlc2M7 Ci0JfQorCQltdHN0YXRlLT5tdF9wYXJ0aXRpb25fdHVwbGVfcm91dGluZyA9CisJCQkJCQlF eGVjU2V0dXBQYXJ0aXRpb25UdXBsZVJvdXRpbmcobXRzdGF0ZSwgcmVsKTsKIAogCS8qCiAJ ICogQnVpbGQgc3RhdGUgZm9yIGNvbGxlY3RpbmcgdHJhbnNpdGlvbiB0dXBsZXMuICBUaGlz IHJlcXVpcmVzIGhhdmluZyBhCkBAIC0yMjcxLDc3ICsyMjYwLDEyIEBAIEV4ZWNJbml0TW9k aWZ5VGFibGUoTW9kaWZ5VGFibGUgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdz KQogCX0KIAogCS8qCi0JICogQnVpbGQgV0lUSCBDSEVDSyBPUFRJT04gY29uc3RyYWludHMg Zm9yIGVhY2ggbGVhZiBwYXJ0aXRpb24gcmVsLiBOb3RlCi0JICogdGhhdCB3ZSBkaWRuJ3Qg YnVpbGQgdGhlIHdpdGhDaGVja09wdGlvbkxpc3QgZm9yIGVhY2ggcGFydGl0aW9uIHdpdGhp bgotCSAqIHRoZSBwbGFubmVyLCBidXQgc2ltcGxlIHRyYW5zbGF0aW9uIG9mIHRoZSB2YXJh dHRub3MgZm9yIGVhY2ggcGFydGl0aW9uCi0JICogd2lsbCBzdWZmaWNlLiAgVGhpcyBvbmx5 IG9jY3VycyBmb3IgdGhlIElOU0VSVCBjYXNlIG9yIGZvciBVUERBVEUgcm93Ci0JICogbW92 ZW1lbnQuIERFTEVURXMgYW5kIGxvY2FsIFVQREFURXMgYXJlIGhhbmRsZWQgYWJvdmUuCi0J ICovCi0JaWYgKG5vZGUtPndpdGhDaGVja09wdGlvbkxpc3RzICE9IE5JTCAmJiBudW1fcGFy dGl0aW9ucyA+IDApCi0JewotCQlMaXN0CSAgICpmaXJzdF93Y29MaXN0OwotCi0JCS8qCi0J CSAqIEluIGNhc2Ugb2YgSU5TRVJUIG9uIHBhcnRpdGlvbmVkIHRhYmxlcywgdGhlcmUgaXMg b25seSBvbmUgcGxhbi4KLQkJICogTGlrZXdpc2UsIHRoZXJlIGlzIG9ubHkgb25lIFdJVEgg Q0hFQ0sgT1BUSU9OUyBsaXN0LCBub3Qgb25lIHBlcgotCQkgKiBwYXJ0aXRpb24uIFdoZXJl YXMgZm9yIFVQREFURSwgdGhlcmUgYXJlIGFzIG1hbnkgV0NPcyBhcyB0aGVyZSBhcmUKLQkJ ICogcGxhbnMuIFNvIGluIGVpdGhlciBjYXNlLCB1c2UgdGhlIFdDTyBleHByZXNzaW9uIG9m IHRoZSBmaXJzdAotCQkgKiByZXN1bHRSZWxJbmZvIGFzIGEgcmVmZXJlbmNlIHRvIGNhbGN1 bGF0ZSBhdHRubydzIGZvciB0aGUgV0NPCi0JCSAqIGV4cHJlc3Npb24gb2YgZWFjaCBvZiB0 aGUgcGFydGl0aW9ucy4gV2UgbWFrZSBhIGNvcHkgb2YgdGhlIFdDTwotCQkgKiBxdWFsIGZv ciBlYWNoIHBhcnRpdGlvbi4gTm90ZSB0aGF0LCBpZiB0aGVyZSBhcmUgU3ViUGxhbnMgaW4g dGhlcmUsCi0JCSAqIHRoZXkgYWxsIGVuZCB1cCBhdHRhY2hlZCB0byB0aGUgb25lIHBhcmVu dCBQbGFuIG5vZGUuCi0JCSAqLwotCQlBc3NlcnQodXBkYXRlX3R1cGxlX3JvdXRpbmdfbmVl ZGVkIHx8Ci0JCQkgICAob3BlcmF0aW9uID09IENNRF9JTlNFUlQgJiYKLQkJCQlsaXN0X2xl bmd0aChub2RlLT53aXRoQ2hlY2tPcHRpb25MaXN0cykgPT0gMSAmJgotCQkJCW10c3RhdGUt Pm10X25wbGFucyA9PSAxKSk7Ci0KLQkJZmlyc3Rfd2NvTGlzdCA9IGxpbml0aWFsKG5vZGUt PndpdGhDaGVja09wdGlvbkxpc3RzKTsKLQkJZm9yIChpID0gMDsgaSA8IG51bV9wYXJ0aXRp b25zOyBpKyspCi0JCXsKLQkJCVJlbGF0aW9uCXBhcnRyZWw7Ci0JCQlMaXN0CSAgICptYXBw ZWRfd2NvTGlzdDsKLQkJCUxpc3QJICAgKndjb0V4cHJzID0gTklMOwotCQkJTGlzdENlbGwg ICAqbGw7Ci0KLQkJCXJlc3VsdFJlbEluZm8gPSBwcm91dGUtPnBhcnRpdGlvbnNbaV07Ci0K LQkJCS8qCi0JCQkgKiBJZiB3ZSBhcmUgcmVmZXJyaW5nIHRvIGEgcmVzdWx0UmVsSW5mbyBm cm9tIG9uZSBvZiB0aGUgdXBkYXRlCi0JCQkgKiByZXN1bHQgcmVscywgdGhhdCByZXN1bHQg cmVsIHdvdWxkIGFscmVhZHkgaGF2ZQotCQkJICogV2l0aENoZWNrT3B0aW9ucyBpbml0aWFs aXplZC4KLQkJCSAqLwotCQkJaWYgKHJlc3VsdFJlbEluZm8tPnJpX1dpdGhDaGVja09wdGlv bnMpCi0JCQkJY29udGludWU7Ci0KLQkJCXBhcnRyZWwgPSByZXN1bHRSZWxJbmZvLT5yaV9S ZWxhdGlvbkRlc2M7Ci0KLQkJCW1hcHBlZF93Y29MaXN0ID0gbWFwX3BhcnRpdGlvbl92YXJh dHRub3MoZmlyc3Rfd2NvTGlzdCwKLQkJCQkJCQkJCQkJCQkgZmlyc3RWYXJubywKLQkJCQkJ CQkJCQkJCQkgcGFydHJlbCwgZmlyc3RSZXN1bHRSZWwsCi0JCQkJCQkJCQkJCQkJIE5VTEwp OwotCQkJZm9yZWFjaChsbCwgbWFwcGVkX3djb0xpc3QpCi0JCQl7Ci0JCQkJV2l0aENoZWNr T3B0aW9uICp3Y28gPSBjYXN0Tm9kZShXaXRoQ2hlY2tPcHRpb24sIGxmaXJzdChsbCkpOwot CQkJCUV4cHJTdGF0ZSAgKndjb0V4cHIgPSBFeGVjSW5pdFF1YWwoY2FzdE5vZGUoTGlzdCwg d2NvLT5xdWFsKSwKLQkJCQkJCQkJCQkJCSAgICZtdHN0YXRlLT5wcyk7Ci0KLQkJCQl3Y29F eHBycyA9IGxhcHBlbmQod2NvRXhwcnMsIHdjb0V4cHIpOwotCQkJfQotCi0JCQlyZXN1bHRS ZWxJbmZvLT5yaV9XaXRoQ2hlY2tPcHRpb25zID0gbWFwcGVkX3djb0xpc3Q7Ci0JCQlyZXN1 bHRSZWxJbmZvLT5yaV9XaXRoQ2hlY2tPcHRpb25FeHBycyA9IHdjb0V4cHJzOwotCQl9Ci0J fQotCi0JLyoKIAkgKiBJbml0aWFsaXplIFJFVFVSTklORyBwcm9qZWN0aW9ucyBpZiBuZWVk ZWQuCiAJICovCiAJaWYgKG5vZGUtPnJldHVybmluZ0xpc3RzKQogCXsKIAkJVHVwbGVUYWJs ZVNsb3QgKnNsb3Q7CiAJCUV4cHJDb250ZXh0ICplY29udGV4dDsKLQkJTGlzdAkgICAqZmly c3RSZXR1cm5pbmdMaXN0OwogCiAJCS8qCiAJCSAqIEluaXRpYWxpemUgcmVzdWx0IHR1cGxl IHNsb3QgYW5kIGFzc2lnbiBpdHMgcm93dHlwZSB1c2luZyB0aGUgZmlyc3QKQEAgLTIzNzIs NDQgKzIyOTYsNiBAQCBFeGVjSW5pdE1vZGlmeVRhYmxlKE1vZGlmeVRhYmxlICpub2RlLCBF U3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkJCQkJCQkJCQlyZXN1bHRSZWxJbmZvLT5y aV9SZWxhdGlvbkRlc2MtPnJkX2F0dCk7CiAJCQlyZXN1bHRSZWxJbmZvKys7CiAJCX0KLQot CQkvKgotCQkgKiBCdWlsZCBhIHByb2plY3Rpb24gZm9yIGVhY2ggbGVhZiBwYXJ0aXRpb24g cmVsLiAgTm90ZSB0aGF0IHdlCi0JCSAqIGRpZG4ndCBidWlsZCB0aGUgcmV0dXJuaW5nTGlz dCBmb3IgZWFjaCBwYXJ0aXRpb24gd2l0aGluIHRoZQotCQkgKiBwbGFubmVyLCBidXQgc2lt cGxlIHRyYW5zbGF0aW9uIG9mIHRoZSB2YXJhdHRub3MgZm9yIGVhY2ggcGFydGl0aW9uCi0J CSAqIHdpbGwgc3VmZmljZS4gIFRoaXMgb25seSBvY2N1cnMgZm9yIHRoZSBJTlNFUlQgY2Fz ZSBvciBmb3IgVVBEQVRFCi0JCSAqIHJvdyBtb3ZlbWVudC4gREVMRVRFcyBhbmQgbG9jYWwg VVBEQVRFcyBhcmUgaGFuZGxlZCBhYm92ZS4KLQkJICovCi0JCWZpcnN0UmV0dXJuaW5nTGlz dCA9IGxpbml0aWFsKG5vZGUtPnJldHVybmluZ0xpc3RzKTsKLQkJZm9yIChpID0gMDsgaSA8 IG51bV9wYXJ0aXRpb25zOyBpKyspCi0JCXsKLQkJCVJlbGF0aW9uCXBhcnRyZWw7Ci0JCQlM aXN0CSAgICpybGlzdDsKLQotCQkJcmVzdWx0UmVsSW5mbyA9IHByb3V0ZS0+cGFydGl0aW9u c1tpXTsKLQotCQkJLyoKLQkJCSAqIElmIHdlIGFyZSByZWZlcnJpbmcgdG8gYSByZXN1bHRS ZWxJbmZvIGZyb20gb25lIG9mIHRoZSB1cGRhdGUKLQkJCSAqIHJlc3VsdCByZWxzLCB0aGF0 IHJlc3VsdCByZWwgd291bGQgYWxyZWFkeSBoYXZlIGEgcmV0dXJuaW5nTGlzdAotCQkJICog YnVpbHQuCi0JCQkgKi8KLQkJCWlmIChyZXN1bHRSZWxJbmZvLT5yaV9wcm9qZWN0UmV0dXJu aW5nKQotCQkJCWNvbnRpbnVlOwotCi0JCQlwYXJ0cmVsID0gcmVzdWx0UmVsSW5mby0+cmlf UmVsYXRpb25EZXNjOwotCi0JCQkvKgotCQkJICogVXNlIHRoZSByZXR1cm5pbmcgZXhwcmVz c2lvbiBvZiB0aGUgZmlyc3QgcmVzdWx0UmVsSW5mbyBhcyBhCi0JCQkgKiByZWZlcmVuY2Ug dG8gY2FsY3VsYXRlIGF0dG5vJ3MgZm9yIHRoZSByZXR1cm5pbmcgZXhwcmVzc2lvbiBvZgot CQkJICogZWFjaCBvZiB0aGUgcGFydGl0aW9ucy4KLQkJCSAqLwotCQkJcmxpc3QgPSBtYXBf cGFydGl0aW9uX3ZhcmF0dG5vcyhmaXJzdFJldHVybmluZ0xpc3QsCi0JCQkJCQkJCQkJCWZp cnN0VmFybm8sCi0JCQkJCQkJCQkJCXBhcnRyZWwsIGZpcnN0UmVzdWx0UmVsLCBOVUxMKTsK LQkJCXJlc3VsdFJlbEluZm8tPnJpX3Byb2plY3RSZXR1cm5pbmcgPQotCQkJCUV4ZWNCdWls ZFByb2plY3Rpb25JbmZvKHJsaXN0LCBlY29udGV4dCwgc2xvdCwgJm10c3RhdGUtPnBzLAot CQkJCQkJCQkJCXJlc3VsdFJlbEluZm8tPnJpX1JlbGF0aW9uRGVzYy0+cmRfYXR0KTsKLQkJ fQogCX0KIAllbHNlCiAJewpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhl Y1BhcnRpdGlvbi5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oCmlu ZGV4IGE3NWEzNzA2MGEuLjRhNjJiOWYxZmYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4 ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVj UGFydGl0aW9uLmgKQEAgLTkxLDYgKzkxLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUGFydGl0aW9u VHVwbGVSb3V0aW5nCiB7CiAJUGFydGl0aW9uRGlzcGF0Y2ggKnBhcnRpdGlvbl9kaXNwYXRj aF9pbmZvOwogCWludAkJCW51bV9kaXNwYXRjaDsKKwlPaWQJCSAgICpwYXJ0aXRpb25fb2lk czsKIAlSZXN1bHRSZWxJbmZvICoqcGFydGl0aW9uczsKIAlpbnQJCQludW1fcGFydGl0aW9u czsKIAlUdXBsZUNvbnZlcnNpb25NYXAgKipwYXJlbnRfY2hpbGRfdHVwY29udl9tYXBzOwpA QCAtMTAzLDEyICsxMDQsMTUgQEAgdHlwZWRlZiBzdHJ1Y3QgUGFydGl0aW9uVHVwbGVSb3V0 aW5nCiB9IFBhcnRpdGlvblR1cGxlUm91dGluZzsKIAogZXh0ZXJuIFBhcnRpdGlvblR1cGxl Um91dGluZyAqRXhlY1NldHVwUGFydGl0aW9uVHVwbGVSb3V0aW5nKE1vZGlmeVRhYmxlU3Rh dGUgKm10c3RhdGUsCi0JCQkJCQkJICAgUmVsYXRpb24gcmVsLCBJbmRleCByZXN1bHRSVGlu ZGV4LAotCQkJCQkJCSAgIEVTdGF0ZSAqZXN0YXRlKTsKKwkJCQkJCQkgICBSZWxhdGlvbiBy ZWwpOwogZXh0ZXJuIGludCBFeGVjRmluZFBhcnRpdGlvbihSZXN1bHRSZWxJbmZvICpyZXN1 bHRSZWxJbmZvLAogCQkJCSAgUGFydGl0aW9uRGlzcGF0Y2ggKnBkLAogCQkJCSAgVHVwbGVU YWJsZVNsb3QgKnNsb3QsCiAJCQkJICBFU3RhdGUgKmVzdGF0ZSk7CitleHRlcm4gdm9pZCBF eGVjSW5pdFBhcnRpdGlvbkluZm8oTW9kaWZ5VGFibGVTdGF0ZSAqbXRzdGF0ZSwKKwkJCQkJ UmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbywKKwkJCQkJUGFydGl0aW9uVHVwbGVSb3V0 aW5nICpwcm91dGUsCisJCQkJCUVTdGF0ZSAqZXN0YXRlLCBpbnQgcGFydGlkeCk7CiBleHRl cm4gdm9pZCBFeGVjU2V0dXBDaGlsZFBhcmVudE1hcEZvckxlYWYoUGFydGl0aW9uVHVwbGVS b3V0aW5nICpwcm91dGUpOwogZXh0ZXJuIFR1cGxlQ29udmVyc2lvbk1hcCAqVHVwQ29udk1h cEZvckxlYWYoUGFydGl0aW9uVHVwbGVSb3V0aW5nICpwcm91dGUsCiAJCQkJICBSZXN1bHRS ZWxJbmZvICpyb290UmVsSW5mbywgaW50IGxlYWZfaW5kZXgpOwotLSAKMi4xMS4wCgo= --------------F58884C9FDD105105B92EA91--