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 1qfzfq-00E1Nt-Nx for pgsql-hackers@arkaria.postgresql.org; Tue, 12 Sep 2023 09:27:11 +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 1qfzfp-007HKJ-Ix for pgsql-hackers@arkaria.postgresql.org; Tue, 12 Sep 2023 09:27: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 1qfzFB-006fl8-NY for pgsql-hackers@lists.postgresql.org; Tue, 12 Sep 2023 08:59:37 +0000 Received: from mout.gmx.net ([212.227.17.20]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qfzF6-004cM2-Tt for pgsql-hackers@postgresql.org; Tue, 12 Sep 2023 08:59:36 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.de; s=s31663417; t=1694509171; x=1695113971; i=stepan.rutz@gmx.de; bh=3k/8sB52ynsI9Qrv0bHJ+o/jDXvfaP0nSBz0bPm8IPU=; h=X-UI-Sender-Class:Date:To:From:Subject; b=dvbnl49x5lzPlPInD10TKedj4vUjvSRX0pL4E2athS/vtiebTz92/7tmonklsuDDWbuKLOa 98R/xRPXvVylwhj7p2u9T2uoLi52ItAUDUFWh4E3pE343bIMJxjrfseZTfAFwcWcaeT5QanSW rSUq6mYqBTF8FpM8QsCq6lbmte/gXbO3kAMN+JzhaILfhIx2N6eWdYRZFU04+bbNXNscOkbTO p7ZomEWiaZ/UdtpzL64VBZ2AaPJIBU7L1jHwihBtdMsDv2yshGFObX5CUVnIQuCkHlD0EEcH8 SYhs0X8rFx5YZok7HzE66Q17iJMX1Onxg030/URAW9tDmtGOx75Q== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from [192.168.178.110] ([94.31.82.126]) by mail.gmx.net (mrgmx104 [212.227.17.168]) with ESMTPSA (Nemesis) id 1N1Obb-1rim4G27zP-012pZi for ; Tue, 12 Sep 2023 10:59:31 +0200 Content-Type: multipart/mixed; boundary="------------UOISwIoRIliwi2pIC62x8AL5" Message-ID: Date: Tue, 12 Sep 2023 10:59:30 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.15.0 Content-Language: en-US To: pgsql-hackers@postgresql.org From: stepan rutz Subject: Detoasting optionally to make Explain-Analyze less misleading X-Provags-ID: V03:K1:9bbZ1K2CkNKXMKBAokoGrmIYxb5VS3h/0UX/CASNW4f4Uv9jfw8 FDXren4eYFiF/qa4pnL3M0IFtkkNMnjCaRj/2sx5Ck6lhRfRwRCsqBAf6h1iE/iU5MjoCiB EmfB1/+6AuB81NTigUACsvQGwYbs83foLGpjcPodD/2kXRY4NsHuIGB7MbquuP4zj1afTaK TjerbCvcNIHa37M3r5R2Q== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:DQfm3rnDeBU=;ilehLEUsP31MYXucFS3uDVzRpOq IA3KTSWWUfD90qFqKrVa/WQa4U8h+EuaVVgIls9MxSPC+X0NLKzHOjamqr0X/fCdSweYEYenk QRg8uVvYETwtfhdE5TOaqEMQleyrtShRBUlnLHF9F5FqpLpcj7cmnxyvn446SFHleav7XBEof R9aKVf25ZbAEylegpsP77/8BNESG0tJPt8QkfJfmdIWbmjMRNBTYR3vGsKHd4K60bcODsIg44 uQFUgTXp4Q2c1A0GrjY8jpaCuDvF8HuGbxbJGLysU9tOnssbv5s9nAPGmbj3bURdf3FBPVZVI Q+52gqH+yB82XTMlqGZfRGCVY7GsBsmnmsKCu33JCGpLMf6GeE4Skaz9jfp1M4Y12+BYORB+T uBbsGKSiKWNXK9JU/RsNhpavXdoUNo/eaIzgVVL6weBN/h9STxA6NEAbq2eBHuQ/hQ7PN7Eys SaGMYLbBknbuwGwPVGrg2Khl/oEKIs/C1RxOYt/VYuI+R5Yp+8jdpl2DSHIJkzqdFlJdViBEP dNOttY5ej97C3om5ZUWQNWusLTv/xI8cZk/+7P86L7g3zW2d8fQKD4gzeDclNlZPXSE2Fyxot b4aBeKz2K1/6Bh0SH6fKLMnrtCrFjH4SyRKNX13WAZxRSTTIn0hqaTgXSm8M/BIAQ5unMtiPl JCXaWYMUES0JIq5Ho//WO3m9zP9dDTdHRjo/lIntU+lMUopefY9cxKVkOubnpV0G6i7CBhHKF mTajj5CNLJ4yD0RpKF8Qwt5Z8niQ2AK6pxAuMbzNXZbvqcXkdjSWRVPwSTxRGiz8thxOD2SIR V9sIb/aFLH6xIo+HDdHmURh7q/kpXyh9rujcCK4XydwYb52OLtNf+RbpY+cNZzynJPBPPYE0w sLGJCij8HPptJ8w14chethMNFJJL08LnYL3DQF9EhXUvuZGtEPJvz6410sSC+nF84YX/gUWDi d3FuG2EXEf5zlprXryx2CbHjySg= 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. --------------UOISwIoRIliwi2pIC62x8AL5 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: quoted-printable Hi, I have fallen into this trap and others have too. If you run EXPLAIN(ANALYZE) no de-toasting happens. This makes query-runtimes differ a lot. The bigger point is that the average user expects more from EXPLAIN(ANALYZE) than what it provides. This can be suprising. You can force detoasting during explain with explicit calls to length(), but that is tedious. Those of us who are forced to work using java stacks, orms and still store mostly documents fall into this trap sooner or later. I have already received some good feedback on this one, so this is an issue that bother quite a few people out there. Attached is a patch for addressing the issue in form of adding another parameter to explain. I don't know if that is a good idea, but I got some feedback that a solution to this problem would be appreciated by some people out there. It would also be nice to reflect the detoasting in the "buffers" option of explain as well. The change for detoasting is only a few lines though. So the idea was to allow this EXPLAIN (ANALYZE, DETOAST) SELECT * FROM sometable; and perform the detoasting step additionally during the explain. This just gives a more realistic runtime and by playing around with the parameter and comparing the execution-times of the query one even gets an impression about the detoasting cost involved in a query. Since the parameter is purely optional, it would not affect any existing measures. It is not uncommon that the runtime of explain-analyze is way unrealistic in the real world, where people use PostgreSQL to store larger and larger documents inside tables and not using Large-Objects. Here is a video of the effect (in an exagerated form): https://www.stepanrutz.com/short_detoast_subtitles.mp4 It would be great to get some feedback on the subject and how to address this, maybe in totally different ways. Greetings from cologne, Stepan Stepan Rutz - IT Consultant, Cologne Germany, stepan.rutz AT gmx.de --------------UOISwIoRIliwi2pIC62x8AL5 Content-Type: text/x-patch; charset=UTF-8; name="0001_explain_analyze_and_detoast.patch" Content-Disposition: attachment; filename="0001_explain_analyze_and_detoast.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwppbmRleCA4NTcwYjE0ZjYyLi41MDg1OWU2YTFlIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKKysrIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCkBAIC00Nyw2ICs0Nyw4IEBAIEV4cGxhaW5PbmVR dWVyeV9ob29rX3R5cGUgRXhwbGFpbk9uZVF1ZXJ5X2hvb2sgPSBOVUxMOwogLyogSG9vayBm b3IgcGx1Z2lucyB0byBnZXQgY29udHJvbCBpbiBleHBsYWluX2dldF9pbmRleF9uYW1lKCkg Ki8KIGV4cGxhaW5fZ2V0X2luZGV4X25hbWVfaG9va190eXBlIGV4cGxhaW5fZ2V0X2luZGV4 X25hbWVfaG9vayA9IE5VTEw7CiAKKy8qIEZvcndhcmQgZGVjbCBmb3IgZGV0b2FzdGluZyBh bmFseXplICovCitzdGF0aWMgY29uc3QgRGVzdFJlY2VpdmVyIGRldG9hc3RBbmFseXplRFI7 CiAKIC8qIE9SLWFibGUgZmxhZ3MgZm9yIEV4cGxhaW5YTUxUYWcoKSAqLwogI2RlZmluZSBY X09QRU5JTkcgMApAQCAtMTkyLDYgKzE5NCw4IEBAIEV4cGxhaW5RdWVyeShQYXJzZVN0YXRl ICpwc3RhdGUsIEV4cGxhaW5TdG10ICpzdG10LAogCQkJZXMtPnNldHRpbmdzID0gZGVmR2V0 Qm9vbGVhbihvcHQpOwogCQllbHNlIGlmIChzdHJjbXAob3B0LT5kZWZuYW1lLCAiZ2VuZXJp Y19wbGFuIikgPT0gMCkKIAkJCWVzLT5nZW5lcmljID0gZGVmR2V0Qm9vbGVhbihvcHQpOwor CQllbHNlIGlmIChzdHJjbXAob3B0LT5kZWZuYW1lLCAiZGV0b2FzdCIpID09IDApCisJCQll cy0+ZGV0b2FzdCA9IGRlZkdldEJvb2xlYW4ob3B0KTsKIAkJZWxzZSBpZiAoc3RyY21wKG9w dC0+ZGVmbmFtZSwgInRpbWluZyIpID09IDApCiAJCXsKIAkJCXRpbWluZ19zZXQgPSB0cnVl OwpAQCAtMjQ0LDYgKzI0OCwxMiBAQCBFeHBsYWluUXVlcnkoUGFyc2VTdGF0ZSAqcHN0YXRl LCBFeHBsYWluU3RtdCAqc3RtdCwKIAkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFS QU1FVEVSX1ZBTFVFKSwKIAkJCQkgZXJybXNnKCJFWFBMQUlOIG9wdGlvbiBUSU1JTkcgcmVx dWlyZXMgQU5BTFlaRSIpKSk7CiAKKwkvKiBjaGVjayB0aGF0IGRldG9hc3QgaXMgdXNlZCB3 aXRoIEVYUExBSU4gQU5BTFlaRSAqLworCWlmIChlcy0+ZGV0b2FzdCAmJiAhZXMtPmFuYWx5 emUpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BB UkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygiRVhQTEFJTiBvcHRpb24gREVUT0FTVCBy ZXF1aXJlcyBBTkFMWVpFIikpKTsKKwogCS8qIGNoZWNrIHRoYXQgR0VORVJJQ19QTEFOIGlz IG5vdCB1c2VkIHdpdGggRVhQTEFJTiBBTkFMWVpFICovCiAJaWYgKGVzLT5nZW5lcmljICYm IGVzLT5hbmFseXplKQogCQllcmVwb3J0KEVSUk9SLApAQCAtNTY1LDkgKzU3NSwxMyBAQCBF eHBsYWluT25lUGxhbihQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsIEludG9DbGF1c2UgKmlu dG8sIEV4cGxhaW5TdGF0ZSAqZXMsCiAJLyoKIAkgKiBOb3JtYWxseSB3ZSBkaXNjYXJkIHRo ZSBxdWVyeSdzIG91dHB1dCwgYnV0IGlmIGV4cGxhaW5pbmcgQ1JFQVRFIFRBQkxFCiAJICog QVMsIHdlJ2QgYmV0dGVyIHVzZSB0aGUgYXBwcm9wcmlhdGUgdHVwbGUgcmVjZWl2ZXIuCisJ ICogQWxzbyBpZiB3ZSBjaG9vc2UgdG8gZGV0b2FzdCBkdXJpbmcgZXhwbGFpbiwgd2UgbmVl ZCB0byBzZW5kIHRoZSAKKwkgKiB0dXBsZXMgdG8gYSByZWNlaXZlciB0aGF0IHBlcmZvcm1z IHRoZSBkZXRvYXN0aW5nCiAJICovCiAJaWYgKGludG8pCiAJCWRlc3QgPSBDcmVhdGVJbnRv UmVsRGVzdFJlY2VpdmVyKGludG8pOworCWVsc2UgaWYgKGVzLT5hbmFseXplICYmIGVzLT5k ZXRvYXN0KQorCQlkZXN0ID0gJmRldG9hc3RBbmFseXplRFI7CiAJZWxzZQogCQlkZXN0ID0g Tm9uZV9SZWNlaXZlcjsKIApAQCAtNTA1MiwzICs1MDY2LDk4IEBAIGVzY2FwZV95YW1sKFN0 cmluZ0luZm8gYnVmLCBjb25zdCBjaGFyICpzdHIpCiB7CiAJZXNjYXBlX2pzb24oYnVmLCBz dHIpOwogfQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAqCQlkZXRvYXN0aW5nIERlc3RS ZWNlaXZlciBmdW5jdGlvbnMKKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLworLyogdGhlIGlk ZWEgaXMgdGhhdCBydW5uaW5nICBFWFBMQUlOIChBTkFMWVpFKSAgc29tZXRpbWVzIGdpdmVz IHJlc3VsdHMgdGhhdCAKKyAqIGFyZSB3YXkgdW5yZWFsaXN0aWMsIHNpbmNlIGR1cmluZyBl eHBsYWluIHRoZXJlIGlzIG5vIGRldG9hc3Rpbmcgb2YgCisgKiB2YWx1ZXMuIFRoYXQgbWVh bnMgeW91IGdldCBubyBpZGVhIHdoYXQgeW91ciBhY3R1YWwgcXVlcnkgdGltZSBpcyBnb2lu ZworICogdG8gYmUsIG5vciB3aGF0IHRoZSBhY3R1YWwgb3ZlcmhlYWQgb2YgZGV0b2FzdGlu ZyBpcy4KKyAqIAorICogaWYgeW91IHJ1biBFWFBMQUlOIChBTkFZTFpFLCBERVRPQVNUKSB0 aGVuIHlvdSBnZXQgYW4gaW1wcmVzc2lvbiBvZgorICogd2hhdCBpcyBhY3R1YWxseSBoYXBw ZW5pbmcgd2hlbiB5b3UgdXNlIHBvc3RncmVzcWwgYXMgYSBkb2N1bWVudC1kYXRhYmFzZQor ICogb3IgaGF2ZSBsYXJnZSB2YWx1ZXMgZm9yIHNvbWUgb3RoZXIgcmVhc29uLgorICovCisK Ky8qIHRoaXMgbWV0aG9kIHJlY2VpdmVzIHRoZSB0dXBsZXMvcmVjb3JkcyBkdXJpbmcgZXhw bGFpbiAoYW5hbHl6ZSwgZGV0b2FzdCkKKyAqIGFuZCBkZXRvYXN0cyB0aGVtLgorICogdGhp cyBtZXRob2QgaXMgb3RoZXJ3aXNlIG5vdCBjYWxsZWQgYW5kIGl0cyBwdXJwb3NlIGlzIHRv IGRldG9hc3QgdG8KKyAqIG1ha2UgYW5hbHl6ZSBvcHRpb25hbGx5IG1vcmUgcmVhbGlzdGlj CisgKi8KK3N0YXRpYyBib29sCitkZXRvYXN0QW5hbHl6ZVJlY2VpdmUoVHVwbGVUYWJsZVNs b3QgKnNsb3QsIERlc3RSZWNlaXZlciAqc2VsZikKK3sKKwlNZW1vcnlDb250ZXh0IGN4dDsK KwlNZW1vcnlDb250ZXh0IG9sZGN4dDsKKwlpbnQgaTsKKwlib29sIHNob3VsZEZyZWUgPSB0 cnVlOworCVR1cGxlRGVzYyB0dXBkZXNjID0gc2xvdC0+dHRzX3R1cGxlRGVzY3JpcHRvcjsK KwlIZWFwVHVwbGUgdHVwbGUgPSBFeGVjRmV0Y2hTbG90SGVhcFR1cGxlKHNsb3QsIHRydWUs ICZzaG91bGRGcmVlKTsKKwl1aW50MTYgdF9pbmZvbWFzayA9IHR1cGxlLT50X2RhdGEtPnRf aW5mb21hc2s7CisJdWludDE2IHRfaW5mb21hc2syID0gdHVwbGUtPnRfZGF0YS0+dF9pbmZv bWFzazI7CisJYml0czggKnRfYml0cyA9IHR1cGxlLT50X2RhdGEtPnRfYml0czsKKworCS8q IG1lbW9yeSBjb250ZXh0IGZvciBvdXIgd29yayAqLworCWN4dCA9IEFsbG9jU2V0Q29udGV4 dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwgIkRldG9hc3RUdXBsZVJlY2VpdmUiLAor CQlBTExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsKKwlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dp dGNoVG8oY3h0KTsKKworCS8qIGZpbGwgYWxsIG9mIHRoZSBzbG90J3MgYXR0cmlidXRlcywg d2UgY2FuIG5vdyB1c2Ugc2xvdC0+dHRzX3ZhbHVlcyAqLworCXNsb3RfZ2V0YWxsYXR0cnMo c2xvdCk7CisKKwkvKiBpdGVyYXRlIG92ZXIgYWxsIGF0dHJpYnV0ZXMgb2YgdGhlIHR1cGxl IGFuZCBwb3RlbnRpYWxseSBkZXRvYXN0IHRoZW0gKi8KKwlmb3IgKGkgPSAwOyBpIDwgdHVw ZGVzYy0+bmF0dHM7IGkrKykKKwl7CisJCUZvcm1fcGdfYXR0cmlidXRlIGF0dHI7CisJCWJv b2wgaXNfbnVsbDsKKwkJY2hhciBzdG9yYWdlOworCisJCWF0dHIgPSBUdXBsZURlc2NBdHRy KHR1cGRlc2MsIGkpOworCQlzdG9yYWdlID0gYXR0ci0+YXR0c3RvcmFnZTsKKwkJaWYgKGkg Pj0gKHRfaW5mb21hc2syICYgSEVBUF9OQVRUU19NQVNLKSkKKwkJCWlzX251bGwgPSB0cnVl OworCQllbHNlCisJCQlpc19udWxsID0gKHRfaW5mb21hc2sgJiBIRUFQX0hBU05VTEwpICYm IGF0dF9pc251bGwoaSwgdF9iaXRzKTsKKwkJaWYgKCFpc19udWxsICYmIChzdG9yYWdlID09 ICdlJyB8fCBzdG9yYWdlID09ICd4JyB8fCBzdG9yYWdlID09ICdtJykpIHsKKwkJCURhdHVt IGRhdHVtID0gc2xvdC0+dHRzX3ZhbHVlc1tpXTsKKwkJCS8qIGhlcmUgc2ltcGxlIGRldG9h c3QgdGhlIGF0dHJpYnV0ZSdzIHZhbHVlLCBtYWtpbmcKKwkJCSAqIHRoZSBleHBsYWluIChh bmFseXplKSBzbG93ZXIsIGJ1dCBhbHNvIG1vcmUgcmVhbGlzdGljCisJCQkgKi8KKwkJCXBn X2RldG9hc3RfZGF0dW1fcGFja2VkKGRhdHVtKTsKKwkJfQorCX0KKwlpZiAoc2hvdWxkRnJl ZSkKKwkJcGZyZWUodHVwbGUpOworCisJLyogZnJlZSBvdXIgbWVtb3J5Y29udGV4dCBhbmQg cmV0dXJuIHRvIHByZXZpb3VzICovCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7 CisJTWVtb3J5Q29udGV4dERlbGV0ZShjeHQpOworCXJldHVybiB0cnVlOworfQorCitzdGF0 aWMgdm9pZAorZGV0b2FzdEFuYWx5emVTdGFydHVwKERlc3RSZWNlaXZlciAqc2VsZiwgaW50 IG9wZXJhdGlvbiwgVHVwbGVEZXNjIHR5cGVpbmZvKQoreworCS8qIG5vdGhpbmcgcmVxdWly ZWQgKi8KK30KKworc3RhdGljIHZvaWQKK2RldG9hc3RBbmFseXplQ2xlYW51cChEZXN0UmVj ZWl2ZXIgKnNlbGYpCit7CisJLyogbm90aGluZyByZXF1aXJlZCAqLworfQorCitzdGF0aWMg dm9pZAorZGV0b2FzdEFuYWx5emVEZXN0cm95KERlc3RSZWNlaXZlciAqc2VsZikKK3sKKwkv KiBub3RoaW5nIHJlcXVpcmVkICovCit9CisKKworc3RhdGljIGNvbnN0IERlc3RSZWNlaXZl ciBkZXRvYXN0QW5hbHl6ZURSID0geworCWRldG9hc3RBbmFseXplUmVjZWl2ZSwgZGV0b2Fz dEFuYWx5emVTdGFydHVwLCBkZXRvYXN0QW5hbHl6ZUNsZWFudXAsIGRldG9hc3RBbmFseXpl RGVzdHJveSwKKwlEZXN0Tm9uZQorfTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1h bmRzL2V4cGxhaW4uaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW4uaAppbmRleCAz ZDNlNjMyYTBjLi4wMTFkZmZiODkwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5k cy9leHBsYWluLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXhwbGFpbi5oCkBAIC00 Nyw2ICs0Nyw4IEBAIHR5cGVkZWYgc3RydWN0IEV4cGxhaW5TdGF0ZQogCWJvb2wJCXN1bW1h cnk7CQkvKiBwcmludCB0b3RhbCBwbGFubmluZyBhbmQgZXhlY3V0aW9uIHRpbWluZyAqLwog CWJvb2wJCXNldHRpbmdzOwkJLyogcHJpbnQgbW9kaWZpZWQgc2V0dGluZ3MgKi8KIAlib29s CQlnZW5lcmljOwkJLyogZ2VuZXJhdGUgYSBnZW5lcmljIHBsYW4gKi8KKwlib29sCQlkZXRv YXN0OyAgICAgICAgLyogZGV0b2FzdCBhbGwgdG9hc3RlZCB2YWx1ZXMsIG9ubHkgYXBwbGlj YWJsZQorCQkJCQkJCQkgICB3aGVuICJhbmFseXplIiBpcyBhY3RpdmUuICovCiAJRXhwbGFp bkZvcm1hdCBmb3JtYXQ7CQkvKiBvdXRwdXQgZm9ybWF0ICovCiAJLyogc3RhdGUgZm9yIG91 dHB1dCBmb3JtYXR0aW5nIC0tLSBub3QgcmVzZXQgZm9yIGVhY2ggbmV3IHBsYW4gdHJlZSAq LwogCWludAkJCWluZGVudDsJCQkvKiBjdXJyZW50IGluZGVudGF0aW9uIGxldmVsICovCmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2V4cGxhaW4ub3V0IGIvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9leHBsYWluLm91dAppbmRleCAxYWNhNzc0OTFiLi5l ZWY2OGQxZWNhIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2V4cGxh aW4ub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZXhwbGFpbi5vdXQKQEAg LTU1OSwzICs1NTksMjMgQEAgc2VsZWN0IGV4cGxhaW5fZmlsdGVyKCdleHBsYWluICh2ZXJi b3NlKSBzZWxlY3QgKiBmcm9tIGludDhfdGJsIGk4Jyk7CiAgUXVlcnkgSWRlbnRpZmllcjog TgogKDMgcm93cykKIAorLS0gVGVzdCBkZXRvYXN0IGlzIGFjY2VwdGVkIGFzIGEgcGFyYW1l dGVyIHRvIGV4cGxhaW4KKy0tIHNlZW1zIGhhcmQgdG8gdGVzdCB0aGUgZXhwZWN0ZWQgbG9u Z2VyIHJ1bnRpbWUgb2YgZGV0b2FzdGluZworLS0gc2luY2Ugb25lIG5lZWRzIHRvIHNldHVw IGVub3VnaCBkYXRhIHRvIG1ha2Ugc3VjaCBhIHRlc3Qgc3RhYmxlCistLSBhbHNvIHRpbWlu ZyBhcmUgZmlsdGVyZWQgb3V0IGJ5IGV4cGxhaW5fZmlsdGVyIGFueXdheQorY3JlYXRlIHRh YmxlIHRlc3RfZGV0b2FzdChpZCBiaWdzZXJpYWwsIHZhbCB0ZXh0KTsKK3NlbGVjdCBleHBs YWluX2ZpbHRlcignZXhwbGFpbiAoYW5hbHl6ZSxkZXRvYXN0KSBzZWxlY3QgKiBmcm9tIHRl c3RfZGV0b2FzdCcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBleHBsYWluX2ZpbHRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEg U2NhbiBvbiB0ZXN0X2RldG9hc3QgIChjb3N0PU4uTi4uTi5OIHJvd3M9TiB3aWR0aD1OKSAo YWN0dWFsIHRpbWU9Ti5OLi5OLk4gcm93cz1OIGxvb3BzPU4pCisgUGxhbm5pbmcgVGltZTog Ti5OIG1zCisgRXhlY3V0aW9uIFRpbWU6IE4uTiBtcworKDMgcm93cykKKworZHJvcCB0YWJs ZSB0ZXN0X2RldG9hc3Q7CistLSBUZXN0IGRldG9hc3QgaXMgX25vdF8gYWNjZXB0ZWQgYXMg YSBwYXJhbWV0ZXIgdG8gZXhwbGFpbiB1bmxlc3MgYW5hbHl6ZSBpcyBzcGVjaWZpZWQKK2Ny ZWF0ZSB0YWJsZSB0ZXN0X2RldG9hc3QoaWQgYmlnc2VyaWFsLCB2YWwgdGV4dCk7CitzZWxl Y3QgZXhwbGFpbl9maWx0ZXIoJ2V4cGxhaW4gKGRldG9hc3QpIHNlbGVjdCAqIGZyb20gdGVz dF9kZXRvYXN0Jyk7CitFUlJPUjogIEVYUExBSU4gb3B0aW9uIERFVE9BU1QgcmVxdWlyZXMg QU5BTFlaRQorQ09OVEVYVDogIFBML3BnU1FMIGZ1bmN0aW9uIGV4cGxhaW5fZmlsdGVyKHRl eHQpIGxpbmUgNSBhdCBGT1Igb3ZlciBFWEVDVVRFIHN0YXRlbWVudAorZHJvcCB0YWJsZSB0 ZXN0X2RldG9hc3Q7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9leHBsYWlu LnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2V4cGxhaW4uc3FsCmluZGV4IGI2YjdiZWFi MjcuLjQzMDQ3ZjljY2UgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2V4cGxh aW4uc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2V4cGxhaW4uc3FsCkBAIC0xNTQs MyArMTU0LDE4IEBAIHNlbGVjdCBleHBsYWluX2ZpbHRlcignZXhwbGFpbiAodmVyYm9zZSkg c2VsZWN0ICogZnJvbSB0MSB3aGVyZSBwZ190ZW1wLm15c2luKGYxCiAtLSBUZXN0IGNvbXB1 dGVfcXVlcnlfaWQKIHNldCBjb21wdXRlX3F1ZXJ5X2lkID0gb247CiBzZWxlY3QgZXhwbGFp bl9maWx0ZXIoJ2V4cGxhaW4gKHZlcmJvc2UpIHNlbGVjdCAqIGZyb20gaW50OF90YmwgaTgn KTsKKworLS0gVGVzdCBkZXRvYXN0IGlzIGFjY2VwdGVkIGFzIGEgcGFyYW1ldGVyIHRvIGV4 cGxhaW4KKy0tIHNlZW1zIGhhcmQgdG8gdGVzdCB0aGUgZXhwZWN0ZWQgbG9uZ2VyIHJ1bnRp bWUgb2YgZGV0b2FzdGluZworLS0gc2luY2Ugb25lIG5lZWRzIHRvIHNldHVwIGVub3VnaCBk YXRhIHRvIG1ha2Ugc3VjaCBhIHRlc3Qgc3RhYmxlCistLSBhbHNvIHRpbWluZyBhcmUgZmls dGVyZWQgb3V0IGJ5IGV4cGxhaW5fZmlsdGVyIGFueXdheQorY3JlYXRlIHRhYmxlIHRlc3Rf ZGV0b2FzdChpZCBiaWdzZXJpYWwsIHZhbCB0ZXh0KTsKK3NlbGVjdCBleHBsYWluX2ZpbHRl cignZXhwbGFpbiAoYW5hbHl6ZSxkZXRvYXN0KSBzZWxlY3QgKiBmcm9tIHRlc3RfZGV0b2Fz dCcpOworZHJvcCB0YWJsZSB0ZXN0X2RldG9hc3Q7CisKKy0tIFRlc3QgZGV0b2FzdCBpcyBf bm90XyBhY2NlcHRlZCBhcyBhIHBhcmFtZXRlciB0byBleHBsYWluIHVubGVzcyBhbmFseXpl IGlzIHNwZWNpZmllZAorY3JlYXRlIHRhYmxlIHRlc3RfZGV0b2FzdChpZCBiaWdzZXJpYWws IHZhbCB0ZXh0KTsKK3NlbGVjdCBleHBsYWluX2ZpbHRlcignZXhwbGFpbiAoZGV0b2FzdCkg c2VsZWN0ICogZnJvbSB0ZXN0X2RldG9hc3QnKTsKK2Ryb3AgdGFibGUgdGVzdF9kZXRvYXN0 OworCisK --------------UOISwIoRIliwi2pIC62x8AL5--