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 1w9xg3-001vdn-2E for pgsql-hackers@arkaria.postgresql.org; Tue, 07 Apr 2026 04:04:36 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w9xg1-00EHjz-1L for pgsql-hackers@arkaria.postgresql.org; Tue, 07 Apr 2026 04:04:33 +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 1w9xg0-00EHjq-2f for pgsql-hackers@lists.postgresql.org; Tue, 07 Apr 2026 04:04:33 +0000 Received: from mail-ua1-x92a.google.com ([2607:f8b0:4864:20::92a]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w9xfz-00000000y2F-1MtV for pgsql-hackers@lists.postgresql.org; Tue, 07 Apr 2026 04:04:32 +0000 Received: by mail-ua1-x92a.google.com with SMTP id a1e0cc1a2514c-953c5738c03so2994475241.2 for ; Mon, 06 Apr 2026 21:04:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775534670; cv=none; d=google.com; s=arc-20240605; b=dc+VBOehkp69URBzP3ufTqJoZhD5GKike9bVDl0cUR1X+908YkxRjJmyG5kea3GM0t 5Dki5VG02mQTJMRhDv0egHlhUjoAWaHrfLEJksbCpiwAEeUqd7wQSHlde8+OiY37iOGp cN+FzqlPN+Iyj24diwAKjvvyX0UONkz65OY4geEVCKQrH3bl8KSViFR1thAcpJBez2aw fju/FNlLyChAOJCdiUiZq/v92TPkWx693VXUsEfcNopVkxp9qQq8e5esT37HhYAc1IQC VgzHWsECg4xnzBYIAR68WkeH07mvsBbaRHUv/6zKTjb9UC2OntJ2GH7k8eTVFLhM6eS9 prkQ== 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=VPdlPoFGAMUtaNJ6lJLZIpQkfQSFig9T/Wgp3MqnmWM=; fh=lxFsBwc7frzp0db/MCjCNrQVYjk3LV+5XHdPJ18ps9E=; b=bVFRvuPDl8lvkUMwCbbodK+uEMQEV/K8hS76/9u0PaGKdbt/4rIsMOjWQ6HXb0DQMb 5GtDKxy9xoCV81FYq7S9iAxYu9NCYByH5IYlQj/O3FOVaS53tLo3l7/TVWwLE29NMEBT 8nCFOuOjkjZdLn0gDqYm6XMv2kQf4koNAavf6Vj1l1bsC/I33BtpRCjX9ybrg0KBa/5z 0BNMxqEzSNm4SDyWyfp1PqmXA8zMBDskcnke1nlP95Y8So0blGgwcbhPbLbceML7mw1J v0p6BD/3KItTpqGlB+UvBofmVZvTZ5P5L1Kgxi5SO61450RgJf17bhUcN9ltnL1Ufzth utyQ==; 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=1775534670; x=1776139470; 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=VPdlPoFGAMUtaNJ6lJLZIpQkfQSFig9T/Wgp3MqnmWM=; b=Dw5ks4KZ33NBnaU2leckwOHUbYloJXsQJr3nOKVyeCQUDvAg9G9Qx7Wh0y77OLvRXz R27/VFoC+nCf8m2Gc2ixiIIoxNG3RmA2dwOvAXDcNle9huAa88HIX0N4IgoEOFfnImDs J7dgz67Cz9XxDB0eVwMN8vi0CfIPdCiywBoroX/dWu1Zvf7Y9IvAPiY+G8IvFQ0+piBE BOlitjBLVTmFanMnZecy7zdmT56Qh/oezcBLCIShbjHFRLaVCgUc8UEqvLaCDWKMyAgP i6vRnZwoZASejljLItys0w5CFTR/TXemaVJyVJxJYRLAR0hvDMBw04KSxqNmrxHCF4s7 cZfQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775534670; x=1776139470; 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=VPdlPoFGAMUtaNJ6lJLZIpQkfQSFig9T/Wgp3MqnmWM=; b=Am1wec3Chbb9lmbnouXpiIMg/OmvZK8jdsNLhsikzsFdEh27YbLS3oCy5NKCpJIxVi pSFIg0IScTl1QiZmZKge8A1lYzRkh2Pra3wzYYJXCJk2gO8MyPzLHDRU3C/NzdTsd22d VY3Q9zShI1EW2xoAMhVKesiAdijwdDhgxnjDwD37szplx6v+6EeMZyCtwaWhBfldp5Iq jQeUGo6WHqmZsXsnJAJLRhL8R/9Rg0c9iubf7v4ZxqiWNtLA+a+tV7TCPu2eMKF1qCtc nIjTD9XPbM0/2G7zrQOTB4lz27z5hOhaUVCT0A+Mpc7smlx8wFHcf3Sr6OiqG6e052Rz AIXQ== X-Forwarded-Encrypted: i=1; AJvYcCXHot9oidL+BCesl/ifLIDNBxdoBGAFkmU1Kkj41gWhcObYJtO2zsiOYKrj5za3/FCw7/tyTQg9dIqclg7v@lists.postgresql.org X-Gm-Message-State: AOJu0YxalJYGKkIfPo/3cOBjZDnPwyjbh5QRK7keiPF4JSNxF8eB5BYj 5g0N2hACFhCDNJdF1F5AgtdCf6qGheL35XJxcuxNtYSE0UIVoE7JRQjSX9X9qOYV0sfVVJOJAJt jK4K7VGlPawGAQFvuXVFKzzDTSO1jyKI= X-Gm-Gg: AeBDiethRcmz6f8PboTuX+UxOjKgvtahNKNQtsSmtWD2AEAesxJJBJAArXr2Z6hWHAn VJQcjnBE7vOwEr1actRDJ7Cf9V6EsxyCwb0mzj4BiNrnMWGwsbLjxaXU1Isrjmm6YZAr1VgXcA5 iigEOOclSPL0N0rFDyehrVI4/qp/5l7OAnksxo8d3TmDnjq/zL3E58W4r4mhVr0bNxN4uvgbIcs PRdl//G+HgaaL390y5CSoLiWck02NOVSrSHqEt7CZanHIwSgiNgFHODGKemlsC9m98eg1Cqo75V bbKfeHhvnDCd6F9Dn8N0w7LiVmKwngownKGADeRv6rIUEOL7GzUTQNLqYe2dU2WhMkdkpY6EDCF u7k7YgupELEwAg+L503IQtvZO+3pHo4GVqkmvHROpT5Sqxl9IM+3EMOVI6QBEDCcBIKUjOSnms+ LT1aYwNUyTerF/KqigYcDQSA== X-Received: by 2002:a05:6102:80a3:b0:604:f155:9374 with SMTP id ada2fe7eead31-605a4e9dbb0mr6255045137.15.1775534670494; Mon, 06 Apr 2026 21:04:30 -0700 (PDT) MIME-Version: 1.0 References: <53a13f97-340f-4d04-9dcc-77ca3ffb6a6a@eisentraut.org> <85ac7f0e-d95f-4377-ade0-8941fd328012@eisentraut.org> <7d63ddfa-c735-4dfe-8c7a-4f1e2a621058@eisentraut.org> <4606deaa-7d65-4f22-8a78-356c3180be9d@eisentraut.org> <53f1c094-3c29-4ef6-a9bd-dc2e7894ceb0@eisentraut.org> In-Reply-To: From: jian he Date: Tue, 7 Apr 2026 12:03:52 +0800 X-Gm-Features: AQROBzBPysTxdG_N3Am8WY7RSabmsIXiBTffjMQdUQmrGiVJ0vkCcUTxmVbyNuE Message-ID: Subject: Re: SQL:2011 Application Time Update & Delete To: Paul A Jungwirth Cc: Peter Eisentraut , Chao Li , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="0000000000005257f3064ed6e179" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000005257f3064ed6e179 Content-Type: text/plain; charset="UTF-8" hi. https://git.postgresql.org/cgit/postgresql.git/commit/?id=8e72d914c52876525a90b28444453de8085c866f DROP TABLE If EXISTS tt; CREATE TABLE tt(id int, valid_at int4range, amt int, CONSTRAINT fpo2_check CHECK (upper(valid_at) <> '11')); CREATE OR REPLACE FUNCTION dummy_update_func() RETURNS trigger AS $$ BEGIN RAISE NOTICE 'dummy_update_func(%) called: action = %, old = %, new = %', TG_ARGV[0], TG_OP, OLD, NEW; RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE TRIGGER some_trig_before BEFORE UPDATE OR INSERT ON tt FOR EACH ROW EXECUTE PROCEDURE dummy_update_func('before'); INSERT INTO tt VALUES (1, '[1,100)', 2); UPDATE tt FOR PORTION OF valid_at FROM 1 TO 12 SET amt = 3; NOTICE: dummy_update_func(before) called: action = UPDATE, old = (1,"[1,100)",2), new = (1,"[1,12)",3) NOTICE: dummy_update_func(before) called: action = INSERT, old = , new = (1,"[12,100)",2) As you can see, ExecGetAllUpdatedCols does not account for the valid_at column, even though it is actively being updated. ExecGetAllUpdatedCols is being used serval places, IMHO, we need to add some comments on ExecGetAllUpdatedCols explaining this behavior and maybe add some regression tests. I'm not sure if it's safe for ExecGetAllUpdatedCols to ignore the FOR PORTION OF column. I reliazed this issue because of https://commitfest.postgresql.org/patch/6270/ I saw your transformForPortionOfClause comments. /* * The range column will change, but you don't need UPDATE permission * on it, so we don't add to updatedCols here. XXX: If * https://www.postgresql.org/message-id/CACJufxEtY1hdLcx%3DFhnqp-ERcV1PhbvELG5COy_CZjoEW76ZPQ%40mail.gmail.com * is merged (only validate CHECK constraints if they depend on one of * the columns being UPDATEd), we need to make sure that code knows * that we are updating the application-time column. */ But this comment is about FOR PORTION OF column permission, not about ExecGetAllUpdatedCols. ------------------------------------------------------------------------------------------------------------------- transformForPortionOfClause if (contain_volatile_functions_after_planning((Expr *) result->targetRange)) ereport(ERROR, (errmsg("FOR PORTION OF bounds cannot contain volatile functions"))); Need errcode(ERRCODE_FEATURE_NOT_SUPPORTED). coerce_to_target_type function comment: * This is the general-purpose entry point for arbitrary type coercion * operations. Direct use of the component operations can_coerce_type, * coerce_type, and coerce_type_typmod should be restricted to special * cases (eg, when the conversion is expected to succeed). We should use coerce_to_target_type more, not can_coerce_type, coerce_type individually. coerce_to_target_type also handles `UNKNOWN` constant, which ensures the deparsing casts to the correct data type. please see the attached refactoring for https://git.postgresql.org/cgit/postgresql.git/commit/?id=8e72d914c52876525a90b28444453de8085c866f -- jian https://www.enterprisedb.com/ --0000000000005257f3064ed6e179 Content-Type: application/octet-stream; name="v1-0001-refactoring-transformForPortionOfClause.no-cfbot" Content-Disposition: attachment; filename="v1-0001-refactoring-transformForPortionOfClause.no-cfbot" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mno3gswo0 RnJvbSA2YzhjMzg2NjkzYTI1NjhlYTViMWYwZGQ2YjdhODU0YzA2N2NhODQ5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IFR1ZSwgNyBBcHIgMjAyNiAxMjowMzowNyArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjEg MS8xXSByZWZhY3RvcmluZyB0cmFuc2Zvcm1Gb3JQb3J0aW9uT2ZDbGF1c2UKCldlIHNob3VsZCB1 c2UgY29lcmNlX3RvX3RhcmdldF90eXBlIG1vcmUsIG5vdCBjYW5fY29lcmNlX3R5cGUsIGNvZXJj ZV90eXBlCmluZGl2aWR1YWxseS4gIGNvZXJjZV90b190YXJnZXRfdHlwZSBhbHNvIGhhbmRsZXMg YFVOS05PV05gIGNvbnN0YW50LCB3aGljaAplbnN1cmVzIHRoZSBkZXBhcnNpbmcgY2FzdHMgdG8g dGhlIGNvcnJlY3QgZGF0YSB0eXBlLgoKZm9yIGV4YW1wbGU6CgpjcmVhdGUgdmlldyB2MSBhcyBz ZWxlY3QgJ2EnOwpzcmM5PSMgXHN2IHYxCkNSRUFURSBPUiBSRVBMQUNFIFZJRVcgcHVibGljLnYx IEFTCiBTRUxFQ1QgJ2EnOjp0ZXh0IEFTICI/Y29sdW1uPyIKCmNvbnRleHQ6IGh0dHBzOi8vZ2l0 LnBvc3RncmVzcWwub3JnL2NnaXQvcG9zdGdyZXNxbC5naXQvY29tbWl0Lz9pZD04ZTcyZDkxNGM1 Mjg3NjUyNWE5MGIyODQ0NDQ1M2RlODA4NWM4NjZmCi0tLQogc3JjL2JhY2tlbmQvcGFyc2VyL2Fu YWx5emUuYyAgICAgICAgICAgICAgICAgfCAxNDAgKysrKysrKysrKystLS0tLS0tLQogc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9mb3JfcG9ydGlvbl9vZi5vdXQgfCAgMTEgKy0KIHNyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL2Zvcl9wb3J0aW9uX29mLnNxbCAgICAgIHwgICAzICsKIDMgZmlsZXMgY2hh bmdlZCwgODkgaW5zZXJ0aW9ucygrKSwgNjUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvcGFyc2VyL2FuYWx5emUuYyBiL3NyYy9iYWNrZW5kL3BhcnNlci9hbmFseXplLmMK aW5kZXggODRkZWVkOWFhYTYuLjZjODk3YWY0M2I1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9w YXJzZXIvYW5hbHl6ZS5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9hbmFseXplLmMKQEAgLTI0 LDYgKzI0LDcgQEAKIAogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKKyNpbmNsdWRlICJhY2Nlc3Mv aHR1cF9kZXRhaWxzLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3N0cmF0bnVtLmgiCiAjaW5jbHVkZSAi YWNjZXNzL3N5c2F0dHIuaCIKICNpbmNsdWRlICJjYXRhbG9nL2RlcGVuZGVuY3kuaCIKQEAgLTEz MTcsNiArMTMxOCw3IEBAIHRyYW5zZm9ybUZvclBvcnRpb25PZkNsYXVzZShQYXJzZVN0YXRlICpw c3RhdGUsCiAJaW50CQkJcmFuZ2VfYXR0bm8gPSBJbnZhbGlkQXR0ck51bWJlcjsKIAlGb3JtX3Bn X2F0dHJpYnV0ZSBhdHRyOwogCU9pZAkJCWF0dGJhc2V0eXBlOworCWludDMyCQlhdHRiYXNldHlw bW9kID0gLTE7CiAJT2lkCQkJb3BjbGFzczsKIAlPaWQJCQlvcGZhbWlseTsKIAlPaWQJCQlvcGNp bnR5cGU7CkBAIC0xMzQ2LDcgKzEzNDgsNyBAQCB0cmFuc2Zvcm1Gb3JQb3J0aW9uT2ZDbGF1c2Uo UGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCSBwYXJzZXJfZXJycG9zaXRpb24ocHN0YXRlLCBmb3JQ b3J0aW9uT2YtPmxvY2F0aW9uKSkpOwogCWF0dHIgPSBUdXBsZURlc2NBdHRyKHRhcmdldHJlbC0+ cmRfYXR0LCByYW5nZV9hdHRubyAtIDEpOwogCi0JYXR0YmFzZXR5cGUgPSBnZXRCYXNlVHlwZShh dHRyLT5hdHR0eXBpZCk7CisJYXR0YmFzZXR5cGUgPSBnZXRCYXNlVHlwZUFuZFR5cG1vZChhdHRy LT5hdHR0eXBpZCwgJmF0dGJhc2V0eXBtb2QpOwogCiAJcmFuZ2VWYXIgPSBtYWtlVmFyKHJ0aW5k ZXgsCiAJCQkJCSAgIHJhbmdlX2F0dG5vLApAQCAtMTM2OSw1MCArMTM3MSw0NiBAQCB0cmFuc2Zv cm1Gb3JQb3J0aW9uT2ZDbGF1c2UoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCiAJaWYgKGZvclBvcnRp b25PZi0+dGFyZ2V0KQogCXsKLQkJT2lkCQkJZGVjbGFyZWRfdGFyZ2V0X3R5cGUgPSBhdHRiYXNl dHlwZTsKIAkJT2lkCQkJYWN0dWFsX3RhcmdldF90eXBlOwogCisJCS8qCisJCSAqIFhYWDogRm9y IG5vdyB3ZSBvbmx5IHN1cHBvcnQgcmFuZ2VzIGFuZCBtdWx0aXJhbmdlcywgc28gd2UgZmFpbCBv bgorCQkgKiBhbnl0aGluZyBlbHNlLgorCQkgKi8KKwkJaWYgKCF0eXBlX2lzX3JhbmdlKGF0dGJh c2V0eXBlKSAmJiAhdHlwZV9pc19tdWx0aXJhbmdlKGF0dGJhc2V0eXBlKSkKKwkJCWVyZXBvcnQo RVJST1IsCisJCQkJCWVycmNvZGUoRVJSQ09ERV9JTlZBTElEX0NPTFVNTl9SRUZFUkVOQ0UpLAor CQkJCQllcnJtc2coImNvbHVtbiBcIiVzXCIgb2YgcmVsYXRpb24gXCIlc1wiIGlzIG5vdCBhIHJh bmdlIG9yIG11bHRpcmFuZ2UgdHlwZSIsCisJCQkJCQkgICBmb3JQb3J0aW9uT2YtPnJhbmdlX25h bWUsCisJCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZSh0YXJnZXRyZWwpKSwKKwkJCQkJ cGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0ZSwgZm9yUG9ydGlvbk9mLT5sb2NhdGlvbikpOworCiAJ CS8qCiAJCSAqIFdlIHdlcmUgYWxyZWFkeSBnaXZlbiBhbiBleHByZXNzaW9uIGZvciB0aGUgdGFy Z2V0LCBzbyB3ZSBkb24ndAogCQkgKiBoYXZlIHRvIGJ1aWxkIGFueXRoaW5nLiBXZSBzdGlsbCBo YXZlIHRvIG1ha2Ugc3VyZSB3ZSBnb3QgdGhlIHJpZ2h0CiAJCSAqIHR5cGUuIE5VTEwgd2lsbCBi ZSBjYXVnaHQgYmUgdGhlIGV4ZWN1dG9yLgogCQkgKi8KLQogCQlyZXN1bHQtPnRhcmdldFJhbmdl ID0gdHJhbnNmb3JtRXhwcihwc3RhdGUsCiAJCQkJCQkJCQkJCWZvclBvcnRpb25PZi0+dGFyZ2V0 LAogCQkJCQkJCQkJCQlFWFBSX0tJTkRfRk9SX1BPUlRJT04pOwogCiAJCWFjdHVhbF90YXJnZXRf dHlwZSA9IGV4cHJUeXBlKHJlc3VsdC0+dGFyZ2V0UmFuZ2UpOwogCi0JCWlmICghY2FuX2NvZXJj ZV90eXBlKDEsICZhY3R1YWxfdGFyZ2V0X3R5cGUsICZkZWNsYXJlZF90YXJnZXRfdHlwZSwgQ09F UkNJT05fSU1QTElDSVQpKQotCQkJZXJlcG9ydChFUlJPUiwKLQkJCQkJKGVycmNvZGUoRVJSQ09E RV9EQVRBVFlQRV9NSVNNQVRDSCksCi0JCQkJCSBlcnJtc2coImNvdWxkIG5vdCBjb2VyY2UgRk9S IFBPUlRJT04gT0YgdGFyZ2V0IGZyb20gJXMgdG8gJXMiLAotCQkJCQkJCWZvcm1hdF90eXBlX2Jl KGFjdHVhbF90YXJnZXRfdHlwZSksCi0JCQkJCQkJZm9ybWF0X3R5cGVfYmUoZGVjbGFyZWRfdGFy Z2V0X3R5cGUpKSwKLQkJCQkJIHBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIGV4cHJMb2NhdGlv bihmb3JQb3J0aW9uT2YtPnRhcmdldCkpKSk7Ci0KLQkJcmVzdWx0LT50YXJnZXRSYW5nZSA9IGNv ZXJjZV90eXBlKHBzdGF0ZSwKLQkJCQkJCQkJCQkgIHJlc3VsdC0+dGFyZ2V0UmFuZ2UsCi0JCQkJ CQkJCQkJICBhY3R1YWxfdGFyZ2V0X3R5cGUsCi0JCQkJCQkJCQkJICBkZWNsYXJlZF90YXJnZXRf dHlwZSwKLQkJCQkJCQkJCQkgIC0xLAotCQkJCQkJCQkJCSAgQ09FUkNJT05fSU1QTElDSVQsCi0J CQkJCQkJCQkJICBDT0VSQ0VfSU1QTElDSVRfQ0FTVCwKLQkJCQkJCQkJCQkgIGV4cHJMb2NhdGlv bihmb3JQb3J0aW9uT2YtPnRhcmdldCkpOworCQlyZXN1bHQtPnRhcmdldFJhbmdlID0KKwkJCWNv ZXJjZV90b190YXJnZXRfdHlwZShwc3RhdGUsIHJlc3VsdC0+dGFyZ2V0UmFuZ2UsIGV4cHJUeXBl KHJlc3VsdC0+dGFyZ2V0UmFuZ2UpLAorCQkJCQkJCQkgIGF0dGJhc2V0eXBlLAorCQkJCQkJCQkg IGF0dGJhc2V0eXBtb2QsCisJCQkJCQkJCSAgQ09FUkNJT05fSU1QTElDSVQsCisJCQkJCQkJCSAg Q09FUkNFX0lNUExJQ0lUX0NBU1QsCisJCQkJCQkJCSAgZXhwckxvY2F0aW9uKGZvclBvcnRpb25P Zi0+dGFyZ2V0KSk7CiAKLQkJLyoKLQkJICogWFhYOiBGb3Igbm93IHdlIG9ubHkgc3VwcG9ydCBy YW5nZXMgYW5kIG11bHRpcmFuZ2VzLCBzbyB3ZSBmYWlsIG9uCi0JCSAqIGFueXRoaW5nIGVsc2Uu Ci0JCSAqLwotCQlpZiAoIXR5cGVfaXNfcmFuZ2UoYXR0YmFzZXR5cGUpICYmICF0eXBlX2lzX211 bHRpcmFuZ2UoYXR0YmFzZXR5cGUpKQorCQlpZiAocmVzdWx0LT50YXJnZXRSYW5nZSA9PSBOVUxM KQogCQkJZXJlcG9ydChFUlJPUiwKLQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX0NPTFVN Tl9SRUZFUkVOQ0UpLAotCQkJCQkgZXJybXNnKCJjb2x1bW4gXCIlc1wiIG9mIHJlbGF0aW9uIFwi JXNcIiBpcyBub3QgYSByYW5nZSBvciBtdWx0aXJhbmdlIHR5cGUiLAotCQkJCQkJCWZvclBvcnRp b25PZi0+cmFuZ2VfbmFtZSwKLQkJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZSh0YXJnZXRy ZWwpKSwKLQkJCQkJIHBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIGZvclBvcnRpb25PZi0+bG9j YXRpb24pKSk7Ci0KKwkJCQkJZXJyY29kZShFUlJDT0RFX0RBVEFUWVBFX01JU01BVENIKSwKKwkJ CQkJZXJybXNnKCJjb3VsZCBub3QgY29lcmNlIEZPUiBQT1JUSU9OIE9GIHRhcmdldCBmcm9tICVz IHRvICVzIiwKKwkJCQkJCSAgIGZvcm1hdF90eXBlX2JlKGFjdHVhbF90YXJnZXRfdHlwZSksCisJ CQkJCQkgICBmb3JtYXRfdHlwZV9iZShhdHRiYXNldHlwZSkpLAorCQkJCQlwYXJzZXJfZXJycG9z aXRpb24ocHN0YXRlLCBleHByTG9jYXRpb24oZm9yUG9ydGlvbk9mLT50YXJnZXQpKSk7CiAJfQog CWVsc2UKIAl7CkBAIC0xNDIwLDYgKzE0MTgsOCBAQCB0cmFuc2Zvcm1Gb3JQb3J0aW9uT2ZDbGF1 c2UoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQlPaWQJCQlkZWNsYXJlZF9hcmdfdHlwZXNbMl07CiAJ CU9pZAkJCWFjdHVhbF9hcmdfdHlwZXNbMl07CiAJCUxpc3QJICAgKmFyZ3M7CisJCUhlYXBUdXBs ZQl0dXA7CisJCWludDMyCQlkZWNsYXJlZF9hcmdfdHlwVHlwZU1vZDsKIAogCQkvKgogCQkgKiBN YWtlIHN1cmUgaXQncyBhIHJhbmdlIGNvbHVtbi4gWFhYOiBXZSBjb3VsZCBzdXBwb3J0IHRoaXMg c3ludGF4IG9uCkBAIC0xNDM4LDYgKzE0MzgsMTIgQEAgdHJhbnNmb3JtRm9yUG9ydGlvbk9mQ2xh dXNlKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJZGVjbGFyZWRfYXJnX3R5cGVzWzBdID0gcm5nc3Vi dHlwZTsKIAkJZGVjbGFyZWRfYXJnX3R5cGVzWzFdID0gcm5nc3VidHlwZTsKIAorCQl0dXAgPSBT ZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwgT2JqZWN0SWRHZXREYXR1bShybmdzdWJ0eXBlKSk7CisJ CWlmICghSGVhcFR1cGxlSXNWYWxpZCh0dXApKQorCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1 cCBmYWlsZWQgZm9yIHR5cGUgJXUiLCBybmdzdWJ0eXBlKTsKKwkJZGVjbGFyZWRfYXJnX3R5cFR5 cGVNb2QgPSAoKEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNUKHR1cCkpLT50eXB0eXBtb2Q7CisJCVJl bGVhc2VTeXNDYWNoZSh0dXApOworCiAJCS8qCiAJCSAqIEJ1aWxkIGEgcmFuZ2UgZnJvbSB0aGUg RlJPTSAuLi4gVE8gLi4uIGJvdW5kcy4gVGhpcyBzaG91bGQgZ2l2ZSBhCiAJCSAqIGNvbnN0YW50 IHJlc3VsdCwgc28gd2UgYWNjZXB0IGZ1bmN0aW9ucyBsaWtlIE5PVygpIGJ1dCBub3QgY29sdW1u CkBAIC0xNDUxLDMxICsxNDU3LDQyIEBAIHRyYW5zZm9ybUZvclBvcnRpb25PZkNsYXVzZShQYXJz ZVN0YXRlICpwc3RhdGUsCiAJCQkJCQkJCQkJIEVYUFJfS0lORF9GT1JfUE9SVElPTik7CiAJCWFj dHVhbF9hcmdfdHlwZXNbMF0gPSBleHByVHlwZShyZXN1bHQtPnRhcmdldEZyb20pOwogCQlhY3R1 YWxfYXJnX3R5cGVzWzFdID0gZXhwclR5cGUocmVzdWx0LT50YXJnZXRUbyk7CisKKwkJcmVzdWx0 LT50YXJnZXRGcm9tID0KKwkJCWNvZXJjZV90b190YXJnZXRfdHlwZShwc3RhdGUsIHJlc3VsdC0+ dGFyZ2V0RnJvbSwgYWN0dWFsX2FyZ190eXBlc1swXSwKKwkJCQkJCQkJICBkZWNsYXJlZF9hcmdf dHlwZXNbMF0sIGRlY2xhcmVkX2FyZ190eXBUeXBlTW9kLAorCQkJCQkJCQkgIENPRVJDSU9OX0lN UExJQ0lULAorCQkJCQkJCQkgIENPRVJDRV9JTVBMSUNJVF9DQVNULAorCQkJCQkJCQkgIGV4cHJM b2NhdGlvbihmb3JQb3J0aW9uT2YtPnRhcmdldF9zdGFydCkpOworCisJCWlmIChyZXN1bHQtPnRh cmdldEZyb20gPT0gTlVMTCkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCWVycmNvZGUoRVJSQ09E RV9EQVRBVFlQRV9NSVNNQVRDSCksCisJCQkJCWVycm1zZygiY291bGQgbm90IGNvZXJjZSBGT1Ig UE9SVElPTiBPRiAlcyBib3VuZCBmcm9tICVzIHRvICVzIiwKKwkJCQkJCSAgICJGUk9NIiwKKwkJ CQkJCSAgIGZvcm1hdF90eXBlX2JlKGFjdHVhbF9hcmdfdHlwZXNbMF0pLAorCQkJCQkJICAgZm9y bWF0X3R5cGVfYmUoZGVjbGFyZWRfYXJnX3R5cGVzWzBdKSksCisJCQkJCXBhcnNlcl9lcnJwb3Np dGlvbihwc3RhdGUsIGV4cHJMb2NhdGlvbihmb3JQb3J0aW9uT2YtPnRhcmdldF9zdGFydCkpKTsK KworCQlyZXN1bHQtPnRhcmdldFRvID0KKwkJCWNvZXJjZV90b190YXJnZXRfdHlwZShwc3RhdGUs IHJlc3VsdC0+dGFyZ2V0VG8sIGFjdHVhbF9hcmdfdHlwZXNbMV0sCisJCQkJCQkJCSAgZGVjbGFy ZWRfYXJnX3R5cGVzWzFdLCBkZWNsYXJlZF9hcmdfdHlwVHlwZU1vZCwKKwkJCQkJCQkJICBDT0VS Q0lPTl9JTVBMSUNJVCwKKwkJCQkJCQkJICBDT0VSQ0VfSU1QTElDSVRfQ0FTVCwKKwkJCQkJCQkJ ICBleHByTG9jYXRpb24oZm9yUG9ydGlvbk9mLT50YXJnZXRfZW5kKSk7CisKKwkJaWYgKHJlc3Vs dC0+dGFyZ2V0VG8gPT0gTlVMTCkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCWVycmNvZGUoRVJS Q09ERV9EQVRBVFlQRV9NSVNNQVRDSCksCisJCQkJCWVycm1zZygiY291bGQgbm90IGNvZXJjZSBG T1IgUE9SVElPTiBPRiAlcyBib3VuZCBmcm9tICVzIHRvICVzIiwKKwkJCQkJCSAgICJUTyIsCisJ CQkJCQkgICBmb3JtYXRfdHlwZV9iZShhY3R1YWxfYXJnX3R5cGVzWzFdKSwKKwkJCQkJCSAgIGZv cm1hdF90eXBlX2JlKGRlY2xhcmVkX2FyZ190eXBlc1sxXSkpLAorCQkJCQlwYXJzZXJfZXJycG9z aXRpb24ocHN0YXRlLCBleHByTG9jYXRpb24oZm9yUG9ydGlvbk9mLT50YXJnZXRfZW5kKSkpOwor CiAJCWFyZ3MgPSBsaXN0X21ha2UyKGNvcHlPYmplY3QocmVzdWx0LT50YXJnZXRGcm9tKSwKIAkJ CQkJCSAgY29weU9iamVjdChyZXN1bHQtPnRhcmdldFRvKSk7CiAKLQkJLyoKLQkJICogQ2hlY2sg dGhlIGJvdW5kIHR5cGVzIHNlcGFyYXRlbHksIGZvciBiZXR0ZXIgZXJyb3IgbWVzc2FnZSBhbmQK LQkJICogbG9jYXRpb24KLQkJICovCi0JCWlmICghY2FuX2NvZXJjZV90eXBlKDEsIGFjdHVhbF9h cmdfdHlwZXMsIGRlY2xhcmVkX2FyZ190eXBlcywgQ09FUkNJT05fSU1QTElDSVQpKQotCQkJZXJl cG9ydChFUlJPUiwKLQkJCQkJKGVycmNvZGUoRVJSQ09ERV9EQVRBVFlQRV9NSVNNQVRDSCksCi0J CQkJCSBlcnJtc2coImNvdWxkIG5vdCBjb2VyY2UgRk9SIFBPUlRJT04gT0YgJXMgYm91bmQgZnJv bSAlcyB0byAlcyIsCi0JCQkJCQkJIkZST00iLAotCQkJCQkJCWZvcm1hdF90eXBlX2JlKGFjdHVh bF9hcmdfdHlwZXNbMF0pLAotCQkJCQkJCWZvcm1hdF90eXBlX2JlKGRlY2xhcmVkX2FyZ190eXBl c1swXSkpLAotCQkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0ZSwgZXhwckxvY2F0aW9uKGZv clBvcnRpb25PZi0+dGFyZ2V0X3N0YXJ0KSkpKTsKLQkJaWYgKCFjYW5fY29lcmNlX3R5cGUoMSwg JmFjdHVhbF9hcmdfdHlwZXNbMV0sICZkZWNsYXJlZF9hcmdfdHlwZXNbMV0sIENPRVJDSU9OX0lN UExJQ0lUKSkKLQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCShlcnJjb2RlKEVSUkNPREVfREFUQVRZ UEVfTUlTTUFUQ0gpLAotCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgY29lcmNlIEZPUiBQT1JUSU9O IE9GICVzIGJvdW5kIGZyb20gJXMgdG8gJXMiLAotCQkJCQkJCSJUTyIsCi0JCQkJCQkJZm9ybWF0 X3R5cGVfYmUoYWN0dWFsX2FyZ190eXBlc1sxXSksCi0JCQkJCQkJZm9ybWF0X3R5cGVfYmUoZGVj bGFyZWRfYXJnX3R5cGVzWzFdKSksCi0JCQkJCSBwYXJzZXJfZXJycG9zaXRpb24ocHN0YXRlLCBl eHByTG9jYXRpb24oZm9yUG9ydGlvbk9mLT50YXJnZXRfZW5kKSkpKTsKLQotCQltYWtlX2ZuX2Fy Z3VtZW50cyhwc3RhdGUsIGFyZ3MsIGFjdHVhbF9hcmdfdHlwZXMsIGRlY2xhcmVkX2FyZ190eXBl cyk7CiAJCXJlc3VsdC0+dGFyZ2V0UmFuZ2UgPSAoTm9kZSAqKSBtYWtlRnVuY0V4cHIoZ2V0X3Jh bmdlX2NvbnN0cnVjdG9yMihhdHRiYXNldHlwZSksCiAJCQkJCQkJCQkJCQkJYXR0YmFzZXR5cGUs CiAJCQkJCQkJCQkJCQkJYXJncywKQEAgLTE0ODMsNyArMTUwMCw4IEBAIHRyYW5zZm9ybUZvclBv cnRpb25PZkNsYXVzZShQYXJzZVN0YXRlICpwc3RhdGUsCiAJfQogCWlmIChjb250YWluX3ZvbGF0 aWxlX2Z1bmN0aW9uc19hZnRlcl9wbGFubmluZygoRXhwciAqKSByZXN1bHQtPnRhcmdldFJhbmdl KSkKIAkJZXJlcG9ydChFUlJPUiwKLQkJCQkoZXJybXNnKCJGT1IgUE9SVElPTiBPRiBib3VuZHMg Y2Fubm90IGNvbnRhaW4gdm9sYXRpbGUgZnVuY3Rpb25zIikpKTsKKwkJCQllcnJjb2RlKEVSUkNP REVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQllcnJtc2coIkZPUiBQT1JUSU9OIE9GIGJv dW5kcyBjYW5ub3QgY29udGFpbiB2b2xhdGlsZSBmdW5jdGlvbnMiKSk7CiAKIAkvKgogCSAqIEJ1 aWxkIG92ZXJsYXBzRXhwciB0byB1c2UgYXMgYW4gZXh0cmEgcXVhbC4gVGhpcyBtZWFucyB3ZSBv bmx5IGhpdCByb3dzCkBAIC0xNTc1LDE0ICsxNTkzLDE0IEBAIHRyYW5zZm9ybUZvclBvcnRpb25P ZkNsYXVzZShQYXJzZVN0YXRlICpwc3RhdGUsCiAJCSAqIENvZXJjZSB0byBkb21haW4gaWYgbmVj ZXNzYXJ5LiBJZiB3ZSBza2lwIHRoaXMsIHdlIHdpbGwgYWxsb3cKIAkJICogdXBkYXRpbmcgdG8g Zm9yYmlkZGVuIHZhbHVlcy4KIAkJICovCi0JCXJhbmdlVExFRXhwciA9IGNvZXJjZV90eXBlKHBz dGF0ZSwKLQkJCQkJCQkJICAgcmFuZ2VUTEVFeHByLAotCQkJCQkJCQkgICBhdHRiYXNldHlwZSwK LQkJCQkJCQkJICAgYXR0ci0+YXR0dHlwaWQsCi0JCQkJCQkJCSAgIC0xLAotCQkJCQkJCQkgICBD T0VSQ0lPTl9JTVBMSUNJVCwKLQkJCQkJCQkJICAgQ09FUkNFX0lNUExJQ0lUX0NBU1QsCi0JCQkJ CQkJCSAgIGV4cHJMb2NhdGlvbihmb3JQb3J0aW9uT2YtPnRhcmdldCkpOworCQlyYW5nZVRMRUV4 cHIgPSBjb2VyY2VfdG9fdGFyZ2V0X3R5cGUocHN0YXRlLAorCQkJCQkJCQkJCQkgcmFuZ2VUTEVF eHByLAorCQkJCQkJCQkJCQkgYXR0YmFzZXR5cGUsCisJCQkJCQkJCQkJCSBhdHRyLT5hdHR0eXBp ZCwKKwkJCQkJCQkJCQkJIGF0dHItPmF0dHR5cG1vZCwKKwkJCQkJCQkJCQkJIENPRVJDSU9OX0lN UExJQ0lULAorCQkJCQkJCQkJCQkgQ09FUkNFX0lNUExJQ0lUX0NBU1QsCisJCQkJCQkJCQkJCSBl eHByTG9jYXRpb24oZm9yUG9ydGlvbk9mLT50YXJnZXQpKTsKIAogCQkvKiBNYWtlIGEgVExFIHRv IHNldCB0aGUgcmFuZ2UgY29sdW1uICovCiAJCXJlc3VsdC0+cmFuZ2VUYXJnZXRMaXN0ID0gTklM OwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9mb3JfcG9ydGlvbl9vZi5v dXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2Zvcl9wb3J0aW9uX29mLm91dAppbmRleCAz MWY3NzJjNzIzZC4uNzQ3ZmUzMTgzY2IgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvZm9yX3BvcnRpb25fb2Yub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv Zm9yX3BvcnRpb25fb2Yub3V0CkBAIC02NTIsNyArNjUyLDcgQEAgRU5EOwogICAgICAgICAgUkVU VVJOUyB0ZXh0CiAgICAgICAgICBMQU5HVUFHRSBzcWwKIDEgICAgICAgQkVHSU4gQVRPTUlDCi0y ICAgICAgICBVUERBVEUgZm9yX3BvcnRpb25fb2ZfdGVzdCBGT1IgUE9SVElPTiBPRiB2YWxpZF9h dCBGUk9NICcyMDE4LTAxLTE1JyBUTyAnMjAxOS0wMS0wMScgU0VUIG5hbWUgPSAnb25lXjEnOjp0 ZXh0CisyICAgICAgICBVUERBVEUgZm9yX3BvcnRpb25fb2ZfdGVzdCBGT1IgUE9SVElPTiBPRiB2 YWxpZF9hdCBGUk9NICcyMDE4LTAxLTE1Jzo6ZGF0ZSBUTyAnMjAxOS0wMS0wMSc6OmRhdGUgU0VU IG5hbWUgPSAnb25lXjEnOjp0ZXh0CiAzICAgICAgICAgIFJFVFVSTklORyBmb3JfcG9ydGlvbl9v Zl90ZXN0Lm5hbWU7CiA0ICAgICAgIEVORAogQ1JFQVRFIE9SIFJFUExBQ0UgZnVuY3Rpb24gZnBv X3VwZGF0ZSgpCkBAIC0xMDEwLDYgKzEwMTAsOCBAQCBERUxFVEUgRlJPTSBmb3JfcG9ydGlvbl9v Zl90ZXN0IFdIRVJFIGlkIElOICgnWzEwLDExKScpOwogQ1JFQVRFIEZVTkNUSU9OIGZwb19kZWxl dGUoKQogUkVUVVJOUyB0ZXh0CiBCRUdJTiBBVE9NSUMKKyAgREVMRVRFIEZST00gZm9yX3BvcnRp b25fb2ZfdGVzdAorICAgIEZPUiBQT1JUSU9OIE9GIHZhbGlkX2F0ICgnWzIwMTgtMDEtMTUsIDIw MTktMDEtMDEpJyk7CiAgIERFTEVURSBGUk9NIGZvcl9wb3J0aW9uX29mX3Rlc3QKICAgICBGT1Ig UE9SVElPTiBPRiB2YWxpZF9hdCBGUk9NICcyMDE4LTAxLTE1JyBUTyAnMjAxOS0wMS0wMScKICAg ICBSRVRVUk5JTkcgbmFtZTsKQEAgLTEwMTksOSArMTAyMSwxMCBAQCBFTkQ7CiAgICAgICAgICBS RVRVUk5TIHRleHQKICAgICAgICAgIExBTkdVQUdFIHNxbAogMSAgICAgICBCRUdJTiBBVE9NSUMK LTIgICAgICAgIERFTEVURSBGUk9NIGZvcl9wb3J0aW9uX29mX3Rlc3QgRk9SIFBPUlRJT04gT0Yg dmFsaWRfYXQgRlJPTSAnMjAxOC0wMS0xNScgVE8gJzIwMTktMDEtMDEnCi0zICAgICAgICAgIFJF VFVSTklORyBmb3JfcG9ydGlvbl9vZl90ZXN0Lm5hbWU7Ci00ICAgICAgIEVORAorMiAgICAgICAg REVMRVRFIEZST00gZm9yX3BvcnRpb25fb2ZfdGVzdCBGT1IgUE9SVElPTiBPRiB2YWxpZF9hdCAo J1syMDE4LTAxLTE1LDIwMTktMDEtMDEpJzo6ZGF0ZXJhbmdlKTsKKzMgICAgICAgIERFTEVURSBG Uk9NIGZvcl9wb3J0aW9uX29mX3Rlc3QgRk9SIFBPUlRJT04gT0YgdmFsaWRfYXQgRlJPTSAnMjAx OC0wMS0xNSc6OmRhdGUgVE8gJzIwMTktMDEtMDEnOjpkYXRlCis0ICAgICAgICAgIFJFVFVSTklO RyBmb3JfcG9ydGlvbl9vZl90ZXN0Lm5hbWU7Cis1ICAgICAgIEVORAogQ1JFQVRFIE9SIFJFUExB Q0UgZnVuY3Rpb24gZnBvX2RlbGV0ZSgpCiBSRVRVUk5TIHRleHQKIEJFR0lOIEFUT01JQwpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZm9yX3BvcnRpb25fb2Yuc3FsIGIvc3JjL3Rl c3QvcmVncmVzcy9zcWwvZm9yX3BvcnRpb25fb2Yuc3FsCmluZGV4IGQ0MDYyYWNmMWQxLi45Mzhh ZTAzNjYzNCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZm9yX3BvcnRpb25fb2Yu c3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2Zvcl9wb3J0aW9uX29mLnNxbApAQCAtNjUx LDYgKzY1MSw5IEBAIERFTEVURSBGUk9NIGZvcl9wb3J0aW9uX29mX3Rlc3QgV0hFUkUgaWQgSU4g KCdbMTAsMTEpJyk7CiBDUkVBVEUgRlVOQ1RJT04gZnBvX2RlbGV0ZSgpCiBSRVRVUk5TIHRleHQK IEJFR0lOIEFUT01JQworICBERUxFVEUgRlJPTSBmb3JfcG9ydGlvbl9vZl90ZXN0CisgICAgRk9S IFBPUlRJT04gT0YgdmFsaWRfYXQgKCdbMjAxOC0wMS0xNSwgMjAxOS0wMS0wMSknKTsKKwogICBE RUxFVEUgRlJPTSBmb3JfcG9ydGlvbl9vZl90ZXN0CiAgICAgRk9SIFBPUlRJT04gT0YgdmFsaWRf YXQgRlJPTSAnMjAxOC0wMS0xNScgVE8gJzIwMTktMDEtMDEnCiAgICAgUkVUVVJOSU5HIG5hbWU7 Ci0tIAoyLjM0LjEKCg== --0000000000005257f3064ed6e179--