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 1uzgAP-0064sJ-Gf for pgsql-hackers@arkaria.postgresql.org; Fri, 19 Sep 2025 18:49:10 +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 1uzgAN-008u0r-MM for pgsql-hackers@arkaria.postgresql.org; Fri, 19 Sep 2025 18:49:07 +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 1uzgAM-008u0i-Rt for pgsql-hackers@lists.postgresql.org; Fri, 19 Sep 2025 18:49:07 +0000 Received: from fhigh-b5-smtp.messagingengine.com ([202.12.124.156]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1uzgAH-001kHD-1x for pgsql-hackers@lists.postgresql.org; Fri, 19 Sep 2025 18:49:06 +0000 Received: from phl-compute-06.internal (phl-compute-06.internal [10.202.2.46]) by mailfhigh.stl.internal (Postfix) with ESMTP id 4C7A57A0096; Fri, 19 Sep 2025 14:49:00 -0400 (EDT) Received: from phl-mailfrontend-01 ([10.202.2.162]) by phl-compute-06.internal (MEProxy); Fri, 19 Sep 2025 14:49:00 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=burd.me; h=cc:cc :content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm1; t=1758307740; x=1758394140; bh=FY6mlQ4qXr Lehzbpd0TQERjvVpvDYkRJrVD4T9zThcU=; b=fc1T4e+AK5fakmaVf1tGy38Ygx jTuHbaJmg5WmfO3vQYyphuY4NkFvfKEJ/WjCP1Q7q064pC51YuusqSSiGklZw3rZ gIVv9LpVI6uSSl5F+/JdzUiAJhjK0Z5aYQM3yA33aPc4gV6cYjD62EOLI5lrBEdv 2ZcYhSiI2FSP/ibi/E0Y3KeX3DuTBOdvVO7NRdxr1pLM6GQ6jfJMPcc3eL2P7RTH KgliGozvSch+W2rmxohZkZrinlxZVPU4WN/M96CeJOM6qLdizBA0IAmVcXVI+K7O Z37rDGSS8UGgG/jbnYVVzuHUghWjrBntp+requjNyI3SvlEjEbc0d+2FxM2w== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm1; t= 1758307740; x=1758394140; bh=FY6mlQ4qXrLehzbpd0TQERjvVpvDYkRJrVD 4T9zThcU=; b=GaTRhby8Ns84YxhYtKnpnR96DpflwnhhxmdFRrHh/wDhCKSutVi qpAEhkclgLGJJClEZEAGDCH+h4Q3O0VJuZWtXGt16ElQTbvDbCM5fFS/n6lHpqk8 tbr1v8hJMOSrxg+own7i7Z5e53A0ZFkvNj8qPZFzeLeH4zIxcENrOpGLjXOtAvXB mhmk4WqgNybP9liA8P2aI494AcVF2xOze9Uryq9fDPPcNgatex6QdKPCM8A1G+Y5 GCswKq12r6OZsc/0a72HXOWLySVTHpf447q7aFy0HJSKGxLwCheRcvwsZZSOcU5R 6TyZnevf3Gurkbh2Y5vGsQtqy8XblYUKqtg== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggdegleeljecutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpuffrtefokffrpgfnqfghnecuuegr ihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenucfjug hrpeffhffvvefkjghfuffogggtsehmtdhmreertdejnecuhfhrohhmpefirhgvghcuuehu rhguuceoghhrvghgsegsuhhrugdrmhgvqeenucggtffrrghtthgvrhhnpeefvdfhudelud evveegheeuhfdtuedvueeiveegieejkefggfevhfekkefhtdekheenucevlhhushhtvghr ufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpehgrhgvghessghurhgurdhmvg dpnhgspghrtghpthhtohephedpmhhouggvpehsmhhtphhouhhtpdhrtghpthhtohepmhhi tghhrggvlhesphgrqhhuihgvrhdrgiihiidprhgtphhtthhopehpghhsqhhlqdhhrggtkh gvrhhssehlihhsthhsrdhpohhsthhgrhgvshhqlhdrohhrghdprhgtphhtthhopehrohgs vghrthhmhhgrrghssehgmhgrihhlrdgtohhmpdhrtghpthhtohepnhgrthhhrghnuggsoh hsshgrrhhtsehgmhgrihhlrdgtohhmpdhrtghpthhtohepshgrfigruggrrdhmshhhkhes ghhmrghilhdrtghomh X-ME-Proxy: Feedback-ID: i675e48f3:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Fri, 19 Sep 2025 14:48:59 -0400 (EDT) Date: Fri, 19 Sep 2025 14:48:43 -0400 From: Greg Burd To: Michael Paquier Cc: PostgreSQL Hackers , Robert Haas , Nathan Bossart , Masahiko Sawada Message-ID: In-Reply-To: References: Subject: Re: [PATCH] Add tests for Bitmapset X-Mailer: Mailspring MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="68cda58b_66785b5d_6415" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --68cda58b_66785b5d_6415 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Content-Disposition: inline On Sep 19 2025, at 2:36 am, Michael Paquier wrote: > On Thu, Sep 18, 2025 at 02:50:45PM -0400, Greg Burd wrote: >> Thanks for all the feedback and time spent reviewing this patch. I >> switched out the encode/decode functions to use the nodeToString() and >> stringToNode() functions and change all the SQL testing function >> signatures to TEXT from BYTEA. This exercises more code and that's good >> for testing purposes. I took out the code that checks the hash values, >> I can't think of a reason that should cause a future failure should that >> change and output different values. I re-integrated the earlier random >> testing function along with the newer code. I'm not sure this buys us >> much if anything. >> >> coverage: HEAD v7 >> lines......: 87.1 90.5 +3.4% >> functions..: 100.0 100.0 +0.0% >> branches...: 63.5 75.9 +12.4% > > Nathan has given me his blessing, so as I could look at this patch and > put my hands on it. I have spotted one bug, and things that could be > done a bit better. Please see below. Hey Michael, Thank you for taking the initiative and reviewing the code. > As far as I am concerned there is a mistake with bms_overlap_list(). > This API checks a Bitmapset with a list of integers, but you have > coded things so as it checks for a list of Bitmapset. I think that > test_bms_overlap_list() should take in input a int4 array, then the > code in charge of the conversion from the array to the list needs to > be tweaked a little bit. With the current code, we could get random > failures with negative members included in a Bitmapset, depending on > what's on the stack. Apologies, you're right. I'm not sure how I went astray on that, but it's fixed now. > I am not really convinced about the value brought by bms_values() now > that the output is generated for all the SQL functions using the > "decode" and "encode" routines (which may be actually less confusing > if renamed as "bms_to_text" and "text_to_bms", but that's a personal > take), because this results in doing an extra round-trip between text > and Bitmapset. Agreed, renamed and removed. New macros are: /* Encode/Decode to/from TEXT and Bitmapset */ #define BITMAPSET_TO_TEXT(bms) (text *) CStringGetTextDatum(nodeToString((bms))) #define TEXT_TO_BITMAPSET(str) (Bitmapset *) stringToNode(TextDatumGetCString((Datum) (str))) > The tests don't rely much on NULL as input to > translate that as "(b)". bmsToString() is just a direct call to what > the decode and encode routines do. Yes, agreed. > Same remark about test_bms_from_array(), that mimicks nodeRead(), in > charge of doing a int4[] -> Bitmapset conversion. Wouldn't it be > simpler to just use "(b 1 2 3)" in input and let the decode/encode > routines do the job? That makes a lot of sense now that things are all string to/from the Bitmapset node representation. Done. > Let's replace the test descriptions in the queries that we know have > an individual result by comments. For example all the "Range > operations". These descriptions are useful in the UNION queries, > where we want to rely on a set of Bitmapsets for multiple operations, > to be able to know the description of the result. For individual > queries, this bloats the output. Okay, done. > The numbering in the tests are not that useful to have. If the test > suite is updated, that would mean more updates required if we add a > new block in the middle. Agreed, removed. > +SELECT 'overlapping ranges' as test, > + bms_values(test_bms_union( > + test_bms_add_range(NULL, 50, 150), > + test_bms_add_range(NULL, 100, 200) > > The output generated by this query leads to a bitmapset with 200 > members. It would be simpler and more readable to reduce these > ranges, or is there a reason for these to be large? Same remark for > "difference subtraction edge case" with its 50 members. Some of these were targeted at corner cases to increase coverage. I'll review and consider ways to either a) eliminate them, or b) shorten the output. > +SELECT 'add_range large range' as test, > bms_values(test_bms_add_range(NULL, 0, 1000)) as result; > > This one also is funky with its output of 1000 elements. Any reason > this is justified in terms of coverage? If yes, we could use some > substr() calls to get the end and the beginning of the output > generated, perhaps to reduce the output of the whole, or the length, > or something like that relevant enough to validate the output. There > is a second test a bit down that uses a range of [1000,1100], as well. I used length() and recorded the expected output in the test. That seems to a) reduce noise in the output and b) remain deterministic(-ish). > -- > Michael I think I've incorporated your feedback which did indeed make the patch more readable/crisp and maintainable, thank you. coverage: HEAD v7 v8 lines......: 87.1 90.5 92.2 functions..: 100.0 100.0 100.0 branches...: 63.5 75.9 76.2 best. -greg --68cda58b_66785b5d_6415 Content-Type: application/octet-stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v8-0001-Add-a-module-that-tests-Bitmapset.patch" RnJvbSBjYTQ5ODNlOTlmMTdlNTg1NTMxNzdmYTQxOTc1MjE4MmU2NTdiZTRhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KRGF0ZTogV2VkLCAx MyBBdWcgMjAyNSAxNTo0MDozMSAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjhdIEFkZCBhIG1vZHVs ZSB0aGF0IHRlc3RzIEJpdG1hcHNldAoKQmFzaWMgdGVzdHMgZm9yIEJpdG1hcHNldCB0byBlbnN1 cmUgZnVuY3Rpb25hbGl0eSBhbmQgaGVscCBwcmV2ZW50CnVuaW50ZW50aW9uYWwgYnJlYWtpbmcg Y2hhbmdlcyBpbiB0aGUgZnV0dXJlLgotLS0KIHNyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUgICAg ICAgICAgICAgICAgICAgICB8ICAgIDEgKwogc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZCAg ICAgICAgICAgICAgICAgIHwgICAgMSArCiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0 Ly5naXRpZ25vcmUgICAgfCAgICA0ICsKIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQv TWFrZWZpbGUgICAgICB8ICAgMjMgKwogLi4uL2V4cGVjdGVkL3Rlc3RfYml0bWFwc2V0Lm91dCAg ICAgICAgICAgICAgIHwgIDYyMSArKysrKysrKysrCiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYml0 bWFwc2V0L21lc29uLmJ1aWxkICAgfCAgIDMzICsKIC4uLi90ZXN0X2JpdG1hcHNldC9zcWwvdGVz dF9iaXRtYXBzZXQuc3FsICAgICB8ICAzMTIgKysrKysKIC4uLi90ZXN0X2JpdG1hcHNldC90ZXN0 X2JpdG1hcHNldC0tMS4wLnNxbCAgICB8ICAxMzYgKysrCiAuLi4vbW9kdWxlcy90ZXN0X2JpdG1h cHNldC90ZXN0X2JpdG1hcHNldC5jICAgfCAxMDA4ICsrKysrKysrKysrKysrKysrCiAuLi4vdGVz dF9iaXRtYXBzZXQvdGVzdF9iaXRtYXBzZXQuY29udHJvbCAgICAgfCAgICA0ICsKIDEwIGZpbGVz IGNoYW5nZWQsIDIxNDMgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0 L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQvLmdpdGlnbm9yZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNy Yy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0L2V4cGVjdGVkL3Rlc3RfYml0bWFwc2V0 Lm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQv bWVzb24uYnVpbGQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYml0 bWFwc2V0L3NxbC90ZXN0X2JpdG1hcHNldC5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVz dC9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0L3Rlc3RfYml0bWFwc2V0LS0xLjAuc3FsCiBjcmVhdGUg bW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC90ZXN0X2JpdG1hcHNl dC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC90 ZXN0X2JpdG1hcHNldC5jb250cm9sCgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9NYWtl ZmlsZSBiL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUKaW5kZXggOTAzYThhYzE1MWEuLjk0MDcx ZWMwZTE2IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlCisrKyBiL3NyYy90 ZXN0L21vZHVsZXMvTWFrZWZpbGUKQEAgLTE2LDYgKzE2LDcgQEAgU1VCRElSUyA9IFwKIAkJICBz cGdpc3RfbmFtZV9vcHMgXAogCQkgIHRlc3RfYWlvIFwKIAkJICB0ZXN0X2JpbmFyeWhlYXAgXAor CQkgIHRlc3RfYml0bWFwc2V0IFwKIAkJICB0ZXN0X2Jsb29tZmlsdGVyIFwKIAkJICB0ZXN0X2Nv cHlfY2FsbGJhY2tzIFwKIAkJICB0ZXN0X2N1c3RvbV9ybWdycyBcCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkIGIvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZApp bmRleCA5M2JlMGY1NzI4OS4uZDhmNWM5Yzc0OTQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVs ZXMvbWVzb24uYnVpbGQKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZApAQCAtMTUs NiArMTUsNyBAQCBzdWJkaXIoJ3NwZ2lzdF9uYW1lX29wcycpCiBzdWJkaXIoJ3NzbF9wYXNzcGhy YXNlX2NhbGxiYWNrJykKIHN1YmRpcigndGVzdF9haW8nKQogc3ViZGlyKCd0ZXN0X2JpbmFyeWhl YXAnKQorc3ViZGlyKCd0ZXN0X2JpdG1hcHNldCcpCiBzdWJkaXIoJ3Rlc3RfYmxvb21maWx0ZXIn KQogc3ViZGlyKCd0ZXN0X2NvcHlfY2FsbGJhY2tzJykKIHN1YmRpcigndGVzdF9jdXN0b21fcm1n cnMnKQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC8uZ2l0aWdu b3JlIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC8uZ2l0aWdub3JlCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41ZGNiM2ZmOTcyMwotLS0gL2Rldi9udWxs CisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQvLmdpdGlnbm9yZQpAQCAtMCww ICsxLDQgQEAKKyMgR2VuZXJhdGVkIHN1YmRpcmVjdG9yaWVzCisvbG9nLworL3Jlc3VsdHMvCisv dG1wX2NoZWNrLwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC9N YWtlZmlsZSBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQvTWFrZWZpbGUKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjY3MTk5ZDQwZDczCi0tLSAvZGV2L251 bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC9NYWtlZmlsZQpAQCAtMCww ICsxLDIzIEBACisjIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQvTWFrZWZpbGUKKwor TU9EVUxFX2JpZyA9IHRlc3RfYml0bWFwc2V0CitPQkpTID0gXAorCSQoV0lOMzJSRVMpIFwKKwl0 ZXN0X2JpdG1hcHNldC5vCitQR0ZJTEVERVNDID0gInRlc3RfYml0bWFwc2V0IC0gdGVzdCBjb2Rl IGZvciBzcmMvaW5jbHVkZS9ub2Rlcy9iaXRtYXBzZXQuaCIKKworRVhURU5TSU9OID0gdGVzdF9i aXRtYXBzZXQKK0RBVEEgPSB0ZXN0X2JpdG1hcHNldC0tMS4wLnNxbAorCitSRUdSRVNTID0gdGVz dF9iaXRtYXBzZXQKKworaWZkZWYgVVNFX1BHWFMKK1BHX0NPTkZJRyA9IHBnX2NvbmZpZworUEdY UyA6PSAkKHNoZWxsICQoUEdfQ09ORklHKSAtLXBneHMpCitpbmNsdWRlICQoUEdYUykKK2Vsc2UK K3N1YmRpciA9IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQKK3RvcF9idWlsZGRpciA9 IC4uLy4uLy4uLy4uCitpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFs CitpbmNsdWRlICQodG9wX3NyY2RpcikvY29udHJpYi9jb250cmliLWdsb2JhbC5taworZW5kaWYK ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQvZXhwZWN0ZWQvdGVz dF9iaXRtYXBzZXQub3V0IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC9leHBlY3Rl ZC90ZXN0X2JpdG1hcHNldC5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAuLmFiMjU1MDg3NDE2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X2JpdG1hcHNldC9leHBlY3RlZC90ZXN0X2JpdG1hcHNldC5vdXQKQEAgLTAsMCArMSw2MjEgQEAK K0NSRUFURSBFWFRFTlNJT04gSUYgTk9UIEVYSVNUUyB0ZXN0X2JpdG1hcHNldDsKKy0tIG1ha2Vf c2luZ2xldG9uKDQyKQorU0VMRUNUIHRlc3RfYm1zX21ha2Vfc2luZ2xldG9uKDQyKSA9ICcoYiA0 MiknIGFzIHJlc3VsdDsKKyByZXN1bHQgCistLS0tLS0tLQorIHQKKygxIHJvdykKKworLS0gbWFr ZV9zaW5nbGV0b24oMCkKK1NFTEVDVCB0ZXN0X2Jtc19tYWtlX3NpbmdsZXRvbigwKSA9ICcoYiAw KScgYXMgcmVzdWx0OworIHJlc3VsdCAKKy0tLS0tLS0tCisgdAorKDEgcm93KQorCistLSBtYWtl X3NpbmdsZXRvbigxMDAwKQorU0VMRUNUIHRlc3RfYm1zX21ha2Vfc2luZ2xldG9uKDEwMDApID0g JyhiIDEwMDApJyBhcyByZXN1bHQ7CisgcmVzdWx0IAorLS0tLS0tLS0KKyB0CisoMSByb3cpCisK Ky0tIGFkZF9tZW1iZXIoTlVMTCwgMTApCitTRUxFQ1QgdGVzdF9ibXNfYWRkX21lbWJlcignKGIp JywgMTApID0gJyhiIDEwKScgYXMgcmVzdWx0OworIHJlc3VsdCAKKy0tLS0tLS0tCisgdAorKDEg cm93KQorCistLSBhZGRfbWVtYmVyIGNvbnNpc3RlbmN5CitTRUxFQ1QgdGVzdF9ibXNfYWRkX21l bWJlcignKGIpJywgMTApIGFzIHJlc3VsdDsKKyByZXN1bHQgCistLS0tLS0tLQorIChiIDEwKQor KDEgcm93KQorCistLSBhZGRfbWVtYmVyIHRvIGV4aXN0aW5nCitTRUxFQ1QgdGVzdF9ibXNfYWRk X21lbWJlcignKGIgNSknLCAxMCkgPSAnKGIgNSAxMCknIGFzIHJlc3VsdDsKKyByZXN1bHQgCist LS0tLS0tLQorIHQKKygxIHJvdykKKworLS0gYWRkX21lbWJlciBzb3J0ZWQKK1NFTEVDVCB0ZXN0 X2Jtc19hZGRfbWVtYmVyKCcoYiAxMCknLCA1KSA9ICcoYiA1IDEwKScgYXMgcmVzdWx0OworIHJl c3VsdCAKKy0tLS0tLS0tCisgdAorKDEgcm93KQorCistLSBhZGRfbWVtYmVyIGlkZW1wb3RlbnQK K1NFTEVDVCB0ZXN0X2Jtc19hZGRfbWVtYmVyKCcoYiAxMCknLCAxMCkgYXMgcmVzdWx0OworIHJl c3VsdCAKKy0tLS0tLS0tCisgKGIgMTApCisoMSByb3cpCisKKy0tIGRlbF9tZW1iZXIgZnJvbSBO VUxMCitTRUxFQ1QgdGVzdF9ibXNfZGVsX21lbWJlcignKGIpJywgMTApIElTIE5VTEwgYXMgcmVz dWx0OworIHJlc3VsdCAKKy0tLS0tLS0tCisgdAorKDEgcm93KQorCistLSBkZWxfbWVtYmVyIHNp bmdsZXRvbiBiZWNvbWVzIGVtcHR5CitTRUxFQ1QgdGVzdF9ibXNfZGVsX21lbWJlcignKGIgMTAp JywgMTApIElTIE5VTEwgYXMgcmVzdWx0OworIHJlc3VsdCAKKy0tLS0tLS0tCisgdAorKDEgcm93 KQorCistLSBkZWxfbWVtYmVyIG5vIGNoYW5nZQorU0VMRUNUIHRlc3RfYm1zX2RlbF9tZW1iZXIo JyhiIDEwKScsIDUpIGFzIHJlc3VsdDsKKyByZXN1bHQgCistLS0tLS0tLQorIChiIDEwKQorKDEg cm93KQorCistLSBkZWxfbWVtYmVyIGZyb20gbWlkZGxlCitTRUxFQ1QgdGVzdF9ibXNfZGVsX21l bWJlcignKGIgMSAyIDMpJywgMikgPSAnKGIgMSAzKScgYXMgcmVzdWx0OworIHJlc3VsdCAKKy0t LS0tLS0tCisgdAorKDEgcm93KQorCistLSBkZWxfbWVtYmVyIHRyaWdnZXJzIHJlYWxsb2MKK1NF TEVDVCB0ZXN0X2Jtc19kZWxfbWVtYmVyKHRlc3RfYm1zX2RlbF9tZW1iZXIoJyhiIDAgMzEgMzIg NjMgNjQpJywgMzIpLCA2MykgYXMgcmVzdWx0OworICAgcmVzdWx0ICAgIAorLS0tLS0tLS0tLS0t LQorIChiIDAgMzEgNjQpCisoMSByb3cpCisKKy0tIGRlbF9tZW1iZXIgd29yZCBib3VuZGFyeQor U0VMRUNUIHRlc3RfYm1zX2RlbF9tZW1iZXIodGVzdF9ibXNfYWRkX3JhbmdlKCcoYiknLCAzMCwg MzQpLCAzMikgYXMgcmVzdWx0OworICAgICByZXN1bHQgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t CisgKGIgMzAgMzEgMzMgMzQpCisoMSByb3cpCisKKy0tIHVuaW9uIG9wZXJhdGlvbnMKK1NFTEVD VCAndW5pb24gb3ZlcmxhcHBpbmcgc2V0cycgYXMgdGVzdCwKKyAgICAgICB0ZXN0X2Jtc191bmlv bignKGIgMSAzIDUpJywgJyhiIDMgNSA3KScpID0gJyhiIDEgMyA1IDcpJyBhcyByZXN1bHQKK1VO SU9OIEFMTAorU0VMRUNUICd1bmlvbiB3aXRoIE5VTEwnIGFzIHRlc3QsCisgICAgICAgdGVzdF9i bXNfdW5pb24oJyhiIDEgMyA1KScsICcoYiknKSA9ICcoYiAxIDMgNSknIGFzIHJlc3VsdAorVU5J T04gQUxMCitTRUxFQ1QgJ3VuaW9uIE5VTEwgd2l0aCBOVUxMJyBhcyB0ZXN0LAorICAgICAgIHRl c3RfYm1zX3VuaW9uKCcoYiknLCAnKGIpJykgSVMgTlVMTCBhcyByZXN1bHQ7CisgICAgICAgICAg dGVzdCAgICAgICAgICB8IHJlc3VsdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LQorIHVuaW9uIG92ZXJsYXBwaW5nIHNldHMgfCB0CisgdW5pb24gd2l0aCBOVUxMICAgICAgICB8 IHQKKyB1bmlvbiBOVUxMIHdpdGggTlVMTCAgIHwgdAorKDMgcm93cykKKworU0VMRUNUICdvdmVy bGFwcGluZyByYW5nZXMnIGFzIHRlc3QsCisgICAgICAgdGVzdF9ibXNfdW5pb24oCisgICAgICAg ICAgIHRlc3RfYm1zX2FkZF9yYW5nZSgnKGIpJywgMCwgMTUpLAorICAgICAgICAgICB0ZXN0X2Jt c19hZGRfcmFuZ2UoJyhiKScsIDEwLCAyMCkKKyAgICAgICApIGFzIHJlc3VsdDsKKyAgICAgICAg dGVzdCAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICAgICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBvdmVybGFwcGluZyByYW5n ZXMgfCAoYiAwIDEgMiAzIDQgNSA2IDcgOCA5IDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3IDE4IDE5 IDIwKQorKDEgcm93KQorCistLSBpbnRlcnNlY3Rpb24gb3BlcmF0aW9ucworU0VMRUNUICdpbnRl cnNlY3Qgb3ZlcmxhcHBpbmcgc2V0cycgYXMgdGVzdCwKKyAgICAgICB0ZXN0X2Jtc19pbnRlcnNl Y3QoJyhiIDEgMyA1KScsICcoYiAzIDUgNyknKSA9ICcoYiAzIDUpJyBhcyByZXN1bHQKK1VOSU9O IEFMTAorU0VMRUNUICdpbnRlcnNlY3QgZGlzam9pbnQgc2V0cycgYXMgdGVzdCwKKyAgICAgICB0 ZXN0X2Jtc19pbnRlcnNlY3QoJyhiIDEgMyA1KScsICcoYiAyIDQgNiknKSBJUyBOVUxMIGFzIHJl c3VsdAorVU5JT04gQUxMCitTRUxFQ1QgJ2ludGVyc2VjdCB3aXRoIE5VTEwnIGFzIHRlc3QsCisg ICAgICAgdGVzdF9ibXNfaW50ZXJzZWN0KCcoYiAxIDMgNSknLCAnKGIpJykgSVMgTlVMTCBhcyBy ZXN1bHQ7CisgICAgICAgICAgICB0ZXN0ICAgICAgICAgICAgfCByZXN1bHQgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tCisgaW50ZXJzZWN0IG92ZXJsYXBwaW5nIHNldHMg fCB0CisgaW50ZXJzZWN0IGRpc2pvaW50IHNldHMgICAgfCB0CisgaW50ZXJzZWN0IHdpdGggTlVM TCAgICAgICAgfCB0CisoMyByb3dzKQorCistLSBibXNfaW50X21lbWJlcnMKK1NFTEVDVCAnaW50 KGVyc2VjdCkgb3ZlcmxhcHBpbmcgc2V0cycgYXMgdGVzdCwKKyAgICAgICB0ZXN0X2Jtc19pbnRf bWVtYmVycygnKGIgMSAzIDUpJywgJyhiIDMgNSA3KScpID0gJyhiIDMgNSknIGFzIHJlc3VsdAor VU5JT04gQUxMCitTRUxFQ1QgJ2ludChlcnNlY3QpIGRpc2pvaW50IHNldHMnIGFzIHRlc3QsCisg ICAgICAgdGVzdF9ibXNfaW50X21lbWJlcnMoJyhiIDEgMyA1KScsICcoYiAyIDQgNiknKSBJUyBO VUxMIGFzIHJlc3VsdAorVU5JT04gQUxMCitTRUxFQ1QgJ2ludChlcnNlY3QpIHdpdGggTlVMTCcg YXMgdGVzdCwKKyAgICAgICB0ZXN0X2Jtc19pbnRfbWVtYmVycygnKGIgMSAzIDUpJywgJyhiKScp IElTIE5VTEwgYXMgcmVzdWx0CitVTklPTiBBTEwKK1NFTEVDVCAnaW50KGVyc2VjdCkgbWVtYmVy cycgYXMgdGVzdCwKKwl0ZXN0X2Jtc19pbnRfbWVtYmVycygnKGIgMCAzMSAzMiA2MyA2NCknLCAn KGIgMzEgMzIgNjQgNjUpJykgPSAnKGIgMzEgMzIgNjQpJyBhcyByZXN1bHQ7CisgICAgICAgICAg ICAgdGVzdCAgICAgICAgICAgICB8IHJlc3VsdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLQorIGludChlcnNlY3QpIG92ZXJsYXBwaW5nIHNldHMgfCB0CisgaW50KGVy c2VjdCkgZGlzam9pbnQgc2V0cyAgICB8IHQKKyBpbnQoZXJzZWN0KSB3aXRoIE5VTEwgICAgICAg IHwgdAorIGludChlcnNlY3QpIG1lbWJlcnMgICAgICAgICAgfCB0CisoNCByb3dzKQorCistLSBk aWZmZXJlbmNlIG9wZXJhdGlvbnMKK1NFTEVDVCAnZGlmZmVyZW5jZSBvdmVybGFwcGluZyBzZXRz JyBhcyB0ZXN0LAorICAgICAgIHRlc3RfYm1zX2RpZmZlcmVuY2UoJyhiIDEgMyA1KScsICcoYiAz IDUgNyknKSA9ICcoYiAxKScgYXMgcmVzdWx0CitVTklPTiBBTEwKK1NFTEVDVCAnZGlmZmVyZW5j ZSBkaXNqb2ludCBzZXRzJyBhcyB0ZXN0LAorICAgICAgIHRlc3RfYm1zX2RpZmZlcmVuY2UoJyhi IDEgMyA1KScsICcoYiAyIDQgNiknKSA9ICcoYiAxIDMgNSknIGFzIHJlc3VsdAorVU5JT04gQUxM CitTRUxFQ1QgJ2RpZmZlcmVuY2UgaWRlbnRpY2FsIHNldHMnIGFzIHRlc3QsCisgICAgICAgdGVz dF9ibXNfZGlmZmVyZW5jZSgnKGIgMSAzIDUpJywgJyhiIDEgMyA1KScpIElTIE5VTEwgYXMgcmVz dWx0OworICAgICAgICAgICAgdGVzdCAgICAgICAgICAgICB8IHJlc3VsdCAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tCisgZGlmZmVyZW5jZSBvdmVybGFwcGluZyBzZXRz IHwgdAorIGRpZmZlcmVuY2UgZGlzam9pbnQgc2V0cyAgICB8IHQKKyBkaWZmZXJlbmNlIGlkZW50 aWNhbCBzZXRzICAgfCB0CisoMyByb3dzKQorCitTRUxFQ1QgJ2RpZmZlcmVuY2Ugc3VidHJhY3Rp b24gZWRnZSBjYXNlJyBhcyB0ZXN0LAorICAgICAgIHRlc3RfYm1zX2RpZmZlcmVuY2UoCisgICAg ICAgICAgIHRlc3RfYm1zX2FkZF9yYW5nZSgnKGIpJywgMCwgMTAwKSwKKyAgICAgICAgICAgdGVz dF9ibXNfYWRkX3JhbmdlKCcoYiknLCA1MCwgMTUwKQorICAgICAgICkgYXMgcmVzdWx0OworICAg ICAgICAgICAgICAgdGVzdCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBkaWZmZXJlbmNlIHN1YnRyYWN0aW9uIGVkZ2UgY2FzZSB8IChi IDAgMSAyIDMgNCA1IDYgNyA4IDkgMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcgMTggMTkgMjAgMjEg MjIgMjMgMjQgMjUgMjYgMjcgMjggMjkgMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcgMzggMzkgNDAg NDEgNDIgNDMgNDQgNDUgNDYgNDcgNDggNDkpCisoMSByb3cpCisKK1NFTEVDVCAnZGlmZmVyZW5j ZSBzdWJ0cmFjdCB0byBlbXB0eScgYXMgdGVzdCwKKyAgICAgICB0ZXN0X2Jtc19kaWZmZXJlbmNl KCcoYiA0MiknLCAnKGIgNDIpJykgYXMgcmVzdWx0OworICAgICAgICAgICAgIHRlc3QgICAgICAg ICAgICAgfCByZXN1bHQgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0K KyBkaWZmZXJlbmNlIHN1YnRyYWN0IHRvIGVtcHR5IHwgCisoMSByb3cpCisKKy0tIG1lbWJlcnNo aXAgdGVzdHMKK1NFTEVDVCAnaXNfbWVtYmVyIGV4aXN0aW5nJyBhcyB0ZXN0LCB0ZXN0X2Jtc19p c19tZW1iZXIoJyhiIDEgMyA1KScsIDEpID0gdHJ1ZSBhcyByZXN1bHQKK1VOSU9OIEFMTAorU0VM RUNUICdpc19tZW1iZXIgbWlzc2luZycgYXMgdGVzdCwgdGVzdF9ibXNfaXNfbWVtYmVyKCcoYiAx IDMgNSknLCAyKSA9IGZhbHNlIGFzIHJlc3VsdAorVU5JT04gQUxMCitTRUxFQ1QgJ2lzX21lbWJl ciBleGlzdGluZyBtaWRkbGUnIGFzIHRlc3QsIHRlc3RfYm1zX2lzX21lbWJlcignKGIgMSAzIDUp JywgMykgPSB0cnVlIGFzIHJlc3VsdAorVU5JT04gQUxMCitTRUxFQ1QgJ2lzX21lbWJlciBOVUxM IHNldCcgYXMgdGVzdCwgdGVzdF9ibXNfaXNfbWVtYmVyKCcoYiknLCAxKSA9IGZhbHNlIGFzIHJl c3VsdDsKKyAgICAgICAgICAgdGVzdCAgICAgICAgICAgIHwgcmVzdWx0IAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tCisgaXNfbWVtYmVyIGV4aXN0aW5nICAgICAgICB8IHQK KyBpc19tZW1iZXIgbWlzc2luZyAgICAgICAgIHwgdAorIGlzX21lbWJlciBleGlzdGluZyBtaWRk bGUgfCB0CisgaXNfbWVtYmVyIE5VTEwgc2V0ICAgICAgICB8IHQKKyg0IHJvd3MpCisKKy0tIG51 bV9tZW1iZXJzIE5VTEwKK1NFTEVDVCB0ZXN0X2Jtc19udW1fbWVtYmVycygnKGIpJykgPSAwIGFz IHJlc3VsdDsKKyByZXN1bHQgCistLS0tLS0tLQorIHQKKygxIHJvdykKKworLS0gbnVtX21lbWJl cnMgc21hbGwgc2V0CitTRUxFQ1QgdGVzdF9ibXNfbnVtX21lbWJlcnMoJyhiIDEgMyA1KScpID0g MyBhcyByZXN1bHQ7CisgcmVzdWx0IAorLS0tLS0tLS0KKyB0CisoMSByb3cpCisKKy0tIG51bV9t ZW1iZXJzIGxhcmdlciBzZXQKK1NFTEVDVCB0ZXN0X2Jtc19udW1fbWVtYmVycygnKGIgMiA0IDYg OCAxMCknKSA9IDUgYXMgcmVzdWx0OworIHJlc3VsdCAKKy0tLS0tLS0tCisgdAorKDEgcm93KQor CistLSBzZXQgZXF1YWxpdHkgYW5kIGNvbXBhcmlzb24KK1NFTEVDVCAnZXF1YWwgTlVMTCBOVUxM JyBhcyB0ZXN0LCB0ZXN0X2Jtc19lcXVhbCgnKGIpJywgJyhiKScpID0gdHJ1ZSBhcyByZXN1bHQK K1VOSU9OIEFMTAorU0VMRUNUICdlcXVhbCBOVUxMIHNldCcgYXMgdGVzdCwgdGVzdF9ibXNfZXF1 YWwoJyhiKScsICcoYiAxIDMgNSknKSA9IGZhbHNlIGFzIHJlc3VsdAorVU5JT04gQUxMCitTRUxF Q1QgJ2VxdWFsIHNldCBOVUxMJyBhcyB0ZXN0LCB0ZXN0X2Jtc19lcXVhbCgnKGIgMSAzIDUpJywg JyhiKScpID0gZmFsc2UgYXMgcmVzdWx0CitVTklPTiBBTEwKK1NFTEVDVCAnZXF1YWwgaWRlbnRp Y2FsIHNldHMnIGFzIHRlc3QsIHRlc3RfYm1zX2VxdWFsKCcoYiAxIDMgNSknLCAnKGIgMSAzIDUp JykgPSB0cnVlIGFzIHJlc3VsdAorVU5JT04gQUxMCitTRUxFQ1QgJ2VxdWFsIGRpZmZlcmVudCBz ZXRzJyBhcyB0ZXN0LCB0ZXN0X2Jtc19lcXVhbCgnKGIgMSAzIDUpJywgJyhiIDIgNCA2KScpID0g ZmFsc2UgYXMgcmVzdWx0CitVTklPTiBBTEwKK1NFTEVDVCAnY29tcGFyZSBOVUxMIE5VTEwnIGFz IHRlc3QsIHRlc3RfYm1zX2NvbXBhcmUoJyhiKScsICcoYiknKSA9IDAgYXMgcmVzdWx0CitVTklP TiBBTEwKK1NFTEVDVCAnY29tcGFyZSBOVUxMIHNldCcgYXMgdGVzdCwgdGVzdF9ibXNfY29tcGFy ZSgnKGIpJywgJyhiIDEgMyknKSA9IC0xIGFzIHJlc3VsdAorVU5JT04gQUxMCitTRUxFQ1QgJ2Nv bXBhcmUgc2V0IE5VTEwnIGFzIHRlc3QsIHRlc3RfYm1zX2NvbXBhcmUoJyhiIDEgMyknLCAnKGIp JykgPSAxIGFzIHJlc3VsdAorVU5JT04gQUxMCitTRUxFQ1QgJ2NvbXBhcmUgZXF1YWwgc2V0cycg YXMgdGVzdCwgdGVzdF9ibXNfY29tcGFyZSgnKGIgMSAzKScsICcoYiAxIDMpJykgPSAwIGFzIHJl c3VsdAorVU5JT04gQUxMCitTRUxFQ1QgJ2NvbXBhcmUgc3Vic2V0IHN1cGVyc2V0JyBhcyB0ZXN0 LCB0ZXN0X2Jtc19jb21wYXJlKCcoYiAxIDMpJywgJyhiIDEgMyA1KScpID0gLTEgYXMgcmVzdWx0 CitVTklPTiBBTEwKK1NFTEVDVCAnY29tcGFyZSBzdXBlcnNldCBzdWJzZXQnIGFzIHRlc3QsIHRl c3RfYm1zX2NvbXBhcmUoJyhiIDEgMyA1KScsICcoYiAxIDMpJykgPSAxIGFzIHJlc3VsdDsKKyAg ICAgICAgICB0ZXN0ICAgICAgICAgICB8IHJlc3VsdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0KKyBlcXVhbCBOVUxMIE5VTEwgICAgICAgICB8IHQKKyBlcXVhbCBOVUxMIHNl dCAgICAgICAgICB8IHQKKyBlcXVhbCBzZXQgTlVMTCAgICAgICAgICB8IHQKKyBlcXVhbCBpZGVu dGljYWwgc2V0cyAgICB8IHQKKyBlcXVhbCBkaWZmZXJlbnQgc2V0cyAgICB8IHQKKyBjb21wYXJl IE5VTEwgTlVMTCAgICAgICB8IHQKKyBjb21wYXJlIE5VTEwgc2V0ICAgICAgICB8IHQKKyBjb21w YXJlIHNldCBOVUxMICAgICAgICB8IHQKKyBjb21wYXJlIGVxdWFsIHNldHMgICAgICB8IHQKKyBj b21wYXJlIHN1YnNldCBzdXBlcnNldCB8IHQKKyBjb21wYXJlIHN1cGVyc2V0IHN1YnNldCB8IHQK KygxMSByb3dzKQorCitTRUxFQ1QgJ2NvbXBhcmUgZWRnZSBjYXNlJyBhcyB0ZXN0LAorICAgICAg IHRlc3RfYm1zX2NvbXBhcmUoCisgICAgICAgICAgIHRlc3RfYm1zX2FkZF9yYW5nZSgnKGIpJywg MCwgNjMpLAorICAgICAgICAgICB0ZXN0X2Jtc19hZGRfcmFuZ2UoJyhiKScsIDAsIDY0KQorICAg ICAgICkgYXMgcmVzdWx0OworICAgICAgIHRlc3QgICAgICAgIHwgcmVzdWx0IAorLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLQorIGNvbXBhcmUgZWRnZSBjYXNlIHwgICAgIC0xCisoMSByb3cp CisKKy0tIGFkZF9yYW5nZSBiYXNpYworU0VMRUNUIHRlc3RfYm1zX2FkZF9yYW5nZSgnKGIpJywg NSwgNykgPSAnKGIgNSA2IDcpJyBhcyByZXN1bHQ7CisgcmVzdWx0IAorLS0tLS0tLS0KKyB0Ciso MSByb3cpCisKKy0tIGFkZF9yYW5nZSBzaW5nbGUgZWxlbWVudAorU0VMRUNUIHRlc3RfYm1zX2Fk ZF9yYW5nZSgnKGIpJywgNSwgNSkgPSAnKGIgNSknIGFzIHJlc3VsdDsKKyByZXN1bHQgCistLS0t LS0tLQorIHQKKygxIHJvdykKKworLS0gYWRkX3JhbmdlIHRvIGV4aXN0aW5nCitTRUxFQ1QgdGVz dF9ibXNfYWRkX3JhbmdlKCcoYiAxIDEwKScsIDUsIDcpID0gJyhiIDEgNSA2IDcgMTApJyBhcyBy ZXN1bHQ7CisgcmVzdWx0IAorLS0tLS0tLS0KKyB0CisoMSByb3cpCisKKy0tIGFkZF9yYW5nZSBh dCB3b3JkIGJvdW5kYXJ5IDMxCitTRUxFQ1QgdGVzdF9ibXNfYWRkX3JhbmdlKCcoYiknLCAzMCwg MzQpIGFzIHJlc3VsdDsKKyAgICAgICByZXN1bHQgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LQorIChiIDMwIDMxIDMyIDMzIDM0KQorKDEgcm93KQorCistLSBhZGRfcmFuZ2UgYXQgd29yZCBi b3VuZGFyeSA2MworU0VMRUNUIHRlc3RfYm1zX2FkZF9yYW5nZSgnKGIpJywgNjIsIDY2KSBhcyBy ZXN1bHQ7CisgICAgICAgcmVzdWx0ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAoYiA2 MiA2MyA2NCA2NSA2NikKKygxIHJvdykKKworLS0gYWRkX3JhbmdlIGxhcmdlIHJhbmdlCitTRUxF Q1QgbGVuZ3RoKHRlc3RfYm1zX2FkZF9yYW5nZSgnKGIpJywgMCwgMTAwMCkpID0gMzg5OCBhcyBy ZXN1bHQ7CisgcmVzdWx0IAorLS0tLS0tLS0KKyB0CisoMSByb3cpCisKKy0tIGFkZF9yYW5nZSBm b3JjZSByZWFsbG9jIHRlc3QgMQorU0VMRUNUIGxlbmd0aCh0ZXN0X2Jtc19hZGRfcmFuZ2UoJyhi KScsIDAsIDIwMCkpID0gNjk3IGFzIHJlc3VsdDsKKyByZXN1bHQgCistLS0tLS0tLQorIHQKKygx IHJvdykKKworLS0gYWRkX3JhbmdlIGZvY2UgcmVhbGxvYyB0ZXN0IDIKK1NFTEVDVCBsZW5ndGgo dGVzdF9ibXNfYWRkX3JhbmdlKCcoYiknLCAxMDAwLCAxMTAwKSkgPSA1MDggYXMgcmVzdWx0Owor IHJlc3VsdCAKKy0tLS0tLS0tCisgdAorKDEgcm93KQorCistLSBtZW1iZXJzaGlwIGVtcHR5CitT RUxFQ1QgdGVzdF9ibXNfbWVtYmVyc2hpcCgnKGIpJykgPSAwIGFzIHJlc3VsdDsKKyByZXN1bHQg CistLS0tLS0tLQorIHQKKygxIHJvdykKKworLS0gbWVtYmVyc2hpcCBzaW5nbGV0b24KK1NFTEVD VCB0ZXN0X2Jtc19tZW1iZXJzaGlwKCcoYiA0MiknKSA9IDEgYXMgcmVzdWx0OworIHJlc3VsdCAK Ky0tLS0tLS0tCisgdAorKDEgcm93KQorCistLSBtZW1iZXJzaGlwIG11bHRpcGxlCitTRUxFQ1Qg dGVzdF9ibXNfbWVtYmVyc2hpcCgnKGIgMSAyKScpID0gMiBhcyByZXN1bHQ7CisgcmVzdWx0IAor LS0tLS0tLS0KKyB0CisoMSByb3cpCisKKy0tIHNpbmdsZXRvbl9tZW1iZXIgdmFsaWQKK1NFTEVD VCB0ZXN0X2Jtc19zaW5nbGV0b25fbWVtYmVyKCcoYiA0MiknKSA9IDQyIGFzIHJlc3VsdDsKKyBy ZXN1bHQgCistLS0tLS0tLQorIHQKKygxIHJvdykKKworLS0gc2V0IGl0ZXJhdGlvbgorU0VMRUNU ICduZXh0X21lbWJlciBmaXJzdCcgYXMgdGVzdCwgdGVzdF9ibXNfbmV4dF9tZW1iZXIoJyhiIDUg MTAgMTUgMjApJywgLTEpID0gNSBhcyByZXN1bHQKK1VOSU9OIEFMTAorU0VMRUNUICduZXh0X21l bWJlciBzZWNvbmQnIGFzIHRlc3QsIHRlc3RfYm1zX25leHRfbWVtYmVyKCcoYiA1IDEwIDE1IDIw KScsIDUpID0gMTAgYXMgcmVzdWx0CitVTklPTiBBTEwKK1NFTEVDVCAnbmV4dF9tZW1iZXIgcGFz dCBlbmQnIGFzIHRlc3QsIHRlc3RfYm1zX25leHRfbWVtYmVyKCcoYiA1IDEwIDE1IDIwKScsIDIw KSA9IC0yIGFzIHJlc3VsdAorVU5JT04gQUxMCitTRUxFQ1QgJ25leHRfbWVtYmVyIGVtcHR5IHNl dCcgYXMgdGVzdCwgdGVzdF9ibXNfbmV4dF9tZW1iZXIoJyhiKScsIC0xKSA9IC0yIGFzIHJlc3Vs dAorVU5JT04gQUxMCitTRUxFQ1QgJ3ByZXZfbWVtYmVyIGxhc3QnIGFzIHRlc3QsIHRlc3RfYm1z X3ByZXZfbWVtYmVyKCcoYiA1IDEwIDE1IDIwKScsIDIxKSA9IDIwIGFzIHJlc3VsdAorVU5JT04g QUxMCitTRUxFQ1QgJ3ByZXZfbWVtYmVyIHBlbnVsdGltYXRlJyBhcyB0ZXN0LCB0ZXN0X2Jtc19w cmV2X21lbWJlcignKGIgNSAxMCAxNSAyMCknLCAyMCkgPSAxNSBhcyByZXN1bHQKK1VOSU9OIEFM TAorU0VMRUNUICdwcmV2X21lbWJlciBwYXN0IGJlZ2lubmluZycgYXMgdGVzdCwgdGVzdF9ibXNf cHJldl9tZW1iZXIoJyhiIDUgMTAgMTUgMjApJywgNSkgPSAtMiBhcyByZXN1bHQKK1VOSU9OIEFM TAorU0VMRUNUICdwcmV2X21lbWJlciBlbXB0eSBzZXQnIGFzIHRlc3QsIHRlc3RfYm1zX3ByZXZf bWVtYmVyKCcoYiknLCAxMDApID0gLTIgYXMgcmVzdWx0OworICAgICAgICAgICAgdGVzdCAgICAg ICAgICAgIHwgcmVzdWx0IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLQor IG5leHRfbWVtYmVyIGZpcnN0ICAgICAgICAgIHwgdAorIG5leHRfbWVtYmVyIHNlY29uZCAgICAg ICAgIHwgdAorIG5leHRfbWVtYmVyIHBhc3QgZW5kICAgICAgIHwgdAorIG5leHRfbWVtYmVyIGVt cHR5IHNldCAgICAgIHwgdAorIHByZXZfbWVtYmVyIGxhc3QgICAgICAgICAgIHwgdAorIHByZXZf bWVtYmVyIHBlbnVsdGltYXRlICAgIHwgdAorIHByZXZfbWVtYmVyIHBhc3QgYmVnaW5uaW5nIHwg dAorIHByZXZfbWVtYmVyIGVtcHR5IHNldCAgICAgIHwgdAorKDggcm93cykKKworLS0gaGFzaCBm dW5jdGlvbnMKK1NFTEVDVCAnaGFzaCBOVUxMJyBhcyB0ZXN0LCB0ZXN0X2Jtc19oYXNoX3ZhbHVl KCcoYiknKSA9IDAgYXMgcmVzdWx0CitVTklPTiBBTEwKK1NFTEVDVCAnaGFzaCBjb25zaXN0ZW5j eScgYXMgdGVzdCwgdGVzdF9ibXNfaGFzaF92YWx1ZSgnKGIgMSAzIDUpJykgPSB0ZXN0X2Jtc19o YXNoX3ZhbHVlKCcoYiAxIDMgNSknKQorVU5JT04gQUxMCitTRUxFQ1QgJ2hhc2ggZGlmZmVyZW50 IHNldHMnIGFzIHRlc3QsIHRlc3RfYm1zX2hhc2hfdmFsdWUoJyhiIDEgMyA1KScpICE9IHRlc3Rf Ym1zX2hhc2hfdmFsdWUoJyhiIDIgNCA2KScpOworICAgICAgICB0ZXN0ICAgICAgICAgfCByZXN1 bHQgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0KKyBoYXNoIE5VTEwgICAgICAgICAg IHwgdAorIGhhc2ggY29uc2lzdGVuY3kgICAgfCB0CisgaGFzaCBkaWZmZXJlbnQgc2V0cyB8IHQK KygzIHJvd3MpCisKKy0tIHNldCBvdmVybGFwCitTRUxFQ1QgJ292ZXJsYXAgZXhpc3RpbmcnIGFz IHRlc3QsIHRlc3RfYm1zX292ZXJsYXAoJyhiIDEgMyA1KScsICcoYiAzIDUgNyknKSA9IHRydWUg YXMgcmVzdWx0CitVTklPTiBBTEwKK1NFTEVDVCAnb3ZlcmxhcCBub25lJyBhcyB0ZXN0LCB0ZXN0 X2Jtc19vdmVybGFwKCcoYiAxIDMgNSknLCAnKGIgMiA0IDYpJykgPSBmYWxzZSBhcyByZXN1bHQK K1VOSU9OIEFMTAorU0VMRUNUICdvdmVybGFwIHdpdGggTlVMTCcgYXMgdGVzdCwgdGVzdF9ibXNf b3ZlcmxhcCgnKGIpJywgJyhiIDEgMyA1KScpID0gZmFsc2UgYXMgcmVzdWx0OworICAgICAgIHRl c3QgICAgICAgIHwgcmVzdWx0IAorLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLQorIG92ZXJs YXAgZXhpc3RpbmcgIHwgdAorIG92ZXJsYXAgbm9uZSAgICAgIHwgdAorIG92ZXJsYXAgd2l0aCBO VUxMIHwgdAorKDMgcm93cykKKworLS0gc3Vic2V0IHJlbGF0aW9ucworU0VMRUNUICdzdWJzZXQg TlVMTCBpcyBzdWJzZXQgb2YgYWxsJyBhcyB0ZXN0LCB0ZXN0X2Jtc19pc19zdWJzZXQoJyhiKScs ICcoYiAxIDMgNSknKSA9IHRydWUgYXMgcmVzdWx0CitVTklPTiBBTEwKK1NFTEVDVCAnc3Vic2V0 IHByb3BlciBzdWJzZXQnIGFzIHRlc3QsIHRlc3RfYm1zX2lzX3N1YnNldCgnKGIgMSAzKScsICco YiAxIDMgNSknKSA9IHRydWUgYXMgcmVzdWx0CitVTklPTiBBTEwKK1NFTEVDVCAnc3Vic2V0IGlt cHJvcGVyIHN1YnNldCcgYXMgdGVzdCwgdGVzdF9ibXNfaXNfc3Vic2V0KCcoYiAxIDMgNSknLCAn KGIgMSAzKScpID0gZmFsc2UgYXMgcmVzdWx0CitVTklPTiBBTEwKK1NFTEVDVCAnc3Vic2V0IGRp c2pvaW50IHNldHMnIGFzIHRlc3QsIHRlc3RfYm1zX2lzX3N1YnNldCgnKGIgMSAzKScsICcoYiAy IDQpJykgPSBmYWxzZSBhcyByZXN1bHQKK1VOSU9OIEFMTAorU0VMRUNUICdzdWJzZXQgY29tcGFy aXNvbiBlZGdlJyBhcyB0ZXN0LAorCXRlc3RfYm1zX2lzX3N1YnNldCgKKwkJdGVzdF9ibXNfYWRk X3JhbmdlKE5VTEwsIDAsIDMxKSwKKwkJdGVzdF9ibXNfYWRkX3JhbmdlKE5VTEwsIDAsIDYzKSkK Kwk9IHRydWUgYXMgcmVzdWx0OworICAgICAgICAgICAgIHRlc3QgICAgICAgICAgICAgfCByZXN1 bHQgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0KKyBzdWJzZXQgTlVM TCBpcyBzdWJzZXQgb2YgYWxsIHwgdAorIHN1YnNldCBwcm9wZXIgc3Vic2V0ICAgICAgICAgfCB0 Cisgc3Vic2V0IGltcHJvcGVyIHN1YnNldCAgICAgICB8IHQKKyBzdWJzZXQgZGlzam9pbnQgc2V0 cyAgICAgICAgIHwgdAorIHN1YnNldCBjb21wYXJpc29uIGVkZ2UgICAgICAgfCB0CisoNSByb3dz KQorCistLSBjb3B5IG9wZXJhdGlvbnMKK1dJVEggdGVzdF9zZXQgQVMgKFNFTEVDVCAnKGIgMSAz IDUgNyknIEFTIG9yaWdpbmFsKQorU0VMRUNUICdjb3B5IE5VTEwnIGFzIHRlc3QsIHRlc3RfYm1z X2NvcHkoTlVMTCkgSVMgTlVMTCBhcyByZXN1bHQKK1VOSU9OIEFMTAorU0VMRUNUICdjb3B5IGVx dWFsaXR5JyBhcyB0ZXN0LCB0ZXN0X2Jtc19lcXVhbChvcmlnaW5hbCwgdGVzdF9ibXNfY29weShv cmlnaW5hbCkpID0gdHJ1ZSBhcyByZXN1bHQgRlJPTSB0ZXN0X3NldDsKKyAgICAgdGVzdCAgICAg IHwgcmVzdWx0IAorLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tCisgY29weSBOVUxMICAgICB8IHQK KyBjb3B5IGVxdWFsaXR5IHwgdAorKDIgcm93cykKKworLS0gYWRkIG1lbWJlcnMgb3BlcmF0aW9u CitTRUxFQ1QgdGVzdF9ibXNfYWRkX21lbWJlcnMoJyhiIDEgMyknLCAnKGIgNSA3KScpID0gJyhi IDEgMyA1IDcpJyBhcyByZXN1bHQ7CisgcmVzdWx0IAorLS0tLS0tLS0KKyB0CisoMSByb3cpCisK Ky0tIGFkZCBtZW1iZXJzIGNvbXBsZXgKK1NFTEVDVCB0ZXN0X2Jtc19hZGRfbWVtYmVycygnKGIg MSAzIDUpJywgJyhiIDEwMCAyMDAgMzAwKScpIGFzIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0ICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIChiIDEgMyA1IDEwMCAyMDAgMzAwKQor KDEgcm93KQorCistLSBoYXNoIGNvbnNpc3RlbmN5CitTRUxFQ1QgJ2JpdG1hcF9oYXNoIE5VTEwn IGFzIHRlc3QsCisgICAgICAgdGVzdF9iaXRtYXBfaGFzaCgnKGIpJykgPSAwIGFzIHJlc3VsdAor VU5JT04gQUxMCitTRUxFQ1QgJ2JpdG1hcF9oYXNoIGNvbnNpc3RlbmN5JyBhcyB0ZXN0LAorICAg ICAgIHRlc3RfYml0bWFwX2hhc2goJyhiIDEgMyA1KScpID0gdGVzdF9iaXRtYXBfaGFzaCgnKGIg MSAzIDUpJykgYXMgcmVzdWx0CitVTklPTiBBTEwKK1NFTEVDVCAnYml0bWFwX2hhc2ggdnMgYm1z X2hhc2hfdmFsdWUnIGFzIHRlc3QsCisgICAgICAgdGVzdF9iaXRtYXBfaGFzaCgnKGIgMSAzIDUp JykgPSB0ZXN0X2Jtc19oYXNoX3ZhbHVlKCcoYiAxIDMgNSknKSBhcyByZXN1bHQKK1VOSU9OIEFM TAorU0VMRUNUICdiaXRtYXBfaGFzaCBkaWZmZXJlbnQgc2V0cycgYXMgdGVzdCwKKyAgICAgICB0 ZXN0X2JpdG1hcF9oYXNoKCcoYiAxIDMgNSknKSAhPSB0ZXN0X2JpdG1hcF9oYXNoKCcoYiAyIDQg NiknKSBhcyByZXN1bHQ7CisgICAgICAgICAgICAgdGVzdCAgICAgICAgICAgICAgfCByZXN1bHQg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tCisgYml0bWFwX2hhc2gg TlVMTCAgICAgICAgICAgICAgfCB0CisgYml0bWFwX2hhc2ggY29uc2lzdGVuY3kgICAgICAgfCB0 CisgYml0bWFwX2hhc2ggdnMgYm1zX2hhc2hfdmFsdWUgfCB0CisgYml0bWFwX2hhc2ggZGlmZmVy ZW50IHNldHMgICAgfCB0CisoNCByb3dzKQorCistLSBtYXRjaCBmdW5jdGlvbgorU0VMRUNUICdi aXRtYXBfbWF0Y2ggTlVMTCBOVUxMIChzaG91bGQgYmUgMCknIGFzIHRlc3QsCisgICAgICAgdGVz dF9iaXRtYXBfbWF0Y2goJyhiKScsICcoYiknKSA9IDAgYXMgcmVzdWx0CitVTklPTiBBTEwKK1NF TEVDVCAnYml0bWFwX21hdGNoIE5VTEwgc2V0IChzaG91bGQgYmUgMSknIGFzIHRlc3QsCisgICAg ICAgdGVzdF9iaXRtYXBfbWF0Y2goJyhiKScsICcoYiAxIDMgNSknKSA9IDEgYXMgcmVzdWx0CitV TklPTiBBTEwKK1NFTEVDVCAnYml0bWFwX21hdGNoIHNldCBOVUxMIChzaG91bGQgYmUgMSknIGFz IHRlc3QsCisgICAgICAgdGVzdF9iaXRtYXBfbWF0Y2goJyhiIDEgMyA1KScsICcoYiknKSA9IDEg YXMgcmVzdWx0CitVTklPTiBBTEwKK1NFTEVDVCAnYml0bWFwX21hdGNoIGlkZW50aWNhbCBzZXRz IChzaG91bGQgYmUgMCknIGFzIHRlc3QsCisgICAgICAgdGVzdF9iaXRtYXBfbWF0Y2goJyhiIDEg MyA1KScsICcoYiAxIDMgNSknKSA9IDAgYXMgcmVzdWx0CitVTklPTiBBTEwKK1NFTEVDVCAnYml0 bWFwX21hdGNoIGRpZmZlcmVudCBzZXRzIChzaG91bGQgYmUgMSknIGFzIHRlc3QsCisgICAgICAg dGVzdF9iaXRtYXBfbWF0Y2goJyhiIDEgMyA1KScsICcoYiAyIDQgNiknKSA9IDEgYXMgcmVzdWx0 CitVTklPTiBBTEwKK1NFTEVDVCAnYml0bWFwX21hdGNoIHN1YnNldC9zdXBlcnNldCAoc2hvdWxk IGJlIDEpJyBhcyB0ZXN0LAorICAgICAgIHRlc3RfYml0bWFwX21hdGNoKCcoYiAxIDMpJywgJyhi IDEgMyA1KScpID0gMSBhcyByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIHRlc3QgICAgICAg ICAgICAgICAgICAgIHwgcmVzdWx0IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0KKyBiaXRtYXBfbWF0Y2ggTlVMTCBOVUxMIChzaG91bGQgYmUg MCkgICAgICAgfCB0CisgYml0bWFwX21hdGNoIE5VTEwgc2V0IChzaG91bGQgYmUgMSkgICAgICAg IHwgdAorIGJpdG1hcF9tYXRjaCBzZXQgTlVMTCAoc2hvdWxkIGJlIDEpICAgICAgICB8IHQKKyBi aXRtYXBfbWF0Y2ggaWRlbnRpY2FsIHNldHMgKHNob3VsZCBiZSAwKSAgfCB0CisgYml0bWFwX21h dGNoIGRpZmZlcmVudCBzZXRzIChzaG91bGQgYmUgMSkgIHwgdAorIGJpdG1hcF9tYXRjaCBzdWJz ZXQvc3VwZXJzZXQgKHNob3VsZCBiZSAxKSB8IHQKKyg2IHJvd3MpCisKKy0tIG1hdGNoIHJlbGF0 aW9uc2hpcCB3aXRoIGJtc19lcXVhbAorU0VMRUNUICdiaXRtYXBfbWF0Y2ggdnMgYm1zX2VxdWFs IChlcXVhbCBzZXRzKScgYXMgdGVzdCwKKyAgICAgICAodGVzdF9iaXRtYXBfbWF0Y2goJyhiIDEg MyA1KScsICcoYiAxIDMgNSknKSA9IDApID0gdGVzdF9ibXNfZXF1YWwoJyhiIDEgMyA1KScsICco YiAxIDMgNSknKSBhcyByZXN1bHQKK1VOSU9OIEFMTAorU0VMRUNUICdiaXRtYXBfbWF0Y2ggdnMg Ym1zX2VxdWFsIChkaWZmZXJlbnQgc2V0cyknIGFzIHRlc3QsCisgICAgICAgKHRlc3RfYml0bWFw X21hdGNoKCcoYiAxIDMgNSknLCAnKGIgMiA0IDYpJykgPSAwKSA9IHRlc3RfYm1zX2VxdWFsKCco YiAxIDMgNSknLCAnKGIgMiA0IDYpJykgYXMgcmVzdWx0CitVTklPTiBBTEwKK1NFTEVDVCAnYml0 bWFwX21hdGNoIHZzIGJtc19lcXVhbCAoTlVMTCBjYXNlcyknIGFzIHRlc3QsCisgICAgICAgKHRl c3RfYml0bWFwX21hdGNoKCcoYiknLCAnKGIpJykgPSAwKSA9IHRlc3RfYm1zX2VxdWFsKCcoYikn LCAnKGIpJykgYXMgcmVzdWx0OworICAgICAgICAgICAgICAgICAgICB0ZXN0ICAgICAgICAgICAg ICAgICAgICB8IHJlc3VsdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tCisgYml0bWFwX21hdGNoIHZzIGJtc19lcXVhbCAoZXF1YWwgc2V0cykg ICAgIHwgdAorIGJpdG1hcF9tYXRjaCB2cyBibXNfZXF1YWwgKGRpZmZlcmVudCBzZXRzKSB8IHQK KyBiaXRtYXBfbWF0Y2ggdnMgYm1zX2VxdWFsIChOVUxMIGNhc2VzKSAgICAgfCB0CisoMyByb3dz KQorCistLSBiaXRtYXBfbWF0Y2ggWzEsMyw1XSB2cyBbMSwzLDVdCitTRUxFQ1QgdGVzdF9iaXRt YXBfbWF0Y2goJyhiIDEgMyA1KScsICcoYiAxIDMgNSknKSBhcyBtYXRjaF92YWx1ZTsKKyBtYXRj aF92YWx1ZSAKKy0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgMAorKDEgcm93KQorCistLSBiaXRt YXBfbWF0Y2ggWzEsMyw1XSB2cyBbMiw0LDZdCitTRUxFQ1QgdGVzdF9iaXRtYXBfbWF0Y2goJyhi IDEgMyA1KScsICcoYiAyIDQgNiknKSBhcyBtYXRjaF92YWx1ZTsKKyBtYXRjaF92YWx1ZSAKKy0t LS0tLS0tLS0tLS0KKyAgICAgICAgICAgMQorKDEgcm93KQorCistLSBiaXRtYXBfbWF0Y2ggZW1w dHkgYXJyYXlzCitTRUxFQ1QgdGVzdF9iaXRtYXBfbWF0Y2goJyhiKScsICcoYiknKSA9IDAgYXMg cmVzdWx0OworIHJlc3VsdCAKKy0tLS0tLS0tCisgdAorKDEgcm93KQorCistLSBvdmVybGFwIHdp dGggbGlzdHMKK1dJVEggdGVzdF9saXN0cyBBUyAoCisgICAgU0VMRUNUCisgICAgICAgIEFSUkFZ WzBdIEFTIGEwLAorICAgICAgICBBUlJBWVsxLDJdIEFTIGExMiwKKyAgICAgICAgQVJSQVlbMyw0 LDVdIEFTIGEzNDUsCisgICAgICAgIEFSUkFZWzYsNyw4LDldIEFTIGE2Nzg5CispCitTRUxFQ1Qg J292ZXJsYXAgbGlzdCAwJyBhcyB0ZXN0LAorICAgICAgIHRlc3RfYm1zX292ZXJsYXBfbGlzdCgn KGIgMCknLCBhMCkgYXMgcmVzdWx0CitGUk9NIHRlc3RfbGlzdHMKK1VOSU9OIEFMTAorU0VMRUNU ICdvdmVybGFwIGxpc3QgMTInIGFzIHRlc3QsCisgICAgICAgdGVzdF9ibXNfb3ZlcmxhcF9saXN0 KCcoYiAyIDMpJywgYTEyKSBhcyByZXN1bHQKK0ZST00gdGVzdF9saXN0cworVU5JT04gQUxMCitT RUxFQ1QgJ292ZXJsYXAgbGlzdCAzNDUnIGFzIHRlc3QsCisgICAgICAgdGVzdF9ibXNfb3Zlcmxh cF9saXN0KCcoYiAzIDQpJywgYTM0NSkgYXMgcmVzdWx0CitGUk9NIHRlc3RfbGlzdHMKK1VOSU9O IEFMTAorU0VMRUNUICdvdmVybGFwIGxpc3QgNjc4OScgYXMgdGVzdCwKKyAgICAgICB0ZXN0X2Jt c19vdmVybGFwX2xpc3QoJyhiIDcgMTApJywgYTY3ODkpIGFzIHJlc3VsdAorRlJPTSB0ZXN0X2xp c3RzCitVTklPTiBBTEwKK1NFTEVDVCAnb3ZlcmxhcCBsaXN0IDY3ODkgbm8gb3ZlcmxhcCcgYXMg dGVzdCwKKyAgICAgICB0ZXN0X2Jtc19vdmVybGFwX2xpc3QoJyhiIDEgNSknLCBhNjc4OSkgYXMg cmVzdWx0CitGUk9NIHRlc3RfbGlzdHM7CisgICAgICAgICAgICAgdGVzdCAgICAgICAgICAgICB8 IHJlc3VsdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLQorIG92ZXJs YXAgbGlzdCAwICAgICAgICAgICAgICAgfCB0Cisgb3ZlcmxhcCBsaXN0IDEyICAgICAgICAgICAg ICB8IHQKKyBvdmVybGFwIGxpc3QgMzQ1ICAgICAgICAgICAgIHwgdAorIG92ZXJsYXAgbGlzdCA2 Nzg5ICAgICAgICAgICAgfCB0Cisgb3ZlcmxhcCBsaXN0IDY3ODkgbm8gb3ZlcmxhcCB8IGYKKyg1 IHJvd3MpCisKKy0tIG92ZXJsYXAgZW1wdHkgbGlzdAorU0VMRUNUIHRlc3RfYm1zX292ZXJsYXBf bGlzdCgnKGIgMSknLCBBUlJBWVtdOjppbnRlZ2VyW10pIGFzIHJlc3VsdDsKKyByZXN1bHQgCist LS0tLS0tLQorIGYKKygxIHJvdykKKworLS0gcmFuZG9tIG9wZXJhdGlvbnMKK1NFTEVDVCB0ZXN0 X3JhbmRvbV9vcGVyYXRpb25zKC0xLCAxMDAwMCwgODE5MjAsIDApID4gMCBhcyByZXN1bHQ7Cisg cmVzdWx0IAorLS0tLS0tLS0KKyB0CisoMSByb3cpCisKKy0tIHRoZXNlIHNob3VsZCBwcm9kdWNl IEVSUk9ScworU0VMRUNUIHRlc3RfYm1zX21ha2Vfc2luZ2xldG9uKC0xKTsKK0VSUk9SOiAgbmVn YXRpdmUgYml0bWFwc2V0IG1lbWJlciBub3QgYWxsb3dlZAorU0VMRUNUIHRlc3RfYm1zX2FkZF9t ZW1iZXIoJyhiIDEpJywgLTEpOworRVJST1I6ICBuZWdhdGl2ZSBiaXRtYXBzZXQgbWVtYmVyIG5v dCBhbGxvd2VkCitTRUxFQ1QgdGVzdF9ibXNfaXNfbWVtYmVyKCcoYiknLCAtNSk7CitFUlJPUjog IG5lZ2F0aXZlIGJpdG1hcHNldCBtZW1iZXIgbm90IGFsbG93ZWQKK1NFTEVDVCB0ZXN0X2Jtc19h ZGRfbWVtYmVyKCcoYiknLCAtMTApOworRVJST1I6ICBuZWdhdGl2ZSBiaXRtYXBzZXQgbWVtYmVy IG5vdCBhbGxvd2VkCitTRUxFQ1QgdGVzdF9ibXNfZGVsX21lbWJlcignKGIpJywgLTIwKTsKK0VS Uk9SOiAgbmVnYXRpdmUgYml0bWFwc2V0IG1lbWJlciBub3QgYWxsb3dlZAorU0VMRUNUIHRlc3Rf Ym1zX2FkZF9yYW5nZSgnKGIpJywgLTUsIDEwKTsKK0VSUk9SOiAgbmVnYXRpdmUgYml0bWFwc2V0 IG1lbWJlciBub3QgYWxsb3dlZAorU0VMRUNUIHRlc3RfYm1zX3NpbmdsZXRvbl9tZW1iZXIoJyhi IDEgMiknKTsKK0VSUk9SOiAgYml0bWFwc2V0IGhhcyBtdWx0aXBsZSBtZW1iZXJzCitTRUxFQ1Qg dGVzdF9ibXNfYWRkX21lbWJlcignKGIpJywgMTAwMCk7CisgdGVzdF9ibXNfYWRkX21lbWJlciAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIChiIDEwMDApCisoMSByb3cpCisKK0RST1AgRVhURU5T SU9OIHRlc3RfYml0bWFwc2V0OwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Jp dG1hcHNldC9tZXNvbi5idWlsZCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQvbWVz b24uYnVpbGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjg0OGY3YTQ0 ZWI5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC9t ZXNvbi5idWlsZApAQCAtMCwwICsxLDMzIEBACisjIENvcHlyaWdodCAoYykgMjAyNC0yMDI1LCBQ b3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCit0ZXN0X2JpdG1hcHNldF9zb3Vy Y2VzID0gZmlsZXMoCisgICd0ZXN0X2JpdG1hcHNldC5jJywKKykKKworaWYgaG9zdF9zeXN0ZW0g PT0gJ3dpbmRvd3MnCisgIHRlc3RfYml0bWFwc2V0X3NvdXJjZXMgKz0gcmNfbGliX2dlbi5wcm9j ZXNzKHdpbjMydmVyX3JjLCBleHRyYV9hcmdzOiBbCisgICAgJy0tTkFNRScsICd0ZXN0X2JpdG1h cHNldCcsCisgICAgJy0tRklMRURFU0MnLCAndGVzdF9iaXRtYXBzZXQgLSB0ZXN0IGNvZGUgZm9y IHNyYy9pbmNsdWRlL25vZGVzL2JpdG1hcHNldC5oJyxdKQorZW5kaWYKKwordGVzdF9iaXRtYXBz ZXQgPSBzaGFyZWRfbW9kdWxlKCd0ZXN0X2JpdG1hcHNldCcsCisgIHRlc3RfYml0bWFwc2V0X3Nv dXJjZXMsCisgIGt3YXJnczogcGdfdGVzdF9tb2RfYXJncywKKykKK3Rlc3RfaW5zdGFsbF9saWJz ICs9IHRlc3RfYml0bWFwc2V0CisKK3Rlc3RfaW5zdGFsbF9kYXRhICs9IGZpbGVzKAorICAndGVz dF9iaXRtYXBzZXQuY29udHJvbCcsCisgICd0ZXN0X2JpdG1hcHNldC0tMS4wLnNxbCcsCispCisK K3Rlc3RzICs9IHsKKyAgJ25hbWUnOiAndGVzdF9iaXRtYXBzZXQnLAorICAnc2QnOiBtZXNvbi5j dXJyZW50X3NvdXJjZV9kaXIoKSwKKyAgJ2JkJzogbWVzb24uY3VycmVudF9idWlsZF9kaXIoKSwK KyAgJ3JlZ3Jlc3MnOiB7CisgICAgJ3NxbCc6IFsKKyAgICAgICd0ZXN0X2JpdG1hcHNldCcsCisg ICAgXSwKKyAgfSwKK30KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBz ZXQvc3FsL3Rlc3RfYml0bWFwc2V0LnNxbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBz ZXQvc3FsL3Rlc3RfYml0bWFwc2V0LnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uYzgwZTYxOTMyMTkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfYml0bWFwc2V0L3NxbC90ZXN0X2JpdG1hcHNldC5zcWwKQEAgLTAsMCArMSwzMTIgQEAK K0NSRUFURSBFWFRFTlNJT04gSUYgTk9UIEVYSVNUUyB0ZXN0X2JpdG1hcHNldDsKKworLS0gbWFr ZV9zaW5nbGV0b24oNDIpCitTRUxFQ1QgdGVzdF9ibXNfbWFrZV9zaW5nbGV0b24oNDIpID0gJyhi IDQyKScgYXMgcmVzdWx0OworLS0gbWFrZV9zaW5nbGV0b24oMCkKK1NFTEVDVCB0ZXN0X2Jtc19t YWtlX3NpbmdsZXRvbigwKSA9ICcoYiAwKScgYXMgcmVzdWx0OworLS0gbWFrZV9zaW5nbGV0b24o MTAwMCkKK1NFTEVDVCB0ZXN0X2Jtc19tYWtlX3NpbmdsZXRvbigxMDAwKSA9ICcoYiAxMDAwKScg YXMgcmVzdWx0OworCistLSBhZGRfbWVtYmVyKE5VTEwsIDEwKQorU0VMRUNUIHRlc3RfYm1zX2Fk ZF9tZW1iZXIoJyhiKScsIDEwKSA9ICcoYiAxMCknIGFzIHJlc3VsdDsKKy0tIGFkZF9tZW1iZXIg Y29uc2lzdGVuY3kKK1NFTEVDVCB0ZXN0X2Jtc19hZGRfbWVtYmVyKCcoYiknLCAxMCkgYXMgcmVz dWx0OworLS0gYWRkX21lbWJlciB0byBleGlzdGluZworU0VMRUNUIHRlc3RfYm1zX2FkZF9tZW1i ZXIoJyhiIDUpJywgMTApID0gJyhiIDUgMTApJyBhcyByZXN1bHQ7CistLSBhZGRfbWVtYmVyIHNv cnRlZAorU0VMRUNUIHRlc3RfYm1zX2FkZF9tZW1iZXIoJyhiIDEwKScsIDUpID0gJyhiIDUgMTAp JyBhcyByZXN1bHQ7CistLSBhZGRfbWVtYmVyIGlkZW1wb3RlbnQKK1NFTEVDVCB0ZXN0X2Jtc19h ZGRfbWVtYmVyKCcoYiAxMCknLCAxMCkgYXMgcmVzdWx0OworCisKKy0tIGRlbF9tZW1iZXIgZnJv bSBOVUxMCitTRUxFQ1QgdGVzdF9ibXNfZGVsX21lbWJlcignKGIpJywgMTApIElTIE5VTEwgYXMg cmVzdWx0OworLS0gZGVsX21lbWJlciBzaW5nbGV0b24gYmVjb21lcyBlbXB0eQorU0VMRUNUIHRl c3RfYm1zX2RlbF9tZW1iZXIoJyhiIDEwKScsIDEwKSBJUyBOVUxMIGFzIHJlc3VsdDsKKy0tIGRl bF9tZW1iZXIgbm8gY2hhbmdlCitTRUxFQ1QgdGVzdF9ibXNfZGVsX21lbWJlcignKGIgMTApJywg NSkgYXMgcmVzdWx0OworLS0gZGVsX21lbWJlciBmcm9tIG1pZGRsZQorU0VMRUNUIHRlc3RfYm1z X2RlbF9tZW1iZXIoJyhiIDEgMiAzKScsIDIpID0gJyhiIDEgMyknIGFzIHJlc3VsdDsKKy0tIGRl bF9tZW1iZXIgdHJpZ2dlcnMgcmVhbGxvYworU0VMRUNUIHRlc3RfYm1zX2RlbF9tZW1iZXIodGVz dF9ibXNfZGVsX21lbWJlcignKGIgMCAzMSAzMiA2MyA2NCknLCAzMiksIDYzKSBhcyByZXN1bHQ7 CistLSBkZWxfbWVtYmVyIHdvcmQgYm91bmRhcnkKK1NFTEVDVCB0ZXN0X2Jtc19kZWxfbWVtYmVy KHRlc3RfYm1zX2FkZF9yYW5nZSgnKGIpJywgMzAsIDM0KSwgMzIpIGFzIHJlc3VsdDsKKworLS0g dW5pb24gb3BlcmF0aW9ucworU0VMRUNUICd1bmlvbiBvdmVybGFwcGluZyBzZXRzJyBhcyB0ZXN0 LAorICAgICAgIHRlc3RfYm1zX3VuaW9uKCcoYiAxIDMgNSknLCAnKGIgMyA1IDcpJykgPSAnKGIg MSAzIDUgNyknIGFzIHJlc3VsdAorVU5JT04gQUxMCitTRUxFQ1QgJ3VuaW9uIHdpdGggTlVMTCcg YXMgdGVzdCwKKyAgICAgICB0ZXN0X2Jtc191bmlvbignKGIgMSAzIDUpJywgJyhiKScpID0gJyhi IDEgMyA1KScgYXMgcmVzdWx0CitVTklPTiBBTEwKK1NFTEVDVCAndW5pb24gTlVMTCB3aXRoIE5V TEwnIGFzIHRlc3QsCisgICAgICAgdGVzdF9ibXNfdW5pb24oJyhiKScsICcoYiknKSBJUyBOVUxM IGFzIHJlc3VsdDsKK1NFTEVDVCAnb3ZlcmxhcHBpbmcgcmFuZ2VzJyBhcyB0ZXN0LAorICAgICAg IHRlc3RfYm1zX3VuaW9uKAorICAgICAgICAgICB0ZXN0X2Jtc19hZGRfcmFuZ2UoJyhiKScsIDAs IDE1KSwKKyAgICAgICAgICAgdGVzdF9ibXNfYWRkX3JhbmdlKCcoYiknLCAxMCwgMjApCisgICAg ICAgKSBhcyByZXN1bHQ7CisKKy0tIGludGVyc2VjdGlvbiBvcGVyYXRpb25zCitTRUxFQ1QgJ2lu dGVyc2VjdCBvdmVybGFwcGluZyBzZXRzJyBhcyB0ZXN0LAorICAgICAgIHRlc3RfYm1zX2ludGVy c2VjdCgnKGIgMSAzIDUpJywgJyhiIDMgNSA3KScpID0gJyhiIDMgNSknIGFzIHJlc3VsdAorVU5J T04gQUxMCitTRUxFQ1QgJ2ludGVyc2VjdCBkaXNqb2ludCBzZXRzJyBhcyB0ZXN0LAorICAgICAg IHRlc3RfYm1zX2ludGVyc2VjdCgnKGIgMSAzIDUpJywgJyhiIDIgNCA2KScpIElTIE5VTEwgYXMg cmVzdWx0CitVTklPTiBBTEwKK1NFTEVDVCAnaW50ZXJzZWN0IHdpdGggTlVMTCcgYXMgdGVzdCwK KyAgICAgICB0ZXN0X2Jtc19pbnRlcnNlY3QoJyhiIDEgMyA1KScsICcoYiknKSBJUyBOVUxMIGFz IHJlc3VsdDsKKworLS0gYm1zX2ludF9tZW1iZXJzCitTRUxFQ1QgJ2ludChlcnNlY3QpIG92ZXJs YXBwaW5nIHNldHMnIGFzIHRlc3QsCisgICAgICAgdGVzdF9ibXNfaW50X21lbWJlcnMoJyhiIDEg MyA1KScsICcoYiAzIDUgNyknKSA9ICcoYiAzIDUpJyBhcyByZXN1bHQKK1VOSU9OIEFMTAorU0VM RUNUICdpbnQoZXJzZWN0KSBkaXNqb2ludCBzZXRzJyBhcyB0ZXN0LAorICAgICAgIHRlc3RfYm1z X2ludF9tZW1iZXJzKCcoYiAxIDMgNSknLCAnKGIgMiA0IDYpJykgSVMgTlVMTCBhcyByZXN1bHQK K1VOSU9OIEFMTAorU0VMRUNUICdpbnQoZXJzZWN0KSB3aXRoIE5VTEwnIGFzIHRlc3QsCisgICAg ICAgdGVzdF9ibXNfaW50X21lbWJlcnMoJyhiIDEgMyA1KScsICcoYiknKSBJUyBOVUxMIGFzIHJl c3VsdAorVU5JT04gQUxMCitTRUxFQ1QgJ2ludChlcnNlY3QpIG1lbWJlcnMnIGFzIHRlc3QsCisJ dGVzdF9ibXNfaW50X21lbWJlcnMoJyhiIDAgMzEgMzIgNjMgNjQpJywgJyhiIDMxIDMyIDY0IDY1 KScpID0gJyhiIDMxIDMyIDY0KScgYXMgcmVzdWx0OworCistLSBkaWZmZXJlbmNlIG9wZXJhdGlv bnMKK1NFTEVDVCAnZGlmZmVyZW5jZSBvdmVybGFwcGluZyBzZXRzJyBhcyB0ZXN0LAorICAgICAg IHRlc3RfYm1zX2RpZmZlcmVuY2UoJyhiIDEgMyA1KScsICcoYiAzIDUgNyknKSA9ICcoYiAxKScg YXMgcmVzdWx0CitVTklPTiBBTEwKK1NFTEVDVCAnZGlmZmVyZW5jZSBkaXNqb2ludCBzZXRzJyBh cyB0ZXN0LAorICAgICAgIHRlc3RfYm1zX2RpZmZlcmVuY2UoJyhiIDEgMyA1KScsICcoYiAyIDQg NiknKSA9ICcoYiAxIDMgNSknIGFzIHJlc3VsdAorVU5JT04gQUxMCitTRUxFQ1QgJ2RpZmZlcmVu Y2UgaWRlbnRpY2FsIHNldHMnIGFzIHRlc3QsCisgICAgICAgdGVzdF9ibXNfZGlmZmVyZW5jZSgn KGIgMSAzIDUpJywgJyhiIDEgMyA1KScpIElTIE5VTEwgYXMgcmVzdWx0OworU0VMRUNUICdkaWZm ZXJlbmNlIHN1YnRyYWN0aW9uIGVkZ2UgY2FzZScgYXMgdGVzdCwKKyAgICAgICB0ZXN0X2Jtc19k aWZmZXJlbmNlKAorICAgICAgICAgICB0ZXN0X2Jtc19hZGRfcmFuZ2UoJyhiKScsIDAsIDEwMCks CisgICAgICAgICAgIHRlc3RfYm1zX2FkZF9yYW5nZSgnKGIpJywgNTAsIDE1MCkKKyAgICAgICAp IGFzIHJlc3VsdDsKK1NFTEVDVCAnZGlmZmVyZW5jZSBzdWJ0cmFjdCB0byBlbXB0eScgYXMgdGVz dCwKKyAgICAgICB0ZXN0X2Jtc19kaWZmZXJlbmNlKCcoYiA0MiknLCAnKGIgNDIpJykgYXMgcmVz dWx0OworCistLSBtZW1iZXJzaGlwIHRlc3RzCitTRUxFQ1QgJ2lzX21lbWJlciBleGlzdGluZycg YXMgdGVzdCwgdGVzdF9ibXNfaXNfbWVtYmVyKCcoYiAxIDMgNSknLCAxKSA9IHRydWUgYXMgcmVz dWx0CitVTklPTiBBTEwKK1NFTEVDVCAnaXNfbWVtYmVyIG1pc3NpbmcnIGFzIHRlc3QsIHRlc3Rf Ym1zX2lzX21lbWJlcignKGIgMSAzIDUpJywgMikgPSBmYWxzZSBhcyByZXN1bHQKK1VOSU9OIEFM TAorU0VMRUNUICdpc19tZW1iZXIgZXhpc3RpbmcgbWlkZGxlJyBhcyB0ZXN0LCB0ZXN0X2Jtc19p c19tZW1iZXIoJyhiIDEgMyA1KScsIDMpID0gdHJ1ZSBhcyByZXN1bHQKK1VOSU9OIEFMTAorU0VM RUNUICdpc19tZW1iZXIgTlVMTCBzZXQnIGFzIHRlc3QsIHRlc3RfYm1zX2lzX21lbWJlcignKGIp JywgMSkgPSBmYWxzZSBhcyByZXN1bHQ7CisKKy0tIG51bV9tZW1iZXJzIE5VTEwKK1NFTEVDVCB0 ZXN0X2Jtc19udW1fbWVtYmVycygnKGIpJykgPSAwIGFzIHJlc3VsdDsKKy0tIG51bV9tZW1iZXJz IHNtYWxsIHNldAorU0VMRUNUIHRlc3RfYm1zX251bV9tZW1iZXJzKCcoYiAxIDMgNSknKSA9IDMg YXMgcmVzdWx0OworLS0gbnVtX21lbWJlcnMgbGFyZ2VyIHNldAorU0VMRUNUIHRlc3RfYm1zX251 bV9tZW1iZXJzKCcoYiAyIDQgNiA4IDEwKScpID0gNSBhcyByZXN1bHQ7CisKKy0tIHNldCBlcXVh bGl0eSBhbmQgY29tcGFyaXNvbgorU0VMRUNUICdlcXVhbCBOVUxMIE5VTEwnIGFzIHRlc3QsIHRl c3RfYm1zX2VxdWFsKCcoYiknLCAnKGIpJykgPSB0cnVlIGFzIHJlc3VsdAorVU5JT04gQUxMCitT RUxFQ1QgJ2VxdWFsIE5VTEwgc2V0JyBhcyB0ZXN0LCB0ZXN0X2Jtc19lcXVhbCgnKGIpJywgJyhi IDEgMyA1KScpID0gZmFsc2UgYXMgcmVzdWx0CitVTklPTiBBTEwKK1NFTEVDVCAnZXF1YWwgc2V0 IE5VTEwnIGFzIHRlc3QsIHRlc3RfYm1zX2VxdWFsKCcoYiAxIDMgNSknLCAnKGIpJykgPSBmYWxz ZSBhcyByZXN1bHQKK1VOSU9OIEFMTAorU0VMRUNUICdlcXVhbCBpZGVudGljYWwgc2V0cycgYXMg dGVzdCwgdGVzdF9ibXNfZXF1YWwoJyhiIDEgMyA1KScsICcoYiAxIDMgNSknKSA9IHRydWUgYXMg cmVzdWx0CitVTklPTiBBTEwKK1NFTEVDVCAnZXF1YWwgZGlmZmVyZW50IHNldHMnIGFzIHRlc3Qs IHRlc3RfYm1zX2VxdWFsKCcoYiAxIDMgNSknLCAnKGIgMiA0IDYpJykgPSBmYWxzZSBhcyByZXN1 bHQKK1VOSU9OIEFMTAorU0VMRUNUICdjb21wYXJlIE5VTEwgTlVMTCcgYXMgdGVzdCwgdGVzdF9i bXNfY29tcGFyZSgnKGIpJywgJyhiKScpID0gMCBhcyByZXN1bHQKK1VOSU9OIEFMTAorU0VMRUNU ICdjb21wYXJlIE5VTEwgc2V0JyBhcyB0ZXN0LCB0ZXN0X2Jtc19jb21wYXJlKCcoYiknLCAnKGIg MSAzKScpID0gLTEgYXMgcmVzdWx0CitVTklPTiBBTEwKK1NFTEVDVCAnY29tcGFyZSBzZXQgTlVM TCcgYXMgdGVzdCwgdGVzdF9ibXNfY29tcGFyZSgnKGIgMSAzKScsICcoYiknKSA9IDEgYXMgcmVz dWx0CitVTklPTiBBTEwKK1NFTEVDVCAnY29tcGFyZSBlcXVhbCBzZXRzJyBhcyB0ZXN0LCB0ZXN0 X2Jtc19jb21wYXJlKCcoYiAxIDMpJywgJyhiIDEgMyknKSA9IDAgYXMgcmVzdWx0CitVTklPTiBB TEwKK1NFTEVDVCAnY29tcGFyZSBzdWJzZXQgc3VwZXJzZXQnIGFzIHRlc3QsIHRlc3RfYm1zX2Nv bXBhcmUoJyhiIDEgMyknLCAnKGIgMSAzIDUpJykgPSAtMSBhcyByZXN1bHQKK1VOSU9OIEFMTAor U0VMRUNUICdjb21wYXJlIHN1cGVyc2V0IHN1YnNldCcgYXMgdGVzdCwgdGVzdF9ibXNfY29tcGFy ZSgnKGIgMSAzIDUpJywgJyhiIDEgMyknKSA9IDEgYXMgcmVzdWx0OworU0VMRUNUICdjb21wYXJl IGVkZ2UgY2FzZScgYXMgdGVzdCwKKyAgICAgICB0ZXN0X2Jtc19jb21wYXJlKAorICAgICAgICAg ICB0ZXN0X2Jtc19hZGRfcmFuZ2UoJyhiKScsIDAsIDYzKSwKKyAgICAgICAgICAgdGVzdF9ibXNf YWRkX3JhbmdlKCcoYiknLCAwLCA2NCkKKyAgICAgICApIGFzIHJlc3VsdDsKKworLS0gYWRkX3Jh bmdlIGJhc2ljCitTRUxFQ1QgdGVzdF9ibXNfYWRkX3JhbmdlKCcoYiknLCA1LCA3KSA9ICcoYiA1 IDYgNyknIGFzIHJlc3VsdDsKKy0tIGFkZF9yYW5nZSBzaW5nbGUgZWxlbWVudAorU0VMRUNUIHRl c3RfYm1zX2FkZF9yYW5nZSgnKGIpJywgNSwgNSkgPSAnKGIgNSknIGFzIHJlc3VsdDsKKy0tIGFk ZF9yYW5nZSB0byBleGlzdGluZworU0VMRUNUIHRlc3RfYm1zX2FkZF9yYW5nZSgnKGIgMSAxMCkn LCA1LCA3KSA9ICcoYiAxIDUgNiA3IDEwKScgYXMgcmVzdWx0OworLS0gYWRkX3JhbmdlIGF0IHdv cmQgYm91bmRhcnkgMzEKK1NFTEVDVCB0ZXN0X2Jtc19hZGRfcmFuZ2UoJyhiKScsIDMwLCAzNCkg YXMgcmVzdWx0OworLS0gYWRkX3JhbmdlIGF0IHdvcmQgYm91bmRhcnkgNjMKK1NFTEVDVCB0ZXN0 X2Jtc19hZGRfcmFuZ2UoJyhiKScsIDYyLCA2NikgYXMgcmVzdWx0OworLS0gYWRkX3JhbmdlIGxh cmdlIHJhbmdlCitTRUxFQ1QgbGVuZ3RoKHRlc3RfYm1zX2FkZF9yYW5nZSgnKGIpJywgMCwgMTAw MCkpID0gMzg5OCBhcyByZXN1bHQ7CistLSBhZGRfcmFuZ2UgZm9yY2UgcmVhbGxvYyB0ZXN0IDEK K1NFTEVDVCBsZW5ndGgodGVzdF9ibXNfYWRkX3JhbmdlKCcoYiknLCAwLCAyMDApKSA9IDY5NyBh cyByZXN1bHQ7CistLSBhZGRfcmFuZ2UgZm9jZSByZWFsbG9jIHRlc3QgMgorU0VMRUNUIGxlbmd0 aCh0ZXN0X2Jtc19hZGRfcmFuZ2UoJyhiKScsIDEwMDAsIDExMDApKSA9IDUwOCBhcyByZXN1bHQ7 CisKKy0tIG1lbWJlcnNoaXAgZW1wdHkKK1NFTEVDVCB0ZXN0X2Jtc19tZW1iZXJzaGlwKCcoYikn KSA9IDAgYXMgcmVzdWx0OworLS0gbWVtYmVyc2hpcCBzaW5nbGV0b24KK1NFTEVDVCB0ZXN0X2Jt c19tZW1iZXJzaGlwKCcoYiA0MiknKSA9IDEgYXMgcmVzdWx0OworLS0gbWVtYmVyc2hpcCBtdWx0 aXBsZQorU0VMRUNUIHRlc3RfYm1zX21lbWJlcnNoaXAoJyhiIDEgMiknKSA9IDIgYXMgcmVzdWx0 OworCistLSBzaW5nbGV0b25fbWVtYmVyIHZhbGlkCitTRUxFQ1QgdGVzdF9ibXNfc2luZ2xldG9u X21lbWJlcignKGIgNDIpJykgPSA0MiBhcyByZXN1bHQ7CisKKy0tIHNldCBpdGVyYXRpb24KK1NF TEVDVCAnbmV4dF9tZW1iZXIgZmlyc3QnIGFzIHRlc3QsIHRlc3RfYm1zX25leHRfbWVtYmVyKCco YiA1IDEwIDE1IDIwKScsIC0xKSA9IDUgYXMgcmVzdWx0CitVTklPTiBBTEwKK1NFTEVDVCAnbmV4 dF9tZW1iZXIgc2Vjb25kJyBhcyB0ZXN0LCB0ZXN0X2Jtc19uZXh0X21lbWJlcignKGIgNSAxMCAx NSAyMCknLCA1KSA9IDEwIGFzIHJlc3VsdAorVU5JT04gQUxMCitTRUxFQ1QgJ25leHRfbWVtYmVy IHBhc3QgZW5kJyBhcyB0ZXN0LCB0ZXN0X2Jtc19uZXh0X21lbWJlcignKGIgNSAxMCAxNSAyMCkn LCAyMCkgPSAtMiBhcyByZXN1bHQKK1VOSU9OIEFMTAorU0VMRUNUICduZXh0X21lbWJlciBlbXB0 eSBzZXQnIGFzIHRlc3QsIHRlc3RfYm1zX25leHRfbWVtYmVyKCcoYiknLCAtMSkgPSAtMiBhcyBy ZXN1bHQKK1VOSU9OIEFMTAorU0VMRUNUICdwcmV2X21lbWJlciBsYXN0JyBhcyB0ZXN0LCB0ZXN0 X2Jtc19wcmV2X21lbWJlcignKGIgNSAxMCAxNSAyMCknLCAyMSkgPSAyMCBhcyByZXN1bHQKK1VO SU9OIEFMTAorU0VMRUNUICdwcmV2X21lbWJlciBwZW51bHRpbWF0ZScgYXMgdGVzdCwgdGVzdF9i bXNfcHJldl9tZW1iZXIoJyhiIDUgMTAgMTUgMjApJywgMjApID0gMTUgYXMgcmVzdWx0CitVTklP TiBBTEwKK1NFTEVDVCAncHJldl9tZW1iZXIgcGFzdCBiZWdpbm5pbmcnIGFzIHRlc3QsIHRlc3Rf Ym1zX3ByZXZfbWVtYmVyKCcoYiA1IDEwIDE1IDIwKScsIDUpID0gLTIgYXMgcmVzdWx0CitVTklP TiBBTEwKK1NFTEVDVCAncHJldl9tZW1iZXIgZW1wdHkgc2V0JyBhcyB0ZXN0LCB0ZXN0X2Jtc19w cmV2X21lbWJlcignKGIpJywgMTAwKSA9IC0yIGFzIHJlc3VsdDsKKworLS0gaGFzaCBmdW5jdGlv bnMKK1NFTEVDVCAnaGFzaCBOVUxMJyBhcyB0ZXN0LCB0ZXN0X2Jtc19oYXNoX3ZhbHVlKCcoYikn KSA9IDAgYXMgcmVzdWx0CitVTklPTiBBTEwKK1NFTEVDVCAnaGFzaCBjb25zaXN0ZW5jeScgYXMg dGVzdCwgdGVzdF9ibXNfaGFzaF92YWx1ZSgnKGIgMSAzIDUpJykgPSB0ZXN0X2Jtc19oYXNoX3Zh bHVlKCcoYiAxIDMgNSknKQorVU5JT04gQUxMCitTRUxFQ1QgJ2hhc2ggZGlmZmVyZW50IHNldHMn IGFzIHRlc3QsIHRlc3RfYm1zX2hhc2hfdmFsdWUoJyhiIDEgMyA1KScpICE9IHRlc3RfYm1zX2hh c2hfdmFsdWUoJyhiIDIgNCA2KScpOworCistLSBzZXQgb3ZlcmxhcAorU0VMRUNUICdvdmVybGFw IGV4aXN0aW5nJyBhcyB0ZXN0LCB0ZXN0X2Jtc19vdmVybGFwKCcoYiAxIDMgNSknLCAnKGIgMyA1 IDcpJykgPSB0cnVlIGFzIHJlc3VsdAorVU5JT04gQUxMCitTRUxFQ1QgJ292ZXJsYXAgbm9uZScg YXMgdGVzdCwgdGVzdF9ibXNfb3ZlcmxhcCgnKGIgMSAzIDUpJywgJyhiIDIgNCA2KScpID0gZmFs c2UgYXMgcmVzdWx0CitVTklPTiBBTEwKK1NFTEVDVCAnb3ZlcmxhcCB3aXRoIE5VTEwnIGFzIHRl c3QsIHRlc3RfYm1zX292ZXJsYXAoJyhiKScsICcoYiAxIDMgNSknKSA9IGZhbHNlIGFzIHJlc3Vs dDsKKworLS0gc3Vic2V0IHJlbGF0aW9ucworU0VMRUNUICdzdWJzZXQgTlVMTCBpcyBzdWJzZXQg b2YgYWxsJyBhcyB0ZXN0LCB0ZXN0X2Jtc19pc19zdWJzZXQoJyhiKScsICcoYiAxIDMgNSknKSA9 IHRydWUgYXMgcmVzdWx0CitVTklPTiBBTEwKK1NFTEVDVCAnc3Vic2V0IHByb3BlciBzdWJzZXQn IGFzIHRlc3QsIHRlc3RfYm1zX2lzX3N1YnNldCgnKGIgMSAzKScsICcoYiAxIDMgNSknKSA9IHRy dWUgYXMgcmVzdWx0CitVTklPTiBBTEwKK1NFTEVDVCAnc3Vic2V0IGltcHJvcGVyIHN1YnNldCcg YXMgdGVzdCwgdGVzdF9ibXNfaXNfc3Vic2V0KCcoYiAxIDMgNSknLCAnKGIgMSAzKScpID0gZmFs c2UgYXMgcmVzdWx0CitVTklPTiBBTEwKK1NFTEVDVCAnc3Vic2V0IGRpc2pvaW50IHNldHMnIGFz IHRlc3QsIHRlc3RfYm1zX2lzX3N1YnNldCgnKGIgMSAzKScsICcoYiAyIDQpJykgPSBmYWxzZSBh cyByZXN1bHQKK1VOSU9OIEFMTAorU0VMRUNUICdzdWJzZXQgY29tcGFyaXNvbiBlZGdlJyBhcyB0 ZXN0LAorCXRlc3RfYm1zX2lzX3N1YnNldCgKKwkJdGVzdF9ibXNfYWRkX3JhbmdlKE5VTEwsIDAs IDMxKSwKKwkJdGVzdF9ibXNfYWRkX3JhbmdlKE5VTEwsIDAsIDYzKSkKKwk9IHRydWUgYXMgcmVz dWx0OworCistLSBjb3B5IG9wZXJhdGlvbnMKK1dJVEggdGVzdF9zZXQgQVMgKFNFTEVDVCAnKGIg MSAzIDUgNyknIEFTIG9yaWdpbmFsKQorU0VMRUNUICdjb3B5IE5VTEwnIGFzIHRlc3QsIHRlc3Rf Ym1zX2NvcHkoTlVMTCkgSVMgTlVMTCBhcyByZXN1bHQKK1VOSU9OIEFMTAorU0VMRUNUICdjb3B5 IGVxdWFsaXR5JyBhcyB0ZXN0LCB0ZXN0X2Jtc19lcXVhbChvcmlnaW5hbCwgdGVzdF9ibXNfY29w eShvcmlnaW5hbCkpID0gdHJ1ZSBhcyByZXN1bHQgRlJPTSB0ZXN0X3NldDsKKworLS0gYWRkIG1l bWJlcnMgb3BlcmF0aW9uCitTRUxFQ1QgdGVzdF9ibXNfYWRkX21lbWJlcnMoJyhiIDEgMyknLCAn KGIgNSA3KScpID0gJyhiIDEgMyA1IDcpJyBhcyByZXN1bHQ7CistLSBhZGQgbWVtYmVycyBjb21w bGV4CitTRUxFQ1QgdGVzdF9ibXNfYWRkX21lbWJlcnMoJyhiIDEgMyA1KScsICcoYiAxMDAgMjAw IDMwMCknKSBhcyByZXN1bHQ7CisKKy0tIGhhc2ggY29uc2lzdGVuY3kKK1NFTEVDVCAnYml0bWFw X2hhc2ggTlVMTCcgYXMgdGVzdCwKKyAgICAgICB0ZXN0X2JpdG1hcF9oYXNoKCcoYiknKSA9IDAg YXMgcmVzdWx0CitVTklPTiBBTEwKK1NFTEVDVCAnYml0bWFwX2hhc2ggY29uc2lzdGVuY3knIGFz IHRlc3QsCisgICAgICAgdGVzdF9iaXRtYXBfaGFzaCgnKGIgMSAzIDUpJykgPSB0ZXN0X2JpdG1h cF9oYXNoKCcoYiAxIDMgNSknKSBhcyByZXN1bHQKK1VOSU9OIEFMTAorU0VMRUNUICdiaXRtYXBf aGFzaCB2cyBibXNfaGFzaF92YWx1ZScgYXMgdGVzdCwKKyAgICAgICB0ZXN0X2JpdG1hcF9oYXNo KCcoYiAxIDMgNSknKSA9IHRlc3RfYm1zX2hhc2hfdmFsdWUoJyhiIDEgMyA1KScpIGFzIHJlc3Vs dAorVU5JT04gQUxMCitTRUxFQ1QgJ2JpdG1hcF9oYXNoIGRpZmZlcmVudCBzZXRzJyBhcyB0ZXN0 LAorICAgICAgIHRlc3RfYml0bWFwX2hhc2goJyhiIDEgMyA1KScpICE9IHRlc3RfYml0bWFwX2hh c2goJyhiIDIgNCA2KScpIGFzIHJlc3VsdDsKKworLS0gbWF0Y2ggZnVuY3Rpb24KK1NFTEVDVCAn Yml0bWFwX21hdGNoIE5VTEwgTlVMTCAoc2hvdWxkIGJlIDApJyBhcyB0ZXN0LAorICAgICAgIHRl c3RfYml0bWFwX21hdGNoKCcoYiknLCAnKGIpJykgPSAwIGFzIHJlc3VsdAorVU5JT04gQUxMCitT RUxFQ1QgJ2JpdG1hcF9tYXRjaCBOVUxMIHNldCAoc2hvdWxkIGJlIDEpJyBhcyB0ZXN0LAorICAg ICAgIHRlc3RfYml0bWFwX21hdGNoKCcoYiknLCAnKGIgMSAzIDUpJykgPSAxIGFzIHJlc3VsdAor VU5JT04gQUxMCitTRUxFQ1QgJ2JpdG1hcF9tYXRjaCBzZXQgTlVMTCAoc2hvdWxkIGJlIDEpJyBh cyB0ZXN0LAorICAgICAgIHRlc3RfYml0bWFwX21hdGNoKCcoYiAxIDMgNSknLCAnKGIpJykgPSAx IGFzIHJlc3VsdAorVU5JT04gQUxMCitTRUxFQ1QgJ2JpdG1hcF9tYXRjaCBpZGVudGljYWwgc2V0 cyAoc2hvdWxkIGJlIDApJyBhcyB0ZXN0LAorICAgICAgIHRlc3RfYml0bWFwX21hdGNoKCcoYiAx IDMgNSknLCAnKGIgMSAzIDUpJykgPSAwIGFzIHJlc3VsdAorVU5JT04gQUxMCitTRUxFQ1QgJ2Jp dG1hcF9tYXRjaCBkaWZmZXJlbnQgc2V0cyAoc2hvdWxkIGJlIDEpJyBhcyB0ZXN0LAorICAgICAg IHRlc3RfYml0bWFwX21hdGNoKCcoYiAxIDMgNSknLCAnKGIgMiA0IDYpJykgPSAxIGFzIHJlc3Vs dAorVU5JT04gQUxMCitTRUxFQ1QgJ2JpdG1hcF9tYXRjaCBzdWJzZXQvc3VwZXJzZXQgKHNob3Vs ZCBiZSAxKScgYXMgdGVzdCwKKyAgICAgICB0ZXN0X2JpdG1hcF9tYXRjaCgnKGIgMSAzKScsICco YiAxIDMgNSknKSA9IDEgYXMgcmVzdWx0OworCistLSBtYXRjaCByZWxhdGlvbnNoaXAgd2l0aCBi bXNfZXF1YWwKK1NFTEVDVCAnYml0bWFwX21hdGNoIHZzIGJtc19lcXVhbCAoZXF1YWwgc2V0cykn IGFzIHRlc3QsCisgICAgICAgKHRlc3RfYml0bWFwX21hdGNoKCcoYiAxIDMgNSknLCAnKGIgMSAz IDUpJykgPSAwKSA9IHRlc3RfYm1zX2VxdWFsKCcoYiAxIDMgNSknLCAnKGIgMSAzIDUpJykgYXMg cmVzdWx0CitVTklPTiBBTEwKK1NFTEVDVCAnYml0bWFwX21hdGNoIHZzIGJtc19lcXVhbCAoZGlm ZmVyZW50IHNldHMpJyBhcyB0ZXN0LAorICAgICAgICh0ZXN0X2JpdG1hcF9tYXRjaCgnKGIgMSAz IDUpJywgJyhiIDIgNCA2KScpID0gMCkgPSB0ZXN0X2Jtc19lcXVhbCgnKGIgMSAzIDUpJywgJyhi IDIgNCA2KScpIGFzIHJlc3VsdAorVU5JT04gQUxMCitTRUxFQ1QgJ2JpdG1hcF9tYXRjaCB2cyBi bXNfZXF1YWwgKE5VTEwgY2FzZXMpJyBhcyB0ZXN0LAorICAgICAgICh0ZXN0X2JpdG1hcF9tYXRj aCgnKGIpJywgJyhiKScpID0gMCkgPSB0ZXN0X2Jtc19lcXVhbCgnKGIpJywgJyhiKScpIGFzIHJl c3VsdDsKKworLS0gYml0bWFwX21hdGNoIFsxLDMsNV0gdnMgWzEsMyw1XQorU0VMRUNUIHRlc3Rf Yml0bWFwX21hdGNoKCcoYiAxIDMgNSknLCAnKGIgMSAzIDUpJykgYXMgbWF0Y2hfdmFsdWU7Cist LSBiaXRtYXBfbWF0Y2ggWzEsMyw1XSB2cyBbMiw0LDZdCitTRUxFQ1QgdGVzdF9iaXRtYXBfbWF0 Y2goJyhiIDEgMyA1KScsICcoYiAyIDQgNiknKSBhcyBtYXRjaF92YWx1ZTsKKworLS0gYml0bWFw X21hdGNoIGVtcHR5IGFycmF5cworU0VMRUNUIHRlc3RfYml0bWFwX21hdGNoKCcoYiknLCAnKGIp JykgPSAwIGFzIHJlc3VsdDsKKworLS0gb3ZlcmxhcCB3aXRoIGxpc3RzCitXSVRIIHRlc3RfbGlz dHMgQVMgKAorICAgIFNFTEVDVAorICAgICAgICBBUlJBWVswXSBBUyBhMCwKKyAgICAgICAgQVJS QVlbMSwyXSBBUyBhMTIsCisgICAgICAgIEFSUkFZWzMsNCw1XSBBUyBhMzQ1LAorICAgICAgICBB UlJBWVs2LDcsOCw5XSBBUyBhNjc4OQorKQorU0VMRUNUICdvdmVybGFwIGxpc3QgMCcgYXMgdGVz dCwKKyAgICAgICB0ZXN0X2Jtc19vdmVybGFwX2xpc3QoJyhiIDApJywgYTApIGFzIHJlc3VsdAor RlJPTSB0ZXN0X2xpc3RzCitVTklPTiBBTEwKK1NFTEVDVCAnb3ZlcmxhcCBsaXN0IDEyJyBhcyB0 ZXN0LAorICAgICAgIHRlc3RfYm1zX292ZXJsYXBfbGlzdCgnKGIgMiAzKScsIGExMikgYXMgcmVz dWx0CitGUk9NIHRlc3RfbGlzdHMKK1VOSU9OIEFMTAorU0VMRUNUICdvdmVybGFwIGxpc3QgMzQ1 JyBhcyB0ZXN0LAorICAgICAgIHRlc3RfYm1zX292ZXJsYXBfbGlzdCgnKGIgMyA0KScsIGEzNDUp IGFzIHJlc3VsdAorRlJPTSB0ZXN0X2xpc3RzCitVTklPTiBBTEwKK1NFTEVDVCAnb3ZlcmxhcCBs aXN0IDY3ODknIGFzIHRlc3QsCisgICAgICAgdGVzdF9ibXNfb3ZlcmxhcF9saXN0KCcoYiA3IDEw KScsIGE2Nzg5KSBhcyByZXN1bHQKK0ZST00gdGVzdF9saXN0cworVU5JT04gQUxMCitTRUxFQ1Qg J292ZXJsYXAgbGlzdCA2Nzg5IG5vIG92ZXJsYXAnIGFzIHRlc3QsCisgICAgICAgdGVzdF9ibXNf b3ZlcmxhcF9saXN0KCcoYiAxIDUpJywgYTY3ODkpIGFzIHJlc3VsdAorRlJPTSB0ZXN0X2xpc3Rz OworCistLSBvdmVybGFwIGVtcHR5IGxpc3QKK1NFTEVDVCB0ZXN0X2Jtc19vdmVybGFwX2xpc3Qo JyhiIDEpJywgQVJSQVlbXTo6aW50ZWdlcltdKSBhcyByZXN1bHQ7CisKKy0tIHJhbmRvbSBvcGVy YXRpb25zCitTRUxFQ1QgdGVzdF9yYW5kb21fb3BlcmF0aW9ucygtMSwgMTAwMDAsIDgxOTIwLCAw KSA+IDAgYXMgcmVzdWx0OworCistLSB0aGVzZSBzaG91bGQgcHJvZHVjZSBFUlJPUnMKK1NFTEVD VCB0ZXN0X2Jtc19tYWtlX3NpbmdsZXRvbigtMSk7CitTRUxFQ1QgdGVzdF9ibXNfYWRkX21lbWJl cignKGIgMSknLCAtMSk7CitTRUxFQ1QgdGVzdF9ibXNfaXNfbWVtYmVyKCcoYiknLCAtNSk7CitT RUxFQ1QgdGVzdF9ibXNfYWRkX21lbWJlcignKGIpJywgLTEwKTsKK1NFTEVDVCB0ZXN0X2Jtc19k ZWxfbWVtYmVyKCcoYiknLCAtMjApOworU0VMRUNUIHRlc3RfYm1zX2FkZF9yYW5nZSgnKGIpJywg LTUsIDEwKTsKK1NFTEVDVCB0ZXN0X2Jtc19zaW5nbGV0b25fbWVtYmVyKCcoYiAxIDIpJyk7CitT RUxFQ1QgdGVzdF9ibXNfYWRkX21lbWJlcignKGIpJywgMTAwMCk7CisKK0RST1AgRVhURU5TSU9O IHRlc3RfYml0bWFwc2V0OwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1h cHNldC90ZXN0X2JpdG1hcHNldC0tMS4wLnNxbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRt YXBzZXQvdGVzdF9iaXRtYXBzZXQtLTEuMC5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLjk1ZjVlZTAyZTNmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X2JpdG1hcHNldC90ZXN0X2JpdG1hcHNldC0tMS4wLnNxbApAQCAtMCwwICsxLDEz NiBAQAorLyogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC90ZXN0X2JpdG1hcHNldC0t MS4wLnNxbCAqLworCistLSBjb21wbGFpbiBpZiBzY3JpcHQgaXMgc291cmNlZCBpbiBwc3FsLCBy YXRoZXIgdGhhbiB2aWEgQ1JFQVRFIEVYVEVOU0lPTgorXGVjaG8gVXNlICJDUkVBVEUgRVhURU5T SU9OIHRlc3RfYml0bWFwc2V0IiB0byBsb2FkIHRoaXMgZmlsZS4gXHF1aXQKKworLS0gQml0bWFw c2V0IEFQSSBmdW5jdGlvbnMKK0NSRUFURSBGVU5DVElPTiB0ZXN0X2Jtc19tYWtlX3NpbmdsZXRv bihpbnRlZ2VyKQorUkVUVVJOUyB0ZXh0IFNUUklDVAorQVMgJ01PRFVMRV9QQVRITkFNRScgTEFO R1VBR0UgQzsKKworQ1JFQVRFIEZVTkNUSU9OIHRlc3RfYm1zX2FkZF9tZW1iZXIodGV4dCwgaW50 ZWdlcikKK1JFVFVSTlMgdGV4dAorQVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKKwor Q1JFQVRFIEZVTkNUSU9OIHRlc3RfYm1zX2RlbF9tZW1iZXIodGV4dCwgaW50ZWdlcikKK1JFVFVS TlMgdGV4dAorQVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKKworQ1JFQVRFIEZVTkNU SU9OIHRlc3RfYm1zX2lzX21lbWJlcih0ZXh0LCBpbnRlZ2VyKQorUkVUVVJOUyBib29sZWFuCitB UyAnTU9EVUxFX1BBVEhOQU1FJyBMQU5HVUFHRSBDOworCitDUkVBVEUgRlVOQ1RJT04gdGVzdF9i bXNfbnVtX21lbWJlcnModGV4dCkKK1JFVFVSTlMgaW50ZWdlcgorQVMgJ01PRFVMRV9QQVRITkFN RScgTEFOR1VBR0UgQzsKKworQ1JFQVRFIEZVTkNUSU9OIHRlc3RfYm1zX2NvcHkodGV4dCkKK1JF VFVSTlMgdGV4dAorQVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKKworQ1JFQVRFIEZV TkNUSU9OIHRlc3RfYm1zX2VxdWFsKHRleHQsIHRleHQpCitSRVRVUk5TIGJvb2xlYW4KK0FTICdN T0RVTEVfUEFUSE5BTUUnIExBTkdVQUdFIEM7CisKK0NSRUFURSBGVU5DVElPTiB0ZXN0X2Jtc19j b21wYXJlKHRleHQsIHRleHQpCitSRVRVUk5TIGludGVnZXIKK0FTICdNT0RVTEVfUEFUSE5BTUUn IExBTkdVQUdFIEM7CisKK0NSRUFURSBGVU5DVElPTiB0ZXN0X2Jtc19pc19zdWJzZXQodGV4dCwg dGV4dCkKK1JFVFVSTlMgYm9vbGVhbgorQVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsK KworQ1JFQVRFIEZVTkNUSU9OIHRlc3RfYm1zX3N1YnNldF9jb21wYXJlKHRleHQsIHRleHQpCitS RVRVUk5TIGludGVnZXIKK0FTICdNT0RVTEVfUEFUSE5BTUUnIExBTkdVQUdFIEM7CisKK0NSRUFU RSBGVU5DVElPTiB0ZXN0X2Jtc191bmlvbih0ZXh0LCB0ZXh0KQorUkVUVVJOUyB0ZXh0CitBUyAn TU9EVUxFX1BBVEhOQU1FJyBMQU5HVUFHRSBDOworCitDUkVBVEUgRlVOQ1RJT04gdGVzdF9ibXNf aW50ZXJzZWN0KHRleHQsIHRleHQpCitSRVRVUk5TIHRleHQKK0FTICdNT0RVTEVfUEFUSE5BTUUn IExBTkdVQUdFIEM7CisKK0NSRUFURSBGVU5DVElPTiB0ZXN0X2Jtc19kaWZmZXJlbmNlKHRleHQs IHRleHQpCitSRVRVUk5TIHRleHQKK0FTICdNT0RVTEVfUEFUSE5BTUUnIExBTkdVQUdFIEM7CisK K0NSRUFURSBGVU5DVElPTiB0ZXN0X2Jtc19pc19lbXB0eSh0ZXh0KQorUkVUVVJOUyBib29sZWFu CitBUyAnTU9EVUxFX1BBVEhOQU1FJyBMQU5HVUFHRSBDOworCitDUkVBVEUgRlVOQ1RJT04gdGVz dF9ibXNfbWVtYmVyc2hpcCh0ZXh0KQorUkVUVVJOUyBpbnRlZ2VyCitBUyAnTU9EVUxFX1BBVEhO QU1FJyBMQU5HVUFHRSBDOworCitDUkVBVEUgRlVOQ1RJT04gdGVzdF9ibXNfc2luZ2xldG9uX21l bWJlcih0ZXh0KQorUkVUVVJOUyBpbnRlZ2VyIFNUUklDVAorQVMgJ01PRFVMRV9QQVRITkFNRScg TEFOR1VBR0UgQzsKKworQ1JFQVRFIEZVTkNUSU9OIHRlc3RfYm1zX2dldF9zaW5nbGV0b25fbWVt YmVyKHRleHQsIGludGVnZXIpCitSRVRVUk5TIGludGVnZXIKK0FTICdNT0RVTEVfUEFUSE5BTUUn IExBTkdVQUdFIEM7CisKK0NSRUFURSBGVU5DVElPTiB0ZXN0X2Jtc19uZXh0X21lbWJlcih0ZXh0 LCBpbnRlZ2VyKQorUkVUVVJOUyBpbnRlZ2VyCitBUyAnTU9EVUxFX1BBVEhOQU1FJyBMQU5HVUFH RSBDOworCitDUkVBVEUgRlVOQ1RJT04gdGVzdF9ibXNfcHJldl9tZW1iZXIodGV4dCwgaW50ZWdl cikKK1JFVFVSTlMgaW50ZWdlcgorQVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKKwor Q1JFQVRFIEZVTkNUSU9OIHRlc3RfYm1zX2hhc2hfdmFsdWUodGV4dCkKK1JFVFVSTlMgaW50ZWdl cgorQVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKKworQ1JFQVRFIEZVTkNUSU9OIHRl c3RfYm1zX292ZXJsYXAodGV4dCwgdGV4dCkKK1JFVFVSTlMgYm9vbGVhbgorQVMgJ01PRFVMRV9Q QVRITkFNRScgTEFOR1VBR0UgQzsKKworQ1JFQVRFIEZVTkNUSU9OIHRlc3RfYm1zX292ZXJsYXBf bGlzdCh0ZXh0LCBpbnQ0W10pCitSRVRVUk5TIGJvb2xlYW4KK0FTICdNT0RVTEVfUEFUSE5BTUUn IExBTkdVQUdFIEM7CisKK0NSRUFURSBGVU5DVElPTiB0ZXN0X2Jtc19ub25lbXB0eV9kaWZmZXJl bmNlKHRleHQsIHRleHQpCitSRVRVUk5TIGJvb2xlYW4KK0FTICdNT0RVTEVfUEFUSE5BTUUnIExB TkdVQUdFIEM7CisKK0NSRUFURSBGVU5DVElPTiB0ZXN0X2Jtc19tZW1iZXJfaW5kZXgodGV4dCwg aW50ZWdlcikKK1JFVFVSTlMgaW50ZWdlcgorQVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0Ug QzsKKworQ1JFQVRFIEZVTkNUSU9OIHRlc3RfYm1zX2FkZF9yYW5nZSh0ZXh0LCBpbnRlZ2VyLCBp bnRlZ2VyKQorUkVUVVJOUyB0ZXh0CitBUyAnTU9EVUxFX1BBVEhOQU1FJyBMQU5HVUFHRSBDOwor CitDUkVBVEUgRlVOQ1RJT04gdGVzdF9ibXNfYWRkX21lbWJlcnModGV4dCwgdGV4dCkKK1JFVFVS TlMgdGV4dAorQVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKKworQ1JFQVRFIEZVTkNU SU9OIHRlc3RfYm1zX2ludF9tZW1iZXJzKHRleHQsIHRleHQpCitSRVRVUk5TIHRleHQKK0FTICdN T0RVTEVfUEFUSE5BTUUnIExBTkdVQUdFIEM7CisKK0NSRUFURSBGVU5DVElPTiB0ZXN0X2Jtc19y ZXBsYWNlX21lbWJlcnModGV4dCwgdGV4dCkKK1JFVFVSTlMgdGV4dAorQVMgJ01PRFVMRV9QQVRI TkFNRScgTEFOR1VBR0UgQzsKKworQ1JFQVRFIEZVTkNUSU9OIHRlc3RfYm1zX2pvaW4odGV4dCwg dGV4dCkKK1JFVFVSTlMgdGV4dAorQVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKKwor Q1JFQVRFIEZVTkNUSU9OIHRlc3RfYml0bWFwX2hhc2godGV4dCkKK1JFVFVSTlMgaW50ZWdlcgor QVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKKworQ1JFQVRFIEZVTkNUSU9OIHRlc3Rf Yml0bWFwX21hdGNoKHRleHQsIHRleHQpCitSRVRVUk5TIGludAorQVMgJ01PRFVMRV9QQVRITkFN RScgTEFOR1VBR0UgQzsKKworLS0gVGVzdCB1dGlsaXR5IGZ1bmN0aW9ucworQ1JFQVRFIEZVTkNU SU9OIHRlc3RfcmFuZG9tX29wZXJhdGlvbnMoaW50ZWdlciwgaW50ZWdlciwgaW50ZWdlciwgaW50 ZWdlcikKK1JFVFVSTlMgaW50ZWdlciBTVFJJQ1QKK0FTICdNT0RVTEVfUEFUSE5BTUUnIExBTkdV QUdFIEM7CisKK0NPTU1FTlQgT04gRVhURU5TSU9OIHRlc3RfYml0bWFwc2V0IElTICdUZXN0IGNv ZGUgZm9yIEJpdG1hcHNldCc7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYml0 bWFwc2V0L3Rlc3RfYml0bWFwc2V0LmMgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0 L3Rlc3RfYml0bWFwc2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LmQxYzc0ODA3ZWMxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Jp dG1hcHNldC90ZXN0X2JpdG1hcHNldC5jCkBAIC0wLDAgKzEsMTAwOCBAQAorLyoKKyAqIHRlc3Rf Yml0bWFwc2V0LmMKKyAqICAgICAgVGVzdCBtb2R1bGUgZm9yIGJpdG1hcHNldCBkYXRhIHN0cnVj dHVyZQorICoKKyAqIFRoaXMgbW9kdWxlIHRlc3RzIHRoZSBiaXRtYXBzZXQgaW1wbGVtZW50YXRp b24gaW4gUG9zdGdyZVNRTCwKKyAqIGNvdmVyaW5nIGFsbCBwdWJsaWMgQVBJIGZ1bmN0aW9ucywg ZWRnZSBjYXNlcywgYW5kIG1lbW9yeSB1c2FnZS4KKyAqCisgKiBzcmMvdGVzdC9tb2R1bGVzL3Rl c3RfYml0bWFwc2V0L3Rlc3RfYml0bWFwc2V0LmMKKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMu aCIKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgor I2luY2x1ZGUgImNvbW1vbi9wZ19wcm5nLmgiCisjaW5jbHVkZSAidXRpbHMvYXJyYXkuaCIKKyNp bmNsdWRlICJmbWdyLmgiCisjaW5jbHVkZSAibm9kZXMvYml0bWFwc2V0LmgiCisjaW5jbHVkZSAi bm9kZXMvbm9kZXMuaCIKKyNpbmNsdWRlICJub2Rlcy9wZ19saXN0LmgiCisjaW5jbHVkZSAidXRp bHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy90aW1lc3RhbXAuaCIKKyNpbmNsdWRlICJ2 YXJhdHQuaCIKKworUEdfTU9EVUxFX01BR0lDOworCisvKiBVdGlsaXR5IGZ1bmN0aW9ucyAqLwor UEdfRlVOQ1RJT05fSU5GT19WMSh0ZXN0X2Jtc19mcm9tX2FycmF5KTsKK1BHX0ZVTkNUSU9OX0lO Rk9fVjEodGVzdF9ibXNfdG9fYXJyYXkpOworCisvKiBCaXRtYXBzZXQgQVBJIGZ1bmN0aW9ucyBp biBvcmRlciBvZiBhcHBlYXJhbmNlIGluIGJpdG1hcHNldC5jICovCitQR19GVU5DVElPTl9JTkZP X1YxKHRlc3RfYm1zX21ha2Vfc2luZ2xldG9uKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEodGVzdF9i bXNfYWRkX21lbWJlcik7CitQR19GVU5DVElPTl9JTkZPX1YxKHRlc3RfYm1zX2RlbF9tZW1iZXIp OworUEdfRlVOQ1RJT05fSU5GT19WMSh0ZXN0X2Jtc19pc19tZW1iZXIpOworUEdfRlVOQ1RJT05f SU5GT19WMSh0ZXN0X2Jtc19udW1fbWVtYmVycyk7CitQR19GVU5DVElPTl9JTkZPX1YxKHRlc3Rf Ym1zX2NvcHkpOworUEdfRlVOQ1RJT05fSU5GT19WMSh0ZXN0X2Jtc19lcXVhbCk7CitQR19GVU5D VElPTl9JTkZPX1YxKHRlc3RfYm1zX2NvbXBhcmUpOworUEdfRlVOQ1RJT05fSU5GT19WMSh0ZXN0 X2Jtc19pc19zdWJzZXQpOworUEdfRlVOQ1RJT05fSU5GT19WMSh0ZXN0X2Jtc19zdWJzZXRfY29t cGFyZSk7CitQR19GVU5DVElPTl9JTkZPX1YxKHRlc3RfYm1zX3VuaW9uKTsKK1BHX0ZVTkNUSU9O X0lORk9fVjEodGVzdF9ibXNfaW50ZXJzZWN0KTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEodGVzdF9i bXNfZGlmZmVyZW5jZSk7CitQR19GVU5DVElPTl9JTkZPX1YxKHRlc3RfYm1zX2lzX2VtcHR5KTsK K1BHX0ZVTkNUSU9OX0lORk9fVjEodGVzdF9ibXNfbWVtYmVyc2hpcCk7CitQR19GVU5DVElPTl9J TkZPX1YxKHRlc3RfYm1zX3NpbmdsZXRvbl9tZW1iZXIpOworUEdfRlVOQ1RJT05fSU5GT19WMSh0 ZXN0X2Jtc19nZXRfc2luZ2xldG9uX21lbWJlcik7CitQR19GVU5DVElPTl9JTkZPX1YxKHRlc3Rf Ym1zX25leHRfbWVtYmVyKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEodGVzdF9ibXNfcHJldl9tZW1i ZXIpOworUEdfRlVOQ1RJT05fSU5GT19WMSh0ZXN0X2Jtc19oYXNoX3ZhbHVlKTsKK1BHX0ZVTkNU SU9OX0lORk9fVjEodGVzdF9ibXNfb3ZlcmxhcCk7CitQR19GVU5DVElPTl9JTkZPX1YxKHRlc3Rf Ym1zX292ZXJsYXBfbGlzdCk7CitQR19GVU5DVElPTl9JTkZPX1YxKHRlc3RfYm1zX25vbmVtcHR5 X2RpZmZlcmVuY2UpOworUEdfRlVOQ1RJT05fSU5GT19WMSh0ZXN0X2Jtc19tZW1iZXJfaW5kZXgp OworUEdfRlVOQ1RJT05fSU5GT19WMSh0ZXN0X2Jtc19hZGRfcmFuZ2UpOworUEdfRlVOQ1RJT05f SU5GT19WMSh0ZXN0X2Jtc19hZGRfbWVtYmVycyk7CitQR19GVU5DVElPTl9JTkZPX1YxKHRlc3Rf Ym1zX2ludF9tZW1iZXJzKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEodGVzdF9ibXNfcmVwbGFjZV9t ZW1iZXJzKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEodGVzdF9ibXNfam9pbik7CitQR19GVU5DVElP Tl9JTkZPX1YxKHRlc3RfYml0bWFwX2hhc2gpOworUEdfRlVOQ1RJT05fSU5GT19WMSh0ZXN0X2Jp dG1hcF9tYXRjaCk7CisKKy8qIFRlc3QgdXRpbGl0eSBmdW5jdGlvbnMgKi8KK1BHX0ZVTkNUSU9O X0lORk9fVjEodGVzdF9yYW5kb21fb3BlcmF0aW9ucyk7CisKKy8qIENvbnZlbmllbnQgbWFjcm9z IHRvIHRlc3QgcmVzdWx0cyAqLworI2RlZmluZSBFWFBFQ1RfVFJVRShleHByKQlcCisJZG8geyBc CisJCWlmICghKGV4cHIpKSBcCisJCQllbG9nKEVSUk9SLCBcCisJCQkJICIlcyB3YXMgdW5leHBl Y3RlZGx5IGZhbHNlIGluIGZpbGUgXCIlc1wiIGxpbmUgJXUiLCBcCisJCQkJICNleHByLCBfX0ZJ TEVfXywgX19MSU5FX18pOyBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBFWFBFQ1RfTk9UX05V TEwoZXhwcikJXAorCWRvIHsgXAorCQlpZiAoKGV4cHIpID09IE5VTEwpIFwKKwkJCWVsb2coRVJS T1IsIFwKKwkJCQkgIiVzIHdhcyB1bmV4cGVjdGVkbHkgdHJ1ZSBpbiBmaWxlIFwiJXNcIiBsaW5l ICV1IiwgXAorCQkJCSAjZXhwciwgX19GSUxFX18sIF9fTElORV9fKTsgXAorCX0gd2hpbGUgKDAp CisKKy8qIEVuY29kZS9EZWNvZGUgdG8vZnJvbSBURVhUIGFuZCBCaXRtYXBzZXQgKi8KKyNkZWZp bmUgQklUTUFQU0VUX1RPX1RFWFQoYm1zKSAodGV4dCAqKSBDU3RyaW5nR2V0VGV4dERhdHVtKG5v ZGVUb1N0cmluZygoYm1zKSkpCisjZGVmaW5lIFRFWFRfVE9fQklUTUFQU0VUKHN0cikgKEJpdG1h cHNldCAqKSBzdHJpbmdUb05vZGUoVGV4dERhdHVtR2V0Q1N0cmluZygoRGF0dW0pIChzdHIpKSkK KworLyoKKyAqIEluZGl2aWR1YWwgdGVzdCBmdW5jdGlvbnMgZm9yIGVhY2ggYml0bWFwc2V0IEFQ SSBmdW5jdGlvbgorICovCisKK0RhdHVtCit0ZXN0X2Jtc19hZGRfbWVtYmVyKFBHX0ZVTkNUSU9O X0FSR1MpCit7CisJaW50CQkJbWVtYmVyOworCUJpdG1hcHNldCAgKmJtcyA9IE5VTEw7CisJdGV4 dAkgICAqcmVzdWx0OworCisJaWYgKFBHX0FSR0lTTlVMTCgxKSkKKwkJUEdfUkVUVVJOX05VTEwo KTsKKworCWlmICghUEdfQVJHSVNOVUxMKDApKQorCQlibXMgPSBURVhUX1RPX0JJVE1BUFNFVChQ R19HRVRBUkdfVEVYVF9QUCgwKSk7CisKKwltZW1iZXIgPSBQR19HRVRBUkdfSU5UMzIoMSk7CisJ Ym1zID0gYm1zX2FkZF9tZW1iZXIoYm1zLCBtZW1iZXIpOworCXJlc3VsdCA9IEJJVE1BUFNFVF9U T19URVhUKGJtcyk7CisKKwlpZiAoYm1zKQorCQlibXNfZnJlZShibXMpOworCisJaWYgKHJlc3Vs dCA9PSBOVUxMKQorCQlQR19SRVRVUk5fTlVMTCgpOworCisJUEdfUkVUVVJOX1RFWFRfUChyZXN1 bHQpOworfQorCitEYXR1bQordGVzdF9ibXNfYWRkX21lbWJlcnMoUEdfRlVOQ1RJT05fQVJHUykK K3sKKwlCaXRtYXBzZXQgICpibXMxID0gTlVMTCwKKwkJCSAgICpibXMyID0gTlVMTDsKKwl0ZXh0 CSAgICpyZXN1bHQ7CisKKwlpZiAoIVBHX0FSR0lTTlVMTCgwKSkKKwkJYm1zMSA9IFRFWFRfVE9f QklUTUFQU0VUKFBHX0dFVEFSR19URVhUX1BQKDApKTsKKworCWlmICghUEdfQVJHSVNOVUxMKDEp KQorCQlibXMyID0gVEVYVF9UT19CSVRNQVBTRVQoUEdfR0VUQVJHX1RFWFRfUFAoMSkpOworCisJ LyogSU1QT1JUQU5UOiBibXNfYWRkX21lbWJlcnMgbW9kaWZpZXMvZnJlZXMgdGhlIGZpcnN0IGFy Z3VtZW50ICovCisJYm1zMSA9IGJtc19hZGRfbWVtYmVycyhibXMxLCBibXMyKTsKKworCWlmIChi bXMyKQorCQlibXNfZnJlZShibXMyKTsKKworCWlmIChibXMxID09IE5VTEwpCisJCVBHX1JFVFVS Tl9OVUxMKCk7CisKKwlyZXN1bHQgPSBCSVRNQVBTRVRfVE9fVEVYVChibXMxKTsKKwlibXNfZnJl ZShibXMxKTsKKworCVBHX1JFVFVSTl9URVhUX1AocmVzdWx0KTsKK30KKworRGF0dW0KK3Rlc3Rf Ym1zX2RlbF9tZW1iZXIoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlCaXRtYXBzZXQgICpibXMgPSBO VUxMOworCWludDMyCQltZW1iZXI7CisJdGV4dAkgICAqcmVzdWx0OworCisJaWYgKFBHX0FSR0lT TlVMTCgxKSkKKwkJUEdfUkVUVVJOX05VTEwoKTsKKworCWlmICghUEdfQVJHSVNOVUxMKDApKQor CQlibXMgPSBURVhUX1RPX0JJVE1BUFNFVChQR19HRVRBUkdfVEVYVF9QUCgwKSk7CisKKwltZW1i ZXIgPSBQR19HRVRBUkdfSU5UMzIoMSk7CisJYm1zID0gYm1zX2RlbF9tZW1iZXIoYm1zLCBtZW1i ZXIpOworCisJaWYgKGJtcyA9PSBOVUxMIHx8IGJtc19pc19lbXB0eShibXMpKQorCXsKKwkJaWYg KGJtcykKKwkJCWJtc19mcmVlKGJtcyk7CisJCVBHX1JFVFVSTl9OVUxMKCk7CisJfQorCisJcmVz dWx0ID0gQklUTUFQU0VUX1RPX1RFWFQoYm1zKTsKKwlibXNfZnJlZShibXMpOworCisJUEdfUkVU VVJOX1RFWFRfUChyZXN1bHQpOworfQorCitEYXR1bQordGVzdF9ibXNfaXNfbWVtYmVyKFBHX0ZV TkNUSU9OX0FSR1MpCit7CisJQml0bWFwc2V0ICAqYm1zID0gTlVMTDsKKwlpbnQzMgkJbWVtYmVy OworCWJvb2wJCXJlc3VsdDsKKworCWlmIChQR19BUkdJU05VTEwoMSkpCisJCVBHX1JFVFVSTl9C T09MKGZhbHNlKTsKKworCWlmICghUEdfQVJHSVNOVUxMKDApKQorCQlibXMgPSBURVhUX1RPX0JJ VE1BUFNFVChQR19HRVRBUkdfVEVYVF9QUCgwKSk7CisKKwltZW1iZXIgPSBQR19HRVRBUkdfSU5U MzIoMSk7CisJcmVzdWx0ID0gYm1zX2lzX21lbWJlcihtZW1iZXIsIGJtcyk7CisKKwlpZiAoYm1z KQorCQlibXNfZnJlZShibXMpOworCisJUEdfUkVUVVJOX0JPT0wocmVzdWx0KTsKK30KKworRGF0 dW0KK3Rlc3RfYm1zX251bV9tZW1iZXJzKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJQml0bWFwc2V0 ICAqYm1zID0gTlVMTDsKKwlpbnQJCQlyZXN1bHQgPSAwOworCisJaWYgKCFQR19BUkdJU05VTEwo MCkpCisJCWJtcyA9IFRFWFRfVE9fQklUTUFQU0VUKFBHX0dFVEFSR19URVhUX1BQKDApKTsKKwor CXJlc3VsdCA9IGJtc19udW1fbWVtYmVycyhibXMpOworCisJaWYgKGJtcykKKwkJYm1zX2ZyZWUo Ym1zKTsKKworCVBHX1JFVFVSTl9JTlQzMihyZXN1bHQpOworfQorCitEYXR1bQordGVzdF9ibXNf bWFrZV9zaW5nbGV0b24oUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlpbnQzMgkJbWVtYmVyOworCUJp dG1hcHNldCAgKmJtczsKKwl0ZXh0CSAgICpyZXN1bHQ7CisKKwlpZiAoUEdfQVJHSVNOVUxMKDAp KQorCQlQR19SRVRVUk5fTlVMTCgpOworCisJbWVtYmVyID0gUEdfR0VUQVJHX0lOVDMyKDApOwor CWJtcyA9IGJtc19tYWtlX3NpbmdsZXRvbihtZW1iZXIpOworCisJcmVzdWx0ID0gQklUTUFQU0VU X1RPX1RFWFQoYm1zKTsKKwlibXNfZnJlZShibXMpOworCisJUEdfUkVUVVJOX1RFWFRfUChyZXN1 bHQpOworfQorCitEYXR1bQordGVzdF9ibXNfY29weShQR19GVU5DVElPTl9BUkdTKQoreworCXRl eHQJICAgKmJtc19kYXRhOworCUJpdG1hcHNldCAgKmJtcyA9IE5VTEw7CisJQml0bWFwc2V0ICAq Y29weV9ibXM7CisJdGV4dAkgICAqcmVzdWx0OworCisJaWYgKFBHX0FSR0lTTlVMTCgwKSkKKwkJ UEdfUkVUVVJOX05VTEwoKTsKKworCWJtc19kYXRhID0gUEdfR0VUQVJHX1RFWFRfUFAoMCk7CisJ Ym1zID0gVEVYVF9UT19CSVRNQVBTRVQoYm1zX2RhdGEpOworCWNvcHlfYm1zID0gYm1zX2NvcHko Ym1zKTsKKwlyZXN1bHQgPSBCSVRNQVBTRVRfVE9fVEVYVChjb3B5X2Jtcyk7CisKKwlpZiAoYm1z KQorCQlibXNfZnJlZShibXMpOworCWlmIChjb3B5X2JtcykKKwkJYm1zX2ZyZWUoY29weV9ibXMp OworCisJUEdfUkVUVVJOX1RFWFRfUChyZXN1bHQpOworfQorCitEYXR1bQordGVzdF9ibXNfZXF1 YWwoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlCaXRtYXBzZXQgICpibXMxID0gTlVMTCwKKwkJCSAg ICpibXMyID0gTlVMTDsKKwlib29sCQlyZXN1bHQ7CisKKwlpZiAoIVBHX0FSR0lTTlVMTCgwKSkK KwkJYm1zMSA9IFRFWFRfVE9fQklUTUFQU0VUKFBHX0dFVEFSR19URVhUX1BQKDApKTsKKworCWlm ICghUEdfQVJHSVNOVUxMKDEpKQorCQlibXMyID0gVEVYVF9UT19CSVRNQVBTRVQoUEdfR0VUQVJH X1RFWFRfUFAoMSkpOworCisJcmVzdWx0ID0gYm1zX2VxdWFsKGJtczEsIGJtczIpOworCisJaWYg KGJtczEpCisJCWJtc19mcmVlKGJtczEpOworCWlmIChibXMyKQorCQlibXNfZnJlZShibXMyKTsK KworCVBHX1JFVFVSTl9CT09MKHJlc3VsdCk7Cit9CisKK0RhdHVtCit0ZXN0X2Jtc191bmlvbihQ R19GVU5DVElPTl9BUkdTKQoreworCUJpdG1hcHNldCAgKmJtczEgPSBOVUxMLAorCQkJICAgKmJt czIgPSBOVUxMOworCUJpdG1hcHNldCAgKnJlc3VsdF9ibXM7CisJdGV4dAkgICAqcmVzdWx0Owor CisJaWYgKCFQR19BUkdJU05VTEwoMCkpCisJCWJtczEgPSBURVhUX1RPX0JJVE1BUFNFVChQR19H RVRBUkdfVEVYVF9QUCgwKSk7CisKKwlpZiAoIVBHX0FSR0lTTlVMTCgxKSkKKwkJYm1zMiA9IFRF WFRfVE9fQklUTUFQU0VUKFBHX0dFVEFSR19URVhUX1BQKDEpKTsKKworCXJlc3VsdF9ibXMgPSBi bXNfdW5pb24oYm1zMSwgYm1zMik7CisKKwlpZiAoYm1zMSkKKwkJYm1zX2ZyZWUoYm1zMSk7CisJ aWYgKGJtczIpCisJCWJtc19mcmVlKGJtczIpOworCisJaWYgKHJlc3VsdF9ibXMgPT0gTlVMTCkK KwkJUEdfUkVUVVJOX05VTEwoKTsKKworCXJlc3VsdCA9IEJJVE1BUFNFVF9UT19URVhUKHJlc3Vs dF9ibXMpOworCWJtc19mcmVlKHJlc3VsdF9ibXMpOworCisJUEdfUkVUVVJOX1RFWFRfUChyZXN1 bHQpOworfQorCitEYXR1bQordGVzdF9ibXNfbWVtYmVyc2hpcChQR19GVU5DVElPTl9BUkdTKQor eworCUJpdG1hcHNldCAgKmJtcyA9IE5VTEw7CisJQk1TX01lbWJlcnNoaXAgcmVzdWx0OworCisJ aWYgKFBHX0FSR0lTTlVMTCgwKSkKKwkJUEdfUkVUVVJOX0lOVDMyKEJNU19FTVBUWV9TRVQpOwor CisJYm1zID0gVEVYVF9UT19CSVRNQVBTRVQoUEdfR0VUQVJHX1RFWFRfUFAoMCkpOworCXJlc3Vs dCA9IGJtc19tZW1iZXJzaGlwKGJtcyk7CisKKwlpZiAoYm1zKQorCQlibXNfZnJlZShibXMpOwor CisJUEdfUkVUVVJOX0lOVDMyKChpbnQzMikgcmVzdWx0KTsKK30KKworRGF0dW0KK3Rlc3RfYm1z X25leHRfbWVtYmVyKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJQml0bWFwc2V0ICAqYm1zID0gTlVM TDsKKwlpbnQzMgkJcHJldm1lbWJlcjsKKwlpbnQJCQlyZXN1bHQ7CisKKwlpZiAoUEdfQVJHSVNO VUxMKDApIHx8IFBHX0FSR0lTTlVMTCgxKSkKKwkJUEdfUkVUVVJOX0lOVDMyKC0yKTsKKworCWJt cyA9IFRFWFRfVE9fQklUTUFQU0VUKFBHX0dFVEFSR19URVhUX1BQKDApKTsKKwlwcmV2bWVtYmVy ID0gUEdfR0VUQVJHX0lOVDMyKDEpOworCXJlc3VsdCA9IGJtc19uZXh0X21lbWJlcihibXMsIHBy ZXZtZW1iZXIpOworCisJaWYgKGJtcykKKwkJYm1zX2ZyZWUoYm1zKTsKKworCVBHX1JFVFVSTl9J TlQzMihyZXN1bHQpOworfQorCitEYXR1bQordGVzdF9ibXNfaW50ZXJzZWN0KFBHX0ZVTkNUSU9O X0FSR1MpCit7CisJQml0bWFwc2V0ICAqYm1zMSA9IE5VTEwsCisJCQkgICAqYm1zMiA9IE5VTEw7 CisJQml0bWFwc2V0ICAqcmVzdWx0X2JtczsKKwl0ZXh0CSAgICpyZXN1bHQ7CisKKwlpZiAoIVBH X0FSR0lTTlVMTCgwKSkKKwkJYm1zMSA9IFRFWFRfVE9fQklUTUFQU0VUKFBHX0dFVEFSR19URVhU X1BQKDApKTsKKworCWlmICghUEdfQVJHSVNOVUxMKDEpKQorCQlibXMyID0gVEVYVF9UT19CSVRN QVBTRVQoUEdfR0VUQVJHX1RFWFRfUFAoMSkpOworCisJcmVzdWx0X2JtcyA9IGJtc19pbnRlcnNl Y3QoYm1zMSwgYm1zMik7CisKKwlpZiAoYm1zMSkKKwkJYm1zX2ZyZWUoYm1zMSk7CisJaWYgKGJt czIpCisJCWJtc19mcmVlKGJtczIpOworCisJaWYgKHJlc3VsdF9ibXMgPT0gTlVMTCkKKwkJUEdf UkVUVVJOX05VTEwoKTsKKworCXJlc3VsdCA9IEJJVE1BUFNFVF9UT19URVhUKHJlc3VsdF9ibXMp OworCWJtc19mcmVlKHJlc3VsdF9ibXMpOworCisJUEdfUkVUVVJOX1RFWFRfUChyZXN1bHQpOwor fQorCitEYXR1bQordGVzdF9ibXNfZGlmZmVyZW5jZShQR19GVU5DVElPTl9BUkdTKQoreworCUJp dG1hcHNldCAgKmJtczEgPSBOVUxMLAorCQkJICAgKmJtczIgPSBOVUxMOworCUJpdG1hcHNldCAg KnJlc3VsdF9ibXM7CisJdGV4dAkgICAqcmVzdWx0OworCisJaWYgKCFQR19BUkdJU05VTEwoMCkp CisJCWJtczEgPSBURVhUX1RPX0JJVE1BUFNFVChQR19HRVRBUkdfVEVYVF9QUCgwKSk7CisKKwlp ZiAoIVBHX0FSR0lTTlVMTCgxKSkKKwkJYm1zMiA9IFRFWFRfVE9fQklUTUFQU0VUKFBHX0dFVEFS R19URVhUX1BQKDEpKTsKKworCXJlc3VsdF9ibXMgPSBibXNfZGlmZmVyZW5jZShibXMxLCBibXMy KTsKKworCWlmIChibXMxKQorCQlibXNfZnJlZShibXMxKTsKKwlpZiAoYm1zMikKKwkJYm1zX2Zy ZWUoYm1zMik7CisKKwlpZiAocmVzdWx0X2JtcyA9PSBOVUxMKQorCQlQR19SRVRVUk5fTlVMTCgp OworCisJcmVzdWx0ID0gQklUTUFQU0VUX1RPX1RFWFQocmVzdWx0X2Jtcyk7CisJYm1zX2ZyZWUo cmVzdWx0X2Jtcyk7CisKKwlQR19SRVRVUk5fVEVYVF9QKHJlc3VsdCk7Cit9CisKK0RhdHVtCit0 ZXN0X2Jtc19jb21wYXJlKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJQml0bWFwc2V0ICAqYm1zMSA9 IE5VTEwsCisJCQkgICAqYm1zMiA9IE5VTEw7CisJaW50CQkJcmVzdWx0OworCisJaWYgKCFQR19B UkdJU05VTEwoMCkpCisJCWJtczEgPSBURVhUX1RPX0JJVE1BUFNFVChQR19HRVRBUkdfVEVYVF9Q UCgwKSk7CisKKwlpZiAoIVBHX0FSR0lTTlVMTCgxKSkKKwkJYm1zMiA9IFRFWFRfVE9fQklUTUFQ U0VUKFBHX0dFVEFSR19URVhUX1BQKDEpKTsKKworCXJlc3VsdCA9IGJtc19jb21wYXJlKGJtczEs IGJtczIpOworCisJaWYgKGJtczEpCisJCWJtc19mcmVlKGJtczEpOworCWlmIChibXMyKQorCQli bXNfZnJlZShibXMyKTsKKworCVBHX1JFVFVSTl9JTlQzMihyZXN1bHQpOworfQorCitEYXR1bQor dGVzdF9ibXNfaXNfZW1wdHkoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlCaXRtYXBzZXQgICpibXMg PSBOVUxMOworCWJvb2wJCXJlc3VsdDsKKworCWlmICghUEdfQVJHSVNOVUxMKDApKQorCQlibXMg PSBURVhUX1RPX0JJVE1BUFNFVChQR19HRVRBUkdfVEVYVF9QUCgwKSk7CisKKwlyZXN1bHQgPSBi bXNfaXNfZW1wdHkoYm1zKTsKKworCWlmIChibXMpCisJCWJtc19mcmVlKGJtcyk7CisKKwlQR19S RVRVUk5fQk9PTChyZXN1bHQpOworfQorCitEYXR1bQordGVzdF9ibXNfaXNfc3Vic2V0KFBHX0ZV TkNUSU9OX0FSR1MpCit7CisJQml0bWFwc2V0ICAqYm1zMSA9IE5VTEwsCisJCQkgICAqYm1zMiA9 IE5VTEw7CisJYm9vbAkJcmVzdWx0OworCisJaWYgKCFQR19BUkdJU05VTEwoMCkpCisJCWJtczEg PSBURVhUX1RPX0JJVE1BUFNFVChQR19HRVRBUkdfVEVYVF9QUCgwKSk7CisKKwlpZiAoIVBHX0FS R0lTTlVMTCgxKSkKKwkJYm1zMiA9IFRFWFRfVE9fQklUTUFQU0VUKFBHX0dFVEFSR19URVhUX1BQ KDEpKTsKKworCXJlc3VsdCA9IGJtc19pc19zdWJzZXQoYm1zMSwgYm1zMik7CisKKwlpZiAoYm1z MSkKKwkJYm1zX2ZyZWUoYm1zMSk7CisJaWYgKGJtczIpCisJCWJtc19mcmVlKGJtczIpOworCisJ UEdfUkVUVVJOX0JPT0wocmVzdWx0KTsKK30KKworRGF0dW0KK3Rlc3RfYm1zX3N1YnNldF9jb21w YXJlKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJQml0bWFwc2V0ICAqYm1zMSA9IE5VTEwsCisJCQkg ICAqYm1zMiA9IE5VTEw7CisJQk1TX0NvbXBhcmlzb24gcmVzdWx0OworCisJaWYgKCFQR19BUkdJ U05VTEwoMCkpCisJCWJtczEgPSBURVhUX1RPX0JJVE1BUFNFVChQR19HRVRBUkdfVEVYVF9QUCgw KSk7CisKKwlpZiAoIVBHX0FSR0lTTlVMTCgxKSkKKwkJYm1zMiA9IFRFWFRfVE9fQklUTUFQU0VU KFBHX0dFVEFSR19URVhUX1BQKDEpKTsKKworCXJlc3VsdCA9IGJtc19zdWJzZXRfY29tcGFyZShi bXMxLCBibXMyKTsKKworCWlmIChibXMxKQorCQlibXNfZnJlZShibXMxKTsKKwlpZiAoYm1zMikK KwkJYm1zX2ZyZWUoYm1zMik7CisKKwlQR19SRVRVUk5fSU5UMzIoKGludDMyKSByZXN1bHQpOwor fQorCitEYXR1bQordGVzdF9ibXNfc2luZ2xldG9uX21lbWJlcihQR19GVU5DVElPTl9BUkdTKQor eworCUJpdG1hcHNldCAgKmJtcyA9IE5VTEw7CisJaW50CQkJcmVzdWx0OworCisJaWYgKCFQR19B UkdJU05VTEwoMCkpCisJCWJtcyA9IFRFWFRfVE9fQklUTUFQU0VUKFBHX0dFVEFSR19URVhUX1BQ KDApKTsKKworCXJlc3VsdCA9IGJtc19zaW5nbGV0b25fbWVtYmVyKGJtcyk7CisKKwlpZiAoYm1z KQorCQlibXNfZnJlZShibXMpOworCisJUEdfUkVUVVJOX0lOVDMyKHJlc3VsdCk7Cit9CisKK0Rh dHVtCit0ZXN0X2Jtc19nZXRfc2luZ2xldG9uX21lbWJlcihQR19GVU5DVElPTl9BUkdTKQorewor CUJpdG1hcHNldCAgKmJtcyA9IE5VTEw7CisJaW50MzIJCWRlZmF1bHRfbWVtYmVyID0gUEdfR0VU QVJHX0lOVDMyKDEpOworCWludAkJCW1lbWJlcjsKKwlib29sCQlzdWNjZXNzOworCisJaWYgKFBH X0FSR0lTTlVMTCgwKSkKKwkJUEdfUkVUVVJOX0lOVDMyKGRlZmF1bHRfbWVtYmVyKTsKKworCWJt cyA9IFRFWFRfVE9fQklUTUFQU0VUKFBHX0dFVEFSR19URVhUX1BQKDApKTsKKworCS8qCisJICog Ym1zX2dldF9zaW5nbGV0b25fbWVtYmVyIHJldHVybnMgYm9vbCBhbmQgc3RvcmVzIHJlc3VsdCBp biBtZW1iZXIKKwkgKiBwb2ludGVyCisJICovCisJc3VjY2VzcyA9IGJtc19nZXRfc2luZ2xldG9u X21lbWJlcihibXMsICZtZW1iZXIpOworCWJtc19mcmVlKGJtcyk7CisKKwlpZiAoc3VjY2VzcykK KwkJUEdfUkVUVVJOX0lOVDMyKG1lbWJlcik7CisJZWxzZQorCQlQR19SRVRVUk5fSU5UMzIoZGVm YXVsdF9tZW1iZXIpOworfQorCitEYXR1bQordGVzdF9ibXNfcHJldl9tZW1iZXIoUEdfRlVOQ1RJ T05fQVJHUykKK3sKKwl0ZXh0CSAgICpibXNfZGF0YTsKKwlCaXRtYXBzZXQgICpibXMgPSBOVUxM OworCWludDMyCQlwcmV2bWVtYmVyOworCWludAkJCXJlc3VsdDsKKworCWlmIChQR19BUkdJU05V TEwoMCkpCisJCVBHX1JFVFVSTl9JTlQzMigtMik7CisKKwlibXNfZGF0YSA9IFBHX0dFVEFSR19U RVhUX1BQKDApOworCXByZXZtZW1iZXIgPSBQR19HRVRBUkdfSU5UMzIoMSk7CisKKwlpZiAoVkFS U0laRV9BTllfRVhIRFIoYm1zX2RhdGEpID09IDApCisJCVBHX1JFVFVSTl9JTlQzMigtMik7CisK KwlibXMgPSBURVhUX1RPX0JJVE1BUFNFVChibXNfZGF0YSk7CisJcmVzdWx0ID0gYm1zX3ByZXZf bWVtYmVyKGJtcywgcHJldm1lbWJlcik7CisJYm1zX2ZyZWUoYm1zKTsKKworCVBHX1JFVFVSTl9J TlQzMihyZXN1bHQpOworfQorCitEYXR1bQordGVzdF9ibXNfb3ZlcmxhcChQR19GVU5DVElPTl9B UkdTKQoreworCUJpdG1hcHNldCAgKmJtczEgPSBOVUxMLAorCQkJICAgKmJtczIgPSBOVUxMOwor CWJvb2wJCXJlc3VsdDsKKworCWlmICghUEdfQVJHSVNOVUxMKDApKQorCQlibXMxID0gVEVYVF9U T19CSVRNQVBTRVQoUEdfR0VUQVJHX1RFWFRfUFAoMCkpOworCisJaWYgKCFQR19BUkdJU05VTEwo MSkpCisJCWJtczIgPSBURVhUX1RPX0JJVE1BUFNFVChQR19HRVRBUkdfVEVYVF9QUCgxKSk7CisK KwlyZXN1bHQgPSBibXNfb3ZlcmxhcChibXMxLCBibXMyKTsKKworCWlmIChibXMxKQorCQlibXNf ZnJlZShibXMxKTsKKwlpZiAoYm1zMikKKwkJYm1zX2ZyZWUoYm1zMik7CisKKwlQR19SRVRVUk5f Qk9PTChyZXN1bHQpOworfQorCitEYXR1bQordGVzdF9ibXNfb3ZlcmxhcF9saXN0KFBHX0ZVTkNU SU9OX0FSR1MpCit7CisJQml0bWFwc2V0ICAqYm1zID0gTlVMTDsKKwlBcnJheVR5cGUgICphcnJh eTsKKwlMaXN0CSAgICppbnRfbGlzdCA9IE5JTDsKKwlib29sCQlyZXN1bHQ7CisJRGF0dW0JICAg KmVsZW1fZGF0dW1zOworCWJvb2wJICAgKmVsZW1fbnVsbHM7CisJaW50CQkJZWxlbV9jb3VudDsK KwlpbnQJCQlpOworCisJaWYgKFBHX0FSR0lTTlVMTCgwKSkKKwkJUEdfUkVUVVJOX0JPT0woZmFs c2UpOworCisJYm1zID0gVEVYVF9UT19CSVRNQVBTRVQoUEdfR0VUQVJHX1RFWFRfUFAoMCkpOwor CisJaWYgKFBHX0FSR0lTTlVMTCgxKSkKKwl7CisJCWlmIChibXMpCisJCQlibXNfZnJlZShibXMp OworCQlQR19SRVRVUk5fQk9PTChmYWxzZSk7CisJfQorCisJYXJyYXkgPSBQR19HRVRBUkdfQVJS QVlUWVBFX1AoMSk7CisKKwlpZiAoQVJSX0VMRU1UWVBFKGFycmF5KSAhPSBJTlQ0T0lEKQorCQll cmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfREFUQVRZUEVfTUlTTUFUQ0gpLAor CQkJCSBlcnJtc2coImludGVnZXIgYXJyYXkgZXhwZWN0ZWQiKSkpOworCisJZGVjb25zdHJ1Y3Rf YXJyYXkoYXJyYXksCisJCQkJCSAgSU5UNE9JRCwgc2l6ZW9mKGludDMyKSwgdHJ1ZSwgJ2knLAor CQkJCQkgICZlbGVtX2RhdHVtcywgJmVsZW1fbnVsbHMsICZlbGVtX2NvdW50KTsKKworCWZvciAo aSA9IDA7IGkgPCBlbGVtX2NvdW50OyBpKyspCisJeworCQlpZiAoIWVsZW1fbnVsbHNbaV0pCisJ CXsKKwkJCWludDMyCQltZW1iZXIgPSBEYXR1bUdldEludDMyKGVsZW1fZGF0dW1zW2ldKTsKKwor CQkJaW50X2xpc3QgPSBsYXBwZW5kX2ludChpbnRfbGlzdCwgbWVtYmVyKTsKKwkJfQorCX0KKwor CXJlc3VsdCA9IGJtc19vdmVybGFwX2xpc3QoYm1zLCBpbnRfbGlzdCk7CisKKwlpZiAoYm1zKQor CQlibXNfZnJlZShibXMpOworCisJbGlzdF9mcmVlKGludF9saXN0KTsKKworCXBmcmVlKGVsZW1f ZGF0dW1zKTsKKwlwZnJlZShlbGVtX251bGxzKTsKKworCVBHX1JFVFVSTl9CT09MKHJlc3VsdCk7 Cit9CisKK0RhdHVtCit0ZXN0X2Jtc19ub25lbXB0eV9kaWZmZXJlbmNlKFBHX0ZVTkNUSU9OX0FS R1MpCit7CisJQml0bWFwc2V0ICAqYm1zMSA9IE5VTEwsCisJCQkgICAqYm1zMiA9IE5VTEw7CisJ Ym9vbAkJcmVzdWx0OworCisJaWYgKCFQR19BUkdJU05VTEwoMCkpCisJCWJtczEgPSBURVhUX1RP X0JJVE1BUFNFVChQR19HRVRBUkdfVEVYVF9QUCgwKSk7CisKKwlpZiAoIVBHX0FSR0lTTlVMTCgx KSkKKwkJYm1zMiA9IFRFWFRfVE9fQklUTUFQU0VUKFBHX0dFVEFSR19URVhUX1BQKDEpKTsKKwor CXJlc3VsdCA9IGJtc19ub25lbXB0eV9kaWZmZXJlbmNlKGJtczEsIGJtczIpOworCisJaWYgKGJt czEpCisJCWJtc19mcmVlKGJtczEpOworCWlmIChibXMyKQorCQlibXNfZnJlZShibXMyKTsKKwor CVBHX1JFVFVSTl9CT09MKHJlc3VsdCk7Cit9CisKK0RhdHVtCit0ZXN0X2Jtc19tZW1iZXJfaW5k ZXgoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwl0ZXh0CSAgICpibXNfZGF0YTsKKwlCaXRtYXBzZXQg ICpibXMgPSBOVUxMOworCWludDMyCQltZW1iZXI7CisJaW50CQkJcmVzdWx0OworCisJaWYgKFBH X0FSR0lTTlVMTCgwKSkKKwkJUEdfUkVUVVJOX0lOVDMyKC0xKTsKKworCWJtc19kYXRhID0gUEdf R0VUQVJHX1RFWFRfUFAoMCk7CisJbWVtYmVyID0gUEdfR0VUQVJHX0lOVDMyKDEpOworCisJaWYg KFZBUlNJWkVfQU5ZX0VYSERSKGJtc19kYXRhKSA9PSAwKQorCQlQR19SRVRVUk5fSU5UMzIoLTEp OworCisJYm1zID0gVEVYVF9UT19CSVRNQVBTRVQoYm1zX2RhdGEpOworCisJcmVzdWx0ID0gYm1z X21lbWJlcl9pbmRleChibXMsIG1lbWJlcik7CisJYm1zX2ZyZWUoYm1zKTsKKworCVBHX1JFVFVS Tl9JTlQzMihyZXN1bHQpOworfQorCitEYXR1bQordGVzdF9ibXNfYWRkX3JhbmdlKFBHX0ZVTkNU SU9OX0FSR1MpCit7CisJQml0bWFwc2V0ICAqYm1zID0gTlVMTDsKKwlpbnQzMgkJbG93ZXIsCisJ CQkJdXBwZXI7CisJdGV4dAkgICAqcmVzdWx0OworCisJaWYgKFBHX0FSR0lTTlVMTCgxKSB8fCBQ R19BUkdJU05VTEwoMikpCisJCVBHX1JFVFVSTl9OVUxMKCk7CisKKwlpZiAoIVBHX0FSR0lTTlVM TCgwKSkKKwkJYm1zID0gVEVYVF9UT19CSVRNQVBTRVQoUEdfR0VUQVJHX1RFWFRfUFAoMCkpOwor CisJbG93ZXIgPSBQR19HRVRBUkdfSU5UMzIoMSk7CisJdXBwZXIgPSBQR19HRVRBUkdfSU5UMzIo Mik7CisKKwkvKiBDaGVjayBmb3IgaW52YWxpZCByYW5nZSAqLworCWlmICh1cHBlciA8IGxvd2Vy KQorCXsKKwkJaWYgKGJtcykKKwkJCWJtc19mcmVlKGJtcyk7CisJCVBHX1JFVFVSTl9OVUxMKCk7 CisJfQorCisJYm1zID0gYm1zX2FkZF9yYW5nZShibXMsIGxvd2VyLCB1cHBlcik7CisKKwlyZXN1 bHQgPSBCSVRNQVBTRVRfVE9fVEVYVChibXMpOworCWlmIChibXMpCisJCWJtc19mcmVlKGJtcyk7 CisKKwlQR19SRVRVUk5fVEVYVF9QKHJlc3VsdCk7Cit9CisKK0RhdHVtCit0ZXN0X2Jtc19pbnRf bWVtYmVycyhQR19GVU5DVElPTl9BUkdTKQoreworCUJpdG1hcHNldCAgKmJtczEgPSBOVUxMLAor CQkJICAgKmJtczIgPSBOVUxMOworCXRleHQJICAgKnJlc3VsdDsKKworCWlmICghUEdfQVJHSVNO VUxMKDApKQorCQlibXMxID0gVEVYVF9UT19CSVRNQVBTRVQoUEdfR0VUQVJHX1RFWFRfUFAoMCkp OworCisJaWYgKCFQR19BUkdJU05VTEwoMSkpCisJCWJtczIgPSBURVhUX1RPX0JJVE1BUFNFVChQ R19HRVRBUkdfVEVYVF9QUCgxKSk7CisKKwlibXMxID0gYm1zX2ludF9tZW1iZXJzKGJtczEsIGJt czIpOworCisJaWYgKGJtczIpCisJCWJtc19mcmVlKGJtczIpOworCisJaWYgKGJtczEgPT0gTlVM TCkKKwkJUEdfUkVUVVJOX05VTEwoKTsKKworCXJlc3VsdCA9IEJJVE1BUFNFVF9UT19URVhUKGJt czEpOworCisJaWYgKGJtczEpCisJCWJtc19mcmVlKGJtczEpOworCisJUEdfUkVUVVJOX1RFWFRf UChyZXN1bHQpOworfQorCitEYXR1bQordGVzdF9ibXNfcmVwbGFjZV9tZW1iZXJzKFBHX0ZVTkNU SU9OX0FSR1MpCit7CisJQml0bWFwc2V0ICAqYm1zMSA9IE5VTEwsCisJCQkgICAqYm1zMiA9IE5V TEw7CisJQml0bWFwc2V0ICAqcmVzdWx0X2JtczsKKwl0ZXh0CSAgICpyZXN1bHQ7CisKKwlpZiAo IVBHX0FSR0lTTlVMTCgwKSkKKwkJYm1zMSA9IFRFWFRfVE9fQklUTUFQU0VUKFBHX0dFVEFSR19U RVhUX1BQKDApKTsKKworCWlmICghUEdfQVJHSVNOVUxMKDEpKQorCQlibXMyID0gVEVYVF9UT19C SVRNQVBTRVQoUEdfR0VUQVJHX1RFWFRfUFAoMSkpOworCisJLyogSU1QT1JUQU5UOiBibXNfcmVw bGFjZV9tZW1iZXJzIG1vZGlmaWVzL2ZyZWVzIHRoZSBmaXJzdCBhcmd1bWVudCAqLworCXJlc3Vs dF9ibXMgPSBibXNfcmVwbGFjZV9tZW1iZXJzKGJtczEsIGJtczIpOworCS8qIGJtczEgaXMgbm93 IGludmFsaWQsIGRvbid0IGZyZWUgaXQgKi8KKworCWlmIChibXMyKQorCQlibXNfZnJlZShibXMy KTsKKworCWlmIChyZXN1bHRfYm1zID09IE5VTEwpCisJCVBHX1JFVFVSTl9OVUxMKCk7CisKKwly ZXN1bHQgPSBCSVRNQVBTRVRfVE9fVEVYVChyZXN1bHRfYm1zKTsKKwlibXNfZnJlZShyZXN1bHRf Ym1zKTsKKworCVBHX1JFVFVSTl9URVhUX1AocmVzdWx0KTsKK30KKworRGF0dW0KK3Rlc3RfYm1z X2pvaW4oUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlCaXRtYXBzZXQgICpibXMxID0gTlVMTCwKKwkJ CSAgICpibXMyID0gTlVMTDsKKwlCaXRtYXBzZXQgICpyZXN1bHRfYm1zOworCXRleHQJICAgKnJl c3VsdDsKKworCWlmICghUEdfQVJHSVNOVUxMKDApKQorCQlibXMxID0gVEVYVF9UT19CSVRNQVBT RVQoUEdfR0VUQVJHX1RFWFRfUFAoMCkpOworCisJaWYgKCFQR19BUkdJU05VTEwoMSkpCisJCWJt czIgPSBURVhUX1RPX0JJVE1BUFNFVChQR19HRVRBUkdfVEVYVF9QUCgxKSk7CisKKwkvKiBJTVBP UlRBTlQ6IGJtc19qb2luIG1vZGlmaWVzL2ZyZWVzIHRoZSBmaXJzdCBhcmd1bWVudCAqLworCXJl c3VsdF9ibXMgPSBibXNfam9pbihibXMxLCBibXMyKTsKKwkvKiBibXMxIGlzIG5vdyBpbnZhbGlk ISBEb24ndCBmcmVlIGl0ICovCisKKwlpZiAoYm1zMikKKwkJYm1zX2ZyZWUoYm1zMik7CisKKwlp ZiAocmVzdWx0X2JtcyA9PSBOVUxMKQorCQlQR19SRVRVUk5fTlVMTCgpOworCisJcmVzdWx0ID0g QklUTUFQU0VUX1RPX1RFWFQocmVzdWx0X2Jtcyk7CisJYm1zX2ZyZWUocmVzdWx0X2Jtcyk7CisK KwlQR19SRVRVUk5fVEVYVF9QKHJlc3VsdCk7Cit9CisKK0RhdHVtCit0ZXN0X2Jtc19oYXNoX3Zh bHVlKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJQml0bWFwc2V0ICAqYm1zID0gTlVMTDsKKwl1aW50 MzIJCWhhc2hfcmVzdWx0OworCisJaWYgKCFQR19BUkdJU05VTEwoMCkpCisJCWJtcyA9IFRFWFRf VE9fQklUTUFQU0VUKFBHX0dFVEFSR19URVhUX1BQKDApKTsKKworCWhhc2hfcmVzdWx0ID0gYm1z X2hhc2hfdmFsdWUoYm1zKTsKKworCWlmIChibXMpCisJCWJtc19mcmVlKGJtcyk7CisKKwlQR19S RVRVUk5fSU5UMzIoaGFzaF9yZXN1bHQpOworfQorCitEYXR1bQordGVzdF9iaXRtYXBfaGFzaChQ R19GVU5DVElPTl9BUkdTKQoreworCUJpdG1hcHNldCAgKmJtcyA9IE5VTEw7CisJQml0bWFwc2V0 ICAqYm1zX3B0cjsKKwl1aW50MzIJCWhhc2hfcmVzdWx0OworCisJaWYgKCFQR19BUkdJU05VTEwo MCkpCisJCWJtcyA9IFRFWFRfVE9fQklUTUFQU0VUKFBHX0dFVEFSR19URVhUX1BQKDApKTsKKwor CWJtc19wdHIgPSBibXM7CisKKwkvKiBDYWxsIGJpdG1hcF9oYXNoICovCisJaGFzaF9yZXN1bHQg PSBiaXRtYXBfaGFzaCgmYm1zX3B0ciwgc2l6ZW9mKEJpdG1hcHNldCAqKSk7CisKKwkvKiBDbGVh biB1cCAqLworCWlmICghUEdfQVJHSVNOVUxMKDApICYmIGJtc19wdHIpCisJCWJtc19mcmVlKGJt c19wdHIpOworCisJUEdfUkVUVVJOX0lOVDMyKGhhc2hfcmVzdWx0KTsKK30KKworRGF0dW0KK3Rl c3RfYml0bWFwX21hdGNoKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJQml0bWFwc2V0ICAqYm1zMSA9 IE5VTEwsCisJCQkgICAqYm1zMiA9IE5VTEw7CisJQml0bWFwc2V0ICAqYm1zX3B0cjEsCisJCQkg ICAqYm1zX3B0cjI7CisJaW50CQkJbWF0Y2hfcmVzdWx0OworCisJaWYgKCFQR19BUkdJU05VTEwo MCkpCisJCWJtczEgPSBURVhUX1RPX0JJVE1BUFNFVChQR19HRVRBUkdfVEVYVF9QUCgwKSk7CisK KwlpZiAoIVBHX0FSR0lTTlVMTCgxKSkKKwkJYm1zMiA9IFRFWFRfVE9fQklUTUFQU0VUKFBHX0dF VEFSR19URVhUX1BQKDEpKTsKKworCS8qIFNldCB1cCBwb2ludGVycyB0byB0aGUgQml0bWFwc2V0 cyAqLworCWJtc19wdHIxID0gYm1zMTsKKwlibXNfcHRyMiA9IGJtczI7CisKKwkvKiBDYWxsIGJp dG1hcF9tYXRjaCB3aXRoIGFkZHJlc3NlcyBvZiB0aGUgQml0bWFwc2V0IHBvaW50ZXJzICovCisJ bWF0Y2hfcmVzdWx0ID0gYml0bWFwX21hdGNoKCZibXNfcHRyMSwgJmJtc19wdHIyLCBzaXplb2Yo Qml0bWFwc2V0ICopKTsKKworCS8qIENsZWFuIHVwICovCisJaWYgKGJtczEpCisJCWJtc19mcmVl KGJtczEpOworCWlmIChibXMyKQorCQlibXNfZnJlZShibXMyKTsKKworCVBHX1JFVFVSTl9JTlQz MihtYXRjaF9yZXN1bHQpOworfQorCitEYXR1bQordGVzdF9yYW5kb21fb3BlcmF0aW9ucyhQR19G VU5DVElPTl9BUkdTKQoreworCUJpdG1hcHNldCAgKmJtczEgPSBOVUxMOworCUJpdG1hcHNldCAg KmJtczIgPSBOVUxMOworCUJpdG1hcHNldCAgKmJtcyA9IE5VTEw7CisJQml0bWFwc2V0ICAqcmVz dWx0ID0gTlVMTDsKKwlwZ19wcm5nX3N0YXRlIHN0YXRlOworCXVpbnQ2NAkJc2VlZCA9IEdldEN1 cnJlbnRUaW1lc3RhbXAoKTsKKwlpbnQJCQludW1fb3BzID0gNTAwMDsKKwlpbnQJCQl0b3RhbF9v cHMgPSAwOworCWludAkJCW1heF9yYW5nZSA9IDIwMDA7CisJaW50CQkJbWluX3ZhbHVlID0gMDsK KwlpbnQJCQltZW1iZXI7CisJaW50CQkgICAqbWVtYmVyczsKKwlpbnQJCQludW1fbWVtYmVycyA9 IDA7CisKKwlpZiAoIVBHX0FSR0lTTlVMTCgwKSAmJiBQR19HRVRBUkdfSU5UMzIoMCkgPiAwKQor CQlzZWVkID0gUEdfR0VUQVJHX0lOVDMyKDApOworCisJaWYgKCFQR19BUkdJU05VTEwoMSkpCisJ CW51bV9vcHMgPSBQR19HRVRBUkdfSU5UMzIoMSk7CisKKwlpZiAoIVBHX0FSR0lTTlVMTCgyKSkK KwkJbWF4X3JhbmdlID0gUEdfR0VUQVJHX0lOVDMyKDIpOworCisJaWYgKCFQR19BUkdJU05VTEwo MykpCisJCW1pbl92YWx1ZSA9IFBHX0dFVEFSR19JTlQzMigzKTsKKworCXBnX3Bybmdfc2VlZCgm c3RhdGUsIHNlZWQpOworCW1lbWJlcnMgPSBwYWxsb2Moc2l6ZW9mKGludCkgKiBudW1fb3BzKTsK KworCS8qIFBoYXNlIDE6IFJhbmRvbSBpbnNlcnRpb25zICovCisJZm9yIChpbnQgaSA9IDA7IGkg PCBudW1fb3BzIC8gMjsgaSsrKQorCXsKKwkJbWVtYmVyID0gcGdfcHJuZ191aW50MzIoJnN0YXRl KSAlIG1heF9yYW5nZSArIG1pbl92YWx1ZTsKKworCQlpZiAoIWJtc19pc19tZW1iZXIobWVtYmVy LCBibXMxKSkKKwkJeworCQkJbWVtYmVyc1tudW1fbWVtYmVycysrXSA9IG1lbWJlcjsKKwkJCWJt czEgPSBibXNfYWRkX21lbWJlcihibXMxLCBtZW1iZXIpOworCQl9CisJfQorCisJLyogUGhhc2Ug MjogUmFuZG9tIHNldCBvcGVyYXRpb25zICovCisJZm9yIChpbnQgaSA9IDA7IGkgPCBudW1fb3Bz IC8gNDsgaSsrKQorCXsKKwkJbWVtYmVyID0gcGdfcHJuZ191aW50MzIoJnN0YXRlKSAlIG1heF9y YW5nZSArIG1pbl92YWx1ZTsKKworCQlibXMyID0gYm1zX2FkZF9tZW1iZXIoYm1zMiwgbWVtYmVy KTsKKwl9CisKKwkvKiBUZXN0IHVuaW9uICovCisJcmVzdWx0ID0gYm1zX3VuaW9uKGJtczEsIGJt czIpOworCUVYUEVDVF9OT1RfTlVMTChyZXN1bHQpOworCisJLyogVmVyaWZ5IHVuaW9uIGNvbnRh aW5zIGFsbCBtZW1iZXJzIGZyb20gZmlyc3Qgc2V0ICovCisJZm9yIChpbnQgaSA9IDA7IGkgPCBu dW1fbWVtYmVyczsgaSsrKQorCXsKKwkJaWYgKCFibXNfaXNfbWVtYmVyKG1lbWJlcnNbaV0sIHJl c3VsdCkpCisJCQllbG9nKEVSUk9SLCAidW5pb24gbWlzc2luZyBtZW1iZXIgJWQiLCBtZW1iZXJz W2ldKTsKKwl9CisJYm1zX2ZyZWUocmVzdWx0KTsKKworCS8qIFRlc3QgaW50ZXJzZWN0aW9uICov CisJcmVzdWx0ID0gYm1zX2ludGVyc2VjdChibXMxLCBibXMyKTsKKwlpZiAocmVzdWx0ICE9IE5V TEwpCisJeworCQltZW1iZXIgPSAtMTsKKworCQl3aGlsZSAoKG1lbWJlciA9IGJtc19uZXh0X21l bWJlcihyZXN1bHQsIG1lbWJlcikpID49IDApCisJCXsKKwkJCWlmICghYm1zX2lzX21lbWJlciht ZW1iZXIsIGJtczEpIHx8ICFibXNfaXNfbWVtYmVyKG1lbWJlciwgYm1zMikpCisJCQkJZWxvZyhF UlJPUiwgImludGVyc2VjdGlvbiBjb250YWlucyBpbnZhbGlkIG1lbWJlciAlZCIsIG1lbWJlcik7 CisJCX0KKwkJYm1zX2ZyZWUocmVzdWx0KTsKKwl9CisKKwkvKiBQaGFzZSAzOiBUZXN0IHJhbmdl IG9wZXJhdGlvbnMgKi8KKwlyZXN1bHQgPSBOVUxMOworCWZvciAoaW50IGkgPSAwOyBpIDwgMTA7 IGkrKykKKwl7CisJCWludAkJCWxvd2VyID0gcGdfcHJuZ191aW50MzIoJnN0YXRlKSAlIDEwMDsK KwkJaW50CQkJdXBwZXIgPSBsb3dlciArIChwZ19wcm5nX3VpbnQzMigmc3RhdGUpICUgMjApOwor CisJCXJlc3VsdCA9IGJtc19hZGRfcmFuZ2UocmVzdWx0LCBsb3dlciwgdXBwZXIpOworCX0KKwlp ZiAocmVzdWx0ICE9IE5VTEwpCisJeworCQlFWFBFQ1RfVFJVRShibXNfbnVtX21lbWJlcnMocmVz dWx0KSA+IDApOworCQlibXNfZnJlZShyZXN1bHQpOworCX0KKworCXBmcmVlKG1lbWJlcnMpOwor CWJtc19mcmVlKGJtczEpOworCWJtc19mcmVlKGJtczIpOworCisJZm9yIChpbnQgaSA9IDA7IGkg PCBudW1fb3BzOyBpKyspCisJeworCQltZW1iZXIgPSBwZ19wcm5nX3VpbnQzMigmc3RhdGUpICUg bWF4X3JhbmdlICsgbWluX3ZhbHVlOworCQlzd2l0Y2ggKHBnX3BybmdfdWludDMyKCZzdGF0ZSkg JSAzKQorCQl7CisJCQljYXNlIDA6CQkJCS8qIGFkZCAqLworCQkJCWJtcyA9IGJtc19hZGRfbWVt YmVyKGJtcywgbWVtYmVyKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMToJCQkJLyogZGVsZXRlICov CisJCQkJaWYgKGJtcyAhPSBOVUxMKQorCQkJCXsKKwkJCQkJYm1zID0gYm1zX2RlbF9tZW1iZXIo Ym1zLCBtZW1iZXIpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgMjoJCQkJLyogdGVzdCBt ZW1iZXJzaGlwICovCisJCQkJaWYgKGJtcyAhPSBOVUxMKQorCQkJCXsKKwkJCQkJYm1zX2lzX21l bWJlcihtZW1iZXIsIGJtcyk7CisJCQkJfQorCQkJCWJyZWFrOworCQl9CisJCXRvdGFsX29wcysr OworCX0KKworCWlmIChibXMpCisJCWJtc19mcmVlKGJtcyk7CisKKwlQR19SRVRVUk5fSU5UMzIo dG90YWxfb3BzKTsKK30KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBz ZXQvdGVzdF9iaXRtYXBzZXQuY29udHJvbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBz ZXQvdGVzdF9iaXRtYXBzZXQuY29udHJvbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uOGQwMmVjOGJmMGEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfYml0bWFwc2V0L3Rlc3RfYml0bWFwc2V0LmNvbnRyb2wKQEAgLTAsMCArMSw0IEBACitj b21tZW50ID0gJ1Rlc3QgY29kZSBmb3IgQml0bWFwc2V0JworZGVmYXVsdF92ZXJzaW9uID0gJzEu MCcKK21vZHVsZV9wYXRobmFtZSA9ICckbGliZGlyL3Rlc3RfYml0bWFwc2V0JworcmVsb2NhdGFi bGUgPSB0cnVlCi0tIAoyLjQ5LjAKCg== --68cda58b_66785b5d_6415--