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 1t6Cr9-00BLiy-Ss for pgsql-hackers@arkaria.postgresql.org; Wed, 30 Oct 2024 17:51:44 +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 1t6Cr7-00BFY0-4X for pgsql-hackers@arkaria.postgresql.org; Wed, 30 Oct 2024 17:51:41 +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 1t6Cr6-00BFXr-LS for pgsql-hackers@lists.postgresql.org; Wed, 30 Oct 2024 17:51:41 +0000 Received: from mail-lj1-x236.google.com ([2a00:1450:4864:20::236]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1t6Cr3-003rLP-H3 for pgsql-hackers@lists.postgresql.org; Wed, 30 Oct 2024 17:51:40 +0000 Received: by mail-lj1-x236.google.com with SMTP id 38308e7fff4ca-2fc96f9c41fso1252811fa.0 for ; Wed, 30 Oct 2024 10:51:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1730310696; x=1730915496; 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=lkzJwioI7vzbizIonuCb13MTY3hahX1+yAh4sE7rACU=; b=QwSrwX8iiSSDUFF65EgSe2VYmcXm5u37zDumOlJMq8cIoRwTRCzX0LAMsmgsbAAhsh vEGqGXx7XYp8lUPv+Gr4Un5xC1M/VHgOsTiak6/ljXN9xh5U4uSOCcdr4QbHbmzIvUgd jxydGQul5Kpy/RzwchiQdLWE5VqAmstY+DU2q6KqnObBDmkloTGlvkbl+3y0fLUqeTBv 2b7VSspUfgrow6X9HD3VhjsHqT07rKhQXeEzpRgctD85H1dEIfsZr52WqOATEmWj/VGB noxGzuGnNeKafmrm0434rlHsC6eHmhcqo4KII300adKaOBJy/9q6hxtCnLobVwBvlUcZ CFPg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1730310696; x=1730915496; 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=lkzJwioI7vzbizIonuCb13MTY3hahX1+yAh4sE7rACU=; b=V4h9v4Bc+ugC+KDklkqEX6pfqRjqrn0MyelENAAG2JXMMBZ3OY9QZ4kEGq0Z5zlsEE o1oULxsN2e5B9xxRr+Vu/3DCyQwIz0jQXZ81l6YXtD3OEQ/RdIszehH3qf2oC0X0oPQF 13F323XCEh4n9+p+fm1PLV3iOolSTdQBMA9T4X+MF01Gjj1ARY+eQ6LayIq1CqQucn8U tCIuYBuCYA41eLe8VtDbhZj6h7epi0fURHtKDFeTWJj3GVUYvY/8uG7fyUcJOvelZlo3 Qt04Jj26x5SFrs9V1ERVKsAf+FwvqFkjQN7eh80YILW3CfZ+c/uwJFDSLg1dJgQVPVe6 2jTg== X-Gm-Message-State: AOJu0YxMORTy5Ji9USRH1yFc/BY+PyE/dPq/p26Hr9Z/Nog+pL5DEdtc Rr5LGSasQX1yWXUCrKsnQsHU8/hZzasFlZAbphGF5+OsM7XtxJc9dpaT9mCyQn9X9/a7GoFEDpL MLM2yaSXgkLAvFxdQOIMbsMIA5Qg= X-Google-Smtp-Source: AGHT+IEqlU1Fy5b0iIq9PUfmzobbEtUJNfPNjt10QQxasCGfsgtyk8xUTj29IAxmGHVHm4l28tSPT4GGjQQAdUMVjTU= X-Received: by 2002:a2e:b8c1:0:b0:2f7:6277:f2be with SMTP id 38308e7fff4ca-2fcdc95906bmr23250851fa.22.1730310696177; Wed, 30 Oct 2024 10:51:36 -0700 (PDT) MIME-Version: 1.0 References: <20230603223824.o7iyochli2dwwi7k@alap3.anarazel.de> <6be6f58815dc0844fbe058edf56b4e735a6efc1c.camel@j-davis.com> <2280bf7241119bb88cbe0fe5eb36490cbd04c0c0.camel@j-davis.com> <12f1a2d8dd3b6305c0354f1c701f44b7be5e54eb.camel@j-davis.com> <8633171cb034aafc260fdf37df04b6c779aa1e2f.camel@j-davis.com> <229c4f7219ed164088dadc935df21e1cf125e191.camel@j-davis.com> <23a29125a2d07f96d49f97c31fcdb09a7f0ff6c1.camel@j-davis.com> In-Reply-To: From: Bharath Rupireddy Date: Wed, 30 Oct 2024 10:51:23 -0700 Message-ID: Subject: Re: Introduce new multi insert Table AM and improve performance of various SQL commands with it for Heap AM To: Jingtang Zhang Cc: pgsql-hackers@lists.postgresql.org, PostgreSQL-development Content-Type: multipart/mixed; boundary="00000000000065d8ed0625b55ad2" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000065d8ed0625b55ad2 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, Thanks for looking into this. On Mon, Oct 28, 2024 at 8:18=E2=80=AFPM Jingtang Zhang wrote: > > Just found that the initialization > seems redundant since we have used palloc0? > > > + istate =3D (HeapInsertState *) palloc0(sizeof(HeapInsertState)= ); > > + istate->bistate =3D NULL; > > + istate->mistate =3D NULL; Changed it to palloc() and explicit initializations of the members. With this, only TupleTableSlot's array in HeapMultiInsertState uses palloc0(), the rest all use explicit initializations. > Oh, another comments for v24-0001 patch: we are in heam AM now, should we= use > something like HEAP_INSERT_BAS_BULKWRITE instead of using table AM option= , > just like other heap AM options do? > > > + if ((state->options & TABLE_INSERT_BAS_BULKWRITE) !=3D 0) > > + istate->bistate =3D GetBulkInsertState(); Defined HEAP_INSERT_BAS_BULKWRITE and used that in heapam.c similar to INSERT_SKIP_FSM, INSERT_FROZEN, NO_LOGICAL. > Little question about v24 0002 patch: would it be better to move the > implementation of TableModifyIsMultiInsertsSupported to somewhere for tab= le AM > level? Seems it is a common function for future use, not a specific one f= or > matview. It's more tailored for CREATE TABLE AS and CREATE/REFRESH MATERIALIZED VIEW in the sense that no triggers, foreign table and partitioned table possible here. INSERT INTO SELECT and Logical Replication Apply will have a lot more conditions (e.g. RETURNING clause, triggers etc.) and they will need to be handled differently. So, I left TableModifyIsMultiInsertsSupported as-is in a common place in matview.c. Please find the attached v25 patch set. --=20 Bharath Rupireddy PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com --00000000000065d8ed0625b55ad2 Content-Type: application/octet-stream; name="v25-0001-Introduce-new-table-AM-for-multi-inserts.patch" Content-Disposition: attachment; filename="v25-0001-Introduce-new-table-AM-for-multi-inserts.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m2w6a67g0 RnJvbSBjODI3N2U2ZjVlOWE3MmJhZWJlOTkzYjIyNDFkMzRhN2Q0Mjc0NzNkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8cnVwaXJlZGRAYW1hem9uLmNv bT4KRGF0ZTogV2VkLCAzMCBPY3QgMjAyNCAxNzoxMzoyMCArMDAwMApTdWJqZWN0OiBbUEFUQ0gg djI1IDEvM10gSW50cm9kdWNlIG5ldyB0YWJsZSBBTSBmb3IgbXVsdGktaW5zZXJ0cwoKVW50aWwg bm93LCBpdCdzIHRoZSBDT1BZIC4uLiBGUk9NIGNvbW1hbmQgdXNpbmcgbXVsdGkgaW5zZXJ0cwoo aS5lLiBidWZmZXIgc29tZSB0dXBsZXMgYW5kIGluc2VydHMgdGhlbSB0byB0YWJsZSBhdCBvbmNl KS4KQmFzaWMgaWRlYSBvZiBtdWx0aS1pbnNlcnRzIGlzIHRoYXQgbGVzcyBXQUwgYW5kIHJlZHVj ZWQgYnVmZmVyCmxvY2tpbmcuIE11bHRpLWluc2VydHMgaXMgZmFzdGVyIHRoYW4gY2FsbGluZyBo ZWFwX2luc2VydCgpIGluIGEKbG9vcCwgYmVjYXVzZSB3aGVuIG11bHRpcGxlIHR1cGxlcyBjYW4g YmUgaW5zZXJ0ZWQgb24gYSBzaW5nbGUKcGFnZSwgd2UgY2FuIHdyaXRlIGp1c3QgYSBzaW5nbGUg V0FMIHJlY29yZCBjb3ZlcmluZyBhbGwgb2YgdGhlbSwKYW5kIG9ubHkgbmVlZCB0byBsb2NrL3Vu bG9jayB0aGUgcGFnZSBvbmNlLgoKVmFyaW91cyBvdGhlciBjb21tYW5kcyBjYW4gYmVuZWZpdCBm cm9tIHRoaXMgbXVsdGktaW5zZXJ0cyBsb2dpYwpbUmV1c2FibGVdLgoKQWxzbywgdGhlcmUncyBh IG5lZWQgdG8gaGF2ZSB0aGVzZSBtdWx0aS1pbnNlcnRzIEFNcyAoQWNjZXNzCk1ldGhvZHMpIGFz IHNjYW4tbGlrZSBBUEkgW1VzYWJpbGl0eV0uIFdpdGggdGhpcywgdmFyaW91cyB0YWJsZQpBTXMg Y2FuIGRlZmluZSB0aGVpciBvd24gYnVmZmVyaW5nIGFuZCBmbHVzaGluZyBzdHJhdGVneQpbRmxl eGliaWxpdHldIGJhc2VkIG9uIHRoZSB3YXkgdGhleSBzdG9yZSB0aGUgZGF0YSBpbiB0aGUKdW5k ZXJseWluZyBzdG9yYWdlIChlLmcuIGNvbHVtbmFyKS4KCkF1dGhvcjogQmhhcmF0aCBSdXBpcmVk ZHkKUmV2aWV3ZWQtYnk6IEplZmYgRGF2aXMKRGlzY3Vzc2lvbjogaHR0cHM6Ly93d3cucG9zdGdy ZXNxbC5vcmcvbWVzc2FnZS1pZC8yMDIwMDkyNDAyNDEyOC5reWszcjVnN2RudTNmeHh4QGFsYXAz LmFuYXJhemVsLmRlCkRpc2N1c3Npb246IGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL21lc3Nh Z2UtaWQvQ0FMajJBQ1ZpOWVUUllSJTNEZ2RjYTV3eHRqM0trXzlxOXFWY2N4c1MxaG5nVEdPQ2pQ d1ElNDBtYWlsLmdtYWlsLmNvbQpEaXNjdXNzaW9uOiBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9y Zy9tZXNzYWdlLWlkLzg2MzMxNzFjYjAzNGFhZmMyNjBmZGYzN2RmMDRiNmM3NzlhYTFlMmYuY2Ft ZWwlNDBqLWRhdmlzLmNvbQotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jICAg ICAgICAgfCAyMTEgKysrKysrKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9o ZWFwL2hlYXBhbV9oYW5kbGVyLmMgfCAgIDYgKwogc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3Rh YmxlYW1hcGkuYyAgICB8ICAgNSArCiBzcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggICAgICAg ICAgICAgIHwgIDM5ICsrKysrCiBzcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oICAgICAgICAg ICAgIHwgIDgxICsrKysrKysrKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAg ICAgICB8ICAgMyArCiA2IGZpbGVzIGNoYW5nZWQsIDM0NCBpbnNlcnRpb25zKCspLCAxIGRlbGV0 aW9uKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYwppbmRleCAxNzQ4ZWFmYTEwLi42OWIyMWNm MTJjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYworKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYwpAQCAtNTAsNiArNTAsNyBAQAogI2luY2x1 ZGUgInN0b3JhZ2UvcHJvY2FycmF5LmgiCiAjaW5jbHVkZSAidXRpbHMvZGF0dW0uaCIKICNpbmNs dWRlICJ1dGlscy9pbnZhbC5oIgorI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVk ZSAidXRpbHMvc3BjY2FjaGUuaCIKIAogCkBAIC0xMDIsNyArMTAzLDcgQEAgc3RhdGljIGludAli b3R0b211cF9zb3J0X2FuZF9zaHJpbmsoVE1fSW5kZXhEZWxldGVPcCAqZGVsc3RhdGUpOwogc3Rh dGljIFhMb2dSZWNQdHIgbG9nX2hlYXBfbmV3X2NpZChSZWxhdGlvbiByZWxhdGlvbiwgSGVhcFR1 cGxlIHR1cCk7CiBzdGF0aWMgSGVhcFR1cGxlIEV4dHJhY3RSZXBsaWNhSWRlbnRpdHkoUmVsYXRp b24gcmVsYXRpb24sIEhlYXBUdXBsZSB0cCwgYm9vbCBrZXlfcmVxdWlyZWQsCiAJCQkJCQkJCQkJ Ym9vbCAqY29weSk7Ci0KK3N0YXRpYyB2b2lkIGhlYXBfbW9kaWZ5X2luc2VydF9lbmQoVGFibGVN b2RpZnlTdGF0ZSAqc3RhdGUpOwogCiAvKgogICogRWFjaCB0dXBsZSBsb2NrIG1vZGUgaGFzIGEg Y29ycmVzcG9uZGluZyBoZWF2eXdlaWdodCBsb2NrLCBhbmQgb25lIG9yIHR3bwpAQCAtMjYwMyw2 ICsyNjA0LDIxNCBAQCBoZWFwX211bHRpX2luc2VydChSZWxhdGlvbiByZWxhdGlvbiwgVHVwbGVU YWJsZVNsb3QgKipzbG90cywgaW50IG50dXBsZXMsCiAJcGdzdGF0X2NvdW50X2hlYXBfaW5zZXJ0 KHJlbGF0aW9uLCBudHVwbGVzKTsKIH0KIAorLyoKKyAqIEluaXRpYWxpemUgaGVhcCBtb2RpZnkg c3RhdGUuCisgKi8KK1RhYmxlTW9kaWZ5U3RhdGUgKgoraGVhcF9tb2RpZnlfYmVnaW4oUmVsYXRp b24gcmVsLAorCQkJCSAgQ29tbWFuZElkIGNpZCwKKwkJCQkgIGludCBvcHRpb25zLAorCQkJCSAg VGFibGVNb2RpZnlCdWZmZXJGbHVzaENiIGJ1ZmZlcl9mbHVzaF9jYiwKKwkJCQkgIHZvaWQgKmJ1 ZmZlcl9mbHVzaF9jdHgpCit7CisJVGFibGVNb2RpZnlTdGF0ZSAqc3RhdGU7CisJTWVtb3J5Q29u dGV4dCBjb250ZXh0OworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKworCWNvbnRleHQgPSBB bGxvY1NldENvbnRleHRDcmVhdGUoVG9wVHJhbnNhY3Rpb25Db250ZXh0LAorCQkJCQkJCQkJImhl YXBfbW9kaWZ5IG1lbW9yeSBjb250ZXh0IiwKKwkJCQkJCQkJCUFMTE9DU0VUX0RFRkFVTFRfU0la RVMpOworCisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhjb250ZXh0KTsKKwlz dGF0ZSA9IHBhbGxvYyhzaXplb2YoVGFibGVNb2RpZnlTdGF0ZSkpOworCXN0YXRlLT5yZWwgPSBy ZWw7CisJc3RhdGUtPmNpZCA9IGNpZDsKKwlzdGF0ZS0+b3B0aW9ucyA9IG9wdGlvbnM7CisJc3Rh dGUtPm1lbV9jdHggPSBjb250ZXh0OworCXN0YXRlLT5idWZmZXJfZmx1c2hfY2IgPSBidWZmZXJf Zmx1c2hfY2I7CisJc3RhdGUtPmJ1ZmZlcl9mbHVzaF9jdHggPSBidWZmZXJfZmx1c2hfY3R4Owor CXN0YXRlLT5kYXRhID0gTlVMTDsJCQkvKiBUbyBiZSBzZXQgbGF6aWx5ICovCisJTWVtb3J5Q29u dGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCisJcmV0dXJuIHN0YXRlOworfQorCisvKgorICog U3RvcmUgcGFzc2VkLWluIHR1cGxlIGludG8gaW4tbWVtb3J5IGJ1ZmZlcmVkIHNsb3RzLiBXaGVu IGZ1bGwsIGluc2VydAorICogbXVsdGlwbGUgdHVwbGVzIGZyb20gdGhlIGJ1ZmZlcnMgaW50byBo ZWFwLgorICovCit2b2lkCitoZWFwX21vZGlmeV9idWZmZXJfaW5zZXJ0KFRhYmxlTW9kaWZ5U3Rh dGUgKnN0YXRlLAorCQkJCQkJICBUdXBsZVRhYmxlU2xvdCAqc2xvdCkKK3sKKwlUdXBsZVRhYmxl U2xvdCAqZHN0c2xvdDsKKwlIZWFwSW5zZXJ0U3RhdGUgKmlzdGF0ZTsKKwlIZWFwTXVsdGlJbnNl cnRTdGF0ZSAqbWlzdGF0ZTsKKwlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisKKwlvbGRjb250 ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHN0YXRlLT5tZW1fY3R4KTsKKworCS8qIEZpcnN0 IHRpbWUgdGhyb3VnaCwgaW5pdGlhbGl6ZSBoZWFwIGluc2VydCBzdGF0ZSAqLworCWlmIChzdGF0 ZS0+ZGF0YSA9PSBOVUxMKQorCXsKKwkJaXN0YXRlID0gKEhlYXBJbnNlcnRTdGF0ZSAqKSBwYWxs b2Moc2l6ZW9mKEhlYXBJbnNlcnRTdGF0ZSkpOworCQlpc3RhdGUtPmJpc3RhdGUgPSBOVUxMOwor CQlpc3RhdGUtPm1pc3RhdGUgPSBOVUxMOworCQlzdGF0ZS0+ZGF0YSA9IGlzdGF0ZTsKKwkJbWlz dGF0ZSA9CisJCQkoSGVhcE11bHRpSW5zZXJ0U3RhdGUgKikgcGFsbG9jKHNpemVvZihIZWFwTXVs dGlJbnNlcnRTdGF0ZSkpOworCQltaXN0YXRlLT5zbG90cyA9CisJCQkoVHVwbGVUYWJsZVNsb3Qg KiopIHBhbGxvYzAoc2l6ZW9mKFR1cGxlVGFibGVTbG90ICopICogSEVBUF9NQVhfQlVGRkVSRURf U0xPVFMpOworCQltaXN0YXRlLT5jdXJfc2xvdHMgPSAwOworCQlpc3RhdGUtPm1pc3RhdGUgPSBt aXN0YXRlOworCisJCS8qCisJCSAqIGhlYXBfbXVsdGlfaW5zZXJ0KCkgY2FuIGxlYWsgbWVtb3J5 LiBTbyBzd2l0Y2ggdG8gdGhpcyBtZW1vcnkKKwkJICogY29udGV4dCBiZWZvcmUgZXZlcnkgaGVh cF9tdWx0aV9pbnNlcnQoKSBjYWxsIGFuZCByZXNldCB3aGVuCisJCSAqIGZpbmlzaGVkLgorCQkg Ki8KKwkJbWlzdGF0ZS0+bWVtX2N0eCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVt b3J5Q29udGV4dCwKKwkJCQkJCQkJCQkJCSAiaGVhcF9tdWx0aV9pbnNlcnQgbWVtb3J5IGNvbnRl eHQiLAorCQkJCQkJCQkJCQkJIEFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOworCisJCWlmICgoc3Rh dGUtPm9wdGlvbnMgJiBIRUFQX0lOU0VSVF9CQVNfQlVMS1dSSVRFKSAhPSAwKQorCQkJaXN0YXRl LT5iaXN0YXRlID0gR2V0QnVsa0luc2VydFN0YXRlKCk7CisJfQorCisJaXN0YXRlID0gKEhlYXBJ bnNlcnRTdGF0ZSAqKSBzdGF0ZS0+ZGF0YTsKKwlBc3NlcnQoaXN0YXRlLT5taXN0YXRlICE9IE5V TEwpOworCW1pc3RhdGUgPSBpc3RhdGUtPm1pc3RhdGU7CisJZHN0c2xvdCA9IG1pc3RhdGUtPnNs b3RzW21pc3RhdGUtPmN1cl9zbG90c107CisKKwlpZiAoZHN0c2xvdCA9PSBOVUxMKQorCXsKKwkJ LyoKKwkJICogV2UgdXNlIHZpcnR1YWwgdHVwbGUgc2xvdHMgYnVmZmVyZWQgc2xvdHMgZm9yIGxl dmVyYWdpbmcgdGhlCisJCSAqIG9wdGltaXphdGlvbiBpdCBwcm92aWRlcyB0byBtaW5pbWl6ZSBw aHlzaWNhbCBkYXRhIGNvcHlpbmcuIFRoZQorCQkgKiB2aXJ0dWFsIHNsb3QgZ2V0cyBtYXRlcmlh bGl6ZWQgd2hlbiB3ZSBjb3B5ICh2aWEgYmVsb3cKKwkJICogRXhlY0NvcHlTbG90KSB0aGUgdHVw bGVzIGZyb20gdGhlIHNvdXJjZSBzbG90IHdoaWNoIGNhbiBiZSBvZiBhbnkKKwkJICogdHlwZS4g VGhpcyB3YXksIGl0IGlzIGVuc3VyZWQgdGhhdCB0aGUgdHVwbGUgc3RvcmFnZSBkb2Vzbid0IGRl cGVuZAorCQkgKiBvbiBleHRlcm5hbCBtZW1vcnksIGJlY2F1c2UgYWxsIHRoZSBkYXR1bXMgdGhh dCBhcmVuJ3QgcGFzc2VkIGJ5CisJCSAqIHZhbHVlIGFyZSBjb3BpZWQgaW50byB0aGUgc2xvdCdz IG1lbW9yeSBjb250ZXh0LgorCQkgKi8KKwkJZHN0c2xvdCA9IE1ha2VUdXBsZVRhYmxlU2xvdChS ZWxhdGlvbkdldERlc2NyKHN0YXRlLT5yZWwpLAorCQkJCQkJCQkJICZUVFNPcHNWaXJ0dWFsKTsK KworCQltaXN0YXRlLT5zbG90c1ttaXN0YXRlLT5jdXJfc2xvdHNdID0gZHN0c2xvdDsKKwl9CisK KwlBc3NlcnQoVFRTX0lTX1ZJUlRVQUwoZHN0c2xvdCkpOworCisJLyoKKwkgKiBOb3RlIHRoYXQg dGhlIGNvcHkgY2xlYXJzIHRoZSBwcmV2aW91cyBkZXN0aW5hdGlvbiBzbG90IGNvbnRlbnRzLCBz byBubworCSAqIG5lZWQgdG8gZXhwbGljaXRseSBFeGVjQ2xlYXJUdXBsZSgpIGhlcmUuCisJICov CisJRXhlY0NvcHlTbG90KGRzdHNsb3QsIHNsb3QpOworCisJbWlzdGF0ZS0+Y3VyX3Nsb3RzKys7 CisKKwlpZiAobWlzdGF0ZS0+Y3VyX3Nsb3RzID49IEhFQVBfTUFYX0JVRkZFUkVEX1NMT1RTKQor CQloZWFwX21vZGlmeV9idWZmZXJfZmx1c2goc3RhdGUpOworCisJTWVtb3J5Q29udGV4dFN3aXRj aFRvKG9sZGNvbnRleHQpOworfQorCisvKgorICogSW5zZXJ0IG11bHRpcGxlIHR1cGxlcyBmcm9t IGluLW1lbW9yeSBidWZmZXJlZCBzbG90cyBpbnRvIGhlYXAuCisgKi8KK3ZvaWQKK2hlYXBfbW9k aWZ5X2J1ZmZlcl9mbHVzaChUYWJsZU1vZGlmeVN0YXRlICpzdGF0ZSkKK3sKKwlIZWFwSW5zZXJ0 U3RhdGUgKmlzdGF0ZTsKKwlIZWFwTXVsdGlJbnNlcnRTdGF0ZSAqbWlzdGF0ZTsKKwlNZW1vcnlD b250ZXh0IG9sZGNvbnRleHQ7CisKKwkvKiBRdWljayBleGl0IGlmIHdlIGhhdmVuJ3QgaW5zZXJ0 ZWQgYW55dGhpbmcgeWV0ICovCisJaWYgKHN0YXRlLT5kYXRhID09IE5VTEwpCisJCXJldHVybjsK KworCWlzdGF0ZSA9IChIZWFwSW5zZXJ0U3RhdGUgKikgc3RhdGUtPmRhdGE7CisJQXNzZXJ0KGlz dGF0ZS0+bWlzdGF0ZSAhPSBOVUxMKTsKKwltaXN0YXRlID0gaXN0YXRlLT5taXN0YXRlOworCisJ LyogUXVpY2sgZXhpdCBpZiB3ZSBoYXZlIGZsdXNoZWQgYWxyZWFkeSAqLworCWlmIChtaXN0YXRl LT5jdXJfc2xvdHMgPT0gMCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBoZWFwX211bHRpX2luc2Vy dCgpIGNhbiBsZWFrIG1lbW9yeSwgc28gc3dpdGNoIHRvIHNob3J0LWxpdmVkIG1lbW9yeQorCSAq IGNvbnRleHQgYmVmb3JlIGNhbGxpbmcgaXQuCisJICovCisJb2xkY29udGV4dCA9IE1lbW9yeUNv bnRleHRTd2l0Y2hUbyhtaXN0YXRlLT5tZW1fY3R4KTsKKwloZWFwX211bHRpX2luc2VydChzdGF0 ZS0+cmVsLAorCQkJCQkgIG1pc3RhdGUtPnNsb3RzLAorCQkJCQkgIG1pc3RhdGUtPmN1cl9zbG90 cywKKwkJCQkJICBzdGF0ZS0+Y2lkLAorCQkJCQkgIHN0YXRlLT5vcHRpb25zLAorCQkJCQkgIGlz dGF0ZS0+YmlzdGF0ZSk7CisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCU1l bW9yeUNvbnRleHRSZXNldChtaXN0YXRlLT5tZW1fY3R4KTsKKworCS8qCisJICogSW52b2tlIGNh bGxlci1zdXBwbGllZCBidWZmZXIgZmx1c2ggY2FsbGJhY2sgYWZ0ZXIgaW5zZXJ0aW5nIHJvd3Mg ZnJvbQorCSAqIHRoZSBidWZmZXJzIHRvIGhlYXAuCisJICovCisJaWYgKHN0YXRlLT5idWZmZXJf Zmx1c2hfY2IgIT0gTlVMTCkKKwl7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgbWlzdGF0ZS0+Y3Vy X3Nsb3RzOyBpKyspCisJCXsKKwkJCXN0YXRlLT5idWZmZXJfZmx1c2hfY2Ioc3RhdGUtPmJ1ZmZl cl9mbHVzaF9jdHgsCisJCQkJCQkJCSAgIG1pc3RhdGUtPnNsb3RzW2ldKTsKKwkJfQorCX0KKwor CW1pc3RhdGUtPmN1cl9zbG90cyA9IDA7Cit9CisKKy8qCisgKiBIZWFwIGluc2VydCBzcGVjaWZp YyBmdW5jdGlvbiB1c2VkIGZvciBwZXJmb3JtaW5nIHdvcmsgYXQgdGhlIGVuZCBsaWtlCisgKiBm bHVzaGluZyByZW1haW5pbmcgYnVmZmVyZWQgdHVwbGVzLCBjbGVhbmluZyB1cCB0aGUgaW5zZXJ0 IHN0YXRlIGFuZCB0dXBsZQorICogdGFibGUgc2xvdHMgdXNlZCBmb3IgYnVmZmVyZWQgdHVwbGVz IGV0Yy4KKyAqLworc3RhdGljIHZvaWQKK2hlYXBfbW9kaWZ5X2luc2VydF9lbmQoVGFibGVNb2Rp ZnlTdGF0ZSAqc3RhdGUpCit7CisJSGVhcEluc2VydFN0YXRlICppc3RhdGU7CisKKwkvKiBRdWlj ayBleGl0IGlmIHdlIGhhdmVuJ3QgaW5zZXJ0ZWQgYW55dGhpbmcgeWV0ICovCisJaWYgKHN0YXRl LT5kYXRhID09IE5VTEwpCisJCXJldHVybjsKKworCWlzdGF0ZSA9IChIZWFwSW5zZXJ0U3RhdGUg Kikgc3RhdGUtPmRhdGE7CisKKwlpZiAoaXN0YXRlLT5taXN0YXRlICE9IE5VTEwpCisJeworCQlI ZWFwTXVsdGlJbnNlcnRTdGF0ZSAqbWlzdGF0ZSA9IGlzdGF0ZS0+bWlzdGF0ZTsKKworCQloZWFw X21vZGlmeV9idWZmZXJfZmx1c2goc3RhdGUpOworCisJCUFzc2VydChtaXN0YXRlLT5jdXJfc2xv dHMgPT0gMCk7CisKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBIRUFQX01BWF9CVUZGRVJFRF9TTE9U UyAmJiBtaXN0YXRlLT5zbG90c1tpXSAhPSBOVUxMOyBpKyspCisJCQlFeGVjRHJvcFNpbmdsZVR1 cGxlVGFibGVTbG90KG1pc3RhdGUtPnNsb3RzW2ldKTsKKworCQlNZW1vcnlDb250ZXh0RGVsZXRl KG1pc3RhdGUtPm1lbV9jdHgpOworCX0KKworCWlmIChpc3RhdGUtPmJpc3RhdGUgIT0gTlVMTCkK KwkJRnJlZUJ1bGtJbnNlcnRTdGF0ZShpc3RhdGUtPmJpc3RhdGUpOworfQorCisvKgorICogQ2xl YW4gaGVhcCBtb2RpZnkgc3RhdGUuCisgKi8KK3ZvaWQKK2hlYXBfbW9kaWZ5X2VuZChUYWJsZU1v ZGlmeVN0YXRlICpzdGF0ZSkKK3sKKwloZWFwX21vZGlmeV9pbnNlcnRfZW5kKHN0YXRlKTsKKwlN ZW1vcnlDb250ZXh0RGVsZXRlKHN0YXRlLT5tZW1fY3R4KTsKK30KKwogLyoKICAqCXNpbXBsZV9o ZWFwX2luc2VydCAtIGluc2VydCBhIHR1cGxlCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv YWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hl YXBhbV9oYW5kbGVyLmMKaW5kZXggYThkOTVlMGYxYy4uZDJlZjZiNGI3OCAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYworKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCkBAIC0yNjQ0LDYgKzI2NDQsMTIgQEAgc3Rh dGljIGNvbnN0IFRhYmxlQW1Sb3V0aW5lIGhlYXBhbV9tZXRob2RzID0gewogCS50dXBsZV9pbnNl cnRfc3BlY3VsYXRpdmUgPSBoZWFwYW1fdHVwbGVfaW5zZXJ0X3NwZWN1bGF0aXZlLAogCS50dXBs ZV9jb21wbGV0ZV9zcGVjdWxhdGl2ZSA9IGhlYXBhbV90dXBsZV9jb21wbGV0ZV9zcGVjdWxhdGl2 ZSwKIAkubXVsdGlfaW5zZXJ0ID0gaGVhcF9tdWx0aV9pbnNlcnQsCisKKwkudHVwbGVfbW9kaWZ5 X2JlZ2luID0gaGVhcF9tb2RpZnlfYmVnaW4sCisJLnR1cGxlX21vZGlmeV9idWZmZXJfaW5zZXJ0 ID0gaGVhcF9tb2RpZnlfYnVmZmVyX2luc2VydCwKKwkudHVwbGVfbW9kaWZ5X2J1ZmZlcl9mbHVz aCA9IGhlYXBfbW9kaWZ5X2J1ZmZlcl9mbHVzaCwKKwkudHVwbGVfbW9kaWZ5X2VuZCA9IGhlYXBf bW9kaWZ5X2VuZCwKKwogCS50dXBsZV9kZWxldGUgPSBoZWFwYW1fdHVwbGVfZGVsZXRlLAogCS50 dXBsZV91cGRhdGUgPSBoZWFwYW1fdHVwbGVfdXBkYXRlLAogCS50dXBsZV9sb2NrID0gaGVhcGFt X3R1cGxlX2xvY2ssCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVh bWFwaS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW1hcGkuYwppbmRleCBlOWI1 OTgyNTZmLi43NzJmMjliMWI1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUv dGFibGVhbWFwaS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtYXBpLmMK QEAgLTk3LDYgKzk3LDExIEBAIEdldFRhYmxlQW1Sb3V0aW5lKE9pZCBhbWhhbmRsZXIpCiAJQXNz ZXJ0KHJvdXRpbmUtPnNjYW5fc2FtcGxlX25leHRfYmxvY2sgIT0gTlVMTCk7CiAJQXNzZXJ0KHJv dXRpbmUtPnNjYW5fc2FtcGxlX25leHRfdHVwbGUgIT0gTlVMTCk7CiAKKwlBc3NlcnQocm91dGlu ZS0+dHVwbGVfbW9kaWZ5X2JlZ2luICE9IE5VTEwpOworCUFzc2VydChyb3V0aW5lLT50dXBsZV9t b2RpZnlfYnVmZmVyX2luc2VydCAhPSBOVUxMKTsKKwlBc3NlcnQocm91dGluZS0+dHVwbGVfbW9k aWZ5X2J1ZmZlcl9mbHVzaCAhPSBOVUxMKTsKKwlBc3NlcnQocm91dGluZS0+dHVwbGVfbW9kaWZ5 X2VuZCAhPSBOVUxMKTsKKwogCXJldHVybiByb3V0aW5lOwogfQogCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKaW5k ZXggOTZjZjgyZjk3Yi4uYTk3MjJjZTk0NyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNz L2hlYXBhbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaApAQCAtMzcsNiArMzcs NyBAQAogI2RlZmluZSBIRUFQX0lOU0VSVF9GUk9aRU4JCVRBQkxFX0lOU0VSVF9GUk9aRU4KICNk ZWZpbmUgSEVBUF9JTlNFUlRfTk9fTE9HSUNBTAlUQUJMRV9JTlNFUlRfTk9fTE9HSUNBTAogI2Rl ZmluZSBIRUFQX0lOU0VSVF9TUEVDVUxBVElWRSAweDAwMTAKKyNkZWZpbmUgSEVBUF9JTlNFUlRf QkFTX0JVTEtXUklURQlUQUJMRV9JTlNFUlRfQkFTX0JVTEtXUklURQogCiAvKiAib3B0aW9ucyIg ZmxhZyBiaXRzIGZvciBoZWFwX3BhZ2VfcHJ1bmVfYW5kX2ZyZWV6ZSAqLwogI2RlZmluZSBIRUFQ X1BBR0VfUFJVTkVfTUFSS19VTlVTRURfTk9XCQkoMSA8PCAwKQpAQCAtMjcyLDYgKzI3MywzMyBA QCB0eXBlZGVmIGVudW0KIAlQUlVORV9WQUNVVU1fQ0xFQU5VUCwJCS8qIFZBQ1VVTSAybmQgaGVh cCBwYXNzICovCiB9IFBydW5lUmVhc29uOwogCisvKgorICogTWF4aW11bSBudW1iZXIgb2Ygc2xv dHMgdGhhdCBtdWx0aS1pbnNlcnQgYnVmZmVycyBjYW4gaG9sZC4KKyAqCisgKiBDYXV0aW9uOiBE b24ndCBtYWtlIHRoaXMgdG9vIGJpZywgYXMgd2UgY291bGQgZW5kIHVwIHdpdGggdGhpcyBtYW55 IHR1cGxlcworICogc3RvcmVkIGluIG11bHRpIGluc2VydCBidWZmZXIuCisgKi8KKyNkZWZpbmUg SEVBUF9NQVhfQlVGRkVSRURfU0xPVFMJCTEwMDAKKwordHlwZWRlZiBzdHJ1Y3QgSGVhcE11bHRp SW5zZXJ0U3RhdGUKK3sKKwkvKiBBcnJheSBvZiBidWZmZXJlZCBzbG90cyAqLworCVR1cGxlVGFi bGVTbG90ICoqc2xvdHM7CisKKwkvKiBOdW1iZXIgb2YgYnVmZmVyZWQgc2xvdHMgY3VycmVudGx5 IGhlbGQgKi8KKwlpbnQJCQljdXJfc2xvdHM7CisKKwkvKiBNZW1vcnkgY29udGV4dCBmb3IgZGVh bGluZyB3aXRoIG11bHRpIGluc2VydHMgKi8KKwlNZW1vcnlDb250ZXh0IG1lbV9jdHg7Cit9IEhl YXBNdWx0aUluc2VydFN0YXRlOworCit0eXBlZGVmIHN0cnVjdCBIZWFwSW5zZXJ0U3RhdGUKK3sK KwlzdHJ1Y3QgQnVsa0luc2VydFN0YXRlRGF0YSAqYmlzdGF0ZTsKKwlIZWFwTXVsdGlJbnNlcnRT dGF0ZSAqbWlzdGF0ZTsKK30gSGVhcEluc2VydFN0YXRlOworCisKIC8qIC0tLS0tLS0tLS0tLS0t LS0KICAqCQlmdW5jdGlvbiBwcm90b3R5cGVzIGZvciBoZWFwIGFjY2VzcyBtZXRob2QKICAqCkBA IC0zMjIsNiArMzUwLDE3IEBAIGV4dGVybiB2b2lkIGhlYXBfaW5zZXJ0KFJlbGF0aW9uIHJlbGF0 aW9uLCBIZWFwVHVwbGUgdHVwLCBDb21tYW5kSWQgY2lkLAogZXh0ZXJuIHZvaWQgaGVhcF9tdWx0 aV9pbnNlcnQoUmVsYXRpb24gcmVsYXRpb24sIHN0cnVjdCBUdXBsZVRhYmxlU2xvdCAqKnNsb3Rz LAogCQkJCQkJCSAgaW50IG50dXBsZXMsIENvbW1hbmRJZCBjaWQsIGludCBvcHRpb25zLAogCQkJ CQkJCSAgQnVsa0luc2VydFN0YXRlIGJpc3RhdGUpOworCitleHRlcm4gVGFibGVNb2RpZnlTdGF0 ZSAqaGVhcF9tb2RpZnlfYmVnaW4oUmVsYXRpb24gcmVsLAorCQkJCQkJCQkJCSAgIENvbW1hbmRJ ZCBjaWQsCisJCQkJCQkJCQkJICAgaW50IG9wdGlvbnMsCisJCQkJCQkJCQkJICAgVGFibGVNb2Rp ZnlCdWZmZXJGbHVzaENiIGJ1ZmZlcl9mbHVzaF9jYiwKKwkJCQkJCQkJCQkgICB2b2lkICpidWZm ZXJfZmx1c2hfY3R4KTsKK2V4dGVybiB2b2lkIGhlYXBfbW9kaWZ5X2J1ZmZlcl9pbnNlcnQoVGFi bGVNb2RpZnlTdGF0ZSAqc3RhdGUsCisJCQkJCQkJCQkgIFR1cGxlVGFibGVTbG90ICpzbG90KTsK K2V4dGVybiB2b2lkIGhlYXBfbW9kaWZ5X2J1ZmZlcl9mbHVzaChUYWJsZU1vZGlmeVN0YXRlICpz dGF0ZSk7CitleHRlcm4gdm9pZCBoZWFwX21vZGlmeV9lbmQoVGFibGVNb2RpZnlTdGF0ZSAqc3Rh dGUpOworCiBleHRlcm4gVE1fUmVzdWx0IGhlYXBfZGVsZXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBJ dGVtUG9pbnRlciB0aWQsCiAJCQkJCQkJIENvbW1hbmRJZCBjaWQsIFNuYXBzaG90IGNyb3NzY2hl Y2ssIGJvb2wgd2FpdCwKIAkJCQkJCQkgc3RydWN0IFRNX0ZhaWx1cmVEYXRhICp0bWZkLCBib29s IGNoYW5naW5nUGFydCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5o IGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaAppbmRleCBhZGI0NzhhOTNjLi41N2I3MWVl ZjM4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCisrKyBiL3NyYy9p bmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKQEAgLTI1NCwxMSArMjU0LDQyIEBAIHR5cGVkZWYgc3Ry dWN0IFRNX0luZGV4RGVsZXRlT3AKIAlUTV9JbmRleFN0YXR1cyAqc3RhdHVzOwogfSBUTV9JbmRl eERlbGV0ZU9wOwogCitzdHJ1Y3QgVGFibGVNb2RpZnlTdGF0ZTsKKworLyogQ2FsbGJhY2sgaW52 b2tlZCB1cG9uIGZsdXNoaW5nIGVhY2ggYnVmZmVyZWQgdHVwbGUgKi8KK3R5cGVkZWYgdm9pZCAo KlRhYmxlTW9kaWZ5QnVmZmVyRmx1c2hDYikgKHZvaWQgKmNvbnRleHQsCisJCQkJCQkJCQkJICBU dXBsZVRhYmxlU2xvdCAqc2xvdCk7CisKKy8qIEhvbGRzIHRhYmxlIG1vZGlmeSBzdGF0ZSAqLwor dHlwZWRlZiBzdHJ1Y3QgVGFibGVNb2RpZnlTdGF0ZQoreworCS8qIFRoZXNlIGZpZWxkcyBhcmUg dXNlZCBmb3IgaW5zZXJ0cyBmb3Igbm93ICovCisKKwlSZWxhdGlvbglyZWw7CQkJLyogUmVsYXRp b24gdG8gaW5zZXJ0IHRvICovCisJQ29tbWFuZElkCWNpZDsJCQkvKiBDb21tYW5kIElEIGZvciBp bnNlcnQgKi8KKwlpbnQJCQlvcHRpb25zOwkJLyogVEFCTEVfSU5TRVJUIG9wdGlvbnMgKi8KKwor CS8qIE1lbW9yeSBjb250ZXh0IGZvciBkZWFsaW5nIHdpdGggbW9kaWZ5IHN0YXRlIHZhcmlhYmxl cyAqLworCU1lbW9yeUNvbnRleHQgbWVtX2N0eDsKKworCS8qIEZsdXNoIGNhbGxiYWNrIGFuZCBp dHMgY29udGV4dCB1c2VkIGZvciBtdWx0aSBpbnNlcnRzICovCisJVGFibGVNb2RpZnlCdWZmZXJG bHVzaENiIGJ1ZmZlcl9mbHVzaF9jYjsKKwl2b2lkCSAgICpidWZmZXJfZmx1c2hfY3R4OworCisJ LyogVGFibGUgQU0gc3BlY2lmaWMgZGF0YSAqLworCXZvaWQJICAgKmRhdGE7Cit9IFRhYmxlTW9k aWZ5U3RhdGU7CisKIC8qICJvcHRpb25zIiBmbGFnIGJpdHMgZm9yIHRhYmxlX3R1cGxlX2luc2Vy dCAqLwogLyogVEFCTEVfSU5TRVJUX1NLSVBfV0FMIHdhcyAweDAwMDE7IFJlbGF0aW9uTmVlZHNX QUwoKSBub3cgZ292ZXJucyAqLwogI2RlZmluZSBUQUJMRV9JTlNFUlRfU0tJUF9GU00JCTB4MDAw MgogI2RlZmluZSBUQUJMRV9JTlNFUlRfRlJPWkVOCQkJMHgwMDA0CiAjZGVmaW5lIFRBQkxFX0lO U0VSVF9OT19MT0dJQ0FMCQkweDAwMDgKKy8qCisgKiBVc2UgQkFTX0JVTEtXUklURSBidWZmZXIg YWNjZXNzIHN0cmF0ZWd5LiAweDAwMTAgaXMgZm9yCisgKiBIRUFQX0lOU0VSVF9TUEVDVUxBVElW RS4KKyAqLworI2RlZmluZSBUQUJMRV9JTlNFUlRfQkFTX0JVTEtXUklURQkweDAwMjAKIAogLyog ZmxhZyBiaXRzIGZvciB0YWJsZV90dXBsZV9sb2NrICovCiAvKiBGb2xsb3cgdHVwbGVzIHdob3Nl IHVwZGF0ZSBpcyBpbiBwcm9ncmVzcyBpZiBsb2NrIG1vZGVzIGRvbid0IGNvbmZsaWN0ICAqLwpA QCAtNTc3LDYgKzYwOCwyMSBAQCB0eXBlZGVmIHN0cnVjdCBUYWJsZUFtUm91dGluZQogCXZvaWQJ CSgqZmluaXNoX2J1bGtfaW5zZXJ0KSAoUmVsYXRpb24gcmVsLCBpbnQgb3B0aW9ucyk7CiAKIAor CS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqIFRhYmxlIE1vZGlmeSByZWxhdGVkIGZ1bmN0aW9ucy4K KwkgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKi8KKwlUYWJsZU1vZGlmeVN0YXRlICooKnR1cGxlX21v ZGlmeV9iZWdpbikgKFJlbGF0aW9uIHJlbCwKKwkJCQkJCQkJCQkJIENvbW1hbmRJZCBjaWQsCisJ CQkJCQkJCQkJCSBpbnQgb3B0aW9ucywKKwkJCQkJCQkJCQkJIFRhYmxlTW9kaWZ5QnVmZmVyRmx1 c2hDYiBidWZmZXJfZmx1c2hfY2IsCisJCQkJCQkJCQkJCSB2b2lkICpidWZmZXJfZmx1c2hfY3R4 KTsKKwl2b2lkCQkoKnR1cGxlX21vZGlmeV9idWZmZXJfaW5zZXJ0KSAoVGFibGVNb2RpZnlTdGF0 ZSAqc3RhdGUsCisJCQkJCQkJCQkJCSAgIFR1cGxlVGFibGVTbG90ICpzbG90KTsKKwl2b2lkCQko KnR1cGxlX21vZGlmeV9idWZmZXJfZmx1c2gpIChUYWJsZU1vZGlmeVN0YXRlICpzdGF0ZSk7CisJ dm9pZAkJKCp0dXBsZV9tb2RpZnlfZW5kKSAoVGFibGVNb2RpZnlTdGF0ZSAqc3RhdGUpOworCisK IAkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KIAkgKiBEREwgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LgogCSAq IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQpAQCAtMTYwOCw2ICsxNjU0LDQxIEBAIHRhYmxlX2ZpbmlzaF9idWxr X2luc2VydChSZWxhdGlvbiByZWwsIGludCBvcHRpb25zKQogCQlyZWwtPnJkX3RhYmxlYW0tPmZp bmlzaF9idWxrX2luc2VydChyZWwsIG9wdGlvbnMpOwogfQogCisvKiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqIFRhYmxlIE1vZGlmeSByZWxhdGVkIGZ1bmN0aW9ucy4KKyAqIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICovCitzdGF0aWMgaW5saW5lIFRhYmxlTW9kaWZ5U3RhdGUgKgordGFibGVfbW9kaWZ5X2JlZ2lu KFJlbGF0aW9uIHJlbCwKKwkJCQkgICBDb21tYW5kSWQgY2lkLAorCQkJCSAgIGludCBvcHRpb25z LAorCQkJCSAgIFRhYmxlTW9kaWZ5QnVmZmVyRmx1c2hDYiBidWZmZXJfZmx1c2hfY2IsCisJCQkJ ICAgdm9pZCAqYnVmZmVyX2ZsdXNoX2N0eCkKK3sKKwlyZXR1cm4gcmVsLT5yZF90YWJsZWFtLT50 dXBsZV9tb2RpZnlfYmVnaW4ocmVsLAorCQkJCQkJCQkJCQkgICBjaWQsCisJCQkJCQkJCQkJCSAg IG9wdGlvbnMsCisJCQkJCQkJCQkJCSAgIGJ1ZmZlcl9mbHVzaF9jYiwKKwkJCQkJCQkJCQkJICAg YnVmZmVyX2ZsdXNoX2N0eCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAordGFibGVfbW9kaWZ5 X2J1ZmZlcl9pbnNlcnQoVGFibGVNb2RpZnlTdGF0ZSAqc3RhdGUsIFR1cGxlVGFibGVTbG90ICpz bG90KQoreworCXN0YXRlLT5yZWwtPnJkX3RhYmxlYW0tPnR1cGxlX21vZGlmeV9idWZmZXJfaW5z ZXJ0KHN0YXRlLCBzbG90KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCit0YWJsZV9tb2RpZnlf YnVmZmVyX2ZsdXNoKFRhYmxlTW9kaWZ5U3RhdGUgKnN0YXRlKQoreworCXN0YXRlLT5yZWwtPnJk X3RhYmxlYW0tPnR1cGxlX21vZGlmeV9idWZmZXJfZmx1c2goc3RhdGUpOworfQorCitzdGF0aWMg aW5saW5lIHZvaWQKK3RhYmxlX21vZGlmeV9lbmQoVGFibGVNb2RpZnlTdGF0ZSAqc3RhdGUpCit7 CisJc3RhdGUtPnJlbC0+cmRfdGFibGVhbS0+dHVwbGVfbW9kaWZ5X2VuZChzdGF0ZSk7Cit9CiAK IC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQogICogRERMIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4KZGlmZiAt LWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggMTcxYTdkZDVkMi4uZTdkZGYyOWMxNiAxMDA2NDQKLS0t IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QKQEAgLTExNDcsNiArMTE0Nyw4IEBAIEhlYWRsaW5lSnNvblN0YXRl CiBIZWFkbGluZVBhcnNlZFRleHQKIEhlYWRsaW5lV29yZEVudHJ5CiBIZWFwQ2hlY2tDb250ZXh0 CitIZWFwSW5zZXJ0U3RhdGUKK0hlYXBNdWx0aUluc2VydFN0YXRlCiBIZWFwUGFnZUZyZWV6ZQog SGVhcFNjYW5EZXNjCiBIZWFwVHVwbGUKQEAgLTI4NzMsNiArMjg3NSw3IEBAIFRhYmxlRnVuY1Nj YW5TdGF0ZQogVGFibGVGdW5jVHlwZQogVGFibGVJbmZvCiBUYWJsZUxpa2VDbGF1c2UKK1RhYmxl TW9kaWZ5U3RhdGUKIFRhYmxlU2FtcGxlQ2xhdXNlCiBUYWJsZVNjYW5EZXNjCiBUYWJsZVNjYW5E ZXNjRGF0YQotLSAKMi40MC4xCgo= --00000000000065d8ed0625b55ad2 Content-Type: application/octet-stream; name="v25-0002-Optimize-CTAS-CMV-RMV-with-new-multi-inserts-tab.patch" Content-Disposition: attachment; filename="v25-0002-Optimize-CTAS-CMV-RMV-with-new-multi-inserts-tab.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m2w6a8of1 RnJvbSA1YTE2YzYxOGM0YzA4NzU1NDRlYjg2NmJlZTc0YjY4NjUwNzM3ZmJkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8cnVwaXJlZGRAYW1hem9uLmNv bT4KRGF0ZTogV2VkLCAzMCBPY3QgMjAyNCAxNzoyOTo1NSArMDAwMApTdWJqZWN0OiBbUEFUQ0gg djI1IDIvM10gT3B0aW1pemUgQ1RBUy9DTVYvUk1WIHdpdGggbmV3IG11bHRpLWluc2VydHMgdGFi bGUgQU0KClRoaXMgY29tbWl0IG9wdGltaXplcyB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIGZvciBo ZWFwIEFNIHVzaW5nIG5ldwptdWx0aS1pbnNlcnRzIHRhYmxlIEFNIGFkZGVkIGJ5IGNvbW1pdCA8 PENIQU5HRV9NRT4+OgotIENSRUFURSBUQUJMRSBBUwotIENSRUFURSBNQVRFUklBTElaRUQgVklF VwotIFJFRlJFU0ggTUFURVJJQUxJWkVEIFZJRVcKClRlc3Rpbmcgc2hvd3MgdGhhdCBwZXJmb3Jt YW5jZSBvZiBDVEFTLCBDTVYsIFJNViBpcyBpbXByb3ZlZCBieQo8PFRPX0ZJTEw+PiByZXNwZWN0 aXZlbHkgb24gPDxUT19GSUxMPj4gc3lzdGVtLgoKQXV0aG9yOiBCaGFyYXRoIFJ1cGlyZWRkeQpS ZXZpZXdlZC1ieTogSmVmZiBEYXZpcwpEaXNjdXNzaW9uOiBodHRwczovL3d3dy5wb3N0Z3Jlc3Fs Lm9yZy9tZXNzYWdlLWlkLzIwMjAwOTI0MDI0MTI4Lmt5azNyNWc3ZG51M2Z4eHhAYWxhcDMuYW5h cmF6ZWwuZGUKRGlzY3Vzc2lvbjogaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1p ZC9DQUxqMkFDVmk5ZVRSWVIlM0RnZGNhNXd4dGozS2tfOXE5cVZjY3hzUzFobmdUR09DalB3USU0 MG1haWwuZ21haWwuY29tCkRpc2N1c3Npb246IGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL21l c3NhZ2UtaWQvODYzMzE3MWNiMDM0YWFmYzI2MGZkZjM3ZGYwNGI2Yzc3OWFhMWUyZi5jYW1lbCU0 MGotZGF2aXMuY29tCi0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYyB8ICA2MCAr KysrKysrKysrKysrKy0tLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL21hdHZpZXcuYyAgfCAxMDYg KysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0KIHNyYy9pbmNsdWRlL2NvbW1hbmRzL21h dHZpZXcuaCAgfCAgIDMgKwogMyBmaWxlcyBjaGFuZ2VkLCAxNDcgaW5zZXJ0aW9ucygrKSwgMjIg ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMu YyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMKaW5kZXggNWM5MmU0OGE1Ni4uNTVm ZDQzOTQ2OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYworKysg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jCkBAIC0zOCw2ICszOCw3IEBACiAjaW5j bHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCiAjaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgiCiAj aW5jbHVkZSAibm9kZXMvcXVlcnlqdW1ibGUuaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvb3B0aW1p emVyLmgiCiAjaW5jbHVkZSAicGFyc2VyL2FuYWx5emUuaCIKICNpbmNsdWRlICJyZXdyaXRlL3Jl d3JpdGVIYW5kbGVyLmgiCiAjaW5jbHVkZSAidGNvcC90Y29wcHJvdC5oIgpAQCAtNTYsNiArNTcs MTIgQEAgdHlwZWRlZiBzdHJ1Y3QKIAlDb21tYW5kSWQJb3V0cHV0X2NpZDsJCS8qIGNtaW4gdG8g aW5zZXJ0IGluIG91dHB1dCB0dXBsZXMgKi8KIAlpbnQJCQl0aV9vcHRpb25zOwkJLyogdGFibGVf dHVwbGVfaW5zZXJ0IHBlcmZvcm1hbmNlIG9wdGlvbnMgKi8KIAlCdWxrSW5zZXJ0U3RhdGUgYmlz dGF0ZTsJLyogYnVsayBpbnNlcnQgc3RhdGUgKi8KKworCS8qIFRhYmxlIG1vZGlmeSBzdGF0ZS4g TlVMTCBpZiBtdWx0aS1pbnNlcnRzIGlzbid0IHN1cHBvcnRlZC4gKi8KKwlUYWJsZU1vZGlmeVN0 YXRlICptc3RhdGU7CisKKwkvKiBUcnVlIGlmIFNFTEVDVCBxdWVyeSBjb250YWlucyB2b2xhdGls ZSBmdW5jdGlvbnMgKi8KKwlib29sCQl2b2xhdGlsZV9mdW5jczsKIH0gRFJfaW50b3JlbDsKIAog LyogdXRpbGl0eSBmdW5jdGlvbnMgZm9yIENUQVMgZGVmaW5pdGlvbiBjcmVhdGlvbiAqLwpAQCAt MzIxLDYgKzMyOCwxMCBAQCBFeGVjQ3JlYXRlVGFibGVBcyhQYXJzZVN0YXRlICpwc3RhdGUsIENy ZWF0ZVRhYmxlQXNTdG10ICpzdG10LAogCQlwbGFuID0gcGdfcGxhbl9xdWVyeShxdWVyeSwgcHN0 YXRlLT5wX3NvdXJjZXRleHQsCiAJCQkJCQkJIENVUlNPUl9PUFRfUEFSQUxMRUxfT0ssIHBhcmFt cyk7CiAKKwkJLyogQ2hlY2sgaWYgdGhlIFNFTEVDVCBxdWVyeSBoYXMgYW55IHZvbGF0aWxlIGZ1 bmN0aW9ucyAqLworCQkoKERSX2ludG9yZWwgKikgZGVzdCktPnZvbGF0aWxlX2Z1bmNzID0KKwkJ CWNvbnRhaW5fdm9sYXRpbGVfZnVuY3Rpb25zX2FmdGVyX3BsYW5uaW5nKChFeHByICopIHF1ZXJ5 KTsKKwogCQkvKgogCQkgKiBVc2UgYSBzbmFwc2hvdCB3aXRoIGFuIHVwZGF0ZWQgY29tbWFuZCBJ RCB0byBlbnN1cmUgdGhpcyBxdWVyeSBzZWVzCiAJCSAqIHJlc3VsdHMgb2YgYW55IHByZXZpb3Vz bHkgZXhlY3V0ZWQgcXVlcmllcy4gIChUaGlzIGNvdWxkIG9ubHkKQEAgLTU1NiwxNiArNTY3LDMy IEBAIGludG9yZWxfc3RhcnR1cChEZXN0UmVjZWl2ZXIgKnNlbGYsIGludCBvcGVyYXRpb24sIFR1 cGxlRGVzYyB0eXBlaW5mbykKIAlteVN0YXRlLT5yZWwgPSBpbnRvUmVsYXRpb25EZXNjOwogCW15 U3RhdGUtPnJlbGFkZHIgPSBpbnRvUmVsYXRpb25BZGRyOwogCW15U3RhdGUtPm91dHB1dF9jaWQg PSBHZXRDdXJyZW50Q29tbWFuZElkKHRydWUpOwotCW15U3RhdGUtPnRpX29wdGlvbnMgPSBUQUJM RV9JTlNFUlRfU0tJUF9GU007CisJbXlTdGF0ZS0+dGlfb3B0aW9ucyA9IFRBQkxFX0lOU0VSVF9T S0lQX0ZTTSB8CisJCVRBQkxFX0lOU0VSVF9CQVNfQlVMS1dSSVRFOworCW15U3RhdGUtPm1zdGF0 ZSA9IE5VTEw7CisJbXlTdGF0ZS0+YmlzdGF0ZSA9IE5VTEw7CiAKIAkvKgogCSAqIElmIFdJVEgg Tk8gREFUQSBpcyBzcGVjaWZpZWQsIHRoZXJlIGlzIG5vIG5lZWQgdG8gc2V0IHVwIHRoZSBzdGF0 ZSBmb3IKLQkgKiBidWxrIGluc2VydHMgYXMgdGhlcmUgYXJlIG5vIHR1cGxlcyB0byBpbnNlcnQu CisJICogbXVsdGkgb3IgYnVsayBpbnNlcnRzIGFzIHRoZXJlIGFyZSBubyB0dXBsZXMgdG8gaW5z ZXJ0LgogCSAqLwogCWlmICghaW50by0+c2tpcERhdGEpCi0JCW15U3RhdGUtPmJpc3RhdGUgPSBH ZXRCdWxrSW5zZXJ0U3RhdGUoKTsKLQllbHNlCi0JCW15U3RhdGUtPmJpc3RhdGUgPSBOVUxMOwor CXsKKwkJaWYgKFRhYmxlTW9kaWZ5SXNNdWx0aUluc2VydHNTdXBwb3J0ZWQobXlTdGF0ZS0+cmVs LAorCQkJCQkJCQkJCQkgICBteVN0YXRlLT52b2xhdGlsZV9mdW5jcykpCisJCXsKKwkJCW15U3Rh dGUtPm1zdGF0ZSA9IHRhYmxlX21vZGlmeV9iZWdpbihteVN0YXRlLT5yZWwsCisJCQkJCQkJCQkJ CQkgbXlTdGF0ZS0+b3V0cHV0X2NpZCwKKwkJCQkJCQkJCQkJCSBteVN0YXRlLT50aV9vcHRpb25z LAorCQkJCQkJCQkJCQkJIE5VTEwsCS8qIE11bHRpLWluc2VydCBidWZmZXIKKwkJCQkJCQkJCQkJ CQkJICogZmx1c2ggY2FsbGJhY2sgKi8KKwkJCQkJCQkJCQkJCSBOVUxMKTsgLyogTXVsdGktaW5z ZXJ0IGJ1ZmZlcgorCQkJCQkJCQkJCQkJCQkgKiBmbHVzaCBjYWxsYmFjaworCQkJCQkJCQkJCQkJ CQkgKiBjb250ZXh0ICovCisJCX0KKwkJZWxzZQorCQkJbXlTdGF0ZS0+YmlzdGF0ZSA9IEdldEJ1 bGtJbnNlcnRTdGF0ZSgpOworCX0KIAogCS8qCiAJICogVmFsaWQgc21ncl90YXJnYmxvY2sgaW1w bGllcyBzb21ldGhpbmcgYWxyZWFkeSB3cm90ZSB0byB0aGUgcmVsYXRpb24uCkBAIC01OTMsMTEg KzYyMCwxNSBAQCBpbnRvcmVsX3JlY2VpdmUoVHVwbGVUYWJsZVNsb3QgKnNsb3QsIERlc3RSZWNl aXZlciAqc2VsZikKIAkJICogd291bGQgbm90IGJlIGNoZWFwIGVpdGhlci4gVGhpcyBhbHNvIGRv ZXNuJ3QgYWxsb3cgYWNjZXNzaW5nIHBlci1BTQogCQkgKiBkYXRhIChzYXkgYSB0dXBsZSdzIHht aW4pLCBidXQgc2luY2Ugd2UgZG9uJ3QgZG8gdGhhdCBoZXJlLi4uCiAJCSAqLwotCQl0YWJsZV90 dXBsZV9pbnNlcnQobXlTdGF0ZS0+cmVsLAotCQkJCQkJICAgc2xvdCwKLQkJCQkJCSAgIG15U3Rh dGUtPm91dHB1dF9jaWQsCi0JCQkJCQkgICBteVN0YXRlLT50aV9vcHRpb25zLAotCQkJCQkJICAg bXlTdGF0ZS0+YmlzdGF0ZSk7CisKKwkJaWYgKG15U3RhdGUtPm1zdGF0ZSAhPSBOVUxMKQorCQkJ dGFibGVfbW9kaWZ5X2J1ZmZlcl9pbnNlcnQobXlTdGF0ZS0+bXN0YXRlLCBzbG90KTsKKwkJZWxz ZQorCQkJdGFibGVfdHVwbGVfaW5zZXJ0KG15U3RhdGUtPnJlbCwKKwkJCQkJCQkgICBzbG90LAor CQkJCQkJCSAgIG15U3RhdGUtPm91dHB1dF9jaWQsCisJCQkJCQkJICAgbXlTdGF0ZS0+dGlfb3B0 aW9ucywKKwkJCQkJCQkgICBteVN0YXRlLT5iaXN0YXRlKTsKIAl9CiAKIAkvKiBXZSBrbm93IHRo aXMgaXMgYSBuZXdseSBjcmVhdGVkIHJlbGF0aW9uLCBzbyB0aGVyZSBhcmUgbm8gaW5kZXhlcyAq LwpAQCAtNjE2LDggKzY0NywxMyBAQCBpbnRvcmVsX3NodXRkb3duKERlc3RSZWNlaXZlciAqc2Vs ZikKIAogCWlmICghaW50by0+c2tpcERhdGEpCiAJewotCQlGcmVlQnVsa0luc2VydFN0YXRlKG15 U3RhdGUtPmJpc3RhdGUpOwotCQl0YWJsZV9maW5pc2hfYnVsa19pbnNlcnQobXlTdGF0ZS0+cmVs LCBteVN0YXRlLT50aV9vcHRpb25zKTsKKwkJaWYgKG15U3RhdGUtPm1zdGF0ZSAhPSBOVUxMKQor CQkJdGFibGVfbW9kaWZ5X2VuZChteVN0YXRlLT5tc3RhdGUpOworCQllbHNlCisJCXsKKwkJCUZy ZWVCdWxrSW5zZXJ0U3RhdGUobXlTdGF0ZS0+YmlzdGF0ZSk7CisJCQl0YWJsZV9maW5pc2hfYnVs a19pbnNlcnQobXlTdGF0ZS0+cmVsLCBteVN0YXRlLT50aV9vcHRpb25zKTsKKwkJfQogCX0KIAog CS8qIGNsb3NlIHJlbCwgYnV0IGtlZXAgbG9jayB1bnRpbCBjb21taXQgKi8KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL21hdHZpZXcuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21h dHZpZXcuYwppbmRleCAwMTAwOTc4NzNkLi5mYTQ5NWVjNTMzIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9tYXR2aWV3LmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0dmll dy5jCkBAIC0zMCw3ICszMCw5IEBACiAjaW5jbHVkZSAiY29tbWFuZHMvdGFibGVzcGFjZS5oIgog I2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWN1dG9yLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3Ivc3BpLmgi CisjaW5jbHVkZSAiZm9yZWlnbi9mZHdhcGkuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNp bmNsdWRlICJvcHRpbWl6ZXIvb3B0aW1pemVyLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5j bHVkZSAicmV3cml0ZS9yZXdyaXRlSGFuZGxlci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5o IgpAQCAtNTEsNiArNTMsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QKIAlDb21tYW5kSWQJb3V0cHV0X2Np ZDsJCS8qIGNtaW4gdG8gaW5zZXJ0IGluIG91dHB1dCB0dXBsZXMgKi8KIAlpbnQJCQl0aV9vcHRp b25zOwkJLyogdGFibGVfdHVwbGVfaW5zZXJ0IHBlcmZvcm1hbmNlIG9wdGlvbnMgKi8KIAlCdWxr SW5zZXJ0U3RhdGUgYmlzdGF0ZTsJLyogYnVsayBpbnNlcnQgc3RhdGUgKi8KKworCS8qIFRhYmxl IG1vZGlmeSBzdGF0ZS4gTlVMTCBpZiBtdWx0aS1pbnNlcnRzIGlzbid0IHN1cHBvcnRlZC4gKi8K KwlUYWJsZU1vZGlmeVN0YXRlICptc3RhdGU7CisKKwkvKiBUcnVlIGlmIFNFTEVDVCBxdWVyeSBj b250YWlucyB2b2xhdGlsZSBmdW5jdGlvbnMgKi8KKwlib29sCQl2b2xhdGlsZV9mdW5jczsKIH0g RFJfdHJhbnNpZW50cmVsOwogCiBzdGF0aWMgaW50CW1hdHZpZXdfbWFpbnRlbmFuY2VfZGVwdGgg PSAwOwpAQCAtNDI4LDYgKzQzNiwxMiBAQCByZWZyZXNoX21hdHZpZXdfZGF0YWZpbGwoRGVzdFJl Y2VpdmVyICpkZXN0LCBRdWVyeSAqcXVlcnksCiAJLyogUGxhbiB0aGUgcXVlcnkgd2hpY2ggd2ls bCBnZW5lcmF0ZSBkYXRhIGZvciB0aGUgcmVmcmVzaC4gKi8KIAlwbGFuID0gcGdfcGxhbl9xdWVy eShxdWVyeSwgcXVlcnlTdHJpbmcsIENVUlNPUl9PUFRfUEFSQUxMRUxfT0ssIE5VTEwpOwogCisJ LyoKKwkgKiBDaGVjayBpZiB0aGUgc3RvcmVkIE1BVEVSSUFMSVpFRCBWSUVXIHF1ZXJ5IGhhcyBh bnkgdm9sYXRpbGUgZnVuY3Rpb25zLgorCSAqLworCSgoRFJfdHJhbnNpZW50cmVsICopIGRlc3Qp LT52b2xhdGlsZV9mdW5jcyA9CisJCWNvbnRhaW5fdm9sYXRpbGVfZnVuY3Rpb25zX2FmdGVyX3Bs YW5uaW5nKChFeHByICopIHF1ZXJ5KTsKKwogCS8qCiAJICogVXNlIGEgc25hcHNob3Qgd2l0aCBh biB1cGRhdGVkIGNvbW1hbmQgSUQgdG8gZW5zdXJlIHRoaXMgcXVlcnkgc2VlcwogCSAqIHJlc3Vs dHMgb2YgYW55IHByZXZpb3VzbHkgZXhlY3V0ZWQgcXVlcmllcy4gIChUaGlzIGNvdWxkIG9ubHkg bWF0dGVyIGlmCkBAIC00OTIsOCArNTA2LDI2IEBAIHRyYW5zaWVudHJlbF9zdGFydHVwKERlc3RS ZWNlaXZlciAqc2VsZiwgaW50IG9wZXJhdGlvbiwgVHVwbGVEZXNjIHR5cGVpbmZvKQogCSAqLwog CW15U3RhdGUtPnRyYW5zaWVudHJlbCA9IHRyYW5zaWVudHJlbDsKIAlteVN0YXRlLT5vdXRwdXRf Y2lkID0gR2V0Q3VycmVudENvbW1hbmRJZCh0cnVlKTsKLQlteVN0YXRlLT50aV9vcHRpb25zID0g VEFCTEVfSU5TRVJUX1NLSVBfRlNNIHwgVEFCTEVfSU5TRVJUX0ZST1pFTjsKLQlteVN0YXRlLT5i aXN0YXRlID0gR2V0QnVsa0luc2VydFN0YXRlKCk7CisJbXlTdGF0ZS0+dGlfb3B0aW9ucyA9IFRB QkxFX0lOU0VSVF9TS0lQX0ZTTSB8CisJCVRBQkxFX0lOU0VSVF9GUk9aRU4gfAorCQlUQUJMRV9J TlNFUlRfQkFTX0JVTEtXUklURTsKKwlteVN0YXRlLT5iaXN0YXRlID0gTlVMTDsKKwlteVN0YXRl LT5tc3RhdGUgPSBOVUxMOworCisJLyogU2V0IHVwIHRoZSBzdGF0ZSBmb3IgbXVsdGkgb3IgYnVs ayBpbnNlcnRzICovCisJaWYgKFRhYmxlTW9kaWZ5SXNNdWx0aUluc2VydHNTdXBwb3J0ZWQobXlT dGF0ZS0+dHJhbnNpZW50cmVsLAorCQkJCQkJCQkJCSAgIG15U3RhdGUtPnZvbGF0aWxlX2Z1bmNz KSkKKwl7CisJCW15U3RhdGUtPm1zdGF0ZSA9IHRhYmxlX21vZGlmeV9iZWdpbihteVN0YXRlLT50 cmFuc2llbnRyZWwsCisJCQkJCQkJCQkJCSBteVN0YXRlLT5vdXRwdXRfY2lkLAorCQkJCQkJCQkJ CQkgbXlTdGF0ZS0+dGlfb3B0aW9ucywKKwkJCQkJCQkJCQkJIE5VTEwsCS8qIE11bHRpLWluc2Vy dCBidWZmZXIKKwkJCQkJCQkJCQkJCQkgKiBmbHVzaCBjYWxsYmFjayAqLworCQkJCQkJCQkJCQkg TlVMTCk7IC8qIE11bHRpLWluc2VydCBidWZmZXIKKwkJCQkJCQkJCQkJCQkgKiBmbHVzaCBjYWxs YmFjayBjb250ZXh0ICovCisJfQorCWVsc2UKKwkJbXlTdGF0ZS0+YmlzdGF0ZSA9IEdldEJ1bGtJ bnNlcnRTdGF0ZSgpOwogCiAJLyoKIAkgKiBWYWxpZCBzbWdyX3RhcmdibG9jayBpbXBsaWVzIHNv bWV0aGluZyBhbHJlYWR5IHdyb3RlIHRvIHRoZSByZWxhdGlvbi4KQEAgLTUxOSwxMSArNTUxLDE0 IEBAIHRyYW5zaWVudHJlbF9yZWNlaXZlKFR1cGxlVGFibGVTbG90ICpzbG90LCBEZXN0UmVjZWl2 ZXIgKnNlbGYpCiAJICogdHVwbGUncyB4bWluKSwgYnV0IHNpbmNlIHdlIGRvbid0IGRvIHRoYXQg aGVyZS4uLgogCSAqLwogCi0JdGFibGVfdHVwbGVfaW5zZXJ0KG15U3RhdGUtPnRyYW5zaWVudHJl bCwKLQkJCQkJICAgc2xvdCwKLQkJCQkJICAgbXlTdGF0ZS0+b3V0cHV0X2NpZCwKLQkJCQkJICAg bXlTdGF0ZS0+dGlfb3B0aW9ucywKLQkJCQkJICAgbXlTdGF0ZS0+YmlzdGF0ZSk7CisJaWYgKG15 U3RhdGUtPm1zdGF0ZSAhPSBOVUxMKQorCQl0YWJsZV9tb2RpZnlfYnVmZmVyX2luc2VydChteVN0 YXRlLT5tc3RhdGUsIHNsb3QpOworCWVsc2UKKwkJdGFibGVfdHVwbGVfaW5zZXJ0KG15U3RhdGUt PnRyYW5zaWVudHJlbCwKKwkJCQkJCSAgIHNsb3QsCisJCQkJCQkgICBteVN0YXRlLT5vdXRwdXRf Y2lkLAorCQkJCQkJICAgbXlTdGF0ZS0+dGlfb3B0aW9ucywKKwkJCQkJCSAgIG15U3RhdGUtPmJp c3RhdGUpOwogCiAJLyogV2Uga25vdyB0aGlzIGlzIGEgbmV3bHkgY3JlYXRlZCByZWxhdGlvbiwg c28gdGhlcmUgYXJlIG5vIGluZGV4ZXMgKi8KIApAQCAtNTM4LDkgKzU3MywxMyBAQCB0cmFuc2ll bnRyZWxfc2h1dGRvd24oRGVzdFJlY2VpdmVyICpzZWxmKQogewogCURSX3RyYW5zaWVudHJlbCAq bXlTdGF0ZSA9IChEUl90cmFuc2llbnRyZWwgKikgc2VsZjsKIAotCUZyZWVCdWxrSW5zZXJ0U3Rh dGUobXlTdGF0ZS0+YmlzdGF0ZSk7Ci0KLQl0YWJsZV9maW5pc2hfYnVsa19pbnNlcnQobXlTdGF0 ZS0+dHJhbnNpZW50cmVsLCBteVN0YXRlLT50aV9vcHRpb25zKTsKKwlpZiAobXlTdGF0ZS0+bXN0 YXRlICE9IE5VTEwpCisJCXRhYmxlX21vZGlmeV9lbmQobXlTdGF0ZS0+bXN0YXRlKTsKKwllbHNl CisJeworCQlGcmVlQnVsa0luc2VydFN0YXRlKG15U3RhdGUtPmJpc3RhdGUpOworCQl0YWJsZV9m aW5pc2hfYnVsa19pbnNlcnQobXlTdGF0ZS0+dHJhbnNpZW50cmVsLCBteVN0YXRlLT50aV9vcHRp b25zKTsKKwl9CiAKIAkvKiBjbG9zZSB0cmFuc2llbnRyZWwsIGJ1dCBrZWVwIGxvY2sgdW50aWwg Y29tbWl0ICovCiAJdGFibGVfY2xvc2UobXlTdGF0ZS0+dHJhbnNpZW50cmVsLCBOb0xvY2spOwpA QCAtOTg0LDMgKzEwMjMsNTAgQEAgQ2xvc2VNYXRWaWV3SW5jcmVtZW50YWxNYWludGVuYW5jZSh2 b2lkKQogCW1hdHZpZXdfbWFpbnRlbmFuY2VfZGVwdGgtLTsKIAlBc3NlcnQobWF0dmlld19tYWlu dGVuYW5jZV9kZXB0aCA+PSAwKTsKIH0KKworLyoKKyAqIENoZWNrIGlmIG11bHRpLWluc2VydHMg aXMgc3VwcG9ydGVkLgorICoKKyAqIEl0J3MgZ2VuZXJhbGx5IG1vcmUgZWZmaWNpZW50IHRvIHBy ZXBhcmUgYSBidW5jaCBvZiB0dXBsZXMgZm9yIGluc2VydGlvbiwKKyAqIGFuZCBpbnNlcnQgdGhl bSBpbiBvbmUgbXVsdGktaW5zZXJ0cyBjYWxsLCB0aGFuIGNhbGwKKyAqIHRhYmxlX3R1cGxlX2lu c2VydCgpIHNlcGFyYXRlbHkgZm9yIGV2ZXJ5IHR1cGxlLiBIb3dldmVyLCB0aGVyZSBhcmUgYQor ICogbnVtYmVyIG9mIHJlYXNvbnMgd2h5IHdlIG1pZ2h0IG5vdCBiZSBhYmxlIHRvIGRvIHRoaXMu IEluIGdlbmVyYWwsIGNhbid0CisgKiBzdXBwb3J0IG11bHRpLWluc2VydHMgaW4gdGhlIGZvbGxv d2luZyBjYXNlczoKKyAqCisgKiBXaGVuIHRoZXJlIGFyZSBhbnkgQkVGT1JFL0lOU1RFQUQgT0Yg dHJpZ2dlcnMgb24gdGhlIHRhYmxlIG9yIGFueSB2b2xhdGlsZQorICogZnVuY3Rpb25zL2V4cHJl c3Npb25zIGluIHRoZSBTRUxFQ1QgcXVlcnkuIFN1Y2ggdHJpZ2dlcnMgb3Igdm9sYXRpbGUKKyAq IGV4cHJlc3Npb25zIG1pZ2h0IHF1ZXJ5IHRoZSB0YWJsZSB3ZSdyZSBpbnNlcnRpbmcgaW50byBh bmQgYWN0IGRpZmZlcmVudGx5CisgKiBpZiB0aGUgdHVwbGVzIHRoYXQgaGF2ZSBhbHJlYWR5IGJl ZW4gcHJvY2Vzc2VkIGFuZCBwcmVwYXJlZCBmb3IgaW5zZXJ0aW9uCisgKiBhcmUgbm90IHRoZXJl LgorICoKKyAqIFdoZW4gaW5zZXJ0aW5nIGludG8gcGFydGl0aW9uZWQgdGFibGUuIEZvciBwYXJ0 aXRpb25lZCB0YWJsZXMsIHdlIG1heSBzdGlsbAorICogYmUgYWJsZSB0byBwZXJmb3JtIG11bHRp LWluc2VydHMuIEhvd2V2ZXIsIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGlzIGRlcGVuZHMKKyAqIG9u IHdoaWNoIHR5cGVzIG9mIHRyaWdnZXJzIGV4aXN0IG9uIHRoZSBwYXJ0aXRpb24uIFdlIG11c3Qg ZGlzYWJsZQorICogbXVsdGktaW5zZXJ0cyBpZiB0aGUgcGFydGl0aW9uIGlzIGEgZm9yZWlnbiB0 YWJsZSB0aGF0IGNhbid0IHVzZSBiYXRjaGluZyBvcgorICogaXQgaGFzIGFueSBiZWZvcmUgcm93 IGluc2VydCBvciBpbnNlcnQgaW5zdGVhZCB0cmlnZ2VycyAoc2FtZSBhcyB3ZSBjaGVja2VkCisg KiBhYm92ZSBmb3IgdGhlIHBhcmVudCB0YWJsZSkuIFdlIHJlYWxseSBjYW4ndCBrbm93IGFsbCB0 aGVzZSB1bmxlc3Mgd2Ugc3RhcnQKKyAqIGluc2VydGluZyB0dXBsZXMgaW50byB0aGUgcmVzcGVj dGl2ZSBwYXJ0aXRpb25zLiBXZSBjYW4gaGF2ZSBhbiBpbnRlcm1lZGlhdGUKKyAqIGluc2VydCBz dGF0ZSB0byBzaG93IHRoZSBpbnRlbnQgdG8gZG8gbXVsdGktaW5zZXJ0cyBhbmQgbGF0ZXIgZGV0 ZXJtaW5lIGlmCisgKiB3ZSBjYW4gdXNlIG11bHRpLWluc2VydHMgZm9yIHRoZSBwYXJ0aXRpb24g YmVpbmcgaW5zZXJ0ZWQgaW50by4KKyAqCisgKiBXaGVuIGluc2VydGluZyBpbnRvIGZvcmVpZ24g dGFibGUuIEZvciBmb3JlaWduIHRhYmxlcywgd2UgbWF5IHN0aWxsIGJlIGFibGUKKyAqIHRvIGRv IG11bHRpLWluc2VydHMgaWYgdGhlIEZEVyBzdXBwb3J0cyBiYXRjaGluZy4KKyAqLworYm9vbAor VGFibGVNb2RpZnlJc011bHRpSW5zZXJ0c1N1cHBvcnRlZChSZWxhdGlvbiByZWwsIGJvb2wgdm9s YXRpbGVfZnVuY3MpCit7CisJaWYgKHZvbGF0aWxlX2Z1bmNzKQorCQlyZXR1cm4gZmFsc2U7CisK KwkvKgorCSAqIEZvciBDUkVBVEUgVEFCTEUgQVMsIENSRUFURSBNQVRFUklBTElaRUQgVklFVywg UkVGUkVTSCBNQVRFUklBTElaRUQKKwkgKiBWSUVXLCB3ZSByZWFsbHkgY2FuJ3QgaGF2ZSB0cmln Z2VycyBvciBjYW4ndCBjcmVhdGUgdGFibGUgYXMKKwkgKiBwYXJ0aXRpb25lZCBvciBmb3JlaWdu LiBTbywgd2Ugd2lsbCBhc3NlcnQuCisJICovCisJQXNzZXJ0KHJlbC0+dHJpZ2Rlc2MgPT0gTlVM TCk7CisJQXNzZXJ0KHJlbC0+cmRfcmVsLT5yZWxraW5kICE9IFJFTEtJTkRfUEFSVElUSU9ORURf VEFCTEUpOworCUFzc2VydChyZWwtPnJkX3JlbC0+cmVsa2luZCAhPSBSRUxLSU5EX0ZPUkVJR05f VEFCTEUpOworCisJLyogQ2FuIHN1cHBvcnQgbXVsdGktaW5zZXJ0cyAqLworCXJldHVybiB0cnVl OworfQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvbWF0dmlldy5oIGIvc3JjL2lu Y2x1ZGUvY29tbWFuZHMvbWF0dmlldy5oCmluZGV4IGM4ODExZThmYzcuLjI4YWJkN2I4OWIgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL21hdHZpZXcuaAorKysgYi9zcmMvaW5jbHVk ZS9jb21tYW5kcy9tYXR2aWV3LmgKQEAgLTMzLDQgKzMzLDcgQEAgZXh0ZXJuIERlc3RSZWNlaXZl ciAqQ3JlYXRlVHJhbnNpZW50UmVsRGVzdFJlY2VpdmVyKE9pZCB0cmFuc2llbnRvaWQpOwogCiBl eHRlcm4gYm9vbCBNYXRWaWV3SW5jcmVtZW50YWxNYWludGVuYW5jZUlzRW5hYmxlZCh2b2lkKTsK IAorZXh0ZXJuIGJvb2wgVGFibGVNb2RpZnlJc011bHRpSW5zZXJ0c1N1cHBvcnRlZChSZWxhdGlv biByZWwsCisJCQkJCQkJCQkJCSAgIGJvb2wgdm9sYXRpbGVfZnVuY3MpOworCiAjZW5kaWYJCQkJ CQkJLyogTUFUVklFV19IICovCi0tIAoyLjQwLjEKCg== --00000000000065d8ed0625b55ad2 Content-Type: application/octet-stream; name="v25-0003-Use-new-multi-inserts-table-AM-for-COPY-.-FROM.patch" Content-Disposition: attachment; filename="v25-0003-Use-new-multi-inserts-table-AM-for-COPY-.-FROM.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m2w6abd32 RnJvbSAxNmQ0ODhjZmYxNGMwY2U5YWNlNjQ4YTFiOTllNTA3ZWRiMTg0ZTc0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8cnVwaXJlZGRAYW1hem9uLmNv bT4KRGF0ZTogV2VkLCAzMCBPY3QgMjAyNCAxNzozMDo0MSArMDAwMApTdWJqZWN0OiBbUEFUQ0gg djI1IDMvM10gVXNlIG5ldyBtdWx0aS1pbnNlcnRzIHRhYmxlIEFNIGZvciBDT1BZIC4uLiBGUk9N CgpUaGlzIGNvbW1pdCB1c2VzIHRoZSBuZXcgbXVsdGktaW5zZXJ0cyB0YWJsZSBBTSBhZGRlZCBi eSBjb21taXQKPDxDSEFOR0VfTUU+PiBmb3IgQ09QWSAuLi4gRlJPTSBjb21tYW5kLgoKQXV0aG9y OiBCaGFyYXRoIFJ1cGlyZWRkeQpSZXZpZXdlZC1ieTogSmVmZiBEYXZpcwpEaXNjdXNzaW9uOiBo dHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkL0NBTGoyQUNWaTllVFJZUiUzRGdk Y2E1d3h0ajNLa185cTlxVmNjeHNTMWhuZ1RHT0NqUHdRJTQwbWFpbC5nbWFpbC5jb20KRGlzY3Vz c2lvbjogaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC84NjMzMTcxY2IwMzRh YWZjMjYwZmRmMzdkZjA0YjZjNzc5YWExZTJmLmNhbWVsJTQwai1kYXZpcy5jb20KLS0tCiBzcmMv YmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbS5jICAgICAgICAgIHwgMjU0ICsrKysrKysrKysrKysr Ky0tLS0tLS0tCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9jb3B5ZnJvbV9pbnRlcm5hbC5oIHwgICA0 ICstCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgIHwgICAxICsKIDMg ZmlsZXMgY2hhbmdlZCwgMTcxIGluc2VydGlvbnMoKyksIDg4IGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tLmMgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9jb3B5ZnJvbS5jCmluZGV4IDA3Y2JkNWQyMmIuLjE4ZmI2MDljYmUgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFu ZHMvY29weWZyb20uYwpAQCAtNzQsMTQgKzc0LDI3IEBACiAgKi8KICNkZWZpbmUgTUFYX1BBUlRJ VElPTl9CVUZGRVJTCTMyCiAKKy8qIENvbnRleHQgZm9yIG11bHRpLWluc2VydHMgYnVmZmVyIGZs dXNoIGNhbGxiYWNrICovCit0eXBlZGVmIHN0cnVjdCBNdWx0aUluc2VydEJ1ZmZlckZsdXNoQ3R4 Cit7CisJQ29weUZyb21TdGF0ZSBjc3RhdGU7CisJUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5m bzsKKwlFU3RhdGUJICAgKmVzdGF0ZTsKK30gTXVsdGlJbnNlcnRCdWZmZXJGbHVzaEN0eDsKKwog LyogU3RvcmVzIG11bHRpLWluc2VydCBkYXRhIHJlbGF0ZWQgdG8gYSBzaW5nbGUgcmVsYXRpb24g aW4gQ29weUZyb20uICovCiB0eXBlZGVmIHN0cnVjdCBDb3B5TXVsdGlJbnNlcnRCdWZmZXIKIHsK LQlUdXBsZVRhYmxlU2xvdCAqc2xvdHNbTUFYX0JVRkZFUkVEX1RVUExFU107IC8qIEFycmF5IHRv IHN0b3JlIHR1cGxlcyAqLworCVRhYmxlTW9kaWZ5U3RhdGUgKm1zdGF0ZTsJLyogVGFibGUgaW5z ZXJ0IHN0YXRlOyBOVUxMIGlmIGZvcmVpZ24gdGFibGUgKi8KKwlUdXBsZVRhYmxlU2xvdCAqKnNs b3RzOwkJLyogQXJyYXkgdG8gc3RvcmUgdHVwbGVzICovCiAJUmVzdWx0UmVsSW5mbyAqcmVzdWx0 UmVsSW5mbzsJLyogUmVzdWx0UmVsSW5mbyBmb3IgJ3JlbGlkJyAqLwotCUJ1bGtJbnNlcnRTdGF0 ZSBiaXN0YXRlOwkvKiBCdWxrSW5zZXJ0U3RhdGUgZm9yIHRoaXMgcmVsIGlmIHBsYWluCi0JCQkJ CQkJCSAqIHRhYmxlOyBOVUxMIGlmIGZvcmVpZ24gdGFibGUgKi8KKwlUdXBsZVRhYmxlU2xvdCAq bWlzbG90OwkJLyogU2xvdCB1c2VkIGZvciBtdWx0aS1pbnNlcnRzICovCisJTXVsdGlJbnNlcnRC dWZmZXJGbHVzaEN0eCAqbWlidWZmZXJjdHg7IC8qIE11bHRpLWluc2VydHMgYnVmZmVyIGZsdXNo CisJCQkJCQkJCQkJCSAqIGNhbGxiYWNrIGNvbnRleHQgKi8KIAlpbnQJCQludXNlZDsJCQkvKiBu dW1iZXIgb2YgJ3Nsb3RzJyBjb250YWluaW5nIHR1cGxlcyAqLworCWludAkJCWN1cnJzbG90bm87 CQkvKiBDdXJyZW50IGJ1ZmZlcmVkIHNsb3QgbnVtYmVyIHRoYXQncyBiZWluZworCQkJCQkJCQkg KiBmbHVzaGVkOyBVc2VkIHRvIGdldCBjb3JyZWN0IGN1cl9saW5lbm8gZm9yCisJCQkJCQkJCSAq IGVycm9ycyB3aGlsZSBpbiBmbHVzaCBjYWxsYmFjay4gKi8KIAl1aW50NjQJCWxpbmVub3NbTUFY X0JVRkZFUkVEX1RVUExFU107CS8qIExpbmUgIyBvZiB0dXBsZSBpbiBjb3B5CiAJCQkJCQkJCQkJ CQkgKiBzdHJlYW0gKi8KIH0gQ29weU11bHRpSW5zZXJ0QnVmZmVyOwpAQCAtMjE2LDE5ICsyMjks OTYgQEAgQ29weUxpbWl0UHJpbnRvdXRMZW5ndGgoY29uc3QgY2hhciAqc3RyKQogCXJldHVybiBy ZXM7CiB9CiAKKy8qCisgKiBJbXBsZW1lbnRzIGZvciBtdWx0aS1pbnNlcnRzIGJ1ZmZlciBmbHVz aCBjYWxsYmFjaworICogaS5lLiBUYWJsZU1vZGlmeUVuZENhbGxiYWNrLgorICoKKyAqIE5COiBD YWxsZXIgbXVzdCB0YWtlIGNhcmUgb2Ygb3BlbmluZyBhbmQgY2xvc2luZyB0aGUgaW5kaWNlcy4K KyAqLworc3RhdGljIHZvaWQKK011bHRpSW5zZXJ0QnVmZmVyRmx1c2hDYih2b2lkICpjb250ZXh0 LCBUdXBsZVRhYmxlU2xvdCAqc2xvdCkKK3sKKwlNdWx0aUluc2VydEJ1ZmZlckZsdXNoQ3R4ICpt aWJ1ZmZlcmN0eCA9IChNdWx0aUluc2VydEJ1ZmZlckZsdXNoQ3R4ICopIGNvbnRleHQ7CisJQ29w eUZyb21TdGF0ZSBjc3RhdGUgPSBtaWJ1ZmZlcmN0eC0+Y3N0YXRlOworCVJlc3VsdFJlbEluZm8g KnJlc3VsdFJlbEluZm8gPSBtaWJ1ZmZlcmN0eC0+cmVzdWx0UmVsSW5mbzsKKwlFU3RhdGUJICAg KmVzdGF0ZSA9IG1pYnVmZmVyY3R4LT5lc3RhdGU7CisJQ29weU11bHRpSW5zZXJ0QnVmZmVyICpi dWZmZXIgPSByZXN1bHRSZWxJbmZvLT5yaV9Db3B5TXVsdGlJbnNlcnRCdWZmZXI7CisKKwkvKgor CSAqIElmIHRoZXJlIGFyZSBhbnkgaW5kZXhlcywgdXBkYXRlIHRoZW0gZm9yIGFsbCB0aGUgaW5z ZXJ0ZWQgdHVwbGVzLCBhbmQKKwkgKiBydW4gQUZURVIgUk9XIElOU0VSVCB0cmlnZ2Vycy4KKwkg Ki8KKwlpZiAocmVzdWx0UmVsSW5mby0+cmlfTnVtSW5kaWNlcyA+IDApCisJeworCQlMaXN0CSAg ICpyZWNoZWNrSW5kZXhlczsKKworCQljc3RhdGUtPmN1cl9saW5lbm8gPSBidWZmZXItPmxpbmVu b3NbYnVmZmVyLT5jdXJyc2xvdG5vKytdOworCQlyZWNoZWNrSW5kZXhlcyA9CisJCQlFeGVjSW5z ZXJ0SW5kZXhUdXBsZXMocmVzdWx0UmVsSW5mbywKKwkJCQkJCQkJICBzbG90LCBlc3RhdGUsIGZh bHNlLAorCQkJCQkJCQkgIGZhbHNlLCBOVUxMLCBOSUwsIGZhbHNlKTsKKworCQlFeGVjQVJJbnNl cnRUcmlnZ2Vycyhlc3RhdGUsIHJlc3VsdFJlbEluZm8sCisJCQkJCQkJIHNsb3QsIHJlY2hlY2tJ bmRleGVzLAorCQkJCQkJCSBjc3RhdGUtPnRyYW5zaXRpb25fY2FwdHVyZSk7CisKKwkJbGlzdF9m cmVlKHJlY2hlY2tJbmRleGVzKTsKKwl9CisKKwkvKgorCSAqIFRoZXJlJ3Mgbm8gaW5kZXhlcywg YnV0IHNlZSBpZiB3ZSBuZWVkIHRvIHJ1biBBRlRFUiBST1cgSU5TRVJUIHRyaWdnZXJzCisJICog YW55d2F5LgorCSAqLworCWVsc2UgaWYgKHJlc3VsdFJlbEluZm8tPnJpX1RyaWdEZXNjICE9IE5V TEwgJiYKKwkJCSAocmVzdWx0UmVsSW5mby0+cmlfVHJpZ0Rlc2MtPnRyaWdfaW5zZXJ0X2FmdGVy X3JvdyB8fAorCQkJICByZXN1bHRSZWxJbmZvLT5yaV9UcmlnRGVzYy0+dHJpZ19pbnNlcnRfbmV3 X3RhYmxlKSkKKwl7CisJCWNzdGF0ZS0+Y3VyX2xpbmVubyA9IGJ1ZmZlci0+bGluZW5vc1tidWZm ZXItPmN1cnJzbG90bm8rK107CisKKwkJRXhlY0FSSW5zZXJ0VHJpZ2dlcnMoZXN0YXRlLCByZXN1 bHRSZWxJbmZvLAorCQkJCQkJCSBzbG90LCBOSUwsCisJCQkJCQkJIGNzdGF0ZS0+dHJhbnNpdGlv bl9jYXB0dXJlKTsKKwl9CisKKwlBc3NlcnQoYnVmZmVyLT5jdXJyc2xvdG5vIDw9IGJ1ZmZlci0+ bnVzZWQpOworfQorCiAvKgogICogQWxsb2NhdGUgbWVtb3J5IGFuZCBpbml0aWFsaXplIGEgbmV3 IENvcHlNdWx0aUluc2VydEJ1ZmZlciBmb3IgdGhpcwogICogUmVzdWx0UmVsSW5mby4KICAqLwog c3RhdGljIENvcHlNdWx0aUluc2VydEJ1ZmZlciAqCi1Db3B5TXVsdGlJbnNlcnRCdWZmZXJJbml0 KFJlc3VsdFJlbEluZm8gKnJyaSkKK0NvcHlNdWx0aUluc2VydEJ1ZmZlckluaXQoQ29weU11bHRp SW5zZXJ0SW5mbyAqbWlpbmZvLCBSZXN1bHRSZWxJbmZvICpycmksCisJCQkJCQkgIENvcHlGcm9t U3RhdGUgY3N0YXRlLCBFU3RhdGUgKmVzdGF0ZSkKIHsKIAlDb3B5TXVsdGlJbnNlcnRCdWZmZXIg KmJ1ZmZlcjsKIAogCWJ1ZmZlciA9IChDb3B5TXVsdGlJbnNlcnRCdWZmZXIgKikgcGFsbG9jKHNp emVvZihDb3B5TXVsdGlJbnNlcnRCdWZmZXIpKTsKLQltZW1zZXQoYnVmZmVyLT5zbG90cywgMCwg c2l6ZW9mKFR1cGxlVGFibGVTbG90ICopICogTUFYX0JVRkZFUkVEX1RVUExFUyk7CisKKwlpZiAo cnJpLT5yaV9GZHdSb3V0aW5lID09IE5VTEwpCisJeworCQlidWZmZXItPm1pYnVmZmVyY3R4ID0K KwkJCShNdWx0aUluc2VydEJ1ZmZlckZsdXNoQ3R4ICopIHBhbGxvYyhzaXplb2YoTXVsdGlJbnNl cnRCdWZmZXJGbHVzaEN0eCkpOworCQlidWZmZXItPm1pYnVmZmVyY3R4LT5jc3RhdGUgPSBjc3Rh dGU7CisJCWJ1ZmZlci0+bWlidWZmZXJjdHgtPnJlc3VsdFJlbEluZm8gPSBycmk7CisJCWJ1ZmZl ci0+bWlidWZmZXJjdHgtPmVzdGF0ZSA9IGVzdGF0ZTsKKworCQlidWZmZXItPm1zdGF0ZSA9IHRh YmxlX21vZGlmeV9iZWdpbihycmktPnJpX1JlbGF0aW9uRGVzYywKKwkJCQkJCQkJCQkJbWlpbmZv LT5teWNpZCwKKwkJCQkJCQkJCQkJbWlpbmZvLT50aV9vcHRpb25zLAorCQkJCQkJCQkJCQlNdWx0 aUluc2VydEJ1ZmZlckZsdXNoQ2IsCisJCQkJCQkJCQkJCWJ1ZmZlci0+bWlidWZmZXJjdHgpOwor CisJCWJ1ZmZlci0+c2xvdHMgPSBOVUxMOworCX0KKwllbHNlCisJeworCQlidWZmZXItPm1zdGF0 ZSA9IE5VTEw7CisJCWJ1ZmZlci0+c2xvdHMgPSBwYWxsb2MwKHNpemVvZihUdXBsZVRhYmxlU2xv dCAqKSAqIE1BWF9CVUZGRVJFRF9UVVBMRVMpOworCX0KKworCWJ1ZmZlci0+bWlzbG90ID0gTlVM TDsKIAlidWZmZXItPnJlc3VsdFJlbEluZm8gPSBycmk7Ci0JYnVmZmVyLT5iaXN0YXRlID0gKHJy aS0+cmlfRmR3Um91dGluZSA9PSBOVUxMKSA/IEdldEJ1bGtJbnNlcnRTdGF0ZSgpIDogTlVMTDsK IAlidWZmZXItPm51c2VkID0gMDsKIAogCXJldHVybiBidWZmZXI7CkBAIC0yMzksMTEgKzMyOSwx MiBAQCBDb3B5TXVsdGlJbnNlcnRCdWZmZXJJbml0KFJlc3VsdFJlbEluZm8gKnJyaSkKICAqLwog c3RhdGljIGlubGluZSB2b2lkCiBDb3B5TXVsdGlJbnNlcnRJbmZvU2V0dXBCdWZmZXIoQ29weU11 bHRpSW5zZXJ0SW5mbyAqbWlpbmZvLAotCQkJCQkJCSAgIFJlc3VsdFJlbEluZm8gKnJyaSkKKwkJ CQkJCQkgICBSZXN1bHRSZWxJbmZvICpycmksIENvcHlGcm9tU3RhdGUgY3N0YXRlLAorCQkJCQkJ CSAgIEVTdGF0ZSAqZXN0YXRlKQogewogCUNvcHlNdWx0aUluc2VydEJ1ZmZlciAqYnVmZmVyOwog Ci0JYnVmZmVyID0gQ29weU11bHRpSW5zZXJ0QnVmZmVySW5pdChycmkpOworCWJ1ZmZlciA9IENv cHlNdWx0aUluc2VydEJ1ZmZlckluaXQobWlpbmZvLCBycmksIGNzdGF0ZSwgZXN0YXRlKTsKIAog CS8qIFNldHVwIGJhY2stbGluayBzbyB3ZSBjYW4gZWFzaWx5IGZpbmQgdGhpcyBidWZmZXIgYWdh aW4gKi8KIAlycmktPnJpX0NvcHlNdWx0aUluc2VydEJ1ZmZlciA9IGJ1ZmZlcjsKQEAgLTI3Niw3 ICszNjcsNyBAQCBDb3B5TXVsdGlJbnNlcnRJbmZvSW5pdChDb3B5TXVsdGlJbnNlcnRJbmZvICpt aWluZm8sIFJlc3VsdFJlbEluZm8gKnJyaSwKIAkgKiB0dXBsZXMgdGhlaXIgd2F5IGZvciB0aGUg Zmlyc3QgdGltZS4KIAkgKi8KIAlpZiAocnJpLT5yaV9SZWxhdGlvbkRlc2MtPnJkX3JlbC0+cmVs a2luZCAhPSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKQotCQlDb3B5TXVsdGlJbnNlcnRJbmZv U2V0dXBCdWZmZXIobWlpbmZvLCBycmkpOworCQlDb3B5TXVsdGlJbnNlcnRJbmZvU2V0dXBCdWZm ZXIobWlpbmZvLCBycmksIGNzdGF0ZSwgZXN0YXRlKTsKIH0KIAogLyoKQEAgLTMyMCw4ICs0MTEs NiBAQCBDb3B5TXVsdGlJbnNlcnRCdWZmZXJGbHVzaChDb3B5TXVsdGlJbnNlcnRJbmZvICptaWlu Zm8sCiAJCWludAkJCWJhdGNoX3NpemUgPSByZXN1bHRSZWxJbmZvLT5yaV9CYXRjaFNpemU7CiAJ CWludAkJCXNlbnQgPSAwOwogCi0JCUFzc2VydChidWZmZXItPmJpc3RhdGUgPT0gTlVMTCk7Ci0K IAkJLyogRW5zdXJlIHRoYXQgdGhlIEZEVyBzdXBwb3J0cyBiYXRjaGluZyBhbmQgaXQncyBlbmFi bGVkICovCiAJCUFzc2VydChyZXN1bHRSZWxJbmZvLT5yaV9GZHdSb3V0aW5lLT5FeGVjRm9yZWln bkJhdGNoSW5zZXJ0KTsKIAkJQXNzZXJ0KGJhdGNoX3NpemUgPiAxKTsKQEAgLTM5MywxMyArNDgy LDggQEAgQ29weU11bHRpSW5zZXJ0QnVmZmVyRmx1c2goQ29weU11bHRpSW5zZXJ0SW5mbyAqbWlp bmZvLAogCX0KIAllbHNlCiAJewotCQlDb21tYW5kSWQJbXljaWQgPSBtaWluZm8tPm15Y2lkOwot CQlpbnQJCQl0aV9vcHRpb25zID0gbWlpbmZvLT50aV9vcHRpb25zOwogCQlib29sCQlsaW5lX2J1 Zl92YWxpZCA9IGNzdGF0ZS0+bGluZV9idWZfdmFsaWQ7CiAJCXVpbnQ2NAkJc2F2ZV9jdXJfbGlu ZW5vID0gY3N0YXRlLT5jdXJfbGluZW5vOwotCQlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7Ci0K LQkJQXNzZXJ0KGJ1ZmZlci0+YmlzdGF0ZSAhPSBOVUxMKTsKIAogCQkvKgogCQkgKiBQcmludCBl cnJvciBjb250ZXh0IGluZm9ybWF0aW9uIGNvcnJlY3RseSwgaWYgb25lIG9mIHRoZSBvcGVyYXRp b25zCkBAIC00MDcsNTYgKzQ5MSwxOCBAQCBDb3B5TXVsdGlJbnNlcnRCdWZmZXJGbHVzaChDb3B5 TXVsdGlJbnNlcnRJbmZvICptaWluZm8sCiAJCSAqLwogCQljc3RhdGUtPmxpbmVfYnVmX3ZhbGlk ID0gZmFsc2U7CiAKLQkJLyoKLQkJICogdGFibGVfbXVsdGlfaW5zZXJ0IG1heSBsZWFrIG1lbW9y eSwgc28gc3dpdGNoIHRvIHNob3J0LWxpdmVkIG1lbW9yeQotCQkgKiBjb250ZXh0IGJlZm9yZSBj YWxsaW5nIGl0LgotCQkgKi8KLQkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhH ZXRQZXJUdXBsZU1lbW9yeUNvbnRleHQoZXN0YXRlKSk7Ci0JCXRhYmxlX211bHRpX2luc2VydChy ZXN1bHRSZWxJbmZvLT5yaV9SZWxhdGlvbkRlc2MsCi0JCQkJCQkgICBzbG90cywKLQkJCQkJCSAg IG51c2VkLAotCQkJCQkJICAgbXljaWQsCi0JCQkJCQkgICB0aV9vcHRpb25zLAotCQkJCQkJICAg YnVmZmVyLT5iaXN0YXRlKTsKLQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOwor CQlBc3NlcnQoYnVmZmVyLT5jdXJyc2xvdG5vIDw9IGJ1ZmZlci0+bnVzZWQpOworCQlidWZmZXIt PmN1cnJzbG90bm8gPSAwOwogCi0JCWZvciAoaSA9IDA7IGkgPCBudXNlZDsgaSsrKQotCQl7Ci0J CQkvKgotCQkJICogSWYgdGhlcmUgYXJlIGFueSBpbmRleGVzLCB1cGRhdGUgdGhlbSBmb3IgYWxs IHRoZSBpbnNlcnRlZAotCQkJICogdHVwbGVzLCBhbmQgcnVuIEFGVEVSIFJPVyBJTlNFUlQgdHJp Z2dlcnMuCi0JCQkgKi8KLQkJCWlmIChyZXN1bHRSZWxJbmZvLT5yaV9OdW1JbmRpY2VzID4gMCkK LQkJCXsKLQkJCQlMaXN0CSAgICpyZWNoZWNrSW5kZXhlczsKLQotCQkJCWNzdGF0ZS0+Y3VyX2xp bmVubyA9IGJ1ZmZlci0+bGluZW5vc1tpXTsKLQkJCQlyZWNoZWNrSW5kZXhlcyA9Ci0JCQkJCUV4 ZWNJbnNlcnRJbmRleFR1cGxlcyhyZXN1bHRSZWxJbmZvLAotCQkJCQkJCQkJCSAgYnVmZmVyLT5z bG90c1tpXSwgZXN0YXRlLCBmYWxzZSwKLQkJCQkJCQkJCQkgIGZhbHNlLCBOVUxMLCBOSUwsIGZh bHNlKTsKLQkJCQlFeGVjQVJJbnNlcnRUcmlnZ2Vycyhlc3RhdGUsIHJlc3VsdFJlbEluZm8sCi0J CQkJCQkJCQkgc2xvdHNbaV0sIHJlY2hlY2tJbmRleGVzLAotCQkJCQkJCQkJIGNzdGF0ZS0+dHJh bnNpdGlvbl9jYXB0dXJlKTsKLQkJCQlsaXN0X2ZyZWUocmVjaGVja0luZGV4ZXMpOwotCQkJfQor CQl0YWJsZV9tb2RpZnlfYnVmZmVyX2ZsdXNoKGJ1ZmZlci0+bXN0YXRlKTsKIAotCQkJLyoKLQkJ CSAqIFRoZXJlJ3Mgbm8gaW5kZXhlcywgYnV0IHNlZSBpZiB3ZSBuZWVkIHRvIHJ1biBBRlRFUiBS T1cgSU5TRVJUCi0JCQkgKiB0cmlnZ2VycyBhbnl3YXkuCi0JCQkgKi8KLQkJCWVsc2UgaWYgKHJl c3VsdFJlbEluZm8tPnJpX1RyaWdEZXNjICE9IE5VTEwgJiYKLQkJCQkJIChyZXN1bHRSZWxJbmZv LT5yaV9UcmlnRGVzYy0+dHJpZ19pbnNlcnRfYWZ0ZXJfcm93IHx8Ci0JCQkJCSAgcmVzdWx0UmVs SW5mby0+cmlfVHJpZ0Rlc2MtPnRyaWdfaW5zZXJ0X25ld190YWJsZSkpCi0JCQl7Ci0JCQkJY3N0 YXRlLT5jdXJfbGluZW5vID0gYnVmZmVyLT5saW5lbm9zW2ldOwotCQkJCUV4ZWNBUkluc2VydFRy aWdnZXJzKGVzdGF0ZSwgcmVzdWx0UmVsSW5mbywKLQkJCQkJCQkJCSBzbG90c1tpXSwgTklMLAot CQkJCQkJCQkJIGNzdGF0ZS0+dHJhbnNpdGlvbl9jYXB0dXJlKTsKLQkJCX0KKwkJQXNzZXJ0KGJ1 ZmZlci0+Y3VycnNsb3RubyA8PSBidWZmZXItPm51c2VkKTsKKwkJYnVmZmVyLT5jdXJyc2xvdG5v ID0gMDsKIAotCQkJRXhlY0NsZWFyVHVwbGUoc2xvdHNbaV0pOwotCQl9CisJCS8qCisJCSAqIElu ZGV4ZXMgYXJlIHVwZGF0ZWQgYW5kIEFGVEVSIFJPVyBJTlNFUlQgdHJpZ2dlcnMgKGlmIGFueSkg YXJlIHJ1bgorCQkgKiBpbiB0aGUgZmx1c2ggY2FsbGJhY2sgQ29weU1vZGlmeUJ1ZmZlckZsdXNo Q2FsbGJhY2suCisJCSAqLwogCiAJCS8qIFVwZGF0ZSB0aGUgcm93IGNvdW50ZXIgYW5kIHByb2dy ZXNzIG9mIHRoZSBDT1BZIGNvbW1hbmQgKi8KIAkJKnByb2Nlc3NlZCArPSBudXNlZDsKQEAgLTQ5 MiwxOSArNTM4LDE4IEBAIENvcHlNdWx0aUluc2VydEJ1ZmZlckNsZWFudXAoQ29weU11bHRpSW5z ZXJ0SW5mbyAqbWlpbmZvLAogCiAJaWYgKHJlc3VsdFJlbEluZm8tPnJpX0Zkd1JvdXRpbmUgPT0g TlVMTCkKIAl7Ci0JCUFzc2VydChidWZmZXItPmJpc3RhdGUgIT0gTlVMTCk7Ci0JCUZyZWVCdWxr SW5zZXJ0U3RhdGUoYnVmZmVyLT5iaXN0YXRlKTsKKwkJdGFibGVfbW9kaWZ5X2VuZChidWZmZXIt Pm1zdGF0ZSk7CisJCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3QoYnVmZmVyLT5taXNsb3Qp OworCQlwZnJlZShidWZmZXItPm1pYnVmZmVyY3R4KTsKIAl9CiAJZWxzZQotCQlBc3NlcnQoYnVm ZmVyLT5iaXN0YXRlID09IE5VTEwpOwotCi0JLyogU2luY2Ugd2Ugb25seSBjcmVhdGUgc2xvdHMg b24gZGVtYW5kLCBqdXN0IGRyb3AgdGhlIG5vbi1udWxsIG9uZXMuICovCi0JZm9yIChpID0gMDsg aSA8IE1BWF9CVUZGRVJFRF9UVVBMRVMgJiYgYnVmZmVyLT5zbG90c1tpXSAhPSBOVUxMOyBpKysp Ci0JCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3QoYnVmZmVyLT5zbG90c1tpXSk7CisJewor CQkvKiBTaW5jZSB3ZSBvbmx5IGNyZWF0ZSBzbG90cyBvbiBkZW1hbmQsIGp1c3QgZHJvcCB0aGUg bm9uLW51bGwgb25lcy4gKi8KKwkJZm9yIChpID0gMDsgaSA8IE1BWF9CVUZGRVJFRF9UVVBMRVMg JiYgYnVmZmVyLT5zbG90c1tpXSAhPSBOVUxMOyBpKyspCisJCQlFeGVjRHJvcFNpbmdsZVR1cGxl VGFibGVTbG90KGJ1ZmZlci0+c2xvdHNbaV0pOwogCi0JaWYgKHJlc3VsdFJlbEluZm8tPnJpX0Zk d1JvdXRpbmUgPT0gTlVMTCkKLQkJdGFibGVfZmluaXNoX2J1bGtfaW5zZXJ0KHJlc3VsdFJlbElu Zm8tPnJpX1JlbGF0aW9uRGVzYywKLQkJCQkJCQkJIG1paW5mby0+dGlfb3B0aW9ucyk7CisJCXBm cmVlKGJ1ZmZlci0+c2xvdHMpOworCX0KIAogCXBmcmVlKGJ1ZmZlcik7CiB9CkBAIC01OTgsMTUg KzY0MywzNiBAQCBDb3B5TXVsdGlJbnNlcnRJbmZvTmV4dEZyZWVTbG90KENvcHlNdWx0aUluc2Vy dEluZm8gKm1paW5mbywKIHsKIAlDb3B5TXVsdGlJbnNlcnRCdWZmZXIgKmJ1ZmZlciA9IHJyaS0+ cmlfQ29weU11bHRpSW5zZXJ0QnVmZmVyOwogCWludAkJCW51c2VkOworCVR1cGxlVGFibGVTbG90 ICpzbG90OwogCiAJQXNzZXJ0KGJ1ZmZlciAhPSBOVUxMKTsKIAlBc3NlcnQoYnVmZmVyLT5udXNl ZCA8IE1BWF9CVUZGRVJFRF9UVVBMRVMpOwogCiAJbnVzZWQgPSBidWZmZXItPm51c2VkOwogCi0J aWYgKGJ1ZmZlci0+c2xvdHNbbnVzZWRdID09IE5VTEwpCi0JCWJ1ZmZlci0+c2xvdHNbbnVzZWRd ID0gdGFibGVfc2xvdF9jcmVhdGUocnJpLT5yaV9SZWxhdGlvbkRlc2MsIE5VTEwpOwotCXJldHVy biBidWZmZXItPnNsb3RzW251c2VkXTsKKwlpZiAocnJpLT5yaV9GZHdSb3V0aW5lID09IE5VTEwp CisJeworCQlpZiAoYnVmZmVyLT5taXNsb3QgPT0gTlVMTCkKKwkJeworCQkJYnVmZmVyLT5taXNs b3QgPSBNYWtlVHVwbGVUYWJsZVNsb3QoUmVsYXRpb25HZXREZXNjcihycmktPnJpX1JlbGF0aW9u RGVzYyksCisJCQkJCQkJCQkJCQkmVFRTT3BzVmlydHVhbCk7CisJCX0KKworCQkvKiBDYWxsZXIg bXVzdCBjbGVhciB0aGUgc2xvdCAqLworCQlzbG90ID0gYnVmZmVyLT5taXNsb3Q7CisJfQorCWVs c2UKKwl7CisJCWlmIChidWZmZXItPnNsb3RzW251c2VkXSA9PSBOVUxMKQorCQl7CisJCQlzbG90 ID0gdGFibGVfc2xvdF9jcmVhdGUocnJpLT5yaV9SZWxhdGlvbkRlc2MsIE5VTEwpOworCQkJYnVm ZmVyLT5zbG90c1tudXNlZF0gPSBzbG90OworCQl9CisJCWVsc2UKKwkJCXNsb3QgPSBidWZmZXIt PnNsb3RzW251c2VkXTsKKwl9CisKKwlyZXR1cm4gc2xvdDsKIH0KIAogLyoKQEAgLTYyMCw3ICs2 ODYsMTEgQEAgQ29weU11bHRpSW5zZXJ0SW5mb1N0b3JlKENvcHlNdWx0aUluc2VydEluZm8gKm1p aW5mbywgUmVzdWx0UmVsSW5mbyAqcnJpLAogCUNvcHlNdWx0aUluc2VydEJ1ZmZlciAqYnVmZmVy ID0gcnJpLT5yaV9Db3B5TXVsdGlJbnNlcnRCdWZmZXI7CiAKIAlBc3NlcnQoYnVmZmVyICE9IE5V TEwpOwotCUFzc2VydChzbG90ID09IGJ1ZmZlci0+c2xvdHNbYnVmZmVyLT5udXNlZF0pOworCisj aWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCWlmIChycmktPnJpX0Zkd1JvdXRpbmUgIT0gTlVM TCkKKwkJQXNzZXJ0KHNsb3QgPT0gYnVmZmVyLT5zbG90c1tidWZmZXItPm51c2VkXSk7CisjZW5k aWYKIAogCS8qIFN0b3JlIHRoZSBsaW5lIG51bWJlciBzbyB3ZSBjYW4gcHJvcGVybHkgcmVwb3J0 IGFueSBlcnJvcnMgbGF0ZXIgKi8KIAlidWZmZXItPmxpbmVub3NbYnVmZmVyLT5udXNlZF0gPSBs aW5lbm87CkBAIC02MjgsNiArNjk4LDIyIEBAIENvcHlNdWx0aUluc2VydEluZm9TdG9yZShDb3B5 TXVsdGlJbnNlcnRJbmZvICptaWluZm8sIFJlc3VsdFJlbEluZm8gKnJyaSwKIAkvKiBSZWNvcmQg dGhpcyBzbG90IGFzIGJlaW5nIHVzZWQgKi8KIAlidWZmZXItPm51c2VkKys7CiAKKwlpZiAocnJp LT5yaV9GZHdSb3V0aW5lID09IE5VTEwpCisJeworCQlBc3NlcnQoc2xvdCA9PSBidWZmZXItPm1p c2xvdCk7CisJCWJ1ZmZlci0+Y3VycnNsb3RubyA9IDA7CisKKwkJdGFibGVfbW9kaWZ5X2J1ZmZl cl9pbnNlcnQoYnVmZmVyLT5tc3RhdGUsIHNsb3QpOworCX0KKwllbHNlCisJeworCQkvKgorCQkg KiBUaGUgc2xvdCBwcmV2aW91c2x5IG1pZ2h0IHBvaW50IGludG8gdGhlIHBlci10dXBsZSBjb250 ZXh0LiBGb3IKKwkJICogYmF0Y2hpbmcgaXQgbmVlZHMgdG8gYmUgbG9uZ2VyIGxpdmVkLgorCQkg Ki8KKwkJRXhlY01hdGVyaWFsaXplU2xvdChzbG90KTsKKwl9CisKIAkvKiBVcGRhdGUgaG93IG1h bnkgdHVwbGVzIGFyZSBzdG9yZWQgYW5kIHRoZWlyIHNpemUgKi8KIAltaWluZm8tPmJ1ZmZlcmVk VHVwbGVzKys7CiAJbWlpbmZvLT5idWZmZXJlZEJ5dGVzICs9IHR1cGxlbjsKQEAgLTg0MSw3ICs5 MjcsNyBAQCBDb3B5RnJvbShDb3B5RnJvbVN0YXRlIGNzdGF0ZSkKIAkvKgogCSAqIEl0J3MgZ2Vu ZXJhbGx5IG1vcmUgZWZmaWNpZW50IHRvIHByZXBhcmUgYSBidW5jaCBvZiB0dXBsZXMgZm9yCiAJ ICogaW5zZXJ0aW9uLCBhbmQgaW5zZXJ0IHRoZW0gaW4gb25lCi0JICogdGFibGVfbXVsdGlfaW5z ZXJ0KCkvRXhlY0ZvcmVpZ25CYXRjaEluc2VydCgpIGNhbGwsIHRoYW4gY2FsbAorCSAqIHRhYmxl X21vZGlmeV9idWZmZXJfaW5zZXJ0KCkvRXhlY0ZvcmVpZ25CYXRjaEluc2VydCgpIGNhbGwsIHRo YW4gY2FsbAogCSAqIHRhYmxlX3R1cGxlX2luc2VydCgpL0V4ZWNGb3JlaWduSW5zZXJ0KCkgc2Vw YXJhdGVseSBmb3IgZXZlcnkgdHVwbGUuCiAJICogSG93ZXZlciwgdGhlcmUgYXJlIGEgbnVtYmVy IG9mIHJlYXNvbnMgd2h5IHdlIG1pZ2h0IG5vdCBiZSBhYmxlIHRvIGRvCiAJICogdGhpcy4gIFRo ZXNlIGFyZSBleHBsYWluZWQgYmVsb3cuCkBAIC05MjUsNyArMTAxMSw4IEBAIENvcHlGcm9tKENv cHlGcm9tU3RhdGUgY3N0YXRlKQogCQkJaW5zZXJ0TWV0aG9kID0gQ0lNX01VTFRJOwogCiAJCUNv cHlNdWx0aUluc2VydEluZm9Jbml0KCZtdWx0aUluc2VydEluZm8sIHJlc3VsdFJlbEluZm8sIGNz dGF0ZSwKLQkJCQkJCQkJZXN0YXRlLCBteWNpZCwgdGlfb3B0aW9ucyk7CisJCQkJCQkJCWVzdGF0 ZSwgbXljaWQsCisJCQkJCQkJCXRpX29wdGlvbnMgfCBUQUJMRV9JTlNFUlRfQkFTX0JVTEtXUklU RSk7CiAJfQogCiAJLyoKQEAgLTEwOTQsNyArMTE4MSw4IEBAIENvcHlGcm9tKENvcHlGcm9tU3Rh dGUgY3N0YXRlKQogCQkJCXsKIAkJCQkJaWYgKHJlc3VsdFJlbEluZm8tPnJpX0NvcHlNdWx0aUlu c2VydEJ1ZmZlciA9PSBOVUxMKQogCQkJCQkJQ29weU11bHRpSW5zZXJ0SW5mb1NldHVwQnVmZmVy KCZtdWx0aUluc2VydEluZm8sCi0JCQkJCQkJCQkJCQkJICAgcmVzdWx0UmVsSW5mbyk7CisJCQkJ CQkJCQkJCQkJICAgcmVzdWx0UmVsSW5mbywgY3N0YXRlLAorCQkJCQkJCQkJCQkJCSAgIGVzdGF0 ZSk7CiAJCQkJfQogCQkJCWVsc2UgaWYgKGluc2VydE1ldGhvZCA9PSBDSU1fTVVMVElfQ09ORElU SU9OQUwgJiYKIAkJCQkJCSAhQ29weU11bHRpSW5zZXJ0SW5mb0lzRW1wdHkoJm11bHRpSW5zZXJ0 SW5mbykpCkBAIC0xMjI0LDEyICsxMzEyLDYgQEAgQ29weUZyb20oQ29weUZyb21TdGF0ZSBjc3Rh dGUpCiAJCQkJLyogU3RvcmUgdGhlIHNsb3QgaW4gdGhlIG11bHRpLWluc2VydCBidWZmZXIsIHdo ZW4gZW5hYmxlZC4gKi8KIAkJCQlpZiAoaW5zZXJ0TWV0aG9kID09IENJTV9NVUxUSSB8fCBsZWFm cGFydF91c2VfbXVsdGlfaW5zZXJ0KQogCQkJCXsKLQkJCQkJLyoKLQkJCQkJICogVGhlIHNsb3Qg cHJldmlvdXNseSBtaWdodCBwb2ludCBpbnRvIHRoZSBwZXItdHVwbGUKLQkJCQkJICogY29udGV4 dC4gRm9yIGJhdGNoaW5nIGl0IG5lZWRzIHRvIGJlIGxvbmdlciBsaXZlZC4KLQkJCQkJICovCi0J CQkJCUV4ZWNNYXRlcmlhbGl6ZVNsb3QobXlzbG90KTsKLQogCQkJCQkvKiBBZGQgdGhpcyB0dXBs ZSB0byB0aGUgdHVwbGUgYnVmZmVyICovCiAJCQkJCUNvcHlNdWx0aUluc2VydEluZm9TdG9yZSgm bXVsdGlJbnNlcnRJbmZvLAogCQkJCQkJCQkJCQkgcmVzdWx0UmVsSW5mbywgbXlzbG90LApkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvY29weWZyb21faW50ZXJuYWwuaCBiL3NyYy9p bmNsdWRlL2NvbW1hbmRzL2NvcHlmcm9tX2ludGVybmFsLmgKaW5kZXggY2FkNTJmY2M3OC4uMTRh ZGRiYzZmNiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvY29weWZyb21faW50ZXJu YWwuaAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9jb3B5ZnJvbV9pbnRlcm5hbC5oCkBAIC00 Niw5ICs0Niw5IEBAIHR5cGVkZWYgZW51bSBFb2xUeXBlCiB0eXBlZGVmIGVudW0gQ29weUluc2Vy dE1ldGhvZAogewogCUNJTV9TSU5HTEUsCQkJCQkvKiB1c2UgdGFibGVfdHVwbGVfaW5zZXJ0IG9y IEV4ZWNGb3JlaWduSW5zZXJ0ICovCi0JQ0lNX01VTFRJLAkJCQkJLyogYWx3YXlzIHVzZSB0YWJs ZV9tdWx0aV9pbnNlcnQgb3IKKwlDSU1fTVVMVEksCQkJCQkvKiBhbHdheXMgdXNlIHRhYmxlX21v ZGlmeV9idWZmZXJfaW5zZXJ0IG9yCiAJCQkJCQkJCSAqIEV4ZWNGb3JlaWduQmF0Y2hJbnNlcnQg Ki8KLQlDSU1fTVVMVElfQ09ORElUSU9OQUwsCQkvKiB1c2UgdGFibGVfbXVsdGlfaW5zZXJ0IG9y CisJQ0lNX01VTFRJX0NPTkRJVElPTkFMLAkJLyogdXNlIHRhYmxlX21vZGlmeV9idWZmZXJfaW5z ZXJ0IG9yCiAJCQkJCQkJCSAqIEV4ZWNGb3JlaWduQmF0Y2hJbnNlcnQgb25seSBpZiB2YWxpZCAq LwogfSBDb3B5SW5zZXJ0TWV0aG9kOwogCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IGU3 ZGRmMjljMTYuLmJmMjFlNDNjZTEgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBl ZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0xNjY0 LDYgKzE2NjQsNyBAQCBNb25vdG9uaWNGdW5jdGlvbgogTW9ycGhPcGFxdWUKIE1zZ1R5cGUKIE11 bHRpQXNzaWduUmVmCitNdWx0aUluc2VydEJ1ZmZlckZsdXNoQ3R4CiBNdWx0aVNvcnRTdXBwb3J0 CiBNdWx0aVNvcnRTdXBwb3J0RGF0YQogTXVsdGlYYWN0SWQKLS0gCjIuNDAuMQoK --00000000000065d8ed0625b55ad2--