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 1vqibW-00GWL4-2G for pgsql-bugs@arkaria.postgresql.org; Fri, 13 Feb 2026 02:08:24 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vqibV-00C20Q-30 for pgsql-bugs@arkaria.postgresql.org; Fri, 13 Feb 2026 02:08:22 +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.96) (envelope-from ) id 1vqibV-00C20I-11 for pgsql-bugs@lists.postgresql.org; Fri, 13 Feb 2026 02:08:22 +0000 Received: from mail-oi1-x233.google.com ([2607:f8b0:4864:20::233]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vqibT-00000000NNm-0Rox for pgsql-bugs@lists.postgresql.org; Fri, 13 Feb 2026 02:08:20 +0000 Received: by mail-oi1-x233.google.com with SMTP id 5614622812f47-463967f35d7so285812b6e.1 for ; Thu, 12 Feb 2026 18:08:19 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1770948499; cv=none; d=google.com; s=arc-20240605; b=iKVgJYThPupHDZ4YipuoJeNUaurdB3/xXaUOBFpRmqFVt+Y35kvxdqrC7KiKg0TgSB IKMpc48ud36bM9uw4ogCAbJGQpZK2q0jnX6NNTaAJAmqDNb0/SAhXItbdtOeL68k5tgB NqgiBOzDAKOnjZB1MnL0BGB9YyClyv7C/HKroarNr6hHBXZJSrIZcItvupnd3dk781um hg9231vSgQs9VRAfgmFfOYTLPfArKD6sIjBdR1t3nar9aHWNjiVFtBzX5jJiiyCy5gO/ WSleOicwyTHZgY6e0hDXA94KvmYukz0+2R51nNmi1bN61kNuNN0+VrWCmkSes0vIp5sK n8kQ== 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=PTAHNn8JtN98AwbpogfBRvBg6i6f0lGT3O8ivwJv9Ro=; fh=UZ2RupGbXr1M5m4uTXiMQoSoiUlO7geb1q/gelp8Hy4=; b=OLPU+IdYvmFNvnRzPxBhK79suN5SuIWTlGXIsf7TsYecjLvrLrmlkgaEnxLMBoIIgf V+wgVXlVu/25HpRFJsPXnftvK6ac8Akb1cjSZ7OZfnNXH+mo78Vkd9NW1fe7DC1Vnafq rj3TxGYk2LAI1fz94jJ8iCp+MlE8VwR88vn9xipbPpTEGTJKoTxaqJSULbQzziF1w6Tu 6/+U6LwuCQsM9+nMvEMJqQHR92wdR0g7NiQu3UAxUOfyMIaydDNfY0X5kJAoySwxw6lJ Uy0J9x65Z2Jy647bWryLxYXjvaDD6KcGRuvTTpDA7VGCgc2cI24/GIdI8sz3jzvGwSRS ENAw==; darn=lists.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=1770948499; x=1771553299; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=PTAHNn8JtN98AwbpogfBRvBg6i6f0lGT3O8ivwJv9Ro=; b=VxTy+2pU9lqK5cwtfzfWFHNQCDqFhhqjpYInQS9SyoNXMeCdD8OW8jm6n7UL5ST0QM PtC2ALMEc/LX/ocTOH/+EKbjAjbof+1y5FEBZtphD+z0eyw4dMd5sfY8bovtLKJqmMtY 4gzsacmSgPL8RBdvUPs7vxIB9LFqD29Kt042YUMxA6HZAHZzMkXzzhv6cra3HvPZus/h s6FJYvbuqB9Jc+jisiD8SYgqozOw+0L2ZSupFHwIB9vgo8OY3A1mn+Gz9uIMScwMvAIA Rdnf29wYU5pQMQqgaSfcljwdv4TqWLx60kL2euZVPBjknHB0oM+Vr5hsiFiUI47s5JkK yZSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770948499; x=1771553299; 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=PTAHNn8JtN98AwbpogfBRvBg6i6f0lGT3O8ivwJv9Ro=; b=jByKEY+W/PUtItxTJ7Gky3qRX5HevaNiYp1gOavjF36XooozQlRbsURZvI+RSm73Qe 8FvEvxePySPX3EURuLL8IoQwEFjkNuc0Z3FXzfhH40LVewmYZssJ1uSvE+Tgytu80A7B Z3OYve/V9DLoqNfu32R/9B8Xj1wqxaEc8/JNwtIHkWAYmGNp8avMSSgtfAqPl0jkqxpm 5tcZBlv4kS0riUgcWy+USRJ569ymoXn6fvDXeBL8/ZcyE4+Kr1UAPktAu+9zvFEH4rBl MJy3TM7i+AVubmTY22cSRJgtNDDSzCTzFH//0m1zGP7uINkhunNIoR7DccBalmjQfYEW kIzA== X-Gm-Message-State: AOJu0YyMWjKmGGISxDd8kTu940ZHbfGyZbtuTRQawDsiCU0Yfpdrc3pd oZ2HBHi889Bn2jsMGNxp2AVSinYuP0GyvS9E+aTfYXIel+G+Ob8t09g7SPF8jgaLo9FoajXDEnM nU0qBp74EcX6AjYgripj4irfp2mbszq0TnxcsgEScQg== X-Gm-Gg: AZuq6aL+KzYTuEAafEAawwiSz3rhbaX79cK/ZxxXcZ7jPXVvudHpG2cBgXEfT1EYuWC gwBAIiIHB0/ILr3k2sc5fvs+OAjaGMKEZrg+P0rfW0JGIHHa1tCZx2b5G57+axh+v2YZEQNz/1v 5OyRuRo+HKJxlbfMWsBfsUKO7VNW9A/e/xzp/6jXuIZ0FAwxUBIEDU7tGAIEP+/L1aB1GnBgAVb rHwyC77yKbiWUe8dhf6DLNjKpr9LoG8prqfZ1cfMDfKPL5vxpEZ4Su3TbNJxPCGCWiV7efFQXyq 1RwJiG2WJzxnoFBQL7E= X-Received: by 2002:a05:6808:c175:b0:45a:552f:bb9b with SMTP id 5614622812f47-4639adb5e36mr369376b6e.31.1770948499054; Thu, 12 Feb 2026 18:08:19 -0800 (PST) MIME-Version: 1.0 References: <40d694df-39fd-4a4a-9459-9d6489165f60@gogi.tv> In-Reply-To: From: surya poondla Date: Thu, 12 Feb 2026 18:08:08 -0800 X-Gm-Features: AZwV_QjgyUSS9TmXsEseHW3iXkPZMCwSOA7ktILLv0GkdV1Mc0tDtCo8fKVxPv0 Message-ID: Subject: Re: Two issues with REFRESH MATERIALIZED VIEW CONCURRENTLY To: Giuliano Gagliardi Cc: pgsql-bugs@lists.postgresql.org Content-Type: multipart/mixed; boundary="00000000000033c68d064aab14fb" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000033c68d064aab14fb Content-Type: multipart/alternative; boundary="00000000000033c68c064aab14f9" --00000000000033c68c064aab14f9 Content-Type: text/plain; charset="UTF-8" Hi All, Right now, I am exploring the issue 2. > I am not sure if anyone else has submitted a patch for issue 2. I don't see any updates from the mailing list yet. I guess the mailing list has some delays, apologies if my efforts look duplicated to other people's efforts. I have a potential patch for issue 2. I was able to reproduce the issue, saw the performance degradation, and, with my patch (attached) I see an improvement in the REFRESH MATERIALIZED VIEW CONCURRENTLY. The main crux of issue 2 is: when a materialized view has unique index on a nullable column, and when we did REFRESH MATERIALIZED VIEW CONCURRENTLY it would include that column in the FULL OUTER JOIN condition used to detect changes. The nullable column was showing severe performance degradation because NULL = NULL comparisons evaluate to NULL, making all rows appear different even when unchanged! The fix I explored is to skip nullable columns when building the FULL OUTER JOIN conditions. Only include columns with NOT NULL constraints from unique indexes. The record equality operator (*=) is always included and handles nullable columns correctly. Here is the output and performance improvement: postgres=# \timing on Timing is on. postgres=# DROP MATERIALIZED VIEW IF EXISTS s CASCADE; NOTICE: materialized view "s" does not exist, skipping DROP MATERIALIZED VIEW Time: 0.858 ms postgres=# postgres=# CREATE MATERIALIZED VIEW s AS SELECT generate_series as x, null as y FROM generate_series(1, 1000000); SELECT 1000000 Time: 1076.254 ms (00:01.076) postgres=# postgres=# CREATE UNIQUE INDEX ON s(x); CREATE INDEX Time: 375.026 ms postgres=# REFRESH MATERIALIZED VIEW CONCURRENTLY s; REFRESH MATERIALIZED VIEW Time: 3807.143 ms (00:03.807) postgres=# CREATE UNIQUE INDEX ON s(y); CREATE INDEX Time: 331.382 ms postgres=# REFRESH MATERIALIZED VIEW CONCURRENTLY s; REFRESH MATERIALIZED VIEW Time: 3636.049 ms (00:03.636) postgres=# As we can see the REFRESH MATERIALIZED VIEW CONCURRENTLY now takes 3636.049 ms With the current patch for issue 2, there is a trade-off. The fix skips nullable columns from the join condition to avoid slowness when NULLs exist (9s vs 3s in testing). This may slightly slow down cases where nullable columns (unique index) never contain NULLs. Users can restore full performance by adding the NOT NULL constraints to the column if they know there will never be any nulls on that column. I would love to hear any feedback on this tradeoff and am happy to implement relevant changes. Note: The attached patch addresses both issue 1, issue 2. Regards, Surya Poondla. --00000000000033c68c064aab14f9 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi All,

Right now, I am exp= loring the issue 2.

I am not sure if anyone else has submitted a patch for issue 2. I don'= t see any updates from the mailing list yet. I guess the mailing list has s= ome delays, apologies if my efforts look duplicated to=C2=A0other=C2=A0peop= le's efforts.=C2=A0

I have a potential patch for issue 2.
I w= as able to reproduce the issue, saw the performance=C2=A0degradation, and, = with my patch (attached) I see an improvement=C2=A0in the=C2=A0REFRESH MATE= RIALIZED VIEW CONCURRENTLY.

The main crux of issue 2 is: when a mate= rialized view has unique index on a nullable column, and when we did REFRES= H MATERIALIZED VIEW CONCURRENTLY it would include that column in the FULL O= UTER
JOIN condition used to detect changes.
The nullable column was = showing severe performance degradation because NULL =3D NULL comparisons ev= aluate to NULL, making all rows appear different even when unchanged!
=

The fix I explored is to skip nullable columns when bui= lding the FULL OUTER JOIN conditions. Only include columns with NOT NULL co= nstraints from unique indexes. The record equality operator (*=3D) is alway= s included and handles nullable columns correctly.

Here is the outpu= t and performance improvement:

postg= res=3D# \timing on

Timin= g is on.

postg= res=3D# DROP MATERIALIZED VIEW IF EXISTS s CASCADE;

NOTIC= E:=C2=A0 materialized vi= ew "s" does not exist, skipping

DROP = MATERIALIZED VIEW

Time:= 0.858 ms

postg= res=3D#

postg= res=3D# CREATE MATERIALIZED VIEW s AS SELECT generate_series as x, null as = y FROM generate_series(1, 1000000);

SELEC= T 1000000

Time:= 1076.254 ms (00:01.076)

postg= res=3D#

postg= res=3D# CREATE UNIQUE INDEX ON s(x);

CREAT= E INDEX

Time:= 375.026 ms

postg= res=3D# REFRESH MATERIALIZED VIEW CONCURRENTLY s;

REFRE= SH MATERIALIZED VIEW

Time:= 3807.143 ms (00:03.807)

postg= res=3D# CREATE UNIQUE INDEX ON s(y);

CREAT= E INDEX

Time:= 331.382 ms

postg= res=3D# REFRESH MATERIALIZED VIEW CONCURRENTLY s;

REFRE= SH MATERIALIZED VIEW

Time:= 3636.049 ms (00:03.636)

postg= res=3D#

As we can see the=C2=A0REFRESH MATERIALIZED VIEW=C2=A0CO= NCURRENTLY now takes=C2=A03636.049 ms

With the current patc= h for issue 2, there is a trade-off.
The fix skips nullable columns from= the join condition to avoid slowness when NULLs exist (9s vs 3s in testing= ). This may slightly slow down cases where nullable columns (unique index) = never contain NULLs.
Users can restore full performance by adding the NO= T NULL constraints to the column if they know there will never be any nulls= on that column.

I would love to hear any feedback on this tradeoff = and am happy to implement relevant changes.

Note: The attache= d patch addresses both issue 1, issue 2.

Regards,
Sury= a Poondla.

--00000000000033c68c064aab14f9-- --00000000000033c68d064aab14fb Content-Type: application/octet-stream; name="0002-Fix-REFRESH-MATERIALIZED-VIEW-CONCURRENTLY-NULL-hand.patch" Content-Disposition: attachment; filename="0002-Fix-REFRESH-MATERIALIZED-VIEW-CONCURRENTLY-NULL-hand.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlk8njh60 RnJvbSA2MGUyMGI1OTM0NmI2ZTYzMWM3YmVhNjUxN2RkNTVkOWI0NzY0MTkyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBzcG9vbmRsYSA8c19wb29uZGxhQGFwcGxlLmNvbT4KRGF0ZTog V2VkLCAxMSBGZWIgMjAyNiAxNjowNjo1NiAtMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjJdIEZpeCBS RUZSRVNIIE1BVEVSSUFMSVpFRCBWSUVXIENPTkNVUlJFTlRMWSwgTlVMTCBoYW5kbGluZwogYnVn cy4KCkJ1ZyAxOiBSRUZSRVNIIE1BVEVSSUFMSVpFRCBWSUVXIENPTkNVUlJFTlRMWSBkb2Vzbid0 IHRocm93IGV4cGVjdGVkIGVycm9yIGFzIFJFRlJFU0ggTUFURVJJQUxJWkVEIFZJRVcKSXNzdWU6 ClJFRlJFU0ggTUFURVJJQUxJWkVEIFZJRVcgQ09OQ1VSUkVOVExZIHdhcyBpbmNvcnJlY3RseSBz a2lwcGluZyBkdXBsaWNhdGUKZGV0ZWN0aW9uIGZvciByb3dzIGNvbnRhaW5pbmcgYW55IE5VTEwg dmFsdWVzLiBUaGlzIHdvdWxkIGNhdXNlIHRoZSByZWZyZXNoCnRvIHNpbGVudGx5IHN1Y2NlZWQg d2hpbGUgbGVhdmluZyB0aGUgbWF0ZXJpYWxpemVkIHZpZXcgd2l0aCBzdGFsZSBkYXRhLApyYXRo ZXIgdGhhbiBwcm9wZXJseSByZXBvcnRpbmcgZHVwbGljYXRlIHJvdyBlcnJvcnMuCgpUaGUgYnVn IG9jY3VycmVkIGJlY2F1c2UgdGhlIGR1cGxpY2F0ZSBjaGVjayB1c2VkICJXSEVSRSBuZXdkYXRh LiogSVMgTk9UIE5VTEwiCndoaWNoIHJldHVybnMgZmFsc2UgaWYgYW55IGNvbHVtbiBjb250YWlu cyBOVUxMLiBXaGVuIGR1cGxpY2F0ZXMgZXhpc3RlZCBpbgpyb3dzIHdpdGggTlVMTHMgKGUuZy4s IHR3byByb3dzIG9mICgndGVzdCcsIE5VTEwpKSwgdGhlIGNoZWNrIHdhcyBza2lwcGVkCmVudGly ZWx5LiBUaGUgc3Vic2VxdWVudCBGVUxMIE9VVEVSIEpPSU4gd291bGQgdGhlbiBtYXRjaCBib3Ro IGR1cGxpY2F0ZSByb3dzCnRvIHRoZSBzYW1lIG9sZCByb3csIHByb2R1Y2luZyBhbiBlbXB0eSBk aWZmLCBjYXVzaW5nIG5vIHVwZGF0ZXMgdG8gYmUgYXBwbGllZC4KCkZpeDoKVGhlIGZpeCByZW1v dmVzIHRoZSAiSVMgTk9UIE5VTEwiIHByZWNvbmRpdGlvbnMgZnJvbSB0aGUgZHVwbGljYXRlIGRl dGVjdGlvbgpxdWVyeS4gVGhlIHF1ZXJ5IG5vdyBjb3JyZWN0bHkgY2hlY2tzIGFsbCByb3dzIHVz aW5nIHRoZSByZWNvcmQgZXF1YWxpdHkKb3BlcmF0b3IgKCo9KSwgd2hpY2ggdHJlYXRzIE5VTEwg YXMgZXF1YWwgdG8gTlVMTC4gVGhpcyBtYXRjaGVzIHRoZSBzYW1lCmVxdWFsaXR5IHNlbWFudGlj cyB1c2VkIGJ5IHRoZSBGVUxMIE9VVEVSIEpPSU4gaW4gdGhlIGRpZmYgcXVlcnksIGVuc3VyaW5n CmNvbnNpc3RlbnQgZHVwbGljYXRlIGRldGVjdGlvbi4KCk5vdGU6ClRoZSBub24tY29uY3VycmVu dCBSRUZSRVNIIHdhcyB1bmFmZmVjdGVkIHNpbmNlIGl0IHJlYnVpbGRzIGluZGV4ZXMgZnJvbQpz Y3JhdGNoLCB3aGljaCBwcm9wZXJseSBkZXRlY3RzIGR1cGxpY2F0ZXMgZHVyaW5nIGluZGV4IGNy ZWF0aW9uLgoKQnVnIDI6IFBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uIGluICJSRUZSRVNIIE1BVEVS SUFMSVpFRCBWSUVXIENPTkNVUlJFTlRMWSIgd2l0aCBudWxsYWJsZSBpbmRleGVkIGNvbHVtbnMK SXNzdWU6CldoZW4gYSBtYXRlcmlhbGl6ZWQgdmlldyBoYWQgYSB1bmlxdWUgaW5kZXggb24gYSBu dWxsYWJsZSBjb2x1bW4sIFJFRlJFU0gKTUFURVJJQUxJWkVEIFZJRVcgQ09OQ1VSUkVOVExZIHdv dWxkIGluY2x1ZGUgdGhhdCBjb2x1bW4gaW4gdGhlIEZVTEwgT1VURVIKSk9JTiBjb25kaXRpb24g dXNlZCB0byBkZXRlY3QgY2hhbmdlcy4gVGhpcyBjYXVzZWQgc2V2ZXJlIHBlcmZvcm1hbmNlCmRl Z3JhZGF0aW9uIGJlY2F1c2UgTlVMTCA9IE5VTEwgY29tcGFyaXNvbnMgZXZhbHVhdGUgdG8gTlVM TCwKbWFraW5nIGFsbCByb3dzIGFwcGVhciBkaWZmZXJlbnQgZXZlbiB3aGVuIHVuY2hhbmdlZC4K CkV4YW1wbGU6IEEgbWF0ZXJpYWxpemVkIHZpZXcgd2l0aCAxTSByb3dzIHdoZXJlIGEgbnVsbGFi bGUgaW5kZXhlZCBjb2x1bW4KY29udGFpbnMgYWxsIE5VTExzLiBXaGVuIGRhdGEgaXMgdW5jaGFu Z2VkLCB0aGUgcmVmcmVzaCBzaG91bGQgcHJvZHVjZSBhbgplbXB0eSBkaWZmICgwIHJvd3MpLiBI b3dldmVyLCBiZWNhdXNlIE5VTEwgPSBOVUxMIGV2YWx1YXRlcyB0byBOVUxMIChub3QgVFJVRSks CnRoZSBqb2luIGZhaWxzIHRvIG1hdGNoIGFueSByb3dzLiBUaGUgZGlmZiBpbmNvcnJlY3RseSBz aG93cyBhbGwgMU0gcm93cyBhcwpkZWxldGVkIGFuZCBhbGwgMU0gcm93cyBhcyBuZXdseSBpbnNl cnRlZCAoMk0gdG90YWwpLCBjYXVzaW5nIHVubmVjZXNzYXJ5CnVzZSBvZiByZXNvdXJjZXMgd2hp Y2ggZHJhc3RpY2FsbHkgaW5jcmVhc2VkIHRoZSB0aW1lIGZvciAicmVmcmVzaCBtYXRlcmlhbGl6 ZWQgdmlldyBjb25jdXJyZW50bHkiIG9wZXJhdGlvbi4KCkZpeDoKU2tpcCBudWxsYWJsZSBjb2x1 bW5zIHdoZW4gYnVpbGRpbmcgdGhlIEZVTEwgT1VURVIgSk9JTiBjb25kaXRpb25zLiBPbmx5Cmlu Y2x1ZGUgY29sdW1ucyB3aXRoIE5PVCBOVUxMIGNvbnN0cmFpbnRzIGZyb20gdW5pcXVlIGluZGV4 ZXMgaW4gdGhlIGpvaW4KcHJlZGljYXRlLiBUaGlzIGlzIHNlbWFudGljYWxseSBjb3JyZWN0IGJl Y2F1c2UgbnVsbGFibGUgY29sdW1ucyBpbiB1bmlxdWUKaW5kZXhlcyBkb24ndCBwcm92aWRlIGFj dHVhbCB1bmlxdWVuZXNzIGZvciBOVUxMIHZhbHVlcyAoYmVjYXVzZSBtdWx0aXBsZSBOVUxMcwpj YW4gZXhpc3QgaW4gdW5pcXVlIGluZGV4ZXMpLiBUaGUgcmVjb3JkIGVxdWFsaXR5IG9wZXJhdG9y ICgqPSkgaXMgYWx3YXlzCmluY2x1ZGVkIGluIHRoZSBqb2luIGFuZCBjb3JyZWN0bHkgaGFuZGxl cyBOVUxMIGNvbXBhcmlzb25zLgoKVGhlIGZpeCBhZGRzIGEgbmV3IHZhcmlhYmxlICdhZGRlZEFu eVF1YWxzJyB0byB0cmFjayB3aGV0aGVyIGFueSBjb2x1bW4gY29uZGl0aW9ucwp3ZXJlIGFjdHVh bGx5IGFkZGVkIHRvIHRoZSBxdWVyeSwgc2VwYXJhdGUgZnJvbSAnZm91bmRVbmlxdWVJbmRleCcg d2hpY2ggdHJhY2tzCndoZXRoZXIgYSB1c2FibGUgdW5pcXVlIGluZGV4IGV4aXN0cyAoZm9yIHZh bGlkYXRpb24pLgpUaGlzIGVuc3VyZXMgY29ycmVjdCBTUUwgc3ludGF4IHdoZW4gYWxsIGNvbHVt bnMgaW4gYW4gaW5kZXggYXJlIG51bGxhYmxlLgotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL21h dHZpZXcuYyAgICAgICAgfCA1NSArKysrKysrKysrKysrKysrKysrKy0tLS0tLS0KIHNyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvbWF0dmlldy5vdXQgfCAgMiArLQogMiBmaWxlcyBjaGFuZ2VkLCA0 MyBpbnNlcnRpb25zKCspLCAxNCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy9tYXR2aWV3LmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9tYXR2aWV3LmMKaW5k ZXggODFhNTVhMzNlZjIuLjVkMmNkMGU1YTAyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21t YW5kcy9tYXR2aWV3LmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0dmlldy5jCkBAIC02 MDIsNiArNjAyLDcgQEAgcmVmcmVzaF9ieV9tYXRjaF9tZXJnZShPaWQgbWF0dmlld09pZCwgT2lk IHRlbXBPaWQsIE9pZCByZWxvd25lciwKIAljaGFyCSAgICpuc3A7CiAJVHVwbGVEZXNjCXR1cGRl c2M7CiAJYm9vbAkJZm91bmRVbmlxdWVJbmRleDsKKwlib29sCQlhZGRlZEFueVF1YWxzOwogCUxp c3QJICAgKmluZGV4b2lkbGlzdDsKIAlMaXN0Q2VsbCAgICppbmRleG9pZHNjYW47CiAJaW50MTYJ CXJlbG5hdHRzOwpAQCAtNjM1LDExICs2MzYsMTMgQEAgcmVmcmVzaF9ieV9tYXRjaF9tZXJnZShP aWQgbWF0dmlld09pZCwgT2lkIHRlbXBPaWQsIE9pZCByZWxvd25lciwKIAkJZWxvZyhFUlJPUiwg IlNQSV9leGVjIGZhaWxlZDogJXMiLCBxdWVyeWJ1Zi5kYXRhKTsKIAogCS8qCi0JICogV2UgbmVl ZCB0byBlbnN1cmUgdGhhdCB0aGVyZSBhcmUgbm90IGR1cGxpY2F0ZSByb3dzIHdpdGhvdXQgTlVM THMgaW4KLQkgKiB0aGUgbmV3IGRhdGEgc2V0IGJlZm9yZSB3ZSBjYW4gY291bnQgb24gdGhlICJk aWZmIiByZXN1bHRzLiAgQ2hlY2sgZm9yCi0JICogdGhhdCBpbiBhIHdheSB0aGF0IGFsbG93cyBz aG93aW5nIHRoZSBmaXJzdCBkdXBsaWNhdGVkIHJvdyBmb3VuZC4gIEV2ZW4KLQkgKiBhZnRlciB3 ZSBwYXNzIHRoaXMgdGVzdCwgYSB1bmlxdWUgaW5kZXggb24gdGhlIG1hdGVyaWFsaXplZCB2aWV3 IG1heQotCSAqIGZpbmQgYSBkdXBsaWNhdGUga2V5IHByb2JsZW0uCisJICogV2UgbmVlZCB0byBl bnN1cmUgdGhhdCB0aGVyZSBhcmUgbm90IGR1cGxpY2F0ZSByb3dzIGluIHRoZSBuZXcgZGF0YSBz ZXQKKwkgKiBiZWZvcmUgd2UgY2FuIGNvdW50IG9uIHRoZSAiZGlmZiIgcmVzdWx0cy4gIENoZWNr IGZvciB0aGF0IGluIGEgd2F5CisJICogdGhhdCBhbGxvd3Mgc2hvd2luZyB0aGUgZmlyc3QgZHVw bGljYXRlZCByb3cgZm91bmQuICBXZSBjaGVjayBmb3IKKwkgKiBkdXBsaWNhdGVzIHVzaW5nIHRo ZSByZWNvcmQgZXF1YWxpdHkgb3BlcmF0b3IgKCo9KSwgd2hpY2ggdHJlYXRzIE5VTExzCisJICog YXMgZXF1YWwgdG8gZWFjaCBvdGhlciAtIHRoZSBzYW1lIHNlbWFudGljcyB1c2VkIGJ5IHRoZSBG VUxMIE9VVEVSIEpPSU4KKwkgKiBpbiB0aGUgZGlmZiBxdWVyeSBiZWxvdy4gIEV2ZW4gYWZ0ZXIg d2UgcGFzcyB0aGlzIHRlc3QsIGEgdW5pcXVlIGluZGV4CisJICogb24gdGhlIG1hdGVyaWFsaXpl ZCB2aWV3IG1heSBmaW5kIGEgZHVwbGljYXRlIGtleSBwcm9ibGVtLgogCSAqCiAJICogTm90ZTog aGVyZSBhbmQgYmVsb3csIHdlIHVzZSAidGFibGVuYW1lLio6OnRhYmxlcm93dHlwZSIgYXMgYSBo YWNrIHRvCiAJICoga2VlcCAiLioiIGZyb20gYmVpbmcgZXhwYW5kZWQgaW50byBtdWx0aXBsZSBj b2x1bW5zIGluIGEgU0VMRUNUIGxpc3QuCkBAIC02NDgsOSArNjUxLDkgQEAgcmVmcmVzaF9ieV9t YXRjaF9tZXJnZShPaWQgbWF0dmlld09pZCwgT2lkIHRlbXBPaWQsIE9pZCByZWxvd25lciwKIAly ZXNldFN0cmluZ0luZm8oJnF1ZXJ5YnVmKTsKIAlhcHBlbmRTdHJpbmdJbmZvKCZxdWVyeWJ1ZiwK IAkJCQkJICJTRUxFQ1QgbmV3ZGF0YS4qOjolcyBGUk9NICVzIG5ld2RhdGEgIgotCQkJCQkgIldI RVJFIG5ld2RhdGEuKiBJUyBOT1QgTlVMTCBBTkQgRVhJU1RTICIKLQkJCQkJICIoU0VMRUNUIDEg RlJPTSAlcyBuZXdkYXRhMiBXSEVSRSBuZXdkYXRhMi4qIElTIE5PVCBOVUxMICIKLQkJCQkJICJB TkQgbmV3ZGF0YTIuKiBPUEVSQVRPUihwZ19jYXRhbG9nLio9KSBuZXdkYXRhLiogIgorCQkJCQkg IldIRVJFIEVYSVNUUyAiCisJCQkJCSAiKFNFTEVDVCAxIEZST00gJXMgbmV3ZGF0YTIgIgorCQkJ CQkgIldIRVJFIG5ld2RhdGEyLiogT1BFUkFUT1IocGdfY2F0YWxvZy4qPSkgbmV3ZGF0YS4qICIK IAkJCQkJICJBTkQgbmV3ZGF0YTIuY3RpZCBPUEVSQVRPUihwZ19jYXRhbG9nLjw+KSAiCiAJCQkJ CSAibmV3ZGF0YS5jdGlkKSIsCiAJCQkJCSB0ZW1wbmFtZSwgdGVtcG5hbWUsIHRlbXBuYW1lKTsK QEAgLTY2Nyw3ICs2NzAsNyBAQCByZWZyZXNoX2J5X21hdGNoX21lcmdlKE9pZCBtYXR2aWV3T2lk LCBPaWQgdGVtcE9pZCwgT2lkIHJlbG93bmVyLAogCQkgKi8KIAkJZXJlcG9ydChFUlJPUiwKIAkJ CQkoZXJyY29kZShFUlJDT0RFX0NBUkRJTkFMSVRZX1ZJT0xBVElPTiksCi0JCQkJIGVycm1zZygi bmV3IGRhdGEgZm9yIG1hdGVyaWFsaXplZCB2aWV3IFwiJXNcIiBjb250YWlucyBkdXBsaWNhdGUg cm93cyB3aXRob3V0IGFueSBudWxsIGNvbHVtbnMiLAorCQkJCSBlcnJtc2coIm5ldyBkYXRhIGZv ciBtYXRlcmlhbGl6ZWQgdmlldyBcIiVzXCIgY29udGFpbnMgZHVwbGljYXRlIHJvd3MiLAogCQkJ CQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUobWF0dmlld1JlbCkpLAogCQkJCSBlcnJkZXRhaWwo IlJvdzogJXMiLAogCQkJCQkJICAgU1BJX2dldHZhbHVlKFNQSV90dXB0YWJsZS0+dmFsc1swXSwg U1BJX3R1cHRhYmxlLT50dXBkZXNjLCAxKSkpKTsKQEAgLTcxNSw2ICs3MTgsNyBAQCByZWZyZXNo X2J5X21hdGNoX21lcmdlKE9pZCBtYXR2aWV3T2lkLCBPaWQgdGVtcE9pZCwgT2lkIHJlbG93bmVy LAogCXR1cGRlc2MgPSBtYXR2aWV3UmVsLT5yZF9hdHQ7CiAJb3BVc2VkRm9yUXVhbCA9IHBhbGxv YzBfYXJyYXkoT2lkLCByZWxuYXR0cyk7CiAJZm91bmRVbmlxdWVJbmRleCA9IGZhbHNlOworCWFk ZGVkQW55UXVhbHMgPSBmYWxzZTsKIAogCWluZGV4b2lkbGlzdCA9IFJlbGF0aW9uR2V0SW5kZXhM aXN0KG1hdHZpZXdSZWwpOwogCkBAIC03MjIsOSArNzI2LDExIEBAIHJlZnJlc2hfYnlfbWF0Y2hf bWVyZ2UoT2lkIG1hdHZpZXdPaWQsIE9pZCB0ZW1wT2lkLCBPaWQgcmVsb3duZXIsCiAJewogCQlP aWQJCQlpbmRleG9pZCA9IGxmaXJzdF9vaWQoaW5kZXhvaWRzY2FuKTsKIAkJUmVsYXRpb24JaW5k ZXhSZWw7CisJCWJvb2wJCWhhc191c2FibGVfdW5pcXVlX2luZGV4OwogCiAJCWluZGV4UmVsID0g aW5kZXhfb3BlbihpbmRleG9pZCwgUm93RXhjbHVzaXZlTG9jayk7Ci0JCWlmIChpc191c2FibGVf dW5pcXVlX2luZGV4KGluZGV4UmVsKSkKKwkJaGFzX3VzYWJsZV91bmlxdWVfaW5kZXggPSBpc191 c2FibGVfdW5pcXVlX2luZGV4KGluZGV4UmVsKTsKKwkJaWYgKGhhc191c2FibGVfdW5pcXVlX2lu ZGV4KQogCQl7CiAJCQlGb3JtX3BnX2luZGV4IGluZGV4U3RydWN0ID0gaW5kZXhSZWwtPnJkX2lu ZGV4OwogCQkJaW50CQkJaW5kbmtleWF0dHMgPSBpbmRleFN0cnVjdC0+aW5kbmtleWF0dHM7CkBA IC03MzIsNiArNzM4LDkgQEAgcmVmcmVzaF9ieV9tYXRjaF9tZXJnZShPaWQgbWF0dmlld09pZCwg T2lkIHRlbXBPaWQsIE9pZCByZWxvd25lciwKIAkJCURhdHVtCQlpbmRjbGFzc0RhdHVtOwogCQkJ aW50CQkJaTsKIAorCQkJLyogTWFyayB0aGF0IHdlIGZvdW5kIGF0IGxlYXN0IG9uZSB1c2FibGUg dW5pcXVlIGluZGV4ICovCisJCQlmb3VuZFVuaXF1ZUluZGV4ID0gdHJ1ZTsKKwogCQkJLyogTXVz dCBnZXQgaW5kY2xhc3MgdGhlIGhhcmQgd2F5LiAqLwogCQkJaW5kY2xhc3NEYXR1bSA9IFN5c0Nh Y2hlR2V0QXR0ck5vdE51bGwoSU5ERVhSRUxJRCwKIAkJCQkJCQkJCQkJCSAgIGluZGV4UmVsLT5y ZF9pbmRleHR1cGxlLApAQCAtNzUzLDYgKzc2MiwxOSBAQCByZWZyZXNoX2J5X21hdGNoX21lcmdl KE9pZCBtYXR2aWV3T2lkLCBPaWQgdGVtcE9pZCwgT2lkIHJlbG93bmVyLAogCQkJCWNvbnN0IGNo YXIgKmxlZnRvcDsKIAkJCQljb25zdCBjaGFyICpyaWdodG9wOwogCisJCQkJLyoKKwkJCQkgKiBT a2lwIGNvbHVtbnMgdGhhdCBkb24ndCBoYXZlIGEgTk9UIE5VTEwgY29uc3RyYWludC4KKwkJCQkg KgorCQkJCSAqIE51bGxhYmxlIGNvbHVtbnMgaW4gdW5pcXVlIGluZGV4ZXMgZG9uJ3QgYWN0dWFs bHkgcHJvdmlkZQorCQkJCSAqIHVuaXF1ZW5lc3MgZm9yIE5VTEwgdmFsdWVzIChtdWx0aXBsZSBO VUxMcyBhcmUgYWxsb3dlZCksIHNvCisJCQkJICogdGhleSBjYW4ndCByZWxpYWJseSBiZSB1c2Vk IHRvIGlkZW50aWZ5IG1hdGNoaW5nIHJvd3MuIFVzaW5nCisJCQkJICogdGhlbSBpbiB0aGUgam9p biBjb25kaXRpb24gd291bGQgY2F1c2UgTlVMTCA9IE5VTEwgY29tcGFyaXNvbnMKKwkJCQkgKiB3 aGljaCBldmFsdWF0ZSB0byBOVUxMIG1ha2luZyB0aGUgcm93cyBhcHBlYXIgZGlmZmVyZW50IHdo ZW4gdGhleSdyZQorCQkJCSAqIGFjdHVhbGx5IHRoZSBzYW1lIGFjY29yZGluZyB0byB0aGUgcmVj b3JkIGVxdWFsaXR5IG9wZXJhdG9yICgqPSkuCisJCQkJICovCisJCQkJaWYgKCFhdHRyLT5hdHRu b3RudWxsKQorCQkJCQljb250aW51ZTsKKwogCQkJCS8qCiAJCQkJICogSWRlbnRpZnkgdGhlIGVx dWFsaXR5IG9wZXJhdG9yIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGluZGV4CiAJCQkJICogY29sdW1u LiAgRmlyc3Qgd2UgbmVlZCB0byBsb29rIHVwIHRoZSBjb2x1bW4ncyBvcGNsYXNzLgpAQCAtNzg4 LDcgKzgxMCw3IEBAIHJlZnJlc2hfYnlfbWF0Y2hfbWVyZ2UoT2lkIG1hdHZpZXdPaWQsIE9pZCB0 ZW1wT2lkLCBPaWQgcmVsb3duZXIsCiAJCQkJLyoKIAkJCQkgKiBBY3R1YWxseSBhZGQgdGhlIHF1 YWwsIEFORGVkIHdpdGggYW55IG90aGVycy4KIAkJCQkgKi8KLQkJCQlpZiAoZm91bmRVbmlxdWVJ bmRleCkKKwkJCQlpZiAoYWRkZWRBbnlRdWFscykKIAkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmlu ZygmcXVlcnlidWYsICIgQU5EICIpOwogCiAJCQkJbGVmdG9wID0gcXVvdGVfcXVhbGlmaWVkX2lk ZW50aWZpZXIoIm5ld2RhdGEiLApAQCAtODAxLDcgKzgyMyw3IEBAIHJlZnJlc2hfYnlfbWF0Y2hf bWVyZ2UoT2lkIG1hdHZpZXdPaWQsIE9pZCB0ZW1wT2lkLCBPaWQgcmVsb3duZXIsCiAJCQkJCQkJ CQkJIG9wLAogCQkJCQkJCQkJCSByaWdodG9wLCBhdHRydHlwZSk7CiAKLQkJCQlmb3VuZFVuaXF1 ZUluZGV4ID0gdHJ1ZTsKKwkJCQlhZGRlZEFueVF1YWxzID0gdHJ1ZTsKIAkJCX0KIAkJfQogCkBA IC04MjYsOCArODQ4LDE1IEBAIHJlZnJlc2hfYnlfbWF0Y2hfbWVyZ2UoT2lkIG1hdHZpZXdPaWQs IE9pZCB0ZW1wT2lkLCBPaWQgcmVsb3duZXIsCiAJCQkJZXJybXNnKCJjb3VsZCBub3QgZmluZCBz dWl0YWJsZSB1bmlxdWUgaW5kZXggb24gbWF0ZXJpYWxpemVkIHZpZXcgXCIlc1wiIiwKIAkJCQkJ ICAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUobWF0dmlld1JlbCkpKTsKIAorCS8qCisJICogQWx3 YXlzIGFkZCB0aGUgcmVjb3JkIGVxdWFsaXR5IGNoZWNrLiBUaGlzIGhhbmRsZXMgYWxsIGNvbHVt bnMKKwkgKiBpbmNsdWRpbmcgbnVsbGFibGUgb25lcyB0aGF0IHdlIG1heSBoYXZlIHNraXBwZWQg YWJvdmUuCisJICovCisJaWYgKGFkZGVkQW55UXVhbHMpCisJCWFwcGVuZFN0cmluZ0luZm9TdHJp bmcoJnF1ZXJ5YnVmLCAiIEFORCAiKTsKKwogCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJnF1ZXJ5 YnVmLAotCQkJCQkJICAgIiBBTkQgbmV3ZGF0YS4qIE9QRVJBVE9SKHBnX2NhdGFsb2cuKj0pIG12 LiopICIKKwkJCQkJCSAgICJuZXdkYXRhLiogT1BFUkFUT1IocGdfY2F0YWxvZy4qPSkgbXYuKikg IgogCQkJCQkJICAgIldIRVJFIG5ld2RhdGEuKiBJUyBOVUxMIE9SIG12LiogSVMgTlVMTCAiCiAJ CQkJCQkgICAiT1JERVIgQlkgdGlkIik7CiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvbWF0dmlldy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL21hdHZpZXcu b3V0CmluZGV4IDAzNTU3MjBkZmM2Li5hN2EyNmYyODIxOCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9tYXR2aWV3Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL21hdHZpZXcub3V0CkBAIC0zOTYsNyArMzk2LDcgQEAgUkVGUkVTSCBNQVRFUklBTElaRUQg VklFVyBtdnRlc3RfbXY7CiBFUlJPUjogIGNvdWxkIG5vdCBjcmVhdGUgdW5pcXVlIGluZGV4ICJt dnRlc3RfbXZfYV9pZHgiCiBERVRBSUw6ICBLZXkgKGEpPSgxKSBpcyBkdXBsaWNhdGVkLgogUkVG UkVTSCBNQVRFUklBTElaRUQgVklFVyBDT05DVVJSRU5UTFkgbXZ0ZXN0X212OwotRVJST1I6ICBu ZXcgZGF0YSBmb3IgbWF0ZXJpYWxpemVkIHZpZXcgIm12dGVzdF9tdiIgY29udGFpbnMgZHVwbGlj YXRlIHJvd3Mgd2l0aG91dCBhbnkgbnVsbCBjb2x1bW5zCitFUlJPUjogIG5ldyBkYXRhIGZvciBt YXRlcmlhbGl6ZWQgdmlldyAibXZ0ZXN0X212IiBjb250YWlucyBkdXBsaWNhdGUgcm93cwogREVU QUlMOiAgUm93OiAoMSwxMCkKIERST1AgVEFCTEUgbXZ0ZXN0X2ZvbyBDQVNDQURFOwogTk9USUNF OiAgZHJvcCBjYXNjYWRlcyB0byBtYXRlcmlhbGl6ZWQgdmlldyBtdnRlc3RfbXYKLS0gCjIuMzku NSAoQXBwbGUgR2l0LTE1NCkKCg== --00000000000033c68d064aab14fb--