Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uzHdT-001kxj-AV for pgsql-hackers@arkaria.postgresql.org; Thu, 18 Sep 2025 16:37:31 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1uzHdQ-000VpG-Oj for pgsql-hackers@arkaria.postgresql.org; Thu, 18 Sep 2025 16:37:28 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uzHdQ-000Vp7-BB for pgsql-hackers@lists.postgresql.org; Thu, 18 Sep 2025 16:37:28 +0000 Received: from mail-qk1-x730.google.com ([2607:f8b0:4864:20::730]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1uzHdM-001XXG-1W for pgsql-hackers@lists.postgresql.org; Thu, 18 Sep 2025 16:37:28 +0000 Received: by mail-qk1-x730.google.com with SMTP id af79cd13be357-81176f3322aso8595185a.3 for ; Thu, 18 Sep 2025 09:37:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1758213443; x=1758818243; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=oq7h+V6c672+Q+lWj3JZwcdLPVTswyeegeYMYXZYN7c=; b=UeradeIfeSTu1x1FDjx9X3Z+VZLdkpEPblmf3fQ9ffvRsJ3+DrNEGpvOfLAwImLlw8 MhY7ykTihSBZ7yNHcsdqNLOJ7AHRm8seICKtoQU2d3FTfqrxDVvZ1ksF3Ws6XGb7rYz6 cZ1cHSpsKdT2OpmnFFogTeCtn8ThouE2rgGLRhlsJcIlAhHjmPdeib2aHr2Oo5UpU6qS wJn/OivLWnsnebteNIxSmeMQnXukKg5JYiuK2vcXiGpY2UHIMbZK+1V/UjwWmOwQ6+JM 1b6gnQfsBFIvEtHl8Ia9zNvhcKj/SAmkBbz8hHmrkABbw1Eg+DfI0jTP/kO3s/CCuOmq W9bg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758213443; x=1758818243; 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=oq7h+V6c672+Q+lWj3JZwcdLPVTswyeegeYMYXZYN7c=; b=Zc3JPZ8O+kU1YwJ4zOntjH7h0sjH/c7A/WOgxY8fxNNU9XNeyMePmpRYAiF51Q6qVS bHS8NCiVsI5Hx6yI2d1RwhWc44IHTiRdKAC7PQILsM4ttGTdgkFeMNXh9FmHpUG0fhyQ SNU2a98GCNbGBa/CuR+RS86Tg2bPJa3E/KXcjIpbgEse+mashapb9jk43IfN1xDhOtCm 3lDIzTPKs12yyzgny/l/IPyM+hgAB6YtWh1DBAz0dpUXGAaOlQBT4PUGF4hvs6zD+dUW P9RcdFcgfjDix/mtYEvJ2P8Qg3Jn0rzrOLCR10qSzvRJ64sHiUoFxaT2ph/UHMIJ0ZEl A52A== X-Forwarded-Encrypted: i=1; AJvYcCUIT4bd3JRzA55VdST86iYfKomWwwKaisrTwDX+V7oOmTU5VyxaP8BkCfEoi+TuaLShNT0tHd1HcgPNFIlC@lists.postgresql.org X-Gm-Message-State: AOJu0YxjqRm6lhoJ1dkvACnPUN7F+5dhnFDw4nM8ShLU5HmddkHsVrUn rlXeffvS0c3ng4GRmA5xFvsFScmYS+t6dRjhQCNknS998ObZG25MNDAoYnHe0Jt1LvWHzQg2v2z /id1NITLMFRin1zGJMASSGEW0332BGP0= X-Gm-Gg: ASbGncshYmbIWSJJUcfZ/9SRfIPDF3Lqp8ZLRkuEtDgvC1d9+GAy4NljP/4VQ9xV+Dp Sqsn8COjDA5mJpmCF0aSkYmxQ6FkXoO9Z9sFl5NDwVMDBSLJeqq113bjkcPddVlVLNvmp3PxCSM xV2a9Fy3KH5CrTvmg5ApZ0dNJ0bgan/lM8WFw7C4qWcqEbNW4lLBH5wQeazFVz1NlMMMNM4BiGi h7M4ZCRH/0pxmBFxBMdoDLu2Q== X-Google-Smtp-Source: AGHT+IE9mikY9xGQX0dB3JpF+Pf5tA2DltF0N3d13RFZxYR19ZHXZPot5A6M5KHSkX7xWTjzMejniAKi6zAPOULozNE= X-Received: by 2002:a05:620a:1918:b0:7e6:9e2b:6140 with SMTP id af79cd13be357-83baa245f41mr18694885a.8.1758213443388; Thu, 18 Sep 2025 09:37:23 -0700 (PDT) MIME-Version: 1.0 References: <4535f3aa-3220-4760-b1f5-2bc91f248e03@iki.fi> <2bc58592-9d74-4af0-bdd1-1a88e8683f7c@iki.fi> <36531c0e-292c-409d-bbc7-a252cf6e910a@iki.fi> In-Reply-To: From: Maxim Orlov Date: Thu, 18 Sep 2025 19:37:11 +0300 X-Gm-Features: AS18NWA_FiQsixtZnZuqt-6YV5qIG5Nwz_eQcECo0ZE8hvOX5ayGUSI1fNiJpQU Message-ID: Subject: Re: POC: make mxidoff 64 bits To: wenhui qiu Cc: Alexander Korotkov , Ashutosh Bapat , Heikki Linnakangas , Postgres hackers Content-Type: multipart/mixed; boundary="000000000000bbc853063f15f7cf" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000bbc853063f15f7cf Content-Type: multipart/alternative; boundary="000000000000bbc852063f15f7cd" --000000000000bbc852063f15f7cd Content-Type: text/plain; charset="UTF-8" On Tue, 16 Sept 2025 at 15:12, wenhui qiu wrote: > > Agree +1 , but I have a question: I remember the XID64 patch got split > into a few threads. How are these threads related? The original one was > seen as too big a change, so it was broken up after people raised > concerns. > Yeah, you're absolutely correct. This thread is a part of the overall work on the transition to XID64 in Postgres. As far as I remember, no one explicitly raised concerns, but it's clear to me that it won't be committed as one big patch set. Here is a WIP patch @ 8191e0c16a for the discussed above issue. I also had to merge several patches from the previous set, since the consensus is to use the PRI* format for outputting 64-bit values, and a separate patch that only changed the format with cast and %llu lost it's meaning. If this option suits everyone, the next step is to add a part related to the pg_upgrade. -- Best regards, Maxim Orlov. --000000000000bbc852063f15f7cd Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable

On Tue, 16 Sept 2025 at 15:12, wenhui qiu = <qiuwenhuifx@gmail.com> = wrote:

Agree=C2=A0+1 , but I have a question: I remember the XID64 patch got = split into a few threads. How are these threads related? The original one w= as seen as too big a change, so it was broken up after people raised concer= ns.=C2=A0=C2=A0
Yeah, you're absolutely correct. This thread is a part of the overall<= br>work on the transition to XID64 in Postgres. As far as I remember, noone explicitly raised concerns, but it's clear to me that it won't= be
committed as one big patch set.

Here is a WIP patch @ 8191e0c= 16a for the discussed above issue.
I also had to merge several patches f= rom the previous set, since the
consensus is to use the PRI* format for = outputting 64-bit values, and a
separate patch that only changed the for= mat with cast and %llu lost
it's meaning.

If this option suit= s everyone, the next step is to add a part related
to the pg_upgrade.=C2=A0
--
Best regards= ,
Maxim Orlov.
--000000000000bbc852063f15f7cd-- --000000000000bbc853063f15f7cf Content-Type: application/octet-stream; name="v18-wip-0001-Use-64-bit-multixact-offsets.patch" Content-Disposition: attachment; filename="v18-wip-0001-Use-64-bit-multixact-offsets.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mfpmi31m0 RnJvbSA0MzRkMjcyNjk5MzZiZTE4MGNlZjlhYjRmNGI5ZWQyM2Y2YmRhMjg4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbSBPcmxvdiA8b3Jsb3ZtZ0BnbWFpbC5jb20+CkRhdGU6 IFdlZCwgNyBBdWcgMjAyNCAxNjozNToyMiArMDMwMApTdWJqZWN0OiBbUEFUQ0ggdjE4LXdpcF0g VXNlIDY0LWJpdCBtdWx0aXhhY3Qgb2Zmc2V0cwoKQXV0aG9yOiBNYXhpbSBPcmxvdiA8b3Jsb3Zt Z0BnbWFpbC5jb20+Ci0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL214YWN0ZGVzYy5j ICAgfCAgIDQgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy94bG9nZGVzYy5jICAgIHwg ICAyICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYyAgICB8IDM4OCAr KysrKysrLS0tLS0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVj b3ZlcnkuYyB8ICAgMiArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtLmMgICAgICAgICAg ICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5jICAgICAgIHwg ICA0ICstCiBzcmMvYmluL3BnX2NvbnRyb2xkYXRhL3BnX2NvbnRyb2xkYXRhLmMgICB8ICAgMiAr LQogc3JjL2Jpbi9wZ19yZXNldHdhbC9wZ19yZXNldHdhbC5jICAgICAgICAgfCAgIDYgKy0KIHNy Yy9iaW4vcGdfcmVzZXR3YWwvdC8wMDFfYmFzaWMucGwgICAgICAgIHwgICAyICstCiBzcmMvaW5j bHVkZS9hY2Nlc3MvbXVsdGl4YWN0LmggICAgICAgICAgICB8ICAgMyArLQogc3JjL2luY2x1ZGUv Yy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKy0KIDExIGZpbGVzIGNoYW5nZWQs IDEzNCBpbnNlcnRpb25zKCspLCAyODMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL3JtZ3JkZXNjL214YWN0ZGVzYy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3Jt Z3JkZXNjL214YWN0ZGVzYy5jCmluZGV4IDNjYTA1ODJkYjMuLjA1MmRkMGE0Y2UgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9teGFjdGRlc2MuYworKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3Mvcm1ncmRlc2MvbXhhY3RkZXNjLmMKQEAgLTY1LDcgKzY1LDcgQEAgbXVsdGl4 YWN0X2Rlc2MoU3RyaW5nSW5mbyBidWYsIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCQl4bF9t dWx0aXhhY3RfY3JlYXRlICp4bHJlYyA9ICh4bF9tdWx0aXhhY3RfY3JlYXRlICopIHJlYzsKIAkJ aW50CQkJaTsKIAotCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiV1IG9mZnNldCAldSBubWVtYmVy cyAlZDogIiwgeGxyZWMtPm1pZCwKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIldSBvZmZzZXQg JSIgUFJJdTY0ICIgbm1lbWJlcnMgJWQ6ICIsIHhscmVjLT5taWQsCiAJCQkJCQkgeGxyZWMtPm1v ZmYsIHhscmVjLT5ubWVtYmVycyk7CiAJCWZvciAoaSA9IDA7IGkgPCB4bHJlYy0+bm1lbWJlcnM7 IGkrKykKIAkJCW91dF9tZW1iZXIoYnVmLCAmeGxyZWMtPm1lbWJlcnNbaV0pOwpAQCAtNzQsNyAr NzQsNyBAQCBtdWx0aXhhY3RfZGVzYyhTdHJpbmdJbmZvIGJ1ZiwgWExvZ1JlYWRlclN0YXRlICpy ZWNvcmQpCiAJewogCQl4bF9tdWx0aXhhY3RfdHJ1bmNhdGUgKnhscmVjID0gKHhsX211bHRpeGFj dF90cnVuY2F0ZSAqKSByZWM7CiAKLQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICJvZmZzZXRzIFsl dSwgJXUpLCBtZW1iZXJzIFsldSwgJXUpIiwKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICJvZmZz ZXRzIFsldSwgJXUpLCBtZW1iZXJzIFslIiBQUkl1NjQgIiwgJSIgUFJJdTY0ICIpIiwKIAkJCQkJ CSB4bHJlYy0+c3RhcnRUcnVuY09mZiwgeGxyZWMtPmVuZFRydW5jT2ZmLAogCQkJCQkJIHhscmVj LT5zdGFydFRydW5jTWVtYiwgeGxyZWMtPmVuZFRydW5jTWVtYik7CiAJfQpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL3hsb2dkZXNjLmMgYi9zcmMvYmFja2VuZC9hY2Nl c3Mvcm1ncmRlc2MveGxvZ2Rlc2MuYwppbmRleCBjZDZjMmEyZjY1Li40NDEwMzRmNTkyIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MveGxvZ2Rlc2MuYworKysgYi9zcmMv YmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MveGxvZ2Rlc2MuYwpAQCAtNjYsNyArNjYsNyBAQCB4bG9n X2Rlc2MoU3RyaW5nSW5mbyBidWYsIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCQlDaGVja1Bv aW50ICpjaGVja3BvaW50ID0gKENoZWNrUG9pbnQgKikgcmVjOwogCiAJCWFwcGVuZFN0cmluZ0lu Zm8oYnVmLCAicmVkbyAlWC8lMDhYOyAiCi0JCQkJCQkgInRsaSAldTsgcHJldiB0bGkgJXU7IGZw dyAlczsgd2FsX2xldmVsICVzOyB4aWQgJXU6JXU7IG9pZCAldTsgbXVsdGkgJXU7IG9mZnNldCAl dTsgIgorCQkJCQkJICJ0bGkgJXU7IHByZXYgdGxpICV1OyBmcHcgJXM7IHdhbF9sZXZlbCAlczsg eGlkICV1OiV1OyBvaWQgJXU7IG11bHRpICV1OyBvZmZzZXQgJSIgUFJJdTY0ICI7ICIKIAkJCQkJ CSAib2xkZXN0IHhpZCAldSBpbiBEQiAldTsgb2xkZXN0IG11bHRpICV1IGluIERCICV1OyAiCiAJ CQkJCQkgIm9sZGVzdC9uZXdlc3QgY29tbWl0IHRpbWVzdGFtcCB4aWQ6ICV1LyV1OyAiCiAJCQkJ CQkgIm9sZGVzdCBydW5uaW5nIHhpZCAldTsgJXMiLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv YWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9t dWx0aXhhY3QuYwppbmRleCA4YmY1OWQzNjlmLi4wOTYwN2ZmMDBkIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYworKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS9tdWx0aXhhY3QuYwpAQCAtODgsMjEgKzg4LDMxIEBACiAjaW5jbHVkZSAidXRp bHMvbWVtdXRpbHMuaCIKIAogCit0eXBlZGVmIHVpbnQzMiBTaG9ydE11bHRpWGFjdE9mZnNldDsJ LyogZm9yIGEgZGlzayBzdG9yYWdlICovCisKIC8qCiAgKiBEZWZpbmVzIGZvciBNdWx0aVhhY3RP ZmZzZXQgcGFnZSBzaXplcy4gIEEgcGFnZSBpcyB0aGUgc2FtZSBCTENLU1ogYXMgaXMKICAqIHVz ZWQgZXZlcnl3aGVyZSBlbHNlIGluIFBvc3RncmVzLgogICoKLSAqIE5vdGU6IGJlY2F1c2UgTXVs dGlYYWN0T2Zmc2V0cyBhcmUgMzIgYml0cyBhbmQgd3JhcCBhcm91bmQgYXQgMHhGRkZGRkZGRiwK LSAqIE11bHRpWGFjdCBwYWdlIG51bWJlcmluZyBhbHNvIHdyYXBzIGFyb3VuZCBhdAotICogMHhG RkZGRkZGRi9NVUxUSVhBQ1RfT0ZGU0VUU19QRVJfUEFHRSwgYW5kIHNlZ21lbnQgbnVtYmVyaW5n IGF0Ci0gKiAweEZGRkZGRkZGL01VTFRJWEFDVF9PRkZTRVRTX1BFUl9QQUdFL1NMUlVfUEFHRVNf UEVSX1NFR01FTlQuICBXZSBuZWVkCi0gKiB0YWtlIG5vIGV4cGxpY2l0IG5vdGljZSBvZiB0aGF0 IGZhY3QgaW4gdGhpcyBtb2R1bGUsIGV4Y2VwdCB3aGVuIGNvbXBhcmluZwotICogc2VnbWVudCBh bmQgcGFnZSBudW1iZXJzIGluIFRydW5jYXRlTXVsdGlYYWN0IChzZWUKLSAqIE11bHRpWGFjdE9m ZnNldFBhZ2VQcmVjZWRlcykuCisgKiBUaGVyZSBhcmUgdHdvIGtleSBmYWN0b3JzIHdoeSB1dGls aXNpbmcgc3RyYWlnaHRmb3J3YXJkIDY0LWJpdCBvZmZzZXQgdmFsdWVzCisgKiBmb3IgaXMgd2Fz dGVmdWwgaW4gdGVybXMgb2YgZGlzYyBzcGFjZSB1c2FnZToKKyAqIDEpIG9mZnNldCB2YWx1ZXMg YXJlIHJlY29yZGVkIGluIGFzY2VuZGluZyBvcmRlciBhbmQgbm90IG92ZXJ3cml0dGVuOworICog MikgdGhlIGxhcmdlc3Qgc3VwcG9ydGVkIEJMQ0tTWiBpcyAzMmssIHdoaWNoIGNhbiBzdG9yZSB1 cCB0byAyXjEzIDMyLWJpdAorICogICAgaXRlbXMgb24gYSBzaW5nbGUgcGFnZTsgIHRodXMsIHdp dGggTUFYX0JBQ0tFTkRTIGxpbWl0ZWQgdG8gMl4xOC0xIHdlIGhhdmUKKyAqICAgIDJeMTMgKiAo Ml4xOC0xKSB3aGljaCBpcyBsZXNzIDJeMzEgYW5kIGZpdHMgMzItYml0cy4KKyAqCisgKiBJbiBv dGhlciB3b3JkcywgbWF4ICJkaXN0YW5jZSIgZm9yIG9mZnNldHMgb24gYSBzaW5nbGUgcGFnZSBp cyBub3QgZXhlZWRlZAorICogMzItYml0cy4gIFRvIG9wdGltaXNlIGRpc2Mgc3BhY2UgYWxsb2Nh dGlvbiwgd2UgZW1wbG95IHRoZSBmb2xsb3dpbmcgc2NoZW1lLgorICogT24gZWFjaCBwYWdlLCB0 aGUgYmFzaWMgNjQtYml0IG9mZnNldCwga25vd24gYXMgdGhlIHBhZ2UgYmFzZSwgaXMgbG9jYXRl ZAorICogZmlyc3QuICBOZXh0LCB0aGVyZSBhcmUgMzItYml0IGRlbHRhcyByZWxhdGl2ZSB0byB0 aGUgYmFzZSBlbGVtZW50IGFyZQorICogcGxhY2VkLiAgVGh1cywgdGhlIHJlcXVpcmVkIG9mZnNl dCBmb3IgdGhlIDAtdGggZWxlbWVudCBpcyB0aGUgcGFnZSdzCisgKiBiYXNlOyB0aGUgdmFsdWUg Zm9yIGVhY2ggc3Vic2VxdWVudCBvZmZzZXQgb24gdGhlIHNhbWUgcGFnZSBpcyBjYWxjdWxhdGVk CisgKiBieSBhZGRpbmcgaXQgdG8gdGhlIHBhZ2UgYmFzZSAoMC10aCkgZWxlbWVudC4KICAqLwog CiAvKiBXZSBuZWVkIGZvdXIgYnl0ZXMgcGVyIG9mZnNldCAqLwotI2RlZmluZSBNVUxUSVhBQ1Rf T0ZGU0VUU19QRVJfUEFHRSAoQkxDS1NaIC8gc2l6ZW9mKE11bHRpWGFjdE9mZnNldCkpCisjZGVm aW5lIE1VTFRJWEFDVF9PRkZTRVRTX1BFUl9QQUdFCQlcCisJKChCTENLU1ogLSBzaXplb2YoTXVs dGlYYWN0T2Zmc2V0KSkgLyBzaXplb2YoU2hvcnRNdWx0aVhhY3RPZmZzZXQpKQogCiBzdGF0aWMg aW5saW5lIGludDY0CiBNdWx0aVhhY3RJZFRvT2Zmc2V0UGFnZShNdWx0aVhhY3RJZCBtdWx0aSkK QEAgLTIwNywxMCArMjE3LDE0IEBAIE1YT2Zmc2V0VG9NZW1iZXJPZmZzZXQoTXVsdGlYYWN0T2Zm c2V0IG9mZnNldCkKIAkJbWVtYmVyX2luX2dyb3VwICogc2l6ZW9mKFRyYW5zYWN0aW9uSWQpOwog fQogCi0vKiBNdWx0aXhhY3QgbWVtYmVycyB3cmFwYXJvdW5kIHRocmVzaG9sZHMuICovCi0jZGVm aW5lIE1VTFRJWEFDVF9NRU1CRVJfU0FGRV9USFJFU0hPTEQJCShNYXhNdWx0aVhhY3RPZmZzZXQg LyAyKQotI2RlZmluZSBNVUxUSVhBQ1RfTUVNQkVSX0RBTkdFUl9USFJFU0hPTEQJXAotCShNYXhN dWx0aVhhY3RPZmZzZXQgLSBNYXhNdWx0aVhhY3RPZmZzZXQgLyA0KQorLyoKKyAqIE11bHRpeGFj dCBtZW1iZXJzIHdhcm5pbmcgdGhyZXNob2xkLgorICoKKyAqIElmIGRpZmZlcmVuY2UgYmV0dHdl ZW4gbmV4dE9mZnNldCBhbmQgb2xkZXN0T2Zmc2V0IGV4Y2VlZCB0aGlzIHZhbHVlLCB3ZQorICog dHJpZ2dlciBhdXRvdmFjdXVtaW4gb3JkZXIgdG8gcmVsZWFzZSB0aGUgZGlzayBzcGFjZSwgcmVk dWNlIHRhYmxlIGJsb2F0IGlmCisgKiBwb3NzaWJsZS4KKyAqLworI2RlZmluZSBNVUxUSVhBQ1Rf TUVNQkVSX0FVVE9WQUNfVEhSRVNIT0xECQlVSU5UNjRDT05TVCgweEZGRkZGRkZGKQogCiBzdGF0 aWMgaW5saW5lIE11bHRpWGFjdElkCiBQcmV2aW91c011bHRpWGFjdElkKE11bHRpWGFjdElkIG11 bHRpKQpAQCAtMjI3LDYgKzI0MSw0OSBAQCBzdGF0aWMgU2xydUN0bERhdGEgTXVsdGlYYWN0TWVt YmVyQ3RsRGF0YTsKICNkZWZpbmUgTXVsdGlYYWN0T2Zmc2V0Q3RsCSgmTXVsdGlYYWN0T2Zmc2V0 Q3RsRGF0YSkKICNkZWZpbmUgTXVsdGlYYWN0TWVtYmVyQ3RsCSgmTXVsdGlYYWN0TWVtYmVyQ3Rs RGF0YSkKIAorc3RhdGljIGlubGluZSBNdWx0aVhhY3RPZmZzZXQKK01YT2Zmc2V0UmVhZChpbnQg ZW50cnlubywgaW50IHNsb3RubykKK3sKKwlNdWx0aVhhY3RPZmZzZXQJCSAgICpvZmZwdHI7CisJ U2hvcnRNdWx0aVhhY3RPZmZzZXQgICAqb2ZmMzJwdHI7CisKKwlvZmZwdHIgPSAoTXVsdGlYYWN0 T2Zmc2V0ICopIE11bHRpWGFjdE9mZnNldEN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9d OworCWlmIChlbnRyeW5vICE9IDApCisJeworCQlvZmYzMnB0ciA9IChTaG9ydE11bHRpWGFjdE9m ZnNldCAqKSAob2ZmcHRyICsgMSk7CS8qIGJ5cGFzcyBiYXNlICovCisJCW9mZjMycHRyICs9IGVu dHJ5bm8gLSAxOworCisJCXJldHVybiAqb2ZmMzJwdHIgKyAqb2ZmcHRyOwkJLyogNjQtYml0IGJh c2UgKyAzMi1iaXQgdmFsdWUgKi8KKwl9CisKKwkvKiAwLXRoIGVsZW1lbnQgYXJlIDY0LWJpdCB2 YWx1ZSAqLworCXJldHVybiAqb2ZmcHRyOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK01YT2Zm c2V0V3JpdGUoaW50IGVudHJ5bm8sIGludCBzbG90bm8sIE11bHRpWGFjdE9mZnNldCBvZmZzZXQp Cit7CisJTXVsdGlYYWN0T2Zmc2V0CQkgICAqb2ZmcHRyOworCVNob3J0TXVsdGlYYWN0T2Zmc2V0 ICAgKm9mZjMycHRyOworCisJb2ZmcHRyID0gKE11bHRpWGFjdE9mZnNldCAqKSBNdWx0aVhhY3RP ZmZzZXRDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXTsKKwlpZiAoZW50cnlubyAhPSAw KQorCXsKKwkJb2ZmMzJwdHIgPSAoU2hvcnRNdWx0aVhhY3RPZmZzZXQgKikgKG9mZnB0ciArIDEp OwkvKiBieXBhc3MgYmFzZSAqLworCQlvZmYzMnB0ciArPSBlbnRyeW5vIC0gMTsKKwkJKm9mZjMy cHRyID0gKFNob3J0TXVsdGlYYWN0T2Zmc2V0KSAob2Zmc2V0IC0gKm9mZnB0cik7CisKKwkJcmV0 dXJuOworCX0KKworCS8qCisJICogVGhlIGZpcnN0IG9mZnNldCBvbiB0aGUgcGFnZSBpcyBhc3Np Z25lZCBhIDY0LWJpdCB2YWx1ZS4gIEFsbCBvdGhlcgorCSAqIGVsZW1lbnRzIG9uIHRoZSBwYWdl IHdpbGwgYmUgY2FsY3VsYXRlZCB1c2luZyB0aGlzIHZhbHVlIGFzIGEgYmFzZSBhbmQKKwkgKiBh ZGRlZCB0byBpdCAzMi1iaXQgdmFsdWUuCisJICovCisJKm9mZnB0ciA9IG9mZnNldDsKK30KKwog LyoKICAqIE11bHRpWGFjdCBzdGF0ZSBzaGFyZWQgYWNyb3NzIGFsbCBiYWNrZW5kcy4gIEFsbCB0 aGlzIHN0YXRlIGlzIHByb3RlY3RlZAogICogYnkgTXVsdGlYYWN0R2VuTG9jay4gIChXZSBhbHNv IHVzZSBTTFJVIGJhbmsncyBsb2NrIG9mIE11bHRpWGFjdE9mZnNldCBhbmQKQEAgLTI2Nyw5ICsz MjQsNiBAQCB0eXBlZGVmIHN0cnVjdCBNdWx0aVhhY3RTdGF0ZURhdGEKIAlNdWx0aVhhY3RJZCBt dWx0aVN0b3BMaW1pdDsKIAlNdWx0aVhhY3RJZCBtdWx0aVdyYXBMaW1pdDsKIAotCS8qIHN1cHBv cnQgZm9yIG1lbWJlcnMgYW50aS13cmFwYXJvdW5kIG1lYXN1cmVzICovCi0JTXVsdGlYYWN0T2Zm c2V0IG9mZnNldFN0b3BMaW1pdDsJLyoga25vd24gaWYgb2xkZXN0T2Zmc2V0S25vd24gKi8KLQog CS8qCiAJICogVGhpcyBpcyB1c2VkIHRvIHNsZWVwIHVudGlsIGEgbXVsdGl4YWN0IG9mZnNldCBp cyB3cml0dGVuIHdoZW4gd2Ugd2FudAogCSAqIHRvIGNyZWF0ZSB0aGUgbmV4dCBvbmUuCkBAIC00 MDAsOCArNDU0LDYgQEAgc3RhdGljIGJvb2wgTXVsdGlYYWN0T2Zmc2V0UHJlY2VkZXMoTXVsdGlY YWN0T2Zmc2V0IG9mZnNldDEsCiAJCQkJCQkJCQlNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0Mik7CiBz dGF0aWMgdm9pZCBFeHRlbmRNdWx0aVhhY3RPZmZzZXQoTXVsdGlYYWN0SWQgbXVsdGkpOwogc3Rh dGljIHZvaWQgRXh0ZW5kTXVsdGlYYWN0TWVtYmVyKE11bHRpWGFjdE9mZnNldCBvZmZzZXQsIGlu dCBubWVtYmVycyk7Ci1zdGF0aWMgYm9vbCBNdWx0aVhhY3RPZmZzZXRXb3VsZFdyYXAoTXVsdGlY YWN0T2Zmc2V0IGJvdW5kYXJ5LAotCQkJCQkJCQkJIE11bHRpWGFjdE9mZnNldCBzdGFydCwgdWlu dDMyIGRpc3RhbmNlKTsKIHN0YXRpYyBib29sIFNldE9mZnNldFZhY3V1bUxpbWl0KGJvb2wgaXNf c3RhcnR1cCk7CiBzdGF0aWMgYm9vbCBmaW5kX211bHRpeGFjdF9zdGFydChNdWx0aVhhY3RJZCBt dWx0aSwgTXVsdGlYYWN0T2Zmc2V0ICpyZXN1bHQpOwogc3RhdGljIHZvaWQgV3JpdGVNVHJ1bmNh dGVYbG9nUmVjKE9pZCBvbGRlc3RNdWx0aURCLApAQCAtOTEwLDcgKzk2Miw2IEBAIFJlY29yZE5l d011bHRpWGFjdChNdWx0aVhhY3RJZCBtdWx0aSwgTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCwKIAlp bnQ2NAkJcHJldl9wYWdlbm87CiAJaW50CQkJZW50cnlubzsKIAlpbnQJCQlzbG90bm87Ci0JTXVs dGlYYWN0T2Zmc2V0ICpvZmZwdHI7CiAJaW50CQkJaTsKIAlMV0xvY2sJICAgKmxvY2s7CiAJTFdM b2NrCSAgICpwcmV2bG9jayA9IE5VTEw7CkBAIC05MjksMTAgKzk4MCw4IEBAIFJlY29yZE5ld011 bHRpWGFjdChNdWx0aVhhY3RJZCBtdWx0aSwgTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCwKIAkgKiB0 YWtlIHRoZSB0cm91YmxlIHRvIGdlbmVyYWxpemUgdGhlIHNscnUuYyBlcnJvciByZXBvcnRpbmcg Y29kZS4KIAkgKi8KIAlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZShNdWx0aVhhY3RPZmZzZXRD dGwsIHBhZ2VubywgdHJ1ZSwgbXVsdGkpOwotCW9mZnB0ciA9IChNdWx0aVhhY3RPZmZzZXQgKikg TXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub107Ci0Jb2ZmcHRy ICs9IGVudHJ5bm87CiAKLQkqb2ZmcHRyID0gb2Zmc2V0OworCU1YT2Zmc2V0V3JpdGUoZW50cnlu bywgc2xvdG5vLCBvZmZzZXQpOwogCiAJTXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPnBhZ2Vf ZGlydHlbc2xvdG5vXSA9IHRydWU7CiAKQEAgLTExNTQsNzggKzEyMDMsNiBAQCBHZXROZXdNdWx0 aVhhY3RJZChpbnQgbm1lbWJlcnMsIE11bHRpWGFjdE9mZnNldCAqb2Zmc2V0KQogCWVsc2UKIAkJ Km9mZnNldCA9IG5leHRPZmZzZXQ7CiAKLQkvKi0tLS0tLS0tLS0KLQkgKiBQcm90ZWN0IGFnYWlu c3Qgb3ZlcnJ1biBvZiB0aGUgbWVtYmVycyBzcGFjZSBhcyB3ZWxsLCB3aXRoIHRoZQotCSAqIGZv bGxvd2luZyBydWxlczoKLQkgKgotCSAqIElmIHdlJ3JlIHBhc3Qgb2Zmc2V0U3RvcExpbWl0LCBy ZWZ1c2UgdG8gZ2VuZXJhdGUgbW9yZSBtdWx0aXMuCi0JICogSWYgd2UncmUgY2xvc2UgdG8gb2Zm c2V0U3RvcExpbWl0LCBlbWl0IGEgd2FybmluZy4KLQkgKgotCSAqIEFyYml0cmFyaWx5LCB3ZSBz dGFydCBlbWl0dGluZyB3YXJuaW5ncyB3aGVuIHdlJ3JlIDIwIHNlZ21lbnRzIG9yIGxlc3MKLQkg KiBmcm9tIG9mZnNldFN0b3BMaW1pdC4KLQkgKgotCSAqIE5vdGUgd2UgaGF2ZW4ndCB1cGRhdGVk IHRoZSBzaGFyZWQgc3RhdGUgeWV0LCBzbyBpZiB3ZSBmYWlsIGF0IHRoaXMKLQkgKiBwb2ludCwg dGhlIG11bHRpeGFjdCBJRCB3ZSBncmFiYmVkIGNhbiBzdGlsbCBiZSB1c2VkIGJ5IHRoZSBuZXh0 IGd1eS4KLQkgKgotCSAqIE5vdGUgdGhhdCB0aGVyZSBpcyBubyBwb2ludCBpbiBmb3JjaW5nIGF1 dG92YWN1dW0gcnVucyBoZXJlOiB0aGUKLQkgKiBtdWx0aXhhY3QgZnJlZXplIHNldHRpbmdzIHdv dWxkIGhhdmUgdG8gYmUgcmVkdWNlZCBmb3IgdGhhdCB0byBoYXZlIGFueQotCSAqIGVmZmVjdC4K LQkgKi0tLS0tLS0tLS0KLQkgKi8KLSNkZWZpbmUgT0ZGU0VUX1dBUk5fU0VHTUVOVFMJMjAKLQlp ZiAoTXVsdGlYYWN0U3RhdGUtPm9sZGVzdE9mZnNldEtub3duICYmCi0JCU11bHRpWGFjdE9mZnNl dFdvdWxkV3JhcChNdWx0aVhhY3RTdGF0ZS0+b2Zmc2V0U3RvcExpbWl0LCBuZXh0T2Zmc2V0LAot CQkJCQkJCQkgbm1lbWJlcnMpKQotCXsKLQkJLyogc2VlIGNvbW1lbnQgaW4gdGhlIGNvcnJlc3Bv bmRpbmcgb2Zmc2V0cyB3cmFwYXJvdW5kIGNhc2UgKi8KLQkJU2VuZFBvc3RtYXN0ZXJTaWduYWwo UE1TSUdOQUxfU1RBUlRfQVVUT1ZBQ19MQVVOQ0hFUik7Ci0KLQkJZXJlcG9ydChFUlJPUiwKLQkJ CQkoZXJyY29kZShFUlJDT0RFX1BST0dSQU1fTElNSVRfRVhDRUVERUQpLAotCQkJCSBlcnJtc2co Im11bHRpeGFjdCBcIm1lbWJlcnNcIiBsaW1pdCBleGNlZWRlZCIpLAotCQkJCSBlcnJkZXRhaWxf cGx1cmFsKCJUaGlzIGNvbW1hbmQgd291bGQgY3JlYXRlIGEgbXVsdGl4YWN0IHdpdGggJXUgbWVt YmVycywgYnV0IHRoZSByZW1haW5pbmcgc3BhY2UgaXMgb25seSBlbm91Z2ggZm9yICV1IG1lbWJl ci4iLAotCQkJCQkJCQkgICJUaGlzIGNvbW1hbmQgd291bGQgY3JlYXRlIGEgbXVsdGl4YWN0IHdp dGggJXUgbWVtYmVycywgYnV0IHRoZSByZW1haW5pbmcgc3BhY2UgaXMgb25seSBlbm91Z2ggZm9y ICV1IG1lbWJlcnMuIiwKLQkJCQkJCQkJICBNdWx0aVhhY3RTdGF0ZS0+b2Zmc2V0U3RvcExpbWl0 IC0gbmV4dE9mZnNldCAtIDEsCi0JCQkJCQkJCSAgbm1lbWJlcnMsCi0JCQkJCQkJCSAgTXVsdGlY YWN0U3RhdGUtPm9mZnNldFN0b3BMaW1pdCAtIG5leHRPZmZzZXQgLSAxKSwKLQkJCQkgZXJyaGlu dCgiRXhlY3V0ZSBhIGRhdGFiYXNlLXdpZGUgVkFDVVVNIGluIGRhdGFiYXNlIHdpdGggT0lEICV1 IHdpdGggcmVkdWNlZCBcInZhY3V1bV9tdWx0aXhhY3RfZnJlZXplX21pbl9hZ2VcIiBhbmQgXCJ2 YWN1dW1fbXVsdGl4YWN0X2ZyZWV6ZV90YWJsZV9hZ2VcIiBzZXR0aW5ncy4iLAotCQkJCQkJIE11 bHRpWGFjdFN0YXRlLT5vbGRlc3RNdWx0aVhhY3REQikpKTsKLQl9Ci0KLQkvKgotCSAqIENoZWNr IHdoZXRoZXIgd2Ugc2hvdWxkIGtpY2sgYXV0b3ZhY3V1bSBpbnRvIGFjdGlvbiwgdG8gcHJldmVu dCBtZW1iZXJzCi0JICogd3JhcGFyb3VuZC4gTkIgd2UgdXNlIGEgbXVjaCBsYXJnZXIgd2luZG93 IHRvIHRyaWdnZXIgYXV0b3ZhY3V1bSB0aGFuCi0JICoganVzdCB0aGUgd2FybmluZyBsaW1pdC4g VGhlIHdhcm5pbmcgaXMganVzdCBhIG1lYXN1cmUgb2YgbGFzdCByZXNvcnQgLQotCSAqIHRoaXMg aXMgaW4gbGluZSB3aXRoIEdldE5ld1RyYW5zYWN0aW9uSWQncyBiZWhhdmlvdXIuCi0JICovCi0J aWYgKCFNdWx0aVhhY3RTdGF0ZS0+b2xkZXN0T2Zmc2V0S25vd24gfHwKLQkJKE11bHRpWGFjdFN0 YXRlLT5uZXh0T2Zmc2V0IC0gTXVsdGlYYWN0U3RhdGUtPm9sZGVzdE9mZnNldAotCQkgPiBNVUxU SVhBQ1RfTUVNQkVSX1NBRkVfVEhSRVNIT0xEKSkKLQl7Ci0JCS8qCi0JCSAqIFRvIGF2b2lkIHN3 YW1waW5nIHRoZSBwb3N0bWFzdGVyIHdpdGggc2lnbmFscywgd2UgaXNzdWUgdGhlIGF1dG92YWMK LQkJICogcmVxdWVzdCBvbmx5IHdoZW4gY3Jvc3NpbmcgYSBzZWdtZW50IGJvdW5kYXJ5LiBXaXRo IGRlZmF1bHQKLQkJICogY29tcGlsYXRpb24gc2V0dGluZ3MgdGhhdCdzIHJvdWdobHkgYWZ0ZXIg NTBrIG1lbWJlcnMuICBUaGlzIHN0aWxsCi0JCSAqIGdpdmVzIHBsZW50eSBvZiBjaGFuY2VzIGJl Zm9yZSB3ZSBnZXQgaW50byByZWFsIHRyb3VibGUuCi0JCSAqLwotCQlpZiAoKE1YT2Zmc2V0VG9N ZW1iZXJQYWdlKG5leHRPZmZzZXQpIC8gU0xSVV9QQUdFU19QRVJfU0VHTUVOVCkgIT0KLQkJCShN WE9mZnNldFRvTWVtYmVyUGFnZShuZXh0T2Zmc2V0ICsgbm1lbWJlcnMpIC8gU0xSVV9QQUdFU19Q RVJfU0VHTUVOVCkpCi0JCQlTZW5kUG9zdG1hc3RlclNpZ25hbChQTVNJR05BTF9TVEFSVF9BVVRP VkFDX0xBVU5DSEVSKTsKLQl9Ci0KLQlpZiAoTXVsdGlYYWN0U3RhdGUtPm9sZGVzdE9mZnNldEtu b3duICYmCi0JCU11bHRpWGFjdE9mZnNldFdvdWxkV3JhcChNdWx0aVhhY3RTdGF0ZS0+b2Zmc2V0 U3RvcExpbWl0LAotCQkJCQkJCQkgbmV4dE9mZnNldCwKLQkJCQkJCQkJIG5tZW1iZXJzICsgTVVM VElYQUNUX01FTUJFUlNfUEVSX1BBR0UgKiBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UICogT0ZGU0VU X1dBUk5fU0VHTUVOVFMpKQotCQllcmVwb3J0KFdBUk5JTkcsCi0JCQkJKGVycmNvZGUoRVJSQ09E RV9QUk9HUkFNX0xJTUlUX0VYQ0VFREVEKSwKLQkJCQkgZXJybXNnX3BsdXJhbCgiZGF0YWJhc2Ug d2l0aCBPSUQgJXUgbXVzdCBiZSB2YWN1dW1lZCBiZWZvcmUgJWQgbW9yZSBtdWx0aXhhY3QgbWVt YmVyIGlzIHVzZWQiLAotCQkJCQkJCSAgICJkYXRhYmFzZSB3aXRoIE9JRCAldSBtdXN0IGJlIHZh Y3V1bWVkIGJlZm9yZSAlZCBtb3JlIG11bHRpeGFjdCBtZW1iZXJzIGFyZSB1c2VkIiwKLQkJCQkJ CQkgICBNdWx0aVhhY3RTdGF0ZS0+b2Zmc2V0U3RvcExpbWl0IC0gbmV4dE9mZnNldCArIG5tZW1i ZXJzLAotCQkJCQkJCSAgIE11bHRpWGFjdFN0YXRlLT5vbGRlc3RNdWx0aVhhY3REQiwKLQkJCQkJ CQkgICBNdWx0aVhhY3RTdGF0ZS0+b2Zmc2V0U3RvcExpbWl0IC0gbmV4dE9mZnNldCArIG5tZW1i ZXJzKSwKLQkJCQkgZXJyaGludCgiRXhlY3V0ZSBhIGRhdGFiYXNlLXdpZGUgVkFDVVVNIGluIHRo YXQgZGF0YWJhc2Ugd2l0aCByZWR1Y2VkIFwidmFjdXVtX211bHRpeGFjdF9mcmVlemVfbWluX2Fn ZVwiIGFuZCBcInZhY3V1bV9tdWx0aXhhY3RfZnJlZXplX3RhYmxlX2FnZVwiIHNldHRpbmdzLiIp KSk7Ci0KIAlFeHRlbmRNdWx0aVhhY3RNZW1iZXIobmV4dE9mZnNldCwgbm1lbWJlcnMpOwogCiAJ LyoKQEAgLTEyNTQsNyArMTIzMSw4IEBAIEdldE5ld011bHRpWGFjdElkKGludCBubWVtYmVycywg TXVsdGlYYWN0T2Zmc2V0ICpvZmZzZXQpCiAKIAlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdEdlbkxv Y2spOwogCi0JZGVidWdfZWxvZzQoREVCVUcyLCAiR2V0TmV3OiByZXR1cm5pbmcgJXUgb2Zmc2V0 ICV1IiwgcmVzdWx0LCAqb2Zmc2V0KTsKKwlkZWJ1Z19lbG9nNChERUJVRzIsICJHZXROZXc6IHJl dHVybmluZyAldSBvZmZzZXQgJSIgUFJJdTY0LCByZXN1bHQsCisJCQkJKm9mZnNldCk7CiAJcmV0 dXJuIHJlc3VsdDsKIH0KIApAQCAtMTI5Myw3ICsxMjcxLDYgQEAgR2V0TXVsdGlYYWN0SWRNZW1i ZXJzKE11bHRpWGFjdElkIG11bHRpLCBNdWx0aVhhY3RNZW1iZXIgKiptZW1iZXJzLAogCWludDY0 CQlwcmV2X3BhZ2VubzsKIAlpbnQJCQllbnRyeW5vOwogCWludAkJCXNsb3RubzsKLQlNdWx0aVhh Y3RPZmZzZXQgKm9mZnB0cjsKIAlNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0OwogCWludAkJCWxlbmd0 aDsKIAlpbnQJCQl0cnVlbGVuZ3RoOwpAQCAtMTQxNyw5ICsxMzk0LDggQEAgcmV0cnk6CiAJTFdM b2NrQWNxdWlyZShsb2NrLCBMV19FWENMVVNJVkUpOwogCiAJc2xvdG5vID0gU2ltcGxlTHJ1UmVh ZFBhZ2UoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBwYWdlbm8sIHRydWUsIG11bHRpKTsKLQlvZmZwdHIg PSAoTXVsdGlYYWN0T2Zmc2V0ICopIE11bHRpWGFjdE9mZnNldEN0bC0+c2hhcmVkLT5wYWdlX2J1 ZmZlcltzbG90bm9dOwotCW9mZnB0ciArPSBlbnRyeW5vOwotCW9mZnNldCA9ICpvZmZwdHI7CisK KwlvZmZzZXQgPSBNWE9mZnNldFJlYWQoZW50cnlubywgc2xvdG5vKTsKIAogCUFzc2VydChvZmZz ZXQgIT0gMCk7CiAKQEAgLTE0NjYsOSArMTQ0Miw3IEBAIHJldHJ5OgogCQkJc2xvdG5vID0gU2lt cGxlTHJ1UmVhZFBhZ2UoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBwYWdlbm8sIHRydWUsIHRtcE1YYWN0 KTsKIAkJfQogCi0JCW9mZnB0ciA9IChNdWx0aVhhY3RPZmZzZXQgKikgTXVsdGlYYWN0T2Zmc2V0 Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub107Ci0JCW9mZnB0ciArPSBlbnRyeW5vOwot CQluZXh0TVhPZmZzZXQgPSAqb2ZmcHRyOworCQluZXh0TVhPZmZzZXQgPSBNWE9mZnNldFJlYWQo ZW50cnlubywgc2xvdG5vKTsKIAogCQlpZiAobmV4dE1YT2Zmc2V0ID09IDApCiAJCXsKQEAgLTIx NDIsMTggKzIxMTYsNDAgQEAgVHJpbU11bHRpWGFjdCh2b2lkKQogCWlmIChlbnRyeW5vICE9IDAp CiAJewogCQlpbnQJCQlzbG90bm87Ci0JCU11bHRpWGFjdE9mZnNldCAqb2ZmcHRyOwogCQlMV0xv Y2sJICAgKmxvY2sgPSBTaW1wbGVMcnVHZXRCYW5rTG9jayhNdWx0aVhhY3RPZmZzZXRDdGwsIHBh Z2Vubyk7CiAKLQkJTFdMb2NrQWNxdWlyZShsb2NrLCBMV19FWENMVVNJVkUpOwotCQlzbG90bm8g PSBTaW1wbGVMcnVSZWFkUGFnZShNdWx0aVhhY3RPZmZzZXRDdGwsIHBhZ2VubywgdHJ1ZSwgbmV4 dE1YYWN0KTsKLQkJb2ZmcHRyID0gKE11bHRpWGFjdE9mZnNldCAqKSBNdWx0aVhhY3RPZmZzZXRD dGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXTsKLQkJb2ZmcHRyICs9IGVudHJ5bm87CisJ CWlmIChTaW1wbGVMcnVEb2VzUGh5c2ljYWxQYWdlRXhpc3QoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBw YWdlbm8pKQorCQl7CisJCQlNdWx0aVhhY3RPZmZzZXQgKm9mZnB0cjsKIAotCQlNZW1TZXQob2Zm cHRyLCAwLCBCTENLU1ogLSAoZW50cnlubyAqIHNpemVvZihNdWx0aVhhY3RPZmZzZXQpKSk7CisJ CQlMV0xvY2tBY3F1aXJlKGxvY2ssIExXX0VYQ0xVU0lWRSk7CisJCQlzbG90bm8gPSBTaW1wbGVM cnVSZWFkUGFnZShNdWx0aVhhY3RPZmZzZXRDdGwsIHBhZ2VubywgdHJ1ZSwKKwkJCQkJCQkJCSAg IG5leHRNWGFjdCk7CisJCQlvZmZwdHIgPSAoTXVsdGlYYWN0T2Zmc2V0ICopIE11bHRpWGFjdE9m ZnNldEN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dOwogCi0JCU11bHRpWGFjdE9mZnNl dEN0bC0+c2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10gPSB0cnVlOwotCQlMV0xvY2tSZWxlYXNl KGxvY2spOworCQkJaWYgKGVudHJ5bm8gPT0gMCkKKwkJCQlNZW1TZXQob2ZmcHRyLCAwLCBCTENL U1opOworCQkJZWxzZQorCQkJeworCQkJCVNob3J0TXVsdGlYYWN0T2Zmc2V0ICpvZmYzMnB0cjsK KworCQkJCW9mZjMycHRyID0gKFNob3J0TXVsdGlYYWN0T2Zmc2V0ICopIChvZmZwdHIgKyAxKTsK KwkJCQlvZmYzMnB0ciArPSBlbnRyeW5vOworCisJCQkJLyoKKwkJCQkgKiBLbm93aW5nIHRoYXQg b2ZmcHRyIHBvaW50cyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBidWZmZXIsCisJCQkJICogYWRk cmVzcyBhcml0aG1ldGljIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSB0aGUgYW1vdW50IG9mCisJ CQkJICogYnl0ZXMgcmVtYWluaW5nLgorCQkJCSAqLworCQkJCU1lbVNldChvZmYzMnB0ciwgMCwK KwkJCQkJICAgQkxDS1NaIC0gKCgoY2hhciAqKSBvZmYzMnB0ciAtIChjaGFyICopIG9mZnB0cikp KTsKKwkJCX0KKworCQkJTXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPnBhZ2VfZGlydHlbc2xv dG5vXSA9IHRydWU7CisJCQlMV0xvY2tSZWxlYXNlKGxvY2spOworCQl9CisJCWVsc2UKKwkJCVNp bXBsZUxydVplcm9BbmRXcml0ZVBhZ2UoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBwYWdlbm8pOwogCX0K IAogCS8qCkBAIC0yMjIyLDcgKzIyMTgsNyBAQCBNdWx0aVhhY3RHZXRDaGVja3B0TXVsdGkoYm9v bCBpc19zaHV0ZG93biwKIAlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdEdlbkxvY2spOwogCiAJZGVi dWdfZWxvZzYoREVCVUcyLAotCQkJCSJNdWx0aVhhY3Q6IGNoZWNrcG9pbnQgaXMgbmV4dE11bHRp ICV1LCBuZXh0T2Zmc2V0ICV1LCBvbGRlc3RNdWx0aSAldSBpbiBEQiAldSIsCisJCQkJIk11bHRp WGFjdDogY2hlY2twb2ludCBpcyBuZXh0TXVsdGkgJXUsIG5leHRPZmZzZXQgJSIgUFJJdTY0ICIs IG9sZGVzdE11bHRpICV1IGluIERCICV1IiwKIAkJCQkqbmV4dE11bHRpLCAqbmV4dE11bHRpT2Zm c2V0LCAqb2xkZXN0TXVsdGksICpvbGRlc3RNdWx0aURCKTsKIH0KIApAQCAtMjI1Nyw3ICsyMjUz LDcgQEAgdm9pZAogTXVsdGlYYWN0U2V0TmV4dE1YYWN0KE11bHRpWGFjdElkIG5leHRNdWx0aSwK IAkJCQkJICBNdWx0aVhhY3RPZmZzZXQgbmV4dE11bHRpT2Zmc2V0KQogewotCWRlYnVnX2Vsb2c0 KERFQlVHMiwgIk11bHRpWGFjdDogc2V0dGluZyBuZXh0IG11bHRpIHRvICV1IG9mZnNldCAldSIs CisJZGVidWdfZWxvZzQoREVCVUcyLCAiTXVsdGlYYWN0OiBzZXR0aW5nIG5leHQgbXVsdGkgdG8g JXUgb2Zmc2V0ICUiIFBSSXU2NCwKIAkJCQluZXh0TXVsdGksIG5leHRNdWx0aU9mZnNldCk7CiAJ TFdMb2NrQWNxdWlyZShNdWx0aVhhY3RHZW5Mb2NrLCBMV19FWENMVVNJVkUpOwogCU11bHRpWGFj dFN0YXRlLT5uZXh0TVhhY3QgPSBuZXh0TXVsdGk7CkBAIC0yNDQ4LDcgKzI0NDQsNyBAQCBNdWx0 aVhhY3RBZHZhbmNlTmV4dE1YYWN0KE11bHRpWGFjdElkIG1pbk11bHRpLAogCX0KIAlpZiAoTXVs dGlYYWN0T2Zmc2V0UHJlY2VkZXMoTXVsdGlYYWN0U3RhdGUtPm5leHRPZmZzZXQsIG1pbk11bHRp T2Zmc2V0KSkKIAl7Ci0JCWRlYnVnX2Vsb2czKERFQlVHMiwgIk11bHRpWGFjdDogc2V0dGluZyBu ZXh0IG9mZnNldCB0byAldSIsCisJCWRlYnVnX2Vsb2czKERFQlVHMiwgIk11bHRpWGFjdDogc2V0 dGluZyBuZXh0IG9mZnNldCB0byAlIiBQUklVNjQsCiAJCQkJCW1pbk11bHRpT2Zmc2V0KTsKIAkJ TXVsdGlYYWN0U3RhdGUtPm5leHRPZmZzZXQgPSBtaW5NdWx0aU9mZnNldDsKIAl9CkBAIC0yNjMy LDE1ICsyNjI4LDEzIEBAIEdldE9sZGVzdE11bHRpWGFjdElkKHZvaWQpCiB9CiAKIC8qCi0gKiBE ZXRlcm1pbmUgaG93IGFnZ3Jlc3NpdmVseSB3ZSBuZWVkIHRvIHZhY3V1bSBpbiBvcmRlciB0byBw cmV2ZW50IG1lbWJlcgotICogd3JhcGFyb3VuZC4KKyAqIERldGVybWluZSBpZiB3ZSBuZWVkIHRv IHZhY3V1bSBmb3IgbWVtYmVyIG9yIG5vdC4KICAqCiAgKiBUbyBkbyBzbyBkZXRlcm1pbmUgd2hh dCdzIHRoZSBvbGRlc3QgbWVtYmVyIG9mZnNldCBhbmQgaW5zdGFsbCB0aGUgbGltaXQKICAqIGlu Zm8gaW4gTXVsdGlYYWN0U3RhdGUsIHdoZXJlIGl0IGNhbiBiZSB1c2VkIHRvIHByZXZlbnQgb3Zl cnJ1biBvZiBvbGQgZGF0YQogICogaW4gdGhlIG1lbWJlcnMgU0xSVSBhcmVhLgogICoKLSAqIFRo ZSByZXR1cm4gdmFsdWUgaXMgdHJ1ZSBpZiBlbWVyZ2VuY3kgYXV0b3ZhY3V1bSBpcyByZXF1aXJl ZCBhbmQgZmFsc2UKLSAqIG90aGVyd2lzZS4KKyAqIFRoZSByZXR1cm4gdmFsdWUgaXMgdHJ1ZSBp ZiBhdXRvdmFjdXVtIGlzIHJlcXVpcmVkIGFuZCBmYWxzZSBvdGhlcndpc2UuCiAgKi8KIHN0YXRp YyBib29sCiBTZXRPZmZzZXRWYWN1dW1MaW1pdChib29sIGlzX3N0YXJ0dXApCkBAIC0yNjUyLDgg KzI2NDYsNiBAQCBTZXRPZmZzZXRWYWN1dW1MaW1pdChib29sIGlzX3N0YXJ0dXApCiAJTXVsdGlY YWN0T2Zmc2V0IG5leHRPZmZzZXQ7CiAJYm9vbAkJb2xkZXN0T2Zmc2V0S25vd24gPSBmYWxzZTsK IAlib29sCQlwcmV2T2xkZXN0T2Zmc2V0S25vd247Ci0JTXVsdGlYYWN0T2Zmc2V0IG9mZnNldFN0 b3BMaW1pdCA9IDA7Ci0JTXVsdGlYYWN0T2Zmc2V0IHByZXZPZmZzZXRTdG9wTGltaXQ7CiAKIAkv KgogCSAqIE5COiBIYXZlIHRvIHByZXZlbnQgY29uY3VycmVudCB0cnVuY2F0aW9uLCB3ZSBtaWdo dCBvdGhlcndpc2UgdHJ5IHRvCkBAIC0yNjY4LDcgKzI2NjAsNiBAQCBTZXRPZmZzZXRWYWN1dW1M aW1pdChib29sIGlzX3N0YXJ0dXApCiAJbmV4dE9mZnNldCA9IE11bHRpWGFjdFN0YXRlLT5uZXh0 T2Zmc2V0OwogCXByZXZPbGRlc3RPZmZzZXRLbm93biA9IE11bHRpWGFjdFN0YXRlLT5vbGRlc3RP ZmZzZXRLbm93bjsKIAlwcmV2T2xkZXN0T2Zmc2V0ID0gTXVsdGlYYWN0U3RhdGUtPm9sZGVzdE9m ZnNldDsKLQlwcmV2T2Zmc2V0U3RvcExpbWl0ID0gTXVsdGlYYWN0U3RhdGUtPm9mZnNldFN0b3BM aW1pdDsKIAlBc3NlcnQoTXVsdGlYYWN0U3RhdGUtPmZpbmlzaGVkU3RhcnR1cCk7CiAJTFdMb2Nr UmVsZWFzZShNdWx0aVhhY3RHZW5Mb2NrKTsKIApAQCAtMjY5OSwxMSArMjY5MCw3IEBAIFNldE9m ZnNldFZhY3V1bUxpbWl0KGJvb2wgaXNfc3RhcnR1cCkKIAkJb2xkZXN0T2Zmc2V0S25vd24gPQog CQkJZmluZF9tdWx0aXhhY3Rfc3RhcnQob2xkZXN0TXVsdGlYYWN0SWQsICZvbGRlc3RPZmZzZXQp OwogCi0JCWlmIChvbGRlc3RPZmZzZXRLbm93bikKLQkJCWVyZXBvcnQoREVCVUcxLAotCQkJCQko ZXJybXNnX2ludGVybmFsKCJvbGRlc3QgTXVsdGlYYWN0SWQgbWVtYmVyIGlzIGF0IG9mZnNldCAl dSIsCi0JCQkJCQkJCQkgb2xkZXN0T2Zmc2V0KSkpOwotCQllbHNlCisJCWlmICghb2xkZXN0T2Zm c2V0S25vd24pCiAJCQllcmVwb3J0KExPRywKIAkJCQkJKGVycm1zZygiTXVsdGlYYWN0IG1lbWJl ciB3cmFwYXJvdW5kIHByb3RlY3Rpb25zIGFyZSBkaXNhYmxlZCBiZWNhdXNlIG9sZGVzdCBjaGVj a3BvaW50ZWQgTXVsdGlYYWN0ICV1IGRvZXMgbm90IGV4aXN0IG9uIGRpc2siLAogCQkJCQkJCW9s ZGVzdE11bHRpWGFjdElkKSkpOwpAQCAtMjcxNiwyNCArMjcwMyw3IEBAIFNldE9mZnNldFZhY3V1 bUxpbWl0KGJvb2wgaXNfc3RhcnR1cCkKIAkgKiBvdmVycnVuIG9mIG9sZCBkYXRhIGluIHRoZSBt ZW1iZXJzIFNMUlUgYXJlYS4gV2UgY2FuIG9ubHkgZG8gc28gaWYgdGhlCiAJICogb2xkZXN0IG9m ZnNldCBpcyBrbm93biB0aG91Z2guCiAJICovCi0JaWYgKG9sZGVzdE9mZnNldEtub3duKQotCXsK LQkJLyogbW92ZSBiYWNrIHRvIHN0YXJ0IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNlZ21lbnQgKi8K LQkJb2Zmc2V0U3RvcExpbWl0ID0gb2xkZXN0T2Zmc2V0IC0gKG9sZGVzdE9mZnNldCAlCi0JCQkJ CQkJCQkJICAoTVVMVElYQUNUX01FTUJFUlNfUEVSX1BBR0UgKiBTTFJVX1BBR0VTX1BFUl9TRUdN RU5UKSk7Ci0KLQkJLyogYWx3YXlzIGxlYXZlIG9uZSBzZWdtZW50IGJlZm9yZSB0aGUgd3JhcGFy b3VuZCBwb2ludCAqLwotCQlvZmZzZXRTdG9wTGltaXQgLT0gKE1VTFRJWEFDVF9NRU1CRVJTX1BF Ul9QQUdFICogU0xSVV9QQUdFU19QRVJfU0VHTUVOVCk7Ci0KLQkJaWYgKCFwcmV2T2xkZXN0T2Zm c2V0S25vd24gJiYgIWlzX3N0YXJ0dXApCi0JCQllcmVwb3J0KExPRywKLQkJCQkJKGVycm1zZygi TXVsdGlYYWN0IG1lbWJlciB3cmFwYXJvdW5kIHByb3RlY3Rpb25zIGFyZSBub3cgZW5hYmxlZCIp KSk7Ci0KLQkJZXJlcG9ydChERUJVRzEsCi0JCQkJKGVycm1zZ19pbnRlcm5hbCgiTXVsdGlYYWN0 IG1lbWJlciBzdG9wIGxpbWl0IGlzIG5vdyAldSBiYXNlZCBvbiBNdWx0aVhhY3QgJXUiLAotCQkJ CQkJCQkgb2Zmc2V0U3RvcExpbWl0LCBvbGRlc3RNdWx0aVhhY3RJZCkpKTsKLQl9Ci0JZWxzZSBp ZiAocHJldk9sZGVzdE9mZnNldEtub3duKQorCWlmIChwcmV2T2xkZXN0T2Zmc2V0S25vd24pCiAJ ewogCQkvKgogCQkgKiBJZiB3ZSBmYWlsZWQgdG8gZ2V0IHRoZSBvbGRlc3Qgb2Zmc2V0IHRoaXMg dGltZSwgYnV0IHdlIGhhdmUgYQpAQCAtMjc0Myw2OSArMjcxMywxOSBAQCBTZXRPZmZzZXRWYWN1 dW1MaW1pdChib29sIGlzX3N0YXJ0dXApCiAJCSAqLwogCQlvbGRlc3RPZmZzZXQgPSBwcmV2T2xk ZXN0T2Zmc2V0OwogCQlvbGRlc3RPZmZzZXRLbm93biA9IHRydWU7Ci0JCW9mZnNldFN0b3BMaW1p dCA9IHByZXZPZmZzZXRTdG9wTGltaXQ7CiAJfQogCiAJLyogSW5zdGFsbCB0aGUgY29tcHV0ZWQg dmFsdWVzICovCiAJTFdMb2NrQWNxdWlyZShNdWx0aVhhY3RHZW5Mb2NrLCBMV19FWENMVVNJVkUp OwogCU11bHRpWGFjdFN0YXRlLT5vbGRlc3RPZmZzZXQgPSBvbGRlc3RPZmZzZXQ7CiAJTXVsdGlY YWN0U3RhdGUtPm9sZGVzdE9mZnNldEtub3duID0gb2xkZXN0T2Zmc2V0S25vd247Ci0JTXVsdGlY YWN0U3RhdGUtPm9mZnNldFN0b3BMaW1pdCA9IG9mZnNldFN0b3BMaW1pdDsKIAlMV0xvY2tSZWxl YXNlKE11bHRpWGFjdEdlbkxvY2spOwogCiAJLyoKLQkgKiBEbyB3ZSBuZWVkIGFuIGVtZXJnZW5j eSBhdXRvdmFjdXVtPwlJZiB3ZSdyZSBub3Qgc3VyZSwgYXNzdW1lIHllcy4KKwkgKiBEbyB3ZSBu ZWVkIGF1dG92YWN1dW0/CUlmIHdlJ3JlIG5vdCBzdXJlLCBhc3N1bWUgeWVzLgogCSAqLwogCXJl dHVybiAhb2xkZXN0T2Zmc2V0S25vd24gfHwKLQkJKG5leHRPZmZzZXQgLSBvbGRlc3RPZmZzZXQg PiBNVUxUSVhBQ1RfTUVNQkVSX1NBRkVfVEhSRVNIT0xEKTsKLX0KLQotLyoKLSAqIFJldHVybiB3 aGV0aGVyIGFkZGluZyAiZGlzdGFuY2UiIHRvICJzdGFydCIgd291bGQgbW92ZSBwYXN0ICJib3Vu ZGFyeSIuCi0gKgotICogV2UgdXNlIHRoaXMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGFkZGl0 aW9uIGlzICJ3cmFwcGluZyBhcm91bmQiIHRoZQotICogYm91bmRhcnkgcG9pbnQsIGhlbmNlIHRo ZSBuYW1lLiAgVGhlIHJlYXNvbiB3ZSBkb24ndCB3YW50IHRvIHVzZSB0aGUgcmVndWxhcgotICog Ml4zMS1tb2R1bG8gYXJpdGhtZXRpYyBoZXJlIGlzIHRoYXQgd2Ugd2FudCB0byBiZSBhYmxlIHRv IHVzZSB0aGUgd2hvbGUgb2YKLSAqIHRoZSAyXjMyLTEgc3BhY2UgaGVyZSwgYWxsb3dpbmcgZm9y IG1vcmUgbXVsdGl4YWN0cyB0aGFuIHdvdWxkIGZpdAotICogb3RoZXJ3aXNlLgotICovCi1zdGF0 aWMgYm9vbAotTXVsdGlYYWN0T2Zmc2V0V291bGRXcmFwKE11bHRpWGFjdE9mZnNldCBib3VuZGFy eSwgTXVsdGlYYWN0T2Zmc2V0IHN0YXJ0LAotCQkJCQkJIHVpbnQzMiBkaXN0YW5jZSkKLXsKLQlN dWx0aVhhY3RPZmZzZXQgZmluaXNoOwotCi0JLyoKLQkgKiBOb3RlIHRoYXQgb2Zmc2V0IG51bWJl ciAwIGlzIG5vdCB1c2VkIChzZWUgR2V0TXVsdGlYYWN0SWRNZW1iZXJzKSwgc28KLQkgKiBpZiB0 aGUgYWRkaXRpb24gd3JhcHMgYXJvdW5kIHRoZSBVSU5UX01BWCBib3VuZGFyeSwgc2tpcCB0aGF0 IHZhbHVlLgotCSAqLwotCWZpbmlzaCA9IHN0YXJ0ICsgZGlzdGFuY2U7Ci0JaWYgKGZpbmlzaCA8 IHN0YXJ0KQotCQlmaW5pc2grKzsKLQotCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkgKiBXaGVuIHRoZSBi b3VuZGFyeSBpcyBudW1lcmljYWxseSBncmVhdGVyIHRoYW4gdGhlIHN0YXJ0aW5nIHBvaW50LCBh bnkKLQkgKiB2YWx1ZSBudW1lcmljYWxseSBiZXR3ZWVuIHRoZSB0d28gaXMgbm90IHdyYXBwZWQ6 Ci0JICoKLQkgKgk8LS0tLVMtLS0tQi0tLS0+Ci0JICoJWy0tLSkJCQkgPSBGIHdyYXBwZWQgcGFz dCBCIChhbmQgVUlOVF9NQVgpCi0JICoJCSBbLS0tKQkJID0gRiBub3Qgd3JhcHBlZAotCSAqCQkJ ICBbLS0tLV0gPSBGIHdyYXBwZWQgcGFzdCBCCi0JICoKLQkgKiBXaGVuIHRoZSBib3VuZGFyeSBp cyBudW1lcmljYWxseSBsZXNzIHRoYW4gdGhlIHN0YXJ0aW5nIHBvaW50IChpLmUuIHRoZQotCSAq IFVJTlRfTUFYIHdyYXBhcm91bmQgb2NjdXJzIHNvbWV3aGVyZSBpbiBiZXR3ZWVuKSB0aGVuIGFs bCB2YWx1ZXMgaW4KLQkgKiBiZXR3ZWVuIGFyZSB3cmFwcGVkOgotCSAqCi0JICoJPC0tLS1CLS0t LVMtLS0tPgotCSAqCVstLS0pCQkJID0gRiBub3Qgd3JhcHBlZCBwYXN0IEIgKGJ1dCB3cmFwcGVk IHBhc3QgVUlOVF9NQVgpCi0JICoJCSBbLS0tKQkJID0gRiB3cmFwcGVkIHBhc3QgQiAoYW5kIFVJ TlRfTUFYKQotCSAqCQkJICBbLS0tLV0gPSBGIG5vdCB3cmFwcGVkCi0JICotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQotCSAqLwotCWlmIChzdGFydCA8IGJvdW5kYXJ5KQotCQlyZXR1cm4gZmluaXNoID49IGJvdW5k YXJ5IHx8IGZpbmlzaCA8IHN0YXJ0OwotCWVsc2UKLQkJcmV0dXJuIGZpbmlzaCA+PSBib3VuZGFy eSAmJiBmaW5pc2ggPCBzdGFydDsKKwkJKG5leHRPZmZzZXQgLSBvbGRlc3RPZmZzZXQgPiBNVUxU SVhBQ1RfTUVNQkVSX0FVVE9WQUNfVEhSRVNIT0xEKTsKIH0KIAogLyoKQEAgLTI4MjQsNyArMjc0 NCw2IEBAIGZpbmRfbXVsdGl4YWN0X3N0YXJ0KE11bHRpWGFjdElkIG11bHRpLCBNdWx0aVhhY3RP ZmZzZXQgKnJlc3VsdCkKIAlpbnQ2NAkJcGFnZW5vOwogCWludAkJCWVudHJ5bm87CiAJaW50CQkJ c2xvdG5vOwotCU11bHRpWGFjdE9mZnNldCAqb2ZmcHRyOwogCiAJQXNzZXJ0KE11bHRpWGFjdFN0 YXRlLT5maW5pc2hlZFN0YXJ0dXApOwogCkBAIC0yODQyLDkgKzI3NjEsOSBAQCBmaW5kX211bHRp eGFjdF9zdGFydChNdWx0aVhhY3RJZCBtdWx0aSwgTXVsdGlYYWN0T2Zmc2V0ICpyZXN1bHQpCiAK IAkvKiBsb2NrIGlzIGFjcXVpcmVkIGJ5IFNpbXBsZUxydVJlYWRQYWdlX1JlYWRPbmx5ICovCiAJ c2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2VfUmVhZE9ubHkoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBw YWdlbm8sIG11bHRpKTsKLQlvZmZwdHIgPSAoTXVsdGlYYWN0T2Zmc2V0ICopIE11bHRpWGFjdE9m ZnNldEN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dOwotCW9mZnB0ciArPSBlbnRyeW5v OwotCW9mZnNldCA9ICpvZmZwdHI7CisKKwlvZmZzZXQgPSBNWE9mZnNldFJlYWQoZW50cnlubywg c2xvdG5vKTsKKwogCUxXTG9ja1JlbGVhc2UoU2ltcGxlTHJ1R2V0QmFua0xvY2soTXVsdGlYYWN0 T2Zmc2V0Q3RsLCBwYWdlbm8pKTsKIAogCSpyZXN1bHQgPSBvZmZzZXQ7CkBAIC0yODkyLDczICsy ODExLDYgQEAgR2V0TXVsdGlYYWN0SW5mbyh1aW50MzIgKm11bHRpeGFjdHMsIE11bHRpWGFjdE9m ZnNldCAqbWVtYmVycywKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotLyoKLSAqIE11bHRpeGFjdCBtZW1i ZXJzIGNhbiBiZSByZW1vdmVkIG9uY2UgdGhlIG11bHRpeGFjdHMgdGhhdCByZWZlciB0byB0aGVt Ci0gKiBhcmUgb2xkZXIgdGhhbiBldmVyeSBkYXRtaW5teGlkLiAgYXV0b3ZhY3V1bV9tdWx0aXhh Y3RfZnJlZXplX21heF9hZ2UgYW5kCi0gKiB2YWN1dW1fbXVsdGl4YWN0X2ZyZWV6ZV90YWJsZV9h Z2Ugd29yayB0b2dldGhlciB0byBtYWtlIHN1cmUgd2UgbmV2ZXIgaGF2ZQotICogdG9vIG1hbnkg bXVsdGl4YWN0czsgd2UgaG9wZSB0aGF0LCBhdCBsZWFzdCB1bmRlciBub3JtYWwgY2lyY3Vtc3Rh bmNlcywKLSAqIHRoaXMgd2lsbCBhbHNvIGJlIHN1ZmZpY2llbnQgdG8ga2VlcCB1cyBmcm9tIHVz aW5nIHRvbyBtYW55IG9mZnNldHMuCi0gKiBIb3dldmVyLCBpZiB0aGUgYXZlcmFnZSBtdWx0aXhh Y3QgaGFzIG1hbnkgbWVtYmVycywgd2UgbWlnaHQgZXhoYXVzdCB0aGUKLSAqIG1lbWJlcnMgc3Bh Y2Ugd2hpbGUgc3RpbGwgdXNpbmcgZmV3IGVub3VnaCBtZW1iZXJzIHRoYXQgdGhlc2UgbGltaXRz IGZhaWwKLSAqIHRvIHRyaWdnZXIgcmVsbWlubXhpZCBhZHZhbmNlbWVudCBieSBWQUNVVU0uICBB dCB0aGF0IHBvaW50LCB3ZSdkIGhhdmUgbm8KLSAqIGNob2ljZSBidXQgdG8gc3RhcnQgZmFpbGlu ZyBtdWx0aXhhY3QtY3JlYXRpbmcgb3BlcmF0aW9ucyB3aXRoIGFuIGVycm9yLgotICoKLSAqIFRv IHByZXZlbnQgdGhhdCwgaWYgbW9yZSB0aGFuIGEgdGhyZXNob2xkIHBvcnRpb24gb2YgdGhlIG1l bWJlcnMgc3BhY2UgaXMKLSAqIHVzZWQsIHdlIGVmZmVjdGl2ZWx5IHJlZHVjZSBhdXRvdmFjdXVt X211bHRpeGFjdF9mcmVlemVfbWF4X2FnZSBhbmQKLSAqIHRvIGEgdmFsdWUganVzdCBsZXNzIHRo YW4gdGhlIG51bWJlciBvZiBtdWx0aXhhY3RzIGluIHVzZS4gIFdlIGhvcGUgdGhhdAotICogdGhp cyB3aWxsIHF1aWNrbHkgdHJpZ2dlciBhdXRvdmFjdXVtaW5nIG9uIHRoZSB0YWJsZSBvciB0YWJs ZXMgd2l0aCB0aGUKLSAqIG9sZGVzdCByZWxtaW5teGlkLCB0aHVzIGFsbG93aW5nIGRhdG1pbm14 aWQgdmFsdWVzIHRvIGFkdmFuY2UgYW5kIHJlbW92aW5nCi0gKiBzb21lIG1lbWJlcnMuCi0gKgot ICogQXMgdGhlIGZyYWN0aW9uIG9mIHRoZSBtZW1iZXIgc3BhY2UgY3VycmVudGx5IGluIHVzZSBn cm93cywgd2UgYmVjb21lCi0gKiBtb3JlIGFnZ3Jlc3NpdmUgaW4gY2xhbXBpbmcgdGhpcyB2YWx1 ZS4gIFRoYXQgbm90IG9ubHkgY2F1c2VzIGF1dG92YWN1dW0KLSAqIHRvIHJhbXAgdXAsIGJ1dCBh bHNvIG1ha2VzIGFueSBtYW51YWwgdmFjdXVtcyB0aGUgdXNlciBpc3N1ZXMgbW9yZQotICogYWdn cmVzc2l2ZS4gIFRoaXMgaGFwcGVucyBiZWNhdXNlIHZhY3V1bV9nZXRfY3V0b2ZmcygpIHdpbGwg Y2xhbXAgdGhlCi0gKiBmcmVlemUgdGFibGUgYW5kIHRoZSBtaW5pbXVtIGZyZWV6ZSBhZ2UgY3V0 b2ZmcyBiYXNlZCBvbiB0aGUgZWZmZWN0aXZlCi0gKiBhdXRvdmFjdXVtX211bHRpeGFjdF9mcmVl emVfbWF4X2FnZSB0aGlzIGZ1bmN0aW9uIHJldHVybnMuICBJbiB0aGUgd29yc3QKLSAqIGNhc2Us IHdlJ2xsIGNsYWltIHRoZSBmcmVlemVfbWF4X2FnZSB0byB6ZXJvLCBhbmQgZXZlcnkgdmFjdXVt IG9mIGFueQotICogdGFibGUgd2lsbCBmcmVlemUgZXZlcnkgbXVsdGl4YWN0LgotICovCi1pbnQK LU11bHRpWGFjdE1lbWJlckZyZWV6ZVRocmVzaG9sZCh2b2lkKQotewotCU11bHRpWGFjdE9mZnNl dCBtZW1iZXJzOwotCXVpbnQzMgkJbXVsdGl4YWN0czsKLQl1aW50MzIJCXZpY3RpbV9tdWx0aXhh Y3RzOwotCWRvdWJsZQkJZnJhY3Rpb247Ci0JaW50CQkJcmVzdWx0OwotCU11bHRpWGFjdElkIG9s ZGVzdE11bHRpWGFjdElkOwotCU11bHRpWGFjdE9mZnNldCBvbGRlc3RPZmZzZXQ7Ci0KLQkvKiBJ ZiB3ZSBjYW4ndCBkZXRlcm1pbmUgbWVtYmVyIHNwYWNlIHV0aWxpemF0aW9uLCBhc3N1bWUgdGhl IHdvcnN0LiAqLwotCWlmICghR2V0TXVsdGlYYWN0SW5mbygmbXVsdGl4YWN0cywgJm1lbWJlcnMs ICZvbGRlc3RNdWx0aVhhY3RJZCwgJm9sZGVzdE9mZnNldCkpCi0JCXJldHVybiAwOwotCi0JLyog SWYgbWVtYmVyIHNwYWNlIHV0aWxpemF0aW9uIGlzIGxvdywgbm8gc3BlY2lhbCBhY3Rpb24gaXMg cmVxdWlyZWQuICovCi0JaWYgKG1lbWJlcnMgPD0gTVVMVElYQUNUX01FTUJFUl9TQUZFX1RIUkVT SE9MRCkKLQkJcmV0dXJuIGF1dG92YWN1dW1fbXVsdGl4YWN0X2ZyZWV6ZV9tYXhfYWdlOwotCi0J LyoKLQkgKiBDb21wdXRlIGEgdGFyZ2V0IGZvciByZWxtaW5teGlkIGFkdmFuY2VtZW50LiAgVGhl IG51bWJlciBvZiBtdWx0aXhhY3RzCi0JICogd2UgdHJ5IHRvIGVsaW1pbmF0ZSBmcm9tIHRoZSBz eXN0ZW0gaXMgYmFzZWQgb24gaG93IGZhciB3ZSBhcmUgcGFzdAotCSAqIE1VTFRJWEFDVF9NRU1C RVJfU0FGRV9USFJFU0hPTEQuCi0JICovCi0JZnJhY3Rpb24gPSAoZG91YmxlKSAobWVtYmVycyAt IE1VTFRJWEFDVF9NRU1CRVJfU0FGRV9USFJFU0hPTEQpIC8KLQkJKE1VTFRJWEFDVF9NRU1CRVJf REFOR0VSX1RIUkVTSE9MRCAtIE1VTFRJWEFDVF9NRU1CRVJfU0FGRV9USFJFU0hPTEQpOwotCXZp Y3RpbV9tdWx0aXhhY3RzID0gbXVsdGl4YWN0cyAqIGZyYWN0aW9uOwotCi0JLyogZnJhY3Rpb24g Y291bGQgYmUgPiAxLjAsIGJ1dCBsb3dlc3QgcG9zc2libGUgZnJlZXplIGFnZSBpcyB6ZXJvICov Ci0JaWYgKHZpY3RpbV9tdWx0aXhhY3RzID4gbXVsdGl4YWN0cykKLQkJcmV0dXJuIDA7Ci0JcmVz dWx0ID0gbXVsdGl4YWN0cyAtIHZpY3RpbV9tdWx0aXhhY3RzOwotCi0JLyoKLQkgKiBDbGFtcCB0 byBhdXRvdmFjdXVtX211bHRpeGFjdF9mcmVlemVfbWF4X2FnZSwgc28gdGhhdCB3ZSBuZXZlciBt YWtlCi0JICogYXV0b3ZhY3V1bSBsZXNzIGFnZ3Jlc3NpdmUgdGhhbiBpdCB3b3VsZCBvdGhlcndp c2UgYmUuCi0JICovCi0JcmV0dXJuIE1pbihyZXN1bHQsIGF1dG92YWN1dW1fbXVsdGl4YWN0X2Zy ZWV6ZV9tYXhfYWdlKTsKLX0KLQogdHlwZWRlZiBzdHJ1Y3QgbXh0cnVuY2luZm8KIHsKIAlpbnQ2 NAkJZWFybGllc3RFeGlzdGluZ1BhZ2U7CkBAIC0zMTU4LDcgKzMwMTAsNyBAQCBUcnVuY2F0ZU11 bHRpWGFjdChNdWx0aVhhY3RJZCBuZXdPbGRlc3RNdWx0aSwgT2lkIG5ld09sZGVzdE11bHRpREIp CiAKIAllbG9nKERFQlVHMSwgInBlcmZvcm1pbmcgbXVsdGl4YWN0IHRydW5jYXRpb246ICIKIAkJ ICJvZmZzZXRzIFsldSwgJXUpLCBvZmZzZXRzIHNlZ21lbnRzIFslIiBQUkl4NjQgIiwgJSIgUFJJ eDY0ICIpLCAiCi0JCSAibWVtYmVycyBbJXUsICV1KSwgbWVtYmVycyBzZWdtZW50cyBbJSIgUFJJ eDY0ICIsICUiIFBSSXg2NCAiKSIsCisJCSAibWVtYmVycyBbJSIgUFJJdTY0ICIsICUiIFBSSXU2 NCAiKSwgbWVtYmVycyBzZWdtZW50cyBbJSIgUFJJeDY0ICIsICUiIFBSSXg2NCAiKSIsCiAJCSBv bGRlc3RNdWx0aSwgbmV3T2xkZXN0TXVsdGksCiAJCSBNdWx0aVhhY3RJZFRvT2Zmc2V0U2VnbWVu dChvbGRlc3RNdWx0aSksCiAJCSBNdWx0aVhhY3RJZFRvT2Zmc2V0U2VnbWVudChuZXdPbGRlc3RN dWx0aSksCkBAIC0zMjg5LDcgKzMxNDEsNyBAQCBNdWx0aVhhY3RJZFByZWNlZGVzT3JFcXVhbHMo TXVsdGlYYWN0SWQgbXVsdGkxLCBNdWx0aVhhY3RJZCBtdWx0aTIpCiBzdGF0aWMgYm9vbAogTXVs dGlYYWN0T2Zmc2V0UHJlY2VkZXMoTXVsdGlYYWN0T2Zmc2V0IG9mZnNldDEsIE11bHRpWGFjdE9m ZnNldCBvZmZzZXQyKQogewotCWludDMyCQlkaWZmID0gKGludDMyKSAob2Zmc2V0MSAtIG9mZnNl dDIpOworCWludDY0CQlkaWZmID0gKGludDY0KSAob2Zmc2V0MSAtIG9mZnNldDIpOwogCiAJcmV0 dXJuIChkaWZmIDwgMCk7CiB9CkBAIC0zMzg2LDcgKzMyMzgsNyBAQCBtdWx0aXhhY3RfcmVkbyhY TG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAogCQllbG9nKERFQlVHMSwgInJlcGxheWluZyBtdWx0 aXhhY3QgdHJ1bmNhdGlvbjogIgogCQkJICJvZmZzZXRzIFsldSwgJXUpLCBvZmZzZXRzIHNlZ21l bnRzIFslIiBQUkl4NjQgIiwgJSIgUFJJeDY0ICIpLCAiCi0JCQkgIm1lbWJlcnMgWyV1LCAldSks IG1lbWJlcnMgc2VnbWVudHMgWyUiIFBSSXg2NCAiLCAlIiBQUkl4NjQgIikiLAorCQkJICJtZW1i ZXJzIFslIiBQUkl1NjQgIiwgJSIgUFJJdTY0ICIpLCBtZW1iZXJzIHNlZ21lbnRzIFslIiBQUkl4 NjQgIiwgJSIgUFJJeDY0ICIpIiwKIAkJCSB4bHJlYy5zdGFydFRydW5jT2ZmLCB4bHJlYy5lbmRU cnVuY09mZiwKIAkJCSBNdWx0aVhhY3RJZFRvT2Zmc2V0U2VnbWVudCh4bHJlYy5zdGFydFRydW5j T2ZmKSwKIAkJCSBNdWx0aVhhY3RJZFRvT2Zmc2V0U2VnbWVudCh4bHJlYy5lbmRUcnVuY09mZiks CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jCmluZGV4IDM0NjMxOTMz OGEuLjNhZjA4ZDU3OWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hs b2dyZWNvdmVyeS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVy eS5jCkBAIC04ODQsNyArODg0LDcgQEAgSW5pdFdhbFJlY292ZXJ5KENvbnRyb2xGaWxlRGF0YSAq Q29udHJvbEZpbGUsIGJvb2wgKndhc1NodXRkb3duX3B0ciwKIAkJCQkJCQkgVTY0RnJvbUZ1bGxU cmFuc2FjdGlvbklkKGNoZWNrUG9pbnQubmV4dFhpZCksCiAJCQkJCQkJIGNoZWNrUG9pbnQubmV4 dE9pZCkpKTsKIAllcmVwb3J0KERFQlVHMSwKLQkJCShlcnJtc2dfaW50ZXJuYWwoIm5leHQgTXVs dGlYYWN0SWQ6ICV1OyBuZXh0IE11bHRpWGFjdE9mZnNldDogJXUiLAorCQkJKGVycm1zZ19pbnRl cm5hbCgibmV4dCBNdWx0aVhhY3RJZDogJXU7IG5leHQgTXVsdGlYYWN0T2Zmc2V0OiAlIiBQUkl1 NjQsCiAJCQkJCQkJIGNoZWNrUG9pbnQubmV4dE11bHRpLCBjaGVja1BvaW50Lm5leHRNdWx0aU9m ZnNldCkpKTsKIAllcmVwb3J0KERFQlVHMSwKIAkJCShlcnJtc2dfaW50ZXJuYWwoIm9sZGVzdCB1 bmZyb3plbiB0cmFuc2FjdGlvbiBJRDogJXUsIGluIGRhdGFiYXNlICV1IiwKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFj dXVtLmMKaW5kZXggNzMzZWY0MGFlNy4uOGY1MDkyNjcwYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvdmFjdXVtLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtLmMK QEAgLTExNTMsNyArMTE1Myw3IEBAIHZhY3V1bV9nZXRfY3V0b2ZmcyhSZWxhdGlvbiByZWwsIGNv bnN0IFZhY3V1bVBhcmFtcyBwYXJhbXMsCiAJICogbm9ybWFsbHkgYXV0b3ZhY3V1bV9tdWx0aXhh Y3RfZnJlZXplX21heF9hZ2UsIGJ1dCBtYXkgYmUgbGVzcyBpZiB3ZSBhcmUKIAkgKiBzaG9ydCBv ZiBtdWx0aXhhY3QgbWVtYmVyIHNwYWNlLgogCSAqLwotCWVmZmVjdGl2ZV9tdWx0aXhhY3RfZnJl ZXplX21heF9hZ2UgPSBNdWx0aVhhY3RNZW1iZXJGcmVlemVUaHJlc2hvbGQoKTsKKwllZmZlY3Rp dmVfbXVsdGl4YWN0X2ZyZWV6ZV9tYXhfYWdlID0gYXV0b3ZhY3V1bV9tdWx0aXhhY3RfZnJlZXpl X21heF9hZ2U7CiAKIAkvKgogCSAqIEFsbW9zdCByZWFkeSB0byBzZXQgZnJlZXplIG91dHB1dCBw YXJhbWV0ZXJzOyBjaGVjayBpZiBPbGRlc3RYbWluIG9yCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0uYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3Zh Y3V1bS5jCmluZGV4IGRjZTRjOGM0NWIuLjliZjAzNzM0YzIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIv YXV0b3ZhY3V1bS5jCkBAIC0xMTUwLDcgKzExNTAsNyBAQCBkb19zdGFydF93b3JrZXIodm9pZCkK IAogCS8qIEFsc28gZGV0ZXJtaW5lIHRoZSBvbGRlc3QgZGF0bWlubXhpZCB3ZSB3aWxsIGNvbnNp ZGVyLiAqLwogCXJlY2VudE11bHRpID0gUmVhZE5leHRNdWx0aVhhY3RJZCgpOwotCW11bHRpRm9y Y2VMaW1pdCA9IHJlY2VudE11bHRpIC0gTXVsdGlYYWN0TWVtYmVyRnJlZXplVGhyZXNob2xkKCk7 CisJbXVsdGlGb3JjZUxpbWl0ID0gcmVjZW50TXVsdGkgLSBhdXRvdmFjdXVtX211bHRpeGFjdF9m cmVlemVfbWF4X2FnZTsKIAlpZiAobXVsdGlGb3JjZUxpbWl0IDwgRmlyc3RNdWx0aVhhY3RJZCkK IAkJbXVsdGlGb3JjZUxpbWl0IC09IEZpcnN0TXVsdGlYYWN0SWQ7CiAKQEAgLTE5MzgsNyArMTkz OCw3IEBAIGRvX2F1dG92YWN1dW0odm9pZCkKIAkgKiBub3JtYWxseSBhdXRvdmFjdXVtX211bHRp eGFjdF9mcmVlemVfbWF4X2FnZSwgYnV0IG1heSBiZSBsZXNzIGlmIHdlIGFyZQogCSAqIHNob3J0 IG9mIG11bHRpeGFjdCBtZW1iZXIgc3BhY2UuCiAJICovCi0JZWZmZWN0aXZlX211bHRpeGFjdF9m cmVlemVfbWF4X2FnZSA9IE11bHRpWGFjdE1lbWJlckZyZWV6ZVRocmVzaG9sZCgpOworCWVmZmVj dGl2ZV9tdWx0aXhhY3RfZnJlZXplX21heF9hZ2UgPSBhdXRvdmFjdXVtX211bHRpeGFjdF9mcmVl emVfbWF4X2FnZTsKIAogCS8qCiAJICogRmluZCB0aGUgcGdfZGF0YWJhc2UgZW50cnkgYW5kIHNl bGVjdCB0aGUgZGVmYXVsdCBmcmVlemUgYWdlcy4gV2UgdXNlCmRpZmYgLS1naXQgYS9zcmMvYmlu L3BnX2NvbnRyb2xkYXRhL3BnX2NvbnRyb2xkYXRhLmMgYi9zcmMvYmluL3BnX2NvbnRyb2xkYXRh L3BnX2NvbnRyb2xkYXRhLmMKaW5kZXggMTBkZTA1OGNlOS4uNTI5NTEwOGFkZSAxMDA2NDQKLS0t IGEvc3JjL2Jpbi9wZ19jb250cm9sZGF0YS9wZ19jb250cm9sZGF0YS5jCisrKyBiL3NyYy9iaW4v cGdfY29udHJvbGRhdGEvcGdfY29udHJvbGRhdGEuYwpAQCAtMjY0LDcgKzI2NCw3IEBAIG1haW4o aW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJICAgQ29udHJvbEZpbGUtPmNoZWNrUG9pbnRDb3B5 Lm5leHRPaWQpOwogCXByaW50ZihfKCJMYXRlc3QgY2hlY2twb2ludCdzIE5leHRNdWx0aVhhY3RJ ZDogICV1XG4iKSwKIAkJICAgQ29udHJvbEZpbGUtPmNoZWNrUG9pbnRDb3B5Lm5leHRNdWx0aSk7 Ci0JcHJpbnRmKF8oIkxhdGVzdCBjaGVja3BvaW50J3MgTmV4dE11bHRpT2Zmc2V0OiAgJXVcbiIp LAorCXByaW50ZihfKCJMYXRlc3QgY2hlY2twb2ludCdzIE5leHRNdWx0aU9mZnNldDogICUiIFBS SXU2NCAiXG4iKSwKIAkJICAgQ29udHJvbEZpbGUtPmNoZWNrUG9pbnRDb3B5Lm5leHRNdWx0aU9m ZnNldCk7CiAJcHJpbnRmKF8oIkxhdGVzdCBjaGVja3BvaW50J3Mgb2xkZXN0WElEOiAgICAgICAg JXVcbiIpLAogCQkgICBDb250cm9sRmlsZS0+Y2hlY2tQb2ludENvcHkub2xkZXN0WGlkKTsKZGlm ZiAtLWdpdCBhL3NyYy9iaW4vcGdfcmVzZXR3YWwvcGdfcmVzZXR3YWwuYyBiL3NyYy9iaW4vcGdf cmVzZXR3YWwvcGdfcmVzZXR3YWwuYwppbmRleCA3YTRlNGViOTU3Li42NDZhYjFiODBkIDEwMDY0 NAotLS0gYS9zcmMvYmluL3BnX3Jlc2V0d2FsL3BnX3Jlc2V0d2FsLmMKKysrIGIvc3JjL2Jpbi9w Z19yZXNldHdhbC9wZ19yZXNldHdhbC5jCkBAIC0yNjYsNyArMjY2LDcgQEAgbWFpbihpbnQgYXJn YywgY2hhciAqYXJndltdKQogCiAJCQljYXNlICdPJzoKIAkJCQllcnJubyA9IDA7Ci0JCQkJc2V0 X214b2ZmID0gc3RydG91bChvcHRhcmcsICZlbmRwdHIsIDApOworCQkJCXNldF9teG9mZiA9IHN0 cnRvdTY0KG9wdGFyZywgJmVuZHB0ciwgMCk7CiAJCQkJaWYgKGVuZHB0ciA9PSBvcHRhcmcgfHwg KmVuZHB0ciAhPSAnXDAnIHx8IGVycm5vICE9IDApCiAJCQkJewogCQkJCQlwZ19sb2dfZXJyb3Io ImludmFsaWQgYXJndW1lbnQgZm9yIG9wdGlvbiAlcyIsICItTyIpOwpAQCAtNzU5LDcgKzc1OSw3 IEBAIFByaW50Q29udHJvbFZhbHVlcyhib29sIGd1ZXNzZWQpCiAJCSAgIENvbnRyb2xGaWxlLmNo ZWNrUG9pbnRDb3B5Lm5leHRPaWQpOwogCXByaW50ZihfKCJMYXRlc3QgY2hlY2twb2ludCdzIE5l eHRNdWx0aVhhY3RJZDogICV1XG4iKSwKIAkJICAgQ29udHJvbEZpbGUuY2hlY2tQb2ludENvcHku bmV4dE11bHRpKTsKLQlwcmludGYoXygiTGF0ZXN0IGNoZWNrcG9pbnQncyBOZXh0TXVsdGlPZmZz ZXQ6ICAldVxuIiksCisJcHJpbnRmKF8oIkxhdGVzdCBjaGVja3BvaW50J3MgTmV4dE11bHRpT2Zm c2V0OiAgJSIgUFJJdTY0ICJcbiIpLAogCQkgICBDb250cm9sRmlsZS5jaGVja1BvaW50Q29weS5u ZXh0TXVsdGlPZmZzZXQpOwogCXByaW50ZihfKCJMYXRlc3QgY2hlY2twb2ludCdzIG9sZGVzdFhJ RDogICAgICAgICV1XG4iKSwKIAkJICAgQ29udHJvbEZpbGUuY2hlY2tQb2ludENvcHkub2xkZXN0 WGlkKTsKQEAgLTgzMyw3ICs4MzMsNyBAQCBQcmludE5ld0NvbnRyb2xWYWx1ZXModm9pZCkKIAog CWlmIChzZXRfbXhvZmYgIT0gLTEpCiAJewotCQlwcmludGYoXygiTmV4dE11bHRpT2Zmc2V0OiAg ICAgICAgICAgICAgICAgICAgICAldVxuIiksCisJCXByaW50ZihfKCJOZXh0TXVsdGlPZmZzZXQ6 ICAgICAgICAgICAgICAgICAgICAgICUiIFBSSXU2NCAiXG4iKSwKIAkJCSAgIENvbnRyb2xGaWxl LmNoZWNrUG9pbnRDb3B5Lm5leHRNdWx0aU9mZnNldCk7CiAJfQogCmRpZmYgLS1naXQgYS9zcmMv YmluL3BnX3Jlc2V0d2FsL3QvMDAxX2Jhc2ljLnBsIGIvc3JjL2Jpbi9wZ19yZXNldHdhbC90LzAw MV9iYXNpYy5wbAppbmRleCBkNmJiYmQwY2VkLi5jYzg5ZTA3NjRhIDEwMDY0NAotLS0gYS9zcmMv YmluL3BnX3Jlc2V0d2FsL3QvMDAxX2Jhc2ljLnBsCisrKyBiL3NyYy9iaW4vcGdfcmVzZXR3YWwv dC8wMDFfYmFzaWMucGwKQEAgLTIxMyw3ICsyMTMsNyBAQCBwdXNoIEBjbWQsCiAgIHNwcmludGYo IiVkLCVkIiwgaGV4KCRmaWxlc1swXSkgPT0gMCA/IDMgOiBoZXgoJGZpbGVzWzBdKSwgaGV4KCRm aWxlc1stMV0pKTsKIAogQGZpbGVzID0gZ2V0X3NscnVfZmlsZXMoJ3BnX211bHRpeGFjdC9vZmZz ZXRzJyk7Ci0kbXVsdCA9IDMyICogJGJsY2tzeiAvIDQ7CiskbXVsdCA9IDMyICogJGJsY2tzeiAv IDg7CiAjIC0tbXVsdGl4YWN0LWlkcyBhcmd1bWVudCBpcyAibmV3LG9sZCIKIHB1c2ggQGNtZCwK ICAgJy0tbXVsdGl4YWN0LWlkcycgPT4gc3ByaW50ZigiJWQsJWQiLApkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvYWNjZXNzL211bHRpeGFjdC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL211bHRpeGFj dC5oCmluZGV4IDgyZTRiYjkwZGQuLjE2YTA3NzIzMDggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L2FjY2Vzcy9tdWx0aXhhY3QuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbXVsdGl4YWN0LmgK QEAgLTI4LDcgKzI4LDcgQEAKIAogI2RlZmluZSBNdWx0aVhhY3RJZElzVmFsaWQobXVsdGkpICgo bXVsdGkpICE9IEludmFsaWRNdWx0aVhhY3RJZCkKIAotI2RlZmluZSBNYXhNdWx0aVhhY3RPZmZz ZXQJKChNdWx0aVhhY3RPZmZzZXQpIDB4RkZGRkZGRkYpCisjZGVmaW5lIE1heE11bHRpWGFjdE9m ZnNldAlVSU5UNjRDT05TVCgweEZGRkZGRkZGRkZGRkZGRkYpCiAKIC8qCiAgKiBQb3NzaWJsZSBt dWx0aXhhY3QgbG9jayBtb2RlcyAoInN0YXR1cyIpLiAgVGhlIGZpcnN0IGZvdXIgbW9kZXMgYXJl IGZvcgpAQCAtMTQ3LDcgKzE0Nyw2IEBAIGV4dGVybiB2b2lkIE11bHRpWGFjdFNldE5leHRNWGFj dChNdWx0aVhhY3RJZCBuZXh0TXVsdGksCiBleHRlcm4gdm9pZCBNdWx0aVhhY3RBZHZhbmNlTmV4 dE1YYWN0KE11bHRpWGFjdElkIG1pbk11bHRpLAogCQkJCQkJCQkJICBNdWx0aVhhY3RPZmZzZXQg bWluTXVsdGlPZmZzZXQpOwogZXh0ZXJuIHZvaWQgTXVsdGlYYWN0QWR2YW5jZU9sZGVzdChNdWx0 aVhhY3RJZCBvbGRlc3RNdWx0aSwgT2lkIG9sZGVzdE11bHRpREIpOwotZXh0ZXJuIGludAlNdWx0 aVhhY3RNZW1iZXJGcmVlemVUaHJlc2hvbGQodm9pZCk7CiAKIGV4dGVybiB2b2lkIG11bHRpeGFj dF90d29waGFzZV9yZWNvdmVyKEZ1bGxUcmFuc2FjdGlvbklkIGZ4aWQsIHVpbnQxNiBpbmZvLAog CQkJCQkJCQkJICAgdm9pZCAqcmVjZGF0YSwgdWludDMyIGxlbik7CmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9jLmggYi9zcmMvaW5jbHVkZS9jLmgKaW5kZXggMzkwMjJmOGE5ZC4uZGU5YWMxM2Jl NyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYy5oCisrKyBiL3NyYy9pbmNsdWRlL2MuaApAQCAt NjQxLDcgKzY0MSw3IEBAIHR5cGVkZWYgdWludDMyIFN1YlRyYW5zYWN0aW9uSWQ7CiAvKiBNdWx0 aVhhY3RJZCBtdXN0IGJlIGVxdWl2YWxlbnQgdG8gVHJhbnNhY3Rpb25JZCwgdG8gZml0IGluIHRf eG1heCAqLwogdHlwZWRlZiBUcmFuc2FjdGlvbklkIE11bHRpWGFjdElkOwogCi10eXBlZGVmIHVp bnQzMiBNdWx0aVhhY3RPZmZzZXQ7Cit0eXBlZGVmIHVpbnQ2NCBNdWx0aVhhY3RPZmZzZXQ7CiAK IHR5cGVkZWYgdWludDMyIENvbW1hbmRJZDsKIAotLSAKMi40My4wCgo= --000000000000bbc853063f15f7cf--