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 1vTIrR-00GVZN-37 for pgsql-hackers@arkaria.postgresql.org; Wed, 10 Dec 2025 12:00:02 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vTIrQ-00B6Ef-0i for pgsql-hackers@arkaria.postgresql.org; Wed, 10 Dec 2025 12:00:00 +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 1vTIrP-00B6EW-2l for pgsql-hackers@lists.postgresql.org; Wed, 10 Dec 2025 12:00:00 +0000 Received: from mail-pg1-x52a.google.com ([2607:f8b0:4864:20::52a]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vTIrN-004FoN-1Y for pgsql-hackers@postgresql.org; Wed, 10 Dec 2025 11:59:59 +0000 Received: by mail-pg1-x52a.google.com with SMTP id 41be03b00d2f7-bc29d64b39dso3930418a12.3 for ; Wed, 10 Dec 2025 03:59:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1765367995; x=1765972795; 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=TH1SOMp/tq5wb/ZZ6RBDv9npp4t79boD5rcV2PcJqFQ=; b=cdErVgSy6QxQJtH7bg27Xdsj0VUn7o/2WeZ3gGnPcrai6PRsYHWBNTAuALb80YWjO8 kS2T/GBAO0RkIQ95JOau3wZiRMgrXiLHkgxnnQKENVusYFJmXICtCYWr4m6MPj+CX65p n+kaSblvgZ6JTwgzMT4pHTLFlq7K6nw1XXiWaHPP/XyX2+CXO1wfvHPeeBCgxuk+g68f wAbRN6XPWkjZhlafhYU0Zj9aihnImh4sNK0pQobj2dMe/EaAQxLd9KSo0qMF6wgF9g4v +nApqqrPG72cp5g8S8jbzvssvUhx9+lrlkGZtkK0c9aBd5DqMApdT7EbzgfGqYgf7K21 RAfw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765367995; x=1765972795; 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=TH1SOMp/tq5wb/ZZ6RBDv9npp4t79boD5rcV2PcJqFQ=; b=Wmjq11glnZnM2nH5SmYYK9upCcTn55GJYFP+34LbDJAWZS4UBoTP4mQE0/lrU4NSNk 59bm9Yq8Dgf019QsWetPl5QWf5WSyPrTzxtqfArCmtPT/XLNEJajgDqSauTdW7HCfXrG StOsqLr8mRwdGcvA2NalP8exdbXLjaVg//kJZVhQmPGkSfgfI5J5MP/4eZXwtZMQUN49 zHobA8nJHoH9v5Jes+fpT2LpiZBsWVyLs7e9q5n5xGgWcArO+a1P9VDqjkjHbWyrNP6Y SmM8STSV9NBnvmY2Aus+ycCXGPQ1ijlf9Eyl2VvK2yXu1KBGgsdnIDfePX+wH2rJionW 5jxg== X-Forwarded-Encrypted: i=1; AJvYcCVLZ2+deMi7Dz3x6VaFz4b0wkDrSTDduem0xgm+yjtgNo4MYB8/xPQ9UJTswt3ghJKvVv48xUBLKVRrKVMc@postgresql.org X-Gm-Message-State: AOJu0YwyIuZc8mqSvTj/5x3HZJfU8tzbCZvi/L2clbm4FuajmZBtfHpJ hEDPUmotUMRla0gc1HSOO5WUZ+7yUAqQrfYiydHd6uUUOuZMi0L84N3l9GpBm3AxHVo4cPW88FC /ryb0ZDx41XzI0d3+ZMu1bDUmAG5nL0c= X-Gm-Gg: AY/fxX6QE/j6UjXzGoN8YUfs3xaNEeRnmax9tYDxP/fHmsTeiBrxUCmP73VKqcKOJw7 2ARlXnZ7uRTmiyTiW3zeit/QbNUL7mmLYQW0TZkWrmMULbHbWMgUw5Ho3e1xk81L0Bn0SoJLivZ rReI9+xCAgQAbw6F59iXdM05/zbmCytA1UsplfY8A31CTTRTr93CvgMYxJiIRrXZ90hN17vztLh 7M+kD3JwWLBavr306E2E28N7TqxGzrf2uMKt0XfxizqDoDkNuagOt1LXbmii7x3y9/y2A== X-Google-Smtp-Source: AGHT+IEpV/XZ/TzevaGySGRt6qkldJUOSKh/qJwj+bGZLWKLJerWTRqBXrxY6KqDY23fQTqXO5VsA3M3Z6noT7Vq1tU= X-Received: by 2002:a05:7300:881b:b0:2a4:3593:ddea with SMTP id 5a478bee46e88-2ac055f4a7bmr1928684eec.23.1765367994830; Wed, 10 Dec 2025 03:59:54 -0800 (PST) MIME-Version: 1.0 References: <5d81fbbb-7609-4445-9bc4-8af211fb7674@dunslane.net> <8e226753-57af-489a-bfbe-caa23dd71286@dunslane.net> In-Reply-To: From: Nazir Bilal Yavuz Date: Wed, 10 Dec 2025 14:59:41 +0300 X-Gm-Features: AQt7F2rP-0nmPeM8PGLV5Ltqclab1JJasFd2VlhXnlqr6jrQioud99ZF0o-ZyHs Message-ID: Subject: Re: Speed up COPY FROM text/CSV parsing using SIMD To: Manni Wood Cc: KAZAR Ayoub , Nathan Bossart , Andrew Dunstan , Shinya Kato , PostgreSQL-development Content-Type: multipart/mixed; boundary="0000000000003b6b1f064597c4f2" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000003b6b1f064597c4f2 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, On Wed, 10 Dec 2025 at 01:13, Manni Wood wrot= e: > > Bilal Yavuz (Nazir Bilal Yavuz?), It is Nazir Bilal Yavuz, I changed some settings on my phone and it seems that it affected my mail account, hopefully it should be fixed now. > I did not get a chance to do any work on this today, but wanted to thank = you for finding my logic errors in counting special chars for CSV, and hack= ing on my naive solution to make it faster. By attempting Andrew Dunstan's = suggestion, I got a better feel for the reality that the "housekeeping" cod= e produces a significant amount of overhead. You are welcome! v4.1 has some problems with in_quote case in SIMD handling code and counting cstate->chars_processed variable. I fixed them in v4.2. --=20 Regards, Nazir Bilal Yavuz Microsoft --0000000000003b6b1f064597c4f2 Content-Type: text/x-patch; charset="US-ASCII"; name="v4.2-0001-Speed-up-COPY-FROM-text-CSV-parsing-using-SIMD.patch" Content-Disposition: attachment; filename="v4.2-0001-Speed-up-COPY-FROM-text-CSV-parsing-using-SIMD.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mizygomr0 RnJvbSBlNDU0NmIwNjEyYmQyZmRlNjE5MGE5YWRlNmU2MGExZjA4Mjk5MTg0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYW5uaSBXb29kIDxtYW5uaS53b29kQGVudGVycHJpc2VkYi5j b20+CkRhdGU6IEZyaSwgNSBEZWMgMjAyNSAxODozMDowMCAtMDYwMApTdWJqZWN0OiBbUEFUQ0gg djQuMiAxLzNdIFNwZWVkIHVwIENPUFkgRlJPTSB0ZXh0L0NTViBwYXJzaW5nIHVzaW5nIFNJTUQK CkF1dGhvcnM6IFNoaW55YSBLYXRvIDxzaGlueWExMS5rYXRvQGdtYWlsLmNvbT4sCk5hemlyIEJp bGFsIFlhdnV6IDxieWF2dXo4MUBnbWFpbC5jb20+LApBeW91YiBLYXphciA8bWFfa2F6YXJAZXNp LmR6PgpSZXZpZXdlcnM6IEFuZHJldyBEdW5zdGFuIDxhbmRyZXdAZHVuc2xhbmUubmV0PgpEZXNj dXNzaW9uOgpodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkL2ZsYXQvQ0FPekV1 clNXOGNOcjZUUEtzanJzdG5QZmhmNFF5UXFCNHRuUFhHR2U4TjRlX3Y3SmlnQG1haWwuZ21haWwu Y29tCi0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb21wYXJzZS5jIHwgNzMgKysrKysr KysrKysrKysrKysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDczIGluc2VydGlvbnMoKykK CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbXBhcnNlLmMgYi9zcmMv YmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbXBhcnNlLmMKaW5kZXggNjJhZmNkOGZhZDEuLjY3M2Q2 NjgzYTcyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbXBhcnNlLmMK KysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb21wYXJzZS5jCkBAIC03MSw3ICs3MSw5 IEBACiAjaW5jbHVkZSAibWIvcGdfd2NoYXIuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNp bmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJwb3J0L3BnX2JpdHV0aWxzLmgiCiAjaW5jbHVk ZSAicG9ydC9wZ19ic3dhcC5oIgorI2luY2x1ZGUgInBvcnQvc2ltZC5oIgogI2luY2x1ZGUgInV0 aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAKQEAgLTEyNTUsNiArMTI1 NywxNCBAQCBDb3B5UmVhZExpbmVUZXh0KENvcHlGcm9tU3RhdGUgY3N0YXRlLCBib29sIGlzX2Nz dikKIAljaGFyCQlxdW90ZWMgPSAnXDAnOwogCWNoYXIJCWVzY2FwZWMgPSAnXDAnOwogCisjaWZu ZGVmIFVTRV9OT19TSU1ECisJVmVjdG9yOAkJbmwgPSB2ZWN0b3I4X2Jyb2FkY2FzdCgnXG4nKTsK KwlWZWN0b3I4CQljciA9IHZlY3RvcjhfYnJvYWRjYXN0KCdccicpOworCVZlY3RvcjgJCWJzID0g dmVjdG9yOF9icm9hZGNhc3QoJ1xcJyk7CisJVmVjdG9yOAkJcXVvdGUgPSB2ZWN0b3I4X2Jyb2Fk Y2FzdCgwKTsKKwlWZWN0b3I4CQllc2NhcGUgPSB2ZWN0b3I4X2Jyb2FkY2FzdCgwKTsKKyNlbmRp ZgorCiAJaWYgKGlzX2NzdikKIAl7CiAJCXF1b3RlYyA9IGNzdGF0ZS0+b3B0cy5xdW90ZVswXTsK QEAgLTEyNjIsNiArMTI3MiwxMiBAQCBDb3B5UmVhZExpbmVUZXh0KENvcHlGcm9tU3RhdGUgY3N0 YXRlLCBib29sIGlzX2NzdikKIAkJLyogaWdub3JlIHNwZWNpYWwgZXNjYXBlIHByb2Nlc3Npbmcg aWYgaXQncyB0aGUgc2FtZSBhcyBxdW90ZWMgKi8KIAkJaWYgKHF1b3RlYyA9PSBlc2NhcGVjKQog CQkJZXNjYXBlYyA9ICdcMCc7CisKKyNpZm5kZWYgVVNFX05PX1NJTUQKKwkJcXVvdGUgPSB2ZWN0 b3I4X2Jyb2FkY2FzdChxdW90ZWMpOworCQlpZiAocXVvdGVjICE9IGVzY2FwZWMpCisJCQllc2Nh cGUgPSB2ZWN0b3I4X2Jyb2FkY2FzdChlc2NhcGVjKTsKKyNlbmRpZgogCX0KIAogCS8qCkBAIC0x MzI4LDYgKzEzNDQsNjMgQEAgQ29weVJlYWRMaW5lVGV4dChDb3B5RnJvbVN0YXRlIGNzdGF0ZSwg Ym9vbCBpc19jc3YpCiAJCQluZWVkX2RhdGEgPSBmYWxzZTsKIAkJfQogCisjaWZuZGVmIFVTRV9O T19TSU1ECisKKwkJLyoKKwkJICogVXNlIFNJTUQgaW5zdHJ1Y3Rpb25zIHRvIGVmZmljaWVudGx5 IHNjYW4gdGhlIGlucHV0IGJ1ZmZlciBmb3IKKwkJICogc3BlY2lhbCBjaGFyYWN0ZXJzIChlLmcu LCBuZXdsaW5lLCBjYXJyaWFnZSByZXR1cm4sIHF1b3RlLCBhbmQKKwkJICogZXNjYXBlKS4gVGhp cyBpcyBmYXN0ZXIgdGhhbiBieXRlLWJ5LWJ5dGUgaXRlcmF0aW9uLCBlc3BlY2lhbGx5IG9uCisJ CSAqIGxhcmdlIGJ1ZmZlcnMuCisJCSAqCisJCSAqIFdlIGRvIG5vdCBhcHBseSB0aGUgU0lNRCBm YXN0IHBhdGggaW4gZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmcKKwkJICogY2FzZXM6IC0gV2hlbiB0 aGUgcHJldmlvdXNseSBwcm9jZXNzZWQgY2hhcmFjdGVyIHdhcyBhbiBlc2NhcGUKKwkJICogY2hh cmFjdGVyIChsYXN0X3dhc19lc2MpLCBzaW5jZSB0aGUgbmV4dCBieXRlIG11c3QgYmUgZXhhbWlu ZWQKKwkJICogc2VxdWVudGlhbGx5LiAtIFRoZSByZW1haW5pbmcgYnVmZmVyIGlzIHNtYWxsZXIg dGhhbiBvbmUgdmVjdG9yCisJCSAqIHdpZHRoIChzaXplb2YoVmVjdG9yOCkpOyBTSU1EIG9wZXJh dGVzIG9uIGZpeGVkLXNpemUgY2h1bmtzLgorCQkgKi8KKwkJaWYgKCFsYXN0X3dhc19lc2MgJiYg Y29weV9idWZfbGVuIC0gaW5wdXRfYnVmX3B0ciA+PSBzaXplb2YoVmVjdG9yOCkpCisJCXsKKwkJ CVZlY3RvcjgJCWNodW5rOworCQkJVmVjdG9yOAkJbWF0Y2ggPSB2ZWN0b3I4X2Jyb2FkY2FzdCgw KTsKKwkJCXVpbnQzMgkJbWFzazsKKworCQkJLyogTG9hZCBhIGNodW5rIG9mIGRhdGEgaW50byBh IHZlY3RvciByZWdpc3RlciAqLworCQkJdmVjdG9yOF9sb2FkKCZjaHVuaywgKGNvbnN0IHVpbnQ4 ICopICZjb3B5X2lucHV0X2J1ZltpbnB1dF9idWZfcHRyXSk7CisKKwkJCS8qIFxuIGFuZCBcciBh cmUgbm90IHNwZWNpYWwgaW5zaWRlIHF1b3RlcyAqLworCQkJaWYgKCFpbl9xdW90ZSkKKwkJCQlt YXRjaCA9IHZlY3Rvcjhfb3IodmVjdG9yOF9lcShjaHVuaywgbmwpLCB2ZWN0b3I4X2VxKGNodW5r LCBjcikpOworCisJCQlpZiAoaXNfY3N2KQorCQkJeworCQkJCW1hdGNoID0gdmVjdG9yOF9vciht YXRjaCwgdmVjdG9yOF9lcShjaHVuaywgcXVvdGUpKTsKKwkJCQlpZiAoZXNjYXBlYyAhPSAnXDAn KQorCQkJCQltYXRjaCA9IHZlY3Rvcjhfb3IobWF0Y2gsIHZlY3RvcjhfZXEoY2h1bmssIGVzY2Fw ZSkpOworCQkJfQorCQkJZWxzZQorCQkJCW1hdGNoID0gdmVjdG9yOF9vcihtYXRjaCwgdmVjdG9y OF9lcShjaHVuaywgYnMpKTsKKworCQkJLyogQ2hlY2sgaWYgd2UgZm91bmQgYW55IHNwZWNpYWwg Y2hhcmFjdGVycyAqLworCQkJbWFzayA9IHZlY3RvcjhfaGlnaGJpdF9tYXNrKG1hdGNoKTsKKwkJ CWlmIChtYXNrICE9IDApCisJCQl7CisJCQkJLyoKKwkJCQkgKiBGb3VuZCBhIHNwZWNpYWwgY2hh cmFjdGVyLiBBZHZhbmNlIHVwIHRvIHRoYXQgcG9pbnQgYW5kIGxldAorCQkJCSAqIHRoZSBzY2Fs YXIgY29kZSBoYW5kbGUgaXQuCisJCQkJICovCisJCQkJaW50CQkJYWR2YW5jZSA9IHBnX3JpZ2h0 bW9zdF9vbmVfcG9zMzIobWFzayk7CisKKwkJCQlpbnB1dF9idWZfcHRyICs9IGFkdmFuY2U7CisJ CQl9CisJCQllbHNlCisJCQl7CisJCQkJLyogTm8gc3BlY2lhbCBjaGFyYWN0ZXJzIGZvdW5kLCBz byBza2lwIHRoZSBlbnRpcmUgY2h1bmsgKi8KKwkJCQlpbnB1dF9idWZfcHRyICs9IHNpemVvZihW ZWN0b3I4KTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorI2VuZGlmCisKIAkJLyogT0sgdG8g ZmV0Y2ggYSBjaGFyYWN0ZXIgKi8KIAkJcHJldl9yYXdfcHRyID0gaW5wdXRfYnVmX3B0cjsKIAkJ YyA9IGNvcHlfaW5wdXRfYnVmW2lucHV0X2J1Zl9wdHIrK107Ci0tIAoyLjUxLjAKCg== --0000000000003b6b1f064597c4f2 Content-Type: text/x-patch; charset="US-ASCII"; name="v4.2-0002-Speed-up-COPY-FROM-text-CSV-parsing-using-SIMD.patch" Content-Disposition: attachment; filename="v4.2-0002-Speed-up-COPY-FROM-text-CSV-parsing-using-SIMD.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mizygquj1 RnJvbSA5MmFjNGFkYTFlNDgzM2Y4MWNlMzAxNjRiNDg4NjhkYzFhZGUxMDJmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYW5uaSBXb29kIDxtYW5uaS53b29kQGVudGVycHJpc2VkYi5j b20+CkRhdGU6IEZyaSwgNSBEZWMgMjAyNSAxODozMzo0NiAtMDYwMApTdWJqZWN0OiBbUEFUQ0gg djQuMiAyLzNdIFNwZWVkIHVwIENPUFkgRlJPTSB0ZXh0L0NTViBwYXJzaW5nIHVzaW5nIFNJTUQK CkF1dGhvcnM6IFNoaW55YSBLYXRvIDxzaGlueWExMS5rYXRvQGdtYWlsLmNvbT4sCk5hemlyIEJp bGFsIFlhdnV6IDxieWF2dXo4MUBnbWFpbC5jb20+LApBeW91YiBLYXphciA8bWFfa2F6YXJAZXNp LmR6PgpSZXZpZXdlcnM6IEFuZHJldyBEdW5zdGFuIDxhbmRyZXdAZHVuc2xhbmUubmV0PgpEZXNj dXNzaW9uOgpodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkL2ZsYXQvQ0FPekV1 clNXOGNOcjZUUEtzanJzdG5QZmhmNFF5UXFCNHRuUFhHR2U4TjRlX3Y3SmlnQG1haWwuZ21haWwu Y29tCi0tLQogc3JjL2luY2x1ZGUvY29tbWFuZHMvY29weWZyb21faW50ZXJuYWwuaCB8IDExICsr KysrKysrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb20uYyAgICAgICAgICB8ICAzICsr Kwogc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb21wYXJzZS5jICAgICB8IDI5ICsrKysrKysr KysrKysrKysrKysrKysrLQogMyBmaWxlcyBjaGFuZ2VkLCA0MiBpbnNlcnRpb25zKCspLCAxIGRl bGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvY29weWZyb21faW50 ZXJuYWwuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NvcHlmcm9tX2ludGVybmFsLmgKaW5kZXgg YzhiMjJhZjIyZDguLjIxNTIxNWY5MDlmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5k cy9jb3B5ZnJvbV9pbnRlcm5hbC5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NvcHlmcm9t X2ludGVybmFsLmgKQEAgLTE4MSw2ICsxODEsMTcgQEAgdHlwZWRlZiBzdHJ1Y3QgQ29weUZyb21T dGF0ZURhdGEKICNkZWZpbmUgUkFXX0JVRl9CWVRFUyhjc3RhdGUpICgoY3N0YXRlKS0+cmF3X2J1 Zl9sZW4gLSAoY3N0YXRlKS0+cmF3X2J1Zl9pbmRleCkKIAogCXVpbnQ2NAkJYnl0ZXNfcHJvY2Vz c2VkOwkvKiBudW1iZXIgb2YgYnl0ZXMgcHJvY2Vzc2VkIHNvIGZhciAqLworCisJLyogdGhlIGFt b3VudCBvZiBieXRlcyB0byByZWFkIHVudGlsIGNoZWNraW5nIGlmIHdlIHNob3VsZCB0cnkgc2lt ZCAqLworI2RlZmluZSBCWVRFU19QUk9DRVNTRURfVU5USUxfU0lNRF9DSEVDSyAxMDAwMDAKKwkv KiB0aGUgbnVtYmVyIG9mIHNwZWNpYWwgY2hhcnMgcmVhZCBiZWxvdyB3aGljaCB3ZSB1c2Ugc2lt ZCAqLworI2RlZmluZSBTUEVDSUFMX0NIQVJfU0lNRF9USFJFU0hPTEQgMjAwMDAKKwl1aW50NjQJ CXNwZWNpYWxfY2hhcnNfZW5jb3VudGVyZWQ7CS8qIG51bWJlciBvZiBzcGVjaWFsIGNoYXJzCisJ CQkJCQkJCQkJCSAqIGVuY291bnRlcmVkIHNvIGZhciAqLworCWJvb2wJCWNoZWNrZWRfc2ltZDsJ Lyogd2UgcmVhZCBCWVRFU19QUk9DRVNTRURfVU5USUxfU0lNRF9DSEVDSworCQkJCQkJCQkgKiBh bmQgY2hlY2tlZCBpZiB3ZSBzaG91bGQgdXNlIFNJTUQgb24gdGhlCisJCQkJCQkJCSAqIHJlc3Qg b2YgdGhlIGZpbGUgKi8KKwlib29sCQl1c2Vfc2ltZDsJCS8qIHVzZSBzaW1kIHRvIHNwZWVkIHVw IGNvcHlpbmcgKi8KIH0gQ29weUZyb21TdGF0ZURhdGE7CiAKIGV4dGVybiB2b2lkIFJlY2VpdmVD b3B5QmVnaW4oQ29weUZyb21TdGF0ZSBjc3RhdGUpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvY29weWZyb20uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tLmMKaW5k ZXggMmFlM2QyYmE4NmUuLjY3MTFjMGNmY2RkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21t YW5kcy9jb3B5ZnJvbS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tLmMKQEAg LTE3MjAsNiArMTcyMCw5IEBAIEJlZ2luQ29weUZyb20oUGFyc2VTdGF0ZSAqcHN0YXRlLAogCWNz dGF0ZS0+Y3VyX2F0dG5hbWUgPSBOVUxMOwogCWNzdGF0ZS0+Y3VyX2F0dHZhbCA9IE5VTEw7CiAJ Y3N0YXRlLT5yZWxuYW1lX29ubHkgPSBmYWxzZTsKKwljc3RhdGUtPnNwZWNpYWxfY2hhcnNfZW5j b3VudGVyZWQgPSAwOworCWNzdGF0ZS0+Y2hlY2tlZF9zaW1kID0gZmFsc2U7CisJY3N0YXRlLT51 c2Vfc2ltZCA9IGZhbHNlOwogCiAJLyoKIAkgKiBBbGxvY2F0ZSBidWZmZXJzIGZvciB0aGUgaW5w dXQgcGlwZWxpbmUuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbXBh cnNlLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbXBhcnNlLmMKaW5kZXggNjczZDY2 ODNhNzIuLmQ1NDg2NzRjOGZmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5 ZnJvbXBhcnNlLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb21wYXJzZS5jCkBA IC0xMzQ2LDYgKzEzNDYsMjggQEAgQ29weVJlYWRMaW5lVGV4dChDb3B5RnJvbVN0YXRlIGNzdGF0 ZSwgYm9vbCBpc19jc3YpCiAKICNpZm5kZWYgVVNFX05PX1NJTUQKIAorCQkvKgorCQkgKiBXYWl0 IHVudGlsIHdlIGhhdmUgcmVhZCBtb3JlIHRoYW4gQllURVNfUFJPQ0VTU0VEX1VOVElMX1NJTURf Q0hFQ0suCisJCSAqIGNzdGF0ZS0+Ynl0ZXNfcHJvY2Vzc2VkIHdpbGwgZ3JvdyBhbiB1bnByZWRp Y3RhYmxlIGFtb3VudCB3aXRoIGVhY2gKKwkJICogY2FsbCB0byB0aGlzIGZ1bmN0aW9uLCBzbyBq dXN0IHdhaXQgdW50aWwgd2UgaGF2ZSBjcm9zc2VkIHRoZQorCQkgKiB0aHJlc2hvbGQuCisJCSAq LworCQlpZiAoIWNzdGF0ZS0+Y2hlY2tlZF9zaW1kICYmIGNzdGF0ZS0+Ynl0ZXNfcHJvY2Vzc2Vk ID4gQllURVNfUFJPQ0VTU0VEX1VOVElMX1NJTURfQ0hFQ0spCisJCXsKKwkJCWNzdGF0ZS0+Y2hl Y2tlZF9zaW1kID0gdHJ1ZTsKKworCQkJLyoKKwkJCSAqIElmIHdlIGhhdmUgbm90IHJlYWQgdG9v IG1hbnkgc3BlY2lhbCBjaGFyYWN0ZXJzCisJCQkgKiAoU1BFQ0lBTF9DSEFSX1NJTURfVEhSRVNI T0xEKSB0aGVuIHN0YXJ0IHVzaW5nIFNJTUQgdG8gc3BlZWQgdXAKKwkJCSAqIHByb2Nlc3Npbmcu IFRoaXMgaGV1cmlzdGljIGFzc3VtZXMgdGhhdCBpbnB1dCBkb2VzIG5vdCB2YXJ5IHRvbworCQkJ ICogbXVjaCBmcm9tIGxpbmUgdG8gbGluZSBhbmQgdGhhdCBudW1iZXIgb2Ygc3BlY2lhbCBjaGFy YWN0ZXJzCisJCQkgKiBlbmNvdW50ZXJlZCBpbiB0aGUgZmlyc3QgQllURVNfUFJPQ0VTU0VEX1VO VElMX1NJTURfQ0hFQ0sgYXJlCisJCQkgKiBpbmRpY2l0aXZlIG9mIHRoZSB3aG9sZSBmaWxlLgor CQkJICovCisJCQlpZiAoY3N0YXRlLT5zcGVjaWFsX2NoYXJzX2VuY291bnRlcmVkIDwgU1BFQ0lB TF9DSEFSX1NJTURfVEhSRVNIT0xEKQorCQkJCWNzdGF0ZS0+dXNlX3NpbWQgPSB0cnVlOworCQl9 CisKIAkJLyoKIAkJICogVXNlIFNJTUQgaW5zdHJ1Y3Rpb25zIHRvIGVmZmljaWVudGx5IHNjYW4g dGhlIGlucHV0IGJ1ZmZlciBmb3IKIAkJICogc3BlY2lhbCBjaGFyYWN0ZXJzIChlLmcuLCBuZXds aW5lLCBjYXJyaWFnZSByZXR1cm4sIHF1b3RlLCBhbmQKQEAgLTEzNTgsNyArMTM4MCw3IEBAIENv cHlSZWFkTGluZVRleHQoQ29weUZyb21TdGF0ZSBjc3RhdGUsIGJvb2wgaXNfY3N2KQogCQkgKiBz ZXF1ZW50aWFsbHkuIC0gVGhlIHJlbWFpbmluZyBidWZmZXIgaXMgc21hbGxlciB0aGFuIG9uZSB2 ZWN0b3IKIAkJICogd2lkdGggKHNpemVvZihWZWN0b3I4KSk7IFNJTUQgb3BlcmF0ZXMgb24gZml4 ZWQtc2l6ZSBjaHVua3MuCiAJCSAqLwotCQlpZiAoIWxhc3Rfd2FzX2VzYyAmJiBjb3B5X2J1Zl9s ZW4gLSBpbnB1dF9idWZfcHRyID49IHNpemVvZihWZWN0b3I4KSkKKwkJaWYgKGNzdGF0ZS0+dXNl X3NpbWQgJiYgIWxhc3Rfd2FzX2VzYyAmJiBjb3B5X2J1Zl9sZW4gLSBpbnB1dF9idWZfcHRyID49 IHNpemVvZihWZWN0b3I4KSkKIAkJewogCQkJVmVjdG9yOAkJY2h1bms7CiAJCQlWZWN0b3I4CQlt YXRjaCA9IHZlY3RvcjhfYnJvYWRjYXN0KDApOwpAQCAtMTQxNSw2ICsxNDM3LDcgQEAgQ29weVJl YWRMaW5lVGV4dChDb3B5RnJvbVN0YXRlIGNzdGF0ZSwgYm9vbCBpc19jc3YpCiAJCQkgKi8KIAkJ CWlmIChjID09ICdccicpCiAJCQl7CisJCQkJY3N0YXRlLT5zcGVjaWFsX2NoYXJzX2VuY291bnRl cmVkKys7CiAJCQkJSUZfTkVFRF9SRUZJTExfQU5EX05PVF9FT0ZfQ09OVElOVUUoMCk7CiAJCQl9 CiAKQEAgLTE0NDYsNiArMTQ2OSw3IEBAIENvcHlSZWFkTGluZVRleHQoQ29weUZyb21TdGF0ZSBj c3RhdGUsIGJvb2wgaXNfY3N2KQogCQkvKiBQcm9jZXNzIFxyICovCiAJCWlmIChjID09ICdccicg JiYgKCFpc19jc3YgfHwgIWluX3F1b3RlKSkKIAkJeworCQkJY3N0YXRlLT5zcGVjaWFsX2NoYXJz X2VuY291bnRlcmVkKys7CiAJCQkvKiBDaGVjayBmb3IgXHJcbiBvbiBmaXJzdCBsaW5lLCBfYW5k XyBoYW5kbGUgXHJcbi4gKi8KIAkJCWlmIChjc3RhdGUtPmVvbF90eXBlID09IEVPTF9VTktOT1dO IHx8CiAJCQkJY3N0YXRlLT5lb2xfdHlwZSA9PSBFT0xfQ1JOTCkKQEAgLTE1MDIsNiArMTUyNiw3 IEBAIENvcHlSZWFkTGluZVRleHQoQ29weUZyb21TdGF0ZSBjc3RhdGUsIGJvb2wgaXNfY3N2KQog CQkvKiBQcm9jZXNzIFxuICovCiAJCWlmIChjID09ICdcbicgJiYgKCFpc19jc3YgfHwgIWluX3F1 b3RlKSkKIAkJeworCQkJY3N0YXRlLT5zcGVjaWFsX2NoYXJzX2VuY291bnRlcmVkKys7CiAJCQlp ZiAoY3N0YXRlLT5lb2xfdHlwZSA9PSBFT0xfQ1IgfHwgY3N0YXRlLT5lb2xfdHlwZSA9PSBFT0xf Q1JOTCkKIAkJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9CQURfQ09Q WV9GSUxFX0ZPUk1BVCksCkBAIC0xNTI0LDYgKzE1NDksOCBAQCBDb3B5UmVhZExpbmVUZXh0KENv cHlGcm9tU3RhdGUgY3N0YXRlLCBib29sIGlzX2NzdikKIAkJewogCQkJY2hhcgkJYzI7CiAKKwkJ CWNzdGF0ZS0+c3BlY2lhbF9jaGFyc19lbmNvdW50ZXJlZCsrOworCiAJCQlJRl9ORUVEX1JFRklM TF9BTkRfTk9UX0VPRl9DT05USU5VRSgwKTsKIAkJCUlGX05FRURfUkVGSUxMX0FORF9FT0ZfQlJF QUsoMCk7CiAKLS0gCjIuNTEuMAoK --0000000000003b6b1f064597c4f2 Content-Type: text/x-patch; charset="US-ASCII"; name="v4.2-0003-Feedback-Changes.patch" Content-Disposition: attachment; filename="v4.2-0003-Feedback-Changes.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mizygsog2 RnJvbSAxMjg1NzRmODA5NjNjNWI1MzJjOGFhN2U3ZmFkODRhN2U2ZTIwODc0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOYXppciBCaWxhbCBZYXZ1eiA8YnlhdnV6ODFAZ21haWwuY29t PgpEYXRlOiBUdWUsIDkgRGVjIDIwMjUgMTU6MzI6MTAgKzAzMDAKU3ViamVjdDogW1BBVENIIHY0 LjIgMy8zXSBGZWVkYmFjayAvIENoYW5nZXMKCi0tLQogc3JjL2luY2x1ZGUvY29tbWFuZHMvY29w eWZyb21faW50ZXJuYWwuaCB8ICA5ICstLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb20u YyAgICAgICAgICB8ICAxICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tcGFyc2UuYyAg ICAgfCA5MiArKysrKysrKysrKysrKystLS0tLS0tLS0KIDMgZmlsZXMgY2hhbmdlZCwgNjUgaW5z ZXJ0aW9ucygrKSwgMzcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29t bWFuZHMvY29weWZyb21faW50ZXJuYWwuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NvcHlmcm9t X2ludGVybmFsLmgKaW5kZXggMjE1MjE1ZjkwOWYuLjM5NzcyMGJmODc1IDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9jb21tYW5kcy9jb3B5ZnJvbV9pbnRlcm5hbC5oCisrKyBiL3NyYy9pbmNsdWRl L2NvbW1hbmRzL2NvcHlmcm9tX2ludGVybmFsLmgKQEAgLTE4MywxMiArMTgzLDEzIEBAIHR5cGVk ZWYgc3RydWN0IENvcHlGcm9tU3RhdGVEYXRhCiAJdWludDY0CQlieXRlc19wcm9jZXNzZWQ7CS8q IG51bWJlciBvZiBieXRlcyBwcm9jZXNzZWQgc28gZmFyICovCiAKIAkvKiB0aGUgYW1vdW50IG9m IGJ5dGVzIHRvIHJlYWQgdW50aWwgY2hlY2tpbmcgaWYgd2Ugc2hvdWxkIHRyeSBzaW1kICovCi0j ZGVmaW5lIEJZVEVTX1BST0NFU1NFRF9VTlRJTF9TSU1EX0NIRUNLIDEwMDAwMAotCS8qIHRoZSBu dW1iZXIgb2Ygc3BlY2lhbCBjaGFycyByZWFkIGJlbG93IHdoaWNoIHdlIHVzZSBzaW1kICovCi0j ZGVmaW5lIFNQRUNJQUxfQ0hBUl9TSU1EX1RIUkVTSE9MRCAyMDAwMAorI2RlZmluZSBDSEFSU19Q Uk9DRVNTRURfVU5USUxfU0lNRF9DSEVDSyAxMDAwMDAKKwkvKiB0aGUgcmF0aW8gb2Ygc3BlY2lh bCBjaGFycyByZWFkIGJlbG93IHdoaWNoIHdlIHVzZSBzaW1kICovCisjZGVmaW5lIFNQRUNJQUxf Q0hBUl9TSU1EX1JBVElPIDQKKwl1aW50NjQJCWNoYXJzX3Byb2Nlc3NlZDsKIAl1aW50NjQJCXNw ZWNpYWxfY2hhcnNfZW5jb3VudGVyZWQ7CS8qIG51bWJlciBvZiBzcGVjaWFsIGNoYXJzCiAJCQkJ CQkJCQkJCSAqIGVuY291bnRlcmVkIHNvIGZhciAqLwotCWJvb2wJCWNoZWNrZWRfc2ltZDsJLyog d2UgcmVhZCBCWVRFU19QUk9DRVNTRURfVU5USUxfU0lNRF9DSEVDSworCWJvb2wJCWNoZWNrZWRf c2ltZDsJLyogd2UgcmVhZCBDSEFSU19QUk9DRVNTRURfVU5USUxfU0lNRF9DSEVDSwogCQkJCQkJ CQkgKiBhbmQgY2hlY2tlZCBpZiB3ZSBzaG91bGQgdXNlIFNJTUQgb24gdGhlCiAJCQkJCQkJCSAq IHJlc3Qgb2YgdGhlIGZpbGUgKi8KIAlib29sCQl1c2Vfc2ltZDsJCS8qIHVzZSBzaW1kIHRvIHNw ZWVkIHVwIGNvcHlpbmcgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlm cm9tLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbS5jCmluZGV4IDY3MTFjMGNmY2Rk Li4yYjc3YmEyNTU2YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb20u YworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbS5jCkBAIC0xNzIwLDYgKzE3MjAs NyBAQCBCZWdpbkNvcHlGcm9tKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAljc3RhdGUtPmN1cl9hdHRu YW1lID0gTlVMTDsKIAljc3RhdGUtPmN1cl9hdHR2YWwgPSBOVUxMOwogCWNzdGF0ZS0+cmVsbmFt ZV9vbmx5ID0gZmFsc2U7CisJY3N0YXRlLT5jaGFyc19wcm9jZXNzZWQgPSAwOwogCWNzdGF0ZS0+ c3BlY2lhbF9jaGFyc19lbmNvdW50ZXJlZCA9IDA7CiAJY3N0YXRlLT5jaGVja2VkX3NpbWQgPSBm YWxzZTsKIAljc3RhdGUtPnVzZV9zaW1kID0gZmFsc2U7CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy9jb3B5ZnJvbXBhcnNlLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJv bXBhcnNlLmMKaW5kZXggZDU0ODY3NGM4ZmYuLjcyMDIyMjE1MmRhIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbXBhcnNlLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFu ZHMvY29weWZyb21wYXJzZS5jCkBAIC0xNDMsNyArMTQzLDcgQEAgc3RhdGljIGNvbnN0IGNoYXIg QmluYXJ5U2lnbmF0dXJlWzExXSA9ICJQR0NPUFlcblwzNzdcclxuXDAiOwogCiAvKiBub24tZXhw b3J0IGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KIHN0YXRpYyBib29sIENvcHlSZWFkTGluZShDb3B5 RnJvbVN0YXRlIGNzdGF0ZSwgYm9vbCBpc19jc3YpOwotc3RhdGljIGJvb2wgQ29weVJlYWRMaW5l VGV4dChDb3B5RnJvbVN0YXRlIGNzdGF0ZSwgYm9vbCBpc19jc3YpOworc3RhdGljIHBnX2F0dHJp YnV0ZV9hbHdheXNfaW5saW5lIGJvb2wgQ29weVJlYWRMaW5lVGV4dChDb3B5RnJvbVN0YXRlIGNz dGF0ZSwgYm9vbCBpc19jc3YsIGJvb2wgdXNlX3NpbWQpOwogc3RhdGljIGludAlDb3B5UmVhZEF0 dHJpYnV0ZXNUZXh0KENvcHlGcm9tU3RhdGUgY3N0YXRlKTsKIHN0YXRpYyBpbnQJQ29weVJlYWRB dHRyaWJ1dGVzQ1NWKENvcHlGcm9tU3RhdGUgY3N0YXRlKTsKIHN0YXRpYyBEYXR1bSBDb3B5UmVh ZEJpbmFyeUF0dHJpYnV0ZShDb3B5RnJvbVN0YXRlIGNzdGF0ZSwgRm1nckluZm8gKmZsaW5mbywK QEAgLTExNzMsOCArMTE3Myw0MCBAQCBDb3B5UmVhZExpbmUoQ29weUZyb21TdGF0ZSBjc3RhdGUs IGJvb2wgaXNfY3N2KQogCXJlc2V0U3RyaW5nSW5mbygmY3N0YXRlLT5saW5lX2J1Zik7CiAJY3N0 YXRlLT5saW5lX2J1Zl92YWxpZCA9IGZhbHNlOwogCi0JLyogUGFyc2UgZGF0YSBhbmQgdHJhbnNm ZXIgaW50byBsaW5lX2J1ZiAqLwotCXJlc3VsdCA9IENvcHlSZWFkTGluZVRleHQoY3N0YXRlLCBp c19jc3YpOworI2lmbmRlZiBVU0VfTk9fU0lNRAorCisJLyoKKwkgKiBXYWl0IHVudGlsIHdlIGhh dmUgcmVhZCBtb3JlIHRoYW4gQ0hBUlNfUFJPQ0VTU0VEX1VOVElMX1NJTURfQ0hFQ0suCisJICog Y3N0YXRlLT5ieXRlc19wcm9jZXNzZWQgd2lsbCBncm93IGFuIHVucHJlZGljdGFibGUgYW1vdW50 IHdpdGggZWFjaAorCSAqIGNhbGwgdG8gdGhpcyBmdW5jdGlvbiwgc28ganVzdCB3YWl0IHVudGls IHdlIGhhdmUgY3Jvc3NlZCB0aGUKKwkgKiB0aHJlc2hvbGQuCisJICovCisJaWYgKCFjc3RhdGUt PmNoZWNrZWRfc2ltZCAmJiBjc3RhdGUtPmNoYXJzX3Byb2Nlc3NlZCA+IENIQVJTX1BST0NFU1NF RF9VTlRJTF9TSU1EX0NIRUNLKQorCXsKKwkJY3N0YXRlLT5jaGVja2VkX3NpbWQgPSB0cnVlOwor CisJCS8qCisJCSAqIElmIHdlIGhhdmUgbm90IHJlYWQgdG9vIG1hbnkgc3BlY2lhbCBjaGFyYWN0 ZXJzIHRoZW4gc3RhcnQgdXNpbmcKKwkJICogU0lNRCB0byBzcGVlZCB1cCBwcm9jZXNzaW5nLiBU aGlzIGhldXJpc3RpYyBhc3N1bWVzIHRoYXQgaW5wdXQgZG9lcworCQkgKiBub3QgdmFyeSB0b28g bXVjaCBmcm9tIGxpbmUgdG8gbGluZSBhbmQgdGhhdCBudW1iZXIgb2Ygc3BlY2lhbAorCQkgKiBj aGFyYWN0ZXJzIGVuY291bnRlcmVkIGluIHRoZSBmaXJzdAorCQkgKiBDSEFSU19QUk9DRVNTRURf VU5USUxfU0lNRF9DSEVDSyBhcmUgaW5kaWNpdGl2ZSBvZiB0aGUgd2hvbGUgZmlsZS4KKwkJICov CisJCWlmIChjc3RhdGUtPmNoYXJzX3Byb2Nlc3NlZCAvIFNQRUNJQUxfQ0hBUl9TSU1EX1JBVElP ID49IGNzdGF0ZS0+c3BlY2lhbF9jaGFyc19lbmNvdW50ZXJlZCkKKwkJeworCQkJY3N0YXRlLT51 c2Vfc2ltZCA9IHRydWU7CisJCX0KKwl9CisjZW5kaWYKKworCS8qCisJICogUGFyc2UgZGF0YSBh bmQgdHJhbnNmZXIgaW50byBsaW5lX2J1Zi4gVG8gZ2V0IGJlbmVmaXQgZnJvbSBpbmxpbmluZywK KwkgKiBjYWxsIENvcHlSZWFkTGluZVRleHQoKSB3aXRoIHRoZSBjb25zdGFudCBib29sZWFuIHZh cmlhYmxlcy4KKwkgKi8KKwlpZiAoY3N0YXRlLT51c2Vfc2ltZCkKKwkJcmVzdWx0ID0gQ29weVJl YWRMaW5lVGV4dChjc3RhdGUsIGlzX2NzdiwgdHJ1ZSk7CisJZWxzZQorCQlyZXN1bHQgPSBDb3B5 UmVhZExpbmVUZXh0KGNzdGF0ZSwgaXNfY3N2LCBmYWxzZSk7CiAKIAlpZiAocmVzdWx0KQogCXsK QEAgLTEyNDEsMTEgKzEyNzMsMTIgQEAgQ29weVJlYWRMaW5lKENvcHlGcm9tU3RhdGUgY3N0YXRl LCBib29sIGlzX2NzdikKIC8qCiAgKiBDb3B5UmVhZExpbmVUZXh0IC0gaW5uZXIgbG9vcCBvZiBD b3B5UmVhZExpbmUgZm9yIHRleHQgbW9kZQogICovCi1zdGF0aWMgYm9vbAotQ29weVJlYWRMaW5l VGV4dChDb3B5RnJvbVN0YXRlIGNzdGF0ZSwgYm9vbCBpc19jc3YpCitzdGF0aWMgcGdfYXR0cmli dXRlX2Fsd2F5c19pbmxpbmUgYm9vbAorQ29weVJlYWRMaW5lVGV4dChDb3B5RnJvbVN0YXRlIGNz dGF0ZSwgYm9vbCBpc19jc3YsIGJvb2wgdXNlX3NpbWQpCiB7CiAJY2hhcgkgICAqY29weV9pbnB1 dF9idWY7CiAJaW50CQkJaW5wdXRfYnVmX3B0cjsKKwlpbnQJCQlzdGFydF9pbnB1dF9idWZfcHRy OwogCWludAkJCWNvcHlfYnVmX2xlbjsKIAlib29sCQluZWVkX2RhdGEgPSBmYWxzZTsKIAlib29s CQloaXRfZW9mID0gZmFsc2U7CkBAIC0xMzA5LDYgKzEzNDIsNyBAQCBDb3B5UmVhZExpbmVUZXh0 KENvcHlGcm9tU3RhdGUgY3N0YXRlLCBib29sIGlzX2NzdikKIAlpbnB1dF9idWZfcHRyID0gY3N0 YXRlLT5pbnB1dF9idWZfaW5kZXg7CiAJY29weV9idWZfbGVuID0gY3N0YXRlLT5pbnB1dF9idWZf bGVuOwogCisJc3RhcnRfaW5wdXRfYnVmX3B0ciA9IGlucHV0X2J1Zl9wdHI7CiAJZm9yICg7OykK IAl7CiAJCWludAkJCXByZXZfcmF3X3B0cjsKQEAgLTEzMjcsOSArMTM2MSwxMSBAQCBDb3B5UmVh ZExpbmVUZXh0KENvcHlGcm9tU3RhdGUgY3N0YXRlLCBib29sIGlzX2NzdikKIAkJCVJFRklMTF9M SU5FQlVGOwogCiAJCQlDb3B5TG9hZElucHV0QnVmKGNzdGF0ZSk7CisJCQljc3RhdGUtPmNoYXJz X3Byb2Nlc3NlZCArPSAoaW5wdXRfYnVmX3B0ciAtIHN0YXJ0X2lucHV0X2J1Zl9wdHIpOwogCQkJ LyogdXBkYXRlIG91ciBsb2NhbCB2YXJpYWJsZXMgKi8KIAkJCWhpdF9lb2YgPSBjc3RhdGUtPmlu cHV0X3JlYWNoZWRfZW9mOwogCQkJaW5wdXRfYnVmX3B0ciA9IGNzdGF0ZS0+aW5wdXRfYnVmX2lu ZGV4OworCQkJc3RhcnRfaW5wdXRfYnVmX3B0ciA9IGlucHV0X2J1Zl9wdHI7CiAJCQljb3B5X2J1 Zl9sZW4gPSBjc3RhdGUtPmlucHV0X2J1Zl9sZW47CiAKIAkJCS8qCkBAIC0xMzQ2LDI4ICsxMzgy LDYgQEAgQ29weVJlYWRMaW5lVGV4dChDb3B5RnJvbVN0YXRlIGNzdGF0ZSwgYm9vbCBpc19jc3Yp CiAKICNpZm5kZWYgVVNFX05PX1NJTUQKIAotCQkvKgotCQkgKiBXYWl0IHVudGlsIHdlIGhhdmUg cmVhZCBtb3JlIHRoYW4gQllURVNfUFJPQ0VTU0VEX1VOVElMX1NJTURfQ0hFQ0suCi0JCSAqIGNz dGF0ZS0+Ynl0ZXNfcHJvY2Vzc2VkIHdpbGwgZ3JvdyBhbiB1bnByZWRpY3RhYmxlIGFtb3VudCB3 aXRoIGVhY2gKLQkJICogY2FsbCB0byB0aGlzIGZ1bmN0aW9uLCBzbyBqdXN0IHdhaXQgdW50aWwg d2UgaGF2ZSBjcm9zc2VkIHRoZQotCQkgKiB0aHJlc2hvbGQuCi0JCSAqLwotCQlpZiAoIWNzdGF0 ZS0+Y2hlY2tlZF9zaW1kICYmIGNzdGF0ZS0+Ynl0ZXNfcHJvY2Vzc2VkID4gQllURVNfUFJPQ0VT U0VEX1VOVElMX1NJTURfQ0hFQ0spCi0JCXsKLQkJCWNzdGF0ZS0+Y2hlY2tlZF9zaW1kID0gdHJ1 ZTsKLQotCQkJLyoKLQkJCSAqIElmIHdlIGhhdmUgbm90IHJlYWQgdG9vIG1hbnkgc3BlY2lhbCBj aGFyYWN0ZXJzCi0JCQkgKiAoU1BFQ0lBTF9DSEFSX1NJTURfVEhSRVNIT0xEKSB0aGVuIHN0YXJ0 IHVzaW5nIFNJTUQgdG8gc3BlZWQgdXAKLQkJCSAqIHByb2Nlc3NpbmcuIFRoaXMgaGV1cmlzdGlj IGFzc3VtZXMgdGhhdCBpbnB1dCBkb2VzIG5vdCB2YXJ5IHRvbwotCQkJICogbXVjaCBmcm9tIGxp bmUgdG8gbGluZSBhbmQgdGhhdCBudW1iZXIgb2Ygc3BlY2lhbCBjaGFyYWN0ZXJzCi0JCQkgKiBl bmNvdW50ZXJlZCBpbiB0aGUgZmlyc3QgQllURVNfUFJPQ0VTU0VEX1VOVElMX1NJTURfQ0hFQ0sg YXJlCi0JCQkgKiBpbmRpY2l0aXZlIG9mIHRoZSB3aG9sZSBmaWxlLgotCQkJICovCi0JCQlpZiAo Y3N0YXRlLT5zcGVjaWFsX2NoYXJzX2VuY291bnRlcmVkIDwgU1BFQ0lBTF9DSEFSX1NJTURfVEhS RVNIT0xEKQotCQkJCWNzdGF0ZS0+dXNlX3NpbWQgPSB0cnVlOwotCQl9Ci0KIAkJLyoKIAkJICog VXNlIFNJTUQgaW5zdHJ1Y3Rpb25zIHRvIGVmZmljaWVudGx5IHNjYW4gdGhlIGlucHV0IGJ1ZmZl ciBmb3IKIAkJICogc3BlY2lhbCBjaGFyYWN0ZXJzIChlLmcuLCBuZXdsaW5lLCBjYXJyaWFnZSBy ZXR1cm4sIHF1b3RlLCBhbmQKQEAgLTEzODAsNyArMTM5NCw3IEBAIENvcHlSZWFkTGluZVRleHQo Q29weUZyb21TdGF0ZSBjc3RhdGUsIGJvb2wgaXNfY3N2KQogCQkgKiBzZXF1ZW50aWFsbHkuIC0g VGhlIHJlbWFpbmluZyBidWZmZXIgaXMgc21hbGxlciB0aGFuIG9uZSB2ZWN0b3IKIAkJICogd2lk dGggKHNpemVvZihWZWN0b3I4KSk7IFNJTUQgb3BlcmF0ZXMgb24gZml4ZWQtc2l6ZSBjaHVua3Mu CiAJCSAqLwotCQlpZiAoY3N0YXRlLT51c2Vfc2ltZCAmJiAhbGFzdF93YXNfZXNjICYmIGNvcHlf YnVmX2xlbiAtIGlucHV0X2J1Zl9wdHIgPj0gc2l6ZW9mKFZlY3RvcjgpKQorCQlpZiAodXNlX3Np bWQgJiYgIWxhc3Rfd2FzX2VzYyAmJiBjb3B5X2J1Zl9sZW4gLSBpbnB1dF9idWZfcHRyID49IHNp emVvZihWZWN0b3I4KSkKIAkJewogCQkJVmVjdG9yOAkJY2h1bms7CiAJCQlWZWN0b3I4CQltYXRj aCA9IHZlY3RvcjhfYnJvYWRjYXN0KDApOwpAQCAtMTQyNyw2ICsxNDQxLDIxIEBAIENvcHlSZWFk TGluZVRleHQoQ29weUZyb21TdGF0ZSBjc3RhdGUsIGJvb2wgaXNfY3N2KQogCQlwcmV2X3Jhd19w dHIgPSBpbnB1dF9idWZfcHRyOwogCQljID0gY29weV9pbnB1dF9idWZbaW5wdXRfYnVmX3B0cisr XTsKIAorCQkvKiBVc2UgdGhpcyBjYWxjdWxhdGlvbiBkZWNpZGUgd2hldGhlciB0byB1c2UgU0lN RCBsYXRlciAqLworCQlpZiAoIXVzZV9zaW1kICYmIHVubGlrZWx5KCFjc3RhdGUtPmNoZWNrZWRf c2ltZCkpCisJCXsKKwkJCWlmIChpc19jc3YpCisJCQl7CisJCQkJaWYgKGMgPT0gJ1xyJyB8fCBj ID09ICdcbicgfHwgYyA9PSBxdW90ZWMgfHwgYyA9PSBlc2NhcGVjKQorCQkJCQljc3RhdGUtPnNw ZWNpYWxfY2hhcnNfZW5jb3VudGVyZWQrKzsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlpZiAo YyA9PSAnXHInIHx8IGMgPT0gJ1xuJyB8fCBjID09ICdcXCcpCisJCQkJCWNzdGF0ZS0+c3BlY2lh bF9jaGFyc19lbmNvdW50ZXJlZCsrOworCQkJfQorCQl9CisKIAkJaWYgKGlzX2NzdikKIAkJewog CQkJLyoKQEAgLTE0MzcsNyArMTQ2Niw2IEBAIENvcHlSZWFkTGluZVRleHQoQ29weUZyb21TdGF0 ZSBjc3RhdGUsIGJvb2wgaXNfY3N2KQogCQkJICovCiAJCQlpZiAoYyA9PSAnXHInKQogCQkJewot CQkJCWNzdGF0ZS0+c3BlY2lhbF9jaGFyc19lbmNvdW50ZXJlZCsrOwogCQkJCUlGX05FRURfUkVG SUxMX0FORF9OT1RfRU9GX0NPTlRJTlVFKDApOwogCQkJfQogCkBAIC0xNDY5LDcgKzE0OTcsNiBA QCBDb3B5UmVhZExpbmVUZXh0KENvcHlGcm9tU3RhdGUgY3N0YXRlLCBib29sIGlzX2NzdikKIAkJ LyogUHJvY2VzcyBcciAqLwogCQlpZiAoYyA9PSAnXHInICYmICghaXNfY3N2IHx8ICFpbl9xdW90 ZSkpCiAJCXsKLQkJCWNzdGF0ZS0+c3BlY2lhbF9jaGFyc19lbmNvdW50ZXJlZCsrOwogCQkJLyog Q2hlY2sgZm9yIFxyXG4gb24gZmlyc3QgbGluZSwgX2FuZF8gaGFuZGxlIFxyXG4uICovCiAJCQlp ZiAoY3N0YXRlLT5lb2xfdHlwZSA9PSBFT0xfVU5LTk9XTiB8fAogCQkJCWNzdGF0ZS0+ZW9sX3R5 cGUgPT0gRU9MX0NSTkwpCkBAIC0xNTI2LDcgKzE1NTMsNiBAQCBDb3B5UmVhZExpbmVUZXh0KENv cHlGcm9tU3RhdGUgY3N0YXRlLCBib29sIGlzX2NzdikKIAkJLyogUHJvY2VzcyBcbiAqLwogCQlp ZiAoYyA9PSAnXG4nICYmICghaXNfY3N2IHx8ICFpbl9xdW90ZSkpCiAJCXsKLQkJCWNzdGF0ZS0+ c3BlY2lhbF9jaGFyc19lbmNvdW50ZXJlZCsrOwogCQkJaWYgKGNzdGF0ZS0+ZW9sX3R5cGUgPT0g RU9MX0NSIHx8IGNzdGF0ZS0+ZW9sX3R5cGUgPT0gRU9MX0NSTkwpCiAJCQkJZXJlcG9ydChFUlJP UiwKIAkJCQkJCShlcnJjb2RlKEVSUkNPREVfQkFEX0NPUFlfRklMRV9GT1JNQVQpLApAQCAtMTU0 OSw4ICsxNTc1LDYgQEAgQ29weVJlYWRMaW5lVGV4dChDb3B5RnJvbVN0YXRlIGNzdGF0ZSwgYm9v bCBpc19jc3YpCiAJCXsKIAkJCWNoYXIJCWMyOwogCi0JCQljc3RhdGUtPnNwZWNpYWxfY2hhcnNf ZW5jb3VudGVyZWQrKzsKLQogCQkJSUZfTkVFRF9SRUZJTExfQU5EX05PVF9FT0ZfQ09OVElOVUUo MCk7CiAJCQlJRl9ORUVEX1JFRklMTF9BTkRfRU9GX0JSRUFLKDApOwogCkBAIC0xNjM1LDYgKzE2 NTksOCBAQCBDb3B5UmVhZExpbmVUZXh0KENvcHlGcm9tU3RhdGUgY3N0YXRlLCBib29sIGlzX2Nz dikKIAkgKi8KIAlSRUZJTExfTElORUJVRjsKIAorCWNzdGF0ZS0+Y2hhcnNfcHJvY2Vzc2VkICs9 IChpbnB1dF9idWZfcHRyIC0gc3RhcnRfaW5wdXRfYnVmX3B0cik7CisKIAlyZXR1cm4gcmVzdWx0 OwogfQogCi0tIAoyLjUxLjAKCg== --0000000000003b6b1f064597c4f2--