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 1v6stx-00BJ96-BH for pgsql-hackers@arkaria.postgresql.org; Thu, 09 Oct 2025 15:49:57 +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 1v6stv-006bCM-2n for pgsql-hackers@arkaria.postgresql.org; Thu, 09 Oct 2025 15:49:55 +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 1v6stu-006bC9-Lc for pgsql-hackers@lists.postgresql.org; Thu, 09 Oct 2025 15:49:55 +0000 Received: from mail-ot1-x336.google.com ([2607:f8b0:4864:20::336]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1v6str-000sn3-2P for pgsql-hackers@postgresql.org; Thu, 09 Oct 2025 15:49:54 +0000 Received: by mail-ot1-x336.google.com with SMTP id 46e09a7af769-7afbcf24c83so327074a34.3 for ; Thu, 09 Oct 2025 08:49:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1760024991; x=1760629791; darn=postgresql.org; h=subject:from:to:content-language:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=txl38Dv5KhCCRqfTMUWwt+kPAqTjPwgDKBS/58gSsjQ=; b=APspG4aA02VJfWt5TgPTQqq2lJz+CTFV6sB93Jzreb7HCSws1B8rXpKn3HQfr5Seqh uX6wdjSZj7Nat0eloM8nWaVyyIVONfa4avei+9htBPQ0IZcmLlAvk99cbIyL/dQGeZeL Dew6VMxeP7MhpWCd0MmQ8qzlfqf4BJAlGQcRMdLWyAf0jNte62hukpQMRaPWXRWYL3eF 8XWtCMNHQWwRwYo1qWP+/d1Ujgs8cSi1FUZaxSglcPw2OtQJfspwBhwapjYTiNiZGhCr x2oYVwGR6K58QTl7swtdNSE4BoPzMfawTBf9v2UsnO5+jXGtvfPTC4rKM1rqNfAATHWA Orag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760024991; x=1760629791; h=subject:from:to:content-language:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=txl38Dv5KhCCRqfTMUWwt+kPAqTjPwgDKBS/58gSsjQ=; b=HerZ1jJ5hXdUyCPrsVAb5wNf2Z2BTMWFoW3Ys4IQBx0ID2SQL0RuzXyzlbBEAzQtKT oLxg2ISx3p3kB3bnHJMLFa0+HI3djhHPxE2hn+6WzHnrQK85DswO4mb2pI0enzCqhHFh aLWVNXYePQw9FmAbCoigP0r/5uZrmlYc77lxBTW2Wtluky/fuYFNnWlhPPaf91YnBtkL wRXLi00cB9qP+T/d5nmyPNVAuvJs/DLbGxDwcWY5n69T5r1TmsXXNq8BPvpkieESiAfw d8354OKHOgrSZHUaV9phFrMFYP9s4qN0Hx6TqKMIszoMA9Wo+teIWiHNx7OUEpGvsiRR MKRA== X-Gm-Message-State: AOJu0YxuRDtaFSn2gOo8kJDM/K6KOVu+c6hm97r+X0cace8nXm3K+BmF GomWpowRLFJ5AM3wuxwer1xj8UKAtoBSxxoGRYVpWLHm38avR0IOEwcm1q8eWAYEuUU= X-Gm-Gg: ASbGncsKIXrB5FfR/C90DH6x2MD5N8iYbQW1046bt1P1xHNlhpw1vSvFZ1Dy1H8UfaL k8IRF3glawG5XIT4f7nnQXLljartF+zX0hni+Ui96CgBGk2gYoycTTeWPvQnvNgEjCVaES22e82 Bsh3dcfABaWtPjLU5BvSr116XvKZlTeumK4vjVYQCBz5DvjRjD9jM9Vwq6toU45mNaHBW8eDBGs rFK/qGXAzQjigyKtvqSbkMYuM0O6fwHVDU6kRGwUlxOthCw0t1v/HWBuaJQW5ex9xSg6h7vLUmv s1W3zdL9UtGydGtHU7eMcI/KTCS6gfPtU1b3Y5JS7RITB+/qzQFMkXxvL8wAFSvBZq/xUUqxXk8 JuYKVS4MwEgEB+9hBMA4Qa7WdiLomXfYWytog0A9DB1SyB4X7PKy3ikzu1PwpNHdKuO/lCz4KN/ Qev+EhMEIWw9jkeJPID+I65gAs X-Google-Smtp-Source: AGHT+IHghl0lGT6TRm7UxffhVksM5FbduRWeSCWC0cTvQ8kEcJi75/ADKMBNfY4hiVz17KSSANtpFw== X-Received: by 2002:a05:6808:2113:b0:43f:7287:a5ad with SMTP id 5614622812f47-4417b38d074mr3869269b6e.30.1760024990867; Thu, 09 Oct 2025 08:49:50 -0700 (PDT) Received: from ?IPV6:2600:1700:8952:80:4d5d:2076:663e:9f2a? ([2600:1700:8952:80:4d5d:2076:663e:9f2a]) by smtp.gmail.com with ESMTPSA id 5614622812f47-44189a8cf6asm705353b6e.22.2025.10.09.08.49.49 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 09 Oct 2025 08:49:50 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------lakDafpXmTgFhLAUXvD0UOVj" Message-ID: Date: Thu, 9 Oct 2025 10:49:48 -0500 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US To: pgsql-hackers@postgresql.org From: Bryan Green Subject: [PATCH] Add Windows support for backtrace_functions (MSVC only) List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------lakDafpXmTgFhLAUXvD0UOVj Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hi, I've implemented Windows support for the backtrace_functions configuration parameter using the DbgHelp API. This brings Windows debugging capabilities closer to parity with Unix/Linux platforms. Currently, backtrace_functions only works on Unix-like systems. This patch adds equivalent functionality for Windows MSVC builds using: - CaptureStackBackTrace() for capturing the call stack - SymFromAddrW() and SymGetLineFromAddrW64() for symbol resolution - UTF-8 conversion to handle international file paths correctly When PDB symbol files are available, backtraces show function names, offsets, file paths, and line numbers. Without PDB files, raw memory addresses are shown. Testing performed: - MSVC build with PDB files: Backtraces include function names, offsets,   source files, and line numbers - MSVC build without PDB files: Backtraces show memory addresses only - Verified backtraces appear in server logs when backtrace_functions is set - Confirmed no crashes or memory leaks - Passed all tests with Cirrus CI for all defined platforms. The implementation is MSVC-specific. MinGW builds will use the existing fallback message ("backtrace generation is not supported by this installation"). The patch is attached. I'm happy to make revisions based on feedback. Best regards, Bryan Green --------------lakDafpXmTgFhLAUXvD0UOVj Content-Type: text/plain; charset=UTF-8; name="windows-backtrace-v1.patch" Content-Disposition: attachment; filename="windows-backtrace-v1.patch" Content-Transfer-Encoding: base64 RnJvbSA3OTg4NjZhMjUwYmY4NjQzNzU3ZTZhNTdiZWVkNDBmMjg2NDg0Zjc3IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBCcnlhbiBHcmVlbiA8ZGJyeWFuLmdyZWVuQGdtYWls LmNvbT4KRGF0ZTogTW9uLCA2IE9jdCAyMDI1IDE2OjI5OjU1IC0wNTAwClN1YmplY3Q6IFtQ QVRDSF0gQWRkIFdpbmRvd3Mgc3VwcG9ydCBmb3IgYmFja3RyYWNlX2Z1bmN0aW9ucyAoTVNW QyBvbmx5KQoKSW1wbGVtZW50IGJhY2t0cmFjZSBnZW5lcmF0aW9uIG9uIFdpbmRvd3MgdXNp bmcgdGhlIERiZ0hlbHAgQVBJLgpUaGlzIHByb3ZpZGVzIHNpbWlsYXIgZnVuY3Rpb25hbGl0 eSB0byB0aGUgZXhpc3RpbmcgVW5peC9MaW51eCBiYWNrdHJhY2UKc3VwcG9ydCwgYnV0IG9u bHkgZm9yIE1TVkMgYnVpbGRzLiBNaW5HVyBidWlsZHMgYXJlIG5vdCBzdXBwb3J0ZWQgZHVl IHRvCmRpZmZlcmVuY2VzIGluIHRoZSBkZWJ1Z2dpbmcgaW5mcmFzdHJ1Y3R1cmUuCgpXaGVu IFBEQiBkZWJ1ZyBzeW1ib2xzIGFyZSBhdmFpbGFibGUsIGJhY2t0cmFjZXMgd2lsbCBpbmNs dWRlIGZ1bmN0aW9uCm5hbWVzIGFuZCBzb3VyY2UgZmlsZSBsb2NhdGlvbnMuIFdpdGhvdXQg UERCIGZpbGVzLCBvbmx5IHJhdyBhZGRyZXNzZXMKYXJlIGRpc3BsYXllZC4gVGhlIGltcGxl bWVudGF0aW9uIHVzZXMgdGhlIFVuaWNvZGUgKHdpZGUgY2hhcmFjdGVyKQp2YXJpYW50cyBv ZiBEYmdIZWxwIGZ1bmN0aW9ucyBhbmQgY29udmVydHMgcGF0aHMgdG8gVVRGLTggdG8gcHJv cGVybHkKaGFuZGxlIGludGVybmF0aW9uYWwgY2hhcmFjdGVycyBpbiBmaWxlIHBhdGhzLgoK VGhpcyBhZGRzIGEgZGVwZW5kZW5jeSBvbiBkYmdoZWxwLmxpYiBmb3IgV2luZG93cyBNU1ZD IGJ1aWxkcy4KCkF1dGhvcjogQnJ5YW4gR3JlZW4gPGRicnlhbi5ncmVlbkBnbWFpbC5jb20+ Ci0tLQogc3JjL2JhY2tlbmQvbWVzb24uYnVpbGQgICAgICAgIHwgICA2ICsrCiBzcmMvYmFj a2VuZC91dGlscy9lcnJvci9lbG9nLmMgfCAxNjcgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKystCiAyIGZpbGVzIGNoYW5nZWQsIDE3MiBpbnNlcnRpb25zKCspLCAxIGRlbGV0 aW9uKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbWVzb24uYnVpbGQgYi9zcmMvYmFj a2VuZC9tZXNvbi5idWlsZAppbmRleCBiODMxYTU0MTY1Li44NDllNDU3ZGEzIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9tZXNvbi5idWlsZAorKysgYi9zcmMvYmFja2VuZC9tZXNvbi5i dWlsZApAQCAtMSw2ICsxLDEyIEBACiAjIENvcHlyaWdodCAoYykgMjAyMi0yMDI1LCBQb3N0 Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAogCiBiYWNrZW5kX2J1aWxkX2RlcHMg PSBbYmFja2VuZF9jb2RlXQorCisjIEFkZCBkYmdoZWxwIGZvciBiYWNrdHJhY2UgY2FwYWJp bGl0eQoraWYgaG9zdF9zeXN0ZW0gPT0gJ3dpbmRvd3MnIGFuZCBjYy5nZXRfaWQoKSA9PSAn bXN2YycKKyAgYmFja2VuZF9idWlsZF9kZXBzICs9IGNjLmZpbmRfbGlicmFyeSgnZGJnaGVs cCcpCitlbmRpZgorCiBiYWNrZW5kX3NvdXJjZXMgPSBbXQogYmFja2VuZF9saW5rX3dpdGgg PSBbcGdwb3J0X3NydiwgY29tbW9uX3Nydl0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv dXRpbHMvZXJyb3IvZWxvZy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvZXJyb3IvZWxvZy5jCmlu ZGV4IGI3Yjk2OTJmOGMuLmQ1N2NhNTQyNzQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0 aWxzL2Vycm9yL2Vsb2cuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9lcnJvci9lbG9nLmMK QEAgLTE0MCw2ICsxNDAsMTMgQEAgc3RhdGljIHZvaWQgd3JpdGVfc3lzbG9nKGludCBsZXZl bCwgY29uc3QgY2hhciAqbGluZSk7CiBzdGF0aWMgdm9pZCB3cml0ZV9ldmVudGxvZyhpbnQg bGV2ZWwsIGNvbnN0IGNoYXIgKmxpbmUsIGludCBsZW4pOwogI2VuZGlmCiAKKyNpZmRlZiBf TVNDX1ZFUgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlIDxkYmdoZWxwLmg+Citz dGF0aWMgYm9vbCB3aW4zMl9iYWNrdHJhY2Vfc3ltYm9sc19pbml0aWFsaXplZCA9IGZhbHNl Oworc3RhdGljIEhBTkRMRSB3aW4zMl9iYWNrdHJhY2VfcHJvY2VzcyA9IE5VTEw7CisjZW5k aWYKKwogLyogV2UgcHJvdmlkZSBhIHNtYWxsIHN0YWNrIG9mIEVycm9yRGF0YSByZWNvcmRz IGZvciByZS1lbnRyYW50IGNhc2VzICovCiAjZGVmaW5lIEVSUk9SREFUQV9TVEFDS19TSVpF ICA1CiAKQEAgLTExMTIsNiArMTExOSwxMiBAQCBlcnJiYWNrdHJhY2Uodm9pZCkKICAqIHNw ZWNpZmllcyBob3cgbWFueSBpbm5lciBmcmFtZXMgdG8gc2tpcC4gIFVzZSB0aGlzIHRvIGF2 b2lkIHNob3dpbmcgdGhlCiAgKiBpbnRlcm5hbCBiYWNrdHJhY2Ugc3VwcG9ydCBmdW5jdGlv bnMgaW4gdGhlIGJhY2t0cmFjZS4gIFRoaXMgcmVxdWlyZXMgdGhhdAogICogdGhpcyBhbmQg cmVsYXRlZCBmdW5jdGlvbnMgYXJlIG5vdCBpbmxpbmVkLgorICoKKyAqIFBsYXRmb3JtLXNw ZWNpZmljIGltcGxlbWVudGF0aW9uczoKKyAqIC0gVW5peC9MaW51eC86IFVzZXMgYmFja3Ry YWNlKCkgYW5kIGJhY2t0cmFjZV9zeW1ib2xzKCkgCisgKiAtIFdpbmRvd3M6IFVzZXMgQ2Fw dHVyZVN0YWNrQmFja1RyYWNlKCkgd2l0aCBEYmdIZWxwIGZvciBzeW1ib2wgcmVzb2x1dGlv bgorICogICAocmVxdWlyZXMgUERCIGZpbGVzOyBmYWxscyBiYWNrIHRvIHJhdyBhZGRyZXNz ZXMgaWYgdW5hdmFpbGFibGUpCisgKiAtIE90aGVyOiBSZXR1cm5zIHVuc3VwcG9ydGVkIG1l c3NhZ2UKICAqLwogc3RhdGljIHZvaWQKIHNldF9iYWNrdHJhY2UoRXJyb3JEYXRhICplZGF0 YSwgaW50IG51bV9za2lwKQpAQCAtMTEzOCw2ICsxMTUxLDE1OSBAQCBzZXRfYmFja3RyYWNl KEVycm9yRGF0YSAqZWRhdGEsIGludCBudW1fc2tpcCkKIAkJCWFwcGVuZFN0cmluZ0luZm9T dHJpbmcoJmVycnRyYWNlLAogCQkJCQkJCQkgICAiaW5zdWZmaWNpZW50IG1lbW9yeSBmb3Ig YmFja3RyYWNlIGdlbmVyYXRpb24iKTsKIAl9CisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQor CXsKKwkJdm9pZAkgICAqc3RhY2tbMTAwXTsKKwkJRFdPUkQJCWZyYW1lczsKKwkJRFdPUkQJ CWk7CisJCXdjaGFyX3QJCWJ1ZmZlcltzaXplb2YoU1lNQk9MX0lORk9XKSArIE1BWF9TWU1f TkFNRSAqIHNpemVvZih3Y2hhcl90KV07CisJCVBTWU1CT0xfSU5GT1cgc3ltYm9sOworCQlj aGFyCSAgICp1dGY4X2J1ZmZlcjsKKwkJaW50CQkJdXRmOF9sZW47CisKKwkJaWYgKCF3aW4z Ml9iYWNrdHJhY2Vfc3ltYm9sc19pbml0aWFsaXplZCkKKwkJeworCQkJd2luMzJfYmFja3Ry YWNlX3Byb2Nlc3MgPSBHZXRDdXJyZW50UHJvY2VzcygpOworCisJCQlTeW1TZXRPcHRpb25z KFNZTU9QVF9VTkROQU1FIHwKKwkJCQkJCSAgU1lNT1BUX0RFRkVSUkVEX0xPQURTIHwKKwkJ CQkJCSAgU1lNT1BUX0xPQURfTElORVMgfAorCQkJCQkJICBTWU1PUFRfRkFJTF9DUklUSUNB TF9FUlJPUlMpOworCisJCQlpZiAoU3ltSW5pdGlhbGl6ZSh3aW4zMl9iYWNrdHJhY2VfcHJv Y2VzcywgTlVMTCwgVFJVRSkpCisJCQl7CisJCQkJd2luMzJfYmFja3RyYWNlX3N5bWJvbHNf aW5pdGlhbGl6ZWQgPSB0cnVlOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCURXT1JECQll cnJvciA9IEdldExhc3RFcnJvcigpOworCQkJCWVsb2coV0FSTklORywgIlN5bUluaXRpYWxp emUgZmFpbGVkIHdpdGggZXJyb3IgJWx1IiwgZXJyb3IpOworCQkJfQorCQl9CisKKwkJZnJh bWVzID0gQ2FwdHVyZVN0YWNrQmFja1RyYWNlKG51bV9za2lwLCBsZW5ndGhvZihzdGFjayks IHN0YWNrLCBOVUxMKTsKKworCQlpZiAoZnJhbWVzID09IDApCisJCXsKKwkJCWFwcGVuZFN0 cmluZ0luZm9TdHJpbmcoJmVycnRyYWNlLCAiXG5ObyBzdGFjayBmcmFtZXMgY2FwdHVyZWQi KTsKKwkJCWVkYXRhLT5iYWNrdHJhY2UgPSBlcnJ0cmFjZS5kYXRhOworCQkJcmV0dXJuOwor CQl9CisKKwkJc3ltYm9sID0gKFBTWU1CT0xfSU5GT1cpIGJ1ZmZlcjsKKwkJc3ltYm9sLT5N YXhOYW1lTGVuID0gTUFYX1NZTV9OQU1FOworCQlzeW1ib2wtPlNpemVPZlN0cnVjdCA9IHNp emVvZihTWU1CT0xfSU5GT1cpOworCisJCWZvciAoaSA9IDA7IGkgPCBmcmFtZXM7IGkrKykK KwkJeworCQkJRFdPUkQ2NAkJYWRkcmVzcyA9IChEV09SRDY0KSAoc3RhY2tbaV0pOworCQkJ RFdPUkQ2NAkJZGlzcGxhY2VtZW50ID0gMDsKKwkJCUJPT0wJCXN5bV9yZXN1bHQ7CisKKwkJ CXN5bV9yZXN1bHQgPSBTeW1Gcm9tQWRkclcod2luMzJfYmFja3RyYWNlX3Byb2Nlc3MsCisJ CQkJCQkJCQkgIGFkZHJlc3MsCisJCQkJCQkJCQkgICZkaXNwbGFjZW1lbnQsCisJCQkJCQkJ CQkgIHN5bWJvbCk7CisKKwkJCWlmIChzeW1fcmVzdWx0KQorCQkJeworCQkJCUlNQUdFSExQ X0xJTkVXNjQgbGluZTsKKwkJCQlEV09SRAkJbGluZV9kaXNwbGFjZW1lbnQgPSAwOworCisJ CQkJbGluZS5TaXplT2ZTdHJ1Y3QgPSBzaXplb2YoSU1BR0VITFBfTElORVc2NCk7CisKKwkJ CQlpZiAoU3ltR2V0TGluZUZyb21BZGRyVzY0KHdpbjMyX2JhY2t0cmFjZV9wcm9jZXNzLAor CQkJCQkJCQkJCSAgYWRkcmVzcywKKwkJCQkJCQkJCQkgICZsaW5lX2Rpc3BsYWNlbWVudCwK KwkJCQkJCQkJCQkgICZsaW5lKSkKKwkJCQl7CisJCQkJCS8qIENvbnZlcnQgc3ltYm9sIG5h bWUgdG8gVVRGLTggKi8KKwkJCQkJdXRmOF9sZW4gPSBXaWRlQ2hhclRvTXVsdGlCeXRlKENQ X1VURjgsIDAsIHN5bWJvbC0+TmFtZSwgLTEsCisJCQkJCQkJCQkJCQkgICBOVUxMLCAwLCBO VUxMLCBOVUxMKTsKKwkJCQkJaWYgKHV0ZjhfbGVuID4gMCkKKwkJCQkJeworCQkJCQkJY2hh cgkgICAqZmlsZW5hbWVfdXRmODsKKwkJCQkJCWludAkJCWZpbGVuYW1lX2xlbjsKKworCQkJ CQkJdXRmOF9idWZmZXIgPSBwYWxsb2ModXRmOF9sZW4pOworCQkJCQkJV2lkZUNoYXJUb011 bHRpQnl0ZShDUF9VVEY4LCAwLCBzeW1ib2wtPk5hbWUsIC0xLAorCQkJCQkJCQkJCQl1dGY4 X2J1ZmZlciwgdXRmOF9sZW4sIE5VTEwsIE5VTEwpOworCisJCQkJCQkvKiBDb252ZXJ0IGZp bGUgbmFtZSB0byBVVEYtOCAqLworCQkJCQkJZmlsZW5hbWVfbGVuID0gV2lkZUNoYXJUb011 bHRpQnl0ZShDUF9VVEY4LCAwLAorCQkJCQkJCQkJCQkJCQkgICBsaW5lLkZpbGVOYW1lLCAt MSwKKwkJCQkJCQkJCQkJCQkJICAgTlVMTCwgMCwgTlVMTCwgTlVMTCk7CisJCQkJCQlpZiAo ZmlsZW5hbWVfbGVuID4gMCkKKwkJCQkJCXsKKwkJCQkJCQlmaWxlbmFtZV91dGY4ID0gcGFs bG9jKGZpbGVuYW1lX2xlbik7CisJCQkJCQkJV2lkZUNoYXJUb011bHRpQnl0ZShDUF9VVEY4 LCAwLCBsaW5lLkZpbGVOYW1lLCAtMSwKKwkJCQkJCQkJCQkJCWZpbGVuYW1lX3V0ZjgsIGZp bGVuYW1lX2xlbiwKKwkJCQkJCQkJCQkJCU5VTEwsIE5VTEwpOworCisJCQkJCQkJYXBwZW5k U3RyaW5nSW5mbygmZXJydHJhY2UsCisJCQkJCQkJCQkJCSAiXG4lcysweCVsbHggWyVzOiVs dV0iLAorCQkJCQkJCQkJCQkgdXRmOF9idWZmZXIsCisJCQkJCQkJCQkJCSAodW5zaWduZWQg bG9uZyBsb25nKSBkaXNwbGFjZW1lbnQsCisJCQkJCQkJCQkJCSBmaWxlbmFtZV91dGY4LAor CQkJCQkJCQkJCQkgKHVuc2lnbmVkIGxvbmcpIGxpbmUuTGluZU51bWJlcik7CisKKwkJCQkJ CQlwZnJlZShmaWxlbmFtZV91dGY4KTsKKwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJCQkJCXsK KwkJCQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZlcnJ0cmFjZSwKKwkJCQkJCQkJCQkJICJcbiVz KzB4JWxseCBbMHglbGx4XSIsCisJCQkJCQkJCQkJCSB1dGY4X2J1ZmZlciwKKwkJCQkJCQkJ CQkJICh1bnNpZ25lZCBsb25nIGxvbmcpIGRpc3BsYWNlbWVudCwKKwkJCQkJCQkJCQkJICh1 bnNpZ25lZCBsb25nIGxvbmcpIGFkZHJlc3MpOworCQkJCQkJfQorCisJCQkJCQlwZnJlZSh1 dGY4X2J1ZmZlcik7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQkvKiBDb252 ZXJzaW9uIGZhaWxlZCwgdXNlIGFkZHJlc3Mgb25seSAqLworCQkJCQkJYXBwZW5kU3RyaW5n SW5mbygmZXJydHJhY2UsCisJCQkJCQkJCQkJICJcblsweCVsbHhdIiwKKwkJCQkJCQkJCQkg KHVuc2lnbmVkIGxvbmcgbG9uZykgYWRkcmVzcyk7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxz ZQorCQkJCXsKKwkJCQkJLyogTm8gbGluZSBpbmZvLCBjb252ZXJ0IHN5bWJvbCBuYW1lIG9u bHkgKi8KKwkJCQkJdXRmOF9sZW4gPSBXaWRlQ2hhclRvTXVsdGlCeXRlKENQX1VURjgsIDAs IHN5bWJvbC0+TmFtZSwgLTEsCisJCQkJCQkJCQkJCQkgICBOVUxMLCAwLCBOVUxMLCBOVUxM KTsKKwkJCQkJaWYgKHV0ZjhfbGVuID4gMCkKKwkJCQkJeworCQkJCQkJdXRmOF9idWZmZXIg PSBwYWxsb2ModXRmOF9sZW4pOworCQkJCQkJV2lkZUNoYXJUb011bHRpQnl0ZShDUF9VVEY4 LCAwLCBzeW1ib2wtPk5hbWUsIC0xLAorCQkJCQkJCQkJCQl1dGY4X2J1ZmZlciwgdXRmOF9s ZW4sIE5VTEwsIE5VTEwpOworCisJCQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZlcnJ0cmFjZSwK KwkJCQkJCQkJCQkgIlxuJXMrMHglbGx4IFsweCVsbHhdIiwKKwkJCQkJCQkJCQkgdXRmOF9i dWZmZXIsCisJCQkJCQkJCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpIGRpc3BsYWNlbWVudCwK KwkJCQkJCQkJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZykgYWRkcmVzcyk7CisKKwkJCQkJCXBm cmVlKHV0ZjhfYnVmZmVyKTsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCS8q IENvbnZlcnNpb24gZmFpbGVkLCB1c2UgYWRkcmVzcyBvbmx5ICovCisJCQkJCQlhcHBlbmRT dHJpbmdJbmZvKCZlcnJ0cmFjZSwKKwkJCQkJCQkJCQkgIlxuWzB4JWxseF0iLAorCQkJCQkJ CQkJCSAodW5zaWduZWQgbG9uZyBsb25nKSBhZGRyZXNzKTsKKwkJCQkJfQorCQkJCX0KKwkJ CX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlhcHBlbmRTdHJpbmdJbmZvKCZlcnJ0cmFjZSwKKwkJ CQkJCQkJICJcblsweCVsbHhdIiwKKwkJCQkJCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpIGFk ZHJlc3MpOworCQkJfQorCQl9CisJfQogI2Vsc2UKIAlhcHBlbmRTdHJpbmdJbmZvU3RyaW5n KCZlcnJ0cmFjZSwKIAkJCQkJCSAgICJiYWNrdHJhY2UgZ2VuZXJhdGlvbiBpcyBub3Qgc3Vw cG9ydGVkIGJ5IHRoaXMgaW5zdGFsbGF0aW9uIik7CkBAIC0xMTQ1LDcgKzEzMTEsNiBAQCBz ZXRfYmFja3RyYWNlKEVycm9yRGF0YSAqZWRhdGEsIGludCBudW1fc2tpcCkKIAogCWVkYXRh LT5iYWNrdHJhY2UgPSBlcnJ0cmFjZS5kYXRhOwogfQotCiAvKgogICogZXJybXNnX2ludGVy bmFsIC0tLSBhZGQgYSBwcmltYXJ5IGVycm9yIG1lc3NhZ2UgdGV4dCB0byB0aGUgY3VycmVu dCBlcnJvcgogICoKLS0gCjIuNDYuMC53aW5kb3dzLjEKCg== --------------lakDafpXmTgFhLAUXvD0UOVj--