From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from conssluserg-01.nifty.com (conssluserg-01.nifty.com [210.131.2.80]) by sourceware.org (Postfix) with ESMTPS id 8329F385842E for ; Sun, 5 Sep 2021 13:41:11 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 8329F385842E Authentication-Results: sourceware.org; dmarc=fail (p=none dis=none) header.from=nifty.ne.jp Authentication-Results: sourceware.org; spf=fail smtp.mailfrom=nifty.ne.jp Received: from Express5800-S70 (z221123.dynamic.ppp.asahi-net.or.jp [110.4.221.123]) (authenticated) by conssluserg-01.nifty.com with ESMTP id 185DeuLY001119 for ; Sun, 5 Sep 2021 22:40:56 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conssluserg-01.nifty.com 185DeuLY001119 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.ne.jp; s=dec2015msa; t=1630849256; bh=0klVI8iLZ5W9QeMsiXKtE0L72HQa5umhyoGKIwZPWgI=; h=Date:From:To:Subject:In-Reply-To:References:From; b=lD7DfAdmeyRsn8FqkQAbAYqCx+5SD9URWBcmFcvc5ecsHyKOCAj212xCSU4GbC4l5 dAOrCo0HxwAuHstntnm0tEtqXOoG3xaP5YVuPWBbsr7Ag68fYTBFFVoU9K9Giv1NtM ih37WKQldvmIMUB6Ng1YeJvrbWpkbD9NeZDY60qU/ASUGNJQExl1qnbEJK9xfUXc5c mSmccz1mgrHwZmiLd+mA4BDU8LisNHydvbduBcDT5r5Fp1+MtYwg3GWfy5Vd0TAi6S 8UjJOW7lgMT0kOdaJKWzxz9RrYutUdLLLqflrWY4lsQXnRy3yY7wmhcMhNodAdyS65 LSszKy6MLtu0g== X-Nifty-SrcIP: [110.4.221.123] Date: Sun, 5 Sep 2021 22:40:59 +0900 From: Takashi Yano To: cygwin-developers@cygwin.com Subject: Re: cygrunsrv + sshd + rsync = 20 times too slow -- throttled? Message-Id: <20210905224059.cfdc8f23d3eeaa1ea16ecf2e@nifty.ne.jp> In-Reply-To: <20210905081523.0db04d9402abf87635066eb7@nifty.ne.jp> References: <9ba687eb-f4a0-18f8-b10b-76e7e51e123e@cornell.edu> <152bfc0c-2f72-c684-6fc5-aa7c36c136b8@cornell.edu> <20210903190046.663c60fb11c936e344821383@nifty.ne.jp> <20210903191340.c28ae366e79ca14799bacc1f@nifty.ne.jp> <20210903212205.acc2fc68cc4ffce9c1db3dd9@nifty.ne.jp> <20210904210258.342eb795ac53f1d5352ea512@nifty.ne.jp> <20210904213713.8760e7ba3a4d68fbb78d677e@nifty.ne.jp> <51cb0cef-c3fd-1320-c2dd-a868bf1ffaae@cornell.edu> <20210905081523.0db04d9402abf87635066eb7@nifty.ne.jp> X-Mailer: Sylpheed 3.7.0 (GTK+ 2.24.30; i686-pc-mingw32) Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="Multipart=_Sun__5_Sep_2021_22_40_59_+0900_gS=X3B6dJW9Klk3s" X-Spam-Status: No, score=-11.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, NICE_REPLY_A, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: cygwin-developers@cygwin.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Cygwin core component developers mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 05 Sep 2021 13:41:15 -0000 This is a multi-part message in MIME format. --Multipart=_Sun__5_Sep_2021_22_40_59_+0900_gS=X3B6dJW9Klk3s Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit On Sun, 5 Sep 2021 08:15:23 +0900 Takashi Yano wrote: > Hi Ken, > > On Sat, 4 Sep 2021 10:04:12 -0400 > Ken Brown wrote: > > On 9/4/2021 8:37 AM, Takashi Yano wrote: > > > On Sat, 4 Sep 2021 21:02:58 +0900 > > > Takashi Yano wrote: > > >> Hi Corinna, Ken, > > >> > > >> On Fri, 3 Sep 2021 09:27:37 -0400 > > >> Ken Brown wrote: > > >>> On 9/3/2021 8:22 AM, Takashi Yano wrote: > > >>>> POSIX says: > > >>>> The value returned may be less than nbyte if the number of bytes left > > >>>> in the file is less than nbyte, if the read() request was interrupted > > >>>> by a signal, or if the file is a pipe or FIFO or special file and has > > >>>> ~~~ > > >>>> fewer than nbyte bytes immediately available for reading. > > >>>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > > >>>> > > >>>> https://pubs.opengroup.org/onlinepubs/009604599/functions/read.html > > >>>> > > >>>> If it is turned over, read() should read all data immediately available, > > >>>> I think. > > >>> > > >>> I understand the reasoning now, but I think your patch isn't quite right. As it > > >>> stands, if the call to NtQueryInformationFile fails but total_length != 0, > > >>> you're trying to read again without knowing that there's data in the pipe. > > >>> > > >>> Also, I think you need the following: > > >>> > > >>> diff --git a/winsup/cygwin/fhandler_pipe.cc b/winsup/cygwin/fhandler_pipe.cc > > >>> index ef7823ae5..46bb96961 100644 > > >>> --- a/winsup/cygwin/fhandler_pipe.cc > > >>> +++ b/winsup/cygwin/fhandler_pipe.cc > > >>> @@ -348,8 +348,13 @@ fhandler_pipe::raw_read (void *ptr, size_t& len) > > >>> CloseHandle (evt); > > >>> if (status == STATUS_THREAD_SIGNALED) > > >>> { > > >>> - set_errno (EINTR); > > >>> - len = (size_t) -1; > > >>> + if (total_len == 0) > > >>> + { > > >>> + set_errno (EINTR); > > >>> + len = (size_t) -1; > > >>> + } > > >>> + else > > >>> + len = total_len; > > >>> } > > >>> else if (status == STATUS_THREAD_CANCELED) > > >>> pthread::static_cancel_self (); > > >> > > >> Thanks for your advice. I fixed the issue and attached new patch. > > >> > > >> On Fri, 3 Sep 2021 17:37:13 +0200 > > >> Corinna Vinschen wrote: > > >>> Hmm, I see the point, but we might have another problem with that. > > >>> > > >>> We can't keep the mutex while waiting on the pending read, and there > > >>> could be more than one pending read running at the time. if so, > > >>> chances are extremly high, that the data written to the buffer gets > > >>> split like this: > > >>> > > >>> reader 1 reader 2 > > >>> > > >>> calls read(65536) calls read(65536) > > >>> > > >>> calls NtReadFile(16384 bytes) > > >>> calls NtReadFile(16384 bytes) > > >>> > > >>> writer writes 65536 bytes > > >>> > > >>> wakes up and gets 16384 bytes > > >>> wakes up and gets 16384 bytes > > >>> gets the mutex, calls > > >>> NtReadFile(32768) which > > >>> returns immediately with > > >>> 32768 bytes added to the > > >>> caller's buffer. > > >>> > > >>> so the buffer returned to reader 1 is 49152 bytes, with 16384 bytes > > >>> missing in the middle of it, *without* the reader knowing about that > > >>> fact. If reader 1 gets the first 16384 bytes, the 16384 bytes have > > >>> been read in a single call, at least, so the byte order is not > > >>> unknowingly broken on the application level. > > >>> > > >>> Does that make sense? > > >> > > >> Why can't we keep the mutex while waiting on the pending read? > > >> If we can keep the mutex, the issue above mentioned does not > > >> happen, right? > > >> > > >> What about the patch attached? This keeps the mutex while read() > > >> but I do not see any defects so far. > > > > LGTM. > > > > If Corinna agrees, I have a couple of suggestions. > > > > 1. With this patch, we can no longer have more than one pending ReadFile. So > > there's no longer a need to count read handles, and the problem with select is > > completely fixed as long as the number of bytes requested is less than the pipe > > buffer size. > > > > 2. raw_read is now reading in chunks, like raw_write. For readability of the > > code, I think it would be better to make the two functions as similar as > > possible. For example, you could replace the do/while loop by a > > while(total_len > variables, e.g., nbytes instead of total_len, or vice versa. > > Thanks for the suggestion. I have rebuilt the patch. > Please see the patch attached. This patch seems to fail to adopt to current git head of topic/pipe branch. I rebuilt the patch to fit current top/pipe. Please see the patch attached. -- Takashi Yano --Multipart=_Sun__5_Sep_2021_22_40_59_+0900_gS=X3B6dJW9Klk3s Content-Type: application/octet-stream; name="0001-Cygwin-pipe-Stop-counting-reader-and-read-all-availa.patch" Content-Disposition: attachment; filename="0001-Cygwin-pipe-Stop-counting-reader-and-read-all-availa.patch" Content-Transfer-Encoding: base64 RnJvbSA4YmQzOGIzNzQ4YWRiMWFhMDAzN2ZiMDY4M2QyMGQ2ODBjZTU1M2M0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUYWthc2hpIFlhbm8gPHRha2FzaGkueWFub0BuaWZ0eS5uZS5q cD4KRGF0ZTogU3VuLCA1IFNlcCAyMDIxIDIyOjM1OjI4ICswOTAwClN1YmplY3Q6IFtQQVRDSF0g Q3lnd2luOiBwaXBlOiBTdG9wIGNvdW50aW5nIHJlYWRlciBhbmQgcmVhZCBhbGwgYXZhaWxhYmxl CiBkYXRhLgoKLSBCeSBndWFyZGluZyByZWFkIHdpdGggcmVhZF9tdHgsIG5vIG1vcmUgdGhhbiBv bmUgUmVhZEZpbGUgY2FuCiAgYmUgY2FsbGVkIHNpbXVsdGFuZW91c2x5LiBTbyBjb3V0aW5nIHJl YWQgaGFuZGxlcyBpcyBubyBsb25nZXIKICBuZWNlc3NhcnkuCi0gTWFrZSByYXdfcmVhZCBjb2Rl IGFzIHNpbWlsYXIgYXMgcG9zc2libGUgdG8gcmF3X3dyaXRlIGNvZGUuCi0tLQogd2luc3VwL2N5 Z3dpbi9maGFuZGxlcl9waXBlLmNjIHwgODIgKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0t LS0tLQogMSBmaWxlIGNoYW5nZWQsIDQ1IGluc2VydGlvbnMoKyksIDM3IGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXJfcGlwZS5jYyBiL3dpbnN1cC9jeWd3 aW4vZmhhbmRsZXJfcGlwZS5jYwppbmRleCA2ODk3NGViODAuLmMwOTQ1MTViMyAxMDA2NDQKLS0t IGEvd2luc3VwL2N5Z3dpbi9maGFuZGxlcl9waXBlLmNjCisrKyBiL3dpbnN1cC9jeWd3aW4vZmhh bmRsZXJfcGlwZS5jYwpAQCAtMjIxLDEyICsyMjEsMTAgQEAgZmhhbmRsZXJfcGlwZTo6Z2V0X3By b2NfZmRfbmFtZSAoY2hhciAqYnVmKQogdm9pZCBfX3JlZzMKIGZoYW5kbGVyX3BpcGU6OnJhd19y ZWFkICh2b2lkICpwdHIsIHNpemVfdCYgbGVuKQogewotICBOVFNUQVRVUyBzdGF0dXM7CisgIHNp emVfdCBuYnl0ZXMgPSAwOworICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKICAg SU9fU1RBVFVTX0JMT0NLIGlvOwogICBIQU5ETEUgZXZ0ID0gTlVMTDsKLSAgRFdPUkQgd2FpdHJl dCA9IFdBSVRfT0JKRUNUXzA7Ci0gIGJvb2wga2VlcF9sb29waW5nID0gZmFsc2U7Ci0gIHNpemVf dCBvcmlnX2xlbiA9IGxlbjsKIAogICBpZiAoIWxlbikKICAgICByZXR1cm47CkBAIC0yMzksNDMg KzIzNyw0NyBAQCBmaGFuZGxlcl9waXBlOjpyYXdfcmVhZCAodm9pZCAqcHRyLCBzaXplX3QmIGxl bikKICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgZG8KKyAgRFdPUkQgdGltZW91dCA9IGlzX25v bmJsb2NraW5nICgpID8gMCA6IElORklOSVRFOworICBpZiAoV0FJVF9USU1FT1VUID09IFdhaXRG b3JTaW5nbGVPYmplY3QgKHJlYWRfbXR4LCB0aW1lb3V0KSkKICAgICB7Ci0gICAgICBsZW4gPSBv cmlnX2xlbjsKLSAgICAgIGtlZXBfbG9vcGluZyA9IGZhbHNlOworICAgICAgc2V0X2Vycm5vIChF QUdBSU4pOworICAgICAgbGVuID0gKHNpemVfdCkgLTE7CisgICAgICByZXR1cm47CisgICAgfQor ICB3aGlsZSAobmJ5dGVzIDwgbGVuKQorICAgIHsKKyAgICAgIFVMT05HX1BUUiBuYnl0ZXNfbm93 ID0gMDsKKyAgICAgIHNpemVfdCBsZWZ0ID0gbGVuIC0gbmJ5dGVzOworICAgICAgVUxPTkcgbGVu MSA9IChVTE9ORykgbGVmdDsKKyAgICAgIERXT1JEIHdhaXRyZXQgPSBXQUlUX09CSkVDVF8wOwor CiAgICAgICBpZiAoZXZ0KQogCVJlc2V0RXZlbnQgKGV2dCk7CiAgICAgICBpZiAoIWlzX25vbmJs b2NraW5nICgpKQogCXsKIAkgIEZJTEVfUElQRV9MT0NBTF9JTkZPUk1BVElPTiBmcGxpOwotCSAg VUxPTkcgcmVhZGVyX2NvdW50OwotCSAgVUxPTkcgbWF4X2xlbiA9IDY0OwotCi0JICBXYWl0Rm9y U2luZ2xlT2JqZWN0IChyZWFkX210eCwgSU5GSU5JVEUpOwogCiAJICAvKiBJZiB0aGUgcGlwZSBp cyBlbXB0eSwgZG9uJ3QgcmVxdWVzdCBtb3JlIGJ5dGVzIHRoYW4gaGFsZiB0aGUKLQkgICAgIHBp cGUgYnVmZmVyIHNpemUuICBFdmVyeSBwZW5kaW5nIHJlYWQgbG93ZXJzIFdyaXRlUXVvdGFBdmFp bGFibGUKKwkgICAgIHBpcGUgYnVmZmVyIHNpemUuIHBlbmRpbmcgcmVhZCBsb3dlcnMgV3JpdGVR dW90YUF2YWlsYWJsZQogCSAgICAgb24gdGhlIHdyaXRlIHNpZGUgYW5kIHRodXMgYWZmZWN0cyBz ZWxlY3QncyBhYmlsaXR5IHRvIHJldHVybgotCSAgICAgbW9yZSBvciBsZXNzIHJlbGlhYmxlIGlu Zm8gd2hldGhlciBhIHdyaXRlIHN1Y2NlZWRzIG9yIG5vdC4KLQotCSAgICAgTGV0IHRoZSBzaXpl IG9mIHRoZSByZXF1ZXN0IGRlcGVuZCBvbiB0aGUgbnVtYmVyIG9mIHJlYWRlcnMKLQkgICAgIGF0 IHRoZSB0aW1lLiAqLworCSAgICAgbW9yZSBvciBsZXNzIHJlbGlhYmxlIGluZm8gd2hldGhlciBh IHdyaXRlIHN1Y2NlZWRzIG9yIG5vdC4gKi8KKwkgIFVMT05HIGNodW5rID0gbWF4X2F0b21pY193 cml0ZSAvIDI7CiAJICBzdGF0dXMgPSBOdFF1ZXJ5SW5mb3JtYXRpb25GaWxlIChnZXRfaGFuZGxl ICgpLCAmaW8sCiAJCQkJCSAgICZmcGxpLCBzaXplb2YgKGZwbGkpLAogCQkJCQkgICBGaWxlUGlw ZUxvY2FsSW5mb3JtYXRpb24pOwogCSAgaWYgKE5UX1NVQ0NFU1MgKHN0YXR1cykgJiYgZnBsaS5S ZWFkRGF0YUF2YWlsYWJsZSA9PSAwKQogCSAgICB7Ci0JICAgICAgcmVhZGVyX2NvdW50ID0gZ2V0 X29ial9oYW5kbGVfY291bnQgKGdldF9oYW5kbGUgKCkpOwotCSAgICAgIGlmIChyZWFkZXJfY291 bnQgPCAxMCkKLQkJbWF4X2xlbiA9IGZwbGkuSW5ib3VuZFF1b3RhIC8gKDIgKiByZWFkZXJfY291 bnQpOwotCSAgICAgIGlmIChsZW4gPiBtYXhfbGVuKQotCQlsZW4gPSBtYXhfbGVuOworCSAgICAg IGlmIChuYnl0ZXMgIT0gMCkKKwkJYnJlYWs7CisJICAgICAgY2h1bmsgPSBmcGxpLkluYm91bmRR dW90YSAvIDI7CiAJICAgIH0KKwkgIGlmICghTlRfU1VDQ0VTUyAoc3RhdHVzKSAmJiBuYnl0ZXMg IT0gMCkKKwkgICAgYnJlYWs7CisKKwkgIGxlbjEgPSAobGVmdCA8IGNodW5rKSA/IChVTE9ORykg bGVmdCA6IGNodW5rOwogCX0KICAgICAgIHN0YXR1cyA9IE50UmVhZEZpbGUgKGdldF9oYW5kbGUg KCksIGV2dCwgTlVMTCwgTlVMTCwgJmlvLCBwdHIsCi0JCQkgICBsZW4sIE5VTEwsIE5VTEwpOwot ICAgICAgaWYgKCFpc19ub25ibG9ja2luZyAoKSkKLQlSZWxlYXNlTXV0ZXggKHJlYWRfbXR4KTsK KwkJCSAgIGxlbjEsIE5VTEwsIE5VTEwpOwogICAgICAgaWYgKGV2dCAmJiBzdGF0dXMgPT0gU1RB VFVTX1BFTkRJTkcpCiAJewogCSAgd2FpdHJldCA9IGN5Z3dhaXQgKGV2dCk7CkBAIC0yOTIsMTMg KzI5NCwxMyBAQCBmaGFuZGxlcl9waXBlOjpyYXdfcmVhZCAodm9pZCAqcHRyLCBzaXplX3QmIGxl bikKIAkgICAgc2V0X2Vycm5vIChFQkFERik7CiAJICBlbHNlCiAJICAgIF9fc2V0ZXJybm8gKCk7 Ci0JICBsZW4gPSAoc2l6ZV90KSAtMTsKKwkgIG5ieXRlcyA9IChzaXplX3QpIC0xOwogCX0KICAg ICAgIGVsc2UgaWYgKE5UX1NVQ0NFU1MgKHN0YXR1cykpCiAJewotCSAgbGVuID0gaW8uSW5mb3Jt YXRpb247Ci0JICBpZiAobGVuID09IDApCi0JICAgIGtlZXBfbG9vcGluZyA9IHRydWU7CisJICBu Ynl0ZXNfbm93ID0gaW8uSW5mb3JtYXRpb247CisJICBwdHIgPSAoKGNoYXIgKikgcHRyKSArIG5i eXRlc19ub3c7CisJICBuYnl0ZXMgKz0gbmJ5dGVzX25vdzsKIAl9CiAgICAgICBlbHNlCiAJewpA QCAtMzA4LDQwICszMTAsNDYgQEAgZmhhbmRsZXJfcGlwZTo6cmF3X3JlYWQgKHZvaWQgKnB0ciwg c2l6ZV90JiBsZW4pCiAJICAgIGNhc2UgU1RBVFVTX0VORF9PRl9GSUxFOgogCSAgICBjYXNlIFNU QVRVU19QSVBFX0JST0tFTjoKIAkgICAgICAvKiBUaGlzIGlzIHJlYWxseSBFT0YuICAqLwotCSAg ICAgIGxlbiA9IDA7CiAJICAgICAgYnJlYWs7CiAJICAgIGNhc2UgU1RBVFVTX01PUkVfRU5UUklF UzoKIAkgICAgY2FzZSBTVEFUVVNfQlVGRkVSX09WRVJGTE9XOgogCSAgICAgIC8qIGBpby5JbmZv cm1hdGlvbicgaXMgc3VwcG9zZWRseSB2YWxpZC4gICovCi0JICAgICAgbGVuID0gaW8uSW5mb3Jt YXRpb247Ci0JICAgICAgaWYgKGxlbiA9PSAwKQotCQlrZWVwX2xvb3BpbmcgPSB0cnVlOworCSAg ICAgIG5ieXRlc19ub3cgPSBpby5JbmZvcm1hdGlvbjsKKwkgICAgICBwdHIgPSAoKGNoYXIgKikg cHRyKSArIG5ieXRlc19ub3c7CisJICAgICAgbmJ5dGVzICs9IG5ieXRlc19ub3c7CiAJICAgICAg YnJlYWs7CiAJICAgIGNhc2UgU1RBVFVTX1BJUEVfTElTVEVOSU5HOgogCSAgICBjYXNlIFNUQVRV U19QSVBFX0VNUFRZOgorCSAgICAgIGlmIChuYnl0ZXMgIT0gMCkKKwkJYnJlYWs7CiAJICAgICAg aWYgKGlzX25vbmJsb2NraW5nICgpKQogCQl7CiAJCSAgc2V0X2Vycm5vIChFQUdBSU4pOwotCQkg IGxlbiA9IChzaXplX3QpIC0xOworCQkgIG5ieXRlcyA9IChzaXplX3QpIC0xOwogCQkgIGJyZWFr OwogCQl9CiAJICAgICAgZmFsbHRocm91Z2g7CiAJICAgIGRlZmF1bHQ6CiAJICAgICAgX19zZXRl cnJub19mcm9tX250X3N0YXR1cyAoc3RhdHVzKTsKLQkgICAgICBsZW4gPSAoc2l6ZV90KSAtMTsK KwkgICAgICBuYnl0ZXMgPSAoc2l6ZV90KSAtMTsKIAkgICAgICBicmVhazsKIAkgICAgfQogCX0K LSAgICB9IHdoaWxlIChrZWVwX2xvb3BpbmcpOworCisgICAgICBpZiAobmJ5dGVzX25vdyA9PSAw KQorCWJyZWFrOworICAgIH0KKyAgUmVsZWFzZU11dGV4IChyZWFkX210eCk7CiAgIGlmIChldnQp CiAgICAgQ2xvc2VIYW5kbGUgKGV2dCk7Ci0gIGlmIChzdGF0dXMgPT0gU1RBVFVTX1RIUkVBRF9T SUdOQUxFRCkKKyAgaWYgKHN0YXR1cyA9PSBTVEFUVVNfVEhSRUFEX1NJR05BTEVEICYmIG5ieXRl cyA9PSAwKQogICAgIHsKICAgICAgIHNldF9lcnJubyAoRUlOVFIpOwotICAgICAgbGVuID0gKHNp emVfdCkgLTE7CisgICAgICBuYnl0ZXMgPSAoc2l6ZV90KSAtMTsKICAgICB9CiAgIGVsc2UgaWYg KHN0YXR1cyA9PSBTVEFUVVNfVEhSRUFEX0NBTkNFTEVEKQogICAgIHB0aHJlYWQ6OnN0YXRpY19j YW5jZWxfc2VsZiAoKTsKKyAgbGVuID0gbmJ5dGVzOwogfQogCiBzc2l6ZV90IF9fcmVnMwotLSAK Mi4zMy4wCgo= --Multipart=_Sun__5_Sep_2021_22_40_59_+0900_gS=X3B6dJW9Klk3s--