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 1vIzG7-005inT-2X for pgsql-hackers@arkaria.postgresql.org; Wed, 12 Nov 2025 01:02:50 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vIzF5-008NyC-1o for pgsql-hackers@arkaria.postgresql.org; Wed, 12 Nov 2025 01:01:47 +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.96) (envelope-from ) id 1vIzF5-008Ny4-0O for pgsql-hackers@lists.postgresql.org; Wed, 12 Nov 2025 01:01:47 +0000 Received: from mail-yx1-xb136.google.com ([2607:f8b0:4864:20::b136]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vIzF2-007FMS-1S for pgsql-hackers@postgresql.org; Wed, 12 Nov 2025 01:01:46 +0000 Received: by mail-yx1-xb136.google.com with SMTP id 956f58d0204a3-640b4a05c1cso286065d50.3 for ; Tue, 11 Nov 2025 17:01:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762909302; x=1763514102; darn=postgresql.org; h=in-reply-to:content-language:references:cc:to:from:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=nxu6uTC27r8s5FRpunWEr9NJ1ra1HGkI0tKYpEAWojY=; b=iXbeCyxg7A/4QLyfY644JSG7M+FlSOGE6FKsDc1CU8PeTDBOW9rubpear9o0HrG7SX 9gdJVo5MdvaXWaaK8bEeo9m5k6Wbi/2H5pPumaBUe1IawrreP0kx6MLSEyevfNzml/SZ ySk477PRmVS/RU3KiJ+TOpK6e0JUczxK8C+u6f2Nc2bYaCkps0pL+pU2xkJUXAi1T3Iz GNsTo9LTFRKQ713/RHq4l/lEfgqCMG66yFJJQb6gxyDiDuy4O7g2qZefxMDPT4t+WCa1 2Wfb3qLuslQ5oAqPFcvFS/hDkCErVXdJkSCS7GiRRh3+3HWrtMcKFuOv0Y0ByD8VgS3o bkSQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762909302; x=1763514102; h=in-reply-to:content-language:references:cc:to:from:subject :user-agent:mime-version:date:message-id:x-gm-gg:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=nxu6uTC27r8s5FRpunWEr9NJ1ra1HGkI0tKYpEAWojY=; b=pfaVY69VGnDdsQcEqVvufEO4rWd6HOXuVceW4BvB6Ip/VhLKc27ypNxrCDyi5RDMR/ u2LPnT1T7solYypf/QrAnfbZm9ELkfD3PqNw8d328vrTIk44BLipB/eWnpPyDM0ZAaYC cvIte6b4bCZJQz+5/AvlvImVAdDoLmowXPmXeb0SayYkUVXcaAMrKPQWV11UcxF95F+H u/nnbBBq6oYqtHC4YTIRAIgE9Ld9c6wGx3p/tzGhtnWzyQqRUZwR4LYiBW/y68v08vVy 5xFGgMjcvFpAy+TsOjDxePFVfr5/CNn8LDn4OTrGaoVC4LX7YYIP3VQkBiEyTmmZB2zM t8wA== X-Gm-Message-State: AOJu0Ywp2yIBRzav5Gh8XJKMlyJeMkonbpWkcGMrzVJBNvrOBQHVcpYW xwyydbg7IbDFcNkNBfMbztG0y+7A7IKbxSWuyWs8i8D08LwqC2cXzYFW X-Gm-Gg: ASbGncuhp0Mx6OvMS6adwVAOFX2etzP8pacr6mXzue+nSOzCktNrL226zus1A1TP4KB jOju4GHMDYs4mw3xNq60ZeZYWjlRkmtmDJiwb5CqkdEBbuoQ3yfknWhsOs5u2vPKhUXGb12rmzh Tfymc0pvBkwyFZjYvfcTRzP4TlEUwgGt4Bv3SrMOiWxZ/JuawUOmrHSpR6F4Q0qWG4nZfau7jTU sYL1NQL+r327EPWCZDYqaPxVlg0fssB6lagdRRujym/vNXLGdRCI8esFmXtrWDaaAY+XQzwCdtJ FMgPqQqp8bc2wEDoN4GfnHIGU6X9nLqdzbBcr/yS6qEjDSO8v7Fo4da2B3HF98HLpBrQ/yLRk0D faobgoRqDMcq/qxcasOLTB34pHRe485qHCmPUiZthcn0bp3MaKPxtSmmHejgsVeObtDJ4pS2o65 6HJwh+UPnT2kQs0Xt41ZRL6ab4aNityYkePnPmVIwwTjOD2iR1TFQ= X-Google-Smtp-Source: AGHT+IHx/T28crG27/CMD5XvOOE4JVYncFp13sZe2o/t29oTcvBssQaX5IEcJyi8WDD2rS0ZP80acg== X-Received: by 2002:a53:acc1:0:10b0:636:149a:f54e with SMTP id 956f58d0204a3-64101b66c79mr1048917d50.37.1762909302307; Tue, 11 Nov 2025 17:01:42 -0800 (PST) Received: from ?IPV6:2600:1700:8952:80:8574:f46:89b4:7a70? ([2600:1700:8952:80:8574:f46:89b4:7a70]) by smtp.gmail.com with ESMTPSA id 956f58d0204a3-641015c46a7sm450337d50.10.2025.11.11.17.01.40 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 11 Nov 2025 17:01:41 -0800 (PST) Content-Type: multipart/mixed; boundary="------------YUSeVzb9d5E0FeRQMeKdB9RR" Message-ID: <7412f694-7c57-41e5-ae37-71136070b0da@gmail.com> Date: Tue, 11 Nov 2025 19:02:14 -0600 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH] O_CLOEXEC not honored on Windows - handle inheritance chain From: Bryan Green To: Thomas Munro Cc: pgsql-hackers References: <7f6779d5-7a0e-44c5-a85f-b4ef265db766@gmail.com> <35f9236e-95d8-4f31-ac6b-ec54b7de4bac@gmail.com> Content-Language: en-US In-Reply-To: <35f9236e-95d8-4f31-ac6b-ec54b7de4bac@gmail.com> 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. --------------YUSeVzb9d5E0FeRQMeKdB9RR Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 11/7/2025 11:28 AM, Bryan Green wrote: > On 11/6/2025 8:42 AM, Bryan Green wrote: >> On 11/6/2025 7:43 AM, Thomas Munro wrote: ... >> So the plan would be: >> >> Backport branches (v16+): >> #define O_DIRECT 0x80000000 >> #define O_CLOEXEC 0x04000000 >> #define O_DSYNC _O_NO_INHERIT >> >> Master: >> #define O_DIRECT 0x80000000 >> #define O_DSYNC 0x04000000 >> #define O_CLOEXEC _O_NO_INHERIT >> >> And then in pgwin32_open(): >> sa.bInheritHandle = (fileFlags & O_CLOEXEC) ? FALSE : TRUE; >> >> I will prepare a new version of the patch that implements the suggested >> change for master. >> >> > The changes for master, along with a tap test, are provided with the > attached patch. > Thanks to CI discovered a mistake in the makefile and meson.build file for the tests. New patch attached. -- Bryan Green EDB: https://www.enterprisedb.com --------------YUSeVzb9d5E0FeRQMeKdB9RR Content-Type: text/plain; charset=UTF-8; name="v3-0001-Fix-O_CLOEXEC-flag-handling-in-Windows-port.patch" Content-Disposition: attachment; filename*0="v3-0001-Fix-O_CLOEXEC-flag-handling-in-Windows-port.patch" Content-Transfer-Encoding: base64 RnJvbSA0NzM4YzRkOGNjOTFkNWY5ZDJkNzFiZjY4MjliYzk0MzdlMjcyOGVkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBCcnlhbiBHcmVlbiA8ZGJyeWFuLmdyZWVuQGdtYWls LmNvbT4KRGF0ZTogRnJpLCAzMSBPY3QgMjAyNSAxMDoxMTozMCAtMDYwMApTdWJqZWN0OiBb UEFUQ0ggdjNdIEZpeCBPX0NMT0VYRUMgZmxhZyBoYW5kbGluZyBpbiBXaW5kb3dzIHBvcnQu CgpQb3N0Z3JlU1FMJ3Mgc3JjL3BvcnQvb3Blbi5jIGhhcyBhbHdheXMgc2V0IGJJbmhlcml0 SGFuZGxlID0gVFJVRQp3aGVuIG9wZW5pbmcgZmlsZXMgb24gV2luZG93cywgbWFraW5nIGFs bCBmaWxlIGRlc2NyaXB0b3JzIGluaGVyaXRhYmxlCmJ5IGNoaWxkIHByb2Nlc3Nlcy4gIFRo aXMgbWVhbnQgdGhlIE9fQ0xPRVhFQyBmbGFnLCBhZGRlZCB0byBtYW55IGNhbGwKc2l0ZXMg YnkgY29tbWl0IDFkYTU2OWNhMWYsIHdhcyBzaWxlbnRseSBpZ25vcmVkLgoKVGhlIG9yaWdp bmFsIGNvbW1pdCBpbmNsdWRlZCBhIGNvbW1lbnQgc3VnZ2VzdGluZyB0aGF0IG91ciBvcGVu KCkKcmVwbGFjZW1lbnQgZG9lc24ndCBjcmVhdGUgaW5oZXJpdGFibGUgaGFuZGxlcywgYnV0 IGl0IGFwcGVhcnMgdGhpcwptYXkgaGF2ZSBiZWVuIGJhc2VkIG9uIGEgbWlzdW5kZXJzdGFu ZGluZyBvZiB0aGUgY29kZSBwYXRoLiAgSW4KcHJhY3RpY2UsIHRoZSBjb2RlIHdhcyBjcmVh dGluZyBpbmhlcml0YWJsZSBoYW5kbGVzIGluIGFsbCBjYXNlcy4KClRoaXMgaGFzbid0IGNh dXNlZCB3aWRlc3ByZWFkIHByb2JsZW1zIGJlY2F1c2UgbW9zdCBjaGlsZCBwcm9jZXNzZXMK KGFyY2hpdmVfY29tbWFuZCwgQ09QWSBQUk9HUkFNLCBldGMuKSBvcGVyYXRlIG9uIGZpbGUg cGF0aHMgcGFzc2VkIGFzCmFyZ3VtZW50cyByYXRoZXIgdGhhbiBpbmhlcml0ZWQgZmlsZSBk ZXNjcmlwdG9ycy4gIEV2ZW4gaWYgYSBjaGlsZAp3YW50ZWQgdG8gdXNlIGFuIGluaGVyaXRl ZCBoYW5kbGUsIGl0IHdvdWxkIG5lZWQgdG8gbGVhcm4gdGhlIG51bWVyaWMKaGFuZGxlIHZh bHVlLCB3aGljaCBpc24ndCBwYXNzZWQgdGhyb3VnaCBvdXIgSVBDIG1lY2hhbmlzbXMuCgpO b25ldGhlbGVzcywgdGhlIGN1cnJlbnQgYmVoYXZpb3IgaXMgd3JvbmcuICBJdCB2aW9sYXRl cyBkb2N1bWVudGVkCk9fQ0xPRVhFQyBzZW1hbnRpY3MsIGNvbnRyYWRpY3RzIG91ciBvd24g Y29kZSBjb21tZW50cywgYW5kIG1ha2VzClBvc3RncmVTUUwgYmVoYXZlIGRpZmZlcmVudGx5 IG9uIFdpbmRvd3MgdGhhbiBvbiBVbml4LiAgSXQgYWxzbyBjcmVhdGVzCnBvdGVudGlhbCBp c3N1ZXMgd2l0aCBmdXR1cmUgY29kZSBvciBzZWN1cml0eSBhdWRpdGluZyB0b29scy4KClRv IGZpeCwgZGVmaW5lIE9fQ0xPRVhFQyB0byBhIG5vbnplcm8gdmFsdWUgKDB4ODAwMDAsIGlu IHRoZSBwcml2YXRlCnVzZSByYW5nZSBmb3Igb3BlbigpIGZsYWdzKS4gIFRoZW4gaG9ub3Ig aXQgaW4gcGd3aW4zMl9vcGVuX2hhbmRsZSgpCmJ5IHNldHRpbmcgYkluaGVyaXRIYW5kbGUg YWNjb3JkaW5nIHRvIHdoZXRoZXIgT19DTE9FWEVDIGlzIHNwZWNpZmllZC4KV2Ugc2V0IGJJ bmhlcml0SGFuZGxlIGRpcmVjdGx5IGluIFNFQ1VSSVRZX0FUVFJJQlVURVMgcmF0aGVyIHRo YW4gdXNpbmcKU2V0SGFuZGxlSW5mb3JtYXRpb24oKSBhZnRlcndhcmRzLCBhcyB0aGUgZm9y bWVyIGlzIHNpbXBsZXIuCgpBdXRob3I6IEJyeWFuIEdyZWVuIDxkYnJ5YW4uZ3JlZW5AZ21h aWwuY29tPgotLS0KIHNyYy9pbmNsdWRlL3BvcnQvd2luMzJfcG9ydC5oICAgICAgICAgICAg ICAgICB8ICAxNyArLQogc3JjL3BvcnQvb3Blbi5jICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgIDEzICstCiBzcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlICAgICAgICAgICAg ICAgICAgICAgfCAgIDEgKwogc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZCAgICAgICAg ICAgICAgICAgIHwgICAxICsKIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9jbG9leGVjL01ha2Vm aWxlICAgICAgICB8ICAzMCArKwogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Nsb2V4ZWMvbWVz b24uYnVpbGQgICAgIHwgIDI2ICsrCiAuLi4vbW9kdWxlcy90ZXN0X2Nsb2V4ZWMvdC8wMDFf Y2xvZXhlYy5wbCAgICAgfCAgNjAgKysrKwogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Nsb2V4 ZWMvdGVzdF9jbG9leGVjLmMgIHwgMjY3ICsrKysrKysrKysrKysrKysrKwogOCBmaWxlcyBj aGFuZ2VkLCA0MDQgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9k ZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Nsb2V4ZWMvTWFrZWZpbGUKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY2xvZXhlYy9tZXNvbi5idWls ZAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9jbG9leGVjL3Qv MDAxX2Nsb2V4ZWMucGwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rl c3RfY2xvZXhlYy90ZXN0X2Nsb2V4ZWMuYwoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Bv cnQvd2luMzJfcG9ydC5oIGIvc3JjL2luY2x1ZGUvcG9ydC93aW4zMl9wb3J0LmgKaW5kZXgg ZmY3MDI4YmRjOC4uYWQ0NDJlMWRlNyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcG9ydC93 aW4zMl9wb3J0LmgKKysrIGIvc3JjL2luY2x1ZGUvcG9ydC93aW4zMl9wb3J0LmgKQEAgLTMz NSwxOSArMzM1LDE4IEBAIGV4dGVybiBpbnQJX3BnbHN0YXQ2NChjb25zdCBjaGFyICpuYW1l LCBzdHJ1Y3Qgc3RhdCAqYnVmKTsKIAogLyoKICAqIFN1cHBsZW1lbnQgdG8gPGZjbnRsLmg+ LgotICogVGhpcyBpcyB0aGUgc2FtZSB2YWx1ZSBhcyBfT19OT0lOSEVSSVQgaW4gdGhlIE1T IGhlYWRlciBmaWxlLiBUaGlzIGlzCi0gKiB0byBlbnN1cmUgdGhhdCB3ZSBkb24ndCBjb2xs aWRlIHdpdGggYSBmdXR1cmUgZGVmaW5pdGlvbi4gSXQgbWVhbnMKLSAqIHdlIGNhbm5vdCB1 c2UgX09fTk9JTkhFUklUIG91cnNlbHZlcy4KKyAqCiAgKi8KLSNkZWZpbmUgT19EU1lOQyAw eDAwODAKKyNkZWZpbmUJT19ESVJFQ1QJMHg4MDAwMDAwMAorI2RlZmluZQlPX0RTWU5DCQkw eDA0MDAwMDAwCiAKIC8qCi0gKiBPdXIgb3BlbigpIHJlcGxhY2VtZW50IGRvZXMgbm90IGNy ZWF0ZSBpbmhlcml0YWJsZSBoYW5kbGVzLCBzbyBpdCBpcyBzYWZlIHRvCi0gKiBpZ25vcmUg T19DTE9FWEVDLiAgKElmIHdlIHdlcmUgdXNpbmcgV2luZG93cycgb3duIG9wZW4oKSwgaXQg bWlnaHQgYmUKLSAqIG5lY2Vzc2FyeSB0byBjb252ZXJ0IHRoaXMgdG8gX09fTk9JTkhFUklU LikKKyAqIE1hcCBPX0NMT0VYRUMgdG8gV2luZG93cycgX09fTk9JTkhFUklUIGZsYWcuICBP dXIgc3JjL3BvcnQvb3Blbi5jCisgKiBleHBsaWNpdGx5IGNoZWNrcyBmb3IgdGhpcyBmbGFn IGFuZCBzZXRzIGJJbmhlcml0SGFuZGxlIGFjY29yZGluZ2x5CisgKiB3aGVuIGNhbGxpbmcg Q3JlYXRlRmlsZSgpLiAgTm90ZSB0aGF0IENyZWF0ZUZpbGUoKSBkb2Vzbid0IHVuZGVyc3Rh bmQKKyAqIHRoaXMgZmxhZyBuYXRpdmVseSAtIHdlIG11c3QgaGFuZGxlIGl0IGluIG91ciB3 cmFwcGVyLgogICovCi0jZGVmaW5lIE9fQ0xPRVhFQyAwCi0KKyNkZWZpbmUJT19DTE9FWEVD CV9PX05PSU5IRVJJVAogLyoKICAqIFN1cHBsZW1lbnQgdG8gPGVycm5vLmg+LgogICoKZGlm ZiAtLWdpdCBhL3NyYy9wb3J0L29wZW4uYyBiL3NyYy9wb3J0L29wZW4uYwppbmRleCA0YTMx YzVkN2I3Li43MTM0NGI5OTE3IDEwMDY0NAotLS0gYS9zcmMvcG9ydC9vcGVuLmMKKysrIGIv c3JjL3BvcnQvb3Blbi5jCkBAIC03NCwxMyArNzQsMjIgQEAgcGd3aW4zMl9vcGVuX2hhbmRs ZShjb25zdCBjaGFyICpmaWxlTmFtZSwgaW50IGZpbGVGbGFncywgYm9vbCBiYWNrdXBfc2Vt YW50aWNzKQogCS8qIENoZWNrIHRoYXQgd2UgY2FuIGhhbmRsZSB0aGUgcmVxdWVzdCAqLwog CWFzc2VydCgoZmlsZUZsYWdzICYgKChPX1JET05MWSB8IE9fV1JPTkxZIHwgT19SRFdSKSB8 IE9fQVBQRU5EIHwKIAkJCQkJCSAoT19SQU5ET00gfCBPX1NFUVVFTlRJQUwgfCBPX1RFTVBP UkFSWSkgfAotCQkJCQkJIF9PX1NIT1JUX0xJVkVEIHwgT19EU1lOQyB8IE9fRElSRUNUIHwK KwkJCQkJCSBfT19TSE9SVF9MSVZFRCB8IE9fRFNZTkMgfCBPX0RJUkVDVCB8IE9fQ0xPRVhF QyB8CiAJCQkJCQkgKE9fQ1JFQVQgfCBPX1RSVU5DIHwgT19FWENMKSB8IChPX1RFWFQgfCBP X0JJTkFSWSkpKSA9PSBmaWxlRmxhZ3MpOwogCiAJc2Eubkxlbmd0aCA9IHNpemVvZihzYSk7 Ci0Jc2EuYkluaGVyaXRIYW5kbGUgPSBUUlVFOwogCXNhLmxwU2VjdXJpdHlEZXNjcmlwdG9y ID0gTlVMTDsKIAorCS8qCisJICogSWYgT19DTE9FWEVDIGlzIHNwZWNpZmllZCwgY3JlYXRl IGEgbm9uLWluaGVyaXRhYmxlIGhhbmRsZS4gIE90aGVyd2lzZSwKKwkgKiBjcmVhdGUgYW4g aW5oZXJpdGFibGUgaGFuZGxlICh0aGUgZGVmYXVsdCBXaW5kb3dzIGJlaGF2aW9yKS4KKwkg KgorCSAqIE5vdGU6IFdlIGNvdWxkIGluc3RlYWQgdXNlIFNldEhhbmRsZUluZm9ybWF0aW9u KCkgYWZ0ZXIgQ3JlYXRlRmlsZSgpIHRvCisJICogY2xlYXIgSEFORExFX0ZMQUdfSU5IRVJJ VCwgYnV0IHNldHRpbmcgYkluaGVyaXRIYW5kbGU9RkFMU0UgaXMgc2ltcGxlcgorCSAqIGFu ZCBhY2hpZXZlcyB0aGUgc2FtZSByZXN1bHQuCisJICovCisJc2EuYkluaGVyaXRIYW5kbGUg PSAoZmlsZUZsYWdzICYgT19DTE9FWEVDKSA/IEZBTFNFIDogVFJVRTsKKwogCXdoaWxlICgo aCA9IENyZWF0ZUZpbGUoZmlsZU5hbWUsCiAJLyogY2Fubm90IHVzZSBPX1JET05MWSwgYXMg aXQgPT0gMCAqLwogCQkJCQkJICAgKGZpbGVGbGFncyAmIE9fUkRXUikgPyAoR0VORVJJQ19X UklURSB8IEdFTkVSSUNfUkVBRCkgOgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9N YWtlZmlsZSBiL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUKaW5kZXggOTAyYTc5NTQxMC4u M2E4ZTI1ZmFmZCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZQorKysg Yi9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlCkBAIC0xOCw2ICsxOCw3IEBAIFNVQkRJUlMg PSBcCiAJCSAgdGVzdF9iaW5hcnloZWFwIFwKIAkJICB0ZXN0X2JpdG1hcHNldCBcCiAJCSAg dGVzdF9ibG9vbWZpbHRlciBcCisJCSAgdGVzdF9jbG9leGVjIFwKIAkJICB0ZXN0X2NvcHlf Y2FsbGJhY2tzIFwKIAkJICB0ZXN0X2N1c3RvbV9ybWdycyBcCiAJCSAgdGVzdF9kZGxfZGVw YXJzZSBcCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkIGIvc3Jj L3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZAppbmRleCAxNGZjNzYxYzRjLi5lOTMwOWVjYjNl IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkCisrKyBiL3NyYy90 ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQKQEAgLTE3LDYgKzE3LDcgQEAgc3ViZGlyKCd0ZXN0 X2FpbycpCiBzdWJkaXIoJ3Rlc3RfYmluYXJ5aGVhcCcpCiBzdWJkaXIoJ3Rlc3RfYml0bWFw c2V0JykKIHN1YmRpcigndGVzdF9ibG9vbWZpbHRlcicpCitzdWJkaXIoJ3Rlc3RfY2xvZXhl YycpCiBzdWJkaXIoJ3Rlc3RfY29weV9jYWxsYmFja3MnKQogc3ViZGlyKCd0ZXN0X2N1c3Rv bV9ybWdycycpCiBzdWJkaXIoJ3Rlc3RfZGRsX2RlcGFyc2UnKQpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X2Nsb2V4ZWMvTWFrZWZpbGUgYi9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfY2xvZXhlYy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwLi43MGQzODU3NWUyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X2Nsb2V4ZWMvTWFrZWZpbGUKQEAgLTAsMCArMSwzMCBAQAorIyBzcmMvdGVzdC9t b2R1bGVzL3Rlc3RfY2xvZXhlYy9NYWtlZmlsZQorCisjIFRoaXMgbW9kdWxlIGlzIGZvciBX aW5kb3dzIG9ubHkKK2lmZXEgKCQoUE9SVE5BTUUpLHdpbjMyKQorCitNT0RVTEVfYmlnID0g dGVzdF9jbG9leGVjCitPQkpTID0gXAorCSQoV0lOMzJSRVMpIFwKKwl0ZXN0X2Nsb2V4ZWMu bworCitQR0ZJTEVERVNDID0gInRlc3RfY2xvZXhlYyAtIHRlc3QgT19DTE9FWEVDIGZsYWcg aGFuZGxpbmciCisKKyMgQnVpbGQgYXMgYSBzdGFuZGFsb25lIHByb2dyYW0sIG5vdCBhIHNo YXJlZCBsaWJyYXJ5CitQUk9HUkFNID0gdGVzdF9jbG9leGVjCitvdmVycmlkZSBDUFBGTEFH UyA6PSAtSSQobGlicHFfc3JjZGlyKSAkKENQUEZMQUdTKQorCitUQVBfVEVTVFMgPSAxCisK K2VuZGlmCisKK2lmZGVmIFVTRV9QR1hTCitQR19DT05GSUcgPSBwZ19jb25maWcKK1BHWFMg Oj0gJChzaGVsbCAkKFBHX0NPTkZJRykgLS1wZ3hzKQoraW5jbHVkZSAkKFBHWFMpCitlbHNl CitzdWJkaXIgPSBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY2xvZXhlYwordG9wX2J1aWxkZGly ID0gLi4vLi4vLi4vLi4KK2luY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5n bG9iYWwKK2luY2x1ZGUgJCh0b3Bfc3JjZGlyKS9jb250cmliL2NvbnRyaWItZ2xvYmFsLm1r CitlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Nsb2V4ZWMvbWVz b24uYnVpbGQgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY2xvZXhlYy9tZXNvbi5idWlsZApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi42M2M4NjU4YjA0Ci0tLSAv ZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Nsb2V4ZWMvbWVzb24uYnVp bGQKQEAgLTAsMCArMSwyNiBAQAorIyBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY2xvZXhlYy9t ZXNvbi5idWlsZAorCisjIFRoaXMgdGVzdCBpcyBXaW5kb3dzLW9ubHkKK2lmIGhvc3Rfc3lz dGVtICE9ICd3aW5kb3dzJworICBzdWJkaXJfZG9uZSgpCitlbmRpZgorCit0ZXN0X2Nsb2V4 ZWNfc291cmNlcyA9IGZpbGVzKCd0ZXN0X2Nsb2V4ZWMuYycpCisKK3Rlc3RfY2xvZXhlYyA9 IGV4ZWN1dGFibGUoJ3Rlc3RfY2xvZXhlYycsCisgIHRlc3RfY2xvZXhlY19zb3VyY2VzLAor ICBkZXBlbmRlbmNpZXM6IFtmcm9udGVuZF9jb2RlXSwKKyAgbGlua193aXRoOiBbcGdwb3J0 WycnXSwgcGdjb21tb25bJyddXSwKKyAga3dhcmdzOiBkZWZhdWx0X2Jpbl9hcmdzLAorKQor Cit0ZXN0cyArPSB7CisgICduYW1lJzogJ3Rlc3RfY2xvZXhlYycsCisgICdzZCc6IG1lc29u LmN1cnJlbnRfc291cmNlX2RpcigpLAorICAnYmQnOiBtZXNvbi5jdXJyZW50X2J1aWxkX2Rp cigpLAorICAndGFwJzogeworICAgICd0ZXN0cyc6IFsKKyAgICAgICd0LzAwMV9jbG9leGVj LnBsJywKKyAgICBdLAorICB9LAorfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X2Nsb2V4ZWMvdC8wMDFfY2xvZXhlYy5wbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9j bG9leGVjL3QvMDAxX2Nsb2V4ZWMucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMC4uNGM1NmViM2E0YgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9jbG9leGVjL3QvMDAxX2Nsb2V4ZWMucGwKQEAgLTAsMCArMSw2MCBAQAorIyBU ZXN0IE9fQ0xPRVhFQyBmbGFnIGhhbmRsaW5nIG9uIFdpbmRvd3MKKyMKKyMgVGhpcyB0ZXN0 IHZlcmlmaWVzIHRoYXQgZmlsZSBoYW5kbGVzIG9wZW5lZCB3aXRoIE9fQ0xPRVhFQyBhcmUg bm90CisjIGluaGVyaXRlZCBieSBjaGlsZCBwcm9jZXNzZXMsIHdoaWxlIGhhbmRsZXMgb3Bl bmVkIHdpdGhvdXQgT19DTE9FWEVDCisjIGFyZSBpbmhlcml0ZWQuCisKK3VzZSBzdHJpY3Q7 Cit1c2Ugd2FybmluZ3MgRkFUQUwgPT4gJ2FsbCc7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6 VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKK3VzZSBJUEM6OlJ1biBxdyhydW4pOwordXNlIEZp bGU6OlNwZWM7Cit1c2UgQ3dkICdhYnNfcGF0aCc7CisKK2lmICghJFBvc3RncmVTUUw6OlRl c3Q6OlV0aWxzOjp3aW5kb3dzX29zKQoreworCXBsYW4gc2tpcF9hbGwgPT4gJ3Rlc3QgaXMg V2luZG93cy1zcGVjaWZpYyc7Cit9CisKK3BsYW4gdGVzdHMgPT4gMTsKKworbXkgJHRlc3Rf cHJvZzsKK2ZvcmVhY2ggbXkgJGRpciAoc3BsaXQoLyRDb25maWc6OkNvbmZpZ3twYXRoX3Nl cH0vLCAkRU5We1BBVEh9KSkKK3sKKwlteSAkY2FuZGlkYXRlID0gRmlsZTo6U3BlYy0+Y2F0 ZmlsZSgkZGlyLCAndGVzdF9jbG9leGVjLmV4ZScpOworCWlmICgtZiAkY2FuZGlkYXRlICYm IC14ICRjYW5kaWRhdGUpCisJeworCQkkdGVzdF9wcm9nID0gJGNhbmRpZGF0ZTsKKwkJbGFz dDsKKwl9Cit9CisKK2lmICghJHRlc3RfcHJvZykKK3sKKwkkdGVzdF9wcm9nID0gJy4vdGVz dF9jbG9leGVjLmV4ZSc7Cit9CisKK2lmICghLWYgJHRlc3RfcHJvZykKK3sKKwlCQUlMX09V VCgidGVzdCBwcm9ncmFtIG5vdCBmb3VuZDogJHRlc3RfcHJvZyIpOworfQorCitub3RlKCJV c2luZyB0ZXN0IHByb2dyYW06ICR0ZXN0X3Byb2ciKTsKKworbXkgKCRzdGRvdXQsICRzdGRl cnIpOworbXkgJHJlc3VsdCA9IHJ1biBbICR0ZXN0X3Byb2cgXSwgJz4nLCBcJHN0ZG91dCwg JzI+JywgXCRzdGRlcnI7CisKK25vdGUoIlRlc3QgcHJvZ3JhbSBvdXRwdXQ6Iik7Citub3Rl KCRzdGRvdXQpIGlmICRzdGRvdXQ7CisKK2lmICgkc3RkZXJyKQoreworCWRpYWcoIlRlc3Qg cHJvZ3JhbSBzdGRlcnI6Iik7CisJZGlhZygkc3RkZXJyKTsKK30KKworb2soJHJlc3VsdCAm JiAkc3Rkb3V0ID1+IC9TVUNDRVNTLipPX0NMT0VYRUMgYmVoYXZpb3IgdmVyaWZpZWQvcywK KyAgICJPX0NMT0VYRUMgcHJldmVudHMgaGFuZGxlIGluaGVyaXRhbmNlIik7CisKK2RvbmVf dGVzdGluZygpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9jbG9leGVjL3Rlc3RfY2xvZXhlYy5jIGIvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2Nsb2V4ZWMvdGVzdF9jbG9leGVjLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMC4uOTZjYmQ5YzgwZQotLS0gL2Rldi9udWxsCisrKyBiL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9jbG9leGVjL3Rlc3RfY2xvZXhlYy5jCkBAIC0wLDAgKzEs MjY3IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiB0ZXN0X2Nsb2V4ZWMuYwor ICoJCVRlc3QgT19DTE9FWEVDIGZsYWcgaGFuZGxpbmcgb24gV2luZG93cworICoKKyAqIFRo aXMgcHJvZ3JhbSB0ZXN0cyB0aGF0OgorICogMS4gRmlsZSBoYW5kbGVzIG9wZW5lZCB3aXRo IE9fQ0xPRVhFQyBhcmUgTk9UIGluaGVyaXRlZCBieSBjaGlsZCBwcm9jZXNzZXMKKyAqIDIu IEZpbGUgaGFuZGxlcyBvcGVuZWQgd2l0aG91dCBPX0NMT0VYRUMgQVJFIGluaGVyaXRlZCBi eSBjaGlsZCBwcm9jZXNzZXMKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYt MjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1 ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworI2lmZGVmIFdJTjMyCisj aW5jbHVkZSA8d2luZG93cy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJjb21tb24vZmlsZV91 dGlscy5oIgorI2luY2x1ZGUgInBvcnQuaCIKKworc3RhdGljIHZvaWQgcnVuX3BhcmVudF90 ZXN0cyhjb25zdCBjaGFyICp0ZXN0ZmlsZTEsIGNvbnN0IGNoYXIgKnRlc3RmaWxlMik7Citz dGF0aWMgdm9pZCBydW5fY2hpbGRfdGVzdHMoY29uc3QgY2hhciAqaGFuZGxlMV9zdHIsIGNv bnN0IGNoYXIgKmhhbmRsZTJfc3RyKTsKK3N0YXRpYyBib29sIHRyeV93cml0ZV90b19oYW5k bGUoSEFORExFIGgsIGNvbnN0IGNoYXIgKmxhYmVsKTsKKworaW50CittYWluKGludCBhcmdj LCBjaGFyICphcmd2W10pCit7CisJY2hhcgkJdGVzdGZpbGUxW01BWFBHUEFUSF07CisJY2hh cgkJdGVzdGZpbGUyW01BWFBHUEFUSF07CisKKwkvKiBXaW5kb3dzLW9ubHkgdGVzdCAqLwor I2lmbmRlZiBXSU4zMgorCWZwcmludGYoc3RkZXJyLCAiVGhpcyB0ZXN0IG9ubHkgcnVucyBv biBXaW5kb3dzXG4iKTsKKwlyZXR1cm4gMDsKKyNlbmRpZgorCisJaWYgKGFyZ2MgPT0gMykK Kwl7CisJCS8qCisJCSAqIENoaWxkIG1vZGU6IHJlY2VpdmVzIHR3byBoYW5kbGUgdmFsdWVz IGFzIGhleCBzdHJpbmdzCisJCSAqIGFuZCBhdHRlbXB0cyB0byB3cml0ZSB0byB0aGVtCisJ CSAqLworCQlydW5fY2hpbGRfdGVzdHMoYXJndlsxXSwgYXJndlsyXSk7CisJCXJldHVybiAw OworCX0KKwllbHNlIGlmIChhcmdjID09IDEpCisJeworCQkvKgorCQkgKiBQYXJlbnQgbW9k ZTogb3BlbnMgZmlsZXMgYW5kIHNwYXducyBjaGlsZAorCQkgKi8KKwkJc25wcmludGYodGVz dGZpbGUxLCBzaXplb2YodGVzdGZpbGUxKSwgInRlc3RfY2xvZXhlY18xXyVkLnRtcCIsIChp bnQpIGdldHBpZCgpKTsKKwkJc25wcmludGYodGVzdGZpbGUyLCBzaXplb2YodGVzdGZpbGUy KSwgInRlc3RfY2xvZXhlY18yXyVkLnRtcCIsIChpbnQpIGdldHBpZCgpKTsKKworCQlydW5f cGFyZW50X3Rlc3RzKHRlc3RmaWxlMSwgdGVzdGZpbGUyKTsKKworCQkvKiBDbGVhbiB1cCB0 ZXN0IGZpbGVzICovCisJCXVubGluayh0ZXN0ZmlsZTEpOworCQl1bmxpbmsodGVzdGZpbGUy KTsKKworCQlyZXR1cm4gMDsKKwl9CisJZWxzZQorCXsKKwkJZnByaW50ZihzdGRlcnIsICJV c2FnZTogJXMgW2hhbmRsZTFfaGV4IGhhbmRsZTJfaGV4XVxuIiwgYXJndlswXSk7CisJCXJl dHVybiAxOworCX0KK30KKworc3RhdGljIHZvaWQKK3J1bl9wYXJlbnRfdGVzdHMoY29uc3Qg Y2hhciAqdGVzdGZpbGUxLCBjb25zdCBjaGFyICp0ZXN0ZmlsZTIpCit7CisjaWZkZWYgV0lO MzIKKwlpbnQJCQlmZDEsCisJCQkJZmQyOworCUhBTkRMRQkJaDEsCisJCQkJaDI7CisJY2hh cgkJY21kbGluZVsxMDI0XTsKKwlTVEFSVFVQSU5GTyBzaTsKKwlQUk9DRVNTX0lORk9STUFU SU9OIHBpOworCURXT1JECQlleGl0X2NvZGU7CisKKwlwcmludGYoIlBhcmVudDogT3Blbmlu ZyB0ZXN0IGZpbGVzLi4uXG4iKTsKKworCS8qCisJICogT3BlbiBmaXJzdCBmaWxlIFdJVEgg T19DTE9FWEVDIC0gc2hvdWxkIE5PVCBiZSBpbmhlcml0ZWQKKwkgKi8KKwlmZDEgPSBvcGVu KHRlc3RmaWxlMSwgT19SRFdSIHwgT19DUkVBVCB8IE9fVFJVTkMgfCBPX0NMT0VYRUMsIDA2 MDApOworCWlmIChmZDEgPCAwKQorCXsKKwkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8g b3BlbiAlczogJXNcbiIsIHRlc3RmaWxlMSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZXhpdCgx KTsKKwl9CisKKwkvKgorCSAqIE9wZW4gc2Vjb25kIGZpbGUgV0lUSE9VVCBPX0NMT0VYRUMg LSBzaG91bGQgYmUgaW5oZXJpdGVkCisJICovCisJZmQyID0gb3Blbih0ZXN0ZmlsZTIsIE9f UkRXUiB8IE9fQ1JFQVQgfCBPX1RSVU5DLCAwNjAwKTsKKwlpZiAoZmQyIDwgMCkKKwl7CisJ CWZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIG9wZW4gJXM6ICVzXG4iLCB0ZXN0ZmlsZTIs IHN0cmVycm9yKGVycm5vKSk7CisJCWNsb3NlKGZkMSk7CisJCWV4aXQoMSk7CisJfQorCisJ LyogR2V0IFdpbmRvd3MgSEFORExFcyBmcm9tIGZpbGUgZGVzY3JpcHRvcnMgKi8KKwloMSA9 IChIQU5ETEUpIF9nZXRfb3NmaGFuZGxlKGZkMSk7CisJaDIgPSAoSEFORExFKSBfZ2V0X29z ZmhhbmRsZShmZDIpOworCisJaWYgKGgxID09IElOVkFMSURfSEFORExFX1ZBTFVFIHx8IGgy ID09IElOVkFMSURfSEFORExFX1ZBTFVFKQorCXsKKwkJZnByaW50ZihzdGRlcnIsICJGYWls ZWQgdG8gZ2V0IE9TIGhhbmRsZXNcbiIpOworCQljbG9zZShmZDEpOworCQljbG9zZShmZDIp OworCQlleGl0KDEpOworCX0KKworCXByaW50ZigiUGFyZW50OiBmZDE9JWQgKE9fQ0xPRVhF QykgLT4gSEFORExFPSVwXG4iLCBmZDEsIGgxKTsKKwlwcmludGYoIlBhcmVudDogZmQyPSVk IChubyBPX0NMT0VYRUMpIC0+IEhBTkRMRT0lcFxuIiwgZmQyLCBoMik7CisKKwkvKgorCSAq IFNwYXduIGNoaWxkIHByb2Nlc3Mgd2l0aCBiSW5oZXJpdEhhbmRsZXM9VFJVRSwgcGFzc2lu ZyBoYW5kbGUgdmFsdWVzCisJICogYXMgaGV4IHN0cmluZ3MKKwkgKi8KKwlzbnByaW50Zihj bWRsaW5lLCBzaXplb2YoY21kbGluZSksICJcIiVzXCIgJXAgJXAiLAorCQkJIEdldENvbW1h bmRMaW5lKCksIGgxLCBoMik7CisKKwkvKgorCSAqIEZpbmQgdGhlIGFjdHVhbCBleGVjdXRh YmxlIHBhdGggYnkgcmVtb3ZpbmcgYW55IGFyZ3VtZW50cyBmcm9tCisJICogR2V0Q29tbWFu ZExpbmUoKQorCSAqLworCXsKKwkJY2hhcgkJZXhlX3BhdGhbTUFYX1BBVEhdOworCQljaGFy CSAgICpzcGFjZV9wb3M7CisKKwkJR2V0TW9kdWxlRmlsZU5hbWUoTlVMTCwgZXhlX3BhdGgs IHNpemVvZihleGVfcGF0aCkpOworCQlzbnByaW50ZihjbWRsaW5lLCBzaXplb2YoY21kbGlu ZSksICJcIiVzXCIgJXAgJXAiLAorCQkJCSBleGVfcGF0aCwgaDEsIGgyKTsKKwl9CisKKwlt ZW1zZXQoJnNpLCAwLCBzaXplb2Yoc2kpKTsKKwlzaS5jYiA9IHNpemVvZihzaSk7CisJbWVt c2V0KCZwaSwgMCwgc2l6ZW9mKHBpKSk7CisKKwlwcmludGYoIlBhcmVudDogU3Bhd25pbmcg Y2hpbGQgcHJvY2Vzcy4uLlxuIik7CisJcHJpbnRmKCJQYXJlbnQ6IENvbW1hbmQgbGluZTog JXNcbiIsIGNtZGxpbmUpOworCisJaWYgKCFDcmVhdGVQcm9jZXNzKE5VTEwsCQkvKiBhcHBs aWNhdGlvbiBuYW1lICovCisJCQkJCSAgIGNtZGxpbmUsCQkvKiBjb21tYW5kIGxpbmUgKi8K KwkJCQkJICAgTlVMTCwJCS8qIHByb2Nlc3Mgc2VjdXJpdHkgYXR0cmlidXRlcyAqLworCQkJ CQkgICBOVUxMLAkJLyogdGhyZWFkIHNlY3VyaXR5IGF0dHJpYnV0ZXMgKi8KKwkJCQkJICAg VFJVRSwJCS8qIGJJbmhlcml0SGFuZGxlcyAtIENSSVRJQ0FMISAqLworCQkJCQkgICAwLAkJ CS8qIGNyZWF0aW9uIGZsYWdzICovCisJCQkJCSAgIE5VTEwsCQkvKiBlbnZpcm9ubWVudCAq LworCQkJCQkgICBOVUxMLAkJLyogY3VycmVudCBkaXJlY3RvcnkgKi8KKwkJCQkJICAgJnNp LAkJCS8qIHN0YXJ0dXAgaW5mbyAqLworCQkJCQkgICAmcGkpKQkJLyogcHJvY2VzcyBpbmZv cm1hdGlvbiAqLworCXsKKwkJZnByaW50ZihzdGRlcnIsICJDcmVhdGVQcm9jZXNzIGZhaWxl ZDogJWx1XG4iLCBHZXRMYXN0RXJyb3IoKSk7CisJCWNsb3NlKGZkMSk7CisJCWNsb3NlKGZk Mik7CisJCWV4aXQoMSk7CisJfQorCisJcHJpbnRmKCJQYXJlbnQ6IFdhaXRpbmcgZm9yIGNo aWxkIHByb2Nlc3MuLi5cbiIpOworCisJLyogV2FpdCBmb3IgY2hpbGQgdG8gY29tcGxldGUg Ki8KKwlXYWl0Rm9yU2luZ2xlT2JqZWN0KHBpLmhQcm9jZXNzLCBJTkZJTklURSk7CisJR2V0 RXhpdENvZGVQcm9jZXNzKHBpLmhQcm9jZXNzLCAmZXhpdF9jb2RlKTsKKworCUNsb3NlSGFu ZGxlKHBpLmhQcm9jZXNzKTsKKwlDbG9zZUhhbmRsZShwaS5oVGhyZWFkKTsKKworCWNsb3Nl KGZkMSk7CisJY2xvc2UoZmQyKTsKKworCXByaW50ZigiUGFyZW50OiBDaGlsZCBleGl0IGNv ZGU6ICVsdVxuIiwgZXhpdF9jb2RlKTsKKworCWlmIChleGl0X2NvZGUgPT0gMCkKKwkJcHJp bnRmKCJQYXJlbnQ6IFNVQ0NFU1MgLSBPX0NMT0VYRUMgYmVoYXZpb3IgdmVyaWZpZWRcbiIp OworCWVsc2UKKwl7CisJCXByaW50ZigiUGFyZW50OiBGQUlMVVJFIC0gT19DTE9FWEVDIG5v dCB3b3JraW5nIGNvcnJlY3RseVxuIik7CisJCWV4aXQoMSk7CisJfQorI2VuZGlmCit9CisK K3N0YXRpYyB2b2lkCitydW5fY2hpbGRfdGVzdHMoY29uc3QgY2hhciAqaGFuZGxlMV9zdHIs IGNvbnN0IGNoYXIgKmhhbmRsZTJfc3RyKQoreworI2lmZGVmIFdJTjMyCisJSEFORExFCQlo MSwKKwkJCQloMjsKKwlib29sCQloMV93b3JrZWQsCisJCQkJaDJfd29ya2VkOworCisJLyog UGFyc2UgaGFuZGxlIHZhbHVlcyBmcm9tIGhleCBzdHJpbmdzICovCisJaWYgKHNzY2FuZiho YW5kbGUxX3N0ciwgIiVwIiwgJmgxKSAhPSAxIHx8CisJCXNzY2FuZihoYW5kbGUyX3N0ciwg IiVwIiwgJmgyKSAhPSAxKQorCXsKKwkJZnByaW50ZihzdGRlcnIsICJDaGlsZDogRmFpbGVk IHRvIHBhcnNlIGhhbmRsZSB2YWx1ZXNcbiIpOworCQlleGl0KDEpOworCX0KKworCXByaW50 ZigiQ2hpbGQ6IFJlY2VpdmVkIEhBTkRMRTE9JXAgKHNob3VsZCBmYWlsIC0gT19DTE9FWEVD KVxuIiwgaDEpOworCXByaW50ZigiQ2hpbGQ6IFJlY2VpdmVkIEhBTkRMRTI9JXAgKHNob3Vs ZCB3b3JrIC0gbm8gT19DTE9FWEVDKVxuIiwgaDIpOworCisJLyoKKwkgKiBUcnkgdG8gd3Jp dGUgdG8gYm90aCBoYW5kbGVzCisJICovCisJaDFfd29ya2VkID0gdHJ5X3dyaXRlX3RvX2hh bmRsZShoMSwgIkhBTkRMRTEiKTsKKwloMl93b3JrZWQgPSB0cnlfd3JpdGVfdG9faGFuZGxl KGgyLCAiSEFORExFMiIpOworCisJcHJpbnRmKCJDaGlsZDogSEFORExFMSAoT19DTE9FWEVD KTogJXNcbiIsCisJCSAgIGgxX3dvcmtlZCA/ICJBQ0NFU1NJQkxFIChCQUQhKSIgOiAiTk9U IEFDQ0VTU0lCTEUgKEdPT0QhKSIpOworCXByaW50ZigiQ2hpbGQ6IEhBTkRMRTIgKG5vIE9f Q0xPRVhFQyk6ICVzXG4iLAorCQkgICBoMl93b3JrZWQgPyAiQUNDRVNTSUJMRSAoR09PRCEp IiA6ICJOT1QgQUNDRVNTSUJMRSAoQkFEISkiKTsKKworCS8qCisJICogRm9yIE9fQ0xPRVhF QyB0byB3b3JrIGNvcnJlY3RseToKKwkgKiAtIGgxIHNob3VsZCBOT1QgYmUgYWNjZXNzaWJs ZSAoaDFfd29ya2VkID09IGZhbHNlKQorCSAqIC0gaDIgU0hPVUxEIGJlIGFjY2Vzc2libGUg KGgyX3dvcmtlZCA9PSB0cnVlKQorCSAqLworCWlmICghaDFfd29ya2VkICYmIGgyX3dvcmtl ZCkKKwl7CisJCXByaW50ZigiQ2hpbGQ6IFRlc3QgUEFTU0VEIC0gT19DTE9FWEVDIHdvcmtp bmcgY29ycmVjdGx5XG4iKTsKKwkJZXhpdCgwKTsKKwl9CisJZWxzZQorCXsKKwkJcHJpbnRm KCJDaGlsZDogVGVzdCBGQUlMRUQgLSBPX0NMT0VYRUMgbm90IHdvcmtpbmcgY29ycmVjdGx5 XG4iKTsKKwkJZXhpdCgxKTsKKwl9CisjZW5kaWYKK30KKworc3RhdGljIGJvb2wKK3RyeV93 cml0ZV90b19oYW5kbGUoSEFORExFIGgsIGNvbnN0IGNoYXIgKmxhYmVsKQoreworI2lmZGVm IFdJTjMyCisJY29uc3QgY2hhciAqdGVzdF9kYXRhID0gInRlc3RcbiI7CisJRFdPUkQJCWJ5 dGVzX3dyaXR0ZW47CisJQk9PTAkJcmVzdWx0OworCisJcmVzdWx0ID0gV3JpdGVGaWxlKGgs IHRlc3RfZGF0YSwgc3RybGVuKHRlc3RfZGF0YSksICZieXRlc193cml0dGVuLCBOVUxMKTsK KworCWlmIChyZXN1bHQgJiYgYnl0ZXNfd3JpdHRlbiA9PSBzdHJsZW4odGVzdF9kYXRhKSkK Kwl7CisJCXByaW50ZigiQ2hpbGQ6IFN1Y2Nlc3NmdWxseSB3cm90ZSB0byAlc1xuIiwgbGFi ZWwpOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJZWxzZQorCXsKKwkJcHJpbnRmKCJDaGlsZDog RmFpbGVkIHRvIHdyaXRlIHRvICVzIChlcnJvciAlbHUpXG4iLAorCQkJICAgbGFiZWwsIEdl dExhc3RFcnJvcigpKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKyNlbHNlCisJcmV0dXJuIGZh bHNlOworI2VuZGlmCit9Ci0tIAoyLjQ2LjAud2luZG93cy4xCgo= --------------YUSeVzb9d5E0FeRQMeKdB9RR--