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 1wI7tL-007oP5-17 for pgsql-hackers@arkaria.postgresql.org; Wed, 29 Apr 2026 16:36:03 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wI7tJ-004JtQ-1P for pgsql-hackers@arkaria.postgresql.org; Wed, 29 Apr 2026 16:36:01 +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 1wI7tJ-004JtH-0G for pgsql-hackers@lists.postgresql.org; Wed, 29 Apr 2026 16:36:01 +0000 Received: from mail-vs1-xe31.google.com ([2607:f8b0:4864:20::e31]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wI7tH-00000003pf5-0Oqu for pgsql-hackers@lists.postgresql.org; Wed, 29 Apr 2026 16:36:00 +0000 Received: by mail-vs1-xe31.google.com with SMTP id ada2fe7eead31-6058ac0ebceso7729969137.2 for ; Wed, 29 Apr 2026 09:35:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1777480557; cv=none; d=google.com; s=arc-20240605; b=GsyMEn2LXZBWi01ph5EHgYLCvOC9QY9cnm8ViE4QSrqe8zePbDsbPhLpwQQZko08pg MDYDqlsD67C01rUVMRnO7nZstDF1f8ywcA9g3C0HicN3QHLTWnT8ozwbW/bb6xkd8062 yW0oYKf04KnrmzA+LfDiogS44mAkpDn22R2KajEe6K2apRc4i0Dtr4D6/6wEd3jQV/9f S+kqLA8woWlSdcRcasnVMWtqzpjZ5035tbH3kssdrGu1FcgGwNFCC7xO8b0Vmj/+4ONZ dsWTykML8jbQXwA9KlVwqR0ECassUAeDJRWyKaB/Dfblx7z7crXCXFzaHdcS8Vfj/VxB 4G0w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:mime-version:dkim-signature; bh=E17X3HELaNoMEIj5uGktzDTTBXt3DVuk6c6Lquat5EE=; fh=rf79rTKPGsw7cX8Ly8TKTWm50sbG7CfzRgfTSNZkF6w=; b=Vpq/THHLE/m25rg8oO6Jo1updaEHPHktHfz1UDgOUKugOkC/eQeKOPTxjEh+G8+42Q qk4UecJqrQP5hyfOJjOHe00CTtnqvCUi1EuiY8wqPCxIiCzHwzYtQO5KN5SIQ8ZdjYvr wwZNNBwTD3K662IvPEFypFNhWTTyiaKt5tOgb5igk4MHpm3/homby8M2zqd+C9QMbxsV jj52RCnJqZeRPqK7uQifmpKvLKv3Sq/moQUcSrLQSGZU0OFVqoBtUnJFrNaG1upq7iHk Jz0q5EKhNM1SbggsKUKvjuw/gxFbrcUZ1Vk60SUixkc9OKXGuuNh/CJ7SG7UWAnqKGlf a9IQ==; 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=20251104; t=1777480557; x=1778085357; darn=lists.postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=E17X3HELaNoMEIj5uGktzDTTBXt3DVuk6c6Lquat5EE=; b=QyfSj3cA7PjSwA7l9pgjmx5skWZWv+O/mcdNkivN0PzIG9wdAPWlLvmnf+KXJczizz De9QYtT+Tta3pSKmXZRkl+1WMkjo/pLzDkqVgmND2wOQxRTOGAvycUrEgXWekXzWrLEx q6qeQtAyOwAWAo+pRz8jYy8IESjgzC1FQ92G1uWIHRzv4a5Wl5hcrpl08RHlew8N2QXq 6mySuJVwdeDg9IhL0oWVQobHgDXoMbdoiFTDTuwV9fof8CYbEfqZpPFOT3XXNcYN1Sip MAGT4KkvchUy1ARgvgUa8Pmk7QkxZOo2UXlj4F97j47TBBZUjqYcurYW4s80cEOUJijS Xdhw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777480557; x=1778085357; h=to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=E17X3HELaNoMEIj5uGktzDTTBXt3DVuk6c6Lquat5EE=; b=K9+/TIITFP3rFXY2XtASRqB7Bho0KA+WhUayxqCO5Oe6FOVoftTw+p1+6sM7fGEtq6 beHpAsd04CzF92kghmTo+kOogTQHI7STdqf75XL8h9wf8c52C8NAyFG229znY+dCBYSv 8Eu9DCJGyWg3i1BuxrFmuBWKds8GWwsusJjyMLZN6UdeL2DQ5E2F+7N69+fbmAiTZ1HQ epx6a9tnkmY/oKp5zsgsz4HaPTh8Ju6aIHbs4ioOkWFOtJzHstfllRc0qGYLPwZ7sPLU HFk2A8BlB6nB9Hr65bxIQF/kdnRHc0qtHAdg69FCjqJHWlGA+wlOPynpDCdK0JyX9M55 qvQA== X-Gm-Message-State: AOJu0YxU3kd0zs2ORtQZ3oGsrE0FCYq4yvTL+aky9TACDWcnH3uPjRFr KwC4jaOzVjE+oOdJMOm2u97qzvjh8J+dAfsD0yFo9wXJjpUyHCkC74l5HpiET1TMrf90M0U3NeL 4Mk/XvVI4Oeu743DQu9QvYRwiNv+JBlcV7VVs X-Gm-Gg: AeBDiesOec7NA+ItDGHmYwRIPn2tUFyMK9436LFu5sKWKZKIp07GGoZb37/BG54I3RW hys5HlLjjI/RxbGUyIbiPbgeYg5mlajJHzKLITKY2SxppmdmwjGPo+aebRupWTgthzdYZFc4EOy rGxP9gIj9f10px0h3nkrfmt3FUZzvNGQocmO+vNAdmcipfAyP+mH4dN7HzW8R+YcZ+a8z74inR5 FhfmLy7gklFbzexFDPohkNw7RJbUuOpSYGqAeoYB3T4BbFDus4rymUVbB/JuC60Nt1dz3WryxWA e0iNt2Jyhk71XwwUEw== X-Received: by 2002:a05:6102:ccf:b0:60f:f543:232a with SMTP id ada2fe7eead31-62924c7c65emr3099919137.2.1777480557122; Wed, 29 Apr 2026 09:35:57 -0700 (PDT) MIME-Version: 1.0 From: SATYANARAYANA NARLAPURAM Date: Wed, 29 Apr 2026 09:35:44 -0700 X-Gm-Features: AVHnY4JYE-LdqyFHVvhFL_wCiAy6Wx-JHzzT53HrRB0Dyu5ocp6RuxV8Q-GdHwg Message-ID: Subject: Limit GRAPH_TABLE path combinations to prevent memory exhaustion To: PostgreSQL Hackers , Ashutosh Bapat Content-Type: multipart/mixed; boundary="00000000000033f6ad06509bf18a" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000033f6ad06509bf18a Content-Type: multipart/alternative; boundary="00000000000033f6ad06509bf188" --00000000000033f6ad06509bf188 Content-Type: text/plain; charset="UTF-8" Hi hackers, generate_queries_for_path_pattern_recurse() enumerates all path combinations by recursing over the Cartesian product of matching elements per pattern position. Without IS label filters, each position matches ALL tables of that kind, leading to N^K combinations (N tables, K pattern positions). Each combination allocates a Query node via palloc causing unbounded memory growth. A 8-table graph with a -element pattern reaches 81.3 GB RES in a few seconds before I cancel the query. Tests in the patch (those were failed) can reproduce the problem without the fix included in the patch. top - 15:04:19 up 43 days, 19:18, 5 users, load average: 0.43, 0.19, 0.08 Tasks: 1 total, 1 running, 0 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.9 us, 0.8 sy, 0.0 ni, 98.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st MiB Mem : 515766.2 total, 248412.7 free, 234847.7 used, 48014.7 buff/cache MiB Swap: 0.0 total, 0.0 free, 0.0 used. 280918.6 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 649642 azureus+ 20 0 212.2g 81.3g 33948 R 100.0 16.1 0:41.20 postgres As a POC I added a pre-computation check that calculates the total number of path combinations before entering the generate_queries_for_path_pattern_recurse. If the product exceeds MAX_GRAPH_TABLE_PATH_COMBINATIONS (set to 10,000), the rewriter reports ERRCODE_PROGRAM_LIMIT_EXCEEDED with a hint suggesting IS label filters to reduce the search space. The limit of 10,000 is somewhat arbitrary but conservative. It caps memory at roughly 5 MB of Query nodes. Patterns that would exceed the limit without labels can always be made to succeed by adding IS expressions to pin specific positions to fewer tables. Alternatively, we can consider adding a GUC to control the limit but appears to be an overkill. Thoughts? Thanks, Satya --00000000000033f6ad06509bf188 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi hackers,

generate_queries_for_path_p= attern_recurse() enumerates all path
combinations by recursing over the = Cartesian product of matching elements
per pattern position.=C2=A0 Witho= ut IS label filters, each position matches
ALL tables of that kind, lead= ing to N^K combinations (N tables, K
pattern positions).=C2=A0 Each comb= ination allocates a Query node via palloc
causing unbounded memory growt= h.

A 8-table graph with a -element pattern reaches 81.3 GB RES in a = few seconds
before I cancel the query. Tests in the patch (those were fa= iled) can reproduce the problem
without the fix included in the patch.
top - 15:04:19 up 43 days, 19:18, =C2=A05 users, =C2=A0load average: = 0.43, 0.19, 0.08
Tasks: =C2=A0 1 total, =C2=A0 1 running, =C2=A0 0 sleep= ing, =C2=A0 0 stopped, =C2=A0 0 zombie
%Cpu(s): =C2=A00.9 us, =C2=A00.8 = sy, =C2=A00.0 ni, 98.3 id, =C2=A00.0 wa, =C2=A00.0 hi, =C2=A00.0 si, =C2=A0= 0.0 st
MiB Mem : 515766.2 total, 248412.7 free, 234847.7 used, =C2=A048= 014.7 buff/cache =C2=A0 =C2=A0
MiB Swap: =C2=A0 =C2=A0 =C2=A00.0 total,= =C2=A0 =C2=A0 =C2=A00.0 free, =C2=A0 =C2=A0 =C2=A00.0 used. 280918.6 avail= Mem

=C2=A0 =C2=A0 PID USER =C2=A0 =C2=A0 =C2=A0PR =C2=A0NI =C2=A0 = =C2=A0VIRT =C2=A0 =C2=A0RES =C2=A0 =C2=A0SHR S =C2=A0%CPU =C2=A0%MEM =C2=A0= =C2=A0 TIME+ COMMAND =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0
=C2= =A0649642 azureus+ =C2=A020 =C2=A0 0 =C2=A0212.2g =C2=A081.3g =C2=A033948 R= 100.0 =C2=A016.1 =C2=A0 0:41.20 postgres =C2=A0


As a POC I adde= d a pre-computation check that calculates the total number=C2=A0
= of path combinations before entering the generate_queries_for_path_pattern_= recurse.
If the product exceeds MAX_GRAPH_TABLE_PATH_COMBINATIONS (set t= o 10,000),=C2=A0
the rewriter reports ERRCODE_PROGRAM_LIMIT_EXCEE= DED with a hint suggesting=C2=A0
IS label filters to reduce the s= earch space. The limit of 10,000 is somewhat arbitrary
but conservative.= It caps memory at roughly 5 MB of Query nodes.
Patterns that would exce= ed the limit without labels can always be made to succeed
by adding IS e= xpressions to pin specific positions to fewer tables.
Alternatively, we= can consider adding a GUC to control the limit but appears
to be an ove= rkill. Thoughts?

Thanks,
Satya
--00000000000033f6ad06509bf188-- --00000000000033f6ad06509bf18a Content-Type: application/octet-stream; name="0001-Limit-GRAPH_TABLE-path-combinations-to-prevent-memor.patch" Content-Disposition: attachment; filename="0001-Limit-GRAPH_TABLE-path-combinations-to-prevent-memor.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mok9y6ge0 RnJvbSBiYzFjYmU1NDQ0Mjc1N2U5NzNjZjdkNmVlOTU5MmE5ZTViYWJjYjU0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTYXR5YSBOYXJsYXB1cmFtIDxzYXR5YW5hcmxhcHVyYW1AZ21h aWwuY29tPgpEYXRlOiBXZWQsIDI5IEFwciAyMDI2IDE2OjIyOjQyICswMDAwClN1YmplY3Q6IFtQ QVRDSF0gTGltaXQgR1JBUEhfVEFCTEUgcGF0aCBjb21iaW5hdGlvbnMgdG8gcHJldmVudCBtZW1v cnkKIGV4aGF1c3Rpb24KCmdlbmVyYXRlX3F1ZXJpZXNfZm9yX3BhdGhfcGF0dGVybl9yZWN1cnNl KCkgZW51bWVyYXRlcyBhbGwgcGF0aApjb21iaW5hdGlvbnMgYnkgcmVjdXJzaW5nIG92ZXIgdGhl IENhcnRlc2lhbiBwcm9kdWN0IG9mIG1hdGNoaW5nIGVsZW1lbnRzCnBlciBwYXR0ZXJuIHBvc2l0 aW9uLiAgV2l0aG91dCBJUyBsYWJlbCBmaWx0ZXJzLCBlYWNoIHBvc2l0aW9uIG1hdGNoZXMKQUxM IHRhYmxlcyBvZiB0aGF0IGtpbmQsIGxlYWRpbmcgdG8gTl5LIGNvbWJpbmF0aW9ucyAoTiB0YWJs ZXMsIEsKcGF0dGVybiBwb3NpdGlvbnMpLiAgRWFjaCBjb21iaW5hdGlvbiBhbGxvY2F0ZXMgYSBR dWVyeSBub2RlIHZpYSBwYWxsb2MKaW50byBwcm9jZXNzIG1lbW9yeSB3aXRoIG5vIGxpbWl0LCBj YXVzaW5nIHJhcGlkIG1lbW9yeSBleGhhdXN0aW9uIGFuZApwb3RlbnRpYWwgT09NIGtpbGxzLgoK QWRkIGEgcHJlLWNvbXB1dGF0aW9uIGNoZWNrIHRoYXQgY2FsY3VsYXRlcyB0aGUgdG90YWwgbnVt YmVyIG9mIHBhdGgKY29tYmluYXRpb25zIGJlZm9yZSBjYWxsaW5nCmdlbmVyYXRlX3F1ZXJpZXNf Zm9yX3BhdGhfcGF0dGVybl9yZWN1cnNlKCkuICBJZiB0aGUgcHJvZHVjdCBleGNlZWRzCk1BWF9H UkFQSF9UQUJMRV9QQVRIX0NPTUJJTkFUSU9OUyAoMTAwMDApLCByZXBvcnQgYW4gZXJyb3Igd2l0 aCBhIGhpbnQKc3VnZ2VzdGluZyBJUyBsYWJlbCBmaWx0ZXJzIHRvIHJlZHVjZSB0aGUgc2VhcmNo IHNwYWNlLgoKVGhpcyBwcm92aWRlcyBwcm90ZWN0aW9uIGFnYWluc3QgbWVtb3J5IGV4aGF1c3Rp b24gd2hpbGUKcHJlc2VydmluZyBjb3JyZWN0IGJlaGF2aW9yIGZvciByZWFzb25hYmxlIGdyYXBo IHBhdHRlcm5zLgotLS0KIHNyYy9iYWNrZW5kL3Jld3JpdGUvcmV3cml0ZUdyYXBoVGFibGUuYyAg IHwgMjUgKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZ3JhcGhfdGFibGUub3V0 IHwgNzAgKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2dyYXBo X3RhYmxlLnNxbCAgICAgIHwgNjQgKysrKysrKysrKysrKysrKysrKysrCiAzIGZpbGVzIGNoYW5n ZWQsIDE1OSBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmV3cml0ZS9y ZXdyaXRlR3JhcGhUYWJsZS5jIGIvc3JjL2JhY2tlbmQvcmV3cml0ZS9yZXdyaXRlR3JhcGhUYWJs ZS5jCmluZGV4IDY4NjdkZTZkLi44YTg2NmUwYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmV3 cml0ZS9yZXdyaXRlR3JhcGhUYWJsZS5jCisrKyBiL3NyYy9iYWNrZW5kL3Jld3JpdGUvcmV3cml0 ZUdyYXBoVGFibGUuYwpAQCAtNDUsNiArNDUsOSBAQAogI2luY2x1ZGUgInV0aWxzL3J1bGV1dGls cy5oIgogI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCiAKKy8qIExpbWl0IG9uIHRvdGFsIHBh dGggY29tYmluYXRpb25zIHRvIHByZXZlbnQgY29tYmluYXRvcmlhbCBleHBsb3Npb24uICovCisj ZGVmaW5lIE1BWF9HUkFQSF9UQUJMRV9QQVRIX0NPTUJJTkFUSU9OUwkxMDAwMAorCiAKIC8qCiAg KiBSZXByZXNlbnRzIG9uZSBwYXRoIGZhY3RvciBpbiBhIHBhdGguCkBAIC0zNDMsNiArMzQ2LDI4 IEBAIGdlbmVyYXRlX3F1ZXJpZXNfZm9yX3BhdGhfcGF0dGVybihSYW5nZVRibEVudHJ5ICpydGUs IExpc3QgKnBhdGhfcGF0dGVybikKIAkJcGF0aF9lbGVtX2xpc3RzID0gbGFwcGVuZChwYXRoX2Vs ZW1fbGlzdHMsCiAJCQkJCQkJCSAgZ2V0X3BhdGhfZWxlbWVudHNfZm9yX3BhdGhfZmFjdG9yKHJ0 ZS0+cmVsaWQsIHBmKSk7CiAKKwkvKgorCSAqIENoZWNrIHRoYXQgdGhlIHRvdGFsIG51bWJlciBv ZiBwYXRoIGNvbWJpbmF0aW9ucyBkb2Vzbid0IGV4Y2VlZCBhCisJICogcmVhc29uYWJsZSBsaW1p dC4gIFdpdGhvdXQgZXhwbGljaXQgSVMgbGFiZWwgZXhwcmVzc2lvbnMsIGVhY2ggZWxlbWVudAor CSAqIHBhdHRlcm4gbWF0Y2hlcyBhbGwgZ3JhcGggZWxlbWVudHMgb2YgdGhlIHNhbWUga2luZCwg cHJvZHVjaW5nIGEKKwkgKiBDYXJ0ZXNpYW4gcHJvZHVjdCB0aGF0IGNhbiBlYXNpbHkgZXhoYXVz dCBwcm9jZXNzIG1lbW9yeS4KKwkgKi8KKwl7CisJCWludDY0CQl0b3RhbF9wYXRocyA9IDE7CisK KwkJZm9yZWFjaF9wdHIoTGlzdCwgZWxlbXMsIHBhdGhfZWxlbV9saXN0cykKKwkJeworCQkJaWYg KGxpc3RfbGVuZ3RoKGVsZW1zKSA+IDApCisJCQkJdG90YWxfcGF0aHMgKj0gbGlzdF9sZW5ndGgo ZWxlbXMpOworCQkJaWYgKHRvdGFsX3BhdGhzID4gTUFYX0dSQVBIX1RBQkxFX1BBVEhfQ09NQklO QVRJT05TKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX1BST0dS QU1fTElNSVRfRVhDRUVERUQpLAorCQkJCQkJIGVycm1zZygidG9vIG1hbnkgcGF0aCBjb21iaW5h dGlvbnMgKCVsbGQpIGluIEdSQVBIX1RBQkxFIHBhdHRlcm4iLAorCQkJCQkJCQkobG9uZyBsb25n KSB0b3RhbF9wYXRocyksCisJCQkJCQkgZXJyaGludCgiVXNlIGV4cGxpY2l0IElTIGxhYmVsIGV4 cHJlc3Npb25zIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIG1hdGNoaW5nIGVsZW1lbnRzLiIpKSk7 CisJCX0KKwl9CisKIAlwYXRocXVlcmllcyA9IGdlbmVyYXRlX3F1ZXJpZXNfZm9yX3BhdGhfcGF0 dGVybl9yZWN1cnNlKHJ0ZSwgcGF0aHF1ZXJpZXMsCiAJCQkJCQkJCQkJCQkJCQlOSUwsIHBhdGhf ZWxlbV9saXN0cywgMCk7CiAJaWYgKCFwYXRocXVlcmllcykKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvZ3JhcGhfdGFibGUub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9ncmFwaF90YWJsZS5vdXQKaW5kZXggMTJiODcwNmIuLjU2ZmExYjVmIDEwMDY0NAotLS0g YS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2dyYXBoX3RhYmxlLm91dAorKysgYi9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL2dyYXBoX3RhYmxlLm91dApAQCAtMTAzMiw0ICsxMDMyLDc0IEBA IFNFTEVDVCBzbmFtZSwgZG5hbWUgRlJPTSBHUkFQSF9UQUJMRSAoZzEgTUFUQ0ggKHNyYyktPihk ZXN0KSBXSEVSRSBzcmMudnByb3AxID4KIEVSUk9SOiAgc3VicXVlcmllcyB3aXRoaW4gR1JBUEhf VEFCTEUgcmVmZXJlbmNlIGFyZSBub3Qgc3VwcG9ydGVkCiBTRUxFQ1Qgc25hbWUsIGRuYW1lIEZS T00gR1JBUEhfVEFCTEUgKGcxIE1BVENIIChzcmMpLT4oZGVzdCkgV0hFUkUgb3V0X2RlZ3JlZShz cmMudm5hbWUpID4gKFNFTEVDVCBtYXgob3V0X2RlZ3JlZShubmFtZSkpIEZST00gR1JBUEhfVEFC TEUgKGcxIE1BVENIIChub2RlKSBDT0xVTU5TIChub2RlLnZuYW1lIEFTIG5uYW1lKSkpIENPTFVN TlMoc3JjLnZuYW1lIEFTIHNuYW1lLCBkZXN0LnZuYW1lIEFTIGRuYW1lKSk7CiBFUlJPUjogIHN1 YnF1ZXJpZXMgd2l0aGluIEdSQVBIX1RBQkxFIHJlZmVyZW5jZSBhcmUgbm90IHN1cHBvcnRlZAor LS0gVGVzdDogcGF0aCBjb21iaW5hdGlvbiBsaW1pdCBwcmV2ZW50cyBjb21iaW5hdG9yaWFsIGV4 cGxvc2lvbiBpbiB0aGUKKy0tIHJld3JpdGVyIHdoZW4gTUFUQ0ggcGF0dGVybnMgbGFjayBleHBs aWNpdCBJUyBsYWJlbCBleHByZXNzaW9ucy4KK0NSRUFURSBUQUJMRSB2NCAoaWQgaW50IFBSSU1B UlkgS0VZLCB2YWwgaW50KTsKK0NSRUFURSBUQUJMRSB2NSAoaWQgaW50IFBSSU1BUlkgS0VZLCB2 YWwgaW50KTsKK0NSRUFURSBUQUJMRSB2NiAoaWQgaW50IFBSSU1BUlkgS0VZLCB2YWwgaW50KTsK K0NSRUFURSBUQUJMRSB2NyAoaWQgaW50IFBSSU1BUlkgS0VZLCB2YWwgaW50KTsKK0NSRUFURSBU QUJMRSB2OCAoaWQgaW50IFBSSU1BUlkgS0VZLCB2YWwgaW50KTsKK0NSRUFURSBUQUJMRSB2OSAo aWQgaW50IFBSSU1BUlkgS0VZLCB2YWwgaW50KTsKK0NSRUFURSBUQUJMRSB2MTAgKGlkIGludCBQ UklNQVJZIEtFWSwgdmFsIGludCk7CitDUkVBVEUgVEFCTEUgdjExIChpZCBpbnQgUFJJTUFSWSBL RVksIHZhbCBpbnQpOworQ1JFQVRFIFRBQkxFIGUxIChpZCBpbnQgUFJJTUFSWSBLRVksIHNyYyBp bnQsIGRlc3QgaW50KTsKK0NSRUFURSBUQUJMRSBlMiAoaWQgaW50IFBSSU1BUlkgS0VZLCBzcmMg aW50LCBkZXN0IGludCk7CitDUkVBVEUgVEFCTEUgZTMgKGlkIGludCBQUklNQVJZIEtFWSwgc3Jj IGludCwgZGVzdCBpbnQpOworQ1JFQVRFIFRBQkxFIGU0IChpZCBpbnQgUFJJTUFSWSBLRVksIHNy YyBpbnQsIGRlc3QgaW50KTsKK0NSRUFURSBUQUJMRSBlNSAoaWQgaW50IFBSSU1BUlkgS0VZLCBz cmMgaW50LCBkZXN0IGludCk7CitDUkVBVEUgVEFCTEUgZTYgKGlkIGludCBQUklNQVJZIEtFWSwg c3JjIGludCwgZGVzdCBpbnQpOworQ1JFQVRFIFRBQkxFIGU3IChpZCBpbnQgUFJJTUFSWSBLRVks IHNyYyBpbnQsIGRlc3QgaW50KTsKK0NSRUFURSBUQUJMRSBlOCAoaWQgaW50IFBSSU1BUlkgS0VZ LCBzcmMgaW50LCBkZXN0IGludCk7CitJTlNFUlQgSU5UTyB2NCBWQUxVRVMgKDEsIDEwKTsKK0lO U0VSVCBJTlRPIGUxIFZBTFVFUyAoMSwgMSwgMSk7CitDUkVBVEUgUFJPUEVSVFkgR1JBUEggZzUK KyAgICBWRVJURVggVEFCTEVTICgKKyAgICAgICAgdjQgTEFCRUwgdmwgUFJPUEVSVElFUyAoaWQs IHZhbCkgTEFCRUwgdmwyIFBST1BFUlRJRVMgKGlkLCB2YWwpLAorICAgICAgICB2NSBMQUJFTCB2 bCBQUk9QRVJUSUVTIChpZCwgdmFsKSwKKyAgICAgICAgdjYgTEFCRUwgdmwgUFJPUEVSVElFUyAo aWQsIHZhbCksCisgICAgICAgIHY3IExBQkVMIHZsIFBST1BFUlRJRVMgKGlkLCB2YWwpLAorICAg ICAgICB2OCBMQUJFTCB2bCBQUk9QRVJUSUVTIChpZCwgdmFsKSwKKyAgICAgICAgdjkgTEFCRUwg dmwgUFJPUEVSVElFUyAoaWQsIHZhbCksCisgICAgICAgIHYxMCBMQUJFTCB2bCBQUk9QRVJUSUVT IChpZCwgdmFsKSwKKyAgICAgICAgdjExIExBQkVMIHZsIFBST1BFUlRJRVMgKGlkLCB2YWwpCisg ICAgKQorICAgIEVER0UgVEFCTEVTICgKKyAgICAgICAgZTEgU09VUkNFIEtFWSAoc3JjKSBSRUZF UkVOQ0VTIHY0IChpZCkgREVTVElOQVRJT04gS0VZIChkZXN0KSBSRUZFUkVOQ0VTIHY1IChpZCkK KyAgICAgICAgICAgIExBQkVMIGVsIFBST1BFUlRJRVMgKGlkKSwKKyAgICAgICAgZTIgU09VUkNF IEtFWSAoc3JjKSBSRUZFUkVOQ0VTIHY1IChpZCkgREVTVElOQVRJT04gS0VZIChkZXN0KSBSRUZF UkVOQ0VTIHY2IChpZCkKKyAgICAgICAgICAgIExBQkVMIGVsIFBST1BFUlRJRVMgKGlkKSwKKyAg ICAgICAgZTMgU09VUkNFIEtFWSAoc3JjKSBSRUZFUkVOQ0VTIHY2IChpZCkgREVTVElOQVRJT04g S0VZIChkZXN0KSBSRUZFUkVOQ0VTIHY3IChpZCkKKyAgICAgICAgICAgIExBQkVMIGVsIFBST1BF UlRJRVMgKGlkKSwKKyAgICAgICAgZTQgU09VUkNFIEtFWSAoc3JjKSBSRUZFUkVOQ0VTIHY3IChp ZCkgREVTVElOQVRJT04gS0VZIChkZXN0KSBSRUZFUkVOQ0VTIHY4IChpZCkKKyAgICAgICAgICAg IExBQkVMIGVsIFBST1BFUlRJRVMgKGlkKSwKKyAgICAgICAgZTUgU09VUkNFIEtFWSAoc3JjKSBS RUZFUkVOQ0VTIHY4IChpZCkgREVTVElOQVRJT04gS0VZIChkZXN0KSBSRUZFUkVOQ0VTIHY5IChp ZCkKKyAgICAgICAgICAgIExBQkVMIGVsIFBST1BFUlRJRVMgKGlkKSwKKyAgICAgICAgZTYgU09V UkNFIEtFWSAoc3JjKSBSRUZFUkVOQ0VTIHY5IChpZCkgREVTVElOQVRJT04gS0VZIChkZXN0KSBS RUZFUkVOQ0VTIHYxMCAoaWQpCisgICAgICAgICAgICBMQUJFTCBlbCBQUk9QRVJUSUVTIChpZCks CisgICAgICAgIGU3IFNPVVJDRSBLRVkgKHNyYykgUkVGRVJFTkNFUyB2MTAgKGlkKSBERVNUSU5B VElPTiBLRVkgKGRlc3QpIFJFRkVSRU5DRVMgdjExIChpZCkKKyAgICAgICAgICAgIExBQkVMIGVs IFBST1BFUlRJRVMgKGlkKSwKKyAgICAgICAgZTggU09VUkNFIEtFWSAoc3JjKSBSRUZFUkVOQ0VT IHYxMSAoaWQpIERFU1RJTkFUSU9OIEtFWSAoZGVzdCkgUkVGRVJFTkNFUyB2NCAoaWQpCisgICAg ICAgICAgICBMQUJFTCBlbCBQUk9QRVJUSUVTIChpZCkKKyAgICApOworLS0gMy1lbGVtZW50IHVu bGFiZWxlZDogOCAqIDggKiA4ID0gNTEyIGNvbWJpbmF0aW9ucyAodW5kZXIgbGltaXQsIHN1Y2Nl ZWRzKQorU0VMRUNUIGNvdW50KCopIEZST00gR1JBUEhfVEFCTEUgKGc1IE1BVENIIChhKS1bZV0t PihiKSBDT0xVTU5TIChhLmlkIEFTIGFpZCkpOworIGNvdW50IAorLS0tLS0tLQorICAgICAwCiso MSByb3cpCisKKy0tIDUtZWxlbWVudCB1bmxhYmVsZWQ6IDheNSA9IDMyLDc2OCBjb21iaW5hdGlv bnMgKG92ZXIgbGltaXQsIHJlamVjdGVkKQorU0VMRUNUIGNvdW50KCopIEZST00gR1JBUEhfVEFC TEUgKGc1IE1BVENIIChhKS1bZTFdLT4oYiktW2UyXS0+KGMpIENPTFVNTlMgKGEuaWQgQVMgYWlk KSk7CitFUlJPUjogIHRvbyBtYW55IHBhdGggY29tYmluYXRpb25zICgzMjc2OCkgaW4gR1JBUEhf VEFCTEUgcGF0dGVybgorSElOVDogIFVzZSBleHBsaWNpdCBJUyBsYWJlbCBleHByZXNzaW9ucyB0 byByZWR1Y2UgdGhlIG51bWJlciBvZiBtYXRjaGluZyBlbGVtZW50cy4KKy0tIElTIHZsMiBwaW5z IGZpcnN0IHZlcnRleCB0byAxIHRhYmxlOiAxKjgqOCo4KjggPSA0LDA5NiAodW5kZXIgbGltaXQp CitTRUxFQ1QgY291bnQoKikgRlJPTSBHUkFQSF9UQUJMRSAoZzUgTUFUQ0ggKGEgSVMgdmwyKS1b ZTFdLT4oYiktW2UyXS0+KGMpIENPTFVNTlMgKGEuaWQgQVMgYWlkKSk7CisgY291bnQgCistLS0t LS0tCisgICAgIDAKKygxIHJvdykKKworRFJPUCBQUk9QRVJUWSBHUkFQSCBnNTsKK0RST1AgVEFC TEUgZTgsIGU3LCBlNiwgZTUsIGU0LCBlMywgZTIsIGUxOworRFJPUCBUQUJMRSB2MTEsIHYxMCwg djksIHY4LCB2NywgdjYsIHY1LCB2NDsKIC0tIGxlYXZlIHRoZSBvYmplY3RzIGJlaGluZCBmb3Ig cGdfdXBncmFkZS9wZ19kdW1wIHRlc3RzCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9ncmFwaF90YWJsZS5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9ncmFwaF90YWJsZS5zcWwK aW5kZXggYTVkZjQ2NDcuLjY5MzEzNTQ0IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9ncmFwaF90YWJsZS5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZ3JhcGhfdGFibGUu c3FsCkBAIC01OTAsNCArNTkwLDY4IEBAIFNFTEVDVCAqIEZST00gY3VzdG9tZXJzIGNvIFdIRVJF IGNvLmN1c3RvbWVyX2lkID0gKFNFTEVDVCBjdXN0b21lcl9pZCBGUk9NIEdSQVBICiBTRUxFQ1Qg c25hbWUsIGRuYW1lIEZST00gR1JBUEhfVEFCTEUgKGcxIE1BVENIIChzcmMpLT4oZGVzdCkgV0hF UkUgc3JjLnZwcm9wMSA+IChTRUxFQ1QgbWF4KHYxLnZwcm9wMSkgRlJPTSB2MSkgQ09MVU1OUyhz cmMudm5hbWUgQVMgc25hbWUsIGRlc3Qudm5hbWUgQVMgZG5hbWUpKTsKIFNFTEVDVCBzbmFtZSwg ZG5hbWUgRlJPTSBHUkFQSF9UQUJMRSAoZzEgTUFUQ0ggKHNyYyktPihkZXN0KSBXSEVSRSBvdXRf ZGVncmVlKHNyYy52bmFtZSkgPiAoU0VMRUNUIG1heChvdXRfZGVncmVlKG5uYW1lKSkgRlJPTSBH UkFQSF9UQUJMRSAoZzEgTUFUQ0ggKG5vZGUpIENPTFVNTlMgKG5vZGUudm5hbWUgQVMgbm5hbWUp KSkgQ09MVU1OUyhzcmMudm5hbWUgQVMgc25hbWUsIGRlc3Qudm5hbWUgQVMgZG5hbWUpKTsKIAor LS0gVGVzdDogcGF0aCBjb21iaW5hdGlvbiBsaW1pdCBwcmV2ZW50cyBjb21iaW5hdG9yaWFsIGV4 cGxvc2lvbiBpbiB0aGUKKy0tIHJld3JpdGVyIHdoZW4gTUFUQ0ggcGF0dGVybnMgbGFjayBleHBs aWNpdCBJUyBsYWJlbCBleHByZXNzaW9ucy4KK0NSRUFURSBUQUJMRSB2NCAoaWQgaW50IFBSSU1B UlkgS0VZLCB2YWwgaW50KTsKK0NSRUFURSBUQUJMRSB2NSAoaWQgaW50IFBSSU1BUlkgS0VZLCB2 YWwgaW50KTsKK0NSRUFURSBUQUJMRSB2NiAoaWQgaW50IFBSSU1BUlkgS0VZLCB2YWwgaW50KTsK K0NSRUFURSBUQUJMRSB2NyAoaWQgaW50IFBSSU1BUlkgS0VZLCB2YWwgaW50KTsKK0NSRUFURSBU QUJMRSB2OCAoaWQgaW50IFBSSU1BUlkgS0VZLCB2YWwgaW50KTsKK0NSRUFURSBUQUJMRSB2OSAo aWQgaW50IFBSSU1BUlkgS0VZLCB2YWwgaW50KTsKK0NSRUFURSBUQUJMRSB2MTAgKGlkIGludCBQ UklNQVJZIEtFWSwgdmFsIGludCk7CitDUkVBVEUgVEFCTEUgdjExIChpZCBpbnQgUFJJTUFSWSBL RVksIHZhbCBpbnQpOworQ1JFQVRFIFRBQkxFIGUxIChpZCBpbnQgUFJJTUFSWSBLRVksIHNyYyBp bnQsIGRlc3QgaW50KTsKK0NSRUFURSBUQUJMRSBlMiAoaWQgaW50IFBSSU1BUlkgS0VZLCBzcmMg aW50LCBkZXN0IGludCk7CitDUkVBVEUgVEFCTEUgZTMgKGlkIGludCBQUklNQVJZIEtFWSwgc3Jj IGludCwgZGVzdCBpbnQpOworQ1JFQVRFIFRBQkxFIGU0IChpZCBpbnQgUFJJTUFSWSBLRVksIHNy YyBpbnQsIGRlc3QgaW50KTsKK0NSRUFURSBUQUJMRSBlNSAoaWQgaW50IFBSSU1BUlkgS0VZLCBz cmMgaW50LCBkZXN0IGludCk7CitDUkVBVEUgVEFCTEUgZTYgKGlkIGludCBQUklNQVJZIEtFWSwg c3JjIGludCwgZGVzdCBpbnQpOworQ1JFQVRFIFRBQkxFIGU3IChpZCBpbnQgUFJJTUFSWSBLRVks IHNyYyBpbnQsIGRlc3QgaW50KTsKK0NSRUFURSBUQUJMRSBlOCAoaWQgaW50IFBSSU1BUlkgS0VZ LCBzcmMgaW50LCBkZXN0IGludCk7CitJTlNFUlQgSU5UTyB2NCBWQUxVRVMgKDEsIDEwKTsKK0lO U0VSVCBJTlRPIGUxIFZBTFVFUyAoMSwgMSwgMSk7CisKK0NSRUFURSBQUk9QRVJUWSBHUkFQSCBn NQorICAgIFZFUlRFWCBUQUJMRVMgKAorICAgICAgICB2NCBMQUJFTCB2bCBQUk9QRVJUSUVTIChp ZCwgdmFsKSBMQUJFTCB2bDIgUFJPUEVSVElFUyAoaWQsIHZhbCksCisgICAgICAgIHY1IExBQkVM IHZsIFBST1BFUlRJRVMgKGlkLCB2YWwpLAorICAgICAgICB2NiBMQUJFTCB2bCBQUk9QRVJUSUVT IChpZCwgdmFsKSwKKyAgICAgICAgdjcgTEFCRUwgdmwgUFJPUEVSVElFUyAoaWQsIHZhbCksCisg ICAgICAgIHY4IExBQkVMIHZsIFBST1BFUlRJRVMgKGlkLCB2YWwpLAorICAgICAgICB2OSBMQUJF TCB2bCBQUk9QRVJUSUVTIChpZCwgdmFsKSwKKyAgICAgICAgdjEwIExBQkVMIHZsIFBST1BFUlRJ RVMgKGlkLCB2YWwpLAorICAgICAgICB2MTEgTEFCRUwgdmwgUFJPUEVSVElFUyAoaWQsIHZhbCkK KyAgICApCisgICAgRURHRSBUQUJMRVMgKAorICAgICAgICBlMSBTT1VSQ0UgS0VZIChzcmMpIFJF RkVSRU5DRVMgdjQgKGlkKSBERVNUSU5BVElPTiBLRVkgKGRlc3QpIFJFRkVSRU5DRVMgdjUgKGlk KQorICAgICAgICAgICAgTEFCRUwgZWwgUFJPUEVSVElFUyAoaWQpLAorICAgICAgICBlMiBTT1VS Q0UgS0VZIChzcmMpIFJFRkVSRU5DRVMgdjUgKGlkKSBERVNUSU5BVElPTiBLRVkgKGRlc3QpIFJF RkVSRU5DRVMgdjYgKGlkKQorICAgICAgICAgICAgTEFCRUwgZWwgUFJPUEVSVElFUyAoaWQpLAor ICAgICAgICBlMyBTT1VSQ0UgS0VZIChzcmMpIFJFRkVSRU5DRVMgdjYgKGlkKSBERVNUSU5BVElP TiBLRVkgKGRlc3QpIFJFRkVSRU5DRVMgdjcgKGlkKQorICAgICAgICAgICAgTEFCRUwgZWwgUFJP UEVSVElFUyAoaWQpLAorICAgICAgICBlNCBTT1VSQ0UgS0VZIChzcmMpIFJFRkVSRU5DRVMgdjcg KGlkKSBERVNUSU5BVElPTiBLRVkgKGRlc3QpIFJFRkVSRU5DRVMgdjggKGlkKQorICAgICAgICAg ICAgTEFCRUwgZWwgUFJPUEVSVElFUyAoaWQpLAorICAgICAgICBlNSBTT1VSQ0UgS0VZIChzcmMp IFJFRkVSRU5DRVMgdjggKGlkKSBERVNUSU5BVElPTiBLRVkgKGRlc3QpIFJFRkVSRU5DRVMgdjkg KGlkKQorICAgICAgICAgICAgTEFCRUwgZWwgUFJPUEVSVElFUyAoaWQpLAorICAgICAgICBlNiBT T1VSQ0UgS0VZIChzcmMpIFJFRkVSRU5DRVMgdjkgKGlkKSBERVNUSU5BVElPTiBLRVkgKGRlc3Qp IFJFRkVSRU5DRVMgdjEwIChpZCkKKyAgICAgICAgICAgIExBQkVMIGVsIFBST1BFUlRJRVMgKGlk KSwKKyAgICAgICAgZTcgU09VUkNFIEtFWSAoc3JjKSBSRUZFUkVOQ0VTIHYxMCAoaWQpIERFU1RJ TkFUSU9OIEtFWSAoZGVzdCkgUkVGRVJFTkNFUyB2MTEgKGlkKQorICAgICAgICAgICAgTEFCRUwg ZWwgUFJPUEVSVElFUyAoaWQpLAorICAgICAgICBlOCBTT1VSQ0UgS0VZIChzcmMpIFJFRkVSRU5D RVMgdjExIChpZCkgREVTVElOQVRJT04gS0VZIChkZXN0KSBSRUZFUkVOQ0VTIHY0IChpZCkKKyAg ICAgICAgICAgIExBQkVMIGVsIFBST1BFUlRJRVMgKGlkKQorICAgICk7CisKKy0tIDMtZWxlbWVu dCB1bmxhYmVsZWQ6IDggKiA4ICogOCA9IDUxMiBjb21iaW5hdGlvbnMgKHVuZGVyIGxpbWl0LCBz dWNjZWVkcykKK1NFTEVDVCBjb3VudCgqKSBGUk9NIEdSQVBIX1RBQkxFIChnNSBNQVRDSCAoYSkt W2VdLT4oYikgQ09MVU1OUyAoYS5pZCBBUyBhaWQpKTsKKworLS0gNS1lbGVtZW50IHVubGFiZWxl ZDogOF41ID0gMzIsNzY4IGNvbWJpbmF0aW9ucyAob3ZlciBsaW1pdCwgcmVqZWN0ZWQpCitTRUxF Q1QgY291bnQoKikgRlJPTSBHUkFQSF9UQUJMRSAoZzUgTUFUQ0ggKGEpLVtlMV0tPihiKS1bZTJd LT4oYykgQ09MVU1OUyAoYS5pZCBBUyBhaWQpKTsKKworLS0gSVMgdmwyIHBpbnMgZmlyc3QgdmVy dGV4IHRvIDEgdGFibGU6IDEqOCo4KjgqOCA9IDQsMDk2ICh1bmRlciBsaW1pdCkKK1NFTEVDVCBj b3VudCgqKSBGUk9NIEdSQVBIX1RBQkxFIChnNSBNQVRDSCAoYSBJUyB2bDIpLVtlMV0tPihiKS1b ZTJdLT4oYykgQ09MVU1OUyAoYS5pZCBBUyBhaWQpKTsKKworRFJPUCBQUk9QRVJUWSBHUkFQSCBn NTsKK0RST1AgVEFCTEUgZTgsIGU3LCBlNiwgZTUsIGU0LCBlMywgZTIsIGUxOworRFJPUCBUQUJM RSB2MTEsIHYxMCwgdjksIHY4LCB2NywgdjYsIHY1LCB2NDsKKwogLS0gbGVhdmUgdGhlIG9iamVj dHMgYmVoaW5kIGZvciBwZ191cGdyYWRlL3BnX2R1bXAgdGVzdHMKLS0gCjIuNDMuMAoK --00000000000033f6ad06509bf18a--