Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1q2anr-0002fF-3n for pgsql-hackers@arkaria.postgresql.org; Fri, 26 May 2023 17:00:35 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1q2anp-0006dJ-Nr for pgsql-hackers@arkaria.postgresql.org; Fri, 26 May 2023 17:00:33 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1q2anp-0006dA-C0 for pgsql-hackers@lists.postgresql.org; Fri, 26 May 2023 17:00:33 +0000 Received: from mail-oa1-x30.google.com ([2001:4860:4864:20::30]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1q2anh-002Iz3-U5 for pgsql-hackers@lists.postgresql.org; Fri, 26 May 2023 17:00:32 +0000 Received: by mail-oa1-x30.google.com with SMTP id 586e51a60fabf-19e69a8c58bso494167fac.3 for ; Fri, 26 May 2023 10:00:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1685120424; x=1687712424; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=Q9+z3pmQGT+rpe87lD0yED5sfWOYNZuYCvHxLOIrEZk=; b=gkSAmU0AxacYdoc/0unHu0nJhq0+5Fg4o3izwWJs8umWLgVtWGXQjKCsPuJtK3XPec AqXFn0a7gPzVg2cNsty3DPp0WbgooFplldTZ69MxMZ2RyVVc/xgNk4Nv46lnNjDD3ORL p9kIYu7YORf9GOY5O1wIMTyrjzWuQ+sXvgY+zJjiSCE4MDN55fbKKqxTPZYnWofr848k 0mkBBSUEtqq8Kal7oA87ibxYvg6phJXtgMawQhixNcq8tTqQ609Y6BvpVAabacl9hl8P C/6bvGsVq7NIhG2LcK7VTwOvhTnGq9cabx5B9vwIkAXjO9e2x61xmHKxh1S8chYRc6+n DzLg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685120424; x=1687712424; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=Q9+z3pmQGT+rpe87lD0yED5sfWOYNZuYCvHxLOIrEZk=; b=T2NX/X3op8SZr3CDtFvUXRBFz0Y9HetVoF/DWenF+khLVxDFr7uup58ArFXDkoIZ+n L2ZVYARFCElyjj51VO4bB7tt2uwrHMcdlPzIk08QJQNBxh2k57u2y2hwjK53b85Rf9iy 6aADi1KTPZynsyzTqazeEPDUhZ3ZS81J+NURXjgRoyIQi2pz10DkAM6ZCmOgerLJCmgT TZ8f34rRGr0x3v5qySpbEk6ZFmv30xX42sDU/0HqiF1MwmNpb4o6nYQxptgJY18DHrxs JzSveqUbzfScKIKFAyMpbSsCXSEuMWsFEjtnubyc/VbfUSvX3cdqNQ1gMA0oisnzJYfI UV1Q== X-Gm-Message-State: AC+VfDy0MZ7Y2WPBAQ7fDacYvNLeeG5f0K1fi5QAIQlK6IUdzBUMVRZ8 mztlJ2vcbJ6WRK1UFKQlCNSvVuuwGXrMna5z5/QfxnEX X-Google-Smtp-Source: ACHHUZ6NW8IX+KMTu6EDVcIfv9j60rxriNdkM4cf8eTyrMl+eJ+XR1uRe1G8j6/hz3Oke44bovjrXwUlfTntuBoQUIs= X-Received: by 2002:a05:6870:703:b0:19a:1a20:198a with SMTP id ea3-20020a056870070300b0019a1a20198amr1421984oab.7.1685120424372; Fri, 26 May 2023 10:00:24 -0700 (PDT) MIME-Version: 1.0 References: <87cz2otiw3.fsf@wibble.ilmari.org> In-Reply-To: <87cz2otiw3.fsf@wibble.ilmari.org> From: vignesh C Date: Fri, 26 May 2023 22:30:12 +0530 Message-ID: Subject: Re: Implement generalized sub routine find_in_log for tap test To: =?UTF-8?Q?Dagfinn_Ilmari_Manns=C3=A5ker?= Cc: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="0000000000004d113b05fc9bac71" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000004d113b05fc9bac71 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, 25 May 2023 at 23:04, Dagfinn Ilmari Manns=C3=A5ker wrote: > > vignesh C writes: > > > Hi, > > > > The recovery tap test has 4 implementations of find_in_log sub routine > > for various uses, I felt we can generalize these and have a single > > function for the same. The attached patch is an attempt to have a > > generalized sub routine find_in_log which can be used by all of them. > > Thoughts? > > +1 on factoring out this common code. Just a few comments on the implemen= tation. > > > > diff --git a/src/test/perl/PostgreSQL/Test/Utils.pm b/src/test/perl/Pos= tgreSQL/Test/Utils.pm > > index a27fac83d2..5c9b2f6c03 100644 > > --- a/src/test/perl/PostgreSQL/Test/Utils.pm > > +++ b/src/test/perl/PostgreSQL/Test/Utils.pm > > @@ -67,6 +67,7 @@ our @EXPORT =3D qw( > > slurp_file > > append_to_file > > string_replace_file > > + find_in_log > > check_mode_recursive > > chmod_recursive > > check_pg_config > > @@ -579,6 +580,28 @@ sub string_replace_file > > > > =3Dpod > > > > + > > +=3Ditem find_in_log(node, pattern, offset) > > + > > +Find pattern in logfile of node after offset byte. > > + > > +=3Dcut > > + > > +sub find_in_log > > +{ > > + my ($node, $pattern, $offset) =3D @_; > > + > > + $offset =3D 0 unless defined $offset; > > + my $log =3D PostgreSQL::Test::Utils::slurp_file($node->logfile); > > Since this function is in the same package, there's no need to qualify > it with the full name. I know the callers you copied it from did, but > they wouldn't have had to either, since it's exported by default (in the > @EXPORT array above), unless the use statement has an explicit argument > list that excludes it. I have moved this function to Cluster.pm file now, since it is moved, I had to qualify the name with the full name. > > + return 0 if (length($log) <=3D 0 || length($log) <=3D $offset); > > + > > + $log =3D substr($log, $offset); > > Also, the existing callers don't seem to have got the memo that > slurp_file() takes an optinal offset parameter, which will cause it to > seek to that postion before slurping the file, which is more efficient > than reading the whole file in and substr-ing it. There's not much > point in the length checks either, since regex-matching against an empty > string is very cheap (and if the provide pattern can match the empty > string the whole function call is rather pointless). > > > + return $log =3D~ m/$pattern/; > > +} > > All in all, it could be simplified to: > > sub find_in_log { > my ($node, $pattern, $offset) =3D @_; > > return slurp_file($node->logfile, $offset) =3D~ $pattern; > } Modified in similar lines > However, none of the other functions in ::Utils know anything about node > objects, which makes me think it should be a method on the node itself > (i.e. in PostgreSQL::Test::Cluster) instead. Also, I think log_contains > would be a better name, since it just returns a boolean. The name > find_in_log makes me think it would return the log lines matching the > pattern, or the position of the match in the file. Modified > In that case, the slurp_file() call would have to be fully qualified, > since ::Cluster uses an empty import list to avoid polluting the method > namespace with imported functions. Modified. Thanks for the comments, the attached v2 version patch has the changes for the same. Regards, Vignesh --0000000000004d113b05fc9bac71 Content-Type: text/x-patch; charset="US-ASCII"; name="v2-0001-Remove-duplicate-find_in_log-sub-routines-from-ta.patch" Content-Disposition: attachment; filename="v2-0001-Remove-duplicate-find_in_log-sub-routines-from-ta.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_li4t1ndi0 RnJvbSA4ZGYwNmQyMzNkZTRlNWI1YWJlN2E0ZGQ0YmMzMTRjMjE1YjJkZmMyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBWaWduZXNoIEMgPHZpZ25lc2gyMUBnbWFpbC5jb20+CkRhdGU6 IEZyaSwgMjYgTWF5IDIwMjMgMjA6MDc6MzAgKzA1MzAKU3ViamVjdDogW1BBVENIIHYyXSBSZW1v dmUgZHVwbGljYXRlIGZpbmRfaW5fbG9nIHN1YiByb3V0aW5lcyBmcm9tIHRhcCB0ZXN0cy4KClJl bW92ZSBkdXBsaWNhdGUgZmluZF9pbl9sb2cgc3ViIHJvdXRpbmVzIGZyb20gdGFwIHRlc3RzLgot LS0KIHNyYy90ZXN0L2F1dGhlbnRpY2F0aW9uL3QvMDAzX3BlZXIucGwgICAgICAgICB8IDE3ICsr LS0tLS0tLS0KIHNyYy90ZXN0L3BlcmwvUG9zdGdyZVNRTC9UZXN0L0NsdXN0ZXIucG0gICAgICB8 IDE2ICsrKysrKysrKwogc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMTlfcmVwbHNsb3RfbGltaXQucGwg ICAgIHwgMzMgKysrKystLS0tLS0tLS0tLS0tLQogc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMzNfcmVw bGF5X3RzcF9kcm9wcy5wbCAgIHwgMTUgKystLS0tLS0tCiAuLi4vdC8wMzVfc3RhbmRieV9sb2dp Y2FsX2RlY29kaW5nLnBsICAgICAgICAgfCAyNiArKystLS0tLS0tLS0tLS0KIDUgZmlsZXMgY2hh bmdlZCwgMzMgaW5zZXJ0aW9ucygrKSwgNzQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvYXV0aGVudGljYXRpb24vdC8wMDNfcGVlci5wbCBiL3NyYy90ZXN0L2F1dGhlbnRpY2F0 aW9uL3QvMDAzX3BlZXIucGwKaW5kZXggMzI3MmU1MmNhZS4uMmEwMzVjMmQwZCAxMDA2NDQKLS0t IGEvc3JjL3Rlc3QvYXV0aGVudGljYXRpb24vdC8wMDNfcGVlci5wbAorKysgYi9zcmMvdGVzdC9h dXRoZW50aWNhdGlvbi90LzAwM19wZWVyLnBsCkBAIC02OSwxNyArNjksNiBAQCBzdWIgdGVzdF9y b2xlCiAJfQogfQogCi0jIEZpbmQgJHBhdHRlcm4gaW4gbG9nIGZpbGUgb2YgJG5vZGUuCi1zdWIg ZmluZF9pbl9sb2cKLXsKLQlteSAoJG5vZGUsICRvZmZzZXQsICRwYXR0ZXJuKSA9IEBfOwotCi0J bXkgJGxvZyA9IFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjpzbHVycF9maWxlKCRub2RlLT5sb2dm aWxlLCAkb2Zmc2V0KTsKLQlyZXR1cm4gMCBpZiAobGVuZ3RoKCRsb2cpIDw9IDApOwotCi0JcmV0 dXJuICRsb2cgPX4gbS8kcGF0dGVybi87Ci19Ci0KIG15ICRub2RlID0gUG9zdGdyZVNRTDo6VGVz dDo6Q2x1c3Rlci0+bmV3KCdub2RlJyk7CiAkbm9kZS0+aW5pdDsKICRub2RlLT5hcHBlbmRfY29u ZigncG9zdGdyZXNxbC5jb25mJywgImxvZ19jb25uZWN0aW9ucyA9IG9uXG4iKTsKQEAgLTkxLDkg KzgwLDkgQEAgcmVzZXRfcGdfaGJhKCRub2RlLCAncGVlcicpOwogIyBDaGVjayBpZiBwZWVyIGF1 dGhlbnRpY2F0aW9uIGlzIHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtLgogbXkgJGxvZ19vZmZz ZXQgPSAtcyAkbm9kZS0+bG9nZmlsZTsKICRub2RlLT5wc3FsKCdwb3N0Z3JlcycpOwotaWYgKGZp bmRfaW5fbG9nKAotCQkkbm9kZSwgJGxvZ19vZmZzZXQsCi0JCXFyL3BlZXIgYXV0aGVudGljYXRp b24gaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtLykpCitpZiAoJG5vZGUtPmxvZ19j b250YWlucygKKwkJcXIvcGVlciBhdXRoZW50aWNhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIG9uIHRo aXMgcGxhdGZvcm0vKSwKKwkJJGxvZ19vZmZzZXQsKQogewogCXBsYW4gc2tpcF9hbGwgPT4gJ3Bl ZXIgYXV0aGVudGljYXRpb24gaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtJzsKIH0K ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3BlcmwvUG9zdGdyZVNRTC9UZXN0L0NsdXN0ZXIucG0gYi9z cmMvdGVzdC9wZXJsL1Bvc3RncmVTUUwvVGVzdC9DbHVzdGVyLnBtCmluZGV4IGJhZWEwZmNkMWMu LmYxMGU0NGJhNTEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3BlcmwvUG9zdGdyZVNRTC9UZXN0L0Ns dXN0ZXIucG0KKysrIGIvc3JjL3Rlc3QvcGVybC9Qb3N0Z3JlU1FML1Rlc3QvQ2x1c3Rlci5wbQpA QCAtMjUzNiw2ICsyNTM2LDIyIEBAIHN1YiBsb2dfY29udGVudAogfQogCiAKKz1wb2QKKworPWl0 ZW0gbG9nX2NvbnRhaW5zKHBhdHRlcm4sIG9mZnNldCkKKworRmluZCBwYXR0ZXJuIGluIGxvZ2Zp bGUgb2Ygbm9kZSBhZnRlciBvZmZzZXQgYnl0ZS4KKworPWN1dAorCitzdWIgbG9nX2NvbnRhaW5z Cit7CisJbXkgKCRzZWxmLCAkcGF0dGVybiwgJG9mZnNldCkgPSBAXzsKKworCSRvZmZzZXQgPSAw IHVubGVzcyBkZWZpbmVkICRvZmZzZXQ7CisJcmV0dXJuIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxz OjpzbHVycF9maWxlKCRzZWxmLT5sb2dmaWxlLCAkb2Zmc2V0KSA9fiBtLyRwYXR0ZXJuLzsKK30K KwogPXBvZAogCiA9aXRlbSAkbm9kZS0+cnVuX2xvZyguLi4pCmRpZmYgLS1naXQgYS9zcmMvdGVz dC9yZWNvdmVyeS90LzAxOV9yZXBsc2xvdF9saW1pdC5wbCBiL3NyYy90ZXN0L3JlY292ZXJ5L3Qv MDE5X3JlcGxzbG90X2xpbWl0LnBsCmluZGV4IGExYWJhMTZlMTQuLjk1YWNmOWUzNTcgMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDE5X3JlcGxzbG90X2xpbWl0LnBsCisrKyBiL3Ny Yy90ZXN0L3JlY292ZXJ5L3QvMDE5X3JlcGxzbG90X2xpbWl0LnBsCkBAIC0xNjEsOCArMTYxLDcg QEAgJG5vZGVfcHJpbWFyeS0+d2FpdF9mb3JfY2F0Y2h1cCgkbm9kZV9zdGFuZGJ5KTsKIAogJG5v ZGVfc3RhbmRieS0+c3RvcDsKIAotb2soICFmaW5kX2luX2xvZygKLQkJJG5vZGVfc3RhbmRieSwK K29rKCAhJG5vZGVfc3RhbmRieS0+bG9nX2NvbnRhaW5zKAogCQkicmVxdWVzdGVkIFdBTCBzZWdt ZW50IFswLTlBLUZdKyBoYXMgYWxyZWFkeSBiZWVuIHJlbW92ZWQiKSwKIAknY2hlY2sgdGhhdCBy ZXF1aXJlZCBXQUwgc2VnbWVudHMgYXJlIHN0aWxsIGF2YWlsYWJsZScpOwogCkBAIC0xODQsOCAr MTgzLDggQEAgJG5vZGVfcHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDSEVDS1BPSU5U OyIpOwogbXkgJGludmFsaWRhdGVkID0gMDsKIGZvciAobXkgJGkgPSAwOyAkaSA8IDEwICogJFBv c3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0aW1lb3V0X2RlZmF1bHQ7ICRpKyspCiB7Ci0JaWYgKGZp bmRfaW5fbG9nKAotCQkJJG5vZGVfcHJpbWFyeSwgJ2ludmFsaWRhdGluZyBvYnNvbGV0ZSByZXBs aWNhdGlvbiBzbG90ICJyZXAxIicsCisJaWYgKCRub2RlX3ByaW1hcnktPmxvZ19jb250YWlucygK KwkJCSdpbnZhbGlkYXRpbmcgb2Jzb2xldGUgcmVwbGljYXRpb24gc2xvdCAicmVwMSInLAogCQkJ JGxvZ3N0YXJ0KSkKIAl7CiAJCSRpbnZhbGlkYXRlZCA9IDE7CkBAIC0yMDcsNyArMjA2LDcgQEAg aXMoJHJlc3VsdCwgInJlcDF8Znx0fGxvc3R8IiwKIG15ICRjaGVja3BvaW50X2VuZGVkID0gMDsK IGZvciAobXkgJGkgPSAwOyAkaSA8IDEwICogJFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0aW1l b3V0X2RlZmF1bHQ7ICRpKyspCiB7Ci0JaWYgKGZpbmRfaW5fbG9nKCRub2RlX3ByaW1hcnksICJj aGVja3BvaW50IGNvbXBsZXRlOiAiLCAkbG9nc3RhcnQpKQorCWlmICgkbm9kZV9wcmltYXJ5LT5s b2dfY29udGFpbnMoImNoZWNrcG9pbnQgY29tcGxldGU6ICIsICRsb2dzdGFydCkpCiAJewogCQkk Y2hlY2twb2ludF9lbmRlZCA9IDE7CiAJCWxhc3Q7CkBAIC0yMzcsOCArMjM2LDcgQEAgJG5vZGVf c3RhbmRieS0+c3RhcnQ7CiBteSAkZmFpbGVkID0gMDsKIGZvciAobXkgJGkgPSAwOyAkaSA8IDEw ICogJFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0aW1lb3V0X2RlZmF1bHQ7ICRpKyspCiB7Ci0J aWYgKGZpbmRfaW5fbG9nKAotCQkJJG5vZGVfc3RhbmRieSwKKwlpZiAoJG5vZGVfc3RhbmRieS0+ bG9nX2NvbnRhaW5zKAogCQkJInJlcXVlc3RlZCBXQUwgc2VnbWVudCBbMC05QS1GXSsgaGFzIGFs cmVhZHkgYmVlbiByZW1vdmVkIiwKIAkJCSRsb2dzdGFydCkpCiAJewpAQCAtMzgxLDggKzM3OSw3 IEBAIG15ICRtc2dfbG9nZ2VkID0gMDsKIG15ICRtYXhfYXR0ZW1wdHMgPSAkUG9zdGdyZVNRTDo6 VGVzdDo6VXRpbHM6OnRpbWVvdXRfZGVmYXVsdDsKIHdoaWxlICgkbWF4X2F0dGVtcHRzLS0gPj0g MCkKIHsKLQlpZiAoZmluZF9pbl9sb2coCi0JCQkkbm9kZV9wcmltYXJ5MywKKwlpZiAoJG5vZGVf cHJpbWFyeTMtPmxvZ19jb250YWlucygKIAkJCSJ0ZXJtaW5hdGluZyBwcm9jZXNzICRzZW5kZXJw aWQgdG8gcmVsZWFzZSByZXBsaWNhdGlvbiBzbG90IFwicmVwM1wiIiwKIAkJCSRsb2dzdGFydCkp CiAJewpAQCAtNDA2LDggKzQwMyw4IEBAICRtc2dfbG9nZ2VkID0gMDsKICRtYXhfYXR0ZW1wdHMg PSAkUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM6OnRpbWVvdXRfZGVmYXVsdDsKIHdoaWxlICgkbWF4 X2F0dGVtcHRzLS0gPj0gMCkKIHsKLQlpZiAoZmluZF9pbl9sb2coCi0JCQkkbm9kZV9wcmltYXJ5 MywgJ2ludmFsaWRhdGluZyBvYnNvbGV0ZSByZXBsaWNhdGlvbiBzbG90ICJyZXAzIicsCisJaWYg KCRub2RlX3ByaW1hcnkzLT5sb2dfY29udGFpbnMoCisJCQknaW52YWxpZGF0aW5nIG9ic29sZXRl IHJlcGxpY2F0aW9uIHNsb3QgInJlcDMiJywKIAkJCSRsb2dzdGFydCkpCiAJewogCQkkbXNnX2xv Z2dlZCA9IDE7CkBAIC00NDYsMTggKzQ0Myw0IEBAIHN1YiBnZXRfbG9nX3NpemUKIAlyZXR1cm4g KHN0YXQgJG5vZGUtPmxvZ2ZpbGUpWzddOwogfQogCi0jIGZpbmQgJHBhdCBpbiBsb2dmaWxlIG9m ICRub2RlIGFmdGVyICRvZmYtdGggYnl0ZQotc3ViIGZpbmRfaW5fbG9nCi17Ci0JbXkgKCRub2Rl LCAkcGF0LCAkb2ZmKSA9IEBfOwotCi0JJG9mZiA9IDAgdW5sZXNzIGRlZmluZWQgJG9mZjsKLQlt eSAkbG9nID0gUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM6OnNsdXJwX2ZpbGUoJG5vZGUtPmxvZ2Zp bGUpOwotCXJldHVybiAwIGlmIChsZW5ndGgoJGxvZykgPD0gJG9mZik7Ci0KLQkkbG9nID0gc3Vi c3RyKCRsb2csICRvZmYpOwotCi0JcmV0dXJuICRsb2cgPX4gbS8kcGF0LzsKLX0KLQogZG9uZV90 ZXN0aW5nKCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWNvdmVyeS90LzAzM19yZXBsYXlfdHNw X2Ryb3BzLnBsIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMzNfcmVwbGF5X3RzcF9kcm9wcy5wbApp bmRleCAwYTM1YTdiZGE2Li4zMDdjMzBiYzZiIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWNvdmVy eS90LzAzM19yZXBsYXlfdHNwX2Ryb3BzLnBsCisrKyBiL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDMz X3JlcGxheV90c3BfZHJvcHMucGwKQEAgLTEzNSwyMiArMTM1LDExIEBAIHdoaWxlICgkbWF4X2F0 dGVtcHRzLS0gPj0gMCkKIHsKIAlsYXN0CiAJICBpZiAoCi0JCWZpbmRfaW5fbG9nKAotCQkJJG5v ZGVfc3RhbmRieSwKKwkJJG5vZGVfc3RhbmRieS0+bG9nX2NvbnRhaW5zKAogCQkJcXIhV0FSTklO RzogKCBbQS1aMC05XSs6KT8gY3JlYXRpbmcgbWlzc2luZyBkaXJlY3Rvcnk6IHBnX3RibHNwYy8h LAogCQkJJGxvZ3N0YXJ0KSk7CiAJdXNsZWVwKDEwMF8wMDApOwogfQogb2soJG1heF9hdHRlbXB0 cyA+IDAsICJpbnZhbGlkIGRpcmVjdG9yeSBjcmVhdGlvbiBpcyBkZXRlY3RlZCIpOwogCi1kb25l X3Rlc3RpbmcoKTsKLQotIyBmaW5kICRwYXQgaW4gbG9nZmlsZSBvZiAkbm9kZSBhZnRlciAkb2Zm LXRoIGJ5dGUKLXN1YiBmaW5kX2luX2xvZwotewotCW15ICgkbm9kZSwgJHBhdCwgJG9mZikgPSBA XzsKLQotCW15ICRsb2cgPSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6c2x1cnBfZmlsZSgkbm9k ZS0+bG9nZmlsZSwgJG9mZik7Ci0KLQlyZXR1cm4gJGxvZyA9fiBtLyRwYXQvOwotfQorZG9uZV90 ZXN0aW5nKCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvcmVjb3ZlcnkvdC8wMzVfc3RhbmRieV9sb2dpY2FsX2RlY29kaW5nLnBsIGIvc3JjL3Rlc3Qv cmVjb3ZlcnkvdC8wMzVfc3RhbmRieV9sb2dpY2FsX2RlY29kaW5nLnBsCmluZGV4IDY0YmVlYzRi ZDMuLjQ4MGU2ZDZjYWEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDM1X3N0YW5k YnlfbG9naWNhbF9kZWNvZGluZy5wbAorKysgYi9zcmMvdGVzdC9yZWNvdmVyeS90LzAzNV9zdGFu ZGJ5X2xvZ2ljYWxfZGVjb2RpbmcucGwKQEAgLTI4LDIwICsyOCw2IEBAIG15ICRyZXM7CiBteSAk cHJpbWFyeV9zbG90bmFtZSA9ICdwcmltYXJ5X3BoeXNpY2FsJzsKIG15ICRzdGFuZGJ5X3BoeXNp Y2FsX3Nsb3RuYW1lID0gJ3N0YW5kYnlfcGh5c2ljYWwnOwogCi0jIGZpbmQgJHBhdCBpbiBsb2dm aWxlIG9mICRub2RlIGFmdGVyICRvZmYtdGggYnl0ZQotc3ViIGZpbmRfaW5fbG9nCi17Ci0JbXkg KCRub2RlLCAkcGF0LCAkb2ZmKSA9IEBfOwotCi0JJG9mZiA9IDAgdW5sZXNzIGRlZmluZWQgJG9m ZjsKLQlteSAkbG9nID0gUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM6OnNsdXJwX2ZpbGUoJG5vZGUt PmxvZ2ZpbGUpOwotCXJldHVybiAwIGlmIChsZW5ndGgoJGxvZykgPD0gJG9mZik7Ci0KLQkkbG9n ID0gc3Vic3RyKCRsb2csICRvZmYpOwotCi0JcmV0dXJuICRsb2cgPX4gbS8kcGF0LzsKLX0KLQog IyBGZXRjaCB4bWluIGNvbHVtbnMgZnJvbSBzbG90J3MgcGdfcmVwbGljYXRpb25fc2xvdHMgcm93 LCBhZnRlciB3YWl0aW5nIGZvcgogIyBnaXZlbiBib29sZWFuIGNvbmRpdGlvbiB0byBiZSB0cnVl IHRvIGVuc3VyZSB3ZSd2ZSByZWFjaGVkIGEgcXVpZXNjZW50IHN0YXRlLgogc3ViIHdhaXRfZm9y X3htaW5zCkBAIC0yMzUsMTQgKzIyMSwxMiBAQCBzdWIgY2hlY2tfZm9yX2ludmFsaWRhdGlvbgog CW15ICRpbmFjdGl2ZV9zbG90ID0gJHNsb3RfcHJlZml4IC4gJ2luYWN0aXZlc2xvdCc7CiAKIAkj IG1lc3NhZ2Ugc2hvdWxkIGJlIGlzc3VlZAotCW9rKCBmaW5kX2luX2xvZygKLQkJCSRub2RlX3N0 YW5kYnksCisJb2soICRub2RlX3N0YW5kYnktPmxvZ19jb250YWlucygKIAkJCSJpbnZhbGlkYXRp bmcgb2Jzb2xldGUgcmVwbGljYXRpb24gc2xvdCBcIiRpbmFjdGl2ZV9zbG90XCIiLAogCQkJJGxv Z19zdGFydCksCiAJCSJpbmFjdGl2ZXNsb3Qgc2xvdCBpbnZhbGlkYXRpb24gaXMgbG9nZ2VkICR0 ZXN0X25hbWUiKTsKIAotCW9rKCBmaW5kX2luX2xvZygKLQkJCSRub2RlX3N0YW5kYnksCisJb2so ICRub2RlX3N0YW5kYnktPmxvZ19jb250YWlucygKIAkJCSJpbnZhbGlkYXRpbmcgb2Jzb2xldGUg cmVwbGljYXRpb24gc2xvdCBcIiRhY3RpdmVfc2xvdFwiIiwKIAkJCSRsb2dfc3RhcnQpLAogCQki YWN0aXZlc2xvdCBzbG90IGludmFsaWRhdGlvbiBpcyBsb2dnZWQgJHRlc3RfbmFtZSIpOwpAQCAt NjU3LDE0ICs2NDEsMTIgQEAgJG5vZGVfcHJpbWFyeS0+c2FmZV9wc3FsKAogJG5vZGVfcHJpbWFy eS0+d2FpdF9mb3JfcmVwbGF5X2NhdGNodXAoJG5vZGVfc3RhbmRieSk7CiAKICMgbWVzc2FnZSBz aG91bGQgbm90IGJlIGlzc3VlZAotb2soICFmaW5kX2luX2xvZygKLQkJJG5vZGVfc3RhbmRieSwK K29rKCAhJG5vZGVfc3RhbmRieS0+bG9nX2NvbnRhaW5zKAogCQkiaW52YWxpZGF0aW5nIG9ic29s ZXRlIHNsb3QgXCJub19jb25mbGljdF9pbmFjdGl2ZXNsb3RcIiIsICRsb2dzdGFydCksCiAJJ2lu YWN0aXZlc2xvdCBzbG90IGludmFsaWRhdGlvbiBpcyBub3QgbG9nZ2VkIHdpdGggdmFjdXVtIG9u IGNvbmZsaWN0X3Rlc3QnCiApOwogCi1vayggIWZpbmRfaW5fbG9nKAotCQkkbm9kZV9zdGFuZGJ5 LAorb2soICEkbm9kZV9zdGFuZGJ5LT5sb2dfY29udGFpbnMoCiAJCSJpbnZhbGlkYXRpbmcgb2Jz b2xldGUgc2xvdCBcIm5vX2NvbmZsaWN0X2FjdGl2ZXNsb3RcIiIsICRsb2dzdGFydCksCiAJJ2Fj dGl2ZXNsb3Qgc2xvdCBpbnZhbGlkYXRpb24gaXMgbm90IGxvZ2dlZCB3aXRoIHZhY3V1bSBvbiBj b25mbGljdF90ZXN0JwogKTsKLS0gCjIuMzQuMQoK --0000000000004d113b05fc9bac71--