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.96) (envelope-from ) id 1wRwGr-002p1x-08 for pgsql-hackers@arkaria.postgresql.org; Tue, 26 May 2026 18:12:53 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wRwGo-005ZDm-2n for pgsql-hackers@arkaria.postgresql.org; Tue, 26 May 2026 18:12:51 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wRwGo-005ZDe-0L for pgsql-hackers@lists.postgresql.org; Tue, 26 May 2026 18:12:51 +0000 Received: from relay2-d.mail.gandi.net ([2001:4b98:dc4:8::222]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1wRwGl-00000000tZz-02VQ for pgsql-hackers@lists.postgresql.org; Tue, 26 May 2026 18:12:49 +0000 Received: by mail.gandi.net (Postfix) with ESMTPSA id 7E72C3EC71; Tue, 26 May 2026 18:12:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vondra.me; s=gm1; t=1779819159; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=TFfwyScrov/qZwEkHWs+KO3ifU2bP49w1l5oJYggqGE=; b=LOlM4AkVe1n8xIOuDO2KSZrH/GbHBPt5y7PWPSAhF6QQ6AzyBntNTv8eUVqdXYNtXIOrCE A24EavnG514QCsxQeuDFZAON1oZskXH11/cvIuYG3KGr6tkIQzB4WsWNOcvrzTcAeJxyQj vM+tA7x6PGPJjHHuzVs972YQsnyYRZtARLV/Kya0ktworh74sJzt/lTyPF3UM6ztICn3MT szj/YDIuVWEovYxcVJLz5CFwcQVbKHG5jPy1sn90QPXMpVjezFO/f1OWSwiydakdhJOsjR wctiGSSAqHgVJb1kNIjj0rM+fYAoaLNlzMlYqUmrpLSH5gMd9o+SRWUbyJzyTQ== Content-Type: multipart/mixed; boundary="------------oNPPFw3Ql27McpvLvUYfV0Ix" Message-ID: Date: Tue, 26 May 2026 20:12:35 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Changing the state of data checksums in a running cluster From: Tomas Vondra To: Daniel Gustafsson , SATYANARAYANA NARLAPURAM Cc: Ayush Tiwari , PostgreSQL Hackers , Heikki Linnakangas , Andres Freund , Bernd Helmle , Michael Paquier , Michael Banck References: <7357A519-3391-4F07-BC69-5C9C2B120792@yesql.se> <4020B0AE-6286-462F-BD50-3AAD170F08C9@yesql.se> <30E2C103-2F50-4F9D-8868-E057250F55CA@yesql.se> <17BD06EB-3741-4921-AF60-6575FB4784ED@yesql.se> <9197F930-DDEB-4CAC-82A2-16FEC715CCE8@yesql.se> <6011EEE0-2D34-4A63-8B88-2437173486FE@yesql.se> <525E0691-FDAD-4194-9228-592A2DB96749@yesql.se> <9e1331e1-93a0-4e27-934a-17b89342be4d@vondra.me> Content-Language: en-US In-Reply-To: <9e1331e1-93a0-4e27-934a-17b89342be4d@vondra.me> X-GND-Sasl: tomas@vondra.me X-GND-Cause: dmFkZTEwsOJpAgrmxgpAAQbSysSPcbV3fdjMdelPUXABXY8ED9+vo1QqT2MlV0Waze6e/fVdGSrPuRjY5IzzyxJhmwyGaMpTOre2zM7yryxqJ7Qdtyrc3H+Zw1/lLobFDZsvN3mu9yBf6Yjq74LFBRlQoPERXQUzIOQfT943EJq771Lzs0K1BiSJzu/jVCnDBG29HQ6QC9i/jw7fwMrH0S/5KZCTeu2SIfVHxh5sKZ/Vmk3c0BvXKSOi+Jc8V/ayU63soUhxBS8GkKfm3iTcH+jVxss9TaCxi2YUz3LTkv1nzlEvw12pmDxEsfGmE6pB6/4ex+mjfLSqFgzf0fdtGt8w60cOrXrmAooTjchMYV1HUD95FGBI7LabdMYw39yVxg6ZSz+2p+rZ3+w6fHVzRl3IagEp9vO6mw2Df5suk3BYMaSrWTaVI9mselOyG0NKW0sznJWFjqHkW3WiQ6uxlQeBWwcHlkF6OftKYutErQ+GEsSmhnroQSWIV8NbYml1g0JaohphRf44jsZSfPcR1DyOac3xy9Wlmne5iJ2Ih3BcJVFMexKKDY7TqG9US0M49xQEyJuoKGdoBxhv01xWyU9CnI24qCc6MCALQs+sTWdpgpaQWHf7B/8mwgdT0Q8NsbIxQsdcSzAL9feYzCBCXDmA7jHqD6l5+79nGgjxEP/pJKS4pg X-GND-State: clean X-GND-Score: -100 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------oNPPFw3Ql27McpvLvUYfV0Ix Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hi, On 5/4/26 15:16, Tomas Vondra wrote: > Hi, > > ... snip ... > > Let me briefly explain what the various TAP tests aim to do. From the > very beginning, my main concern regarding this patch was race conditions > when updating the shared state about effective data_checksum_version. > Because the state is effectively split into about three or four places: > > * LocalDataChecksumVersion (local cache) > * XLogCtl->data_checksum_version (XLogCtl->info_lck) > * ControlFile->data_checksum_version (ControlFileLock) > * state in control file on disk > > These pieces are protected by different locks, the protocol for updating > and/or reading the various flags is not trivial (and some of the fixed > issues were due to ControlFile->data_checksum_version being updated from > a place that shouldn't have). > I still have a funny feeling about the "global checksum version" stored in multiple places with separate locks, and the protocol when updating them (e.g. which process does that, when, etc.). I haven't found any fundamental correctness issue, though. I kept looking for issues, and I realized StartupXLOG may not do the right thing on the standby after promotion. if (XLogCtl->data_checksum_version == PG_DATA_CHECKSUM_INPROGRESS_ON) { XLogChecksums(PG_DATA_CHECKSUM_OFF); SpinLockAcquire(&XLogCtl->info_lck); XLogCtl->data_checksum_version = PG_DATA_CHECKSUM_OFF; SetLocalDataChecksumState(XLogCtl->data_checksum_version); SpinLockRelease(&XLogCtl->info_lck); ereport(...); } Consider this sequence of steps: 1) primary/standby cluster has checksums OFF 2) primary starts enabling checksums 3) primary moves to inprogress-on 4) standby receives that and moves to inprogress-on too 5) primary crashes / shuts down / ... 6) standby gets promoted, and does the StartupXLOG thing 7) standby moves from inprogress-on back to off However, as there's no EmitProcSignalBarrier(), existing backends on the hot standby won't be notified about the "off" change. And so there will be a somewhat inconsistent checksum state, with new backends knowing it's "off", and old backends thinking it's still inprogress-on. It's not difficult to reproduce this. I guess the existing TAP tests may not catch this because they always open a new connection when checking the state, and so see the new (and correct) version. I believe a similar issue happens for the inprogress-off case a couple lines later, but I haven't tried reproducing that one. Ultimately, neither of these cases should cause checksum failures, because the "correct" new state is "off", and the old backends are not verifying checksums either. I suppose this means we should not be updating the checksum state without emitting the barrier? I think all other places do that. > > ... snip ... > > The TAP 012 tests checksum change with a concurrent checkpoint, followed > by a crash, and tests the final state. It pauses the change at an > injection point, does a checkpoint, proceeds to the next injection > point, crashes and does recovery. The expectation is that the final > state "flips" at some injection point, once it gets further enough, and > stays there. But what actually happens is this: > > a) test_checksum_transition( > 'disabled', 'enable', undef, > 'datachecksums-enable-inprogress-checksums-end', > 'datachecksums-enable-checksums-start', > 'off'); > > b) test_checksum_transition( > 'disabled', 'enable', undef, > 'datachecksums-enable-checksums-start', > 'datachecksums-enable-checksums-after-xlog', > 'on'); > > c) test_checksum_transition( > 'disabled', 'enable', 'datachecksums-enable-checksums-start', > 'datachecksums-enable-checksums-after-xlogs', > 'datachecksums-enable-checksums-after-xlogctl', > 'off'); > > This says that if the checkpoint happens after > 'datachecksums-enable-inprogress-checksums-end' or after > 'datachecksums-enable-checksums-after-xlog', we end up with 'off' (i.e. > enabling checksums fails). > > But if the checkpoint happens after > 'datachecksums-enable-checksums-start', we end up with "on" (after > recovery). > > This is a bit surprising, because that injection point is before > 'datachecksums-enable-checksums-after-xlog'. So the enabling process > gets further and further, but the final state flips off -> on -> off, > contradicting the expectation that it changes once. > > I haven't quite wrapped my head around it yet, but my understanding is > this is due to a race condition between the checksum launcher (writing > XLOG2_CHECKSUMS and updating the shmem state), and the checkpointer > (reading the shmem state and generating REDO). > > The launcher does this sequence of steps: > > 1) write XLOG2_CHECKSUMS with new state > 2) update XLogCtl->data_checksum_version > 3) update ControlFile->data_checksum_version > 4) UpdateControlFile() > 5) emits barrier > > while the checkpointer (CreateCheckPoint) does this: > > A) read XLogCtl->data_checksum_version (while holding insert locks) > B) insert XLOG_CHECKPOINT_REDO (reads XLogCtl->data_checksum_version) > C) UpdateControlFile() > > The outcome depends on how exactly these two sequences interleave. For > example, this can happen: > > 1) write XLOG2_CHECKSUMS with new state > A) read XLogCtl->data_checksum_version (while holding insert locks) > B) insert XLOG_CHECKPOINT_REDO (reads XLogCtl->data_checksum_version) > C) UpdateControlFile() > 2) update XLogCtl->data_checksum_version > 3) update ControlFile->data_checksum_version > 4) UpdateControlFile() > 5) emits barrier > > Which means the XLOG_CHECKPOINT_REDO will be after XLOG2_CHECKSUMS (and > so redo won't see it), but the checkpoint will still get the old > checksum state from XLogCtl. And so the outcome is "off", per case (c). > > But it can also happen what case (b) does: > > A) read XLogCtl->data_checksum_version (while holding insert locks) > B) insert XLOG_CHECKPOINT_REDO (reads XLogCtl->data_checksum_version) > C) UpdateControlFile() > 1) write XLOG2_CHECKSUMS with new state > 2) update XLogCtl->data_checksum_version > 3) update ControlFile->data_checksum_version > 4) UpdateControlFile() > 5) emits barrier > > In which case the REDO will have the old state, but the recovery will > read the XLOG2_CHECKSUMS, and so end up with "on". > > This is the root cause of the surprising behavior in TAP 012, I think. > > I attempted to trigger these race conditions in TAP 013, but without > much success. In the end I realized it probably needs more control, > waiting for the other process to hit the next injection point before > unpausing the current one. TAP 014 does that, and it shows that with the > right interleaving of steps the (c) case can end up with both "on" and > "off" final state. > > As I said, I don't claim I fully understand this yet. But I wouldn't > call this "bug" - AFAICS it won't produce an incorrect final state (I > haven't seen any such cases). > > Still, I wonder if there's a potential issue I failed to notice. > I kept thinking about this non-determinism, and I still think I'm right about the root cause. The checkpointer and datachecksum worker may interleave in different ways, affecting the final checksum state. The existing interlock (or lack of of it) is not sufficient. To verify this hypothesis, I've done a simple thing - I've introduced a new LWLock, protecting the "critical part" so that the checkpoint_redo can't happen in between XLogChecksums() and XLogCtl update. Patch attached, but I don't propose this for commit, I'm not sure if it's right (or safe), it's merely a PoC to confirm the issue. But it resolves the weird cases, simply by prohibiting some of the step sequences (so some of the tests needed to be commented out, as they'd block). I'm still not sure if it really is an issue or just an annoyance, because I've not been able to find a case where it'd lead to checksum failures (or obviously incorrect final state after recovery). > > The other question I had when looking at this (concurrency with > checkpoints) is what we get by doing > > MyProc->delayChkptFlags |= DELAY_CHKPT_START; > > whenever updating the state in SetDataChecksums... functions. Because > the only thing that guarantees is the updates happen on one side of the > checkpoint record. What does that give us, actually? > > It does not seem to prevent this surprising behavior, and it does not > say the XLOG2_CHECKSUMS happens before/after the XLOG_CHECKPOINT_REDO. > I still don't understand why this needs DELAY_CHKPT_START ... I also noticed a couple minor comment issues, per attached patch (this may need pgindent). regards -- Tomas Vondra --------------oNPPFw3Ql27McpvLvUYfV0Ix Content-Type: text/x-patch; charset=UTF-8; name="checksums-extra-lwlock.patch" Content-Disposition: attachment; filename="checksums-extra-lwlock.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwppbmRleCA0ODNlM2VhNzdmNS4uY2IxYTc3 YWFiYjggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMKQEAgLTQ3NzIsNiArNDc3 Miw4IEBAIFNldERhdGFDaGVja3N1bXNPbkluUHJvZ3Jlc3Modm9pZCkKIAogCUlOSkVDVElP Tl9QT0lOVF9DQUNIRUQoImRhdGFjaGVja3N1bXMtZW5hYmxlLWlucHJvZ3Jlc3MtY2hlY2tz dW1zLWJlZm9yZS14bG9nIiwgTlVMTCk7CiAKKwlMV0xvY2tBY3F1aXJlKENoZWNrc3VtU3Rh dGVMb2NrLCBMV19FWENMVVNJVkUpOworCiAJWExvZ0NoZWNrc3VtcyhQR19EQVRBX0NIRUNL U1VNX0lOUFJPR1JFU1NfT04pOwogCiAJSU5KRUNUSU9OX1BPSU5UX0NBQ0hFRCgiZGF0YWNo ZWNrc3Vtcy1lbmFibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtYWZ0ZXIteGxvZyIsIE5VTEwp OwpAQCAtNDc4MSw2ICs0NzgzLDggQEAgU2V0RGF0YUNoZWNrc3Vtc09uSW5Qcm9ncmVzcyh2 b2lkKQogCVhMb2dDdGwtPmRhdGFfY2hlY2tzdW1fdmVyc2lvbiA9IFBHX0RBVEFfQ0hFQ0tT VU1fSU5QUk9HUkVTU19PTjsKIAlTcGluTG9ja1JlbGVhc2UoJlhMb2dDdGwtPmluZm9fbGNr KTsKIAorCUxXTG9ja1JlbGVhc2UoQ2hlY2tzdW1TdGF0ZUxvY2spOworCiAJZWxvZyhMT0cs ICJTZXREYXRhQ2hlY2tzdW1zT25JblByb2dyZXNzIFhMb2dDdGwtPmRhdGFfY2hlY2tzdW1f dmVyc2lvbiAldSA9PiAldSIsCiAJCSBkYXRhX2NoZWNrc3VtX3ZlcnNpb24sIFBHX0RBVEFf Q0hFQ0tTVU1fSU5QUk9HUkVTU19PTik7CiAKQEAgLTQ4NzUsNiArNDg3OSw4IEBAIFNldERh dGFDaGVja3N1bXNPbih2b2lkKQogCiAJSU5KRUNUSU9OX1BPSU5UX0NBQ0hFRCgiZGF0YWNo ZWNrc3Vtcy1lbmFibGUtY2hlY2tzdW1zLWJlZm9yZS14bG9nIiwgTlVMTCk7CiAKKwlMV0xv Y2tBY3F1aXJlKENoZWNrc3VtU3RhdGVMb2NrLCBMV19FWENMVVNJVkUpOworCiAJWExvZ0No ZWNrc3VtcyhQR19EQVRBX0NIRUNLU1VNX1ZFUlNJT04pOwogCiAJSU5KRUNUSU9OX1BPSU5U X0NBQ0hFRCgiZGF0YWNoZWNrc3Vtcy1lbmFibGUtY2hlY2tzdW1zLWFmdGVyLXhsb2ciLCBO VUxMKTsKQEAgLTQ4ODQsNiArNDg5MCw4IEBAIFNldERhdGFDaGVja3N1bXNPbih2b2lkKQog CVhMb2dDdGwtPmRhdGFfY2hlY2tzdW1fdmVyc2lvbiA9IFBHX0RBVEFfQ0hFQ0tTVU1fVkVS U0lPTjsKIAlTcGluTG9ja1JlbGVhc2UoJlhMb2dDdGwtPmluZm9fbGNrKTsKIAorCUxXTG9j a1JlbGVhc2UoQ2hlY2tzdW1TdGF0ZUxvY2spOworCiAJZWxvZyhMT0csICJTZXREYXRhQ2hl Y2tzdW1zT24gLyBYTG9nQ3RsLT5kYXRhX2NoZWNrc3VtX3ZlcnNpb24gJXUgPT4gJXUiLAog CQkgZGF0YV9jaGVja3N1bV92ZXJzaW9uLCBQR19EQVRBX0NIRUNLU1VNX1ZFUlNJT04pOwog CkBAIC00OTgwLDYgKzQ5ODgsOCBAQCBTZXREYXRhQ2hlY2tzdW1zT2ZmKHZvaWQpCiAKIAkJ SU5KRUNUSU9OX1BPSU5UX0NBQ0hFRCgiZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWlucHJvZ3Jl c3MtY2hlY2tzdW1zLWJlZm9yZS14bG9nIiwgTlVMTCk7CiAKKwkJTFdMb2NrQWNxdWlyZShD aGVja3N1bVN0YXRlTG9jaywgTFdfRVhDTFVTSVZFKTsKKwogCQlYTG9nQ2hlY2tzdW1zKFBH X0RBVEFfQ0hFQ0tTVU1fSU5QUk9HUkVTU19PRkYpOwogCiAJCUlOSkVDVElPTl9QT0lOVF9D QUNIRUQoImRhdGFjaGVja3N1bXMtZGlzYWJsZS1pbnByb2dyZXNzLWNoZWNrc3Vtcy1hZnRl ci14bG9nIiwgTlVMTCk7CkBAIC00OTg5LDYgKzQ5OTksOCBAQCBTZXREYXRhQ2hlY2tzdW1z T2ZmKHZvaWQpCiAJCVhMb2dDdGwtPmRhdGFfY2hlY2tzdW1fdmVyc2lvbiA9IFBHX0RBVEFf Q0hFQ0tTVU1fSU5QUk9HUkVTU19PRkY7CiAJCVNwaW5Mb2NrUmVsZWFzZSgmWExvZ0N0bC0+ aW5mb19sY2spOwogCisJCUxXTG9ja1JlbGVhc2UoQ2hlY2tzdW1TdGF0ZUxvY2spOworCiAJ CWVsb2coTE9HLCAiU2V0RGF0YUNoZWNrc3Vtc09mZiAvIFhMb2dDdGwtPmRhdGFfY2hlY2tz dW1fdmVyc2lvbiAldSA9PiAldSIsCiAJCQkgZGF0YV9jaGVja3N1bV92ZXJzaW9uLCBQR19E QVRBX0NIRUNLU1VNX0lOUFJPR1JFU1NfT0ZGKTsKIApAQCAtNTA1MCw2ICs1MDYyLDggQEAg U2V0RGF0YUNoZWNrc3Vtc09mZih2b2lkKQogCiAJSU5KRUNUSU9OX1BPSU5UX0NBQ0hFRCgi ZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWNoZWNrc3Vtcy1iZWZvcmUteGxvZyIsIE5VTEwpOwog CisJTFdMb2NrQWNxdWlyZShDaGVja3N1bVN0YXRlTG9jaywgTFdfRVhDTFVTSVZFKTsKKwog CVhMb2dDaGVja3N1bXMoUEdfREFUQV9DSEVDS1NVTV9PRkYpOwogCiAJSU5KRUNUSU9OX1BP SU5UX0NBQ0hFRCgiZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWNoZWNrc3Vtcy1hZnRlci14bG9n IiwgTlVMTCk7CkBAIC01MDU5LDYgKzUwNzMsOCBAQCBTZXREYXRhQ2hlY2tzdW1zT2ZmKHZv aWQpCiAJWExvZ0N0bC0+ZGF0YV9jaGVja3N1bV92ZXJzaW9uID0gUEdfREFUQV9DSEVDS1NV TV9PRkY7CiAJU3BpbkxvY2tSZWxlYXNlKCZYTG9nQ3RsLT5pbmZvX2xjayk7CiAKKwlMV0xv Y2tSZWxlYXNlKENoZWNrc3VtU3RhdGVMb2NrKTsKKwogCWVsb2coTE9HLCAiU2V0RGF0YUNo ZWNrc3Vtc09mZiAvIFhMb2dDdGwtPmRhdGFfY2hlY2tzdW1fdmVyc2lvbiAldSA9PiAldSIs CiAJCSBkYXRhX2NoZWNrc3VtX3ZlcnNpb24sIFBHX0RBVEFfQ0hFQ0tTVU1fT0ZGKTsKIApA QCAtNzc3MSw2ICs3Nzg3LDkgQEAgQ3JlYXRlQ2hlY2tQb2ludChpbnQgZmxhZ3MpCiAKIAkJ SU5KRUNUSU9OX1BPSU5UX0NBQ0hFRCgiY2hlY2twb2ludC1iZWZvcmUtcmVkby1jaGVja3N1 bXMiLCBOVUxMKTsKIAorCQkvKiBtYWtlIFhMb2dDaGVja3N1bXMgKyBYTG9nQ3RsIHVwZGF0 ZSBhdG9taWMgKi8KKwkJTFdMb2NrQWNxdWlyZShDaGVja3N1bVN0YXRlTG9jaywgTFdfRVhD TFVTSVZFKTsKKwogCQlXQUxJbnNlcnRMb2NrQWNxdWlyZSgpOwogCQlyZWRvX3JlYy53YWxf bGV2ZWwgPSB3YWxfbGV2ZWw7CiAJCVNwaW5Mb2NrQWNxdWlyZSgmWExvZ0N0bC0+aW5mb19s Y2spOwpAQCAtNzc4NSw2ICs3ODA0LDggQEAgQ3JlYXRlQ2hlY2tQb2ludChpbnQgZmxhZ3Mp CiAJCVhMb2dSZWdpc3RlckRhdGEoJnJlZG9fcmVjLCBzaXplb2YoeGxfY2hlY2twb2ludF9y ZWRvKSk7CiAJCSh2b2lkKSBYTG9nSW5zZXJ0KFJNX1hMT0dfSUQsIFhMT0dfQ0hFQ0tQT0lO VF9SRURPKTsKIAorCQlMV0xvY2tSZWxlYXNlKENoZWNrc3VtU3RhdGVMb2NrKTsKKwogCQkv KgogCQkgKiBYTG9nSW5zZXJ0UmVjb3JkIHdpbGwgaGF2ZSB1cGRhdGVkIFhMb2dDdGwtPklu c2VydC5SZWRvUmVjUHRyIGluCiAJCSAqIHNoYXJlZCBtZW1vcnkgYW5kIFJlZG9SZWNQdHIg aW4gYmFja2VuZC1sb2NhbCBtZW1vcnksIGJ1dCB3ZSBuZWVkCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50X25hbWVzLnR4dCBiL3NyYy9iYWNr ZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFtZXMudHh0CmluZGV4IDU2MDY1OWY5 NTY4Li5hOWIxZTIxM2M3ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZp dHkvd2FpdF9ldmVudF9uYW1lcy50eHQKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZp dHkvd2FpdF9ldmVudF9uYW1lcy50eHQKQEAgLTM3MCw2ICszNzAsNyBAQCBXYWl0TFNOCSJX YWl0aW5nIHRvIHJlYWQgb3IgdXBkYXRlIHNoYXJlZCBXYWl0LWZvci1MU04gc3RhdGUuIgog TG9naWNhbERlY29kaW5nQ29udHJvbAkiV2FpdGluZyB0byByZWFkIG9yIHVwZGF0ZSBsb2dp Y2FsIGRlY29kaW5nIHN0YXR1cyBpbmZvcm1hdGlvbi4iCiBEYXRhQ2hlY2tzdW1zV29ya2Vy CSJXYWl0aW5nIGZvciBkYXRhIGNoZWNrc3VtcyB3b3JrZXIuIgogQWlvV29ya2VyQ29udHJv bAkiV2FpdGluZyB0byB1cGRhdGUgQUlPIHdvcmtlciBpbmZvcm1hdGlvbi4iCitDaGVja3N1 bVN0YXRlCSJXYWl0aW5nIHRvIHVwZGF0ZSBkYXRhIGNoZWNrc3VtIHN0YXRlLiIKIAogIwog IyBFTkQgT0YgUFJFREVGSU5FRCBMV0xPQ0tTIChETyBOT1QgQ0hBTkdFIFRISVMgTElORSkK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbHdsb2NrbGlzdC5oIGIvc3JjL2lu Y2x1ZGUvc3RvcmFnZS9sd2xvY2tsaXN0LmgKaW5kZXggZDdlYjY0OGJkMjcuLjJlNTY2YzRj YmUzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2x3bG9ja2xpc3QuaAorKysg Yi9zcmMvaW5jbHVkZS9zdG9yYWdlL2x3bG9ja2xpc3QuaApAQCAtODksNiArODksNyBAQCBQ R19MV0xPQ0soNTQsIFdhaXRMU04pCiBQR19MV0xPQ0soNTUsIExvZ2ljYWxEZWNvZGluZ0Nv bnRyb2wpCiBQR19MV0xPQ0soNTYsIERhdGFDaGVja3N1bXNXb3JrZXIpCiBQR19MV0xPQ0so NTcsIEFpb1dvcmtlckNvbnRyb2wpCitQR19MV0xPQ0soNTgsIENoZWNrc3VtU3RhdGUpCiAK IC8qCiAgKiBUaGVyZSBhbHNvIGV4aXN0IHNldmVyYWwgYnVpbHQtaW4gTFdMb2NrIHRyYW5j aGVzLiAgQXMgd2l0aCB0aGUgcHJlZGVmaW5lZApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X2NoZWNrc3Vtcy90LzAxMV9jb25jdXJyZW50X2NoZWNrcG9pbnQucGwgYi9z cmMvdGVzdC9tb2R1bGVzL3Rlc3RfY2hlY2tzdW1zL3QvMDExX2NvbmN1cnJlbnRfY2hlY2tw b2ludC5wbAppbmRleCA0Y2VhNzQ5MTRkNC4uYzZmNzg0MmNhYTkgMTAwNjQ0Ci0tLSBhL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9jaGVja3N1bXMvdC8wMTFfY29uY3VycmVudF9jaGVja3Bv aW50LnBsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jaGVja3N1bXMvdC8wMTFfY29u Y3VycmVudF9jaGVja3BvaW50LnBsCkBAIC0yNDUsMTMgKzI0NSwxMyBAQCBzdWIgdGVzdF9j aGVja3N1bV90cmFuc2l0aW9uCiAKICMgY29uY3VycmVudCBlbmFibGUgKyBjaGVja3BvaW50 LCBkaWZmZXJlbnQgaW5qZWN0aW9uIHBvaW50cyBpbiB0aGUgImVuYWJsZSIgcHJvY2Vzcwog dGVzdF9jaGVja3N1bV90cmFuc2l0aW9uKCdkaXNhYmxlZCcsICdlbmFibGUnLCB1bmRlZiwg J2RhdGFjaGVja3N1bXMtZW5hYmxlLWlucHJvZ3Jlc3MtY2hlY2tzdW1zLXN0YXJ0JywgJ29u Jyk7Ci10ZXN0X2NoZWNrc3VtX3RyYW5zaXRpb24oJ2Rpc2FibGVkJywgJ2VuYWJsZScsICdk YXRhY2hlY2tzdW1zLWVuYWJsZS1pbnByb2dyZXNzLWNoZWNrc3Vtcy1zdGFydCcsICdkYXRh Y2hlY2tzdW1zLWVuYWJsZS1pbnByb2dyZXNzLWNoZWNrc3Vtcy1hZnRlci14bG9nJywgJ29u Jyk7CisjdGVzdF9jaGVja3N1bV90cmFuc2l0aW9uKCdkaXNhYmxlZCcsICdlbmFibGUnLCAn ZGF0YWNoZWNrc3Vtcy1lbmFibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtc3RhcnQnLCAnZGF0 YWNoZWNrc3Vtcy1lbmFibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtYWZ0ZXIteGxvZycsICdv bicpOwogdGVzdF9jaGVja3N1bV90cmFuc2l0aW9uKCdkaXNhYmxlZCcsICdlbmFibGUnLCAn ZGF0YWNoZWNrc3Vtcy1lbmFibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtc3RhcnQnLCAnZGF0 YWNoZWNrc3Vtcy1lbmFibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtYWZ0ZXIteGxvZ2N0bCcs ICdvbicpOwogdGVzdF9jaGVja3N1bV90cmFuc2l0aW9uKCdkaXNhYmxlZCcsICdlbmFibGUn LCAnZGF0YWNoZWNrc3Vtcy1lbmFibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtc3RhcnQnLCAn ZGF0YWNoZWNrc3Vtcy1lbmFibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtYWZ0ZXItY29udHJv bGZpbGUnLCAnb24nKTsKIHRlc3RfY2hlY2tzdW1fdHJhbnNpdGlvbignZGlzYWJsZWQnLCAn ZW5hYmxlJywgdW5kZWYsICdkYXRhY2hlY2tzdW1zLWVuYWJsZS1pbnByb2dyZXNzLWNoZWNr c3Vtcy1iZWZvcmUtYmFycmllci13YWl0JywgJ29uJyk7CiB0ZXN0X2NoZWNrc3VtX3RyYW5z aXRpb24oJ2Rpc2FibGVkJywgJ2VuYWJsZScsIHVuZGVmLCAnZGF0YWNoZWNrc3Vtcy1lbmFi bGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtZW5kJywgJ29uJyk7CiB0ZXN0X2NoZWNrc3VtX3Ry YW5zaXRpb24oJ2Rpc2FibGVkJywgJ2VuYWJsZScsIHVuZGVmLCAnZGF0YWNoZWNrc3Vtcy1l bmFibGUtY2hlY2tzdW1zLXN0YXJ0JywgJ29uJyk7Ci10ZXN0X2NoZWNrc3VtX3RyYW5zaXRp b24oJ2Rpc2FibGVkJywgJ2VuYWJsZScsICdkYXRhY2hlY2tzdW1zLWVuYWJsZS1jaGVja3N1 bXMtc3RhcnQnLCAnZGF0YWNoZWNrc3Vtcy1lbmFibGUtY2hlY2tzdW1zLWFmdGVyLXhsb2cn LCAnb24nKTsKKyN0ZXN0X2NoZWNrc3VtX3RyYW5zaXRpb24oJ2Rpc2FibGVkJywgJ2VuYWJs ZScsICdkYXRhY2hlY2tzdW1zLWVuYWJsZS1jaGVja3N1bXMtc3RhcnQnLCAnZGF0YWNoZWNr c3Vtcy1lbmFibGUtY2hlY2tzdW1zLWFmdGVyLXhsb2cnLCAnb24nKTsKIHRlc3RfY2hlY2tz dW1fdHJhbnNpdGlvbignZGlzYWJsZWQnLCAnZW5hYmxlJywgJ2RhdGFjaGVja3N1bXMtZW5h YmxlLWNoZWNrc3Vtcy1zdGFydCcsICdkYXRhY2hlY2tzdW1zLWVuYWJsZS1jaGVja3N1bXMt YWZ0ZXIteGxvZ2N0bCcsICdvbicpOwogdGVzdF9jaGVja3N1bV90cmFuc2l0aW9uKCdkaXNh YmxlZCcsICdlbmFibGUnLCAnZGF0YWNoZWNrc3Vtcy1lbmFibGUtY2hlY2tzdW1zLXN0YXJ0 JywgJ2RhdGFjaGVja3N1bXMtZW5hYmxlLWNoZWNrc3Vtcy1hZnRlci1jb250cm9sZmlsZScs ICdvbicpOwogdGVzdF9jaGVja3N1bV90cmFuc2l0aW9uKCdkaXNhYmxlZCcsICdlbmFibGUn LCB1bmRlZiwgJ2RhdGFjaGVja3N1bXMtZW5hYmxlLWNoZWNrc3Vtcy1iZWZvcmUtY2hlY2tw b2ludCcsICdvbicpOwpAQCAtMjYwLDEyICsyNjAsMTIgQEAgdGVzdF9jaGVja3N1bV90cmFu c2l0aW9uKCdkaXNhYmxlZCcsICdlbmFibGUnLCB1bmRlZiwgJ2RhdGFjaGVja3N1bXMtZW5h YmxlLWNoZWMKIAogIyBjb25jdXJyZW50IGRpc2FibGUgKyBjaGVja3BvaW50LCBkaWZmZXJl bnQgaW5qZWN0aW9uIHBvaW50cyBpbiB0aGUgImRpc2FibGUiIHByb2Nlc3MKIHRlc3RfY2hl Y2tzdW1fdHJhbnNpdGlvbignZW5hYmxlZCcsICdkaXNhYmxlJywgdW5kZWYsICdkYXRhY2hl Y2tzdW1zLWRpc2FibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtc3RhcnQnLCAnb2ZmJyk7Ci10 ZXN0X2NoZWNrc3VtX3RyYW5zaXRpb24oJ2VuYWJsZWQnLCAnZGlzYWJsZScsICdkYXRhY2hl Y2tzdW1zLWRpc2FibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtc3RhcnQnLCAnZGF0YWNoZWNr c3Vtcy1kaXNhYmxlLWlucHJvZ3Jlc3MtY2hlY2tzdW1zLWFmdGVyLXhsb2cnLCAnb2ZmJyk7 CisjdGVzdF9jaGVja3N1bV90cmFuc2l0aW9uKCdlbmFibGVkJywgJ2Rpc2FibGUnLCAnZGF0 YWNoZWNrc3Vtcy1kaXNhYmxlLWlucHJvZ3Jlc3MtY2hlY2tzdW1zLXN0YXJ0JywgJ2RhdGFj aGVja3N1bXMtZGlzYWJsZS1pbnByb2dyZXNzLWNoZWNrc3Vtcy1hZnRlci14bG9nJywgJ29m ZicpOwogdGVzdF9jaGVja3N1bV90cmFuc2l0aW9uKCdlbmFibGVkJywgJ2Rpc2FibGUnLCAn ZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWlucHJvZ3Jlc3MtY2hlY2tzdW1zLXN0YXJ0JywgJ2Rh dGFjaGVja3N1bXMtZGlzYWJsZS1pbnByb2dyZXNzLWNoZWNrc3Vtcy1hZnRlci14bG9nY3Rs JywgJ29mZicpOwogdGVzdF9jaGVja3N1bV90cmFuc2l0aW9uKCdlbmFibGVkJywgJ2Rpc2Fi bGUnLCAnZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWlucHJvZ3Jlc3MtY2hlY2tzdW1zLXN0YXJ0 JywgJ2RhdGFjaGVja3N1bXMtZGlzYWJsZS1pbnByb2dyZXNzLWNoZWNrc3Vtcy1hZnRlci1j b250cm9sZmlsZScsICdvZmYnKTsKIHRlc3RfY2hlY2tzdW1fdHJhbnNpdGlvbignZW5hYmxl ZCcsICdkaXNhYmxlJywgdW5kZWYsICdkYXRhY2hlY2tzdW1zLWRpc2FibGUtaW5wcm9ncmVz cy1jaGVja3N1bXMtYmVmb3JlLWJhcnJpZXItd2FpdCcsICdvZmYnKTsKIHRlc3RfY2hlY2tz dW1fdHJhbnNpdGlvbignZW5hYmxlZCcsICdkaXNhYmxlJywgdW5kZWYsICdkYXRhY2hlY2tz dW1zLWRpc2FibGUtY2hlY2tzdW1zLXN0YXJ0JywgJ29mZicpOwotdGVzdF9jaGVja3N1bV90 cmFuc2l0aW9uKCdlbmFibGVkJywgJ2Rpc2FibGUnLCAnZGF0YWNoZWNrc3Vtcy1kaXNhYmxl LWNoZWNrc3Vtcy1zdGFydCcsICdkYXRhY2hlY2tzdW1zLWRpc2FibGUtY2hlY2tzdW1zLWFm dGVyLXhsb2cnLCAnb2ZmJyk7CisjdGVzdF9jaGVja3N1bV90cmFuc2l0aW9uKCdlbmFibGVk JywgJ2Rpc2FibGUnLCAnZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWNoZWNrc3Vtcy1zdGFydCcs ICdkYXRhY2hlY2tzdW1zLWRpc2FibGUtY2hlY2tzdW1zLWFmdGVyLXhsb2cnLCAnb2ZmJyk7 CiB0ZXN0X2NoZWNrc3VtX3RyYW5zaXRpb24oJ2VuYWJsZWQnLCAnZGlzYWJsZScsICdkYXRh Y2hlY2tzdW1zLWRpc2FibGUtY2hlY2tzdW1zLXN0YXJ0JywgJ2RhdGFjaGVja3N1bXMtZGlz YWJsZS1jaGVja3N1bXMtYWZ0ZXIteGxvZ2N0bCcsICdvZmYnKTsKIHRlc3RfY2hlY2tzdW1f dHJhbnNpdGlvbignZW5hYmxlZCcsICdkaXNhYmxlJywgJ2RhdGFjaGVja3N1bXMtZGlzYWJs ZS1jaGVja3N1bXMtc3RhcnQnLCAnZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWNoZWNrc3Vtcy1h ZnRlci1jb250cm9sZmlsZScsICdvZmYnKTsKIHRlc3RfY2hlY2tzdW1fdHJhbnNpdGlvbign ZW5hYmxlZCcsICdkaXNhYmxlJywgdW5kZWYsICdkYXRhY2hlY2tzdW1zLWRpc2FibGUtY2hl Y2tzdW1zLWJlZm9yZS1jaGVja3BvaW50JywgJ29mZicpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X2NoZWNrc3Vtcy90LzAxMl9jb25jdXJyZW50X2NoZWNrcG9pbnRf Y3Jhc2gucGwgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY2hlY2tzdW1zL3QvMDEyX2NvbmN1 cnJlbnRfY2hlY2twb2ludF9jcmFzaC5wbAppbmRleCBkZTE2OWY0NzAzNC4uNzdjMzRiOGIx NmQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jaGVja3N1bXMvdC8wMTJf Y29uY3VycmVudF9jaGVja3BvaW50X2NyYXNoLnBsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMv dGVzdF9jaGVja3N1bXMvdC8wMTJfY29uY3VycmVudF9jaGVja3BvaW50X2NyYXNoLnBsCkBA IC0yNTEsMTMgKzI1MSwxMyBAQCBzdWIgdGVzdF9jaGVja3N1bV90cmFuc2l0aW9uCiAKICMg Y29uY3VycmVudCBlbmFibGUgKyBjaGVja3BvaW50LCBkaWZmZXJlbnQgaW5qZWN0aW9uIHBv aW50cyBpbiB0aGUgImVuYWJsZSIgcHJvY2VzcwogdGVzdF9jaGVja3N1bV90cmFuc2l0aW9u KCdkaXNhYmxlZCcsICdlbmFibGUnLCB1bmRlZiwgJ2RhdGFjaGVja3N1bXMtZW5hYmxlLWlu cHJvZ3Jlc3MtY2hlY2tzdW1zLXN0YXJ0JywgJ2RhdGFjaGVja3N1bXMtZW5hYmxlLWlucHJv Z3Jlc3MtY2hlY2tzdW1zLWFmdGVyLXhsb2cnLCAnb2ZmJyk7Ci10ZXN0X2NoZWNrc3VtX3Ry YW5zaXRpb24oJ2Rpc2FibGVkJywgJ2VuYWJsZScsICdkYXRhY2hlY2tzdW1zLWVuYWJsZS1p bnByb2dyZXNzLWNoZWNrc3Vtcy1zdGFydCcsICdkYXRhY2hlY2tzdW1zLWVuYWJsZS1pbnBy b2dyZXNzLWNoZWNrc3Vtcy1hZnRlci14bG9nJywgJ2RhdGFjaGVja3N1bXMtZW5hYmxlLWlu cHJvZ3Jlc3MtY2hlY2tzdW1zLWFmdGVyLXhsb2djdGwnLCAnb2ZmJyk7CisjdGVzdF9jaGVj a3N1bV90cmFuc2l0aW9uKCdkaXNhYmxlZCcsICdlbmFibGUnLCAnZGF0YWNoZWNrc3Vtcy1l bmFibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtc3RhcnQnLCAnZGF0YWNoZWNrc3Vtcy1lbmFi bGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtYWZ0ZXIteGxvZycsICdkYXRhY2hlY2tzdW1zLWVu YWJsZS1pbnByb2dyZXNzLWNoZWNrc3Vtcy1hZnRlci14bG9nY3RsJywgJ29mZicpOwogdGVz dF9jaGVja3N1bV90cmFuc2l0aW9uKCdkaXNhYmxlZCcsICdlbmFibGUnLCAnZGF0YWNoZWNr c3Vtcy1lbmFibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtc3RhcnQnLCAnZGF0YWNoZWNrc3Vt cy1lbmFibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtYWZ0ZXIteGxvZ2N0bCcsICdkYXRhY2hl Y2tzdW1zLWVuYWJsZS1pbnByb2dyZXNzLWNoZWNrc3Vtcy1hZnRlci1jb250cm9sZmlsZScs ICdvZmYnKTsKIHRlc3RfY2hlY2tzdW1fdHJhbnNpdGlvbignZGlzYWJsZWQnLCAnZW5hYmxl JywgJ2RhdGFjaGVja3N1bXMtZW5hYmxlLWlucHJvZ3Jlc3MtY2hlY2tzdW1zLXN0YXJ0Jywg J2RhdGFjaGVja3N1bXMtZW5hYmxlLWlucHJvZ3Jlc3MtY2hlY2tzdW1zLWFmdGVyLWNvbnRy b2xmaWxlJywgJ2RhdGFjaGVja3N1bXMtZW5hYmxlLWlucHJvZ3Jlc3MtY2hlY2tzdW1zLWJl Zm9yZS1iYXJyaWVyLXdhaXQnLCAnb2ZmJyk7CiB0ZXN0X2NoZWNrc3VtX3RyYW5zaXRpb24o J2Rpc2FibGVkJywgJ2VuYWJsZScsIHVuZGVmLCAnZGF0YWNoZWNrc3Vtcy1lbmFibGUtaW5w cm9ncmVzcy1jaGVja3N1bXMtYmVmb3JlLWJhcnJpZXItd2FpdCcsICdkYXRhY2hlY2tzdW1z LWVuYWJsZS1pbnByb2dyZXNzLWNoZWNrc3Vtcy1lbmQnLCAnb2ZmJyk7CiB0ZXN0X2NoZWNr c3VtX3RyYW5zaXRpb24oJ2Rpc2FibGVkJywgJ2VuYWJsZScsIHVuZGVmLCAnZGF0YWNoZWNr c3Vtcy1lbmFibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtZW5kJywgJ2RhdGFjaGVja3N1bXMt ZW5hYmxlLWNoZWNrc3Vtcy1zdGFydCcsICdvZmYnKTsKIHRlc3RfY2hlY2tzdW1fdHJhbnNp dGlvbignZGlzYWJsZWQnLCAnZW5hYmxlJywgdW5kZWYsICdkYXRhY2hlY2tzdW1zLWVuYWJs ZS1jaGVja3N1bXMtc3RhcnQnLCAnZGF0YWNoZWNrc3Vtcy1lbmFibGUtY2hlY2tzdW1zLWFm dGVyLXhsb2cnLCAnb24nKTsKLXRlc3RfY2hlY2tzdW1fdHJhbnNpdGlvbignZGlzYWJsZWQn LCAnZW5hYmxlJywgJ2RhdGFjaGVja3N1bXMtZW5hYmxlLWNoZWNrc3Vtcy1zdGFydCcsICdk YXRhY2hlY2tzdW1zLWVuYWJsZS1jaGVja3N1bXMtYWZ0ZXIteGxvZycsICdkYXRhY2hlY2tz dW1zLWVuYWJsZS1jaGVja3N1bXMtYWZ0ZXIteGxvZ2N0bCcsICdvZmYnKTsKKyN0ZXN0X2No ZWNrc3VtX3RyYW5zaXRpb24oJ2Rpc2FibGVkJywgJ2VuYWJsZScsICdkYXRhY2hlY2tzdW1z LWVuYWJsZS1jaGVja3N1bXMtc3RhcnQnLCAnZGF0YWNoZWNrc3Vtcy1lbmFibGUtY2hlY2tz dW1zLWFmdGVyLXhsb2cnLCAnZGF0YWNoZWNrc3Vtcy1lbmFibGUtY2hlY2tzdW1zLWFmdGVy LXhsb2djdGwnLCAnb2ZmJyk7CiB0ZXN0X2NoZWNrc3VtX3RyYW5zaXRpb24oJ2Rpc2FibGVk JywgJ2VuYWJsZScsICdkYXRhY2hlY2tzdW1zLWVuYWJsZS1jaGVja3N1bXMtc3RhcnQnLCAn ZGF0YWNoZWNrc3Vtcy1lbmFibGUtY2hlY2tzdW1zLWFmdGVyLXhsb2djdGwnLCAnZGF0YWNo ZWNrc3Vtcy1lbmFibGUtY2hlY2tzdW1zLWFmdGVyLWNvbnRyb2xmaWxlJywgJ29uJyk7CiB0 ZXN0X2NoZWNrc3VtX3RyYW5zaXRpb24oJ2Rpc2FibGVkJywgJ2VuYWJsZScsICdkYXRhY2hl Y2tzdW1zLWVuYWJsZS1jaGVja3N1bXMtc3RhcnQnLCAnZGF0YWNoZWNrc3Vtcy1lbmFibGUt Y2hlY2tzdW1zLWFmdGVyLWNvbnRyb2xmaWxlJywgJ2RhdGFjaGVja3N1bXMtZW5hYmxlLWNo ZWNrc3Vtcy1iZWZvcmUtY2hlY2twb2ludCcsICdvbicpOwogdGVzdF9jaGVja3N1bV90cmFu c2l0aW9uKCdkaXNhYmxlZCcsICdlbmFibGUnLCB1bmRlZiwgJ2RhdGFjaGVja3N1bXMtZW5h YmxlLWNoZWNrc3Vtcy1iZWZvcmUtY2hlY2twb2ludCcsICdkYXRhY2hlY2tzdW1zLWVuYWJs ZS1jaGVja3N1bXMtYmVmb3JlLWJhcnJpZXItd2FpdCcsICdvbicpOwpAQCAtMjY2LDEyICsy NjYsMTIgQEAgdGVzdF9jaGVja3N1bV90cmFuc2l0aW9uKCdkaXNhYmxlZCcsICdlbmFibGUn LCB1bmRlZiwgJ2RhdGFjaGVja3N1bXMtZW5hYmxlLWNoZWMKIAogIyBjb25jdXJyZW50IGRp c2FibGUgKyBjaGVja3BvaW50LCBkaWZmZXJlbnQgaW5qZWN0aW9uIHBvaW50cyBpbiB0aGUg ImRpc2FibGUiIHByb2Nlc3MKIHRlc3RfY2hlY2tzdW1fdHJhbnNpdGlvbignZW5hYmxlZCcs ICdkaXNhYmxlJywgdW5kZWYsICdkYXRhY2hlY2tzdW1zLWRpc2FibGUtaW5wcm9ncmVzcy1j aGVja3N1bXMtc3RhcnQnLCAnZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWlucHJvZ3Jlc3MtY2hl Y2tzdW1zLWFmdGVyLXhsb2cnLCAnb2ZmJyk7Ci10ZXN0X2NoZWNrc3VtX3RyYW5zaXRpb24o J2VuYWJsZWQnLCAnZGlzYWJsZScsICdkYXRhY2hlY2tzdW1zLWRpc2FibGUtaW5wcm9ncmVz cy1jaGVja3N1bXMtc3RhcnQnLCAnZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWlucHJvZ3Jlc3Mt Y2hlY2tzdW1zLWFmdGVyLXhsb2cnLCAnZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWlucHJvZ3Jl c3MtY2hlY2tzdW1zLWFmdGVyLXhsb2djdGwnLCAnb24nKTsKKyN0ZXN0X2NoZWNrc3VtX3Ry YW5zaXRpb24oJ2VuYWJsZWQnLCAnZGlzYWJsZScsICdkYXRhY2hlY2tzdW1zLWRpc2FibGUt aW5wcm9ncmVzcy1jaGVja3N1bXMtc3RhcnQnLCAnZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWlu cHJvZ3Jlc3MtY2hlY2tzdW1zLWFmdGVyLXhsb2cnLCAnZGF0YWNoZWNrc3Vtcy1kaXNhYmxl LWlucHJvZ3Jlc3MtY2hlY2tzdW1zLWFmdGVyLXhsb2djdGwnLCAnb24nKTsKIHRlc3RfY2hl Y2tzdW1fdHJhbnNpdGlvbignZW5hYmxlZCcsICdkaXNhYmxlJywgJ2RhdGFjaGVja3N1bXMt ZGlzYWJsZS1pbnByb2dyZXNzLWNoZWNrc3Vtcy1zdGFydCcsICdkYXRhY2hlY2tzdW1zLWRp c2FibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtYWZ0ZXIteGxvZ2N0bCcsICdkYXRhY2hlY2tz dW1zLWRpc2FibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtYWZ0ZXItY29udHJvbGZpbGUnLCAn b2ZmJyk7CiB0ZXN0X2NoZWNrc3VtX3RyYW5zaXRpb24oJ2VuYWJsZWQnLCAnZGlzYWJsZScs ICdkYXRhY2hlY2tzdW1zLWRpc2FibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtc3RhcnQnLCAn ZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWlucHJvZ3Jlc3MtY2hlY2tzdW1zLWFmdGVyLWNvbnRy b2xmaWxlJywgJ2RhdGFjaGVja3N1bXMtZGlzYWJsZS1pbnByb2dyZXNzLWNoZWNrc3Vtcy1i ZWZvcmUtYmFycmllci13YWl0JywgJ29mZicpOwogdGVzdF9jaGVja3N1bV90cmFuc2l0aW9u KCdlbmFibGVkJywgJ2Rpc2FibGUnLCB1bmRlZiwgJ2RhdGFjaGVja3N1bXMtZGlzYWJsZS1p bnByb2dyZXNzLWNoZWNrc3Vtcy1iZWZvcmUtYmFycmllci13YWl0JywgJ2RhdGFjaGVja3N1 bXMtZGlzYWJsZS1jaGVja3N1bXMtc3RhcnQnLCAnb2ZmJyk7CiB0ZXN0X2NoZWNrc3VtX3Ry YW5zaXRpb24oJ2VuYWJsZWQnLCAnZGlzYWJsZScsIHVuZGVmLCAnZGF0YWNoZWNrc3Vtcy1k aXNhYmxlLWNoZWNrc3Vtcy1zdGFydCcsICdkYXRhY2hlY2tzdW1zLWRpc2FibGUtY2hlY2tz dW1zLWFmdGVyLXhsb2cnLCAnb2ZmJyk7Ci10ZXN0X2NoZWNrc3VtX3RyYW5zaXRpb24oJ2Vu YWJsZWQnLCAnZGlzYWJsZScsICdkYXRhY2hlY2tzdW1zLWRpc2FibGUtY2hlY2tzdW1zLXN0 YXJ0JywgJ2RhdGFjaGVja3N1bXMtZGlzYWJsZS1jaGVja3N1bXMtYWZ0ZXIteGxvZycsICdk YXRhY2hlY2tzdW1zLWRpc2FibGUtY2hlY2tzdW1zLWFmdGVyLXhsb2djdGwnLCAnb2ZmJyk7 CisjdGVzdF9jaGVja3N1bV90cmFuc2l0aW9uKCdlbmFibGVkJywgJ2Rpc2FibGUnLCAnZGF0 YWNoZWNrc3Vtcy1kaXNhYmxlLWNoZWNrc3Vtcy1zdGFydCcsICdkYXRhY2hlY2tzdW1zLWRp c2FibGUtY2hlY2tzdW1zLWFmdGVyLXhsb2cnLCAnZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWNo ZWNrc3Vtcy1hZnRlci14bG9nY3RsJywgJ29mZicpOwogdGVzdF9jaGVja3N1bV90cmFuc2l0 aW9uKCdlbmFibGVkJywgJ2Rpc2FibGUnLCAnZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWNoZWNr c3Vtcy1zdGFydCcsICdkYXRhY2hlY2tzdW1zLWRpc2FibGUtY2hlY2tzdW1zLWFmdGVyLXhs b2djdGwnLCAnZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWNoZWNrc3Vtcy1hZnRlci1jb250cm9s ZmlsZScsICdvZmYnKTsKIHRlc3RfY2hlY2tzdW1fdHJhbnNpdGlvbignZW5hYmxlZCcsICdk aXNhYmxlJywgJ2RhdGFjaGVja3N1bXMtZGlzYWJsZS1jaGVja3N1bXMtc3RhcnQnLCAnZGF0 YWNoZWNrc3Vtcy1kaXNhYmxlLWNoZWNrc3Vtcy1hZnRlci1jb250cm9sZmlsZScsICdkYXRh Y2hlY2tzdW1zLWRpc2FibGUtY2hlY2tzdW1zLWJlZm9yZS1jaGVja3BvaW50JywgJ29mZicp OwogdGVzdF9jaGVja3N1bV90cmFuc2l0aW9uKCdlbmFibGVkJywgJ2Rpc2FibGUnLCB1bmRl ZiwgJ2RhdGFjaGVja3N1bXMtZGlzYWJsZS1jaGVja3N1bXMtYmVmb3JlLWNoZWNrcG9pbnQn LCAnZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWNoZWNrc3Vtcy1iZWZvcmUtYmFycmllci13YWl0 JywgJ29mZicpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2NoZWNrc3Vt cy90LzAxM19hc3luY19jaGVja3BvaW50X2NyYXNoLnBsIGIvc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X2NoZWNrc3Vtcy90LzAxM19hc3luY19jaGVja3BvaW50X2NyYXNoLnBsCmluZGV4IDRh MzEwNTA2NDgyLi4wYzU5ZjZkNDA5NSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X2NoZWNrc3Vtcy90LzAxM19hc3luY19jaGVja3BvaW50X2NyYXNoLnBsCisrKyBiL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9jaGVja3N1bXMvdC8wMTNfYXN5bmNfY2hlY2twb2ludF9j cmFzaC5wbApAQCAtMzQ5LDIwICszNDksMjAgQEAgbm90ZSgnVEVTVCBJTlBST0dSRVNTLU9O LzUnKTsKIAkJCSBkYXRhY2hlY2tzdW1zLWVuYWJsZS1pbnByb2dyZXNzLWNoZWNrc3Vtcy1h ZnRlci1jb250cm9sZmlsZSk7CiB0ZXN0X2NoZWNrc3VtX3NlcXVlbmNlKCdkaXNhYmxlZCcs ICdlbmFibGUnLCAnZGF0YWNoZWNrc3Vtcy1lbmFibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMt c3RhcnQnLCAnZGF0YWNoZWNrc3Vtcy1lbmFibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtZW5k JywgJ29mZicsIEBzdGVwcyk7CiAKLW5vdGUoJ1RFU1QgSU5QUk9HUkVTUy1PTi82Jyk7Ci1A c3RlcHMgPSBxdyhjcmVhdGUtY2hlY2twb2ludC1pbml0aWFsCi0JCQkgY2hlY2twb2ludC1i ZWZvcmUtcmVkbwotCQkJIGNoZWNrcG9pbnQtYmVmb3JlLXhsb2djdGwtY2hlY2tzdW1zCi0J CQkgY2hlY2twb2ludC1hZnRlci14bG9nY3RsLWNoZWNrc3VtcwotCQkJIGNoZWNrcG9pbnQt YmVmb3JlLXJlZG8tY2hlY2tzdW1zCi0JCQkgZGF0YWNoZWNrc3Vtcy1lbmFibGUtaW5wcm9n cmVzcy1jaGVja3N1bXMtYmVmb3JlLXhsb2cKLQkJCSBkYXRhY2hlY2tzdW1zLWVuYWJsZS1p bnByb2dyZXNzLWNoZWNrc3Vtcy1hZnRlci14bG9nCi0JCQkgZGF0YWNoZWNrc3Vtcy1lbmFi bGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtYWZ0ZXIteGxvZ2N0bAotCQkJIGRhdGFjaGVja3N1 bXMtZW5hYmxlLWlucHJvZ3Jlc3MtY2hlY2tzdW1zLWFmdGVyLWNvbnRyb2xmaWxlCi0JCQkg Y2hlY2twb2ludC1iZWZvcmUtcmVkby13YWwKLQkJCSBjaGVja3BvaW50LWFmdGVyLXJlZG8t d2FsCi0JCQkgY2hlY2twb2ludC1iZWZvcmUtb2xkLXdhbC1yZW1vdmFsKTsKLXRlc3RfY2hl Y2tzdW1fc2VxdWVuY2UoJ2Rpc2FibGVkJywgJ2VuYWJsZScsICdkYXRhY2hlY2tzdW1zLWVu YWJsZS1pbnByb2dyZXNzLWNoZWNrc3Vtcy1zdGFydCcsICdkYXRhY2hlY2tzdW1zLWVuYWJs ZS1pbnByb2dyZXNzLWNoZWNrc3Vtcy1lbmQnLCAnb2ZmJywgQHN0ZXBzKTsKKyNub3RlKCdU RVNUIElOUFJPR1JFU1MtT04vNicpOworI0BzdGVwcyA9IHF3KGNyZWF0ZS1jaGVja3BvaW50 LWluaXRpYWwKKyMJCQkgY2hlY2twb2ludC1iZWZvcmUtcmVkbworIwkJCSBjaGVja3BvaW50 LWJlZm9yZS14bG9nY3RsLWNoZWNrc3VtcworIwkJCSBjaGVja3BvaW50LWFmdGVyLXhsb2dj dGwtY2hlY2tzdW1zCisjCQkJIGNoZWNrcG9pbnQtYmVmb3JlLXJlZG8tY2hlY2tzdW1zCisj CQkJIGRhdGFjaGVja3N1bXMtZW5hYmxlLWlucHJvZ3Jlc3MtY2hlY2tzdW1zLWJlZm9yZS14 bG9nCisjCQkJIGRhdGFjaGVja3N1bXMtZW5hYmxlLWlucHJvZ3Jlc3MtY2hlY2tzdW1zLWFm dGVyLXhsb2cKKyMJCQkgZGF0YWNoZWNrc3Vtcy1lbmFibGUtaW5wcm9ncmVzcy1jaGVja3N1 bXMtYWZ0ZXIteGxvZ2N0bAorIwkJCSBkYXRhY2hlY2tzdW1zLWVuYWJsZS1pbnByb2dyZXNz LWNoZWNrc3Vtcy1hZnRlci1jb250cm9sZmlsZQorIwkJCSBjaGVja3BvaW50LWJlZm9yZS1y ZWRvLXdhbAorIwkJCSBjaGVja3BvaW50LWFmdGVyLXJlZG8td2FsCisjCQkJIGNoZWNrcG9p bnQtYmVmb3JlLW9sZC13YWwtcmVtb3ZhbCk7CisjdGVzdF9jaGVja3N1bV9zZXF1ZW5jZSgn ZGlzYWJsZWQnLCAnZW5hYmxlJywgJ2RhdGFjaGVja3N1bXMtZW5hYmxlLWlucHJvZ3Jlc3Mt Y2hlY2tzdW1zLXN0YXJ0JywgJ2RhdGFjaGVja3N1bXMtZW5hYmxlLWlucHJvZ3Jlc3MtY2hl Y2tzdW1zLWVuZCcsICdvZmYnLCBAc3RlcHMpOwogCiAjIyBjaGVja3N1bXMgT04KIApAQCAt Mzk1LDIwICszOTUsMjAgQEAgbm90ZSgnVEVTVCBPTi8yJyk7CiAJCQkgZGF0YWNoZWNrc3Vt cy1lbmFibGUtY2hlY2tzdW1zLWFmdGVyLWNvbnRyb2xmaWxlKTsKIHRlc3RfY2hlY2tzdW1f c2VxdWVuY2UoJ2Rpc2FibGVkJywgJ2VuYWJsZScsICdkYXRhY2hlY2tzdW1zLWVuYWJsZS1j aGVja3N1bXMtc3RhcnQnLCAnZGF0YWNoZWNrc3Vtcy1lbmFibGUtY2hlY2tzdW1zLWVuZCcs ICdvbicsIEBzdGVwcyk7CiAKLW5vdGUoJ1RFU1QgT04vMycpOwotQHN0ZXBzID0gcXcoY3Jl YXRlLWNoZWNrcG9pbnQtaW5pdGlhbAotCQkJIGNoZWNrcG9pbnQtYmVmb3JlLXJlZG8KLQkJ CSBjaGVja3BvaW50LWJlZm9yZS14bG9nY3RsLWNoZWNrc3VtcwotCQkJIGNoZWNrcG9pbnQt YWZ0ZXIteGxvZ2N0bC1jaGVja3N1bXMKLQkJCSBjaGVja3BvaW50LWJlZm9yZS1yZWRvLWNo ZWNrc3VtcwotCQkJIGRhdGFjaGVja3N1bXMtZW5hYmxlLWNoZWNrc3Vtcy1iZWZvcmUteGxv ZwotCQkJIGRhdGFjaGVja3N1bXMtZW5hYmxlLWNoZWNrc3Vtcy1hZnRlci14bG9nCi0JCQkg Y2hlY2twb2ludC1iZWZvcmUtcmVkby13YWwKLQkJCSBjaGVja3BvaW50LWFmdGVyLXJlZG8t d2FsCi0JCQkgY2hlY2twb2ludC1iZWZvcmUtb2xkLXdhbC1yZW1vdmFsCi0JCQkgZGF0YWNo ZWNrc3Vtcy1lbmFibGUtY2hlY2tzdW1zLWFmdGVyLXhsb2djdGwKLQkJCSBkYXRhY2hlY2tz dW1zLWVuYWJsZS1jaGVja3N1bXMtYWZ0ZXItY29udHJvbGZpbGUpOwotdGVzdF9jaGVja3N1 bV9zZXF1ZW5jZSgnZGlzYWJsZWQnLCAnZW5hYmxlJywgJ2RhdGFjaGVja3N1bXMtZW5hYmxl LWNoZWNrc3Vtcy1zdGFydCcsICdkYXRhY2hlY2tzdW1zLWVuYWJsZS1jaGVja3N1bXMtZW5k JywgJ29uJywgQHN0ZXBzKTsKKyNub3RlKCdURVNUIE9OLzMnKTsKKyNAc3RlcHMgPSBxdyhj cmVhdGUtY2hlY2twb2ludC1pbml0aWFsCisjCQkJIGNoZWNrcG9pbnQtYmVmb3JlLXJlZG8K KyMJCQkgY2hlY2twb2ludC1iZWZvcmUteGxvZ2N0bC1jaGVja3N1bXMKKyMJCQkgY2hlY2tw b2ludC1hZnRlci14bG9nY3RsLWNoZWNrc3VtcworIwkJCSBjaGVja3BvaW50LWJlZm9yZS1y ZWRvLWNoZWNrc3VtcworIwkJCSBkYXRhY2hlY2tzdW1zLWVuYWJsZS1jaGVja3N1bXMtYmVm b3JlLXhsb2cKKyMJCQkgZGF0YWNoZWNrc3Vtcy1lbmFibGUtY2hlY2tzdW1zLWFmdGVyLXhs b2cKKyMJCQkgY2hlY2twb2ludC1iZWZvcmUtcmVkby13YWwKKyMJCQkgY2hlY2twb2ludC1h ZnRlci1yZWRvLXdhbAorIwkJCSBjaGVja3BvaW50LWJlZm9yZS1vbGQtd2FsLXJlbW92YWwK KyMJCQkgZGF0YWNoZWNrc3Vtcy1lbmFibGUtY2hlY2tzdW1zLWFmdGVyLXhsb2djdGwKKyMJ CQkgZGF0YWNoZWNrc3Vtcy1lbmFibGUtY2hlY2tzdW1zLWFmdGVyLWNvbnRyb2xmaWxlKTsK KyN0ZXN0X2NoZWNrc3VtX3NlcXVlbmNlKCdkaXNhYmxlZCcsICdlbmFibGUnLCAnZGF0YWNo ZWNrc3Vtcy1lbmFibGUtY2hlY2tzdW1zLXN0YXJ0JywgJ2RhdGFjaGVja3N1bXMtZW5hYmxl LWNoZWNrc3Vtcy1lbmQnLCAnb24nLCBAc3RlcHMpOwogCiBub3RlKCdURVNUIE9OLzQnKTsK IEBzdGVwcyA9IHF3KGNyZWF0ZS1jaGVja3BvaW50LWluaXRpYWwKQEAgLTQ2MiwzOSArNDYy LDM5IEBAIG5vdGUoJ1RFU1QgSU5QUk9HUkVTUy1PRkYvMicpOwogCQkJIGRhdGFjaGVja3N1 bXMtZGlzYWJsZS1pbnByb2dyZXNzLWNoZWNrc3Vtcy1iZWZvcmUtYmFycmllci13YWl0KTsK IHRlc3RfY2hlY2tzdW1fc2VxdWVuY2UoJ2VuYWJsZWQnLCAnZGlzYWJsZScsICdkYXRhY2hl Y2tzdW1zLWRpc2FibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtc3RhcnQnLCAnZGF0YWNoZWNr c3Vtcy1kaXNhYmxlLWNoZWNrc3Vtcy1zdGFydCcsICdvZmYnLCBAc3RlcHMpOwogCi1ub3Rl KCdURVNUIElOUFJPR1JFU1MtT0ZGLzMnKTsKLUBzdGVwcyA9IHF3KGNyZWF0ZS1jaGVja3Bv aW50LWluaXRpYWwKLQkJCSBjaGVja3BvaW50LWJlZm9yZS1yZWRvCi0JCQkgY2hlY2twb2lu dC1iZWZvcmUteGxvZ2N0bC1jaGVja3N1bXMKLQkJCSBjaGVja3BvaW50LWFmdGVyLXhsb2dj dGwtY2hlY2tzdW1zCi0JCQkgY2hlY2twb2ludC1iZWZvcmUtcmVkby1jaGVja3N1bXMKLQkJ CSBkYXRhY2hlY2tzdW1zLWRpc2FibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtYmVmb3JlLXhs b2cKLQkJCSBkYXRhY2hlY2tzdW1zLWRpc2FibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtYWZ0 ZXIteGxvZwotCQkJIGNoZWNrcG9pbnQtYmVmb3JlLXJlZG8td2FsCi0JCQkgY2hlY2twb2lu dC1hZnRlci1yZWRvLXdhbAotCQkJIGNoZWNrcG9pbnQtYmVmb3JlLW9sZC13YWwtcmVtb3Zh bAotCQkJIGRhdGFjaGVja3N1bXMtZGlzYWJsZS1pbnByb2dyZXNzLWNoZWNrc3Vtcy1hZnRl ci14bG9nY3RsCi0JCQkgZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWlucHJvZ3Jlc3MtY2hlY2tz dW1zLWFmdGVyLWNvbnRyb2xmaWxlCi0JCQkgZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWlucHJv Z3Jlc3MtY2hlY2tzdW1zLWJlZm9yZS1jaGVja3BvaW50Ci0JCQkgZGF0YWNoZWNrc3Vtcy1k aXNhYmxlLWlucHJvZ3Jlc3MtY2hlY2tzdW1zLWJlZm9yZS1iYXJyaWVyLXdhaXQpOwotdGVz dF9jaGVja3N1bV9zZXF1ZW5jZSgnZW5hYmxlZCcsICdkaXNhYmxlJywgJ2RhdGFjaGVja3N1 bXMtZGlzYWJsZS1pbnByb2dyZXNzLWNoZWNrc3Vtcy1zdGFydCcsICdkYXRhY2hlY2tzdW1z LWRpc2FibGUtY2hlY2tzdW1zLXN0YXJ0JywgJ29mZicsIEBzdGVwcyk7Ci0KLW5vdGUoJ1RF U1QgSU5QUk9HUkVTUy1PRkYvNCcpOwotQHN0ZXBzID0gcXcoY3JlYXRlLWNoZWNrcG9pbnQt aW5pdGlhbAotCQkJIGNoZWNrcG9pbnQtYmVmb3JlLXJlZG8KLQkJCSBjaGVja3BvaW50LWJl Zm9yZS14bG9nY3RsLWNoZWNrc3VtcwotCQkJIGNoZWNrcG9pbnQtYWZ0ZXIteGxvZ2N0bC1j aGVja3N1bXMKLQkJCSBjaGVja3BvaW50LWJlZm9yZS1yZWRvLWNoZWNrc3VtcwotCQkJIGRh dGFjaGVja3N1bXMtZGlzYWJsZS1pbnByb2dyZXNzLWNoZWNrc3Vtcy1iZWZvcmUteGxvZwot CQkJIGRhdGFjaGVja3N1bXMtZGlzYWJsZS1pbnByb2dyZXNzLWNoZWNrc3Vtcy1hZnRlci14 bG9nCi0JCQkgZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWlucHJvZ3Jlc3MtY2hlY2tzdW1zLWFm dGVyLXhsb2djdGwKLQkJCSBkYXRhY2hlY2tzdW1zLWRpc2FibGUtaW5wcm9ncmVzcy1jaGVj a3N1bXMtYWZ0ZXItY29udHJvbGZpbGUKLQkJCSBkYXRhY2hlY2tzdW1zLWRpc2FibGUtaW5w cm9ncmVzcy1jaGVja3N1bXMtYmVmb3JlLWNoZWNrcG9pbnQKLQkJCSBjaGVja3BvaW50LWJl Zm9yZS1yZWRvLXdhbAotCQkJIGNoZWNrcG9pbnQtYWZ0ZXItcmVkby13YWwKLQkJCSBjaGVj a3BvaW50LWJlZm9yZS1vbGQtd2FsLXJlbW92YWwKLQkJCSBkYXRhY2hlY2tzdW1zLWRpc2Fi bGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtYmVmb3JlLWJhcnJpZXItd2FpdCk7Ci10ZXN0X2No ZWNrc3VtX3NlcXVlbmNlKCdlbmFibGVkJywgJ2Rpc2FibGUnLCAnZGF0YWNoZWNrc3Vtcy1k aXNhYmxlLWlucHJvZ3Jlc3MtY2hlY2tzdW1zLXN0YXJ0JywgJ2RhdGFjaGVja3N1bXMtZGlz YWJsZS1jaGVja3N1bXMtc3RhcnQnLCAnb2ZmJywgQHN0ZXBzKTsKKyNub3RlKCdURVNUIElO UFJPR1JFU1MtT0ZGLzMnKTsKKyNAc3RlcHMgPSBxdyhjcmVhdGUtY2hlY2twb2ludC1pbml0 aWFsCisjCQkJIGNoZWNrcG9pbnQtYmVmb3JlLXJlZG8KKyMJCQkgY2hlY2twb2ludC1iZWZv cmUteGxvZ2N0bC1jaGVja3N1bXMKKyMJCQkgY2hlY2twb2ludC1hZnRlci14bG9nY3RsLWNo ZWNrc3VtcworIwkJCSBjaGVja3BvaW50LWJlZm9yZS1yZWRvLWNoZWNrc3VtcworIwkJCSBk YXRhY2hlY2tzdW1zLWRpc2FibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtYmVmb3JlLXhsb2cK KyMJCQkgZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWlucHJvZ3Jlc3MtY2hlY2tzdW1zLWFmdGVy LXhsb2cKKyMJCQkgY2hlY2twb2ludC1iZWZvcmUtcmVkby13YWwKKyMJCQkgY2hlY2twb2lu dC1hZnRlci1yZWRvLXdhbAorIwkJCSBjaGVja3BvaW50LWJlZm9yZS1vbGQtd2FsLXJlbW92 YWwKKyMJCQkgZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWlucHJvZ3Jlc3MtY2hlY2tzdW1zLWFm dGVyLXhsb2djdGwKKyMJCQkgZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWlucHJvZ3Jlc3MtY2hl Y2tzdW1zLWFmdGVyLWNvbnRyb2xmaWxlCisjCQkJIGRhdGFjaGVja3N1bXMtZGlzYWJsZS1p bnByb2dyZXNzLWNoZWNrc3Vtcy1iZWZvcmUtY2hlY2twb2ludAorIwkJCSBkYXRhY2hlY2tz dW1zLWRpc2FibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtYmVmb3JlLWJhcnJpZXItd2FpdCk7 CisjdGVzdF9jaGVja3N1bV9zZXF1ZW5jZSgnZW5hYmxlZCcsICdkaXNhYmxlJywgJ2RhdGFj aGVja3N1bXMtZGlzYWJsZS1pbnByb2dyZXNzLWNoZWNrc3Vtcy1zdGFydCcsICdkYXRhY2hl Y2tzdW1zLWRpc2FibGUtY2hlY2tzdW1zLXN0YXJ0JywgJ29mZicsIEBzdGVwcyk7CisKKyNu b3RlKCdURVNUIElOUFJPR1JFU1MtT0ZGLzQnKTsKKyNAc3RlcHMgPSBxdyhjcmVhdGUtY2hl Y2twb2ludC1pbml0aWFsCisjCQkJIGNoZWNrcG9pbnQtYmVmb3JlLXJlZG8KKyMJCQkgY2hl Y2twb2ludC1iZWZvcmUteGxvZ2N0bC1jaGVja3N1bXMKKyMJCQkgY2hlY2twb2ludC1hZnRl ci14bG9nY3RsLWNoZWNrc3VtcworIwkJCSBjaGVja3BvaW50LWJlZm9yZS1yZWRvLWNoZWNr c3VtcworIwkJCSBkYXRhY2hlY2tzdW1zLWRpc2FibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMt YmVmb3JlLXhsb2cKKyMJCQkgZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWlucHJvZ3Jlc3MtY2hl Y2tzdW1zLWFmdGVyLXhsb2cKKyMJCQkgZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWlucHJvZ3Jl c3MtY2hlY2tzdW1zLWFmdGVyLXhsb2djdGwKKyMJCQkgZGF0YWNoZWNrc3Vtcy1kaXNhYmxl LWlucHJvZ3Jlc3MtY2hlY2tzdW1zLWFmdGVyLWNvbnRyb2xmaWxlCisjCQkJIGRhdGFjaGVj a3N1bXMtZGlzYWJsZS1pbnByb2dyZXNzLWNoZWNrc3Vtcy1iZWZvcmUtY2hlY2twb2ludAor IwkJCSBjaGVja3BvaW50LWJlZm9yZS1yZWRvLXdhbAorIwkJCSBjaGVja3BvaW50LWFmdGVy LXJlZG8td2FsCisjCQkJIGNoZWNrcG9pbnQtYmVmb3JlLW9sZC13YWwtcmVtb3ZhbAorIwkJ CSBkYXRhY2hlY2tzdW1zLWRpc2FibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtYmVmb3JlLWJh cnJpZXItd2FpdCk7CisjdGVzdF9jaGVja3N1bV9zZXF1ZW5jZSgnZW5hYmxlZCcsICdkaXNh YmxlJywgJ2RhdGFjaGVja3N1bXMtZGlzYWJsZS1pbnByb2dyZXNzLWNoZWNrc3Vtcy1zdGFy dCcsICdkYXRhY2hlY2tzdW1zLWRpc2FibGUtY2hlY2tzdW1zLXN0YXJ0JywgJ29mZicsIEBz dGVwcyk7CiAKICMjIGNoZWNrc3VtcyBPRkYKIApAQCAtNTMyLDIyICs1MzIsMjIgQEAgbm90 ZSgnVEVTVCBPRkYvMicpOwogCQkJIGRhdGFjaGVja3N1bXMtZGlzYWJsZS1jaGVja3N1bXMt YmVmb3JlLWJhcnJpZXItd2FpdCk7CiB0ZXN0X2NoZWNrc3VtX3NlcXVlbmNlKCdlbmFibGVk JywgJ2Rpc2FibGUnLCAnZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWNoZWNrc3Vtcy1zdGFydCcs ICdkYXRhY2hlY2tzdW1zLWRpc2FibGUtY2hlY2tzdW1zLWVuZCcsICdvZmYnLCBAc3RlcHMp OwogCi1ub3RlKCdURVNUIE9GRi8zJyk7Ci1Ac3RlcHMgPSBxdyhjcmVhdGUtY2hlY2twb2lu dC1pbml0aWFsCi0JCQkgY2hlY2twb2ludC1iZWZvcmUtcmVkbwotCQkJIGNoZWNrcG9pbnQt YmVmb3JlLXhsb2djdGwtY2hlY2tzdW1zCi0JCQkgY2hlY2twb2ludC1hZnRlci14bG9nY3Rs LWNoZWNrc3VtcwotCQkJIGNoZWNrcG9pbnQtYmVmb3JlLXJlZG8tY2hlY2tzdW1zCi0JCQkg ZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWNoZWNrc3Vtcy1iZWZvcmUteGxvZwotCQkJIGRhdGFj aGVja3N1bXMtZGlzYWJsZS1jaGVja3N1bXMtYWZ0ZXIteGxvZwotCQkJIGNoZWNrcG9pbnQt YmVmb3JlLXJlZG8td2FsCi0JCQkgY2hlY2twb2ludC1hZnRlci1yZWRvLXdhbAotCQkJIGRh dGFjaGVja3N1bXMtZGlzYWJsZS1jaGVja3N1bXMtYWZ0ZXIteGxvZ2N0bAotCQkJIGRhdGFj aGVja3N1bXMtZGlzYWJsZS1jaGVja3N1bXMtYWZ0ZXItY29udHJvbGZpbGUKLQkJCSBkYXRh Y2hlY2tzdW1zLWRpc2FibGUtY2hlY2tzdW1zLWJlZm9yZS1jaGVja3BvaW50Ci0JCQkgY2hl Y2twb2ludC1iZWZvcmUtb2xkLXdhbC1yZW1vdmFsCi0JCQkgZGF0YWNoZWNrc3Vtcy1kaXNh YmxlLWNoZWNrc3Vtcy1iZWZvcmUtYmFycmllci13YWl0KTsKLXRlc3RfY2hlY2tzdW1fc2Vx dWVuY2UoJ2VuYWJsZWQnLCAnZGlzYWJsZScsICdkYXRhY2hlY2tzdW1zLWRpc2FibGUtY2hl Y2tzdW1zLXN0YXJ0JywgJ2RhdGFjaGVja3N1bXMtZGlzYWJsZS1jaGVja3N1bXMtZW5kJywg J29mZicsIEBzdGVwcyk7Cisjbm90ZSgnVEVTVCBPRkYvMycpOworI0BzdGVwcyA9IHF3KGNy ZWF0ZS1jaGVja3BvaW50LWluaXRpYWwKKyMJCQkgY2hlY2twb2ludC1iZWZvcmUtcmVkbwor IwkJCSBjaGVja3BvaW50LWJlZm9yZS14bG9nY3RsLWNoZWNrc3VtcworIwkJCSBjaGVja3Bv aW50LWFmdGVyLXhsb2djdGwtY2hlY2tzdW1zCisjCQkJIGNoZWNrcG9pbnQtYmVmb3JlLXJl ZG8tY2hlY2tzdW1zCisjCQkJIGRhdGFjaGVja3N1bXMtZGlzYWJsZS1jaGVja3N1bXMtYmVm b3JlLXhsb2cKKyMJCQkgZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWNoZWNrc3Vtcy1hZnRlci14 bG9nCisjCQkJIGNoZWNrcG9pbnQtYmVmb3JlLXJlZG8td2FsCisjCQkJIGNoZWNrcG9pbnQt YWZ0ZXItcmVkby13YWwKKyMJCQkgZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWNoZWNrc3Vtcy1h ZnRlci14bG9nY3RsCisjCQkJIGRhdGFjaGVja3N1bXMtZGlzYWJsZS1jaGVja3N1bXMtYWZ0 ZXItY29udHJvbGZpbGUKKyMJCQkgZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWNoZWNrc3Vtcy1i ZWZvcmUtY2hlY2twb2ludAorIwkJCSBjaGVja3BvaW50LWJlZm9yZS1vbGQtd2FsLXJlbW92 YWwKKyMJCQkgZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWNoZWNrc3Vtcy1iZWZvcmUtYmFycmll ci13YWl0KTsKKyN0ZXN0X2NoZWNrc3VtX3NlcXVlbmNlKCdlbmFibGVkJywgJ2Rpc2FibGUn LCAnZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWNoZWNrc3Vtcy1zdGFydCcsICdkYXRhY2hlY2tz dW1zLWRpc2FibGUtY2hlY2tzdW1zLWVuZCcsICdvZmYnLCBAc3RlcHMpOwogCiBub3RlKCdU RVNUIE9GRi80Jyk7CiBAc3RlcHMgPSBxdyhjcmVhdGUtY2hlY2twb2ludC1pbml0aWFsCkBA IC01NjYsMjIgKzU2NiwyMiBAQCBub3RlKCdURVNUIE9GRi80Jyk7CiAJCQkgZGF0YWNoZWNr c3Vtcy1kaXNhYmxlLWNoZWNrc3Vtcy1iZWZvcmUtYmFycmllci13YWl0KTsKIHRlc3RfY2hl Y2tzdW1fc2VxdWVuY2UoJ2VuYWJsZWQnLCAnZGlzYWJsZScsICdkYXRhY2hlY2tzdW1zLWRp c2FibGUtY2hlY2tzdW1zLXN0YXJ0JywgJ2RhdGFjaGVja3N1bXMtZGlzYWJsZS1jaGVja3N1 bXMtZW5kJywgJ29mZicsIEBzdGVwcyk7CiAKLW5vdGUoJ1RFU1QgT0ZGLzUnKTsKLUBzdGVw cyA9IHF3KGNyZWF0ZS1jaGVja3BvaW50LWluaXRpYWwKLQkJCSBjaGVja3BvaW50LWJlZm9y ZS1yZWRvCi0JCQkgY2hlY2twb2ludC1iZWZvcmUteGxvZ2N0bC1jaGVja3N1bXMKLQkJCSBj aGVja3BvaW50LWFmdGVyLXhsb2djdGwtY2hlY2tzdW1zCi0JCQkgY2hlY2twb2ludC1iZWZv cmUtcmVkby1jaGVja3N1bXMKLQkJCSBkYXRhY2hlY2tzdW1zLWRpc2FibGUtY2hlY2tzdW1z LWJlZm9yZS14bG9nCi0JCQkgZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWNoZWNrc3Vtcy1hZnRl ci14bG9nCi0JCQkgY2hlY2twb2ludC1iZWZvcmUtcmVkby13YWwKLQkJCSBjaGVja3BvaW50 LWFmdGVyLXJlZG8td2FsCi0JCQkgZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWNoZWNrc3Vtcy1h ZnRlci14bG9nY3RsCi0JCQkgZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWNoZWNrc3Vtcy1hZnRl ci1jb250cm9sZmlsZQotCQkJIGRhdGFjaGVja3N1bXMtZGlzYWJsZS1jaGVja3N1bXMtYmVm b3JlLWNoZWNrcG9pbnQKLQkJCSBjaGVja3BvaW50LWJlZm9yZS1vbGQtd2FsLXJlbW92YWwK LQkJCSBkYXRhY2hlY2tzdW1zLWRpc2FibGUtY2hlY2tzdW1zLWJlZm9yZS1iYXJyaWVyLXdh aXQpOwotdGVzdF9jaGVja3N1bV9zZXF1ZW5jZSgnZW5hYmxlZCcsICdkaXNhYmxlJywgJ2Rh dGFjaGVja3N1bXMtZGlzYWJsZS1jaGVja3N1bXMtc3RhcnQnLCAnZGF0YWNoZWNrc3Vtcy1k aXNhYmxlLWNoZWNrc3Vtcy1lbmQnLCAnb2ZmJywgQHN0ZXBzKTsKKyNub3RlKCdURVNUIE9G Ri81Jyk7CisjQHN0ZXBzID0gcXcoY3JlYXRlLWNoZWNrcG9pbnQtaW5pdGlhbAorIwkJCSBj aGVja3BvaW50LWJlZm9yZS1yZWRvCisjCQkJIGNoZWNrcG9pbnQtYmVmb3JlLXhsb2djdGwt Y2hlY2tzdW1zCisjCQkJIGNoZWNrcG9pbnQtYWZ0ZXIteGxvZ2N0bC1jaGVja3N1bXMKKyMJ CQkgY2hlY2twb2ludC1iZWZvcmUtcmVkby1jaGVja3N1bXMKKyMJCQkgZGF0YWNoZWNrc3Vt cy1kaXNhYmxlLWNoZWNrc3Vtcy1iZWZvcmUteGxvZworIwkJCSBkYXRhY2hlY2tzdW1zLWRp c2FibGUtY2hlY2tzdW1zLWFmdGVyLXhsb2cKKyMJCQkgY2hlY2twb2ludC1iZWZvcmUtcmVk by13YWwKKyMJCQkgY2hlY2twb2ludC1hZnRlci1yZWRvLXdhbAorIwkJCSBkYXRhY2hlY2tz dW1zLWRpc2FibGUtY2hlY2tzdW1zLWFmdGVyLXhsb2djdGwKKyMJCQkgZGF0YWNoZWNrc3Vt cy1kaXNhYmxlLWNoZWNrc3Vtcy1hZnRlci1jb250cm9sZmlsZQorIwkJCSBkYXRhY2hlY2tz dW1zLWRpc2FibGUtY2hlY2tzdW1zLWJlZm9yZS1jaGVja3BvaW50CisjCQkJIGNoZWNrcG9p bnQtYmVmb3JlLW9sZC13YWwtcmVtb3ZhbAorIwkJCSBkYXRhY2hlY2tzdW1zLWRpc2FibGUt Y2hlY2tzdW1zLWJlZm9yZS1iYXJyaWVyLXdhaXQpOworI3Rlc3RfY2hlY2tzdW1fc2VxdWVu Y2UoJ2VuYWJsZWQnLCAnZGlzYWJsZScsICdkYXRhY2hlY2tzdW1zLWRpc2FibGUtY2hlY2tz dW1zLXN0YXJ0JywgJ2RhdGFjaGVja3N1bXMtZGlzYWJsZS1jaGVja3N1bXMtZW5kJywgJ29m ZicsIEBzdGVwcyk7CiAKIG5vdGUoJ1RFU1QgT0ZGLzYnKTsKIEBzdGVwcyA9IHF3KGNyZWF0 ZS1jaGVja3BvaW50LWluaXRpYWwK --------------oNPPFw3Ql27McpvLvUYfV0Ix Content-Type: text/x-patch; charset=UTF-8; name="comment-fixes.patch" Content-Disposition: attachment; filename="comment-fixes.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwppbmRleCBmZWNkZjBkNGIwNS4uNDYyNDE0 MzIzYTEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMKQEAgLTQ4MDcsOSArNDgw Nyw4IEBAIFNldERhdGFDaGVja3N1bXNPbih2b2lkKQogCiAJLyoKIAkgKiBUaGUgb25seSBh bGxvd2VkIHN0YXRlIHRyYW5zaXRpb24gdG8gIm9uIiBpcyBmcm9tICJpbnByb2dyZXNzLW9u IiBzaW5jZQotCSAqIHRoYXQgc3RhdGUgZW5zdXJlcyB0aGF0IGFsbCBwYWdlcyB3aWxsIGhh dmUgZGF0YSBjaGVja3N1bXMgd3JpdHRlbi4gIE5vCi0JICogc3VjaCBzdGF0ZSB0cmFuc2l0 aW9uIGV4aXN0cywgaWYgaXQgZG9lcyBoYXBwZW4gaXQncyBsaWtlbHkgZHVlIHRvIGEKLQkg KiBwcm9ncmFtbWVyIGVycm9yLgorCSAqIHRoYXQgc3RhdGUgZW5zdXJlcyB0aGF0IGFsbCBw YWdlcyB3aWxsIGhhdmUgZGF0YSBjaGVja3N1bXMgd3JpdHRlbi4gQW55CisJICogb3RoZXIg YXR0ZW1wdGVkIHN0YXRlIHRyYW5zaXRpb24gaXMgbGlrZWx5IGR1ZSB0byBhIHByb2dyYW1t ZXIgZXJyb3IuCiAJICovCiAJaWYgKFhMb2dDdGwtPmRhdGFfY2hlY2tzdW1fdmVyc2lvbiAh PSBQR19EQVRBX0NIRUNLU1VNX0lOUFJPR1JFU1NfT04pCiAJewpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvcG9zdG1hc3Rlci9hdXhwcm9jZXNzLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFz dGVyL2F1eHByb2Nlc3MuYwppbmRleCA5ODAzYTBlZTJhMS4uYWQ0YmY0YmQyYTggMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV4cHJvY2Vzcy5jCisrKyBiL3NyYy9i YWNrZW5kL3Bvc3RtYXN0ZXIvYXV4cHJvY2Vzcy5jCkBAIC04OCw3ICs4OCw3IEBAIEF1eGls aWFyeVByb2Nlc3NNYWluQ29tbW9uKHZvaWQpCiAJICoKIAkgKiBUaGUgcG9zdG1hc3RlciAo d2hpY2ggaXMgd2hhdCBnZXRzIGZvcmtlZCBpbnRvIHRoZSBuZXcgY2hpbGQgcHJvY2VzcykK IAkgKiBkb2VzIG5vdCBoYW5kbGUgYmFycmllcnMsIHRoZXJlZm9yZSBpdCBtYXkgbm90IGhh dmUgdGhlIGN1cnJlbnQgdmFsdWUKLQkgKiBvZiBMb2NhbERhdGFDaGVja3N1bVZlcnNpb24g dmFsdWUgKGl0J2xsIGhhdmUgdGhlIHZhbHVlIHJlYWQgZnJvbSB0aGUKKwkgKiBvZiBMb2Nh bERhdGFDaGVja3N1bVN0YXRlIHZhbHVlIChpdCdsbCBoYXZlIHRoZSB2YWx1ZSByZWFkIGZy b20gdGhlCiAJICogY29udHJvbCBmaWxlLCB3aGljaCBtYXkgYmUgYXJiaXRyYXJpbHkgb2xk KS4KIAkgKgogCSAqIE5COiBFdmVuIGlmIHRoZSBwb3N0bWFzdGVyIGhhbmRsZWQgYmFycmll cnMsIHRoZSB2YWx1ZSBtaWdodCBzdGlsbCBiZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv cG9zdG1hc3Rlci9kYXRhY2hlY2tzdW1fc3RhdGUuYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0 ZXIvZGF0YWNoZWNrc3VtX3N0YXRlLmMKaW5kZXggMzM0MzAxNDdmZjIuLjUyMGViOGRiMTZi IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2RhdGFjaGVja3N1bV9zdGF0 ZS5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvZGF0YWNoZWNrc3VtX3N0YXRlLmMK QEAgLTIwLDggKzIwLDggQEAKICAqIFdoZW4gZW5hYmxpbmcgY2hlY2tzdW1zIGluIGFuIG9u bGluZSBjbHVzdGVyLCBkYXRhX2NoZWNrc3VtcyB3aWxsIGJlIHNldCB0bwogICogImlucHJv Z3Jlc3Mtb24iIHdoaWNoIHNpZ25hbHMgdGhhdCB3cml0ZSBvcGVyYXRpb25zIE1VU1QgY29t cHV0ZSBhbmQgd3JpdGUKICAqIHRoZSBjaGVja3N1bSBvbiB0aGUgZGF0YSBwYWdlLCBidXQg ZHVyaW5nIHJlYWRpbmcgdGhlIGNoZWNrc3VtIFNIQUxMIE5PVCBiZQotICogdmVyaWZpZWQu IFRoaXMgZW5zdXJlcyB0aGF0IGFsbCBvYmplY3RzIGNyZWF0ZWQgZHVyaW5nIHdoZW4gY2hl Y2tzdW1zIGFyZQotICogYmVpbmcgZW5hYmxlZCB3aWxsIGhhdmUgY2hlY2tzdW1zIHNldCwg YnV0IHJlYWRzIHdvbid0IGZhaWwgZHVlIHRvIG1pc3Npbmcgb3IKKyAqIHZlcmlmaWVkLiBU aGlzIGVuc3VyZXMgdGhhdCBhbGwgb2JqZWN0cyBjcmVhdGVkIHdoaWxlIGNoZWNrc3VtcyBh cmUgYmVpbmcKKyAqIGVuYWJsZWQgd2lsbCBoYXZlIGNoZWNrc3VtcyBzZXQsIGJ1dCByZWFk cyB3b24ndCBmYWlsIGR1ZSB0byBtaXNzaW5nIG9yCiAgKiBpbnZhbGlkIGNoZWNrc3Vtcy4g SW52YWxpZCBjaGVja3N1bXMgY2FuIGJlIHByZXNlbnQgaW4gY2FzZSB0aGUgY2x1c3RlciBo YWQKICAqIGNoZWNrc3VtcyBlbmFibGVkLCB0aGVuIGRpc2FibGVkIHRoZW0gYW5kIHVwZGF0 ZWQgdGhlIHBhZ2Ugd2hpbGUgdGhleSB3ZXJlCiAgKiBkaXNhYmxlZC4KQEAgLTI5OSwxMCAr Mjk5LDExIEBAIHR5cGVkZWYgc3RydWN0IERhdGFDaGVja3N1bXNTdGF0ZVN0cnVjdAogCWJv b2wJCWxhdW5jaGVyX3J1bm5pbmc7CiAKIAkvKgotCSAqIElzIGEgd29ya2VyIHByb2Nlc3Mg Y3VycmVudGx5IHJ1bm5pbmc/ICBUaGlzIGlzIHNldCBieSB0aGUgd29ya2VyCi0JICogbGF1 bmNoZXIgd2hlbiBpdCBzdGFydHMgd2FpdGluZyBmb3IgYSB3b3JrZXIgcHJvY2VzcyB0byBm aW5pc2guCisJICogUElEIG9mIHRoZSB3b3JrZXIgcHJvY2VzcywgaWYgaXQncyBjdXJyZW50 bHkgcnVubmluZywgb2YgSW52YWxpZFBpZAorCSAqIGlmIG5vbmUuIFRoaXMgaXMgc2V0IGJ5 IHRoZSB3b3JrZXIgbGF1bmNoZXIgd2hlbiBpdCBzdGFydHMgd2FpdGluZworCSAqIGZvciBh IHdvcmtlciBwcm9jZXNzIHRvIGZpbmlzaC4KIAkgKi8KLQlpbnQJCQl3b3JrZXJfcGlkOwor CXBpZF90CQl3b3JrZXJfcGlkOwogCiAJLyoKIAkgKiBUaGVzZSBmaWVsZHMgaW5kaWNhdGUg dGhlIHRhcmdldCBzdGF0ZSB0aGF0IHRoZSBsYXVuY2hlciBpcyBjdXJyZW50bHkKQEAgLTMy MCwxMiArMzIxLDggQEAgdHlwZWRlZiBzdHJ1Y3QgRGF0YUNoZWNrc3Vtc1N0YXRlU3RydWN0 CiAJaW50CQkJY29zdF9saW1pdDsKIAogCS8qCi0JICogU2lnbmFsaW5nIGJldHdlZW4gdGhl IGxhdW5jaGVyIGFuZCB0aGUgd29ya2VyIHByb2Nlc3MuCi0JICoKLQkgKiBBcyB0aGVyZSBp cyBvbmx5IGEgc2luZ2xlIHdvcmtlciwgYW5kIHRoZSBsYXVuY2hlciB3b24ndCByZWFkIHRo ZXNlCi0JICogdW50aWwgdGhlIHdvcmtlciBleGl0cywgdGhleSBjYW4gYmUgYWNjZXNzZWQg d2l0aG91dCB0aGUgbmVlZCBmb3IgYQotCSAqIGxvY2suIElmIG11bHRpcGxlIHdvcmtlcnMg YXJlIHN1cHBvcnRlZCB0aGVuIHRoaXMgd2lsbCBoYXZlIHRvIGJlCi0JICogcmV2aXNpdGVk LgorCSAqIFNpZ25hbGluZyBiZXR3ZWVuIHRoZSBsYXVuY2hlciBhbmQgdGhlIHdvcmtlciBw cm9jZXNzLiBQcm90ZWN0ZWQgYnkKKwkgKiBEYXRhQ2hlY2tzdW1zV29ya2VyTG9jay4KIAkg Ki8KIAogCS8qIHJlc3VsdCwgc2V0IGJ5IHdvcmtlciBiZWZvcmUgZXhpdGluZyAqLwpAQCAt NTk5LDkgKzU5Niw5IEBAIFN0YXJ0RGF0YUNoZWNrc3Vtc1dvcmtlckxhdW5jaGVyKERhdGFD aGVja3N1bXNXb3JrZXJPcGVyYXRpb24gb3AsCiAJICoKIAkgKiBJZiB0aGUgbGF1bmNoZXIg aXMgY3VycmVudGx5IGJ1c3kgZW5hYmxpbmcgdGhlIGNoZWNrc3VtcywgYW5kIHdlIHdhbnQK IAkgKiB0aGVtIGRpc2FibGVkIChvciB2aWNlIHZlcnNhKSwgdGhlIGxhdW5jaGVyIHdpbGwg bm90aWNlIHRoYXQgYXQgbGF0ZXN0Ci0JICogd2hlbiBpdCdzIGFib3V0IHRvIGV4aXQsIGFu ZCB3aWxsIGxvb3AgYmFjayBwcm9jZXNzIHRoZSBuZXcgcmVxdWVzdC4gU28KLQkgKiBpZiB0 aGUgbGF1bmNoZXIgaXMgYWxyZWFkeSBydW5uaW5nLCB3ZSBkb24ndCBuZWVkIHRvIGRvIGFu eXRoaW5nIG1vcmUKLQkgKiBoZXJlIHRvIGFib3J0IGl0LgorCSAqIHdoZW4gaXQncyBhYm91 dCB0byBleGl0LCBhbmQgd2lsbCBsb29wIGJhY2sgdG8gcHJvY2VzcyB0aGUgbmV3IHJlcXVl c3QuCisJICogU28gaWYgdGhlIGxhdW5jaGVyIGlzIGFscmVhZHkgcnVubmluZywgd2UgZG9u J3QgbmVlZCB0byBkbyBhbnl0aGluZworCSAqIG1vcmUgaGVyZSB0byBhYm9ydCBpdC4KIAkg KgogCSAqIElmIHlvdSBjYWxsIHBnX2VuYWJsZS9kaXNhYmxlX2RhdGFfY2hlY2tzdW1zKCkg dHdpY2UgaW4gYSByb3csIGJlZm9yZQogCSAqIHRoZSBsYXVuY2hlciBoYXMgaGFkIGEgY2hh bmNlIHRvIHN0YXJ0IHVwLCB3ZSBzdGlsbCBlbmQgdXAgbGF1bmNoaW5nIGl0CkBAIC03MTAs MTAgKzcwNyw3IEBAIFByb2Nlc3NTaW5nbGVSZWxhdGlvbkZvcmsoUmVsYXRpb24gcmVsbiwg Rm9ya051bWJlciBmb3JrTnVtLCBCdWZmZXJBY2Nlc3NTdHJhdGVnCiAKIAkJVW5sb2NrUmVs ZWFzZUJ1ZmZlcihidWYpOwogCi0JCS8qCi0JCSAqIFRoaXMgaXMgdGhlIG9ubHkgcGxhY2Ug d2hlcmUgd2UgY2hlY2sgaWYgd2UgYXJlIGFza2VkIHRvIGFib3J0LCB0aGUKLQkJICogYWJv cnRpb24gd2lsbCBidWJibGUgdXAgZnJvbSBoZXJlLgotCQkgKi8KKwkJLyogQ2hlY2sgaWYg d2UgYXJlIGFza2VkIHRvIGFib3J0LCB0aGUgYWJvcnRpb24gd2lsbCBidWJibGUgdXAuICov CiAJCUFzc2VydChvcGVyYXRpb24gPT0gRU5BQkxFX0RBVEFDSEVDS1NVTVMpOwogCQlMV0xv Y2tBY3F1aXJlKERhdGFDaGVja3N1bXNXb3JrZXJMb2NrLCBMV19TSEFSRUQpOwogCQlpZiAo RGF0YUNoZWNrc3VtU3RhdGUtPmxhdW5jaF9vcGVyYXRpb24gPT0gRElTQUJMRV9EQVRBQ0hF Q0tTVU1TKQpAQCAtOTI0LDggKzkxOCw4IEBAIFByb2Nlc3NEYXRhYmFzZShEYXRhQ2hlY2tz dW1zV29ya2VyRGF0YWJhc2UgKmRiKQogICogcGVyZm9ybWVkIGNoZWNrc3VtIG9wZXJhdGlv bnMgZXhpdHMuIEEgbGF1bmNoZXIgcHJvY2VzcyB3aGljaCBpcyBleGl0aW5nIGR1ZQogICog dG8gYSBkdXBsaWNhdGUgc3RhcnRlZCBsYXVuY2hlciBkb2VzIG5vdCBuZWVkIHRvIHBlcmZv cm0gYW55IGNsZWFudXAgYW5kCiAgKiB0aGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgY2Fs bGVkLiBPdGhlcndpc2UsIHdlIG5lZWQgdG8gY2xlYW4gdXAgdGhlIGFib3J0Ci0gKiBmbGFn IHRvIGVuc3VyZSB0aGF0IHByb2Nlc3Npbmcgc3RhcnRlZCBhZ2FpbiBpZiBpdCB3YXMgcHJl dmlvdXNseSBhYm9ydGVkCi0gKiAobm90ZTogc3RhcnRlZCBhZ2FpbiwgKm5vdCogcmVzdGFy dGVkIGZyb20gd2hlcmUgaXQgbGVmdCBvZmYpLgorICogZmxhZyB0byBlbnN1cmUgdGhhdCBw cm9jZXNzaW5nIGNhbiBiZSBzdGFydGVkIGFnYWluIGlmIGl0IHdhcyBwcmV2aW91c2x5Cisg KiBhYm9ydGVkIChub3RlOiBzdGFydGVkIGFnYWluLCAqbm90KiByZXN0YXJ0ZWQgZnJvbSB3 aGVyZSBpdCBsZWZ0IG9mZikuCiAgKi8KIHN0YXRpYyB2b2lkCiBsYXVuY2hlcl9leGl0KGlu dCBjb2RlLCBEYXR1bSBhcmcpCkBAIC0xNDM0LDcgKzE0MjgsNyBAQCBGcmVlRGF0YWJhc2VM aXN0KExpc3QgKmRibGlzdCkKICAqIEJ1aWxkUmVsYXRpb25MaXN0CiAgKgkJQ29tcGlsZSBh IGxpc3Qgb2YgcmVsYXRpb25zIGluIHRoZSBkYXRhYmFzZQogICoKLSAqIFJldHVybnMgYSBs aXN0IG9mIE9JRHMgZm9yIHRoZSByZXF1ZXN0IHJlbGF0aW9uIHR5cGVzLiBJZiB0ZW1wX3Jl bGF0aW9ucworICogUmV0dXJucyBhIGxpc3Qgb2YgT0lEcyBmb3IgdGhlIHJlcXVlc3RlZCBy ZWxhdGlvbiB0eXBlcy4gSWYgdGVtcF9yZWxhdGlvbnMKICAqIGlzIFRydWUgdGhlbiBvbmx5 IHRlbXBvcmFyeSByZWxhdGlvbnMgYXJlIHJldHVybmVkLiBJZiB0ZW1wX3JlbGF0aW9ucyBp cwogICogRmFsc2UgdGhlbiBub24tdGVtcG9yYXJ5IHJlbGF0aW9ucyB3aGljaCBoYXZlIGRh dGEgY2hlY2tzdW1zIGFyZSByZXR1cm5lZC4KICAqIElmIGluY2x1ZGVfc2hhcmVkIGlzIFRy dWUgdGhlbiBzaGFyZWQgcmVsYXRpb25zIGFyZSBpbmNsdWRlZCBhcyB3ZWxsIGluIGEKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvcG9zdGluaXQuYyBiL3NyYy9iYWNr ZW5kL3V0aWxzL2luaXQvcG9zdGluaXQuYwppbmRleCAyNDYwZTU1MGY5Ni4uYzE0NTdlYjM0 ZjAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvcG9zdGluaXQuYworKysg Yi9zcmMvYmFja2VuZC91dGlscy9pbml0L3Bvc3Rpbml0LmMKQEAgLTc3Myw3ICs3NzMsNyBA QCBJbml0UG9zdGdyZXMoY29uc3QgY2hhciAqaW5fZGJuYW1lLCBPaWQgZGJvaWQsCiAJICoK IAkgKiBUaGUgcG9zdG1hc3RlciAod2hpY2ggaXMgd2hhdCBnZXRzIGZvcmtlZCBpbnRvIHRo ZSBuZXcgY2hpbGQgcHJvY2VzcykKIAkgKiBkb2VzIG5vdCBoYW5kbGUgYmFycmllcnMsIHRo ZXJlZm9yZSBpdCBtYXkgbm90IGhhdmUgdGhlIGN1cnJlbnQgdmFsdWUKLQkgKiBvZiBMb2Nh bERhdGFDaGVja3N1bVZlcnNpb24gdmFsdWUgKGl0J2xsIGhhdmUgdGhlIHZhbHVlIHJlYWQg ZnJvbSB0aGUKKwkgKiBvZiBMb2NhbERhdGFDaGVja3N1bVN0YXRlIHZhbHVlIChpdCdsbCBo YXZlIHRoZSB2YWx1ZSByZWFkIGZyb20gdGhlCiAJICogY29udHJvbCBmaWxlLCB3aGljaCBt YXkgYmUgYXJiaXRyYXJpbHkgb2xkKS4KIAkgKgogCSAqIE5COiBFdmVuIGlmIHRoZSBwb3N0 bWFzdGVyIGhhbmRsZWQgYmFycmllcnMsIHRoZSB2YWx1ZSBtaWdodCBzdGlsbCBiZQo= --------------oNPPFw3Ql27McpvLvUYfV0Ix--