From owner-freebsd-arch@FreeBSD.ORG Mon Mar 12 01:39:11 2012 Return-Path: Delivered-To: freebsd-arch@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 7A75D106566C for ; Mon, 12 Mar 2012 01:39:11 +0000 (UTC) (envelope-from matthewstory@gmail.com) Received: from mail-vx0-f182.google.com (mail-vx0-f182.google.com [209.85.220.182]) by mx1.freebsd.org (Postfix) with ESMTP id 21FFF8FC0C for ; Mon, 12 Mar 2012 01:39:10 +0000 (UTC) Received: by vcmm1 with SMTP id m1so4476241vcm.13 for ; Sun, 11 Mar 2012 18:39:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=XyHMvI2jh8xTcvTZqcX6EQZ6CAwlCQ5zfzRzMXsjpps=; b=Sf032+6mIMbWankp8Ih4Ap9rGbClRwS3Bx9oZJG1ok0kfcrPsqNusSNeoN7YTajrfV 0vl/aymTYdfxr9xVn/sxG5ew4WLZEKeyV59WgdkHZ/E1jHucP77Sh63WMs5eajG2EXZ/ 0VseyJSeP6vyZDH0BbLoB3gLRn307Bl3mdk2KU5KL3lJBbopnBVCp7FF0AI0M3LJcIHj cx75ItT/E3K/7jTyIqk+jjrqRqD3kP35Sr1ZmXYg3dbGhJ+5kUvdeGXxoWbCTvspesw0 iMpGCg/KLPMEo0YLzDE9/VW/3/w4QjfgTgecxGD/IS+onTGsGKXngPoDRo2CbiYbjfGx orng== MIME-Version: 1.0 Received: by 10.52.93.18 with SMTP id cq18mr13310412vdb.40.1331516344453; Sun, 11 Mar 2012 18:39:04 -0700 (PDT) Received: by 10.52.93.42 with HTTP; Sun, 11 Mar 2012 18:39:04 -0700 (PDT) In-Reply-To: References: <20120309225433.GA32725@stack.nl> Date: Sun, 11 Mar 2012 21:39:04 -0400 Message-ID: From: Matthew Story To: freebsd-arch@freebsd.org Content-Type: multipart/mixed; boundary=20cf3071c6aab94b5904bb01ce45 X-Content-Filtered-By: Mailman/MimeDel 2.1.5 Cc: Jilles Tjoelker Subject: Re: Change to xargs to avoid orphaning of utility processes on signal|exit 255 from child X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 12 Mar 2012 01:39:11 -0000 --20cf3071c6aab94b5904bb01ce45 Content-Type: text/plain; charset=ISO-8859-1 On Sat, Mar 10, 2012 at 1:23 PM, Matthew Story wrote: > On Fri, Mar 9, 2012 at 11:27 PM, Matthew Story wrote: > >> On Fri, Mar 9, 2012 at 6:13 PM, Matthew Story wrote: >> >>> On Fri, Mar 9, 2012 at 5:54 PM, Jilles Tjoelker wrote: >>> >>>> On Tue, Feb 21, 2012 at 12:50:19PM -0500, Matthew Story wrote: >>>> > On Thu, Feb 16, 2012 at 7:09 PM, Matthew Story < >>>> matthewstory@gmail.com>wrote: >>>> > > Apologies if this is the wrong list, I would like to submit a patch >>>> that >>>> > > changes the behavior of xargs(1) on signal to child utility process >>>> or >>>> > > child utility process exiting 255. The patch(es) is|are available >>>> here: >>>> >>>> [...snip] >>>> >>>> > This would cause xargs to wait on children if the command line cannot >>>> be >>>> > assembled, or utility cannot be invoked, in addition to the 2 cases >>>> covered >>>> > by the patch. This should leave termination via signal to the xargs >>>> >>> > process itself as the only outstanding case where xargs orphans >>>> utilities, >>>> > which is congruent with sh(1) behavior, and still allows for >>>> signaling all >>>> > processes via signal to the process group, if you actually desire to >>>> signal >>>> > all utility processes, along with xargs itself. Thoughts? >>>> >>>> I think that makes sense. >>>> >>>> I updated the patch to the recent changes in -current and changed a >>>> local from short to int: >>>> [...snip] >>> >>> changes look good to me, thanks for cleaning it up for -CURRENT. I >>> will provide an additional patch to cover waiting for the other 2 cases >>> (cannot assemble, or cannot invoke) later tonight after some more testing. >>> [...snip] >>> >> >> I believe I have finished removing the orphan cases for the assembly >> failure and invocation failure cases, updated patch attached for review, >> also available here >> >> >> http://axe0.blackskyresearch.net/patches/matt/xargs.no_orphan.full.patch.txt >> > > Updated this patch (also attached), to consolidate all waitchildren, exit > to use xexit, and tidied up a multiple warning condition on childerr to > warn only once while waiting to exit. > Sorry for the noisy updates, but i made the same branching mistake here as in my very first patch, let me know if there are any more issues with this one. (updated the above link, along with attachment). > > >> >> This patch includes the cleaned-up changes Jilles sent back earlier >> (thanks again). >> >> -- >> regards, >> matt >> > > > > -- > regards, > matt > -- regards, matt --20cf3071c6aab94b5904bb01ce45 Content-Type: text/plain; charset=US-ASCII; name="xargs.no_orphan.full.patch.txt" Content-Disposition: attachment; filename="xargs.no_orphan.full.patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gzoug4sf1 SW5kZXg6IHhhcmdzLjEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0geGFyZ3MuMQkocmV2aXNpb24gMjMyODQ1KQor KysgeGFyZ3MuMQkod29ya2luZyBjb3B5KQpAQCAtMjk0LDE3ICsyOTQsMTcgQEAKIC5BciB1dGls aXR5CiByZWFkcyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dC4KIC5QcAotVGhlCi0uTm0KLXV0aWxp dHkgZXhpdHMgaW1tZWRpYXRlbHkgKHdpdGhvdXQgcHJvY2Vzc2luZyBhbnkgZnVydGhlciBpbnB1 dCkgaWYgYQotY29tbWFuZCBsaW5lIGNhbm5vdCBiZSBhc3NlbWJsZWQsCitJZiBhIGNvbW1hbmQg bGluZSBjYW5ub3QgYmUgYXNzZW1ibGVkLCBvcgorY2Fubm90IGJlIGludm9rZWQsIG9yIGlmIGFu IGludm9jYXRpb24gb2YKIC5BciB1dGlsaXR5Ci1jYW5ub3QgYmUgaW52b2tlZCwgYW4gaW52b2Nh dGlvbiBvZgotLkFyIHV0aWxpdHkKIGlzIHRlcm1pbmF0ZWQgYnkgYSBzaWduYWwsCiBvciBhbiBp bnZvY2F0aW9uIG9mCiAuQXIgdXRpbGl0eQotZXhpdHMgd2l0aCBhIHZhbHVlIG9mIDI1NS4KK2V4 aXRzIHdpdGggYSB2YWx1ZSBvZiAyNTUsIHRoZQorLk5tCit1dGlsaXR5IHN0b3BzIHByb2Nlc3Np bmcgaW5wdXQgYW5kIGV4aXRzIGFmdGVyIGFsbCBpbnZvY2F0aW9ucyBvZgorLkFyIHV0aWxpdHkK K2ZpbmlzaCBwcm9jZXNzaW5nLgogLlNoIEVYSVQgU1RBVFVTCiBUaGUKIC5ObQpJbmRleDogeGFy Z3MuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ci0tLSB4YXJncy5jCShyZXZpc2lvbiAyMzI4NDUpCisrKyB4YXJncy5j CSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCw3IEBACiBzdGF0aWMgdm9pZAl1c2FnZSh2b2lk KTsKIHZvaWQJCXN0cm5zdWJzdChjaGFyICoqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwg c2l6ZV90KTsKIHN0YXRpYyBwaWRfdAl4d2FpdChpbnQgYmxvY2ssIGludCAqc3RhdHVzKTsKK3N0 YXRpYyB2b2lkCXhleGl0KGNvbnN0IGNoYXIgKiwgY29uc3QgaW50KTsKIHN0YXRpYyB2b2lkCXdh aXRjaGlsZHJlbihjb25zdCBjaGFyICosIGludCk7CiBzdGF0aWMgdm9pZAlwaWRzX2luaXQodm9p ZCk7CiBzdGF0aWMgaW50CXBpZHNfZW1wdHkodm9pZCk7CkBAIC0yODAsMTAgKzI4MSw4IEBACiAJ c3dpdGNoIChjaCA9IGdldGNoYXIoKSkgewogCWNhc2UgRU9GOgogCQkvKiBObyBhcmd1bWVudHMg c2luY2UgbGFzdCBleGVjLiAqLwotCQlpZiAocCA9PSBiYnApIHsKLQkJCXdhaXRjaGlsZHJlbigq YXYsIDEpOwotCQkJZXhpdChydmFsKTsKLQkJfQorCQlpZiAocCA9PSBiYnApCisJCQl4ZXhpdCgq YXYsIHJ2YWwpOwogCQlnb3RvIGFyZzE7CiAJY2FzZSAnICc6CiAJY2FzZSAnXHQnOgpAQCAtMzA4 LDggKzMwNywxMCBAQAogCQljb3VudCsrOwkgICAgLyogSW5kaWNhdGUgZW5kLW9mLWxpbmUgKHVz ZWQgYnkgLUwpICovCiAKIAkJLyogUXVvdGVzIGRvIG5vdCBlc2NhcGUgbmV3bGluZXMuICovCi1h cmcxOgkJaWYgKGluc2luZ2xlIHx8IGluZG91YmxlKQotCQkJZXJyeCgxLCAidW50ZXJtaW5hdGVk IHF1b3RlIik7CithcmcxOgkJaWYgKGluc2luZ2xlIHx8IGluZG91YmxlKSB7CisJCQl3YXJueCgi dW50ZXJtaW5hdGVkIHF1b3RlIik7CisJCQl4ZXhpdCgqYXYsIDEpOworCQl9CiBhcmcyOgogCQlm b3VuZGVvZiA9ICplb2ZzdHIgIT0gJ1wwJyAmJgogCQkgICAgc3RybmNtcChhcmdwLCBlb2ZzdHIs IHAgLSBhcmdwKSA9PSAwOwpAQCAtMzQyLDggKzM0MywxMCBAQAogCQkJCSAqLwogCQkJCWlucGxp bmUgPSByZWFsbG9jKGlucGxpbmUsIGN1cmxlbiArIDIgKwogCQkJCSAgICBzdHJsZW4oYXJncCkp OwotCQkJCWlmIChpbnBsaW5lID09IE5VTEwpCi0JCQkJCWVycngoMSwgInJlYWxsb2MgZmFpbGVk Iik7CisJCQkJaWYgKGlucGxpbmUgPT0gTlVMTCkgeworCQkJCQl3YXJueCgicmVhbGxvYyBmYWls ZWQiKTsKKwkJCQkJeGV4aXQoKmF2LCAxKTsKKwkJCQl9CiAJCQkJaWYgKGN1cmxlbiA9PSAxKQog CQkJCQlzdHJjcHkoaW5wbGluZSwgYXJncCk7CiAJCQkJZWxzZQpAQCAtMzYwLDE3ICszNjMsMTcg QEAKIAkJICovCiAJCWlmICh4cCA9PSBlbmR4cCB8fCBwID4gZWJwIHx8IGNoID09IEVPRiB8fAog CQkgICAgKExmbGFnIDw9IGNvdW50ICYmIHhmbGFnKSB8fCBmb3VuZGVvZikgewotCQkJaWYgKHhm bGFnICYmIHhwICE9IGVuZHhwICYmIHAgPiBlYnApCi0JCQkJZXJyeCgxLCAiaW5zdWZmaWNpZW50 IHNwYWNlIGZvciBhcmd1bWVudHMiKTsKKwkJCWlmICh4ZmxhZyAmJiB4cCAhPSBlbmR4cCAmJiBw ID4gZWJwKSB7CisJCQkJd2FybngoImluc3VmZmljaWVudCBzcGFjZSBmb3IgYXJndW1lbnRzIik7 CisJCQkJeGV4aXQoKmF2LCAxKTsKKwkJCX0KIAkJCWlmIChqZm91bmQpIHsKIAkJCQlmb3IgKGF2 aiA9IGFyZ3Y7ICphdmo7IGF2aisrKQogCQkJCQkqeHArKyA9ICphdmo7CiAJCQl9CiAJCQlwcmVy dW4oYXJnYywgYXYpOwotCQkJaWYgKGNoID09IEVPRiB8fCBmb3VuZGVvZikgewotCQkJCXdhaXRj aGlsZHJlbigqYXYsIDEpOwotCQkJCWV4aXQocnZhbCk7Ci0JCQl9CisJCQlpZiAoY2ggPT0gRU9G IHx8IGZvdW5kZW9mKQorCQkJCXhleGl0KCphdiwgcnZhbCk7CiAJCQlwID0gYmJwOwogCQkJeHAg PSBieHA7CiAJCQljb3VudCA9IDA7CkBAIC0zOTQsOCArMzk3LDEwIEBACiAJCWlmICh6ZmxhZykK IAkJCWdvdG8gYWRkY2g7CiAJCS8qIEJhY2tzbGFzaCBlc2NhcGVzIGFueXRoaW5nLCBpcyBlc2Nh cGVkIGJ5IHF1b3Rlcy4gKi8KLQkJaWYgKCFpbnNpbmdsZSAmJiAhaW5kb3VibGUgJiYgKGNoID0g Z2V0Y2hhcigpKSA9PSBFT0YpCi0JCQllcnJ4KDEsICJiYWNrc2xhc2ggYXQgRU9GIik7CisJCWlm ICghaW5zaW5nbGUgJiYgIWluZG91YmxlICYmIChjaCA9IGdldGNoYXIoKSkgPT0gRU9GKSB7CisJ CQl3YXJueCgiYmFja3NsYXNoIGF0IEVPRiIpOworCQkJeGV4aXQoKmF2LCAxKTsKKwkJfQogCQkv KiBGQUxMVEhST1VHSCAqLwogCWRlZmF1bHQ6CiBhZGRjaDoJCWlmIChwIDwgZWJwKSB7CkBAIC00 MDQsMTEgKzQwOSwxNSBAQAogCQl9CiAKIAkJLyogSWYgb25seSBvbmUgYXJndW1lbnQsIG5vdCBl bm91Z2ggYnVmZmVyIHNwYWNlLiAqLwotCQlpZiAoYnhwID09IHhwKQotCQkJZXJyeCgxLCAiaW5z dWZmaWNpZW50IHNwYWNlIGZvciBhcmd1bWVudCIpOworCQlpZiAoYnhwID09IHhwKSB7CisJCQl3 YXJueCgiaW5zdWZmaWNpZW50IHNwYWNlIGZvciBhcmd1bWVudCIpOworCQkJeGV4aXQoKmF2LCAx KTsKKwkJfQogCQkvKiBEaWRuJ3QgaGl0IGFyZ3VtZW50IGxpbWl0LCBzbyBpZiB4ZmxhZyBvYmpl Y3QuICovCi0JCWlmICh4ZmxhZykKLQkJCWVycngoMSwgImluc3VmZmljaWVudCBzcGFjZSBmb3Ig YXJndW1lbnRzIik7CisJCWlmICh4ZmxhZykgeworCQkJd2FybngoImluc3VmZmljaWVudCBzcGFj ZSBmb3IgYXJndW1lbnRzIik7CisJCQl4ZXhpdCgqYXYsIDEpOworCQl9CiAKIAkJaWYgKGpmb3Vu ZCkgewogCQkJZm9yIChhdmogPSBhcmd2OyAqYXZqOyBhdmorKykKQEAgLTQ0OSwxNiArNDU4LDIw IEBACiAJICogYSBOVUxMIGF0IHRoZSB0YWlsLgogCSAqLwogCXRtcCA9IG1hbGxvYygoYXJnYyAr IDEpICogc2l6ZW9mKGNoYXIqKikpOwotCWlmICh0bXAgPT0gTlVMTCkKLQkJZXJyeCgxLCAibWFs bG9jIGZhaWxlZCIpOworCWlmICh0bXAgPT0gTlVMTCkgeworCQl3YXJueCgibWFsbG9jIGZhaWxl ZCIpOworCQl4ZXhpdCgqYXJndiwgMSk7CisJfQogCXRtcDIgPSB0bXA7CiAKIAkvKgogCSAqIFNh dmUgdGhlIGZpcnN0IGFyZ3VtZW50IGFuZCBpdGVyYXRlIG92ZXIgaXQsIHdlCiAJICogY2Fubm90 IGRvIHN0cm5zdWJzdCgpIHRvIGl0LgogCSAqLwotCWlmICgoKnRtcCsrID0gc3RyZHVwKCphdmor KykpID09IE5VTEwpCi0JCWVycngoMSwgInN0cmR1cCBmYWlsZWQiKTsKKwlpZiAoKCp0bXArKyA9 IHN0cmR1cCgqYXZqKyspKSA9PSBOVUxMKSB7CisJCXdhcm54KCJzdHJkdXAgZmFpbGVkIik7CisJ CXhleGl0KCphcmd2LCAxKTsKKwl9CiAKIAkvKgogCSAqIEZvciBlYWNoIGFyZ3VtZW50IHRvIHV0 aWxpdHksIGlmIHdlIGhhdmUgbm90IHVzZWQgdXAKQEAgLTQ3NSw4ICs0ODgsMTAgQEAKIAkJCWlm IChyZXBscyA+IDApCiAJCQkJcmVwbHMtLTsKIAkJfSBlbHNlIHsKLQkJCWlmICgoKnRtcCA9IHN0 cmR1cCgqdG1wKSkgPT0gTlVMTCkKLQkJCQllcnJ4KDEsICJzdHJkdXAgZmFpbGVkIik7CisJCQlp ZiAoKCp0bXAgPSBzdHJkdXAoKnRtcCkpID09IE5VTEwpIHsKKwkJCQl3YXJueCgic3RyZHVwIGZh aWxlZCIpOworCQkJCXhleGl0KCphcmd2LCAxKTsKKwkJCX0KIAkJCXRtcCsrOwogCQl9CiAJfQpA QCAtNTQ3LDcgKzU2Miw4IEBACiAJY2hpbGRlcnIgPSAwOwogCXN3aXRjaCAocGlkID0gdmZvcmso KSkgewogCWNhc2UgLTE6Ci0JCWVycigxLCAidmZvcmsiKTsKKwkJd2FybigidmZvcmsiKTsKKwkJ eGV4aXQoKmFyZ3YsIDEpOwogCWNhc2UgMDoKIAkJaWYgKG9mbGFnKSB7CiAJCQlpZiAoKGZkID0g b3BlbihfUEFUSF9UVFksIE9fUkRPTkxZKSkgPT0gLTEpCkBAIC01OTMsMjYgKzYwOSw0NSBAQAog fQogCiBzdGF0aWMgdm9pZAoreGV4aXQoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgaW50IGV4aXRf Y29kZSkgeworCXdhaXRjaGlsZHJlbihuYW1lLCAxKTsKKwlleGl0KGV4aXRfY29kZSk7Cit9CisK K3N0YXRpYyB2b2lkCiB3YWl0Y2hpbGRyZW4oY29uc3QgY2hhciAqbmFtZSwgaW50IHdhaXRhbGwp CiB7CiAJcGlkX3QgcGlkOwogCWludCBzdGF0dXM7CisJaW50IGNhdXNlX2V4aXQgPSAwOwogCiAJ d2hpbGUgKChwaWQgPSB4d2FpdCh3YWl0YWxsIHx8IHBpZHNfZnVsbCgpLCAmc3RhdHVzKSkgPiAw KSB7Ci0JCS8qIElmIHdlIGNvdWxkbid0IGludm9rZSB0aGUgdXRpbGl0eSwgZXhpdC4gKi8KLQkJ aWYgKGNoaWxkZXJyICE9IDApIHsKKwkJLyoKKwkJICogSWYgd2UgY291bGRuJ3QgaW52b2tlIHRo ZSB1dGlsaXR5IG9yIGlmIHV0aWxpdHkgZXhpdGVkIGJlY2F1c2Ugb2YgYQorCQkgKiBzaWduYWwg b3Igd2l0aCBhIHZhbHVlIG9mIDI1NSwgd2FybiAocGVyIFBPU0lYKSwgYW5kIHRoZW4gd2FpdCB1 bnRpbAorCQkgKiBhbGwgb3RoZXIgY2hpbGRyZW4gaGF2ZSBleGl0ZWQgYmVmb3JlIGV4aXRpbmcg MS0xMjUuIFBPU0lYIHJlcXVpcmVzCisJCSAqIHhhcmdzIHRvIHN0b3AgcmVhZGluZyBpZiBjaGls ZCBleGl0cyBiZWNhdXNlIG9mIGEgc2lnbmFsIG9yICogd2l0aAorCQkgKiAyNTUsIGJ1dCBpdCBk b2VzIG5vdCByZXF1aXJlIHVzIHRvIGV4aXQgaW1tZWRpYXRlbHk7IHdhaXRpbmcgaXMKKwkJICog cHJlZmVyYWJsZSB0byBvcnBoYW5pbmcuCisJCSAqLworCQlpZiAoY2hpbGRlcnIgIT0gMCAmJiBj YXVzZV9leGl0ID09IDApIHsKIAkJCWVycm5vID0gY2hpbGRlcnI7Ci0JCQllcnIoZXJybm8gPT0g RU5PRU5UID8gMTI3IDogMTI2LCAiJXMiLCBuYW1lKTsKLQkJfQotCQlpZiAoV0lGU0lHTkFMRUQo c3RhdHVzKSkKLQkJCWVycngoMSwgIiVzOiB0ZXJtaW5hdGVkIHdpdGggc2lnbmFsICVkOyBhYm9y dGluZyIsCisJCQl3YWl0YWxsID0gMTsKKwkJCWNhdXNlX2V4aXQgPSBFTk9FTlQgPyAxMjcgOiAx MjY7CisJCQl3YXJuKCIlcyIsIG5hbWUpOworCQl9IGVsc2UgaWYgKFdJRlNJR05BTEVEKHN0YXR1 cykpIHsKKwkJCXdhaXRhbGwgPSBjYXVzZV9leGl0ID0gMTsKKwkJCXdhcm54KCIlczogdGVybWlu YXRlZCB3aXRoIHNpZ25hbCAlZDsgYWJvcnRpbmciLAogCQkJICAgIG5hbWUsIFdURVJNU0lHKHN0 YXR1cykpOwotCQlpZiAoV0VYSVRTVEFUVVMoc3RhdHVzKSA9PSAyNTUpCi0JCQllcnJ4KDEsICIl czogZXhpdGVkIHdpdGggc3RhdHVzIDI1NTsgYWJvcnRpbmciLCBuYW1lKTsKLQkJaWYgKFdFWElU U1RBVFVTKHN0YXR1cykpCi0JCQlydmFsID0gMTsKKwkJfSBlbHNlIGlmIChXRVhJVFNUQVRVUyhz dGF0dXMpID09IDI1NSkgeworCQkJd2FpdGFsbCA9IGNhdXNlX2V4aXQgPSAxOworCQkJd2Fybngo IiVzOiBleGl0ZWQgd2l0aCBzdGF0dXMgMjU1OyBhYm9ydGluZyIsIG5hbWUpOworCQl9IGVsc2Ug aWYgKFdFWElUU1RBVFVTKHN0YXR1cykpCisgCQkJcnZhbCA9IDE7CiAJfQogCisgCWlmIChjYXVz ZV9leGl0KQorCQlleGl0KGNhdXNlX2V4aXQpOwogCWlmIChwaWQgPT0gLTEgJiYgZXJybm8gIT0g RUNISUxEKQogCQllcnIoMSwgIndhaXRwaWQiKTsKIH0K --20cf3071c6aab94b5904bb01ce45--