Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1ttTm9-00CzDd-O9 for pgsql-hackers@arkaria.postgresql.org; Sat, 15 Mar 2025 15:50:14 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1ttTm8-00GA6r-2S for pgsql-hackers@arkaria.postgresql.org; Sat, 15 Mar 2025 15:50:12 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1ttTm7-00GA6j-B6 for pgsql-hackers@lists.postgresql.org; Sat, 15 Mar 2025 15:50:11 +0000 Received: from relay7-d.mail.gandi.net ([2001:4b98:dc4:8::227]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1ttTm1-00327R-2Q for pgsql-hackers@lists.postgresql.org; Sat, 15 Mar 2025 15:50:10 +0000 Received: by mail.gandi.net (Postfix) with ESMTPSA id 25AE844318; Sat, 15 Mar 2025 15:50:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vondra.me; s=gm1; t=1742053805; 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=bqN0DtNB3lniTYVM/cQ7Rr8NiQ/f8PlxxxWp/NittqY=; b=fU1FzuI0Bb2qF9nsMMgTawp9j+IPXx0l/9hBMbPLk5m/FPxa+E5vF9Rgat//eylC3C1vZX QYTeTzkVQO+UIUKk7titrh5aJORp+JuimV2BwE5Ao89a56svIzmwBfV9tP02e0hhdXq8wu M/05SyfzkRvnUsyszG73XcSBGPs7/fASGCpBpafktKRFRlvQMTR1W9gMv3nb2QsTGoV8kt DRb1POhKcrY0oFNA37I+7/ock1Iu2hHYmFROWd+/rDccxqDs7KOp0BtXydodxuzlQhNwbl JilTK9pqfoli84ZTlkdmzO7HPeucdupwzhtqI3Jd+5acxHFsog9LXJBwV4h09g== Content-Type: multipart/mixed; boundary="------------hwLAc5AR555AcYbidDDolObH" Message-ID: Date: Sat, 15 Mar 2025 16:50:02 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Changing the state of data checksums in a running cluster To: Daniel Gustafsson Cc: Michael Paquier , Michael Banck , PostgreSQL Hackers References: <8B317721-1CB7-4F82-B4DA-6B15AB1725D1@yesql.se> <25edd1d1-e693-4386-bbcc-765ea1820044@vondra.me> <49f6df22-7a40-4ce1-a651-111ac033b2bb@vondra.me> <82E20987-0A25-489C-935B-B54ABF165542@yesql.se> <9a2f67a1-faba-423d-bd3d-08a01ca35494@vondra.me> <40eb5e02-e715-43d3-a618-f60555bb407c@vondra.me> <9591d5d0-1fb1-4b43-bf09-501b6df5d227@vondra.me> <5AED03AE-C15F-43DD-93AE-CCD6F3DC6A07@yesql.se> <854de38e-8899-4095-8245-6531d86060c9@vondra.me> <87ce475d-1a21-4aa9-914f-7f37159ef010@vondra.me> <3372a09c-d1f6-4974-ad60-eec15ee0c734@vondra.me> <3E9E1AF5-5344-45C5-9B38-A166CE57472E@yesql.se> <442AB85E-028E-419E-A330-40F7D3445871@yesql.se> Content-Language: en-US From: Tomas Vondra In-Reply-To: <442AB85E-028E-419E-A330-40F7D3445871@yesql.se> X-GND-State: clean X-GND-Score: -100 X-GND-Cause: gggruggvucftvghtrhhoucdtuddrgeefvddrtddtgddufeegudefucetufdoteggodetrfdotffvucfrrhhofhhilhgvmecuifetpfffkfdpucggtfgfnhhsuhgsshgtrhhisggvnecuuegrihhlohhuthemuceftddunecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenucfjughrpegtkfffgggfuffvvehfhfgjsehmtderredtvdejnecuhfhrohhmpefvohhmrghsucggohhnughrrgcuoehtohhmrghssehvohhnughrrgdrmhgvqeenucggtffrrghtthgvrhhnpeekudfhgfelgefhjedtheelhffgudegjedufefftedutdehlefhjeeftdevieefieenucfkphepkeeirdegledrvdefiedrudelfeenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepihhnvghtpeekiedrgeelrddvfeeirdduleefpdhhvghloheplgdutddrudefjedrtddrudekngdpmhgrihhlfhhrohhmpehtohhmrghssehvohhnughrrgdrmhgvpdhnsggprhgtphhtthhopeegpdhrtghpthhtohepuggrnhhivghlseihvghsqhhlrdhsvgdprhgtphhtthhopehmihgthhgrvghlsehprghquhhivghrrdighiiipdhrtghpthhtohepmhgsrghntghksehgmhigrdhnvghtpdhrtghpthhtohepphhgshhqlhdqhhgrtghkvghrsheslhhishhtshdrphhoshhtghhrvghsqhhlrdhorhhg X-GND-Sasl: tomas@vondra.me 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. --------------hwLAc5AR555AcYbidDDolObH Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 3/14/25 15:06, Daniel Gustafsson wrote: >> On 14 Mar 2025, at 14:38, Daniel Gustafsson wrote: >>> On 14 Mar 2025, at 13:20, Tomas Vondra wrote: > >>> This is "ephemeral" in the sense that setting the value to "on" again >>> would be harmless, and indeed a non-assert build will run just fine. >> >> As mentioned off-list, being able to loosen the restriction for the first >> barrier seen seem like a good way to keep this assertion. Removing it is of >> course the alternative solution, as it's not causing any issues, but given how >> handy it's been to find actual issues it would be good to be able to keep it. >> >>> i.e. to first register into procsignal, and then read the new value. >>> AFAICS this guarantees we won't lose any checksum version updates. It >>> does mean we still can get a barrier for a value we've already seen, but >>> I think we should simply ignore this for the very first update. >> >> Calling functions with sideeffects in setting state seems like a bad idea >> before ProcSignalInit has run, that's thinko on my part in this patch. Your >> solution of reordering seems like the right way to handle this. > > 0006 in the attached version is what I have used when testing the above, along > with an update to the copyright year which I had missed doing earlier. It also > contains the fix in LocalProcessControlFile which I had in my local tree, I > think we need something like that at least. > Thanks, here's an updated patch version - I squashed all the earlier parts, but I kept your changes and my adjustments separate, for clarity. A couple comments: 1) I don't think the comment before InitialDataChecksumTransition was entirely accurate, because it said we can see the duplicate state only for "on" state. But AFAICS we can see duplicate values for any states, except that we only have an assert for the "on" so we don't notice the other cases. I wonder if we could strengthen this a bit, by adding some asserts for the other states too. 2) I admit it's rather subjective, but I didn't like how you did the assert in AbsorbChecksumsOnBarrier. But looking at it now in the diff, maybe it was more readable ... 3) I renamed InitLocalControldata() to InitLocalDataChecksumVersion(). The name was entirely misleading, because it now initializes the flag in XLogCtl, it has nothing to do with control file. 4) I realized AuxiliaryProcessMainCommon() may be a better place to initialize the checksum flag for non-backend processes. In fact, doing it in postmaster_child_launch() had the same race condition because it happened before ProcSignalInit(). I'm sure there's cleanup possible in a bunch of places, but the really bad thing is I realized the handling on a standby is not quite correct. I don't know what exactly is happening, there's too many moving bits, but here's what I see ... Every now and then, after restarting the standby, it logs a bunch of page verification failures. Stuff like this: WARNING: page verification failed, calculated checksum 9856 but expected 0 CONTEXT: WAL redo at 0/3447BA8 for Heap2/VISIBLE: snapshotConflictHorizon: 0, flags: 0x03; blkref #0: rel 1663/16384/16401, fork 2, blk 0 FPW; blkref #1: rel 1663/16384/16401, blk 0 WARNING: page verification failed, LSN 0/CF54C10 This is after an immediate shutdown, but I've seen similar failures for fast shutdowns too (the root causes may be different / may need a different fix, not sure). The instance restarts, and the "startup" process starts recovery LOG: redo starts at 0/2000028 This matches LSN from the very first start of the standby - there were no restart points since then, apparently. And since then the primary did this with the checksums (per pg_waldump): lsn: 0/0ECCFC48, prev 0/0ECCFBA0, desc: CHECKSUMS inprogress-off lsn: 0/0ECD0168, prev 0/0ECD0128, desc: CHECKSUMS off The instance already saw both records before the immediate shutdown (per the logging in patch 0004), but after the restart the instance goes back to having checksums enabled again data_checksum_version = 1 Which is correct, because it starts at 0/2000028, which is before either of the XLOG_CHECKSUMS records. But then at 0/3447BA8 (which is *before* either of the checksum changes) it tries to read a page from disk, and hits a checksum error. That page is from the future (per the page LSN logged by patch 0004), but it's still before both XLOG_CHECKSUMS messages. So how come the page has pd_checksum 0? I'd have understood if the page came "broken" from the primary, but I've not seen a single page verification failure on that side (and it's subject to the same fast/immediate restarts, etc). I wonder if this might be related to how we enforce checkpoints only when setting the checksums to "on" on the primary. Maybe that's safe on primary but not on a standby? FWIW I've seen similar issues for "fast" shutdowns too - at least the symptoms are similar, but the mechanism might be a bit different. In particular, I suspect there's some sort of thinko in updating the data_checksum_version in the control file, but I can't put my finger on it yet. Another thing I noticed is this comment in CreateRestartPoint(), before one of the early exits: /* * If the last checkpoint record we've replayed is already our last * restartpoint, we can't perform a new restart point. We still update * minRecoveryPoint in that case, so that if this is a shutdown restart * point, we won't start up earlier than before. That's not strictly * necessary, but when hot standby is enabled, it would be rather weird * if the database opened up for read-only connections at a * point-in-time before the last shutdown. Such time travel is still * possible in case of immediate shutdown, though. * ... I wonder if this "time travel backwards" might be an issue for this too, because it might mean we end up picking the wrong data_checksum_version from the control file. In any case, if this happens, we don't get to the ControlFile->data_checksum_version update a bit further down. And there's another condition that can skip that. I'll continue investigating this next week, but at this point I'm quite confused and would be grateful for any insights ... regards -- Tomas Vondra --------------hwLAc5AR555AcYbidDDolObH Content-Type: text/x-patch; charset=UTF-8; name="v20250315-0001-Online-enabling-and-disabling-of-data-chec.patch" Content-Disposition: attachment; filename*0="v20250315-0001-Online-enabling-and-disabling-of-data-chec.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBmNzJmNWFhNDY2ZmIzMDhlZTU4MTZiNzI5Njg2NzdkODU1MzdjYjU3IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogRnJpLCA3IE1hciAyMDI1IDE5OjIxOjIyICswMTAwClN1YmplY3Q6IFtQQVRDSCB2 MjAyNTAzMTUgMS80XSBPbmxpbmUgZW5hYmxpbmcgYW5kIGRpc2FibGluZyBvZiBkYXRhIGNo ZWNrc3VtcwoKVGhpcyBhbGxvd3MgZGF0YSBjaGVja3N1bXMgdG8gYmUgZW5hYmxlZCwgb3Ig ZGlzYWJsZWQsIGluIGEgcnVubmluZwpjbHVzdGVyIHdpdGhvdXQgcmVzdHJpY3RpbmcgYWNj ZXNzIHRvIHRoZSBjbHVzdGVyIGR1cmluZyBwcm9jZXNzaW5nLgoKRGF0YSBjaGVja3N1bXMg Y291bGQgcHJpb3IgdG8gdGhpcyBvbmx5IGJlIGVuYWJsZWQgZHVyaW5nIGluaXRkYiBvcgp3 aGVuIHRoZSBjbHVzdGVyIGlzIG9mZmxpbmUgdXNpbmcgdGhlIHBnX2NoZWNrc3VtcyBhcHAu IFRoaXMgY29tbWl0CmludHJvZHVjZSBmdW5jdGlvbmFsaXR5IHRvIGVuYWJsZSwgb3IgZGlz YWJsZSwgZGF0YSBjaGVja3N1bXMgd2hpbGUKdGhlIGNsdXN0ZXIgaXMgcnVubmluZyByZWdh cmRsZXNzIG9mIGhvdyBpdCB3YXMgaW5pdGlhbGl6ZWQuCgpBIGJhY2tncm91bmQgd29ya2Vy IGxhdW5jaGVyIHByb2Nlc3MgaXMgcmVzcG9uc2libGUgZm9yIGxhdW5jaGluZyBhCmR5bmFt aWMgcGVyLWRhdGFiYXNlIGJhY2tncm91bmQgd29ya2VyIHdoaWNoIHdpbGwgbWFyayBhbGwg YnVmZmVycwpkaXJ0eSBmb3IgYWxsIHJlbGF0aW9uIHdpdGggc3RvcmFnZSBpbiBvcmRlciBm b3IgdGhlbSB0byBoYXZlIGRhdGEKY2hlY2tzdW1zIGNhbGN1YXRlZCBvbiB3cml0ZS4gIE9u Y2UgYWxsIHJlbGF0aW9ucyBpbiBhbGwgZGF0YWJhc2VzCmhhdmUgYmVlbiBwcm9jZXNzZWQs IHRoZSBkYXRhX2NoZWNrc3VtcyBzdGF0ZSB3aWxsIGJlIHNldCB0byBvbiBhbmQKdGhlIGNs dXN0ZXIgd2lsbCBhdCB0aGF0IHBvaW50IGJlIGlkZW50aWNhbCB0byBvbmUgd2hpY2ggaGFk IGRhdGEKY2hlY2tzdW1zIGVuYWJsZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uIG9yIHZpYSBv ZmZsaW5lIHByb2Nlc3NpbmcuCgpXaGVuIGRhdGEgY2hlY2tzdW1zIGFyZSBiZWluZyBlbmFi bGVkLCBjb25jdXJyZW50IEkvTyBvcGVyYXRpb25zCmZyb20gYmFja2VuZHMgb3RoZXIgdGhh biB0aGUgZGF0YSBjaGVja3N1bXMgd29ya2VyIHdpbGwgd3JpdGUgdGhlCmNoZWNrc3VtcyBi dXQgbm90IHZlcmlmeSB0aGVtIG9uIHJlYWRpbmcuICBPbmx5IHdoZW4gYWxsIGJhY2tlbmRz CmhhdmUgYWJzb3JiZWQgdGhlIHByb2NzaWduYWxiYXJyaWVyIGZvciBzZXR0aW5nIGRhdGFf Y2hlY2tzdW1zIHRvCm9uIHdpbGwgdGhleSBhbHNvIHN0YXJ0IHZlcmlmeWluZyBjaGVja3N1 bXMgb24gcmVhZGluZy4gIFRoZSBzYW1lCnByb2Nlc3MgaXMgcmVwZWF0ZWQgZHVyaW5nIGRp c2FibGluZzsgYWxsIGJhY2tlbmRzIHdyaXRlIGNoZWNrc3VtcwpidXQgZG8gbm90IHZlcmlm eSB0aGVtIHVudGlsIHRoZSBiYXJyaWVyIGZvciBzZXR0aW5nIHRoZSBzdGF0ZSB0bwpvZmYg aGFzIGJlZW4gYWJzb3JiZWQgYnkgYWxsLiAgVGhpcyBpbi1wcm9ncmVzcyBzdGF0ZSBpcyB1 c2VkIHRvCmVuc3VyZSB0aGVyZSBhcmUgbm8gZmFsc2UgbmVnYXRpdmVzIChvciBwb3NpdGl2 ZXMpIGR1ZSB0byByZWFkaW5nCmEgY2hlY2tzdW0gd2hpY2ggaXMgbm90IGluIHN5bmMgd2l0 aCB0aGUgcGFnZS4KClRoaXMgd29yayBpcyBiYXNlZCBvbiBhbiBlYXJsaWVyIHZlcnNpb24g b2YgdGhpcyBwYXRjaCB3aGljaCB3YXMKcmV2aWV3ZWQgYnkgYW1vbmcgb3RoZXJzIEhlaWtr aSBMaW5uYWthbmdhcywgUm9iZXJ0IEhhYXMsIEFuZHJlcwpGcmV1bmQsIFRvbWFzIFZvbmRy YSwgTWljaGFlbCBCYW5jayBhbmQgQW5kcmV5IEJvcm9kaW4uCgpBdXRob3I6IERhbmllbCBH dXN0YWZzc29uIDxkYW5pZWxAeWVzcWwuc2U+CkF1dGhvcjogTWFnbnVzIEhhZ2FuZGVyIDxt YWdudXNAaGFnYW5kZXIubmV0PgpSZXZpZXdlZC1ieTogVG9tYXMgVm9uZHJhIDx0b21hc0B2 b25kcmEubWU+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FCVWV2RXh6OWhV VU9MbkpWcjJrcHc5Q3g9bzRNQ3IxU1ZLd2J1cHp1eFA3Y2tOdXRBQG1haWwuZ21haWwuY29t CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vMjAxODEwMzAwNTE2NDMuZWxieGp3 dzVqamduamF4Z0BhbGFwMy5hbmFyYXplbC5kZQpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rn ci5lcy9tL0NBQlVldkV3RTN1ckx0d3h4cWRnZDVPMm9RejlKNzE3WnpNYmgremlDU2E1WUxM VV9CQUBtYWlsLmdtYWlsLmNvbQotLS0KIGRvYy9zcmMvc2dtbC9mdW5jLnNnbWwgICAgICAg ICAgICAgICAgICAgICAgICB8ICAgNzEgKwogZG9jL3NyYy9zZ21sL2dsb3NzYXJ5LnNnbWwg ICAgICAgICAgICAgICAgICAgIHwgICAyMyArCiBkb2Mvc3JjL3NnbWwvbW9uaXRvcmluZy5z Z21sICAgICAgICAgICAgICAgICAgfCAgMjA4ICsrLQogZG9jL3NyYy9zZ21sL3JlZi9wZ19j aGVja3N1bXMuc2dtbCAgICAgICAgICAgIHwgICAgNiArCiBkb2Mvc3JjL3NnbWwvd2FsLnNn bWwgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDU5ICstCiBzcmMvYmFja2VuZC9hY2Nl c3Mvcm1ncmRlc2MveGxvZ2Rlc2MuYyAgICAgICAgfCAgIDI0ICsKIHNyYy9iYWNrZW5kL2Fj Y2Vzcy90cmFuc2FtL3hsb2cuYyAgICAgICAgICAgICB8ICA1NTQgKysrKysrLQogc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ2Z1bmNzLmMgICAgICAgIHwgICA0MSArCiBzcmMv YmFja2VuZC9iYWNrdXAvYmFzZWJhY2t1cC5jICAgICAgICAgICAgICAgfCAgICA2ICstCiBz cmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV9mdW5jdGlvbnMuc3FsICAgICAgfCAgIDExICsK IHNyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbCAgICAgICAgICB8ICAgMjAg Kwogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9NYWtlZmlsZSAgICAgICAgICAgICAgIHwgICAg MSArCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMgICAgICAgICAgICAgfCAg ICA3ICsKIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvZGF0YWNoZWNrc3Vtc3dvcmtlci5jICB8 IDE0MzkgKysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvbGF1bmNo X2JhY2tlbmQuYyAgICAgICB8ICAgMTMgKwogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9tZXNv bi5idWlsZCAgICAgICAgICAgIHwgICAgMSArCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bv c3RtYXN0ZXIuYyAgICAgICAgICAgfCAgICA1ICsKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvZGVjb2RlLmMgICAgICB8ICAgIDEgKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9p cGMvaXBjaS5jICAgICAgICAgICAgICAgIHwgICAgNCArCiBzcmMvYmFja2VuZC9zdG9yYWdl L2lwYy9wcm9jc2lnbmFsLmMgICAgICAgICAgfCAgIDEzICsKIHNyYy9iYWNrZW5kL3N0b3Jh Z2UvcGFnZS9SRUFETUUgICAgICAgICAgICAgICB8ICAgIDQgKy0KIHNyYy9iYWNrZW5kL3N0 b3JhZ2UvcGFnZS9idWZwYWdlLmMgICAgICAgICAgICB8ICAgIDYgKy0KIHNyYy9iYWNrZW5k L3V0aWxzL2FjdGl2aXR5L3Bnc3RhdF9iYWNrZW5kLmMgICB8ICAgIDIgKwogc3JjL2JhY2tl bmQvdXRpbHMvYWN0aXZpdHkvcGdzdGF0X2lvLmMgICAgICAgIHwgICAgMiArCiAuLi4vdXRp bHMvYWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50eHQgICAgICAgfCAgICAzICsKIHNyYy9i YWNrZW5kL3V0aWxzL2FkdC9wZ3N0YXRmdW5jcy5jICAgICAgICAgICB8ICAgIDggKy0KIHNy Yy9iYWNrZW5kL3V0aWxzL2luaXQvbWlzY2luaXQuYyAgICAgICAgICAgICB8ICAgIDkgKy0K IHNyYy9iYWNrZW5kL3V0aWxzL2luaXQvcG9zdGluaXQuYyAgICAgICAgICAgICB8ICAgIDcg Ky0KIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jICAgICAgICAgICB8ICAg MzEgKy0KIHNyYy9iaW4vcGdfY2hlY2tzdW1zL3BnX2NoZWNrc3Vtcy5jICAgICAgICAgICB8 ICAgIDIgKy0KIHNyYy9iaW4vcGdfdXBncmFkZS9jb250cm9sZGF0YS5jICAgICAgICAgICAg ICB8ICAgIDkgKwogc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2cuaCAgICAgICAgICAgICAgICAg ICAgIHwgICAxNyArLQogc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2dfaW50ZXJuYWwuaCAgICAg ICAgICAgIHwgICAgNyArCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX2NvbnRyb2wuaCAgICAg ICAgICAgICAgfCAgICA2ICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAg ICAgICAgICAgICAgfCAgIDE3ICsKIHNyYy9pbmNsdWRlL2NvbW1hbmRzL3Byb2dyZXNzLmgg ICAgICAgICAgICAgICB8ICAgMTYgKwogc3JjL2luY2x1ZGUvbWlzY2FkbWluLmggICAgICAg ICAgICAgICAgICAgICAgIHwgICAxMCArCiBzcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2RhdGFj aGVja3N1bXN3b3JrZXIuaCAgfCAgIDMxICsKIHNyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmcGFn ZS5oICAgICAgICAgICAgICAgICB8ICAgMTAgKwogc3JjL2luY2x1ZGUvc3RvcmFnZS9jaGVj a3N1bS5oICAgICAgICAgICAgICAgIHwgICAgOCArCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2x3 bG9ja2xpc3QuaCAgICAgICAgICAgICAgfCAgICAxICsKIHNyYy9pbmNsdWRlL3N0b3JhZ2Uv cHJvYy5oICAgICAgICAgICAgICAgICAgICB8ICAgIDUgKy0KIHNyYy9pbmNsdWRlL3N0b3Jh Z2UvcHJvY3NpZ25hbC5oICAgICAgICAgICAgICB8ICAgIDUgKwogc3JjL2luY2x1ZGUvdXRp bHMvYmFja2VuZF9wcm9ncmVzcy5oICAgICAgICAgIHwgICAgMSArCiBzcmMvdGVzdC9NYWtl ZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDExICstCiBzcmMvdGVzdC9j aGVja3N1bS8uZ2l0aWdub3JlICAgICAgICAgICAgICAgICAgfCAgICAyICsKIHNyYy90ZXN0 L2NoZWNrc3VtL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICB8ICAgMjMgKwogc3JjL3Rl c3QvY2hlY2tzdW0vUkVBRE1FICAgICAgICAgICAgICAgICAgICAgIHwgICAyMiArCiBzcmMv dGVzdC9jaGVja3N1bS9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgfCAgIDE1ICsKIHNy Yy90ZXN0L2NoZWNrc3VtL3QvMDAxX2Jhc2ljLnBsICAgICAgICAgICAgICB8ICAgODggKwog c3JjL3Rlc3QvY2hlY2tzdW0vdC8wMDJfcmVzdGFydHMucGwgICAgICAgICAgIHwgICA5MiAr Kwogc3JjL3Rlc3QvY2hlY2tzdW0vdC8wMDNfc3RhbmRieV9yZXN0YXJ0cy5wbCAgIHwgIDEz OSArKwogc3JjL3Rlc3QvY2hlY2tzdW0vdC8wMDRfb2ZmbGluZS5wbCAgICAgICAgICAgIHwg IDEwMSArKwogc3JjL3Rlc3QvbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgICAgICAgICAg IHwgICAgMSArCiBzcmMvdGVzdC9wZXJsL1Bvc3RncmVTUUwvVGVzdC9DbHVzdGVyLnBtICAg ICAgfCAgIDM2ICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVsZXMub3V0ICAgICAg ICAgICB8ICAgMzYgKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdGF0cy5vdXQgICAg ICAgICAgIHwgICAxOCArLQogc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDEzX3BhcnRpdGlv bi5wbCAgICAgIHwgICAgMyArLQogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3Qg ICAgICAgICAgICAgIHwgICAgNiArCiA1OSBmaWxlcyBjaGFuZ2VkLCAzMjYzIGluc2VydGlv bnMoKyksIDU0IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5k L3Bvc3RtYXN0ZXIvZGF0YWNoZWNrc3Vtc3dvcmtlci5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg c3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9kYXRhY2hlY2tzdW1zd29ya2VyLmgKIGNyZWF0ZSBt b2RlIDEwMDY0NCBzcmMvdGVzdC9jaGVja3N1bS8uZ2l0aWdub3JlCiBjcmVhdGUgbW9kZSAx MDA2NDQgc3JjL3Rlc3QvY2hlY2tzdW0vTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz cmMvdGVzdC9jaGVja3N1bS9SRUFETUUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9j aGVja3N1bS9tZXNvbi5idWlsZAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L2NoZWNr c3VtL3QvMDAxX2Jhc2ljLnBsCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvY2hlY2tz dW0vdC8wMDJfcmVzdGFydHMucGwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9jaGVj a3N1bS90LzAwM19zdGFuZGJ5X3Jlc3RhcnRzLnBsCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3Jj L3Rlc3QvY2hlY2tzdW0vdC8wMDRfb2ZmbGluZS5wbAoKZGlmZiAtLWdpdCBhL2RvYy9zcmMv c2dtbC9mdW5jLnNnbWwgYi9kb2Mvc3JjL3NnbWwvZnVuYy5zZ21sCmluZGV4IDFjMzgxMGUx YTA0Li4wZGY1MDY3YzJjNiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbAor KysgYi9kb2Mvc3JjL3NnbWwvZnVuYy5zZ21sCkBAIC0yOTg4Miw2ICsyOTg4Miw3NyBAQCBw b3N0Z3Jlcz0jIFNFTEVDVCAnMC8wJzo6cGdfbHNuICsgcGQuc2VnbWVudF9udW1iZXIgKiBw cy5zZXR0aW5nOjppbnQgKyA6b2Zmc2V0CiAKICAgPC9zZWN0Mj4KIAorICA8c2VjdDIgaWQ9 ImZ1bmN0aW9ucy1hZG1pbi1jaGVja3N1bSI+CisgICA8dGl0bGU+RGF0YSBDaGVja3N1bSBG dW5jdGlvbnM8L3RpdGxlPgorCisgICA8cGFyYT4KKyAgICBUaGUgZnVuY3Rpb25zIHNob3du IGluIDx4cmVmIGxpbmtlbmQ9ImZ1bmN0aW9ucy1jaGVja3N1bXMtdGFibGUiIC8+IGNhbgor ICAgIGJlIHVzZWQgdG8gZW5hYmxlIG9yIGRpc2FibGUgZGF0YSBjaGVja3N1bXMgaW4gYSBy dW5uaW5nIGNsdXN0ZXIuCisgICAgU2VlIDx4cmVmIGxpbmtlbmQ9ImNoZWNrc3VtcyIgLz4g Zm9yIGRldGFpbHMuCisgICA8L3BhcmE+CisKKyAgIDx0YWJsZSBpZD0iZnVuY3Rpb25zLWNo ZWNrc3Vtcy10YWJsZSI+CisgICAgPHRpdGxlPkRhdGEgQ2hlY2tzdW0gRnVuY3Rpb25zPC90 aXRsZT4KKyAgICA8dGdyb3VwIGNvbHM9IjEiPgorICAgICA8dGhlYWQ+CisgICAgICA8cm93 PgorICAgICAgIDxlbnRyeSByb2xlPSJmdW5jX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJm dW5jX3NpZ25hdHVyZSI+CisgICAgICAgIEZ1bmN0aW9uCisgICAgICAgPC9wYXJhPgorICAg ICAgIDxwYXJhPgorICAgICAgICBEZXNjcmlwdGlvbgorICAgICAgIDwvcGFyYT48L2VudHJ5 PgorICAgICAgPC9yb3c+CisgICAgIDwvdGhlYWQ+CisKKyAgICAgPHRib2R5PgorICAgICAg PHJvdz4KKyAgICAgICA8ZW50cnkgcm9sZT0iZnVuY190YWJsZV9lbnRyeSI+PHBhcmEgcm9s ZT0iZnVuY19zaWduYXR1cmUiPgorICAgICAgICA8aW5kZXh0ZXJtPgorICAgICAgICAgPHBy aW1hcnk+cGdfZW5hYmxlX2RhdGFfY2hlY2tzdW1zPC9wcmltYXJ5PgorICAgICAgICA8L2lu ZGV4dGVybT4KKyAgICAgICAgPGZ1bmN0aW9uPnBnX2VuYWJsZV9kYXRhX2NoZWNrc3Vtczwv ZnVuY3Rpb24+ICggPG9wdGlvbmFsPjxwYXJhbWV0ZXI+Y29zdF9kZWxheTwvcGFyYW1ldGVy PiA8dHlwZT5pbnQ8L3R5cGU+LCA8cGFyYW1ldGVyPmNvc3RfbGltaXQ8L3BhcmFtZXRlcj4g PHR5cGU+aW50PC90eXBlPjwvb3B0aW9uYWw+ICkKKyAgICAgICAgPHJldHVybnZhbHVlPnZv aWQ8L3JldHVybnZhbHVlPgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAg ICAgSW5pdGlhdGVzIGRhdGEgY2hlY2tzdW1zIGZvciB0aGUgY2x1c3Rlci4gVGhpcyB3aWxs IHN3aXRjaCB0aGUgZGF0YQorICAgICAgICBjaGVja3N1bXMgbW9kZSB0byA8bGl0ZXJhbD5p bnByb2dyZXNzLW9uPC9saXRlcmFsPiBhcyB3ZWxsIGFzIHN0YXJ0IGEKKyAgICAgICAgYmFj a2dyb3VuZCB3b3JrZXIgdGhhdCB3aWxsIHByb2Nlc3MgYWxsIHBhZ2VzIGluIHRoZSBkYXRh YmFzZSBhbmQKKyAgICAgICAgZW5hYmxlIGNoZWNrc3VtcyBvbiB0aGVtLiBXaGVuIGFsbCBk YXRhIHBhZ2VzIGhhdmUgaGFkIGNoZWNrc3VtcworICAgICAgICBlbmFibGVkLCB0aGUgY2x1 c3RlciB3aWxsIGF1dG9tYXRpY2FsbHkgc3dpdGNoIGRhdGEgY2hlY2tzdW1zIG1vZGUgdG8K KyAgICAgICAgPGxpdGVyYWw+b248L2xpdGVyYWw+LgorICAgICAgIDwvcGFyYT4KKyAgICAg ICA8cGFyYT4KKyAgICAgICAgSWYgPHBhcmFtZXRlcj5jb3N0X2RlbGF5PC9wYXJhbWV0ZXI+ IGFuZCA8cGFyYW1ldGVyPmNvc3RfbGltaXQ8L3BhcmFtZXRlcj4gYXJlCisgICAgICAgIHNw ZWNpZmllZCwgdGhlIHNwZWVkIG9mIHRoZSBwcm9jZXNzIGlzIHRocm90dGxlZCB1c2luZyB0 aGUgc2FtZSBwcmluY2lwbGVzIGFzCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9InJ1bnRpbWUt Y29uZmlnLXJlc291cmNlLXZhY3V1bS1jb3N0Ij5Db3N0LWJhc2VkIFZhY3V1bSBEZWxheTwv bGluaz4uCisgICAgICAgPC9wYXJhPjwvZW50cnk+CisgICAgICA8L3Jvdz4KKworICAgICAg PHJvdz4KKyAgICAgICA8ZW50cnkgcm9sZT0iZnVuY190YWJsZV9lbnRyeSI+PHBhcmEgcm9s ZT0iZnVuY19zaWduYXR1cmUiPgorICAgICAgICA8aW5kZXh0ZXJtPgorICAgICAgICAgPHBy aW1hcnk+cGdfZGlzYWJsZV9kYXRhX2NoZWNrc3VtczwvcHJpbWFyeT4KKyAgICAgICAgPC9p bmRleHRlcm0+CisgICAgICAgIDxmdW5jdGlvbj5wZ19kaXNhYmxlX2RhdGFfY2hlY2tzdW1z PC9mdW5jdGlvbj4gKCkKKyAgICAgICAgPHJldHVybnZhbHVlPnZvaWQ8L3JldHVybnZhbHVl PgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgRGlzYWJsZXMgZGF0 YSBjaGVja3N1bSB2YWxpZGF0aW9uIGFuZCBjYWxjdWxhdGlvbiBmb3IgdGhlIGNsdXN0ZXIu IFRoaXMKKyAgICAgICAgd2lsbCBzd2l0Y2ggdGhlIGRhdGEgY2hlY2tzdW0gbW9kZSB0byA8 bGl0ZXJhbD5pbnByb2dyZXNzLW9mZjwvbGl0ZXJhbD4KKyAgICAgICAgd2hpbGUgZGF0YSBj aGVja3N1bXMgYXJlIGJlaW5nIGRpc2FibGVkLiBXaGVuIGFsbCBhY3RpdmUgYmFja2VuZHMg aGF2ZQorICAgICAgICBzdG9wcGVkIHZhbGlkYXRpbmcgZGF0YSBjaGVja3N1bXMsIHRoZSBk YXRhIGNoZWNrc3VtIG1vZGUgd2lsbCBiZQorICAgICAgICBjaGFuZ2VkIHRvIDxsaXRlcmFs Pm9mZjwvbGl0ZXJhbD4uICBBdCB0aGlzIHBvaW50IHRoZSBkYXRhIHBhZ2VzIHdpbGwKKyAg ICAgICAgc3RpbGwgaGF2ZSBjaGVja3N1bXMgcmVjb3JkZWQgYnV0IHRoZXkgYXJlIG5vdCB1 cGRhdGVkIHdoZW4gcGFnZXMgYXJlCisgICAgICAgIG1vZGlmaWVkLgorICAgICAgIDwvcGFy YT48L2VudHJ5PgorICAgICAgPC9yb3c+CisgICAgIDwvdGJvZHk+CisgICAgPC90Z3JvdXA+ CisgICA8L3RhYmxlPgorCisgIDwvc2VjdDI+CisKICAgPHNlY3QyIGlkPSJmdW5jdGlvbnMt YWRtaW4tZGJvYmplY3QiPgogICAgPHRpdGxlPkRhdGFiYXNlIE9iamVjdCBNYW5hZ2VtZW50 IEZ1bmN0aW9uczwvdGl0bGU+CiAKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9nbG9zc2Fy eS5zZ21sIGIvZG9jL3NyYy9zZ21sL2dsb3NzYXJ5LnNnbWwKaW5kZXggYzBmODEyZTNmNWUu LjU0N2U4NTg2ZDRiIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvZ2xvc3Nhcnkuc2dtbAor KysgYi9kb2Mvc3JjL3NnbWwvZ2xvc3Nhcnkuc2dtbApAQCAtMTU5LDYgKzE1OSw4IEBACiAg ICAgIChidXQgbm90IHRoZSBhdXRvdmFjdXVtIHdvcmtlcnMpLAogICAgICB0aGUgPGdsb3Nz dGVybSBsaW5rZW5kPSJnbG9zc2FyeS1iYWNrZ3JvdW5kLXdyaXRlciI+YmFja2dyb3VuZCB3 cml0ZXI8L2dsb3NzdGVybT4sCiAgICAgIHRoZSA8Z2xvc3N0ZXJtIGxpbmtlbmQ9Imdsb3Nz YXJ5LWNoZWNrcG9pbnRlciI+Y2hlY2twb2ludGVyPC9nbG9zc3Rlcm0+LAorICAgICB0aGUg PGdsb3NzdGVybSBsaW5rZW5kPSJnbG9zc2FyeS1kYXRhLWNoZWNrc3Vtcy13b3JrZXIiPmRh dGEgY2hlY2tzdW1zIHdvcmtlcjwvZ2xvc3N0ZXJtPiwKKyAgICAgdGhlIDxnbG9zc3Rlcm0g bGlua2VuZD0iZ2xvc3NhcnktZGF0YS1jaGVja3N1bXMtd29ya2VyLWxhdW5jaGVyIj5kYXRh IGNoZWNrc3VtcyB3b3JrZXIgbGF1bmNoZXI8L2dsb3NzdGVybT4sCiAgICAgIHRoZSA8Z2xv c3N0ZXJtIGxpbmtlbmQ9Imdsb3NzYXJ5LWxvZ2dlciI+bG9nZ2VyPC9nbG9zc3Rlcm0+LAog ICAgICB0aGUgPGdsb3NzdGVybSBsaW5rZW5kPSJnbG9zc2FyeS1zdGFydHVwLXByb2Nlc3Mi PnN0YXJ0dXAgcHJvY2VzczwvZ2xvc3N0ZXJtPiwKICAgICAgdGhlIDxnbG9zc3Rlcm0gbGlu a2VuZD0iZ2xvc3Nhcnktd2FsLWFyY2hpdmVyIj5XQUwgYXJjaGl2ZXI8L2dsb3NzdGVybT4s CkBAIC01NDgsNiArNTUwLDI3IEBACiAgICA8L2dsb3NzZGVmPgogICA8L2dsb3NzZW50cnk+ CiAKKyAgPGdsb3NzZW50cnkgaWQ9Imdsb3NzYXJ5LWRhdGEtY2hlY2tzdW1zLXdvcmtlciI+ CisgICA8Z2xvc3N0ZXJtPkRhdGEgQ2hlY2tzdW1zIFdvcmtlcjwvZ2xvc3N0ZXJtPgorICAg PGdsb3NzZGVmPgorICAgIDxwYXJhPgorICAgICBBbiA8Z2xvc3N0ZXJtIGxpbmtlbmQ9Imds b3NzYXJ5LWF1eGlsaWFyeS1wcm9jIj5hdXhpbGlhcnkgcHJvY2VzczwvZ2xvc3N0ZXJtPgor ICAgICB3aGljaCBlbmFibGVzIG9yIGRpc2FibGVzIGRhdGEgY2hlY2tzdW1zIGluIGEgc3Bl Y2lmaWMgZGF0YWJhc2UuCisgICAgPC9wYXJhPgorICAgPC9nbG9zc2RlZj4KKyAgPC9nbG9z c2VudHJ5PgorCisgIDxnbG9zc2VudHJ5IGlkPSJnbG9zc2FyeS1kYXRhLWNoZWNrc3Vtcy13 b3JrZXItbGF1bmNoZXIiPgorICAgPGdsb3NzdGVybT5EYXRhIENoZWNrc3VtcyBXb3JrZXIg TGF1bmNoZXI8L2dsb3NzdGVybT4KKyAgIDxnbG9zc2RlZj4KKyAgICA8cGFyYT4KKyAgICAg QW4gPGdsb3NzdGVybSBsaW5rZW5kPSJnbG9zc2FyeS1hdXhpbGlhcnktcHJvYyI+YXV4aWxp YXJ5IHByb2Nlc3M8L2dsb3NzdGVybT4KKyAgICAgd2hpY2ggc3RhcnRzIDxnbG9zc3Rlcm0g bGlua2VuZD0iZ2xvc3NhcnktZGF0YS1jaGVja3N1bXMtd29ya2VyIj4gcHJvY2Vzc2VzPC9n bG9zc3Rlcm0+CisgICAgIGZvciBlYWNoIGRhdGFiYXNlLgorICAgIDwvcGFyYT4KKyAgIDwv Z2xvc3NkZWY+CisgIDwvZ2xvc3NlbnRyeT4KKwogICA8Z2xvc3NlbnRyeSBpZD0iZ2xvc3Nh cnktZGItY2x1c3RlciI+CiAgICA8Z2xvc3N0ZXJtPkRhdGFiYXNlIGNsdXN0ZXI8L2dsb3Nz dGVybT4KICAgIDxnbG9zc2RlZj4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9tb25pdG9y aW5nLnNnbWwgYi9kb2Mvc3JjL3NnbWwvbW9uaXRvcmluZy5zZ21sCmluZGV4IGFhYTY1ODZk M2E0Li44ZmVjMDI3N2Y5NyAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL21vbml0b3Jpbmcu c2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvbW9uaXRvcmluZy5zZ21sCkBAIC0zNDk3LDggKzM0 OTcsOSBAQCBkZXNjcmlwdGlvbiB8IFdhaXRpbmcgZm9yIGEgbmV3bHkgaW5pdGlhbGl6ZWQg V0FMIGZpbGUgdG8gcmVhY2ggZHVyYWJsZSBzdG9yYWdlCiAgICAgICA8L3BhcmE+CiAgICAg ICA8cGFyYT4KICAgICAgICBOdW1iZXIgb2YgZGF0YSBwYWdlIGNoZWNrc3VtIGZhaWx1cmVz IGRldGVjdGVkIGluIHRoaXMKLSAgICAgICBkYXRhYmFzZSAob3Igb24gYSBzaGFyZWQgb2Jq ZWN0KSwgb3IgTlVMTCBpZiBkYXRhIGNoZWNrc3VtcyBhcmUKLSAgICAgICBkaXNhYmxlZC4K KyAgICAgICBkYXRhYmFzZSAob3Igb24gYSBzaGFyZWQgb2JqZWN0KS4KKyAgICAgICBEZXRl Y3RlZCBmYWlsdXJlcyBhcmUgcmVwb3J0ZWQgcmVnYXJkbGVzcyBvZiB0aGUKKyAgICAgICA8 eHJlZiBsaW5rZW5kPSJndWMtZGF0YS1jaGVja3N1bXMiLz4gc2V0dGluZy4KICAgICAgIDwv cGFyYT48L2VudHJ5PgogICAgICA8L3Jvdz4KIApAQCAtMzUwOCw4ICszNTA5LDggQEAgZGVz Y3JpcHRpb24gfCBXYWl0aW5nIGZvciBhIG5ld2x5IGluaXRpYWxpemVkIFdBTCBmaWxlIHRv IHJlYWNoIGR1cmFibGUgc3RvcmFnZQogICAgICAgPC9wYXJhPgogICAgICAgPHBhcmE+CiAg ICAgICAgVGltZSBhdCB3aGljaCB0aGUgbGFzdCBkYXRhIHBhZ2UgY2hlY2tzdW0gZmFpbHVy ZSB3YXMgZGV0ZWN0ZWQgaW4KLSAgICAgICB0aGlzIGRhdGFiYXNlIChvciBvbiBhIHNoYXJl ZCBvYmplY3QpLCBvciBOVUxMIGlmIGRhdGEgY2hlY2tzdW1zIGFyZQotICAgICAgIGRpc2Fi bGVkLgorICAgICAgIHRoaXMgZGF0YWJhc2UgKG9yIG9uIGEgc2hhcmVkIG9iamVjdCkuIExh c3QgZmFpbHVyZSBpcyByZXBvcnRlZAorICAgICAgIHJlZ2FyZGxlc3Mgb2YgdGhlIDx4cmVm IGxpbmtlbmQ9Imd1Yy1kYXRhLWNoZWNrc3VtcyIvPiBzZXR0aW5nLgogICAgICAgPC9wYXJh PjwvZW50cnk+CiAgICAgIDwvcm93PgogCkBAIC02ODI4LDYgKzY4MjksMjA1IEBAIEZST00g cGdfc3RhdF9nZXRfYmFja2VuZF9pZHNldCgpIEFTIGJhY2tlbmRpZDsKIAogIDwvc2VjdDI+ CiAKKyA8c2VjdDIgaWQ9ImRhdGEtY2hlY2tzdW0tcHJvZ3Jlc3MtcmVwb3J0aW5nIj4KKyAg PHRpdGxlPkRhdGEgQ2hlY2tzdW0gUHJvZ3Jlc3MgUmVwb3J0aW5nPC90aXRsZT4KKworICA8 aW5kZXh0ZXJtPgorICAgPHByaW1hcnk+cGdfc3RhdF9wcm9ncmVzc19kYXRhX2NoZWNrc3Vt czwvcHJpbWFyeT4KKyAgPC9pbmRleHRlcm0+CisKKyAgPHBhcmE+CisgICBXaGVuIGRhdGEg Y2hlY2tzdW1zIGFyZSBiZWluZyBlbmFibGVkIG9uIGEgcnVubmluZyBjbHVzdGVyLCB0aGUK KyAgIDxzdHJ1Y3RuYW1lPnBnX3N0YXRfcHJvZ3Jlc3NfZGF0YV9jaGVja3N1bXM8L3N0cnVj dG5hbWU+IHZpZXcgd2lsbCBjb250YWluCisgICBhIHJvdyBmb3IgdGhlIGxhdW5jaGVyIHBy b2Nlc3MsIGFuZCBvbmUgcm93IGZvciBlYWNoIHdvcmtlciBwcm9jZXNzIHdoaWNoCisgICBp cyBjdXJyZW50bHkgY2FsY3VsYXRpbmcgY2hlY2tzdW1zIGZvciB0aGUgZGF0YSBwYWdlcyBp biBvbmUgZGF0YWJhc2UuCisgIDwvcGFyYT4KKworICA8dGFibGUgaWQ9InBnLXN0YXQtcHJv Z3Jlc3MtZGF0YS1jaGVja3N1bXMtdmlldyIgeHJlZmxhYmVsPSJwZ19zdGF0X3Byb2dyZXNz X2RhdGFfY2hlY2tzdW1zIj4KKyAgIDx0aXRsZT48c3RydWN0bmFtZT5wZ19zdGF0X3Byb2dy ZXNzX2RhdGFfY2hlY2tzdW1zPC9zdHJ1Y3RuYW1lPiBWaWV3PC90aXRsZT4KKyAgIDx0Z3Jv dXAgY29scz0iMSI+CisgICAgPHRoZWFkPgorICAgICA8cm93PgorICAgICAgPGVudHJ5IHJv bGU9ImNhdGFsb2dfdGFibGVfZW50cnkiPgorICAgICAgIDxwYXJhIHJvbGU9ImNvbHVtbl9k ZWZpbml0aW9uIj4KKyAgICAgICAgQ29sdW1uIFR5cGUKKyAgICAgICA8L3BhcmE+CisgICAg ICAgPHBhcmE+CisgICAgICAgIERlc2NyaXB0aW9uPgorICAgICAgIDwvcGFyYT4KKyAgICAg IDwvZW50cnk+CisgICAgIDwvcm93PgorICAgIDwvdGhlYWQ+CisKKyAgICA8dGJvZHk+Cisg ICAgIDxyb3c+CisgICAgICA8ZW50cnkgcm9sZT0iY2F0YWxvZ190YWJsZV9lbnRyeSI+Cisg ICAgICAgPHBhcmEgcm9sZT0iY29sdW1uX2RlZmluaXRpb24iPgorICAgICAgICA8c3RydWN0 ZmllbGQ+cGlkPC9zdHJ1Y3RmaWVsZD4gPHR5cGU+aW50ZWdlcjwvdHlwZT4KKyAgICAgICA8 L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIFByb2Nlc3MgSUQgb2YgYSBkYXRhY2hl Y2tzdW13b3JrZXIgcHJvY2Vzcy4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2VudHJ5Pgor ICAgICA8L3Jvdz4KKworICAgICA8cm93PgorICAgICAgPGVudHJ5IHJvbGU9ImNhdGFsb2df dGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImNvbHVtbl9kZWZpbml0aW9uIj4KKyAgICAgICA8 c3RydWN0ZmllbGQ+ZGF0aWQ8L3N0cnVjdGZpZWxkPiA8dHlwZT5vaWQ8L3R5cGU+CisgICAg ICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICBPSUQgb2YgdGhpcyBkYXRhYmFzZSwg b3IgMCBmb3IgdGhlIGxhdW5jaGVyIHByb2Nlc3MKKyAgICAgICByZWxhdGlvbgorICAgICAg PC9wYXJhPjwvZW50cnk+CisgICAgIDwvcm93PgorCisgICAgIDxyb3c+CisgICAgICA8ZW50 cnkgcm9sZT0iY2F0YWxvZ190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iY29sdW1uX2RlZmlu aXRpb24iPgorICAgICAgIDxzdHJ1Y3RmaWVsZD5kYXRuYW1lPC9zdHJ1Y3RmaWVsZD4gPHR5 cGU+bmFtZTwvdHlwZT4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgIE5h bWUgb2YgdGhpcyBkYXRhYmFzZSwgb3IgPGxpdGVyYWw+TlVMTDwvbGl0ZXJhbD4gZm9yIHRo ZQorICAgICAgIGxhdW5jaGVyIHByb2Nlc3MuCisgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAg ICAgPC9yb3c+CisKKyAgICAgPHJvdz4KKyAgICAgIDxlbnRyeSByb2xlPSJjYXRhbG9nX3Rh YmxlX2VudHJ5Ij4KKyAgICAgICA8cGFyYSByb2xlPSJjb2x1bW5fZGVmaW5pdGlvbiI+Cisg ICAgICAgIDxzdHJ1Y3RmaWVsZD5waGFzZTwvc3RydWN0ZmllbGQ+IDx0eXBlPnRleHQ8L3R5 cGU+CisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBDdXJyZW50IHBy b2Nlc3NpbmcgcGhhc2UsIHNlZSA8eHJlZiBsaW5rZW5kPSJkYXRhY2hlY2tzdW0tcGhhc2Vz Ii8+CisgICAgICAgIGZvciBkZXNjcmlwdGlvbiBvZiB0aGUgcGhhc2VzLgorICAgICAgIDwv cGFyYT4KKyAgICAgIDwvZW50cnk+CisgICAgIDwvcm93PgorCisgICAgIDxyb3c+CisgICAg ICA8ZW50cnkgcm9sZT0iY2F0YWxvZ190YWJsZV9lbnRyeSI+CisgICAgICAgPHBhcmEgcm9s ZT0iY29sdW1uX2RlZmluaXRpb24iPgorICAgICAgICA8c3RydWN0ZmllbGQ+ZGF0YWJhc2Vz X3RvdGFsPC9zdHJ1Y3RmaWVsZD4gPHR5cGU+aW50ZWdlcjwvdHlwZT4KKyAgICAgICA8L3Bh cmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIFRoZSB0b3RhbCBudW1iZXIgb2YgZGF0YWJh c2VzIHdoaWNoIHdpbGwgYmUgcHJvY2Vzc2VkLiBPbmx5IHRoZQorICAgICAgICBsYXVuY2hl ciB3b3JrZXIgaGFzIHRoaXMgdmFsdWUgc2V0LCB0aGUgb3RoZXIgd29ya2VyIHByb2Nlc3Nl cworICAgICAgICBoYXZlIHRoaXMgc2V0IHRvIDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+Lgor ICAgICAgIDwvcGFyYT4KKyAgICAgIDwvZW50cnk+CisgICAgIDwvcm93PgorCisgICAgIDxy b3c+CisgICAgICA8ZW50cnkgcm9sZT0iY2F0YWxvZ190YWJsZV9lbnRyeSI+CisgICAgICAg PHBhcmEgcm9sZT0iY29sdW1uX2RlZmluaXRpb24iPgorICAgICAgICA8c3RydWN0ZmllbGQ+ ZGF0YWJhc2VzX2RvbmU8L3N0cnVjdGZpZWxkPiA8dHlwZT5pbnRlZ2VyPC90eXBlPgorICAg ICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIG51bWJlciBvZiBkYXRh YmFzZXMgd2hpY2ggaGF2ZSBiZWVuIHByb2Nlc3NlZC4gT25seSB0aGUKKyAgICAgICAgbGF1 bmNoZXIgd29ya2VyIGhhcyB0aGlzIHZhbHVlIHNldCwgdGhlIG90aGVyIHdvcmtlciBwcm9j ZXNzZXMKKyAgICAgICAgaGF2ZSB0aGlzIHNldCB0byA8bGl0ZXJhbD5OVUxMPC9saXRlcmFs Pi4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2VudHJ5PgorICAgICA8L3Jvdz4KKworICAg ICA8cm93PgorICAgICAgPGVudHJ5IHJvbGU9ImNhdGFsb2dfdGFibGVfZW50cnkiPgorICAg ICAgIDxwYXJhIHJvbGU9ImNvbHVtbl9kZWZpbml0aW9uIj4KKyAgICAgICAgPHN0cnVjdGZp ZWxkPnJlbGF0aW9uc190b3RhbDwvc3RydWN0ZmllbGQ+IDx0eXBlPmludGVnZXI8L3R5cGU+ CisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBUaGUgdG90YWwgbnVt YmVyIG9mIHJlbGF0aW9ucyB3aGljaCB3aWxsIGJlIHByb2Nlc3NlZCwgb3IKKyAgICAgICAg PGxpdGVyYWw+TlVMTDwvbGl0ZXJhbD4gaWYgdGhlIGRhdGEgY2hlY2tzdW1zIHdvcmtlciBw cm9jZXNzIGhhc24ndAorICAgICAgICBjYWxjdWxhdGVkIHRoZSBudW1iZXIgb2YgcmVsYXRp b25zIHlldC4gVGhlIGxhdW5jaGVyIHByb2Nlc3MgaGFzCisgICAgICAgIHRoaXMgPGxpdGVy YWw+TlVMTDwvbGl0ZXJhbD4uCisgICAgICAgPC9wYXJhPgorICAgICAgPC9lbnRyeT4KKyAg ICAgPC9yb3c+CisKKyAgICAgPHJvdz4KKyAgICAgIDxlbnRyeSByb2xlPSJjYXRhbG9nX3Rh YmxlX2VudHJ5Ij4KKyAgICAgICA8cGFyYSByb2xlPSJjb2x1bW5fZGVmaW5pdGlvbiI+Cisg ICAgICAgIDxzdHJ1Y3RmaWVsZD5yZWxhdGlvbnNfZG9uZTwvc3RydWN0ZmllbGQ+IDx0eXBl PmludGVnZXI8L3R5cGU+CisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAg ICBUaGUgbnVtYmVyIG9mIHJlbGF0aW9ucyB3aGljaCBoYXZlIGJlZW4gcHJvY2Vzc2VkLiBU aGUgbGF1bmNoZXIKKyAgICAgICAgcHJvY2VzcyBoYXMgdGhpcyA8bGl0ZXJhbD5OVUxMPC9s aXRlcmFsPi4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2VudHJ5PgorICAgICA8L3Jvdz4K KworICAgICA8cm93PgorICAgICAgPGVudHJ5IHJvbGU9ImNhdGFsb2dfdGFibGVfZW50cnki PgorICAgICAgIDxwYXJhIHJvbGU9ImNvbHVtbl9kZWZpbml0aW9uIj4KKyAgICAgICAgPHN0 cnVjdGZpZWxkPmJsb2Nrc190b3RhbDwvc3RydWN0ZmllbGQ+IDx0eXBlPmludGVnZXI8L3R5 cGU+CisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBUaGUgbnVtYmVy IG9mIGJsb2NrcyBpbiB0aGUgY3VycmVudCByZWxhdGlvbiB3aGljaCB3aWxsIGJlIHByb2Nl c3NlZCwKKyAgICAgICAgb3IgPGxpdGVyYWw+TlVMTDwvbGl0ZXJhbD4gaWYgdGhlIGRhdGEg Y2hlY2tzdW1zIHdvcmtlciBwcm9jZXNzIGhhc24ndAorICAgICAgICBjYWxjdWxhdGVkIHRo ZSBudW1iZXIgb2YgYmxvY2tzIHlldC4gVGhlIGxhdW5jaGVyIHByb2Nlc3MgaGFzCisgICAg ICAgIHRoaXMgPGxpdGVyYWw+TlVMTDwvbGl0ZXJhbD4uCisgICAgICAgPC9wYXJhPgorICAg ICAgPC9lbnRyeT4KKyAgICAgPC9yb3c+CisKKyAgICAgPHJvdz4KKyAgICAgIDxlbnRyeSBy b2xlPSJjYXRhbG9nX3RhYmxlX2VudHJ5Ij4KKyAgICAgICA8cGFyYSByb2xlPSJjb2x1bW5f ZGVmaW5pdGlvbiI+CisgICAgICAgIDxzdHJ1Y3RmaWVsZD5ibG9ja3NfZG9uZTwvc3RydWN0 ZmllbGQ+IDx0eXBlPmludGVnZXI8L3R5cGU+CisgICAgICAgPC9wYXJhPgorICAgICAgIDxw YXJhPgorICAgICAgICBUaGUgbnVtYmVyIG9mIGJsb2NrcyBpbiB0aGUgY3VycmVudCByZWxh dGlvbiB3aGljaCBoYXZlIGJlZW4gcHJvY2Vzc2VkLgorICAgICAgICBUaGUgbGF1bmNoZXIg cHJvY2VzcyBoYXMgdGhpcyA8bGl0ZXJhbD5OVUxMPC9saXRlcmFsPi4KKyAgICAgICA8L3Bh cmE+CisgICAgICA8L2VudHJ5PgorICAgICA8L3Jvdz4KKworICAgIDwvdGJvZHk+CisgICA8 L3Rncm91cD4KKyAgPC90YWJsZT4KKworICA8dGFibGUgaWQ9ImRhdGFjaGVja3N1bS1waGFz ZXMiPgorICAgPHRpdGxlPkRhdGEgQ2hlY2tzdW0gUGhhc2VzPC90aXRsZT4KKyAgIDx0Z3Jv dXAgY29scz0iMiI+CisgICAgPGNvbHNwZWMgY29sbmFtZT0iY29sMSIgY29sd2lkdGg9IjEq Ii8+CisgICAgPGNvbHNwZWMgY29sbmFtZT0iY29sMiIgY29sd2lkdGg9IjIqIi8+CisgICAg PHRoZWFkPgorICAgICA8cm93PgorICAgICAgPGVudHJ5PlBoYXNlPC9lbnRyeT4KKyAgICAg IDxlbnRyeT5EZXNjcmlwdGlvbjwvZW50cnk+CisgICAgIDwvcm93PgorICAgIDwvdGhlYWQ+ CisgICAgPHRib2R5PgorICAgICA8cm93PgorICAgICAgPGVudHJ5PjxsaXRlcmFsPmVuYWJs aW5nPC9saXRlcmFsPjwvZW50cnk+CisgICAgICA8ZW50cnk+CisgICAgICAgVGhlIGNvbW1h bmQgaXMgY3VycmVudGx5IGVuYWJsaW5nIGRhdGEgY2hlY2tzdW1zIG9uIHRoZSBjbHVzdGVy LgorICAgICAgPC9lbnRyeT4KKyAgICAgPC9yb3c+CisgICAgIDxyb3c+CisgICAgICA8ZW50 cnk+PGxpdGVyYWw+ZGlzYWJsaW5nPC9saXRlcmFsPjwvZW50cnk+CisgICAgICA8ZW50cnk+ CisgICAgICAgVGhlIGNvbW1hbmQgaXMgY3VycmVudGx5IGRpc2FibGluZyBkYXRhIGNoZWNr c3VtcyBvbiB0aGUgY2x1c3Rlci4KKyAgICAgIDwvZW50cnk+CisgICAgIDwvcm93PgorICAg ICA8cm93PgorICAgICAgPGVudHJ5PjxsaXRlcmFsPndhaXRpbmcgb24gdGVtcG9yYXJ5IHRh YmxlczwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgPGVudHJ5PgorICAgICAgIFRoZSBjb21t YW5kIGlzIGN1cnJlbnRseSB3YWl0aW5nIGZvciBhbGwgdGVtcG9yYXJ5IHRhYmxlcyB3aGlj aCBleGlzdGVkCisgICAgICAgYXQgdGhlIHRpbWUgdGhlIGNvbW1hbmQgd2FzIHN0YXJ0ZWQg dG8gYmUgcmVtb3ZlZC4KKyAgICAgIDwvZW50cnk+CisgICAgIDwvcm93PgorICAgICA8cm93 PgorICAgICAgPGVudHJ5PjxsaXRlcmFsPndhaXRpbmcgb24gY2hlY2twb2ludDwvbGl0ZXJh bD48L2VudHJ5PgorICAgICAgPGVudHJ5PgorICAgICAgIFRoZSBjb21tYW5kIGlzIGN1cnJl bnRseSB3YWl0aW5nIGZvciBhIGNoZWNrcG9pbnQgdG8gdXBkYXRlIHRoZSBjaGVja3N1bQor ICAgICAgIHN0YXRlIGJlZm9yZSBmaW5pc2hpbmcuCisgICAgICA8L2VudHJ5PgorICAgICA8 L3Jvdz4KKyAgICA8L3Rib2R5PgorICAgPC90Z3JvdXA+CisgIDwvdGFibGU+CisgPC9zZWN0 Mj4KKwogIDwvc2VjdDE+CiAKICA8c2VjdDEgaWQ9ImR5bmFtaWMtdHJhY2UiPgpkaWZmIC0t Z2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19jaGVja3N1bXMuc2dtbCBiL2RvYy9zcmMvc2dt bC9yZWYvcGdfY2hlY2tzdW1zLnNnbWwKaW5kZXggOTUwNDNhYTMyOWMuLjAzNDM3MTBhZjUz IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX2NoZWNrc3Vtcy5zZ21sCisrKyBi L2RvYy9zcmMvc2dtbC9yZWYvcGdfY2hlY2tzdW1zLnNnbWwKQEAgLTQ1LDYgKzQ1LDEyIEBA IFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgZXhpdCBzdGF0dXMgaXMgbm9uemVybyBp ZiB0aGUgb3BlcmF0aW9uIGZhaWxlZC4KICAgPC9wYXJhPgogCisgIDxwYXJhPgorICAgV2hl biBlbmFibGluZyBjaGVja3N1bXMsIGlmIGNoZWNrc3VtcyB3ZXJlIGluIHRoZSBwcm9jZXNz IG9mIGJlaW5nIGVuYWJsZWQKKyAgIHdoZW4gdGhlIGNsdXN0ZXIgd2FzIHNodXQgZG93biwg PGFwcGxpY2F0aW9uPnBnX2NoZWNrc3VtczwvYXBwbGljYXRpb24+CisgICB3aWxsIHN0aWxs IHByb2Nlc3MgYWxsIHJlbGF0aW9ucyByZWdhcmRsZXNzIG9mIHRoZSBvbmxpbmUgcHJvY2Vz c2luZy4KKyAgPC9wYXJhPgorCiAgIDxwYXJhPgogICAgV2hlbiB2ZXJpZnlpbmcgY2hlY2tz dW1zLCBldmVyeSBmaWxlIGluIHRoZSBjbHVzdGVyIGlzIHNjYW5uZWQuIFdoZW4KICAgIGVu YWJsaW5nIGNoZWNrc3VtcywgZWFjaCByZWxhdGlvbiBmaWxlIGJsb2NrIHdpdGggYSBjaGFu Z2VkIGNoZWNrc3VtIGlzCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvd2FsLnNnbWwgYi9k b2Mvc3JjL3NnbWwvd2FsLnNnbWwKaW5kZXggZjNiODZiMjZiZTkuLjBhZGE5MGNhMGIxIDEw MDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvd2FsLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3dh bC5zZ21sCkBAIC0yNDYsOSArMjQ2LDEwIEBACiAgIDxwYXJhPgogICAgQ2hlY2tzdW1zIGNh biBiZSBkaXNhYmxlZCB3aGVuIHRoZSBjbHVzdGVyIGlzIGluaXRpYWxpemVkIHVzaW5nIDxs aW5rCiAgICBsaW5rZW5kPSJhcHAtaW5pdGRiLWRhdGEtY2hlY2tzdW1zIj48YXBwbGljYXRp b24+aW5pdGRiPC9hcHBsaWNhdGlvbj48L2xpbms+LgotICAgVGhleSBjYW4gYWxzbyBiZSBl bmFibGVkIG9yIGRpc2FibGVkIGF0IGEgbGF0ZXIgdGltZSBhcyBhbiBvZmZsaW5lCi0gICBv cGVyYXRpb24uIERhdGEgY2hlY2tzdW1zIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIGF0IHRo ZSBmdWxsIGNsdXN0ZXIKLSAgIGxldmVsLCBhbmQgY2Fubm90IGJlIHNwZWNpZmllZCBpbmRp dmlkdWFsbHkgZm9yIGRhdGFiYXNlcyBvciB0YWJsZXMuCisgICBUaGV5IGNhbiBhbHNvIGJl IGVuYWJsZWQgb3IgZGlzYWJsZWQgYXQgYSBsYXRlciB0aW1lIGVpdGhlciBhcyBhbiBvZmZs aW5lCisgICBvcGVyYXRpb24gb3Igb25saW5lIGluIGEgcnVubmluZyBjbHVzdGVyIGFsbG93 aW5nIGNvbmN1cnJlbnQgYWNjZXNzLiBEYXRhCisgICBjaGVja3N1bXMgYXJlIGVuYWJsZWQg b3IgZGlzYWJsZWQgYXQgdGhlIGZ1bGwgY2x1c3RlciBsZXZlbCwgYW5kIGNhbm5vdCBiZQor ICAgc3BlY2lmaWVkIGluZGl2aWR1YWxseSBmb3IgZGF0YWJhc2VzIG9yIHRhYmxlcy4KICAg PC9wYXJhPgogCiAgIDxwYXJhPgpAQCAtMjY1LDcgKzI2Niw3IEBACiAgIDwvcGFyYT4KIAog ICA8c2VjdDIgaWQ9ImNoZWNrc3Vtcy1vZmZsaW5lLWVuYWJsZS1kaXNhYmxlIj4KLSAgIDx0 aXRsZT5PZmYtbGluZSBFbmFibGluZyBvZiBDaGVja3N1bXM8L3RpdGxlPgorICAgPHRpdGxl Pk9mZmxpbmUgRW5hYmxpbmcgb2YgQ2hlY2tzdW1zPC90aXRsZT4KIAogICAgPHBhcmE+CiAg ICAgVGhlIDxsaW5rIGxpbmtlbmQ9ImFwcC1wZ2NoZWNrc3VtcyI+PGFwcGxpY2F0aW9uPnBn X2NoZWNrc3VtczwvYXBwbGljYXRpb24+PC9saW5rPgpAQCAtMjc0LDYgKzI3NSw1NiBAQAog ICAgPC9wYXJhPgogCiAgIDwvc2VjdDI+CisKKyAgPHNlY3QyIGlkPSJjaGVja3N1bXMtb25s aW5lLWVuYWJsZS1kaXNhYmxlIj4KKyAgIDx0aXRsZT5PbmxpbmUgRW5hYmxpbmcgb2YgQ2hl Y2tzdW1zPC90aXRsZT4KKworICAgPHBhcmE+CisgICAgQ2hlY2tzdW1zIGNhbiBiZSBlbmFi bGVkIG9yIGRpc2FibGVkIG9ubGluZSwgYnkgY2FsbGluZyB0aGUgYXBwcm9wcmlhdGUKKyAg ICA8bGluayBsaW5rZW5kPSJmdW5jdGlvbnMtYWRtaW4tY2hlY2tzdW0iPmZ1bmN0aW9uczwv bGluaz4uCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIEVuYWJsaW5nIGNoZWNrc3Vt cyB3aWxsIHB1dCB0aGUgY2x1c3RlciBjaGVja3N1bSBtb2RlIGluCisgICAgPGxpdGVyYWw+ aW5wcm9ncmVzcy1vbjwvbGl0ZXJhbD4gbW9kZS4gIER1cmluZyB0aGlzIHRpbWUsIGNoZWNr c3VtcyB3aWxsIGJlCisgICAgd3JpdHRlbiBidXQgbm90IHZlcmlmaWVkLiBJbiBhZGRpdGlv biB0byB0aGlzLCBhIGJhY2tncm91bmQgd29ya2VyIHByb2Nlc3MKKyAgICBpcyBzdGFydGVk IHRoYXQgZW5hYmxlcyBjaGVja3N1bXMgb24gYWxsIGV4aXN0aW5nIGRhdGEgaW4gdGhlIGNs dXN0ZXIuIE9uY2UKKyAgICB0aGlzIHdvcmtlciBoYXMgY29tcGxldGVkIHByb2Nlc3Npbmcg YWxsIGRhdGFiYXNlcyBpbiB0aGUgY2x1c3RlciwgdGhlCisgICAgY2hlY2tzdW0gbW9kZSB3 aWxsIGF1dG9tYXRpY2FsbHkgc3dpdGNoIHRvIDxsaXRlcmFsPm9uPC9saXRlcmFsPi4gVGhl CisgICAgcHJvY2Vzc2luZyB3aWxsIGNvbnN1bWUgdHdvIGJhY2tncm91bmQgd29ya2VyIHBy b2Nlc3NlcywgbWFrZSBzdXJlIHRoYXQKKyAgICA8dmFybmFtZT5tYXhfd29ya2VyX3Byb2Nl c3NlczwvdmFybmFtZT4gYWxsb3dzIGZvciBhdCBsZWFzdCB0d28gbW9yZQorICAgIGFkZGl0 aW9uYWwgcHJvY2Vzc2VzLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBUaGUgcHJv Y2VzcyB3aWxsIGluaXRpYWxseSB3YWl0IGZvciBhbGwgb3BlbiB0cmFuc2FjdGlvbnMgdG8g ZmluaXNoIGJlZm9yZQorICAgIGl0IHN0YXJ0cywgc28gdGhhdCBpdCBjYW4gYmUgY2VydGFp biB0aGF0IHRoZXJlIGFyZSBubyB0YWJsZXMgdGhhdCBoYXZlIGJlZW4KKyAgICBjcmVhdGVk IGluc2lkZSBhIHRyYW5zYWN0aW9uIHRoYXQgaGFzIG5vdCBjb21taXR0ZWQgeWV0IGFuZCB0 aHVzIHdvdWxkIG5vdAorICAgIGJlIHZpc2libGUgdG8gdGhlIHByb2Nlc3MgZW5hYmxpbmcg Y2hlY2tzdW1zLiBJdCB3aWxsIGFsc28sIGZvciBlYWNoIGRhdGFiYXNlLAorICAgIHdhaXQg Zm9yIGFsbCBwcmUtZXhpc3RpbmcgdGVtcG9yYXJ5IHRhYmxlcyB0byBnZXQgcmVtb3ZlZCBi ZWZvcmUgaXQgZmluaXNoZXMuCisgICAgSWYgbG9uZy1saXZlZCB0ZW1wb3JhcnkgdGFibGVz IGFyZSB1c2VkIGluIHRoZSBhcHBsaWNhdGlvbiBpdCBtYXkgYmUgbmVjZXNzYXJ5CisgICAg dG8gdGVybWluYXRlIHRoZXNlIGFwcGxpY2F0aW9uIGNvbm5lY3Rpb25zIHRvIGFsbG93IHRo ZSBwcm9jZXNzIHRvIGNvbXBsZXRlLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBJ ZiB0aGUgY2x1c3RlciBpcyBzdG9wcGVkIHdoaWxlIGluIDxsaXRlcmFsPmlucHJvZ3Jlc3Mt b248L2xpdGVyYWw+IG1vZGUsIGZvcgorICAgIGFueSByZWFzb24sIHRoZW4gdGhpcyBwcm9j ZXNzIG11c3QgYmUgcmVzdGFydGVkIG1hbnVhbGx5LiBUbyBkbyB0aGlzLAorICAgIHJlLWV4 ZWN1dGUgdGhlIGZ1bmN0aW9uIDxmdW5jdGlvbj5wZ19lbmFibGVfZGF0YV9jaGVja3N1bXMo KTwvZnVuY3Rpb24+CisgICAgb25jZSB0aGUgY2x1c3RlciBoYXMgYmVlbiByZXN0YXJ0ZWQu IFRoZSBwcm9jZXNzIHdpbGwgc3RhcnQgb3ZlciwgdGhlcmUgaXMKKyAgICBubyBzdXBwb3J0 IGZvciByZXN1bWluZyB3b3JrIGZyb20gd2hlcmUgaXQgd2FzIGludGVycnVwdGVkLgorICAg PC9wYXJhPgorCisgICA8bm90ZT4KKyAgICA8cGFyYT4KKyAgICAgRW5hYmxpbmcgY2hlY2tz dW1zIGNhbiBjYXVzZSBzaWduaWZpY2FudCBJL08gdG8gdGhlIHN5c3RlbSwgYXMgbW9zdCBv ZiB0aGUKKyAgICAgZGF0YWJhc2UgcGFnZXMgd2lsbCBuZWVkIHRvIGJlIHJld3JpdHRlbiwg YW5kIHdpbGwgYmUgd3JpdHRlbiBib3RoIHRvIHRoZQorICAgICBkYXRhIGZpbGVzIGFuZCB0 aGUgV0FMLiBUaGUgaW1wYWN0IG1heSBiZSBsaW1pdGVkIGJ5IHRocm90dGxpbmcgdXNpbmcg dGhlCisgICAgIDxwYXJhbWV0ZXI+Y29zdF9kZWxheTwvcGFyYW1ldGVyPiBhbmQgPHBhcmFt ZXRlcj5jb3N0X2xpbWl0PC9wYXJhbWV0ZXI+CisgICAgIHBhcmFtZXRlcnMgb2YgdGhlIDxm dW5jdGlvbj5wZ19lbmFibGVfZGF0YV9jaGVja3N1bXM8L2Z1bmN0aW9uPiBmdW5jdGlvbi4K KyAgICA8L3BhcmE+CisgICA8L25vdGU+CisKKyAgPC9zZWN0Mj4KICA8L3NlY3QxPgogCiAg IDxzZWN0MSBpZD0id2FsLWludHJvIj4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9ybWdyZGVzYy94bG9nZGVzYy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL3hs b2dkZXNjLmMKaW5kZXggNTgwNDBmMjg2NTYuLjFlM2FkMmFiNjhkIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MveGxvZ2Rlc2MuYworKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3Mvcm1ncmRlc2MveGxvZ2Rlc2MuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1 ZGUgImFjY2Vzcy94bG9nLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2dfaW50ZXJuYWwuaCIK ICNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbnRyb2wuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2J1 ZnBhZ2UuaCIKICNpbmNsdWRlICJ1dGlscy9ndWMuaCIKICNpbmNsdWRlICJ1dGlscy90aW1l c3RhbXAuaCIKIApAQCAtMTY3LDYgKzE2OCwyNiBAQCB4bG9nX2Rlc2MoU3RyaW5nSW5mbyBi dWYsIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCQltZW1jcHkoJndhbF9sZXZlbCwgcmVj LCBzaXplb2YoaW50KSk7CiAJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAid2FsX2xldmVsICVz IiwgZ2V0X3dhbF9sZXZlbF9zdHJpbmcod2FsX2xldmVsKSk7CiAJfQorCWVsc2UgaWYgKGlu Zm8gPT0gWExPR19DSEVDS1NVTVMpCisJeworCQl4bF9jaGVja3N1bV9zdGF0ZSB4bHJlYzsK KworCQltZW1jcHkoJnhscmVjLCByZWMsIHNpemVvZih4bF9jaGVja3N1bV9zdGF0ZSkpOwor CQlzd2l0Y2ggKHhscmVjLm5ld19jaGVja3N1bXR5cGUpCisJCXsKKwkJCWNhc2UgUEdfREFU QV9DSEVDS1NVTV9WRVJTSU9OOgorCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAi b24iKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgUEdfREFUQV9DSEVDS1NVTV9JTlBST0dSRVNT X09GRl9WRVJTSU9OOgorCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiaW5wcm9n cmVzcy1vZmYiKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgUEdfREFUQV9DSEVDS1NVTV9JTlBS T0dSRVNTX09OX1ZFUlNJT046CisJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICJp bnByb2dyZXNzLW9uIik7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWFwcGVuZFN0 cmluZ0luZm9TdHJpbmcoYnVmLCAib2ZmIik7CisJCX0KKwl9CiB9CiAKIGNvbnN0IGNoYXIg KgpAQCAtMjE4LDYgKzIzOSw5IEBAIHhsb2dfaWRlbnRpZnkodWludDggaW5mbykKIAkJY2Fz ZSBYTE9HX0NIRUNLUE9JTlRfUkVETzoKIAkJCWlkID0gIkNIRUNLUE9JTlRfUkVETyI7CiAJ CQlicmVhazsKKwkJY2FzZSBYTE9HX0NIRUNLU1VNUzoKKwkJCWlkID0gIkNIRUNLU1VNUyI7 CisJCQlicmVhazsKIAl9CiAKIAlyZXR1cm4gaWQ7CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94 bG9nLmMKaW5kZXggNzk5ZmM3MzllMTguLjYxZGE2ZDU4M2NkIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0veGxvZy5jCkBAIC01NTAsNiArNTUwLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgWExv Z0N0bERhdGEKIAkgKi8KIAlYTG9nUmVjUHRyCWxhc3RGcHdEaXNhYmxlUmVjUHRyOwogCisJ LyogbGFzdCBkYXRhX2NoZWNrc3VtX3ZlcnNpb24gd2UndmUgc2VlbiAqLworCXVpbnQzMgkJ ZGF0YV9jaGVja3N1bV92ZXJzaW9uOworCiAJc2xvY2tfdAkJaW5mb19sY2s7CQkvKiBsb2Nr cyBzaGFyZWQgdmFyaWFibGVzIHNob3duIGFib3ZlICovCiB9IFhMb2dDdGxEYXRhOwogCkBA IC02NDcsNiArNjUwLDI0IEBAIHN0YXRpYyBYTG9nUmVjUHRyIExvY2FsTWluUmVjb3ZlcnlQ b2ludDsKIHN0YXRpYyBUaW1lTGluZUlEIExvY2FsTWluUmVjb3ZlcnlQb2ludFRMSTsKIHN0 YXRpYyBib29sIHVwZGF0ZU1pblJlY292ZXJ5UG9pbnQgPSB0cnVlOwogCisvKgorICogTG9j YWwgc3RhdGUgZnJvciBDb250cm9sZmlsZSBkYXRhX2NoZWNrc3VtX3ZlcnNpb24uIEFmdGVy IGluaXRpYWxpemF0aW9uCisgKiB0aGlzIGlzIG9ubHkgdXBkYXRlZCB3aGVuIGFic29yYmlu ZyBhIHByb2NzaWduYWwgYmFycmllciBkdXJpbmcgaW50ZXJydXB0CisgKiBwcm9jZXNzaW5n LiBUaGUgcmVhc29uIGZvciBrZWVwaW5nIGEgY29weSBpbiBiYWNrZW5kLXByaXZhdGUgbWVt b3J5IGlzIHRvCisgKiBhdm9pZCBsb2NraW5nIGZvciBpbnRlcnJvZ2F0aW5nIGNoZWNrc3Vt IHN0YXRlLiBQb3NzaWJsZSB2YWx1ZXMgYXJlIHRoZQorICogY2hlY2tzdW0gdmVyc2lvbnMg ZGVmaW5lZCBpbiBzdG9yYWdlL2J1ZnBhZ2UuaCBhcyB3ZWxsIGFzIHplcm8gd2hlbiBkYXRh CisgKiBjaGVja3N1bXMgYXJlIGRpc2FibGVkLgorICovCitzdGF0aWMgdWludDMyIExvY2Fs RGF0YUNoZWNrc3VtVmVyc2lvbiA9IDA7CisKKy8qCisgKiBWYXJpYWJsZSBiYWNraW5nIHRo ZSBHVUMsIGtlZXAgaXQgaW4gc3luYyB3aXRoIExvY2FsRGF0YUNoZWNrc3VtVmVyc2lvbi4K KyAqIFNlZSBTZXRMb2NhbERhdGFDaGVja3N1bVZlcnNpb24oKS4KKyAqLworaW50CQkJZGF0 YV9jaGVja3N1bXMgPSAwOworCitzdGF0aWMgdm9pZCBTZXRMb2NhbERhdGFDaGVja3N1bVZl cnNpb24odWludDMyIGRhdGFfY2hlY2tzdW1fdmVyc2lvbik7CisKIC8qIEZvciBXQUxJbnNl cnRMb2NrQWNxdWlyZS9SZWxlYXNlIGZ1bmN0aW9ucyAqLwogc3RhdGljIGludAlNeUxvY2tO byA9IDA7CiBzdGF0aWMgYm9vbCBob2xkaW5nQWxsTG9ja3MgPSBmYWxzZTsKQEAgLTcxNSw2 ICs3MzYsOCBAQCBzdGF0aWMgdm9pZCBXQUxJbnNlcnRMb2NrQWNxdWlyZUV4Y2x1c2l2ZSh2 b2lkKTsKIHN0YXRpYyB2b2lkIFdBTEluc2VydExvY2tSZWxlYXNlKHZvaWQpOwogc3RhdGlj IHZvaWQgV0FMSW5zZXJ0TG9ja1VwZGF0ZUluc2VydGluZ0F0KFhMb2dSZWNQdHIgaW5zZXJ0 aW5nQXQpOwogCitzdGF0aWMgdm9pZCBYTG9nQ2hlY2tzdW1zKENoZWNrc3VtVHlwZSBuZXdf dHlwZSk7CisKIC8qCiAgKiBJbnNlcnQgYW4gWExPRyByZWNvcmQgcmVwcmVzZW50ZWQgYnkg YW4gYWxyZWFkeS1jb25zdHJ1Y3RlZCBjaGFpbiBvZiBkYXRhCiAgKiBjaHVua3MuICBUaGlz IGlzIGEgbG93LWxldmVsIHJvdXRpbmU7IHRvIGNvbnN0cnVjdCB0aGUgV0FMIHJlY29yZCBo ZWFkZXIKQEAgLTgyOCw5ICs4NTEsMTAgQEAgWExvZ0luc2VydFJlY29yZChYTG9nUmVjRGF0 YSAqcmRhdGEsCiAJCSAqIG9ubHkgaGFwcGVuIGp1c3QgYWZ0ZXIgYSBjaGVja3BvaW50LCBz byBpdCdzIGJldHRlciB0byBiZSBzbG93IGluCiAJCSAqIHRoaXMgY2FzZSBhbmQgZmFzdCBv dGhlcndpc2UuCiAJCSAqCi0JCSAqIEFsc28gY2hlY2sgdG8gc2VlIGlmIGZ1bGxQYWdlV3Jp dGVzIHdhcyBqdXN0IHR1cm5lZCBvbiBvciB0aGVyZSdzIGEKLQkJICogcnVubmluZyBiYWNr dXAgKHdoaWNoIGZvcmNlcyBmdWxsLXBhZ2Ugd3JpdGVzKTsgaWYgd2Ugd2VyZW4ndAotCQkg KiBhbHJlYWR5IGRvaW5nIGZ1bGwtcGFnZSB3cml0ZXMgdGhlbiBnbyBiYWNrIGFuZCByZWNv bXB1dGUuCisJCSAqIEFsc28gY2hlY2sgdG8gc2VlIGlmIGZ1bGxQYWdlV3JpdGVzIHdhcyBq dXN0IHR1cm5lZCBvbiwgdGhlcmUncyBhCisJCSAqIHJ1bm5pbmcgYmFja3VwIG9yIGlmIGNo ZWNrc3VtcyBhcmUgZW5hYmxlZCAoYWxsIG9mIHdoaWNoIGZvcmNlcworCQkgKiBmdWxsLXBh Z2Ugd3JpdGVzKTsgaWYgd2Ugd2VyZW4ndCBhbHJlYWR5IGRvaW5nIGZ1bGwtcGFnZSB3cml0 ZXMKKwkJICogdGhlbiBnbyBiYWNrIGFuZCByZWNvbXB1dGUuCiAJCSAqCiAJCSAqIElmIHdl IGFyZW4ndCBkb2luZyBmdWxsLXBhZ2Ugd3JpdGVzIHRoZW4gUmVkb1JlY1B0ciBkb2Vzbid0 CiAJCSAqIGFjdHVhbGx5IGFmZmVjdCB0aGUgY29udGVudHMgb2YgdGhlIFhMT0cgcmVjb3Jk LCBzbyB3ZSdsbCB1cGRhdGUKQEAgLTg0Myw3ICs4NjcsOSBAQCBYTG9nSW5zZXJ0UmVjb3Jk KFhMb2dSZWNEYXRhICpyZGF0YSwKIAkJCUFzc2VydChSZWRvUmVjUHRyIDwgSW5zZXJ0LT5S ZWRvUmVjUHRyKTsKIAkJCVJlZG9SZWNQdHIgPSBJbnNlcnQtPlJlZG9SZWNQdHI7CiAJCX0K LQkJZG9QYWdlV3JpdGVzID0gKEluc2VydC0+ZnVsbFBhZ2VXcml0ZXMgfHwgSW5zZXJ0LT5y dW5uaW5nQmFja3VwcyA+IDApOworCQlkb1BhZ2VXcml0ZXMgPSAoSW5zZXJ0LT5mdWxsUGFn ZVdyaXRlcyB8fAorCQkJCQkJSW5zZXJ0LT5ydW5uaW5nQmFja3VwcyA+IDAgfHwKKwkJCQkJ CURhdGFDaGVja3N1bXNOZWVkV3JpdGUoKSk7CiAKIAkJaWYgKGRvUGFnZVdyaXRlcyAmJgog CQkJKCFwcmV2RG9QYWdlV3JpdGVzIHx8CkBAIC00MjM5LDYgKzQyNjUsMTIgQEAgSW5pdENv bnRyb2xGaWxlKHVpbnQ2NCBzeXNpZGVudGlmaWVyLCB1aW50MzIgZGF0YV9jaGVja3N1bV92 ZXJzaW9uKQogCUNvbnRyb2xGaWxlLT53YWxfbG9nX2hpbnRzID0gd2FsX2xvZ19oaW50czsK IAlDb250cm9sRmlsZS0+dHJhY2tfY29tbWl0X3RpbWVzdGFtcCA9IHRyYWNrX2NvbW1pdF90 aW1lc3RhbXA7CiAJQ29udHJvbEZpbGUtPmRhdGFfY2hlY2tzdW1fdmVyc2lvbiA9IGRhdGFf Y2hlY2tzdW1fdmVyc2lvbjsKKworCS8qCisJICogU2V0IHRoZSBkYXRhX2NoZWNrc3VtX3Zl cnNpb24gdmFsdWUgaW50byBYTG9nQ3RsLCB3aGljaCBpcyB3aGVyZSBhbGwKKwkgKiBwcm9j ZXNzZXMgZ2V0IHRoZSBjdXJyZW50IHZhbHVlIGZyb20uIChNYXliZSBpdCBzaG91bGQgZ28g anVzdCB0aGVyZT8pCisJICovCisJWExvZ0N0bC0+ZGF0YV9jaGVja3N1bV92ZXJzaW9uID0g ZGF0YV9jaGVja3N1bV92ZXJzaW9uOwogfQogCiBzdGF0aWMgdm9pZApAQCAtNDU3OCwxMCAr NDYxMCw2IEBAIFJlYWRDb250cm9sRmlsZSh2b2lkKQogCQkoU2l6ZU9mWExvZ0xvbmdQSEQg LSBTaXplT2ZYTG9nU2hvcnRQSEQpOwogCiAJQ2FsY3VsYXRlQ2hlY2twb2ludFNlZ21lbnRz KCk7Ci0KLQkvKiBNYWtlIHRoZSBpbml0ZGIgc2V0dGluZ3MgdmlzaWJsZSBhcyBHVUMgdmFy aWFibGVzLCB0b28gKi8KLQlTZXRDb25maWdPcHRpb24oImRhdGFfY2hlY2tzdW1zIiwgRGF0 YUNoZWNrc3Vtc0VuYWJsZWQoKSA/ICJ5ZXMiIDogIm5vIiwKLQkJCQkJUEdDX0lOVEVSTkFM LCBQR0NfU19EWU5BTUlDX0RFRkFVTFQpOwogfQogCiAvKgpAQCAtNDYxNSwxMyArNDY0Myw0 MTAgQEAgR2V0TW9ja0F1dGhlbnRpY2F0aW9uTm9uY2Uodm9pZCkKIH0KIAogLyoKLSAqIEFy ZSBjaGVja3N1bXMgZW5hYmxlZCBmb3IgZGF0YSBwYWdlcz8KKyAqIERhdGFDaGVja3N1bXNO ZWVkV3JpdGUKKyAqCQlSZXR1cm5zIHdoZXRoZXIgZGF0YSBjaGVja3N1bXMgbXVzdCBiZSB3 cml0dGVuIG9yIG5vdAorICoKKyAqIFJldHVybnMgdHJ1ZSBpZmYgZGF0YSBjaGVja3N1bXMg YXJlIGVuYWJsZWQgb3IgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nCisgKiBlbmFibGVk LiBEdXJpbmcgImlucHJvZ3Jlc3Mtb24iIGFuZCAiaW5wcm9ncmVzcy1vZmYiIHN0YXRlcyBj aGVja3N1bXMgbXVzdAorICogYmUgd3JpdHRlbiBldmVuIHRob3VnaCB0aGV5IGFyZSBub3Qg dmVyaWZpZWQgKHNlZSBkYXRhY2hlY2tzdW1zd29ya2VyLmMgZm9yCisgKiBhIGxvbmdlciBk aXNjdXNzaW9uKS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIGZvciBjYWxs c2l0ZXMgd2hpY2ggYXJlIGFib3V0IHRvIHdyaXRlIGEgZGF0YSBwYWdlCisgKiB0byBzdG9y YWdlLCBhbmQgbmVlZCB0byBrbm93IHdoZXRoZXIgdG8gcmUtY2FsY3VsYXRlIHRoZSBjaGVj a3N1bSBmb3IgdGhlCisgKiBwYWdlIGhlYWRlci4gQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIG11 c3QgYmUgcGVyZm9ybWVkIGFzIGNsb3NlIHRvIHRoZSB3cml0ZQorICogb3BlcmF0aW9uIGFz IHBvc3NpYmxlIHRvIGtlZXAgdGhlIGNyaXRpY2FsIHNlY3Rpb24gc2hvcnQuCisgKi8KK2Jv b2wKK0RhdGFDaGVja3N1bXNOZWVkV3JpdGUodm9pZCkKK3sKKwlyZXR1cm4gKExvY2FsRGF0 YUNoZWNrc3VtVmVyc2lvbiA9PSBQR19EQVRBX0NIRUNLU1VNX1ZFUlNJT04gfHwKKwkJCUxv Y2FsRGF0YUNoZWNrc3VtVmVyc2lvbiA9PSBQR19EQVRBX0NIRUNLU1VNX0lOUFJPR1JFU1Nf T05fVkVSU0lPTiB8fAorCQkJTG9jYWxEYXRhQ2hlY2tzdW1WZXJzaW9uID09IFBHX0RBVEFf Q0hFQ0tTVU1fSU5QUk9HUkVTU19PRkZfVkVSU0lPTik7Cit9CisKKy8qCisgKiBEYXRhQ2hl Y2tzdW1zTmVlZFZlcmlmeQorICoJCVJldHVybnMgd2hldGhlciBkYXRhIGNoZWNrc3VtcyBt dXN0IGJlIHZlcmlmaWVkIG9yIG5vdAorICoKKyAqIERhdGEgY2hlY2tzdW1zIGFyZSBvbmx5 IHZlcmlmaWVkIGlmIHRoZXkgYXJlIGZ1bGx5IGVuYWJsZWQgaW4gdGhlIGNsdXN0ZXIuCisg KiBEdXJpbmcgdGhlICJpbnByb2dyZXNzLW9uIiBhbmQgImlucHJvZ3Jlc3Mtb2ZmIiBzdGF0 ZXMgdGhleSBhcmUgb25seQorICogdXBkYXRlZCwgbm90IHZlcmlmaWVkIChzZWUgZGF0YWNo ZWNrc3Vtc3dvcmtlci5jIGZvciBhIGxvbmdlciBkaXNjdXNzaW9uKS4KKyAqCisgKiBUaGlz IGZ1bmN0aW9uIGlzIGludGVuZGVkIGZvciBjYWxsc2l0ZXMgd2hpY2ggaGF2ZSByZWFkIGRh dGEgYW5kIGFyZSBhYm91dAorICogdG8gcGVyZm9ybSBjaGVja3N1bSB2YWxpZGF0aW9uIGJh c2VkIG9uIHRoZSByZXN1bHQgb2YgdGhpcy4gIENhbGxpbmcgdGhpcworICogZnVuY3Rpb24g bXVzdCBiZSBwZXJmb3JtZWQgYXMgY2xvc2UgdG8gdGhlIHZhbGlkYXRpb24gY2FsbCBhcyBw b3NzaWJsZSB0bworICoga2VlcCB0aGUgY3JpdGljYWwgc2VjdGlvbiBzaG9ydC4gVGhpcyBp cyBpbiBvcmRlciB0byBwcm90ZWN0IGFnYWluc3QgdGltZSBvZgorICogY2hlY2svdGltZSBv ZiB1c2Ugc2l0dWF0aW9ucyBhcm91bmQgZGF0YSBjaGVja3N1bSB2YWxpZGF0aW9uLgogICov CiBib29sCi1EYXRhQ2hlY2tzdW1zRW5hYmxlZCh2b2lkKQorRGF0YUNoZWNrc3Vtc05lZWRW ZXJpZnkodm9pZCkKK3sKKwlyZXR1cm4gKExvY2FsRGF0YUNoZWNrc3VtVmVyc2lvbiA9PSBQ R19EQVRBX0NIRUNLU1VNX1ZFUlNJT04pOworfQorCisvKgorICogRGF0YUNoZWNrc3Vtc09u SW5Qcm9ncmVzcworICoJCVJldHVybnMgd2hldGhlciBkYXRhIGNoZWNrc3VtcyBhcmUgYmVp bmcgZW5hYmxlZAorICoKKyAqIE1vc3Qgb3BlcmF0aW9ucyBkb24ndCBuZWVkIHRvIHdvcnJ5 IGFib3V0IHRoZSAiaW5wcm9ncmVzcyIgc3RhdGVzLCBhbmQKKyAqIHNob3VsZCB1c2UgRGF0 YUNoZWNrc3Vtc05lZWRWZXJpZnkoKSBvciBEYXRhQ2hlY2tzdW1zTmVlZFdyaXRlKCkuIFRo ZQorICogImlucHJvZ3Jlc3Mtb24iIHN0YXRlIGZvciBlbmFibGluZyBjaGVja3N1bXMgaXMg dXNlZCB3aGVuIHRoZSBjaGVja3N1bQorICogd29ya2VyIGlzIHNldHRpbmcgY2hlY2tzdW1z IG9uIGFsbCBwYWdlcywgaXQgY2FuIHRodXMgYmUgdXNlZCB0byBjaGVjayBmb3IKKyAqIGFi b3J0ZWQgY2hlY2tzdW0gcHJvY2Vzc2luZyB3aGljaCBuZWVkIHRvIGJlIHJlc3RhcnRlZC4K KyAqLworaW5saW5lIGJvb2wKK0RhdGFDaGVja3N1bXNPbkluUHJvZ3Jlc3Modm9pZCkKK3sK KwlyZXR1cm4gKExvY2FsRGF0YUNoZWNrc3VtVmVyc2lvbiA9PSBQR19EQVRBX0NIRUNLU1VN X0lOUFJPR1JFU1NfT05fVkVSU0lPTik7Cit9CisKKy8qCisgKiBEYXRhQ2hlY2tzdW1zT2Zm SW5Qcm9ncmVzcworICoJCVJldHVybnMgd2hldGhlciBkYXRhIGNoZWNrc3VtcyBhcmUgYmVp bmcgZGlzYWJsZWQKKyAqCisgKiBUaGUgImlucHJvZ3Jlc3Mtb2ZmIiBzdGF0ZSBmb3IgZGlz YWJsaW5nIGNoZWNrc3VtcyBpcyB1c2VkIGZvciB3aGVuIHRoZQorICogd29ya2VyIHJlc2V0 cyB0aGUgY2F0YWxvZyBzdGF0ZS4gIERhdGFDaGVja3N1bXNOZWVkVmVyaWZ5KCkgb3IKKyAq IERhdGFDaGVja3N1bXNOZWVkV3JpdGUoKSBzaG91bGQgYmUgdXNlZCBmb3IgZGVjaWRpbmcg d2hldGhlciB0byByZWFkL3dyaXRlCisgKiBjaGVja3N1bXMuCisgKi8KK2Jvb2wKK0RhdGFD aGVja3N1bXNPZmZJblByb2dyZXNzKHZvaWQpCit7CisJcmV0dXJuIChMb2NhbERhdGFDaGVj a3N1bVZlcnNpb24gPT0gUEdfREFUQV9DSEVDS1NVTV9JTlBST0dSRVNTX09GRl9WRVJTSU9O KTsKK30KKworLyoKKyAqIFNldERhdGFDaGVja3N1bXNPbkluUHJvZ3Jlc3MKKyAqCQlTZXRz IHRoZSBkYXRhIGNoZWNrc3VtIHN0YXRlIHRvICJpbnByb2dyZXNzLW9uIiB0byBlbmFibGUg Y2hlY2tzdW1zCisgKgorICogVG8gc3RhcnQgdGhlIHByb2Nlc3Mgb2YgZW5hYmxpbmcgZGF0 YSBjaGVja3N1bXMgaW4gYSBydW5uaW5nIGNsdXN0ZXIgdGhlCisgKiBkYXRhX2NoZWNrc3Vt X3ZlcnNpb24gc3RhdGUgbXVzdCBiZSBjaGFuZ2VkIHRvICJpbnByb2dyZXNzLW9uIi4gU2Vl CisgKiBTZXREYXRhQ2hlY2tzdW1zT24gYmVsb3cgZm9yIGEgZGVzY3JpcHRpb24gb24gaG93 IHRoaXMgc3RhdGUgY2hhbmdlIHdvcmtzLgorICogVGhpcyBmdW5jdGlvbiBibG9ja3MgdW50 aWwgYWxsIGJhY2tlbmRzIGluIHRoZSBjbHVzdGVyIGhhdmUgYWNrbm93bGVkZ2VkIHRoZQor ICogc3RhdGUgdHJhbnNpdGlvbi4KKyAqLwordm9pZAorU2V0RGF0YUNoZWNrc3Vtc09uSW5Q cm9ncmVzcyh2b2lkKQoreworCXVpbnQ2NAkJYmFycmllcjsKKworCUFzc2VydChDb250cm9s RmlsZSAhPSBOVUxMKTsKKworCS8qCisJICogVGhlIHN0YXRlIHRyYW5zaXRpb24gaXMgcGVy Zm9ybWVkIGluIGEgY3JpdGljYWwgc2VjdGlvbiB3aXRoCisJICogY2hlY2twb2ludHMgaGVs ZCBvZmYgdG8gcHJvdmlkZSBjcmFzaCBzYWZldHkuCisJICovCisJTXlQcm9jLT5kZWxheUNo a3B0RmxhZ3MgfD0gREVMQVlfQ0hLUFRfU1RBUlQ7CisJU1RBUlRfQ1JJVF9TRUNUSU9OKCk7 CisKKwlYTG9nQ2hlY2tzdW1zKFBHX0RBVEFfQ0hFQ0tTVU1fSU5QUk9HUkVTU19PTl9WRVJT SU9OKTsKKworCVNwaW5Mb2NrQWNxdWlyZSgmWExvZ0N0bC0+aW5mb19sY2spOworCVhMb2dD dGwtPmRhdGFfY2hlY2tzdW1fdmVyc2lvbiA9IFBHX0RBVEFfQ0hFQ0tTVU1fSU5QUk9HUkVT U19PTl9WRVJTSU9OOworCVNwaW5Mb2NrUmVsZWFzZSgmWExvZ0N0bC0+aW5mb19sY2spOwor CisJYmFycmllciA9IEVtaXRQcm9jU2lnbmFsQmFycmllcihQUk9DU0lHTkFMX0JBUlJJRVJf Q0hFQ0tTVU1fSU5QUk9HUkVTU19PTik7CisKKwlFTkRfQ1JJVF9TRUNUSU9OKCk7CisJTXlQ cm9jLT5kZWxheUNoa3B0RmxhZ3MgJj0gfkRFTEFZX0NIS1BUX1NUQVJUOworCisJLyoKKwkg KiBBd2FpdCBzdGF0ZSBjaGFuZ2UgaW4gYWxsIGJhY2tlbmRzIHRvIGVuc3VyZSB0aGF0IGFs bCBiYWNrZW5kcyBhcmUgaW4KKwkgKiAiaW5wcm9ncmVzcy1vbiIuIE9uY2UgZG9uZSB3ZSBr bm93IHRoYXQgYWxsIGJhY2tlbmRzIGFyZSB3cml0aW5nIGRhdGEKKwkgKiBjaGVja3N1bXMu CisJICovCisJV2FpdEZvclByb2NTaWduYWxCYXJyaWVyKGJhcnJpZXIpOworfQorCisvKgor ICogU2V0RGF0YUNoZWNrc3Vtc09uCisgKgkJRW5hYmxlcyBkYXRhIGNoZWNrc3VtcyBjbHVz dGVyLXdpZGUKKyAqCisgKiBFbmFibGluZyBkYXRhIGNoZWNrc3VtcyBpcyBwZXJmb3JtZWQg dXNpbmcgdHdvIGJhcnJpZXJzLCB0aGUgZmlyc3Qgb25lIHRvCisgKiBzZXQgdGhlIGNoZWNr c3VtcyBzdGF0ZSB0byAiaW5wcm9ncmVzcy1vbiIgKHdoaWNoIGlzIHBlcmZvcm1lZCBieQor ICogU2V0RGF0YUNoZWNrc3Vtc09uSW5Qcm9ncmVzcygpKSBhbmQgdGhlIHNlY29uZCBvbmUg dG8gc2V0IHRoZSBzdGF0ZSB0byAib24iCisgKiAocGVyZm9ybWVkIGhlcmUpLgorICoKKyAq IFRvIHN0YXJ0IHRoZSBwcm9jZXNzIG9mIGVuYWJsaW5nIGRhdGEgY2hlY2tzdW1zIGluIGEg cnVubmluZyBjbHVzdGVyIHRoZQorICogZGF0YV9jaGVja3N1bV92ZXJzaW9uIHN0YXRlIG11 c3QgYmUgY2hhbmdlZCB0byAiaW5wcm9ncmVzcy1vbiIuICBUaGlzIHN0YXRlCisgKiByZXF1 aXJlcyBkYXRhIGNoZWNrc3VtcyB0byBiZSB3cml0dGVuIGJ1dCBub3QgdmVyaWZpZWQuIFRo aXMgZW5zdXJlcyB0aGF0CisgKiBhbGwgZGF0YSBwYWdlcyBjYW4gYmUgY2hlY2tzdW1tZWQg d2l0aG91dCB0aGUgcmlzayBvZiBmYWxzZSBuZWdhdGl2ZXMgaW4KKyAqIHZhbGlkYXRpb24g ZHVyaW5nIHRoZSBwcm9jZXNzLiAgV2hlbiBhbGwgZXhpc3RpbmcgcGFnZXMgYXJlIGd1YXJh bnRlZWQgdG8KKyAqIGhhdmUgY2hlY2tzdW1zLCBhbmQgYWxsIG5ldyBwYWdlcyB3aWxsIGJl IGluaXRpYXRlZCB3aXRoIGNoZWNrc3VtcywgdGhlCisgKiBzdGF0ZSBjYW4gYmUgY2hhbmdl ZCB0byAib24iLiBPbmNlIHRoZSBzdGF0ZSBpcyAib24iIGNoZWNrc3VtcyB3aWxsIGJlIGJv dGgKKyAqIHdyaXR0ZW4gYW5kIHZlcmlmaWVkLiBTZWUgZGF0YWNoZWNrc3Vtc3dvcmtlci5j IGZvciBhIGxvbmdlciBkaXNjdXNzaW9uIG9uCisgKiBob3cgZGF0YSBjaGVja3N1bXMgY2Fu IGJlIGVuYWJsZWQgaW4gYSBydW5uaW5nIGNsdXN0ZXIuCisgKgorICogVGhpcyBmdW5jdGlv biBibG9ja3MgdW50aWwgYWxsIGJhY2tlbmRzIGluIHRoZSBjbHVzdGVyIGhhdmUgYWNrbm93 bGVkZ2VkIHRoZQorICogc3RhdGUgdHJhbnNpdGlvbi4KKyAqLwordm9pZAorU2V0RGF0YUNo ZWNrc3Vtc09uKHZvaWQpCiB7CisJdWludDY0CQliYXJyaWVyOworCiAJQXNzZXJ0KENvbnRy b2xGaWxlICE9IE5VTEwpOwotCXJldHVybiAoQ29udHJvbEZpbGUtPmRhdGFfY2hlY2tzdW1f dmVyc2lvbiA+IDApOworCisJU3BpbkxvY2tBY3F1aXJlKCZYTG9nQ3RsLT5pbmZvX2xjayk7 CisKKwkvKgorCSAqIFRoZSBvbmx5IGFsbG93ZWQgc3RhdGUgdHJhbnNpdGlvbiB0byAib24i IGlzIGZyb20gImlucHJvZ3Jlc3Mtb24iIHNpbmNlCisJICogdGhhdCBzdGF0ZSBlbnN1cmVz IHRoYXQgYWxsIHBhZ2VzIHdpbGwgaGF2ZSBkYXRhIGNoZWNrc3VtcyB3cml0dGVuLgorCSAq LworCWlmIChYTG9nQ3RsLT5kYXRhX2NoZWNrc3VtX3ZlcnNpb24gIT0gUEdfREFUQV9DSEVD S1NVTV9JTlBST0dSRVNTX09OX1ZFUlNJT04pCisJeworCQlTcGluTG9ja1JlbGVhc2UoJlhM b2dDdGwtPmluZm9fbGNrKTsKKwkJZWxvZyhFUlJPUiwgImNoZWNrc3VtcyBub3QgaW4gXCJp bnByb2dyZXNzLW9uXCIgbW9kZSIpOworCX0KKworCVNwaW5Mb2NrUmVsZWFzZSgmWExvZ0N0 bC0+aW5mb19sY2spOworCisJTXlQcm9jLT5kZWxheUNoa3B0RmxhZ3MgfD0gREVMQVlfQ0hL UFRfU1RBUlQ7CisJU1RBUlRfQ1JJVF9TRUNUSU9OKCk7CisKKwlYTG9nQ2hlY2tzdW1zKFBH X0RBVEFfQ0hFQ0tTVU1fVkVSU0lPTik7CisKKwlTcGluTG9ja0FjcXVpcmUoJlhMb2dDdGwt PmluZm9fbGNrKTsKKwlYTG9nQ3RsLT5kYXRhX2NoZWNrc3VtX3ZlcnNpb24gPSBQR19EQVRB X0NIRUNLU1VNX1ZFUlNJT047CisJU3BpbkxvY2tSZWxlYXNlKCZYTG9nQ3RsLT5pbmZvX2xj ayk7CisKKwliYXJyaWVyID0gRW1pdFByb2NTaWduYWxCYXJyaWVyKFBST0NTSUdOQUxfQkFS UklFUl9DSEVDS1NVTV9PTik7CisKKwlFTkRfQ1JJVF9TRUNUSU9OKCk7CisJTXlQcm9jLT5k ZWxheUNoa3B0RmxhZ3MgJj0gfkRFTEFZX0NIS1BUX1NUQVJUOworCisJLyoKKwkgKiBBd2Fp dCBzdGF0ZSB0cmFuc2l0aW9uIG9mICJvbiIgaW4gYWxsIGJhY2tlbmRzLiBXaGVuIGRvbmUg d2Uga25vdyB0aGF0CisJICogZGF0YSBjaGVja3N1bXMgYXJlIGVuYWJsZWQgaW4gYWxsIGJh Y2tlbmRzIGFuZCBkYXRhIGNoZWNrc3VtcyBhcmUgYm90aAorCSAqIHdyaXR0ZW4gYW5kIHZl cmlmaWVkLgorCSAqLworCVdhaXRGb3JQcm9jU2lnbmFsQmFycmllcihiYXJyaWVyKTsKK30K KworLyoKKyAqIFNldERhdGFDaGVja3N1bXNPZmYKKyAqCQlEaXNhYmxlcyBkYXRhIGNoZWNr c3VtcyBjbHVzdGVyLXdpZGUKKyAqCisgKiBEaXNhYmxpbmcgZGF0YSBjaGVja3N1bXMgbXVz dCBiZSBwZXJmb3JtZWQgd2l0aCB0d28gc2V0cyBvZiBiYXJyaWVycywgZWFjaAorICogY2Fy cnlpbmcgYSBkaWZmZXJlbnQgc3RhdGUuIFRoZSBzdGF0ZSBpcyBmaXJzdCBzZXQgdG8gImlu cHJvZ3Jlc3Mtb2ZmIgorICogZHVyaW5nIHdoaWNoIGNoZWNrc3VtcyBhcmUgc3RpbGwgd3Jp dHRlbiBidXQgbm90IHZlcmlmaWVkLiBUaGlzIGVuc3VyZXMgdGhhdAorICogYmFja2VuZHMg d2hpY2ggaGF2ZSB5ZXQgdG8gb2JzZXJ2ZSB0aGUgc3RhdGUgY2hhbmdlIGZyb20gIm9uIiB3 b24ndCBnZXQKKyAqIHZhbGlkYXRpb24gZXJyb3JzIG9uIGNvbmN1cnJlbnRseSBtb2RpZmll ZCBwYWdlcy4gT25jZSBhbGwgYmFja2VuZHMgaGF2ZQorICogY2hhbmdlZCB0byAiaW5wcm9n cmVzcy1vZmYiLCB0aGUgYmFycmllciBmb3IgbW92aW5nIHRvICJvZmYiIGNhbiBiZSBlbWl0 dGVkLgorICogVGhpcyBmdW5jdGlvbiBibG9ja3MgdW50aWwgYWxsIGJhY2tlbmRzIGluIHRo ZSBjbHVzdGVyIGhhdmUgYWNrbm93bGVkZ2VkIHRoZQorICogc3RhdGUgdHJhbnNpdGlvbi4K KyAqLwordm9pZAorU2V0RGF0YUNoZWNrc3Vtc09mZih2b2lkKQoreworCXVpbnQ2NAkJYmFy cmllcjsKKworCUFzc2VydChDb250cm9sRmlsZSk7CisKKwlTcGluTG9ja0FjcXVpcmUoJlhM b2dDdGwtPmluZm9fbGNrKTsKKworCS8qIElmIGRhdGEgY2hlY2tzdW1zIGFyZSBhbHJlYWR5 IGRpc2FibGVkIHRoZXJlIGlzIG5vdGhpbmcgdG8gZG8gKi8KKwlpZiAoWExvZ0N0bC0+ZGF0 YV9jaGVja3N1bV92ZXJzaW9uID09IDApCisJeworCQlTcGluTG9ja1JlbGVhc2UoJlhMb2dD dGwtPmluZm9fbGNrKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogSWYgZGF0YSBjaGVj a3N1bXMgYXJlIGN1cnJlbnRseSBlbmFibGVkIHdlIGZpcnN0IHRyYW5zaXRpb24gdG8gdGhl CisJICogImlucHJvZ3Jlc3Mtb2ZmIiBzdGF0ZSBkdXJpbmcgd2hpY2ggYmFja2VuZHMgY29u dGludWUgdG8gd3JpdGUKKwkgKiBjaGVja3N1bXMgd2l0aG91dCB2ZXJpZnlpbmcgdGhlbS4g V2hlbiBhbGwgYmFja2VuZHMgYXJlIGluCisJICogImlucHJvZ3Jlc3Mtb2ZmIiB0aGUgbmV4 dCB0cmFuc2l0aW9uIHRvICJvZmYiIGNhbiBiZSBwZXJmb3JtZWQsIGFmdGVyCisJICogd2hp Y2ggYWxsIGRhdGEgY2hlY2tzdW0gcHJvY2Vzc2luZyBpcyBkaXNhYmxlZC4KKwkgKi8KKwlp ZiAoWExvZ0N0bC0+ZGF0YV9jaGVja3N1bV92ZXJzaW9uID09IFBHX0RBVEFfQ0hFQ0tTVU1f VkVSU0lPTikKKwl7CisJCVNwaW5Mb2NrUmVsZWFzZSgmWExvZ0N0bC0+aW5mb19sY2spOwor CisJCU15UHJvYy0+ZGVsYXlDaGtwdEZsYWdzIHw9IERFTEFZX0NIS1BUX1NUQVJUOworCQlT VEFSVF9DUklUX1NFQ1RJT04oKTsKKworCQlYTG9nQ2hlY2tzdW1zKFBHX0RBVEFfQ0hFQ0tT VU1fSU5QUk9HUkVTU19PRkZfVkVSU0lPTik7CisKKwkJU3BpbkxvY2tBY3F1aXJlKCZYTG9n Q3RsLT5pbmZvX2xjayk7CisJCVhMb2dDdGwtPmRhdGFfY2hlY2tzdW1fdmVyc2lvbiA9IFBH X0RBVEFfQ0hFQ0tTVU1fSU5QUk9HUkVTU19PRkZfVkVSU0lPTjsKKwkJU3BpbkxvY2tSZWxl YXNlKCZYTG9nQ3RsLT5pbmZvX2xjayk7CisKKwkJYmFycmllciA9IEVtaXRQcm9jU2lnbmFs QmFycmllcihQUk9DU0lHTkFMX0JBUlJJRVJfQ0hFQ0tTVU1fSU5QUk9HUkVTU19PRkYpOwor CisJCUVORF9DUklUX1NFQ1RJT04oKTsKKwkJTXlQcm9jLT5kZWxheUNoa3B0RmxhZ3MgJj0g fkRFTEFZX0NIS1BUX1NUQVJUOworCisKKwkJLyoKKwkJICogVXBkYXRlIGxvY2FsIHN0YXRl IGluIGFsbCBiYWNrZW5kcyB0byBlbnN1cmUgdGhhdCBhbnkgYmFja2VuZCBpbgorCQkgKiAi b24iIHN0YXRlIGlzIGNoYW5nZWQgdG8gImlucHJvZ3Jlc3Mtb2ZmIi4KKwkJICovCisJCVdh aXRGb3JQcm9jU2lnbmFsQmFycmllcihiYXJyaWVyKTsKKworCQkvKgorCQkgKiBBdCB0aGlz IHBvaW50IHdlIGtub3cgdGhhdCBubyBiYWNrZW5kcyBhcmUgdmVyaWZ5aW5nIGRhdGEgY2hl Y2tzdW1zCisJCSAqIGR1cmluZyByZWFkaW5nLiBOZXh0LCB3ZSBjYW4gc2FmZWx5IG1vdmUg dG8gc3RhdGUgIm9mZiIgdG8gYWxzbworCQkgKiBzdG9wIHdyaXRpbmcgY2hlY2tzdW1zLgor CQkgKi8KKwl9CisJZWxzZQorCXsKKwkJLyoKKwkJICogRW5kaW5nIHVwIGhlcmUgaW1wbGll cyB0aGF0IHRoZSBjaGVja3N1bXMgc3RhdGUgaXMgImlucHJvZ3Jlc3Mtb24iCisJCSAqIG9y ICJpbnByb2dyZXNzLW9mZiIgYW5kIHdlIGNhbiB0cmFuc2l0aW9uIGRpcmVjdGx5IHRvICJv ZmYiIGZyb20KKwkJICogdGhlcmUuCisJCSAqLworCQlTcGluTG9ja1JlbGVhc2UoJlhMb2dD dGwtPmluZm9fbGNrKTsKKwl9CisKKwkvKgorCSAqIEVuc3VyZSB0aGF0IHdlIGRvbid0IGlu Y3VyIGEgY2hlY2twb2ludCBkdXJpbmcgZGlzYWJsaW5nIGNoZWNrc3Vtcy4KKwkgKi8KKwlN eVByb2MtPmRlbGF5Q2hrcHRGbGFncyB8PSBERUxBWV9DSEtQVF9TVEFSVDsKKwlTVEFSVF9D UklUX1NFQ1RJT04oKTsKKworCVhMb2dDaGVja3N1bXMoMCk7CisKKwlTcGluTG9ja0FjcXVp cmUoJlhMb2dDdGwtPmluZm9fbGNrKTsKKwlYTG9nQ3RsLT5kYXRhX2NoZWNrc3VtX3ZlcnNp b24gPSAwOworCVNwaW5Mb2NrUmVsZWFzZSgmWExvZ0N0bC0+aW5mb19sY2spOworCisJYmFy cmllciA9IEVtaXRQcm9jU2lnbmFsQmFycmllcihQUk9DU0lHTkFMX0JBUlJJRVJfQ0hFQ0tT VU1fT0ZGKTsKKworCUVORF9DUklUX1NFQ1RJT04oKTsKKwlNeVByb2MtPmRlbGF5Q2hrcHRG bGFncyAmPSB+REVMQVlfQ0hLUFRfU1RBUlQ7CisKKwlXYWl0Rm9yUHJvY1NpZ25hbEJhcnJp ZXIoYmFycmllcik7Cit9CisKKy8qCisgKiBQcm9jU2lnbmFsQmFycmllciBhYnNvcnB0aW9u IGZ1bmN0aW9ucyBmb3IgZW5hYmxpbmcgYW5kIGRpc2FibGluZyBkYXRhCisgKiBjaGVja3N1 bXMgaW4gYSBydW5uaW5nIGNsdXN0ZXIuIFRoZSBwcm9jc2lnbmFsYmFycmllcnMgYXJlIGVt aXR0ZWQgaW4gdGhlCisgKiBTZXREYXRhQ2hlY2tzdW1zKiBmdW5jdGlvbnMuCisgKi8KK2Jv b2wKK0Fic29yYkNoZWNrc3Vtc09uSW5Qcm9ncmVzc0JhcnJpZXIodm9pZCkKK3sKKwlTZXRM b2NhbERhdGFDaGVja3N1bVZlcnNpb24oUEdfREFUQV9DSEVDS1NVTV9JTlBST0dSRVNTX09O X1ZFUlNJT04pOworCXJldHVybiB0cnVlOworfQorCitib29sCitBYnNvcmJDaGVja3N1bXNP bkJhcnJpZXIodm9pZCkKK3sKKwlBc3NlcnQoTG9jYWxEYXRhQ2hlY2tzdW1WZXJzaW9uID09 IFBHX0RBVEFfQ0hFQ0tTVU1fSU5QUk9HUkVTU19PTl9WRVJTSU9OKTsKKwlTZXRMb2NhbERh dGFDaGVja3N1bVZlcnNpb24oUEdfREFUQV9DSEVDS1NVTV9WRVJTSU9OKTsKKwlyZXR1cm4g dHJ1ZTsKK30KKworYm9vbAorQWJzb3JiQ2hlY2tzdW1zT2ZmSW5Qcm9ncmVzc0JhcnJpZXIo dm9pZCkKK3sKKwlTZXRMb2NhbERhdGFDaGVja3N1bVZlcnNpb24oUEdfREFUQV9DSEVDS1NV TV9JTlBST0dSRVNTX09GRl9WRVJTSU9OKTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworYm9vbAor QWJzb3JiQ2hlY2tzdW1zT2ZmQmFycmllcih2b2lkKQoreworCVNldExvY2FsRGF0YUNoZWNr c3VtVmVyc2lvbigwKTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIEluaXRMb2NhbENv bnRyb2xEYXRhCisgKgorICogU2V0IHVwIGJhY2tlbmQgbG9jYWwgY2FjaGVzIG9mIGNvbnRy b2xkYXRhIHZhcmlhYmxlcyB3aGljaCBtYXkgY2hhbmdlIGF0CisgKiBhbnkgcG9pbnQgZHVy aW5nIHJ1bnRpbWUgYW5kIHRodXMgcmVxdWlyZSBzcGVjaWFsIGNhc2VkIGxvY2tpbmcuIFNv IGZhcgorICogdGhpcyBvbmx5IGFwcGxpZXMgdG8gZGF0YV9jaGVja3N1bV92ZXJzaW9uLCBi dXQgaXQncyBpbnRlbmRlZCB0byBiZSBnZW5lcmFsCisgKiBwdXJwb3NlIGVub3VnaCB0byBo YW5kbGUgZnV0dXJlIGNhc2VzLgorICovCit2b2lkCitJbml0TG9jYWxDb250cm9sZGF0YSh2 b2lkKQoreworCVNwaW5Mb2NrQWNxdWlyZSgmWExvZ0N0bC0+aW5mb19sY2spOworCVNldExv Y2FsRGF0YUNoZWNrc3VtVmVyc2lvbihYTG9nQ3RsLT5kYXRhX2NoZWNrc3VtX3ZlcnNpb24p OworCVNwaW5Mb2NrUmVsZWFzZSgmWExvZ0N0bC0+aW5mb19sY2spOworfQorCisvKgorICog WFhYIHByb2JhYmx5IHNob3VsZCBiZSBjYWxsZWQgaW4gYWxsIHBsYWNlcyB0aGF0IG1vZGlm eSB0aGUgdmFsdWUgb2YKKyAqIExvY2FsRGF0YUNoZWNrc3VtVmVyc2lvbiAodG8gbWFrZSBz dXJlIGRhdGFfY2hlY2tzdW1zIEdVQyBpcyBpbiBzeW5jKQorICoKKyAqIFhYWCBhcmVuJ3Qg UEdfREFUQV8gYW5kIERBVEFfIGNvbnN0YW50cyB0aGUgc2FtZT8gd2h5IGRvIHdlIG5lZWQg Ym90aD8KKyAqLwordm9pZAorU2V0TG9jYWxEYXRhQ2hlY2tzdW1WZXJzaW9uKHVpbnQzMiBk YXRhX2NoZWNrc3VtX3ZlcnNpb24pCit7CisJTG9jYWxEYXRhQ2hlY2tzdW1WZXJzaW9uID0g ZGF0YV9jaGVja3N1bV92ZXJzaW9uOworCisJc3dpdGNoIChMb2NhbERhdGFDaGVja3N1bVZl cnNpb24pCisJeworCQljYXNlIFBHX0RBVEFfQ0hFQ0tTVU1fVkVSU0lPTjoKKwkJCWRhdGFf Y2hlY2tzdW1zID0gREFUQV9DSEVDS1NVTVNfT047CisJCQlicmVhazsKKworCQljYXNlIFBH X0RBVEFfQ0hFQ0tTVU1fSU5QUk9HUkVTU19PTl9WRVJTSU9OOgorCQkJZGF0YV9jaGVja3N1 bXMgPSBEQVRBX0NIRUNLU1VNU19JTlBST0dSRVNTX09OOworCQkJYnJlYWs7CisKKwkJY2Fz ZSBQR19EQVRBX0NIRUNLU1VNX0lOUFJPR1JFU1NfT0ZGX1ZFUlNJT046CisJCQlkYXRhX2No ZWNrc3VtcyA9IERBVEFfQ0hFQ0tTVU1TX0lOUFJPR1JFU1NfT0ZGOworCQkJYnJlYWs7CisK KwkJZGVmYXVsdDoKKwkJCWRhdGFfY2hlY2tzdW1zID0gREFUQV9DSEVDS1NVTVNfT0ZGOwor CQkJYnJlYWs7CisJfQorfQorCisvKgorICogSW5pdGlhbGl6ZSB0aGUgdmFyaW91cyBkYXRh IGNoZWNrc3VtIHZhbHVlcyAtIEdVQywgbG9jYWwsIC4uLi4KKyAqLwordm9pZAorSW5pdExv Y2FsRGF0YUNoZWNrc3VtVmVyc2lvbih2b2lkKQoreworCXVpbnQzMglkYXRhX2NoZWNrc3Vt X3ZlcnNpb247CisKKwlTcGluTG9ja0FjcXVpcmUoJlhMb2dDdGwtPmluZm9fbGNrKTsKKwlk YXRhX2NoZWNrc3VtX3ZlcnNpb24gPSBYTG9nQ3RsLT5kYXRhX2NoZWNrc3VtX3ZlcnNpb247 CisJU3BpbkxvY2tSZWxlYXNlKCZYTG9nQ3RsLT5pbmZvX2xjayk7CisKKwlTZXRMb2NhbERh dGFDaGVja3N1bVZlcnNpb24oZGF0YV9jaGVja3N1bV92ZXJzaW9uKTsKK30KKworLyoKKyAq IEdldCB0aGUgbG9jYWwgZGF0YV9jaGVja3N1bV92ZXJzaW9uIChjYWNoZWQgWExvZ0N0bCB2 YWx1ZSkuCisgKi8KK3VpbnQzMgorR2V0TG9jYWxEYXRhQ2hlY2tzdW1WZXJzaW9uKHZvaWQp Cit7CisJcmV0dXJuIExvY2FsRGF0YUNoZWNrc3VtVmVyc2lvbjsKK30KKworLyoKKyAqIEdl dCB0aGUgKmN1cnJlbnQqIGRhdGFfY2hlY2tzdW1fdmVyc2lvbiAobWlnaHQgbm90IGJlIHdy aXR0ZW4gdG8gY29udHJvbAorICogZmlsZSB5ZXQpLgorICovCit1aW50MzIKK0dldEN1cnJl bnREYXRhQ2hlY2tzdW1WZXJzaW9uKHZvaWQpCit7CisJcmV0dXJuIFhMb2dDdGwtPmRhdGFf Y2hlY2tzdW1fdmVyc2lvbjsKK30KKworLyogZ3VjIGhvb2sgKi8KK2NvbnN0IGNoYXIgKgor c2hvd19kYXRhX2NoZWNrc3Vtcyh2b2lkKQoreworCWlmIChMb2NhbERhdGFDaGVja3N1bVZl cnNpb24gPT0gUEdfREFUQV9DSEVDS1NVTV9WRVJTSU9OKQorCQlyZXR1cm4gIm9uIjsKKwll bHNlIGlmIChMb2NhbERhdGFDaGVja3N1bVZlcnNpb24gPT0gUEdfREFUQV9DSEVDS1NVTV9J TlBST0dSRVNTX09OX1ZFUlNJT04pCisJCXJldHVybiAiaW5wcm9ncmVzcy1vbiI7CisJZWxz ZSBpZiAoTG9jYWxEYXRhQ2hlY2tzdW1WZXJzaW9uID09IFBHX0RBVEFfQ0hFQ0tTVU1fSU5Q Uk9HUkVTU19PRkZfVkVSU0lPTikKKwkJcmV0dXJuICJpbnByb2dyZXNzLW9mZiI7CisJZWxz ZQorCQlyZXR1cm4gIm9mZiI7CiB9CiAKIC8qCkBAIC01MDYzLDYgKzU0ODgsMTEgQEAgWExP R1NobWVtSW5pdCh2b2lkKQogCVhMb2dDdGwtPkluc3RhbGxYTG9nRmlsZVNlZ21lbnRBY3Rp dmUgPSBmYWxzZTsKIAlYTG9nQ3RsLT5XYWxXcml0ZXJTbGVlcGluZyA9IGZhbHNlOwogCisJ LyogdXNlIHRoZSBjaGVja3N1bSBpbmZvIGZyb20gY29udHJvbCBmaWxlICovCisJWExvZ0N0 bC0+ZGF0YV9jaGVja3N1bV92ZXJzaW9uID0gQ29udHJvbEZpbGUtPmRhdGFfY2hlY2tzdW1f dmVyc2lvbjsKKworCVNldExvY2FsRGF0YUNoZWNrc3VtVmVyc2lvbihYTG9nQ3RsLT5kYXRh X2NoZWNrc3VtX3ZlcnNpb24pOworCiAJU3BpbkxvY2tJbml0KCZYTG9nQ3RsLT5JbnNlcnQu aW5zZXJ0cG9zX2xjayk7CiAJU3BpbkxvY2tJbml0KCZYTG9nQ3RsLT5pbmZvX2xjayk7CiAJ cGdfYXRvbWljX2luaXRfdTY0KCZYTG9nQ3RsLT5sb2dJbnNlcnRSZXN1bHQsIEludmFsaWRY TG9nUmVjUHRyKTsKQEAgLTYxOTQsNiArNjYyNCwzMyBAQCBTdGFydHVwWExPRyh2b2lkKQog CSAqLwogCUNvbXBsZXRlQ29tbWl0VHNJbml0aWFsaXphdGlvbigpOwogCisJLyoKKwkgKiBJ ZiB3ZSByZWFjaCB0aGlzIHBvaW50IHdpdGggY2hlY2tzdW1zIGJlaW5nIGVuYWJsZWQgKCJp bnByb2dyZXNzLW9uIgorCSAqIHN0YXRlKSwgd2Ugbm90aWZ5IHRoZSB1c2VyIHRoYXQgdGhl eSBuZWVkIHRvIG1hbnVhbGx5IHJlc3RhcnQgdGhlCisJICogcHJvY2VzcyB0byBlbmFibGUg Y2hlY2tzdW1zLiBUaGlzIGlzIGJlY2F1c2Ugd2UgY2Fubm90IGxhdW5jaCBhIGR5bmFtaWMK KwkgKiBiYWNrZ3JvdW5kIHdvcmtlciBkaXJlY3RseSBmcm9tIGhlcmUsIGl0IGhhcyB0byBi ZSBsYXVuY2hlZCBmcm9tIGEKKwkgKiByZWd1bGFyIGJhY2tlbmQuCisJICovCisJaWYgKFhM b2dDdGwtPmRhdGFfY2hlY2tzdW1fdmVyc2lvbiA9PSBQR19EQVRBX0NIRUNLU1VNX0lOUFJP R1JFU1NfT05fVkVSU0lPTikKKwkJZXJlcG9ydChXQVJOSU5HLAorCQkJCShlcnJtc2coImRh dGEgY2hlY2tzdW1zIGFyZSBiZWluZyBlbmFibGVkLCBidXQgbm8gd29ya2VyIGlzIHJ1bm5p bmciKSwKKwkJCQkgZXJyaGludCgiSWYgY2hlY2tzdW1zIHdlcmUgYmVpbmcgZW5hYmxlZCBk dXJpbmcgc2h1dGRvd24gdGhlbiBwcm9jZXNzaW5nIG11c3QgYmUgbWFudWFsbHkgcmVzdGFy dGVkLiIpKSk7CisKKwkvKgorCSAqIElmIGRhdGEgY2hlY2tzdW1zIHdlcmUgYmVpbmcgZGlz YWJsZWQgd2hlbiB0aGUgY2x1c3RlciB3YXMgc2h1dCBkb3duLAorCSAqIHdlIGtub3cgdGhh dCB3ZSBoYXZlIGEgc3RhdGUgd2hlcmUgYWxsIGJhY2tlbmRzIGhhdmUgc3RvcHBlZCB2YWxp ZGF0aW5nCisJICogY2hlY2tzdW1zIGFuZCB3ZSBjYW4gbW92ZSB0byBvZmYgaW5zdGVhZCBv ZiBwcm9tcHRpbmcgdGhlIHVzZXIgdG8KKwkgKiBwZXJmb3JtIGFueSBhY3Rpb24uCisJICov CisJaWYgKFhMb2dDdGwtPmRhdGFfY2hlY2tzdW1fdmVyc2lvbiA9PSBQR19EQVRBX0NIRUNL U1VNX0lOUFJPR1JFU1NfT0ZGX1ZFUlNJT04pCisJeworCQlYTG9nQ2hlY2tzdW1zKDApOwor CisJCVNwaW5Mb2NrQWNxdWlyZSgmWExvZ0N0bC0+aW5mb19sY2spOworCQlYTG9nQ3RsLT5k YXRhX2NoZWNrc3VtX3ZlcnNpb24gPSAwOworCQlTcGluTG9ja1JlbGVhc2UoJlhMb2dDdGwt PmluZm9fbGNrKTsKKwl9CisKIAkvKgogCSAqIEFsbCBkb25lIHdpdGggZW5kLW9mLXJlY292 ZXJ5IGFjdGlvbnMuCiAJICoKQEAgLTcwNDksNiArNzUwNiwxMiBAQCBDcmVhdGVDaGVja1Bv aW50KGludCBmbGFncykKIAljaGVja1BvaW50LmZ1bGxQYWdlV3JpdGVzID0gSW5zZXJ0LT5m dWxsUGFnZVdyaXRlczsKIAljaGVja1BvaW50LndhbF9sZXZlbCA9IHdhbF9sZXZlbDsKIAor CS8qCisJICogR2V0IHRoZSBjdXJyZW50IGRhdGFfY2hlY2tzdW1fdmVyc2lvbiB2YWx1ZSBm cm9tIHhsb2djdGwsIHZhbGlkIGF0CisJICogdGhlIHRpbWUgb2YgdGhlIGNoZWNrcG9pbnQu CisJICovCisJY2hlY2tQb2ludC5kYXRhX2NoZWNrc3VtX3ZlcnNpb24gPSBYTG9nQ3RsLT5k YXRhX2NoZWNrc3VtX3ZlcnNpb247CisKIAlpZiAoc2h1dGRvd24pCiAJewogCQlYTG9nUmVj UHRyCWN1ckluc2VydCA9IFhMb2dCeXRlUG9zVG9SZWNQdHIoSW5zZXJ0LT5DdXJyQnl0ZVBv cyk7CkBAIC03MzA0LDYgKzc3NjcsOSBAQCBDcmVhdGVDaGVja1BvaW50KGludCBmbGFncykK IAlDb250cm9sRmlsZS0+bWluUmVjb3ZlcnlQb2ludCA9IEludmFsaWRYTG9nUmVjUHRyOwog CUNvbnRyb2xGaWxlLT5taW5SZWNvdmVyeVBvaW50VExJID0gMDsKIAorCS8qIG1ha2Ugc3Vy ZSB3ZSBzdGFydCB3aXRoIHRoZSBjaGVja3N1bSB2ZXJzaW9uIGFzIG9mIHRoZSBjaGVja3Bv aW50ICovCisJQ29udHJvbEZpbGUtPmRhdGFfY2hlY2tzdW1fdmVyc2lvbiA9IGNoZWNrUG9p bnQuZGF0YV9jaGVja3N1bV92ZXJzaW9uOworCiAJLyoKIAkgKiBQZXJzaXN0IHVubG9nZ2Vk TFNOIHZhbHVlLiBJdCdzIHJlc2V0IG9uIGNyYXNoIHJlY292ZXJ5LCBzbyB0aGlzIGdvZXMK IAkgKiB1bnVzZWQgb24gbm9uLXNodXRkb3duIGNoZWNrcG9pbnRzLCBidXQgc2VlbXMgdXNl ZnVsIHRvIHN0b3JlIGl0IGFsd2F5cwpAQCAtNzQ1MCw2ICs3OTE2LDEwIEBAIENyZWF0ZUVu ZE9mUmVjb3ZlcnlSZWNvcmQodm9pZCkKIAlMV0xvY2tBY3F1aXJlKENvbnRyb2xGaWxlTG9j aywgTFdfRVhDTFVTSVZFKTsKIAlDb250cm9sRmlsZS0+bWluUmVjb3ZlcnlQb2ludCA9IHJl Y3B0cjsKIAlDb250cm9sRmlsZS0+bWluUmVjb3ZlcnlQb2ludFRMSSA9IHhscmVjLlRoaXNU aW1lTGluZUlEOworCisJLyogc3RhcnQgd2l0aCB0aGUgbGF0ZXN0IGNoZWNrc3VtIHZlcnNp b24gKGFzIG9mIHRoZSBlbmQgb2YgcmVjb3ZlcnkpICovCisJQ29udHJvbEZpbGUtPmRhdGFf Y2hlY2tzdW1fdmVyc2lvbiA9IFhMb2dDdGwtPmRhdGFfY2hlY2tzdW1fdmVyc2lvbjsKKwog CVVwZGF0ZUNvbnRyb2xGaWxlKCk7CiAJTFdMb2NrUmVsZWFzZShDb250cm9sRmlsZUxvY2sp OwogCkBAIC03NzkyLDYgKzgyNjIsMTAgQEAgQ3JlYXRlUmVzdGFydFBvaW50KGludCBmbGFn cykKIAkJCWlmIChmbGFncyAmIENIRUNLUE9JTlRfSVNfU0hVVERPV04pCiAJCQkJQ29udHJv bEZpbGUtPnN0YXRlID0gREJfU0hVVERPV05FRF9JTl9SRUNPVkVSWTsKIAkJfQorCisJCS8q IHdlIHNoYWxsIHN0YXJ0IHdpdGggdGhlIGxhdGVzdCBjaGVja3N1bSB2ZXJzaW9uICovCisJ CUNvbnRyb2xGaWxlLT5kYXRhX2NoZWNrc3VtX3ZlcnNpb24gPSBsYXN0Q2hlY2tQb2ludC5k YXRhX2NoZWNrc3VtX3ZlcnNpb247CisKIAkJVXBkYXRlQ29udHJvbEZpbGUoKTsKIAl9CiAJ TFdMb2NrUmVsZWFzZShDb250cm9sRmlsZUxvY2spOwpAQCAtODIwMSw2ICs4Njc1LDI0IEBA IFhMb2dSZXBvcnRQYXJhbWV0ZXJzKHZvaWQpCiAJfQogfQogCisvKgorICogTG9nIHRoZSBu ZXcgc3RhdGUgb2YgY2hlY2tzdW1zCisgKi8KK3N0YXRpYyB2b2lkCitYTG9nQ2hlY2tzdW1z KENoZWNrc3VtVHlwZSBuZXdfdHlwZSkKK3sKKwl4bF9jaGVja3N1bV9zdGF0ZSB4bHJlYzsK KwlYTG9nUmVjUHRyCXJlY3B0cjsKKworCXhscmVjLm5ld19jaGVja3N1bXR5cGUgPSBuZXdf dHlwZTsKKworCVhMb2dCZWdpbkluc2VydCgpOworCVhMb2dSZWdpc3RlckRhdGEoKGNoYXIg KikgJnhscmVjLCBzaXplb2YoeGxfY2hlY2tzdW1fc3RhdGUpKTsKKworCXJlY3B0ciA9IFhM b2dJbnNlcnQoUk1fWExPR19JRCwgWExPR19DSEVDS1NVTVMpOworCVhMb2dGbHVzaChyZWNw dHIpOworfQorCiAvKgogICogVXBkYXRlIGZ1bGxfcGFnZV93cml0ZXMgaW4gc2hhcmVkIG1l bW9yeSwgYW5kIHdyaXRlIGFuCiAgKiBYTE9HX0ZQV19DSEFOR0UgcmVjb3JkIGlmIG5lY2Vz c2FyeS4KQEAgLTg2MjksNiArOTEyMSw0NiBAQCB4bG9nX3JlZG8oWExvZ1JlYWRlclN0YXRl ICpyZWNvcmQpCiAJewogCQkvKiBub3RoaW5nIHRvIGRvIGhlcmUsIGp1c3QgZm9yIGluZm9y bWF0aW9uYWwgcHVycG9zZXMgKi8KIAl9CisJZWxzZSBpZiAoaW5mbyA9PSBYTE9HX0NIRUNL U1VNUykKKwl7CisJCXhsX2NoZWNrc3VtX3N0YXRlIHN0YXRlOworCQl1aW50NjQJCWJhcnJp ZXI7CisKKwkJbWVtY3B5KCZzdGF0ZSwgWExvZ1JlY0dldERhdGEocmVjb3JkKSwgc2l6ZW9m KHhsX2NoZWNrc3VtX3N0YXRlKSk7CisKKwkJU3BpbkxvY2tBY3F1aXJlKCZYTG9nQ3RsLT5p bmZvX2xjayk7CisJCVhMb2dDdGwtPmRhdGFfY2hlY2tzdW1fdmVyc2lvbiA9IHN0YXRlLm5l d19jaGVja3N1bXR5cGU7CisJCVNwaW5Mb2NrUmVsZWFzZSgmWExvZ0N0bC0+aW5mb19sY2sp OworCisJCS8qCisJCSAqIEJsb2NrIG9uIGEgcHJvY3NpZ25hbGJhcnJpZXIgdG8gYXdhaXQg YWxsIHByb2Nlc3NlcyBoYXZpbmcgc2VlbiB0aGUKKwkJICogY2hhbmdlIHRvIGNoZWNrc3Vt IHN0YXR1cy4gT25jZSB0aGUgYmFycmllciBoYXMgYmVlbiBwYXNzZWQgd2UgY2FuCisJCSAq IGluaXRpYXRlIHRoZSBjb3JyZXNwb25kaW5nIHByb2Nlc3NpbmcuCisJCSAqLworCQlzd2l0 Y2ggKHN0YXRlLm5ld19jaGVja3N1bXR5cGUpCisJCXsKKwkJCWNhc2UgUEdfREFUQV9DSEVD S1NVTV9JTlBST0dSRVNTX09OX1ZFUlNJT046CisJCQkJYmFycmllciA9IEVtaXRQcm9jU2ln bmFsQmFycmllcihQUk9DU0lHTkFMX0JBUlJJRVJfQ0hFQ0tTVU1fSU5QUk9HUkVTU19PTik7 CisJCQkJV2FpdEZvclByb2NTaWduYWxCYXJyaWVyKGJhcnJpZXIpOworCQkJCWJyZWFrOwor CisJCQljYXNlIFBHX0RBVEFfQ0hFQ0tTVU1fSU5QUk9HUkVTU19PRkZfVkVSU0lPTjoKKwkJ CQliYXJyaWVyID0gRW1pdFByb2NTaWduYWxCYXJyaWVyKFBST0NTSUdOQUxfQkFSUklFUl9D SEVDS1NVTV9JTlBST0dSRVNTX09GRik7CisJCQkJV2FpdEZvclByb2NTaWduYWxCYXJyaWVy KGJhcnJpZXIpOworCQkJCWJyZWFrOworCisJCQljYXNlIFBHX0RBVEFfQ0hFQ0tTVU1fVkVS U0lPTjoKKwkJCQliYXJyaWVyID0gRW1pdFByb2NTaWduYWxCYXJyaWVyKFBST0NTSUdOQUxf QkFSUklFUl9DSEVDS1NVTV9PTik7CisJCQkJV2FpdEZvclByb2NTaWduYWxCYXJyaWVyKGJh cnJpZXIpOworCQkJCWJyZWFrOworCisJCQlkZWZhdWx0OgorCQkJCUFzc2VydChzdGF0ZS5u ZXdfY2hlY2tzdW10eXBlID09IDApOworCQkJCWJhcnJpZXIgPSBFbWl0UHJvY1NpZ25hbEJh cnJpZXIoUFJPQ1NJR05BTF9CQVJSSUVSX0NIRUNLU1VNX09GRik7CisJCQkJV2FpdEZvclBy b2NTaWduYWxCYXJyaWVyKGJhcnJpZXIpOworCQkJCWJyZWFrOworCQl9CisJfQogfQogCiAv KgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ2Z1bmNzLmMg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nZnVuY3MuYwppbmRleCA4YzMwOTAx NjVmMC4uNmIxYzJlZDg1ZWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFu c2FtL3hsb2dmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dm dW5jcy5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiZnVuY2FwaS5oIgogI2luY2x1 ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUgInBvc3Rt YXN0ZXIvZGF0YWNoZWNrc3Vtc3dvcmtlci5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL3dh bHJlY2VpdmVyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9mZC5oIgogI2luY2x1ZGUgInN0b3Jh Z2UvbGF0Y2guaCIKQEAgLTc0OCwzICs3NDksNDMgQEAgcGdfcHJvbW90ZShQR19GVU5DVElP Tl9BUkdTKQogCQkJCQkJICAgd2FpdF9zZWNvbmRzKSkpOwogCVBHX1JFVFVSTl9CT09MKGZh bHNlKTsKIH0KKworLyoKKyAqIERpc2FibGVzIGRhdGEgY2hlY2tzdW1zIGZvciB0aGUgY2x1 c3RlciwgaWYgYXBwbGljYWJsZS4gU3RhcnRzIGEgYmFja2dyb3VuZAorICogd29ya2VyIHdo aWNoIHR1cm5zIG9mZiB0aGUgZGF0YSBjaGVja3N1bXMuCisgKi8KK0RhdHVtCitkaXNhYmxl X2RhdGFfY2hlY2tzdW1zKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJaWYgKCFzdXBlcnVzZXIo KSkKKwkJZXJlcG9ydChFUlJPUiwgZXJybXNnKCJtdXN0IGJlIHN1cGVydXNlciIpKTsKKwor CVN0YXJ0RGF0YUNoZWNrc3Vtc1dvcmtlckxhdW5jaGVyKGZhbHNlLCAwLCAwLCBmYWxzZSk7 CisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KKworLyoKKyAqIEVuYWJsZXMgZGF0YSBjaGVja3N1 bXMgZm9yIHRoZSBjbHVzdGVyLCBpZiBhcHBsaWNhYmxlLiAgU3VwcG9ydHMgdmFjdXVtLQor ICogbGlrZSBjb3N0IGJhc2VkIHRocm90dGxpbmcgdG8gbGltaXQgc3lzdGVtIGxvYWQuIFN0 YXJ0cyBhIGJhY2tncm91bmQgd29ya2VyCisgKiB3aGljaCB1cGRhdGVzIGRhdGEgY2hlY2tz dW1zIG9uIGV4aXN0aW5nIGRhdGEuCisgKi8KK0RhdHVtCitlbmFibGVfZGF0YV9jaGVja3N1 bXMoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlpbnQJCQljb3N0X2RlbGF5ID0gUEdfR0VUQVJH X0lOVDMyKDApOworCWludAkJCWNvc3RfbGltaXQgPSBQR19HRVRBUkdfSU5UMzIoMSk7CisJ Ym9vbAkJZmFzdCA9IFBHX0dFVEFSR19CT09MKDIpOworCisJaWYgKCFzdXBlcnVzZXIoKSkK KwkJZXJlcG9ydChFUlJPUiwgZXJybXNnKCJtdXN0IGJlIHN1cGVydXNlciIpKTsKKworCWlm IChjb3N0X2RlbGF5IDwgMCkKKwkJZXJlcG9ydChFUlJPUiwgZXJybXNnKCJjb3N0IGRlbGF5 IGNhbm5vdCBiZSBhIG5lZ2F0aXZlIHZhbHVlIikpOworCisJaWYgKGNvc3RfbGltaXQgPD0g MCkKKwkJZXJlcG9ydChFUlJPUiwgZXJybXNnKCJjb3N0IGxpbWl0IG11c3QgYmUgZ3JlYXRl ciB0aGFuIHplcm8iKSk7CisKKwlTdGFydERhdGFDaGVja3N1bXNXb3JrZXJMYXVuY2hlcih0 cnVlLCBjb3N0X2RlbGF5LCBjb3N0X2xpbWl0LCBmYXN0KTsKKworCVBHX1JFVFVSTl9WT0lE KCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9iYWNrdXAvYmFzZWJhY2t1cC5jIGIv c3JjL2JhY2tlbmQvYmFja3VwL2Jhc2ViYWNrdXAuYwppbmRleCAzZjhhM2M1NTcyNS4uNTk4 ZGQ0MWJhZTYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2JhY2t1cC9iYXNlYmFja3VwLmMK KysrIGIvc3JjL2JhY2tlbmQvYmFja3VwL2Jhc2ViYWNrdXAuYwpAQCAtMTYxMyw3ICsxNjEz LDggQEAgc2VuZEZpbGUoYmJzaW5rICpzaW5rLCBjb25zdCBjaGFyICpyZWFkZmlsZW5hbWUs IGNvbnN0IGNoYXIgKnRhcmZpbGVuYW1lLAogCSAqIGVuYWJsZWQgZm9yIHRoaXMgY2x1c3Rl ciwgYW5kIGlmIHRoaXMgaXMgYSByZWxhdGlvbiBmaWxlLCB0aGVuIHZlcmlmeQogCSAqIHRo ZSBjaGVja3N1bS4KIAkgKi8KLQlpZiAoIW5vdmVyaWZ5X2NoZWNrc3VtcyAmJiBEYXRhQ2hl Y2tzdW1zRW5hYmxlZCgpICYmCisJaWYgKCFub3ZlcmlmeV9jaGVja3N1bXMgJiYKKwkJRGF0 YUNoZWNrc3Vtc05lZWRXcml0ZSgpICYmCiAJCVJlbEZpbGVOdW1iZXJJc1ZhbGlkKHJlbGZp bGVudW1iZXIpKQogCQl2ZXJpZnlfY2hlY2tzdW0gPSB0cnVlOwogCkBAIC0yMDA2LDYgKzIw MDcsOSBAQCB2ZXJpZnlfcGFnZV9jaGVja3N1bShQYWdlIHBhZ2UsIFhMb2dSZWNQdHIgc3Rh cnRfbHNuLCBCbG9ja051bWJlciBibGtubywKIAlpZiAoUGFnZUlzTmV3KHBhZ2UpIHx8IFBh Z2VHZXRMU04ocGFnZSkgPj0gc3RhcnRfbHNuKQogCQlyZXR1cm4gdHJ1ZTsKIAorCWlmICgh RGF0YUNoZWNrc3Vtc05lZWRWZXJpZnkoKSkKKwkJcmV0dXJuIHRydWU7CisKIAkvKiBQZXJm b3JtIHRoZSBhY3R1YWwgY2hlY2tzdW0gY2FsY3VsYXRpb24uICovCiAJY2hlY2tzdW0gPSBw Z19jaGVja3N1bV9wYWdlKHBhZ2UsIGJsa25vKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvY2F0YWxvZy9zeXN0ZW1fZnVuY3Rpb25zLnNxbCBiL3NyYy9iYWNrZW5kL2NhdGFsb2cv c3lzdGVtX2Z1bmN0aW9ucy5zcWwKaW5kZXggNTY2ZjMwOGU0NDMuLmIxOGRiMmI1ZGRlIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV9mdW5jdGlvbnMuc3FsCisr KyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX2Z1bmN0aW9ucy5zcWwKQEAgLTY1MCw2 ICs2NTAsMTMgQEAgTEFOR1VBR0UgSU5URVJOQUwKIENBTExFRCBPTiBOVUxMIElOUFVUIFZP TEFUSUxFIFBBUkFMTEVMIFNBRkUKIEFTICdwZ19zdGF0X3Jlc2V0X3NscnUnOwogCitDUkVB VEUgT1IgUkVQTEFDRSBGVU5DVElPTgorICBwZ19lbmFibGVfZGF0YV9jaGVja3N1bXMoY29z dF9kZWxheSBpbnRlZ2VyIERFRkFVTFQgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvc3RfbGltaXQgaW50ZWdlciBERUZBVUxUIDEwMCwKKwkJCQkJCSAgIGZhc3QgYm9vbGVh biBERUZBVUxUIGZhbHNlKQorICBSRVRVUk5TIHZvaWQgU1RSSUNUIFZPTEFUSUxFIExBTkdV QUdFIGludGVybmFsIEFTICdlbmFibGVfZGF0YV9jaGVja3N1bXMnCisgIFBBUkFMTEVMIFJF U1RSSUNURUQ7CisKIC0tCiAtLSBUaGUgZGVmYXVsdCBwZXJtaXNzaW9ucyBmb3IgZnVuY3Rp b25zIG1lYW4gdGhhdCBhbnlvbmUgY2FuIGV4ZWN1dGUgdGhlbS4KIC0tIEEgbnVtYmVyIG9m IGZ1bmN0aW9ucyBzaG91bGRuJ3QgYmUgZXhlY3V0YWJsZSBieSBqdXN0IGFueW9uZSwgYnV0 IHJhdGhlcgpAQCAtNzc1LDYgKzc4MiwxMCBAQCBSRVZPS0UgRVhFQ1VURSBPTiBGVU5DVElP TiBwZ19sc19sb2dpY2FsbWFwZGlyKCkgRlJPTSBQVUJMSUM7CiAKIFJFVk9LRSBFWEVDVVRF IE9OIEZVTkNUSU9OIHBnX2xzX3JlcGxzbG90ZGlyKHRleHQpIEZST00gUFVCTElDOwogCitS RVZPS0UgRVhFQ1VURSBPTiBGVU5DVElPTiBwZ19lbmFibGVfZGF0YV9jaGVja3N1bXMoaW50 ZWdlciwgaW50ZWdlciwgYm9vbGVhbikgRlJPTSBwdWJsaWM7CisKK1JFVk9LRSBFWEVDVVRF IE9OIEZVTkNUSU9OIHBnX2Rpc2FibGVfZGF0YV9jaGVja3N1bXMoKSBGUk9NIHB1YmxpYzsK KwogLS0KIC0tIFdlIGFsc28gc2V0IHVwIHNvbWUgdGhpbmdzIGFzIGFjY2Vzc2libGUgdG8g c3RhbmRhcmQgcm9sZXMuCiAtLQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9z eXN0ZW1fdmlld3Muc3FsIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3Fs CmluZGV4IGE0ZDJjZmRjYWY1Li42ZmZkMzFjZTM5YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cv c3lzdGVtX3ZpZXdzLnNxbApAQCAtMTMzNCw2ICsxMzM0LDI2IEBAIENSRUFURSBWSUVXIHBn X3N0YXRfcHJvZ3Jlc3NfY29weSBBUwogICAgIEZST00gcGdfc3RhdF9nZXRfcHJvZ3Jlc3Nf aW5mbygnQ09QWScpIEFTIFMKICAgICAgICAgTEVGVCBKT0lOIHBnX2RhdGFiYXNlIEQgT04g Uy5kYXRpZCA9IEQub2lkOwogCitDUkVBVEUgVklFVyBwZ19zdGF0X3Byb2dyZXNzX2RhdGFf Y2hlY2tzdW1zIEFTCisgICAgU0VMRUNUCisgICAgICAgIFMucGlkIEFTIHBpZCwgUy5kYXRp ZCwgRC5kYXRuYW1lIEFTIGRhdG5hbWUsCisgICAgICAgIENBU0UgUy5wYXJhbTEgV0hFTiAw IFRIRU4gJ2VuYWJsaW5nJworICAgICAgICAgICAgICAgICAgICAgIFdIRU4gMSBUSEVOICdk aXNhYmxpbmcnCisgICAgICAgICAgICAgICAgICAgICAgV0hFTiAyIFRIRU4gJ3dhaXRpbmcn CisgICAgICAgICAgICAgICAgICAgICAgV0hFTiAzIFRIRU4gJ3dhaXRpbmcgb24gdGVtcG9y YXJ5IHRhYmxlcycKKyAgICAgICAgICAgICAgICAgICAgICBXSEVOIDQgVEhFTiAnd2FpdGlu ZyBvbiBjaGVja3BvaW50JworICAgICAgICAgICAgICAgICAgICAgIFdIRU4gNSBUSEVOICdk b25lJworICAgICAgICAgICAgICAgICAgICAgIEVORCBBUyBwaGFzZSwKKyAgICAgICAgQ0FT RSBTLnBhcmFtMiBXSEVOIC0xIFRIRU4gTlVMTCBFTFNFIFMucGFyYW0yIEVORCBBUyBkYXRh YmFzZXNfdG90YWwsCisgICAgICAgIFMucGFyYW0zIEFTIGRhdGFiYXNlc19kb25lLAorICAg ICAgICBDQVNFIFMucGFyYW00IFdIRU4gLTEgVEhFTiBOVUxMIEVMU0UgUy5wYXJhbTQgRU5E IEFTIHJlbGF0aW9uc190b3RhbCwKKyAgICAgICAgQ0FTRSBTLnBhcmFtNSBXSEVOIC0xIFRI RU4gTlVMTCBFTFNFIFMucGFyYW01IEVORCBBUyByZWxhdGlvbnNfZG9uZSwKKyAgICAgICAg Q0FTRSBTLnBhcmFtNiBXSEVOIC0xIFRIRU4gTlVMTCBFTFNFIFMucGFyYW02IEVORCBBUyBi bG9ja3NfdG90YWwsCisgICAgICAgIENBU0UgUy5wYXJhbTcgV0hFTiAtMSBUSEVOIE5VTEwg RUxTRSBTLnBhcmFtNyBFTkQgQVMgYmxvY2tzX2RvbmUKKyAgICBGUk9NIHBnX3N0YXRfZ2V0 X3Byb2dyZXNzX2luZm8oJ0RBVEFDSEVDS1NVTVMnKSBBUyBTCisgICAgICAgIExFRlQgSk9J TiBwZ19kYXRhYmFzZSBEIE9OIFMuZGF0aWQgPSBELm9pZAorICAgIE9SREVSIEJZIFMuZGF0 aWQ7IC0tIHJldHVybiB0aGUgbGF1bmNoZXIgcHJvY2VzcyBmaXJzdAorCiBDUkVBVEUgVklF VyBwZ191c2VyX21hcHBpbmdzIEFTCiAgICAgU0VMRUNUCiAgICAgICAgIFUub2lkICAgICAg IEFTIHVtaWQsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL01ha2VmaWxl IGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9NYWtlZmlsZQppbmRleCAwZjQ0MzVkMmQ5Ny4u MGMzNjc2NWFjZmUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvTWFrZWZp bGUKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9NYWtlZmlsZQpAQCAtMTgsNiArMTgs NyBAQCBPQkpTID0gXAogCWJnd29ya2VyLm8gXAogCWJnd3JpdGVyLm8gXAogCWNoZWNrcG9p bnRlci5vIFwKKwlkYXRhY2hlY2tzdW1zd29ya2VyLm8gXAogCWZvcmtfcHJvY2Vzcy5vIFwK IAlpbnRlcnJ1cHQubyBcCiAJbGF1bmNoX2JhY2tlbmQubyBcCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVy L2Jnd29ya2VyLmMKaW5kZXggMTE2ZGRmN2I4MzUuLjU3MjBmNjZiMGZkIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMKKysrIGIvc3JjL2JhY2tlbmQv cG9zdG1hc3Rlci9iZ3dvcmtlci5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSAicGdz dGF0LmgiCiAjaW5jbHVkZSAicG9ydC9hdG9taWNzLmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rl ci9iZ3dvcmtlcl9pbnRlcm5hbHMuaCIKKyNpbmNsdWRlICJwb3N0bWFzdGVyL2RhdGFjaGVj a3N1bXN3b3JrZXIuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuaCIKICNp bmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2FsbGF1bmNoZXIuaCIKICNpbmNsdWRlICJyZXBs aWNhdGlvbi9sb2dpY2Fsd29ya2VyLmgiCkBAIC0xMzIsNiArMTMzLDEyIEBAIHN0YXRpYyBj b25zdCBzdHJ1Y3QKIAl9LAogCXsKIAkJIlRhYmxlc3luY1dvcmtlck1haW4iLCBUYWJsZXN5 bmNXb3JrZXJNYWluCisJfSwKKwl7CisJCSJEYXRhQ2hlY2tzdW1zV29ya2VyTGF1bmNoZXJN YWluIiwgRGF0YUNoZWNrc3Vtc1dvcmtlckxhdW5jaGVyTWFpbgorCX0sCisJeworCQkiRGF0 YUNoZWNrc3Vtc1dvcmtlck1haW4iLCBEYXRhQ2hlY2tzdW1zV29ya2VyTWFpbgogCX0KIH07 CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvZGF0YWNoZWNrc3Vtc3dv cmtlci5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9kYXRhY2hlY2tzdW1zd29ya2VyLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjZhMjAxZGNhOGRlCi0t LSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9kYXRhY2hlY2tzdW1z d29ya2VyLmMKQEAgLTAsMCArMSwxNDM5IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq CisgKiBkYXRhY2hlY2tzdW1zd29ya2VyLmMKKyAqCSAgQmFja2dyb3VuZCB3b3JrZXIgZm9y IGVuYWJsaW5nIG9yIGRpc2FibGluZyBkYXRhIGNoZWNrc3VtcyBvbmxpbmUKKyAqCisgKiBX aGVuIGVuYWJsaW5nIGRhdGEgY2hlY2tzdW1zIG9uIGEgZGF0YWJhc2UgYXQgaW5pdGRiIHRp bWUgb3Igd2hlbiBzaHV0IGRvd24KKyAqIHdpdGggcGdfY2hlY2tzdW1zLCBubyBleHRyYSBw cm9jZXNzIGlzIHJlcXVpcmVkIGFzIGVhY2ggcGFnZSBpcyBjaGVja3N1bW1lZCwKKyAqIGFu ZCB2ZXJpZmllZCwgd2hlbiBhY2Nlc3NlZC4gIFdoZW4gZW5hYmxpbmcgY2hlY2tzdW1zIG9u IGFuIGFscmVhZHkgcnVubmluZworICogY2x1c3RlciwgdGhpcyB3b3JrZXIgd2lsbCBlbnN1 cmUgdGhhdCBhbGwgcGFnZXMgYXJlIGNoZWNrc3VtbWVkIGJlZm9yZQorICogdmVyaWZpY2F0 aW9uIG9mIHRoZSBjaGVja3N1bXMgaXMgdHVybmVkIG9uLiBJbiB0aGUgY2FzZSBvZiBkaXNh YmxpbmcKKyAqIGNoZWNrc3VtcywgdGhlIHN0YXRlIHRyYW5zaXRpb24gaXMgcGVyZm9ybWVk IG9ubHkgaW4gdGhlIGNvbnRyb2wgZmlsZSwgbm8KKyAqIGNoYW5nZXMgYXJlIHBlcmZvcm1l ZCBvbiB0aGUgZGF0YSBwYWdlcy4KKyAqCisgKiBDaGVja3N1bXMgY2FuIGJlIGVpdGhlciBl bmFibGVkIG9yIGRpc2FibGVkIGNsdXN0ZXItd2lkZSwgd2l0aCBvbi9vZmYgYmVpbmcKKyAq IHRoZSBlbmQgc3RhdGUgZm9yIGRhdGFfY2hlY2tzdW1zLgorICoKKyAqIEVuYWJsaW5nIGNo ZWNrc3VtcworICogLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBXaGVuIGVuYWJsaW5nIGNoZWNr c3VtcyBpbiBhbiBvbmxpbmUgY2x1c3RlciwgZGF0YV9jaGVja3N1bXMgd2lsbCBiZSBzZXQg dG8KKyAqICJpbnByb2dyZXNzLW9uIiB3aGljaCBzaWduYWxzIHRoYXQgd3JpdGUgb3BlcmF0 aW9ucyBNVVNUIGNvbXB1dGUgYW5kIHdyaXRlCisgKiB0aGUgY2hlY2tzdW0gb24gdGhlIGRh dGEgcGFnZSwgYnV0IGR1cmluZyByZWFkaW5nIHRoZSBjaGVja3N1bSBTSEFMTCBOT1QgYmUK KyAqIHZlcmlmaWVkLiBUaGlzIGVuc3VyZXMgdGhhdCBhbGwgb2JqZWN0cyBjcmVhdGVkIGR1 cmluZyBjaGVja3N1bW1pbmcgd2lsbAorICogaGF2ZSBjaGVja3N1bXMgc2V0LCBidXQgbm8g cmVhZHMgd2lsbCBmYWlsIGR1ZSB0byBpbmNvcnJlY3QgY2hlY2tzdW0uIFRoZQorICogRGF0 YUNoZWNrc3Vtc1dvcmtlciB3aWxsIGNvbXBpbGUgYSBsaXN0IG9mIGRhdGFiYXNlcyB3aGlj aCBleGlzdCBhdCB0aGUKKyAqIHN0YXJ0IG9mIGNoZWNrc3VtbWluZywgYW5kIGFsbCBvZiB0 aGVzZSB3aGljaCBoYXZlbid0IGJlZW4gZHJvcHBlZCBkdXJpbmcKKyAqIHRoZSBwcm9jZXNz aW5nIE1VU1QgaGF2ZSBiZWVuIHByb2Nlc3NlZCBzdWNjZXNzZnVsbHkgaW4gb3JkZXIgZm9y IGNoZWNrc3VtcworICogdG8gYmUgZW5hYmxlZC4gQW55IG5ldyByZWxhdGlvbiBjcmVhdGVk IGR1cmluZyBwcm9jZXNzaW5nIHdpbGwgc2VlIHRoZQorICogaW4tcHJvZ3Jlc3Mgc3RhdGUg YW5kIHdpbGwgYXV0b21hdGljYWxseSBiZSBjaGVja3N1bW1lZC4KKyAqCisgKiBGb3IgZWFj aCBkYXRhYmFzZSwgYWxsIHJlbGF0aW9ucyB3aGljaCBoYXZlIHN0b3JhZ2UgYXJlIHJlYWQg YW5kIGV2ZXJ5IGRhdGEKKyAqIHBhZ2UgaXMgbWFya2VkIGRpcnR5IHRvIGZvcmNlIGEgd3Jp dGUgd2l0aCB0aGUgY2hlY2tzdW0uIFRoaXMgd2lsbCBnZW5lcmF0ZQorICogYSBsb3Qgb2Yg V0FMIGFzIHRoZSBlbnRpcmUgZGF0YWJhc2UgaXMgcmVhZCBhbmQgd3JpdHRlbi4KKyAqCisg KiBJZiB0aGUgcHJvY2Vzc2luZyBpcyBpbnRlcnJ1cHRlZCBieSBhIGNsdXN0ZXIgcmVzdGFy dCwgaXQgd2lsbCBiZSByZXN0YXJ0ZWQKKyAqIGZyb20gdGhlIGJlZ2lubmluZyBhZ2FpbiBh cyBzdGF0ZSBpc24ndCBwZXJzaXN0ZWQuCisgKgorICogRGlzYWJsaW5nIGNoZWNrc3Vtcwor ICogLS0tLS0tLS0tLS0tLS0tLS0tLQorICogV2hlbiBkaXNhYmxpbmcgY2hlY2tzdW1zLCBk YXRhX2NoZWNrc3VtcyB3aWxsIGJlIHNldCB0byAiaW5wcm9ncmVzcy1vZmYiCisgKiB3aGlj aCBzaWduYWxzIHRoYXQgY2hlY2tzdW1zIGFyZSB3cml0dGVuIGJ1dCBubyBsb25nZXIgdmVy aWZpZWQuIFRoaXMgZW5zdXJlCisgKiB0aGF0IGJhY2tlbmRzIHdoaWNoIGhhdmUgeWV0IHRv IG1vdmUgZnJvbSB0aGUgIm9uIiBzdGF0ZSB3aWxsIHN0aWxsIGJlIGFibGUKKyAqIHRvIHBy b2Nlc3MgZGF0YSBjaGVja3N1bSB2YWxpZGF0aW9uLgorICoKKyAqIFN5bmNocm9uaXphdGlv biBhbmQgQ29ycmVjdG5lc3MKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqIFRoZSBwcm9jZXNzZXMgaW52b2x2ZWQgaW4gZW5hYmxpbmcsIG9yIGRpc2FibGluZywg ZGF0YSBjaGVja3N1bXMgaW4gYW4KKyAqIG9ubGluZSBjbHVzdGVyIG11c3QgYmUgcHJvcGVy bHkgc3luY2hyb25pemVkIHdpdGggdGhlIG5vcm1hbCBiYWNrZW5kcworICogc2VydmluZyBj b25jdXJyZW50IHF1ZXJpZXMgdG8gZW5zdXJlIGNvcnJlY3RuZXNzLiBDb3JyZWN0bmVzcyBp cyBkZWZpbmVkCisgKiBhcyB0aGUgZm9sbG93aW5nOgorICoKKyAqICAgIC0gQmFja2VuZHMg U0hBTEwgTk9UIHZpb2xhdGUgbG9jYWwgZGF0YV9jaGVja3N1bXMgc3RhdGUKKyAqICAgIC0g RGF0YSBjaGVja3N1bXMgU0hBTEwgTk9UIGJlIGNvbnNpZGVyZWQgZW5hYmxlZCBjbHVzdGVy LXdpZGUgdW50aWwgYWxsCisgKiAgICAgIGN1cnJlbnRseSBjb25uZWN0ZWQgYmFja2VuZHMg aGF2ZSB0aGUgbG9jYWwgc3RhdGUgImVuYWJsZWQiCisgKgorICogVGhlcmUgYXJlIHR3byBs ZXZlbHMgb2Ygc3luY2hyb25pemF0aW9uIHJlcXVpcmVkIGZvciBlbmFibGluZyBkYXRhIGNo ZWNrc3VtcworICogaW4gYW4gb25saW5lIGNsdXN0ZXI6IChpKSBjaGFuZ2luZyBzdGF0ZSBp biB0aGUgYWN0aXZlIGJhY2tlbmRzICgib24iLAorICogIm9mZiIsICJpbnByb2dyZXNzLW9u IiBhbmQgImlucHJvZ3Jlc3Mtb2ZmIiksIGFuZCAoaWkpIGVuc3VyaW5nIG5vCisgKiBpbmNv bXBhdGlibGUgb2JqZWN0cyBhbmQgcHJvY2Vzc2VzIGFyZSBsZWZ0IGluIGEgZGF0YWJhc2Ug d2hlbiB3b3JrZXJzIGVuZC4KKyAqIFRoZSBmb3JtZXIgZGVhbHMgd2l0aCBjbHVzdGVyLXdp ZGUgYWdyZWVtZW50IG9uIGRhdGEgY2hlY2tzdW0gc3RhdGUgYW5kIHRoZQorICogbGF0dGVy IHdpdGggZW5zdXJpbmcgdGhhdCBhbnkgY29uY3VycmVudCBhY3Rpdml0eSBjYW5ub3QgYnJl YWsgdGhlIGRhdGEKKyAqIGNoZWNrc3VtIGNvbnRyYWN0IGR1cmluZyBwcm9jZXNzaW5nLgor ICoKKyAqIFN5bmNocm9uaXppbmcgdGhlIHN0YXRlIGNoYW5nZSBpcyBkb25lIHdpdGggcHJv Y3NpZ25hbCBiYXJyaWVycywgd2hlcmUgdGhlCisgKiBXQUwgbG9nZ2luZyBiYWNrZW5kIHVw ZGF0aW5nIHRoZSBnbG9iYWwgc3RhdGUgaW4gdGhlIGNvbnRyb2xmaWxlIHdpbGwgd2FpdAor ICogZm9yIGFsbCBvdGhlciBiYWNrZW5kcyB0byBhYnNvcmIgdGhlIGJhcnJpZXIuIEJhcnJp ZXIgYWJzb3JwdGlvbiB3aWxsIGhhcHBlbgorICogZHVyaW5nIGludGVycnVwdCBwcm9jZXNz aW5nLCB3aGljaCBtZWFucyB0aGF0IGNvbm5lY3RlZCBiYWNrZW5kcyB3aWxsIGNoYW5nZQor ICogc3RhdGUgYXQgZGlmZmVyZW50IHRpbWVzLiBUbyBwcmV2ZW50IGRhdGEgY2hlY2tzdW0g c3RhdGUgY2hhbmdlcyB3aGVuCisgKiB3cml0aW5nIGFuZCB2ZXJpZnlpbmcgY2hlY2tzdW1z LCBpbnRlcnJ1cHRzIHNoYWxsIGJlIGhlbGQgb2ZmIGJlZm9yZQorICogaW50ZXJyb2dhdGlu ZyBzdGF0ZSBhbmQgcmVzdW1lZCB3aGVuIHRoZSBJTyBvcGVyYXRpb24gaGFzIGJlZW4gcGVy Zm9ybWVkLgorICoKKyAqICAgV2hlbiBFbmFibGluZyBEYXRhIENoZWNrc3VtcworICogICAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgIEEgcHJvY2VzcyB3aGljaCBmYWls cyB0byBvYnNlcnZlIGRhdGEgY2hlY2tzdW1zIGJlaW5nIGVuYWJsZWQgY2FuIGluZHVjZQor ICogICB0d28gdHlwZXMgb2YgZXJyb3JzOiBmYWlsaW5nIHRvIHdyaXRlIHRoZSBjaGVja3N1 bSB3aGVuIG1vZGlmeWluZyB0aGUgcGFnZQorICogICBhbmQgZmFpbGluZyB0byB2YWxpZGF0 ZSB0aGUgZGF0YSBjaGVja3N1bSBvbiB0aGUgcGFnZSB3aGVuIHJlYWRpbmcgaXQuCisgKgor ICogICBXaGVuIHByb2Nlc3Npbmcgc3RhcnRzIGFsbCBiYWNrZW5kcyBiZWxvbmcgdG8gb25l IG9mIHRoZSBiZWxvdyBzZXRzLCB3aXRoCisgKiAgIG9uZSBzZXQgYmVpbmcgZW1wdHk6Cisg KgorICogICBCZDogQmFja2VuZHMgaW4gIm9mZiIgc3RhdGUKKyAqICAgQmk6IEJhY2tlbmRz IGluICJpbnByb2dyZXNzLW9uIiBzdGF0ZQorICoKKyAqICAgSWYgcHJvY2Vzc2luZyBpcyBz dGFydGVkIGluIGFuIG9ubGluZSBjbHVzdGVyIHRoZW4gYWxsIGJhY2tlbmRzIGFyZSBpbiBC ZC4KKyAqICAgSWYgcHJvY2Vzc2luZyB3YXMgaGFsdGVkIGJ5IHRoZSBjbHVzdGVyIHNodXR0 aW5nIGRvd24sIHRoZSBjb250cm9sZmlsZQorICogICBzdGF0ZSAiaW5wcm9ncmVzcy1vbiIg d2lsbCBiZSBvYnNlcnZlZCBvbiBzeXN0ZW0gc3RhcnR1cCBhbmQgYWxsIGJhY2tlbmRzCisg KiAgIHdpbGwgYmUgaW4gQmQuIEJhY2tlbmRzIHRyYW5zaXRpb24gQmQgLT4gQmkgdmlhIGEg cHJvY3NpZ25hbGJhcnJpZXIuICBXaGVuCisgKiAgIHRoZSBEYXRhQ2hlY2tzdW1zV29ya2Vy IGhhcyBmaW5pc2hlZCB3cml0aW5nIGNoZWNrc3VtcyBvbiBhbGwgcGFnZXMgYW5kCisgKiAg IGVuYWJsZXMgZGF0YSBjaGVja3N1bXMgY2x1c3Rlci13aWRlLCB0aGVyZSBhcmUgZm91ciBz ZXRzIG9mIGJhY2tlbmRzIHdoZXJlCisgKiAgIEJkIHNoYWxsIGJlIGFuIGVtcHR5IHNldDoK KyAqCisgKiAgIEJnOiBCYWNrZW5kIHVwZGF0aW5nIHRoZSBnbG9iYWwgc3RhdGUgYW5kIGVt aXR0aW5nIHRoZSBwcm9jc2lnbmFsYmFycmllcgorICogICBCZDogQmFja2VuZHMgaW4gIm9m ZiIgc3RhdGUKKyAqICAgQmU6IEJhY2tlbmRzIGluICJvbiIgc3RhdGUKKyAqICAgQmk6IEJh Y2tlbmRzIGluICJpbnByb2dyZXNzLW9uIiBzdGF0ZQorICoKKyAqICAgQmFja2VuZHMgaW4g QmkgYW5kIEJlIHdpbGwgd3JpdGUgY2hlY2tzdW1zIHdoZW4gbW9kaWZ5aW5nIGEgcGFnZSwg YnV0IG9ubHkKKyAqICAgYmFja2VuZHMgaW4gQmUgd2lsbCB2ZXJpZnkgdGhlIGNoZWNrc3Vt IGR1cmluZyByZWFkaW5nLiBUaGUgQmcgYmFja2VuZCBpcworICogICBibG9ja2VkIHdhaXRp bmcgZm9yIGFsbCBiYWNrZW5kcyBpbiBCaSB0byBwcm9jZXNzIGludGVycnVwdHMgYW5kIG1v dmUgdG8KKyAqICAgQmUuIEFueSBiYWNrZW5kIHN0YXJ0aW5nIHdoaWxlIEJnIGlzIHdhaXRp bmcgb24gdGhlIHByb2NzaWduYWxiYXJyaWVyIHdpbGwKKyAqICAgb2JzZXJ2ZSB0aGUgZ2xv YmFsIHN0YXRlIGJlaW5nICJvbiIgYW5kIHdpbGwgdGh1cyBhdXRvbWF0aWNhbGx5IGJlbG9u ZyB0bworICogICBCZS4gIENoZWNrc3VtcyBhcmUgZW5hYmxlZCBjbHVzdGVyLXdpZGUgd2hl biBCaSBpcyBhbiBlbXB0eSBzZXQuIEJpIGFuZCBCZQorICogICBhcmUgY29tcGF0aWJsZSBz ZXRzIHdoaWxlIHN0aWxsIG9wZXJhdGluZyBiYXNlZCBvbiB0aGVpciBsb2NhbCBzdGF0ZSBh cworICogICBib3RoIHdyaXRlIGRhdGEgY2hlY2tzdW1zLgorICoKKyAqICAgV2hlbiBEaXNh YmxpbmcgRGF0YSBDaGVja3N1bXMKKyAqICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqICAgQSBwcm9jZXNzIHdoaWNoIGZhaWxzIHRvIG9ic2VydmUgdGhhdCBkYXRhIGNo ZWNrc3VtcyBoYXZlIGJlZW4gZGlzYWJsZWQKKyAqICAgY2FuIGluZHVjZSB0d28gdHlwZXMg b2YgZXJyb3JzOiB3cml0aW5nIHRoZSBjaGVja3N1bSB3aGVuIG1vZGlmeWluZyB0aGUKKyAq ICAgcGFnZSBhbmQgdmFsaWRhdGluZyBhIGRhdGEgY2hlY2tzdW0gd2hpY2ggaXMgbm8gbG9u Z2VyIGNvcnJlY3QgZHVlIHRvCisgKiAgIG1vZGlmaWNhdGlvbnMgdG8gdGhlIHBhZ2UuCisg KgorICogICBCZzogQmFja2VuZCB1cGRhdGluZyB0aGUgZ2xvYmFsIHN0YXRlIGFuZCBlbWl0 dGluZyB0aGUgcHJvY3NpZ25hbGJhcnJpZXIKKyAqICAgQmQ6IEJhY2tlbmRzIGluICJvZmYi IHN0YXRlCisgKiAgIEJlOiBCYWNrZW5kcyBpbiAib24iIHN0YXRlCisgKiAgIEJvOiBCYWNr ZW5kcyBpbiAiaW5wcm9ncmVzcy1vZmYiIHN0YXRlCisgKgorICogICBCYWNrZW5kcyB0cmFu c2l0aW9uIGZyb20gdGhlIEJlIHN0YXRlIHRvIEJkIGxpa2Ugc286IEJlIC0+IEJvIC0+IEJk CisgKgorICogICBUaGUgZ29hbCBpcyB0byB0cmFuc2l0aW9uIGFsbCBiYWNrZW5kcyB0byBC ZCBtYWtpbmcgdGhlIG90aGVycyBlbXB0eSBzZXRzLgorICogICBCYWNrZW5kcyBpbiBCbyB3 cml0ZSBkYXRhIGNoZWNrc3VtcywgYnV0IGRvbid0IHZhbGlkYXRlIHRoZW0sIHN1Y2ggdGhh dAorICogICBiYWNrZW5kcyBzdGlsbCBpbiBCZSBjYW4gY29udGludWUgdG8gdmFsaWRhdGUg cGFnZXMgdW50aWwgdGhlIGJhcnJpZXIgaGFzCisgKiAgIGJlZW4gYWJzb3JiZWQgc3VjaCB0 aGF0IHRoZXkgYXJlIGluIEJvLiBPbmNlIGFsbCBiYWNrZW5kcyBhcmUgaW4gQm8sIHRoZQor ICogICBiYXJyaWVyIHRvIHRyYW5zaXRpb24gdG8gIm9mZiIgY2FuIGJlIHJhaXNlZCBhbmQg YWxsIGJhY2tlbmRzIGNhbiBzYWZlbHkKKyAqICAgc3RvcCB3cml0aW5nIGRhdGEgY2hlY2tz dW1zIGFzIG5vIGJhY2tlbmQgaXMgZW5mb3JjaW5nIGRhdGEgY2hlY2tzdW0KKyAqICAgdmFs aWRhdGlvbiBhbnkgbG9uZ2VyLgorICoKKyAqCisgKiBQb3RlbnRpYWwgb3B0aW1pemF0aW9u cworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEJlbG93IGFyZSBzb21lIHBvdGVu dGlhbCBvcHRpbWl6YXRpb25zIGFuZCBpbXByb3ZlbWVudHMgd2hpY2ggd2VyZSBicm91Z2h0 CisgKiB1cCBkdXJpbmcgcmV2aWV3cyBvZiB0aGlzIGZlYXR1cmUsIGJ1dCB3aGljaCB3ZXJl bid0IGltcGxlbWVudGVkIGluIHRoZQorICogaW5pdGlhbCB2ZXJzaW9uLiBUaGVzZSBhcmUg aWRlYXMgbGlzdGVkIHdpdGhvdXQgYW55IHZhbGlkYXRpb24gb24gdGhlaXIKKyAqIGZlYXNp YmlsaXR5IG9yIHBvdGVudGlhbCBwYXlvZmYuIE1vcmUgZGlzY3Vzc2lvbiBvbiB0aGVzZSBj YW4gYmUgZm91bmQgb24KKyAqIHRoZSAtaGFja2VycyB0aHJlYWRzIGxpbmtlZCB0byBpbiB0 aGUgY29tbWl0IG1lc3NhZ2Ugb2YgdGhpcyBmZWF0dXJlLgorICoKKyAqICAgKiBMYXVuY2hp bmcgZGF0YWNoZWNrc3Vtc3dvcmtlciBmb3IgcmVzdW1pbmcgb3BlcmF0aW9uIGZyb20gdGhl IHN0YXJ0dXAKKyAqICAgICBwcm9jZXNzOiBDdXJyZW50bHkgdXNlcnMgaGF2ZSB0byByZXN0 YXJ0IHByb2Nlc3NpbmcgbWFudWFsbHkgYWZ0ZXIgYQorICogICAgIHJlc3RhcnQgc2luY2Ug ZHluYW1pYyBiYWNrZ3JvdW5kIHdvcmtlciBjYW5ub3QgYmUgc3RhcnRlZCBmcm9tIHRoZQor ICogICAgIHBvc3RtYXN0ZXIuIENoYW5naW5nIHRoZSBzdGFydHVwIHByb2Nlc3MgY291bGQg bWFrZSByZXN0YXJ0aW5nIHRoZQorICogICAgIHByb2Nlc3NpbmcgYXV0b21hdGljIG9uIGNs dXN0ZXIgcmVzdGFydC4KKyAqICAgKiBBdm9pZCBkaXJ0eWluZyB0aGUgcGFnZSB3aGVuIGNo ZWNrc3VtcyBhbHJlYWR5IG1hdGNoOiBJZmYgdGhlIGNoZWNrc3VtCisgKiAgICAgb24gdGhl IHBhZ2UgaGFwcGVucyB0byBhbHJlYWR5IG1hdGNoIHdlIHN0aWxsIGRpcnR5IHRoZSBwYWdl LiBJdCBzaG91bGQKKyAqICAgICBiZSBlbm91Z2ggdG8gb25seSBkbyB0aGUgbG9nX25ld3Bh Z2VfYnVmZmVyKCkgY2FsbCBpbiB0aGF0IGNhc2UuCisgKiAgICogSW52ZW50IGEgbGlnaHR3 ZWlnaHQgV0FMIHJlY29yZCB0aGF0IGRvZXNuJ3QgY29udGFpbiB0aGUgZnVsbC1wYWdlCisg KiAgICAgaW1hZ2UgYnV0IGp1c3QgdGhlIGJsb2NrIG51bWJlcjogT24gcmVwbGF5LCB0aGUg cmVkbyByb3V0aW5lIHdvdWxkIHJlYWQKKyAqICAgICB0aGUgcGFnZSBmcm9tIGRpc2suCisg KiAgICogVGVhY2ggcGdfY2hlY2tzdW1zIHRvIGF2b2lkIGNoZWNrc3VtbWVkIHBhZ2VzIHdo ZW4gcGdfY2hlY2tzdW1zIGlzIHVzZWQKKyAqICAgICB0byBlbmFibGUgY2hlY2tzdW1zIG9u IGEgY2x1c3RlciB3aGljaCBpcyBpbiBpbnByb2dyZXNzLW9uIHN0YXRlIGFuZAorICogICAg IG1heSBoYXZlIGNoZWNrc3VtbWVkIHBhZ2VzIChtYWtlIHBnX2NoZWNrc3VtcyBiZSBhYmxl IHRvIHJlc3VtZSBhbgorICogICAgIG9ubGluZSBvcGVyYXRpb24pLgorICoKKyAqCisgKiBQ b3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2 ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50 cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICoKKyAqIElERU5USUZJ Q0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvZGF0YWNoZWNrc3Vtc3dvcmtl ci5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jl cy5oIgorCisjaW5jbHVkZSAiYWNjZXNzL2dlbmFtLmgiCisjaW5jbHVkZSAiYWNjZXNzL2hl YXBhbS5oIgorI2luY2x1ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMuaCIKKyNpbmNsdWRlICJh Y2Nlc3MveGFjdC5oIgorI2luY2x1ZGUgImFjY2Vzcy94bG9naW5zZXJ0LmgiCisjaW5jbHVk ZSAiY2F0YWxvZy9pbmRleGluZy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfY2xhc3MuaCIK KyNpbmNsdWRlICJjYXRhbG9nL3BnX2RhdGFiYXNlLmgiCisjaW5jbHVkZSAiY29tbWFuZHMv cHJvZ3Jlc3MuaCIKKyNpbmNsdWRlICJjb21tYW5kcy92YWN1dW0uaCIKKyNpbmNsdWRlICJj b21tb24vcmVscGF0aC5oIgorI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgInBn c3RhdC5oIgorI2luY2x1ZGUgInBvc3RtYXN0ZXIvYmd3b3JrZXIuaCIKKyNpbmNsdWRlICJw b3N0bWFzdGVyL2Jnd3JpdGVyLmgiCisjaW5jbHVkZSAicG9zdG1hc3Rlci9kYXRhY2hlY2tz dW1zd29ya2VyLmgiCisjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKKyNpbmNsdWRlICJz dG9yYWdlL2NoZWNrc3VtLmgiCisjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKKyNpbmNsdWRl ICJzdG9yYWdlL2xtZ3IuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2x3bG9jay5oIgorI2luY2x1 ZGUgInN0b3JhZ2UvcHJvY2FycmF5LmgiCisjaW5jbHVkZSAic3RvcmFnZS9zbWdyLmgiCisj aW5jbHVkZSAidGNvcC90Y29wcHJvdC5oIgorI2luY2x1ZGUgInV0aWxzL2ZtZ3JvaWRzLmgi CisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisjaW5jbHVkZSAidXRpbHMvcHNfc3Rh dHVzLmgiCisjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKKworLyoKKyAqIE51bWJlciBv ZiB0aW1lcyB3ZSByZXRyeSB0byBvcGVuIGEgZGF0YWJhc2UgYmVmb3JlIGdpdmluZyB1cCBh bmQgY29uc2lkZXIKKyAqIGl0IHRvIGhhdmUgZmFpbGVkIHByb2Nlc3NpbmcuCisgKi8KKyNk ZWZpbmUgREFUQUNIRUNLU1VNU1dPUktFUl9NQVhfREJfUkVUUklFUyA1CisKK3R5cGVkZWYg ZW51bQoreworCURBVEFDSEVDS1NVTVNXT1JLRVJfU1VDQ0VTU0ZVTCA9IDAsCisJREFUQUNI RUNLU1VNU1dPUktFUl9BQk9SVEVELAorCURBVEFDSEVDS1NVTVNXT1JLRVJfRkFJTEVELAor CURBVEFDSEVDS1NVTVNXT1JLRVJfUkVUUllEQiwKK30gRGF0YUNoZWNrc3Vtc1dvcmtlclJl c3VsdDsKKworLyoKKyAqIFNpZ25hbGluZyBiZXR3ZWVuIGJhY2tlbmRzIGNhbGxpbmcgcGdf ZW5hYmxlL2Rpc2FibGVfZGF0YV9jaGVja3N1bXMsIHRoZQorICogY2hlY2tzdW1zIGxhdW5j aGVyIHByb2Nlc3MsIGFuZCB0aGUgY2hlY2tzdW1zIHdvcmtlciBwcm9jZXNzLgorICoKKyAq IFRoaXMgc3RydWN0IGlzIHByb3RlY3RlZCBieSBEYXRhQ2hlY2tzdW1zV29ya2VyTG9jawor ICovCit0eXBlZGVmIHN0cnVjdCBEYXRhQ2hlY2tzdW1zV29ya2VyU2htZW1TdHJ1Y3QKK3sK KwkvKgorCSAqIFRoZXNlIGFyZSBzZXQgYnkgcGdfZW5hYmxlL2Rpc2FibGVfZGF0YV9jaGVj a3N1bXMsIHRvIHRlbGwgdGhlIGxhdW5jaGVyCisJICogd2hhdCB0aGUgdGFyZ2V0IHN0YXRl IGlzLgorCSAqLworCWJvb2wJCWxhdW5jaF9lbmFibGVfY2hlY2tzdW1zOwkvKiBUcnVlIGlm IGNoZWNrc3VtcyBhcmUgYmVpbmcKKwkJCQkJCQkJCQkJICogZW5hYmxlZCwgZWxzZSBmYWxz ZSAqLworCWludAkJCWxhdW5jaF9jb3N0X2RlbGF5OworCWludAkJCWxhdW5jaF9jb3N0X2xp bWl0OworCWJvb2wJCWxhdW5jaF9mYXN0OworCisJLyoKKwkgKiBJcyBhIGxhdW5jaGVyIHBy b2Nlc3MgaXMgY3VycmVudGx5IHJ1bm5pbmc/CisJICoKKwkgKiBUaGlzIGlzIHNldCBieSB0 aGUgbGF1bmNoZXIgcHJvY2VzcywgYWZ0ZXIgaXQgaGFzIHJlYWQgdGhlIGFib3ZlCisJICog bGF1bmNoXyogcGFyYW1ldGVycy4KKwkgKi8KKwlib29sCQlsYXVuY2hlcl9ydW5uaW5nOwor CisJLyoKKwkgKiBUaGVzZSBmaWVsZHMgaW5kaWNhdGUgdGhlIHRhcmdldCBzdGF0ZSB0aGF0 IHRoZSBsYXVuY2hlciBpcyBjdXJyZW50bHkKKwkgKiB3b3JraW5nIHRvd2FyZHMuIFRoZXkg Y2FuIGJlIGRpZmZlcmVudCBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIGxhdW5jaF8qCisJICog ZmllbGRzLCBpZiBhIG5ldyBwZ19lbmFibGUvZGlzYWJsZV9kYXRhX2NoZWNrc3VtcygpIGNh bGwgd2FzIG1hZGUgd2hpbGUKKwkgKiB0aGUgbGF1bmNoZXIvd29ya2VyIHdhcyBhbHJlYWR5 IHJ1bm5pbmcuCisJICoKKwkgKiBUaGUgYmVsb3cgbWVtYmVycyBhcmUgc2V0IHdoZW4gdGhl IGxhdW5jaGVyIHN0YXJ0cywgYW5kIGFyZSBvbmx5CisJICogYWNjZXNzZWQgcmVhZC1vbmx5 IGJ5IHRoZSBzaW5nbGUgd29ya2VyLiBUaHVzLCB3ZSBjYW4gYWNjZXNzIHRoZXNlCisJICog d2l0aG91dCBhIGxvY2suIElmIG11bHRpcGxlIHdvcmtlcnMsIG9yIGR5bmFtaWMgY29zdCBw YXJhbWV0ZXJzLCBhcmUKKwkgKiBzdXBwb3J0ZWQgYXQgc29tZSBwb2ludCB0aGVuIHRoaXMg d291bGQgbmVlZCB0byBiZSByZXZpc2l0ZWQuCisJICovCisJYm9vbAkJZW5hYmxpbmdfY2hl Y2tzdW1zOyAvKiBUcnVlIGlmIGNoZWNrc3VtcyBhcmUgYmVpbmcgZW5hYmxlZCwKKwkJCQkJ CQkJCSAqIGVsc2UgZmFsc2UgKi8KKwlpbnQJCQljb3N0X2RlbGF5OworCWludAkJCWNvc3Rf bGltaXQ7CisJYm9vbAkJaW1tZWRpYXRlX2NoZWNrcG9pbnQ7CisKKwkvKgorCSAqIFNpZ25h bGluZyBiZXR3ZWVuIHRoZSBsYXVuY2hlciBhbmQgdGhlIHdvcmtlciBwcm9jZXNzLgorCSAq CisJICogQXMgdGhlcmUgaXMgb25seSBhIHNpbmdsZSB3b3JrZXIsIGFuZCB0aGUgbGF1bmNo ZXIgd29uJ3QgcmVhZCB0aGVzZQorCSAqIHVudGlsIHRoZSB3b3JrZXIgZXhpdHMsIHRoZXkg Y2FuIGJlIGFjY2Vzc2VkIHdpdGhvdXQgdGhlIG5lZWQgZm9yIGEKKwkgKiBsb2NrLiBJZiBt dWx0aXBsZSB3b3JrZXJzIGFyZSBzdXBwb3J0ZWQgdGhlbiB0aGlzIHdpbGwgaGF2ZSB0byBi ZQorCSAqIHJldmlzaXRlZC4KKwkgKi8KKworCS8qIHJlc3VsdCwgc2V0IGJ5IHdvcmtlciBi ZWZvcmUgZXhpdGluZyAqLworCURhdGFDaGVja3N1bXNXb3JrZXJSZXN1bHQgc3VjY2VzczsK KworCS8qCisJICogdGVsbHMgdGhlIHdvcmtlciBwcm9jZXNzIHdoZXRoZXIgaXQgc2hvdWxk IGFsc28gcHJvY2VzcyB0aGUgc2hhcmVkCisJICogY2F0YWxvZ3MKKwkgKi8KKwlib29sCQlw cm9jZXNzX3NoYXJlZF9jYXRhbG9nczsKK30gRGF0YUNoZWNrc3Vtc1dvcmtlclNobWVtU3Ry dWN0OworCisvKiBTaGFyZWQgbWVtb3J5IHNlZ21lbnQgZm9yIGRhdGFjaGVja3N1bXN3b3Jr ZXIgKi8KK3N0YXRpYyBEYXRhQ2hlY2tzdW1zV29ya2VyU2htZW1TdHJ1Y3QgKkRhdGFDaGVj a3N1bXNXb3JrZXJTaG1lbTsKKworLyogQm9va2tlZXBpbmcgZm9yIHdvcmsgdG8gZG8gKi8K K3R5cGVkZWYgc3RydWN0IERhdGFDaGVja3N1bXNXb3JrZXJEYXRhYmFzZQoreworCU9pZAkJ CWRib2lkOworCWNoYXIJICAgKmRibmFtZTsKK30gRGF0YUNoZWNrc3Vtc1dvcmtlckRhdGFi YXNlOworCit0eXBlZGVmIHN0cnVjdCBEYXRhQ2hlY2tzdW1zV29ya2VyUmVzdWx0RW50cnkK K3sKKwlPaWQJCQlkYm9pZDsKKwlEYXRhQ2hlY2tzdW1zV29ya2VyUmVzdWx0IHJlc3VsdDsK KwlpbnQJCQlyZXRyaWVzOworfSBEYXRhQ2hlY2tzdW1zV29ya2VyUmVzdWx0RW50cnk7CisK KworLyoKKyAqIEZsYWcgc2V0IGJ5IHRoZSBpbnRlcnJ1cHQgaGFuZGxlcgorICovCitzdGF0 aWMgdm9sYXRpbGUgc2lnX2F0b21pY190IGFib3J0X3JlcXVlc3RlZCA9IGZhbHNlOworCisv KgorICogSGF2ZSB3ZSBzZXQgdGhlIERhdGFDaGVja3N1bXNXb3JrZXJTaG1lbVN0cnVjdC0+ bGF1bmNoZXJfcnVubmluZyBmbGFnPworICogSWYgd2UgaGF2ZSwgd2UgbmVlZCB0byBjbGVh ciBpdCBiZWZvcmUgZXhpdGluZyEKKyAqLworc3RhdGljIHZvbGF0aWxlIHNpZ19hdG9taWNf dCBsYXVuY2hlcl9ydW5uaW5nID0gZmFsc2U7CisKKy8qCisgKiBBcmUgd2UgZW5hYmxpbmcg ZGF0YSBjaGVja3N1bXMsIG9yIGRpc2FibGluZyB0aGVtPworICovCitzdGF0aWMgYm9vbCBl bmFibGluZ19jaGVja3N1bXM7CisKKy8qIFByb3RvdHlwZXMgKi8KK3N0YXRpYyBMaXN0ICpC dWlsZERhdGFiYXNlTGlzdCh2b2lkKTsKK3N0YXRpYyBMaXN0ICpCdWlsZFJlbGF0aW9uTGlz dChib29sIHRlbXBfcmVsYXRpb25zLCBib29sIGluY2x1ZGVfc2hhcmVkKTsKK3N0YXRpYyB2 b2lkIEZyZWVEYXRhYmFzZUxpc3QoTGlzdCAqZGJsaXN0KTsKK3N0YXRpYyBEYXRhQ2hlY2tz dW1zV29ya2VyUmVzdWx0IFByb2Nlc3NEYXRhYmFzZShEYXRhQ2hlY2tzdW1zV29ya2VyRGF0 YWJhc2UgKmRiKTsKK3N0YXRpYyBib29sIFByb2Nlc3NBbGxEYXRhYmFzZXMoYm9vbCBpbW1l ZGlhdGVfY2hlY2twb2ludCk7CitzdGF0aWMgYm9vbCBQcm9jZXNzU2luZ2xlUmVsYXRpb25G b3JrKFJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya051bSwgQnVmZmVyQWNjZXNzU3Ry YXRlZ3kgc3RyYXRlZ3kpOworc3RhdGljIHZvaWQgbGF1bmNoZXJfY2FuY2VsX2hhbmRsZXIo U0lHTkFMX0FSR1MpOworc3RhdGljIHZvaWQgV2FpdEZvckFsbFRyYW5zYWN0aW9uc1RvRmlu aXNoKHZvaWQpOworCisvKgorICogU3RhcnREYXRhQ2hlY2tzdW1zV29ya2VyTGF1bmNoZXIK KyAqCQlNYWluIGVudHJ5IHBvaW50IGZvciBkYXRhY2hlY2tzdW1zd29ya2VyIGxhdW5jaGVy IHByb2Nlc3MKKyAqCisgKiBUaGUgbWFpbiBlbnRyeXBvaW50IGZvciBzdGFydGluZyBkYXRh IGNoZWNrc3VtcyBwcm9jZXNzaW5nIGZvciBlbmFibGluZyBhcworICogd2VsbCBhcyBkaXNh YmxpbmcuCisgKi8KK3ZvaWQKK1N0YXJ0RGF0YUNoZWNrc3Vtc1dvcmtlckxhdW5jaGVyKGJv b2wgZW5hYmxlX2NoZWNrc3VtcywKKwkJCQkJCQkJIGludCBjb3N0X2RlbGF5LAorCQkJCQkJ CQkgaW50IGNvc3RfbGltaXQsCisJCQkJCQkJCSBib29sIGZhc3QpCit7CisJQmFja2dyb3Vu ZFdvcmtlciBiZ3c7CisJQmFja2dyb3VuZFdvcmtlckhhbmRsZSAqYmd3X2hhbmRsZTsKKwli b29sCQlsYXVuY2hlcl9ydW5uaW5nOworCisJLyogdGhlIGNvc3QgZGVsYXkgc2V0dGluZ3Mg aGF2ZSBubyBlZmZlY3Qgd2hlbiBkaXNhYmxpbmcgKi8KKwlBc3NlcnQoZW5hYmxlX2NoZWNr c3VtcyB8fCBjb3N0X2RlbGF5ID09IDApOworCUFzc2VydChlbmFibGVfY2hlY2tzdW1zIHx8 IGNvc3RfbGltaXQgPT0gMCk7CisKKwkvKiBzdG9yZSB0aGUgZGVzaXJlZCBzdGF0ZSBpbiBz aGFyZWQgbWVtb3J5ICovCisJTFdMb2NrQWNxdWlyZShEYXRhQ2hlY2tzdW1zV29ya2VyTG9j aywgTFdfRVhDTFVTSVZFKTsKKworCURhdGFDaGVja3N1bXNXb3JrZXJTaG1lbS0+bGF1bmNo X2VuYWJsZV9jaGVja3N1bXMgPSBlbmFibGVfY2hlY2tzdW1zOworCURhdGFDaGVja3N1bXNX b3JrZXJTaG1lbS0+bGF1bmNoX2Nvc3RfZGVsYXkgPSBjb3N0X2RlbGF5OworCURhdGFDaGVj a3N1bXNXb3JrZXJTaG1lbS0+bGF1bmNoX2Nvc3RfbGltaXQgPSBjb3N0X2xpbWl0OworCURh dGFDaGVja3N1bXNXb3JrZXJTaG1lbS0+bGF1bmNoX2Zhc3QgPSBmYXN0OworCisJLyogaXMg dGhlIGxhdW5jaGVyIGFscmVhZHkgcnVubmluZz8gKi8KKwlsYXVuY2hlcl9ydW5uaW5nID0g RGF0YUNoZWNrc3Vtc1dvcmtlclNobWVtLT5sYXVuY2hlcl9ydW5uaW5nOworCisJTFdMb2Nr UmVsZWFzZShEYXRhQ2hlY2tzdW1zV29ya2VyTG9jayk7CisKKwkvKgorCSAqIExhdW5jaCBh IG5ldyBsYXVuY2hlciBwcm9jZXNzLCBpZiBpdCdzIG5vdCBydW5uaW5nIGFscmVhZHkuCisJ ICoKKwkgKiBJZiB0aGUgbGF1bmNoZXIgaXMgY3VycmVudGx5IGJ1c3kgZW5hYmxpbmcgdGhl IGNoZWNrc3VtcywgYW5kIHdlIHdhbnQKKwkgKiB0aGVtIGRpc2FibGVkIChvciB2aWNlIHZl cnNhKSwgdGhlIGxhdW5jaGVyIHdpbGwgbm90aWNlIHRoYXQgYXQgbGF0ZXN0CisJICogd2hl biBpdCdzIGFib3V0IHRvIGV4aXQsIGFuZCB3aWxsIGxvb3AgYmFjayBwcm9jZXNzIHRoZSBu ZXcgcmVxdWVzdC4gU28KKwkgKiBpZiB0aGUgbGF1bmNoZXIgaXMgYWxyZWFkeSBydW5uaW5n LCB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIG1vcmUKKwkgKiBoZXJlIHRvIGFib3J0 IGl0LgorCSAqCisJICogSWYgeW91IGNhbGwgcGdfZW5hYmxlL2Rpc2FibGVfZGF0YV9jaGVj a3N1bXMoKSB0d2ljZSBpbiBhIHJvdywgYmVmb3JlCisJICogdGhlIGxhdW5jaGVyIGhhcyBo YWQgYSBjaGFuY2UgdG8gc3RhcnQgdXAsIHdlIHN0aWxsIGVuZCB1cCBsYXVuY2hpbmcgaXQK KwkgKiB0d2ljZS4gIFRoYXQncyBPSywgdGhlIHNlY29uZCBpbnZvY2F0aW9uIHdpbGwgc2Vl IHRoYXQgYSBsYXVuY2hlciBpcworCSAqIGFscmVhZHkgcnVubmluZyBhbmQgZXhpdCBxdWlj a2x5LgorCSAqCisJICogVE9ETzogV2UgY291bGQgb3B0aW1pemUgaGVyZSBhbmQgc2tpcCBs YXVuY2hpbmcgdGhlIGxhdW5jaGVyLCBpZiB3ZSBhcmUKKwkgKiBhbHJlYWR5IGluIHRoZSBk ZXNpcmVkIHN0YXRlLCBpLmUuIGlmIHRoZSBjaGVja3N1bXMgYXJlIGFscmVhZHkgZW5hYmxl ZAorCSAqIGFuZCB5b3UgY2FsbCBwZ19lbmFibGVfZGF0YV9jaGVja3N1bXMoKS4KKwkgKi8K KwlpZiAoIWxhdW5jaGVyX3J1bm5pbmcpCisJeworCQkvKgorCQkgKiBQcmVwYXJlIHRoZSBC YWNrZ3JvdW5kV29ya2VyIGFuZCBsYXVuY2ggaXQuCisJCSAqLworCQltZW1zZXQoJmJndywg MCwgc2l6ZW9mKGJndykpOworCQliZ3cuYmd3X2ZsYWdzID0gQkdXT1JLRVJfU0hNRU1fQUND RVNTIHwgQkdXT1JLRVJfQkFDS0VORF9EQVRBQkFTRV9DT05ORUNUSU9OOworCQliZ3cuYmd3 X3N0YXJ0X3RpbWUgPSBCZ1dvcmtlclN0YXJ0X1JlY292ZXJ5RmluaXNoZWQ7CisJCXNucHJp bnRmKGJndy5iZ3dfbGlicmFyeV9uYW1lLCBCR1dfTUFYTEVOLCAicG9zdGdyZXMiKTsKKwkJ c25wcmludGYoYmd3LmJnd19mdW5jdGlvbl9uYW1lLCBCR1dfTUFYTEVOLCAiRGF0YUNoZWNr c3Vtc1dvcmtlckxhdW5jaGVyTWFpbiIpOworCQlzbnByaW50ZihiZ3cuYmd3X25hbWUsIEJH V19NQVhMRU4sICJkYXRhY2hlY2tzdW1zd29ya2VyIGxhdW5jaGVyIik7CisJCXNucHJpbnRm KGJndy5iZ3dfdHlwZSwgQkdXX01BWExFTiwgImRhdGFjaGVja3N1bXN3b3JrZXIgbGF1bmNo ZXIiKTsKKwkJYmd3LmJnd19yZXN0YXJ0X3RpbWUgPSBCR1dfTkVWRVJfUkVTVEFSVDsKKwkJ Ymd3LmJnd19ub3RpZnlfcGlkID0gTXlQcm9jUGlkOworCQliZ3cuYmd3X21haW5fYXJnID0g KERhdHVtKSAwOworCisJCWlmICghUmVnaXN0ZXJEeW5hbWljQmFja2dyb3VuZFdvcmtlcigm Ymd3LCAmYmd3X2hhbmRsZSkpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJybXNnKCJm YWlsZWQgdG8gc3RhcnQgYmFja2dyb3VuZCB3b3JrZXIgdG8gcHJvY2VzcyBkYXRhIGNoZWNr c3VtcyIpKSk7CisJfQorfQorCisvKgorICogUHJvY2Vzc1NpbmdsZVJlbGF0aW9uRm9yawor ICoJCUVuYWJsZSBkYXRhIGNoZWNrc3VtcyBpbiBhIHNpbmdsZSByZWxhdGlvbi9mb3JrLgor ICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBzdWNjZXNzZnVsLCBhbmQgZmFsc2UgaWYgKmFib3J0 ZWQqLiBPbiBlcnJvciwgYW4gYWN0dWFsCisgKiBlcnJvciBpcyByYWlzZWQgaW4gdGhlIGxv d2VyIGxldmVscy4KKyAqLworc3RhdGljIGJvb2wKK1Byb2Nlc3NTaW5nbGVSZWxhdGlvbkZv cmsoUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrTnVtLCBCdWZmZXJBY2Nlc3NTdHJh dGVneSBzdHJhdGVneSkKK3sKKwlCbG9ja051bWJlciBudW1ibG9ja3MgPSBSZWxhdGlvbkdl dE51bWJlck9mQmxvY2tzSW5Gb3JrKHJlbG4sIGZvcmtOdW0pOworCUJsb2NrTnVtYmVyIGJs a251bTsKKwljaGFyCQlhY3Rpdml0eVtOQU1FREFUQUxFTiAqIDIgKyAxMjhdOworCWNoYXIJ ICAgKnJlbG5zOworCisJcmVsbnMgPSBnZXRfbmFtZXNwYWNlX25hbWUoUmVsYXRpb25HZXRO YW1lc3BhY2UocmVsbikpOworCisJaWYgKCFyZWxucykKKwkJcmV0dXJuIGZhbHNlOworCisJ LyogUmVwb3J0IHRoZSBjdXJyZW50IHJlbGF0aW9uIHRvIHBnc3RhdF9hY3Rpdml0eSAqLwor CXNucHJpbnRmKGFjdGl2aXR5LCBzaXplb2YoYWN0aXZpdHkpIC0gMSwgInByb2Nlc3Npbmc6 ICVzLiVzICglcywgJWRibG9ja3MpIiwKKwkJCSByZWxucywgUmVsYXRpb25HZXRSZWxhdGlv bk5hbWUocmVsbiksIGZvcmtOYW1lc1tmb3JrTnVtXSwgbnVtYmxvY2tzKTsKKwlwZ3N0YXRf cmVwb3J0X2FjdGl2aXR5KFNUQVRFX1JVTk5JTkcsIGFjdGl2aXR5KTsKKworCS8qIFhYWCBv bmx5IGRvIHRoaXMgZm9yIG1haW4gZm9ya3MsIG1heWJlIHdlIHNob3VsZCBkbyBpdCBmb3Ig YWxsPyAqLworCWlmIChmb3JrTnVtID09IE1BSU5fRk9SS05VTSkKKwkJcGdzdGF0X3Byb2dy ZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVTU19EQVRBQ0hFQ0tTVU1TX0JMT0NLU19UT1RBTCwK KwkJCQkJCQkJCSBudW1ibG9ja3MpOworCisJLyoKKwkgKiBXZSBhcmUgbG9vcGluZyBvdmVy IHRoZSBibG9ja3Mgd2hpY2ggZXhpc3RlZCBhdCB0aGUgdGltZSBvZiBwcm9jZXNzCisJICog c3RhcnQsIHdoaWNoIGlzIHNhZmUgc2luY2UgbmV3IGJsb2NrcyBhcmUgY3JlYXRlZCB3aXRo IGNoZWNrc3VtcyBzZXQKKwkgKiBhbHJlYWR5IGR1ZSB0byB0aGUgc3RhdGUgYmVpbmcgImlu cHJvZ3Jlc3Mtb24iLgorCSAqLworCWZvciAoYmxrbnVtID0gMDsgYmxrbnVtIDwgbnVtYmxv Y2tzOyBibGtudW0rKykKKwl7CisJCUJ1ZmZlcgkJYnVmID0gUmVhZEJ1ZmZlckV4dGVuZGVk KHJlbG4sIGZvcmtOdW0sIGJsa251bSwgUkJNX05PUk1BTCwgc3RyYXRlZ3kpOworCisJCS8q IE5lZWQgdG8gZ2V0IGFuIGV4Y2x1c2l2ZSBsb2NrIGJlZm9yZSB3ZSBjYW4gZmxhZyBhcyBk aXJ0eSAqLworCQlMb2NrQnVmZmVyKGJ1ZiwgQlVGRkVSX0xPQ0tfRVhDTFVTSVZFKTsKKwor CQkvKgorCQkgKiBNYXJrIHRoZSBidWZmZXIgYXMgZGlydHkgYW5kIGZvcmNlIGEgZnVsbCBw YWdlIHdyaXRlLiAgV2UgaGF2ZSB0bworCQkgKiByZS13cml0ZSB0aGUgcGFnZSB0byBXQUwg ZXZlbiBpZiB0aGUgY2hlY2tzdW0gaGFzbid0IGNoYW5nZWQsCisJCSAqIGJlY2F1c2UgaWYg dGhlcmUgaXMgYSByZXBsaWNhIGl0IG1pZ2h0IGhhdmUgYSBzbGlnaHRseSBkaWZmZXJlbnQK KwkJICogdmVyc2lvbiBvZiB0aGUgcGFnZSB3aXRoIGFuIGludmFsaWQgY2hlY2tzdW0sIGNh dXNlZCBieSB1bmxvZ2dlZAorCQkgKiBjaGFuZ2VzIChlLmcuIGhpbnRiaXRzKSBvbiB0aGUg bWFzdGVyIGhhcHBlbmluZyB3aGlsZSBjaGVja3N1bXMKKwkJICogd2VyZSBvZmYuIFRoaXMg Y2FuIGhhcHBlbiBpZiB0aGVyZSB3YXMgYSB2YWxpZCBjaGVja3N1bSBvbiB0aGUgcGFnZQor CQkgKiBhdCBvbmUgcG9pbnQgaW4gdGhlIHBhc3QsIHNvIG9ubHkgd2hlbiBjaGVja3N1bXMg YXJlIGZpcnN0IG9uLCB0aGVuCisJCSAqIG9mZiwgYW5kIHRoZW4gdHVybmVkIG9uIGFnYWlu LiBJZmYgd2FsX2xldmVsIGlzIHNldCB0byAibWluaW1hbCIsCisJCSAqIHRoaXMgY291bGQg YmUgYXZvaWRlZCBpZmYgdGhlIGNoZWNrc3VtIGlzIGNhbGN1bGF0ZWQgdG8gYmUgY29ycmVj dC4KKwkJICovCisJCVNUQVJUX0NSSVRfU0VDVElPTigpOworCQlNYXJrQnVmZmVyRGlydHko YnVmKTsKKwkJbG9nX25ld3BhZ2VfYnVmZmVyKGJ1ZiwgZmFsc2UpOworCQlFTkRfQ1JJVF9T RUNUSU9OKCk7CisKKwkJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWYpOworCisJCS8qCisJCSAq IFRoaXMgaXMgdGhlIG9ubHkgcGxhY2Ugd2hlcmUgd2UgY2hlY2sgaWYgd2UgYXJlIGFza2Vk IHRvIGFib3J0LCB0aGUKKwkJICogYWJvcnRpb24gd2lsbCBidWJibGUgdXAgZnJvbSBoZXJl LiBJdCdzIHNhZmUgdG8gY2hlY2sgdGhpcyB3aXRob3V0CisJCSAqIGEgbG9jaywgYmVjYXVz ZSBpZiB3ZSBtaXNzIGl0IGJlaW5nIHNldCwgd2Ugd2lsbCB0cnkgYWdhaW4gc29vbi4KKwkJ ICovCisJCUFzc2VydChlbmFibGluZ19jaGVja3N1bXMpOworCQlpZiAoIURhdGFDaGVja3N1 bXNXb3JrZXJTaG1lbS0+bGF1bmNoX2VuYWJsZV9jaGVja3N1bXMpCisJCQlhYm9ydF9yZXF1 ZXN0ZWQgPSB0cnVlOworCQlpZiAoYWJvcnRfcmVxdWVzdGVkKQorCQkJcmV0dXJuIGZhbHNl OworCisJCS8qIFhYWCBvbmx5IGRvIHRoaXMgZm9yIG1haW4gZm9ya3MsIG1heWJlIHdlIHNo b3VsZCBkbyBpdCBmb3IgYWxsPyAqLworCQlpZiAoZm9ya051bSA9PSBNQUlOX0ZPUktOVU0p CisJCQlwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dSRVNTX0RBVEFDSEVDS1NV TVNfQkxPQ0tTX0RPTkUsCisJCQkJCQkJCQkJIChibGtudW0gKyAxKSk7CisKKwkJdmFjdXVt X2RlbGF5X3BvaW50KGZhbHNlKTsKKwl9CisKKwlwZnJlZShyZWxucyk7CisJcmV0dXJuIHRy dWU7Cit9CisKKy8qCisgKiBQcm9jZXNzU2luZ2xlUmVsYXRpb25CeU9pZAorICoJCVByb2Nl c3MgYSBzaW5nbGUgcmVsYXRpb24gYmFzZWQgb24gb2lkLgorICoKKyAqIFJldHVybnMgdHJ1 ZSBpZiBzdWNjZXNzZnVsLCBhbmQgZmFsc2UgaWYgKmFib3J0ZWQqLiBPbiBlcnJvciwgYW4g YWN0dWFsCisgKiBlcnJvciBpcyByYWlzZWQgaW4gdGhlIGxvd2VyIGxldmVscy4KKyAqLwor c3RhdGljIGJvb2wKK1Byb2Nlc3NTaW5nbGVSZWxhdGlvbkJ5T2lkKE9pZCByZWxhdGlvbklk LCBCdWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVneSkKK3sKKwlSZWxhdGlvbglyZWw7CisJ Rm9ya051bWJlcglmbnVtOworCWJvb2wJCWFib3J0ZWQgPSBmYWxzZTsKKworCVN0YXJ0VHJh bnNhY3Rpb25Db21tYW5kKCk7CisKKwlyZWwgPSB0cnlfcmVsYXRpb25fb3BlbihyZWxhdGlv bklkLCBBY2Nlc3NTaGFyZUxvY2spOworCWlmIChyZWwgPT0gTlVMTCkKKwl7CisJCS8qCisJ CSAqIFJlbGF0aW9uIG5vIGxvbmdlciBleGlzdHMuIFdlIGRvbid0IGNvbnNpZGVyIHRoaXMg YW4gZXJyb3Igc2luY2UKKwkJICogdGhlcmUgYXJlIG5vIHBhZ2VzIGluIGl0IHRoYXQgbmVl ZCBkYXRhIGNoZWNrc3VtcywgYW5kIHRodXMgcmV0dXJuCisJCSAqIHRydWUuIFRoZSB3b3Jr ZXIgb3BlcmF0ZXMgb2ZmIGEgbGlzdCBvZiByZWxhdGlvbnMgZ2VuZXJhdGVkIGF0IHRoZQor CQkgKiBzdGFydCBvZiBwcm9jZXNzaW5nLCBzbyByZWxhdGlvbnMgYmVpbmcgZHJvcHBlZCBp biB0aGUgbWVhbnRpbWUgaXMKKwkJICogdG8gYmUgZXhwZWN0ZWQuCisJCSAqLworCQlDb21t aXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwkJcGdzdGF0X3JlcG9ydF9hY3Rpdml0eShTVEFU RV9JRExFLCBOVUxMKTsKKwkJcmV0dXJuIHRydWU7CisJfQorCVJlbGF0aW9uR2V0U21ncihy ZWwpOworCisJZm9yIChmbnVtID0gMDsgZm51bSA8PSBNQVhfRk9SS05VTTsgZm51bSsrKQor CXsKKwkJaWYgKHNtZ3JleGlzdHMocmVsLT5yZF9zbWdyLCBmbnVtKSkKKwkJeworCQkJaWYg KCFQcm9jZXNzU2luZ2xlUmVsYXRpb25Gb3JrKHJlbCwgZm51bSwgc3RyYXRlZ3kpKQorCQkJ eworCQkJCWFib3J0ZWQgPSB0cnVlOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCXJl bGF0aW9uX2Nsb3NlKHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKwllbG9nKERFQlVHMiwKKwkJ ICJkYXRhIGNoZWNrc3VtIHByb2Nlc3NpbmcgZG9uZSBmb3IgcmVsYXRpb24gd2l0aCBPSUQg JXU6ICVzIiwKKwkJIHJlbGF0aW9uSWQsIChhYm9ydGVkID8gImFib3J0ZWQiIDogImZpbmlz aGVkIikpOworCisJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisKKwlwZ3N0YXRfcmVw b3J0X2FjdGl2aXR5KFNUQVRFX0lETEUsIE5VTEwpOworCisJcmV0dXJuICFhYm9ydGVkOwor fQorCisvKgorICogUHJvY2Vzc0RhdGFiYXNlCisgKgkJRW5hYmxlIGRhdGEgY2hlY2tzdW1z IGluIGEgc2luZ2xlIGRhdGFiYXNlLgorICoKKyAqIFdlIGRvIHRoaXMgYnkgbGF1bmNoaW5n IGEgZHluYW1pYyBiYWNrZ3JvdW5kIHdvcmtlciBpbnRvIHRoaXMgZGF0YWJhc2UsIGFuZAor ICogd2FpdGluZyBmb3IgaXQgdG8gZmluaXNoLiAgV2UgaGF2ZSB0byBkbyB0aGlzIGluIGEg c2VwYXJhdGUgd29ya2VyLCBzaW5jZQorICogZWFjaCBwcm9jZXNzIGNhbiBvbmx5IGJlIGNv bm5lY3RlZCB0byBvbmUgZGF0YWJhc2UgZHVyaW5nIGl0cyBsaWZldGltZS4KKyAqLworc3Rh dGljIERhdGFDaGVja3N1bXNXb3JrZXJSZXN1bHQKK1Byb2Nlc3NEYXRhYmFzZShEYXRhQ2hl Y2tzdW1zV29ya2VyRGF0YWJhc2UgKmRiKQoreworCUJhY2tncm91bmRXb3JrZXIgYmd3Owor CUJhY2tncm91bmRXb3JrZXJIYW5kbGUgKmJnd19oYW5kbGU7CisJQmd3SGFuZGxlU3RhdHVz IHN0YXR1czsKKwlwaWRfdAkJcGlkOworCWNoYXIJCWFjdGl2aXR5W05BTUVEQVRBTEVOICsg NjRdOworCisJRGF0YUNoZWNrc3Vtc1dvcmtlclNobWVtLT5zdWNjZXNzID0gREFUQUNIRUNL U1VNU1dPUktFUl9GQUlMRUQ7CisKKwltZW1zZXQoJmJndywgMCwgc2l6ZW9mKGJndykpOwor CWJndy5iZ3dfZmxhZ3MgPSBCR1dPUktFUl9TSE1FTV9BQ0NFU1MgfCBCR1dPUktFUl9CQUNL RU5EX0RBVEFCQVNFX0NPTk5FQ1RJT047CisJYmd3LmJnd19zdGFydF90aW1lID0gQmdXb3Jr ZXJTdGFydF9SZWNvdmVyeUZpbmlzaGVkOworCXNucHJpbnRmKGJndy5iZ3dfbGlicmFyeV9u YW1lLCBCR1dfTUFYTEVOLCAicG9zdGdyZXMiKTsKKwlzbnByaW50ZihiZ3cuYmd3X2Z1bmN0 aW9uX25hbWUsIEJHV19NQVhMRU4sICIlcyIsICJEYXRhQ2hlY2tzdW1zV29ya2VyTWFpbiIp OworCXNucHJpbnRmKGJndy5iZ3dfbmFtZSwgQkdXX01BWExFTiwgImRhdGFjaGVja3N1bXN3 b3JrZXIgd29ya2VyIik7CisJc25wcmludGYoYmd3LmJnd190eXBlLCBCR1dfTUFYTEVOLCAi ZGF0YWNoZWNrc3Vtc3dvcmtlciB3b3JrZXIiKTsKKwliZ3cuYmd3X3Jlc3RhcnRfdGltZSA9 IEJHV19ORVZFUl9SRVNUQVJUOworCWJndy5iZ3dfbm90aWZ5X3BpZCA9IE15UHJvY1BpZDsK KwliZ3cuYmd3X21haW5fYXJnID0gT2JqZWN0SWRHZXREYXR1bShkYi0+ZGJvaWQpOworCisJ LyoKKwkgKiBJZiB0aGVyZSBhcmUgbm8gd29ya2VyIHNsb3RzIGF2YWlsYWJsZSwgbWFrZSBz dXJlIHdlIHJldHJ5IHByb2Nlc3NpbmcKKwkgKiB0aGlzIGRhdGFiYXNlLiBUaGlzIHdpbGwg bWFrZSB0aGUgZGF0YWNoZWNrc3Vtc3dvcmtlciBtb3ZlIG9uIHRvIHRoZQorCSAqIG5leHQg ZGF0YWJhc2UgYW5kIHF1aXRlIGxpa2VseSBmYWlsIHdpdGggdGhlIHNhbWUgcHJvYmxlbS4g VE9ETzogTWF5YmUKKwkgKiB3ZSBuZWVkIGEgYmFja29mZiB0byBhdm9pZCBydW5uaW5nIHRo cm91Z2ggYWxsIHRoZSBkYXRhYmFzZXMgaGVyZSBpbgorCSAqIHNob3J0IG9yZGVyLgorCSAq LworCWlmICghUmVnaXN0ZXJEeW5hbWljQmFja2dyb3VuZFdvcmtlcigmYmd3LCAmYmd3X2hh bmRsZSkpCisJeworCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJKGVycm1zZygiZmFpbGVkIHRv IHN0YXJ0IHdvcmtlciBmb3IgZW5hYmxpbmcgZGF0YSBjaGVja3N1bXMgaW4gZGF0YWJhc2Ug XCIlc1wiLCByZXRyeWluZyIsCisJCQkJCQlkYi0+ZGJuYW1lKSwKKwkJCQkgZXJyaGludCgi VGhlIG1heF93b3JrZXJfcHJvY2Vzc2VzIHNldHRpbmcgbWlnaHQgYmUgdG9vIGxvdy4iKSkp OworCQlyZXR1cm4gREFUQUNIRUNLU1VNU1dPUktFUl9SRVRSWURCOworCX0KKworCXN0YXR1 cyA9IFdhaXRGb3JCYWNrZ3JvdW5kV29ya2VyU3RhcnR1cChiZ3dfaGFuZGxlLCAmcGlkKTsK KwlpZiAoc3RhdHVzID09IEJHV0hfU1RPUFBFRCkKKwl7CisJCWVyZXBvcnQoV0FSTklORywK KwkJCQkoZXJybXNnKCJjb3VsZCBub3Qgc3RhcnQgYmFja2dyb3VuZCB3b3JrZXIgZm9yIGVu YWJsaW5nIGRhdGEgY2hlY2tzdW1zIGluIGRhdGFiYXNlIFwiJXNcIiIsCisJCQkJCQlkYi0+ ZGJuYW1lKSwKKwkJCQkgZXJyaGludCgiTW9yZSBkZXRhaWxzIG9uIHRoZSBlcnJvciBtaWdo dCBiZSBmb3VuZCBpbiB0aGUgc2VydmVyIGxvZy4iKSkpOworCQlyZXR1cm4gREFUQUNIRUNL U1VNU1dPUktFUl9GQUlMRUQ7CisJfQorCisJLyoKKwkgKiBJZiB0aGUgcG9zdG1hc3RlciBj cmFzaGVkIHdlIGNhbm5vdCBlbmQgdXAgd2l0aCBhIHByb2Nlc3NlZCBkYXRhYmFzZSBzbwor CSAqIHdlIGhhdmUgbm8gYWx0ZXJuYXRpdmUgb3RoZXIgdGhhbiBleGl0aW5nLiBXaGVuIGVu YWJsaW5nIGNoZWNrc3VtcyB3ZQorCSAqIHdvbid0IGF0IHRoaXMgdGltZSBoYXZlIGNoYW5n ZWQgdGhlIHBnX2NvbnRyb2wgdmVyc2lvbiB0byBlbmFibGVkIHNvCisJICogd2hlbiB0aGUg Y2x1c3RlciBjb21lcyBiYWNrIHVwIHByb2Nlc3Npbmcgd2lsbCBoYXZlIHRvIGJlIHJlc3Rh cnRlZC4KKwkgKiBXaGVuIGRpc2FibGluZywgdGhlIHBnX2NvbnRyb2wgdmVyc2lvbiB3aWxs IGJlIHNldCB0byBvZmYgYmVmb3JlIHRoaXMKKwkgKiBzbyB3aGVuIHRoZSBjbHVzdGVyIGNv bWVzIHVwIGNoZWNrc3VtcyB3aWxsIGJlIG9mZiBhcyBleHBlY3RlZC4KKwkgKi8KKwlpZiAo c3RhdHVzID09IEJHV0hfUE9TVE1BU1RFUl9ESUVEKQorCQllcmVwb3J0KEZBVEFMLAorCQkJ CShlcnJtc2coImNhbm5vdCBlbmFibGUgZGF0YSBjaGVja3N1bXMgd2l0aG91dCB0aGUgcG9z dG1hc3RlciBwcm9jZXNzIiksCisJCQkJIGVycmhpbnQoIlJlc3RhcnQgdGhlIGRhdGFiYXNl IGFuZCByZXN0YXJ0IGRhdGEgY2hlY2tzdW0gcHJvY2Vzc2luZyBieSBjYWxsaW5nIHBnX2Vu YWJsZV9kYXRhX2NoZWNrc3VtcygpLiIpKSk7CisKKwlBc3NlcnQoc3RhdHVzID09IEJHV0hf U1RBUlRFRCk7CisJZXJlcG9ydChERUJVRzEsCisJCQkoZXJybXNnKCJpbml0aWF0aW5nIGRh dGEgY2hlY2tzdW0gcHJvY2Vzc2luZyBpbiBkYXRhYmFzZSBcIiVzXCIiLAorCQkJCQlkYi0+ ZGJuYW1lKSkpOworCisJc25wcmludGYoYWN0aXZpdHksIHNpemVvZihhY3Rpdml0eSkgLSAx LAorCQkJICJXYWl0aW5nIGZvciB3b3JrZXIgaW4gZGF0YWJhc2UgJXMgKHBpZCAlbGQpIiwg ZGItPmRibmFtZSwgKGxvbmcpIHBpZCk7CisJcGdzdGF0X3JlcG9ydF9hY3Rpdml0eShTVEFU RV9SVU5OSU5HLCBhY3Rpdml0eSk7CisKKwlzdGF0dXMgPSBXYWl0Rm9yQmFja2dyb3VuZFdv cmtlclNodXRkb3duKGJnd19oYW5kbGUpOworCWlmIChzdGF0dXMgPT0gQkdXSF9QT1NUTUFT VEVSX0RJRUQpCisJCWVyZXBvcnQoRkFUQUwsCisJCQkJKGVycm1zZygicG9zdG1hc3RlciBl eGl0ZWQgZHVyaW5nIGRhdGEgY2hlY2tzdW0gcHJvY2Vzc2luZyBpbiBcIiVzXCIiLAorCQkJ CQkJZGItPmRibmFtZSksCisJCQkJIGVycmhpbnQoIlJlc3RhcnQgdGhlIGRhdGFiYXNlIGFu ZCByZXN0YXJ0IGRhdGEgY2hlY2tzdW0gcHJvY2Vzc2luZyBieSBjYWxsaW5nIHBnX2VuYWJs ZV9kYXRhX2NoZWNrc3VtcygpLiIpKSk7CisKKwlpZiAoRGF0YUNoZWNrc3Vtc1dvcmtlclNo bWVtLT5zdWNjZXNzID09IERBVEFDSEVDS1NVTVNXT1JLRVJfQUJPUlRFRCkKKwkJZXJlcG9y dChMT0csCisJCQkJKGVycm1zZygiZGF0YSBjaGVja3N1bXMgcHJvY2Vzc2luZyB3YXMgYWJv cnRlZCBpbiBkYXRhYmFzZSBcIiVzXCIiLAorCQkJCQkJZGItPmRibmFtZSkpKTsKKworCXBn c3RhdF9yZXBvcnRfYWN0aXZpdHkoU1RBVEVfSURMRSwgTlVMTCk7CisKKwlyZXR1cm4gRGF0 YUNoZWNrc3Vtc1dvcmtlclNobWVtLT5zdWNjZXNzOworfQorCisvKgorICogbGF1bmNoZXJf ZXhpdAorICoKKyAqIEludGVybmFsIHJvdXRpbmUgZm9yIGNsZWFuaW5nIHVwIHN0YXRlIHdo ZW4gdGhlIGxhdW5jaGVyIHByb2Nlc3MgZXhpdHMuIFdlCisgKiBuZWVkIHRvIGNsZWFuIHVw IHRoZSBhYm9ydCBmbGFnIHRvIGVuc3VyZSB0aGF0IHByb2Nlc3NpbmcgY2FuIGJlIHJlc3Rh cnRlZAorICogYWdhaW4gYWZ0ZXIgaXQgd2FzIHByZXZpb3VzbHkgYWJvcnRlZC4KKyAqLwor c3RhdGljIHZvaWQKK2xhdW5jaGVyX2V4aXQoaW50IGNvZGUsIERhdHVtIGFyZykKK3sKKwlp ZiAobGF1bmNoZXJfcnVubmluZykKKwl7CisJCUxXTG9ja0FjcXVpcmUoRGF0YUNoZWNrc3Vt c1dvcmtlckxvY2ssIExXX0VYQ0xVU0lWRSk7CisJCWxhdW5jaGVyX3J1bm5pbmcgPSBmYWxz ZTsKKwkJRGF0YUNoZWNrc3Vtc1dvcmtlclNobWVtLT5sYXVuY2hlcl9ydW5uaW5nID0gZmFs c2U7CisJCUxXTG9ja1JlbGVhc2UoRGF0YUNoZWNrc3Vtc1dvcmtlckxvY2spOworCX0KK30K KworLyoKKyAqIGxhdW5jaGVyX2NhbmNlbF9oYW5kbGVyCisgKgorICogSW50ZXJuYWwgcm91 dGluZSBmb3IgcmVhY3RpbmcgdG8gU0lHSU5UIGFuZCBmbGFnZ2luZyB0aGUgd29ya2VyIHRv IGFib3J0LgorICogVGhlIHdvcmtlciB3b24ndCBiZSBpbnRlcnJ1cHRlZCBpbW1lZGlhdGVs eSBidXQgd2lsbCBjaGVjayBmb3IgYWJvcnQgZmxhZworICogYmV0d2VlbiBlYWNoIGJsb2Nr IGluIGEgcmVsYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCitsYXVuY2hlcl9jYW5jZWxfaGFu ZGxlcihTSUdOQUxfQVJHUykKK3sKKwlpbnQJCQlzYXZlX2Vycm5vID0gZXJybm87CisKKwlh Ym9ydF9yZXF1ZXN0ZWQgPSB0cnVlOworCisJLyoKKwkgKiBUaGVyZSBpcyBubyBzbGVlcGlu ZyBpbiB0aGUgbWFpbiBsb29wLCB0aGUgZmxhZyB3aWxsIGJlIGNoZWNrZWQKKwkgKiBwZXJp b2RpY2FsbHkgaW4gUHJvY2Vzc1NpbmdsZVJlbGF0aW9uRm9yay4gVGhlIHdvcmtlciBkb2Vz IGhvd2V2ZXIKKwkgKiBzbGVlcCB3aGVuIHdhaXRpbmcgZm9yIGNvbmN1cnJlbnQgdHJhbnNh Y3Rpb25zIHRvIGVuZCBzbyB3ZSBzdGlsbCBuZWVkCisJICogdG8gc2V0IHRoZSBsYXRjaC4K KwkgKi8KKwlTZXRMYXRjaChNeUxhdGNoKTsKKworCWVycm5vID0gc2F2ZV9lcnJubzsKK30K KworLyoKKyAqIFdhaXRGb3JBbGxUcmFuc2FjdGlvbnNUb0ZpbmlzaAorICoJCUJsb2NrcyBh d2FpdGluZyBhbGwgY3VycmVudCB0cmFuc2FjdGlvbnMgdG8gZmluaXNoCisgKgorICogUmV0 dXJucyB3aGVuIGFsbCB0cmFuc2FjdGlvbnMgd2hpY2ggYXJlIGFjdGl2ZSBhdCB0aGUgY2Fs bCBvZiB0aGUgZnVuY3Rpb24KKyAqIGhhdmUgZW5kZWQsIG9yIGlmIHRoZSBwb3N0bWFzdGVy IGRpZXMgd2hpbGUgd2FpdGluZy4gSWYgdGhlIHBvc3RtYXN0ZXIgZGllcworICogdGhlIGFi b3J0IGZsYWcgd2lsbCBiZSBzZXQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgY2FsbGVyIG9mIHRo aXMgc2hvdWxkbid0CisgKiBwcm9jZWVkLgorICoKKyAqIE5COiB0aGlzIHdpbGwgcmV0dXJu IGVhcmx5LCBpZiBhYm9ydGVkIGJ5IFNJR0lOVCBvciBpZiB0aGUgdGFyZ2V0IHN0YXRlCisg KiBpcyBjaGFuZ2VkIHdoaWxlIHdlJ3JlIHJ1bm5pbmcuCisgKi8KK3N0YXRpYyB2b2lkCitX YWl0Rm9yQWxsVHJhbnNhY3Rpb25zVG9GaW5pc2godm9pZCkKK3sKKwlUcmFuc2FjdGlvbklk IHdhaXRmb3J4aWQ7CisKKwlMV0xvY2tBY3F1aXJlKFhpZEdlbkxvY2ssIExXX1NIQVJFRCk7 CisJd2FpdGZvcnhpZCA9IFhpZEZyb21GdWxsVHJhbnNhY3Rpb25JZChUcmFuc2FtVmFyaWFi bGVzLT5uZXh0WGlkKTsKKwlMV0xvY2tSZWxlYXNlKFhpZEdlbkxvY2spOworCisJd2hpbGUg KFRyYW5zYWN0aW9uSWRQcmVjZWRlcyhHZXRPbGRlc3RBY3RpdmVUcmFuc2FjdGlvbklkKCks IHdhaXRmb3J4aWQpKQorCXsKKwkJY2hhcgkJYWN0aXZpdHlbNjRdOworCQlpbnQJCQlyYzsK KworCQkvKiBPbGRlc3QgcnVubmluZyB4aWQgaXMgb2xkZXIgdGhhbiB1cywgc28gd2FpdCAq LworCQlzbnByaW50ZihhY3Rpdml0eSwKKwkJCQkgc2l6ZW9mKGFjdGl2aXR5KSwKKwkJCQkg IldhaXRpbmcgZm9yIGN1cnJlbnQgdHJhbnNhY3Rpb25zIHRvIGZpbmlzaCAod2FpdGluZyBm b3IgJXUpIiwKKwkJCQkgd2FpdGZvcnhpZCk7CisJCXBnc3RhdF9yZXBvcnRfYWN0aXZpdHko U1RBVEVfUlVOTklORywgYWN0aXZpdHkpOworCisJCS8qIFJldHJ5IGV2ZXJ5IDUgc2Vjb25k cyAqLworCQlSZXNldExhdGNoKE15TGF0Y2gpOworCQlyYyA9IFdhaXRMYXRjaChNeUxhdGNo LAorCQkJCQkgICBXTF9MQVRDSF9TRVQgfCBXTF9USU1FT1VUIHwgV0xfUE9TVE1BU1RFUl9E RUFUSCwKKwkJCQkJICAgNTAwMCwKKwkJCQkJICAgV0FJVF9FVkVOVF9DSEVDS1NVTV9FTkFC TEVfU1RBUlRDT05ESVRJT04pOworCisJCS8qCisJCSAqIElmIHRoZSBwb3N0bWFzdGVyIGRp ZWQgd2Ugd29uJ3QgYmUgYWJsZSB0byBlbmFibGUgY2hlY2tzdW1zCisJCSAqIGNsdXN0ZXIt d2lkZSBzbyBhYm9ydCBhbmQgaG9wZSB0byBjb250aW51ZSB3aGVuIHJlc3RhcnRlZC4KKwkJ ICovCisJCWlmIChyYyAmIFdMX1BPU1RNQVNURVJfREVBVEgpCisJCQllcmVwb3J0KEZBVEFM LAorCQkJCQkoZXJybXNnKCJwb3N0bWFzdGVyIGV4aXRlZCBkdXJpbmcgZGF0YSBjaGVja3N1 bSBwcm9jZXNzaW5nIiksCisJCQkJCSBlcnJoaW50KCJSZXN0YXJ0IHRoZSBkYXRhYmFzZSBh bmQgcmVzdGFydCBkYXRhIGNoZWNrc3VtIHByb2Nlc3NpbmcgYnkgY2FsbGluZyBwZ19lbmFi bGVfZGF0YV9jaGVja3N1bXMoKS4iKSkpOworCisJCUxXTG9ja0FjcXVpcmUoRGF0YUNoZWNr c3Vtc1dvcmtlckxvY2ssIExXX1NIQVJFRCk7CisJCWlmIChEYXRhQ2hlY2tzdW1zV29ya2Vy U2htZW0tPmxhdW5jaF9lbmFibGVfY2hlY2tzdW1zICE9IGVuYWJsaW5nX2NoZWNrc3VtcykK KwkJCWFib3J0X3JlcXVlc3RlZCA9IHRydWU7CisJCUxXTG9ja1JlbGVhc2UoRGF0YUNoZWNr c3Vtc1dvcmtlckxvY2spOworCQlpZiAoYWJvcnRfcmVxdWVzdGVkKQorCQkJYnJlYWs7CisJ fQorCisJcGdzdGF0X3JlcG9ydF9hY3Rpdml0eShTVEFURV9JRExFLCBOVUxMKTsKKwlyZXR1 cm47Cit9CisKKy8qCisgKiBEYXRhQ2hlY2tzdW1zV29ya2VyTGF1bmNoZXJNYWluCisgKgor ICogTWFpbiBmdW5jdGlvbiBmb3IgbGF1bmNoaW5nIGR5bmFtaWMgYmFja2dyb3VuZCB3b3Jr ZXJzIGZvciBwcm9jZXNzaW5nIGRhdGEKKyAqIGNoZWNrc3VtcyBpbiBkYXRhYmFzZXMuIFRo aXMgZnVuY3Rpb24gaGFzIHRoZSBiZ3dvcmtlciBtYW5hZ2VtZW50LCB3aXRoCisgKiBQcm9j ZXNzQWxsRGF0YWJhc2VzIGJlaW5nIHJlc3BvbnNpYmxlIGZvciBsb29waW5nIG92ZXIgdGhl IGRhdGFiYXNlcyBhbmQKKyAqIGluaXRpYXRpbmcgcHJvY2Vzc2luZy4KKyAqLwordm9pZAor RGF0YUNoZWNrc3Vtc1dvcmtlckxhdW5jaGVyTWFpbihEYXR1bSBhcmcpCit7CisJb25fc2ht ZW1fZXhpdChsYXVuY2hlcl9leGl0LCAwKTsKKworCWVyZXBvcnQoREVCVUcxLAorCQkJZXJy bXNnKCJiYWNrZ3JvdW5kIHdvcmtlciBcImRhdGFjaGVja3N1bXN3b3JrZXJcIiBsYXVuY2hl ciBzdGFydGVkIikpOworCisJcHFzaWduYWwoU0lHVEVSTSwgZGllKTsKKwlwcXNpZ25hbChT SUdJTlQsIGxhdW5jaGVyX2NhbmNlbF9oYW5kbGVyKTsKKworCUJhY2tncm91bmRXb3JrZXJV bmJsb2NrU2lnbmFscygpOworCisJTXlCYWNrZW5kVHlwZSA9IEJfREFUQUNIRUNLU1VNU1dP UktFUl9MQVVOQ0hFUjsKKwlpbml0X3BzX2Rpc3BsYXkoTlVMTCk7CisKKwlMV0xvY2tBY3F1 aXJlKERhdGFDaGVja3N1bXNXb3JrZXJMb2NrLCBMV19FWENMVVNJVkUpOworCisJaWYgKERh dGFDaGVja3N1bXNXb3JrZXJTaG1lbS0+bGF1bmNoZXJfcnVubmluZykKKwl7CisJCS8qIExh dW5jaGVyIHdhcyBhbHJlYWR5IHJ1bm5pbmcsIGxldCBpdCBmaW5pc2ggKi8KKwkJTFdMb2Nr UmVsZWFzZShEYXRhQ2hlY2tzdW1zV29ya2VyTG9jayk7CisJCXJldHVybjsKKwl9CisKKwls YXVuY2hlcl9ydW5uaW5nID0gdHJ1ZTsKKworCS8qCisJICogSW5pdGlhbGl6ZSBhIGNvbm5l Y3Rpb24gdG8gc2hhcmVkIGNhdGFsb2dzIG9ubHkuCisJICovCisJQmFja2dyb3VuZFdvcmtl ckluaXRpYWxpemVDb25uZWN0aW9uQnlPaWQoSW52YWxpZE9pZCwgSW52YWxpZE9pZCwgMCk7 CisKKwllbmFibGluZ19jaGVja3N1bXMgPSBEYXRhQ2hlY2tzdW1zV29ya2VyU2htZW0tPmxh dW5jaF9lbmFibGVfY2hlY2tzdW1zOworCURhdGFDaGVja3N1bXNXb3JrZXJTaG1lbS0+bGF1 bmNoZXJfcnVubmluZyA9IHRydWU7CisJRGF0YUNoZWNrc3Vtc1dvcmtlclNobWVtLT5lbmFi bGluZ19jaGVja3N1bXMgPSBlbmFibGluZ19jaGVja3N1bXM7CisJRGF0YUNoZWNrc3Vtc1dv cmtlclNobWVtLT5jb3N0X2RlbGF5ID0gRGF0YUNoZWNrc3Vtc1dvcmtlclNobWVtLT5sYXVu Y2hfY29zdF9kZWxheTsKKwlEYXRhQ2hlY2tzdW1zV29ya2VyU2htZW0tPmNvc3RfbGltaXQg PSBEYXRhQ2hlY2tzdW1zV29ya2VyU2htZW0tPmxhdW5jaF9jb3N0X2xpbWl0OworCURhdGFD aGVja3N1bXNXb3JrZXJTaG1lbS0+aW1tZWRpYXRlX2NoZWNrcG9pbnQgPSBEYXRhQ2hlY2tz dW1zV29ya2VyU2htZW0tPmxhdW5jaF9mYXN0OworCUxXTG9ja1JlbGVhc2UoRGF0YUNoZWNr c3Vtc1dvcmtlckxvY2spOworCisJLyoKKwkgKiBUaGUgdGFyZ2V0IHN0YXRlIGNhbiBjaGFu Z2Ugd2hpbGUgd2UgYXJlIGJ1c3kgZW5hYmxpbmcvZGlzYWJsaW5nCisJICogY2hlY2tzdW1z LCBpZiB0aGUgdXNlciBjYWxscyBwZ19kaXNhYmxlL2VuYWJsZV9kYXRhX2NoZWNrc3Vtcygp IGJlZm9yZQorCSAqIHdlIGFyZSBmaW5pc2hlZCB3aXRoIHRoZSBwcmV2aW91cyByZXF1ZXN0 LiBJbiB0aGF0IGNhc2UsIHdlIHdpbGwgbG9vcAorCSAqIGJhY2sgaGVyZSwgdG8gcHJvY2Vz cyB0aGUgbmV3IHJlcXVlc3QuCisJICovCithZ2FpbjoKKworCXBnc3RhdF9wcm9ncmVzc19z dGFydF9jb21tYW5kKFBST0dSRVNTX0NPTU1BTkRfREFUQUNIRUNLU1VNUywKKwkJCQkJCQkJ ICBJbnZhbGlkT2lkKTsKKworCS8qCisJICogSWYgd2UncmUgYXNrZWQgdG8gZW5hYmxlIGNo ZWNrc3Vtcywgd2UgbmVlZCB0byBjaGVjayBpZiBwcm9jZXNzaW5nIHdhcworCSAqIHByZXZp b3VzbHkgaW50ZXJydXB0ZWQgc3VjaCB0aGF0IHdlIHNob3VsZCByZXN1bWUgcmF0aGVyIHRo YW4gc3RhcnQKKwkgKiBmcm9tIHNjcmF0Y2guCisJICovCisJaWYgKGVuYWJsaW5nX2NoZWNr c3VtcykKKwl7CisJCS8qCisJCSAqIElmIHdlIGFyZSBhc2tlZCB0byBlbmFibGUgY2hlY2tz dW1zIGluIGEgY2x1c3RlciB3aGljaCBhbHJlYWR5IGhhcworCQkgKiBjaGVja3N1bXMgZW5h YmxlZCwgZXhpdCBpbW1lZGlhdGVseSBhcyB0aGVyZSBpcyBub3RoaW5nIG1vcmUgdG8gZG8u CisJCSAqIEhvbGQgaW50ZXJydXB0cyB0byBtYWtlIHN1cmUgc3RhdGUgZG9lc24ndCBjaGFu Z2UgZHVyaW5nIGNoZWNraW5nLgorCQkgKi8KKwkJSE9MRF9JTlRFUlJVUFRTKCk7CisJCWlm IChEYXRhQ2hlY2tzdW1zTmVlZFZlcmlmeSgpKQorCQl7CisJCQlSRVNVTUVfSU5URVJSVVBU UygpOworCQkJZ290byBkb25lOworCQl9CisJCVJFU1VNRV9JTlRFUlJVUFRTKCk7CisKKwkJ LyoKKwkJICogU2V0IHRoZSBzdGF0ZSB0byBpbnByb2dyZXNzLW9uIGFuZCB3YWl0IG9uIHRo ZSBwcm9jc2lnbmFsIGJhcnJpZXIuCisJCSAqLworCQlwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRl X3BhcmFtKFBST0dSRVNTX0RBVEFDSEVDS1NVTVNfUEhBU0UsCisJCQkJCQkJCQkgUFJPR1JF U1NfREFUQUNIRUNLU1VNU19QSEFTRV9FTkFCTElORyk7CisJCVNldERhdGFDaGVja3N1bXNP bkluUHJvZ3Jlc3MoKTsKKworCQlpZiAoIVByb2Nlc3NBbGxEYXRhYmFzZXMoRGF0YUNoZWNr c3Vtc1dvcmtlclNobWVtLT5pbW1lZGlhdGVfY2hlY2twb2ludCkpCisJCXsKKwkJCS8qCisJ CQkgKiBJZiB0aGUgdGFyZ2V0IHN0YXRlIGNoYW5nZWQgZHVyaW5nIHByb2Nlc3NpbmcgdGhl biBpdCdzIG5vdCBhCisJCQkgKiBmYWlsdXJlLCBzbyByZXN0YXJ0IHByb2Nlc3NpbmcgaW5z dGVhZC4KKwkJCSAqLworCQkJTFdMb2NrQWNxdWlyZShEYXRhQ2hlY2tzdW1zV29ya2VyTG9j aywgTFdfRVhDTFVTSVZFKTsKKwkJCWlmIChEYXRhQ2hlY2tzdW1zV29ya2VyU2htZW0tPmxh dW5jaF9lbmFibGVfY2hlY2tzdW1zICE9IGVuYWJsaW5nX2NoZWNrc3VtcykKKwkJCXsKKwkJ CQlMV0xvY2tSZWxlYXNlKERhdGFDaGVja3N1bXNXb3JrZXJMb2NrKTsKKwkJCQlnb3RvIGRv bmU7CisJCQl9CisJCQlMV0xvY2tSZWxlYXNlKERhdGFDaGVja3N1bXNXb3JrZXJMb2NrKTsK KwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJtc2coInVuYWJsZSB0byBlbmFibGUgZGF0 YSBjaGVja3N1bXMgaW4gY2x1c3RlciIpKSk7CisJCX0KKworCQlTZXREYXRhQ2hlY2tzdW1z T24oKTsKKwl9CisJZWxzZQorCXsKKwkJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQ Uk9HUkVTU19EQVRBQ0hFQ0tTVU1TX1BIQVNFLAorCQkJCQkJCQkJIFBST0dSRVNTX0RBVEFD SEVDS1NVTVNfUEhBU0VfRElTQUJMSU5HKTsKKwkJU2V0RGF0YUNoZWNrc3Vtc09mZigpOwor CX0KKworZG9uZToKKworCS8qCisJICogQWxsIGRvbmUuIEJ1dCBiZWZvcmUgd2UgZXhpdCwg Y2hlY2sgaWYgdGhlIHRhcmdldCBzdGF0ZSB3YXMgY2hhbmdlZAorCSAqIHdoaWxlIHdlIHdl cmUgcnVubmluZy4gSW4gdGhhdCBjYXNlIHdlIHdpbGwgaGF2ZSB0byBzdGFydCBhbGwgb3Zl cgorCSAqIGFnYWluLgorCSAqLworCUxXTG9ja0FjcXVpcmUoRGF0YUNoZWNrc3Vtc1dvcmtl ckxvY2ssIExXX0VYQ0xVU0lWRSk7CisJaWYgKERhdGFDaGVja3N1bXNXb3JrZXJTaG1lbS0+ bGF1bmNoX2VuYWJsZV9jaGVja3N1bXMgIT0gZW5hYmxpbmdfY2hlY2tzdW1zKQorCXsKKwkJ RGF0YUNoZWNrc3Vtc1dvcmtlclNobWVtLT5lbmFibGluZ19jaGVja3N1bXMgPSBEYXRhQ2hl Y2tzdW1zV29ya2VyU2htZW0tPmxhdW5jaF9lbmFibGVfY2hlY2tzdW1zOworCQllbmFibGlu Z19jaGVja3N1bXMgPSBEYXRhQ2hlY2tzdW1zV29ya2VyU2htZW0tPmxhdW5jaF9lbmFibGVf Y2hlY2tzdW1zOworCQlEYXRhQ2hlY2tzdW1zV29ya2VyU2htZW0tPmNvc3RfZGVsYXkgPSBE YXRhQ2hlY2tzdW1zV29ya2VyU2htZW0tPmxhdW5jaF9jb3N0X2RlbGF5OworCQlEYXRhQ2hl Y2tzdW1zV29ya2VyU2htZW0tPmNvc3RfbGltaXQgPSBEYXRhQ2hlY2tzdW1zV29ya2VyU2ht ZW0tPmxhdW5jaF9jb3N0X2xpbWl0OworCQlMV0xvY2tSZWxlYXNlKERhdGFDaGVja3N1bXNX b3JrZXJMb2NrKTsKKwkJZ290byBhZ2FpbjsKKwl9CisKKwkvKiBTaHV0IGRvd24gcHJvZ3Jl c3MgcmVwb3J0aW5nIGFzIHdlIGFyZSBkb25lICovCisJcGdzdGF0X3Byb2dyZXNzX2VuZF9j b21tYW5kKCk7CisKKwlsYXVuY2hlcl9ydW5uaW5nID0gZmFsc2U7CisJRGF0YUNoZWNrc3Vt c1dvcmtlclNobWVtLT5sYXVuY2hlcl9ydW5uaW5nID0gZmFsc2U7CisJTFdMb2NrUmVsZWFz ZShEYXRhQ2hlY2tzdW1zV29ya2VyTG9jayk7Cit9CisKKy8qCisgKiBQcm9jZXNzQWxsRGF0 YWJhc2VzCisgKgkJQ29tcHV0ZSB0aGUgbGlzdCBvZiBhbGwgZGF0YWJhc2VzIGFuZCBwcm9j ZXNzIGNoZWNrc3VtcyBpbiBlYWNoCisgKgorICogVGhpcyB3aWxsIHJlcGVhdGVkbHkgZ2Vu ZXJhdGUgYSBsaXN0IG9mIGRhdGFiYXNlcyB0byBwcm9jZXNzIGZvciBlbmFibGluZworICog Y2hlY2tzdW1zLiBVbnRpbCBubyBuZXcgZGF0YWJhc2VzIGFyZSBmb3VuZCwgdGhpcyB3aWxs IGxvb3AgYXJvdW5kIGNvbXB1dGluZworICogYSBuZXcgbGlzdCBhbmQgY29tcGFyaW5nIGl0 IHRvIHRoZSBhbHJlYWR5IHNlZW4gb25lcy4KKyAqCisgKiBJZiBpbW1lZGlhdGVfY2hlY2tw b2ludCBpcyBzZXQgdG8gdHJ1ZSB0aGVuIGEgQ0hFQ0tQT0lOVF9JTU1FRElBVEUgd2lsbCBi ZQorICogaXNzdWVkLiBUaGlzIGlzIHVzZWZ1bCBmb3IgdGVzdGluZyBidXQgc2hvdWxkIGJl IGF2b2lkZWQgaW4gcHJvZHVjdGlvbiB1c2UKKyAqIGFzIGl0IG1heSBhZmZlY3QgY2x1c3Rl ciBwZXJmb3JtYW5jZSBkcmFzdGljYWxseS4KKyAqLworc3RhdGljIGJvb2wKK1Byb2Nlc3NB bGxEYXRhYmFzZXMoYm9vbCBpbW1lZGlhdGVfY2hlY2twb2ludCkKK3sKKwlMaXN0CSAgICpE YXRhYmFzZUxpc3Q7CisJSFRBQgkgICAqUHJvY2Vzc2VkRGF0YWJhc2VzID0gTlVMTDsKKwlI QVNIQ1RMCQloYXNoX2N0bDsKKwlib29sCQlmb3VuZF9mYWlsZWQgPSBmYWxzZTsKKwlpbnQJ CQlmbGFnczsKKworCS8qIEluaXRpYWxpemUgYSBoYXNoIHRyYWNraW5nIGFsbCBwcm9jZXNz ZWQgZGF0YWJhc2VzICovCisJbWVtc2V0KCZoYXNoX2N0bCwgMCwgc2l6ZW9mKGhhc2hfY3Rs KSk7CisJaGFzaF9jdGwua2V5c2l6ZSA9IHNpemVvZihPaWQpOworCWhhc2hfY3RsLmVudHJ5 c2l6ZSA9IHNpemVvZihEYXRhQ2hlY2tzdW1zV29ya2VyUmVzdWx0RW50cnkpOworCVByb2Nl c3NlZERhdGFiYXNlcyA9IGhhc2hfY3JlYXRlKCJQcm9jZXNzZWQgZGF0YWJhc2VzIiwKKwkJ CQkJCQkJCSA2NCwKKwkJCQkJCQkJCSAmaGFzaF9jdGwsCisJCQkJCQkJCQkgSEFTSF9FTEVN IHwgSEFTSF9CTE9CUyk7CisKKwkvKgorCSAqIFNldCB1cCBzbyBmaXJzdCBydW4gcHJvY2Vz c2VzIHNoYXJlZCBjYXRhbG9ncywgYnV0IG5vdCBvbmNlIGluIGV2ZXJ5CisJICogZGIuCisJ ICovCisJRGF0YUNoZWNrc3Vtc1dvcmtlclNobWVtLT5wcm9jZXNzX3NoYXJlZF9jYXRhbG9n cyA9IHRydWU7CisKKwkvKgorCSAqIEdldCBhIGxpc3Qgb2YgYWxsIGRhdGFiYXNlcyB0byBw cm9jZXNzLiBUaGlzIG1heSBpbmNsdWRlIGRhdGFiYXNlcyB0aGF0CisJICogd2VyZSBjcmVh dGVkIGR1cmluZyBvdXIgcnVudGltZS4gIFNpbmNlIGEgZGF0YWJhc2UgY2FuIGJlIGNyZWF0 ZWQgYXMgYQorCSAqIGNvcHkgb2YgYW55IG90aGVyIGRhdGFiYXNlICh3aGljaCBtYXkgbm90 IGhhdmUgZXhpc3RlZCBpbiBvdXIgbGFzdAorCSAqIHJ1biksIHdlIGhhdmUgdG8gcmVwZWF0 IHRoaXMgbG9vcCB1bnRpbCBubyBuZXcgZGF0YWJhc2VzIHNob3cgdXAgaW4gdGhlCisJICog bGlzdC4KKwkgKi8KKwlEYXRhYmFzZUxpc3QgPSBCdWlsZERhdGFiYXNlTGlzdCgpOworCisJ LyoKKwkgKiBVcGRhdGUgcHJvZ3Jlc3MgcmVwb3J0aW5nIHdpdGggdGhlIHRvdGFsIG51bWJl ciBvZiBkYXRhYmFzZXMgd2UgbmVlZCB0bworCSAqIHByb2Nlc3MuIFRoaXMgbnVtYmVyIHNo b3VsZCBub3QgYmUgY2hhbmdlZCBkdXJpbmcgcHJvY2Vzc2luZywgdGhlCisJICogY29sdW1u cyBmb3IgcHJvY2Vzc2VkIGRhdGFiYXNlcyBpcyBpbnN0ZWFkIGluY3JlYXNlZCBzdWNoIHRo YXQgaXQgY2FuCisJICogYmUgY29tcGFyZWQgYWdhaW5zdCB0aGUgdG90YWwuCisJICovCisJ eworCQljb25zdCBpbnQJaW5kZXhbXSA9IHsKKwkJCVBST0dSRVNTX0RBVEFDSEVDS1NVTVNf REJTX1RPVEFMLAorCQkJUFJPR1JFU1NfREFUQUNIRUNLU1VNU19EQlNfRE9ORSwKKwkJCVBS T0dSRVNTX0RBVEFDSEVDS1NVTVNfUkVMU19UT1RBTCwKKwkJCVBST0dSRVNTX0RBVEFDSEVD S1NVTVNfUkVMU19ET05FLAorCQkJUFJPR1JFU1NfREFUQUNIRUNLU1VNU19CTE9DS1NfVE9U QUwsCisJCQlQUk9HUkVTU19EQVRBQ0hFQ0tTVU1TX0JMT0NLU19ET05FLAorCQl9OworCisJ CWludDY0CQl2YWxzWzZdOworCisJCXZhbHNbMF0gPSBsaXN0X2xlbmd0aChEYXRhYmFzZUxp c3QpOworCQl2YWxzWzFdID0gMDsKKworCQkvKiB0cmFuc2xhdGVkIHRvIE5VTEwgKi8KKwkJ dmFsc1syXSA9IC0xOworCQl2YWxzWzNdID0gLTE7CisJCXZhbHNbNF0gPSAtMTsKKwkJdmFs c1s1XSA9IC0xOworCisJCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfbXVsdGlfcGFyYW0oNiwg aW5kZXgsIHZhbHMpOworCX0KKworCXdoaWxlICh0cnVlKQorCXsKKwkJaW50CQkJcHJvY2Vz c2VkX2RhdGFiYXNlcyA9IDA7CisKKwkJZm9yZWFjaF9wdHIoRGF0YUNoZWNrc3Vtc1dvcmtl ckRhdGFiYXNlLCBkYiwgRGF0YWJhc2VMaXN0KQorCQl7CisJCQlEYXRhQ2hlY2tzdW1zV29y a2VyUmVzdWx0IHJlc3VsdDsKKwkJCURhdGFDaGVja3N1bXNXb3JrZXJSZXN1bHRFbnRyeSAq ZW50cnk7CisJCQlib29sCQlmb3VuZDsKKworCQkJLyoKKwkJCSAqIENoZWNrIGlmIHRoaXMg ZGF0YWJhc2UgaGFzIGJlZW4gcHJvY2Vzc2VkIGFscmVhZHksIGFuZCBpZiBzbworCQkJICog d2hldGhlciBpdCBzaG91bGQgYmUgcmV0cmllZCBvciBza2lwcGVkLgorCQkJICovCisJCQll bnRyeSA9IChEYXRhQ2hlY2tzdW1zV29ya2VyUmVzdWx0RW50cnkgKikgaGFzaF9zZWFyY2go UHJvY2Vzc2VkRGF0YWJhc2VzLCAmZGItPmRib2lkLAorCQkJCQkJCQkJCQkJCQkJCSAgIEhB U0hfRklORCwgTlVMTCk7CisKKwkJCWlmIChlbnRyeSkKKwkJCXsKKwkJCQlpZiAoZW50cnkt PnJlc3VsdCA9PSBEQVRBQ0hFQ0tTVU1TV09SS0VSX1JFVFJZREIpCisJCQkJeworCQkJCQkv KgorCQkJCQkgKiBMaW1pdCB0aGUgbnVtYmVyIG9mIHJldHJpZXMgdG8gYXZvaWQgaW5maW5p dGUgbG9vcGluZworCQkJCQkgKiBpbiBjYXNlIHRoZXJlIHNpbXBseSB3b24ndCBiZSBlbm91 Z2ggd29ya2VycyBpbiB0aGUKKwkJCQkJICogY2x1c3RlciB0byBmaW5pc2ggdGhpcyBvcGVy YXRpb24uCisJCQkJCSAqLworCQkJCQlpZiAoZW50cnktPnJldHJpZXMgPiBEQVRBQ0hFQ0tT VU1TV09SS0VSX01BWF9EQl9SRVRSSUVTKQorCQkJCQkJZW50cnktPnJlc3VsdCA9IERBVEFD SEVDS1NVTVNXT1JLRVJfRkFJTEVEOworCQkJCX0KKworCQkJCS8qIFNraXAgaWYgdGhpcyBk YXRhYmFzZSBoYXMgYmVlbiBwcm9jZXNzZWQgYWxyZWFkeSAqLworCQkJCWlmIChlbnRyeS0+ cmVzdWx0ICE9IERBVEFDSEVDS1NVTVNXT1JLRVJfUkVUUllEQikKKwkJCQkJY29udGludWU7 CisJCQl9CisKKwkJCXJlc3VsdCA9IFByb2Nlc3NEYXRhYmFzZShkYik7CisJCQlwcm9jZXNz ZWRfZGF0YWJhc2VzKys7CisKKwkJCS8qCisJCQkgKiBVcGRhdGUgdGhlIG51bWJlciBvZiBw cm9jZXNzZWQgZGF0YWJhc2VzIGluIHRoZSBwcm9ncmVzcworCQkJICogcmVwb3J0LgorCQkJ ICovCisJCQlwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dSRVNTX0RBVEFDSEVD S1NVTVNfREJTX0RPTkUsCisJCQkJCQkJCQkJIHByb2Nlc3NlZF9kYXRhYmFzZXMpOworCisJ CQlpZiAocmVzdWx0ID09IERBVEFDSEVDS1NVTVNXT1JLRVJfU1VDQ0VTU0ZVTCkKKwkJCXsK KwkJCQkvKgorCQkJCSAqIElmIG9uZSBkYXRhYmFzZSBoYXMgY29tcGxldGVkIHNoYXJlZCBj YXRhbG9ncywgd2UgZG9uJ3QKKwkJCQkgKiBoYXZlIHRvIHByb2Nlc3MgdGhlbSBhZ2Fpbi4K KwkJCQkgKi8KKwkJCQlpZiAoRGF0YUNoZWNrc3Vtc1dvcmtlclNobWVtLT5wcm9jZXNzX3No YXJlZF9jYXRhbG9ncykKKwkJCQkJRGF0YUNoZWNrc3Vtc1dvcmtlclNobWVtLT5wcm9jZXNz X3NoYXJlZF9jYXRhbG9ncyA9IGZhbHNlOworCQkJfQorCQkJZWxzZSBpZiAocmVzdWx0ID09 IERBVEFDSEVDS1NVTVNXT1JLRVJfQUJPUlRFRCkKKwkJCXsKKwkJCQkvKiBBYm9ydCBmbGFn IHNldCwgc28gZXhpdCB0aGUgd2hvbGUgcHJvY2VzcyAqLworCQkJCXJldHVybiBmYWxzZTsK KwkJCX0KKworCQkJZW50cnkgPSBoYXNoX3NlYXJjaChQcm9jZXNzZWREYXRhYmFzZXMsICZk Yi0+ZGJvaWQsIEhBU0hfRU5URVIsICZmb3VuZCk7CisJCQllbnRyeS0+ZGJvaWQgPSBkYi0+ ZGJvaWQ7CisJCQllbnRyeS0+cmVzdWx0ID0gcmVzdWx0OworCQkJaWYgKCFmb3VuZCkKKwkJ CQllbnRyeS0+cmV0cmllcyA9IDA7CisJCQllbHNlCisJCQkJZW50cnktPnJldHJpZXMrKzsK KwkJfQorCisJCWVsb2coREVCVUcxLAorCQkJICIlaSBkYXRhYmFzZXMgcHJvY2Vzc2VkIGZv ciBkYXRhIGNoZWNrc3VtIGVuYWJsaW5nLCAlcyIsCisJCQkgcHJvY2Vzc2VkX2RhdGFiYXNl cywKKwkJCSAocHJvY2Vzc2VkX2RhdGFiYXNlcyA/ICJwcm9jZXNzIHdpdGggcmVzdGFydCIg OiAicHJvY2VzcyBjb21wbGV0ZWQiKSk7CisKKwkJRnJlZURhdGFiYXNlTGlzdChEYXRhYmFz ZUxpc3QpOworCisJCS8qCisJCSAqIElmIG5vIGRhdGFiYXNlcyB3ZXJlIHByb2Nlc3NlZCBp biB0aGlzIHJ1biBvZiB0aGUgbG9vcCwgd2UgaGF2ZSBub3cKKwkJICogZmluaXNoZWQgYWxs IGRhdGFiYXNlcyBhbmQgbm8gY29uY3VycmVudGx5IGNyZWF0ZWQgb25lcyBjYW4gZXhpc3Qu CisJCSAqLworCQlpZiAocHJvY2Vzc2VkX2RhdGFiYXNlcyA9PSAwKQorCQkJYnJlYWs7CisK KwkJLyoKKwkJICogUmUtZ2VuZXJhdGUgdGhlIGxpc3Qgb2YgZGF0YWJhc2VzIGZvciBhbm90 aGVyIHBhc3MuIFNpbmNlIHdlIHdhaXQKKwkJICogZm9yIGFsbCBwcmUtZXhpc3RpbmcgdHJh bnNhY3Rpb25zIGZpbmlzaCwgdGhpcyB3YXkgd2UgY2FuIGJlCisJCSAqIGNlcnRhaW4gdGhh dCB0aGVyZSBhcmUgbm8gZGF0YWJhc2VzIGxlZnQgd2l0aG91dCBjaGVja3N1bXMuCisJCSAq LworCQlXYWl0Rm9yQWxsVHJhbnNhY3Rpb25zVG9GaW5pc2goKTsKKwkJRGF0YWJhc2VMaXN0 ID0gQnVpbGREYXRhYmFzZUxpc3QoKTsKKwl9CisKKwkvKgorCSAqIFByb2Nlc3NlZERhdGFi YXNlcyBub3cgaGFzIGFsbCBkYXRhYmFzZXMgYW5kIHRoZSByZXN1bHRzIG9mIHRoZWlyCisJ ICogcHJvY2Vzc2luZy4gRmFpbHVyZSB0byBlbmFibGUgY2hlY2tzdW1zIGZvciBhIGRhdGFi YXNlIGNhbiBiZSBiZWNhdXNlCisJICogdGhleSBhY3R1YWxseSBmYWlsZWQgZm9yIHNvbWUg cmVhc29uLCBvciBiZWNhdXNlIHRoZSBkYXRhYmFzZSB3YXMKKwkgKiBkcm9wcGVkIGJldHdl ZW4gdXMgZ2V0dGluZyB0aGUgZGF0YWJhc2UgbGlzdCBhbmQgdHJ5aW5nIHRvIHByb2Nlc3Mg aXQuCisJICogR2V0IGEgZnJlc2ggbGlzdCBvZiBkYXRhYmFzZXMgdG8gZGV0ZWN0IHRoZSBz ZWNvbmQgY2FzZSB3aGVyZSB0aGUKKwkgKiBkYXRhYmFzZSB3YXMgZHJvcHBlZCBiZWZvcmUg d2UgaGFkIHN0YXJ0ZWQgcHJvY2Vzc2luZyBpdC4gSWYgYSBkYXRhYmFzZQorCSAqIHN0aWxs IGV4aXN0cywgYnV0IGVuYWJsaW5nIGNoZWNrc3VtcyBmYWlsZWQgdGhlbiB3ZSBmYWlsIHRo ZSBlbnRpcmUKKwkgKiBjaGVja3N1bW1pbmcgcHJvY2VzcyBhbmQgZXhpdCB3aXRoIGFuIGVy cm9yLgorCSAqLworCVdhaXRGb3JBbGxUcmFuc2FjdGlvbnNUb0ZpbmlzaCgpOworCURhdGFi YXNlTGlzdCA9IEJ1aWxkRGF0YWJhc2VMaXN0KCk7CisKKwlmb3JlYWNoX3B0cihEYXRhQ2hl Y2tzdW1zV29ya2VyRGF0YWJhc2UsIGRiLCBEYXRhYmFzZUxpc3QpCisJeworCQlEYXRhQ2hl Y2tzdW1zV29ya2VyUmVzdWx0ICplbnRyeTsKKwkJYm9vbAkJZm91bmQ7CisKKwkJZW50cnkg PSBoYXNoX3NlYXJjaChQcm9jZXNzZWREYXRhYmFzZXMsICh2b2lkICopICZkYi0+ZGJvaWQs CisJCQkJCQkJSEFTSF9GSU5ELCAmZm91bmQpOworCisJCS8qCisJCSAqIFdlIGFyZSBvbmx5 IGludGVyZXN0ZWQgaW4gdGhlIGRhdGFiYXNlcyB3aGVyZSB0aGUgZmFpbGVkIGRhdGFiYXNl CisJCSAqIHN0aWxsIGV4aXN0cy4KKwkJICovCisJCWlmIChmb3VuZCAmJiAqZW50cnkgPT0g REFUQUNIRUNLU1VNU1dPUktFUl9GQUlMRUQpCisJCXsKKwkJCWVyZXBvcnQoV0FSTklORywK KwkJCQkJKGVycm1zZygiZmFpbGVkIHRvIGVuYWJsZSBkYXRhIGNoZWNrc3VtcyBpbiBcIiVz XCIiLAorCQkJCQkJCWRiLT5kYm5hbWUpKSk7CisJCQlmb3VuZF9mYWlsZWQgPSBmb3VuZDsK KwkJCWNvbnRpbnVlOworCQl9CisJfQorCisJRnJlZURhdGFiYXNlTGlzdChEYXRhYmFzZUxp c3QpOworCisJaWYgKGZvdW5kX2ZhaWxlZCkKKwl7CisJCS8qIERpc2FibGUgY2hlY2tzdW1z IG9uIGNsdXN0ZXIsIGJlY2F1c2Ugd2UgZmFpbGVkICovCisJCVNldERhdGFDaGVja3N1bXNP ZmYoKTsKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJybXNnKCJkYXRhIGNoZWNrc3VtcyBm YWlsZWQgdG8gZ2V0IGVuYWJsZWQgaW4gYWxsIGRhdGFiYXNlcywgYWJvcnRpbmciKSwKKwkJ CQkgZXJyaGludCgiVGhlIHNlcnZlciBsb2cgbWlnaHQgaGF2ZSBtb3JlIGluZm9ybWF0aW9u IG9uIHRoZSBjYXVzZSBvZiB0aGUgZXJyb3IuIikpKTsKKwl9CisKKwkvKgorCSAqIFdoZW4g ZW5hYmxpbmcgY2hlY2tzdW1zLCB3ZSBoYXZlIHRvIHdhaXQgZm9yIGEgY2hlY2twb2ludCBm b3IgdGhlCisJICogY2hlY2tzdW1zIHRvIGNoYW5nZSBmcm9tIGluLXByb2dyZXNzIHRvIG9u LgorCSAqLworCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1NfREFUQUNI RUNLU1VNU19QSEFTRSwKKwkJCQkJCQkJIFBST0dSRVNTX0RBVEFDSEVDS1NVTVNfUEhBU0Vf V0FJVElOR19DSEVDS1BPSU5UKTsKKworCS8qCisJICogRm9yY2UgYSBjaGVja3BvaW50IHRv IGdldCBldmVyeXRoaW5nIG91dCB0byBkaXNrLiBUaGUgdXNlIG9mIGltbWVkaWF0ZQorCSAq IGNoZWNrcG9pbnRzIGlzIGZvciBydW5uaW5nIHRlc3RzLCBhcyB0aGV5IHdvdWxkIG90aGVy d2lzZSBub3QgZXhlY3V0ZQorCSAqIGluIHN1Y2ggYSB3YXkgdGhhdCB0aGV5IGNhbiByZWxp YWJseSBiZSBwbGFjZWQgdW5kZXIgdGltZW91dCBjb250cm9sLgorCSAqLworCWZsYWdzID0g Q0hFQ0tQT0lOVF9GT1JDRSB8IENIRUNLUE9JTlRfV0FJVDsKKwlpZiAoaW1tZWRpYXRlX2No ZWNrcG9pbnQpCisJCWZsYWdzID0gZmxhZ3MgfCBDSEVDS1BPSU5UX0lNTUVESUFURTsKKwlS ZXF1ZXN0Q2hlY2twb2ludChmbGFncyk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAq IERhdGFDaGVja3N1bXNXb3JrZXJTaG1lbVNpemUKKyAqCQlDb21wdXRlIHJlcXVpcmVkIHNw YWNlIGZvciBkYXRhY2hlY2tzdW1zd29ya2VyLXJlbGF0ZWQgc2hhcmVkIG1lbW9yeQorICov CitTaXplCitEYXRhQ2hlY2tzdW1zV29ya2VyU2htZW1TaXplKHZvaWQpCit7CisJU2l6ZQkJ c2l6ZTsKKworCXNpemUgPSBzaXplb2YoRGF0YUNoZWNrc3Vtc1dvcmtlclNobWVtU3RydWN0 KTsKKwlzaXplID0gTUFYQUxJR04oc2l6ZSk7CisKKwlyZXR1cm4gc2l6ZTsKK30KKworLyoK KyAqIERhdGFDaGVja3N1bXNXb3JrZXJTaG1lbUluaXQKKyAqCQlBbGxvY2F0ZSBhbmQgaW5p dGlhbGl6ZSBkYXRhY2hlY2tzdW1zd29ya2VyLXJlbGF0ZWQgc2hhcmVkIG1lbW9yeQorICov Cit2b2lkCitEYXRhQ2hlY2tzdW1zV29ya2VyU2htZW1Jbml0KHZvaWQpCit7CisJYm9vbAkJ Zm91bmQ7CisKKwlEYXRhQ2hlY2tzdW1zV29ya2VyU2htZW0gPSAoRGF0YUNoZWNrc3Vtc1dv cmtlclNobWVtU3RydWN0ICopCisJCVNobWVtSW5pdFN0cnVjdCgiRGF0YUNoZWNrc3Vtc1dv cmtlciBEYXRhIiwKKwkJCQkJCURhdGFDaGVja3N1bXNXb3JrZXJTaG1lbVNpemUoKSwKKwkJ CQkJCSZmb3VuZCk7CisKKwlpZiAoIWZvdW5kKQorCXsKKwkJTWVtU2V0KERhdGFDaGVja3N1 bXNXb3JrZXJTaG1lbSwgMCwgRGF0YUNoZWNrc3Vtc1dvcmtlclNobWVtU2l6ZSgpKTsKKwor CQkvKgorCQkgKiBFdmVuIGlmIHRoaXMgaXMgYSByZWR1bmRhbnQgYXNzaWdubWVudCwgd2Ug d2FudCB0byBiZSBleHBsaWNpdAorCQkgKiBhYm91dCBvdXIgaW50ZW50IGZvciByZWFkYWJp bGl0eSwgc2luY2Ugd2Ugd2FudCB0byBiZSBhYmxlIHRvIHF1ZXJ5CisJCSAqIHRoaXMgc3Rh dGUgaW4gY2FzZSBvZiByZXN0YXJ0YWJpbGl0eS4KKwkJICovCisJCURhdGFDaGVja3N1bXNX b3JrZXJTaG1lbS0+bGF1bmNoX2VuYWJsZV9jaGVja3N1bXMgPSBmYWxzZTsKKwkJRGF0YUNo ZWNrc3Vtc1dvcmtlclNobWVtLT5sYXVuY2hlcl9ydW5uaW5nID0gZmFsc2U7CisJCURhdGFD aGVja3N1bXNXb3JrZXJTaG1lbS0+bGF1bmNoX2Zhc3QgPSBmYWxzZTsKKwl9Cit9CisKKy8q CisgKiBCdWlsZERhdGFiYXNlTGlzdAorICoJCUNvbXBpbGUgYSBsaXN0IG9mIGFsbCBjdXJy ZW50bHkgYXZhaWxhYmxlIGRhdGFiYXNlcyBpbiB0aGUgY2x1c3RlcgorICoKKyAqIFRoaXMg Y3JlYXRlcyB0aGUgbGlzdCBvZiBkYXRhYmFzZXMgZm9yIHRoZSBkYXRhY2hlY2tzdW1zd29y a2VyIHdvcmtlcnMgdG8KKyAqIGFkZCBjaGVja3N1bXMgdG8uIElmIHRoZSBjYWxsZXIgd2Fu dHMgdG8gZW5zdXJlIHRoYXQgbm8gY29uY3VycmVudGx5CisgKiBydW5uaW5nIENSRUFURSBE QVRBQkFTRSBjYWxscyBleGlzdCwgdGhpcyBuZWVkcyB0byBiZSBwcmVjZWRlZCBieSBhIGNh bGwKKyAqIHRvIFdhaXRGb3JBbGxUcmFuc2FjdGlvbnNUb0ZpbmlzaCgpLgorICovCitzdGF0 aWMgTGlzdCAqCitCdWlsZERhdGFiYXNlTGlzdCh2b2lkKQoreworCUxpc3QJICAgKkRhdGFi YXNlTGlzdCA9IE5JTDsKKwlSZWxhdGlvbglyZWw7CisJVGFibGVTY2FuRGVzYyBzY2FuOwor CUhlYXBUdXBsZQl0dXA7CisJTWVtb3J5Q29udGV4dCBjdHggPSBDdXJyZW50TWVtb3J5Q29u dGV4dDsKKwlNZW1vcnlDb250ZXh0IG9sZGN0eDsKKworCVN0YXJ0VHJhbnNhY3Rpb25Db21t YW5kKCk7CisKKwlyZWwgPSB0YWJsZV9vcGVuKERhdGFiYXNlUmVsYXRpb25JZCwgQWNjZXNz U2hhcmVMb2NrKTsKKwlzY2FuID0gdGFibGVfYmVnaW5zY2FuX2NhdGFsb2cocmVsLCAwLCBO VUxMKTsKKworCXdoaWxlIChIZWFwVHVwbGVJc1ZhbGlkKHR1cCA9IGhlYXBfZ2V0bmV4dChz Y2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbikpKQorCXsKKwkJRm9ybV9wZ19kYXRhYmFzZSBw Z2RiID0gKEZvcm1fcGdfZGF0YWJhc2UpIEdFVFNUUlVDVCh0dXApOworCQlEYXRhQ2hlY2tz dW1zV29ya2VyRGF0YWJhc2UgKmRiOworCisJCW9sZGN0eCA9IE1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhjdHgpOworCisJCWRiID0gKERhdGFDaGVja3N1bXNXb3JrZXJEYXRhYmFzZSAqKSBw YWxsb2MwKHNpemVvZihEYXRhQ2hlY2tzdW1zV29ya2VyRGF0YWJhc2UpKTsKKworCQlkYi0+ ZGJvaWQgPSBwZ2RiLT5vaWQ7CisJCWRiLT5kYm5hbWUgPSBwc3RyZHVwKE5hbWVTdHIocGdk Yi0+ZGF0bmFtZSkpOworCisJCURhdGFiYXNlTGlzdCA9IGxhcHBlbmQoRGF0YWJhc2VMaXN0 LCBkYik7CisKKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN0eCk7CisJfQorCisJdGFi bGVfZW5kc2NhbihzY2FuKTsKKwl0YWJsZV9jbG9zZShyZWwsIEFjY2Vzc1NoYXJlTG9jayk7 CisKKwlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKworCXJldHVybiBEYXRhYmFzZUxp c3Q7Cit9CisKK3N0YXRpYyB2b2lkCitGcmVlRGF0YWJhc2VMaXN0KExpc3QgKmRibGlzdCkK K3sKKwlpZiAoIWRibGlzdCkKKwkJcmV0dXJuOworCisJZm9yZWFjaF9wdHIoRGF0YUNoZWNr c3Vtc1dvcmtlckRhdGFiYXNlLCBkYiwgZGJsaXN0KQorCXsKKwkJaWYgKGRiLT5kYm5hbWUg IT0gTlVMTCkKKwkJCXBmcmVlKGRiLT5kYm5hbWUpOworCX0KKworCWxpc3RfZnJlZV9kZWVw KGRibGlzdCk7Cit9CisKKy8qCisgKiBCdWlsZFJlbGF0aW9uTGlzdAorICoJCUNvbXBpbGUg YSBsaXN0IG9mIHJlbGF0aW9ucyBpbiB0aGUgZGF0YWJhc2UKKyAqCisgKiBSZXR1cm5zIGEg bGlzdCBvZiBPSURzIGZvciB0aGUgcmVxdWVzdCByZWxhdGlvbiB0eXBlcy4gSWYgdGVtcF9y ZWxhdGlvbnMKKyAqIGlzIFRydWUgdGhlbiBvbmx5IHRlbXBvcmFyeSByZWxhdGlvbnMgYXJl IHJldHVybmVkLiBJZiB0ZW1wX3JlbGF0aW9ucyBpcworICogRmFsc2UgdGhlbiBub24tdGVt cG9yYXJ5IHJlbGF0aW9ucyB3aGljaCBoYXZlIGRhdGEgY2hlY2tzdW1zIGFyZSByZXR1cm5l ZC4KKyAqIElmIGluY2x1ZGVfc2hhcmVkIGlzIFRydWUgdGhlbiBzaGFyZWQgcmVsYXRpb25z IGFyZSBpbmNsdWRlZCBhcyB3ZWxsIGluIGEKKyAqIG5vbi10ZW1wb3JhcnkgbGlzdC4gaW5j bHVkZV9zaGFyZWQgaGFzIG5vIHJlbGV2YW5jZSB3aGVuIGJ1aWxkaW5nIGEgbGlzdCBvZgor ICogdGVtcG9yYXJ5IHJlbGF0aW9ucy4KKyAqLworc3RhdGljIExpc3QgKgorQnVpbGRSZWxh dGlvbkxpc3QoYm9vbCB0ZW1wX3JlbGF0aW9ucywgYm9vbCBpbmNsdWRlX3NoYXJlZCkKK3sK KwlMaXN0CSAgICpSZWxhdGlvbkxpc3QgPSBOSUw7CisJUmVsYXRpb24JcmVsOworCVRhYmxl U2NhbkRlc2Mgc2NhbjsKKwlIZWFwVHVwbGUJdHVwOworCU1lbW9yeUNvbnRleHQgY3R4ID0g Q3VycmVudE1lbW9yeUNvbnRleHQ7CisJTWVtb3J5Q29udGV4dCBvbGRjdHg7CisKKwlTdGFy dFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCisJcmVsID0gdGFibGVfb3BlbihSZWxhdGlvblJl bGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJc2NhbiA9IHRhYmxlX2JlZ2luc2Nhbl9j YXRhbG9nKHJlbCwgMCwgTlVMTCk7CisKKwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZCh0dXAg PSBoZWFwX2dldG5leHQoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24pKSkKKwl7CisJCUZv cm1fcGdfY2xhc3MgcGdjID0gKEZvcm1fcGdfY2xhc3MpIEdFVFNUUlVDVCh0dXApOworCisJ CS8qCisJCSAqIE9ubHkgaW5jbHVkZSB0ZW1wb3JhcnkgcmVsYXRpb25zIHdoZW4gYXNrZWQg Zm9yIGEgdGVtcCByZWxhdGlvbgorCQkgKiBsaXN0LgorCQkgKi8KKwkJaWYgKHBnYy0+cmVs cGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCkKKwkJeworCQkJaWYgKCF0ZW1w X3JlbGF0aW9ucykKKwkJCQljb250aW51ZTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qCisJ CQkgKiBJZiB3ZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIHRlbXAgcmVsYXRpb25zIHRoZW4g Y29udGludWUKKwkJCSAqIGltbWVkaWF0ZWx5IGFzIHRoZSBjdXJyZW50IHJlbGF0aW9uIGlz bid0IGEgdGVtcCByZWxhdGlvbi4KKwkJCSAqLworCQkJaWYgKHRlbXBfcmVsYXRpb25zKQor CQkJCWNvbnRpbnVlOworCisJCQlpZiAoIVJFTEtJTkRfSEFTX1NUT1JBR0UocGdjLT5yZWxr aW5kKSkKKwkJCQljb250aW51ZTsKKworCQkJaWYgKHBnYy0+cmVsaXNzaGFyZWQgJiYgIWlu Y2x1ZGVfc2hhcmVkKQorCQkJCWNvbnRpbnVlOworCQl9CisKKwkJb2xkY3R4ID0gTWVtb3J5 Q29udGV4dFN3aXRjaFRvKGN0eCk7CisJCVJlbGF0aW9uTGlzdCA9IGxhcHBlbmRfb2lkKFJl bGF0aW9uTGlzdCwgcGdjLT5vaWQpOworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3R4 KTsKKwl9CisKKwl0YWJsZV9lbmRzY2FuKHNjYW4pOworCXRhYmxlX2Nsb3NlKHJlbCwgQWNj ZXNzU2hhcmVMb2NrKTsKKworCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCisJcmV0 dXJuIFJlbGF0aW9uTGlzdDsKK30KKworLyoKKyAqIERhdGFDaGVja3N1bXNXb3JrZXJNYWlu CisgKgorICogTWFpbiBmdW5jdGlvbiBmb3IgZW5hYmxpbmcgY2hlY2tzdW1zIGluIGEgc2lu Z2xlIGRhdGFiYXNlLCBUaGlzIGlzIHRoZQorICogZnVuY3Rpb24gc2V0IGFzIHRoZSBiZ3df ZnVuY3Rpb25fbmFtZSBpbiB0aGUgZHluYW1pYyBiYWNrZ3JvdW5kIHdvcmtlcgorICogcHJv Y2VzcyBpbml0aWF0ZWQgZm9yIGVhY2ggZGF0YWJhc2UgYnkgdGhlIHdvcmtlciBsYXVuY2hl ci4gQWZ0ZXIgZW5hYmxpbmcKKyAqIGRhdGEgY2hlY2tzdW1zIGluIGVhY2ggYXBwbGljYWJs ZSByZWxhdGlvbiBpbiB0aGUgZGF0YWJhc2UsIGl0IHdpbGwgd2FpdCBmb3IKKyAqIGFsbCB0 ZW1wb3JhcnkgcmVsYXRpb25zIHRoYXQgd2VyZSBwcmVzZW50IHdoZW4gdGhlIGZ1bmN0aW9u IHN0YXJ0ZWQgdG8KKyAqIGRpc2FwcGVhciBiZWZvcmUgcmV0dXJuaW5nLiBUaGlzIGlzIHJl cXVpcmVkIHNpbmNlIHdlIGNhbm5vdCByZXdyaXRlCisgKiBleGlzdGluZyB0ZW1wb3Jhcnkg cmVsYXRpb25zIHdpdGggZGF0YSBjaGVja3N1bXMuCisgKi8KK3ZvaWQKK0RhdGFDaGVja3N1 bXNXb3JrZXJNYWluKERhdHVtIGFyZykKK3sKKwlPaWQJCQlkYm9pZCA9IERhdHVtR2V0T2Jq ZWN0SWQoYXJnKTsKKwlMaXN0CSAgICpSZWxhdGlvbkxpc3QgPSBOSUw7CisJTGlzdAkgICAq SW5pdGlhbFRlbXBUYWJsZUxpc3QgPSBOSUw7CisJQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3Ry YXRlZ3k7CisJYm9vbAkJYWJvcnRlZCA9IGZhbHNlOworCWludDY0CQlyZWxzX2RvbmU7CisK KwllbmFibGluZ19jaGVja3N1bXMgPSB0cnVlOworCisJcHFzaWduYWwoU0lHVEVSTSwgZGll KTsKKworCUJhY2tncm91bmRXb3JrZXJVbmJsb2NrU2lnbmFscygpOworCisJTXlCYWNrZW5k VHlwZSA9IEJfREFUQUNIRUNLU1VNU1dPUktFUl9XT1JLRVI7CisJaW5pdF9wc19kaXNwbGF5 KE5VTEwpOworCisJQmFja2dyb3VuZFdvcmtlckluaXRpYWxpemVDb25uZWN0aW9uQnlPaWQo ZGJvaWQsIEludmFsaWRPaWQsCisJCQkJCQkJCQkJCSAgQkdXT1JLRVJfQllQQVNTX0FMTE9X Q09OTik7CisKKwkvKiB3b3JrZXIgd2lsbCBoYXZlIGEgc2VwYXJhdGUgZW50cnkgaW4gcGdf c3RhdF9wcm9ncmVzc19kYXRhX2NoZWNrc3VtcyAqLworCXBnc3RhdF9wcm9ncmVzc19zdGFy dF9jb21tYW5kKFBST0dSRVNTX0NPTU1BTkRfREFUQUNIRUNLU1VNUywKKwkJCQkJCQkJICBJ bnZhbGlkT2lkKTsKKworCS8qCisJICogR2V0IGEgbGlzdCBvZiBhbGwgdGVtcCB0YWJsZXMg cHJlc2VudCBhcyB3ZSBzdGFydCBpbiB0aGlzIGRhdGFiYXNlLiBXZQorCSAqIG5lZWQgdG8g d2FpdCB1bnRpbCB0aGV5IGFyZSBhbGwgZ29uZSB1bnRpbCB3ZSBhcmUgZG9uZSwgc2luY2Ug d2UgY2Fubm90CisJICogYWNjZXNzIHRoZXNlIHJlbGF0aW9ucyBhbmQgbW9kaWZ5IHRoZW0u CisJICovCisJSW5pdGlhbFRlbXBUYWJsZUxpc3QgPSBCdWlsZFJlbGF0aW9uTGlzdCh0cnVl LCBmYWxzZSk7CisKKwkvKgorCSAqIEVuYWJsZSB2YWN1dW0gY29zdCBkZWxheSwgaWYgYW55 LgorCSAqLworCUFzc2VydChEYXRhQ2hlY2tzdW1zV29ya2VyU2htZW0tPmVuYWJsaW5nX2No ZWNrc3Vtcyk7CisJVmFjdXVtQ29zdERlbGF5ID0gRGF0YUNoZWNrc3Vtc1dvcmtlclNobWVt LT5jb3N0X2RlbGF5OworCVZhY3V1bUNvc3RMaW1pdCA9IERhdGFDaGVja3N1bXNXb3JrZXJT aG1lbS0+Y29zdF9saW1pdDsKKwlWYWN1dW1Db3N0QWN0aXZlID0gKFZhY3V1bUNvc3REZWxh eSA+IDApOworCVZhY3V1bUNvc3RCYWxhbmNlID0gMDsKKwlWYWN1dW1Db3N0UGFnZUhpdCA9 IDA7CisJVmFjdXVtQ29zdFBhZ2VNaXNzID0gMDsKKwlWYWN1dW1Db3N0UGFnZURpcnR5ID0g MDsKKworCS8qCisJICogQ3JlYXRlIGFuZCBzZXQgdGhlIHZhY3V1bSBzdHJhdGVneSBhcyBv dXIgYnVmZmVyIHN0cmF0ZWd5LgorCSAqLworCXN0cmF0ZWd5ID0gR2V0QWNjZXNzU3RyYXRl Z3koQkFTX1ZBQ1VVTSk7CisKKwlSZWxhdGlvbkxpc3QgPSBCdWlsZFJlbGF0aW9uTGlzdChm YWxzZSwKKwkJCQkJCQkJCSBEYXRhQ2hlY2tzdW1zV29ya2VyU2htZW0tPnByb2Nlc3Nfc2hh cmVkX2NhdGFsb2dzKTsKKworCS8qIFVwZGF0ZSB0aGUgdG90YWwgbnVtYmVyIG9mIHJlbGF0 aW9ucyB0byBiZSBwcm9jZXNzZWQgaW4gdGhpcyBEQi4gKi8KKwl7CisJCWNvbnN0IGludAlp bmRleFtdID0geworCQkJUFJPR1JFU1NfREFUQUNIRUNLU1VNU19SRUxTX1RPVEFMLAorCQkJ UFJPR1JFU1NfREFUQUNIRUNLU1VNU19SRUxTX0RPTkUKKwkJfTsKKworCQlpbnQ2NAkJdmFs c1syXTsKKworCQl2YWxzWzBdID0gbGlzdF9sZW5ndGgoUmVsYXRpb25MaXN0KTsKKwkJdmFs c1sxXSA9IDA7CisKKwkJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9tdWx0aV9wYXJhbSgyLCBp bmRleCwgdmFscyk7CisJfQorCisJLyogcHJvY2VzcyB0aGUgcmVsYXRpb25zICovCisJcmVs c19kb25lID0gMDsKKwlmb3JlYWNoX29pZChyZWxvaWQsIFJlbGF0aW9uTGlzdCkKKwl7CisJ CWlmICghUHJvY2Vzc1NpbmdsZVJlbGF0aW9uQnlPaWQocmVsb2lkLCBzdHJhdGVneSkpCisJ CXsKKwkJCWFib3J0ZWQgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKworCQlwZ3N0YXRfcHJv Z3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dSRVNTX0RBVEFDSEVDS1NVTVNfUkVMU19ET05FLAor CQkJCQkJCQkJICsrcmVsc19kb25lKTsKKwl9CisJbGlzdF9mcmVlKFJlbGF0aW9uTGlzdCk7 CisKKwlpZiAoYWJvcnRlZCkKKwl7CisJCURhdGFDaGVja3N1bXNXb3JrZXJTaG1lbS0+c3Vj Y2VzcyA9IERBVEFDSEVDS1NVTVNXT1JLRVJfQUJPUlRFRDsKKwkJZXJlcG9ydChERUJVRzEs CisJCQkJKGVycm1zZygiZGF0YSBjaGVja3N1bSBwcm9jZXNzaW5nIGFib3J0ZWQgaW4gZGF0 YWJhc2UgT0lEICV1IiwKKwkJCQkJCWRib2lkKSkpOworCQlyZXR1cm47CisJfQorCisJLyog VGhlIHdvcmtlciBpcyBhYm91dCB0byB3YWl0IGZvciB0ZW1wb3JhcnkgdGFibGVzIHRvIGdv IGF3YXkuICovCisJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVTU19EQVRB Q0hFQ0tTVU1TX1BIQVNFLAorCQkJCQkJCQkgUFJPR1JFU1NfREFUQUNIRUNLU1VNU19QSEFT RV9XQUlUSU5HX1RFTVBSRUwpOworCisJLyoKKwkgKiBXYWl0IGZvciBhbGwgdGVtcCB0YWJs ZXMgdGhhdCBleGlzdGVkIHdoZW4gd2Ugc3RhcnRlZCB0byBnbyBhd2F5LiBUaGlzCisJICog aXMgbmVjZXNzYXJ5IHNpbmNlIHdlIGNhbm5vdCAicmVhY2giIHRoZW0gdG8gZW5hYmxlIGNo ZWNrc3Vtcy4gQW55IHRlbXAKKwkgKiB0YWJsZXMgY3JlYXRlZCBhZnRlciB3ZSBzdGFydGVk IHdpbGwgYWxyZWFkeSBoYXZlIGNoZWNrc3VtcyBpbiB0aGVtCisJICogKGR1ZSB0byB0aGUg ImlucHJvZ3Jlc3Mtb24iIHN0YXRlKSwgc28gbm8gbmVlZCB0byB3YWl0IGZvciB0aG9zZS4K KwkgKi8KKwlmb3IgKDs7KQorCXsKKwkJTGlzdAkgICAqQ3VycmVudFRlbXBUYWJsZXM7CisJ CWludAkJCW51bWxlZnQ7CisJCWNoYXIJCWFjdGl2aXR5WzY0XTsKKworCQlDdXJyZW50VGVt cFRhYmxlcyA9IEJ1aWxkUmVsYXRpb25MaXN0KHRydWUsIGZhbHNlKTsKKwkJbnVtbGVmdCA9 IDA7CisJCWZvcmVhY2hfb2lkKHRtcHRibG9pZCwgSW5pdGlhbFRlbXBUYWJsZUxpc3QpCisJ CXsKKwkJCWlmIChsaXN0X21lbWJlcl9vaWQoQ3VycmVudFRlbXBUYWJsZXMsIHRtcHRibG9p ZCkpCisJCQkJbnVtbGVmdCsrOworCQl9CisJCWxpc3RfZnJlZShDdXJyZW50VGVtcFRhYmxl cyk7CisKKwkJaWYgKG51bWxlZnQgPT0gMCkKKwkJCWJyZWFrOworCisJCS8qCisJCSAqIEF0 IGxlYXN0IG9uZSB0ZW1wIHRhYmxlIGlzIGxlZnQgdG8gd2FpdCBmb3IsIGluZGljYXRlIGlu IHBnc3RhdAorCQkgKiBhY3Rpdml0eSBhbmQgcHJvZ3Jlc3MgcmVwb3J0aW5nLgorCQkgKi8K KwkJc25wcmludGYoYWN0aXZpdHksCisJCQkJIHNpemVvZihhY3Rpdml0eSksCisJCQkJICJX YWl0aW5nIGZvciAlZCB0ZW1wIHRhYmxlcyB0byBiZSByZW1vdmVkIiwgbnVtbGVmdCk7CisJ CXBnc3RhdF9yZXBvcnRfYWN0aXZpdHkoU1RBVEVfUlVOTklORywgYWN0aXZpdHkpOworCisJ CS8qIFJldHJ5IGV2ZXJ5IDUgc2Vjb25kcyAqLworCQlSZXNldExhdGNoKE15TGF0Y2gpOwor CQkodm9pZCkgV2FpdExhdGNoKE15TGF0Y2gsCisJCQkJCQkgV0xfTEFUQ0hfU0VUIHwgV0xf VElNRU9VVCB8IFdMX0VYSVRfT05fUE1fREVBVEgsCisJCQkJCQkgNTAwMCwKKwkJCQkJCSBX QUlUX0VWRU5UX0NIRUNLU1VNX0VOQUJMRV9GSU5JU0hDT05ESVRJT04pOworCisJCUxXTG9j a0FjcXVpcmUoRGF0YUNoZWNrc3Vtc1dvcmtlckxvY2ssIExXX0VYQ0xVU0lWRSk7CisJCWFi b3J0ZWQgPSBEYXRhQ2hlY2tzdW1zV29ya2VyU2htZW0tPmxhdW5jaF9lbmFibGVfY2hlY2tz dW1zICE9IGVuYWJsaW5nX2NoZWNrc3VtczsKKwkJTFdMb2NrUmVsZWFzZShEYXRhQ2hlY2tz dW1zV29ya2VyTG9jayk7CisKKwkJaWYgKGFib3J0ZWQgfHwgYWJvcnRfcmVxdWVzdGVkKQor CQl7CisJCQlEYXRhQ2hlY2tzdW1zV29ya2VyU2htZW0tPnN1Y2Nlc3MgPSBEQVRBQ0hFQ0tT VU1TV09SS0VSX0FCT1JURUQ7CisJCQllcmVwb3J0KERFQlVHMSwKKwkJCQkJKGVycm1zZygi ZGF0YSBjaGVja3N1bSBwcm9jZXNzaW5nIGFib3J0ZWQgaW4gZGF0YWJhc2UgT0lEICV1IiwK KwkJCQkJCQlkYm9pZCkpKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCWxpc3RfZnJlZShJ bml0aWFsVGVtcFRhYmxlTGlzdCk7CisKKwkvKiB3b3JrZXIgZG9uZSAqLworCXBnc3RhdF9w cm9ncmVzc19lbmRfY29tbWFuZCgpOworCisJRGF0YUNoZWNrc3Vtc1dvcmtlclNobWVtLT5z dWNjZXNzID0gREFUQUNIRUNLU1VNU1dPUktFUl9TVUNDRVNTRlVMOworfQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9sYXVuY2hfYmFja2VuZC5jIGIvc3JjL2JhY2tl bmQvcG9zdG1hc3Rlci9sYXVuY2hfYmFja2VuZC5jCmluZGV4IDc3ZmI4NzdkYmFkLi42NWJi Zjc3MGQyOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9sYXVuY2hfYmFj a2VuZC5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvbGF1bmNoX2JhY2tlbmQuYwpA QCAtMjAyLDYgKzIwMiw5IEBAIHN0YXRpYyBjaGlsZF9wcm9jZXNzX2tpbmQgY2hpbGRfcHJv Y2Vzc19raW5kc1tdID0gewogCVtCX1dBTF9TVU1NQVJJWkVSXSA9IHsid2FsX3N1bW1hcml6 ZXIiLCBXYWxTdW1tYXJpemVyTWFpbiwgdHJ1ZX0sCiAJW0JfV0FMX1dSSVRFUl0gPSB7Indh bF93cml0ZXIiLCBXYWxXcml0ZXJNYWluLCB0cnVlfSwKIAorCVtCX0RBVEFDSEVDS1NVTVNX T1JLRVJfTEFVTkNIRVJdID0geyJkYXRhY2hlY2tzdW0gbGF1bmNoZXIiLCBOVUxMLCBmYWxz ZX0sCisJW0JfREFUQUNIRUNLU1VNU1dPUktFUl9XT1JLRVJdID0geyJkYXRhY2hlY2tzdW0g d29ya2VyIiwgTlVMTCwgZmFsc2V9LAorCiAJW0JfTE9HR0VSXSA9IHsic3lzbG9nZ2VyIiwg U3lzTG9nZ2VyTWFpbiwgZmFsc2V9LAogfTsKIApAQCAtMjgyLDYgKzI4NSwxNiBAQCBwb3N0 bWFzdGVyX2NoaWxkX2xhdW5jaChCYWNrZW5kVHlwZSBjaGlsZF90eXBlLCBpbnQgY2hpbGRf c2xvdCwKIAkJCW1lbWNweShNeUNsaWVudFNvY2tldCwgY2xpZW50X3NvY2ssIHNpemVvZihD bGllbnRTb2NrZXQpKTsKIAkJfQogCisJCS8qCisJCSAqIHVwZGF0ZSB0aGUgTG9jYWxQcm9j ZXNzQ29udHJvbEZpbGUgdG8gbWF0Y2ggWExvZ0N0bC0+ZGF0YV9jaGVja3N1bV92ZXJzaW9u CisJCSAqCisJCSAqIFhYWCBJdCBzZWVtcyB0aGUgcG9zdG1hc3RlciAod2hpY2ggaXMgd2hh dCBnZXRzIGZvcmtlZCBpbnRvIHRoZSBuZXcKKwkJICogY2hpbGQgcHJvY2VzcykgZG9lcyBu b3QgYWJzb3JiIHRoZSBjaGVja3N1bSBiYXJyaWVycywgdGhlcmVmb3JlIGl0CisJCSAqIGRv ZXMgbm90IHVwZGF0ZSB0aGUgdmFsdWUgKGV4Y2VwdCBhZnRlciBhIHJlc3RhcnQpLiBOb3Qg c3VyZSBpZiB0aGVyZQorCQkgKiBpcyBzb21lIHNvcnQgb2YgcmFjZSBjb25kaXRpb24uCisJ CSAqLworCQlJbml0TG9jYWxEYXRhQ2hlY2tzdW1WZXJzaW9uKCk7CisKIAkJLyoKIAkJICog UnVuIHRoZSBhcHByb3ByaWF0ZSBNYWluIGZ1bmN0aW9uCiAJCSAqLwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9tZXNvbi5idWlsZCBiL3NyYy9iYWNrZW5kL3Bvc3Rt YXN0ZXIvbWVzb24uYnVpbGQKaW5kZXggMDAwODYwM2NmZWUuLmNlMTBlZjEwNTlhIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL21lc29uLmJ1aWxkCisrKyBiL3NyYy9i YWNrZW5kL3Bvc3RtYXN0ZXIvbWVzb24uYnVpbGQKQEAgLTYsNiArNiw3IEBAIGJhY2tlbmRf c291cmNlcyArPSBmaWxlcygKICAgJ2Jnd29ya2VyLmMnLAogICAnYmd3cml0ZXIuYycsCiAg ICdjaGVja3BvaW50ZXIuYycsCisgICdkYXRhY2hlY2tzdW1zd29ya2VyLmMnLAogICAnZm9y a19wcm9jZXNzLmMnLAogICAnaW50ZXJydXB0LmMnLAogICAnbGF1bmNoX2JhY2tlbmQuYycs CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYyBiL3Ny Yy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCmluZGV4IGQxMzg0NjI5OGJkLi44 MWViODRlN2VmYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFz dGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMKQEAgLTI5 NDYsNiArMjk0NiwxMSBAQCBQb3N0bWFzdGVyU3RhdGVNYWNoaW5lKHZvaWQpCiAJCQkJCQkJ CQlCX0lOVkFMSUQsCiAJCQkJCQkJCQlCX1NUQU5EQUxPTkVfQkFDS0VORCk7CiAKKwkJCS8q IGFsc28gYWRkIGNoZWNrc3VtbWluZyBwcm9jZXNzZXMgKi8KKwkJCXJlbWFpbk1hc2sgPSBi dG1hc2tfYWRkKHJlbWFpbk1hc2ssCisJCQkJCQkJCQlCX0RBVEFDSEVDS1NVTVNXT1JLRVJf TEFVTkNIRVIsCisJCQkJCQkJCQlCX0RBVEFDSEVDS1NVTVNXT1JLRVJfV09SS0VSKTsKKwog CQkJLyogQWxsIHR5cGVzIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0YXJnZXRNYXNrIG9yIHJl bWFpbk1hc2sgKi8KIAkJCUFzc2VydCgocmVtYWluTWFzay5tYXNrIHwgdGFyZ2V0TWFzay5t YXNrKSA9PSBCVFlQRV9NQVNLX0FMTC5tYXNrKTsKIAkJfQpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYyBiL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMKaW5kZXggNzhmOWEwYTExYzQuLmZlMTkyMjg2OGI5 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5j CisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMKQEAgLTE4 Niw2ICsxODYsNyBAQCB4bG9nX2RlY29kZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgs IFhMb2dSZWNvcmRCdWZmZXIgKmJ1ZikKIAkJY2FzZSBYTE9HX0ZQV19DSEFOR0U6CiAJCWNh c2UgWExPR19GUElfRk9SX0hJTlQ6CiAJCWNhc2UgWExPR19GUEk6CisJCWNhc2UgWExPR19D SEVDS1NVTVM6CiAJCWNhc2UgWExPR19PVkVSV1JJVEVfQ09OVFJFQ09SRDoKIAkJY2FzZSBY TE9HX0NIRUNLUE9JTlRfUkVETzoKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvc3RvcmFnZS9pcGMvaXBjaS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5j CmluZGV4IDE3NGVlZDcwMzY3Li5lNzc2MWEzZGRiNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvc3RvcmFnZS9pcGMvaXBjaS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lw Y2kuYwpAQCAtMzAsNiArMzAsOCBAQAogI2luY2x1ZGUgInBvc3RtYXN0ZXIvYXV0b3ZhY3V1 bS5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvYmd3b3JrZXJfaW50ZXJuYWxzLmgiCiAjaW5j bHVkZSAicG9zdG1hc3Rlci9iZ3dyaXRlci5oIgorI2luY2x1ZGUgInBvc3RtYXN0ZXIvZGF0 YWNoZWNrc3Vtc3dvcmtlci5oIgorI2luY2x1ZGUgInBvc3RtYXN0ZXIvcG9zdG1hc3Rlci5o IgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvd2Fsc3VtbWFyaXplci5oIgogI2luY2x1ZGUgInJl cGxpY2F0aW9uL2xvZ2ljYWxsYXVuY2hlci5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL29y aWdpbi5oIgpAQCAtMTQ4LDYgKzE1MCw3IEBAIENhbGN1bGF0ZVNobWVtU2l6ZShpbnQgKm51 bV9zZW1hcGhvcmVzKQogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBXYWl0RXZlbnRDdXN0b21T aG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIEluamVjdGlvblBvaW50U2ht ZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBTbG90U3luY1NobWVtU2l6ZSgp KTsKKwlzaXplID0gYWRkX3NpemUoc2l6ZSwgRGF0YUNoZWNrc3Vtc1dvcmtlclNobWVtU2l6 ZSgpKTsKIAogCS8qIGluY2x1ZGUgYWRkaXRpb25hbCByZXF1ZXN0ZWQgc2htZW0gZnJvbSBw cmVsb2FkIGxpYnJhcmllcyAqLwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCB0b3RhbF9hZGRp bl9yZXF1ZXN0KTsKQEAgLTMzMCw2ICszMzMsNyBAQCBDcmVhdGVPckF0dGFjaFNobWVtU3Ry dWN0cyh2b2lkKQogCVBnQXJjaFNobWVtSW5pdCgpOwogCUFwcGx5TGF1bmNoZXJTaG1lbUlu aXQoKTsKIAlTbG90U3luY1NobWVtSW5pdCgpOworCURhdGFDaGVja3N1bXNXb3JrZXJTaG1l bUluaXQoKTsKIAogCS8qCiAJICogU2V0IHVwIG90aGVyIG1vZHVsZXMgdGhhdCBuZWVkIHNv bWUgc2hhcmVkIG1lbW9yeSBzcGFjZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFn ZS9pcGMvcHJvY3NpZ25hbC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25h bC5jCmluZGV4IDdkMjAxOTY1NTAzLi4yYjEzYThjZDI2MCAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvaXBjL3Byb2NzaWduYWwuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPHVuaXN0 ZC5oPgogCiAjaW5jbHVkZSAiYWNjZXNzL3BhcmFsbGVsLmgiCisjaW5jbHVkZSAiYWNjZXNz L3hsb2cuaCIKICNpbmNsdWRlICJjb21tYW5kcy9hc3luYy5oIgogI2luY2x1ZGUgIm1pc2Nh ZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgpAQCAtNTc1LDYgKzU3NiwxOCBAQCBQcm9j ZXNzUHJvY1NpZ25hbEJhcnJpZXIodm9pZCkKIAkJCQkJY2FzZSBQUk9DU0lHTkFMX0JBUlJJ RVJfU01HUlJFTEVBU0U6CiAJCQkJCQlwcm9jZXNzZWQgPSBQcm9jZXNzQmFycmllclNtZ3JS ZWxlYXNlKCk7CiAJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBQUk9DU0lHTkFMX0JBUlJJRVJf Q0hFQ0tTVU1fSU5QUk9HUkVTU19PTjoKKwkJCQkJCXByb2Nlc3NlZCA9IEFic29yYkNoZWNr c3Vtc09uSW5Qcm9ncmVzc0JhcnJpZXIoKTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIFBS T0NTSUdOQUxfQkFSUklFUl9DSEVDS1NVTV9PTjoKKwkJCQkJCXByb2Nlc3NlZCA9IEFic29y YkNoZWNrc3Vtc09uQmFycmllcigpOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgUFJPQ1NJ R05BTF9CQVJSSUVSX0NIRUNLU1VNX0lOUFJPR1JFU1NfT0ZGOgorCQkJCQkJcHJvY2Vzc2Vk ID0gQWJzb3JiQ2hlY2tzdW1zT2ZmSW5Qcm9ncmVzc0JhcnJpZXIoKTsKKwkJCQkJCWJyZWFr OworCQkJCQljYXNlIFBST0NTSUdOQUxfQkFSUklFUl9DSEVDS1NVTV9PRkY6CisJCQkJCQlw cm9jZXNzZWQgPSBBYnNvcmJDaGVja3N1bXNPZmZCYXJyaWVyKCk7CisJCQkJCQlicmVhazsK IAkJCQl9CiAKIAkJCQkvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9wYWdl L1JFQURNRSBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvcGFnZS9SRUFETUUKaW5kZXggZTMwZDdh YzU5YWQuLjczYzM2YTYzOTA4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL3Bh Z2UvUkVBRE1FCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvcGFnZS9SRUFETUUKQEAgLTEw LDcgKzEwLDkgQEAgaHR0cDovL3d3dy5jcy50b3JvbnRvLmVkdS9+YmlhbmNhL3BhcGVycy9z aWdtZXRyaWNzMDkucGRmLCBkaXNjdXNzZWQKIDIwMTAvMTIvMjIgb24gLWhhY2tlcnMgbGlz dC4KIAogQ3VycmVudCBpbXBsZW1lbnRhdGlvbiByZXF1aXJlcyB0aGlzIGJlIGVuYWJsZWQg c3lzdGVtLXdpZGUgYXQgaW5pdGRiIHRpbWUsIG9yCi1ieSB1c2luZyB0aGUgcGdfY2hlY2tz dW1zIHRvb2wgb24gYW4gb2ZmbGluZSBjbHVzdGVyLgorYnkgdXNpbmcgdGhlIHBnX2NoZWNr c3VtcyB0b29sIG9uIGFuIG9mZmxpbmUgY2x1c3Rlci4gIENoZWNrc3VtcyBjYW4gYWxzbyBi ZQorZW5hYmxlZCBhdCBydW50aW1lIHVzaW5nIHBnX2VuYWJsZV9kYXRhX2NoZWNrc3Vtcygp LCBhbmQgZGlzYWJsZWQgYnkgdXNpbmcKK3BnX2Rpc2FibGVfZGF0YV9jaGVja3N1bXMoKS4K IAogVGhlIGNoZWNrc3VtIGlzIG5vdCB2YWxpZCBhdCBhbGwgdGltZXMgb24gYSBkYXRhIHBh Z2UhIQogVGhlIGNoZWNrc3VtIGlzIHZhbGlkIHdoZW4gdGhlIHBhZ2UgbGVhdmVzIHRoZSBz aGFyZWQgcG9vbCBhbmQgaXMgY2hlY2tlZApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3Rv cmFnZS9wYWdlL2J1ZnBhZ2UuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvcGFnZS9idWZwYWdl LmMKaW5kZXggZWNjODFhYWNmYzMuLjhiZDVmZWQ4Yzg1IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9zdG9yYWdlL3BhZ2UvYnVmcGFnZS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv cGFnZS9idWZwYWdlLmMKQEAgLTk4LDcgKzk4LDcgQEAgUGFnZUlzVmVyaWZpZWRFeHRlbmRl ZChQYWdlRGF0YSAqcGFnZSwgQmxvY2tOdW1iZXIgYmxrbm8sIGludCBmbGFncykKIAkgKi8K IAlpZiAoIVBhZ2VJc05ldyhwYWdlKSkKIAl7Ci0JCWlmIChEYXRhQ2hlY2tzdW1zRW5hYmxl ZCgpKQorCQlpZiAoRGF0YUNoZWNrc3Vtc05lZWRWZXJpZnkoKSkKIAkJewogCQkJY2hlY2tz dW0gPSBwZ19jaGVja3N1bV9wYWdlKHBhZ2UsIGJsa25vKTsKIApAQCAtMTUwMSw3ICsxNTAx LDcgQEAgUGFnZVNldENoZWNrc3VtQ29weShQYWdlIHBhZ2UsIEJsb2NrTnVtYmVyIGJsa25v KQogCXN0YXRpYyBjaGFyICpwYWdlQ29weSA9IE5VTEw7CiAKIAkvKiBJZiB3ZSBkb24ndCBu ZWVkIGEgY2hlY2tzdW0sIGp1c3QgcmV0dXJuIHRoZSBwYXNzZWQtaW4gZGF0YSAqLwotCWlm IChQYWdlSXNOZXcocGFnZSkgfHwgIURhdGFDaGVja3N1bXNFbmFibGVkKCkpCisJaWYgKFBh Z2VJc05ldyhwYWdlKSB8fCAhRGF0YUNoZWNrc3Vtc05lZWRXcml0ZSgpKQogCQlyZXR1cm4g cGFnZTsKIAogCS8qCkBAIC0xNTMxLDcgKzE1MzEsNyBAQCB2b2lkCiBQYWdlU2V0Q2hlY2tz dW1JbnBsYWNlKFBhZ2UgcGFnZSwgQmxvY2tOdW1iZXIgYmxrbm8pCiB7CiAJLyogSWYgd2Ug ZG9uJ3QgbmVlZCBhIGNoZWNrc3VtLCBqdXN0IHJldHVybiAqLwotCWlmIChQYWdlSXNOZXco cGFnZSkgfHwgIURhdGFDaGVja3N1bXNFbmFibGVkKCkpCisJaWYgKFBhZ2VJc05ldyhwYWdl KSB8fCAhRGF0YUNoZWNrc3Vtc05lZWRXcml0ZSgpKQogCQlyZXR1cm47CiAKIAkoKFBhZ2VI ZWFkZXIpIHBhZ2UpLT5wZF9jaGVja3N1bSA9IHBnX2NoZWNrc3VtX3BhZ2UocGFnZSwgYmxr bm8pOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvcGdzdGF0X2Jh Y2tlbmQuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdF9iYWNrZW5kLmMK aW5kZXggYThjYjU0YTc3MzIuLjdjOWZmNWMxOWM1IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC91dGlscy9hY3Rpdml0eS9wZ3N0YXRfYmFja2VuZC5jCisrKyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2FjdGl2aXR5L3Bnc3RhdF9iYWNrZW5kLmMKQEAgLTM3Niw2ICszNzYsOCBAQCBwZ3N0 YXRfdHJhY2tzX2JhY2tlbmRfYmt0eXBlKEJhY2tlbmRUeXBlIGJrdHlwZSkKIAkJY2FzZSBC X0JHX1dSSVRFUjoKIAkJY2FzZSBCX0NIRUNLUE9JTlRFUjoKIAkJY2FzZSBCX1NUQVJUVVA6 CisJCWNhc2UgQl9EQVRBQ0hFQ0tTVU1TV09SS0VSX0xBVU5DSEVSOgorCQljYXNlIEJfREFU QUNIRUNLU1VNU1dPUktFUl9XT1JLRVI6CiAJCQlyZXR1cm4gZmFsc2U7CiAKIAkJY2FzZSBC X0FVVE9WQUNfV09SS0VSOgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZp dHkvcGdzdGF0X2lvLmMgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXRfaW8u YwppbmRleCBlYjU3NTAyNTU5Ni4uZTdiNDE4YTAwMGUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdF9pby5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxz L2FjdGl2aXR5L3Bnc3RhdF9pby5jCkBAIC0zNzAsNiArMzcwLDggQEAgcGdzdGF0X3RyYWNr c19pb19ia3R5cGUoQmFja2VuZFR5cGUgYmt0eXBlKQogCQljYXNlIEJfTE9HR0VSOgogCQkJ cmV0dXJuIGZhbHNlOwogCisJCWNhc2UgQl9EQVRBQ0hFQ0tTVU1TV09SS0VSX0xBVU5DSEVS OgorCQljYXNlIEJfREFUQUNIRUNLU1VNU1dPUktFUl9XT1JLRVI6CiAJCWNhc2UgQl9BVVRP VkFDX0xBVU5DSEVSOgogCQljYXNlIEJfQVVUT1ZBQ19XT1JLRVI6CiAJCWNhc2UgQl9CQUNL RU5EOgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVu dF9uYW1lcy50eHQgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50X25h bWVzLnR4dAppbmRleCAzYzU5NDQxNWJmZC4uYjFiNWNkY2YzNmMgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFtZXMudHh0CisrKyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFtZXMudHh0CkBAIC0xMTUs NiArMTE1LDggQEAgQ0hFQ0tQT0lOVF9ERUxBWV9DT01QTEVURQkiV2FpdGluZyBmb3IgYSBi YWNrZW5kIHRoYXQgYmxvY2tzIGEgY2hlY2twb2ludCBmcm9tIGMKIENIRUNLUE9JTlRfREVM QVlfU1RBUlQJIldhaXRpbmcgZm9yIGEgYmFja2VuZCB0aGF0IGJsb2NrcyBhIGNoZWNrcG9p bnQgZnJvbSBzdGFydGluZy4iCiBDSEVDS1BPSU5UX0RPTkUJIldhaXRpbmcgZm9yIGEgY2hl Y2twb2ludCB0byBjb21wbGV0ZS4iCiBDSEVDS1BPSU5UX1NUQVJUCSJXYWl0aW5nIGZvciBh IGNoZWNrcG9pbnQgdG8gc3RhcnQuIgorQ0hFQ0tTVU1fRU5BQkxFX1NUQVJUQ09ORElUSU9O CSJXYWl0aW5nIGZvciBkYXRhIGNoZWNrc3VtcyBlbmFibGluZyB0byBzdGFydC4iCitDSEVD S1NVTV9FTkFCTEVfRklOSVNIQ09ORElUSU9OCSJXYWl0aW5nIGZvciBkYXRhIGNoZWNrc3Vt cyB0byBiZSBlbmFibGVkLiIKIEVYRUNVVEVfR0FUSEVSCSJXYWl0aW5nIGZvciBhY3Rpdml0 eSBmcm9tIGEgY2hpbGQgcHJvY2VzcyB3aGlsZSBleGVjdXRpbmcgYSA8bGl0ZXJhbD5HYXRo ZXI8L2xpdGVyYWw+IHBsYW4gbm9kZS4iCiBIQVNIX0JBVENIX0FMTE9DQVRFCSJXYWl0aW5n IGZvciBhbiBlbGVjdGVkIFBhcmFsbGVsIEhhc2ggcGFydGljaXBhbnQgdG8gYWxsb2NhdGUg YSBoYXNoIHRhYmxlLiIKIEhBU0hfQkFUQ0hfRUxFQ1QJIldhaXRpbmcgdG8gZWxlY3QgYSBQ YXJhbGxlbCBIYXNoIHBhcnRpY2lwYW50IHRvIGFsbG9jYXRlIGEgaGFzaCB0YWJsZS4iCkBA IC0zNDYsNiArMzQ4LDcgQEAgV0FMU3VtbWFyaXplcgkiV2FpdGluZyB0byByZWFkIG9yIHVw ZGF0ZSBXQUwgc3VtbWFyaXphdGlvbiBzdGF0ZS4iCiBEU01SZWdpc3RyeQkiV2FpdGluZyB0 byByZWFkIG9yIHVwZGF0ZSB0aGUgZHluYW1pYyBzaGFyZWQgbWVtb3J5IHJlZ2lzdHJ5LiIK IEluamVjdGlvblBvaW50CSJXYWl0aW5nIHRvIHJlYWQgb3IgdXBkYXRlIGluZm9ybWF0aW9u IHJlbGF0ZWQgdG8gaW5qZWN0aW9uIHBvaW50cy4iCiBTZXJpYWxDb250cm9sCSJXYWl0aW5n IHRvIHJlYWQgb3IgdXBkYXRlIHNoYXJlZCA8ZmlsZW5hbWU+cGdfc2VyaWFsPC9maWxlbmFt ZT4gc3RhdGUuIgorRGF0YUNoZWNrc3Vtc1dvcmtlcgkiV2FpdGluZyBmb3IgZGF0YSBjaGVj a3N1bXN3b3JrZXIuIgogCiAjCiAjIEVORCBPRiBQUkVERUZJTkVEIExXTE9DS1MgKERPIE5P VCBDSEFOR0UgVEhJUyBMSU5FKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L3Bnc3RhdGZ1bmNzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdzdGF0ZnVuY3MuYwpp bmRleCA2NjJjZTQ2Y2JjMi4uMmNiNzc2NmMxZTIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9wZ3N0YXRmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9w Z3N0YXRmdW5jcy5jCkBAIC0yNzQsNiArMjc0LDggQEAgcGdfc3RhdF9nZXRfcHJvZ3Jlc3Nf aW5mbyhQR19GVU5DVElPTl9BUkdTKQogCQljbWR0eXBlID0gUFJPR1JFU1NfQ09NTUFORF9C QVNFQkFDS1VQOwogCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoY21kLCAiQ09QWSIpID09IDAp CiAJCWNtZHR5cGUgPSBQUk9HUkVTU19DT01NQU5EX0NPUFk7CisJZWxzZSBpZiAocGdfc3Ry Y2FzZWNtcChjbWQsICJEQVRBQ0hFQ0tTVU1TIikgPT0gMCkKKwkJY21kdHlwZSA9IFBST0dS RVNTX0NPTU1BTkRfREFUQUNIRUNLU1VNUzsKIAllbHNlCiAJCWVyZXBvcnQoRVJST1IsCiAJ CQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCkBAIC0xMTQ2 LDkgKzExNDgsNiBAQCBwZ19zdGF0X2dldF9kYl9jaGVja3N1bV9mYWlsdXJlcyhQR19GVU5D VElPTl9BUkdTKQogCWludDY0CQlyZXN1bHQ7CiAJUGdTdGF0X1N0YXREQkVudHJ5ICpkYmVu dHJ5OwogCi0JaWYgKCFEYXRhQ2hlY2tzdW1zRW5hYmxlZCgpKQotCQlQR19SRVRVUk5fTlVM TCgpOwotCiAJaWYgKChkYmVudHJ5ID0gcGdzdGF0X2ZldGNoX3N0YXRfZGJlbnRyeShkYmlk KSkgPT0gTlVMTCkKIAkJcmVzdWx0ID0gMDsKIAllbHNlCkBAIC0xMTY0LDkgKzExNjMsNiBA QCBwZ19zdGF0X2dldF9kYl9jaGVja3N1bV9sYXN0X2ZhaWx1cmUoUEdfRlVOQ1RJT05fQVJH UykKIAlUaW1lc3RhbXBUeiByZXN1bHQ7CiAJUGdTdGF0X1N0YXREQkVudHJ5ICpkYmVudHJ5 OwogCi0JaWYgKCFEYXRhQ2hlY2tzdW1zRW5hYmxlZCgpKQotCQlQR19SRVRVUk5fTlVMTCgp OwotCiAJaWYgKChkYmVudHJ5ID0gcGdzdGF0X2ZldGNoX3N0YXRfZGJlbnRyeShkYmlkKSkg PT0gTlVMTCkKIAkJcmVzdWx0ID0gMDsKIAllbHNlCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC91dGlscy9pbml0L21pc2Npbml0LmMgYi9zcmMvYmFja2VuZC91dGlscy9pbml0L21pc2Np bml0LmMKaW5kZXggZGMzNTIxNDU3YzcuLmEwNzFiYTZmNDU1IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC91dGlscy9pbml0L21pc2Npbml0LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMv aW5pdC9taXNjaW5pdC5jCkBAIC0yOTMsNiArMjkzLDEyIEBAIEdldEJhY2tlbmRUeXBlRGVz YyhCYWNrZW5kVHlwZSBiYWNrZW5kVHlwZSkKIAkJY2FzZSBCX0NIRUNLUE9JTlRFUjoKIAkJ CWJhY2tlbmREZXNjID0gZ2V0dGV4dF9ub29wKCJjaGVja3BvaW50ZXIiKTsKIAkJCWJyZWFr OworCQljYXNlIEJfREFUQUNIRUNLU1VNU1dPUktFUl9MQVVOQ0hFUjoKKwkJCWJhY2tlbmRE ZXNjID0gImRhdGFjaGVja3N1bXN3b3JrZXIgbGF1bmNoZXIiOworCQkJYnJlYWs7CisJCWNh c2UgQl9EQVRBQ0hFQ0tTVU1TV09SS0VSX1dPUktFUjoKKwkJCWJhY2tlbmREZXNjID0gImRh dGFjaGVja3N1bXN3b3JrZXIgd29ya2VyIjsKKwkJCWJyZWFrOwogCQljYXNlIEJfTE9HR0VS OgogCQkJYmFja2VuZERlc2MgPSBnZXR0ZXh0X25vb3AoImxvZ2dlciIpOwogCQkJYnJlYWs7 CkBAIC04OTIsNyArODk4LDggQEAgSW5pdGlhbGl6ZVNlc3Npb25Vc2VySWRTdGFuZGFsb25l KHZvaWQpCiAJICogd29ya2VycywgaW4gc2xvdCBzeW5jIHdvcmtlciBhbmQgaW4gYmFja2dy b3VuZCB3b3JrZXJzLgogCSAqLwogCUFzc2VydCghSXNVbmRlclBvc3RtYXN0ZXIgfHwgQW1B dXRvVmFjdXVtV29ya2VyUHJvY2VzcygpIHx8Ci0JCSAgIEFtTG9naWNhbFNsb3RTeW5jV29y a2VyUHJvY2VzcygpIHx8IEFtQmFja2dyb3VuZFdvcmtlclByb2Nlc3MoKSk7CisJCSAgIEFt TG9naWNhbFNsb3RTeW5jV29ya2VyUHJvY2VzcygpIHx8IEFtQmFja2dyb3VuZFdvcmtlclBy b2Nlc3MoKSB8fAorCQkgICBBbURhdGFDaGVja3N1bXNXb3JrZXJQcm9jZXNzKCkpOwogCiAJ LyogY2FsbCBvbmx5IG9uY2UgKi8KIAlBc3NlcnQoIU9pZElzVmFsaWQoQXV0aGVudGljYXRl ZFVzZXJJZCkpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9wb3N0aW5p dC5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9wb3N0aW5pdC5jCmluZGV4IDRiMmZhZjFi YTlkLi5iYWUxOGI0NDlhYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9w b3N0aW5pdC5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvcG9zdGluaXQuYwpAQCAt NzQ2LDYgKzc0NiwxMSBAQCBJbml0UG9zdGdyZXMoY29uc3QgY2hhciAqaW5fZGJuYW1lLCBP aWQgZGJvaWQsCiAJICovCiAJU2hhcmVkSW52YWxCYWNrZW5kSW5pdChmYWxzZSk7CiAKKwkv KgorCSAqIFNldCB1cCBiYWNrZW5kIGxvY2FsIGNhY2hlIG9mIENvbnRyb2xkYXRhIHZhbHVl cy4KKwkgKi8KKwlJbml0TG9jYWxDb250cm9sZGF0YSgpOworCiAJUHJvY1NpZ25hbEluaXQo TXlDYW5jZWxLZXlWYWxpZCwgTXlDYW5jZWxLZXkpOwogCiAJLyoKQEAgLTg3Niw3ICs4ODEs NyBAQCBJbml0UG9zdGdyZXMoY29uc3QgY2hhciAqaW5fZGJuYW1lLCBPaWQgZGJvaWQsCiAJ CQkJCSBlcnJoaW50KCJZb3Ugc2hvdWxkIGltbWVkaWF0ZWx5IHJ1biBDUkVBVEUgVVNFUiBc IiVzXCIgU1VQRVJVU0VSOy4iLAogCQkJCQkJCSB1c2VybmFtZSAhPSBOVUxMID8gdXNlcm5h bWUgOiAicG9zdGdyZXMiKSkpOwogCX0KLQllbHNlIGlmIChBbUJhY2tncm91bmRXb3JrZXJQ cm9jZXNzKCkpCisJZWxzZSBpZiAoQW1CYWNrZ3JvdW5kV29ya2VyUHJvY2VzcygpIHx8IEFt RGF0YUNoZWNrc3Vtc1dvcmtlclByb2Nlc3MoKSkKIAl7CiAJCWlmICh1c2VybmFtZSA9PSBO VUxMICYmICFPaWRJc1ZhbGlkKHVzZXJvaWQpKQogCQl7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2Mv Z3VjX3RhYmxlcy5jCmluZGV4IDljMGIxMGFkNGRjLi41YzAwZTZhNWJmNiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKKysrIGIvc3JjL2JhY2tl bmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKQEAgLTQ3Niw2ICs0NzYsMTQgQEAgc3RhdGlj IGNvbnN0IHN0cnVjdCBjb25maWdfZW51bV9lbnRyeSB3YWxfY29tcHJlc3Npb25fb3B0aW9u c1tdID0gewogCXtOVUxMLCAwLCBmYWxzZX0KIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg Y29uZmlnX2VudW1fZW50cnkgZGF0YV9jaGVja3N1bXNfb3B0aW9uc1tdID0geworCXsib24i LCBEQVRBX0NIRUNLU1VNU19PTiwgdHJ1ZX0sCisJeyJvZmYiLCBEQVRBX0NIRUNLU1VNU19P RkYsIHRydWV9LAorCXsiaW5wcm9ncmVzcy1vbiIsIERBVEFfQ0hFQ0tTVU1TX0lOUFJPR1JF U1NfT04sIHRydWV9LAorCXsiaW5wcm9ncmVzcy1vZmYiLCBEQVRBX0NIRUNLU1VNU19JTlBS T0dSRVNTX09GRiwgdHJ1ZX0sCisJe05VTEwsIDAsIGZhbHNlfQorfTsKKwogLyoKICAqIE9w dGlvbnMgZm9yIGVudW0gdmFsdWVzIHN0b3JlZCBpbiBvdGhlciBtb2R1bGVzCiAgKi8KQEAg LTYwMSw3ICs2MDksNiBAQCBzdGF0aWMgaW50CXNoYXJlZF9tZW1vcnlfc2l6ZV9tYjsKIHN0 YXRpYyBpbnQJc2hhcmVkX21lbW9yeV9zaXplX2luX2h1Z2VfcGFnZXM7CiBzdGF0aWMgaW50 CXdhbF9ibG9ja19zaXplOwogc3RhdGljIGludAludW1fb3Nfc2VtYXBob3JlczsKLXN0YXRp YyBib29sIGRhdGFfY2hlY2tzdW1zOwogc3RhdGljIGJvb2wgaW50ZWdlcl9kYXRldGltZXM7 CiAKICNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCkBAIC0xOTUyLDE3ICsxOTU5LDYgQEAg c3RydWN0IGNvbmZpZ19ib29sIENvbmZpZ3VyZU5hbWVzQm9vbFtdID0KIAkJTlVMTCwgTlVM TCwgTlVMTAogCX0sCiAKLQl7Ci0JCXsiZGF0YV9jaGVja3N1bXMiLCBQR0NfSU5URVJOQUws IFBSRVNFVF9PUFRJT05TLAotCQkJZ2V0dGV4dF9ub29wKCJTaG93cyB3aGV0aGVyIGRhdGEg Y2hlY2tzdW1zIGFyZSB0dXJuZWQgb24gZm9yIHRoaXMgY2x1c3Rlci4iKSwKLQkJCU5VTEws Ci0JCQlHVUNfTk9UX0lOX1NBTVBMRSB8IEdVQ19ESVNBTExPV19JTl9GSUxFIHwgR1VDX1JV TlRJTUVfQ09NUFVURUQKLQkJfSwKLQkJJmRhdGFfY2hlY2tzdW1zLAotCQlmYWxzZSwKLQkJ TlVMTCwgTlVMTCwgTlVMTAotCX0sCi0KIAl7CiAJCXsic3lzbG9nX3NlcXVlbmNlX251bWJl cnMiLCBQR0NfU0lHSFVQLCBMT0dHSU5HX1dIRVJFLAogCQkJZ2V0dGV4dF9ub29wKCJBZGQg c2VxdWVuY2UgbnVtYmVyIHRvIHN5c2xvZyBtZXNzYWdlcyB0byBhdm9pZCBkdXBsaWNhdGUg c3VwcHJlc3Npb24uIiksCkBAIC01MzExLDYgKzUzMDcsMTcgQEAgc3RydWN0IGNvbmZpZ19l bnVtIENvbmZpZ3VyZU5hbWVzRW51bVtdID0KIAkJTlVMTCwgTlVMTCwgTlVMTAogCX0sCiAK Kwl7CisJCXsiZGF0YV9jaGVja3N1bXMiLCBQR0NfSU5URVJOQUwsIFBSRVNFVF9PUFRJT05T LAorCQkJZ2V0dGV4dF9ub29wKCJTaG93cyB3aGV0aGVyIGRhdGEgY2hlY2tzdW1zIGFyZSB0 dXJuZWQgb24gZm9yIHRoaXMgY2x1c3Rlci4iKSwKKwkJCU5VTEwsCisJCQlHVUNfTk9UX0lO X1NBTVBMRSB8IEdVQ19ESVNBTExPV19JTl9GSUxFIHwgR1VDX1JVTlRJTUVfQ09NUFVURUQK KwkJfSwKKwkJJmRhdGFfY2hlY2tzdW1zLAorCQlEQVRBX0NIRUNLU1VNU19PRkYsIGRhdGFf Y2hlY2tzdW1zX29wdGlvbnMsCisJCU5VTEwsIE5VTEwsIHNob3dfZGF0YV9jaGVja3N1bXMK Kwl9LAorCiAJLyogRW5kLW9mLWxpc3QgbWFya2VyICovCiAJewogCQl7TlVMTCwgMCwgMCwg TlVMTCwgTlVMTH0sIE5VTEwsIDAsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwKZGlmZiAtLWdp dCBhL3NyYy9iaW4vcGdfY2hlY2tzdW1zL3BnX2NoZWNrc3Vtcy5jIGIvc3JjL2Jpbi9wZ19j aGVja3N1bXMvcGdfY2hlY2tzdW1zLmMKaW5kZXggODY3YWVkZGM2MDEuLjc5YzNmODYzNTdl IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2NoZWNrc3Vtcy9wZ19jaGVja3N1bXMuYworKysg Yi9zcmMvYmluL3BnX2NoZWNrc3Vtcy9wZ19jaGVja3N1bXMuYwpAQCAtNTc2LDcgKzU3Niw3 IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJbW9kZSA9PSBQR19NT0RFX0RJ U0FCTEUpCiAJCXBnX2ZhdGFsKCJkYXRhIGNoZWNrc3VtcyBhcmUgYWxyZWFkeSBkaXNhYmxl ZCBpbiBjbHVzdGVyIik7CiAKLQlpZiAoQ29udHJvbEZpbGUtPmRhdGFfY2hlY2tzdW1fdmVy c2lvbiA+IDAgJiYKKwlpZiAoQ29udHJvbEZpbGUtPmRhdGFfY2hlY2tzdW1fdmVyc2lvbiA9 PSBEQVRBX0NIRUNLU1VNU19PTiAmJgogCQltb2RlID09IFBHX01PREVfRU5BQkxFKQogCQlw Z19mYXRhbCgiZGF0YSBjaGVja3N1bXMgYXJlIGFscmVhZHkgZW5hYmxlZCBpbiBjbHVzdGVy Iik7CiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfdXBncmFkZS9jb250cm9sZGF0YS5jIGIv c3JjL2Jpbi9wZ191cGdyYWRlL2NvbnRyb2xkYXRhLmMKaW5kZXggYmQ0OWVhODY3YmYuLmY0 ODkzNmQzYjAwIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3VwZ3JhZGUvY29udHJvbGRhdGEu YworKysgYi9zcmMvYmluL3BnX3VwZ3JhZGUvY29udHJvbGRhdGEuYwpAQCAtMTQsNiArMTQs NyBAQAogCiAjaW5jbHVkZSAiY29tbW9uL3N0cmluZy5oIgogI2luY2x1ZGUgInBnX3VwZ3Jh ZGUuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2J1ZnBhZ2UuaCIKIAogCiAvKgpAQCAtNzM1LDYg KzczNiwxNCBAQCBjaGVja19jb250cm9sX2RhdGEoQ29udHJvbERhdGEgKm9sZGN0cmwsCiAJ ICogY2hlY2tfZm9yX2lzbl9hbmRfaW50OF9wYXNzaW5nX21pc21hdGNoKCkuCiAJICovCiAK KwkvKgorCSAqIElmIGRhdGEgY2hlY2tzdW1zIGFyZSBpbiBhbnkgaW4tcHJvZ3Jlc3Mgc3Rh dGUgdGhlbiBkaXNhbGxvdyB0aGUKKwkgKiB1cGdyYWRlLiBUaGUgdXNlciBzaG91bGQgZWl0 aGVyIGxldCB0aGUgcHJvY2VzcyBmaW5pc2gsIG9yIHR1cm4gb2ZmCisJICogZGF0YSBjaGVj a3N1bXMsIGJlZm9yZSByZXRyeWluZy4KKwkgKi8KKwlpZiAob2xkY3RybC0+ZGF0YV9jaGVj a3N1bV92ZXJzaW9uID4gUEdfREFUQV9DSEVDS1NVTV9WRVJTSU9OKQorCQlwZ19mYXRhbCgi Y2hlY2tzdW1zIGFyZSBiZWluZyBlbmFibGVkIGluIHRoZSBvbGQgY2x1c3RlciIpOworCiAJ LyoKIAkgKiBXZSBtaWdodCBldmVudHVhbGx5IGFsbG93IHVwZ3JhZGVzIGZyb20gY2hlY2tz dW0gdG8gbm8tY2hlY2tzdW0KIAkgKiBjbHVzdGVycy4KZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL2FjY2Vzcy94bG9nLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZy5oCmluZGV4IGQz MTMwOTljMDI3Li5hZWMzZWEwYmM2MyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNz L3hsb2cuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZy5oCkBAIC01Niw2ICs1Niw3 IEBAIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgQ29tbWl0RGVsYXk7CiBleHRlcm4gUEdETExJ TVBPUlQgaW50IENvbW1pdFNpYmxpbmdzOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgdHJh Y2tfd2FsX2lvX3RpbWluZzsKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgd2FsX2RlY29kZV9i dWZmZXJfc2l6ZTsKK2V4dGVybiBQR0RMTElNUE9SVCBpbnQgZGF0YV9jaGVja3N1bXM7CiAK IGV4dGVybiBQR0RMTElNUE9SVCBpbnQgQ2hlY2tQb2ludFNlZ21lbnRzOwogCkBAIC0xMTcs NyArMTE4LDcgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIGludCB3YWxfbGV2ZWw7CiAgKiBvZiB0 aGUgYml0cyBtYWtlIGl0IHRvIGRpc2ssIGJ1dCB0aGUgY2hlY2tzdW0gd291bGRuJ3QgbWF0 Y2guICBBbHNvIFdBTC1sb2cKICAqIHRoZW0gaWYgZm9yY2VkIGJ5IHdhbF9sb2dfaGludHM9 b24uCiAgKi8KLSNkZWZpbmUgWExvZ0hpbnRCaXRJc05lZWRlZCgpIChEYXRhQ2hlY2tzdW1z RW5hYmxlZCgpIHx8IHdhbF9sb2dfaGludHMpCisjZGVmaW5lIFhMb2dIaW50Qml0SXNOZWVk ZWQoKSAod2FsX2xvZ19oaW50cyB8fCBEYXRhQ2hlY2tzdW1zTmVlZFdyaXRlKCkpCiAKIC8q IERvIHdlIG5lZWQgdG8gV0FMLWxvZyBpbmZvcm1hdGlvbiByZXF1aXJlZCBvbmx5IGZvciBI b3QgU3RhbmRieSBhbmQgbG9naWNhbCByZXBsaWNhdGlvbj8gKi8KICNkZWZpbmUgWExvZ1N0 YW5kYnlJbmZvQWN0aXZlKCkgKHdhbF9sZXZlbCA+PSBXQUxfTEVWRUxfUkVQTElDQSkKQEAg LTIzMCw3ICsyMzEsMTkgQEAgZXh0ZXJuIFhMb2dSZWNQdHIgR2V0WExvZ1dyaXRlUmVjUHRy KHZvaWQpOwogCiBleHRlcm4gdWludDY0IEdldFN5c3RlbUlkZW50aWZpZXIodm9pZCk7CiBl eHRlcm4gY2hhciAqR2V0TW9ja0F1dGhlbnRpY2F0aW9uTm9uY2Uodm9pZCk7Ci1leHRlcm4g Ym9vbCBEYXRhQ2hlY2tzdW1zRW5hYmxlZCh2b2lkKTsKK2V4dGVybiBib29sIERhdGFDaGVj a3N1bXNOZWVkV3JpdGUodm9pZCk7CitleHRlcm4gYm9vbCBEYXRhQ2hlY2tzdW1zTmVlZFZl cmlmeSh2b2lkKTsKK2V4dGVybiBib29sIERhdGFDaGVja3N1bXNPbkluUHJvZ3Jlc3Modm9p ZCk7CitleHRlcm4gYm9vbCBEYXRhQ2hlY2tzdW1zT2ZmSW5Qcm9ncmVzcyh2b2lkKTsKK2V4 dGVybiB2b2lkIFNldERhdGFDaGVja3N1bXNPbkluUHJvZ3Jlc3Modm9pZCk7CitleHRlcm4g dm9pZCBTZXREYXRhQ2hlY2tzdW1zT24odm9pZCk7CitleHRlcm4gdm9pZCBTZXREYXRhQ2hl Y2tzdW1zT2ZmKHZvaWQpOworZXh0ZXJuIGJvb2wgQWJzb3JiQ2hlY2tzdW1zT25JblByb2dy ZXNzQmFycmllcih2b2lkKTsKK2V4dGVybiBib29sIEFic29yYkNoZWNrc3Vtc09mZkluUHJv Z3Jlc3NCYXJyaWVyKHZvaWQpOworZXh0ZXJuIGJvb2wgQWJzb3JiQ2hlY2tzdW1zT25CYXJy aWVyKHZvaWQpOworZXh0ZXJuIGJvb2wgQWJzb3JiQ2hlY2tzdW1zT2ZmQmFycmllcih2b2lk KTsKK2V4dGVybiBjb25zdCBjaGFyICpzaG93X2RhdGFfY2hlY2tzdW1zKHZvaWQpOworZXh0 ZXJuIHZvaWQgSW5pdExvY2FsQ29udHJvbGRhdGEodm9pZCk7CiBleHRlcm4gYm9vbCBHZXRE ZWZhdWx0Q2hhclNpZ25lZG5lc3Modm9pZCk7CiBleHRlcm4gWExvZ1JlY1B0ciBHZXRGYWtl TFNORm9yVW5sb2dnZWRSZWwodm9pZCk7CiBleHRlcm4gU2l6ZSBYTE9HU2htZW1TaXplKHZv aWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2dfaW50ZXJuYWwuaCBi L3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9nX2ludGVybmFsLmgKaW5kZXggMmNmOGQ1NWQ3MDYu LmVlODJkNGNlNzNkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ19pbnRl cm5hbC5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9nX2ludGVybmFsLmgKQEAgLTI1 LDYgKzI1LDcgQEAKICNpbmNsdWRlICJsaWIvc3RyaW5naW5mby5oIgogI2luY2x1ZGUgInBn dGltZS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYmxvY2suaCIKKyNpbmNsdWRlICJzdG9yYWdl L2NoZWNrc3VtLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9yZWxmaWxlbG9jYXRvci5oIgogCiAK QEAgLTI4OSw2ICsyOTAsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgeGxfcmVzdG9yZV9wb2ludAog CWNoYXIJCXJwX25hbWVbTUFYRk5BTUVMRU5dOwogfSB4bF9yZXN0b3JlX3BvaW50OwogCisv KiBJbmZvcm1hdGlvbiBsb2dnZWQgd2hlbiBkYXRhIGNoZWNrc3VtIGxldmVsIGlzIGNoYW5n ZWQgKi8KK3R5cGVkZWYgc3RydWN0IHhsX2NoZWNrc3VtX3N0YXRlCit7CisJQ2hlY2tzdW1U eXBlIG5ld19jaGVja3N1bXR5cGU7Cit9IHhsX2NoZWNrc3VtX3N0YXRlOworCiAvKiBPdmVy d3JpdGUgb2YgcHJpb3IgY29udHJlY29yZCAqLwogdHlwZWRlZiBzdHJ1Y3QgeGxfb3Zlcndy aXRlX2NvbnRyZWNvcmQKIHsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdf Y29udHJvbC5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19jb250cm9sLmgKaW5kZXggNjNl ODM0YTZjZTQuLjcyNzA0MmI3M2JlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9n L3BnX2NvbnRyb2wuaAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX2NvbnRyb2wuaApA QCAtNjIsNiArNjIsOSBAQCB0eXBlZGVmIHN0cnVjdCBDaGVja1BvaW50CiAJICogc2V0IHRv IEludmFsaWRUcmFuc2FjdGlvbklkLgogCSAqLwogCVRyYW5zYWN0aW9uSWQgb2xkZXN0QWN0 aXZlWGlkOworCisJLyogZGF0YSBjaGVja3N1bXMgYXQgdGhlIHRpbWUgb2YgdGhlIGNoZWNr cG9pbnQgICovCisJdWludDMyCQlkYXRhX2NoZWNrc3VtX3ZlcnNpb247CiB9IENoZWNrUG9p bnQ7CiAKIC8qIFhMT0cgaW5mbyB2YWx1ZXMgZm9yIFhMT0cgcm1nciAqLwpAQCAtODAsNiAr ODMsNyBAQCB0eXBlZGVmIHN0cnVjdCBDaGVja1BvaW50CiAvKiAweEMwIGlzIHVzZWQgaW4g UG9zdGdyZXMgOS41LTExICovCiAjZGVmaW5lIFhMT0dfT1ZFUldSSVRFX0NPTlRSRUNPUkQJ CTB4RDAKICNkZWZpbmUgWExPR19DSEVDS1BPSU5UX1JFRE8JCQkweEUwCisjZGVmaW5lIFhM T0dfQ0hFQ0tTVU1TCQkJCQkweEYwCiAKIAogLyoKQEAgLTIxOSw3ICsyMjMsNyBAQCB0eXBl ZGVmIHN0cnVjdCBDb250cm9sRmlsZURhdGEKIAlib29sCQlmbG9hdDhCeVZhbDsJLyogZmxv YXQ4LCBpbnQ4LCBldGMgcGFzcy1ieS12YWx1ZT8gKi8KIAogCS8qIEFyZSBkYXRhIHBhZ2Vz IHByb3RlY3RlZCBieSBjaGVja3N1bXM/IFplcm8gaWYgbm8gY2hlY2tzdW0gdmVyc2lvbiAq LwotCXVpbnQzMgkJZGF0YV9jaGVja3N1bV92ZXJzaW9uOworCXVpbnQzMgkJZGF0YV9jaGVj a3N1bV92ZXJzaW9uOwkJLyogcGVyc2lzdGVudCAqLwogCiAJLyoKIAkgKiBUcnVlIGlmIHRo ZSBkZWZhdWx0IHNpZ25lZG5lc3Mgb2YgY2hhciBpcyAic2lnbmVkIiBvbiBhIHBsYXRmb3Jt IHdoZXJlCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIv c3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCA4OTA4MjJlYWY3OS4uNjk4 N2JmYjNhYjkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQK KysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdApAQCAtMTIyNTYsNiArMTIy NTYsMjMgQEAKICAgcHJvbmFtZSA9PiAnanNvbmJfc3Vic2NyaXB0X2hhbmRsZXInLCBwcm9y ZXR0eXBlID0+ICdpbnRlcm5hbCcsCiAgIHByb2FyZ3R5cGVzID0+ICdpbnRlcm5hbCcsIHBy b3NyYyA9PiAnanNvbmJfc3Vic2NyaXB0X2hhbmRsZXInIH0sCiAKKyMgZGF0YSBjaGVja3N1 bSBtYW5hZ2VtZW50IGZ1bmN0aW9ucworeyBvaWQgPT4gJzkyNTgnLAorICBkZXNjciA9PiAn ZGlzYWJsZSBkYXRhIGNoZWNrc3VtcycsCisgIHByb25hbWUgPT4gJ3BnX2Rpc2FibGVfZGF0 YV9jaGVja3N1bXMnLCBwcm92b2xhdGlsZSA9PiAndicsIHByb3JldHR5cGUgPT4gJ3ZvaWQn LAorICBwcm9wYXJhbGxlbCA9PiAncicsCisgIHByb2FyZ3R5cGVzID0+ICcnLAorICBwcm9z cmMgPT4gJ2Rpc2FibGVfZGF0YV9jaGVja3N1bXMnIH0sCisKK3sgb2lkID0+ICc5MjU3JywK KyAgZGVzY3IgPT4gJ2VuYWJsZSBkYXRhIGNoZWNrc3VtcycsCisgIHByb25hbWUgPT4gJ3Bn X2VuYWJsZV9kYXRhX2NoZWNrc3VtcycsIHByb3ZvbGF0aWxlID0+ICd2JywgcHJvcmV0dHlw ZSA9PiAndm9pZCcsCisgIHByb3BhcmFsbGVsID0+ICdyJywKKyAgcHJvYXJndHlwZXMgPT4g J2ludDQgaW50NCBib29sJywgcHJvYWxsYXJndHlwZXMgPT4gJ3tpbnQ0LGludDQsYm9vbH0n LAorICBwcm9hcmdtb2RlcyA9PiAne2ksaSxpfScsCisgIHByb2FyZ25hbWVzID0+ICd7Y29z dF9kZWxheSxjb3N0X2xpbWl0LGZhc3R9JywKKyAgcHJvc3JjID0+ICdlbmFibGVfZGF0YV9j aGVja3N1bXMnIH0sCisKICMgY29sbGF0aW9uIG1hbmFnZW1lbnQgZnVuY3Rpb25zCiB7IG9p ZCA9PiAnMzQ0NScsIGRlc2NyID0+ICdpbXBvcnQgY29sbGF0aW9ucyBmcm9tIG9wZXJhdGlu ZyBzeXN0ZW0nLAogICBwcm9uYW1lID0+ICdwZ19pbXBvcnRfc3lzdGVtX2NvbGxhdGlvbnMn LCBwcm9jb3N0ID0+ICcxMDAnLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMv cHJvZ3Jlc3MuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3Byb2dyZXNzLmgKaW5kZXggN2M3 MzZlN2IwM2IuLmIxNzJhNWYyNGNlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5k cy9wcm9ncmVzcy5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3Byb2dyZXNzLmgKQEAg LTE1Nyw0ICsxNTcsMjAgQEAKICNkZWZpbmUgUFJPR1JFU1NfQ09QWV9UWVBFX1BJUEUgMwog I2RlZmluZSBQUk9HUkVTU19DT1BZX1RZUEVfQ0FMTEJBQ0sgNAogCisvKiBQcm9ncmVzcyBw YXJhbWV0ZXJzIGZvciBQUk9HUkVTU19EQVRBQ0hFQ0tTVU1TICovCisjZGVmaW5lIFBST0dS RVNTX0RBVEFDSEVDS1NVTVNfUEhBU0UJCTAKKyNkZWZpbmUgUFJPR1JFU1NfREFUQUNIRUNL U1VNU19EQlNfVE9UQUwJMQorI2RlZmluZSBQUk9HUkVTU19EQVRBQ0hFQ0tTVU1TX0RCU19E T05FCQkyCisjZGVmaW5lIFBST0dSRVNTX0RBVEFDSEVDS1NVTVNfUkVMU19UT1RBTAkzCisj ZGVmaW5lIFBST0dSRVNTX0RBVEFDSEVDS1NVTVNfUkVMU19ET05FCTQKKyNkZWZpbmUgUFJP R1JFU1NfREFUQUNIRUNLU1VNU19CTE9DS1NfVE9UQUwJNQorI2RlZmluZSBQUk9HUkVTU19E QVRBQ0hFQ0tTVU1TX0JMT0NLU19ET05FCTYKKworLyogUGhhc2VzIG9mIGRhdGFjaGVja3N1 bXN3b3JrZXIgb3BlcmF0aW9uICovCisjZGVmaW5lIFBST0dSRVNTX0RBVEFDSEVDS1NVTVNf UEhBU0VfRU5BQkxJTkcJCQkwCisjZGVmaW5lIFBST0dSRVNTX0RBVEFDSEVDS1NVTVNfUEhB U0VfRElTQUJMSU5HCQkJMQorI2RlZmluZSBQUk9HUkVTU19EQVRBQ0hFQ0tTVU1TX1BIQVNF X1dBSVRJTkcJCQkyCisjZGVmaW5lIFBST0dSRVNTX0RBVEFDSEVDS1NVTVNfUEhBU0VfV0FJ VElOR19URU1QUkVMCTMKKyNkZWZpbmUgUFJPR1JFU1NfREFUQUNIRUNLU1VNU19QSEFTRV9X QUlUSU5HX0NIRUNLUE9JTlQgNAorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L21pc2NhZG1pbi5oIGIvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmgKaW5kZXggNmYxNjc5NGVi NjMuLjEzM2U3ZmRlMjkwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaAor KysgYi9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaApAQCAtMzY1LDYgKzM2NSw5IEBAIHR5cGVk ZWYgZW51bSBCYWNrZW5kVHlwZQogCUJfV0FMX1NVTU1BUklaRVIsCiAJQl9XQUxfV1JJVEVS LAogCisJQl9EQVRBQ0hFQ0tTVU1TV09SS0VSX0xBVU5DSEVSLAorCUJfREFUQUNIRUNLU1VN U1dPUktFUl9XT1JLRVIsCisKIAkvKgogCSAqIExvZ2dlciBpcyBub3QgY29ubmVjdGVkIHRv IHNoYXJlZCBtZW1vcnkgYW5kIGRvZXMgbm90IGhhdmUgYSBQR1BST0MKIAkgKiBlbnRyeS4K QEAgLTM4OSw2ICszOTIsOSBAQCBleHRlcm4gUEdETExJTVBPUlQgQmFja2VuZFR5cGUgTXlC YWNrZW5kVHlwZTsKICNkZWZpbmUgQW1XYWxSZWNlaXZlclByb2Nlc3MoKQkJKE15QmFja2Vu ZFR5cGUgPT0gQl9XQUxfUkVDRUlWRVIpCiAjZGVmaW5lIEFtV2FsU3VtbWFyaXplclByb2Nl c3MoKQkoTXlCYWNrZW5kVHlwZSA9PSBCX1dBTF9TVU1NQVJJWkVSKQogI2RlZmluZSBBbVdh bFdyaXRlclByb2Nlc3MoKQkJKE15QmFja2VuZFR5cGUgPT0gQl9XQUxfV1JJVEVSKQorI2Rl ZmluZSBBbURhdGFDaGVja3N1bXNXb3JrZXJQcm9jZXNzKCkgXAorCShNeUJhY2tlbmRUeXBl ID09IEJfREFUQUNIRUNLU1VNU1dPUktFUl9MQVVOQ0hFUiB8fCBcCisJIE15QmFja2VuZFR5 cGUgPT0gQl9EQVRBQ0hFQ0tTVU1TV09SS0VSX1dPUktFUikKIAogI2RlZmluZSBBbVNwZWNp YWxXb3JrZXJQcm9jZXNzKCkgXAogCShBbUF1dG9WYWN1dW1MYXVuY2hlclByb2Nlc3MoKSB8 fCBcCkBAIC01MzQsNiArNTQwLDEwIEBAIGV4dGVybiBTaXplIEVzdGltYXRlQ2xpZW50Q29u bmVjdGlvbkluZm9TcGFjZSh2b2lkKTsKIGV4dGVybiB2b2lkIFNlcmlhbGl6ZUNsaWVudENv bm5lY3Rpb25JbmZvKFNpemUgbWF4c2l6ZSwgY2hhciAqc3RhcnRfYWRkcmVzcyk7CiBleHRl cm4gdm9pZCBSZXN0b3JlQ2xpZW50Q29ubmVjdGlvbkluZm8oY2hhciAqY29ubmluZm8pOwog CitleHRlcm4gdWludDMyIEdldExvY2FsRGF0YUNoZWNrc3VtVmVyc2lvbih2b2lkKTsKK2V4 dGVybiB1aW50MzIgR2V0Q3VycmVudERhdGFDaGVja3N1bVZlcnNpb24odm9pZCk7CitleHRl cm4gdm9pZCBJbml0TG9jYWxEYXRhQ2hlY2tzdW1WZXJzaW9uKHZvaWQpOworCiAvKiBpbiBl eGVjdXRvci9ub2RlSGFzaC5jICovCiBleHRlcm4gc2l6ZV90IGdldF9oYXNoX21lbW9yeV9s aW1pdCh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9kYXRh Y2hlY2tzdW1zd29ya2VyLmggYi9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2RhdGFjaGVja3N1 bXN3b3JrZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNTlj OTAwMGQ2NDYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2Rh dGFjaGVja3N1bXN3b3JrZXIuaApAQCAtMCwwICsxLDMxIEBACisvKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqCisgKiBkYXRhY2hlY2tzdW1zd29ya2VyLmgKKyAqCSAgaGVhZGVyIGZpbGUg Zm9yIGNoZWNrc3VtIGhlbHBlciBiYWNrZ3JvdW5kIHdvcmtlcgorICoKKyAqCisgKiBQb3J0 aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxv cG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBv ZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogc3JjL2luY2x1ZGUvcG9z dG1hc3Rlci9kYXRhY2hlY2tzdW1zd29ya2VyLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqLworI2lmbmRlZiBEQVRBQ0hFQ0tTVU1TV09SS0VSX0gKKyNkZWZpbmUgREFUQUNI RUNLU1VNU1dPUktFUl9ICisKKy8qIFNoYXJlZCBtZW1vcnkgKi8KK2V4dGVybiBTaXplIERh dGFDaGVja3N1bXNXb3JrZXJTaG1lbVNpemUodm9pZCk7CitleHRlcm4gdm9pZCBEYXRhQ2hl Y2tzdW1zV29ya2VyU2htZW1Jbml0KHZvaWQpOworCisvKiBTdGFydCB0aGUgYmFja2dyb3Vu ZCBwcm9jZXNzZXMgZm9yIGVuYWJsaW5nIG9yIGRpc2FibGluZyBjaGVja3N1bXMgKi8KK3Zv aWQJCVN0YXJ0RGF0YUNoZWNrc3Vtc1dvcmtlckxhdW5jaGVyKGJvb2wgZW5hYmxlX2NoZWNr c3VtcywKKwkJCQkJCQkJCQkJIGludCBjb3N0X2RlbGF5LAorCQkJCQkJCQkJCQkgaW50IGNv c3RfbGltaXQsCisJCQkJCQkJCQkJCSBib29sIGZhc3QpOworCisvKiBCYWNrZ3JvdW5kIHdv cmtlciBlbnRyeXBvaW50cyAqLwordm9pZAkJRGF0YUNoZWNrc3Vtc1dvcmtlckxhdW5jaGVy TWFpbihEYXR1bSBhcmcpOwordm9pZAkJRGF0YUNoZWNrc3Vtc1dvcmtlck1haW4oRGF0dW0g YXJnKTsKKworI2VuZGlmCQkJCQkJCS8qIERBVEFDSEVDS1NVTVNXT1JLRVJfSCAqLwpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZwYWdlLmggYi9zcmMvaW5jbHVkZS9z dG9yYWdlL2J1ZnBhZ2UuaAppbmRleCA2NjQ2YjZmNjM3MS4uNTMyNjc4MjE3MWYgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmcGFnZS5oCisrKyBiL3NyYy9pbmNsdWRl L3N0b3JhZ2UvYnVmcGFnZS5oCkBAIC0yMDUsNyArMjA1LDE3IEBAIHR5cGVkZWYgUGFnZUhl YWRlckRhdGEgKlBhZ2VIZWFkZXI7CiAgKiBoYW5kbGluZyBwYWdlcy4KICAqLwogI2RlZmlu ZSBQR19QQUdFX0xBWU9VVF9WRVJTSU9OCQk0CisKKy8qCisgKiBDaGVja3N1bSB2ZXJzaW9u IDAgaXMgdXNlZCBmb3Igd2hlbiBkYXRhIGNoZWNrc3VtcyBhcmUgZGlzYWJsZWQuCisgKiBQ R19EQVRBX0NIRUNLU1VNX1ZFUlNJT04gZGVmaW5lcyB0aGF0IGRhdGEgY2hlY2tzdW1zIGFy ZSBlbmFibGVkIGluIHRoZQorICogY2x1c3RlciBhbmQgUEdfREFUQV9DSEVDS1NVTV9JTlBS T0dSRVNTX3tPTnxPRkZ9X1ZFUlNJT04gZGVmaW5lcyB0aGF0IGRhdGEKKyAqIGNoZWNrc3Vt cyBhcmUgZWl0aGVyIGN1cnJlbnRseSBiZWluZyBlbmFibGVkIG9yIGRpc2FibGVkLgorICov CiAjZGVmaW5lIFBHX0RBVEFfQ0hFQ0tTVU1fVkVSU0lPTgkxCisjZGVmaW5lIFBHX0RBVEFf Q0hFQ0tTVU1fSU5QUk9HUkVTU19PTl9WRVJTSU9OCTIKKyNkZWZpbmUgUEdfREFUQV9DSEVD S1NVTV9JTlBST0dSRVNTX09GRl9WRVJTSU9OCTMKKwogCiAvKiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgkJ CQkJCXBhZ2Ugc3VwcG9ydCBmdW5jdGlvbnMKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0 b3JhZ2UvY2hlY2tzdW0uaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvY2hlY2tzdW0uaAppbmRl eCAyNWQxM2E3OThkMS4uNmZhZmY5NjJlZjAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0 b3JhZ2UvY2hlY2tzdW0uaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2NoZWNrc3VtLmgK QEAgLTE1LDYgKzE1LDE0IEBACiAKICNpbmNsdWRlICJzdG9yYWdlL2Jsb2NrLmgiCiAKK3R5 cGVkZWYgZW51bSBDaGVja3N1bVR5cGUKK3sKKwlEQVRBX0NIRUNLU1VNU19PRkYgPSAwLAor CURBVEFfQ0hFQ0tTVU1TX09OLAorCURBVEFfQ0hFQ0tTVU1TX0lOUFJPR1JFU1NfT04sCisJ REFUQV9DSEVDS1NVTVNfSU5QUk9HUkVTU19PRkYKK30gQ2hlY2tzdW1UeXBlOworCiAvKgog ICogQ29tcHV0ZSB0aGUgY2hlY2tzdW0gZm9yIGEgUG9zdGdyZXMgcGFnZS4gIFRoZSBwYWdl IG11c3QgYmUgYWxpZ25lZCBvbiBhCiAgKiA0LWJ5dGUgYm91bmRhcnkuCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9zdG9yYWdlL2x3bG9ja2xpc3QuaCBiL3NyYy9pbmNsdWRlL3N0b3Jh Z2UvbHdsb2NrbGlzdC5oCmluZGV4IGNmNTY1NDUyMzgyLi5hZmUzOWRiNzUzYyAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9sd2xvY2tsaXN0LmgKKysrIGIvc3JjL2luY2x1 ZGUvc3RvcmFnZS9sd2xvY2tsaXN0LmgKQEAgLTgzLDMgKzgzLDQgQEAgUEdfTFdMT0NLKDQ5 LCBXQUxTdW1tYXJpemVyKQogUEdfTFdMT0NLKDUwLCBEU01SZWdpc3RyeSkKIFBHX0xXTE9D Syg1MSwgSW5qZWN0aW9uUG9pbnQpCiBQR19MV0xPQ0soNTIsIFNlcmlhbENvbnRyb2wpCitQ R19MV0xPQ0soNTMsIERhdGFDaGVja3N1bXNXb3JrZXIpCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9zdG9yYWdlL3Byb2MuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvYy5oCmluZGV4 IDA3NTBlYzNjNDc0Li4xN2ZiMGRlY2FmZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3Rv cmFnZS9wcm9jLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jLmgKQEAgLTQ0Nyw5 ICs0NDcsMTAgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIFBHUFJPQyAqUHJlcGFyZWRYYWN0UHJv Y3M7CiAgKiBCYWNrZ3JvdW5kIHdyaXRlciwgY2hlY2twb2ludGVyLCBXQUwgd3JpdGVyLCBX QUwgc3VtbWFyaXplciwgYW5kIGFyY2hpdmVyCiAgKiBydW4gZHVyaW5nIG5vcm1hbCBvcGVy YXRpb24uICBTdGFydHVwIHByb2Nlc3MgYW5kIFdBTCByZWNlaXZlciBhbHNvIGNvbnN1bWUK ICAqIDIgc2xvdHMsIGJ1dCBXQUwgd3JpdGVyIGlzIGxhdW5jaGVkIG9ubHkgYWZ0ZXIgc3Rh cnR1cCBoYXMgZXhpdGVkLCBzbyB3ZQotICogb25seSBuZWVkIDYgc2xvdHMuCisgKiBvbmx5 IG5lZWQgNiBzbG90cyB0byBjb3ZlciB0aGVzZS4gVGhlIERhdGFDaGVja3N1bXMgd29ya2Vy IGFuZCBsYXVuY2hlcgorICogY2FuIGNvbnN1bWUgMiBzbG90cyB3aGVuIGRhdGEgY2hlY2tz dW1zIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkLgogICovCi0jZGVmaW5lIE5VTV9BVVhJTElB UllfUFJPQ1MJCTYKKyNkZWZpbmUgTlVNX0FVWElMSUFSWV9QUk9DUwkJOAogCiAvKiBjb25m aWd1cmFibGUgb3B0aW9ucyAqLwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBEZWFkbG9ja1Rp bWVvdXQ7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaCBi L3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oCmluZGV4IDAyMmZkOGVkOTMzLi44 OTM3ZmE2ZWQzZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFs LmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFsLmgKQEAgLTU0LDYgKzU0 LDExIEBAIHR5cGVkZWYgZW51bQogdHlwZWRlZiBlbnVtCiB7CiAJUFJPQ1NJR05BTF9CQVJS SUVSX1NNR1JSRUxFQVNFLCAvKiBhc2sgc21nciB0byBjbG9zZSBmaWxlcyAqLworCisJUFJP Q1NJR05BTF9CQVJSSUVSX0NIRUNLU1VNX09GRiwKKwlQUk9DU0lHTkFMX0JBUlJJRVJfQ0hF Q0tTVU1fSU5QUk9HUkVTU19PTiwKKwlQUk9DU0lHTkFMX0JBUlJJRVJfQ0hFQ0tTVU1fSU5Q Uk9HUkVTU19PRkYsCisJUFJPQ1NJR05BTF9CQVJSSUVSX0NIRUNLU1VNX09OLAogfSBQcm9j U2lnbmFsQmFycmllclR5cGU7CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGls cy9iYWNrZW5kX3Byb2dyZXNzLmggYi9zcmMvaW5jbHVkZS91dGlscy9iYWNrZW5kX3Byb2dy ZXNzLmgKaW5kZXggZGRhODEzYWI0MDcuLmM2NjRlOTJkYmZlIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS91dGlscy9iYWNrZW5kX3Byb2dyZXNzLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRp bHMvYmFja2VuZF9wcm9ncmVzcy5oCkBAIC0yOCw2ICsyOCw3IEBAIHR5cGVkZWYgZW51bSBQ cm9ncmVzc0NvbW1hbmRUeXBlCiAJUFJPR1JFU1NfQ09NTUFORF9DUkVBVEVfSU5ERVgsCiAJ UFJPR1JFU1NfQ09NTUFORF9CQVNFQkFDS1VQLAogCVBST0dSRVNTX0NPTU1BTkRfQ09QWSwK KwlQUk9HUkVTU19DT01NQU5EX0RBVEFDSEVDS1NVTVMsCiB9IFByb2dyZXNzQ29tbWFuZFR5 cGU7CiAKICNkZWZpbmUgUEdTVEFUX05VTV9QUk9HUkVTU19QQVJBTQkyMApkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvTWFrZWZpbGUgYi9zcmMvdGVzdC9NYWtlZmlsZQppbmRleCA1MTFhNzJl NjIzOC4uMjc4Y2UzZThhODYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L01ha2VmaWxlCisrKyBi L3NyYy90ZXN0L01ha2VmaWxlCkBAIC0xMiw3ICsxMiwxNiBAQCBzdWJkaXIgPSBzcmMvdGVz dAogdG9wX2J1aWxkZGlyID0gLi4vLi4KIGluY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9N YWtlZmlsZS5nbG9iYWwKIAotU1VCRElSUyA9IHBlcmwgcG9zdG1hc3RlciByZWdyZXNzIGlz b2xhdGlvbiBtb2R1bGVzIGF1dGhlbnRpY2F0aW9uIHJlY292ZXJ5IHN1YnNjcmlwdGlvbgor U1VCRElSUyA9IFwKKwkJcGVybCBcCisJCXBvc3RtYXN0ZXIgXAorCQlyZWdyZXNzIFwKKwkJ aXNvbGF0aW9uIFwKKwkJbW9kdWxlcyBcCisJCWF1dGhlbnRpY2F0aW9uIFwKKwkJcmVjb3Zl cnkgXAorCQlzdWJzY3JpcHRpb24gXAorCQljaGVja3N1bQogCiBpZmVxICgkKHdpdGhfaWN1 KSx5ZXMpCiBTVUJESVJTICs9IGljdQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvY2hlY2tzdW0v LmdpdGlnbm9yZSBiL3NyYy90ZXN0L2NoZWNrc3VtLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjg3MWU5NDNkNTBlCi0tLSAvZGV2L251bGwK KysrIGIvc3JjL3Rlc3QvY2hlY2tzdW0vLmdpdGlnbm9yZQpAQCAtMCwwICsxLDIgQEAKKyMg R2VuZXJhdGVkIGJ5IHRlc3Qgc3VpdGUKKy90bXBfY2hlY2svCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9jaGVja3N1bS9NYWtlZmlsZSBiL3NyYy90ZXN0L2NoZWNrc3VtL01ha2VmaWxlCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mZDAzYmY3M2RmNAotLS0g L2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L2NoZWNrc3VtL01ha2VmaWxlCkBAIC0wLDAgKzEs MjMgQEAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIE1ha2VmaWxlIGZvciBzcmMvdGVz dC9jaGVja3N1bQorIworIyBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNCwgUG9z dGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyMgUG9ydGlvbnMgQ29weXJpZ2h0 IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyMK KyMgc3JjL3Rlc3QvY2hlY2tzdW0vTWFrZWZpbGUKKyMKKyMtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisKK3N1YmRpciA9IHNyYy90ZXN0L2NoZWNrc3VtCit0b3BfYnVpbGRkaXIgPSAuLi8uLi8u LgoraW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAorCitjaGVj azoKKwkkKHByb3ZlX2NoZWNrKQorCitpbnN0YWxsY2hlY2s6CisJJChwcm92ZV9pbnN0YWxs Y2hlY2spCisKK2NsZWFuIGRpc3RjbGVhbiBtYWludGFpbmVyLWNsZWFuOgorCXJtIC1yZiB0 bXBfY2hlY2sKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2NoZWNrc3VtL1JFQURNRSBiL3NyYy90 ZXN0L2NoZWNrc3VtL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMC4uMGYwMzE3MDYwYjMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9jaGVja3N1 bS9SRUFETUUKQEAgLTAsMCArMSwyMiBAQAorc3JjL3Rlc3QvY2hlY2tzdW0vUkVBRE1FCisK K1JlZ3Jlc3Npb24gdGVzdHMgZm9yIGRhdGEgY2hlY2tzdW1zCis9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGRpcmVjdG9yeSBjb250YWlucyBhIHRlc3Qg c3VpdGUgZm9yIGVuYWJsaW5nIGRhdGEgY2hlY2tzdW1zCitpbiBhIHJ1bm5pbmcgY2x1c3Rl ci4KKworUnVubmluZyB0aGUgdGVzdHMKKz09PT09PT09PT09PT09PT09CisKKyAgICBtYWtl IGNoZWNrCisKK29yCisKKyAgICBtYWtlIGluc3RhbGxjaGVjaworCitOT1RFOiBUaGlzIGNy ZWF0ZXMgYSB0ZW1wb3JhcnkgaW5zdGFsbGF0aW9uIChpbiB0aGUgY2FzZSBvZiAiY2hlY2si KSwKK3dpdGggbXVsdGlwbGUgbm9kZXMsIGJlIHRoZXkgbWFzdGVyIG9yIHN0YW5kYnkocykg Zm9yIHRoZSBwdXJwb3NlIG9mCit0aGUgdGVzdHMuCisKK05PVEU6IFRoaXMgcmVxdWlyZXMg dGhlIC0tZW5hYmxlLXRhcC10ZXN0cyBhcmd1bWVudCB0byBjb25maWd1cmUuCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9jaGVja3N1bS9tZXNvbi5idWlsZCBiL3NyYy90ZXN0L2NoZWNrc3Vt L21lc29uLmJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41 Zjk2YjVjMjQ2ZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L2NoZWNrc3VtL21lc29u LmJ1aWxkCkBAIC0wLDAgKzEsMTUgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDI0LCBQb3N0Z3Jl U1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCit0ZXN0cyArPSB7CisgICduYW1lJzog J2NoZWNrc3VtcycsCisgICdzZCc6IG1lc29uLmN1cnJlbnRfc291cmNlX2RpcigpLAorICAn YmQnOiBtZXNvbi5jdXJyZW50X2J1aWxkX2RpcigpLAorICAndGFwJzogeworICAgICd0ZXN0 cyc6IFsKKyAgICAgICd0LzAwMV9iYXNpYy5wbCcsCisgICAgICAndC8wMDJfcmVzdGFydHMu cGwnLAorICAgICAgJ3QvMDAzX3N0YW5kYnlfcmVzdGFydHMucGwnLAorICAgICAgJ3QvMDA0 X29mZmxpbmUucGwnLAorICAgIF0sCisgIH0sCit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9j aGVja3N1bS90LzAwMV9iYXNpYy5wbCBiL3NyYy90ZXN0L2NoZWNrc3VtL3QvMDAxX2Jhc2lj LnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40YzY0ZjZhMTRm YwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L2NoZWNrc3VtL3QvMDAxX2Jhc2ljLnBs CkBAIC0wLDAgKzEsODggQEAKKworIyBDb3B5cmlnaHQgKGMpIDIwMjQsIFBvc3RncmVTUUwg R2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKKyMgVGVzdCBzdWl0ZSBmb3IgdGVzdGluZyBl bmFibGluZyBkYXRhIGNoZWNrc3VtcyBpbiBhbiBvbmxpbmUgY2x1c3RlcgordXNlIHN0cmlj dDsKK3VzZSB3YXJuaW5ncyBGQVRBTCA9PiAnYWxsJzsKKwordXNlIFBvc3RncmVTUUw6OlRl c3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6 TW9yZTsKKworIyBwZ19lbmFibGVfY2hlY2tzdW1zIHRha2UgdGhyZWUgcGFyYW1zOiBjb3N0 X2RlbGF5LCBjb3N0X2xpbWl0IGFuZCBmYXN0LiBGb3IKKyMgdGVzdGluZyB3ZSBhbHdheXMg d2FudCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgJ2Zhc3QnIHdpdGggVHJ1 ZQorIyB3aGljaCB3aWxsIGNhdXNlIGltbWVkaWF0ZSBjaGVja3BvaW50cy4gMCBhbmQgMTAw IGFyZSB0aGUgZGVmYXVsdHMgZm9yCisjIGNvc3RfZGVsYXkgYW5kIGNvc3RfbGltaXQgd2hp Y2ggYXJlIGZpbmUgdG8gdXNlIGZvciB0ZXN0aW5nIHNvIGxldCdzIGtlZXAKKyMgdGhlbS4K K215ICRlbmFibGVfcGFyYW1zID0gJzAsIDEwMCwgdHJ1ZSc7CisKKyMgSW5pdGlhbGl6ZSBu b2RlIHdpdGggY2hlY2tzdW1zIGRpc2FibGVkLgorbXkgJG5vZGUgPSBQb3N0Z3JlU1FMOjpU ZXN0OjpDbHVzdGVyLT5uZXcoJ21haW4nKTsKKyRub2RlLT5pbml0KG5vX2RhdGFfY2hlY2tz dW1zID0+IDEpOworJG5vZGUtPnN0YXJ0OworCisjIENyZWF0ZSBzb21lIGNvbnRlbnQgdG8g aGF2ZSB1bi1jaGVja3N1bW1lZCBkYXRhIGluIHRoZSBjbHVzdGVyCiskbm9kZS0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJMRSB0IEFTIFNFTEVDVCBnZW5lcmF0ZV9z ZXJpZXMoMSwxMDAwMCkgQVMgYTsiKTsKKworIyBFbnN1cmUgdGhhdCBjaGVja3N1bXMgYXJl IHR1cm5lZCBvZmYKK215ICRyZXN1bHQgPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs CisJIlNFTEVDVCBzZXR0aW5nIEZST00gcGdfY2F0YWxvZy5wZ19zZXR0aW5ncyBXSEVSRSBu YW1lID0gJ2RhdGFfY2hlY2tzdW1zJzsiCispOworaXMoJHJlc3VsdCwgJ29mZicsICdlbnN1 cmUgY2hlY2tzdW1zIGFyZSBkaXNhYmxlZCcpOworCisjIEVuYWJsZSBkYXRhIGNoZWNrc3Vt cworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGdfZW5hYmxlX2Rh dGFfY2hlY2tzdW1zKCRlbmFibGVfcGFyYW1zKTsiKTsKKworIyBXYWl0IGZvciBjaGVja3N1 bXMgdG8gYmVjb21lIGVuYWJsZWQKKyRyZXN1bHQgPSAkbm9kZS0+cG9sbF9xdWVyeV91bnRp bCgKKwkncG9zdGdyZXMnLAorCSJTRUxFQ1Qgc2V0dGluZyBGUk9NIHBnX2NhdGFsb2cucGdf c2V0dGluZ3MgV0hFUkUgbmFtZSA9ICdkYXRhX2NoZWNrc3Vtcyc7IiwKKwknb24nKTsKK2lz KCRyZXN1bHQsIDEsICdlbnN1cmUgY2hlY2tzdW1zIGFyZSBlbmFibGVkJyk7CisKKyMgUnVu IGEgZHVtbXkgcXVlcnkganVzdCB0byBtYWtlIHN1cmUgd2UgY2FuIHJlYWQgYmFjayBzb21l IGRhdGEKKyRyZXN1bHQgPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1Qg Y291bnQoKikgRlJPTSB0Iik7CitpcygkcmVzdWx0LCAnMTAwMDAnLCAnZW5zdXJlIGNoZWNr c3VtbWVkIHBhZ2VzIGNhbiBiZSByZWFkIGJhY2snKTsKKworIyBFbmFibGUgZGF0YSBjaGVj a3N1bXMgYWdhaW4gd2hpY2ggc2hvdWxkIGJlIGEgbm8tb3AuLgorJG5vZGUtPnNhZmVfcHNx bCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGdfZW5hYmxlX2RhdGFfY2hlY2tzdW1zKCRlbmFi bGVfcGFyYW1zKTsiKTsKKyMgLi5hbmQgbWFrZSBzdXJlIHdlIGNhbiBzdGlsbCByZWFkL3dy aXRlIGRhdGEKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlVQREFURSB0IFNFVCBh ID0gYSArIDE7Iik7CiskcmVzdWx0ID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi U0VMRUNUIGNvdW50KCopIEZST00gdCIpOworaXMoJHJlc3VsdCwgJzEwMDAwJywgJ2Vuc3Vy ZSBjaGVja3N1bW1lZCBwYWdlcyBjYW4gYmUgcmVhZCBiYWNrJyk7CisKKyMgRGlzYWJsZSBj aGVja3N1bXMgYWdhaW4KKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBw Z19kaXNhYmxlX2RhdGFfY2hlY2tzdW1zKCk7Iik7CisKKyRyZXN1bHQgPSAkbm9kZS0+cG9s bF9xdWVyeV91bnRpbCgKKwkncG9zdGdyZXMnLAorCSJTRUxFQ1Qgc2V0dGluZyBGUk9NIHBn X2NhdGFsb2cucGdfc2V0dGluZ3MgV0hFUkUgbmFtZSA9ICdkYXRhX2NoZWNrc3Vtcyc7IiwK Kwknb2ZmJyk7CitpcygkcmVzdWx0LCAxLCAnZW5zdXJlIGNoZWNrc3VtcyBhcmUgZGlzYWJs ZWQnKTsKKworIyBUZXN0IHJlYWRpbmcgYWdhaW4KKyRyZXN1bHQgPSAkbm9kZS0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJPTSB0Iik7CitpcygkcmVzdWx0 LCAnMTAwMDAnLCAnZW5zdXJlIHByZXZpb3VzbHkgY2hlY2tzdW1tZWQgcGFnZXMgY2FuIGJl IHJlYWQgYmFjaycpOworCisjIFJlLWVuYWJsZSBjaGVja3N1bXMgYW5kIG1ha2Ugc3VyZSB0 aGF0IHRoZSB1bmRlcmx5aW5nIGRhdGEgaGFzIGNoYW5nZWQgdG8KKyMgZW5zdXJlIHRoYXQg Y2hlY2tzdW1zIHdpbGwgYmUgZGlmZmVyZW50LgorJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiVVBEQVRFIHQgU0VUIGEgPSBhICsgMTsiKTsKKworJG5vZGUtPnNhZmVfcHNxbCgn cG9zdGdyZXMnLAorCSJTRUxFQ1QgcGdfZW5hYmxlX2RhdGFfY2hlY2tzdW1zKCRlbmFibGVf cGFyYW1zKTsiKTsKKyRyZXN1bHQgPSAkbm9kZS0+cG9sbF9xdWVyeV91bnRpbCgKKwkncG9z dGdyZXMnLAorCSJTRUxFQ1Qgc2V0dGluZyBGUk9NIHBnX2NhdGFsb2cucGdfc2V0dGluZ3Mg V0hFUkUgbmFtZSA9ICdkYXRhX2NoZWNrc3Vtcyc7IiwKKwknb24nKTsKK2lzKCRyZXN1bHQs IDEsICdlbnN1cmUgY2hlY2tzdW1zIGFyZSBlbmFibGVkJyk7CisKKyMgUnVuIGEgZHVtbXkg cXVlcnkganVzdCB0byBtYWtlIHN1cmUgd2UgY2FuIHJlYWQgYmFjayB0aGUgZGF0YQorJHJl c3VsdCA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBG Uk9NIHQiKTsKK2lzKCRyZXN1bHQsICcxMDAwMCcsICdlbnN1cmUgY2hlY2tzdW1tZWQgcGFn ZXMgY2FuIGJlIHJlYWQgYmFjaycpOworCiskbm9kZS0+c3RvcDsKKworZG9uZV90ZXN0aW5n KCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9jaGVja3N1bS90LzAwMl9yZXN0YXJ0cy5wbCBi L3NyYy90ZXN0L2NoZWNrc3VtL3QvMDAyX3Jlc3RhcnRzLnBsCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yNjk3YjcyMjI1NwotLS0gL2Rldi9udWxsCisrKyBi L3NyYy90ZXN0L2NoZWNrc3VtL3QvMDAyX3Jlc3RhcnRzLnBsCkBAIC0wLDAgKzEsOTIgQEAK KworIyBDb3B5cmlnaHQgKGMpIDIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50 IEdyb3VwCisKKyMgVGVzdCBzdWl0ZSBmb3IgdGVzdGluZyBlbmFibGluZyBkYXRhIGNoZWNr c3VtcyBpbiBhbiBvbmxpbmUgY2x1c3RlciB3aXRoCisjIHJlc3RhcnRpbmcgdGhlIHByb2Nl c3NpbmcKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3MgRkFUQUwgPT4gJ2FsbCc7CisKK3Vz ZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0 aWxzOwordXNlIFRlc3Q6Ok1vcmU7CisKKyMgcGdfZW5hYmxlX2NoZWNrc3VtcyB0YWtlIHRo cmVlIHBhcmFtczogY29zdF9kZWxheSwgY29zdF9saW1pdCBhbmQgZmFzdC4gRm9yCisjIHRl c3Rpbmcgd2UgYWx3YXlzIHdhbnQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgdmFsdWUgZm9y ICdmYXN0JyB3aXRoIFRydWUKKyMgd2hpY2ggd2lsbCBjYXVzZSBpbW1lZGlhdGUgY2hlY2tw b2ludHMuIDAgYW5kIDEwMCBhcmUgdGhlIGRlZmF1bHRzIGZvcgorIyBjb3N0X2RlbGF5IGFu ZCBjb3N0X2xpbWl0IHdoaWNoIGFyZSBmaW5lIHRvIHVzZSBmb3IgdGVzdGluZyBzbyBsZXQn cyBrZWVwCisjIHRoZW0uCitteSAkZW5hYmxlX3BhcmFtcyA9ICcwLCAxMDAsIHRydWUnOwor CisjIEluaXRpYWxpemUgbm9kZSB3aXRoIGNoZWNrc3VtcyBkaXNhYmxlZC4KK215ICRub2Rl ID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdtYWluJyk7Ciskbm9kZS0+aW5p dChub19kYXRhX2NoZWNrc3VtcyA9PiAxKTsKKyRub2RlLT5zdGFydDsKKworIyBDcmVhdGUg c29tZSBjb250ZW50IHRvIGhhdmUgdW4tY2hlY2tzdW1tZWQgZGF0YSBpbiB0aGUgY2x1c3Rl cgorJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVEFCTEUgdCBBUyBT RUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDApIEFTIGE7Iik7CisKKyMgRW5zdXJlIHRo YXQgY2hlY2tzdW1zIGFyZSBkaXNhYmxlZAorbXkgJHJlc3VsdCA9ICRub2RlLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHNldHRpbmcgRlJPTSBwZ19jYXRhbG9nLnBnX3Nl dHRpbmdzIFdIRVJFIG5hbWUgPSAnZGF0YV9jaGVja3N1bXMnOyIKKyk7CitpcygkcmVzdWx0 LCAnb2ZmJywgJ2Vuc3VyZSBjaGVja3N1bXMgYXJlIGRpc2FibGVkJyk7CisKKyMgQ3JlYXRl IGEgYmFycmllciBmb3IgY2hlY2tzdW1taW5nIHRvIGJsb2NrIG9uLCBpbiB0aGlzIGNhc2Ug YSBwcmUtZXhpc3RpbmcKKyMgdGVtcG9yYXJ5IHRhYmxlIHdoaWNoIGlzIGtlcHQgb3BlbiB3 aGlsZSBwcm9jZXNzaW5nIGlzIHN0YXJ0ZWQuIFdlIGNhbgorIyBhY2NvbXBsaXNoIHRoaXMg Ynkgc2V0dGluZyB1cCBhbiBpbnRlcmFjdGl2ZSBwc3FsIHByb2Nlc3Mgd2hpY2gga2VlcHMg dGhlCisjIHRlbXBvcmFyeSB0YWJsZSBjcmVhdGVkIGFzIHdlIGVuYWJsZSBjaGVja3N1bXMg aW4gYW5vdGhlciBwc3FsIHByb2Nlc3MuCisKK215ICRic2Vzc2lvbiA9ICRub2RlLT5iYWNr Z3JvdW5kX3BzcWwoJ3Bvc3RncmVzJyk7CiskYnNlc3Npb24tPnF1ZXJ5X3NhZmUoJ0NSRUFU RSBURU1QT1JBUlkgVEFCTEUgdHQgKGEgaW50ZWdlcik7Jyk7CisKKyMgSW4gYW5vdGhlciBz ZXNzaW9uLCBtYWtlIHN1cmUgd2UgY2FuIHNlZSB0aGUgYmxvY2tpbmcgdGVtcCB0YWJsZSBi dXQgc3RhcnQKKyMgcHJvY2Vzc2luZyBhbnl3YXlzIGFuZCBjaGVjayB0aGF0IHdlIGFyZSBi bG9ja2VkIHdpdGggYSBwcm9wZXIgd2FpdCBldmVudC4KKyRyZXN1bHQgPSAkbm9kZS0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCByZWxwZXJzaXN0ZW5jZSBGUk9NIHBnX2Nh dGFsb2cucGdfY2xhc3MgV0hFUkUgcmVsbmFtZSA9ICd0dCc7Iik7CitpcygkcmVzdWx0LCAn dCcsICdlbnN1cmUgd2UgY2FuIHNlZSB0aGUgdGVtcG9yYXJ5IHRhYmxlJyk7CisKKyRub2Rl LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHBnX2VuYWJsZV9kYXRhX2NoZWNr c3VtcygkZW5hYmxlX3BhcmFtcyk7Iik7CisKKyRyZXN1bHQgPSAkbm9kZS0+cG9sbF9xdWVy eV91bnRpbCgKKwkncG9zdGdyZXMnLAorCSJTRUxFQ1Qgc2V0dGluZyBGUk9NIHBnX2NhdGFs b2cucGdfc2V0dGluZ3MgV0hFUkUgbmFtZSA9ICdkYXRhX2NoZWNrc3Vtcyc7IiwKKwknaW5w cm9ncmVzcy1vbicpOworaXMoJHJlc3VsdCwgJzEnLCAiZW5zdXJlIGNoZWNrc3VtcyBhcmVu J3QgZW5hYmxlZCB5ZXQiKTsKKworJGJzZXNzaW9uLT5xdWl0OworJG5vZGUtPnN0b3A7Cisk bm9kZS0+c3RhcnQ7CisKKyRyZXN1bHQgPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs CisJIlNFTEVDVCBzZXR0aW5nIEZST00gcGdfY2F0YWxvZy5wZ19zZXR0aW5ncyBXSEVSRSBu YW1lID0gJ2RhdGFfY2hlY2tzdW1zJzsiCispOworaXMoJHJlc3VsdCwgJ2lucHJvZ3Jlc3Mt b24nLCAiZW5zdXJlIGNoZWNrc3VtcyBhcmVuJ3QgZW5hYmxlZCB5ZXQiKTsKKworJG5vZGUt PnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGdfZW5hYmxlX2RhdGFfY2hlY2tz dW1zKCRlbmFibGVfcGFyYW1zKTsiKTsKKworJHJlc3VsdCA9ICRub2RlLT5wb2xsX3F1ZXJ5 X3VudGlsKAorCSdwb3N0Z3JlcycsCisJIlNFTEVDVCBzZXR0aW5nIEZST00gcGdfY2F0YWxv Zy5wZ19zZXR0aW5ncyBXSEVSRSBuYW1lID0gJ2RhdGFfY2hlY2tzdW1zJzsiLAorCSdvbicp OworaXMoJHJlc3VsdCwgMSwgJ2Vuc3VyZSBjaGVja3N1bXMgYXJlIHR1cm5lZCBvbicpOwor CiskcmVzdWx0ID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50 KCopIEZST00gdCIpOworaXMoJHJlc3VsdCwgJzEwMDAwJywgJ2Vuc3VyZSBjaGVja3N1bW1l ZCBwYWdlcyBjYW4gYmUgcmVhZCBiYWNrJyk7CisKKyRyZXN1bHQgPSAkbm9kZS0+cG9sbF9x dWVyeV91bnRpbCgKKwkncG9zdGdyZXMnLAorCSJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19z dGF0X2FjdGl2aXR5IFdIRVJFIGJhY2tlbmRfdHlwZSBMSUtFICdkYXRhY2hlY2tzdW1zd29y a2VyJSc7IiwKKwknMCcpOworaXMoJHJlc3VsdCwgMSwgJ2F3YWl0IGRhdGFjaGVja3N1bXMg d29ya2VyL2xhdW5jaGVyIHRlcm1pbmF0aW9uJyk7CisKKyRyZXN1bHQgPSAkbm9kZS0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgcGdfZGlzYWJsZV9kYXRhX2NoZWNrc3Vtcygp OyIpOworJHJlc3VsdCA9ICRub2RlLT5wb2xsX3F1ZXJ5X3VudGlsKAorCSdwb3N0Z3Jlcycs CisJIlNFTEVDVCBzZXR0aW5nIEZST00gcGdfY2F0YWxvZy5wZ19zZXR0aW5ncyBXSEVSRSBu YW1lID0gJ2RhdGFfY2hlY2tzdW1zJzsiLAorCSdvZmYnKTsKK2lzKCRyZXN1bHQsIDEsICdl bnN1cmUgY2hlY2tzdW1zIGFyZSB0dXJuZWQgb2ZmJyk7CisKK2RvbmVfdGVzdGluZygpOwpk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvY2hlY2tzdW0vdC8wMDNfc3RhbmRieV9yZXN0YXJ0cy5w bCBiL3NyYy90ZXN0L2NoZWNrc3VtL3QvMDAzX3N0YW5kYnlfcmVzdGFydHMucGwKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjY3ODI2NjRmNGU2Ci0tLSAvZGV2 L251bGwKKysrIGIvc3JjL3Rlc3QvY2hlY2tzdW0vdC8wMDNfc3RhbmRieV9yZXN0YXJ0cy5w bApAQCAtMCwwICsxLDEzOSBAQAorCisjIENvcHlyaWdodCAoYykgMjAyNCwgUG9zdGdyZVNR TCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKworIyBUZXN0IHN1aXRlIGZvciB0ZXN0aW5n IGVuYWJsaW5nIGRhdGEgY2hlY2tzdW1zIGluIGFuIG9ubGluZSBjbHVzdGVyIHdpdGgKKyMg c3RyZWFtaW5nIHJlcGxpY2F0aW9uCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZBVEFM ID0+ICdhbGwnOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdy ZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKKworIyBwZ19lbmFibGVfY2hl Y2tzdW1zIHRha2UgdGhyZWUgcGFyYW1zOiBjb3N0X2RlbGF5LCBjb3N0X2xpbWl0IGFuZCBm YXN0LiBGb3IKKyMgdGVzdGluZyB3ZSBhbHdheXMgd2FudCB0byBvdmVycmlkZSB0aGUgZGVm YXVsdCB2YWx1ZSBmb3IgJ2Zhc3QnIHdpdGggVHJ1ZQorIyB3aGljaCB3aWxsIGNhdXNlIGlt bWVkaWF0ZSBjaGVja3BvaW50cy4gMCBhbmQgMTAwIGFyZSB0aGUgZGVmYXVsdHMgZm9yCisj IGNvc3RfZGVsYXkgYW5kIGNvc3RfbGltaXQgd2hpY2ggYXJlIGZpbmUgdG8gdXNlIGZvciB0 ZXN0aW5nIHNvIGxldCdzIGtlZXAKKyMgdGhlbS4KK215ICRlbmFibGVfcGFyYW1zID0gJzAs IDEwMCwgdHJ1ZSc7CisKKyMgSW5pdGlhbGl6ZSBwcmltYXJ5IG5vZGUKK215ICRub2RlX3By aW1hcnkgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3ByaW1hcnknKTsKKyRu b2RlX3ByaW1hcnktPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAxLCBub19kYXRhX2NoZWNr c3VtcyA9PiAxKTsKKyRub2RlX3ByaW1hcnktPnN0YXJ0OworCitteSAkc2xvdG5hbWUgPSAn cGh5c2ljYWxfc2xvdCc7Ciskbm9kZV9wcmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywK KwkiU0VMRUNUIHBnX2NyZWF0ZV9waHlzaWNhbF9yZXBsaWNhdGlvbl9zbG90KCckc2xvdG5h bWUnKSIpOworCisjIFRha2UgYmFja3VwCitteSAkYmFja3VwX25hbWUgPSAnbXlfYmFja3Vw JzsKKyRub2RlX3ByaW1hcnktPmJhY2t1cCgkYmFja3VwX25hbWUpOworCisjIENyZWF0ZSBz dHJlYW1pbmcgc3RhbmRieSBsaW5raW5nIHRvIHByaW1hcnkKK215ICRub2RlX3N0YW5kYnlf MSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnc3RhbmRieV8xJyk7Ciskbm9k ZV9zdGFuZGJ5XzEtPmluaXRfZnJvbV9iYWNrdXAoJG5vZGVfcHJpbWFyeSwgJGJhY2t1cF9u YW1lLAorCWhhc19zdHJlYW1pbmcgPT4gMSk7Ciskbm9kZV9zdGFuZGJ5XzEtPmFwcGVuZF9j b25mKAorCSdwb3N0Z3Jlc3FsLmNvbmYnLCBxcVsKK3ByaW1hcnlfc2xvdF9uYW1lID0gJyRz bG90bmFtZScKK10pOworJG5vZGVfc3RhbmRieV8xLT5zdGFydDsKKworIyBDcmVhdGUgc29t ZSBjb250ZW50IG9uIHRoZSBwcmltYXJ5IHRvIGhhdmUgdW4tY2hlY2tzdW1tZWQgZGF0YSBp biB0aGUgY2x1c3RlcgorJG5vZGVfcHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJ IkNSRUFURSBUQUJMRSB0IEFTIFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMCkgQVMg YTsiKTsKKworIyBXYWl0IGZvciBzdGFuZGJ5cyB0byBjYXRjaCB1cAorJG5vZGVfcHJpbWFy eS0+d2FpdF9mb3JfY2F0Y2h1cCgkbm9kZV9zdGFuZGJ5XzEsICdyZXBsYXknLAorCSRub2Rl X3ByaW1hcnktPmxzbignaW5zZXJ0JykpOworCisjIENoZWNrIHRoYXQgY2hlY2tzdW1zIGFy ZSB0dXJuZWQgb2ZmIG9uIGFsbCBub2RlcworbXkgJHJlc3VsdCA9ICRub2RlX3ByaW1hcnkt PnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1Qgc2V0dGluZyBGUk9NIHBnX2NhdGFs b2cucGdfc2V0dGluZ3MgV0hFUkUgbmFtZSA9ICdkYXRhX2NoZWNrc3Vtcyc7IgorKTsKK2lz KCRyZXN1bHQsICJvZmYiLCAnZW5zdXJlIGNoZWNrc3VtcyBhcmUgdHVybmVkIG9mZiBvbiBw cmltYXJ5Jyk7CisKKyRyZXN1bHQgPSAkbm9kZV9zdGFuZGJ5XzEtPnNhZmVfcHNxbCgncG9z dGdyZXMnLAorCSJTRUxFQ1Qgc2V0dGluZyBGUk9NIHBnX2NhdGFsb2cucGdfc2V0dGluZ3Mg V0hFUkUgbmFtZSA9ICdkYXRhX2NoZWNrc3Vtcyc7IgorKTsKK2lzKCRyZXN1bHQsICJvZmYi LCAnZW5zdXJlIGNoZWNrc3VtcyBhcmUgdHVybmVkIG9mZiBvbiBzdGFuZGJ5XzEnKTsKKwor IyBFbmFibGUgY2hlY2tzdW1zIGZvciB0aGUgY2x1c3RlcgorJG5vZGVfcHJpbWFyeS0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBwZ19lbmFibGVfZGF0YV9jaGVja3N1bXMo JGVuYWJsZV9wYXJhbXMpOyIpOworCisjIEVuc3VyZSB0aGF0IHRoZSBwcmltYXJ5IHN3aXRj aGVzIHRvICJpbnByb2dyZXNzLW9uIgorJHJlc3VsdCA9ICRub2RlX3ByaW1hcnktPnBvbGxf cXVlcnlfdW50aWwoCisJJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHNldHRpbmcgRlJPTSBwZ19j YXRhbG9nLnBnX3NldHRpbmdzIFdIRVJFIG5hbWUgPSAnZGF0YV9jaGVja3N1bXMnOyIsCisJ ImlucHJvZ3Jlc3Mtb24iKTsKK2lzKCRyZXN1bHQsIDEsICdlbnN1cmUgY2hlY2tzdW1zIGFy ZSBpbiBwcm9ncmVzcyBvbiBwcmltYXJ5Jyk7CisKKyMgV2FpdCBmb3IgY2hlY2tzdW0gZW5h YmxlIHRvIGJlIHJlcGxheWVkCiskbm9kZV9wcmltYXJ5LT53YWl0X2Zvcl9jYXRjaHVwKCRu b2RlX3N0YW5kYnlfMSwgJ3JlcGxheScpOworCisjIEVuc3VyZSB0aGF0IHRoZSBzdGFuZGJ5 IGhhcyBzd2l0Y2hlZCB0byAiaW5wcm9ncmVzcy1vbiIgb3IgIm9uIi4gIE5vcm1hbGx5IGl0 CisjIHdvdWxkIGJlICJpbnByb2dyZXNzLW9uIiwgYnV0IGl0IGlzIHRoZW9yZXRpY2FsbHkg cG9zc2libGUgZm9yIHRoZSBwcmltYXJ5IHRvCisjIGNvbXBsZXRlIHRoZSBjaGVja3N1bSBl bmFibGluZyAqYW5kKiBoYXZlIHRoZSBzdGFuZGJ5IHJlcGxheSB0aGF0IHJlY29yZAorIyBi ZWZvcmUgd2UgcmVhY2ggdGhlIGNoZWNrIGJlbG93LgorJHJlc3VsdCA9ICRub2RlX3N0YW5k YnlfMS0+cG9sbF9xdWVyeV91bnRpbCgKKwkncG9zdGdyZXMnLAorCSJTRUxFQ1Qgc2V0dGlu ZyA9ICdvZmYnIEZST00gcGdfY2F0YWxvZy5wZ19zZXR0aW5ncyBXSEVSRSBuYW1lID0gJ2Rh dGFfY2hlY2tzdW1zJzsiLAorCSdmJyk7CitpcygkcmVzdWx0LCAxLCAnZW5zdXJlIHN0YW5k YnkgaGFzIGFic29yYmVkIHRoZSBpbnByb2dyZXNzLW9uIGJhcnJpZXInKTsKKyRyZXN1bHQg PSAkbm9kZV9zdGFuZGJ5XzEtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1Qgc2V0 dGluZyBGUk9NIHBnX2NhdGFsb2cucGdfc2V0dGluZ3MgV0hFUkUgbmFtZSA9ICdkYXRhX2No ZWNrc3Vtcyc7IgorKTsKKworaXMoKCRyZXN1bHQgZXEgJ2lucHJvZ3Jlc3Mtb24nIHx8ICRy ZXN1bHQgZXEgJ29uJyksCisJMSwgJ2Vuc3VyZSBjaGVja3N1bXMgYXJlIG9uLCBvciBpbiBw cm9ncmVzcywgb24gc3RhbmRieV8xJyk7CisKKyMgSW5zZXJ0IHNvbWUgbW9yZSBkYXRhIHdo aWNoIHNob3VsZCBiZSBjaGVja3N1bW1lZCBvbiBJTlNFUlQKKyRub2RlX3ByaW1hcnktPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyB0IFZBTFVFUyAoZ2VuZXJhdGVf c2VyaWVzKDEsIDEwMDAwKSk7Iik7CisKKyMgV2FpdCBmb3IgY2hlY2tzdW1zIGVuYWJsZWQg b24gdGhlIHByaW1hcnkKKyRyZXN1bHQgPSAkbm9kZV9wcmltYXJ5LT5wb2xsX3F1ZXJ5X3Vu dGlsKAorCSdwb3N0Z3JlcycsCisJIlNFTEVDVCBzZXR0aW5nIEZST00gcGdfY2F0YWxvZy5w Z19zZXR0aW5ncyBXSEVSRSBuYW1lID0gJ2RhdGFfY2hlY2tzdW1zJzsiLAorCSdvbicpOwor aXMoJHJlc3VsdCwgMSwgJ2Vuc3VyZSBjaGVja3N1bXMgYXJlIGVuYWJsZWQgb24gdGhlIHBy aW1hcnknKTsKKworIyBXYWl0IGZvciBjaGVja3N1bXMgZW5hYmxlZCBvbiB0aGUgc3RhbmRi eQorJHJlc3VsdCA9ICRub2RlX3N0YW5kYnlfMS0+cG9sbF9xdWVyeV91bnRpbCgKKwkncG9z dGdyZXMnLAorCSJTRUxFQ1Qgc2V0dGluZyBGUk9NIHBnX2NhdGFsb2cucGdfc2V0dGluZ3Mg V0hFUkUgbmFtZSA9ICdkYXRhX2NoZWNrc3Vtcyc7IiwKKwknb24nKTsKK2lzKCRyZXN1bHQs IDEsICdlbnN1cmUgY2hlY2tzdW1zIGFyZSBlbmFibGVkIG9uIHRoZSBzdGFuZGJ5Jyk7CisK KyRyZXN1bHQgPSAkbm9kZV9wcmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVD VCBjb3VudChhKSBGUk9NIHQiKTsKK2lzKCRyZXN1bHQsICcyMDAwMCcsICdlbnN1cmUgd2Ug Y2FuIHNhZmVseSByZWFkIGFsbCBkYXRhIHdpdGggY2hlY2tzdW1zJyk7CisKKyRyZXN1bHQg PSAkbm9kZV9wcmltYXJ5LT5wb2xsX3F1ZXJ5X3VudGlsKAorCSdwb3N0Z3JlcycsCisJIlNF TEVDVCBjb3VudCgqKSBGUk9NIHBnX3N0YXRfYWN0aXZpdHkgV0hFUkUgYmFja2VuZF90eXBl IExJS0UgJ2RhdGFjaGVja3N1bXN3b3JrZXIlJzsiLAorCScwJyk7CitpcygkcmVzdWx0LCAx LCAnYXdhaXQgZGF0YWNoZWNrc3VtcyB3b3JrZXIvbGF1bmNoZXIgdGVybWluYXRpb24nKTsK KworIyBEaXNhYmxlIGNoZWNrc3VtcyBhbmQgZW5zdXJlIGl0J3MgcHJvcGFnYXRlZCB0byBz dGFuZGJ5IGFuZCB0aGF0IHdlIGNhbgorIyBzdGlsbCByZWFkIGFsbCBkYXRhCiskbm9kZV9w cmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBwZ19kaXNhYmxlX2RhdGFf Y2hlY2tzdW1zKCk7Iik7CisjIFdhaXQgZm9yIGNoZWNrc3VtIGRpc2FibGUgdG8gYmUgcmVw bGF5ZWQKKyRub2RlX3ByaW1hcnktPndhaXRfZm9yX2NhdGNodXAoJG5vZGVfc3RhbmRieV8x LCAncmVwbGF5Jyk7CiskcmVzdWx0ID0gJG5vZGVfcHJpbWFyeS0+cG9sbF9xdWVyeV91bnRp bCgKKwkncG9zdGdyZXMnLAorCSJTRUxFQ1Qgc2V0dGluZyBGUk9NIHBnX2NhdGFsb2cucGdf c2V0dGluZ3MgV0hFUkUgbmFtZSA9ICdkYXRhX2NoZWNrc3Vtcyc7IiwKKwknb2ZmJyk7Citp cygkcmVzdWx0LCAxLCAnZW5zdXJlIGRhdGEgY2hlY2tzdW1zIGFyZSBkaXNhYmxlZCBvbiB0 aGUgcHJpbWFyeSAyJyk7CisKKyMgRW5zdXJlIHRoYXQgdGhlIHN0YW5kYnkgaGFzIHN3aXRj aGVkIHRvIG9mZgorJHJlc3VsdCA9ICRub2RlX3N0YW5kYnlfMS0+cG9sbF9xdWVyeV91bnRp bCgKKwkncG9zdGdyZXMnLAorCSJTRUxFQ1Qgc2V0dGluZyBGUk9NIHBnX2NhdGFsb2cucGdf c2V0dGluZ3MgV0hFUkUgbmFtZSA9ICdkYXRhX2NoZWNrc3Vtcyc7IiwKKwknb2ZmJyk7Citp cygkcmVzdWx0LCAxLCAnZW5zdXJlIGNoZWNrc3VtcyBhcmUgb2ZmIG9uIHN0YW5kYnlfMScp OworCiskcmVzdWx0ID0gJG5vZGVfcHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJT RUxFQ1QgY291bnQoYSkgRlJPTSB0Iik7CitpcygkcmVzdWx0LCAiMjAwMDAiLCAnZW5zdXJl IHdlIGNhbiBzYWZlbHkgcmVhZCBhbGwgZGF0YSB3aXRob3V0IGNoZWNrc3VtcycpOworCitk b25lX3Rlc3RpbmcoKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2NoZWNrc3VtL3QvMDA0X29m ZmxpbmUucGwgYi9zcmMvdGVzdC9jaGVja3N1bS90LzAwNF9vZmZsaW5lLnBsCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45Y2VlNjJjOWI1MgotLS0gL2Rldi9u dWxsCisrKyBiL3NyYy90ZXN0L2NoZWNrc3VtL3QvMDA0X29mZmxpbmUucGwKQEAgLTAsMCAr MSwxMDEgQEAKKworIyBDb3B5cmlnaHQgKGMpIDIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERl dmVsb3BtZW50IEdyb3VwCisKKyMgVGVzdCBzdWl0ZSBmb3IgdGVzdGluZyBlbmFibGluZyBk YXRhIGNoZWNrc3VtcyBvZmZsaW5lIGZyb20gdmFyaW91cyBzdGF0ZXMKKyMgb2YgY2hlY2tz dW0gcHJvY2Vzc2luZwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5ncyBGQVRBTCA9PiAnYWxs JzsKKwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6 VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKKworIyBwZ19lbmFibGVfY2hlY2tzdW1z IHRha2UgdGhyZWUgcGFyYW1zOiBjb3N0X2RlbGF5LCBjb3N0X2xpbWl0IGFuZCBmYXN0LiBG b3IKKyMgdGVzdGluZyB3ZSBhbHdheXMgd2FudCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCB2 YWx1ZSBmb3IgJ2Zhc3QnIHdpdGggVHJ1ZQorIyB3aGljaCB3aWxsIGNhdXNlIGltbWVkaWF0 ZSBjaGVja3BvaW50cy4gMCBhbmQgMTAwIGFyZSB0aGUgZGVmYXVsdHMgZm9yCisjIGNvc3Rf ZGVsYXkgYW5kIGNvc3RfbGltaXQgd2hpY2ggYXJlIGZpbmUgdG8gdXNlIGZvciB0ZXN0aW5n IHNvIGxldCdzIGtlZXAKKyMgdGhlbS4KK215ICRlbmFibGVfcGFyYW1zID0gJzAsIDEwMCwg dHJ1ZSc7CisKKyMgSW5pdGlhbGl6ZSBub2RlIHdpdGggY2hlY2tzdW1zIGRpc2FibGVkLgor bXkgJG5vZGUgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ21haW4nKTsKKyRu b2RlLT5pbml0KG5vX2RhdGFfY2hlY2tzdW1zID0+IDEpOworJG5vZGUtPnN0YXJ0OworCisj IENyZWF0ZSBzb21lIGNvbnRlbnQgdG8gaGF2ZSB1bi1jaGVja3N1bW1lZCBkYXRhIGluIHRo ZSBjbHVzdGVyCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJM RSB0IEFTIFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMCkgQVMgYTsiKTsKKworIyBF bnN1cmUgdGhhdCBjaGVja3N1bXMgYXJlIGRpc2FibGVkCitteSAkcmVzdWx0ID0gJG5vZGUt PnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1Qgc2V0dGluZyBGUk9NIHBnX2NhdGFs b2cucGdfc2V0dGluZ3MgV0hFUkUgbmFtZSA9ICdkYXRhX2NoZWNrc3Vtcyc7IgorKTsKK2lz KCRyZXN1bHQsICdvZmYnLCAnZW5zdXJlIGNoZWNrc3VtcyBhcmUgZGlzYWJsZWQnKTsKKwor IyBFbmFibGUgY2hlY2tzdW1zIG9mZmxpbmUgdXNpbmcgcGdfY2hlY2tzdW1zCiskbm9kZS0+ c3RvcDsKKyRub2RlLT5jaGVja3N1bV9lbmFibGVfb2ZmbGluZTsKKyRub2RlLT5zdGFydDsK KworIyBFbnN1cmUgdGhhdCBjaGVja3N1bXMgYXJlIGVuYWJsZWQKKyRyZXN1bHQgPSAkbm9k ZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBzZXR0aW5nIEZST00gcGdfY2F0 YWxvZy5wZ19zZXR0aW5ncyBXSEVSRSBuYW1lID0gJ2RhdGFfY2hlY2tzdW1zJzsiCispOwor aXMoJHJlc3VsdCwgJ29uJywgJ2Vuc3VyZSBjaGVja3N1bXMgYXJlIGVuYWJsZWQnKTsKKwor IyBSdW4gYSBkdW1teSBxdWVyeSBqdXN0IHRvIG1ha2Ugc3VyZSB3ZSBjYW4gcmVhZCBiYWNr IHNvbWUgZGF0YQorJHJlc3VsdCA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNF TEVDVCBjb3VudCgqKSBGUk9NIHQiKTsKK2lzKCRyZXN1bHQsICcxMDAwMCcsICdlbnN1cmUg Y2hlY2tzdW1tZWQgcGFnZXMgY2FuIGJlIHJlYWQgYmFjaycpOworCisjIERpc2FibGUgY2hl Y2tzdW1zIG9mZmxpbmUgYWdhaW4gdXNpbmcgcGdfY2hlY2tzdW1zCiskbm9kZS0+c3RvcDsK KyRub2RlLT5jaGVja3N1bV9kaXNhYmxlX29mZmxpbmU7Ciskbm9kZS0+c3RhcnQ7CisKKyMg RW5zdXJlIHRoYXQgY2hlY2tzdW1zIGFyZSBkaXNhYmxlZAorJHJlc3VsdCA9ICRub2RlLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHNldHRpbmcgRlJPTSBwZ19jYXRhbG9n LnBnX3NldHRpbmdzIFdIRVJFIG5hbWUgPSAnZGF0YV9jaGVja3N1bXMnOyIKKyk7Citpcygk cmVzdWx0LCAnb2ZmJywgJ2Vuc3VyZSBjaGVja3N1bXMgYXJlIGRpc2FibGVkJyk7CisKKyMg Q3JlYXRlIGEgYmFycmllciBmb3IgY2hlY2tzdW1taW5nIHRvIGJsb2NrIG9uLCBpbiB0aGlz IGNhc2UgYSBwcmUtZXhpc3RpbmcKKyMgdGVtcG9yYXJ5IHRhYmxlIHdoaWNoIGlzIGtlcHQg b3BlbiB3aGlsZSBwcm9jZXNzaW5nIGlzIHN0YXJ0ZWQuIFdlIGNhbgorIyBhY2NvbXBsaXNo IHRoaXMgYnkgc2V0dGluZyB1cCBhbiBpbnRlcmFjdGl2ZSBwc3FsIHByb2Nlc3Mgd2hpY2gg a2VlcHMgdGhlCisjIHRlbXBvcmFyeSB0YWJsZSBjcmVhdGVkIGFzIHdlIGVuYWJsZSBjaGVj a3N1bXMgaW4gYW5vdGhlciBwc3FsIHByb2Nlc3MuCisKK215ICRic2Vzc2lvbiA9ICRub2Rl LT5iYWNrZ3JvdW5kX3BzcWwoJ3Bvc3RncmVzJyk7CiskYnNlc3Npb24tPnF1ZXJ5X3NhZmUo J0NSRUFURSBURU1QT1JBUlkgVEFCTEUgdHQgKGEgaW50ZWdlcik7Jyk7CisKKyMgSW4gYW5v dGhlciBzZXNzaW9uLCBtYWtlIHN1cmUgd2UgY2FuIHNlZSB0aGUgYmxvY2tpbmcgdGVtcCB0 YWJsZSBidXQgc3RhcnQKKyMgcHJvY2Vzc2luZyBhbnl3YXlzIGFuZCBjaGVjayB0aGF0IHdl IGFyZSBibG9ja2VkIHdpdGggYSBwcm9wZXIgd2FpdCBldmVudC4KKyRyZXN1bHQgPSAkbm9k ZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCByZWxwZXJzaXN0ZW5jZSBGUk9N IHBnX2NhdGFsb2cucGdfY2xhc3MgV0hFUkUgcmVsbmFtZSA9ICd0dCc7Iik7CitpcygkcmVz dWx0LCAndCcsICdlbnN1cmUgd2UgY2FuIHNlZSB0aGUgdGVtcG9yYXJ5IHRhYmxlJyk7CisK KyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHBnX2VuYWJsZV9kYXRh X2NoZWNrc3VtcygkZW5hYmxlX3BhcmFtcyk7Iik7CisKKyRyZXN1bHQgPSAkbm9kZS0+cG9s bF9xdWVyeV91bnRpbCgKKwkncG9zdGdyZXMnLAorCSJTRUxFQ1Qgc2V0dGluZyBGUk9NIHBn X2NhdGFsb2cucGdfc2V0dGluZ3MgV0hFUkUgbmFtZSA9ICdkYXRhX2NoZWNrc3Vtcyc7IiwK KwknaW5wcm9ncmVzcy1vbicpOworaXMoJHJlc3VsdCwgMSwgJ2Vuc3VyZSBjaGVja3N1bXMg YXJlIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGVuYWJsZWQnKTsKKworIyBUdXJuIHRoZSBj bHVzdGVyIG9mZiBhbmQgZW5hYmxlIGNoZWNrc3VtcyBvZmZsaW5lLCB0aGVuIHN0YXJ0IGJh Y2sgdXAKKyRic2Vzc2lvbi0+cXVpdDsKKyRub2RlLT5zdG9wOworJG5vZGUtPmNoZWNrc3Vt X2VuYWJsZV9vZmZsaW5lOworJG5vZGUtPnN0YXJ0OworCisjIEVuc3VyZSB0aGF0IGNoZWNr c3VtcyBhcmUgbm93IGVuYWJsZWQgZXZlbiB0aG91Z2ggcHJvY2Vzc2luZyB3YXNuJ3QKKyMg cmVzdGFydGVkCiskcmVzdWx0ID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJT RUxFQ1Qgc2V0dGluZyBGUk9NIHBnX2NhdGFsb2cucGdfc2V0dGluZ3MgV0hFUkUgbmFtZSA9 ICdkYXRhX2NoZWNrc3Vtcyc7IgorKTsKK2lzKCRyZXN1bHQsICdvbicsICdlbnN1cmUgY2hl Y2tzdW1zIGFyZSBlbmFibGVkJyk7CisKKyMgUnVuIGEgZHVtbXkgcXVlcnkganVzdCB0byBt YWtlIHN1cmUgd2UgY2FuIHJlYWQgYmFjayBzb21lIGRhdGEKKyRyZXN1bHQgPSAkbm9kZS0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJPTSB0Iik7Citpcygk cmVzdWx0LCAnMTAwMDAnLCAnZW5zdXJlIGNoZWNrc3VtbWVkIHBhZ2VzIGNhbiBiZSByZWFk IGJhY2snKTsKKworZG9uZV90ZXN0aW5nKCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tZXNv bi5idWlsZCBiL3NyYy90ZXN0L21lc29uLmJ1aWxkCmluZGV4IGNjYzMxZDZhODZhLi5jNGJm ZWYyYzBlMiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbWVzb24uYnVpbGQKKysrIGIvc3JjL3Rl c3QvbWVzb24uYnVpbGQKQEAgLTgsNiArOCw3IEBAIHN1YmRpcigncG9zdG1hc3RlcicpCiBz dWJkaXIoJ3JlY292ZXJ5JykKIHN1YmRpcignc3Vic2NyaXB0aW9uJykKIHN1YmRpcignbW9k dWxlcycpCitzdWJkaXIoJ2NoZWNrc3VtJykKIAogaWYgc3NsLmZvdW5kKCkKICAgc3ViZGly KCdzc2wnKQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcGVybC9Qb3N0Z3JlU1FML1Rlc3QvQ2x1 c3Rlci5wbSBiL3NyYy90ZXN0L3BlcmwvUG9zdGdyZVNRTC9UZXN0L0NsdXN0ZXIucG0KaW5k ZXggYjEwNWNiYTA1YTYuLjFjNjYzNjBjMTZjIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9wZXJs L1Bvc3RncmVTUUwvVGVzdC9DbHVzdGVyLnBtCisrKyBiL3NyYy90ZXN0L3BlcmwvUG9zdGdy ZVNRTC9UZXN0L0NsdXN0ZXIucG0KQEAgLTM3NDgsNiArMzc0OCw0MiBAQCBzdWIgYWR2YW5j ZV93YWwKIAl9CiB9CiAKKz1pdGVtICRub2RlLT5jaGVja3N1bV9lbmFibGVfb2ZmbGluZSgp CisKK0VuYWJsZSBkYXRhIHBhZ2UgY2hlY2tzdW1zIGluIGFuIG9mZmxpbmUgY2x1c3RlciB3 aXRoIEI8cGdfY2hlY2tzdW1zPi4gVGhlCitjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGVu c3VyaW5nIHRoYXQgdGhlIGNsdXN0ZXIgaXMgaW4gdGhlIHJpZ2h0IHN0YXRlIGZvcgordGhp cyBvcGVyYXRpb24uCisKKz1jdXQKKworc3ViIGNoZWNrc3VtX2VuYWJsZV9vZmZsaW5lCit7 CisJbXkgKCRzZWxmKSA9IEBfOworCisJcHJpbnQgIiMjIyBFbmFibGluZyBjaGVja3N1bXMg aW4gXCIkc2VsZi0+ZGF0YV9kaXJcIlxuIjsKKwlQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6 c3lzdGVtX29yX2JhaWwoJ3BnX2NoZWNrc3VtcycsICctRCcsCisJCSRzZWxmLT5kYXRhX2Rp ciwgJy1lJyk7CisJcmV0dXJuOworfQorCis9aXRlbSBjaGVja3N1bV9kaXNhYmxlX29mZmxp bmUKKworRGlzYWJsZSBkYXRhIHBhZ2UgY2hlY2tzdW1zIGluIGFuIG9mZmxpbmUgY2x1c3Rl ciB3aXRoIEI8cGdfY2hlY2tzdW1zPi4gVGhlCitjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9y IGVuc3VyaW5nIHRoYXQgdGhlIGNsdXN0ZXIgaXMgaW4gdGhlIHJpZ2h0IHN0YXRlIGZvcgor dGhpcyBvcGVyYXRpb24uCisKKz1jdXQKKworc3ViIGNoZWNrc3VtX2Rpc2FibGVfb2ZmbGlu ZQoreworCW15ICgkc2VsZikgPSBAXzsKKworCXByaW50ICIjIyMgRGlzYWJsaW5nIGNoZWNr c3VtcyBpbiBcIiRzZWxmLT5kYXRhX2RpclwiXG4iOworCVBvc3RncmVTUUw6OlRlc3Q6OlV0 aWxzOjpzeXN0ZW1fb3JfYmFpbCgncGdfY2hlY2tzdW1zJywgJy1EJywKKwkJJHNlbGYtPmRh dGFfZGlyLCAnLWQnKTsKKwlyZXR1cm47Cit9CisKID1wb2QKIAogPWJhY2sKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVsZXMub3V0IGIvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9ydWxlcy5vdXQKaW5kZXggNjJmNjlhYzIwYjIuLjBkZDM4M2E3NmRk IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dAorKysg Yi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dApAQCAtMjA0MSw2ICsyMDQx LDQyIEBAIHBnX3N0YXRfcHJvZ3Jlc3NfY3JlYXRlX2luZGV4fCBTRUxFQ1Qgcy5waWQsCiAg ICAgcy5wYXJhbTE1IEFTIHBhcnRpdGlvbnNfZG9uZQogICAgRlJPTSAocGdfc3RhdF9nZXRf cHJvZ3Jlc3NfaW5mbygnQ1JFQVRFIElOREVYJzo6dGV4dCkgcyhwaWQsIGRhdGlkLCByZWxp ZCwgcGFyYW0xLCBwYXJhbTIsIHBhcmFtMywgcGFyYW00LCBwYXJhbTUsIHBhcmFtNiwgcGFy YW03LCBwYXJhbTgsIHBhcmFtOSwgcGFyYW0xMCwgcGFyYW0xMSwgcGFyYW0xMiwgcGFyYW0x MywgcGFyYW0xNCwgcGFyYW0xNSwgcGFyYW0xNiwgcGFyYW0xNywgcGFyYW0xOCwgcGFyYW0x OSwgcGFyYW0yMCkKICAgICAgTEVGVCBKT0lOIHBnX2RhdGFiYXNlIGQgT04gKChzLmRhdGlk ID0gZC5vaWQpKSk7CitwZ19zdGF0X3Byb2dyZXNzX2RhdGFfY2hlY2tzdW1zfCBTRUxFQ1Qg cy5waWQsCisgICAgcy5kYXRpZCwKKyAgICBkLmRhdG5hbWUsCisgICAgICAgIENBU0Ugcy5w YXJhbTEKKyAgICAgICAgICAgIFdIRU4gMCBUSEVOICdlbmFibGluZyc6OnRleHQKKyAgICAg ICAgICAgIFdIRU4gMSBUSEVOICdkaXNhYmxpbmcnOjp0ZXh0CisgICAgICAgICAgICBXSEVO IDIgVEhFTiAnd2FpdGluZyc6OnRleHQKKyAgICAgICAgICAgIFdIRU4gMyBUSEVOICd3YWl0 aW5nIG9uIHRlbXBvcmFyeSB0YWJsZXMnOjp0ZXh0CisgICAgICAgICAgICBXSEVOIDQgVEhF TiAnd2FpdGluZyBvbiBjaGVja3BvaW50Jzo6dGV4dAorICAgICAgICAgICAgV0hFTiA1IFRI RU4gJ2RvbmUnOjp0ZXh0CisgICAgICAgICAgICBFTFNFIE5VTEw6OnRleHQKKyAgICAgICAg RU5EIEFTIHBoYXNlLAorICAgICAgICBDQVNFIHMucGFyYW0yCisgICAgICAgICAgICBXSEVO ICctMSc6OmludGVnZXIgVEhFTiBOVUxMOjpiaWdpbnQKKyAgICAgICAgICAgIEVMU0Ugcy5w YXJhbTIKKyAgICAgICAgRU5EIEFTIGRhdGFiYXNlc190b3RhbCwKKyAgICBzLnBhcmFtMyBB UyBkYXRhYmFzZXNfZG9uZSwKKyAgICAgICAgQ0FTRSBzLnBhcmFtNAorICAgICAgICAgICAg V0hFTiAnLTEnOjppbnRlZ2VyIFRIRU4gTlVMTDo6YmlnaW50CisgICAgICAgICAgICBFTFNF IHMucGFyYW00CisgICAgICAgIEVORCBBUyByZWxhdGlvbnNfdG90YWwsCisgICAgICAgIENB U0Ugcy5wYXJhbTUKKyAgICAgICAgICAgIFdIRU4gJy0xJzo6aW50ZWdlciBUSEVOIE5VTEw6 OmJpZ2ludAorICAgICAgICAgICAgRUxTRSBzLnBhcmFtNQorICAgICAgICBFTkQgQVMgcmVs YXRpb25zX2RvbmUsCisgICAgICAgIENBU0Ugcy5wYXJhbTYKKyAgICAgICAgICAgIFdIRU4g Jy0xJzo6aW50ZWdlciBUSEVOIE5VTEw6OmJpZ2ludAorICAgICAgICAgICAgRUxTRSBzLnBh cmFtNgorICAgICAgICBFTkQgQVMgYmxvY2tzX3RvdGFsLAorICAgICAgICBDQVNFIHMucGFy YW03CisgICAgICAgICAgICBXSEVOICctMSc6OmludGVnZXIgVEhFTiBOVUxMOjpiaWdpbnQK KyAgICAgICAgICAgIEVMU0Ugcy5wYXJhbTcKKyAgICAgICAgRU5EIEFTIGJsb2Nrc19kb25l CisgICBGUk9NIChwZ19zdGF0X2dldF9wcm9ncmVzc19pbmZvKCdEQVRBQ0hFQ0tTVU1TJzo6 dGV4dCkgcyhwaWQsIGRhdGlkLCByZWxpZCwgcGFyYW0xLCBwYXJhbTIsIHBhcmFtMywgcGFy YW00LCBwYXJhbTUsIHBhcmFtNiwgcGFyYW03LCBwYXJhbTgsIHBhcmFtOSwgcGFyYW0xMCwg cGFyYW0xMSwgcGFyYW0xMiwgcGFyYW0xMywgcGFyYW0xNCwgcGFyYW0xNSwgcGFyYW0xNiwg cGFyYW0xNywgcGFyYW0xOCwgcGFyYW0xOSwgcGFyYW0yMCkKKyAgICAgTEVGVCBKT0lOIHBn X2RhdGFiYXNlIGQgT04gKChzLmRhdGlkID0gZC5vaWQpKSkKKyAgT1JERVIgQlkgcy5kYXRp ZDsKIHBnX3N0YXRfcHJvZ3Jlc3NfdmFjdXVtfCBTRUxFQ1Qgcy5waWQsCiAgICAgcy5kYXRp ZCwKICAgICBkLmRhdG5hbWUsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL3N0YXRzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3RhdHMub3V0Cmlu ZGV4IGY3N2NhYWNjMTdkLi44NWUxNWQ0Y2MyYiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9zdGF0cy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9zdGF0cy5vdXQKQEAgLTUxLDYgKzUxLDIyIEBAIGNsaWVudCBiYWNrZW5kfHJlbGF0aW9u fHZhY3V1bQogY2xpZW50IGJhY2tlbmR8dGVtcCByZWxhdGlvbnxub3JtYWwKIGNsaWVudCBi YWNrZW5kfHdhbHxpbml0CiBjbGllbnQgYmFja2VuZHx3YWx8bm9ybWFsCitkYXRhY2hlY2tz dW1zd29ya2VyIGxhdW5jaGVyfHJlbGF0aW9ufGJ1bGtyZWFkCitkYXRhY2hlY2tzdW1zd29y a2VyIGxhdW5jaGVyfHJlbGF0aW9ufGJ1bGt3cml0ZQorZGF0YWNoZWNrc3Vtc3dvcmtlciBs YXVuY2hlcnxyZWxhdGlvbnxpbml0CitkYXRhY2hlY2tzdW1zd29ya2VyIGxhdW5jaGVyfHJl bGF0aW9ufG5vcm1hbAorZGF0YWNoZWNrc3Vtc3dvcmtlciBsYXVuY2hlcnxyZWxhdGlvbnx2 YWN1dW0KK2RhdGFjaGVja3N1bXN3b3JrZXIgbGF1bmNoZXJ8dGVtcCByZWxhdGlvbnxub3Jt YWwKK2RhdGFjaGVja3N1bXN3b3JrZXIgbGF1bmNoZXJ8d2FsfGluaXQKK2RhdGFjaGVja3N1 bXN3b3JrZXIgbGF1bmNoZXJ8d2FsfG5vcm1hbAorZGF0YWNoZWNrc3Vtc3dvcmtlciB3b3Jr ZXJ8cmVsYXRpb258YnVsa3JlYWQKK2RhdGFjaGVja3N1bXN3b3JrZXIgd29ya2VyfHJlbGF0 aW9ufGJ1bGt3cml0ZQorZGF0YWNoZWNrc3Vtc3dvcmtlciB3b3JrZXJ8cmVsYXRpb258aW5p dAorZGF0YWNoZWNrc3Vtc3dvcmtlciB3b3JrZXJ8cmVsYXRpb258bm9ybWFsCitkYXRhY2hl Y2tzdW1zd29ya2VyIHdvcmtlcnxyZWxhdGlvbnx2YWN1dW0KK2RhdGFjaGVja3N1bXN3b3Jr ZXIgd29ya2VyfHRlbXAgcmVsYXRpb258bm9ybWFsCitkYXRhY2hlY2tzdW1zd29ya2VyIHdv cmtlcnx3YWx8aW5pdAorZGF0YWNoZWNrc3Vtc3dvcmtlciB3b3JrZXJ8d2FsfG5vcm1hbAog c2xvdHN5bmMgd29ya2VyfHJlbGF0aW9ufGJ1bGtyZWFkCiBzbG90c3luYyB3b3JrZXJ8cmVs YXRpb258YnVsa3dyaXRlCiBzbG90c3luYyB3b3JrZXJ8cmVsYXRpb258aW5pdApAQCAtODcs NyArMTAzLDcgQEAgd2Fsc3VtbWFyaXplcnx3YWx8aW5pdAogd2Fsc3VtbWFyaXplcnx3YWx8 bm9ybWFsCiB3YWx3cml0ZXJ8d2FsfGluaXQKIHdhbHdyaXRlcnx3YWx8bm9ybWFsCi0oNzEg cm93cykKKyg4NyByb3dzKQogXGEKIC0tIGVuc3VyZSB0aGF0IGJvdGggc2Vxc2NhbiBhbmQg aW5kZXhzY2FuIHBsYW5zIGFyZSBhbGxvd2VkCiBTRVQgZW5hYmxlX3NlcXNjYW4gVE8gb247 CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTNfcGFydGl0aW9uLnBs IGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDEzX3BhcnRpdGlvbi5wbAppbmRleCA2MWIw Y2I0YWExYS4uNGY3OGRkNDg4MTUgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3N1YnNjcmlwdGlv bi90LzAxM19wYXJ0aXRpb24ucGwKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDEz X3BhcnRpdGlvbi5wbApAQCAtNTEsOCArNTEsNyBAQCAkbm9kZV9zdWJzY3JpYmVyMS0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCiApOwogIyBtYWtlIGEgQlJJTiBpbmRleCB0byB0ZXN0IGFt aW5zZXJ0Y2xlYW51cCBsb2dpYyBpbiBzdWJzY3JpYmVyCiAkbm9kZV9zdWJzY3JpYmVyMS0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIkNSRUFURSBJTkRFWCB0YWIxX2NfYnJpbl9pZHgg T04gdGFiMSBVU0lORyBicmluIChjKSIKLSk7CisJIkNSRUFURSBJTkRFWCB0YWIxX2NfYnJp bl9pZHggT04gdGFiMSBVU0lORyBicmluIChjKSIpOwogJG5vZGVfc3Vic2NyaWJlcjEtPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAogCSJDUkVBVEUgVEFCTEUgdGFiMV8xIChiIHRleHQsIGMg dGV4dCBERUZBVUxUICdzdWIxX3RhYjEnLCBhIGludCBOT1QgTlVMTCkiCiApOwpkaWZmIC0t Z2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdp bmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCA5MzMzOWVmM2M1OC4uM2VkM2Y3ZDQyMTYgMTAw NjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC00MDMsNiArNDAzLDcgQEAgQ2hlY2tQ b2ludFN0bXQKIENoZWNrcG9pbnRTdGF0c0RhdGEKIENoZWNrcG9pbnRlclJlcXVlc3QKIENo ZWNrcG9pbnRlclNobWVtU3RydWN0CitDaGVja3N1bVR5cGUKIENocm9tb3NvbWUKIENrcHRT b3J0SXRlbQogQ2twdFRzU3RhdHVzCkBAIC01OTQsNiArNTk1LDEwIEBAIERhdGFQYWdlRGVs ZXRlU3RhY2sKIERhdGFUeXBlc1VzYWdlQ2hlY2tzCiBEYXRhVHlwZXNVc2FnZVZlcnNpb25D aGVjawogRGF0YWJhc2VJbmZvCitEYXRhQ2hlY2tzdW1zV29ya2VyRGF0YWJhc2UKK0RhdGFD aGVja3N1bXNXb3JrZXJSZXN1bHQKK0RhdGFDaGVja3N1bXNXb3JrZXJSZXN1bHRFbnRyeQor RGF0YUNoZWNrc3Vtc1dvcmtlclNobWVtU3RydWN0CiBEYXRlQURUCiBEYXRlVGltZUVycm9y RXh0cmEKIERhdHVtCkBAIC00MTQ2LDYgKzQxNTEsNyBAQCB4bF9idHJlZV9zcGxpdAogeGxf YnRyZWVfdW5saW5rX3BhZ2UKIHhsX2J0cmVlX3VwZGF0ZQogeGxfYnRyZWVfdmFjdXVtCit4 bF9jaGVja3N1bV9zdGF0ZQogeGxfY2xvZ190cnVuY2F0ZQogeGxfY29tbWl0X3RzX3RydW5j YXRlCiB4bF9kYmFzZV9jcmVhdGVfZmlsZV9jb3B5X3JlYwotLSAKMi40OC4xCgo= --------------hwLAc5AR555AcYbidDDolObH Content-Type: text/x-patch; charset=UTF-8; name="v20250315-0002-Reviewfixups.patch" Content-Disposition: attachment; filename="v20250315-0002-Reviewfixups.patch" Content-Transfer-Encoding: base64 RnJvbSBkNTZjYjA5NDU4YTVmYmVlNTM5NjAxYzA4NGZjN2U3MmU1ZTljZmI1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBEYW5pZWwgR3VzdGFmc3NvbiA8ZGd1c3RhZnNzb25A cG9zdGdyZXNxbC5vcmc+CkRhdGU6IEZyaSwgMTQgTWFyIDIwMjUgMTU6MDA6NTEgKzAxMDAK U3ViamVjdDogW1BBVENIIHYyMDI1MDMxNSAyLzRdIFJldmlld2ZpeHVwcwoKLS0tCiBzcmMv YmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMgICAgICAgICAgICB8IDI2ICsrKysrKysr KysrKysrKysrKystCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL2RhdGFjaGVja3N1bXN3b3Jr ZXIuYyB8ICAyICstCiBzcmMvYmFja2VuZC91dGlscy9pbml0L3Bvc3Rpbml0LmMgICAgICAg ICAgICB8ICA0ICstLQogc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9kYXRhY2hlY2tzdW1zd29y a2VyLmggfCAgMiArLQogc3JjL3Rlc3QvY2hlY2tzdW0vTWFrZWZpbGUgICAgICAgICAgICAg ICAgICAgfCAgMiArLQogNSBmaWxlcyBjaGFuZ2VkLCAzMCBpbnNlcnRpb25zKCspLCA2IGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hs b2cuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwppbmRleCA2MWRhNmQ1 ODNjZC4uZTRjNzJmOTg1ZTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFu c2FtL3hsb2cuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMKQEAg LTY2MCw2ICs2NjAsMTYgQEAgc3RhdGljIGJvb2wgdXBkYXRlTWluUmVjb3ZlcnlQb2ludCA9 IHRydWU7CiAgKi8KIHN0YXRpYyB1aW50MzIgTG9jYWxEYXRhQ2hlY2tzdW1WZXJzaW9uID0g MDsKIAorLyoKKyAqIEZsYWcgdG8gcmVtZW1iZXIgaWYgdGhlIHByb2NzaWduYWxiYXJyaWVy IGJlaW5nIGFic29yYmVkIGZvciBlbmFibGluZworICogY2hlY2tzdW1zIGlzIHRoZSBmaXJz dCBvbmUgb3Igbm90LiBUaGUgZmlyc3QgcHJvY3NpZ25hbGJhcnJpZXIgY2FuIGluIHJhcmUK KyAqIGNpcmN1bXN0YW5jZXMgY2F1c2UgYSB0cmFuc2l0aW9uIGZyb20gJ29uJyB0byAnb24n IHdoZW4gYSBuZXcgcHJvY2VzcyBpcworICogc3Bhd25lZCBiZXR3ZWVuIHRoZSB1cGRhdGUg b2YgWExvZ0N0bC0+ZGF0YV9jaGVja3N1bV92ZXJzaW9uIGFuZCB0aGUKKyAqIGJhcnJpZXIg YmVpbmcgZW1pdHRlZC4gIFRoaXMgY2FuIG9ubHkgaGFwcGVuIG9uIHRoZSB2ZXJ5IGZpcnN0 IGJhcnJpZXIgc28KKyAqIG1hcmsgdGhhdCB3aXRoIHRoaXMgZmxhZy4KKyAqLworc3RhdGlj IGJvb2wgSW5pdGlhbERhdGFDaGVja3N1bVRyYW5zaXRpb24gPSB0cnVlOworCiAvKgogICog VmFyaWFibGUgYmFja2luZyB0aGUgR1VDLCBrZWVwIGl0IGluIHN5bmMgd2l0aCBMb2NhbERh dGFDaGVja3N1bVZlcnNpb24uCiAgKiBTZWUgU2V0TG9jYWxEYXRhQ2hlY2tzdW1WZXJzaW9u KCkuCkBAIC00OTM1LDcgKzQ5NDUsMjAgQEAgQWJzb3JiQ2hlY2tzdW1zT25JblByb2dyZXNz QmFycmllcih2b2lkKQogYm9vbAogQWJzb3JiQ2hlY2tzdW1zT25CYXJyaWVyKHZvaWQpCiB7 Ci0JQXNzZXJ0KExvY2FsRGF0YUNoZWNrc3VtVmVyc2lvbiA9PSBQR19EQVRBX0NIRUNLU1VN X0lOUFJPR1JFU1NfT05fVkVSU0lPTik7CisJLyoKKwkgKiBJZiB0aGUgcHJvY2VzcyB3YXMg c3Bhd25lZCBiZXR3ZWVuIHVwZGF0aW5nIFhMb2dDdGwgYW5kIGVtaXR0aW5nIHRoZQorCSAq IGJhcnJpZXIgaXQgd2lsbCBoYXZlIHNlZW4gdGhlIHVwZGF0ZWQgdmFsdWUsIHNvIGZvciB0 aGUgZmlyc3QgYmFycmllcgorCSAqIHdlIGFjY2VwdCBib3RoICJvbiIgYW5kICJpbnByb2dy ZXNzLW9uIi4KKwkgKi8KKwlpZiAoSW5pdGlhbERhdGFDaGVja3N1bVRyYW5zaXRpb24pCisJ eworCQlBc3NlcnQoKExvY2FsRGF0YUNoZWNrc3VtVmVyc2lvbiA9PSBQR19EQVRBX0NIRUNL U1VNX0lOUFJPR1JFU1NfT05fVkVSU0lPTikgfHwKKwkJCSAgIChMb2NhbERhdGFDaGVja3N1 bVZlcnNpb24gPT0gUEdfREFUQV9DSEVDS1NVTV9WRVJTSU9OKSk7CisJCUluaXRpYWxEYXRh Q2hlY2tzdW1UcmFuc2l0aW9uID0gZmFsc2U7CisJfQorCWVsc2UKKwkJQXNzZXJ0KExvY2Fs RGF0YUNoZWNrc3VtVmVyc2lvbiA9PSBQR19EQVRBX0NIRUNLU1VNX0lOUFJPR1JFU1NfT05f VkVSU0lPTik7CisKIAlTZXRMb2NhbERhdGFDaGVja3N1bVZlcnNpb24oUEdfREFUQV9DSEVD S1NVTV9WRVJTSU9OKTsKIAlyZXR1cm4gdHJ1ZTsKIH0KQEAgLTUzMTksNiArNTM0Miw3IEBA IExvY2FsUHJvY2Vzc0NvbnRyb2xGaWxlKGJvb2wgcmVzZXQpCiAJQXNzZXJ0KHJlc2V0IHx8 IENvbnRyb2xGaWxlID09IE5VTEwpOwogCUNvbnRyb2xGaWxlID0gcGFsbG9jKHNpemVvZihD b250cm9sRmlsZURhdGEpKTsKIAlSZWFkQ29udHJvbEZpbGUoKTsKKwlTZXRMb2NhbERhdGFD aGVja3N1bVZlcnNpb24oQ29udHJvbEZpbGUtPmRhdGFfY2hlY2tzdW1fdmVyc2lvbik7CiB9 CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2RhdGFjaGVja3N1 bXN3b3JrZXIuYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvZGF0YWNoZWNrc3Vtc3dvcmtl ci5jCmluZGV4IDZhMjAxZGNhOGRlLi44MWJlMjgwODg5NSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvcG9zdG1hc3Rlci9kYXRhY2hlY2tzdW1zd29ya2VyLmMKKysrIGIvc3JjL2JhY2tl bmQvcG9zdG1hc3Rlci9kYXRhY2hlY2tzdW1zd29ya2VyLmMKQEAgLTE1MCw3ICsxNTAsNyBA QAogICogICAgIG9ubGluZSBvcGVyYXRpb24pLgogICoKICAqCi0gKiBQb3J0aW9ucyBDb3B5 cmlnaHQgKGMpIDE5OTYtMjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3Jv dXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI1LCBQb3N0Z3JlU1FMIEds b2JhbCBEZXZlbG9wbWVudCBHcm91cAogICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0 LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKICAqCiAgKgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9wb3N0aW5pdC5jIGIvc3JjL2JhY2tl bmQvdXRpbHMvaW5pdC9wb3N0aW5pdC5jCmluZGV4IGJhZTE4YjQ0OWFhLi42OTI1NzBlYjBm MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9wb3N0aW5pdC5jCisrKyBi L3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvcG9zdGluaXQuYwpAQCAtNzQ2LDEzICs3NDYsMTMg QEAgSW5pdFBvc3RncmVzKGNvbnN0IGNoYXIgKmluX2RibmFtZSwgT2lkIGRib2lkLAogCSAq LwogCVNoYXJlZEludmFsQmFja2VuZEluaXQoZmFsc2UpOwogCisJUHJvY1NpZ25hbEluaXQo TXlDYW5jZWxLZXlWYWxpZCwgTXlDYW5jZWxLZXkpOworCiAJLyoKIAkgKiBTZXQgdXAgYmFj a2VuZCBsb2NhbCBjYWNoZSBvZiBDb250cm9sZGF0YSB2YWx1ZXMuCiAJICovCiAJSW5pdExv Y2FsQ29udHJvbGRhdGEoKTsKIAotCVByb2NTaWduYWxJbml0KE15Q2FuY2VsS2V5VmFsaWQs IE15Q2FuY2VsS2V5KTsKLQogCS8qCiAJICogQWxzbyBzZXQgdXAgdGltZW91dCBoYW5kbGVy cyBuZWVkZWQgZm9yIGJhY2tlbmQgb3BlcmF0aW9uLiAgV2UgbmVlZAogCSAqIHRoZXNlIGlu IGV2ZXJ5IGNhc2UgZXhjZXB0IGJvb3RzdHJhcC4KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3Bvc3RtYXN0ZXIvZGF0YWNoZWNrc3Vtc3dvcmtlci5oIGIvc3JjL2luY2x1ZGUvcG9zdG1h c3Rlci9kYXRhY2hlY2tzdW1zd29ya2VyLmgKaW5kZXggNTljOTAwMGQ2NDYuLjA2NDkyMzI3 MjNkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2RhdGFjaGVja3N1bXN3 b3JrZXIuaAorKysgYi9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2RhdGFjaGVja3N1bXN3b3Jr ZXIuaApAQCAtNCw3ICs0LDcgQEAKICAqCSAgaGVhZGVyIGZpbGUgZm9yIGNoZWNrc3VtIGhl bHBlciBiYWNrZ3JvdW5kIHdvcmtlcgogICoKICAqCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQg KGMpIDE5OTYtMjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAq IFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBE ZXZlbG9wbWVudCBHcm91cAogICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdl bnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKICAqCiAgKiBzcmMvaW5jbHVk ZS9wb3N0bWFzdGVyL2RhdGFjaGVja3N1bXN3b3JrZXIuaApkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvY2hlY2tzdW0vTWFrZWZpbGUgYi9zcmMvdGVzdC9jaGVja3N1bS9NYWtlZmlsZQppbmRl eCBmZDAzYmY3M2RmNC4uZjI4NzAwMTMwMWUgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L2NoZWNr c3VtL01ha2VmaWxlCisrKyBiL3NyYy90ZXN0L2NoZWNrc3VtL01ha2VmaWxlCkBAIC0yLDcg KzIsNyBAQAogIwogIyBNYWtlZmlsZSBmb3Igc3JjL3Rlc3QvY2hlY2tzdW0KICMKLSMgUG9y dGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVs b3BtZW50IEdyb3VwCisjIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI1LCBQb3N0 Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAogIyBQb3J0aW9ucyBDb3B5cmlnaHQg KGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQogIwog IyBzcmMvdGVzdC9jaGVja3N1bS9NYWtlZmlsZQotLSAKMi40OC4xCgo= --------------hwLAc5AR555AcYbidDDolObH Content-Type: text/x-patch; charset=UTF-8; name="v20250315-0003-reworks.patch" Content-Disposition: attachment; filename="v20250315-0003-reworks.patch" Content-Transfer-Encoding: base64 RnJvbSA5NWJmZWEyYjEyNDE4NjcxYjVmOTUxM2RlZTEwN2EwYjE4YzhhNzhlIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogRnJpLCAxNCBNYXIgMjAyNSAyMjowNDoyNyArMDEwMApTdWJqZWN0OiBbUEFUQ0gg djIwMjUwMzE1IDMvNF0gcmV3b3JrcwoKLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNh bS94bG9nLmMgICAgICAgfCA0NSArKysrKysrKystLS0tLS0tLS0tLS0tLS0tCiBzcmMvYmFj a2VuZC9wb3N0bWFzdGVyL2F1eHByb2Nlc3MuYyAgICAgfCAxOSArKysrKysrKysrKwogc3Jj L2JhY2tlbmQvcG9zdG1hc3Rlci9sYXVuY2hfYmFja2VuZC5jIHwgMTAgLS0tLS0tCiBzcmMv YmFja2VuZC91dGlscy9pbml0L3Bvc3Rpbml0LmMgICAgICAgfCAxNyArKysrKysrKy0tCiBz cmMvaW5jbHVkZS9hY2Nlc3MveGxvZy5oICAgICAgICAgICAgICAgfCAgMiArLQogc3JjL2lu Y2x1ZGUvbWlzY2FkbWluLmggICAgICAgICAgICAgICAgIHwgIDEgLQogNiBmaWxlcyBjaGFu Z2VkLCA1MSBpbnNlcnRpb25zKCspLCA0MyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv dHJhbnNhbS94bG9nLmMKaW5kZXggZTRjNzJmOTg1ZTQuLjA2NGNjNTU1NWRjIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCkBAIC02NjEsMTIgKzY2MSwxNSBAQCBzdGF0aWMg Ym9vbCB1cGRhdGVNaW5SZWNvdmVyeVBvaW50ID0gdHJ1ZTsKIHN0YXRpYyB1aW50MzIgTG9j YWxEYXRhQ2hlY2tzdW1WZXJzaW9uID0gMDsKIAogLyoKLSAqIEZsYWcgdG8gcmVtZW1iZXIg aWYgdGhlIHByb2NzaWduYWxiYXJyaWVyIGJlaW5nIGFic29yYmVkIGZvciBlbmFibGluZwot ICogY2hlY2tzdW1zIGlzIHRoZSBmaXJzdCBvbmUgb3Igbm90LiBUaGUgZmlyc3QgcHJvY3Np Z25hbGJhcnJpZXIgY2FuIGluIHJhcmUKLSAqIGNpcmN1bXN0YW5jZXMgY2F1c2UgYSB0cmFu c2l0aW9uIGZyb20gJ29uJyB0byAnb24nIHdoZW4gYSBuZXcgcHJvY2VzcyBpcworICogRmxh ZyB0byByZW1lbWJlciBpZiB0aGUgcHJvY3NpZ25hbGJhcnJpZXIgYmVpbmcgYWJzb3JiZWQg Zm9yIGNoZWNrc3VtcworICogaXMgdGhlIGZpcnN0IG9uZS4gVGhlIGZpcnN0IHByb2NzaWdu YWxiYXJyaWVyIGNhbiBpbiByYXJlIGNhc2VzIGJlIGZvcgorICogdGhlIHN0YXRlIHdlJ3Zl IGluaXRpYWxpemVkLCBpLmUuIGEgZHVwbGljYXRlLiBUaGlzIG1heSBoYXBwZW4gZm9yIGFu eQorICogZGF0YV9jaGVja3N1bV92ZXJzaW9uIHZhbHVlLCBidXQgZm9yIFBHX0RBVEFfQ0hF Q0tTVU1fT05fVkVSU0lPTiB0aGlzCisgKiB3b3VsZCB0cmlnZ2VyIGFuIGFzc2VydCBmYWls dXJlICh0aGlzIGlzIHRoZSBvbmx5IHRyYW5zaXRpb24gd2l0aCBhbgorICogYXNzZXJ0KSB3 aGVuIHByb2Nlc3NpbmcgdGhlIGJhcnJpZXIuIFRoaXMgbWF5IGhhcHBlbiBpZiB0aGUgcHJv Y2VzcyBpcwogICogc3Bhd25lZCBiZXR3ZWVuIHRoZSB1cGRhdGUgb2YgWExvZ0N0bC0+ZGF0 YV9jaGVja3N1bV92ZXJzaW9uIGFuZCB0aGUKLSAqIGJhcnJpZXIgYmVpbmcgZW1pdHRlZC4g IFRoaXMgY2FuIG9ubHkgaGFwcGVuIG9uIHRoZSB2ZXJ5IGZpcnN0IGJhcnJpZXIgc28KLSAq IG1hcmsgdGhhdCB3aXRoIHRoaXMgZmxhZy4KKyAqIGJhcnJpZXIgYmVpbmcgZW1pdHRlZC4g VGhpcyBjYW4gb25seSBoYXBwZW4gb24gdGhlIHZlcnkgZmlyc3QgYmFycmllcgorICogc28g bWFyayB0aGF0IHdpdGggdGhpcyBmbGFnLgogICovCiBzdGF0aWMgYm9vbCBJbml0aWFsRGF0 YUNoZWNrc3VtVHJhbnNpdGlvbiA9IHRydWU7CiAKQEAgLTQ5MzgsNiArNDk0MSw3IEBAIFNl dERhdGFDaGVja3N1bXNPZmYodm9pZCkKIGJvb2wKIEFic29yYkNoZWNrc3Vtc09uSW5Qcm9n cmVzc0JhcnJpZXIodm9pZCkKIHsKKwkvKiBYWFggY2FuJ3Qgd2UgY2hlY2sgd2UncmUgaW4g T0ZGIG9yIElOUFJPR1JFU1NTX09OPyAqLwogCVNldExvY2FsRGF0YUNoZWNrc3VtVmVyc2lv bihQR19EQVRBX0NIRUNLU1VNX0lOUFJPR1JFU1NfT05fVkVSU0lPTik7CiAJcmV0dXJuIHRy dWU7CiB9CkBAIC00OTUwLDIyICs0OTU0LDE5IEBAIEFic29yYkNoZWNrc3Vtc09uQmFycmll cih2b2lkKQogCSAqIGJhcnJpZXIgaXQgd2lsbCBoYXZlIHNlZW4gdGhlIHVwZGF0ZWQgdmFs dWUsIHNvIGZvciB0aGUgZmlyc3QgYmFycmllcgogCSAqIHdlIGFjY2VwdCBib3RoICJvbiIg YW5kICJpbnByb2dyZXNzLW9uIi4KIAkgKi8KLQlpZiAoSW5pdGlhbERhdGFDaGVja3N1bVRy YW5zaXRpb24pCi0JewotCQlBc3NlcnQoKExvY2FsRGF0YUNoZWNrc3VtVmVyc2lvbiA9PSBQ R19EQVRBX0NIRUNLU1VNX0lOUFJPR1JFU1NfT05fVkVSU0lPTikgfHwKLQkJCSAgIChMb2Nh bERhdGFDaGVja3N1bVZlcnNpb24gPT0gUEdfREFUQV9DSEVDS1NVTV9WRVJTSU9OKSk7Ci0J CUluaXRpYWxEYXRhQ2hlY2tzdW1UcmFuc2l0aW9uID0gZmFsc2U7Ci0JfQotCWVsc2UKLQkJ QXNzZXJ0KExvY2FsRGF0YUNoZWNrc3VtVmVyc2lvbiA9PSBQR19EQVRBX0NIRUNLU1VNX0lO UFJPR1JFU1NfT05fVkVSU0lPTik7CisJQXNzZXJ0KChMb2NhbERhdGFDaGVja3N1bVZlcnNp b24gPT0gUEdfREFUQV9DSEVDS1NVTV9JTlBST0dSRVNTX09OX1ZFUlNJT04pIHx8CisJCSAg IChJbml0aWFsRGF0YUNoZWNrc3VtVHJhbnNpdGlvbiAmJgorCQkJKExvY2FsRGF0YUNoZWNr c3VtVmVyc2lvbiA9PSBQR19EQVRBX0NIRUNLU1VNX1ZFUlNJT04pKSk7CiAKIAlTZXRMb2Nh bERhdGFDaGVja3N1bVZlcnNpb24oUEdfREFUQV9DSEVDS1NVTV9WRVJTSU9OKTsKKwlJbml0 aWFsRGF0YUNoZWNrc3VtVHJhbnNpdGlvbiA9IGZhbHNlOwogCXJldHVybiB0cnVlOwogfQog CiBib29sCiBBYnNvcmJDaGVja3N1bXNPZmZJblByb2dyZXNzQmFycmllcih2b2lkKQogewor CS8qIFhYWCBjYW4ndCB3ZSBjaGVjayB3ZSdyZSBpbiBPTiBvciBJTlBST0dSRVNTU19PRkY/ ICovCiAJU2V0TG9jYWxEYXRhQ2hlY2tzdW1WZXJzaW9uKFBHX0RBVEFfQ0hFQ0tTVU1fSU5Q Uk9HUkVTU19PRkZfVkVSU0lPTik7CiAJcmV0dXJuIHRydWU7CiB9CkBAIC00OTczLDYgKzQ5 NzQsNyBAQCBBYnNvcmJDaGVja3N1bXNPZmZJblByb2dyZXNzQmFycmllcih2b2lkKQogYm9v bAogQWJzb3JiQ2hlY2tzdW1zT2ZmQmFycmllcih2b2lkKQogeworCS8qIFhYWCBjYW4ndCB3 ZSBjaGVjayB3ZSdyZSBpbiBJTlBST0dSRVNTU19PRkY/ICovCiAJU2V0TG9jYWxEYXRhQ2hl Y2tzdW1WZXJzaW9uKDApOwogCXJldHVybiB0cnVlOwogfQpAQCAtNDk4Niw3ICs0OTg4LDcg QEAgQWJzb3JiQ2hlY2tzdW1zT2ZmQmFycmllcih2b2lkKQogICogcHVycG9zZSBlbm91Z2gg dG8gaGFuZGxlIGZ1dHVyZSBjYXNlcy4KICAqLwogdm9pZAotSW5pdExvY2FsQ29udHJvbGRh dGEodm9pZCkKK0luaXRMb2NhbERhdGFDaGVja3N1bVZlcnNpb24odm9pZCkKIHsKIAlTcGlu TG9ja0FjcXVpcmUoJlhMb2dDdGwtPmluZm9fbGNrKTsKIAlTZXRMb2NhbERhdGFDaGVja3N1 bVZlcnNpb24oWExvZ0N0bC0+ZGF0YV9jaGVja3N1bV92ZXJzaW9uKTsKQEAgLTUwMjQsMjEg KzUwMjYsNiBAQCBTZXRMb2NhbERhdGFDaGVja3N1bVZlcnNpb24odWludDMyIGRhdGFfY2hl Y2tzdW1fdmVyc2lvbikKIAl9CiB9CiAKLS8qCi0gKiBJbml0aWFsaXplIHRoZSB2YXJpb3Vz IGRhdGEgY2hlY2tzdW0gdmFsdWVzIC0gR1VDLCBsb2NhbCwgLi4uLgotICovCi12b2lkCi1J bml0TG9jYWxEYXRhQ2hlY2tzdW1WZXJzaW9uKHZvaWQpCi17Ci0JdWludDMyCWRhdGFfY2hl Y2tzdW1fdmVyc2lvbjsKLQotCVNwaW5Mb2NrQWNxdWlyZSgmWExvZ0N0bC0+aW5mb19sY2sp OwotCWRhdGFfY2hlY2tzdW1fdmVyc2lvbiA9IFhMb2dDdGwtPmRhdGFfY2hlY2tzdW1fdmVy c2lvbjsKLQlTcGluTG9ja1JlbGVhc2UoJlhMb2dDdGwtPmluZm9fbGNrKTsKLQotCVNldExv Y2FsRGF0YUNoZWNrc3VtVmVyc2lvbihkYXRhX2NoZWNrc3VtX3ZlcnNpb24pOwotfQotCiAv KgogICogR2V0IHRoZSBsb2NhbCBkYXRhX2NoZWNrc3VtX3ZlcnNpb24gKGNhY2hlZCBYTG9n Q3RsIHZhbHVlKS4KICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9h dXhwcm9jZXNzLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1eHByb2Nlc3MuYwppbmRl eCA0ZjY3OTVmNzI2NS4uNTBkNTMwODgxNmMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bv c3RtYXN0ZXIvYXV4cHJvY2Vzcy5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV4 cHJvY2Vzcy5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5j bHVkZSA8c2lnbmFsLmg+CiAKKyNpbmNsdWRlICJhY2Nlc3MveGxvZy5oIgogI2luY2x1ZGUg Im1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInBvc3RtYXN0 ZXIvYXV4cHJvY2Vzcy5oIgpAQCAtNjgsNiArNjksMjQgQEAgQXV4aWxpYXJ5UHJvY2Vzc01h aW5Db21tb24odm9pZCkKIAogCVByb2NTaWduYWxJbml0KGZhbHNlLCAwKTsKIAorCS8qCisJ ICogSW5pdGlhbGl6ZSBhIGxvY2FsIGNhY2hlIG9mIHRoZSBkYXRhX2NoZWNrc3VtX3ZlcnNp b24sIHRvIGJlIHVwZGF0ZWQKKwkgKiBieSB0aGUgcHJvY3NpZ25hbC1iYXNlZCBiYXJyaWVy cy4KKwkgKgorCSAqIFRoaXMgaW50ZW50aW9uYWxseSBoYXBwZW5zIGFmdGVyIGluaXRpYWxp emluZyB0aGUgcHJvY3NpZ25hbCwgb3RoZXJ3aXNlCisJICogd2UgbWlnaHQgbWlzcyBhIHN0 YXRlIGNoYW5nZS4gVGhpcyBtZWFucyB3ZSBjYW4gZ2V0IGEgYmFycmllciBmb3IgdGhlCisJ ICogc3RhdGUgd2UndmUganVzdCBpbml0aWFsaXplZCAtIGJ1dCBpdCBjYW4gaGFwcGVuIG9u bHkgb25jZS4KKwkgKgorCSAqIFRoZSBwb3N0bWFzdGVyICh3aGljaCBpcyB3aGF0IGdldHMg Zm9ya2VkIGludG8gdGhlIG5ldyBjaGlsZCBwcm9jZXNzKQorCSAqIGRvZXMgbm90IGhhbmRs ZSBiYXJyaWVycywgdGhlcmVmb3JlIGl0IG1heSBub3QgaGF2ZSB0aGUgY3VycmVudCB2YWx1 ZQorCSAqIG9mIExvY2FsRGF0YUNoZWNrc3VtVmVyc2lvbiB2YWx1ZSAoaXQnbGwgaGF2ZSB0 aGUgdmFsdWUgcmVhZCBmcm9tIHRoZQorCSAqIGNvbnRyb2wgZmlsZSwgd2hpY2ggbWF5IGJl IGFyYml0cmFyaWx5IG9sZCkuCisJICoKKwkgKiBOQjogRXZlbiBpZiB0aGUgcG9zdG1hc3Rl ciBoYW5kbGVkIGJhcnJpZXJzLCB0aGUgdmFsdWUgbWlnaHQgc3RpbGwgYmUKKwkgKiBzdGFs ZSwgYXMgaXQgbWlnaHQgaGF2ZSBjaGFuZ2VkIGFmdGVyIHRoaXMgcHJvY2VzcyBmb3JrZWQu CisJICovCisJSW5pdExvY2FsRGF0YUNoZWNrc3VtVmVyc2lvbigpOworCiAJLyoKIAkgKiBB dXhpbGlhcnkgcHJvY2Vzc2VzIGRvbid0IHJ1biB0cmFuc2FjdGlvbnMsIGJ1dCB0aGV5IG1h eSBuZWVkIGEKIAkgKiByZXNvdXJjZSBvd25lciBhbnl3YXkgdG8gbWFuYWdlIGJ1ZmZlciBw aW5zIGFjcXVpcmVkIG91dHNpZGUKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0 ZXIvbGF1bmNoX2JhY2tlbmQuYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvbGF1bmNoX2Jh Y2tlbmQuYwppbmRleCA2NWJiZjc3MGQyOC4uYjA2YjVmYjQ1ZGQgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3Bvc3RtYXN0ZXIvbGF1bmNoX2JhY2tlbmQuYworKysgYi9zcmMvYmFja2Vu ZC9wb3N0bWFzdGVyL2xhdW5jaF9iYWNrZW5kLmMKQEAgLTI4NSwxNiArMjg1LDYgQEAgcG9z dG1hc3Rlcl9jaGlsZF9sYXVuY2goQmFja2VuZFR5cGUgY2hpbGRfdHlwZSwgaW50IGNoaWxk X3Nsb3QsCiAJCQltZW1jcHkoTXlDbGllbnRTb2NrZXQsIGNsaWVudF9zb2NrLCBzaXplb2Yo Q2xpZW50U29ja2V0KSk7CiAJCX0KIAotCQkvKgotCQkgKiB1cGRhdGUgdGhlIExvY2FsUHJv Y2Vzc0NvbnRyb2xGaWxlIHRvIG1hdGNoIFhMb2dDdGwtPmRhdGFfY2hlY2tzdW1fdmVyc2lv bgotCQkgKgotCQkgKiBYWFggSXQgc2VlbXMgdGhlIHBvc3RtYXN0ZXIgKHdoaWNoIGlzIHdo YXQgZ2V0cyBmb3JrZWQgaW50byB0aGUgbmV3Ci0JCSAqIGNoaWxkIHByb2Nlc3MpIGRvZXMg bm90IGFic29yYiB0aGUgY2hlY2tzdW0gYmFycmllcnMsIHRoZXJlZm9yZSBpdAotCQkgKiBk b2VzIG5vdCB1cGRhdGUgdGhlIHZhbHVlIChleGNlcHQgYWZ0ZXIgYSByZXN0YXJ0KS4gTm90 IHN1cmUgaWYgdGhlcmUKLQkJICogaXMgc29tZSBzb3J0IG9mIHJhY2UgY29uZGl0aW9uLgot CQkgKi8KLQkJSW5pdExvY2FsRGF0YUNoZWNrc3VtVmVyc2lvbigpOwotCiAJCS8qCiAJCSAq IFJ1biB0aGUgYXBwcm9wcmlhdGUgTWFpbiBmdW5jdGlvbgogCQkgKi8KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvcG9zdGluaXQuYyBiL3NyYy9iYWNrZW5kL3V0aWxz L2luaXQvcG9zdGluaXQuYwppbmRleCA2OTI1NzBlYjBmMS4uZDEzOTRmYzA1ZjkgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvcG9zdGluaXQuYworKysgYi9zcmMvYmFj a2VuZC91dGlscy9pbml0L3Bvc3Rpbml0LmMKQEAgLTc0OSw5ICs3NDksMjIgQEAgSW5pdFBv c3RncmVzKGNvbnN0IGNoYXIgKmluX2RibmFtZSwgT2lkIGRib2lkLAogCVByb2NTaWduYWxJ bml0KE15Q2FuY2VsS2V5VmFsaWQsIE15Q2FuY2VsS2V5KTsKIAogCS8qCi0JICogU2V0IHVw IGJhY2tlbmQgbG9jYWwgY2FjaGUgb2YgQ29udHJvbGRhdGEgdmFsdWVzLgorCSAqIEluaXRp YWxpemUgYSBsb2NhbCBjYWNoZSBvZiB0aGUgZGF0YV9jaGVja3N1bV92ZXJzaW9uLCB0byBi ZSB1cGRhdGVkCisJICogYnkgdGhlIHByb2NzaWduYWwtYmFzZWQgYmFycmllcnMuCisJICoK KwkgKiBUaGlzIGludGVudGlvbmFsbHkgaGFwcGVucyBhZnRlciBpbml0aWFsaXppbmcgdGhl IHByb2NzaWduYWwsIG90aGVyd2lzZQorCSAqIHdlIG1pZ2h0IG1pc3MgYSBzdGF0ZSBjaGFu Z2UuIFRoaXMgbWVhbnMgd2UgY2FuIGdldCBhIGJhcnJpZXIgZm9yIHRoZQorCSAqIHN0YXRl IHdlJ3ZlIGp1c3QgaW5pdGlhbGl6ZWQgLSBidXQgaXQgY2FuIGhhcHBlbiBvbmx5IG9uY2Uu CisJICoKKwkgKiBUaGUgcG9zdG1hc3RlciAod2hpY2ggaXMgd2hhdCBnZXRzIGZvcmtlZCBp bnRvIHRoZSBuZXcgY2hpbGQgcHJvY2VzcykKKwkgKiBkb2VzIG5vdCBoYW5kbGUgYmFycmll cnMsIHRoZXJlZm9yZSBpdCBtYXkgbm90IGhhdmUgdGhlIGN1cnJlbnQgdmFsdWUKKwkgKiBv ZiBMb2NhbERhdGFDaGVja3N1bVZlcnNpb24gdmFsdWUgKGl0J2xsIGhhdmUgdGhlIHZhbHVl IHJlYWQgZnJvbSB0aGUKKwkgKiBjb250cm9sIGZpbGUsIHdoaWNoIG1heSBiZSBhcmJpdHJh cmlseSBvbGQpLgorCSAqCisJICogTkI6IEV2ZW4gaWYgdGhlIHBvc3RtYXN0ZXIgaGFuZGxl ZCBiYXJyaWVycywgdGhlIHZhbHVlIG1pZ2h0IHN0aWxsIGJlCisJICogc3RhbGUsIGFzIGl0 IG1pZ2h0IGhhdmUgY2hhbmdlZCBhZnRlciB0aGlzIHByb2Nlc3MgZm9ya2VkLgogCSAqLwot CUluaXRMb2NhbENvbnRyb2xkYXRhKCk7CisJSW5pdExvY2FsRGF0YUNoZWNrc3VtVmVyc2lv bigpOwogCiAJLyoKIAkgKiBBbHNvIHNldCB1cCB0aW1lb3V0IGhhbmRsZXJzIG5lZWRlZCBm b3IgYmFja2VuZCBvcGVyYXRpb24uICBXZSBuZWVkCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9hY2Nlc3MveGxvZy5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2cuaAppbmRleCBhZWMz ZWEwYmM2My4uNjE1YjJjZjRlYzggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy94 bG9nLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2cuaApAQCAtMjQzLDcgKzI0Myw3 IEBAIGV4dGVybiBib29sIEFic29yYkNoZWNrc3Vtc09mZkluUHJvZ3Jlc3NCYXJyaWVyKHZv aWQpOwogZXh0ZXJuIGJvb2wgQWJzb3JiQ2hlY2tzdW1zT25CYXJyaWVyKHZvaWQpOwogZXh0 ZXJuIGJvb2wgQWJzb3JiQ2hlY2tzdW1zT2ZmQmFycmllcih2b2lkKTsKIGV4dGVybiBjb25z dCBjaGFyICpzaG93X2RhdGFfY2hlY2tzdW1zKHZvaWQpOwotZXh0ZXJuIHZvaWQgSW5pdExv Y2FsQ29udHJvbGRhdGEodm9pZCk7CitleHRlcm4gdm9pZCBJbml0TG9jYWxEYXRhQ2hlY2tz dW1WZXJzaW9uKHZvaWQpOwogZXh0ZXJuIGJvb2wgR2V0RGVmYXVsdENoYXJTaWduZWRuZXNz KHZvaWQpOwogZXh0ZXJuIFhMb2dSZWNQdHIgR2V0RmFrZUxTTkZvclVubG9nZ2VkUmVsKHZv aWQpOwogZXh0ZXJuIFNpemUgWExPR1NobWVtU2l6ZSh2b2lkKTsKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL21pc2NhZG1pbi5oIGIvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmgKaW5kZXgg MTMzZTdmZGUyOTAuLjE5M2NlMWI0NTE0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9taXNj YWRtaW4uaAorKysgYi9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaApAQCAtNTQyLDcgKzU0Miw2 IEBAIGV4dGVybiB2b2lkIFJlc3RvcmVDbGllbnRDb25uZWN0aW9uSW5mbyhjaGFyICpjb25u aW5mbyk7CiAKIGV4dGVybiB1aW50MzIgR2V0TG9jYWxEYXRhQ2hlY2tzdW1WZXJzaW9uKHZv aWQpOwogZXh0ZXJuIHVpbnQzMiBHZXRDdXJyZW50RGF0YUNoZWNrc3VtVmVyc2lvbih2b2lk KTsKLWV4dGVybiB2b2lkIEluaXRMb2NhbERhdGFDaGVja3N1bVZlcnNpb24odm9pZCk7CiAK IC8qIGluIGV4ZWN1dG9yL25vZGVIYXNoLmMgKi8KIGV4dGVybiBzaXplX3QgZ2V0X2hhc2hf bWVtb3J5X2xpbWl0KHZvaWQpOwotLSAKMi40OC4xCgo= --------------hwLAc5AR555AcYbidDDolObH Content-Type: text/x-patch; charset=UTF-8; name="v20250315-0004-debug-stuff.patch" Content-Disposition: attachment; filename="v20250315-0004-debug-stuff.patch" Content-Transfer-Encoding: base64 RnJvbSBkOWE5Y2FmMDQyNTU0M2VmMjE3MDAyMzlkY2Q4ZDYyY2NhYWRmZDViIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogU2F0LCAxNSBNYXIgMjAyNSAxMDo0MjoxNiArMDEwMApTdWJqZWN0OiBbUEFUQ0gg djIwMjUwMzE1IDQvNF0gZGVidWcgc3R1ZmYKCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL3Ry YW5zYW0veGxvZy5jICAgICAgIHwgODYgKysrKysrKysrKysrKysrKysrKysrKysrLQogc3Jj L2JhY2tlbmQvcG9zdG1hc3Rlci9sYXVuY2hfYmFja2VuZC5jIHwgIDMgKwogc3JjL2JhY2tl bmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jICAgIHwgMzQgKysrKysrKysrKwogc3JjL2Jh Y2tlbmQvc3RvcmFnZS9wYWdlL2J1ZnBhZ2UuYyAgICAgIHwgMzUgKysrKysrKysrKwogc3Jj L2JhY2tlbmQvdXRpbHMvaW5pdC9taXNjaW5pdC5jICAgICAgIHwgIDMgKwogc3JjL2Jpbi9w Z19jb250cm9sZGF0YS9wZ19jb250cm9sZGF0YS5jIHwgIDIgKwogNiBmaWxlcyBjaGFuZ2Vk LCAxNjAgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS94bG9nLmMKaW5kZXggMDY0Y2M1NTU1ZGMuLmEwMWFmYzMyYWY4IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMKKysrIGIvc3JjL2JhY2tlbmQv YWNjZXNzL3RyYW5zYW0veGxvZy5jCkBAIC00Mjg0LDYgKzQyODQsOCBAQCBJbml0Q29udHJv bEZpbGUodWludDY0IHN5c2lkZW50aWZpZXIsIHVpbnQzMiBkYXRhX2NoZWNrc3VtX3ZlcnNp b24pCiAJICogcHJvY2Vzc2VzIGdldCB0aGUgY3VycmVudCB2YWx1ZSBmcm9tLiAoTWF5YmUg aXQgc2hvdWxkIGdvIGp1c3QgdGhlcmU/KQogCSAqLwogCVhMb2dDdGwtPmRhdGFfY2hlY2tz dW1fdmVyc2lvbiA9IGRhdGFfY2hlY2tzdW1fdmVyc2lvbjsKKworCWVsb2coTE9HLCAiSW5p dENvbnRyb2xGaWxlICVwIGRhdGFfY2hlY2tzdW1fdmVyc2lvbiAldSIsIFhMb2dDdGwsIENv bnRyb2xGaWxlLT5kYXRhX2NoZWNrc3VtX3ZlcnNpb24pOwogfQogCiBzdGF0aWMgdm9pZApA QCAtNDYyMyw2ICs0NjI1LDggQEAgUmVhZENvbnRyb2xGaWxlKHZvaWQpCiAJCShTaXplT2ZY TG9nTG9uZ1BIRCAtIFNpemVPZlhMb2dTaG9ydFBIRCk7CiAKIAlDYWxjdWxhdGVDaGVja3Bv aW50U2VnbWVudHMoKTsKKworCWVsb2coTE9HLCAiUmVhZENvbnRyb2xGaWxlIENvbnRyb2xG aWxlLT5kYXRhX2NoZWNrc3VtX3ZlcnNpb24gPSAldSIsIENvbnRyb2xGaWxlLT5kYXRhX2No ZWNrc3VtX3ZlcnNpb24pOwogfQogCiAvKgpAQCAtNDc1OCw2ICs0NzYyLDggQEAgU2V0RGF0 YUNoZWNrc3Vtc09uSW5Qcm9ncmVzcyh2b2lkKQogCVhMb2dDdGwtPmRhdGFfY2hlY2tzdW1f dmVyc2lvbiA9IFBHX0RBVEFfQ0hFQ0tTVU1fSU5QUk9HUkVTU19PTl9WRVJTSU9OOwogCVNw aW5Mb2NrUmVsZWFzZSgmWExvZ0N0bC0+aW5mb19sY2spOwogCisJZWxvZyhMT0csICJTZXRE YXRhQ2hlY2tzdW1zT25JblByb2dyZXNzIFhMb2dDdGwtPmRhdGFfY2hlY2tzdW1fdmVyc2lv biA9ICV1IiwgWExvZ0N0bC0+ZGF0YV9jaGVja3N1bV92ZXJzaW9uKTsKKwogCWJhcnJpZXIg PSBFbWl0UHJvY1NpZ25hbEJhcnJpZXIoUFJPQ1NJR05BTF9CQVJSSUVSX0NIRUNLU1VNX0lO UFJPR1JFU1NfT04pOwogCiAJRU5EX0NSSVRfU0VDVElPTigpOwpAQCAtNDgyMyw2ICs0ODI5 LDggQEAgU2V0RGF0YUNoZWNrc3Vtc09uKHZvaWQpCiAJWExvZ0N0bC0+ZGF0YV9jaGVja3N1 bV92ZXJzaW9uID0gUEdfREFUQV9DSEVDS1NVTV9WRVJTSU9OOwogCVNwaW5Mb2NrUmVsZWFz ZSgmWExvZ0N0bC0+aW5mb19sY2spOwogCisJZWxvZyhMT0csICJTZXREYXRhQ2hlY2tzdW1z T24gWExvZ0N0bC0+ZGF0YV9jaGVja3N1bV92ZXJzaW9uID0gJXUiLCBYTG9nQ3RsLT5kYXRh X2NoZWNrc3VtX3ZlcnNpb24pOworCiAJYmFycmllciA9IEVtaXRQcm9jU2lnbmFsQmFycmll cihQUk9DU0lHTkFMX0JBUlJJRVJfQ0hFQ0tTVU1fT04pOwogCiAJRU5EX0NSSVRfU0VDVElP TigpOwpAQCAtNDg2MSw2ICs0ODY5LDcgQEAgU2V0RGF0YUNoZWNrc3Vtc09mZih2b2lkKQog CS8qIElmIGRhdGEgY2hlY2tzdW1zIGFyZSBhbHJlYWR5IGRpc2FibGVkIHRoZXJlIGlzIG5v dGhpbmcgdG8gZG8gKi8KIAlpZiAoWExvZ0N0bC0+ZGF0YV9jaGVja3N1bV92ZXJzaW9uID09 IDApCiAJeworCQllbG9nKExPRywgIlNldERhdGFDaGVja3N1bXNPZmYgWExvZ0N0bC0+ZGF0 YV9jaGVja3N1bV92ZXJzaW9uID0gJXUgKFNLSVApIiwgWExvZ0N0bC0+ZGF0YV9jaGVja3N1 bV92ZXJzaW9uKTsKIAkJU3BpbkxvY2tSZWxlYXNlKCZYTG9nQ3RsLT5pbmZvX2xjayk7CiAJ CXJldHVybjsKIAl9CkBAIC00ODg1LDYgKzQ4OTQsOCBAQCBTZXREYXRhQ2hlY2tzdW1zT2Zm KHZvaWQpCiAJCVhMb2dDdGwtPmRhdGFfY2hlY2tzdW1fdmVyc2lvbiA9IFBHX0RBVEFfQ0hF Q0tTVU1fSU5QUk9HUkVTU19PRkZfVkVSU0lPTjsKIAkJU3BpbkxvY2tSZWxlYXNlKCZYTG9n Q3RsLT5pbmZvX2xjayk7CiAKKwkJZWxvZyhMT0csICJTZXREYXRhQ2hlY2tzdW1zT2ZmIFhM b2dDdGwtPmRhdGFfY2hlY2tzdW1fdmVyc2lvbiA9ICV1IiwgWExvZ0N0bC0+ZGF0YV9jaGVj a3N1bV92ZXJzaW9uKTsKKwogCQliYXJyaWVyID0gRW1pdFByb2NTaWduYWxCYXJyaWVyKFBS T0NTSUdOQUxfQkFSUklFUl9DSEVDS1NVTV9JTlBST0dSRVNTX09GRik7CiAKIAkJRU5EX0NS SVRfU0VDVElPTigpOwpAQCAtNDkwNSw2ICs0OTE2LDggQEAgU2V0RGF0YUNoZWNrc3Vtc09m Zih2b2lkKQogCX0KIAllbHNlCiAJeworCQllbG9nKExPRywgIlNldERhdGFDaGVja3N1bXNP ZmYgWExvZ0N0bC0+ZGF0YV9jaGVja3N1bV92ZXJzaW9uID0gJXUgKFNLSVApIiwgWExvZ0N0 bC0+ZGF0YV9jaGVja3N1bV92ZXJzaW9uKTsKKwogCQkvKgogCQkgKiBFbmRpbmcgdXAgaGVy ZSBpbXBsaWVzIHRoYXQgdGhlIGNoZWNrc3VtcyBzdGF0ZSBpcyAiaW5wcm9ncmVzcy1vbiIK IAkJICogb3IgImlucHJvZ3Jlc3Mtb2ZmIiBhbmQgd2UgY2FuIHRyYW5zaXRpb24gZGlyZWN0 bHkgdG8gIm9mZiIgZnJvbQpAQCAtNDk0Miw2ICs0OTU1LDcgQEAgYm9vbAogQWJzb3JiQ2hl Y2tzdW1zT25JblByb2dyZXNzQmFycmllcih2b2lkKQogewogCS8qIFhYWCBjYW4ndCB3ZSBj aGVjayB3ZSdyZSBpbiBPRkYgb3IgSU5QUk9HUkVTU1NfT04/ICovCisJZWxvZyhMT0csICJB YnNvcmJDaGVja3N1bXNPbkluUHJvZ3Jlc3NCYXJyaWVyIik7CiAJU2V0TG9jYWxEYXRhQ2hl Y2tzdW1WZXJzaW9uKFBHX0RBVEFfQ0hFQ0tTVU1fSU5QUk9HUkVTU19PTl9WRVJTSU9OKTsK IAlyZXR1cm4gdHJ1ZTsKIH0KQEAgLTQ5NDksNiArNDk2Myw4IEBAIEFic29yYkNoZWNrc3Vt c09uSW5Qcm9ncmVzc0JhcnJpZXIodm9pZCkKIGJvb2wKIEFic29yYkNoZWNrc3Vtc09uQmFy cmllcih2b2lkKQogeworCWVsb2coTE9HLCAiQWJzb3JiQ2hlY2tzdW1zT25CYXJyaWVyIik7 CisKIAkvKgogCSAqIElmIHRoZSBwcm9jZXNzIHdhcyBzcGF3bmVkIGJldHdlZW4gdXBkYXRp bmcgWExvZ0N0bCBhbmQgZW1pdHRpbmcgdGhlCiAJICogYmFycmllciBpdCB3aWxsIGhhdmUg c2VlbiB0aGUgdXBkYXRlZCB2YWx1ZSwgc28gZm9yIHRoZSBmaXJzdCBiYXJyaWVyCkBAIC00 OTY3LDYgKzQ5ODMsNyBAQCBib29sCiBBYnNvcmJDaGVja3N1bXNPZmZJblByb2dyZXNzQmFy cmllcih2b2lkKQogewogCS8qIFhYWCBjYW4ndCB3ZSBjaGVjayB3ZSdyZSBpbiBPTiBvciBJ TlBST0dSRVNTU19PRkY/ICovCisJZWxvZyhMT0csICJBYnNvcmJDaGVja3N1bXNPZmZJblBy b2dyZXNzQmFycmllciIpOwogCVNldExvY2FsRGF0YUNoZWNrc3VtVmVyc2lvbihQR19EQVRB X0NIRUNLU1VNX0lOUFJPR1JFU1NfT0ZGX1ZFUlNJT04pOwogCXJldHVybiB0cnVlOwogfQpA QCAtNDk3NSw2ICs0OTkyLDcgQEAgYm9vbAogQWJzb3JiQ2hlY2tzdW1zT2ZmQmFycmllcih2 b2lkKQogewogCS8qIFhYWCBjYW4ndCB3ZSBjaGVjayB3ZSdyZSBpbiBJTlBST0dSRVNTU19P RkY/ICovCisJZWxvZyhMT0csICJBYnNvcmJDaGVja3N1bXNPZmZCYXJyaWVyIik7CiAJU2V0 TG9jYWxEYXRhQ2hlY2tzdW1WZXJzaW9uKDApOwogCXJldHVybiB0cnVlOwogfQpAQCAtNDk5 MCw2ICs1MDA4LDcgQEAgQWJzb3JiQ2hlY2tzdW1zT2ZmQmFycmllcih2b2lkKQogdm9pZAog SW5pdExvY2FsRGF0YUNoZWNrc3VtVmVyc2lvbih2b2lkKQogeworCWVsb2coTE9HLCAiSW5p dExvY2FsRGF0YUNoZWNrc3VtVmVyc2lvbiBYTG9nQ3RsLT5kYXRhX2NoZWNrc3VtX3ZlcnNp b24gPSAldSIsIFhMb2dDdGwtPmRhdGFfY2hlY2tzdW1fdmVyc2lvbik7CiAJU3BpbkxvY2tB Y3F1aXJlKCZYTG9nQ3RsLT5pbmZvX2xjayk7CiAJU2V0TG9jYWxEYXRhQ2hlY2tzdW1WZXJz aW9uKFhMb2dDdGwtPmRhdGFfY2hlY2tzdW1fdmVyc2lvbik7CiAJU3BpbkxvY2tSZWxlYXNl KCZYTG9nQ3RsLT5pbmZvX2xjayk7CkBAIC01MDA0LDYgKzUwMjMsNyBAQCBJbml0TG9jYWxE YXRhQ2hlY2tzdW1WZXJzaW9uKHZvaWQpCiB2b2lkCiBTZXRMb2NhbERhdGFDaGVja3N1bVZl cnNpb24odWludDMyIGRhdGFfY2hlY2tzdW1fdmVyc2lvbikKIHsKKwllbG9nKExPRywgIlNl dExvY2FsRGF0YUNoZWNrc3VtVmVyc2lvbiAldSIsIGRhdGFfY2hlY2tzdW1fdmVyc2lvbik7 CiAJTG9jYWxEYXRhQ2hlY2tzdW1WZXJzaW9uID0gZGF0YV9jaGVja3N1bV92ZXJzaW9uOwog CiAJc3dpdGNoIChMb2NhbERhdGFDaGVja3N1bVZlcnNpb24pCkBAIC01NDk5LDkgKzU1MTks MTUgQEAgWExPR1NobWVtSW5pdCh2b2lkKQogCVhMb2dDdGwtPkluc3RhbGxYTG9nRmlsZVNl Z21lbnRBY3RpdmUgPSBmYWxzZTsKIAlYTG9nQ3RsLT5XYWxXcml0ZXJTbGVlcGluZyA9IGZh bHNlOwogCisJZWxvZyhMT0csICJYTG9nQ3RsLT5kYXRhX2NoZWNrc3VtX3ZlcnNpb24gJXUg Q29udHJvbEZpbGUtPmRhdGFfY2hlY2tzdW1fdmVyc2lvbiAldSIsCisJCSBYTG9nQ3RsLT5k YXRhX2NoZWNrc3VtX3ZlcnNpb24sIENvbnRyb2xGaWxlLT5kYXRhX2NoZWNrc3VtX3ZlcnNp b24pOworCiAJLyogdXNlIHRoZSBjaGVja3N1bSBpbmZvIGZyb20gY29udHJvbCBmaWxlICov CiAJWExvZ0N0bC0+ZGF0YV9jaGVja3N1bV92ZXJzaW9uID0gQ29udHJvbEZpbGUtPmRhdGFf Y2hlY2tzdW1fdmVyc2lvbjsKIAorCWVsb2coTE9HLCAiWExvZ0N0bC0+ZGF0YV9jaGVja3N1 bV92ZXJzaW9uICV1IENvbnRyb2xGaWxlLT5kYXRhX2NoZWNrc3VtX3ZlcnNpb24gJXUgKFVQ REFURUQpIiwKKwkJIFhMb2dDdGwtPmRhdGFfY2hlY2tzdW1fdmVyc2lvbiwgQ29udHJvbEZp bGUtPmRhdGFfY2hlY2tzdW1fdmVyc2lvbik7CisKIAlTZXRMb2NhbERhdGFDaGVja3N1bVZl cnNpb24oWExvZ0N0bC0+ZGF0YV9jaGVja3N1bV92ZXJzaW9uKTsKIAogCVNwaW5Mb2NrSW5p dCgmWExvZ0N0bC0+SW5zZXJ0Lmluc2VydHBvc19sY2spOwpAQCAtNjYzNSw2ICs2NjYxLDgg QEAgU3RhcnR1cFhMT0codm9pZCkKIAkgKi8KIAlDb21wbGV0ZUNvbW1pdFRzSW5pdGlhbGl6 YXRpb24oKTsKIAorCWVsb2coTE9HLCAiU3RhcnR1cFhMT0cgWExvZ0N0bC0+ZGF0YV9jaGVj a3N1bV92ZXJzaW9uID0gJXUiLCBYTG9nQ3RsLT5kYXRhX2NoZWNrc3VtX3ZlcnNpb24pOwor CiAJLyoKIAkgKiBJZiB3ZSByZWFjaCB0aGlzIHBvaW50IHdpdGggY2hlY2tzdW1zIGJlaW5n IGVuYWJsZWQgKCJpbnByb2dyZXNzLW9uIgogCSAqIHN0YXRlKSwgd2Ugbm90aWZ5IHRoZSB1 c2VyIHRoYXQgdGhleSBuZWVkIHRvIG1hbnVhbGx5IHJlc3RhcnQgdGhlCkBAIC02NjUyLDYg KzY2ODAsOSBAQCBTdGFydHVwWExPRyh2b2lkKQogCSAqIHdlIGtub3cgdGhhdCB3ZSBoYXZl IGEgc3RhdGUgd2hlcmUgYWxsIGJhY2tlbmRzIGhhdmUgc3RvcHBlZCB2YWxpZGF0aW5nCiAJ ICogY2hlY2tzdW1zIGFuZCB3ZSBjYW4gbW92ZSB0byBvZmYgaW5zdGVhZCBvZiBwcm9tcHRp bmcgdGhlIHVzZXIgdG8KIAkgKiBwZXJmb3JtIGFueSBhY3Rpb24uCisJICoKKwkgKiBYWFgg SXMgaXQgc2FmZSB0byBhY2Nlc3MgdGhlIGRhdGFfY2hlY2tzdW1fdmVyc2lvbiB3aXRob3V0 IGhvbGRpbmcgdGhlCisJICogc3BpbmxvY2s/CiAJICovCiAJaWYgKFhMb2dDdGwtPmRhdGFf Y2hlY2tzdW1fdmVyc2lvbiA9PSBQR19EQVRBX0NIRUNLU1VNX0lOUFJPR1JFU1NfT0ZGX1ZF UlNJT04pCiAJewpAQCAtNjY2MCw2ICs2NjkxLDggQEAgU3RhcnR1cFhMT0codm9pZCkKIAkJ U3BpbkxvY2tBY3F1aXJlKCZYTG9nQ3RsLT5pbmZvX2xjayk7CiAJCVhMb2dDdGwtPmRhdGFf Y2hlY2tzdW1fdmVyc2lvbiA9IDA7CiAJCVNwaW5Mb2NrUmVsZWFzZSgmWExvZ0N0bC0+aW5m b19sY2spOworCisJCWVsb2coTE9HLCAiU3RhcnR1cFhMT0cgWExvZ0N0bC0+ZGF0YV9jaGVj a3N1bV92ZXJzaW9uID0gJXUgKFVQREFURUQpIiwgWExvZ0N0bC0+ZGF0YV9jaGVja3N1bV92 ZXJzaW9uKTsKIAl9CiAKIAkvKgpAQCAtNzUyMyw2ICs3NTU2LDggQEAgQ3JlYXRlQ2hlY2tQ b2ludChpbnQgZmxhZ3MpCiAJICovCiAJY2hlY2tQb2ludC5kYXRhX2NoZWNrc3VtX3ZlcnNp b24gPSBYTG9nQ3RsLT5kYXRhX2NoZWNrc3VtX3ZlcnNpb247CiAKKwllbG9nKFdBUk5JTkcs ICJDUkVBVEVDSEVDS1BPSU5UIFhMb2dDdGwtPmRhdGFfY2hlY2tzdW1fdmVyc2lvbiAldSIs IFhMb2dDdGwtPmRhdGFfY2hlY2tzdW1fdmVyc2lvbik7CisKIAlpZiAoc2h1dGRvd24pCiAJ ewogCQlYTG9nUmVjUHRyCWN1ckluc2VydCA9IFhMb2dCeXRlUG9zVG9SZWNQdHIoSW5zZXJ0 LT5DdXJyQnl0ZVBvcyk7CkBAIC03Nzc4LDYgKzc4MTMsMTAgQEAgQ3JlYXRlQ2hlY2tQb2lu dChpbnQgZmxhZ3MpCiAJQ29udHJvbEZpbGUtPm1pblJlY292ZXJ5UG9pbnQgPSBJbnZhbGlk WExvZ1JlY1B0cjsKIAlDb250cm9sRmlsZS0+bWluUmVjb3ZlcnlQb2ludFRMSSA9IDA7CiAK KwllbG9nKExPRywgIkNyZWF0ZUNoZWNrUG9pbnQgZGF0YV9jaGVja3N1bV92ZXJzaW9uICV1 ICV1IiwKKwkJIENvbnRyb2xGaWxlLT5kYXRhX2NoZWNrc3VtX3ZlcnNpb24sCisJCSBjaGVj a1BvaW50LmRhdGFfY2hlY2tzdW1fdmVyc2lvbik7CisKIAkvKiBtYWtlIHN1cmUgd2Ugc3Rh cnQgd2l0aCB0aGUgY2hlY2tzdW0gdmVyc2lvbiBhcyBvZiB0aGUgY2hlY2twb2ludCAqLwog CUNvbnRyb2xGaWxlLT5kYXRhX2NoZWNrc3VtX3ZlcnNpb24gPSBjaGVja1BvaW50LmRhdGFf Y2hlY2tzdW1fdmVyc2lvbjsKIApAQCAtNzkyOCw2ICs3OTY3LDEwIEBAIENyZWF0ZUVuZE9m UmVjb3ZlcnlSZWNvcmQodm9pZCkKIAlDb250cm9sRmlsZS0+bWluUmVjb3ZlcnlQb2ludCA9 IHJlY3B0cjsKIAlDb250cm9sRmlsZS0+bWluUmVjb3ZlcnlQb2ludFRMSSA9IHhscmVjLlRo aXNUaW1lTGluZUlEOwogCisJZWxvZyhMT0csICJDcmVhdGVFbmRPZlJlY292ZXJ5UmVjb3Jk IGRhdGFfY2hlY2tzdW1fdmVyc2lvbiAldSB4bG9nICV1IiwKKwkJIENvbnRyb2xGaWxlLT5k YXRhX2NoZWNrc3VtX3ZlcnNpb24sCisJCSBYTG9nQ3RsLT5kYXRhX2NoZWNrc3VtX3ZlcnNp b24pOworCiAJLyogc3RhcnQgd2l0aCB0aGUgbGF0ZXN0IGNoZWNrc3VtIHZlcnNpb24gKGFz IG9mIHRoZSBlbmQgb2YgcmVjb3ZlcnkpICovCiAJQ29udHJvbEZpbGUtPmRhdGFfY2hlY2tz dW1fdmVyc2lvbiA9IFhMb2dDdGwtPmRhdGFfY2hlY2tzdW1fdmVyc2lvbjsKIApAQCAtODEw MSw2ICs4MTQ0LDE0IEBAIFJlY292ZXJ5UmVzdGFydFBvaW50KGNvbnN0IENoZWNrUG9pbnQg KmNoZWNrUG9pbnQsIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCVhMb2dDdGwtPmxhc3RD aGVja1BvaW50RW5kUHRyID0gcmVjb3JkLT5FbmRSZWNQdHI7CiAJWExvZ0N0bC0+bGFzdENo ZWNrUG9pbnQgPSAqY2hlY2tQb2ludDsKIAlTcGluTG9ja1JlbGVhc2UoJlhMb2dDdGwtPmlu Zm9fbGNrKTsKKworCWVsb2coTE9HLCAiUmVjb3ZlcnlSZXN0YXJ0UG9pbnQgbGFzdENoZWNr UG9pbnRSZWNQdHIgJVgvJVggWExvZ0N0bC0+bGFzdENoZWNrUG9pbnRFbmRQdHIgJVgvJVgg cmVkbyAlWC8lWCBjaGVja3N1bXMgeGxvZ2N0bCAldSByZWNvcmQgJWQgZmlsZSAldSIsCisJ CSBMU05fRk9STUFUX0FSR1MoWExvZ0N0bC0+bGFzdENoZWNrUG9pbnRSZWNQdHIpLAorCQkg TFNOX0ZPUk1BVF9BUkdTKFhMb2dDdGwtPmxhc3RDaGVja1BvaW50RW5kUHRyKSwKKwkJIExT Tl9GT1JNQVRfQVJHUyhYTG9nQ3RsLT5sYXN0Q2hlY2tQb2ludC5yZWRvKSwKKwkJIFhMb2dD dGwtPmxhc3RDaGVja1BvaW50LmRhdGFfY2hlY2tzdW1fdmVyc2lvbiwKKwkJIGNoZWNrUG9p bnQtPmRhdGFfY2hlY2tzdW1fdmVyc2lvbiwKKwkJIENvbnRyb2xGaWxlLT5kYXRhX2NoZWNr c3VtX3ZlcnNpb24pOwogfQogCiAvKgpAQCAtODEzOCw2ICs4MTg5LDkgQEAgQ3JlYXRlUmVz dGFydFBvaW50KGludCBmbGFncykKIAlsYXN0Q2hlY2tQb2ludCA9IFhMb2dDdGwtPmxhc3RD aGVja1BvaW50OwogCVNwaW5Mb2NrUmVsZWFzZSgmWExvZ0N0bC0+aW5mb19sY2spOwogCisJ ZWxvZyhMT0csICJDcmVhdGVSZXN0YXJ0UG9pbnQgbGFzdENoZWNrUG9pbnRSZWNQdHIgJVgv JVggbGFzdENoZWNrUG9pbnRFbmRQdHIgJVgvJVgiLAorCQkgTFNOX0ZPUk1BVF9BUkdTKGxh c3RDaGVja1BvaW50UmVjUHRyKSwgTFNOX0ZPUk1BVF9BUkdTKGxhc3RDaGVja1BvaW50RW5k UHRyKSk7CisKIAkvKgogCSAqIENoZWNrIHRoYXQgd2UncmUgc3RpbGwgaW4gcmVjb3Zlcnkg bW9kZS4gSXQncyBvayBpZiB3ZSBleGl0IHJlY292ZXJ5CiAJICogbW9kZSBhZnRlciB0aGlz IGNoZWNrLCB0aGUgcmVzdGFydCBwb2ludCBpcyB2YWxpZCBhbnl3YXkuCkBAIC04MTY2LDkg KzgyMjAsMTEgQEAgQ3JlYXRlUmVzdGFydFBvaW50KGludCBmbGFncykKIAlpZiAoWExvZ1Jl Y1B0cklzSW52YWxpZChsYXN0Q2hlY2tQb2ludFJlY1B0cikgfHwKIAkJbGFzdENoZWNrUG9p bnQucmVkbyA8PSBDb250cm9sRmlsZS0+Y2hlY2tQb2ludENvcHkucmVkbykKIAl7Ci0JCWVy ZXBvcnQoREVCVUcyLAotCQkJCShlcnJtc2dfaW50ZXJuYWwoInNraXBwaW5nIHJlc3RhcnRw b2ludCwgYWxyZWFkeSBwZXJmb3JtZWQgYXQgJVgvJVgiLAotCQkJCQkJCQkgTFNOX0ZPUk1B VF9BUkdTKGxhc3RDaGVja1BvaW50LnJlZG8pKSkpOworCQllcmVwb3J0KExPRywKKwkJCQko ZXJybXNnX2ludGVybmFsKCJDcmVhdGVSZXN0YXJ0UG9pbnQ6IHNraXBwaW5nIHJlc3RhcnRw b2ludCwgYWxyZWFkeSBwZXJmb3JtZWQgYXQgJVgvJVggPD0gJVgvJVggbGFzdENoZWNrUG9p bnRSZWNQdHIgJVgvJVgiLAorCQkJCQkJCQkgTFNOX0ZPUk1BVF9BUkdTKGxhc3RDaGVja1Bv aW50LnJlZG8pLAorCQkJCQkJCQkgTFNOX0ZPUk1BVF9BUkdTKENvbnRyb2xGaWxlLT5jaGVj a1BvaW50Q29weS5yZWRvKSwKKwkJCQkJCQkJIExTTl9GT1JNQVRfQVJHUyhsYXN0Q2hlY2tQ b2ludFJlY1B0cikpKSk7CiAKIAkJVXBkYXRlTWluUmVjb3ZlcnlQb2ludChJbnZhbGlkWExv Z1JlY1B0ciwgdHJ1ZSk7CiAJCWlmIChmbGFncyAmIENIRUNLUE9JTlRfSVNfU0hVVERPV04p CkBAIC04MjM2LDYgKzgyOTIsOCBAQCBDcmVhdGVSZXN0YXJ0UG9pbnQoaW50IGZsYWdzKQog CSAqIGVuZC1vZi1yZWNvdmVyeSBjaGVja3BvaW50LgogCSAqLwogCUxXTG9ja0FjcXVpcmUo Q29udHJvbEZpbGVMb2NrLCBMV19FWENMVVNJVkUpOworCWVsb2coTE9HLCAiQ3JlYXRlUmVz dGFydFBvaW50IENvbnRyb2xGaWxlLT5jaGVja1BvaW50Q29weS5yZWRvICVYLyVYIGxhc3RD aGVja1BvaW50LnJlZG8gJVgvJVgiLAorCQkgTFNOX0ZPUk1BVF9BUkdTKENvbnRyb2xGaWxl LT5jaGVja1BvaW50Q29weS5yZWRvKSwgTFNOX0ZPUk1BVF9BUkdTKGxhc3RDaGVja1BvaW50 LnJlZG8pKTsKIAlpZiAoQ29udHJvbEZpbGUtPmNoZWNrUG9pbnRDb3B5LnJlZG8gPCBsYXN0 Q2hlY2tQb2ludC5yZWRvKQogCXsKIAkJLyoKQEAgLTgyNzQsMTEgKzgzMzIsMTcgQEAgQ3Jl YXRlUmVzdGFydFBvaW50KGludCBmbGFncykKIAkJCQlDb250cm9sRmlsZS0+c3RhdGUgPSBE Ql9TSFVURE9XTkVEX0lOX1JFQ09WRVJZOwogCQl9CiAKKwkJZWxvZyhMT0csICJDcmVhdGVS ZXN0YXJ0UG9pbnQgZGF0YV9jaGVja3N1bV92ZXJzaW9uICV1ICV1IiwKKwkJCSBDb250cm9s RmlsZS0+ZGF0YV9jaGVja3N1bV92ZXJzaW9uLAorCQkJIGxhc3RDaGVja1BvaW50LmRhdGFf Y2hlY2tzdW1fdmVyc2lvbik7CisKIAkJLyogd2Ugc2hhbGwgc3RhcnQgd2l0aCB0aGUgbGF0 ZXN0IGNoZWNrc3VtIHZlcnNpb24gKi8KIAkJQ29udHJvbEZpbGUtPmRhdGFfY2hlY2tzdW1f dmVyc2lvbiA9IGxhc3RDaGVja1BvaW50LmRhdGFfY2hlY2tzdW1fdmVyc2lvbjsKIAogCQlV cGRhdGVDb250cm9sRmlsZSgpOwogCX0KKwllbHNlCisJCWVsb2coTE9HLCAiQ3JlYXRlUmVz dGFydFBvaW50OiBza2lwcGVkIENvbnRyb2xGaWxlIHVwZGF0ZSIpOwogCUxXTG9ja1JlbGVh c2UoQ29udHJvbEZpbGVMb2NrKTsKIAogCS8qCkBAIC05MTM2LDEzICs5MjAwLDI1IEBAIHhs b2dfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAl7CiAJCXhsX2NoZWNrc3VtX3N0 YXRlIHN0YXRlOwogCQl1aW50NjQJCWJhcnJpZXI7CisJCVhMb2dSZWNQdHIJY2hlY2twb2lu dExzbjsKKwkJdWludDMyCQl2YWx1ZSwKKwkJCQkJdmFsdWVfbGFzdDsKIAogCQltZW1jcHko JnN0YXRlLCBYTG9nUmVjR2V0RGF0YShyZWNvcmQpLCBzaXplb2YoeGxfY2hlY2tzdW1fc3Rh dGUpKTsKIAogCQlTcGluTG9ja0FjcXVpcmUoJlhMb2dDdGwtPmluZm9fbGNrKTsKKwkJdmFs dWVfbGFzdCA9IFhMb2dDdGwtPmRhdGFfY2hlY2tzdW1fdmVyc2lvbjsKIAkJWExvZ0N0bC0+ ZGF0YV9jaGVja3N1bV92ZXJzaW9uID0gc3RhdGUubmV3X2NoZWNrc3VtdHlwZTsKIAkJU3Bp bkxvY2tSZWxlYXNlKCZYTG9nQ3RsLT5pbmZvX2xjayk7CiAKKwkJTFdMb2NrQWNxdWlyZShD b250cm9sRmlsZUxvY2ssIExXX0VYQ0xVU0lWRSk7CisJCWNoZWNrcG9pbnRMc24gPSBDb250 cm9sRmlsZS0+Y2hlY2tQb2ludDsKKwkJdmFsdWUgPSBDb250cm9sRmlsZS0+ZGF0YV9jaGVj a3N1bV92ZXJzaW9uOworCQlMV0xvY2tSZWxlYXNlKENvbnRyb2xGaWxlTG9jayk7CisKKwkJ ZWxvZyhMT0csICJYTE9HX0NIRUNLU1VNUyB4bG9nX3JlZG8gJVgvJVggY29udHJvbCBjaGVj a3BvaW50ICVYLyVYIGNvbnRyb2wgJXUgbGFzdCAldSByZWNvcmQgJXUiLAorCQkJIExTTl9G T1JNQVRfQVJHUyhsc24pLCBMU05fRk9STUFUX0FSR1MoY2hlY2twb2ludExzbiksIHZhbHVl LCB2YWx1ZV9sYXN0LCBzdGF0ZS5uZXdfY2hlY2tzdW10eXBlKTsKKwogCQkvKgogCQkgKiBC bG9jayBvbiBhIHByb2NzaWduYWxiYXJyaWVyIHRvIGF3YWl0IGFsbCBwcm9jZXNzZXMgaGF2 aW5nIHNlZW4gdGhlCiAJCSAqIGNoYW5nZSB0byBjaGVja3N1bSBzdGF0dXMuIE9uY2UgdGhl IGJhcnJpZXIgaGFzIGJlZW4gcGFzc2VkIHdlIGNhbgpAQCAtOTE1MSwyMiArOTIyNywyNiBA QCB4bG9nX3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAJCXN3aXRjaCAoc3RhdGUu bmV3X2NoZWNrc3VtdHlwZSkKIAkJewogCQkJY2FzZSBQR19EQVRBX0NIRUNLU1VNX0lOUFJP R1JFU1NfT05fVkVSU0lPTjoKKwkJCQllbG9nKExPRywgIlhMT0dfQ0hFQ0tTVU1TIGVtaXQg UFJPQ1NJR05BTF9CQVJSSUVSX0NIRUNLU1VNX0lOUFJPR1JFU1NfT04iKTsKIAkJCQliYXJy aWVyID0gRW1pdFByb2NTaWduYWxCYXJyaWVyKFBST0NTSUdOQUxfQkFSUklFUl9DSEVDS1NV TV9JTlBST0dSRVNTX09OKTsKIAkJCQlXYWl0Rm9yUHJvY1NpZ25hbEJhcnJpZXIoYmFycmll cik7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgUEdfREFUQV9DSEVDS1NVTV9JTlBST0dSRVNT X09GRl9WRVJTSU9OOgorCQkJCWVsb2coTE9HLCAiWExPR19DSEVDS1NVTVMgZW1pdCBQUk9D U0lHTkFMX0JBUlJJRVJfQ0hFQ0tTVU1fSU5QUk9HUkVTU19PRkYiKTsKIAkJCQliYXJyaWVy ID0gRW1pdFByb2NTaWduYWxCYXJyaWVyKFBST0NTSUdOQUxfQkFSUklFUl9DSEVDS1NVTV9J TlBST0dSRVNTX09GRik7CiAJCQkJV2FpdEZvclByb2NTaWduYWxCYXJyaWVyKGJhcnJpZXIp OwogCQkJCWJyZWFrOwogCiAJCQljYXNlIFBHX0RBVEFfQ0hFQ0tTVU1fVkVSU0lPTjoKKwkJ CQllbG9nKExPRywgIlhMT0dfQ0hFQ0tTVU1TIGVtaXQgUFJPQ1NJR05BTF9CQVJSSUVSX0NI RUNLU1VNX09OIik7CiAJCQkJYmFycmllciA9IEVtaXRQcm9jU2lnbmFsQmFycmllcihQUk9D U0lHTkFMX0JBUlJJRVJfQ0hFQ0tTVU1fT04pOwogCQkJCVdhaXRGb3JQcm9jU2lnbmFsQmFy cmllcihiYXJyaWVyKTsKIAkJCQlicmVhazsKIAogCQkJZGVmYXVsdDoKIAkJCQlBc3NlcnQo c3RhdGUubmV3X2NoZWNrc3VtdHlwZSA9PSAwKTsKKwkJCQllbG9nKExPRywgIlhMT0dfQ0hF Q0tTVU1TIGVtaXQgUFJPQ1NJR05BTF9CQVJSSUVSX0NIRUNLU1VNX09GRiIpOwogCQkJCWJh cnJpZXIgPSBFbWl0UHJvY1NpZ25hbEJhcnJpZXIoUFJPQ1NJR05BTF9CQVJSSUVSX0NIRUNL U1VNX09GRik7CiAJCQkJV2FpdEZvclByb2NTaWduYWxCYXJyaWVyKGJhcnJpZXIpOwogCQkJ CWJyZWFrOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9sYXVuY2hfYmFj a2VuZC5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9sYXVuY2hfYmFja2VuZC5jCmluZGV4 IGIwNmI1ZmI0NWRkLi4yMTE5YzVkNTliNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9z dG1hc3Rlci9sYXVuY2hfYmFja2VuZC5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIv bGF1bmNoX2JhY2tlbmQuYwpAQCAtMjM5LDYgKzIzOSw5IEBAIHBvc3RtYXN0ZXJfY2hpbGRf bGF1bmNoKEJhY2tlbmRUeXBlIGNoaWxkX3R5cGUsIGludCBjaGlsZF9zbG90LAogCWlmIChJ c0V4dGVybmFsQ29ubmVjdGlvbkJhY2tlbmQoY2hpbGRfdHlwZSkpCiAJCSgoQmFja2VuZFN0 YXJ0dXBEYXRhICopIHN0YXJ0dXBfZGF0YSktPmZvcmtfc3RhcnRlZCA9IEdldEN1cnJlbnRU aW1lc3RhbXAoKTsKIAorCWVsb2coTE9HLCAicG9zdG1hc3Rlcl9jaGlsZF9sYXVuY2g6IExv Y2FsRGF0YUNoZWNrc3VtVmVyc2lvbiAldSB4bG9nICV1IiwgR2V0TG9jYWxEYXRhQ2hlY2tz dW1WZXJzaW9uKCksCisJR2V0Q3VycmVudERhdGFDaGVja3N1bVZlcnNpb24oKSk7CisKICNp ZmRlZiBFWEVDX0JBQ0tFTkQKIAlwaWQgPSBpbnRlcm5hbF9mb3JrZXhlYyhjaGlsZF9wcm9j ZXNzX2tpbmRzW2NoaWxkX3R5cGVdLm5hbWUsIGNoaWxkX3Nsb3QsCiAJCQkJCQkJc3RhcnR1 cF9kYXRhLCBzdGFydHVwX2RhdGFfbGVuLCBjbGllbnRfc29jayk7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMgYi9zcmMvYmFja2VuZC9zdG9y YWdlL2lwYy9wcm9jc2lnbmFsLmMKaW5kZXggMmIxM2E4Y2QyNjAuLmI4OGQxZDA3NDMxIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMKKysrIGIv c3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jCkBAIC01NTMsNiArNTUzLDQw IEBAIFByb2Nlc3NQcm9jU2lnbmFsQmFycmllcih2b2lkKQogCiAJCVBHX1RSWSgpOwogCQl7 CisJCQkvKiBwcmludCBpbmZvIGFib3V0IGJhcnJpZXJzICovCisJCQl7CisJCQkJdWludDMy CXRtcCA9IGZsYWdzOworCisJCQkJZWxvZyhMT0csICJQcm9jZXNzUHJvY1NpZ25hbEJhcnJp ZXIgZmxhZ3MgJXUiLCB0bXApOworCisJCQkJd2hpbGUgKHRtcCAhPSAwKQorCQkJCXsKKwkJ CQkJUHJvY1NpZ25hbEJhcnJpZXJUeXBlIHR5cGU7CisKKwkJCQkJdHlwZSA9IChQcm9jU2ln bmFsQmFycmllclR5cGUpIHBnX3JpZ2h0bW9zdF9vbmVfcG9zMzIodG1wKTsKKwkJCQkJc3dp dGNoICh0eXBlKQorCQkJCQl7CisJCQkJCQljYXNlIFBST0NTSUdOQUxfQkFSUklFUl9TTUdS UkVMRUFTRToKKwkJCQkJCQllbG9nKExPRywgIlBST0NTSUdOQUxfQkFSUklFUl9TTUdSUkVM RUFTRSIpOworCQkJCQkJCWJyZWFrOworCQkJCQkJY2FzZSBQUk9DU0lHTkFMX0JBUlJJRVJf Q0hFQ0tTVU1fSU5QUk9HUkVTU19PTjoKKwkJCQkJCQllbG9nKExPRywgIlBST0NTSUdOQUxf QkFSUklFUl9DSEVDS1NVTV9JTlBST0dSRVNTX09OIik7CisJCQkJCQkJYnJlYWs7CisJCQkJ CQljYXNlIFBST0NTSUdOQUxfQkFSUklFUl9DSEVDS1NVTV9PTjoKKwkJCQkJCQllbG9nKExP RywgIlBST0NTSUdOQUxfQkFSUklFUl9DSEVDS1NVTV9PTiIpOworCQkJCQkJCWJyZWFrOwor CQkJCQkJY2FzZSBQUk9DU0lHTkFMX0JBUlJJRVJfQ0hFQ0tTVU1fSU5QUk9HUkVTU19PRkY6 CisJCQkJCQkJZWxvZyhMT0csICJQUk9DU0lHTkFMX0JBUlJJRVJfQ0hFQ0tTVU1fSU5QUk9H UkVTU19PRkYiKTsKKwkJCQkJCQlicmVhazsKKwkJCQkJCWNhc2UgUFJPQ1NJR05BTF9CQVJS SUVSX0NIRUNLU1VNX09GRjoKKwkJCQkJCQllbG9nKExPRywgIlBST0NTSUdOQUxfQkFSUklF Ul9DSEVDS1NVTV9PRkYiKTsKKwkJCQkJCQlicmVhazsKKwkJCQkJfQorCisJCQkJCUJBUlJJ RVJfQ0xFQVJfQklUKHRtcCwgdHlwZSk7CisJCQkJfQorCQkJfQorCiAJCQkvKgogCQkJICog UHJvY2VzcyBlYWNoIHR5cGUgb2YgYmFycmllci4gVGhlIGJhcnJpZXItcHJvY2Vzc2luZyBm dW5jdGlvbnMKIAkJCSAqIHNob3VsZCBub3JtYWxseSByZXR1cm4gdHJ1ZSwgYnV0IG1heSBy ZXR1cm4gZmFsc2UgaWYgdGhlCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL3Bh Z2UvYnVmcGFnZS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9wYWdlL2J1ZnBhZ2UuYwppbmRl eCA4YmQ1ZmVkOGM4NS4uYThhZjlhNzA2OGIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvcGFnZS9idWZwYWdlLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9wYWdlL2J1 ZnBhZ2UuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgInV0aWxzL21lbWRlYnVnLmgi CiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKIAorI2luY2x1ZGUgPGV4ZWNpbmZvLmg+ CiAKIC8qIEdVQyB2YXJpYWJsZSAqLwogYm9vbAkJaWdub3JlX2NoZWNrc3VtX2ZhaWx1cmUg PSBmYWxzZTsKQEAgLTEzNiwxMCArMTM3LDQ0IEBAIFBhZ2VJc1ZlcmlmaWVkRXh0ZW5kZWQo UGFnZURhdGEgKnBhZ2UsIEJsb2NrTnVtYmVyIGJsa25vLCBpbnQgZmxhZ3MpCiAJaWYgKGNo ZWNrc3VtX2ZhaWx1cmUpCiAJewogCQlpZiAoKGZsYWdzICYgUElWX0xPR19XQVJOSU5HKSAh PSAwKQorCQl7CisJCQlYTG9nUmVjUHRyCWxzbiA9IFBhZ2VHZXRMU04ocGFnZSk7CisKIAkJ CWVyZXBvcnQoV0FSTklORywKIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9EQVRBX0NPUlJVUFRF RCksCiAJCQkJCSBlcnJtc2coInBhZ2UgdmVyaWZpY2F0aW9uIGZhaWxlZCwgY2FsY3VsYXRl ZCBjaGVja3N1bSAldSBidXQgZXhwZWN0ZWQgJXUiLAogCQkJCQkJCWNoZWNrc3VtLCBwLT5w ZF9jaGVja3N1bSkpKTsKKwkJCWVyZXBvcnQoV0FSTklORywKKwkJCQkJKGVycmNvZGUoRVJS Q09ERV9EQVRBX0NPUlJVUFRFRCksCisJCQkJCSBlcnJtc2coInBhZ2UgdmVyaWZpY2F0aW9u IGZhaWxlZCwgTFNOICVYLyVYIiwgTFNOX0ZPUk1BVF9BUkdTKGxzbikpKSk7CisJCQllcmVw b3J0KFdBUk5JTkcsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfREFUQV9DT1JSVVBURUQpLAor CQkJCQkgZXJybXNnKCJwYWdlIHZlcmlmaWNhdGlvbiBmYWlsZWQsIGhlYWRlciBmbGFncyAl dSBsb3dlciAldSB1cHBlciAldSBzcGVjaWFsICV1IHBhZ2VzaXplX3ZlcnNpb24gJXUgcHJ1 bmVfeGlkICV1IiwKKwkJCQkJCQlwLT5wZF9mbGFncywKKwkJCQkJCQlwLT5wZF9sb3dlciwK KwkJCQkJCQlwLT5wZF91cHBlciwKKwkJCQkJCQlwLT5wZF9zcGVjaWFsLAorCQkJCQkJCXAt PnBkX3BhZ2VzaXplX3ZlcnNpb24sCisJCQkJCQkJcC0+cGRfcHJ1bmVfeGlkKSkpOworCisJ CQl7CisjZGVmaW5lIEJUX0JVRl9TSVpFIDMyCisJCQkJaW50IG5wdHJzOworCQkJCXZvaWQg KmJ1ZmZlcltCVF9CVUZfU0laRV07CisJCQkJY2hhciAqKnN0cmluZ3M7CisKKwkJCQlucHRy cyA9IGJhY2t0cmFjZShidWZmZXIsIEJUX0JVRl9TSVpFKTsKKwkJCQlzdHJpbmdzID0gYmFj a3RyYWNlX3N5bWJvbHMoYnVmZmVyLCBucHRycyk7CisKKwkJCQlpZiAoc3RyaW5ncyAhPSBO VUxMKQorCQkJCXsKKwkJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBucHRyczsgaSsrKQorCQkJ CQl7CisJCQkJCQllbG9nKFdBUk5JTkcsICJiYWNrdHJhY2UgJWQgOiAlcyIsIGksIHN0cmlu Z3NbaV0pOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CiAKIAkJaWYgKChmbGFncyAmIFBJ Vl9SRVBPUlRfU1RBVCkgIT0gMCkKIAkJCXBnc3RhdF9yZXBvcnRfY2hlY2tzdW1fZmFpbHVy ZSgpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9taXNjaW5pdC5jIGIv c3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9taXNjaW5pdC5jCmluZGV4IGEwNzFiYTZmNDU1Li5k ZjUyY2U4YWQ3ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9taXNjaW5p dC5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvbWlzY2luaXQuYwpAQCAtMTY0LDYg KzE2NCw5IEBAIEluaXRQb3N0bWFzdGVyQ2hpbGQodm9pZCkKIAkJCQkoZXJyY29kZV9mb3Jf c29ja2V0X2FjY2VzcygpLAogCQkJCSBlcnJtc2dfaW50ZXJuYWwoImNvdWxkIG5vdCBzZXQg cG9zdG1hc3RlciBkZWF0aCBtb25pdG9yaW5nIHBpcGUgdG8gRkRfQ0xPRVhFQyBtb2RlOiAl bSIpKSk7CiAjZW5kaWYKKworCWVsb2coTE9HLCAiSW5pdFBvc3RtYXN0ZXJDaGlsZDogTG9j YWxEYXRhQ2hlY2tzdW1WZXJzaW9uICV1IHhsb2cgJXUiLCBHZXRMb2NhbERhdGFDaGVja3N1 bVZlcnNpb24oKSwKKwlHZXRDdXJyZW50RGF0YUNoZWNrc3VtVmVyc2lvbigpKTsKIH0KIAog LyoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfY29udHJvbGRhdGEvcGdfY29udHJvbGRhdGEu YyBiL3NyYy9iaW4vcGdfY29udHJvbGRhdGEvcGdfY29udHJvbGRhdGEuYwppbmRleCBiZWE3 NzllZWY5NC4uM2QxNzZmYzBhOWYgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfY29udHJvbGRh dGEvcGdfY29udHJvbGRhdGEuYworKysgYi9zcmMvYmluL3BnX2NvbnRyb2xkYXRhL3BnX2Nv bnRyb2xkYXRhLmMKQEAgLTI4MCw2ICsyODAsOCBAQCBtYWluKGludCBhcmdjLCBjaGFyICph cmd2W10pCiAJCSAgIENvbnRyb2xGaWxlLT5jaGVja1BvaW50Q29weS5vbGRlc3RDb21taXRU c1hpZCk7CiAJcHJpbnRmKF8oIkxhdGVzdCBjaGVja3BvaW50J3MgbmV3ZXN0Q29tbWl0VHNY aWQ6JXVcbiIpLAogCQkgICBDb250cm9sRmlsZS0+Y2hlY2tQb2ludENvcHkubmV3ZXN0Q29t bWl0VHNYaWQpOworCXByaW50ZihfKCJMYXRlc3QgY2hlY2twb2ludCdzIGRhdGFfY2hlY2tz dW1fdmVyc2lvbjoldVxuIiksCisJCSAgIENvbnRyb2xGaWxlLT5jaGVja1BvaW50Q29weS5k YXRhX2NoZWNrc3VtX3ZlcnNpb24pOwogCXByaW50ZihfKCJUaW1lIG9mIGxhdGVzdCBjaGVj a3BvaW50OiAgICAgICAgICAgICVzXG4iKSwKIAkJICAgY2twdHRpbWVfc3RyKTsKIAlwcmlu dGYoXygiRmFrZSBMU04gY291bnRlciBmb3IgdW5sb2dnZWQgcmVsczogICAlWC8lWFxuIiks Ci0tIAoyLjQ4LjEKCg== --------------hwLAc5AR555AcYbidDDolObH Content-Type: application/x-shellscript; name="test.sh" Content-Disposition: attachment; filename="test.sh" Content-Transfer-Encoding: base64 IyEvdXNyL2Jpbi9iYXNoCgpEQVRBRElSX1BSSU1BUlk9ZGF0YS1wcmltYXJ5CkRBVEFESVJf U1RBTkRCWT1kYXRhLXN0YW5kYnkKUEdDVExUSU1FT1VUPTM2MDAKV0FMRElSPSQocHdkKS93 YWwKCmtpbGxhbGwgLTkgcG9zdGdyZXMKcm0gLVJmICREQVRBRElSX1BSSU1BUlkgJERBVEFE SVJfU1RBTkRCWSBwcmltYXJ5LnJ1bm5pbmcgc3RhbmRieS5ydW5uaW5nCgpta2RpciBjb250 cm9sIHdhbAoKIyBpbml0IHByaW1hcnkKcGdfY3RsIC1EICREQVRBRElSX1BSSU1BUlkgaW5p dAplY2hvICd3YWxfbGV2ZWwgPSBsb2dpY2FsJyA+PiAkREFUQURJUl9QUklNQVJZL3Bvc3Rn cmVzcWwuY29uZiAyPiYxCmVjaG8gImxvZ19saW5lX3ByZWZpeCA9ICclbiAlbSBbJXBdIFsl YjolYV0gWyVjOiVsXSBbJXNdIFsldi8leF0gJyIgPj4gJERBVEFESVJfUFJJTUFSWS9wb3N0 Z3Jlc3FsLmNvbmYgMj4mMQojZWNobyAibG9nX21pbl9kdXJhdGlvbl9zdGF0ZW1lbnQgPSAw IiA+PiAkREFUQURJUl9QUklNQVJZL3Bvc3RncmVzcWwuY29uZiAyPiYxCmVjaG8gImNoZWNr cG9pbnRfdGltZW91dCA9ICcxbWluJyIgPj4gJERBVEFESVJfUFJJTUFSWS9wb3N0Z3Jlc3Fs LmNvbmYgMj4mMQplY2hvICJhcmNoaXZlX21vZGUgPSAnb24nIiA+PiAkREFUQURJUl9QUklN QVJZL3Bvc3RncmVzcWwuY29uZiAyPiYxCmVjaG8gImFyY2hpdmVfY29tbWFuZCA9ICdjcCAl cCAkV0FMRElSLy50bXAgJiYgbXYgJFdBTERJUi8udG1wICRXQUxESVIvJWYnIiA+PiAkREFU QURJUl9QUklNQVJZL3Bvc3RncmVzcWwuY29uZiAyPiYxCgpwZ19jdGwgLUQgJERBVEFESVJf UFJJTUFSWSAtbCBwZy1wcmltYXJ5LmxvZyBzdGFydAp0b3VjaCBwcmltYXJ5LnJ1bm5pbmcK CiMgaW5pdCBhIHJlcGxpY2EKcGdfYmFzZWJhY2t1cCAtRCAkREFUQURJUl9TVEFOREJZIC1j IGZhc3QgLVIgLUMgLVMgcmVwbGljYQplY2hvICJwb3J0ID0gNTQzMyIgPj4gJERBVEFESVJf U1RBTkRCWS9wb3N0Z3Jlc3FsLmNvbmYgMj4mMQpwZ19jdGwgLUQgJERBVEFESVJfU1RBTkRC WSAtbCBwZy1zdGFuZGJ5LmxvZyBzdGFydAp0b3VjaCBzdGFuZGJ5LnJ1bm5pbmcKCmZ1bmN0 aW9uIHByaW1hcnlfc3RhcnQoKQp7CglyPSQxCgoJaWYgWyAtZiBwcmltYXJ5LnJ1bm5pbmcg XTsgdGhlbgoJCXJldHVybgoJZmkKCgl0b3VjaCBwcmltYXJ5LnJ1bm5pbmcKCgllY2hvIGBk YXRlYCAibG9vcCAkciBzdGFydCBwcmltYXJ5IgoKCXdoaWxlIC9iaW4vdHJ1ZTsgZG8KCQl0 cz0kKGRhdGUgKyVzKQoJCWVjaG8gYGRhdGVgICJsb29wICRyIHN0YXJ0IHByaW1hcnk6ICR0 cyIKCgkJcGdfY29udHJvbGRhdGEgJERBVEFESVJfUFJJTUFSWSA+IGNvbnRyb2wvcHJpbWFy eS4kdHMKCgkJcGdfY3RsIC1EICREQVRBRElSX1BSSU1BUlkgLWwgcGctcHJpbWFyeS5sb2cg c3RhcnQKCQl4PSQ/CgoJCWlmIFsgIiR4IiA9PSAiMCIgXTsgdGhlbgoJCQlicmVhawoJCWZp CgoJCWVjaG8gYGRhdGVgICJsb29wICRyIHJldHJ5IHN0YXJ0IHByaW1hcnkiCgkJc2xlZXAg MQoJZG9uZQoKCWVjaG8gYGRhdGVgICJsb29wICRyIHByaW1hcnkgc3RhcnRlZCIKfQoKZnVu Y3Rpb24gcHJpbWFyeV9zdG9wKCkKewoJcj0kMQoKCSMgc3RvcCB0aGUgcHJpbWFyeSBpbiBz b21lIHdheSAob3Igbm90IGF0IGFsbCkKCW09JCgoUkFORE9NICUgMykpCgoJaWYgWyAiJG0i ID09ICIwIiBdOyB0aGVuCgkJbHNuPSQocHNxbCBwb3N0Z3JlcyAtdCAtQSAtYyAic2VsZWN0 IHBnX2N1cnJlbnRfd2FsX2xzbigpIikKCQl0cz0kKGRhdGUgKyVzKQoJCWVjaG8gYGRhdGVg ICJzdG9wcGluZyBwcmltYXJ5IC8gaW1tZWRpYXRlICR0cyAvICRsc24iCgkJcGdfY3RsIC1E ICREQVRBRElSX1BSSU1BUlkgLW0gaW1tZWRpYXRlIHN0b3AKCQlwZ19jb250cm9sZGF0YSAk REFUQURJUl9QUklNQVJZID4gY29udHJvbC9wcmltYXJ5LiR0cwoJCXJtIHByaW1hcnkucnVu bmluZwoJZWxpZiBbICIkbSIgPT0gIjEiIF07IHRoZW4KCQlsc249JChwc3FsIHBvc3RncmVz IC10IC1BIC1jICJzZWxlY3QgcGdfY3VycmVudF93YWxfbHNuKCkiKQoJCXRzPSQoZGF0ZSAr JXMpCgkJZWNobyBgZGF0ZWAgInN0b3BwaW5nIHByaW1hcnkgLyBmYXN0ICR0cyAvICRsc24i CgkJcGdfY3RsIC1EICREQVRBRElSX1BSSU1BUlkgLW0gZmFzdCBzdG9wCgkJcGdfY29udHJv bGRhdGEgJERBVEFESVJfUFJJTUFSWSA+IGNvbnRyb2wvcHJpbWFyeS4kdHMKCQlybSBwcmlt YXJ5LnJ1bm5pbmcKCWVsc2UKCQllY2hvIGBkYXRlYCAibm90IHN0b3BwaW5nIHByaW1hcnki CglmaQp9CgpmdW5jdGlvbiBwcmltYXJ5X3ZlcmlmeV9jaGVja3N1bXMoKQp7CglyPSQxCglz PSQyCgoJbT0kKChSQU5ET00gJSAyKSkKCglpZiBbICIkbSIgPT0gIjAiIF07IHRoZW4KCQll Y2hvIGBkYXRlYCAic3RvcHBpbmcgcHJpbWFyeSAvIGltbWVkaWF0ZSIKCQlwZ19jdGwgLUQg JERBVEFESVJfUFJJTUFSWSAtbSBpbW1lZGlhdGUgc3RvcAoJZWxzZQoJCWVjaG8gYGRhdGVg ICJzdG9wcGluZyBwcmltYXJ5IC8gZmFzdCIKCQlwZ19jdGwgLUQgJERBVEFESVJfUFJJTUFS WSAtbSBmYXN0IHN0b3AKCWZpCgoJaWYgWyAiJHMiID09ICJlbmFibGUiIF0gJiYgWyAiJG0i ICE9ICIwIiBdOyB0aGVuCgkJZWNobyBgZGF0ZWAgInByaW1hcnkgLyB2ZXJpZnkgY2hlY2tz dW1zIgoJCXBnX2NoZWNrc3VtcyAtYyAkREFUQURJUl9QUklNQVJZID4+IGNoZWNrc3Vtcy1w cmltYXJ5LmxvZyAyPiYxCglmaQoKCWVjaG8gYGRhdGVgICJzdGFydGluZyBwcmltYXJ5IgoJ cGdfY3RsIC1EICREQVRBRElSX1BSSU1BUlkgLWwgcGctcHJpbWFyeS5sb2cgc3RhcnQKfQoK ZnVuY3Rpb24gcHJpbWFyeV9wZ2JlbmNoKCkKewoJcj0kMQoJZGI9JDIKCgltPSQoKFJBTkRP TSAlIDIpKQoJYz0kKChSQU5ET00gJSA0ICsgMSkpCgoJaWYgWyAiJG0iID09ICIwIiBdOyB0 aGVuCgkJZWNobyBgZGF0ZWAgInN0YXJ0aW5nIHBnYmVuY2ggb24gcHJpbWFyeSwgJGMgY2xp ZW50cyIKCQlwZ2JlbmNoIC1jICRjIC1QIDEgLVQgMzYwMCAkZGIgPj4gcGdiZW5jaC1wcmlt YXJ5LmxvZyAyPiYxICYKCWVsc2UKCQllY2hvIGBkYXRlYCAic3RhcnRpbmcgcGdiZW5jaCBv biBwcmltYXJ5ICgtQyksICRjIGNsaWVudHMiCgkJcGdiZW5jaCAtQyAtYyAkYyAtUCAxIC1U IDM2MDAgJGRiID4+IHBnYmVuY2gtcHJpbWFyeS5sb2cgMj4mMSAmCglmaQp9CgpmdW5jdGlv biBzdGFuZGJ5X3N0YXJ0KCkKewoJcj0kMQoKCWlmIFsgLWYgc3RhbmRieS5ydW5uaW5nIF07 IHRoZW4KCQlyZXR1cm4KCWZpCgoJdG91Y2ggc3RhbmRieS5ydW5uaW5nCgoJZWNobyBgZGF0 ZWAgImxvb3AgJHIgc3RhcnQgc3RhbmRieSIKCgl3aGlsZSAvYmluL3RydWU7IGRvCgkJdHM9 JChkYXRlICslcykKCQllY2hvIGBkYXRlYCAibG9vcCAkciBzdGFydCBzdGFuZGJ5OiAkdHMi CgoJCXBnX2NvbnRyb2xkYXRhICREQVRBRElSX1NUQU5EQlkgPiBjb250cm9sL3N0YW5kYnku JHRzCgoJCXBnX2N0bCAtRCAkREFUQURJUl9TVEFOREJZIC1sIHBnLXN0YW5kYnkubG9nIHN0 YXJ0CgkJeD0kPwoKCQlpZiBbICIkeCIgPT0gIjAiIF07IHRoZW4KCQkJYnJlYWsKCQlmaQoK CQllY2hvIGBkYXRlYCAibG9vcCAkciByZXRyeSBzdGFydCBzdGFuZGJ5IgoJCXNsZWVwIDEK CWRvbmUKCgllY2hvIGBkYXRlYCAibG9vcCAkciBzdGFuZGJ5IHN0YXJ0ZWQiCn0KCmZ1bmN0 aW9uIHN0YW5kYnlfc3RvcCgpCnsKCXI9JDEKCgkjIHN0b3AgdGhlIHN0YW5kYnkgaW4gc29t ZSB3YXkgKG9yIG5vdCBhdCBhbGwpCgltPSQoKFJBTkRPTSAlIDMpKQoKCWlmIFsgIiRtIiA9 PSAiMCIgXTsgdGhlbgoJCWxzbj0kKHBzcWwgcG9zdGdyZXMgLXQgLXAgNTQzMyAtQSAtYyAi c2VsZWN0IHBnX2N1cnJlbnRfd2FsX2xzbigpIikKCQl0cz0kKGRhdGUgKyVzKQoJCWVjaG8g YGRhdGVgICJzdG9wcGluZyBzdGFuZGJ5IC8gaW1tZWRpYXRlICR0cyAvICRsc24iCgkJcGdf Y3RsIC1EICREQVRBRElSX1NUQU5EQlkgLW0gaW1tZWRpYXRlIHN0b3AKCQlwZ19jb250cm9s ZGF0YSAkREFUQURJUl9TVEFOREJZID4gY29udHJvbC9zdGFuZGJ5LiR0cwoJCXJtIHN0YW5k YnkucnVubmluZwoJZWxpZiBbICIkbSIgPT0gIjEiIF07IHRoZW4KCQlsc249JChwc3FsIHBv c3RncmVzIC10IC1wIDU0MzMgLUEgLWMgInNlbGVjdCBwZ19jdXJyZW50X3dhbF9sc24oKSIp CgkJdHM9JChkYXRlICslcykKCQllY2hvIGBkYXRlYCAic3RvcHBpbmcgc3RhbmRieSAvIGZh c3QgJHRzIC8gJGxzbiIKCQlwZ19jdGwgLUQgJERBVEFESVJfU1RBTkRCWSAtbSBmYXN0IHN0 b3AKCQlwZ19jb250cm9sZGF0YSAkREFUQURJUl9TVEFOREJZID4gY29udHJvbC9zdGFuZGJ5 LiR0cwoJCXJtIHN0YW5kYnkucnVubmluZwoJZWxzZQoJCWVjaG8gYGRhdGVgICJub3Qgc3Rv cHBpbmcgc3RhbmRieSIKCWZpCn0KCmZ1bmN0aW9uIHN0YW5kYnlfdmVyaWZ5X2NoZWNrc3Vt cygpCnsKCXI9JDEKCXM9JDIKCgltPSQoKFJBTkRPTSAlIDIpKQoKCWlmIFsgIiRtIiA9PSAi MCIgXTsgdGhlbgoJCWVjaG8gYGRhdGVgICJzdG9wcGluZyBzdGFuZGJ5IC8gaW1tZWRpYXRl IgoJCXBnX2N0bCAtRCAkREFUQURJUl9TVEFOREJZIC1tIGltbWVkaWF0ZSBzdG9wCgllbHNl CgkJZWNobyBgZGF0ZWAgInN0b3BwaW5nIHN0YW5kYnkgLyBmYXN0IgoJCXBnX2N0bCAtRCAk REFUQURJUl9TVEFOREJZIC1tIGZhc3Qgc3RvcAoJZmkKCglpZiBbICIkcyIgPT0gImVuYWJs ZSIgXSAmJiBbICIkbSIgIT0gIjAiIF07IHRoZW4KCQllY2hvIGBkYXRlYCAic3RhbmRieSAv IHZlcmlmeSBjaGVja3N1bXMiCgkJcGdfY2hlY2tzdW1zIC1jICREQVRBRElSX1NUQU5EQlkg Pj4gY2hlY2tzdW1zLXN0YW5kYnkubG9nIDI+JjEKCWZpCgoJZWNobyBgZGF0ZWAgInN0YXJ0 aW5nIHN0YW5kYnkiCglwZ19jdGwgLUQgJERBVEFESVJfU1RBTkRCWSAtbCBwZy1zdGFuZGJ5 LmxvZyBzdGFydAp9CgpmdW5jdGlvbiBzdGFuZGJ5X2NhdGNoX3VwKCkKewoJcj0kMQoKCXdo aWxlIC9iaW4vdHJ1ZTsgZG8KCgkJZD0kKHBzcWwgLXQgLUEgcG9zdGdyZXMgLWMgInNlbGVj dCAocGdfY3VycmVudF93YWxfbHNuKCkgLSByZXBsYXlfbHNuKSBmcm9tIHBnX3N0YXRfcmVw bGljYXRpb24iKQoJCXg9JChwc3FsIC10IC1BIHBvc3RncmVzIC1jICJzZWxlY3QgKHBnX2N1 cnJlbnRfd2FsX2xzbigpIC0gcmVwbGF5X2xzbikgPCAxNjM4NCBmcm9tIHBnX3N0YXRfcmVw bGljYXRpb24iKQoKCQlpZiBbICIkeCIgPT0gInQiIF07IHRoZW4KCQkJYnJlYWsKCQlmaQoK CQllY2hvIGBkYXRlYCAibG9vcCAkciB3YWl0aW5nIGZvciBzdGFuZGJ5IHRvIGNhdGNoIHVw ICgkZCBieXRlcykiCgkJc2xlZXAgMQoKCWRvbmUKfQoKZnVuY3Rpb24gc3RhbmRieV9wZ2Jl bmNoKCkKewoJcj0kMQoJZGI9JDIKCgltPSQoKFJBTkRPTSAlIDIpKQoJYz0kKChSQU5ET00g JSA0ICsgMSkpCgoJaWYgWyAiJG0iID09ICIwIiBdOyB0aGVuCgkJZWNobyBgZGF0ZWAgInN0 YXJ0aW5nIHBnYmVuY2ggb24gc3RhbmRieSwgJGMgY2xpZW50cyIKCQlwZ2JlbmNoIC1uIC1T IC1wIDU0MzMgLWMgJGMgLVAgMSAtVCAzNjAwICRkYiA+PiBwZ2JlbmNoLXN0YW5kYnkubG9n IDI+JjEgJgoJZWxzZQoJCWVjaG8gYGRhdGVgICJzdGFydGluZyBwZ2JlbmNoIG9uIHN0YW5k YnkgKC1DKSwgJGMgY2xpZW50cyIKCQlwZ2JlbmNoIC1DIC1uIC1TIC1wIDU0MzMgLWMgJGMg LVAgMSAtVCAzNjAwICRkYiA+PiBwZ2JlbmNoLXN0YW5kYnkubG9nIDI+JjEgJgoJZmkKfQoK ZnVuY3Rpb24gd2FpdF9mb3JfY2hlY2tzdW1fc3RhdGUoKQp7CglyPSQxCglkYj0kMgoJc3Rh dGU9JDMKCgl3aGlsZSAvYmluL3RydWU7IGRvCgoJCWM9JChwc3FsIC10IC1BICRkYiAtYyAi U0VMRUNUIHNldHRpbmcgRlJPTSBwZ19jYXRhbG9nLnBnX3NldHRpbmdzIFdIRVJFIG5hbWUg PSAnZGF0YV9jaGVja3N1bXMnIikKCgkJcHNxbCAkZGIgLWMgIlNFTEVDVCAqIEZST00gcGdf c3RhdF9wcm9ncmVzc19kYXRhX2NoZWNrc3VtcyIKCgkJaWYgWyAiJHN0YXRlIiA9PSAiZW5h YmxlIiBdICYmIFsgIiRjIiA9PSAib24iIF07IHRoZW4KCQkJYnJlYWs7CgkJZWxpZiBbICIk c3RhdGUiID09ICJkaXNhYmxlIiBdICYmIFsgIiRjIiA9PSAib2ZmIiBdOyB0aGVuCgkJCWJy ZWFrOwoJCWZpCgoJCWVjaG8gYGRhdGVgICJsb29wICRyIGNoZWNrc3VtIHN0YXRlOiAkYyAo c2xlZXBpbmcpIgoJCXNsZWVwIDEKCglkb25lCn0KCmZ1bmN0aW9uIGNoYW5nZV9jaGVja3N1 bXMoKQp7CglyPSQxCglkYj0kMgoJc3RhdGU9JDMKCglpZiBbICIkc3RhdGUiID09ICJlbmFi bGUiIF07IHRoZW4KCgkJZmFzdD0iZmFsc2UiCgkJeD0kKChSQU5ET00gJSAyKSkKCQlpZiBb ICIkeCIgPT0gIjAiIF07IHRoZW4KCQkJZmFzdD0idHJ1ZSIKCQlmaQoKCQllY2hvIGBkYXRl YCAibG9vcCAkciBlbmFibGluZyBjaGVja3N1bXMgZmFzdCAkZmFzdCIKCQlwc3FsICRkYiAt YyAic2VsZWN0IHBnX2N1cnJlbnRfd2FsX2xzbigpLCBwZ19lbmFibGVfZGF0YV9jaGVja3N1 bXMoZmFzdCA6PSAkZmFzdCkiCgllbHNlCgkJZWNobyBgZGF0ZWAgImxvb3AgJHIgZGlzYWJs aW5nIGNoZWNrc3VtcyIKCQlwc3FsICRkYiAtYyAic2VsZWN0IHBnX2N1cnJlbnRfd2FsX2xz bigpLCBwZ19kaXNhYmxlX2RhdGFfY2hlY2tzdW1zKCkiCglmaQp9CgpmdW5jdGlvbiByYW5k b21fc2xlZXAoKQp7CglyPSQxCglzbGVlcD0kMgoKCXg9JCgoUkFORE9NICUgc2xlZXAgKyAx KSkKCWVjaG8gYGRhdGVgICJsb29wICRyIHNsZWVwaW5nIGZvciAkeCBzZWNvbmRzIgoJc2xl ZXAgJHgKfQoKIyBzbWFsbCB0ZXN0CnNsZWVwPTEwCm09ZmFzdAojIGRlZmF1bHQgaXMgJ29u Jywgc28gc3RhcnQgd2l0aCBkaXNhYmxlCnM9ImRpc2FibGUiCgojIDEwMCBsb29wcyBvZiB0 aGUgcHJpbWFyeSByZXN0YXJ0cwpmb3IgciBpbiAkKHNlcSAxIDIwMCk7IGRvCgoJeD0kKChS QU5ET00gJSAxMCkpCglkYj0idGVzdF8keCIKCglzY2FsZT0kKChSQU5ET00gJSA0MCArIDEw KSkKCgkjIG1heWJlIGNyZWF0ZSBhIG5ldyBEQiB3aXRoIHJhbmRvbSBzY2FsZQoJZHJvcGRi IC0taWYtZXhpc3RzICRkYgoJY3JlYXRlZGIgJGRiCglwZ2JlbmNoIC1pIC1zICRzY2FsZSAk ZGIgPj4gcGdiZW5jaC1pbml0LmxvZyAyPiYxCgoJIyBydW4gcGdiZW5jaCBpbiB0aGUgYmFj a2dyb3VuZAoJZWNobyBgZGF0ZWAgImxvb3AgJHIgcGdiZW5jaCBzY2FsZSAkc2NhbGUiCgoJ IyBydW4gcGdiZW5jaCBvbiBwcmltYXJ5L3N0YW5kYnkgaW4gdGhlIGJhY2tncm91bmQKCXBy aW1hcnlfcGdiZW5jaCAkciAkZGIKCXN0YW5kYnlfcGdiZW5jaCAkciAkZGIKCgkjIHNsZWVw IGZvciBhIGJpdAoJcmFuZG9tX3NsZWVwICRyICRzbGVlcAoKCSMgc3RhcnQgdGhlIGNoZWNr c3VtcyBjaGFuZ2UKCWNoYW5nZV9jaGVja3N1bXMgJHIgJGRiICRzCgoJIyBzbGVlcCBmb3Ig YSBiaXQKCXJhbmRvbV9zbGVlcCAkciAkc2xlZXAKCglwc3FsICRkYiAtYyAiU0VMRUNUICog RlJPTSBwZ19zdGF0X3Byb2dyZXNzX2RhdGFfY2hlY2tzdW1zIgoKCSMgc3RvcCB0aGUgcHJp bWFyeS9zdGFuZGJ5IGluIHNvbWUgd2F5CglwcmltYXJ5X3N0b3AgJHIKCXN0YW5kYnlfc3Rv cCAkcgoKCSMgc3RhcnQgdGhlIHByaW1hcnkvc3RhZGJ5IGFnYWluCglwcmltYXJ5X3N0YXJ0 ICRyCglzdGFuZGJ5X3N0YXJ0ICRyCgoJIyBydW4gcGdiZW5jaCBvbiBwcmltYXJ5L3N0YW5k YnkgaW4gdGhlIGJhY2tncm91bmQKCXByaW1hcnlfcGdiZW5jaCAkciAkZGIKCXN0YW5kYnlf cGdiZW5jaCAkciAkZGIKCgkjIHNsZWVwIGZvciBhIGJpdAoJcmFuZG9tX3NsZWVwICRyICRz bGVlcAoKCSMgc3RhcnQgdGhlIGNoZWNrc3VtcyBjaGFuZ2UgKGFnYWluLCB0byByZXN0YXJ0 IHRoZSB3b3JrZXJzKQoJY2hhbmdlX2NoZWNrc3VtcyAkciAkZGIgJHMKCgkjIHdhaXQgZm9y IHRoZSBjaGVja3N1bXMgdG8gZ2V0IGVuYWJsZWQvZGlzYWJsZWQKCWVjaG8gYGRhdGVgICJs b29wICRyIHdhaXRpbmcgZm9yIGNoZWNrc3VtcyB0byBjaGFuZ2UgaW4gdGhlIGluc3RhbmNl IgoJd2FpdF9mb3JfY2hlY2tzdW1fc3RhdGUgJHIgJGRiICRzCgoJIyBzdG9wIHByaW1hcnkv c3RhbmRieSwgdmVyaWZ5IGNoZWNrc3VtcyBhbmQgc3RhcnQgYWdhaW4KCWVjaG8gYGRhdGVg ICJsb29wICRyIHZlcmlmeSBjaGVja3N1bXMgb24gcHJpbWFyeSIKCXByaW1hcnlfdmVyaWZ5 X2NoZWNrc3VtcyAkciAkcwoKCWVjaG8gYGRhdGVgICJsb29wICRyIHZlcmlmeSBjaGVja3N1 bXMgb24gc3RhbmRieSIKCXN0YW5kYnlfdmVyaWZ5X2NoZWNrc3VtcyAkciAkcwoKCSMgd2Fp dCBmb3Igc3RhbmR5IHRvIGNhdGNoIHVwCgllY2hvIGBkYXRlYCAibG9vcCAkciB3YWl0IGZv ciBzdGFuZGJ5IHRvIGNhdGNoIHVwIgoJc3RhbmRieV9jYXRjaF91cCAkcgoKCSMgZmxpcCB0 aGUgc3RhdGUgZm9yIHRoZSBuZXh0IGxvb3AKCWlmIFsgIiRzIiA9PSAiZGlzYWJsZSIgXTsg dGhlbgoJCXM9ImVuYWJsZSIKCWVsc2UKCQlzPSJkaXNhYmxlIgoJZmkKCmRvbmUK --------------hwLAc5AR555AcYbidDDolObH--