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 1w119d-002Q2A-0z for pgsql-hackers@arkaria.postgresql.org; Fri, 13 Mar 2026 11:58:09 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w119a-003fq1-1V for pgsql-hackers@arkaria.postgresql.org; Fri, 13 Mar 2026 11:58:06 +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 1w119a-003fpt-0A for pgsql-hackers@lists.postgresql.org; Fri, 13 Mar 2026 11:58:06 +0000 Received: from mail-dy1-x1335.google.com ([2607:f8b0:4864:20::1335]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w119X-00000002SLc-3PuT for pgsql-hackers@postgresql.org; Fri, 13 Mar 2026 11:58:06 +0000 Received: by mail-dy1-x1335.google.com with SMTP id 5a478bee46e88-2be1b5fe11cso3237060eec.0 for ; Fri, 13 Mar 2026 04:58:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1773403081; cv=none; d=google.com; s=arc-20240605; b=cGLZoMgdG3VM6ZhlZqGRDuR44RsLM7zlaetknqCYst1Xn4rdVRhaPzDQuFiskhiJ6A PGdpEA3ywtw0aKPAyJBUOPpFBlwsKP6vTdSwXKcnKBYDUayTdWP+yjIBQ6dY503DKqUj W1R18omVNHXRboZijsZApHcFc5QNXx+Q+RswTyVKk1NgsAEjfHzsYb0+u+uaVHCmyO0p LA8rrP3vrrE8ZG3tK9w30ymsFhhKIRP5lCl05Vd3lvLW7VGPSINXJskUKL7G9j6xHNGy 4A9/bCRdvsG9vMaLgox+2LrY5ewdJEailzoQmOpNEijNpiJXBop66+PsO2J3bvMWWvQc kSbw== 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=664ROoZ+0jFyJNk0QLVrTUlGs/4rqhq4C7uyn3oYVms=; fh=EaVkVuvRkIWUHB9X+CbzlBE2BQKMn0fWbkQ7bP8nuWk=; b=EBC+RpCWxUVO0ibDJlq2O6SXhxiUg5L5koWOwyZ8BTASU/CpiYO5daLT6Xm2PJvIYk hvMuWk0BPvaAiioQOqSMluk0RUiW0CPyhtq1PtakkrWiSvzTQB1fupURq+U1/nF5MEL2 VYOcZ1l1QRG+Md/azaMKwrIX+J9uOqUQ/SVaFb/WlKIepzlUYLgPWUkr6V7GsOnMPSnq J6Ch1i+l7pJHCHglSISC4fttcnKUfeRGzhnf4MrEf6cbFbIOR51ypm49AEFUskhvLGHd 1wve3iOfLThpLKaWP3vepGvzFPbTowXNMD02SkEF7+BWBX7PXaRvlxZIUbNe93Mn7HNC 6yhQ==; 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=1773403081; x=1774007881; 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=664ROoZ+0jFyJNk0QLVrTUlGs/4rqhq4C7uyn3oYVms=; b=aQWsMt/phe5Yj/rMOzQ1WpX1IyiMIpmIo5xAS0IoUe+zNf5G4+NAZsItU06Hh9T9eH jkD4DG1wiuKugSyfMp7zf70Mw21wI3Nh8zu1qHlSXApxbQxGaEzVRQBcLUZdjuceiqko zCgFQYT+PaxNzUZ3oGGmL0BDdZMbMoCFrh2q0d5k74TCzRCnIdZATUl3kLqABHcpAycC +ucqqtpPVXixJDTQgLD+8isVCxFtTi9kG3iJnbpvsiulATq6CrVBMjFeEk3v8H+IOXj3 3LIed/c7ch4+9jaVK12yUNoGXL9LvDOwpmg0+2BCc+kRj4OsglHzwoypYtaZVTpVclXl z7Vw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773403081; x=1774007881; 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=664ROoZ+0jFyJNk0QLVrTUlGs/4rqhq4C7uyn3oYVms=; b=pxJoSAvOmbYUircOp7Xvqse+L28XHdMin7/Aoanv8MipkO4JpTrp7lLJdow+Bjekcg 0g2ysHmsTvBEoETzFr6z+mtpPgoi3enklbobCHqacOMfYG7GtWe/L2nyPqKiHIHkHtir u4h3PmWp3tjg9dQz6hDEPhZvAuKw4SYDJscRbMUVM9NKJUsHIql7poTRVkMvGhx8IY/L RbmQVaxF06dWxSu/Bg+RC0uAwWriVsXyTBLZBctuPssjOIkMVCiWjQr2ragOTdbbyDoA zQVyXsrad9BAltfF9hnPL/M3bGhUaEWRBCx6Ps0B+uhVExpXtBnSKOnKs4Kar1mr9Krf fx+g== X-Forwarded-Encrypted: i=1; AJvYcCUngJ224YGlbti+79hSJ218qyQLfpWDyFUM+hCZ9Mx4Jx316dIJgTI8mjfKEAH7Ya5IfeK1Tylvtipr8uds@postgresql.org X-Gm-Message-State: AOJu0YzOL2DyTdPYrq0C6rKE7PbyO2rvz8RyottxblTSYopFMG5hpVtN Atib6sA4TMUPwiATtsD6mgkZ8NTwRRePPR9uzuYp0VsvHbjl37VF0Rt/h0RW+Hf1a9Ea9hLFEZx RDQpJnqNjEjVLNecKVGqbkMC6InvyuxU= X-Gm-Gg: ATEYQzwv8dkrJ5iUZt9hSJch+RHGNTp7ateVjhpXWlgHMOWtfzmMKlmERU/aEnegqeo +TwQpRZplpGRTv1KaAlqRfmIlMbhCxN3vPStNAnswC9AjbBjoaRpfzZnhLfyBhaZM91tA1LD99y QQPV3fzyODj4UcCjP0KNst+RXFmehJ6U6qD830vg4KM2y2DM+oY7o0lxEJpzxoyKnyFugFipXSt vDslaV49L6i7AaodCtYSi3F4EVqYrWcJMz1mIct5rWYX9xc+ibfKc5i5NiremYLyCeIYUFCad3H 91gkhWaUDve41PoZaA== X-Received: by 2002:a05:7300:cb87:b0:2ba:8018:cc57 with SMTP id 5a478bee46e88-2bea541a50emr1350819eec.11.1773403081257; Fri, 13 Mar 2026 04:58:01 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Nazir Bilal Yavuz Date: Fri, 13 Mar 2026 14:57:48 +0300 X-Gm-Features: AaiRm50DHVYDL7q0Aca0T_mG2CEJjrXNhOI-b1UtvKHjR66LcNCUH9I0PEz3Z1w 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="000000000000b43494064ce69458" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000b43494064ce69458 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, On Thu, 12 Mar 2026 at 20:37, Nathan Bossart wro= te: > > Here is what I have staged for commit, which I'm planning to do tomorrow. > Please review and/or test if you are able. Thank you! Unfortunately, v15 causes a regression for a 'csv & wide & 1/3' case on my end. v14 was taking 8000ms but v15 took ~9100ms. If we add the tmp_hit_eof variable then the regression disappears. Also, if I use a struct like below, regression disappears again. typedef struct CopyReadLineSIMDResult { int input_buf_ptr; bool hit_eof; bool result; } CopyReadLineSIMDResult; When I removed the tmp_hit_eof variable on v14, I didn't encounter any regression. I really don't understand why this is happening on my end. Manni didn't encounter any regression on the benchmark [1]. I benchmarked v15 and both of the cases above: ------------------------------------------------------------ Results for default_toast_compression =3D 'lz4': +--------------------------------------------------+ | Optimization: -O2 | +-------------------+--------------+---------------+ | | Text | CSV | +-------------------+------+-------+-------+-------+ | WIDE | None | 1/3 | None | 1/3 | +-------------------+------+-------+-------+-------+ | Old master | 4260 | 4789 | 5930 | 8276 | +-------------------+------+-------+-------+-------+ | v14 | 2489 | 4439 | 2529 | 8098 | +-------------------+------+-------+-------+-------+ | v15 | 2494 | 4235 | 2490 | 9140 | +-------------------+------+-------+-------+-------+ | v15 + tmp_hit_eof | 2487 | 4539 | 2478 | 8041 | +-------------------+------+-------+-------+-------+ | v15 + struct | 2490 | 4531 | 2483 | 7756 | +-------------------+------+-------+-------+-------+ | | | | | | +-------------------+------+-------+-------+-------+ | | | | | | +-------------------+------+-------+-------+-------+ | | Text | CSV | +-------------------+------+-------+-------+-------+ | NARROW | None | 1/3 | None | 1/3 | +-------------------+------+-------+-------+-------+ | Old master | 9955 | 10056 | 10329 | 10872 | +-------------------+------+-------+-------+-------+ | v14 | 9917 | 10080 | 10104 | 10510 | +-------------------+------+-------+-------+-------+ | v15 | 9898 | 10062 | 10232 | 10483 | +-------------------+------+-------+-------+-------+ | v15 + tmp_hit_eof | 9847 | 10004 | 10192 | 10437 | +-------------------+------+-------+-------+-------+ | v15 + struct | 9877 | 10008 | 10107 | 10521 | +-------------------+------+-------+-------+-------+ ------------------------------------------------------------ Results for default_toast_compression =3D 'pglz': +---------------------------------------------------+ | Optimization: -O2 | +-------------------+---------------+---------------+ | | Text | CSV | +-------------------+-------+-------+-------+-------+ | WIDE | None | 1/3 | None | 1/3 | +-------------------+-------+-------+-------+-------+ | Old master | 10579 | 10927 | 12276 | 14488 | +-------------------+-------+-------+-------+-------+ | v14 | 8832 | 10646 | 8815 | 14352 | +-------------------+-------+-------+-------+-------+ | v15 | 8859 | 10489 | 8835 | 15414 | +-------------------+-------+-------+-------+-------+ | v15 + tmp_hit_eof | 8828 | 10829 | 8840 | 14297 | +-------------------+-------+-------+-------+-------+ | v15 + struct | 8847 | 10829 | 8846 | 14003 | +-------------------+-------+-------+-------+-------+ | | | | | | +-------------------+-------+-------+-------+-------+ | | | | | | +-------------------+-------+-------+-------+-------+ | | Text | CSV | +-------------------+-------+-------+-------+-------+ | NARROW | None | 1/3 | None | 1/3 | +-------------------+-------+-------+-------+-------+ | Old master | 9952 | 10342 | 10112 | 10861 | +-------------------+-------+-------+-------+-------+ | v14 | 9907 | 10344 | 10103 | 10492 | +-------------------+-------+-------+-------+-------+ | v15 | 9897 | 10261 | 10126 | 10490 | +-------------------+-------+-------+-------+-------+ | v15 + tmp_hit_eof | 9848 | 10218 | 10184 | 10425 | +-------------------+-------+-------+-------+-------+ | v15 + struct | 9858 | 10150 | 10116 | 10464 | +-------------------+-------+-------+-------+-------+ ------------------------------------------------------------ It can be seen that the 'csv & wide & 1/3' case is much better on 'v15 + struct' and 'v15 + tmp_hit_eof' but 'text & wide & 1/3' case is a bit worse but still better than master. Regardless of the issues above, I encountered a compiler warning on the v15, if 'USE_NO_SIMD' is defined, then this warning appears: copyfromparse.c:1780:1: warning: label =E2=80=98out=E2=80=99 defined but no= t used [-Wunused-label] Rest of the changes look good to me. v16 is attached, it fixes the warning by protecting 'out' with '#ifndef USE_NO_SIMD', no other changes. In addition to that, I put 'using CopyReadLineSIMDResult struct' as a 0002 to get an opinion. [1] https://postgr.es/m/CAKWEB6pMbdMDvhfaX1Z0eSULVQFYhEhssaRHdOxAX_5OYubxKw= %40mail.gmail.com -- Regards, Nazir Bilal Yavuz Microsoft --000000000000b43494064ce69458 Content-Type: text/x-patch; charset="US-ASCII"; name="v16-0001-Optimize-COPY-FROM-FORMAT-text-csv-using-SIMD.patch" Content-Disposition: attachment; filename="v16-0001-Optimize-COPY-FROM-FORMAT-text-csv-using-SIMD.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmouap0c0 RnJvbSA0OWU4MmFiZmM3NTIwMzJmYjEwZTJjMTQ0Zjc2NTZmNmZkZjc4MzY2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOYXRoYW4gQm9zc2FydCA8bmF0aGFuQHBvc3RncmVzcWwub3Jn PgpEYXRlOiBUaHUsIDEyIE1hciAyMDI2IDEyOjMyOjIzIC0wNTAwClN1YmplY3Q6IFtQQVRDSCB2 MTYgMS8yXSBPcHRpbWl6ZSBDT1BZIEZST00gKEZPUk1BVCB7dGV4dCxjc3Z9KSB1c2luZyBTSU1E LgoKUHJlc2VudGx5LCBzdWNoIGNvbW1hbmRzIHNjYW4gdGhlIGlucHV0IGJ1ZmZlciBvbmUgYnl0 ZSBhdCBhIHRpbWUKbG9va2luZyBmb3Igc3BlY2lhbCBjaGFyYWN0ZXJzLiAgVGhpcyBjb21taXQg YWRkcyBhIG5ldyBwYXRoIHRoYXQKdXNlcyBTSU1EIGluc3RydWN0aW9ucyB0byBza2lwIG92ZXIg Y2h1bmtzIG9mIGRhdGEgd2l0aG91dCBhbnkKc3BlY2lhbCBjaGFyYWN0ZXJzLiAgVGhpcyBjYW4g YmUgbXVjaCBmYXN0ZXIuCgpUbyBhdm9pZCByZWdyZXNzaW9ucywgU0lNRCBwcm9jZXNzaW5nIGlz IGRpc2FibGVkIGZvciB0aGUgcmVtYWluZGVyCm9mIHRoZSBDT1BZIEZST00gY29tbWFuZCBhcyBz b29uIGFzIHdlIGVuY291bnRlciBhIHNob3J0IGxpbmUgb3IgYQpzcGVjaWFsIGNoYXJhY3RlciAo ZXhjZXB0IGZvciBlbmQtb2YtbGluZSBjaGFyYWN0ZXJzLCBlbHNlIHdlJ2QKYWx3YXlzIGRpc2Fi bGUgaXQgYWZ0ZXIgdGhlIGZpcnN0IGxpbmUpLiAgVGhpcyBpcyBwZXJoYXBzIHRvbwpjb25zZXJ2 YXRpdmUsIGJ1dCBpdCBjb3VsZCBwcm9iYWJseSBiZSBtYWRlIG1vcmUgbGVuaWVudCBpbiB0aGUK ZnV0dXJlIHZpYSBmaW5lLXR1bmVkIGhldXJpc3RpY3MuCgpBdXRob3I6IE5hemlyIEJpbGFsIFlh dnV6IDxieWF2dXo4MUBnbWFpbC5jb20+CkNvLWF1dGhvcmVkLWJ5OiBTaGlueWEgS2F0byA8c2hp bnlhMTEua2F0b0BnbWFpbC5jb20+ClJldmlld2VkLWJ5OiBBeW91YiBLYXphciA8bWFfa2F6YXJA ZXNpLmR6PgpSZXZpZXdlZC1ieTogQW5kcmV3IER1bnN0YW4gPGFuZHJld0BkdW5zbGFuZS5uZXQ+ ClJldmlld2VkLWJ5OiBOZWlsIENvbndheSA8bmVpbC5jb253YXlAZ21haWwuY29tPgpUZXN0ZWQt Ynk6IE1hbm5pIFdvb2QgPG1hbm5pLndvb2RAZW50ZXJwcmlzZWRiLmNvbT4KVGVzdGVkLWJ5OiBN YXJrIFdvbmcgPG1hcmt3a21AZ21haWwuY29tPgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5l cy9tL0NBT3pFdXJTVzhjTnI2VFBLc2pyc3RuUGZoZjRReVFxQjR0blBYR0dlOE40ZV92N0ppZyU0 MG1haWwuZ21haWwuY29tCi0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb20uYyAgICAg ICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbXBhcnNlLmMgICAgIHwg MTgyICsrKysrKysrKysrKysrKysrKysrKystCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9jb3B5ZnJv bV9pbnRlcm5hbC5oIHwgICAxICsKIDMgZmlsZXMgY2hhbmdlZCwgMTgxIGluc2VydGlvbnMoKyks IDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZy b20uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tLmMKaW5kZXggMGVjZTQwNTU3Yzgu Ljk1ZjZjYjQxNmE5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbS5j CisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tLmMKQEAgLTE3NDYsNiArMTc0Niw3 IEBAIEJlZ2luQ29weUZyb20oUGFyc2VTdGF0ZSAqcHN0YXRlLAogCWNzdGF0ZS0+Y3VyX2F0dG5h bWUgPSBOVUxMOwogCWNzdGF0ZS0+Y3VyX2F0dHZhbCA9IE5VTEw7CiAJY3N0YXRlLT5yZWxuYW1l X29ubHkgPSBmYWxzZTsKKwljc3RhdGUtPnNpbWRfZW5hYmxlZCA9IHRydWU7CiAKIAkvKgogCSAq IEFsbG9jYXRlIGJ1ZmZlcnMgZm9yIHRoZSBpbnB1dCBwaXBlbGluZS4KZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tcGFyc2UuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2NvcHlmcm9tcGFyc2UuYwppbmRleCA4NGM4ODA5YTg4OS4uYmFlM2JmNmZiMGQgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tcGFyc2UuYworKysgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9jb3B5ZnJvbXBhcnNlLmMKQEAgLTcyLDYgKzcyLDcgQEAKICNpbmNsdWRlICJt aXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJwb3J0L3BnX2Jzd2Fw LmgiCisjaW5jbHVkZSAicG9ydC9zaW1kLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIK ICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKICNpbmNsdWRlICJ1dGlscy93YWl0X2V2ZW50LmgiCkBA IC0xMzExLDYgKzEzMTIsMTUyIEBAIENvcHlSZWFkTGluZShDb3B5RnJvbVN0YXRlIGNzdGF0ZSwg Ym9vbCBpc19jc3YpCiAJcmV0dXJuIHJlc3VsdDsKIH0KIAorI2lmbmRlZiBVU0VfTk9fU0lNRAor LyoKKyAqIEhlbHBlciBmdW5jdGlvbiBmb3IgQ29weVJlYWRMaW5lVGV4dCgpIHRoYXQgdXNlcyBT SU1EIGluc3RydWN0aW9ucyB0byBzY2FuCisgKiB0aGUgaW5wdXQgYnVmZmVyIGZvciBzcGVjaWFs IGNoYXJhY3RlcnMuICBUaGlzIGNhbiBiZSBtdWNoIGZhc3Rlci4KKyAqCisgKiBOb3RlIHRoYXQg d2UgZGlzYWJsZSBTSU1EIGZvciB0aGUgcmVtYWluZGVyIG9mIHRoZSBDT1BZIEZST00gY29tbWFu ZCB1cG9uCisgKiBlbmNvdW50ZXJpbmcgYSBzcGVjaWFsIGNoYXJhY3RlciAoZXhjZXB0IGZvciBl bmQtb2YtbGluZSBjaGFyYWN0ZXJzKSBvciBhCisgKiBzaG9ydCBsaW5lLiAgVGhpcyBpcyBwZXJo YXBzIHRvbyBjb25zZXJ2YXRpdmUsIGJ1dCBpdCBzaG91bGQgaGVscCBhdm9pZAorICogcmVncmVz c2lvbnMuICBJdCBjb3VsZCBwcm9iYWJseSBiZSBtYWRlIG1vcmUgbGVuaWVudCBpbiB0aGUgZnV0 dXJlIHZpYQorICogZmluZS10dW5lZCBoZXVyaXN0aWNzLgorICovCitzdGF0aWMgYm9vbAorQ29w eVJlYWRMaW5lVGV4dFNJTURIZWxwZXIoQ29weUZyb21TdGF0ZSBjc3RhdGUsIGJvb2wgaXNfY3N2 LAorCQkJCQkJICAgYm9vbCAqaGl0X2VvZl9wLCBpbnQgKmlucHV0X2J1Zl9wdHJfcCkKK3sKKwlj aGFyCSAgICpjb3B5X2lucHV0X2J1ZjsKKwlpbnQJCQlpbnB1dF9idWZfcHRyOworCWludAkJCWNv cHlfYnVmX2xlbjsKKwlib29sCQl1bmlxdWVfZXNjX2NoYXI7CS8qIGZvciBjc3YsIGRvIHF1b3Rl L2VzYyBjaGFycyBkaWZmZXI/ICovCisJYm9vbAkJZmlyc3QgPSB0cnVlOworCWJvb2wJCXJlc3Vs dCA9IGZhbHNlOworCWNvbnN0IFZlY3RvcjggbmxfdmVjID0gdmVjdG9yOF9icm9hZGNhc3QoJ1xu Jyk7CisJY29uc3QgVmVjdG9yOCBjcl92ZWMgPSB2ZWN0b3I4X2Jyb2FkY2FzdCgnXHInKTsKKwlW ZWN0b3I4CQlic19vcl9xdW90ZV92ZWM7CS8qICdcJyBmb3IgdGV4dCwgcXVvdGUgZm9yIGNzdiAq LworCVZlY3RvcjgJCWVzY192ZWM7CQkvKiBvbmx5IGZvciBjc3YgKi8KKworCWlmIChpc19jc3Yp CisJeworCQljaGFyCQlxdW90ZSA9IGNzdGF0ZS0+b3B0cy5xdW90ZVswXTsKKwkJY2hhcgkJZXNj ID0gY3N0YXRlLT5vcHRzLmVzY2FwZVswXTsKKworCQlic19vcl9xdW90ZV92ZWMgPSB2ZWN0b3I4 X2Jyb2FkY2FzdChxdW90ZSk7CisJCWVzY192ZWMgPSB2ZWN0b3I4X2Jyb2FkY2FzdChlc2MpOwor CQl1bmlxdWVfZXNjX2NoYXIgPSAocXVvdGUgIT0gZXNjKTsKKwl9CisJZWxzZQorCXsKKwkJYnNf b3JfcXVvdGVfdmVjID0gdmVjdG9yOF9icm9hZGNhc3QoJ1xcJyk7CisJCXVuaXF1ZV9lc2NfY2hh ciA9IGZhbHNlOworCX0KKworCS8qCisJICogRm9yIGEgbGl0dGxlIGV4dHJhIHNwZWVkIHdpdGhp biB0aGUgbG9vcCwgd2UgY29weSBzb21lIHN0YXRlIG1lbWJlcnMKKwkgKiBpbnRvIGxvY2FsIHZh cmlhYmxlcy4gTm90ZSB0aGF0IHdlIG5lZWQgdG8gdXNlIGEgc2VwYXJhdGUgbG9jYWwKKwkgKiB2 YXJpYWJsZSBmb3IgaW5wdXRfYnVmX3B0ciBzbyB0aGF0IHRoZSBSRUZJTExfTElORUJVRiBtYWNy byB3b3Jrcy4gIFdlCisJICogY29weSBpdHMgdmFsdWUgaW50byB0aGUgaW5wdXRfYnVmX3B0cl9w IGFyZ3VtZW50IGJlZm9yZSByZXR1cm5pbmcuCisJICovCisJY29weV9pbnB1dF9idWYgPSBjc3Rh dGUtPmlucHV0X2J1ZjsKKwlpbnB1dF9idWZfcHRyID0gY3N0YXRlLT5pbnB1dF9idWZfaW5kZXg7 CisJY29weV9idWZfbGVuID0gY3N0YXRlLT5pbnB1dF9idWZfbGVuOworCisJLyoKKwkgKiBTZWUg dGhlIGNvcnJlc3BvbmRpbmcgbG9vcCBpbiBDb3B5UmVhZExpbmVUZXh0KCkgZm9yIG1vcmUgaW5m b3JtYXRpb24KKwkgKiBhYm91dCB0aGUgcHVycG9zZSBvZiB0aGlzIGxvb3AuICBUaGlzIG9uZSBk b2VzIHRoZSBzYW1lIHRoaW5nIHVzaW5nCisJICogU0lNRCBpbnN0cnVjdGlvbnMsIGFsdGhvdWdo IHdlIGFyZSBxdWljayB0byBiYWlsIG91dCB0byB0aGUgc2NhbGFyIHBhdGgKKwkgKiBpZiB3ZSBl bmNvdW50ZXIgYSBzcGVjaWFsIGNoYXJhY3Rlci4KKwkgKi8KKwlmb3IgKDs7KQorCXsKKwkJVmVj dG9yOAkJY2h1bms7CisJCVZlY3RvcjgJCW1hdGNoOworCisJCS8qIExvYWQgbW9yZSBkYXRhIGlm IG5lZWRlZC4gKi8KKwkJaWYgKGNvcHlfYnVmX2xlbiAtIGlucHV0X2J1Zl9wdHIgPCBzaXplb2Yo VmVjdG9yOCkpCisJCXsKKwkJCVJFRklMTF9MSU5FQlVGOworCisJCQlDb3B5TG9hZElucHV0QnVm KGNzdGF0ZSk7CisJCQkvKiB1cGRhdGUgb3VyIGxvY2FsIHZhcmlhYmxlcyAqLworCQkJKmhpdF9l b2ZfcCA9IGNzdGF0ZS0+aW5wdXRfcmVhY2hlZF9lb2Y7CisJCQlpbnB1dF9idWZfcHRyID0gY3N0 YXRlLT5pbnB1dF9idWZfaW5kZXg7CisJCQljb3B5X2J1Zl9sZW4gPSBjc3RhdGUtPmlucHV0X2J1 Zl9sZW47CisKKwkJCS8qCisJCQkgKiBJZiB3ZSBhcmUgY29tcGxldGVseSBvdXQgb2YgZGF0YSwg YnJlYWsgb3V0IG9mIHRoZSBsb29wLAorCQkJICogcmVwb3J0aW5nIEVPRi4KKwkJCSAqLworCQkJ aWYgKElOUFVUX0JVRl9CWVRFUyhjc3RhdGUpIDw9IDApCisJCQl7CisJCQkJcmVzdWx0ID0gdHJ1 ZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCS8qCisJCSAqIElmIHdlIHN0aWxsIGRvbid0 IGhhdmUgZW5vdWdoIGRhdGEgZm9yIHRoZSBTSU1EIHBhdGgsIGZhbGwgYmFjayB0bworCQkgKiB0 aGUgc2NhbGFyIGNvZGUuICBOb3RlIHRoYXQgdGhpcyBkb2Vzbid0IG5lY2Vzc2FyaWx5IG1lYW4g d2UKKwkJICogZW5jb3VudGVyZWQgYSBzaG9ydCBsaW5lLCBzbyB3ZSBsZWF2ZSBjc3RhdGUtPnNp bWRfZW5hYmxlZCBzZXQgdG8KKwkJICogdHJ1ZS4KKwkJICovCisJCWlmIChjb3B5X2J1Zl9sZW4g LSBpbnB1dF9idWZfcHRyIDwgc2l6ZW9mKFZlY3RvcjgpKQorCQkJYnJlYWs7CisKKwkJLyoKKwkJ ICogSWYgd2UgbWFkZSBpdCBoZXJlLCB3ZSBoYXZlIGF0IGxlYXN0IGVub3VnaCBkYXRhIHRvIGZp dCBpbiBhCisJCSAqIFZlY3RvcjgsIHNvIHdlIGNhbiB1c2UgU0lNRCBpbnN0cnVjdGlvbnMgdG8g c2NhbiBmb3Igc3BlY2lhbAorCQkgKiBjaGFyYWN0ZXJzLgorCQkgKi8KKwkJdmVjdG9yOF9sb2Fk KCZjaHVuaywgKGNvbnN0IHVpbnQ4ICopICZjb3B5X2lucHV0X2J1ZltpbnB1dF9idWZfcHRyXSk7 CisKKwkJLyoKKwkJICogQ2hlY2sgZm9yIFxuLCBcciwgXFwgKGZvciB0ZXh0KSwgcXVvdGVzIChm b3IgY3N2KSwgYW5kIGVzY2FwZXMgKGZvcgorCQkgKiBjc3YsIGlmIGRpZmZlcmVudCBmcm9tIHF1 b3RlcykuCisJCSAqLworCQltYXRjaCA9IHZlY3RvcjhfZXEoY2h1bmssIG5sX3ZlYyk7CisJCW1h dGNoID0gdmVjdG9yOF9vcihtYXRjaCwgdmVjdG9yOF9lcShjaHVuaywgY3JfdmVjKSk7CisJCW1h dGNoID0gdmVjdG9yOF9vcihtYXRjaCwgdmVjdG9yOF9lcShjaHVuaywgYnNfb3JfcXVvdGVfdmVj KSk7CisJCWlmICh1bmlxdWVfZXNjX2NoYXIpCisJCQltYXRjaCA9IHZlY3Rvcjhfb3IobWF0Y2gs IHZlY3RvcjhfZXEoY2h1bmssIGVzY192ZWMpKTsKKworCQkvKgorCQkgKiBJZiB3ZSBmb3VuZCBh IHNwZWNpYWwgY2hhcmFjdGVyLCBhZHZhbmNlIHRvIGl0IGFuZCBoYW5kIG9mZiB0byB0aGUKKwkJ ICogc2NhbGFyIHBhdGguICBFeGNlcHQgZm9yIGVuZC1vZi1saW5lIGNoYXJhY3RlcnMsIHdlIGFs c28gZGlzYWJsZQorCQkgKiBTSU1EIHByb2Nlc3NpbmcgZm9yIHRoZSByZW1haW5kZXIgb2YgdGhl IENPUFkgRlJPTSBjb21tYW5kLgorCQkgKi8KKwkJaWYgKHZlY3RvcjhfaXNfaGlnaGJpdF9zZXQo bWF0Y2gpKQorCQl7CisJCQl1aW50MzIJCW1hc2s7CisJCQljaGFyCQljOworCisJCQltYXNrID0g dmVjdG9yOF9oaWdoYml0X21hc2sobWF0Y2gpOworCQkJaW5wdXRfYnVmX3B0ciArPSBwZ19yaWdo dG1vc3Rfb25lX3BvczMyKG1hc2spOworCisJCQkvKgorCQkJICogRG9uJ3QgZGlzYWJsZSBTSU1E IGlmIHdlIGZvdW5kIFxuIG9yIFxyLCBlbHNlIHdlJ2Qgc3RvcCB1c2luZworCQkJICogU0lNRCBp bnN0cnVjdGlvbnMgYWZ0ZXIgdGhlIGZpcnN0IGxpbmUuICBBcyBhbiBleGNlcHRpb24sIHdlIGRv CisJCQkgKiBkaXNhYmxlIGl0IGlmIHRoaXMgaXMgdGhlIGZpcnN0IHZlY3RvciB3ZSBwcm9jZXNz ZWQsIGFzIHRoYXQKKwkJCSAqIG1lYW5zIHRoZSBsaW5lIGlzIHRvbyBzaG9ydCBmb3IgU0lNRC4K KwkJCSAqLworCQkJYyA9IGNvcHlfaW5wdXRfYnVmW2lucHV0X2J1Zl9wdHJdOworCQkJaWYgKGZp cnN0IHx8IChjICE9ICdcbicgJiYgYyAhPSAnXHInKSkKKwkJCQljc3RhdGUtPnNpbWRfZW5hYmxl ZCA9IGZhbHNlOworCisJCQlicmVhazsKKwkJfQorCisJCS8qIFRoYXQgY2h1bmsgd2FzIGNsZWFy IG9mIHNwZWNpYWwgY2hhcmFjdGVycywgc28gd2UgY2FuIHNraXAgaXQuICovCisJCWlucHV0X2J1 Zl9wdHIgKz0gc2l6ZW9mKFZlY3RvcjgpOworCQlmaXJzdCA9IGZhbHNlOworCX0KKworCSppbnB1 dF9idWZfcHRyX3AgPSBpbnB1dF9idWZfcHRyOworCXJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYJ CQkJCQkJLyogISBVU0VfTk9fU0lNRCAqLworCiAvKgogICogQ29weVJlYWRMaW5lVGV4dCAtIGlu bmVyIGxvb3Agb2YgQ29weVJlYWRMaW5lIGZvciB0ZXh0IG1vZGUKICAqLwpAQCAtMTM2MSwxMSAr MTUwOCwzNiBAQCBDb3B5UmVhZExpbmVUZXh0KENvcHlGcm9tU3RhdGUgY3N0YXRlLCBib29sIGlz X2NzdikKIAkgKiBpbnB1dF9idWZfcHRyIGhhdmUgYmVlbiBkZXRlcm1pbmVkIHRvIGJlIHBhcnQg b2YgdGhlIGxpbmUsIGJ1dCBub3QgeWV0CiAJICogdHJhbnNmZXJyZWQgdG8gbGluZV9idWYuCiAJ ICoKLQkgKiBGb3IgYSBsaXR0bGUgZXh0cmEgc3BlZWQgd2l0aGluIHRoZSBsb29wLCB3ZSBjb3B5 IGlucHV0X2J1ZiBhbmQKLQkgKiBpbnB1dF9idWZfbGVuIGludG8gbG9jYWwgdmFyaWFibGVzLgor CSAqIEZvciBhIGxpdHRsZSBleHRyYSBzcGVlZCB3aXRoaW4gdGhlIGxvb3AsIHdlIGNvcHkgc29t ZSBzdGF0ZQorCSAqIGluZm9ybWF0aW9uIGludG8gbG9jYWwgdmFyaWFibGVzLiAgaW5wdXRfYnVm X3B0ciBjb3VsZCBiZSBjaGFuZ2VkIGluCisJICogdGhlIFNJTUQgcGF0aCwgc28gd2UgbXVzdCBz ZXQgdGhhdCBvbmUgYmVmb3JlIGl0LiAgVGhlIG90aGVycyBhcmUgc2V0CisJICogYWZ0ZXJ3YXJk cy4KIAkgKi8KLQljb3B5X2lucHV0X2J1ZiA9IGNzdGF0ZS0+aW5wdXRfYnVmOwogCWlucHV0X2J1 Zl9wdHIgPSBjc3RhdGUtPmlucHV0X2J1Zl9pbmRleDsKKworCS8qCisJICogV2UgZmlyc3QgdHJ5 IHRvIHVzZSBTSU1EIGZvciB0aGUgdGFzayBkZXNjcmliZWQgYWJvdmUsIGZhbGxpbmcgYmFjayB0 bworCSAqIHRoZSBzY2FsYXIgcGF0aCAoaS5lLiwgdGhlIGxvb3AgYmVsb3cpIGlmIG5lZWRlZC4K KwkgKi8KKyNpZm5kZWYgVVNFX05PX1NJTUQKKwlpZiAoY3N0YXRlLT5zaW1kX2VuYWJsZWQpCisJ eworCQkvKgorCQkgKiBVc2luZyBhIHRlbXBvcmFyeSB2YXJpYWJsZSBzZWVtcyB0byBlbmNvdXJh Z2UgdGhlIGNvbXBpbGVyIHRvIGtlZXAKKwkJICogaXQgaW4gYSByZWdpc3Rlciwgd2hpY2ggaXMg YmVuZWZpY2lhbCBmb3IgcGVyZm9ybWFuY2UuCisJCSAqLworCQlpbnQJCQl0bXBfaW5wdXRfYnVm X3B0cjsKKworCQlyZXN1bHQgPSBDb3B5UmVhZExpbmVUZXh0U0lNREhlbHBlcihjc3RhdGUsIGlz X2NzdiwgJmhpdF9lb2YsCisJCQkJCQkJCQkJCSZ0bXBfaW5wdXRfYnVmX3B0cik7CisJCWlucHV0 X2J1Zl9wdHIgPSB0bXBfaW5wdXRfYnVmX3B0cjsKKworCQlpZiAocmVzdWx0KQorCQkJZ290byBv dXQ7CisJfQorI2VuZGlmCQkJCQkJCS8qICEgVVNFX05PX1NJTUQgKi8KKworCWNvcHlfaW5wdXRf YnVmID0gY3N0YXRlLT5pbnB1dF9idWY7CiAJY29weV9idWZfbGVuID0gY3N0YXRlLT5pbnB1dF9i dWZfbGVuOwogCiAJZm9yICg7OykKQEAgLTE2MDUsNiArMTc3NywxMCBAQCBDb3B5UmVhZExpbmVU ZXh0KENvcHlGcm9tU3RhdGUgY3N0YXRlLCBib29sIGlzX2NzdikKIAkJfQogCX0JCQkJCQkJLyog ZW5kIG9mIG91dGVyIGxvb3AgKi8KIAorI2lmbmRlZiBVU0VfTk9fU0lNRAorb3V0OgorI2VuZGlm CQkJCQkJCS8qICEgVVNFX05PX1NJTUQgKi8KKwogCS8qCiAJICogVHJhbnNmZXIgYW55IHN0aWxs LXVuY29waWVkIGRhdGEgdG8gbGluZV9idWYuCiAJICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9jb21tYW5kcy9jb3B5ZnJvbV9pbnRlcm5hbC5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvY29w eWZyb21faW50ZXJuYWwuaAppbmRleCBmODkyYzM0MzE1Ny4uOWQzZTI0NGVlNTUgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NvcHlmcm9tX2ludGVybmFsLmgKKysrIGIvc3JjL2lu Y2x1ZGUvY29tbWFuZHMvY29weWZyb21faW50ZXJuYWwuaApAQCAtMTA4LDYgKzEwOCw3IEBAIHR5 cGVkZWYgc3RydWN0IENvcHlGcm9tU3RhdGVEYXRhCiAJCQkJCQkJCSAqIGF0dCAqLwogCWJvb2wJ ICAgKmRlZmF1bHRzOwkJLyogaWYgREVGQVVMVCBtYXJrZXIgd2FzIGZvdW5kIGZvcgogCQkJCQkJ CQkgKiBjb3JyZXNwb25kaW5nIGF0dCAqLworCWJvb2wJCXNpbWRfZW5hYmxlZDsJLyogdXNlIFNJ TUQgdG8gc2NhbiBmb3Igc3BlY2lhbCBjaGFycz8gKi8KIAogCS8qCiAJICogVHJ1ZSBpZiB0aGUg Y29ycmVzcG9uZGluZyBhdHRyaWJ1dGUncyBpcyBhIGNvbnN0cmFpbmVkIGRvbWFpbi4gVGhpcwot LSAKMi40Ny4zCgo= --000000000000b43494064ce69458 Content-Type: text/x-patch; charset="US-ASCII"; name="v16-0002-Use-CopyReadLineSIMDResult-struct.patch" Content-Disposition: attachment; filename="v16-0002-Use-CopyReadLineSIMDResult-struct.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmouaqtz1 RnJvbSBhMzJkODUzZTAyMGIxNjYwNTEwZjk2MGU3YmE1MjcwN2JiZDZhZmUzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOYXppciBCaWxhbCBZYXZ1eiA8YnlhdnV6ODFAZ21haWwuY29t PgpEYXRlOiBGcmksIDEzIE1hciAyMDI2IDE0OjI1OjQ1ICswMzAwClN1YmplY3Q6IFtQQVRDSCB2 MTYgMi8yXSBVc2UgQ29weVJlYWRMaW5lU0lNRFJlc3VsdCBzdHJ1Y3QKCi0tLQogc3JjL2JhY2tl bmQvY29tbWFuZHMvY29weWZyb21wYXJzZS5jIHwgNDQgKysrKysrKysrKysrKysrKystLS0tLS0t LS0tLQogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgIHwgIDEgKwogMiBmaWxl cyBjaGFuZ2VkLCAyOCBpbnNlcnRpb25zKCspLCAxNyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbXBhcnNlLmMgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9jb3B5ZnJvbXBhcnNlLmMKaW5kZXggYmFlM2JmNmZiMGQuLjNlMzM1OGFmOWUwIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbXBhcnNlLmMKKysrIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvY29weWZyb21wYXJzZS5jCkBAIC0xMzEzLDYgKzEzMTMsMTcgQEAgQ29w eVJlYWRMaW5lKENvcHlGcm9tU3RhdGUgY3N0YXRlLCBib29sIGlzX2NzdikKIH0KIAogI2lmbmRl ZiBVU0VfTk9fU0lNRAorLyoKKyAqIFJlc3VsdCBvZiBDb3B5UmVhZExpbmVUZXh0U0lNREhlbHBl ciwgcmV0dXJuZWQgYnkgdmFsdWUgdG8gYXZvaWQKKyAqIHBvaW50ZXIgcGFyYW1ldGVycyB0aGF0 IGNvdWxkIGluaGliaXQgcmVnaXN0ZXIgYWxsb2NhdGlvbiBpbiB0aGUgY2FsbGVyLgorICovCit0 eXBlZGVmIHN0cnVjdCBDb3B5UmVhZExpbmVTSU1EUmVzdWx0Cit7CisJaW50CQkJaW5wdXRfYnVm X3B0cjsKKwlib29sCQloaXRfZW9mOworCWJvb2wJCXJlc3VsdDsKK30gQ29weVJlYWRMaW5lU0lN RFJlc3VsdDsKKwogLyoKICAqIEhlbHBlciBmdW5jdGlvbiBmb3IgQ29weVJlYWRMaW5lVGV4dCgp IHRoYXQgdXNlcyBTSU1EIGluc3RydWN0aW9ucyB0byBzY2FuCiAgKiB0aGUgaW5wdXQgYnVmZmVy IGZvciBzcGVjaWFsIGNoYXJhY3RlcnMuICBUaGlzIGNhbiBiZSBtdWNoIGZhc3Rlci4KQEAgLTEz MjMsMjEgKzEzMzQsMjMgQEAgQ29weVJlYWRMaW5lKENvcHlGcm9tU3RhdGUgY3N0YXRlLCBib29s IGlzX2NzdikKICAqIHJlZ3Jlc3Npb25zLiAgSXQgY291bGQgcHJvYmFibHkgYmUgbWFkZSBtb3Jl IGxlbmllbnQgaW4gdGhlIGZ1dHVyZSB2aWEKICAqIGZpbmUtdHVuZWQgaGV1cmlzdGljcy4KICAq Lwotc3RhdGljIGJvb2wKLUNvcHlSZWFkTGluZVRleHRTSU1ESGVscGVyKENvcHlGcm9tU3RhdGUg Y3N0YXRlLCBib29sIGlzX2NzdiwKLQkJCQkJCSAgIGJvb2wgKmhpdF9lb2ZfcCwgaW50ICppbnB1 dF9idWZfcHRyX3ApCitzdGF0aWMgQ29weVJlYWRMaW5lU0lNRFJlc3VsdAorQ29weVJlYWRMaW5l VGV4dFNJTURIZWxwZXIoQ29weUZyb21TdGF0ZSBjc3RhdGUsIGJvb2wgaXNfY3N2KQogeworCUNv cHlSZWFkTGluZVNJTURSZXN1bHQgcmV0OwogCWNoYXIJICAgKmNvcHlfaW5wdXRfYnVmOwogCWlu dAkJCWlucHV0X2J1Zl9wdHI7CiAJaW50CQkJY29weV9idWZfbGVuOwogCWJvb2wJCXVuaXF1ZV9l c2NfY2hhcjsJLyogZm9yIGNzdiwgZG8gcXVvdGUvZXNjIGNoYXJzIGRpZmZlcj8gKi8KIAlib29s CQlmaXJzdCA9IHRydWU7Ci0JYm9vbAkJcmVzdWx0ID0gZmFsc2U7CiAJY29uc3QgVmVjdG9yOCBu bF92ZWMgPSB2ZWN0b3I4X2Jyb2FkY2FzdCgnXG4nKTsKIAljb25zdCBWZWN0b3I4IGNyX3ZlYyA9 IHZlY3RvcjhfYnJvYWRjYXN0KCdccicpOwogCVZlY3RvcjgJCWJzX29yX3F1b3RlX3ZlYzsJLyog J1wnIGZvciB0ZXh0LCBxdW90ZSBmb3IgY3N2ICovCiAJVmVjdG9yOAkJZXNjX3ZlYzsJCS8qIG9u bHkgZm9yIGNzdiAqLwogCisJcmV0LmhpdF9lb2YgPSBmYWxzZTsKKwlyZXQucmVzdWx0ID0gZmFs c2U7CisKIAlpZiAoaXNfY3N2KQogCXsKIAkJY2hhcgkJcXVvdGUgPSBjc3RhdGUtPm9wdHMucXVv dGVbMF07CkBAIC0xMzU3LDcgKzEzNzAsNyBAQCBDb3B5UmVhZExpbmVUZXh0U0lNREhlbHBlcihD b3B5RnJvbVN0YXRlIGNzdGF0ZSwgYm9vbCBpc19jc3YsCiAJICogRm9yIGEgbGl0dGxlIGV4dHJh IHNwZWVkIHdpdGhpbiB0aGUgbG9vcCwgd2UgY29weSBzb21lIHN0YXRlIG1lbWJlcnMKIAkgKiBp bnRvIGxvY2FsIHZhcmlhYmxlcy4gTm90ZSB0aGF0IHdlIG5lZWQgdG8gdXNlIGEgc2VwYXJhdGUg bG9jYWwKIAkgKiB2YXJpYWJsZSBmb3IgaW5wdXRfYnVmX3B0ciBzbyB0aGF0IHRoZSBSRUZJTExf TElORUJVRiBtYWNybyB3b3Jrcy4gIFdlCi0JICogY29weSBpdHMgdmFsdWUgaW50byB0aGUgaW5w dXRfYnVmX3B0cl9wIGFyZ3VtZW50IGJlZm9yZSByZXR1cm5pbmcuCisJICogY29weSBpdHMgdmFs dWUgaW50byB0aGUgcmV0dXJuIHN0cnVjdCBiZWZvcmUgcmV0dXJuaW5nLgogCSAqLwogCWNvcHlf aW5wdXRfYnVmID0gY3N0YXRlLT5pbnB1dF9idWY7CiAJaW5wdXRfYnVmX3B0ciA9IGNzdGF0ZS0+ aW5wdXRfYnVmX2luZGV4OwpAQCAtMTM4MSw3ICsxMzk0LDcgQEAgQ29weVJlYWRMaW5lVGV4dFNJ TURIZWxwZXIoQ29weUZyb21TdGF0ZSBjc3RhdGUsIGJvb2wgaXNfY3N2LAogCiAJCQlDb3B5TG9h ZElucHV0QnVmKGNzdGF0ZSk7CiAJCQkvKiB1cGRhdGUgb3VyIGxvY2FsIHZhcmlhYmxlcyAqLwot CQkJKmhpdF9lb2ZfcCA9IGNzdGF0ZS0+aW5wdXRfcmVhY2hlZF9lb2Y7CisJCQlyZXQuaGl0X2Vv ZiA9IGNzdGF0ZS0+aW5wdXRfcmVhY2hlZF9lb2Y7CiAJCQlpbnB1dF9idWZfcHRyID0gY3N0YXRl LT5pbnB1dF9idWZfaW5kZXg7CiAJCQljb3B5X2J1Zl9sZW4gPSBjc3RhdGUtPmlucHV0X2J1Zl9s ZW47CiAKQEAgLTEzOTEsNyArMTQwNCw3IEBAIENvcHlSZWFkTGluZVRleHRTSU1ESGVscGVyKENv cHlGcm9tU3RhdGUgY3N0YXRlLCBib29sIGlzX2NzdiwKIAkJCSAqLwogCQkJaWYgKElOUFVUX0JV Rl9CWVRFUyhjc3RhdGUpIDw9IDApCiAJCQl7Ci0JCQkJcmVzdWx0ID0gdHJ1ZTsKKwkJCQlyZXQu cmVzdWx0ID0gdHJ1ZTsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQpAQCAtMTQ1Myw4ICsxNDY2LDgg QEAgQ29weVJlYWRMaW5lVGV4dFNJTURIZWxwZXIoQ29weUZyb21TdGF0ZSBjc3RhdGUsIGJvb2wg aXNfY3N2LAogCQlmaXJzdCA9IGZhbHNlOwogCX0KIAotCSppbnB1dF9idWZfcHRyX3AgPSBpbnB1 dF9idWZfcHRyOwotCXJldHVybiByZXN1bHQ7CisJcmV0LmlucHV0X2J1Zl9wdHIgPSBpbnB1dF9i dWZfcHRyOworCXJldHVybiByZXQ7CiB9CiAjZW5kaWYJCQkJCQkJLyogISBVU0VfTk9fU0lNRCAq LwogCkBAIC0xNTIyLDE1ICsxNTM1LDEyIEBAIENvcHlSZWFkTGluZVRleHQoQ29weUZyb21TdGF0 ZSBjc3RhdGUsIGJvb2wgaXNfY3N2KQogI2lmbmRlZiBVU0VfTk9fU0lNRAogCWlmIChjc3RhdGUt PnNpbWRfZW5hYmxlZCkKIAl7Ci0JCS8qCi0JCSAqIFVzaW5nIGEgdGVtcG9yYXJ5IHZhcmlhYmxl IHNlZW1zIHRvIGVuY291cmFnZSB0aGUgY29tcGlsZXIgdG8ga2VlcAotCQkgKiBpdCBpbiBhIHJl Z2lzdGVyLCB3aGljaCBpcyBiZW5lZmljaWFsIGZvciBwZXJmb3JtYW5jZS4KLQkJICovCi0JCWlu dAkJCXRtcF9pbnB1dF9idWZfcHRyOworCQlDb3B5UmVhZExpbmVTSU1EUmVzdWx0IHNpbWRfcmVz dWx0OwogCi0JCXJlc3VsdCA9IENvcHlSZWFkTGluZVRleHRTSU1ESGVscGVyKGNzdGF0ZSwgaXNf Y3N2LCAmaGl0X2VvZiwKLQkJCQkJCQkJCQkJJnRtcF9pbnB1dF9idWZfcHRyKTsKLQkJaW5wdXRf YnVmX3B0ciA9IHRtcF9pbnB1dF9idWZfcHRyOworCQlzaW1kX3Jlc3VsdCA9IENvcHlSZWFkTGlu ZVRleHRTSU1ESGVscGVyKGNzdGF0ZSwgaXNfY3N2KTsKKwkJaGl0X2VvZiA9IHNpbWRfcmVzdWx0 LmhpdF9lb2Y7CisJCWlucHV0X2J1Zl9wdHIgPSBzaW1kX3Jlc3VsdC5pbnB1dF9idWZfcHRyOwor CQlyZXN1bHQgPSBzaW1kX3Jlc3VsdC5yZXN1bHQ7CiAKIAkJaWYgKHJlc3VsdCkKIAkJCWdvdG8g b3V0OwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMv dG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCAwZGU1NTE4Mzc5My4uMmFjYzQwNTMz YzYgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3Ny Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC01MzgsNiArNTM4LDcgQEAgQ29weU1l dGhvZAogQ29weU11bHRpSW5zZXJ0QnVmZmVyCiBDb3B5TXVsdGlJbnNlcnRJbmZvCiBDb3B5T25F cnJvckNob2ljZQorQ29weVJlYWRMaW5lU0lNRFJlc3VsdAogQ29weVNlcVJlc3VsdAogQ29weVNv dXJjZQogQ29weVN0bXQKLS0gCjIuNDcuMwoK --000000000000b43494064ce69458--