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 1rqxQB-00Esbt-EJ for pgsql-hackers@arkaria.postgresql.org; Sun, 31 Mar 2024 15:48:36 +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 1rqxQA-00Cn8d-CY for pgsql-hackers@arkaria.postgresql.org; Sun, 31 Mar 2024 15:48:34 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rqxQ9-00Cn8V-Qu for pgsql-hackers@lists.postgresql.org; Sun, 31 Mar 2024 15:48:34 +0000 Received: from mail-lj1-x235.google.com ([2a00:1450:4864:20::235]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1rqxQ5-007SCF-Pf for pgsql-hackers@postgresql.org; Sun, 31 Mar 2024 15:48:32 +0000 Received: by mail-lj1-x235.google.com with SMTP id 38308e7fff4ca-2d717603aa5so27063331fa.0 for ; Sun, 31 Mar 2024 08:48:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1711900109; x=1712504909; darn=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=B/U9HQZ1HCrBPF0+aV+e7C+LksKKAhBwE1x6DVCFWQg=; b=PuQYXP1T9aArbOaArjbBRW0bkt/RPO14yiAMVFBHM1nPzOrpuvocyLFl1aBc/TSDyu u8hyFjwBArhSaHW4xn/ZLscC6JDrHn1h/FJ7KUTaOuFTaiq7poHhSoasyVVbPfFyhlnD DrMMfKpaL9ebaINJpq3pK9T8Ki6lsOpxBg33l1blN//SnkSaV9M3liCCQC2m/v3SDMh8 NPbj+0h7pU88VROVZoBLoKgqQQHtYSHecyOVVN8b0+B0Z53U0OcRwZeI0K/o/Zc1KvBG ymVLaLQcJFxeCqbDILwcXQQ8Q8WsfOU6jCc/c088Rlj0wiVEeHymc9zUyqkw+MQUplP3 XbUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711900109; x=1712504909; 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=B/U9HQZ1HCrBPF0+aV+e7C+LksKKAhBwE1x6DVCFWQg=; b=IncXVTfrgHkjSYYHYyZgBeNAkGfg5DXG2dO/eod2ltXaoOk2iGE2OFgIJnWYDutbAr 9irSMxs/iyKTEavqn+6nSlYs+Kis5m1CS4nss+5Xy7ugZ464kpBZoHXKZao/eBCV1e2a tocm511W0d9ZM6o1xZFW6gYzr9YGIzPTCiL5SWEKWOMZnOubddpn3xfFtjO3FNV3MACc RnE20OUj1EC/8Uoudq0up12ELDZ2pXIOhf/qbgOf+MHS14ZqCCxlgfBO92pbPNMjZDF4 J2cItmMuG122k7aw8cP5H+XxM9sTghw0PU6S8MMb7EMPXP7p1iIOvywecPuigR35I7+e Zccg== X-Forwarded-Encrypted: i=1; AJvYcCVo/C/6lJ2rfsVuCJ8Zm9kVYM9sguoeXmP3qP+NM2POmRu54f7Gt/eBe8MIhVMek1YpPhrDcjb4zy2Qf8mlVmBfbYl5dBsZdzSxeUBC X-Gm-Message-State: AOJu0Yzs38Dye3ekqZ1nJ16pfSICQao4+TJugBpu7A3s50yUODJB0/As 9uBOj0ih0QSaHiYrYgMTN+YjbrdKODJUAVUfwKRv/Y+CIll/5xXc6vEi0rCs/3zSt0vUyi9GDCf mBlSNsnpOeArI0uFIOh+jzkERY3w= X-Google-Smtp-Source: AGHT+IHNV70sq72C1WBlgUBU2GQT53J2hvSvZqiqSL2QmBZdHrW4DbFpNqNPWxdWca3fLgI+zyURuxeEcMGSyDQJwVM= X-Received: by 2002:a2e:a265:0:b0:2d4:3dbc:16ec with SMTP id k5-20020a2ea265000000b002d43dbc16ecmr4233990ljm.20.1711900109013; Sun, 31 Mar 2024 08:48:29 -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> In-Reply-To: <12f1a2d8dd3b6305c0354f1c701f44b7be5e54eb.camel@j-davis.com> From: Bharath Rupireddy Date: Sun, 31 Mar 2024 21:18:14 +0530 Message-ID: Subject: Re: New Table Access Methods for Multi and Single Inserts To: Jeff Davis Cc: Masahiko Sawada , PostgreSQL-development , Andres Freund , Dilip Kumar , Luc Vlaming , Justin Pryzby , Michael Paquier , Matthias van de Meent Content-Type: multipart/mixed; boundary="000000000000e3b8350614f6cd58" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000e3b8350614f6cd58 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Mar 27, 2024 at 1:42=E2=80=AFPM Jeff Davis wrot= e: > > On Wed, 2024-03-27 at 01:19 +0530, Bharath Rupireddy wrote: > > > > Similarly, with this new AM, the onus lies on the table AM > > implementers to provide an implementation for these new AMs even if > > they just do single inserts. > > Why not fall back to using the plain tuple_insert? Surely some table > AMs might be simple and limited, and we shouldn't break them just > because they don't implement the new APIs. Hm. That might complicate table_modify_begin, table_modify_buffer_insert and table_modify_end a bit. What do we put in TableModifyState then? Do we create the bulk insert state (BulkInsertStateData) outside? I think to give a better interface, can we let TAM implementers support these new APIs in their own way? If this sounds rather intrusive, we can just implement the fallback to tuple_insert if these new API are not supported in the caller, for example, do something like below in createas.c and matview.c. Thoughts? if (table_modify_buffer_insert() is defined) table_modify_buffer_insert(...); else { myState->bistate =3D GetBulkInsertState(); table_tuple_insert(...); } > > table_multi_insert needs to be there for sure as COPY ... FROM uses > > it. > > After we have these new APIs fully in place and used by COPY, what will > happen to those other APIs? Will they be deprecated or will there be a > reason to keep them? Deprecated perhaps? Please find the attached v16 patches for further review. -- Bharath Rupireddy PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com --000000000000e3b8350614f6cd58 Content-Type: application/x-patch; name="v16-0001-Introduce-new-table-modify-access-methods.patch" Content-Disposition: attachment; filename="v16-0001-Introduce-new-table-modify-access-methods.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lufopidf0 RnJvbSA4NTQxMGI0Mjk5MTdjZjM4OGM0YjU4ODgzZGRjMzA0MTE4YzczMTQzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFN1biwgMzEgTWFyIDIwMjQgMTU6MzQ6MTYgKzAw MDAKU3ViamVjdDogW1BBVENIIHYxNiAxLzJdIEludHJvZHVjZSBuZXcgdGFibGUgbW9kaWZ5IGFj Y2VzcyBtZXRob2RzCgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jICAgICAg ICAgfCAxODkgKysrKysrKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFw L2hlYXBhbV9oYW5kbGVyLmMgfCAgIDUgKwogc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxl YW1hcGkuYyAgICB8ICAgNCArCiBzcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggICAgICAgICAg ICAgIHwgIDQxICsrKysrCiBzcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oICAgICAgICAgICAg IHwgIDU4ICsrKysrKysKIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAg fCAgIDMgKwogNiBmaWxlcyBjaGFuZ2VkLCAyOTkgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigt KQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMKaW5kZXggYjY2MWQ5ODExZS4uNjlmOGM1OTdkOCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMKKysrIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMKQEAgLTY0LDYgKzY0LDcgQEAKICNpbmNsdWRlICJz dG9yYWdlL3N0YW5kYnkuaCIKICNpbmNsdWRlICJ1dGlscy9kYXR1bS5oIgogI2luY2x1ZGUgInV0 aWxzL2ludmFsLmgiCisjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRlICJ1dGls cy9yZWxjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3NuYXBtZ3IuaCIKICNpbmNsdWRlICJ1dGls cy9zcGNjYWNoZS5oIgpAQCAtMTA3LDcgKzEwOCw4IEBAIHN0YXRpYyBpbnQJYm90dG9tdXBfc29y dF9hbmRfc2hyaW5rKFRNX0luZGV4RGVsZXRlT3AgKmRlbHN0YXRlKTsKIHN0YXRpYyBYTG9nUmVj UHRyIGxvZ19oZWFwX25ld19jaWQoUmVsYXRpb24gcmVsYXRpb24sIEhlYXBUdXBsZSB0dXApOwog c3RhdGljIEhlYXBUdXBsZSBFeHRyYWN0UmVwbGljYUlkZW50aXR5KFJlbGF0aW9uIHJlbGF0aW9u LCBIZWFwVHVwbGUgdHAsIGJvb2wga2V5X3JlcXVpcmVkLAogCQkJCQkJCQkJCWJvb2wgKmNvcHkp OwotCitzdGF0aWMgdm9pZCBoZWFwX21vZGlmeV9idWZmZXJfZmx1c2goVGFibGVNb2RpZnlTdGF0 ZSAqc3RhdGUpOworc3RhdGljIHZvaWQgaGVhcF9tb2RpZnlfaW5zZXJ0X2VuZChUYWJsZU1vZGlm eVN0YXRlICpzdGF0ZSk7CiAKIC8qCiAgKiBFYWNoIHR1cGxlIGxvY2sgbW9kZSBoYXMgYSBjb3Jy ZXNwb25kaW5nIGhlYXZ5d2VpZ2h0IGxvY2ssIGFuZCBvbmUgb3IgdHdvCkBAIC0yNDQxLDYgKzI0 NDMsMTkxIEBAIGhlYXBfbXVsdGlfaW5zZXJ0KFJlbGF0aW9uIHJlbGF0aW9uLCBUdXBsZVRhYmxl U2xvdCAqKnNsb3RzLCBpbnQgbnR1cGxlcywKIAkqaW5zZXJ0X2luZGV4ZXMgPSB0cnVlOwogfQog CisvKgorICogSW5pdGlhbGl6ZSBoZWFwIG1vZGlmeSBzdGF0ZS4KKyAqLworVGFibGVNb2RpZnlT dGF0ZSAqCitoZWFwX21vZGlmeV9iZWdpbihSZWxhdGlvbiByZWwsIGludCBtb2RpZnlfZmxhZ3Ms IENvbW1hbmRJZCBjaWQsCisJCQkJICBpbnQgb3B0aW9ucykKK3sKKwlUYWJsZU1vZGlmeVN0YXRl ICpzdGF0ZTsKKwlNZW1vcnlDb250ZXh0IGNvbnRleHQ7CisJTWVtb3J5Q29udGV4dCBvbGRjb250 ZXh0OworCisJY29udGV4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29u dGV4dCwKKwkJCQkJCQkJCSJoZWFwX21vZGlmeSBtZW1vcnkgY29udGV4dCIsCisJCQkJCQkJCQlB TExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsKKworCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dp dGNoVG8oY29udGV4dCk7CisJc3RhdGUgPSBwYWxsb2MwKHNpemVvZihUYWJsZU1vZGlmeVN0YXRl KSk7CisJc3RhdGUtPnJlbCA9IHJlbDsKKwlzdGF0ZS0+bW9kaWZ5X2ZsYWdzID0gbW9kaWZ5X2Zs YWdzOworCXN0YXRlLT5tY3R4ID0gY29udGV4dDsKKwlzdGF0ZS0+Y2lkID0gY2lkOworCXN0YXRl LT5vcHRpb25zID0gb3B0aW9uczsKKwlzdGF0ZS0+aW5zZXJ0X2luZGV4ZXMgPSBmYWxzZTsKKwlz dGF0ZS0+bW9kaWZ5X2VuZF9jYiA9IE5VTEw7CS8qIFRvIGJlIGluc3RhbGxlZCBsYXppbHkgKi8K KwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisKKwlyZXR1cm4gc3RhdGU7Cit9 CisKKy8qCisgKiBTdG9yZSBwYXNzZWQtaW4gdHVwbGUgaW50byBpbi1tZW1vcnkgYnVmZmVyZWQg c2xvdHMuIFdoZW4gZnVsbCwgaW5zZXJ0CisgKiBtdWx0aXBsZSB0dXBsZXMgZnJvbSB0aGUgYnVm ZmVycyBpbnRvIGhlYXAuCisgKi8KK3ZvaWQKK2hlYXBfbW9kaWZ5X2J1ZmZlcl9pbnNlcnQoVGFi bGVNb2RpZnlTdGF0ZSAqc3RhdGUsCisJCQkJCQkgIFR1cGxlVGFibGVTbG90ICpzbG90KQorewor CVR1cGxlVGFibGVTbG90ICpkc3RzbG90OworCUhlYXBJbnNlcnRTdGF0ZSAqaXN0YXRlOworCUhl YXBNdWx0aUluc2VydFN0YXRlICptaXN0YXRlOworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsK KworCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oc3RhdGUtPm1jdHgpOworCisJ LyogRmlyc3QgdGltZSB0aHJvdWdoLCBpbml0aWFsaXplIGhlYXAgaW5zZXJ0IHN0YXRlICovCisJ aWYgKHN0YXRlLT5kYXRhID09IE5VTEwpCisJeworCQlpc3RhdGUgPSAoSGVhcEluc2VydFN0YXRl ICopIHBhbGxvYzAoc2l6ZW9mKEhlYXBJbnNlcnRTdGF0ZSkpOworCQlpc3RhdGUtPmJpc3RhdGUg PSBOVUxMOworCQlpc3RhdGUtPm1pc3RhdGUgPSBOVUxMOworCQlzdGF0ZS0+ZGF0YSA9IGlzdGF0 ZTsKKworCQlpZiAoKHN0YXRlLT5tb2RpZnlfZmxhZ3MgJiBUTV9GTEFHX01VTFRJX0lOU0VSVFMp ICE9IDApCisJCXsKKwkJCW1pc3RhdGUgPSAoSGVhcE11bHRpSW5zZXJ0U3RhdGUgKikgcGFsbG9j MChzaXplb2YoSGVhcE11bHRpSW5zZXJ0U3RhdGUpKTsKKwkJCW1pc3RhdGUtPnNsb3RzID0gKFR1 cGxlVGFibGVTbG90ICoqKSBwYWxsb2MwKHNpemVvZihUdXBsZVRhYmxlU2xvdCAqKSAqIEhFQVBf TUFYX0JVRkZFUkVEX1NMT1RTKTsKKwkJCWlzdGF0ZS0+bWlzdGF0ZSA9IG1pc3RhdGU7CisJCX0K KworCQlpZiAoKHN0YXRlLT5tb2RpZnlfZmxhZ3MgJiBUTV9GTEFHX0JBU19CVUxLV1JJVEUpICE9 IDApCisJCQlpc3RhdGUtPmJpc3RhdGUgPSBHZXRCdWxrSW5zZXJ0U3RhdGUoKTsKKworCQlzdGF0 ZS0+bW9kaWZ5X2VuZF9jYiA9IGhlYXBfbW9kaWZ5X2luc2VydF9lbmQ7CisJfQorCisJaXN0YXRl ID0gKEhlYXBJbnNlcnRTdGF0ZSAqKSBzdGF0ZS0+ZGF0YTsKKwlBc3NlcnQoaXN0YXRlLT5taXN0 YXRlICE9IE5VTEwpOworCW1pc3RhdGUgPSBpc3RhdGUtPm1pc3RhdGU7CisJQXNzZXJ0KGlzdGF0 ZS0+YmlzdGF0ZSAhPSBOVUxMKTsKKworCWRzdHNsb3QgPSBtaXN0YXRlLT5zbG90c1ttaXN0YXRl LT5jdXJfc2xvdHNdOworCWlmIChkc3RzbG90ID09IE5VTEwpCisJeworCQkvKgorCQkgKiBXZSB1 c2UgdmlydHVhbCB0dXBsZSBzbG90cyBidWZmZXJlZCBzbG90cyBmb3IgbGV2ZXJhZ2luZyB0aGUK KwkJICogb3B0aW1pemF0aW9uIGl0IHByb3ZpZGVzIHRvIG1pbmltaXplIHBoeXNpY2FsIGRhdGEg Y29weWluZy4gVGhlCisJCSAqIHZpcnR1YWwgc2xvdCBnZXRzIG1hdGVyaWFsaXplZCB3aGVuIHdl IGNvcHkgKHZpYSBiZWxvdworCQkgKiBFeGVjQ29weVNsb3QpIHRoZSB0dXBsZXMgZnJvbSB0aGUg c291cmNlIHNsb3Qgd2hpY2ggY2FuIGJlIG9mIGFueQorCQkgKiB0eXBlLiBUaGlzIHdheSwgaXQg aXMgZW5zdXJlZCB0aGF0IHRoZSB0dXBsZSBzdG9yYWdlIGRvZXNuJ3QgZGVwZW5kCisJCSAqIG9u IGV4dGVybmFsIG1lbW9yeSwgYmVjYXVzZSBhbGwgdGhlIGRhdHVtcyB0aGF0IGFyZW4ndCBwYXNz ZWQgYnkKKwkJICogdmFsdWUgYXJlIGNvcGllZCBpbnRvIHRoZSBzbG90J3MgbWVtb3J5IGNvbnRl eHQuCisJCSAqLworCQlkc3RzbG90ID0gTWFrZVR1cGxlVGFibGVTbG90KFJlbGF0aW9uR2V0RGVz Y3Ioc3RhdGUtPnJlbCksCisJCQkJCQkJCQkgJlRUU09wc1ZpcnR1YWwpOworCQltaXN0YXRlLT5z bG90c1ttaXN0YXRlLT5jdXJfc2xvdHNdID0gZHN0c2xvdDsKKwl9CisKKwlFeGVjQ2xlYXJUdXBs ZShkc3RzbG90KTsKKwlFeGVjQ29weVNsb3QoZHN0c2xvdCwgc2xvdCk7CisKKwltaXN0YXRlLT5j dXJfc2xvdHMrKzsKKworCS8qCisJICogTWVtb3J5IGFsbG9jYXRlZCBmb3IgdGhlIHdob2xlIHR1 cGxlIGlzIGluIHNsb3QncyBtZW1vcnkgY29udGV4dCwgc28KKwkgKiB1c2UgaXQga2VlcCB0cmFj ayBvZiB0aGUgdG90YWwgc3BhY2Ugb2NjdXBpZWQgYnkgYWxsIGJ1ZmZlcmVkIHR1cGxlcy4KKwkg Ki8KKwlpZiAoVFRTX1NIT1VMREZSRUUoZHN0c2xvdCkpCisJCW1pc3RhdGUtPmN1cl9zaXplICs9 IE1lbW9yeUNvbnRleHRNZW1BbGxvY2F0ZWQoZHN0c2xvdC0+dHRzX21jeHQsIGZhbHNlKTsKKwor CWlmIChtaXN0YXRlLT5jdXJfc2xvdHMgPj0gSEVBUF9NQVhfQlVGRkVSRURfU0xPVFMgfHwKKwkJ bWlzdGF0ZS0+Y3VyX3NpemUgPj0gSEVBUF9NQVhfQlVGRkVSRURfQllURVMpCisJCWhlYXBfbW9k aWZ5X2J1ZmZlcl9mbHVzaChzdGF0ZSk7CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29u dGV4dCk7Cit9CisKKy8qCisgKiBJbnNlcnQgbXVsdGlwbGUgdHVwbGVzIGZyb20gaW4tbWVtb3J5 IGJ1ZmZlcmVkIHNsb3RzIGludG8gaGVhcC4KKyAqLworc3RhdGljIHZvaWQKK2hlYXBfbW9kaWZ5 X2J1ZmZlcl9mbHVzaChUYWJsZU1vZGlmeVN0YXRlICpzdGF0ZSkKK3sKKwlIZWFwSW5zZXJ0U3Rh dGUgKmlzdGF0ZTsKKwlIZWFwTXVsdGlJbnNlcnRTdGF0ZSAqbWlzdGF0ZTsKKwlNZW1vcnlDb250 ZXh0IG9sZGNvbnRleHQ7CisKKwkvKiBRdWljayBleGl0IGlmIHdlIGhhdmVuJ3QgaW5zZXJ0ZWQg YW55dGhpbmcgeWV0ICovCisJaWYgKHN0YXRlLT5kYXRhID09IE5VTEwpCisJCXJldHVybjsKKwor CWlzdGF0ZSA9IChIZWFwSW5zZXJ0U3RhdGUgKikgc3RhdGUtPmRhdGE7CisJQXNzZXJ0KGlzdGF0 ZS0+bWlzdGF0ZSAhPSBOVUxMKTsKKwltaXN0YXRlID0gaXN0YXRlLT5taXN0YXRlOworCUFzc2Vy dChpc3RhdGUtPmJpc3RhdGUgIT0gTlVMTCk7CisKKwlpZiAobWlzdGF0ZS0+Y3VyX3Nsb3RzID09 IDApCisJCXJldHVybjsKKworCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oc3Rh dGUtPm1jdHgpOworCisJaGVhcF9tdWx0aV9pbnNlcnQoc3RhdGUtPnJlbCwgbWlzdGF0ZS0+c2xv dHMsIG1pc3RhdGUtPmN1cl9zbG90cywKKwkJCQkJICBzdGF0ZS0+Y2lkLCBzdGF0ZS0+b3B0aW9u cywgaXN0YXRlLT5iaXN0YXRlLAorCQkJCQkgICZzdGF0ZS0+aW5zZXJ0X2luZGV4ZXMpOworCisJ bWlzdGF0ZS0+Y3VyX3Nsb3RzID0gMDsKKwltaXN0YXRlLT5jdXJfc2l6ZSA9IDA7CisKKwlNZW1v cnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7Cit9CisKKy8qCisgKiBIZWFwIGluc2VydCBz cGVjaWZpYyBjYWxsYmFjayB1c2VkIGZvciBwZXJmb3JtaW5nIHdvcmsgYXQgdGhlIGVuZCBsaWtl CisgKiBmbHVzaGluZyBidWZmZXJlZCB0dXBsZXMgaWYgYW55LCBjbGVhbmluZyB1cCB0aGUgaW5z ZXJ0IHN0YXRlIGFuZCBidWZmZXJlZAorICogc2xvdHMuCisgKi8KK3N0YXRpYyB2b2lkCitoZWFw X21vZGlmeV9pbnNlcnRfZW5kKFRhYmxlTW9kaWZ5U3RhdGUgKnN0YXRlKQoreworCUhlYXBJbnNl cnRTdGF0ZSAqaXN0YXRlOworCisJLyogUXVpY2sgZXhpdCBpZiB3ZSBoYXZlbid0IGluc2VydGVk IGFueXRoaW5nIHlldCAqLworCWlmIChzdGF0ZS0+ZGF0YSA9PSBOVUxMKQorCQlyZXR1cm47CisK Kwlpc3RhdGUgPSAoSGVhcEluc2VydFN0YXRlICopIHN0YXRlLT5kYXRhOworCisJaWYgKGlzdGF0 ZS0+bWlzdGF0ZSAhPSBOVUxMKQorCXsKKwkJSGVhcE11bHRpSW5zZXJ0U3RhdGUgKm1pc3RhdGUg PSBpc3RhdGUtPm1pc3RhdGU7CisKKwkJaGVhcF9tb2RpZnlfYnVmZmVyX2ZsdXNoKHN0YXRlKTsK KworCQlBc3NlcnQobWlzdGF0ZS0+Y3VyX3Nsb3RzID09IDAgJiYKKwkJCSAgIG1pc3RhdGUtPmN1 cl9zaXplID09IDApOworCisJCWZvciAoaW50IGkgPSAwOyBpIDwgSEVBUF9NQVhfQlVGRkVSRURf U0xPVFMgJiYgbWlzdGF0ZS0+c2xvdHNbaV0gIT0gTlVMTDsgaSsrKQorCQkJRXhlY0Ryb3BTaW5n bGVUdXBsZVRhYmxlU2xvdChtaXN0YXRlLT5zbG90c1tpXSk7CisJfQorCisJaWYgKGlzdGF0ZS0+ YmlzdGF0ZSAhPSBOVUxMKQorCQlGcmVlQnVsa0luc2VydFN0YXRlKGlzdGF0ZS0+YmlzdGF0ZSk7 Cit9CisKKy8qCisgKiBDbGVhbiBoZWFwIG1vZGlmeSBzdGF0ZS4KKyAqLwordm9pZAoraGVhcF9t b2RpZnlfZW5kKFRhYmxlTW9kaWZ5U3RhdGUgKnN0YXRlKQoreworCWlmIChzdGF0ZS0+bW9kaWZ5 X2VuZF9jYiAhPSBOVUxMKQorCQlzdGF0ZS0+bW9kaWZ5X2VuZF9jYihzdGF0ZSk7CisKKwlNZW1v cnlDb250ZXh0RGVsZXRlKHN0YXRlLT5tY3R4KTsKK30KKwogLyoKICAqCXNpbXBsZV9oZWFwX2lu c2VydCAtIGluc2VydCBhIHR1cGxlCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNz L2hlYXAvaGVhcGFtX2hhbmRsZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9o YW5kbGVyLmMKaW5kZXggNDFhNGJiMDk4MS4uM2QzOGRhNjM1ZCAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYworKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCkBAIC0yNjQ5LDYgKzI2NDksMTEgQEAgc3RhdGljIGNv bnN0IFRhYmxlQW1Sb3V0aW5lIGhlYXBhbV9tZXRob2RzID0gewogCS50dXBsZV9pbnNlcnRfc3Bl Y3VsYXRpdmUgPSBoZWFwYW1fdHVwbGVfaW5zZXJ0X3NwZWN1bGF0aXZlLAogCS50dXBsZV9jb21w bGV0ZV9zcGVjdWxhdGl2ZSA9IGhlYXBhbV90dXBsZV9jb21wbGV0ZV9zcGVjdWxhdGl2ZSwKIAku bXVsdGlfaW5zZXJ0ID0gaGVhcF9tdWx0aV9pbnNlcnQsCisKKwkudHVwbGVfbW9kaWZ5X2JlZ2lu ID0gaGVhcF9tb2RpZnlfYmVnaW4sCisJLnR1cGxlX21vZGlmeV9idWZmZXJfaW5zZXJ0ID0gaGVh cF9tb2RpZnlfYnVmZmVyX2luc2VydCwKKwkudHVwbGVfbW9kaWZ5X2VuZCA9IGhlYXBfbW9kaWZ5 X2VuZCwKKwogCS50dXBsZV9kZWxldGUgPSBoZWFwYW1fdHVwbGVfZGVsZXRlLAogCS50dXBsZV91 cGRhdGUgPSBoZWFwYW1fdHVwbGVfdXBkYXRlLAogCS50dXBsZV9sb2NrID0gaGVhcGFtX3R1cGxl X2xvY2ssCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbWFwaS5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW1hcGkuYwppbmRleCBkOWUyM2VmMzE3 Li44MGQ5MjNiYmRjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVh bWFwaS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtYXBpLmMKQEAgLTY2 LDYgKzY2LDEwIEBAIEdldFRhYmxlQW1Sb3V0aW5lKE9pZCBhbWhhbmRsZXIpCiAKIAlBc3NlcnQo cm91dGluZS0+dHVwbGVfaW5zZXJ0ICE9IE5VTEwpOwogCisJQXNzZXJ0KHJvdXRpbmUtPnR1cGxl X21vZGlmeV9iZWdpbiAhPSBOVUxMKTsKKwlBc3NlcnQocm91dGluZS0+dHVwbGVfbW9kaWZ5X2J1 ZmZlcl9pbnNlcnQgIT0gTlVMTCk7CisJQXNzZXJ0KHJvdXRpbmUtPnR1cGxlX21vZGlmeV9lbmQg IT0gTlVMTCk7CisKIAkvKgogCSAqIENvdWxkIGJlIG1hZGUgb3B0aW9uYWwsIGJ1dCB3b3VsZCBy ZXF1aXJlIHRocm93aW5nIGVycm9yIGR1cmluZwogCSAqIHBhcnNlLWFuYWx5c2lzLgpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hl YXBhbS5oCmluZGV4IDMyYTNmYmNlOTYuLjRhZGZjMWZiMzUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL2FjY2Vzcy9oZWFwYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKQEAg LTIzMyw2ICsyMzMsMzYgQEAgaHRzdl9nZXRfdmFsaWRfc3RhdHVzKGludCBzdGF0dXMpCiAJcmV0 dXJuIChIVFNWX1Jlc3VsdCkgc3RhdHVzOwogfQogCisvKgorICogTWF4aW11bSBudW1iZXIgb2Yg c2xvdHMgdGhhdCBtdWx0aS1pbnNlcnQgYnVmZmVycyBjYW4gaG9sZC4KKyAqCisgKiBDYXV0aW9u OiBEb24ndCBtYWtlIHRoaXMgdG9vIGJpZywgYXMgd2UgY291bGQgZW5kIHVwIHdpdGggdGhpcyBt YW55IHR1cGxlcworICogc3RvcmVkIGluIG11bHRpIGluc2VydCBidWZmZXIuCisgKi8KKyNkZWZp bmUgSEVBUF9NQVhfQlVGRkVSRURfU0xPVFMJCTEwMDAKKworLyogTWF4aW11bSBzaXplIG9mIGFs bCB0dXBsZXMgdGhhdCBtdWx0aS1pbnNlcnQgYnVmZmVycyBjYW4gaG9sZCAqLworI2RlZmluZSBI RUFQX01BWF9CVUZGRVJFRF9CWVRFUwkJNjU1MzUKKwordHlwZWRlZiBzdHJ1Y3QgSGVhcE11bHRp SW5zZXJ0U3RhdGUKK3sKKwkvKiBBcnJheSBvZiBidWZmZXJlZCBzbG90cyAqLworCVR1cGxlVGFi bGVTbG90ICoqc2xvdHM7CisKKwkvKiBOdW1iZXIgb2YgYnVmZmVyZWQgc2xvdHMgY3VycmVudGx5 IGhlbGQgKi8KKwlpbnQJCQljdXJfc2xvdHM7CisKKwkvKiBBcHByb3hpbWF0ZSBzaXplIG9mIGFs bCB0dXBsZXMgY3VycmVudGx5IGhlbGQgaW4gYnVmZmVyZWQgc2xvdHMgKi8KKwlTaXplCQljdXJf c2l6ZTsKK30gSGVhcE11bHRpSW5zZXJ0U3RhdGU7CisKK3R5cGVkZWYgc3RydWN0IEhlYXBJbnNl cnRTdGF0ZQoreworCXN0cnVjdCBCdWxrSW5zZXJ0U3RhdGVEYXRhICpiaXN0YXRlOworCUhlYXBN dWx0aUluc2VydFN0YXRlICptaXN0YXRlOworfSBIZWFwSW5zZXJ0U3RhdGU7CisKKwogLyogLS0t LS0tLS0tLS0tLS0tLQogICoJCWZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIGhlYXAgYWNjZXNzIG1l dGhvZAogICoKQEAgLTI4Myw2ICszMTMsMTcgQEAgZXh0ZXJuIHZvaWQgaGVhcF9pbnNlcnQoUmVs YXRpb24gcmVsYXRpb24sIEhlYXBUdXBsZSB0dXAsIENvbW1hbmRJZCBjaWQsCiBleHRlcm4gdm9p ZCBoZWFwX211bHRpX2luc2VydChSZWxhdGlvbiByZWxhdGlvbiwgc3RydWN0IFR1cGxlVGFibGVT bG90ICoqc2xvdHMsCiAJCQkJCQkJICBpbnQgbnR1cGxlcywgQ29tbWFuZElkIGNpZCwgaW50IG9w dGlvbnMsCiAJCQkJCQkJICBCdWxrSW5zZXJ0U3RhdGUgYmlzdGF0ZSwgYm9vbCAqaW5zZXJ0X2lu ZGV4ZXMpOworCitleHRlcm4gVGFibGVNb2RpZnlTdGF0ZSAqaGVhcF9tb2RpZnlfYmVnaW4oUmVs YXRpb24gcmVsLAorCQkJCQkJCQkJCSAgIGludCBtb2RpZnlfZmxhZ3MsCisJCQkJCQkJCQkJICAg Q29tbWFuZElkIGNpZCwKKwkJCQkJCQkJCQkgICBpbnQgb3B0aW9ucyk7CisKK2V4dGVybiB2b2lk IGhlYXBfbW9kaWZ5X2J1ZmZlcl9pbnNlcnQoVGFibGVNb2RpZnlTdGF0ZSAqc3RhdGUsCisJCQkJ CQkJCQkgIFR1cGxlVGFibGVTbG90ICpzbG90KTsKKworZXh0ZXJuIHZvaWQgaGVhcF9tb2RpZnlf ZW5kKFRhYmxlTW9kaWZ5U3RhdGUgKnN0YXRlKTsKKwogZXh0ZXJuIFRNX1Jlc3VsdCBoZWFwX2Rl bGV0ZShSZWxhdGlvbiByZWxhdGlvbiwgSXRlbVBvaW50ZXIgdGlkLAogCQkJCQkJCSBDb21tYW5k SWQgY2lkLCBTbmFwc2hvdCBjcm9zc2NoZWNrLCBpbnQgb3B0aW9ucywKIAkJCQkJCQkgc3RydWN0 IFRNX0ZhaWx1cmVEYXRhICp0bWZkLCBib29sIGNoYW5naW5nUGFydCwKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5o CmluZGV4IGNmNzZmYzI5ZDQuLmRlNTBmNTEwNzggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2Fj Y2Vzcy90YWJsZWFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaApAQCAtMjQ4 LDYgKzI0OCwzNSBAQCB0eXBlZGVmIHN0cnVjdCBUTV9JbmRleERlbGV0ZU9wCiAJVE1fSW5kZXhT dGF0dXMgKnN0YXR1czsKIH0gVE1fSW5kZXhEZWxldGVPcDsKIAorLyogVGFibGUgbW9kaWZ5IGZs YWdzICovCisKKy8qIFVzZSBtdWx0aSBpbnNlcnRzLCBpLmUuIGJ1ZmZlciBtdWx0aXBsZSB0dXBs ZXMgYW5kIGluc2VydCB0aGVtIGF0IG9uY2UgKi8KKyNkZWZpbmUgVE1fRkxBR19NVUxUSV9JTlNF UlRTCTB4MDAwMDAxCisKKy8qIFVzZSBCQVNfQlVMS1dSSVRFIGJ1ZmZlciBhY2Nlc3Mgc3RyYXRl Z3kgKi8KKyNkZWZpbmUgVE1fRkxBR19CQVNfQlVMS1dSSVRFCTB4MDAwMDAyCisKK3N0cnVjdCBU YWJsZU1vZGlmeVN0YXRlOworCisvKiBUYWJsZSBBTSBzcGVjaWZpYyBjYWxsYmFjayB0aGF0IGdl dHMgY2FsbGVkIGluIHRhYmxlX21vZGlmeV9lbmQoKSAqLwordHlwZWRlZiB2b2lkICgqVGFibGVN b2RpZnlFbmRDUCkgKHN0cnVjdCBUYWJsZU1vZGlmeVN0YXRlICpzdGF0ZSk7CisKKy8qIEhvbGRz IHRhYmxlIG1vZGlmeSBzdGF0ZSAqLwordHlwZWRlZiBzdHJ1Y3QgVGFibGVNb2RpZnlTdGF0ZQor eworCVJlbGF0aW9uCXJlbDsKKwlpbnQJCQltb2RpZnlfZmxhZ3M7CisJTWVtb3J5Q29udGV4dCBt Y3R4OworCUNvbW1hbmRJZAljaWQ7CisJaW50CQkJb3B0aW9uczsKKwlib29sCQlpbnNlcnRfaW5k ZXhlczsKKworCS8qIFRhYmxlIEFNIHNwZWNpZmljIGRhdGEgc3RhcnRzIGhlcmUgKi8KKwl2b2lk CSAgICpkYXRhOworCisJVGFibGVNb2RpZnlFbmRDUCBtb2RpZnlfZW5kX2NiOworfSBUYWJsZU1v ZGlmeVN0YXRlOworCiAvKiAib3B0aW9ucyIgZmxhZyBiaXRzIGZvciB0YWJsZV90dXBsZV9pbnNl cnQgKi8KIC8qIFRBQkxFX0lOU0VSVF9TS0lQX1dBTCB3YXMgMHgwMDAxOyBSZWxhdGlvbk5lZWRz V0FMKCkgbm93IGdvdmVybnMgKi8KICNkZWZpbmUgVEFCTEVfSU5TRVJUX1NLSVBfRlNNCQkweDAw MDIKQEAgLTUzNCw2ICs1NjMsMTYgQEAgdHlwZWRlZiBzdHJ1Y3QgVGFibGVBbVJvdXRpbmUKIAkJ CQkJCQkJIENvbW1hbmRJZCBjaWQsIGludCBvcHRpb25zLCBzdHJ1Y3QgQnVsa0luc2VydFN0YXRl RGF0YSAqYmlzdGF0ZSwKIAkJCQkJCQkJIGJvb2wgKmluc2VydF9pbmRleGVzKTsKIAorCVRhYmxl TW9kaWZ5U3RhdGUgKigqdHVwbGVfbW9kaWZ5X2JlZ2luKSAoUmVsYXRpb24gcmVsLAorCQkJCQkJ CQkJCQkgaW50IG1vZGlmeV9mbGFncywKKwkJCQkJCQkJCQkJIENvbW1hbmRJZCBjaWQsCisJCQkJ CQkJCQkJCSBpbnQgb3B0aW9ucyk7CisKKwl2b2lkCQkoKnR1cGxlX21vZGlmeV9idWZmZXJfaW5z ZXJ0KSAoVGFibGVNb2RpZnlTdGF0ZSAqc3RhdGUsCisJCQkJCQkJCQkJCSAgIFR1cGxlVGFibGVT bG90ICpzbG90KTsKKworCXZvaWQJCSgqdHVwbGVfbW9kaWZ5X2VuZCkgKFRhYmxlTW9kaWZ5U3Rh dGUgKnN0YXRlKTsKKwogCS8qIHNlZSB0YWJsZV90dXBsZV9kZWxldGUoKSBmb3IgcmVmZXJlbmNl IGFib3V0IHBhcmFtZXRlcnMgKi8KIAlUTV9SZXN1bHQJKCp0dXBsZV9kZWxldGUpIChSZWxhdGlv biByZWwsCiAJCQkJCQkJCSBJdGVtUG9pbnRlciB0aWQsCkBAIC0xNDY0LDYgKzE1MDMsMjUgQEAg dGFibGVfbXVsdGlfaW5zZXJ0KFJlbGF0aW9uIHJlbCwgVHVwbGVUYWJsZVNsb3QgKipzbG90cywg aW50IG5zbG90cywKIAkJCQkJCQkJICBjaWQsIG9wdGlvbnMsIGJpc3RhdGUsIGluc2VydF9pbmRl eGVzKTsKIH0KIAorc3RhdGljIGlubGluZSBUYWJsZU1vZGlmeVN0YXRlICoKK3RhYmxlX21vZGlm eV9iZWdpbihSZWxhdGlvbiByZWwsIGludCBtb2RpZnlfZmxhZ3MsIENvbW1hbmRJZCBjaWQsIGlu dCBvcHRpb25zKQoreworCXJldHVybiByZWwtPnJkX3RhYmxlYW0tPnR1cGxlX21vZGlmeV9iZWdp bihyZWwsIG1vZGlmeV9mbGFncywKKwkJCQkJCQkJCQkJICAgY2lkLCBvcHRpb25zKTsKK30KKwor c3RhdGljIGlubGluZSB2b2lkCit0YWJsZV9tb2RpZnlfYnVmZmVyX2luc2VydChUYWJsZU1vZGlm eVN0YXRlICpzdGF0ZSwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCit7CisJc3RhdGUtPnJlbC0+cmRf dGFibGVhbS0+dHVwbGVfbW9kaWZ5X2J1ZmZlcl9pbnNlcnQoc3RhdGUsIHNsb3QpOworfQorCitz dGF0aWMgaW5saW5lIHZvaWQKK3RhYmxlX21vZGlmeV9lbmQoVGFibGVNb2RpZnlTdGF0ZSAqc3Rh dGUpCit7CisJc3RhdGUtPnJlbC0+cmRfdGFibGVhbS0+dHVwbGVfbW9kaWZ5X2VuZChzdGF0ZSk7 Cit9CisKIC8qCiAgKiBEZWxldGUgYSB0dXBsZSAoYW5kIG9wdGlvbmFsbHkgbG9jayB0aGUgbGFz dCB0dXBsZSB2ZXJzaW9uKS4KICAqCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IGE4ZDdi ZWQ0MTEuLmY3N2MzMjI3MDkgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVm cy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0xMTIyLDYg KzExMjIsOCBAQCBIZWFkbGluZUpzb25TdGF0ZQogSGVhZGxpbmVQYXJzZWRUZXh0CiBIZWFkbGlu ZVdvcmRFbnRyeQogSGVhcENoZWNrQ29udGV4dAorSGVhcEluc2VydFN0YXRlCitIZWFwTXVsdGlJ bnNlcnRTdGF0ZQogSGVhcFBhZ2VGcmVlemUKIEhlYXBTY2FuRGVzYwogSGVhcFR1cGxlCkBAIC0y ODA5LDYgKzI4MTEsNyBAQCBUYWJsZUZ1bmNTY2FuCiBUYWJsZUZ1bmNTY2FuU3RhdGUKIFRhYmxl SW5mbwogVGFibGVMaWtlQ2xhdXNlCitUYWJsZU1vZGlmeVN0YXRlCiBUYWJsZVNhbXBsZUNsYXVz ZQogVGFibGVTY2FuRGVzYwogVGFibGVTY2FuRGVzY0RhdGEKLS0gCjIuMzQuMQoK --000000000000e3b8350614f6cd58 Content-Type: application/x-patch; name="v16-0002-Optimize-CTAS-CMV-RMV-with-multi-inserts.patch" Content-Disposition: attachment; filename="v16-0002-Optimize-CTAS-CMV-RMV-with-multi-inserts.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lufopl6b1 RnJvbSAzMjA1MDM2NzgyNWQ1ZjhkYmIxMzMwY2M0ZjhlZjc4MThlYjU0NGVkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFN1biwgMzEgTWFyIDIwMjQgMTU6MzQ6NTcgKzAw MDAKU3ViamVjdDogW1BBVENIIHYxNiAyLzJdIE9wdGltaXplIENUQVMsIENNViwgUk1WIHdpdGgg bXVsdGkgaW5zZXJ0cwoKLS0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jIHwgMjcg KysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy9tYXR2aWV3 LmMgIHwgMjYgKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0KIDIgZmlsZXMgY2hhbmdlZCwgMTgg aW5zZXJ0aW9ucygrKSwgMzUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvY3JlYXRlYXMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMKaW5k ZXggYWZkM2RhY2UwNy4uMDBjMTI3MWY5MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvY3JlYXRlYXMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jCkBAIC01 Myw5ICs1Myw3IEBAIHR5cGVkZWYgc3RydWN0CiAJLyogVGhlc2UgZmllbGRzIGFyZSBmaWxsZWQg YnkgaW50b3JlbF9zdGFydHVwOiAqLwogCVJlbGF0aW9uCXJlbDsJCQkvKiByZWxhdGlvbiB0byB3 cml0ZSB0byAqLwogCU9iamVjdEFkZHJlc3MgcmVsYWRkcjsJCS8qIGFkZHJlc3Mgb2YgcmVsLCBm b3IgRXhlY0NyZWF0ZVRhYmxlQXMgKi8KLQlDb21tYW5kSWQJb3V0cHV0X2NpZDsJCS8qIGNtaW4g dG8gaW5zZXJ0IGluIG91dHB1dCB0dXBsZXMgKi8KLQlpbnQJCQl0aV9vcHRpb25zOwkJLyogdGFi bGVfdHVwbGVfaW5zZXJ0IHBlcmZvcm1hbmNlIG9wdGlvbnMgKi8KLQlCdWxrSW5zZXJ0U3RhdGUg YmlzdGF0ZTsJLyogYnVsayBpbnNlcnQgc3RhdGUgKi8KKwlUYWJsZU1vZGlmeVN0YXRlICptc3Rh dGU7CS8qIHRhYmxlIGluc2VydCBzdGF0ZSAqLwogfSBEUl9pbnRvcmVsOwogCiAvKiB1dGlsaXR5 IGZ1bmN0aW9ucyBmb3IgQ1RBUyBkZWZpbml0aW9uIGNyZWF0aW9uICovCkBAIC01NTIsMTcgKzU1 MCwxOSBAQCBpbnRvcmVsX3N0YXJ0dXAoRGVzdFJlY2VpdmVyICpzZWxmLCBpbnQgb3BlcmF0aW9u LCBUdXBsZURlc2MgdHlwZWluZm8pCiAJICovCiAJbXlTdGF0ZS0+cmVsID0gaW50b1JlbGF0aW9u RGVzYzsKIAlteVN0YXRlLT5yZWxhZGRyID0gaW50b1JlbGF0aW9uQWRkcjsKLQlteVN0YXRlLT5v dXRwdXRfY2lkID0gR2V0Q3VycmVudENvbW1hbmRJZCh0cnVlKTsKLQlteVN0YXRlLT50aV9vcHRp b25zID0gVEFCTEVfSU5TRVJUX1NLSVBfRlNNOwogCiAJLyoKIAkgKiBJZiBXSVRIIE5PIERBVEEg aXMgc3BlY2lmaWVkLCB0aGVyZSBpcyBubyBuZWVkIHRvIHNldCB1cCB0aGUgc3RhdGUgZm9yCiAJ ICogYnVsayBpbnNlcnRzIGFzIHRoZXJlIGFyZSBubyB0dXBsZXMgdG8gaW5zZXJ0LgogCSAqLwog CWlmICghaW50by0+c2tpcERhdGEpCi0JCW15U3RhdGUtPmJpc3RhdGUgPSBHZXRCdWxrSW5zZXJ0 U3RhdGUoKTsKKwkJbXlTdGF0ZS0+bXN0YXRlID0gdGFibGVfbW9kaWZ5X2JlZ2luKGludG9SZWxh dGlvbkRlc2MsCisJCQkJCQkJCQkJCSBUTV9GTEFHX01VTFRJX0lOU0VSVFMgfAorCQkJCQkJCQkJ CQkgVE1fRkxBR19CQVNfQlVMS1dSSVRFLAorCQkJCQkJCQkJCQkgR2V0Q3VycmVudENvbW1hbmRJ ZCh0cnVlKSwKKwkJCQkJCQkJCQkJIFRBQkxFX0lOU0VSVF9TS0lQX0ZTTSk7CiAJZWxzZQotCQlt eVN0YXRlLT5iaXN0YXRlID0gTlVMTDsKKwkJbXlTdGF0ZS0+bXN0YXRlID0gTlVMTDsKIAogCS8q CiAJICogVmFsaWQgc21ncl90YXJnYmxvY2sgaW1wbGllcyBzb21ldGhpbmcgYWxyZWFkeSB3cm90 ZSB0byB0aGUgcmVsYXRpb24uCkBAIC01NzgsNyArNTc4LDYgQEAgc3RhdGljIGJvb2wKIGludG9y ZWxfcmVjZWl2ZShUdXBsZVRhYmxlU2xvdCAqc2xvdCwgRGVzdFJlY2VpdmVyICpzZWxmKQogewog CURSX2ludG9yZWwgKm15U3RhdGUgPSAoRFJfaW50b3JlbCAqKSBzZWxmOwotCWJvb2wJCWluc2Vy dEluZGV4ZXM7CiAKIAkvKiBOb3RoaW5nIHRvIGluc2VydCBpZiBXSVRIIE5PIERBVEEgaXMgc3Bl Y2lmaWVkLiAqLwogCWlmICghbXlTdGF0ZS0+aW50by0+c2tpcERhdGEpCkBAIC01OTEsMTIgKzU5 MCw3IEBAIGludG9yZWxfcmVjZWl2ZShUdXBsZVRhYmxlU2xvdCAqc2xvdCwgRGVzdFJlY2VpdmVy ICpzZWxmKQogCQkgKiB3b3VsZCBub3QgYmUgY2hlYXAgZWl0aGVyLiBUaGlzIGFsc28gZG9lc24n dCBhbGxvdyBhY2Nlc3NpbmcgcGVyLUFNCiAJCSAqIGRhdGEgKHNheSBhIHR1cGxlJ3MgeG1pbiks IGJ1dCBzaW5jZSB3ZSBkb24ndCBkbyB0aGF0IGhlcmUuLi4KIAkJICovCi0JCXRhYmxlX3R1cGxl X2luc2VydChteVN0YXRlLT5yZWwsCi0JCQkJCQkgICBzbG90LAotCQkJCQkJICAgbXlTdGF0ZS0+ b3V0cHV0X2NpZCwKLQkJCQkJCSAgIG15U3RhdGUtPnRpX29wdGlvbnMsCi0JCQkJCQkgICBteVN0 YXRlLT5iaXN0YXRlLAotCQkJCQkJICAgJmluc2VydEluZGV4ZXMpOworCQl0YWJsZV9tb2RpZnlf YnVmZmVyX2luc2VydChteVN0YXRlLT5tc3RhdGUsIHNsb3QpOwogCX0KIAogCS8qIFdlIGtub3cg dGhpcyBpcyBhIG5ld2x5IGNyZWF0ZWQgcmVsYXRpb24sIHNvIHRoZXJlIGFyZSBubyBpbmRleGVz ICovCkBAIC02MTQsMTAgKzYwOCw3IEBAIGludG9yZWxfc2h1dGRvd24oRGVzdFJlY2VpdmVyICpz ZWxmKQogCUludG9DbGF1c2UgKmludG8gPSBteVN0YXRlLT5pbnRvOwogCiAJaWYgKCFpbnRvLT5z a2lwRGF0YSkKLQl7Ci0JCUZyZWVCdWxrSW5zZXJ0U3RhdGUobXlTdGF0ZS0+YmlzdGF0ZSk7Ci0J CXRhYmxlX2ZpbmlzaF9idWxrX2luc2VydChteVN0YXRlLT5yZWwsIG15U3RhdGUtPnRpX29wdGlv bnMpOwotCX0KKwkJdGFibGVfbW9kaWZ5X2VuZChteVN0YXRlLT5tc3RhdGUpOwogCiAJLyogY2xv c2UgcmVsLCBidXQga2VlcCBsb2NrIHVudGlsIGNvbW1pdCAqLwogCXRhYmxlX2Nsb3NlKG15U3Rh dGUtPnJlbCwgTm9Mb2NrKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21hdHZp ZXcuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21hdHZpZXcuYwppbmRleCA5ZWMxM2QwOTg0Li5m MDNhYTFjZmYzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9tYXR2aWV3LmMKKysr IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0dmlldy5jCkBAIC00OCw5ICs0OCw3IEBAIHR5cGVk ZWYgc3RydWN0CiAJT2lkCQkJdHJhbnNpZW50b2lkOwkvKiBPSUQgb2YgbmV3IGhlYXAgaW50byB3 aGljaCB0byBzdG9yZSAqLwogCS8qIFRoZXNlIGZpZWxkcyBhcmUgZmlsbGVkIGJ5IHRyYW5zaWVu dHJlbF9zdGFydHVwOiAqLwogCVJlbGF0aW9uCXRyYW5zaWVudHJlbDsJLyogcmVsYXRpb24gdG8g d3JpdGUgdG8gKi8KLQlDb21tYW5kSWQJb3V0cHV0X2NpZDsJCS8qIGNtaW4gdG8gaW5zZXJ0IGlu IG91dHB1dCB0dXBsZXMgKi8KLQlpbnQJCQl0aV9vcHRpb25zOwkJLyogdGFibGVfdHVwbGVfaW5z ZXJ0IHBlcmZvcm1hbmNlIG9wdGlvbnMgKi8KLQlCdWxrSW5zZXJ0U3RhdGUgYmlzdGF0ZTsJLyog YnVsayBpbnNlcnQgc3RhdGUgKi8KKwlUYWJsZU1vZGlmeVN0YXRlICptc3RhdGU7CS8qIHRhYmxl IGluc2VydCBzdGF0ZSAqLwogfSBEUl90cmFuc2llbnRyZWw7CiAKIHN0YXRpYyBpbnQJbWF0dmll d19tYWludGVuYW5jZV9kZXB0aCA9IDA7CkBAIC00NTgsOSArNDU2LDEyIEBAIHRyYW5zaWVudHJl bF9zdGFydHVwKERlc3RSZWNlaXZlciAqc2VsZiwgaW50IG9wZXJhdGlvbiwgVHVwbGVEZXNjIHR5 cGVpbmZvKQogCSAqIEZpbGwgcHJpdmF0ZSBmaWVsZHMgb2YgbXlTdGF0ZSBmb3IgdXNlIGJ5IGxh dGVyIHJvdXRpbmVzCiAJICovCiAJbXlTdGF0ZS0+dHJhbnNpZW50cmVsID0gdHJhbnNpZW50cmVs OwotCW15U3RhdGUtPm91dHB1dF9jaWQgPSBHZXRDdXJyZW50Q29tbWFuZElkKHRydWUpOwotCW15 U3RhdGUtPnRpX29wdGlvbnMgPSBUQUJMRV9JTlNFUlRfU0tJUF9GU00gfCBUQUJMRV9JTlNFUlRf RlJPWkVOOwotCW15U3RhdGUtPmJpc3RhdGUgPSBHZXRCdWxrSW5zZXJ0U3RhdGUoKTsKKwlteVN0 YXRlLT5tc3RhdGUgPSB0YWJsZV9tb2RpZnlfYmVnaW4odHJhbnNpZW50cmVsLAorCQkJCQkJCQkJ CSBUTV9GTEFHX01VTFRJX0lOU0VSVFMgfAorCQkJCQkJCQkJCSBUTV9GTEFHX0JBU19CVUxLV1JJ VEUsCisJCQkJCQkJCQkJIEdldEN1cnJlbnRDb21tYW5kSWQodHJ1ZSksCisJCQkJCQkJCQkJIFRB QkxFX0lOU0VSVF9TS0lQX0ZTTSB8CisJCQkJCQkJCQkJIFRBQkxFX0lOU0VSVF9GUk9aRU4pOwog CiAJLyoKIAkgKiBWYWxpZCBzbWdyX3RhcmdibG9jayBpbXBsaWVzIHNvbWV0aGluZyBhbHJlYWR5 IHdyb3RlIHRvIHRoZSByZWxhdGlvbi4KQEAgLTQ3Niw3ICs0NzcsNiBAQCBzdGF0aWMgYm9vbAog dHJhbnNpZW50cmVsX3JlY2VpdmUoVHVwbGVUYWJsZVNsb3QgKnNsb3QsIERlc3RSZWNlaXZlciAq c2VsZikKIHsKIAlEUl90cmFuc2llbnRyZWwgKm15U3RhdGUgPSAoRFJfdHJhbnNpZW50cmVsICop IHNlbGY7Ci0JYm9vbAkJaW5zZXJ0SW5kZXhlczsKIAogCS8qCiAJICogTm90ZSB0aGF0IHRoZSBp bnB1dCBzbG90IG1pZ2h0IG5vdCBiZSBvZiB0aGUgdHlwZSBvZiB0aGUgdGFyZ2V0CkBAIC00ODYs MTMgKzQ4Niw3IEBAIHRyYW5zaWVudHJlbF9yZWNlaXZlKFR1cGxlVGFibGVTbG90ICpzbG90LCBE ZXN0UmVjZWl2ZXIgKnNlbGYpCiAJICogY2hlYXAgZWl0aGVyLiBUaGlzIGFsc28gZG9lc24ndCBh bGxvdyBhY2Nlc3NpbmcgcGVyLUFNIGRhdGEgKHNheSBhCiAJICogdHVwbGUncyB4bWluKSwgYnV0 IHNpbmNlIHdlIGRvbid0IGRvIHRoYXQgaGVyZS4uLgogCSAqLwotCi0JdGFibGVfdHVwbGVfaW5z ZXJ0KG15U3RhdGUtPnRyYW5zaWVudHJlbCwKLQkJCQkJICAgc2xvdCwKLQkJCQkJICAgbXlTdGF0 ZS0+b3V0cHV0X2NpZCwKLQkJCQkJICAgbXlTdGF0ZS0+dGlfb3B0aW9ucywKLQkJCQkJICAgbXlT dGF0ZS0+YmlzdGF0ZSwKLQkJCQkJICAgJmluc2VydEluZGV4ZXMpOworCXRhYmxlX21vZGlmeV9i dWZmZXJfaW5zZXJ0KG15U3RhdGUtPm1zdGF0ZSwgc2xvdCk7CiAKIAkvKiBXZSBrbm93IHRoaXMg aXMgYSBuZXdseSBjcmVhdGVkIHJlbGF0aW9uLCBzbyB0aGVyZSBhcmUgbm8gaW5kZXhlcyAqLwog CkBAIC01MDcsOSArNTAxLDcgQEAgdHJhbnNpZW50cmVsX3NodXRkb3duKERlc3RSZWNlaXZlciAq c2VsZikKIHsKIAlEUl90cmFuc2llbnRyZWwgKm15U3RhdGUgPSAoRFJfdHJhbnNpZW50cmVsICop IHNlbGY7CiAKLQlGcmVlQnVsa0luc2VydFN0YXRlKG15U3RhdGUtPmJpc3RhdGUpOwotCi0JdGFi bGVfZmluaXNoX2J1bGtfaW5zZXJ0KG15U3RhdGUtPnRyYW5zaWVudHJlbCwgbXlTdGF0ZS0+dGlf b3B0aW9ucyk7CisJdGFibGVfbW9kaWZ5X2VuZChteVN0YXRlLT5tc3RhdGUpOwogCiAJLyogY2xv c2UgdHJhbnNpZW50cmVsLCBidXQga2VlcCBsb2NrIHVudGlsIGNvbW1pdCAqLwogCXRhYmxlX2Ns b3NlKG15U3RhdGUtPnRyYW5zaWVudHJlbCwgTm9Mb2NrKTsKLS0gCjIuMzQuMQoK --000000000000e3b8350614f6cd58--