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.94.2) (envelope-from ) id 1uPDLc-002dG7-4h for pgsql-hackers@arkaria.postgresql.org; Wed, 11 Jun 2025 04:46:00 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1uPDLZ-00FL9j-Vu for pgsql-hackers@arkaria.postgresql.org; Wed, 11 Jun 2025 04:45:58 +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.94.2) (envelope-from ) id 1uPDLZ-00FL9b-CP for pgsql-hackers@lists.postgresql.org; Wed, 11 Jun 2025 04:45:58 +0000 Received: from mail-ua1-x92b.google.com ([2607:f8b0:4864:20::92b]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1uPDLY-001N7a-0p for pgsql-hackers@lists.postgresql.org; Wed, 11 Jun 2025 04:45:57 +0000 Received: by mail-ua1-x92b.google.com with SMTP id a1e0cc1a2514c-86dc3482b3dso360342241.0 for ; Tue, 10 Jun 2025 21:45:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1749617155; x=1750221955; 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=IApPAe/UPe+h6X+SFRZbx10wYn+m/SJn563sN6qkgpU=; b=Ldn7Ttdw5w2DeJv11/EOBI3wgdnTxjYExHU1Y0zF/4DrrmMQmqzJXEAQ6HO2891Gab wdbMwKjzZuCvZzDAritandzhvbvSFpz+jMrwtROyIcLKmKxOH0mh2KSUjj+vri32c4gk DSc6P7CPMVEZYpqb7IISoIdVB6MBJ1I2N/91MoiJ0qfbxZ/odrwS4u+3mCn+h0e5BgBp 2UexZXw5PHhZrdteFLfnep2A+/6QBhaWBX6fmfhdbUYshwCywRIKs2Q0Z4V2cH5GAx4F u52z4S2x+57MZItNi2lp2qv/RA5DPe3YtlmvC2ZLJ1QA78fR7pdaAxm1BJUHvDli0VuX zSBQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749617155; x=1750221955; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=IApPAe/UPe+h6X+SFRZbx10wYn+m/SJn563sN6qkgpU=; b=imDSsP56b8hgYsQ3iYwIUHtq7qm5hA7+I9h6ztrTdkF7Cwf4j/hf4Zc8+VXHhOP3dB V/DFCKZoVu7wE1Yw62d3YZJmvSCRpM8zSvEmuEscUcsKGW58LMsREz9PTQ1UMkZEcnxJ pEx2JHL1RmXc5KsHeWYif861XewgzXHYsQcTB0iC+pNMIa6M35MfSzSM5M8MPfwF/U20 zOslgOHdHcghKcgqw+t1LFTuQ0WagPVfjtoMrGNQ/9rsvGsfa5RIxgK5jnv2vymT4gGM FTMFxLGH5ymCxRwbRe0GoOJh3flmzFDQ/+SSC4Vm8KCrQYZWJQGBJTSaRf0vzFxCy6/C UKMw== X-Gm-Message-State: AOJu0YxqmpO1N1q8Mk+Gy811GP49Uhhaq8ebiksGgs1C6jhPsB2xk8lx 8ql25G8muyFyRvZgYVU/71OJUpdvNQUU37EucoRvpHRwXyKa7BXY/uuZhh2/8HSdlbkC7D1v4dI JQbwKWxkH73HIM1jRrKvuU9pYDjYvDymXUwErmW1zlg== X-Gm-Gg: ASbGncsMvDLEJFK7oHqmTt9pBzYAeyYaOtW+v4/meFI5EqJTQEWQ8EFf8SgaCqBV/mF x85CoPWhHUOPSuzjIhaw5b2JfPIxPE8jYr8j75YhgjCx6ai3iGjNeg6ilyWq7GORzhqi9BNCIL3 oLyl/FTp/ddQGM6cjs6tTbW0wmLrmXBlMKgjtl9wtqHw== X-Google-Smtp-Source: AGHT+IEiuaaRrJcFMgd7EuEPCePA0HHH0C/cBLR3PVODPS1Uv3ZxmUutz/ECGXvux9TD6+tJd8OFd+eTOePCfJnqhMA= X-Received: by 2002:a05:6122:2a14:b0:520:4806:a422 with SMTP id 71dfb90a1353d-53121e1ab12mr2254055e0c.3.1749617155139; Tue, 10 Jun 2025 21:45:55 -0700 (PDT) MIME-Version: 1.0 References: <171085360143.2046436.7217841141682511557.pgcf@coridan.postgresql.org> <4e2764f7-f6be-478f-8d7f-f921dbd10f5f@postgrespro.ru> <7fdaf3e8-4c05-4739-bee6-98acc068d1c7@postgrespro.ru> <4433b492-9e97-4334-96d9-ddaaa5083099@postgrespro.ru> <67ecf5fb-e63d-4284-be75-d0479eef81aa@postgrespro.ru> <884bcf9e-d6e3-4b0c-8dcb-7f2110070ac9@postgrespro.ru> <1e74c9fd-830e-4544-b0de-e49ea4b04029@postgrespro.ru> In-Reply-To: <1e74c9fd-830e-4544-b0de-e49ea4b04029@postgrespro.ru> From: jian he Date: Wed, 11 Jun 2025 12:45:17 +0800 X-Gm-Features: AX0GCFtESYLjlSxEG-G_HBkMc2gm1QKCOpiCAHAotl5fbdV6wBYSlU2sFtUyh1E Message-ID: Subject: Re: Add SPLIT PARTITION/MERGE PARTITIONS commands To: Dmitry Koval Cc: pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="00000000000006a8320637447d06" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000006a8320637447d06 Content-Type: text/plain; charset="UTF-8" hi. we generally no need to worry about the partitioned table check constraint, generated column does not apply to newly merged partitions. since partitioned table constraints apply to each individual partition, including newly created partitions. However, there are corner cases: constraints include tableoid column reference. say pk_1, pk_2 is the partition of pk. alter table pk add constraint cc check(tableoid <> 18259); Here, Constraint cc will check whether the tableoid of pk_1 or pk_2 meets the specified criteria. Similarly, if partitions are merged, the newly merged partition must also be evaluated against the constraint cc to ensure it is satisfied. ---------------- The attached patch ensures that the newly merged partition is evaluated against all of its check constraints and that all stored generated columns are recomputed, i guess this would be more safe. Alternatively, we can use pull_varattnos to check whether a constraint or generated expression contains a reference to the tableoid column. --00000000000006a8320637447d06 Content-Type: application/octet-stream; name="v43-0001-MERGE-PARTITIONS-constraint-revalidation.no-cfbot" Content-Disposition: attachment; filename="v43-0001-MERGE-PARTITIONS-constraint-revalidation.no-cfbot" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mbrf9zw90 RnJvbSAyODkyZTc4MGFkYzA4ZWQ2M2MxYTZlOTk4NTVmNTY4OWE1YzViNzRjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IFdlZCwgMTEgSnVuIDIwMjUgMTE6NTk6NDEgKzA4MDAKU3ViamVjdDogW1BBVENIIHY0 MyAxLzFdIE1FUkdFIFBBUlRJVElPTlMgY29uc3RyYWludCByZXZhbGlkYXRpb24uCgpBTFRFUiBU QUJMRSBNRVJHRSBQQVJUSVRJT05TLCBwYXJ0aXRpb25lZCB0YWJsZSBjaGVjayBjb25zdHJhaW50 cyBhbmQgZ2VuZXJhdGVkCmNvbHVtbnMgY2FuIHNvbWV0aW1lcyByZWZlcmVuY2UgdGhlIHRhYmxl b2lkIGNvbHVtbi4gQmVjYXVzZSBvZiB0aGlzLCBBTFRFUgpUQUJMRSBNRVJHRSBQQVJUSVRJT05T IG11c3QgcmUtdmFsaWRhdGUgdGhlc2UgY29uc3RyYWludHMuIFRvIGVuc3VyZSBkYXRhCmludGVn cml0eSwgaXQgbWlnaHQgYmUgc2FmZXN0IHRvIHVuY29uZGl0aW9uYWxseSByZWNvbXB1dGUgYWxs IGdlbmVyYXRlZApleHByZXNzaW9ucyBhbmQgcmUtZXZhbHVhdGUgYWxsIHRoZSBjaGVjayBjb25z dHJhaW50cyBhZ2Fpbi4KLS0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyAgICAg ICAgICAgICAgfCAxNzggKysrKysrKysrKysrKysrKystCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL3BhcnRpdGlvbl9tZXJnZS5vdXQgfCAgMTIgKysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3Bh cnRpdGlvbl9tZXJnZS5zcWwgICAgICB8ICAgNCArCiAzIGZpbGVzIGNoYW5nZWQsIDE4NiBpbnNl cnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1h bmRzL3RhYmxlY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKaW5kZXgg OTJiZWQ0YTJkZDcuLjA3YTM3NDJkMjVkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5k cy90YWJsZWNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwpAQCAt MjIxMjksMTUgKzIyMTI5LDE4IEBAIGdldEF0dHJpYnV0ZXNMaXN0KFJlbGF0aW9uIG1vZGVsUmVs KQogLyoKICAqIGNyZWF0ZVRhYmxlQ29uc3RyYWludHM6IGNyZWF0ZSBjb25zdHJhaW50cywgZGVm YXVsdCB2YWx1ZXMgYW5kIGdlbmVyYXRlZAogICogdmFsdWVzIChwcm90b3R5cGUgaXMgZnVuY3Rp b24gZXhwYW5kVGFibGVMaWtlQ2xhdXNlKS4KKyAqIHRhYiBpcyBwZW5kaW5nLXdvcmsgcXVldWUg Zm9yIG5ld1JlbCwgd2UgbWF5IG5lZWQgaXQgaW4gbW92ZU1lcmdlZFRhYmxlc1Jvd3MuCiAgKi8K IHN0YXRpYyB2b2lkCi1jcmVhdGVUYWJsZUNvbnN0cmFpbnRzKFJlbGF0aW9uIG1vZGVsUmVsLCBS ZWxhdGlvbiBuZXdSZWwpCitjcmVhdGVUYWJsZUNvbnN0cmFpbnRzKExpc3QgKip3cXVldWUsIEFs dGVyZWRUYWJsZUluZm8gKnRhYiwKKwkJCQkJICAgUmVsYXRpb24gbW9kZWxSZWwsIFJlbGF0aW9u IG5ld1JlbCkKIHsKIAlUdXBsZURlc2MJdHVwbGVEZXNjOwogCVR1cGxlQ29uc3RyICpjb25zdHI7 CiAJQXR0ck1hcCAgICAqYXR0bWFwOwogCUF0dHJOdW1iZXIJcGFyZW50X2F0dG5vOwogCWludAkJ CWNjbnVtOworCUxpc3RDZWxsICAgKmxjb247CiAJTGlzdAkgICAqY29va2VkQ29uc3RyYWludHMg PSBOSUw7CiAKIAl0dXBsZURlc2MgPSBSZWxhdGlvbkdldERlc2NyKG1vZGVsUmVsKTsKQEAgLTIy MTcyLDYgKzIyMTc1LDcgQEAgY3JlYXRlVGFibGVDb25zdHJhaW50cyhSZWxhdGlvbiBtb2RlbFJl bCwgUmVsYXRpb24gbmV3UmVsKQogCQkJYm9vbAkJZm91bmRfd2hvbGVfcm93OwogCQkJQXR0ck51 bWJlcgludW07CiAJCQlOb2RlCSAgICpkZWY7CisJCQlOZXdDb2x1bW5WYWx1ZSAqbmV3dmFsOwog CiAJCQlpZiAoYXR0cmlidXRlLT5hdHRnZW5lcmF0ZWQgPT0gQVRUUklCVVRFX0dFTkVSQVRFRF9W SVJUVUFMKQogCQkJCXRoaXNfZGVmYXVsdCA9IGJ1aWxkX2dlbmVyYXRpb25fZXhwcmVzc2lvbiht b2RlbFJlbCwgYXR0cmlidXRlLT5hdHRudW0pOwpAQCAtMjIyMDEsNiArMjIyMDUsMjEgQEAgY3Jl YXRlVGFibGVDb25zdHJhaW50cyhSZWxhdGlvbiBtb2RlbFJlbCwgUmVsYXRpb24gbmV3UmVsKQog CiAJCQkvKiBBZGQgYSBwcmUtY29va2VkIGRlZmF1bHQgZXhwcmVzc2lvbi4gKi8KIAkJCVN0b3Jl QXR0ckRlZmF1bHQobmV3UmVsLCBudW0sIGRlZiwgdHJ1ZSk7CisKKwkJCS8qCisJCQkgKiBTdG9y ZWQgZ2VuZXJhdGVkIGNvbHVtbiBleHByZXNzaW9ucyBpbiBtb2RlbFJlbCBtaWdodCByZWZlcmVu Y2UKKwkJCSAqIHRhYmxlb2lkLiAgbmV3UmVsLCBtb2RlbFJlbCB0YWJsZW9pZCBjbGVhciBpcyBu b3QgdGhlIHNhbWUuIElmCisJCQkgKiBzbywgdGhlc2Ugc3RvcmVkIGdlbmVyYXRlZCBjb2x1bW5z IHJlcXVpcmUgcmVjb21wdXRhdGlvbiBmb3IKKwkJCSAqIG5ld1JlbCB3aXRoaW4gbW92ZU1lcmdl ZFRhYmxlc1Jvd3MuCisJCQkqLworCQkJaWYgKGF0dHJpYnV0ZS0+YXR0Z2VuZXJhdGVkID09IEFU VFJJQlVURV9HRU5FUkFURURfU1RPUkVEKQorCQkJeworCQkJCW5ld3ZhbCA9IChOZXdDb2x1bW5W YWx1ZSAqKSBwYWxsb2MwKHNpemVvZihOZXdDb2x1bW5WYWx1ZSkpOworCQkJCW5ld3ZhbC0+YXR0 bnVtID0gbnVtOworCQkJCW5ld3ZhbC0+ZXhwciA9IGV4cHJlc3Npb25fcGxhbm5lcigoRXhwciAq KSBkZWYpOworCQkJCW5ld3ZhbC0+aXNfZ2VuZXJhdGVkID0gKGF0dHJpYnV0ZS0+YXR0Z2VuZXJh dGVkICE9ICdcMCcpOworCQkJCXRhYi0+bmV3dmFscyA9IGxhcHBlbmQodGFiLT5uZXd2YWxzLCBu ZXd2YWwpOworCQkJfQogCQl9CiAJfQogCkBAIC0yMjI1Miw2ICsyMjI3MSwyOSBAQCBjcmVhdGVU YWJsZUNvbnN0cmFpbnRzKFJlbGF0aW9uIG1vZGVsUmVsLCBSZWxhdGlvbiBuZXdSZWwpCiAJLyog U3RvcmUgQ0hFQ0sgY29uc3RyYWludHMuICovCiAJU3RvcmVDb25zdHJhaW50cyhuZXdSZWwsIGNv b2tlZENvbnN0cmFpbnRzLCB0cnVlKTsKIAorCS8qCisJICogbW9kZWxSZWwgY2hlY2sgY29uc3Ry YWludCBleHByZXNzc2lvbiBtYXkgcmVmZXJlbmNlIHRhYmxlb2lkLCBzbyBsYXRlciBpbgorCSAq IG1vdmVNZXJnZWRUYWJsZXNSb3dzLCB3ZSBuZWVkIGV2dWxhdGUgdGhlIGNoZWNrIGNvbnN0cmFp bnQgYWdhaW4gZm9yIHRoZQorCSAqIG5ld1JlbC4gV2UgY2FuIGNoZWNrIHdlYXRoZXIgY2hlY2sg Y29uc3RyYWludCBjb250YWluIHRhYmxlb2lkIHJlZmVyZW5jZQorCSAqIG9yIG5vdCB2aWEgcHVs bF92YXJhdHRub3MuIEJ1dCB1bmNvbmRpdGlvbmFseSByZXZhdWxhdGUgY2hlY2sgY29zbnRyYWlu dAorCSAqIHNlZW1zIG1vcmUgc2FmZS4KKwkqLworCWZvcmVhY2gobGNvbiwgY29va2VkQ29uc3Ry YWludHMpCisJeworCQlDb29rZWRDb25zdHJhaW50ICpjY29uID0gKENvb2tlZENvbnN0cmFpbnQg KikgbGZpcnN0KGxjb24pOworCisJCWlmICghY2Nvbi0+c2tpcF92YWxpZGF0aW9uICYmIGNjb24t PmNvbnR5cGUgPT0gQ09OU1RSX0NIRUNLKQorCQl7CisJCQlOZXdDb25zdHJhaW50ICpuZXdjb247 CisJCQluZXdjb24gPSAoTmV3Q29uc3RyYWludCAqKSBwYWxsb2MwKHNpemVvZihOZXdDb25zdHJh aW50KSk7CisJCQluZXdjb24tPm5hbWUgPSBjY29uLT5uYW1lOworCQkJbmV3Y29uLT5jb250eXBl ID0gY2Nvbi0+Y29udHlwZTsKKwkJCW5ld2Nvbi0+cXVhbCA9IGNjb24tPmV4cHI7CisKKwkJCXRh Yi0+Y29uc3RyYWludHMgPSBsYXBwZW5kKHRhYi0+Y29uc3RyYWludHMsIG5ld2Nvbik7CisJCX0K Kwl9CisKIAkvKiBEb24ndCBuZWVkIHRoZSBjb29rZWRDb25zdHJhaW50cyBhbnkgbW9yZS4gKi8K IAlsaXN0X2ZyZWVfZGVlcChjb29rZWRDb25zdHJhaW50cyk7CiAKQEAgLTIyMjg3LDcgKzIyMzI5 LDggQEAgY3JlYXRlVGFibGVDb25zdHJhaW50cyhSZWxhdGlvbiBtb2RlbFJlbCwgUmVsYXRpb24g bmV3UmVsKQogICogRnVuY3Rpb24gcmV0dXJucyB0aGUgY3JlYXRlZCByZWxhdGlvbiAobG9ja2Vk IGluIEFjY2Vzc0V4Y2x1c2l2ZUxvY2sgbW9kZSkuCiAgKi8KIHN0YXRpYyBSZWxhdGlvbgotY3Jl YXRlUGFydGl0aW9uVGFibGUoUmFuZ2VWYXIgKm5ld1BhcnROYW1lLCBSZWxhdGlvbiBtb2RlbFJl bCwgT2lkIG93bmVySWQpCitjcmVhdGVQYXJ0aXRpb25UYWJsZShMaXN0ICoqd3F1ZXVlLCBSYW5n ZVZhciAqbmV3UGFydE5hbWUsCisJCQkJCSBSZWxhdGlvbiBtb2RlbFJlbCwgT2lkIG93bmVySWQp CiB7CiAJUmVsYXRpb24JbmV3UmVsOwogCU9pZAkJCW5ld1JlbElkOwpAQCAtMjIyOTYsNiArMjIz MzksNyBAQCBjcmVhdGVQYXJ0aXRpb25UYWJsZShSYW5nZVZhciAqbmV3UGFydE5hbWUsIFJlbGF0 aW9uIG1vZGVsUmVsLCBPaWQgb3duZXJJZCkKIAlMaXN0CSAgICpjb2xMaXN0ID0gTklMOwogCU9p ZAkJCXJlbGFtSWQ7CiAJT2lkCQkJbmFtZXNwYWNlSWQ7CisJQWx0ZXJlZFRhYmxlSW5mbyAqbmV3 X3BhcnRyZWxfdGFiOwogCiAJLyogSWYgZXhpc3RpbmcgcmVsIGlzIHRlbXAsIGl0IG11c3QgYmVs b25nIHRvIHRoaXMgc2Vzc2lvbiAqLwogCWlmIChtb2RlbFJlbC0+cmRfcmVsLT5yZWxwZXJzaXN0 ZW5jZSA9PSBSRUxQRVJTSVNURU5DRV9URU1QICYmCkBAIC0yMjM1Niw2ICsyMjQwMCw5IEBAIGNy ZWF0ZVBhcnRpdGlvblRhYmxlKFJhbmdlVmFyICpuZXdQYXJ0TmFtZSwgUmVsYXRpb24gbW9kZWxS ZWwsIE9pZCBvd25lcklkKQogCSAqLwogCW5ld1JlbCA9IHRhYmxlX29wZW4obmV3UmVsSWQsIE5v TG9jayk7CiAKKwkvKiBGaW5kIG9yIGNyZWF0ZSB3b3JrIHF1ZXVlIGVudHJ5IGZvciBuZXdseSBj cmVhdGVkIHRhYmxlICovCisJbmV3X3BhcnRyZWxfdGFiID0gQVRHZXRRdWV1ZUVudHJ5KHdxdWV1 ZSwgbmV3UmVsKTsKKwogCS8qCiAJICogV2UgaW50ZW5kZWQgdG8gY3JlYXRlIHRoZSBwYXJ0aXRp b24gd2l0aCB0aGUgc2FtZSBwZXJzaXN0ZW5jZSBhcyB0aGUKIAkgKiBwYXJlbnQgdGFibGUsIGJ1 dCB3ZSBzdGlsbCBuZWVkIHRvIHJlY2hlY2sgYmVjYXVzZSB0aGF0IG1pZ2h0IGJlCkBAIC0yMjM3 OCw3ICsyMjQyNSwxMiBAQCBjcmVhdGVQYXJ0aXRpb25UYWJsZShSYW5nZVZhciAqbmV3UGFydE5h bWUsIFJlbGF0aW9uIG1vZGVsUmVsLCBPaWQgb3duZXJJZCkKIAkJCQkJICAgUmVsYXRpb25HZXRS ZWxhdGlvbk5hbWUobW9kZWxSZWwpKSk7CiAKIAkvKiBDcmVhdGUgY29uc3RyYWludHMsIGRlZmF1 bHQgdmFsdWVzIGFuZCBnZW5lcmF0ZWQgdmFsdWVzICovCi0JY3JlYXRlVGFibGVDb25zdHJhaW50 cyhtb2RlbFJlbCwgbmV3UmVsKTsKKwljcmVhdGVUYWJsZUNvbnN0cmFpbnRzKHdxdWV1ZSwgbmV3 X3BhcnRyZWxfdGFiLCBtb2RlbFJlbCwgbmV3UmVsKTsKKworCS8qCisJICogbmVlZCBDQ0ksIHNv IGZyZXNoIHJlbGNhY2hlIGVudHJ5IGhhdmUgbmV3bHkgaW5zdGFsbGVkIGNvbnN0cmFpbnQgaW5m by4KKwkgKi8KKwlDb21tYW5kQ291bnRlckluY3JlbWVudCgpOwogCiAJcmV0dXJuIG5ld1JlbDsK IH0KQEAgLTIyMzg2LDE5ICsyMjQzOCw2NCBAQCBjcmVhdGVQYXJ0aXRpb25UYWJsZShSYW5nZVZh ciAqbmV3UGFydE5hbWUsIFJlbGF0aW9uIG1vZGVsUmVsLCBPaWQgb3duZXJJZCkKIC8qCiAgKiBt b3ZlTWVyZ2VkVGFibGVzUm93czogc2NhbiBwYXJ0aXRpb25zIHRvIGJlIG1lcmdlZCAobWVyZ2lu Z1BhcnRpdGlvbnNMaXN0KQogICogb2YgdGhlIHBhcnRpdGlvbmVkIHRhYmxlIChyZWwpIGFuZCBt b3ZlIHJvd3MgaW50byB0aGUgbmV3IHBhcnRpdGlvbgotICogKG5ld1BhcnRSZWwpLgorICogKG5l d1BhcnRSZWwpLiBXZSBhbHNvIHJlZXZhdWxhdGUgY2hlY2sgY29uc3RyYWludHMgYWdhaW5zdCB0 aGVzZSByb3dzLgogICovCiBzdGF0aWMgdm9pZAotbW92ZU1lcmdlZFRhYmxlc1Jvd3MoUmVsYXRp b24gcmVsLCBMaXN0ICptZXJnaW5nUGFydGl0aW9uc0xpc3QsCi0JCQkJCSBSZWxhdGlvbiBuZXdQ YXJ0UmVsKQorbW92ZU1lcmdlZFRhYmxlc1Jvd3MoTGlzdCAqKndxdWV1ZSwgUmVsYXRpb24gcmVs LAorCQkJCQkgTGlzdCAqbWVyZ2luZ1BhcnRpdGlvbnNMaXN0LCBSZWxhdGlvbiBuZXdQYXJ0UmVs KQogewogCUNvbW1hbmRJZAlteWNpZDsKKwlFU3RhdGUJICAgKmVzdGF0ZTsKKwlFeHByQ29udGV4 dCAqZWNvbnRleHQ7CisJQWx0ZXJlZFRhYmxlSW5mbyAqdGFiOworCUxpc3RDZWxsICAgKmw7CisJ TGlzdENlbGwgICAqbHRhYjsKIAogCS8qIFRoZSBGU00gaXMgZW1wdHksIHNvIGRvbid0IGJvdGhl ciB1c2luZyBpdC4gKi8KIAlpbnQJCQl0aV9vcHRpb25zID0gVEFCTEVfSU5TRVJUX1NLSVBfRlNN OwogCUJ1bGtJbnNlcnRTdGF0ZSBiaXN0YXRlOwkvKiBzdGF0ZSBvZiBidWxrIGluc2VydHMgZm9y IHBhcnRpdGlvbiAqLwogCVR1cGxlVGFibGVTbG90ICpkc3RzbG90OwogCisJLyogRmluZCB0aGUg d29yayBxdWV1ZSBlbnRyeSBmb3IgbmV3IHBhcnRpdGlvbiB0YWJsZTogbmV3UGFydFJlbCAqLwor CXRhYiA9IEFUR2V0UXVldWVFbnRyeSh3cXVldWUsIG5ld1BhcnRSZWwpOworCisJLyoKKwkgKiBH ZW5lcmF0ZSB0aGUgY29uc3RyYWludCBhbmQgZGVmYXVsdCBleGVjdXRpb24gc3RhdGVzCisJICov CisJZXN0YXRlID0gQ3JlYXRlRXhlY3V0b3JTdGF0ZSgpOworCisJLyogQnVpbGQgdGhlIG5lZWRl ZCBleHByZXNzaW9uIGV4ZWN1dGlvbiBzdGF0ZXMgKi8KKwlmb3JlYWNoKGwsIHRhYi0+Y29uc3Ry YWludHMpCisJeworCQlOZXdDb25zdHJhaW50ICpjb24gPSBsZmlyc3QobCk7CisKKwkJc3dpdGNo IChjb24tPmNvbnR5cGUpCisJCXsKKwkJCWNhc2UgQ09OU1RSX0NIRUNLOgorCQkJCWNvbi0+cXVh bHN0YXRlID0gRXhlY1ByZXBhcmVFeHByKChFeHByICopIGV4cGFuZF9nZW5lcmF0ZWRfY29sdW1u c19pbl9leHByKGNvbi0+cXVhbCwgbmV3UGFydFJlbCwgMSksIGVzdGF0ZSk7CisJCQkJYnJlYWs7 CisJCQljYXNlIENPTlNUUl9GT1JFSUdOOgorCQkJCS8qIE5vdGhpbmcgdG8gZG8gaGVyZSAqLwor CQkJCWJyZWFrOworCQkJY2FzZSBDT05TVFJfTk9UTlVMTDoKKwkJCQkvKiBOb3RoaW5nIHRvIGRv IGhlcmUgKi8KKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZWxvZyhFUlJPUiwgInVucmVj b2duaXplZCBjb25zdHJhaW50IHR5cGU6ICVkIiwKKwkJCQkJIChpbnQpIGNvbi0+Y29udHlwZSk7 CisJCX0KKwl9CisKKwlmb3JlYWNoKGwsIHRhYi0+bmV3dmFscykKKwl7CisJCU5ld0NvbHVtblZh bHVlICpleCA9IGxmaXJzdChsKTsKKworCQkvKiBleHByIGFscmVhZHkgcGxhbm5lZCAqLworCQll eC0+ZXhwcnN0YXRlID0gRXhlY0luaXRFeHByKChFeHByICopIGV4LT5leHByLCBOVUxMKTsKKwl9 CisKKwllY29udGV4dCA9IEdldFBlclR1cGxlRXhwckNvbnRleHQoZXN0YXRlKTsKKwogCW15Y2lk ID0gR2V0Q3VycmVudENvbW1hbmRJZCh0cnVlKTsKIAogCS8qIFByZXBhcmUgYSBCdWxrSW5zZXJ0 U3RhdGUgZm9yIHRhYmxlX3R1cGxlX2luc2VydC4gKi8KQEAgLTIyNDU2LDkgKzIyNTUzLDYyIEBA IG1vdmVNZXJnZWRUYWJsZXNSb3dzKFJlbGF0aW9uIHJlbCwgTGlzdCAqbWVyZ2luZ1BhcnRpdGlv bnNMaXN0LAogCQkJCUV4ZWNTdG9yZVZpcnR1YWxUdXBsZShpbnNlcnRzbG90KTsKIAkJCX0KIAor CQkJLyoKKwkJCSAqIENvbnN0cmFpbnRzIGFuZCBHRU5FUkFURUQgZXhwcmVzc2lvbnMgbWlnaHQg cmVmZXJlbmNlIHRoZQorCQkJICogdGFibGVvaWQgY29sdW1uLCBzbyBmaWxsIHR0c190YWJsZU9p ZCB3aXRoIHRoZSBkZXNpcmVkCisJCQkgKiB2YWx1ZS4gIChXZSBtdXN0IGRvIHRoaXMgZWFjaCB0 aW1lLCBiZWNhdXNlIGl0IGdldHMKKwkJCSAqIG92ZXJ3cml0dGVuIHdpdGggbmV3cmVsJ3MgT0lE IGR1cmluZyBzdG9yaW5nLikKKwkJCSovCisJCQlpbnNlcnRzbG90LT50dHNfdGFibGVPaWQgPSBS ZWxhdGlvbkdldFJlbGlkKG5ld1BhcnRSZWwpOworCisJCQkvKgorCQkJICogTm93LCBldmFsdWF0 ZSBhbnkgZ2VuZXJhdGVkIGV4cHJlc3Npb25zIHdob3NlIGlucHV0cyBjb21lIGZyb20KKwkJCSAq IHRoZSBuZXcgdHVwbGUuICBXZSBhc3N1bWUgdGhlc2UgY29sdW1ucyB3b24ndCByZWZlcmVuY2Ug ZWFjaAorCQkJICogb3RoZXIsIHNvIHRoYXQgdGhlcmUncyBubyBvcmRlcmluZyBkZXBlbmRlbmN5 LgorCQkJKi8KKwkJCWVjb250ZXh0LT5lY3h0X3NjYW50dXBsZSA9IGluc2VydHNsb3Q7CisJCQlm b3JlYWNoKGwsIHRhYi0+bmV3dmFscykKKwkJCXsKKwkJCQlOZXdDb2x1bW5WYWx1ZSAqZXggPSBs Zmlyc3QobCk7CisKKwkJCQlpZiAoIWV4LT5pc19nZW5lcmF0ZWQpCisJCQkJCWNvbnRpbnVlOwor CisJCQkJaW5zZXJ0c2xvdC0+dHRzX3ZhbHVlc1tleC0+YXR0bnVtIC0gMV0KKwkJCQkJPSBFeGVj RXZhbEV4cHIoZXgtPmV4cHJzdGF0ZSwKKwkJCQkJCQkJCWVjb250ZXh0LAorCQkJCQkJCQkJJmlu c2VydHNsb3QtPnR0c19pc251bGxbZXgtPmF0dG51bSAtIDFdKTsKKwkJCX0KKworCQkJZm9yZWFj aChsLCB0YWItPmNvbnN0cmFpbnRzKQorCQkJeworCQkJCU5ld0NvbnN0cmFpbnQgKmNvbiA9IGxm aXJzdChsKTsKKworCQkJCXN3aXRjaCAoY29uLT5jb250eXBlKQorCQkJCXsKKwkJCQkJY2FzZSBD T05TVFJfQ0hFQ0s6CisJCQkJCQlpZiAoIUV4ZWNDaGVjayhjb24tPnF1YWxzdGF0ZSwgZWNvbnRl eHQpKQorCQkJCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJCQllcnJjb2RlKEVSUkNPREVfQ0hF Q0tfVklPTEFUSU9OKSwKKwkJCQkJCQkJCWVycm1zZygiY2hlY2sgY29uc3RyYWludCBcIiVzXCIg b2YgcmVsYXRpb24gXCIlc1wiIGlzIHZpb2xhdGVkIGJ5IHNvbWUgcm93IiwKKwkJCQkJCQkJCQkg ICBjb24tPm5hbWUsIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKG5ld1BhcnRSZWwpKSwKKwkJCQkJ CQkJCWVycnRhYmxlY29uc3RyYWludChuZXdQYXJ0UmVsLCBjb24tPm5hbWUpKTsKKwkJCQkJCWJy ZWFrOworCQkJCQljYXNlIENPTlNUUl9OT1ROVUxMOgorCQkJCQljYXNlIENPTlNUUl9GT1JFSUdO OgorCQkJCQkJLyogTm90aGluZyB0byBkbyBoZXJlICovCisJCQkJCQlicmVhazsKKwkJCQkJZGVm YXVsdDoKKwkJCQkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgY29uc3RyYWludCB0eXBlOiAl ZCIsCisJCQkJCQkJIChpbnQpIGNvbi0+Y29udHlwZSk7CisJCQkJfQorCQkJfQorCiAJCQkvKiBX cml0ZSB0aGUgdHVwbGUgb3V0IHRvIHRoZSBuZXcgcmVsYXRpb24uICovCiAJCQl0YWJsZV90dXBs ZV9pbnNlcnQobmV3UGFydFJlbCwgaW5zZXJ0c2xvdCwgbXljaWQsCiAJCQkJCQkJICAgdGlfb3B0 aW9ucywgYmlzdGF0ZSk7CisKKwkJCVJlc2V0RXhwckNvbnRleHQoZWNvbnRleHQpOwogCQl9CiAK IAkJdGFibGVfZW5kc2NhbihzY2FuKTsKQEAgLTIyNDcwLDEwICsyMjYyMCwyMiBAQCBtb3ZlTWVy Z2VkVGFibGVzUm93cyhSZWxhdGlvbiByZWwsIExpc3QgKm1lcmdpbmdQYXJ0aXRpb25zTGlzdCwK IAkJRXhlY0Ryb3BTaW5nbGVUdXBsZVRhYmxlU2xvdChzcmNzbG90KTsKIAl9CiAKKwlGcmVlRXhl Y3V0b3JTdGF0ZShlc3RhdGUpOwogCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3QoZHN0c2xv dCk7CiAJRnJlZUJ1bGtJbnNlcnRTdGF0ZShiaXN0YXRlKTsKIAogCXRhYmxlX2ZpbmlzaF9idWxr X2luc2VydChuZXdQYXJ0UmVsLCB0aV9vcHRpb25zKTsKKworCS8qCisJICogaW4gUGhhc2UzLCB3 ZSBkb24ndCBuZWVkIHByb2Nlc3MgdGhpcyBuZXdQYXJ0UmVsLiAgc2luY2Ugd2UgYWxyZWFkeQor CSAqIHByb2Nlc3NlZCBpbiBoZXJlLCBzbyBkZWxldGUgdGhlIEFMVEVSIFRBQkxFIHF1ZXVlIG9m IGl0LgorCSovCisJZm9yZWFjaChsdGFiLCAqd3F1ZXVlKQorCXsKKwkJdGFiID0gKEFsdGVyZWRU YWJsZUluZm8gKikgbGZpcnN0KGx0YWIpOworCQlpZiAodGFiLT5yZWxpZCA9PSBSZWxhdGlvbkdl dFJlbGlkKG5ld1BhcnRSZWwpKQorCQkJKndxdWV1ZSA9IGxpc3RfZGVsZXRlX2NlbGwoKndxdWV1 ZSwgbHRhYik7CisJfQogfQogCiAvKgpAQCAtMjI1OTcsNyArMjI3NTksNyBAQCBBVEV4ZWNNZXJn ZVBhcnRpdGlvbnMoTGlzdCAqKndxdWV1ZSwgQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLCBSZWxhdGlv biByZWwsCiAKIAkvKiBDcmVhdGUgdGFibGUgZm9yIG5ldyBwYXJ0aXRpb24sIHVzZSBwYXJ0aXRp b25lZCB0YWJsZSBhcyBtb2RlbC4gKi8KIAlBc3NlcnQoT2lkSXNWYWxpZChvd25lcklkKSk7Ci0J bmV3UGFydFJlbCA9IGNyZWF0ZVBhcnRpdGlvblRhYmxlKGNtZC0+bmFtZSwgcmVsLCBvd25lcklk KTsKKwluZXdQYXJ0UmVsID0gY3JlYXRlUGFydGl0aW9uVGFibGUod3F1ZXVlLCBjbWQtPm5hbWUs IHJlbCwgb3duZXJJZCk7CiAKIAkvKgogCSAqIFN3aXRjaCB0byB0aGUgdGFibGUgb3duZXIncyB1 c2VyaWQsIHNvIHRoYXQgYW55IGluZGV4IGZ1bmN0aW9ucyBhcmUgcnVuCkBAIC0yMjYxMyw3ICsy Mjc3NSw3IEBAIEFURXhlY01lcmdlUGFydGl0aW9ucyhMaXN0ICoqd3F1ZXVlLCBBbHRlcmVkVGFi bGVJbmZvICp0YWIsIFJlbGF0aW9uIHJlbCwKIAlSZXN0cmljdFNlYXJjaFBhdGgoKTsKIAogCS8q IENvcHkgZGF0YSBmcm9tIG1lcmdlZCBwYXJ0aXRpb25zIHRvIG5ldyBwYXJ0aXRpb24uICovCi0J bW92ZU1lcmdlZFRhYmxlc1Jvd3MocmVsLCBtZXJnaW5nUGFydGl0aW9uc0xpc3QsIG5ld1BhcnRS ZWwpOworCW1vdmVNZXJnZWRUYWJsZXNSb3dzKHdxdWV1ZSwgcmVsLCBtZXJnaW5nUGFydGl0aW9u c0xpc3QsIG5ld1BhcnRSZWwpOwogCiAJLyogRHJvcCB0aGUgY3VycmVudCBwYXJ0aXRpb25zIGJl Zm9yZSBhdHRhY2hpbmcgdGhlIG5ldyBvbmUuICovCiAJZm9yZWFjaF9wdHIoUmVsYXRpb25EYXRh LCBtZXJnaW5nUGFydGl0aW9uLCBtZXJnaW5nUGFydGl0aW9uc0xpc3QpCmRpZmYgLS1naXQgYS9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9tZXJnZS5vdXQgYi9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9tZXJnZS5vdXQKaW5kZXggZTc2Y2VhMmEwM2IuLjA2 NDIwNmI5NzM3IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlv bl9tZXJnZS5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0aXRpb25fbWVy Z2Uub3V0CkBAIC0xMDM2LDYgKzEwMzYsOCBAQCBBTFRFUiBUQUJMRSB0IEFERCBDT05TVFJBSU5U IHRfYl9jaGVjayBDSEVDSyAoYiA+IDApOwogQUxURVIgVEFCTEUgdCBBREQgQ09OU1RSQUlOVCB0 X2JfY2hlY2sxIENIRUNLIChiID4gMCkgTk9UIEVORk9SQ0VEOwogQUxURVIgVEFCTEUgdCBBREQg Q09OU1RSQUlOVCB0X2JfY2hlY2syIENIRUNLIChiID4gMCkgTk9UIFZBTElEOwogQUxURVIgVEFC TEUgdCBBREQgQ09OU1RSQUlOVCB0X2Jfbm4gTk9UIE5VTEwgYiBOT1QgVkFMSUQ7CitJTlNFUlQg SU5UTyB0cF8wXzEoaSwgdCwgYikgVkFMVUVTKDAsIERFRkFVTFQsIDEpOworSU5TRVJUIElOVE8g dHBfMV8yKGksIHQsIGIpIFZBTFVFUygxLCBERUZBVUxULCAyKTsKIENSRUFURSBPUiBSRVBMQUNF IEZVTkNUSU9OIHRyaWdnZXJfZnVuY3Rpb24oKSBSRVRVUk5TIHRyaWdnZXIgTEFOR1VBR0UgJ3Bs cGdzcWwnIEFTCiAkQk9EWSQKIEJFR0lOCkBAIC0xMDkzLDYgKzEwOTUsMTYgQEAgTm90LW51bGwg Y29uc3RyYWludHM6CiBUcmlnZ2VyczoKICAgICB0X2JlZm9yZV9pbnNlcnRfcm93X3RyaWdnZXIg QkVGT1JFIElOU0VSVCBPTiB0cF8wXzEgRk9SIEVBQ0ggUk9XIEVYRUNVVEUgRlVOQ1RJT04gdHJp Z2dlcl9mdW5jdGlvbigndCcpLCBPTiBUQUJMRSB0CiAKK0lOU0VSVCBJTlRPIHQoaSwgdCwgYikg VkFMVUVTKDEsIERFRkFVTFQsIDMpOworTk9USUNFOiAgdHJpZ2dlcih0KSBjYWxsZWQ6IGFjdGlv biA9IElOU0VSVCwgd2hlbiA9IEJFRk9SRSwgbGV2ZWwgPSBST1cKK1NFTEVDVCB0YWJsZW9pZDo6 cmVnY2xhc3MsICogRlJPTSB0IE9SREVSIEJZIGI7CisgdGFibGVvaWQgfCBpIHwgICAgICAgdCAg ICAgICAgfCBiIHwgICAgIGQgICAgICAKKy0tLS0tLS0tLS0rLS0tKy0tLS0tLS0tLS0tLS0tLS0r LS0tKy0tLS0tLS0tLS0tLQorIHRwXzBfMSAgIHwgMCB8IGRlZmF1bHRfdHBfMF8xIHwgMSB8IDAx LTAxLTIwMjIKKyB0cF8wXzEgICB8IDEgfCBkZWZhdWx0X3RwXzFfMiB8IDIgfCAwMS0wMS0yMDIy CisgdHBfMF8xICAgfCAxIHwgZGVmYXVsdF90ICAgICAgfCAzIHwgMDEtMDEtMjAyMgorKDMgcm93 cykKKwogRFJPUCBUQUJMRSB0OwogRFJPUCBGVU5DVElPTiB0cmlnZ2VyX2Z1bmN0aW9uKCk7CiAt LSBUZXN0IE1FUkdFIFBBUlRJVElPTlMgd2l0aCBub3QgdmFsaWQgZm9yZWlnbiBrZXkgY29uc3Ry YWludApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcGFydGl0aW9uX21lcmdlLnNx bCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BhcnRpdGlvbl9tZXJnZS5zcWwKaW5kZXggZDcyYWYw NjJlZWUuLmE4MzJlYjg1NWVkIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wYXJ0 aXRpb25fbWVyZ2Uuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BhcnRpdGlvbl9tZXJn ZS5zcWwKQEAgLTY5OCw2ICs2OTgsOCBAQCBBTFRFUiBUQUJMRSB0IEFERCBDT05TVFJBSU5UIHRf Yl9jaGVjazEgQ0hFQ0sgKGIgPiAwKSBOT1QgRU5GT1JDRUQ7CiBBTFRFUiBUQUJMRSB0IEFERCBD T05TVFJBSU5UIHRfYl9jaGVjazIgQ0hFQ0sgKGIgPiAwKSBOT1QgVkFMSUQ7CiBBTFRFUiBUQUJM RSB0IEFERCBDT05TVFJBSU5UIHRfYl9ubiBOT1QgTlVMTCBiIE5PVCBWQUxJRDsKIAorSU5TRVJU IElOVE8gdHBfMF8xKGksIHQsIGIpIFZBTFVFUygwLCBERUZBVUxULCAxKTsKK0lOU0VSVCBJTlRP IHRwXzFfMihpLCB0LCBiKSBWQUxVRVMoMSwgREVGQVVMVCwgMik7CiBDUkVBVEUgT1IgUkVQTEFD RSBGVU5DVElPTiB0cmlnZ2VyX2Z1bmN0aW9uKCkgUkVUVVJOUyB0cmlnZ2VyIExBTkdVQUdFICdw bHBnc3FsJyBBUwogJEJPRFkkCiBCRUdJTgpAQCAtNzE3LDYgKzcxOSw4IEBAIENSRUFURSBUUklH R0VSIHRwXzFfMl9iZWZvcmVfaW5zZXJ0X3Jvd190cmlnZ2VyIEJFRk9SRSBJTlNFUlQgT04gdHBf MV8yIEZPUiBFQUNICiBBTFRFUiBUQUJMRSB0IE1FUkdFIFBBUlRJVElPTlMgKHRwXzBfMSwgdHBf MV8yKSBJTlRPIHRwXzBfMTsKIFxkKyB0cF8wXzEKIAorSU5TRVJUIElOVE8gdChpLCB0LCBiKSBW QUxVRVMoMSwgREVGQVVMVCwgMyk7CitTRUxFQ1QgdGFibGVvaWQ6OnJlZ2NsYXNzLCAqIEZST00g dCBPUkRFUiBCWSBiOwogRFJPUCBUQUJMRSB0OwogRFJPUCBGVU5DVElPTiB0cmlnZ2VyX2Z1bmN0 aW9uKCk7CiAKLS0gCjIuMzQuMQoK --00000000000006a8320637447d06--