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 1v8AVh-00Dr3C-03 for pgsql-hackers@arkaria.postgresql.org; Mon, 13 Oct 2025 04:50:13 +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 1v8AVc-0046lm-Gk for pgsql-hackers@arkaria.postgresql.org; Mon, 13 Oct 2025 04:50:09 +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.94.2) (envelope-from ) id 1v8AVb-0046le-W3 for pgsql-hackers@lists.postgresql.org; Mon, 13 Oct 2025 04:50:09 +0000 Received: from meldrar.postgresql.org ([2a02:c0:301:0:ffff::31]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1v8AVZ-001rjp-2n for pgsql-hackers@lists.postgresql.org; Mon, 13 Oct 2025 04:50:08 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=postgresql.org; s=20171124; h=Content-Transfer-Encoding:Content-Type: Mime-Version:References:In-Reply-To:From:Subject:Cc:To:Message-Id:Date:Sender :Reply-To:Content-ID:Content-Description; bh=6amS7/vLfSgUjoMHtMngMus+7hbPzDR99moyrDnL3rU=; b=gCE2HroTBtK0SIAC6BOTnJbfwh bzKgJBoQCQeDmdqS59tIQO5LXBOgmCkz0loxERgyGj73RVF1qjsCObqx/rY0P8fefe2wQfpwwUrEN 6XSfusFWNA+djYJ/MQiWDlBgWH0RrvtL6z+nds8gHIa3v5k5mvbDHR2WAAzKn5S7DwDGpIqg3bQoq 9NkyrGKUI0F0gwIXNt+stJI50oOz1rEFl5+cEKwjNYpNB5THpZN+S0WBVBBX5g9PcXiGu5ymf7Ezs pvHcP8sw46HSmkeei7EXnd9RqgYwCLNOhlJFEjUnkvfqD4olh/yA+sym+M1mCyyh6tMzQG96QsawG 9r8udXiA==; Received: from [2409:11:4120:300:dcb5:2743:8b18:8155] (helo=localhost) by meldrar.postgresql.org with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1v8AVX-004ytJ-0w; Mon, 13 Oct 2025 04:50:05 +0000 Date: Mon, 13 Oct 2025 13:49:48 +0900 (JST) Message-Id: <20251013.134948.2107122957689874405.ishii@postgresql.org> To: pgsql-hackers@lists.postgresql.org Cc: tgl@sss.pgh.pa.us, pramsey@cleverelephant.ca, ojford@gmail.com, peter@eisentraut.org, li.evan.chao@gmail.com, krasiyan@gmail.com, vik@postgresfriends.org, andrew@tao11.riddles.org.uk, david@fetter.org Subject: Re: Add RESPECT/IGNORE NULLS and FROM FIRST/LAST options From: Tatsuo Ishii In-Reply-To: <20251011.090731.1451293026979559494.ishii@postgresql.org> References: <20251008.093117.1326499841464447981.ishii@postgresql.org> <2952409.1760023154@sss.pgh.pa.us> <20251011.090731.1451293026979559494.ishii@postgresql.org> X-Mailer: Mew version 6.8 on Emacs 29.3 Mime-Version: 1.0 Content-Type: Multipart/Mixed; boundary="--Next_Part(Mon_Oct_13_13_49_48_2025_363)--" Content-Transfer-Encoding: 7bit X-Host-Lookup-Failed: Reverse DNS lookup failed for 2409:11:4120:300:dcb5:2743:8b18:8155 (failed) List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk ----Next_Part(Mon_Oct_13_13_49_48_2025_363)-- Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit >> 2. AFAICS there is only one notnull_info array, which amounts to >> assuming that the window function will have only one argument position >> that it calls WinGetFuncArgInFrame or WinGetFuncArgInPartition for. >> That may be true for the built-in functions but it seems mighty >> restrictive for extensions. Worse yet, there's no check, so that >> you'd just get silently wrong answers if two or more arguments are >> evaluated. I think there ought to be a separate array for each argno; >> of course only created if the window function actually asks for >> evaluations of a particular argno. > > I missed that. Thank you for pointed it out. I agree it would be > better allow to use multiple argument positions that calls > WinGetFuncArgInFrame or WinGetFuncArgInPartition in > extensions. Attached is a PoC patch for that. > > Currently there's an issue with the patch, however. > > SELECT x, y, mywindowfunc2(x, y, 2) IGNORE NULLS OVER w FROM g > WINDOW w AS (ORDER BY y); > psql:test2.sql:9: ERROR: cannot fetch row before WindowObject's mark position > > mywindowfunc2 is a user defined window function, taking 3 arguments. x > and y are expected to be evaluated to integer. The third argument is > relative offset to current row. In the query above x and y are > retrieved using two WinGetFuncArgInPartition() calls. The data set > (table "g") looks like below. > > x | y > ----+--- > | 1 > | 2 > 10 | 3 > 20 | 4 > (4 rows) > > I think the cause of the error is: > > (1) WinGetFuncArgInPartition keep on fetching column x until it's > evalued to not null and placed in the second row (in this case that's > x==20). In WinGetFuncArgInPartition WinSetMarkPosition is called at > abs_pos==3. > > (2) WinGetFuncArgInPartition tries to fetch column y at row 0. Since > the mark was set to at row 3, the error occurred. > > To avoid the error, we could call WinGetFuncArgInPartition with > set_mark = false (and call WinSetMarkPosition separately) but I am not > sure if it's an acceptable solution. Attached is a v2 patch to fix the "cannot fetch row before WindowObject's mark position" error, by tweaking the logic to calculate the set mark position in WinGetFuncArgInPartition. Best regards, -- Tatsuo Ishii SRA OSS K.K. English: http://www.sraoss.co.jp/index_en/ Japanese:http://www.sraoss.co.jp ----Next_Part(Mon_Oct_13_13_49_48_2025_363)-- Content-Type: Application/Octet-Stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v2-0001-Allow-multiple-WinGetFuncArgInPartition-Frame-cal.patch" RnJvbSA2OTJmN2Q4YjZjODJjYzc2YTdhOTkxNWYzYWRjY2EwMGZhMWZkOWJhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUYXRzdW8gSXNoaWkgPGlzaGlpQHBvc3RncmVzcWwub3JnPgpE YXRlOiBNb24sIDEzIE9jdCAyMDI1IDEzOjQ4OjU0ICswOTAwClN1YmplY3Q6IFtQQVRDSCB2Ml0g QWxsb3cgbXVsdGlwbGUgV2luR2V0RnVuY0FyZ0luUGFydGl0aW9uL0ZyYW1lIGNhbGxzIHdpdGgK IElHTk9SRSBOVUxMUyBvcHRpb24uCgpQcmV2aW91c2x5IGl0IHdhcyBhc3N1bWVkIHRoYXQgdGhl cmUncyBvbmx5IG9uZSBjYWxsIHRvCldpbkdldEZ1bmNBcmdJblBhcnRpdGlvbi9GcmFtZSBpbiBh IHdpbmRvdyBmdW5jdGlvbiB3aGVuIElHTk9SRSBOVUxMUwpvcHRpb24gaXMgc3BlY2lmaWVkLiBU byBhbGxvdyBtdWx0aXBsZSBjYWxscyB0byB0aGVtLAp3aW5vYmotPm5vdG51bGxfaW5mbyBpcyBt b2RpZmllZCBmcm9tICJ1aW50OCAqIiB0byAidWludDggKioiIHNvIHRoYXQKd2lub2JqLT5ub3Ru dWxsX2luZm8gY291bGQgc3RvcmUgcG9pbnRlcnMgdG8gbm90IG51bGwgaW5mbyB0aGF0CmNvcnJl c3BvbmQgdG8gZWFjaCBmdW5jdGlvbiBhcmd1bWVudC4KCkFsc28gZml4IHRoZSBzZXQgbWFyayBw b3NpdGlvbiBsb2dpYyBpbiBXaW5HZXRGdW5jQXJnSW5QYXJ0aXRpb24gdG8Kbm90IHJhaXNlIGEg ImNhbm5vdCBmZXRjaCByb3cgYmVmb3JlIFdpbmRvd09iamVjdCdzIG1hcmsgcG9zaXRpb24iCmVy cm9yIGluIElHTk9SRSBOVUxMUyBjYXNlLgotLS0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVX aW5kb3dBZ2cuYyB8IDg3ICsrKysrKysrKysrKysrKysrKystLS0tLS0tLS0KIDEgZmlsZSBjaGFu Z2VkLCA2MSBpbnNlcnRpb25zKCspLCAyNiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9leGVjdXRvci9ub2RlV2luZG93QWdnLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9u b2RlV2luZG93QWdnLmMKaW5kZXggZTZhNTNmOTUzOTEuLmQyNWFiNTFjYTgyIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlV2luZG93QWdnLmMKKysrIGIvc3JjL2JhY2tlbmQv ZXhlY3V0b3Ivbm9kZVdpbmRvd0FnZy5jCkBAIC02OSw3ICs2OSw3IEBAIHR5cGVkZWYgc3RydWN0 IFdpbmRvd09iamVjdERhdGEKIAlpbnQJCQlyZWFkcHRyOwkJLyogdHVwbGVzdG9yZSByZWFkIHBv aW50ZXIgZm9yIHRoaXMgZm4gKi8KIAlpbnQ2NAkJbWFya3BvczsJCS8qIHJvdyB0aGF0IG1hcmtw dHIgaXMgcG9zaXRpb25lZCBvbiAqLwogCWludDY0CQlzZWVrcG9zOwkJLyogcm93IHRoYXQgcmVh ZHB0ciBpcyBwb3NpdGlvbmVkIG9uICovCi0JdWludDgJICAgKm5vdG51bGxfaW5mbzsJLyogbm90 IG51bGwgaW5mbyAqLworCXVpbnQ4CSAgKipub3RudWxsX2luZm87CS8qIG5vdCBudWxsIGluZm8g Zm9yIGVhY2ggZnVuYyBhcmdzICovCiAJaW50CQkJbnVtX25vdG51bGxfaW5mbzsJLyogdHJhY2sg c2l6ZSBvZiB0aGUgbm90bnVsbF9pbmZvIGFycmF5ICovCiAKIAkvKgpAQCAtMjE0LDEwICsyMTQs MTAgQEAgc3RhdGljIERhdHVtIGlnbm9yZW51bGxzX2dldGZ1bmNhcmdpbmZyYW1lKFdpbmRvd09i amVjdCB3aW5vYmosIGludCBhcmdubywKIHN0YXRpYyBEYXR1bSBnZXR0dXBsZV9ldmFsX3BhcnRp dGlvbihXaW5kb3dPYmplY3Qgd2lub2JqLCBpbnQgYXJnbm8sCiAJCQkJCQkJCQkgaW50NjQgYWJz X3BvcywgYm9vbCAqaXNudWxsLAogCQkJCQkJCQkJIGJvb2wgKmlzb3V0KTsKLXN0YXRpYyB2b2lk IGluaXRfbm90bnVsbF9pbmZvKFdpbmRvd09iamVjdCB3aW5vYmopOwotc3RhdGljIHZvaWQgZ3Jv d19ub3RudWxsX2luZm8oV2luZG93T2JqZWN0IHdpbm9iaiwgaW50NjQgcG9zKTsKLXN0YXRpYyB1 aW50OCBnZXRfbm90bnVsbF9pbmZvKFdpbmRvd09iamVjdCB3aW5vYmosIGludDY0IHBvcyk7Ci1z dGF0aWMgdm9pZCBwdXRfbm90bnVsbF9pbmZvKFdpbmRvd09iamVjdCB3aW5vYmosIGludDY0IHBv cywgYm9vbCBpc251bGwpOworc3RhdGljIHZvaWQgaW5pdF9ub3RudWxsX2luZm8oV2luZG93T2Jq ZWN0IHdpbm9iaiwgV2luZG93U3RhdGVQZXJGdW5jIHBlcmZ1bmNzdGF0ZSk7CitzdGF0aWMgdm9p ZCBncm93X25vdG51bGxfaW5mbyhXaW5kb3dPYmplY3Qgd2lub2JqLCBpbnQ2NCBwb3MsIGludCBh cmdubyk7CitzdGF0aWMgdWludDggZ2V0X25vdG51bGxfaW5mbyhXaW5kb3dPYmplY3Qgd2lub2Jq LCBpbnQ2NCBwb3MsIGludCBhcmdubyk7CitzdGF0aWMgdm9pZCBwdXRfbm90bnVsbF9pbmZvKFdp bmRvd09iamVjdCB3aW5vYmosIGludDY0IHBvcywgaW50IGFyZ25vLCBib29sIGlzbnVsbCk7CiAK IC8qCiAgKiBOb3QgbnVsbCBpbmZvIGJpdCBhcnJheSBjb25zaXN0cyBvZiAyLWJpdCBpdGVtcwpA QCAtMTMwNCw5ICsxMzA0LDE0IEBAIGJlZ2luX3BhcnRpdGlvbihXaW5kb3dBZ2dTdGF0ZSAqd2lu c3RhdGUpCiAKIAkJCS8qIHJlc2V0IG51bGwgbWFwICovCiAJCQlpZiAod2lub2JqLT5pZ25vcmVf bnVsbHMgPT0gSUdOT1JFX05VTExTKQotCQkJCW1lbXNldCh3aW5vYmotPm5vdG51bGxfaW5mbywg MCwKLQkJCQkJICAgTk5fUE9TX1RPX0JZVEVTKAotCQkJCQkJCQkJICAgcGVyZnVuY3N0YXRlLT53 aW5vYmotPm51bV9ub3RudWxsX2luZm8pKTsKKwkJCXsKKwkJCQlpbnQJCQludW1hcmdzID0gcGVy ZnVuY3N0YXRlLT5udW1Bcmd1bWVudHM7CisKKwkJCQlmb3IgKGludCBqID0gMDsgaiA8IG51bWFy Z3M7IGorKykKKwkJCQkJbWVtc2V0KHdpbm9iai0+bm90bnVsbF9pbmZvW2pdLCAwLAorCQkJCQkJ ICAgTk5fUE9TX1RPX0JZVEVTKAorCQkJCQkJCQkJCSAgIHBlcmZ1bmNzdGF0ZS0+d2lub2JqLT5u dW1fbm90bnVsbF9pbmZvKSk7CisJCQl9CiAJCX0KIAl9CiAKQEAgLTI3MzQsNyArMjczOSw3IEBA IEV4ZWNJbml0V2luZG93QWdnKFdpbmRvd0FnZyAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBl ZmxhZ3MpCiAJCQl3aW5vYmotPmxvY2FsbWVtID0gTlVMTDsKIAkJCXBlcmZ1bmNzdGF0ZS0+d2lu b2JqID0gd2lub2JqOwogCQkJd2lub2JqLT5pZ25vcmVfbnVsbHMgPSB3ZnVuYy0+aWdub3JlX251 bGxzOwotCQkJaW5pdF9ub3RudWxsX2luZm8od2lub2JqKTsKKwkJCWluaXRfbm90bnVsbF9pbmZv KHdpbm9iaiwgcGVyZnVuY3N0YXRlKTsKIAogCQkJLyogSXQncyBhIHJlYWwgd2luZG93IGZ1bmN0 aW9uLCBzbyBzZXQgdXAgdG8gY2FsbCBpdC4gKi8KIAkJCWZtZ3JfaW5mb19jeHQod2Z1bmMtPndp bmZub2lkLCAmcGVyZnVuY3N0YXRlLT5mbGluZm8sCkBAIC0zMzg2LDcgKzMzOTEsNyBAQCBpZ25v cmVudWxsc19nZXRmdW5jYXJnaW5mcmFtZShXaW5kb3dPYmplY3Qgd2lub2JqLCBpbnQgYXJnbm8s CiAJCWlmIChpc291dCkKIAkJCSppc291dCA9IGZhbHNlOwogCi0JCXYgPSBnZXRfbm90bnVsbF9p bmZvKHdpbm9iaiwgYWJzX3Bvcyk7CisJCXYgPSBnZXRfbm90bnVsbF9pbmZvKHdpbm9iaiwgYWJz X3BvcywgYXJnbm8pOwogCQlpZiAodiA9PSBOTl9OVUxMKQkJLyogdGhpcyByb3cgaXMga25vd24g dG8gYmUgTlVMTCAqLwogCQkJZ290byBhZHZhbmNlOwogCkBAIC0zNDA0LDcgKzM0MDksNyBAQCBp Z25vcmVudWxsc19nZXRmdW5jYXJnaW5mcmFtZShXaW5kb3dPYmplY3Qgd2lub2JqLCBpbnQgYXJn bm8sCiAJCQkJbm90bnVsbF9vZmZzZXQrKzsKIAogCQkJLyogcmVjb3JkIHRoZSByb3cgc3RhdHVz ICovCi0JCQlwdXRfbm90bnVsbF9pbmZvKHdpbm9iaiwgYWJzX3BvcywgKmlzbnVsbCk7CisJCQlw dXRfbm90bnVsbF9pbmZvKHdpbm9iaiwgYWJzX3BvcywgYXJnbm8sICppc251bGwpOwogCQl9CiAJ CWVsc2UJCQkJCS8qIHRoaXMgcm93IGlzIGtub3duIHRvIGJlIE5PVCBOVUxMICovCiAJCXsKQEAg LTM0NDQsMTYgKzM0NDksMjAgQEAgb3V0X29mX2ZyYW1lOgogICogSW5pdGlhbGl6ZSBub24gbnVs bCBtYXAuCiAgKi8KIHN0YXRpYyB2b2lkCi1pbml0X25vdG51bGxfaW5mbyhXaW5kb3dPYmplY3Qg d2lub2JqKQoraW5pdF9ub3RudWxsX2luZm8oV2luZG93T2JqZWN0IHdpbm9iaiwgV2luZG93U3Rh dGVQZXJGdW5jIHBlcmZ1bmNzdGF0ZSkKIHsKIC8qIGluaXRpYWwgbnVtYmVyIG9mIG5vdG51bGwg aW5mbyBtZW1iZXJzICovCiAjZGVmaW5lCUlOSVRfTk9UX05VTExfSU5GT19OVU0JMTI4CisJaW50 CQkJbnVtYXJncyA9IHBlcmZ1bmNzdGF0ZS0+bnVtQXJndW1lbnRzOwogCiAJaWYgKHdpbm9iai0+ aWdub3JlX251bGxzID09IFBBUlNFUl9JR05PUkVfTlVMTFMpCiAJewogCQlTaXplCQlzaXplID0g Tk5fUE9TX1RPX0JZVEVTKElOSVRfTk9UX05VTExfSU5GT19OVU0pOwogCi0JCXdpbm9iai0+bm90 bnVsbF9pbmZvID0gcGFsbG9jMChzaXplKTsKKwkJd2lub2JqLT5ub3RudWxsX2luZm8gPSBwYWxs b2Moc2l6ZW9mKHVpbnQ4ICopICogbnVtYXJncyk7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgbnVt YXJnczsgaSsrKQorCQkJLyogYWxsb2NhdGUgbm90bnVsbF9pbmZvIGZvciBlYWNoIGFyZ3VtZW50 ICovCisJCQl3aW5vYmotPm5vdG51bGxfaW5mb1tpXSA9IHBhbGxvYzAoc2l6ZSk7CiAJCXdpbm9i ai0+bnVtX25vdG51bGxfaW5mbyA9IElOSVRfTk9UX05VTExfSU5GT19OVU07CiAJfQogfQpAQCAt MzQ2Miw5ICszNDcxLDEwIEBAIGluaXRfbm90bnVsbF9pbmZvKFdpbmRvd09iamVjdCB3aW5vYmop CiAgKiBncm93X25vdG51bGxfaW5mbwogICogZXhwYW5kIG5vdG51bGxfaW5mbyBpZiBuZWNlc3Nh cnkuCiAgKiBwb3M6IG5vdCBudWxsIGluZm8gcG9zaXRpb24KKyAqIGFyZ25vOiBhcmd1bWVudCBu dW1iZXIKICovCiBzdGF0aWMgdm9pZAotZ3Jvd19ub3RudWxsX2luZm8oV2luZG93T2JqZWN0IHdp bm9iaiwgaW50NjQgcG9zKQorZ3Jvd19ub3RudWxsX2luZm8oV2luZG93T2JqZWN0IHdpbm9iaiwg aW50NjQgcG9zLCBpbnQgYXJnbm8pCiB7CiAJaWYgKHBvcyA+PSB3aW5vYmotPm51bV9ub3RudWxs X2luZm8pCiAJewpAQCAtMzQ3Myw4ICszNDgzLDggQEAgZ3Jvd19ub3RudWxsX2luZm8oV2luZG93 T2JqZWN0IHdpbm9iaiwgaW50NjQgcG9zKQogCQkJU2l6ZQkJb2xkc2l6ZSA9IE5OX1BPU19UT19C WVRFUyh3aW5vYmotPm51bV9ub3RudWxsX2luZm8pOwogCQkJU2l6ZQkJbmV3c2l6ZSA9IG9sZHNp emUgKiAyOwogCi0JCQl3aW5vYmotPm5vdG51bGxfaW5mbyA9Ci0JCQkJcmVwYWxsb2MwKHdpbm9i ai0+bm90bnVsbF9pbmZvLCBvbGRzaXplLCBuZXdzaXplKTsKKwkJCXdpbm9iai0+bm90bnVsbF9p bmZvW2FyZ25vXSA9CisJCQkJcmVwYWxsb2MwKHdpbm9iai0+bm90bnVsbF9pbmZvW2FyZ25vXSwg b2xkc2l6ZSwgbmV3c2l6ZSk7CiAJCQl3aW5vYmotPm51bV9ub3RudWxsX2luZm8gPSBOTl9CWVRF U19UT19QT1MobmV3c2l6ZSk7CiAJCQlpZiAod2lub2JqLT5udW1fbm90bnVsbF9pbmZvID4gcG9z KQogCQkJCWJyZWFrOwpAQCAtMzQ4NiwxNiArMzQ5NiwxOSBAQCBncm93X25vdG51bGxfaW5mbyhX aW5kb3dPYmplY3Qgd2lub2JqLCBpbnQ2NCBwb3MpCiAgKiBnZXRfbm90bnVsbF9pbmZvCiAgKiBy ZXRyaWV2ZSBhIG1hcAogICogcG9zOiBtYXAgcG9zaXRpb24KKyAqIGFyZ25vOiBhcmd1bWVudCBu dW1iZXIKICAqLwogc3RhdGljIHVpbnQ4Ci1nZXRfbm90bnVsbF9pbmZvKFdpbmRvd09iamVjdCB3 aW5vYmosIGludDY0IHBvcykKK2dldF9ub3RudWxsX2luZm8oV2luZG93T2JqZWN0IHdpbm9iaiwg aW50NjQgcG9zLCBpbnQgYXJnbm8pCiB7CisJdWludDgJICAgKm1icDsKIAl1aW50OAkJbWI7CiAJ aW50NjQJCWJwb3M7CiAKLQlncm93X25vdG51bGxfaW5mbyh3aW5vYmosIHBvcyk7CisJZ3Jvd19u b3RudWxsX2luZm8od2lub2JqLCBwb3MsIGFyZ25vKTsKIAlicG9zID0gTk5fUE9TX1RPX0JZVEVT KHBvcyk7Ci0JbWIgPSB3aW5vYmotPm5vdG51bGxfaW5mb1ticG9zXTsKKwltYnAgPSB3aW5vYmot Pm5vdG51bGxfaW5mb1thcmdub107CisJbWIgPSBtYnBbYnBvc107CiAJcmV0dXJuIChtYiA+PiAo Tk5fU0hJRlQocG9zKSkpICYgTk5fTUFTSzsKIH0KIApAQCAtMzUwMywyMiArMzUxNiwyNiBAQCBn ZXRfbm90bnVsbF9pbmZvKFdpbmRvd09iamVjdCB3aW5vYmosIGludDY0IHBvcykKICAqIHB1dF9u b3RudWxsX2luZm8KICAqIHVwZGF0ZSBtYXAKICAqIHBvczogbWFwIHBvc2l0aW9uCisgKiBhcmdu bzogYXJndW1lbnQgbnVtYmVyCisgKiBpc251bGw6IGluZGljYXRlIE5VTEwgb3IgTk9UCiAgKi8K IHN0YXRpYyB2b2lkCi1wdXRfbm90bnVsbF9pbmZvKFdpbmRvd09iamVjdCB3aW5vYmosIGludDY0 IHBvcywgYm9vbCBpc251bGwpCitwdXRfbm90bnVsbF9pbmZvKFdpbmRvd09iamVjdCB3aW5vYmos IGludDY0IHBvcywgaW50IGFyZ25vLCBib29sIGlzbnVsbCkKIHsKKwl1aW50OAkgICAqbWJwOwog CXVpbnQ4CQltYjsKIAlpbnQ2NAkJYnBvczsKIAl1aW50OAkJdmFsID0gaXNudWxsID8gTk5fTlVM TCA6IE5OX05PVE5VTEw7CiAJaW50CQkJc2hpZnQ7CiAKLQlncm93X25vdG51bGxfaW5mbyh3aW5v YmosIHBvcyk7CisJZ3Jvd19ub3RudWxsX2luZm8od2lub2JqLCBwb3MsIGFyZ25vKTsKIAlicG9z ID0gTk5fUE9TX1RPX0JZVEVTKHBvcyk7Ci0JbWIgPSB3aW5vYmotPm5vdG51bGxfaW5mb1ticG9z XTsKKwltYnAgPSB3aW5vYmotPm5vdG51bGxfaW5mb1thcmdub107CisJbWIgPSBtYnBbYnBvc107 CiAJc2hpZnQgPSBOTl9TSElGVChwb3MpOwogCW1iICY9IH4oTk5fTUFTSyA8PCBzaGlmdCk7CS8q IGNsZWFyIG1hcCAqLwogCW1iIHw9ICh2YWwgPDwgc2hpZnQpOwkJLyogdXBkYXRlIG1hcCAqLwot CXdpbm9iai0+bm90bnVsbF9pbmZvW2Jwb3NdID0gbWI7CisJbWJwW2Jwb3NdID0gbWI7CiB9CiAK IC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKgpAQCAtMzcxNyw2ICszNzM0LDcgQEAgV2luR2V0RnVuY0FyZ0luUGFy dGl0aW9uKFdpbmRvd09iamVjdCB3aW5vYmosIGludCBhcmdubywKIHsKIAlXaW5kb3dBZ2dTdGF0 ZSAqd2luc3RhdGU7CiAJaW50NjQJCWFic19wb3M7CisJaW50NjQJCW1hcmtfcG9zOwogCURhdHVt CQlkYXR1bTsKIAlib29sCQludWxsX3RyZWF0bWVudDsKIAlpbnQJCQlub3RudWxsX29mZnNldDsK QEAgLTM3NzIsNiArMzc5MCwyMyBAQCBXaW5HZXRGdW5jQXJnSW5QYXJ0aXRpb24oV2luZG93T2Jq ZWN0IHdpbm9iaiwgaW50IGFyZ25vLAogCWZvcndhcmQgPSByZWxwb3MgPiAwID8gMSA6IC0xOwog CW15aXNvdXQgPSBmYWxzZTsKIAlkYXR1bSA9IDA7CisJLyoKKwkgKiBJR05PUkUgTlVMTFMgKyBX SU5ET1dfU0VFS19DVVJSRU5UICsgcmVscG9zID4gMCBjYXNlLCB3ZSB3b3VsZCBmZXRjaAorCSAq IGJleW9uZCB0aGUgY3VycmVudCByb3cgKyByZWxwb3MgdG8gZmluZCBvdXQgdGhlIHRhcmdldCBy b3cuIElmIHdlIG1hcmsKKwkgKiBhdCBhYnNfcG9zLCBuZXh0IGNhbGwgdG8gV2luR2V0RnVuY0Fy Z0luUGFydGl0aW9uIG9yCisJICogV2luR2V0RnVuY0FyZ0luRnJhbWUgKGluIGNhc2Ugd2hlbiBh IHdpbmRvdyBmdW5jdGlvbiBoYXZlIG11bHRpcGxlCisJICogYXJncykgY291bGQgZmFpbCB3aXRo ICJjYW5ub3QgZmV0Y2ggcm93IGJlZm9yZSBXaW5kb3dPYmplY3QncyBtYXJrCisJICogcG9zaXRp b24iLiBTbyBrZWVwIHRoZSBtYXJrIHBvc2l0aW9uIGF0IGN1cnJlbnRwb3MuCisJKi8KKwlpZiAo c2Vla3R5cGUgPT0gV0lORE9XX1NFRUtfQ1VSUkVOVCAmJglyZWxwb3MgPiAwKQorCQltYXJrX3Bv cyA9IHdpbnN0YXRlLT5jdXJyZW50cG9zOworCWVsc2UKKwkJLyoKKwkJICogRm9yIG90aGVyIGNh c2VzIHdlIGhhdmUgbm8gaWRlYSB3aGF0IHBvc2l0aW9uIG9mIHJvdyBjYWxsZXJzIHdvdWxkCisJ CSAqIGZldGNoIG5leHQgdGltZS4gQWxzbyBmb3IgcmVscG9zIDwgMCBjYXNlICh3ZSBnbyBiYWNr d2FyZCksIHdlCisJCSAqIGNhbm5vdCBzZXQgbWFyayBlaXRoZXIuIEZvciB0aG9zZSBjYXNlcyB3 ZSBhbHdheXMgc2V0IG1hcmsgYXQgMC4KKwkJICovCisJCW1hcmtfcG9zID0gMDsKIAogCS8qCiAJ ICogR2V0IHRoZSBuZXh0IG5vbm51bGwgdmFsdWUgaW4gdGhlIHBhcnRpdGlvbiwgbW92aW5nIGZv cndhcmQgb3IgYmFja3dhcmQKQEAgLTM3ODcsNyArMzgyMiw3IEBAIFdpbkdldEZ1bmNBcmdJblBh cnRpdGlvbihXaW5kb3dPYmplY3Qgd2lub2JqLCBpbnQgYXJnbm8sCiAJCQlicmVhazsKIAogCQkv KiBjaGVjayBOT1QgTlVMTCBjYWNoZWQgaW5mbyAqLwotCQlubl9pbmZvID0gZ2V0X25vdG51bGxf aW5mbyh3aW5vYmosIGFic19wb3MpOworCQlubl9pbmZvID0gZ2V0X25vdG51bGxfaW5mbyh3aW5v YmosIGFic19wb3MsIGFyZ25vKTsKIAkJaWYgKG5uX2luZm8gPT0gTk5fTk9UTlVMTCkJLyogdGhp cyByb3cgaXMga25vd24gdG8gYmUgTk9UIE5VTEwgKi8KIAkJCW5vdG51bGxfb2Zmc2V0Kys7CiAJ CWVsc2UgaWYgKG5uX2luZm8gPT0gTk5fTlVMTCkJLyogdGhpcyByb3cgaXMga25vd24gdG8gYmUg TlVMTCAqLwpAQCAtMzgwMiw3ICszODM3LDcgQEAgV2luR2V0RnVuY0FyZ0luUGFydGl0aW9uKFdp bmRvd09iamVjdCB3aW5vYmosIGludCBhcmdubywKIAkJCWlmICghKmlzbnVsbCkKIAkJCQlub3Ru dWxsX29mZnNldCsrOwogCQkJLyogcmVjb3JkIHRoZSByb3cgc3RhdHVzICovCi0JCQlwdXRfbm90 bnVsbF9pbmZvKHdpbm9iaiwgYWJzX3BvcywgKmlzbnVsbCk7CisJCQlwdXRfbm90bnVsbF9pbmZv KHdpbm9iaiwgYWJzX3BvcywgYXJnbm8sICppc251bGwpOwogCQl9CiAJfSB3aGlsZSAobm90bnVs bF9vZmZzZXQgPCBub3RudWxsX3JlbHBvcyk7CiAKQEAgLTM4MTAsNyArMzg0NSw3IEBAIFdpbkdl dEZ1bmNBcmdJblBhcnRpdGlvbihXaW5kb3dPYmplY3Qgd2lub2JqLCBpbnQgYXJnbm8sCiAJZGF0 dW0gPSBnZXR0dXBsZV9ldmFsX3BhcnRpdGlvbih3aW5vYmosIGFyZ25vLAogCQkJCQkJCQkJYWJz X3BvcywgaXNudWxsLCAmbXlpc291dCk7CiAJaWYgKCFteWlzb3V0ICYmIHNldF9tYXJrKQotCQlX aW5TZXRNYXJrUG9zaXRpb24od2lub2JqLCBhYnNfcG9zKTsKKwkJV2luU2V0TWFya1Bvc2l0aW9u KHdpbm9iaiwgbWFya19wb3MpOwogCWlmIChpc291dCkKIAkJKmlzb3V0ID0gbXlpc291dDsKIAot LSAKMi40My4wCgo= ----Next_Part(Mon_Oct_13_13_49_48_2025_363)----