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.96) (envelope-from ) id 1w0P8f-001sWs-31 for pgsql-hackers@arkaria.postgresql.org; Wed, 11 Mar 2026 19:22:38 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w0P8d-00BTnF-0c for pgsql-hackers@arkaria.postgresql.org; Wed, 11 Mar 2026 19:22:35 +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.96) (envelope-from ) id 1w0P8c-00BTn7-2l for pgsql-hackers@lists.postgresql.org; Wed, 11 Mar 2026 19:22:35 +0000 Received: from mail-dl1-x1231.google.com ([2607:f8b0:4864:20::1231]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w0P8a-00000002BXS-3CZn for pgsql-hackers@postgresql.org; Wed, 11 Mar 2026 19:22:35 +0000 Received: by mail-dl1-x1231.google.com with SMTP id a92af1059eb24-12776bebe9fso411222c88.1 for ; Wed, 11 Mar 2026 12:22:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1773256950; cv=none; d=google.com; s=arc-20240605; b=dqHhecSF076bZ0B7H6cs6BExBf1fYtr/RW1EYw+CAhjcfj2PncDfGslEz6Myu1IM6y aMLfZLgAyaX5+qkG4qgVfuw9QvoAHkICe9abclftU/4M8HoMsjrfO8zLwpfFt9got1wZ b7ut5A2MAggddK2qPAVcjA1nja0wjqFTGD35SF70kw04I9QleLKqbCZ6kivrKARRUVQY Sz5aoLV8/SYtre6J/L6BtFJ6sDC/FURZitc2/7tit2i0Y8Zr20seM712NHAb4NRSLkdm SMlq9eqARsZ1/FCdvEmCoDyYDd8HFUMjSGS6kghkueyH1w0obQ/K5YFhj2XW6Hh4pnsE WZTA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=fO48YGcIsuDNg0+/jPMxtC47RvzRpHJ+o/WsgLIri3o=; fh=HxJXN3iss0RYMLWPXQnewP2ag5NXphtq+cDtuk8TZXA=; b=cHVUeuOvNq4urYOF6hnOu0sYqvjbg7HZgN/YOJH3wkAHijorq8Nxz0AFSe4vu4G1QK 1Bx75GWJaDCg/yFHzL8pme56R2Vf8eBSShp9TUtmSlXrV8cHBD/G0tsdIsB99aCoTUZz RB038wsZcy1czirE6gAPpk7O+KzTR9nKExyGN4sM1cMY5MsEkVYvnFg6Urwv9X8dupT3 YyWw+Cxr1jvcBnsnFW4MU+jI4h7PWT8vy7JswvLJaXu5IwHKRZ6UM6rr63MEXU2i4FPQ qQ0XqbEhMxgitvR4fJ7B9/ncLzCzQ0Kvb3M/M8SwZjZ6ODXEjCH9nhaTtspOR76z+jd8 Mx5w==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773256950; x=1773861750; 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=fO48YGcIsuDNg0+/jPMxtC47RvzRpHJ+o/WsgLIri3o=; b=fsOHdI9SVLdv6jrlCFyk/7CXdf/lKoDW64IJiGb28om7o4CNgYI3KAjun7tCRbYrkR iOvbQLuJ3jTR7FMLkE0r5sSXn3Oyn3JbR7K/43JGfkBClMUWSARlOBdpj/OW1FePyTPm 6lvINCCCj9cm4qpLntvLccuEEEO0vj1sh7Uh5fGwPeKL6XOHyGzjvQPu/w2bqz+U3CL9 m4zQSFu0Asvp8euiC8A4+CCsYh08EJsMzUZ7jjPm2y9DoRFIkHTyn0H5Qiwxm5mOOOWw 7fo6p1k+3t0udTaffqN914VYIaNhGjRu89uRUpYHFFDJBx2OeRo8GJviGiz1+V6mYhtW rwjg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773256950; x=1773861750; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=fO48YGcIsuDNg0+/jPMxtC47RvzRpHJ+o/WsgLIri3o=; b=lW9VD8g3g8VJoRmElI3EXHlWx1oXilkREaII/jOrzaB9qqmGUfa03n4S2VNltAH++q D1fpRMvMa8VlCXe0GpwCOC7h8ZwHXAfpkqz46AXJciX0qzAX2YkT6yidF84Xm04mCona gCD8HvrLB0ggkh0GvNetkBiaRac0Qv7r60YhnIXrjfQ5z0NYIim8ssJqYKMUAInIQKhn bq3REjBNnRmDv7ebXlDGfPB1xMpJxblqFU4sTlSsFtGQUGm4vFgES95077HFOk7BgO4g gDU456YN6yaJeGpOL+MOtV5GcIHOSj+29Q35k7bQLAVRDCQYA/SfdtvMgPfeio9u2jh1 0jhw== X-Forwarded-Encrypted: i=1; AJvYcCVvA/8scZ/2HUBegFODm65PU9xoRp5y5vblIRr5xzYusKQ8YC7zQNrNXOGpcE1pgwSayCDXrT7GV5iOB+iZ@postgresql.org X-Gm-Message-State: AOJu0YwXHzCYyJMD2TDlprE+chNmrv++JU/p3PvSRV7Pq/7NpQK0qBBs wY90storoPej0eSSxlhZZ/a2zLY1yfWMv3U7hwMawu5LhgE3oOsMTTseErWyzSwyAgt61hiC6aO EN9Ks6kkbYiQySVlROlUDxfAg0/hit1w= X-Gm-Gg: ATEYQzzUVP2k4vMxpDUVVzl6tLKgYGIFyXmnfEMFYGa6qglz4rvHxyCVlNQFF4qKDci 9o+s6TUdW0PmltH2g8XyMLCTDRkpfSXzOCdM84iEgimlE8DlK7YiXlLe0b3sZCrPSEDOrxsVmh5 bY9jjkutsTBfTnHFWK4I70h3oioQuYa9nByGR7QGlxyKNaKtFwH0HPBzLsWKlJcGM8E9ACbGMPY MvP67ZnZ4Depwvj/JYW5IlSMzSEpqu1QEpuyl5lO+ScpVueDsh8asgPybJdOtAgpY18rPCkQtbQ P7+rsVw= X-Received: by 2002:a05:7022:6608:b0:128:bac0:2edf with SMTP id a92af1059eb24-128e7834bb4mr1792506c88.34.1773256950283; Wed, 11 Mar 2026 12:22:30 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Nazir Bilal Yavuz Date: Wed, 11 Mar 2026 22:22:18 +0300 X-Gm-Features: AaiRm50B8bVUnoKlnZs2FOVI9jE60VX_p9JzDYlgFkLhzF7FqEqqi31rhOwBrC4 Message-ID: Subject: Re: Speed up COPY FROM text/CSV parsing using SIMD To: Nathan Bossart Cc: Manni Wood , KAZAR Ayoub , Neil Conway , Andrew Dunstan , Shinya Kato , PostgreSQL-development Content-Type: multipart/mixed; boundary="0000000000009e7de2064cc48ee2" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000009e7de2064cc48ee2 Content-Type: text/plain; charset="UTF-8" Hi, On Wed, 11 Mar 2026 at 22:02, Nathan Bossart wrote: > > On Wed, Mar 11, 2026 at 09:49:22PM +0300, Nazir Bilal Yavuz wrote: > > That is what v13-0002 does. I saw 1%-2% speedups with this change and > > there was no regression. > > Thanks for the explanation. Is there any reason _not_ to add this to 0001? I noticed this improvement today. To make it easier to review for anyone who may have already started looking at v12, I attached the new functional code changes as 0002. There was no other reason. Here is v14 which is v13-0001 + v13-0002. -- Regards, Nazir Bilal Yavuz Microsoft --0000000000009e7de2064cc48ee2 Content-Type: text/x-patch; charset="US-ASCII"; name="v14-0001-Speed-up-COPY-FROM-text-CSV-parsing-using-SIMD.patch" Content-Disposition: attachment; filename="v14-0001-Speed-up-COPY-FROM-text-CSV-parsing-using-SIMD.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmmfaual0 RnJvbSBkMTllNjIyNzVkYjI5NDNjYzQyNzVjYWMyMjYyYzYzZDBiZDQ0MzZjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOYXppciBCaWxhbCBZYXZ1eiA8YnlhdnV6ODFAZ21haWwuY29t PgpEYXRlOiBXZWQsIDExIE1hciAyMDI2IDE0OjA0OjI5ICswMzAwClN1YmplY3Q6IFtQQVRDSCB2 MTRdIFNwZWVkIHVwIENPUFkgRlJPTSB0ZXh0L0NTViBwYXJzaW5nIHVzaW5nIFNJTUQKCkNPUFkg RlJPTSB0ZXh0IGFuZCBDU1YgcGFyc2luZyBwcmV2aW91c2x5IHNjYW5uZWQgdGhlIGlucHV0IGJ1 ZmZlcgpvbmUgYnl0ZSBhdCBhIHRpbWUgbG9va2luZyBmb3Igc3BlY2lhbCBjaGFyYWN0ZXJzIChu ZXdsaW5lLCBjYXJyaWFnZQpyZXR1cm4sIGJhY2tzbGFzaCwgYW5kIGluIENTViBtb2RlLCBxdW90 ZSBhbmQgZXNjYXBlIGNoYXJhY3RlcnMpLgpUaGlzIHBhdGNoIGFkZHMgYSBTSU1ELWFjY2VsZXJh dGVkIGZhc3QgcGF0aCB0aGF0IHByb2Nlc3NlcyBhIGZ1bGwKdmVjdG9yLXdpZHRoIGNodW5rIHBl ciBpdGVyYXRpb24sIHNpZ25pZmljYW50bHkgcmVkdWNpbmcgdGhlIG51bWJlcgpvZiBpdGVyYXRp b25zIG5lZWRlZCBvbiBpbnB1dHMgd2l0aCBsb25nIGxpbmVzLgoKQSBuZXcgaGVscGVyIGZ1bmN0 aW9uLCBDb3B5UmVhZExpbmVUZXh0U0lNREhlbHBlcigpLCBsb2FkcyBjaHVua3MKb2YgdGhlIGlu cHV0IGJ1ZmZlciBpbnRvIHZlY3RvciByZWdpc3RlcnMgYW5kIGNoZWNrcyBmb3IgYW55IHNwZWNp YWwKY2hhcmFjdGVycyB1c2luZyBTSU1EIGNvbXBhcmlzb25zLiBXaGVuIG5vIHNwZWNpYWwgY2hh cmFjdGVycyBhcmUKZm91bmQsIHRoZSBlbnRpcmUgY2h1bmsgaXMgc2tpcHBlZCBhdCBvbmNlLiBX aGVuIGEgc3BlY2lhbCBjaGFyYWN0ZXIKaXMgZm91bmQsIHRoZSBoZWxwZXIgYWR2YW5jZXMgdG8g dGhhdCBwb3NpdGlvbiBhbmQgaGFuZHMgb2ZmIHRvIHRoZQpleGlzdGluZyBzY2FsYXIgY29kZSB0 byBoYW5kbGUgaXQgY29ycmVjdGx5LgoKVG8gYXZvaWQgYSByZWdyZXNzaW9uIG9uIGlucHV0cyB0 aGF0IGNvbnRhaW4gbWFueSBzcGVjaWFsIGNoYXJhY3RlcnMsClNJTUQgaXMgZGlzYWJsZWQgZm9y IHRoZSByZW1haW5kZXIgb2YgdGhlIGN1cnJlbnQgaW5wdXQgb25jZSBhCm5vbi1FT0wgc3BlY2lh bCBjaGFyYWN0ZXIgaXMgZW5jb3VudGVyZWQuIFNJTUQgaXMgYWxzbyBkaXNhYmxlZCB3aGVuCnRo ZSBwcm9jZXNzZWQgbGluZSBpcyBzaG9ydGVyIHRoYW4gYSBmdWxsIHZlY3Rvciwgc2luY2UgU0lN RCBjYW4ndApwcm92aWRlIGEgYmVuZWZpdCB0aGVyZS4KCkF1dGhvcjogU2hpbnlhIEthdG8gPHNo aW55YTExLmthdG9AZ21haWwuY29tPgpBdXRob3I6IE5hemlyIEJpbGFsIFlhdnV6IDxieWF2dXo4 MUBnbWFpbC5jb20+ClJldmlld2VkLWJ5OiBLYXphciBBeW91YiA8bWFfa2F6YXJAZXNpLmR6PgpS ZXZpZXdlZC1ieTogTmF0aGFuIEJvc3NhcnQgPG5hdGhhbmRib3NzYXJ0QGdtYWlsLmNvbT4KUmV2 aWV3ZWQtYnk6IE5laWwgQ29ud2F5IDxuZWlsLmNvbndheUBnbWFpbC5jb20+ClJldmlld2VkLWJ5 OiBBbmRyZXcgRHVuc3RhbiA8YW5kcmV3QGR1bnNsYW5lLm5ldD4KUmV2aWV3ZWQtYnk6IE1hbm5p IFdvb2QgPG1hbm5pLndvb2RAZW50ZXJwcmlzZWRiLmNvbT4KUmV2aWV3ZWQtYnk6IE1hcmsgV29u ZyA8bWFya3drbUBnbWFpbC5jb20+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FP ekV1clNXOGNOcjZUUEtzanJzdG5QZmhmNFF5UXFCNHRuUFhHR2U4TjRlX3Y3SmlnJTQwbWFpbC5n bWFpbC5jb20KLS0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbS5jICAgICAgICAgIHwg ICAzICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tcGFyc2UuYyAgICAgfCAxOTUgKysr KysrKysrKysrKysrKysrKysrKy0KIHNyYy9pbmNsdWRlL2NvbW1hbmRzL2NvcHlmcm9tX2ludGVy bmFsLmggfCAgIDMgKwogMyBmaWxlcyBjaGFuZ2VkLCAxOTQgaW5zZXJ0aW9ucygrKSwgNyBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbS5jIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb20uYwppbmRleCAyZjQyZjU1ZTIyOS4uZmUxOGJk NzA4OTAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tLmMKKysrIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb20uYwpAQCAtMTc0Nyw2ICsxNzQ3LDkgQEAgQmVn aW5Db3B5RnJvbShQYXJzZVN0YXRlICpwc3RhdGUsCiAJY3N0YXRlLT5jdXJfYXR0dmFsID0gTlVM TDsKIAljc3RhdGUtPnJlbG5hbWVfb25seSA9IGZhbHNlOwogCisJLyogSW5pdGlhbGl6ZSBTSU1E ICovCisJY3N0YXRlLT5zaW1kX2VuYWJsZWQgPSB0cnVlOworCiAJLyoKIAkgKiBBbGxvY2F0ZSBi dWZmZXJzIGZvciB0aGUgaW5wdXQgcGlwZWxpbmUuCiAJICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2NvcHlmcm9tcGFyc2UuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlm cm9tcGFyc2UuYwppbmRleCA4NGM4ODA5YTg4OS4uNTUxNTliMDEyMmMgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tcGFyc2UuYworKysgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9jb3B5ZnJvbXBhcnNlLmMKQEAgLTcyLDYgKzcyLDcgQEAKICNpbmNsdWRlICJtaXNjYWRt aW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJwb3J0L3BnX2Jzd2FwLmgiCisj aW5jbHVkZSAicG9ydC9zaW1kLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNs dWRlICJ1dGlscy9yZWwuaCIKICNpbmNsdWRlICJ1dGlscy93YWl0X2V2ZW50LmgiCkBAIC0xNTks NiArMTYwLDEyIEBAIHN0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lubGluZSBib29sIE5leHRD b3B5RnJvbVJhd0ZpZWxkc0ludGVybmFsKENvcHlGcm9tU3RhCiAJCQkJCQkJCQkJCQkJCQkJCSBp bnQgKm5maWVsZHMsCiAJCQkJCQkJCQkJCQkJCQkJCSBib29sIGlzX2Nzdik7CiAKKy8qIFNJTUQg ZnVuY3Rpb25zICovCisjaWZuZGVmIFVTRV9OT19TSU1ECitzdGF0aWMgYm9vbCBDb3B5UmVhZExp bmVUZXh0U0lNREhlbHBlcihDb3B5RnJvbVN0YXRlIGNzdGF0ZSwgYm9vbCBpc19jc3YsCisJCQkJ CQkJCQkgICBib29sICp0ZW1wX2hpdF9lb2YsIGludCAqdGVtcF9pbnB1dF9idWZfcHRyKTsKKyNl bmRpZgorCiAKIC8qIExvdy1sZXZlbCBjb21tdW5pY2F0aW9ucyBmdW5jdGlvbnMgKi8KIHN0YXRp YyBpbnQJQ29weUdldERhdGEoQ29weUZyb21TdGF0ZSBjc3RhdGUsIHZvaWQgKmRhdGFidWYsCkBA IC0xMzExLDYgKzEzMTgsMTQ0IEBAIENvcHlSZWFkTGluZShDb3B5RnJvbVN0YXRlIGNzdGF0ZSwg Ym9vbCBpc19jc3YpCiAJcmV0dXJuIHJlc3VsdDsKIH0KIAorI2lmbmRlZiBVU0VfTk9fU0lNRAor LyoKKyAqIFVzZSBTSU1EIGluc3RydWN0aW9ucyB0byBlZmZpY2llbnRseSBzY2FuIHRoZSBpbnB1 dCBidWZmZXIgZm9yIHNwZWNpYWwKKyAqIGNoYXJhY3RlcnMgKGUuZy4sIG5ld2xpbmUsIGNhcnJp YWdlIHJldHVybiwgcXVvdGUsIGFuZCBlc2NhcGUpLiBUaGlzIGlzCisgKiBmYXN0ZXIgdGhhbiBi eXRlLWJ5LWJ5dGUgaXRlcmF0aW9uLCBlc3BlY2lhbGx5IG9uIGxhcmdlIGJ1ZmZlcnMuCisgKgor ICogTm90ZSB0aGF0LCBTSU1EIG1heSBiZWNvbWUgc2xvd2VyIHdoZW4gdGhlIGlucHV0IGNvbnRh aW5zIG1hbnkgc3BlY2lhbAorICogY2hhcmFjdGVycy4gVG8gYXZvaWQgdGhpcyByZWdyZXNzaW9u LCB3ZSBkaXNhYmxlIFNJTUQgZm9yIHRoZSByZXN0IG9mIHRoZQorICogaW5wdXQgb25jZSB3ZSBl bmNvdW50ZXIgYSBzcGVjaWFsIGNoYXJhY3RlciB3aGljaCBpc24ndCBFT0wuCisgKiBBbHNvLCBT SU1EIGlzIGRpc2FibGVkIHdoZW4gaXQgZW5jb3VudGVycyBhIHNob3J0IGxpbmUgdGhhdCBTSU1E IGNhbid0CisgKiBjcmVhdGUgYSBmdWxsIHNpemVkIHZlY3RvciwgdG9vLgorICovCitzdGF0aWMg Ym9vbAorQ29weVJlYWRMaW5lVGV4dFNJTURIZWxwZXIoQ29weUZyb21TdGF0ZSBjc3RhdGUsIGJv b2wgaXNfY3N2LCBib29sICp0ZW1wX2hpdF9lb2YsIGludCAqdGVtcF9pbnB1dF9idWZfcHRyKQor eworCWNoYXIJICAgKmNvcHlfaW5wdXRfYnVmOworCWludAkJCWlucHV0X2J1Zl9wdHI7CisJaW50 CQkJY29weV9idWZfbGVuOworCWJvb2wJCXJlc3VsdCA9IGZhbHNlOworCWJvb2wJCXVuaXF1ZV9l c2NhcGVjID0gZmFsc2U7CisJYm9vbAkJZmlyc3RfdmVjdG9yID0gdHJ1ZTsKKwlWZWN0b3I4CQlu bCA9IHZlY3RvcjhfYnJvYWRjYXN0KCdcbicpOworCVZlY3RvcjgJCWNyID0gdmVjdG9yOF9icm9h ZGNhc3QoJ1xyJyk7CisJVmVjdG9yOAkJYnNfb3JfcXVvdGUgPSB2ZWN0b3I4X2Jyb2FkY2FzdCgn XFwnKTsKKwlWZWN0b3I4CQllc2NhcGUgPSB2ZWN0b3I4X2Jyb2FkY2FzdCgwKTsKKworCWlmIChp c19jc3YpCisJeworCQljaGFyCQlxdW90ZWMgPSBjc3RhdGUtPm9wdHMucXVvdGVbMF07CisJCWNo YXIJCWVzY2FwZWMgPSBjc3RhdGUtPm9wdHMuZXNjYXBlWzBdOworCisJCWJzX29yX3F1b3RlID0g dmVjdG9yOF9icm9hZGNhc3QocXVvdGVjKTsKKwkJaWYgKHF1b3RlYyAhPSBlc2NhcGVjKQorCQl7 CisJCQl1bmlxdWVfZXNjYXBlYyA9IHRydWU7CisJCQllc2NhcGUgPSB2ZWN0b3I4X2Jyb2FkY2Fz dChlc2NhcGVjKTsKKwkJfQorCX0KKworCS8qIEZvciBhIGxpdHRsZSBleHRyYSBzcGVlZCB3ZSBj b3B5IHRoZXNlIGludG8gbG9jYWwgdmFyaWFibGVzICovCisJY29weV9pbnB1dF9idWYgPSBjc3Rh dGUtPmlucHV0X2J1ZjsKKwlpbnB1dF9idWZfcHRyID0gY3N0YXRlLT5pbnB1dF9idWZfaW5kZXg7 CisJY29weV9idWZfbGVuID0gY3N0YXRlLT5pbnB1dF9idWZfbGVuOworCisJd2hpbGUgKHRydWUp CisJeworCQkvKiBMb2FkIG1vcmUgZGF0YSBpZiBuZWVkZWQgKi8KKwkJaWYgKHNpemVvZihWZWN0 b3I4KSA+IGNvcHlfYnVmX2xlbiAtIGlucHV0X2J1Zl9wdHIpCisJCXsKKwkJCVJFRklMTF9MSU5F QlVGOworCisJCQlDb3B5TG9hZElucHV0QnVmKGNzdGF0ZSk7CisJCQkvKiB1cGRhdGUgb3VyIGxv Y2FsIHZhcmlhYmxlcyAqLworCQkJKnRlbXBfaGl0X2VvZiA9IGNzdGF0ZS0+aW5wdXRfcmVhY2hl ZF9lb2Y7CisJCQlpbnB1dF9idWZfcHRyID0gY3N0YXRlLT5pbnB1dF9idWZfaW5kZXg7CisJCQlj b3B5X2J1Zl9sZW4gPSBjc3RhdGUtPmlucHV0X2J1Zl9sZW47CisKKwkJCS8qCisJCQkgKiBJZiB3 ZSBhcmUgY29tcGxldGVseSBvdXQgb2YgZGF0YSwgYnJlYWsgb3V0IG9mIHRoZSBsb29wLAorCQkJ ICogcmVwb3J0aW5nIEVPRi4KKwkJCSAqLworCQkJaWYgKElOUFVUX0JVRl9CWVRFUyhjc3RhdGUp IDw9IDApCisJCQl7CisJCQkJcmVzdWx0ID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQor CisJCWlmIChjb3B5X2J1Zl9sZW4gLSBpbnB1dF9idWZfcHRyID49IHNpemVvZihWZWN0b3I4KSkK KwkJeworCQkJVmVjdG9yOAkJY2h1bms7CisJCQlWZWN0b3I4CQltYXRjaCA9IHZlY3RvcjhfYnJv YWRjYXN0KDApOworCisJCQkvKiBMb2FkIGEgY2h1bmsgb2YgZGF0YSBpbnRvIGEgdmVjdG9yIHJl Z2lzdGVyICovCisJCQl2ZWN0b3I4X2xvYWQoJmNodW5rLCAoY29uc3QgdWludDggKikgJmNvcHlf aW5wdXRfYnVmW2lucHV0X2J1Zl9wdHJdKTsKKworCQkJbWF0Y2ggPSB2ZWN0b3I4X29yKHZlY3Rv cjhfZXEoY2h1bmssIG5sKSwgdmVjdG9yOF9lcShjaHVuaywgY3IpKTsKKwkJCW1hdGNoID0gdmVj dG9yOF9vcihtYXRjaCwgdmVjdG9yOF9lcShjaHVuaywgYnNfb3JfcXVvdGUpKTsKKwkJCWlmICh1 bmlxdWVfZXNjYXBlYykKKwkJCQltYXRjaCA9IHZlY3Rvcjhfb3IobWF0Y2gsIHZlY3RvcjhfZXEo Y2h1bmssIGVzY2FwZSkpOworCisJCQkvKiBDaGVjayBpZiB3ZSBmb3VuZCBhbnkgc3BlY2lhbCBj aGFyYWN0ZXJzICovCisJCQlpZiAodmVjdG9yOF9pc19oaWdoYml0X3NldChtYXRjaCkpCisJCQl7 CisJCQkJLyoKKwkJCQkgKiBGb3VuZCBhIHNwZWNpYWwgY2hhcmFjdGVyLiBBZHZhbmNlIHVwIHRv IHRoYXQgcG9pbnQgYW5kIGxldAorCQkJCSAqIHRoZSBzY2FsYXIgY29kZSBoYW5kbGUgaXQuCisJ CQkJICovCisJCQkJdWludDMyCQltYXNrOworCQkJCWludAkJCWFkdmFuY2U7CisJCQkJY2hhcgkJ YzsKKworCQkJCW1hc2sgPSB2ZWN0b3I4X2hpZ2hiaXRfbWFzayhtYXRjaCk7CisJCQkJYWR2YW5j ZSA9IHBnX3JpZ2h0bW9zdF9vbmVfcG9zMzIobWFzayk7CisKKwkJCQlpbnB1dF9idWZfcHRyICs9 IGFkdmFuY2U7CisJCQkJYyA9IGNvcHlfaW5wdXRfYnVmW2lucHV0X2J1Zl9wdHJdOworCisJCQkJ LyoKKwkJCQkgKiBJZiB3ZSBlbmNvdW50ZXJlZCBhIHNwZWNpYWwgY2hhcmFjdGVyIGluIHRoZSBm aXJzdCB2ZWN0b3IsCisJCQkJICogdGhpcyBtZWFucyBsaW5lIGlzIG5vdCBsb25nIGVub3VnaCB0 byBza2lwIGZ1bGx5IHNpemVkCisJCQkJICogdmVjdG9yLiBUbyBiZSBjYXV0aW91cywgZGlzYWJs ZSBTSU1EIGZvciB0aGUgcmVzdC4KKwkJCQkgKgorCQkJCSAqIE90aGVyd2lzZSwgZG8gbm90IGRp c2FibGUgU0lNRCB3aGVuIHdlIGhpdCBFT0wgY2hhcmFjdGVycy4KKwkJCQkgKiBXZSBkb24ndCBj aGVjayBmb3IgRU9GIGJlY2F1c2UgcGFyc2luZyBlbmRzIHRoZXJlLgorCQkJCSAqLworCQkJCWlm IChmaXJzdF92ZWN0b3IgfHwgIShjID09ICdccicgfHwgYyA9PSAnXG4nKSkKKwkJCQkJY3N0YXRl LT5zaW1kX2VuYWJsZWQgPSBmYWxzZTsKKworCQkJCWJyZWFrOworCQkJfQorCQkJZWxzZQorCQkJ eworCQkJCS8qIE5vIHNwZWNpYWwgY2hhcmFjdGVycyBmb3VuZCwgc28gc2tpcCB0aGUgZW50aXJl IGNodW5rICovCisJCQkJaW5wdXRfYnVmX3B0ciArPSBzaXplb2YoVmVjdG9yOCk7CisJCQkJZmly c3RfdmVjdG9yID0gZmFsc2U7CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBBbHRob3VnaCB3ZSBy ZWZpbGwgbGluZWJ1ZiwgdGhlcmUgaXMgbm90IGVub3VnaCBjaGFyYWN0ZXIgdG8gZmlsbAorCQkg KiBmdWxsIHNpemVkIHZlY3Rvci4gVGhpcyBkb2Vzbid0IG1lYW4gdGhhdCB3ZSBlbmNvdW50ZXJl ZCBhIGxpbmUKKwkJICogdGhhdCBpcyBub3QgZW5vdWdoIHRvIGZpbGwgYSBmdWxsIHNpemVkIHZl Y3Rvci4KKwkJICoKKwkJICogU2NhbGFyIGNvZGUgd2lsbCBoYW5kbGUgdGhlIHJlc3QgZm9yIHRo aXMgbGluZS4gVGhlbiwgU0lNRCB3aWxsCisJCSAqIGNvbnRpbnVlIGZyb20gdGhlIG5leHQgbGlu ZS4KKwkJICovCisJCWVsc2UKKwkJeworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkqdGVtcF9pbnB1 dF9idWZfcHRyID0gaW5wdXRfYnVmX3B0cjsKKwlyZXR1cm4gcmVzdWx0OworfQorI2VuZGlmCisK IC8qCiAgKiBDb3B5UmVhZExpbmVUZXh0IC0gaW5uZXIgbG9vcCBvZiBDb3B5UmVhZExpbmUgZm9y IHRleHQgbW9kZQogICovCkBAIC0xMzM5LDYgKzE0ODQsNDkgQEAgQ29weVJlYWRMaW5lVGV4dChD b3B5RnJvbVN0YXRlIGNzdGF0ZSwgYm9vbCBpc19jc3YpCiAJCQllc2NhcGVjID0gJ1wwJzsKIAl9 CiAKKwkvKgorCSAqIGlucHV0X2J1Zl9wdHIgbWlnaHQgYmUgdXBkYXRlZCBpbiB0aGUgU0lNRCBI ZWxwZXIgZnVuY3Rpb24sIHNvIGl0IG5lZWRzCisJICogdG8gYmUgc2V0IGJlZm9yZSBjYWxsaW5n IENvcHlSZWFkTGluZVRleHRTSU1ESGVscGVyKCkuCisJICovCisJaW5wdXRfYnVmX3B0ciA9IGNz dGF0ZS0+aW5wdXRfYnVmX2luZGV4OworCisjaWZuZGVmIFVTRV9OT19TSU1ECisJLyogRmlyc3Qg dHJ5IHRvIHJ1biBTSU1ELCB0aGVuIGNvbnRpbnVlIHdpdGggdGhlIHNjYWxhciBwYXRoICovCisJ aWYgKGNzdGF0ZS0+c2ltZF9lbmFibGVkKQorCXsKKwkJLyoKKwkJICogVGVtcG9yYXJ5IHZhcmlh YmxlcyBhcmUgdXNlZCBoZXJlIGluc3RlYWQgb2YgcGFzc2luZyB0aGUgYWN0dWFsCisJCSAqIHZh cmlhYmxlcyAoZXNwZWNpYWxseSBpbnB1dF9idWZfcHRyKSBkaXJlY3RseSB0byB0aGUgaGVscGVy LiBUYWtpbmcKKwkJICogdGhlIGFkZHJlc3Mgb2YgYSBsb2NhbCB2YXJpYWJsZSBtaWdodCBmb3Jj ZSB0aGUgY29tcGlsZXIgdG8KKwkJICogYWxsb2NhdGUgaXQgb24gdGhlIHN0YWNrIHJhdGhlciB0 aGFuIGluIGEgcmVnaXN0ZXIuICBCZWNhdXNlCisJCSAqIGlucHV0X2J1Zl9wdHIgaXMgdXNlZCBo ZWF2aWx5IGluIHRoZSBob3Qgc2NhbGFyIHBhdGggYmVsb3csIGtlZXBpbmcKKwkJICogaXQgaW4g YSByZWdpc3RlciBpcyBpbXBvcnRhbnQgZm9yIHBlcmZvcm1hbmNlLgorCQkgKi8KKwkJaW50CQkJ dGVtcF9pbnB1dF9idWZfcHRyOworCQlib29sCQl0ZW1wX2hpdF9lb2YgPSBoaXRfZW9mOworCisJ CXJlc3VsdCA9IENvcHlSZWFkTGluZVRleHRTSU1ESGVscGVyKGNzdGF0ZSwgaXNfY3N2LCAmdGVt cF9oaXRfZW9mLAorCQkJCQkJCQkJCQkmdGVtcF9pbnB1dF9idWZfcHRyKTsKKwkJaW5wdXRfYnVm X3B0ciA9IHRlbXBfaW5wdXRfYnVmX3B0cjsKKwkJaGl0X2VvZiA9IHRlbXBfaGl0X2VvZjsKKwor CQkvKiBFYXJseSBleGl0IGZyb20gU0lNRCAqLworCQlpZiAocmVzdWx0KQorCQl7CisJCQkvKgor CQkJICogVHJhbnNmZXIgYW55IHN0aWxsLXVuY29waWVkIGRhdGEgdG8gbGluZV9idWYuCisJCQkg Ki8KKwkJCVJFRklMTF9MSU5FQlVGOworCisJCQlyZXR1cm4gcmVzdWx0OworCQl9CisJfQorI2Vu ZGlmCisKKwkvKiBGb3IgYSBsaXR0bGUgZXh0cmEgc3BlZWQgd2UgY29weSB0aGVzZSBpbnRvIGxv Y2FsIHZhcmlhYmxlcyAqLworCWNvcHlfaW5wdXRfYnVmID0gY3N0YXRlLT5pbnB1dF9idWY7CisJ Y29weV9idWZfbGVuID0gY3N0YXRlLT5pbnB1dF9idWZfbGVuOworCiAJLyoKIAkgKiBUaGUgb2Jq ZWN0aXZlIG9mIHRoaXMgbG9vcCBpcyB0byB0cmFuc2ZlciB0aGUgZW50aXJlIG5leHQgaW5wdXQg bGluZQogCSAqIGludG8gbGluZV9idWYuICBIZW5jZSwgd2Ugb25seSBjYXJlIGZvciBkZXRlY3Rp bmcgbmV3bGluZXMgKFxyIGFuZC9vcgpAQCAtMTM2MCwxNCArMTU0OCw3IEBAIENvcHlSZWFkTGlu ZVRleHQoQ29weUZyb21TdGF0ZSBjc3RhdGUsIGJvb2wgaXNfY3N2KQogCSAqIGNoYXJhY3RlciB0 byBleGFtaW5lOyBhbnkgY2hhcmFjdGVycyBmcm9tIGlucHV0X2J1Zl9pbmRleCB0bwogCSAqIGlu cHV0X2J1Zl9wdHIgaGF2ZSBiZWVuIGRldGVybWluZWQgdG8gYmUgcGFydCBvZiB0aGUgbGluZSwg YnV0IG5vdCB5ZXQKIAkgKiB0cmFuc2ZlcnJlZCB0byBsaW5lX2J1Zi4KLQkgKgotCSAqIEZvciBh IGxpdHRsZSBleHRyYSBzcGVlZCB3aXRoaW4gdGhlIGxvb3AsIHdlIGNvcHkgaW5wdXRfYnVmIGFu ZAotCSAqIGlucHV0X2J1Zl9sZW4gaW50byBsb2NhbCB2YXJpYWJsZXMuCiAJICovCi0JY29weV9p bnB1dF9idWYgPSBjc3RhdGUtPmlucHV0X2J1ZjsKLQlpbnB1dF9idWZfcHRyID0gY3N0YXRlLT5p bnB1dF9idWZfaW5kZXg7Ci0JY29weV9idWZfbGVuID0gY3N0YXRlLT5pbnB1dF9idWZfbGVuOwot CiAJZm9yICg7OykKIAl7CiAJCWludAkJCXByZXZfcmF3X3B0cjsKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL2NvbW1hbmRzL2NvcHlmcm9tX2ludGVybmFsLmggYi9zcmMvaW5jbHVkZS9jb21tYW5k cy9jb3B5ZnJvbV9pbnRlcm5hbC5oCmluZGV4IGY4OTJjMzQzMTU3Li41YjAyMGJmNGQwYiAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvY29weWZyb21faW50ZXJuYWwuaAorKysgYi9z cmMvaW5jbHVkZS9jb21tYW5kcy9jb3B5ZnJvbV9pbnRlcm5hbC5oCkBAIC04OSw2ICs4OSw5IEBA IHR5cGVkZWYgc3RydWN0IENvcHlGcm9tU3RhdGVEYXRhCiAJY29uc3QgY2hhciAqY3VyX2F0dHZh bDsJCS8qIGN1cnJlbnQgYXR0IHZhbHVlIGZvciBlcnJvciBtZXNzYWdlcyAqLwogCWJvb2wJCXJl bG5hbWVfb25seTsJLyogZG9uJ3Qgb3V0cHV0IGxpbmUgbnVtYmVyLCBhdHQsIGV0Yy4gKi8KIAor CS8qIFNJTUQgdmFyaWFibGVzICovCisJYm9vbAkJc2ltZF9lbmFibGVkOworCiAJLyoKIAkgKiBX b3JraW5nIHN0YXRlCiAJICovCi0tIAoyLjQ3LjMKCg== --0000000000009e7de2064cc48ee2--