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 1uQyxA-003yFD-QW for pgsql-hackers@arkaria.postgresql.org; Mon, 16 Jun 2025 01:48:04 +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 1uQyx7-00EdQf-Oe for pgsql-hackers@arkaria.postgresql.org; Mon, 16 Jun 2025 01:48:02 +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 1uQyx7-00EdQX-DC for pgsql-hackers@lists.postgresql.org; Mon, 16 Jun 2025 01:48:02 +0000 Received: from mout.gmx.net ([212.227.17.21]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1uQyx5-002H1x-1W for pgsql-hackers@lists.postgresql.org; Mon, 16 Jun 2025 01:48:01 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.net; s=s31663417; t=1750038478; x=1750643278; i=jimis@gmx.net; bh=XCJlmHRLLbUxcyBR7fWYAEGdzL//v30WwIzDrQpoJys=; h=X-UI-Sender-Class:Date:From:To:Subject:In-Reply-To:Message-ID: References:MIME-Version:Content-Type:cc:content-transfer-encoding: content-type:date:from:message-id:mime-version:reply-to:subject: to; b=Je57TRKqn/hThsLCo1cjlxFz1CmhD1Nh5YLxTzdvNc4JAmKRp+QkwS4CE12vLDsM W3vlSUIHqIwPfW3P/ZTLzNomp2ZPF4HwZP/59RjSbRSs7RW0so8p13fvGWiYKBKNE 7mOYHwFaNDPPcnVPz/MvRp4Lpq+FhddWeFjXVAnHESQEVkSC0jAkBiHK53PwQMuro deMGBcfiyNeItRFBruKq1eY9fm6XRy4Fs2kIgaTVMy3fPQIwZNUsul9wecZR6IWz3 980TlJGF+PeWu9p2OrI1Ss6cTSoVkk0RvB14vBEAArfJ6gf3g+it5BtZ2VfUGwLnb ieOm06DA9/QcF3iqqw== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from qtjimis-OpenSUSE-2.lan ([84.215.109.181]) by mail.gmx.net (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1M72oB-1uRF0E3YB5-00Eh4K for ; Mon, 16 Jun 2025 03:47:57 +0200 Date: Mon, 16 Jun 2025 03:47:57 +0200 (CEST) From: Dimitrios Apostolou To: pgsql-hackers@lists.postgresql.org Subject: Re: [PATCH v2] parallel pg_restore: move offset-building phase to before forking In-Reply-To: <9bb6c0f7-4e1a-ad5b-655b-2468e42c620f@gmx.net> Message-ID: <16ec80a6-ad6a-c628-ff62-55bba35c4cd0@gmx.net> References: <9bb6c0f7-4e1a-ad5b-655b-2468e42c620f@gmx.net> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="-1463770111-421863542-1750038477=:361063" X-Provags-ID: V03:K1:TNiZ5cdup49GoRjhhFDdqx5jVHSfa1vVDZ4VAeUWlXVF/crJAbN CsdhgP+sjANVObYDP0JwWLYQZq1Fqlc87X9u5dlR0wMOCD7VBiXaUiQgExk6RGus+lJr+to /VVmETyNZ1XDoLk6Bos4kIaIUZMXu5mKwI7q7tXzFnVrwyl0k3xwXP3jANY9IoKkX9BPBhN CrBSOzn79uDNnONPPO5wg== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:UgMnENfra94=;nKGEyoe7ErqexxGGsnh5mdS3PGW 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 lIRfr0eactQCv4Jx List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. ---1463770111-421863542-1750038477=:361063 Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: quoted-printable Rebased and attached v3, which fixes compilation on mingw32. On Tue, 10 Jun 2025, Dimitrios Apostolou wrote: > Rebased and attached new patch. Should I add it to July's commitfest? > > > On Fri, 4 Apr 2025, Dimitrios Apostolou wrote: > >> Hello list, >> >> based on the delays I experienced in pg_restore, as described at: >> >> https://www.postgresql.org/message-id/flat/6bd16bdb-aa5e-0512-739d-b84= 100596035@gmx.net >> >> I noticed that the seeking-reading behaviour was manifested by every o= ne >> of the pg_restore worker processes, in parallel, making the situation = even >> worse. With this patch I moved this phase to the parent process before >> fork(), so that the children have the necessary information from birth= . >> >> Copying the commit message: >> >> A pg_dump custom format archive without offsets in the table of >> contents, is usually generated when pg_dump writes to stdout instead o= f >> a file. When doing parallel pg_restore (-j) from such a file, every >> worker process was scanning the full archive sequentially, in order to >> build the offset table and find the parts assigned to restore. This le= d >> to the worker processes competing for I/O. >> >> This patch moves this offset-table building phase to the parent proces= s, >> before forking the worker processes. >> >> The upside is that we now have only one extra scan of the file. >> And this scan happens without other competing I/O, so it completes >> faster. >> >> The downside is that there is a delay before spawning the children and >> starting assigning jobs to them. >>=20 >> >> What do you think? >> >> Thanks, >> Dimitris >>=20 > ---1463770111-421863542-1750038477=:361063 Content-Type: text/x-patch; name=v3-0001-parallel-pg_restore-move-offset-building-phase-to.patch Content-Transfer-Encoding: BASE64 Content-ID: <48ae869f-4e0b-b1ad-f393-5252dc5768c8@NO.WHERE> Content-Description: Content-Disposition: attachment; filename=v3-0001-parallel-pg_restore-move-offset-building-phase-to.patch RnJvbSAyZDkxYmNmZjE2ZjdiNWVjNmY0NWI5NWNlMTY1MTQzNzE3ZTViYTgw IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQ0KRnJvbTogRGltaXRyaW9zIEFw b3N0b2xvdSA8amltaXNAcXQuaW8+DQpEYXRlOiBTYXQsIDI5IE1hciAyMDI1 IDAxOjE2OjE5ICswMTAwDQpTdWJqZWN0OiBbUEFUQ0ggdjNdIHBhcmFsbGVs IHBnX3Jlc3RvcmU6IG1vdmUgb2Zmc2V0LWJ1aWxkaW5nIHBoYXNlIHRvIGJl Zm9yZQ0KIGZvcmtpbmcNCg0KQSBwZ19kdW1wIGN1c3RvbSBmb3JtYXQgYXJj aGl2ZSB3aXRob3V0IG9mZnNldHMgaW4gdGhlIHRhYmxlIG9mDQpjb250ZW50 cywgaXMgdXN1YWxseSBnZW5lcmF0ZWQgd2hlbiBwZ19kdW1wIHdyaXRlcyB0 byBzdGRvdXQgaW5zdGVhZCBvZg0KYSBmaWxlLiBXaGVuIGRvaW5nIHBhcmFs bGVsIHBnX3Jlc3RvcmUgKC1qKSBmcm9tIHN1Y2ggYSBmaWxlLCBldmVyeQ0K d29ya2VyIHByb2Nlc3Mgd2FzIHNjYW5uaW5nIHRoZSBmdWxsIGFyY2hpdmUg c2VxdWVudGlhbGx5LCBpbiBvcmRlciB0bw0KYnVpbGQgdGhlIG9mZnNldCB0 YWJsZSBhbmQgZmluZCB0aGUgcGFydHMgYXNzaWduZWQgdG8gcmVzdG9yZS4g VGhpcyBsZWQNCnRvIHRoZSB3b3JrZXIgcHJvY2Vzc2VzIGNvbXBldGluZyBm b3IgSS9PLg0KDQpUaGlzIHBhdGNoIG1vdmVzIHRoaXMgb2Zmc2V0LXRhYmxl IGJ1aWxkaW5nIHBoYXNlIHRvIHRoZSBwYXJlbnQgcHJvY2VzcywNCmJlZm9y ZSBmb3JraW5nIHRoZSB3b3JrZXIgcHJvY2Vzc2VzLg0KDQpUaGUgdXBzaWRl IGlzIHRoYXQgd2Ugbm93IGhhdmUgb25seSBvbmUgZXh0cmEgc2NhbiBvZiB0 aGUgZmlsZS4NCkFuZCB0aGlzIHNjYW4gaGFwcGVucyB3aXRob3V0IG90aGVy IGNvbXBldGluZyBJL08sIHNvIGl0IGNvbXBsZXRlcw0KZmFzdGVyLg0KDQpU aGUgZG93bnNpZGUgaXMgdGhhdCB0aGVyZSBpcyBhIGRlbGF5IGJlZm9yZSBz cGF3bmluZyB0aGUgY2hpbGRyZW4gYW5kDQpzdGFydGluZyBhc3NpZ25pbmcg am9icyB0byB0aGVtLg0KLS0tDQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1 cF9jdXN0b20uYyB8IDkyICsrKysrKysrKysrKysrKysrKysrKysrKysrKyst LQ0KIDEgZmlsZSBjaGFuZ2VkLCA4NiBpbnNlcnRpb25zKCspLCA2IGRlbGV0 aW9ucygtKQ0KDQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2Jh Y2t1cF9jdXN0b20uYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfY3Vz dG9tLmMNCmluZGV4IDI3Njk1ZTI0ZGRlLi5lYWQ2NWU4ZDJiZSAxMDA2NDQN Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfY3VzdG9tLmMNCisr KyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfY3VzdG9tLmMNCkBAIC04 MTQsNjYgKzgxNCwxNDYgQEAgX1Jlb3BlbkFyY2hpdmUoQXJjaGl2ZUhhbmRs ZSAqQUgpDQogDQogCUFILT5GSCA9IGZvcGVuKEFILT5mU3BlYywgUEdfQklO QVJZX1IpOw0KIAlpZiAoIUFILT5GSCkNCiAJCXBnX2ZhdGFsKCJjb3VsZCBu b3Qgb3BlbiBpbnB1dCBmaWxlIFwiJXNcIjogJW0iLCBBSC0+ZlNwZWMpOw0K IA0KIAlpZiAoZnNlZWtvKEFILT5GSCwgdHBvcywgU0VFS19TRVQpICE9IDAp DQogCQlwZ19mYXRhbCgiY291bGQgbm90IHNldCBzZWVrIHBvc2l0aW9uIGlu IGFyY2hpdmUgZmlsZTogJW0iKTsNCiB9DQogDQorLyoNCisgKiBSZWFkIHRo cm91Z2ggKHNraXApIG9uZSBmdWxsIGRhdGEgZW50cnkgZnJvbSB0aGUgYXJj aGl2ZS4NCisgKiBSZXR1cm4gdGhlIHNpemUsIGFuZCBzYXZlIHRoZSBkdW1w SWQgb2YgdGhlIHNjYW5uZWQgZW50cnkuDQorICovDQorc3RhdGljIHNpemVf dA0KK19SZWFkT25lRnVsbEVudHJ5KEFyY2hpdmVIYW5kbGUgKkFILCBwZ29m Zl90IGN1clBvcywgRHVtcElkICpzY2FubmVkX2lkKQ0KK3sNCisJaW50CQkJ YmxrVHlwZTsNCisNCisJX3JlYWRCbG9ja0hlYWRlcihBSCwgJmJsa1R5cGUs IHNjYW5uZWRfaWQpOw0KKw0KKwlpZiAoYmxrVHlwZSA9PSBFT0YpDQorCQly ZXR1cm4gMDsNCisNCisJc3dpdGNoIChibGtUeXBlKQ0KKwl7DQorCQljYXNl IEJMS19EQVRBOg0KKwkJCV9za2lwRGF0YShBSCk7DQorCQkJYnJlYWs7DQor DQorCQljYXNlIEJMS19CTE9CUzoNCisJCQlfc2tpcExPcyhBSCk7DQorCQkJ YnJlYWs7DQorDQorCQlkZWZhdWx0OgkJCQkvKiBBbHdheXMgaGF2ZSBhIGRl ZmF1bHQgKi8NCisJCQlwZ19mYXRhbCgidW5yZWNvZ25pemVkIGRhdGEgYmxv Y2sgdHlwZSAoJWQpIHdoaWxlIHNlYXJjaGluZyBhcmNoaXZlIiwNCisJCQkJ CSBibGtUeXBlKTsNCisJCQlicmVhazsNCisJfQ0KKw0KKwlyZXR1cm4gZnRl bGxvKEFILT5GSCkgLSBjdXJQb3M7DQorfQ0KKw0KIC8qDQogICogUHJlcGFy ZSBmb3IgcGFyYWxsZWwgcmVzdG9yZS4NCiAgKg0KICAqIFRoZSBtYWluIHRo aW5nIHRoYXQgbmVlZHMgdG8gaGFwcGVuIGhlcmUgaXMgdG8gZmlsbCBpbiBU QUJMRSBEQVRBIGFuZCBCTE9CUw0KICAqIFRPQyBlbnRyaWVzJyBkYXRhTGVu Z3RoIGZpZWxkcyB3aXRoIGFwcHJvcHJpYXRlIHZhbHVlcyB0byBndWlkZSB0 aGUNCiAgKiBvcmRlcmluZyBvZiByZXN0b3JlIGpvYnMuICBUaGUgc291cmNl IG9mIHNhaWQgZGF0YSBpcyBmb3JtYXQtZGVwZW5kZW50LA0KICAqIGFzIGlz IHRoZSBleGFjdCBtZWFuaW5nIG9mIHRoZSB2YWx1ZXMuDQogICoNCiAgKiBB IGZvcm1hdCBtb2R1bGUgbWlnaHQgYWxzbyBjaG9vc2UgdG8gZG8gb3RoZXIg c2V0dXAgaGVyZS4NCiAgKi8NCiBzdGF0aWMgdm9pZA0KIF9QcmVwUGFyYWxs ZWxSZXN0b3JlKEFyY2hpdmVIYW5kbGUgKkFIKQ0KIHsNCiAJbGNsQ29udGV4 dCAqY3R4ID0gKGxjbENvbnRleHQgKikgQUgtPmZvcm1hdERhdGE7DQorCVRv Y0VudHJ5ICAgKnRlOw0KIAlUb2NFbnRyeSAgICpwcmV2X3RlID0gTlVMTDsN CiAJbGNsVG9jRW50cnkgKnByZXZfdGN0eCA9IE5VTEw7DQotCVRvY0VudHJ5 ICAgKnRlOw0KKwljb25zdCBpbnQJaGFzU2VlayA9IGN0eC0+aGFzU2VlazsN CisJcGdvZmZfdAkJY3VyUG9zID0gY3R4LT5sYXN0RmlsZVBvczsNCisJYm9v bAkJZmlyc3RfZGF0YV9lbnRyeSA9IHRydWU7DQorDQorCWlmIChoYXNTZWVr ICYmICgNCisJCQkJCWZzZWVrbyhBSC0+RkgsIGN1clBvcywgU0VFS19TRVQp ICE9IDApKQ0KKwkJcGdfZmF0YWwoImVycm9yIGR1cmluZyBmaWxlIHNlZWs6 ICVtIik7DQogDQogCS8qDQogCSAqIEtub3dpbmcgdGhhdCB0aGUgZGF0YSBp dGVtcyB3ZXJlIGR1bXBlZCBvdXQgaW4gVE9DIG9yZGVyLCB3ZSBjYW4NCiAJ ICogcmVjb25zdHJ1Y3QgdGhlIGxlbmd0aCBvZiBlYWNoIGl0ZW0gYXMgdGhl IGRlbHRhIHRvIHRoZSBzdGFydCBvZmZzZXQgb2YNCiAJICogdGhlIG5leHQg ZGF0YSBpdGVtLg0KIAkgKi8NCiAJZm9yICh0ZSA9IEFILT50b2MtPm5leHQ7 IHRlICE9IEFILT50b2M7IHRlID0gdGUtPm5leHQpDQogCXsNCiAJCWxjbFRv Y0VudHJ5ICp0Y3R4ID0gKGxjbFRvY0VudHJ5ICopIHRlLT5mb3JtYXREYXRh Ow0KIA0KKwkJaWYgKHRjdHgtPmRhdGFTdGF0ZSA9PSBLX09GRlNFVF9QT1Nf U0VUKQ0KKwkJew0KKwkJCWlmIChmaXJzdF9kYXRhX2VudHJ5ICYmIHRjdHgt PmRhdGFQb3MgIT0gY3VyUG9zKQ0KKwkJCQlwZ19mYXRhbCgiZGF0YSBmb3Ig Zmlyc3QgYXJjaGl2ZSBlbnRyeSAlZCBpcyByZWNvcmRlZCB0byINCisJCQkJ CQkgIiBzdGFydCBhdCAlbGxkIGJ1dCBpdCByZWFsbHkgc3RhcnRzIGF0ICVs bGQiLA0KKwkJCQkJCSB0ZS0+ZHVtcElkLCAobG9uZyBsb25nKSB0Y3R4LT5k YXRhUG9zLA0KKwkJCQkJCSAobG9uZyBsb25nKSBjdXJQb3MpOw0KKwkJfQ0K Kw0KKwkJLyoNCisJCSAqIElmIHRoZSBhcmNoaXZlJ3MgVE9DIGlzIG1pc3Np bmcgdGhlIHBvc2l0aW9ucyBvZiBlYWNoIGVudHJ5LCB0aGVuDQorCQkgKiBt b3N0IGxpa2VseSB0aGUgYXJjaGl2ZSB3YXMgd3JpdHRlbiB0byBhIHBpcGUu IElmIHdlIGFyZSBub3QNCisJCSAqIHJlYWRpbmcgZnJvbSBhIHBpcGUgbm93 LCB3ZSBjYW4gZG8gb25lIGV4dHJhIHNjYW4gdG8gZmluZCB0aGUNCisJCSAq IG1pc3NpbmcgcG9zaXRpb25zLiBUaGV5IGFyZSBuZWVkZWQgaW4gcGFyYWxs ZWwgcmVzdG9yZSBpbiBvcmRlciB0bw0KKwkJICogYXNzaWduIFRPQyBlbnRy aWVzIGFzIGpvYnMgdG8gdGhlIHdvcmtlcnMuDQorCQkgKi8NCisJCWVsc2Ug aWYgKHRjdHgtPmRhdGFTdGF0ZSA9PSBLX09GRlNFVF9QT1NfTk9UX1NFVCAm JiBoYXNTZWVrKQ0KKwkJew0KKwkJCUR1bXBJZAkJZHVtcF9pZDsNCisJCQlz aXplX3QJCWVudHJ5X3NpemU7DQorDQorCQkJaWYgKGZpcnN0X2RhdGFfZW50 cnkpDQorCQkJew0KKwkJCQlwZ19sb2dfaW5mbygiYXJjaGl2ZSBkb2VzIG5v dCBjb250YWluIG9mZnNldHM7Ig0KKwkJCQkJCQkiIGRvaW5nIG9uZSBmdWxs IHNjYW4gdG8gY2FsY3VsYXRlIHRoZW0uLi4iKTsNCisJCQl9DQorCQkJLyog RmlsbCBpbiB0aGUgbWlzc2luZyBpbmZvICovDQorCQkJdGN0eC0+ZGF0YVBv cyA9IGN1clBvczsNCisJCQl0Y3R4LT5kYXRhU3RhdGUgPSBLX09GRlNFVF9Q T1NfU0VUOw0KKwkJCS8qIEFkdmFuY2UgKi8NCisJCQllbnRyeV9zaXplID0g X1JlYWRPbmVGdWxsRW50cnkoQUgsIGN1clBvcywgJmR1bXBfaWQpOw0KKwkJ CWlmIChkdW1wX2lkICE9IHRlLT5kdW1wSWQpDQorCQkJCXBnX2ZhdGFsKCJm b3VuZCB1bmV4cGVjdGVkIGR1bXAgSUQgJWQgLS0gZXhwZWN0ZWQgJWQiLA0K KwkJCQkJCSBkdW1wX2lkLCB0ZS0+ZHVtcElkKTsNCisJCQljdXJQb3MgKz0g ZW50cnlfc2l6ZTsNCisJCX0NCisNCiAJCS8qDQotCQkgKiBJZ25vcmUgZW50 cmllcyB3aXRob3V0IGEga25vd24gZGF0YSBvZmZzZXQ7IGlmIHdlIHdlcmUg dW5hYmxlIHRvDQotCQkgKiBzZWVrIHRvIHJld3JpdGUgdGhlIFRPQyB3aGVu IGNyZWF0aW5nIHRoZSBhcmNoaXZlLCB0aGlzJ2xsIGJlIGFsbA0KLQkJICog b2YgdGhlbSwgYW5kIHdlJ2xsIGVuZCB1cCB3aXRoIG5vIHNpemUgZXN0aW1h dGVzLg0KKwkJICogV2hlbiB3ZSBjYW4ndCBzZWVrLCBpZ25vcmUgZGF0YSBl bnRyaWVzIHdpdGhvdXQgYSBrbm93biBkYXRhDQorCQkgKiBvZmZzZXQuIFRo aXMgc2hvdWxkbid0IGhhcHBlbiBpbiBwYXJhbGxlbCByZXN0b3JlIHRob3Vn aCwgdGhlDQorCQkgKiBhcmNoaXZlIHNob3VsZCBhbHdheXMgYmUgc2Vla2Fi bGUuIEFsc28gc2tpcCBLX09GRlNFVF9OT19EQVRBDQorCQkgKiBlbnRyaWVz IHNpbmNlIHRoZXkgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBkYXRhIHNlY3Rp b24gb2YgdGhlDQorCQkgKiBhcmNoaXZlLg0KIAkJICovDQotCQlpZiAodGN0 eC0+ZGF0YVN0YXRlICE9IEtfT0ZGU0VUX1BPU19TRVQpDQorCQllbHNlDQog CQkJY29udGludWU7DQogDQogCQkvKiBDb21wdXRlIHByZXZpb3VzIGRhdGEg aXRlbSdzIGxlbmd0aCAqLw0KIAkJaWYgKHByZXZfdGUpDQogCQl7DQogCQkJ aWYgKHRjdHgtPmRhdGFQb3MgPiBwcmV2X3RjdHgtPmRhdGFQb3MpDQogCQkJ CXByZXZfdGUtPmRhdGFMZW5ndGggPSB0Y3R4LT5kYXRhUG9zIC0gcHJldl90 Y3R4LT5kYXRhUG9zOw0KIAkJfQ0KIA0KIAkJcHJldl90ZSA9IHRlOw0KIAkJ cHJldl90Y3R4ID0gdGN0eDsNCisJCWZpcnN0X2RhdGFfZW50cnkgPSBmYWxz ZTsNCiAJfQ0KIA0KIAkvKiBJZiBPSyB0byBzZWVrLCB3ZSBjYW4gZGV0ZXJt aW5lIHRoZSBsZW5ndGggb2YgdGhlIGxhc3QgaXRlbSAqLw0KLQlpZiAocHJl dl90ZSAmJiBjdHgtPmhhc1NlZWspDQorCWlmIChwcmV2X3RlICYmIGhhc1Nl ZWspDQogCXsNCiAJCXBnb2ZmX3QJCWVuZHBvczsNCiANCiAJCWlmIChmc2Vl a28oQUgtPkZILCAwLCBTRUVLX0VORCkgIT0gMCkNCiAJCQlwZ19mYXRhbCgi ZXJyb3IgZHVyaW5nIGZpbGUgc2VlazogJW0iKTsNCiAJCWVuZHBvcyA9IGZ0 ZWxsbyhBSC0+RkgpOw0KIAkJaWYgKGVuZHBvcyA+IHByZXZfdGN0eC0+ZGF0 YVBvcykNCiAJCQlwcmV2X3RlLT5kYXRhTGVuZ3RoID0gZW5kcG9zIC0gcHJl dl90Y3R4LT5kYXRhUG9zOw0KIAl9DQotLSANCjIuNDkuMA0KDQo= ---1463770111-421863542-1750038477=:361063--