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 1qgrzx-0006mi-NA for pgsql-hackers@arkaria.postgresql.org; Thu, 14 Sep 2023 19:27:34 +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 1qgrzw-009nbO-6v for pgsql-hackers@arkaria.postgresql.org; Thu, 14 Sep 2023 19:27:31 +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 1qgrzv-009nb7-IV for pgsql-hackers@lists.postgresql.org; Thu, 14 Sep 2023 19:27:31 +0000 Received: from mout.gmx.net ([212.227.15.18]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qgrzn-004Zg4-Cv for pgsql-hackers@postgresql.org; Thu, 14 Sep 2023 19:27:30 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.de; s=s31663417; t=1694719640; x=1695324440; i=stepan.rutz@gmx.de; bh=VhbCDIdkFx+XhIc2DqK8jMgBfUNPe2kA7GqmJKCIVyI=; h=X-UI-Sender-Class:Date:Subject:To:Cc:References:From:In-Reply-To; b=L0tYbRxsCVDL7jQUn5JgUhIYKl47UVRrnKQiJVPY7a5s8KsWnbKjXrvepC77AVaC5QVsnZLRr02 9bKI9TG7Ljj5ral1enbBw1kfAX9/Y2dH4gjl/qeDRVh//dOTKJ7k+uo79ewAtVAijFtAYVWa/lw2/ JOr32oIi43KISOnmkBS7CJgPRrmcgt8bQYwSaCuiZAu9fXKv/A/jvVxihOKECvMizD/HRRKS6WWp2 k3BL5igc+x4HqbRBcv28/UEplQFKhQr3WL0T6ba8AV9msowhQdZ8dgWThrtLlvu3DyUbonURv3/ZN +ZQ8seoH2d72km9weR+IAdNVj7tPt2g+Sxng== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from [192.168.178.116] ([94.31.82.126]) by mail.gmx.net (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MK3W0-1r18R405c6-00LZMv; Thu, 14 Sep 2023 21:27:20 +0200 Content-Type: multipart/mixed; boundary="------------0PMQ4ewfSg5ADbLoUBI3CQQM" Message-ID: Date: Thu, 14 Sep 2023 21:27:18 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.15.0 Subject: Re: Detoasting optionally to make Explain-Analyze less misleading To: Tom Lane , Matthias van de Meent Cc: pgsql-hackers@postgresql.org References: <2802772.1694532399@sss.pgh.pa.us> Content-Language: en-US From: stepan rutz In-Reply-To: <2802772.1694532399@sss.pgh.pa.us> X-Provags-ID: V03:K1:70W+SYr1t+SghyJWV2ql/ZpJV8jDVtgVWYPbI3WGSqBmolIUN61 +7Ipn+7SGNvtwpGXmbgzwdEwos+wLgnD17N4jmWTK6XDxfg+JF6kqreeEWEjSjcxbFYoBBB Ah4MFtMCmS2hAqo4WaKDTylFQJkjTX7Kjf4dU363b0dJeYl5uwEKGV6gJlqrmVkYXicHuqD rMG9taSi12MJLIwXOr28A== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:eJBLNDGtRdg=;eoDfE1UT/Ne/lGb/+fyxKpTDUwy FzOeHF2IxlXnzOsSfFQZHN2UZduyRwlq3xF4t0fmfFo52xeHaHU2K9B9gkNXOXdsKnGptZlM0 sQrpgzdCsOt+qaXrqbQZAPkX4GpG+wK5AW13lZ2fAyuO4MEAHJzAyXw8ydNoo8LAg/F4Conmq STs5InRHxNc7jwoU0Kx3TmrBUnLC7jirgcpOu94lbwnxiBDS9LcMFADfexaeFjqzZdu3ephdt MlFe/8R5oDnZ28tOzF210Og7HFGAYv1TVmiRStNIQZgxXFjnwXqnNeV+ymC7yvroLpNli9Xhr 4piYlu+4M1oXWaNuDdROkJgAiqqF8S7DyZSDI7S0Q4S0sH1F2Nxv1PxeOZGiAvQIq5ND4HFcj Dg46LLj3Uu8GI74NpOlYR12Z6KY/9gnvfyBITbCoVwDZV1Ou0qlOf8FhQDlxzLYc38VWJ6VJd A7K7tWkEQHy+Nw2CCb+Ow/5InU+HfV9Uw9FVsZ/XSslIjbmKbBD3NB0T/s7+tXlRsVpP4aQ/8 Cd03lEi/yv+iTV0zo85ef7N/36YKzekjC5ibxvPqXN1T0/MHRDXhVSxzKa5VbIj2ufAKo9+CX PNziE7OCYeWmGyse17Gqqh9vmnvtP1/Bas6FTG9GvzTVZpMO2OR9QiwCMT4vTM9faHuHrpal7 L7lWvqOww6z+YvCv13eA1YLwpE0xy5vBR1g/74sQeZjsqVLf51GS50NjyzkuLcB0hElP6+4xE A985S0Lur/SlMHMvUAMzxdCA/jYq/I6A5rFNuRuFxcFCe3O5p12BRb/jHcvk6oYsd7LVSHwcM W0vsUf88bOCrPF3hObV3BvTDj3Xww4GD24rEIlMgk/SeUfflWAChz9dWmTdHZs5dYAnP1RsqN NuTb1NW7qYUYnXWAsXdo6IYnYmhgCUjFZOrm/bDCnGSrqk1fysPG2KzRxu0SuC1kWjXGqseMQ rBX/5r9h32a5+fdVIg3GovuPX/U= 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. --------------0PMQ4ewfSg5ADbLoUBI3CQQM Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: quoted-printable Hi Tom, Hi Matthias, you are right of course. I have looked at the code from printtup.c and made a new version of the patch. Thanks for the MemoryContextReset hint too (@Matthias) This time is called=C2=A0 EXPLAIN(ANALYZE,SERIALIZE) (hey, it also sounds nicer phonetically) If the option SERIALIZE is active, the output functions are called and they perform the detoasting, which I have even checked. So things are better this way, however I hardcoded the output option "Text" (format=3D0). In printtup.c there is an incoming array which applies Text (format=3D0) or Binary (format=3D1) for each column individually. I am not sure whether this is even needed. I left in the if-statement from printtup.c which calls the binary output method of a given type. The result of the output is ignored and apparently free'd because of the memory-context-reset at the end. Please also note, that I added a call to DestReceiver's rDestroy hook, which was missing from explain.c before altogether. Feedback is appreciated. /Stepan On 12.09.23 17:26, Tom Lane wrote: > Matthias van de Meent writes: >> Hmm, maybe we should measure the overhead of serializing the tuples ins= tead. >> The difference between your patch and "serializing the tuples, but not >> sending them" is that serializing also does the detoasting, but also >> includes any time spent in the serialization functions of the type. So >> an option "SERIALIZE" which measures all the time the server spent on >> the query (except the final step of sending the bytes to the client) >> would likely be more useful than "just" detoasting. > +1, that was my immediate reaction to the proposal as well. Some > output functions are far from cheap. Doing only the detoast part > seems like it's still misleading. > > Do we need to go as far as offering both text-output and binary-output > options? > > regards, tom lane --------------0PMQ4ewfSg5ADbLoUBI3CQQM Content-Type: text/x-patch; charset=UTF-8; name="0003_explain_analyze_and_serialize.patch" Content-Disposition: attachment; filename="0003_explain_analyze_and_serialize.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwppbmRleCA4NTcwYjE0ZjYyLi5kYzUyMDE5YTNlIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKKysrIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCkBAIC00Nyw3ICs0Nyw2IEBAIEV4cGxhaW5PbmVR dWVyeV9ob29rX3R5cGUgRXhwbGFpbk9uZVF1ZXJ5X2hvb2sgPSBOVUxMOwogLyogSG9vayBm b3IgcGx1Z2lucyB0byBnZXQgY29udHJvbCBpbiBleHBsYWluX2dldF9pbmRleF9uYW1lKCkg Ki8KIGV4cGxhaW5fZ2V0X2luZGV4X25hbWVfaG9va190eXBlIGV4cGxhaW5fZ2V0X2luZGV4 X25hbWVfaG9vayA9IE5VTEw7CiAKLQogLyogT1ItYWJsZSBmbGFncyBmb3IgRXhwbGFpblhN TFRhZygpICovCiAjZGVmaW5lIFhfT1BFTklORyAwCiAjZGVmaW5lIFhfQ0xPU0lORyAxCkBA IC0xNTUsNiArMTU0LDggQEAgc3RhdGljIHZvaWQgRXhwbGFpbllBTUxMaW5lU3RhcnRpbmco RXhwbGFpblN0YXRlICplcyk7CiBzdGF0aWMgdm9pZCBlc2NhcGVfeWFtbChTdHJpbmdJbmZv IGJ1ZiwgY29uc3QgY2hhciAqc3RyKTsKIAogCitzdGF0aWMgRGVzdFJlY2VpdmVyICpDcmVh dGVTZXJpYWxpemVEZXN0UmVjZWl2ZXIodm9pZCk7CisKIAogLyoKICAqIEV4cGxhaW5RdWVy eSAtCkBAIC0xOTIsNiArMTkzLDggQEAgRXhwbGFpblF1ZXJ5KFBhcnNlU3RhdGUgKnBzdGF0 ZSwgRXhwbGFpblN0bXQgKnN0bXQsCiAJCQllcy0+c2V0dGluZ3MgPSBkZWZHZXRCb29sZWFu KG9wdCk7CiAJCWVsc2UgaWYgKHN0cmNtcChvcHQtPmRlZm5hbWUsICJnZW5lcmljX3BsYW4i KSA9PSAwKQogCQkJZXMtPmdlbmVyaWMgPSBkZWZHZXRCb29sZWFuKG9wdCk7CisJCWVsc2Ug aWYgKHN0cmNtcChvcHQtPmRlZm5hbWUsICJzZXJpYWxpemUiKSA9PSAwKQorCQkJZXMtPnNl cmlhbGl6ZSA9IGRlZkdldEJvb2xlYW4ob3B0KTsKIAkJZWxzZSBpZiAoc3RyY21wKG9wdC0+ ZGVmbmFtZSwgInRpbWluZyIpID09IDApCiAJCXsKIAkJCXRpbWluZ19zZXQgPSB0cnVlOwpA QCAtMjQ0LDYgKzI0NywxMiBAQCBFeHBsYWluUXVlcnkoUGFyc2VTdGF0ZSAqcHN0YXRlLCBF eHBsYWluU3RtdCAqc3RtdCwKIAkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1F VEVSX1ZBTFVFKSwKIAkJCQkgZXJybXNnKCJFWFBMQUlOIG9wdGlvbiBUSU1JTkcgcmVxdWly ZXMgQU5BTFlaRSIpKSk7CiAKKwkvKiBjaGVjayB0aGF0IHNlcmlhbGl6ZSBpcyB1c2VkIHdp dGggRVhQTEFJTiBBTkFMWVpFICovCisJaWYgKGVzLT5zZXJpYWxpemUgJiYgIWVzLT5hbmFs eXplKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9Q QVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coIkVYUExBSU4gb3B0aW9uIFNFUklBTEla RSByZXF1aXJlcyBBTkFMWVpFIikpKTsKKwogCS8qIGNoZWNrIHRoYXQgR0VORVJJQ19QTEFO IGlzIG5vdCB1c2VkIHdpdGggRVhQTEFJTiBBTkFMWVpFICovCiAJaWYgKGVzLT5nZW5lcmlj ICYmIGVzLT5hbmFseXplKQogCQllcmVwb3J0KEVSUk9SLApAQCAtNTY1LDkgKzU3NCwxNiBA QCBFeHBsYWluT25lUGxhbihQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsIEludG9DbGF1c2Ug KmludG8sIEV4cGxhaW5TdGF0ZSAqZXMsCiAJLyoKIAkgKiBOb3JtYWxseSB3ZSBkaXNjYXJk IHRoZSBxdWVyeSdzIG91dHB1dCwgYnV0IGlmIGV4cGxhaW5pbmcgQ1JFQVRFIFRBQkxFCiAJ ICogQVMsIHdlJ2QgYmV0dGVyIHVzZSB0aGUgYXBwcm9wcmlhdGUgdHVwbGUgcmVjZWl2ZXIu CisJICogQWxzbyBpZiB3ZSBjaG9vc2UgdG8gc2VyaWFsaXplIGR1cmluZyBleHBsYWluLCB3 ZSBuZWVkIHRvIHNlbmQgdGhlCisJICogdHVwbGVzIHRvIGEgcmVjZWl2ZXIgdGhhdCBwZXJm b3JtcyB0aGUgc2VyaWFsaXppbmcKKwkgKiB3aGljaCBpbmNsdWRlcyBkZXRvYXN0aW5nIGFu ZCB0aGUgY29udmVyc2lvbiBvZiB0aGUgYXR0cmlidXRlcworCSAqIGludG8gdGhlIHByb3Rv Y29sIHJlY2VpdmluZyBmb3JtYXQuIFRoZSBsYXR0ZXIgY2FuIGFsc28gYmUgY29zdGx5CisJ ICogZm9yIHNvbWUgdHlwZXMKIAkgKi8KIAlpZiAoaW50bykKIAkJZGVzdCA9IENyZWF0ZUlu dG9SZWxEZXN0UmVjZWl2ZXIoaW50byk7CisJZWxzZSBpZiAoZXMtPmFuYWx5emUgJiYgZXMt PnNlcmlhbGl6ZSkKKwkJZGVzdCA9IENyZWF0ZVNlcmlhbGl6ZURlc3RSZWNlaXZlcigpOwog CWVsc2UKIAkJZGVzdCA9IE5vbmVfUmVjZWl2ZXI7CiAKQEAgLTYwNiw2ICs2MjIsOSBAQCBF eHBsYWluT25lUGxhbihQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsIEludG9DbGF1c2UgKmlu dG8sIEV4cGxhaW5TdGF0ZSAqZXMsCiAJCS8qIHJ1biBjbGVhbnVwIHRvbyAqLwogCQlFeGVj dXRvckZpbmlzaChxdWVyeURlc2MpOwogCisJCS8qIGNhbGwgdGhlIGRlc3QgcmVjZWl2ZXIn cyBkZXN0cm95IG1ldGhvZCBldmVuIGR1cmluZyBleHBsYWluICovCisJCWRlc3QtPnJEZXN0 cm95KGRlc3QpOworCiAJCS8qIFdlIGNhbid0IHJ1biBFeGVjdXRvckVuZCAndGlsbCB3ZSdy ZSBkb25lIHByaW50aW5nIHRoZSBzdGF0cy4uLiAqLwogCQl0b3RhbHRpbWUgKz0gZWxhcHNl ZF90aW1lKCZzdGFydHRpbWUpOwogCX0KQEAgLTUwNTIsMyArNTA3MSwxOTMgQEAgZXNjYXBl X3lhbWwoU3RyaW5nSW5mbyBidWYsIGNvbnN0IGNoYXIgKnN0cikKIHsKIAllc2NhcGVfanNv bihidWYsIHN0cik7CiB9CisKKworLyogU2VyaWFsaXppbmcgRGVzdFJlY2VpdmVyIGZ1bmN0 aW9ucworICoKKyAqIHRoZSBpZGVhIGlzIHRoYXQgcnVubmluZyAgRVhQTEFJTiAoQU5BTFla RSkgIHNvbWV0aW1lcyBnaXZlcyByZXN1bHRzIHRoYXQKKyAqIGFyZSB3YXkgdW5yZWFsaXN0 aWMsIHNpbmNlIGR1cmluZyBleHBsYWluIHRoZXJlIGlzIG5vIGRldG9hc3Rpbmcgb2YKKyAq IHZhbHVlcy4gVGhhdCBtZWFucyB5b3UgZ2V0IG5vIGlkZWEgd2hhdCB5b3VyIGFjdHVhbCBx dWVyeSB0aW1lIGlzIGdvaW5nCisgKiB0byBiZSwgbm9yIHdoYXQgdGhlIGFjdHVhbCBvdmVy aGVhZCBvZiBkZXRvYXN0aW5nIGlzLgorICogCisgKiBBbHNvIHRoZSBvdXRwdXQvc2VuZCBm dW5jdGlvbnMgb2Ygc29tZSB0eXBlcyBtYXkgYWRkIGFkZGl0aW9uYWwgb3ZlcmhlYWQKKyAq IGFuZCBuZWVkIHRvIGJlIGludm9rZWQgZm9yIGEgcmVhbGlzdGljIGltcHJlc3Npb24gb2Yg dGhlIHJ1bnRpbWUgb2YgZXhwbGFpbgorICoKKyAqIGlmIHlvdSBydW4gRVhQTEFJTiAoQU5B WUxaRSwgU0VSSUFMSVpFKSB0aGVuIHlvdSBnZXQgYW4gaW1wcmVzc2lvbiBvZgorICogd2hh dCBpcyBhY3R1YWxseSBoYXBwZW5pbmcgd2hlbiB5b3UgdXNlIHBvc3RncmVzcWwgYXMgYSBk b2N1bWVudC1kYXRhYmFzZQorICogb3IgaGF2ZSBsYXJnZSB2YWx1ZXMgZm9yIHNvbWUgb3Ro ZXIgcmVhc29uLgorICovCisKKy8qIGFuIGF0dHJpYnV0ZSBpbmZvIGNhY2hlZCBmb3IgZWFj aCBjb2x1bW4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CQkJCQkJCQkvKiBQZXItYXR0cmlidXRl IGluZm9ybWF0aW9uICovCisJT2lkCQkJdHlwb3V0cHV0OwkJLyogT2lkIGZvciB0aGUgdHlw ZSdzIHRleHQgb3V0cHV0IGZuICovCisJT2lkCQkJdHlwc2VuZDsJCS8qIE9pZCBmb3IgdGhl IHR5cGUncyBiaW5hcnkgb3V0cHV0IGZuICovCisJYm9vbAkJdHlwaXN2YXJsZW5hOwkvKiBp cyBpdCB2YXJsZW5hIChpZSBwb3NzaWJseSB0b2FzdGFibGUpPyAqLworCWludDE2CQlmb3Jt YXQ7CQkJLyogZm9ybWF0IGNvZGUgZm9yIHRoaXMgY29sdW1uICovCisJRm1nckluZm8JZmlu Zm87CQkJLyogUHJlY29tcHV0ZWQgY2FsbCBpbmZvIGZvciBvdXRwdXQgZm4gKi8KK30gU2Vy aWFsaXplQXR0ckluZm87CisKK3R5cGVkZWYgc3RydWN0Cit7CisJLyogcmVjZWl2ZXIgZm9y IHRoZSB0dXBsZXMsIHRoYXQganVzdCBzZXJpYWxpemVzICovCisJRGVzdFJlY2VpdmVyCQlk ZXN0UmVjZXZpZXI7CisJTWVtb3J5Q29udGV4dAkJbWVtb3J5Q29udGV4dDsKKwlNZW1vcnlD b250ZXh0CQlvbGRNZW1vcnlDb250ZXh0OwkvKiByZXN0b3JlIHRvIG9sZCB3aGVuIGRvbmUg Ki8KKwlUdXBsZURlc2MJCQlhdHRyaW5mbzsKKwlpbnQJCQkJCW5hdHRyczsKKwlTZXJpYWxp emVBdHRySW5mbwkqaW5mb3M7CQkJCS8qIENhY2hlZCBpbmZvIGFib3V0IGVhY2ggYXR0ciAq LworfSBTZXJpYWxpemVEZXN0UmVjZWl2ZXI7CisKKy8qCisgKiBHZXQgdGhlIGxvb2t1cCBp bmZvIHRoYXQgdGhlIHJvdy1jYWxsYmFjayBvZiB0aGUgcmVjZWl2ZXIgbmVlZHMuIHRoaXMg Y29kZQorICogaXMgc2ltaWxhciB0byB0aGUgY29kZSBmcm9tIHByaW50dXAuYyBleGNlcHQg dGhhdCBpdCBkb2Vzbid0IGRvIGFueSBhY3R1YWwKKyAqIG91dHB1dC4KKyAqLworc3RhdGlj IHZvaWQKK3NlcmlhbGl6ZV9wcmVwYXJlX2luZm8oU2VyaWFsaXplRGVzdFJlY2VpdmVyICpy ZWNlaXZlciwgVHVwbGVEZXNjIHR5cGVpbmZvLAorCWludCBuYXR0cnMpCit7CisJaW50IGk7 CisKKwkvKiBnZXQgcmlkIG9mIGFueSBvbGQgZGF0YSAqLworCWlmIChyZWNlaXZlci0+aW5m b3MpCisJCXBmcmVlKHJlY2VpdmVyLT5pbmZvcyk7CisJcmVjZWl2ZXItPmluZm9zID0gTlVM TDsKKworCXJlY2VpdmVyLT5hdHRyaW5mbyA9IHR5cGVpbmZvOworCXJlY2VpdmVyLT5uYXR0 cnMgPSBuYXR0cnM7CisJaWYgKG5hdHRycyA8PSAwKQorCQlyZXR1cm47CisKKwlyZWNlaXZl ci0+aW5mb3MgPSAoU2VyaWFsaXplQXR0ckluZm8gKikgcGFsbG9jMCgKKwkJbmF0dHJzICog c2l6ZW9mKFNlcmlhbGl6ZUF0dHJJbmZvKSk7CisJZm9yIChpID0gMDsgaSA8IG5hdHRyczsg aSsrKQorCXsKKwkJU2VyaWFsaXplQXR0ckluZm8gKmluZm8gPSAmKHJlY2VpdmVyLT5pbmZv c1tpXSk7CisJCS8qIGFzc3VtZSB0ZXh0IG91dHB1dCBmb3IgYWxsIGF0dHJpYnV0ZXMgKi8K KwkJaW5mby0+Zm9ybWF0ID0gMDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbmF0dHJzOyBp KyspCisJeworCQlTZXJpYWxpemVBdHRySW5mbyAqaW5mbyA9ICYocmVjZWl2ZXItPmluZm9z W2ldKTsKKwkJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0ciA9IFR1cGxlRGVzY0F0dHIodHlwZWlu Zm8sIGkpOworCQlpZiAoaW5mby0+Zm9ybWF0ID09IDApCisJCXsKKwkJCWdldFR5cGVPdXRw dXRJbmZvKGF0dHItPmF0dHR5cGlkLAorCQkJCQkJCSAgJmluZm8tPnR5cG91dHB1dCwKKwkJ CQkJCQkgICZpbmZvLT50eXBpc3ZhcmxlbmEpOworCQkJZm1ncl9pbmZvKGluZm8tPnR5cG91 dHB1dCwgJmluZm8tPmZpbmZvKTsKKwkJfQorCQllbHNlIGlmIChpbmZvLT5mb3JtYXQgPT0g MSkKKwkJeworCQkJZ2V0VHlwZUJpbmFyeU91dHB1dEluZm8oYXR0ci0+YXR0dHlwaWQsCisJ CQkJCQkJCQkmaW5mby0+dHlwc2VuZCwKKwkJCQkJCQkJCSZpbmZvLT50eXBpc3ZhcmxlbmEp OworCQkJZm1ncl9pbmZvKGluZm8tPnR5cHNlbmQsICZpbmZvLT5maW5mbyk7CisJCX0KKwkJ ZWxzZQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElE X1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCSBlcnJtc2coInVuc3VwcG9ydGVkIGZvcm1hdCBj b2RlOiAlZCIsIGluZm8tPmZvcm1hdCkpKTsKKwl9Cit9CisKKworCisvKiB0aGlzIG1ldGhv ZCByZWNlaXZlcyB0aGUgdHVwbGVzL3JlY29yZHMgZHVyaW5nIGV4cGxhaW4gKGFuYWx5emUs IHNlcmlhbGl6ZSkKKyAqIGFuZCBzZXJpYWxpemVzIHRoZW0uCisgKiB0aGlzIG1ldGhvZCBp cyBvdGhlcndpc2Ugbm90IGNhbGxlZCBhbmQgaXRzIHB1cnBvc2UgaXMgdG8gc2VyaWFsaXpl IHRvCisgKiBtYWtlIGFuYWx5emUgb3B0aW9uYWxseSBtb3JlIHJlYWxpc3RpYy4gc2VyaWFs aXphdGlvbiBpbmNsdWRlcyBkZXRvYXN0aW5nCisgKiBhbmQgaW52b2tpbmcgdGhlIHR5cGUn cyBvdXRwdXQgKG9yIHNlbmQpIGZ1bmN0aW9uLCB3aGljaCBpcyB3aGF0IGhhcHBlbnMKKyAq IHdoZW4geW91IGFjdHVhbGx5IHJ1biB0aGUgcXVlcnkuIGJvdGggc3RlcHMgY2FuIGFkZCBv dmVyaGVhZCBhbmQgdGh1cworICogYW5hbHl6ZSBjYW4gYmUgdmVyeSBtaXNsZWFkaW5nIGlm IHRob3NlIHR3byBzdGVwcyBjYW5ub3Qgb3B0aW9uYWxseSBiZQorICogcGVyZm9ybWVkLgor ICovCitzdGF0aWMgYm9vbAorc2VyaWFsaXplQW5hbHl6ZVJlY2VpdmUoVHVwbGVUYWJsZVNs b3QgKnNsb3QsIERlc3RSZWNlaXZlciAqc2VsZikKK3sKKwlpbnQgaTsKKwlUdXBsZURlc2Mg dHVwZGVzYzsKKwlTZXJpYWxpemVEZXN0UmVjZWl2ZXIgKnJlY2VpdmVyID0gKFNlcmlhbGl6 ZURlc3RSZWNlaXZlciopIHNlbGY7CisKKwl0dXBkZXNjICA9IHNsb3QtPnR0c190dXBsZURl c2NyaXB0b3I7CisJLyogQ2FjaGUgYXR0cmlidXRlIGluZm9zIGFuZCBmdW5jdGlvbiBvaWQg aWYgb3V0ZGF0ZWQgKi8KKwlpZiAocmVjZWl2ZXItPmF0dHJpbmZvICE9IHR1cGRlc2MgfHwg cmVjZWl2ZXItPm5hdHRycyAhPSB0dXBkZXNjLT5uYXR0cykKKwkJc2VyaWFsaXplX3ByZXBh cmVfaW5mbyhyZWNlaXZlciwgdHVwZGVzYywgdHVwZGVzYy0+bmF0dHMpOworCisJLyogRmls bCBhbGwgb2YgdGhlIHNsb3QncyBhdHRyaWJ1dGVzLCB3ZSBjYW4gbm93IHVzZSBzbG90LT50 dHNfdmFsdWVzCisJICogYW5kIGl0cyB0dHNfaXNudWxsIGFycmF5IHdoaWNoIHNob3VsZCBi ZSBsb25nIGVub3VnaCBldmVuIGlmIGFkZGVkCisJICogYSBudWxsLWNvbHVtbiB0byB0aGUg dGFibGUgKi8KKwlzbG90X2dldGFsbGF0dHJzKHNsb3QpOworCisJcmVjZWl2ZXItPm9sZE1l bW9yeUNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oCisJCXJlY2VpdmVyLT5tZW1v cnlDb250ZXh0KTsKKworCS8qIEl0ZXJhdGUgb3ZlciBhbGwgYXR0cmlidXRlcyBvZiB0aGUg dHVwbGUgYW5kIGludm9rZSB0aGUgb3V0cHV0IGZ1bmMKKwkgKiAob3Igc2VuZCBmdW5jdGlv biBpbiBjYXNlIG9mIGEgYmluYXJ5IGZvcm1hdCkuIGNvbXBsZXRlbHkgaWdub3JlIHRoZQor CSAqIHJlc3VsdC4gTWVtb3J5Q29udGV4dCBpcyBmcmVlJ2QgdmlhIHJlc2V0IGF0IHRoZSBl bmQgb2YgdGhlIHRoaXMKKwkgKiBwZXItdHVwbGUgY2FsbGJhY2sgYW55aG93LgorCSAqIE5P VEU6IHdoZW4gaW52b2tpbmcgdGhlIG91dHB1dCBmdW5jdGlvbiBkZXRvYXN0aW5nIGlzIGlt cGxpY2l0bHkKKwkgKiBwZXJmb3JtZWQgd2hlbiBuZWVkZWQuIFRoaXMgYWRkcyBtYWpvciBv dmVyaGVhZCB0byBwbGFpbiAKKwkgKiBleHBsYWluLWFuYWx5emUgYW5kIHRoaXMgaXMgd2hh dCBpcyBkZXNpcmVkIGhlcmUuCisJICovCisJZm9yIChpID0gMDsgaSA8IHR1cGRlc2MtPm5h dHRzOyBpKyspCisJeworCQlTZXJpYWxpemVBdHRySW5mbyAqaW5mbyA9ICYocmVjZWl2ZXIt PmluZm9zW2ldKTsKKwkJRGF0dW0gYXR0ciA9IHNsb3QtPnR0c192YWx1ZXNbaV07CisJCWlm ICghc2xvdC0+dHRzX2lzbnVsbFtpXSkgeworCQkJaWYgKGluZm8tPmZvcm1hdCA9PSAwKQor CQkJeworCQkJCS8qIFRleHQgb3V0cHV0LCBqdXN0IGlnbm9yZSB0aGUgcmVzdWx0ICovCisJ CQkJKHZvaWQpIE91dHB1dEZ1bmN0aW9uQ2FsbCgmaW5mby0+ZmluZm8sIGF0dHIpOworCQkJ fQorCQkJZWxzZQorCQkJeworCQkJCS8qIEJpbmFyeSBvdXRwdXQsIGp1c3QgaWdub3JlIHRo ZSByZXN1bHQgKi8KKwkJCQkodm9pZCkgU2VuZEZ1bmN0aW9uQ2FsbCgmaW5mby0+ZmluZm8s IGF0dHIpOworCQkJfQorCQl9CisJfQorCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhyZWNlaXZl ci0+b2xkTWVtb3J5Q29udGV4dCk7CisJTWVtb3J5Q29udGV4dFJlc2V0KHJlY2VpdmVyLT5t ZW1vcnlDb250ZXh0KTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQKK3Nlcmlh bGl6ZUFuYWx5emVTdGFydHVwKERlc3RSZWNlaXZlciAqc2VsZiwgaW50IG9wZXJhdGlvbiwg VHVwbGVEZXNjIHR5cGVpbmZvKQoreworCVNlcmlhbGl6ZURlc3RSZWNlaXZlciAqcmVjZWl2 ZXIgPSAoU2VyaWFsaXplRGVzdFJlY2VpdmVyKikgc2VsZjsKKwkvKiBtZW1vcnkgY29udGV4 dCBmb3Igb3VyIHdvcmsgKi8KKwlyZWNlaXZlci0+bWVtb3J5Q29udGV4dCA9IEFsbG9jU2V0 Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJIlNlcmlhbGl6ZVR1cGxl UmVjZWl2ZSIsIEFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOworfQorCitzdGF0aWMgdm9pZAor c2VyaWFsaXplQW5hbHl6ZUNsZWFudXAoRGVzdFJlY2VpdmVyICpzZWxmKQoreworCVNlcmlh bGl6ZURlc3RSZWNlaXZlciAqcmVjZWl2ZXIgPSAoU2VyaWFsaXplRGVzdFJlY2VpdmVyKikg c2VsZjsKKwlNZW1vcnlDb250ZXh0RGVsZXRlKHJlY2VpdmVyLT5tZW1vcnlDb250ZXh0KTsK K30KKworc3RhdGljIHZvaWQKK3NlcmlhbGl6ZUFuYWx5emVEZXN0cm95KERlc3RSZWNlaXZl ciAqc2VsZikKK3sKKwlwZnJlZShzZWxmKTsKK30KKworc3RhdGljIERlc3RSZWNlaXZlciAq Q3JlYXRlU2VyaWFsaXplRGVzdFJlY2VpdmVyKHZvaWQpCit7CisJLyogQXR0ZW50aW9uIG11 c3QgcGFsbG9jMCAobGlrZSBjYWxsb2MpIGhlcmUsIHNpbmNlIHNvbWUgZmllbGRzIGxpa2UK KwkgKiBpbmZvcyBhbmQgbmF0dHJzIGFyZSBleHBlY3RlZCB0byBiZSAwIG9yIE5VTEwgaW5p dGlhbGx5ICovCisJU2VyaWFsaXplRGVzdFJlY2VpdmVyICpzZWxmID0gKFNlcmlhbGl6ZURl c3RSZWNlaXZlciopIHBhbGxvYzAoCisJCXNpemVvZihTZXJpYWxpemVEZXN0UmVjZWl2ZXIp KTsKKworCXNlbGYtPmRlc3RSZWNldmllci5yZWNlaXZlU2xvdCA9IHNlcmlhbGl6ZUFuYWx5 emVSZWNlaXZlOworCXNlbGYtPmRlc3RSZWNldmllci5yU3RhcnR1cCA9IHNlcmlhbGl6ZUFu YWx5emVTdGFydHVwOworCXNlbGYtPmRlc3RSZWNldmllci5yU2h1dGRvd24gPSBzZXJpYWxp emVBbmFseXplQ2xlYW51cDsKKwlzZWxmLT5kZXN0UmVjZXZpZXIuckRlc3Ryb3kgPSBzZXJp YWxpemVBbmFseXplRGVzdHJveTsKKwlzZWxmLT5kZXN0UmVjZXZpZXIubXlkZXN0ID0gRGVz dE5vbmU7CisJcmV0dXJuIChEZXN0UmVjZWl2ZXIgKikgc2VsZjsKK30KZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW4uaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRz L2V4cGxhaW4uaAppbmRleCAzZDNlNjMyYTBjLi41MzIxYTdmMGExIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFu ZHMvZXhwbGFpbi5oCkBAIC00Nyw2ICs0NywxNCBAQCB0eXBlZGVmIHN0cnVjdCBFeHBsYWlu U3RhdGUKIAlib29sCQlzdW1tYXJ5OwkJLyogcHJpbnQgdG90YWwgcGxhbm5pbmcgYW5kIGV4 ZWN1dGlvbiB0aW1pbmcgKi8KIAlib29sCQlzZXR0aW5nczsJCS8qIHByaW50IG1vZGlmaWVk IHNldHRpbmdzICovCiAJYm9vbAkJZ2VuZXJpYzsJCS8qIGdlbmVyYXRlIGEgZ2VuZXJpYyBw bGFuICovCisJYm9vbAkJc2VyaWFsaXplOyAgICAgIC8qIHNlcmlhbGl6ZSBhbGwgdmFsdWVz LCBvbmx5IGFwcGxpY2FibGUKKwkJCQkJCQkJICogd2hlbiAiYW5hbHl6ZSIgaXMgYWN0aXZl LiBzZXJpYWxpemluZworCQkJCQkJCQkgKiBpbnZva2VzIHRoZSB0eXBlJ3Mgb3V0cHV0IGZ1 bmN0aW9uIGluCisJCQkJCQkJCSAqIHRoZSBzYW1lIHdheSBwcmludHR1cC5jIGRvZXMgdGhl biB0dXBsZXMKKwkJCQkJCQkJICogYXJlIHNlbmQgdG8gdGhlIGNsaWVudC4gdGhpcyBpbmNs dWRlcworCQkJCQkJCQkgKiBkZXRvYXN0aW5nIG9mIHRvYXN0ZWQgdmFsdWVzIGFuZCBtYWtl cworCQkJCQkJCQkgKiBFWFBMQUlOKEFOQUxZWkUsU0VSSUFMSVpFKSByZXR1cm4gcmVhbGlz dGljCisJCQkJCQkJCSAqIChsb25nZXIgcnVudGltZXMgKi8KIAlFeHBsYWluRm9ybWF0IGZv cm1hdDsJCS8qIG91dHB1dCBmb3JtYXQgKi8KIAkvKiBzdGF0ZSBmb3Igb3V0cHV0IGZvcm1h dHRpbmcgLS0tIG5vdCByZXNldCBmb3IgZWFjaCBuZXcgcGxhbiB0cmVlICovCiAJaW50CQkJ aW5kZW50OwkJCS8qIGN1cnJlbnQgaW5kZW50YXRpb24gbGV2ZWwgKi8KZGlmZiAtLWdpdCBh L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZXhwbGFpbi5vdXQgYi9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL2V4cGxhaW4ub3V0CmluZGV4IDFhY2E3NzQ5MWIuLmY3YTA5ZjM5MzIg MTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZXhwbGFpbi5vdXQKKysr IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9leHBsYWluLm91dApAQCAtNTU5LDMgKzU1 OSwyMyBAQCBzZWxlY3QgZXhwbGFpbl9maWx0ZXIoJ2V4cGxhaW4gKHZlcmJvc2UpIHNlbGVj dCAqIGZyb20gaW50OF90YmwgaTgnKTsKICBRdWVyeSBJZGVudGlmaWVyOiBOCiAoMyByb3dz KQogCistLSBUZXN0IHRoYXQgU0VSSUFMSVpBQkxFIGlzIGFjY2VwdGVkIGFzIGEgcGFyYW1l dGVyIHRvIGV4cGxhaW4KKy0tIHNlZW1zIGhhcmQgdG8gdGVzdCB0aGUgZXhwZWN0ZWQgbG9u Z2VyIHJ1bnRpbWUgb2Ygc2VyaWFsaXplCistLSBzaW5jZSBvbmUgbmVlZHMgdG8gc2V0dXAg ZW5vdWdoIGRhdGEgdG8gbWFrZSBzdWNoIGEgdGVzdCBzdGFibGUKKy0tIGFsc28gdGltaW5n IGFyZSBmaWx0ZXJlZCBvdXQgYnkgZXhwbGFpbl9maWx0ZXIgYW55d2F5CitjcmVhdGUgdGFi bGUgdGVzdF9zZXJpYWxpemUoaWQgYmlnc2VyaWFsLCB2YWwgdGV4dCk7CitzZWxlY3QgZXhw bGFpbl9maWx0ZXIoJ2V4cGxhaW4gKGFuYWx5emUsc2VyaWFsaXplKSBzZWxlY3QgKiBmcm9t IHRlc3Rfc2VyaWFsaXplJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBleHBsYWluX2ZpbHRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBTZXEgU2NhbiBvbiB0ZXN0X3NlcmlhbGl6ZSAgKGNvc3Q9Ti5OLi5OLk4gcm93cz1O IHdpZHRoPU4pIChhY3R1YWwgdGltZT1OLk4uLk4uTiByb3dzPU4gbG9vcHM9TikKKyBQbGFu bmluZyBUaW1lOiBOLk4gbXMKKyBFeGVjdXRpb24gVGltZTogTi5OIG1zCisoMyByb3dzKQor Citkcm9wIHRhYmxlIHRlc3Rfc2VyaWFsaXplOworLS0gVGVzdCBTRVJJQUxJWkUgaXMgX25v dF8gYWNjZXB0ZWQgYXMgYSBwYXJhbWV0ZXIgdG8gZXhwbGFpbiB1bmxlc3MgQU5BTFlaRSBp cyBzcGVjaWZpZWQKK2NyZWF0ZSB0YWJsZSB0ZXN0X3NlcmlhbGl6ZShpZCBiaWdzZXJpYWws IHZhbCB0ZXh0KTsKK3NlbGVjdCBleHBsYWluX2ZpbHRlcignZXhwbGFpbiAoc2VyaWFsaXpl KSBzZWxlY3QgKiBmcm9tIHRlc3Rfc2VyaWFsaXplJyk7CitFUlJPUjogIEVYUExBSU4gb3B0 aW9uIFNFUklBTElaRSByZXF1aXJlcyBBTkFMWVpFCitDT05URVhUOiAgUEwvcGdTUUwgZnVu Y3Rpb24gZXhwbGFpbl9maWx0ZXIodGV4dCkgbGluZSA1IGF0IEZPUiBvdmVyIEVYRUNVVEUg c3RhdGVtZW50Citkcm9wIHRhYmxlIHRlc3Rfc2VyaWFsaXplOwpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvcmVncmVzcy9zcWwvZXhwbGFpbi5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9l eHBsYWluLnNxbAppbmRleCBiNmI3YmVhYjI3Li44MjM3NzBkNTQ2IDEwMDY0NAotLS0gYS9z cmMvdGVzdC9yZWdyZXNzL3NxbC9leHBsYWluLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNz L3NxbC9leHBsYWluLnNxbApAQCAtMTU0LDMgKzE1NCwxOCBAQCBzZWxlY3QgZXhwbGFpbl9m aWx0ZXIoJ2V4cGxhaW4gKHZlcmJvc2UpIHNlbGVjdCAqIGZyb20gdDEgd2hlcmUgcGdfdGVt cC5teXNpbihmMQogLS0gVGVzdCBjb21wdXRlX3F1ZXJ5X2lkCiBzZXQgY29tcHV0ZV9xdWVy eV9pZCA9IG9uOwogc2VsZWN0IGV4cGxhaW5fZmlsdGVyKCdleHBsYWluICh2ZXJib3NlKSBz ZWxlY3QgKiBmcm9tIGludDhfdGJsIGk4Jyk7CisKKy0tIFRlc3QgdGhhdCBTRVJJQUxJWkFC TEUgaXMgYWNjZXB0ZWQgYXMgYSBwYXJhbWV0ZXIgdG8gZXhwbGFpbgorLS0gc2VlbXMgaGFy ZCB0byB0ZXN0IHRoZSBleHBlY3RlZCBsb25nZXIgcnVudGltZSBvZiBzZXJpYWxpemUKKy0t IHNpbmNlIG9uZSBuZWVkcyB0byBzZXR1cCBlbm91Z2ggZGF0YSB0byBtYWtlIHN1Y2ggYSB0 ZXN0IHN0YWJsZQorLS0gYWxzbyB0aW1pbmcgYXJlIGZpbHRlcmVkIG91dCBieSBleHBsYWlu X2ZpbHRlciBhbnl3YXkKK2NyZWF0ZSB0YWJsZSB0ZXN0X3NlcmlhbGl6ZShpZCBiaWdzZXJp YWwsIHZhbCB0ZXh0KTsKK3NlbGVjdCBleHBsYWluX2ZpbHRlcignZXhwbGFpbiAoYW5hbHl6 ZSxzZXJpYWxpemUpIHNlbGVjdCAqIGZyb20gdGVzdF9zZXJpYWxpemUnKTsKK2Ryb3AgdGFi bGUgdGVzdF9zZXJpYWxpemU7CisKKy0tIFRlc3QgU0VSSUFMSVpFIGlzIF9ub3RfIGFjY2Vw dGVkIGFzIGEgcGFyYW1ldGVyIHRvIGV4cGxhaW4gdW5sZXNzIEFOQUxZWkUgaXMgc3BlY2lm aWVkCitjcmVhdGUgdGFibGUgdGVzdF9zZXJpYWxpemUoaWQgYmlnc2VyaWFsLCB2YWwgdGV4 dCk7CitzZWxlY3QgZXhwbGFpbl9maWx0ZXIoJ2V4cGxhaW4gKHNlcmlhbGl6ZSkgc2VsZWN0 ICogZnJvbSB0ZXN0X3NlcmlhbGl6ZScpOworZHJvcCB0YWJsZSB0ZXN0X3NlcmlhbGl6ZTsK KworCg== --------------0PMQ4ewfSg5ADbLoUBI3CQQM--