Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pbxji-00044M-2I for pgsql-hackers@arkaria.postgresql.org; Tue, 14 Mar 2023 06:02:14 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pbxjg-0000yu-Tl for pgsql-hackers@arkaria.postgresql.org; Tue, 14 Mar 2023 06:02:12 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pbxjg-0000yk-AH for pgsql-hackers@lists.postgresql.org; Tue, 14 Mar 2023 06:02:12 +0000 Received: from mail-oa1-x2d.google.com ([2001:4860:4864:20::2d]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1pbxjd-0005Ku-DV for pgsql-hackers@postgresql.org; Tue, 14 Mar 2023 06:02:11 +0000 Received: by mail-oa1-x2d.google.com with SMTP id 586e51a60fabf-176eae36feaso16202371fac.6 for ; Mon, 13 Mar 2023 23:02:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1678773729; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=zWnCKWGkRxjeA1dJy4lrU/MLg3igbVHqL+MpwME+zyc=; b=Kifr6dJiHLM5VGcV2NqRiutPxDUALc7fdtLlELWw7OhJr9GGfGIliu+WfiZRurTQHv +uLi1H3MMCCFmgymT9DWH/zRn3aNYaR+UiTslwN8+szNi/qRPCA6rD9PHbHjD0sDNtBP bxS9gkYJa2eDTTCyViJQSHyQVrVcDiMsJzXRjfjjktuTq/cfVPRPxdCM1J2fbxGeinOz hwJZsyGI3QeMXecjWIxhPq+uR6utQyWgCKbqJf0mo1H0kMGZCMTEue3Qlo8WXuOMhN7L DfCAF2IBwX7coXf1s2bjrRPXlW7FTkqax/eqbqbO8ddvPWq6gmMTj69zcUUbUgHkIBW8 81Qw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678773729; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=zWnCKWGkRxjeA1dJy4lrU/MLg3igbVHqL+MpwME+zyc=; b=PNJZz/omHuaGzyBD8K0C5QOxQsVYcdhSCvYSkXcy90K7rTuV8vdcpQCaiLob3fDhB7 KTtMcPuTdJz0moi665OkazRkRIXIKSZvRA7aaYf/IoWvoRkCzA6wCMbhxbDvnGyw96G6 MxXpYDUof24G3g2VmV3opmgMtivZ7UGpEPFKlA9gpd/UlgR5dRPXN6WcsxgrHPOhckJx tg/g5bwQ+8aagD0NQUDC754cZ1dDQTrw15OWxgti7VZlFZ8Uc+7q8C7BzBJe3ThNZko7 3CXOLQenZdzQYbtQdknWUy5eSG4bnYa0h/T1toLcyJUDYal8FjJ6dgYaITVX8BTrTqzH hVrA== X-Gm-Message-State: AO0yUKWvWktUdSrH8OFrpd2XawSQuqn9PB65u++KRtOreBfRiD+duOJD 1IrZ/SAmHbVevoVJ8lVznvw4Heqc2dh/NAiltVg= X-Google-Smtp-Source: AK7set9zQ0uII4YV0V2KEBKmCtXH7gn5hWK08TPfkYNlzik9s2ozamo2VT6HuRTJZLsUqp9GoLXUv0PUoFGb1sw9QDQ= X-Received: by 2002:a05:6870:f21a:b0:177:b694:724c with SMTP id t26-20020a056870f21a00b00177b694724cmr2387430oao.1.1678773728724; Mon, 13 Mar 2023 23:02:08 -0700 (PDT) MIME-Version: 1.0 References: <20210423204306.5osfpkt2ggaedyvy@alap3.anarazel.de> <20210611011850.detxnd7bnffg3daz@alap3.anarazel.de> <64524348-b10e-9904-4858-8fe62d058b14@iki.fi> In-Reply-To: From: Masahiko Sawada Date: Tue, 14 Mar 2023 15:01:30 +0900 Message-ID: Subject: Re: Testing autovacuum wraparound (including failsafe) To: Heikki Linnakangas Cc: Ian Lawrence Barwick , Andres Freund , Anastasia Lubennikova , pgsql-hackers , Peter Geoghegan Content-Type: multipart/mixed; boundary="000000000000c2a02105f6d5f70c" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000c2a02105f6d5f70c Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Mar 8, 2023 at 1:52=E2=80=AFPM Masahiko Sawada wrote: > > On Fri, Mar 3, 2023 at 8:34=E2=80=AFPM Heikki Linnakangas wrote: > > > > On 16/11/2022 06:38, Ian Lawrence Barwick wrote: > > > Thanks for the patch. While reviewing the patch backlog, we have dete= rmined that > > > the latest version of this patch was submitted before meson support w= as > > > implemented, so it should have a "meson.build" file added for conside= ration for > > > inclusion in PostgreSQL 16. > > > > I wanted to do some XID wraparound testing again, to test the 64-bit > > SLRUs patches [1], and revived this. > > Thank you for reviving this thread! > > > > > I took a different approach to consuming the XIDs. Instead of setting > > nextXID directly, bypassing GetNewTransactionId(), this patch introduce= s > > a helper function to call GetNewTransactionId() repeatedly. But because > > that's slow, it does include a shortcut to skip over "uninteresting" > > XIDs. Whenever nextXid is close to an SLRU page boundary or XID > > wraparound, it calls GetNewTransactionId(), and otherwise it bumps up > > nextXid close to the next "interesting" value. That's still a lot slowe= r > > than just setting nextXid, but exercises the code more realistically. > > > > I've written some variant of this helper function many times over the > > years, for ad hoc testing. I'd love to have it permanently in the git t= ree. > > These functions seem to be better than mine. > > > In addition to Masahiko's test for emergency vacuum, this includes two > > other tests. 002_limits.pl tests the "warn limit" and "stop limit" in > > GetNewTransactionId(), and 003_wraparound.pl burns through 10 billion > > transactions in total, exercising XID wraparound in general. > > Unfortunately these tests are pretty slow; the tests run for about 4 > > minutes on my laptop in total, and use about 20 GB of disk space. So > > perhaps these need to be put in a special test suite that's not run as > > part of "check-world". Or perhaps leave out the 003_wraparounds.pl test= , > > that's the slowest of the tests. But I'd love to have these in the git > > tree in some form. > > cbfot reports some failures. The main reason seems that meson.build in > xid_wraparound directory adds the regression tests but the .sql and > .out files are missing in the patch. Perhaps the patch wants to add > only tap tests as Makefile doesn't define REGRESS? > > Even after fixing this issue, CI tests (Cirrus CI) are not happy and > report failures due to a disk full. The size of xid_wraparound test > directory is 105MB out of 262MB: > > % du -sh testrun > 262M testrun > % du -sh testrun/xid_wraparound/ > 105M testrun/xid_wraparound/ > % du -sh testrun/xid_wraparound/* > 460K testrun/xid_wraparound/001_emergency_vacuum > 93M testrun/xid_wraparound/002_limits > 12M testrun/xid_wraparound/003_wraparounds > % ls -lh testrun/xid_wraparound/002_limits/log* > total 93M > -rw-------. 1 masahiko masahiko 93M Mar 7 17:34 002_limits_wraparound.lo= g > -rw-rw-r--. 1 masahiko masahiko 20K Mar 7 17:34 regress_log_002_limits > > The biggest file is the server logs since an autovacuum worker writes > autovacuum logs for every table for every second (autovacuum_naptime > is 1s). Maybe we can set log_autovacuum_min_duration reloption for the > test tables instead of globally enabling it I think it could be acceptable since 002 and 003 tests are executed only when required. And 001 test seems to be able to pass on cfbot but it takes more than 30 sec. In the attached patch, I made these tests optional and these are enabled if envar ENABLE_XID_WRAPAROUND_TESTS is defined (supporting only autoconf). > > The 001 test uses the 2PC transaction that holds locks on tables but > since we can consume xids while the server running, we don't need > that. Instead I think we can keep a transaction open in the background > like 002 test does. Updated in the new patch. Also, I added a check if the failsafe mode is triggered. Regards, -- Masahiko Sawada Amazon Web Services: https://aws.amazon.com --000000000000c2a02105f6d5f70c Content-Type: application/octet-stream; name="v2-0001-Add-tests-for-XID-wraparound.patch" Content-Disposition: attachment; filename="v2-0001-Add-tests-for-XID-wraparound.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lf7ui5fx0 RnJvbSA4NTFiODU2ZmViODI5YzZhMWJlZDA0MWFlYzdmZWJkYzM5MjhmYzA0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5uYWthbmdh c0Bpa2kuZmk+CkRhdGU6IEZyaSwgMyBNYXIgMjAyMyAxMjowMToyOCArMDIwMApTdWJqZWN0OiBb UEFUQ0ggdjJdIEFkZCB0ZXN0cyBmb3IgWElEIHdyYXBhcm91bmQuCgpUaGUgdGVzdCBtb2R1bGUg aW5jbHVkZXMgaGVscGVyIGZ1bmN0aW9ucyB0byBxdWlja2x5IGJ1cm4gdGhyb3VnaCBsb3RzCm9m IFhJRHMuIFRoZXkgYXJlIHVzZWQgaW4gdGhlIHRlc3RzLCBhbmQgYXJlIGFsc28gaGFuZHkgZm9y IG1hbnVhbGx5CnRlc3RpbmcgWElEIHdyYXBhcm91bmQuCgpBdXRob3I6IE1hc2FoaWtvIFNhd2Fk YSwgSGVpa2tpIExpbm5ha2FuZ2FzCkRpc2N1c3Npb246IGh0dHBzOi8vd3d3LnBvc3RncmVzcWwu b3JnL21lc3NhZ2UtaWQvQ0FEMjFBb0RWaGtYcDhIanBGTy1ncDNUZ0w2dENLY1pRTnhuMDRtMDFW QXRjU2ktNXNBJTQwbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxl ICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWls ZCAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy90ZXN0L21vZHVsZXMveGlkX3dyYXBhcm91 bmQvLmdpdGlnbm9yZSAgICB8ICAgNCArCiBzcmMvdGVzdC9tb2R1bGVzL3hpZF93cmFwYXJvdW5k L01ha2VmaWxlICAgICAgfCAgMjggKysrCiBzcmMvdGVzdC9tb2R1bGVzL3hpZF93cmFwYXJvdW5k L1JFQURNRSAgICAgICAgfCAgIDMgKwogc3JjL3Rlc3QvbW9kdWxlcy94aWRfd3JhcGFyb3VuZC9t ZXNvbi5idWlsZCAgIHwgIDQzICsrKysKIC4uLi94aWRfd3JhcGFyb3VuZC90LzAwMV9lbWVyZ2Vu Y3lfdmFjdXVtLnBsICB8IDEyMCArKysrKysrKysrCiAuLi4vbW9kdWxlcy94aWRfd3JhcGFyb3Vu ZC90LzAwMl9saW1pdHMucGwgICAgfCAxMTQgKysrKysrKysrCiAuLi4veGlkX3dyYXBhcm91bmQv dC8wMDNfd3JhcGFyb3VuZHMucGwgICAgICAgfCAgNDYgKysrKwogLi4uL3hpZF93cmFwYXJvdW5k L3hpZF93cmFwYXJvdW5kLS0xLjAuc3FsICAgIHwgIDEyICsKIC4uLi9tb2R1bGVzL3hpZF93cmFw YXJvdW5kL3hpZF93cmFwYXJvdW5kLmMgICB8IDIyMSArKysrKysrKysrKysrKysrKysKIC4uLi94 aWRfd3JhcGFyb3VuZC94aWRfd3JhcGFyb3VuZC5jb250cm9sICAgICB8ICAgNCArCiAxMiBmaWxl cyBjaGFuZ2VkLCA1OTcgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0 L21vZHVsZXMveGlkX3dyYXBhcm91bmQvLmdpdGlnbm9yZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNy Yy90ZXN0L21vZHVsZXMveGlkX3dyYXBhcm91bmQvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBzcmMvdGVzdC9tb2R1bGVzL3hpZF93cmFwYXJvdW5kL1JFQURNRQogY3JlYXRlIG1vZGUgMTAw NjQ0IHNyYy90ZXN0L21vZHVsZXMveGlkX3dyYXBhcm91bmQvbWVzb24uYnVpbGQKIGNyZWF0ZSBt b2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3hpZF93cmFwYXJvdW5kL3QvMDAxX2VtZXJnZW5j eV92YWN1dW0ucGwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3hpZF93cmFw YXJvdW5kL3QvMDAyX2xpbWl0cy5wbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVs ZXMveGlkX3dyYXBhcm91bmQvdC8wMDNfd3JhcGFyb3VuZHMucGwKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBzcmMvdGVzdC9tb2R1bGVzL3hpZF93cmFwYXJvdW5kL3hpZF93cmFwYXJvdW5kLS0xLjAuc3Fs CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy94aWRfd3JhcGFyb3VuZC94aWRf d3JhcGFyb3VuZC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy94aWRfd3Jh cGFyb3VuZC94aWRfd3JhcGFyb3VuZC5jb250cm9sCgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9k dWxlcy9NYWtlZmlsZSBiL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUKaW5kZXggYzYyOWNiZTM4 My4uOTlmNWZhMjNmMSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZQorKysg Yi9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlCkBAIC0xNCw2ICsxNCw3IEBAIFNVQkRJUlMgPSBc CiAJCSAgcGxzYW1wbGUgXAogCQkgIHNuYXBzaG90X3Rvb19vbGQgXAogCQkgIHNwZ2lzdF9uYW1l X29wcyBcCisJCSAgeGlkX3dyYXBhcm91bmQgXAogCQkgIHRlc3RfYmxvb21maWx0ZXIgXAogCQkg IHRlc3RfY29weV9jYWxsYmFja3MgXAogCQkgIHRlc3RfY3VzdG9tX3JtZ3JzIFwKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQgYi9zcmMvdGVzdC9tb2R1bGVzL21lc29u LmJ1aWxkCmluZGV4IDFiYWE2YjU1OGQuLjM5ZGU0M2RlZTMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0 L21vZHVsZXMvbWVzb24uYnVpbGQKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZApA QCAtMTAsNiArMTAsNyBAQCBzdWJkaXIoJ3Bsc2FtcGxlJykKIHN1YmRpcignc25hcHNob3RfdG9v X29sZCcpCiBzdWJkaXIoJ3NwZ2lzdF9uYW1lX29wcycpCiBzdWJkaXIoJ3NzbF9wYXNzcGhyYXNl X2NhbGxiYWNrJykKK3N1YmRpcigneGlkX3dyYXBhcm91bmQnKQogc3ViZGlyKCd0ZXN0X2Jsb29t ZmlsdGVyJykKIHN1YmRpcigndGVzdF9jb3B5X2NhbGxiYWNrcycpCiBzdWJkaXIoJ3Rlc3RfY3Vz dG9tX3JtZ3JzJykKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMveGlkX3dyYXBhcm91bmQv LmdpdGlnbm9yZSBiL3NyYy90ZXN0L21vZHVsZXMveGlkX3dyYXBhcm91bmQvLmdpdGlnbm9yZQpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi41ZGNiM2ZmOTcyCi0tLSAvZGV2 L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy94aWRfd3JhcGFyb3VuZC8uZ2l0aWdub3JlCkBA IC0wLDAgKzEsNCBAQAorIyBHZW5lcmF0ZWQgc3ViZGlyZWN0b3JpZXMKKy9sb2cvCisvcmVzdWx0 cy8KKy90bXBfY2hlY2svCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3hpZF93cmFwYXJv dW5kL01ha2VmaWxlIGIvc3JjL3Rlc3QvbW9kdWxlcy94aWRfd3JhcGFyb3VuZC9NYWtlZmlsZQpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5mYzVlYWQ2Y2M1Ci0tLSAvZGV2 L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy94aWRfd3JhcGFyb3VuZC9NYWtlZmlsZQpAQCAt MCwwICsxLDI4IEBACisjIHNyYy90ZXN0L21vZHVsZXMveGlkX3dyYXBhcm91bmQvTWFrZWZpbGUK KworTU9EVUxFX2JpZyA9IHhpZF93cmFwYXJvdW5kCitPQkpTID0gXAorCSQoV0lOMzJSRVMpIFwK Kwl4aWRfd3JhcGFyb3VuZC5vCitQR0ZJTEVERVNDID0gInhpZF93cmFwYXJvdW5kIC0gdGVzdHMg Zm9yIFhJRCB3cmFwYXJvdW5kIgorCitFWFRFTlNJT04gPSB4aWRfd3JhcGFyb3VuZAorREFUQSA9 IHhpZF93cmFwYXJvdW5kLS0xLjAuc3FsCisKKyMgRGlzYWJsZWQgYnkgZGVmYXVsdCBiZWNhdXNl IHRoZXNlIHRlc3RzIGNvdWxkIHRha2UgYSBsb25nIHRpbWUsCisjIHdoaWNoIHR5cGljYWwgaW5z dGFsbGNoZWNrIHVzZXJzIGNhbm5vdCB0b2xlcmF0ZSAoZS5nLiBidWlsZGZhcm0KKyMgY2xpZW50 cykuCitpZmRlZiBFTkFCTEVfWElEX1dSQVBBUk9VTkRfVEVTVFMKK1RBUF9URVNUUyA9IDEKK2Vu ZGlmCisKK2lmZGVmIFVTRV9QR1hTCitQR19DT05GSUcgPSBwZ19jb25maWcKK1BHWFMgOj0gJChz aGVsbCAkKFBHX0NPTkZJRykgLS1wZ3hzKQoraW5jbHVkZSAkKFBHWFMpCitlbHNlCitzdWJkaXIg PSBzcmMvdGVzdC9tb2R1bGVzL3hpZF93cmFwYXJvdW5kCit0b3BfYnVpbGRkaXIgPSAuLi8uLi8u Li8uLgoraW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAoraW5jbHVk ZSAkKHRvcF9zcmNkaXIpL2NvbnRyaWIvY29udHJpYi1nbG9iYWwubWsKK2VuZGlmCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9tb2R1bGVzL3hpZF93cmFwYXJvdW5kL1JFQURNRSBiL3NyYy90ZXN0L21v ZHVsZXMveGlkX3dyYXBhcm91bmQvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAuLjNhYWI0NjRkZWMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVz L3hpZF93cmFwYXJvdW5kL1JFQURNRQpAQCAtMCwwICsxLDMgQEAKK1RoaXMgbW9kdWxlIGNvbnRh aW5zIHRlc3RzIGZvciBYSUQgd3JhcGFyb3VuZC4gVGhlIHRlc3RzIHVzZSB0d28KK2hlbHBlciBm dW5jdGlvbnMgdG8gcXVpY2tseSBjb25zdW1lIGxvdHMgb2YgWElEcywgdG8gcmVhY2ggWElECit3 cmFwYXJvdW5kIGZhc3Rlci4KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMveGlkX3dyYXBh cm91bmQvbWVzb24uYnVpbGQgYi9zcmMvdGVzdC9tb2R1bGVzL3hpZF93cmFwYXJvdW5kL21lc29u LmJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmJkZDU1ZjIyYzQK LS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3hpZF93cmFwYXJvdW5kL21lc29u LmJ1aWxkCkBAIC0wLDAgKzEsNDMgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDIyLTIwMjMsIFBvc3Rn cmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKKyMgRklYTUU6IHByZXZlbnQgaW5zdGFs bCBkdXJpbmcgbWFpbiBpbnN0YWxsLCBidXQgbm90IGR1cmluZyB0ZXN0IDovCisKK3hpZF93cmFw YXJvdW5kX3NvdXJjZXMgPSBmaWxlcygKKyAgJ3hpZF93cmFwYXJvdW5kLmMnLAorKQorCitpZiBo b3N0X3N5c3RlbSA9PSAnd2luZG93cycKKyAgeGlkX3dyYXBhcm91bmRfc291cmNlcyArPSByY19s aWJfZ2VuLnByb2Nlc3Mod2luMzJ2ZXJfcmMsIGV4dHJhX2FyZ3M6IFsKKyAgICAnLS1OQU1FJywg J3hpZF93cmFwYXJvdW5kJywKKyAgICAnLS1GSUxFREVTQycsICd4aWRfd3JhcGFyb3VuZCAtIHRl c3RzIGZvciBYSUQgd3JhcGFyb3VuZCcsXSkKK2VuZGlmCisKK3hpZF93cmFwYXJvdW5kID0gc2hh cmVkX21vZHVsZSgneGlkX3dyYXBhcm91bmQnLAorICB4aWRfd3JhcGFyb3VuZF9zb3VyY2VzLAor ICBrd2FyZ3M6IHBnX21vZF9hcmdzLAorKQordGVzdHByZXBfdGFyZ2V0cyArPSB4aWRfd3JhcGFy b3VuZAorCitpbnN0YWxsX2RhdGEoCisgICd4aWRfd3JhcGFyb3VuZC5jb250cm9sJywKKyAgJ3hp ZF93cmFwYXJvdW5kLS0xLjAuc3FsJywKKyAga3dhcmdzOiBjb250cmliX2RhdGFfYXJncywKKykK KworIyBEaXNhYmxlZCBieSBkZWZhdWx0IGJlY2F1c2UgdGhlc2UgdGVzdCBjb3VsZCB0YWtlIGEg bG9uZyB0aW1lLAorIyB3aGljaCB0eXBpY2FsIGluc3RhbGxjaGVjayB1c2VycyBjYW5ub3QgdG9s ZXJhdGUgKGUuZy4gYnVpbGRmYXJtCisjIGNsaWVudHMpLgoraWYgZmFsc2UKKyAgdGVzdHMgKz0g eworICAgICduYW1lJzogJ3hpZF93cmFwYXJvdW5kJywKKyAgICAnc2QnOiBtZXNvbi5jdXJyZW50 X3NvdXJjZV9kaXIoKSwKKyAgICAnYmQnOiBtZXNvbi5jdXJyZW50X2J1aWxkX2RpcigpLAorICAg ICd0YXAnOiB7CisgICAgICAndGVzdHMnOiBbCisgICAgICAgICd0LzAwMV9lbWVyZ2VuY3lfdmFj dXVtLnBsJywKKyAgICAgICAgJ3QvMDAyX2xpbWl0cy5wbCcsCisgICAgICAgICd0LzAwM193cmFw YXJvdW5kcy5wbCcsCisgICAgICBdLAorICAgIH0sCisgIH0KK2VuZGlmCmRpZmYgLS1naXQgYS9z cmMvdGVzdC9tb2R1bGVzL3hpZF93cmFwYXJvdW5kL3QvMDAxX2VtZXJnZW5jeV92YWN1dW0ucGwg Yi9zcmMvdGVzdC9tb2R1bGVzL3hpZF93cmFwYXJvdW5kL3QvMDAxX2VtZXJnZW5jeV92YWN1dW0u cGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uYmQ5YmI0Yjk4YwotLS0g L2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMveGlkX3dyYXBhcm91bmQvdC8wMDFfZW1l cmdlbmN5X3ZhY3V1bS5wbApAQCAtMCwwICsxLDEyMCBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjMs IFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKKyMgVGVzdCB3cmFwYXJvdW5k IGVtZXJnZW5jeSBhdXRvdmFjdXVtLgordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBQ b3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwor dXNlIFRlc3Q6Ok1vcmU7CisKKyMgSW5pdGlhbGl6ZSBub2RlCitteSAkbm9kZSA9IFBvc3RncmVT UUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnbWFpbicpOworCiskbm9kZS0+aW5pdDsKKyRub2RlLT5h cHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgcXFbCithdXRvdmFjdXVtID0gb2ZmICMgcnVu IGF1dG92YWN1dW0gb25seSB3aGVuIHRvIGFudGkgd3JhcGFyb3VuZAorYXV0b3ZhY3V1bV9uYXB0 aW1lID0gMXMKKyMgc28gaXQncyBlYXNpZXIgdG8gdmVyaWZ5IHRoZSBvcmRlciBvZiBvcGVyYXRp b25zCithdXRvdmFjdXVtX21heF93b3JrZXJzID0gMQorbG9nX2F1dG92YWN1dW1fbWluX2R1cmF0 aW9uID0gMAorXSk7Ciskbm9kZS0+c3RhcnQ7Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICdDUkVBVEUgRVhURU5TSU9OIHhpZF93cmFwYXJvdW5kJyk7CisKKyMgQ3JlYXRlIHRhYmxlcyBm b3IgYSBmZXcgZGlmZmVyZW50IHRlc3Qgc2NlbmFyaW9zCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsIHFxWworQ1JFQVRFIFRBQkxFIGxhcmdlKGlkIHNlcmlhbCBwcmltYXJ5IGtleSwgZGF0 YSB0ZXh0LCBmaWxsZXIgdGV4dCBkZWZhdWx0IHJlcGVhdChyYW5kb20oKTo6dGV4dCwgMTApKTsK K0lOU0VSVCBJTlRPIGxhcmdlKGRhdGEpIFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXMoMSwzMDAwMCk7 CisKK0NSRUFURSBUQUJMRSBsYXJnZV90cnVuYyhpZCBzZXJpYWwgcHJpbWFyeSBrZXksIGRhdGEg dGV4dCwgZmlsbGVyIHRleHQgZGVmYXVsdCByZXBlYXQocmFuZG9tKCk6OnRleHQsIDEwKSk7CitJ TlNFUlQgSU5UTyBsYXJnZV90cnVuYyhkYXRhKSBTRUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEsMzAw MDApOworCitDUkVBVEUgVEFCTEUgc21hbGwoaWQgc2VyaWFsIHByaW1hcnkga2V5LCBkYXRhIHRl eHQsIGZpbGxlciB0ZXh0IGRlZmF1bHQgcmVwZWF0KHJhbmRvbSgpOjp0ZXh0LCAxMCkpOworSU5T RVJUIElOVE8gc21hbGwoZGF0YSkgU0VMRUNUIGdlbmVyYXRlX3NlcmllcygxLDE1MDAwKTsKKwor Q1JFQVRFIFRBQkxFIHNtYWxsX3RydW5jKGlkIHNlcmlhbCBwcmltYXJ5IGtleSwgZGF0YSB0ZXh0 LCBmaWxsZXIgdGV4dCBkZWZhdWx0IHJlcGVhdChyYW5kb20oKTo6dGV4dCwgMTApKTsKK0lOU0VS VCBJTlRPIHNtYWxsX3RydW5jKGRhdGEpIFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXMoMSwxNTAwMCk7 CisKK0NSRUFURSBUQUJMRSBhdXRvdmFjdXVtX2Rpc2FibGVkKGlkIHNlcmlhbCBwcmltYXJ5IGtl eSwgZGF0YSB0ZXh0KSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQ9ZmFsc2UpOworSU5TRVJUIElO VE8gYXV0b3ZhY3V1bV9kaXNhYmxlZChkYXRhKSBTRUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEsMTAw MCk7CitdKTsKKworIyBTdGFydCBhIGJhY2tncm91bmQgc2Vzc2lvbiwgd2hpY2ggaG9sZHMgYSB0 cmFuc2FjdGlvbiBvcGVuLCBwcmV2ZW50aW5nCisjIGF1dG92YWN1dW0gZnJvbSBhZHZhbmNpbmcg cmVsZnJvemVueGlkIGFuZCBkYXRmcm96ZW54aWQuCitteSAkaW4gID0gJyc7CitteSAkb3V0ID0g Jyc7CitteSAkdGltZW91dCA9IElQQzo6UnVuOjp0aW1lcigkUG9zdGdyZVNRTDo6VGVzdDo6VXRp bHM6OnRpbWVvdXRfZGVmYXVsdCk7CitteSAkYmFja2dyb3VuZF9wc3FsID0gJG5vZGUtPmJhY2tn cm91bmRfcHNxbCgncG9zdGdyZXMnLCBcJGluLCBcJG91dCwgJHRpbWVvdXQpOworJGluIC49IHF7 CisJQkVHSU47CisJREVMRVRFIEZST00gbGFyZ2UgV0hFUkUgaWQgJSAyID0gMDsKKwlERUxFVEUg RlJPTSBsYXJnZV90cnVuYyBXSEVSRSBpZCA+IDEwMDAwOworCURFTEVURSBGUk9NIHNtYWxsIFdI RVJFIGlkICUgMiA9IDA7CisJREVMRVRFIEZST00gc21hbGxfdHJ1bmMgV0hFUkUgaWQgPiAxMDAw OworCURFTEVURSBGUk9NIGF1dG92YWN1dW1fZGlzYWJsZWQgV0hFUkUgaWQgJSAyID0gMDsKK307 CiskYmFja2dyb3VuZF9wc3FsLT5wdW1wX25iOworCisjIENvbnN1bWUgMiBiaWxsaW9uIFhJRHMs IHRvIGdldCB1cyB2ZXJ5IGNsb3NlIHRvIHdyYXBhcm91bmQKKyRub2RlLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgcXFbU0VMRUNUIGNvbnN1bWVfeGlkc191bnRpbCgnMjAwMDAwMDAwMCc6OmJpZ2lu dCldKTsKKworIyBNYWtlIHN1cmUgdGhlIGxhdGVzdCBjb21wbGV0ZWQgWElEIGlzIGFkdmFuY2Vk Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxW0lOU0VSVCBJTlRPIHNtYWxsKGRhdGEp IFNFTEVDVCAxXSk7CisKKyMgQ2hlY2sgdGhhdCBhbGwgZGF0YWJhc2VzIGJlY2FtZSBvbGQgZW5v dWdoIHRvIHRyaWdnZXIgZmFpbHNhZmUuCitteSAkcmV0ID0gJG5vZGUtPnNhZmVfcHNxbCgncG9z dGdyZXMnLAorCQkJICAgcXFbCitTRUxFQ1QgZGF0bmFtZSwKKyAgICAgICBhZ2UoZGF0ZnJvemVu eGlkKSA+IGN1cnJlbnRfc2V0dGluZygndmFjdXVtX2ZhaWxzYWZlX2FnZScpOjppbnQgYXMgb2xk CitGUk9NIHBnX2RhdGFiYXNlIE9SREVSIEJZIDEKK10pOworaXMoJHJldCwgInBvc3RncmVzfHQK K3RlbXBsYXRlMHx0Cit0ZW1wbGF0ZTF8dCIsICJhbGwgdGFibGVzIGJlY2FtZSBvbGQiKTsKKwor bXkgJGxvZ19vZmZzZXQgPSAtcyAkbm9kZS0+bG9nZmlsZTsKKworIyBGaW5pc2ggdGhlIG9sZCB0 cmFuc2FjdGlvbiwgdG8gYWxsb3cgdmFjdXVtIGZyZWV6aW5nIHRvIGFkdmFuY2UKKyMgcmVsZnJv emVueGlkIGFuZCBkYXRmcm96ZW54aWQgYWdhaW4uCiskaW4gLj0gcXsKK0NPTU1JVDsKK1xxCit9 OworJGJhY2tncm91bmRfcHNxbC0+ZmluaXNoOworCisjIFdhaXQgdW50aWwgYXV0b3ZhY3V1bSBw cm9jZXNzZWQgYWxsIHRhYmxlcyBhbmQgYWR2YW5jZWQgdGhlCisjIHN5c3RlbS13aWRlIG9sZGVz dC1YSUQuCiskbm9kZS0+cG9sbF9xdWVyeV91bnRpbCgncG9zdGdyZXMnLAorCQkJcXFbCitTRUxF Q1QgTk9UIEVYSVNUUyAoCisJU0VMRUNUICoKKwlGUk9NIHBnX2RhdGFiYXNlCisJV0hFUkUgYWdl KGRhdGZyb3plbnhpZCkgPiBjdXJyZW50X3NldHRpbmcoJ2F1dG92YWN1dW1fZnJlZXplX21heF9h Z2UnKTo6aW50KQorXSkgb3IgZGllICJ0aW1lb3V0IHdhaXRpbmcgZm9yIGFsbCBkYXRhYmFzZXMg dG8gYmUgdmFjdXVtZWQiOworCisjIENoZWNrIGlmIHRoZXNlIHRhYmxlcyBhcmUgdmFjdXVtZWQu CiskcmV0ID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcVsKK1NFTEVDVCByZWxuYW1l LCBhZ2UocmVsZnJvemVueGlkKSA+IGN1cnJlbnRfc2V0dGluZygnYXV0b3ZhY3V1bV9mcmVlemVf bWF4X2FnZScpOjppbnQKK0ZST00gcGdfY2xhc3MKK1dIRVJFIHJlbG5hbWUgSU4gKCdsYXJnZScs ICdsYXJnZV90cnVuYycsICdzbWFsbCcsICdzbWFsbF90cnVuYycsICdhdXRvdmFjdXVtX2Rpc2Fi bGVkJykKK09SREVSIEJZIDEKK10pOworCitpcygkcmV0LCAiYXV0b3ZhY3V1bV9kaXNhYmxlZHxm CitsYXJnZXxmCitsYXJnZV90cnVuY3xmCitzbWFsbHxmCitzbWFsbF90cnVuY3xmIiwgImFsbCB0 YWJsZXMgYXJlIHZhY3V1bWVkIik7CisKKyMgQ2hlY2sgaWYgdmFjdXVtIGZhaWxzYWZlIHdhcyB0 cmlnZ2VyZWQgZm9yIGVhY2ggdGFibGUuCitteSAkbG9nX2NvbnRlbnRzID0gc2x1cnBfZmlsZSgk bm9kZS0+bG9nZmlsZSwgJGxvZ19vZmZzZXQpOworZm9yZWFjaCBteSAkdGFibGVuYW1lICgnbGFy Z2UnLCAnbGFyZ2VfdHJ1bmMnLCAnc21hbGwnLCAnc21hbGxfdHJ1bmMnLCAnYXV0b3ZhY3V1bV9k aXNhYmxlZCcpCit7CisgICAgbGlrZSgKKwkkbG9nX2NvbnRlbnRzLAorCXFyL2J5cGFzc2luZyBu b25lc3NlbnRpYWwgbWFpbnRlbmFuY2Ugb2YgdGFibGUgInBvc3RncmVzLnB1YmxpYy4kdGFibGVu YW1lIiBhcyBhIGZhaWxzYWZlIGFmdGVyIFxkKyBpbmRleCBzY2Fucy8sCisJImZhaWxzYWZlIHZh Y3V1bSB0cmlnZ2VyZWQgZm9yICR0YWJsZW5hbWUiKTsKK30KKworJG5vZGUtPnN0b3A7Citkb25l X3Rlc3RpbmcoKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMveGlkX3dyYXBhcm91bmQv dC8wMDJfbGltaXRzLnBsIGIvc3JjL3Rlc3QvbW9kdWxlcy94aWRfd3JhcGFyb3VuZC90LzAwMl9s aW1pdHMucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZmYyNzQzNzQ2 YgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMveGlkX3dyYXBhcm91bmQvdC8w MDJfbGltaXRzLnBsCkBAIC0wLDAgKzEsMTE0IEBACisjIENvcHlyaWdodCAoYykgMjAyMywgUG9z dGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyMKKyMgVGVzdCBYSUQgd3JhcGFyb3Vu ZCBsaW1pdHMuCisjCisjIFdoZW4geW91IGdldCBjbG9zZSB0byBYSUQgd3JhcGFyb3VuZCwgeW91 IHN0YXJ0IHRvIGdldCB3YXJuaW5ncywgYW5kCisjIHdoZW4geW91IGdldCBldmVuIGNsb3Nlciwg dGhlIHN5c3RlbSByZWZ1c2VzIHRvIGFzc2lnbiBhbnkgbW9yZSBYSURzCisjIHVudGlsIHRoZSBv bGRlc3QgZGF0YWJhc2VzIGhhdmUgYmVlbiB2YWN1dW1lZCBhbmQgZGF0ZnJvemVueGlkIGhhcwor IyBiZWVuIGFkdmFuY2VkLgorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIFBvc3Rn cmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2Ug VGVzdDo6TW9yZTsKK3VzZSBUaW1lOjpIaVJlcyBxdyh1c2xlZXApOworCitteSAkcmV0OworCisj IEluaXRpYWxpemUgbm9kZQorbXkgJG5vZGUgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5u ZXcoJ3dyYXBhcm91bmQnKTsKKworJG5vZGUtPmluaXQ7Ciskbm9kZS0+YXBwZW5kX2NvbmYoJ3Bv c3RncmVzcWwuY29uZicsIHFxWworYXV0b3ZhY3V1bSA9IG9mZiAjIHJ1biBhdXRvdmFjdXVtIG9u bHkgdG8gcHJldmVudCB3cmFwYXJvdW5kCithdXRvdmFjdXVtX25hcHRpbWUgPSAxcworbG9nX2F1 dG92YWN1dW1fbWluX2R1cmF0aW9uID0gMAorXSk7Ciskbm9kZS0+c3RhcnQ7Ciskbm9kZS0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICdDUkVBVEUgRVhURU5TSU9OIHhpZF93cmFwYXJvdW5kJyk7CisK KyMgQ3JlYXRlIGEgdGVzdCB0YWJsZQorJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcVsK K0NSRUFURSBUQUJMRSB3cmFwYXJvdW5kdGVzdCh0IHRleHQpOworSU5TRVJUIElOVE8gd3JhcGFy b3VuZHRlc3QgVkFMVUVTICgnc3RhcnQnKTsKK10pOworCisjIFN0YXJ0IGEgYmFja2dyb3VuZCBz ZXNzaW9uLCB3aGljaCBob2xkcyBhIHRyYW5zYWN0aW9uIG9wZW4sIHByZXZlbnRpbmcKKyMgYXV0 b3ZhY3V1bSBmcm9tIGFkdmFuY2luZyByZWxmcm96ZW54aWQgYW5kIGRhdGZyb3plbnhpZC4KK215 ICRpbiAgPSAnJzsKK215ICRvdXQgPSAnJzsKK215ICR0aW1lb3V0ID0gSVBDOjpSdW46OnRpbWVy KCRQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6dGltZW91dF9kZWZhdWx0KTsKK215ICRiYWNrZ3Jv dW5kX3BzcWwgPSAkbm9kZS0+YmFja2dyb3VuZF9wc3FsKCdwb3N0Z3JlcycsIFwkaW4sIFwkb3V0 LCAkdGltZW91dCk7CiskaW4gLj0gcXsKKwlCRUdJTjsKKwlJTlNFUlQgSU5UTyB3cmFwYXJvdW5k dGVzdCBWQUxVRVMgKCdvbGR4YWN0Jyk7Cit9OworJGJhY2tncm91bmRfcHNxbC0+cHVtcF9uYjsK KworIyBDb25zdW1lIDIgYmlsbGlvbiB0cmFuc2FjdGlvbnMsIHRvIGdldCBjbG9zZSB0byB3cmFw YXJvdW5kCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxW1NFTEVDVCBjb25zdW1lX3hp ZHMoMTAwMDAwMDAwMCldKTsKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXFbSU5TRVJU IElOVE8gd3JhcGFyb3VuZHRlc3QgVkFMVUVTICgnYWZ0ZXIgMSBiaWxsaW9uJyldKTsKKworJG5v ZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcVtTRUxFQ1QgY29uc3VtZV94aWRzKDEwMDAwMDAw MDApXSk7Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxW0lOU0VSVCBJTlRPIHdyYXBh cm91bmR0ZXN0IFZBTFVFUyAoJ2FmdGVyIDIgYmlsbGlvbicpXSk7CisKKyMgV2UgYXJlIG5vdyBq dXN0IHVuZGVyIDE1MCBtaWxsaW9uIFhJRHMgYXdheSBmcm9tIHdyYXBhcm91bmQuCisjIENvbnRp bnVlIGNvbnN1bWluZyBYSURzLCBpbiBiYXRjaGVzIG9mIDEwIG1pbGxpb24sIHVudGlsIHdlIGdl dAorIyB0aGUgd2FybmluZzoKKyMKKyMgIFdBUk5JTkc6ICBkYXRhYmFzZSAicG9zdGdyZXMiIG11 c3QgYmUgdmFjdXVtZWQgd2l0aGluIDMwMDAwMjQgdHJhbnNhY3Rpb25zCisjICBISU5UOiAgVG8g YXZvaWQgYSBkYXRhYmFzZSBzaHV0ZG93biwgZXhlY3V0ZSBhIGRhdGFiYXNlLXdpZGUgVkFDVVVN IGluIHRoYXQgZGF0YWJhc2UuCisjICBZb3UgbWlnaHQgYWxzbyBuZWVkIHRvIGNvbW1pdCBvciBy b2xsIGJhY2sgb2xkIHByZXBhcmVkIHRyYW5zYWN0aW9ucywgb3IgZHJvcCBzdGFsZSByZXBsaWNh dGlvbiBzbG90cy4KK215ICRzdGRlcnI7CitteSAkd2Fybl9saW1pdCA9IDA7Citmb3IgbXkgJGkg KDEgLi4gMTUpCit7CisJJG5vZGUtPnBzcWwoJ3Bvc3RncmVzJywgcXFbU0VMRUNUIGNvbnN1bWVf eGlkcygxMDAwMDAwMCldLCBzdGRlcnIgPT4gXCRzdGRlcnIsIG9uX2Vycm9yX2RpZSA9PiAxKTsK KworCWlmICgkc3RkZXJyID1+IC9XQVJOSU5HOiAgZGF0YWJhc2UgInBvc3RncmVzIiBtdXN0IGJl IHZhY3V1bWVkIHdpdGhpbiBbMC05XSsgdHJhbnNhY3Rpb25zLykKKwl7CisJCSMgUmVhY2hlZCB0 aGUgd2Fybi1saW1pdAorCQkkd2Fybl9saW1pdCA9IDE7CisJCWxhc3Q7CisJfQorfQorb2soJHdh cm5fbGltaXQgPT0gMSwgIndhcm4tbGltaXQgcmVhY2hlZCIpOworCisjIFdlIGNhbiBzdGlsbCBJ TlNFUlQsIGRlc3BpdGUgdGhlIHdhcm5pbmdzLgorJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMn LCBxcVtJTlNFUlQgSU5UTyB3cmFwYXJvdW5kdGVzdCBWQUxVRVMgKCdyZWFjaGVkIHdhcm4tbGlt aXQnKV0pOworCisjIEtlZXAgZ29pbmcuIFdlJ2xsIGhpdCB0aGUgaGFyZCAic3RvcCIgbGltaXQu CiskcmV0ID0gJG5vZGUtPnBzcWwoJ3Bvc3RncmVzJywgcXFbU0VMRUNUIGNvbnN1bWVfeGlkcygx MDAwMDAwMDApXSwgc3RkZXJyID0+IFwkc3RkZXJyKTsKK2xpa2UoJHN0ZGVyciwgcXIvRVJST1I6 ICBkYXRhYmFzZSBpcyBub3QgYWNjZXB0aW5nIGNvbW1hbmRzIHRvIGF2b2lkIHdyYXBhcm91bmQg ZGF0YSBsb3NzLywgInN0b3AtbGltaXQiKTsKKworIyBGaW5pc2ggdGhlIG9sZCB0cmFuc2FjdGlv biwgdG8gYWxsb3cgdmFjdXVtIGZyZWV6aW5nIHRvIGFkdmFuY2UKKyMgcmVsZnJvemVueGlkIGFu ZCBkYXRmcm96ZW54aWQgYWdhaW4uCiskaW4gLj0gcXsKK0NPTU1JVDsKK1xxCit9OworJGJhY2tn cm91bmRfcHNxbC0+ZmluaXNoOworCisjIFZBQ1VVTSwgdG8gZnJlZXplIHRoZSB0YWJsZXMgYW5k IGFkdmFuY2UgZGF0ZnJvemVueGlkLgorIworIyBBdXRvdmFjdXVtIGRvZXMgdGhpcyBmb3IgdGhl IG90aGVyIGRhdGFiYXNlcywgYW5kIHdvdWxkIGRvIGl0IGZvcgorIyAncG9zdGdyZXMnIHRvbywg YnV0IGxldCdzIHRlc3QgbWFudWFsIFZBQ1VVTS4KKyMKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgJ1ZBQ1VVTScpOworCisjIFdhaXQgdW50aWwgYXV0b3ZhY3V1bSBoYXMgcHJvY2Vzc2Vk IHRoZSBvdGhlciBkYXRhYmFzZXMgYW5kIGFkdmFuY2VkCisjIHRoZSBzeXN0ZW0td2lkZSBvbGRl c3QtWElELgorJHJldCA9ICRub2RlLT5wb2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsIHFxW0lO U0VSVCBJTlRPIHdyYXBhcm91bmR0ZXN0IFZBTFVFUyAoJ2FmdGVyIFZBQ1VVTScpXSwgJ0lOU0VS VCAwIDEnKTsKKworIyBDaGVjayB0aGUgdGFibGUgY29udGVudHMKKyRyZXQgPSAkbm9kZS0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsIHFxW1NFTEVDVCAqIGZyb20gd3JhcGFyb3VuZHRlc3RdKTsKK2lz KCRyZXQsICJzdGFydAorb2xkeGFjdAorYWZ0ZXIgMSBiaWxsaW9uCithZnRlciAyIGJpbGxpb24K K3JlYWNoZWQgd2Fybi1saW1pdAorYWZ0ZXIgVkFDVVVNIik7CisKKyRub2RlLT5zdG9wOworZG9u ZV90ZXN0aW5nKCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3hpZF93cmFwYXJvdW5k L3QvMDAzX3dyYXBhcm91bmRzLnBsIGIvc3JjL3Rlc3QvbW9kdWxlcy94aWRfd3JhcGFyb3VuZC90 LzAwM193cmFwYXJvdW5kcy5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw Li5lNzlhZGJkMTJkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy94aWRfd3Jh cGFyb3VuZC90LzAwM193cmFwYXJvdW5kcy5wbApAQCAtMCwwICsxLDQ2IEBACisjIENvcHlyaWdo dCAoYykgMjAyMywgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyMKKyMgQ29u c3VtZSBhIGxvdCBvZiBYSURzLCB3cmFwcGluZyBhcm91bmQgYSBmZXcgdGltZXMuCisjCisKK3Vz ZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsK K3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOwordXNlIFRpbWU6 OkhpUmVzIHF3KHVzbGVlcCk7CisKKyMgSW5pdGlhbGl6ZSBub2RlCitteSAkbm9kZSA9IFBvc3Rn cmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnd3JhcGFyb3VuZCcpOworCiskbm9kZS0+aW5pdDsK KyRub2RlLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgcXFbCithdXRvdmFjdXVtID0g b2ZmICMgcnVuIGF1dG92YWN1dW0gb25seSB3aGVuIHRvIGFudGkgd3JhcGFyb3VuZAorYXV0b3Zh Y3V1bV9uYXB0aW1lID0gMXMKKyMgc28gaXQncyBlYXNpZXIgdG8gdmVyaWZ5IHRoZSBvcmRlciBv ZiBvcGVyYXRpb25zCithdXRvdmFjdXVtX21heF93b3JrZXJzID0gMQorbG9nX2F1dG92YWN1dW1f bWluX2R1cmF0aW9uID0gMAorXSk7Ciskbm9kZS0+c3RhcnQ7Ciskbm9kZS0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICdDUkVBVEUgRVhURU5TSU9OIHhpZF93cmFwYXJvdW5kJyk7CisKKyMgQ3JlYXRl IGEgdGVzdCB0YWJsZQorJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcVsKK0NSRUFURSBU QUJMRSB3cmFwYXJvdW5kdGVzdCh0IHRleHQpOworSU5TRVJUIElOVE8gd3JhcGFyb3VuZHRlc3Qg VkFMVUVTICgnYmVnaW5uaW5nJyk7CitdKTsKKworIyBCdXJuIHRocm91Z2ggMTAgYmlsbGlvbiB0 cmFuc2FjdGlvbnMgaW4gdG90YWwsIGluIGJhdGNoZXMgb2YgMTAwIG1pbGxpb24uCitteSAkcmV0 OworZm9yIG15ICRpICgxIC4uIDEwMCkKK3sKKwkkcmV0ID0gJG5vZGUtPnNhZmVfcHNxbCgncG9z dGdyZXMnLCBxcVtTRUxFQ1QgY29uc3VtZV94aWRzKDEwMDAwMDAwMCldKTsKKwkkcmV0ID0gJG5v ZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcVtJTlNFUlQgSU5UTyB3cmFwYXJvdW5kdGVzdCBW QUxVRVMgKCdhZnRlciAkaSBiYXRjaGVzJyldKTsKK30KKworJHJldCA9ICRub2RlLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgcXFbU0VMRUNUIENPVU5UKCopIEZST00gd3JhcGFyb3VuZHRlc3RdKTsK K2lzKCRyZXQsICIxMDEiKTsKKworJG5vZGUtPnN0b3A7CisKK2RvbmVfdGVzdGluZygpOwpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy94aWRfd3JhcGFyb3VuZC94aWRfd3JhcGFyb3VuZC0t MS4wLnNxbCBiL3NyYy90ZXN0L21vZHVsZXMveGlkX3dyYXBhcm91bmQveGlkX3dyYXBhcm91bmQt LTEuMC5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZjU1NzdhZGZk YgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMveGlkX3dyYXBhcm91bmQveGlk X3dyYXBhcm91bmQtLTEuMC5zcWwKQEAgLTAsMCArMSwxMiBAQAorLyogc3JjL3Rlc3QvbW9kdWxl cy94aWRfd3JhcGFyb3VuZC94aWRfd3JhcGFyb3VuZC0tMS4wLnNxbCAqLworCistLSBjb21wbGFp biBpZiBzY3JpcHQgaXMgc291cmNlZCBpbiBwc3FsLCByYXRoZXIgdGhhbiB2aWEgQ1JFQVRFIEVY VEVOU0lPTgorXGVjaG8gVXNlICJDUkVBVEUgRVhURU5TSU9OIHhpZF93cmFwYXJvdW5kIiB0byBs b2FkIHRoaXMgZmlsZS4gXHF1aXQKKworQ1JFQVRFIEZVTkNUSU9OIGNvbnN1bWVfeGlkcyhiaWdp bnQpCitSRVRVUk5TIGJpZ2ludCBJTU1VVEFCTEUgUEFSQUxMRUwgU0FGRSBTVFJJQ1QKK0FTICdN T0RVTEVfUEFUSE5BTUUnIExBTkdVQUdFIEM7CisKK0NSRUFURSBGVU5DVElPTiBjb25zdW1lX3hp ZHNfdW50aWwoYmlnaW50KQorUkVUVVJOUyBiaWdpbnQgSU1NVVRBQkxFIFBBUkFMTEVMIFNBRkUg U1RSSUNUCitBUyAnTU9EVUxFX1BBVEhOQU1FJyBMQU5HVUFHRSBDOwpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvbW9kdWxlcy94aWRfd3JhcGFyb3VuZC94aWRfd3JhcGFyb3VuZC5jIGIvc3JjL3Rlc3Qv bW9kdWxlcy94aWRfd3JhcGFyb3VuZC94aWRfd3JhcGFyb3VuZC5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAuLmM5ZDYwMzRiNTUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMv dGVzdC9tb2R1bGVzL3hpZF93cmFwYXJvdW5kL3hpZF93cmFwYXJvdW5kLmMKQEAgLTAsMCArMSwy MjEgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiB4aWRfd3JhcGFyb3VuZC5jCisgKgkJ VXRpbGl0aWVzIGZvciB0ZXN0aW5nIFhJRCB3cmFwYXJvdW5kCisgKgorICoKKyAqIFBvcnRpb25z IENvcHlyaWdodCAoYykgMTk5Ni0yMDIzLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBH cm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2 ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJCXNyYy90ZXN0 L21vZHVsZXMveGlkX3dyYXBhcm91bmQveGlkX3dyYXBhcm91bmQuYworICoKKyAqIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJhY2Nlc3Mv dHJhbnNhbS5oIgorI2luY2x1ZGUgImFjY2Vzcy94YWN0LmgiCisjaW5jbHVkZSAiZm1nci5oIgor I2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgInN0b3JhZ2UvbHdsb2NrLmgiCisjaW5j bHVkZSAic3RvcmFnZS9wcm9jLmgiCisKK1BHX01PRFVMRV9NQUdJQzsKKworc3RhdGljIGludDY0 IGNvbnN1bWVfeGlkc19zaG9ydGN1dCh2b2lkKTsKK3N0YXRpYyBGdWxsVHJhbnNhY3Rpb25JZCBj b25zdW1lX3hpZHNfY29tbW9uKEZ1bGxUcmFuc2FjdGlvbklkIHVudGlseGlkLCB1aW50NjQgbnhp ZHMpOworCisvKgorICogQ29uc3VtZSB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBYSURzLgorICov CitQR19GVU5DVElPTl9JTkZPX1YxKGNvbnN1bWVfeGlkcyk7CitEYXR1bQorY29uc3VtZV94aWRz KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJaW50NjQJCW54aWRzID0gUEdfR0VUQVJHX0lOVDY0KDAp OworCUZ1bGxUcmFuc2FjdGlvbklkIGxhc3R4aWQ7CisKKwlpZiAobnhpZHMgPCAwKQorCQllbG9n KEVSUk9SLCAiaW52YWxpZCBueGlkcyBhcmd1bWVudDogJWxsZCIsIChsb25nIGxvbmcpIG54aWRz KTsKKworCWlmIChueGlkcyA9PSAwKQorCQlsYXN0eGlkID0gUmVhZE5leHRGdWxsVHJhbnNhY3Rp b25JZCgpOworCWVsc2UKKwkJbGFzdHhpZCA9IGNvbnN1bWVfeGlkc19jb21tb24oSW52YWxpZEZ1 bGxUcmFuc2FjdGlvbklkLCAodWludDY0KSBueGlkcyk7CisKKwlQR19SRVRVUk5fSU5UNjQoKGlu dDY0KSBVNjRGcm9tRnVsbFRyYW5zYWN0aW9uSWQobGFzdHhpZCkpOworfQorCisvKgorICogQ29u c3VtZSBYSURzLCB1cCB0byB0aGUgZ2l2ZW4gWElELgorICovCitQR19GVU5DVElPTl9JTkZPX1Yx KGNvbnN1bWVfeGlkc191bnRpbCk7CitEYXR1bQorY29uc3VtZV94aWRzX3VudGlsKFBHX0ZVTkNU SU9OX0FSR1MpCit7CisJRnVsbFRyYW5zYWN0aW9uSWQgdGFyZ2V0eGlkID0gRnVsbFRyYW5zYWN0 aW9uSWRGcm9tVTY0KCh1aW50NjQpIFBHX0dFVEFSR19JTlQ2NCgwKSk7CisJRnVsbFRyYW5zYWN0 aW9uSWQgbGFzdHhpZDsKKworCWlmICghRnVsbFRyYW5zYWN0aW9uSWRJc05vcm1hbCh0YXJnZXR4 aWQpKQorCQllbG9nKEVSUk9SLCAidGFyZ2V0eGlkICVsbHUgaXMgbm90IG5vcm1hbCIsICh1bnNp Z25lZCBsb25nIGxvbmcpIFU2NEZyb21GdWxsVHJhbnNhY3Rpb25JZCh0YXJnZXR4aWQpKTsKKwor CWxhc3R4aWQgPSBjb25zdW1lX3hpZHNfY29tbW9uKHRhcmdldHhpZCwgMCk7CisKKwlQR19SRVRV Uk5fSU5UNjQoKGludDY0KSBVNjRGcm9tRnVsbFRyYW5zYWN0aW9uSWQobGFzdHhpZCkpOworfQor CisvKgorICogQ29tbW9uIGZ1bmN0aW9uYWxpdHkgYmV0d2VlbiB0aGUgdHdvIHB1YmxpYyBmdW5j dGlvbnMuCisgKi8KK3N0YXRpYyBGdWxsVHJhbnNhY3Rpb25JZAorY29uc3VtZV94aWRzX2NvbW1v bihGdWxsVHJhbnNhY3Rpb25JZCB1bnRpbHhpZCwgdWludDY0IG54aWRzKQoreworCUZ1bGxUcmFu c2FjdGlvbklkIGxhc3R4aWQ7CisJdWludDY0CQlsYXN0X3JlcG9ydGVkX2F0ID0gMDsKKwl1aW50 NjQJCWNvbnN1bWVkID0gMDsKKworCS8qIFByaW50IGEgTk9USUNFIGV2ZXJ5IFJFUE9SVF9JTlRF UlZBTCB4aWRzICovCisjZGVmaW5lIFJFUE9SVF9JTlRFUlZBTCAoMTAqMTAwMDAwMCkKKworCS8q IGluaXRpYWxpemUgJ2xhc3R4aWQnIHdpdGggdGhlIHN5c3RlbSdzIGN1cnJlbnQgbmV4dCBYSUQg Ki8KKwlsYXN0eGlkID0gUmVhZE5leHRGdWxsVHJhbnNhY3Rpb25JZCgpOworCisJLyoKKwkgKiBX ZSBjb25zdW1lIFhJRHMgYnkgY2FsbGluZyBHZXROZXdUcmFuc2FjdGlvbklkKHRydWUpLCB3aGlj aCBtYXJrcyB0aGUKKwkgKiBjb25zdW1lZCBYSURzIGFzIHN1YnRyYW5zYWN0aW9ucyBvZiB0aGUg Y3VycmVudCB0b3AtbGV2ZWwgdHJhbnNhY3Rpb24uCisJICogRm9yIHRoYXQgdG8gd29yaywgdGhp cyB0cmFuc2FjdGlvbiBtdXN0IGhhdmUgYSB0b3AtbGV2ZWwgWElELgorCSAqCisJICogR2V0TmV3 VHJhbnNhY3Rpb25JZCByZWdpc3RlcnMgdGhlbSBpbiB0aGUgc3VieGlkIGNhY2hlIGluIFBHUFJP QywgdW50aWwKKwkgKiB0aGUgY2FjaGUgb3ZlcmZsb3dzLCBidXQgYmV5b25kIHRoYXQsIHdlIGRv bid0IGtlZXAgdHJhY2sgb2YgdGhlCisJICogY29uc3VtZWQgWElEcy4KKwkgKi8KKwkodm9pZCkg R2V0VG9wVHJhbnNhY3Rpb25JZCgpOworCisJZm9yICg7OykKKwl7CisJCXVpbnQ2NAkJeGlkc19s ZWZ0OworCisJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisKKwkJLyogSG93IG1hbnkgWElEcyBk byB3ZSBoYXZlIGxlZnQgdG8gY29uc3VtZT8gKi8KKwkJaWYgKG54aWRzID4gMCkKKwkJeworCQkJ aWYgKGNvbnN1bWVkID49IG54aWRzKQorCQkJCWJyZWFrOworCQkJeGlkc19sZWZ0ID0gbnhpZHMg LSBjb25zdW1lZDsKKwkJfQorCQllbHNlCisJCXsKKwkJCWlmIChGdWxsVHJhbnNhY3Rpb25JZEZv bGxvd3NPckVxdWFscyhsYXN0eGlkLCB1bnRpbHhpZCkpCisJCQkJYnJlYWs7CisJCQl4aWRzX2xl ZnQgPSBVNjRGcm9tRnVsbFRyYW5zYWN0aW9uSWQodW50aWx4aWQpIC0gVTY0RnJvbUZ1bGxUcmFu c2FjdGlvbklkKGxhc3R4aWQpOworCQl9CisKKwkJLyoKKwkJICogSWYgd2Ugc3RpbGwgaGF2ZSBw bGVudHkgb2YgWElEcyB0byBjb25zdW1lLCB0cnkgdG8gdGFrZSBhIHNob3J0Y3V0CisJCSAqIGFu ZCBidW1wIHVwIHRoZSBuZXh0WGlkIGNvdW50ZXIgZGlyZWN0bHkuCisJCSAqLworCQlpZiAoeGlk c19sZWZ0ID4gMjAwMCAmJgorCQkJY29uc3VtZWQgLSBsYXN0X3JlcG9ydGVkX2F0IDwgUkVQT1JU X0lOVEVSVkFMICYmCisJCQlNeVByb2MtPnN1YnhpZFN0YXR1cy5vdmVyZmxvd2VkKQorCQl7CisJ CQlpbnQ2NAkJY29uc3VtZWRfYnlfc2hvcnRjdXQgPSBjb25zdW1lX3hpZHNfc2hvcnRjdXQoKTsK KworCQkJaWYgKGNvbnN1bWVkX2J5X3Nob3J0Y3V0ID4gMCkKKwkJCXsKKwkJCQljb25zdW1lZCAr PSBjb25zdW1lZF9ieV9zaG9ydGN1dDsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCisJCS8q IFNsb3cgcGF0aDogQ2FsbCBHZXROZXdUcmFuc2FjdGlvbklkIHRvIGFsbG9jYXRlIGEgbmV3IFhJ RC4gKi8KKwkJbGFzdHhpZCA9IEdldE5ld1RyYW5zYWN0aW9uSWQodHJ1ZSk7CisJCWNvbnN1bWVk Kys7CisKKwkJLyogUmVwb3J0IHByb2dyZXNzICovCisJCWlmIChjb25zdW1lZCAtIGxhc3RfcmVw b3J0ZWRfYXQgPj0gUkVQT1JUX0lOVEVSVkFMKQorCQl7CisJCQlpZiAobnhpZHMgPiAwKQorCQkJ CWVsb2coTk9USUNFLCAiY29uc3VtZWQgJWxsdSAvICVsbHUgWElEcywgbGF0ZXN0ICV1OiV1IiwK KwkJCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpIGNvbnN1bWVkLCAodW5zaWduZWQgbG9uZyBsb25n KSBueGlkcywKKwkJCQkJIEVwb2NoRnJvbUZ1bGxUcmFuc2FjdGlvbklkKGxhc3R4aWQpLAorCQkJ CQkgWGlkRnJvbUZ1bGxUcmFuc2FjdGlvbklkKGxhc3R4aWQpKTsKKwkJCWVsc2UKKwkJCQllbG9n KE5PVElDRSwgImNvbnN1bWVkIHVwIHRvICV1OiV1IC8gJXU6JXUiLAorCQkJCQkgRXBvY2hGcm9t RnVsbFRyYW5zYWN0aW9uSWQobGFzdHhpZCksCisJCQkJCSBYaWRGcm9tRnVsbFRyYW5zYWN0aW9u SWQobGFzdHhpZCksCisJCQkJCSBFcG9jaEZyb21GdWxsVHJhbnNhY3Rpb25JZCh1bnRpbHhpZCks CisJCQkJCSBYaWRGcm9tRnVsbFRyYW5zYWN0aW9uSWQodW50aWx4aWQpKTsKKwkJCWxhc3RfcmVw b3J0ZWRfYXQgPSBjb25zdW1lZDsKKwkJfQorCX0KKworCXJldHVybiBsYXN0eGlkOworfQorCisK Ky8qCisgKiBUaGVzZSBjb25zdGFudHMgY29waWVkIGZyb20gLmMgZmlsZXMsIGJlY2F1c2UgdGhl eSdyZSBwcml2YXRlLgorICovCisjZGVmaW5lIENPTU1JVF9UU19YQUNUU19QRVJfUEFHRSAoQkxD S1NaIC8gMTApCisjZGVmaW5lIFNVQlRSQU5TX1hBQ1RTX1BFUl9QQUdFIChCTENLU1ogLyBzaXpl b2YoVHJhbnNhY3Rpb25JZCkpCisjZGVmaW5lIENMT0dfWEFDVFNfUEVSX0JZVEUgNAorI2RlZmlu ZSBDTE9HX1hBQ1RTX1BFUl9QQUdFIChCTENLU1ogKiBDTE9HX1hBQ1RTX1BFUl9CWVRFKQorCisv KgorICogQWxsIHRoZSBpbnRlcmVzdGluZyBhY3Rpb24gaW4gR2V0TmV3VHJhbnNhY3Rpb25JZCBo YXBwZW5zIHdoZW4gd2UgZXh0ZW5kCisgKiB0aGUgU0xSVXMsIG9yIGF0IHRoZSB1aW50MzIgd3Jh cGFyb3VuZC4gSWYgdGhlIG5leHRYaWQgY291bnRlciBpcyBub3QgY2xvc2UKKyAqIHRvIGFueSBv ZiB0aG9zZSBpbnRlcmVzdGluZyB2YWx1ZXMsIHRha2UgYSBzaG9ydGN1dCBhbmQgYnVtcCBuZXh0 WElECisgKiBkaXJlY3RseSwgY2xvc2UgdG8gdGhlIG5leHQgImludGVyZXN0aW5nIiB2YWx1ZS4K KyAqLworc3RhdGljIGlubGluZSB1aW50MzIKK1hpZFNraXAoRnVsbFRyYW5zYWN0aW9uSWQgZnVs bHhpZCkKK3sKKwl1aW50MzIJCWxvdyA9IFhpZEZyb21GdWxsVHJhbnNhY3Rpb25JZChmdWxseGlk KTsKKwl1aW50MzIJCXJlbTsKKwl1aW50MzIJCWRpc3RhbmNlOworCisJaWYgKGxvdyA8IDUgfHwg bG93ID49IFVJTlQzMl9NQVggLSA1KQorCQlyZXR1cm4gMDsKKwlkaXN0YW5jZSA9IFVJTlQzMl9N QVggLSA1IC0gbG93OworCisJcmVtID0gbG93ICUgQ09NTUlUX1RTX1hBQ1RTX1BFUl9QQUdFOwor CWlmIChyZW0gPT0gMCkKKwkJcmV0dXJuIDA7CisJZGlzdGFuY2UgPSBNaW4oZGlzdGFuY2UsIENP TU1JVF9UU19YQUNUU19QRVJfUEFHRSAtIHJlbSk7CisKKwlyZW0gPSBsb3cgJSBTVUJUUkFOU19Y QUNUU19QRVJfUEFHRTsKKwlpZiAocmVtID09IDApCisJCXJldHVybiAwOworCWRpc3RhbmNlID0g TWluKGRpc3RhbmNlLCBTVUJUUkFOU19YQUNUU19QRVJfUEFHRSAtIHJlbSk7CisKKwlyZW0gPSBs b3cgJSBDTE9HX1hBQ1RTX1BFUl9QQUdFOworCWlmIChyZW0gPT0gMCkKKwkJcmV0dXJuIDA7CisJ ZGlzdGFuY2UgPSBNaW4oZGlzdGFuY2UsIENMT0dfWEFDVFNfUEVSX1BBR0UgLSByZW0pOworCisJ cmV0dXJuIGRpc3RhbmNlOworfQorCitzdGF0aWMgaW50NjQKK2NvbnN1bWVfeGlkc19zaG9ydGN1 dCh2b2lkKQoreworCUZ1bGxUcmFuc2FjdGlvbklkIG5leHRYaWQ7CisJdWludDMyCQljb25zdW1l ZDsKKworCUxXTG9ja0FjcXVpcmUoWGlkR2VuTG9jaywgTFdfRVhDTFVTSVZFKTsKKwluZXh0WGlk ID0gU2htZW1WYXJpYWJsZUNhY2hlLT5uZXh0WGlkOworCisJLyoKKwkgKiBHbyBzbG93IG5lYXIg dGhlICJpbnRlcmVzdGluZyB2YWx1ZXMiLiBUaGUgaW50ZXJlc3Rpbmcgem9uZXMgaW5jbHVkZSA1 CisJICogdHJhbnNhY3Rpb25zIGJlZm9yZSBhbmQgYWZ0ZXIgU0xSVSBwYWdlIHN3aXRjaGVzLgor CSAqLworCWNvbnN1bWVkID0gWGlkU2tpcChuZXh0WGlkKTsKKwlpZiAoY29uc3VtZWQgPiAwKQor CQlTaG1lbVZhcmlhYmxlQ2FjaGUtPm5leHRYaWQudmFsdWUgKz0gKHVpbnQ2NCkgY29uc3VtZWQ7 CisKKwlMV0xvY2tSZWxlYXNlKFhpZEdlbkxvY2spOworCisJcmV0dXJuIGNvbnN1bWVkOworfQpk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy94aWRfd3JhcGFyb3VuZC94aWRfd3JhcGFyb3Vu ZC5jb250cm9sIGIvc3JjL3Rlc3QvbW9kdWxlcy94aWRfd3JhcGFyb3VuZC94aWRfd3JhcGFyb3Vu ZC5jb250cm9sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjZjNjk2NGVk M2QKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3hpZF93cmFwYXJvdW5kL3hp ZF93cmFwYXJvdW5kLmNvbnRyb2wKQEAgLTAsMCArMSw0IEBACitjb21tZW50ID0gJ1Rlc3RzIGZv ciBYSUQgd3JhcGFyb3VuZCcKK2RlZmF1bHRfdmVyc2lvbiA9ICcxLjAnCittb2R1bGVfcGF0aG5h bWUgPSAnJGxpYmRpci94aWRfd3JhcGFyb3VuZCcKK3JlbG9jYXRhYmxlID0gdHJ1ZQotLSAKMi4z MS4xCgo= --000000000000c2a02105f6d5f70c--