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 1wEt7N-004WTe-18 for pgsql-hackers@arkaria.postgresql.org; Mon, 20 Apr 2026 18:13: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 1wEt7M-0048sV-1M for pgsql-hackers@arkaria.postgresql.org; Mon, 20 Apr 2026 18:13:08 +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 1wEt7L-0048sM-34 for pgsql-hackers@lists.postgresql.org; Mon, 20 Apr 2026 18:13:08 +0000 Received: from mail-ej1-x62f.google.com ([2a00:1450:4864:20::62f]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wEt7J-00000001xbU-3BJa for pgsql-hackers@lists.postgresql.org; Mon, 20 Apr 2026 18:13:07 +0000 Received: by mail-ej1-x62f.google.com with SMTP id a640c23a62f3a-ba25fd27571so485554366b.0 for ; Mon, 20 Apr 2026 11:13:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1776708779; cv=none; d=google.com; s=arc-20240605; b=aWARYmKJM5kvb9pZj4Y0u6QdHYiDaZIHmwKialxqbID3joeQ/+o5kzV850Rm230Vys vkfBGMOd3O6I7cTRbqHRdxcz2H7zM3KVH0Tb0OKJogGkGaEpZHn2kVzZAcF3+YKPSiOe 4T95TZeSfh6u+ZJb03nTFlMuDE3DLeYXDmsvJEL2oyZ6E5Eb1Z00pQGpjZh3fNeq6qFx dJNkSrqfP4T4bSMyPnnQZudYYC9c4LLzn8SQNZDlsi4CHQzTKyqKSWTKcx7NX2OP24mQ nm6TJTIORWl0/6neb4TfUrPX3k/DD/ZFl6yfQf4amgkzK+271ssRT6Fu+FC0s/7dD/Cn ydOQ== 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=KI+VHnqMXv1VUyQzXPY42exOmHYwpSp5NIDuDVu/wxI=; fh=rf79rTKPGsw7cX8Ly8TKTWm50sbG7CfzRgfTSNZkF6w=; b=Ce9066Ypp3FqnoejDqTakiYmfLA6nE7wofmwIBdZOZc98PFykL98a2ocMVyC2/uDlU lCT7n1QZFZygQbnp0CzmR4SXE13tUTNzrYw9abvDPWmlX/IzxshYkdSkUvz4mV93Q+Uu DsIStnB4ZpB8hwJbQEVCD5WRqzavC7MItEapccoBtVIlir5vBuB/bSZnhG2EuS9fATf6 Lv9ZjdLU3W9Eqq4BOdQRf7MmOk4F6s+z2wvwdzBABsg8omjosIZ5S3bmURiUJINzWXdO 8TgjaeoZoNp51amwQL+v1iYGl5B7y5kJzQeUrKIYttl0xU5KjtYtfcTq5IaW2P+QmK1+ EeMQ==; 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=1776708779; x=1777313579; darn=lists.postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=KI+VHnqMXv1VUyQzXPY42exOmHYwpSp5NIDuDVu/wxI=; b=Y2rY4xskr1wI6QvqJWy/1CYn6v0PtEXyj/RWTfWybPgv9TszaXFr7ffVBNEZZocBrO T2qv6s4h8qD0ZpdukI9S4F4J2djGSlWejA9JGr+0YFZHbp9VExdZsZsJggqkgJOcpega yZ3YdJLssQQzE5xYTTrwe+1OP2Uen0nDcM+q3deXUsZioOBfjDfJHCTFtSfloYRpYU9s hon3ugs6tZTtY/Qv/EOaMLjKtzp5BWnq15Jg5YhdDO5fRE0LU1ms+weOJhS1sx7mM4rX C1xIcOreK4WPJY9zuWDWZUYMjT/fjQ8AqjgJhtzfCoqIfVg5bYwAVGmHnP9LiX80JZku KfpA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776708779; x=1777313579; 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=KI+VHnqMXv1VUyQzXPY42exOmHYwpSp5NIDuDVu/wxI=; b=T37/0teBI9zGDLguePtxJztcLUGo4dMR27meYz8j2SffbHa/jY234k2kKBp2jl4KJC OcfjLhMngZiYuPQdcldO0kK99fpBiw6g9qsWDrcTZv8Xn6SyD3SMqzbYXGjEiCRlRCB2 6dmq7QFR6mOiD4RQWswNH8FwXo7FLLOS+Ou4/dzh4jqlzO8pKhCkRsRcZl0kIzdgwE4J BkTQbAj6hvKr+p9BPi7hC3KR/DiKnX4hPIJrUICwR/4BgDuXUzEU9elzY/1WXAZDzFx1 i21tAqvL62XI7kVcXq7zRHaTIcGOLKesoFzdk5uzSP489BRPTyhLxTd0qe7NMdOE2/58 B0Zg== X-Gm-Message-State: AOJu0YyQ5fsI23ni0BWUEB8loOsSOTYUaoZ9/til9cod34FQgNaPin9X nGup6sPHfJJ2qy1RRJywjXuN8d+xUmZ0yV5p0OTcuuggCJjAb7NwI/GCkHlpk+9lTcgdKZn2Wc9 fOsf4mAYDaoLJE7OWniafdPG+zaPXPIYX8WGF X-Gm-Gg: AeBDieuOys+oBVqRV4iskW998f2XS+ijtU3F3stsD75HCUim76THBEVbhmDnciRjOnM yPLScxiEW5NLtRe72MfvynD5KeNtxCeZRg1AFuXgkSfq7BWc2pGmVW5LQoNnQ6//vFMkbEqjWWo N371HEOA8K9agDnL9OlKjLGQD77ATyuECa+PyeLSgRtbT8+0av89cSCTfFCNmx1ku6kfNHPDk3S uMPk/tx6sDSYgGUzG8vLcb19riP8lwl3qLGwq+1GgyWKjDo8xWb4NWz57f2EtlWLDqPvko9Abxu +V81abIePyecZAeitw== X-Received: by 2002:a17:907:6d17:b0:ba8:a829:e649 with SMTP id a640c23a62f3a-ba8a82a9b9fmr165635966b.30.1776708778837; Mon, 20 Apr 2026 11:12:58 -0700 (PDT) MIME-Version: 1.0 From: SATYANARAYANA NARLAPURAM Date: Mon, 20 Apr 2026 11:12:44 -0700 X-Gm-Features: AQROBzACti6m3BQSgIcZsydc1pFz1_PI1YT5t6sDmVIb9y_eJl8pd2n9BlC4peA Message-ID: Subject: [Bug][patch]: After dropping the last label from a property graph element, invoking pg_get_propgraphdef() triggers an assertion failure To: PostgreSQL Hackers , Ashutosh Bapat Content-Type: multipart/mixed; boundary="000000000000a205b4064fe83fe3" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000a205b4064fe83fe3 Content-Type: multipart/alternative; boundary="000000000000a205b4064fe83fe1" --000000000000a205b4064fe83fe1 Content-Type: text/plain; charset="UTF-8" Hi hackers, ALTER PROPERTY GRAPH ... ALTER ... DROP LABEL currently allows removing the last label from an element, leaving it with zero labels. On assert-enabled builds, pg_get_propgraphdef() hits TRAP: failed Assert("count > 0"), File: "ruleutils.c", Line: 1837, PID: 1821840 Repro: CREATE TABLE t (x int PRIMARY KEY, y int, z int); CREATE PROPERTY GRAPH g VERTEX TABLES (t KEY (x) LABEL l1 LABEL l2); ALTER PROPERTY GRAPH g ALTER VERTEX TABLE t DROP LABEL l2; ALTER PROPERTY GRAPH g ALTER VERTEX TABLE t DROP LABEL l1; SELECT pg_get_propgraphdef('g'::regclass); We can fix it two ways, (1) Prevent dropping the last label; (2) handle zero labels. I feel it is easier to prevent dropping the last label than handling zero labels. Thoughts? The attached patch adds a check in AlterPropGraph() before performDeletion(). It scans pg_propgraph_element_label to count labels for the element, and raises an error if only one remains. A regression test is included that drops labels down to the last one, verifies the error, then re-adds them back. Thanks, Satya --000000000000a205b4064fe83fe1 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi hackers,

ALTER PROPERTY GRAPH ..= . ALTER ... DROP LABEL currently allows removing
the last label from an = element, leaving it with zero labels.

On asser= t-enabled builds, pg_get_propgraphdef() hits
TRAP: failed Assert(= "count > 0"), File: "ruleutils.c", Line: 1837, PID: = 1821840

Repro:

CREATE TAB= LE t (x int PRIMARY KEY, y int, z int);
CREATE PROPERTY GRAPH g VERTEX T= ABLES (t KEY (x) LABEL l1 LABEL l2);
ALTER PROPERTY GRAPH g ALTER VERTEX= TABLE t DROP LABEL l2;
ALTER PROPERTY GRAPH g ALTER VERTEX TABLE t DROP= LABEL l1;
SELECT pg_get_propgraphdef('g'::regclass);

We= can fix it two ways, (1) Prevent dropping the last label; (2) handle zero = labels.
I feel it is easier to prevent dropping the last label than hand= ling zero labels. Thoughts?

The attached patch= adds a check in AlterPropGraph() before
performDeletion(). It scans pg_= propgraph_element_label to count labels
for the element, and raises an e= rror if only one remains. A regression test is included=C2=A0
tha= t drops labels down to the last one, verifies the error, then re-adds them = back.

Thanks,
Satya

=

--000000000000a205b4064fe83fe1-- --000000000000a205b4064fe83fe3 Content-Type: application/octet-stream; name="0001-Prevent-dropping-the-last-label-from-a-property-grap.patch" Content-Disposition: attachment; filename="0001-Prevent-dropping-the-last-label-from-a-property-grap.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mo7iif1o0 RnJvbSA4ZTMzNzNlYzc2ODJiODgxYzViMTJjMGViZjZmNjhiYTg2MGViYjQ1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBzYXR5YW5hcmF5YW5hIG5hcmxhcHVyYW0gPHNhdHlhbmFybGFw dXJhbUBnbWFpbC5jb20+CkRhdGU6IE1vbiwgMjAgQXByIDIwMjYgMTg6MDc6NDAgKzAwMDAKU3Vi amVjdDogW1BBVENIXSBQcmV2ZW50IGRyb3BwaW5nIHRoZSBsYXN0IGxhYmVsIGZyb20gYSBwcm9w ZXJ0eSBncmFwaCBlbGVtZW50CgpBTFRFUiBQUk9QRVJUWSBHUkFQSCAuLi4gRFJPUCBMQUJFTCBh bGxvd2VkIHJlbW92aW5nIHRoZSBsYXN0IGxhYmVsCmZyb20gYW4gZWxlbWVudCwgbGVhdmluZyBp dCB3aXRoIHplcm8gbGFiZWxzLiBUaGlzIGNhdXNlcyAKcGdfZ2V0X3Byb3BncmFwaGRlZigpIHRv IGNyYXNoLgoKQWRkIGEgY2hlY2sgaW4gQWx0ZXJQcm9wR3JhcGgoKSB0aGF0IGNvdW50cyB0aGUg ZWxlbWVudCdzIGxhYmVscwpiZWZvcmUgZGVsZXRpb24gYW5kIGVycm9ycyBvdXQgaWYgb25seSBv bmUgcmVtYWlucy4KClJlcG9ydGVkLWJ5OiBTYXR5YW5hcmF5YW5hIE5hcmxhcHVyYW0gPHNhdHlh bmFybGFwdXJhbUBnbWFpbC5jb20+Ci0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvcHJvcGdyYXBo Y21kcy5jICAgICAgICAgIHwgMzAgKysrKysrKysrKysrKysrKysrKwogLi4uL2V4cGVjdGVkL2Ny ZWF0ZV9wcm9wZXJ0eV9ncmFwaC5vdXQgICAgICAgIHwgIDYgKysrKwogLi4uL3JlZ3Jlc3Mvc3Fs L2NyZWF0ZV9wcm9wZXJ0eV9ncmFwaC5zcWwgICAgIHwgIDQgKysrCiAzIGZpbGVzIGNoYW5nZWQs IDQwIGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9wcm9w Z3JhcGhjbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9wcm9wZ3JhcGhjbWRzLmMKaW5kZXgg NDVkMmZmMWIuLjE2ZWY2MTFiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9wcm9w Z3JhcGhjbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHJvcGdyYXBoY21kcy5jCkBA IC0xNTIyLDYgKzE1MjIsMzYgQEAgQWx0ZXJQcm9wR3JhcGgoUGFyc2VTdGF0ZSAqcHN0YXRlLCBj b25zdCBBbHRlclByb3BHcmFwaFN0bXQgKnN0bXQpCiAJCQkJCQkgICBnZXRfcmVsX25hbWUocGdy ZWxpZCksIHN0bXQtPmVsZW1lbnRfYWxpYXMsIHN0bXQtPmRyb3BfbGFiZWwpLAogCQkJCQlwYXJz ZXJfZXJycG9zaXRpb24ocHN0YXRlLCAtMSkpOwogCisJCS8qCisJCSAqIFByZXZlbnQgZHJvcHBp bmcgdGhlIGxhc3QgbGFiZWwgZnJvbSBhbiBlbGVtZW50LiBFdmVyeSBlbGVtZW50CisJCSAqIG11 c3QgaGF2ZSBhdCBsZWFzdCBvbmUgbGFiZWwuCisJCSAqLworCQl7CisJCQlSZWxhdGlvbgllbHJl bDsKKwkJCVN5c1NjYW5EZXNjIGVsc2NhbjsKKwkJCVNjYW5LZXlEYXRhIGVsa2V5WzFdOworCQkJ aW50CQkJbmxhYmVscyA9IDA7CisKKwkJCWVscmVsID0gdGFibGVfb3BlbihQcm9wZ3JhcGhFbGVt ZW50TGFiZWxSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJU2NhbktleUluaXQoJmVs a2V5WzBdLAorCQkJCQkJQW51bV9wZ19wcm9wZ3JhcGhfZWxlbWVudF9sYWJlbF9wZ2VsZWxpZCwK KwkJCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQkJCU9iamVjdElkR2V0 RGF0dW0ocGVvaWQpKTsKKwkJCWVsc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihlbHJlbCwgUHJv cGdyYXBoRWxlbWVudExhYmVsRWxlbWVudExhYmVsSW5kZXhJZCwKKwkJCQkJCQkJCQl0cnVlLCBO VUxMLCAxLCBlbGtleSk7CisJCQl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZChzeXN0YWJsZV9nZXRu ZXh0KGVsc2NhbikpKQorCQkJCW5sYWJlbHMrKzsKKwkJCXN5c3RhYmxlX2VuZHNjYW4oZWxzY2Fu KTsKKwkJCXRhYmxlX2Nsb3NlKGVscmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCisJCQlpZiAobmxh YmVscyA8PSAxKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lO VkFMSURfT0JKRUNUX0RFRklOSVRJT04pLAorCQkJCQkJIGVycm1zZygiY2Fubm90IGRyb3AgdGhl IGxhc3QgbGFiZWwgZnJvbSBlbGVtZW50IFwiJXNcIiIsCisJCQkJCQkJCXN0bXQtPmVsZW1lbnRf YWxpYXMpLAorCQkJCQkJIGVycmhpbnQoIkV2ZXJ5IGVsZW1lbnQgbXVzdCBoYXZlIGF0IGxlYXN0 IG9uZSBsYWJlbC4iKSkpOworCQl9CisKIAkJT2JqZWN0QWRkcmVzc1NldChvYmosIFByb3BncmFw aEVsZW1lbnRMYWJlbFJlbGF0aW9uSWQsIGVsbGFiZWxvaWQpOwogCQlwZXJmb3JtRGVsZXRpb24o Jm9iaiwgc3RtdC0+ZHJvcF9iZWhhdmlvciwgMCk7CiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX3Byb3BlcnR5X2dyYXBoLm91dCBiL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvY3JlYXRlX3Byb3BlcnR5X2dyYXBoLm91dAppbmRleCBiYzlhNTk2ZS4uNzQw Zjg4NmMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX3Byb3Bl cnR5X2dyYXBoLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9wcm9w ZXJ0eV9ncmFwaC5vdXQKQEAgLTU3LDYgKzU3LDEyIEBAIEFMVEVSIFBST1BFUlRZIEdSQVBIIGcz CiBBTFRFUiBQUk9QRVJUWSBHUkFQSCBnMyBBTFRFUiBWRVJURVggVEFCTEUgdDMgRFJPUCBMQUJF TCB0M2wzeDsgIC0tIGVycm9yCiBFUlJPUjogIHByb3BlcnR5IGdyYXBoICJnMyIgZWxlbWVudCAi dDMiIGhhcyBubyBsYWJlbCAidDNsM3giCiBBTFRFUiBQUk9QRVJUWSBHUkFQSCBnMyBBTFRFUiBW RVJURVggVEFCTEUgdDMgRFJPUCBMQUJFTCB0M2wzOworLS0gVGVzdCB0aGF0IHRoZSBsYXN0IGxh YmVsIG9uIGFuIGVsZW1lbnQgY2Fubm90IGJlIGRyb3BwZWQKK0FMVEVSIFBST1BFUlRZIEdSQVBI IGczIEFMVEVSIFZFUlRFWCBUQUJMRSB0MyBEUk9QIExBQkVMIHQzbDI7CitBTFRFUiBQUk9QRVJU WSBHUkFQSCBnMyBBTFRFUiBWRVJURVggVEFCTEUgdDMgRFJPUCBMQUJFTCB0M2wxOyAgLS0gZXJy b3I6IGxhc3QgbGFiZWwKK0VSUk9SOiAgY2Fubm90IGRyb3AgdGhlIGxhc3QgbGFiZWwgZnJvbSBl bGVtZW50ICJ0MyIKK0hJTlQ6ICBFdmVyeSBlbGVtZW50IG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUg bGFiZWwuCitBTFRFUiBQUk9QRVJUWSBHUkFQSCBnMyBBTFRFUiBWRVJURVggVEFCTEUgdDMgQURE IExBQkVMIHQzbDIgUFJPUEVSVElFUyBBTEwgQ09MVU1OUzsKIEFMVEVSIFBST1BFUlRZIEdSQVBI IGczIERST1AgVkVSVEVYIFRBQkxFUyAodDIpOyAgLS0gZmFpbAogRVJST1I6ICBjYW5ub3QgZHJv cCB2ZXJ0ZXggdDIgb2YgcHJvcGVydHkgZ3JhcGggZzMgYmVjYXVzZSBvdGhlciBvYmplY3RzIGRl cGVuZCBvbiBpdAogREVUQUlMOiAgZWRnZSBlMSBvZiBwcm9wZXJ0eSBncmFwaCBnMyBkZXBlbmRz IG9uIHZlcnRleCB0MiBvZiBwcm9wZXJ0eSBncmFwaCBnMwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvY3JlYXRlX3Byb3BlcnR5X2dyYXBoLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL2NyZWF0ZV9wcm9wZXJ0eV9ncmFwaC5zcWwKaW5kZXggMjQxZjkzZGYuLjRjZjc3MTU5IDEw MDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jcmVhdGVfcHJvcGVydHlfZ3JhcGguc3Fs CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9wcm9wZXJ0eV9ncmFwaC5zcWwKQEAg LTUyLDYgKzUyLDEwIEBAIEFMVEVSIFBST1BFUlRZIEdSQVBIIGczCiAgICAgICAgIEFERCBMQUJF TCB0M2wzIFBST1BFUlRJRVMgQUxMIENPTFVNTlM7CiBBTFRFUiBQUk9QRVJUWSBHUkFQSCBnMyBB TFRFUiBWRVJURVggVEFCTEUgdDMgRFJPUCBMQUJFTCB0M2wzeDsgIC0tIGVycm9yCiBBTFRFUiBQ Uk9QRVJUWSBHUkFQSCBnMyBBTFRFUiBWRVJURVggVEFCTEUgdDMgRFJPUCBMQUJFTCB0M2wzOwor LS0gVGVzdCB0aGF0IHRoZSBsYXN0IGxhYmVsIG9uIGFuIGVsZW1lbnQgY2Fubm90IGJlIGRyb3Bw ZWQKK0FMVEVSIFBST1BFUlRZIEdSQVBIIGczIEFMVEVSIFZFUlRFWCBUQUJMRSB0MyBEUk9QIExB QkVMIHQzbDI7CitBTFRFUiBQUk9QRVJUWSBHUkFQSCBnMyBBTFRFUiBWRVJURVggVEFCTEUgdDMg RFJPUCBMQUJFTCB0M2wxOyAgLS0gZXJyb3I6IGxhc3QgbGFiZWwKK0FMVEVSIFBST1BFUlRZIEdS QVBIIGczIEFMVEVSIFZFUlRFWCBUQUJMRSB0MyBBREQgTEFCRUwgdDNsMiBQUk9QRVJUSUVTIEFM TCBDT0xVTU5TOwogQUxURVIgUFJPUEVSVFkgR1JBUEggZzMgRFJPUCBWRVJURVggVEFCTEVTICh0 Mik7ICAtLSBmYWlsCiBBTFRFUiBQUk9QRVJUWSBHUkFQSCBnMyBEUk9QIFZFUlRFWCBUQUJMRVMg KHQyKSBDQVNDQURFOwogQUxURVIgUFJPUEVSVFkgR1JBUEggZzMgRFJPUCBFREdFIFRBQkxFUyAo ZTIpOwotLSAKMi40My4wCgo= --000000000000a205b4064fe83fe3--