Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vlGTh-009Oda-1j for pgsql-hackers@arkaria.postgresql.org; Thu, 29 Jan 2026 01:05:47 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vlGTg-0052SR-1s for pgsql-hackers@arkaria.postgresql.org; Thu, 29 Jan 2026 01:05:44 +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.96) (envelope-from ) id 1vlGTf-0052SA-21 for pgsql-hackers@lists.postgresql.org; Thu, 29 Jan 2026 01:05:44 +0000 Received: from meesny.iki.fi ([195.140.195.201]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1vlGTa-00000000yo6-1a8K for pgsql-hackers@postgresql.org; Thu, 29 Jan 2026 01:05:43 +0000 Received: from [10.0.2.15] (unknown [130.41.208.2]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange x25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: hlinnaka) by meesny.iki.fi (Postfix) with ESMTPSA id 4f1gtQ60f6zyV6; Thu, 29 Jan 2026 03:05:34 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=meesny; t=1769648737; 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=s/oesHLqMk4LIdpvABeYQI+w9BGD72kTajD1ioNPsT4=; b=DHtqSXmg93haE2LbwYHiKU8z6olh0w/Srs5Rozp3UXzgc/m2P5yIiQ5DlIbEYsHtPrakwc u3KsEa4Lb3T1Dvtfdzq5TRYTNqHC1AOwcZE06hiv/BXWaw644ZLxFoNSaApT7YOJCH+G/m NMD4ob2LxiUQO8DnzbTKkXpyxqz2erk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=meesny; t=1769648737; 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=s/oesHLqMk4LIdpvABeYQI+w9BGD72kTajD1ioNPsT4=; b=q+tC7JblCSuOb8KWz+1QOi8kvU4tByjDPSVAzsKw/gW57bEYIozdMTDE4Cz+nNNhe2HLGW NkPolvnTDiJwtz+EdXshpzDjqFGdmyFpYQWROC4JCVtLYdpumH3DD0IHaoJpWxaiGFIf+F t/0Qv0eU+90zyQxXX1oMtm8rZQ4XUJg= ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=hlinnaka smtp.mailfrom=hlinnaka@iki.fi ARC-Seal: i=1; a=rsa-sha256; d=iki.fi; s=meesny; cv=none; t=1769648737; b=VL0b/MvkeuTauEh2MIztSPT1SYFTOdB23xn4+cQkJhgJolzuXzCnOVbMYCJ0XE/G0I9DE2 d7PpSfvTiZSjhmbO50DtTGJtCa7BHufKsAbRjz2zbtAvqXAAZ/kWx/wpmmwomwOfe1rzUv zocAJ4GIRuBVSDr3EfRvxLeRkemcX/Y= Content-Type: multipart/mixed; boundary="------------bKtygjyKfjKbO6KbJdMaMR2R" Message-ID: Date: Thu, 29 Jan 2026 03:05:33 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Interrupts vs signals To: Andres Freund Cc: Thomas Munro , Michael Paquier , Robert Haas , Fujii Masao , pgsql-hackers References: <8a0ff52f-de8e-49d2-a3af-ea5bc12f5b97@iki.fi> <4ddab51d-e932-40c5-b6fa-18c52db0e082@iki.fi> <08382e5c-a820-4aca-90ac-fab50cd4599c@iki.fi> Content-Language: en-US From: Heikki Linnakangas In-Reply-To: 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. --------------bKtygjyKfjKbO6KbJdMaMR2R Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Here's a new rebased and massively re-worked patch. The patches are split differently than in the previous version: - Patches 0001-0005 are just refactoring around recovery conflicts which I posted on a separate thread [1]. Please review and comment there. - Patches 0006 and 0007 are small cleanups that could be applied early (after updating the docs, as noted in TODO comment there). - All the interesting bits for this thread are in the last, massive patch. To review this, I suggest starting from the new src/backend/ipc/README.md file. It gives a good overview of the mechanism (or if it doesn't, that's valuable feedback :-) ). It also contains a bunch of Open Questions at the bottom; I'd love to hear opinions and ideas on those. Wrt. the issue of running out of bits: My current plan is to just switch to 64-bit interrupt masks. That gives a fair amount of headroom. Would be nice to have even more headroom, but I think 64 bits will be enough for a long time. The big high-level design change in this version is to address these issues: On 15/07/2025 19:50, Andres Freund wrote: > I'm not really in love how this looks like yet, tbh. Aspects of it seem to buy > further into some of our already existing design mistakes. I have two main > concerns: > > 1) It seems rather bonkers that we have to go to every process type and add > code for INTERRUPT_LOG_MEMORY_CONTEXT or INTERRUPT_CONFIG_RELOAD. > > 2) The fact that a lot of code specifies explicit interrupt masks makes that > code harder to compose, because whether we can process some interrupt or not > depends on higher level state. That's e.g. why INTERRUPT_CFI_MASK() has to be > a bit magic and decid ewhat interrupt mask to use and why we need a separate > interrupt handling functions for interrupts happening while waiting for > network IO than normally. > > > For 1), I suspect that we should have a central mapping array between > InterruptTypes and the code to handle each of the interrupt types. That > mapping table also could serve as the registry for extensions to register > their own interrupt ids. That's a great idea, and that's what this patch now does. You can now register handler functions for interrupts which will then be called by CHECK_FOR_INTERRUPTS() whenever the corresponding interrupt is pending. ProcessInterrupts has no knowledge about what each interrupt means, it just calls the handler functions in an array. At backend startup, a "default" set of interrupt handlers are installed, like this: (a shortened excerpt from SetStandardInterruptHandlers()) /* All processes should react to barriers and memory context debugging */ SetInterruptHandler(INTERRUPT_BARRIER, ProcessProcSignalBarrier); EnableInterrupt(INTERRUPT_BARRIER); SetInterruptHandler(INTERRUPT_LOG_MEMORY_CONTEXT, ProcessLogMemoryContextInterrupt); EnableInterrupt(INTERRUPT_LOG_MEMORY_CONTEXT); /* * Every process should react to INTERRUPT_TERMINATE. But many processes * disable this and do their own checks at appropriate times. */ SetInterruptHandler(INTERRUPT_TERMINATE, ProcessTerminateInterrupt); EnableInterrupt(INTERRUPT_TERMINATE); ... Many processes have additional interrupts, or want different handlers for the standard interrupts. They make additional SetInterruptHandler() calls to set up their process-specific handlers. This largely solves problems 1) and 2). I replaced the INTERRUPT_CFI_MASK() macro with a global variable CheckForInterruptsMask. At all times, it is a bitmask of all the interrupts that CHECK_FOR_INTERRUPTS() would process and clear. Even HOLD/RESUME_INTERRUPTS() now updates CheckForInterruptsMask (setting it to zero in HOLD_INTERRUPTS(), and restoring it on RESUME_INTERRUPTS()) With that facility, a lot of things got nicer. For example, I got rid of ProcessClientReadInterrupt() altogether. secure_read() now calls plain old CHECK_FOR_INTERRUPTS(), and it is the caller's responsibility to enable/disable the interrupt handlers according to what should or should not be processed. (ProcessClientWriteInterrupt() is gone too, although now that I look at it, I wonder if that went too far and we should still refrain from processing interrupts other than INTERRUPT_TERMINATE while we're sending to the client...) I'd love to get feedback on this mechanism. And on the patch in general, of course, but this is the big new part. > For 2), I wonder if we ought to have a global mask of interrupt kinds that can > be processed in some context. Instead of having INTERRUPT_CFI_MASK() compute > what mask to use, we could have things like HOLD_CANCEL_INTERRUPTS be defined > as something like > > if (InterruptHoldCount[CANCEL]++ == 0) > InterruptMask &= ~CANCEL; > > which would allow CHECK_FOR_INTERRUPTS to just use InterruptMask to check for > to-be-processed interrupts. I played with that, and it's quite sensible, but then I realized that we only use HOLD_CANCEL_INTERRUPTS() in a few places, namely when we are reading a message from the client. We don't really need the nesting capability, i.e. we don't need a counter, a boolean is enough. On 15/07/2025 18:50, Andres Freund wrote: >> @@ -205,6 +206,8 @@ StartupProcExit(int code, Datum arg) >> /* Shutdown the recovery environment */ >> if (standbyState != STANDBY_DISABLED) >> ShutdownRecoveryTransactionEnvironment(); >> + >> + ProcGlobal->startupProc = INVALID_PROC_NUMBER; >> } > > > What if we instead had a ProcGlobal->auxProc[auxproxtype]? We have different > versions of this for different types auf aux processes, which doesn't really > make sense. I like that idea, but didn't try it yet. >> + * Perform a plain atomic read first as a fast path for the case that >> + * an interrupt is already pending. >> */ >> - if (set->latch && !set->latch->is_set) >> + old_mask = pg_atomic_read_u32(MyPendingInterrupts); >> + already_pending = ((old_mask & set->interrupt_mask) != 0); >> + >> + if (!already_pending) >> { > > > Hm, I think this may be incorrect - what if there is *some* overlap between > MyPendingInterrupts and set->interrupt_mask, but they're not equal? I don't see the problem. In that case, already_pending will be set to 'true', as it should. >> +/* >> + * Test an interrupt flag (of flags). >> + */ >> +static inline bool >> +IsInterruptPending(uint32 interruptMask) >> +{ >> + return (pg_atomic_read_u32(MyPendingInterrupts) & interruptMask) != 0; >> +} > > > Do we need to care about memory ordering? Hmm, I think not. If you imagine using this with WaitInterrupt(), the WaitInterrupt works as a synchronization point. If the interrupt was just set by another procss, but this function returns a stale "false", the next WaitInterrupt() will return without sleeping. No other backend should be clearing our pending interrupt bits, so a stale "true" is not possible. I'll add a comment. >> There's still a general-purpose INTERRUPT_GENERAL interrupt that is >> multiplexed for many different purposes in different processes, for >> example to wake up the walwriter when it has work to do, and to wake >> up processes waiting on a condition variable. The common property of >> those uses is that there's some other flag or condition that is >> checked on each wakeup, the wakeup interrupt itself means merely that >> something interesting might've happened. > > I guess extensions that just need to use INTERRUPT_GENERAL, given that new > interrupt reasons can't be dynamically registered? Correct. I plan to implement a dynamic interrupt allocation mechanism for extensions, but it's not implemented yet. (btw I renamed INTERRUPT_GENERAL to INTERRUPT_WAIT_WAKEUP) >> + if (ConsumeInterrupt(INTERRUPT_CONFIG_RELOAD)) >> { >> int autovacuum_max_workers_prev = autovacuum_max_workers; >> >> - ConfigReloadPending = false; >> ProcessConfigFile(PGC_SIGHUP); >> >> /* shutdown requested in config file? */ >> @@ -771,11 +774,11 @@ ProcessAutoVacLauncherInterrupts(void) >> } >> >> /* Process barrier events */ >> - if (ProcSignalBarrierPending) >> + if (IsInterruptPending(INTERRUPT_BARRIER)) >> ProcessProcSignalBarrier(); > > > Why do we have some code immediately consuming and others just checking if an > interrupt is pending? I was just sloppy. Now it's consistent: ProcessInterrupts() now always clears the interrupt before calling the handler function, and the handler function does not check or clear the interrupt. >> @@ -572,10 +574,18 @@ CheckpointerMain(const void *startup_data, size_t startup_data_len) >> cur_timeout = Min(cur_timeout, XLogArchiveTimeout - elapsed_secs); >> } >> >> - (void) WaitInterrupt(INTERRUPT_GENERAL, >> - WL_INTERRUPT | WL_TIMEOUT | WL_EXIT_ON_PM_DEATH, >> - cur_timeout * 1000L /* convert to ms */ , >> - WAIT_EVENT_CHECKPOINTER_MAIN); >> + (void) WaitInterrupt( >> + /* these are handled in the main loop */ >> + INTERRUPT_GENERAL | /* checkpoint requested */ > > > Why is a checkpoint request done via GENERAL? Seems that's specifically one > that we do *not* want to absorb via CFI? It works fine because there's a separate shared memory flag that's set when checkpoint is requested. We check that flag in the main loop, even if the interrupt is absorbed. > >> @@ -947,6 +953,7 @@ void >> StandbyDeadLockHandler(void) >> { >> got_standby_deadlock_timeout = true; >> + RaiseInterrupt(INTERRUPT_GENERAL); >> } >> >> /* >> @@ -956,6 +963,7 @@ void >> StandbyTimeoutHandler(void) >> { >> got_standby_delay_timeout = true; >> + RaiseInterrupt(INTERRUPT_GENERAL); >> } >> >> /* >> @@ -965,6 +973,7 @@ void >> StandbyLockTimeoutHandler(void) >> { >> got_standby_lock_timeout = true; >> + RaiseInterrupt(INTERRUPT_GENERAL); >> } > > > Why are these using INTERRUPT_GENERAL? Could be changed for sure, but this works too. These are quite localized. >> + >> + if (ConsumeInterrupt(INTERRUPT_WALSND_INIT_STOPPING)) >> + ProcessWalSndInitStopping(); > > > Huh. So ProcessWalSndInitStopping() raises different inerrupts to actually > exit and thus relies on being called first? That seems rather clunky. I don't know about the "being called first" part, but yeah this is clunky. I had hard time understanding the logic and I'm still not 100% I got it right to be honest. Some further cleanup for readability would be nice.. [1] https://www.postgresql.org/message-id/4cc13ba1-4248-4884-b6ba-4805349e7f39@iki.fi - Heikki --------------bKtygjyKfjKbO6KbJdMaMR2R Content-Type: text/x-patch; charset=UTF-8; name="v8-0001-Remove-useless-errdetail_abort.patch" Content-Disposition: attachment; filename="v8-0001-Remove-useless-errdetail_abort.patch" Content-Transfer-Encoding: base64 RnJvbSAxOTA0YWNmY2Y3ZWMyMTgxMzAxYTM3YzA2ZDUyMWU1MTcxODk1YmQ5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFRodSwgMjIgSmFuIDIwMjYgMjE6MzM6MzUgKzAyMDAK U3ViamVjdDogW1BBVENIIHY4IDEvOF0gUmVtb3ZlIHVzZWxlc3MgZXJyZGV0YWlsX2Fib3J0 KCkKCkkgZG9uJ3QgdW5kZXJzdGFuZCBob3cgdG8gcmVhY2ggZXJyZGV0YWlsX2Fib3J0KCkg d2l0aApNeVByb2MtPnJlY292ZXJ5Q29uZmxpY3RQZW5kaW5nIHNldC4gSWYgYSByZWNvdmVy eSBjb25mbGljdCBzaWduYWwgaXMKcmVjZWl2ZWQsIFByb2Nlc3NSZWNvdmVyeUNvbmZsaWN0 SW50ZXJydXB0KCkgcmFpc2VzIGFuIEVSUk9SIG9yIEZBVEFMCmVycm9yIHRvIGNhbmNlbCB0 aGUgcXVlcnkgb3IgY29ubmVjdGlvbiwgYW5kIGFib3J0IHByb2Nlc3NpbmcgY2xlYXJzCnRo ZSBmbGFnLiBUaGUgZXJyb3IgbWVzc2FnZSBmcm9tIFByb2Nlc3NSZWNvdmVyeUNvbmZsaWN0 SW50ZXJydXB0KCkgaXMKdmVyeSBjbGVhciB0aGF0IHRoZSBxdWVyeSBvciBjb25uZWN0aW9u IHdhcyB0ZXJtaW5hdGVkIGJlY2F1c2Ugb2YKcmVjb3ZlcnkgY29uZmxpY3QuCgpUaGUgb25s eSB3YXkgdG8gcmVhY2ggaXQgQUZBSUNTIGlzIHdpdGggYSByYWNlIGNvbmRpdGlvbiwgaWYg dGhlCnN0YXJ0dXAgcHJvY2VzcyBzZW5kcyBhIHJlY292ZXJ5IGNvbmZsaWN0IHNpZ25hbCB3 aGVuIHRoZSB0cmFuc2FjdGlvbgpoYXMganVzdCBlbnRlcmVkIGFib3J0ZWQgc3RhdGUgZm9y IHNvbWUgb3RoZXIgcmVhc29uLiBBbmQgaW4gdGhhdCBjYXNlCnRoZSBkZXRhaWwgd291bGQg YmUgbWlzbGVhZGluZywgYXMgdGhlIHRyYW5zYWN0aW9uIHdhcyBhbHJlYWR5IGFib3J0ZWQK Zm9yIHNvbWUgb3RoZXIgcmVhc29uLCBub3QgYmVjYXVzZSBvZiB0aGUgcmVjb3ZlcnkgY29u ZmxpY3QuCgplcnJkZXRhaWxfYWJvcnQoKSB3YXMgdGhlIG9ubHkgdXNlciBvZiB0aGUgcmVj b3ZlcnlDb25mbGljdFBlbmRpbmcKZmxhZyBpbiBQR1BST0MsIHNvIHdlIGNhbiByZW1vdmUg dGhhdCBhbmQgYWxsIHRoZSByZWxhdGVkIGNvZGUgdG9vLgotLS0KIHNyYy9iYWNrZW5kL3N0 b3JhZ2UvaXBjL3Byb2NhcnJheS5jIHwgMjAgKysrLS0tLS0tLS0tLS0tLS0KIHNyYy9iYWNr ZW5kL3N0b3JhZ2UvaXBjL3N0YW5kYnkuYyAgIHwgMTUgKysrKysrLS0tLS0tLQogc3JjL2Jh Y2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYyAgICAgfCAgMSAtCiBzcmMvYmFja2VuZC90Y29w L3Bvc3RncmVzLmMgICAgICAgICB8IDM1ICsrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CiBzcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2MuaCAgICAgICAgICB8ICA3IC0tLS0tLQogc3Jj L2luY2x1ZGUvc3RvcmFnZS9wcm9jYXJyYXkuaCAgICAgfCAgNiArKy0tLQogNiBmaWxlcyBj aGFuZ2VkLCAxOCBpbnNlcnRpb25zKCspLCA2NiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jYXJyYXkuYyBiL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvaXBjL3Byb2NhcnJheS5jCmluZGV4IDZiZTU2NTE1NWFiLi43NDhjMDZiNTFjYiAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5LmMKKysrIGIv c3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5LmMKQEAgLTcwOCw4ICs3MDgsNiBA QCBQcm9jQXJyYXlFbmRUcmFuc2FjdGlvbihQR1BST0MgKnByb2MsIFRyYW5zYWN0aW9uSWQg bGF0ZXN0WGlkKQogCQkvKiBiZSBzdXJlIHRoaXMgaXMgY2xlYXJlZCBpbiBhYm9ydCAqLwog CQlwcm9jLT5kZWxheUNoa3B0RmxhZ3MgPSAwOwogCi0JCXByb2MtPnJlY292ZXJ5Q29uZmxp Y3RQZW5kaW5nID0gZmFsc2U7Ci0KIAkJLyogbXVzdCBiZSBjbGVhcmVkIHdpdGggeGlkL3ht aW46ICovCiAJCS8qIGF2b2lkIHVubmVjZXNzYXJpbHkgZGlydHlpbmcgc2hhcmVkIGNhY2hl bGluZXMgKi8KIAkJaWYgKHByb2MtPnN0YXR1c0ZsYWdzICYgUFJPQ19WQUNVVU1fU1RBVEVf TUFTSykKQEAgLTc1MCw4ICs3NDgsNiBAQCBQcm9jQXJyYXlFbmRUcmFuc2FjdGlvbkludGVy bmFsKFBHUFJPQyAqcHJvYywgVHJhbnNhY3Rpb25JZCBsYXRlc3RYaWQpCiAJLyogYmUgc3Vy ZSB0aGlzIGlzIGNsZWFyZWQgaW4gYWJvcnQgKi8KIAlwcm9jLT5kZWxheUNoa3B0RmxhZ3Mg PSAwOwogCi0JcHJvYy0+cmVjb3ZlcnlDb25mbGljdFBlbmRpbmcgPSBmYWxzZTsKLQogCS8q IG11c3QgYmUgY2xlYXJlZCB3aXRoIHhpZC94bWluOiAqLwogCS8qIGF2b2lkIHVubmVjZXNz YXJpbHkgZGlydHlpbmcgc2hhcmVkIGNhY2hlbGluZXMgKi8KIAlpZiAocHJvYy0+c3RhdHVz RmxhZ3MgJiBQUk9DX1ZBQ1VVTV9TVEFURV9NQVNLKQpAQCAtOTMzLDcgKzkyOSw2IEBAIFBy b2NBcnJheUNsZWFyVHJhbnNhY3Rpb24oUEdQUk9DICpwcm9jKQogCiAJcHJvYy0+dnhpZC5s eGlkID0gSW52YWxpZExvY2FsVHJhbnNhY3Rpb25JZDsKIAlwcm9jLT54bWluID0gSW52YWxp ZFRyYW5zYWN0aW9uSWQ7Ci0JcHJvYy0+cmVjb3ZlcnlDb25mbGljdFBlbmRpbmcgPSBmYWxz ZTsKIAogCUFzc2VydCghKHByb2MtPnN0YXR1c0ZsYWdzICYgUFJPQ19WQUNVVU1fU1RBVEVf TUFTSykpOwogCUFzc2VydCghcHJvYy0+ZGVsYXlDaGtwdEZsYWdzKTsKQEAgLTM0NDUsMTkg KzM0NDAsMTIgQEAgR2V0Q29uZmxpY3RpbmdWaXJ0dWFsWElEcyhUcmFuc2FjdGlvbklkIGxp bWl0WG1pbiwgT2lkIGRiT2lkKQogfQogCiAvKgotICogQ2FuY2VsVmlydHVhbFRyYW5zYWN0 aW9uIC0gdXNlZCBpbiByZWNvdmVyeSBjb25mbGljdCBwcm9jZXNzaW5nCisgKiBTaWduYWxW aXJ0dWFsVHJhbnNhY3Rpb24gLSB1c2VkIGluIHJlY292ZXJ5IGNvbmZsaWN0IHByb2Nlc3Np bmcKICAqCiAgKiBSZXR1cm5zIHBpZCBvZiB0aGUgcHJvY2VzcyBzaWduYWxlZCwgb3IgMCBp ZiBub3QgZm91bmQuCiAgKi8KIHBpZF90Ci1DYW5jZWxWaXJ0dWFsVHJhbnNhY3Rpb24oVmly dHVhbFRyYW5zYWN0aW9uSWQgdnhpZCwgUHJvY1NpZ25hbFJlYXNvbiBzaWdtb2RlKQotewot CXJldHVybiBTaWduYWxWaXJ0dWFsVHJhbnNhY3Rpb24odnhpZCwgc2lnbW9kZSwgdHJ1ZSk7 Ci19Ci0KLXBpZF90Ci1TaWduYWxWaXJ0dWFsVHJhbnNhY3Rpb24oVmlydHVhbFRyYW5zYWN0 aW9uSWQgdnhpZCwgUHJvY1NpZ25hbFJlYXNvbiBzaWdtb2RlLAotCQkJCQkJIGJvb2wgY29u ZmxpY3RQZW5kaW5nKQorU2lnbmFsVmlydHVhbFRyYW5zYWN0aW9uKFZpcnR1YWxUcmFuc2Fj dGlvbklkIHZ4aWQsIFByb2NTaWduYWxSZWFzb24gc2lnbW9kZSkKIHsKIAlQcm9jQXJyYXlT dHJ1Y3QgKmFycmF5UCA9IHByb2NBcnJheTsKIAlpbnQJCQlpbmRleDsKQEAgLTM0NzYsNyAr MzQ2NCw2IEBAIFNpZ25hbFZpcnR1YWxUcmFuc2FjdGlvbihWaXJ0dWFsVHJhbnNhY3Rpb25J ZCB2eGlkLCBQcm9jU2lnbmFsUmVhc29uIHNpZ21vZGUsCiAJCWlmIChwcm9jdnhpZC5wcm9j TnVtYmVyID09IHZ4aWQucHJvY051bWJlciAmJgogCQkJcHJvY3Z4aWQubG9jYWxUcmFuc2Fj dGlvbklkID09IHZ4aWQubG9jYWxUcmFuc2FjdGlvbklkKQogCQl7Ci0JCQlwcm9jLT5yZWNv dmVyeUNvbmZsaWN0UGVuZGluZyA9IGNvbmZsaWN0UGVuZGluZzsKIAkJCXBpZCA9IHByb2Mt PnBpZDsKIAkJCWlmIChwaWQgIT0gMCkKIAkJCXsKQEAgLTM2MTgsNyArMzYwNSw3IEBAIENv dW50REJDb25uZWN0aW9ucyhPaWQgZGF0YWJhc2VpZCkKICAqIENhbmNlbERCQmFja2VuZHMg LS0tIGNhbmNlbCBiYWNrZW5kcyB0aGF0IGFyZSB1c2luZyBzcGVjaWZpZWQgZGF0YWJhc2UK ICAqLwogdm9pZAotQ2FuY2VsREJCYWNrZW5kcyhPaWQgZGF0YWJhc2VpZCwgUHJvY1NpZ25h bFJlYXNvbiBzaWdtb2RlLCBib29sIGNvbmZsaWN0UGVuZGluZykKK0NhbmNlbERCQmFja2Vu ZHMoT2lkIGRhdGFiYXNlaWQsIFByb2NTaWduYWxSZWFzb24gc2lnbW9kZSkKIHsKIAlQcm9j QXJyYXlTdHJ1Y3QgKmFycmF5UCA9IHByb2NBcnJheTsKIAlpbnQJCQlpbmRleDsKQEAgLTM2 MzgsNyArMzYyNSw2IEBAIENhbmNlbERCQmFja2VuZHMoT2lkIGRhdGFiYXNlaWQsIFByb2NT aWduYWxSZWFzb24gc2lnbW9kZSwgYm9vbCBjb25mbGljdFBlbmRpbmcpCiAKIAkJCUdFVF9W WElEX0ZST01fUEdQUk9DKHByb2N2eGlkLCAqcHJvYyk7CiAKLQkJCXByb2MtPnJlY292ZXJ5 Q29uZmxpY3RQZW5kaW5nID0gY29uZmxpY3RQZW5kaW5nOwogCQkJcGlkID0gcHJvYy0+cGlk OwogCQkJaWYgKHBpZCAhPSAwKQogCQkJewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3Rv cmFnZS9pcGMvc3RhbmRieS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc3RhbmRieS5j CmluZGV4IGFmZmZhYjc3MTA2Li42ZGI4MDM0NzZjNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvc3RvcmFnZS9pcGMvc3RhbmRieS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBj L3N0YW5kYnkuYwpAQCAtMzkwLDcgKzM5MCw3IEBAIFJlc29sdmVSZWNvdmVyeUNvbmZsaWN0 V2l0aFZpcnR1YWxYSURzKFZpcnR1YWxUcmFuc2FjdGlvbklkICp3YWl0bGlzdCwKIAkJCQkg KiBOb3cgZmluZCBvdXQgd2hvIHRvIHRocm93IG91dCBvZiB0aGUgYmFsbG9vbi4KIAkJCQkg Ki8KIAkJCQlBc3NlcnQoVmlydHVhbFRyYW5zYWN0aW9uSWRJc1ZhbGlkKCp3YWl0bGlzdCkp OwotCQkJCXBpZCA9IENhbmNlbFZpcnR1YWxUcmFuc2FjdGlvbigqd2FpdGxpc3QsIHJlYXNv bik7CisJCQkJcGlkID0gU2lnbmFsVmlydHVhbFRyYW5zYWN0aW9uKCp3YWl0bGlzdCwgcmVh c29uKTsKIAogCQkJCS8qCiAJCQkJICogV2FpdCBhIGxpdHRsZSBiaXQgZm9yIGl0IHRvIGRp ZSBzbyB0aGF0IHdlIGF2b2lkIGZsb29kaW5nCkBAIC01ODEsNyArNTgxLDcgQEAgUmVzb2x2 ZVJlY292ZXJ5Q29uZmxpY3RXaXRoRGF0YWJhc2UoT2lkIGRiaWQpCiAJICovCiAJd2hpbGUg KENvdW50REJCYWNrZW5kcyhkYmlkKSA+IDApCiAJewotCQlDYW5jZWxEQkJhY2tlbmRzKGRi aWQsIFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfREFUQUJBU0UsIHRydWUpOworCQlDYW5j ZWxEQkJhY2tlbmRzKGRiaWQsIFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfREFUQUJBU0Up OwogCiAJCS8qCiAJCSAqIFdhaXQgYXdoaWxlIGZvciB0aGVtIHRvIGRpZSBzbyB0aGF0IHdl IGF2b2lkIGZsb29kaW5nIGFuCkBAIC03MjQsOCArNzI0LDcgQEAgUmVzb2x2ZVJlY292ZXJ5 Q29uZmxpY3RXaXRoTG9jayhMT0NLVEFHIGxvY2t0YWcsIGJvb2wgbG9nZ2luZ19jb25mbGlj dCkKIAkJd2hpbGUgKFZpcnR1YWxUcmFuc2FjdGlvbklkSXNWYWxpZCgqYmFja2VuZHMpKQog CQl7CiAJCQlTaWduYWxWaXJ0dWFsVHJhbnNhY3Rpb24oKmJhY2tlbmRzLAotCQkJCQkJCQkJ IFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfU1RBUlRVUF9ERUFETE9DSywKLQkJCQkJCQkJ CSBmYWxzZSk7CisJCQkJCQkJCQkgUFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVF9TVEFSVFVQ X0RFQURMT0NLKTsKIAkJCWJhY2tlbmRzKys7CiAJCX0KIApAQCAtODgxLDExICs4ODAsMTEg QEAgU2VuZFJlY292ZXJ5Q29uZmxpY3RXaXRoQnVmZmVyUGluKFByb2NTaWduYWxSZWFzb24g cmVhc29uKQogCiAJLyoKIAkgKiBXZSBzZW5kIHNpZ25hbCB0byBhbGwgYmFja2VuZHMgdG8g YXNrIHRoZW0gaWYgdGhleSBhcmUgaG9sZGluZyB0aGUKLQkgKiBidWZmZXIgcGluIHdoaWNo IGlzIGRlbGF5aW5nIHRoZSBTdGFydHVwIHByb2Nlc3MuIFdlIG11c3Qgbm90IHNldCB0aGUK LQkgKiBjb25mbGljdCBmbGFnIHlldCwgc2luY2UgbW9zdCBiYWNrZW5kcyB3aWxsIGJlIGlu bm9jZW50LiBMZXQgdGhlCi0JICogU0lHVVNSMSBoYW5kbGluZyBpbiBlYWNoIGJhY2tlbmQg ZGVjaWRlIHRoZWlyIG93biBmYXRlLgorCSAqIGJ1ZmZlciBwaW4gd2hpY2ggaXMgZGVsYXlp bmcgdGhlIFN0YXJ0dXAgcHJvY2Vzcy4gTW9zdCBvZiB0aGVtIHdpbGwgYmUKKwkgKiBpbm5v Y2VudCwgYnV0IHdlIGxldCB0aGUgU0lHVVNSMSBoYW5kbGluZyBpbiBlYWNoIGJhY2tlbmQg ZGVjaWRlIHRoZWlyCisJICogb3duIGZhdGUuCiAJICovCi0JQ2FuY2VsREJCYWNrZW5kcyhJ bnZhbGlkT2lkLCByZWFzb24sIGZhbHNlKTsKKwlDYW5jZWxEQkJhY2tlbmRzKEludmFsaWRP aWQsIHJlYXNvbik7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdl L2xtZ3IvcHJvYy5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYwppbmRleCAw NjM4MjZhZTU3Ni4uNjQ1NWJiNmUwMWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvbG1nci9wcm9jLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYwpA QCAtNTA2LDcgKzUwNiw2IEBAIEluaXRQcm9jZXNzKHZvaWQpCiAJCQlBc3NlcnQoZGxpc3Rf aXNfZW1wdHkoJihNeVByb2MtPm15UHJvY0xvY2tzW2ldKSkpOwogCX0KICNlbmRpZgotCU15 UHJvYy0+cmVjb3ZlcnlDb25mbGljdFBlbmRpbmcgPSBmYWxzZTsKIAogCS8qIEluaXRpYWxp emUgZmllbGRzIGZvciBzeW5jIHJlcCAqLwogCU15UHJvYy0+d2FpdExTTiA9IDA7CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMgYi9zcmMvYmFja2VuZC90Y29w L3Bvc3RncmVzLmMKaW5kZXggZTU0YmYxZTc2MGYuLjI5YmVjZjBhNzAzIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKKysrIGIvc3JjL2JhY2tlbmQvdGNvcC9w b3N0Z3Jlcy5jCkBAIC0xNzUsNyArMTc1LDYgQEAgc3RhdGljIHZvaWQgZm9yYmlkZGVuX2lu X3dhbF9zZW5kZXIoY2hhciBmaXJzdGNoYXIpOwogc3RhdGljIGJvb2wgY2hlY2tfbG9nX3N0 YXRlbWVudChMaXN0ICpzdG10X2xpc3QpOwogc3RhdGljIGludAllcnJkZXRhaWxfZXhlY3V0 ZShMaXN0ICpyYXdfcGFyc2V0cmVlX2xpc3QpOwogc3RhdGljIGludAllcnJkZXRhaWxfcGFy YW1zKFBhcmFtTGlzdEluZm8gcGFyYW1zKTsKLXN0YXRpYyBpbnQJZXJyZGV0YWlsX2Fib3J0 KHZvaWQpOwogc3RhdGljIHZvaWQgYmluZF9wYXJhbV9lcnJvcl9jYWxsYmFjayh2b2lkICph cmcpOwogc3RhdGljIHZvaWQgc3RhcnRfeGFjdF9jb21tYW5kKHZvaWQpOwogc3RhdGljIHZv aWQgZmluaXNoX3hhY3RfY29tbWFuZCh2b2lkKTsKQEAgLTExNDEsOCArMTE0MCw3IEBAIGV4 ZWNfc2ltcGxlX3F1ZXJ5KGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZykKIAkJCWVyZXBvcnQo RVJST1IsCiAJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5fRkFJTEVEX1NRTF9UUkFOU0FDVElP TiksCiAJCQkJCSBlcnJtc2coImN1cnJlbnQgdHJhbnNhY3Rpb24gaXMgYWJvcnRlZCwgIgot CQkJCQkJCSJjb21tYW5kcyBpZ25vcmVkIHVudGlsIGVuZCBvZiB0cmFuc2FjdGlvbiBibG9j ayIpLAotCQkJCQkgZXJyZGV0YWlsX2Fib3J0KCkpKTsKKwkJCQkJCQkiY29tbWFuZHMgaWdu b3JlZCB1bnRpbCBlbmQgb2YgdHJhbnNhY3Rpb24gYmxvY2siKSkpOwogCiAJCS8qIE1ha2Ug c3VyZSB3ZSBhcmUgaW4gYSB0cmFuc2FjdGlvbiBjb21tYW5kICovCiAJCXN0YXJ0X3hhY3Rf Y29tbWFuZCgpOwpAQCAtMTQ5OCw4ICsxNDk2LDcgQEAgZXhlY19wYXJzZV9tZXNzYWdlKGNv bnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywJLyogc3RyaW5nIHRvIGV4ZWN1dGUgKi8KIAkJCWVy ZXBvcnQoRVJST1IsCiAJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5fRkFJTEVEX1NRTF9UUkFO U0FDVElPTiksCiAJCQkJCSBlcnJtc2coImN1cnJlbnQgdHJhbnNhY3Rpb24gaXMgYWJvcnRl ZCwgIgotCQkJCQkJCSJjb21tYW5kcyBpZ25vcmVkIHVudGlsIGVuZCBvZiB0cmFuc2FjdGlv biBibG9jayIpLAotCQkJCQkgZXJyZGV0YWlsX2Fib3J0KCkpKTsKKwkJCQkJCQkiY29tbWFu ZHMgaWdub3JlZCB1bnRpbCBlbmQgb2YgdHJhbnNhY3Rpb24gYmxvY2siKSkpOwogCiAJCS8q CiAJCSAqIENyZWF0ZSB0aGUgQ2FjaGVkUGxhblNvdXJjZSBiZWZvcmUgd2UgZG8gcGFyc2Ug YW5hbHlzaXMsIHNpbmNlIGl0CkBAIC0xNzUwLDggKzE3NDcsNyBAQCBleGVjX2JpbmRfbWVz c2FnZShTdHJpbmdJbmZvIGlucHV0X21lc3NhZ2UpCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJ KGVycmNvZGUoRVJSQ09ERV9JTl9GQUlMRURfU1FMX1RSQU5TQUNUSU9OKSwKIAkJCQkgZXJy bXNnKCJjdXJyZW50IHRyYW5zYWN0aW9uIGlzIGFib3J0ZWQsICIKLQkJCQkJCSJjb21tYW5k cyBpZ25vcmVkIHVudGlsIGVuZCBvZiB0cmFuc2FjdGlvbiBibG9jayIpLAotCQkJCSBlcnJk ZXRhaWxfYWJvcnQoKSkpOworCQkJCQkJImNvbW1hbmRzIGlnbm9yZWQgdW50aWwgZW5kIG9m IHRyYW5zYWN0aW9uIGJsb2NrIikpKTsKIAogCS8qCiAJICogQ3JlYXRlIHRoZSBwb3J0YWwu ICBBbGxvdyBzaWxlbnQgcmVwbGFjZW1lbnQgb2YgYW4gZXhpc3RpbmcgcG9ydGFsIG9ubHkK QEAgLTIyNTUsOCArMjI1MSw3IEBAIGV4ZWNfZXhlY3V0ZV9tZXNzYWdlKGNvbnN0IGNoYXIg KnBvcnRhbF9uYW1lLCBsb25nIG1heF9yb3dzKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShl cnJjb2RlKEVSUkNPREVfSU5fRkFJTEVEX1NRTF9UUkFOU0FDVElPTiksCiAJCQkJIGVycm1z ZygiY3VycmVudCB0cmFuc2FjdGlvbiBpcyBhYm9ydGVkLCAiCi0JCQkJCQkiY29tbWFuZHMg aWdub3JlZCB1bnRpbCBlbmQgb2YgdHJhbnNhY3Rpb24gYmxvY2siKSwKLQkJCQkgZXJyZGV0 YWlsX2Fib3J0KCkpKTsKKwkJCQkJCSJjb21tYW5kcyBpZ25vcmVkIHVudGlsIGVuZCBvZiB0 cmFuc2FjdGlvbiBibG9jayIpKSk7CiAKIAkvKiBDaGVjayBmb3IgY2FuY2VsIHNpZ25hbCBi ZWZvcmUgd2Ugc3RhcnQgZXhlY3V0aW9uICovCiAJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsK QEAgLTI1MzYsMjAgKzI1MzEsNiBAQCBlcnJkZXRhaWxfcGFyYW1zKFBhcmFtTGlzdEluZm8g cGFyYW1zKQogCXJldHVybiAwOwogfQogCi0vKgotICogZXJyZGV0YWlsX2Fib3J0Ci0gKgot ICogQWRkIGFuIGVycmRldGFpbCgpIGxpbmUgc2hvd2luZyBhYm9ydCByZWFzb24sIGlmIGFu eS4KLSAqLwotc3RhdGljIGludAotZXJyZGV0YWlsX2Fib3J0KHZvaWQpCi17Ci0JaWYgKE15 UHJvYy0+cmVjb3ZlcnlDb25mbGljdFBlbmRpbmcpCi0JCWVycmRldGFpbCgiQWJvcnQgcmVh c29uOiByZWNvdmVyeSBjb25mbGljdCIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIC8qCiAgKiBl cnJkZXRhaWxfcmVjb3ZlcnlfY29uZmxpY3QKICAqCkBAIC0yNjkyLDggKzI2NzMsNyBAQCBl eGVjX2Rlc2NyaWJlX3N0YXRlbWVudF9tZXNzYWdlKGNvbnN0IGNoYXIgKnN0bXRfbmFtZSkK IAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX0lOX0ZBSUxFRF9TUUxf VFJBTlNBQ1RJT04pLAogCQkJCSBlcnJtc2coImN1cnJlbnQgdHJhbnNhY3Rpb24gaXMgYWJv cnRlZCwgIgotCQkJCQkJImNvbW1hbmRzIGlnbm9yZWQgdW50aWwgZW5kIG9mIHRyYW5zYWN0 aW9uIGJsb2NrIiksCi0JCQkJIGVycmRldGFpbF9hYm9ydCgpKSk7CisJCQkJCQkiY29tbWFu ZHMgaWdub3JlZCB1bnRpbCBlbmQgb2YgdHJhbnNhY3Rpb24gYmxvY2siKSkpOwogCiAJaWYg KHdoZXJlVG9TZW5kT3V0cHV0ICE9IERlc3RSZW1vdGUpCiAJCXJldHVybjsJCQkJCS8qIGNh bid0IGFjdHVhbGx5IGRvIGFueXRoaW5nLi4uICovCkBAIC0yNzY5LDggKzI3NDksNyBAQCBl eGVjX2Rlc2NyaWJlX3BvcnRhbF9tZXNzYWdlKGNvbnN0IGNoYXIgKnBvcnRhbF9uYW1lKQog CQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfSU5fRkFJTEVEX1NRTF9U UkFOU0FDVElPTiksCiAJCQkJIGVycm1zZygiY3VycmVudCB0cmFuc2FjdGlvbiBpcyBhYm9y dGVkLCAiCi0JCQkJCQkiY29tbWFuZHMgaWdub3JlZCB1bnRpbCBlbmQgb2YgdHJhbnNhY3Rp b24gYmxvY2siKSwKLQkJCQkgZXJyZGV0YWlsX2Fib3J0KCkpKTsKKwkJCQkJCSJjb21tYW5k cyBpZ25vcmVkIHVudGlsIGVuZCBvZiB0cmFuc2FjdGlvbiBibG9jayIpKSk7CiAKIAlpZiAo d2hlcmVUb1NlbmRPdXRwdXQgIT0gRGVzdFJlbW90ZSkKIAkJcmV0dXJuOwkJCQkJLyogY2Fu J3QgYWN0dWFsbHkgZG8gYW55dGhpbmcuLi4gKi8KQEAgLTMxMzksOCArMzExOCw2IEBAIFBy b2Nlc3NSZWNvdmVyeUNvbmZsaWN0SW50ZXJydXB0KFByb2NTaWduYWxSZWFzb24gcmVhc29u KQogCQkJCXJldHVybjsKIAkJCX0KIAotCQkJTXlQcm9jLT5yZWNvdmVyeUNvbmZsaWN0UGVu ZGluZyA9IHRydWU7Ci0KIAkJCS8qIEludGVudGlvbmFsIGZhbGwgdGhyb3VnaCB0byBlcnJv ciBoYW5kbGluZyAqLwogCQkJLyogRkFMTFRIUk9VR0ggKi8KIApkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvc3RvcmFnZS9wcm9jLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2MuaApp bmRleCAwMzliYzgzNTNiZS4uODFmMTk2MGE2MzUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L3N0b3JhZ2UvcHJvYy5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvYy5oCkBAIC0y MzUsMTMgKzIzNSw2IEBAIHN0cnVjdCBQR1BST0MKIAogCWJvb2wJCWlzUmVndWxhckJhY2tl bmQ7CS8qIHRydWUgaWYgaXQncyBhIHJlZ3VsYXIgYmFja2VuZC4gKi8KIAotCS8qCi0JICog V2hpbGUgaW4gaG90IHN0YW5kYnkgbW9kZSwgc2hvd3MgdGhhdCBhIGNvbmZsaWN0IHNpZ25h bCBoYXMgYmVlbiBzZW50Ci0JICogZm9yIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLiBTZXQv Y2xlYXJlZCB3aGlsZSBob2xkaW5nIFByb2NBcnJheUxvY2ssCi0JICogdGhvdWdoIG5vdCBy ZXF1aXJlZC4gQWNjZXNzZWQgd2l0aG91dCBsb2NrLCBpZiBuZWVkZWQuCi0JICovCi0JYm9v bAkJcmVjb3ZlcnlDb25mbGljdFBlbmRpbmc7Ci0KIAkvKgogCSAqIEluZm8gYWJvdXQgTFdM b2NrIHRoZSBwcm9jZXNzIGlzIGN1cnJlbnRseSB3YWl0aW5nIGZvciwgaWYgYW55LgogCSAq CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NhcnJheS5oIGIvc3JjL2lu Y2x1ZGUvc3RvcmFnZS9wcm9jYXJyYXkuaAppbmRleCBkYTdiNWU3OGQzMC4uM2E4NTkzZjg3 YmEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY2FycmF5LmgKKysrIGIv c3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jYXJyYXkuaApAQCAtNzcsMTQgKzc3LDEyIEBAIGV4 dGVybiBWaXJ0dWFsVHJhbnNhY3Rpb25JZCAqR2V0Q3VycmVudFZpcnR1YWxYSURzKFRyYW5z YWN0aW9uSWQgbGltaXRYbWluLAogCQkJCQkJCQkJCQkJICAgYm9vbCBleGNsdWRlWG1pbjAs IGJvb2wgYWxsRGJzLCBpbnQgZXhjbHVkZVZhY3V1bSwKIAkJCQkJCQkJCQkJCSAgIGludCAq bnZ4aWRzKTsKIGV4dGVybiBWaXJ0dWFsVHJhbnNhY3Rpb25JZCAqR2V0Q29uZmxpY3RpbmdW aXJ0dWFsWElEcyhUcmFuc2FjdGlvbklkIGxpbWl0WG1pbiwgT2lkIGRiT2lkKTsKLWV4dGVy biBwaWRfdCBDYW5jZWxWaXJ0dWFsVHJhbnNhY3Rpb24oVmlydHVhbFRyYW5zYWN0aW9uSWQg dnhpZCwgUHJvY1NpZ25hbFJlYXNvbiBzaWdtb2RlKTsKLWV4dGVybiBwaWRfdCBTaWduYWxW aXJ0dWFsVHJhbnNhY3Rpb24oVmlydHVhbFRyYW5zYWN0aW9uSWQgdnhpZCwgUHJvY1NpZ25h bFJlYXNvbiBzaWdtb2RlLAotCQkJCQkJCQkJICBib29sIGNvbmZsaWN0UGVuZGluZyk7Citl eHRlcm4gcGlkX3QgU2lnbmFsVmlydHVhbFRyYW5zYWN0aW9uKFZpcnR1YWxUcmFuc2FjdGlv bklkIHZ4aWQsIFByb2NTaWduYWxSZWFzb24gc2lnbW9kZSk7CiAKIGV4dGVybiBib29sIE1p bmltdW1BY3RpdmVCYWNrZW5kcyhpbnQgbWluKTsKIGV4dGVybiBpbnQJQ291bnREQkJhY2tl bmRzKE9pZCBkYXRhYmFzZWlkKTsKIGV4dGVybiBpbnQJQ291bnREQkNvbm5lY3Rpb25zKE9p ZCBkYXRhYmFzZWlkKTsKLWV4dGVybiB2b2lkIENhbmNlbERCQmFja2VuZHMoT2lkIGRhdGFi YXNlaWQsIFByb2NTaWduYWxSZWFzb24gc2lnbW9kZSwgYm9vbCBjb25mbGljdFBlbmRpbmcp OworZXh0ZXJuIHZvaWQgQ2FuY2VsREJCYWNrZW5kcyhPaWQgZGF0YWJhc2VpZCwgUHJvY1Np Z25hbFJlYXNvbiBzaWdtb2RlKTsKIGV4dGVybiBpbnQJQ291bnRVc2VyQmFja2VuZHMoT2lk IHJvbGVpZCk7CiBleHRlcm4gYm9vbCBDb3VudE90aGVyREJCYWNrZW5kcyhPaWQgZGF0YWJh c2VJZCwKIAkJCQkJCQkJIGludCAqbmJhY2tlbmRzLCBpbnQgKm5wcmVwYXJlZCk7Ci0tIAoy LjQ3LjMKCg== --------------bKtygjyKfjKbO6KbJdMaMR2R Content-Type: text/x-patch; charset=UTF-8; name="v8-0002-Don-t-hint-that-you-can-reconnect-when-the-databa.patch" Content-Disposition: attachment; filename*0="v8-0002-Don-t-hint-that-you-can-reconnect-when-the-databa.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAyMDJjMDdkYWUwNDFkNDY1ZTRkZTcxZTM2OTk0MGIwOWIwYTJmMzgwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFRodSwgMjIgSmFuIDIwMjYgMTk6MTc6MzAgKzAyMDAK U3ViamVjdDogW1BBVENIIHY4IDIvOF0gRG9uJ3QgaGludCB0aGF0IHlvdSBjYW4gcmVjb25u ZWN0IHdoZW4gdGhlIGRhdGFiYXNlIGlzCiBkcm9wcGVkCgotLS0KIHNyYy9iYWNrZW5kL3Rj b3AvcG9zdGdyZXMuYyB8IDI0ICsrKysrKysrKysrKystLS0tLS0tLS0tLQogMSBmaWxlIGNo YW5nZWQsIDEzIGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYyBiL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdy ZXMuYwppbmRleCAyOWJlY2YwYTcwMy4uOTgwZWYxZGExMDAgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3Rjb3AvcG9zdGdyZXMuYworKysgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVz LmMKQEAgLTMyMDksMjcgKzMyMDksMjkgQEAgUHJvY2Vzc1JlY292ZXJ5Q29uZmxpY3RJbnRl cnJ1cHQoUHJvY1NpZ25hbFJlYXNvbiByZWFzb24pCiAJCQkJfQogCQkJfQogCi0JCQkvKiBJ bnRlbnRpb25hbCBmYWxsIHRocm91Z2ggdG8gc2Vzc2lvbiBjYW5jZWwgKi8KLQkJCS8qIEZB TExUSFJPVUdIICovCi0KLQkJY2FzZSBQUk9DU0lHX1JFQ09WRVJZX0NPTkZMSUNUX0RBVEFC QVNFOgotCiAJCQkvKgotCQkJICogUmV0cnlpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2Ug dGhlIGRhdGFiYXNlIGlzIGRyb3BwZWQsIG9yIHdlCi0JCQkgKiBkZWNpZGVkIGFib3ZlIHRo YXQgd2UgY291bGRuJ3QgcmVzb2x2ZSB0aGUgY29uZmxpY3Qgd2l0aCBhbgotCQkJICogRVJS T1IgYW5kIGZlbGwgdGhyb3VnaC4gIFRlcm1pbmF0ZSB0aGUgc2Vzc2lvbi4KKwkJCSAqIFRo ZSBjb25mbGljdCBjYW5ub3QgYmUgcmVzb2x2ZWQgd2l0aCBFUlJPUiwgc28gdGVybWluYXRl IHRoZQorCQkJICogd2hvbGUgc2Vzc2lvbi4KIAkJCSAqLwogCQkJcGdzdGF0X3JlcG9ydF9y ZWNvdmVyeV9jb25mbGljdChyZWFzb24pOwogCQkJZXJlcG9ydChGQVRBTCwKLQkJCQkJKGVy cmNvZGUocmVhc29uID09IFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfREFUQUJBU0UgPwot CQkJCQkJCSBFUlJDT0RFX0RBVEFCQVNFX0RST1BQRUQgOgotCQkJCQkJCSBFUlJDT0RFX1Rf Ul9TRVJJQUxJWkFUSU9OX0ZBSUxVUkUpLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX1RfUl9T RVJJQUxJWkFUSU9OX0ZBSUxVUkUpLAogCQkJCQkgZXJybXNnKCJ0ZXJtaW5hdGluZyBjb25u ZWN0aW9uIGR1ZSB0byBjb25mbGljdCB3aXRoIHJlY292ZXJ5IiksCiAJCQkJCSBlcnJkZXRh aWxfcmVjb3ZlcnlfY29uZmxpY3QocmVhc29uKSwKIAkJCQkJIGVycmhpbnQoIkluIGEgbW9t ZW50IHlvdSBzaG91bGQgYmUgYWJsZSB0byByZWNvbm5lY3QgdG8gdGhlIgogCQkJCQkJCSAi IGRhdGFiYXNlIGFuZCByZXBlYXQgeW91ciBjb21tYW5kLiIpKSk7CiAJCQlicmVhazsKIAor CQljYXNlIFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfREFUQUJBU0U6CisKKwkJCS8qIFRo ZSBkYXRhYmFzZSBpcyBiZWluZyBkcm9wcGVkOyB0ZXJtaW5hdGUgdGhlIHNlc3Npb24gKi8K KwkJCXBnc3RhdF9yZXBvcnRfcmVjb3ZlcnlfY29uZmxpY3QocmVhc29uKTsKKwkJCWVyZXBv cnQoRkFUQUwsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfREFUQUJBU0VfRFJPUFBFRCksCisJ CQkJCSBlcnJtc2coInRlcm1pbmF0aW5nIGNvbm5lY3Rpb24gZHVlIHRvIGNvbmZsaWN0IHdp dGggcmVjb3ZlcnkiKSwKKwkJCQkJIGVycmRldGFpbF9yZWNvdmVyeV9jb25mbGljdChyZWFz b24pKSk7CisJCQlicmVhazsKKwogCQlkZWZhdWx0OgogCQkJZWxvZyhGQVRBTCwgInVucmVj b2duaXplZCBjb25mbGljdCBtb2RlOiAlZCIsIChpbnQpIHJlYXNvbik7CiAJfQotLSAKMi40 Ny4zCgo= --------------bKtygjyKfjKbO6KbJdMaMR2R Content-Type: text/x-patch; charset=UTF-8; name="v8-0003-Use-ProcNumber-rather-than-pid-in-ReplicationSlot.patch" Content-Disposition: attachment; filename*0="v8-0003-Use-ProcNumber-rather-than-pid-in-ReplicationSlot.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBkMmM4OWEwMDBiZjEwYWYyNTQwOTBiZDI0ZDZhY2JiMDk4YmM0ZjhlIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFRodSwgMjIgSmFuIDIwMjYgMTQ6MjU6MzkgKzAyMDAK U3ViamVjdDogW1BBVENIIHY4IDMvOF0gVXNlIFByb2NOdW1iZXIgcmF0aGVyIHRoYW4gcGlk IGluIFJlcGxpY2F0aW9uU2xvdAoKVGhpcyBoZWxwcyB0aGUgbmV4dCBjb21taXQKLS0tCiBz cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Nsb3RzeW5jLmMgfCAgMiArLQogc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vc2xvdC5jICAgICAgICAgICAgIHwgNzEgKysrKysrKysr KysrLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vc2xvdGZ1bmNzLmMgICAg ICAgIHwgMTMgKystLQogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vc2xvdC5oICAgICAgICAg ICAgIHwgIDcgKystCiA0IGZpbGVzIGNoYW5nZWQsIDUzIGluc2VydGlvbnMoKyksIDQwIGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvc2xvdHN5bmMuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvc2xvdHN5 bmMuYwppbmRleCAxYzM0M2QwM2QyMS4uNjBmYzc1NmI1MDkgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvc2xvdHN5bmMuYworKysgYi9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Nsb3RzeW5jLmMKQEAgLTE3NTksNyArMTc1OSw3IEBA IHVwZGF0ZV9zeW5jZWRfc2xvdHNfaW5hY3RpdmVfc2luY2Uodm9pZCkKIAkJCUFzc2VydChT bG90SXNMb2dpY2FsKHMpKTsKIAogCQkJLyogVGhlIHNsb3QgbXVzdCBub3QgYmUgYWNxdWly ZWQgYnkgYW55IHByb2Nlc3MgKi8KLQkJCUFzc2VydChzLT5hY3RpdmVfcGlkID09IDApOwor CQkJQXNzZXJ0KHMtPmFjdGl2ZV9wcm9jID09IElOVkFMSURfUFJPQ19OVU1CRVIpOwogCiAJ CQkvKiBVc2UgdGhlIHNhbWUgaW5hY3RpdmVfc2luY2UgdGltZSBmb3IgYWxsIHRoZSBzbG90 cy4gKi8KIAkJCWlmIChub3cgPT0gMCkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL3Nsb3QuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Nsb3QuYwppbmRleCA0 YzQ3MjYxYzdmOS4uNWM2ZjcwNGUwMjkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL3Nsb3QuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9zbG90LmMKQEAg LTIyNiw2ICsyMjYsNyBAQCBSZXBsaWNhdGlvblNsb3RzU2htZW1Jbml0KHZvaWQpCiAJCQlS ZXBsaWNhdGlvblNsb3QgKnNsb3QgPSAmUmVwbGljYXRpb25TbG90Q3RsLT5yZXBsaWNhdGlv bl9zbG90c1tpXTsKIAogCQkJLyogZXZlcnl0aGluZyBlbHNlIGlzIHplcm9lZCBieSB0aGUg bWVtc2V0IGFib3ZlICovCisJCQlzbG90LT5hY3RpdmVfcHJvYyA9IElOVkFMSURfUFJPQ19O VU1CRVI7CiAJCQlTcGluTG9ja0luaXQoJnNsb3QtPm11dGV4KTsKIAkJCUxXTG9ja0luaXRp YWxpemUoJnNsb3QtPmlvX2luX3Byb2dyZXNzX2xvY2ssCiAJCQkJCQkJIExXVFJBTkNIRV9S RVBMSUNBVElPTl9TTE9UX0lPKTsKQEAgLTQ2MSw3ICs0NjIsNyBAQCBSZXBsaWNhdGlvblNs b3RDcmVhdGUoY29uc3QgY2hhciAqbmFtZSwgYm9vbCBkYl9zcGVjaWZpYywKIAkgKiBiZSBk b2luZyB0aGF0LiAgU28gaXQncyBzYWZlIHRvIGluaXRpYWxpemUgdGhlIHNsb3QuCiAJICov CiAJQXNzZXJ0KCFzbG90LT5pbl91c2UpOwotCUFzc2VydChzbG90LT5hY3RpdmVfcGlkID09 IDApOworCUFzc2VydChzbG90LT5hY3RpdmVfcHJvYyA9PSBJTlZBTElEX1BST0NfTlVNQkVS KTsKIAogCS8qIGZpcnN0IGluaXRpYWxpemUgcGVyc2lzdGVudCBkYXRhICovCiAJbWVtc2V0 KCZzbG90LT5kYXRhLCAwLCBzaXplb2YoUmVwbGljYXRpb25TbG90UGVyc2lzdGVudERhdGEp KTsKQEAgLTUwNSw4ICs1MDYsOCBAQCBSZXBsaWNhdGlvblNsb3RDcmVhdGUoY29uc3QgY2hh ciAqbmFtZSwgYm9vbCBkYl9zcGVjaWZpYywKIAogCS8qIFdlIGNhbiBub3cgbWFyayB0aGUg c2xvdCBhY3RpdmUsIGFuZCB0aGF0IG1ha2VzIGl0IG91ciBzbG90LiAqLwogCVNwaW5Mb2Nr QWNxdWlyZSgmc2xvdC0+bXV0ZXgpOwotCUFzc2VydChzbG90LT5hY3RpdmVfcGlkID09IDAp OwotCXNsb3QtPmFjdGl2ZV9waWQgPSBNeVByb2NQaWQ7CisJQXNzZXJ0KHNsb3QtPmFjdGl2 ZV9wcm9jID09IElOVkFMSURfUFJPQ19OVU1CRVIpOworCXNsb3QtPmFjdGl2ZV9wcm9jID0g TXlQcm9jTnVtYmVyOwogCVNwaW5Mb2NrUmVsZWFzZSgmc2xvdC0+bXV0ZXgpOwogCU15UmVw bGljYXRpb25TbG90ID0gc2xvdDsKIApAQCAtNjIwLDcgKzYyMSw4IEBAIHZvaWQKIFJlcGxp Y2F0aW9uU2xvdEFjcXVpcmUoY29uc3QgY2hhciAqbmFtZSwgYm9vbCBub3dhaXQsIGJvb2wg ZXJyb3JfaWZfaW52YWxpZCkKIHsKIAlSZXBsaWNhdGlvblNsb3QgKnM7Ci0JaW50CQkJYWN0 aXZlX3BpZDsKKwlQcm9jTnVtYmVyCWFjdGl2ZV9wcm9jOworCXBpZF90CQlhY3RpdmVfcGlk OwogCiAJQXNzZXJ0KG5hbWUgIT0gTlVMTCk7CiAKQEAgLTY3MiwxNyArNjc0LDE4IEBAIHJl dHJ5OgogCQkgKiB0byBpbmFjdGl2ZV9zaW5jZSBpbiBJbnZhbGlkYXRlUG9zc2libHlPYnNv bGV0ZVNsb3QuCiAJCSAqLwogCQlTcGluTG9ja0FjcXVpcmUoJnMtPm11dGV4KTsKLQkJaWYg KHMtPmFjdGl2ZV9waWQgPT0gMCkKLQkJCXMtPmFjdGl2ZV9waWQgPSBNeVByb2NQaWQ7Ci0J CWFjdGl2ZV9waWQgPSBzLT5hY3RpdmVfcGlkOworCQlpZiAocy0+YWN0aXZlX3Byb2MgPT0g SU5WQUxJRF9QUk9DX05VTUJFUikKKwkJCXMtPmFjdGl2ZV9wcm9jID0gTXlQcm9jTnVtYmVy OworCQlhY3RpdmVfcHJvYyA9IHMtPmFjdGl2ZV9wcm9jOwogCQlSZXBsaWNhdGlvblNsb3RT ZXRJbmFjdGl2ZVNpbmNlKHMsIDAsIGZhbHNlKTsKIAkJU3BpbkxvY2tSZWxlYXNlKCZzLT5t dXRleCk7CiAJfQogCWVsc2UKIAl7Ci0JCXMtPmFjdGl2ZV9waWQgPSBhY3RpdmVfcGlkID0g TXlQcm9jUGlkOworCQlzLT5hY3RpdmVfcHJvYyA9IGFjdGl2ZV9wcm9jID0gTXlQcm9jTnVt YmVyOwogCQlSZXBsaWNhdGlvblNsb3RTZXRJbmFjdGl2ZVNpbmNlKHMsIDAsIHRydWUpOwog CX0KKwlhY3RpdmVfcGlkID0gR2V0UEdQcm9jQnlOdW1iZXIoYWN0aXZlX3Byb2MpLT5waWQ7 CiAJTFdMb2NrUmVsZWFzZShSZXBsaWNhdGlvblNsb3RDb250cm9sTG9jayk7CiAKIAkvKgpA QCAtNjkwLDcgKzY5Myw3IEBAIHJldHJ5OgogCSAqIHdhaXQgdW50aWwgdGhlIG93bmluZyBw cm9jZXNzIHNpZ25hbHMgdXMgdGhhdCBpdCdzIGJlZW4gcmVsZWFzZWQsIG9yCiAJICogZXJy b3Igb3V0LgogCSAqLwotCWlmIChhY3RpdmVfcGlkICE9IE15UHJvY1BpZCkKKwlpZiAoYWN0 aXZlX3Byb2MgIT0gTXlQcm9jTnVtYmVyKQogCXsKIAkJaWYgKCFub3dhaXQpCiAJCXsKQEAg LTc2Miw3ICs3NjUsNyBAQCBSZXBsaWNhdGlvblNsb3RSZWxlYXNlKHZvaWQpCiAJYm9vbAkJ aXNfbG9naWNhbDsKIAlUaW1lc3RhbXBUeiBub3cgPSAwOwogCi0JQXNzZXJ0KHNsb3QgIT0g TlVMTCAmJiBzbG90LT5hY3RpdmVfcGlkICE9IDApOworCUFzc2VydChzbG90ICE9IE5VTEwg JiYgc2xvdC0+YWN0aXZlX3Byb2MgIT0gSU5WQUxJRF9QUk9DX05VTUJFUik7CiAKIAlpc19s b2dpY2FsID0gU2xvdElzTG9naWNhbChzbG90KTsKIApAQCAtODE1LDcgKzgxOCw3IEBAIFJl cGxpY2F0aW9uU2xvdFJlbGVhc2Uodm9pZCkKIAkJICogZGlzY29ubmVjdGluZywgYnV0IHdh a2UgdXAgb3RoZXJzIHRoYXQgbWF5IGJlIHdhaXRpbmcgZm9yIGl0LgogCQkgKi8KIAkJU3Bp bkxvY2tBY3F1aXJlKCZzbG90LT5tdXRleCk7Ci0JCXNsb3QtPmFjdGl2ZV9waWQgPSAwOwor CQlzbG90LT5hY3RpdmVfcHJvYyA9IElOVkFMSURfUFJPQ19OVU1CRVI7CiAJCVJlcGxpY2F0 aW9uU2xvdFNldEluYWN0aXZlU2luY2Uoc2xvdCwgbm93LCBmYWxzZSk7CiAJCVNwaW5Mb2Nr UmVsZWFzZSgmc2xvdC0+bXV0ZXgpOwogCQlDb25kaXRpb25WYXJpYWJsZUJyb2FkY2FzdCgm c2xvdC0+YWN0aXZlX2N2KTsKQEAgLTg3Nyw3ICs4ODAsNyBAQCByZXN0YXJ0OgogCQlmb3Vu ZF92YWxpZF9sb2dpY2Fsc2xvdCB8PQogCQkJKFNsb3RJc0xvZ2ljYWwocykgJiYgcy0+ZGF0 YS5pbnZhbGlkYXRlZCA9PSBSU19JTlZBTF9OT05FKTsKIAotCQlpZiAoKHMtPmFjdGl2ZV9w aWQgPT0gTXlQcm9jUGlkICYmCisJCWlmICgocy0+YWN0aXZlX3Byb2MgPT0gTXlQcm9jTnVt YmVyICYmCiAJCQkgKCFzeW5jZWRfb25seSB8fCBzLT5kYXRhLnN5bmNlZCkpKQogCQl7CiAJ CQlBc3NlcnQocy0+ZGF0YS5wZXJzaXN0ZW5jeSA9PSBSU19URU1QT1JBUlkpOwpAQCAtMTA4 OCw3ICsxMDkxLDcgQEAgUmVwbGljYXRpb25TbG90RHJvcFB0cihSZXBsaWNhdGlvblNsb3Qg KnNsb3QpCiAJCWJvb2wJCWZhaWxfc29mdGx5ID0gc2xvdC0+ZGF0YS5wZXJzaXN0ZW5jeSAh PSBSU19QRVJTSVNURU5UOwogCiAJCVNwaW5Mb2NrQWNxdWlyZSgmc2xvdC0+bXV0ZXgpOwot CQlzbG90LT5hY3RpdmVfcGlkID0gMDsKKwkJc2xvdC0+YWN0aXZlX3Byb2MgPSBJTlZBTElE X1BST0NfTlVNQkVSOwogCQlTcGluTG9ja1JlbGVhc2UoJnNsb3QtPm11dGV4KTsKIAogCQkv KiB3YWtlIHVwIGFueW9uZSB3YWl0aW5nIG9uIHRoaXMgc2xvdCAqLwpAQCAtMTExMCw3ICsx MTEzLDcgQEAgUmVwbGljYXRpb25TbG90RHJvcFB0cihSZXBsaWNhdGlvblNsb3QgKnNsb3Qp CiAJICogQWxzbyB3YWtlIHVwIHByb2Nlc3NlcyB3YWl0aW5nIGZvciBpdC4KIAkgKi8KIAlM V0xvY2tBY3F1aXJlKFJlcGxpY2F0aW9uU2xvdENvbnRyb2xMb2NrLCBMV19FWENMVVNJVkUp OwotCXNsb3QtPmFjdGl2ZV9waWQgPSAwOworCXNsb3QtPmFjdGl2ZV9wcm9jID0gSU5WQUxJ RF9QUk9DX05VTUJFUjsKIAlzbG90LT5pbl91c2UgPSBmYWxzZTsKIAlMV0xvY2tSZWxlYXNl KFJlcGxpY2F0aW9uU2xvdENvbnRyb2xMb2NrKTsKIAlDb25kaXRpb25WYXJpYWJsZUJyb2Fk Y2FzdCgmc2xvdC0+YWN0aXZlX2N2KTsKQEAgLTE0NzYsNyArMTQ3OSw3IEBAIFJlcGxpY2F0 aW9uU2xvdHNDb3VudERCU2xvdHMoT2lkIGRib2lkLCBpbnQgKm5zbG90cywgaW50ICpuYWN0 aXZlKQogCQkvKiBjb3VudCBzbG90cyB3aXRoIHNwaW5sb2NrIGhlbGQgKi8KIAkJU3Bpbkxv Y2tBY3F1aXJlKCZzLT5tdXRleCk7CiAJCSgqbnNsb3RzKSsrOwotCQlpZiAocy0+YWN0aXZl X3BpZCAhPSAwKQorCQlpZiAocy0+YWN0aXZlX3Byb2MgIT0gSU5WQUxJRF9QUk9DX05VTUJF UikKIAkJCSgqbmFjdGl2ZSkrKzsKIAkJU3BpbkxvY2tSZWxlYXNlKCZzLT5tdXRleCk7CiAJ fQpAQCAtMTUyMCw3ICsxNTIzLDcgQEAgcmVzdGFydDoKIAl7CiAJCVJlcGxpY2F0aW9uU2xv dCAqczsKIAkJY2hhcgkgICAqc2xvdG5hbWU7Ci0JCWludAkJCWFjdGl2ZV9waWQ7CisJCVBy b2NOdW1iZXIJYWN0aXZlX3Byb2M7CiAKIAkJcyA9ICZSZXBsaWNhdGlvblNsb3RDdGwtPnJl cGxpY2F0aW9uX3Nsb3RzW2ldOwogCkBAIC0xNTUwLDExICsxNTUzLDExIEBAIHJlc3RhcnQ6 CiAJCVNwaW5Mb2NrQWNxdWlyZSgmcy0+bXV0ZXgpOwogCQkvKiBjYW4ndCBjaGFuZ2Ugd2hp bGUgUmVwbGljYXRpb25TbG90Q29udHJvbExvY2sgaXMgaGVsZCAqLwogCQlzbG90bmFtZSA9 IE5hbWVTdHIocy0+ZGF0YS5uYW1lKTsKLQkJYWN0aXZlX3BpZCA9IHMtPmFjdGl2ZV9waWQ7 Ci0JCWlmIChhY3RpdmVfcGlkID09IDApCisJCWFjdGl2ZV9wcm9jID0gcy0+YWN0aXZlX3By b2M7CisJCWlmIChhY3RpdmVfcHJvYyA9PSBJTlZBTElEX1BST0NfTlVNQkVSKQogCQl7CiAJ CQlNeVJlcGxpY2F0aW9uU2xvdCA9IHM7Ci0JCQlzLT5hY3RpdmVfcGlkID0gTXlQcm9jUGlk OworCQkJcy0+YWN0aXZlX3Byb2MgPSBNeVByb2NOdW1iZXI7CiAJCX0KIAkJU3BpbkxvY2tS ZWxlYXNlKCZzLT5tdXRleCk7CiAKQEAgLTE1NzksMTEgKzE1ODIsMTEgQEAgcmVzdGFydDoK IAkJICogWFhYOiBXZSBjYW4gY29uc2lkZXIgc2h1dHRpbmcgZG93biB0aGUgc2xvdCBzeW5j IHdvcmtlciBiZWZvcmUKIAkJICogdHJ5aW5nIHRvIGRyb3Agc3luY2VkIHRlbXBvcmFyeSBz bG90cyBoZXJlLgogCQkgKi8KLQkJaWYgKGFjdGl2ZV9waWQpCisJCWlmIChhY3RpdmVfcHJv YyAhPSBJTlZBTElEX1BST0NfTlVNQkVSKQogCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVy cmNvZGUoRVJSQ09ERV9PQkpFQ1RfSU5fVVNFKSwKIAkJCQkJIGVycm1zZygicmVwbGljYXRp b24gc2xvdCBcIiVzXCIgaXMgYWN0aXZlIGZvciBQSUQgJWQiLAotCQkJCQkJCXNsb3RuYW1l LCBhY3RpdmVfcGlkKSkpOworCQkJCQkJCXNsb3RuYW1lLCBHZXRQR1Byb2NCeU51bWJlcihh Y3RpdmVfcHJvYyktPnBpZCkpKTsKIAogCQkvKgogCQkgKiBUbyBhdm9pZCBkdXBsaWNhdGlu ZyBSZXBsaWNhdGlvblNsb3REcm9wQWNxdWlyZWQoKSBhbmQgdG8gYXZvaWQKQEAgLTE5NzQs NyArMTk3Nyw4IEBAIEludmFsaWRhdGVQb3NzaWJseU9ic29sZXRlU2xvdCh1aW50MzIgcG9z c2libGVfY2F1c2VzLAogCXsKIAkJWExvZ1JlY1B0cglyZXN0YXJ0X2xzbjsKIAkJTmFtZURh dGEJc2xvdG5hbWU7Ci0JCWludAkJCWFjdGl2ZV9waWQgPSAwOworCQlQcm9jTnVtYmVyCWFj dGl2ZV9wcm9jOworCQlwaWRfdAkJYWN0aXZlX3BpZCA9IDA7CiAJCVJlcGxpY2F0aW9uU2xv dEludmFsaWRhdGlvbkNhdXNlIGludmFsaWRhdGlvbl9jYXVzZSA9IFJTX0lOVkFMX05PTkU7 CiAJCVRpbWVzdGFtcFR6IG5vdyA9IDA7CiAJCWxvbmcJCXNsb3RfaWRsZV9zZWNzID0gMDsK QEAgLTIwMjcsNyArMjAzMSw3IEBAIEludmFsaWRhdGVQb3NzaWJseU9ic29sZXRlU2xvdCh1 aW50MzIgcG9zc2libGVfY2F1c2VzLAogCQl9CiAKIAkJc2xvdG5hbWUgPSBzLT5kYXRhLm5h bWU7Ci0JCWFjdGl2ZV9waWQgPSBzLT5hY3RpdmVfcGlkOworCQlhY3RpdmVfcHJvYyA9IHMt PmFjdGl2ZV9wcm9jOwogCiAJCS8qCiAJCSAqIElmIHRoZSBzbG90IGNhbiBiZSBhY3F1aXJl ZCwgZG8gc28gYW5kIG1hcmsgaXQgaW52YWxpZGF0ZWQKQEAgLTIwMzksMTAgKzIwNDMsMTAg QEAgSW52YWxpZGF0ZVBvc3NpYmx5T2Jzb2xldGVTbG90KHVpbnQzMiBwb3NzaWJsZV9jYXVz ZXMsCiAJCSAqIGlzIHRlcm1pbmF0ZWQuIFNvLCB0aGUgaW5hY3RpdmUgc2xvdCBjYW4gb25s eSBiZSBpbnZhbGlkYXRlZAogCQkgKiBpbW1lZGlhdGVseSB3aXRob3V0IGJlaW5nIHRlcm1p bmF0ZWQuCiAJCSAqLwotCQlpZiAoYWN0aXZlX3BpZCA9PSAwKQorCQlpZiAoYWN0aXZlX3By b2MgPT0gSU5WQUxJRF9QUk9DX05VTUJFUikKIAkJewogCQkJTXlSZXBsaWNhdGlvblNsb3Qg PSBzOwotCQkJcy0+YWN0aXZlX3BpZCA9IE15UHJvY1BpZDsKKwkJCXMtPmFjdGl2ZV9wcm9j ID0gTXlQcm9jTnVtYmVyOwogCQkJcy0+ZGF0YS5pbnZhbGlkYXRlZCA9IGludmFsaWRhdGlv bl9jYXVzZTsKIAogCQkJLyoKQEAgLTIwNTgsNiArMjA2MiwxMSBAQCBJbnZhbGlkYXRlUG9z c2libHlPYnNvbGV0ZVNsb3QodWludDMyIHBvc3NpYmxlX2NhdXNlcywKIAkJCS8qIExldCBj YWxsZXIga25vdyAqLwogCQkJaW52YWxpZGF0ZWQgPSB0cnVlOwogCQl9CisJCWVsc2UKKwkJ eworCQkJYWN0aXZlX3BpZCA9IEdldFBHUHJvY0J5TnVtYmVyKGFjdGl2ZV9wcm9jKS0+cGlk OworCQkJQXNzZXJ0KGFjdGl2ZV9waWQgIT0gMCk7CisJCX0KIAogCQlTcGluTG9ja1JlbGVh c2UoJnMtPm11dGV4KTsKIApAQCAtMjA3Myw3ICsyMDgyLDcgQEAgSW52YWxpZGF0ZVBvc3Np Ymx5T2Jzb2xldGVTbG90KHVpbnQzMiBwb3NzaWJsZV9jYXVzZXMsCiAJCQkJCQkJCSZzbG90 X2lkbGVfdXNlY3MpOwogCQl9CiAKLQkJaWYgKGFjdGl2ZV9waWQgIT0gMCkKKwkJaWYgKGFj dGl2ZV9wcm9jICE9IElOVkFMSURfUFJPQ19OVU1CRVIpCiAJCXsKIAkJCS8qCiAJCQkgKiBQ cmVwYXJlIHRoZSBzbGVlcCBvbiB0aGUgc2xvdCdzIGNvbmRpdGlvbiB2YXJpYWJsZSBiZWZv cmUKQEAgLTIxMDUsOSArMjExNCw5IEBAIEludmFsaWRhdGVQb3NzaWJseU9ic29sZXRlU2xv dCh1aW50MzIgcG9zc2libGVfY2F1c2VzLAogCQkJCQkJCQkJICAgc2xvdF9pZGxlX3NlY3Mp OwogCiAJCQkJaWYgKE15QmFja2VuZFR5cGUgPT0gQl9TVEFSVFVQKQotCQkJCQkodm9pZCkg U2VuZFByb2NTaWduYWwoYWN0aXZlX3BpZCwKLQkJCQkJCQkJCQkgIFBST0NTSUdfUkVDT1ZF UllfQ09ORkxJQ1RfTE9HSUNBTFNMT1QsCi0JCQkJCQkJCQkJICBJTlZBTElEX1BST0NfTlVN QkVSKTsKKwkJCQkJU2VuZFByb2NTaWduYWwoYWN0aXZlX3BpZCwKKwkJCQkJCQkJICAgUFJP Q1NJR19SRUNPVkVSWV9DT05GTElDVF9MT0dJQ0FMU0xPVCwKKwkJCQkJCQkJICAgYWN0aXZl X3Byb2MpOwogCQkJCWVsc2UKIAkJCQkJKHZvaWQpIGtpbGwoYWN0aXZlX3BpZCwgU0lHVEVS TSk7CiAKQEAgLTI4NzUsNyArMjg4NCw3IEBAIFJlc3RvcmVTbG90RnJvbURpc2soY29uc3Qg Y2hhciAqbmFtZSkKIAkJc2xvdC0+Y2FuZGlkYXRlX3Jlc3RhcnRfdmFsaWQgPSBJbnZhbGlk WExvZ1JlY1B0cjsKIAogCQlzbG90LT5pbl91c2UgPSB0cnVlOwotCQlzbG90LT5hY3RpdmVf cGlkID0gMDsKKwkJc2xvdC0+YWN0aXZlX3Byb2MgPSBJTlZBTElEX1BST0NfTlVNQkVSOwog CiAJCS8qCiAJCSAqIFNldCB0aGUgdGltZSBzaW5jZSB0aGUgc2xvdCBoYXMgYmVjb21lIGlu YWN0aXZlIGFmdGVyIGxvYWRpbmcgdGhlCkBAIC0zMTU4LDcgKzMxNjcsNyBAQCBTdGFuZGJ5 U2xvdHNIYXZlQ2F1Z2h0dXAoWExvZ1JlY1B0ciB3YWl0X2Zvcl9sc24sIGludCBlbGV2ZWwp CiAJCVNwaW5Mb2NrQWNxdWlyZSgmc2xvdC0+bXV0ZXgpOwogCQlyZXN0YXJ0X2xzbiA9IHNs b3QtPmRhdGEucmVzdGFydF9sc247CiAJCWludmFsaWRhdGVkID0gc2xvdC0+ZGF0YS5pbnZh bGlkYXRlZCAhPSBSU19JTlZBTF9OT05FOwotCQlpbmFjdGl2ZSA9IHNsb3QtPmFjdGl2ZV9w aWQgPT0gMDsKKwkJaW5hY3RpdmUgPSBzbG90LT5hY3RpdmVfcHJvYyA9PSBJTlZBTElEX1BS T0NfTlVNQkVSOwogCQlTcGluTG9ja1JlbGVhc2UoJnNsb3QtPm11dGV4KTsKIAogCQlpZiAo aW52YWxpZGF0ZWQpCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9zbG90 ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Nsb3RmdW5jcy5jCmluZGV4IDFl ZDJkODBjMmQyLi45ZjVlNGY5OThmZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vc2xvdGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vc2xvdGZ1 bmNzLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2Fs LmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vc2xvdC5oIgogI2luY2x1ZGUgInJlcGxpY2F0 aW9uL3Nsb3RzeW5jLmgiCisjaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCiAjaW5jbHVkZSAi dXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9ndWMuaCIKICNpbmNsdWRlICJ1 dGlscy9wZ19sc24uaCIKQEAgLTMwOSwxMCArMzEwLDEwIEBAIHBnX2dldF9yZXBsaWNhdGlv bl9zbG90cyhQR19GVU5DVElPTl9BUkdTKQogCQkJdmFsdWVzW2krK10gPSBPYmplY3RJZEdl dERhdHVtKHNsb3RfY29udGVudHMuZGF0YS5kYXRhYmFzZSk7CiAKIAkJdmFsdWVzW2krK10g PSBCb29sR2V0RGF0dW0oc2xvdF9jb250ZW50cy5kYXRhLnBlcnNpc3RlbmN5ID09IFJTX1RF TVBPUkFSWSk7Ci0JCXZhbHVlc1tpKytdID0gQm9vbEdldERhdHVtKHNsb3RfY29udGVudHMu YWN0aXZlX3BpZCAhPSAwKTsKKwkJdmFsdWVzW2krK10gPSBCb29sR2V0RGF0dW0oc2xvdF9j b250ZW50cy5hY3RpdmVfcHJvYyAhPSBJTlZBTElEX1BST0NfTlVNQkVSKTsKIAotCQlpZiAo c2xvdF9jb250ZW50cy5hY3RpdmVfcGlkICE9IDApCi0JCQl2YWx1ZXNbaSsrXSA9IEludDMy R2V0RGF0dW0oc2xvdF9jb250ZW50cy5hY3RpdmVfcGlkKTsKKwkJaWYgKHNsb3RfY29udGVu dHMuYWN0aXZlX3Byb2MgIT0gSU5WQUxJRF9QUk9DX05VTUJFUikKKwkJCXZhbHVlc1tpKytd ID0gSW50MzJHZXREYXR1bShHZXRQR1Byb2NCeU51bWJlcihzbG90X2NvbnRlbnRzLmFjdGl2 ZV9wcm9jKS0+cGlkKTsKIAkJZWxzZQogCQkJbnVsbHNbaSsrXSA9IHRydWU7CiAKQEAgLTM3 NywxMyArMzc4LDEzIEBAIHBnX2dldF9yZXBsaWNhdGlvbl9zbG90cyhQR19GVU5DVElPTl9B UkdTKQogCQkJCSAqLwogCQkJCWlmIChYTG9nUmVjUHRySXNWYWxpZChzbG90X2NvbnRlbnRz LmRhdGEucmVzdGFydF9sc24pKQogCQkJCXsKLQkJCQkJaW50CQkJcGlkOworCQkJCQlQcm9j TnVtYmVyCXByb2NubzsKIAogCQkJCQlTcGluTG9ja0FjcXVpcmUoJnNsb3QtPm11dGV4KTsK LQkJCQkJcGlkID0gc2xvdC0+YWN0aXZlX3BpZDsKKwkJCQkJcHJvY25vID0gc2xvdC0+YWN0 aXZlX3Byb2M7CiAJCQkJCXNsb3RfY29udGVudHMuZGF0YS5yZXN0YXJ0X2xzbiA9IHNsb3Qt PmRhdGEucmVzdGFydF9sc247CiAJCQkJCVNwaW5Mb2NrUmVsZWFzZSgmc2xvdC0+bXV0ZXgp OwotCQkJCQlpZiAocGlkICE9IDApCisJCQkJCWlmIChwcm9jbm8gIT0gSU5WQUxJRF9QUk9D X05VTUJFUikKIAkJCQkJewogCQkJCQkJdmFsdWVzW2krK10gPSBDU3RyaW5nR2V0VGV4dERh dHVtKCJ1bnJlc2VydmVkIik7CiAJCQkJCQl3YWxzdGF0ZSA9IFdBTEFWQUlMX1VOUkVTRVJW RUQ7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9zbG90LmggYi9zcmMv aW5jbHVkZS9yZXBsaWNhdGlvbi9zbG90LmgKaW5kZXggZjQ2NWU0MzBjYzYuLjcyZjhiZTYy OWYzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9zbG90LmgKKysrIGIv c3JjL2luY2x1ZGUvcmVwbGljYXRpb24vc2xvdC5oCkBAIC0xODUsOCArMTg1LDExIEBAIHR5 cGVkZWYgc3RydWN0IFJlcGxpY2F0aW9uU2xvdAogCS8qIGlzIHRoaXMgc2xvdCBkZWZpbmVk ICovCiAJYm9vbAkJaW5fdXNlOwogCi0JLyogV2hvIGlzIHN0cmVhbWluZyBvdXQgY2hhbmdl cyBmb3IgdGhpcyBzbG90PyAwIGluIHVudXNlZCBzbG90cy4gKi8KLQlwaWRfdAkJYWN0aXZl X3BpZDsKKwkvKgorCSAqIFdobyBpcyBzdHJlYW1pbmcgb3V0IGNoYW5nZXMgZm9yIHRoaXMg c2xvdD8gSU5WQUxJRF9QUk9DX05VTUJFUiBpbgorCSAqIHVudXNlZCBzbG90cy4KKwkgKi8K KwlQcm9jTnVtYmVyCWFjdGl2ZV9wcm9jOwogCiAJLyogYW55IG91dHN0YW5kaW5nIG1vZGlm aWNhdGlvbnM/ICovCiAJYm9vbAkJanVzdF9kaXJ0aWVkOwotLSAKMi40Ny4zCgo= --------------bKtygjyKfjKbO6KbJdMaMR2R Content-Type: text/x-patch; charset=UTF-8; name="v8-0004-Separate-RecoveryConflictReasons-from-procsignals.patch" Content-Disposition: attachment; filename*0="v8-0004-Separate-RecoveryConflictReasons-from-procsignals.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA1NmNlY2U2ZWQ5ZTYwYjk5MTE1ZDBhZmMyYzI3MWIwZmNiNDZlYTA0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IEZyaSwgMjMgSmFuIDIwMjYgMDA6NDk6MTEgKzAyMDAK U3ViamVjdDogW1BBVENIIHY4IDQvOF0gU2VwYXJhdGUgUmVjb3ZlcnlDb25mbGljdFJlYXNv bnMgZnJvbSBwcm9jc2lnbmFscwoKU2hhcmUgdGhlIHNhbWUgUFJPQ1NJR19SRUNPVkVSWV9D T05GTElDVCBmbGFnIGZvciBhbGwgcmVjb3ZlcnkKY29uZmxpY3QgcmVhc29ucy4gVG8gZGlz dGluZ3Vpc2gsIGhhdmUgYSBiaXRtYXNrIGluIFBHUFJPQyB0byBpbmRpY2F0ZQp0aGUgcmVh c29uKHMpLgotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2RiY29tbWFuZHMuYyAgICAgICAg ICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlc3BhY2UuYyAgICAgICAg ICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbGN0 bC5jIHwgICAxICsKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Nsb3QuYyAgICAgICAgICAg ICAgIHwgICA2ICstCiBzcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYyAgICAg ICAgICB8ICAgNSArLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5LmMgICAg ICAgICAgfCAxMzYgKysrKysrKysrKysrKy0tLS0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9p cGMvcHJvY3NpZ25hbC5jICAgICAgICAgfCAgMjIgKy0tCiBzcmMvYmFja2VuZC9zdG9yYWdl L2lwYy9zdGFuZGJ5LmMgICAgICAgICAgICB8ICA2MSArKysrLS0tLS0KIHNyYy9iYWNrZW5k L3N0b3JhZ2UvbG1nci9wcm9jLmMgICAgICAgICAgICAgIHwgICA1ICstCiBzcmMvYmFja2Vu ZC90Y29wL3Bvc3RncmVzLmMgICAgICAgICAgICAgICAgICB8IDEwOSArKysrKysrKy0tLS0t LS0KIHNyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdF9kYXRhYmFzZS5jIHwgIDE4 ICstLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L21jeHRmdW5jcy5jICAgICAgICAgICAgfCAg IDEgKwogc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jLmggICAgICAgICAgICAgICAgICAgfCAg IDkgKysKIHNyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY2FycmF5LmggICAgICAgICAgICAgIHwg ICA3ICstCiBzcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaCAgICAgICAgICAgICB8 ICAxNiArLS0KIHNyYy9pbmNsdWRlL3N0b3JhZ2Uvc3RhbmRieS5oICAgICAgICAgICAgICAg IHwgIDM0ICsrKystCiBzcmMvaW5jbHVkZS90Y29wL3Rjb3Bwcm90LmggICAgICAgICAgICAg ICAgICB8ICAgMiArLQogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAg ICAgICAgfCAgIDEgKwogMTggZmlsZXMgY2hhbmdlZCwgMjUwIGluc2VydGlvbnMoKyksIDE4 NSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9kYmNv bW1hbmRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kYmNvbW1hbmRzLmMKaW5kZXggODc5 NDkwNTRmMjYuLjMzMzExNzYwZGY3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5k cy9kYmNvbW1hbmRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGJjb21tYW5kcy5j CkBAIC02MCw2ICs2MCw3IEBACiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9tZC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY2FycmF5LmgiCisjaW5j bHVkZSAic3RvcmFnZS9wcm9jc2lnbmFsLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zbWdyLmgi CiAjaW5jbHVkZSAidXRpbHMvYWNsLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlc3BhY2UuYyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL3RhYmxlc3BhY2UuYwppbmRleCAwYjA2NDg5MTkzMi4uMzUxMWE0 ZWMwZmQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlc3BhY2UuYwor KysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZXNwYWNlLmMKQEAgLTcwLDYgKzcwLDcg QEAKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL2Jnd3Jp dGVyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9mZC5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcHJv Y3NpZ25hbC5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc3RhbmRieS5oIgogI2luY2x1ZGUgInV0 aWxzL2FjbC5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWxjdGwuYyBiL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbGN0bC5jCmluZGV4IDlmNzg3ZjNkYzUx Li40ZTI5Mjk1MTIwMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9sb2dpY2FsY3RsLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC9sb2dpY2FsY3RsLmMKQEAgLTcxLDYgKzcxLDcgQEAKICNpbmNsdWRlICJzdG9yYWdlL2xt Z3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKICNpbmNsdWRlICJzdG9yYWdlL3By b2NhcnJheS5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcHJvY3NpZ25hbC5oIgogI2luY2x1ZGUg InV0aWxzL2luamVjdGlvbl9wb2ludC5oIgogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vc2xvdC5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vc2xvdC5j CmluZGV4IDVjNmY3MDRlMDI5Li4xNDM1NjlkZmZlMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vc2xvdC5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Ns b3QuYwpAQCAtMjExNCw5ICsyMTE0LDkgQEAgSW52YWxpZGF0ZVBvc3NpYmx5T2Jzb2xldGVT bG90KHVpbnQzMiBwb3NzaWJsZV9jYXVzZXMsCiAJCQkJCQkJCQkgICBzbG90X2lkbGVfc2Vj cyk7CiAKIAkJCQlpZiAoTXlCYWNrZW5kVHlwZSA9PSBCX1NUQVJUVVApCi0JCQkJCVNlbmRQ cm9jU2lnbmFsKGFjdGl2ZV9waWQsCi0JCQkJCQkJCSAgIFBST0NTSUdfUkVDT1ZFUllfQ09O RkxJQ1RfTE9HSUNBTFNMT1QsCi0JCQkJCQkJCSAgIGFjdGl2ZV9wcm9jKTsKKwkJCQkJKHZv aWQpIFNpZ25hbFJlY292ZXJ5Q29uZmxpY3QoR2V0UEdQcm9jQnlOdW1iZXIoYWN0aXZlX3By b2MpLAorCQkJCQkJCQkJCQkJICBhY3RpdmVfcGlkLAorCQkJCQkJCQkJCQkJICBSRUNPVkVS WV9DT05GTElDVF9MT0dJQ0FMU0xPVCk7CiAJCQkJZWxzZQogCQkJCQkodm9pZCkga2lsbChh Y3RpdmVfcGlkLCBTSUdURVJNKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFn ZS9idWZmZXIvYnVmbWdyLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3Iu YwppbmRleCA2ZjkzNTY0OGFlOS4uM2JkODYyMjNhYmQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YnVmZmVyL2J1Zm1nci5jCkBAIC01OSw2ICs1OSw3IEBACiAjaW5jbHVkZSAic3RvcmFnZS9s bWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9w cm9jbGlzdC5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcHJvY3NpZ25hbC5oIgogI2luY2x1ZGUg InN0b3JhZ2UvcmVhZF9zdHJlYW0uaCIKICNpbmNsdWRlICJzdG9yYWdlL3NtZ3IuaCIKICNp bmNsdWRlICJzdG9yYWdlL3N0YW5kYnkuaCIKQEAgLTY1NjAsNyArNjU2MSw3IEBAIExvY2tC dWZmZXJGb3JDbGVhbnVwKEJ1ZmZlciBidWZmZXIpCiAJCQkgKiBkZWFkbG9ja190aW1lb3V0 IGZvciBpdC4KIAkJCSAqLwogCQkJaWYgKGxvZ2dlZF9yZWNvdmVyeV9jb25mbGljdCkKLQkJ CQlMb2dSZWNvdmVyeUNvbmZsaWN0KFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfQlVGRkVS UElOLAorCQkJCUxvZ1JlY292ZXJ5Q29uZmxpY3QoUkVDT1ZFUllfQ09ORkxJQ1RfQlVGRkVS UElOLAogCQkJCQkJCQkJd2FpdFN0YXJ0LCBHZXRDdXJyZW50VGltZXN0YW1wKCksCiAJCQkJ CQkJCQlOVUxMLCBmYWxzZSk7CiAKQEAgLTY2MTEsNyArNjYxMiw3IEBAIExvY2tCdWZmZXJG b3JDbGVhbnVwKEJ1ZmZlciBidWZmZXIpCiAJCQkJaWYgKFRpbWVzdGFtcERpZmZlcmVuY2VF eGNlZWRzKHdhaXRTdGFydCwgbm93LAogCQkJCQkJCQkJCQkgICBEZWFkbG9ja1RpbWVvdXQp KQogCQkJCXsKLQkJCQkJTG9nUmVjb3ZlcnlDb25mbGljdChQUk9DU0lHX1JFQ09WRVJZX0NP TkZMSUNUX0JVRkZFUlBJTiwKKwkJCQkJTG9nUmVjb3ZlcnlDb25mbGljdChSRUNPVkVSWV9D T05GTElDVF9CVUZGRVJQSU4sCiAJCQkJCQkJCQkJd2FpdFN0YXJ0LCBub3csIE5VTEwsIHRy dWUpOwogCQkJCQlsb2dnZWRfcmVjb3ZlcnlfY29uZmxpY3QgPSB0cnVlOwogCQkJCX0KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NhcnJheS5jIGIvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5LmMKaW5kZXggNzQ4YzA2YjUxY2IuLjQyM2Nh M2FlYWExIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jYXJyYXku YworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jYXJyYXkuYwpAQCAtNjAsNiAr NjAsNyBAQAogI2luY2x1ZGUgInBvcnQvcGdfbGZpbmQuaCIKICNpbmNsdWRlICJzdG9yYWdl L3Byb2MuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2NhcnJheS5oIgorI2luY2x1ZGUgInN0 b3JhZ2UvcHJvY3NpZ25hbC5oIgogI2luY2x1ZGUgInV0aWxzL2FjbC5oIgogI2luY2x1ZGUg InV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvaW5qZWN0aW9uX3BvaW50Lmgi CkBAIC03MDgsNiArNzA5LDggQEAgUHJvY0FycmF5RW5kVHJhbnNhY3Rpb24oUEdQUk9DICpw cm9jLCBUcmFuc2FjdGlvbklkIGxhdGVzdFhpZCkKIAkJLyogYmUgc3VyZSB0aGlzIGlzIGNs ZWFyZWQgaW4gYWJvcnQgKi8KIAkJcHJvYy0+ZGVsYXlDaGtwdEZsYWdzID0gMDsKIAorCQlw Z19hdG9taWNfd3JpdGVfdTMyKCZwcm9jLT5wZW5kaW5nUmVjb3ZlcnlDb25mbGljdHMsIDAp OworCiAJCS8qIG11c3QgYmUgY2xlYXJlZCB3aXRoIHhpZC94bWluOiAqLwogCQkvKiBhdm9p ZCB1bm5lY2Vzc2FyaWx5IGRpcnR5aW5nIHNoYXJlZCBjYWNoZWxpbmVzICovCiAJCWlmIChw cm9jLT5zdGF0dXNGbGFncyAmIFBST0NfVkFDVVVNX1NUQVRFX01BU0spCkBAIC03NDgsNiAr NzUxLDggQEAgUHJvY0FycmF5RW5kVHJhbnNhY3Rpb25JbnRlcm5hbChQR1BST0MgKnByb2Ms IFRyYW5zYWN0aW9uSWQgbGF0ZXN0WGlkKQogCS8qIGJlIHN1cmUgdGhpcyBpcyBjbGVhcmVk IGluIGFib3J0ICovCiAJcHJvYy0+ZGVsYXlDaGtwdEZsYWdzID0gMDsKIAorCXBnX2F0b21p Y193cml0ZV91MzIoJnByb2MtPnBlbmRpbmdSZWNvdmVyeUNvbmZsaWN0cywgMCk7CisKIAkv KiBtdXN0IGJlIGNsZWFyZWQgd2l0aCB4aWQveG1pbjogKi8KIAkvKiBhdm9pZCB1bm5lY2Vz c2FyaWx5IGRpcnR5aW5nIHNoYXJlZCBjYWNoZWxpbmVzICovCiAJaWYgKHByb2MtPnN0YXR1 c0ZsYWdzICYgUFJPQ19WQUNVVU1fU1RBVEVfTUFTSykKQEAgLTkyOSw2ICs5MzQsNyBAQCBQ cm9jQXJyYXlDbGVhclRyYW5zYWN0aW9uKFBHUFJPQyAqcHJvYykKIAogCXByb2MtPnZ4aWQu bHhpZCA9IEludmFsaWRMb2NhbFRyYW5zYWN0aW9uSWQ7CiAJcHJvYy0+eG1pbiA9IEludmFs aWRUcmFuc2FjdGlvbklkOworCXBnX2F0b21pY193cml0ZV91MzIoJnByb2MtPnBlbmRpbmdS ZWNvdmVyeUNvbmZsaWN0cywgMCk7CiAKIAlBc3NlcnQoIShwcm9jLT5zdGF0dXNGbGFncyAm IFBST0NfVkFDVVVNX1NUQVRFX01BU0spKTsKIAlBc3NlcnQoIXByb2MtPmRlbGF5Q2hrcHRG bGFncyk7CkBAIC0zNDQwLDEyICszNDQ2LDQ2IEBAIEdldENvbmZsaWN0aW5nVmlydHVhbFhJ RHMoVHJhbnNhY3Rpb25JZCBsaW1pdFhtaW4sIE9pZCBkYk9pZCkKIH0KIAogLyoKLSAqIFNp Z25hbFZpcnR1YWxUcmFuc2FjdGlvbiAtIHVzZWQgaW4gcmVjb3ZlcnkgY29uZmxpY3QgcHJv Y2Vzc2luZworICogU2lnbmFsUmVjb3ZlcnlDb25mbGljdCAtLSBzaWduYWwgdGhhdCBhIHBy b2Nlc3MgaXMgYmxvY2tpbmcgcmVjb3ZlcnkKICAqCi0gKiBSZXR1cm5zIHBpZCBvZiB0aGUg cHJvY2VzcyBzaWduYWxlZCwgb3IgMCBpZiBub3QgZm91bmQuCisgKiBUaGUgJ3BpZCcgaXMg cmVkdW5kYW50IHdpdGggJ3Byb2MnLCBidXQgaXQgYWN0cyBhcyBhIGNyb3NzLWNoZWNrIHRv CisgKiBkZXRlY3QgcHJvY2VzcyBoYWQgZXhpdGVkIGFuZCB0aGUgUEdQUk9DIGVudHJ5IHdh cyByZXVzZWQgZm9yIGEgZGlmZmVyZW50CisgKiBwcm9jZXNzLgorICoKKyAqIFJldHVybnMg dHJ1ZSBpZiB0aGUgcHJvY2VzcyB3YXMgc2lnbmFsZWQsIG9yIGZhbHNlIGlmIG5vdCBmb3Vu ZC4KICAqLwotcGlkX3QKLVNpZ25hbFZpcnR1YWxUcmFuc2FjdGlvbihWaXJ0dWFsVHJhbnNh Y3Rpb25JZCB2eGlkLCBQcm9jU2lnbmFsUmVhc29uIHNpZ21vZGUpCitib29sCitTaWduYWxS ZWNvdmVyeUNvbmZsaWN0KFBHUFJPQyAqcHJvYywgcGlkX3QgcGlkLCBSZWNvdmVyeUNvbmZs aWN0UmVhc29uIHJlYXNvbikKK3sKKwlib29sCQlmb3VuZCA9IGZhbHNlOworCisJTFdMb2Nr QWNxdWlyZShQcm9jQXJyYXlMb2NrLCBMV19TSEFSRUQpOworCisJLyoKKwkgKiBLaWxsIHRo ZSBwaWQgaWYgaXQncyBzdGlsbCBoZXJlLiBJZiBub3QsIHRoYXQncyB3aGF0IHdlIHdhbnRl ZCBzbworCSAqIGlnbm9yZSBhbnkgZXJyb3JzLgorCSAqLworCWlmIChwcm9jLT5waWQgPT0g cGlkKQorCXsKKwkJKHZvaWQpIHBnX2F0b21pY19mZXRjaF9vcl91MzIoJnByb2MtPnBlbmRp bmdSZWNvdmVyeUNvbmZsaWN0cywgKDEgPDwgcmVhc29uKSk7CisKKwkJLyogd2FrZSB1cCB0 aGUgcHJvY2VzcyAqLworCQkodm9pZCkgU2VuZFByb2NTaWduYWwocGlkLCBQUk9DU0lHX1JF Q09WRVJZX0NPTkZMSUNULCBHZXROdW1iZXJGcm9tUEdQcm9jKHByb2MpKTsKKwkJZm91bmQg PSB0cnVlOworCX0KKworCUxXTG9ja1JlbGVhc2UoUHJvY0FycmF5TG9jayk7CisKKwlyZXR1 cm4gZm91bmQ7Cit9CisKKy8qCisgKiBTaWduYWxSZWNvdmVyeUNvbmZsaWN0V2l0aFZpcnR1 YWxYSUQgLS0gc2lnbmFsIHRoYXQgYSBWWElEIGlzIGJsb2NraW5nIHJlY292ZXJ5CisgKgor ICogTGlrZSBTaWduYWxSZWNvdmVyeUNvbmZsaWN0LCBidXQgdGhlIHRhcmdldCBpcyBpZGVu dGlmaWVkIGJ5IFZYSUQKKyAqLworYm9vbAorU2lnbmFsUmVjb3ZlcnlDb25mbGljdFdpdGhW aXJ0dWFsWElEKFZpcnR1YWxUcmFuc2FjdGlvbklkIHZ4aWQsIFJlY292ZXJ5Q29uZmxpY3RS ZWFzb24gcmVhc29uKQogewogCVByb2NBcnJheVN0cnVjdCAqYXJyYXlQID0gcHJvY0FycmF5 OwogCWludAkJCWluZGV4OwpAQCAtMzQ2NywxMSArMzUwNywxMyBAQCBTaWduYWxWaXJ0dWFs VHJhbnNhY3Rpb24oVmlydHVhbFRyYW5zYWN0aW9uSWQgdnhpZCwgUHJvY1NpZ25hbFJlYXNv biBzaWdtb2RlKQogCQkJcGlkID0gcHJvYy0+cGlkOwogCQkJaWYgKHBpZCAhPSAwKQogCQkJ eworCQkJCSh2b2lkKSBwZ19hdG9taWNfZmV0Y2hfb3JfdTMyKCZwcm9jLT5wZW5kaW5nUmVj b3ZlcnlDb25mbGljdHMsICgxIDw8IHJlYXNvbikpOworCiAJCQkJLyoKIAkJCQkgKiBLaWxs IHRoZSBwaWQgaWYgaXQncyBzdGlsbCBoZXJlLiBJZiBub3QsIHRoYXQncyB3aGF0IHdlCiAJ CQkJICogd2FudGVkIHNvIGlnbm9yZSBhbnkgZXJyb3JzLgogCQkJCSAqLwotCQkJCSh2b2lk KSBTZW5kUHJvY1NpZ25hbChwaWQsIHNpZ21vZGUsIHZ4aWQucHJvY051bWJlcik7CisJCQkJ KHZvaWQpIFNlbmRQcm9jU2lnbmFsKHBpZCwgUFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVCwg dnhpZC5wcm9jTnVtYmVyKTsKIAkJCX0KIAkJCWJyZWFrOwogCQl9CkBAIC0zNDc5LDcgKzM1 MjEsNTAgQEAgU2lnbmFsVmlydHVhbFRyYW5zYWN0aW9uKFZpcnR1YWxUcmFuc2FjdGlvbklk IHZ4aWQsIFByb2NTaWduYWxSZWFzb24gc2lnbW9kZSkKIAogCUxXTG9ja1JlbGVhc2UoUHJv Y0FycmF5TG9jayk7CiAKLQlyZXR1cm4gcGlkOworCXJldHVybiBwaWQgIT0gMDsKK30KKwor LyoKKyAqIFNpZ25hbFJlY292ZXJ5Q29uZmxpY3RXaXRoRGF0YWJhc2UgLS0tIHNpZ25hbCBh bGwgYmFja2VuZHMgc3BlY2lmaWVkIGRhdGFiYXNlCisgKgorICogTGlrZSBTaWduYWxSZWNv dmVyeUNvbmZsaWN0LCBidXQgc2lnbmFscyBhbGwgYmFja2VuZHMgdXNpbmcgdGhlIGRhdGFi YXNlLgorICovCit2b2lkCitTaWduYWxSZWNvdmVyeUNvbmZsaWN0V2l0aERhdGFiYXNlKE9p ZCBkYXRhYmFzZWlkLCBSZWNvdmVyeUNvbmZsaWN0UmVhc29uIHJlYXNvbikKK3sKKwlQcm9j QXJyYXlTdHJ1Y3QgKmFycmF5UCA9IHByb2NBcnJheTsKKwlpbnQJCQlpbmRleDsKKworCS8q IHRlbGwgYWxsIGJhY2tlbmRzIHRvIGRpZSAqLworCUxXTG9ja0FjcXVpcmUoUHJvY0FycmF5 TG9jaywgTFdfRVhDTFVTSVZFKTsKKworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGFycmF5 UC0+bnVtUHJvY3M7IGluZGV4KyspCisJeworCQlpbnQJCQlwZ3Byb2NubyA9IGFycmF5UC0+ cGdwcm9jbm9zW2luZGV4XTsKKwkJUEdQUk9DCSAgICpwcm9jID0gJmFsbFByb2NzW3BncHJv Y25vXTsKKworCQlpZiAoZGF0YWJhc2VpZCA9PSBJbnZhbGlkT2lkIHx8IHByb2MtPmRhdGFi YXNlSWQgPT0gZGF0YWJhc2VpZCkKKwkJeworCQkJVmlydHVhbFRyYW5zYWN0aW9uSWQgcHJv Y3Z4aWQ7CisJCQlwaWRfdAkJcGlkOworCisJCQlHRVRfVlhJRF9GUk9NX1BHUFJPQyhwcm9j dnhpZCwgKnByb2MpOworCisJCQlwaWQgPSBwcm9jLT5waWQ7CisJCQlpZiAocGlkICE9IDAp CisJCQl7CisJCQkJKHZvaWQpIHBnX2F0b21pY19mZXRjaF9vcl91MzIoJnByb2MtPnBlbmRp bmdSZWNvdmVyeUNvbmZsaWN0cywgKDEgPDwgcmVhc29uKSk7CisKKwkJCQkvKgorCQkJCSAq IEtpbGwgdGhlIHBpZCBpZiBpdCdzIHN0aWxsIGhlcmUuIElmIG5vdCwgdGhhdCdzIHdoYXQg d2UKKwkJCQkgKiB3YW50ZWQgc28gaWdub3JlIGFueSBlcnJvcnMuCisJCQkJICovCisJCQkJ KHZvaWQpIFNlbmRQcm9jU2lnbmFsKHBpZCwgUFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVCwg cHJvY3Z4aWQucHJvY051bWJlcik7CisJCQl9CisJCX0KKwl9CisKKwlMV0xvY2tSZWxlYXNl KFByb2NBcnJheUxvY2spOwogfQogCiAvKgpAQCAtMzYwMSw0NSArMzY4Niw2IEBAIENvdW50 REJDb25uZWN0aW9ucyhPaWQgZGF0YWJhc2VpZCkKIAlyZXR1cm4gY291bnQ7CiB9CiAKLS8q Ci0gKiBDYW5jZWxEQkJhY2tlbmRzIC0tLSBjYW5jZWwgYmFja2VuZHMgdGhhdCBhcmUgdXNp bmcgc3BlY2lmaWVkIGRhdGFiYXNlCi0gKi8KLXZvaWQKLUNhbmNlbERCQmFja2VuZHMoT2lk IGRhdGFiYXNlaWQsIFByb2NTaWduYWxSZWFzb24gc2lnbW9kZSkKLXsKLQlQcm9jQXJyYXlT dHJ1Y3QgKmFycmF5UCA9IHByb2NBcnJheTsKLQlpbnQJCQlpbmRleDsKLQotCS8qIHRlbGwg YWxsIGJhY2tlbmRzIHRvIGRpZSAqLwotCUxXTG9ja0FjcXVpcmUoUHJvY0FycmF5TG9jaywg TFdfRVhDTFVTSVZFKTsKLQotCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGFycmF5UC0+bnVt UHJvY3M7IGluZGV4KyspCi0JewotCQlpbnQJCQlwZ3Byb2NubyA9IGFycmF5UC0+cGdwcm9j bm9zW2luZGV4XTsKLQkJUEdQUk9DCSAgICpwcm9jID0gJmFsbFByb2NzW3BncHJvY25vXTsK LQotCQlpZiAoZGF0YWJhc2VpZCA9PSBJbnZhbGlkT2lkIHx8IHByb2MtPmRhdGFiYXNlSWQg PT0gZGF0YWJhc2VpZCkKLQkJewotCQkJVmlydHVhbFRyYW5zYWN0aW9uSWQgcHJvY3Z4aWQ7 Ci0JCQlwaWRfdAkJcGlkOwotCi0JCQlHRVRfVlhJRF9GUk9NX1BHUFJPQyhwcm9jdnhpZCwg KnByb2MpOwotCi0JCQlwaWQgPSBwcm9jLT5waWQ7Ci0JCQlpZiAocGlkICE9IDApCi0JCQl7 Ci0JCQkJLyoKLQkJCQkgKiBLaWxsIHRoZSBwaWQgaWYgaXQncyBzdGlsbCBoZXJlLiBJZiBu b3QsIHRoYXQncyB3aGF0IHdlCi0JCQkJICogd2FudGVkIHNvIGlnbm9yZSBhbnkgZXJyb3Jz LgotCQkJCSAqLwotCQkJCSh2b2lkKSBTZW5kUHJvY1NpZ25hbChwaWQsIHNpZ21vZGUsIHBy b2N2eGlkLnByb2NOdW1iZXIpOwotCQkJfQotCQl9Ci0JfQotCi0JTFdMb2NrUmVsZWFzZShQ cm9jQXJyYXlMb2NrKTsKLX0KLQogLyoKICAqIENvdW50VXNlckJhY2tlbmRzIC0tLSBjb3Vu dCBiYWNrZW5kcyB0aGF0IGFyZSB1c2VkIGJ5IHNwZWNpZmllZCB1c2VyCiAgKiAob25seSBy ZWd1bGFyIGJhY2tlbmRzLCBub3QgYW55IHR5cGUgb2YgYmFja2dyb3VuZCB3b3JrZXIpCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMgYi9zcmMv YmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMKaW5kZXggOGU1NjkyMmRjZWEuLjVk MzM1NTk5MjZhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jc2ln bmFsLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jCkBAIC02 OTcsMjYgKzY5Nyw4IEBAIHByb2NzaWduYWxfc2lndXNyMV9oYW5kbGVyKFNJR05BTF9BUkdT KQogCWlmIChDaGVja1Byb2NTaWduYWwoUFJPQ1NJR19QQVJBTExFTF9BUFBMWV9NRVNTQUdF KSkKIAkJSGFuZGxlUGFyYWxsZWxBcHBseU1lc3NhZ2VJbnRlcnJ1cHQoKTsKIAotCWlmIChD aGVja1Byb2NTaWduYWwoUFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVF9EQVRBQkFTRSkpCi0J CUhhbmRsZVJlY292ZXJ5Q29uZmxpY3RJbnRlcnJ1cHQoUFJPQ1NJR19SRUNPVkVSWV9DT05G TElDVF9EQVRBQkFTRSk7Ci0KLQlpZiAoQ2hlY2tQcm9jU2lnbmFsKFBST0NTSUdfUkVDT1ZF UllfQ09ORkxJQ1RfVEFCTEVTUEFDRSkpCi0JCUhhbmRsZVJlY292ZXJ5Q29uZmxpY3RJbnRl cnJ1cHQoUFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVF9UQUJMRVNQQUNFKTsKLQotCWlmIChD aGVja1Byb2NTaWduYWwoUFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVF9MT0NLKSkKLQkJSGFu ZGxlUmVjb3ZlcnlDb25mbGljdEludGVycnVwdChQUk9DU0lHX1JFQ09WRVJZX0NPTkZMSUNU X0xPQ0spOwotCi0JaWYgKENoZWNrUHJvY1NpZ25hbChQUk9DU0lHX1JFQ09WRVJZX0NPTkZM SUNUX1NOQVBTSE9UKSkKLQkJSGFuZGxlUmVjb3ZlcnlDb25mbGljdEludGVycnVwdChQUk9D U0lHX1JFQ09WRVJZX0NPTkZMSUNUX1NOQVBTSE9UKTsKLQotCWlmIChDaGVja1Byb2NTaWdu YWwoUFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVF9MT0dJQ0FMU0xPVCkpCi0JCUhhbmRsZVJl Y292ZXJ5Q29uZmxpY3RJbnRlcnJ1cHQoUFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVF9MT0dJ Q0FMU0xPVCk7Ci0KLQlpZiAoQ2hlY2tQcm9jU2lnbmFsKFBST0NTSUdfUkVDT1ZFUllfQ09O RkxJQ1RfU1RBUlRVUF9ERUFETE9DSykpCi0JCUhhbmRsZVJlY292ZXJ5Q29uZmxpY3RJbnRl cnJ1cHQoUFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVF9TVEFSVFVQX0RFQURMT0NLKTsKLQot CWlmIChDaGVja1Byb2NTaWduYWwoUFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVF9CVUZGRVJQ SU4pKQotCQlIYW5kbGVSZWNvdmVyeUNvbmZsaWN0SW50ZXJydXB0KFBST0NTSUdfUkVDT1ZF UllfQ09ORkxJQ1RfQlVGRkVSUElOKTsKKwlpZiAoQ2hlY2tQcm9jU2lnbmFsKFBST0NTSUdf UkVDT1ZFUllfQ09ORkxJQ1QpKQorCQlIYW5kbGVSZWNvdmVyeUNvbmZsaWN0SW50ZXJydXB0 KCk7CiAKIAlTZXRMYXRjaChNeUxhdGNoKTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3N0b3JhZ2UvaXBjL3N0YW5kYnkuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3N0YW5k YnkuYwppbmRleCA2ZGI4MDM0NzZjNC4uMDg1MTc4OWU4YjYgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3N0b3JhZ2UvaXBjL3N0YW5kYnkuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdl L2lwYy9zdGFuZGJ5LmMKQEAgLTcxLDEzICs3MSwxMyBAQCBzdGF0aWMgdm9sYXRpbGUgc2ln X2F0b21pY190IGdvdF9zdGFuZGJ5X2RlbGF5X3RpbWVvdXQgPSBmYWxzZTsKIHN0YXRpYyB2 b2xhdGlsZSBzaWdfYXRvbWljX3QgZ290X3N0YW5kYnlfbG9ja190aW1lb3V0ID0gZmFsc2U7 CiAKIHN0YXRpYyB2b2lkIFJlc29sdmVSZWNvdmVyeUNvbmZsaWN0V2l0aFZpcnR1YWxYSURz KFZpcnR1YWxUcmFuc2FjdGlvbklkICp3YWl0bGlzdCwKLQkJCQkJCQkJCQkJCSAgIFByb2NT aWduYWxSZWFzb24gcmVhc29uLAorCQkJCQkJCQkJCQkJICAgUmVjb3ZlcnlDb25mbGljdFJl YXNvbiByZWFzb24sCiAJCQkJCQkJCQkJCQkgICB1aW50MzIgd2FpdF9ldmVudF9pbmZvLAog CQkJCQkJCQkJCQkJICAgYm9vbCByZXBvcnRfd2FpdGluZyk7Ci1zdGF0aWMgdm9pZCBTZW5k UmVjb3ZlcnlDb25mbGljdFdpdGhCdWZmZXJQaW4oUHJvY1NpZ25hbFJlYXNvbiByZWFzb24p Oworc3RhdGljIHZvaWQgU2VuZFJlY292ZXJ5Q29uZmxpY3RXaXRoQnVmZmVyUGluKFJlY292 ZXJ5Q29uZmxpY3RSZWFzb24gcmVhc29uKTsKIHN0YXRpYyBYTG9nUmVjUHRyIExvZ0N1cnJl bnRSdW5uaW5nWGFjdHMoUnVubmluZ1RyYW5zYWN0aW9ucyBDdXJyUnVubmluZ1hhY3RzKTsK IHN0YXRpYyB2b2lkIExvZ0FjY2Vzc0V4Y2x1c2l2ZUxvY2tzKGludCBubG9ja3MsIHhsX3N0 YW5kYnlfbG9jayAqbG9ja3MpOwotc3RhdGljIGNvbnN0IGNoYXIgKmdldF9yZWNvdmVyeV9j b25mbGljdF9kZXNjKFByb2NTaWduYWxSZWFzb24gcmVhc29uKTsKK3N0YXRpYyBjb25zdCBj aGFyICpnZXRfcmVjb3ZlcnlfY29uZmxpY3RfZGVzYyhSZWNvdmVyeUNvbmZsaWN0UmVhc29u IHJlYXNvbik7CiAKIC8qCiAgKiBJbml0UmVjb3ZlcnlUcmFuc2FjdGlvbkVudmlyb25tZW50 CkBAIC0yNzEsNyArMjcxLDcgQEAgV2FpdEV4Y2VlZHNNYXhTdGFuZGJ5RGVsYXkodWludDMy IHdhaXRfZXZlbnRfaW5mbykKICAqIHRvIGJlIHJlc29sdmVkIG9yIG5vdC4KICAqLwogdm9p ZAotTG9nUmVjb3ZlcnlDb25mbGljdChQcm9jU2lnbmFsUmVhc29uIHJlYXNvbiwgVGltZXN0 YW1wVHogd2FpdF9zdGFydCwKK0xvZ1JlY292ZXJ5Q29uZmxpY3QoUmVjb3ZlcnlDb25mbGlj dFJlYXNvbiByZWFzb24sIFRpbWVzdGFtcFR6IHdhaXRfc3RhcnQsCiAJCQkJCVRpbWVzdGFt cFR6IG5vdywgVmlydHVhbFRyYW5zYWN0aW9uSWQgKndhaXRfbGlzdCwKIAkJCQkJYm9vbCBz dGlsbF93YWl0aW5nKQogewpAQCAtMzU4LDcgKzM1OCw4IEBAIExvZ1JlY292ZXJ5Q29uZmxp Y3QoUHJvY1NpZ25hbFJlYXNvbiByZWFzb24sIFRpbWVzdGFtcFR6IHdhaXRfc3RhcnQsCiAg Ki8KIHN0YXRpYyB2b2lkCiBSZXNvbHZlUmVjb3ZlcnlDb25mbGljdFdpdGhWaXJ0dWFsWElE cyhWaXJ0dWFsVHJhbnNhY3Rpb25JZCAqd2FpdGxpc3QsCi0JCQkJCQkJCQkgICBQcm9jU2ln bmFsUmVhc29uIHJlYXNvbiwgdWludDMyIHdhaXRfZXZlbnRfaW5mbywKKwkJCQkJCQkJCSAg IFJlY292ZXJ5Q29uZmxpY3RSZWFzb24gcmVhc29uLAorCQkJCQkJCQkJICAgdWludDMyIHdh aXRfZXZlbnRfaW5mbywKIAkJCQkJCQkJCSAgIGJvb2wgcmVwb3J0X3dhaXRpbmcpCiB7CiAJ VGltZXN0YW1wVHogd2FpdFN0YXJ0ID0gMDsKQEAgLTM4NCwxOSArMzg1LDE5IEBAIFJlc29s dmVSZWNvdmVyeUNvbmZsaWN0V2l0aFZpcnR1YWxYSURzKFZpcnR1YWxUcmFuc2FjdGlvbklk ICp3YWl0bGlzdCwKIAkJCS8qIElzIGl0IHRpbWUgdG8ga2lsbCBpdD8gKi8KIAkJCWlmIChX YWl0RXhjZWVkc01heFN0YW5kYnlEZWxheSh3YWl0X2V2ZW50X2luZm8pKQogCQkJewotCQkJ CXBpZF90CQlwaWQ7CisJCQkJYm9vbAkJc2lnbmFsZWQ7CiAKIAkJCQkvKgogCQkJCSAqIE5v dyBmaW5kIG91dCB3aG8gdG8gdGhyb3cgb3V0IG9mIHRoZSBiYWxsb29uLgogCQkJCSAqLwog CQkJCUFzc2VydChWaXJ0dWFsVHJhbnNhY3Rpb25JZElzVmFsaWQoKndhaXRsaXN0KSk7Ci0J CQkJcGlkID0gU2lnbmFsVmlydHVhbFRyYW5zYWN0aW9uKCp3YWl0bGlzdCwgcmVhc29uKTsK KwkJCQlzaWduYWxlZCA9IFNpZ25hbFJlY292ZXJ5Q29uZmxpY3RXaXRoVmlydHVhbFhJRCgq d2FpdGxpc3QsIHJlYXNvbik7CiAKIAkJCQkvKgogCQkJCSAqIFdhaXQgYSBsaXR0bGUgYml0 IGZvciBpdCB0byBkaWUgc28gdGhhdCB3ZSBhdm9pZCBmbG9vZGluZwogCQkJCSAqIGFuIHVu cmVzcG9uc2l2ZSBiYWNrZW5kIHdoZW4gc3lzdGVtIGlzIGhlYXZpbHkgbG9hZGVkLgogCQkJ CSAqLwotCQkJCWlmIChwaWQgIT0gMCkKKwkJCQlpZiAoc2lnbmFsZWQpCiAJCQkJCXBnX3Vz bGVlcCg1MDAwTCk7CiAJCQl9CiAKQEAgLTQ4OSw3ICs0OTAsNyBAQCBSZXNvbHZlUmVjb3Zl cnlDb25mbGljdFdpdGhTbmFwc2hvdChUcmFuc2FjdGlvbklkIHNuYXBzaG90Q29uZmxpY3RI b3Jpem9uLAogCWJhY2tlbmRzID0gR2V0Q29uZmxpY3RpbmdWaXJ0dWFsWElEcyhzbmFwc2hv dENvbmZsaWN0SG9yaXpvbiwKIAkJCQkJCQkJCQkgbG9jYXRvci5kYk9pZCk7CiAJUmVzb2x2 ZVJlY292ZXJ5Q29uZmxpY3RXaXRoVmlydHVhbFhJRHMoYmFja2VuZHMsCi0JCQkJCQkJCQkJ ICAgUFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVF9TTkFQU0hPVCwKKwkJCQkJCQkJCQkgICBS RUNPVkVSWV9DT05GTElDVF9TTkFQU0hPVCwKIAkJCQkJCQkJCQkgICBXQUlUX0VWRU5UX1JF Q09WRVJZX0NPTkZMSUNUX1NOQVBTSE9ULAogCQkJCQkJCQkJCSAgIHRydWUpOwogCkBAIC01 NjAsNyArNTYxLDcgQEAgUmVzb2x2ZVJlY292ZXJ5Q29uZmxpY3RXaXRoVGFibGVzcGFjZShP aWQgdHNpZCkKIAl0ZW1wX2ZpbGVfdXNlcnMgPSBHZXRDb25mbGljdGluZ1ZpcnR1YWxYSURz KEludmFsaWRUcmFuc2FjdGlvbklkLAogCQkJCQkJCQkJCQkJSW52YWxpZE9pZCk7CiAJUmVz b2x2ZVJlY292ZXJ5Q29uZmxpY3RXaXRoVmlydHVhbFhJRHModGVtcF9maWxlX3VzZXJzLAot CQkJCQkJCQkJCSAgIFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfVEFCTEVTUEFDRSwKKwkJ CQkJCQkJCQkgICBSRUNPVkVSWV9DT05GTElDVF9UQUJMRVNQQUNFLAogCQkJCQkJCQkJCSAg IFdBSVRfRVZFTlRfUkVDT1ZFUllfQ09ORkxJQ1RfVEFCTEVTUEFDRSwKIAkJCQkJCQkJCQkg ICB0cnVlKTsKIH0KQEAgLTU4MSw3ICs1ODIsNyBAQCBSZXNvbHZlUmVjb3ZlcnlDb25mbGlj dFdpdGhEYXRhYmFzZShPaWQgZGJpZCkKIAkgKi8KIAl3aGlsZSAoQ291bnREQkJhY2tlbmRz KGRiaWQpID4gMCkKIAl7Ci0JCUNhbmNlbERCQmFja2VuZHMoZGJpZCwgUFJPQ1NJR19SRUNP VkVSWV9DT05GTElDVF9EQVRBQkFTRSk7CisJCVNpZ25hbFJlY292ZXJ5Q29uZmxpY3RXaXRo RGF0YWJhc2UoZGJpZCwgUkVDT1ZFUllfQ09ORkxJQ1RfREFUQUJBU0UpOwogCiAJCS8qCiAJ CSAqIFdhaXQgYXdoaWxlIGZvciB0aGVtIHRvIGRpZSBzbyB0aGF0IHdlIGF2b2lkIGZsb29k aW5nIGFuCkBAIC02NjUsNyArNjY2LDcgQEAgUmVzb2x2ZVJlY292ZXJ5Q29uZmxpY3RXaXRo TG9jayhMT0NLVEFHIGxvY2t0YWcsIGJvb2wgbG9nZ2luZ19jb25mbGljdCkKIAkJICogYmVj YXVzZSB0aGUgY2FsbGVyLCBXYWl0T25Mb2NrKCksIGhhcyBhbHJlYWR5IHJlcG9ydGVkIHRo YXQuCiAJCSAqLwogCQlSZXNvbHZlUmVjb3ZlcnlDb25mbGljdFdpdGhWaXJ0dWFsWElEcyhi YWNrZW5kcywKLQkJCQkJCQkJCQkJICAgUFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVF9MT0NL LAorCQkJCQkJCQkJCQkgICBSRUNPVkVSWV9DT05GTElDVF9MT0NLLAogCQkJCQkJCQkJCQkg ICBQR19XQUlUX0xPQ0sgfCBsb2NrdGFnLmxvY2t0YWdfdHlwZSwKIAkJCQkJCQkJCQkJICAg ZmFsc2UpOwogCX0KQEAgLTcyMyw4ICs3MjQsOCBAQCBSZXNvbHZlUmVjb3ZlcnlDb25mbGlj dFdpdGhMb2NrKExPQ0tUQUcgbG9ja3RhZywgYm9vbCBsb2dnaW5nX2NvbmZsaWN0KQogCQkg Ki8KIAkJd2hpbGUgKFZpcnR1YWxUcmFuc2FjdGlvbklkSXNWYWxpZCgqYmFja2VuZHMpKQog CQl7Ci0JCQlTaWduYWxWaXJ0dWFsVHJhbnNhY3Rpb24oKmJhY2tlbmRzLAotCQkJCQkJCQkJ IFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfU1RBUlRVUF9ERUFETE9DSyk7CisJCQkodm9p ZCkgU2lnbmFsUmVjb3ZlcnlDb25mbGljdFdpdGhWaXJ0dWFsWElEKCpiYWNrZW5kcywKKwkJ CQkJCQkJCQkJCQkJUkVDT1ZFUllfQ09ORkxJQ1RfU1RBUlRVUF9ERUFETE9DSyk7CiAJCQli YWNrZW5kcysrOwogCQl9CiAKQEAgLTgwMiw3ICs4MDMsNyBAQCBSZXNvbHZlUmVjb3ZlcnlD b25mbGljdFdpdGhCdWZmZXJQaW4odm9pZCkKIAkJLyoKIAkJICogV2UncmUgYWxyZWFkeSBi ZWhpbmQsIHNvIGNsZWFyIGEgcGF0aCBhcyBxdWlja2x5IGFzIHBvc3NpYmxlLgogCQkgKi8K LQkJU2VuZFJlY292ZXJ5Q29uZmxpY3RXaXRoQnVmZmVyUGluKFBST0NTSUdfUkVDT1ZFUllf Q09ORkxJQ1RfQlVGRkVSUElOKTsKKwkJU2VuZFJlY292ZXJ5Q29uZmxpY3RXaXRoQnVmZmVy UGluKFJFQ09WRVJZX0NPTkZMSUNUX0JVRkZFUlBJTik7CiAJfQogCWVsc2UKIAl7CkBAIC04 NDIsNyArODQzLDcgQEAgUmVzb2x2ZVJlY292ZXJ5Q29uZmxpY3RXaXRoQnVmZmVyUGluKHZv aWQpCiAJUHJvY1dhaXRGb3JTaWduYWwoV0FJVF9FVkVOVF9CVUZGRVJfQ0xFQU5VUCk7CiAK IAlpZiAoZ290X3N0YW5kYnlfZGVsYXlfdGltZW91dCkKLQkJU2VuZFJlY292ZXJ5Q29uZmxp Y3RXaXRoQnVmZmVyUGluKFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfQlVGRkVSUElOKTsK KwkJU2VuZFJlY292ZXJ5Q29uZmxpY3RXaXRoQnVmZmVyUGluKFJFQ09WRVJZX0NPTkZMSUNU X0JVRkZFUlBJTik7CiAJZWxzZSBpZiAoZ290X3N0YW5kYnlfZGVhZGxvY2tfdGltZW91dCkK IAl7CiAJCS8qCkBAIC04NTgsNyArODU5LDcgQEAgUmVzb2x2ZVJlY292ZXJ5Q29uZmxpY3RX aXRoQnVmZmVyUGluKHZvaWQpCiAJCSAqIG5vdCBiZSBzbyBoYXJtZnVsIGJlY2F1c2UgdGhl IHBlcmlvZCB0aGF0IHRoZSBidWZmZXIgaXMga2VwdCBwaW5uZWQKIAkJICogaXMgYmFzaWNh bGx5IG5vIHNvIGxvbmcuIEJ1dCB3ZSBzaG91bGQgZml4IHRoaXM/CiAJCSAqLwotCQlTZW5k UmVjb3ZlcnlDb25mbGljdFdpdGhCdWZmZXJQaW4oUFJPQ1NJR19SRUNPVkVSWV9DT05GTElD VF9TVEFSVFVQX0RFQURMT0NLKTsKKwkJU2VuZFJlY292ZXJ5Q29uZmxpY3RXaXRoQnVmZmVy UGluKFJFQ09WRVJZX0NPTkZMSUNUX1NUQVJUVVBfREVBRExPQ0spOwogCX0KIAogCS8qCkBA IC04NzMsMTAgKzg3NCwxMCBAQCBSZXNvbHZlUmVjb3ZlcnlDb25mbGljdFdpdGhCdWZmZXJQ aW4odm9pZCkKIH0KIAogc3RhdGljIHZvaWQKLVNlbmRSZWNvdmVyeUNvbmZsaWN0V2l0aEJ1 ZmZlclBpbihQcm9jU2lnbmFsUmVhc29uIHJlYXNvbikKK1NlbmRSZWNvdmVyeUNvbmZsaWN0 V2l0aEJ1ZmZlclBpbihSZWNvdmVyeUNvbmZsaWN0UmVhc29uIHJlYXNvbikKIHsKLQlBc3Nl cnQocmVhc29uID09IFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfQlVGRkVSUElOIHx8Ci0J CSAgIHJlYXNvbiA9PSBQUk9DU0lHX1JFQ09WRVJZX0NPTkZMSUNUX1NUQVJUVVBfREVBRExP Q0spOworCUFzc2VydChyZWFzb24gPT0gUkVDT1ZFUllfQ09ORkxJQ1RfQlVGRkVSUElOIHx8 CisJCSAgIHJlYXNvbiA9PSBSRUNPVkVSWV9DT05GTElDVF9TVEFSVFVQX0RFQURMT0NLKTsK IAogCS8qCiAJICogV2Ugc2VuZCBzaWduYWwgdG8gYWxsIGJhY2tlbmRzIHRvIGFzayB0aGVt IGlmIHRoZXkgYXJlIGhvbGRpbmcgdGhlCkBAIC04ODQsNyArODg1LDcgQEAgU2VuZFJlY292 ZXJ5Q29uZmxpY3RXaXRoQnVmZmVyUGluKFByb2NTaWduYWxSZWFzb24gcmVhc29uKQogCSAq IGlubm9jZW50LCBidXQgd2UgbGV0IHRoZSBTSUdVU1IxIGhhbmRsaW5nIGluIGVhY2ggYmFj a2VuZCBkZWNpZGUgdGhlaXIKIAkgKiBvd24gZmF0ZS4KIAkgKi8KLQlDYW5jZWxEQkJhY2tl bmRzKEludmFsaWRPaWQsIHJlYXNvbik7CisJU2lnbmFsUmVjb3ZlcnlDb25mbGljdFdpdGhE YXRhYmFzZShJbnZhbGlkT2lkLCByZWFzb24pOwogfQogCiAvKgpAQCAtMTQ4OSwzNSArMTQ5 MCwzMyBAQCBMb2dTdGFuZGJ5SW52YWxpZGF0aW9ucyhpbnQgbm1zZ3MsIFNoYXJlZEludmFs aWRhdGlvbk1lc3NhZ2UgKm1zZ3MsCiAKIC8qIFJldHVybiB0aGUgZGVzY3JpcHRpb24gb2Yg cmVjb3ZlcnkgY29uZmxpY3QgKi8KIHN0YXRpYyBjb25zdCBjaGFyICoKLWdldF9yZWNvdmVy eV9jb25mbGljdF9kZXNjKFByb2NTaWduYWxSZWFzb24gcmVhc29uKQorZ2V0X3JlY292ZXJ5 X2NvbmZsaWN0X2Rlc2MoUmVjb3ZlcnlDb25mbGljdFJlYXNvbiByZWFzb24pCiB7CiAJY29u c3QgY2hhciAqcmVhc29uRGVzYyA9IF8oInVua25vd24gcmVhc29uIik7CiAKIAlzd2l0Y2gg KHJlYXNvbikKIAl7Ci0JCWNhc2UgUFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVF9CVUZGRVJQ SU46CisJCWNhc2UgUkVDT1ZFUllfQ09ORkxJQ1RfQlVGRkVSUElOOgogCQkJcmVhc29uRGVz YyA9IF8oInJlY292ZXJ5IGNvbmZsaWN0IG9uIGJ1ZmZlciBwaW4iKTsKIAkJCWJyZWFrOwot CQljYXNlIFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfTE9DSzoKKwkJY2FzZSBSRUNPVkVS WV9DT05GTElDVF9MT0NLOgogCQkJcmVhc29uRGVzYyA9IF8oInJlY292ZXJ5IGNvbmZsaWN0 IG9uIGxvY2siKTsKIAkJCWJyZWFrOwotCQljYXNlIFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJ Q1RfVEFCTEVTUEFDRToKKwkJY2FzZSBSRUNPVkVSWV9DT05GTElDVF9UQUJMRVNQQUNFOgog CQkJcmVhc29uRGVzYyA9IF8oInJlY292ZXJ5IGNvbmZsaWN0IG9uIHRhYmxlc3BhY2UiKTsK IAkJCWJyZWFrOwotCQljYXNlIFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfU05BUFNIT1Q6 CisJCWNhc2UgUkVDT1ZFUllfQ09ORkxJQ1RfU05BUFNIT1Q6CiAJCQlyZWFzb25EZXNjID0g XygicmVjb3ZlcnkgY29uZmxpY3Qgb24gc25hcHNob3QiKTsKIAkJCWJyZWFrOwotCQljYXNl IFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfTE9HSUNBTFNMT1Q6CisJCWNhc2UgUkVDT1ZF UllfQ09ORkxJQ1RfTE9HSUNBTFNMT1Q6CiAJCQlyZWFzb25EZXNjID0gXygicmVjb3Zlcnkg Y29uZmxpY3Qgb24gcmVwbGljYXRpb24gc2xvdCIpOwogCQkJYnJlYWs7Ci0JCWNhc2UgUFJP Q1NJR19SRUNPVkVSWV9DT05GTElDVF9TVEFSVFVQX0RFQURMT0NLOgorCQljYXNlIFJFQ09W RVJZX0NPTkZMSUNUX1NUQVJUVVBfREVBRExPQ0s6CiAJCQlyZWFzb25EZXNjID0gXygicmVj b3ZlcnkgY29uZmxpY3Qgb24gYnVmZmVyIGRlYWRsb2NrIik7CiAJCQlicmVhazsKLQkJY2Fz ZSBQUk9DU0lHX1JFQ09WRVJZX0NPTkZMSUNUX0RBVEFCQVNFOgorCQljYXNlIFJFQ09WRVJZ X0NPTkZMSUNUX0RBVEFCQVNFOgogCQkJcmVhc29uRGVzYyA9IF8oInJlY292ZXJ5IGNvbmZs aWN0IG9uIGRhdGFiYXNlIik7CiAJCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwog CX0KIAogCXJldHVybiByZWFzb25EZXNjOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3Rv cmFnZS9sbWdyL3Byb2MuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKaW5k ZXggNjQ1NWJiNmUwMWYuLjI0MDViNTliNTAxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9z dG9yYWdlL2xtZ3IvcHJvYy5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9j LmMKQEAgLTUwNiw2ICs1MDYsNyBAQCBJbml0UHJvY2Vzcyh2b2lkKQogCQkJQXNzZXJ0KGRs aXN0X2lzX2VtcHR5KCYoTXlQcm9jLT5teVByb2NMb2Nrc1tpXSkpKTsKIAl9CiAjZW5kaWYK KwlwZ19hdG9taWNfd3JpdGVfdTMyKCZNeVByb2MtPnBlbmRpbmdSZWNvdmVyeUNvbmZsaWN0 cywgMCk7CiAKIAkvKiBJbml0aWFsaXplIGZpZWxkcyBmb3Igc3luYyByZXAgKi8KIAlNeVBy b2MtPndhaXRMU04gPSAwOwpAQCAtMTQ0Niw3ICsxNDQ3LDcgQEAgUHJvY1NsZWVwKExPQ0FM TE9DSyAqbG9jYWxsb2NrKQogCQkJCQkgKiBiZWNhdXNlIHRoZSBzdGFydHVwIHByb2Nlc3Mg aGVyZSBoYXMgYWxyZWFkeSB3YWl0ZWQKIAkJCQkJICogbG9uZ2VyIHRoYW4gZGVhZGxvY2tf dGltZW91dC4KIAkJCQkJICovCi0JCQkJCUxvZ1JlY292ZXJ5Q29uZmxpY3QoUFJPQ1NJR19S RUNPVkVSWV9DT05GTElDVF9MT0NLLAorCQkJCQlMb2dSZWNvdmVyeUNvbmZsaWN0KFJFQ09W RVJZX0NPTkZMSUNUX0xPQ0ssCiAJCQkJCQkJCQkJc3RhbmRieVdhaXRTdGFydCwgbm93LAog CQkJCQkJCQkJCWNudCA+IDAgPyB2eGlkcyA6IE5VTEwsIHRydWUpOwogCQkJCQlsb2dnZWRf cmVjb3ZlcnlfY29uZmxpY3QgPSB0cnVlOwpAQCAtMTY4Nyw3ICsxNjg4LDcgQEAgUHJvY1Ns ZWVwKExPQ0FMTE9DSyAqbG9jYWxsb2NrKQogCSAqIHN0YXJ0dXAgcHJvY2VzcyB3YWl0ZWQg bG9uZ2VyIHRoYW4gZGVhZGxvY2tfdGltZW91dCBmb3IgaXQuCiAJICovCiAJaWYgKEluSG90 U3RhbmRieSAmJiBsb2dnZWRfcmVjb3ZlcnlfY29uZmxpY3QpCi0JCUxvZ1JlY292ZXJ5Q29u ZmxpY3QoUFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVF9MT0NLLAorCQlMb2dSZWNvdmVyeUNv bmZsaWN0KFJFQ09WRVJZX0NPTkZMSUNUX0xPQ0ssCiAJCQkJCQkJc3RhbmRieVdhaXRTdGFy dCwgR2V0Q3VycmVudFRpbWVzdGFtcCgpLAogCQkJCQkJCU5VTEwsIGZhbHNlKTsKIApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jIGIvc3JjL2JhY2tlbmQvdGNv cC9wb3N0Z3Jlcy5jCmluZGV4IDk4MGVmMWRhMTAwLi5hMmZhOThlZTk3MSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3Rjb3Av cG9zdGdyZXMuYwpAQCAtNjcsNiArNjcsNyBAQAogI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5o IgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY3NpZ25hbC5oIgogI2luY2x1ZGUgInN0b3JhZ2Uv c2ludmFsLmgiCisjaW5jbHVkZSAic3RvcmFnZS9zdGFuZGJ5LmgiCiAjaW5jbHVkZSAidGNv cC9iYWNrZW5kX3N0YXJ0dXAuaCIKICNpbmNsdWRlICJ0Y29wL2Zhc3RwYXRoLmgiCiAjaW5j bHVkZSAidGNvcC9wcXVlcnkuaCIKQEAgLTE1NSwxMCArMTU2LDYgQEAgc3RhdGljIGNvbnN0 IGNoYXIgKnVzZXJEb3B0aW9uID0gTlVMTDsJLyogLUQgc3dpdGNoICovCiBzdGF0aWMgYm9v bCBFY2hvUXVlcnkgPSBmYWxzZTsJLyogLUUgc3dpdGNoICovCiBzdGF0aWMgYm9vbCBVc2VT ZW1pTmV3bGluZU5ld2xpbmUgPSBmYWxzZTsJLyogLWogc3dpdGNoICovCiAKLS8qIHdoZXRo ZXIgb3Igbm90LCBhbmQgd2h5LCB3ZSB3ZXJlIGNhbmNlbGVkIGJ5IGNvbmZsaWN0IHdpdGgg cmVjb3ZlcnkgKi8KLXN0YXRpYyB2b2xhdGlsZSBzaWdfYXRvbWljX3QgUmVjb3ZlcnlDb25m bGljdFBlbmRpbmcgPSBmYWxzZTsKLXN0YXRpYyB2b2xhdGlsZSBzaWdfYXRvbWljX3QgUmVj b3ZlcnlDb25mbGljdFBlbmRpbmdSZWFzb25zW05VTV9QUk9DU0lHTkFMU107Ci0KIC8qIHJl dXNlZCBidWZmZXIgdG8gcGFzcyB0byBTZW5kUm93RGVzY3JpcHRpb25NZXNzYWdlKCkgKi8K IHN0YXRpYyBNZW1vcnlDb250ZXh0IHJvd19kZXNjcmlwdGlvbl9jb250ZXh0ID0gTlVMTDsK IHN0YXRpYyBTdHJpbmdJbmZvRGF0YSByb3dfZGVzY3JpcHRpb25fYnVmOwpAQCAtMjUzNywz NCArMjUzNCwzMSBAQCBlcnJkZXRhaWxfcGFyYW1zKFBhcmFtTGlzdEluZm8gcGFyYW1zKQog ICogQWRkIGFuIGVycmRldGFpbCgpIGxpbmUgc2hvd2luZyBjb25mbGljdCBzb3VyY2UuCiAg Ki8KIHN0YXRpYyBpbnQKLWVycmRldGFpbF9yZWNvdmVyeV9jb25mbGljdChQcm9jU2lnbmFs UmVhc29uIHJlYXNvbikKK2VycmRldGFpbF9yZWNvdmVyeV9jb25mbGljdChSZWNvdmVyeUNv bmZsaWN0UmVhc29uIHJlYXNvbikKIHsKIAlzd2l0Y2ggKHJlYXNvbikKIAl7Ci0JCWNhc2Ug UFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVF9CVUZGRVJQSU46CisJCWNhc2UgUkVDT1ZFUllf Q09ORkxJQ1RfQlVGRkVSUElOOgogCQkJZXJyZGV0YWlsKCJVc2VyIHdhcyBob2xkaW5nIHNo YXJlZCBidWZmZXIgcGluIGZvciB0b28gbG9uZy4iKTsKIAkJCWJyZWFrOwotCQljYXNlIFBS T0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfTE9DSzoKKwkJY2FzZSBSRUNPVkVSWV9DT05GTElD VF9MT0NLOgogCQkJZXJyZGV0YWlsKCJVc2VyIHdhcyBob2xkaW5nIGEgcmVsYXRpb24gbG9j ayBmb3IgdG9vIGxvbmcuIik7CiAJCQlicmVhazsKLQkJY2FzZSBQUk9DU0lHX1JFQ09WRVJZ X0NPTkZMSUNUX1RBQkxFU1BBQ0U6CisJCWNhc2UgUkVDT1ZFUllfQ09ORkxJQ1RfVEFCTEVT UEFDRToKIAkJCWVycmRldGFpbCgiVXNlciB3YXMgb3IgbWlnaHQgaGF2ZSBiZWVuIHVzaW5n IHRhYmxlc3BhY2UgdGhhdCBtdXN0IGJlIGRyb3BwZWQuIik7CiAJCQlicmVhazsKLQkJY2Fz ZSBQUk9DU0lHX1JFQ09WRVJZX0NPTkZMSUNUX1NOQVBTSE9UOgorCQljYXNlIFJFQ09WRVJZ X0NPTkZMSUNUX1NOQVBTSE9UOgogCQkJZXJyZGV0YWlsKCJVc2VyIHF1ZXJ5IG1pZ2h0IGhh dmUgbmVlZGVkIHRvIHNlZSByb3cgdmVyc2lvbnMgdGhhdCBtdXN0IGJlIHJlbW92ZWQuIik7 CiAJCQlicmVhazsKLQkJY2FzZSBQUk9DU0lHX1JFQ09WRVJZX0NPTkZMSUNUX0xPR0lDQUxT TE9UOgorCQljYXNlIFJFQ09WRVJZX0NPTkZMSUNUX0xPR0lDQUxTTE9UOgogCQkJZXJyZGV0 YWlsKCJVc2VyIHdhcyB1c2luZyBhIGxvZ2ljYWwgcmVwbGljYXRpb24gc2xvdCB0aGF0IG11 c3QgYmUgaW52YWxpZGF0ZWQuIik7CiAJCQlicmVhazsKLQkJY2FzZSBQUk9DU0lHX1JFQ09W RVJZX0NPTkZMSUNUX1NUQVJUVVBfREVBRExPQ0s6CisJCWNhc2UgUkVDT1ZFUllfQ09ORkxJ Q1RfU1RBUlRVUF9ERUFETE9DSzoKIAkJCWVycmRldGFpbCgiVXNlciB0cmFuc2FjdGlvbiBj YXVzZWQgYnVmZmVyIGRlYWRsb2NrIHdpdGggcmVjb3ZlcnkuIik7CiAJCQlicmVhazsKLQkJ Y2FzZSBQUk9DU0lHX1JFQ09WRVJZX0NPTkZMSUNUX0RBVEFCQVNFOgorCQljYXNlIFJFQ09W RVJZX0NPTkZMSUNUX0RBVEFCQVNFOgogCQkJZXJyZGV0YWlsKCJVc2VyIHdhcyBjb25uZWN0 ZWQgdG8gYSBkYXRhYmFzZSB0aGF0IG11c3QgYmUgZHJvcHBlZC4iKTsKIAkJCWJyZWFrOwot CQlkZWZhdWx0OgotCQkJYnJlYWs7Ci0JCQkvKiBubyBlcnJkZXRhaWwgKi8KIAl9CiAKIAly ZXR1cm4gMDsKQEAgLTMwNjcsMTUgKzMwNjEsMTQgQEAgRmxvYXRFeGNlcHRpb25IYW5kbGVy KFNJR05BTF9BUkdTKQogfQogCiAvKgotICogVGVsbCB0aGUgbmV4dCBDSEVDS19GT1JfSU5U RVJSVVBUUygpIHRvIGNoZWNrIGZvciBhIHBhcnRpY3VsYXIgdHlwZSBvZgorICogVGVsbCB0 aGUgbmV4dCBDSEVDS19GT1JfSU5URVJSVVBUUygpIHRvIGNoZWNrIGZvciBhIHBhcnRpY3Vs YXIgdHlwZSBvZiBYWFgKICAqIHJlY292ZXJ5IGNvbmZsaWN0LiAgUnVucyBpbiBhIFNJR1VT UjEgaGFuZGxlci4KICAqLwogdm9pZAotSGFuZGxlUmVjb3ZlcnlDb25mbGljdEludGVycnVw dChQcm9jU2lnbmFsUmVhc29uIHJlYXNvbikKK0hhbmRsZVJlY292ZXJ5Q29uZmxpY3RJbnRl cnJ1cHQodm9pZCkKIHsKLQlSZWNvdmVyeUNvbmZsaWN0UGVuZGluZ1JlYXNvbnNbcmVhc29u XSA9IHRydWU7Ci0JUmVjb3ZlcnlDb25mbGljdFBlbmRpbmcgPSB0cnVlOwotCUludGVycnVw dFBlbmRpbmcgPSB0cnVlOworCWlmIChwZ19hdG9taWNfcmVhZF91MzIoJk15UHJvYy0+cGVu ZGluZ1JlY292ZXJ5Q29uZmxpY3RzKSAhPSAwKQorCQlJbnRlcnJ1cHRQZW5kaW5nID0gdHJ1 ZTsKIAkvKiBsYXRjaCB3aWxsIGJlIHNldCBieSBwcm9jc2lnbmFsX3NpZ3VzcjFfaGFuZGxl ciAqLwogfQogCkBAIC0zMDgzLDExICszMDc2LDExIEBAIEhhbmRsZVJlY292ZXJ5Q29uZmxp Y3RJbnRlcnJ1cHQoUHJvY1NpZ25hbFJlYXNvbiByZWFzb24pCiAgKiBDaGVjayBvbmUgaW5k aXZpZHVhbCBjb25mbGljdCByZWFzb24uCiAgKi8KIHN0YXRpYyB2b2lkCi1Qcm9jZXNzUmVj b3ZlcnlDb25mbGljdEludGVycnVwdChQcm9jU2lnbmFsUmVhc29uIHJlYXNvbikKK1Byb2Nl c3NSZWNvdmVyeUNvbmZsaWN0SW50ZXJydXB0KFJlY292ZXJ5Q29uZmxpY3RSZWFzb24gcmVh c29uKQogewogCXN3aXRjaCAocmVhc29uKQogCXsKLQkJY2FzZSBQUk9DU0lHX1JFQ09WRVJZ X0NPTkZMSUNUX1NUQVJUVVBfREVBRExPQ0s6CisJCWNhc2UgUkVDT1ZFUllfQ09ORkxJQ1Rf U1RBUlRVUF9ERUFETE9DSzoKIAogCQkJLyoKIAkJCSAqIElmIHdlIGFyZW4ndCB3YWl0aW5n IGZvciBhIGxvY2sgd2UgY2FuIG5ldmVyIGRlYWRsb2NrLgpAQCAtMzA5OCwyMSArMzA5MSwy MCBAQCBQcm9jZXNzUmVjb3ZlcnlDb25mbGljdEludGVycnVwdChQcm9jU2lnbmFsUmVhc29u IHJlYXNvbikKIAkJCS8qIEludGVudGlvbmFsIGZhbGwgdGhyb3VnaCB0byBjaGVjayB3YWl0 IGZvciBwaW4gKi8KIAkJCS8qIEZBTExUSFJPVUdIICovCiAKLQkJY2FzZSBQUk9DU0lHX1JF Q09WRVJZX0NPTkZMSUNUX0JVRkZFUlBJTjoKKwkJY2FzZSBSRUNPVkVSWV9DT05GTElDVF9C VUZGRVJQSU46CiAKIAkJCS8qCi0JCQkgKiBJZiBQUk9DU0lHX1JFQ09WRVJZX0NPTkZMSUNU X0JVRkZFUlBJTiBpcyByZXF1ZXN0ZWQgYnV0IHdlCi0JCQkgKiBhcmVuJ3QgYmxvY2tpbmcg dGhlIFN0YXJ0dXAgcHJvY2VzcyB0aGVyZSBpcyBub3RoaW5nIG1vcmUgdG8KLQkJCSAqIGRv LgorCQkJICogSWYgUkVDT1ZFUllfQ09ORkxJQ1RfQlVGRkVSUElOIGlzIHJlcXVlc3RlZCBi dXQgd2UgYXJlbid0CisJCQkgKiBibG9ja2luZyB0aGUgU3RhcnR1cCBwcm9jZXNzIHRoZXJl IGlzIG5vdGhpbmcgbW9yZSB0byBkby4KIAkJCSAqCi0JCQkgKiBXaGVuIFBST0NTSUdfUkVD T1ZFUllfQ09ORkxJQ1RfU1RBUlRVUF9ERUFETE9DSyBpcyByZXF1ZXN0ZWQsCi0JCQkgKiBp ZiB3ZSdyZSB3YWl0aW5nIGZvciBsb2NrcyBhbmQgdGhlIHN0YXJ0dXAgcHJvY2VzcyBpcyBu b3QKLQkJCSAqIHdhaXRpbmcgZm9yIGJ1ZmZlciBwaW4gKGkuZS4sIGFsc28gd2FpdGluZyBm b3IgbG9ja3MpLCB3ZSBzZXQKLQkJCSAqIHRoZSBmbGFnIHNvIHRoYXQgUHJvY1NsZWVwKCkg d2lsbCBjaGVjayBmb3IgZGVhZGxvY2tzLgorCQkJICogV2hlbiBSRUNPVkVSWV9DT05GTElD VF9TVEFSVFVQX0RFQURMT0NLIGlzIHJlcXVlc3RlZCwgaWYgd2UncmUKKwkJCSAqIHdhaXRp bmcgZm9yIGxvY2tzIGFuZCB0aGUgc3RhcnR1cCBwcm9jZXNzIGlzIG5vdCB3YWl0aW5nIGZv cgorCQkJICogYnVmZmVyIHBpbiAoaS5lLiwgYWxzbyB3YWl0aW5nIGZvciBsb2NrcyksIHdl IHNldCB0aGUgZmxhZyBzbworCQkJICogdGhhdCBQcm9jU2xlZXAoKSB3aWxsIGNoZWNrIGZv ciBkZWFkbG9ja3MuCiAJCQkgKi8KIAkJCWlmICghSG9sZGluZ0J1ZmZlclBpblRoYXREZWxh eXNSZWNvdmVyeSgpKQogCQkJewotCQkJCWlmIChyZWFzb24gPT0gUFJPQ1NJR19SRUNPVkVS WV9DT05GTElDVF9TVEFSVFVQX0RFQURMT0NLICYmCisJCQkJaWYgKHJlYXNvbiA9PSBSRUNP VkVSWV9DT05GTElDVF9TVEFSVFVQX0RFQURMT0NLICYmCiAJCQkJCUdldFN0YXJ0dXBCdWZm ZXJQaW5XYWl0QnVmSWQoKSA8IDApCiAJCQkJCUNoZWNrRGVhZExvY2tBbGVydCgpOwogCQkJ CXJldHVybjsKQEAgLTMxMjEsOSArMzExMyw5IEBAIFByb2Nlc3NSZWNvdmVyeUNvbmZsaWN0 SW50ZXJydXB0KFByb2NTaWduYWxSZWFzb24gcmVhc29uKQogCQkJLyogSW50ZW50aW9uYWwg ZmFsbCB0aHJvdWdoIHRvIGVycm9yIGhhbmRsaW5nICovCiAJCQkvKiBGQUxMVEhST1VHSCAq LwogCi0JCWNhc2UgUFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVF9MT0NLOgotCQljYXNlIFBS T0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfVEFCTEVTUEFDRToKLQkJY2FzZSBQUk9DU0lHX1JF Q09WRVJZX0NPTkZMSUNUX1NOQVBTSE9UOgorCQljYXNlIFJFQ09WRVJZX0NPTkZMSUNUX0xP Q0s6CisJCWNhc2UgUkVDT1ZFUllfQ09ORkxJQ1RfVEFCTEVTUEFDRToKKwkJY2FzZSBSRUNP VkVSWV9DT05GTElDVF9TTkFQU0hPVDoKIAogCQkJLyoKIAkJCSAqIElmIHdlIGFyZW4ndCBp biBhIHRyYW5zYWN0aW9uIGFueSBsb25nZXIgdGhlbiBpZ25vcmUuCkBAIC0zMTMzLDM0ICsz MTI1LDM0IEBAIFByb2Nlc3NSZWNvdmVyeUNvbmZsaWN0SW50ZXJydXB0KFByb2NTaWduYWxS ZWFzb24gcmVhc29uKQogCiAJCQkvKiBGQUxMVEhST1VHSCAqLwogCi0JCWNhc2UgUFJPQ1NJ R19SRUNPVkVSWV9DT05GTElDVF9MT0dJQ0FMU0xPVDoKKwkJY2FzZSBSRUNPVkVSWV9DT05G TElDVF9MT0dJQ0FMU0xPVDoKIAogCQkJLyoKIAkJCSAqIElmIHdlJ3JlIG5vdCBpbiBhIHN1 YnRyYW5zYWN0aW9uIHRoZW4gd2UgYXJlIE9LIHRvIHRocm93IGFuCiAJCQkgKiBFUlJPUiB0 byByZXNvbHZlIHRoZSBjb25mbGljdC4gIE90aGVyd2lzZSBkcm9wIHRocm91Z2ggdG8gdGhl CiAJCQkgKiBGQVRBTCBjYXNlLgogCQkJICoKLQkJCSAqIFBST0NTSUdfUkVDT1ZFUllfQ09O RkxJQ1RfTE9HSUNBTFNMT1QgaXMgYSBzcGVjaWFsIGNhc2UgdGhhdAotCQkJICogYWx3YXlz IHRocm93cyBhbiBFUlJPUiAoaWUgbmV2ZXIgcHJvbW90ZXMgdG8gRkFUQUwpLCB0aG91Z2gg aXQKLQkJCSAqIHN0aWxsIGhhcyB0byByZXNwZWN0IFF1ZXJ5Q2FuY2VsSG9sZG9mZkNvdW50 LCBzbyBpdCBzaGFyZXMgdGhpcwotCQkJICogY29kZSBwYXRoLiAgTG9naWNhbCBkZWNvZGlu ZyBzbG90cyBhcmUgb25seSBhY3F1aXJlZCB3aGlsZQorCQkJICogUkVDT1ZFUllfQ09ORkxJ Q1RfTE9HSUNBTFNMT1QgaXMgYSBzcGVjaWFsIGNhc2UgdGhhdCBhbHdheXMKKwkJCSAqIHRo cm93cyBhbiBFUlJPUiAoaWUgbmV2ZXIgcHJvbW90ZXMgdG8gRkFUQUwpLCB0aG91Z2ggaXQg c3RpbGwKKwkJCSAqIGhhcyB0byByZXNwZWN0IFF1ZXJ5Q2FuY2VsSG9sZG9mZkNvdW50LCBz byBpdCBzaGFyZXMgdGhpcyBjb2RlCisJCQkgKiBwYXRoLiAgTG9naWNhbCBkZWNvZGluZyBz bG90cyBhcmUgb25seSBhY3F1aXJlZCB3aGlsZQogCQkJICogcGVyZm9ybWluZyBsb2dpY2Fs IGRlY29kaW5nLiAgRHVyaW5nIGxvZ2ljYWwgZGVjb2Rpbmcgbm8gdXNlcgogCQkJICogY29u dHJvbGxlZCBjb2RlIGlzIHJ1bi4gIER1cmluZyBbc3ViXXRyYW5zYWN0aW9uIGFib3J0LCB0 aGUKIAkJCSAqIHNsb3QgaXMgcmVsZWFzZWQuICBUaGVyZWZvcmUgdXNlciBjb250cm9sbGVk IGNvZGUgY2Fubm90CiAJCQkgKiBpbnRlcmNlcHQgYW4gZXJyb3IgYmVmb3JlIHRoZSByZXBs aWNhdGlvbiBzbG90IGlzIHJlbGVhc2VkLgogCQkJICoKIAkJCSAqIFhYWCBvdGhlciB0aW1l cyB0aGF0IHdlIGNhbiB0aHJvdyBqdXN0IGFuIEVSUk9SICptYXkqIGJlCi0JCQkgKiBQUk9D U0lHX1JFQ09WRVJZX0NPTkZMSUNUX0xPQ0sgaWYgbm8gbG9ja3MgYXJlIGhlbGQgaW4gcGFy ZW50CisJCQkgKiBSRUNPVkVSWV9DT05GTElDVF9MT0NLIGlmIG5vIGxvY2tzIGFyZSBoZWxk IGluIHBhcmVudAogCQkJICogdHJhbnNhY3Rpb25zCiAJCQkgKgotCQkJICogUFJPQ1NJR19S RUNPVkVSWV9DT05GTElDVF9TTkFQU0hPVCBpZiBubyBzbmFwc2hvdHMgYXJlIGhlbGQgYnkK LQkJCSAqIHBhcmVudCB0cmFuc2FjdGlvbnMgYW5kIHRoZSB0cmFuc2FjdGlvbiBpcyBub3QK LQkJCSAqIHRyYW5zYWN0aW9uLXNuYXBzaG90IG1vZGUKKwkJCSAqIFJFQ09WRVJZX0NPTkZM SUNUX1NOQVBTSE9UIGlmIG5vIHNuYXBzaG90cyBhcmUgaGVsZCBieSBwYXJlbnQKKwkJCSAq IHRyYW5zYWN0aW9ucyBhbmQgdGhlIHRyYW5zYWN0aW9uIGlzIG5vdCB0cmFuc2FjdGlvbi1z bmFwc2hvdAorCQkJICogbW9kZQogCQkJICoKLQkJCSAqIFBST0NTSUdfUkVDT1ZFUllfQ09O RkxJQ1RfVEFCTEVTUEFDRSBpZiBubyB0ZW1wIGZpbGVzIG9yCi0JCQkgKiBjdXJzb3JzIG9w ZW4gaW4gcGFyZW50IHRyYW5zYWN0aW9ucworCQkJICogUkVDT1ZFUllfQ09ORkxJQ1RfVEFC TEVTUEFDRSBpZiBubyB0ZW1wIGZpbGVzIG9yIGN1cnNvcnMgb3BlbgorCQkJICogaW4gcGFy ZW50IHRyYW5zYWN0aW9ucwogCQkJICovCi0JCQlpZiAocmVhc29uID09IFBST0NTSUdfUkVD T1ZFUllfQ09ORkxJQ1RfTE9HSUNBTFNMT1QgfHwKKwkJCWlmIChyZWFzb24gPT0gUkVDT1ZF UllfQ09ORkxJQ1RfTE9HSUNBTFNMT1QgfHwKIAkJCQkhSXNTdWJUcmFuc2FjdGlvbigpKQog CQkJewogCQkJCS8qCkBAIC0zMTg3LDggKzMxNzksNyBAQCBQcm9jZXNzUmVjb3ZlcnlDb25m bGljdEludGVycnVwdChQcm9jU2lnbmFsUmVhc29uIHJlYXNvbikKIAkJCQkJCSAqIFJlLWFy bSBhbmQgZGVmZXIgdGhpcyBpbnRlcnJ1cHQgdW50aWwgbGF0ZXIuICBTZWUKIAkJCQkJCSAq IHNpbWlsYXIgY29kZSBpbiBQcm9jZXNzSW50ZXJydXB0cygpLgogCQkJCQkJICovCi0JCQkJ CQlSZWNvdmVyeUNvbmZsaWN0UGVuZGluZ1JlYXNvbnNbcmVhc29uXSA9IHRydWU7Ci0JCQkJ CQlSZWNvdmVyeUNvbmZsaWN0UGVuZGluZyA9IHRydWU7CisJCQkJCQkodm9pZCkgcGdfYXRv bWljX2ZldGNoX29yX3UzMigmTXlQcm9jLT5wZW5kaW5nUmVjb3ZlcnlDb25mbGljdHMsICgx IDw8IHJlYXNvbikpOwogCQkJCQkJSW50ZXJydXB0UGVuZGluZyA9IHRydWU7CiAJCQkJCQly ZXR1cm47CiAJCQkJCX0KQEAgLTMyMjIsNyArMzIxMyw3IEBAIFByb2Nlc3NSZWNvdmVyeUNv bmZsaWN0SW50ZXJydXB0KFByb2NTaWduYWxSZWFzb24gcmVhc29uKQogCQkJCQkJCSAiIGRh dGFiYXNlIGFuZCByZXBlYXQgeW91ciBjb21tYW5kLiIpKSk7CiAJCQlicmVhazsKIAotCQlj YXNlIFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfREFUQUJBU0U6CisJCWNhc2UgUkVDT1ZF UllfQ09ORkxJQ1RfREFUQUJBU0U6CiAKIAkJCS8qIFRoZSBkYXRhYmFzZSBpcyBiZWluZyBk cm9wcGVkOyB0ZXJtaW5hdGUgdGhlIHNlc3Npb24gKi8KIAkJCXBnc3RhdF9yZXBvcnRfcmVj b3ZlcnlfY29uZmxpY3QocmVhc29uKTsKQEAgLTMyNDMsNiArMzIzNCw4IEBAIFByb2Nlc3NS ZWNvdmVyeUNvbmZsaWN0SW50ZXJydXB0KFByb2NTaWduYWxSZWFzb24gcmVhc29uKQogc3Rh dGljIHZvaWQKIFByb2Nlc3NSZWNvdmVyeUNvbmZsaWN0SW50ZXJydXB0cyh2b2lkKQogewor CXVpbnQzMgkJcGVuZGluZzsKKwogCS8qCiAJICogV2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBh Ym91dCBqb2dnbGluZyB0aGUgZWxib3cgb2YgcHJvY19leGl0LCBiZWNhdXNlCiAJICogcHJv Y19leGl0X3ByZXBhcmUoKSBob2xkcyBpbnRlcnJ1cHRzLCBzbyBQcm9jZXNzSW50ZXJydXB0 cygpIHdvbid0IGNhbGwKQEAgLTMyNTAsMTcgKzMyNDMsMjEgQEAgUHJvY2Vzc1JlY292ZXJ5 Q29uZmxpY3RJbnRlcnJ1cHRzKHZvaWQpCiAJICovCiAJQXNzZXJ0KCFwcm9jX2V4aXRfaW5w cm9ncmVzcyk7CiAJQXNzZXJ0KEludGVycnVwdEhvbGRvZmZDb3VudCA9PSAwKTsKLQlBc3Nl cnQoUmVjb3ZlcnlDb25mbGljdFBlbmRpbmcpOwogCi0JUmVjb3ZlcnlDb25mbGljdFBlbmRp bmcgPSBmYWxzZTsKKwkvKiBBcmUgYW55IHJlY292ZXJ5IGNvbmZsaWN0IHBlbmRpbmc/ICov CisJcGVuZGluZyA9IHBnX2F0b21pY19yZWFkX21lbWJhcnJpZXJfdTMyKCZNeVByb2MtPnBl bmRpbmdSZWNvdmVyeUNvbmZsaWN0cyk7CisJaWYgKHBlbmRpbmcgPT0gMCkKKwkJcmV0dXJu OwogCi0JZm9yIChQcm9jU2lnbmFsUmVhc29uIHJlYXNvbiA9IFBST0NTSUdfUkVDT1ZFUllf Q09ORkxJQ1RfRklSU1Q7Ci0JCSByZWFzb24gPD0gUFJPQ1NJR19SRUNPVkVSWV9DT05GTElD VF9MQVNUOworCWZvciAoUmVjb3ZlcnlDb25mbGljdFJlYXNvbiByZWFzb24gPSAwOworCQkg cmVhc29uIDwgTlVNX1JFQ09WRVJZX0NPTkZMSUNUX1JFQVNPTlM7CiAJCSByZWFzb24rKykK IAl7Ci0JCWlmIChSZWNvdmVyeUNvbmZsaWN0UGVuZGluZ1JlYXNvbnNbcmVhc29uXSkKKwkJ aWYgKChwZW5kaW5nICYgKDEgPDwgcmVhc29uKSkgIT0gMCkKIAkJewotCQkJUmVjb3ZlcnlD b25mbGljdFBlbmRpbmdSZWFzb25zW3JlYXNvbl0gPSBmYWxzZTsKKwkJCS8qIGNsZWFyIHRo ZSBmbGFnICovCisJCQkodm9pZCkgcGdfYXRvbWljX2ZldGNoX2FuZF91MzIoJk15UHJvYy0+ cGVuZGluZ1JlY292ZXJ5Q29uZmxpY3RzLCB+KDEgPDwgcmVhc29uKSk7CisKIAkJCVByb2Nl c3NSZWNvdmVyeUNvbmZsaWN0SW50ZXJydXB0KHJlYXNvbik7CiAJCX0KIAl9CkBAIC0zNDUx LDcgKzM0NDgsNyBAQCBQcm9jZXNzSW50ZXJydXB0cyh2b2lkKQogCQl9CiAJfQogCi0JaWYg KFJlY292ZXJ5Q29uZmxpY3RQZW5kaW5nKQorCWlmIChwZ19hdG9taWNfcmVhZF91MzIoJk15 UHJvYy0+cGVuZGluZ1JlY292ZXJ5Q29uZmxpY3RzKSAhPSAwKQogCQlQcm9jZXNzUmVjb3Zl cnlDb25mbGljdEludGVycnVwdHMoKTsKIAogCWlmIChJZGxlSW5UcmFuc2FjdGlvblNlc3Np b25UaW1lb3V0UGVuZGluZykKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2 aXR5L3Bnc3RhdF9kYXRhYmFzZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvcGdz dGF0X2RhdGFiYXNlLmMKaW5kZXggZDdmNmQ0YzVlZTYuLmU2NzU5Y2NhYTNkIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXRfZGF0YWJhc2UuYworKysg Yi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXRfZGF0YWJhc2UuYwpAQCAtMTcs NyArMTcsNyBAQAogCiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAotI2luY2x1ZGUgInN0b3Jh Z2UvcHJvY3NpZ25hbC5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc3RhbmRieS5oIgogI2luY2x1 ZGUgInV0aWxzL3Bnc3RhdF9pbnRlcm5hbC5oIgogI2luY2x1ZGUgInV0aWxzL3RpbWVzdGFt cC5oIgogCkBAIC04OCwzMSArODgsMzEgQEAgcGdzdGF0X3JlcG9ydF9yZWNvdmVyeV9jb25m bGljdChpbnQgcmVhc29uKQogCiAJZGJlbnRyeSA9IHBnc3RhdF9wcmVwX2RhdGFiYXNlX3Bl bmRpbmcoTXlEYXRhYmFzZUlkKTsKIAotCXN3aXRjaCAocmVhc29uKQorCXN3aXRjaCAoKFJl Y292ZXJ5Q29uZmxpY3RSZWFzb24pIHJlYXNvbikKIAl7Ci0JCWNhc2UgUFJPQ1NJR19SRUNP VkVSWV9DT05GTElDVF9EQVRBQkFTRToKKwkJY2FzZSBSRUNPVkVSWV9DT05GTElDVF9EQVRB QkFTRToKIAogCQkJLyoKIAkJCSAqIFNpbmNlIHdlIGRyb3AgdGhlIGluZm9ybWF0aW9uIGFi b3V0IHRoZSBkYXRhYmFzZSBhcyBzb29uIGFzIGl0CiAJCQkgKiByZXBsaWNhdGVzLCB0aGVy ZSBpcyBubyBwb2ludCBpbiBjb3VudGluZyB0aGVzZSBjb25mbGljdHMuCiAJCQkgKi8KIAkJ CWJyZWFrOwotCQljYXNlIFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfVEFCTEVTUEFDRToK KwkJY2FzZSBSRUNPVkVSWV9DT05GTElDVF9UQUJMRVNQQUNFOgogCQkJZGJlbnRyeS0+Y29u ZmxpY3RfdGFibGVzcGFjZSsrOwogCQkJYnJlYWs7Ci0JCWNhc2UgUFJPQ1NJR19SRUNPVkVS WV9DT05GTElDVF9MT0NLOgorCQljYXNlIFJFQ09WRVJZX0NPTkZMSUNUX0xPQ0s6CiAJCQlk YmVudHJ5LT5jb25mbGljdF9sb2NrKys7CiAJCQlicmVhazsKLQkJY2FzZSBQUk9DU0lHX1JF Q09WRVJZX0NPTkZMSUNUX1NOQVBTSE9UOgorCQljYXNlIFJFQ09WRVJZX0NPTkZMSUNUX1NO QVBTSE9UOgogCQkJZGJlbnRyeS0+Y29uZmxpY3Rfc25hcHNob3QrKzsKIAkJCWJyZWFrOwot CQljYXNlIFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfQlVGRkVSUElOOgorCQljYXNlIFJF Q09WRVJZX0NPTkZMSUNUX0JVRkZFUlBJTjoKIAkJCWRiZW50cnktPmNvbmZsaWN0X2J1ZmZl cnBpbisrOwogCQkJYnJlYWs7Ci0JCWNhc2UgUFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVF9M T0dJQ0FMU0xPVDoKKwkJY2FzZSBSRUNPVkVSWV9DT05GTElDVF9MT0dJQ0FMU0xPVDoKIAkJ CWRiZW50cnktPmNvbmZsaWN0X2xvZ2ljYWxzbG90Kys7CiAJCQlicmVhazsKLQkJY2FzZSBQ Uk9DU0lHX1JFQ09WRVJZX0NPTkZMSUNUX1NUQVJUVVBfREVBRExPQ0s6CisJCWNhc2UgUkVD T1ZFUllfQ09ORkxJQ1RfU1RBUlRVUF9ERUFETE9DSzoKIAkJCWRiZW50cnktPmNvbmZsaWN0 X3N0YXJ0dXBfZGVhZGxvY2srKzsKIAkJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9tY3h0ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9t Y3h0ZnVuY3MuYwppbmRleCAxMmI4ZDRjZWZhZi4uYzdmN2I4YmMyZGQgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9tY3h0ZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC91 dGlscy9hZHQvbWN4dGZ1bmNzLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlICJtYi9w Z193Y2hhci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgogI2luY2x1ZGUgInN0b3Jh Z2UvcHJvY2FycmF5LmgiCisjaW5jbHVkZSAic3RvcmFnZS9wcm9jc2lnbmFsLmgiCiAjaW5j bHVkZSAidXRpbHMvYXJyYXkuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2lu Y2x1ZGUgInV0aWxzL2hzZWFyY2guaCIKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3Jh Z2UvcHJvYy5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jLmgKaW5kZXggODFmMTk2MGE2 MzUuLjA5MDQ3MWMxMTQ0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2Mu aAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2MuaApAQCAtMjM1LDYgKzIzNSwxNSBA QCBzdHJ1Y3QgUEdQUk9DCiAKIAlib29sCQlpc1JlZ3VsYXJCYWNrZW5kOwkvKiB0cnVlIGlm IGl0J3MgYSByZWd1bGFyIGJhY2tlbmQuICovCiAKKwkvKgorCSAqIFdoaWxlIGluIGhvdCBz dGFuZGJ5IG1vZGUsIHNob3dzIHRoYXQgYSBjb25mbGljdCBzaWduYWwgaGFzIGJlZW4gc2Vu dAorCSAqIGZvciB0aGUgY3VycmVudCB0cmFuc2FjdGlvbi4gU2V0L2NsZWFyZWQgd2hpbGUg aG9sZGluZyBQcm9jQXJyYXlMb2NrLAorCSAqIHRob3VnaCBub3QgcmVxdWlyZWQuIEFjY2Vz c2VkIHdpdGhvdXQgbG9jaywgaWYgbmVlZGVkLgorCSAqCisJICogVGhpcyBpcyBhIGJpdG1h c2sgb2YgUmVjb3ZlcnlDb25mbGljdFJlYXNvbnMKKwkgKi8KKwlwZ19hdG9taWNfdWludDMy IHBlbmRpbmdSZWNvdmVyeUNvbmZsaWN0czsKKwogCS8qCiAJICogSW5mbyBhYm91dCBMV0xv Y2sgdGhlIHByb2Nlc3MgaXMgY3VycmVudGx5IHdhaXRpbmcgZm9yLCBpZiBhbnkuCiAJICoK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY2FycmF5LmggYi9zcmMvaW5j bHVkZS9zdG9yYWdlL3Byb2NhcnJheS5oCmluZGV4IDNhODU5M2Y4N2JhLi5jNWFiMTU3NGZl MyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jYXJyYXkuaAorKysgYi9z cmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NhcnJheS5oCkBAIC03NywxMiArNzcsMTUgQEAgZXh0 ZXJuIFZpcnR1YWxUcmFuc2FjdGlvbklkICpHZXRDdXJyZW50VmlydHVhbFhJRHMoVHJhbnNh Y3Rpb25JZCBsaW1pdFhtaW4sCiAJCQkJCQkJCQkJCQkgICBib29sIGV4Y2x1ZGVYbWluMCwg Ym9vbCBhbGxEYnMsIGludCBleGNsdWRlVmFjdXVtLAogCQkJCQkJCQkJCQkJICAgaW50ICpu dnhpZHMpOwogZXh0ZXJuIFZpcnR1YWxUcmFuc2FjdGlvbklkICpHZXRDb25mbGljdGluZ1Zp cnR1YWxYSURzKFRyYW5zYWN0aW9uSWQgbGltaXRYbWluLCBPaWQgZGJPaWQpOwotZXh0ZXJu IHBpZF90IFNpZ25hbFZpcnR1YWxUcmFuc2FjdGlvbihWaXJ0dWFsVHJhbnNhY3Rpb25JZCB2 eGlkLCBQcm9jU2lnbmFsUmVhc29uIHNpZ21vZGUpOworCitleHRlcm4gYm9vbCBTaWduYWxS ZWNvdmVyeUNvbmZsaWN0KFBHUFJPQyAqcHJvYywgcGlkX3QgcGlkLCBSZWNvdmVyeUNvbmZs aWN0UmVhc29uIHJlYXNvbik7CitleHRlcm4gYm9vbCBTaWduYWxSZWNvdmVyeUNvbmZsaWN0 V2l0aFZpcnR1YWxYSUQoVmlydHVhbFRyYW5zYWN0aW9uSWQgdnhpZCwgUmVjb3ZlcnlDb25m bGljdFJlYXNvbiByZWFzb24pOworZXh0ZXJuIHZvaWQgU2lnbmFsUmVjb3ZlcnlDb25mbGlj dFdpdGhEYXRhYmFzZShPaWQgZGF0YWJhc2VpZCwgUmVjb3ZlcnlDb25mbGljdFJlYXNvbiBy ZWFzb24pOworCiAKIGV4dGVybiBib29sIE1pbmltdW1BY3RpdmVCYWNrZW5kcyhpbnQgbWlu KTsKIGV4dGVybiBpbnQJQ291bnREQkJhY2tlbmRzKE9pZCBkYXRhYmFzZWlkKTsKIGV4dGVy biBpbnQJQ291bnREQkNvbm5lY3Rpb25zKE9pZCBkYXRhYmFzZWlkKTsKLWV4dGVybiB2b2lk IENhbmNlbERCQmFja2VuZHMoT2lkIGRhdGFiYXNlaWQsIFByb2NTaWduYWxSZWFzb24gc2ln bW9kZSk7CiBleHRlcm4gaW50CUNvdW50VXNlckJhY2tlbmRzKE9pZCByb2xlaWQpOwogZXh0 ZXJuIGJvb2wgQ291bnRPdGhlckRCQmFja2VuZHMoT2lkIGRhdGFiYXNlSWQsCiAJCQkJCQkJ CSBpbnQgKm5iYWNrZW5kcywgaW50ICpucHJlcGFyZWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFsLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2Nz aWduYWwuaAppbmRleCBlNTJiOGViNzY5Ny4uMzQ4ZmJhNTNhOTMgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3Jh Z2UvcHJvY3NpZ25hbC5oCkBAIC0zNiwyMCArMzYsMTIgQEAgdHlwZWRlZiBlbnVtCiAJUFJP Q1NJR19CQVJSSUVSLAkJCS8qIGdsb2JhbCBiYXJyaWVyIGludGVycnVwdCAgKi8KIAlQUk9D U0lHX0xPR19NRU1PUllfQ09OVEVYVCwgLyogYXNrIGJhY2tlbmQgdG8gbG9nIHRoZSBtZW1v cnkgY29udGV4dHMgKi8KIAlQUk9DU0lHX1BBUkFMTEVMX0FQUExZX01FU1NBR0UsIC8qIE1l c3NhZ2UgZnJvbSBwYXJhbGxlbCBhcHBseSB3b3JrZXJzICovCi0KLQkvKiBSZWNvdmVyeSBj b25mbGljdCByZWFzb25zICovCi0JUFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVF9GSVJTVCwK LQlQUk9DU0lHX1JFQ09WRVJZX0NPTkZMSUNUX0RBVEFCQVNFID0gUFJPQ1NJR19SRUNPVkVS WV9DT05GTElDVF9GSVJTVCwKLQlQUk9DU0lHX1JFQ09WRVJZX0NPTkZMSUNUX1RBQkxFU1BB Q0UsCi0JUFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVF9MT0NLLAotCVBST0NTSUdfUkVDT1ZF UllfQ09ORkxJQ1RfU05BUFNIT1QsCi0JUFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVF9MT0dJ Q0FMU0xPVCwKLQlQUk9DU0lHX1JFQ09WRVJZX0NPTkZMSUNUX0JVRkZFUlBJTiwKLQlQUk9D U0lHX1JFQ09WRVJZX0NPTkZMSUNUX1NUQVJUVVBfREVBRExPQ0ssCi0JUFJPQ1NJR19SRUNP VkVSWV9DT05GTElDVF9MQVNUID0gUFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVF9TVEFSVFVQ X0RFQURMT0NLLAorCVBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1QsCS8qIGJhY2tlbmQgaXMg YmxvY2tpbmcgcmVjb3ZlcnksIGNoZWNrCisJCQkJCQkJCSAqIFBHUFJPQy0+cGVuZGluZ1Jl Y292ZXJ5Q29uZmxpY3RzIGZvciB0aGUKKwkJCQkJCQkJICogcmVhc29uICovCiB9IFByb2NT aWduYWxSZWFzb247CiAKLSNkZWZpbmUgTlVNX1BST0NTSUdOQUxTIChQUk9DU0lHX1JFQ09W RVJZX0NPTkZMSUNUX0xBU1QgKyAxKQorI2RlZmluZSBOVU1fUFJPQ1NJR05BTFMgKFBST0NT SUdfUkVDT1ZFUllfQ09ORkxJQ1QgKyAxKQogCiB0eXBlZGVmIGVudW0KIHsKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc3RhbmRieS5oIGIvc3JjL2luY2x1ZGUvc3RvcmFn ZS9zdGFuZGJ5LmgKaW5kZXggN2IxMDkzMjYzNWEuLjI3MzU3ODUwYWIwIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9zdG9yYWdlL3N0YW5kYnkuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9y YWdlL3N0YW5kYnkuaApAQCAtMTYsNyArMTYsNiBAQAogCiAjaW5jbHVkZSAiZGF0YXR5cGUv dGltZXN0YW1wLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sb2NrLmgiCi0jaW5jbHVkZSAic3Rv cmFnZS9wcm9jc2lnbmFsLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9yZWxmaWxlbG9jYXRvci5o IgogI2luY2x1ZGUgInN0b3JhZ2Uvc3RhbmRieWRlZnMuaCIKIApAQCAtMjUsNiArMjQsMzcg QEAgZXh0ZXJuIFBHRExMSU1QT1JUIGludCBtYXhfc3RhbmRieV9hcmNoaXZlX2RlbGF5Owog ZXh0ZXJuIFBHRExMSU1QT1JUIGludCBtYXhfc3RhbmRieV9zdHJlYW1pbmdfZGVsYXk7CiBl eHRlcm4gUEdETExJTVBPUlQgYm9vbCBsb2dfcmVjb3ZlcnlfY29uZmxpY3Rfd2FpdHM7CiAK Ky8qIFJlY292ZXJ5IGNvbmZsaWN0IHJlYXNvbnMgKi8KK3R5cGVkZWYgZW51bQoreworCS8q IEJhY2tlbmQgaXMgY29ubmVjdGVkIHRvIGEgZGF0YWJhc2UgdGhhdCBpcyBiZWluZyBkcm9w cGVkICovCisJUkVDT1ZFUllfQ09ORkxJQ1RfREFUQUJBU0UsCisKKwkvKiBCYWNrZW5kIGlz IHVzaW5nIGEgdGFibGVzcGFjZSB0aGF0IGlzIGJlaW5nIGRyb3BwZWQgKi8KKwlSRUNPVkVS WV9DT05GTElDVF9UQUJMRVNQQUNFLAorCisJLyogQmFja2VuZCBpcyBob2xkaW5nIGEgbG9j ayB0aGF0IGlzIGJsb2NraW5nIHJlY292ZXJ5ICovCisJUkVDT1ZFUllfQ09ORkxJQ1RfTE9D SywKKworCS8qIEJhY2tlbmQgaXMgaG9sZGluZyBhIHNuYXBzaG90IHRoYXQgaXMgYmxvY2tp bmcgcmVjb3ZlcnkgKi8KKwlSRUNPVkVSWV9DT05GTElDVF9TTkFQU0hPVCwKKworCS8qIEJh Y2tlbmQgaXMgdXNpbmcgYSBsb2dpY2FsIHJlcGxpY2F0aW9uIHNsb3QgdGhhdCBtdXN0IGJl IGludmFsaWRhdGVkICovCisJUkVDT1ZFUllfQ09ORkxJQ1RfTE9HSUNBTFNMT1QsCisKKwkv KiBCYWNrZW5kIGlzIGhvbGRpbmcgYSBwaW4gb24gYSBidWZmZXIgdGhhdCBpcyBibG9ja2lu ZyByZWNvdmVyeSAqLworCVJFQ09WRVJZX0NPTkZMSUNUX0JVRkZFUlBJTiwKKworCS8qCisJ ICogVGhlIGJhY2tlbmQgaXMgcmVxdWVzdGVkIHRvIGNoZWNrIGZvciBkZWFkbG9ja3MuIFRo ZSBzdGFydHVwIHByb2Nlc3MKKwkgKiBkb2Vzbid0IGNoZWNrIGZvciBkZWFkbG9jayBkaXJl Y2x5LCBiZWNhdXNlIHdlIHdhbnQgdG8ga2lsbCBvbmUgb2YgdGhlCisJICogb3RoZXIgYmFj a2VuZHMgaW5zdGVhZCBvZiB0aGUgc3RhcnR1cCBwcm9jZXNzLgorCSAqLworCVJFQ09WRVJZ X0NPTkZMSUNUX1NUQVJUVVBfREVBRExPQ0ssCit9IFJlY292ZXJ5Q29uZmxpY3RSZWFzb247 CisKKyNkZWZpbmUgTlVNX1JFQ09WRVJZX0NPTkZMSUNUX1JFQVNPTlMgKFJFQ09WRVJZX0NP TkZMSUNUX1NUQVJUVVBfREVBRExPQ0sgKyAxKQorCiBleHRlcm4gdm9pZCBJbml0UmVjb3Zl cnlUcmFuc2FjdGlvbkVudmlyb25tZW50KHZvaWQpOwogZXh0ZXJuIHZvaWQgU2h1dGRvd25S ZWNvdmVyeVRyYW5zYWN0aW9uRW52aXJvbm1lbnQodm9pZCk7CiAKQEAgLTQzLDcgKzczLDcg QEAgZXh0ZXJuIHZvaWQgQ2hlY2tSZWNvdmVyeUNvbmZsaWN0RGVhZGxvY2sodm9pZCk7CiBl eHRlcm4gdm9pZCBTdGFuZGJ5RGVhZExvY2tIYW5kbGVyKHZvaWQpOwogZXh0ZXJuIHZvaWQg U3RhbmRieVRpbWVvdXRIYW5kbGVyKHZvaWQpOwogZXh0ZXJuIHZvaWQgU3RhbmRieUxvY2tU aW1lb3V0SGFuZGxlcih2b2lkKTsKLWV4dGVybiB2b2lkIExvZ1JlY292ZXJ5Q29uZmxpY3Qo UHJvY1NpZ25hbFJlYXNvbiByZWFzb24sIFRpbWVzdGFtcFR6IHdhaXRfc3RhcnQsCitleHRl cm4gdm9pZCBMb2dSZWNvdmVyeUNvbmZsaWN0KFJlY292ZXJ5Q29uZmxpY3RSZWFzb24gcmVh c29uLCBUaW1lc3RhbXBUeiB3YWl0X3N0YXJ0LAogCQkJCQkJCQlUaW1lc3RhbXBUeiBub3cs IFZpcnR1YWxUcmFuc2FjdGlvbklkICp3YWl0X2xpc3QsCiAJCQkJCQkJCWJvb2wgc3RpbGxf d2FpdGluZyk7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Rjb3AvdGNvcHByb3QuaCBi L3NyYy9pbmNsdWRlL3Rjb3AvdGNvcHByb3QuaAppbmRleCA1NGRkZWU4NzVlZC4uNWJjNWJj ZmIyMGQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Rjb3AvdGNvcHByb3QuaAorKysgYi9z cmMvaW5jbHVkZS90Y29wL3Rjb3Bwcm90LmgKQEAgLTc0LDcgKzc0LDcgQEAgZXh0ZXJuIHZv aWQgZGllKFNJR05BTF9BUkdTKTsKIHBnX25vcmV0dXJuIGV4dGVybiB2b2lkIHF1aWNrZGll KFNJR05BTF9BUkdTKTsKIGV4dGVybiB2b2lkIFN0YXRlbWVudENhbmNlbEhhbmRsZXIoU0lH TkFMX0FSR1MpOwogcGdfbm9yZXR1cm4gZXh0ZXJuIHZvaWQgRmxvYXRFeGNlcHRpb25IYW5k bGVyKFNJR05BTF9BUkdTKTsKLWV4dGVybiB2b2lkIEhhbmRsZVJlY292ZXJ5Q29uZmxpY3RJ bnRlcnJ1cHQoUHJvY1NpZ25hbFJlYXNvbiByZWFzb24pOworZXh0ZXJuIHZvaWQgSGFuZGxl UmVjb3ZlcnlDb25mbGljdEludGVycnVwdCh2b2lkKTsKIGV4dGVybiB2b2lkIFByb2Nlc3ND bGllbnRSZWFkSW50ZXJydXB0KGJvb2wgYmxvY2tlZCk7CiBleHRlcm4gdm9pZCBQcm9jZXNz Q2xpZW50V3JpdGVJbnRlcnJ1cHQoYm9vbCBibG9ja2VkKTsKIApkaWZmIC0tZ2l0IGEvc3Jj L3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdAppbmRleCAzNDM3NGRmMGQ2Ny4uNjk5MGYxYmQ2ZjcgMTAwNjQ0Ci0tLSBh L3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0CkBAIC0yNDg4LDYgKzI0ODgsNyBAQCBSZWNvcmRDYWNoZUFy cmF5RW50cnkKIFJlY29yZENhY2hlRW50cnkKIFJlY29yZENvbXBhcmVEYXRhCiBSZWNvcmRJ T0RhdGEKK1JlY292ZXJ5Q29uZmxpY3RSZWFzb24KIFJlY292ZXJ5TG9ja0VudHJ5CiBSZWNv dmVyeUxvY2tYaWRFbnRyeQogUmVjb3ZlcnlQYXVzZVN0YXRlCi0tIAoyLjQ3LjMKCg== --------------bKtygjyKfjKbO6KbJdMaMR2R Content-Type: text/x-patch; charset=UTF-8; name="v8-0005-Refactor-ProcessRecoveryConflictInterrupt-for-rea.patch" Content-Disposition: attachment; filename*0="v8-0005-Refactor-ProcessRecoveryConflictInterrupt-for-rea.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA1MDczNDAyOTJkOTY2YTUxOTAwZDNhZjBiYjBmOGU0NTQzOTc3NjRlIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFRodSwgMjIgSmFuIDIwMjYgMjI6MTc6MTggKzAyMDAK U3ViamVjdDogW1BBVENIIHY4IDUvOF0gUmVmYWN0b3IgUHJvY2Vzc1JlY292ZXJ5Q29uZmxp Y3RJbnRlcnJ1cHQgZm9yCiByZWFkYWJpbGl0eQoKVHdvIGNoYW5nZXMgaGVyZToKCjEuIElu dHJvZHVjZSBhIHNlcGFyYXRlIFJFQ09WRVJZX0NPTkZMSUNUX0JVRkZFUlBJTl9ERUFETE9D SyBmbGFnIHRvCmluZGljYXRlIGEgc3VzcGVjdGVkIGRlYWRsb2NrIHRoYXQgaW52b2x2ZXMg YSBidWZmZXIgcGluLiBQcmV2aW91c2x5CnRoZSBzdGFydHVwIHByb2Nlc3MgdXNlZCB0aGUg c2FtZSBmbGFnIGZvciBhIGRlYWRsb2NrIGludm9sdmluZyBqdXN0CnJlZ3VsYXIgbG9ja3Ms IGFuZCB0byBjaGVjayBmb3IgZGVhZGxvY2tzIGludm9sdmluZyB0aGUgYnVmZmVyCnBpbi4g VGhlIGNhc2VzIGFyZSBoYW5kbGVkIHNlcGFyYXRlbHkgaW4gdGhlIHN0YXJ0dXAgcHJvY2Vz cywgYnV0IHRoZQpyZWNlaXZpbmcgYmFja2VuZCBoYWQgdG8gZGVkdWNlIHdoaWNoIG9uZSBp dCB3YXMgYmFzZWQgb24KSG9sZGluZ0J1ZmZlclBpblRoYXREZWxheXNSZWNvdmVyeSgpLiBX aXRoIGEgc2VwYXJhdGUgZmxhZywgdGhlCnJlY2VpdmVyIGRvZXNuJ3QgbmVlZCB0byBndWVz cy4KCjIuIFJld3JpdGUgdGhlIFByb2Nlc3NSZWNvdmVyeUNvbmZsaWN0SW50ZXJydXB0KCkg ZnVuY3Rpb24gdG8gbm90IHJlbHkKb24gZmFsbHRocm91Z2ggdGhyb3VnaCB0aGUgc3dpdGNo LXN0YXRlbWVudC4gVGhhdCB3YXMgZGlmZmljdWx0IHRvCnJlYWQuCi0tLQogc3JjL2JhY2tl bmQvc3RvcmFnZS9pcGMvc3RhbmRieS5jICAgICAgICAgICAgfCAgIDcgKy0KIHNyYy9iYWNr ZW5kL3Rjb3AvcG9zdGdyZXMuYyAgICAgICAgICAgICAgICAgIHwgMjYyICsrKysrKysrKysr LS0tLS0tLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdF9kYXRhYmFzZS5j IHwgIDEwICsKIHNyYy9pbmNsdWRlL3N0b3JhZ2Uvc3RhbmRieS5oICAgICAgICAgICAgICAg IHwgIDEwICstCiA0IGZpbGVzIGNoYW5nZWQsIDE4MSBpbnNlcnRpb25zKCspLCAxMDggZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc3RhbmRi eS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc3RhbmRieS5jCmluZGV4IDA4NTE3ODll OGI2Li5kODNhZmJmYjlkNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMv c3RhbmRieS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3N0YW5kYnkuYwpAQCAt ODU5LDcgKzg1OSw3IEBAIFJlc29sdmVSZWNvdmVyeUNvbmZsaWN0V2l0aEJ1ZmZlclBpbih2 b2lkKQogCQkgKiBub3QgYmUgc28gaGFybWZ1bCBiZWNhdXNlIHRoZSBwZXJpb2QgdGhhdCB0 aGUgYnVmZmVyIGlzIGtlcHQgcGlubmVkCiAJCSAqIGlzIGJhc2ljYWxseSBubyBzbyBsb25n LiBCdXQgd2Ugc2hvdWxkIGZpeCB0aGlzPwogCQkgKi8KLQkJU2VuZFJlY292ZXJ5Q29uZmxp Y3RXaXRoQnVmZmVyUGluKFJFQ09WRVJZX0NPTkZMSUNUX1NUQVJUVVBfREVBRExPQ0spOwor CQlTZW5kUmVjb3ZlcnlDb25mbGljdFdpdGhCdWZmZXJQaW4oUkVDT1ZFUllfQ09ORkxJQ1Rf QlVGRkVSUElOX0RFQURMT0NLKTsKIAl9CiAKIAkvKgpAQCAtODc3LDcgKzg3Nyw3IEBAIHN0 YXRpYyB2b2lkCiBTZW5kUmVjb3ZlcnlDb25mbGljdFdpdGhCdWZmZXJQaW4oUmVjb3ZlcnlD b25mbGljdFJlYXNvbiByZWFzb24pCiB7CiAJQXNzZXJ0KHJlYXNvbiA9PSBSRUNPVkVSWV9D T05GTElDVF9CVUZGRVJQSU4gfHwKLQkJICAgcmVhc29uID09IFJFQ09WRVJZX0NPTkZMSUNU X1NUQVJUVVBfREVBRExPQ0spOworCQkgICByZWFzb24gPT0gUkVDT1ZFUllfQ09ORkxJQ1Rf QlVGRkVSUElOX0RFQURMT0NLKTsKIAogCS8qCiAJICogV2Ugc2VuZCBzaWduYWwgdG8gYWxs IGJhY2tlbmRzIHRvIGFzayB0aGVtIGlmIHRoZXkgYXJlIGhvbGRpbmcgdGhlCkBAIC0xNTEy LDYgKzE1MTIsOSBAQCBnZXRfcmVjb3ZlcnlfY29uZmxpY3RfZGVzYyhSZWNvdmVyeUNvbmZs aWN0UmVhc29uIHJlYXNvbikKIAkJCXJlYXNvbkRlc2MgPSBfKCJyZWNvdmVyeSBjb25mbGlj dCBvbiByZXBsaWNhdGlvbiBzbG90Iik7CiAJCQlicmVhazsKIAkJY2FzZSBSRUNPVkVSWV9D T05GTElDVF9TVEFSVFVQX0RFQURMT0NLOgorCQkJcmVhc29uRGVzYyA9IF8oInJlY292ZXJ5 IGNvbmZsaWN0IG9uIGRlYWRsb2NrIik7CisJCQlicmVhazsKKwkJY2FzZSBSRUNPVkVSWV9D T05GTElDVF9CVUZGRVJQSU5fREVBRExPQ0s6CiAJCQlyZWFzb25EZXNjID0gXygicmVjb3Zl cnkgY29uZmxpY3Qgb24gYnVmZmVyIGRlYWRsb2NrIik7CiAJCQlicmVhazsKIAkJY2FzZSBS RUNPVkVSWV9DT05GTElDVF9EQVRBQkFTRToKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Rj b3AvcG9zdGdyZXMuYyBiL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYwppbmRleCBhMmZh OThlZTk3MS4uYmJmMjI1NGNhNjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3AvcG9z dGdyZXMuYworKysgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKQEAgLTE3OSwxMSAr MTc5LDE1IEBAIHN0YXRpYyBib29sIElzVHJhbnNhY3Rpb25FeGl0U3RtdChOb2RlICpwYXJz ZXRyZWUpOwogc3RhdGljIGJvb2wgSXNUcmFuc2FjdGlvbkV4aXRTdG10TGlzdChMaXN0ICpw c3RtdHMpOwogc3RhdGljIGJvb2wgSXNUcmFuc2FjdGlvblN0bXRMaXN0KExpc3QgKnBzdG10 cyk7CiBzdGF0aWMgdm9pZCBkcm9wX3VubmFtZWRfc3RtdCh2b2lkKTsKK3N0YXRpYyB2b2lk IFByb2Nlc3NSZWNvdmVyeUNvbmZsaWN0SW50ZXJydXB0cyh2b2lkKTsKK3N0YXRpYyB2b2lk IFByb2Nlc3NSZWNvdmVyeUNvbmZsaWN0SW50ZXJydXB0KFJlY292ZXJ5Q29uZmxpY3RSZWFz b24gcmVhc29uKTsKK3N0YXRpYyB2b2lkIHJlcG9ydF9yZWNvdmVyeV9jb25mbGljdChSZWNv dmVyeUNvbmZsaWN0UmVhc29uIHJlYXNvbik7CiBzdGF0aWMgdm9pZCBsb2dfZGlzY29ubmVj dGlvbnMoaW50IGNvZGUsIERhdHVtIGFyZyk7CiBzdGF0aWMgdm9pZCBlbmFibGVfc3RhdGVt ZW50X3RpbWVvdXQodm9pZCk7CiBzdGF0aWMgdm9pZCBkaXNhYmxlX3N0YXRlbWVudF90aW1l b3V0KHZvaWQpOwogCiAKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoJCWluZnJhc3RydWN0dXJlIGZv ciB2YWxncmluZCBkZWJ1Z2dpbmcKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTI1NTQsNiArMjU1OCw5 IEBAIGVycmRldGFpbF9yZWNvdmVyeV9jb25mbGljdChSZWNvdmVyeUNvbmZsaWN0UmVhc29u IHJlYXNvbikKIAkJCWVycmRldGFpbCgiVXNlciB3YXMgdXNpbmcgYSBsb2dpY2FsIHJlcGxp Y2F0aW9uIHNsb3QgdGhhdCBtdXN0IGJlIGludmFsaWRhdGVkLiIpOwogCQkJYnJlYWs7CiAJ CWNhc2UgUkVDT1ZFUllfQ09ORkxJQ1RfU1RBUlRVUF9ERUFETE9DSzoKKwkJCWVycmRldGFp bCgiVXNlciB0cmFuc2FjdGlvbiBjYXVzZWQgZGVhZGxvY2sgd2l0aCByZWNvdmVyeS4iKTsK KwkJCWJyZWFrOworCQljYXNlIFJFQ09WRVJZX0NPTkZMSUNUX0JVRkZFUlBJTl9ERUFETE9D SzoKIAkJCWVycmRldGFpbCgiVXNlciB0cmFuc2FjdGlvbiBjYXVzZWQgYnVmZmVyIGRlYWRs b2NrIHdpdGggcmVjb3ZlcnkuIik7CiAJCQlicmVhazsKIAkJY2FzZSBSRUNPVkVSWV9DT05G TElDVF9EQVRBQkFTRToKQEAgLTMwODMsMzUgKzMwOTAsNjIgQEAgUHJvY2Vzc1JlY292ZXJ5 Q29uZmxpY3RJbnRlcnJ1cHQoUmVjb3ZlcnlDb25mbGljdFJlYXNvbiByZWFzb24pCiAJCWNh c2UgUkVDT1ZFUllfQ09ORkxJQ1RfU1RBUlRVUF9ERUFETE9DSzoKIAogCQkJLyoKKwkJCSAq IFRoZSBzdGFydHVwIHByb2Nlc3MgaXMgd2FpdGluZyBvbiBhIGxvY2sgaGVsZCBieSB1cywg YW5kIGhhcworCQkJICogcmVxdWVzdGVkIHVzIHRvIGNoZWNrIGlmIGl0IGlzIGEgZGVhZGxv Y2sgKGkuZS4gdGhlIGRlYWRsb2NrCisJCQkgKiB0aW1lb3V0IGV4cGlyZWQpLgorCQkJICoK IAkJCSAqIElmIHdlIGFyZW4ndCB3YWl0aW5nIGZvciBhIGxvY2sgd2UgY2FuIG5ldmVyIGRl YWRsb2NrLgogCQkJICovCiAJCQlpZiAoR2V0QXdhaXRlZExvY2soKSA9PSBOVUxMKQogCQkJ CXJldHVybjsKIAotCQkJLyogSW50ZW50aW9uYWwgZmFsbCB0aHJvdWdoIHRvIGNoZWNrIHdh aXQgZm9yIHBpbiAqLwotCQkJLyogRkFMTFRIUk9VR0ggKi8KKwkJCS8qIFNldCB0aGUgZmxh ZyBzbyB0aGF0IFByb2NTbGVlcCgpIHdpbGwgY2hlY2sgZm9yIGRlYWRsb2Nrcy4gKi8KKwkJ CUNoZWNrRGVhZExvY2tBbGVydCgpOworCQkJcmV0dXJuOwogCi0JCWNhc2UgUkVDT1ZFUllf Q09ORkxJQ1RfQlVGRkVSUElOOgorCQljYXNlIFJFQ09WRVJZX0NPTkZMSUNUX0JVRkZFUlBJ Tl9ERUFETE9DSzoKIAogCQkJLyoKLQkJCSAqIElmIFJFQ09WRVJZX0NPTkZMSUNUX0JVRkZF UlBJTiBpcyByZXF1ZXN0ZWQgYnV0IHdlIGFyZW4ndAotCQkJICogYmxvY2tpbmcgdGhlIFN0 YXJ0dXAgcHJvY2VzcyB0aGVyZSBpcyBub3RoaW5nIG1vcmUgdG8gZG8uCisJCQkgKiBUaGUg c3RhcnR1cCBwcm9jZXNzIGlzIHdhaXRpbmcgb24gYSBidWZmZXIgcGluLCBhbmQgaGFzCisJ CQkgKiByZXF1ZXN0ZWQgdXMgdG8gY2hlY2sgaWYgdGhlcmUgaXMgYSBkZWFkbG9jayBpbnZv bHZpbmcgdGhlIHBpbi4KIAkJCSAqCi0JCQkgKiBXaGVuIFJFQ09WRVJZX0NPTkZMSUNUX1NU QVJUVVBfREVBRExPQ0sgaXMgcmVxdWVzdGVkLCBpZiB3ZSdyZQotCQkJICogd2FpdGluZyBm b3IgbG9ja3MgYW5kIHRoZSBzdGFydHVwIHByb2Nlc3MgaXMgbm90IHdhaXRpbmcgZm9yCi0J CQkgKiBidWZmZXIgcGluIChpLmUuLCBhbHNvIHdhaXRpbmcgZm9yIGxvY2tzKSwgd2Ugc2V0 IHRoZSBmbGFnIHNvCi0JCQkgKiB0aGF0IFByb2NTbGVlcCgpIHdpbGwgY2hlY2sgZm9yIGRl YWRsb2Nrcy4KKwkJCSAqIElmIHdlJ3JlIG5vdCB3YWl0aW5nIG9uIGEgbG9jaywgdGhlcmUg Y2FuIGJlIG5vIGRlYWRsb2NrLgorCQkJICovCisJCQlpZiAoR2V0QXdhaXRlZExvY2soKSA9 PSBOVUxMKQorCQkJCXJldHVybjsKKworCQkJLyoKKwkJCSAqIElmIHdlJ3JlIG5vdCBob2xk aW5nIHRoZSBidWZmZXIgcGluLCBhbHNvIG5vIGRlYWRsb2NrLiAoVGhlCisJCQkgKiBzdGFy dHVwIHByb2Nlc3MgZG9lc24ndCBrbm93IHdobydzIGhvbGRpbmcgdGhlIHBpbiwgYW5kIHNl bmRzCisJCQkgKiB0aGlzIHNpZ25hbCB0byAqYWxsKiBiYWNrZW5kcywgc28gdGhpcyBpcyB0 aGUgY29tbW9uIGNhc2UuKQorCQkJICovCisJCQlpZiAoIUhvbGRpbmdCdWZmZXJQaW5UaGF0 RGVsYXlzUmVjb3ZlcnkoKSkKKwkJCQlyZXR1cm47CisKKwkJCS8qCisJCQkgKiBPdGhlcndp c2UsIHdlIHByb2JhYmx5IGhhdmUgYSBkZWFkbG9jay4gIFVuZm9ydHVuYXRlbHkgdGhlCisJ CQkgKiBub3JtYWwgZGVhZGxvY2sgZGV0ZWN0b3IgZG9lc24ndCBrbm93IGFib3V0IGJ1ZmZl ciBwaW5zLCBzbyB3ZQorCQkJICogY2Fubm90IHBlcmZvcm0gY29tcHJlaGVuc2l2ZWx5IGRl YWRsb2NrIGNoZWNrLiAgSW5zdGVhZCwgd2UKKwkJCSAqIGp1c3QgYXNzdW1lIHRoYXQgaXQg aXMgYSBkZWFkbG9jayBpZiB0aGUgYWJvdmUgdHdvIGNvbmRpdGlvbnMKKwkJCSAqIGFyZSBt ZXQuICBJbiBwcmluY2lwbGUgdGhpcyBjYW4gbGVhZCB0byBmYWxzZSBwb3NpdGl2ZXMsIGJ1 dAorCQkJICogaXQncyByYXJlIGluIHByYWN0aWNlIGJlY2F1c2Ugc2Vzc2lvbnMgaW4gYSBo b3Qgc3RhbmRieSBzZXJ2ZXIKKwkJCSAqIHJhcmVseSBob2xkIGxvY2tzIHRoYXQgY2FuIGJs b2NrIG90aGVyIGJhY2tlbmRzLgorCQkJICovCisJCQlyZXBvcnRfcmVjb3ZlcnlfY29uZmxp Y3QocmVhc29uKTsKKwkJCXJldHVybjsKKworCQljYXNlIFJFQ09WRVJZX0NPTkZMSUNUX0JV RkZFUlBJTjoKKworCQkJLyoKKwkJCSAqIFNvbWVvbmUgaXMgaG9sZGluZyBhIGJ1ZmZlciBw aW4gdGhhdCB0aGUgc3RhcnR1cCBwcm9jZXNzIGlzCisJCQkgKiB3YWl0aW5nIGZvciwgYW5k IGl0IGdvdCB0aXJlZCBvZiB3YWl0aW5nLiAgSWYgdGhhdCdzIHVzLCBlcnJvcgorCQkJICog b3V0IHRvIHJlbGVhc2UgdGhlIHBpbi4KIAkJCSAqLwogCQkJaWYgKCFIb2xkaW5nQnVmZmVy UGluVGhhdERlbGF5c1JlY292ZXJ5KCkpCi0JCQl7Ci0JCQkJaWYgKHJlYXNvbiA9PSBSRUNP VkVSWV9DT05GTElDVF9TVEFSVFVQX0RFQURMT0NLICYmCi0JCQkJCUdldFN0YXJ0dXBCdWZm ZXJQaW5XYWl0QnVmSWQoKSA8IDApCi0JCQkJCUNoZWNrRGVhZExvY2tBbGVydCgpOwogCQkJ CXJldHVybjsKLQkJCX0KIAotCQkJLyogSW50ZW50aW9uYWwgZmFsbCB0aHJvdWdoIHRvIGVy cm9yIGhhbmRsaW5nICovCi0JCQkvKiBGQUxMVEhST1VHSCAqLworCQkJcmVwb3J0X3JlY292 ZXJ5X2NvbmZsaWN0KHJlYXNvbik7CisJCQlyZXR1cm47CiAKIAkJY2FzZSBSRUNPVkVSWV9D T05GTElDVF9MT0NLOgogCQljYXNlIFJFQ09WRVJZX0NPTkZMSUNUX1RBQkxFU1BBQ0U6CkBA IC0zMTIzLDEwOSArMzE1NywxMjcgQEAgUHJvY2Vzc1JlY292ZXJ5Q29uZmxpY3RJbnRlcnJ1 cHQoUmVjb3ZlcnlDb25mbGljdFJlYXNvbiByZWFzb24pCiAJCQlpZiAoIUlzVHJhbnNhY3Rp b25PclRyYW5zYWN0aW9uQmxvY2soKSkKIAkJCQlyZXR1cm47CiAKLQkJCS8qIEZBTExUSFJP VUdIICovCisJCQlyZXBvcnRfcmVjb3ZlcnlfY29uZmxpY3QocmVhc29uKTsKKwkJCXJldHVy bjsKIAogCQljYXNlIFJFQ09WRVJZX0NPTkZMSUNUX0xPR0lDQUxTTE9UOgorCQkJcmVwb3J0 X3JlY292ZXJ5X2NvbmZsaWN0KHJlYXNvbik7CisJCQlyZXR1cm47CiAKLQkJCS8qCi0JCQkg KiBJZiB3ZSdyZSBub3QgaW4gYSBzdWJ0cmFuc2FjdGlvbiB0aGVuIHdlIGFyZSBPSyB0byB0 aHJvdyBhbgotCQkJICogRVJST1IgdG8gcmVzb2x2ZSB0aGUgY29uZmxpY3QuICBPdGhlcndp c2UgZHJvcCB0aHJvdWdoIHRvIHRoZQotCQkJICogRkFUQUwgY2FzZS4KLQkJCSAqCi0JCQkg KiBSRUNPVkVSWV9DT05GTElDVF9MT0dJQ0FMU0xPVCBpcyBhIHNwZWNpYWwgY2FzZSB0aGF0 IGFsd2F5cwotCQkJICogdGhyb3dzIGFuIEVSUk9SIChpZSBuZXZlciBwcm9tb3RlcyB0byBG QVRBTCksIHRob3VnaCBpdCBzdGlsbAotCQkJICogaGFzIHRvIHJlc3BlY3QgUXVlcnlDYW5j ZWxIb2xkb2ZmQ291bnQsIHNvIGl0IHNoYXJlcyB0aGlzIGNvZGUKLQkJCSAqIHBhdGguICBM b2dpY2FsIGRlY29kaW5nIHNsb3RzIGFyZSBvbmx5IGFjcXVpcmVkIHdoaWxlCi0JCQkgKiBw ZXJmb3JtaW5nIGxvZ2ljYWwgZGVjb2RpbmcuICBEdXJpbmcgbG9naWNhbCBkZWNvZGluZyBu byB1c2VyCi0JCQkgKiBjb250cm9sbGVkIGNvZGUgaXMgcnVuLiAgRHVyaW5nIFtzdWJddHJh bnNhY3Rpb24gYWJvcnQsIHRoZQotCQkJICogc2xvdCBpcyByZWxlYXNlZC4gIFRoZXJlZm9y ZSB1c2VyIGNvbnRyb2xsZWQgY29kZSBjYW5ub3QKLQkJCSAqIGludGVyY2VwdCBhbiBlcnJv ciBiZWZvcmUgdGhlIHJlcGxpY2F0aW9uIHNsb3QgaXMgcmVsZWFzZWQuCi0JCQkgKgotCQkJ ICogWFhYIG90aGVyIHRpbWVzIHRoYXQgd2UgY2FuIHRocm93IGp1c3QgYW4gRVJST1IgKm1h eSogYmUKLQkJCSAqIFJFQ09WRVJZX0NPTkZMSUNUX0xPQ0sgaWYgbm8gbG9ja3MgYXJlIGhl bGQgaW4gcGFyZW50Ci0JCQkgKiB0cmFuc2FjdGlvbnMKLQkJCSAqCi0JCQkgKiBSRUNPVkVS WV9DT05GTElDVF9TTkFQU0hPVCBpZiBubyBzbmFwc2hvdHMgYXJlIGhlbGQgYnkgcGFyZW50 Ci0JCQkgKiB0cmFuc2FjdGlvbnMgYW5kIHRoZSB0cmFuc2FjdGlvbiBpcyBub3QgdHJhbnNh Y3Rpb24tc25hcHNob3QKLQkJCSAqIG1vZGUKLQkJCSAqCi0JCQkgKiBSRUNPVkVSWV9DT05G TElDVF9UQUJMRVNQQUNFIGlmIG5vIHRlbXAgZmlsZXMgb3IgY3Vyc29ycyBvcGVuCi0JCQkg KiBpbiBwYXJlbnQgdHJhbnNhY3Rpb25zCi0JCQkgKi8KLQkJCWlmIChyZWFzb24gPT0gUkVD T1ZFUllfQ09ORkxJQ1RfTE9HSUNBTFNMT1QgfHwKLQkJCQkhSXNTdWJUcmFuc2FjdGlvbigp KQotCQkJewotCQkJCS8qCi0JCQkJICogSWYgd2UgYWxyZWFkeSBhYm9ydGVkIHRoZW4gd2Ug bm8gbG9uZ2VyIG5lZWQgdG8gY2FuY2VsLiAgV2UKLQkJCQkgKiBkbyB0aGlzIGhlcmUgc2lu Y2Ugd2UgZG8gbm90IHdpc2ggdG8gaWdub3JlIGFib3J0ZWQKLQkJCQkgKiBzdWJ0cmFuc2Fj dGlvbnMsIHdoaWNoIG11c3QgY2F1c2UgRkFUQUwsIGN1cnJlbnRseS4KLQkJCQkgKi8KLQkJ CQlpZiAoSXNBYm9ydGVkVHJhbnNhY3Rpb25CbG9ja1N0YXRlKCkpCi0JCQkJCXJldHVybjsK KwkJY2FzZSBSRUNPVkVSWV9DT05GTElDVF9EQVRBQkFTRToKKworCQkJLyogVGhlIGRhdGFi YXNlIGlzIGJlaW5nIGRyb3BwZWQ7IHRlcm1pbmF0ZSB0aGUgc2Vzc2lvbiAqLworCQkJcmVw b3J0X3JlY292ZXJ5X2NvbmZsaWN0KHJlYXNvbik7CisJCQlicmVhazsKKworCQlkZWZhdWx0 OgorCQkJZWxvZyhGQVRBTCwgInVucmVjb2duaXplZCBjb25mbGljdCBtb2RlOiAlZCIsIChp bnQpIHJlYXNvbik7CisJfQorCWVsb2coRkFUQUwsICJ1bnJlY29nbml6ZWQgY29uZmxpY3Qg bW9kZTogJWQiLCAoaW50KSByZWFzb24pOworfQorCisvKgorICogVGhpcyB0cmFuc2FjdGlv biBvciBzZXNzaW9uIGlzIGNvbmZsaWN0aW5nIHdpdGggcmVjb3ZlcnkgYW5kIG5lZWRzIHRv IGJlCisgKiBraWxsZWQuICBSb2xsIGJhY2sgdGhlIHRyYW5zYWN0aW9uLCBpZiB0aGF0J3Mg c3VmZmljaWVudCwgb3IgdGVybWluYXRlIHRoZQorICogY29ubmVjdGlvbiwgb3IgZG8gbm90 aGluZyBpZiB3ZSdyZSBhbHJlYWR5IGluIGFib3J0ZWQgc3RhdGUuCisgKi8KK3N0YXRpYyB2 b2lkCityZXBvcnRfcmVjb3ZlcnlfY29uZmxpY3QoUmVjb3ZlcnlDb25mbGljdFJlYXNvbiBy ZWFzb24pCit7CisJYm9vbAkJZmF0YWw7CiAKKwlpZiAoUkVDT1ZFUllfQ09ORkxJQ1RfREFU QUJBU0UpCisJeworCQkvKiBub3RlOiBubyBoaW50IGFib3V0IHJlY29ubmVjdGluZywgYW5k IGRpZmZlcmVudCBlcnJjb2RlICovCisJCXBnc3RhdF9yZXBvcnRfcmVjb3ZlcnlfY29uZmxp Y3QocmVhc29uKTsKKwkJZXJlcG9ydChGQVRBTCwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0RB VEFCQVNFX0RST1BQRUQpLAorCQkJCSBlcnJtc2coInRlcm1pbmF0aW5nIGNvbm5lY3Rpb24g ZHVlIHRvIGNvbmZsaWN0IHdpdGggcmVjb3ZlcnkiKSwKKwkJCQkgZXJyZGV0YWlsX3JlY292 ZXJ5X2NvbmZsaWN0KHJlYXNvbikpKTsKKwl9CisJaWYgKHJlYXNvbiA9PSBSRUNPVkVSWV9D T05GTElDVF9MT0dJQ0FMU0xPVCkKKwl7CisJCS8qCisJCSAqIFJFQ09WRVJZX0NPTkZMSUNU X0xPR0lDQUxTTE9UIGlzIGEgc3BlY2lhbCBjYXNlIHRoYXQgYWx3YXlzIHRocm93cworCQkg KiBhbiBFUlJPUiAoaWUgbmV2ZXIgcHJvbW90ZXMgdG8gRkFUQUwpLCB0aG91Z2ggaXQgc3Rp bGwgaGFzIHRvCisJCSAqIHJlc3BlY3QgUXVlcnlDYW5jZWxIb2xkb2ZmQ291bnQsIHNvIGl0 IHNoYXJlcyB0aGlzIGNvZGUgcGF0aC4KKwkJICogTG9naWNhbCBkZWNvZGluZyBzbG90cyBh cmUgb25seSBhY3F1aXJlZCB3aGlsZSBwZXJmb3JtaW5nIGxvZ2ljYWwKKwkJICogZGVjb2Rp bmcuICBEdXJpbmcgbG9naWNhbCBkZWNvZGluZyBubyB1c2VyIGNvbnRyb2xsZWQgY29kZSBp cyBydW4uCisJCSAqIER1cmluZyBbc3ViXXRyYW5zYWN0aW9uIGFib3J0LCB0aGUgc2xvdCBp cyByZWxlYXNlZC4gIFRoZXJlZm9yZQorCQkgKiB1c2VyIGNvbnRyb2xsZWQgY29kZSBjYW5u b3QgaW50ZXJjZXB0IGFuIGVycm9yIGJlZm9yZSB0aGUKKwkJICogcmVwbGljYXRpb24gc2xv dCBpcyByZWxlYXNlZC4KKwkJICovCisJCWZhdGFsID0gZmFsc2U7CisJfQorCWVsc2UKKwl7 CisJCWZhdGFsID0gSXNTdWJUcmFuc2FjdGlvbigpOworCX0KKworCS8qCisJICogSWYgd2Un cmUgbm90IGluIGEgc3VidHJhbnNhY3Rpb24gdGhlbiB3ZSBhcmUgT0sgdG8gdGhyb3cgYW4g RVJST1IgdG8KKwkgKiByZXNvbHZlIHRoZSBjb25mbGljdC4gIE90aGVyd2lzZSBkcm9wIHRo cm91Z2ggdG8gdGhlIEZBVEFMIGNhc2UuCisJICoKKwkgKiBYWFggb3RoZXIgdGltZXMgdGhh dCB3ZSBjYW4gdGhyb3cganVzdCBhbiBFUlJPUiAqbWF5KiBiZQorCSAqIFJFQ09WRVJZX0NP TkZMSUNUX0xPQ0sgaWYgbm8gbG9ja3MgYXJlIGhlbGQgaW4gcGFyZW50IHRyYW5zYWN0aW9u cworCSAqCisJICogUkVDT1ZFUllfQ09ORkxJQ1RfU05BUFNIT1QgaWYgbm8gc25hcHNob3Rz IGFyZSBoZWxkIGJ5IHBhcmVudAorCSAqIHRyYW5zYWN0aW9ucyBhbmQgdGhlIHRyYW5zYWN0 aW9uIGlzIG5vdCB0cmFuc2FjdGlvbi1zbmFwc2hvdCBtb2RlCisJICoKKwkgKiBSRUNPVkVS WV9DT05GTElDVF9UQUJMRVNQQUNFIGlmIG5vIHRlbXAgZmlsZXMgb3IgY3Vyc29ycyBvcGVu IGluIHBhcmVudAorCSAqIHRyYW5zYWN0aW9ucworCSAqLworCWlmICghZmF0YWwpCisJewor CQkvKgorCQkgKiBJZiB3ZSBhbHJlYWR5IGFib3J0ZWQgdGhlbiB3ZSBubyBsb25nZXIgbmVl ZCB0byBjYW5jZWwuICBXZSBkbyB0aGlzCisJCSAqIGhlcmUgc2luY2Ugd2UgZG8gbm90IHdp c2ggdG8gaWdub3JlIGFib3J0ZWQgc3VidHJhbnNhY3Rpb25zLCB3aGljaAorCQkgKiBtdXN0 IGNhdXNlIEZBVEFMLCBjdXJyZW50bHkuCisJCSAqLworCQlpZiAoSXNBYm9ydGVkVHJhbnNh Y3Rpb25CbG9ja1N0YXRlKCkpCisJCQlyZXR1cm47CisKKwkJLyoKKwkJICogSWYgYSByZWNv dmVyeSBjb25mbGljdCBoYXBwZW5zIHdoaWxlIHdlIGFyZSB3YWl0aW5nIGZvciBpbnB1dCBm cm9tCisJCSAqIHRoZSBjbGllbnQsIHRoZSBjbGllbnQgaXMgcHJlc3VtYWJseSBqdXN0IHNp dHRpbmcgaWRsZSBpbiBhCisJCSAqIHRyYW5zYWN0aW9uLCBwcmV2ZW50aW5nIHJlY292ZXJ5 IGZyb20gbWFraW5nIHByb2dyZXNzLiAgV2UnbGwgZHJvcAorCQkgKiB0aHJvdWdoIHRvIHRo ZSBGQVRBTCBjYXNlIGJlbG93IHRvIGRpc2xvZGdlIGl0LCBpbiB0aGF0IGNhc2UuCisJCSAq LworCQlpZiAoIURvaW5nQ29tbWFuZFJlYWQpCisJCXsKKwkJCS8qIEF2b2lkIGxvc2luZyBz eW5jIGluIHRoZSBGRS9CRSBwcm90b2NvbC4gKi8KKwkJCWlmIChRdWVyeUNhbmNlbEhvbGRv ZmZDb3VudCAhPSAwKQorCQkJewogCQkJCS8qCi0JCQkJICogSWYgYSByZWNvdmVyeSBjb25m bGljdCBoYXBwZW5zIHdoaWxlIHdlIGFyZSB3YWl0aW5nIGZvcgotCQkJCSAqIGlucHV0IGZy b20gdGhlIGNsaWVudCwgdGhlIGNsaWVudCBpcyBwcmVzdW1hYmx5IGp1c3QKLQkJCQkgKiBz aXR0aW5nIGlkbGUgaW4gYSB0cmFuc2FjdGlvbiwgcHJldmVudGluZyByZWNvdmVyeSBmcm9t Ci0JCQkJICogbWFraW5nIHByb2dyZXNzLiAgV2UnbGwgZHJvcCB0aHJvdWdoIHRvIHRoZSBG QVRBTCBjYXNlCi0JCQkJICogYmVsb3cgdG8gZGlzbG9kZ2UgaXQsIGluIHRoYXQgY2FzZS4K KwkJCQkgKiBSZS1hcm0gYW5kIGRlZmVyIHRoaXMgaW50ZXJydXB0IHVudGlsIGxhdGVyLiAg U2VlIHNpbWlsYXIKKwkJCQkgKiBjb2RlIGluIFByb2Nlc3NJbnRlcnJ1cHRzKCkuCiAJCQkJ ICovCi0JCQkJaWYgKCFEb2luZ0NvbW1hbmRSZWFkKQotCQkJCXsKLQkJCQkJLyogQXZvaWQg bG9zaW5nIHN5bmMgaW4gdGhlIEZFL0JFIHByb3RvY29sLiAqLwotCQkJCQlpZiAoUXVlcnlD YW5jZWxIb2xkb2ZmQ291bnQgIT0gMCkKLQkJCQkJewotCQkJCQkJLyoKLQkJCQkJCSAqIFJl LWFybSBhbmQgZGVmZXIgdGhpcyBpbnRlcnJ1cHQgdW50aWwgbGF0ZXIuICBTZWUKLQkJCQkJ CSAqIHNpbWlsYXIgY29kZSBpbiBQcm9jZXNzSW50ZXJydXB0cygpLgotCQkJCQkJICovCi0J CQkJCQkodm9pZCkgcGdfYXRvbWljX2ZldGNoX29yX3UzMigmTXlQcm9jLT5wZW5kaW5nUmVj b3ZlcnlDb25mbGljdHMsICgxIDw8IHJlYXNvbikpOwotCQkJCQkJSW50ZXJydXB0UGVuZGlu ZyA9IHRydWU7Ci0JCQkJCQlyZXR1cm47Ci0JCQkJCX0KLQotCQkJCQkvKgotCQkJCQkgKiBX ZSBhcmUgY2xlYXJlZCB0byB0aHJvdyBhbiBFUlJPUi4gIEVpdGhlciBpdCdzIHRoZQotCQkJ CQkgKiBsb2dpY2FsIHNsb3QgY2FzZSwgb3Igd2UgaGF2ZSBhIHRvcC1sZXZlbCB0cmFuc2Fj dGlvbgotCQkJCQkgKiB0aGF0IHdlIGNhbiBhYm9ydCBhbmQgYSBjb25mbGljdCB0aGF0IGlz bid0IGluaGVyZW50bHkKLQkJCQkJICogbm9uLXJldHJ5YWJsZS4KLQkJCQkJICovCi0JCQkJ CUxvY2tFcnJvckNsZWFudXAoKTsKLQkJCQkJcGdzdGF0X3JlcG9ydF9yZWNvdmVyeV9jb25m bGljdChyZWFzb24pOwotCQkJCQllcmVwb3J0KEVSUk9SLAotCQkJCQkJCShlcnJjb2RlKEVS UkNPREVfVF9SX1NFUklBTElaQVRJT05fRkFJTFVSRSksCi0JCQkJCQkJIGVycm1zZygiY2Fu Y2VsaW5nIHN0YXRlbWVudCBkdWUgdG8gY29uZmxpY3Qgd2l0aCByZWNvdmVyeSIpLAotCQkJ CQkJCSBlcnJkZXRhaWxfcmVjb3ZlcnlfY29uZmxpY3QocmVhc29uKSkpOwotCQkJCQlicmVh azsKLQkJCQl9CisJCQkJKHZvaWQpIHBnX2F0b21pY19mZXRjaF9vcl91MzIoJk15UHJvYy0+ cGVuZGluZ1JlY292ZXJ5Q29uZmxpY3RzLCAoMSA8PCByZWFzb24pKTsKKwkJCQlJbnRlcnJ1 cHRQZW5kaW5nID0gdHJ1ZTsKKwkJCQlyZXR1cm47CiAJCQl9CiAKIAkJCS8qCi0JCQkgKiBU aGUgY29uZmxpY3QgY2Fubm90IGJlIHJlc29sdmVkIHdpdGggRVJST1IsIHNvIHRlcm1pbmF0 ZSB0aGUKLQkJCSAqIHdob2xlIHNlc3Npb24uCisJCQkgKiBXZSBhcmUgY2xlYXJlZCB0byB0 aHJvdyBhbiBFUlJPUi4gIEVpdGhlciBpdCdzIHRoZSBsb2dpY2FsIHNsb3QKKwkJCSAqIGNh c2UsIG9yIHdlIGhhdmUgYSB0b3AtbGV2ZWwgdHJhbnNhY3Rpb24gdGhhdCB3ZSBjYW4gYWJv cnQgYW5kCisJCQkgKiBhIGNvbmZsaWN0IHRoYXQgaXNuJ3QgaW5oZXJlbnRseSBub24tcmV0 cnlhYmxlLgogCQkJICovCisJCQlMb2NrRXJyb3JDbGVhbnVwKCk7CiAJCQlwZ3N0YXRfcmVw b3J0X3JlY292ZXJ5X2NvbmZsaWN0KHJlYXNvbik7Ci0JCQllcmVwb3J0KEZBVEFMLAorCQkJ ZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9UX1JfU0VSSUFMSVpBVElP Tl9GQUlMVVJFKSwKLQkJCQkJIGVycm1zZygidGVybWluYXRpbmcgY29ubmVjdGlvbiBkdWUg dG8gY29uZmxpY3Qgd2l0aCByZWNvdmVyeSIpLAotCQkJCQkgZXJyZGV0YWlsX3JlY292ZXJ5 X2NvbmZsaWN0KHJlYXNvbiksCi0JCQkJCSBlcnJoaW50KCJJbiBhIG1vbWVudCB5b3Ugc2hv dWxkIGJlIGFibGUgdG8gcmVjb25uZWN0IHRvIHRoZSIKLQkJCQkJCQkgIiBkYXRhYmFzZSBh bmQgcmVwZWF0IHlvdXIgY29tbWFuZC4iKSkpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBSRUNP VkVSWV9DT05GTElDVF9EQVRBQkFTRToKLQotCQkJLyogVGhlIGRhdGFiYXNlIGlzIGJlaW5n IGRyb3BwZWQ7IHRlcm1pbmF0ZSB0aGUgc2Vzc2lvbiAqLwotCQkJcGdzdGF0X3JlcG9ydF9y ZWNvdmVyeV9jb25mbGljdChyZWFzb24pOwotCQkJZXJlcG9ydChGQVRBTCwKLQkJCQkJKGVy cmNvZGUoRVJSQ09ERV9EQVRBQkFTRV9EUk9QUEVEKSwKLQkJCQkJIGVycm1zZygidGVybWlu YXRpbmcgY29ubmVjdGlvbiBkdWUgdG8gY29uZmxpY3Qgd2l0aCByZWNvdmVyeSIpLAorCQkJ CQkgZXJybXNnKCJjYW5jZWxpbmcgc3RhdGVtZW50IGR1ZSB0byBjb25mbGljdCB3aXRoIHJl Y292ZXJ5IiksCiAJCQkJCSBlcnJkZXRhaWxfcmVjb3ZlcnlfY29uZmxpY3QocmVhc29uKSkp OwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCWVsb2coRkFUQUwsICJ1bnJlY29nbml6 ZWQgY29uZmxpY3QgbW9kZTogJWQiLCAoaW50KSByZWFzb24pOworCQl9CiAJfQorCisJcGdz dGF0X3JlcG9ydF9yZWNvdmVyeV9jb25mbGljdChyZWFzb24pOworCWVyZXBvcnQoRkFUQUws CisJCQkoZXJyY29kZShFUlJDT0RFX1RfUl9TRVJJQUxJWkFUSU9OX0ZBSUxVUkUpLAorCQkJ IGVycm1zZygidGVybWluYXRpbmcgY29ubmVjdGlvbiBkdWUgdG8gY29uZmxpY3Qgd2l0aCBy ZWNvdmVyeSIpLAorCQkJIGVycmRldGFpbF9yZWNvdmVyeV9jb25mbGljdChyZWFzb24pLAor CQkJIGVycmhpbnQoIkluIGEgbW9tZW50IHlvdSBzaG91bGQgYmUgYWJsZSB0byByZWNvbm5l Y3QgdG8gdGhlIgorCQkJCQkgIiBkYXRhYmFzZSBhbmQgcmVwZWF0IHlvdXIgY29tbWFuZC4i KSkpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkv cGdzdGF0X2RhdGFiYXNlLmMgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXRf ZGF0YWJhc2UuYwppbmRleCBlNjc1OWNjYWEzZC4uNjMwOTkwOWJjZDAgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdF9kYXRhYmFzZS5jCisrKyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdF9kYXRhYmFzZS5jCkBAIC0xMTUsNiAr MTE1LDE2IEBAIHBnc3RhdF9yZXBvcnRfcmVjb3ZlcnlfY29uZmxpY3QoaW50IHJlYXNvbikK IAkJY2FzZSBSRUNPVkVSWV9DT05GTElDVF9TVEFSVFVQX0RFQURMT0NLOgogCQkJZGJlbnRy eS0+Y29uZmxpY3Rfc3RhcnR1cF9kZWFkbG9jaysrOwogCQkJYnJlYWs7CisJCWNhc2UgUkVD T1ZFUllfQ09ORkxJQ1RfQlVGRkVSUElOX0RFQURMT0NLOgorCisJCQkvKgorCQkJICogVGhl IGRpZmZlcmVuY2UgYmV0d2VlbiBSRUNPVkVSWV9DT05GTElDVF9TVEFSVFVQX0RFQURMT0NL IGFuZAorCQkJICogUkVDT1ZFUllfQ09ORkxJQ1RfQlVGRkVSUElOX0RFQURMT0NLIGlzIG1l cmVseSB3aGV0aGVyIGEgYnVmZmVyCisJCQkgKiBwaW4gd2FzIHBhcnQgb2YgdGhlIGRlYWRs b2NrLiBXZSB1c2UgdGhlIHNhbWUgY291bnRlciBmb3IgYm90aAorCQkJICogcmVhc29ucy4K KwkJCSAqLworCQkJZGJlbnRyeS0+Y29uZmxpY3Rfc3RhcnR1cF9kZWFkbG9jaysrOworCQkJ YnJlYWs7CiAJfQogfQogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3N0YW5k YnkuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc3RhbmRieS5oCmluZGV4IDI3MzU3ODUwYWIw Li5jMTgxNWUzNzQ3NCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9zdGFuZGJ5 LmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9zdGFuZGJ5LmgKQEAgLTUxLDkgKzUxLDE3 IEBAIHR5cGVkZWYgZW51bQogCSAqIG90aGVyIGJhY2tlbmRzIGluc3RlYWQgb2YgdGhlIHN0 YXJ0dXAgcHJvY2Vzcy4KIAkgKi8KIAlSRUNPVkVSWV9DT05GTElDVF9TVEFSVFVQX0RFQURM T0NLLAorCisJLyoKKwkgKiBMaWtlIFJFQ09WRVJZX0NPTkZMSUNUX1NUQVJUVVBfREVBRExP Q0sgaXMsIGJ1dCB0aGUgc3VzcGVjdGVkIGRlYWRsb2NrCisJICogaW52b2x2ZXMgYSBidWZm ZXIgcGluIHRoYXQgc29tZSBvdGhlciBiYWNrZW5kIGlzIGhvbGRpbmcuIFRoYXQgbmVlZHMK KwkgKiBzcGVjaWFsIGNoZWNraW5nIGJlY2F1c2UgdGhlIG5vcm1hbCBkZWFkbG9jayBkZXRl Y3RvciBkb2Vzbid0IHRyYWNrIHRoZQorCSAqIGJ1ZmZlciBwaW5zLgorCSAqLworCVJFQ09W RVJZX0NPTkZMSUNUX0JVRkZFUlBJTl9ERUFETE9DSywKIH0gUmVjb3ZlcnlDb25mbGljdFJl YXNvbjsKIAotI2RlZmluZSBOVU1fUkVDT1ZFUllfQ09ORkxJQ1RfUkVBU09OUyAoUkVDT1ZF UllfQ09ORkxJQ1RfU1RBUlRVUF9ERUFETE9DSyArIDEpCisjZGVmaW5lIE5VTV9SRUNPVkVS WV9DT05GTElDVF9SRUFTT05TIChSRUNPVkVSWV9DT05GTElDVF9CVUZGRVJQSU5fREVBRExP Q0sgKyAxKQogCiBleHRlcm4gdm9pZCBJbml0UmVjb3ZlcnlUcmFuc2FjdGlvbkVudmlyb25t ZW50KHZvaWQpOwogZXh0ZXJuIHZvaWQgU2h1dGRvd25SZWNvdmVyeVRyYW5zYWN0aW9uRW52 aXJvbm1lbnQodm9pZCk7Ci0tIAoyLjQ3LjMKCg== --------------bKtygjyKfjKbO6KbJdMaMR2R Content-Type: text/x-patch; charset=UTF-8; name="v8-0006-Centralize-resetting-SIGCHLD-handler.patch" Content-Disposition: attachment; filename="v8-0006-Centralize-resetting-SIGCHLD-handler.patch" Content-Transfer-Encoding: base64 RnJvbSBiNDIwODM3YTBmODc5ODE3NDMyNzkzMTE4M2ZlY2UwMzc2MzBhZmQ5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFRodSwgOCBKYW4gMjAyNiAyMDoyMjo0MyArMDIwMApT dWJqZWN0OiBbUEFUQ0ggdjggNi84XSBDZW50cmFsaXplIHJlc2V0dGluZyBTSUdDSExEIGhh bmRsZXIKCi0tLQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXRvdmFjdXVtLmMgICAgICAg IHwgIDIgLS0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3b3JrZXIuYyAgICAgICAgICB8 ICAxIC0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3cml0ZXIuYyAgICAgICAgICB8ICA1 IC0tLS0tCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL2NoZWNrcG9pbnRlci5jICAgICAgfCAg NSAtLS0tLQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wZ2FyY2guYyAgICAgICAgICAgIHwg IDMgLS0tCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL3N0YXJ0dXAuYyAgICAgICAgICAgfCAg NSAtLS0tLQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9zeXNsb2dnZXIuYyAgICAgICAgIHwg IDUgLS0tLS0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvd2Fsc3VtbWFyaXplci5jICAgICB8 ICA1IC0tLS0tCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dhbHdyaXRlci5jICAgICAgICAg fCAgNSAtLS0tLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9zbG90c3luYy5j IHwgIDEgLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2FscmVjZWl2ZXIuYyAgICAgIHwg IDMgLS0tCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxzZW5kZXIuYyAgICAgICAgfCAg MyAtLS0KIHNyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYyAgICAgICAgICAgICAgICB8ICA3 IC0tLS0tLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2luaXQvbWlzY2luaXQuYyAgICAgICAgICB8 IDE0ICsrKysrKysrKysrKysrCiAxNCBmaWxlcyBjaGFuZ2VkLCAxNCBpbnNlcnRpb25zKCsp LCA1MCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVy L2F1dG92YWN1dW0uYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5jCmlu ZGV4IDIyMzc5ZGUxZTMxLi5jNjI0NjlhMmE4MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv cG9zdG1hc3Rlci9hdXRvdmFjdXVtLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9h dXRvdmFjdXVtLmMKQEAgLTQxMiw3ICs0MTIsNiBAQCBBdXRvVmFjTGF1bmNoZXJNYWluKGNv bnN0IHZvaWQgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pCiAJcHFz aWduYWwoU0lHVVNSMSwgcHJvY3NpZ25hbF9zaWd1c3IxX2hhbmRsZXIpOwogCXBxc2lnbmFs KFNJR1VTUjIsIGF2bF9zaWd1c3IyX2hhbmRsZXIpOwogCXBxc2lnbmFsKFNJR0ZQRSwgRmxv YXRFeGNlcHRpb25IYW5kbGVyKTsKLQlwcXNpZ25hbChTSUdDSExELCBTSUdfREZMKTsKIAog CS8qCiAJICogQ3JlYXRlIGEgcGVyLWJhY2tlbmQgUEdQUk9DIHN0cnVjdCBpbiBzaGFyZWQg bWVtb3J5LiAgV2UgbXVzdCBkbyB0aGlzCkBAIC0xNDI0LDcgKzE0MjMsNiBAQCBBdXRvVmFj V29ya2VyTWFpbihjb25zdCB2b2lkICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2Rh dGFfbGVuKQogCXBxc2lnbmFsKFNJR1VTUjEsIHByb2NzaWduYWxfc2lndXNyMV9oYW5kbGVy KTsKIAlwcXNpZ25hbChTSUdVU1IyLCBTSUdfSUdOKTsKIAlwcXNpZ25hbChTSUdGUEUsIEZs b2F0RXhjZXB0aW9uSGFuZGxlcik7Ci0JcHFzaWduYWwoU0lHQ0hMRCwgU0lHX0RGTCk7CiAK IAkvKgogCSAqIENyZWF0ZSBhIHBlci1iYWNrZW5kIFBHUFJPQyBzdHJ1Y3QgaW4gc2hhcmVk IG1lbW9yeS4gIFdlIG11c3QgZG8gdGhpcwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9z dG1hc3Rlci9iZ3dvcmtlci5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dvcmtlci5j CmluZGV4IDY1ZGVhYmU5MWE3Li5lZDc0ZDk2NjAyNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvcG9zdG1hc3Rlci9iZ3dvcmtlci5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIv Ymd3b3JrZXIuYwpAQCAtNzkwLDcgKzc5MCw2IEBAIEJhY2tncm91bmRXb3JrZXJNYWluKGNv bnN0IHZvaWQgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pCiAKIAlw cXNpZ25hbChTSUdQSVBFLCBTSUdfSUdOKTsKIAlwcXNpZ25hbChTSUdVU1IyLCBTSUdfSUdO KTsKLQlwcXNpZ25hbChTSUdDSExELCBTSUdfREZMKTsKIAogCS8qCiAJICogSWYgYW4gZXhj ZXB0aW9uIGlzIGVuY291bnRlcmVkLCBwcm9jZXNzaW5nIHJlc3VtZXMgaGVyZS4KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3cml0ZXIuYyBiL3NyYy9iYWNrZW5k L3Bvc3RtYXN0ZXIvYmd3cml0ZXIuYwppbmRleCA4MGUzMDg4ZmM3ZS4uYTM1OTQ4NzVjMzQg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3cml0ZXIuYworKysgYi9z cmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd3JpdGVyLmMKQEAgLTEwOSwxMSArMTA5LDYgQEAg QmFja2dyb3VuZFdyaXRlck1haW4oY29uc3Qgdm9pZCAqc3RhcnR1cF9kYXRhLCBzaXplX3Qg c3RhcnR1cF9kYXRhX2xlbikKIAlwcXNpZ25hbChTSUdVU1IxLCBwcm9jc2lnbmFsX3NpZ3Vz cjFfaGFuZGxlcik7CiAJcHFzaWduYWwoU0lHVVNSMiwgU0lHX0lHTik7CiAKLQkvKgotCSAq IFJlc2V0IHNvbWUgc2lnbmFscyB0aGF0IGFyZSBhY2NlcHRlZCBieSBwb3N0bWFzdGVyIGJ1 dCBub3QgaGVyZQotCSAqLwotCXBxc2lnbmFsKFNJR0NITEQsIFNJR19ERkwpOwotCiAJLyoK IAkgKiBXZSBqdXN0IHN0YXJ0ZWQsIGFzc3VtZSB0aGVyZSBoYXMgYmVlbiBlaXRoZXIgYSBz aHV0ZG93biBvcgogCSAqIGVuZC1vZi1yZWNvdmVyeSBzbmFwc2hvdC4KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvY2hlY2twb2ludGVyLmMgYi9zcmMvYmFja2VuZC9w b3N0bWFzdGVyL2NoZWNrcG9pbnRlci5jCmluZGV4IDY0ODJjMjFiOGY5Li4xYjg4ZWY5MjBi NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9jaGVja3BvaW50ZXIuYwor KysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2NoZWNrcG9pbnRlci5jCkBAIC0yMjEsMTEg KzIyMSw2IEBAIENoZWNrcG9pbnRlck1haW4oY29uc3Qgdm9pZCAqc3RhcnR1cF9kYXRhLCBz aXplX3Qgc3RhcnR1cF9kYXRhX2xlbikKIAlwcXNpZ25hbChTSUdVU1IxLCBwcm9jc2lnbmFs X3NpZ3VzcjFfaGFuZGxlcik7CiAJcHFzaWduYWwoU0lHVVNSMiwgU2lnbmFsSGFuZGxlckZv clNodXRkb3duUmVxdWVzdCk7CiAKLQkvKgotCSAqIFJlc2V0IHNvbWUgc2lnbmFscyB0aGF0 IGFyZSBhY2NlcHRlZCBieSBwb3N0bWFzdGVyIGJ1dCBub3QgaGVyZQotCSAqLwotCXBxc2ln bmFsKFNJR0NITEQsIFNJR19ERkwpOwotCiAJLyoKIAkgKiBJbml0aWFsaXplIHNvIHRoYXQg Zmlyc3QgdGltZS1kcml2ZW4gZXZlbnQgaGFwcGVucyBhdCB0aGUgY29ycmVjdCB0aW1lLgog CSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wZ2FyY2guYyBiL3Ny Yy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcGdhcmNoLmMKaW5kZXggMWEyMDM4N2M0YmQuLjk0ZjRm ODI4YTg2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3BnYXJjaC5jCisr KyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcGdhcmNoLmMKQEAgLTIzOCw5ICsyMzgsNiBA QCBQZ0FyY2hpdmVyTWFpbihjb25zdCB2b2lkICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFy dHVwX2RhdGFfbGVuKQogCXBxc2lnbmFsKFNJR1VTUjEsIHByb2NzaWduYWxfc2lndXNyMV9o YW5kbGVyKTsKIAlwcXNpZ25hbChTSUdVU1IyLCBwZ2FyY2hfd2FrZW5fc3RvcCk7CiAKLQkv KiBSZXNldCBzb21lIHNpZ25hbHMgdGhhdCBhcmUgYWNjZXB0ZWQgYnkgcG9zdG1hc3RlciBi dXQgbm90IGhlcmUgKi8KLQlwcXNpZ25hbChTSUdDSExELCBTSUdfREZMKTsKLQogCS8qIFVu YmxvY2sgc2lnbmFscyAodGhleSB3ZXJlIGJsb2NrZWQgd2hlbiB0aGUgcG9zdG1hc3RlciBm b3JrZWQgdXMpICovCiAJc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZVbkJsb2NrU2lnLCBO VUxMKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9zdGFydHVwLmMg Yi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3N0YXJ0dXAuYwppbmRleCBhMWE0ZjY1ZjlhOS4u Y2IxYTc2Nzg1OGIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvc3RhcnR1 cC5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvc3RhcnR1cC5jCkBAIC0yMzUsMTEg KzIzNSw2IEBAIFN0YXJ0dXBQcm9jZXNzTWFpbihjb25zdCB2b2lkICpzdGFydHVwX2RhdGEs IHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKQogCXBxc2lnbmFsKFNJR1VTUjEsIHByb2NzaWdu YWxfc2lndXNyMV9oYW5kbGVyKTsKIAlwcXNpZ25hbChTSUdVU1IyLCBTdGFydHVwUHJvY1Ry aWdnZXJIYW5kbGVyKTsKIAotCS8qCi0JICogUmVzZXQgc29tZSBzaWduYWxzIHRoYXQgYXJl IGFjY2VwdGVkIGJ5IHBvc3RtYXN0ZXIgYnV0IG5vdCBoZXJlCi0JICovCi0JcHFzaWduYWwo U0lHQ0hMRCwgU0lHX0RGTCk7Ci0KIAkvKgogCSAqIFJlZ2lzdGVyIHRpbWVvdXRzIG5lZWRl ZCBmb3Igc3RhbmRieSBtb2RlCiAJICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0 bWFzdGVyL3N5c2xvZ2dlci5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9zeXNsb2dnZXIu YwppbmRleCAxYzQ0M2IzZDEyNi4uOTI5Mzg0OWQ3NzIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3Bvc3RtYXN0ZXIvc3lzbG9nZ2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rl ci9zeXNsb2dnZXIuYwpAQCAtMjg0LDExICsyODQsNiBAQCBTeXNMb2dnZXJNYWluKGNvbnN0 IHZvaWQgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pCiAJcHFzaWdu YWwoU0lHVVNSMSwgc2lnVXNyMUhhbmRsZXIpOwkvKiByZXF1ZXN0IGxvZyByb3RhdGlvbiAq LwogCXBxc2lnbmFsKFNJR1VTUjIsIFNJR19JR04pOwogCi0JLyoKLQkgKiBSZXNldCBzb21l IHNpZ25hbHMgdGhhdCBhcmUgYWNjZXB0ZWQgYnkgcG9zdG1hc3RlciBidXQgbm90IGhlcmUK LQkgKi8KLQlwcXNpZ25hbChTSUdDSExELCBTSUdfREZMKTsKLQogCXNpZ3Byb2NtYXNrKFNJ R19TRVRNQVNLLCAmVW5CbG9ja1NpZywgTlVMTCk7CiAKICNpZmRlZiBXSU4zMgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci93YWxzdW1tYXJpemVyLmMgYi9zcmMvYmFj a2VuZC9wb3N0bWFzdGVyL3dhbHN1bW1hcml6ZXIuYwppbmRleCBjM2Q1NmM4NjZkMy4uMWU3 YTk4YjAyYzMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvd2Fsc3VtbWFy aXplci5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvd2Fsc3VtbWFyaXplci5jCkBA IC0yNjcsMTEgKzI2Nyw2IEBAIFdhbFN1bW1hcml6ZXJNYWluKGNvbnN0IHZvaWQgKnN0YXJ0 dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pCiAJCQkJCQkJCQlBTExPQ1NFVF9E RUZBVUxUX1NJWkVTKTsKIAlNZW1vcnlDb250ZXh0U3dpdGNoVG8oY29udGV4dCk7CiAKLQkv KgotCSAqIFJlc2V0IHNvbWUgc2lnbmFscyB0aGF0IGFyZSBhY2NlcHRlZCBieSBwb3N0bWFz dGVyIGJ1dCBub3QgaGVyZQotCSAqLwotCXBxc2lnbmFsKFNJR0NITEQsIFNJR19ERkwpOwot CiAJLyoKIAkgKiBJZiBhbiBleGNlcHRpb24gaXMgZW5jb3VudGVyZWQsIHByb2Nlc3Npbmcg cmVzdW1lcyBoZXJlLgogCSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rl ci93YWx3cml0ZXIuYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvd2Fsd3JpdGVyLmMKaW5k ZXggMzhlYzhhNGM4YzcuLmFhZTVkM2M4NjFjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9w b3N0bWFzdGVyL3dhbHdyaXRlci5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvd2Fs d3JpdGVyLmMKQEAgLTExMiwxMSArMTEyLDYgQEAgV2FsV3JpdGVyTWFpbihjb25zdCB2b2lk ICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKQogCXBxc2lnbmFsKFNJ R1VTUjEsIHByb2NzaWduYWxfc2lndXNyMV9oYW5kbGVyKTsKIAlwcXNpZ25hbChTSUdVU1Iy LCBTSUdfSUdOKTsgLyogbm90IHVzZWQgKi8KIAotCS8qCi0JICogUmVzZXQgc29tZSBzaWdu YWxzIHRoYXQgYXJlIGFjY2VwdGVkIGJ5IHBvc3RtYXN0ZXIgYnV0IG5vdCBoZXJlCi0JICov Ci0JcHFzaWduYWwoU0lHQ0hMRCwgU0lHX0RGTCk7Ci0KIAkvKgogCSAqIENyZWF0ZSBhIG1l bW9yeSBjb250ZXh0IHRoYXQgd2Ugd2lsbCBkbyBhbGwgb3VyIHdvcmsgaW4uICBXZSBkbyB0 aGlzIHNvCiAJICogdGhhdCB3ZSBjYW4gcmVzZXQgdGhlIGNvbnRleHQgZHVyaW5nIGVycm9y IHJlY292ZXJ5IGFuZCB0aGVyZWJ5IGF2b2lkCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL3Nsb3RzeW5jLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL3Nsb3RzeW5jLmMKaW5kZXggNjBmYzc1NmI1MDkuLjVmZmUxNzdmOTQwIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Nsb3RzeW5jLmMK KysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9zbG90c3luYy5jCkBAIC0x NTk5LDcgKzE1OTksNiBAQCBSZXBsU2xvdFN5bmNXb3JrZXJNYWluKGNvbnN0IHZvaWQgKnN0 YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pCiAJcHFzaWduYWwoU0lHVVNS MSwgcHJvY3NpZ25hbF9zaWd1c3IxX2hhbmRsZXIpOwogCXBxc2lnbmFsKFNJR1VTUjIsIFNJ R19JR04pOwogCXBxc2lnbmFsKFNJR1BJUEUsIFNJR19JR04pOwotCXBxc2lnbmFsKFNJR0NI TEQsIFNJR19ERkwpOwogCiAJY2hlY2tfYW5kX3NldF9zeW5jX2luZm8oTXlQcm9jUGlkKTsK IApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2FscmVjZWl2ZXIuYyBi L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVyLmMKaW5kZXggNjk3MGFmM2Yz ZmYuLjViM2Q3ZmNmM2Q3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93 YWxyZWNlaXZlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVy LmMKQEAgLTI1OCw5ICsyNTgsNiBAQCBXYWxSZWNlaXZlck1haW4oY29uc3Qgdm9pZCAqc3Rh cnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbikKIAlwcXNpZ25hbChTSUdVU1Ix LCBwcm9jc2lnbmFsX3NpZ3VzcjFfaGFuZGxlcik7CiAJcHFzaWduYWwoU0lHVVNSMiwgU0lH X0lHTik7CiAKLQkvKiBSZXNldCBzb21lIHNpZ25hbHMgdGhhdCBhcmUgYWNjZXB0ZWQgYnkg cG9zdG1hc3RlciBidXQgbm90IGhlcmUgKi8KLQlwcXNpZ25hbChTSUdDSExELCBTSUdfREZM KTsKLQogCS8qIExvYWQgdGhlIGxpYnBxLXNwZWNpZmljIGZ1bmN0aW9ucyAqLwogCWxvYWRf ZmlsZSgibGlicHF3YWxyZWNlaXZlciIsIGZhbHNlKTsKIAlpZiAoV2FsUmVjZWl2ZXJGdW5j dGlvbnMgPT0gTlVMTCkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dh bHNlbmRlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2Fsc2VuZGVyLmMKaW5kZXgg YTBlNmEzZDIwMGMuLjNmOWE0MjdmN2M2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi93YWxzZW5kZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxz ZW5kZXIuYwpAQCAtMzczMiw5ICszNzMyLDYgQEAgV2FsU25kU2lnbmFscyh2b2lkKQogCXBx c2lnbmFsKFNJR1VTUjEsIHByb2NzaWduYWxfc2lndXNyMV9oYW5kbGVyKTsKIAlwcXNpZ25h bChTSUdVU1IyLCBXYWxTbmRMYXN0Q3ljbGVIYW5kbGVyKTsJLyogcmVxdWVzdCBhIGxhc3Qg Y3ljbGUgYW5kCiAJCQkJCQkJCQkJCQkgKiBzaHV0ZG93biAqLwotCi0JLyogUmVzZXQgc29t ZSBzaWduYWxzIHRoYXQgYXJlIGFjY2VwdGVkIGJ5IHBvc3RtYXN0ZXIgYnV0IG5vdCBoZXJl ICovCi0JcHFzaWduYWwoU0lHQ0hMRCwgU0lHX0RGTCk7CiB9CiAKIC8qIFJlcG9ydCBzaGFy ZWQtbWVtb3J5IHNwYWNlIG5lZWRlZCBieSBXYWxTbmRTaG1lbUluaXQgKi8KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYyBiL3NyYy9iYWNrZW5kL3Rjb3AvcG9z dGdyZXMuYwppbmRleCBiYmYyMjU0Y2E2Ny4uMDZhZTFlM2VkYmMgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYworKysgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3Rn cmVzLmMKQEAgLTQyNzksMTMgKzQyNzksNiBAQCBQb3N0Z3Jlc01haW4oY29uc3QgY2hhciAq ZGJuYW1lLCBjb25zdCBjaGFyICp1c2VybmFtZSkKIAkJcHFzaWduYWwoU0lHVVNSMSwgcHJv Y3NpZ25hbF9zaWd1c3IxX2hhbmRsZXIpOwogCQlwcXNpZ25hbChTSUdVU1IyLCBTSUdfSUdO KTsKIAkJcHFzaWduYWwoU0lHRlBFLCBGbG9hdEV4Y2VwdGlvbkhhbmRsZXIpOwotCi0JCS8q Ci0JCSAqIFJlc2V0IHNvbWUgc2lnbmFscyB0aGF0IGFyZSBhY2NlcHRlZCBieSBwb3N0bWFz dGVyIGJ1dCBub3QgYnkKLQkJICogYmFja2VuZAotCQkgKi8KLQkJcHFzaWduYWwoU0lHQ0hM RCwgU0lHX0RGTCk7IC8qIHN5c3RlbSgpIHJlcXVpcmVzIHRoaXMgb24gc29tZQotCQkJCQkJ CQkJICogcGxhdGZvcm1zICovCiAJfQogCiAJLyogRWFybHkgaW5pdGlhbGl6YXRpb24gKi8K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvbWlzY2luaXQuYyBiL3NyYy9i YWNrZW5kL3V0aWxzL2luaXQvbWlzY2luaXQuYwppbmRleCA1NjNmMjAzNzRmZi4uNjA4Zjdh ZDdhYmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvbWlzY2luaXQuYwor KysgYi9zcmMvYmFja2VuZC91dGlscy9pbml0L21pc2Npbml0LmMKQEAgLTE0Miw2ICsxNDIs MTUgQEAgSW5pdFBvc3RtYXN0ZXJDaGlsZCh2b2lkKQogCQllbG9nKEZBVEFMLCAic2V0c2lk KCkgZmFpbGVkOiAlbSIpOwogI2VuZGlmCiAKKwkvKgorCSAqIFJlc2V0IHNpZ25hbHMgdGhh dCBhcmUgdXNlZCBieSBwb3N0bWFzdGVyIGJ1dCBub3QgYnkgY2hpbGQgcHJvY2Vzc2VzLgor CSAqCisJICogQ3VycmVudGx5IGp1c3QgU0lHQ0hMRC4gIFRoZSBoYW5kbGVycyBmb3Igb3Ro ZXIgc2lnbmFscyBhcmUgb3ZlcnJpZGRlbgorCSAqIGxhdGVyLCBkZXBlbmRpbmcgb24gdGhl IGNoaWxkIHByb2Nlc3MgdHlwZS4KKwkgKi8KKwlwcXNpZ25hbChTSUdDSExELCBTSUdfREZM KTsgLyogc3lzdGVtKCkgcmVxdWlyZXMgdGhpcyB0byBiZSBTSUdfREZMIHJhdGhlcgorCQkJ CQkJCQkgKiB0aGFuIFNJR19JR04gb24gc29tZSBwbGF0Zm9ybXMgKi8KKwogCS8qCiAJICog RXZlcnkgcG9zdG1hc3RlciBjaGlsZCBwcm9jZXNzIGlzIGV4cGVjdGVkIHRvIHJlc3BvbmQg cHJvbXB0bHkgdG8KIAkgKiBTSUdRVUlUIGF0IGFsbCB0aW1lcy4gIFRoZXJlZm9yZSB3ZSBj ZW50cmFsbHkgcmVtb3ZlIFNJR1FVSVQgZnJvbQpAQCAtMTU0LDYgKzE2MywxMSBAQCBJbml0 UG9zdG1hc3RlckNoaWxkKHZvaWQpCiAJc2lnZGVsc2V0KCZCbG9ja1NpZywgU0lHUVVJVCk7 CiAJc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZCbG9ja1NpZywgTlVMTCk7CiAKKwkvKgor CSAqIEl0IGlzIHVwIHRvIHRoZSAqTWFpbigpIGZ1bmN0aW9uIHRvIHNldCBzaWduYWwgaGFu ZGxlcnMgYXBwcm9wcmlhdGUgZm9yCisJICogdGhlIGNoaWxkIHByb2Nlc3MgYW5kIHVuYmxv Y2sgdGhlIHJlc3Qgb2YgdGhlIHNpZ25hbHMuCisJICovCisKIAkvKiBSZXF1ZXN0IGEgc2ln bmFsIGlmIHRoZSBwb3N0bWFzdGVyIGRpZXMsIGlmIHBvc3NpYmxlLiAqLwogCVBvc3RtYXN0 ZXJEZWF0aFNpZ25hbEluaXQoKTsKIAotLSAKMi40Ny4zCgo= --------------bKtygjyKfjKbO6KbJdMaMR2R Content-Type: text/x-patch; charset=UTF-8; name="v8-0007-Use-standard-die-handler-for-SIGTERM-in-bgworkers.patch" Content-Disposition: attachment; filename*0="v8-0007-Use-standard-die-handler-for-SIGTERM-in-bgworkers.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAxYjBmYTI0ZjA5ZDY5ZTQxODgxYzMzZWQ2YmRlYzhmMDIzZjkxZjQzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFR1ZSwgMjAgSmFuIDIwMjYgMTY6NTc6MjUgKzAyMDAK U3ViamVjdDogW1BBVENIIHY4IDcvOF0gVXNlIHN0YW5kYXJkIGRpZSgpIGhhbmRsZXIgZm9y IFNJR1RFUk0gaW4gYmd3b3JrZXJzCgotLS0KIGRvYy9zcmMvc2dtbC9iZ3dvcmtlci5zZ21s ICAgICAgICB8ICAyICsrCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMgfCAx NiArLS0tLS0tLS0tLS0tLS0tCiAyIGZpbGVzIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwg MTUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2Jnd29ya2VyLnNn bWwgYi9kb2Mvc3JjL3NnbWwvYmd3b3JrZXIuc2dtbAppbmRleCA0Njk5ZWY2MzQ1Zi4uYjIz OWUzOGFhYWUgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9iZ3dvcmtlci5zZ21sCisrKyBi L2RvYy9zcmMvc2dtbC9iZ3dvcmtlci5zZ21sCkBAIC0yNTQsNiArMjU0LDggQEAgdHlwZWRl ZiBzdHJ1Y3QgQmFja2dyb3VuZFdvcmtlcgogICAgPGxpdGVyYWw+V0xfUE9TVE1BU1RFUl9E RUFUSDwvbGl0ZXJhbD4gZmxhZyBpcyBzZXQgd2hlbiBjYWxsaW5nIHRoYXQgZnVuY3Rpb24s IGFuZAogICAgdmVyaWZ5IHRoZSByZXR1cm4gY29kZSBmb3IgYSBwcm9tcHQgZXhpdCBpbiB0 aGUgZW1lcmdlbmN5IGNhc2UgdGhhdAogICAgPGNvbW1hbmQ+cG9zdGdyZXM8L2NvbW1hbmQ+ IGl0c2VsZiBoYXMgdGVybWluYXRlZC4KKworICAgVE9ETyBkb2N1bWVudCB0aGF0OiB5b3Ug c2hvdWxkIGNhbGwgQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKSwgdG8gcmVhY3QgcHJvbXB0bHkg dG8gdGVybWluYXRlIHJlcXVlc3QgKFNJR1RFUk0pCiAgIDwvcGFyYT4KIAogICA8cGFyYT4K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3b3JrZXIuYyBiL3NyYy9i YWNrZW5kL3Bvc3RtYXN0ZXIvYmd3b3JrZXIuYwppbmRleCBlZDc0ZDk2NjAyNi4uMDZjZmFk YWY4OGEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3b3JrZXIuYwor KysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMKQEAgLTcxMiwyMCArNzEy LDYgQEAgU2FuaXR5Q2hlY2tCYWNrZ3JvdW5kV29ya2VyKEJhY2tncm91bmRXb3JrZXIgKndv cmtlciwgaW50IGVsZXZlbCkKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotLyoKLSAqIFN0YW5kYXJk IFNJR1RFUk0gaGFuZGxlciBmb3IgYmFja2dyb3VuZCB3b3JrZXJzCi0gKi8KLXN0YXRpYyB2 b2lkCi1iZ3dvcmtlcl9kaWUoU0lHTkFMX0FSR1MpCi17Ci0Jc2lncHJvY21hc2soU0lHX1NF VE1BU0ssICZCbG9ja1NpZywgTlVMTCk7Ci0KLQllcmVwb3J0KEZBVEFMLAotCQkJKGVycmNv ZGUoRVJSQ09ERV9BRE1JTl9TSFVURE9XTiksCi0JCQkgZXJybXNnKCJ0ZXJtaW5hdGluZyBi YWNrZ3JvdW5kIHdvcmtlciBcIiVzXCIgZHVlIHRvIGFkbWluaXN0cmF0b3IgY29tbWFuZCIs Ci0JCQkJCU15Qmd3b3JrZXJFbnRyeS0+Ymd3X3R5cGUpKSk7Ci19Ci0KIC8qCiAgKiBNYWlu IGVudHJ5IHBvaW50IGZvciBiYWNrZ3JvdW5kIHdvcmtlciBwcm9jZXNzZXMuCiAgKi8KQEAg LTc4Miw3ICs3NjgsNyBAQCBCYWNrZ3JvdW5kV29ya2VyTWFpbihjb25zdCB2b2lkICpzdGFy dHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKQogCQlwcXNpZ25hbChTSUdVU1Ix LCBTSUdfSUdOKTsKIAkJcHFzaWduYWwoU0lHRlBFLCBTSUdfSUdOKTsKIAl9Ci0JcHFzaWdu YWwoU0lHVEVSTSwgYmd3b3JrZXJfZGllKTsKKwlwcXNpZ25hbChTSUdURVJNLCBkaWUpOwog CS8qIFNJR1FVSVQgaGFuZGxlciB3YXMgYWxyZWFkeSBzZXQgdXAgYnkgSW5pdFBvc3RtYXN0 ZXJDaGlsZCAqLwogCXBxc2lnbmFsKFNJR0hVUCwgU0lHX0lHTik7CiAKLS0gCjIuNDcuMwoK --------------bKtygjyKfjKbO6KbJdMaMR2R Content-Type: text/x-patch; charset=UTF-8; name="v8-0008-Replace-Latches-with-Interrupts.patch" Content-Disposition: attachment; filename="v8-0008-Replace-Latches-with-Interrupts.patch" Content-Transfer-Encoding: base64 RnJvbSA0M2NjYjRlY2RhODgzYzFiNTM4OTIyYTIyMTJhYzM2NjZkNjNkNmEwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFRodSwgMjkgSmFuIDIwMjYgMDI6MDc6NDUgKzAyMDAK U3ViamVjdDogW1BBVENIIHY4IDgvOF0gUmVwbGFjZSBMYXRjaGVzIHdpdGggSW50ZXJydXB0 cwoKVGhlIExhdGNoIHdhcyBhIGZsYWcsIHdpdGggYW4gaW50ZXItcHJvY2VzcyBzaWduYWxs aW5nIG1lY2hhbmlzbSB0aGF0CmFsbG93ZWQgYSBwcm9jZXNzIHRvIHdhaXQgZm9yIHRoZSBM YXRjaCB0byBiZSBzZXQuIE15IG9yaWdpbmFsIHZpc2lvbgpmb3IgTGF0Y2hlcyB3YXMgdGhh dCB5b3UgY291bGQgaGF2ZSBkaWZmZXJlbnQgbGF0Y2hlcyBmb3IgZGlmZmVyZW50CnRoaW5n cyB0aGF0IHlvdSBuZWVkIHRvIHdhaXQgZm9yLCBidXQgaW4gcHJhY3RpY2UsIGFsbW9zdCBh bGwgY29kZQp1c2VkIG9uZSAicHJvY2VzcyBsYXRjaCIgdGhhdCB3YXMgc2hhcmVkIGZvciBh bGwgd2FrZXVwcy4gVGhlIG9ubHkKZXhjZXB0aW9uIHdhcyB0aGUgInJlY292ZXJ5V2FrZXVw TGF0Y2giLiBJIHRoaW5rIHRoZSByZWFzb24gdGhhdCB3ZQplbmRlZCB1cCBqdXN0IHNoYXJp bmcgdGhlIHNhbWUgbGF0Y2ggZm9yIGFsbCB3YWtldXBzIGlzIHRoYXQgaXQgd2FzCmN1bWJl cnNvbWUgaW4gcHJhY3RpY2UgdG8gZGVhbCB3aXRoIG11bHRpcGxlIGxhdGNoZXMuIEZvciBz dGFydGVycywKdGhlcmUgd2FzIG5vIG1hY2hpbmVyeSBmb3Igd2FpdGluZyBmb3IgbXVsdGlw bGUgbGF0Y2hlcyBhdCB0aGUgc2FtZQp0aW1lLiBTZWNvbmRseSwgY2hhbmdpbmcgdGhlICJv d25lcnNoaXAiIG9mIGEgbGF0Y2ggbmVlZGVkIGV4dHJhCmxvY2tpbmcgb3Igb3RoZXIgY29v cmRpbmF0aW9uLiBUaGlyZGx5LCBlYWNoIGludGVyLXByb2Nlc3MgbGF0Y2gKbmVlZGVkIHRv IGJlIGluaXRpYWxpemVkIGF0IHBvc3RtYXN0ZXIgc3RhcnR1cCB0aW1lLgoKVGhpcyBwYXRj aCBlbWJyYWNlcyB0aGUgcmVhbGl0eSBvZiBob3cgTGF0Y2hlcyB3ZXJlIHVzZWQsIGFuZCBy ZXBsYWNlcwp0aGUgTGF0Y2hlcyB3aXRoIGEgcGVyLXByb2Nlc3MgaW50ZXJydXB0IG1hc2su IFlvdSBjYW4gbm8gbG9uZ2VyCmFsbG9jYXRlIExhdGNoZXMgaW4gYXJiaXRyYXJ5IHNoYXJl ZCBtZW1vcnkgc3RydWN0cyBhbmQgYW4gaW50ZXJydXB0CmlzIGFsd2F5cyBkaXJlY3RlZCBh dCBhIHBhcnRpY3VsYXIgcHJvY2VzcywgYWRkcmVzc2VkIGJ5IGl0cwpQcm9jTnVtYmVyLiBF YWNoIHByb2Nlc3MgaGFzIGEgYml0bWFzayBvZiBwZW5kaW5nIGludGVycnVwdHMgaW4KUEdQ Uk9DLgoKVGhpcyByZXBsYWNlcyBQcm9jU2lnbmFscyBhbmQgbWFueSBkaXJlY3QgdXNlcyBv ZiBVbml4IHNpZ25hbHMgd2l0aAppbnRlcnJ1cHRzLiBGb3IgZXhhbXBsZSwgdGhlIGJhY2tl bmQtcHJpdmF0ZSBQcm9jRGllUGVuZGluZyBmbGFnIGlzCnJlcGxhY2VkIHdpdGggdGhlIElO VEVSUlVQVF9URVJNSU5BVEUgaW50ZXJydXB0LiBTSUdURVJNIGNhbiBzdGlsbCBiZQp1c2Vk IHRvIHJhaXNlIGl0LCBidXQgdGhlIGRlZmF1bHQgU0lHVEVSTSBzaWduYWwgaGFuZGxlciBu b3cganVzdApyYWlzZXMgSU5URVJSVVBUX1RFUk1JTkFURS4KCkhhbmRsaW5nIGludGVycnVw dHMKLS0tLS0tLS0tLS0tLS0tLS0tLQoKVG8gY29udHJvbCB3aGljaCBpbnRlcnJ1cHRzIGNh biBiZSBwcm9jZXNzZWQgYXQgd2hhdCB0aW1lLCB0aGVyZSBhcmUgYQpmZXcgbWVjaGFuaXNt cy4gRmlyc3RseSwgeW91IGNhbiByZWdpc3RlciBhIGhhbmRsZXIgZnVuY3Rpb24gZm9yIGVh Y2gKaW50ZXJydXB0LCB3aGljaCB3aWxsIGJlIGNhbGxlZCBmcm9tIENIRUNLX0ZPUl9JTlRF UlJVUFRTKCkgaWYgdGhlCmludGVycnVwdCBpcyBwZW5kaW5nLiBBZnRlciB0aGlzIGNvbW1p dCwgUHJvY2Vzc0ludGVycnVwdHMoKSBoYXMgbm8Ka25vd2xlZGdlIGFib3V0IHRoZSBtZWFu aW5nIG9mIHRoZSBkaWZmZXJlbnQgaW50ZXJydXB0cywgaXQganVzdCBjYWxscwp0aGUgcmVn aXN0ZXJlZCBjYWxsYmFjayBmdW5jdGlvbnMuIERpZmZlcmVudCBwcm9jZXNlc3MgY2FuIHNl dCB1cApkaWZmZXJlbnQgaGFuZGxlcnMsIGFjY29yZGluZyB0byB0aGVpciBuZWVkcywgYnV0 IHNvbWUgY29tbW9ubHkgdXNlZApoYW5kbGVycyBhcmUgcHJvdmlkZWQgYW5kIGluc3RhbGxl ZCBkdXJpbmcgYmFja2VuZCBzdGFydHVwLgoKSW4gYWRkaXRpb24gdG8gQ0hFQ0tfRk9SX0lO VEVSUlVQVFMoKSwgeW91IGNhbiBhbHNvIGNoZWNrIHdoZXRoZXIgYQpwYXJ0aWN1bGFyIGlu dGVycnVwdCBpcyBwZW5kaW5nIGFuZCBoYW5kbGUgaXQgeW91cnNlbGYuCgpNb3N0IGNhbGxl cnMgb2YgV2FpdEludGVycnVwdCAod2hpY2ggcmVwbGFjZXMgV2FpdExhdGNoKSB1c2UKQ2hl Y2tGb3JJbnRlcnJ1cHRNYXNrLCB3aGljaCBpcyBhIGJpdG1hc2sgdGhhdCBpbmNsdWRlcyBh bGwgdGhlCmludGVycnVwdHMgdGhhdCBhcmUgaGFuZGxlZCBieSBDSEVDS19GT1JfSU5URVJS VVBUUygpIGluIHRoZSBjdXJyZW50CnN0YXRlLiBDSEVDS19GT1JfSU5URVJSVVBUUygpIGNs ZWFycyB0aGUgaW50ZXJydXB0cyBiaXRzIHRoYXQgaXQKcHJvY2Vzc2VzLCB0aGUgY2FsbGVy IGlzIG5vIGxvbmdlciByZXF1aXJlZCB0byBkbyBDbGVhckludGVycnVwdCAob3IKUmVzZXRM YXRjaCkgZm9yIHRob3NlIGJpdHMuIElmIHlvdSB3YWtlIHVwIGZvciBvdGhlciBpbnRlcnJ1 cHRzIHRoYXQKYXJlIG5vdCBoYW5kbGVkIGJ5IENIRUNLX0ZPUl9JTlRFUlJVUFRTKCksIHlv dSBzdGlsbCBuZWVkIHRvIGNsZWFyCnRob3NlLgoKTm93IHRoYXQgdGhlcmUgYXJlIHNlcGFy YXRlIGJpdHMgZm9yIGRpZmZlcmVudCB0aGluZ3MsIGl0J3MgcG9zc2libGUKdG8gZG8gZS5n LiBXYWl0SW50ZXJydXB0KElOVEVSUlVQVF9DT05GSUdfUkVMT0FEIHwKSU5URVJSVVBUX1FV RVJZX0NBTkNFTCkgdG8gd2FpdCBqdXN0IGZvciBhIGNvbmZpZyByZWxvYWQgcmVxdWVzdCBv cgpxdWVyeSBjYW5jZWxsYXRpb24sIGFuZCBub3Qgd2FrZSB1cCBvbiBvdGhlciBldmVudHMg bGlrZSBhIHNodXRkb3duCnJlcXVlc3QuIFRoYXQncyBub3QgdmVyeSB1c2VmdWwgaW4gcHJh Y3RpY2UsIGFzIENIRUNLX0ZPUl9JTlRFUlJVUFRTKCkKc3RpbGwgcHJvY2Vzc2VzIHRob3Nl IGludGVycnVwdHMgaWYgeW91IGNhbGwgaXQsIGFuZCB5b3Ugd291bGQgd2FudCB0bwpwcm9j ZXNzIGFsbCB0aGUgc3RhbmRhcmQgaW50ZXJydXB0cyBwcm9tcHRseSBhbnl3YXkuIEl0IG1p Z2h0IGJlCnVzZWZ1bCB0byBjaGVjayBmb3Igc3BlY2lmaWMgaW50ZXJydXB0cyB3aXRoIElu dGVycnVwdFBlbmRpbmcoKSwKd2l0aG91dCBpbW1lZGlhdGVseSBwcm9jZXNzaW5nIHRoZW0s IGhvd2V2ZXIuIHNwZ2RvaW5zZXJ0KCkgZG9lcwpzb21ldGhpbmcgbGlrZSB0aGF0LiBJbiB0 aGlzIGNvbW1pdCBJIGRpZG4ndCBjaGFuZ2UgaXRzIG92ZXJhbGwgbG9naWMsCmJ1dCBpdCBw cm9iYWJseSBjb3VsZCBiZSBtYWRlIG1vcmUgZmluZS1ncmFpbmVkIG5vdy4KCk1vcmUgaW1w b3J0YW50bHksIHlvdSBjYW4gbm93IGhhdmUgYWRkaXRpb25hbCBpbnRlcnJ1cHRzIHRoYXQg YXJlCnByb2Nlc3NlZCBsZXNzIGZyZXF1ZW50bHkgYW5kIGRvIG5vdCB3YWtlIHVwIHRoZSBi YWNrZW5kIHdoZW4gaXQncyBub3QKcHJlcGFyZWQgdG8gcHJvY2VzcyB0aGVtLiBGb3IgZXhh bXBsZSwgdGhlIFNJTlZBTF9DQVRDSFVQIGludGVycnVwdCBpcwpvbmx5IHByb2Nlc3NlZCB3 aGVuIHRoZSBiYWNrZW5kIGlzIGlkbGUuIFByZXZpb3VzbHksIGEgY2F0Y2h1cCByZXF1ZXN0 CndvdWxkIHdha2UgdXAgdGhlIHByb2Nlc3Mgd2hldGhlciBpdCB3YXMgcmVhZHkgdG8gaGFu ZGxlIGl0IG9yIG5vdDsKbm93IGl0IG9ubHkgd2FrZXMgdXAgd2hlbiB0aGUgYmFja2VuZCBp cyBpZGxlLiBUaGF0J3Mgbm90IHRvbwpzaWduaWZpY2FudCBmb3IgY2F0Y2h1cCBpbnRlcnJ1 cHRzIGJlY2F1c2UgdGhleSBkb24ndCBvY2N1ciB0aGF0IG9mdGVuCmFueXdheSwgYnV0IGl0 J3Mgc3RpbGwgbmljZSBhbmQgY291bGQgYmUgbW9yZSBzaWduaWZpY2FudCB3aXRoIG90aGVy CmludGVycnVwdHMuCgpUaGVyZSdzIHN0aWxsIGEgZ2VuZXJhbC1wdXJwb3NlIElOVEVSUlVQ VF9XQUlUX1dBS0VVUCBpbnRlcnJ1cHQgdGhhdAppcyBtdWx0aXBsZXhlZCBmb3IgbWFueSBk aWZmZXJlbnQgcHVycG9zZXMgaW4gZGlmZmVyZW50IHByb2Nlc3NlcywgZm9yCmV4YW1wbGUg dG8gd2FrZSB1cCB0aGUgd2Fsd3JpdGVyIHdoZW4gaXQgaGFzIHdvcmsgdG8gZG8sIGFuZCB0 byB3YWtlCnVwIHByb2Nlc3NlcyB3YWl0aW5nIG9uIGEgY29uZGl0aW9uIHZhcmlhYmxlLiBU aGUgY29tbW9uIHByb3BlcnR5IG9mCnRob3NlIHVzZXMgaXMgdGhhdCB0aGVyZSdzIHNvbWUg b3RoZXIgZmxhZyBvciBjb25kaXRpb24gdGhhdCBpcwpjaGVja2VkIG9uIGVhY2ggd2FrZXVw LCB0aGUgd2FrZXVwIGludGVycnVwdCBpdHNlbGYgbWVhbnMgbWVyZWx5IHRoYXQKc29tZXRo aW5nIGludGVyZXN0aW5nIG1pZ2h0J3ZlIGhhcHBlbmVkLgoKUmVwbGFjaW5nIHJlY292ZXJ5 V2FrZXVwTGF0Y2gKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoZSBJTlRFUlJV UFRfUkVDT1ZFUllfQ09OVElOVUUgcmVwbGFjZXMgcmVjb3ZlcnlXYWtldXBMYXRjaC4gV2l0 aAp0aGlzIG5ldyBpbnRlcmZhY2UsIHRoZSBzdGFydHVwIHByb2Nlc3MgY2FuIGVhc2lseSB3 YWl0IGZvciB0aGUgY29tbW9uCmludGVycnVwdHMgYXQgdGhlIHNhbWUgdGltZSBhcyBJTlRF UlJVUFRfUkVDT1ZFUllfQ09OVElOVUUuClByZXZpb3VzbHksIHRoZSBjb2RlIHRoYXQgd2Fp dGVkIG9uIHJlY292ZXJ5V2FrZXVwTGF0Y2ggaGFkIHRvIHJlc29ydAp0byB0aW1lb3V0cyB0 byByZWFjdCB0byBvdGhlciBzaWduYWxzLCBiZWNhdXNlIGl0IHdhcyBub3QgcG9zc2libGUg dG8Kd2FpdCBmb3IgdHdvIGxhdGNoZXMgYXQgdGhlIHNhbWUgdGltZS4gUHJldmlvdXMgYXR0 ZW1wdCBhdCB1bmlmeWluZwp0aG9zZSB3YWtldXBzIHdhcyBpbiBjb21taXQgYWMyMjkyOWEy NiwgYnV0IGl0IHdhcyByZXZlcnRlZCBpbiBjb21taXQKMDBmNjkwYTIzOSBiZWNhdXNlIGl0 IGNhdXNlZCBhIGxvdCBvZiBzcHVyaW91cyB3YWtldXBzIHdoZW4gdGhlCnN0YXJ0dXAgcHJv Y2VzcyB3YXMgd2FpdGluZyBmb3IgcmVjb3ZlcnkgY29uZmxpY3RzLiBUaGUgbmV3IG1hY2hp bmVyeQphdm9pZHMgdGhhdCBwcm9ibGVtIGJ5IG1ha2luZyBpdCBlYXN5IHRvIHdhaXQgZm9y IHR3byBpbnRlcnJ1cHRzIGF0CnRoZSBzYW1lIHRpbWUuCgpGaXggbG9zdCB3YWtldXAgaXNz dWUgaW4gbG9naWNhbCByZXBsaWNhdGlvbiBsYXVuY2hlcgotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKU2ltaWxhcmx5IHRoZXJlJ3Mg bm93IGEgZGVkaWNhdGVkIGludGVycnVwdCBiaXQgdG8gbm90aWZ5IHRoZSBsb2dpY2FsCnJl cGxpY2F0aW9uIGxhdW5jaGVyIGFib3V0IHN1YnNjcmlwdGlvbiBjaGFuZ2VzLiBUaGF0IGZp eGVzIHRoZSBsb3N0IHdha2V1cCBpc3N1ZSBkaXNjdXNzZWQgYXQ6CiAgRGlzY3Vzc2lvbjog aHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC80NzY2NzJlNy02MmYxLTRj YWItYTgyMi1mM2E4ZTk0OWRkM2ZAaWtpLmZpCiAgRGlzY3Vzc2lvbjogaHR0cHM6Ly93d3cu cG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC9mZjA2NjNkOS04MDExLTQyMGYtYTE2OS1lZmJm NTczMjdjYjVAaWtpLmZpCgpCYWNrZ3JvdW5kIHdvcmtlciBzdGF0ZSBjaGFuZ2Ugbm90aWZp Y2F0aW9uCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCklO VEVSUlVQVF9XQUlUX1dBS0VVUCBpcyB1c2VkIGZvciBiZ3dvcmtlciBzdGF0ZSBjaGFuZ2Ug bm90aWZpY2F0aW9uLgpBcyBwYXJ0IG9mIGEgcHJvamVjdCB0byByZW1vdmUgdGhlIHJlbGlh bmNlIG9uIFBJRHMgdG8gaWRlbnRpZnkKYmFja2VuZHMsIGJhY2tlbmRzIHRoYXQgcmVnaXN0 ZXIgZHluYW1pYyBiYWNrZ3JvdW5kIHdvcmtlcnMgd2lsbCBub3cKcmVjZWl2ZSBJTlRFUlJV UFRfV0FJVF9XQUtFVVAgc2VudCBkaXJlY3RseSBieSB0aGUgcG9zdG1hc3RlciB3aGVuIHRo ZQp3b3JrZXIgc3RhdGUgY2hhbmdlcy4gIFByZXZpb3VzbHksIHRoZSBwb3N0bWFzdGVyIHdv dWxkIHNlbmQgYSBTSUdVU1IxCnNpZ25hbCwgd2hpY2ggcmVsaWVkIG9uIHRoZSBQcm9jU2ln bmFsIHN5c3RlbSdzIGhhbmRsZXIgc2V0dGluZyB0aGUKaW50ZXJydXB0IGZsYWcsIHdpdGgg dGhlIHNhbWUgZW5kIGVmZmVjdC4gIE5vdyB0aGF0IGludGVybWVkaWF0ZSBzdGVwCmlzIHNr aXBwZWQuCgpUaGUgZmllbGQgYmd3X25vdGlmeV9waWQgc3RpbGwgZXhpc3RzIGZvciBiYWNr d2FyZHMgY29tcGF0aWJpbGl0eSwgYnV0CmhhcyBubyBlZmZlY3QgYW5kIG1heSBiZSByZW1v dmVkIGluIGEgbGF0ZXIgcmVsZWFzZS4KUmVnaXN0ZXJCYWNrZ3JvdW5kV29ya2VyKCkgbm93 IGF1dG9tYXRpY2FsbHkgYXNzdW1lcyB0aGF0IHRoZSBjYWxsZXIKd291bGQgbGlrZSBzdGF0 ZSBjaGFuZ2Ugbm90aWZpY2F0aW9ucyBkZWxpdmVyZWQgdG8gaXRzIHByb2MgbnVtYmVyLAp1 bmxlc3MgQkdXX05PX05PVElGWSBpcyBzZXQgaW4gYmd3X2ZsYWdzLgoKUmVtb3Zpbmcgb3Ro ZXIgY2FzZXMgb2YgUElEcyBmcm9tIHRoZSBiZ3dvcmtlciBBUEkgaXMgbGVmdCBmb3IgbGF0 ZXIKd29yazsgdGhpcyBwYXRjaCBpcyBjb25jZXJuZWQgb25seSB3aXRoIHJlbW92aW5nIGEg ZGVwZW5kZW5jeSBvbgpQcm9jU2lnbmFsIGluZnJhc3RydWN0dXJlIHRoYXQgaXMgZHVlIHRv IGJlIHJlbW92ZWQgYnkgYSBsYXRlciBjb21taXQuCgpYWFg6IG9yaWdpbmFsIHRleHQgZnJv bSBUaG9tYXMncyBwYXRjaAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQoKIlByb2NTaWduYWxzIiB3ZXJlIGEgdHdvLXN0ZXAgd2F5IGZvciBvbmUgYmFja2VuZCB0 byBhc2sgYW5vdGhlciBiYWNrZW5kCnRvIGRvIHNvbWV0aGluZywgYnkgbXVsdGlwbGV4aW5n IFNJR1VTUjEuICBIaXN0b3JpY2FsbHksIHJlYWwgd29yayB3YXMKZG9uZSBpbiB0aGUgU0lH VVNSMSBoYW5kbGVyLCBidXQgY29tbWl0IDBkYTA5NmQ3IHJlbW92ZWQgdGhlIGxhc3QgY2Fz ZQpvZiB0aGF0LiAgTm93IHRoZSBoYW5kbGVyIGp1c3Qgc2V0ICJpbnRlcnJ1cHQgcGVuZGlu ZyIgZmxhZ3MsIGNhbGxlZApTZXRMYXRjaChNeUxhdGNoKSB0byBjbG9zZSByYWNlcywgYW5k IHRoZW4gZGlkIGFsbCB0aGUgaW50ZXJlc3Rpbmcgd29yawphdCB0aGUgbmV4dCBDSEVDS19G T1JfSU5URVJSVVBUUygpIGNhbGwuCgpUaGlzIGNvbW1pdCByZW1vdmVzIHRoZSBQcm9jU2ln bmFsIHN0ZXAsIHJlcGxhY2luZyBQcm9jU2lnbmFscyB3aXRoCkludGVycnVwdHMuCgpCZW5l Zml0cyBvZiB0aGlzIHJlZmFjdG9yaW5nIGluY2x1ZGUgcmVtb3ZpbmcgdW5uZWNlc3Nhcnkg Y29uY2VwdHMgYW5kCnRlcm1pbm9sb2d5LCBhdm9pZGluZyB0aGUgcmlzayBvZiBwZW9wbGUg cHV0dGluZyBidWdneSBjb2RlIGJhY2sgaW50bwpzaWduYWwgaGFuZGxlcnMsIHJlbW92aW5n IGEgd2hvbGUgbG90IG9mIGdsb2JhbCB2YXJpYWJsZXMsIHJlbW92aW5nCmRlcGVuZGVuY2ll cyBvbiBQSURzIGFuZCB0aGUgcHJvY2VzcyBtb2RlbCwgcmVtb3Zpbmcgcmlza3Mgb2Ygc2Vu ZGluZwphIHNpZ25hbCB0aGF0IGhhcyBkZWZhdWx0IGFjdGlvbiBvZiB0ZXJtaW5hdGlvbiB0 byB0aGUgd3JvbmcgcHJvY2VzcywKYW5kIHRha2luZyBhIHN0ZXAgdG93YXJkcyBiZWluZyBh YmxlIHJlbW92ZSB0aGUgZmFrZSBzaWduYWwgc3lzdGVtCmZyb20gdGhlIFdpbmRvd3MgcG9y dC4KCk5vdGFibGUgY2hhbmdlczoKCiAqIGFsbCBjYWxscyB0byBTZW5kUHJvY1NpZ25hbChw aWQsIFBST0NTSUdfWFhYKSBiZWNvbWUKICAgU2VuZEludGVycnVwdChJTlRFUlJVUFRfWFhY LCBwcm9jbm8pCiAqIGFsbCBYeHhQZW5kaW5nIGdsb2JhbCB2YXJpYWJsZXMgYXJlIGdvbmU7 IHRoZXkgYXJlIHJlcHJlc2VudGVkCiAgIGFzIGJpdHMgaW4gTXlQcm9jLT5wZW5kaW5nX2lu dGVycnVwdHMKICogdGhlIFNJR1VTUjEgaGFuZGxlciBpcyBnb25lCiAqIHBsYWNlcyB0aGF0 IGtub3cgdGhlIFBJRHMgb2Ygb3RoZXIgYmFja2VuZHMgbXVzdCBub3cgdXNlIHByb2Nub3MK ICAgaW5zdGVhZAoKVGhlIG9ubHkgY29kZSBsZWZ0IGluIHNyYy9iYWNrZW5kL3N0b3JhZ2Uv aXBjL3Byb2NzaWduYWwuYyByZWxhdGVzIHRvClByb2NTaWduYWxCYXJyaWVycy4gIFhYWCBU aG9zZSBzaG91bGQgcGVyaGFwcyBiZSByZW5hbWVkLgoKU0lHVVNSMSBjYW4gbm93IGJlIHNl dCB0byBTSUdfSUdOIGluIG1vc3QgYmFja2VuZHMuICBTb21lIHNwZWNpYWwgY2FzZXMKcmVt YWluLCB0aGF0IHdlcmUgbm90IHVzaW5nIHRoZSBnZW5lcmFsIHNpZ3VzcjFfaGFuZGxlciAo bm93IHJlbW92ZWQpLgotLS0KIGNvbnRyaWIvcGdfcHJld2FybS9hdXRvcHJld2FybS5jICAg ICAgICAgICAgICB8ICA2MyArLQogY29udHJpYi9wb3N0Z3Jlc19mZHcvY29ubmVjdGlvbi5j ICAgICAgICAgICAgIHwgIDIxICstCiBjb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19m ZHcuYyAgICAgICAgICAgfCAgIDQgKy0KIGRvYy9zcmMvc2dtbC9iZ3dvcmtlci5zZ21sICAg ICAgICAgICAgICAgICAgICB8ICAzMiArLQogZG9jL3NyYy9zZ21sL29hdXRoLXZhbGlkYXRv cnMuc2dtbCAgICAgICAgICAgIHwgICAyICstCiBkb2Mvc3JjL3NnbWwvc291cmNlcy5zZ21s ICAgICAgICAgICAgICAgICAgICAgfCAgMTEgKy0KIHNyYy9iYWNrZW5kL01ha2VmaWxlICAg ICAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvYnJp bi9icmluX3BhZ2VvcHMuYyAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9i cmluL2JyaW5fcmV2bWFwLmMgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvYWNjZXNz L2NvbW1vbi90b2FzdF9pbnRlcm5hbHMuYyAgIHwgICAyICstCiBzcmMvYmFja2VuZC9hY2Nl c3MvZ2luL2dpbmJ0cmVlLmMgICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2Fj Y2Vzcy9naW4vZ2luZGF0YXBhZ2UuYyAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQv YWNjZXNzL2dpbi9naW5mYXN0LmMgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5k L2FjY2Vzcy9naW4vZ2luZ2V0LmMgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2Vu ZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYyAgICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNr ZW5kL2FjY2Vzcy9naW4vZ2ludmFjdXVtLmMgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFj a2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2Jh Y2tlbmQvYWNjZXNzL2dpc3QvZ2lzdGdldC5jICAgICAgICAgICAgIHwgICAyICstCiBzcmMv YmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0dmFjdXVtLmMgICAgICAgICAgfCAgIDIgKy0KIHNy Yy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYyAgICAgICAgICAgICAgICB8ICAgMiArLQog c3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaGluc2VydC5jICAgICAgICAgIHwgICAyICst CiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNob3ZmbC5jICAgICAgICAgICAgfCAgIDIg Ky0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMgICAgICAgICAgICB8ICAg MiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHNlYXJjaC5jICAgICAgICAgIHwg ICAyICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoc29ydC5jICAgICAgICAgICAg fCAgIDIgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3BydW5laGVhcC5jICAgICAgICAg ICB8ICAgMiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmFjdXVtbGF6eS5jICAgICAg ICAgIHwgIDEwICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92aXNpYmlsaXR5bWFwLmMg ICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jICAgICAg ICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idGRlZHVwLmMg ICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0aW5zZXJ0 LmMgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRwYWdl LmMgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2Vh cmNoLmMgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGdk b2luc2VydC5jICAgICAgIHwgICA5ICstCiBzcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3Nw Z2luc2VydC5jICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qv c3Bnc2Nhbi5jICAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lz dC9zcGd2YWN1dW0uYyAgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS9SRUFETUUgICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90 cmFuc2FtL1JFQURNRS5wYXJhbGxlbCAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0vZ2VuZXJpY194bG9nLmMgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS9wYXJhbGxlbC5jICAgICAgICAgfCAgNzggKy0tCiBzcmMvYmFja2VuZC9h Y2Nlc3MvdHJhbnNhbS9zbHJ1LmMgICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL3R3b3BoYXNlLmMgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2Vu ZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMgICAgICAgICAgICAgfCAgMTQgKy0KIHNyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dmdW5jcy5jICAgICAgICB8ICAxMiArLQogc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMgICAgIHwgMTIwICsrLS0KIHNy Yy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2d3YWl0LmMgICAgICAgICB8ICAzOSArLQog c3JjL2JhY2tlbmQvYmFja3VwL2Jhc2ViYWNrdXBfdGhyb3R0bGUuYyAgICAgIHwgIDE4ICst CiBzcmMvYmFja2VuZC9ib290c3RyYXAvYm9vdHBhcnNlLnkgICAgICAgICAgICAgfCAgIDIg Ky0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMgICAgICAgICAgICAgICAgICB8IDE1 MSArKy0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb21wYXJzZS5jICAgICAgICAg IHwgIDExICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW0uYyAgICAgICAgICAgICAg ICAgfCAgMTMgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBlbmQuYyAgICAgICAg ICAgICB8ICAyNCArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUdhdGhlci5jICAgICAg ICAgICAgIHwgIDEwICstCiBzcmMvYmFja2VuZC9pcGMvTWFrZWZpbGUgICAgICAgICAgICAg ICAgICAgICAgfCAgMTkgKwogc3JjL2JhY2tlbmQvaXBjL1JFQURNRS5tZCAgICAgICAgICAg ICAgICAgICAgIHwgMjcyICsrKysrKysrCiBzcmMvYmFja2VuZC9pcGMvaW50ZXJydXB0LmMg ICAgICAgICAgICAgICAgICAgfCA0MTggKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9pcGMv bWVzb24uYnVpbGQgICAgICAgICAgICAgICAgICAgfCAgIDYgKwogc3JjL2JhY2tlbmQvaXBj L3NpZ25hbF9oYW5kbGVycy5jICAgICAgICAgICAgIHwgMTU1ICsrKysrCiBzcmMvYmFja2Vu ZC9saWJwcS9hdXRoLmMgICAgICAgICAgICAgICAgICAgICAgfCAgIDkgKy0KIHNyYy9iYWNr ZW5kL2xpYnBxL2JlLXNlY3VyZS1nc3NhcGkuYyAgICAgICAgICB8ICAxNSArLQogc3JjL2Jh Y2tlbmQvbGlicHEvYmUtc2VjdXJlLW9wZW5zc2wuYyAgICAgICAgIHwgICA3ICstCiBzcmMv YmFja2VuZC9saWJwcS9iZS1zZWN1cmUuYyAgICAgICAgICAgICAgICAgfCAgNjEgKy0KIHNy Yy9iYWNrZW5kL2xpYnBxL3BxY29tbS5jICAgICAgICAgICAgICAgICAgICB8ICAzNiArLQog c3JjL2JhY2tlbmQvbGlicHEvcHFtcS5jICAgICAgICAgICAgICAgICAgICAgIHwgIDI5ICst CiBzcmMvYmFja2VuZC9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEg Kwogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9NYWtlZmlsZSAgICAgICAgICAgICAgIHwgICAx IC0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5jICAgICAgICAgICB8IDE1 NyArKy0tLQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXhwcm9jZXNzLmMgICAgICAgICAg IHwgICAyICstCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMgICAgICAgICAg ICAgfCAxNjggKystLS0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3cml0ZXIuYyAgICAg ICAgICAgICB8ICA1OCArLQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9jaGVja3BvaW50ZXIu YyAgICAgICAgIHwgMTk0ICsrKy0tLQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9pbnRlcnJ1 cHQuYyAgICAgICAgICAgIHwgMTA4IC0tLS0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvbWVz b24uYnVpbGQgICAgICAgICAgICB8ICAgMSAtCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bn YXJjaC5jICAgICAgICAgICAgICAgfCAxMDMgKystCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVy L3Bvc3RtYXN0ZXIuYyAgICAgICAgICAgfCAgOTAgKystCiBzcmMvYmFja2VuZC9wb3N0bWFz dGVyL3N0YXJ0dXAuYyAgICAgICAgICAgICAgfCAxMTMgKystLQogc3JjL2JhY2tlbmQvcG9z dG1hc3Rlci9zeXNsb2dnZXIuYyAgICAgICAgICAgIHwgIDM3ICstCiBzcmMvYmFja2VuZC9w b3N0bWFzdGVyL3dhbHN1bW1hcml6ZXIuYyAgICAgICAgfCAgODQgKystCiBzcmMvYmFja2Vu ZC9wb3N0bWFzdGVyL3dhbHdyaXRlci5jICAgICAgICAgICAgfCAgNDYgKy0KIC4uLi9saWJw cXdhbHJlY2VpdmVyL2xpYnBxd2FscmVjZWl2ZXIuYyAgICAgICB8ICAgMSAtCiAuLi4vcmVw bGljYXRpb24vbG9naWNhbC9hcHBseXBhcmFsbGVsd29ya2VyLmMgfCAxNDEgKystLQogc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sYXVuY2hlci5jICAgIHwgMTI2ICsrLS0K IC4uLi9yZXBsaWNhdGlvbi9sb2dpY2FsL3NlcXVlbmNlc3luYy5jICAgICAgICB8ICAgNiAr LQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9zbG90c3luYy5jICAgIHwgIDkw ICstLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC90YWJsZXN5bmMuYyAgIHwg IDM3ICstCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jICAgICAg fCAgNDkgKy0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Nsb3QuYyAgICAgICAgICAgICAg ICB8ICAzNyArLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vc3luY3JlcC5jICAgICAgICAg ICAgIHwgIDQyICstCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxyZWNlaXZlci5jICAg ICAgICAgfCAgNjAgKy0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVyZnVu Y3MuYyAgICB8ICAgMyArLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2Fsc2VuZGVyLmMg ICAgICAgICAgIHwgMjEyICsrKy0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvLmMg ICAgICAgICAgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9haW9f aW8uYyAgICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21l dGhvZF93b3JrZXIuYyAgICAgICB8ICA3MyArKy0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVm ZmVyL2J1Zm1nci5jICAgICAgICAgICB8ICAyMSArLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9i dWZmZXIvZnJlZWxpc3QuYyAgICAgICAgIHwgIDI3ICstCiBzcmMvYmFja2VuZC9zdG9yYWdl L2lwYy9NYWtlZmlsZSAgICAgICAgICAgICAgfCAgIDEgLQogc3JjL2JhY2tlbmQvc3RvcmFn ZS9pcGMvZHNtX2ltcGwuYyAgICAgICAgICAgIHwgICAyICsKIHNyYy9iYWNrZW5kL3N0b3Jh Z2UvaXBjL2lwYy5jICAgICAgICAgICAgICAgICB8ICAgOSArLQogc3JjL2JhY2tlbmQvc3Rv cmFnZS9pcGMvbGF0Y2guYyAgICAgICAgICAgICAgIHwgMzg5IC0tLS0tLS0tLS0tCiBzcmMv YmFja2VuZC9zdG9yYWdlL2lwYy9tZXNvbi5idWlsZCAgICAgICAgICAgfCAgIDEgLQogc3Jj L2JhY2tlbmQvc3RvcmFnZS9pcGMvcG1zaWduYWwuYyAgICAgICAgICAgIHwgMTAwICsrLQog c3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5LmMgICAgICAgICAgIHwgIDIyICst CiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMgICAgICAgICAgfCAyMjUg Ky0tLS0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2htX21xLmMgICAgICAgICAgICAg IHwgMTI3ICsrLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NpZ25hbGZ1bmNzLmMgICAg ICAgICB8ICAxMiArLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2ludmFsLmMgICAgICAg ICAgICAgIHwgIDYwICstCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaW52YWxhZHQuYyAg ICAgICAgICAgfCAgMjIgKy0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3N0YW5kYnkuYyAg ICAgICAgICAgICB8ICAzNyArLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvd2FpdGV2ZW50 c2V0LmMgICAgICAgIHwgMzk2ICsrKysrKy0tLS0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9s bWdyL2NvbmRpdGlvbl92YXJpYWJsZS5jIHwgIDM1ICstCiBzcmMvYmFja2VuZC9zdG9yYWdl L2xtZ3IvcHJlZGljYXRlLmMgICAgICAgICAgfCAgIDkgKy0KIHNyYy9iYWNrZW5kL3N0b3Jh Z2UvbG1nci9wcm9jLmMgICAgICAgICAgICAgICB8IDEzNiArKy0tCiBzcmMvYmFja2VuZC9z dG9yYWdlL3NtZ3Ivc21nci5jICAgICAgICAgICAgICAgfCAgIDQgKy0KIHNyYy9iYWNrZW5k L3N0b3JhZ2Uvc3luYy9zeW5jLmMgICAgICAgICAgICAgICB8ICAgNiArLQogc3JjL2JhY2tl bmQvdGNvcC9iYWNrZW5kX3N0YXJ0dXAuYyAgICAgICAgICAgIHwgICA4ICsKIHNyYy9iYWNr ZW5kL3Rjb3AvcG9zdGdyZXMuYyAgICAgICAgICAgICAgICAgICB8IDYwMyArKysrKysrKyst LS0tLS0tLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29ucGF0aF9ncmFtLnkgICAgICAg ICB8ICAgMiArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L21jeHRmdW5jcy5jICAgICAgICAg ICAgIHwgIDExICstCiBzcmMvYmFja2VuZC91dGlscy9hZHQvbWlzYy5jICAgICAgICAgICAg ICAgICAgfCAgMjUgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC90aW1lc3RhbXAuYyAgICAg ICAgICAgICB8ICAgNCArLQogc3JjL2JhY2tlbmQvdXRpbHMvZXJyb3IvZWxvZy5jICAgICAg ICAgICAgICAgIHwgICAxIC0KIHNyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jICAg ICAgICAgICAgICB8ICAyMyAtCiBzcmMvYmFja2VuZC91dGlscy9pbml0L21pc2Npbml0LmMg ICAgICAgICAgICAgfCAgNzggKy0tCiBzcmMvYmFja2VuZC91dGlscy9pbml0L3Bvc3Rpbml0 LmMgICAgICAgICAgICAgfCAgNDIgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvdGltZW91 dC5jICAgICAgICAgICAgICB8ICAgNyAtCiBzcmMvYmFja2VuZC91dGlscy9tbWdyL21jeHQu YyAgICAgICAgICAgICAgICAgfCAgMjQgKy0KIHNyYy9jb21tb24vc2NyYW0tY29tbW9uLmMg ICAgICAgICAgICAgICAgICAgICB8ICAgMiArLQogc3JjL2luY2x1ZGUvTWFrZWZpbGUgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy9wYXJh bGxlbC5oICAgICAgICAgICAgICAgICB8ICAgMiAtCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9h c3luYy5oICAgICAgICAgICAgICAgICAgfCAgIDYgLQogc3JjL2luY2x1ZGUvaXBjL2ludGVy cnVwdC5oICAgICAgICAgICAgICAgICAgIHwgMzY0ICsrKysrKysrKysrCiAuLi4vaW50ZXJy dXB0LmggPT4gaXBjL3NpZ25hbF9oYW5kbGVycy5ofSAgICAgfCAgIDYgKy0KIHNyYy9pbmNs dWRlL2xpYnBxL2xpYnBxLWJlLWZlLWhlbHBlcnMuaCAgICAgICB8ICA0OCArLQogc3JjL2lu Y2x1ZGUvbGlicHEvbGlicHEuaCAgICAgICAgICAgICAgICAgICAgIHwgICA0ICstCiBzcmMv aW5jbHVkZS9saWJwcS9wcW1xLmggICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKy0KIHNy Yy9pbmNsdWRlL21lc29uLmJ1aWxkICAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBz cmMvaW5jbHVkZS9taXNjYWRtaW4uaCAgICAgICAgICAgICAgICAgICAgICAgfCAxMzUgKy0t LQogc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9iZ3dvcmtlci5oICAgICAgICAgICAgIHwgIDEw ICstCiBzcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2Jnd29ya2VyX2ludGVybmFscy5oICAgfCAg IDQgKy0KIHNyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvc3RhcnR1cC5oICAgICAgICAgICAgICB8 ICAgNCArLQogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHdvcmtlci5oICAgICAg IHwgICA1IC0KIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Nsb3QuaCAgICAgICAgICAgICAg ICB8ICAgMiArLQogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd2Fsc2VuZGVyLmggICAgICAg ICAgIHwgICAxIC0KIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dhbHNlbmRlcl9wcml2YXRl LmggICB8ICAgMiArCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJuYWwu aCAgICAgfCAgIDUgKy0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvbGF0Y2guaCAgICAgICAgICAg ICAgICAgICB8IDE0MCAtLS0tCiBzcmMvaW5jbHVkZS9zdG9yYWdlL3Btc2lnbmFsLmggICAg ICAgICAgICAgICAgfCAgIDUgKwogc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jLmggICAgICAg ICAgICAgICAgICAgIHwgIDM1ICstCiBzcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NhcnJheS5o ICAgICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25h bC5oICAgICAgICAgICAgICB8ICAzMyAtCiBzcmMvaW5jbHVkZS9zdG9yYWdlL3NpbnZhbC5o ICAgICAgICAgICAgICAgICAgfCAgIDUgLQogc3JjL2luY2x1ZGUvc3RvcmFnZS93YWl0ZXZl bnRzZXQuaCAgICAgICAgICAgIHwgIDM1ICstCiBzcmMvaW5jbHVkZS90Y29wL3Rjb3Bwcm90 LmggICAgICAgICAgICAgICAgICAgfCAgIDcgLQogc3JjL2luY2x1ZGUvdXRpbHMvbWVtdXRp bHMuaCAgICAgICAgICAgICAgICAgIHwgICAxIC0KIHNyYy9pbmNsdWRlL3V0aWxzL3Bnc3Rh dF9pbnRlcm5hbC5oICAgICAgICAgICB8ICAgMSArCiBzcmMvcG9ydC9wZ19udW1hLmMgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDcgKy0KIHNyYy9wb3J0L3Bnc2xlZXAuYyAg ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgOCArLQogc3JjL3Rlc3QvaXNvbGF0aW9u L2lzb2xhdGlvbnRlc3Rlci5jICAgICAgICAgIHwgICAyICstCiBzcmMvdGVzdC9tb2R1bGVz L3Rlc3Rfc2htX21xL3NldHVwLmMgICAgICAgICAgfCAgMTUgKy0KIHNyYy90ZXN0L21vZHVs ZXMvdGVzdF9zaG1fbXEvdGVzdC5jICAgICAgICAgICB8ICAxNiArLQogc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X3NobV9tcS90ZXN0X3NobV9tcS5oICAgIHwgICAyICsKIHNyYy90ZXN0L21v ZHVsZXMvdGVzdF9zaG1fbXEvd29ya2VyLmMgICAgICAgICB8ICAxOSArLQogc3JjL3Rlc3Qv bW9kdWxlcy93b3JrZXJfc3BpL3dvcmtlcl9zcGkuYyAgICAgIHwgIDQ1ICstCiBzcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAgIDQgKy0KIDE2NiBm aWxlcyBjaGFuZ2VkLCAzNjEyIGluc2VydGlvbnMoKyksIDM2MTggZGVsZXRpb25zKC0pCiBj cmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvaXBjL01ha2VmaWxlCiBjcmVhdGUgbW9k ZSAxMDA2NDQgc3JjL2JhY2tlbmQvaXBjL1JFQURNRS5tZAogY3JlYXRlIG1vZGUgMTAwNjQ0 IHNyYy9iYWNrZW5kL2lwYy9pbnRlcnJ1cHQuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9i YWNrZW5kL2lwYy9tZXNvbi5idWlsZAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5k L2lwYy9zaWduYWxfaGFuZGxlcnMuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5k L3Bvc3RtYXN0ZXIvaW50ZXJydXB0LmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2Vu ZC9zdG9yYWdlL2lwYy9sYXRjaC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUv aXBjL2ludGVycnVwdC5oCiByZW5hbWUgc3JjL2luY2x1ZGUve3Bvc3RtYXN0ZXIvaW50ZXJy dXB0LmggPT4gaXBjL3NpZ25hbF9oYW5kbGVycy5ofSAoODIlKQogZGVsZXRlIG1vZGUgMTAw NjQ0IHNyYy9pbmNsdWRlL3N0b3JhZ2UvbGF0Y2guaAoKZGlmZiAtLWdpdCBhL2NvbnRyaWIv cGdfcHJld2FybS9hdXRvcHJld2FybS5jIGIvY29udHJpYi9wZ19wcmV3YXJtL2F1dG9wcmV3 YXJtLmMKaW5kZXggODllMTg3NDI1Y2MuLjZiZTVjYTljMTgzIDEwMDY0NAotLS0gYS9jb250 cmliL3BnX3ByZXdhcm0vYXV0b3ByZXdhcm0uYworKysgYi9jb250cmliL3BnX3ByZXdhcm0v YXV0b3ByZXdhcm0uYwpAQCAtMzAsMTcgKzMwLDE1IEBACiAKICNpbmNsdWRlICJhY2Nlc3Mv cmVsYXRpb24uaCIKICNpbmNsdWRlICJhY2Nlc3MveGFjdC5oIgorI2luY2x1ZGUgImlwYy9p bnRlcnJ1cHQuaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVy L2Jnd29ya2VyLmgiCi0jaW5jbHVkZSAicG9zdG1hc3Rlci9pbnRlcnJ1cHQuaCIKICNpbmNs dWRlICJzdG9yYWdlL2J1Zl9pbnRlcm5hbHMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2RzbS5o IgogI2luY2x1ZGUgInN0b3JhZ2UvZHNtX3JlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAic3RvcmFn ZS9mZC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvaXBjLmgiCi0jaW5jbHVkZSAic3RvcmFnZS9s YXRjaC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbHdsb2NrLmgiCi0jaW5jbHVkZSAic3RvcmFn ZS9wcm9jc2lnbmFsLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9yZWFkX3N0cmVhbS5oIgogI2lu Y2x1ZGUgInN0b3JhZ2Uvc21nci5oIgogI2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKQEAg LTE3MCwxMCArMTY4LDEzIEBAIGF1dG9wcmV3YXJtX21haW4oRGF0dW0gbWFpbl9hcmcpCiAJ Ym9vbAkJZmluYWxfZHVtcF9hbGxvd2VkID0gdHJ1ZTsKIAlUaW1lc3RhbXBUeiBsYXN0X2R1 bXBfdGltZSA9IDA7CiAKLQkvKiBFc3RhYmxpc2ggc2lnbmFsIGhhbmRsZXJzOyBvbmNlIHRo YXQncyBkb25lLCB1bmJsb2NrIHNpZ25hbHMuICovCi0JcHFzaWduYWwoU0lHVEVSTSwgU2ln bmFsSGFuZGxlckZvclNodXRkb3duUmVxdWVzdCk7Ci0JcHFzaWduYWwoU0lHSFVQLCBTaWdu YWxIYW5kbGVyRm9yQ29uZmlnUmVsb2FkKTsKLQlwcXNpZ25hbChTSUdVU1IxLCBwcm9jc2ln bmFsX3NpZ3VzcjFfaGFuZGxlcik7CisJLyoKKwkgKiBXZSB3aWxsIGNoZWNrIGZvciBJTlRF UlJVUFRfVEVSTUlOQVRFIGV4cGxpY2l0bHkgaW4gdGhlIG1haW4gbG9vcCwgc28KKwkgKiBk aXNhYmxlIHRoZSBub3JtYWwgaW50ZXJydXB0IGhhbmRsZXIuCisJICovCisJRGlzYWJsZUlu dGVycnVwdChJTlRFUlJVUFRfVEVSTUlOQVRFKTsKKworCS8qIERlZmF1bHQgc2lnbmFsIGhh bmRsZXJzIGFyZSBPSyBmb3IgdXM7IHVuYmxvY2sgc2lnbmFscy4gKi8KIAlCYWNrZ3JvdW5k V29ya2VyVW5ibG9ja1NpZ25hbHMoKTsKIAogCS8qIENyZWF0ZSAoaWYgbmVjZXNzYXJ5KSBh bmQgYXR0YWNoIHRvIG91ciBzaGFyZWQgbWVtb3J5IGFyZWEuICovCkBAIC0yMjIsMjcgKzIy MywyNyBAQCBhdXRvcHJld2FybV9tYWluKERhdHVtIG1haW5fYXJnKQogCWlmIChmaXJzdF90 aW1lKQogCXsKIAkJYXB3X2xvYWRfYnVmZmVycygpOwotCQlmaW5hbF9kdW1wX2FsbG93ZWQg PSAhU2h1dGRvd25SZXF1ZXN0UGVuZGluZzsKKwkJZmluYWxfZHVtcF9hbGxvd2VkID0gIUlu dGVycnVwdFBlbmRpbmcoSU5URVJSVVBUX1RFUk1JTkFURSk7CiAJCWxhc3RfZHVtcF90aW1l ID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOwogCX0KIAogCS8qIFBlcmlvZGljYWxseSBkdW1w IGJ1ZmZlcnMgdW50aWwgdGVybWluYXRlZC4gKi8KLQl3aGlsZSAoIVNodXRkb3duUmVxdWVz dFBlbmRpbmcpCisJd2hpbGUgKCFJbnRlcnJ1cHRQZW5kaW5nKElOVEVSUlVQVF9URVJNSU5B VEUpKQogCXsKLQkJLyogSW4gY2FzZSBvZiBhIFNJR0hVUCwganVzdCByZWxvYWQgdGhlIGNv bmZpZ3VyYXRpb24uICovCi0JCWlmIChDb25maWdSZWxvYWRQZW5kaW5nKQotCQl7Ci0JCQlD b25maWdSZWxvYWRQZW5kaW5nID0gZmFsc2U7CisJCS8qIENoZWNrIGZvciBzdGFuZGFyZCBp bnRlcnJ1cHRzIGFuZCBjb25maWcgcmVsb2FkICovCisJCUNIRUNLX0ZPUl9JTlRFUlJVUFRT KCk7CisJCWlmIChDb25zdW1lSW50ZXJydXB0KElOVEVSUlVQVF9DT05GSUdfUkVMT0FEKSkK IAkJCVByb2Nlc3NDb25maWdGaWxlKFBHQ19TSUdIVVApOwotCQl9CiAKIAkJaWYgKGF1dG9w cmV3YXJtX2ludGVydmFsIDw9IDApCiAJCXsKIAkJCS8qIFdlJ3JlIG9ubHkgZHVtcGluZyBh dCBzaHV0ZG93biwgc28ganVzdCB3YWl0IGZvcmV2ZXIuICovCi0JCQkodm9pZCkgV2FpdExh dGNoKE15TGF0Y2gsCi0JCQkJCQkJIFdMX0xBVENIX1NFVCB8IFdMX0VYSVRfT05fUE1fREVB VEgsCi0JCQkJCQkJIC0xTCwKLQkJCQkJCQkgUEdfV0FJVF9FWFRFTlNJT04pOworCQkJKHZv aWQpIFdhaXRJbnRlcnJ1cHQoQ2hlY2tGb3JJbnRlcnJ1cHRzTWFzayB8CisJCQkJCQkJCSBJ TlRFUlJVUFRfQ09ORklHX1JFTE9BRCB8CisJCQkJCQkJCSBJTlRFUlJVUFRfVEVSTUlOQVRF LAorCQkJCQkJCQkgV0xfSU5URVJSVVBUIHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwKKwkJCQkJ CQkJIC0xTCwKKwkJCQkJCQkJIFBHX1dBSVRfRVhURU5TSU9OKTsKIAkJfQogCQllbHNlCiAJ CXsKQEAgLTI2NiwxNCArMjY3LDEzIEBAIGF1dG9wcmV3YXJtX21haW4oRGF0dW0gbWFpbl9h cmcpCiAJCQl9CiAKIAkJCS8qIFNsZWVwIHVudGlsIHRoZSBuZXh0IGR1bXAgdGltZS4gKi8K LQkJCSh2b2lkKSBXYWl0TGF0Y2goTXlMYXRjaCwKLQkJCQkJCQkgV0xfTEFUQ0hfU0VUIHwg V0xfVElNRU9VVCB8IFdMX0VYSVRfT05fUE1fREVBVEgsCi0JCQkJCQkJIGRlbGF5X2luX21z LAotCQkJCQkJCSBQR19XQUlUX0VYVEVOU0lPTik7CisJCQkodm9pZCkgV2FpdEludGVycnVw dChDaGVja0ZvckludGVycnVwdHNNYXNrIHwKKwkJCQkJCQkJIElOVEVSUlVQVF9DT05GSUdf UkVMT0FEIHwKKwkJCQkJCQkJIElOVEVSUlVQVF9URVJNSU5BVEUsCisJCQkJCQkJCSBXTF9J TlRFUlJVUFQgfCBXTF9USU1FT1VUIHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwKKwkJCQkJCQkJ IGRlbGF5X2luX21zLAorCQkJCQkJCQkgUEdfV0FJVF9FWFRFTlNJT04pOwogCQl9Ci0KLQkJ LyogUmVzZXQgdGhlIGxhdGNoLCBsb29wLiAqLwotCQlSZXNldExhdGNoKE15TGF0Y2gpOwog CX0KIAogCS8qCkBAIC00MjMsNyArNDIzLDcgQEAgYXB3X2xvYWRfYnVmZmVycyh2b2lkKQog CQkgKiBMaWtld2lzZSwgZG9uJ3QgbGF1bmNoIGlmIHdlJ3ZlIGFscmVhZHkgYmVlbiB0b2xk IHRvIHNodXQgZG93bi4KIAkJICogKFRoZSBsYXVuY2ggd291bGQgZmFpbCBhbnl3YXksIGJ1 dCB3ZSBtaWdodCBhcyB3ZWxsIHNraXAgaXQuKQogCQkgKi8KLQkJaWYgKFNodXRkb3duUmVx dWVzdFBlbmRpbmcpCisJCWlmIChJbnRlcnJ1cHRQZW5kaW5nKElOVEVSUlVQVF9URVJNSU5B VEUpKQogCQkJYnJlYWs7CiAKIAkJLyoKQEAgLTQ0NCw3ICs0NDQsNyBAQCBhcHdfbG9hZF9i dWZmZXJzKHZvaWQpCiAJTFdMb2NrUmVsZWFzZSgmYXB3X3N0YXRlLT5sb2NrKTsKIAogCS8q IFJlcG9ydCBvdXIgc3VjY2VzcywgaWYgd2Ugd2VyZSBhYmxlIHRvIGZpbmlzaC4gKi8KLQlp ZiAoIVNodXRkb3duUmVxdWVzdFBlbmRpbmcpCisJaWYgKCFJbnRlcnJ1cHRQZW5kaW5nKElO VEVSUlVQVF9URVJNSU5BVEUpKQogCQllcmVwb3J0KExPRywKIAkJCQkoZXJybXNnKCJhdXRv cHJld2FybSBzdWNjZXNzZnVsbHkgcHJld2FybWVkICVkIG9mICVkIHByZXZpb3VzbHktbG9h ZGVkIGJsb2NrcyIsCiAJCQkJCQlhcHdfc3RhdGUtPnByZXdhcm1lZF9ibG9ja3MsIG51bV9l bGVtZW50cykpKTsKQEAgLTUwNCw4ICs1MDQsNyBAQCBhdXRvcHJld2FybV9kYXRhYmFzZV9t YWluKERhdHVtIG1haW5fYXJnKQogCUJsb2NrSW5mb1JlY29yZCBibGs7CiAJZHNtX3NlZ21l bnQgKnNlZzsKIAotCS8qIEVzdGFibGlzaCBzaWduYWwgaGFuZGxlcnM7IG9uY2UgdGhhdCdz IGRvbmUsIHVuYmxvY2sgc2lnbmFscy4gKi8KLQlwcXNpZ25hbChTSUdURVJNLCBkaWUpOwor CS8qIERlZmF1bHQgc2lnbmFsIGhhbmRsZXJzIGFyZSBPSyBmb3IgdXM7IHVuYmxvY2sgc2ln bmFscy4gKi8KIAlCYWNrZ3JvdW5kV29ya2VyVW5ibG9ja1NpZ25hbHMoKTsKIAogCS8qIENv bm5lY3QgdG8gY29ycmVjdCBkYXRhYmFzZSBhbmQgZ2V0IGJsb2NrIGluZm9ybWF0aW9uLiAq LwpAQCAtOTIzLDkgKzkyMiw2IEBAIGFwd19zdGFydF9sZWFkZXJfd29ya2VyKHZvaWQpCiAJ CXJldHVybjsKIAl9CiAKLQkvKiBtdXN0IHNldCBub3RpZnkgUElEIHRvIHdhaXQgZm9yIHN0 YXJ0dXAgKi8KLQl3b3JrZXIuYmd3X25vdGlmeV9waWQgPSBNeVByb2NQaWQ7Ci0KIAlpZiAo IVJlZ2lzdGVyRHluYW1pY0JhY2tncm91bmRXb3JrZXIoJndvcmtlciwgJmhhbmRsZSkpCiAJ CWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlNVRkZJQ0lFTlRfUkVT T1VSQ0VTKSwKQEAgLTk1OCw5ICs5NTQsNiBAQCBhcHdfc3RhcnRfZGF0YWJhc2Vfd29ya2Vy KHZvaWQpCiAJc3RyY3B5KHdvcmtlci5iZ3dfbmFtZSwgImF1dG9wcmV3YXJtIHdvcmtlciIp OwogCXN0cmNweSh3b3JrZXIuYmd3X3R5cGUsICJhdXRvcHJld2FybSB3b3JrZXIiKTsKIAot CS8qIG11c3Qgc2V0IG5vdGlmeSBQSUQgdG8gd2FpdCBmb3Igc2h1dGRvd24gKi8KLQl3b3Jr ZXIuYmd3X25vdGlmeV9waWQgPSBNeVByb2NQaWQ7Ci0KIAlpZiAoIVJlZ2lzdGVyRHluYW1p Y0JhY2tncm91bmRXb3JrZXIoJndvcmtlciwgJmhhbmRsZSkpCiAJCWVyZXBvcnQoRVJST1Is CiAJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlNVRkZJQ0lFTlRfUkVTT1VSQ0VTKSwKZGlmZiAt LWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2Nvbm5lY3Rpb24uYyBiL2NvbnRyaWIvcG9z dGdyZXNfZmR3L2Nvbm5lY3Rpb24uYwppbmRleCA0ODdhMWEyMzE3MC4uM2JmNzNlNGQyYTkg MTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2Nvbm5lY3Rpb24uYworKysgYi9j b250cmliL3Bvc3RncmVzX2Zkdy9jb25uZWN0aW9uLmMKQEAgLTIyLDEzICsyMiwxMyBAQAog I2luY2x1ZGUgImNvbW1hbmRzL2RlZnJlbS5oIgogI2luY2x1ZGUgImNvbW1vbi9iYXNlNjQu aCIKICNpbmNsdWRlICJmdW5jYXBpLmgiCisjaW5jbHVkZSAiaXBjL2ludGVycnVwdC5oIgog I2luY2x1ZGUgImxpYnBxL2xpYnBxLWJlLmgiCiAjaW5jbHVkZSAibGlicHEvbGlicHEtYmUt ZmUtaGVscGVycy5oIgogI2luY2x1ZGUgIm1iL3BnX3djaGFyLmgiCiAjaW5jbHVkZSAibWlz Y2FkbWluLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAicG9zdGdyZXNfZmR3 LmgiCi0jaW5jbHVkZSAic3RvcmFnZS9sYXRjaC5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0 aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvaHNlYXJjaC5oIgogI2luY2x1ZGUgInV0aWxzL2lu dmFsLmgiCkBAIC04MjksOCArODI5LDggQEAgZG9fc3FsX2NvbW1hbmRfZW5kKFBHY29ubiAq Y29ubiwgY29uc3QgY2hhciAqc3FsLCBib29sIGNvbnN1bWVfaW5wdXQpCiAJLyoKIAkgKiBJ ZiByZXF1ZXN0ZWQsIGNvbnN1bWUgd2hhdGV2ZXIgZGF0YSBpcyBhdmFpbGFibGUgZnJvbSB0 aGUgc29ja2V0LiAoTm90ZQogCSAqIHRoYXQgaWYgYWxsIGRhdGEgaXMgYXZhaWxhYmxlLCB0 aGlzIGFsbG93cyBwZ2Zkd19nZXRfcmVzdWx0IHRvIGNhbGwKLQkgKiBQUWdldFJlc3VsdCB3 aXRob3V0IGZvcmNpbmcgdGhlIG92ZXJoZWFkIG9mIFdhaXRMYXRjaE9yU29ja2V0LCB3aGlj aAotCSAqIHdvdWxkIGJlIGxhcmdlIGNvbXBhcmVkIHRvIHRoZSBvdmVyaGVhZCBvZiBQUWNv bnN1bWVJbnB1dC4pCisJICogUFFnZXRSZXN1bHQgd2l0aG91dCBmb3JjaW5nIHRoZSBvdmVy aGVhZCBvZiBXYWl0SW50ZXJydXB0T3JTb2NrZXQsCisJICogd2hpY2ggd291bGQgYmUgbGFy Z2UgY29tcGFyZWQgdG8gdGhlIG92ZXJoZWFkIG9mIFBRY29uc3VtZUlucHV0LikKIAkgKi8K IAlpZiAoY29uc3VtZV9pbnB1dCAmJiAhUFFjb25zdW1lSW5wdXQoY29ubikpCiAJCXBnZmR3 X3JlcG9ydF9lcnJvcihOVUxMLCBjb25uLCBzcWwpOwpAQCAtMTQ4Myw3ICsxNDgzLDcgQEAg cGdmZHdfY2FuY2VsX3F1ZXJ5X2VuZChQR2Nvbm4gKmNvbm4sIFRpbWVzdGFtcFR6IGVuZHRp bWUsCiAJLyoKIAkgKiBJZiByZXF1ZXN0ZWQsIGNvbnN1bWUgd2hhdGV2ZXIgZGF0YSBpcyBh dmFpbGFibGUgZnJvbSB0aGUgc29ja2V0LiAoTm90ZQogCSAqIHRoYXQgaWYgYWxsIGRhdGEg aXMgYXZhaWxhYmxlLCB0aGlzIGFsbG93cyBwZ2Zkd19nZXRfY2xlYW51cF9yZXN1bHQgdG8K LQkgKiBjYWxsIFBRZ2V0UmVzdWx0IHdpdGhvdXQgZm9yY2luZyB0aGUgb3ZlcmhlYWQgb2Yg V2FpdExhdGNoT3JTb2NrZXQsCisJICogY2FsbCBQUWdldFJlc3VsdCB3aXRob3V0IGZvcmNp bmcgdGhlIG92ZXJoZWFkIG9mIFdhaXRJbnRlcnJ1cHRPclNvY2tldCwKIAkgKiB3aGljaCB3 b3VsZCBiZSBsYXJnZSBjb21wYXJlZCB0byB0aGUgb3ZlcmhlYWQgb2YgUFFjb25zdW1lSW5w dXQuKQogCSAqLwogCWlmIChjb25zdW1lX2lucHV0ICYmICFQUWNvbnN1bWVJbnB1dChjb25u KSkKQEAgLTE1NzgsNyArMTU3OCw3IEBAIHBnZmR3X2V4ZWNfY2xlYW51cF9xdWVyeV9lbmQo UEdjb25uICpjb25uLCBjb25zdCBjaGFyICpxdWVyeSwKIAkvKgogCSAqIElmIHJlcXVlc3Rl ZCwgY29uc3VtZSB3aGF0ZXZlciBkYXRhIGlzIGF2YWlsYWJsZSBmcm9tIHRoZSBzb2NrZXQu IChOb3RlCiAJICogdGhhdCBpZiBhbGwgZGF0YSBpcyBhdmFpbGFibGUsIHRoaXMgYWxsb3dz IHBnZmR3X2dldF9jbGVhbnVwX3Jlc3VsdCB0bwotCSAqIGNhbGwgUFFnZXRSZXN1bHQgd2l0 aG91dCBmb3JjaW5nIHRoZSBvdmVyaGVhZCBvZiBXYWl0TGF0Y2hPclNvY2tldCwKKwkgKiBj YWxsIFBRZ2V0UmVzdWx0IHdpdGhvdXQgZm9yY2luZyB0aGUgb3ZlcmhlYWQgb2YgV2FpdElu dGVycnVwdE9yU29ja2V0LAogCSAqIHdoaWNoIHdvdWxkIGJlIGxhcmdlIGNvbXBhcmVkIHRv IHRoZSBvdmVyaGVhZCBvZiBQUWNvbnN1bWVJbnB1dC4pCiAJICovCiAJaWYgKGNvbnN1bWVf aW5wdXQgJiYgIVBRY29uc3VtZUlucHV0KGNvbm4pKQpAQCAtMTY4NiwxMiArMTY4NiwxMSBA QCBwZ2Zkd19nZXRfY2xlYW51cF9yZXN1bHQoUEdjb25uICpjb25uLCBUaW1lc3RhbXBUeiBl bmR0aW1lLAogCQkJCXBnZmR3X3dlX2NsZWFudXBfcmVzdWx0ID0gV2FpdEV2ZW50RXh0ZW5z aW9uTmV3KCJQb3N0Z3Jlc0Zkd0NsZWFudXBSZXN1bHQiKTsKIAogCQkJLyogU2xlZXAgdW50 aWwgdGhlcmUncyBzb21ldGhpbmcgdG8gZG8gKi8KLQkJCXdjID0gV2FpdExhdGNoT3JTb2Nr ZXQoTXlMYXRjaCwKLQkJCQkJCQkJICAgV0xfTEFUQ0hfU0VUIHwgV0xfU09DS0VUX1JFQURB QkxFIHwKLQkJCQkJCQkJICAgV0xfVElNRU9VVCB8IFdMX0VYSVRfT05fUE1fREVBVEgsCi0J CQkJCQkJCSAgIFBRc29ja2V0KGNvbm4pLAotCQkJCQkJCQkgICBjdXJfdGltZW91dCwgcGdm ZHdfd2VfY2xlYW51cF9yZXN1bHQpOwotCQkJUmVzZXRMYXRjaChNeUxhdGNoKTsKKwkJCXdj ID0gV2FpdEludGVycnVwdE9yU29ja2V0KENoZWNrRm9ySW50ZXJydXB0c01hc2ssCisJCQkJ CQkJCQkgICBXTF9JTlRFUlJVUFQgfCBXTF9TT0NLRVRfUkVBREFCTEUgfAorCQkJCQkJCQkJ ICAgV0xfVElNRU9VVCB8IFdMX0VYSVRfT05fUE1fREVBVEgsCisJCQkJCQkJCQkgICBQUXNv Y2tldChjb25uKSwKKwkJCQkJCQkJCSAgIGN1cl90aW1lb3V0LCBwZ2Zkd193ZV9jbGVhbnVw X3Jlc3VsdCk7CiAKIAkJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CiAKZGlmZiAtLWdpdCBh L2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jIGIvY29udHJpYi9wb3N0Z3Jl c19mZHcvcG9zdGdyZXNfZmR3LmMKaW5kZXggMzU3MjY4OWUzM2IuLjdjODE5YWQ0OGE4IDEw MDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYworKysgYi9j b250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYwpAQCAtMzksNyArMzksNyBAQAog I2luY2x1ZGUgIm9wdGltaXplci90bGlzdC5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZXRy ZWUuaCIKICNpbmNsdWRlICJwb3N0Z3Jlc19mZHcuaCIKLSNpbmNsdWRlICJzdG9yYWdlL2xh dGNoLmgiCisjaW5jbHVkZSAic3RvcmFnZS93YWl0ZXZlbnRzZXQuaCIKICNpbmNsdWRlICJ1 dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2Zsb2F0LmgiCiAjaW5jbHVkZSAi dXRpbHMvZ3VjLmgiCkBAIC03Mjc2LDcgKzcyNzYsNyBAQCBwb3N0Z3Jlc0ZvcmVpZ25Bc3lu Y0NvbmZpZ3VyZVdhaXQoQXN5bmNSZXF1ZXN0ICphcmVxKQogCQlBc3NlcnQocGVuZGluZ0Fy ZXEgPT0gYXJlcSk7CiAKIAlBZGRXYWl0RXZlbnRUb1NldChzZXQsIFdMX1NPQ0tFVF9SRUFE QUJMRSwgUFFzb2NrZXQoZnNzdGF0ZS0+Y29ubiksCi0JCQkJCSAgTlVMTCwgYXJlcSk7CisJ CQkJCSAgMCwgYXJlcSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvYmd3 b3JrZXIuc2dtbCBiL2RvYy9zcmMvc2dtbC9iZ3dvcmtlci5zZ21sCmluZGV4IGIyMzllMzhh YWFlLi42N2ExMDA1M2JiYyAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2Jnd29ya2VyLnNn bWwKKysrIGIvZG9jL3NyYy9zZ21sL2Jnd29ya2VyLnNnbWwKQEAgLTYzLDcgKzYzLDcgQEAg dHlwZWRlZiBzdHJ1Y3QgQmFja2dyb3VuZFdvcmtlcgogICAgIGNoYXIgICAgICAgIGJnd19m dW5jdGlvbl9uYW1lW0JHV19NQVhMRU5dOwogICAgIERhdHVtICAgICAgIGJnd19tYWluX2Fy ZzsKICAgICBjaGFyICAgICAgICBiZ3dfZXh0cmFbQkdXX0VYVFJBTEVOXTsKLSAgICBwaWRf dCAgICAgICBiZ3dfbm90aWZ5X3BpZDsKKyAgICBwaWRfdCAgICAgICBiZ3dfbm90aWZ5X3Bp ZDsJCQkvKiBub3QgdXNlZCAqLwogfSBCYWNrZ3JvdW5kV29ya2VyOwogPC9wcm9ncmFtbGlz dGluZz4KICAgPC9wYXJhPgpAQCAtMTMxLDYgKzEzMSwyMSBAQCB0eXBlZGVmIHN0cnVjdCBC YWNrZ3JvdW5kV29ya2VyCiAgICAgIDwvbGlzdGl0ZW0+CiAgICAgPC92YXJsaXN0ZW50cnk+ CiAKKyAgICA8dmFybGlzdGVudHJ5PgorICAgICA8dGVybT48bGl0ZXJhbD5CR1dPUktFUl9O T19OT1RJRlk8L2xpdGVyYWw+PC90ZXJtPgorICAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFy YT4KKyAgICAgICA8aW5kZXh0ZXJtPjxwcmltYXJ5PkJHV09SS0VSX05PX05PVElGWTwvcHJp bWFyeT48L2luZGV4dGVybT4gTm9ybWFsbHksCisgICAgICAgdGhlIGJhY2tlbmQgdGhhdCBy ZWdpc3RlcnMgYSBkeW5hbWljIHdvcmtlciB3aWxsIGJlIG5vdGlmaWVkCisgICAgICAgd2l0 aCA8bGl0ZXJhbD5JTlRFUlJVUFRfV0FJVF9XQUtFVVA8L2xpdGVyYWw+IHdoZW4gdGhlIHdv cmtlcidzIHN0YXRlCisgICAgICAgY2hhbmdlcywgd2hpY2ggYWxsb3dzIHRoZSBjYWxsZXIg dG8gd2FpdCBmb3IgdGhlIHdvcmtlciB0byBzdGFydCBhbmQKKyAgICAgICBzaHV0IGRvd24u ICBUaGF0IGNhbiBiZSBzdXBwcmVzc2VkIGJ5IHNldHRpbmcgdGhpcyBmbGFnLgorICAgICAg IDwhLS0gRklYTUU6IFNob3VsZCB3ZSByZXNlcnZlIGEgZGVkaWNhdGVkIElOVEVSUlVQVCBi aXQgZm9yIGl0PyBBbmQgaWYKKyAgICAgICAgICAgIHdlIGRvLCBkbyB3ZSBldmVuIG5lZWQg dGhlIEJHV09SS0VSX05PX05PVElGWSBmbGFnLCB0aGVyZSdzIHZlcnkgbGl0dGxlCisgICAg ICAgICAgICBvdmVyaGVhZCBpbiBzZW5kaW5nIGEgdXNlbGVzcyBpbnRlcnJ1cHQgLS0+Cisg ICAgICA8L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+CisgICAgPC92YXJsaXN0ZW50cnk+CiAg ICA8L3ZhcmlhYmxlbGlzdD4KIAogICA8L3BhcmE+CkBAIC0yMDQsMTIgKzIxOSw4IEBAIHR5 cGVkZWYgc3RydWN0IEJhY2tncm91bmRXb3JrZXIKICAgPC9wYXJhPgogCiAgIDxwYXJhPgot ICAgPHN0cnVjdGZpZWxkPmJnd19ub3RpZnlfcGlkPC9zdHJ1Y3RmaWVsZD4gaXMgdGhlIFBJ RCBvZiBhIFBvc3RncmVTUUwKLSAgIGJhY2tlbmQgcHJvY2VzcyB0byB3aGljaCB0aGUgcG9z dG1hc3RlciBzaG91bGQgc2VuZCA8bGl0ZXJhbD5TSUdVU1IxPC9saXRlcmFsPgotICAgd2hl biB0aGUgcHJvY2VzcyBpcyBzdGFydGVkIG9yIGV4aXRzLiAgSXQgc2hvdWxkIGJlIDAgZm9y IHdvcmtlcnMgcmVnaXN0ZXJlZAotICAgYXQgcG9zdG1hc3RlciBzdGFydHVwIHRpbWUsIG9y IHdoZW4gdGhlIGJhY2tlbmQgcmVnaXN0ZXJpbmcgdGhlIHdvcmtlciBkb2VzCi0gICBub3Qg d2lzaCB0byB3YWl0IGZvciB0aGUgd29ya2VyIHRvIHN0YXJ0IHVwLiAgT3RoZXJ3aXNlLCBp dCBzaG91bGQgYmUKLSAgIGluaXRpYWxpemVkIHRvIDxsaXRlcmFsPk15UHJvY1BpZDwvbGl0 ZXJhbD4uCisgICA8c3RydWN0ZmllbGQ+Ymd3X25vdGlmeV9waWQ8L3N0cnVjdGZpZWxkPiBp cyBub3QgdXNlZCBhbmQgbWF5IGJlIHJlbW92ZWQKKyAgIGluIGEgZnV0dXJlIHJlbGVhc2Uu CiAgIDwvcGFyYT4KIAogICA8cGFyYT5PbmNlIHJ1bm5pbmcsIHRoZSBwcm9jZXNzIGNhbiBj b25uZWN0IHRvIGEgZGF0YWJhc2UgYnkgY2FsbGluZwpAQCAtMjUwLDcgKzI2MSw3IEBAIHR5 cGVkZWYgc3RydWN0IEJhY2tncm91bmRXb3JrZXIKICAgIHJlaW5pdGlhbGl6ZXMgdGhlIGNs dXN0ZXIgZHVlIHRvIGEgYmFja2VuZCBmYWlsdXJlLiAgQmFja2VuZHMgd2hpY2ggbmVlZAog ICAgdG8gc3VzcGVuZCBleGVjdXRpb24gb25seSB0ZW1wb3JhcmlseSBzaG91bGQgdXNlIGFu IGludGVycnVwdGlibGUgc2xlZXAKICAgIHJhdGhlciB0aGFuIGV4aXRpbmc7IHRoaXMgY2Fu IGJlIGFjaGlldmVkIGJ5IGNhbGxpbmcKLSAgIDxmdW5jdGlvbj5XYWl0TGF0Y2goKTwvZnVu Y3Rpb24+LiBNYWtlIHN1cmUgdGhlCisgICA8ZnVuY3Rpb24+V2FpdEludGVycnVwdCgpPC9m dW5jdGlvbj4uIE1ha2Ugc3VyZSB0aGUKICAgIDxsaXRlcmFsPldMX1BPU1RNQVNURVJfREVB VEg8L2xpdGVyYWw+IGZsYWcgaXMgc2V0IHdoZW4gY2FsbGluZyB0aGF0IGZ1bmN0aW9uLCBh bmQKICAgIHZlcmlmeSB0aGUgcmV0dXJuIGNvZGUgZm9yIGEgcHJvbXB0IGV4aXQgaW4gdGhl IGVtZXJnZW5jeSBjYXNlIHRoYXQKICAgIDxjb21tYW5kPnBvc3RncmVzPC9jb21tYW5kPiBp dHNlbGYgaGFzIHRlcm1pbmF0ZWQuCkBAIC0yODMsMTAgKzI5NCw3IEBAIHR5cGVkZWYgc3Ry dWN0IEJhY2tncm91bmRXb3JrZXIKIAogICA8cGFyYT4KICAgIEluIHNvbWUgY2FzZXMsIGEg cHJvY2VzcyB3aGljaCByZWdpc3RlcnMgYSBiYWNrZ3JvdW5kIHdvcmtlciBtYXkgd2lzaCB0 bwotICAgd2FpdCBmb3IgdGhlIHdvcmtlciB0byBzdGFydCB1cC4gIFRoaXMgY2FuIGJlIGFj Y29tcGxpc2hlZCBieSBpbml0aWFsaXppbmcKLSAgIDxzdHJ1Y3RmaWVsZD5iZ3dfbm90aWZ5 X3BpZDwvc3RydWN0ZmllbGQ+IHRvIDxsaXRlcmFsPk15UHJvY1BpZDwvbGl0ZXJhbD4gYW5k Ci0gICB0aGVuIHBhc3NpbmcgdGhlIDx0eXBlPkJhY2tncm91bmRXb3JrZXJIYW5kbGUgKjwv dHlwZT4gb2J0YWluZWQgYXQKLSAgIHJlZ2lzdHJhdGlvbiB0aW1lIHRvCisgICB3YWl0IGZv ciB0aGUgd29ya2VyIHRvIHN0YXJ0IHVwLiAgVGhpcyBjYW4gYmUgYWNjb21wbGlzaGVkIHdp dGggdGhlCiAgICA8ZnVuY3Rpb24+V2FpdEZvckJhY2tncm91bmRXb3JrZXJTdGFydHVwKDxw YXJhbWV0ZXI+QmFja2dyb3VuZFdvcmtlckhhbmRsZQogICAgKmhhbmRsZTwvcGFyYW1ldGVy PiwgPHBhcmFtZXRlcj5waWRfdCAqPC9wYXJhbWV0ZXI+KTwvZnVuY3Rpb24+IGZ1bmN0aW9u LgogICAgVGhpcyBmdW5jdGlvbiB3aWxsIGJsb2NrIHVudGlsIHRoZSBwb3N0bWFzdGVyIGhh cyBhdHRlbXB0ZWQgdG8gc3RhcnQgdGhlCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvb2F1 dGgtdmFsaWRhdG9ycy5zZ21sIGIvZG9jL3NyYy9zZ21sL29hdXRoLXZhbGlkYXRvcnMuc2dt bAppbmRleCA3MDQwODlkZDdiMy4uM2M0MjY4Zjc0MWYgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMv c2dtbC9vYXV0aC12YWxpZGF0b3JzLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL29hdXRoLXZh bGlkYXRvcnMuc2dtbApAQCAtMjExLDcgKzIxMSw3IEBACiAgICAgICAgY29ycmVjdGx5IGhh bmRsZSBhdXRoZW50aWNhdGlvbiB0aW1lb3V0cyBhbmQgc2h1dGRvd24gc2lnbmFscyBmcm9t CiAgICAgICAgPGFwcGxpY2F0aW9uPnBnX2N0bDwvYXBwbGljYXRpb24+LiBGb3IgZXhhbXBs ZSwgYmxvY2tpbmcgY2FsbHMgb24gc29ja2V0cwogICAgICAgIHNob3VsZCBnZW5lcmFsbHkg YmUgcmVwbGFjZWQgd2l0aCBjb2RlIHRoYXQgaGFuZGxlcyBib3RoIHNvY2tldCBldmVudHMK LSAgICAgICBhbmQgaW50ZXJydXB0cyB3aXRob3V0IHJhY2VzIChzZWUgPGZ1bmN0aW9uPldh aXRMYXRjaE9yU29ja2V0KCk8L2Z1bmN0aW9uPiwKKyAgICAgICBhbmQgaW50ZXJydXB0cyB3 aXRob3V0IHJhY2VzIChzZWUgPGZ1bmN0aW9uPldhaXRJbnRlcnJ1cHRPclNvY2tldCgpPC9m dW5jdGlvbj4sCiAgICAgICAgPGZ1bmN0aW9uPldhaXRFdmVudFNldFdhaXQoKTwvZnVuY3Rp b24+LCBldCBhbCksIGFuZCBsb25nLXJ1bm5pbmcgbG9vcHMKICAgICAgICBzaG91bGQgcGVy aW9kaWNhbGx5IGNhbGwgPGZ1bmN0aW9uPkNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk8L2Z1bmN0 aW9uPi4KICAgICAgICBGYWlsdXJlIHRvIGZvbGxvdyB0aGlzIGd1aWRhbmNlIG1heSByZXN1 bHQgaW4gdW5yZXNwb25zaXZlIGJhY2tlbmQKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9z b3VyY2VzLnNnbWwgYi9kb2Mvc3JjL3NnbWwvc291cmNlcy5zZ21sCmluZGV4IDc2MGY5YjY5 ZDQ3Li42MmZmOWUzZTM5NyAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3NvdXJjZXMuc2dt bAorKysgYi9kb2Mvc3JjL3NnbWwvc291cmNlcy5zZ21sCkBAIC05ODgsMjIgKzk4OCwyNSBA QCBNZW1vcnlDb250ZXh0U3dpdGNoVG8oTWVtb3J5Q29udGV4dCBjb250ZXh0KQogICAgICBj YWxsIGFzeW5jLXNpZ25hbCBzYWZlIGZ1bmN0aW9ucyAoYXMgZGVmaW5lZCBpbiBQT1NJWCkg YW5kIGFjY2VzcwogICAgICB2YXJpYWJsZXMgb2YgdHlwZSA8bGl0ZXJhbD52b2xhdGlsZSBz aWdfYXRvbWljX3Q8L2xpdGVyYWw+LiBBIGZldwogICAgICBmdW5jdGlvbnMgaW4gPGNvbW1h bmQ+cG9zdGdyZXM8L2NvbW1hbmQ+IGFyZSBhbHNvIGRlZW1lZCBzaWduYWwgc2FmZSwgaW1w b3J0YW50bHkKLSAgICAgPGZ1bmN0aW9uPlNldExhdGNoKCk8L2Z1bmN0aW9uPi4KKyAgICAg PGZ1bmN0aW9uPlJhaXNlSW50ZXJydXB0KCk8L2Z1bmN0aW9uPi4KICAgICA8L3BhcmE+CiAg ICAgPHBhcmE+CiAgICAgIEluIG1vc3QgY2FzZXMgc2lnbmFsIGhhbmRsZXJzIHNob3VsZCBk byBub3RoaW5nIG1vcmUgdGhhbiBub3RlCiAgICAgIHRoYXQgYSBzaWduYWwgaGFzIGFycml2 ZWQsIGFuZCB3YWtlIHVwIGNvZGUgcnVubmluZyBvdXRzaWRlIG9mCi0gICAgIHRoZSBoYW5k bGVyIHVzaW5nIGEgbGF0Y2guIEFuIGV4YW1wbGUgb2Ygc3VjaCBhIGhhbmRsZXIgaXMgdGhl CisgICAgIHRoZSBoYW5kbGVyIHVzaW5nIFJhaXNlSW50ZXJydXB0KCkuIEFuIGV4YW1wbGUg b2Ygc3VjaCBhIGhhbmRsZXIgaXMgdGhlCiAgICAgIGZvbGxvd2luZzoKIDxwcm9ncmFtbGlz dGluZz4KIHN0YXRpYyB2b2lkCiBoYW5kbGVfc2lnaHVwKFNJR05BTF9BUkdTKQogewotICAg IGdvdF9TSUdIVVAgPSB0cnVlOwotICAgIFNldExhdGNoKE15TGF0Y2gpOworICAgIFJhaXNl SW50ZXJydXB0KElOVEVSUlVQVF9DT05GSUdfUkVMT0FEKTsKIH0KIDwvcHJvZ3JhbWxpc3Rp bmc+CiAgICAgPC9wYXJhPgorICAgIDwhLS0gVE9ETzogVGhpcyBzZWN0aW9uIGlzIG5vdCB3 cm9uZywgYnV0IHNob3VsZCBiZSB1cGRhdGVkLiBTaG91bGQKKyAgICAgICAgIGRvY3VtZW50 IGFuZCBlbXBoYXNpemUgdGhlIGludGVycnVwdCBtZWNoYW5pc20gbW9yZSwgYW5kIHRoZQor ICAgICAgICAgaGFuZGxlX3NpZ2h1cCBleGFtcGxlIGlzIGJhZCBiZWNhdXNlIHRoZSBzdGFu ZGFyZCBzaWduYWwgaGFuZGxlciBmb3IKKyAgICAgICAgIFNJR0hVUCBhbHJlYWR5IGRvZXMg dGhhdCAtLT4KICAgIDwvc2ltcGxlc2VjdD4KIAogICAgPHNpbXBsZXNlY3QgaWQ9InNvdXJj ZS1jb252ZW50aW9ucy1mdW5jdGlvbi1wb2ludGVycyI+CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9NYWtlZmlsZSBiL3NyYy9iYWNrZW5kL01ha2VmaWxlCmluZGV4IGJhYTliMDVkMDIx Li4wM2VjNjQyODY5MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvTWFrZWZpbGUKKysrIGIv c3JjL2JhY2tlbmQvTWFrZWZpbGUKQEAgLTI2LDYgKzI2LDcgQEAgU1VCRElSUyA9IFwKIAlj b21tYW5kcyBcCiAJZXhlY3V0b3IgXAogCWZvcmVpZ24gXAorCWlwYyBcCiAJbGliIFwKIAls aWJwcSBcCiAJbWFpbiBcCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9i cmluX3BhZ2VvcHMuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW5fcGFnZW9wcy5j CmluZGV4IDdkYTk3YmVjNDNiLi4zMDhmZmQ3ZTU2NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvYWNjZXNzL2JyaW4vYnJpbl9wYWdlb3BzLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2JyaW4vYnJpbl9wYWdlb3BzLmMKQEAgLTE1LDcgKzE1LDcgQEAKICNpbmNsdWRlICJhY2Nl c3MvYnJpbl9yZXZtYXAuaCIKICNpbmNsdWRlICJhY2Nlc3MvYnJpbl94bG9nLmgiCiAjaW5j bHVkZSAiYWNjZXNzL3hsb2dpbnNlcnQuaCIKLSNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNp bmNsdWRlICJpcGMvaW50ZXJydXB0LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIK ICNpbmNsdWRlICJzdG9yYWdlL2ZyZWVzcGFjZS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG1n ci5oIgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbl9yZXZtYXAu YyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW5fcmV2bWFwLmMKaW5kZXggMjMzMzU1 Y2IyZDUuLjUyNmJhNzQ3YzYwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvYnJp bi9icmluX3Jldm1hcC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW5fcmV2 bWFwLmMKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJhY2Nlc3MvYnJpbl94bG9nLmgi CiAjaW5jbHVkZSAiYWNjZXNzL3JtZ3IuaCIKICNpbmNsdWRlICJhY2Nlc3MveGxvZ2luc2Vy dC5oIgotI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgImlwYy9pbnRlcnJ1cHQu aCIKICNpbmNsdWRlICJzdG9yYWdlL2J1Zm1nci5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5o IgogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL3RvYXN0X2ludGVy bmFscy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi90b2FzdF9pbnRlcm5hbHMuYwpp bmRleCA2ODM2Nzg2ZmQwNS4uZTA1M2Q0MWEzZjQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9jb21tb24vdG9hc3RfaW50ZXJuYWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL2NvbW1vbi90b2FzdF9pbnRlcm5hbHMuYwpAQCAtMjEsNyArMjEsNyBAQAogI2luY2x1 ZGUgImFjY2Vzcy90b2FzdF9pbnRlcm5hbHMuaCIKICNpbmNsdWRlICJhY2Nlc3MveGFjdC5o IgogI2luY2x1ZGUgImNhdGFsb2cvY2F0YWxvZy5oIgotI2luY2x1ZGUgIm1pc2NhZG1pbi5o IgorI2luY2x1ZGUgImlwYy9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJ1dGlscy9mbWdyb2lk cy5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogI2luY2x1ZGUgInV0aWxzL3NuYXBtZ3Iu aCIKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luYnRyZWUuYyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luYnRyZWUuYwppbmRleCAzZDNhOWRhNTZiMS4uYzRm MjhiZmIxMWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luYnRyZWUu YworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmJ0cmVlLmMKQEAgLTE3LDcgKzE3 LDcgQEAKICNpbmNsdWRlICJhY2Nlc3MvZ2luX3ByaXZhdGUuaCIKICNpbmNsdWRlICJhY2Nl c3MvZ2lueGxvZy5oIgogI2luY2x1ZGUgImFjY2Vzcy94bG9naW5zZXJ0LmgiCi0jaW5jbHVk ZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAiaXBjL2ludGVycnVwdC5oIgogI2luY2x1ZGUg InN0b3JhZ2UvcHJlZGljYXRlLmgiCiAjaW5jbHVkZSAidXRpbHMvaW5qZWN0aW9uX3BvaW50 LmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9naW4vZ2luZGF0YXBhZ2UuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4v Z2luZGF0YXBhZ2UuYwppbmRleCA0MzZlNTRmMjA2Ni4uNDI2MjU5OTM1ZTcgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luZGF0YXBhZ2UuYworKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvZ2luL2dpbmRhdGFwYWdlLmMKQEAgLTE3LDggKzE3LDggQEAKICNpbmNs dWRlICJhY2Nlc3MvZ2luX3ByaXZhdGUuaCIKICNpbmNsdWRlICJhY2Nlc3MvZ2lueGxvZy5o IgogI2luY2x1ZGUgImFjY2Vzcy94bG9naW5zZXJ0LmgiCisjaW5jbHVkZSAiaXBjL2ludGVy cnVwdC5oIgogI2luY2x1ZGUgImxpYi9pbGlzdC5oIgotI2luY2x1ZGUgIm1pc2NhZG1pbi5o IgogI2luY2x1ZGUgInN0b3JhZ2UvcHJlZGljYXRlLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVs LmgiCiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luZmFzdC5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW5mYXN0LmMKaW5kZXggN2E2YjE3Nzk3N2IuLjU1 YjEwNmQzNDBkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmZhc3Qu YworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmZhc3QuYwpAQCAtMjQsNiArMjQs NyBAQAogI2luY2x1ZGUgImFjY2Vzcy94bG9naW5zZXJ0LmgiCiAjaW5jbHVkZSAiY2F0YWxv Zy9wZ19hbS5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3ZhY3V1bS5oIgorI2luY2x1ZGUgImlw Yy9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwb3J0 L3BnX2JpdHV0aWxzLmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9hdXRvdmFjdXVtLmgiCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmdldC5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2dpbi9naW5nZXQuYwppbmRleCA2YjE0OGU2OWE4ZS4uMGVmNTVkMzA0Yjgg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luZ2V0LmMKKysrIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2dpbi9naW5nZXQuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1 ZGUgImFjY2Vzcy9naW5fcHJpdmF0ZS5oIgogI2luY2x1ZGUgImFjY2Vzcy9yZWxzY2FuLmgi CiAjaW5jbHVkZSAiY29tbW9uL3BnX3BybmcuaCIKKyNpbmNsdWRlICJpcGMvaW50ZXJydXB0 LmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcmVkaWNh dGUuaCIKICNpbmNsdWRlICJ1dGlscy9kYXR1bS5oIgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvYWNjZXNzL2dpbi9naW51dGlsLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0 aWwuYwppbmRleCBkMjA1MDkzZTIxZC4uZGEyYzk0NmM3ZDEgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9n aW4vZ2ludXRpbC5jCkBAIC0yMiw3ICsyMiw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190 eXBlLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvcHJvZ3Jlc3MuaCIKICNpbmNsdWRlICJjb21t YW5kcy92YWN1dW0uaCIKLSNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJpcGMv aW50ZXJydXB0LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9pbmRleGZzbS5oIgogI2luY2x1ZGUg InV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvaW5kZXhfc2VsZnVuY3MuaCIK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludmFjdXVtLmMgYi9zcmMv YmFja2VuZC9hY2Nlc3MvZ2luL2dpbnZhY3V1bS5jCmluZGV4IDExYTY2NzRhMTBiLi4yYTY2 N2Q2NTgzOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW52YWN1dW0u YworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnZhY3V1bS5jCkBAIC0xOCw2ICsx OCw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL2dpbnhsb2cuaCIKICNpbmNsdWRlICJhY2Nlc3Mv eGxvZ2luc2VydC5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3ZhY3V1bS5oIgorI2luY2x1ZGUg ImlwYy9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJz dG9yYWdlL2luZGV4ZnNtLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMgYi9zcmMvYmFja2VuZC9hY2Nl c3MvZ2lzdC9naXN0LmMKaW5kZXggZDU5NDQyMDVkYjIuLmQyNGNmMmI3NWIzIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMKKysrIGIvc3JjL2JhY2tlbmQv YWNjZXNzL2dpc3QvZ2lzdC5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSAiY2F0YWxv Zy9wZ19jb2xsYXRpb24uaCIKICNpbmNsdWRlICJjb21tYW5kcy92YWN1dW0uaCIKICNpbmNs dWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJpcGMvaW50ZXJydXB0LmgiCiAjaW5jbHVk ZSAibm9kZXMvZXhlY25vZGVzLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcmVkaWNhdGUuaCIK ICNpbmNsdWRlICJ1dGlscy9mbWdycHJvdG9zLmgiCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvZ2lzdC9naXN0Z2V0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0 Z2V0LmMKaW5kZXggMTFiMjE0ZWI5OWIuLjllMjM2Nzk5ZjJlIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0Z2V0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2dpc3QvZ2lzdGdldC5jCkBAIC0xOCw4ICsxOCw4IEBACiAjaW5jbHVkZSAiYWNjZXNzL2dp c3RfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImFjY2Vzcy9yZWxzY2FuLmgiCiAjaW5jbHVkZSAi ZXhlY3V0b3IvaW5zdHJ1bWVudF9ub2RlLmgiCisjaW5jbHVkZSAiaXBjL2ludGVycnVwdC5o IgogI2luY2x1ZGUgImxpYi9wYWlyaW5naGVhcC5oIgotI2luY2x1ZGUgIm1pc2NhZG1pbi5o IgogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJlZGljYXRlLmgi CiAjaW5jbHVkZSAidXRpbHMvZmxvYXQuaCIKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9naXN0L2dpc3R2YWN1dW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3R2 YWN1dW0uYwppbmRleCA5ZTcxNDk4MGQyNi4uZTEzYWE0OTczMWUgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3R2YWN1dW0uYworKysgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvZ2lzdC9naXN0dmFjdXVtLmMKQEAgLTE4LDggKzE4LDggQEAKICNpbmNsdWRlICJh Y2Nlc3MvZ2lzdF9wcml2YXRlLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RyYW5zYW0uaCIKICNp bmNsdWRlICJjb21tYW5kcy92YWN1dW0uaCIKKyNpbmNsdWRlICJpcGMvaW50ZXJydXB0Lmgi CiAjaW5jbHVkZSAibGliL2ludGVnZXJzZXQuaCIKLSNpbmNsdWRlICJtaXNjYWRtaW4uaCIK ICNpbmNsdWRlICJzdG9yYWdlL2luZGV4ZnNtLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sbWdy LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9yZWFkX3N0cmVhbS5oIgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gv aGFzaC5jCmluZGV4IGU4OGRkYjMyYTA1Li4xMjkyNDA2ZWJiZSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9o YXNoL2hhc2guYwpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy94bG9naW5z ZXJ0LmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvcHJvZ3Jlc3MuaCIKICNpbmNsdWRlICJjb21t YW5kcy92YWN1dW0uaCIKLSNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJpcGMv aW50ZXJydXB0LmgiCiAjaW5jbHVkZSAibm9kZXMvZXhlY25vZGVzLmgiCiAjaW5jbHVkZSAi b3B0aW1pemVyL3BsYW5jYXQuaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hpbnNlcnQuYyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9oYXNoL2hhc2hpbnNlcnQuYwppbmRleCAwY2VmYmFjYzk2ZS4uNzdlOTM5MGIxZjkg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hpbnNlcnQuYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoaW5zZXJ0LmMKQEAgLTE4LDcgKzE4LDcg QEAKICNpbmNsdWRlICJhY2Nlc3MvaGFzaC5oIgogI2luY2x1ZGUgImFjY2Vzcy9oYXNoX3hs b2cuaCIKICNpbmNsdWRlICJhY2Nlc3MveGxvZ2luc2VydC5oIgotI2luY2x1ZGUgIm1pc2Nh ZG1pbi5oIgorI2luY2x1ZGUgImlwYy9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJzdG9yYWdl L3ByZWRpY2F0ZS5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNob3ZmbC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2hhc2gvaGFzaG92ZmwuYwppbmRleCA4Y2ZiNmNlNzVkNi4uNWFlOTExNGNkNjUgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hvdmZsLmMKKysrIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hhc2gvaGFzaG92ZmwuYwpAQCAtMjAsNyArMjAsNyBAQAogI2luY2x1 ZGUgImFjY2Vzcy9oYXNoLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2hhc2hfeGxvZy5oIgogI2lu Y2x1ZGUgImFjY2Vzcy94bG9naW5zZXJ0LmgiCi0jaW5jbHVkZSAibWlzY2FkbWluLmgiCisj aW5jbHVkZSAiaXBjL2ludGVycnVwdC5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogCiAK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMgYi9zcmMv YmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jCmluZGV4IDhlMjIwYTNhZTE2Li45NjE3 MmMzMjIzNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHBhZ2Uu YworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jCkBAIC0zMSw3ICsz MSw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL2hhc2guaCIKICNpbmNsdWRlICJhY2Nlc3MvaGFz aF94bG9nLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2dpbnNlcnQuaCIKLSNpbmNsdWRlICJt aXNjYWRtaW4uaCIKKyNpbmNsdWRlICJpcGMvaW50ZXJydXB0LmgiCiAjaW5jbHVkZSAicG9y dC9wZ19iaXR1dGlscy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJlZGljYXRlLmgiCiAjaW5j bHVkZSAic3RvcmFnZS9zbWdyLmgiCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mv aGFzaC9oYXNoc2VhcmNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoc2VhcmNo LmMKaW5kZXggODlkMWM1YmM2ZDcuLjRjNmE4OTgwZTUyIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3MvaGFzaC9oYXNoc2VhcmNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2hhc2gvaGFzaHNlYXJjaC5jCkBAIC0xNiw4ICsxNiw4IEBACiAKICNpbmNsdWRlICJhY2Nl c3MvaGFzaC5oIgogI2luY2x1ZGUgImFjY2Vzcy9yZWxzY2FuLmgiCi0jaW5jbHVkZSAibWlz Y2FkbWluLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvaW5zdHJ1bWVudF9ub2RlLmgiCisjaW5j bHVkZSAiaXBjL2ludGVycnVwdC5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUg InN0b3JhZ2UvcHJlZGljYXRlLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoc29ydC5jIGIvc3JjL2JhY2tlbmQv YWNjZXNzL2hhc2gvaGFzaHNvcnQuYwppbmRleCA3N2JiZmFhNDYxYi4uMWJiZjBkMzM5NjYg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hzb3J0LmMKKysrIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHNvcnQuYwpAQCAtMjcsNyArMjcsNyBAQAog CiAjaW5jbHVkZSAiYWNjZXNzL2hhc2guaCIKICNpbmNsdWRlICJjb21tYW5kcy9wcm9ncmVz cy5oIgotI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgImlwYy9pbnRlcnJ1cHQu aCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJwb3J0L3BnX2JpdHV0aWxzLmgi CiAjaW5jbHVkZSAidXRpbHMvdHVwbGVzb3J0LmgiCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGVhcC9wcnVuZWhlYXAuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3By dW5laGVhcC5jCmluZGV4IDYzMmMyNDI3OTUyLi45Y2I0Yjc2Njc5NSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvcHJ1bmVoZWFwLmMKKysrIGIvc3JjL2JhY2tlbmQv YWNjZXNzL2hlYXAvcHJ1bmVoZWFwLmMKQEAgLTI0LDcgKzI0LDcgQEAKICNpbmNsdWRlICJh Y2Nlc3MveGxvZ2luc2VydC5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3ZhY3V1bS5oIgogI2lu Y2x1ZGUgImV4ZWN1dG9yL2luc3RydW1lbnQuaCIKLSNpbmNsdWRlICJtaXNjYWRtaW4uaCIK KyNpbmNsdWRlICJpcGMvaW50ZXJydXB0LmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5j bHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3ZhY3V1bWxhenkuYyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oZWFwL3ZhY3V1bWxhenkuYwppbmRleCA0YmUyNjdmZjY1Ny4uYWU3ZTc5 OTNjOGIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3ZhY3V1bWxhenku YworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92YWN1dW1sYXp5LmMKQEAgLTE0Myw2 ICsxNDMsNyBAQAogI2luY2x1ZGUgImNvbW1vbi9pbnQuaCIKICNpbmNsdWRlICJjb21tb24v cGdfcHJuZy5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2luc3RydW1lbnQuaCIKKyNpbmNsdWRl ICJpcGMvaW50ZXJydXB0LmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAi cGdzdGF0LmgiCiAjaW5jbHVkZSAicG9ydGFiaWxpdHkvaW5zdHJfdGltZS5oIgpAQCAtMzMw MCwxMSArMzMwMSwxMCBAQCBsYXp5X3RydW5jYXRlX2hlYXAoTFZSZWxTdGF0ZSAqdmFjcmVs KQogCQkJCXJldHVybjsKIAkJCX0KIAotCQkJKHZvaWQpIFdhaXRMYXRjaChNeUxhdGNoLAot CQkJCQkJCSBXTF9MQVRDSF9TRVQgfCBXTF9USU1FT1VUIHwgV0xfRVhJVF9PTl9QTV9ERUFU SCwKLQkJCQkJCQkgVkFDVVVNX1RSVU5DQVRFX0xPQ0tfV0FJVF9JTlRFUlZBTCwKLQkJCQkJ CQkgV0FJVF9FVkVOVF9WQUNVVU1fVFJVTkNBVEUpOwotCQkJUmVzZXRMYXRjaChNeUxhdGNo KTsKKwkJCSh2b2lkKSBXYWl0SW50ZXJydXB0KENoZWNrRm9ySW50ZXJydXB0c01hc2ssCisJ CQkJCQkJCSBXTF9JTlRFUlJVUFQgfCBXTF9USU1FT1VUIHwgV0xfRVhJVF9PTl9QTV9ERUFU SCwKKwkJCQkJCQkJIFZBQ1VVTV9UUlVOQ0FURV9MT0NLX1dBSVRfSU5URVJWQUwsCisJCQkJ CQkJCSBXQUlUX0VWRU5UX1ZBQ1VVTV9UUlVOQ0FURSk7CiAJCX0KIAogCQkvKgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmlzaWJpbGl0eW1hcC5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hlYXAvdmlzaWJpbGl0eW1hcC5jCmluZGV4IDMwNDdiZDQ2ZGVmLi5k YTE5NTJlOTQxMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmlzaWJp bGl0eW1hcC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Zpc2liaWxpdHltYXAu YwpAQCAtOTEsNyArOTEsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy92aXNpYmlsaXR5bWFwLmgi CiAjaW5jbHVkZSAiYWNjZXNzL3hsb2dpbnNlcnQuaCIKICNpbmNsdWRlICJhY2Nlc3MveGxv Z3V0aWxzLmgiCi0jaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAiaXBjL2ludGVy cnVwdC5oIgogI2luY2x1ZGUgInBvcnQvcGdfYml0dXRpbHMuaCIKICNpbmNsdWRlICJzdG9y YWdlL2J1Zm1nci5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc21nci5oIgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv aW5kZXgvZ2VuYW0uYwppbmRleCBhMjliZTZmNDY3Yi4uN2I5N2EyZmI3OWQgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9pbmRleC9nZW5hbS5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiYWNj ZXNzL3RhYmxlYW0uaCIKICNpbmNsdWRlICJhY2Nlc3MvdHJhbnNhbS5oIgogI2luY2x1ZGUg ImNhdGFsb2cvaW5kZXguaCIKKyNpbmNsdWRlICJpcGMvaW50ZXJydXB0LmgiCiAjaW5jbHVk ZSAibGliL3N0cmluZ2luZm8uaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRl ICJzdG9yYWdlL2J1Zm1nci5oIgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25i dHJlZS9uYnRkZWR1cC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRkZWR1cC5j CmluZGV4IDk1YmUwYjE3OTM5Li40ZDk5OGFkYzJhYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvYWNjZXNzL25idHJlZS9uYnRkZWR1cC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9u YnRyZWUvbmJ0ZGVkdXAuYwpAQCAtMTgsNyArMTgsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy9u YnR4bG9nLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIKICNpbmNsdWRlICJhY2Nl c3MveGxvZ2luc2VydC5oIgotI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgImlw Yy9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKIAogc3RhdGljIHZvaWQg X2J0X2JvdHRvbXVwZGVsX2ZpbmlzaF9wZW5kaW5nKFBhZ2UgcGFnZSwgQlREZWR1cFN0YXRl IHN0YXRlLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRpbnNl cnQuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0aW5zZXJ0LmMKaW5kZXggZDE3 YWFhNWFhMGYuLmUwMDdiMmVhNTE3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mv bmJ0cmVlL25idGluc2VydC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0 aW5zZXJ0LmMKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJhY2Nlc3MveGxvZ2luc2Vy dC5oIgogI2luY2x1ZGUgImNvbW1vbi9pbnQuaCIKICNpbmNsdWRlICJjb21tb24vcGdfcHJu Zy5oIgorI2luY2x1ZGUgImlwYy9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJsaWIvcXVuaXF1 ZS5oIgotI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5o IgogI2luY2x1ZGUgInN0b3JhZ2UvcHJlZGljYXRlLmgiCiAjaW5jbHVkZSAidXRpbHMvaW5q ZWN0aW9uX3BvaW50LmgiCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVl L25idHBhZ2UuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5jCmluZGV4 IDQxMjVjMTg1ZThiLi45MzhmOTA0N2MzNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNj ZXNzL25idHJlZS9uYnRwYWdlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9u YnRwYWdlLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJhY2Nlc3MveGxvZy5oIgog I2luY2x1ZGUgImFjY2Vzcy94bG9naW5zZXJ0LmgiCiAjaW5jbHVkZSAiY29tbW9uL2ludC5o IgorI2luY2x1ZGUgImlwYy9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIK ICNpbmNsdWRlICJzdG9yYWdlL2luZGV4ZnNtLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcmVk aWNhdGUuaCIKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2Vh cmNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jCmluZGV4IDMy YWUwYmRhODkyLi42ZjFmOWRjMGQ4MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnRzZWFyY2guYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25i dHNlYXJjaC5jCkBAIC0xOSw3ICsxOSw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL3JlbHNjYW4u aCIKICNpbmNsdWRlICJhY2Nlc3MveGFjdC5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2luc3Ry dW1lbnRfbm9kZS5oIgotI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgImlwYy9p bnRlcnJ1cHQuaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJzdG9yYWdlL3By ZWRpY2F0ZS5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGdkb2luc2VydC5jIGIvc3JjL2JhY2tlbmQv YWNjZXNzL3NwZ2lzdC9zcGdkb2luc2VydC5jCmluZGV4IDdjNzM3MWM2OWU4Li5iOGI1ZWFh YzU3YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGdkb2luc2Vy dC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BnZG9pbnNlcnQuYwpAQCAt MjAzNSw4ICsyMDM1LDExIEBAIHNwZ2RvaW5zZXJ0KFJlbGF0aW9uIGluZGV4LCBTcEdpc3RT dGF0ZSAqc3RhdGUsCiAJCSAqIHBlbmRpbmcsIGJyZWFrIG91dCBvZiB0aGUgbG9vcCBhbmQg ZGVhbCB3aXRoIHRoZSBzaXR1YXRpb24gYmVsb3cuCiAJCSAqIFNldCByZXN1bHQgPSBmYWxz ZSBiZWNhdXNlIHdlIG11c3QgcmVzdGFydCB0aGUgaW5zZXJ0aW9uIGlmIHRoZQogCQkgKiBp bnRlcnJ1cHQgaXNuJ3QgYSBxdWVyeS1jYW5jZWwtb3ItZGllIGNhc2UuCisJCSAqCisJCSAq IEZJWE1FOiBDaGVja0ZvckludGVycnVwdHNNYXNrIGNvdmVycyBtb3JlIHRoYW4ganVzdCBx dWVyeSBjYW5jZWwKKwkJICogYW5kIGRpZS4gIENvdWxkIHdlIGJlIG1vcmUgcHJlY2lzZSBo ZXJlPwogCQkgKi8KLQkJaWYgKElOVEVSUlVQVFNfUEVORElOR19DT05ESVRJT04oKSkKKwkJ aWYgKElOVEVSUlVQVFNfUEVORElOR19DT05ESVRJT04oQ2hlY2tGb3JJbnRlcnJ1cHRzTWFz aykpCiAJCXsKIAkJCXJlc3VsdCA9IGZhbHNlOwogCQkJYnJlYWs7CkBAIC0yMTYyLDcgKzIx NjUsNyBAQCBzcGdkb2luc2VydChSZWxhdGlvbiBpbmRleCwgU3BHaXN0U3RhdGUgKnN0YXRl LAogCQkJICogcmVwZWF0ZWRseSwgY2hlY2sgZm9yIHF1ZXJ5IGNhbmNlbCAoc2VlIGNvbW1l bnRzIGFib3ZlKS4KIAkJCSAqLwogCXByb2Nlc3NfaW5uZXJfdHVwbGU6Ci0JCQlpZiAoSU5U RVJSVVBUU19QRU5ESU5HX0NPTkRJVElPTigpKQorCQkJaWYgKElOVEVSUlVQVFNfUEVORElO R19DT05ESVRJT04oQ2hlY2tGb3JJbnRlcnJ1cHRzTWFzaykpCiAJCQl7CiAJCQkJcmVzdWx0 ID0gZmFsc2U7CiAJCQkJYnJlYWs7CkBAIC0yMzM4LDcgKzIzNDEsNyBAQCBzcGdkb2luc2Vy dChSZWxhdGlvbiBpbmRleCwgU3BHaXN0U3RhdGUgKnN0YXRlLAogCSAqIHdlcmUgdGhlIGNh c2UsIHRlbGxpbmcgdGhlIGNhbGxlciB0byByZXRyeSB3b3VsZCBjcmVhdGUgYW4gaW5maW5p dGUKIAkgKiBsb29wLgogCSAqLwotCUFzc2VydChJTlRFUlJVUFRTX0NBTl9CRV9QUk9DRVNT RUQoKSk7CisJQXNzZXJ0KElOVEVSUlVQVFNfQ0FOX0JFX1BST0NFU1NFRChDaGVja0Zvcklu dGVycnVwdHNNYXNrKSk7CiAKIAkvKgogCSAqIEZpbmFsbHksIGNoZWNrIGZvciBpbnRlcnJ1 cHRzIGFnYWluLiAgSWYgdGhlcmUgd2FzIGEgcXVlcnkgY2FuY2VsLApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGdpbnNlcnQuYyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9zcGdpc3Qvc3BnaW5zZXJ0LmMKaW5kZXggNzgwZWY2NDZhNTQuLmMyZDdjYWY2ZjY4 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ2luc2VydC5jCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BnaW5zZXJ0LmMKQEAgLTIwLDcgKzIw LDcgQEAKICNpbmNsdWRlICJhY2Nlc3Mvc3BnaXN0X3ByaXZhdGUuaCIKICNpbmNsdWRlICJh Y2Nlc3MvdGFibGVhbS5oIgogI2luY2x1ZGUgImFjY2Vzcy94bG9naW5zZXJ0LmgiCi0jaW5j bHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAiaXBjL2ludGVycnVwdC5oIgogI2luY2x1 ZGUgIm5vZGVzL2V4ZWNub2Rlcy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCiAj aW5jbHVkZSAic3RvcmFnZS9idWxrX3dyaXRlLmgiCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9hY2Nlc3Mvc3BnaXN0L3NwZ3NjYW4uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qv c3Bnc2Nhbi5jCmluZGV4IDJjYzVmMDZmNWQ3Li40NzVhNTBjZGRjZiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGdzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQv YWNjZXNzL3NwZ2lzdC9zcGdzY2FuLmMKQEAgLTE5LDcgKzE5LDcgQEAKICNpbmNsdWRlICJh Y2Nlc3MvcmVsc2Nhbi5oIgogI2luY2x1ZGUgImFjY2Vzcy9zcGdpc3RfcHJpdmF0ZS5oIgog I2luY2x1ZGUgImV4ZWN1dG9yL2luc3RydW1lbnRfbm9kZS5oIgotI2luY2x1ZGUgIm1pc2Nh ZG1pbi5oIgorI2luY2x1ZGUgImlwYy9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJwZ3N0YXQu aCIKICNpbmNsdWRlICJzdG9yYWdlL2J1Zm1nci5oIgogI2luY2x1ZGUgInV0aWxzL2RhdHVt LmgiCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3ZhY3V1bS5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd2YWN1dW0uYwppbmRleCA2YjcxMTdi NTZiMi4uODg0YWNiNjhjMzcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdp c3Qvc3BndmFjdXVtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd2YWN1 dW0uYwpAQCAtMjEsNyArMjEsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy90cmFuc2FtLmgiCiAj aW5jbHVkZSAiYWNjZXNzL3hsb2dpbnNlcnQuaCIKICNpbmNsdWRlICJjb21tYW5kcy92YWN1 dW0uaCIKLSNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJpcGMvaW50ZXJydXB0 LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL2lu ZGV4ZnNtLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9SRUFETUUgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS9SRUFETUUKaW5kZXggMjMxMTA2MjcwZmQuLjczYTcyN2Q1M2Q2IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9SRUFETUUKKysrIGIvc3JjL2JhY2tlbmQv YWNjZXNzL3RyYW5zYW0vUkVBRE1FCkBAIC03OTQsNyArNzk0LDcgQEAgY29tbWl0IHRvIG1p bmltaXplIHRoZSB3aW5kb3cgaW4gd2hpY2ggdGhlIGZpbGVzeXN0ZW0gY2hhbmdlIGhhcyBi ZWVuIG1hZGUKIGJ1dCB0aGUgdHJhbnNhY3Rpb24gaXNuJ3QgZ3VhcmFudGVlZCBjb21taXR0 ZWQuCiAKIFRoZSB3YWx3cml0ZXIgcmVndWxhcmx5IHdha2VzIHVwICh2aWEgd2FsX3dyaXRl cl9kZWxheSkgb3IgaXMgd29rZW4gdXAKLSh2aWEgaXRzIGxhdGNoLCB3aGljaCBpcyBzZXQg YnkgYmFja2VuZHMgY29tbWl0dGluZyBhc3luY2hyb25vdXNseSkgYW5kCisodmlhIGFuIGlu dGVycnVwdCwgd2hpY2ggaXMgc2VudCBieSBiYWNrZW5kcyBjb21taXR0aW5nIGFzeW5jaHJv bm91c2x5KSBhbmQKIHBlcmZvcm1zIGFuIFhMb2dCYWNrZ3JvdW5kRmx1c2goKS4gIFRoaXMg Y2hlY2tzIHRoZSBsb2NhdGlvbiBvZiB0aGUgbGFzdAogY29tcGxldGVseSBmaWxsZWQgV0FM IHBhZ2UuICBJZiB0aGF0IGhhcyBtb3ZlZCBmb3J3YXJkcywgdGhlbiB3ZSB3cml0ZSBhbGwK IHRoZSBjaGFuZ2VkIGJ1ZmZlcnMgdXAgdG8gdGhhdCBwb2ludCwgc28gdGhhdCB1bmRlciBm dWxsIGxvYWQgd2Ugd3JpdGUKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFu c2FtL1JFQURNRS5wYXJhbGxlbCBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL1JFQURN RS5wYXJhbGxlbAppbmRleCA5ZGYzZGE5MWIwYy4uYTM1OTNkZDRmNTQgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL1JFQURNRS5wYXJhbGxlbAorKysgYi9zcmMv YmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9SRUFETUUucGFyYWxsZWwKQEAgLTM3LDcgKzM3LDcg QEAgd2l0aCBmZXdlciBwYXJhbGxlbCB3b3JrZXJzIHRoYW4gaXQgb3JpZ2luYWxseSByZXF1 ZXN0ZWQsIHNvIGNhdGVyaW5nIHRvCiB0aGlzIGNhc2UgaW1wb3NlcyBubyBhZGRpdGlvbmFs IGJ1cmRlbi4KIAogV2hlbmV2ZXIgYSBuZXcgbWVzc2FnZSAob3IgcGFydGlhbCBtZXNzYWdl OyB2ZXJ5IGxhcmdlIG1lc3NhZ2VzIG1heSB3cmFwKSBpcwotc2VudCB0byB0aGUgZXJyb3It cmVwb3J0aW5nIHF1ZXVlLCBQUk9DU0lHX1BBUkFMTEVMX01FU1NBR0UgaXMgc2VudCB0byB0 aGUKK3NlbnQgdG8gdGhlIGVycm9yLXJlcG9ydGluZyBxdWV1ZSwgSU5URVJSVVBUX1BBUkFM TEVMX01FU1NBR0UgaXMgc2VudCB0byB0aGUKIGluaXRpYXRpbmcgYmFja2VuZC4gIFRoaXMg Y2F1c2VzIHRoZSBuZXh0IENIRUNLX0ZPUl9JTlRFUlJVUFRTKCkgaW4gdGhlCiBpbml0aWF0 aW5nIGJhY2tlbmQgdG8gcmVhZCBhbmQgcmV0aHJvdyB0aGUgbWVzc2FnZS4gIEZvciB0aGUg bW9zdCBwYXJ0LCB0aGlzCiBtYWtlcyBlcnJvciByZXBvcnRpbmcgaW4gcGFyYWxsZWwgbW9k ZSAianVzdCB3b3JrIi4gIE9mIGNvdXJzZSwgdG8gd29yawpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0vZ2VuZXJpY194bG9nLmMgYi9zcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS9nZW5lcmljX3hsb2cuYwppbmRleCA3ZjgyMTg2ZDBkNi4uNmVjYTI0NTFh NzAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2dlbmVyaWNfeGxv Zy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2dlbmVyaWNfeGxvZy5jCkBA IC0xNiw3ICsxNiw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL2J1Zm1hc2suaCIKICNpbmNsdWRl ICJhY2Nlc3MvZ2VuZXJpY194bG9nLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2d1dGlscy5o IgotI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgImlwYy9pbnRlcnJ1cHQuaCIK IAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBJbnRlcm5hbGx5LCBhIGRlbHRhIGJldHdl ZW4gcGFnZXMgY29uc2lzdHMgb2YgYSBzZXQgb2YgZnJhZ21lbnRzLiAgRWFjaApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vcGFyYWxsZWwuYyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL3BhcmFsbGVsLmMKaW5kZXggMDFhODkxMDRlZjAuLjQwMGY1 NWUwYjA2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9wYXJhbGxl bC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3BhcmFsbGVsLmMKQEAgLTI4 LDYgKzI4LDcgQEAKICNpbmNsdWRlICJjb21tYW5kcy9hc3luYy5oIgogI2luY2x1ZGUgImNv bW1hbmRzL3ZhY3V1bS5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5oIgor I2luY2x1ZGUgImlwYy9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJsaWJwcS9saWJwcS5oIgog I2luY2x1ZGUgImxpYnBxL3BxZm9ybWF0LmgiCiAjaW5jbHVkZSAibGlicHEvcHFtcS5oIgpA QCAtMTE0LDkgKzExNSw2IEBAIHR5cGVkZWYgc3RydWN0IEZpeGVkUGFyYWxsZWxTdGF0ZQog ICovCiBpbnQJCQlQYXJhbGxlbFdvcmtlck51bWJlciA9IC0xOwogCi0vKiBJcyB0aGVyZSBh IHBhcmFsbGVsIG1lc3NhZ2UgcGVuZGluZyB3aGljaCB3ZSBuZWVkIHRvIHJlY2VpdmU/ICov Ci12b2xhdGlsZSBzaWdfYXRvbWljX3QgUGFyYWxsZWxNZXNzYWdlUGVuZGluZyA9IGZhbHNl OwotCiAvKiBBcmUgd2UgaW5pdGlhbGl6aW5nIGEgcGFyYWxsZWwgd29ya2VyPyAqLwogYm9v bAkJSW5pdGlhbGl6aW5nUGFyYWxsZWxXb3JrZXIgPSBmYWxzZTsKIApAQCAtMTI2LDkgKzEy NCw2IEBAIHN0YXRpYyBGaXhlZFBhcmFsbGVsU3RhdGUgKk15Rml4ZWRQYXJhbGxlbFN0YXRl OwogLyogTGlzdCBvZiBhY3RpdmUgcGFyYWxsZWwgY29udGV4dHMuICovCiBzdGF0aWMgZGxp c3RfaGVhZCBwY3h0X2xpc3QgPSBETElTVF9TVEFUSUNfSU5JVChwY3h0X2xpc3QpOwogCi0v KiBCYWNrZW5kLWxvY2FsIGNvcHkgb2YgZGF0YSBmcm9tIEZpeGVkUGFyYWxsZWxTdGF0ZS4g Ki8KLXN0YXRpYyBwaWRfdCBQYXJhbGxlbExlYWRlclBpZDsKLQogLyoKICAqIExpc3Qgb2Yg aW50ZXJuYWwgcGFyYWxsZWwgd29ya2VyIGVudHJ5IHBvaW50cy4gIFdlIG5lZWQgdGhpcyBm b3IKICAqIHJlYXNvbnMgZXhwbGFpbmVkIGluIExvb2t1cFBhcmFsbGVsV29ya2VyRnVuY3Rp b24oKSwgYmVsb3cuCkBAIC0yNDIsNyArMjM3LDcgQEAgSW5pdGlhbGl6ZVBhcmFsbGVsRFNN KFBhcmFsbGVsQ29udGV4dCAqcGN4dCkKIAkgKiBXZSBjYW4gZGVhbCB3aXRoIHRoYXQgZWRn ZSBjYXNlIGJ5IHByZXRlbmRpbmcgbm8gd29ya2VycyB3ZXJlCiAJICogcmVxdWVzdGVkLgog CSAqLwotCWlmICghSU5URVJSVVBUU19DQU5fQkVfUFJPQ0VTU0VEKCkpCisJaWYgKCFJTlRF UlJVUFRTX0NBTl9CRV9QUk9DRVNTRUQoQ2hlY2tGb3JJbnRlcnJ1cHRzTWFzaykpCiAJCXBj eHQtPm53b3JrZXJzID0gMDsKIAogCS8qCkBAIC02MTEsNyArNjA2LDYgQEAgTGF1bmNoUGFy YWxsZWxXb3JrZXJzKFBhcmFsbGVsQ29udGV4dCAqcGN4dCkKIAlzcHJpbnRmKHdvcmtlci5i Z3dfbGlicmFyeV9uYW1lLCAicG9zdGdyZXMiKTsKIAlzcHJpbnRmKHdvcmtlci5iZ3dfZnVu Y3Rpb25fbmFtZSwgIlBhcmFsbGVsV29ya2VyTWFpbiIpOwogCXdvcmtlci5iZ3dfbWFpbl9h cmcgPSBVSW50MzJHZXREYXR1bShkc21fc2VnbWVudF9oYW5kbGUocGN4dC0+c2VnKSk7Ci0J d29ya2VyLmJnd19ub3RpZnlfcGlkID0gTXlQcm9jUGlkOwogCiAJLyoKIAkgKiBTdGFydCB3 b3JrZXJzLgpAQCAtNzY2LDE2ICs3NjAsMjEgQEAgV2FpdEZvclBhcmFsbGVsV29ya2Vyc1Rv QXR0YWNoKFBhcmFsbGVsQ29udGV4dCAqcGN4dCkKIAkJCXsKIAkJCQkvKgogCQkJCSAqIFdv cmtlciBub3QgeWV0IHN0YXJ0ZWQsIHNvIHdlIG11c3Qgd2FpdC4gIFRoZSBwb3N0bWFzdGVy Ci0JCQkJICogd2lsbCBub3RpZnkgdXMgaWYgdGhlIHdvcmtlcidzIHN0YXRlIGNoYW5nZXMu ICBPdXIgbGF0Y2gKLQkJCQkgKiBtaWdodCBhbHNvIGdldCBzZXQgZm9yIHNvbWUgb3RoZXIg cmVhc29uLCBidXQgaWYgc28gd2UnbGwKLQkJCQkgKiBqdXN0IGVuZCB1cCB3YWl0aW5nIGZv ciB0aGUgc2FtZSB3b3JrZXIgYWdhaW4uCisJCQkJICogd2lsbCBub3RpZnkgdXMgaWYgdGhl IHdvcmtlcidzIHN0YXRlIGNoYW5nZXMgd2l0aAorCQkJCSAqIElOVEVSUlVQVF9XQUlUX1dB S0VVUC4gIFRoZSBpbnRlcnJ1cHQgbWlnaHQgYWxzbyBnZXQgc2V0CisJCQkJICogZm9yIHNv bWUgb3RoZXIgcmVhc29uLCBidXQgaWYgc28gd2UnbGwganVzdCBlbmQgdXAgd2FpdGluZwor CQkJCSAqIGZvciB0aGUgc2FtZSB3b3JrZXIgYWdhaW4uCiAJCQkJICovCi0JCQkJcmMgPSBX YWl0TGF0Y2goTXlMYXRjaCwKLQkJCQkJCQkgICBXTF9MQVRDSF9TRVQgfCBXTF9FWElUX09O X1BNX0RFQVRILAotCQkJCQkJCSAgIC0xLCBXQUlUX0VWRU5UX0JHV09SS0VSX1NUQVJUVVAp OworCQkJCXJjID0gV2FpdEludGVycnVwdChDaGVja0ZvckludGVycnVwdHNNYXNrIHwKKwkJ CQkJCQkJICAgSU5URVJSVVBUX1dBSVRfV0FLRVVQLAorCQkJCQkJCQkgICBXTF9JTlRFUlJV UFQgfCBXTF9FWElUX09OX1BNX0RFQVRILAorCQkJCQkJCQkgICAtMSwgV0FJVF9FVkVOVF9C R1dPUktFUl9TVEFSVFVQKTsKIAotCQkJCWlmIChyYyAmIFdMX0xBVENIX1NFVCkKLQkJCQkJ UmVzZXRMYXRjaChNeUxhdGNoKTsKKwkJCQlpZiAocmMgJiBXTF9JTlRFUlJVUFQpCisJCQkJ eworCQkJCQlDbGVhckludGVycnVwdChJTlRFUlJVUFRfV0FJVF9XQUtFVVApOworCQkJCQlD SEVDS19GT1JfSU5URVJSVVBUUygpOworCQkJCX0KIAkJCX0KIAkJfQogCkBAIC04ODQsMTUg Kzg4MywxNiBAQCBXYWl0Rm9yUGFyYWxsZWxXb3JrZXJzVG9GaW5pc2goUGFyYWxsZWxDb250 ZXh0ICpwY3h0KQogCQkJCSAqIHRoZSB3b3JrZXIgd3JpdGVzIG1lc3NhZ2VzIGFuZCB0ZXJt aW5hdGVzIGFmdGVyIHRoZQogCQkJCSAqIENIRUNLX0ZPUl9JTlRFUlJVUFRTKCkgbmVhciB0 aGUgdG9wIG9mIHRoaXMgZnVuY3Rpb24gYW5kCiAJCQkJICogYmVmb3JlIHRoZSBjYWxsIHRv IEdldEJhY2tncm91bmRXb3JrZXJQaWQoKS4gIEluIHRoYXQgY2FzZSwKLQkJCQkgKiBvdXIg bGF0Y2ggc2hvdWxkIGhhdmUgYmVlbiBzZXQgYXMgd2VsbCBhbmQgdGhlIHJpZ2h0IHRoaW5n cwotCQkJCSAqIHdpbGwgaGFwcGVuIG9uIHRoZSBuZXh0IHBhc3MgdGhyb3VnaCB0aGUgbG9v cC4KKwkJCQkgKiBJTlRFUlJVUFRfV0FJVF9XQUtFVVAgc2hvdWxkIGhhdmUgYmVlbiBzZXQg YXMgd2VsbCBhbmQgdGhlCisJCQkJICogcmlnaHQgdGhpbmdzIHdpbGwgaGFwcGVuIG9uIHRo ZSBuZXh0IHBhc3MgdGhyb3VnaCB0aGUgbG9vcC4KIAkJCQkgKi8KIAkJCX0KIAkJfQogCi0J CSh2b2lkKSBXYWl0TGF0Y2goTXlMYXRjaCwgV0xfTEFUQ0hfU0VUIHwgV0xfRVhJVF9PTl9Q TV9ERUFUSCwgLTEsCi0JCQkJCQkgV0FJVF9FVkVOVF9QQVJBTExFTF9GSU5JU0gpOwotCQlS ZXNldExhdGNoKE15TGF0Y2gpOworCQkodm9pZCkgV2FpdEludGVycnVwdChDaGVja0Zvcklu dGVycnVwdHNNYXNrIHwgSU5URVJSVVBUX1dBSVRfV0FLRVVQLAorCQkJCQkJCSBXTF9JTlRF UlJVUFQgfCBXTF9FWElUX09OX1BNX0RFQVRILCAtMSwKKwkJCQkJCQkgV0FJVF9FVkVOVF9Q QVJBTExFTF9GSU5JU0gpOworCQlDbGVhckludGVycnVwdChJTlRFUlJVUFRfV0FJVF9XQUtF VVApOwogCX0KIAogCWlmIChwY3h0LT50b2MgIT0gTlVMTCkKQEAgLTEwMzMsMjEgKzEwMzMs NiBAQCBQYXJhbGxlbENvbnRleHRBY3RpdmUodm9pZCkKIAlyZXR1cm4gIWRsaXN0X2lzX2Vt cHR5KCZwY3h0X2xpc3QpOwogfQogCi0vKgotICogSGFuZGxlIHJlY2VpcHQgb2YgYW4gaW50 ZXJydXB0IGluZGljYXRpbmcgYSBwYXJhbGxlbCB3b3JrZXIgbWVzc2FnZS4KLSAqCi0gKiBO b3RlOiB0aGlzIGlzIGNhbGxlZCB3aXRoaW4gYSBzaWduYWwgaGFuZGxlciEgIEFsbCB3ZSBj YW4gZG8gaXMgc2V0Ci0gKiBhIGZsYWcgdGhhdCB3aWxsIGNhdXNlIHRoZSBuZXh0IENIRUNL X0ZPUl9JTlRFUlJVUFRTKCkgdG8gaW52b2tlCi0gKiBQcm9jZXNzUGFyYWxsZWxNZXNzYWdl cygpLgotICovCi12b2lkCi1IYW5kbGVQYXJhbGxlbE1lc3NhZ2VJbnRlcnJ1cHQodm9pZCkK LXsKLQlJbnRlcnJ1cHRQZW5kaW5nID0gdHJ1ZTsKLQlQYXJhbGxlbE1lc3NhZ2VQZW5kaW5n ID0gdHJ1ZTsKLQlTZXRMYXRjaChNeUxhdGNoKTsKLX0KLQogLyoKICAqIFByb2Nlc3MgYW55 IHF1ZXVlZCBwcm90b2NvbCBtZXNzYWdlcyByZWNlaXZlZCBmcm9tIHBhcmFsbGVsIHdvcmtl cnMuCiAgKi8KQEAgLTEwODIsOSArMTA2Nyw3IEBAIFByb2Nlc3NQYXJhbGxlbE1lc3NhZ2Vz KHZvaWQpCiAKIAlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGhwbV9jb250 ZXh0KTsKIAotCS8qIE9LIHRvIHByb2Nlc3MgbWVzc2FnZXMuICBSZXNldCB0aGUgZmxhZyBz YXlpbmcgdGhlcmUgYXJlIG1vcmUgdG8gZG8uICovCi0JUGFyYWxsZWxNZXNzYWdlUGVuZGlu ZyA9IGZhbHNlOwotCisJLyogT0sgdG8gcHJvY2VzcyBtZXNzYWdlcyAqLwogCWRsaXN0X2Zv cmVhY2goaXRlciwgJnBjeHRfbGlzdCkKIAl7CiAJCVBhcmFsbGVsQ29udGV4dCAqcGN4dDsK QEAgLTEzMjYsOCArMTMwOSwxMCBAQCBQYXJhbGxlbFdvcmtlck1haW4oRGF0dW0gbWFpbl9h cmcpCiAJLyogU2V0IGZsYWcgdG8gaW5kaWNhdGUgdGhhdCB3ZSdyZSBpbml0aWFsaXppbmcg YSBwYXJhbGxlbCB3b3JrZXIuICovCiAJSW5pdGlhbGl6aW5nUGFyYWxsZWxXb3JrZXIgPSB0 cnVlOwogCi0JLyogRXN0YWJsaXNoIHNpZ25hbCBoYW5kbGVycy4gKi8KLQlwcXNpZ25hbChT SUdURVJNLCBkaWUpOworCS8qCisJICogU3RhbmRhcmQgaW50ZXJydXB0IGhhbmRsZXJzIGhh dmUgYWxyZWFkeSBiZWVuIGluc3RhbGxlZDsgdW5ibG9jaworCSAqIHNpZ25hbHMuCisJICov CiAJQmFja2dyb3VuZFdvcmtlclVuYmxvY2tTaWduYWxzKCk7CiAKIAkvKiBEZXRlcm1pbmUg YW5kIHNldCBvdXIgcGFyYWxsZWwgd29ya2VyIG51bWJlci4gKi8KQEAgLTEzNjMsOCArMTM0 OCw3IEBAIFBhcmFsbGVsV29ya2VyTWFpbihEYXR1bSBtYWluX2FyZykKIAlmcHMgPSBzaG1f dG9jX2xvb2t1cCh0b2MsIFBBUkFMTEVMX0tFWV9GSVhFRCwgZmFsc2UpOwogCU15Rml4ZWRQ YXJhbGxlbFN0YXRlID0gZnBzOwogCi0JLyogQXJyYW5nZSB0byBzaWduYWwgdGhlIGxlYWRl ciBpZiB3ZSBleGl0LiAqLwotCVBhcmFsbGVsTGVhZGVyUGlkID0gZnBzLT5wYXJhbGxlbF9s ZWFkZXJfcGlkOworCS8qIEFycmFuZ2UgdG8gc2VuZCBhbiBpbnRlcnJ1cHQgdG8gdGhlIGxl YWRlciBpZiB3ZSBleGl0LiAqLwogCVBhcmFsbGVsTGVhZGVyUHJvY051bWJlciA9IGZwcy0+ cGFyYWxsZWxfbGVhZGVyX3Byb2NfbnVtYmVyOwogCWJlZm9yZV9zaG1lbV9leGl0KFBhcmFs bGVsV29ya2VyU2h1dGRvd24sIFBvaW50ZXJHZXREYXR1bShzZWcpKTsKIApAQCAtMTM4MCw4 ICsxMzY0LDcgQEAgUGFyYWxsZWxXb3JrZXJNYWluKERhdHVtIG1haW5fYXJnKQogCXNobV9t cV9zZXRfc2VuZGVyKG1xLCBNeVByb2MpOwogCW1xaCA9IHNobV9tcV9hdHRhY2gobXEsIHNl ZywgTlVMTCk7CiAJcHFfcmVkaXJlY3RfdG9fc2htX21xKHNlZywgbXFoKTsKLQlwcV9zZXRf cGFyYWxsZWxfbGVhZGVyKGZwcy0+cGFyYWxsZWxfbGVhZGVyX3BpZCwKLQkJCQkJCSAgIGZw cy0+cGFyYWxsZWxfbGVhZGVyX3Byb2NfbnVtYmVyKTsKKwlwcV9zZXRfcGFyYWxsZWxfbGVh ZGVyKGZwcy0+cGFyYWxsZWxfbGVhZGVyX3Byb2NfbnVtYmVyKTsKIAogCS8qCiAJICogSG9v cmF5ISBQcmltYXJ5IGluaXRpYWxpemF0aW9uIGlzIGNvbXBsZXRlLiAgTm93LCB3ZSBuZWVk IHRvIHNldCB1cCBvdXIKQEAgLTE2MjAsOSArMTYwMyw4IEBAIFBhcmFsbGVsV29ya2VyUmVw b3J0TGFzdFJlY0VuZChYTG9nUmVjUHRyIGxhc3RfeGxvZ19lbmQpCiBzdGF0aWMgdm9pZAog UGFyYWxsZWxXb3JrZXJTaHV0ZG93bihpbnQgY29kZSwgRGF0dW0gYXJnKQogewotCVNlbmRQ cm9jU2lnbmFsKFBhcmFsbGVsTGVhZGVyUGlkLAotCQkJCSAgIFBST0NTSUdfUEFSQUxMRUxf TUVTU0FHRSwKLQkJCQkgICBQYXJhbGxlbExlYWRlclByb2NOdW1iZXIpOworCVNlbmRJbnRl cnJ1cHQoSU5URVJSVVBUX1BBUkFMTEVMX01FU1NBR0UsCisJCQkJICBQYXJhbGxlbExlYWRl clByb2NOdW1iZXIpOwogCiAJZHNtX2RldGFjaCgoZHNtX3NlZ21lbnQgKikgRGF0dW1HZXRQ b2ludGVyKGFyZykpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5z YW0vc2xydS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vc2xydS5jCmluZGV4IDU0 OWM3ZTNlNjRiLi41NTkyZGYzMGY4ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0vc2xydS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3NscnUu YwpAQCAtNjYsNyArNjYsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy90cmFuc2FtLmgiCiAjaW5j bHVkZSAiYWNjZXNzL3hsb2cuaCIKICNpbmNsdWRlICJhY2Nlc3MveGxvZ3V0aWxzLmgiCi0j aW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAiaXBjL2ludGVycnVwdC5oIgogI2lu Y2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvZmQuaCIKICNpbmNsdWRlICJz dG9yYWdlL3NobWVtLmgiCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNh bS90d29waGFzZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdHdvcGhhc2UuYwpp bmRleCA2MDFjZTNmYWE2NC4uZjQzNTg4YjNjZjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL3R3b3BoYXNlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3Ry YW5zYW0vdHdvcGhhc2UuYwpAQCAtOTEsNiArOTEsNyBAQAogI2luY2x1ZGUgImNhdGFsb2cv cGdfdHlwZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvc3RvcmFnZS5oIgogI2luY2x1ZGUgImZ1 bmNhcGkuaCIKKyNpbmNsdWRlICJpcGMvaW50ZXJydXB0LmgiCiAjaW5jbHVkZSAibWlzY2Fk bWluLmgiCiAjaW5jbHVkZSAicGdfdHJhY2UuaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwppbmRleCAxNjYxNGUxNTJkZC4uYjE3NDk3ZThi MWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMKQEAgLTcwLDYgKzcwLDcgQEAK ICNpbmNsdWRlICJjb21tb24vY29udHJvbGRhdGFfdXRpbHMuaCIKICNpbmNsdWRlICJjb21t b24vZmlsZV91dGlscy5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2luc3RydW1lbnQuaCIKKyNp bmNsdWRlICJpcGMvaW50ZXJydXB0LmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5j bHVkZSAicGdfdHJhY2UuaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKQEAgLTg4LDcgKzg5LDYg QEAKICNpbmNsdWRlICJzdG9yYWdlL2ZkLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIK ICNpbmNsdWRlICJzdG9yYWdlL2xhcmdlX29iamVjdC5oIgotI2luY2x1ZGUgInN0b3JhZ2Uv bGF0Y2guaCIKICNpbmNsdWRlICJzdG9yYWdlL3ByZWRpY2F0ZS5oIgogI2luY2x1ZGUgInN0 b3JhZ2UvcHJvYy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY2FycmF5LmgiCkBAIC0yNjU3 LDcgKzI2NTcsNyBAQCBYTG9nU2V0QXN5bmNYYWN0TFNOKFhMb2dSZWNQdHIgYXN5bmNYYWN0 TFNOKQogCQlQcm9jTnVtYmVyCXdhbHdyaXRlclByb2MgPSBwcm9jZ2xvYmFsLT53YWx3cml0 ZXJQcm9jOwogCiAJCWlmICh3YWx3cml0ZXJQcm9jICE9IElOVkFMSURfUFJPQ19OVU1CRVIp Ci0JCQlTZXRMYXRjaCgmR2V0UEdQcm9jQnlOdW1iZXIod2Fsd3JpdGVyUHJvYyktPnByb2NM YXRjaCk7CisJCQlTZW5kSW50ZXJydXB0KElOVEVSUlVQVF9XQUlUX1dBS0VVUCwgUHJvY0ds b2JhbC0+d2Fsd3JpdGVyUHJvYyk7CiAJfQogfQogCkBAIC05NTEwLDExICs5NTEwLDExIEBA IGRvX3BnX2JhY2t1cF9zdG9wKEJhY2t1cFN0YXRlICpzdGF0ZSwgYm9vbCB3YWl0Zm9yYXJj aGl2ZSkKIAkJCQlyZXBvcnRlZF93YWl0aW5nID0gdHJ1ZTsKIAkJCX0KIAotCQkJKHZvaWQp IFdhaXRMYXRjaChNeUxhdGNoLAotCQkJCQkJCSBXTF9MQVRDSF9TRVQgfCBXTF9USU1FT1VU IHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwKLQkJCQkJCQkgMTAwMEwsCi0JCQkJCQkJIFdBSVRf RVZFTlRfQkFDS1VQX1dBSVRfV0FMX0FSQ0hJVkUpOwotCQkJUmVzZXRMYXRjaChNeUxhdGNo KTsKKwkJCSh2b2lkKSBXYWl0SW50ZXJydXB0KENoZWNrRm9ySW50ZXJydXB0c01hc2sgfCBJ TlRFUlJVUFRfV0FJVF9XQUtFVVAsCisJCQkJCQkJCSBXTF9JTlRFUlJVUFQgfCBXTF9USU1F T1VUIHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwKKwkJCQkJCQkJIDEwMDBMLAorCQkJCQkJCQkg V0FJVF9FVkVOVF9CQUNLVVBfV0FJVF9XQUxfQVJDSElWRSk7CisJCQlDbGVhckludGVycnVw dChJTlRFUlJVUFRfV0FJVF9XQUtFVVApOwogCiAJCQlpZiAoKyt3YWl0cyA+PSBzZWNvbmRz X2JlZm9yZV93YXJuaW5nKQogCQkJewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0veGxvZ2Z1bmNzLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9n ZnVuY3MuYwppbmRleCAyZWZlNDEwNWVmYi4uOGM3NGVjZWVjMTggMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL3hsb2dmdW5jcy5jCkBAIC0yNCwxMSArMjQsMTEgQEAKICNpbmNs dWRlICJhY2Nlc3MveGxvZ3JlY292ZXJ5LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBl LmgiCiAjaW5jbHVkZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUgImlwYy9pbnRlcnJ1cHQuaCIK ICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRl ICJyZXBsaWNhdGlvbi93YWxyZWNlaXZlci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvZmQuaCIK LSNpbmNsdWRlICJzdG9yYWdlL2xhdGNoLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zdGFuZGJ5 LmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11 dGlscy5oIgpAQCAtNzE4LDE3ICs3MTgsMTUgQEAgcGdfcHJvbW90ZShQR19GVU5DVElPTl9B UkdTKQogCXsKIAkJaW50CQkJcmM7CiAKLQkJUmVzZXRMYXRjaChNeUxhdGNoKTsKLQogCQlp ZiAoIVJlY292ZXJ5SW5Qcm9ncmVzcygpKQogCQkJUEdfUkVUVVJOX0JPT0wodHJ1ZSk7CiAK IAkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIAotCQlyYyA9IFdhaXRMYXRjaChNeUxhdGNo LAotCQkJCQkgICBXTF9MQVRDSF9TRVQgfCBXTF9USU1FT1VUIHwgV0xfUE9TVE1BU1RFUl9E RUFUSCwKLQkJCQkJICAgMTAwMEwgLyBXQUlUU19QRVJfU0VDT05ELAotCQkJCQkgICBXQUlU X0VWRU5UX1BST01PVEUpOworCQlyYyA9IFdhaXRJbnRlcnJ1cHQoQ2hlY2tGb3JJbnRlcnJ1 cHRzTWFzaywKKwkJCQkJCSAgIFdMX0lOVEVSUlVQVCB8IFdMX1RJTUVPVVQgfCBXTF9QT1NU TUFTVEVSX0RFQVRILAorCQkJCQkJICAgMTAwMEwgLyBXQUlUU19QRVJfU0VDT05ELAorCQkJ CQkJICAgV0FJVF9FVkVOVF9QUk9NT1RFKTsKIAogCQkvKgogCQkgKiBFbWVyZ2VuY3kgYmFp bG91dCBpZiBwb3N0bWFzdGVyIGhhcyBkaWVkLiAgVGhpcyBpcyB0byBhdm9pZCB0aGUKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMKaW5kZXggMTE3ZDhk OGJiNmIuLmRjMjRlZjk4OTE0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS94bG9ncmVjb3ZlcnkuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94 bG9ncmVjb3ZlcnkuYwpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgImNhdGFsb2cvcGdf Y29udHJvbC5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3RhYmxlc3BhY2UuaCIKICNpbmNsdWRl ICJjb21tb24vZmlsZV91dGlscy5oIgorI2luY2x1ZGUgImlwYy9pbnRlcnJ1cHQuaCIKICNp bmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJub2Rlcy9taXNjbm9kZXMuaCIKICNp bmNsdWRlICJwZ3N0YXQuaCIKQEAgLTU0LDggKzU1LDggQEAKICNpbmNsdWRlICJyZXBsaWNh dGlvbi93YWxyZWNlaXZlci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvZmQuaCIKICNpbmNsdWRl ICJzdG9yYWdlL2lwYy5oIgotI2luY2x1ZGUgInN0b3JhZ2UvbGF0Y2guaCIKICNpbmNsdWRl ICJzdG9yYWdlL3Btc2lnbmFsLmgiCisjaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCiAjaW5j bHVkZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIKICNpbmNsdWRlICJzdG9yYWdlL3NwaW4uaCIK ICNpbmNsdWRlICJ1dGlscy9kYXRldGltZS5oIgpAQCAtMzIyLDIzICszMjMsNiBAQCB0eXBl ZGVmIHN0cnVjdCBYTG9nUmVjb3ZlcnlDdGxEYXRhCiAJICovCiAJYm9vbAkJU2hhcmVkUHJv bW90ZUlzVHJpZ2dlcmVkOwogCi0JLyoKLQkgKiByZWNvdmVyeVdha2V1cExhdGNoIGlzIHVz ZWQgdG8gd2FrZSB1cCB0aGUgc3RhcnR1cCBwcm9jZXNzIHRvIGNvbnRpbnVlCi0JICogV0FM IHJlcGxheSwgaWYgaXQgaXMgd2FpdGluZyBmb3IgV0FMIHRvIGFycml2ZSBvciBwcm9tb3Rp b24gdG8gYmUKLQkgKiByZXF1ZXN0ZWQuCi0JICoKLQkgKiBOb3RlIHRoYXQgdGhlIHN0YXJ0 dXAgcHJvY2VzcyBhbHNvIHVzZXMgYW5vdGhlciBsYXRjaCwgaXRzIHByb2NMYXRjaCwKLQkg KiB0byB3YWl0IGZvciByZWNvdmVyeSBjb25mbGljdC4gSWYgd2UgZ2V0IHJpZCBvZiByZWNv dmVyeVdha2V1cExhdGNoIGZvcgotCSAqIHNpZ25hbGluZyB0aGUgc3RhcnR1cCBwcm9jZXNz IGluIGZhdm9yIG9mIHVzaW5nIGl0cyBwcm9jTGF0Y2gsIHdoaWNoCi0JICogY29tcG9ydHMg YmV0dGVyIHdpdGggcG9zc2libGUgZ2VuZXJpYyBzaWduYWwgaGFuZGxlcnMgdXNpbmcgdGhh dCBsYXRjaC4KLQkgKiBCdXQgd2Ugc2hvdWxkIG5vdCBkbyB0aGF0IGJlY2F1c2UgdGhlIHN0 YXJ0dXAgcHJvY2VzcyBkb2Vzbid0IGFzc3VtZQotCSAqIHRoYXQgaXQncyB3YWtlbiB1cCBi eSB3YWxyZWNlaXZlciBwcm9jZXNzIG9yIFNJR0hVUCBzaWduYWwgaGFuZGxlcgotCSAqIHdo aWxlIGl0J3Mgd2FpdGluZyBmb3IgcmVjb3ZlcnkgY29uZmxpY3QuIFRoZSBzZXBhcmF0ZSBs YXRjaGVzLAotCSAqIHJlY292ZXJ5V2FrZXVwTGF0Y2ggYW5kIHByb2NMYXRjaCwgc2hvdWxk IGJlIHVzZWQgZm9yIGludGVyLXByb2Nlc3MKLQkgKiBjb21tdW5pY2F0aW9uIGZvciBXQUwg cmVwbGF5IGFuZCByZWNvdmVyeSBjb25mbGljdCwgcmVzcGVjdGl2ZWx5LgotCSAqLwotCUxh dGNoCQlyZWNvdmVyeVdha2V1cExhdGNoOwotCiAJLyoKIAkgKiBMYXN0IHJlY29yZCBzdWNj ZXNzZnVsbHkgcmVwbGF5ZWQuCiAJICovCkBAIC00NzMsNyArNDU3LDYgQEAgWExvZ1JlY292 ZXJ5U2htZW1Jbml0KHZvaWQpCiAJbWVtc2V0KFhMb2dSZWNvdmVyeUN0bCwgMCwgc2l6ZW9m KFhMb2dSZWNvdmVyeUN0bERhdGEpKTsKIAogCVNwaW5Mb2NrSW5pdCgmWExvZ1JlY292ZXJ5 Q3RsLT5pbmZvX2xjayk7Ci0JSW5pdFNoYXJlZExhdGNoKCZYTG9nUmVjb3ZlcnlDdGwtPnJl Y292ZXJ5V2FrZXVwTGF0Y2gpOwogCUNvbmRpdGlvblZhcmlhYmxlSW5pdCgmWExvZ1JlY292 ZXJ5Q3RsLT5yZWNvdmVyeU5vdFBhdXNlZENWKTsKIH0KIApAQCAtNTQ3LDEzICs1MzAsNiBA QCBJbml0V2FsUmVjb3ZlcnkoQ29udHJvbEZpbGVEYXRhICpDb250cm9sRmlsZSwgYm9vbCAq d2FzU2h1dGRvd25fcHRyLAogCXJlYWRSZWNvdmVyeVNpZ25hbEZpbGUoKTsKIAl2YWxpZGF0 ZVJlY292ZXJ5UGFyYW1ldGVycygpOwogCi0JLyoKLQkgKiBUYWtlIG93bmVyc2hpcCBvZiB0 aGUgd2FrZXVwIGxhdGNoIGlmIHdlJ3JlIGdvaW5nIHRvIHNsZWVwIGR1cmluZwotCSAqIHJl Y292ZXJ5LCBpZiByZXF1aXJlZC4KLQkgKi8KLQlpZiAoQXJjaGl2ZVJlY292ZXJ5UmVxdWVz dGVkKQotCQlPd25MYXRjaCgmWExvZ1JlY292ZXJ5Q3RsLT5yZWNvdmVyeVdha2V1cExhdGNo KTsKLQogCS8qCiAJICogU2V0IHRoZSBXQUwgcmVhZGluZyBwcm9jZXNzb3Igbm93LCBhcyBp dCB3aWxsIGJlIG5lZWRlZCB3aGVuIHJlYWRpbmcKIAkgKiB0aGUgY2hlY2twb2ludCByZWNv cmQgcmVxdWlyZWQgKGJhY2t1cF9sYWJlbCBvciBub3QpLgpAQCAtMTY1NCwxMyArMTYzMCw2 IEBAIFNodXRkb3duV2FsUmVjb3Zlcnkodm9pZCkKIAkJc25wcmludGYocmVjb3ZlcnlQYXRo LCBNQVhQR1BBVEgsIFhMT0dESVIgIi9SRUNPVkVSWUhJU1RPUlkiKTsKIAkJdW5saW5rKHJl Y292ZXJ5UGF0aCk7CS8qIGlnbm9yZSBhbnkgZXJyb3IgKi8KIAl9Ci0KLQkvKgotCSAqIFdl IGRvbid0IG5lZWQgdGhlIGxhdGNoIGFueW1vcmUuIEl0J3Mgbm90IHN0cmljdGx5IG5lY2Vz c2FyeSB0byBkaXNvd24KLQkgKiBpdCwgYnV0IGxldCdzIGRvIGl0IGZvciB0aGUgc2FrZSBv ZiB0aWRpbmVzcy4KLQkgKi8KLQlpZiAoQXJjaGl2ZVJlY292ZXJ5UmVxdWVzdGVkKQotCQlE aXNvd25MYXRjaCgmWExvZ1JlY292ZXJ5Q3RsLT5yZWNvdmVyeVdha2V1cExhdGNoKTsKIH0K IAogLyoKQEAgLTE3OTAsOCArMTc1OSw4IEBAIFBlcmZvcm1XYWxSZWNvdmVyeSh2b2lkKQog CQkJfQogI2VuZGlmCiAKLQkJCS8qIEhhbmRsZSBpbnRlcnJ1cHQgc2lnbmFscyBvZiBzdGFy dHVwIHByb2Nlc3MgKi8KLQkJCVByb2Nlc3NTdGFydHVwUHJvY0ludGVycnVwdHMoKTsKKwkJ CUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisJCQlTdGFydHVwUHJvY0NoZWNrUG9zdG1hc3Rl ckRlYXRoKCk7CiAKIAkJCS8qCiAJCQkgKiBQYXVzZSBXQUwgcmVwbGF5LCBpZiByZXF1ZXN0 ZWQgYnkgYSBob3Qtc3RhbmRieSBzZXNzaW9uIHZpYQpAQCAtMTgyMCw4ICsxNzg5LDggQEAg UGVyZm9ybVdhbFJlY292ZXJ5KHZvaWQpCiAJCQl9CiAKIAkJCS8qCi0JCQkgKiBJZiB3ZSd2 ZSBiZWVuIGFza2VkIHRvIGxhZyB0aGUgcHJpbWFyeSwgd2FpdCBvbiBsYXRjaCB1bnRpbAot CQkJICogZW5vdWdoIHRpbWUgaGFzIHBhc3NlZC4KKwkJCSAqIElmIHdlJ3ZlIGJlZW4gYXNr ZWQgdG8gbGFnIHRoZSBwcmltYXJ5LCB3YWl0IHVudGlsIGVub3VnaCB0aW1lCisJCQkgKiBo YXMgcGFzc2VkLgogCQkJICovCiAJCQlpZiAocmVjb3ZlcnlBcHBseURlbGF5KHhsb2dyZWFk ZXIpKQogCQkJewpAQCAtMTg0OSw5ICsxODE4LDggQEAgUGVyZm9ybVdhbFJlY292ZXJ5KHZv aWQpCiAJCQl9CiAKIAkJCS8qCi0JCQkgKiBJZiB3ZSByZXBsYXllZCBhbiBMU04gdGhhdCBz b21lb25lIHdhcyB3YWl0aW5nIGZvciB0aGVuIHdhbGsKLQkJCSAqIG92ZXIgdGhlIHNoYXJl ZCBtZW1vcnkgYXJyYXkgYW5kIHNldCBsYXRjaGVzIHRvIG5vdGlmeSB0aGUKLQkJCSAqIHdh aXRlcnMuCisJCQkgKiBJZiB3ZSByZXBsYXllZCBhbiBMU04gdGhhdCBzb21lb25lIHdhcyB3 YWl0aW5nIGZvciwgd2FrZSB0aGVtCisJCQkgKiB1cC4KIAkJCSAqLwogCQkJaWYgKHdhaXRM U05TdGF0ZSAmJgogCQkJCShYTG9nUmVjb3ZlcnlDdGwtPmxhc3RSZXBsYXllZEVuZFJlY1B0 ciA+PQpAQCAtMjk3Nyw3ICsyOTQ1LDcgQEAgcmVjb3ZlcnlQYXVzZXNIZXJlKGJvb2wgZW5k T2ZSZWNvdmVyeSkKIAkvKiBsb29wIHVudGlsIHJlY292ZXJ5UGF1c2VTdGF0ZSBpcyBzZXQg dG8gUkVDT1ZFUllfTk9UX1BBVVNFRCAqLwogCXdoaWxlIChHZXRSZWNvdmVyeVBhdXNlU3Rh dGUoKSAhPSBSRUNPVkVSWV9OT1RfUEFVU0VEKQogCXsKLQkJUHJvY2Vzc1N0YXJ0dXBQcm9j SW50ZXJydXB0cygpOworCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwogCQlpZiAoQ2hlY2tG b3JTdGFuZGJ5VHJpZ2dlcigpKQogCQkJcmV0dXJuOwogCkBAIC0zMDU0LDggKzMwMjIsOCBA QCByZWNvdmVyeUFwcGx5RGVsYXkoWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAJZGVsYXlV bnRpbCA9IFRpbWVzdGFtcFR6UGx1c01pbGxpc2Vjb25kcyh4dGltZSwgcmVjb3ZlcnlfbWlu X2FwcGx5X2RlbGF5KTsKIAogCS8qCi0JICogRXhpdCB3aXRob3V0IGFybWluZyB0aGUgbGF0 Y2ggaWYgaXQncyBhbHJlYWR5IHBhc3QgdGltZSB0byBhcHBseSB0aGlzCi0JICogcmVjb3Jk CisJICogRXhpdCB3aXRob3V0IGNsZWFyaW5nIHRoZSBpbnRlcnJ1cHQgaWYgaXQncyBhbHJl YWR5IHBhc3QgdGltZSB0byBhcHBseQorCSAqIHRoaXMgcmVjb3JkCiAJICovCiAJbXNlY3Mg PSBUaW1lc3RhbXBEaWZmZXJlbmNlTWlsbGlzZWNvbmRzKEdldEN1cnJlbnRUaW1lc3RhbXAo KSwgZGVsYXlVbnRpbCk7CiAJaWYgKG1zZWNzIDw9IDApCkBAIC0zMDYzLDExICszMDMxLDE2 IEBAIHJlY292ZXJ5QXBwbHlEZWxheShYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAogCXdo aWxlICh0cnVlKQogCXsKLQkJUmVzZXRMYXRjaCgmWExvZ1JlY292ZXJ5Q3RsLT5yZWNvdmVy eVdha2V1cExhdGNoKTsKLQogCQkvKiBUaGlzIG1pZ2h0IGNoYW5nZSByZWNvdmVyeV9taW5f YXBwbHlfZGVsYXkuICovCi0JCVByb2Nlc3NTdGFydHVwUHJvY0ludGVycnVwdHMoKTsKKwkJ Q0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIAorCQkvKgorCQkgKiBXYWl0IHVudGlsIG1vcmUg V0FMIGFycml2ZXMuICAoV2UgdXNlIGEgZGVkaWNhdGVkIGludGVycnVwdCByYXRoZXIKKwkJ ICogdGhhbiBJTlRFUlJVUFRfV0FJVF9XQUtFVVAgZm9yIHRoaXMsIHNvIHRoYXQgbW9yZSBX QUwgYXJyaXZpbmcKKwkJICogZG9lc24ndCB3YWtlIHVwIHRoZSBzdGFydHVwIHByb2Nlc3Mg ZXhjZXNzaXZlbHkgd2hlbiB3ZSdyZSB3YWl0aW5nCisJCSAqIGluIG90aGVyIHBsYWNlcywg bGlrZSBmb3IgcmVjb3ZlcnkgY29uZmxpY3RzKS4KKwkJICovCisJCUNsZWFySW50ZXJydXB0 KElOVEVSUlVQVF9XQUxfQVJSSVZFRCk7CiAJCWlmIChDaGVja0ZvclN0YW5kYnlUcmlnZ2Vy KCkpCiAJCQlicmVhazsKIApAQCAtMzA4OCwxMCArMzA2MSwxMiBAQCByZWNvdmVyeUFwcGx5 RGVsYXkoWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAKIAkJZWxvZyhERUJVRzIsICJyZWNv dmVyeSBhcHBseSBkZWxheSAlbGQgbWlsbGlzZWNvbmRzIiwgbXNlY3MpOwogCi0JCSh2b2lk KSBXYWl0TGF0Y2goJlhMb2dSZWNvdmVyeUN0bC0+cmVjb3ZlcnlXYWtldXBMYXRjaCwKLQkJ CQkJCSBXTF9MQVRDSF9TRVQgfCBXTF9USU1FT1VUIHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwK LQkJCQkJCSBtc2VjcywKLQkJCQkJCSBXQUlUX0VWRU5UX1JFQ09WRVJZX0FQUExZX0RFTEFZ KTsKKwkJKHZvaWQpIFdhaXRJbnRlcnJ1cHQoQ2hlY2tGb3JJbnRlcnJ1cHRzTWFzayB8CisJ CQkJCQkJIElOVEVSUlVQVF9XQUxfQVJSSVZFRCB8CisJCQkJCQkJIElOVEVSUlVQVF9DSEVD S19QUk9NT1RFLAorCQkJCQkJCSBXTF9JTlRFUlJVUFQgfCBXTF9USU1FT1VUIHwgV0xfRVhJ VF9PTl9QTV9ERUFUSCwKKwkJCQkJCQkgbXNlY3MsCisJCQkJCQkJIFdBSVRfRVZFTlRfUkVD T1ZFUllfQVBQTFlfREVMQVkpOwogCX0KIAlyZXR1cm4gdHJ1ZTsKIH0KQEAgLTM3NjksMTYg KzM3NDQsMTYgQEAgV2FpdEZvcldBTFRvQmVjb21lQXZhaWxhYmxlKFhMb2dSZWNQdHIgUmVj UHRyLCBib29sIHJhbmRBY2Nlc3MsCiAJCQkJCQkvKiBEbyBiYWNrZ3JvdW5kIHRhc2tzIHRo YXQgbWlnaHQgYmVuZWZpdCB1cyBsYXRlci4gKi8KIAkJCQkJCUtub3duQXNzaWduZWRUcmFu c2FjdGlvbklkc0lkbGVNYWludGVuYW5jZSgpOwogCi0JCQkJCQkodm9pZCkgV2FpdExhdGNo KCZYTG9nUmVjb3ZlcnlDdGwtPnJlY292ZXJ5V2FrZXVwTGF0Y2gsCi0JCQkJCQkJCQkJIFdM X0xBVENIX1NFVCB8IFdMX1RJTUVPVVQgfAotCQkJCQkJCQkJCSBXTF9FWElUX09OX1BNX0RF QVRILAotCQkJCQkJCQkJCSB3YWl0X3RpbWUsCi0JCQkJCQkJCQkJIFdBSVRfRVZFTlRfUkVD T1ZFUllfUkVUUklFVkVfUkVUUllfSU5URVJWQUwpOwotCQkJCQkJUmVzZXRMYXRjaCgmWExv Z1JlY292ZXJ5Q3RsLT5yZWNvdmVyeVdha2V1cExhdGNoKTsKKwkJCQkJCSh2b2lkKSBXYWl0 SW50ZXJydXB0KENoZWNrRm9ySW50ZXJydXB0c01hc2sgfAorCQkJCQkJCQkJCQkgSU5URVJS VVBUX1dBTF9BUlJJVkVELAorCQkJCQkJCQkJCQkgV0xfSU5URVJSVVBUIHwgV0xfVElNRU9V VCB8CisJCQkJCQkJCQkJCSBXTF9FWElUX09OX1BNX0RFQVRILAorCQkJCQkJCQkJCQkgd2Fp dF90aW1lLAorCQkJCQkJCQkJCQkgV0FJVF9FVkVOVF9SRUNPVkVSWV9SRVRSSUVWRV9SRVRS WV9JTlRFUlZBTCk7CisJCQkJCQlDbGVhckludGVycnVwdChJTlRFUlJVUFRfV0FMX0FSUklW RUQpOwogCQkJCQkJbm93ID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOwogCi0JCQkJCQkvKiBI YW5kbGUgaW50ZXJydXB0IHNpZ25hbHMgb2Ygc3RhcnR1cCBwcm9jZXNzICovCi0JCQkJCQlQ cm9jZXNzU3RhcnR1cFByb2NJbnRlcnJ1cHRzKCk7CisJCQkJCQlDSEVDS19GT1JfSU5URVJS VVBUUygpOwogCQkJCQl9CiAJCQkJCWxhc3RfZmFpbF90aW1lID0gbm93OwogCQkJCQljdXJy ZW50U291cmNlID0gWExPR19GUk9NX0FSQ0hJVkU7CkBAIC00MDQ0LDExICs0MDE5LDEyIEBA IFdhaXRGb3JXQUxUb0JlY29tZUF2YWlsYWJsZShYTG9nUmVjUHRyIFJlY1B0ciwgYm9vbCBy YW5kQWNjZXNzLAogCQkJCQkgKiBXYWl0IGZvciBtb3JlIFdBTCB0byBhcnJpdmUsIHdoZW4g d2Ugd2lsbCBiZSB3b2tlbgogCQkJCQkgKiBpbW1lZGlhdGVseSBieSB0aGUgV0FMIHJlY2Vp dmVyLgogCQkJCQkgKi8KLQkJCQkJKHZvaWQpIFdhaXRMYXRjaCgmWExvZ1JlY292ZXJ5Q3Rs LT5yZWNvdmVyeVdha2V1cExhdGNoLAotCQkJCQkJCQkJIFdMX0xBVENIX1NFVCB8IFdMX0VY SVRfT05fUE1fREVBVEgsCi0JCQkJCQkJCQkgLTFMLAotCQkJCQkJCQkJIFdBSVRfRVZFTlRf UkVDT1ZFUllfV0FMX1NUUkVBTSk7Ci0JCQkJCVJlc2V0TGF0Y2goJlhMb2dSZWNvdmVyeUN0 bC0+cmVjb3ZlcnlXYWtldXBMYXRjaCk7CisJCQkJCSh2b2lkKSBXYWl0SW50ZXJydXB0KENo ZWNrRm9ySW50ZXJydXB0c01hc2sgfAorCQkJCQkJCQkJCSBJTlRFUlJVUFRfV0FMX0FSUklW RUQsCisJCQkJCQkJCQkJIFdMX0lOVEVSUlVQVCB8IFdMX0VYSVRfT05fUE1fREVBVEgsCisJ CQkJCQkJCQkJIC0xTCwKKwkJCQkJCQkJCQkgV0FJVF9FVkVOVF9SRUNPVkVSWV9XQUxfU1RS RUFNKTsKKwkJCQkJQ2xlYXJJbnRlcnJ1cHQoSU5URVJSVVBUX1dBTF9BUlJJVkVEKTsKIAkJ CQkJYnJlYWs7CiAJCQkJfQogCkBAIC00MDY0LDExICs0MDQwLDggQEAgV2FpdEZvcldBTFRv QmVjb21lQXZhaWxhYmxlKFhMb2dSZWNQdHIgUmVjUHRyLCBib29sIHJhbmRBY2Nlc3MsCiAJ CQlSRUNPVkVSWV9OT1RfUEFVU0VEKQogCQkJcmVjb3ZlcnlQYXVzZXNIZXJlKGZhbHNlKTsK IAotCQkvKgotCQkgKiBUaGlzIHBvc3NpYmx5LWxvbmcgbG9vcCBuZWVkcyB0byBoYW5kbGUg aW50ZXJydXB0cyBvZiBzdGFydHVwCi0JCSAqIHByb2Nlc3MuCi0JCSAqLwotCQlQcm9jZXNz U3RhcnR1cFByb2NJbnRlcnJ1cHRzKCk7CisJCS8qIFRoaXMgcG9zc2libHktbG9uZyBsb29w IG5lZWRzIHRvIGhhbmRsZSBpbnRlcnJ1cHRzLiAqLworCQlDSEVDS19GT1JfSU5URVJSVVBU UygpOwogCX0KIAogCXJldHVybiBYTFJFQURfRkFJTDsJCQkvKiBub3QgcmVhY2hlZCAqLwpA QCAtNDUwMCwxMSArNDQ3MywxMSBAQCBDaGVja0ZvclN0YW5kYnlUcmlnZ2VyKHZvaWQpCiAJ aWYgKExvY2FsUHJvbW90ZUlzVHJpZ2dlcmVkKQogCQlyZXR1cm4gdHJ1ZTsKIAotCWlmIChJ c1Byb21vdGVTaWduYWxlZCgpICYmIENoZWNrUHJvbW90ZVNpZ25hbCgpKQorCWlmIChJbnRl cnJ1cHRQZW5kaW5nKElOVEVSUlVQVF9DSEVDS19QUk9NT1RFKSAmJiBDaGVja1Byb21vdGVT aWduYWwoKSkKIAl7CiAJCWVyZXBvcnQoTE9HLCAoZXJybXNnKCJyZWNlaXZlZCBwcm9tb3Rl IHJlcXVlc3QiKSkpOwogCQlSZW1vdmVQcm9tb3RlU2lnbmFsRmlsZXMoKTsKLQkJUmVzZXRQ cm9tb3RlU2lnbmFsZWQoKTsKKwkJQ2xlYXJJbnRlcnJ1cHQoSU5URVJSVVBUX0NIRUNLX1BS T01PVEUpOwogCQlTZXRQcm9tb3RlSXNUcmlnZ2VyZWQoKTsKIAkJcmV0dXJuIHRydWU7CiAJ fQpAQCAtNDU0Miw3ICs0NTE1LDEwIEBAIENoZWNrUHJvbW90ZVNpZ25hbCh2b2lkKQogdm9p ZAogV2FrZXVwUmVjb3Zlcnkodm9pZCkKIHsKLQlTZXRMYXRjaCgmWExvZ1JlY292ZXJ5Q3Rs LT5yZWNvdmVyeVdha2V1cExhdGNoKTsKKwlQcm9jTnVtYmVyCXByb2NubyA9ICgodm9sYXRp bGUgUFJPQ19IRFIgKikgUHJvY0dsb2JhbCktPnN0YXJ0dXBQcm9jOworCisJaWYgKHByb2Nu byAhPSBJTlZBTElEX1BST0NfTlVNQkVSKQorCQlTZW5kSW50ZXJydXB0KElOVEVSUlVQVF9X QUxfQVJSSVZFRCwgcHJvY25vKTsKIH0KIAogLyoKQEAgLTQ3NDYsNyArNDcyMiw3IEBAIFJl Y292ZXJ5UmVxdWlyZXNJbnRQYXJhbWV0ZXIoY29uc3QgY2hhciAqcGFyYW1fbmFtZSwgaW50 IGN1cnJWYWx1ZSwgaW50IG1pblZhbHVlCiAKIAkJCXdoaWxlIChHZXRSZWNvdmVyeVBhdXNl U3RhdGUoKSAhPSBSRUNPVkVSWV9OT1RfUEFVU0VEKQogCQkJewotCQkJCVByb2Nlc3NTdGFy dHVwUHJvY0ludGVycnVwdHMoKTsKKwkJCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwogCiAJ CQkJaWYgKENoZWNrRm9yU3RhbmRieVRyaWdnZXIoKSkKIAkJCQl7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nd2FpdC5jIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL3RyYW5zYW0veGxvZ3dhaXQuYwppbmRleCBkMjg2ZmY2MzEyMy4uZWZlMDhjNGViZmUg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2d3YWl0LmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3dhaXQuYwpAQCAtMjQsOSArMjQs MTAgQEAKICAqCiAgKgkJSW4gYWRkaXRpb24sIHRoZSBsZWFzdC1hd2FpdGVkIExTTiBmb3Ig ZWFjaCB0eXBlIGlzIGNhY2hlZCBpbiB0aGUKICAqCQltaW5XYWl0ZWRMU04gYXJyYXkuICBU aGUgd2FpdGVyIHByb2Nlc3MgcHVibGlzaGVzIGluZm9ybWF0aW9uIGFib3V0Ci0gKgkJaXRz ZWxmIHRvIHRoZSBzaGFyZWQgbWVtb3J5IGFuZCB3YWl0cyBvbiB0aGUgbGF0Y2ggdW50aWwg aXQgaXMgd29rZW4KLSAqCQl1cCBieSB0aGUgYXBwcm9wcmlhdGUgcHJvY2Vzcywgc3RhbmRi eSBpcyBwcm9tb3RlZCwgb3IgdGhlIHBvc3RtYXN0ZXIKLSAqCQlkaWVzLiAgVGhlbiwgaXQg Y2xlYW5zIGluZm9ybWF0aW9uIGFib3V0IGl0c2VsZiBpbiB0aGUgc2hhcmVkIG1lbW9yeS4K KyAqCQlpdHNlbGYgdG8gdGhlIHNoYXJlZCBtZW1vcnkgYW5kIHdhaXRzIG9uIElOVEVSUlVQ VF9XQUlUX1dBS0VVUCB1bnRpbAorICoJCWl0IGlzIHdva2VuIHVwIGJ5IHRoZSBhcHByb3By aWF0ZSBwcm9jZXNzLCBzdGFuZGJ5IGlzIHByb21vdGVkLCBvciB0aGUKKyAqCQlwb3N0bWFz dGVyIGRpZXMuICBUaGVuLCBpdCBjbGVhbnMgaW5mb3JtYXRpb24gYWJvdXQgaXRzZWxmIGlu IHRoZQorICoJCXNoYXJlZCBtZW1vcnkuCiAgKgogICoJCU9uIHN0YW5kYnkgc2VydmVyczoK ICAqCQktIEFmdGVyIHJlcGxheWluZyBhIFdBTCByZWNvcmQsIHRoZSBzdGFydHVwIHByb2Nl c3MgcGVyZm9ybXMgYSBmYXN0CkBAIC01NCw3ICs1NSw2IEBACiAjaW5jbHVkZSAibWlzY2Fk bWluLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vd2Fs cmVjZWl2ZXIuaCIKLSNpbmNsdWRlICJzdG9yYWdlL2xhdGNoLmgiCiAjaW5jbHVkZSAic3Rv cmFnZS9wcm9jLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zaG1lbS5oIgogI2luY2x1ZGUgInV0 aWxzL2ZtZ3Jwcm90b3MuaCIKQEAgLTY4LDcgKzY4LDcgQEAgc3RhdGljIGludAl3YWl0bHNu X2NtcChjb25zdCBwYWlyaW5naGVhcF9ub2RlICphLCBjb25zdCBwYWlyaW5naGVhcF9ub2Rl ICpiLAogc3RydWN0IFdhaXRMU05TdGF0ZSAqd2FpdExTTlN0YXRlID0gTlVMTDsKIAogLyoK LSAqIFdhaXQgZXZlbnQgZm9yIGVhY2ggV2FpdExTTlR5cGUsIHVzZWQgd2l0aCBXYWl0TGF0 Y2goKSB0byByZXBvcnQKKyAqIFdhaXQgZXZlbnQgZm9yIGVhY2ggV2FpdExTTlR5cGUsIHVz ZWQgd2l0aCBXYWl0SW50ZXJydXB0KCkgdG8gcmVwb3J0CiAgKiB0aGUgd2FpdCBpbiBwZ19z dGF0X2FjdGl2aXR5LgogICovCiBzdGF0aWMgY29uc3QgdWludDMyIFdhaXRMU05XYWl0RXZl bnRzW10gPSB7CkBAIC0yNDEsOSArMjQxLDkgQEAgZGVsZXRlTFNOV2FpdGVyKFdhaXRMU05U eXBlIGxzblR5cGUpCiAjZGVmaW5lCVdBS0VVUF9QUk9DX1NUQVRJQ19BUlJBWV9TSVpFICgx NikKIAogLyoKLSAqIFJlbW92ZSB3YWl0ZXJzIHdob3NlIExTTiBoYXMgYmVlbiByZWFjaGVk IGZyb20gdGhlIGhlYXAgYW5kIHNldCB0aGVpcgotICogbGF0Y2hlcy4gIElmIEludmFsaWRY TG9nUmVjUHRyIGlzIGdpdmVuLCByZW1vdmUgYWxsIHdhaXRlcnMgZnJvbSB0aGUgaGVhcAot ICogYW5kIHNldCBsYXRjaGVzIGZvciBhbGwgd2FpdGVycy4KKyAqIFJlbW92ZSB3YWl0ZXJz IHdob3NlIExTTiBoYXMgYmVlbiByZWFjaGVkIGZyb20gdGhlIGhlYXAgYW5kIHdha2UgdGhl bSB1cC4KKyAqIElmIEludmFsaWRYTG9nUmVjUHRyIGlzIGdpdmVuLCByZW1vdmUgYWxsIHdh aXRlcnMgZnJvbSB0aGUgaGVhcCBhbmQgd2FrZQorICogdGhlbSBhbGwgdXAuCiAgKgogICog VGhpcyBmdW5jdGlvbiBmaXJzdCBhY2N1bXVsYXRlcyB3YWl0ZXJzIHRvIHdha2UgdXAgaW50 byBhbiBhcnJheSwgdGhlbgogICogd2FrZXMgdGhlbSB1cCB3aXRob3V0IGhvbGRpbmcgYSBX YWl0TFNOTG9jay4gIFRoZSBhcnJheSBzaXplIGlzIHN0YXRpYyBhbmQKQEAgLTI5OCwxNCAr Mjk4LDEzIEBAIHdha2V1cFdhaXRlcnMoV2FpdExTTlR5cGUgbHNuVHlwZSwgWExvZ1JlY1B0 ciBjdXJyZW50TFNOKQogCQlMV0xvY2tSZWxlYXNlKFdhaXRMU05Mb2NrKTsKIAogCQkvKgot CQkgKiBTZXQgbGF0Y2hlcyBmb3IgcHJvY2Vzc2VzIHdob3NlIHdhaXRlZCBMU05zIGhhdmUg YmVlbiByZWFjaGVkLgotCQkgKiBTaW5jZSBTZXRMYXRjaCgpIGlzIGEgdGltZS1jb25zdW1p bmcgb3BlcmF0aW9uLCB3ZSBkbyB0aGlzIG91dHNpZGUKLQkJICogb2YgV2FpdExTTkxvY2su IFRoaXMgaXMgc2FmZSBiZWNhdXNlIHByb2NMYXRjaCBpcyBuZXZlciBmcmVlZCwgc28KLQkJ ICogYXQgd29yc3Qgd2UgbWF5IHNldCBhIGxhdGNoIGZvciB0aGUgd3JvbmcgcHJvY2VzcyBv ciBmb3Igbm8gcHJvY2VzcwotCQkgKiBhdCBhbGwsIHdoaWNoIGlzIGhhcm1sZXNzLgorCQkg KiBXYWtlIHVwIHByb2Nlc3NlcyB3aG9zZSB3YWl0ZWQgTFNOcyBoYXZlIGJlZW4gcmVhY2hl ZC4gIFNpbmNlCisJCSAqIFNlbmRJbnRlcnJ1cHQgaXMgYSB0aW1lLWNvbnN1bWluZyBvcGVy YXRpb24sIHdlIGRvIHRoaXMgb3V0c2lkZSBvZgorCQkgKiBXYWl0TFNOTG9jay4gKElmIHRo ZSBiYWNrZW5kIGV4aXRzIG9yIGlzIG5vIGxvbmdlciB3YWl0aW5nLCB3ZSdsbAorCQkgKiBz ZW5kIHNwdXJpb3VzIHdha2V1cCwgYnV0IHRoYXQncyBoYXJtbGVzcykKIAkJICovCiAJCWZv ciAoaiA9IDA7IGogPCBudW1XYWtlVXBQcm9jczsgaisrKQotCQkJU2V0TGF0Y2goJkdldFBH UHJvY0J5TnVtYmVyKHdha2VVcFByb2NzW2pdKS0+cHJvY0xhdGNoKTsKKwkJCVNlbmRJbnRl cnJ1cHQoSU5URVJSVVBUX1dBSVRfV0FLRVVQLCB3YWtlVXBQcm9jc1tqXSk7CiAKIAl9IHdo aWxlIChudW1XYWtlVXBQcm9jcyA9PSBXQUtFVVBfUFJPQ19TVEFUSUNfQVJSQVlfU0laRSk7 CiB9CkBAIC0zNjQsNyArMzYzLDcgQEAgV2FpdExTTlR5cGVSZXF1aXJlc1JlY292ZXJ5KFdh aXRMU05UeXBlIHQpCiB9CiAKIC8qCi0gKiBXYWl0IHVzaW5nIE15TGF0Y2ggdGlsbCB0aGUg Z2l2ZW4gTFNOIGlzIHJlYWNoZWQsIHRoZSByZXBsaWNhIGdldHMKKyAqIFdhaXQgdXNpbmcg V2FpdEludGVycnVwdCB0aWxsIHRoZSBnaXZlbiBMU04gaXMgcmVhY2hlZCwgdGhlIHJlcGxp Y2EgZ2V0cwogICogcHJvbW90ZWQsIG9yIHRoZSBwb3N0bWFzdGVyIGRpZXMuCiAgKgogICog UmV0dXJucyBXQUlUX0xTTl9SRVNVTFRfU1VDQ0VTUyBpZiB0YXJnZXQgTFNOIHdhcyByZWFj aGVkLgpAQCAtMzc2LDcgKzM3NSw3IEBAIFdhaXRGb3JMU04oV2FpdExTTlR5cGUgbHNuVHlw ZSwgWExvZ1JlY1B0ciB0YXJnZXRMU04sIGludDY0IHRpbWVvdXQpCiB7CiAJWExvZ1JlY1B0 cgljdXJyZW50TFNOOwogCVRpbWVzdGFtcFR6IGVuZHRpbWUgPSAwOwotCWludAkJCXdha2Vf ZXZlbnRzID0gV0xfTEFUQ0hfU0VUIHwgV0xfUE9TVE1BU1RFUl9ERUFUSDsKKwlpbnQJCQl3 YWtlX2V2ZW50cyA9IFdMX0lOVEVSUlVQVCB8IFdMX1BPU1RNQVNURVJfREVBVEg7CiAKIAkv KiBTaG91bGRuJ3QgYmUgY2FsbGVkIHdoZW4gc2htZW0gaXNuJ3QgaW5pdGlhbGl6ZWQgKi8K IAlBc3NlcnQod2FpdExTTlN0YXRlKTsKQEAgLTQzNCw4ICs0MzMsOSBAQCBXYWl0Rm9yTFNO KFdhaXRMU05UeXBlIGxzblR5cGUsIFhMb2dSZWNQdHIgdGFyZ2V0TFNOLCBpbnQ2NCB0aW1l b3V0KQogCiAJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CiAKLQkJcmMgPSBXYWl0TGF0Y2go TXlMYXRjaCwgd2FrZV9ldmVudHMsIGRlbGF5X21zLAotCQkJCQkgICBXYWl0TFNOV2FpdEV2 ZW50c1tsc25UeXBlXSk7CisJCXJjID0gV2FpdEludGVycnVwdChDaGVja0ZvckludGVycnVw dHNNYXNrIHwgSU5URVJSVVBUX1dBSVRfV0FLRVVQLAorCQkJCQkJICAgd2FrZV9ldmVudHMs IGRlbGF5X21zLAorCQkJCQkJICAgV2FpdExTTldhaXRFdmVudHNbbHNuVHlwZV0pOwogCiAJ CS8qCiAJCSAqIEVtZXJnZW5jeSBiYWlsb3V0IGlmIHBvc3RtYXN0ZXIgaGFzIGRpZWQuICBU aGlzIGlzIHRvIGF2b2lkIHRoZQpAQCAtNDQ3LDggKzQ0Nyw3IEBAIFdhaXRGb3JMU04oV2Fp dExTTlR5cGUgbHNuVHlwZSwgWExvZ1JlY1B0ciB0YXJnZXRMU04sIGludDY0IHRpbWVvdXQp CiAJCQkJCWVycm1zZygidGVybWluYXRpbmcgY29ubmVjdGlvbiBkdWUgdG8gdW5leHBlY3Rl ZCBwb3N0bWFzdGVyIGV4aXQiKSwKIAkJCQkJZXJyY29udGV4dCgid2hpbGUgd2FpdGluZyBm b3IgTFNOIikpOwogCi0JCWlmIChyYyAmIFdMX0xBVENIX1NFVCkKLQkJCVJlc2V0TGF0Y2go TXlMYXRjaCk7CisJCUNsZWFySW50ZXJydXB0KElOVEVSUlVQVF9XQUlUX1dBS0VVUCk7CiAJ fQogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2JhY2t1cC9iYXNlYmFja3VwX3Ro cm90dGxlLmMgYi9zcmMvYmFja2VuZC9iYWNrdXAvYmFzZWJhY2t1cF90aHJvdHRsZS5jCmlu ZGV4IGUxMTJlZWQ3NDg1Li5lNDlmZGMxZWZhMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv YmFja3VwL2Jhc2ViYWNrdXBfdGhyb3R0bGUuYworKysgYi9zcmMvYmFja2VuZC9iYWNrdXAv YmFzZWJhY2t1cF90aHJvdHRsZS5jCkBAIC0xNSw5ICsxNSw5IEBACiAjaW5jbHVkZSAicG9z dGdyZXMuaCIKIAogI2luY2x1ZGUgImJhY2t1cC9iYXNlYmFja3VwX3NpbmsuaCIKKyNpbmNs dWRlICJpcGMvaW50ZXJydXB0LmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVk ZSAicGdzdGF0LmgiCi0jaW5jbHVkZSAic3RvcmFnZS9sYXRjaC5oIgogI2luY2x1ZGUgInV0 aWxzL3RpbWVzdGFtcC5oIgogCiB0eXBlZGVmIHN0cnVjdCBiYnNpbmtfdGhyb3R0bGUKQEAg LTE0Niw3ICsxNDYsNyBAQCB0aHJvdHRsZShiYnNpbmtfdGhyb3R0bGUgKnNpbmssIHNpemVf dCBpbmNyZW1lbnQpCiAJCShzaW5rLT50aHJvdHRsaW5nX2NvdW50ZXIgLyBzaW5rLT50aHJv dHRsaW5nX3NhbXBsZSk7CiAKIAkvKgotCSAqIFNpbmNlIHRoZSBsYXRjaCBjb3VsZCBiZSBz ZXQgcmVwZWF0ZWRseSBiZWNhdXNlIG9mIGNvbmN1cnJlbnRseSBXQUwKKwkgKiBTaW5jZSB0 aGUgaW50ZXJydXB0IGNvdWxkIGJlIHNldCByZXBlYXRlZGx5IGJlY2F1c2Ugb2YgY29uY3Vy cmVudGx5IFdBTAogCSAqIGFjdGl2aXR5LCBzbGVlcCBpbiBhIGxvb3AgdG8gZW5zdXJlIGVu b3VnaCB0aW1lIGhhcyBwYXNzZWQuCiAJICovCiAJZm9yICg7OykKQEAgLTE2MywyMiArMTYz LDE2IEBAIHRocm90dGxlKGJic2lua190aHJvdHRsZSAqc2luaywgc2l6ZV90IGluY3JlbWVu dCkKIAkJaWYgKHNsZWVwIDw9IDApCiAJCQlicmVhazsKIAotCQlSZXNldExhdGNoKE15TGF0 Y2gpOwotCi0JCS8qIFdlJ3JlIGVhdGluZyBhIHBvdGVudGlhbGx5IHNldCBsYXRjaCwgc28g Y2hlY2sgZm9yIGludGVycnVwdHMgKi8KIAkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIAog CQkvKgogCQkgKiAoVEFSX1NFTkRfU0laRSAvIHRocm90dGxpbmdfc2FtcGxlICogZWxhcHNl ZF9taW5fdW5pdCkgc2hvdWxkIGJlCiAJCSAqIHRoZSBtYXhpbXVtIHRpbWUgdG8gc2xlZXAu IFRodXMgdGhlIGNhc3QgdG8gbG9uZyBpcyBzYWZlLgogCQkgKi8KLQkJd2FpdF9yZXN1bHQg PSBXYWl0TGF0Y2goTXlMYXRjaCwKLQkJCQkJCQkJV0xfTEFUQ0hfU0VUIHwgV0xfVElNRU9V VCB8IFdMX0VYSVRfT05fUE1fREVBVEgsCi0JCQkJCQkJCShsb25nKSAoc2xlZXAgLyAxMDAw KSwKLQkJCQkJCQkJV0FJVF9FVkVOVF9CQVNFX0JBQ0tVUF9USFJPVFRMRSk7Ci0KLQkJaWYg KHdhaXRfcmVzdWx0ICYgV0xfTEFUQ0hfU0VUKQotCQkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMo KTsKKwkJd2FpdF9yZXN1bHQgPSBXYWl0SW50ZXJydXB0KENoZWNrRm9ySW50ZXJydXB0c01h c2ssCisJCQkJCQkJCQlXTF9JTlRFUlJVUFQgfCBXTF9USU1FT1VUIHwgV0xfRVhJVF9PTl9Q TV9ERUFUSCwKKwkJCQkJCQkJCShsb25nKSAoc2xlZXAgLyAxMDAwKSwKKwkJCQkJCQkJCVdB SVRfRVZFTlRfQkFTRV9CQUNLVVBfVEhST1RUTEUpOwogCiAJCS8qIERvbmUgd2FpdGluZz8g Ki8KIAkJaWYgKHdhaXRfcmVzdWx0ICYgV0xfVElNRU9VVCkKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2Jvb3RzdHJhcC9ib290cGFyc2UueSBiL3NyYy9iYWNrZW5kL2Jvb3RzdHJhcC9i b290cGFyc2UueQppbmRleCA5NDNmZjQ3MzNkMy4uYzRhZDExYmUwYjggMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2Jvb3RzdHJhcC9ib290cGFyc2UueQorKysgYi9zcmMvYmFja2VuZC9i b290c3RyYXAvYm9vdHBhcnNlLnkKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJjYXRh bG9nL3BnX3RhYmxlc3BhY2UuaCIKICNpbmNsdWRlICJjYXRhbG9nL3RvYXN0aW5nLmgiCiAj aW5jbHVkZSAiY29tbWFuZHMvZGVmcmVtLmgiCi0jaW5jbHVkZSAibWlzY2FkbWluLmgiCisj aW5jbHVkZSAiaXBjL2ludGVycnVwdC5oIgogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5o IgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2FzeW5jLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9hc3luYy5jCmlu ZGV4IDY1N2M1OTE2MThkLi4wMzVhMTBhZWVlNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvYXN5bmMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9hc3luYy5jCkBA IC0zNiw3ICszNiw3IEBACiAgKgkgIGlzIG5vIG5lZWQgZm9yIFdBTCBzdXBwb3J0IG9yIGZz eW5jJ2luZy4KICAqCiAgKiAzLiBFdmVyeSBiYWNrZW5kIHRoYXQgaXMgbGlzdGVuaW5nIG9u IGF0IGxlYXN0IG9uZSBjaGFubmVsIHJlZ2lzdGVycyBieQotICoJICBlbnRlcmluZyBpdHMg UElEIGludG8gdGhlIGFycmF5IGluIEFzeW5jUXVldWVDb250cm9sLiBJdCB0aGVuIHNjYW5z IGFsbAorICoJICBlbnRlcmluZyBpdHNlbGYgaW50byB0aGUgYXJyYXkgaW4gQXN5bmNRdWV1 ZUNvbnRyb2wuIEl0IHRoZW4gc2NhbnMgYWxsCiAgKgkgIGluY29taW5nIG5vdGlmaWNhdGlv bnMgaW4gdGhlIGNlbnRyYWwgcXVldWUgYW5kIGZpcnN0IGNvbXBhcmVzIHRoZQogICoJICBk YXRhYmFzZSBPSUQgb2YgdGhlIG5vdGlmaWNhdGlvbiB3aXRoIGl0cyBvd24gZGF0YWJhc2Ug T0lEIGFuZCB0aGVuCiAgKgkgIGNvbXBhcmVzIHRoZSBub3RpZmllZCBjaGFubmVsIHdpdGgg dGhlIGxpc3Qgb2YgY2hhbm5lbHMgdGhhdCBpdCBsaXN0ZW5zCkBAIC02OCw4ICs2OCw4IEBA CiAgKgkgIG1ha2UgYW55IHJlcXVpcmVkIHVwZGF0ZXMgdG8gdGhlIGVmZmVjdGl2ZSBsaXN0 ZW4gc3RhdGUgKHNlZSBiZWxvdykuCiAgKgkgIFRoZW4gd2Ugc2lnbmFsIGFueSBiYWNrZW5k cyB0aGF0IG1heSBiZSBpbnRlcmVzdGVkIGluIG91ciBtZXNzYWdlcwogICoJICAoaW5jbHVk aW5nIG91ciBvd24gYmFja2VuZCwgaWYgbGlzdGVuaW5nKS4gIFRoaXMgaXMgZG9uZSBieQot ICoJICBTaWduYWxCYWNrZW5kcygpLCB3aGljaCBzZW5kcyBhIFBST0NTSUdfTk9USUZZX0lO VEVSUlVQVCBzaWduYWwgdG8KLSAqCSAgZWFjaCByZWxldmFudCBiYWNrZW5kLCBhcyBkZXNj cmliZWQgYmVsb3cuCisgKgkgIFNpZ25hbEJhY2tlbmRzKCksIHdoaWNoIHNlbmRzIElOVEVS UlVQVF9BU1lOQ19OT1RJRlkgdG8gZWFjaCByZWxldmFudAorICoJICBiYWNrZW5kLCBhcyBk ZXNjcmliZWQgYmVsb3cuCiAgKgogICoJICBGaW5hbGx5LCBhZnRlciB3ZSBhcmUgb3V0IG9m IHRoZSB0cmFuc2FjdGlvbiBhbHRvZ2V0aGVyIGFuZCBhYm91dCB0byBnbwogICoJICBpZGxl LCB3ZSBzY2FuIHRoZSBxdWV1ZSBmb3IgbWVzc2FnZXMgdGhhdCBuZWVkIHRvIGJlIHNlbnQg dG8gb3VyCkBAIC04MiwxMyArODIsMTEgQEAKICAqCSAgZnJvbnRlbmQgdW50aWwgdGhlIGNv bW1hbmQgaXMgZG9uZTsgYnV0IG5vdGlmaWVzIHRvIG90aGVyIGJhY2tlbmRzCiAgKgkgIHNo b3VsZCBnbyBvdXQgaW1tZWRpYXRlbHkgYWZ0ZXIgZWFjaCBjb21taXQuCiAgKgotICogNS4g VXBvbiByZWNlaXB0IG9mIGEgUFJPQ1NJR19OT1RJRllfSU5URVJSVVBUIHNpZ25hbCwgdGhl IHNpZ25hbCBoYW5kbGVyCi0gKgkgIHNldHMgdGhlIHByb2Nlc3MncyBsYXRjaCwgd2hpY2gg dHJpZ2dlcnMgdGhlIGV2ZW50IHRvIGJlIHByb2Nlc3NlZAotICoJICBpbW1lZGlhdGVseSBp ZiB0aGlzIGJhY2tlbmQgaXMgaWRsZSAoaS5lLiwgaXQgaXMgd2FpdGluZyBmb3IgYSBmcm9u dGVuZAorICogNS4gVGhlIElOVEVSUlVQVF9BU1lOQ19OT1RJRlkgaW50ZXJydXB0IGlzIHBy b2Nlc3NlZCBpbW1lZGlhdGVseSBpbiB0aGUKKyAqCSAgbGlzdGVuaW5nIGJhY2tlbmQgaWYg aXQgaXMgaWRsZSAoaS5lLiwgaXQgaXMgd2FpdGluZyBmb3IgYSBmcm9udGVuZAogICoJICBj b21tYW5kIGFuZCBpcyBub3Qgd2l0aGluIGEgdHJhbnNhY3Rpb24gYmxvY2suIEMuZi4KLSAq CSAgUHJvY2Vzc0NsaWVudFJlYWRJbnRlcnJ1cHQoKSkuICBPdGhlcndpc2UgdGhlIGhhbmRs ZXIgbWF5IG9ubHkgc2V0IGEKLSAqCSAgZmxhZywgd2hpY2ggd2lsbCBjYXVzZSB0aGUgcHJv Y2Vzc2luZyB0byBvY2N1ciBqdXN0IGJlZm9yZSB3ZSBuZXh0IGdvCi0gKgkgIGlkbGUuCisg KgkgIG1haW4gbG9vcCBpbiBQb3N0Z3Jlc0JhY2tlbmQoKSkuICBPdGhlcndpc2UgdGhlIGlu dGVycnVwdCBpcyBwcm9jZXNzZWQKKyAqCSAgbGF0ZXIsIGp1c3QgYmVmb3JlIHdlIG5leHQg Z28gaWRsZS4KICAqCiAgKgkgIEluYm91bmQtbm90aWZ5IHByb2Nlc3NpbmcgY29uc2lzdHMg b2YgcmVhZGluZyBhbGwgb2YgdGhlIG5vdGlmaWNhdGlvbnMKICAqCSAgdGhhdCBoYXZlIGFy cml2ZWQgc2luY2Ugc2Nhbm5pbmcgbGFzdCB0aW1lLiBXZSByZWFkIGV2ZXJ5IG5vdGlmaWNh dGlvbgpAQCAtMTI2LDkgKzEyNCw4IEBACiAgKgogICoJICBTaWduYWxCYWNrZW5kcygpIGNv bnN1bHRzIHRoZSBzaGFyZWQgZ2xvYmFsIGNoYW5uZWwgdGFibGUgdG8gaWRlbnRpZnkKICAq CSAgbGlzdGVuZXJzIGZvciB0aGUgY2hhbm5lbHMgdGhhdCB0aGUgY3VycmVudCB0cmFuc2Fj dGlvbiBzZW50Ci0gKgkgIG5vdGlmaWNhdGlvbihzKSB0by4gIEVhY2ggc2VsZWN0ZWQgYmFj a2VuZCBpcyBtYXJrZWQgYXMgaGF2aW5nIGEgd2FrZXVwCi0gKgkgIHBlbmRpbmcgdG8gYXZv aWQgZHVwbGljYXRlIHNpZ25hbHMsIGFuZCBhIFBST0NTSUdfTk9USUZZX0lOVEVSUlVQVAot ICoJICBzaWduYWwgaXMgc2VudCB0byBpdC4KKyAqCSAgbm90aWZpY2F0aW9uKHMpIHRvLiAg SU5URVJSVVBUX0FTWU5DX05PVElGWSBpcyBzZW50IHRvIGVhY2ggc2VsZWN0ZWQKKyAqCSAg YmFja2VuZC4KICAqCiAgKiA4LiBXaGlsZSB3cml0aW5nIG5vdGlmaWNhdGlvbnMsIFByZUNv bW1pdF9Ob3RpZnkoKSByZWNvcmRzIHRoZSBxdWV1ZSBoZWFkCiAgKgkgIHBvc2l0aW9uIGJv dGggYmVmb3JlIGFuZCBhZnRlciB0aGUgd3JpdGUuICBCZWNhdXNlIGFsbCB3cml0ZXJzIHNl cmlhbGl6ZQpAQCAtMTYwLDcgKzE1Nyw2IEBACiAKICNpbmNsdWRlIDxsaW1pdHMuaD4KICNp bmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxzaWduYWwuaD4KIAogI2luY2x1ZGUgImFj Y2Vzcy9wYXJhbGxlbC5oIgogI2luY2x1ZGUgImFjY2Vzcy9zbHJ1LmgiCkBAIC0xNzAsNiAr MTY2LDcgQEAKICNpbmNsdWRlICJjb21tYW5kcy9hc3luYy5oIgogI2luY2x1ZGUgImNvbW1v bi9oYXNoZm4uaCIKICNpbmNsdWRlICJmdW5jYXBpLmgiCisjaW5jbHVkZSAiaXBjL2ludGVy cnVwdC5oIgogI2luY2x1ZGUgImxpYi9kc2hhc2guaCIKICNpbmNsdWRlICJsaWJwcS9saWJw cS5oIgogI2luY2x1ZGUgImxpYnBxL3BxZm9ybWF0LmgiCkBAIC0xNzcsNyArMTc0LDYgQEAK ICNpbmNsdWRlICJzdG9yYWdlL2RzbV9yZWdpc3RyeS5oIgogI2luY2x1ZGUgInN0b3JhZ2Uv aXBjLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCi0jaW5jbHVkZSAic3RvcmFnZS9w cm9jc2lnbmFsLmgiCiAjaW5jbHVkZSAidGNvcC90Y29wcHJvdC5oIgogI2luY2x1ZGUgInV0 aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvZHNhLmgiCkBAIC0yODgsNyArMjg0 LDggQEAgdHlwZWRlZiBzdHJ1Y3QgUXVldWVCYWNrZW5kU3RhdHVzCiAJT2lkCQkJZGJvaWQ7 CQkJLyogYmFja2VuZCdzIGRhdGFiYXNlIE9JRCwgb3IgSW52YWxpZE9pZCAqLwogCVByb2NO dW1iZXIJbmV4dExpc3RlbmVyOwkvKiBpZCBvZiBuZXh0IGxpc3RlbmVyLCBvciBJTlZBTElE X1BST0NfTlVNQkVSICovCiAJUXVldWVQb3NpdGlvbiBwb3M7CQkJLyogYmFja2VuZCBoYXMg cmVhZCBxdWV1ZSB1cCB0byBoZXJlICovCi0JYm9vbAkJd2FrZXVwUGVuZGluZzsJLyogc2ln bmFsIHNlbnQgdG8gYmFja2VuZCwgbm90IHlldCBwcm9jZXNzZWQgKi8KKwlib29sCQl3YWtl dXBQZW5kaW5nOwkvKiBpbnRlcnJ1cHQgc2VudCB0byBiYWNrZW5kLCBub3QgeWV0CisJCQkJ CQkJCSAqIHByb2Nlc3NlZCAqLwogCWJvb2wJCWlzQWR2YW5jaW5nOwkvKiBiYWNrZW5kIGlz IGFkdmFuY2luZyBpdHMgcG9zaXRpb24gKi8KIH0gUXVldWVCYWNrZW5kU3RhdHVzOwogCkBA IC0zMTgsNyArMzE1LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUXVldWVCYWNrZW5kU3RhdHVzCiAg KiBnbG9iYWxDaGFubmVsVGFibGUgcGFydGl0aW9uIGxvY2tzLgogICoKICAqIEVhY2ggYmFj a2VuZCB1c2VzIHRoZSBiYWNrZW5kW10gYXJyYXkgZW50cnkgd2l0aCBpbmRleCBlcXVhbCB0 byBpdHMKLSAqIFByb2NOdW1iZXIuICBXZSByZWx5IG9uIHRoaXMgdG8gbWFrZSBTZW5kUHJv Y1NpZ25hbCBmYXN0LgorICogUHJvY051bWJlci4gIFdlIHJlbHkgb24gdGhpcyBmb3Igc2Vu ZGluZyBpbnRlcnJ1cHRzLgogICoKICAqIFRoZSBiYWNrZW5kW10gYXJyYXkgZW50cmllcyBm b3IgYWN0aXZlbHktbGlzdGVuaW5nIGJhY2tlbmRzIGFyZSB0aHJlYWRlZAogICogdG9nZXRo ZXIgdXNpbmcgZmlyc3RMaXN0ZW5lciBhbmQgdGhlIG5leHRMaXN0ZW5lciBsaW5rcywgc28g dGhhdCB3ZSBjYW4KQEAgLTUyNywxNSArNTI0LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgQ2hhbm5l bE5hbWUKIAljaGFyCQljaGFubmVsW05BTUVEQVRBTEVOXTsJLyogaGFzaCBrZXkgKi8KIH0g Q2hhbm5lbE5hbWU7CiAKLS8qCi0gKiBJbmJvdW5kIG5vdGlmaWNhdGlvbnMgYXJlIGluaXRp YWxseSBwcm9jZXNzZWQgYnkgSGFuZGxlTm90aWZ5SW50ZXJydXB0KCksCi0gKiBjYWxsZWQg ZnJvbSBpbnNpZGUgYSBzaWduYWwgaGFuZGxlci4gVGhhdCBqdXN0IHNldHMgdGhlCi0gKiBu b3RpZnlJbnRlcnJ1cHRQZW5kaW5nIGZsYWcgYW5kIHNldHMgdGhlIHByb2Nlc3MKLSAqIGxh dGNoLiBQcm9jZXNzTm90aWZ5SW50ZXJydXB0KCkgd2lsbCB0aGVuIGJlIGNhbGxlZCB3aGVu ZXZlciBpdCdzIHNhZmUgdG8KLSAqIGFjdHVhbGx5IGRlYWwgd2l0aCB0aGUgaW50ZXJydXB0 LgotICovCi12b2xhdGlsZSBzaWdfYXRvbWljX3Qgbm90aWZ5SW50ZXJydXB0UGVuZGluZyA9 IGZhbHNlOwotCiAvKiBUcnVlIGlmIHdlJ3ZlIHJlZ2lzdGVyZWQgYW4gb25fc2htZW1fZXhp dCBjbGVhbnVwICovCiBzdGF0aWMgYm9vbCB1bmxpc3RlbkV4aXRSZWdpc3RlcmVkID0gZmFs c2U7CiAKQEAgLTU1MiwxMSArNTQwLDEwIEBAIHN0YXRpYyBRdWV1ZVBvc2l0aW9uIHF1ZXVl SGVhZEJlZm9yZVdyaXRlOwogc3RhdGljIFF1ZXVlUG9zaXRpb24gcXVldWVIZWFkQWZ0ZXJX cml0ZTsKIAogLyoKLSAqIFdvcmtzcGFjZSBhcnJheXMgZm9yIFNpZ25hbEJhY2tlbmRzLiAg VGhlc2UgYXJlIHByZWFsbG9jYXRlZCBpbgorICogV29ya3NwYWNlIGFycmF5IGZvciBTaWdu YWxCYWNrZW5kcy4gIFRoaXMgaXMgcHJlYWxsb2NhdGVkIGluCiAgKiBQcmVDb21taXRfTm90 aWZ5IHRvIGF2b2lkIG5lZWRpbmcgbWVtb3J5IGFsbG9jYXRpb24gYWZ0ZXIgY29tbWl0dGlu ZyB0bwogICogY2xvZy4KICAqLwotc3RhdGljIGludDMyICpzaWduYWxQaWRzID0gTlVMTDsK IHN0YXRpYyBQcm9jTnVtYmVyICpzaWduYWxQcm9jbm9zID0gTlVMTDsKIAogLyogaGF2ZSB3 ZSBhZHZhbmNlZCB0byBhIHBhZ2UgdGhhdCdzIGEgbXVsdGlwbGUgb2YgUVVFVUVfQ0xFQU5V UF9ERUxBWT8gKi8KQEAgLTEyNjUsMTAgKzEyNTIsNiBAQCBQcmVDb21taXRfTm90aWZ5KHZv aWQpCiAJCX0KIAogCQkvKiBQcmVhbGxvY2F0ZSB3b3Jrc3BhY2UgdGhhdCB3aWxsIGJlIG5l ZWRlZCBieSBTaWduYWxCYWNrZW5kcygpICovCi0JCWlmIChzaWduYWxQaWRzID09IE5VTEwp Ci0JCQlzaWduYWxQaWRzID0gTWVtb3J5Q29udGV4dEFsbG9jKFRvcE1lbW9yeUNvbnRleHQs Ci0JCQkJCQkJCQkJCU1heEJhY2tlbmRzICogc2l6ZW9mKGludDMyKSk7Ci0KIAkJaWYgKHNp Z25hbFByb2Nub3MgPT0gTlVMTCkKIAkJCXNpZ25hbFByb2Nub3MgPSBNZW1vcnlDb250ZXh0 QWxsb2MoVG9wTWVtb3J5Q29udGV4dCwKIAkJCQkJCQkJCQkJICAgTWF4QmFja2VuZHMgKiBz aXplb2YoUHJvY051bWJlcikpOwpAQCAtMTM2MCw3ICsxMzQzLDcgQEAgUHJlQ29tbWl0X05v dGlmeSh2b2lkKQogICoKICAqCQlBcHBseSBwZW5kaW5nIGxpc3Rlbi91bmxpc3RlbiBjaGFu Z2VzIGFuZCBjbGVhciB0cmFuc2FjdGlvbi1sb2NhbCBzdGF0ZS4KICAqCi0gKgkJSWYgd2Ug aXNzdWVkIGFueSBub3RpZmljYXRpb25zIGluIHRoZSB0cmFuc2FjdGlvbiwgc2VuZCBzaWdu YWxzIHRvCisgKgkJSWYgd2UgaXNzdWVkIGFueSBub3RpZmljYXRpb25zIGluIHRoZSB0cmFu c2FjdGlvbiwgc2VuZCBpbnRlcnJ1cHRzIHRvCiAgKgkJbGlzdGVuaW5nIGJhY2tlbmRzIChw b3NzaWJseSBpbmNsdWRpbmcgb3Vyc2VsdmVzKSB0byBwcm9jZXNzIHRoZW0uCiAgKgkJQWxz bywgaWYgd2UgZmlsbGVkIGVub3VnaCBxdWV1ZSBwYWdlcyB3aXRoIG5ldyBub3RpZmllcywg dHJ5IHRvCiAgKgkJYWR2YW5jZSB0aGUgcXVldWUgdGFpbCBwb2ludGVyLgpAQCAtMTM4Niw5 ICsxMzY5LDkgQEAgQXRDb21taXRfTm90aWZ5KHZvaWQpCiAJCWFzeW5jUXVldWVVbnJlZ2lz dGVyKCk7CiAKIAkvKgotCSAqIFNlbmQgc2lnbmFscyB0byBsaXN0ZW5pbmcgYmFja2VuZHMu ICBXZSBuZWVkIGRvIHRoaXMgb25seSBpZiB0aGVyZSBhcmUKLQkgKiBwZW5kaW5nIG5vdGlm aWVzLCB3aGljaCB3ZXJlIHByZXZpb3VzbHkgYWRkZWQgdG8gdGhlIHNoYXJlZCBxdWV1ZSBi eQotCSAqIFByZUNvbW1pdF9Ob3RpZnkoKS4KKwkgKiBTZW5kIGludGVycnVwdHMgdG8gbGlz dGVuaW5nIGJhY2tlbmRzLiAgV2UgbmVlZCBkbyB0aGlzIG9ubHkgaWYgdGhlcmUKKwkgKiBh cmUgcGVuZGluZyBub3RpZmllcywgd2hpY2ggd2VyZSBwcmV2aW91c2x5IGFkZGVkIHRvIHRo ZSBzaGFyZWQgcXVldWUKKwkgKiBieSBQcmVDb21taXRfTm90aWZ5KCkuCiAJICovCiAJaWYg KHBlbmRpbmdOb3RpZmllcyAhPSBOVUxMKQogCQlTaWduYWxCYWNrZW5kcygpOwpAQCAtMTYx OCw3ICsxNjAxLDcgQEAgUHJlcGFyZVRhYmxlRW50cmllc0Zvckxpc3Rlbihjb25zdCBjaGFy ICpjaGFubmVsKQogICoKICAqIFByZXBhcmUgYW4gVU5MSVNURU4gYnkgcmVjb3JkaW5nIGl0 IGluIHBlbmRpbmdMaXN0ZW5BY3Rpb25zLCBidXQgb25seSBpZgogICogd2UncmUgY3VycmVu dGx5IGxpc3RlbmluZyAoY29tbWl0dGVkIG9yIHN0YWdlZCkuICBXZSBkb24ndCB0b3VjaAot ICogZ2xvYmFsQ2hhbm5lbFRhYmxlIHlldCAtIHRoZSBsaXN0ZW5lciBrZWVwcyByZWNlaXZp bmcgc2lnbmFscyB1bnRpbAorICogZ2xvYmFsQ2hhbm5lbFRhYmxlIHlldCAtIHRoZSBsaXN0 ZW5lciBrZWVwcyByZWNlaXZpbmcgbm90aWZpY2F0aW9ucyB1bnRpbAogICogY29tbWl0LCB3 aGVuIHRoZSBlbnRyeSBpcyByZW1vdmVkLgogICovCiBzdGF0aWMgdm9pZApAQCAtMTYzOCw3 ICsxNjIxLDcgQEAgUHJlcGFyZVRhYmxlRW50cmllc0ZvclVubGlzdGVuKGNvbnN0IGNoYXIg KmNoYW5uZWwpCiAJLyoKIAkgKiBSZWNvcmQgaW4gbG9jYWwgcGVuZGluZyBoYXNoIHRoYXQg d2Ugd2FudCB0byBVTkxJU1RFTiwgb3ZlcndyaXRpbmcgYW55CiAJICogZWFybGllciBhdHRl bXB0IHRvIExJU1RFTi4gIERvbid0IHRvdWNoIGxvY2FsQ2hhbm5lbFRhYmxlIG9yCi0JICog Z2xvYmFsQ2hhbm5lbFRhYmxlIHlldCAtIHdlIGtlZXAgcmVjZWl2aW5nIHNpZ25hbHMgdW50 aWwgY29tbWl0LgorCSAqIGdsb2JhbENoYW5uZWxUYWJsZSB5ZXQgLSB3ZSBrZWVwIHJlY2Vp dmluZyBub3RpZmljYXRpb25zIHVudGlsIGNvbW1pdC4KIAkgKi8KIAlwZW5kaW5nID0gKFBl bmRpbmdMaXN0ZW5FbnRyeSAqKQogCQloYXNoX3NlYXJjaChwZW5kaW5nTGlzdGVuQWN0aW9u cywgY2hhbm5lbCwgSEFTSF9FTlRFUiwgTlVMTCk7CkBAIC0yMjQyLDE0ICsyMjI1LDE0IEBA IGFzeW5jUXVldWVGaWxsV2FybmluZyh2b2lkKQogfQogCiAvKgotICogU2VuZCBzaWduYWxz IHRvIGxpc3RlbmluZyBiYWNrZW5kcy4KKyAqIFNlbmQgaW50ZXJydXB0cyB0byBsaXN0ZW5p bmcgYmFja2VuZHMuCiAgKgogICogTm9ybWFsbHkgd2Ugc2lnbmFsIG9ubHkgYmFja2VuZHMg dGhhdCBhcmUgaW50ZXJlc3RlZCBpbiB0aGUgbm90aWZpZXMgdGhhdAogICogd2UganVzdCBz ZW50LiAgSG93ZXZlciwgdGhhdCB3aWxsIGxlYXZlIGlkbGUgbGlzdGVuZXJzIGZhbGxpbmcg ZnVydGhlciBhbmQKICAqIGZ1cnRoZXIgYmVoaW5kLiAgV2FrZW4gdGhlbSBhbnl3YXkgaWYg dGhleSdyZSBmYXIgZW5vdWdoIGJlaGluZCwgc28gdGhleSdsbAogICogYWR2YW5jZSB0aGVp ciBxdWV1ZSBwb3NpdGlvbiBwb2ludGVycywgYWxsb3dpbmcgdGhlIGdsb2JhbCB0YWlsIHRv IGFkdmFuY2UuCiAgKgotICogU2luY2Ugd2Uga25vdyB0aGUgUHJvY051bWJlciBhbmQgdGhl IFBpZCB0aGUgc2lnbmFsaW5nIGlzIHF1aXRlIGNoZWFwLgorICogU2luY2Ugd2Uga25vdyB0 aGUgUHJvY051bWJlciB0aGUgc2lnbmFsaW5nIGlzIHF1aXRlIGNoZWFwLgogICoKICAqIFRo aXMgaXMgY2FsbGVkIGR1cmluZyBDb21taXRUcmFuc2FjdGlvbigpLCBzbyBpdCdzIGltcG9y dGFudCBmb3IgaXQKICAqIHRvIGhhdmUgdmVyeSBsb3cgcHJvYmFiaWxpdHkgb2YgZmFpbHVy ZS4KQEAgLTIyNjIsMTMgKzIyNDUsMTMgQEAgU2lnbmFsQmFja2VuZHModm9pZCkKIAkvKiBD YW4ndCBnZXQgaGVyZSB3aXRob3V0IFByZUNvbW1pdF9Ob3RpZnkgaGF2aW5nIG1hZGUgdGhl IGdsb2JhbCB0YWJsZSAqLwogCUFzc2VydChnbG9iYWxDaGFubmVsVGFibGUgIT0gTlVMTCk7 CiAKLQkvKiBJdCBzaG91bGQgaGF2ZSBzZXQgdXAgdGhlc2UgYXJyYXlzLCB0b28gKi8KLQlB c3NlcnQoc2lnbmFsUGlkcyAhPSBOVUxMICYmIHNpZ25hbFByb2Nub3MgIT0gTlVMTCk7CisJ LyogSXQgc2hvdWxkIGhhdmUgc2V0IHVwIHRoaXMgYXJyYXksIHRvbyAqLworCUFzc2VydChz aWduYWxQcm9jbm9zICE9IE5VTEwpOwogCiAJLyoKIAkgKiBJZGVudGlmeSBiYWNrZW5kcyB0 aGF0IHdlIG5lZWQgdG8gc2lnbmFsLiAgV2UgZG9uJ3Qgd2FudCB0byBzZW5kCiAJICogc2ln bmFscyB3aGlsZSBob2xkaW5nIHRoZSBOb3RpZnlRdWV1ZUxvY2ssIHNvIHRoaXMgcGFydCBq dXN0IGJ1aWxkcyBhCi0JICogbGlzdCBvZiB0YXJnZXQgUElEcyBpbiBzaWduYWxQaWRzW10g YW5kIHNpZ25hbFByb2Nub3NbXS4KKwkgKiBsaXN0IG9mIHRhcmdldCBiYWNrZW5kcyBpbiBz aWduYWxQcm9jbm9zW10uCiAJICovCiAJY291bnQgPSAwOwogCkBAIC0yMjkzLDcgKzIyNzYs NiBAQCBTaWduYWxCYWNrZW5kcyh2b2lkKQogCQlmb3IgKGludCBqID0gMDsgaiA8IGVudHJ5 LT5udW1MaXN0ZW5lcnM7IGorKykKIAkJewogCQkJUHJvY051bWJlcglpOwotCQkJaW50MzIJ CXBpZDsKIAkJCVF1ZXVlUG9zaXRpb24gcG9zOwogCiAJCQlpZiAoIWxpc3RlbmVyc1tqXS5s aXN0ZW5pbmcpCkBAIC0yMzA0LDE2ICsyMjg2LDE0IEBAIFNpZ25hbEJhY2tlbmRzKHZvaWQp CiAJCQlpZiAoUVVFVUVfQkFDS0VORF9XQUtFVVBfUEVORElORyhpKSkKIAkJCQljb250aW51 ZTsJCS8qIGFscmVhZHkgc2lnbmFsZWQsIG5vIG5lZWQgdG8gcmVwZWF0ICovCiAKLQkJCXBp ZCA9IFFVRVVFX0JBQ0tFTkRfUElEKGkpOwogCQkJcG9zID0gUVVFVUVfQkFDS0VORF9QT1Mo aSk7CiAKIAkJCWlmIChRVUVVRV9QT1NfRVFVQUwocG9zLCBRVUVVRV9IRUFEKSkKIAkJCQlj b250aW51ZTsJCS8qIGl0J3MgZnVsbHkgY2F1Z2h0IHVwIGFscmVhZHkgKi8KIAotCQkJQXNz ZXJ0KHBpZCAhPSBJbnZhbGlkUGlkKTsKKwkJCUFzc2VydChpICE9IElOVkFMSURfUFJPQ19O VU1CRVIpOwogCiAJCQlRVUVVRV9CQUNLRU5EX1dBS0VVUF9QRU5ESU5HKGkpID0gdHJ1ZTsK LQkJCXNpZ25hbFBpZHNbY291bnRdID0gcGlkOwogCQkJc2lnbmFsUHJvY25vc1tjb3VudF0g PSBpOwogCQkJY291bnQrKzsKIAkJfQpAQCAtMjMzMCw3ICsyMzEwLDYgQEAgU2lnbmFsQmFj a2VuZHModm9pZCkKIAkgKi8KIAlmb3IgKFByb2NOdW1iZXIgaSA9IFFVRVVFX0ZJUlNUX0xJ U1RFTkVSOyBpICE9IElOVkFMSURfUFJPQ19OVU1CRVI7IGkgPSBRVUVVRV9ORVhUX0xJU1RF TkVSKGkpKQogCXsKLQkJaW50MzIJCXBpZDsKIAkJUXVldWVQb3NpdGlvbiBwb3M7CiAKIAkJ aWYgKFFVRVVFX0JBQ0tFTkRfV0FLRVVQX1BFTkRJTkcoaSkpCkBAIC0yMzQwLDcgKzIzMTks NiBAQCBTaWduYWxCYWNrZW5kcyh2b2lkKQogCQlpZiAoUVVFVUVfQkFDS0VORF9JU19BRFZB TkNJTkcoaSkpCiAJCQljb250aW51ZTsKIAotCQlwaWQgPSBRVUVVRV9CQUNLRU5EX1BJRChp KTsKIAkJcG9zID0gUVVFVUVfQkFDS0VORF9QT1MoaSk7CiAKIAkJLyoKQEAgLTIzNjAsMTAg KzIzMzgsNyBAQCBTaWduYWxCYWNrZW5kcyh2b2lkKQogCQkJCQkJCQkJUVVFVUVfUE9TX1BB R0UocG9zKSkgPj0gUVVFVUVfQ0xFQU5VUF9ERUxBWSkKIAkJewogCQkJLyogSXQncyBpZGxl IGFuZCBmYXIgYmVoaW5kLCBzbyB3YWtlIGl0IHVwICovCi0JCQlBc3NlcnQocGlkICE9IElu dmFsaWRQaWQpOwotCiAJCQlRVUVVRV9CQUNLRU5EX1dBS0VVUF9QRU5ESU5HKGkpID0gdHJ1 ZTsKLQkJCXNpZ25hbFBpZHNbY291bnRdID0gcGlkOwogCQkJc2lnbmFsUHJvY25vc1tjb3Vu dF0gPSBpOwogCQkJY291bnQrKzsKIAkJfQpAQCAtMjM3MSwyOSArMjM0NiwyMCBAQCBTaWdu YWxCYWNrZW5kcyh2b2lkKQogCiAJTFdMb2NrUmVsZWFzZShOb3RpZnlRdWV1ZUxvY2spOwog Ci0JLyogTm93IHNlbmQgc2lnbmFscyAqLworCS8qIE5vdyBzZW5kIHRoZSBpbnRlcnJ1cHRz ICovCiAJZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQogCXsKLQkJaW50MzIJCXBp ZCA9IHNpZ25hbFBpZHNbaV07CisJCVByb2NOdW1iZXIJcHJvY25vID0gc2lnbmFsUHJvY25v c1tpXTsKIAogCQkvKgotCQkgKiBJZiB3ZSBhcmUgc2lnbmFsaW5nIG91ciBvd24gcHJvY2Vz cywgbm8gbmVlZCB0byBpbnZvbHZlIHRoZSBrZXJuZWw7Ci0JCSAqIGp1c3Qgc2V0IHRoZSBm bGFnIGRpcmVjdGx5LgorCQkgKiBOb3RlOiBpdCdzIHVubGlrZWx5IGJ1dCBjZXJ0YWlubHkg cG9zc2libGUgdGhhdCB0aGUgYmFja2VuZCBleGl0ZWQKKwkJICogc2luY2Ugd2UgcmVsZWFz ZWQgTm90aWZ5UXVldWVMb2NrLiBXZSdsbCBzZW5kIHRoZSBpbnRlcnJ1cHQgdG8KKwkJICog d3JvbmcgYmFja2VuZCBpbiB0aGF0IGNhc2UsIGJ1dCB0aGF0J3MgaGFybWxlc3MuCiAJCSAq LwotCQlpZiAocGlkID09IE15UHJvY1BpZCkKLQkJewotCQkJbm90aWZ5SW50ZXJydXB0UGVu ZGluZyA9IHRydWU7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCS8qCi0JCSAqIE5vdGU6IGFz c3VtaW5nIHRoaW5ncyBhcmVuJ3QgYnJva2VuLCBhIHNpZ25hbCBmYWlsdXJlIGhlcmUgY291 bGQKLQkJICogb25seSBvY2N1ciBpZiB0aGUgdGFyZ2V0IGJhY2tlbmQgZXhpdGVkIHNpbmNl IHdlIHJlbGVhc2VkCi0JCSAqIE5vdGlmeVF1ZXVlTG9jazsgd2hpY2ggaXMgdW5saWtlbHkg YnV0IGNlcnRhaW5seSBwb3NzaWJsZS4gU28gd2UKLQkJICoganVzdCBsb2cgYSBsb3ctbGV2 ZWwgZGVidWcgbWVzc2FnZSBpZiBpdCBoYXBwZW5zLgotCQkgKi8KLQkJaWYgKFNlbmRQcm9j U2lnbmFsKHBpZCwgUFJPQ1NJR19OT1RJRllfSU5URVJSVVBULCBzaWduYWxQcm9jbm9zW2ld KSA8IDApCi0JCQllbG9nKERFQlVHMywgImNvdWxkIG5vdCBzaWduYWwgYmFja2VuZCB3aXRo IFBJRCAlZDogJW0iLCBwaWQpOworCQlpZiAocHJvY25vID09IE15UHJvY051bWJlcikKKwkJ CVJhaXNlSW50ZXJydXB0KElOVEVSUlVQVF9BU1lOQ19OT1RJRlkpOworCQllbHNlCisJCQlT ZW5kSW50ZXJydXB0KElOVEVSUlVQVF9BU1lOQ19OT1RJRlksIHByb2Nubyk7CiAJfQogfQog CkBAIC0yNTMwLDM5ICsyNDk2LDEyIEBAIEF0U3ViQWJvcnRfTm90aWZ5KHZvaWQpCiAJfQog fQogCi0vKgotICogSGFuZGxlTm90aWZ5SW50ZXJydXB0Ci0gKgotICoJCVNpZ25hbCBoYW5k bGVyIHBvcnRpb24gb2YgaW50ZXJydXB0IGhhbmRsaW5nLiBMZXQgdGhlIGJhY2tlbmQga25v dwotICoJCXRoYXQgdGhlcmUncyBhIHBlbmRpbmcgbm90aWZ5IGludGVycnVwdC4gSWYgd2Un cmUgY3VycmVudGx5IHJlYWRpbmcKLSAqCQlmcm9tIHRoZSBjbGllbnQsIHRoaXMgd2lsbCBp bnRlcnJ1cHQgdGhlIHJlYWQgYW5kCi0gKgkJUHJvY2Vzc0NsaWVudFJlYWRJbnRlcnJ1cHQo KSB3aWxsIGNhbGwgUHJvY2Vzc05vdGlmeUludGVycnVwdCgpLgotICovCi12b2lkCi1IYW5k bGVOb3RpZnlJbnRlcnJ1cHQodm9pZCkKLXsKLQkvKgotCSAqIE5vdGU6IHRoaXMgaXMgY2Fs bGVkIGJ5IGEgU0lHTkFMIEhBTkRMRVIuIFlvdSBtdXN0IGJlIHZlcnkgd2FyeSB3aGF0Ci0J ICogeW91IGRvIGhlcmUuCi0JICovCi0KLQkvKiBzaWduYWwgdGhhdCB3b3JrIG5lZWRzIHRv IGJlIGRvbmUgKi8KLQlub3RpZnlJbnRlcnJ1cHRQZW5kaW5nID0gdHJ1ZTsKLQotCS8qIG1h a2Ugc3VyZSB0aGUgZXZlbnQgaXMgcHJvY2Vzc2VkIGluIGR1ZSBjb3Vyc2UgKi8KLQlTZXRM YXRjaChNeUxhdGNoKTsKLX0KLQogLyoKICAqIFByb2Nlc3NOb3RpZnlJbnRlcnJ1cHQKICAq Ci0gKgkJVGhpcyBpcyBjYWxsZWQgaWYgd2Ugc2VlIG5vdGlmeUludGVycnVwdFBlbmRpbmcg c2V0LCBqdXN0IGJlZm9yZQotICoJCXRyYW5zbWl0dGluZyBSZWFkeUZvclF1ZXJ5IGF0IHRo ZSBlbmQgb2YgYSBmcm9udGVuZCBjb21tYW5kLCBhbmQKLSAqCQlhbHNvIGlmIGEgbm90aWZ5 IHNpZ25hbCBvY2N1cnMgd2hpbGUgcmVhZGluZyBmcm9tIHRoZSBmcm9udGVuZC4KLSAqCQlI YW5kbGVOb3RpZnlJbnRlcnJ1cHQoKSB3aWxsIGNhdXNlIHRoZSByZWFkIHRvIGJlIGludGVy cnVwdGVkCi0gKgkJdmlhIHRoZSBwcm9jZXNzJ3MgbGF0Y2gsIGFuZCB0aGlzIHJvdXRpbmUg d2lsbCBnZXQgY2FsbGVkLgotICoJCUlmIHdlIGFyZSB0cnVseSBpZGxlIChpZSwgKm5vdCog aW5zaWRlIGEgdHJhbnNhY3Rpb24gYmxvY2spLAotICoJCXByb2Nlc3MgdGhlIGluY29taW5n IG5vdGlmaWVzLgorICoJCVRoaXMgaXMgY2FsbGVkIGlmIHdlIHNlZSBJTlRFUlJVUFRfQVNZ TkNfTk9USUZZIHNldCwganVzdCBiZWZvcmUKKyAqCQl0cmFuc21pdHRpbmcgUmVhZHlGb3JR dWVyeSBhdCB0aGUgZW5kIG9mIGEgZnJvbnRlbmQgY29tbWFuZCwgYW5kIGFsc28KKyAqCQlp ZiB0aGUgaW50ZXJydXB0IG9jY3VycyB3aGlsZSByZWFkaW5nIGZyb20gdGhlIGZyb250ZW5k LgogICoKICAqCQlJZiAiZmx1c2giIGlzIHRydWUsIGZvcmNlIGFueSBmcm9udGVuZCBtZXNz YWdlcyBvdXQgaW1tZWRpYXRlbHkuCiAgKgkJVGhpcyBjYW4gYmUgZmFsc2Ugd2hlbiBiZWlu ZyBjYWxsZWQgYXQgdGhlIGVuZCBvZiBhIGZyb250ZW5kIGNvbW1hbmQsCkBAIC0yNTcxLDEy ICsyNTEwLDEzIEBAIEhhbmRsZU5vdGlmeUludGVycnVwdCh2b2lkKQogdm9pZAogUHJvY2Vz c05vdGlmeUludGVycnVwdChib29sIGZsdXNoKQogewotCWlmIChJc1RyYW5zYWN0aW9uT3JU cmFuc2FjdGlvbkJsb2NrKCkpCi0JCXJldHVybjsJCQkJCS8qIG5vdCByZWFsbHkgaWRsZSAq LworCUFzc2VydCghSXNUcmFuc2FjdGlvbk9yVHJhbnNhY3Rpb25CbG9jaygpKTsKIAotCS8q IExvb3AgaW4gY2FzZSBhbm90aGVyIHNpZ25hbCBhcnJpdmVzIHdoaWxlIHNlbmRpbmcgbWVz c2FnZXMgKi8KLQl3aGlsZSAobm90aWZ5SW50ZXJydXB0UGVuZGluZykKKwkvKiBMb29wIGlu IGNhc2UgYW5vdGhlciBpbnRlcnJ1cHQgYXJyaXZlcyB3aGlsZSBzZW5kaW5nIG1lc3NhZ2Vz ICovCisJZG8KKwl7CiAJCVByb2Nlc3NJbmNvbWluZ05vdGlmeShmbHVzaCk7CisJfSB3aGls ZSAoQ29uc3VtZUludGVycnVwdChJTlRFUlJVUFRfQVNZTkNfTk9USUZZKSk7CiB9CiAKIApA QCAtMjY4Niw3ICsyNjI2LDcgQEAgYXN5bmNRdWV1ZVJlYWRBbGxOb3RpZmljYXRpb25zKHZv aWQpCiAJCQkgKiBPdXIgc3RvcCBwb3NpdGlvbiBpcyB3aGF0IHdlIGZvdW5kIHRvIGJlIHRo ZSBoZWFkJ3MgcG9zaXRpb24KIAkJCSAqIHdoZW4gd2UgZW50ZXJlZCB0aGlzIGZ1bmN0aW9u LiBJdCBtaWdodCBoYXZlIGNoYW5nZWQgYWxyZWFkeS4KIAkJCSAqIEJ1dCBpZiBpdCBoYXMs IHdlIHdpbGwgcmVjZWl2ZSAob3IgaGF2ZSBhbHJlYWR5IHJlY2VpdmVkIGFuZAotCQkJICog cXVldWVkKSBhbm90aGVyIHNpZ25hbCBhbmQgY29tZSBoZXJlIGFnYWluLgorCQkJICogcXVl dWVkKSBhbm90aGVyIGludGVycnVwdCBhbmQgY29tZSBoZXJlIGFnYWluLgogCQkJICoKIAkJ CSAqIFdlIGFyZSBub3QgaG9sZGluZyBOb3RpZnlRdWV1ZUxvY2sgaGVyZSEgVGhlIHF1ZXVl IGNhbiBvbmx5CiAJCQkgKiBleHRlbmQgYmV5b25kIHRoZSBoZWFkIHBvaW50ZXIgKHNlZSBh Ym92ZSkgYW5kIHdlIGxlYXZlIG91cgpAQCAtMzA1MCw5ICsyOTkwLDYgQEAgQXN5bmNOb3Rp ZnlGcmVlemVYaWRzKFRyYW5zYWN0aW9uSWQgbmV3RnJvemVuWGlkKQogc3RhdGljIHZvaWQK IFByb2Nlc3NJbmNvbWluZ05vdGlmeShib29sIGZsdXNoKQogewotCS8qIFdlICptdXN0KiBy ZXNldCB0aGUgZmxhZyAqLwotCW5vdGlmeUludGVycnVwdFBlbmRpbmcgPSBmYWxzZTsKLQog CS8qIERvIG5vdGhpbmcgZWxzZSBpZiB3ZSBhcmVuJ3QgYWN0aXZlbHkgbGlzdGVuaW5nICov CiAJaWYgKExvY2FsQ2hhbm5lbFRhYmxlSXNFbXB0eSgpKQogCQlyZXR1cm47CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbXBhcnNlLmMgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9jb3B5ZnJvbXBhcnNlLmMKaW5kZXggNTg2OGE3ZmExMWYuLjgwMDJjYTk4 MDVjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbXBhcnNlLmMK KysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb21wYXJzZS5jCkBAIC0yNjcsOSAr MjY3LDEzIEBAIENvcHlHZXREYXRhKENvcHlGcm9tU3RhdGUgY3N0YXRlLCB2b2lkICpkYXRh YnVmLCBpbnQgbWlucmVhZCwgaW50IG1heHJlYWQpCiAJCQkJCS8qIFRyeSB0byByZWNlaXZl IGFub3RoZXIgbWVzc2FnZSAqLwogCQkJCQlpbnQJCQltdHlwZTsKIAkJCQkJaW50CQkJbWF4 bXNnbGVuOworCQkJCQlib29sCQlzYXZlX3F1ZXJ5X2NhbmNlbF9lbmFibGVkOwogCiAJCQly ZWFkbWVzc2FnZToKLQkJCQkJSE9MRF9DQU5DRUxfSU5URVJSVVBUUygpOworCQkJCQlzYXZl X3F1ZXJ5X2NhbmNlbF9lbmFibGVkID0gKEVuYWJsZWRJbnRlcnJ1cHRzTWFzayAmIElOVEVS UlVQVF9RVUVSWV9DQU5DRUwpICE9IDA7CisJCQkJCWlmIChzYXZlX3F1ZXJ5X2NhbmNlbF9l bmFibGVkKQorCQkJCQkJRGlzYWJsZUludGVycnVwdChJTlRFUlJVUFRfUVVFUllfQ0FOQ0VM KTsKKwogCQkJCQlwcV9zdGFydG1zZ3JlYWQoKTsKIAkJCQkJbXR5cGUgPSBwcV9nZXRieXRl KCk7CiAJCQkJCWlmIChtdHlwZSA9PSBFT0YpCkBAIC0zMDEsNyArMzA1LDEwIEBAIENvcHlH ZXREYXRhKENvcHlGcm9tU3RhdGUgY3N0YXRlLCB2b2lkICpkYXRhYnVmLCBpbnQgbWlucmVh ZCwgaW50IG1heHJlYWQpCiAJCQkJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkJCQkoZXJyY29k ZShFUlJDT0RFX0NPTk5FQ1RJT05fRkFJTFVSRSksCiAJCQkJCQkJCSBlcnJtc2coInVuZXhw ZWN0ZWQgRU9GIG9uIGNsaWVudCBjb25uZWN0aW9uIHdpdGggYW4gb3BlbiB0cmFuc2FjdGlv biIpKSk7Ci0JCQkJCVJFU1VNRV9DQU5DRUxfSU5URVJSVVBUUygpOworCisJCQkJCWlmIChz YXZlX3F1ZXJ5X2NhbmNlbF9lbmFibGVkKQorCQkJCQkJRW5hYmxlSW50ZXJydXB0KElOVEVS UlVQVF9RVUVSWV9DQU5DRUwpOworCiAJCQkJCS8qIC4uLiBhbmQgcHJvY2VzcyBpdCAqLwog CQkJCQlzd2l0Y2ggKG10eXBlKQogCQkJCQl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9j b21tYW5kcy92YWN1dW0uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5jCmluZGV4 IDAzOTMyZjQ1YzhhLi5jYzM0ZjQwZjJhYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvdmFjdXVtLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtLmMKQEAg LTQyLDEyICs0MiwxMiBAQAogI2luY2x1ZGUgImNvbW1hbmRzL2RlZnJlbS5oIgogI2luY2x1 ZGUgImNvbW1hbmRzL3Byb2dyZXNzLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvdmFjdXVtLmgi CisjaW5jbHVkZSAiaXBjL2ludGVycnVwdC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgog I2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgogI2lu Y2x1ZGUgInBvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIv Ymd3b3JrZXJfaW50ZXJuYWxzLmgiCi0jaW5jbHVkZSAicG9zdG1hc3Rlci9pbnRlcnJ1cHQu aCIKICNpbmNsdWRlICJzdG9yYWdlL2J1Zm1nci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG1n ci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcG1zaWduYWwuaCIKQEAgLTI0MzAsOCArMjQzMCw3 IEBAIHZhY3V1bV9kZWxheV9wb2ludChib29sIGlzX2FuYWx5emUpCiAJLyogQWx3YXlzIGNo ZWNrIGZvciBpbnRlcnJ1cHRzICovCiAJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIAotCWlm IChJbnRlcnJ1cHRQZW5kaW5nIHx8Ci0JCSghVmFjdXVtQ29zdEFjdGl2ZSAmJiAhQ29uZmln UmVsb2FkUGVuZGluZykpCisJaWYgKCFWYWN1dW1Db3N0QWN0aXZlICYmICFJbnRlcnJ1cHRQ ZW5kaW5nKElOVEVSUlVQVF9DT05GSUdfUkVMT0FEKSkKIAkJcmV0dXJuOwogCiAJLyoKQEAg LTI0NDAsOSArMjQzOSw5IEBAIHZhY3V1bV9kZWxheV9wb2ludChib29sIGlzX2FuYWx5emUp CiAJICogW2F1dG92YWN1dW1fXXZhY3V1bV9jb3N0X2RlbGF5IHRvIHRha2UgZWZmZWN0IHdo aWxlIGEgdGFibGUgaXMgYmVpbmcKIAkgKiB2YWN1dW1lZCBvciBhbmFseXplZC4KIAkgKi8K LQlpZiAoQ29uZmlnUmVsb2FkUGVuZGluZyAmJiBBbUF1dG9WYWN1dW1Xb3JrZXJQcm9jZXNz KCkpCisJaWYgKEludGVycnVwdFBlbmRpbmcoSU5URVJSVVBUX0NPTkZJR19SRUxPQUQpICYm IEFtQXV0b1ZhY3V1bVdvcmtlclByb2Nlc3MoKSkKIAl7Ci0JCUNvbmZpZ1JlbG9hZFBlbmRp bmcgPSBmYWxzZTsKKwkJQ2xlYXJJbnRlcnJ1cHQoSU5URVJSVVBUX0NPTkZJR19SRUxPQUQp OwogCQlQcm9jZXNzQ29uZmlnRmlsZShQR0NfU0lHSFVQKTsKIAkJVmFjdXVtVXBkYXRlQ29z dHMoKTsKIAl9CkBAIC0yNTI5LDggKzI1MjgsOCBAQCB2YWN1dW1fZGVsYXlfcG9pbnQoYm9v bCBpc19hbmFseXplKQogCQkvKgogCQkgKiBXZSBkb24ndCB3YW50IHRvIGlnbm9yZSBwb3N0 bWFzdGVyIGRlYXRoIGR1cmluZyB2ZXJ5IGxvbmcgdmFjdXVtcwogCQkgKiB3aXRoIHZhY3V1 bV9jb3N0X2RlbGF5IGNvbmZpZ3VyZWQuICBXZSBjYW4ndCB1c2UgdGhlIHVzdWFsCi0JCSAq IFdhaXRMYXRjaCgpIGFwcHJvYWNoIGhlcmUgYmVjYXVzZSB3ZSB3YW50IG1pY3Jvc2Vjb25k LWJhc2VkIHNsZWVwCi0JCSAqIGR1cmF0aW9ucyBhYm92ZS4KKwkJICogV2FpdEludGVycnVw dCgpIGFwcHJvYWNoIGhlcmUgYmVjYXVzZSB3ZSB3YW50IG1pY3Jvc2Vjb25kLWJhc2VkCisJ CSAqIHNsZWVwIGR1cmF0aW9ucyBhYm92ZS4KIAkJICovCiAJCWlmIChJc1VuZGVyUG9zdG1h c3RlciAmJiAhUG9zdG1hc3RlcklzQWxpdmUoKSkKIAkJCWV4aXQoMSk7CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQXBwZW5kLmMgYi9zcmMvYmFja2VuZC9leGVj dXRvci9ub2RlQXBwZW5kLmMKaW5kZXggNzEzOGRjNjkyYzYuLjE2NmI2ZjVlZWM2IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQXBwZW5kLmMKKysrIGIvc3JjL2Jh Y2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVuZC5jCkBAIC02MSw5ICs2MSw5IEBACiAjaW5jbHVk ZSAiZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWN1 dG9yLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3Ivbm9kZUFwcGVuZC5oIgotI2luY2x1ZGUgIm1p c2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgotI2luY2x1ZGUgInN0b3JhZ2UvbGF0 Y2guaCIKKyNpbmNsdWRlICJzdG9yYWdlL3dhaXRldmVudHNldC5oIgorI2luY2x1ZGUgInV0 aWxzL3Jlc293bmVyLmgiCiAKIC8qIFNoYXJlZCBzdGF0ZSBmb3IgcGFyYWxsZWwtYXdhcmUg QXBwZW5kLiAqLwogc3RydWN0IFBhcmFsbGVsQXBwZW5kU3RhdGUKQEAgLTEwNDMsNyArMTA0 Myw3IEBAIEV4ZWNBcHBlbmRBc3luY0V2ZW50V2FpdChBcHBlbmRTdGF0ZSAqbm9kZSkKIAlB c3NlcnQobm9kZS0+YXNfZXZlbnRzZXQgPT0gTlVMTCk7CiAJbm9kZS0+YXNfZXZlbnRzZXQg PSBDcmVhdGVXYWl0RXZlbnRTZXQoQ3VycmVudFJlc291cmNlT3duZXIsIG5ldmVudHMpOwog CUFkZFdhaXRFdmVudFRvU2V0KG5vZGUtPmFzX2V2ZW50c2V0LCBXTF9FWElUX09OX1BNX0RF QVRILCBQR0lOVkFMSURfU09DS0VULAotCQkJCQkgIE5VTEwsIE5VTEwpOworCQkJCQkgIDAs IE5VTEwpOwogCiAJLyogR2l2ZSBlYWNoIHdhaXRpbmcgc3VicGxhbiBhIGNoYW5jZSB0byBh ZGQgYW4gZXZlbnQuICovCiAJaSA9IC0xOwpAQCAtMTA2Nyw4ICsxMDY3LDggQEAgRXhlY0Fw cGVuZEFzeW5jRXZlbnRXYWl0KEFwcGVuZFN0YXRlICpub2RlKQogCX0KIAogCS8qCi0JICog QWRkIHRoZSBwcm9jZXNzIGxhdGNoIHRvIHRoZSBzZXQsIHNvIHRoYXQgd2Ugd2FrZSB1cCB0 byBwcm9jZXNzIHRoZQotCSAqIHN0YW5kYXJkIGludGVycnVwdHMgd2l0aCBDSEVDS19GT1Jf SU5URVJSVVBUUygpLgorCSAqIEFkZCB0aGUgY3VycmVudGx5IGVuYWJsZWQgaW50ZXJydXB0 cyB0byB0aGUgc2V0LCBzbyB0aGF0IHdlIHdha2UgdXAgdG8KKwkgKiBwcm9jZXNzIHRoZW0g d2l0aCBDSEVDS19GT1JfSU5URVJSVVBUUygpLgogCSAqCiAJICogTk9URTogRm9yIGhpc3Rv cmljYWwgcmVhc29ucywgaXQncyBpbXBvcnRhbnQgdGhhdCB0aGlzIGlzIGFkZGVkIHRvIHRo ZQogCSAqIFdhaXRFdmVudFNldCBhZnRlciB0aGUgRXhlY0FzeW5jQ29uZmlndXJlV2FpdCgp IGNhbGxzLiAgTmFtZWx5LApAQCAtMTA3OCw4ICsxMDc4LDggQEAgRXhlY0FwcGVuZEFzeW5j RXZlbnRXYWl0KEFwcGVuZFN0YXRlICpub2RlKQogCSAqIHdlIGNhbm5vdCBjaGFuZ2UgaXQg bm93LiAgVGhlIHBhdHRlcm4gaGFzIHBvc3NpYmx5IGJlZW4gY29waWVkIHRvIG90aGVyCiAJ ICogZXh0ZW5zaW9ucyB0b28uCiAJICovCi0JQWRkV2FpdEV2ZW50VG9TZXQobm9kZS0+YXNf ZXZlbnRzZXQsIFdMX0xBVENIX1NFVCwgUEdJTlZBTElEX1NPQ0tFVCwKLQkJCQkJICBNeUxh dGNoLCBOVUxMKTsKKwlBZGRXYWl0RXZlbnRUb1NldChub2RlLT5hc19ldmVudHNldCwgV0xf SU5URVJSVVBULCBQR0lOVkFMSURfU09DS0VULAorCQkJCQkgIENoZWNrRm9ySW50ZXJydXB0 c01hc2ssIE5VTEwpOwogCiAJLyogUmV0dXJuIGF0IG1vc3QgRVZFTlRfQlVGRkVSX1NJWkUg ZXZlbnRzIGluIG9uZSBjYWxsLiAqLwogCWlmIChuZXZlbnRzID4gRVZFTlRfQlVGRkVSX1NJ WkUpCkBAIC0xMTIyLDE0ICsxMTIyLDEwIEBAIEV4ZWNBcHBlbmRBc3luY0V2ZW50V2FpdChB cHBlbmRTdGF0ZSAqbm9kZSkKIAkJCQlFeGVjQXN5bmNOb3RpZnkoYXJlcSk7CiAJCQl9CiAJ CX0KLQotCQkvKiBIYW5kbGUgc3RhbmRhcmQgaW50ZXJydXB0cyAqLwotCQlpZiAoKHctPmV2 ZW50cyAmIFdMX0xBVENIX1NFVCkgIT0gMCkKLQkJewotCQkJUmVzZXRMYXRjaChNeUxhdGNo KTsKLQkJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7Ci0JCX0KIAl9CisKKwkvKiBIYW5kbGUg c3RhbmRhcmQgaW50ZXJydXB0cyAqLworCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CiB9CiAK IC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVH YXRoZXIuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVHYXRoZXIuYwppbmRleCA0MTA1 ZjFkMTk2OC4uYTM3ZDZlOTA2YjMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L25vZGVHYXRoZXIuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlR2F0aGVyLmMK QEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlICJleGVjdXRvci9leGVjdXRvci5oIgogI2lu Y2x1ZGUgImV4ZWN1dG9yL25vZGVHYXRoZXIuaCIKICNpbmNsdWRlICJleGVjdXRvci90cXVl dWUuaCIKLSNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJpcGMvaW50ZXJydXB0 LmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL29wdGltaXplci5oIgogI2luY2x1ZGUgInV0aWxz L3dhaXRfZXZlbnQuaCIKIApAQCAtMzgyLDkgKzM4MiwxMSBAQCBnYXRoZXJfcmVhZG5leHQo R2F0aGVyU3RhdGUgKmdhdGhlcnN0YXRlKQogCQkJCXJldHVybiBOVUxMOwogCiAJCQkvKiBO b3RoaW5nIHRvIGRvIGV4Y2VwdCB3YWl0IGZvciBkZXZlbG9wbWVudHMuICovCi0JCQkodm9p ZCkgV2FpdExhdGNoKE15TGF0Y2gsIFdMX0xBVENIX1NFVCB8IFdMX0VYSVRfT05fUE1fREVB VEgsIDAsCi0JCQkJCQkJIFdBSVRfRVZFTlRfRVhFQ1VURV9HQVRIRVIpOwotCQkJUmVzZXRM YXRjaChNeUxhdGNoKTsKKwkJCSh2b2lkKSBXYWl0SW50ZXJydXB0KENoZWNrRm9ySW50ZXJy dXB0c01hc2sgfAorCQkJCQkJCQkgSU5URVJSVVBUX1dBSVRfV0FLRVVQLAorCQkJCQkJCQkg V0xfSU5URVJSVVBUIHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwgMCwKKwkJCQkJCQkJIFdBSVRf RVZFTlRfRVhFQ1VURV9HQVRIRVIpOworCQkJQ2xlYXJJbnRlcnJ1cHQoSU5URVJSVVBUX1dB SVRfV0FLRVVQKTsKIAkJCW52aXNpdGVkID0gMDsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2lwYy9NYWtlZmlsZSBiL3NyYy9iYWNrZW5kL2lwYy9NYWtlZmlsZQpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uN2Q0NjViYzk3ZGIKLS0tIC9k ZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9pcGMvTWFrZWZpbGUKQEAgLTAsMCArMSwxOSBA QAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgTWFrZWZpbGUtLQorIyAgICBNYWtlZmls ZSBmb3IgYmFja2VuZC9pcGMKKyMKKyMgSURFTlRJRklDQVRJT04KKyMgICAgc3JjL2JhY2tl bmQvaXBjL01ha2VmaWxlCisjCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitzdWJkaXIgPSBz cmMvYmFja2VuZC9pcGMKK3RvcF9idWlsZGRpciA9IC4uLy4uLy4uCitpbmNsdWRlICQodG9w X2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCisKK09CSlMgPSBcCisJaW50ZXJydXB0 Lm8gXAorCXNpZ25hbF9oYW5kbGVycy5vCisKK2luY2x1ZGUgJCh0b3Bfc3JjZGlyKS9zcmMv YmFja2VuZC9jb21tb24ubWsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2lwYy9SRUFETUUu bWQgYi9zcmMvYmFja2VuZC9pcGMvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwLi45YzM0ZjJiMjUwMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9i YWNrZW5kL2lwYy9SRUFETUUubWQKQEAgLTAsMCArMSwyNzIgQEAKK0ludGVycnVwdHMKKz09 PT09PT09PT0KKworIkludGVycnVwdHMiIGFyZSBhIHNldCBvZiBmbGFncyB0aGF0IHJlcHJl c2VudCBjb25kaXRpb25zIHRoYXQgc2hvdWxkCitiZSBoYW5kbGVkIGF0IGEgbGF0ZXIgdGlt ZS4gIFRoZXkgYXJlIHJvdWdobHkgYW5hbG9nb3VzIHRvIFVuaXgKK3NpZ25hbHMsIGV4Y2Vw dCB0aGF0IHRoZXkgYXJlIGhhbmRsZWQgY29vcGVyYXRpdmVseSBieSBjaGVja2luZyBmb3IK K3RoZW0gYXQgbWFueSBwb2ludHMgaW4gdGhlIGNvZGUuIFRoZSBDSEVDS19GT1JfSU5URVJS VVBUUygpIG1hY3JvIGlzCitjYWxsZWQgYXQgc3RyYXRlZ2ljYWxseSBsb2NhdGVkIHNwb3Rz IHdoZXJlIGl0IGlzIG5vcm1hbGx5IHNhZmUgdG8KK3Byb2Nlc3MgaW50ZXJydXB0cy4KKwor V2VsbCBiZWhhdmVkIGJhY2tlbmQgY29kZSBjYWxscyBDSEVDS19GT1JfSU5URVJSVVBUUygp IHBlcmlvZGljYWxseSBpbgorYW55IGxvbmctcnVubmluZyBsb29wcyBvciBvdGhlciBsb25n IGNvbXB1dGF0aW9ucywgYW5kIG5ldmVyIHNsZWVwcwordXNpbmcgbWVjaGFuaXNtcyBvdGhl ciB0aGFuIHRoZSBXYWl0RXZlbnRTZXQgbWVjaGFuaXNtIG9yIHRoZSBtb3JlCitjb252ZW5p ZW50IFdhaXRJbnRlcnJ1cHQgLyBXYWl0U29ja2VyT3JJbnRlcnJ1cHQgZnVuY3Rpb25zIChl eGNlcHQgZm9yCitib3VuZGVkIHNob3J0IHBlcmlvZHMsIGVnIExXTG9jayB3YWl0cykuIEZv bGxvd2luZyB0aGVzZSBydWxlcyBlbnN1cmVzCit0aGF0IHRoZSBiYWNrZW5kIGRvZXNuJ3Qg YmVjb21lIHVuY2FuY2VsbGFibGUgZm9yIHRvbyBsb25nLgorCitFYWNoIGludGVycnVwdCB0 eXBlIGNhbiBoYXZlIGEgaGFuZGxlciBmdW5jdGlvbiBhc3NvY2lhdGVkIHdpdGggaXQsCit3 aGljaCB3aWxsIGJlIGNhbGxlZCBieSBDSEVDS19GT1JfSU5URVJSVVBUUygpIGlmIHRoZSBp bnRlcnJ1cHQgaXMKK3BlbmRpbmcuICBBIHN0YW5kYXJkIHNldCBvZiBpbnRlcnJ1cHQgaGFu ZGxlcnMgYXJlIGluc3RhbGxlZCBhdAorcHJvY2VzcyBzdGFydHVwLCBidXQgdGhleSBjYW4g YmUgb3ZlcnJpZGRlbiBieQorU2V0SW50ZXJydXB0SGFuZGxlcigpLiBBIGhhbmRsZXIgY2Fu IGFsc28gYmUgdGVtcG9yYXJpbHkgZGlzYWJsZWQgYnkKK2NhbGxpbmcgRGlzYWJsZUludGVy cnVwdCBhbmQgcmUtZW5hYmxlZCBieSBFbmFibGVJbnRlcnJ1cHQuCisKK0lmIGFuIGludGVy cnVwdCBpcyByYWlzZWQgdGhhdCBkb2Vzbid0IGhhdmUgYSBoYW5kbGVyIGZ1bmN0aW9uIG9y IGl0CitpcyBub3QgZW5hYmxlZCwgdGhlIGludGVycnVwdCB3aWxsIHJlbWFpbiBwZW5kaW5n IHVudGlsIGl0IGlzIGNsZWFyZWQsCitvciB0aGUgaGFuZGxlciBpcyByZS1lbmFibGVkLgor CitJZiBhbiBpbnRlcnJ1cHQgaXMgc2VudCB0aGF0IHdhcyBhbHJlYWR5IHBlbmRpbmcgZm9y IHRoZSB0YXJnZXQKK3Byb2Nlc3MsIGl0IGlzIGNvYWxlc2NlZCwgaWUuIHRoZSB0YXJnZXQg cHJvY2VzcyB3aWxsIHByb2Nlc3MgaXQgb25seQorb25jZS4gQXR0ZW1wdGluZyB0byBzZXQg YW4gaW50ZXJydXB0IGJpdCB0aGF0IGlzIGFscmVhZHkgc2V0IGlzIHZlcnkKK2Zhc3QsIGFt b3VudGluZyB0byBtZXJlbHkgYW4gYXRvbWljIG9wIGluIHNoYXJlZCBtZW1vcnkuCisKK1Nl ZSBzcmMvaW5jbHVkZS9pcGMvaW50ZXJydXB0LmggZm9yIGEgbGlzdCBvZiBhbGwgdGhlIGlu dGVycnVwdHMgdXNlZAoraW4gY29yZSBjb2RlLiBFeHRlbnNpb25zIGNhbiBkZWZpbmUgdGhl aXIgb3duIGludGVycnVwdHMuCisKK0hPTEQvUkVTVU1FX0lOVEVSUlVQVFMKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKworUHJvY2Vzc2luZyBhbiBpbnRlcnJ1cHQgbWF5IHRocm93IGFu IGVycm9yIHdpdGggZXJlcG9ydCgpIChmb3IKK2V4YW1wbGUsIHF1ZXJ5IGNhbmNlbGxhdGlv bikgb3IgdGVybWluYXRlIHRoZSBwcm9jZXNzIGdyYWNlZnVsbHkuIEluCitzb21lIGNhc2Vz LCB3ZSBpbnZva2UgQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKSBpbnNpZGUgbG93LWxldmVsCitz dWJyb3V0aW5lcyB0aGF0IG1pZ2h0IHNvbWV0aW1lcyBiZSBjYWxsZWQgaW4gY29udGV4dHMg dGhhdCBkbyAqbm90Kgord2FudCB0byBhbGxvdyBpbnRlcnJ1cHQgcHJvY2Vzc2luZy4gIFRo ZSBIT0xEX0lOVEVSUlVQVFMoKSBhbmQKK1JFU1VNRV9JTlRFUlJVUFRTKCkgbWFjcm9zIGFs bG93IGNvZGUgdG8gZW5zdXJlIHRoYXQgbm8gaW50ZXJydXB0CitoYW5kbGVycyBhcmUgY2Fs bGVkLCBldmVuIGlmIENIRUNLX0ZPUl9JTlRFUlJVUFRTKCkgZ2V0cyBjYWxsZWQgaW4gYQor c3Vicm91dGluZS4gIFRoZSBpbnRlcnJ1cHQgd2lsbCBiZSBoZWxkIG9mZiB1bnRpbAorQ0hF Q0tfRk9SX0lOVEVSUlVQVFMoKSBpcyBkb25lIG91dHNpZGUgYW55IEhPTERfSU5URVJSVVBU UygpIC4uLgorUkVTVU1FX0lOVEVSUlVQVFMoKSBzZWN0aW9uLgorCitIT0xEX0lOVEVSUlVQ VFMoKSBibG9ja3MgY2FuIGJlIG5lc3RlZC4gSWYgSE9MRF9JTlRFUlJVUFRTKCkgaXMgY2Fs bGVkCittdWx0aXBsZSB0aW1lcywgaW50ZXJydXB0cyBhcmUgaGVsZCB1bnRpbCBldmVyeSBI T0xEX0lOVEVSUlVQVFMoKSBjYWxsCitoYXMgYmVlbiBiYWxhbmNlZCB3aXRoIGEgUkVTVU1F X0lOVEVSUlVQVFMoKSBjYWxsLgorCitDcml0aWNhbCBzZWN0aW9ucworLS0tLS0tLS0tLS0t LS0tLS0KKworQSByZWxhdGVkLCBidXQgY29uY2VwdHVhbGx5IGRpc3RpbmN0LCBtZWNoYW5p c20gaXMgdGhlICJjcml0aWNhbAorc2VjdGlvbiIgbWVjaGFuaXNtLiAgQSBjcml0aWNhbCBz ZWN0aW9uIG5vdCBvbmx5IGhvbGRzIG9mZiBjYW5jZWwvZGllCitpbnRlcnJ1cHRzLCBidXQg Y2F1c2VzIGFueSBlcmVwb3J0KEVSUk9SKSBvciBlcmVwb3J0KEZBVEFMKSB0byBiZWNvbWUK K2VyZXBvcnQoUEFOSUMpIC0tLSB0aGF0IGlzLCBhIHN5c3RlbS13aWRlIHJlc2V0IGlzIGZv cmNlZC4gIE5lZWRsZXNzCit0byBzYXksIG9ubHkgcmVhbGx5ICpjcml0aWNhbCogY29kZSBz aG91bGQgYmUgbWFya2VkIGFzIGEgY3JpdGljYWwKK3NlY3Rpb24hIFRoaXMgbWVjaGFuaXNt IGlzIG1vc3RseSB1c2VkIGZvciBYTE9HLXJlbGF0ZWQgY29kZS4KKworU2VuZGluZyBpbnRl cnJ1cHRzCistLS0tLS0tLS0tLS0tLS0tLS0KKworSW50ZXJydXB0IGZsYWdzIGNhbiBiZSAi cmFpc2VkIiBpbiBkaWZmZXJlbnQgd2F5czoKKy0gc3luY2hyb25vdXNseSBieSBjb2RlIHRo YXQgd2FudHMgdG8gZGVmZXIgYW4gYWN0aW9uLCBieSBjYWxsaW5nCisgIFJhaXNlSW50ZXJy dXB0LAorLSBhc3luY2hyb25vdXNseSBieSB0aW1lcnMgb3Igb3RoZXIgc2lnbmFsIGhhbmRs ZXJzLCBhbHNvIGJ5IGNhbGxpbmcKKyAgUmFpc2VJbnRlcnJ1cHQsIG9yCistICJzZW50IiBi eSBvdGhlciBiYWNrZW5kcyB3aXRoIFNlbmRJbnRlcnJ1cHQKKworUHJvY2Vzc2luZyBpbnRl cnJ1cHRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW50ZXJydXB0cyBhcmUgdXN1YWxs eSBoYW5kbGVkIGJ5IGhhbmRsZXIgZnVuY3Rpb25zLCB3aGljaCBhcmUgY2FsbGVkCitmcm9t IENIRUNLX0ZPUl9JTlRFUlJVUFRTKCkgd2hlbiB0aGUgY29ycmVzcG9uZGluZyBpbnRlcnJ1 cHQgaXMKK3BlbmRpbmcuIFVzZSBTZXRJbnRlcnJ1cHRIYW5kbGVyKCkgdG8gaW5zdGFsbCBh IGhhbmRsZXIgZnVuY3Rpb24uCisKK1NvbWV0aW1lcyB5b3UgZG9uJ3Qgd2FudCBhbiBpbnRl cnJ1cHQgdG8gYmUgcHJvY2Vzc2VkIGF0IGFueSByYW5kb20KK0NIRUNLX0ZPUl9JTlRFUlJV UFRTKCkgaW52b2NhdGlvbi4gSW4gdGhhdCBjYXNlLCB5b3UgY2FuIGxlYXZlIHRoZQoraW50 ZXJydXB0IGhhbmRsZXIgZGlzYWJsZWQsIGFuZCBjaGVjayBmb3IgdGhlIGludGVycnVwdCBl eHBsaWNpdGx5IGF0CitzdWl0YWJsZSBzcG90cyB3aXRoIEludGVycnVwdFBlbmRpbmcoKS4K KworSU5URVJSVVBUU19QRU5ESU5HX0NPTkRJVElPTigpIGNhbiBiZSBjaGVja2VkIHRvIHNl ZSB3aGV0aGVyIGFuCitpbnRlcnJ1cHQgbmVlZHMgdG8gYmUgc2VydmljZWQsIHdpdGhvdXQg dHJ5aW5nIHRvIGRvIHNvIGltbWVkaWF0ZWx5LgorU29tZSBjYWxsZXJzIGFyZSBhbHNvIGlu dGVyZXN0ZWQgaW4gSU5URVJSVVBUU19DQU5fQkVfUFJPQ0VTU0VEKCksCit3aGljaCB0ZWxs cyB3aGV0aGVyIENIRUNLX0ZPUl9JTlRFUlJVUFRTKCkgaXMgc3VyZSB0byBjbGVhciB0aGUK K2ludGVycnVwdC4KKworCitXYWl0aW5nIGZvciBhbiBpbnRlcnJ1cHQKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorVGhlIGNvcnJlY3QgcGF0dGVybiB0byB3YWl0IGZvciBhbiBldmVu dChzKSB0aGF0IHJhaXNlcyBhbiBpbnRlcnJ1cHQKK2lzOgorCitgYGAKK2ZvciAoOzspCit7 CisJLyogSGFuZGxlIGFueSBvdGhlciBpbnRlcnJ1cHRzIHJlY2VpdmVkIHdoaWxlIHdlJ3Jl IHdhaXRpbmcgKi8KKwlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCisJLyogQ2hlY2sgaWYg b3VyIGludGVycnVwdCB3YXMgcmFpc2VkIChjbGVhcmluZyBpdCBpZiBpdCB3YXMpICovCisJ aWYgKENvbnN1bWVJbnRlcnJ1cHQoSU5URVJSVVBUX1BSSU5URVJfT05fRklSRSkpCisJCWJy ZWFrOworCisJLyoKKwkgKiBTbGVlcCB1bnRpbCBvdXIgaW50ZXJydXB0IG9yIG9uZSBvZiB0 aGUgc3RhbmRhcmQgaW50ZXJydXB0cyBpcworCSAqIHJlY2VpdmVkLgorCSAqLworCVdhaXRJ bnRlcnJ1cHQoSU5URVJSVVBUX0NGSV9NQVNLIHwKKwkJCQkgIElOVEVSUlVQVF9QUklOVEVS X09OX0ZJUkUsCisJCQkJICAuLi4pOworfQorYGBgCisKK09mdGVuIGFuIGludGVycnVwdCBp cyB1c2VkIHRvIHdha2UgdXAgYSBwcm9jZXNzIHRoYXQgaXMga25vd24gdG8gYmUKK3dhaXRp bmcgYW5kIG5vdCBkb2luZyBhbnl0aGluZyBlbHNlLiBUaGUgSU5URVJSVVBUX1dBSVRfV0FL RVVQCitpbnRlcnJ1cHQgaXMgcmVzZXJ2ZWQgZm9yIHN1Y2ggdXNlIGNhc2VzIHdoZXJlIHlv dSBkb24ndCBuZWVkIGEKK2RlZGljYXRlZCBpbnRlcnJ1cHQgZmxhZy4gV2hlbiB1c2luZyBJ TlRFUlJVUFRfV0FJVF9XQUtFVVAsIHlvdSBuZWVkCitzb21lIG90aGVyIHNpZ25hbGluZywg ZS5nLiBhIGZsYWcgaW4gc2hhcmVkIG1lbW9yeSwgdG8gaW5kaWNhdGUgdGhhdAordGhlIGRl c2lyZWQgZXZlbnQgaGFzIGhhcHBlbiwgYXMgeW91IG1heSBzb21ldGltZXMgcmVjZWl2ZSBm YWxzZQord2FrZXVwcy4gVGhlIHBhdHRlcm4gdXNpbmcgSU5URVJSVVBUX1dBSVRfV0FLRVVQ IGxvb2tzIGxpa2UgdGhpczoKKworYGBgCitmb3IgKDs7KQoreworCS8qIEhhbmRsZSBhbnkg b3RoZXIgaW50ZXJydXB0cyByZWNlaXZlZCB3aGlsZSB3ZSdyZSB3YWl0aW5nICovCisJQ0hF Q0tfRk9SX0lOVEVSUlVQVFMoKTsKKworCUNsZWFySW50ZXJydXB0KElOVEVSUlVQVF9XQUlU X1dBS0VVUCk7CisJaWYgKHdvcmsgdG8gZG8pCisJeworCQkvKiBpbiBwYXJ0aWN1bGFyLCBl eGl0IHRoZSBsb29wIGlmIHNvbWUgY29uZGl0aW9uIHNhdGlzZmllZCAqLworCQlEbyBTdHVm ZigpOworCX0KKwlXYWl0SW50ZXJydXB0KElOVEVSUlVQVF9XQUlUX1dBS0VVUCwgLi4uKTsK K30KK2BgYAorCitJdCdzIGltcG9ydGFudCB0byBjbGVhciB0aGUgaW50ZXJydXB0ICpiZWZv cmUqIGNoZWNraW5nIGlmIHRoZXJlJ3MKK3dvcmsgdG8gZG8uIE90aGVyd2lzZSwgaWYgc29t ZW9uZSBzZXRzIHRoZSBpbnRlcnJ1cHQgYmV0d2VlbiB0aGUgY2hlY2sKK2FuZCB0aGUgQ2xl YXJJbnRlcnJ1cHQoKSBjYWxsLCB5b3Ugd2lsbCBtaXNzIGl0IGFuZCBXYWl0IHdpbGwKK2lu Y29ycmVjdGx5IGJsb2NrLiBBbm90aGVyIHZhbGlkIGNvZGluZyBwYXR0ZXJuIGxvb2tzIGxp a2U6CisKK2BgYAorZm9yICg7OykKK3sKKwlpZiAod29yayB0byBkbykKKwl7CisJCS8qIGlu IHBhcnRpY3VsYXIsIGV4aXQgdGhlIGxvb3AgaWYgc29tZSBjb25kaXRpb24gc2F0aXNmaWVk ICovCisJCURvIFN0dWZmKCk7CisJfQorCVdhaXRJbnRlcnJ1cHQoSU5URVJSVVBUX1dBSVRf V0FLRVVQLCAuLi4pOworCUNsZWFySW50ZXJydXB0KElOVEVSUlVQVF9XQUlUX1dBS0VVUCk7 Cit9CitgYGAKKworVGhpcyBpcyB1c2VmdWwgdG8gcmVkdWNlIGludGVycnVwdCB0cmFmZmlj IGlmIGl0J3MgZXhwZWN0ZWQgdGhhdCB0aGUKK2xvb3AncyB0ZXJtaW5hdGlvbiBjb25kaXRp b24gd2lsbCBvZnRlbiBiZSBzYXRpc2ZpZWQgaW4gdGhlIGZpcnN0CitpdGVyYXRpb247IHRo ZSBjb3N0IGlzIGFuIGV4dHJhIGxvb3AgaXRlcmF0aW9uIGJlZm9yZSBibG9ja2luZyB3aGVu IGl0CitpcyBub3QuICBXaGF0IG11c3QgYmUgYXZvaWRlZCBpcyBwbGFjaW5nIGFueSBjaGVj a3MgZm9yIGFzeW5jaHJvbm91cworZXZlbnRzIGFmdGVyIFdhaXRJbnRlcnJ1cHQgYW5kIGJl Zm9yZSBDbGVhckludGVycnVwdCwgYXMgdGhhdCBjcmVhdGVzCithIHJhY2UgY29uZGl0aW9u LgorCisKK1VuaXggU2lnbmFscworPT09PT09PT09PT09CisKK1Bvc3RtYXN0ZXIgYW5kIG1v c3QgY2hpbGQgcHJvY2Vzc2VzIGFsc28gcmVzcG9uZCB0byBhIGZldyBzdGFuZGFyZAorVW5p eCBzaWduYWxzOgorCitTSUdIVVAgLT4gUmFpc2VzIElOVEVSUlVQVF9DT05GSUdfUkVMT0FE CitTSUdJTlQgLT4gUmFpc2VzIElOVEVSUlVQVF9RVUVSWV9DQU5DRUwKK1NJR1RFUk0gLT4g UmFpc2VzIElOVEVSUlVQVF9URVJNSU5BVEUKK1NJR1FVSVQgLT4gaW1tZWRpYXRlIHNodXRk b3duLCBhYm9ydCB0aGUgcHJvY2VzcworCitwZ19jdGwgdXNlcyB0aHNlIFVuaXggc2lnbmFs cyB0byB0ZWxsIHBvc3RtYXN0ZXIgdG8gcmVsb2FkIGNvbmZpZywKK3N0b3AsIGV0Yy4gVGhl c2UgYXJlIGFsc28gbWVudGlvbmVkIGluIHRoZSB1c2VyIGRvY3VtZW50YXRpb24uCisKK1Bv c3RtYXN0ZXIgY2Fubm90IHNlbmQgaW50ZXJydXB0cyB0byBwcm9jZXNzZXMgd2l0aG91dCBQ R1BST0MKK2VudHJpZXMuIEhlbmNlLCBpdCBzdGlsbCB1c2VzIHRoZSBhYm92ZSBVbml4IHNp Z25hbHMgb24gdGhlIGNoaWxkCitwcm9jZXNzZXMuCisKK1RoZXJlIGFyZSBzb21lIGV4Y2Vw dGlvbnMgdG8gdGhlc2U6CisKKy0gQSBmZXcgcHJvY2Vzc2VzIGxpa2UgdGhlIGNoZWNrcG9p bnRlciwgYXJjaGl2ZXIsIGFuZCBJTyB3b3JrZXJzCisgIGRvbid0IHJlYWN0IHRvIFNJR1RF Uk0sIGJlY2F1c2UgVW5peCBzeXN0ZW0gc2h1dGRvd24gc2VuZHMgYSBTSUdURVJNCisgIHRv IGFsbCBwcm9jZXNzZXMsIGFuZCB3ZSB3YW50IHRoZW0gdG8gZXhpdCBvbmx5IG9ubHkgYWZ0 ZXIgYWxsIG90aGVyCisgIHByb2Nlc3MuIEluc3RlYWQsIHRoZSBwb3N0bWFzdGVyIHNlbmRz IHRoZW0gU0lHVVNSMiBhZnRlciBhbGwgdGhlCisgIG90aGVyIHByb2Nlc3NlcyBoYXZlIGV4 aXRlZC4KKworLSBUaGUgcG9zdG1hc3RlciB1c2VzIFNJR1VTUjEgdG8gcmVxdWVzdCB0aGUg bG9nZ2VyIHByb2Nlc3MgdG8gcm90YXRlCisgIHRoZSBsb2cuIEludGVycnVwdHMgY2Fubm90 IGJlIHNlbnQgdG8gdGhlIGxvZ2dlciBwcm9jZXNzIGJlY2F1c2UgaXQKKyAgZG9lcyBub3Qg aGF2ZSBhIFBHUFJPQyBlbnRyeSBhbmQgcmVmcmFpbnMgZnJvbSBhY2Nlc3Npbmcgc2hhcmVk CisgIG1lbW9yeSBpbiBnZW5lcmFsLgorCisKK1RPRE86IE9wZW4gcXVlc3Rpb25zCis9PT09 PT09PT09PT09PT09PT09PQorCitUT0RPOiBQdXQgcGVuZGluZ0ludGVycnVwdHMgaW4gUE1D aGlsZFNsb3Qgb3IgUEdQUk9DPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorCitQb3N0bWFzdGVyIGNhbm5vdCBzZW5kIGludGVycnVw dHMgdG8gcHJvY2Vzc2VzIHdpdGhvdXQgUEdQUk9DCitlbnRyaWVzLiBIZW5jZSwgaXQgc3Rp bGwgdXNlcyBwbGFpbiBVbml4IHNpZ25hbHMuIElmIHdlIG1vdmVkIHRoZQoraW50ZXJydXB0 IG1hc2sgdG8gUE1DaGlsZFNsb3QsIGl0IHdvdWxkIGJlIGVhc2llciBmb3IgcG9zdG1hc3Rl ci4KK0hvd2V2ZXIsIFBHUFJPQyBzZWVtcyBsaWtlIGEgbW9yZSBuYXR1cmFsIGxvY2F0aW9u IG90aGVyd2lzZS4KKworT3B0aW9uczoKKworYSkgTW92ZSBwZW5kaW5nSW50ZXJydXB0cyB0 byBQTUNoaWxkU2xvdC4gVGhhdCB3YXksIHlvdSBjYW4gc2VuZCBzaWduYWxzCisgICB0byBw cm9jZXNzZXMgYWxzbyB0byBwcm9jZXNzZXMgdGhhdCBkb24ndCBoYXZlIGEgUEdQUk9DIGVu dHJ5LgorCitiKSBBZGQgYSBwZW5kaW5nSW50ZXJydXB0cyBtYXNrIHRvIFBNQ2hpbGRTbG90 LCBidXQgYWxzbyBoYXZlIGl0IGluIFBHUFJPQy4KKyAgIFdoZW4gcG9zdG1hc3RlciBzZW5z IGFuIGludGVycnVwdCwgaXQgY2FuIGNoZWNrIGlmIGl0IGhhcyBhIFBHUFJPQyBlbnRyeSwK KyAgIGFuZCBpZiBub3QsIHVzZSB0aGUgcGVuZGluZ0ludGVycnVwdHMgZmllbGQgaW4gUE1D aGlsZFNsb3QgaW5zdGVhZC4KKworYykgQXNzaWduIGEgUEdQUk9DIGVudHJ5IGZvciBldmVy eSBjaGlsZCBwcm9jZXNzIGluIHBvc3RtYXN0ZXIgYWxyZWFkeS4KKyAgIChFeGNlcHQgZGVh ZC1lbmQgYmFja2VuZHMpLgorCitDdXJyZW50bHksIHRoZXJlJ3MgYSBQR1BST0MgcG9pbnRl ciBpbiBQTUNoaWxkU2xvdCwgd2hpY2ggdGhlCitwb3N0bWFzdGVyIHVzZXMgdG8gZmluZCB0 aGUgUEdQUk9DIGVudHJ5LiBCdXQgdGhhdCBvbmx5IHdvcmtzIGFmdGVyCit0aGUgY2hpbGQg cHJvY2VzcyBoYXMgYWNxdWlyZWQgYSBQR1BST0MgZW50cnkuIFNvIHRoZXJlJ3MgYSBzbWFs bAord2luZG93IGFmdGVyIGZvcmtpbmcgYSBwcm9jZXNzIHdoZXJlIHRoZSBwb3N0bWFzdGVy IGNhbm5vdCBzZW5kCitpbnRlcnJ1cHRzIHRvIGl0LgorCisKK1RPRE86IFVuaXF1ZSBzZXNz aW9uIGlkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luIHNvbWUgcGxhY2VzLCB3ZSBy ZWFkIHRoZSBwaWQgb2YgYSBwcm9jZXNzIChmcm9tIFBHUFJPQyBvcgorZWxzZXdoZXJlKSwg YW5kIHNlbmQgc2lnbmFsIHRvIGl0LCBhY2NlcHRpbmcgdGhhdCB0aGUgcHJvY2VzcyBtYXkg aGF2ZQorYWxyZWFkeSBleGl0ZWQuICBJZiB3ZSBkaXJlY3RseSByZXBsYWNlIHRob3NlIHVz ZXMgb2YgJ3BpZCcgd2l0aCBhCitQcm9jTnVtYmVyLCB0aGUgUHJvY051bWJlciBtaWdodCBn ZXQgcmV1c2VkIG11Y2ggZmFzdGVyIHRoYW4gdGhlIHBpZAord291bGQuIFNvbHV0aW9uczoK KworYSkgSW50cm9kdWNlIHRoZSBjb25jZXB0IG9mIGEgdW5pcXVlIHNlc3Npb24gSUQgdGhh dCBpcyBuZXZlciByZWN5Y2xlZAorICAgKG9yIG5vdCBmb3IgYSBsb25nIHRpbWUsIGFueXdh eSkuIFdoZW4gcmVhZGluZyB0aGUgUHJvY051bWJlciB0bworICAgc2VuZCBhbiBpbnRlcnJ1 cHQgdG8sIGFsc28gcmVhZCB0aGUgc2Vzc2lvbiBJRC4gV2hlbiBzZW5kaW5nIHRoZQorICAg aW50ZXJydXB0LCBjaGVjayB0aGF0IHRoZSBzZXNzaW9uIElEIG1hdGNoZXMuCisKKworVE9E TzogRXh0ZW5zaW9ucworLS0tLS0tLS0tLS0tLS0tCisKK0V4dGVuc2lvbnMgc2hvdWxkIGJl IGFibGUgdG8gYWxsb2NhdGUgaW50ZXJydXB0cyBiaXRzIGZvciB0aGVpciBvd24KK3B1cnBv c2VzLiBUaGlzIGlzIG5vdCBpbXBsZW1lbnRlZC4KKworVE9ETzogTW9yZSBpbnRlcnJ1cHQg Yml0cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVyZSBhcmUgY3VycmVudGx5 IDcgYml0cyBvdXQgb2YgMzIgYXZhaWxhYmxlLiBUaGF0IGRvZXNuJ3QgbGVhdmUgYQorbG90 IG9mIGhlYWRyb29tIGZvciB0aGUgZnV0dXJlLCBlc3BlY2lhbGx5IHdoZW4gZXh0ZW5zaW9u cyBjYW4gYWxzbworYWxsb2NhdGUgc29tZSBiaXRzLgorCitPcHRpb25zOgorCithKSBHbyBm cm9tIDMyIHRvIDY0IGF0b21pY3MuIFNpbXBsZSwgYXNzdW1pbmcgdGhlcmUncyBubyBwZXJm b3JtYW5jZQorICAgZGlmZmVyZW5jZS4gQnV0IHRoZSBiaXRzIHdpbGwgc3RpbGwgYmUgYSBz b21ld2hhdCBzY2FyY2UgcmVzb3VyY2UuCisKK2IpIFVzZSBtdWx0aXBsZSB3b3JkcyBmb3Ig dGhlIHBlbmRpbmcgaW50ZXJydXB0cywgYW5kIGFub3RoZXIgZmxhZyB0bworICAgaW5kaWNh dGUgdGhhdCAic29tZXRoaW5nIGlzIHBlbmRpbmciLiBUaGF0IG1pZ2h0IGFkZCBzb21lIGlu c3RydWN0aW9ucworICAgdG8gdGhlIGhvdCBwYXRocyBvZiBDSEVDS19GT1JfSU5URVJSVVBU UygpLgorCitUT0RPOiBPdGhlcgorLS0tLS0tLS0tLS0KKworLSBDaGVjayBwZXJmb3JtYW5j ZSBvZiBDSEVDS19GT1JfSU5URVJSVVBUUygpLiBJdCdzIHZlcnkgY2hlYXAsIGJ1dAorICBp dCdzIG5ldmVydGhlbGVzcyBtb3JlIGluc3RydWN0aW9ucyB0aGFuIGl0IHVzZWQgdG8gYmUu CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9pcGMvaW50ZXJydXB0LmMgYi9zcmMvYmFja2Vu ZC9pcGMvaW50ZXJydXB0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAuLjE3OTYyMDI3ZjIyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvaXBjL2lu dGVycnVwdC5jCkBAIC0wLDAgKzEsNDE4IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq CisgKiBpbnRlcnJ1cHQuYworICoJICBJbnRlci1wcm9jZXNzIGludGVycnVwdHMuCisgKgor ICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI1LCBQb3N0Z3JlU1FMIEds b2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0 LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKgorICog SURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvaXBjL2ludGVycnVwdC5jCisgKgor ICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgiCisK KyNpbmNsdWRlICJpcGMvaW50ZXJydXB0LmgiCisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisj aW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKKyNp bmNsdWRlICJ1dGlscy9yZXNvd25lci5oIgorCisvKgorICogQ3VycmVudGx5IGluc3RhbGxl ZCBpbnRlcnJ1cHQgaGFuZGxlcnMKKyAqLworc3RhdGljIHBnX2ludGVycnVwdF9oYW5kbGVy X3QgaW50ZXJydXB0X2hhbmRsZXJzWzMyXTsKKworLyoKKyAqIFhYWDogaXMgJ3ZvbGF0aWxl JyBzdGlsbCBuZWVkZWQgb24gYWxsIHRoZSB2YXJpYWJsZXMgYmVsb3c/IFdoaWNoIG9uZXMg YXJlCisgKiBhY2Nlc3NlZCBmcm9tIHNpZ25hbCBoYW5kbGVycz8KKyAqLworCisvKiBCaXRt YXNrIG9mIGN1cnJlbnRseSBlbmFibGVkIGludGVycnVwdHMgKi8KK3ZvbGF0aWxlIEludGVy cnVwdE1hc2sgRW5hYmxlZEludGVycnVwdHNNYXNrOworCisvKgorICogSW50ZXJydXB0cyB0 aGF0IHdvdWxkIGJlIHByb2Nlc3NlZCBieSBDSEVDS19GT1JfSU5URVJSVVBUUygpLiAgVGhp cyBpcworICogZXF1YWwgdG8gRW5hYmxlZEludGVycnVwdHNNYXNrLCBleGNlcHQgd2hlbiBp bnRlcnJ1cHRzIGFyZSBoZWxkIG9mZiBieQorICogSE9MRC9SRVNVTUVfSU5URVJSVVBUUygp IG9yIGEgY3JpdGljYWwgc2VjdGlvbi4KKyAqLwordm9sYXRpbGUgSW50ZXJydXB0TWFzayBD aGVja0ZvckludGVycnVwdHNNYXNrOworCisvKiBWYXJpYWJsZXMgZm9yIGhvbGRvZmYgbWVj aGFuaXNtICovCit2b2xhdGlsZSB1aW50MzIgSW50ZXJydXB0SG9sZG9mZkNvdW50ID0gMDsK K3ZvbGF0aWxlIHVpbnQzMiBDcml0U2VjdGlvbkNvdW50ID0gMDsKKworLyogQSBjb21tb24g V2FpdEV2ZW50U2V0IHVzZWQgdG8gaW1wbGVtZW50IFdhaXRJbnRlcnJ1cHQoKSAqLworc3Rh dGljIFdhaXRFdmVudFNldCAqSW50ZXJydXB0V2FpdFNldDsKKworLyogVGhlIHBvc2l0aW9u IG9mIHRoZSBpbnRlcnJ1cHQgaW4gSW50ZXJydXB0V2FpdFNldC4gKi8KKyNkZWZpbmUgSW50 ZXJydXB0V2FpdFNldEludGVycnVwdFBvcyAwCisjZGVmaW5lIEludGVycnVwdFdhaXRTZXRQ b3N0bWFzdGVyRGVhdGhQb3MgMQorCitzdGF0aWMgcGdfYXRvbWljX3VpbnQzMiBMb2NhbFBl bmRpbmdJbnRlcnJ1cHRzOworCitwZ19hdG9taWNfdWludDMyICpNeVBlbmRpbmdJbnRlcnJ1 cHRzID0gJkxvY2FsUGVuZGluZ0ludGVycnVwdHM7CisKKy8qCisgKiBJbnN0YWxsIGFuIGlu dGVycnVwdCBoYW5kbGVyIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciB0aGUgZ2l2ZW4gaW50ZXJy dXB0LgorICoKKyAqIFlvdSBuZWVkIHRvIGFsc28gZW5hYmxlIHRoZSBpbnRlcnJ1cHQgd2l0 aCBFbmFibGVJbnRlcnJ1cHQoKSwgdW5sZXNzIHlvdSdyZQorICogcmVwbGFjaW5nIGFuIGV4 aXN0aW5nIGhhbmRsZXIgZnVuY3Rpb24uCisgKi8KK3ZvaWQKK1NldEludGVycnVwdEhhbmRs ZXIoSW50ZXJydXB0TWFzayBpbnRlcnJ1cHRNYXNrLCBwZ19pbnRlcnJ1cHRfaGFuZGxlcl90 IGhhbmRsZXIpCit7CisJLyoKKwkgKiBYWFg6IEl0J3Mgc29tZXdoYXQgaW5lZmZpY2llbnQg dG8gbG9vcCB0aHJvdWdoIGFsbCBiaXRzLCBidXQgdGhpcyBpc24ndAorCSAqIHBlcmZvcm1h bmNlIGNyaXRpY2FsLgorCSAqLworCWZvciAodWludDMyIGkgPSAwOyBpIDwgbGVuZ3Rob2Yo aW50ZXJydXB0X2hhbmRsZXJzKTsgaSsrKQorCXsKKwkJaWYgKChpbnRlcnJ1cHRNYXNrICYg KDEgPDwgaSkpICE9IDApCisJCXsKKwkJCS8qIFJlcGxhY2Ugb2xkIGhhbmRsZXIgKi8KKwkJ CWludGVycnVwdF9oYW5kbGVyc1tpXSA9IGhhbmRsZXI7CisJCX0KKwl9Cit9CisKKy8qIEVu YWJsZSBhbiBpbnRlcnJ1cHQgdG8gYmUgcHJvY2Vzc2VkIGJ5IENIRUNLX0ZPUl9JTlRFUlJV UFRTKCkgKi8KK3ZvaWQKK0VuYWJsZUludGVycnVwdChJbnRlcnJ1cHRNYXNrIGludGVycnVw dE1hc2spCit7CisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCWZvciAodWludDMyIGkg PSAwOyBpIDwgbGVuZ3Rob2YoaW50ZXJydXB0X2hhbmRsZXJzKTsgaSsrKQorCXsKKwkJaWYg KChpbnRlcnJ1cHRNYXNrICYgKDEgPDwgaSkpICE9IDApCisJCQlBc3NlcnQoaW50ZXJydXB0 X2hhbmRsZXJzW2ldICE9IE5VTEwpOworCX0KKyNlbmRpZgorCisJRW5hYmxlZEludGVycnVw dHNNYXNrIHw9IGludGVycnVwdE1hc2s7CisJaWYgKEludGVycnVwdEhvbGRvZmZDb3VudCA9 PSAwICYmIENyaXRTZWN0aW9uQ291bnQgPT0gMCkKKwkJQ2hlY2tGb3JJbnRlcnJ1cHRzTWFz ayA9IEVuYWJsZWRJbnRlcnJ1cHRzTWFzazsKK30KKworLyoKKyAqIERpc2FibGUgdGhlIGhh bmRsZXIgZnVuY3Rpb24gZm9yIGFuIGludGVycnVwdC4KKyAqCisgKiBXaGVuIGRpc2FibGVk LCBDSEVDS19GT1JfSU5URVJSVVBUUygpIHdpbGwgbm90IGNhbGwgdGhlIGhhbmRsZXIgZnVu Y3Rpb24KKyAqIGZvciB0aGUgZ2l2ZW4gaW50ZXJydXB0LiAgSWYgdGhlIGludGVycnVwdCBp cyByZWNlaXZlZCwgaXQgd2lsbCByZW1haW4KKyAqIHBlbmRpbmcgdW50aWwgeW91IG1hbnVh bGx5IGNoZWNrIGFuZCBjbGVhciBpdCB3aXRoIENsZWFySW50ZXJydXB0KCksIG9yCisgKiBy ZS1lbmFibGUgdGhlIGhhbmRsZXIgZnVuY3Rpb24uCisgKi8KK3ZvaWQKK0Rpc2FibGVJbnRl cnJ1cHQoSW50ZXJydXB0TWFzayBpbnRlcnJ1cHRNYXNrKQoreworCUVuYWJsZWRJbnRlcnJ1 cHRzTWFzayAmPSB+aW50ZXJydXB0TWFzazsKKwlpZiAoSW50ZXJydXB0SG9sZG9mZkNvdW50 ID09IDAgJiYgQ3JpdFNlY3Rpb25Db3VudCA9PSAwKQorCQlDaGVja0ZvckludGVycnVwdHNN YXNrID0gRW5hYmxlZEludGVycnVwdHNNYXNrOworfQorCisvKgorICogUHJvY2Vzc0ludGVy cnVwdHM6IG91dC1vZi1saW5lIHBvcnRpb24gb2YgQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKSBt YWNybworICoKKyAqIElmIGFuIGludGVycnVwdCBjb25kaXRpb24gaXMgcGVuZGluZywgYW5k IGl0J3Mgc2FmZSB0byBzZXJ2aWNlIGl0LAorICogdGhlbiBjbGVhciB0aGUgZmxhZyBhbmQg Y2FsbCB0aGUgaW50ZXJydXB0IGhhbmRsZXIuCisgKgorICogTm90ZTogaWYgSU5URVJSVVBU U19DQU5fQkVfUFJPQ0VTU0VEKGludGVycnVwdCkgaXMgdHJ1ZSwgdGhlbgorICogUHJvY2Vz c0ludGVycnVwdHMgaXMgZ3VhcmFudGVlZCB0byBjbGVhciB0aGUgZ2l2ZW4gaW50ZXJydXB0 IGJlZm9yZQorICogcmV0dXJuaW5nLiAgKFRoaXMgaXMgbm90IHRoZSBzYW1lIGFzIGd1YXJh bnRlZWluZyB0aGF0IGl0J3Mgc3RpbGwgY2xlYXIKKyAqIHdoZW4gd2UgcmV0dXJuOyBhbm90 aGVyIGludGVycnVwdCBjb3VsZCBoYXZlIGFycml2ZWQuICBCdXQgd2UgcHJvbWlzZSB0aGF0 CisgKiBhbnkgcHJlLWV4aXN0aW5nIG9uZSB3aWxsIGhhdmUgYmVlbiBzZXJ2aWNlZC4pCisg Ki8KK3ZvaWQKK1Byb2Nlc3NJbnRlcnJ1cHRzKHZvaWQpCit7CisJSW50ZXJydXB0TWFzayBp bnRlcnJ1cHRzVG9Qcm9jZXNzOworCisJQXNzZXJ0KEludGVycnVwdEhvbGRvZmZDb3VudCA9 PSAwICYmIENyaXRTZWN0aW9uQ291bnQgPT0gMCk7CisKKwkvKgorCSAqIFRPRE86IGl0J2Qg YmUgZ29vZCBmb3IgcGVyZm9ybWFuY2UgdG8gcmVhZCB0aGUgYXRvbWljCisJICogTXlQZW5k aW5nSW50ZXJydXB0cyB2YXJpYWJsZSBqdXN0IG9uY2UgaW4gdGhpcyBmdW5jdGlvbgorCSAq LworCWludGVycnVwdHNUb1Byb2Nlc3MgPQorCQlwZ19hdG9taWNfcmVhZF91MzIoTXlQZW5k aW5nSW50ZXJydXB0cykgJiBDaGVja0ZvckludGVycnVwdHNNYXNrOworCisJZm9yICh1aW50 MzIgaSA9IDA7IGkgPCBsZW5ndGhvZihpbnRlcnJ1cHRfaGFuZGxlcnMpOyBpKyspCisJewor CQl1aW50MzIJCWludGVycnVwdCA9ICgxIDw8IGkpOworCisJCWlmICgoaW50ZXJydXB0c1Rv UHJvY2VzcyAmIGludGVycnVwdCkgIT0gMCkKKwkJeworCQkJLyoKKwkJCSAqIENsZWFyIHRo ZSBpbnRlcnJ1cHQgKmJlZm9yZSogY2FsbGluZyB0aGUgaGFuZGxlciBmdW5jdGlvbiwgc28K KwkJCSAqIHRoYXQgaWYgdGhlIGludGVycnVwdCBpcyByZWNlaXZlZCBhZ2FpbiB3aGlsZSB0 aGUgaGFuZGxlcgorCQkJICogZnVuY3Rpb24gaXMgYmVpbmcgZXhlY3V0ZWQsIHdlIHdvbid0 IG1pc3MgaXQuCisJCQkgKgorCQkJICogRm9yIHNpbWlsYXIgcmVhc29ucywgd2UgYWxzbyBj bGVhciB0aGUgZmxhZ3Mgb25lIGJ5IG9uZSBldmVuIGlmCisJCQkgKiBtdWx0aXBsZSBpbnRl cnJ1cHRzIGFyZSBwZW5kaW5nLiAgT3RoZXJ3aXNlIGlmIG9uZSBvZiB0aGUKKwkJCSAqIGlu dGVycnVwdCBoYW5kbGVycyBiYWlsIG91dCB3aXRoIGFuIEVSUk9SLCB3ZSB3b3VsZCBoYXZl CisJCQkgKiBhbHJlYWR5IGNsZWFyZWQgdGhlIG90aGVyIGJpdHMsIGFuZCB3b3VsZCBtaXNz IHByb2Nlc3NpbmcgdGhlbS4KKwkJCSAqLworCQkJQ2xlYXJJbnRlcnJ1cHQoaW50ZXJydXB0 KTsKKworCQkJLyogQ2FsbCB0aGUgaGFuZGxlciBmdW5jdGlvbiAqLworCQkJKCppbnRlcnJ1 cHRfaGFuZGxlcnNbaV0pICgpOworCQl9CisJfQorfQorCisvKgorICogU3dpdGNoIHRvIGxv Y2FsIGludGVycnVwdHMuICBPdGhlciBiYWNrZW5kcyBjYW4ndCBzZW5kIGludGVycnVwdHMg dG8gdGhpcworICogb25lLiAgT25seSBSYWlzZUludGVycnVwdCgpIGNhbiBzZXQgdGhlbSwg ZnJvbSBpbnNpZGUgdGhpcyBwcm9jZXNzLgorICovCit2b2lkCitTd2l0Y2hUb0xvY2FsSW50 ZXJydXB0cyh2b2lkKQoreworCWlmIChNeVBlbmRpbmdJbnRlcnJ1cHRzID09ICZMb2NhbFBl bmRpbmdJbnRlcnJ1cHRzKQorCQlyZXR1cm47CisKKwlNeVBlbmRpbmdJbnRlcnJ1cHRzID0g JkxvY2FsUGVuZGluZ0ludGVycnVwdHM7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGF0IFNJ R0FMUk0gaGFuZGxlcnMgdGhhdCBjYWxsIFJhaXNlSW50ZXJydXB0KCkgYXJlIG5vdworCSAq IHNlZWluZyB0aGUgbmV3IE15UGVuZGluZ0ludGVycnVwdHMgZGVzdGluYXRpb24uCisJICov CisJcGdfbWVtb3J5X2JhcnJpZXIoKTsKKworCS8qCisJICogTWl4IGluIHRoZSBpbnRlcnJ1 cHRzIHRoYXQgd2UgaGF2ZSByZWNlaXZlZCBhbHJlYWR5IGluIG91ciBzaGFyZWQKKwkgKiBp bnRlcnJ1cHQgdmVjdG9yLCB3aGlsZSBhdG9taWNhbGx5IGNsZWFyaW5nIGl0LiAgT3RoZXIg YmFja2VuZHMgbWF5CisJICogY29udGludWUgdG8gc2V0IGJpdHMgaW4gaXQgYWZ0ZXIgdGhp cyBwb2ludCwgYnV0IHdlJ3ZlIGF0b21pY2FsbHkKKwkgKiB0cmFuc2ZlcnJlZCB0aGUgZXhp c3RpbmcgYml0cyB0byBvdXIgbG9jYWwgdmVjdG9yIHNvIHdlIHdvbid0IGdldAorCSAqIGR1 cGxpY2F0ZWQgaW50ZXJydXB0cyBsYXRlciBpZiB3ZSBzd2l0Y2ggYmFjay4KKwkgKi8KKwlw Z19hdG9taWNfZmV0Y2hfb3JfdTMyKE15UGVuZGluZ0ludGVycnVwdHMsCisJCQkJCQkgICBw Z19hdG9taWNfZXhjaGFuZ2VfdTMyKCZNeVByb2MtPnBlbmRpbmdJbnRlcnJ1cHRzLCAwKSk7 Cit9CisKKy8qCisgKiBTd2l0Y2ggdG8gc2hhcmVkIG1lbW9yeSBpbnRlcnJ1cHRzLiAgT3Ro ZXIgYmFja2VuZHMgY2FuIHNlbmQgaW50ZXJydXB0cyB0bworICogdGhpcyBvbmUgaWYgdGhl eSBrbm93IGl0cyBQcm9jTnVtYmVyLCBhbmQgd2UnbGwgbm93IHNlZSBhbnkgdGhhdCB3ZSBt aXNzZWQuCisgKi8KK3ZvaWQKK1N3aXRjaFRvU2hhcmVkSW50ZXJydXB0cyh2b2lkKQorewor CWlmIChNeVBlbmRpbmdJbnRlcnJ1cHRzID09ICZNeVByb2MtPnBlbmRpbmdJbnRlcnJ1cHRz KQorCQlyZXR1cm47CisKKwlNeVBlbmRpbmdJbnRlcnJ1cHRzID0gJk15UHJvYy0+cGVuZGlu Z0ludGVycnVwdHM7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGF0IFNJR0FMUk0gaGFuZGxl cnMgdGhhdCBjYWxsIFJhaXNlSW50ZXJydXB0KCkgYXJlIG5vdworCSAqIHNlZWluZyB0aGUg bmV3IE15UGVuZGluZ0ludGVycnVwdHMgZGVzdGluYXRpb24uCisJICovCisJcGdfbWVtb3J5 X2JhcnJpZXIoKTsKKworCS8qIE1peCBpbiBhbnkgdW5oYW5kbGVkIGJpdHMgZnJvbSBMb2Nh bFBlbmRpbmdJbnRlcnJ1cHRzLiAqLworCXBnX2F0b21pY19mZXRjaF9vcl91MzIoTXlQZW5k aW5nSW50ZXJydXB0cywKKwkJCQkJCSAgIHBnX2F0b21pY19leGNoYW5nZV91MzIoJkxvY2Fs UGVuZGluZ0ludGVycnVwdHMsIDApKTsKK30KKworLyoKKyAqIFNldCBhbiBpbnRlcnJ1cHQg ZmxhZyBpbiB0aGlzIGJhY2tlbmQuCisgKgorICogTm90ZTogVGhpcyBpcyBjYWxsZWQgZnJv bSBzaWduYWwgaGFuZGxlcnMsIHNvIG5lZWRzIHRvIGJlIGFzeW5jLXNpZ25hbAorICogc2Fm ZSEKKyAqLwordm9pZAorUmFpc2VJbnRlcnJ1cHQoSW50ZXJydXB0TWFzayBpbnRlcnJ1cHRN YXNrKQoreworCXVpbnQzMgkJb2xkX3BlbmRpbmc7CisKKwlvbGRfcGVuZGluZyA9IHBnX2F0 b21pY19mZXRjaF9vcl91MzIoTXlQZW5kaW5nSW50ZXJydXB0cywgaW50ZXJydXB0TWFzayk7 CisKKwkvKgorCSAqIElmIHRoZSBwcm9jZXNzIGlzIGN1cnJlbnRseSBibG9ja2VkIHdhaXRp bmcgZm9yIGFuIGludGVycnVwdCB0byBhcnJpdmUsCisJICogYW5kIHRoZSBpbnRlcnJ1cHQg d2Fzbid0IGFscmVhZHkgcGVuZGluZywgd2FrZSBpdCB1cC4KKwkgKi8KKwlpZiAoKG9sZF9w ZW5kaW5nICYgKGludGVycnVwdE1hc2sgfCBTTEVFUElOR19PTl9JTlRFUlJVUFRTKSkgPT0g U0xFRVBJTkdfT05fSU5URVJSVVBUUykKKwkJV2FrZXVwTXlQcm9jKCk7Cit9CisKKy8qCisg KiBTZXQgYW4gaW50ZXJydXB0IGZsYWcgaW4gYW5vdGhlciBiYWNrZW5kLgorICoKKyAqIE5v dGU6IFRoaXMgY2FuIGFsc28gYmUgY2FsbGVkIGZyb20gdGhlIHBvc3RtYXN0ZXIsIHNvIGJl IGNhcmVmdWwgdG8gbm90CisgKiB0cnVzdCB0aGUgY29udGVudHMgb2Ygc2hhcmVkIG1lbW9y eS4KKyAqCisgKiBGSVhNRTogaXQncyBlYXN5IHRvIGFjY2lkZW50YWxseSBzd2FwIHRoZSBv cmRlciBvZiB0aGUgYXJncy4gIENvdWxkIHdlIGhhdmUKKyAqIHN0cmljdGVyIHR5cGUgY2hl Y2tpbmc/CisgKi8KK3ZvaWQKK1NlbmRJbnRlcnJ1cHQoSW50ZXJydXB0TWFzayBpbnRlcnJ1 cHRNYXNrLCBQcm9jTnVtYmVyIHBncHJvY25vKQoreworCVBHUFJPQwkgICAqcHJvYzsKKwl1 aW50MzIJCW9sZF9wZW5kaW5nOworCisJQXNzZXJ0KHBncHJvY25vICE9IElOVkFMSURfUFJP Q19OVU1CRVIpOworCUFzc2VydChwZ3Byb2NubyA+PSAwKTsKKwlBc3NlcnQocGdwcm9jbm8g PCBQcm9jR2xvYmFsLT5hbGxQcm9jQ291bnQpOworCisJcHJvYyA9ICZQcm9jR2xvYmFsLT5h bGxQcm9jc1twZ3Byb2Nub107CisJb2xkX3BlbmRpbmcgPSBwZ19hdG9taWNfZmV0Y2hfb3Jf dTMyKCZwcm9jLT5wZW5kaW5nSW50ZXJydXB0cywgaW50ZXJydXB0TWFzayk7CisKKwllbG9n KERFQlVHMSwgInNlbmRpbmcgaW50ZXJydXB0ICUwOHggdG8gcGlkICVkIiwgaW50ZXJydXB0 TWFzaywgcHJvYy0+cGlkKTsKKworCS8qCisJICogSWYgdGhlIHByb2Nlc3MgaXMgY3VycmVu dGx5IGJsb2NrZWQgd2FpdGluZyBmb3IgYW4gaW50ZXJydXB0IHRvIGFycml2ZSwKKwkgKiBh bmQgdGhlIGludGVycnVwdCB3YXNuJ3QgYWxyZWFkeSBwZW5kaW5nLCB3YWtlIGl0IHVwLgor CSAqLworCWlmICgob2xkX3BlbmRpbmcgJiAoaW50ZXJydXB0TWFzayB8IFNMRUVQSU5HX09O X0lOVEVSUlVQVFMpKSA9PSBTTEVFUElOR19PTl9JTlRFUlJVUFRTKQorCQlXYWtldXBPdGhl clByb2MocHJvYyk7Cit9CisKK3ZvaWQKK0luaXRpYWxpemVJbnRlcnJ1cHRXYWl0U2V0KHZv aWQpCit7CisJaW50CQkJaW50ZXJydXB0X3BvcyBQR19VU0VEX0ZPUl9BU1NFUlRTX09OTFk7 CisKKwlBc3NlcnQoSW50ZXJydXB0V2FpdFNldCA9PSBOVUxMKTsKKworCS8qIFNldCB1cCB0 aGUgV2FpdEV2ZW50U2V0IHVzZWQgYnkgV2FpdEludGVycnVwdCgpLiAqLworCUludGVycnVw dFdhaXRTZXQgPSBDcmVhdGVXYWl0RXZlbnRTZXQoTlVMTCwgMik7CisJaW50ZXJydXB0X3Bv cyA9IEFkZFdhaXRFdmVudFRvU2V0KEludGVycnVwdFdhaXRTZXQsIFdMX0lOVEVSUlVQVCwg UEdJTlZBTElEX1NPQ0tFVCwKKwkJCQkJCQkJCSAgMCwgTlVMTCk7CisJaWYgKElzVW5kZXJQ b3N0bWFzdGVyKQorCQlBZGRXYWl0RXZlbnRUb1NldChJbnRlcnJ1cHRXYWl0U2V0LCBXTF9F WElUX09OX1BNX0RFQVRILAorCQkJCQkJICBQR0lOVkFMSURfU09DS0VULCAwLCBOVUxMKTsK KworCUFzc2VydChpbnRlcnJ1cHRfcG9zID09IEludGVycnVwdFdhaXRTZXRJbnRlcnJ1cHRQ b3MpOworfQorCisvKgorICogV2FpdCBmb3IgYW55IG9mIHRoZSBpbnRlcnJ1cHRzIGluIGlu dGVycnVwdE1hc2sgdG8gYmUgc2V0LCBvciBmb3IKKyAqIHBvc3RtYXN0ZXIgZGVhdGgsIG9y IHVudGlsIHRpbWVvdXQgaXMgZXhjZWVkZWQuICd3YWtlRXZlbnRzJyBpcyBhIGJpdG1hc2sK KyAqIHRoYXQgc3BlY2lmaWVzIHdoaWNoIG9mIHRob3NlIGV2ZW50cyB0byB3YWl0IGZvci4g SWYgdGhlIGludGVycnVwdCBpcworICogYWxyZWFkeSBwZW5kaW5nIChhbmQgV0xfSU5URVJS VVBUIGlzIGdpdmVuKSwgdGhlIGZ1bmN0aW9uIHJldHVybnMKKyAqIGltbWVkaWF0ZWx5Lgor ICoKKyAqIFRoZSAidGltZW91dCIgaXMgZ2l2ZW4gaW4gbWlsbGlzZWNvbmRzLiBJdCBtdXN0 IGJlID49IDAgaWYgV0xfVElNRU9VVCBmbGFnCisgKiBpcyBnaXZlbi4gIEFsdGhvdWdoIGl0 IGlzIGRlY2xhcmVkIGFzICJsb25nIiwgd2UgZG9uJ3QgYWN0dWFsbHkgc3VwcG9ydAorICog dGltZW91dHMgbG9uZ2VyIHRoYW4gSU5UX01BWCBtaWxsaXNlY29uZHMuICBOb3RlIHRoYXQg c29tZSBleHRyYSBvdmVyaGVhZAorICogaXMgaW5jdXJyZWQgd2hlbiBXTF9USU1FT1VUIGlz IGdpdmVuLCBzbyBhdm9pZCB1c2luZyBhIHRpbWVvdXQgaWYgcG9zc2libGUuCisgKgorICog UmV0dXJucyBiaXQgbWFzayBpbmRpY2F0aW5nIHdoaWNoIGNvbmRpdGlvbihzKSBjYXVzZWQg dGhlIHdha2UtdXAuIE5vdGUKKyAqIHRoYXQgaWYgbXVsdGlwbGUgd2FrZS11cCBjb25kaXRp b25zIGFyZSB0cnVlLCB0aGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdAorICogd2UgcmV0dXJu IGFsbCBvZiB0aGVtIGluIG9uZSBjYWxsLCBidXQgd2Ugd2lsbCByZXR1cm4gYXQgbGVhc3Qg b25lLgorICovCitpbnQKK1dhaXRJbnRlcnJ1cHQoSW50ZXJydXB0TWFzayBpbnRlcnJ1cHRN YXNrLCBpbnQgd2FrZUV2ZW50cywgbG9uZyB0aW1lb3V0LAorCQkJICB1aW50MzIgd2FpdF9l dmVudF9pbmZvKQoreworCVdhaXRFdmVudAlldmVudDsKKworCS8qIFBvc3RtYXN0ZXItbWFu YWdlZCBjYWxsZXJzIG11c3QgaGFuZGxlIHBvc3RtYXN0ZXIgZGVhdGggc29tZWhvdy4gKi8K KwlBc3NlcnQoIUlzVW5kZXJQb3N0bWFzdGVyIHx8CisJCSAgICh3YWtlRXZlbnRzICYgV0xf RVhJVF9PTl9QTV9ERUFUSCkgfHwKKwkJICAgKHdha2VFdmVudHMgJiBXTF9QT1NUTUFTVEVS X0RFQVRIKSk7CisKKwkvKgorCSAqIFNvbWUgY2FsbGVycyBtYXkgaGF2ZSBhbiBpbnRlcnJ1 cHQgbWFzayBkaWZmZXJlbnQgZnJvbSBsYXN0IHRpbWUsIG9yIG5vCisJICogaW50ZXJydXB0 IG1hc2sgYXQgYWxsLCBvciB3YW50IHRvIGhhbmRsZSBwb3N0bWFzdGVyIGRlYXRoIGRpZmZl cmVudGx5LgorCSAqIEl0J3MgY2hlYXAgdG8gYXNzaWduIHRob3NlLCBzbyBqdXN0IGRvIGl0 IGV2ZXJ5IHRpbWUuCisJICovCisJaWYgKCEod2FrZUV2ZW50cyAmIFdMX0lOVEVSUlVQVCkp CisJCWludGVycnVwdE1hc2sgPSAwOworCU1vZGlmeVdhaXRFdmVudChJbnRlcnJ1cHRXYWl0 U2V0LCBJbnRlcnJ1cHRXYWl0U2V0SW50ZXJydXB0UG9zLAorCQkJCQlXTF9JTlRFUlJVUFQs IGludGVycnVwdE1hc2spOworCisJTW9kaWZ5V2FpdEV2ZW50KEludGVycnVwdFdhaXRTZXQs IEludGVycnVwdFdhaXRTZXRQb3N0bWFzdGVyRGVhdGhQb3MsCisJCQkJCSh3YWtlRXZlbnRz ICYgKFdMX0VYSVRfT05fUE1fREVBVEggfCBXTF9QT1NUTUFTVEVSX0RFQVRIKSksCisJCQkJ CTApOworCisJaWYgKFdhaXRFdmVudFNldFdhaXQoSW50ZXJydXB0V2FpdFNldCwKKwkJCQkJ CSAod2FrZUV2ZW50cyAmIFdMX1RJTUVPVVQpID8gdGltZW91dCA6IC0xLAorCQkJCQkJICZl dmVudCwgMSwKKwkJCQkJCSB3YWl0X2V2ZW50X2luZm8pID09IDApCisJCXJldHVybiBXTF9U SU1FT1VUOworCWVsc2UKKwkJcmV0dXJuIGV2ZW50LmV2ZW50czsKK30KKworLyoKKyAqIExp a2UgV2FpdEludGVycnVwdCwgYnV0IHdpdGggYW4gZXh0cmEgc29ja2V0IGFyZ3VtZW50IGZv ciBXTF9TT0NLRVRfKgorICogY29uZGl0aW9ucy4KKyAqCisgKiBXaGVuIHdhaXRpbmcgb24g YSBzb2NrZXQsIEVPRiBhbmQgZXJyb3IgY29uZGl0aW9ucyBhbHdheXMgY2F1c2UgdGhlIHNv Y2tldAorICogdG8gYmUgcmVwb3J0ZWQgYXMgcmVhZGFibGUvd3JpdGFibGUvY29ubmVjdGVk LCBzbyB0aGF0IHRoZSBjYWxsZXIgY2FuIGRlYWwKKyAqIHdpdGggdGhlIGNvbmRpdGlvbi4K KyAqCisgKiB3YWtlRXZlbnRzIG11c3QgaW5jbHVkZSBlaXRoZXIgV0xfRVhJVF9PTl9QTV9E RUFUSCBmb3IgYXV0b21hdGljIGV4aXQKKyAqIGlmIHRoZSBwb3N0bWFzdGVyIGRpZXMgb3Ig V0xfUE9TVE1BU1RFUl9ERUFUSCBmb3IgYSBmbGFnIHNldCBpbiB0aGUKKyAqIHJldHVybiB2 YWx1ZSBpZiB0aGUgcG9zdG1hc3RlciBkaWVzLiAgVGhlIGxhdHRlciBpcyB1c2VmdWwgZm9y IHJhcmUgY2FzZXMKKyAqIHdoZXJlIHNvbWUgYmVoYXZpb3Igb3RoZXIgdGhhbiBpbW1lZGlh dGUgZXhpdCBpcyBuZWVkZWQuCisgKgorICogTkI6IFRoZXNlIGRheXMgdGhpcyBpcyBqdXN0 IGEgd3JhcHBlciBhcm91bmQgdGhlIFdhaXRFdmVudFNldCBBUEkuIFdoZW4KKyAqIHVzaW5n IGFuIGludGVycnVwdCB2ZXJ5IGZyZXF1ZW50bHksIGNvbnNpZGVyIGNyZWF0aW5nIGEgbG9u Z2VyIGxpdmluZworICogV2FpdEV2ZW50U2V0IGluc3RlYWQ7IHRoYXQncyBtb3JlIGVmZmlj aWVudC4KKyAqLworaW50CitXYWl0SW50ZXJydXB0T3JTb2NrZXQoSW50ZXJydXB0TWFzayBp bnRlcnJ1cHRNYXNrLCBpbnQgd2FrZUV2ZW50cywgcGdzb2NrZXQgc29jaywKKwkJCQkJICBs b25nIHRpbWVvdXQsIHVpbnQzMiB3YWl0X2V2ZW50X2luZm8pCit7CisJaW50CQkJcmV0Owor CWludAkJCXJjOworCVdhaXRFdmVudAlldmVudDsKKwlXYWl0RXZlbnRTZXQgKnNldCA9IENy ZWF0ZVdhaXRFdmVudFNldChDdXJyZW50UmVzb3VyY2VPd25lciwgMyk7CisKKwlpZiAod2Fr ZUV2ZW50cyAmIFdMX1RJTUVPVVQpCisJCUFzc2VydCh0aW1lb3V0ID49IDApOworCWVsc2UK KwkJdGltZW91dCA9IC0xOworCisJaWYgKHdha2VFdmVudHMgJiBXTF9JTlRFUlJVUFQpCisJ CUFkZFdhaXRFdmVudFRvU2V0KHNldCwgV0xfSU5URVJSVVBULCBQR0lOVkFMSURfU09DS0VU LAorCQkJCQkJICBpbnRlcnJ1cHRNYXNrLCBOVUxMKTsKKworCS8qIFBvc3RtYXN0ZXItbWFu YWdlZCBjYWxsZXJzIG11c3QgaGFuZGxlIHBvc3RtYXN0ZXIgZGVhdGggc29tZWhvdy4gKi8K KwlBc3NlcnQoIUlzVW5kZXJQb3N0bWFzdGVyIHx8CisJCSAgICh3YWtlRXZlbnRzICYgV0xf RVhJVF9PTl9QTV9ERUFUSCkgfHwKKwkJICAgKHdha2VFdmVudHMgJiBXTF9QT1NUTUFTVEVS X0RFQVRIKSk7CisKKwlpZiAoKHdha2VFdmVudHMgJiBXTF9QT1NUTUFTVEVSX0RFQVRIKSAm JiBJc1VuZGVyUG9zdG1hc3RlcikKKwkJQWRkV2FpdEV2ZW50VG9TZXQoc2V0LCBXTF9QT1NU TUFTVEVSX0RFQVRILCBQR0lOVkFMSURfU09DS0VULAorCQkJCQkJICAwLCBOVUxMKTsKKwor CWlmICgod2FrZUV2ZW50cyAmIFdMX0VYSVRfT05fUE1fREVBVEgpICYmIElzVW5kZXJQb3N0 bWFzdGVyKQorCQlBZGRXYWl0RXZlbnRUb1NldChzZXQsIFdMX0VYSVRfT05fUE1fREVBVEgs IFBHSU5WQUxJRF9TT0NLRVQsCisJCQkJCQkgIDAsIE5VTEwpOworCisJaWYgKHdha2VFdmVu dHMgJiBXTF9TT0NLRVRfTUFTSykKKwl7CisJCWludAkJCWV2OworCisJCWV2ID0gd2FrZUV2 ZW50cyAmIFdMX1NPQ0tFVF9NQVNLOworCQlBZGRXYWl0RXZlbnRUb1NldChzZXQsIGV2LCBz b2NrLCAwLCBOVUxMKTsKKwl9CisKKwlyYyA9IFdhaXRFdmVudFNldFdhaXQoc2V0LCB0aW1l b3V0LCAmZXZlbnQsIDEsIHdhaXRfZXZlbnRfaW5mbyk7CisJaWYgKHJjID09IDApCisJCXJl dCA9IFdMX1RJTUVPVVQ7CisJZWxzZQorCXsKKwkJcmV0ID0gZXZlbnQuZXZlbnRzICYgKFdM X0lOVEVSUlVQVCB8CisJCQkJCQkJICBXTF9QT1NUTUFTVEVSX0RFQVRIIHwKKwkJCQkJCQkg IFdMX1NPQ0tFVF9NQVNLKTsKKwl9CisKKwlGcmVlV2FpdEV2ZW50U2V0KHNldCk7CisKKwly ZXR1cm4gcmV0OworfQorCisvKgorICogVGhpcyBpcyB1c2VkIGFzIHRoZSBJTlRFUlJVUFRf VEVSTUlOQVRFIGhhbmRsZXIgaW4gYXV4IHByb2Nlc3NlcyB0aGF0IHdhbnQKKyAqIHRvIGp1 c3QgZXhpdCBpbW1lZGlhdGVseS4KKyAqLwordm9pZAorUHJvY2Vzc0F1eFByb2Nlc3NTaHV0 ZG93bkludGVycnVwdCh2b2lkKQoreworCXByb2NfZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2lwYy9tZXNvbi5idWlsZCBiL3NyYy9iYWNrZW5kL2lwYy9tZXNvbi5i dWlsZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMWY2OThiZDBj NjgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9pcGMvbWVzb24uYnVpbGQKQEAg LTAsMCArMSw2IEBACisjIENvcHlyaWdodCAoYykgMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwg RGV2ZWxvcG1lbnQgR3JvdXAKKworYmFja2VuZF9zb3VyY2VzICs9IGZpbGVzKAorICAnaW50 ZXJydXB0LmMnLAorICAnc2lnbmFsX2hhbmRsZXJzLmMnLAorKQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvaXBjL3NpZ25hbF9oYW5kbGVycy5jIGIvc3JjL2JhY2tlbmQvaXBjL3NpZ25h bF9oYW5kbGVycy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5m OTQ3M2Q3NDhlZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2lwYy9zaWduYWxf aGFuZGxlcnMuYwpAQCAtMCwwICsxLDE1NSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg KgorICogc2lnbmFsX2hhbmRsZXJzLmMKKyAqCSAgU3RhbmRhcmQgc2lnbmFsIGhhbmRsZXJz LgorICoKKyAqIFRoZXNlIGp1c3QgcmFpc2UgdGhlIGNvcnJlc3BvbmRpbmcgSU5URVJSVVBU XyogZmxhZ3M6CisgKgorICogU0lHSFVQIC0+ICByZXF1ZXN0IGNvbmZpZyByZWxvYWQKKyAq IFNJR0lOVCA9PSBxdWVyeSBjYW5jZWwKKyAqIFNJR1RFUk0gPT0gZ3JhY2VmdWwgdGVybWlu YXRlIG9mIHRoZSBwcm9jZXNzCisgKiBTSUdRVUlUID09IGV4aXQgaW1tZWRpYXRlbHkgKGNh dXNlcyBjcmFzaCByZXN0YXJ0KQorICoKKyAqIFhYWDogV2Ugc2hvdWxkIG5vdCBzZW5kIHNp Z25hbHMgZGlyZWN0bHkgYmV0d2VlbiBwcm9jZXNzZXMgYW55bW9yZS4gVXNlCisgKiBTZW5k SW50ZXJydXB0IGluc3RlYWQuCisgKgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykg MTk5Ni0yMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9y dGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9m IENhbGlmb3JuaWEKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9p cGMvc2lnbmFsX2hhbmRsZXJzLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwor CisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5j bHVkZSAiaXBjL2ludGVycnVwdC5oIgorI2luY2x1ZGUgImlwYy9zaWduYWxfaGFuZGxlcnMu aCIKKyNpbmNsdWRlICJsaWJwcS9wcXNpZ25hbC5oIgorCisvKgorICogU2V0IHRoZSBzdGFu ZGFyZCBzaWduYWwgaGFuZGxlcnMgc3VpdGFibGUgZm9yIG1vc3QgcG9zdG1hc3RlciBjaGls ZAorICogcHJvY2Vzc2VzLgorICoKKyAqIE5vdGU6IHRoaXMgZG9lc24ndCB1bmJsb2NrIHRo ZSBzaWduYWxzIHlldC4gWW91IGNhbiBtYWtlIGFkZGl0aW9uYWwKKyAqIHBxc2lnbmFsKCkg Y2FsbHMgdG8gbW9kaWZ5IHRoZSBkZWZhdWx0IGJlaGF2aW9yIGJlZm9yZSB1bmJsb2NraW5n LgorICovCit2b2lkCitTZXRQb3N0bWFzdGVyQ2hpbGRTaWduYWxIYW5kbGVycyh2b2lkKQor eworCS8qLS0tLS0tLS0tLQorCSAqIFRoZXNlIHJhaXNlIHRoZSBjb3JyZXNwb25kaW5nIGlu dGVycnVwdHMgaW4gdGhlIHByb2Nlc3M6CisJICoKKwkgKiBTSUdIVVAgLT4gSU5URVJSVVBU X0NPTkZJR19SRUxPQUQKKwkgKiBTSUdJTlQgLT4gSU5URVJSVVBUX1FVRVJZX0NBTkNFTAor CSAqIFNJR1RFUk0gLT4gSU5URVJSVVBUX1RFUk1JTkFURQorCSAqLworCXBxc2lnbmFsKFNJ R0hVUCwgU2lnbmFsSGFuZGxlckZvckNvbmZpZ1JlbG9hZCk7CisJcHFzaWduYWwoU0lHSU5U LCBTaWduYWxIYW5kbGVyRm9yUXVlcnlDYW5jZWwpOworCXBxc2lnbmFsKFNJR1RFUk0sIFNp Z25hbEhhbmRsZXJGb3JTaHV0ZG93blJlcXVlc3QpOworCisJcHFzaWduYWwoU0lHUElQRSwg U0lHX0lHTik7CisJcHFzaWduYWwoU0lHVVNSMSwgU0lHX0lHTik7CisKKwkvKgorCSAqIFNJ R1VTUjIgaXMgb3ZlcnJpZGRlbiBpbiBzb21lIHByb2Nlc3Nlcy4gRklYTUU6IGJ1dCB0aGV5 IHByb2JhYmx5CisJICogc2hvdWxkIHVzZSBpbnRlcnJ1cHRzIG5vdworCSAqLworCXBxc2ln bmFsKFNJR1VTUjIsIFNJR19JR04pOworCisJLyogRklYTUU6IHNob3VsZCB3ZSBkbyB0aGlz IGluIGFsbCBwcm9jZXNzZXM/ICovCisJLyogcHFzaWduYWwoU0lHRlBFLCBGbG9hdEV4Y2Vw dGlvbkhhbmRsZXIpOyAqLworCisJLyogRklYTUU6IHdoeSBib3RoZXI/IFRoaXMgaXMgYWxz byBTSUdfSUdOIGluIHBvc3RtYXN0ZXIgKi8KKwlwcXNpZ25hbChTSUdBTFJNLCBTSUdfSUdO KTsKKwkvKiBGSVhNRTplc3RhYmxpc2hlZCBpbiBJbml0aWFsaXplVGltZW91dHMgKi8KKwor CS8qIFNJR1VSRyBpcyBoYW5kbGVkIGluIHdhaXRldmVudHNldC5jICovCisKKwkvKgorCSAq IFJlc2V0IHNpZ25hbHMgdGhhdCBhcmUgdXNlZCBieSBwb3N0bWFzdGVyIGJ1dCBub3QgYnkg Y2hpbGQgcHJvY2Vzc2VzLgorCSAqCisJICogQ3VycmVudGx5IGp1c3QgU0lHQ0hMRC4gIFRo ZSBoYW5kbGVycyBmb3Igb3RoZXIgc2lnbmFscyBhcmUgb3ZlcnJpZGRlbgorCSAqIGxhdGVy LCBkZXBlbmRpbmcgb24gdGhlIGNoaWxkIHByb2Nlc3MgdHlwZS4KKwkgKi8KKwlwcXNpZ25h bChTSUdDSExELCBTSUdfREZMKTsgLyogc3lzdGVtKCkgcmVxdWlyZXMgdGhpcyB0byBiZSBT SUdfREZMIHJhdGhlcgorCQkJCQkJCQkgKiB0aGFuIFNJR19JR04gb24gc29tZSBwbGF0Zm9y bXMgKi8KKworCS8qCisJICogRXZlcnkgcG9zdG1hc3RlciBjaGlsZCBwcm9jZXNzIGlzIGV4 cGVjdGVkIHRvIHJlc3BvbmQgcHJvbXB0bHkgdG8KKwkgKiBTSUdRVUlUIGF0IGFsbCB0aW1l cy4gIFRoZXJlZm9yZSB3ZSBjZW50cmFsbHkgcmVtb3ZlIFNJR1FVSVQgZnJvbQorCSAqIEJs b2NrU2lnIGFuZCBpbnN0YWxsIGEgc3VpdGFibGUgc2lnbmFsIGhhbmRsZXIuICAoQ2xpZW50 LWZhY2luZworCSAqIHByb2Nlc3NlcyBtYXkgY2hvb3NlIHRvIHJlcGxhY2UgdGhpcyBkZWZh dWx0IGNob2ljZSBvZiBoYW5kbGVyIHdpdGgKKwkgKiBxdWlja2RpZSgpLikgIEFsbCBvdGhl ciBibG9ja2FibGUgc2lnbmFscyByZW1haW4gYmxvY2tlZCBmb3Igbm93LgorCSAqLworCXBx c2lnbmFsKFNJR1FVSVQsIFNpZ25hbEhhbmRsZXJGb3JDcmFzaEV4aXQpOworCisJc2lnZGVs c2V0KCZCbG9ja1NpZywgU0lHUVVJVCk7CisJc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZC bG9ja1NpZywgTlVMTCk7Cit9CisKKy8qCisgKiBTaW1wbGUgc2lnbmFsIGhhbmRsZXIgZm9y IHRyaWdnZXJpbmcgYSBjb25maWd1cmF0aW9uIHJlbG9hZC4KKyAqCisgKiBOb3JtYWxseSwg dGhpcyBoYW5kbGVyIHdvdWxkIGJlIHVzZWQgZm9yIFNJR0hVUC4gVGhlIGlkZWEgaXMgdGhh dCBjb2RlCisgKiB3aGljaCB1c2VzIGl0IHdvdWxkIGFycmFuZ2UgdG8gY2hlY2sgdGhlIElO VEVSUlVQVF9DT05GSUdfUkVMT0FEIGludGVycnVwdAorICogYXQgY29udmVuaWVudCBwbGFj ZXMgaW5zaWRlIG1haW4gbG9vcHMuCisgKi8KK3ZvaWQKK1NpZ25hbEhhbmRsZXJGb3JDb25m aWdSZWxvYWQoU0lHTkFMX0FSR1MpCit7CisJUmFpc2VJbnRlcnJ1cHQoSU5URVJSVVBUX0NP TkZJR19SRUxPQUQpOworfQorCisvKgorICogU2ltcGxlIHNpZ25hbCBoYW5kbGVyIGZvciBl eGl0aW5nIHF1aWNrbHkgYXMgaWYgZHVlIHRvIGEgY3Jhc2guCisgKgorICogTm9ybWFsbHks IHRoaXMgd291bGQgYmUgdXNlZCBmb3IgaGFuZGxpbmcgU0lHUVVJVC4KKyAqLwordm9pZAor U2lnbmFsSGFuZGxlckZvckNyYXNoRXhpdChTSUdOQUxfQVJHUykKK3sKKwkvKgorCSAqIFdl IERPIE5PVCB3YW50IHRvIHJ1biBwcm9jX2V4aXQoKSBvciBhdGV4aXQoKSBjYWxsYmFja3Mg LS0gd2UncmUgaGVyZQorCSAqIGJlY2F1c2Ugc2hhcmVkIG1lbW9yeSBtYXkgYmUgY29ycnVw dGVkLCBzbyB3ZSBkb24ndCB3YW50IHRvIHRyeSB0bworCSAqIGNsZWFuIHVwIG91ciB0cmFu c2FjdGlvbi4gIEp1c3QgbmFpbCB0aGUgd2luZG93cyBzaHV0IGFuZCBnZXQgb3V0IG9mCisJ ICogdG93bi4gIFRoZSBjYWxsYmFja3Mgd291bGRuJ3QgYmUgc2FmZSB0byBydW4gZnJvbSBh IHNpZ25hbCBoYW5kbGVyLAorCSAqIGFueXdheS4KKwkgKgorCSAqIE5vdGUgd2UgZG8gX2V4 aXQoMikgbm90IF9leGl0KDApLiAgVGhpcyBpcyB0byBmb3JjZSB0aGUgcG9zdG1hc3RlciBp bnRvCisJICogYSBzeXN0ZW0gcmVzZXQgY3ljbGUgaWYgc29tZW9uZSBzZW5kcyBhIG1hbnVh bCBTSUdRVUlUIHRvIGEgcmFuZG9tCisJICogYmFja2VuZC4gIFRoaXMgaXMgbmVjZXNzYXJ5 IHByZWNpc2VseSBiZWNhdXNlIHdlIGRvbid0IGNsZWFuIHVwIG91cgorCSAqIHNoYXJlZCBt ZW1vcnkgc3RhdGUuICAoVGhlICJkZWFkIG1hbiBzd2l0Y2giIG1lY2hhbmlzbSBpbiBwbXNp Z25hbC5jCisJICogc2hvdWxkIGVuc3VyZSB0aGUgcG9zdG1hc3RlciBzZWVzIHRoaXMgYXMg YSBjcmFzaCwgdG9vLCBidXQgbm8gaGFybSBpbgorCSAqIGJlaW5nIGRvdWJseSBzdXJlLikK KwkgKi8KKwlfZXhpdCgyKTsKK30KKworLyoKKyAqIFNpbXBsZSBzaWduYWwgaGFuZGxlciBm b3IgdHJpZ2dlcmluZyBhIGxvbmctcnVubmluZyBwcm9jZXNzIHRvIHNodXQgZG93bgorICog YW5kIGV4aXQuCisgKgorICogVHlwaWNhbGx5LCB0aGlzIGhhbmRsZXIgd291bGQgYmUgdXNl ZCBmb3IgU0lHVEVSTSwgYnV0IHNvbWUgcHJvY2Vzc2VzIHVzZQorICogb3RoZXIgc2lnbmFs cy4gSW4gcGFydGljdWxhciwgdGhlIGNoZWNrcG9pbnRlciBhbmQgcGFyYWxsZWwgYXBwbHkg d29ya2VyCisgKiBleGl0IG9uIFNJR1VTUjIsIGFuZCB0aGUgV0FMIHdyaXRlciBleGl0cyBv biBlaXRoZXIgU0lHSU5UIG9yIFNJR1RFUk0uCisgKiAoRklYTUU6IGNoZWNrIGlmIHRoYXQn cyBzdGlsbCBhY2N1cmF0ZSkKKyAqLwordm9pZAorU2lnbmFsSGFuZGxlckZvclNodXRkb3du UmVxdWVzdChTSUdOQUxfQVJHUykKK3sKKwlSYWlzZUludGVycnVwdChJTlRFUlJVUFRfVEVS TUlOQVRFKTsKK30KKworLyoKKyAqIFF1ZXJ5LWNhbmNlbCBzaWduYWw6IGFib3J0IGN1cnJl bnQgdHJhbnNhY3Rpb24gYXQgc29vbmVzdCBjb252ZW5pZW50IHRpbWUKKyAqLwordm9pZAor U2lnbmFsSGFuZGxlckZvclF1ZXJ5Q2FuY2VsKFNJR05BTF9BUkdTKQoreworCVJhaXNlSW50 ZXJydXB0KElOVEVSUlVQVF9RVUVSWV9DQU5DRUwpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvbGlicHEvYXV0aC5jIGIvc3JjL2JhY2tlbmQvbGlicHEvYXV0aC5jCmluZGV4IDc5 NWJmZWQ4ZDE5Li4zMTRkMzRhOTU5MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbGlicHEv YXV0aC5jCisrKyBiL3NyYy9iYWNrZW5kL2xpYnBxL2F1dGguYwpAQCAtMTY3Myw4ICsxNjcz LDkgQEAgaW50ZXJwcmV0X2lkZW50X3Jlc3BvbnNlKGNvbnN0IGNoYXIgKmlkZW50X3Jlc3Bv bnNlLAogICoJb3ducyB0aGUgdGNwIGNvbm5lY3Rpb24gdG8gImxvY2FsX2FkZHIiCiAgKglJ ZiB0aGUgdXNlcm5hbWUgaXMgc3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCwgY2hlY2sgdGhlIHVz ZXJtYXAuCiAgKgotICoJWFhYOiBVc2luZyBXYWl0TGF0Y2hPclNvY2tldCgpIGFuZCBkb2lu ZyBhIENIRUNLX0ZPUl9JTlRFUlJVUFRTKCkgaWYgdGhlCi0gKglsYXRjaCB3YXMgc2V0IHdv dWxkIGltcHJvdmUgdGhlIHJlc3BvbnNpdmVuZXNzIHRvIHRpbWVvdXRzL2NhbmNlbGxhdGlv bnMuCisgKglYWFg6IFVzaW5nIFdhaXRJbnRlcnJ1cHRPclNvY2tldCgpIGFuZCBkb2luZyBh IENIRUNLX0ZPUl9JTlRFUlJVUFRTKCkKKyAqCWlmIHRoZSBpbnRlcnJ1cHQgd2FzIHBlbmRp bmcgd291bGQgaW1wcm92ZSB0aGUgcmVzcG9uc2l2ZW5lc3MgdG8KKyAqCXRpbWVvdXRzL2Nh bmNlbGxhdGlvbnMuCiAgKi8KIHN0YXRpYyBpbnQKIGlkZW50X2luZXQoUG9ydCAqcG9ydCkK QEAgLTMxMDgsOCArMzEwOSw4IEBAIFBlcmZvcm1SYWRpdXNUcmFuc2FjdGlvbihjb25zdCBj aGFyICpzZXJ2ZXIsIGNvbnN0IGNoYXIgKnNlY3JldCwgY29uc3QgY2hhciAqcG9yCiAJICog cGFja2V0cyB0byBvdXIgcG9ydCB0aHVzIGNhdXNpbmcgdXMgdG8gcmV0cnkgaW4gYSBsb29w IGFuZCBuZXZlciB0aW1lCiAJICogb3V0LgogCSAqCi0JICogWFhYOiBVc2luZyBXYWl0TGF0 Y2hPclNvY2tldCgpIGFuZCBkb2luZyBhIENIRUNLX0ZPUl9JTlRFUlJVUFRTKCkgaWYKLQkg KiB0aGUgbGF0Y2ggd2FzIHNldCB3b3VsZCBpbXByb3ZlIHRoZSByZXNwb25zaXZlbmVzcyB0 bworCSAqIFhYWDogVXNpbmcgV2FpdEludGVycnVwdE9yU29ja2V0KCkgYW5kIGRvaW5nIGEg Q0hFQ0tfRk9SX0lOVEVSUlVQVFMoKQorCSAqIGlmIHRoZSBpbnRlcnJ1cHQgd2FzIHBlbmRp bmcgd291bGQgaW1wcm92ZSB0aGUgcmVzcG9uc2l2ZW5lc3MgdG8KIAkgKiB0aW1lb3V0cy9j YW5jZWxsYXRpb25zLgogCSAqLwogCWdldHRpbWVvZmRheSgmZW5kdGltZSwgTlVMTCk7CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9saWJwcS9iZS1zZWN1cmUtZ3NzYXBpLmMgYi9zcmMv YmFja2VuZC9saWJwcS9iZS1zZWN1cmUtZ3NzYXBpLmMKaW5kZXggZGY3ZGM3OWI4MjcuLjFh NjBjYThmNzhhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9saWJwcS9iZS1zZWN1cmUtZ3Nz YXBpLmMKKysrIGIvc3JjL2JhY2tlbmQvbGlicHEvYmUtc2VjdXJlLWdzc2FwaS5jCkBAIC0x NSw2ICsxNSw3IEBACiAKICNpbmNsdWRlIDx1bmlzdGQuaD4KIAorI2luY2x1ZGUgImlwYy9p bnRlcnJ1cHQuaCIKICNpbmNsdWRlICJsaWJwcS9hdXRoLmgiCiAjaW5jbHVkZSAibGlicHEv YmUtZ3NzYXBpLWNvbW1vbi5oIgogI2luY2x1ZGUgImxpYnBxL2xpYnBxLmgiCkBAIC00MjEs NyArNDIyLDcgQEAgYmVfZ3NzYXBpX3JlYWQoUG9ydCAqcG9ydCwgdm9pZCAqcHRyLCBzaXpl X3QgbGVuKQogCiAvKgogICogUmVhZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBieXRlcyBv ZmYgdGhlIHdpcmUsIHdhaXRpbmcgdXNpbmcKLSAqIFdhaXRMYXRjaE9yU29ja2V0IGlmIHdl IHdvdWxkIGJsb2NrLgorICogV2FpdEludGVycnVwdE9yU29ja2V0IGlmIHdlIHdvdWxkIGJs b2NrLgogICoKICAqIFJlc3VsdHMgYXJlIHJlYWQgaW50byBQcUdTU1JlY3ZCdWZmZXIuCiAg KgpAQCAtNDU3LDkgKzQ1OCw4IEBAIHJlYWRfb3Jfd2FpdChQb3J0ICpwb3J0LCBzc2l6ZV90 IGxlbikKIAkJICovCiAJCWlmIChyZXQgPD0gMCkKIAkJewotCQkJV2FpdExhdGNoT3JTb2Nr ZXQoTlVMTCwKLQkJCQkJCQkgIFdMX1NPQ0tFVF9SRUFEQUJMRSB8IFdMX0VYSVRfT05fUE1f REVBVEgsCi0JCQkJCQkJICBwb3J0LT5zb2NrLCAwLCBXQUlUX0VWRU5UX0dTU19PUEVOX1NF UlZFUik7CisJCQlXYWl0SW50ZXJydXB0T3JTb2NrZXQoMCwgV0xfU09DS0VUX1JFQURBQkxF IHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwKKwkJCQkJCQkJICBwb3J0LT5zb2NrLCAwLCBXQUlU X0VWRU5UX0dTU19PUEVOX1NFUlZFUik7CiAKIAkJCS8qCiAJCQkgKiBJZiB3ZSBnb3QgYmFj ayB6ZXJvIGJ5dGVzLCBhbmQgdGhlbiB3YWl0ZWQgb24gdGhlIHNvY2tldCB0byBiZQpAQCAt NDk2LDcgKzQ5Niw3IEBAIHJlYWRfb3Jfd2FpdChQb3J0ICpwb3J0LCBzc2l6ZV90IGxlbikK ICAqCiAgKiBOb3RlIHRoYXQgdW5saWtlIHRoZSBiZV9nc3NhcGlfcmVhZC9iZV9nc3NhcGlf d3JpdGUgZnVuY3Rpb25zLCB0aGlzCiAgKiBmdW5jdGlvbiBXSUxMIGJsb2NrIG9uIHRoZSBz b2NrZXQgdG8gYmUgcmVhZHkgZm9yIHJlYWQvd3JpdGUgKHVzaW5nCi0gKiBXYWl0TGF0Y2hP clNvY2tldCkgYXMgYXBwcm9wcmlhdGUgd2hpbGUgZXN0YWJsaXNoaW5nIHRoZSBHU1NBUEkK KyAqIFdhaXRJbnRlcnJ1cHRPclNvY2tldCkgYXMgYXBwcm9wcmlhdGUgd2hpbGUgZXN0YWJs aXNoaW5nIHRoZSBHU1NBUEkKICAqIHNlc3Npb24uCiAgKi8KIHNzaXplX3QKQEAgLTY3OCw5 ICs2NzgsOCBAQCBzZWN1cmVfb3Blbl9nc3NhcGkoUG9ydCAqcG9ydCkKIAkJCQkvKiBXYWl0 IGFuZCByZXRyeSBpZiB3ZSBjb3VsZG4ndCB3cml0ZSB5ZXQgKi8KIAkJCQlpZiAocmV0IDw9 IDApCiAJCQkJewotCQkJCQlXYWl0TGF0Y2hPclNvY2tldChOVUxMLAotCQkJCQkJCQkJICBX TF9TT0NLRVRfV1JJVEVBQkxFIHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwKLQkJCQkJCQkJCSAg cG9ydC0+c29jaywgMCwgV0FJVF9FVkVOVF9HU1NfT1BFTl9TRVJWRVIpOworCQkJCQlXYWl0 SW50ZXJydXB0T3JTb2NrZXQoMCwgV0xfU09DS0VUX1dSSVRFQUJMRSB8IFdMX0VYSVRfT05f UE1fREVBVEgsCisJCQkJCQkJCQkJICBwb3J0LT5zb2NrLCAwLCBXQUlUX0VWRU5UX0dTU19P UEVOX1NFUlZFUik7CiAJCQkJCWNvbnRpbnVlOwogCQkJCX0KIApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvbGlicHEvYmUtc2VjdXJlLW9wZW5zc2wuYyBiL3NyYy9iYWNrZW5kL2xpYnBx L2JlLXNlY3VyZS1vcGVuc3NsLmMKaW5kZXggNGRhNmFjMjJmZjkuLjNhMGZmOTU2ODIzIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9saWJwcS9iZS1zZWN1cmUtb3BlbnNzbC5jCisrKyBi L3NyYy9iYWNrZW5kL2xpYnBxL2JlLXNlY3VyZS1vcGVuc3NsLmMKQEAgLTI4LDExICsyOCwx MiBAQAogI2luY2x1ZGUgPGFycGEvaW5ldC5oPgogCiAjaW5jbHVkZSAiY29tbW9uL3N0cmlu Zy5oIgorI2luY2x1ZGUgImlwYy9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJsaWJwcS9saWJw cS5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgogI2lu Y2x1ZGUgInN0b3JhZ2UvZmQuaCIKLSNpbmNsdWRlICJzdG9yYWdlL2xhdGNoLmgiCisjaW5j bHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9ndWMuaCIKICNpbmNs dWRlICJ1dGlscy9tZW11dGlscy5oIgogCkBAIC01MzMsOCArNTM0LDggQEAgYWxvb3A6CiAJ CQkJZWxzZQogCQkJCQl3YWl0Zm9yID0gV0xfU09DS0VUX1dSSVRFQUJMRSB8IFdMX0VYSVRf T05fUE1fREVBVEg7CiAKLQkJCQkodm9pZCkgV2FpdExhdGNoT3JTb2NrZXQoTlVMTCwgd2Fp dGZvciwgcG9ydC0+c29jaywgMCwKLQkJCQkJCQkJCQkgV0FJVF9FVkVOVF9TU0xfT1BFTl9T RVJWRVIpOworCQkJCSh2b2lkKSBXYWl0SW50ZXJydXB0T3JTb2NrZXQoMCwgd2FpdGZvciwg cG9ydC0+c29jaywgMCwKKwkJCQkJCQkJCQkJIFdBSVRfRVZFTlRfU1NMX09QRU5fU0VSVkVS KTsKIAkJCQlnb3RvIGFsb29wOwogCQkJY2FzZSBTU0xfRVJST1JfU1lTQ0FMTDoKIAkJCQlp ZiAociA8IDAgJiYgZXJybm8gIT0gMCkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2xpYnBx L2JlLXNlY3VyZS5jIGIvc3JjL2JhY2tlbmQvbGlicHEvYmUtc2VjdXJlLmMKaW5kZXggM2Y5 MjU3YWIwMTAuLjhhYmFmYTY0OWI3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9saWJwcS9i ZS1zZWN1cmUuYworKysgYi9zcmMvYmFja2VuZC9saWJwcS9iZS1zZWN1cmUuYwpAQCAtMjcs OCArMjcsOCBAQAogI2luY2x1ZGUgPG5ldGluZXQvdGNwLmg+CiAjaW5jbHVkZSA8YXJwYS9p bmV0Lmg+CiAKKyNpbmNsdWRlICJpcGMvaW50ZXJydXB0LmgiCiAjaW5jbHVkZSAibGlicHEv bGlicHEuaCIKLSNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJ0Y29wL3Rjb3Bw cm90LmgiCiAjaW5jbHVkZSAidXRpbHMvaW5qZWN0aW9uX3BvaW50LmgiCiAjaW5jbHVkZSAi dXRpbHMvd2FpdF9ldmVudC5oIgpAQCAtMTc0LDYgKzE3NCw5IEBAIHNlY3VyZV9jbG9zZShQ b3J0ICpwb3J0KQogCiAvKgogICoJUmVhZCBkYXRhIGZyb20gYSBzZWN1cmUgY29ubmVjdGlv bi4KKyAqCisgKiBJbiBibG9ja2luZyBtb2RlLCB3aWxsIHByb2Nlc3MgYW55IGludGVycnVw dHMgdGhhdCBhcnJpdmUgd2hpbGUgd2UncmUKKyAqIHdhaXRpbmcuCiAgKi8KIHNzaXplX3QK IHNlY3VyZV9yZWFkKFBvcnQgKnBvcnQsIHZvaWQgKnB0ciwgc2l6ZV90IGxlbikKQEAgLTE4 MSw5ICsxODQsNiBAQCBzZWN1cmVfcmVhZChQb3J0ICpwb3J0LCB2b2lkICpwdHIsIHNpemVf dCBsZW4pCiAJc3NpemVfdAkJbjsKIAlpbnQJCQl3YWl0Zm9yOwogCi0JLyogRGVhbCB3aXRo IGFueSBhbHJlYWR5LXBlbmRpbmcgaW50ZXJydXB0IGNvbmRpdGlvbi4gKi8KLQlQcm9jZXNz Q2xpZW50UmVhZEludGVycnVwdChmYWxzZSk7Ci0KIHJldHJ5OgogI2lmZGVmIFVTRV9TU0wK IAl3YWl0Zm9yID0gMDsKQEAgLTIxMyw3ICsyMTMsOCBAQCByZXRyeToKIAogCQlBc3NlcnQo d2FpdGZvcik7CiAKLQkJTW9kaWZ5V2FpdEV2ZW50KEZlQmVXYWl0U2V0LCBGZUJlV2FpdFNl dFNvY2tldFBvcywgd2FpdGZvciwgTlVMTCk7CisJCU1vZGlmeVdhaXRFdmVudChGZUJlV2Fp dFNldCwgRmVCZVdhaXRTZXRTb2NrZXRQb3MsIHdhaXRmb3IsIDApOworCQlNb2RpZnlXYWl0 RXZlbnQoRmVCZVdhaXRTZXQsIEZlQmVXYWl0U2V0SW50ZXJydXB0UG9zLCBXTF9JTlRFUlJV UFQsIENoZWNrRm9ySW50ZXJydXB0c01hc2spOwogCiAJCVdhaXRFdmVudFNldFdhaXQoRmVC ZVdhaXRTZXQsIC0xIC8qIG5vIHRpbWVvdXQgKi8gLCAmZXZlbnQsIDEsCiAJCQkJCQkgV0FJ VF9FVkVOVF9DTElFTlRfUkVBRCk7CkBAIC0yMjgsMjMgKzIyOSwyMiBAQCByZXRyeToKIAkJ ICogbmV3IGNvbm5lY3Rpb25zIGNhbiBiZSBhY2NlcHRlZC4gIEV4aXRpbmcgY2xlYXJzIHRo ZSBkZWNrIGZvciBhCiAJCSAqIHBvc3RtYXN0ZXIgcmVzdGFydC4KIAkJICoKLQkJICogKE5v dGUgdGhhdCB3ZSBvbmx5IG1ha2UgdGhpcyBjaGVjayB3aGVuIHdlIHdvdWxkIG90aGVyd2lz ZSBzbGVlcCBvbgotCQkgKiBvdXIgbGF0Y2guICBXZSBtaWdodCBzdGlsbCBjb250aW51ZSBy dW5uaW5nIGZvciBhIHdoaWxlIGlmIHRoZQotCQkgKiBwb3N0bWFzdGVyIGlzIGtpbGxlZCBp biBtaWQtcXVlcnksIG9yIGV2ZW4gdGhyb3VnaCBtdWx0aXBsZSBxdWVyaWVzCi0JCSAqIGlm IHdlIG5ldmVyIGhhdmUgdG8gd2FpdCBmb3IgcmVhZC4gIFdlIGRvbid0IHdhbnQgdG8gYnVy biB0b28gbWFueQotCQkgKiBjeWNsZXMgY2hlY2tpbmcgZm9yIHRoaXMgdmVyeSByYXJlIGNv bmRpdGlvbiwgYW5kIHRoaXMgc2hvdWxkIGNhdXNlCi0JCSAqIHVzIHRvIGV4aXQgcXVpY2ts eSBpbiBtb3N0IGNhc2VzLikKKwkJICogKE5vdGUgdGhhdCB3ZSBvbmx5IG1ha2UgdGhpcyBj aGVjayB3aGVuIHdlIHdvdWxkIG90aGVyd2lzZSBzbGVlcAorCQkgKiB3YWl0aW5nIGZvciBp bnRlcnJ1cHQuICBXZSBtaWdodCBzdGlsbCBjb250aW51ZSBydW5uaW5nIGZvciBhIHdoaWxl CisJCSAqIGlmIHRoZSBwb3N0bWFzdGVyIGlzIGtpbGxlZCBpbiBtaWQtcXVlcnksIG9yIGV2 ZW4gdGhyb3VnaCBtdWx0aXBsZQorCQkgKiBxdWVyaWVzIGlmIHdlIG5ldmVyIGhhdmUgdG8g d2FpdCBmb3IgcmVhZC4gIFdlIGRvbid0IHdhbnQgdG8gYnVybgorCQkgKiB0b28gbWFueSBj eWNsZXMgY2hlY2tpbmcgZm9yIHRoaXMgdmVyeSByYXJlIGNvbmRpdGlvbiwgYW5kIHRoaXMK KwkJICogc2hvdWxkIGNhdXNlIHVzIHRvIGV4aXQgcXVpY2tseSBpbiBtb3N0IGNhc2VzLikK IAkJICovCiAJCWlmIChldmVudC5ldmVudHMgJiBXTF9QT1NUTUFTVEVSX0RFQVRIKQogCQkJ ZXJlcG9ydChGQVRBTCwKIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9BRE1JTl9TSFVURE9XTiks CiAJCQkJCSBlcnJtc2coInRlcm1pbmF0aW5nIGNvbm5lY3Rpb24gZHVlIHRvIHVuZXhwZWN0 ZWQgcG9zdG1hc3RlciBleGl0IikpKTsKIAotCQkvKiBIYW5kbGUgaW50ZXJydXB0LiAqLwot CQlpZiAoZXZlbnQuZXZlbnRzICYgV0xfTEFUQ0hfU0VUKQorCQkvKiBIYW5kbGUgaW50ZXJy dXB0cy4gKi8KKwkJaWYgKGV2ZW50LmV2ZW50cyAmIFdMX0lOVEVSUlVQVCkKIAkJewotCQkJ UmVzZXRMYXRjaChNeUxhdGNoKTsKLQkJCVByb2Nlc3NDbGllbnRSZWFkSW50ZXJydXB0KHRy dWUpOworCQkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIAogCQkJLyoKIAkJCSAqIFdlJ2xs IHJldHJ5IHRoZSByZWFkLiBNb3N0IGxpa2VseSBpdCB3aWxsIHJldHVybiBpbW1lZGlhdGVs eQpAQCAtMjU1LDEyICsyNTUsNiBAQCByZXRyeToKIAkJZ290byByZXRyeTsKIAl9CiAKLQkv KgotCSAqIFByb2Nlc3MgaW50ZXJydXB0cyB0aGF0IGhhcHBlbmVkIGR1cmluZyBhIHN1Y2Nl c3NmdWwgKG9yIG5vbi1ibG9ja2luZywKLQkgKiBvciBoYXJkLWZhaWxlZCkgcmVhZC4KLQkg Ki8KLQlQcm9jZXNzQ2xpZW50UmVhZEludGVycnVwdChmYWxzZSk7Ci0KIAlyZXR1cm4gbjsK IH0KIApAQCAtMjg0LDcgKzI3OCw4IEBAIHNlY3VyZV9yYXdfcmVhZChQb3J0ICpwb3J0LCB2 b2lkICpwdHIsIHNpemVfdCBsZW4pCiAKIAkvKgogCSAqIFRyeSB0byByZWFkIGZyb20gdGhl IHNvY2tldCB3aXRob3V0IGJsb2NraW5nLiBJZiBpdCBzdWNjZWVkcyB3ZSdyZQotCSAqIGRv bmUsIG90aGVyd2lzZSB3ZSdsbCB3YWl0IGZvciB0aGUgc29ja2V0IHVzaW5nIHRoZSBsYXRj aCBtZWNoYW5pc20uCisJICogZG9uZSwgb3RoZXJ3aXNlIHdlJ2xsIHdhaXQgZm9yIHRoZSBz b2NrZXQgdXNpbmcgdGhlIGludGVycnVwdAorCSAqIG1lY2hhbmlzbS4KIAkgKi8KICNpZmRl ZiBXSU4zMgogCXBnd2luMzJfbm9ibG9jayA9IHRydWU7CkBAIC0zMDAsNiArMjk1LDkgQEAg c2VjdXJlX3Jhd19yZWFkKFBvcnQgKnBvcnQsIHZvaWQgKnB0ciwgc2l6ZV90IGxlbikKIAog LyoKICAqCVdyaXRlIGRhdGEgdG8gYSBzZWN1cmUgY29ubmVjdGlvbi4KKyAqCisgKiBJbiBi bG9ja2luZyBtb2RlLCB3aWxsIHByb2Nlc3MgYW55IGludGVycnVwdHMgdGhhdCBhcnJpdmUg d2hpbGUgd2UncmUKKyAqIHdhaXRpbmcuCiAgKi8KIHNzaXplX3QKIHNlY3VyZV93cml0ZShQ b3J0ICpwb3J0LCBjb25zdCB2b2lkICpwdHIsIHNpemVfdCBsZW4pCkBAIC0zMDcsOSArMzA1 LDYgQEAgc2VjdXJlX3dyaXRlKFBvcnQgKnBvcnQsIGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90 IGxlbikKIAlzc2l6ZV90CQluOwogCWludAkJCXdhaXRmb3I7CiAKLQkvKiBEZWFsIHdpdGgg YW55IGFscmVhZHktcGVuZGluZyBpbnRlcnJ1cHQgY29uZGl0aW9uLiAqLwotCVByb2Nlc3ND bGllbnRXcml0ZUludGVycnVwdChmYWxzZSk7Ci0KIHJldHJ5OgogCXdhaXRmb3IgPSAwOwog I2lmZGVmIFVTRV9TU0wKQEAgLTMzOCw3ICszMzMsOCBAQCByZXRyeToKIAogCQlBc3NlcnQo d2FpdGZvcik7CiAKLQkJTW9kaWZ5V2FpdEV2ZW50KEZlQmVXYWl0U2V0LCBGZUJlV2FpdFNl dFNvY2tldFBvcywgd2FpdGZvciwgTlVMTCk7CisJCU1vZGlmeVdhaXRFdmVudChGZUJlV2Fp dFNldCwgRmVCZVdhaXRTZXRTb2NrZXRQb3MsIHdhaXRmb3IsIDApOworCQlNb2RpZnlXYWl0 RXZlbnQoRmVCZVdhaXRTZXQsIEZlQmVXYWl0U2V0SW50ZXJydXB0UG9zLCBXTF9JTlRFUlJV UFQsIENoZWNrRm9ySW50ZXJydXB0c01hc2spOwogCiAJCVdhaXRFdmVudFNldFdhaXQoRmVC ZVdhaXRTZXQsIC0xIC8qIG5vIHRpbWVvdXQgKi8gLCAmZXZlbnQsIDEsCiAJCQkJCQkgV0FJ VF9FVkVOVF9DTElFTlRfV1JJVEUpOwpAQCAtMzQ5LDExICszNDUsMTAgQEAgcmV0cnk6CiAJ CQkJCShlcnJjb2RlKEVSUkNPREVfQURNSU5fU0hVVERPV04pLAogCQkJCQkgZXJybXNnKCJ0 ZXJtaW5hdGluZyBjb25uZWN0aW9uIGR1ZSB0byB1bmV4cGVjdGVkIHBvc3RtYXN0ZXIgZXhp dCIpKSk7CiAKLQkJLyogSGFuZGxlIGludGVycnVwdC4gKi8KLQkJaWYgKGV2ZW50LmV2ZW50 cyAmIFdMX0xBVENIX1NFVCkKKwkJLyogSGFuZGxlIGludGVycnVwdHMuICovCisJCWlmIChl dmVudC5ldmVudHMgJiBXTF9JTlRFUlJVUFQpCiAJCXsKLQkJCVJlc2V0TGF0Y2goTXlMYXRj aCk7Ci0JCQlQcm9jZXNzQ2xpZW50V3JpdGVJbnRlcnJ1cHQodHJ1ZSk7CisJCQlDSEVDS19G T1JfSU5URVJSVVBUUygpOwogCiAJCQkvKgogCQkJICogV2UnbGwgcmV0cnkgdGhlIHdyaXRl LiBNb3N0IGxpa2VseSBpdCB3aWxsIHJldHVybiBpbW1lZGlhdGVseQpAQCAtMzY0LDEyICsz NTksNiBAQCByZXRyeToKIAkJZ290byByZXRyeTsKIAl9CiAKLQkvKgotCSAqIFByb2Nlc3Mg aW50ZXJydXB0cyB0aGF0IGhhcHBlbmVkIGR1cmluZyBhIHN1Y2Nlc3NmdWwgKG9yIG5vbi1i bG9ja2luZywKLQkgKiBvciBoYXJkLWZhaWxlZCkgd3JpdGUuCi0JICovCi0JUHJvY2Vzc0Ns aWVudFdyaXRlSW50ZXJydXB0KGZhbHNlKTsKLQogCXJldHVybiBuOwogfQogCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9saWJwcS9wcWNvbW0uYyBiL3NyYy9iYWNrZW5kL2xpYnBxL3Bx Y29tbS5jCmluZGV4IDY1NzBmMjcyOTdiLi5mZjRiMDRmOWUxMCAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvbGlicHEvcHFjb21tLmMKKysrIGIvc3JjL2JhY2tlbmQvbGlicHEvcHFjb21t LmMKQEAgLTczLDggKzczLDggQEAKICNlbmRpZgogCiAjaW5jbHVkZSAiY29tbW9uL2lwLmgi CisjaW5jbHVkZSAiaXBjL2ludGVycnVwdC5oIgogI2luY2x1ZGUgImxpYnBxL2xpYnBxLmgi Ci0jaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicG9ydC9wZ19ic3dhcC5oIgog I2luY2x1ZGUgInBvc3RtYXN0ZXIvcG9zdG1hc3Rlci5oIgogI2luY2x1ZGUgInN0b3JhZ2Uv aXBjLmgiCkBAIC0xNzUsNyArMTc1LDcgQEAgcHFfaW5pdChDbGllbnRTb2NrZXQgKmNsaWVu dF9zb2NrKQogewogCVBvcnQJICAgKnBvcnQ7CiAJaW50CQkJc29ja2V0X3BvcyBQR19VU0VE X0ZPUl9BU1NFUlRTX09OTFk7Ci0JaW50CQkJbGF0Y2hfcG9zIFBHX1VTRURfRk9SX0FTU0VS VFNfT05MWTsKKwlpbnQJCQlpbnRlcnJ1cHRfcG9zIFBHX1VTRURfRk9SX0FTU0VSVFNfT05M WTsKIAogCS8qIGFsbG9jYXRlIHRoZSBQb3J0IHN0cnVjdCBhbmQgY29weSB0aGUgQ2xpZW50 U29ja2V0IGNvbnRlbnRzIHRvIGl0ICovCiAJcG9ydCA9IHBhbGxvYzBfb2JqZWN0KFBvcnQp OwpAQCAtMjg3LDggKzI4Nyw4IEBAIHBxX2luaXQoQ2xpZW50U29ja2V0ICpjbGllbnRfc29j aykKIAogCS8qCiAJICogSW4gYmFja2VuZHMgKGFzIHNvb24gYXMgZm9ya2VkKSB3ZSBvcGVy YXRlIHRoZSB1bmRlcmx5aW5nIHNvY2tldCBpbgotCSAqIG5vbmJsb2NraW5nIG1vZGUgYW5k IHVzZSBsYXRjaGVzIHRvIGltcGxlbWVudCBibG9ja2luZyBzZW1hbnRpY3MgaWYKLQkgKiBu ZWVkZWQuIFRoYXQgYWxsb3dzIHVzIHRvIHByb3ZpZGUgc2FmZWx5IGludGVycnVwdGlibGUg cmVhZHMgYW5kCisJICogbm9uYmxvY2tpbmcgbW9kZSBhbmQgdXNlIFdhaXRFdmVudFNldCB0 byBpbXBsZW1lbnQgYmxvY2tpbmcgc2VtYW50aWNzCisJICogaWYgbmVlZGVkLiBUaGF0IGFs bG93cyB1cyB0byBwcm92aWRlIHNhZmVseSBpbnRlcnJ1cHRpYmxlIHJlYWRzIGFuZAogCSAq IHdyaXRlcy4KIAkgKi8KICNpZm5kZWYgV0lOMzIKQEAgLTMwNiwxOCArMzA2LDE4IEBAIHBx X2luaXQoQ2xpZW50U29ja2V0ICpjbGllbnRfc29jaykKIAogCUZlQmVXYWl0U2V0ID0gQ3Jl YXRlV2FpdEV2ZW50U2V0KE5VTEwsIEZlQmVXYWl0U2V0TkV2ZW50cyk7CiAJc29ja2V0X3Bv cyA9IEFkZFdhaXRFdmVudFRvU2V0KEZlQmVXYWl0U2V0LCBXTF9TT0NLRVRfV1JJVEVBQkxF LAotCQkJCQkJCQkgICBwb3J0LT5zb2NrLCBOVUxMLCBOVUxMKTsKLQlsYXRjaF9wb3MgPSBB ZGRXYWl0RXZlbnRUb1NldChGZUJlV2FpdFNldCwgV0xfTEFUQ0hfU0VULCBQR0lOVkFMSURf U09DS0VULAotCQkJCQkJCQkgIE15TGF0Y2gsIE5VTEwpOworCQkJCQkJCQkgICBwb3J0LT5z b2NrLCAwLCBOVUxMKTsKKwlpbnRlcnJ1cHRfcG9zID0gQWRkV2FpdEV2ZW50VG9TZXQoRmVC ZVdhaXRTZXQsIFdMX0lOVEVSUlVQVCwgUEdJTlZBTElEX1NPQ0tFVCwKKwkJCQkJCQkJCSAg Q2hlY2tGb3JJbnRlcnJ1cHRzTWFzaywgTlVMTCk7CiAJQWRkV2FpdEV2ZW50VG9TZXQoRmVC ZVdhaXRTZXQsIFdMX1BPU1RNQVNURVJfREVBVEgsIFBHSU5WQUxJRF9TT0NLRVQsCi0JCQkJ CSAgTlVMTCwgTlVMTCk7CisJCQkJCSAgMCwgTlVMTCk7CiAKIAkvKgogCSAqIFRoZSBldmVu dCBwb3NpdGlvbnMgbWF0Y2ggdGhlIG9yZGVyIHdlIGFkZGVkIHRoZW0sIGJ1dCBsZXQncyBz YW5pdHkKIAkgKiBjaGVjayB0aGVtIHRvIGJlIHN1cmUuCiAJICovCiAJQXNzZXJ0KHNvY2tl dF9wb3MgPT0gRmVCZVdhaXRTZXRTb2NrZXRQb3MpOwotCUFzc2VydChsYXRjaF9wb3MgPT0g RmVCZVdhaXRTZXRMYXRjaFBvcyk7CisJQXNzZXJ0KGludGVycnVwdF9wb3MgPT0gRmVCZVdh aXRTZXRJbnRlcnJ1cHRQb3MpOwogCiAJcmV0dXJuIHBvcnQ7CiB9CkBAIC0xNDExLDggKzE0 MTEsNyBAQCBpbnRlcm5hbF9mbHVzaF9idWZmZXIoY29uc3QgY2hhciAqYnVmLCBzaXplX3Qg KnN0YXJ0LCBzaXplX3QgKmVuZCkKIAkJCSAqIHRoZSBjb25uZWN0aW9uLgogCQkJICovCiAJ CQkqc3RhcnQgPSAqZW5kID0gMDsKLQkJCUNsaWVudENvbm5lY3Rpb25Mb3N0ID0gMTsKLQkJ CUludGVycnVwdFBlbmRpbmcgPSAxOworCQkJUmFpc2VJbnRlcnJ1cHQoSU5URVJSVVBUX0NM SUVOVF9DT05ORUNUSU9OX0xPU1QpOwogCQkJcmV0dXJuIEVPRjsKIAkJfQogCkBAIC0yMDYy LDI1ICsyMDYxLDE0IEBAIHBxX2NoZWNrX2Nvbm5lY3Rpb24odm9pZCkKIAkgKiBJdCdzIE9L IHRvIG1vZGlmeSB0aGUgc29ja2V0IGV2ZW50IGZpbHRlciB3aXRob3V0IHJlc3RvcmluZywg YmVjYXVzZQogCSAqIGFsbCBGZUJlV2FpdFNldCBzb2NrZXQgd2FpdCBzaXRlcyBkbyB0aGUg c2FtZS4KIAkgKi8KLQlNb2RpZnlXYWl0RXZlbnQoRmVCZVdhaXRTZXQsIEZlQmVXYWl0U2V0 U29ja2V0UG9zLCBXTF9TT0NLRVRfQ0xPU0VELCBOVUxMKTsKKwlNb2RpZnlXYWl0RXZlbnQo RmVCZVdhaXRTZXQsIEZlQmVXYWl0U2V0U29ja2V0UG9zLCBXTF9TT0NLRVRfQ0xPU0VELCAw KTsKKwlNb2RpZnlXYWl0RXZlbnQoRmVCZVdhaXRTZXQsIEZlQmVXYWl0U2V0SW50ZXJydXB0 UG9zLCBXTF9JTlRFUlJVUFQsIDApOwogCi1yZXRyeToKIAlyYyA9IFdhaXRFdmVudFNldFdh aXQoRmVCZVdhaXRTZXQsIDAsIGV2ZW50cywgbGVuZ3Rob2YoZXZlbnRzKSwgMCk7CiAJZm9y IChpbnQgaSA9IDA7IGkgPCByYzsgKytpKQogCXsKIAkJaWYgKGV2ZW50c1tpXS5ldmVudHMg JiBXTF9TT0NLRVRfQ0xPU0VEKQogCQkJcmV0dXJuIGZhbHNlOwotCQlpZiAoZXZlbnRzW2ld LmV2ZW50cyAmIFdMX0xBVENIX1NFVCkKLQkJewotCQkJLyoKLQkJCSAqIEEgbGF0Y2ggZXZl bnQgbWlnaHQgYmUgcHJldmVudGluZyBvdGhlciBldmVudHMgZnJvbSBiZWluZwotCQkJICog cmVwb3J0ZWQuICBSZXNldCBpdCBhbmQgcG9sbCBhZ2Fpbi4gIE5vIG5lZWQgdG8gcmVzdG9y ZSBpdAotCQkJICogYmVjYXVzZSBubyBjb2RlIHNob3VsZCBleHBlY3QgbGF0Y2hlcyB0byBz dXJ2aXZlIGFjcm9zcwotCQkJICogQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKS4KLQkJCSAqLwot CQkJUmVzZXRMYXRjaChNeUxhdGNoKTsKLQkJCWdvdG8gcmV0cnk7Ci0JCX0KIAl9CiAKIAly ZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2xpYnBxL3BxbXEuYyBiL3Ny Yy9iYWNrZW5kL2xpYnBxL3BxbXEuYwppbmRleCA2ZTRiYmZiNWFhMS4uMGEwMjllYjAyYTgg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2xpYnBxL3BxbXEuYworKysgYi9zcmMvYmFja2Vu ZC9saWJwcS9wcW1xLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlICJwb3N0Z3Jlcy5o IgogCiAjaW5jbHVkZSAiYWNjZXNzL3BhcmFsbGVsLmgiCisjaW5jbHVkZSAiaXBjL2ludGVy cnVwdC5oIgogI2luY2x1ZGUgImxpYnBxL2xpYnBxLmgiCiAjaW5jbHVkZSAibGlicHEvcHFm b3JtYXQuaCIKICNpbmNsdWRlICJsaWJwcS9wcW1xLmgiCkBAIC0yNSw3ICsyNiw2IEBACiAK IHN0YXRpYyBzaG1fbXFfaGFuZGxlICpwcV9tcV9oYW5kbGUgPSBOVUxMOwogc3RhdGljIGJv b2wgcHFfbXFfYnVzeSA9IGZhbHNlOwotc3RhdGljIHBpZF90IHBxX21xX3BhcmFsbGVsX2xl YWRlcl9waWQgPSAwOwogc3RhdGljIFByb2NOdW1iZXIgcHFfbXFfcGFyYWxsZWxfbGVhZGVy X3Byb2NfbnVtYmVyID0gSU5WQUxJRF9QUk9DX05VTUJFUjsKIAogc3RhdGljIHZvaWQgcHFf Y2xlYW51cF9yZWRpcmVjdF90b19zaG1fbXEoZHNtX3NlZ21lbnQgKnNlZywgRGF0dW0gYXJn KTsKQEAgLTc1LDE0ICs3NSwxMyBAQCBwcV9jbGVhbnVwX3JlZGlyZWN0X3RvX3NobV9tcShk c21fc2VnbWVudCAqc2VnLCBEYXR1bSBhcmcpCiB9CiAKIC8qCi0gKiBBcnJhbmdlIHRvIFNl bmRQcm9jU2lnbmFsKCkgdG8gdGhlIHBhcmFsbGVsIGxlYWRlciBlYWNoIHRpbWUgd2UgdHJh bnNtaXQKKyAqIEFycmFuZ2UgdG8gc2VuZCBhbiBpbnRlcnJ1cHQgdG8gdGhlIHBhcmFsbGVs IGxlYWRlciBlYWNoIHRpbWUgd2UgdHJhbnNtaXQKICAqIG1lc3NhZ2UgZGF0YSB2aWEgdGhl IHNobV9tcS4KICAqLwogdm9pZAotcHFfc2V0X3BhcmFsbGVsX2xlYWRlcihwaWRfdCBwaWQs IFByb2NOdW1iZXIgcHJvY051bWJlcikKK3BxX3NldF9wYXJhbGxlbF9sZWFkZXIoUHJvY051 bWJlciBwcm9jTnVtYmVyKQogewogCUFzc2VydChQcUNvbW1NZXRob2RzID09ICZQcUNvbW1N cU1ldGhvZHMpOwotCXBxX21xX3BhcmFsbGVsX2xlYWRlcl9waWQgPSBwaWQ7CiAJcHFfbXFf cGFyYWxsZWxfbGVhZGVyX3Byb2NfbnVtYmVyID0gcHJvY051bWJlcjsKIH0KIApAQCAtMTY5 LDI3ICsxNjgsMTkgQEAgbXFfcHV0bWVzc2FnZShjaGFyIG1zZ3R5cGUsIGNvbnN0IGNoYXIg KnMsIHNpemVfdCBsZW4pCiAJCUFzc2VydChwcV9tcV9oYW5kbGUgIT0gTlVMTCk7CiAJCXJl c3VsdCA9IHNobV9tcV9zZW5kdihwcV9tcV9oYW5kbGUsIGlvdiwgMiwgdHJ1ZSwgdHJ1ZSk7 CiAKLQkJaWYgKHBxX21xX3BhcmFsbGVsX2xlYWRlcl9waWQgIT0gMCkKKwkJaWYgKHBxX21x X3BhcmFsbGVsX2xlYWRlcl9wcm9jX251bWJlciAhPSBJTlZBTElEX1BST0NfTlVNQkVSKQog CQl7Ci0JCQlpZiAoSXNMb2dpY2FsUGFyYWxsZWxBcHBseVdvcmtlcigpKQotCQkJCVNlbmRQ cm9jU2lnbmFsKHBxX21xX3BhcmFsbGVsX2xlYWRlcl9waWQsCi0JCQkJCQkJICAgUFJPQ1NJ R19QQVJBTExFTF9BUFBMWV9NRVNTQUdFLAotCQkJCQkJCSAgIHBxX21xX3BhcmFsbGVsX2xl YWRlcl9wcm9jX251bWJlcik7Ci0JCQllbHNlCi0JCQl7Ci0JCQkJQXNzZXJ0KElzUGFyYWxs ZWxXb3JrZXIoKSk7Ci0JCQkJU2VuZFByb2NTaWduYWwocHFfbXFfcGFyYWxsZWxfbGVhZGVy X3BpZCwKLQkJCQkJCQkgICBQUk9DU0lHX1BBUkFMTEVMX01FU1NBR0UsCi0JCQkJCQkJICAg cHFfbXFfcGFyYWxsZWxfbGVhZGVyX3Byb2NfbnVtYmVyKTsKLQkJCX0KKwkJCVNlbmRJbnRl cnJ1cHQoSU5URVJSVVBUX1BBUkFMTEVMX01FU1NBR0UsCisJCQkJCQkgIHBxX21xX3BhcmFs bGVsX2xlYWRlcl9wcm9jX251bWJlcik7CiAJCX0KIAogCQlpZiAocmVzdWx0ICE9IFNITV9N UV9XT1VMRF9CTE9DSykKIAkJCWJyZWFrOwogCi0JCSh2b2lkKSBXYWl0TGF0Y2goTXlMYXRj aCwgV0xfTEFUQ0hfU0VUIHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwgMCwKLQkJCQkJCSBXQUlU X0VWRU5UX01FU1NBR0VfUVVFVUVfUFVUX01FU1NBR0UpOwotCQlSZXNldExhdGNoKE15TGF0 Y2gpOworCQkodm9pZCkgV2FpdEludGVycnVwdChDaGVja0ZvckludGVycnVwdHNNYXNrIHwg SU5URVJSVVBUX1dBSVRfV0FLRVVQLAorCQkJCQkJCSBXTF9JTlRFUlJVUFQgfCBXTF9FWElU X09OX1BNX0RFQVRILCAwLAorCQkJCQkJCSBXQUlUX0VWRU5UX01FU1NBR0VfUVVFVUVfUFVU X01FU1NBR0UpOworCQlDbGVhckludGVycnVwdChJTlRFUlJVUFRfV0FJVF9XQUtFVVApOwog CQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwogCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvbWVzb24uYnVpbGQgYi9zcmMvYmFja2VuZC9tZXNvbi5idWlsZAppbmRleCA3MTJhODU3 Y2RiNC4uZDIwZTZmYmEyODUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL21lc29uLmJ1aWxk CisrKyBiL3NyYy9iYWNrZW5kL21lc29uLmJ1aWxkCkBAIC0xNSw2ICsxNSw3IEBAIHN1YmRp cignY2F0YWxvZycpCiBzdWJkaXIoJ2NvbW1hbmRzJykKIHN1YmRpcignZXhlY3V0b3InKQog c3ViZGlyKCdmb3JlaWduJykKK3N1YmRpcignaXBjJykKIHN1YmRpcignaml0JykKIHN1YmRp cignbGliJykKIHN1YmRpcignbGlicHEnKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9z dG1hc3Rlci9NYWtlZmlsZSBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvTWFrZWZpbGUKaW5k ZXggMGY0NDM1ZDJkOTcuLjcyOWEwYmNiYmU5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9w b3N0bWFzdGVyL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvTWFrZWZp bGUKQEAgLTE5LDcgKzE5LDYgQEAgT0JKUyA9IFwKIAliZ3dyaXRlci5vIFwKIAljaGVja3Bv aW50ZXIubyBcCiAJZm9ya19wcm9jZXNzLm8gXAotCWludGVycnVwdC5vIFwKIAlsYXVuY2hf YmFja2VuZC5vIFwKIAlwZ2FyY2gubyBcCiAJcG1jaGlsZC5vIFwKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5jIGIvc3JjL2JhY2tlbmQvcG9zdG1h c3Rlci9hdXRvdmFjdXVtLmMKaW5kZXggYzYyNDY5YTJhODEuLjA3YTk5MjBiYzA4IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0uYworKysgYi9zcmMv YmFja2VuZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0uYwpAQCAtMjcsMTUgKzI3LDE3IEBACiAg KiBsYXVuY2hlciBoYXMgc2V0IHVwLgogICoKICAqIElmIHRoZSBmb3JrKCkgY2FsbCBmYWls cyBpbiB0aGUgcG9zdG1hc3RlciwgaXQgc2V0cyBhIGZsYWcgaW4gdGhlIHNoYXJlZAotICog bWVtb3J5IGFyZWEsIGFuZCBzZW5kcyBhIHNpZ25hbCB0byB0aGUgbGF1bmNoZXIuICBUaGUg bGF1bmNoZXIsIHVwb24KLSAqIG5vdGljaW5nIHRoZSBmbGFnLCBjYW4gdHJ5IHN0YXJ0aW5n IHRoZSB3b3JrZXIgYWdhaW4gYnkgcmVzZW5kaW5nIHRoZQorICogbWVtb3J5IGFyZWEsIGFu ZCBzZW5kcyBJTlRFUlJVUFRfVkFDVVVNX1dPUktFUl9GSU5JU0hFRCB0byB0aGUgbGF1bmNo ZXIuCisgKiBUaGUgbGF1bmNoZXIsIHVwb24KKyAqIG5vdGljaW5nIHRoZSBpbnRlcnJ1cHQs IGNhbiB0cnkgc3RhcnRpbmcgdGhlIHdvcmtlciBhZ2FpbiBieSByZXNlbmRpbmcgdGhlCiAg KiBzaWduYWwuICBOb3RlIHRoYXQgdGhlIGZhaWx1cmUgY2FuIG9ubHkgYmUgdHJhbnNpZW50 IChmb3JrIGZhaWx1cmUgZHVlIHRvCiAgKiBoaWdoIGxvYWQsIG1lbW9yeSBwcmVzc3VyZSwg dG9vIG1hbnkgcHJvY2Vzc2VzLCBldGMpOyBtb3JlIHBlcm1hbmVudAogICogcHJvYmxlbXMs IGxpa2UgZmFpbHVyZSB0byBjb25uZWN0IHRvIGEgZGF0YWJhc2UsIGFyZSBkZXRlY3RlZCBs YXRlciBpbiB0aGUKICAqIHdvcmtlciBhbmQgZGVhbHQgd2l0aCBqdXN0IGJ5IGhhdmluZyB0 aGUgd29ya2VyIGV4aXQgbm9ybWFsbHkuICBUaGUgbGF1bmNoZXIKICAqIHdpbGwgbGF1bmNo IGEgbmV3IHdvcmtlciBhZ2FpbiBsYXRlciwgcGVyIHNjaGVkdWxlLgogICoKLSAqIFdoZW4g dGhlIHdvcmtlciBpcyBkb25lIHZhY3V1bWluZyBpdCBzZW5kcyBTSUdVU1IyIHRvIHRoZSBs YXVuY2hlci4gIFRoZQorICogV2hlbiB0aGUgd29ya2VyIGlzIGRvbmUgdmFjdXVtaW5nIGl0 IHNlbmRzIElOVEVSUlVQVF9WQUNVVU1fV09SS0VSX0ZJTklTSEVECisgKiB0byB0aGUgbGF1 bmNoZXIuICBUaGUKICAqIGxhdW5jaGVyIHRoZW4gd2FrZXMgdXAgYW5kIGlzIGFibGUgdG8g bGF1bmNoIGFub3RoZXIgd29ya2VyLCBpZiB0aGUgc2NoZWR1bGUKICAqIGlzIHNvIHRpZ2h0 IHRoYXQgYSBuZXcgd29ya2VyIGlzIG5lZWRlZCBpbW1lZGlhdGVseS4gIEF0IHRoaXMgdGlt ZSB0aGUKICAqIGxhdW5jaGVyIGNhbiBhbHNvIGJhbGFuY2UgdGhlIHNldHRpbmdzIGZvciB0 aGUgdmFyaW91cyByZW1haW5pbmcgd29ya2VycycKQEAgLTc5LDE4ICs4MSwxOCBAQAogI2lu Y2x1ZGUgImNhdGFsb2cvcGdfbmFtZXNwYWNlLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvdmFj dXVtLmgiCiAjaW5jbHVkZSAiY29tbW9uL2ludC5oIgorI2luY2x1ZGUgImlwYy9pbnRlcnJ1 cHQuaCIKKyNpbmNsdWRlICJpcGMvc2lnbmFsX2hhbmRsZXJzLmgiCiAjaW5jbHVkZSAibGli L2lsaXN0LmgiCiAjaW5jbHVkZSAibGlicHEvcHFzaWduYWwuaCIKICNpbmNsdWRlICJtaXNj YWRtaW4uaCIKICNpbmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKICNpbmNsdWRlICJwZ3N0 YXQuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL2F1dG92YWN1dW0uaCIKLSNpbmNsdWRlICJw b3N0bWFzdGVyL2ludGVycnVwdC5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvcG9zdG1hc3Rl ci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYWlvX3N1YnN5cy5oIgogI2luY2x1ZGUgInN0b3Jh Z2UvYnVmbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKLSNpbmNsdWRlICJzdG9y YWdlL2xhdGNoLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAjaW5jbHVkZSAic3Rv cmFnZS9wbXNpZ25hbC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgpAQCAtMTUxLDkg KzE1Myw2IEBAIGludAkJCUxvZ19hdXRvYW5hbHl6ZV9taW5fZHVyYXRpb24gPSA2MDAwMDA7 CiBzdGF0aWMgZG91YmxlIGF2X3N0b3JhZ2VfcGFyYW1fY29zdF9kZWxheSA9IC0xOwogc3Rh dGljIGludAlhdl9zdG9yYWdlX3BhcmFtX2Nvc3RfbGltaXQgPSAtMTsKIAotLyogRmxhZ3Mg c2V0IGJ5IHNpZ25hbCBoYW5kbGVycyAqLwotc3RhdGljIHZvbGF0aWxlIHNpZ19hdG9taWNf dCBnb3RfU0lHVVNSMiA9IGZhbHNlOwotCiAvKiBDb21wYXJpc29uIHBvaW50cyBmb3IgZGV0 ZXJtaW5pbmcgd2hldGhlciBmcmVlemVfbWF4X2FnZSBpcyBleGNlZWRlZCAqLwogc3RhdGlj IFRyYW5zYWN0aW9uSWQgcmVjZW50WGlkOwogc3RhdGljIE11bHRpWGFjdElkIHJlY2VudE11 bHRpOwpAQCAtMjc3LDcgKzI3Niw3IEBAIHR5cGVkZWYgc3RydWN0IEF1dG9WYWN1dW1Xb3Jr SXRlbQogICogc3RydWN0IGFuZCB0aGUgYXJyYXkgb2YgV29ya2VySW5mbyBzdHJ1Y3RzLiAg VGhpcyBzdHJ1Y3Qga2VlcHM6CiAgKgogICogYXZfc2lnbmFsCQlzZXQgYnkgb3RoZXIgcHJv Y2Vzc2VzIHRvIGluZGljYXRlIHZhcmlvdXMgY29uZGl0aW9ucwotICogYXZfbGF1bmNoZXJw aWQJdGhlIFBJRCBvZiB0aGUgYXV0b3ZhY3V1bSBsYXVuY2hlcgorICogYXZfbGF1bmNoZXJQ cm9jCXRoZSBwcm9jIG51bWJlciBvZiB0aGUgYXV0b3ZhY3V1bSBsYXVuY2hlcgogICogYXZf ZnJlZVdvcmtlcnMJdGhlIFdvcmtlckluZm8gZnJlZWxpc3QKICAqIGF2X3J1bm5pbmdXb3Jr ZXJzIHRoZSBXb3JrZXJJbmZvIG5vbi1mcmVlIHF1ZXVlCiAgKiBhdl9zdGFydGluZ1dvcmtl ciBwb2ludGVyIHRvIFdvcmtlckluZm8gY3VycmVudGx5IGJlaW5nIHN0YXJ0ZWQgKGNsZWFy ZWQgYnkKQEAgLTI4OCwxMiArMjg3LDE1IEBAIHR5cGVkZWYgc3RydWN0IEF1dG9WYWN1dW1X b3JrSXRlbQogICoKICAqIFRoaXMgc3RydWN0IGlzIHByb3RlY3RlZCBieSBBdXRvdmFjdXVt TG9jaywgZXhjZXB0IGZvciBhdl9zaWduYWwgYW5kIHBhcnRzCiAgKiBvZiB0aGUgd29ya2Vy IGxpc3QgKHNlZSBhYm92ZSkuCisgKgorICogWFhYOiBhdl9zaWduYWwgY291bGQgYmUgcmVw bGFjZWQgd2l0aCBpbmRpdmlkdWFsIGludGVycnVwdHMuIFRoaXMgd29ya3MKKyAqIHRvbywg dGhvdWdoLgogICotLS0tLS0tLS0tLS0tCiAgKi8KIHR5cGVkZWYgc3RydWN0CiB7CiAJc2ln X2F0b21pY190IGF2X3NpZ25hbFtBdXRvVmFjTnVtU2lnbmFsc107Ci0JcGlkX3QJCWF2X2xh dW5jaGVycGlkOworCVByb2NOdW1iZXIJYXZfbGF1bmNoZXJQcm9jOwogCWRjbGlzdF9oZWFk IGF2X2ZyZWVXb3JrZXJzOwogCWRsaXN0X2hlYWQJYXZfcnVubmluZ1dvcmtlcnM7CiAJV29y a2VySW5mbwlhdl9zdGFydGluZ1dvcmtlcjsKQEAgLTMyNCw3ICszMjYsNyBAQCBhdmxfZGJh c2UgICphdmxfZGJhc2VfYXJyYXk7CiBzdGF0aWMgV29ya2VySW5mbyBNeVdvcmtlckluZm8g PSBOVUxMOwogCiBzdGF0aWMgT2lkCWRvX3N0YXJ0X3dvcmtlcih2b2lkKTsKLXN0YXRpYyB2 b2lkIFByb2Nlc3NBdXRvVmFjTGF1bmNoZXJJbnRlcnJ1cHRzKHZvaWQpOworc3RhdGljIHZv aWQgUHJvY2Vzc0F1dG9WYWNMYXVuY2hlckNvbmZpZ1JlbG9hZEludGVycnVwdCh2b2lkKTsK IHBnX25vcmV0dXJuIHN0YXRpYyB2b2lkIEF1dG9WYWNMYXVuY2hlclNodXRkb3duKHZvaWQp Owogc3RhdGljIHZvaWQgbGF1bmNoZXJfZGV0ZXJtaW5lX3NsZWVwKGJvb2wgY2FubGF1bmNo LCBib29sIHJlY3Vyc2luZywKIAkJCQkJCQkJCSBzdHJ1Y3QgdGltZXZhbCAqbmFwKTsKQEAg LTM1OCw3ICszNjAsNiBAQCBzdGF0aWMgdm9pZCBwZXJmb3JtX3dvcmtfaXRlbShBdXRvVmFj dXVtV29ya0l0ZW0gKndvcmtpdGVtKTsKIHN0YXRpYyB2b2lkIGF1dG92YWNfcmVwb3J0X2Fj dGl2aXR5KGF1dG92YWNfdGFibGUgKnRhYik7CiBzdGF0aWMgdm9pZCBhdXRvdmFjX3JlcG9y dF93b3JraXRlbShBdXRvVmFjdXVtV29ya0l0ZW0gKndvcmtpdGVtLAogCQkJCQkJCQkJY29u c3QgY2hhciAqbnNwbmFtZSwgY29uc3QgY2hhciAqcmVsbmFtZSk7Ci1zdGF0aWMgdm9pZCBh dmxfc2lndXNyMl9oYW5kbGVyKFNJR05BTF9BUkdTKTsKIHN0YXRpYyBib29sIGF2X3dvcmtl cl9hdmFpbGFibGUodm9pZCk7CiBzdGF0aWMgdm9pZCBjaGVja19hdl93b3JrZXJfZ3Vjcyh2 b2lkKTsKIApAQCAtMzk3LDIxICszOTgsMTkgQEAgQXV0b1ZhY0xhdW5jaGVyTWFpbihjb25z dCB2b2lkICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKQogCUFzc2Vy dChHZXRQcm9jZXNzaW5nTW9kZSgpID09IEluaXRQcm9jZXNzaW5nKTsKIAogCS8qCi0JICog U2V0IHVwIHNpZ25hbCBoYW5kbGVycy4gIFdlIG9wZXJhdGUgb24gZGF0YWJhc2VzIG11Y2gg bGlrZSBhIHJlZ3VsYXIKLQkgKiBiYWNrZW5kLCBzbyB3ZSB1c2UgdGhlIHNhbWUgc2lnbmFs IGhhbmRsaW5nLiAgU2VlIGVxdWl2YWxlbnQgY29kZSBpbgorCSAqIFNldCB1cCBpbnRlcnJ1 cHQgaGFuZGxlcnMuICBXZSBvcGVyYXRlIG9uIGRhdGFiYXNlcyBtdWNoIGxpa2UgYSByZWd1 bGFyCisJICogYmFja2VuZCwgc28gd2UgdXNlIG1vc3RseSB0aGUgc2FtZSBoYW5kbGluZy4g IFNlZSBlcXVpdmFsZW50IGNvZGUgaW4KIAkgKiB0Y29wL3Bvc3RncmVzLmMuCiAJICovCi0J cHFzaWduYWwoU0lHSFVQLCBTaWduYWxIYW5kbGVyRm9yQ29uZmlnUmVsb2FkKTsKLQlwcXNp Z25hbChTSUdJTlQsIFN0YXRlbWVudENhbmNlbEhhbmRsZXIpOwotCXBxc2lnbmFsKFNJR1RF Uk0sIFNpZ25hbEhhbmRsZXJGb3JTaHV0ZG93blJlcXVlc3QpOwotCS8qIFNJR1FVSVQgaGFu ZGxlciB3YXMgYWxyZWFkeSBzZXQgdXAgYnkgSW5pdFBvc3RtYXN0ZXJDaGlsZCAqLwotCisJ U2V0U3RhbmRhcmRJbnRlcnJ1cHRIYW5kbGVycygpOwogCUluaXRpYWxpemVUaW1lb3V0cygp OwkJLyogZXN0YWJsaXNoZXMgU0lHQUxSTSBoYW5kbGVyICovCisJU2V0SW50ZXJydXB0SGFu ZGxlcihJTlRFUlJVUFRfUVVFUllfQ0FOQ0VMLCBQcm9jZXNzUXVlcnlDYW5jZWxJbnRlcnJ1 cHQpOworCUVuYWJsZUludGVycnVwdChJTlRFUlJVUFRfUVVFUllfQ0FOQ0VMKTsKKworCVNl dEludGVycnVwdEhhbmRsZXIoSU5URVJSVVBUX1RFUk1JTkFURSwgQXV0b1ZhY0xhdW5jaGVy U2h1dGRvd24pOwogCi0JcHFzaWduYWwoU0lHUElQRSwgU0lHX0lHTik7Ci0JcHFzaWduYWwo U0lHVVNSMSwgcHJvY3NpZ25hbF9zaWd1c3IxX2hhbmRsZXIpOwotCXBxc2lnbmFsKFNJR1VT UjIsIGF2bF9zaWd1c3IyX2hhbmRsZXIpOwotCXBxc2lnbmFsKFNJR0ZQRSwgRmxvYXRFeGNl cHRpb25IYW5kbGVyKTsKKwkvKiBXZSBjYW4gc2FmZWx5IHJlbG9hZCBjb25maWcgYXQgYW55 IENIRUNLX0ZPUl9JTlRFUlJVUFRTKCkgKi8KKwlTZXRJbnRlcnJ1cHRIYW5kbGVyKElOVEVS UlVQVF9DT05GSUdfUkVMT0FELCBQcm9jZXNzQXV0b1ZhY0xhdW5jaGVyQ29uZmlnUmVsb2Fk SW50ZXJydXB0KTsKIAogCS8qCiAJICogQ3JlYXRlIGEgcGVyLWJhY2tlbmQgUEdQUk9DIHN0 cnVjdCBpbiBzaGFyZWQgbWVtb3J5LiAgV2UgbXVzdCBkbyB0aGlzCkBAIC00NTgsNyArNDU3 LDggQEAgQXV0b1ZhY0xhdW5jaGVyTWFpbihjb25zdCB2b2lkICpzdGFydHVwX2RhdGEsIHNp emVfdCBzdGFydHVwX2RhdGFfbGVuKQogCiAJCS8qIEZvcmdldCBhbnkgcGVuZGluZyBRdWVy eUNhbmNlbCBvciB0aW1lb3V0IHJlcXVlc3QgKi8KIAkJZGlzYWJsZV9hbGxfdGltZW91dHMo ZmFsc2UpOwotCQlRdWVyeUNhbmNlbFBlbmRpbmcgPSBmYWxzZTsgLyogc2Vjb25kIHRvIGF2 b2lkIHJhY2UgY29uZGl0aW9uICovCisJCUNsZWFySW50ZXJydXB0KElOVEVSUlVQVF9RVUVS WV9DQU5DRUwpOyAvKiBzZWNvbmQgdG8gYXZvaWQgcmFjZQorCQkJCQkJCQkJCQkJICogY29u ZGl0aW9uICovCiAKIAkJLyogUmVwb3J0IHRoZSBlcnJvciB0byB0aGUgc2VydmVyIGxvZyAq LwogCQlFbWl0RXJyb3JSZXBvcnQoKTsKQEAgLTUwMCw3ICs1MDAsNyBAQCBBdXRvVmFjTGF1 bmNoZXJNYWluKGNvbnN0IHZvaWQgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0 YV9sZW4pCiAJCVJFU1VNRV9JTlRFUlJVUFRTKCk7CiAKIAkJLyogaWYgaW4gc2h1dGRvd24g bW9kZSwgbm8gbmVlZCBmb3IgYW55dGhpbmcgZnVydGhlcjsganVzdCBnbyBhd2F5ICovCi0J CWlmIChTaHV0ZG93blJlcXVlc3RQZW5kaW5nKQorCQlpZiAoSW50ZXJydXB0UGVuZGluZyhJ TlRFUlJVUFRfVEVSTUlOQVRFKSkKIAkJCUF1dG9WYWNMYXVuY2hlclNodXRkb3duKCk7CiAK IAkJLyoKQEAgLTU1OSwxMiArNTU5LDEyIEBAIEF1dG9WYWNMYXVuY2hlck1haW4oY29uc3Qg dm9pZCAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbikKIAkgKi8KIAlp ZiAoIUF1dG9WYWN1dW1pbmdBY3RpdmUoKSkKIAl7Ci0JCWlmICghU2h1dGRvd25SZXF1ZXN0 UGVuZGluZykKKwkJaWYgKEludGVycnVwdFBlbmRpbmcoSU5URVJSVVBUX1RFUk1JTkFURSkp CiAJCQlkb19zdGFydF93b3JrZXIoKTsKIAkJcHJvY19leGl0KDApOwkJCS8qIGRvbmUgKi8K IAl9CiAKLQlBdXRvVmFjdXVtU2htZW0tPmF2X2xhdW5jaGVycGlkID0gTXlQcm9jUGlkOwor CUF1dG9WYWN1dW1TaG1lbS0+YXZfbGF1bmNoZXJQcm9jID0gTXlQcm9jTnVtYmVyOwogCiAJ LyoKIAkgKiBDcmVhdGUgdGhlIGluaXRpYWwgZGF0YWJhc2UgbGlzdC4gIFRoZSBpbnZhcmlh bnQgd2Ugd2FudCB0aGlzIGxpc3QgdG8KQEAgLTU3Niw0MSArNTc2LDQ0IEBAIEF1dG9WYWNM YXVuY2hlck1haW4oY29uc3Qgdm9pZCAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9k YXRhX2xlbikKIAlyZWJ1aWxkX2RhdGFiYXNlX2xpc3QoSW52YWxpZE9pZCk7CiAKIAkvKiBs b29wIHVudGlsIHNodXRkb3duIHJlcXVlc3QgKi8KLQl3aGlsZSAoIVNodXRkb3duUmVxdWVz dFBlbmRpbmcpCisJd2hpbGUgKCFJbnRlcnJ1cHRQZW5kaW5nKElOVEVSUlVQVF9URVJNSU5B VEUpKQogCXsKIAkJc3RydWN0IHRpbWV2YWwgbmFwOwogCQlUaW1lc3RhbXBUeiBjdXJyZW50 X3RpbWUgPSAwOwogCQlib29sCQljYW5fbGF1bmNoOwogCiAJCS8qCi0JCSAqIFRoaXMgbG9v cCBpcyBhIGJpdCBkaWZmZXJlbnQgZnJvbSB0aGUgbm9ybWFsIHVzZSBvZiBXYWl0TGF0Y2gs CisJCSAqIFRoaXMgbG9vcCBpcyBhIGJpdCBkaWZmZXJlbnQgZnJvbSB0aGUgbm9ybWFsIHVz ZSBvZiBXYWl0SW50ZXJydXB0LAogCQkgKiBiZWNhdXNlIHdlJ2QgbGlrZSB0byBzbGVlcCBi ZWZvcmUgdGhlIGZpcnN0IGxhdW5jaCBvZiBhIGNoaWxkCi0JCSAqIHByb2Nlc3MuICBTbyBp dCdzIFdhaXRMYXRjaCwgdGhlbiBSZXNldExhdGNoLCB0aGVuIGNoZWNrIGZvcgotCQkgKiB3 YWtlbmluZyBjb25kaXRpb25zLgorCQkgKiBwcm9jZXNzLiAgU28gaXQncyBXYWl0SW50ZXJy dXB0LCB0aGVuIENsZWFySW50ZXJydXB0LCB0aGVuIGNoZWNrCisJCSAqIGZvciB3YWtlbmlu ZyBjb25kaXRpb25zLgogCQkgKi8KIAogCQlsYXVuY2hlcl9kZXRlcm1pbmVfc2xlZXAoYXZf d29ya2VyX2F2YWlsYWJsZSgpLCBmYWxzZSwgJm5hcCk7CiAKIAkJLyoKLQkJICogV2FpdCB1 bnRpbCBuYXB0aW1lIGV4cGlyZXMgb3Igd2UgZ2V0IHNvbWUgdHlwZSBvZiBzaWduYWwgKGFs bCB0aGUKLQkJICogc2lnbmFsIGhhbmRsZXJzIHdpbGwgd2FrZSB1cyBieSBjYWxsaW5nIFNl dExhdGNoKS4KKwkJICogV2FpdCB1bnRpbCBuYXB0aW1lIGV4cGlyZXMgb3Igd2UgZ2V0IHNv bWUgdHlwZSBvZiBpbnRlcnJ1cHQuCiAJCSAqLwotCQkodm9pZCkgV2FpdExhdGNoKE15TGF0 Y2gsCi0JCQkJCQkgV0xfTEFUQ0hfU0VUIHwgV0xfVElNRU9VVCB8IFdMX0VYSVRfT05fUE1f REVBVEgsCi0JCQkJCQkgKG5hcC50dl9zZWMgKiAxMDAwTCkgKyAobmFwLnR2X3VzZWMgLyAx MDAwTCksCi0JCQkJCQkgV0FJVF9FVkVOVF9BVVRPVkFDVVVNX01BSU4pOworCQkodm9pZCkg V2FpdEludGVycnVwdChDaGVja0ZvckludGVycnVwdHNNYXNrIHwKKwkJCQkJCQkgSU5URVJS VVBUX1dBSVRfV0FLRVVQIHwKKwkJCQkJCQkgSU5URVJSVVBUX0FVVE9WQUNVVU1fV09SS0VS X0ZJTklTSEVELAorCQkJCQkJCSBXTF9JTlRFUlJVUFQgfCBXTF9USU1FT1VUIHwgV0xfRVhJ VF9PTl9QTV9ERUFUSCwKKwkJCQkJCQkgKG5hcC50dl9zZWMgKiAxMDAwTCkgKyAobmFwLnR2 X3VzZWMgLyAxMDAwTCksCisJCQkJCQkJIFdBSVRfRVZFTlRfQVVUT1ZBQ1VVTV9NQUlOKTsK IAotCQlSZXNldExhdGNoKE15TGF0Y2gpOworCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwog Ci0JCVByb2Nlc3NBdXRvVmFjTGF1bmNoZXJJbnRlcnJ1cHRzKCk7CisJCS8qCisJCSAqIEZJ WE1FOiBpcyB0aGlzIHN0aWxsIG5lZWRlZD8gRG9lcyBhbnlvbmUgc2VuZCBJTlRFUlJVUFRf V0FJVF9XQUtFVVAKKwkJICogdG8gYXYgbGF1bmNoZXI/CisJCSAqLworCQlDbGVhckludGVy cnVwdChJTlRFUlJVUFRfV0FJVF9XQUtFVVApOwogCiAJCS8qCiAJCSAqIGEgd29ya2VyIGZp bmlzaGVkLCBvciBwb3N0bWFzdGVyIHNpZ25hbGVkIGZhaWx1cmUgdG8gc3RhcnQgYSB3b3Jr ZXIKIAkJICovCi0JCWlmIChnb3RfU0lHVVNSMikKKwkJaWYgKENvbnN1bWVJbnRlcnJ1cHQo SU5URVJSVVBUX0FVVE9WQUNVVU1fV09SS0VSX0ZJTklTSEVEKSkKIAkJewotCQkJZ290X1NJ R1VTUjIgPSBmYWxzZTsKLQogCQkJLyogcmViYWxhbmNlIGNvc3QgbGltaXRzLCBpZiBuZWVk ZWQgKi8KIAkJCWlmIChBdXRvVmFjdXVtU2htZW0tPmF2X3NpZ25hbFtBdXRvVmFjUmViYWxh bmNlXSkKIAkJCXsKQEAgLTc0NiwyMSArNzQ5LDE3IEBAIEF1dG9WYWNMYXVuY2hlck1haW4o Y29uc3Qgdm9pZCAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbikKIAlB dXRvVmFjTGF1bmNoZXJTaHV0ZG93bigpOwogfQogCi0vKgotICogUHJvY2VzcyBhbnkgbmV3 IGludGVycnVwdHMuCi0gKi8KIHN0YXRpYyB2b2lkCi1Qcm9jZXNzQXV0b1ZhY0xhdW5jaGVy SW50ZXJydXB0cyh2b2lkKQorUHJvY2Vzc0F1dG9WYWNMYXVuY2hlckNvbmZpZ1JlbG9hZElu dGVycnVwdCh2b2lkKQogewogCS8qIHRoZSBub3JtYWwgc2h1dGRvd24gY2FzZSAqLwotCWlm IChTaHV0ZG93blJlcXVlc3RQZW5kaW5nKQorCWlmIChJbnRlcnJ1cHRQZW5kaW5nKElOVEVS UlVQVF9URVJNSU5BVEUpKQogCQlBdXRvVmFjTGF1bmNoZXJTaHV0ZG93bigpOwogCi0JaWYg KENvbmZpZ1JlbG9hZFBlbmRpbmcpCisJaWYgKENvbnN1bWVJbnRlcnJ1cHQoSU5URVJSVVBU X0NPTkZJR19SRUxPQUQpKQogCXsKIAkJaW50CQkJYXV0b3ZhY3V1bV9tYXhfd29ya2Vyc19w cmV2ID0gYXV0b3ZhY3V1bV9tYXhfd29ya2VyczsKIAotCQlDb25maWdSZWxvYWRQZW5kaW5n ID0gZmFsc2U7CiAJCVByb2Nlc3NDb25maWdGaWxlKFBHQ19TSUdIVVApOwogCiAJCS8qIHNo dXRkb3duIHJlcXVlc3RlZCBpbiBjb25maWcgZmlsZT8gKi8KQEAgLTc3OCwxNyArNzc3LDYg QEAgUHJvY2Vzc0F1dG9WYWNMYXVuY2hlckludGVycnVwdHModm9pZCkKIAkJLyogcmVidWls ZCB0aGUgbGlzdCBpbiBjYXNlIHRoZSBuYXB0aW1lIGNoYW5nZWQgKi8KIAkJcmVidWlsZF9k YXRhYmFzZV9saXN0KEludmFsaWRPaWQpOwogCX0KLQotCS8qIFByb2Nlc3MgYmFycmllciBl dmVudHMgKi8KLQlpZiAoUHJvY1NpZ25hbEJhcnJpZXJQZW5kaW5nKQotCQlQcm9jZXNzUHJv Y1NpZ25hbEJhcnJpZXIoKTsKLQotCS8qIFBlcmZvcm0gbG9nZ2luZyBvZiBtZW1vcnkgY29u dGV4dHMgb2YgdGhpcyBwcm9jZXNzICovCi0JaWYgKExvZ01lbW9yeUNvbnRleHRQZW5kaW5n KQotCQlQcm9jZXNzTG9nTWVtb3J5Q29udGV4dEludGVycnVwdCgpOwotCi0JLyogUHJvY2Vz cyBzaW52YWwgY2F0Y2h1cCBpbnRlcnJ1cHRzIHRoYXQgaGFwcGVuZWQgd2hpbGUgc2xlZXBp bmcgKi8KLQlQcm9jZXNzQ2F0Y2h1cEludGVycnVwdCgpOwogfQogCiAvKgpAQCAtNzk5LDcg Kzc4Nyw3IEBAIEF1dG9WYWNMYXVuY2hlclNodXRkb3duKHZvaWQpCiB7CiAJZXJlcG9ydChE RUJVRzEsCiAJCQkoZXJybXNnX2ludGVybmFsKCJhdXRvdmFjdXVtIGxhdW5jaGVyIHNodXR0 aW5nIGRvd24iKSkpOwotCUF1dG9WYWN1dW1TaG1lbS0+YXZfbGF1bmNoZXJwaWQgPSAwOwor CUF1dG9WYWN1dW1TaG1lbS0+YXZfbGF1bmNoZXJQcm9jID0gSU5WQUxJRF9QUk9DX05VTUJF UjsKIAogCXByb2NfZXhpdCgwKTsJCQkJLyogZG9uZSAqLwogfQpAQCAtMTM1Nyw4ICsxMzQ1 LDggQEAgbGF1bmNoX3dvcmtlcihUaW1lc3RhbXBUeiBub3cpCiAKIC8qCiAgKiBDYWxsZWQg ZnJvbSBwb3N0bWFzdGVyIHRvIHNpZ25hbCBhIGZhaWx1cmUgdG8gZm9yayBhIHByb2Nlc3Mg dG8gYmVjb21lCi0gKiB3b3JrZXIuICBUaGUgcG9zdG1hc3RlciBzaG91bGQga2lsbChTSUdV U1IyKSB0aGUgbGF1bmNoZXIgc2hvcnRseQotICogYWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0 aW9uLgorICogd29ya2VyLiAgVGhlIHBvc3RtYXN0ZXIgc2hvdWxkIHNlbmQgSU5URVJSVVBU X0FVVE9WQUNVVU1fV09SS0VSX0ZJTklTSEVEIHRvCisgKiB0aGUgbGF1bmNoZXIgc2hvcnRs eSBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCiAgKi8KIHZvaWQKIEF1dG9WYWNXb3Jr ZXJGYWlsZWQodm9pZCkKQEAgLTEzNjYsMTQgKzEzNTQsNiBAQCBBdXRvVmFjV29ya2VyRmFp bGVkKHZvaWQpCiAJQXV0b1ZhY3V1bVNobWVtLT5hdl9zaWduYWxbQXV0b1ZhY0ZvcmtGYWls ZWRdID0gdHJ1ZTsKIH0KIAotLyogU0lHVVNSMjogYSB3b3JrZXIgaXMgdXAgYW5kIHJ1bm5p bmcsIG9yIGp1c3QgZmluaXNoZWQsIG9yIGZhaWxlZCB0byBmb3JrICovCi1zdGF0aWMgdm9p ZAotYXZsX3NpZ3VzcjJfaGFuZGxlcihTSUdOQUxfQVJHUykKLXsKLQlnb3RfU0lHVVNSMiA9 IHRydWU7Ci0JU2V0TGF0Y2goTXlMYXRjaCk7Ci19Ci0KIAogLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAg KgkJCQkJICBBVVRPVkFDVVVNIFdPUktFUiBDT0RFCkBAIC0xNDA3LDIyICsxMzg3LDE3IEBA IEF1dG9WYWNXb3JrZXJNYWluKGNvbnN0IHZvaWQgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0 YXJ0dXBfZGF0YV9sZW4pCiAJICogYmFja2VuZCwgc28gd2UgdXNlIHRoZSBzYW1lIHNpZ25h bCBoYW5kbGluZy4gIFNlZSBlcXVpdmFsZW50IGNvZGUgaW4KIAkgKiB0Y29wL3Bvc3RncmVz LmMuCiAJICovCi0JcHFzaWduYWwoU0lHSFVQLCBTaWduYWxIYW5kbGVyRm9yQ29uZmlnUmVs b2FkKTsKKworCUluaXRpYWxpemVUaW1lb3V0cygpOwkJLyogZXN0YWJsaXNoZXMgU0lHQUxS TSBoYW5kbGVyICovCisKKwlTZXRTdGFuZGFyZEludGVycnVwdEhhbmRsZXJzKCk7CiAKIAkv KgogCSAqIFNJR0lOVCBpcyB1c2VkIHRvIHNpZ25hbCBjYW5jZWxpbmcgdGhlIGN1cnJlbnQg dGFibGUncyB2YWN1dW07IFNJR1RFUk0KLQkgKiBtZWFucyBhYm9ydCBhbmQgZXhpdCBjbGVh bmx5LCBhbmQgU0lHUVVJVCBtZWFucyBhYmFuZG9uIHNoaXAuCisJICogbWVhbnMgYWJvcnQg YW5kIGV4aXQgY2xlYW5seSwgYW5kIFNJR1FVSVQgbWVhbnMgYWJhbmRvbiBzaGlwLiBYWFgK IAkgKi8KLQlwcXNpZ25hbChTSUdJTlQsIFN0YXRlbWVudENhbmNlbEhhbmRsZXIpOwotCXBx c2lnbmFsKFNJR1RFUk0sIGRpZSk7Ci0JLyogU0lHUVVJVCBoYW5kbGVyIHdhcyBhbHJlYWR5 IHNldCB1cCBieSBJbml0UG9zdG1hc3RlckNoaWxkICovCi0KLQlJbml0aWFsaXplVGltZW91 dHMoKTsJCS8qIGVzdGFibGlzaGVzIFNJR0FMUk0gaGFuZGxlciAqLwotCi0JcHFzaWduYWwo U0lHUElQRSwgU0lHX0lHTik7Ci0JcHFzaWduYWwoU0lHVVNSMSwgcHJvY3NpZ25hbF9zaWd1 c3IxX2hhbmRsZXIpOwotCXBxc2lnbmFsKFNJR1VTUjIsIFNJR19JR04pOwotCXBxc2lnbmFs KFNJR0ZQRSwgRmxvYXRFeGNlcHRpb25IYW5kbGVyKTsKKwlTZXRJbnRlcnJ1cHRIYW5kbGVy KElOVEVSUlVQVF9RVUVSWV9DQU5DRUwsIFByb2Nlc3NRdWVyeUNhbmNlbEludGVycnVwdCk7 CisJRW5hYmxlSW50ZXJydXB0KElOVEVSUlVQVF9RVUVSWV9DQU5DRUwpOwogCiAJLyoKIAkg KiBDcmVhdGUgYSBwZXItYmFja2VuZCBQR1BST0Mgc3RydWN0IGluIHNoYXJlZCBtZW1vcnku ICBXZSBtdXN0IGRvIHRoaXMKQEAgLTE1NDksOCArMTUyNCw4IEBAIEF1dG9WYWNXb3JrZXJN YWluKGNvbnN0IHZvaWQgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4p CiAJCW9uX3NobWVtX2V4aXQoRnJlZVdvcmtlckluZm8sIDApOwogCiAJCS8qIHdha2UgdXAg dGhlIGxhdW5jaGVyICovCi0JCWlmIChBdXRvVmFjdXVtU2htZW0tPmF2X2xhdW5jaGVycGlk ICE9IDApCi0JCQlraWxsKEF1dG9WYWN1dW1TaG1lbS0+YXZfbGF1bmNoZXJwaWQsIFNJR1VT UjIpOworCQlpZiAoQXV0b1ZhY3V1bVNobWVtLT5hdl9sYXVuY2hlclByb2MgIT0gSU5WQUxJ RF9QUk9DX05VTUJFUikKKwkJCVNlbmRJbnRlcnJ1cHQoSU5URVJSVVBUX0FVVE9WQUNVVU1f V09SS0VSX0ZJTklTSEVELCBBdXRvVmFjdXVtU2htZW0tPmF2X2xhdW5jaGVyUHJvYyk7CiAJ fQogCWVsc2UKIAl7CkBAIC0yMjkyLDkgKzIyNjcsOCBAQCBkb19hdXRvdmFjdXVtKHZvaWQp CiAJCS8qCiAJCSAqIENoZWNrIGZvciBjb25maWcgY2hhbmdlcyBiZWZvcmUgcHJvY2Vzc2lu ZyBlYWNoIGNvbGxlY3RlZCB0YWJsZS4KIAkJICovCi0JCWlmIChDb25maWdSZWxvYWRQZW5k aW5nKQorCQlpZiAoQ29uc3VtZUludGVycnVwdChJTlRFUlJVUFRfQ09ORklHX1JFTE9BRCkp CiAJCXsKLQkJCUNvbmZpZ1JlbG9hZFBlbmRpbmcgPSBmYWxzZTsKIAkJCVByb2Nlc3NDb25m aWdGaWxlKFBHQ19TSUdIVVApOwogCiAJCQkvKgpAQCAtMjQ1Miw3ICsyNDI2LDcgQEAgZG9f YXV0b3ZhY3V1bSh2b2lkKQogCQkJICogY3VycmVudCB0YWJsZSAod2UncmUgZG9uZSB3aXRo IGl0LCBzbyBpdCB3b3VsZCBtYWtlIG5vIHNlbnNlIHRvCiAJCQkgKiBjYW5jZWwgYXQgdGhp cyBwb2ludC4pCiAJCQkgKi8KLQkJCVF1ZXJ5Q2FuY2VsUGVuZGluZyA9IGZhbHNlOworCQkJ Q2xlYXJJbnRlcnJ1cHQoSU5URVJSVVBUX1FVRVJZX0NBTkNFTCk7CiAJCX0KIAkJUEdfQ0FU Q0goKTsKIAkJewpAQCAtMjU0MSw5ICsyNTE1LDggQEAgZGVsZXRlZDoKIAkJICogQ2hlY2sg Zm9yIGNvbmZpZyBjaGFuZ2VzIGJlZm9yZSBhY3F1aXJpbmcgbG9jayBmb3IgZnVydGhlciBq b2JzLgogCQkgKi8KIAkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKLQkJaWYgKENvbmZpZ1Jl bG9hZFBlbmRpbmcpCisJCWlmIChDb25zdW1lSW50ZXJydXB0KElOVEVSUlVQVF9DT05GSUdf UkVMT0FEKSkKIAkJewotCQkJQ29uZmlnUmVsb2FkUGVuZGluZyA9IGZhbHNlOwogCQkJUHJv Y2Vzc0NvbmZpZ0ZpbGUoUEdDX1NJR0hVUCk7CiAJCQlWYWN1dW1VcGRhdGVDb3N0cygpOwog CQl9CkBAIC0yNjY1LDcgKzI2MzgsNyBAQCBwZXJmb3JtX3dvcmtfaXRlbShBdXRvVmFjdXVt V29ya0l0ZW0gKndvcmtpdGVtKQogCQkgKiAod2UncmUgZG9uZSB3aXRoIGl0LCBzbyBpdCB3 b3VsZCBtYWtlIG5vIHNlbnNlIHRvIGNhbmNlbCBhdCB0aGlzCiAJCSAqIHBvaW50LikKIAkJ ICovCi0JCVF1ZXJ5Q2FuY2VsUGVuZGluZyA9IGZhbHNlOworCQlDbGVhckludGVycnVwdChJ TlRFUlJVUFRfUVVFUllfQ0FOQ0VMKTsKIAl9CiAJUEdfQ0FUQ0goKTsKIAl7CkBAIC0zMzkz LDcgKzMzNjYsNyBAQCBBdXRvVmFjdXVtU2htZW1Jbml0KHZvaWQpCiAKIAkJQXNzZXJ0KCFm b3VuZCk7CiAKLQkJQXV0b1ZhY3V1bVNobWVtLT5hdl9sYXVuY2hlcnBpZCA9IDA7CisJCUF1 dG9WYWN1dW1TaG1lbS0+YXZfbGF1bmNoZXJQcm9jID0gSU5WQUxJRF9QUk9DX05VTUJFUjsK IAkJZGNsaXN0X2luaXQoJkF1dG9WYWN1dW1TaG1lbS0+YXZfZnJlZVdvcmtlcnMpOwogCQlk bGlzdF9pbml0KCZBdXRvVmFjdXVtU2htZW0tPmF2X3J1bm5pbmdXb3JrZXJzKTsKIAkJQXV0 b1ZhY3V1bVNobWVtLT5hdl9zdGFydGluZ1dvcmtlciA9IE5VTEw7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1eHByb2Nlc3MuYyBiL3NyYy9iYWNrZW5kL3Bvc3Rt YXN0ZXIvYXV4cHJvY2Vzcy5jCmluZGV4IDhlYTgwMGMwYmJkLi5lZTE2ZTljYjAyNSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXhwcm9jZXNzLmMKKysrIGIvc3Jj L2JhY2tlbmQvcG9zdG1hc3Rlci9hdXhwcm9jZXNzLmMKQEAgLTE1LDcgKzE1LDYgQEAKICNp bmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDxzaWduYWwuaD4KIAotI2luY2x1ZGUgIm1p c2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIv YXV4cHJvY2Vzcy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvY29uZGl0aW9uX3ZhcmlhYmxlLmgi CkBAIC0yMyw2ICsyMiw3IEBACiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9wcm9jc2lnbmFsLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIK KyNpbmNsdWRlICJ1dGlscy9yZXNvd25lci5oIgogI2luY2x1ZGUgInV0aWxzL3BzX3N0YXR1 cy5oIgogCiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3b3JrZXIu YyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3b3JrZXIuYwppbmRleCAwNmNmYWRhZjg4 YS4uMTI3YWVjOTM0YzkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3 b3JrZXIuYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMKQEAgLTEz LDYgKzEzLDggQEAKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCiAjaW5jbHVkZSAiYWNjZXNz L3BhcmFsbGVsLmgiCisjaW5jbHVkZSAiaXBjL2ludGVycnVwdC5oIgorI2luY2x1ZGUgImlw Yy9zaWduYWxfaGFuZGxlcnMuaCIKICNpbmNsdWRlICJsaWJwcS9wcXNpZ25hbC5oIgogI2lu Y2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgpAQCAtMjIsMTIgKzI0 LDEwIEBACiAjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbGxhdW5jaGVyLmgiCiAjaW5j bHVkZSAicmVwbGljYXRpb24vbG9naWNhbHdvcmtlci5oIgogI2luY2x1ZGUgInN0b3JhZ2Uv aXBjLmgiCi0jaW5jbHVkZSAic3RvcmFnZS9sYXRjaC5oIgogI2luY2x1ZGUgInN0b3JhZ2Uv bHdsb2NrLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wbXNpZ25hbC5oIgogI2luY2x1ZGUgInN0 b3JhZ2UvcHJvYy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY2FycmF5LmgiCi0jaW5jbHVk ZSAic3RvcmFnZS9wcm9jc2lnbmFsLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zaG1lbS5oIgog I2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKICNpbmNsdWRlICJ1dGlscy9hc2NpaS5oIgpA QCAtNzksNiArNzksOCBAQCB0eXBlZGVmIHN0cnVjdCBCYWNrZ3JvdW5kV29ya2VyU2xvdAog CXBpZF90CQlwaWQ7CQkJLyogSW52YWxpZFBpZCA9IG5vdCBzdGFydGVkIHlldDsgMCA9IGRl YWQgKi8KIAl1aW50NjQJCWdlbmVyYXRpb247CQkvKiBpbmNyZW1lbnRlZCB3aGVuIHNsb3Qg aXMgcmVjeWNsZWQgKi8KIAlCYWNrZ3JvdW5kV29ya2VyIHdvcmtlcjsKKwlpbnQJCQlub3Rp ZnlfcG1jaGlsZDsKKwlQcm9jTnVtYmVyCW5vdGlmeV9wcm9jX251bWJlcjsKIH0gQmFja2dy b3VuZFdvcmtlclNsb3Q7CiAKIC8qCkBAIC0xOTYsOCArMTk4LDkgQEAgQmFja2dyb3VuZFdv cmtlclNobWVtSW5pdCh2b2lkKQogCQkJc2xvdC0+dGVybWluYXRlID0gZmFsc2U7CiAJCQlz bG90LT5waWQgPSBJbnZhbGlkUGlkOwogCQkJc2xvdC0+Z2VuZXJhdGlvbiA9IDA7CisJCQlz bG90LT5ub3RpZnlfcG1jaGlsZCA9IDA7CisJCQlzbG90LT5ub3RpZnlfcHJvY19udW1iZXIg PSBJTlZBTElEX1BST0NfTlVNQkVSOwogCQkJcnctPnJ3X3NobWVtX3Nsb3QgPSBzbG90bm87 Ci0JCQlydy0+cndfd29ya2VyLmJnd19ub3RpZnlfcGlkID0gMDsJLyogbWlnaHQgYmUgcmVp bml0IGFmdGVyIGNyYXNoICovCiAJCQltZW1jcHkoJnNsb3QtPndvcmtlciwgJnJ3LT5yd193 b3JrZXIsIHNpemVvZihCYWNrZ3JvdW5kV29ya2VyKSk7CiAJCQkrK3Nsb3RubzsKIAkJfQpA QCAtMjM4LDYgKzI0MSwxNCBAQCBGaW5kUmVnaXN0ZXJlZFdvcmtlckJ5U2xvdE51bWJlcihp bnQgc2xvdG5vKQogCXJldHVybiBOVUxMOwogfQogCitQcm9jTnVtYmVyCitHZXROb3RpZnlQ cm9jTnVtYmVyRm9yUmVnaXN0ZXJlZFdvcmtlcihSZWdpc3RlcmVkQmdXb3JrZXIgKnJ3KQor eworCUJhY2tncm91bmRXb3JrZXJTbG90ICpzbG90ID0gJkJhY2tncm91bmRXb3JrZXJEYXRh LT5zbG90W3J3LT5yd19zaG1lbV9zbG90XTsKKworCXJldHVybiBzbG90LT5ub3RpZnlfcHJv Y19udW1iZXI7Cit9CisKIC8qCiAgKiBOb3RpY2UgY2hhbmdlcyB0byBzaGFyZWQgbWVtb3J5 IG1hZGUgYnkgb3RoZXIgYmFja2VuZHMuCiAgKiBBY2NlcHQgbmV3IHdvcmtlciByZXF1ZXN0 cyBvbmx5IGlmIGFsbG93X25ld193b3JrZXJzIGlzIHRydWUuCkBAIC0zMTksMjAgKzMzMCwy MCBAQCBCYWNrZ3JvdW5kV29ya2VyU3RhdGVDaGFuZ2UoYm9vbCBhbGxvd19uZXdfd29ya2Vy cykKIAkJLyoKIAkJICogSWYgdGhlIHdvcmtlciBpcyBtYXJrZWQgZm9yIHRlcm1pbmF0aW9u LCB3ZSBkb24ndCBuZWVkIHRvIGFkZCBpdCB0bwogCQkgKiB0aGUgcmVnaXN0ZXJlZCB3b3Jr ZXJzIGxpc3Q7IHdlIGNhbiBqdXN0IGZyZWUgdGhlIHNsb3QuIEhvd2V2ZXIsIGlmCi0JCSAq IGJnd19ub3RpZnlfcGlkIGlzIHNldCwgdGhlIHByb2Nlc3MgdGhhdCByZWdpc3RlcmVkIHRo ZSB3b3JrZXIgbWF5Ci0JCSAqIG5lZWQgdG8ga25vdyB0aGF0IHdlJ3ZlIHByb2Nlc3NlZCB0 aGUgdGVybWluYXRlIHJlcXVlc3QsIHNvIGJlIHN1cmUKLQkJICogdG8gc2lnbmFsIGl0Lgor CQkgKiBiZ3dfbm90aWZ5X3Byb2NfbnVtYmVyIGlzIHNldCwgdGhlIHByb2Nlc3MgdGhhdCBy ZWdpc3RlcmVkIHRoZQorCQkgKiB3b3JrZXIgbWF5IG5lZWQgdG8ga25vdyB0aGF0IHdlJ3Zl IHByb2Nlc3NlZCB0aGUgdGVybWluYXRlIHJlcXVlc3QsCisJCSAqIHNvIGJlIHN1cmUgdG8g c2lnbmFsIGl0LgogCQkgKi8KIAkJaWYgKHNsb3QtPnRlcm1pbmF0ZSkKIAkJewotCQkJaW50 CQkJbm90aWZ5X3BpZDsKKwkJCVByb2NOdW1iZXIJbm90aWZ5X3Byb2NfbnVtYmVyOwogCiAJ CQkvKgogCQkJICogV2UgbmVlZCBhIG1lbW9yeSBiYXJyaWVyIGhlcmUgdG8gbWFrZSBzdXJl IHRoYXQgdGhlIGxvYWQgb2YKLQkJCSAqIGJnd19ub3RpZnlfcGlkIGFuZCB0aGUgdXBkYXRl IG9mIHBhcmFsbGVsX3Rlcm1pbmF0ZV9jb3VudAotCQkJICogY29tcGxldGUgYmVmb3JlIHRo ZSBzdG9yZSB0byBpbl91c2UuCisJCQkgKiBiZ3dfbm90aWZ5X3Byb2NfbnVtYmVyIGFuZCB0 aGUgdXBkYXRlIG9mCisJCQkgKiBwYXJhbGxlbF90ZXJtaW5hdGVfY291bnQgY29tcGxldGUg YmVmb3JlIHRoZSBzdG9yZSB0byBpbl91c2UuCiAJCQkgKi8KLQkJCW5vdGlmeV9waWQgPSBz bG90LT53b3JrZXIuYmd3X25vdGlmeV9waWQ7CisJCQlub3RpZnlfcHJvY19udW1iZXIgPSBz bG90LT5ub3RpZnlfcHJvY19udW1iZXI7CiAJCQlpZiAoKHNsb3QtPndvcmtlci5iZ3dfZmxh Z3MgJiBCR1dPUktFUl9DTEFTU19QQVJBTExFTCkgIT0gMCkKIAkJCQlCYWNrZ3JvdW5kV29y a2VyRGF0YS0+cGFyYWxsZWxfdGVybWluYXRlX2NvdW50Kys7CiAJCQlzbG90LT5waWQgPSAw OwpAQCAtMzQwLDggKzM1MSw4IEBAIEJhY2tncm91bmRXb3JrZXJTdGF0ZUNoYW5nZShib29s IGFsbG93X25ld193b3JrZXJzKQogCQkJcGdfbWVtb3J5X2JhcnJpZXIoKTsKIAkJCXNsb3Qt PmluX3VzZSA9IGZhbHNlOwogCi0JCQlpZiAobm90aWZ5X3BpZCAhPSAwKQotCQkJCWtpbGwo bm90aWZ5X3BpZCwgU0lHVVNSMSk7CisJCQlpZiAobm90aWZ5X3Byb2NfbnVtYmVyICE9IElO VkFMSURfUFJPQ19OVU1CRVIpCisJCQkJU2VuZEludGVycnVwdChJTlRFUlJVUFRfV0FJVF9X QUtFVVAsIG5vdGlmeV9wcm9jX251bWJlcik7CiAKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC0z ODcsMjMgKzM5OCw2IEBAIEJhY2tncm91bmRXb3JrZXJTdGF0ZUNoYW5nZShib29sIGFsbG93 X25ld193b3JrZXJzKQogCQlydy0+cndfd29ya2VyLmJnd19tYWluX2FyZyA9IHNsb3QtPndv cmtlci5iZ3dfbWFpbl9hcmc7CiAJCW1lbWNweShydy0+cndfd29ya2VyLmJnd19leHRyYSwg c2xvdC0+d29ya2VyLmJnd19leHRyYSwgQkdXX0VYVFJBTEVOKTsKIAotCQkvKgotCQkgKiBD b3B5IHRoZSBQSUQgdG8gYmUgbm90aWZpZWQgYWJvdXQgc3RhdGUgY2hhbmdlcywgYnV0IG9u bHkgaWYgdGhlCi0JCSAqIHBvc3RtYXN0ZXIga25vd3MgYWJvdXQgYSBiYWNrZW5kIHdpdGgg dGhhdCBQSUQuICBJdCBpc24ndCBhbiBlcnJvcgotCQkgKiBpZiB0aGUgcG9zdG1hc3RlciBk b2Vzbid0IGtub3cgYWJvdXQgdGhlIFBJRCwgYmVjYXVzZSB0aGUgYmFja2VuZAotCQkgKiB0 aGF0IHJlcXVlc3RlZCB0aGUgd29ya2VyIGNvdWxkIGhhdmUgZGllZCAob3IgYmVlbiBraWxs ZWQpIGp1c3QKLQkJICogYWZ0ZXIgZG9pbmcgc28uICBOb25ldGhlbGVzcywgYXQgbGVhc3Qg dW50aWwgd2UgZ2V0IHNvbWUgZXhwZXJpZW5jZQotCQkgKiB3aXRoIGhvdyB0aGlzIHBsYXlz IG91dCBpbiB0aGUgd2lsZCwgbG9nIGEgbWVzc2FnZSBhdCBhIHJlbGF0aXZlCi0JCSAqIGhp Z2ggZGVidWcgbGV2ZWwuCi0JCSAqLwotCQlydy0+cndfd29ya2VyLmJnd19ub3RpZnlfcGlk ID0gc2xvdC0+d29ya2VyLmJnd19ub3RpZnlfcGlkOwotCQlpZiAoIVBvc3RtYXN0ZXJNYXJr UElERm9yV29ya2VyTm90aWZ5KHJ3LT5yd193b3JrZXIuYmd3X25vdGlmeV9waWQpKQotCQl7 Ci0JCQllbG9nKERFQlVHMSwgIndvcmtlciBub3RpZmljYXRpb24gUElEICVkIGlzIG5vdCB2 YWxpZCIsCi0JCQkJIChpbnQpIHJ3LT5yd193b3JrZXIuYmd3X25vdGlmeV9waWQpOwotCQkJ cnctPnJ3X3dvcmtlci5iZ3dfbm90aWZ5X3BpZCA9IDA7Ci0JCX0KLQogCQkvKiBJbml0aWFs aXplIHBvc3RtYXN0ZXIgYm9va2tlZXBpbmcuICovCiAJCXJ3LT5yd19waWQgPSAwOwogCQly dy0+cndfY3Jhc2hlZF9hdCA9IDA7CkBAIC00MjUsNyArNDE5LDcgQEAgQmFja2dyb3VuZFdv cmtlclN0YXRlQ2hhbmdlKGJvb2wgYWxsb3dfbmV3X3dvcmtlcnMpCiAgKiBOT1RFOiBUaGUg ZW50cnkgaXMgdW5saW5rZWQgZnJvbSBCYWNrZ3JvdW5kV29ya2VyTGlzdC4gIElmIHRoZSBj YWxsZXIgaXMKICAqIGl0ZXJhdGluZyB0aHJvdWdoIGl0LCBiZXR0ZXIgdXNlIGEgbXV0YWJs ZSBpdGVyYXRvciEKICAqCi0gKiBDYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIG5vdGlmeWlu ZyBiZ3dfbm90aWZ5X3BpZCwgaWYgYXBwcm9wcmlhdGUuCisgKiBDYWxsZXIgaXMgcmVzcG9u c2libGUgZm9yIG5vdGlmeWluZyBiZ3dfbm90aWZ5X3Byb2NfbnVtYmVyLCBpZiBhcHByb3By aWF0ZS4KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgaW52b2tlZCBvbmx5IGluIHRo ZSBwb3N0bWFzdGVyLgogICovCkBAIC00NzAsOCArNDY0LDggQEAgUmVwb3J0QmFja2dyb3Vu ZFdvcmtlclBJRChSZWdpc3RlcmVkQmdXb3JrZXIgKnJ3KQogCXNsb3QgPSAmQmFja2dyb3Vu ZFdvcmtlckRhdGEtPnNsb3RbcnctPnJ3X3NobWVtX3Nsb3RdOwogCXNsb3QtPnBpZCA9IHJ3 LT5yd19waWQ7CiAKLQlpZiAocnctPnJ3X3dvcmtlci5iZ3dfbm90aWZ5X3BpZCAhPSAwKQot CQlraWxsKHJ3LT5yd193b3JrZXIuYmd3X25vdGlmeV9waWQsIFNJR1VTUjEpOworCWlmIChz bG90LT5ub3RpZnlfcHJvY19udW1iZXIgIT0gSU5WQUxJRF9QUk9DX05VTUJFUikKKwkJU2Vu ZEludGVycnVwdChJTlRFUlJVUFRfV0FJVF9XQUtFVVAsIHNsb3QtPm5vdGlmeV9wcm9jX251 bWJlcik7CiB9CiAKIC8qCkBAIC00ODcsMTIgKzQ4MSwxMiBAQCB2b2lkCiBSZXBvcnRCYWNr Z3JvdW5kV29ya2VyRXhpdChSZWdpc3RlcmVkQmdXb3JrZXIgKnJ3KQogewogCUJhY2tncm91 bmRXb3JrZXJTbG90ICpzbG90OwotCWludAkJCW5vdGlmeV9waWQ7CisJUHJvY051bWJlcglu b3RpZnlfcHJvY19udW1iZXI7CiAKIAlBc3NlcnQocnctPnJ3X3NobWVtX3Nsb3QgPCBtYXhf d29ya2VyX3Byb2Nlc3Nlcyk7CiAJc2xvdCA9ICZCYWNrZ3JvdW5kV29ya2VyRGF0YS0+c2xv dFtydy0+cndfc2htZW1fc2xvdF07CiAJc2xvdC0+cGlkID0gcnctPnJ3X3BpZDsKLQlub3Rp ZnlfcGlkID0gcnctPnJ3X3dvcmtlci5iZ3dfbm90aWZ5X3BpZDsKKwlub3RpZnlfcHJvY19u dW1iZXIgPSBzbG90LT5ub3RpZnlfcHJvY19udW1iZXI7CiAKIAkvKgogCSAqIElmIHRoaXMg d29ya2VyIGlzIHNsYXRlZCBmb3IgZGVyZWdpc3RyYXRpb24sIGRvIHRoYXQgYmVmb3JlIG5v dGlmeWluZwpAQCAtNTA1LDI3ICs0OTksMzQgQEAgUmVwb3J0QmFja2dyb3VuZFdvcmtlckV4 aXQoUmVnaXN0ZXJlZEJnV29ya2VyICpydykKIAkJcnctPnJ3X3dvcmtlci5iZ3dfcmVzdGFy dF90aW1lID09IEJHV19ORVZFUl9SRVNUQVJUKQogCQlGb3JnZXRCYWNrZ3JvdW5kV29ya2Vy KHJ3KTsKIAotCWlmIChub3RpZnlfcGlkICE9IDApCi0JCWtpbGwobm90aWZ5X3BpZCwgU0lH VVNSMSk7CisJaWYgKG5vdGlmeV9wcm9jX251bWJlciAhPSBJTlZBTElEX1BST0NfTlVNQkVS KQorCQlTZW5kSW50ZXJydXB0KElOVEVSUlVQVF9XQUlUX1dBS0VVUCwgbm90aWZ5X3Byb2Nf bnVtYmVyKTsKIH0KIAogLyoKLSAqIENhbmNlbCBTSUdVU1IxIG5vdGlmaWNhdGlvbnMgZm9y IGEgUElEIGJlbG9uZ2luZyB0byBhbiBleGl0aW5nIGJhY2tlbmQuCisgKiBDYW5jZWwgbm90 aWZpY2F0aW9ucyBmb3IgYSBiZ3dvcmtlciBiZWxvbmdpbmcgdG8gYW4gZXhpdGluZyBiYWNr ZW5kLgogICoKICAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20g dGhlIHBvc3RtYXN0ZXIuCiAgKi8KIHZvaWQKLUJhY2tncm91bmRXb3JrZXJTdG9wTm90aWZp Y2F0aW9ucyhwaWRfdCBwaWQpCitCYWNrZ3JvdW5kV29ya2VyU3RvcE5vdGlmaWNhdGlvbnMo aW50IHBtY2hpbGQpCiB7CiAJZGxpc3RfaXRlcglpdGVyOwogCiAJZGxpc3RfZm9yZWFjaChp dGVyLCAmQmFja2dyb3VuZFdvcmtlckxpc3QpCiAJewogCQlSZWdpc3RlcmVkQmdXb3JrZXIg KnJ3OworCQlCYWNrZ3JvdW5kV29ya2VyU2xvdCAqc2xvdDsKIAogCQlydyA9IGRsaXN0X2Nv bnRhaW5lcihSZWdpc3RlcmVkQmdXb3JrZXIsIHJ3X2xub2RlLCBpdGVyLmN1cik7Ci0JCWlm IChydy0+cndfd29ya2VyLmJnd19ub3RpZnlfcGlkID09IHBpZCkKLQkJCXJ3LT5yd193b3Jr ZXIuYmd3X25vdGlmeV9waWQgPSAwOworCQlBc3NlcnQocnctPnJ3X3NobWVtX3Nsb3QgPCBt YXhfd29ya2VyX3Byb2Nlc3Nlcyk7CisJCXNsb3QgPSAmQmFja2dyb3VuZFdvcmtlckRhdGEt PnNsb3RbcnctPnJ3X3NobWVtX3Nsb3RdOworCisJCWlmIChzbG90LT5ub3RpZnlfcG1jaGls ZCA9PSBwbWNoaWxkKQorCQl7CisJCQlzbG90LT5ub3RpZnlfcG1jaGlsZCA9IDA7CisJCQlz bG90LT5ub3RpZnlfcHJvY19udW1iZXIgPSBJTlZBTElEX1BST0NfTlVNQkVSOworCQl9CiAJ fQogfQogCkBAIC01NTcsMTQgKzU1OCwxNCBAQCBGb3JnZXRVbnN0YXJ0ZWRCYWNrZ3JvdW5k V29ya2Vycyh2b2lkKQogCiAJCS8qIElmIGl0J3Mgbm90IHlldCBzdGFydGVkLCBhbmQgdGhl cmUncyBzb21lb25lIHdhaXRpbmcgLi4uICovCiAJCWlmIChzbG90LT5waWQgPT0gSW52YWxp ZFBpZCAmJgotCQkJcnctPnJ3X3dvcmtlci5iZ3dfbm90aWZ5X3BpZCAhPSAwKQorCQkJc2xv dC0+bm90aWZ5X3Byb2NfbnVtYmVyICE9IElOVkFMSURfUFJPQ19OVU1CRVIpCiAJCXsKIAkJ CS8qIC4uLiB0aGVuIHphcCBpdCwgYW5kIG5vdGlmeSB0aGUgd2FpdGVyICovCi0JCQlpbnQJ CQlub3RpZnlfcGlkID0gcnctPnJ3X3dvcmtlci5iZ3dfbm90aWZ5X3BpZDsKKwkJCVByb2NO dW1iZXIJbm90aWZ5X3Byb2NfbnVtYmVyID0gc2xvdC0+bm90aWZ5X3Byb2NfbnVtYmVyOwog CiAJCQlGb3JnZXRCYWNrZ3JvdW5kV29ya2VyKHJ3KTsKLQkJCWlmIChub3RpZnlfcGlkICE9 IDApCi0JCQkJa2lsbChub3RpZnlfcGlkLCBTSUdVU1IxKTsKKwkJCWlmIChub3RpZnlfcHJv Y19udW1iZXIgIT0gSU5WQUxJRF9QUk9DX05VTUJFUikKKwkJCQlTZW5kSW50ZXJydXB0KElO VEVSUlVQVF9XQUlUX1dBS0VVUCwgbm90aWZ5X3Byb2NfbnVtYmVyKTsKIAkJfQogCX0KIH0K QEAgLTYxOCwxMSArNjE5LDYgQEAgUmVzZXRCYWNrZ3JvdW5kV29ya2VyQ3Jhc2hUaW1lcyh2 b2lkKQogCQkJICovCiAJCQlydy0+cndfY3Jhc2hlZF9hdCA9IDA7CiAJCQlydy0+cndfcGlk ID0gMDsKLQotCQkJLyoKLQkJCSAqIElmIHRoZXJlIHdhcyBhbnlvbmUgd2FpdGluZyBmb3Ig aXQsIHRoZXkncmUgaGlzdG9yeS4KLQkJCSAqLwotCQkJcnctPnJ3X3dvcmtlci5iZ3dfbm90 aWZ5X3BpZCA9IDA7CiAJCX0KIAl9CiB9CkBAIC03NTEsMzIgKzc0NywyOCBAQCBCYWNrZ3Jv dW5kV29ya2VyTWFpbihjb25zdCB2b2lkICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVw X2RhdGFfbGVuKQogCS8qCiAJICogU2V0IHVwIHNpZ25hbCBoYW5kbGVycy4KIAkgKi8KKwlT ZXRTdGFuZGFyZEludGVycnVwdEhhbmRsZXJzKCk7CiAJaWYgKHdvcmtlci0+Ymd3X2ZsYWdz ICYgQkdXT1JLRVJfQkFDS0VORF9EQVRBQkFTRV9DT05ORUNUSU9OKQogCXsKIAkJLyoKLQkJ ICogU0lHSU5UIGlzIHVzZWQgdG8gc2lnbmFsIGNhbmNlbGluZyB0aGUgY3VycmVudCBhY3Rp b24KKwkJICogRW5hYmxlIHF1ZXJ5IGNhbmNlbGxhdGlvbiBieSBkZWZhdWx0LiBUaGUgYmFj a2dyb3VuZCB3b3JrZXIgbWF5CisJCSAqIGRpc2FibGUgZm9yIG1vcmUgY29udHJvbCBvbiB3 aGVuIGNhbmNlbGxhdGlvbnMgYXJlIGFjY2VwdGVkLgogCQkgKi8KLQkJcHFzaWduYWwoU0lH SU5ULCBTdGF0ZW1lbnRDYW5jZWxIYW5kbGVyKTsKLQkJcHFzaWduYWwoU0lHVVNSMSwgcHJv Y3NpZ25hbF9zaWd1c3IxX2hhbmRsZXIpOwotCQlwcXNpZ25hbChTSUdGUEUsIEZsb2F0RXhj ZXB0aW9uSGFuZGxlcik7CisJCVNldEludGVycnVwdEhhbmRsZXIoSU5URVJSVVBUX1FVRVJZ X0NBTkNFTCwgUHJvY2Vzc1F1ZXJ5Q2FuY2VsSW50ZXJydXB0KTsKKwkJRW5hYmxlSW50ZXJy dXB0KElOVEVSUlVQVF9RVUVSWV9DQU5DRUwpOwogCi0JCS8qIFhYWCBBbnkgb3RoZXIgaGFu ZGxlcnMgbmVlZGVkIGhlcmU/ICovCisJCS8qIGxpa2UgaW4gcmVndWxhciBiYWNrZW5kcyAq LworCQlwcXNpZ25hbChTSUdGUEUsIEZsb2F0RXhjZXB0aW9uSGFuZGxlcik7CiAJfQogCWVs c2UKIAl7CisJCS8qIG5vIGNhbmNlbGxhdGlvbiBpbiBiYWNrZW5kcyB0aGF0IGRvbid0IHJ1 biBxdWVyaWVzICovCiAJCXBxc2lnbmFsKFNJR0lOVCwgU0lHX0lHTik7Ci0JCXBxc2lnbmFs KFNJR1VTUjEsIFNJR19JR04pOwogCQlwcXNpZ25hbChTSUdGUEUsIFNJR19JR04pOwogCX0K LQlwcXNpZ25hbChTSUdURVJNLCBkaWUpOwotCS8qIFNJR1FVSVQgaGFuZGxlciB3YXMgYWxy ZWFkeSBzZXQgdXAgYnkgSW5pdFBvc3RtYXN0ZXJDaGlsZCAqLwotCXBxc2lnbmFsKFNJR0hV UCwgU0lHX0lHTik7CiAKIAlJbml0aWFsaXplVGltZW91dHMoKTsJCS8qIGVzdGFibGlzaGVz IFNJR0FMUk0gaGFuZGxlciAqLwogCi0JcHFzaWduYWwoU0lHUElQRSwgU0lHX0lHTik7Ci0J cHFzaWduYWwoU0lHVVNSMiwgU0lHX0lHTik7Ci0KIAkvKgogCSAqIElmIGFuIGV4Y2VwdGlv biBpcyBlbmNvdW50ZXJlZCwgcHJvY2Vzc2luZyByZXN1bWVzIGhlcmUuCiAJICoKQEAgLTk4 MiwxNSArOTc0LDYgQEAgUmVnaXN0ZXJCYWNrZ3JvdW5kV29ya2VyKEJhY2tncm91bmRXb3Jr ZXIgKndvcmtlcikKIAlpZiAoIVNhbml0eUNoZWNrQmFja2dyb3VuZFdvcmtlcih3b3JrZXIs IExPRykpCiAJCXJldHVybjsKIAotCWlmICh3b3JrZXItPmJnd19ub3RpZnlfcGlkICE9IDAp Ci0JewotCQllcmVwb3J0KExPRywKLQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9U X1NVUFBPUlRFRCksCi0JCQkJIGVycm1zZygiYmFja2dyb3VuZCB3b3JrZXIgXCIlc1wiOiBv bmx5IGR5bmFtaWMgYmFja2dyb3VuZCB3b3JrZXJzIGNhbiByZXF1ZXN0IG5vdGlmaWNhdGlv biIsCi0JCQkJCQl3b3JrZXItPmJnd19uYW1lKSkpOwotCQlyZXR1cm47Ci0JfQotCiAJLyoK IAkgKiBFbmZvcmNlIG1heGltdW0gbnVtYmVyIG9mIHdvcmtlcnMuICBOb3RlIHRoaXMgaXMg b3Zlcmx5IHJlc3RyaWN0aXZlOiB3ZQogCSAqIGNvdWxkIGFsbG93IG1vcmUgbm9uLXNobWVt LWNvbm5lY3RlZCB3b3JrZXJzLCBiZWNhdXNlIHRoZXNlIGRvbid0IGNvdW50CkBAIC0xMTA2 LDYgKzEwODksMjUgQEAgUmVnaXN0ZXJEeW5hbWljQmFja2dyb3VuZFdvcmtlcihCYWNrZ3Jv dW5kV29ya2VyICp3b3JrZXIsCiAJCQlpZiAocGFyYWxsZWwpCiAJCQkJQmFja2dyb3VuZFdv cmtlckRhdGEtPnBhcmFsbGVsX3JlZ2lzdGVyX2NvdW50Kys7CiAKKwkJCWlmICgoc2xvdC0+ d29ya2VyLmJnd19mbGFncyAmIEJHV09SS0VSX1NITUVNX0FDQ0VTUykgIT0gMCAmJgorCQkJ CShzbG90LT53b3JrZXIuYmd3X2ZsYWdzICYgQkdXT1JLRVJfTk9fTk9USUZZKSA9PSAwKQor CQkJeworCQkJCS8qCisJCQkJICogU2V0IG5vdGlmeV9wcm9jX251bWJlciBzbyB0aGF0IHBv c3RtYXN0ZXIgd2lsbCBzZW5kIHVzIGFuCisJCQkJICogaW50ZXJydXB0LiBBbHNvIHJlbWVt YmVyIHRoZSBwbWNoaWxkIHNsb3QgbnVtYmVyOworCQkJCSAqIHBvc3RtYXN0ZXIgbmVlZHMg aXQgdG8gZGV0ZWN0IHdoZW4gd2UgZXhpdCwgdG8gZGlzYXJtIHRoZQorCQkJCSAqIG5vdGlm aWNhdGlvbi4KKwkJCQkgKi8KKwkJCQlzbG90LT5ub3RpZnlfcG1jaGlsZCA9IE15UE1DaGls ZFNsb3Q7CisJCQkJc2xvdC0+bm90aWZ5X3Byb2NfbnVtYmVyID0gTXlQcm9jTnVtYmVyOwor CQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8qIE5vIG5vdGlmaWNhdGlvbnMuICovCisJCQkJ c2xvdC0+bm90aWZ5X3BtY2hpbGQgPSAwOworCQkJCXNsb3QtPm5vdGlmeV9wcm9jX251bWJl ciA9IElOVkFMSURfUFJPQ19OVU1CRVI7CisJCQl9CisKIAkJCS8qCiAJCQkgKiBNYWtlIHN1 cmUgcG9zdG1hc3RlciBkb2Vzbid0IHNlZSB0aGUgc2xvdCBhcyBpbiB1c2UgYmVmb3JlIGl0 CiAJCQkgKiBzZWVzIHRoZSBuZXcgY29udGVudHMuCkBAIC0xMjA2LDggKzEyMDgsOSBAQCBH ZXRCYWNrZ3JvdW5kV29ya2VyUGlkKEJhY2tncm91bmRXb3JrZXJIYW5kbGUgKmhhbmRsZSwg cGlkX3QgKnBpZHApCiAgKiBCR1dIX1BPU1RNQVNURVJfRElFRCwgc2luY2UgaXQgdGhhdCBj YXNlIHdlIGtub3cgdGhhdCBzdGFydHVwIHdpbGwgbm90CiAgKiB0YWtlIHBsYWNlLgogICoK LSAqIFRoZSBjYWxsZXIgKm11c3QqIGhhdmUgc2V0IG91ciBQSUQgYXMgdGhlIHdvcmtlcidz IGJnd19ub3RpZnlfcGlkLAotICogZWxzZSB3ZSB3aWxsIG5vdCBiZSBhd29rZW4gcHJvbXB0 bHkgd2hlbiB0aGUgd29ya2VyJ3Mgc3RhdGUgY2hhbmdlcy4KKyAqIFRoaXMgd29ya3Mgb25s eSBpZiB0aGUgd29ya2VyIHdhcyByZWdpc3RlcmVkIHdpdGggQkdXT1JLRVJfU0hNRU1fQUND RVNTIGFuZAorICogd2l0aG91dCBCR1dPUktFUl9OT19OT1RJRlksIGVsc2Ugd2Ugd2lsbCBu b3QgYmUgYXdva2VuIHByb21wdGx5IHdoZW4gdGhlCisgKiB3b3JrZXIncyBzdGF0ZSBjaGFu Z2VzLgogICovCiBCZ3dIYW5kbGVTdGF0dXMKIFdhaXRGb3JCYWNrZ3JvdW5kV29ya2VyU3Rh cnR1cChCYWNrZ3JvdW5kV29ya2VySGFuZGxlICpoYW5kbGUsIHBpZF90ICpwaWRwKQpAQCAt MTIyNyw5ICsxMjMwLDkgQEAgV2FpdEZvckJhY2tncm91bmRXb3JrZXJTdGFydHVwKEJhY2tn cm91bmRXb3JrZXJIYW5kbGUgKmhhbmRsZSwgcGlkX3QgKnBpZHApCiAJCWlmIChzdGF0dXMg IT0gQkdXSF9OT1RfWUVUX1NUQVJURUQpCiAJCQlicmVhazsKIAotCQlyYyA9IFdhaXRMYXRj aChNeUxhdGNoLAotCQkJCQkgICBXTF9MQVRDSF9TRVQgfCBXTF9QT1NUTUFTVEVSX0RFQVRI LCAwLAotCQkJCQkgICBXQUlUX0VWRU5UX0JHV09SS0VSX1NUQVJUVVApOworCQlyYyA9IFdh aXRJbnRlcnJ1cHQoQ2hlY2tGb3JJbnRlcnJ1cHRzTWFzayB8IElOVEVSUlVQVF9XQUlUX1dB S0VVUCwKKwkJCQkJCSAgIFdMX0lOVEVSUlVQVCB8IFdMX1BPU1RNQVNURVJfREVBVEgsIDAs CisJCQkJCQkgICBXQUlUX0VWRU5UX0JHV09SS0VSX1NUQVJUVVApOwogCiAJCWlmIChyYyAm IFdMX1BPU1RNQVNURVJfREVBVEgpCiAJCXsKQEAgLTEyMzcsNyArMTI0MCw3IEBAIFdhaXRG b3JCYWNrZ3JvdW5kV29ya2VyU3RhcnR1cChCYWNrZ3JvdW5kV29ya2VySGFuZGxlICpoYW5k bGUsIHBpZF90ICpwaWRwKQogCQkJYnJlYWs7CiAJCX0KIAotCQlSZXNldExhdGNoKE15TGF0 Y2gpOworCQlDbGVhckludGVycnVwdChJTlRFUlJVUFRfV0FJVF9XQUtFVVApOwogCX0KIAog CXJldHVybiBzdGF0dXM7CkBAIC0xMjUxLDggKzEyNTQsOSBAQCBXYWl0Rm9yQmFja2dyb3Vu ZFdvcmtlclN0YXJ0dXAoQmFja2dyb3VuZFdvcmtlckhhbmRsZSAqaGFuZGxlLCBwaWRfdCAq cGlkcCkKICAqIHVwIGFuZCByZXR1cm4gQkdXSF9QT1NUTUFTVEVSX0RJRUQsIGJlY2F1c2Ug aXQncyB0aGUgcG9zdG1hc3RlciB0aGF0CiAgKiBub3RpZmllcyB1cyB3aGVuIGEgd29ya2Vy J3Mgc3RhdGUgY2hhbmdlcy4KICAqCi0gKiBUaGUgY2FsbGVyICptdXN0KiBoYXZlIHNldCBv dXIgUElEIGFzIHRoZSB3b3JrZXIncyBiZ3dfbm90aWZ5X3BpZCwKLSAqIGVsc2Ugd2Ugd2ls bCBub3QgYmUgYXdva2VuIHByb21wdGx5IHdoZW4gdGhlIHdvcmtlcidzIHN0YXRlIGNoYW5n ZXMuCisgKiBUaGlzIHdvcmtzIG9ubHkgaWYgdGhlIHdvcmtlciB3YXMgcmVnaXN0ZXJlZCB3 aXRoIEJHV09SS0VSX1NITUVNX0FDQ0VTUyBhbmQKKyAqIHdpdGhvdXQgQkdXT1JLRVJfTk9f Tk9USUZZLCBlbHNlIHdlIHdpbGwgbm90IGJlIGF3b2tlbiBwcm9tcHRseSB3aGVuIHRoZQor ICogd29ya2VyJ3Mgc3RhdGUgY2hhbmdlcy4KICAqLwogQmd3SGFuZGxlU3RhdHVzCiBXYWl0 Rm9yQmFja2dyb3VuZFdvcmtlclNodXRkb3duKEJhY2tncm91bmRXb3JrZXJIYW5kbGUgKmhh bmRsZSkKQEAgLTEyNzAsOSArMTI3NCw5IEBAIFdhaXRGb3JCYWNrZ3JvdW5kV29ya2VyU2h1 dGRvd24oQmFja2dyb3VuZFdvcmtlckhhbmRsZSAqaGFuZGxlKQogCQlpZiAoc3RhdHVzID09 IEJHV0hfU1RPUFBFRCkKIAkJCWJyZWFrOwogCi0JCXJjID0gV2FpdExhdGNoKE15TGF0Y2gs Ci0JCQkJCSAgIFdMX0xBVENIX1NFVCB8IFdMX1BPU1RNQVNURVJfREVBVEgsIDAsCi0JCQkJ CSAgIFdBSVRfRVZFTlRfQkdXT1JLRVJfU0hVVERPV04pOworCQlyYyA9IFdhaXRJbnRlcnJ1 cHQoQ2hlY2tGb3JJbnRlcnJ1cHRzTWFzayB8IElOVEVSUlVQVF9XQUlUX1dBS0VVUCwKKwkJ CQkJCSAgIFdMX0lOVEVSUlVQVCB8IFdMX1BPU1RNQVNURVJfREVBVEgsIDAsCisJCQkJCQkg ICBXQUlUX0VWRU5UX0JHV09SS0VSX1NIVVRET1dOKTsKIAogCQlpZiAocmMgJiBXTF9QT1NU TUFTVEVSX0RFQVRIKQogCQl7CkBAIC0xMjgwLDcgKzEyODQsNyBAQCBXYWl0Rm9yQmFja2dy b3VuZFdvcmtlclNodXRkb3duKEJhY2tncm91bmRXb3JrZXJIYW5kbGUgKmhhbmRsZSkKIAkJ CWJyZWFrOwogCQl9CiAKLQkJUmVzZXRMYXRjaChNeUxhdGNoKTsKKwkJQ2xlYXJJbnRlcnJ1 cHQoSU5URVJSVVBUX1dBSVRfV0FLRVVQKTsKIAl9CiAKIAlyZXR1cm4gc3RhdHVzOwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dyaXRlci5jIGIvc3JjL2JhY2tl bmQvcG9zdG1hc3Rlci9iZ3dyaXRlci5jCmluZGV4IGEzNTk0ODc1YzM0Li4xNGJhM2FlYjgy ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dyaXRlci5jCisrKyBi L3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3cml0ZXIuYwpAQCAtMzIsMTIgKzMyLDEzIEBA CiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAogI2luY2x1ZGUgImFjY2Vzcy94bG9nLmgiCisj aW5jbHVkZSAiaXBjL2ludGVycnVwdC5oIgorI2luY2x1ZGUgImlwYy9zaWduYWxfaGFuZGxl cnMuaCIKICNpbmNsdWRlICJsaWJwcS9wcXNpZ25hbC5oIgogI2luY2x1ZGUgIm1pc2NhZG1p bi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvYXV4cHJv Y2Vzcy5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvYmd3cml0ZXIuaCIKLSNpbmNsdWRlICJw b3N0bWFzdGVyL2ludGVycnVwdC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYWlvX3N1YnN5cy5o IgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmX2ludGVybmFscy5oIgogI2luY2x1ZGUgInN0b3Jh Z2UvYnVmbWdyLmgiCkBAIC05OCwxNiArOTksMjAgQEAgQmFja2dyb3VuZFdyaXRlck1haW4o Y29uc3Qgdm9pZCAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbikKIAlB dXhpbGlhcnlQcm9jZXNzTWFpbkNvbW1vbigpOwogCiAJLyoKLQkgKiBQcm9wZXJseSBhY2Nl cHQgb3IgaWdub3JlIHNpZ25hbHMgdGhhdCBtaWdodCBiZSBzZW50IHRvIHVzLgorCSAqIE5v IHF1ZXJ5IGNhbmNlbGxhdGlvbiBwb3NzaWJsZSwgc28gbm8gbmVlZCBmb3IgdGhlIHNpZ25h bCBoYW5kbGVyCisJICogZWl0aGVyLgorCSAqCisJICogRklYTUU6IHNob3VsZCB3ZSBqdXN0 IGtlZXAgdGhlIHNpZ25hbCBoYW5kbGVyIGFueXdheT8gIEl0J3MgaGFybWxlc3MsCisJICog YXMgd2Ugd2lsbCBpZ25vcmUgdGhlIGludGVycnVwdCB0aGF0IGl0IHJhaXNlcwogCSAqLwot CXBxc2lnbmFsKFNJR0hVUCwgU2lnbmFsSGFuZGxlckZvckNvbmZpZ1JlbG9hZCk7CiAJcHFz aWduYWwoU0lHSU5ULCBTSUdfSUdOKTsKLQlwcXNpZ25hbChTSUdURVJNLCBTaWduYWxIYW5k bGVyRm9yU2h1dGRvd25SZXF1ZXN0KTsKLQkvKiBTSUdRVUlUIGhhbmRsZXIgd2FzIGFscmVh ZHkgc2V0IHVwIGJ5IEluaXRQb3N0bWFzdGVyQ2hpbGQgKi8KLQlwcXNpZ25hbChTSUdBTFJN LCBTSUdfSUdOKTsKLQlwcXNpZ25hbChTSUdQSVBFLCBTSUdfSUdOKTsKLQlwcXNpZ25hbChT SUdVU1IxLCBwcm9jc2lnbmFsX3NpZ3VzcjFfaGFuZGxlcik7Ci0JcHFzaWduYWwoU0lHVVNS MiwgU0lHX0lHTik7CisKKwkvKgorCSAqIFNldCB1cCBpbnRlcnJ1cHQgaGFuZGxpbmcKKwkg Ki8KKwlTZXRTdGFuZGFyZEludGVycnVwdEhhbmRsZXJzKCk7CisJU2V0SW50ZXJydXB0SGFu ZGxlcihJTlRFUlJVUFRfVEVSTUlOQVRFLCBQcm9jZXNzQXV4UHJvY2Vzc1NodXRkb3duSW50 ZXJydXB0KTsKKwlFbmFibGVJbnRlcnJ1cHQoSU5URVJSVVBUX0NPTkZJR19SRUxPQUQpOwog CiAJLyoKIAkgKiBXZSBqdXN0IHN0YXJ0ZWQsIGFzc3VtZSB0aGVyZSBoYXMgYmVlbiBlaXRo ZXIgYSBzaHV0ZG93biBvcgpAQCAtMjIxLDkgKzIyNiw5IEBAIEJhY2tncm91bmRXcml0ZXJN YWluKGNvbnN0IHZvaWQgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4p CiAJCWludAkJCXJjOwogCiAJCS8qIENsZWFyIGFueSBhbHJlYWR5LXBlbmRpbmcgd2FrZXVw cyAqLwotCQlSZXNldExhdGNoKE15TGF0Y2gpOworCQlDbGVhckludGVycnVwdChJTlRFUlJV UFRfV0FJVF9XQUtFVVApOwogCi0JCVByb2Nlc3NNYWluTG9vcEludGVycnVwdHMoKTsKKwkJ Q0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIAogCQkvKgogCQkgKiBEbyBvbmUgY3ljbGUgb2Yg ZGlydHktYnVmZmVyIHdyaXRpbmcuCkBAIC0yOTYsMjIgKzMwMSwyMiBAQCBCYWNrZ3JvdW5k V3JpdGVyTWFpbihjb25zdCB2b2lkICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2Rh dGFfbGVuKQogCQkgKiB3aWxsIGNhbGwgaXQgZXZlcnkgQmdXcml0ZXJEZWxheSBtc2VjLiAg V2hpbGUgaXQncyBub3QgY3JpdGljYWwgZm9yCiAJCSAqIGNvcnJlY3RuZXNzIHRoYXQgdGhh dCBiZSBleGFjdCwgdGhlIGZlZWRiYWNrIGxvb3AgbWlnaHQgbWlzYmVoYXZlCiAJCSAqIGlm IHdlIHN0cmF5IHRvbyBmYXIgZnJvbSB0aGF0LiAgSGVuY2UsIGF2b2lkIGxvYWRpbmcgdGhp cyBwcm9jZXNzCi0JCSAqIGRvd24gd2l0aCBsYXRjaCBldmVudHMgdGhhdCBhcmUgbGlrZWx5 IHRvIGhhcHBlbiBmcmVxdWVudGx5IGR1cmluZwotCQkgKiBub3JtYWwgb3BlcmF0aW9uLgor CQkgKiBkb3duIHdpdGggaW50ZXJydXB0IGV2ZW50cyB0aGF0IGFyZSBsaWtlbHkgdG8gaGFw cGVuIGZyZXF1ZW50bHkKKwkJICogZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24uCiAJCSAqLwot CQlyYyA9IFdhaXRMYXRjaChNeUxhdGNoLAotCQkJCQkgICBXTF9MQVRDSF9TRVQgfCBXTF9U SU1FT1VUIHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwKLQkJCQkJICAgQmdXcml0ZXJEZWxheSAv KiBtcyAqLyAsIFdBSVRfRVZFTlRfQkdXUklURVJfTUFJTik7CisJCXJjID0gV2FpdEludGVy cnVwdChDaGVja0ZvckludGVycnVwdHNNYXNrLAorCQkJCQkJICAgV0xfSU5URVJSVVBUIHwg V0xfVElNRU9VVCB8IFdMX0VYSVRfT05fUE1fREVBVEgsCisJCQkJCQkgICBCZ1dyaXRlckRl bGF5IC8qIG1zICovICwgV0FJVF9FVkVOVF9CR1dSSVRFUl9NQUlOKTsKIAogCQkvKgotCQkg KiBJZiBubyBsYXRjaCBldmVudCBhbmQgQmdCdWZmZXJTeW5jIHNheXMgbm90aGluZydzIGhh cHBlbmluZywgZXh0ZW5kCisJCSAqIElmIG5vIGludGVycnVwdCBhbmQgQmdCdWZmZXJTeW5j IHNheXMgbm90aGluZydzIGhhcHBlbmluZywgZXh0ZW5kCiAJCSAqIHRoZSBzbGVlcCBpbiAi aGliZXJuYXRpb24iIG1vZGUsIHdoZXJlIHdlIHNsZWVwIGZvciBtdWNoIGxvbmdlcgogCQkg KiB0aGFuIGJnd3JpdGVyX2RlbGF5IHNheXMuICBGZXdlciB3YWtldXBzIHNhdmUgZWxlY3Ry aWNpdHkuICBXaGVuIGEKLQkJICogYmFja2VuZCBzdGFydHMgdXNpbmcgYnVmZmVycyBhZ2Fp biwgaXQgd2lsbCB3YWtlIHVzIHVwIGJ5IHNldHRpbmcKLQkJICogb3VyIGxhdGNoLiAgQmVj YXVzZSB0aGUgZXh0cmEgc2xlZXAgd2lsbCBwZXJzaXN0IG9ubHkgYXMgbG9uZyBhcyBubwot CQkgKiBidWZmZXIgYWxsb2NhdGlvbnMgaGFwcGVuLCB0aGlzIHNob3VsZCBub3QgZGlzdG9y dCB0aGUgYmVoYXZpb3Igb2YKLQkJICogQmdCdWZmZXJTeW5jJ3MgY29udHJvbCBsb29wIHRv byBiYWRseTsgZXNzZW50aWFsbHksIGl0IHdpbGwgdGhpbmsKLQkJICogdGhhdCB0aGUgc3lz dGVtLXdpZGUgaWRsZSBpbnRlcnZhbCBkaWRuJ3QgZXhpc3QuCisJCSAqIGJhY2tlbmQgc3Rh cnRzIHVzaW5nIGJ1ZmZlcnMgYWdhaW4sIGl0IHdpbGwgd2FrZSB1cyB1cCBieSBzZW5kaW5n CisJCSAqIHVzIGFuIGludGVycnVwdC4gIEJlY2F1c2UgdGhlIGV4dHJhIHNsZWVwIHdpbGwg cGVyc2lzdCBvbmx5IGFzIGxvbmcKKwkJICogYXMgbm8gYnVmZmVyIGFsbG9jYXRpb25zIGhh cHBlbiwgdGhpcyBzaG91bGQgbm90IGRpc3RvcnQgdGhlCisJCSAqIGJlaGF2aW9yIG9mIEJn QnVmZmVyU3luYydzIGNvbnRyb2wgbG9vcCB0b28gYmFkbHk7IGVzc2VudGlhbGx5LCBpdAor CQkgKiB3aWxsIHRoaW5rIHRoYXQgdGhlIHN5c3RlbS13aWRlIGlkbGUgaW50ZXJ2YWwgZGlk bid0IGV4aXN0LgogCQkgKgogCQkgKiBUaGVyZSBpcyBhIHJhY2UgY29uZGl0aW9uIGhlcmUs IGluIHRoYXQgYSBiYWNrZW5kIG1pZ2h0IGFsbG9jYXRlIGEKIAkJICogYnVmZmVyIGJldHdl ZW4gdGhlIHRpbWUgQmdCdWZmZXJTeW5jIHNhdyB0aGUgYWxsb2MgY291bnQgYXMgemVybwpA QCAtMzI2LDEwICszMzEsMTEgQEAgQmFja2dyb3VuZFdyaXRlck1haW4oY29uc3Qgdm9pZCAq c3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbikKIAkJCS8qIEFzayBmb3Ig bm90aWZpY2F0aW9uIGF0IG5leHQgYnVmZmVyIGFsbG9jYXRpb24gKi8KIAkJCVN0cmF0ZWd5 Tm90aWZ5QmdXcml0ZXIoTXlQcm9jTnVtYmVyKTsKIAkJCS8qIFNsZWVwIC4uLiAqLwotCQkJ KHZvaWQpIFdhaXRMYXRjaChNeUxhdGNoLAotCQkJCQkJCSBXTF9MQVRDSF9TRVQgfCBXTF9U SU1FT1VUIHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwKLQkJCQkJCQkgQmdXcml0ZXJEZWxheSAq IEhJQkVSTkFURV9GQUNUT1IsCi0JCQkJCQkJIFdBSVRfRVZFTlRfQkdXUklURVJfSElCRVJO QVRFKTsKKwkJCSh2b2lkKSBXYWl0SW50ZXJydXB0KENoZWNrRm9ySW50ZXJydXB0c01hc2sg fAorCQkJCQkJCQkgSU5URVJSVVBUX1dBSVRfV0FLRVVQLAorCQkJCQkJCQkgV0xfSU5URVJS VVBUIHwgV0xfVElNRU9VVCB8IFdMX0VYSVRfT05fUE1fREVBVEgsCisJCQkJCQkJCSBCZ1dy aXRlckRlbGF5ICogSElCRVJOQVRFX0ZBQ1RPUiwKKwkJCQkJCQkJIFdBSVRfRVZFTlRfQkdX UklURVJfSElCRVJOQVRFKTsKIAkJCS8qIFJlc2V0IHRoZSBub3RpZmljYXRpb24gcmVxdWVz dCBpbiBjYXNlIHdlIHRpbWVkIG91dCAqLwogCQkJU3RyYXRlZ3lOb3RpZnlCZ1dyaXRlcigt MSk7CiAJCX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvY2hlY2twb2lu dGVyLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2NoZWNrcG9pbnRlci5jCmluZGV4IDFi ODhlZjkyMGI0Li5jMmZhMTAwOWI3MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1h c3Rlci9jaGVja3BvaW50ZXIuYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2NoZWNr cG9pbnRlci5jCkBAIC00NCwxMiArNDQsMTMgQEAKICNpbmNsdWRlICJhY2Nlc3MveGxvZ3Jl Y292ZXJ5LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19hdXRoaWQuaCIKICNpbmNsdWRlICJj b21tYW5kcy9kZWZyZW0uaCIKKyNpbmNsdWRlICJpcGMvaW50ZXJydXB0LmgiCisjaW5jbHVk ZSAiaXBjL3NpZ25hbF9oYW5kbGVycy5oIgogI2luY2x1ZGUgImxpYnBxL3Bxc2lnbmFsLmgi CiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVk ZSAicG9zdG1hc3Rlci9hdXhwcm9jZXNzLmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9iZ3dy aXRlci5oIgotI2luY2x1ZGUgInBvc3RtYXN0ZXIvaW50ZXJydXB0LmgiCiAjaW5jbHVkZSAi cmVwbGljYXRpb24vc3luY3JlcC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYWlvX3N1YnN5cy5o IgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCkBAIC04NCwxMCArODUsMTEgQEAKICAq IFRoZSBhbGdvcml0aG0gZm9yIGJhY2tlbmRzIGlzOgogICoJMS4gUmVjb3JkIGN1cnJlbnQg dmFsdWVzIG9mIGNrcHRfZmFpbGVkIGFuZCBja3B0X3N0YXJ0ZWQsIGFuZAogICoJICAgc2V0 IHJlcXVlc3QgZmxhZ3MsIHdoaWxlIGhvbGRpbmcgY2twdF9sY2suCi0gKgkyLiBTZW5kIHNp Z25hbCB0byByZXF1ZXN0IGNoZWNrcG9pbnQuCisgKgkyLiBTZW5kIElOVEVSUlVQVF9XQUlU X1dBS0VVUCB0byB3YWtlIHVwIHRoZSBjaGVja3BvaW50ZXIuCiAgKgkzLiBTbGVlcCB1bnRp bCBja3B0X3N0YXJ0ZWQgY2hhbmdlcy4gIE5vdyB5b3Uga25vdyBhIGNoZWNrcG9pbnQgaGFz CiAgKgkgICBiZWd1biBzaW5jZSB5b3Ugc3RhcnRlZCB0aGlzIGFsZ29yaXRobSAoYWx0aG91 Z2ggKm5vdCogdGhhdCBpdCB3YXMKLSAqCSAgIHNwZWNpZmljYWxseSBpbml0aWF0ZWQgYnkg eW91ciBzaWduYWwpLCBhbmQgdGhhdCBpdCBpcyB1c2luZyB5b3VyIGZsYWdzLgorICoJICAg c3BlY2lmaWNhbGx5IGluaXRpYXRlZCBieSB5b3VyIGludGVycnVwdCksIGFuZCB0aGF0IGl0 IGlzIHVzaW5nIHlvdXIKKyAqCSAgIGZsYWdzLgogICoJNC4gUmVjb3JkIG5ldyB2YWx1ZSBv ZiBja3B0X3N0YXJ0ZWQuCiAgKgk1LiBTbGVlcCB1bnRpbCBja3B0X2RvbmUgPj0gc2F2ZWQg dmFsdWUgb2YgY2twdF9zdGFydGVkLiAgKFVzZSBtb2R1bG8KICAqCSAgIGFyaXRobWV0aWMg aGVyZSBpbiBjYXNlIGNvdW50ZXJzIHdyYXAgYXJvdW5kLikgIE5vdyB5b3Uga25vdyBhCkBA IC0xNjIsNyArMTY0LDYgQEAgZG91YmxlCQlDaGVja1BvaW50Q29tcGxldGlvblRhcmdldCA9 IDAuOTsKICAqIFByaXZhdGUgc3RhdGUKICAqLwogc3RhdGljIGJvb2wgY2twdF9hY3RpdmUg PSBmYWxzZTsKLXN0YXRpYyB2b2xhdGlsZSBzaWdfYXRvbWljX3QgU2h1dGRvd25YTE9HUGVu ZGluZyA9IGZhbHNlOwogCiAvKiB0aGVzZSB2YWx1ZXMgYXJlIHZhbGlkIHdoZW4gY2twdF9h Y3RpdmUgaXMgdHJ1ZTogKi8KIHN0YXRpYyBwZ190aW1lX3QgY2twdF9zdGFydF90aW1lOwpA QCAtMTc0LDE2ICsxNzUsMTMgQEAgc3RhdGljIHBnX3RpbWVfdCBsYXN0X3hsb2dfc3dpdGNo X3RpbWU7CiAKIC8qIFByb3RvdHlwZXMgZm9yIHByaXZhdGUgZnVuY3Rpb25zICovCiAKLXN0 YXRpYyB2b2lkIFByb2Nlc3NDaGVja3BvaW50ZXJJbnRlcnJ1cHRzKHZvaWQpOworc3RhdGlj IHZvaWQgUHJvY2Vzc0NoZWNrcG9pbnRlckNvbmZpZ1JlbG9hZEludGVycnVwdCh2b2lkKTsK IHN0YXRpYyB2b2lkIENoZWNrQXJjaGl2ZVRpbWVvdXQodm9pZCk7CiBzdGF0aWMgYm9vbCBJ c0NoZWNrcG9pbnRPblNjaGVkdWxlKGRvdWJsZSBwcm9ncmVzcyk7CiBzdGF0aWMgYm9vbCBG YXN0Q2hlY2twb2ludFJlcXVlc3RlZCh2b2lkKTsKIHN0YXRpYyBib29sIENvbXBhY3RDaGVj a3BvaW50ZXJSZXF1ZXN0UXVldWUodm9pZCk7CiBzdGF0aWMgdm9pZCBVcGRhdGVTaGFyZWRN ZW1vcnlDb25maWcodm9pZCk7CiAKLS8qIFNpZ25hbCBoYW5kbGVycyAqLwotc3RhdGljIHZv aWQgUmVxU2h1dGRvd25YTE9HKFNJR05BTF9BUkdTKTsKLQogCiAvKgogICogTWFpbiBlbnRy eSBwb2ludCBmb3IgY2hlY2twb2ludGVyIHByb2Nlc3MKQEAgLTIwNSwyMSArMjAzLDIwIEBA IENoZWNrcG9pbnRlck1haW4oY29uc3Qgdm9pZCAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3Rh cnR1cF9kYXRhX2xlbikKIAlDaGVja3BvaW50ZXJTaG1lbS0+Y2hlY2twb2ludGVyX3BpZCA9 IE15UHJvY1BpZDsKIAogCS8qCi0JICogUHJvcGVybHkgYWNjZXB0IG9yIGlnbm9yZSBzaWdu YWxzIHRoZSBwb3N0bWFzdGVyIG1pZ2h0IHNlbmQgdXMKLQkgKgotCSAqIE5vdGU6IHdlIGRl bGliZXJhdGVseSBpZ25vcmUgU0lHVEVSTSwgYmVjYXVzZSBkdXJpbmcgYSBzdGFuZGFyZCBV bml4Ci0JICogc3lzdGVtIHNodXRkb3duIGN5Y2xlLCBpbml0IHdpbGwgU0lHVEVSTSBhbGwg cHJvY2Vzc2VzIGF0IG9uY2UuICBXZQotCSAqIHdhbnQgdG8gd2FpdCBmb3IgdGhlIGJhY2tl bmRzIHRvIGV4aXQsIHdoZXJldXBvbiB0aGUgcG9zdG1hc3RlciB3aWxsCi0JICogdGVsbCB1 cyBpdCdzIG9rYXkgdG8gc2h1dCBkb3duICh2aWEgU0lHVVNSMikuCisJICogSWdub3JlIFNJ R1RFUk0sIGJlY2F1c2UgZHVyaW5nIGEgc3RhbmRhcmQgVW5peCBzeXN0ZW0gc2h1dGRvd24g Y3ljbGUsCisJICogaW5pdCB3aWxsIFNJR1RFUk0gYWxsIHByb2Nlc3NlcyBhdCBvbmNlLiAg V2Ugd2FudCB0byB3YWl0IGZvciB0aGUKKwkgKiBiYWNrZW5kcyB0byBleGl0LCB3aGVyZXVw b24gdGhlIHBvc3RtYXN0ZXIgd2lsbCB0ZWxsIHVzIGl0J3Mgb2theSB0bworCSAqIHNodXQg ZG93biAodmlhIElOVEVSUlVQVF9TSFVURE9XTl9YTE9HKS4KIAkgKi8KLQlwcXNpZ25hbChT SUdIVVAsIFNpZ25hbEhhbmRsZXJGb3JDb25maWdSZWxvYWQpOwotCXBxc2lnbmFsKFNJR0lO VCwgUmVxU2h1dGRvd25YTE9HKTsKLQlwcXNpZ25hbChTSUdURVJNLCBTSUdfSUdOKTsgLyog aWdub3JlIFNJR1RFUk0gKi8KLQkvKiBTSUdRVUlUIGhhbmRsZXIgd2FzIGFscmVhZHkgc2V0 IHVwIGJ5IEluaXRQb3N0bWFzdGVyQ2hpbGQgKi8KLQlwcXNpZ25hbChTSUdBTFJNLCBTSUdf SUdOKTsKLQlwcXNpZ25hbChTSUdQSVBFLCBTSUdfSUdOKTsKLQlwcXNpZ25hbChTSUdVU1Ix LCBwcm9jc2lnbmFsX3NpZ3VzcjFfaGFuZGxlcik7Ci0JcHFzaWduYWwoU0lHVVNSMiwgU2ln bmFsSGFuZGxlckZvclNodXRkb3duUmVxdWVzdCk7CisJcHFzaWduYWwoU0lHVEVSTSwgU0lH X0lHTik7CisKKwkvKiBTZXQgdXAgaW50ZXJydXB0IGhhbmRsaW5nICovCisJU2V0U3RhbmRh cmRJbnRlcnJ1cHRIYW5kbGVycygpOworCVNldEludGVycnVwdEhhbmRsZXIoSU5URVJSVVBU X0NPTkZJR19SRUxPQUQsIFByb2Nlc3NDaGVja3BvaW50ZXJDb25maWdSZWxvYWRJbnRlcnJ1 cHQpOworCUVuYWJsZUludGVycnVwdChJTlRFUlJVUFRfQ09ORklHX1JFTE9BRCk7CisKKwkv KiB3ZSB3aWxsIGNoZWNrIGZvciBJTlRFUlJVUFRfVEVSTUlOQVRFIGV4cGxpY2l0bHkgaW4g dGhlIGxvb3AgKi8KKwlEaXNhYmxlSW50ZXJydXB0KElOVEVSUlVQVF9URVJNSU5BVEUpOwog CiAJLyoKIAkgKiBJbml0aWFsaXplIHNvIHRoYXQgZmlyc3QgdGltZS1kcml2ZW4gZXZlbnQg aGFwcGVucyBhdCB0aGUgY29ycmVjdCB0aW1lLgpAQCAtMzY1LDE1ICszNjIsMTUgQEAgQ2hl Y2twb2ludGVyTWFpbihjb25zdCB2b2lkICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVw X2RhdGFfbGVuKQogCQlib29sCQljaGtwdF9vcl9yc3RwdF90aW1lZCA9IGZhbHNlOwogCiAJ CS8qIENsZWFyIGFueSBhbHJlYWR5LXBlbmRpbmcgd2FrZXVwcyAqLwotCQlSZXNldExhdGNo KE15TGF0Y2gpOworCQlDbGVhckludGVycnVwdChJTlRFUlJVUFRfV0FJVF9XQUtFVVApOwog CiAJCS8qCi0JCSAqIFByb2Nlc3MgYW55IHJlcXVlc3RzIG9yIHNpZ25hbHMgcmVjZWl2ZWQg cmVjZW50bHkuCisJCSAqIFByb2Nlc3MgYW55IHJlcXVlc3RzIG9yIGludGVycnVwdHMgcmVj ZWl2ZWQgcmVjZW50bHkuCiAJCSAqLwogCQlBYnNvcmJTeW5jUmVxdWVzdHMoKTsKIAotCQlQ cm9jZXNzQ2hlY2twb2ludGVySW50ZXJydXB0cygpOwotCQlpZiAoU2h1dGRvd25YTE9HUGVu ZGluZyB8fCBTaHV0ZG93blJlcXVlc3RQZW5kaW5nKQorCQlDSEVDS19GT1JfSU5URVJSVVBU UygpOworCQlpZiAoSW50ZXJydXB0UGVuZGluZyhJTlRFUlJVUFRfU0hVVERPV05fWExPRykg fHwgSW50ZXJydXB0UGVuZGluZyhJTlRFUlJVUFRfVEVSTUlOQVRFKSkKIAkJCWJyZWFrOwog CiAJCS8qCkBAIC01NDcsMTAgKzU0NCwxMCBAQCBDaGVja3BvaW50ZXJNYWluKGNvbnN0IHZv aWQgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pCiAKIAkJCS8qCiAJ CQkgKiBXZSBtYXkgaGF2ZSByZWNlaXZlZCBhbiBpbnRlcnJ1cHQgZHVyaW5nIHRoZSBjaGVj a3BvaW50IGFuZCB0aGUKLQkJCSAqIGxhdGNoIG1pZ2h0IGhhdmUgYmVlbiByZXNldCAoZS5n LiBpbiBDaGVja3BvaW50V3JpdGVEZWxheSkuCisJCQkgKiBpbnRlcnJ1cHQgbWlnaHQgaGF2 ZSBiZWVuIHJlc2V0IChlLmcuIGluIENoZWNrcG9pbnRXcml0ZURlbGF5KS4KIAkJCSAqLwot CQkJUHJvY2Vzc0NoZWNrcG9pbnRlckludGVycnVwdHMoKTsKLQkJCWlmIChTaHV0ZG93blhM T0dQZW5kaW5nIHx8IFNodXRkb3duUmVxdWVzdFBlbmRpbmcpCisJCQlDSEVDS19GT1JfSU5U RVJSVVBUUygpOworCQkJaWYgKEludGVycnVwdFBlbmRpbmcoSU5URVJSVVBUX1NIVVRET1dO X1hMT0cpIHx8IEludGVycnVwdFBlbmRpbmcoSU5URVJSVVBUX1RFUk1JTkFURSkpCiAJCQkJ YnJlYWs7CiAJCX0KIApAQCAtNTc1LDcgKzU3Miw3IEBAIENoZWNrcG9pbnRlck1haW4oY29u c3Qgdm9pZCAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbikKIAkJCWNv bnRpbnVlOwogCiAJCS8qCi0JCSAqIFNsZWVwIHVudGlsIHdlIGFyZSBzaWduYWxlZCBvciBp dCdzIHRpbWUgZm9yIGFub3RoZXIgY2hlY2twb2ludCBvcgorCQkgKiBTbGVlcCB1bnRpbCB3 ZSBhcmUgd29rZW4gdXAgb3IgaXQncyB0aW1lIGZvciBhbm90aGVyIGNoZWNrcG9pbnQgb3IK IAkJICogeGxvZyBmaWxlIHN3aXRjaC4KIAkJICovCiAJCW5vdyA9IChwZ190aW1lX3QpIHRp bWUoTlVMTCk7CkBAIC01OTEsMTAgKzU4OCwxMyBAQCBDaGVja3BvaW50ZXJNYWluKGNvbnN0 IHZvaWQgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pCiAJCQljdXJf dGltZW91dCA9IE1pbihjdXJfdGltZW91dCwgWExvZ0FyY2hpdmVUaW1lb3V0IC0gZWxhcHNl ZF9zZWNzKTsKIAkJfQogCi0JCSh2b2lkKSBXYWl0TGF0Y2goTXlMYXRjaCwKLQkJCQkJCSBX TF9MQVRDSF9TRVQgfCBXTF9USU1FT1VUIHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwKLQkJCQkJ CSBjdXJfdGltZW91dCAqIDEwMDBMIC8qIGNvbnZlcnQgdG8gbXMgKi8gLAotCQkJCQkJIFdB SVRfRVZFTlRfQ0hFQ0tQT0lOVEVSX01BSU4pOworCQkodm9pZCkgV2FpdEludGVycnVwdChD aGVja0ZvckludGVycnVwdHNNYXNrIHwKKwkJCQkJCQkgSU5URVJSVVBUX1dBSVRfV0FLRVVQ IHwKKwkJCQkJCQkgSU5URVJSVVBUX1NIVVRET1dOX1hMT0cgfAorCQkJCQkJCSBJTlRFUlJV UFRfVEVSTUlOQVRFLAorCQkJCQkJCSBXTF9JTlRFUlJVUFQgfCBXTF9USU1FT1VUIHwgV0xf RVhJVF9PTl9QTV9ERUFUSCwKKwkJCQkJCQkgY3VyX3RpbWVvdXQgKiAxMDAwTCAvKiBjb252 ZXJ0IHRvIG1zICovICwKKwkJCQkJCQkgV0FJVF9FVkVOVF9DSEVDS1BPSU5URVJfTUFJTik7 CiAJfQogCiAJLyoKQEAgLTYwMyw3ICs2MDMsNyBAQCBDaGVja3BvaW50ZXJNYWluKGNvbnN0 IHZvaWQgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pCiAJICovCiAJ RXhpdE9uQW55RXJyb3IgPSB0cnVlOwogCi0JaWYgKFNodXRkb3duWExPR1BlbmRpbmcpCisJ aWYgKEludGVycnVwdFBlbmRpbmcoSU5URVJSVVBUX1NIVVRET1dOX1hMT0cpKQogCXsKIAkJ LyoKIAkJICogQ2xvc2UgZG93biB0aGUgZGF0YWJhc2UuCkBAIC02MjEsNyArNjIxLDcgQEAg Q2hlY2twb2ludGVyTWFpbihjb25zdCB2b2lkICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFy dHVwX2RhdGFfbGVuKQogCQkgKiBUZWxsIHBvc3RtYXN0ZXIgdGhhdCB3ZSdyZSBkb25lLgog CQkgKi8KIAkJU2VuZFBvc3RtYXN0ZXJTaWduYWwoUE1TSUdOQUxfWExPR19JU19TSFVURE9X Tik7Ci0JCVNodXRkb3duWExPR1BlbmRpbmcgPSBmYWxzZTsKKwkJQ2xlYXJJbnRlcnJ1cHQo SU5URVJSVVBUX1NIVVRET1dOX1hMT0cpOwogCX0KIAogCS8qCkBAIC02MzEsNTUgKzYzMSwz OCBAQCBDaGVja3BvaW50ZXJNYWluKGNvbnN0IHZvaWQgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90 IHN0YXJ0dXBfZGF0YV9sZW4pCiAJICovCiAJZm9yICg7OykKIAl7Ci0JCS8qIENsZWFyIGFu eSBhbHJlYWR5LXBlbmRpbmcgd2FrZXVwcyAqLwotCQlSZXNldExhdGNoKE15TGF0Y2gpOwot Ci0JCVByb2Nlc3NDaGVja3BvaW50ZXJJbnRlcnJ1cHRzKCk7CisJCUNIRUNLX0ZPUl9JTlRF UlJVUFRTKCk7CiAKLQkJaWYgKFNodXRkb3duUmVxdWVzdFBlbmRpbmcpCisJCWlmIChJbnRl cnJ1cHRQZW5kaW5nKElOVEVSUlVQVF9URVJNSU5BVEUpKQogCQkJYnJlYWs7CiAKLQkJKHZv aWQpIFdhaXRMYXRjaChNeUxhdGNoLAotCQkJCQkJIFdMX0xBVENIX1NFVCB8IFdMX0VYSVRf T05fUE1fREVBVEgsCi0JCQkJCQkgMCwKLQkJCQkJCSBXQUlUX0VWRU5UX0NIRUNLUE9JTlRF Ul9TSFVURE9XTik7CisJCSh2b2lkKSBXYWl0SW50ZXJydXB0KENoZWNrRm9ySW50ZXJydXB0 c01hc2sgfAorCQkJCQkJCSBJTlRFUlJVUFRfVEVSTUlOQVRFLAorCQkJCQkJCSBXTF9JTlRF UlJVUFQgfCBXTF9FWElUX09OX1BNX0RFQVRILAorCQkJCQkJCSAwLAorCQkJCQkJCSBXQUlU X0VWRU5UX0NIRUNLUE9JTlRFUl9TSFVURE9XTik7CiAJfQogCiAJLyogTm9ybWFsIGV4aXQg ZnJvbSB0aGUgY2hlY2twb2ludGVyIGlzIGhlcmUgKi8KIAlwcm9jX2V4aXQoMCk7CQkJCS8q IGRvbmUgKi8KIH0KIAotLyoKLSAqIFByb2Nlc3MgYW55IG5ldyBpbnRlcnJ1cHRzLgotICov CiBzdGF0aWMgdm9pZAotUHJvY2Vzc0NoZWNrcG9pbnRlckludGVycnVwdHModm9pZCkKK1By b2Nlc3NDaGVja3BvaW50ZXJDb25maWdSZWxvYWRJbnRlcnJ1cHQodm9pZCkKIHsKLQlpZiAo UHJvY1NpZ25hbEJhcnJpZXJQZW5kaW5nKQotCQlQcm9jZXNzUHJvY1NpZ25hbEJhcnJpZXIo KTsKLQotCWlmIChDb25maWdSZWxvYWRQZW5kaW5nKQotCXsKLQkJQ29uZmlnUmVsb2FkUGVu ZGluZyA9IGZhbHNlOwotCQlQcm9jZXNzQ29uZmlnRmlsZShQR0NfU0lHSFVQKTsKKwlQcm9j ZXNzQ29uZmlnRmlsZShQR0NfU0lHSFVQKTsKIAotCQkvKgotCQkgKiBDaGVja3BvaW50ZXIg aXMgdGhlIGxhc3QgcHJvY2VzcyB0byBzaHV0IGRvd24sIHNvIHdlIGFzayBpdCB0byBob2xk Ci0JCSAqIHRoZSBrZXlzIGZvciBhIHJhbmdlIG9mIG90aGVyIHRhc2tzIHJlcXVpcmVkIG1v c3Qgb2Ygd2hpY2ggaGF2ZQotCQkgKiBub3RoaW5nIHRvIGRvIHdpdGggY2hlY2twb2ludGlu ZyBhdCBhbGwuCi0JCSAqCi0JCSAqIEZvciB2YXJpb3VzIHJlYXNvbnMsIHNvbWUgY29uZmln IHZhbHVlcyBjYW4gY2hhbmdlIGR5bmFtaWNhbGx5IHNvCi0JCSAqIHRoZSBwcmltYXJ5IGNv cHkgb2YgdGhlbSBpcyBoZWxkIGluIHNoYXJlZCBtZW1vcnkgdG8gbWFrZSBzdXJlIGFsbAot CQkgKiBiYWNrZW5kcyBzZWUgdGhlIHNhbWUgdmFsdWUuICBXZSBtYWtlIENoZWNrcG9pbnRl ciByZXNwb25zaWJsZSBmb3IKLQkJICogdXBkYXRpbmcgdGhlIHNoYXJlZCBtZW1vcnkgY29w eSBpZiB0aGUgcGFyYW1ldGVyIHNldHRpbmcgY2hhbmdlcwotCQkgKiBiZWNhdXNlIG9mIFNJ R0hVUC4KLQkJICovCi0JCVVwZGF0ZVNoYXJlZE1lbW9yeUNvbmZpZygpOwotCX0KLQotCS8q IFBlcmZvcm0gbG9nZ2luZyBvZiBtZW1vcnkgY29udGV4dHMgb2YgdGhpcyBwcm9jZXNzICov Ci0JaWYgKExvZ01lbW9yeUNvbnRleHRQZW5kaW5nKQotCQlQcm9jZXNzTG9nTWVtb3J5Q29u dGV4dEludGVycnVwdCgpOworCS8qCisJICogQ2hlY2twb2ludGVyIGlzIHRoZSBsYXN0IHBy b2Nlc3MgdG8gc2h1dCBkb3duLCBzbyB3ZSBhc2sgaXQgdG8gaG9sZCB0aGUKKwkgKiBrZXlz IGZvciBhIHJhbmdlIG9mIG90aGVyIHRhc2tzIHJlcXVpcmVkIG1vc3Qgb2Ygd2hpY2ggaGF2 ZSBub3RoaW5nIHRvCisJICogZG8gd2l0aCBjaGVja3BvaW50aW5nIGF0IGFsbC4KKwkgKgor CSAqIEZvciB2YXJpb3VzIHJlYXNvbnMsIHNvbWUgY29uZmlnIHZhbHVlcyBjYW4gY2hhbmdl IGR5bmFtaWNhbGx5IHNvIHRoZQorCSAqIHByaW1hcnkgY29weSBvZiB0aGVtIGlzIGhlbGQg aW4gc2hhcmVkIG1lbW9yeSB0byBtYWtlIHN1cmUgYWxsIGJhY2tlbmRzCisJICogc2VlIHRo ZSBzYW1lIHZhbHVlLiAgV2UgbWFrZSBDaGVja3BvaW50ZXIgcmVzcG9uc2libGUgZm9yIHVw ZGF0aW5nIHRoZQorCSAqIHNoYXJlZCBtZW1vcnkgY29weSBpZiB0aGUgcGFyYW1ldGVyIHNl dHRpbmcgY2hhbmdlcyBiZWNhdXNlIG9mIFNJR0hVUC4KKwkgKi8KKwlVcGRhdGVTaGFyZWRN ZW1vcnlDb25maWcoKTsKIH0KIAogLyoKQEAgLTc5MSwyNCArNzc0LDE4IEBAIENoZWNrcG9p bnRXcml0ZURlbGF5KGludCBmbGFncywgZG91YmxlIHByb2dyZXNzKQogCWlmICghQW1DaGVj a3BvaW50ZXJQcm9jZXNzKCkpCiAJCXJldHVybjsKIAorCUNIRUNLX0ZPUl9JTlRFUlJVUFRT KCk7CisKIAkvKgogCSAqIFBlcmZvcm0gdGhlIHVzdWFsIGR1dGllcyBhbmQgdGFrZSBhIG5h cCwgdW5sZXNzIHdlJ3JlIGJlaGluZCBzY2hlZHVsZSwKIAkgKiBpbiB3aGljaCBjYXNlIHdl IGp1c3QgdHJ5IHRvIGNhdGNoIHVwIGFzIHF1aWNrbHkgYXMgcG9zc2libGUuCiAJICovCiAJ aWYgKCEoZmxhZ3MgJiBDSEVDS1BPSU5UX0ZBU1QpICYmCi0JCSFTaHV0ZG93blhMT0dQZW5k aW5nICYmCi0JCSFTaHV0ZG93blJlcXVlc3RQZW5kaW5nICYmCisJCSFJbnRlcnJ1cHRQZW5k aW5nKElOVEVSUlVQVF9TSFVURE9XTl9YTE9HKSAmJgorCQkhSW50ZXJydXB0UGVuZGluZyhJ TlRFUlJVUFRfVEVSTUlOQVRFKSAmJgogCQkhRmFzdENoZWNrcG9pbnRSZXF1ZXN0ZWQoKSAm JgogCQlJc0NoZWNrcG9pbnRPblNjaGVkdWxlKHByb2dyZXNzKSkKIAl7Ci0JCWlmIChDb25m aWdSZWxvYWRQZW5kaW5nKQotCQl7Ci0JCQlDb25maWdSZWxvYWRQZW5kaW5nID0gZmFsc2U7 Ci0JCQlQcm9jZXNzQ29uZmlnRmlsZShQR0NfU0lHSFVQKTsKLQkJCS8qIHVwZGF0ZSBzaG1l bSBjb3BpZXMgb2YgY29uZmlnIHZhcmlhYmxlcyAqLwotCQkJVXBkYXRlU2hhcmVkTWVtb3J5 Q29uZmlnKCk7Ci0JCX0KLQogCQlBYnNvcmJTeW5jUmVxdWVzdHMoKTsKIAkJYWJzb3JiX2Nv dW50ZXIgPSBXUklURVNfUEVSX0FCU09SQjsKIApAQCAtODIzLDEwICs4MDAsMTIgQEAgQ2hl Y2twb2ludFdyaXRlRGVsYXkoaW50IGZsYWdzLCBkb3VibGUgcHJvZ3Jlc3MpCiAJCSAqIENo ZWNrcG9pbnRlciBhbmQgYmd3cml0ZXIgYXJlIG5vIGxvbmdlciByZWxhdGVkIHNvIHRha2Ug dGhlIEJpZwogCQkgKiBTbGVlcC4KIAkJICovCi0JCVdhaXRMYXRjaChNeUxhdGNoLCBXTF9M QVRDSF9TRVQgfCBXTF9FWElUX09OX1BNX0RFQVRIIHwgV0xfVElNRU9VVCwKLQkJCQkgIDEw MCwKLQkJCQkgIFdBSVRfRVZFTlRfQ0hFQ0tQT0lOVF9XUklURV9ERUxBWSk7Ci0JCVJlc2V0 TGF0Y2goTXlMYXRjaCk7CisJCVdhaXRJbnRlcnJ1cHQoQ2hlY2tGb3JJbnRlcnJ1cHRzTWFz ayB8CisJCQkJCSAgSU5URVJSVVBUX1dBSVRfV0FLRVVQLAorCQkJCQkgIFdMX0lOVEVSUlVQ VCB8IFdMX0VYSVRfT05fUE1fREVBVEggfCBXTF9USU1FT1VULAorCQkJCQkgIDEwMCwKKwkJ CQkJICBXQUlUX0VWRU5UX0NIRUNLUE9JTlRfV1JJVEVfREVMQVkpOworCQlDbGVhckludGVy cnVwdChJTlRFUlJVUFRfV0FJVF9XQUtFVVApOwogCX0KIAllbHNlIGlmICgtLWFic29yYl9j b3VudGVyIDw9IDApCiAJewpAQCAtODM4LDEwICs4MTcsNiBAQCBDaGVja3BvaW50V3JpdGVE ZWxheShpbnQgZmxhZ3MsIGRvdWJsZSBwcm9ncmVzcykKIAkJQWJzb3JiU3luY1JlcXVlc3Rz KCk7CiAJCWFic29yYl9jb3VudGVyID0gV1JJVEVTX1BFUl9BQlNPUkI7CiAJfQotCi0JLyog Q2hlY2sgZm9yIGJhcnJpZXIgZXZlbnRzLiAqLwotCWlmIChQcm9jU2lnbmFsQmFycmllclBl bmRpbmcpCi0JCVByb2Nlc3NQcm9jU2lnbmFsQmFycmllcigpOwogfQogCiAvKgpAQCAtOTI1 LDIwICs5MDAsNiBAQCBJc0NoZWNrcG9pbnRPblNjaGVkdWxlKGRvdWJsZSBwcm9ncmVzcykK IH0KIAogCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoJCXNpZ25h bCBoYW5kbGVyIHJvdXRpbmVzCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQotICovCi0KLS8qIFNJR0lOVDogc2V0IGZsYWcgdG8gdHJpZ2dlciB3cml0aW5nIG9mIHNo dXRkb3duIGNoZWNrcG9pbnQgKi8KLXN0YXRpYyB2b2lkCi1SZXFTaHV0ZG93blhMT0coU0lH TkFMX0FSR1MpCi17Ci0JU2h1dGRvd25YTE9HUGVuZGluZyA9IHRydWU7Ci0JU2V0TGF0Y2go TXlMYXRjaCk7Ci19Ci0KLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K ICAqCQljb21tdW5pY2F0aW9uIHdpdGggYmFja2VuZHMKICAqIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCkBAIC0xMTA4LDE0ICsxMDY5LDE1IEBAIFJlcXVlc3RDaGVja3Bv aW50KGludCBmbGFncykKIAlTcGluTG9ja1JlbGVhc2UoJkNoZWNrcG9pbnRlclNobWVtLT5j a3B0X2xjayk7CiAKIAkvKgotCSAqIFNldCBjaGVja3BvaW50ZXIncyBsYXRjaCB0byByZXF1 ZXN0IGNoZWNrcG9pbnQuICBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlCi0JICogY2hlY2twb2lu dGVyIGhhc24ndCBzdGFydGVkIHlldCwgc28gd2Ugd2lsbCByZXRyeSBhIGZldyB0aW1lcyBp ZgotCSAqIG5lZWRlZC4gIChBY3R1YWxseSwgbW9yZSB0aGFuIGEgZmV3IHRpbWVzLCBzaW5j ZSBvbiBzbG93IG9yIG92ZXJsb2FkZWQKLQkgKiBidWlsZGZhcm0gbWFjaGluZXMsIGl0J3Mg YmVlbiBvYnNlcnZlZCB0aGF0IHRoZSBjaGVja3BvaW50ZXIgY2FuIHRha2UKLQkgKiBzZXZl cmFsIHNlY29uZHMgdG8gc3RhcnQuKSAgSG93ZXZlciwgaWYgbm90IHRvbGQgdG8gd2FpdCBm b3IgdGhlCi0JICogY2hlY2twb2ludCB0byBvY2N1ciwgd2UgY29uc2lkZXIgZmFpbHVyZSB0 byBzZXQgdGhlIGxhdGNoIHRvIGJlCi0JICogbm9uZmF0YWwgYW5kIG1lcmVseSBMT0cgaXQu ICBUaGUgY2hlY2twb2ludGVyIHNob3VsZCBzZWUgdGhlIHJlcXVlc3QKLQkgKiB3aGVuIGl0 IGRvZXMgc3RhcnQsIHdpdGggb3Igd2l0aG91dCB0aGUgU2V0TGF0Y2goKS4KKwkgKiBTZW5k IElOVEVSUlVQVF9XQUlUX1dBS0VVUCB0byB3YWtlIHVwIHRoZSBjaGVja3BvaW50ZXIuICBJ dCdzIHBvc3NpYmxlCisJICogdGhhdCB0aGUgY2hlY2twb2ludGVyIGhhc24ndCBzdGFydGVk IHlldCwgc28gd2Ugd2lsbCByZXRyeSBhIGZldyB0aW1lcworCSAqIGlmIG5lZWRlZC4gIChB Y3R1YWxseSwgbW9yZSB0aGFuIGEgZmV3IHRpbWVzLCBzaW5jZSBvbiBzbG93IG9yCisJICog b3ZlcmxvYWRlZCBidWlsZGZhcm0gbWFjaGluZXMsIGl0J3MgYmVlbiBvYnNlcnZlZCB0aGF0 IHRoZSBjaGVja3BvaW50ZXIKKwkgKiBjYW4gdGFrZSBzZXZlcmFsIHNlY29uZHMgdG8gc3Rh cnQuKSAgSG93ZXZlciwgaWYgbm90IHRvbGQgdG8gd2FpdCBmb3IKKwkgKiB0aGUgY2hlY2tw b2ludCB0byBvY2N1ciwgd2UgY29uc2lkZXIgZmFpbHVyZSB0byB3YWtlIHVwIHRoZQorCSAq IGNoZWNrcG9pbnRlciB0byBiZSBub25mYXRhbCBhbmQgbWVyZWx5IExPRyBpdC4gIFRoZSBj aGVja3BvaW50ZXIgc2hvdWxkCisJICogc2VlIHRoZSByZXF1ZXN0IHdoZW4gaXQgZG9lcyBz dGFydCwgd2l0aCBvciB3aXRob3V0IHRoZQorCSAqIFNlbmRJbnRlcnJ1cHQoKS4KIAkgKi8K ICNkZWZpbmUgTUFYX1NJR05BTF9UUklFUyA2MDAJLyogbWF4IHdhaXQgNjAuMCBzZWMgKi8K IAlmb3IgKG50cmllcyA9IDA7OyBudHJpZXMrKykKQEAgLTExMzQsNyArMTA5Niw3IEBAIFJl cXVlc3RDaGVja3BvaW50KGludCBmbGFncykKIAkJfQogCQllbHNlCiAJCXsKLQkJCVNldExh dGNoKCZHZXRQR1Byb2NCeU51bWJlcihjaGVja3BvaW50ZXJQcm9jKS0+cHJvY0xhdGNoKTsK KwkJCVNlbmRJbnRlcnJ1cHQoSU5URVJSVVBUX1dBSVRfV0FLRVVQLCBjaGVja3BvaW50ZXJQ cm9jKTsKIAkJCS8qIG5vdGlmaWVkIHN1Y2Nlc3NmdWxseSAqLwogCQkJYnJlYWs7CiAJCX0K QEAgLTEyNjYsNyArMTIyOCw3IEBAIEZvcndhcmRTeW5jUmVxdWVzdChjb25zdCBGaWxlVGFn ICpmdGFnLCBTeW5jUmVxdWVzdFR5cGUgdHlwZSkKIAkJUHJvY051bWJlcgljaGVja3BvaW50 ZXJQcm9jID0gcHJvY2dsb2JhbC0+Y2hlY2twb2ludGVyUHJvYzsKIAogCQlpZiAoY2hlY2tw b2ludGVyUHJvYyAhPSBJTlZBTElEX1BST0NfTlVNQkVSKQotCQkJU2V0TGF0Y2goJkdldFBH UHJvY0J5TnVtYmVyKGNoZWNrcG9pbnRlclByb2MpLT5wcm9jTGF0Y2gpOworCQkJU2VuZElu dGVycnVwdChJTlRFUlJVUFRfV0FJVF9XQUtFVVAsIGNoZWNrcG9pbnRlclByb2MpOwogCX0K IAogCXJldHVybiB0cnVlOwpAQCAtMTU0Nyw1ICsxNTA5LDUgQEAgV2FrZXVwQ2hlY2twb2lu dGVyKHZvaWQpCiAJUHJvY051bWJlcgljaGVja3BvaW50ZXJQcm9jID0gcHJvY2dsb2JhbC0+ Y2hlY2twb2ludGVyUHJvYzsKIAogCWlmIChjaGVja3BvaW50ZXJQcm9jICE9IElOVkFMSURf UFJPQ19OVU1CRVIpCi0JCVNldExhdGNoKCZHZXRQR1Byb2NCeU51bWJlcihjaGVja3BvaW50 ZXJQcm9jKS0+cHJvY0xhdGNoKTsKKwkJU2VuZEludGVycnVwdChJTlRFUlJVUFRfV0FJVF9X QUtFVVAsIGNoZWNrcG9pbnRlclByb2MpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv cG9zdG1hc3Rlci9pbnRlcnJ1cHQuYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvaW50ZXJy dXB0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyYzBmZjAxMmM1Li4wMDAw MDAwMDAwMAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2ludGVycnVwdC5jCisrKyAv ZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoK LSAqIGludGVycnVwdC5jCi0gKgkgIEludGVycnVwdCBoYW5kbGluZyByb3V0aW5lcy4KLSAq Ci0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNiwgUG9zdGdyZVNRTCBHbG9i YWwgRGV2ZWxvcG1lbnQgR3JvdXAKLSAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwg UmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCi0gKgotICogSURFTlRJ RklDQVRJT04KLSAqCSAgc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9pbnRlcnJ1cHQuYwotICoK LSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi0KLSNpbmNsdWRlICJwb3N0Z3Jlcy5oIgot Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0KLSNpbmNsdWRlICJtaXNjYWRtaW4uaCIKLSNpbmNs dWRlICJwb3N0bWFzdGVyL2ludGVycnVwdC5oIgotI2luY2x1ZGUgInN0b3JhZ2UvaXBjLmgi Ci0jaW5jbHVkZSAic3RvcmFnZS9sYXRjaC5oIgotI2luY2x1ZGUgInN0b3JhZ2UvcHJvY3Np Z25hbC5oIgotI2luY2x1ZGUgInV0aWxzL2d1Yy5oIgotI2luY2x1ZGUgInV0aWxzL21lbXV0 aWxzLmgiCi0KLXZvbGF0aWxlIHNpZ19hdG9taWNfdCBDb25maWdSZWxvYWRQZW5kaW5nID0g ZmFsc2U7Ci12b2xhdGlsZSBzaWdfYXRvbWljX3QgU2h1dGRvd25SZXF1ZXN0UGVuZGluZyA9 IGZhbHNlOwotCi0vKgotICogU2ltcGxlIGludGVycnVwdCBoYW5kbGVyIGZvciBtYWluIGxv b3BzIG9mIGJhY2tncm91bmQgcHJvY2Vzc2VzLgotICovCi12b2lkCi1Qcm9jZXNzTWFpbkxv b3BJbnRlcnJ1cHRzKHZvaWQpCi17Ci0JaWYgKFByb2NTaWduYWxCYXJyaWVyUGVuZGluZykK LQkJUHJvY2Vzc1Byb2NTaWduYWxCYXJyaWVyKCk7Ci0KLQlpZiAoQ29uZmlnUmVsb2FkUGVu ZGluZykKLQl7Ci0JCUNvbmZpZ1JlbG9hZFBlbmRpbmcgPSBmYWxzZTsKLQkJUHJvY2Vzc0Nv bmZpZ0ZpbGUoUEdDX1NJR0hVUCk7Ci0JfQotCi0JaWYgKFNodXRkb3duUmVxdWVzdFBlbmRp bmcpCi0JCXByb2NfZXhpdCgwKTsKLQotCS8qIFBlcmZvcm0gbG9nZ2luZyBvZiBtZW1vcnkg Y29udGV4dHMgb2YgdGhpcyBwcm9jZXNzICovCi0JaWYgKExvZ01lbW9yeUNvbnRleHRQZW5k aW5nKQotCQlQcm9jZXNzTG9nTWVtb3J5Q29udGV4dEludGVycnVwdCgpOwotfQotCi0vKgot ICogU2ltcGxlIHNpZ25hbCBoYW5kbGVyIGZvciB0cmlnZ2VyaW5nIGEgY29uZmlndXJhdGlv biByZWxvYWQuCi0gKgotICogTm9ybWFsbHksIHRoaXMgaGFuZGxlciB3b3VsZCBiZSB1c2Vk IGZvciBTSUdIVVAuIFRoZSBpZGVhIGlzIHRoYXQgY29kZQotICogd2hpY2ggdXNlcyBpdCB3 b3VsZCBhcnJhbmdlIHRvIGNoZWNrIHRoZSBDb25maWdSZWxvYWRQZW5kaW5nIGZsYWcgYXQK LSAqIGNvbnZlbmllbnQgcGxhY2VzIGluc2lkZSBtYWluIGxvb3BzLCBvciBlbHNlIGNhbGwg UHJvY2Vzc01haW5Mb29wSW50ZXJydXB0cy4KLSAqLwotdm9pZAotU2lnbmFsSGFuZGxlckZv ckNvbmZpZ1JlbG9hZChTSUdOQUxfQVJHUykKLXsKLQlDb25maWdSZWxvYWRQZW5kaW5nID0g dHJ1ZTsKLQlTZXRMYXRjaChNeUxhdGNoKTsKLX0KLQotLyoKLSAqIFNpbXBsZSBzaWduYWwg aGFuZGxlciBmb3IgZXhpdGluZyBxdWlja2x5IGFzIGlmIGR1ZSB0byBhIGNyYXNoLgotICoK LSAqIE5vcm1hbGx5LCB0aGlzIHdvdWxkIGJlIHVzZWQgZm9yIGhhbmRsaW5nIFNJR1FVSVQu Ci0gKi8KLXZvaWQKLVNpZ25hbEhhbmRsZXJGb3JDcmFzaEV4aXQoU0lHTkFMX0FSR1MpCi17 Ci0JLyoKLQkgKiBXZSBETyBOT1Qgd2FudCB0byBydW4gcHJvY19leGl0KCkgb3IgYXRleGl0 KCkgY2FsbGJhY2tzIC0tIHdlJ3JlIGhlcmUKLQkgKiBiZWNhdXNlIHNoYXJlZCBtZW1vcnkg bWF5IGJlIGNvcnJ1cHRlZCwgc28gd2UgZG9uJ3Qgd2FudCB0byB0cnkgdG8KLQkgKiBjbGVh biB1cCBvdXIgdHJhbnNhY3Rpb24uICBKdXN0IG5haWwgdGhlIHdpbmRvd3Mgc2h1dCBhbmQg Z2V0IG91dCBvZgotCSAqIHRvd24uICBUaGUgY2FsbGJhY2tzIHdvdWxkbid0IGJlIHNhZmUg dG8gcnVuIGZyb20gYSBzaWduYWwgaGFuZGxlciwKLQkgKiBhbnl3YXkuCi0JICoKLQkgKiBO b3RlIHdlIGRvIF9leGl0KDIpIG5vdCBfZXhpdCgwKS4gIFRoaXMgaXMgdG8gZm9yY2UgdGhl IHBvc3RtYXN0ZXIgaW50bwotCSAqIGEgc3lzdGVtIHJlc2V0IGN5Y2xlIGlmIHNvbWVvbmUg c2VuZHMgYSBtYW51YWwgU0lHUVVJVCB0byBhIHJhbmRvbQotCSAqIGJhY2tlbmQuICBUaGlz IGlzIG5lY2Vzc2FyeSBwcmVjaXNlbHkgYmVjYXVzZSB3ZSBkb24ndCBjbGVhbiB1cCBvdXIK LQkgKiBzaGFyZWQgbWVtb3J5IHN0YXRlLiAgKFRoZSAiZGVhZCBtYW4gc3dpdGNoIiBtZWNo YW5pc20gaW4gcG1zaWduYWwuYwotCSAqIHNob3VsZCBlbnN1cmUgdGhlIHBvc3RtYXN0ZXIg c2VlcyB0aGlzIGFzIGEgY3Jhc2gsIHRvbywgYnV0IG5vIGhhcm0gaW4KLQkgKiBiZWluZyBk b3VibHkgc3VyZS4pCi0JICovCi0JX2V4aXQoMik7Ci19Ci0KLS8qCi0gKiBTaW1wbGUgc2ln bmFsIGhhbmRsZXIgZm9yIHRyaWdnZXJpbmcgYSBsb25nLXJ1bm5pbmcgYmFja2dyb3VuZCBw cm9jZXNzIHRvCi0gKiBzaHV0IGRvd24gYW5kIGV4aXQuCi0gKgotICogVHlwaWNhbGx5LCB0 aGlzIGhhbmRsZXIgd291bGQgYmUgdXNlZCBmb3IgU0lHVEVSTSwgYnV0IHNvbWUgcHJvY2Vz c2VzIHVzZQotICogb3RoZXIgc2lnbmFscy4gSW4gcGFydGljdWxhciwgdGhlIGNoZWNrcG9p bnRlciBhbmQgcGFyYWxsZWwgYXBwbHkgd29ya2VyCi0gKiBleGl0IG9uIFNJR1VTUjIsIGFu ZCB0aGUgV0FMIHdyaXRlciBleGl0cyBvbiBlaXRoZXIgU0lHSU5UIG9yIFNJR1RFUk0uCi0g KgotICogU2h1dGRvd25SZXF1ZXN0UGVuZGluZyBzaG91bGQgYmUgY2hlY2tlZCBhdCBhIGNv bnZlbmllbnQgcGxhY2Ugd2l0aGluIHRoZQotICogbWFpbiBsb29wLCBvciBlbHNlIHRoZSBt YWluIGxvb3Agc2hvdWxkIGNhbGwgUHJvY2Vzc01haW5Mb29wSW50ZXJydXB0cy4KLSAqLwot dm9pZAotU2lnbmFsSGFuZGxlckZvclNodXRkb3duUmVxdWVzdChTSUdOQUxfQVJHUykKLXsK LQlTaHV0ZG93blJlcXVlc3RQZW5kaW5nID0gdHJ1ZTsKLQlTZXRMYXRjaChNeUxhdGNoKTsK LX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvbWVzb24uYnVpbGQgYi9z cmMvYmFja2VuZC9wb3N0bWFzdGVyL21lc29uLmJ1aWxkCmluZGV4IGUxZjcwNzI2NjA0Li5m YmQ0MGNiMTBkYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9tZXNvbi5i dWlsZAorKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL21lc29uLmJ1aWxkCkBAIC03LDcg KzcsNiBAQCBiYWNrZW5kX3NvdXJjZXMgKz0gZmlsZXMoCiAgICdiZ3dyaXRlci5jJywKICAg J2NoZWNrcG9pbnRlci5jJywKICAgJ2ZvcmtfcHJvY2Vzcy5jJywKLSAgJ2ludGVycnVwdC5j JywKICAgJ2xhdW5jaF9iYWNrZW5kLmMnLAogICAncGdhcmNoLmMnLAogICAncG1jaGlsZC5j JywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcGdhcmNoLmMgYi9zcmMv YmFja2VuZC9wb3N0bWFzdGVyL3BnYXJjaC5jCmluZGV4IDk0ZjRmODI4YTg2Li4xMzQ0MDJj NDFhMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wZ2FyY2guYworKysg Yi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3BnYXJjaC5jCkBAIC0zMywxNyArMzMsMTcgQEAK ICNpbmNsdWRlICJhY2Nlc3MveGxvZ19pbnRlcm5hbC5oIgogI2luY2x1ZGUgImFyY2hpdmUv YXJjaGl2ZV9tb2R1bGUuaCIKICNpbmNsdWRlICJhcmNoaXZlL3NoZWxsX2FyY2hpdmUuaCIK KyNpbmNsdWRlICJpcGMvaW50ZXJydXB0LmgiCisjaW5jbHVkZSAiaXBjL3NpZ25hbF9oYW5k bGVycy5oIgogI2luY2x1ZGUgImxpYi9iaW5hcnloZWFwLmgiCiAjaW5jbHVkZSAibGlicHEv cHFzaWduYWwuaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVy L2F1eHByb2Nlc3MuaCIKLSNpbmNsdWRlICJwb3N0bWFzdGVyL2ludGVycnVwdC5oIgogI2lu Y2x1ZGUgInBvc3RtYXN0ZXIvcGdhcmNoLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9jb25kaXRp b25fdmFyaWFibGUuaCIKICNpbmNsdWRlICJzdG9yYWdlL2Fpb19zdWJzeXMuaCIKICNpbmNs dWRlICJzdG9yYWdlL2ZkLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKLSNpbmNsdWRl ICJzdG9yYWdlL2xhdGNoLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wbXNpZ25hbC5oIgogI2lu Y2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY3NpZ25hbC5o IgpAQCAtMTMyLDExICsxMzIsNiBAQCBzdHJ1Y3QgYXJjaF9maWxlc19zdGF0ZQogCiBzdGF0 aWMgc3RydWN0IGFyY2hfZmlsZXNfc3RhdGUgKmFyY2hfZmlsZXMgPSBOVUxMOwogCi0vKgot ICogRmxhZ3Mgc2V0IGJ5IGludGVycnVwdCBoYW5kbGVycyBmb3IgbGF0ZXIgc2VydmljZSBp biB0aGUgbWFpbiBsb29wLgotICovCi1zdGF0aWMgdm9sYXRpbGUgc2lnX2F0b21pY190IHJl YWR5X3RvX3N0b3AgPSBmYWxzZTsKLQogLyogLS0tLS0tLS0tLQogICogTG9jYWwgZnVuY3Rp b24gZm9yd2FyZCBkZWNsYXJhdGlvbnMKICAqIC0tLS0tLS0tLS0KQEAgLTE0OCwxMCArMTQz LDExIEBAIHN0YXRpYyBib29sIHBnYXJjaF9hcmNoaXZlWGxvZyhjaGFyICp4bG9nKTsKIHN0 YXRpYyBib29sIHBnYXJjaF9yZWFkeVhsb2coY2hhciAqeGxvZyk7CiBzdGF0aWMgdm9pZCBw Z2FyY2hfYXJjaGl2ZURvbmUoY2hhciAqeGxvZyk7CiBzdGF0aWMgdm9pZCBwZ2FyY2hfZGll KGludCBjb2RlLCBEYXR1bSBhcmcpOwotc3RhdGljIHZvaWQgUHJvY2Vzc1BnQXJjaEludGVy cnVwdHModm9pZCk7CiBzdGF0aWMgaW50CXJlYWR5X2ZpbGVfY29tcGFyYXRvcihEYXR1bSBh LCBEYXR1bSBiLCB2b2lkICphcmcpOwogc3RhdGljIHZvaWQgTG9hZEFyY2hpdmVMaWJyYXJ5 KHZvaWQpOwogc3RhdGljIHZvaWQgcGdhcmNoX2NhbGxfbW9kdWxlX3NodXRkb3duX2NiKGlu dCBjb2RlLCBEYXR1bSBhcmcpOworc3RhdGljIHZvaWQgcGdhcmNoX1Byb2Nlc3NDb25maWdS ZWxvYWRJbnRlcnJ1cHQodm9pZCk7CisKIAogLyogUmVwb3J0IHNoYXJlZCBtZW1vcnkgc3Bh Y2UgbmVlZGVkIGJ5IFBnQXJjaFNobWVtSW5pdCAqLwogU2l6ZQpAQCAtMjI3LDE3ICsyMjMs MzEgQEAgUGdBcmNoaXZlck1haW4oY29uc3Qgdm9pZCAqc3RhcnR1cF9kYXRhLCBzaXplX3Qg c3RhcnR1cF9kYXRhX2xlbikKIAogCS8qCiAJICogSWdub3JlIGFsbCBzaWduYWxzIHVzdWFs bHkgYm91bmQgdG8gc29tZSBhY3Rpb24gaW4gdGhlIHBvc3RtYXN0ZXIsCi0JICogZXhjZXB0 IGZvciBTSUdIVVAsIFNJR1RFUk0sIFNJR1VTUjEsIFNJR1VTUjIsIGFuZCBTSUdRVUlULgor CSAqIGV4Y2VwdCBmb3IgU0lHSFVQLCBTSUdURVJNLCBTSUdVU1IxLCBTSUdVU1IyLCBhbmQg U0lHUVVJVC4gWFhYCiAJICovCi0JcHFzaWduYWwoU0lHSFVQLCBTaWduYWxIYW5kbGVyRm9y Q29uZmlnUmVsb2FkKTsKKworCS8qCisJICogbm8gcXVlcnkgY2FuY2VsLiBYWFg6IHNob3Vs ZCB3ZSBsZWF2ZSB0aGUgc2lnbmFsIGhhbmRsZXIgaW4gcGxhY2UgYW5kCisJICoganVzdCBu b3QgaW5zdGFsbAorCSAqLworCS8qIGFuIGludGVycnVwdCBoYW5kbGVyIGZvciBpdD8gKi8K IAlwcXNpZ25hbChTSUdJTlQsIFNJR19JR04pOwotCXBxc2lnbmFsKFNJR1RFUk0sIFNpZ25h bEhhbmRsZXJGb3JTaHV0ZG93blJlcXVlc3QpOwotCS8qIFNJR1FVSVQgaGFuZGxlciB3YXMg YWxyZWFkeSBzZXQgdXAgYnkgSW5pdFBvc3RtYXN0ZXJDaGlsZCAqLwotCXBxc2lnbmFsKFNJ R0FMUk0sIFNJR19JR04pOwotCXBxc2lnbmFsKFNJR1BJUEUsIFNJR19JR04pOwotCXBxc2ln bmFsKFNJR1VTUjEsIHByb2NzaWduYWxfc2lndXNyMV9oYW5kbGVyKTsKKworCS8qIFRPRE86 IHVzZSBpbnRlcnJ1cHQgZm9yIHRoaXMgZGlyZWN0bHkgKi8KIAlwcXNpZ25hbChTSUdVU1Iy LCBwZ2FyY2hfd2FrZW5fc3RvcCk7CiAKKwkvKgorCSAqIFRoZXNlIGludGVycnVwdCBoYW5k bGVycyBhcmUgY2FsbGVkIGluIHRoZSBsb29wcyBwZ2FyY2hfTWFpbkxvb3AgYW5kCisJICog cGdhcmNoX0FyY2hpdmVyQ29weUxvb3AuIERvIG5vdCBzZXQgSU5URVJSVVBUX1RFUk1JTkFU RSBoYW5kbGVyLAorCSAqIGJlY2F1c2UgdGhhdCdzIGRpZmZlcmVudCBiZXR3ZWVuIHRoZSBs b29wcy4KKwkgKi8KKwlTZXRJbnRlcnJ1cHRIYW5kbGVyKElOVEVSUlVQVF9DT05GSUdfUkVM T0FELCBwZ2FyY2hfUHJvY2Vzc0NvbmZpZ1JlbG9hZEludGVycnVwdCk7CisJRW5hYmxlSW50 ZXJydXB0KElOVEVSUlVQVF9DT05GSUdfUkVMT0FEKTsKKwlTZXRJbnRlcnJ1cHRIYW5kbGVy KElOVEVSUlVQVF9CQVJSSUVSLCBQcm9jZXNzUHJvY1NpZ25hbEJhcnJpZXIpOworCUVuYWJs ZUludGVycnVwdChJTlRFUlJVUFRfQkFSUklFUik7CisJU2V0SW50ZXJydXB0SGFuZGxlcihJ TlRFUlJVUFRfTE9HX01FTU9SWV9DT05URVhULCBQcm9jZXNzTG9nTWVtb3J5Q29udGV4dElu dGVycnVwdCk7CisJRW5hYmxlSW50ZXJydXB0KElOVEVSUlVQVF9MT0dfTUVNT1JZX0NPTlRF WFQpOworCiAJLyogVW5ibG9jayBzaWduYWxzICh0aGV5IHdlcmUgYmxvY2tlZCB3aGVuIHRo ZSBwb3N0bWFzdGVyIGZvcmtlZCB1cykgKi8KIAlzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywg JlVuQmxvY2tTaWcsIE5VTEwpOwogCkBAIC0yNDgsOCArMjU4LDggQEAgUGdBcmNoaXZlck1h aW4oY29uc3Qgdm9pZCAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbikK IAlvbl9zaG1lbV9leGl0KHBnYXJjaF9kaWUsIDApOwogCiAJLyoKLQkgKiBBZHZlcnRpc2Ug b3VyIHByb2MgbnVtYmVyIHNvIHRoYXQgYmFja2VuZHMgY2FuIHVzZSBvdXIgbGF0Y2ggdG8g d2FrZSB1cwotCSAqIHVwIHdoaWxlIHdlJ3JlIHNsZWVwaW5nLgorCSAqIEFkdmVydGlzZSBv dXIgcHJvYyBudW1iZXIgc28gdGhhdCBiYWNrZW5kcyBjYW4gd2FrZSB1cyB1cCB3aGlsZSB3 ZSdyZQorCSAqIHNsZWVwaW5nLgogCSAqLwogCVBnQXJjaC0+cGdwcm9jbm8gPSBNeVByb2NO dW1iZXI7CiAKQEAgLTI4MywxMyArMjkzLDEyIEBAIFBnQXJjaFdha2V1cCh2b2lkKQogCWlu dAkJCWFyY2hfcGdwcm9jbm8gPSBQZ0FyY2gtPnBncHJvY25vOwogCiAJLyoKLQkgKiBXZSBk b24ndCBhY3F1aXJlIFByb2NBcnJheUxvY2sgaGVyZS4gIEl0J3MgYWN0dWFsbHkgZmluZSBi ZWNhdXNlCi0JICogcHJvY0xhdGNoIGlzbid0IGV2ZXIgZnJlZWQsIHNvIHdlIGp1c3QgY2Fu IHBvdGVudGlhbGx5IHNldCB0aGUgd3JvbmcKLQkgKiBwcm9jZXNzJyAob3Igbm8gcHJvY2Vz cycpIGxhdGNoLiAgRXZlbiBpbiB0aGF0IGNhc2UgdGhlIGFyY2hpdmVyIHdpbGwKLQkgKiBi ZSByZWxhdW5jaGVkIHNob3J0bHkgYW5kIHdpbGwgc3RhcnQgYXJjaGl2aW5nLgorCSAqIFdl IGRvbid0IGFjcXVpcmUgUHJvY0FycmF5TG9jayBoZXJlLCBzbyB3ZSBtYXkgc2VuZCB0aGUg aW50ZXJydXB0IHRvCisJICogd3JvbmcgcHJvY2VzcywgYnV0IHRoYXQncyBoYXJtbGVzcy4g IEV2ZW4gaW4gdGhhdCBjYXNlIHRoZSBhcmNoaXZlcgorCSAqIHdpbGwgYmUgcmVsYXVuY2hl ZCBzaG9ydGx5IGFuZCB3aWxsIHN0YXJ0IGFyY2hpdmluZy4KIAkgKi8KIAlpZiAoYXJjaF9w Z3Byb2NubyAhPSBJTlZBTElEX1BST0NfTlVNQkVSKQotCQlTZXRMYXRjaCgmR2V0UEdQcm9j QnlOdW1iZXIoYXJjaF9wZ3Byb2NubyktPnByb2NMYXRjaCk7CisJCVNlbmRJbnRlcnJ1cHQo SU5URVJSVVBUX1dBSVRfV0FLRVVQLCBhcmNoX3BncHJvY25vKTsKIH0KIAogCkBAIC0yOTgs OCArMzA3LDcgQEAgc3RhdGljIHZvaWQKIHBnYXJjaF93YWtlbl9zdG9wKFNJR05BTF9BUkdT KQogewogCS8qIHNldCBmbGFnIHRvIGRvIGEgZmluYWwgY3ljbGUgYW5kIHNodXQgZG93biBh ZnRlcndhcmRzICovCi0JcmVhZHlfdG9fc3RvcCA9IHRydWU7Ci0JU2V0TGF0Y2goTXlMYXRj aCk7CisJUmFpc2VJbnRlcnJ1cHQoSU5URVJSVVBUX1NIVVRET1dOX1BHQVJDSCk7CiB9CiAK IC8qCkBAIC0zMTAsNyArMzE4LDcgQEAgcGdhcmNoX3dha2VuX3N0b3AoU0lHTkFMX0FSR1Mp CiBzdGF0aWMgdm9pZAogcGdhcmNoX01haW5Mb29wKHZvaWQpCiB7Ci0JYm9vbAkJdGltZV90 b19zdG9wOworCWJvb2wJCXRpbWVfdG9fc3RvcCA9IGZhbHNlOwogCiAJLyoKIAkgKiBUaGVy ZSBzaG91bGRuJ3QgYmUgYW55dGhpbmcgZm9yIHRoZSBhcmNoaXZlciB0byBkbyBleGNlcHQg dG8gd2FpdCBmb3IgYQpAQCAtMzE5LDEzICszMjcsMTUgQEAgcGdhcmNoX01haW5Mb29wKHZv aWQpCiAJICovCiAJZG8KIAl7Ci0JCVJlc2V0TGF0Y2goTXlMYXRjaCk7CisJCS8qIEZJWE1F OiBpcyB0aGlzIHVzZWQgZm9yIHNvbWV0aGluZyBpbiBwZ2FyY2g/IFRvIG51ZGdlIGl0PyAq LworCQlDbGVhckludGVycnVwdChJTlRFUlJVUFRfV0FJVF9XQUtFVVApOwogCiAJCS8qIFdo ZW4gd2UgZ2V0IFNJR1VTUjIsIHdlIGRvIG9uZSBtb3JlIGFyY2hpdmUgY3ljbGUsIHRoZW4g ZXhpdCAqLwotCQl0aW1lX3RvX3N0b3AgPSByZWFkeV90b19zdG9wOworCQlpZiAoSW50ZXJy dXB0UGVuZGluZyhJTlRFUlJVUFRfU0hVVERPV05fUEdBUkNIKSkKKwkJCXRpbWVfdG9fc3Rv cCA9IHRydWU7CiAKIAkJLyogQ2hlY2sgZm9yIGJhcnJpZXIgZXZlbnRzIGFuZCBjb25maWcg dXBkYXRlICovCi0JCVByb2Nlc3NQZ0FyY2hJbnRlcnJ1cHRzKCk7CisJCUNIRUNLX0ZPUl9J TlRFUlJVUFRTKCk7CiAKIAkJLyoKIAkJICogSWYgd2UndmUgZ290dGVuIFNJR1RFUk0sIHdl IG5vcm1hbGx5IGp1c3Qgc2l0IGFuZCBkbyBub3RoaW5nIHVudGlsCkBAIC0zMzUsNyArMzQ1 LDcgQEAgcGdhcmNoX01haW5Mb29wKHZvaWQpCiAJCSAqIHRoYXQgdGhlIHBvc3RtYXN0ZXIg Y2FuIHN0YXJ0IGEgbmV3IGFyY2hpdmVyIGlmIG5lZWRlZC4gIEFsc28gZXhpdAogCQkgKiBp ZiB0aW1lIHVuZXhwZWN0ZWRseSBnb2VzIGJhY2t3YXJkLgogCQkgKi8KLQkJaWYgKFNodXRk b3duUmVxdWVzdFBlbmRpbmcpCisJCWlmIChJbnRlcnJ1cHRQZW5kaW5nKElOVEVSUlVQVF9U RVJNSU5BVEUpKQogCQl7CiAJCQl0aW1lX3QJCWN1cnRpbWUgPSB0aW1lKE5VTEwpOwogCkBA IC0zNDcsNiArMzU3LDcgQEAgcGdhcmNoX01haW5Mb29wKHZvaWQpCiAJCX0KIAogCQkvKiBE byB3aGF0IHdlJ3JlIGhlcmUgZm9yICovCisKIAkJcGdhcmNoX0FyY2hpdmVyQ29weUxvb3Ao KTsKIAogCQkvKgpAQCAtMzU3LDEwICszNjgsMTMgQEAgcGdhcmNoX01haW5Mb29wKHZvaWQp CiAJCXsKIAkJCWludAkJCXJjOwogCi0JCQlyYyA9IFdhaXRMYXRjaChNeUxhdGNoLAotCQkJ CQkJICAgV0xfTEFUQ0hfU0VUIHwgV0xfVElNRU9VVCB8IFdMX1BPU1RNQVNURVJfREVBVEgs Ci0JCQkJCQkgICBQR0FSQ0hfQVVUT1dBS0VfSU5URVJWQUwgKiAxMDAwTCwKLQkJCQkJCSAg IFdBSVRfRVZFTlRfQVJDSElWRVJfTUFJTik7CisJCQlyYyA9IFdhaXRJbnRlcnJ1cHQoSU5U RVJSVVBUX1dBSVRfV0FLRVVQIHwKKwkJCQkJCQkgICBJTlRFUlJVUFRfVEVSTUlOQVRFIHwK KwkJCQkJCQkgICBJTlRFUlJVUFRfU0hVVERPV05fUEdBUkNIIHwKKwkJCQkJCQkgICBDaGVj a0ZvckludGVycnVwdHNNYXNrLAorCQkJCQkJCSAgIFdMX0lOVEVSUlVQVCB8IFdMX1RJTUVP VVQgfCBXTF9QT1NUTUFTVEVSX0RFQVRILAorCQkJCQkJCSAgIFBHQVJDSF9BVVRPV0FLRV9J TlRFUlZBTCAqIDEwMDBMLAorCQkJCQkJCSAgIFdBSVRfRVZFTlRfQVJDSElWRVJfTUFJTik7 CiAJCQlpZiAocmMgJiBXTF9QT1NUTUFTVEVSX0RFQVRIKQogCQkJCXRpbWVfdG9fc3RvcCA9 IHRydWU7CiAJCX0KQEAgLTQwOSw3ICs0MjMsNyBAQCBwZ2FyY2hfQXJjaGl2ZXJDb3B5TG9v cCh2b2lkKQogCQkJICogY29tbWFuZCwgYW5kIHRoZSBzZWNvbmQgaXMgdG8gYXZvaWQgY29u ZmxpY3RzIHdpdGggYW5vdGhlcgogCQkJICogYXJjaGl2ZXIgc3Bhd25lZCBieSBhIG5ld2Vy IHBvc3RtYXN0ZXIuCiAJCQkgKi8KLQkJCWlmIChTaHV0ZG93blJlcXVlc3RQZW5kaW5nIHx8 ICFQb3N0bWFzdGVySXNBbGl2ZSgpKQorCQkJaWYgKEludGVycnVwdFBlbmRpbmcoSU5URVJS VVBUX1RFUk1JTkFURSkgfHwgIVBvc3RtYXN0ZXJJc0FsaXZlKCkpCiAJCQkJcmV0dXJuOwog CiAJCQkvKgpAQCAtNDE3LDcgKzQzMSw3IEBAIHBnYXJjaF9BcmNoaXZlckNvcHlMb29wKHZv aWQpCiAJCQkgKiB3ZSdsbCBhZG9wdCBhIG5ldyBzZXR0aW5nIGZvciBhcmNoaXZlX2NvbW1h bmQgYXMgc29vbiBhcwogCQkJICogcG9zc2libGUsIGV2ZW4gaWYgdGhlcmUgaXMgYSBiYWNr bG9nIG9mIGZpbGVzIHRvIGJlIGFyY2hpdmVkLgogCQkJICovCi0JCQlQcm9jZXNzUGdBcmNo SW50ZXJydXB0cygpOworCQkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIAogCQkJLyogUmVz ZXQgdmFyaWFibGVzIHRoYXQgbWlnaHQgYmUgc2V0IGJ5IHRoZSBjYWxsYmFjayAqLwogCQkJ YXJjaF9tb2R1bGVfY2hlY2tfZXJyZGV0YWlsX3N0cmluZyA9IE5VTEw7CkBAIC04NTAsMzAg Kzg2NCwxMyBAQCBwZ2FyY2hfZGllKGludCBjb2RlLCBEYXR1bSBhcmcpCiAJUGdBcmNoLT5w Z3Byb2NubyA9IElOVkFMSURfUFJPQ19OVU1CRVI7CiB9CiAKLS8qCi0gKiBJbnRlcnJ1cHQg aGFuZGxlciBmb3IgV0FMIGFyY2hpdmVyIHByb2Nlc3MuCi0gKgotICogVGhpcyBpcyBjYWxs ZWQgaW4gdGhlIGxvb3BzIHBnYXJjaF9NYWluTG9vcCBhbmQgcGdhcmNoX0FyY2hpdmVyQ29w eUxvb3AuCi0gKiBJdCBjaGVja3MgZm9yIGJhcnJpZXIgZXZlbnRzLCBjb25maWcgdXBkYXRl IGFuZCByZXF1ZXN0IGZvciBsb2dnaW5nIG9mCi0gKiBtZW1vcnkgY29udGV4dHMsIGJ1dCBu b3Qgc2h1dGRvd24gcmVxdWVzdCBiZWNhdXNlIGhvdyB0byBoYW5kbGUKLSAqIHNodXRkb3du IHJlcXVlc3QgaXMgZGlmZmVyZW50IGJldHdlZW4gdGhvc2UgbG9vcHMuCi0gKi8KIHN0YXRp YyB2b2lkCi1Qcm9jZXNzUGdBcmNoSW50ZXJydXB0cyh2b2lkKQorcGdhcmNoX1Byb2Nlc3ND b25maWdSZWxvYWRJbnRlcnJ1cHQodm9pZCkKIHsKLQlpZiAoUHJvY1NpZ25hbEJhcnJpZXJQ ZW5kaW5nKQotCQlQcm9jZXNzUHJvY1NpZ25hbEJhcnJpZXIoKTsKLQotCS8qIFBlcmZvcm0g bG9nZ2luZyBvZiBtZW1vcnkgY29udGV4dHMgb2YgdGhpcyBwcm9jZXNzICovCi0JaWYgKExv Z01lbW9yeUNvbnRleHRQZW5kaW5nKQotCQlQcm9jZXNzTG9nTWVtb3J5Q29udGV4dEludGVy cnVwdCgpOwotCi0JaWYgKENvbmZpZ1JlbG9hZFBlbmRpbmcpCiAJewogCQljaGFyCSAgICph cmNoaXZlTGliID0gcHN0cmR1cChYTG9nQXJjaGl2ZUxpYnJhcnkpOwogCQlib29sCQlhcmNo aXZlTGliQ2hhbmdlZDsKIAotCQlDb25maWdSZWxvYWRQZW5kaW5nID0gZmFsc2U7CiAJCVBy b2Nlc3NDb25maWdGaWxlKFBHQ19TSUdIVVApOwogCiAJCWlmIChYTG9nQXJjaGl2ZUxpYnJh cnlbMF0gIT0gJ1wwJyAmJiBYTG9nQXJjaGl2ZUNvbW1hbmRbMF0gIT0gJ1wwJykKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jIGIvc3JjL2JhY2tl bmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMKaW5kZXggZDYxMzNiZmViYzYuLmI3MzAwNmZj Y2E5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYwor KysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYwpAQCAtNDQyLDYgKzQ0 Miw3IEBAIHN0YXRpYyBDQUNfc3RhdGUgY2FuQWNjZXB0Q29ubmVjdGlvbnMoQmFja2VuZFR5 cGUgYmFja2VuZF90eXBlKTsKIHN0YXRpYyB2b2lkIHNpZ25hbF9jaGlsZChQTUNoaWxkICpw bWNoaWxkLCBpbnQgc2lnbmFsKTsKIHN0YXRpYyBib29sIFNpZ25hbENoaWxkcmVuKGludCBz aWduYWwsIEJhY2tlbmRUeXBlTWFzayB0YXJnZXRNYXNrKTsKIHN0YXRpYyB2b2lkIFRlcm1p bmF0ZUNoaWxkcmVuKGludCBzaWduYWwpOworc3RhdGljIHZvaWQgU2VuZEludGVycnVwdFRv UE1DaGlsZChQTUNoaWxkICpjaGlsZCwgdWludDMyIGludGVycnVwdE1hc2spOwogc3RhdGlj IGludAlDb3VudENoaWxkcmVuKEJhY2tlbmRUeXBlTWFzayB0YXJnZXRNYXNrKTsKIHN0YXRp YyB2b2lkIExhdW5jaE1pc3NpbmdCYWNrZ3JvdW5kUHJvY2Vzc2VzKHZvaWQpOwogc3RhdGlj IHZvaWQgbWF5YmVfc3RhcnRfYmd3b3JrZXJzKHZvaWQpOwpAQCAtNTM5LDEwICs1NDAsOCBA QCBQb3N0bWFzdGVyTWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCSAqIFNldCB1cCBz aWduYWwgaGFuZGxlcnMgZm9yIHRoZSBwb3N0bWFzdGVyIHByb2Nlc3MuCiAJICoKIAkgKiBD QVVUSU9OOiB3aGVuIGNoYW5naW5nIHRoaXMgbGlzdCwgY2hlY2sgZm9yIHNpZGUtZWZmZWN0 cyBvbiB0aGUgc2lnbmFsCi0JICogaGFuZGxpbmcgc2V0dXAgb2YgY2hpbGQgcHJvY2Vzc2Vz LiAgU2VlIHRjb3AvcG9zdGdyZXMuYywKLQkgKiBib290c3RyYXAvYm9vdHN0cmFwLmMsIHBv c3RtYXN0ZXIvYmd3cml0ZXIuYywgcG9zdG1hc3Rlci93YWx3cml0ZXIuYywKLQkgKiBwb3N0 bWFzdGVyL2F1dG92YWN1dW0uYywgcG9zdG1hc3Rlci9wZ2FyY2guYywgcG9zdG1hc3Rlci9z eXNsb2dnZXIuYywKLQkgKiBwb3N0bWFzdGVyL2Jnd29ya2VyLmMgYW5kIHBvc3RtYXN0ZXIv Y2hlY2twb2ludGVyLmMuCisJICogaGFuZGxpbmcgc2V0dXAgb2YgY2hpbGQgcHJvY2Vzc2Vz LiAgU2VlCisJICogU2V0UG9zdG1hc3RlckNoaWxkU2lnbmFsSGFuZGxlcnMoKQogCSAqLwog CXBxaW5pdG1hc2soKTsKIAlzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJkJsb2NrU2lnLCBO VUxMKTsKQEAgLTU1OSw3ICs1NTgsNiBAQCBQb3N0bWFzdGVyTWFpbihpbnQgYXJnYywgY2hh ciAqYXJndltdKQogCiAJLyogVGhpcyBtYXkgY29uZmlndXJlIFNJR1VSRywgZGVwZW5kaW5n IG9uIHBsYXRmb3JtLiAqLwogCUluaXRpYWxpemVXYWl0RXZlbnRTdXBwb3J0KCk7Ci0JSW5p dFByb2Nlc3NMb2NhbExhdGNoKCk7CiAKIAkvKgogCSAqIE5vIG90aGVyIHBsYWNlIGluIFBv c3RncmVzIHNob3VsZCB0b3VjaCBTSUdUVElOL1NJR1RUT1UgaGFuZGxpbmcuICBXZQpAQCAt NTgwLDYgKzU3OCw4IEBAIFBvc3RtYXN0ZXJNYWluKGludCBhcmdjLCBjaGFyICphcmd2W10p CiAJcHFzaWduYWwoU0lHWEZTWiwgU0lHX0lHTik7IC8qIGlnbm9yZWQgKi8KICNlbmRpZgog CisJLyogbm90ZTogd2UgZG8gbm90IGluc3RhbGwgdGhlIHN0YW5kYXJkIGludGVycnVwdCBo YW5kbGVycyBpbiBwb3N0bWFzdGVyICovCisKIAkvKiBCZWdpbiBhY2NlcHRpbmcgc2lnbmFs cy4gKi8KIAlzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJlVuQmxvY2tTaWcsIE5VTEwpOwog CkBAIC0xNjQ1LDE0ICsxNjQ1LDE1IEBAIENvbmZpZ3VyZVBvc3RtYXN0ZXJXYWl0U2V0KGJv b2wgYWNjZXB0X2Nvbm5lY3Rpb25zKQogCiAJcG1fd2FpdF9zZXQgPSBDcmVhdGVXYWl0RXZl bnRTZXQoTlVMTCwKIAkJCQkJCQkJCSBhY2NlcHRfY29ubmVjdGlvbnMgPyAoMSArIE51bUxp c3RlblNvY2tldHMpIDogMSk7Ci0JQWRkV2FpdEV2ZW50VG9TZXQocG1fd2FpdF9zZXQsIFdM X0xBVENIX1NFVCwgUEdJTlZBTElEX1NPQ0tFVCwgTXlMYXRjaCwKKwlBZGRXYWl0RXZlbnRU b1NldChwbV93YWl0X3NldCwgV0xfSU5URVJSVVBULCBQR0lOVkFMSURfU09DS0VULAorCQkJ CQkgIElOVEVSUlVQVF9DT05GSUdfUkVMT0FEIHwgSU5URVJSVVBUX1dBSVRfV0FLRVVQLAog CQkJCQkgIE5VTEwpOwogCiAJaWYgKGFjY2VwdF9jb25uZWN0aW9ucykKIAl7CiAJCWZvciAo aW50IGkgPSAwOyBpIDwgTnVtTGlzdGVuU29ja2V0czsgaSsrKQogCQkJQWRkV2FpdEV2ZW50 VG9TZXQocG1fd2FpdF9zZXQsIFdMX1NPQ0tFVF9BQ0NFUFQsIExpc3RlblNvY2tldHNbaV0s Ci0JCQkJCQkJICBOVUxMLCBOVUxMKTsKKwkJCQkJCQkgIDAsIE5VTEwpOwogCX0KIH0KIApA QCAtMTY4MSwxOSArMTY4MiwyMCBAQCBTZXJ2ZXJMb29wKHZvaWQpCiAJCQkJCQkJCSAgIDAg LyogcG9zdG1hc3RlciBwb3N0cyBubyB3YWl0X2V2ZW50cyAqLyApOwogCiAJCS8qCi0JCSAq IExhdGNoIHNldCBieSBzaWduYWwgaGFuZGxlciwgb3IgbmV3IGNvbm5lY3Rpb24gcGVuZGlu ZyBvbiBhbnkgb2YKLQkJICogb3VyIHNvY2tldHM/IElmIHRoZSBsYXR0ZXIsIGZvcmsgYSBj aGlsZCBwcm9jZXNzIHRvIGRlYWwgd2l0aCBpdC4KKwkJICogSW50ZXJydXB0IHJhaXNlZCBi eSBzaWduYWwgaGFuZGxlciwgb3IgbmV3IGNvbm5lY3Rpb24gcGVuZGluZyBvbgorCQkgKiBh bnkgb2Ygb3VyIHNvY2tldHM/ICBJZiB0aGUgbGF0dGVyLCBmb3JrIGEgY2hpbGQgcHJvY2Vz cyB0byBkZWFsCisJCSAqIHdpdGggaXQuCiAJCSAqLwogCQlmb3IgKGludCBpID0gMDsgaSA8 IG5ldmVudHM7IGkrKykKIAkJewotCQkJaWYgKGV2ZW50c1tpXS5ldmVudHMgJiBXTF9MQVRD SF9TRVQpCi0JCQkJUmVzZXRMYXRjaChNeUxhdGNoKTsKKwkJCWlmIChldmVudHNbaV0uZXZl bnRzICYgV0xfSU5URVJSVVBUKQorCQkJCUNsZWFySW50ZXJydXB0KElOVEVSUlVQVF9XQUlU X1dBS0VVUCk7CiAKIAkJCS8qCiAJCQkgKiBUaGUgZm9sbG93aW5nIHJlcXVlc3RzIGFyZSBo YW5kbGVkIHVuY29uZGl0aW9uYWxseSwgZXZlbiBpZiB3ZQotCQkJICogZGlkbid0IHNlZSBX TF9MQVRDSF9TRVQuICBUaGlzIGdpdmVzIGhpZ2ggcHJpb3JpdHkgdG8gc2h1dGRvd24KLQkJ CSAqIGFuZCByZWxvYWQgcmVxdWVzdHMgd2hlcmUgdGhlIGxhdGNoIGhhcHBlbnMgdG8gYXBw ZWFyIGxhdGVyIGluCi0JCQkgKiBldmVudHNbXSBvciB3aWxsIGJlIHJlcG9ydGVkIGJ5IGEg bGF0ZXIgY2FsbCB0bworCQkJICogZGlkbid0IHNlZSBXTF9JTlRFUlJVUFQuICBUaGlzIGdp dmVzIGhpZ2ggcHJpb3JpdHkgdG8gc2h1dGRvd24KKwkJCSAqIGFuZCByZWxvYWQgcmVxdWVz dHMgd2hlcmUgdGhlIGludGVycnVwdCBldmVudCBoYXBwZW5zIHRvIGFwcGVhcgorCQkJICog bGF0ZXIgaW4gZXZlbnRzW10gb3Igd2lsbCBiZSByZXBvcnRlZCBieSBhIGxhdGVyIGNhbGwg dG8KIAkJCSAqIFdhaXRFdmVudFNldFdhaXQoKS4KIAkJCSAqLwogCQkJaWYgKHBlbmRpbmdf cG1fc2h1dGRvd25fcmVxdWVzdCkKQEAgLTE3MzIsNyArMTczNCw3IEBAIFNlcnZlckxvb3Ao dm9pZCkKIAkJewogCQkJYXZsYXVuY2hlcl9uZWVkc19zaWduYWwgPSBmYWxzZTsKIAkJCWlm IChBdXRvVmFjTGF1bmNoZXJQTUNoaWxkICE9IE5VTEwpCi0JCQkJc2lnbmFsX2NoaWxkKEF1 dG9WYWNMYXVuY2hlclBNQ2hpbGQsIFNJR1VTUjIpOworCQkJCVNlbmRJbnRlcnJ1cHRUb1BN Q2hpbGQoQXV0b1ZhY0xhdW5jaGVyUE1DaGlsZCwgSU5URVJSVVBUX0FVVE9WQUNVVU1fV09S S0VSX0ZJTklTSEVEKTsKIAkJfQogCiAjaWZkZWYgSEFWRV9QVEhSRUFEX0lTX1RIUkVBREVE X05QCkBAIC0xOTg1LDcgKzE5ODcsNyBAQCBzdGF0aWMgdm9pZAogaGFuZGxlX3BtX3Btc2ln bmFsX3NpZ25hbChTSUdOQUxfQVJHUykKIHsKIAlwZW5kaW5nX3BtX3Btc2lnbmFsID0gdHJ1 ZTsKLQlTZXRMYXRjaChNeUxhdGNoKTsKKwlSYWlzZUludGVycnVwdChJTlRFUlJVUFRfV0FJ VF9XQUtFVVApOwogfQogCiAvKgpAQCAtMTk5NSw3ICsxOTk3LDcgQEAgc3RhdGljIHZvaWQK IGhhbmRsZV9wbV9yZWxvYWRfcmVxdWVzdF9zaWduYWwoU0lHTkFMX0FSR1MpCiB7CiAJcGVu ZGluZ19wbV9yZWxvYWRfcmVxdWVzdCA9IHRydWU7Ci0JU2V0TGF0Y2goTXlMYXRjaCk7CisJ UmFpc2VJbnRlcnJ1cHQoSU5URVJSVVBUX1dBSVRfV0FLRVVQKTsKIH0KIAogLyoKQEAgLTIw NzIsNyArMjA3NCw3IEBAIGhhbmRsZV9wbV9zaHV0ZG93bl9yZXF1ZXN0X3NpZ25hbChTSUdO QUxfQVJHUykKIAkJCXBlbmRpbmdfcG1fc2h1dGRvd25fcmVxdWVzdCA9IHRydWU7CiAJCQli cmVhazsKIAl9Ci0JU2V0TGF0Y2goTXlMYXRjaCk7CisJUmFpc2VJbnRlcnJ1cHQoSU5URVJS VVBUX1dBSVRfV0FLRVVQKTsKIH0KIAogLyoKQEAgLTIyMzMsNyArMjIzNSw3IEBAIHN0YXRp YyB2b2lkCiBoYW5kbGVfcG1fY2hpbGRfZXhpdF9zaWduYWwoU0lHTkFMX0FSR1MpCiB7CiAJ cGVuZGluZ19wbV9jaGlsZF9leGl0ID0gdHJ1ZTsKLQlTZXRMYXRjaChNeUxhdGNoKTsKKwlS YWlzZUludGVycnVwdChJTlRFUlJVUFRfV0FJVF9XQUtFVVApOwogfQogCiAvKgpAQCAtMjI1 OSw2ICsyMjYxLDcgQEAgcHJvY2Vzc19wbV9jaGlsZF9leGl0KHZvaWQpCiAJCSAqLwogCQlp ZiAoU3RhcnR1cFBNQ2hpbGQgJiYgcGlkID09IFN0YXJ0dXBQTUNoaWxkLT5waWQpCiAJCXsK KwkJCWVsb2coTE9HLCAiU1RBUlRVUCBQUk9DIEVYSVRFRCIpOwogCQkJUmVsZWFzZVBvc3Rt YXN0ZXJDaGlsZFNsb3QoU3RhcnR1cFBNQ2hpbGQpOwogCQkJU3RhcnR1cFBNQ2hpbGQgPSBO VUxMOwogCkBAIC0yNTgxLDYgKzI1ODQsNyBAQCBDbGVhbnVwQmFja2VuZChQTUNoaWxkICpi cCwKIAlib29sCQljcmFzaGVkID0gZmFsc2U7CiAJYm9vbAkJbG9nZ2VkID0gZmFsc2U7CiAJ cGlkX3QJCWJwX3BpZDsKKwlpbnQJCQlicF9jaGlsZF9zbG90OwogCWJvb2wJCWJwX2Jnd29y a2VyX25vdGlmeTsKIAlCYWNrZW5kVHlwZSBicF9ia2VuZF90eXBlOwogCVJlZ2lzdGVyZWRC Z1dvcmtlciAqcnc7CkBAIC0yNjI4LDYgKzI2MzIsNyBAQCBDbGVhbnVwQmFja2VuZChQTUNo aWxkICpicCwKIAkgKiBkZXRhY2hlZCBjbGVhbmx5LgogCSAqLwogCWJwX3BpZCA9IGJwLT5w aWQ7CisJYnBfY2hpbGRfc2xvdCA9IGJwLT5jaGlsZF9zbG90OwogCWJwX2Jnd29ya2VyX25v dGlmeSA9IGJwLT5iZ3dvcmtlcl9ub3RpZnk7CiAJYnBfYmtlbmRfdHlwZSA9IGJwLT5ia2Vu ZF90eXBlOwogCXJ3ID0gYnAtPnJ3OwpAQCAtMjY1NSwxNCArMjY2MCwxNCBAQCBDbGVhbnVw QmFja2VuZChQTUNoaWxkICpicCwKIAl9CiAKIAkvKgotCSAqIFRoaXMgYmFja2VuZCBtYXkg aGF2ZSBiZWVuIHNsYXRlZCB0byByZWNlaXZlIFNJR1VTUjEgd2hlbiBzb21lCi0JICogYmFj a2dyb3VuZCB3b3JrZXIgc3RhcnRlZCBvciBzdG9wcGVkLiAgQ2FuY2VsIHRob3NlIG5vdGlm aWNhdGlvbnMsIGFzCi0JICogd2UgZG9uJ3Qgd2FudCB0byBzaWduYWwgUElEcyB0aGF0IGFy ZSBub3QgUG9zdGdyZVNRTCBiYWNrZW5kcy4gIFRoaXMKKwkgKiBUaGlzIGJhY2tlbmQgbWF5 IGhhdmUgYmVlbiBzbGF0ZWQgdG8gcmVjZWl2ZSBJTlRFUlJVUFRfV0FJVF9XQUtFVVAgd2hl bgorCSAqIHNvbWUgYmFja2dyb3VuZCB3b3JrZXIgc3RhcnRlZCBvciBzdG9wcGVkLiAgQ2Fu Y2VsIHRob3NlIG5vdGlmaWNhdGlvbnMsCisJICogYXMgd2UgZG9uJ3Qgd2FudCB0byBzaWdu YWwgUElEcyB0aGF0IGFyZSBub3QgUG9zdGdyZVNRTCBiYWNrZW5kcy4gIFRoaXMKIAkgKiBn ZXRzIHNraXBwZWQgaW4gdGhlIChwcm9iYWJseSB2ZXJ5IGNvbW1vbikgY2FzZSB3aGVyZSB0 aGUgYmFja2VuZCBoYXMKIAkgKiBuZXZlciByZXF1ZXN0ZWQgYW55IHN1Y2ggbm90aWZpY2F0 aW9ucy4KIAkgKi8KIAlpZiAoYnBfYmd3b3JrZXJfbm90aWZ5KQotCQlCYWNrZ3JvdW5kV29y a2VyU3RvcE5vdGlmaWNhdGlvbnMoYnBfcGlkKTsKKwkJQmFja2dyb3VuZFdvcmtlclN0b3BO b3RpZmljYXRpb25zKGJwX2NoaWxkX3Nsb3QpOwogCiAJLyoKIAkgKiBJZiBpdCB3YXMgYW4g YXV0b3ZhY3V1bSB3b3JrZXIsIHdha2UgdXAgdGhlIGxhdW5jaGVyIHNvIHRoYXQgaXQgY2Fu CkBAIC0yNjcwLDcgKzI2NzUsNyBAQCBDbGVhbnVwQmFja2VuZChQTUNoaWxkICpicCwKIAkg KiB0aGUgcmVtYWluaW5nIHdvcmtlcnMuCiAJICovCiAJaWYgKGJwX2JrZW5kX3R5cGUgPT0g Ql9BVVRPVkFDX1dPUktFUiAmJiBBdXRvVmFjTGF1bmNoZXJQTUNoaWxkICE9IE5VTEwpCi0J CXNpZ25hbF9jaGlsZChBdXRvVmFjTGF1bmNoZXJQTUNoaWxkLCBTSUdVU1IyKTsKKwkJU2Vu ZEludGVycnVwdFRvUE1DaGlsZChBdXRvVmFjTGF1bmNoZXJQTUNoaWxkLCBJTlRFUlJVUFRf QVVUT1ZBQ1VVTV9XT1JLRVJfRklOSVNIRUQpOwogCiAJLyoKIAkgKiBJZiBpdCB3YXMgYSBi YWNrZ3JvdW5kIHdvcmtlciwgYWxzbyB1cGRhdGUgaXRzIFJlZ2lzdGVyZWRCZ1dvcmtlcgpA QCAtMzA1NCw3ICszMDU5LDcgQEAgUG9zdG1hc3RlclN0YXRlTWFjaGluZSh2b2lkKQogCQkJ CS8qIEFuZCB0ZWxsIGl0IHRvIHdyaXRlIHRoZSBzaHV0ZG93biBjaGVja3BvaW50ICovCiAJ CQkJaWYgKENoZWNrcG9pbnRlclBNQ2hpbGQgIT0gTlVMTCkKIAkJCQl7Ci0JCQkJCXNpZ25h bF9jaGlsZChDaGVja3BvaW50ZXJQTUNoaWxkLCBTSUdJTlQpOworCQkJCQlTZW5kSW50ZXJy dXB0VG9QTUNoaWxkKENoZWNrcG9pbnRlclBNQ2hpbGQsIElOVEVSUlVQVF9TSFVURE9XTl9Y TE9HKTsKIAkJCQkJVXBkYXRlUE1TdGF0ZShQTV9XQUlUX1hMT0dfU0hVVERPV04pOwogCQkJ CX0KIAkJCQllbHNlCkBAIC0zMTIxLDcgKzMxMjYsNyBAQCBQb3N0bWFzdGVyU3RhdGVNYWNo aW5lKHZvaWQpCiAJCQkgKiBpbnRlcmZlcmluZy4KIAkJCSAqLwogCQkJaWYgKENoZWNrcG9p bnRlclBNQ2hpbGQgIT0gTlVMTCkKLQkJCQlzaWduYWxfY2hpbGQoQ2hlY2twb2ludGVyUE1D aGlsZCwgU0lHVVNSMik7CisJCQkJU2VuZEludGVycnVwdFRvUE1DaGlsZChDaGVja3BvaW50 ZXJQTUNoaWxkLCBJTlRFUlJVUFRfVEVSTUlOQVRFKTsKIAkJfQogCX0KIApAQCAtMzU0Myw2 ICszNTQ4LDE5IEBAIFRlcm1pbmF0ZUNoaWxkcmVuKGludCBzaWduYWwpCiAJfQogfQogCitz dGF0aWMgdm9pZAorU2VuZEludGVycnVwdFRvUE1DaGlsZChQTUNoaWxkICpjaGlsZCwgdWlu dDMyIGludGVycnVwdE1hc2spCit7CisJUHJvY051bWJlcglwcm9jbm8gPSBHZXRQTUNoaWxk UHJvY051bWJlcihjaGlsZC0+Y2hpbGRfc2xvdCk7CisKKwkvKgorCSAqIEZJWE1FOiBJZiB0 aGUgY2hpbGQgaGFzbid0IGRvbmUgSW5pdFByb2Nlc3MgeWV0LCBpdCBoYXMgbm8gUEdQUk9D IGVudHJ5CisJICogYW5kIHRoZSBpbnRlcnJ1cHQgd2lsbCBiZSBsb3N0LgorCSAqLworCWlm IChwcm9jbm8gIT0gSU5WQUxJRF9QUk9DX05VTUJFUikKKwkJU2VuZEludGVycnVwdChpbnRl cnJ1cHRNYXNrLCBwcm9jbm8pOworfQorCiAvKgogICogQmFja2VuZFN0YXJ0dXAgLS0gc3Rh cnQgYmFja2VuZCBwcm9jZXNzCiAgKgpAQCAtMzg0NSw2ICszODYzLDggQEAgcHJvY2Vzc19w bV9wbXNpZ25hbCh2b2lkKQogCQkJLyoKIAkJCSAqIFdha2VuIHdhbHNlbmRlcnMgZm9yIHRo ZSBsYXN0IHRpbWUuIE5vIHJlZ3VsYXIgYmFja2VuZHMgc2hvdWxkCiAJCQkgKiBiZSBhcm91 bmQgYW55bW9yZS4KKwkJCSAqCisJCQkgKiBGSVhNRTogc2VuZCBJTlRFUlJVUFRfV0FMU05E X1NUT1AgaW5zdGVhZAogCQkJICovCiAJCQlTaWduYWxDaGlsZHJlbihTSUdVU1IyLCBidG1h c2soQl9XQUxfU0VOREVSKSk7CiAKQEAgLTM5MDcsMTAgKzM5MjcsMTYgQEAgcHJvY2Vzc19w bV9wbXNpZ25hbCh2b2lkKQogCQkvKgogCQkgKiBUZWxsIHN0YXJ0dXAgcHJvY2VzcyB0byBm aW5pc2ggcmVjb3ZlcnkuCiAJCSAqCisJCSAqIFRoZSBJTlRFUlJVUFRfQ0hFQ0tfUFJPTU9U RSBmbGFnIGhpbnRzIHRoZSBzdGFydHVwIHByb2Nlc3MgdG8gY2hlY2sKKwkJICogZm9yIHRo ZSBzaWduYWwgZmlsZSwgd2hpbGUgSU5URVJSVVBUX1dBTF9BUlJJVkVEIHdha2VzIHVwIHRo ZQorCQkgKiBwcm9jZXNzIGZyb20gc2xlZXAuCisJCSAqCiAJCSAqIExlYXZlIHRoZSBwcm9t b3RlIHNpZ25hbCBmaWxlIGluIHBsYWNlIGFuZCBsZXQgdGhlIFN0YXJ0dXAgcHJvY2Vzcwog CQkgKiBkbyB0aGUgdW5saW5rLgogCQkgKi8KLQkJc2lnbmFsX2NoaWxkKFN0YXJ0dXBQTUNo aWxkLCBTSUdVU1IyKTsKKwkJU2VuZEludGVycnVwdFRvUE1DaGlsZChTdGFydHVwUE1DaGls ZCwKKwkJCQkJCQkgICBJTlRFUlJVUFRfQ0hFQ0tfUFJPTU9URSB8IElOVEVSUlVQVF9XQUxf QVJSSVZFRAorCQkJKTsKIAl9CiB9CiAKQEAgLTM5MjEsNyArMzk0Nyw3IEBAIHByb2Nlc3Nf cG1fcG1zaWduYWwodm9pZCkKICAqIGJ1dCB3ZSBkbyB1c2UgaW4gYmFja2VuZHMuICBJZiB3 ZSB3ZXJlIHRvIFNJR19JR04gc3VjaCBzaWduYWxzIGluIHRoZQogICogcG9zdG1hc3Rlciwg dGhlbiBhIG5ld2x5IHN0YXJ0ZWQgYmFja2VuZCBtaWdodCBkcm9wIGEgc2lnbmFsIHRoYXQg YXJyaXZlcwogICogYmVmb3JlIGl0J3MgYWJsZSB0byByZWNvbmZpZ3VyZSBpdHMgc2lnbmFs IHByb2Nlc3NpbmcuICAoU2VlIG5vdGVzIGluCi0gKiB0Y29wL3Bvc3RncmVzLmMuKQorICog dGNvcC9wb3N0Z3Jlcy5jLikgWFhYOiB3aGVyZSBhcmUgdGhvc2Ugbm90ZXMgbm93PwogICov CiBzdGF0aWMgdm9pZAogZHVtbXlfaGFuZGxlcihTSUdOQUxfQVJHUykKQEAgLTQyOTcsMTUg KzQzMjMsMTUgQEAgbWF5YmVfc3RhcnRfYmd3b3JrZXJzKHZvaWQpCiAJCXsKIAkJCWlmIChy dy0+cndfd29ya2VyLmJnd19yZXN0YXJ0X3RpbWUgPT0gQkdXX05FVkVSX1JFU1RBUlQpCiAJ CQl7Ci0JCQkJaW50CQkJbm90aWZ5X3BpZDsKKwkJCQlQcm9jTnVtYmVyCW5vdGlmeV9wcm9j X251bWJlcjsKIAotCQkJCW5vdGlmeV9waWQgPSBydy0+cndfd29ya2VyLmJnd19ub3RpZnlf cGlkOworCQkJCW5vdGlmeV9wcm9jX251bWJlciA9IEdldE5vdGlmeVByb2NOdW1iZXJGb3JS ZWdpc3RlcmVkV29ya2VyKHJ3KTsKIAogCQkJCUZvcmdldEJhY2tncm91bmRXb3JrZXIocncp OwogCiAJCQkJLyogUmVwb3J0IHdvcmtlciBpcyBnb25lIG5vdy4gKi8KLQkJCQlpZiAobm90 aWZ5X3BpZCAhPSAwKQotCQkJCQlraWxsKG5vdGlmeV9waWQsIFNJR1VTUjEpOworCQkJCWlm IChub3RpZnlfcHJvY19udW1iZXIgIT0gSU5WQUxJRF9QUk9DX05VTUJFUikKKwkJCQkJU2Vu ZEludGVycnVwdChJTlRFUlJVUFRfV0FJVF9XQUtFVVAsIG5vdGlmeV9wcm9jX251bWJlcik7 CiAKIAkJCQljb250aW51ZTsKIAkJCX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3Rt YXN0ZXIvc3RhcnR1cC5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9zdGFydHVwLmMKaW5k ZXggY2IxYTc2Nzg1OGIuLmZhMWQ0ZDZhOGU4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9w b3N0bWFzdGVyL3N0YXJ0dXAuYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3N0YXJ0 dXAuYwpAQCAtMjIsMTIgKzIyLDE1IEBACiAjaW5jbHVkZSAiYWNjZXNzL3hsb2cuaCIKICNp bmNsdWRlICJhY2Nlc3MveGxvZ3JlY292ZXJ5LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2d1 dGlscy5oIgorI2luY2x1ZGUgImlwYy9pbnRlcnJ1cHQuaCIKKyNpbmNsdWRlICJpcGMvc2ln bmFsX2hhbmRsZXJzLmgiCiAjaW5jbHVkZSAibGlicHEvcHFzaWduYWwuaCIKICNpbmNsdWRl ICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL2F1eHByb2Nlc3MuaCIKICNp bmNsdWRlICJwb3N0bWFzdGVyL3N0YXJ0dXAuaCIKICNpbmNsdWRlICJzdG9yYWdlL2lwYy5o IgogI2luY2x1ZGUgInN0b3JhZ2UvcG1zaWduYWwuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3By b2MuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2NzaWduYWwuaCIKICNpbmNsdWRlICJzdG9y YWdlL3N0YW5kYnkuaCIKICNpbmNsdWRlICJ1dGlscy9ndWMuaCIKQEAgLTM4LDIxICs0MSwx NCBAQAogI2lmbmRlZiBVU0VfUE9TVE1BU1RFUl9ERUFUSF9TSUdOQUwKIC8qCiAgKiBPbiBz eXN0ZW1zIHRoYXQgbmVlZCB0byBtYWtlIGEgc3lzdGVtIGNhbGwgdG8gZmluZCBvdXQgaWYg dGhlIHBvc3RtYXN0ZXIgaGFzCi0gKiBnb25lIGF3YXksIHdlJ2xsIGRvIHNvIG9ubHkgZXZl cnkgTnRoIGNhbGwgdG8gUHJvY2Vzc1N0YXJ0dXBQcm9jSW50ZXJydXB0cygpLgorICogZ29u ZSBhd2F5LCB3ZSdsbCBkbyBzbyBvbmx5IGV2ZXJ5IE50aCBjYWxsIHRvIFN0YXJ0dXBDaGVj a1Bvc3RtYXN0ZXJEZWF0aCgpLgogICogVGhpcyBvbmx5IGFmZmVjdHMgaG93IGxvbmcgaXQg dGFrZXMgdXMgdG8gZGV0ZWN0IHRoZSBjb25kaXRpb24gd2hpbGUgd2UncmUKLSAqIGJ1c3kg cmVwbGF5aW5nIFdBTC4gIExhdGNoIHdhaXRzIGFuZCBzaW1pbGFyIHdoaWNoIHNob3VsZCBy ZWFjdCBpbW1lZGlhdGVseQorICogYnVzeSByZXBsYXlpbmcgV0FMLiAgSW50ZXJydXB0IHdh aXRzIGFuZCBzaW1pbGFyIHNob3VsZCByZWFjdCBpbW1lZGlhdGVseQogICogdGhyb3VnaCB0 aGUgdXN1YWwgdGVjaG5pcXVlcy4KICAqLwogI2RlZmluZSBQT1NUTUFTVEVSX1BPTExfUkFU RV9MSU1JVCAxMDI0CiAjZW5kaWYKIAotLyoKLSAqIEZsYWdzIHNldCBieSBpbnRlcnJ1cHQg aGFuZGxlcnMgZm9yIGxhdGVyIHNlcnZpY2UgaW4gdGhlIHJlZG8gbG9vcC4KLSAqLwotc3Rh dGljIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBnb3RfU0lHSFVQID0gZmFsc2U7Ci1zdGF0aWMg dm9sYXRpbGUgc2lnX2F0b21pY190IHNodXRkb3duX3JlcXVlc3RlZCA9IGZhbHNlOwotc3Rh dGljIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBwcm9tb3RlX3NpZ25hbGVkID0gZmFsc2U7Ci0K IC8qCiAgKiBGbGFnIHNldCB3aGVuIGV4ZWN1dGluZyBhIHJlc3RvcmUgY29tbWFuZCwgdG8g dGVsbCBTSUdURVJNIHNpZ25hbCBoYW5kbGVyCiAgKiB0aGF0IGl0J3Mgc2FmZSB0byBqdXN0 IHByb2NfZXhpdC4KQEAgLTc1LDEwICs3MSw2IEBAIHN0YXRpYyB2b2xhdGlsZSBzaWdfYXRv bWljX3Qgc3RhcnR1cF9wcm9ncmVzc190aW1lcl9leHBpcmVkID0gZmFsc2U7CiAgKi8KIGlu dAkJCWxvZ19zdGFydHVwX3Byb2dyZXNzX2ludGVydmFsID0gMTAwMDA7CS8qIDEwIHNlYyAq LwogCi0vKiBTaWduYWwgaGFuZGxlcnMgKi8KLXN0YXRpYyB2b2lkIFN0YXJ0dXBQcm9jVHJp Z2dlckhhbmRsZXIoU0lHTkFMX0FSR1MpOwotc3RhdGljIHZvaWQgU3RhcnR1cFByb2NTaWdI dXBIYW5kbGVyKFNJR05BTF9BUkdTKTsKLQogLyogQ2FsbGJhY2tzICovCiBzdGF0aWMgdm9p ZCBTdGFydHVwUHJvY0V4aXQoaW50IGNvZGUsIERhdHVtIGFyZyk7CiAKQEAgLTg4LDIyICs4 MCw2IEBAIHN0YXRpYyB2b2lkIFN0YXJ0dXBQcm9jRXhpdChpbnQgY29kZSwgRGF0dW0gYXJn KTsKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIAotLyogU0lH VVNSMjogc2V0IGZsYWcgdG8gZmluaXNoIHJlY292ZXJ5ICovCi1zdGF0aWMgdm9pZAotU3Rh cnR1cFByb2NUcmlnZ2VySGFuZGxlcihTSUdOQUxfQVJHUykKLXsKLQlwcm9tb3RlX3NpZ25h bGVkID0gdHJ1ZTsKLQlXYWtldXBSZWNvdmVyeSgpOwotfQotCi0vKiBTSUdIVVA6IHNldCBm bGFnIHRvIHJlLXJlYWQgY29uZmlnIGZpbGUgYXQgbmV4dCBjb252ZW5pZW50IHRpbWUgKi8K LXN0YXRpYyB2b2lkCi1TdGFydHVwUHJvY1NpZ0h1cEhhbmRsZXIoU0lHTkFMX0FSR1MpCi17 Ci0JZ290X1NJR0hVUCA9IHRydWU7Ci0JV2FrZXVwUmVjb3ZlcnkoKTsKLX0KLQogLyogU0lH VEVSTTogc2V0IGZsYWcgdG8gYWJvcnQgcmVkbyBhbmQgZXhpdCAqLwogc3RhdGljIHZvaWQK IFN0YXJ0dXBQcm9jU2h1dGRvd25IYW5kbGVyKFNJR05BTF9BUkdTKQpAQCAtMTExLDggKzg3 LDE2IEBAIFN0YXJ0dXBQcm9jU2h1dGRvd25IYW5kbGVyKFNJR05BTF9BUkdTKQogCWlmIChp bl9yZXN0b3JlX2NvbW1hbmQpCiAJCXByb2NfZXhpdCgxKTsKIAllbHNlCi0JCXNodXRkb3du X3JlcXVlc3RlZCA9IHRydWU7Ci0JV2FrZXVwUmVjb3ZlcnkoKTsKKwkJUmFpc2VJbnRlcnJ1 cHQoSU5URVJSVVBUX1RFUk1JTkFURSk7Cit9CisKKy8qIFByb2Nlc3MgdmFyaW91cyBpbnRl cnJ1cHRzIHRoYXQgbWlnaHQgYmUgc2VudCB0byB0aGUgc3RhcnR1cCBwcm9jZXNzICovCisK K3N0YXRpYyB2b2lkCitQcm9jZXNzU3RhcnR1cFByb2NUZXJtaW5hdGVJbnRlcnJ1cHQodm9p ZCkKK3sKKwkvKiB3ZSB3ZXJlIHJlcXVlc3RlZCB0byBleGl0IHdpdGhvdXQgZmluaXNoaW5n IHJlY292ZXJ5LiAqLworCXByb2NfZXhpdCgxKTsKIH0KIAogLyoKQEAgLTEyMiw3ICsxMDYs OCBAQCBTdGFydHVwUHJvY1NodXRkb3duSGFuZGxlcihTSUdOQUxfQVJHUykKICAqIHRvIHJl c3RhcnQgaXQuCiAgKi8KIHN0YXRpYyB2b2lkCi1TdGFydHVwUmVyZWFkQ29uZmlnKHZvaWQp CitQcm9jZXNzU3RhcnR1cFByb2NDb25maWdSZWxvYWRJbnRlcnJ1cHQodm9pZCkKKwogewog CWNoYXIJICAgKmNvbm5pbmZvID0gcHN0cmR1cChQcmltYXJ5Q29ubkluZm8pOwogCWNoYXIJ ICAgKnNsb3RuYW1lID0gcHN0cmR1cChQcmltYXJ5U2xvdE5hbWUpOwpAQCAtMTQ5LDI5ICsx MzQsMTMgQEAgU3RhcnR1cFJlcmVhZENvbmZpZyh2b2lkKQogCQlTdGFydHVwUmVxdWVzdFdh bFJlY2VpdmVyUmVzdGFydCgpOwogfQogCi0vKiBQcm9jZXNzIHZhcmlvdXMgc2lnbmFscyB0 aGF0IG1pZ2h0IGJlIHNlbnQgdG8gdGhlIHN0YXJ0dXAgcHJvY2VzcyAqLwogdm9pZAotUHJv Y2Vzc1N0YXJ0dXBQcm9jSW50ZXJydXB0cyh2b2lkKQorU3RhcnR1cFByb2NDaGVja1Bvc3Rt YXN0ZXJEZWF0aCh2b2lkKQogewogI2lmZGVmIFBPU1RNQVNURVJfUE9MTF9SQVRFX0xJTUlU CiAJc3RhdGljIHVpbnQzMiBwb3N0bWFzdGVyX3BvbGxfY291bnQgPSAwOwogI2VuZGlmCiAK LQkvKgotCSAqIFByb2Nlc3MgYW55IHJlcXVlc3RzIG9yIHNpZ25hbHMgcmVjZWl2ZWQgcmVj ZW50bHkuCi0JICovCi0JaWYgKGdvdF9TSUdIVVApCi0JewotCQlnb3RfU0lHSFVQID0gZmFs c2U7Ci0JCVN0YXJ0dXBSZXJlYWRDb25maWcoKTsKLQl9Ci0KLQkvKgotCSAqIENoZWNrIGlm IHdlIHdlcmUgcmVxdWVzdGVkIHRvIGV4aXQgd2l0aG91dCBmaW5pc2hpbmcgcmVjb3Zlcnku Ci0JICovCi0JaWYgKHNodXRkb3duX3JlcXVlc3RlZCkKLQkJcHJvY19leGl0KDEpOwotCiAJ LyoKIAkgKiBFbWVyZ2VuY3kgYmFpbG91dCBpZiBwb3N0bWFzdGVyIGhhcyBkaWVkLiAgVGhp cyBpcyB0byBhdm9pZCB0aGUKIAkgKiBuZWNlc3NpdHkgZm9yIG1hbnVhbCBjbGVhbnVwIG9m IGFsbCBwb3N0bWFzdGVyIGNoaWxkcmVuLiAgRG8gdGhpcyBsZXNzCkBAIC0xODQsMTQgKzE1 Myw2IEBAIFByb2Nlc3NTdGFydHVwUHJvY0ludGVycnVwdHModm9pZCkKICNlbmRpZgogCQkh UG9zdG1hc3RlcklzQWxpdmUoKSkKIAkJZXhpdCgxKTsKLQotCS8qIFByb2Nlc3MgYmFycmll ciBldmVudHMgKi8KLQlpZiAoUHJvY1NpZ25hbEJhcnJpZXJQZW5kaW5nKQotCQlQcm9jZXNz UHJvY1NpZ25hbEJhcnJpZXIoKTsKLQotCS8qIFBlcmZvcm0gbG9nZ2luZyBvZiBtZW1vcnkg Y29udGV4dHMgb2YgdGhpcyBwcm9jZXNzICovCi0JaWYgKExvZ01lbW9yeUNvbnRleHRQZW5k aW5nKQotCQlQcm9jZXNzTG9nTWVtb3J5Q29udGV4dEludGVycnVwdCgpOwogfQogCiAKQEAg LTIwNSw2ICsxNjYsOCBAQCBTdGFydHVwUHJvY0V4aXQoaW50IGNvZGUsIERhdHVtIGFyZykK IAkvKiBTaHV0ZG93biB0aGUgcmVjb3ZlcnkgZW52aXJvbm1lbnQgKi8KIAlpZiAoc3RhbmRi eVN0YXRlICE9IFNUQU5EQllfRElTQUJMRUQpCiAJCVNodXRkb3duUmVjb3ZlcnlUcmFuc2Fj dGlvbkVudmlyb25tZW50KCk7CisKKwlQcm9jR2xvYmFsLT5zdGFydHVwUHJvYyA9IElOVkFM SURfUFJPQ19OVU1CRVI7CiB9CiAKIApAQCAtMjIwLDIwICsxODMsMjMgQEAgU3RhcnR1cFBy b2Nlc3NNYWluKGNvbnN0IHZvaWQgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0 YV9sZW4pCiAJTXlCYWNrZW5kVHlwZSA9IEJfU1RBUlRVUDsKIAlBdXhpbGlhcnlQcm9jZXNz TWFpbkNvbW1vbigpOwogCisJLyoKKwkgKiBBZHZlcnRpc2Ugb3VyIHByb2MgbnVtYmVyIHNv IHRoYXQgYmFja2VuZHMgY2FuIHdha2UgdXMgdXAsIHdoZW4gdGhlCisJICogc2VydmVyIGlz IHByb21vdGVkIG9yIHJlY292ZXJ5IGlzIHBhdXNlZC9yZXN1bWVkLgorCSAqLworCVByb2NH bG9iYWwtPnN0YXJ0dXBQcm9jID0gTXlQcm9jTnVtYmVyOworCiAJLyogQXJyYW5nZSB0byBj bGVhbiB1cCBhdCBzdGFydHVwIHByb2Nlc3MgZXhpdCAqLwogCW9uX3NobWVtX2V4aXQoU3Rh cnR1cFByb2NFeGl0LCAwKTsKIAogCS8qCiAJICogUHJvcGVybHkgYWNjZXB0IG9yIGlnbm9y ZSBzaWduYWxzIHRoZSBwb3N0bWFzdGVyIG1pZ2h0IHNlbmQgdXMuCiAJICovCi0JcHFzaWdu YWwoU0lHSFVQLCBTdGFydHVwUHJvY1NpZ0h1cEhhbmRsZXIpOyAvKiByZWxvYWQgY29uZmln IGZpbGUgKi8KLQlwcXNpZ25hbChTSUdJTlQsIFNJR19JR04pOwkvKiBpZ25vcmUgcXVlcnkg Y2FuY2VsICovCisKKwkvKiBvdmVycmlkZSBTSUdURVJNIGJlY2F1c2Ugd2UgbmVlZCBhIGxp dHRsZSBtb3JlIGNvbXBsaWNhdGVkIGhhbmRsaW5nICovCiAJcHFzaWduYWwoU0lHVEVSTSwg U3RhcnR1cFByb2NTaHV0ZG93bkhhbmRsZXIpOwkvKiByZXF1ZXN0IHNodXRkb3duICovCi0J LyogU0lHUVVJVCBoYW5kbGVyIHdhcyBhbHJlYWR5IHNldCB1cCBieSBJbml0UG9zdG1hc3Rl ckNoaWxkICovCisKIAlJbml0aWFsaXplVGltZW91dHMoKTsJCS8qIGVzdGFibGlzaGVzIFNJ R0FMUk0gaGFuZGxlciAqLwotCXBxc2lnbmFsKFNJR1BJUEUsIFNJR19JR04pOwotCXBxc2ln bmFsKFNJR1VTUjEsIHByb2NzaWduYWxfc2lndXNyMV9oYW5kbGVyKTsKLQlwcXNpZ25hbChT SUdVU1IyLCBTdGFydHVwUHJvY1RyaWdnZXJIYW5kbGVyKTsKIAogCS8qCiAJICogUmVnaXN0 ZXIgdGltZW91dHMgbmVlZGVkIGZvciBzdGFuZGJ5IG1vZGUKQEAgLTI0Miw2ICsyMDgsMTMg QEAgU3RhcnR1cFByb2Nlc3NNYWluKGNvbnN0IHZvaWQgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90 IHN0YXJ0dXBfZGF0YV9sZW4pCiAJUmVnaXN0ZXJUaW1lb3V0KFNUQU5EQllfVElNRU9VVCwg U3RhbmRieVRpbWVvdXRIYW5kbGVyKTsKIAlSZWdpc3RlclRpbWVvdXQoU1RBTkRCWV9MT0NL X1RJTUVPVVQsIFN0YW5kYnlMb2NrVGltZW91dEhhbmRsZXIpOwogCisJLyogT25seSBzZXQg dXAgYSBzdWJzZXQgb2YgdGhlIHN0YW5kYXJkIGludGVycnVwdCBoYW5kbGVycyAqLworCVNl dFN0YW5kYXJkSW50ZXJydXB0SGFuZGxlcnMoKTsKKwlTZXRJbnRlcnJ1cHRIYW5kbGVyKElO VEVSUlVQVF9URVJNSU5BVEUsIFByb2Nlc3NTdGFydHVwUHJvY1Rlcm1pbmF0ZUludGVycnVw dCk7CisJRW5hYmxlSW50ZXJydXB0KElOVEVSUlVQVF9URVJNSU5BVEUpOworCVNldEludGVy cnVwdEhhbmRsZXIoSU5URVJSVVBUX0NPTkZJR19SRUxPQUQsIFByb2Nlc3NTdGFydHVwUHJv Y0NvbmZpZ1JlbG9hZEludGVycnVwdCk7CisJRW5hYmxlSW50ZXJydXB0KElOVEVSUlVQVF9D T05GSUdfUkVMT0FEKTsKKwogCS8qCiAJICogVW5ibG9jayBzaWduYWxzICh0aGV5IHdlcmUg YmxvY2tlZCB3aGVuIHRoZSBwb3N0bWFzdGVyIGZvcmtlZCB1cykKIAkgKi8KQEAgLTI2OSw3 ICsyNDIsNyBAQCBQcmVSZXN0b3JlQ29tbWFuZCh2b2lkKQogCSAqIHNodXRkb3duIHJlcXVl c3QgcmVjZWl2ZWQganVzdCBiZWZvcmUgdGhpcy4KIAkgKi8KIAlpbl9yZXN0b3JlX2NvbW1h bmQgPSB0cnVlOwotCWlmIChzaHV0ZG93bl9yZXF1ZXN0ZWQpCisJaWYgKEludGVycnVwdFBl bmRpbmcoSU5URVJSVVBUX1RFUk1JTkFURSkpCiAJCXByb2NfZXhpdCgxKTsKIH0KIApAQCAt Mjc5LDE4ICsyNTIsNiBAQCBQb3N0UmVzdG9yZUNvbW1hbmQodm9pZCkKIAlpbl9yZXN0b3Jl X2NvbW1hbmQgPSBmYWxzZTsKIH0KIAotYm9vbAotSXNQcm9tb3RlU2lnbmFsZWQodm9pZCkK LXsKLQlyZXR1cm4gcHJvbW90ZV9zaWduYWxlZDsKLX0KLQotdm9pZAotUmVzZXRQcm9tb3Rl U2lnbmFsZWQodm9pZCkKLXsKLQlwcm9tb3RlX3NpZ25hbGVkID0gZmFsc2U7Ci19Ci0KIC8q CiAgKiBTZXQgYSBmbGFnIGluZGljYXRpbmcgdGhhdCBpdCdzIHRpbWUgdG8gbG9nIGEgcHJv Z3Jlc3MgcmVwb3J0LgogICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVy L3N5c2xvZ2dlci5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9zeXNsb2dnZXIuYwppbmRl eCA5MjkzODQ5ZDc3Mi4uOWVjY2I4YTg2N2EgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bv c3RtYXN0ZXIvc3lzbG9nZ2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9zeXNs b2dnZXIuYwpAQCAtMzIsNiArMzIsOCBAQAogI2luY2x1ZGUgPHN5cy90aW1lLmg+CiAKICNp bmNsdWRlICJjb21tb24vZmlsZV9wZXJtLmgiCisjaW5jbHVkZSAiaXBjL2ludGVycnVwdC5o IgorI2luY2x1ZGUgImlwYy9zaWduYWxfaGFuZGxlcnMuaCIKICNpbmNsdWRlICJsaWIvc3Ry aW5naW5mby5oIgogI2luY2x1ZGUgImxpYnBxL3Bxc2lnbmFsLmgiCiAjaW5jbHVkZSAibWlz Y2FkbWluLmgiCkBAIC0zOSwxMyArNDEsMTEgQEAKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNp bmNsdWRlICJwZ3RpbWUuaCIKICNpbmNsdWRlICJwb3J0L3BnX2JpdHV0aWxzLmgiCi0jaW5j bHVkZSAicG9zdG1hc3Rlci9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL3Bv c3RtYXN0ZXIuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL3N5c2xvZ2dlci5oIgogI2luY2x1 ZGUgInN0b3JhZ2UvZHNtLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9mZC5oIgogI2luY2x1ZGUg InN0b3JhZ2UvaXBjLmgiCi0jaW5jbHVkZSAic3RvcmFnZS9sYXRjaC5oIgogI2luY2x1ZGUg InN0b3JhZ2UvcGdfc2htZW0uaCIKICNpbmNsdWRlICJ0Y29wL3Rjb3Bwcm90LmgiCiAjaW5j bHVkZSAidXRpbHMvZ3VjLmgiCkBAIC0yNzMsMTYgKzI3MywxNCBAQCBTeXNMb2dnZXJNYWlu KGNvbnN0IHZvaWQgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pCiAJ ICogdXBzdHJlYW0gcHJvY2Vzc2VzIGFyZSBnb25lLCB0byBlbnN1cmUgd2UgZG9uJ3QgbWlz cyBhbnkgZHlpbmcgZ2FzcHMgb2YKIAkgKiBicm9rZW4gYmFja2VuZHMuLi4KIAkgKi8KLQot CXBxc2lnbmFsKFNJR0hVUCwgU2lnbmFsSGFuZGxlckZvckNvbmZpZ1JlbG9hZCk7IC8qIHNl dCBmbGFnIHRvIHJlYWQgY29uZmlnCi0JCQkJCQkJCQkJCQkJICogZmlsZSAqLwogCXBxc2ln bmFsKFNJR0lOVCwgU0lHX0lHTik7CiAJcHFzaWduYWwoU0lHVEVSTSwgU0lHX0lHTik7CiAJ cHFzaWduYWwoU0lHUVVJVCwgU0lHX0lHTik7Ci0JcHFzaWduYWwoU0lHQUxSTSwgU0lHX0lH Tik7Ci0JcHFzaWduYWwoU0lHUElQRSwgU0lHX0lHTik7CisKIAlwcXNpZ25hbChTSUdVU1Ix LCBzaWdVc3IxSGFuZGxlcik7CS8qIHJlcXVlc3QgbG9nIHJvdGF0aW9uICovCi0JcHFzaWdu YWwoU0lHVVNSMiwgU0lHX0lHTik7CisKKwlTZXRTdGFuZGFyZEludGVycnVwdEhhbmRsZXJz KCk7CisJRGlzYWJsZUludGVycnVwdChJTlRFUlJVUFRfVEVSTUlOQVRFKTsKIAogCXNpZ3By b2NtYXNrKFNJR19TRVRNQVNLLCAmVW5CbG9ja1NpZywgTlVMTCk7CiAKQEAgLTMyMyw3ICsz MjEsNyBAQCBTeXNMb2dnZXJNYWluKGNvbnN0IHZvaWQgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90 IHN0YXJ0dXBfZGF0YV9sZW4pCiAJd2hlcmVUb1NlbmRPdXRwdXQgPSBEZXN0Tm9uZTsKIAog CS8qCi0JICogU2V0IHVwIGEgcmV1c2FibGUgV2FpdEV2ZW50U2V0IG9iamVjdCB3ZSdsbCB1 c2UgdG8gd2FpdCBmb3Igb3VyIGxhdGNoLAorCSAqIFNldCB1cCBhIHJldXNhYmxlIFdhaXRF dmVudFNldCBvYmplY3Qgd2UnbGwgdXNlIHRvIHdhaXQgZm9yIGludGVycnVwdHMsCiAJICog YW5kIChleGNlcHQgb24gV2luZG93cykgb3VyIHNvY2tldC4KIAkgKgogCSAqIFVubGlrZSBh bGwgb3RoZXIgcG9zdG1hc3RlciBjaGlsZCBwcm9jZXNzZXMsIHdlJ2xsIGlnbm9yZSBwb3N0 bWFzdGVyCkBAIC0zMzMsOSArMzMxLDEyIEBAIFN5c0xvZ2dlck1haW4oY29uc3Qgdm9pZCAq c3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbikKIAkgKiAoaW5jbHVkaW5n IHRoZSBwb3N0bWFzdGVyKS4KIAkgKi8KIAl3ZXMgPSBDcmVhdGVXYWl0RXZlbnRTZXQoTlVM TCwgMik7Ci0JQWRkV2FpdEV2ZW50VG9TZXQod2VzLCBXTF9MQVRDSF9TRVQsIFBHSU5WQUxJ RF9TT0NLRVQsIE15TGF0Y2gsIE5VTEwpOworCUFkZFdhaXRFdmVudFRvU2V0KHdlcywgV0xf SU5URVJSVVBULCBQR0lOVkFMSURfU09DS0VULAorCQkJCQkgIElOVEVSUlVQVF9DT05GSUdf UkVMT0FEIHwKKwkJCQkJICBJTlRFUlJVUFRfV0FJVF9XQUtFVVAsCS8qIGZvciBsb2cgcm90 YXRpb24gKi8KKwkJCQkJICBOVUxMKTsKICNpZm5kZWYgV0lOMzIKLQlBZGRXYWl0RXZlbnRU b1NldCh3ZXMsIFdMX1NPQ0tFVF9SRUFEQUJMRSwgc3lzbG9nUGlwZVswXSwgTlVMTCwgTlVM TCk7CisJQWRkV2FpdEV2ZW50VG9TZXQod2VzLCBXTF9TT0NLRVRfUkVBREFCTEUsIHN5c2xv Z1BpcGVbMF0sIDAsIE5VTEwpOwogI2VuZGlmCiAKIAkvKiBtYWluIHdvcmtlciBsb29wICov CkBAIC0zNTEsMTQgKzM1MiwxMyBAQCBTeXNMb2dnZXJNYWluKGNvbnN0IHZvaWQgKnN0YXJ0 dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pCiAjZW5kaWYKIAogCQkvKiBDbGVh ciBhbnkgYWxyZWFkeS1wZW5kaW5nIHdha2V1cHMgKi8KLQkJUmVzZXRMYXRjaChNeUxhdGNo KTsKKwkJQ2xlYXJJbnRlcnJ1cHQoSU5URVJSVVBUX1dBSVRfV0FLRVVQKTsKIAogCQkvKgog CQkgKiBQcm9jZXNzIGFueSByZXF1ZXN0cyBvciBzaWduYWxzIHJlY2VpdmVkIHJlY2VudGx5 LgogCQkgKi8KLQkJaWYgKENvbmZpZ1JlbG9hZFBlbmRpbmcpCisJCWlmIChDb25zdW1lSW50 ZXJydXB0KElOVEVSUlVQVF9DT05GSUdfUkVMT0FEKSkKIAkJewotCQkJQ29uZmlnUmVsb2Fk UGVuZGluZyA9IGZhbHNlOwogCQkJUHJvY2Vzc0NvbmZpZ0ZpbGUoUEdDX1NJR0hVUCk7CiAK IAkJCS8qCkBAIC0xMTgzLDcgKzExODMsNyBAQCBwaXBlVGhyZWFkKHZvaWQgKmFyZykKIAkJ CQkgZnRlbGxvKGNzdmxvZ0ZpbGUpID49IExvZ19Sb3RhdGlvblNpemUgKiAocGdvZmZfdCkg MTAyNCkgfHwKIAkJCQkoanNvbmxvZ0ZpbGUgIT0gTlVMTCAmJgogCQkJCSBmdGVsbG8oanNv bmxvZ0ZpbGUpID49IExvZ19Sb3RhdGlvblNpemUgKiAocGdvZmZfdCkgMTAyNCkpCi0JCQkJ U2V0TGF0Y2goTXlMYXRjaCk7CisJCQkJUmFpc2VJbnRlcnJ1cHQoSU5URVJSVVBUX1dBSVRf V0FLRVVQKTsKIAkJfQogCQlMZWF2ZUNyaXRpY2FsU2VjdGlvbigmc3lzbG9nZ2VyU2VjdGlv bik7CiAJfQpAQCAtMTE5NCw4ICsxMTk0LDggQEAgcGlwZVRocmVhZCh2b2lkICphcmcpCiAJ LyogaWYgdGhlcmUncyBhbnkgZGF0YSBsZWZ0IHRoZW4gZm9yY2UgaXQgb3V0IG5vdyAqLwog CWZsdXNoX3BpcGVfaW5wdXQobG9nYnVmZmVyLCAmYnl0ZXNfaW5fbG9nYnVmZmVyKTsKIAot CS8qIHNldCB0aGUgbGF0Y2ggdG8gd2FrZW4gdGhlIG1haW4gdGhyZWFkLCB3aGljaCB3aWxs IHF1aXQgKi8KLQlTZXRMYXRjaChNeUxhdGNoKTsKKwkvKiByYWlzZSB0aGUgaW50ZXJydXB0 IHRvIHdha2VuIHRoZSBtYWluIHRocmVhZCwgd2hpY2ggd2lsbCBxdWl0ICovCisJUmFpc2VJ bnRlcnJ1cHQoSU5URVJSVVBUX1dBSVRfV0FLRVVQKTsKIAogCUxlYXZlQ3JpdGljYWxTZWN0 aW9uKCZzeXNsb2dnZXJTZWN0aW9uKTsKIAlfZW5kdGhyZWFkKCk7CkBAIC0xNTg2LDkgKzE1 ODYsMTAgQEAgUmVtb3ZlTG9ncm90YXRlU2lnbmFsRmlsZXModm9pZCkKIH0KIAogLyogU0lH VVNSMTogc2V0IGZsYWcgdG8gcm90YXRlIGxvZ2ZpbGUgKi8KKy8qICBUT0RPOiBVc2UgYW4g aW50ZXJydXB0IGZsYWcgZm9yIHRoaXMgKi8KIHN0YXRpYyB2b2lkCiBzaWdVc3IxSGFuZGxl cihTSUdOQUxfQVJHUykKIHsKIAlyb3RhdGlvbl9yZXF1ZXN0ZWQgPSB0cnVlOwotCVNldExh dGNoKE15TGF0Y2gpOworCVJhaXNlSW50ZXJydXB0KElOVEVSUlVQVF9XQUlUX1dBS0VVUCk7 CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dhbHN1bW1hcml6ZXIu YyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvd2Fsc3VtbWFyaXplci5jCmluZGV4IDFlN2E5 OGIwMmMzLi4zMTdlMWZjYWY5MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rl ci93YWxzdW1tYXJpemVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci93YWxzdW1t YXJpemVyLmMKQEAgLTMxLDE3ICszMSwxNyBAQAogI2luY2x1ZGUgImNhdGFsb2cvc3RvcmFn ZV94bG9nLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvZGJjb21tYW5kc194bG9nLmgiCiAjaW5j bHVkZSAiY29tbW9uL2Jsa3JlZnRhYmxlLmgiCisjaW5jbHVkZSAiaXBjL2ludGVycnVwdC5o IgorI2luY2x1ZGUgImlwYy9zaWduYWxfaGFuZGxlcnMuaCIKICNpbmNsdWRlICJsaWJwcS9w cXNpZ25hbC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5o IgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvYXV4cHJvY2Vzcy5oIgotI2luY2x1ZGUgInBvc3Rt YXN0ZXIvaW50ZXJydXB0LmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci93YWxzdW1tYXJpemVy LmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vd2FscmVjZWl2ZXIuaCIKICNpbmNsdWRlICJz dG9yYWdlL2Fpb19zdWJzeXMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2ZkLmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9pcGMuaCIKLSNpbmNsdWRlICJzdG9yYWdlL2xhdGNoLmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9sd2xvY2suaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKICNpbmNs dWRlICJzdG9yYWdlL3Byb2NzaWduYWwuaCIKQEAgLTE0Niw3ICsxNDYsNyBAQCBpbnQJCQl3 YWxfc3VtbWFyeV9rZWVwX3RpbWUgPSAxMCAqIEhPVVJTX1BFUl9EQVkgKiBNSU5TX1BFUl9I T1VSOwogCiBzdGF0aWMgdm9pZCBXYWxTdW1tYXJpemVyU2h1dGRvd24oaW50IGNvZGUsIERh dHVtIGFyZyk7CiBzdGF0aWMgWExvZ1JlY1B0ciBHZXRMYXRlc3RMU04oVGltZUxpbmVJRCAq dGxpKTsKLXN0YXRpYyB2b2lkIFByb2Nlc3NXYWxTdW1tYXJpemVySW50ZXJydXB0cyh2b2lk KTsKK3N0YXRpYyB2b2lkIFByb2Nlc3NXYWxTdW1tYXJpemVyQ29uZmlnUmVsb2FkSW50ZXJy dXB0KHZvaWQpOwogc3RhdGljIFhMb2dSZWNQdHIgU3VtbWFyaXplV0FMKFRpbWVMaW5lSUQg dGxpLCBYTG9nUmVjUHRyIHN0YXJ0X2xzbiwKIAkJCQkJCQkgICBib29sIGV4YWN0LCBYTG9n UmVjUHRyIHN3aXRjaF9sc24sCiAJCQkJCQkJICAgWExvZ1JlY1B0ciBtYXhpbXVtX2xzbik7 CkBAIC0yNDQsMTYgKzI0NCwxOCBAQCBXYWxTdW1tYXJpemVyTWFpbihjb25zdCB2b2lkICpz dGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKQogCSAqIFByb3Blcmx5IGFj Y2VwdCBvciBpZ25vcmUgc2lnbmFscyB0aGUgcG9zdG1hc3RlciBtaWdodCBzZW5kIHVzCiAJ ICoKIAkgKiBXZSBoYXZlIG5vIHBhcnRpY3VsYXIgdXNlIGZvciBTSUdJTlQgYXQgdGhlIG1v bWVudCwgYnV0IHNlZW1zCi0JICogcmVhc29uYWJsZSB0byB0cmVhdCBsaWtlIFNJR1RFUk0u CisJICogcmVhc29uYWJsZSB0byB0cmVhdCBsaWtlIFNJR1RFUk0uIEZJWE1FOiBXaHkgaXMg dGhhdCByZWFzb25hYmxlPwogCSAqLwotCXBxc2lnbmFsKFNJR0hVUCwgU2lnbmFsSGFuZGxl ckZvckNvbmZpZ1JlbG9hZCk7CiAJcHFzaWduYWwoU0lHSU5ULCBTaWduYWxIYW5kbGVyRm9y U2h1dGRvd25SZXF1ZXN0KTsKLQlwcXNpZ25hbChTSUdURVJNLCBTaWduYWxIYW5kbGVyRm9y U2h1dGRvd25SZXF1ZXN0KTsKLQkvKiBTSUdRVUlUIGhhbmRsZXIgd2FzIGFscmVhZHkgc2V0 IHVwIGJ5IEluaXRQb3N0bWFzdGVyQ2hpbGQgKi8KLQlwcXNpZ25hbChTSUdBTFJNLCBTSUdf SUdOKTsKLQlwcXNpZ25hbChTSUdQSVBFLCBTSUdfSUdOKTsKLQlwcXNpZ25hbChTSUdVU1Ix LCBwcm9jc2lnbmFsX3NpZ3VzcjFfaGFuZGxlcik7Ci0JcHFzaWduYWwoU0lHVVNSMiwgU0lH X0lHTik7IC8qIG5vdCB1c2VkICovCisKKwkvKiBTZXQgdXAgaW50ZXJydXB0IGhhbmRsaW5n ICovCisJU2V0U3RhbmRhcmRJbnRlcnJ1cHRIYW5kbGVycygpOworCisJLyogd2UgY2FuIGp1 c3QgcHJvY19leGl0IGF0IGFueSBwb2ludCBpZiByZXF1ZXN0ZWQgKi8KKwlTZXRJbnRlcnJ1 cHRIYW5kbGVyKElOVEVSUlVQVF9URVJNSU5BVEUsIFByb2Nlc3NBdXhQcm9jZXNzU2h1dGRv d25JbnRlcnJ1cHQpOworCUVuYWJsZUludGVycnVwdChJTlRFUlJVUFRfVEVSTUlOQVRFKTsK KwlTZXRJbnRlcnJ1cHRIYW5kbGVyKElOVEVSUlVQVF9DT05GSUdfUkVMT0FELCBQcm9jZXNz V2FsU3VtbWFyaXplckNvbmZpZ1JlbG9hZEludGVycnVwdCk7CisJRW5hYmxlSW50ZXJydXB0 KElOVEVSUlVQVF9DT05GSUdfUkVMT0FEKTsKIAogCS8qIEFkdmVydGlzZSBvdXJzZWx2ZXMu ICovCiAJb25fc2htZW1fZXhpdChXYWxTdW1tYXJpemVyU2h1dGRvd24sIChEYXR1bSkgMCk7 CkBAIC0zMTMsMTAgKzMxNSw4IEBAIFdhbFN1bW1hcml6ZXJNYWluKGNvbnN0IHZvaWQgKnN0 YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pCiAJCSAqIFNvIGEgcmVhbGx5 IGZhc3QgcmV0cnkgdGltZSBkb2Vzbid0IHNlZW0gdG8gYmUgZXNwZWNpYWxseQogCQkgKiBi ZW5lZmljaWFsLCBhbmQgaXQgd2lsbCBjbHV0dGVyIHRoZSBsb2dzLgogCQkgKi8KLQkJKHZv aWQpIFdhaXRMYXRjaChOVUxMLAotCQkJCQkJIFdMX1RJTUVPVVQgfCBXTF9FWElUX09OX1BN X0RFQVRILAotCQkJCQkJIDEwMDAwLAotCQkJCQkJIFdBSVRfRVZFTlRfV0FMX1NVTU1BUkla RVJfRVJST1IpOworCQkodm9pZCkgV2FpdEludGVycnVwdCgwLCBXTF9USU1FT1VUIHwgV0xf RVhJVF9PTl9QTV9ERUFUSCwgMTAwMDAsCisJCQkJCQkJIFdBSVRfRVZFTlRfV0FMX1NVTU1B UklaRVJfRVJST1IpOwogCX0KIAogCS8qIFdlIGNhbiBub3cgaGFuZGxlIGVyZXBvcnQoRVJS T1IpICovCkBAIC0zNTMsNyArMzUzLDcgQEAgV2FsU3VtbWFyaXplck1haW4oY29uc3Qgdm9p ZCAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbikKIAkJTWVtb3J5Q29u dGV4dFJlc2V0KGNvbnRleHQpOwogCiAJCS8qIFByb2Nlc3MgYW55IHNpZ25hbHMgcmVjZWl2 ZWQgcmVjZW50bHkuICovCi0JCVByb2Nlc3NXYWxTdW1tYXJpemVySW50ZXJydXB0cygpOwor CQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwogCiAJCS8qIElmIGl0J3MgdGltZSB0byByZW1v dmUgYW55IG9sZCBXQUwgc3VtbWFyaWVzLCBkbyB0aGF0IG5vdy4gKi8KIAkJTWF5YmVSZW1v dmVPbGRXYWxTdW1tYXJpZXMoKTsKQEAgLTYyOCw4ICs2MjgsOCBAQCBHZXRPbGRlc3RVbnN1 bW1hcml6ZWRMU04oVGltZUxpbmVJRCAqdGxpLCBib29sICpsc25faXNfZXhhY3QpCiAgKgog ICogVGhpcyBtaWdodCBub3Qgd29yaywgYmVjYXVzZSB0aGVyZSdzIG5vIGd1YXJhbnRlZSB0 aGF0IHRoZSBXQUwgc3VtbWFyaXplcgogICogcHJvY2VzcyB3YXMgc3VjY2Vzc2Z1bGx5IHN0 YXJ0ZWQsIGFuZCBpdCBhbHNvIG1pZ2h0IGhhdmUgc3RhcnRlZCBidXQKLSAqIHN1YnNlcXVl bnRseSB0ZXJtaW5hdGVkLiBTbywgdW5kZXIgbm9ybWFsIGNpcmN1bXN0YW5jZXMsIHRoaXMg d2lsbCBnZXQgdGhlCi0gKiBsYXRjaCBzZXQsIGJ1dCB0aGVyZSdzIG5vIGd1YXJhbnRlZS4K KyAqIHN1YnNlcXVlbnRseSB0ZXJtaW5hdGVkLiBTbywgdW5kZXIgbm9ybWFsIGNpcmN1bXN0 YW5jZXMsIHRoaXMgd2lsbCBzZW5kCisgKiB0aGUgaW50ZXJydXB0LCBidXQgdGhlcmUncyBu byBndWFyYW50ZWUuCiAgKi8KIHZvaWQKIFdha2V1cFdhbFN1bW1hcml6ZXIodm9pZCkKQEAg LTY0NCw3ICs2NDQsNyBAQCBXYWtldXBXYWxTdW1tYXJpemVyKHZvaWQpCiAJTFdMb2NrUmVs ZWFzZShXQUxTdW1tYXJpemVyTG9jayk7CiAKIAlpZiAocGdwcm9jbm8gIT0gSU5WQUxJRF9Q Uk9DX05VTUJFUikKLQkJU2V0TGF0Y2goJkdldFBHUHJvY0J5TnVtYmVyKHBncHJvY25vKS0+ cHJvY0xhdGNoKTsKKwkJU2VuZEludGVycnVwdChJTlRFUlJVUFRfV0FJVF9XQUtFVVAsIHBn cHJvY25vKTsKIH0KIAogLyoKQEAgLTg1MywyNyArODUzLDE3IEBAIEdldExhdGVzdExTTihU aW1lTGluZUlEICp0bGkpCiAgKiBJbnRlcnJ1cHQgaGFuZGxlciBmb3IgbWFpbiBsb29wIG9m IFdBTCBzdW1tYXJpemVyIHByb2Nlc3MuCiAgKi8KIHN0YXRpYyB2b2lkCi1Qcm9jZXNzV2Fs U3VtbWFyaXplckludGVycnVwdHModm9pZCkKK1Byb2Nlc3NXYWxTdW1tYXJpemVyQ29uZmln UmVsb2FkSW50ZXJydXB0KHZvaWQpCiB7Ci0JaWYgKFByb2NTaWduYWxCYXJyaWVyUGVuZGlu ZykKLQkJUHJvY2Vzc1Byb2NTaWduYWxCYXJyaWVyKCk7Ci0KLQlpZiAoQ29uZmlnUmVsb2Fk UGVuZGluZykKLQl7Ci0JCUNvbmZpZ1JlbG9hZFBlbmRpbmcgPSBmYWxzZTsKLQkJUHJvY2Vz c0NvbmZpZ0ZpbGUoUEdDX1NJR0hVUCk7Ci0JfQorCVByb2Nlc3NDb25maWdGaWxlKFBHQ19T SUdIVVApOwogCi0JaWYgKFNodXRkb3duUmVxdWVzdFBlbmRpbmcgfHwgIXN1bW1hcml6ZV93 YWwpCisJLyogSWYgJ3N1bW1hcml6ZV93YWwnIHdhcyB0dXJuZWQgb2ZmLCBleGl0ICovCisJ aWYgKCFzdW1tYXJpemVfd2FsICYmICFJbnRlcnJ1cHRQZW5kaW5nKElOVEVSUlVQVF9URVJN SU5BVEUpKQogCXsKIAkJZXJlcG9ydChERUJVRzEsCi0JCQkJZXJybXNnX2ludGVybmFsKCJX QUwgc3VtbWFyaXplciBzaHV0dGluZyBkb3duIikpOwotCQlwcm9jX2V4aXQoMCk7CisJCQkJ ZXJybXNnX2ludGVybmFsKCJXQUwgc3VtbWFyaXplciBzaHV0dGluZyBkb3duIGJlY2F1c2Ug c3VtbWFyaXplX3dhbCB3YXMgZGlzYWJsZWQiKSk7CisJCVJhaXNlSW50ZXJydXB0KElOVEVS UlVQVF9URVJNSU5BVEUpOwogCX0KLQotCS8qIFBlcmZvcm0gbG9nZ2luZyBvZiBtZW1vcnkg Y29udGV4dHMgb2YgdGhpcyBwcm9jZXNzICovCi0JaWYgKExvZ01lbW9yeUNvbnRleHRQZW5k aW5nKQotCQlQcm9jZXNzTG9nTWVtb3J5Q29udGV4dEludGVycnVwdCgpOwogfQogCiAvKgpA QCAtMTAxMiw3ICsxMDAyLDcgQEAgU3VtbWFyaXplV0FMKFRpbWVMaW5lSUQgdGxpLCBYTG9n UmVjUHRyIHN0YXJ0X2xzbiwgYm9vbCBleGFjdCwKIAkJWExvZ1JlY29yZCAqcmVjb3JkOwog CQl1aW50OAkJcm1pZDsKIAotCQlQcm9jZXNzV2FsU3VtbWFyaXplckludGVycnVwdHMoKTsK KwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIAogCQkvKiBXZSBzaG91bGRuJ3QgZ28gYmFj a3dhcmQuICovCiAJCUFzc2VydChzdW1tYXJ5X3N0YXJ0X2xzbiA8PSB4bG9ncmVhZGVyLT5F bmRSZWNQdHIpOwpAQCAtMTQ5OSw3ICsxNDg5LDcgQEAgc3VtbWFyaXplcl9yZWFkX2xvY2Fs X3hsb2dfcGFnZShYTG9nUmVhZGVyU3RhdGUgKnN0YXRlLAogCVdBTFJlYWRFcnJvciBlcnJp bmZvOwogCVN1bW1hcml6ZXJSZWFkTG9jYWxYTG9nUHJpdmF0ZSAqcHJpdmF0ZV9kYXRhOwog Ci0JUHJvY2Vzc1dhbFN1bW1hcml6ZXJJbnRlcnJ1cHRzKCk7CisJQ0hFQ0tfRk9SX0lOVEVS UlVQVFMoKTsKIAogCXByaXZhdGVfZGF0YSA9IChTdW1tYXJpemVyUmVhZExvY2FsWExvZ1By aXZhdGUgKikKIAkJc3RhdGUtPnByaXZhdGVfZGF0YTsKQEAgLTE1MzcsNyArMTUyNyw3IEBA IHN1bW1hcml6ZXJfcmVhZF9sb2NhbF94bG9nX3BhZ2UoWExvZ1JlYWRlclN0YXRlICpzdGF0 ZSwKIAkJCQkgKiBjdXJyZW50IHRpbWVsaW5lLCBzbyBtb3JlIGRhdGEgbWlnaHQgc2hvdyB1 cC4gIERlbGF5IGhlcmUKIAkJCQkgKiBzbyB3ZSBkb24ndCB0aWdodC1sb29wLgogCQkJCSAq LwotCQkJCVByb2Nlc3NXYWxTdW1tYXJpemVySW50ZXJydXB0cygpOworCQkJCUNIRUNLX0ZP Ul9JTlRFUlJVUFRTKCk7CiAJCQkJc3VtbWFyaXplcl93YWl0X2Zvcl93YWwoKTsKIAogCQkJ CS8qIFJlY2hlY2sgZW5kLW9mLVdBTC4gKi8KQEAgLTE2MzcsMTEgKzE2MjcsMTUgQEAgc3Vt bWFyaXplcl93YWl0X2Zvcl93YWwodm9pZCkKIAlwZ3N0YXRfcmVwb3J0X3dhbChmYWxzZSk7 CiAKIAkvKiBPSywgbm93IHNsZWVwLiAqLwotCSh2b2lkKSBXYWl0TGF0Y2goTXlMYXRjaCwK LQkJCQkJIFdMX0xBVENIX1NFVCB8IFdMX1RJTUVPVVQgfCBXTF9FWElUX09OX1BNX0RFQVRI LAotCQkJCQkgc2xlZXBfcXVhbnRhICogTVNfUEVSX1NMRUVQX1FVQU5UVU0sCi0JCQkJCSBX QUlUX0VWRU5UX1dBTF9TVU1NQVJJWkVSX1dBTCk7Ci0JUmVzZXRMYXRjaChNeUxhdGNoKTsK Kwkodm9pZCkgV2FpdEludGVycnVwdChJTlRFUlJVUFRfV0FJVF9XQUtFVVAgfAorCQkJCQkJ IElOVEVSUlVQVF9URVJNSU5BVEUgfAorCQkJCQkJIElOVEVSUlVQVF9DT05GSUdfUkVMT0FE IHwKKwkJCQkJCSBJTlRFUlJVUFRfQkFSUklFUiB8CisJCQkJCQkgSU5URVJSVVBUX0xPR19N RU1PUllfQ09OVEVYVCwKKwkJCQkJCSBXTF9JTlRFUlJVUFQgfCBXTF9USU1FT1VUIHwgV0xf RVhJVF9PTl9QTV9ERUFUSCwKKwkJCQkJCSBzbGVlcF9xdWFudGEgKiBNU19QRVJfU0xFRVBf UVVBTlRVTSwKKwkJCQkJCSBXQUlUX0VWRU5UX1dBTF9TVU1NQVJJWkVSX1dBTCk7CisJQ2xl YXJJbnRlcnJ1cHQoSU5URVJSVVBUX1dBSVRfV0FLRVVQKTsKIAogCS8qIFJlc2V0IGNvdW50 IG9mIHBhZ2VzIHJlYWQuICovCiAJcGFnZXNfcmVhZF9zaW5jZV9sYXN0X3NsZWVwID0gMDsK QEAgLTE2ODgsNyArMTY4Miw3IEBAIE1heWJlUmVtb3ZlT2xkV2FsU3VtbWFyaWVzKHZvaWQp CiAJCVhMb2dSZWNQdHIJb2xkZXN0X2xzbiA9IEludmFsaWRYTG9nUmVjUHRyOwogCQlUaW1l TGluZUlECXNlbGVjdGVkX3RsaTsKIAotCQlQcm9jZXNzV2FsU3VtbWFyaXplckludGVycnVw dHMoKTsKKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIAogCQkvKgogCQkgKiBQaWNrIGEg dGltZWxpbmUgZm9yIHdoaWNoIHNvbWUgc3VtbWFyeSBmaWxlcyBzdGlsbCBleGlzdCBvbiBk aXNrLApAQCAtMTcwNyw3ICsxNzAxLDcgQEAgTWF5YmVSZW1vdmVPbGRXYWxTdW1tYXJpZXMo dm9pZCkKIAkJewogCQkJV2FsU3VtbWFyeUZpbGUgKndzID0gbGZpcnN0KGxjKTsKIAotCQkJ UHJvY2Vzc1dhbFN1bW1hcml6ZXJJbnRlcnJ1cHRzKCk7CisJCQlDSEVDS19GT1JfSU5URVJS VVBUUygpOwogCiAJCQkvKiBJZiBpdCdzIG5vdCBvbiB0aGlzIHRpbWVsaW5lLCBpdCdzIG5v dCB0aW1lIHRvIGNvbnNpZGVyIGl0LiAqLwogCQkJaWYgKHNlbGVjdGVkX3RsaSAhPSB3cy0+ dGxpKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci93YWx3cml0ZXIuYyBi L3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvd2Fsd3JpdGVyLmMKaW5kZXggYWFlNWQzYzg2MWMu LmY5ZmMzYzFiMTk0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dhbHdy aXRlci5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvd2Fsd3JpdGVyLmMKQEAgLTQ1 LDExICs0NSwxMiBAQAogI2luY2x1ZGUgPHVuaXN0ZC5oPgogCiAjaW5jbHVkZSAiYWNjZXNz L3hsb2cuaCIKKyNpbmNsdWRlICJpcGMvaW50ZXJydXB0LmgiCisjaW5jbHVkZSAiaXBjL3Np Z25hbF9oYW5kbGVycy5oIgogI2luY2x1ZGUgImxpYnBxL3Bxc2lnbmFsLmgiCiAjaW5jbHVk ZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAicG9zdG1h c3Rlci9hdXhwcm9jZXNzLmgiCi0jaW5jbHVkZSAicG9zdG1hc3Rlci9pbnRlcnJ1cHQuaCIK ICNpbmNsdWRlICJwb3N0bWFzdGVyL3dhbHdyaXRlci5oIgogI2luY2x1ZGUgInN0b3JhZ2Uv YWlvX3N1YnN5cy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCkBAIC0xMDEsMTYg KzEwMiwxNiBAQCBXYWxXcml0ZXJNYWluKGNvbnN0IHZvaWQgKnN0YXJ0dXBfZGF0YSwgc2l6 ZV90IHN0YXJ0dXBfZGF0YV9sZW4pCiAJICogUHJvcGVybHkgYWNjZXB0IG9yIGlnbm9yZSBz aWduYWxzIHRoZSBwb3N0bWFzdGVyIG1pZ2h0IHNlbmQgdXMKIAkgKgogCSAqIFdlIGhhdmUg bm8gcGFydGljdWxhciB1c2UgZm9yIFNJR0lOVCBhdCB0aGUgbW9tZW50LCBidXQgc2VlbXMK LQkgKiByZWFzb25hYmxlIHRvIHRyZWF0IGxpa2UgU0lHVEVSTS4KKwkgKiByZWFzb25hYmxl IHRvIHRyZWF0IGxpa2UgU0lHVEVSTS4gWFhYOiBpcyBpdCByZWFsbHkKKwkgKiByZWFzb25h YmxlL25lY2Vzc2FyeT8KIAkgKi8KLQlwcXNpZ25hbChTSUdIVVAsIFNpZ25hbEhhbmRsZXJG b3JDb25maWdSZWxvYWQpOwogCXBxc2lnbmFsKFNJR0lOVCwgU2lnbmFsSGFuZGxlckZvclNo dXRkb3duUmVxdWVzdCk7Ci0JcHFzaWduYWwoU0lHVEVSTSwgU2lnbmFsSGFuZGxlckZvclNo dXRkb3duUmVxdWVzdCk7Ci0JLyogU0lHUVVJVCBoYW5kbGVyIHdhcyBhbHJlYWR5IHNldCB1 cCBieSBJbml0UG9zdG1hc3RlckNoaWxkICovCi0JcHFzaWduYWwoU0lHQUxSTSwgU0lHX0lH Tik7Ci0JcHFzaWduYWwoU0lHUElQRSwgU0lHX0lHTik7Ci0JcHFzaWduYWwoU0lHVVNSMSwg cHJvY3NpZ25hbF9zaWd1c3IxX2hhbmRsZXIpOwotCXBxc2lnbmFsKFNJR1VTUjIsIFNJR19J R04pOyAvKiBub3QgdXNlZCAqLworCisJU2V0U3RhbmRhcmRJbnRlcnJ1cHRIYW5kbGVycygp OworCisJRW5hYmxlSW50ZXJydXB0KElOVEVSUlVQVF9DT05GSUdfUkVMT0FEKTsKKwlTZXRJ bnRlcnJ1cHRIYW5kbGVyKElOVEVSUlVQVF9URVJNSU5BVEUsIFByb2Nlc3NBdXhQcm9jZXNz U2h1dGRvd25JbnRlcnJ1cHQpOworCUVuYWJsZUludGVycnVwdChJTlRFUlJVUFRfVEVSTUlO QVRFKTsKIAogCS8qCiAJICogQ3JlYXRlIGEgbWVtb3J5IGNvbnRleHQgdGhhdCB3ZSB3aWxs IGRvIGFsbCBvdXIgd29yayBpbi4gIFdlIGRvIHRoaXMgc28KQEAgLTIxOSwxMiArMjIwLDEy IEBAIFdhbFdyaXRlck1haW4oY29uc3Qgdm9pZCAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3Rh cnR1cF9kYXRhX2xlbikKIAogCQkvKgogCQkgKiBBZHZlcnRpc2Ugd2hldGhlciB3ZSBtaWdo dCBoaWJlcm5hdGUgaW4gdGhpcyBjeWNsZS4gIFdlIGRvIHRoaXMKLQkJICogYmVmb3JlIHJl c2V0dGluZyB0aGUgbGF0Y2ggdG8gZW5zdXJlIHRoYXQgYW55IGFzeW5jIGNvbW1pdHMgd2ls bAotCQkgKiBzZWUgdGhlIGZsYWcgc2V0IGlmIHRoZXkgbWlnaHQgcG9zc2libHkgbmVlZCB0 byB3YWtlIHVzIHVwLCBhbmQKLQkJICogdGhhdCB3ZSB3b24ndCBtaXNzIGFueSBzaWduYWwg dGhleSBzZW5kIHVzLiAgKElmIHdlIGRpc2NvdmVyIHdvcmsKLQkJICogdG8gZG8gaW4gdGhl IGxhc3QgY3ljbGUgYmVmb3JlIHdlIHdvdWxkIGhpYmVybmF0ZSwgdGhlIGdsb2JhbCBmbGFn Ci0JCSAqIHdpbGwgYmUgc2V0IHVubmVjZXNzYXJpbHksIGJ1dCBsaXR0bGUgaGFybSBpcyBk b25lLikgIEJ1dCBhdm9pZAotCQkgKiB0b3VjaGluZyB0aGUgZ2xvYmFsIGZsYWcgaWYgaXQg ZG9lc24ndCBuZWVkIHRvIGNoYW5nZS4KKwkJICogYmVmb3JlIGNsZWFyaW5nIHRoZSBpbnRl cnJ1cHQgZmxhZyB0byBlbnN1cmUgdGhhdCBhbnkgYXN5bmMgY29tbWl0cworCQkgKiB3aWxs IHNlZSB0aGUgZmxhZyBzZXQgaWYgdGhleSBtaWdodCBwb3NzaWJseSBuZWVkIHRvIHdha2Ug dXMgdXAsCisJCSAqIGFuZCB0aGF0IHdlIHdvbid0IG1pc3MgYW55IHNpZ25hbCB0aGV5IHNl bmQgdXMuICAoSWYgd2UgZGlzY292ZXIKKwkJICogd29yayB0byBkbyBpbiB0aGUgbGFzdCBj eWNsZSBiZWZvcmUgd2Ugd291bGQgaGliZXJuYXRlLCB0aGUgZ2xvYmFsCisJCSAqIGZsYWcg d2lsbCBiZSBzZXQgdW5uZWNlc3NhcmlseSwgYnV0IGxpdHRsZSBoYXJtIGlzIGRvbmUuKSAg QnV0CisJCSAqIGF2b2lkIHRvdWNoaW5nIHRoZSBnbG9iYWwgZmxhZyBpZiBpdCBkb2Vzbid0 IG5lZWQgdG8gY2hhbmdlLgogCQkgKi8KIAkJaWYgKGhpYmVybmF0aW5nICE9IChsZWZ0X3Rp bGxfaGliZXJuYXRlIDw9IDEpKQogCQl7CkBAIC0yMzIsMTEgKzIzMywxMCBAQCBXYWxXcml0 ZXJNYWluKGNvbnN0IHZvaWQgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9s ZW4pCiAJCQlTZXRXYWxXcml0ZXJTbGVlcGluZyhoaWJlcm5hdGluZyk7CiAJCX0KIAotCQkv KiBDbGVhciBhbnkgYWxyZWFkeS1wZW5kaW5nIHdha2V1cHMgKi8KLQkJUmVzZXRMYXRjaChN eUxhdGNoKTsKKwkJQ2xlYXJJbnRlcnJ1cHQoSU5URVJSVVBUX1dBSVRfV0FLRVVQKTsKIAot CQkvKiBQcm9jZXNzIGFueSBzaWduYWxzIHJlY2VpdmVkIHJlY2VudGx5ICovCi0JCVByb2Nl c3NNYWluTG9vcEludGVycnVwdHMoKTsKKwkJLyogUHJvY2VzcyBhbnkgaW50ZXJydXB0cyBy ZWNlaXZlZCByZWNlbnRseSAqLworCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwogCiAJCS8q CiAJCSAqIERvIHdoYXQgd2UncmUgaGVyZSBmb3I7IHRoZW4sIGlmIFhMb2dCYWNrZ3JvdW5k Rmx1c2goKSBmb3VuZCB1c2VmdWwKQEAgLTI2MCw5ICsyNjAsOSBAQCBXYWxXcml0ZXJNYWlu KGNvbnN0IHZvaWQgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pCiAJ CWVsc2UKIAkJCWN1cl90aW1lb3V0ID0gV2FsV3JpdGVyRGVsYXkgKiBISUJFUk5BVEVfRkFD VE9SOwogCi0JCSh2b2lkKSBXYWl0TGF0Y2goTXlMYXRjaCwKLQkJCQkJCSBXTF9MQVRDSF9T RVQgfCBXTF9USU1FT1VUIHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwKLQkJCQkJCSBjdXJfdGlt ZW91dCwKLQkJCQkJCSBXQUlUX0VWRU5UX1dBTF9XUklURVJfTUFJTik7CisJCSh2b2lkKSBX YWl0SW50ZXJydXB0KENoZWNrRm9ySW50ZXJydXB0c01hc2sgfCBJTlRFUlJVUFRfV0FJVF9X QUtFVVAsCisJCQkJCQkJIFdMX0lOVEVSUlVQVCB8IFdMX1RJTUVPVVQgfCBXTF9FWElUX09O X1BNX0RFQVRILAorCQkJCQkJCSBjdXJfdGltZW91dCwKKwkJCQkJCQkgV0FJVF9FVkVOVF9X QUxfV1JJVEVSX01BSU4pOwogCX0KIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xpYnBxd2FscmVjZWl2ZXIvbGlicHF3YWxyZWNlaXZlci5jIGIvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbGlicHF3YWxyZWNlaXZlci9saWJwcXdhbHJlY2VpdmVyLmMKaW5k ZXggN2M4NjM5YjMyZTkuLjE1NmNiOTc2Njc3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9saWJwcXdhbHJlY2VpdmVyL2xpYnBxd2FscmVjZWl2ZXIuYworKysgYi9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9saWJwcXdhbHJlY2VpdmVyL2xpYnBxd2FscmVjZWl2 ZXIuYwpAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUg InBxZXhwYnVmZmVyLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vd2FscmVjZWl2ZXIuaCIK LSNpbmNsdWRlICJzdG9yYWdlL2xhdGNoLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMu aCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3BnX2xz bi5oIgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9hcHBs eXBhcmFsbGVsd29ya2VyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2Fw cGx5cGFyYWxsZWx3b3JrZXIuYwppbmRleCA4YTAxZjE2YTJjYS4uNWJhOWFmMDA2ZjUgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvYXBwbHlwYXJhbGxl bHdvcmtlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvYXBwbHlw YXJhbGxlbHdvcmtlci5jCkBAIC0xNTcsMTAgKzE1NywxMiBAQAogCiAjaW5jbHVkZSAicG9z dGdyZXMuaCIKIAorI2luY2x1ZGUgImFjY2Vzcy9wYXJhbGxlbC5oIgorI2luY2x1ZGUgImlw Yy9pbnRlcnJ1cHQuaCIKKyNpbmNsdWRlICJpcGMvc2lnbmFsX2hhbmRsZXJzLmgiCiAjaW5j bHVkZSAibGlicHEvcHFmb3JtYXQuaCIKICNpbmNsdWRlICJsaWJwcS9wcW1xLmgiCiAjaW5j bHVkZSAicGdzdGF0LmgiCi0jaW5jbHVkZSAicG9zdG1hc3Rlci9pbnRlcnJ1cHQuaCIKICNp bmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2FsbGF1bmNoZXIuaCIKICNpbmNsdWRlICJyZXBs aWNhdGlvbi9sb2dpY2Fsd29ya2VyLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vb3JpZ2lu LmgiCkBAIC0yMzgsMTIgKzI0MCw2IEBAIHN0YXRpYyBMaXN0ICpQYXJhbGxlbEFwcGx5V29y a2VyUG9vbCA9IE5JTDsKICAqLwogUGFyYWxsZWxBcHBseVdvcmtlclNoYXJlZCAqTXlQYXJh bGxlbFNoYXJlZCA9IE5VTEw7CiAKLS8qCi0gKiBJcyB0aGVyZSBhIG1lc3NhZ2Ugc2VudCBi eSBhIHBhcmFsbGVsIGFwcGx5IHdvcmtlciB0aGF0IHRoZSBsZWFkZXIgYXBwbHkKLSAqIHdv cmtlciBuZWVkcyB0byByZWNlaXZlPwotICovCi12b2xhdGlsZSBzaWdfYXRvbWljX3QgUGFy YWxsZWxBcHBseU1lc3NhZ2VQZW5kaW5nID0gZmFsc2U7Ci0KIC8qCiAgKiBDYWNoZSB0aGUg cGFyYWxsZWwgYXBwbHkgd29ya2VyIGluZm9ybWF0aW9uIHJlcXVpcmVkIGZvciBhcHBseWlu ZyB0aGUKICAqIGN1cnJlbnQgc3RyZWFtaW5nIHRyYW5zYWN0aW9uLiBJdCBpcyB1c2VkIHRv IHNhdmUgdGhlIGNvc3Qgb2Ygc2VhcmNoaW5nIHRoZQpAQCAtNzA2LDMwICs3MDIsNiBAQCBw YV9wcm9jZXNzX3Nwb29sZWRfbWVzc2FnZXNfaWZfcmVxdWlyZWQodm9pZCkKIAlyZXR1cm4g dHJ1ZTsKIH0KIAotLyoKLSAqIEludGVycnVwdCBoYW5kbGVyIGZvciBtYWluIGxvb3Agb2Yg cGFyYWxsZWwgYXBwbHkgd29ya2VyLgotICovCi1zdGF0aWMgdm9pZAotUHJvY2Vzc1BhcmFs bGVsQXBwbHlJbnRlcnJ1cHRzKHZvaWQpCi17Ci0JQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsK LQotCWlmIChTaHV0ZG93blJlcXVlc3RQZW5kaW5nKQotCXsKLQkJZXJlcG9ydChMT0csCi0J CQkJKGVycm1zZygibG9naWNhbCByZXBsaWNhdGlvbiBwYXJhbGxlbCBhcHBseSB3b3JrZXIg Zm9yIHN1YnNjcmlwdGlvbiBcIiVzXCIgaGFzIGZpbmlzaGVkIiwKLQkJCQkJCU15U3Vic2Ny aXB0aW9uLT5uYW1lKSkpOwotCi0JCXByb2NfZXhpdCgwKTsKLQl9Ci0KLQlpZiAoQ29uZmln UmVsb2FkUGVuZGluZykKLQl7Ci0JCUNvbmZpZ1JlbG9hZFBlbmRpbmcgPSBmYWxzZTsKLQkJ UHJvY2Vzc0NvbmZpZ0ZpbGUoUEdDX1NJR0hVUCk7Ci0JfQotfQotCiAvKiBQYXJhbGxlbCBh cHBseSB3b3JrZXIgbWFpbiBsb29wLiAqLwogc3RhdGljIHZvaWQKIExvZ2ljYWxQYXJhbGxl bEFwcGx5TG9vcChzaG1fbXFfaGFuZGxlICptcWgpCkBAIC03NTksNyArNzMxLDE4IEBAIExv Z2ljYWxQYXJhbGxlbEFwcGx5TG9vcChzaG1fbXFfaGFuZGxlICptcWgpCiAJCXZvaWQJICAg KmRhdGE7CiAJCVNpemUJCWxlbjsKIAotCQlQcm9jZXNzUGFyYWxsZWxBcHBseUludGVycnVw dHMoKTsKKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKwkJaWYgKEludGVycnVwdFBlbmRp bmcoSU5URVJSVVBUX1NIVVRET1dOX1BBUkFMTEVMX0FQUExZX1dPUktFUikpCisJCXsKKwkJ CWVyZXBvcnQoTE9HLAorCQkJCQkoZXJybXNnKCJsb2dpY2FsIHJlcGxpY2F0aW9uIHBhcmFs bGVsIGFwcGx5IHdvcmtlciBmb3Igc3Vic2NyaXB0aW9uIFwiJXNcIiBoYXMgZmluaXNoZWQi LAorCQkJCQkJCU15U3Vic2NyaXB0aW9uLT5uYW1lKSkpOworCQkJcHJvY19leGl0KDApOwor CQl9CisJCWlmIChDb25zdW1lSW50ZXJydXB0KElOVEVSUlVQVF9URVJNSU5BVEUpKQorCQkJ UHJvY2Vzc1Rlcm1pbmF0ZUludGVycnVwdCgpOworCQlpZiAoQ29uc3VtZUludGVycnVwdChJ TlRFUlJVUFRfQ09ORklHX1JFTE9BRCkpCisJCQlQcm9jZXNzQ29uZmlnRmlsZShQR0NfU0lH SFVQKTsKIAogCQkvKiBFbnN1cmUgd2UgYXJlIHJlYWRpbmcgdGhlIGRhdGEgaW50byBvdXIg bWVtb3J5IGNvbnRleHQuICovCiAJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhBcHBseU1lc3Nh Z2VDb250ZXh0KTsKQEAgLTgwNSwxMyArNzg4LDE3IEBAIExvZ2ljYWxQYXJhbGxlbEFwcGx5 TG9vcChzaG1fbXFfaGFuZGxlICptcWgpCiAJCQkJaW50CQkJcmM7CiAKIAkJCQkvKiBXYWl0 IGZvciBtb3JlIHdvcmsuICovCi0JCQkJcmMgPSBXYWl0TGF0Y2goTXlMYXRjaCwKLQkJCQkJ CQkgICBXTF9MQVRDSF9TRVQgfCBXTF9USU1FT1VUIHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwK LQkJCQkJCQkgICAxMDAwTCwKLQkJCQkJCQkgICBXQUlUX0VWRU5UX0xPR0lDQUxfUEFSQUxM RUxfQVBQTFlfTUFJTik7Ci0KLQkJCQlpZiAocmMgJiBXTF9MQVRDSF9TRVQpCi0JCQkJCVJl c2V0TGF0Y2goTXlMYXRjaCk7CisJCQkJcmMgPSBXYWl0SW50ZXJydXB0KENoZWNrRm9ySW50 ZXJydXB0c01hc2sgfAorCQkJCQkJCQkgICBJTlRFUlJVUFRfU0hVVERPV05fUEFSQUxMRUxf QVBQTFlfV09SS0VSIHwKKwkJCQkJCQkJICAgSU5URVJSVVBUX1RFUk1JTkFURSB8CisJCQkJ CQkJCSAgIElOVEVSUlVQVF9DT05GSUdfUkVMT0FEIHwKKwkJCQkJCQkJICAgSU5URVJSVVBU X1dBSVRfV0FLRVVQLAorCQkJCQkJCQkgICBXTF9JTlRFUlJVUFQgfCBXTF9USU1FT1VUIHwg V0xfRVhJVF9PTl9QTV9ERUFUSCwKKwkJCQkJCQkJICAgMTAwMEwsCisJCQkJCQkJCSAgIFdB SVRfRVZFTlRfTE9HSUNBTF9QQVJBTExFTF9BUFBMWV9NQUlOKTsKKworCQkJCWlmIChyYyAm IFdMX0lOVEVSUlVQVCkKKwkJCQkJQ2xlYXJJbnRlcnJ1cHQoSU5URVJSVVBUX1dBSVRfV0FL RVVQKTsKIAkJCX0KIAkJfQogCQllbHNlCkBAIC04NDQsOSArODMxLDggQEAgTG9naWNhbFBh cmFsbGVsQXBwbHlMb29wKHNobV9tcV9oYW5kbGUgKm1xaCkKIHN0YXRpYyB2b2lkCiBwYV9z aHV0ZG93bihpbnQgY29kZSwgRGF0dW0gYXJnKQogewotCVNlbmRQcm9jU2lnbmFsKE15TG9n aWNhbFJlcFdvcmtlci0+bGVhZGVyX3BpZCwKLQkJCQkgICBQUk9DU0lHX1BBUkFMTEVMX0FQ UExZX01FU1NBR0UsCi0JCQkJICAgSU5WQUxJRF9QUk9DX05VTUJFUik7CisJU2VuZEludGVy cnVwdChJTlRFUlJVUFRfUEFSQUxMRUxfTUVTU0FHRSwKKwkJCQkgIE15TG9naWNhbFJlcFdv cmtlci0+bGVhZGVyX3BncHJvY25vKTsKIAogCWRzbV9kZXRhY2goKGRzbV9zZWdtZW50ICop IERhdHVtR2V0UG9pbnRlcihhcmcpKTsKIH0KQEAgLTg3MSwxNiArODU3LDE4IEBAIFBhcmFs bGVsQXBwbHlXb3JrZXJNYWluKERhdHVtIG1haW5fYXJnKQogCUluaXRpYWxpemluZ0FwcGx5 V29ya2VyID0gdHJ1ZTsKIAogCS8qCi0JICogU2V0dXAgc2lnbmFsIGhhbmRsaW5nLgorCSAq IFNldHVwIGludGVycnVwdCBoYW5kbGluZy4KIAkgKgotCSAqIE5vdGU6IFdlIGludGVudGlv bmFsbHkgdXNlZCBTSUdVU1IyIHRvIHRyaWdnZXIgYSBncmFjZWZ1bCBzaHV0ZG93bgotCSAq IGluaXRpYXRlZCBieSB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlci4gVGhpcyBoZWxwcyB0byBk aWZmZXJlbnRpYXRlIGl0Ci0JICogZnJvbSB0aGUgY2FzZSB3aGVyZSB3ZSBhYm9ydCB0aGUg Y3VycmVudCB0cmFuc2FjdGlvbiBhbmQgZXhpdCBvbgotCSAqIHJlY2VpdmluZyBTSUdURVJN LgorCSAqIEluIGFkZGl0aW9uIHRvIHRoZSB1c3VhbCBpbnRlcnJ1cHRzLCB3ZSB1c2UKKwkg KiBJTlRFUlJVUFRfU0hVVERPV05fUEFSQUxMRUxfQVBQTFlfV09SS0VSIGFzIGFsdGVybmF0 aXZlIHRvCisJICogSU5URVJSVVBUX1RFUk1JTkFURSB0byB0cmlnZ2VyIGEgZ3JhY2VmdWwg c2h1dGRvd24gaW5pdGlhdGVkIGJ5IHRoZQorCSAqIGxlYWRlciBhcHBseSB3b3JrZXIuIFRo aXMgaGVscHMgdG8gZGlmZmVyZW50aWF0ZSBpdCBmcm9tIHRoZSBjYXNlIHdoZXJlCisJICog d2UgYWJvcnQgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gYW5kIGV4aXQgb24gcmVjZWl2aW5n IFNJR1RFUk0uCisJICoKKwkgKiBGSVhNRTogSXQgaGFzIHRoZSBzYW1lIGVmZmVjdCwgYnV0 IHByaW50cyBhbiBhZGRpdGlvbmFsIG1lc3NhZ2UgdG8gdGhlCisJICogbG9nLiBJcyBpdCB3 b3J0aCBkaXN0aW5ndWlzaGluZywgYW5kIGRvIHdlIGV2ZW4gd2FudCB0aGUgbG9nIG1lc3Nh Z2U/CiAJICovCi0JcHFzaWduYWwoU0lHSFVQLCBTaWduYWxIYW5kbGVyRm9yQ29uZmlnUmVs b2FkKTsKLQlwcXNpZ25hbChTSUdURVJNLCBkaWUpOwotCXBxc2lnbmFsKFNJR1VTUjIsIFNp Z25hbEhhbmRsZXJGb3JTaHV0ZG93blJlcXVlc3QpOworCVNldFN0YW5kYXJkSW50ZXJydXB0 SGFuZGxlcnMoKTsKIAlCYWNrZ3JvdW5kV29ya2VyVW5ibG9ja1NpZ25hbHMoKTsKIAogCS8q CkBAIC05NDEsOCArOTI5LDcgQEAgUGFyYWxsZWxBcHBseVdvcmtlck1haW4oRGF0dW0gbWFp bl9hcmcpCiAJZXJyb3JfbXFoID0gc2htX21xX2F0dGFjaChtcSwgc2VnLCBOVUxMKTsKIAog CXBxX3JlZGlyZWN0X3RvX3NobV9tcShzZWcsIGVycm9yX21xaCk7Ci0JcHFfc2V0X3BhcmFs bGVsX2xlYWRlcihNeUxvZ2ljYWxSZXBXb3JrZXItPmxlYWRlcl9waWQsCi0JCQkJCQkgICBJ TlZBTElEX1BST0NfTlVNQkVSKTsKKwlwcV9zZXRfcGFyYWxsZWxfbGVhZGVyKE15TG9naWNh bFJlcFdvcmtlci0+bGVhZGVyX3BncHJvY25vKTsKIAogCU15TG9naWNhbFJlcFdvcmtlci0+ bGFzdF9zZW5kX3RpbWUgPSBNeUxvZ2ljYWxSZXBXb3JrZXItPmxhc3RfcmVjdl90aW1lID0K IAkJTXlMb2dpY2FsUmVwV29ya2VyLT5yZXBseV90aW1lID0gMDsKQEAgLTk4NiwyMSArOTcz LDYgQEAgUGFyYWxsZWxBcHBseVdvcmtlck1haW4oRGF0dW0gbWFpbl9hcmcpCiAJQXNzZXJ0 KGZhbHNlKTsKIH0KIAotLyoKLSAqIEhhbmRsZSByZWNlaXB0IG9mIGFuIGludGVycnVwdCBp bmRpY2F0aW5nIGEgcGFyYWxsZWwgYXBwbHkgd29ya2VyIG1lc3NhZ2UuCi0gKgotICogTm90 ZTogdGhpcyBpcyBjYWxsZWQgd2l0aGluIGEgc2lnbmFsIGhhbmRsZXIhIEFsbCB3ZSBjYW4g ZG8gaXMgc2V0IGEgZmxhZwotICogdGhhdCB3aWxsIGNhdXNlIHRoZSBuZXh0IENIRUNLX0ZP Ul9JTlRFUlJVUFRTKCkgdG8gaW52b2tlCi0gKiBQcm9jZXNzUGFyYWxsZWxBcHBseU1lc3Nh Z2VzKCkuCi0gKi8KLXZvaWQKLUhhbmRsZVBhcmFsbGVsQXBwbHlNZXNzYWdlSW50ZXJydXB0 KHZvaWQpCi17Ci0JSW50ZXJydXB0UGVuZGluZyA9IHRydWU7Ci0JUGFyYWxsZWxBcHBseU1l c3NhZ2VQZW5kaW5nID0gdHJ1ZTsKLQlTZXRMYXRjaChNeUxhdGNoKTsKLX0KLQogLyoKICAq IFByb2Nlc3MgYSBzaW5nbGUgcHJvdG9jb2wgbWVzc2FnZSByZWNlaXZlZCBmcm9tIGEgc2lu Z2xlIHBhcmFsbGVsIGFwcGx5CiAgKiB3b3JrZXIuCkBAIC0xMDY1LDcgKzEwMzcsNyBAQCBQ cm9jZXNzUGFyYWxsZWxBcHBseU1lc3NhZ2UoU3RyaW5nSW5mbyBtc2cpCiB9CiAKIC8qCi0g KiBIYW5kbGUgYW55IHF1ZXVlZCBwcm90b2NvbCBtZXNzYWdlcyByZWNlaXZlZCBmcm9tIHBh cmFsbGVsIGFwcGx5IHdvcmtlcnMuCisgKiBQcm9jZXNzIGFueSBxdWV1ZWQgcHJvdG9jb2wg bWVzc2FnZXMgcmVjZWl2ZWQgZnJvbSBwYXJhbGxlbCBhcHBseSB3b3JrZXJzLgogICovCiB2 b2lkCiBQcm9jZXNzUGFyYWxsZWxBcHBseU1lc3NhZ2VzKHZvaWQpCkBAIC0xMDc1LDYgKzEw NDcsOSBAQCBQcm9jZXNzUGFyYWxsZWxBcHBseU1lc3NhZ2VzKHZvaWQpCiAKIAlzdGF0aWMg TWVtb3J5Q29udGV4dCBocGFtX2NvbnRleHQgPSBOVUxMOwogCisJLyogV2UgZG9uJ3QgZXhw ZWN0IHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIHRvIGFsc28gcnVuIHBhcmFsbGVsIHF1ZXJp ZXMgKi8KKwlBc3NlcnQoIVBhcmFsbGVsQ29udGV4dEFjdGl2ZSgpKTsKKwogCS8qCiAJICog VGhpcyBpcyBpbnZva2VkIGZyb20gUHJvY2Vzc0ludGVycnVwdHMoKSwgYW5kIHNpbmNlIHNv bWUgb2YgdGhlCiAJICogZnVuY3Rpb25zIGl0IGNhbGxzIGNvbnRhaW4gQ0hFQ0tfRk9SX0lO VEVSUlVQVFMoKSwgdGhlcmUgaXMgYSBwb3RlbnRpYWwKQEAgLTEwOTgsOCArMTA3Myw2IEBA IFByb2Nlc3NQYXJhbGxlbEFwcGx5TWVzc2FnZXModm9pZCkKIAogCW9sZGNvbnRleHQgPSBN ZW1vcnlDb250ZXh0U3dpdGNoVG8oaHBhbV9jb250ZXh0KTsKIAotCVBhcmFsbGVsQXBwbHlN ZXNzYWdlUGVuZGluZyA9IGZhbHNlOwotCiAJZm9yZWFjaChsYywgUGFyYWxsZWxBcHBseVdv cmtlclBvb2wpCiAJewogCQlzaG1fbXFfcmVzdWx0IHJlczsKQEAgLTExOTAsMTQgKzExNjMs MTUgQEAgcGFfc2VuZF9kYXRhKFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbywgU2l6 ZSBuYnl0ZXMsIGNvbnN0IHZvaWQgKmRhdGEpCiAJCUFzc2VydChyZXN1bHQgPT0gU0hNX01R X1dPVUxEX0JMT0NLKTsKIAogCQkvKiBXYWl0IGJlZm9yZSByZXRyeWluZy4gKi8KLQkJcmMg PSBXYWl0TGF0Y2goTXlMYXRjaCwKLQkJCQkJICAgV0xfTEFUQ0hfU0VUIHwgV0xfVElNRU9V VCB8IFdMX0VYSVRfT05fUE1fREVBVEgsCi0JCQkJCSAgIFNITV9TRU5EX1JFVFJZX0lOVEVS VkFMX01TLAotCQkJCQkgICBXQUlUX0VWRU5UX0xPR0lDQUxfQVBQTFlfU0VORF9EQVRBKTsK KwkJcmMgPSBXYWl0SW50ZXJydXB0KENoZWNrRm9ySW50ZXJydXB0c01hc2sgfAorCQkJCQkJ ICAgSU5URVJSVVBUX1dBSVRfV0FLRVVQLAorCQkJCQkJICAgV0xfSU5URVJSVVBUIHwgV0xf VElNRU9VVCB8IFdMX0VYSVRfT05fUE1fREVBVEgsCisJCQkJCQkgICBTSE1fU0VORF9SRVRS WV9JTlRFUlZBTF9NUywKKwkJCQkJCSAgIFdBSVRfRVZFTlRfTE9HSUNBTF9BUFBMWV9TRU5E X0RBVEEpOwogCi0JCWlmIChyYyAmIFdMX0xBVENIX1NFVCkKKwkJaWYgKHJjICYgV0xfSU5U RVJSVVBUKQogCQl7Ci0JCQlSZXNldExhdGNoKE15TGF0Y2gpOworCQkJQ2xlYXJJbnRlcnJ1 cHQoSU5URVJSVVBUX1dBSVRfV0FLRVVQKTsKIAkJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7 CiAJCX0KIApAQCAtMTI2MiwxMyArMTIzNiwxNCBAQCBwYV93YWl0X2Zvcl94YWN0X3N0YXRl KFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbywKIAkJCWJyZWFrOwogCiAJCS8qIFdh aXQgdG8gYmUgc2lnbmFsbGVkLiAqLwotCQkodm9pZCkgV2FpdExhdGNoKE15TGF0Y2gsCi0J CQkJCQkgV0xfTEFUQ0hfU0VUIHwgV0xfVElNRU9VVCB8IFdMX0VYSVRfT05fUE1fREVBVEgs Ci0JCQkJCQkgMTBMLAotCQkJCQkJIFdBSVRfRVZFTlRfTE9HSUNBTF9QQVJBTExFTF9BUFBM WV9TVEFURV9DSEFOR0UpOwotCi0JCS8qIFJlc2V0IHRoZSBsYXRjaCBzbyB3ZSBkb24ndCBz cGluLiAqLwotCQlSZXNldExhdGNoKE15TGF0Y2gpOworCQkodm9pZCkgV2FpdEludGVycnVw dChDaGVja0ZvckludGVycnVwdHNNYXNrIHwKKwkJCQkJCQkgSU5URVJSVVBUX1dBSVRfV0FL RVVQLAorCQkJCQkJCSBXTF9JTlRFUlJVUFQgfCBXTF9USU1FT1VUIHwgV0xfRVhJVF9PTl9Q TV9ERUFUSCwKKwkJCQkJCQkgMTBMLAorCQkJCQkJCSBXQUlUX0VWRU5UX0xPR0lDQUxfUEFS QUxMRUxfQVBQTFlfU1RBVEVfQ0hBTkdFKTsKKworCQkvKiBDbGVhciB0aGUgaW50ZXJydXB0 IGZsYWcgc28gd2UgZG9uJ3Qgc3Bpbi4gKi8KKwkJQ2xlYXJJbnRlcnJ1cHQoSU5URVJSVVBU X1dBSVRfV0FLRVVQKTsKIAogCQkvKiBBbiBpbnRlcnJ1cHQgbWF5IGhhdmUgb2NjdXJyZWQg d2hpbGUgd2Ugd2VyZSB3YWl0aW5nLiAqLwogCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sYXVuY2hlci5j IGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sYXVuY2hlci5jCmluZGV4IDNl ZDg2NDgwYmUyLi5kNjZiYTBiNmY1YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9sYXVuY2hlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvbGF1bmNoZXIuYwpAQCAtMjUsMTEgKzI1LDEyIEBACiAjaW5jbHVkZSAiY2F0 YWxvZy9wZ19zdWJzY3JpcHRpb24uaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3N1YnNjcmlw dGlvbl9yZWwuaCIKICNpbmNsdWRlICJmdW5jYXBpLmgiCisjaW5jbHVkZSAiaXBjL2ludGVy cnVwdC5oIgorI2luY2x1ZGUgImlwYy9zaWduYWxfaGFuZGxlcnMuaCIKICNpbmNsdWRlICJs aWIvZHNoYXNoLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGdzdGF0 LmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9iZ3dvcmtlci5oIgotI2luY2x1ZGUgInBvc3Rt YXN0ZXIvaW50ZXJydXB0LmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbGxhdW5j aGVyLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vb3JpZ2luLmgiCiAjaW5jbHVkZSAicmVw bGljYXRpb24vc2xvdC5oIgpAQCAtNTgsNyArNTksNyBAQCBMb2dpY2FsUmVwV29ya2VyICpN eUxvZ2ljYWxSZXBXb3JrZXIgPSBOVUxMOwogdHlwZWRlZiBzdHJ1Y3QgTG9naWNhbFJlcEN0 eFN0cnVjdAogewogCS8qIFN1cGVydmlzb3IgcHJvY2Vzcy4gKi8KLQlwaWRfdAkJbGF1bmNo ZXJfcGlkOworCVByb2NOdW1iZXIJbGF1bmNoZXJfcHJvY25vOwogCiAJLyogSGFzaCB0YWJs ZSBob2xkaW5nIGxhc3Qgc3RhcnQgdGltZXMgb2Ygc3Vic2NyaXB0aW9ucycgYXBwbHkgd29y a2Vycy4gKi8KIAlkc2FfaGFuZGxlCWxhc3Rfc3RhcnRfZHNhOwpAQCAtMTgzLDcgKzE4NCw2 IEBAIFdhaXRGb3JSZXBsaWNhdGlvbldvcmtlckF0dGFjaChMb2dpY2FsUmVwV29ya2VyICp3 b3JrZXIsCiAJCQkJCQkJICAgQmFja2dyb3VuZFdvcmtlckhhbmRsZSAqaGFuZGxlKQogewog CWJvb2wJCXJlc3VsdCA9IGZhbHNlOwotCWJvb2wJCWRyb3BwZWRfbGF0Y2ggPSBmYWxzZTsK IAogCWZvciAoOzspCiAJewpAQCAtMjE5LDI3ICsyMTksMjggQEAgV2FpdEZvclJlcGxpY2F0 aW9uV29ya2VyQXR0YWNoKExvZ2ljYWxSZXBXb3JrZXIgKndvcmtlciwKIAkJfQogCiAJCS8q Ci0JCSAqIFdlIG5lZWQgdGltZW91dCBiZWNhdXNlIHdlIGdlbmVyYWxseSBkb24ndCBnZXQg bm90aWZpZWQgdmlhIGxhdGNoCi0JCSAqIGFib3V0IHRoZSB3b3JrZXIgYXR0YWNoLiAgQnV0 IHdlIGRvbid0IGV4cGVjdCB0byBoYXZlIHRvIHdhaXQgbG9uZy4KKwkJICogV2UgbmVlZCB0 aW1lb3V0IGJlY2F1c2Ugd2UgZ2VuZXJhbGx5IGRvbid0IGdldCBub3RpZmllZCB2aWEgYW4K KwkJICogaW50ZXJydXB0IGFib3V0IHRoZSB3b3JrZXIgYXR0YWNoLiAgQnV0IHdlIGRvbid0 IGV4cGVjdCB0byBoYXZlIHRvCisJCSAqIHdhaXQgbG9uZy4KIAkJICovCi0JCXJjID0gV2Fp dExhdGNoKE15TGF0Y2gsCi0JCQkJCSAgIFdMX0xBVENIX1NFVCB8IFdMX1RJTUVPVVQgfCBX TF9FWElUX09OX1BNX0RFQVRILAotCQkJCQkgICAxMEwsIFdBSVRfRVZFTlRfQkdXT1JLRVJf U1RBUlRVUCk7CisJCXJjID0gV2FpdEludGVycnVwdChDaGVja0ZvckludGVycnVwdHNNYXNr IHwKKwkJCQkJCSAgIElOVEVSUlVQVF9XQUlUX1dBS0VVUCwKKwkJCQkJCSAgIFdMX0lOVEVS UlVQVCB8IFdMX1RJTUVPVVQgfCBXTF9FWElUX09OX1BNX0RFQVRILAorCQkJCQkJICAgMTBM LCBXQUlUX0VWRU5UX0JHV09SS0VSX1NUQVJUVVApOwogCi0JCWlmIChyYyAmIFdMX0xBVENI X1NFVCkKKwkJaWYgKHJjICYgV0xfSU5URVJSVVBUKQogCQl7Ci0JCQlSZXNldExhdGNoKE15 TGF0Y2gpOworCQkJQ2xlYXJJbnRlcnJ1cHQoSU5URVJSVVBUX1dBSVRfV0FLRVVQKTsKIAkJ CUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7Ci0JCQlkcm9wcGVkX2xhdGNoID0gdHJ1ZTsKIAkJ fQogCX0KIAogCS8qCi0JICogSWYgd2UgaGFkIHRvIGNsZWFyIGEgbGF0Y2ggZXZlbnQgaW4g b3JkZXIgdG8gd2FpdCwgYmUgc3VyZSB0byByZXN0b3JlCi0JICogaXQgYmVmb3JlIGV4aXRp bmcuICBPdGhlcndpc2UgY2FsbGVyIG1heSBtaXNzIGV2ZW50cy4KKwkgKiBYWFg6IFdlIHVz ZWQgdG8gaGF2ZSB0byByZXN0b3JlIHRoZSBwcm9jZXNzIGxhdGNoLCBiZWNhdXNlIHRoZSBs YXVuY2hlcgorCSAqIHJlbGllZCBvbiB0aGUgc2FtZSBsYXRjaCB0byB3YWl0IGZvciBvdGhl ciBzdGF0dXMgY2hhbmdlcy4gQnV0IFdlIG5vdworCSAqIHVzZSBJTlRFUlJVUFRfU1VCU0NS SVBUSU9OX0NIQU5HRSBmb3IgdGhhdC4gQnV0IGZvciBjbGFyaXksIHBlcmhhcHMgd2UKKwkg KiBzaG91bGQgdXNlIGEgZGVzaWduZWQgaW50ZXJydXB0IGZvciB0aGlzIHdhaXQgdG9vPwog CSAqLwotCWlmIChkcm9wcGVkX2xhdGNoKQotCQlTZXRMYXRjaChNeUxhdGNoKTsKIAogCXJl dHVybiByZXN1bHQ7CiB9CkBAIC00NzMsNiArNDc0LDcgQEAgcmV0cnk6CiAJd29ya2VyLT5y ZWxzdGF0ZV9sc24gPSBJbnZhbGlkWExvZ1JlY1B0cjsKIAl3b3JrZXItPnN0cmVhbV9maWxl c2V0ID0gTlVMTDsKIAl3b3JrZXItPmxlYWRlcl9waWQgPSBpc19wYXJhbGxlbF9hcHBseV93 b3JrZXIgPyBNeVByb2NQaWQgOiBJbnZhbGlkUGlkOworCXdvcmtlci0+bGVhZGVyX3BncHJv Y25vID0gaXNfcGFyYWxsZWxfYXBwbHlfd29ya2VyID8gTXlQcm9jTnVtYmVyIDogSU5WQUxJ RF9QUk9DX05VTUJFUjsKIAl3b3JrZXItPnBhcmFsbGVsX2FwcGx5ID0gaXNfcGFyYWxsZWxf YXBwbHlfd29ya2VyOwogCXdvcmtlci0+b2xkZXN0X25vbnJlbW92YWJsZV94aWQgPSByZXRh aW5fZGVhZF90dXBsZXMKIAkJPyBNeVJlcGxpY2F0aW9uU2xvdC0+ZGF0YS54bWluCkBAIC01 MzksNyArNTQxLDYgQEAgcmV0cnk6CiAJfQogCiAJYmd3LmJnd19yZXN0YXJ0X3RpbWUgPSBC R1dfTkVWRVJfUkVTVEFSVDsKLQliZ3cuYmd3X25vdGlmeV9waWQgPSBNeVByb2NQaWQ7CiAJ Ymd3LmJnd19tYWluX2FyZyA9IEludDMyR2V0RGF0dW0oc2xvdCk7CiAKIAlpZiAoIVJlZ2lz dGVyRHluYW1pY0JhY2tncm91bmRXb3JrZXIoJmJndywgJmJnd19oYW5kbGUpKQpAQCAtNTY2 LDcgKzU2Nyw3IEBAIHJldHJ5OgogICogc2xvdC4KICAqLwogc3RhdGljIHZvaWQKLWxvZ2lj YWxyZXBfd29ya2VyX3N0b3BfaW50ZXJuYWwoTG9naWNhbFJlcFdvcmtlciAqd29ya2VyLCBp bnQgc2lnbm8pCitsb2dpY2FscmVwX3dvcmtlcl9zdG9wX2ludGVybmFsKExvZ2ljYWxSZXBX b3JrZXIgKndvcmtlciwgSW50ZXJydXB0TWFzayBpbnRlcnJ1cHQpCiB7CiAJdWludDE2CQln ZW5lcmF0aW9uOwogCkBAIC01ODksMTMgKzU5MCwxNCBAQCBsb2dpY2FscmVwX3dvcmtlcl9z dG9wX2ludGVybmFsKExvZ2ljYWxSZXBXb3JrZXIgKndvcmtlciwgaW50IHNpZ25vKQogCQlM V0xvY2tSZWxlYXNlKExvZ2ljYWxSZXBXb3JrZXJMb2NrKTsKIAogCQkvKiBXYWl0IGEgYml0 IC0tLSB3ZSBkb24ndCBleHBlY3QgdG8gaGF2ZSB0byB3YWl0IGxvbmcuICovCi0JCXJjID0g V2FpdExhdGNoKE15TGF0Y2gsCi0JCQkJCSAgIFdMX0xBVENIX1NFVCB8IFdMX1RJTUVPVVQg fCBXTF9FWElUX09OX1BNX0RFQVRILAotCQkJCQkgICAxMEwsIFdBSVRfRVZFTlRfQkdXT1JL RVJfU1RBUlRVUCk7CisJCXJjID0gV2FpdEludGVycnVwdChDaGVja0ZvckludGVycnVwdHNN YXNrIHwKKwkJCQkJCSAgIElOVEVSUlVQVF9XQUlUX1dBS0VVUCwKKwkJCQkJCSAgIFdMX0lO VEVSUlVQVCB8IFdMX1RJTUVPVVQgfCBXTF9FWElUX09OX1BNX0RFQVRILAorCQkJCQkJICAg MTBMLCBXQUlUX0VWRU5UX0JHV09SS0VSX1NUQVJUVVApOwogCi0JCWlmIChyYyAmIFdMX0xB VENIX1NFVCkKKwkJaWYgKHJjICYgV0xfSU5URVJSVVBUKQogCQl7Ci0JCQlSZXNldExhdGNo KE15TGF0Y2gpOworCQkJQ2xlYXJJbnRlcnJ1cHQoSU5URVJSVVBUX1dBSVRfV0FLRVVQKTsK IAkJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CiAJCX0KIApAQCAtNjE2LDcgKzYxOCw3IEBA IGxvZ2ljYWxyZXBfd29ya2VyX3N0b3BfaW50ZXJuYWwoTG9naWNhbFJlcFdvcmtlciAqd29y a2VyLCBpbnQgc2lnbm8pCiAJfQogCiAJLyogTm93IHRlcm1pbmF0ZSB0aGUgd29ya2VyIC4u LiAqLwotCWtpbGwod29ya2VyLT5wcm9jLT5waWQsIHNpZ25vKTsKKwlTZW5kSW50ZXJydXB0 KGludGVycnVwdCwgR2V0TnVtYmVyRnJvbVBHUHJvYyh3b3JrZXItPnByb2MpKTsKIAogCS8q IC4uLiBhbmQgd2FpdCBmb3IgaXQgdG8gZGllLiAqLwogCWZvciAoOzspCkBAIC02MzAsMTMg KzYzMiwxNCBAQCBsb2dpY2FscmVwX3dvcmtlcl9zdG9wX2ludGVybmFsKExvZ2ljYWxSZXBX b3JrZXIgKndvcmtlciwgaW50IHNpZ25vKQogCQlMV0xvY2tSZWxlYXNlKExvZ2ljYWxSZXBX b3JrZXJMb2NrKTsKIAogCQkvKiBXYWl0IGEgYml0IC0tLSB3ZSBkb24ndCBleHBlY3QgdG8g aGF2ZSB0byB3YWl0IGxvbmcuICovCi0JCXJjID0gV2FpdExhdGNoKE15TGF0Y2gsCi0JCQkJ CSAgIFdMX0xBVENIX1NFVCB8IFdMX1RJTUVPVVQgfCBXTF9FWElUX09OX1BNX0RFQVRILAot CQkJCQkgICAxMEwsIFdBSVRfRVZFTlRfQkdXT1JLRVJfU0hVVERPV04pOworCQlyYyA9IFdh aXRJbnRlcnJ1cHQoQ2hlY2tGb3JJbnRlcnJ1cHRzTWFzayB8CisJCQkJCQkgICBJTlRFUlJV UFRfV0FJVF9XQUtFVVAsCisJCQkJCQkgICBXTF9JTlRFUlJVUFQgfCBXTF9USU1FT1VUIHwg V0xfRVhJVF9PTl9QTV9ERUFUSCwKKwkJCQkJCSAgIDEwTCwgV0FJVF9FVkVOVF9CR1dPUktF Ul9TSFVURE9XTik7CiAKLQkJaWYgKHJjICYgV0xfTEFUQ0hfU0VUKQorCQlpZiAocmMgJiBX TF9JTlRFUlJVUFQpCiAJCXsKLQkJCVJlc2V0TGF0Y2goTXlMYXRjaCk7CisJCQlDbGVhcklu dGVycnVwdChJTlRFUlJVUFRfV0FJVF9XQUtFVVApOwogCQkJQ0hFQ0tfRk9SX0lOVEVSUlVQ VFMoKTsKIAkJfQogCkBAIC02NjMsNyArNjY2LDcgQEAgbG9naWNhbHJlcF93b3JrZXJfc3Rv cChMb2dpY2FsUmVwV29ya2VyVHlwZSB3dHlwZSwgT2lkIHN1YmlkLCBPaWQgcmVsaWQpCiAJ aWYgKHdvcmtlcikKIAl7CiAJCUFzc2VydCghaXNQYXJhbGxlbEFwcGx5V29ya2VyKHdvcmtl cikpOwotCQlsb2dpY2FscmVwX3dvcmtlcl9zdG9wX2ludGVybmFsKHdvcmtlciwgU0lHVEVS TSk7CisJCWxvZ2ljYWxyZXBfd29ya2VyX3N0b3BfaW50ZXJuYWwod29ya2VyLCBJTlRFUlJV UFRfVEVSTUlOQVRFKTsKIAl9CiAKIAlMV0xvY2tSZWxlYXNlKExvZ2ljYWxSZXBXb3JrZXJM b2NrKTsKQEAgLTY3Miw4ICs2NzUsOSBAQCBsb2dpY2FscmVwX3dvcmtlcl9zdG9wKExvZ2lj YWxSZXBXb3JrZXJUeXBlIHd0eXBlLCBPaWQgc3ViaWQsIE9pZCByZWxpZCkKIC8qCiAgKiBT dG9wIHRoZSBnaXZlbiBsb2dpY2FsIHJlcGxpY2F0aW9uIHBhcmFsbGVsIGFwcGx5IHdvcmtl ci4KICAqCi0gKiBOb2RlIHRoYXQgdGhlIGZ1bmN0aW9uIHNlbmRzIFNJR1VTUjIgaW5zdGVh ZCBvZiBTSUdURVJNIHRvIHRoZSBwYXJhbGxlbCBhcHBseQotICogd29ya2VyIHNvIHRoYXQg dGhlIHdvcmtlciBleGl0cyBjbGVhbmx5LgorICogTm9kZSB0aGF0IHRoZSBmdW5jdGlvbiBz ZW5kcyBJTlRFUlJVUFRfU0hVVERPV05fUEFSQUxMRUxfQVBQTFlfV09SS0VSCisgKiBpbnN0 ZWFkIG9mIElOVEVSUlVQVF9URVJNSU5BVEUgdG8gdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtl ciBzbyB0aGF0IHRoZQorICogd29ya2VyIGV4aXRzIG1vcmUgY2xlYW5seS4gKEZJWE1FOiB3 aGF0J3MgdGhlIGRpZmZlcmVuY2UgcmVhbGx5PykKICAqLwogdm9pZAogbG9naWNhbHJlcF9w YV93b3JrZXJfc3RvcChQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm8pCkBAIC03MTAs MTMgKzcxNCwxMyBAQCBsb2dpY2FscmVwX3BhX3dvcmtlcl9zdG9wKFBhcmFsbGVsQXBwbHlX b3JrZXJJbmZvICp3aW5mbykKIAkgKiBPbmx5IHN0b3AgdGhlIHdvcmtlciBpZiB0aGUgZ2Vu ZXJhdGlvbiBtYXRjaGVzIGFuZCB0aGUgd29ya2VyIGlzIGFsaXZlLgogCSAqLwogCWlmICh3 b3JrZXItPmdlbmVyYXRpb24gPT0gZ2VuZXJhdGlvbiAmJiB3b3JrZXItPnByb2MpCi0JCWxv Z2ljYWxyZXBfd29ya2VyX3N0b3BfaW50ZXJuYWwod29ya2VyLCBTSUdVU1IyKTsKKwkJbG9n aWNhbHJlcF93b3JrZXJfc3RvcF9pbnRlcm5hbCh3b3JrZXIsIElOVEVSUlVQVF9TSFVURE9X Tl9QQVJBTExFTF9BUFBMWV9XT1JLRVIpOwogCiAJTFdMb2NrUmVsZWFzZShMb2dpY2FsUmVw V29ya2VyTG9jayk7CiB9CiAKIC8qCi0gKiBXYWtlIHVwICh1c2luZyBsYXRjaCkgYW55IGxv Z2ljYWwgcmVwbGljYXRpb24gd29ya2VyIHRoYXQgbWF0Y2hlcyB0aGUKKyAqIFdha2UgdXAg KHVzaW5nIGludGVycnVwdCkgYW55IGxvZ2ljYWwgcmVwbGljYXRpb24gd29ya2VyIHRoYXQg bWF0Y2hlcyB0aGUKICAqIHNwZWNpZmllZCB3b3JrZXIgdHlwZSwgc3Vic2NyaXB0aW9uIGlk LCBhbmQgcmVsYXRpb24gaWQuCiAgKi8KIHZvaWQKQEAgLTczOCw3ICs3NDIsNyBAQCBsb2dp Y2FscmVwX3dvcmtlcl93YWtldXAoTG9naWNhbFJlcFdvcmtlclR5cGUgd3R5cGUsIE9pZCBz dWJpZCwgT2lkIHJlbGlkKQogfQogCiAvKgotICogV2FrZSB1cCAodXNpbmcgbGF0Y2gpIHRo ZSBzcGVjaWZpZWQgbG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIuCisgKiBXYWtlIHVwICh1 c2luZyBpbnRlcnJ1cHQpIHRoZSBzcGVjaWZpZWQgbG9naWNhbCByZXBsaWNhdGlvbiB3b3Jr ZXIuCiAgKgogICogQ2FsbGVyIG11c3QgaG9sZCBsb2NrLCBlbHNlIHdvcmtlci0+cHJvYyBj b3VsZCBjaGFuZ2UgdW5kZXIgdXMuCiAgKi8KQEAgLTc0Nyw3ICs3NTEsNyBAQCBsb2dpY2Fs cmVwX3dvcmtlcl93YWtldXBfcHRyKExvZ2ljYWxSZXBXb3JrZXIgKndvcmtlcikKIHsKIAlB c3NlcnQoTFdMb2NrSGVsZEJ5TWUoTG9naWNhbFJlcFdvcmtlckxvY2spKTsKIAotCVNldExh dGNoKCZ3b3JrZXItPnByb2MtPnByb2NMYXRjaCk7CisJU2VuZEludGVycnVwdChJTlRFUlJV UFRfV0FJVF9XQUtFVVAsIEdldE51bWJlckZyb21QR1Byb2Mod29ya2VyLT5wcm9jKSk7CiB9 CiAKIC8qCkBAIC04MTUsNyArODE5LDcgQEAgbG9naWNhbHJlcF93b3JrZXJfZGV0YWNoKHZv aWQpCiAJCQlMb2dpY2FsUmVwV29ya2VyICp3ID0gKExvZ2ljYWxSZXBXb3JrZXIgKikgbGZp cnN0KGxjKTsKIAogCQkJaWYgKGlzUGFyYWxsZWxBcHBseVdvcmtlcih3KSkKLQkJCQlsb2dp Y2FscmVwX3dvcmtlcl9zdG9wX2ludGVybmFsKHcsIFNJR1RFUk0pOworCQkJCWxvZ2ljYWxy ZXBfd29ya2VyX3N0b3BfaW50ZXJuYWwodywgSU5URVJSVVBUX1RFUk1JTkFURSk7CiAJCX0K IAogCQlMV0xvY2tSZWxlYXNlKExvZ2ljYWxSZXBXb3JrZXJMb2NrKTsKQEAgLTg0Nyw2ICs4 NTEsNyBAQCBsb2dpY2FscmVwX3dvcmtlcl9jbGVhbnVwKExvZ2ljYWxSZXBXb3JrZXIgKndv cmtlcikKIAl3b3JrZXItPnN1YmlkID0gSW52YWxpZE9pZDsKIAl3b3JrZXItPnJlbGlkID0g SW52YWxpZE9pZDsKIAl3b3JrZXItPmxlYWRlcl9waWQgPSBJbnZhbGlkUGlkOworCXdvcmtl ci0+bGVhZGVyX3BncHJvY25vID0gSU5WQUxJRF9QUk9DX05VTUJFUjsKIAl3b3JrZXItPnBh cmFsbGVsX2FwcGx5ID0gZmFsc2U7CiB9CiAKQEAgLTg1OCw3ICs4NjMsNyBAQCBsb2dpY2Fs cmVwX3dvcmtlcl9jbGVhbnVwKExvZ2ljYWxSZXBXb3JrZXIgKndvcmtlcikKIHN0YXRpYyB2 b2lkCiBsb2dpY2FscmVwX2xhdW5jaGVyX29uZXhpdChpbnQgY29kZSwgRGF0dW0gYXJnKQog ewotCUxvZ2ljYWxSZXBDdHgtPmxhdW5jaGVyX3BpZCA9IDA7CisJTG9naWNhbFJlcEN0eC0+ bGF1bmNoZXJfcHJvY25vID0gSU5WQUxJRF9QUk9DX05VTUJFUjsKIH0KIAogLyoKQEAgLTEw MTksNyArMTAyNCw2IEBAIEFwcGx5TGF1bmNoZXJSZWdpc3Rlcih2b2lkKQogCXNucHJpbnRm KGJndy5iZ3dfdHlwZSwgQkdXX01BWExFTiwKIAkJCSAibG9naWNhbCByZXBsaWNhdGlvbiBs YXVuY2hlciIpOwogCWJndy5iZ3dfcmVzdGFydF90aW1lID0gNTsKLQliZ3cuYmd3X25vdGlm eV9waWQgPSAwOwogCWJndy5iZ3dfbWFpbl9hcmcgPSAoRGF0dW0pIDA7CiAKIAlSZWdpc3Rl ckJhY2tncm91bmRXb3JrZXIoJmJndyk7CkBAIC0xMDQ1LDYgKzEwNDksNyBAQCBBcHBseUxh dW5jaGVyU2htZW1Jbml0KHZvaWQpCiAKIAkJbWVtc2V0KExvZ2ljYWxSZXBDdHgsIDAsIEFw cGx5TGF1bmNoZXJTaG1lbVNpemUoKSk7CiAKKwkJTG9naWNhbFJlcEN0eC0+bGF1bmNoZXJf cHJvY25vID0gSU5WQUxJRF9QUk9DX05VTUJFUjsKIAkJTG9naWNhbFJlcEN0eC0+bGFzdF9z dGFydF9kc2EgPSBEU0FfSEFORExFX0lOVkFMSUQ7CiAJCUxvZ2ljYWxSZXBDdHgtPmxhc3Rf c3RhcnRfZHNoID0gRFNIQVNIX0hBTkRMRV9JTlZBTElEOwogCkBAIC0xMTkzLDggKzExOTgs MTIgQEAgQXBwbHlMYXVuY2hlcldha2V1cEF0Q29tbWl0KHZvaWQpCiB2b2lkCiBBcHBseUxh dW5jaGVyV2FrZXVwKHZvaWQpCiB7Ci0JaWYgKExvZ2ljYWxSZXBDdHgtPmxhdW5jaGVyX3Bp ZCAhPSAwKQotCQlraWxsKExvZ2ljYWxSZXBDdHgtPmxhdW5jaGVyX3BpZCwgU0lHVVNSMSk7 CisJdm9sYXRpbGUgTG9naWNhbFJlcEN0eFN0cnVjdCAqcmVwY3R4ID0gTG9naWNhbFJlcEN0 eDsKKwlQcm9jTnVtYmVyCWxhdW5jaGVyX3Byb2NubzsKKworCWxhdW5jaGVyX3Byb2NubyA9 IHJlcGN0eC0+bGF1bmNoZXJfcHJvY25vOworCWlmIChsYXVuY2hlcl9wcm9jbm8gIT0gSU5W QUxJRF9QUk9DX05VTUJFUikKKwkJU2VuZEludGVycnVwdChJTlRFUlJVUFRfU1VCU0NSSVBU SU9OX0NIQU5HRSwgbGF1bmNoZXJfcHJvY25vKTsKIH0KIAogLyoKQEAgLTEyMDgsMTQgKzEy MTcsMTYgQEAgQXBwbHlMYXVuY2hlck1haW4oRGF0dW0gbWFpbl9hcmcpCiAKIAliZWZvcmVf c2htZW1fZXhpdChsb2dpY2FscmVwX2xhdW5jaGVyX29uZXhpdCwgKERhdHVtKSAwKTsKIAot CUFzc2VydChMb2dpY2FsUmVwQ3R4LT5sYXVuY2hlcl9waWQgPT0gMCk7Ci0JTG9naWNhbFJl cEN0eC0+bGF1bmNoZXJfcGlkID0gTXlQcm9jUGlkOworCUFzc2VydChMb2dpY2FsUmVwQ3R4 LT5sYXVuY2hlcl9wcm9jbm8gPT0gSU5WQUxJRF9QUk9DX05VTUJFUik7CisJTG9naWNhbFJl cEN0eC0+bGF1bmNoZXJfcHJvY25vID0gTXlQcm9jTnVtYmVyOwogCi0JLyogRXN0YWJsaXNo IHNpZ25hbCBoYW5kbGVycy4gKi8KLQlwcXNpZ25hbChTSUdIVVAsIFNpZ25hbEhhbmRsZXJG b3JDb25maWdSZWxvYWQpOwotCXBxc2lnbmFsKFNJR1RFUk0sIGRpZSk7CisJLyogRXN0YWJs aXNoIGludGVycnVwdCBoYW5kbGVycy4gKi8KIAlCYWNrZ3JvdW5kV29ya2VyVW5ibG9ja1Np Z25hbHMoKTsKIAorCVNldFN0YW5kYXJkSW50ZXJydXB0SGFuZGxlcnMoKTsKKwlTZXRJbnRl cnJ1cHRIYW5kbGVyKElOVEVSUlVQVF9RVUVSWV9DQU5DRUwsIFByb2Nlc3NRdWVyeUNhbmNl bEludGVycnVwdCk7CisJRW5hYmxlSW50ZXJydXB0KElOVEVSUlVQVF9RVUVSWV9DQU5DRUwp OworCiAJLyoKIAkgKiBFc3RhYmxpc2ggY29ubmVjdGlvbiB0byBuYWlsZWQgY2F0YWxvZ3Mg KHdlIG9ubHkgZXZlciBhY2Nlc3MKIAkgKiBwZ19zdWJzY3JpcHRpb24pLgpAQCAtMTI1Nyw2 ICsxMjY4LDcgQEAgQXBwbHlMYXVuY2hlck1haW4oRGF0dW0gbWFpbl9hcmcpCiAJCSAqIGRl dGVjdGlvbiBpZiBvbmUgb2YgdGhlIHN1YnNjcmlwdGlvbiBlbmFibGVzIHJldGFpbl9kZWFk X3R1cGxlcwogCQkgKiBvcHRpb24uCiAJCSAqLworCQlDbGVhckludGVycnVwdChJTlRFUlJV UFRfU1VCU0NSSVBUSU9OX0NIQU5HRSk7CiAJCXN1Ymxpc3QgPSBnZXRfc3Vic2NyaXB0aW9u X2xpc3QoKTsKIAkJZm9yZWFjaChsYywgc3VibGlzdCkKIAkJewpAQCAtMTQxNywyMSArMTQy OSwxOSBAQCBBcHBseUxhdW5jaGVyTWFpbihEYXR1bSBtYWluX2FyZykKIAkJTWVtb3J5Q29u dGV4dERlbGV0ZShzdWJjdHgpOwogCiAJCS8qIFdhaXQgZm9yIG1vcmUgd29yay4gKi8KLQkJ cmMgPSBXYWl0TGF0Y2goTXlMYXRjaCwKLQkJCQkJICAgV0xfTEFUQ0hfU0VUIHwgV0xfVElN RU9VVCB8IFdMX0VYSVRfT05fUE1fREVBVEgsCi0JCQkJCSAgIHdhaXRfdGltZSwKLQkJCQkJ ICAgV0FJVF9FVkVOVF9MT0dJQ0FMX0xBVU5DSEVSX01BSU4pOwotCi0JCWlmIChyYyAmIFdM X0xBVENIX1NFVCkKKwkJcmMgPSBXYWl0SW50ZXJydXB0KENoZWNrRm9ySW50ZXJydXB0c01h c2sgfAorCQkJCQkJICAgSU5URVJSVVBUX0NPTkZJR19SRUxPQUQgfAorCQkJCQkJICAgSU5U RVJSVVBUX1NVQlNDUklQVElPTl9DSEFOR0UsCisJCQkJCQkgICBXTF9JTlRFUlJVUFQgfCBX TF9USU1FT1VUIHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwKKwkJCQkJCSAgIHdhaXRfdGltZSwK KwkJCQkJCSAgIFdBSVRfRVZFTlRfTE9HSUNBTF9MQVVOQ0hFUl9NQUlOKTsKKworCQlpZiAo cmMgJiBXTF9JTlRFUlJVUFQpCiAJCXsKLQkJCVJlc2V0TGF0Y2goTXlMYXRjaCk7CiAJCQlD SEVDS19GT1JfSU5URVJSVVBUUygpOwotCQl9CiAKLQkJaWYgKENvbmZpZ1JlbG9hZFBlbmRp bmcpCi0JCXsKLQkJCUNvbmZpZ1JlbG9hZFBlbmRpbmcgPSBmYWxzZTsKLQkJCVByb2Nlc3ND b25maWdGaWxlKFBHQ19TSUdIVVApOworCQkJaWYgKENvbnN1bWVJbnRlcnJ1cHQoSU5URVJS VVBUX0NPTkZJR19SRUxPQUQpKQorCQkJCVByb2Nlc3NDb25maWdGaWxlKFBHQ19TSUdIVVAp OwogCQl9CiAJfQogCkBAIC0xNTg2LDcgKzE1OTYsNyBAQCBDcmVhdGVDb25mbGljdERldGVj dGlvblNsb3Qodm9pZCkKIGJvb2wKIElzTG9naWNhbExhdW5jaGVyKHZvaWQpCiB7Ci0JcmV0 dXJuIExvZ2ljYWxSZXBDdHgtPmxhdW5jaGVyX3BpZCA9PSBNeVByb2NQaWQ7CisJcmV0dXJu IExvZ2ljYWxSZXBDdHgtPmxhdW5jaGVyX3Byb2NubyA9PSBNeVByb2NOdW1iZXI7CiB9CiAK IC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3NlcXVl bmNlc3luYy5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9zZXF1ZW5jZXN5 bmMuYwppbmRleCAxNjVmOTA5YjNiYS4uOTJjOTAzZDdmOTYgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvc2VxdWVuY2VzeW5jLmMKKysrIGIvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9zZXF1ZW5jZXN5bmMuYwpAQCAtNTcsNyArNTcs NiBAQAogI2luY2x1ZGUgImNhdGFsb2cvcGdfc3Vic2NyaXB0aW9uX3JlbC5oIgogI2luY2x1 ZGUgImNvbW1hbmRzL3NlcXVlbmNlLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCi0jaW5jbHVk ZSAicG9zdG1hc3Rlci9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dp Y2Fsd29ya2VyLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmgi CiAjaW5jbHVkZSAidXRpbHMvYWNsLmgiCkBAIC00OTQsMTEgKzQ5Myw4IEBAIGNvcHlfc2Vx dWVuY2VzKFdhbFJlY2VpdmVyQ29ubiAqY29ubikKIAogCQkJQ0hFQ0tfRk9SX0lOVEVSUlVQ VFMoKTsKIAotCQkJaWYgKENvbmZpZ1JlbG9hZFBlbmRpbmcpCi0JCQl7Ci0JCQkJQ29uZmln UmVsb2FkUGVuZGluZyA9IGZhbHNlOworCQkJaWYgKENvbnN1bWVJbnRlcnJ1cHQoSU5URVJS VVBUX0NPTkZJR19SRUxPQUQpKQogCQkJCVByb2Nlc3NDb25maWdGaWxlKFBHQ19TSUdIVVAp OwotCQkJfQogCiAJCQlzeW5jX3N0YXR1cyA9IGdldF9hbmRfdmFsaWRhdGVfc2VxX2luZm8o c2xvdCwgJnNlcXVlbmNlX3JlbCwKIAkJCQkJCQkJCQkJCQkmc2VxaW5mbywgJnNlcWlkeCk7 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Nsb3RzeW5j LmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Nsb3RzeW5jLmMKaW5kZXgg NWZmZTE3N2Y5NDAuLjM5YTc5ZDRlZWFiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL3Nsb3RzeW5jLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9zbG90c3luYy5jCkBAIC01OSw5ICs1OSwxMCBAQAogI2luY2x1ZGUgImFj Y2Vzcy94bG9nX2ludGVybmFsLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2dyZWNvdmVyeS5o IgogI2luY2x1ZGUgImNhdGFsb2cvcGdfZGF0YWJhc2UuaCIKKyNpbmNsdWRlICJpcGMvaW50 ZXJydXB0LmgiCisjaW5jbHVkZSAiaXBjL3NpZ25hbF9oYW5kbGVycy5oIgogI2luY2x1ZGUg ImxpYnBxL3Bxc2lnbmFsLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCi0jaW5jbHVkZSAicG9z dG1hc3Rlci9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2FsLmgi CiAjaW5jbHVkZSAicmVwbGljYXRpb24vc2xvdHN5bmMuaCIKICNpbmNsdWRlICJyZXBsaWNh dGlvbi9zbmFwYnVpbGQuaCIKQEAgLTc5LDkgKzgwLDkgQEAKIC8qCiAgKiBTdHJ1Y3QgZm9y IHNoYXJpbmcgaW5mb3JtYXRpb24gdG8gY29udHJvbCBzbG90IHN5bmNocm9uaXphdGlvbi4K ICAqCi0gKiBUaGUgJ3BpZCcgaXMgZWl0aGVyIHRoZSBzbG90IHN5bmMgd29ya2VyJ3MgcGlk IG9yIHRoZSBiYWNrZW5kJ3MgcGlkIHJ1bm5pbmcKKyAqIFRoZSAncHJvY25vJyBpcyBlaXRo ZXIgdGhlIHNsb3Qgc3luYyB3b3JrZXIncyBwcm9jbm8gb3IgdGhlIGJhY2tlbmQncyBwcm9j bm8gcnVubmluZwogICogdGhlIFNRTCBmdW5jdGlvbiBwZ19zeW5jX3JlcGxpY2F0aW9uX3Ns b3RzKCkuIFdoZW4gdGhlIHN0YXJ0dXAgcHJvY2VzcyBzZXRzCi0gKiAnc3RvcFNpZ25hbGVk JyBkdXJpbmcgcHJvbW90aW9uLCBpdCB1c2VzIHRoaXMgJ3BpZCcgdG8gd2FrZSB1cCB0aGUg Y3VycmVudGx5CisgKiAnc3RvcFNpZ25hbGVkJyBkdXJpbmcgcHJvbW90aW9uLCBpdCB1c2Vz IHRoaXMgJ3Byb2NubycgdG8gd2FrZSB1cCB0aGUgY3VycmVudGx5CiAgKiBzeW5jaHJvbml6 aW5nIHByb2Nlc3Mgc28gdGhhdCB0aGUgcHJvY2VzcyBjYW4gaW1tZWRpYXRlbHkgc3RvcCBp dHMKICAqIHN5bmNocm9uaXppbmcgd29yayBvbiBzZWVpbmcgJ3N0b3BTaWduYWxlZCcgc2V0 LgogICogU2V0dGluZyAnc3RvcFNpZ25hbGVkJyBpcyBhbHNvIHVzZWQgdG8gaGFuZGxlIHRo ZSByYWNlIGNvbmRpdGlvbiB3aGVuIHRoZQpAQCAtMTA0LDcgKzEwNSw3IEBACiAgKi8KIHR5 cGVkZWYgc3RydWN0IFNsb3RTeW5jQ3R4U3RydWN0CiB7Ci0JcGlkX3QJCXBpZDsKKwlQcm9j TnVtYmVyCXByb2NubzsKIAlib29sCQlzdG9wU2lnbmFsZWQ7CiAJYm9vbAkJc3luY2luZzsK IAl0aW1lX3QJCWxhc3Rfc3RhcnRfdGltZTsKQEAgLTEyODQsNyArMTI4NSw3IEBAIHNsb3Rz eW5jX3JlcmVhZF9jb25maWcodm9pZCkKIAlpZiAoaXNfc2xvdHN5bmNfd29ya2VyKQogCQlB c3NlcnQoc3luY19yZXBsaWNhdGlvbl9zbG90cyk7CiAKLQlDb25maWdSZWxvYWRQZW5kaW5n ID0gZmFsc2U7CisJQ2xlYXJJbnRlcnJ1cHQoSU5URVJSVVBUX0NPTkZJR19SRUxPQUQpOwog CVByb2Nlc3NDb25maWdGaWxlKFBHQ19TSUdIVVApOwogCiAJY29ubmluZm9fY2hhbmdlZCA9 IHN0cmNtcChvbGRfcHJpbWFyeV9jb25uaW5mbywgUHJpbWFyeUNvbm5JbmZvKSAhPSAwOwpA QCAtMTM0NywxMyArMTM0OCwxNCBAQCBzbG90c3luY19yZXJlYWRfY29uZmlnKHZvaWQpCiB9 CiAKIC8qCi0gKiBJbnRlcnJ1cHQgaGFuZGxlciBmb3IgcHJvY2VzcyBwZXJmb3JtaW5nIHNs b3Qgc3luY2hyb25pemF0aW9uLgorICogQ2hlY2sgZm9yIGludGVycnVwdHMgd2hpbGUgcGVy Zm9ybWluZyBzbG90IHN5bmNocm9uaXphdGlvbi4KKyAqCisgKiBUaGlzIGRvZXMgQ0hFQ0tf Rk9SX0lOVEVSUlVQVFMoKSwgYnV0IGFsc28gY2hlY2tzIGZvcgorICogSU5URVJSVVBUX0NP TkZJR19SRUxPQUQgYW5kIGNoZWNrcyBmb3IgJ3N0b3BTaWduYWxlZCcuCiAgKi8KIHN0YXRp YyB2b2lkCiBQcm9jZXNzU2xvdFN5bmNJbnRlcnJ1cHRzKHZvaWQpCiB7Ci0JQ0hFQ0tfRk9S X0lOVEVSUlVQVFMoKTsKLQogCWlmIChTbG90U3luY0N0eC0+c3RvcFNpZ25hbGVkKQogCXsK IAkJaWYgKEFtTG9naWNhbFNsb3RTeW5jV29ya2VyUHJvY2VzcygpKQpAQCAtMTM3NSw3ICsx Mzc3LDkgQEAgUHJvY2Vzc1Nsb3RTeW5jSW50ZXJydXB0cyh2b2lkKQogCQl9CiAJfQogCi0J aWYgKENvbmZpZ1JlbG9hZFBlbmRpbmcpCisJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKwor CWlmIChJbnRlcnJ1cHRQZW5kaW5nKElOVEVSUlVQVF9DT05GSUdfUkVMT0FEKSkKIAkJc2xv dHN5bmNfcmVyZWFkX2NvbmZpZygpOwogfQogCkBAIC0xNDE5LDcgKzE0MjMsNyBAQCBzbG90 c3luY193b3JrZXJfb25leGl0KGludCBjb2RlLCBEYXR1bSBhcmcpCiAKIAlTcGluTG9ja0Fj cXVpcmUoJlNsb3RTeW5jQ3R4LT5tdXRleCk7CiAKLQlTbG90U3luY0N0eC0+cGlkID0gSW52 YWxpZFBpZDsKKwlTbG90U3luY0N0eC0+cHJvY25vID0gSU5WQUxJRF9QUk9DX05VTUJFUjsK IAogCS8qCiAJICogSWYgc3luY2luZ19zbG90cyBpcyB0cnVlLCBpdCBpbmRpY2F0ZXMgdGhh dCB0aGUgcHJvY2VzcyBlcnJvcmVkIG91dApAQCAtMTQ2NSwxMyArMTQ2OSwxNiBAQCB3YWl0 X2Zvcl9zbG90X2FjdGl2aXR5KGJvb2wgc29tZV9zbG90X3VwZGF0ZWQpCiAJCXNsZWVwX21z ID0gTUlOX1NMT1RTWU5DX1dPUktFUl9OQVBUSU1FX01TOwogCX0KIAotCXJjID0gV2FpdExh dGNoKE15TGF0Y2gsCi0JCQkJICAgV0xfTEFUQ0hfU0VUIHwgV0xfVElNRU9VVCB8IFdMX0VY SVRfT05fUE1fREVBVEgsCi0JCQkJICAgc2xlZXBfbXMsCi0JCQkJICAgV0FJVF9FVkVOVF9S RVBMSUNBVElPTl9TTE9UU1lOQ19NQUlOKTsKKwkvKiBXYWl0IGZvciB0aGUgaW50ZXJydXB0 cyB0aGF0IFByb2Nlc3NTbG90U3luY0ludGVycnVwdHMoKSB3aWxsIGhhbmRsZSAqLworCXJj ID0gV2FpdEludGVycnVwdChDaGVja0ZvckludGVycnVwdHNNYXNrIHwKKwkJCQkJICAgSU5U RVJSVVBUX1dBSVRfV0FLRVVQIHwKKwkJCQkJICAgSU5URVJSVVBUX0NPTkZJR19SRUxPQUQs CisJCQkJCSAgIFdMX0lOVEVSUlVQVCB8IFdMX1RJTUVPVVQgfCBXTF9FWElUX09OX1BNX0RF QVRILAorCQkJCQkgICBzbGVlcF9tcywKKwkJCQkJICAgV0FJVF9FVkVOVF9SRVBMSUNBVElP Tl9TTE9UU1lOQ19NQUlOKTsKIAotCWlmIChyYyAmIFdMX0xBVENIX1NFVCkKLQkJUmVzZXRM YXRjaChNeUxhdGNoKTsKKwlpZiAocmMgJiBXTF9JTlRFUlJVUFQpCisJCUNsZWFySW50ZXJy dXB0KElOVEVSUlVQVF9XQUlUX1dBS0VVUCk7CiB9CiAKIC8qCkBAIC0xNDc5LDcgKzE0ODYs NyBAQCB3YWl0X2Zvcl9zbG90X2FjdGl2aXR5KGJvb2wgc29tZV9zbG90X3VwZGF0ZWQpCiAg KiBPdGhlcndpc2UsIGFkdmVydGlzZSB0aGF0IGEgc3luYyBpcyBpbiBwcm9ncmVzcy4KICAq Lwogc3RhdGljIHZvaWQKLWNoZWNrX2FuZF9zZXRfc3luY19pbmZvKHBpZF90IHN5bmNfcHJv Y2Vzc19waWQpCitjaGVja19hbmRfc2V0X3N5bmNfaW5mbyhQcm9jTnVtYmVyIHN5bmNfcHJv Y2Vzc19wcm9jbm8pCiB7CiAJU3BpbkxvY2tBY3F1aXJlKCZTbG90U3luY0N0eC0+bXV0ZXgp OwogCkBAIC0xNDkxLDE2ICsxNDk4LDE2IEBAIGNoZWNrX2FuZF9zZXRfc3luY19pbmZvKHBp ZF90IHN5bmNfcHJvY2Vzc19waWQpCiAJCQkJZXJybXNnKCJjYW5ub3Qgc3luY2hyb25pemUg cmVwbGljYXRpb24gc2xvdHMgY29uY3VycmVudGx5IikpOwogCX0KIAotCS8qIFRoZSBwaWQg bXVzdCBub3QgYmUgYWxyZWFkeSBhc3NpZ25lZCBpbiBTbG90U3luY0N0eCAqLwotCUFzc2Vy dChTbG90U3luY0N0eC0+cGlkID09IEludmFsaWRQaWQpOworCS8qIFRoZSBwcm9jbm8gbXVz dCBub3QgYmUgYWxyZWFkeSBhc3NpZ25lZCBpbiBTbG90U3luY0N0eCAqLworCUFzc2VydChT bG90U3luY0N0eC0+cHJvY25vID09IElOVkFMSURfUFJPQ19OVU1CRVIpOwogCiAJU2xvdFN5 bmNDdHgtPnN5bmNpbmcgPSB0cnVlOwogCiAJLyoKLQkgKiBBZHZlcnRpc2UgdGhlIHJlcXVp cmVkIFBJRCBzbyB0aGF0IHRoZSBzdGFydHVwIHByb2Nlc3MgY2FuIGtpbGwgdGhlCi0JICog c2xvdCBzeW5jIHByb2Nlc3Mgb24gcHJvbW90aW9uLgorCSAqIEFkdmVydGlzZSB0aGUgcmVx dWlyZWQgcHJvYyBudW1iZXIgc28gdGhhdCB0aGUgc3RhcnR1cCBwcm9jZXNzIGNhbiBraWxs CisJICogdGhlIHNsb3Qgc3luYyBwcm9jZXNzIG9uIHByb21vdGlvbi4KIAkgKi8KLQlTbG90 U3luY0N0eC0+cGlkID0gc3luY19wcm9jZXNzX3BpZDsKKwlTbG90U3luY0N0eC0+cHJvY25v ID0gc3luY19wcm9jZXNzX3Byb2NubzsKIAogCVNwaW5Mb2NrUmVsZWFzZSgmU2xvdFN5bmND dHgtPm11dGV4KTsKIApAQCAtMTUxNSw3ICsxNTIyLDcgQEAgcmVzZXRfc3luY2luZ19mbGFn KHZvaWQpCiB7CiAJU3BpbkxvY2tBY3F1aXJlKCZTbG90U3luY0N0eC0+bXV0ZXgpOwogCVNs b3RTeW5jQ3R4LT5zeW5jaW5nID0gZmFsc2U7Ci0JU2xvdFN5bmNDdHgtPnBpZCA9IEludmFs aWRQaWQ7CisJU2xvdFN5bmNDdHgtPnByb2NubyA9IElOVkFMSURfUFJPQ19OVU1CRVI7CiAJ U3BpbkxvY2tSZWxlYXNlKCZTbG90U3luY0N0eC0+bXV0ZXgpOwogCiAJc3luY2luZ19zbG90 cyA9IGZhbHNlOwpAQCAtMTU5MiwxOSArMTU5OSwxNSBAQCBSZXBsU2xvdFN5bmNXb3JrZXJN YWluKGNvbnN0IHZvaWQgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4p CiAJUEdfZXhjZXB0aW9uX3N0YWNrID0gJmxvY2FsX3NpZ2ptcF9idWY7CiAKIAkvKiBTZXR1 cCBzaWduYWwgaGFuZGxpbmcgKi8KLQlwcXNpZ25hbChTSUdIVVAsIFNpZ25hbEhhbmRsZXJG b3JDb25maWdSZWxvYWQpOwotCXBxc2lnbmFsKFNJR0lOVCwgU3RhdGVtZW50Q2FuY2VsSGFu ZGxlcik7Ci0JcHFzaWduYWwoU0lHVEVSTSwgZGllKTsKIAlwcXNpZ25hbChTSUdGUEUsIEZs b2F0RXhjZXB0aW9uSGFuZGxlcik7Ci0JcHFzaWduYWwoU0lHVVNSMSwgcHJvY3NpZ25hbF9z aWd1c3IxX2hhbmRsZXIpOwotCXBxc2lnbmFsKFNJR1VTUjIsIFNJR19JR04pOwotCXBxc2ln bmFsKFNJR1BJUEUsIFNJR19JR04pOwogCi0JY2hlY2tfYW5kX3NldF9zeW5jX2luZm8oTXlQ cm9jUGlkKTsKKwlTZXRTdGFuZGFyZEludGVycnVwdEhhbmRsZXJzKCk7CisKKwljaGVja19h bmRfc2V0X3N5bmNfaW5mbyhNeVByb2NOdW1iZXIpOwogCiAJZXJlcG9ydChMT0csIGVycm1z Zygic2xvdCBzeW5jIHdvcmtlciBzdGFydGVkIikpOwogCi0JLyogUmVnaXN0ZXIgaXQgYXMg c29vbiBhcyBTbG90U3luY0N0eC0+cGlkIGlzIGluaXRpYWxpemVkLiAqLworCS8qIFJlZ2lz dGVyIGl0IGFzIHNvb24gYXMgU2xvdFN5bmNDdHgtPnByb2NubyBpcyBpbml0aWFsaXplZC4g Ki8KIAliZWZvcmVfc2htZW1fZXhpdChzbG90c3luY193b3JrZXJfb25leGl0LCAoRGF0dW0p IDApOwogCiAJLyoKQEAgLTE3NDQsNyArMTc0Nyw3IEBAIHVwZGF0ZV9zeW5jZWRfc2xvdHNf aW5hY3RpdmVfc2luY2Uodm9pZCkKIAkJcmV0dXJuOwogCiAJLyogVGhlIHNsb3Qgc3luYyB3 b3JrZXIgb3IgdGhlIFNRTCBmdW5jdGlvbiBtdXN0bid0IGJlIHJ1bm5pbmcgYnkgbm93ICov Ci0JQXNzZXJ0KChTbG90U3luY0N0eC0+cGlkID09IEludmFsaWRQaWQpICYmICFTbG90U3lu Y0N0eC0+c3luY2luZyk7CisJQXNzZXJ0KChTbG90U3luY0N0eC0+cHJvY25vID09IElOVkFM SURfUFJPQ19OVU1CRVIpICYmICFTbG90U3luY0N0eC0+c3luY2luZyk7CiAKIAlMV0xvY2tB Y3F1aXJlKFJlcGxpY2F0aW9uU2xvdENvbnRyb2xMb2NrLCBMV19TSEFSRUQpOwogCkBAIC0x NzgzLDcgKzE3ODYsNyBAQCB1cGRhdGVfc3luY2VkX3Nsb3RzX2luYWN0aXZlX3NpbmNlKHZv aWQpCiB2b2lkCiBTaHV0RG93blNsb3RTeW5jKHZvaWQpCiB7Ci0JcGlkX3QJCXN5bmNfcHJv Y2Vzc19waWQ7CisJUHJvY051bWJlcglzeW5jX3Byb2Nlc3NfcHJvY25vOwogCiAJU3Bpbkxv Y2tBY3F1aXJlKCZTbG90U3luY0N0eC0+bXV0ZXgpOwogCkBAIC0xODAwLDcgKzE4MDMsNyBA QCBTaHV0RG93blNsb3RTeW5jKHZvaWQpCiAJCXJldHVybjsKIAl9CiAKLQlzeW5jX3Byb2Nl c3NfcGlkID0gU2xvdFN5bmNDdHgtPnBpZDsKKwlzeW5jX3Byb2Nlc3NfcHJvY25vID0gU2xv dFN5bmNDdHgtPnByb2NubzsKIAogCVNwaW5Mb2NrUmVsZWFzZSgmU2xvdFN5bmNDdHgtPm11 dGV4KTsKIApAQCAtMTgwOCw4ICsxODExLDggQEAgU2h1dERvd25TbG90U3luYyh2b2lkKQog CSAqIFNpZ25hbCBwcm9jZXNzIGRvaW5nIHNsb3RzeW5jLCBpZiBhbnkuIFRoZSBwcm9jZXNz IHdpbGwgc3RvcCB1cG9uCiAJICogZGV0ZWN0aW5nIHRoYXQgdGhlIHN0b3BTaWduYWxlZCBm bGFnIGlzIHNldCB0byB0cnVlLgogCSAqLwotCWlmIChzeW5jX3Byb2Nlc3NfcGlkICE9IElu dmFsaWRQaWQpCi0JCWtpbGwoc3luY19wcm9jZXNzX3BpZCwgU0lHVVNSMSk7CisJaWYgKHN5 bmNfcHJvY2Vzc19wcm9jbm8gIT0gSU5WQUxJRF9QUk9DX05VTUJFUikKKwkJU2VuZEludGVy cnVwdChJTlRFUlJVUFRfV0FJVF9XQUtFVVAsIHN5bmNfcHJvY2Vzc19wcm9jbm8pOwogCiAJ LyogV2FpdCBmb3Igc2xvdCBzeW5jIHRvIGVuZCAqLwogCWZvciAoOzspCkBAIC0xODE3LDEz ICsxODIwLDE0IEBAIFNodXREb3duU2xvdFN5bmModm9pZCkKIAkJaW50CQkJcmM7CiAKIAkJ LyogV2FpdCBhIGJpdCwgd2UgZG9uJ3QgZXhwZWN0IHRvIGhhdmUgdG8gd2FpdCBsb25nICov Ci0JCXJjID0gV2FpdExhdGNoKE15TGF0Y2gsCi0JCQkJCSAgIFdMX0xBVENIX1NFVCB8IFdM X1RJTUVPVVQgfCBXTF9FWElUX09OX1BNX0RFQVRILAotCQkJCQkgICAxMEwsIFdBSVRfRVZF TlRfUkVQTElDQVRJT05fU0xPVFNZTkNfU0hVVERPV04pOworCQlyYyA9IFdhaXRJbnRlcnJ1 cHQoQ2hlY2tGb3JJbnRlcnJ1cHRzTWFzayB8CisJCQkJCQkgICBJTlRFUlJVUFRfV0FJVF9X QUtFVVAsCisJCQkJCQkgICBXTF9JTlRFUlJVUFQgfCBXTF9USU1FT1VUIHwgV0xfRVhJVF9P Tl9QTV9ERUFUSCwKKwkJCQkJCSAgIDEwTCwgV0FJVF9FVkVOVF9SRVBMSUNBVElPTl9TTE9U U1lOQ19TSFVURE9XTik7CiAKLQkJaWYgKHJjICYgV0xfTEFUQ0hfU0VUKQorCQlpZiAocmMg JiBXTF9JTlRFUlJVUFQpCiAJCXsKLQkJCVJlc2V0TGF0Y2goTXlMYXRjaCk7CisJCQlDbGVh ckludGVycnVwdChJTlRFUlJVUFRfV0FJVF9XQUtFVVApOwogCQkJQ0hFQ0tfRk9SX0lOVEVS UlVQVFMoKTsKIAkJfQogCkBAIC0xOTA4LDcgKzE5MTIsNyBAQCBTbG90U3luY1NobWVtSW5p dCh2b2lkKQogCWlmICghZm91bmQpCiAJewogCQltZW1zZXQoU2xvdFN5bmNDdHgsIDAsIHNp emUpOwotCQlTbG90U3luY0N0eC0+cGlkID0gSW52YWxpZFBpZDsKKwkJU2xvdFN5bmNDdHgt PnByb2NubyA9IElOVkFMSURfUFJPQ19OVU1CRVI7CiAJCVNwaW5Mb2NrSW5pdCgmU2xvdFN5 bmNDdHgtPm11dGV4KTsKIAl9CiB9CkBAIC0xOTg2LDcgKzE5OTAsNyBAQCBTeW5jUmVwbGlj YXRpb25TbG90cyhXYWxSZWNlaXZlckNvbm4gKndyY29ubikKIAkJTGlzdAkgICAqcmVtb3Rl X3Nsb3RzID0gTklMOwogCQlMaXN0CSAgICpzbG90X25hbWVzID0gTklMOwkvKiBMaXN0IG9m IHNsb3QgbmFtZXMgdG8gdHJhY2sgKi8KIAotCQljaGVja19hbmRfc2V0X3N5bmNfaW5mbyhN eVByb2NQaWQpOworCQljaGVja19hbmRfc2V0X3N5bmNfaW5mbyhNeVByb2NOdW1iZXIpOwog CiAJCS8qIENoZWNrIGZvciBpbnRlcnJ1cHRzIGFuZCBjb25maWcgY2hhbmdlcyAqLwogCQlQ cm9jZXNzU2xvdFN5bmNJbnRlcnJ1cHRzKCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC90YWJsZXN5bmMuYwppbmRleCAxOWEzYzIxYTg2My4uMWNlZjlhNDk5ZTYg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5j LmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC90YWJsZXN5bmMuYwpA QCAtMTAwLDYgKzEwMCw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19zdWJzY3JpcHRpb25f cmVsLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCiAjaW5jbHVkZSAiY29tbWFu ZHMvY29weS5oIgorI2luY2x1ZGUgImlwYy9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJtaXNj YWRtaW4uaCIKICNpbmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKICNpbmNsdWRlICJwYXJz ZXIvcGFyc2VfcmVsYXRpb24uaCIKQEAgLTE2NywxMSArMTY4LDEyIEBAIHdhaXRfZm9yX3Rh YmxlX3N0YXRlX2NoYW5nZShPaWQgcmVsaWQsIGNoYXIgZXhwZWN0ZWRfc3RhdGUpCiAJCWlm ICghd29ya2VyKQogCQkJYnJlYWs7CiAKLQkJKHZvaWQpIFdhaXRMYXRjaChNeUxhdGNoLAot CQkJCQkJIFdMX0xBVENIX1NFVCB8IFdMX1RJTUVPVVQgfCBXTF9FWElUX09OX1BNX0RFQVRI LAotCQkJCQkJIDEwMDBMLCBXQUlUX0VWRU5UX0xPR0lDQUxfU1lOQ19TVEFURV9DSEFOR0Up OworCQkodm9pZCkgV2FpdEludGVycnVwdChDaGVja0ZvckludGVycnVwdHNNYXNrIHwKKwkJ CQkJCQkgSU5URVJSVVBUX1dBSVRfV0FLRVVQLAorCQkJCQkJCSBXTF9JTlRFUlJVUFQgfCBX TF9USU1FT1VUIHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwKKwkJCQkJCQkgMTAwMEwsIFdBSVRf RVZFTlRfTE9HSUNBTF9TWU5DX1NUQVRFX0NIQU5HRSk7CiAKLQkJUmVzZXRMYXRjaChNeUxh dGNoKTsKKwkJQ2xlYXJJbnRlcnJ1cHQoSU5URVJSVVBUX1dBSVRfV0FLRVVQKTsKIAl9CiAK IAlyZXR1cm4gZmFsc2U7CkBAIC0yMTgsMTUgKzIyMCwxNiBAQCB3YWl0X2Zvcl93b3JrZXJf c3RhdGVfY2hhbmdlKGNoYXIgZXhwZWN0ZWRfc3RhdGUpCiAJCQlicmVhazsKIAogCQkvKgot CQkgKiBXYWl0LiAgV2UgZXhwZWN0IHRvIGdldCBhIGxhdGNoIHNpZ25hbCBiYWNrIGZyb20g dGhlIGFwcGx5IHdvcmtlciwKKwkJICogV2FpdC4gIFdlIGV4cGVjdCB0byBnZXQgYW4gaW50 ZXJydXB0IHdha2V1cCBmcm9tIHRoZSBhcHBseSB3b3JrZXIsCiAJCSAqIGJ1dCB1c2UgYSB0 aW1lb3V0IGluIGNhc2UgaXQgZGllcyB3aXRob3V0IHNlbmRpbmcgb25lLgogCQkgKi8KLQkJ cmMgPSBXYWl0TGF0Y2goTXlMYXRjaCwKLQkJCQkJICAgV0xfTEFUQ0hfU0VUIHwgV0xfVElN RU9VVCB8IFdMX0VYSVRfT05fUE1fREVBVEgsCi0JCQkJCSAgIDEwMDBMLCBXQUlUX0VWRU5U X0xPR0lDQUxfU1lOQ19TVEFURV9DSEFOR0UpOworCQlyYyA9IFdhaXRJbnRlcnJ1cHQoQ2hl Y2tGb3JJbnRlcnJ1cHRzTWFzayB8CisJCQkJCQkgICBJTlRFUlJVUFRfV0FJVF9XQUtFVVAs CisJCQkJCQkgICBXTF9JTlRFUlJVUFQgfCBXTF9USU1FT1VUIHwgV0xfRVhJVF9PTl9QTV9E RUFUSCwKKwkJCQkJCSAgIDEwMDBMLCBXQUlUX0VWRU5UX0xPR0lDQUxfU1lOQ19TVEFURV9D SEFOR0UpOwogCi0JCWlmIChyYyAmIFdMX0xBVENIX1NFVCkKLQkJCVJlc2V0TGF0Y2goTXlM YXRjaCk7CisJCWlmIChyYyAmIFdMX0lOVEVSUlVQVCkKKwkJCUNsZWFySW50ZXJydXB0KElO VEVSUlVQVF9XQUlUX1dBS0VVUCk7CiAJfQogCiAJcmV0dXJuIGZhbHNlOwpAQCAtNTE4LDcg KzUyMSw3IEBAIFByb2Nlc3NTeW5jaW5nVGFibGVzRm9yQXBwbHkoWExvZ1JlY1B0ciBjdXJy ZW50X2xzbikKIAkJCQkJCSAqIHRoZSBleGlzdGluZyBsb2NrcyBiZWZvcmUgZW50ZXJpbmcg YSBidXN5IGxvb3AuCiAJCQkJCQkgKiBUaGlzIGlzIHJlcXVpcmVkIHRvIGF2b2lkIGFueSB1 bmRldGVjdGVkIGRlYWRsb2NrcwogCQkJCQkJICogZHVlIHRvIGFueSBleGlzdGluZyBsb2Nr IGFzIGRlYWRsb2NrIGRldGVjdG9yIHdvbid0Ci0JCQkJCQkgKiBiZSBhYmxlIHRvIGRldGVj dCB0aGUgd2FpdHMgb24gdGhlIGxhdGNoLgorCQkJCQkJICogYmUgYWJsZSB0byBkZXRlY3Qg dGhlIHdhaXRzIG9uIHRoZSBpbnRlcnJ1cHQuCiAJCQkJCQkgKgogCQkJCQkJICogQWxzbyBj bG9zZSBhbnkgdGFibGVzIHByaW9yIHRvIHRoZSBjb21taXQuCiAJCQkJCQkgKi8KQEAgLTY5 NywxNCArNzAwLDEyIEBAIGNvcHlfcmVhZF9kYXRhKHZvaWQgKm91dGJ1ZiwgaW50IG1pbnJl YWQsIGludCBtYXhyZWFkKQogCQl9CiAKIAkJLyoKLQkJICogV2FpdCBmb3IgbW9yZSBkYXRh IG9yIGxhdGNoLgorCQkgKiBXYWl0IGZvciBtb3JlIGRhdGEgb3IgaW50ZXJydXB0LgogCQkg Ki8KLQkJKHZvaWQpIFdhaXRMYXRjaE9yU29ja2V0KE15TGF0Y2gsCi0JCQkJCQkJCSBXTF9T T0NLRVRfUkVBREFCTEUgfCBXTF9MQVRDSF9TRVQgfAotCQkJCQkJCQkgV0xfVElNRU9VVCB8 IFdMX0VYSVRfT05fUE1fREVBVEgsCi0JCQkJCQkJCSBmZCwgMTAwMEwsIFdBSVRfRVZFTlRf TE9HSUNBTF9TWU5DX0RBVEEpOwotCi0JCVJlc2V0TGF0Y2goTXlMYXRjaCk7CisJCSh2b2lk KSBXYWl0SW50ZXJydXB0T3JTb2NrZXQoQ2hlY2tGb3JJbnRlcnJ1cHRzTWFzaywKKwkJCQkJ CQkJCSBXTF9TT0NLRVRfUkVBREFCTEUgfCBXTF9JTlRFUlJVUFQgfAorCQkJCQkJCQkJIFdM X1RJTUVPVVQgfCBXTF9FWElUX09OX1BNX0RFQVRILAorCQkJCQkJCQkJIGZkLCAxMDAwTCwg V0FJVF9FVkVOVF9MT0dJQ0FMX1NZTkNfREFUQSk7CiAJfQogCiAJcmV0dXJuIGJ5dGVzcmVh ZDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2Vy LmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCmluZGV4IDMy NzI1YzQ4NjIzLi4yOWFkMmFjNGY5MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC93b3JrZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9s b2dpY2FsL3dvcmtlci5jCkBAIC0yNjEsMTMgKzI2MSwxNCBAQAogI2luY2x1ZGUgImNvbW1h bmRzL3RyaWdnZXIuaCIKICNpbmNsdWRlICJleGVjdXRvci9leGVjdXRvci5oIgogI2luY2x1 ZGUgImV4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uaCIKKyNpbmNsdWRlICJpcGMvaW50ZXJydXB0 LmgiCisjaW5jbHVkZSAiaXBjL3NpZ25hbF9oYW5kbGVycy5oIgogI2luY2x1ZGUgImxpYnBx L3BxZm9ybWF0LmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAib3B0aW1p emVyL29wdGltaXplci5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9yZWxhdGlvbi5oIgog I2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvYmd3b3JrZXIuaCIK LSNpbmNsdWRlICJwb3N0bWFzdGVyL2ludGVycnVwdC5oIgogI2luY2x1ZGUgInBvc3RtYXN0 ZXIvd2Fsd3JpdGVyLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vY29uZmxpY3QuaCIKICNp bmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2FsbGF1bmNoZXIuaCIKQEAgLTQwNTMsMTEgKzQw NTQsOCBAQCBMb2dpY2FsUmVwQXBwbHlMb29wKFhMb2dSZWNQdHIgbGFzdF9yZWNlaXZlZCkK IAkJCQkJaW50CQkJYzsKIAkJCQkJU3RyaW5nSW5mb0RhdGEgczsKIAotCQkJCQlpZiAoQ29u ZmlnUmVsb2FkUGVuZGluZykKLQkJCQkJewotCQkJCQkJQ29uZmlnUmVsb2FkUGVuZGluZyA9 IGZhbHNlOworCQkJCQlpZiAoQ29uc3VtZUludGVycnVwdChJTlRFUlJVUFRfQ09ORklHX1JF TE9BRCkpCiAJCQkJCQlQcm9jZXNzQ29uZmlnRmlsZShQR0NfU0lHSFVQKTsKLQkJCQkJfQog CiAJCQkJCS8qIFJlc2V0IHRpbWVvdXQuICovCiAJCQkJCWxhc3RfcmVjdl90aW1lc3RhbXAg PSBHZXRDdXJyZW50VGltZXN0YW1wKCk7CkBAIC00MTc2LDExICs0MTc0LDExIEBAIExvZ2lj YWxSZXBBcHBseUxvb3AoWExvZ1JlY1B0ciBsYXN0X3JlY2VpdmVkKQogCQkJYnJlYWs7CiAK IAkJLyoKLQkJICogV2FpdCBmb3IgbW9yZSBkYXRhIG9yIGxhdGNoLiAgSWYgd2UgaGF2ZSB1 bmZsdXNoZWQgdHJhbnNhY3Rpb25zLAotCQkgKiB3YWtlIHVwIGFmdGVyIFdhbFdyaXRlckRl bGF5IHRvIHNlZSBpZiB0aGV5J3ZlIGJlZW4gZmx1c2hlZCB5ZXQgKGluCi0JCSAqIHdoaWNo IGNhc2Ugd2Ugc2hvdWxkIHNlbmQgYSBmZWVkYmFjayBtZXNzYWdlKS4gIE90aGVyd2lzZSwg dGhlcmUncwotCQkgKiBubyBwYXJ0aWN1bGFyIHVyZ2VuY3kgYWJvdXQgd2FraW5nIHVwIHVu bGVzcyB3ZSBnZXQgZGF0YSBvciBhCi0JCSAqIHNpZ25hbC4KKwkJICogV2FpdCBmb3IgbW9y ZSBkYXRhIG9yIGludGVycnVwdC4gIElmIHdlIGhhdmUgdW5mbHVzaGVkCisJCSAqIHRyYW5z YWN0aW9ucywgd2FrZSB1cCBhZnRlciBXYWxXcml0ZXJEZWxheSB0byBzZWUgaWYgdGhleSd2 ZSBiZWVuCisJCSAqIGZsdXNoZWQgeWV0IChpbiB3aGljaCBjYXNlIHdlIHNob3VsZCBzZW5k IGEgZmVlZGJhY2sgbWVzc2FnZSkuCisJCSAqIE90aGVyd2lzZSwgdGhlcmUncyBubyBwYXJ0 aWN1bGFyIHVyZ2VuY3kgYWJvdXQgd2FraW5nIHVwIHVubGVzcyB3ZQorCQkgKiBnZXQgZGF0 YSBvciBhIHNpZ25hbC4KIAkJICovCiAJCWlmICghZGxpc3RfaXNfZW1wdHkoJmxzbl9tYXBw aW5nKSkKIAkJCXdhaXRfdGltZSA9IFdhbFdyaXRlckRlbGF5OwpAQCAtNDIwMSwyMyArNDE5 OSwyMiBAQCBMb2dpY2FsUmVwQXBwbHlMb29wKFhMb2dSZWNQdHIgbGFzdF9yZWNlaXZlZCkK IAkJCQl3YWl0X3RpbWUgPSBNaW4od2FpdF90aW1lLCBNeVN1YnNjcmlwdGlvbi0+bWF4cmV0 ZW50aW9uKTsKIAkJfQogCi0JCXJjID0gV2FpdExhdGNoT3JTb2NrZXQoTXlMYXRjaCwKLQkJ CQkJCQkgICBXTF9TT0NLRVRfUkVBREFCTEUgfCBXTF9MQVRDSF9TRVQgfAotCQkJCQkJCSAg IFdMX1RJTUVPVVQgfCBXTF9FWElUX09OX1BNX0RFQVRILAotCQkJCQkJCSAgIGZkLCB3YWl0 X3RpbWUsCi0JCQkJCQkJICAgV0FJVF9FVkVOVF9MT0dJQ0FMX0FQUExZX01BSU4pOworCQly YyA9IFdhaXRJbnRlcnJ1cHRPclNvY2tldChDaGVja0ZvckludGVycnVwdHNNYXNrIHwKKwkJ CQkJCQkJICAgSU5URVJSVVBUX1dBSVRfV0FLRVVQIHwKKwkJCQkJCQkJICAgSU5URVJSVVBU X0NPTkZJR19SRUxPQUQsCisJCQkJCQkJCSAgIFdMX1NPQ0tFVF9SRUFEQUJMRSB8IFdMX0lO VEVSUlVQVCB8CisJCQkJCQkJCSAgIFdMX1RJTUVPVVQgfCBXTF9FWElUX09OX1BNX0RFQVRI LAorCQkJCQkJCQkgICBmZCwgd2FpdF90aW1lLAorCQkJCQkJCQkgICBXQUlUX0VWRU5UX0xP R0lDQUxfQVBQTFlfTUFJTik7CiAKLQkJaWYgKHJjICYgV0xfTEFUQ0hfU0VUKQorCQlpZiAo cmMgJiBXTF9JTlRFUlJVUFQpCiAJCXsKLQkJCVJlc2V0TGF0Y2goTXlMYXRjaCk7CisJCQlD bGVhckludGVycnVwdChJTlRFUlJVUFRfV0FJVF9XQUtFVVApOwogCQkJQ0hFQ0tfRk9SX0lO VEVSUlVQVFMoKTsKIAkJfQogCi0JCWlmIChDb25maWdSZWxvYWRQZW5kaW5nKQotCQl7Ci0J CQlDb25maWdSZWxvYWRQZW5kaW5nID0gZmFsc2U7CisJCWlmIChDb25zdW1lSW50ZXJydXB0 KElOVEVSUlVQVF9DT05GSUdfUkVMT0FEKSkKIAkJCVByb2Nlc3NDb25maWdGaWxlKFBHQ19T SUdIVVApOwotCQl9CiAKIAkJaWYgKHJjICYgV0xfVElNRU9VVCkKIAkJewpAQCAtNTg4OCw5 ICs1ODg1LDEzIEBAIFNldHVwQXBwbHlPclN5bmNXb3JrZXIoaW50IHdvcmtlcl9zbG90KQog CiAJQXNzZXJ0KGFtX3RhYmxlc3luY193b3JrZXIoKSB8fCBhbV9zZXF1ZW5jZXN5bmNfd29y a2VyKCkgfHwgYW1fbGVhZGVyX2FwcGx5X3dvcmtlcigpKTsKIAotCS8qIFNldHVwIHNpZ25h bCBoYW5kbGluZyAqLwotCXBxc2lnbmFsKFNJR0hVUCwgU2lnbmFsSGFuZGxlckZvckNvbmZp Z1JlbG9hZCk7Ci0JcHFzaWduYWwoU0lHVEVSTSwgZGllKTsKKwkvKiBTZXR1cCBpbnRlcnJ1 cHQgaGFuZGxpbmcgKi8KKwlTZXRTdGFuZGFyZEludGVycnVwdEhhbmRsZXJzKCk7CisKKwkv KiBPdmVycmlkZSB0aGUgaGFuZGxlciBmb3IgcGFyYWxsbGVsIG1lc3NhZ2VzICovCisJU2V0 SW50ZXJydXB0SGFuZGxlcihJTlRFUlJVUFRfUEFSQUxMRUxfTUVTU0FHRSwgUHJvY2Vzc1Bh cmFsbGVsQXBwbHlNZXNzYWdlcyk7CisJRW5hYmxlSW50ZXJydXB0KElOVEVSUlVQVF9QQVJB TExFTF9NRVNTQUdFKTsKKwogCUJhY2tncm91bmRXb3JrZXJVbmJsb2NrU2lnbmFscygpOwog CiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Nsb3QuYyBiL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Nsb3QuYwppbmRleCAxNDM1NjlkZmZlMy4uOTc0MmRk ZDFmZDQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Nsb3QuYworKysg Yi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9zbG90LmMKQEAgLTQ0LDkgKzQ0LDkgQEAKICNp bmNsdWRlICJhY2Nlc3MveGxvZ3JlY292ZXJ5LmgiCiAjaW5jbHVkZSAiY29tbW9uL2ZpbGVf dXRpbHMuaCIKICNpbmNsdWRlICJjb21tb24vc3RyaW5nLmgiCisjaW5jbHVkZSAiaXBjL2lu dGVycnVwdC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5o IgotI2luY2x1ZGUgInBvc3RtYXN0ZXIvaW50ZXJydXB0LmgiCiAjaW5jbHVkZSAicmVwbGlj YXRpb24vbG9naWNhbGxhdW5jaGVyLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vc2xvdHN5 bmMuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9zbG90LmgiCkBAIC02MjIsNyArNjIyLDYg QEAgUmVwbGljYXRpb25TbG90QWNxdWlyZShjb25zdCBjaGFyICpuYW1lLCBib29sIG5vd2Fp dCwgYm9vbCBlcnJvcl9pZl9pbnZhbGlkKQogewogCVJlcGxpY2F0aW9uU2xvdCAqczsKIAlQ cm9jTnVtYmVyCWFjdGl2ZV9wcm9jOwotCXBpZF90CQlhY3RpdmVfcGlkOwogCiAJQXNzZXJ0 KG5hbWUgIT0gTlVMTCk7CiAKQEAgLTY4NSw3ICs2ODQsNiBAQCByZXRyeToKIAkJcy0+YWN0 aXZlX3Byb2MgPSBhY3RpdmVfcHJvYyA9IE15UHJvY051bWJlcjsKIAkJUmVwbGljYXRpb25T bG90U2V0SW5hY3RpdmVTaW5jZShzLCAwLCB0cnVlKTsKIAl9Ci0JYWN0aXZlX3BpZCA9IEdl dFBHUHJvY0J5TnVtYmVyKGFjdGl2ZV9wcm9jKS0+cGlkOwogCUxXTG9ja1JlbGVhc2UoUmVw bGljYXRpb25TbG90Q29udHJvbExvY2spOwogCiAJLyoKQEAgLTcwNyw3ICs3MDUsNyBAQCBy ZXRyeToKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9J Tl9VU0UpLAogCQkJCSBlcnJtc2coInJlcGxpY2F0aW9uIHNsb3QgXCIlc1wiIGlzIGFjdGl2 ZSBmb3IgUElEICVkIiwKLQkJCQkJCU5hbWVTdHIocy0+ZGF0YS5uYW1lKSwgYWN0aXZlX3Bp ZCkpKTsKKwkJCQkJCU5hbWVTdHIocy0+ZGF0YS5uYW1lKSwgR2V0UEdQcm9jQnlOdW1iZXIo YWN0aXZlX3Byb2MpLT5waWQpKSk7CiAJfQogCWVsc2UgaWYgKCFub3dhaXQpCiAJCUNvbmRp dGlvblZhcmlhYmxlQ2FuY2VsU2xlZXAoKTsgLyogbm8gc2xlZXAgbmVlZGVkIGFmdGVyIGFs bCAqLwpAQCAtMTk2OCw3ICsxOTY2LDcgQEAgSW52YWxpZGF0ZVBvc3NpYmx5T2Jzb2xldGVT bG90KHVpbnQzMiBwb3NzaWJsZV9jYXVzZXMsCiAJCQkJCQkJICAgT2lkIGRib2lkLCBUcmFu c2FjdGlvbklkIHNuYXBzaG90Q29uZmxpY3RIb3Jpem9uLAogCQkJCQkJCSAgIGJvb2wgKnJl bGVhc2VkX2xvY2tfb3V0KQogewotCWludAkJCWxhc3Rfc2lnbmFsZWRfcGlkID0gMDsKKwlQ cm9jTnVtYmVyCWxhc3Rfc2lnbmFsZWRfcHJvYyA9IElOVkFMSURfUFJPQ19OVU1CRVI7CiAJ Ym9vbAkJcmVsZWFzZWRfbG9jayA9IGZhbHNlOwogCWJvb2wJCWludmFsaWRhdGVkID0gZmFs c2U7CiAJVGltZXN0YW1wVHogaW5hY3RpdmVfc2luY2UgPSAwOwpAQCAtMTk3OCw3ICsxOTc2 LDYgQEAgSW52YWxpZGF0ZVBvc3NpYmx5T2Jzb2xldGVTbG90KHVpbnQzMiBwb3NzaWJsZV9j YXVzZXMsCiAJCVhMb2dSZWNQdHIJcmVzdGFydF9sc247CiAJCU5hbWVEYXRhCXNsb3RuYW1l OwogCQlQcm9jTnVtYmVyCWFjdGl2ZV9wcm9jOwotCQlwaWRfdAkJYWN0aXZlX3BpZCA9IDA7 CiAJCVJlcGxpY2F0aW9uU2xvdEludmFsaWRhdGlvbkNhdXNlIGludmFsaWRhdGlvbl9jYXVz ZSA9IFJTX0lOVkFMX05PTkU7CiAJCVRpbWVzdGFtcFR6IG5vdyA9IDA7CiAJCWxvbmcJCXNs b3RfaWRsZV9zZWNzID0gMDsKQEAgLTIwNjIsMTEgKzIwNTksNiBAQCBJbnZhbGlkYXRlUG9z c2libHlPYnNvbGV0ZVNsb3QodWludDMyIHBvc3NpYmxlX2NhdXNlcywKIAkJCS8qIExldCBj YWxsZXIga25vdyAqLwogCQkJaW52YWxpZGF0ZWQgPSB0cnVlOwogCQl9Ci0JCWVsc2UKLQkJ ewotCQkJYWN0aXZlX3BpZCA9IEdldFBHUHJvY0J5TnVtYmVyKGFjdGl2ZV9wcm9jKS0+cGlk OwotCQkJQXNzZXJ0KGFjdGl2ZV9waWQgIT0gMCk7Ci0JCX0KIAogCQlTcGluTG9ja1JlbGVh c2UoJnMtPm11dGV4KTsKIApAQCAtMjEwNSwyMiArMjA5NywyNSBAQCBJbnZhbGlkYXRlUG9z c2libHlPYnNvbGV0ZVNsb3QodWludDMyIHBvc3NpYmxlX2NhdXNlcywKIAkJCSAqIHByb2Nl c3Mgb3ducyBpdC4gVG8gaGFuZGxlIHRoYXQsIHdlIHNpZ25hbCBvbmx5IGlmIHRoZSBQSUQg b2YKIAkJCSAqIHRoZSBvd25pbmcgcHJvY2VzcyBoYXMgY2hhbmdlZCBmcm9tIHRoZSBwcmV2 aW91cyB0aW1lLiAoVGhpcwogCQkJICogbG9naWMgYXNzdW1lcyB0aGF0IHRoZSBzYW1lIFBJ RCBpcyBub3QgcmV1c2VkIHZlcnkgcXVpY2tseS4pCisJCQkgKgorCQkJICogRklYTUU6IG5l ZWQgYW5vdGhlciBjaGVjayBub3cgdGhhdCB3ZSdyZSB1c2luZyBQcm9jTnVtYmVycywKKwkJ CSAqIHdoaWNoIGRvIGdldCByZWN5Y2xlZCBxdWlja2x5CiAJCQkgKi8KLQkJCWlmIChsYXN0 X3NpZ25hbGVkX3BpZCAhPSBhY3RpdmVfcGlkKQorCQkJaWYgKGxhc3Rfc2lnbmFsZWRfcHJv YyAhPSBhY3RpdmVfcHJvYykKIAkJCXsKLQkJCQlSZXBvcnRTbG90SW52YWxpZGF0aW9uKGlu dmFsaWRhdGlvbl9jYXVzZSwgdHJ1ZSwgYWN0aXZlX3BpZCwKKwkJCQlSZXBvcnRTbG90SW52 YWxpZGF0aW9uKGludmFsaWRhdGlvbl9jYXVzZSwgdHJ1ZSwKKwkJCQkJCQkJCSAgIEdldFBH UHJvY0J5TnVtYmVyKGFjdGl2ZV9wcm9jKS0+cGlkLAogCQkJCQkJCQkJICAgc2xvdG5hbWUs IHJlc3RhcnRfbHNuLAogCQkJCQkJCQkJICAgb2xkZXN0TFNOLCBzbmFwc2hvdENvbmZsaWN0 SG9yaXpvbiwKIAkJCQkJCQkJCSAgIHNsb3RfaWRsZV9zZWNzKTsKIAogCQkJCWlmIChNeUJh Y2tlbmRUeXBlID09IEJfU1RBUlRVUCkKIAkJCQkJKHZvaWQpIFNpZ25hbFJlY292ZXJ5Q29u ZmxpY3QoR2V0UEdQcm9jQnlOdW1iZXIoYWN0aXZlX3Byb2MpLAotCQkJCQkJCQkJCQkJICBh Y3RpdmVfcGlkLAogCQkJCQkJCQkJCQkJICBSRUNPVkVSWV9DT05GTElDVF9MT0dJQ0FMU0xP VCk7CiAJCQkJZWxzZQotCQkJCQkodm9pZCkga2lsbChhY3RpdmVfcGlkLCBTSUdURVJNKTsK KwkJCQkJU2VuZEludGVycnVwdChJTlRFUlJVUFRfVEVSTUlOQVRFLCBhY3RpdmVfcHJvYyk7 CiAKLQkJCQlsYXN0X3NpZ25hbGVkX3BpZCA9IGFjdGl2ZV9waWQ7CisJCQkJbGFzdF9zaWdu YWxlZF9wcm9jID0gYWN0aXZlX3Byb2M7CiAJCQl9CiAKIAkJCS8qIFdhaXQgdW50aWwgdGhl IHNsb3QgaXMgcmVsZWFzZWQuICovCkBAIC0yMTYxLDcgKzIxNTYsOCBAQCBJbnZhbGlkYXRl UG9zc2libHlPYnNvbGV0ZVNsb3QodWludDMyIHBvc3NpYmxlX2NhdXNlcywKIAkJCVJlcGxp Y2F0aW9uU2xvdFNhdmUoKTsKIAkJCVJlcGxpY2F0aW9uU2xvdFJlbGVhc2UoKTsKIAotCQkJ UmVwb3J0U2xvdEludmFsaWRhdGlvbihpbnZhbGlkYXRpb25fY2F1c2UsIGZhbHNlLCBhY3Rp dmVfcGlkLAorCQkJUmVwb3J0U2xvdEludmFsaWRhdGlvbihpbnZhbGlkYXRpb25fY2F1c2Us IGZhbHNlLAorCQkJCQkJCQkgICBHZXRQR1Byb2NCeU51bWJlcihhY3RpdmVfcHJvYyktPnBp ZCwKIAkJCQkJCQkJICAgc2xvdG5hbWUsIHJlc3RhcnRfbHNuLAogCQkJCQkJCQkgICBvbGRl c3RMU04sIHNuYXBzaG90Q29uZmxpY3RIb3Jpem9uLAogCQkJCQkJCQkgICBzbG90X2lkbGVf c2Vjcyk7CkBAIC0zMjUzLDExICszMjQ5LDggQEAgV2FpdEZvclN0YW5kYnlDb25maXJtYXRp b24oWExvZ1JlY1B0ciB3YWl0X2Zvcl9sc24pCiAJewogCQlDSEVDS19GT1JfSU5URVJSVVBU UygpOwogCi0JCWlmIChDb25maWdSZWxvYWRQZW5kaW5nKQotCQl7Ci0JCQlDb25maWdSZWxv YWRQZW5kaW5nID0gZmFsc2U7CisJCWlmIChDb25zdW1lSW50ZXJydXB0KElOVEVSUlVQVF9D T05GSUdfUkVMT0FEKSkKIAkJCVByb2Nlc3NDb25maWdGaWxlKFBHQ19TSUdIVVApOwotCQl9 CiAKIAkJLyogRXhpdCBpZiBkb25lIHdhaXRpbmcgZm9yIGV2ZXJ5IHNsb3QuICovCiAJCWlm IChTdGFuZGJ5U2xvdHNIYXZlQ2F1Z2h0dXAod2FpdF9mb3JfbHNuLCBXQVJOSU5HKSkKQEAg LTMyNjcsNiArMzI2MCw4IEBAIFdhaXRGb3JTdGFuZGJ5Q29uZmlybWF0aW9uKFhMb2dSZWNQ dHIgd2FpdF9mb3JfbHNuKQogCQkgKiBXYWl0IGZvciB0aGUgc2xvdHMgaW4gdGhlIHN5bmNo cm9uaXplZF9zdGFuZGJ5X3Nsb3RzIHRvIGNhdGNoIHVwLAogCQkgKiBidXQgdXNlIGEgdGlt ZW91dCAoMXMpIHNvIHdlIGNhbiBhbHNvIGNoZWNrIGlmIHRoZQogCQkgKiBzeW5jaHJvbml6 ZWRfc3RhbmRieV9zbG90cyBoYXMgYmVlbiBjaGFuZ2VkLgorCQkgKgorCQkgKiBGSVhNRTog SSB0aGluayB3ZSBuZWVkIGEgd2F5IHRvIGFkZCBhIENWIHRvIFdhaXRFdmVudFNldAogCQkg Ki8KIAkJQ29uZGl0aW9uVmFyaWFibGVUaW1lZFNsZWVwKCZXYWxTbmRDdGwtPndhbF9jb25m aXJtX3Jjdl9jdiwgMTAwMCwKIAkJCQkJCQkJCVdBSVRfRVZFTlRfV0FJVF9GT1JfU1RBTkRC WV9DT05GSVJNQVRJT04pOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v c3luY3JlcC5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vc3luY3JlcC5jCmluZGV4IGU3 YmVlNzc3NTMyLi41MmExYWZmNTVhYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vc3luY3JlcC5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3N5bmNyZXAu YwpAQCAtNzYsNiArNzYsNyBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL3hhY3QuaCIKICNpbmNs dWRlICJjb21tb24vaW50LmgiCisjaW5jbHVkZSAiaXBjL2ludGVycnVwdC5oIgogI2luY2x1 ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInJlcGxp Y2F0aW9uL3N5bmNyZXAuaCIKQEAgLTI2NSwyMiArMjY2LDIyIEBAIFN5bmNSZXBXYWl0Rm9y TFNOKFhMb2dSZWNQdHIgbHNuLCBib29sIGNvbW1pdCkKIAkvKgogCSAqIFdhaXQgZm9yIHNw ZWNpZmllZCBMU04gdG8gYmUgY29uZmlybWVkLgogCSAqCi0JICogRWFjaCBwcm9jIGhhcyBp dHMgb3duIHdhaXQgbGF0Y2gsIHNvIHdlIHBlcmZvcm0gYSBub3JtYWwgbGF0Y2gKKwkgKiBF YWNoIHByb2MgaGFzIGl0cyBvd24gd2FpdCBpbnRlcnJ1cHQgdmVjdG9yLCBzbyB3ZSBwZXJm b3JtIGEgbm9ybWFsCiAJICogY2hlY2svd2FpdCBsb29wIGhlcmUuCiAJICovCiAJZm9yICg7 OykKIAl7CiAJCWludAkJCXJjOwogCi0JCS8qIE11c3QgcmVzZXQgdGhlIGxhdGNoIGJlZm9y ZSB0ZXN0aW5nIHN0YXRlLiAqLwotCQlSZXNldExhdGNoKE15TGF0Y2gpOworCQkvKiBNdXN0 IGNsZWFyIHRoZSBpbnRlcnJ1cHQgZmxhZyBiZWZvcmUgdGVzdGluZyBzdGF0ZS4gKi8KKwkJ Q2xlYXJJbnRlcnJ1cHQoSU5URVJSVVBUX1dBSVRfV0FLRVVQKTsKIAogCQkvKgotCQkgKiBB Y3F1aXJpbmcgdGhlIGxvY2sgaXMgbm90IG5lZWRlZCwgdGhlIGxhdGNoIGVuc3VyZXMgcHJv cGVyCi0JCSAqIGJhcnJpZXJzLiBJZiBpdCBsb29rcyBsaWtlIHdlJ3JlIGRvbmUsIHdlIG11 c3QgcmVhbGx5IGJlIGRvbmUsCi0JCSAqIGJlY2F1c2Ugb25jZSB3YWxzZW5kZXIgY2hhbmdl cyB0aGUgc3RhdGUgdG8gU1lOQ19SRVBfV0FJVF9DT01QTEVURSwKLQkJICogaXQgd2lsbCBu ZXZlciB1cGRhdGUgaXQgYWdhaW4sIHNvIHdlIGNhbid0IGJlIHNlZWluZyBhIHN0YWxlIHZh bHVlCi0JCSAqIGluIHRoYXQgY2FzZS4KKwkJICogQWNxdWlyaW5nIHRoZSBsb2NrIGlzIG5v dCBuZWVkZWQsIHRoZSBpbnRlcnJ1cHQgZW5zdXJlcyBwcm9wZXIKKwkJICogYmFycmllcnMg KEZJWE1FOiBpcyB0aGF0IHNvPykuIElmIGl0IGxvb2tzIGxpa2Ugd2UncmUgZG9uZSwgd2Ug bXVzdAorCQkgKiByZWFsbHkgYmUgZG9uZSwgYmVjYXVzZSBvbmNlIHdhbHNlbmRlciBjaGFu Z2VzIHRoZSBzdGF0ZSB0bworCQkgKiBTWU5DX1JFUF9XQUlUX0NPTVBMRVRFLCBpdCB3aWxs IG5ldmVyIHVwZGF0ZSBpdCBhZ2Fpbiwgc28gd2UgY2FuJ3QKKwkJICogYmUgc2VlaW5nIGEg c3RhbGUgdmFsdWUgaW4gdGhhdCBjYXNlLgogCQkgKi8KIAkJaWYgKE15UHJvYy0+c3luY1Jl cFN0YXRlID09IFNZTkNfUkVQX1dBSVRfQ09NUExFVEUpCiAJCQlicmVhazsKQEAgLTI5NCwx MCArMjk1LDEwIEBAIFN5bmNSZXBXYWl0Rm9yTFNOKFhMb2dSZWNQdHIgbHNuLCBib29sIGNv bW1pdCkKIAkJICogZW50aXRsZWQgdG8gYXNzdW1lIHRoYXQgYW4gYWNrbm93bGVkZ2VkIGNv bW1pdCBpcyBhbHNvIHJlcGxpY2F0ZWQsCiAJCSAqIHdoaWNoIG1pZ2h0IG5vdCBiZSB0cnVl LiBTbyBpbiB0aGlzIGNhc2Ugd2UgaXNzdWUgYSBXQVJOSU5HICh3aGljaAogCQkgKiBzb21l IGNsaWVudHMgbWF5IGJlIGFibGUgdG8gaW50ZXJwcmV0KSBhbmQgc2h1dCBvZmYgZnVydGhl ciBvdXRwdXQuCi0JCSAqIFdlIGRvIE5PVCByZXNldCBQcm9jRGllUGVuZGluZywgc28gdGhh dCB0aGUgcHJvY2VzcyB3aWxsIGRpZSBhZnRlcgotCQkgKiB0aGUgY29tbWl0IGlzIGNsZWFu ZWQgdXAuCisJCSAqIFdlIGRvIE5PVCBjbGVhciB0aGUgaW50ZXJydXB0IGJpdCwgc28gdGhh dCB0aGUgcHJvY2VzcyB3aWxsIGRpZQorCQkgKiBhZnRlciB0aGUgY29tbWl0IGlzIGNsZWFu ZWQgdXAuCiAJCSAqLwotCQlpZiAoUHJvY0RpZVBlbmRpbmcpCisJCWlmIChJbnRlcnJ1cHRQ ZW5kaW5nKElOVEVSUlVQVF9URVJNSU5BVEUpKQogCQl7CiAJCQllcmVwb3J0KFdBUk5JTkcs CiAJCQkJCShlcnJjb2RlKEVSUkNPREVfQURNSU5fU0hVVERPV04pLApAQCAtMzE0LDkgKzMx NSw4IEBAIFN5bmNSZXBXYWl0Rm9yTFNOKFhMb2dSZWNQdHIgbHNuLCBib29sIGNvbW1pdCkK IAkJICogYWx0b2dldGhlciBpcyBub3QgaGVscGZ1bCwgc28gd2UganVzdCB0ZXJtaW5hdGUg dGhlIHdhaXQgd2l0aCBhCiAJCSAqIHN1aXRhYmxlIHdhcm5pbmcuCiAJCSAqLwotCQlpZiAo UXVlcnlDYW5jZWxQZW5kaW5nKQorCQlpZiAoQ29uc3VtZUludGVycnVwdChJTlRFUlJVUFRf UVVFUllfQ0FOQ0VMKSkKIAkJewotCQkJUXVlcnlDYW5jZWxQZW5kaW5nID0gZmFsc2U7CiAJ CQllcmVwb3J0KFdBUk5JTkcsCiAJCQkJCShlcnJtc2coImNhbmNlbGluZyB3YWl0IGZvciBz eW5jaHJvbm91cyByZXBsaWNhdGlvbiBkdWUgdG8gdXNlciByZXF1ZXN0IiksCiAJCQkJCSBl cnJkZXRhaWwoIlRoZSB0cmFuc2FjdGlvbiBoYXMgYWxyZWFkeSBjb21taXR0ZWQgbG9jYWxs eSwgYnV0IG1pZ2h0IG5vdCBoYXZlIGJlZW4gcmVwbGljYXRlZCB0byB0aGUgc3RhbmRieS4i KSkpOwpAQCAtMzI1LDExICszMjUsMTUgQEAgU3luY1JlcFdhaXRGb3JMU04oWExvZ1JlY1B0 ciBsc24sIGJvb2wgY29tbWl0KQogCQl9CiAKIAkJLyoKLQkJICogV2FpdCBvbiBsYXRjaC4g IEFueSBjb25kaXRpb24gdGhhdCBzaG91bGQgd2FrZSB1cyB1cCB3aWxsIHNldCB0aGUKLQkJ ICogbGF0Y2gsIHNvIG5vIG5lZWQgZm9yIHRpbWVvdXQuCisJCSAqIFdhaXQgb24gaW50ZXJy dXB0LiAgQW55IGNvbmRpdGlvbiB0aGF0IHNob3VsZCB3YWtlIHVzIHVwIHdpbGwgc2V0CisJ CSAqIHRoZSBhcHByb3ByaWF0ZSBpbnRlcnJ1cHQsIHNvIG5vIG5lZWQgZm9yIHRpbWVvdXQu CiAJCSAqLwotCQlyYyA9IFdhaXRMYXRjaChNeUxhdGNoLCBXTF9MQVRDSF9TRVQgfCBXTF9Q T1NUTUFTVEVSX0RFQVRILCAtMSwKLQkJCQkJICAgV0FJVF9FVkVOVF9TWU5DX1JFUCk7CisJ CXJjID0gV2FpdEludGVycnVwdChJTlRFUlJVUFRfV0FJVF9XQUtFVVAgfAorCQkJCQkJICAg SU5URVJSVVBUX1RFUk1JTkFURSB8CisJCQkJCQkgICBJTlRFUlJVUFRfUVVFUllfQ0FOQ0VM LAorCQkJCQkJICAgV0xfSU5URVJSVVBUIHwgV0xfUE9TVE1BU1RFUl9ERUFUSCwKKwkJCQkJ CSAgIC0xLAorCQkJCQkJICAgV0FJVF9FVkVOVF9TWU5DX1JFUCk7CiAKIAkJLyoKIAkJICog SWYgdGhlIHBvc3RtYXN0ZXIgZGllcywgd2UnbGwgcHJvYmFibHkgbmV2ZXIgZ2V0IGFuIGFj a25vd2xlZGdtZW50LApAQCAtMzM3LDcgKzM0MSw3IEBAIFN5bmNSZXBXYWl0Rm9yTFNOKFhM b2dSZWNQdHIgbHNuLCBib29sIGNvbW1pdCkKIAkJICovCiAJCWlmIChyYyAmIFdMX1BPU1RN QVNURVJfREVBVEgpCiAJCXsKLQkJCVByb2NEaWVQZW5kaW5nID0gdHJ1ZTsKKwkJCVJhaXNl SW50ZXJydXB0KElOVEVSUlVQVF9URVJNSU5BVEUpOwogCQkJd2hlcmVUb1NlbmRPdXRwdXQg PSBEZXN0Tm9uZTsKIAkJCVN5bmNSZXBDYW5jZWxXYWl0KCk7CiAJCQlicmVhazsKQEAgLTk0 NCw3ICs5NDgsNyBAQCBTeW5jUmVwV2FrZVF1ZXVlKGJvb2wgYWxsLCBpbnQgbW9kZSkKIAkJ LyoKIAkJICogV2FrZSBvbmx5IHdoZW4gd2UgaGF2ZSBzZXQgc3RhdGUgYW5kIHJlbW92ZWQg ZnJvbSBxdWV1ZS4KIAkJICovCi0JCVNldExhdGNoKCYocHJvYy0+cHJvY0xhdGNoKSk7CisJ CVNlbmRJbnRlcnJ1cHQoSU5URVJSVVBUX1dBSVRfV0FLRVVQLCBHZXROdW1iZXJGcm9tUEdQ cm9jKHByb2MpKTsKIAogCQludW1wcm9jcysrOwogCX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi93YWxyZWNlaXZlci5jCmluZGV4IDViM2Q3ZmNmM2Q3Li40YzkyZmQwNTUwOCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2FscmVjZWl2ZXIuYworKysgYi9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi93YWxyZWNlaXZlci5jCkBAIC02MCwxMiArNjAsMTMgQEAK ICNpbmNsdWRlICJhY2Nlc3MveGxvZ3dhaXQuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2F1 dGhpZC5oIgogI2luY2x1ZGUgImZ1bmNhcGkuaCIKKyNpbmNsdWRlICJpcGMvaW50ZXJydXB0 LmgiCisjaW5jbHVkZSAiaXBjL3NpZ25hbF9oYW5kbGVycy5oIgogI2luY2x1ZGUgImxpYnBx L3BxZm9ybWF0LmgiCiAjaW5jbHVkZSAibGlicHEvcHFzaWduYWwuaCIKICNpbmNsdWRlICJt aXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVy L2F1eHByb2Nlc3MuaCIKLSNpbmNsdWRlICJwb3N0bWFzdGVyL2ludGVycnVwdC5oIgogI2lu Y2x1ZGUgInJlcGxpY2F0aW9uL3dhbHJlY2VpdmVyLmgiCiAjaW5jbHVkZSAicmVwbGljYXRp b24vd2Fsc2VuZGVyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKQEAgLTI0OCwxNSAr MjQ5LDE1IEBAIFdhbFJlY2VpdmVyTWFpbihjb25zdCB2b2lkICpzdGFydHVwX2RhdGEsIHNp emVfdCBzdGFydHVwX2RhdGFfbGVuKQogCW9uX3NobWVtX2V4aXQoV2FsUmN2RGllLCBQb2lu dGVyR2V0RGF0dW0oJnN0YXJ0cG9pbnRUTEkpKTsKIAogCS8qIFByb3Blcmx5IGFjY2VwdCBv ciBpZ25vcmUgc2lnbmFscyB0aGUgcG9zdG1hc3RlciBtaWdodCBzZW5kIHVzICovCi0JcHFz aWduYWwoU0lHSFVQLCBTaWduYWxIYW5kbGVyRm9yQ29uZmlnUmVsb2FkKTsgLyogc2V0IGZs YWcgdG8gcmVhZCBjb25maWcKLQkJCQkJCQkJCQkJCQkgKiBmaWxlICovCisKKwkvKgorCSAq IEZJWE1FOiB3ZSBkb24ndCByZWFjdCB0byBxdWVyeSBjYW5jZWwsIHNvIHdlIGNhbiBpZ25v cmUuIFRoZXJlJ2QgYmUgbm8KKwkgKiBoYXJtIGluIGtlZXBpbmcgdGhlIHNpZ25hbCBoYW5k bGVyIHRob3VnaCwgYmVjYXVzZSB3ZSB3b24ndCByZWFjdCB0bworCSAqIElOVEVSUlVQVF9R VUVSWV9DQU5DRUwgYW55d2F5CisJICovCiAJcHFzaWduYWwoU0lHSU5ULCBTSUdfSUdOKTsK LQlwcXNpZ25hbChTSUdURVJNLCBkaWUpOwkJLyogcmVxdWVzdCBzaHV0ZG93biAqLwotCS8q IFNJR1FVSVQgaGFuZGxlciB3YXMgYWxyZWFkeSBzZXQgdXAgYnkgSW5pdFBvc3RtYXN0ZXJD aGlsZCAqLwotCXBxc2lnbmFsKFNJR0FMUk0sIFNJR19JR04pOwotCXBxc2lnbmFsKFNJR1BJ UEUsIFNJR19JR04pOwotCXBxc2lnbmFsKFNJR1VTUjEsIHByb2NzaWduYWxfc2lndXNyMV9o YW5kbGVyKTsKLQlwcXNpZ25hbChTSUdVU1IyLCBTSUdfSUdOKTsKKworCVNldFN0YW5kYXJk SW50ZXJydXB0SGFuZGxlcnMoKTsKIAogCS8qIExvYWQgdGhlIGxpYnBxLXNwZWNpZmljIGZ1 bmN0aW9ucyAqLwogCWxvYWRfZmlsZSgibGlicHF3YWxyZWNlaXZlciIsIGZhbHNlKTsKQEAg LTQ0MCw5ICs0NDEsOCBAQCBXYWxSZWNlaXZlck1haW4oY29uc3Qgdm9pZCAqc3RhcnR1cF9k YXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbikKIAkJCQkvKiBQcm9jZXNzIGFueSByZXF1 ZXN0cyBvciBzaWduYWxzIHJlY2VpdmVkIHJlY2VudGx5ICovCiAJCQkJQ0hFQ0tfRk9SX0lO VEVSUlVQVFMoKTsKIAotCQkJCWlmIChDb25maWdSZWxvYWRQZW5kaW5nKQorCQkJCWlmIChD b25zdW1lSW50ZXJydXB0KElOVEVSUlVQVF9DT05GSUdfUkVMT0FEKSkKIAkJCQl7Ci0JCQkJ CUNvbmZpZ1JlbG9hZFBlbmRpbmcgPSBmYWxzZTsKIAkJCQkJUHJvY2Vzc0NvbmZpZ0ZpbGUo UEdDX1NJR0hVUCk7CiAJCQkJCS8qIHJlY29tcHV0ZSB3YWtldXAgdGltZXMgKi8KIAkJCQkJ bm93ID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOwpAQCAtNTE1LDI1ICs1MTUsMjcgQEAgV2Fs UmVjZWl2ZXJNYWluKGNvbnN0IHZvaWQgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBf ZGF0YV9sZW4pCiAKIAkJCQkvKgogCQkJCSAqIElkZWFsbHkgd2Ugd291bGQgcmV1c2UgYSBX YWl0RXZlbnRTZXQgb2JqZWN0IHJlcGVhdGVkbHkKLQkJCQkgKiBoZXJlIHRvIGF2b2lkIHRo ZSBvdmVyaGVhZHMgb2YgV2FpdExhdGNoT3JTb2NrZXQgb24gZXBvbGwKLQkJCQkgKiBzeXN0 ZW1zLCBidXQgd2UgY2FuJ3QgYmUgc3VyZSB0aGF0IGxpYnBxIChvciBhbnkgb3RoZXIKLQkJ CQkgKiB3YWxyZWNlaXZlciBpbXBsZW1lbnRhdGlvbikgaGFzIHRoZSBzYW1lIHNvY2tldCAo ZXZlbiBpZgotCQkJCSAqIHRoZSBmZCBpcyB0aGUgc2FtZSBudW1iZXIsIGl0IG1heSBoYXZl IGJlZW4gY2xvc2VkIGFuZAorCQkJCSAqIGhlcmUgdG8gYXZvaWQgdGhlIG92ZXJoZWFkcyBv ZiBXYWl0SW50ZXJydXB0T3JTb2NrZXQgb24KKwkJCQkgKiBlcG9sbCBzeXN0ZW1zLCBidXQg d2UgY2FuJ3QgYmUgc3VyZSB0aGF0IGxpYnBxIChvciBhbnkKKwkJCQkgKiBvdGhlciB3YWxy ZWNlaXZlciBpbXBsZW1lbnRhdGlvbikgaGFzIHRoZSBzYW1lIHNvY2tldCAoZXZlbgorCQkJ CSAqIGlmIHRoZSBmZCBpcyB0aGUgc2FtZSBudW1iZXIsIGl0IG1heSBoYXZlIGJlZW4gY2xv c2VkIGFuZAogCQkJCSAqIHJlb3BlbmVkIHNpbmNlIHRoZSBsYXN0IHRpbWUpLiAgSW4gZnV0 dXJlLCBpZiB0aGVyZSBpcyBhCiAJCQkJICogZnVuY3Rpb24gZm9yIHJlbW92aW5nIHNvY2tl dHMgZnJvbSBXYWl0RXZlbnRTZXQsIHRoZW4gd2UKIAkJCQkgKiBjb3VsZCBhZGQgYW5kIHJl bW92ZSBqdXN0IHRoZSBzb2NrZXQgZWFjaCB0aW1lLCBwb3RlbnRpYWxseQogCQkJCSAqIGF2 b2lkaW5nIHNvbWUgc3lzdGVtIGNhbGxzLgogCQkJCSAqLwogCQkJCUFzc2VydCh3YWl0X2Zk ICE9IFBHSU5WQUxJRF9TT0NLRVQpOwotCQkJCXJjID0gV2FpdExhdGNoT3JTb2NrZXQoTXlM YXRjaCwKLQkJCQkJCQkJCSAgIFdMX0VYSVRfT05fUE1fREVBVEggfCBXTF9TT0NLRVRfUkVB REFCTEUgfAotCQkJCQkJCQkJICAgV0xfVElNRU9VVCB8IFdMX0xBVENIX1NFVCwKLQkJCQkJ CQkJCSAgIHdhaXRfZmQsCi0JCQkJCQkJCQkgICBuYXAsCi0JCQkJCQkJCQkgICBXQUlUX0VW RU5UX1dBTF9SRUNFSVZFUl9NQUlOKTsKLQkJCQlpZiAocmMgJiBXTF9MQVRDSF9TRVQpCisJ CQkJcmMgPSBXYWl0SW50ZXJydXB0T3JTb2NrZXQoQ2hlY2tGb3JJbnRlcnJ1cHRzTWFzayB8 CisJCQkJCQkJCQkJICAgSU5URVJSVVBUX1dBSVRfV0FLRVVQIHwKKwkJCQkJCQkJCQkgICBJ TlRFUlJVUFRfQ09ORklHX1JFTE9BRCwKKwkJCQkJCQkJCQkgICBXTF9FWElUX09OX1BNX0RF QVRIIHwgV0xfU09DS0VUX1JFQURBQkxFIHwKKwkJCQkJCQkJCQkgICBXTF9USU1FT1VUIHwg V0xfSU5URVJSVVBULAorCQkJCQkJCQkJCSAgIHdhaXRfZmQsCisJCQkJCQkJCQkJICAgbmFw LAorCQkJCQkJCQkJCSAgIFdBSVRfRVZFTlRfV0FMX1JFQ0VJVkVSX01BSU4pOworCQkJCWlm IChyYyAmIFdMX0lOVEVSUlVQVCkKIAkJCQl7Ci0JCQkJCVJlc2V0TGF0Y2goTXlMYXRjaCk7 CisJCQkJCUNsZWFySW50ZXJydXB0KElOVEVSUlVQVF9XQUlUX1dBS0VVUCk7CiAJCQkJCUNI RUNLX0ZPUl9JTlRFUlJVUFRTKCk7CiAKIAkJCQkJaWYgKHdhbHJjdi0+Zm9yY2VfcmVwbHkp CkBAIC02ODEsNyArNjgzLDcgQEAgV2FsUmN2V2FpdEZvclN0YXJ0UG9zaXRpb24oWExvZ1Jl Y1B0ciAqc3RhcnRwb2ludCwgVGltZUxpbmVJRCAqc3RhcnRwb2ludFRMSSkKIAlXYWtldXBS ZWNvdmVyeSgpOwogCWZvciAoOzspCiAJewotCQlSZXNldExhdGNoKE15TGF0Y2gpOworCQlD bGVhckludGVycnVwdChJTlRFUlJVUFRfV0FJVF9XQUtFVVApOwogCiAJCUNIRUNLX0ZPUl9J TlRFUlJVUFRTKCk7CiAKQEAgLTcxMyw4ICs3MTUsMTIgQEAgV2FsUmN2V2FpdEZvclN0YXJ0 UG9zaXRpb24oWExvZ1JlY1B0ciAqc3RhcnRwb2ludCwgVGltZUxpbmVJRCAqc3RhcnRwb2lu dFRMSSkKIAkJfQogCQlTcGluTG9ja1JlbGVhc2UoJndhbHJjdi0+bXV0ZXgpOwogCi0JCSh2 b2lkKSBXYWl0TGF0Y2goTXlMYXRjaCwgV0xfTEFUQ0hfU0VUIHwgV0xfRVhJVF9PTl9QTV9E RUFUSCwgMCwKLQkJCQkJCSBXQUlUX0VWRU5UX1dBTF9SRUNFSVZFUl9XQUlUX1NUQVJUKTsK KwkJKHZvaWQpIFdhaXRJbnRlcnJ1cHQoQ2hlY2tGb3JJbnRlcnJ1cHRzTWFzayB8CisJCQkJ CQkJIElOVEVSUlVQVF9URVJNSU5BVEUgfAorCQkJCQkJCSBJTlRFUlJVUFRfV0FJVF9XQUtF VVAsCisJCQkJCQkJIFdMX0lOVEVSUlVQVCB8IFdMX0VYSVRfT05fUE1fREVBVEgsCisJCQkJ CQkJIDAsCisJCQkJCQkJIFdBSVRfRVZFTlRfV0FMX1JFQ0VJVkVSX1dBSVRfU1RBUlQpOwog CX0KIAogCWlmICh1cGRhdGVfcHJvY2Vzc190aXRsZSkKQEAgLTEzODUsNyArMTM5MSw3IEBA IFdhbFJjdkZvcmNlUmVwbHkodm9pZCkKIAlwcm9jbm8gPSBXYWxSY3YtPnByb2NubzsKIAlT cGluTG9ja1JlbGVhc2UoJldhbFJjdi0+bXV0ZXgpOwogCWlmIChwcm9jbm8gIT0gSU5WQUxJ RF9QUk9DX05VTUJFUikKLQkJU2V0TGF0Y2goJkdldFBHUHJvY0J5TnVtYmVyKHByb2Nubykt PnByb2NMYXRjaCk7CisJCVNlbmRJbnRlcnJ1cHQoSU5URVJSVVBUX1dBSVRfV0FLRVVQLCBw cm9jbm8pOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v d2FscmVjZWl2ZXJmdW5jcy5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2FscmVjZWl2 ZXJmdW5jcy5jCmluZGV4IDQyZTNlMTcwYmMwLi41NmNhOGY3Mzg5YyAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2FscmVjZWl2ZXJmdW5jcy5jCisrKyBiL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVyZnVuY3MuYwpAQCAtMjQsNiArMjQsNyBA QAogCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2dfaW50ZXJuYWwuaCIKICNpbmNsdWRlICJhY2Nl c3MveGxvZ3JlY292ZXJ5LmgiCisjaW5jbHVkZSAiaXBjL2ludGVycnVwdC5oIgogI2luY2x1 ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL3dhbHJlY2VpdmVyLmgiCiAj aW5jbHVkZSAic3RvcmFnZS9wbXNpZ25hbC5oIgpAQCAtMzMyLDcgKzMzMyw3IEBAIFJlcXVl c3RYTG9nU3RyZWFtaW5nKFRpbWVMaW5lSUQgdGxpLCBYTG9nUmVjUHRyIHJlY3B0ciwgY29u c3QgY2hhciAqY29ubmluZm8sCiAJaWYgKGxhdW5jaCkKIAkJU2VuZFBvc3RtYXN0ZXJTaWdu YWwoUE1TSUdOQUxfU1RBUlRfV0FMUkVDRUlWRVIpOwogCWVsc2UgaWYgKHdhbHJjdl9wcm9j ICE9IElOVkFMSURfUFJPQ19OVU1CRVIpCi0JCVNldExhdGNoKCZHZXRQR1Byb2NCeU51bWJl cih3YWxyY3ZfcHJvYyktPnByb2NMYXRjaCk7CisJCVNlbmRJbnRlcnJ1cHQoSU5URVJSVVBU X1dBSVRfV0FLRVVQLCB3YWxyY3ZfcHJvYyk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi93YWxzZW5kZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL3dhbHNlbmRlci5jCmluZGV4IDNmOWE0MjdmN2M2Li5iZjExZDQ2MGFjNiAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2Fsc2VuZGVyLmMKKysrIGIvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vd2Fsc2VuZGVyLmMKQEAgLTI1LDE0ICsyNSwxNCBAQAogICog dGhlIHdhbHNlbmRlciB3aWxsIGV4aXQgcXVpY2tseSB3aXRob3V0IHNlbmRpbmcgYW55IG1v cmUgWExPRyByZWNvcmRzLgogICoKICAqIElmIHRoZSBzZXJ2ZXIgaXMgc2h1dCBkb3duLCBj aGVja3BvaW50ZXIgc2VuZHMgdXMKLSAqIFBST0NTSUdfV0FMU05EX0lOSVRfU1RPUFBJTkcg YWZ0ZXIgYWxsIHJlZ3VsYXIgYmFja2VuZHMgaGF2ZSBleGl0ZWQuICBJZgorICogSU5URVJS VVBUX1dBTFNORF9JTklUX1NUT1BQSU5HIGFmdGVyIGFsbCByZWd1bGFyIGJhY2tlbmRzIGhh dmUgZXhpdGVkLiAgSWYKICAqIHRoZSBiYWNrZW5kIGlzIGlkbGUgb3IgcnVucyBhbiBTUUwg cXVlcnkgdGhpcyBjYXVzZXMgdGhlIGJhY2tlbmQgdG8KICAqIHNodXRkb3duLCBpZiBsb2dp Y2FsIHJlcGxpY2F0aW9uIGlzIGluIHByb2dyZXNzIGFsbCBleGlzdGluZyBXQUwgcmVjb3Jk cwogICogYXJlIHByb2Nlc3NlZCBmb2xsb3dlZCBieSBhIHNodXRkb3duLiAgT3RoZXJ3aXNl IHRoaXMgY2F1c2VzIHRoZSB3YWxzZW5kZXIKICAqIHRvIHN3aXRjaCB0byB0aGUgInN0b3Bw aW5nIiBzdGF0ZS4gSW4gdGhpcyBzdGF0ZSwgdGhlIHdhbHNlbmRlciB3aWxsIHJlamVjdAog ICogYW55IGZ1cnRoZXIgcmVwbGljYXRpb24gY29tbWFuZHMuIFRoZSBjaGVja3BvaW50ZXIg YmVnaW5zIHRoZSBzaHV0ZG93bgogICogY2hlY2twb2ludCBvbmNlIGFsbCB3YWxzZW5kZXJz IGFyZSBjb25maXJtZWQgYXMgc3RvcHBpbmcuIFdoZW4gdGhlIHNodXRkb3duCi0gKiBjaGVj a3BvaW50IGZpbmlzaGVzLCB0aGUgcG9zdG1hc3RlciBzZW5kcyB1cyBTSUdVU1IyLiBUaGlz IGluc3RydWN0cworICogY2hlY2twb2ludCBmaW5pc2hlcywgdGhlIHBvc3RtYXN0ZXIgc2Vu ZHMgdXMgSU5URVJSVVBUX1dBTFNORF9TVE9QLiBUaGlzIGluc3RydWN0cwogICogd2Fsc2Vu ZGVyIHRvIHNlbmQgYW55IG91dHN0YW5kaW5nIFdBTCwgaW5jbHVkaW5nIHRoZSBzaHV0ZG93 biBjaGVja3BvaW50CiAgKiByZWNvcmQsIHdhaXQgZm9yIGl0IHRvIGJlIHJlcGxpY2F0ZWQg dG8gdGhlIHN0YW5kYnksIGFuZCB0aGVuIGV4aXQuCiAgKgpAQCAtNjMsMTMgKzYzLDE0IEBA CiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvZGVm cmVtLmgiCiAjaW5jbHVkZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUgImlwYy9pbnRlcnJ1cHQu aCIKKyNpbmNsdWRlICJpcGMvc2lnbmFsX2hhbmRsZXJzLmgiCiAjaW5jbHVkZSAibGlicHEv bGlicHEuaCIKICNpbmNsdWRlICJsaWJwcS9wcWZvcm1hdC5oIgogI2luY2x1ZGUgImxpYnBx L3Byb3RvY29sLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAibm9kZXMv cmVwbG5vZGVzLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCi0jaW5jbHVkZSAicG9zdG1hc3Rl ci9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZWNvZGUuaCIKICNpbmNs dWRlICJyZXBsaWNhdGlvbi9sb2dpY2FsLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vc2xv dHN5bmMuaCIKQEAgLTIwMSwxNSArMjAyLDEyIEBAIHN0YXRpYyBib29sIHN0cmVhbWluZ0Rv bmVSZWNlaXZpbmc7CiAvKiBBcmUgd2UgdGhlcmUgeWV0PyAqLwogc3RhdGljIGJvb2wgV2Fs U25kQ2F1Z2h0VXAgPSBmYWxzZTsKIAotLyogRmxhZ3Mgc2V0IGJ5IHNpZ25hbCBoYW5kbGVy cyBmb3IgbGF0ZXIgc2VydmljZSBpbiBtYWluIGxvb3AgKi8KLXN0YXRpYyB2b2xhdGlsZSBz aWdfYXRvbWljX3QgZ290X1NJR1VTUjIgPSBmYWxzZTsKLXN0YXRpYyB2b2xhdGlsZSBzaWdf YXRvbWljX3QgZ290X1NUT1BQSU5HID0gZmFsc2U7Ci0KIC8qCiAgKiBUaGlzIGlzIHNldCB3 aGlsZSB3ZSBhcmUgc3RyZWFtaW5nLiBXaGVuIG5vdCBzZXQKLSAqIFBST0NTSUdfV0FMU05E X0lOSVRfU1RPUFBJTkcgc2lnbmFsIHdpbGwgYmUgaGFuZGxlZCBsaWtlIFNJR1RFUk0uIFdo ZW4gc2V0LAotICogdGhlIG1haW4gbG9vcCBpcyByZXNwb25zaWJsZSBmb3IgY2hlY2tpbmcg Z290X1NUT1BQSU5HIGFuZCB0ZXJtaW5hdGluZyB3aGVuCi0gKiBpdCdzIHNldCAoYWZ0ZXIg c3RyZWFtaW5nIGFueSByZW1haW5pbmcgV0FMKS4KKyAqIElOVEVSUlVQVF9XQUxTTkRfSU5J VF9TVE9QUElORyBpbnRlcnJ1cHQgd2lsbCBiZSBoYW5kbGVkIGxpa2UgU0lHVEVSTS4KKyAq IFdoZW4gc2V0LCB0aGUgbWFpbiBsb29wIGlzIHJlc3BvbnNpYmxlIGZvciBjaGVja2luZwor ICogSU5URVJSVVBUX1dBTFNORF9JTklUX1NUT1BQSU5HIGFuZCB0ZXJtaW5hdGluZyB3aGVu IGl0J3Mgc2V0IChhZnRlcgorICogc3RyZWFtaW5nIGFueSByZW1haW5pbmcgV0FMKS4KICAq Lwogc3RhdGljIHZvbGF0aWxlIHNpZ19hdG9taWNfdCByZXBsaWNhdGlvbl9hY3RpdmUgPSBm YWxzZTsKIApAQCAtMjgyLDcgKzI4MCw3IEBAIHN0YXRpYyB2b2lkIFdhbFNuZEtlZXBhbGl2 ZShib29sIHJlcXVlc3RSZXBseSwgWExvZ1JlY1B0ciB3cml0ZVB0cik7CiBzdGF0aWMgdm9p ZCBXYWxTbmRLZWVwYWxpdmVJZk5lY2Vzc2FyeSh2b2lkKTsKIHN0YXRpYyB2b2lkIFdhbFNu ZENoZWNrVGltZU91dCh2b2lkKTsKIHN0YXRpYyBsb25nIFdhbFNuZENvbXB1dGVTbGVlcHRp bWUoVGltZXN0YW1wVHogbm93KTsKLXN0YXRpYyB2b2lkIFdhbFNuZFdhaXQodWludDMyIHNv Y2tldF9ldmVudHMsIGxvbmcgdGltZW91dCwgdWludDMyIHdhaXRfZXZlbnQpOworc3RhdGlj IHZvaWQgV2FsU25kV2FpdCh1aW50MzIgc29ja2V0X2V2ZW50cywgbG9uZyB0aW1lb3V0LCB1 aW50MzIgd2FpdF9ldmVudCwgdWludDMyIGludGVycnVwdE1hc2spOwogc3RhdGljIHZvaWQg V2FsU25kUHJlcGFyZVdyaXRlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1Jl Y1B0ciBsc24sIFRyYW5zYWN0aW9uSWQgeGlkLCBib29sIGxhc3Rfd3JpdGUpOwogc3RhdGlj IHZvaWQgV2FsU25kV3JpdGVEYXRhKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExv Z1JlY1B0ciBsc24sIFRyYW5zYWN0aW9uSWQgeGlkLCBib29sIGxhc3Rfd3JpdGUpOwogc3Rh dGljIHZvaWQgV2FsU25kVXBkYXRlUHJvZ3Jlc3MoTG9naWNhbERlY29kaW5nQ29udGV4dCAq Y3R4LCBYTG9nUmVjUHRyIGxzbiwgVHJhbnNhY3Rpb25JZCB4aWQsCkBAIC0zNzAsNyArMzY4 LDggQEAgV2FsU25kRXJyb3JDbGVhbnVwKHZvaWQpCiAJaWYgKCFJc1RyYW5zYWN0aW9uT3JU cmFuc2FjdGlvbkJsb2NrKCkpCiAJCVJlbGVhc2VBdXhQcm9jZXNzUmVzb3VyY2VzKGZhbHNl KTsKIAotCWlmIChnb3RfU1RPUFBJTkcgfHwgZ290X1NJR1VTUjIpCisJaWYgKEludGVycnVw dFBlbmRpbmcoSU5URVJSVVBUX1dBTFNORF9JTklUX1NUT1BQSU5HKSB8fAorCQlJbnRlcnJ1 cHRQZW5kaW5nKElOVEVSUlVQVF9XQUxTTkRfU1RPUCkpCiAJCXByb2NfZXhpdCgwKTsKIAog CS8qIFJldmVydCBiYWNrIHRvIHN0YXJ0dXAgc3RhdGUgKi8KQEAgLTczOCw4ICs3MzcsMTYg QEAgSGFuZGxlVXBsb2FkTWFuaWZlc3RQYWNrZXQoU3RyaW5nSW5mbyBidWYsIG9mZl90ICpv ZmZzZXQsCiB7CiAJaW50CQkJbXR5cGU7CiAJaW50CQkJbWF4bXNnbGVuOworCWJvb2wJCXNh dmVfcXVlcnlfY2FuY2VsX2VuYWJsZWQ7CiAKLQlIT0xEX0NBTkNFTF9JTlRFUlJVUFRTKCk7 CisJLyoKKwkgKiBMaWtlIGluIFNvY2tldEJhY2tlbmQsIGRvbid0IGFsbG93IHF1ZXJ5IGNh bmNlbCBpbnRlcnJ1cHRzIHdoaWxlCisJICogcmVhZGluZyBpbnB1dCBmcm9tIHRoZSBjbGll bnQsIGJlY2F1c2Ugd2UgbWlnaHQgbG9zZSBzeW5jIGluIHRoZSBGRS9CRQorCSAqIHByb3Rv Y29sLgorCSAqLworCXNhdmVfcXVlcnlfY2FuY2VsX2VuYWJsZWQgPSAoRW5hYmxlZEludGVy cnVwdHNNYXNrICYgSU5URVJSVVBUX1FVRVJZX0NBTkNFTCkgIT0gMDsKKwlpZiAoc2F2ZV9x dWVyeV9jYW5jZWxfZW5hYmxlZCkKKwkJRGlzYWJsZUludGVycnVwdChJTlRFUlJVUFRfUVVF UllfQ0FOQ0VMKTsKIAogCXBxX3N0YXJ0bXNncmVhZCgpOwogCW10eXBlID0gcHFfZ2V0Ynl0 ZSgpOwpAQCAtNzczLDcgKzc4MCw5IEBAIEhhbmRsZVVwbG9hZE1hbmlmZXN0UGFja2V0KFN0 cmluZ0luZm8gYnVmLCBvZmZfdCAqb2Zmc2V0LAogCQllcmVwb3J0KEVSUk9SLAogCQkJCShl cnJjb2RlKEVSUkNPREVfQ09OTkVDVElPTl9GQUlMVVJFKSwKIAkJCQkgZXJybXNnKCJ1bmV4 cGVjdGVkIEVPRiBvbiBjbGllbnQgY29ubmVjdGlvbiB3aXRoIGFuIG9wZW4gdHJhbnNhY3Rp b24iKSkpOwotCVJFU1VNRV9DQU5DRUxfSU5URVJSVVBUUygpOworCisJaWYgKHNhdmVfcXVl cnlfY2FuY2VsX2VuYWJsZWQpCisJCUVuYWJsZUludGVycnVwdChJTlRFUlJVUFRfUVVFUllf Q0FOQ0VMKTsKIAogCS8qIFByb2Nlc3MgdGhlIG1lc3NhZ2UgKi8KIAlzd2l0Y2ggKG10eXBl KQpAQCAtOTcyLDEyICs5ODEsMTQgQEAgU3RhcnRSZXBsaWNhdGlvbihTdGFydFJlcGxpY2F0 aW9uQ21kICpjbWQpCiAJCVN5bmNSZXBJbml0Q29uZmlnKCk7CiAKIAkJLyogTWFpbiBsb29w IG9mIHdhbHNlbmRlciAqLworCQlEaXNhYmxlSW50ZXJydXB0KElOVEVSUlVQVF9XQUxTTkRf SU5JVF9TVE9QUElORyk7CiAJCXJlcGxpY2F0aW9uX2FjdGl2ZSA9IHRydWU7CiAKIAkJV2Fs U25kTG9vcChYTG9nU2VuZFBoeXNpY2FsKTsKIAogCQlyZXBsaWNhdGlvbl9hY3RpdmUgPSBm YWxzZTsKLQkJaWYgKGdvdF9TVE9QUElORykKKwkJRW5hYmxlSW50ZXJydXB0KElOVEVSUlVQ VF9XQUxTTkRfSU5JVF9TVE9QUElORyk7CisJCWlmIChJbnRlcnJ1cHRQZW5kaW5nKElOVEVS UlVQVF9XQUxTTkRfSU5JVF9TVE9QUElORykpCiAJCQlwcm9jX2V4aXQoMCk7CiAJCVdhbFNu ZFNldFN0YXRlKFdBTFNORFNUQVRFX1NUQVJUVVApOwogCkBAIC0xMDM2LDkgKzEwNDcsOSBA QCBTdGFydFJlcGxpY2F0aW9uKFN0YXJ0UmVwbGljYXRpb25DbWQgKmNtZCkKICAqIFhMb2dS ZWFkZXJSb3V0aW5lLT5wYWdlX3JlYWQgY2FsbGJhY2sgZm9yIGxvZ2ljYWwgZGVjb2Rpbmcg Y29udGV4dHMsIGFzIGEKICAqIHdhbHNlbmRlciBwcm9jZXNzLgogICoKLSAqIEluc2lkZSB0 aGUgd2Fsc2VuZGVyIHdlIGNhbiBkbyBiZXR0ZXIgdGhhbiByZWFkX2xvY2FsX3hsb2dfcGFn ZSwKLSAqIHdoaWNoIGhhcyB0byBkbyBhIHBsYWluIHNsZWVwL2J1c3kgbG9vcCwgYmVjYXVz ZSB0aGUgd2Fsc2VuZGVyJ3MgbGF0Y2ggZ2V0cwotICogc2V0IGV2ZXJ5IHRpbWUgV0FMIGlz IGZsdXNoZWQuCisgKiBJbnNpZGUgdGhlIHdhbHNlbmRlciB3ZSBjYW4gZG8gYmV0dGVyIHRo YW4gcmVhZF9sb2NhbF94bG9nX3BhZ2UsIHdoaWNoIGhhcworICogdG8gZG8gYSBwbGFpbiBz bGVlcC9idXN5IGxvb3AsIGJlY2F1c2UgdGhlIHdhbHNlbmRlcidzIGludGVycnVwdCBnZXRz IHNldAorICogZXZlcnkgdGltZSBXQUwgaXMgZmx1c2hlZC4KICAqLwogc3RhdGljIGludAog bG9naWNhbF9yZWFkX3hsb2dfcGFnZShYTG9nUmVhZGVyU3RhdGUgKnN0YXRlLCBYTG9nUmVj UHRyIHRhcmdldFBhZ2VQdHIsIGludCByZXFMZW4sCkBAIC0xNDc1LDcgKzE0ODYsNyBAQCBT dGFydExvZ2ljYWxSZXBsaWNhdGlvbihTdGFydFJlcGxpY2F0aW9uQ21kICpjbWQpCiAJewog CQllcmVwb3J0KExPRywKIAkJCQkoZXJybXNnKCJ0ZXJtaW5hdGluZyB3YWxzZW5kZXIgcHJv Y2VzcyBhZnRlciBwcm9tb3Rpb24iKSkpOwotCQlnb3RfU1RPUFBJTkcgPSB0cnVlOworCQlS YWlzZUludGVycnVwdChJTlRFUlJVUFRfV0FMU05EX0lOSVRfU1RPUFBJTkcpOwogCX0KIAog CS8qCkBAIC0xNTI5LDcgKzE1NDAsNyBAQCBTdGFydExvZ2ljYWxSZXBsaWNhdGlvbihTdGFy dFJlcGxpY2F0aW9uQ21kICpjbWQpCiAJUmVwbGljYXRpb25TbG90UmVsZWFzZSgpOwogCiAJ cmVwbGljYXRpb25fYWN0aXZlID0gZmFsc2U7Ci0JaWYgKGdvdF9TVE9QUElORykKKwlpZiAo SW50ZXJydXB0UGVuZGluZyhJTlRFUlJVUFRfV0FMU05EX0lOSVRfU1RPUFBJTkcpKQogCQlw cm9jX2V4aXQoMCk7CiAJV2FsU25kU2V0U3RhdGUoV0FMU05EU1RBVEVfU1RBUlRVUCk7CiAK QEAgLTE2MzgsMTcgKzE2NDksMTkgQEAgUHJvY2Vzc1BlbmRpbmdXcml0ZXModm9pZCkKIAog CQkvKiBTbGVlcCB1bnRpbCBzb21ldGhpbmcgaGFwcGVucyBvciB3ZSB0aW1lIG91dCAqLwog CQlXYWxTbmRXYWl0KFdMX1NPQ0tFVF9XUklURUFCTEUgfCBXTF9TT0NLRVRfUkVBREFCTEUs IHNsZWVwdGltZSwKLQkJCQkgICBXQUlUX0VWRU5UX1dBTF9TRU5ERVJfV1JJVEVfREFUQSk7 CisJCQkJICAgV0FJVF9FVkVOVF9XQUxfU0VOREVSX1dSSVRFX0RBVEEsCisJCQkJICAgQ2hl Y2tGb3JJbnRlcnJ1cHRzTWFzayB8CisJCQkJICAgSU5URVJSVVBUX0NPTkZJR19SRUxPQUQg fAorCQkJCSAgIElOVEVSUlVQVF9XQUlUX1dBS0VVUCk7CiAKIAkJLyogQ2xlYXIgYW55IGFs cmVhZHktcGVuZGluZyB3YWtldXBzICovCi0JCVJlc2V0TGF0Y2goTXlMYXRjaCk7CisJCUNs ZWFySW50ZXJydXB0KElOVEVSUlVQVF9XQUlUX1dBS0VVUCk7CiAKIAkJQ0hFQ0tfRk9SX0lO VEVSUlVQVFMoKTsKIAogCQkvKiBQcm9jZXNzIGFueSByZXF1ZXN0cyBvciBzaWduYWxzIHJl Y2VpdmVkIHJlY2VudGx5ICovCi0JCWlmIChDb25maWdSZWxvYWRQZW5kaW5nKQorCQlpZiAo Q29uc3VtZUludGVycnVwdChJTlRFUlJVUFRfQ09ORklHX1JFTE9BRCkpCiAJCXsKLQkJCUNv bmZpZ1JlbG9hZFBlbmRpbmcgPSBmYWxzZTsKIAkJCVByb2Nlc3NDb25maWdGaWxlKFBHQ19T SUdIVVApOwogCQkJU3luY1JlcEluaXRDb25maWcoKTsKIAkJfQpAQCAtMTY1OCw4ICsxNjcx LDkgQEAgUHJvY2Vzc1BlbmRpbmdXcml0ZXModm9pZCkKIAkJCVdhbFNuZFNodXRkb3duKCk7 CiAJfQogCi0JLyogcmVhY3RpdmF0ZSBsYXRjaCBzbyBXYWxTbmRMb29wIGtub3dzIHRvIGNv bnRpbnVlICovCi0JU2V0TGF0Y2goTXlMYXRjaCk7CisJLyogcmVhY3RpdmF0ZSBpbnRlcnJ1 cHQgc28gV2FsU25kTG9vcCBrbm93cyB0byBjb250aW51ZSAqLworCS8qIEZJWE1FOiBzdGls bCBuZWVkZWQ/ICovCisJUmFpc2VJbnRlcnJ1cHQoSU5URVJSVVBUX1dBSVRfV0FLRVVQKTsK IH0KIAogLyoKQEAgLTE3NjIsNyArMTc3Niw3IEBAIFBoeXNpY2FsV2FrZXVwTG9naWNhbFdh bFNuZCh2b2lkKQogc3RhdGljIGJvb2wKIE5lZWRUb1dhaXRGb3JTdGFuZGJ5cyhYTG9nUmVj UHRyIGZsdXNoZWRfbHNuLCB1aW50MzIgKndhaXRfZXZlbnQpCiB7Ci0JaW50CQkJZWxldmVs ID0gZ290X1NUT1BQSU5HID8gRVJST1IgOiBXQVJOSU5HOworCWludAkJCWVsZXZlbCA9IElu dGVycnVwdFBlbmRpbmcoSU5URVJSVVBUX1dBTFNORF9JTklUX1NUT1BQSU5HKSA/IEVSUk9S IDogV0FSTklORzsKIAlib29sCQlmYWlsb3Zlcl9zbG90OwogCiAJZmFpbG92ZXJfc2xvdCA9 IChyZXBsaWNhdGlvbl9hY3RpdmUgJiYgTXlSZXBsaWNhdGlvblNsb3QtPmRhdGEuZmFpbG92 ZXIpOwpAQCAtMTg0OSwxNCArMTg2MywxMyBAQCBXYWxTbmRXYWl0Rm9yV2FsKFhMb2dSZWNQ dHIgbG9jKQogCQlUaW1lc3RhbXBUeiBub3c7CiAKIAkJLyogQ2xlYXIgYW55IGFscmVhZHkt cGVuZGluZyB3YWtldXBzICovCi0JCVJlc2V0TGF0Y2goTXlMYXRjaCk7CisJCUNsZWFySW50 ZXJydXB0KElOVEVSUlVQVF9XQUlUX1dBS0VVUCk7CiAKIAkJQ0hFQ0tfRk9SX0lOVEVSUlVQ VFMoKTsKIAogCQkvKiBQcm9jZXNzIGFueSByZXF1ZXN0cyBvciBzaWduYWxzIHJlY2VpdmVk IHJlY2VudGx5ICovCi0JCWlmIChDb25maWdSZWxvYWRQZW5kaW5nKQorCQlpZiAoQ29uc3Vt ZUludGVycnVwdChJTlRFUlJVUFRfQ09ORklHX1JFTE9BRCkpCiAJCXsKLQkJCUNvbmZpZ1Jl bG9hZFBlbmRpbmcgPSBmYWxzZTsKIAkJCVByb2Nlc3NDb25maWdGaWxlKFBHQ19TSUdIVVAp OwogCQkJU3luY1JlcEluaXRDb25maWcoKTsKIAkJfQpAQCAtMTg2OSw3ICsxODgyLDcgQEAg V2FsU25kV2FpdEZvcldhbChYTG9nUmVjUHRyIGxvYykKIAkJICogb3RoZXJ3aXNlIHdlJ2Qg cG9zc2libHkgZW5kIHVwIHdhaXRpbmcgZm9yIFdBTCB0aGF0IG5ldmVyIGdldHMKIAkJICog d3JpdHRlbiwgYmVjYXVzZSB3YWx3cml0ZXIgaGFzIHNodXQgZG93biBhbHJlYWR5LgogCQkg Ki8KLQkJaWYgKGdvdF9TVE9QUElORykKKwkJaWYgKEludGVycnVwdFBlbmRpbmcoSU5URVJS VVBUX1dBTFNORF9JTklUX1NUT1BQSU5HKSkKIAkJCVhMb2dCYWNrZ3JvdW5kRmx1c2goKTsK IAogCQkvKgpAQCAtMTg5NCw3ICsxOTA3LDcgQEAgV2FsU25kV2FpdEZvcldhbChYTG9nUmVj UHRyIGxvYykKIAkJICogUmVjZW50Rmx1c2hQdHIsIHNvIHdlIGNhbiBzZW5kIGFsbCByZW1h aW5pbmcgZGF0YSBiZWZvcmUgc2h1dHRpbmcKIAkJICogZG93bi4KIAkJICovCi0JCWlmIChn b3RfU1RPUFBJTkcpCisJCWlmIChJbnRlcnJ1cHRQZW5kaW5nKElOVEVSUlVQVF9XQUxTTkRf SU5JVF9TVE9QUElORykpCiAJCXsKIAkJCWlmIChOZWVkVG9XYWl0Rm9yU3RhbmRieXMoUmVj ZW50Rmx1c2hQdHIsICZ3YWl0X2V2ZW50KSkKIAkJCQl3YWl0X2Zvcl9zdGFuZGJ5X2F0X3N0 b3AgPSB0cnVlOwpAQCAtMTk3NiwxMSArMTk4OSwxNSBAQCBXYWxTbmRXYWl0Rm9yV2FsKFhM b2dSZWNQdHIgbG9jKQogCQkJbGFzdF9mbHVzaCA9IG5vdzsKIAkJfQogCi0JCVdhbFNuZFdh aXQod2FrZUV2ZW50cywgc2xlZXB0aW1lLCB3YWl0X2V2ZW50KTsKKwkJV2FsU25kV2FpdCh3 YWtlRXZlbnRzLCBzbGVlcHRpbWUsIHdhaXRfZXZlbnQsCisJCQkJICAgQ2hlY2tGb3JJbnRl cnJ1cHRzTWFzayB8CisJCQkJICAgKHdhaXRfZm9yX3N0YW5kYnlfYXRfc3RvcCA/IDAgOiBJ TlRFUlJVUFRfV0FMU05EX0lOSVRfU1RPUFBJTkcpIHwKKwkJCQkgICBJTlRFUlJVUFRfQ09O RklHX1JFTE9BRCB8CisJCQkJICAgSU5URVJSVVBUX1dBSVRfV0FLRVVQKTsKIAl9CiAKLQkv KiByZWFjdGl2YXRlIGxhdGNoIHNvIFdhbFNuZExvb3Aga25vd3MgdG8gY29udGludWUgKi8K LQlTZXRMYXRjaChNeUxhdGNoKTsKKwkvKiByZWFjdGl2YXRlIGludGVycnVwdCBmbGFnIHNv IFdhbFNuZExvb3Aga25vd3MgdG8gY29udGludWUgKi8KKwlSYWlzZUludGVycnVwdChJTlRF UlJVUFRfV0FJVF9XQUtFVVApOwogCXJldHVybiBSZWNlbnRGbHVzaFB0cjsKIH0KIApAQCAt MjAwNiw3ICsyMDIzLDcgQEAgZXhlY19yZXBsaWNhdGlvbl9jb21tYW5kKGNvbnN0IGNoYXIg KmNtZF9zdHJpbmcpCiAJICogSWYgV0FMIHNlbmRlciBoYXMgYmVlbiB0b2xkIHRoYXQgc2h1 dGRvd24gaXMgZ2V0dGluZyBjbG9zZSwgc3dpdGNoIGl0cwogCSAqIHN0YXR1cyBhY2NvcmRp bmdseSB0byBoYW5kbGUgdGhlIG5leHQgcmVwbGljYXRpb24gY29tbWFuZHMgY29ycmVjdGx5 LgogCSAqLwotCWlmIChnb3RfU1RPUFBJTkcpCisJaWYgKEludGVycnVwdFBlbmRpbmcoSU5U RVJSVVBUX1dBTFNORF9JTklUX1NUT1BQSU5HKSkKIAkJV2FsU25kU2V0U3RhdGUoV0FMU05E U1RBVEVfU1RPUFBJTkcpOwogCiAJLyoKQEAgLTI4NzksNiArMjg5Niw3IEBAIHN0YXRpYyB2 b2lkCiBXYWxTbmRMb29wKFdhbFNuZFNlbmREYXRhQ2FsbGJhY2sgc2VuZF9kYXRhKQogewog CVRpbWVzdGFtcFR6IGxhc3RfZmx1c2ggPSAwOworCWJvb2wJCXN0b3BwaW5nID0gZmFsc2U7 CiAKIAkvKgogCSAqIEluaXRpYWxpemUgdGhlIGxhc3QgcmVwbHkgdGltZXN0YW1wLiBUaGF0 IGVuYWJsZXMgdGltZW91dCBwcm9jZXNzaW5nCkBAIC0yODkzLDE1ICsyOTExLDIxIEBAIFdh bFNuZExvb3AoV2FsU25kU2VuZERhdGFDYWxsYmFjayBzZW5kX2RhdGEpCiAJICovCiAJZm9y ICg7OykKIAl7CisJCS8qCisJCSAqIFJlbWVtYmVyIGlmIHdlIHJlY2VpdmVkIElOVEVSUlVQ VF9XQUxTTkRfSU5JVF9TVE9QUElORyBiZWZvcmUgdGhlCisJCSAqIHByb2Nlc3NpbmcgYmVs b3cgYWxyZWFkeS4KKwkJICovCisJCWlmIChJbnRlcnJ1cHRQZW5kaW5nKElOVEVSUlVQVF9X QUxTTkRfSU5JVF9TVE9QUElORykpCisJCQlzdG9wcGluZyA9IHRydWU7CisKIAkJLyogQ2xl YXIgYW55IGFscmVhZHktcGVuZGluZyB3YWtldXBzICovCi0JCVJlc2V0TGF0Y2goTXlMYXRj aCk7CisJCUNsZWFySW50ZXJydXB0KElOVEVSUlVQVF9XQUlUX1dBS0VVUCk7CiAKIAkJQ0hF Q0tfRk9SX0lOVEVSUlVQVFMoKTsKIAogCQkvKiBQcm9jZXNzIGFueSByZXF1ZXN0cyBvciBz aWduYWxzIHJlY2VpdmVkIHJlY2VudGx5ICovCi0JCWlmIChDb25maWdSZWxvYWRQZW5kaW5n KQorCQlpZiAoQ29uc3VtZUludGVycnVwdChJTlRFUlJVUFRfQ09ORklHX1JFTE9BRCkpCiAJ CXsKLQkJCUNvbmZpZ1JlbG9hZFBlbmRpbmcgPSBmYWxzZTsKIAkJCVByb2Nlc3NDb25maWdG aWxlKFBHQ19TSUdIVVApOwogCQkJU3luY1JlcEluaXRDb25maWcoKTsKIAkJfQpAQCAtMjk1 MywxMyArMjk3NywxMyBAQCBXYWxTbmRMb29wKFdhbFNuZFNlbmREYXRhQ2FsbGJhY2sgc2Vu ZF9kYXRhKQogCQkJfQogCiAJCQkvKgotCQkJICogV2hlbiBTSUdVU1IyIGFycml2ZXMsIHdl IHNlbmQgYW55IG91dHN0YW5kaW5nIGxvZ3MgdXAgdG8gdGhlCi0JCQkgKiBzaHV0ZG93biBj aGVja3BvaW50IHJlY29yZCAoaS5lLiwgdGhlIGxhdGVzdCByZWNvcmQpLCB3YWl0IGZvcgot CQkJICogdGhlbSB0byBiZSByZXBsaWNhdGVkIHRvIHRoZSBzdGFuZGJ5LCBhbmQgZXhpdC4g VGhpcyBtYXkgYmUgYQotCQkJICogbm9ybWFsIHRlcm1pbmF0aW9uIGF0IHNodXRkb3duLCBv ciBhIHByb21vdGlvbiwgdGhlIHdhbHNlbmRlcgotCQkJICogaXMgbm90IHN1cmUgd2hpY2gu CisJCQkgKiBXaGVuIElOVEVSUlVQVF9XQUxTTkRfU1RPUCBhcnJpdmVzLCB3ZSBzZW5kIGFu eSBvdXRzdGFuZGluZworCQkJICogbG9ncyB1cCB0byB0aGUgc2h1dGRvd24gY2hlY2twb2lu dCByZWNvcmQgKGkuZS4sIHRoZSBsYXRlc3QKKwkJCSAqIHJlY29yZCksIHdhaXQgZm9yIHRo ZW0gdG8gYmUgcmVwbGljYXRlZCB0byB0aGUgc3RhbmRieSwgYW5kCisJCQkgKiBleGl0LiBU aGlzIG1heSBiZSBhIG5vcm1hbCB0ZXJtaW5hdGlvbiBhdCBzaHV0ZG93biwgb3IgYQorCQkJ ICogcHJvbW90aW9uLCB0aGUgd2Fsc2VuZGVyIGlzIG5vdCBzdXJlIHdoaWNoLgogCQkJICov Ci0JCQlpZiAoZ290X1NJR1VTUjIpCisJCQlpZiAoSW50ZXJydXB0UGVuZGluZyhJTlRFUlJV UFRfV0FMU05EX1NUT1ApKQogCQkJCVdhbFNuZERvbmUoc2VuZF9kYXRhKTsKIAkJfQogCkBA IC0zMDExLDcgKzMwMzUsMTIgQEAgV2FsU25kTG9vcChXYWxTbmRTZW5kRGF0YUNhbGxiYWNr IHNlbmRfZGF0YSkKIAkJCX0KIAogCQkJLyogU2xlZXAgdW50aWwgc29tZXRoaW5nIGhhcHBl bnMgb3Igd2UgdGltZSBvdXQgKi8KLQkJCVdhbFNuZFdhaXQod2FrZUV2ZW50cywgc2xlZXB0 aW1lLCBXQUlUX0VWRU5UX1dBTF9TRU5ERVJfTUFJTik7CisJCQlXYWxTbmRXYWl0KHdha2VF dmVudHMsIHNsZWVwdGltZSwgV0FJVF9FVkVOVF9XQUxfU0VOREVSX01BSU4sCisJCQkJCSAg IENoZWNrRm9ySW50ZXJydXB0c01hc2sgfAorCQkJCQkgICAoc3RvcHBpbmcgPyAwIDogSU5U RVJSVVBUX1dBTFNORF9JTklUX1NUT1BQSU5HKSB8CisJCQkJCSAgIElOVEVSUlVQVF9DT05G SUdfUkVMT0FEIHwKKwkJCQkJICAgSU5URVJSVVBUX1dBSVRfV0FLRVVQCisJCQkJKTsKIAkJ fQogCX0KIH0KQEAgLTMwNDksNiArMzA3OCw3IEBAIEluaXRXYWxTZW5kZXJTbG90KHZvaWQp CiAJCQkvKgogCQkJICogRm91bmQgYSBmcmVlIHNsb3QuIFJlc2VydmUgaXQgZm9yIHVzLgog CQkJICovCisJCQl3YWxzbmQtPnBncHJvY25vID0gTXlQcm9jTnVtYmVyOwogCQkJd2Fsc25k LT5waWQgPSBNeVByb2NQaWQ7CiAJCQl3YWxzbmQtPnN0YXRlID0gV0FMU05EU1RBVEVfU1RB UlRVUDsKIAkJCXdhbHNuZC0+c2VudFB0ciA9IEludmFsaWRYTG9nUmVjUHRyOwpAQCAtMzEw NSw2ICszMTM1LDcgQEAgV2FsU25kS2lsbChpbnQgY29kZSwgRGF0dW0gYXJnKQogCVNwaW5M b2NrQWNxdWlyZSgmd2Fsc25kLT5tdXRleCk7CiAJLyogTWFyayBXYWxTbmQgc3RydWN0IGFz IG5vIGxvbmdlciBiZWluZyBpbiB1c2UuICovCiAJd2Fsc25kLT5waWQgPSAwOworCXdhbHNu ZC0+cGdwcm9jbm8gPSAwOwogCVNwaW5Mb2NrUmVsZWFzZSgmd2Fsc25kLT5tdXRleCk7CiB9 CiAKQEAgLTMxOTksNyArMzIzMCw3IEBAIFhMb2dTZW5kUGh5c2ljYWwodm9pZCkKIAlTaXpl CQlyYnl0ZXM7CiAKIAkvKiBJZiByZXF1ZXN0ZWQgc3dpdGNoIHRoZSBXQUwgc2VuZGVyIHRv IHRoZSBzdG9wcGluZyBzdGF0ZS4gKi8KLQlpZiAoZ290X1NUT1BQSU5HKQorCWlmIChJbnRl cnJ1cHRQZW5kaW5nKElOVEVSUlVQVF9XQUxTTkRfSU5JVF9TVE9QUElORykpCiAJCVdhbFNu ZFNldFN0YXRlKFdBTFNORFNUQVRFX1NUT1BQSU5HKTsKIAogCWlmIChzdHJlYW1pbmdEb25l U2VuZGluZykKQEAgLTM1NjgsOCArMzU5OSw4IEBAIFhMb2dTZW5kTG9naWNhbCh2b2lkKQog CSAqIHRlcm1pbmF0ZSB0aGUgY29ubmVjdGlvbiBpbiBhbiBvcmRlcmx5IG1hbm5lciwgYWZ0 ZXIgd3JpdGluZyBvdXQgYWxsCiAJICogdGhlIHBlbmRpbmcgZGF0YS4KIAkgKi8KLQlpZiAo V2FsU25kQ2F1Z2h0VXAgJiYgZ290X1NUT1BQSU5HKQotCQlnb3RfU0lHVVNSMiA9IHRydWU7 CisJaWYgKFdhbFNuZENhdWdodFVwICYmIEludGVycnVwdFBlbmRpbmcoSU5URVJSVVBUX1dB TFNORF9JTklUX1NUT1BQSU5HKSkKKwkJUmFpc2VJbnRlcnJ1cHQoSU5URVJSVVBUX1dBTFNO RF9TVE9QKTsKIAogCS8qIFVwZGF0ZSBzaGFyZWQgbWVtb3J5IHN0YXR1cyAqLwogCXsKQEAg LTM2ODYsNTIgKzM3MTcsNDMgQEAgV2FsU25kUnFzdEZpbGVSZWxvYWQodm9pZCkKIAl9CiB9 CiAKLS8qCi0gKiBIYW5kbGUgUFJPQ1NJR19XQUxTTkRfSU5JVF9TVE9QUElORyBzaWduYWwu Ci0gKi8KLXZvaWQKLUhhbmRsZVdhbFNuZEluaXRTdG9wcGluZyh2b2lkKQotewotCUFzc2Vy dChhbV93YWxzZW5kZXIpOwotCi0JLyoKLQkgKiBJZiByZXBsaWNhdGlvbiBoYXMgbm90IHll dCBzdGFydGVkLCBkaWUgbGlrZSB3aXRoIFNJR1RFUk0uIElmCi0JICogcmVwbGljYXRpb24g aXMgYWN0aXZlLCBvbmx5IHNldCBhIGZsYWcgYW5kIHdha2UgdXAgdGhlIG1haW4gbG9vcC4g SXQKLQkgKiB3aWxsIHNlbmQgYW55IG91dHN0YW5kaW5nIFdBTCwgd2FpdCBmb3IgaXQgdG8g YmUgcmVwbGljYXRlZCB0byB0aGUKLQkgKiBzdGFuZGJ5LCBhbmQgdGhlbiBleGl0IGdyYWNl ZnVsbHkuCi0JICovCi0JaWYgKCFyZXBsaWNhdGlvbl9hY3RpdmUpCi0JCWtpbGwoTXlQcm9j UGlkLCBTSUdURVJNKTsKLQllbHNlCi0JCWdvdF9TVE9QUElORyA9IHRydWU7Ci19Ci0KIC8q CiAgKiBTSUdVU1IyOiBzZXQgZmxhZyB0byBkbyBhIGxhc3QgY3ljbGUgYW5kIHNodXQgZG93 biBhZnRlcndhcmRzLiBUaGUgV0FMCiAgKiBzZW5kZXIgc2hvdWxkIGFscmVhZHkgaGF2ZSBi ZWVuIHN3aXRjaGVkIHRvIFdBTFNORFNUQVRFX1NUT1BQSU5HIGF0CiAgKiB0aGlzIHBvaW50 LgorICoKKyAqIFhYWDogVGhpcyBpcyBzdGlsbCBuZWVkZWQgYmVjYXVzZSB0aGUgcG9zdG1h c3RlciBjYW5ub3Qgc2VuZAorICogSU5URVJSVVBUX1dBTFNORF9TVE9QIGRpcmVjdGx5Lgog ICovCiBzdGF0aWMgdm9pZAogV2FsU25kTGFzdEN5Y2xlSGFuZGxlcihTSUdOQUxfQVJHUykK IHsKLQlnb3RfU0lHVVNSMiA9IHRydWU7Ci0JU2V0TGF0Y2goTXlMYXRjaCk7CisJUmFpc2VJ bnRlcnJ1cHQoSU5URVJSVVBUX1dBTFNORF9TVE9QKTsKIH0KIAogLyogU2V0IHVwIHNpZ25h bCBoYW5kbGVycyAqLwogdm9pZAogV2FsU25kU2lnbmFscyh2b2lkKQogewotCS8qIFNldCB1 cCBzaWduYWwgaGFuZGxlcnMgKi8KLQlwcXNpZ25hbChTSUdIVVAsIFNpZ25hbEhhbmRsZXJG b3JDb25maWdSZWxvYWQpOwotCXBxc2lnbmFsKFNJR0lOVCwgU3RhdGVtZW50Q2FuY2VsSGFu ZGxlcik7CS8qIHF1ZXJ5IGNhbmNlbCAqLwotCXBxc2lnbmFsKFNJR1RFUk0sIGRpZSk7CQkv KiByZXF1ZXN0IHNodXRkb3duICovCi0JLyogU0lHUVVJVCBoYW5kbGVyIHdhcyBhbHJlYWR5 IHNldCB1cCBieSBJbml0UG9zdG1hc3RlckNoaWxkICovCisJLyogU2V0IHVwIGludGVycnVw dCBoYW5kbGVycyAqLwogCUluaXRpYWxpemVUaW1lb3V0cygpOwkJLyogZXN0YWJsaXNoZXMg U0lHQUxSTSBoYW5kbGVyICovCi0JcHFzaWduYWwoU0lHUElQRSwgU0lHX0lHTik7Ci0JcHFz aWduYWwoU0lHVVNSMSwgcHJvY3NpZ25hbF9zaWd1c3IxX2hhbmRsZXIpOwotCXBxc2lnbmFs KFNJR1VTUjIsIFdhbFNuZExhc3RDeWNsZUhhbmRsZXIpOwkvKiByZXF1ZXN0IGEgbGFzdCBj eWNsZSBhbmQKLQkJCQkJCQkJCQkJCSAqIHNodXRkb3duICovCisKKwkvKgorCSAqIElmIHJl cGxpY2F0aW9uIGhhcyBub3QgeWV0IHN0YXJ0ZWQsIGRpZSBsaWtlIHdpdGggU0lHVEVSTS4g V2hlbgorCSAqIHJlcGxpY2F0aW9uIHN0YXJ0cywgd2UgZGlzYWJsZSB0aGlzIGhhbmRsZXIg YW5kIGNoZWNrIHRoZSBmbGFnCisJICogZXhwbGljaXRseS4gVGhlIG1haW4gbG9vcCB3aWxs IHNlbmQgYW55IG91dHN0YW5kaW5nIFdBTCwgd2FpdCBmb3IgaXQgdG8KKwkgKiBiZSByZXBs aWNhdGVkIHRvIHRoZSBzdGFuZGJ5LCBhbmQgdGhlbiBleGl0IGdyYWNlZnVsbHkuCisJICov CisJU2V0SW50ZXJydXB0SGFuZGxlcihJTlRFUlJVUFRfV0FMU05EX0lOSVRfU1RPUFBJTkcs IFByb2Nlc3NUZXJtaW5hdGVJbnRlcnJ1cHQpOworCUVuYWJsZUludGVycnVwdChJTlRFUlJV UFRfV0FMU05EX0lOSVRfU1RPUFBJTkcpOworCisJLyoKKwkgKiBPbiBJTlRFUlJVUFRfV0FM U05EX1NUT1AgaXMgdXNlZCB0byBmbHVzaCByZW1haW5pbmcgV0FMICh0aGUgc2h1dGRvd24K KwkgKiBjaGVja3BvaW50IHJlY29yZCkgYW5kIGV4aXQuIFdlIGNoZWNrIGZvciB0aGF0IGV4 cGxpY2l0bHksIHNvIG5vCisJICogaGFuZGxlciBmdW5jdGlvbi4gUG9zdG1hc3RlciBjYW5u b3Qgc2VuZCB0aGUgaW50ZXJydXB0IGRpcmVjdGx5LCBzbyB3ZQorCSAqIHNldCB1cCBhIFVu aXggc2lnbmFsIGhhbmRsZXIgdG8gcmFpc2UgaXQuCisJICovCisJcHFzaWduYWwoU0lHVVNS MiwgV2FsU25kTGFzdEN5Y2xlSGFuZGxlcik7CiB9CiAKIC8qIFJlcG9ydCBzaGFyZWQtbWVt b3J5IHNwYWNlIG5lZWRlZCBieSBXYWxTbmRTaG1lbUluaXQgKi8KQEAgLTM4MTQsMjQgKzM4 MzYsMjggQEAgV2FsU25kV2FrZXVwKGJvb2wgcGh5c2ljYWwsIGJvb2wgbG9naWNhbCkKICAq IG9uIHBvc3RtYXN0ZXIgZGVhdGguCiAgKi8KIHN0YXRpYyB2b2lkCi1XYWxTbmRXYWl0KHVp bnQzMiBzb2NrZXRfZXZlbnRzLCBsb25nIHRpbWVvdXQsIHVpbnQzMiB3YWl0X2V2ZW50KQor V2FsU25kV2FpdCh1aW50MzIgc29ja2V0X2V2ZW50cywgbG9uZyB0aW1lb3V0LCB1aW50MzIg d2FpdF9ldmVudCwgdWludDMyIGludGVycnVwdE1hc2spCiB7CiAJV2FpdEV2ZW50CWV2ZW50 OwogCi0JTW9kaWZ5V2FpdEV2ZW50KEZlQmVXYWl0U2V0LCBGZUJlV2FpdFNldFNvY2tldFBv cywgc29ja2V0X2V2ZW50cywgTlVMTCk7CisJLyogZm9yIGNvbmRpdGlvbiB2YXJpYWJsZXMg Ki8KKwlpbnRlcnJ1cHRNYXNrIHw9IElOVEVSUlVQVF9XQUlUX1dBS0VVUDsKKworCU1vZGlm eVdhaXRFdmVudChGZUJlV2FpdFNldCwgRmVCZVdhaXRTZXRTb2NrZXRQb3MsIHNvY2tldF9l dmVudHMsIDApOworCU1vZGlmeVdhaXRFdmVudChGZUJlV2FpdFNldCwgRmVCZVdhaXRTZXRJ bnRlcnJ1cHRQb3MsIFdMX0lOVEVSUlVQVCwgaW50ZXJydXB0TWFzayk7CiAKIAkvKgogCSAq IFdlIHVzZSBhIGNvbmRpdGlvbiB2YXJpYWJsZSB0byBlZmZpY2llbnRseSB3YWtlIHVwIHdh bHNlbmRlcnMgaW4KIAkgKiBXYWxTbmRXYWtldXAoKS4KIAkgKgogCSAqIEV2ZXJ5IHdhbHNl bmRlciBwcmVwYXJlcyB0byBzbGVlcCBvbiBhIHNoYXJlZCBtZW1vcnkgQ1YuIE5vdGUgdGhh dCBpdAotCSAqIGp1c3QgcHJlcGFyZXMgdG8gc2xlZXAgb24gdGhlIENWIChpLmUuLCBhZGRz IGl0c2VsZiB0byB0aGUgQ1YncwotCSAqIHdhaXRsaXN0KSwgYnV0IGRvZXMgbm90IGFjdHVh bGx5IHdhaXQgb24gdGhlIENWIChJT1csIGl0IG5ldmVyIGNhbGxzCi0JICogQ29uZGl0aW9u VmFyaWFibGVTbGVlcCgpKS4gSXQgc3RpbGwgdXNlcyBXYWl0RXZlbnRTZXRXYWl0KCkgZm9y Ci0JICogd2FpdGluZywgYmVjYXVzZSB3ZSBhbHNvIG5lZWQgdG8gd2FpdCBmb3Igc29ja2V0 IGV2ZW50cy4gVGhlIHByb2Nlc3NlcwotCSAqIChzdGFydHVwIHByb2Nlc3MsIHdhbHJlY2Vp dmVyIGV0Yy4pIHdhbnRpbmcgdG8gd2FrZSB1cCB3YWxzZW5kZXJzIHVzZQotCSAqIENvbmRp dGlvblZhcmlhYmxlQnJvYWRjYXN0KCksIHdoaWNoIGluIHR1cm4gY2FsbHMgU2V0TGF0Y2go KSwgaGVscGluZwotCSAqIHdhbHNlbmRlcnMgY29tZSBvdXQgb2YgV2FpdEV2ZW50U2V0V2Fp dCgpLgorCSAqIGp1c3QgcHJlcGFyZXMgdG8gc2xlZXAgb24gdGhlIENWIHdhaXRsaXN0KSwg YnV0IGRvZXMgbm90IGFjdHVhbGx5IHdhaXQKKwkgKiBvbiB0aGUgQ1YgKElPVywgaXQgbmV2 ZXIgY2FsbHMgQ29uZGl0aW9uVmFyaWFibGVTbGVlcCgpKS4gSXQgc3RpbGwgdXNlcworCSAq IFdhaXRFdmVudFNldFdhaXQoKSBmb3Igd2FpdGluZywgYmVjYXVzZSB3ZSBhbHNvIG5lZWQg dG8gd2FpdCBmb3Igc29ja2V0CisJICogZXZlbnRzLiBUaGUgcHJvY2Vzc2VzIChzdGFydHVw IHByb2Nlc3MsIHdhbHJlY2VpdmVyIGV0Yy4pIHdhbnRpbmcgdG8KKwkgKiB3YWtlIHVwIHdh bHNlbmRlcnMgdXNlIENvbmRpdGlvblZhcmlhYmxlQnJvYWRjYXN0KCksIHdoaWNoIGluIHR1 cm4KKwkgKiBjYWxscyBTZW5kSW50ZXJydXB0KCksIGhlbHBpbmcgd2Fsc2VuZGVycyBjb21l IG91dCBvZgorCSAqIFdhaXRFdmVudFNldFdhaXQoKS4KIAkgKgogCSAqIFRoaXMgYXBwcm9h Y2ggaXMgc2ltcGxlIGFuZCBlZmZpY2llbnQgYmVjYXVzZSwgb25lIGRvZXNuJ3QgaGF2ZSB0 byBsb29wCiAJICogdGhyb3VnaCBhbGwgdGhlIHdhbHNlbmRlcnMgc2xvdHMsIHdpdGggYSBz cGlubG9jayBhY3F1aXNpdGlvbiBhbmQKQEAgLTM4NzksMTYgKzM5MDUsMTYgQEAgV2FsU25k SW5pdFN0b3BwaW5nKHZvaWQpCiAJZm9yIChpID0gMDsgaSA8IG1heF93YWxfc2VuZGVyczsg aSsrKQogCXsKIAkJV2FsU25kCSAgICp3YWxzbmQgPSAmV2FsU25kQ3RsLT53YWxzbmRzW2ld OwotCQlwaWRfdAkJcGlkOworCQlQcm9jTnVtYmVyCXByb2NubzsKIAogCQlTcGluTG9ja0Fj cXVpcmUoJndhbHNuZC0+bXV0ZXgpOwotCQlwaWQgPSB3YWxzbmQtPnBpZDsKKwkJcHJvY25v ID0gd2Fsc25kLT5wZ3Byb2NubzsKIAkJU3BpbkxvY2tSZWxlYXNlKCZ3YWxzbmQtPm11dGV4 KTsKIAotCQlpZiAocGlkID09IDApCisJCWlmIChwcm9jbm8gPT0gSU5WQUxJRF9QUk9DX05V TUJFUikKIAkJCWNvbnRpbnVlOwogCi0JCVNlbmRQcm9jU2lnbmFsKHBpZCwgUFJPQ1NJR19X QUxTTkRfSU5JVF9TVE9QUElORywgSU5WQUxJRF9QUk9DX05VTUJFUik7CisJCVNlbmRJbnRl cnJ1cHQoSU5URVJSVVBUX1dBTFNORF9JTklUX1NUT1BQSU5HLCBwcm9jbm8pOwogCX0KIH0K IApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvLmMgYi9zcmMvYmFj a2VuZC9zdG9yYWdlL2Fpby9haW8uYwppbmRleCBkMmM5Y2Q2ZjIwYS4uNjRkZjM4NDY1NmIg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL2Fpby5jCisrKyBiL3NyYy9i YWNrZW5kL3N0b3JhZ2UvYWlvL2Fpby5jCkBAIC0zOTAsNyArMzkwLDcgQEAgcGdhaW9faW9f dXBkYXRlX3N0YXRlKFBnQWlvSGFuZGxlICppb2gsIFBnQWlvSGFuZGxlU3RhdGUgbmV3X3N0 YXRlKQogCSAqIGludGVycnVwdCBwcm9jZXNzaW5nIGNvdWxkIHdhaXQgZm9yIHRoZSBJTyB0 byBjb21wbGV0ZSwgd2hpbGUgaW4gYW4KIAkgKiBpbnRlcm1lZGlhcnkgc3RhdGUuCiAJICov Ci0JQXNzZXJ0KCFJTlRFUlJVUFRTX0NBTl9CRV9QUk9DRVNTRUQoKSk7CisJQXNzZXJ0KENo ZWNrRm9ySW50ZXJydXB0c01hc2sgPT0gMCk7CiAKIAlwZ2Fpb19kZWJ1Z19pbyhERUJVRzUs IGlvaCwKIAkJCQkgICAidXBkYXRpbmcgc3RhdGUgdG8gJXMiLApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvX2lvLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2Fp by9haW9faW8uYwppbmRleCA3MmI0YzlmZWIzYS4uNzg3ODliM2Y4ZjMgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL2Fpb19pby5jCisrKyBiL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvYWlvL2Fpb19pby5jCkBAIC0xNjQsNyArMTY0LDcgQEAgcGdhaW9faW9fYmVmb3Jl X3N0YXJ0KFBnQWlvSGFuZGxlICppb2gpCiAJICogT3RoZXJ3aXNlIHRoZSBGRHMgcmVmZXJl bmNlZCBieSB0aGUgSU8gY291bGQgYmUgY2xvc2VkIGR1ZSB0byBpbnRlcnJ1cHQKIAkgKiBw cm9jZXNzaW5nLgogCSAqLwotCUFzc2VydCghSU5URVJSVVBUU19DQU5fQkVfUFJPQ0VTU0VE KCkpOworCUFzc2VydChDaGVja0ZvckludGVycnVwdHNNYXNrID09IDApOwogfQogCiAvKgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vbWV0aG9kX3dvcmtlci5jIGIv c3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vbWV0aG9kX3dvcmtlci5jCmluZGV4IGQ3YzE0NGNk OGY3Li4yNWYxODAwY2Q2ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8v bWV0aG9kX3dvcmtlci5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF93 b3JrZXIuYwpAQCAtMTMsNyArMTMsNyBAQAogICoKICAqIFNvIHRoYXQgdGhlIHN1Ym1pdHRl ciBjYW4gbWFrZSBqdXN0IG9uZSBzeXN0ZW0gY2FsbCB3aGVuIHN1Ym1pdHRpbmcgYSBiYXRj aAogICogb2YgSU9zLCB3YWtldXBzICJmYW4gb3V0IjsgZWFjaCB3b2tlbiBJTyB3b3JrZXIg Y2FuIHdha2UgdHdvIG1vcmUuIFhYWCBUaGlzCi0gKiBjb3VsZCBiZSBpbXByb3ZlZCBieSB1 c2luZyBmdXRleGVzIGluc3RlYWQgb2YgbGF0Y2hlcyB0byB3YWtlIE4gd2FpdGVycy4KKyAq IGNvdWxkIGJlIGltcHJvdmVkIGJ5IHVzaW5nIGZ1dGV4ZXMgaW5zdGVhZCBvZiBpbnRlcnJ1 cHRzIHRvIHdha2UgTiB3YWl0ZXJzLgogICoKICAqIFRoaXMgbWV0aG9kIG9mIEFJTyBpcyBh dmFpbGFibGUgaW4gYWxsIGJ1aWxkcyBvbiBhbGwgb3BlcmF0aW5nIHN5c3RlbXMsIGFuZAog ICogaXMgdGhlIGRlZmF1bHQuCkBAIC0yOSwxNyArMjksMTYgQEAKIAogI2luY2x1ZGUgInBv c3RncmVzLmgiCiAKKyNpbmNsdWRlICJpcGMvc2lnbmFsX2hhbmRsZXJzLmgiCiAjaW5jbHVk ZSAibGlicHEvcHFzaWduYWwuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRl ICJwb3J0L3BnX2JpdHV0aWxzLmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9hdXhwcm9jZXNz LmgiCi0jaW5jbHVkZSAicG9zdG1hc3Rlci9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJzdG9y YWdlL2Fpby5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYWlvX2ludGVybmFsLmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9haW9fc3Vic3lzLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9pb193b3JrZXIu aCIKICNpbmNsdWRlICJzdG9yYWdlL2lwYy5oIgotI2luY2x1ZGUgInN0b3JhZ2UvbGF0Y2gu aCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKICNpbmNsdWRlICJ0Y29wL3Rjb3Bwcm90 LmgiCiAjaW5jbHVkZSAidXRpbHMvaW5qZWN0aW9uX3BvaW50LmgiCkBAIC02Miw3ICs2MSw3 IEBAIHR5cGVkZWYgc3RydWN0IFBnQWlvV29ya2VyU3VibWlzc2lvblF1ZXVlCiAKIHR5cGVk ZWYgc3RydWN0IFBnQWlvV29ya2VyU2xvdAogewotCUxhdGNoCSAgICpsYXRjaDsKKwlQcm9j TnVtYmVyCXByb2NubzsKIAlib29sCQlpbl91c2U7CiB9IFBnQWlvV29ya2VyU2xvdDsKIApA QCAtMTU0LDcgKzE1Myw3IEBAIHBnYWlvX3dvcmtlcl9zaG1lbV9pbml0KGJvb2wgZmlyc3Rf dGltZSkKIAkJaW9fd29ya2VyX2NvbnRyb2wtPmlkbGVfd29ya2VyX21hc2sgPSAwOwogCQlm b3IgKGludCBpID0gMDsgaSA8IE1BWF9JT19XT1JLRVJTOyArK2kpCiAJCXsKLQkJCWlvX3dv cmtlcl9jb250cm9sLT53b3JrZXJzW2ldLmxhdGNoID0gTlVMTDsKKwkJCWlvX3dvcmtlcl9j b250cm9sLT53b3JrZXJzW2ldLnByb2NubyA9IElOVkFMSURfUFJPQ19OVU1CRVI7CiAJCQlp b193b3JrZXJfY29udHJvbC0+d29ya2Vyc1tpXS5pbl91c2UgPSBmYWxzZTsKIAkJfQogCX0K QEAgLTI0NCw3ICsyNDMsNyBAQCBwZ2Fpb193b3JrZXJfc3VibWl0X2ludGVybmFsKGludCBu dW1fc3RhZ2VkX2lvcywgUGdBaW9IYW5kbGUgKipzdGFnZWRfaW9zKQogewogCVBnQWlvSGFu ZGxlICpzeW5jaHJvbm91c19pb3NbUEdBSU9fU1VCTUlUX0JBVENIX1NJWkVdOwogCWludAkJ CW5zeW5jID0gMDsKLQlMYXRjaAkgICAqd2FrZXVwID0gTlVMTDsKKwlQcm9jTnVtYmVyCXdh a2V1cCA9IElOVkFMSURfUFJPQ19OVU1CRVI7CiAJaW50CQkJd29ya2VyOwogCiAJQXNzZXJ0 KG51bV9zdGFnZWRfaW9zIDw9IFBHQUlPX1NVQk1JVF9CQVRDSF9TSVpFKTsKQEAgLTI2Mywy MiArMjYyLDI0IEBAIHBnYWlvX3dvcmtlcl9zdWJtaXRfaW50ZXJuYWwoaW50IG51bV9zdGFn ZWRfaW9zLCBQZ0Fpb0hhbmRsZSAqKnN0YWdlZF9pb3MpCiAJCQljb250aW51ZTsKIAkJfQog Ci0JCWlmICh3YWtldXAgPT0gTlVMTCkKKwkJaWYgKHdha2V1cCA9PSBJTlZBTElEX1BST0Nf TlVNQkVSKQogCQl7CiAJCQkvKiBDaG9vc2UgYW4gaWRsZSB3b3JrZXIgdG8gd2FrZSB1cCBp ZiB3ZSBoYXZlbid0IGFscmVhZHkuICovCiAJCQl3b3JrZXIgPSBwZ2Fpb193b3JrZXJfY2hv b3NlX2lkbGUoKTsKIAkJCWlmICh3b3JrZXIgPj0gMCkKLQkJCQl3YWtldXAgPSBpb193b3Jr ZXJfY29udHJvbC0+d29ya2Vyc1t3b3JrZXJdLmxhdGNoOworCQkJCXdha2V1cCA9IGlvX3dv cmtlcl9jb250cm9sLT53b3JrZXJzW3dvcmtlcl0ucHJvY25vOwogCi0JCQlwZ2Fpb19kZWJ1 Z19pbyhERUJVRzQsIHN0YWdlZF9pb3NbaV0sCisJCQlwZ2Fpb19kZWJ1Z19pbyhMT0csIHN0 YWdlZF9pb3NbaV0sCiAJCQkJCQkgICAiY2hvb3Npbmcgd29ya2VyICVkIiwKIAkJCQkJCSAg IHdvcmtlcik7CiAJCX0KIAl9CiAJTFdMb2NrUmVsZWFzZShBaW9Xb3JrZXJTdWJtaXNzaW9u UXVldWVMb2NrKTsKIAotCWlmICh3YWtldXApCi0JCVNldExhdGNoKHdha2V1cCk7CisJaWYg KHdha2V1cCAhPSBJTlZBTElEX1BST0NfTlVNQkVSKQorCXsKKwkJU2VuZEludGVycnVwdChJ TlRFUlJVUFRfV0FJVF9XQUtFVVAsIHdha2V1cCk7CisJfQogCiAJLyogUnVuIHdoYXRldmVy IGlzIGxlZnQgc3luY2hyb25vdXNseS4gKi8KIAlpZiAobnN5bmMgPiAwKQpAQCAtMzE0LDEx ICszMTUsMTEgQEAgcGdhaW9fd29ya2VyX2RpZShpbnQgY29kZSwgRGF0dW0gYXJnKQogewog CUxXTG9ja0FjcXVpcmUoQWlvV29ya2VyU3VibWlzc2lvblF1ZXVlTG9jaywgTFdfRVhDTFVT SVZFKTsKIAlBc3NlcnQoaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcnNbTXlJb1dvcmtlcklk XS5pbl91c2UpOwotCUFzc2VydChpb193b3JrZXJfY29udHJvbC0+d29ya2Vyc1tNeUlvV29y a2VySWRdLmxhdGNoID09IE15TGF0Y2gpOworCUFzc2VydChpb193b3JrZXJfY29udHJvbC0+ d29ya2Vyc1tNeUlvV29ya2VySWRdLnByb2NubyA9PSBNeVByb2NOdW1iZXIpOwogCiAJaW9f d29ya2VyX2NvbnRyb2wtPmlkbGVfd29ya2VyX21hc2sgJj0gfihVSU5UNjRfQygxKSA8PCBN eUlvV29ya2VySWQpOwogCWlvX3dvcmtlcl9jb250cm9sLT53b3JrZXJzW015SW9Xb3JrZXJJ ZF0uaW5fdXNlID0gZmFsc2U7Ci0JaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcnNbTXlJb1dv cmtlcklkXS5sYXRjaCA9IE5VTEw7CisJaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcnNbTXlJ b1dvcmtlcklkXS5wcm9jbm8gPSBJTlZBTElEX1BST0NfTlVNQkVSOwogCUxXTG9ja1JlbGVh c2UoQWlvV29ya2VyU3VibWlzc2lvblF1ZXVlTG9jayk7CiB9CiAKQEAgLTM0MSwyMCArMzQy LDIwIEBAIHBnYWlvX3dvcmtlcl9yZWdpc3Rlcih2b2lkKQogCXsKIAkJaWYgKCFpb193b3Jr ZXJfY29udHJvbC0+d29ya2Vyc1tpXS5pbl91c2UpCiAJCXsKLQkJCUFzc2VydChpb193b3Jr ZXJfY29udHJvbC0+d29ya2Vyc1tpXS5sYXRjaCA9PSBOVUxMKTsKKwkJCUFzc2VydChpb193 b3JrZXJfY29udHJvbC0+d29ya2Vyc1tpXS5wcm9jbm8gPT0gSU5WQUxJRF9QUk9DX05VTUJF Uik7CiAJCQlpb193b3JrZXJfY29udHJvbC0+d29ya2Vyc1tpXS5pbl91c2UgPSB0cnVlOwog CQkJTXlJb1dvcmtlcklkID0gaTsKIAkJCWJyZWFrOwogCQl9CiAJCWVsc2UKLQkJCUFzc2Vy dChpb193b3JrZXJfY29udHJvbC0+d29ya2Vyc1tpXS5sYXRjaCAhPSBOVUxMKTsKKwkJCUFz c2VydChpb193b3JrZXJfY29udHJvbC0+d29ya2Vyc1tpXS5wcm9jbm8gIT0gSU5WQUxJRF9Q Uk9DX05VTUJFUik7CiAJfQogCiAJaWYgKE15SW9Xb3JrZXJJZCA9PSAtMSkKIAkJZWxvZyhF UlJPUiwgImNvdWxkbid0IGZpbmQgYSBmcmVlIHdvcmtlciBzbG90Iik7CiAKIAlpb193b3Jr ZXJfY29udHJvbC0+aWRsZV93b3JrZXJfbWFzayB8PSAoVUlOVDY0X0MoMSkgPDwgTXlJb1dv cmtlcklkKTsKLQlpb193b3JrZXJfY29udHJvbC0+d29ya2Vyc1tNeUlvV29ya2VySWRdLmxh dGNoID0gTXlMYXRjaDsKKwlpb193b3JrZXJfY29udHJvbC0+d29ya2Vyc1tNeUlvV29ya2Vy SWRdLnByb2NubyA9IE15UHJvY051bWJlcjsKIAlMV0xvY2tSZWxlYXNlKEFpb1dvcmtlclN1 Ym1pc3Npb25RdWV1ZUxvY2spOwogCiAJb25fc2htZW1fZXhpdChwZ2Fpb193b3JrZXJfZGll LCAwKTsKQEAgLTM5MywyMCArMzk0LDIwIEBAIElvV29ya2VyTWFpbihjb25zdCB2b2lkICpz dGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKQogCU15QmFja2VuZFR5cGUg PSBCX0lPX1dPUktFUjsKIAlBdXhpbGlhcnlQcm9jZXNzTWFpbkNvbW1vbigpOwogCi0JcHFz aWduYWwoU0lHSFVQLCBTaWduYWxIYW5kbGVyRm9yQ29uZmlnUmVsb2FkKTsKLQlwcXNpZ25h bChTSUdJTlQsIGRpZSk7CQkvKiB0byBhbGxvdyBtYW51YWxseSB0cmlnZ2VyaW5nIHdvcmtl ciByZXN0YXJ0ICovCisJLyogeHh4OiB0aGlzIHVzZWQgJ2RpZScuIEFueSByZWFzb24/ICov CisJcHFzaWduYWwoU0lHSU5ULCBTaWduYWxIYW5kbGVyRm9yU2h1dGRvd25SZXF1ZXN0KTsJ LyogdG8gYWxsb3cgbWFudWFsbHkKKwkJCQkJCQkJCQkJCQkJICogdHJpZ2dlcmluZyB3b3Jr ZXIKKwkJCQkJCQkJCQkJCQkJICogcmVzdGFydCAqLwogCiAJLyoKIAkgKiBJZ25vcmUgU0lH VEVSTSwgd2lsbCBnZXQgZXhwbGljaXQgc2h1dGRvd24gdmlhIFNJR1VTUjIgbGF0ZXIgaW4g dGhlCiAJICogc2h1dGRvd24gc2VxdWVuY2UsIHNpbWlsYXIgdG8gY2hlY2twb2ludGVyLgog CSAqLwogCXBxc2lnbmFsKFNJR1RFUk0sIFNJR19JR04pOwotCS8qIFNJR1FVSVQgaGFuZGxl ciB3YXMgYWxyZWFkeSBzZXQgdXAgYnkgSW5pdFBvc3RtYXN0ZXJDaGlsZCAqLwotCXBxc2ln bmFsKFNJR0FMUk0sIFNJR19JR04pOwotCXBxc2lnbmFsKFNJR1BJUEUsIFNJR19JR04pOwot CXBxc2lnbmFsKFNJR1VTUjEsIHByb2NzaWduYWxfc2lndXNyMV9oYW5kbGVyKTsKIAlwcXNp Z25hbChTSUdVU1IyLCBTaWduYWxIYW5kbGVyRm9yU2h1dGRvd25SZXF1ZXN0KTsKIAorCVNl dFN0YW5kYXJkSW50ZXJydXB0SGFuZGxlcnMoKTsKKwogCS8qIGFsc28gcmVnaXN0ZXJzIGEg c2h1dGRvd24gY2FsbGJhY2sgdG8gdW5yZWdpc3RlciAqLwogCXBnYWlvX3dvcmtlcl9yZWdp c3RlcigpOwogCkBAIC00NTQsMTEgKzQ1NSwxMSBAQCBJb1dvcmtlck1haW4oY29uc3Qgdm9p ZCAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbikKIAogCXNpZ3Byb2Nt YXNrKFNJR19TRVRNQVNLLCAmVW5CbG9ja1NpZywgTlVMTCk7CiAKLQl3aGlsZSAoIVNodXRk b3duUmVxdWVzdFBlbmRpbmcpCisJd2hpbGUgKCFJbnRlcnJ1cHRQZW5kaW5nKElOVEVSUlVQ VF9URVJNSU5BVEUpKQogCXsKIAkJdWludDMyCQlpb19pbmRleDsKLQkJTGF0Y2gJICAgKmxh dGNoZXNbSU9fV09SS0VSX1dBS0VVUF9GQU5PVVRdOwotCQlpbnQJCQlubGF0Y2hlcyA9IDA7 CisJCVByb2NOdW1iZXIJcHJvY25vc1tJT19XT1JLRVJfV0FLRVVQX0ZBTk9VVF07CisJCWlu dAkJCW5wcm9jbm9zID0gMDsKIAkJaW50CQkJbndha2V1cHMgPSAwOwogCQlpbnQJCQl3b3Jr ZXI7CiAKQEAgLTQ5MSwxMyArNDkyLDEzIEBAIElvV29ya2VyTWFpbihjb25zdCB2b2lkICpz dGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKQogCQkJewogCQkJCWlmICgo d29ya2VyID0gcGdhaW9fd29ya2VyX2Nob29zZV9pZGxlKCkpIDwgMCkKIAkJCQkJYnJlYWs7 Ci0JCQkJbGF0Y2hlc1tubGF0Y2hlcysrXSA9IGlvX3dvcmtlcl9jb250cm9sLT53b3JrZXJz W3dvcmtlcl0ubGF0Y2g7CisJCQkJcHJvY25vc1tucHJvY25vcysrXSA9IGlvX3dvcmtlcl9j b250cm9sLT53b3JrZXJzW3dvcmtlcl0ucHJvY25vOwogCQkJfQogCQl9CiAJCUxXTG9ja1Jl bGVhc2UoQWlvV29ya2VyU3VibWlzc2lvblF1ZXVlTG9jayk7CiAKLQkJZm9yIChpbnQgaSA9 IDA7IGkgPCBubGF0Y2hlczsgKytpKQotCQkJU2V0TGF0Y2gobGF0Y2hlc1tpXSk7CisJCWZv ciAoaW50IGkgPSAwOyBpIDwgbnByb2Nub3M7ICsraSkKKwkJCVNlbmRJbnRlcnJ1cHQoSU5U RVJSVVBUX1dBSVRfV0FLRVVQLCBwcm9jbm9zW2ldKTsKIAogCQlpZiAoaW9faW5kZXggIT0g LTEpCiAJCXsKQEAgLTU2OCwxOCArNTY5LDIwIEBAIElvV29ya2VyTWFpbihjb25zdCB2b2lk ICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKQogCQl9CiAJCWVsc2UK IAkJewotCQkJV2FpdExhdGNoKE15TGF0Y2gsIFdMX0xBVENIX1NFVCB8IFdMX0VYSVRfT05f UE1fREVBVEgsIC0xLAotCQkJCQkgIFdBSVRfRVZFTlRfSU9fV09SS0VSX01BSU4pOwotCQkJ UmVzZXRMYXRjaChNeUxhdGNoKTsKKwkJCVdhaXRJbnRlcnJ1cHQoQ2hlY2tGb3JJbnRlcnJ1 cHRzTWFzayB8CisJCQkJCQkgIElOVEVSUlVQVF9DT05GSUdfUkVMT0FEIHwKKwkJCQkJCSAg SU5URVJSVVBUX1RFUk1JTkFURSB8CisJCQkJCQkgIElOVEVSUlVQVF9XQUlUX1dBS0VVUCwK KwkJCQkJCSAgV0xfSU5URVJSVVBUIHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwKKwkJCQkJCSAg LTEsCisJCQkJCQkgIFdBSVRfRVZFTlRfSU9fV09SS0VSX01BSU4pOworCQkJQ2xlYXJJbnRl cnJ1cHQoSU5URVJSVVBUX1dBSVRfV0FLRVVQKTsKIAkJfQogCiAJCUNIRUNLX0ZPUl9JTlRF UlJVUFRTKCk7CiAKLQkJaWYgKENvbmZpZ1JlbG9hZFBlbmRpbmcpCi0JCXsKLQkJCUNvbmZp Z1JlbG9hZFBlbmRpbmcgPSBmYWxzZTsKKwkJaWYgKENvbnN1bWVJbnRlcnJ1cHQoSU5URVJS VVBUX0NPTkZJR19SRUxPQUQpKQogCQkJUHJvY2Vzc0NvbmZpZ0ZpbGUoUEdDX1NJR0hVUCk7 Ci0JCX0KIAl9CiAKIAllcnJvcl9jb250ZXh0X3N0YWNrID0gZXJyY2FsbGJhY2sucHJldmlv dXM7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYyBi L3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCmluZGV4IDNiZDg2MjIzYWJk Li5lNzZhMmE1OTI1NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIv YnVmbWdyLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKQEAg LTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL3N0b3JhZ2UuaCIKICNpbmNsdWRl ICJjYXRhbG9nL3N0b3JhZ2VfeGxvZy5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2luc3RydW1l bnQuaCIKKyNpbmNsdWRlICJpcGMvaW50ZXJydXB0LmgiCiAjaW5jbHVkZSAibGliL2JpbmFy eWhlYXAuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ190cmFjZS5o IgpAQCAtMzM0NSw3ICszMzQ2LDcgQEAgV2FrZVBpbkNvdW50V2FpdGVyKEJ1ZmZlckRlc2Mg KmJ1ZikKIAkJVW5sb2NrQnVmSGRyRXh0KGJ1ZiwgYnVmX3N0YXRlLAogCQkJCQkJMCwgQk1f UElOX0NPVU5UX1dBSVRFUiwKIAkJCQkJCTApOwotCQlQcm9jU2VuZFNpZ25hbCh3YWl0X2Jh Y2tlbmRfcGdwcm9jbm8pOworCQlTZW5kSW50ZXJydXB0KElOVEVSUlVQVF9XQUlUX1dBS0VV UCwgd2FpdF9iYWNrZW5kX3BncHJvY25vKTsKIAl9CiAJZWxzZQogCQlVbmxvY2tCdWZIZHIo YnVmKTsKQEAgLTM1MjUsNyArMzUyNiw3IEBAIEJ1ZmZlclN5bmMoaW50IGZsYWdzKQogCQkJ CQkJMCk7CiAKIAkJLyogQ2hlY2sgZm9yIGJhcnJpZXIgZXZlbnRzIGluIGNhc2UgTkJ1ZmZl cnMgaXMgbGFyZ2UuICovCi0JCWlmIChQcm9jU2lnbmFsQmFycmllclBlbmRpbmcpCisJCWlm IChDb25zdW1lSW50ZXJydXB0KElOVEVSUlVQVF9CQVJSSUVSKSkKIAkJCVByb2Nlc3NQcm9j U2lnbmFsQmFycmllcigpOwogCX0KIApAQCAtMzYwNiw3ICszNjA3LDcgQEAgQnVmZmVyU3lu YyhpbnQgZmxhZ3MpCiAJCXMtPm51bV90b19zY2FuKys7CiAKIAkJLyogQ2hlY2sgZm9yIGJh cnJpZXIgZXZlbnRzLiAqLwotCQlpZiAoUHJvY1NpZ25hbEJhcnJpZXJQZW5kaW5nKQorCQlp ZiAoQ29uc3VtZUludGVycnVwdChJTlRFUlJVUFRfQkFSUklFUikpCiAJCQlQcm9jZXNzUHJv Y1NpZ25hbEJhcnJpZXIoKTsKIAl9CiAKQEAgLTM2OTcsNyArMzY5OCw3IEBAIEJ1ZmZlclN5 bmMoaW50IGZsYWdzKQogCQkvKgogCQkgKiBTbGVlcCB0byB0aHJvdHRsZSBvdXIgSS9PIHJh dGUuCiAJCSAqCi0JCSAqIChUaGlzIHdpbGwgY2hlY2sgZm9yIGJhcnJpZXIgZXZlbnRzIGV2 ZW4gaWYgaXQgZG9lc24ndCBzbGVlcC4pCisJCSAqIChUaGlzIHdpbGwgY2hlY2sgZm9yIGlu dGVycnVwdHMgZXZlbiBpZiBpdCBkb2Vzbid0IHNsZWVwLikKIAkJICovCiAJCUNoZWNrcG9p bnRXcml0ZURlbGF5KGZsYWdzLCAoZG91YmxlKSBudW1fcHJvY2Vzc2VkIC8gbnVtX3RvX3Nj YW4pOwogCX0KQEAgLTY2MzMsMTIgKzY2MzQsMTggQEAgTG9ja0J1ZmZlckZvckNsZWFudXAo QnVmZmVyIGJ1ZmZlcikKIAkJCVNldFN0YXJ0dXBCdWZmZXJQaW5XYWl0QnVmSWQoLTEpOwog CQl9CiAJCWVsc2UKLQkJCVByb2NXYWl0Rm9yU2lnbmFsKFdBSVRfRVZFTlRfQlVGRkVSX0NM RUFOVVApOworCQl7CisJCQlXYWl0SW50ZXJydXB0KENoZWNrRm9ySW50ZXJydXB0c01hc2sg fCBJTlRFUlJVUFRfV0FJVF9XQUtFVVAsCisJCQkJCQkgIFdMX0lOVEVSUlVQVCB8IFdMX0VY SVRfT05fUE1fREVBVEgsIDAsCisJCQkJCQkgIFdBSVRfRVZFTlRfQlVGRkVSX0NMRUFOVVAp OworCQkJQ2xlYXJJbnRlcnJ1cHQoSU5URVJSVVBUX1dBSVRfV0FLRVVQKTsKKwkJCUNIRUNL X0ZPUl9JTlRFUlJVUFRTKCk7CisJCX0KIAogCQkvKgogCQkgKiBSZW1vdmUgZmxhZyBtYXJr aW5nIHVzIGFzIHdhaXRlci4gTm9ybWFsbHkgdGhpcyB3aWxsIG5vdCBiZSBzZXQKLQkJICog YW55bW9yZSwgYnV0IFByb2NXYWl0Rm9yU2lnbmFsKCkgY2FuIHJldHVybiBmb3Igb3RoZXIg c2lnbmFscyBhcwotCQkgKiB3ZWxsLiAgV2UgdGFrZSBjYXJlIHRvIG9ubHkgcmVzZXQgdGhl IGZsYWcgaWYgd2UncmUgdGhlIHdhaXRlciwgYXMKKwkJICogYW55bW9yZSwgYnV0IFdhaXRJ bnRlcnJ1cHQgY2FuIHJldHVybiBmb3Igb3RoZXIgc2lnbmFscyBhcyB3ZWxsLiBXZQorCQkg KiB0YWtlIGNhcmUgdG8gb25seSByZXNldCB0aGUgZmxhZyBpZiB3ZSdyZSB0aGUgd2FpdGVy LCBhcwogCQkgKiB0aGVvcmV0aWNhbGx5IGFub3RoZXIgYmFja2VuZCBjb3VsZCBoYXZlIHN0 YXJ0ZWQgd2FpdGluZy4gVGhhdCdzCiAJCSAqIGltcG9zc2libGUgd2l0aCB0aGUgY3VycmVu dCB1c2FnZXMgZHVlIHRvIHRhYmxlIGxldmVsIGxvY2tpbmcsIGJ1dAogCQkgKiBiZXR0ZXIg YmUgc2FmZS4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVs aXN0LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9mcmVlbGlzdC5jCmluZGV4IGI3 Njg3ODM2MTg4Li5jM2U5NzU5YjliMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFn ZS9idWZmZXIvZnJlZWxpc3QuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9m cmVlbGlzdC5jCkBAIC0xNSw2ICsxNSw3IEBACiAgKi8KICNpbmNsdWRlICJwb3N0Z3Jlcy5o IgogCisjaW5jbHVkZSAiaXBjL2ludGVycnVwdC5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgog I2luY2x1ZGUgInBvcnQvYXRvbWljcy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmX2ludGVy bmFscy5oIgpAQCAtMTk2LDI3ICsxOTcsMjUgQEAgU3RyYXRlZ3lHZXRCdWZmZXIoQnVmZmVy QWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksIHVpbnQ2NCAqYnVmX3N0YXRlLCBib29sICpmcm9t X3IKIAkvKgogCSAqIElmIGFza2VkLCB3ZSBuZWVkIHRvIHdha2VuIHRoZSBiZ3dyaXRlci4g U2luY2Ugd2UgZG9uJ3Qgd2FudCB0byByZWx5IG9uCiAJICogYSBzcGlubG9jayBmb3IgdGhp cyB3ZSBmb3JjZSBhIHJlYWQgZnJvbSBzaGFyZWQgbWVtb3J5IG9uY2UsIGFuZCB0aGVuCi0J ICogc2V0IHRoZSBsYXRjaCBiYXNlZCBvbiB0aGF0IHZhbHVlLiBXZSBuZWVkIHRvIGdvIHRo cm91Z2ggdGhhdCBsZW5ndGgKLQkgKiBiZWNhdXNlIG90aGVyd2lzZSBiZ3dwcm9jbm8gbWln aHQgYmUgcmVzZXQgd2hpbGUvYWZ0ZXIgd2UgY2hlY2sgYmVjYXVzZQotCSAqIHRoZSBjb21w aWxlciBtaWdodCBqdXN0IHJlcmVhZCBmcm9tIG1lbW9yeS4KKwkgKiBzZW5kIHRoZSBpbnRl cnJ1cHQgYmFzZWQgb24gdGhhdCB2YWx1ZS4gV2UgbmVlZCB0byBnbyB0aHJvdWdoIHRoYXQK KwkgKiBsZW5ndGggYmVjYXVzZSBvdGhlcndpc2UgYmd3cHJvY25vIG1pZ2h0IGJlIHJlc2V0 IHdoaWxlL2FmdGVyIHdlIGNoZWNrCisJICogYmVjYXVzZSB0aGUgY29tcGlsZXIgbWlnaHQg anVzdCByZXJlYWQgZnJvbSBtZW1vcnkuCiAJICoKLQkgKiBUaGlzIGNhbiBwb3NzaWJseSBz ZXQgdGhlIGxhdGNoIG9mIHRoZSB3cm9uZyBwcm9jZXNzIGlmIHRoZSBiZ3dyaXRlcgotCSAq IGRpZXMgaW4gdGhlIHdyb25nIG1vbWVudC4gQnV0IHNpbmNlIFBHUFJPQy0+cHJvY0xhdGNo IGlzIG5ldmVyCi0JICogZGVhbGxvY2F0ZWQgdGhlIHdvcnN0IGNvbnNlcXVlbmNlIG9mIHRo YXQgaXMgdGhhdCB3ZSBzZXQgdGhlIGxhdGNoIG9mCi0JICogc29tZSBhcmJpdHJhcnkgcHJv Y2Vzcy4KKwkgKiBUaGlzIGNhbiBwb3NzaWJseSBzZW5kIHRoZSBpbnRlcnJ1cHQgdG8gdGhl IHdyb25nIHByb2Nlc3MgaWYgdGhlCisJICogYmd3cml0ZXIgZGllcyBpbiB0aGUgd3Jvbmcg bW9tZW50LCBidXQgdGhhdCdzIGhhcm1sZXNzLgogCSAqLwogCWJnd3Byb2NubyA9IElOVF9B Q0NFU1NfT05DRShTdHJhdGVneUNvbnRyb2wtPmJnd3Byb2Nubyk7CiAJaWYgKGJnd3Byb2Nu byAhPSAtMSkKIAl7Ci0JCS8qIHJlc2V0IGJnd3Byb2NubyBmaXJzdCwgYmVmb3JlIHNldHRp bmcgdGhlIGxhdGNoICovCisJCS8qIHJlc2V0IGJnd3Byb2NubyBmaXJzdCwgYmVmb3JlIHNl bmRpbmcgdGhlIGludGVycnVwdCAqLwogCQlTdHJhdGVneUNvbnRyb2wtPmJnd3Byb2NubyA9 IC0xOwogCiAJCS8qCi0JCSAqIE5vdCBhY3F1aXJpbmcgUHJvY0FycmF5TG9jayBoZXJlIHdo aWNoIGlzIHNsaWdodGx5IGlja3kuIEl0J3MKLQkJICogYWN0dWFsbHkgZmluZSBiZWNhdXNl IHByb2NMYXRjaCBpc24ndCBldmVyIGZyZWVkLCBzbyB3ZSBqdXN0IGNhbgotCQkgKiBwb3Rl bnRpYWxseSBzZXQgdGhlIHdyb25nIHByb2Nlc3MnIChvciBubyBwcm9jZXNzJykgbGF0Y2gu CisJCSAqIE5vdCBhY3F1aXJpbmcgUHJvY0FycmF5TG9jayBoZXJlIHdoaWNoIGlzIHNsaWdo dGx5IGlja3ksIGJlY2F1c2Ugd2UKKwkJICogY2FuIHBvdGVudGlhbGx5IHNlbmQgdGhlIGlu dGVycnVwdCB0byB0aGUgd3JvbmcgcHJvY2VzcyAob3Igbm8KKwkJICogcHJvY2VzcyksIGJ1 dCBpdCdzIGhhcm1sZXNzLgogCQkgKi8KLQkJU2V0TGF0Y2goJkdldFBHUHJvY0J5TnVtYmVy KGJnd3Byb2NubyktPnByb2NMYXRjaCk7CisJCVNlbmRJbnRlcnJ1cHQoSU5URVJSVVBUX1dB SVRfV0FLRVVQLCBiZ3dwcm9jbm8pOwogCX0KIAogCS8qCkBAIC0zNDcsMTAgKzM0NiwxMCBA QCBTdHJhdGVneVN5bmNTdGFydCh1aW50MzIgKmNvbXBsZXRlX3Bhc3NlcywgdWludDMyICpu dW1fYnVmX2FsbG9jKQogfQogCiAvKgotICogU3RyYXRlZ3lOb3RpZnlCZ1dyaXRlciAtLSBz ZXQgb3IgY2xlYXIgYWxsb2NhdGlvbiBub3RpZmljYXRpb24gbGF0Y2gKKyAqIFN0cmF0ZWd5 Tm90aWZ5QmdXcml0ZXIgLS0gc2V0IG9yIGNsZWFyIGFsbG9jYXRpb24gbm90aWZpY2F0aW9u IHByb2Nlc3MKICAqCiAgKiBJZiBiZ3dwcm9jbm8gaXNuJ3QgLTEsIHRoZSBuZXh0IGludm9j YXRpb24gb2YgU3RyYXRlZ3lHZXRCdWZmZXIgd2lsbAotICogc2V0IHRoYXQgbGF0Y2guICBQ YXNzIC0xIHRvIGNsZWFyIHRoZSBwZW5kaW5nIG5vdGlmaWNhdGlvbiBiZWZvcmUgaXQKKyAq IGludGVycnVwdCB0aGF0IHByb2Nlc3MuICBQYXNzIC0xIHRvIGNsZWFyIHRoZSBwZW5kaW5n IG5vdGlmaWNhdGlvbiBiZWZvcmUgaXQKICAqIGhhcHBlbnMuICBUaGlzIGZlYXR1cmUgaXMg dXNlZCBieSB0aGUgYmd3cml0ZXIgcHJvY2VzcyB0byB3YWtlIGl0c2VsZiB1cAogICogZnJv bSBoaWJlcm5hdGlvbiwgYW5kIGlzIG5vdCBtZWFudCBmb3IgYW55Ym9keSBlbHNlIHRvIHVz ZS4KICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvTWFrZWZpbGUg Yi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9NYWtlZmlsZQppbmRleCA5YTA3ZjZlMWQ5Mi4u MmQ5OGE0M2U3NDkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL01ha2Vm aWxlCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL01ha2VmaWxlCkBAIC0xNSw3ICsx NSw2IEBAIE9CSlMgPSBcCiAJZHNtX3JlZ2lzdHJ5Lm8gXAogCWlwYy5vIFwKIAlpcGNpLm8g XAotCWxhdGNoLm8gXAogCXBtc2lnbmFsLm8gXAogCXByb2NhcnJheS5vIFwKIAlwcm9jc2ln bmFsLm8gXApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvZHNtX2ltcGwu YyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2RzbV9pbXBsLmMKaW5kZXggZTIwODQ1N2Rm MjcuLmU4NWUyNWZhYWRmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9k c21faW1wbC5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2RzbV9pbXBsLmMKQEAg LTM1OSw2ICszNTksOCBAQCBkc21faW1wbF9wb3NpeF9yZXNpemUoaW50IGZkLCBvZmZfdCBz aXplKQogCSAqIGZvciBxdWl0ZSBhIGxvbmcgdGltZSwgYW5kIGlzIGFuIGFsbC1vci1ub3Ro aW5nIG9wZXJhdGlvbi4gIElmIHdlCiAJICogYWxsb3dlZCBTSUdVU1IxIHRvIGludGVycnVw dCB1cyByZXBlYXRlZGx5IChmb3IgZXhhbXBsZSwgZHVlIHRvCiAJICogcmVjb3ZlcnkgY29u ZmxpY3RzKSwgdGhlIHJldHJ5IGxvb3AgbWlnaHQgbmV2ZXIgc3VjY2VlZC4KKwkgKgorCSAq IEZJWE1FOiBzbGlnaHRseSBvdXRkYXRlZCBjb21tZW50CiAJICovCiAJaWYgKElzVW5kZXJQ b3N0bWFzdGVyKQogCQlzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJkJsb2NrU2lnLCAmc2F2 ZV9zaWdtYXNrKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwYy5j IGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjLmMKaW5kZXggY2I5NDRlZGQ4ZGYuLjk4 OWM5MGE4Y2JiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGMuYwor KysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGMuYwpAQCAtMjMsNiArMjMsNyBAQAog I2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAKKyNpbmNsdWRl ICJpcGMvaW50ZXJydXB0LmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaWZkZWYgUFJP RklMRV9QSURfRElSCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9hdXRvdmFjdXVtLmgiCkBAIC0x NzQsMTEgKzE3NSwxMSBAQCBwcm9jX2V4aXRfcHJlcGFyZShpbnQgY29kZSkKIAkvKgogCSAq IEZvcmdldCBhbnkgcGVuZGluZyBjYW5jZWwgb3IgZGllIHJlcXVlc3RzOyB3ZSdyZSBkb2lu ZyBvdXIgYmVzdCB0bwogCSAqIGNsb3NlIHVwIHNob3AgYWxyZWFkeS4gIE5vdGUgdGhhdCB0 aGUgc2lnbmFsIGhhbmRsZXJzIHdpbGwgbm90IHNldAotCSAqIHRoZXNlIGZsYWdzIGFnYWlu LCBub3cgdGhhdCBwcm9jX2V4aXRfaW5wcm9ncmVzcyBpcyBzZXQuCisJICogdGhlc2UgZmxh Z3MgYWdhaW4sIG5vdyB0aGF0IHByb2NfZXhpdF9pbnByb2dyZXNzIGlzIHNldC4gRklYTUU6 IGlzIHRoYXQKKwkgKiBzbz8KIAkgKi8KLQlJbnRlcnJ1cHRQZW5kaW5nID0gZmFsc2U7Ci0J UHJvY0RpZVBlbmRpbmcgPSBmYWxzZTsKLQlRdWVyeUNhbmNlbFBlbmRpbmcgPSBmYWxzZTsK KwlDbGVhckludGVycnVwdChJTlRFUlJVUFRfVEVSTUlOQVRFKTsKKwlDbGVhckludGVycnVw dChJTlRFUlJVUFRfUVVFUllfQ0FOQ0VMKTsKIAlJbnRlcnJ1cHRIb2xkb2ZmQ291bnQgPSAx OwogCUNyaXRTZWN0aW9uQ291bnQgPSAwOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9z dG9yYWdlL2lwYy9sYXRjaC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvbGF0Y2guYwpk ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODUzN2U5ZmVmMmQuLjAwMDAwMDAwMDAw Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2xhdGNoLmMKKysrIC9kZXYvbnVsbApA QCAtMSwzODkgKzAsMCBAQAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKgotICogbGF0Y2gu YwotICoJICBSb3V0aW5lcyBmb3IgaW50ZXItcHJvY2VzcyBsYXRjaGVzCi0gKgotICogVGhl IGxhdGNoIGludGVyZmFjZSBpcyBhIHJlbGlhYmxlIHJlcGxhY2VtZW50IGZvciB0aGUgY29t bW9uIHBhdHRlcm4gb2YKLSAqIHVzaW5nIHBnX3VzbGVlcCgpIG9yIHNlbGVjdCgpIHRvIHdh aXQgdW50aWwgYSBzaWduYWwgYXJyaXZlcywgd2hlcmUgdGhlCi0gKiBzaWduYWwgaGFuZGxl ciBzZXRzIGEgZmxhZyB2YXJpYWJsZS4gIFNlZSBsYXRjaC5oIGZvciBtb3JlIGluZm9ybWF0 aW9uCi0gKiBvbiBob3cgdG8gdXNlIHRoZW0uCi0gKgotICogUG9ydGlvbnMgQ29weXJpZ2h0 IChjKSAxOTk2LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCi0g KiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNp dHkgb2YgQ2FsaWZvcm5pYQotICoKLSAqIElERU5USUZJQ0FUSU9OCi0gKgkgIHNyYy9iYWNr ZW5kL3N0b3JhZ2UvaXBjL2xhdGNoLmMKLSAqCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAq LwotI2luY2x1ZGUgInBvc3RncmVzLmgiCi0KLSNpbmNsdWRlICJtaXNjYWRtaW4uaCIKLSNp bmNsdWRlICJwb3J0L2F0b21pY3MuaCIKLSNpbmNsdWRlICJzdG9yYWdlL2xhdGNoLmgiCi0j aW5jbHVkZSAic3RvcmFnZS93YWl0ZXZlbnRzZXQuaCIKLSNpbmNsdWRlICJ1dGlscy9yZXNv d25lci5oIgotCi0vKiBBIGNvbW1vbiBXYWl0RXZlbnRTZXQgdXNlZCB0byBpbXBsZW1lbnQg V2FpdExhdGNoKCkgKi8KLXN0YXRpYyBXYWl0RXZlbnRTZXQgKkxhdGNoV2FpdFNldDsKLQot LyogVGhlIHBvc2l0aW9ucyBvZiB0aGUgbGF0Y2ggYW5kIFBNIGRlYXRoIGV2ZW50cyBpbiBM YXRjaFdhaXRTZXQgKi8KLSNkZWZpbmUgTGF0Y2hXYWl0U2V0TGF0Y2hQb3MgMAotI2RlZmlu ZSBMYXRjaFdhaXRTZXRQb3N0bWFzdGVyRGVhdGhQb3MgMQotCi12b2lkCi1Jbml0aWFsaXpl TGF0Y2hXYWl0U2V0KHZvaWQpCi17Ci0JaW50CQkJbGF0Y2hfcG9zIFBHX1VTRURfRk9SX0FT U0VSVFNfT05MWTsKLQotCUFzc2VydChMYXRjaFdhaXRTZXQgPT0gTlVMTCk7Ci0KLQkvKiBT ZXQgdXAgdGhlIFdhaXRFdmVudFNldCB1c2VkIGJ5IFdhaXRMYXRjaCgpLiAqLwotCUxhdGNo V2FpdFNldCA9IENyZWF0ZVdhaXRFdmVudFNldChOVUxMLCAyKTsKLQlsYXRjaF9wb3MgPSBB ZGRXYWl0RXZlbnRUb1NldChMYXRjaFdhaXRTZXQsIFdMX0xBVENIX1NFVCwgUEdJTlZBTElE X1NPQ0tFVCwKLQkJCQkJCQkJICBNeUxhdGNoLCBOVUxMKTsKLQlBc3NlcnQobGF0Y2hfcG9z ID09IExhdGNoV2FpdFNldExhdGNoUG9zKTsKLQotCS8qCi0JICogV2FpdExhdGNoIHdpbGwg bW9kaWZ5IHRoaXMgdG8gV0xfRVhJVF9PTl9QTV9ERUFUSCBvcgotCSAqIFdMX1BPU1RNQVNU RVJfREVBVEggb24gZWFjaCBjYWxsLgotCSAqLwotCWlmIChJc1VuZGVyUG9zdG1hc3RlcikK LQl7Ci0JCWxhdGNoX3BvcyA9IEFkZFdhaXRFdmVudFRvU2V0KExhdGNoV2FpdFNldCwgV0xf RVhJVF9PTl9QTV9ERUFUSCwKLQkJCQkJCQkJCSAgUEdJTlZBTElEX1NPQ0tFVCwgTlVMTCwg TlVMTCk7Ci0JCUFzc2VydChsYXRjaF9wb3MgPT0gTGF0Y2hXYWl0U2V0UG9zdG1hc3RlckRl YXRoUG9zKTsKLQl9Ci19Ci0KLS8qCi0gKiBJbml0aWFsaXplIGEgcHJvY2Vzcy1sb2NhbCBs YXRjaC4KLSAqLwotdm9pZAotSW5pdExhdGNoKExhdGNoICpsYXRjaCkKLXsKLQlsYXRjaC0+ aXNfc2V0ID0gZmFsc2U7Ci0JbGF0Y2gtPm1heWJlX3NsZWVwaW5nID0gZmFsc2U7Ci0JbGF0 Y2gtPm93bmVyX3BpZCA9IE15UHJvY1BpZDsKLQlsYXRjaC0+aXNfc2hhcmVkID0gZmFsc2U7 Ci0KLSNpZmRlZiBXSU4zMgotCWxhdGNoLT5ldmVudCA9IENyZWF0ZUV2ZW50KE5VTEwsIFRS VUUsIEZBTFNFLCBOVUxMKTsKLQlpZiAobGF0Y2gtPmV2ZW50ID09IE5VTEwpCi0JCWVsb2co RVJST1IsICJDcmVhdGVFdmVudCBmYWlsZWQ6IGVycm9yIGNvZGUgJWx1IiwgR2V0TGFzdEVy cm9yKCkpOwotI2VuZGlmCQkJCQkJCS8qIFdJTjMyICovCi19Ci0KLS8qCi0gKiBJbml0aWFs aXplIGEgc2hhcmVkIGxhdGNoIHRoYXQgY2FuIGJlIHNldCBmcm9tIG90aGVyIHByb2Nlc3Nl cy4gVGhlIGxhdGNoCi0gKiBpcyBpbml0aWFsbHkgb3duZWQgYnkgbm8tb25lOyB1c2UgT3du TGF0Y2ggdG8gYXNzb2NpYXRlIGl0IHdpdGggdGhlCi0gKiBjdXJyZW50IHByb2Nlc3MuCi0g KgotICogSW5pdFNoYXJlZExhdGNoIG5lZWRzIHRvIGJlIGNhbGxlZCBpbiBwb3N0bWFzdGVy IGJlZm9yZSBmb3JraW5nIGNoaWxkCi0gKiBwcm9jZXNzZXMsIHVzdWFsbHkgcmlnaHQgYWZ0 ZXIgYWxsb2NhdGluZyB0aGUgc2hhcmVkIG1lbW9yeSBibG9jawotICogY29udGFpbmluZyB0 aGUgbGF0Y2ggd2l0aCBTaG1lbUluaXRTdHJ1Y3QuIChUaGUgVW5peCBpbXBsZW1lbnRhdGlv bgotICogZG9lc24ndCBhY3R1YWxseSByZXF1aXJlIHRoYXQsIGJ1dCB0aGUgV2luZG93cyBv bmUgZG9lcy4pIEJlY2F1c2Ugb2YKLSAqIHRoaXMgcmVzdHJpY3Rpb24sIHdlIGhhdmUgbm8g Y29uY3VycmVuY3kgaXNzdWVzIHRvIHdvcnJ5IGFib3V0IGhlcmUuCi0gKgotICogTm90ZSB0 aGF0IG90aGVyIGhhbmRsZXMgY3JlYXRlZCBpbiB0aGlzIG1vZHVsZSBhcmUgbmV2ZXIgbWFy a2VkIGFzCi0gKiBpbmhlcml0YWJsZS4gIFRodXMgd2UgZG8gbm90IG5lZWQgdG8gd29ycnkg YWJvdXQgY2xlYW5pbmcgdXAgY2hpbGQKLSAqIHByb2Nlc3MgcmVmZXJlbmNlcyB0byBwb3N0 bWFzdGVyLXByaXZhdGUgbGF0Y2hlcyBvciBXYWl0RXZlbnRTZXRzLgotICovCi12b2lkCi1J bml0U2hhcmVkTGF0Y2goTGF0Y2ggKmxhdGNoKQotewotI2lmZGVmIFdJTjMyCi0JU0VDVVJJ VFlfQVRUUklCVVRFUyBzYTsKLQotCS8qCi0JICogU2V0IHVwIHNlY3VyaXR5IGF0dHJpYnV0 ZXMgdG8gc3BlY2lmeSB0aGF0IHRoZSBldmVudHMgYXJlIGluaGVyaXRlZC4KLQkgKi8KLQla ZXJvTWVtb3J5KCZzYSwgc2l6ZW9mKHNhKSk7Ci0Jc2Eubkxlbmd0aCA9IHNpemVvZihzYSk7 Ci0Jc2EuYkluaGVyaXRIYW5kbGUgPSBUUlVFOwotCi0JbGF0Y2gtPmV2ZW50ID0gQ3JlYXRl RXZlbnQoJnNhLCBUUlVFLCBGQUxTRSwgTlVMTCk7Ci0JaWYgKGxhdGNoLT5ldmVudCA9PSBO VUxMKQotCQllbG9nKEVSUk9SLCAiQ3JlYXRlRXZlbnQgZmFpbGVkOiBlcnJvciBjb2RlICVs dSIsIEdldExhc3RFcnJvcigpKTsKLSNlbmRpZgotCi0JbGF0Y2gtPmlzX3NldCA9IGZhbHNl OwotCWxhdGNoLT5tYXliZV9zbGVlcGluZyA9IGZhbHNlOwotCWxhdGNoLT5vd25lcl9waWQg PSAwOwotCWxhdGNoLT5pc19zaGFyZWQgPSB0cnVlOwotfQotCi0vKgotICogQXNzb2NpYXRl IGEgc2hhcmVkIGxhdGNoIHdpdGggdGhlIGN1cnJlbnQgcHJvY2VzcywgYWxsb3dpbmcgaXQg dG8KLSAqIHdhaXQgb24gdGhlIGxhdGNoLgotICoKLSAqIEFsdGhvdWdoIHRoZXJlIGlzIGEg c2FuaXR5IGNoZWNrIGZvciBsYXRjaC1hbHJlYWR5LW93bmVkLCB3ZSBkb24ndCBkbwotICog YW55IHNvcnQgb2YgbG9ja2luZyBoZXJlLCBtZWFuaW5nIHRoYXQgd2UgY291bGQgZmFpbCB0 byBkZXRlY3QgdGhlIGVycm9yCi0gKiBpZiB0d28gcHJvY2Vzc2VzIHRyeSB0byBvd24gdGhl IHNhbWUgbGF0Y2ggYXQgYWJvdXQgdGhlIHNhbWUgdGltZS4gIElmCi0gKiB0aGVyZSBpcyBh bnkgcmlzayBvZiB0aGF0LCBjYWxsZXIgbXVzdCBwcm92aWRlIGFuIGludGVybG9jayB0byBw cmV2ZW50IGl0LgotICovCi12b2lkCi1Pd25MYXRjaChMYXRjaCAqbGF0Y2gpCi17Ci0JaW50 CQkJb3duZXJfcGlkOwotCi0JLyogU2FuaXR5IGNoZWNrcyAqLwotCUFzc2VydChsYXRjaC0+ aXNfc2hhcmVkKTsKLQotCW93bmVyX3BpZCA9IGxhdGNoLT5vd25lcl9waWQ7Ci0JaWYgKG93 bmVyX3BpZCAhPSAwKQotCQllbG9nKFBBTklDLCAibGF0Y2ggYWxyZWFkeSBvd25lZCBieSBQ SUQgJWQiLCBvd25lcl9waWQpOwotCi0JbGF0Y2gtPm93bmVyX3BpZCA9IE15UHJvY1BpZDsK LX0KLQotLyoKLSAqIERpc293biBhIHNoYXJlZCBsYXRjaCBjdXJyZW50bHkgb3duZWQgYnkg dGhlIGN1cnJlbnQgcHJvY2Vzcy4KLSAqLwotdm9pZAotRGlzb3duTGF0Y2goTGF0Y2ggKmxh dGNoKQotewotCUFzc2VydChsYXRjaC0+aXNfc2hhcmVkKTsKLQlBc3NlcnQobGF0Y2gtPm93 bmVyX3BpZCA9PSBNeVByb2NQaWQpOwotCi0JbGF0Y2gtPm93bmVyX3BpZCA9IDA7Ci19Ci0K LS8qCi0gKiBXYWl0IGZvciBhIGdpdmVuIGxhdGNoIHRvIGJlIHNldCwgb3IgZm9yIHBvc3Rt YXN0ZXIgZGVhdGgsIG9yIHVudGlsIHRpbWVvdXQKLSAqIGlzIGV4Y2VlZGVkLiAnd2FrZUV2 ZW50cycgaXMgYSBiaXRtYXNrIHRoYXQgc3BlY2lmaWVzIHdoaWNoIG9mIHRob3NlIGV2ZW50 cwotICogdG8gd2FpdCBmb3IuIElmIHRoZSBsYXRjaCBpcyBhbHJlYWR5IHNldCAoYW5kIFdM X0xBVENIX1NFVCBpcyBnaXZlbiksIHRoZQotICogZnVuY3Rpb24gcmV0dXJucyBpbW1lZGlh dGVseS4KLSAqCi0gKiBUaGUgInRpbWVvdXQiIGlzIGdpdmVuIGluIG1pbGxpc2Vjb25kcy4g SXQgbXVzdCBiZSA+PSAwIGlmIFdMX1RJTUVPVVQgZmxhZwotICogaXMgZ2l2ZW4uICBBbHRo b3VnaCBpdCBpcyBkZWNsYXJlZCBhcyAibG9uZyIsIHdlIGRvbid0IGFjdHVhbGx5IHN1cHBv cnQKLSAqIHRpbWVvdXRzIGxvbmdlciB0aGFuIElOVF9NQVggbWlsbGlzZWNvbmRzLiAgTm90 ZSB0aGF0IHNvbWUgZXh0cmEgb3ZlcmhlYWQKLSAqIGlzIGluY3VycmVkIHdoZW4gV0xfVElN RU9VVCBpcyBnaXZlbiwgc28gYXZvaWQgdXNpbmcgYSB0aW1lb3V0IGlmIHBvc3NpYmxlLgot ICoKLSAqIFRoZSBsYXRjaCBtdXN0IGJlIG93bmVkIGJ5IHRoZSBjdXJyZW50IHByb2Nlc3Ms IGllLiBpdCBtdXN0IGJlIGEKLSAqIHByb2Nlc3MtbG9jYWwgbGF0Y2ggaW5pdGlhbGl6ZWQg d2l0aCBJbml0TGF0Y2gsIG9yIGEgc2hhcmVkIGxhdGNoCi0gKiBhc3NvY2lhdGVkIHdpdGgg dGhlIGN1cnJlbnQgcHJvY2VzcyBieSBjYWxsaW5nIE93bkxhdGNoLgotICoKLSAqIFJldHVy bnMgYml0IG1hc2sgaW5kaWNhdGluZyB3aGljaCBjb25kaXRpb24ocykgY2F1c2VkIHRoZSB3 YWtlLXVwLiBOb3RlCi0gKiB0aGF0IGlmIG11bHRpcGxlIHdha2UtdXAgY29uZGl0aW9ucyBh cmUgdHJ1ZSwgdGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQKLSAqIHdlIHJldHVybiBhbGwg b2YgdGhlbSBpbiBvbmUgY2FsbCwgYnV0IHdlIHdpbGwgcmV0dXJuIGF0IGxlYXN0IG9uZS4K LSAqLwotaW50Ci1XYWl0TGF0Y2goTGF0Y2ggKmxhdGNoLCBpbnQgd2FrZUV2ZW50cywgbG9u ZyB0aW1lb3V0LAotCQkgIHVpbnQzMiB3YWl0X2V2ZW50X2luZm8pCi17Ci0JV2FpdEV2ZW50 CWV2ZW50OwotCi0JLyogUG9zdG1hc3Rlci1tYW5hZ2VkIGNhbGxlcnMgbXVzdCBoYW5kbGUg cG9zdG1hc3RlciBkZWF0aCBzb21laG93LiAqLwotCUFzc2VydCghSXNVbmRlclBvc3RtYXN0 ZXIgfHwKLQkJICAgKHdha2VFdmVudHMgJiBXTF9FWElUX09OX1BNX0RFQVRIKSB8fAotCQkg ICAod2FrZUV2ZW50cyAmIFdMX1BPU1RNQVNURVJfREVBVEgpKTsKLQotCS8qCi0JICogU29t ZSBjYWxsZXJzIG1heSBoYXZlIGEgbGF0Y2ggb3RoZXIgdGhhbiBNeUxhdGNoLCBvciBubyBs YXRjaCBhdCBhbGwsCi0JICogb3Igd2FudCB0byBoYW5kbGUgcG9zdG1hc3RlciBkZWF0aCBk aWZmZXJlbnRseS4gIEl0J3MgY2hlYXAgdG8gYXNzaWduCi0JICogdGhvc2UsIHNvIGp1c3Qg ZG8gaXQgZXZlcnkgdGltZS4KLQkgKi8KLQlpZiAoISh3YWtlRXZlbnRzICYgV0xfTEFUQ0hf U0VUKSkKLQkJbGF0Y2ggPSBOVUxMOwotCU1vZGlmeVdhaXRFdmVudChMYXRjaFdhaXRTZXQs IExhdGNoV2FpdFNldExhdGNoUG9zLCBXTF9MQVRDSF9TRVQsIGxhdGNoKTsKLQotCWlmIChJ c1VuZGVyUG9zdG1hc3RlcikKLQkJTW9kaWZ5V2FpdEV2ZW50KExhdGNoV2FpdFNldCwgTGF0 Y2hXYWl0U2V0UG9zdG1hc3RlckRlYXRoUG9zLAotCQkJCQkJKHdha2VFdmVudHMgJiAoV0xf RVhJVF9PTl9QTV9ERUFUSCB8IFdMX1BPU1RNQVNURVJfREVBVEgpKSwKLQkJCQkJCU5VTEwp OwotCi0JaWYgKFdhaXRFdmVudFNldFdhaXQoTGF0Y2hXYWl0U2V0LAotCQkJCQkJICh3YWtl RXZlbnRzICYgV0xfVElNRU9VVCkgPyB0aW1lb3V0IDogLTEsCi0JCQkJCQkgJmV2ZW50LCAx LAotCQkJCQkJIHdhaXRfZXZlbnRfaW5mbykgPT0gMCkKLQkJcmV0dXJuIFdMX1RJTUVPVVQ7 Ci0JZWxzZQotCQlyZXR1cm4gZXZlbnQuZXZlbnRzOwotfQotCi0vKgotICogTGlrZSBXYWl0 TGF0Y2gsIGJ1dCB3aXRoIGFuIGV4dHJhIHNvY2tldCBhcmd1bWVudCBmb3IgV0xfU09DS0VU XyoKLSAqIGNvbmRpdGlvbnMuCi0gKgotICogV2hlbiB3YWl0aW5nIG9uIGEgc29ja2V0LCBF T0YgYW5kIGVycm9yIGNvbmRpdGlvbnMgYWx3YXlzIGNhdXNlIHRoZSBzb2NrZXQKLSAqIHRv IGJlIHJlcG9ydGVkIGFzIHJlYWRhYmxlL3dyaXRhYmxlL2Nvbm5lY3RlZCwgc28gdGhhdCB0 aGUgY2FsbGVyIGNhbiBkZWFsCi0gKiB3aXRoIHRoZSBjb25kaXRpb24uCi0gKgotICogd2Fr ZUV2ZW50cyBtdXN0IGluY2x1ZGUgZWl0aGVyIFdMX0VYSVRfT05fUE1fREVBVEggZm9yIGF1 dG9tYXRpYyBleGl0Ci0gKiBpZiB0aGUgcG9zdG1hc3RlciBkaWVzIG9yIFdMX1BPU1RNQVNU RVJfREVBVEggZm9yIGEgZmxhZyBzZXQgaW4gdGhlCi0gKiByZXR1cm4gdmFsdWUgaWYgdGhl IHBvc3RtYXN0ZXIgZGllcy4gIFRoZSBsYXR0ZXIgaXMgdXNlZnVsIGZvciByYXJlIGNhc2Vz Ci0gKiB3aGVyZSBzb21lIGJlaGF2aW9yIG90aGVyIHRoYW4gaW1tZWRpYXRlIGV4aXQgaXMg bmVlZGVkLgotICoKLSAqIE5COiBUaGVzZSBkYXlzIHRoaXMgaXMganVzdCBhIHdyYXBwZXIg YXJvdW5kIHRoZSBXYWl0RXZlbnRTZXQgQVBJLiBXaGVuCi0gKiB1c2luZyBhIGxhdGNoIHZl cnkgZnJlcXVlbnRseSwgY29uc2lkZXIgY3JlYXRpbmcgYSBsb25nZXIgbGl2aW5nCi0gKiBX YWl0RXZlbnRTZXQgaW5zdGVhZDsgdGhhdCdzIG1vcmUgZWZmaWNpZW50LgotICovCi1pbnQK LVdhaXRMYXRjaE9yU29ja2V0KExhdGNoICpsYXRjaCwgaW50IHdha2VFdmVudHMsIHBnc29j a2V0IHNvY2ssCi0JCQkJICBsb25nIHRpbWVvdXQsIHVpbnQzMiB3YWl0X2V2ZW50X2luZm8p Ci17Ci0JaW50CQkJcmV0ID0gMDsKLQlpbnQJCQlyYzsKLQlXYWl0RXZlbnQJZXZlbnQ7Ci0J V2FpdEV2ZW50U2V0ICpzZXQgPSBDcmVhdGVXYWl0RXZlbnRTZXQoQ3VycmVudFJlc291cmNl T3duZXIsIDMpOwotCi0JaWYgKHdha2VFdmVudHMgJiBXTF9USU1FT1VUKQotCQlBc3NlcnQo dGltZW91dCA+PSAwKTsKLQllbHNlCi0JCXRpbWVvdXQgPSAtMTsKLQotCWlmICh3YWtlRXZl bnRzICYgV0xfTEFUQ0hfU0VUKQotCQlBZGRXYWl0RXZlbnRUb1NldChzZXQsIFdMX0xBVENI X1NFVCwgUEdJTlZBTElEX1NPQ0tFVCwKLQkJCQkJCSAgbGF0Y2gsIE5VTEwpOwotCi0JLyog UG9zdG1hc3Rlci1tYW5hZ2VkIGNhbGxlcnMgbXVzdCBoYW5kbGUgcG9zdG1hc3RlciBkZWF0 aCBzb21laG93LiAqLwotCUFzc2VydCghSXNVbmRlclBvc3RtYXN0ZXIgfHwKLQkJICAgKHdh a2VFdmVudHMgJiBXTF9FWElUX09OX1BNX0RFQVRIKSB8fAotCQkgICAod2FrZUV2ZW50cyAm IFdMX1BPU1RNQVNURVJfREVBVEgpKTsKLQotCWlmICgod2FrZUV2ZW50cyAmIFdMX1BPU1RN QVNURVJfREVBVEgpICYmIElzVW5kZXJQb3N0bWFzdGVyKQotCQlBZGRXYWl0RXZlbnRUb1Nl dChzZXQsIFdMX1BPU1RNQVNURVJfREVBVEgsIFBHSU5WQUxJRF9TT0NLRVQsCi0JCQkJCQkg IE5VTEwsIE5VTEwpOwotCi0JaWYgKCh3YWtlRXZlbnRzICYgV0xfRVhJVF9PTl9QTV9ERUFU SCkgJiYgSXNVbmRlclBvc3RtYXN0ZXIpCi0JCUFkZFdhaXRFdmVudFRvU2V0KHNldCwgV0xf RVhJVF9PTl9QTV9ERUFUSCwgUEdJTlZBTElEX1NPQ0tFVCwKLQkJCQkJCSAgTlVMTCwgTlVM TCk7Ci0KLQlpZiAod2FrZUV2ZW50cyAmIFdMX1NPQ0tFVF9NQVNLKQotCXsKLQkJaW50CQkJ ZXY7Ci0KLQkJZXYgPSB3YWtlRXZlbnRzICYgV0xfU09DS0VUX01BU0s7Ci0JCUFkZFdhaXRF dmVudFRvU2V0KHNldCwgZXYsIHNvY2ssIE5VTEwsIE5VTEwpOwotCX0KLQotCXJjID0gV2Fp dEV2ZW50U2V0V2FpdChzZXQsIHRpbWVvdXQsICZldmVudCwgMSwgd2FpdF9ldmVudF9pbmZv KTsKLQotCWlmIChyYyA9PSAwKQotCQlyZXQgfD0gV0xfVElNRU9VVDsKLQllbHNlCi0Jewot CQlyZXQgfD0gZXZlbnQuZXZlbnRzICYgKFdMX0xBVENIX1NFVCB8Ci0JCQkJCQkJICAgV0xf UE9TVE1BU1RFUl9ERUFUSCB8Ci0JCQkJCQkJICAgV0xfU09DS0VUX01BU0spOwotCX0KLQot CUZyZWVXYWl0RXZlbnRTZXQoc2V0KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiBT ZXRzIGEgbGF0Y2ggYW5kIHdha2VzIHVwIGFueW9uZSB3YWl0aW5nIG9uIGl0LgotICoKLSAq IFRoaXMgaXMgY2hlYXAgaWYgdGhlIGxhdGNoIGlzIGFscmVhZHkgc2V0LCBvdGhlcndpc2Ug bm90IHNvIG11Y2guCi0gKgotICogTkI6IHdoZW4gY2FsbGluZyB0aGlzIGluIGEgc2lnbmFs IGhhbmRsZXIsIGJlIHN1cmUgdG8gc2F2ZSBhbmQgcmVzdG9yZQotICogZXJybm8gYXJvdW5k IGl0LiAgKFRoYXQncyBzdGFuZGFyZCBwcmFjdGljZSBpbiBtb3N0IHNpZ25hbCBoYW5kbGVy cywgb2YKLSAqIGNvdXJzZSwgYnV0IHdlIHVzZWQgdG8gb21pdCBpdCBpbiBoYW5kbGVycyB0 aGF0IG9ubHkgc2V0IGEgZmxhZy4pCi0gKgotICogTkI6IHRoaXMgZnVuY3Rpb24gaXMgY2Fs bGVkIGZyb20gY3JpdGljYWwgc2VjdGlvbnMgYW5kIHNpZ25hbCBoYW5kbGVycyBzbwotICog dGhyb3dpbmcgYW4gZXJyb3IgaXMgbm90IGEgZ29vZCBpZGVhLgotICovCi12b2lkCi1TZXRM YXRjaChMYXRjaCAqbGF0Y2gpCi17Ci0jaWZuZGVmIFdJTjMyCi0JcGlkX3QJCW93bmVyX3Bp ZDsKLSNlbHNlCi0JSEFORExFCQloYW5kbGU7Ci0jZW5kaWYKLQotCS8qCi0JICogVGhlIG1l bW9yeSBiYXJyaWVyIGhhcyB0byBiZSBwbGFjZWQgaGVyZSB0byBlbnN1cmUgdGhhdCBhbnkg ZmxhZwotCSAqIHZhcmlhYmxlcyBwb3NzaWJseSBjaGFuZ2VkIGJ5IHRoaXMgcHJvY2VzcyBo YXZlIGJlZW4gZmx1c2hlZCB0byBtYWluCi0JICogbWVtb3J5LCBiZWZvcmUgd2UgY2hlY2sv c2V0IGlzX3NldC4KLQkgKi8KLQlwZ19tZW1vcnlfYmFycmllcigpOwotCi0JLyogUXVpY2sg ZXhpdCBpZiBhbHJlYWR5IHNldCAqLwotCWlmIChsYXRjaC0+aXNfc2V0KQotCQlyZXR1cm47 Ci0KLQlsYXRjaC0+aXNfc2V0ID0gdHJ1ZTsKLQotCXBnX21lbW9yeV9iYXJyaWVyKCk7Ci0J aWYgKCFsYXRjaC0+bWF5YmVfc2xlZXBpbmcpCi0JCXJldHVybjsKLQotI2lmbmRlZiBXSU4z MgotCi0JLyoKLQkgKiBTZWUgaWYgYW55b25lJ3Mgd2FpdGluZyBmb3IgdGhlIGxhdGNoLiBJ dCBjYW4gYmUgdGhlIGN1cnJlbnQgcHJvY2VzcyBpZgotCSAqIHdlJ3JlIGluIGEgc2lnbmFs IGhhbmRsZXIuIFdlIHVzZSB0aGUgc2VsZi1waXBlIG9yIFNJR1VSRyB0byBvdXJzZWx2ZXMK LQkgKiB0byB3YWtlIHVwIFdhaXRFdmVudFNldFdhaXRCbG9jaygpIHdpdGhvdXQgcmFjZXMg aW4gdGhhdCBjYXNlLiBJZiBpdCdzCi0JICogYW5vdGhlciBwcm9jZXNzLCBzZW5kIGEgc2ln bmFsLgotCSAqCi0JICogRmV0Y2ggb3duZXJfcGlkIG9ubHkgb25jZSwgaW4gY2FzZSB0aGUg bGF0Y2ggaXMgY29uY3VycmVudGx5IGdldHRpbmcKLQkgKiBvd25lZCBvciBkaXNvd25lZC4g WFhYOiBUaGlzIGFzc3VtZXMgdGhhdCBwaWRfdCBpcyBhdG9taWMsIHdoaWNoIGlzbid0Ci0J ICogZ3VhcmFudGVlZCB0byBiZSB0cnVlISBJbiBwcmFjdGljZSwgdGhlIGVmZmVjdGl2ZSBy YW5nZSBvZiBwaWRfdCBmaXRzCi0JICogaW4gYSAzMiBiaXQgaW50ZWdlciwgYW5kIHNvIHNo b3VsZCBiZSBhdG9taWMuIEluIHRoZSB3b3JzdCBjYXNlLCB3ZQotCSAqIG1pZ2h0IGVuZCB1 cCBzaWduYWxpbmcgdGhlIHdyb25nIHByb2Nlc3MuIEV2ZW4gdGhlbiwgeW91J3JlIHZlcnkK LQkgKiB1bmx1Y2t5IGlmIGEgcHJvY2VzcyB3aXRoIHRoYXQgYm9ndXMgcGlkIGV4aXN0cyBh bmQgYmVsb25ncyB0bwotCSAqIFBvc3RncmVzOyBhbmQgUEcgZGF0YWJhc2UgcHJvY2Vzc2Vz IHNob3VsZCBoYW5kbGUgZXhjZXNzIFNJR1VTUjEKLQkgKiBpbnRlcnJ1cHRzIHdpdGhvdXQg YSBwcm9ibGVtIGFueWhvdy4KLQkgKgotCSAqIEFub3RoZXIgc29ydCBvZiByYWNlIGNvbmRp dGlvbiB0aGF0J3MgcG9zc2libGUgaGVyZSBpcyBmb3IgYSBuZXcKLQkgKiBwcm9jZXNzIHRv IG93biB0aGUgbGF0Y2ggaW1tZWRpYXRlbHkgYWZ0ZXIgd2UgbG9vaywgc28gd2UgZG9uJ3Qg c2lnbmFsCi0JICogaXQuIFRoaXMgaXMgb2theSBzbyBsb25nIGFzIGFsbCBjYWxsZXJzIG9m IFJlc2V0TGF0Y2gvV2FpdExhdGNoIGZvbGxvdwotCSAqIHRoZSBzdGFuZGFyZCBjb2Rpbmcg Y29udmVudGlvbiBvZiB3YWl0aW5nIGF0IHRoZSBib3R0b20gb2YgdGhlaXIgbG9vcHMsCi0J ICogbm90IHRoZSB0b3AsIHNvIHRoYXQgdGhleSdsbCBjb3JyZWN0bHkgcHJvY2VzcyBsYXRj aC1zZXR0aW5nIGV2ZW50cwotCSAqIHRoYXQgaGFwcGVuIGJlZm9yZSB0aGV5IGVudGVyIHRo ZSBsb29wLgotCSAqLwotCW93bmVyX3BpZCA9IGxhdGNoLT5vd25lcl9waWQ7Ci0JaWYgKG93 bmVyX3BpZCA9PSAwKQotCQlyZXR1cm47Ci0JZWxzZSBpZiAob3duZXJfcGlkID09IE15UHJv Y1BpZCkKLQkJV2FrZXVwTXlQcm9jKCk7Ci0JZWxzZQotCQlXYWtldXBPdGhlclByb2Mob3du ZXJfcGlkKTsKLQotI2Vsc2UKLQotCS8qCi0JICogU2VlIGlmIGFueW9uZSdzIHdhaXRpbmcg Zm9yIHRoZSBsYXRjaC4gSXQgY2FuIGJlIHRoZSBjdXJyZW50IHByb2Nlc3MgaWYKLQkgKiB3 ZSdyZSBpbiBhIHNpZ25hbCBoYW5kbGVyLgotCSAqCi0JICogVXNlIGEgbG9jYWwgdmFyaWFi bGUgaGVyZSBqdXN0IGluIGNhc2Ugc29tZWJvZHkgY2hhbmdlcyB0aGUgZXZlbnQgZmllbGQK LQkgKiBjb25jdXJyZW50bHkgKHdoaWNoIHJlYWxseSBzaG91bGQgbm90IGhhcHBlbikuCi0J ICovCi0JaGFuZGxlID0gbGF0Y2gtPmV2ZW50OwotCWlmIChoYW5kbGUpCi0JewotCQlTZXRF dmVudChoYW5kbGUpOwotCi0JCS8qCi0JCSAqIE5vdGUgdGhhdCB3ZSBzaWxlbnRseSBpZ25v cmUgYW55IGVycm9ycy4gV2UgbWlnaHQgYmUgaW4gYSBzaWduYWwKLQkJICogaGFuZGxlciBv ciBvdGhlciBjcml0aWNhbCBwYXRoIHdoZXJlIGl0J3Mgbm90IHNhZmUgdG8gY2FsbCBlbG9n KCkuCi0JCSAqLwotCX0KLSNlbmRpZgotfQotCi0vKgotICogQ2xlYXIgdGhlIGxhdGNoLiBD YWxsaW5nIFdhaXRMYXRjaCBhZnRlciB0aGlzIHdpbGwgc2xlZXAsIHVubGVzcwotICogdGhl IGxhdGNoIGlzIHNldCBhZ2FpbiBiZWZvcmUgdGhlIFdhaXRMYXRjaCBjYWxsLgotICovCi12 b2lkCi1SZXNldExhdGNoKExhdGNoICpsYXRjaCkKLXsKLQkvKiBPbmx5IHRoZSBvd25lciBz aG91bGQgcmVzZXQgdGhlIGxhdGNoICovCi0JQXNzZXJ0KGxhdGNoLT5vd25lcl9waWQgPT0g TXlQcm9jUGlkKTsKLQlBc3NlcnQobGF0Y2gtPm1heWJlX3NsZWVwaW5nID09IGZhbHNlKTsK LQotCWxhdGNoLT5pc19zZXQgPSBmYWxzZTsKLQotCS8qCi0JICogRW5zdXJlIHRoYXQgdGhl IHdyaXRlIHRvIGlzX3NldCBnZXRzIGZsdXNoZWQgdG8gbWFpbiBtZW1vcnkgYmVmb3JlIHdl Ci0JICogZXhhbWluZSBhbnkgZmxhZyB2YXJpYWJsZXMuICBPdGhlcndpc2UgYSBjb25jdXJy ZW50IFNldExhdGNoIG1pZ2h0Ci0JICogZmFsc2VseSBjb25jbHVkZSB0aGF0IGl0IG5lZWRu J3Qgc2lnbmFsIHVzLCBldmVuIHRob3VnaCB3ZSBoYXZlIG1pc3NlZAotCSAqIHNlZWluZyBz b21lIGZsYWcgdXBkYXRlcyB0aGF0IFNldExhdGNoIHdhcyBzdXBwb3NlZCB0byBpbmZvcm0g dXMgb2YuCi0JICovCi0JcGdfbWVtb3J5X2JhcnJpZXIoKTsKLX0KZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvaXBjL21lc29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQvc3RvcmFn ZS9pcGMvbWVzb24uYnVpbGQKaW5kZXggOWMxY2E5NTRkOWQuLjE0NzQ1YzA0ZTEzIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9tZXNvbi5idWlsZAorKysgYi9zcmMv YmFja2VuZC9zdG9yYWdlL2lwYy9tZXNvbi5idWlsZApAQCAtNyw3ICs3LDYgQEAgYmFja2Vu ZF9zb3VyY2VzICs9IGZpbGVzKAogICAnZHNtX3JlZ2lzdHJ5LmMnLAogICAnaXBjLmMnLAog ICAnaXBjaS5jJywKLSAgJ2xhdGNoLmMnLAogICAncG1zaWduYWwuYycsCiAgICdwcm9jYXJy YXkuYycsCiAgICdwcm9jc2lnbmFsLmMnLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3Rv cmFnZS9pcGMvcG1zaWduYWwuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Btc2lnbmFs LmMKaW5kZXggNDYxODgyMGIzMzcuLjVhNTEwZmJiZDljIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9zdG9yYWdlL2lwYy9wbXNpZ25hbC5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv aXBjL3Btc2lnbmFsLmMKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgIm1pc2NhZG1p bi5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvcG9zdG1hc3Rlci5oIgorI2luY2x1ZGUgInBv cnQvYXRvbWljcy5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL3dhbHNlbmRlci5oIgogI2lu Y2x1ZGUgInN0b3JhZ2UvaXBjLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wbXNpZ25hbC5oIgpA QCAtNjgsNiArNjksMTMgQEAKICNkZWZpbmUgUE1fQ0hJTERfQUNUSVZFCQkyCiAjZGVmaW5l IFBNX0NISUxEX1dBTFNFTkRFUgkzCiAKK3R5cGVkZWYgc3RydWN0IFBNQ2hpbGRTbG90RGF0 YQoreworCXNpZ19hdG9taWNfdCBzdGF0ZTsKKworCXBnX2F0b21pY191aW50MzIgcGdwcm9j bm87Cit9IFBNQ2hpbGRTbG90RGF0YTsKKwogLyogInR5cGVkZWYgc3RydWN0IFBNU2lnbmFs RGF0YSBQTVNpZ25hbERhdGEiIGFwcGVhcnMgaW4gcG1zaWduYWwuaCAqLwogc3RydWN0IFBN U2lnbmFsRGF0YQogewpAQCAtNzUsMjAgKzgzLDIxIEBAIHN0cnVjdCBQTVNpZ25hbERhdGEK IAlzaWdfYXRvbWljX3QgUE1TaWduYWxGbGFnc1tOVU1fUE1TSUdOQUxTXTsKIAkvKiBnbG9i YWwgZmxhZ3MgZm9yIHNpZ25hbHMgZnJvbSBwb3N0bWFzdGVyIHRvIGNoaWxkcmVuICovCiAJ UXVpdFNpZ25hbFJlYXNvbiBzaWdxdWl0X3JlYXNvbjsJLyogd2h5IFNJR1FVSVQgd2FzIHNl bnQgKi8KKwogCS8qIHBlci1jaGlsZC1wcm9jZXNzIGZsYWdzICovCi0JaW50CQkJbnVtX2No aWxkX2ZsYWdzOwkvKiAjIG9mIGVudHJpZXMgaW4gUE1DaGlsZEZsYWdzW10gKi8KLQlzaWdf YXRvbWljX3QgUE1DaGlsZEZsYWdzW0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07CisJaW50CQkJ bnVtX2NoaWxkX3Nsb3RzOwkvKiAjIG9mIGVudHJpZXMgaW4gY2hpbGRfc2xvdHNbXSAqLwor CVBNQ2hpbGRTbG90RGF0YSBjaGlsZF9zbG90c1tGTEVYSUJMRV9BUlJBWV9NRU1CRVJdOwog fTsKIAogLyogUE1TaWduYWxTdGF0ZSBwb2ludGVyIGlzIHZhbGlkIGluIGJvdGggcG9zdG1h c3RlciBhbmQgY2hpbGQgcHJvY2Vzc2VzICovCiBOT05fRVhFQ19TVEFUSUMgdm9sYXRpbGUg UE1TaWduYWxEYXRhICpQTVNpZ25hbFN0YXRlID0gTlVMTDsKIAogLyoKLSAqIExvY2FsIGNv cHkgb2YgUE1TaWduYWxTdGF0ZS0+bnVtX2NoaWxkX2ZsYWdzLCBvbmx5IHZhbGlkIGluIHRo ZQorICogTG9jYWwgY29weSBvZiBQTVNpZ25hbFN0YXRlLT5udW1fY2hpbGRfc2xvdHMsIG9u bHkgdmFsaWQgaW4gdGhlCiAgKiBwb3N0bWFzdGVyLiAgUG9zdG1hc3RlciBrZWVwcyBhIGxv Y2FsIGNvcHkgc28gdGhhdCBpdCBkb2Vzbid0IG5lZWQgdG8KICAqIHRydXN0IHRoZSB2YWx1 ZSBpbiBzaGFyZWQgbWVtb3J5LgogICovCi1zdGF0aWMgaW50CW51bV9jaGlsZF9mbGFnczsK K3N0YXRpYyBpbnQJbnVtX2NoaWxkX3Nsb3RzOwogCiAvKgogICogU2lnbmFsIGhhbmRsZXIg dG8gYmUgbm90aWZpZWQgaWYgcG9zdG1hc3RlciBkaWVzLgpAQCAtMTMxLDkgKzE0MCw5IEBA IFBNU2lnbmFsU2htZW1TaXplKHZvaWQpCiB7CiAJU2l6ZQkJc2l6ZTsKIAotCXNpemUgPSBv ZmZzZXRvZihQTVNpZ25hbERhdGEsIFBNQ2hpbGRGbGFncyk7CisJc2l6ZSA9IG9mZnNldG9m KFBNU2lnbmFsRGF0YSwgY2hpbGRfc2xvdHMpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBt dWxfc2l6ZShNYXhMaXZlUG9zdG1hc3RlckNoaWxkcmVuKCksCi0JCQkJCQkJCSAgIHNpemVv ZihzaWdfYXRvbWljX3QpKSk7CisJCQkJCQkJCSAgIHNpemVvZihQTUNoaWxkU2xvdERhdGEp KSk7CiAKIAlyZXR1cm4gc2l6ZTsKIH0KQEAgLTE1Myw4ICsxNjIsOCBAQCBQTVNpZ25hbFNo bWVtSW5pdCh2b2lkKQogCXsKIAkJLyogaW5pdGlhbGl6ZSBhbGwgZmxhZ3MgdG8gemVyb2Vz ICovCiAJCU1lbVNldCh1bnZvbGF0aXplKFBNU2lnbmFsRGF0YSAqLCBQTVNpZ25hbFN0YXRl KSwgMCwgUE1TaWduYWxTaG1lbVNpemUoKSk7Ci0JCW51bV9jaGlsZF9mbGFncyA9IE1heExp dmVQb3N0bWFzdGVyQ2hpbGRyZW4oKTsKLQkJUE1TaWduYWxTdGF0ZS0+bnVtX2NoaWxkX2Zs YWdzID0gbnVtX2NoaWxkX2ZsYWdzOworCQludW1fY2hpbGRfc2xvdHMgPSBNYXhMaXZlUG9z dG1hc3RlckNoaWxkcmVuKCk7CisJCVBNU2lnbmFsU3RhdGUtPm51bV9jaGlsZF9zbG90cyA9 IG51bV9jaGlsZF9zbG90czsKIAl9CiB9CiAKQEAgLTIyOSwxMyArMjM4LDE0IEBAIEdldFF1 aXRTaWduYWxSZWFzb24odm9pZCkKIHZvaWQKIE1hcmtQb3N0bWFzdGVyQ2hpbGRTbG90QXNz aWduZWQoaW50IHNsb3QpCiB7Ci0JQXNzZXJ0KHNsb3QgPiAwICYmIHNsb3QgPD0gbnVtX2No aWxkX2ZsYWdzKTsKKwlBc3NlcnQoc2xvdCA+IDAgJiYgc2xvdCA8PSBudW1fY2hpbGRfc2xv dHMpOwogCXNsb3QtLTsKIAotCWlmIChQTVNpZ25hbFN0YXRlLT5QTUNoaWxkRmxhZ3Nbc2xv dF0gIT0gUE1fQ0hJTERfVU5VU0VEKQorCWlmIChQTVNpZ25hbFN0YXRlLT5jaGlsZF9zbG90 c1tzbG90XS5zdGF0ZSAhPSBQTV9DSElMRF9VTlVTRUQpCiAJCWVsb2coRkFUQUwsICJwb3N0 bWFzdGVyIGNoaWxkIHNsb3QgaXMgYWxyZWFkeSBpbiB1c2UiKTsKIAotCVBNU2lnbmFsU3Rh dGUtPlBNQ2hpbGRGbGFnc1tzbG90XSA9IFBNX0NISUxEX0FTU0lHTkVEOworCXBnX2F0b21p Y19pbml0X3UzMigmUE1TaWduYWxTdGF0ZS0+Y2hpbGRfc2xvdHNbc2xvdF0ucGdwcm9jbm8s ICh1aW50MzIpIElOVkFMSURfUFJPQ19OVU1CRVIpOworCVBNU2lnbmFsU3RhdGUtPmNoaWxk X3Nsb3RzW3Nsb3RdLnN0YXRlID0gUE1fQ0hJTERfQVNTSUdORUQ7CiB9CiAKIC8qCkBAIC0y NTAsNyArMjYwLDcgQEAgTWFya1Bvc3RtYXN0ZXJDaGlsZFNsb3RVbmFzc2lnbmVkKGludCBz bG90KQogewogCWJvb2wJCXJlc3VsdDsKIAotCUFzc2VydChzbG90ID4gMCAmJiBzbG90IDw9 IG51bV9jaGlsZF9mbGFncyk7CisJQXNzZXJ0KHNsb3QgPiAwICYmIHNsb3QgPD0gbnVtX2No aWxkX3Nsb3RzKTsKIAlzbG90LS07CiAKIAkvKgpAQCAtMjU4LDggKzI2OCw5IEBAIE1hcmtQ b3N0bWFzdGVyQ2hpbGRTbG90VW5hc3NpZ25lZChpbnQgc2xvdCkKIAkgKiBwb3N0bWFzdGVy LmMgaXMgc3VjaCB0aGF0IHRoaXMgbWlnaHQgZ2V0IGNhbGxlZCB0d2ljZSB3aGVuIGEgY2hp bGQKIAkgKiBjcmFzaGVzLiAgU28gd2UgZG9uJ3QgdHJ5IHRvIEFzc2VydCBhbnl0aGluZyBh Ym91dCB0aGUgc3RhdGUuCiAJICovCi0JcmVzdWx0ID0gKFBNU2lnbmFsU3RhdGUtPlBNQ2hp bGRGbGFnc1tzbG90XSA9PSBQTV9DSElMRF9BU1NJR05FRCk7Ci0JUE1TaWduYWxTdGF0ZS0+ UE1DaGlsZEZsYWdzW3Nsb3RdID0gUE1fQ0hJTERfVU5VU0VEOworCXJlc3VsdCA9IChQTVNp Z25hbFN0YXRlLT5jaGlsZF9zbG90c1tzbG90XS5zdGF0ZSA9PSBQTV9DSElMRF9BU1NJR05F RCk7CisJUE1TaWduYWxTdGF0ZS0+Y2hpbGRfc2xvdHNbc2xvdF0uc3RhdGUgPSBQTV9DSElM RF9VTlVTRUQ7CisJcGdfYXRvbWljX2luaXRfdTMyKCZQTVNpZ25hbFN0YXRlLT5jaGlsZF9z bG90c1tzbG90XS5wZ3Byb2NubywgKHVpbnQzMikgSU5WQUxJRF9QUk9DX05VTUJFUik7CiAJ cmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjcwLDEwICsyODEsMTAgQEAgTWFya1Bvc3RtYXN0 ZXJDaGlsZFNsb3RVbmFzc2lnbmVkKGludCBzbG90KQogYm9vbAogSXNQb3N0bWFzdGVyQ2hp bGRXYWxTZW5kZXIoaW50IHNsb3QpCiB7Ci0JQXNzZXJ0KHNsb3QgPiAwICYmIHNsb3QgPD0g bnVtX2NoaWxkX2ZsYWdzKTsKKwlBc3NlcnQoc2xvdCA+IDAgJiYgc2xvdCA8PSBudW1fY2hp bGRfc2xvdHMpOwogCXNsb3QtLTsKIAotCWlmIChQTVNpZ25hbFN0YXRlLT5QTUNoaWxkRmxh Z3Nbc2xvdF0gPT0gUE1fQ0hJTERfV0FMU0VOREVSKQorCWlmIChQTVNpZ25hbFN0YXRlLT5j aGlsZF9zbG90c1tzbG90XS5zdGF0ZSA9PSBQTV9DSElMRF9XQUxTRU5ERVIpCiAJCXJldHVy biB0cnVlOwogCWVsc2UKIAkJcmV0dXJuIGZhbHNlOwpAQCAtMjkxLDE1ICszMDIsNDMgQEAg UmVnaXN0ZXJQb3N0bWFzdGVyQ2hpbGRBY3RpdmUodm9pZCkKIHsKIAlpbnQJCQlzbG90ID0g TXlQTUNoaWxkU2xvdDsKIAotCUFzc2VydChzbG90ID4gMCAmJiBzbG90IDw9IFBNU2lnbmFs U3RhdGUtPm51bV9jaGlsZF9mbGFncyk7CisJQXNzZXJ0KHNsb3QgPiAwICYmIHNsb3QgPD0g UE1TaWduYWxTdGF0ZS0+bnVtX2NoaWxkX3Nsb3RzKTsKIAlzbG90LS07Ci0JQXNzZXJ0KFBN U2lnbmFsU3RhdGUtPlBNQ2hpbGRGbGFnc1tzbG90XSA9PSBQTV9DSElMRF9BU1NJR05FRCk7 Ci0JUE1TaWduYWxTdGF0ZS0+UE1DaGlsZEZsYWdzW3Nsb3RdID0gUE1fQ0hJTERfQUNUSVZF OworCUFzc2VydChQTVNpZ25hbFN0YXRlLT5jaGlsZF9zbG90c1tzbG90XS5zdGF0ZSA9PSBQ TV9DSElMRF9BU1NJR05FRCk7CisJUE1TaWduYWxTdGF0ZS0+Y2hpbGRfc2xvdHNbc2xvdF0u c3RhdGUgPSBQTV9DSElMRF9BQ1RJVkU7CiAKIAkvKiBBcnJhbmdlIHRvIGNsZWFuIHVwIGF0 IGV4aXQuICovCiAJb25fc2htZW1fZXhpdChNYXJrUG9zdG1hc3RlckNoaWxkSW5hY3RpdmUs IDApOwogfQogCisvKgorICovCit2b2lkCitSZWdpc3RlclBvc3RtYXN0ZXJDaGlsZFByb2NO dW1iZXIoUHJvY051bWJlciBwcm9jbm8pCit7CisJaW50CQkJc2xvdCA9IE15UE1DaGlsZFNs b3Q7CisKKwlBc3NlcnQoc2xvdCA+IDAgJiYgc2xvdCA8PSBQTVNpZ25hbFN0YXRlLT5udW1f Y2hpbGRfc2xvdHMpOworCXNsb3QtLTsKKwlBc3NlcnQoUE1TaWduYWxTdGF0ZS0+Y2hpbGRf c2xvdHNbc2xvdF0uc3RhdGUgPT0gUE1fQ0hJTERfQUNUSVZFKTsKKwlBc3NlcnQocGdfYXRv bWljX3JlYWRfdTMyKCZQTVNpZ25hbFN0YXRlLT5jaGlsZF9zbG90c1tzbG90XS5wZ3Byb2Nu bykgPT0gKHVpbnQzMikgSU5WQUxJRF9QUk9DX05VTUJFUik7CisJcGdfYXRvbWljX3dyaXRl X3UzMigmUE1TaWduYWxTdGF0ZS0+Y2hpbGRfc2xvdHNbc2xvdF0ucGdwcm9jbm8sICh1aW50 MzIpIHByb2Nubyk7Cit9CisKKy8qCisgKi8KK3ZvaWQKK1VucmVnaXN0ZXJQb3N0bWFzdGVy Q2hpbGRQcm9jTnVtYmVyKFByb2NOdW1iZXIgcHJvY25vKQoreworCWludAkJCXNsb3QgPSBN eVBNQ2hpbGRTbG90OworCisJQXNzZXJ0KHNsb3QgPiAwICYmIHNsb3QgPD0gUE1TaWduYWxT dGF0ZS0+bnVtX2NoaWxkX3Nsb3RzKTsKKwlzbG90LS07CisJQXNzZXJ0KFBNU2lnbmFsU3Rh dGUtPmNoaWxkX3Nsb3RzW3Nsb3RdLnN0YXRlID09IFBNX0NISUxEX0FDVElWRSk7CisJQXNz ZXJ0KHBnX2F0b21pY19yZWFkX3UzMigmUE1TaWduYWxTdGF0ZS0+Y2hpbGRfc2xvdHNbc2xv dF0ucGdwcm9jbm8pID09ICh1aW50MzIpIHByb2Nubyk7CisJcGdfYXRvbWljX3dyaXRlX3Uz MigmUE1TaWduYWxTdGF0ZS0+Y2hpbGRfc2xvdHNbc2xvdF0ucGdwcm9jbm8sICh1aW50MzIp IElOVkFMSURfUFJPQ19OVU1CRVIpOworfQorCiAvKgogICogTWFya1Bvc3RtYXN0ZXJDaGls ZFdhbFNlbmRlciAtIG1hcmsgYSBwb3N0bWFzdGVyIGNoaWxkIGFzIGEgV0FMIHNlbmRlcgog ICogcHJvY2Vzcy4gIFRoaXMgaXMgY2FsbGVkIGluIHRoZSBjaGlsZCBwcm9jZXNzLCBzb21l dGltZSBhZnRlciBtYXJraW5nIHRoZQpAQCAtMzEyLDEwICszNTEsMTAgQEAgTWFya1Bvc3Rt YXN0ZXJDaGlsZFdhbFNlbmRlcih2b2lkKQogCiAJQXNzZXJ0KGFtX3dhbHNlbmRlcik7CiAK LQlBc3NlcnQoc2xvdCA+IDAgJiYgc2xvdCA8PSBQTVNpZ25hbFN0YXRlLT5udW1fY2hpbGRf ZmxhZ3MpOworCUFzc2VydChzbG90ID4gMCAmJiBzbG90IDw9IFBNU2lnbmFsU3RhdGUtPm51 bV9jaGlsZF9zbG90cyk7CiAJc2xvdC0tOwotCUFzc2VydChQTVNpZ25hbFN0YXRlLT5QTUNo aWxkRmxhZ3Nbc2xvdF0gPT0gUE1fQ0hJTERfQUNUSVZFKTsKLQlQTVNpZ25hbFN0YXRlLT5Q TUNoaWxkRmxhZ3Nbc2xvdF0gPSBQTV9DSElMRF9XQUxTRU5ERVI7CisJQXNzZXJ0KFBNU2ln bmFsU3RhdGUtPmNoaWxkX3Nsb3RzW3Nsb3RdLnN0YXRlID09IFBNX0NISUxEX0FDVElWRSk7 CisJUE1TaWduYWxTdGF0ZS0+Y2hpbGRfc2xvdHNbc2xvdF0uc3RhdGUgPSBQTV9DSElMRF9X QUxTRU5ERVI7CiB9CiAKIC8qCkBAIC0zMjcsMTEgKzM2NiwxMSBAQCBNYXJrUG9zdG1hc3Rl ckNoaWxkSW5hY3RpdmUoaW50IGNvZGUsIERhdHVtIGFyZykKIHsKIAlpbnQJCQlzbG90ID0g TXlQTUNoaWxkU2xvdDsKIAotCUFzc2VydChzbG90ID4gMCAmJiBzbG90IDw9IFBNU2lnbmFs U3RhdGUtPm51bV9jaGlsZF9mbGFncyk7CisJQXNzZXJ0KHNsb3QgPiAwICYmIHNsb3QgPD0g UE1TaWduYWxTdGF0ZS0+bnVtX2NoaWxkX3Nsb3RzKTsKIAlzbG90LS07Ci0JQXNzZXJ0KFBN U2lnbmFsU3RhdGUtPlBNQ2hpbGRGbGFnc1tzbG90XSA9PSBQTV9DSElMRF9BQ1RJVkUgfHwK LQkJICAgUE1TaWduYWxTdGF0ZS0+UE1DaGlsZEZsYWdzW3Nsb3RdID09IFBNX0NISUxEX1dB TFNFTkRFUik7Ci0JUE1TaWduYWxTdGF0ZS0+UE1DaGlsZEZsYWdzW3Nsb3RdID0gUE1fQ0hJ TERfQVNTSUdORUQ7CisJQXNzZXJ0KFBNU2lnbmFsU3RhdGUtPmNoaWxkX3Nsb3RzW3Nsb3Rd LnN0YXRlID09IFBNX0NISUxEX0FDVElWRSB8fAorCQkgICBQTVNpZ25hbFN0YXRlLT5jaGls ZF9zbG90c1tzbG90XS5zdGF0ZSA9PSBQTV9DSElMRF9XQUxTRU5ERVIpOworCVBNU2lnbmFs U3RhdGUtPmNoaWxkX3Nsb3RzW3Nsb3RdLnN0YXRlID0gUE1fQ0hJTERfQVNTSUdORUQ7CiB9 CiAKIApAQCAtNDMwLDMgKzQ2OSwxMiBAQCBQb3N0bWFzdGVyRGVhdGhTaWduYWxJbml0KHZv aWQpCiAJcG9zdG1hc3Rlcl9wb3NzaWJseV9kZWFkID0gdHJ1ZTsKICNlbmRpZgkJCQkJCQkv KiBVU0VfUE9TVE1BU1RFUl9ERUFUSF9TSUdOQUwgKi8KIH0KKworUHJvY051bWJlcgorR2V0 UE1DaGlsZFByb2NOdW1iZXIoaW50IHNsb3QpCit7CisJQXNzZXJ0KHNsb3QgPiAwICYmIHNs b3QgPD0gUE1TaWduYWxTdGF0ZS0+bnVtX2NoaWxkX3Nsb3RzKTsKKwlzbG90LS07CisKKwly ZXR1cm4gKFByb2NOdW1iZXIpIHBnX2F0b21pY19yZWFkX3UzMigmUE1TaWduYWxTdGF0ZS0+ Y2hpbGRfc2xvdHNbc2xvdF0ucGdwcm9jbm8pOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9w cm9jYXJyYXkuYwppbmRleCA0MjNjYTNhZWFhMS4uMTQ4YWUzMmUzMzQgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NhcnJheS5jCisrKyBiL3NyYy9iYWNrZW5k L3N0b3JhZ2UvaXBjL3Byb2NhcnJheS5jCkBAIC01NCw2ICs1NCw3IEBACiAjaW5jbHVkZSAi YWNjZXNzL3hsb2d1dGlscy5oIgogI2luY2x1ZGUgImNhdGFsb2cvY2F0YWxvZy5oIgogI2lu Y2x1ZGUgImNhdGFsb2cvcGdfYXV0aGlkLmgiCisjaW5jbHVkZSAiaXBjL2ludGVycnVwdC5o IgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1 ZGUgInBvc3RtYXN0ZXIvYmd3b3JrZXIuaCIKQEAgLTM0NTAsMjcgKzM0NTEsMjcgQEAgR2V0 Q29uZmxpY3RpbmdWaXJ0dWFsWElEcyhUcmFuc2FjdGlvbklkIGxpbWl0WG1pbiwgT2lkIGRi T2lkKQogICoKICAqIFRoZSAncGlkJyBpcyByZWR1bmRhbnQgd2l0aCAncHJvYycsIGJ1dCBp dCBhY3RzIGFzIGEgY3Jvc3MtY2hlY2sgdG8KICAqIGRldGVjdCBwcm9jZXNzIGhhZCBleGl0 ZWQgYW5kIHRoZSBQR1BST0MgZW50cnkgd2FzIHJldXNlZCBmb3IgYSBkaWZmZXJlbnQKLSAq IHByb2Nlc3MuCisgKiBwcm9jZXNzLiBGSVhNRTogbG9zdCB0aGUgY3Jvc3NjaGVjay4gUmUt aW50cm9kdWNlIGEgc2Vzc2lvbiBJRCBvciBzb21ldGhpbmc/CiAgKgogICogUmV0dXJucyB0 cnVlIGlmIHRoZSBwcm9jZXNzIHdhcyBzaWduYWxlZCwgb3IgZmFsc2UgaWYgbm90IGZvdW5k LgogICovCiBib29sCi1TaWduYWxSZWNvdmVyeUNvbmZsaWN0KFBHUFJPQyAqcHJvYywgcGlk X3QgcGlkLCBSZWNvdmVyeUNvbmZsaWN0UmVhc29uIHJlYXNvbikKK1NpZ25hbFJlY292ZXJ5 Q29uZmxpY3QoUEdQUk9DICpwcm9jLCBSZWNvdmVyeUNvbmZsaWN0UmVhc29uIHJlYXNvbikK IHsKIAlib29sCQlmb3VuZCA9IGZhbHNlOwogCiAJTFdMb2NrQWNxdWlyZShQcm9jQXJyYXlM b2NrLCBMV19TSEFSRUQpOwogCiAJLyoKLQkgKiBLaWxsIHRoZSBwaWQgaWYgaXQncyBzdGls bCBoZXJlLiBJZiBub3QsIHRoYXQncyB3aGF0IHdlIHdhbnRlZCBzbworCSAqIEtpbGwgdGhl IHByb2Nlc3MgaWYgaXQncyBzdGlsbCBoZXJlLiBJZiBub3QsIHRoYXQncyB3aGF0IHdlIHdh bnRlZCBzbwogCSAqIGlnbm9yZSBhbnkgZXJyb3JzLgogCSAqLwotCWlmIChwcm9jLT5waWQg PT0gcGlkKQorCWlmIChwcm9jLT5waWQgIT0gMCkKIAl7CiAJCSh2b2lkKSBwZ19hdG9taWNf ZmV0Y2hfb3JfdTMyKCZwcm9jLT5wZW5kaW5nUmVjb3ZlcnlDb25mbGljdHMsICgxIDw8IHJl YXNvbikpOwogCiAJCS8qIHdha2UgdXAgdGhlIHByb2Nlc3MgKi8KLQkJKHZvaWQpIFNlbmRQ cm9jU2lnbmFsKHBpZCwgUFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVCwgR2V0TnVtYmVyRnJv bVBHUHJvYyhwcm9jKSk7CisJCVNlbmRJbnRlcnJ1cHQoSU5URVJSVVBUX1JFQ09WRVJZX0NP TkZMSUNULCBHZXROdW1iZXJGcm9tUEdQcm9jKHByb2MpKTsKIAkJZm91bmQgPSB0cnVlOwog CX0KIApAQCAtMzUxMCwxMCArMzUxMSwxMCBAQCBTaWduYWxSZWNvdmVyeUNvbmZsaWN0V2l0 aFZpcnR1YWxYSUQoVmlydHVhbFRyYW5zYWN0aW9uSWQgdnhpZCwgUmVjb3ZlcnlDb25mbGlj dAogCQkJCSh2b2lkKSBwZ19hdG9taWNfZmV0Y2hfb3JfdTMyKCZwcm9jLT5wZW5kaW5nUmVj b3ZlcnlDb25mbGljdHMsICgxIDw8IHJlYXNvbikpOwogCiAJCQkJLyoKLQkJCQkgKiBLaWxs IHRoZSBwaWQgaWYgaXQncyBzdGlsbCBoZXJlLiBJZiBub3QsIHRoYXQncyB3aGF0IHdlCisJ CQkJICogS2lsbCB0aGUgcHJvY2VzcyBpZiBpdCdzIHN0aWxsIGhlcmUuIElmIG5vdCwgdGhh dCdzIHdoYXQgd2UKIAkJCQkgKiB3YW50ZWQgc28gaWdub3JlIGFueSBlcnJvcnMuCiAJCQkJ ICovCi0JCQkJKHZvaWQpIFNlbmRQcm9jU2lnbmFsKHBpZCwgUFJPQ1NJR19SRUNPVkVSWV9D T05GTElDVCwgdnhpZC5wcm9jTnVtYmVyKTsKKwkJCQlTZW5kSW50ZXJydXB0KElOVEVSUlVQ VF9SRUNPVkVSWV9DT05GTElDVCwgdnhpZC5wcm9jTnVtYmVyKTsKIAkJCX0KIAkJCWJyZWFr OwogCQl9CkBAIC0zNTQ1LDIxICszNTQ2LDE4IEBAIFNpZ25hbFJlY292ZXJ5Q29uZmxpY3RX aXRoRGF0YWJhc2UoT2lkIGRhdGFiYXNlaWQsIFJlY292ZXJ5Q29uZmxpY3RSZWFzb24gcmVh c29uCiAKIAkJaWYgKGRhdGFiYXNlaWQgPT0gSW52YWxpZE9pZCB8fCBwcm9jLT5kYXRhYmFz ZUlkID09IGRhdGFiYXNlaWQpCiAJCXsKLQkJCVZpcnR1YWxUcmFuc2FjdGlvbklkIHByb2N2 eGlkOwogCQkJcGlkX3QJCXBpZDsKIAotCQkJR0VUX1ZYSURfRlJPTV9QR1BST0MocHJvY3Z4 aWQsICpwcm9jKTsKLQogCQkJcGlkID0gcHJvYy0+cGlkOwogCQkJaWYgKHBpZCAhPSAwKQog CQkJewogCQkJCSh2b2lkKSBwZ19hdG9taWNfZmV0Y2hfb3JfdTMyKCZwcm9jLT5wZW5kaW5n UmVjb3ZlcnlDb25mbGljdHMsICgxIDw8IHJlYXNvbikpOwogCiAJCQkJLyoKLQkJCQkgKiBL aWxsIHRoZSBwaWQgaWYgaXQncyBzdGlsbCBoZXJlLiBJZiBub3QsIHRoYXQncyB3aGF0IHdl CisJCQkJICogS2lsbCB0aGUgcHJvY2VzcyBpZiBpdCdzIHN0aWxsIGhlcmUuIElmIG5vdCwg dGhhdCdzIHdoYXQgd2UKIAkJCQkgKiB3YW50ZWQgc28gaWdub3JlIGFueSBlcnJvcnMuCiAJ CQkJICovCi0JCQkJKHZvaWQpIFNlbmRQcm9jU2lnbmFsKHBpZCwgUFJPQ1NJR19SRUNPVkVS WV9DT05GTElDVCwgcHJvY3Z4aWQucHJvY051bWJlcik7CisJCQkJU2VuZEludGVycnVwdChJ TlRFUlJVUFRfUkVDT1ZFUllfQ09ORkxJQ1QsIEdldE51bWJlckZyb21QR1Byb2MocHJvYykp OwogCQkJfQogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMv cHJvY3NpZ25hbC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jCmlu ZGV4IDVkMzM1NTk5MjZhLi5iODA0MjY4MjhiMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv c3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBj L3Byb2NzaWduYWwuYwpAQCAtMTksNiArMTksNyBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL3Bh cmFsbGVsLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvYXN5bmMuaCIKKyNpbmNsdWRlICJpcGMv aW50ZXJydXB0LmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGdzdGF0 LmgiCiAjaW5jbHVkZSAicG9ydC9wZ19iaXR1dGlscy5oIgpAQCAtMjYsNyArMjcsNyBAQAog I2luY2x1ZGUgInJlcGxpY2F0aW9uL3dhbHNlbmRlci5oIgogI2luY2x1ZGUgInN0b3JhZ2Uv Y29uZGl0aW9uX3ZhcmlhYmxlLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKLSNpbmNs dWRlICJzdG9yYWdlL2xhdGNoLmgiCisjaW5jbHVkZSAic3RvcmFnZS9wcm9jc2lnbmFsLmgi CiAjaW5jbHVkZSAic3RvcmFnZS9zaG1lbS5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc2ludmFs LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zbWdyLmgiCkBAIC0zNCwyOCArMzUsMjEgQEAKICNp bmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogCiAvKgotICogVGhlIFNJR1VTUjEgc2lnbmFs IGlzIG11bHRpcGxleGVkIHRvIHN1cHBvcnQgc2lnbmFsaW5nIG11bHRpcGxlIGV2ZW50Ci0g KiB0eXBlcy4gVGhlIHNwZWNpZmljIHJlYXNvbiBpcyBjb21tdW5pY2F0ZWQgdmlhIGZsYWdz IGluIHNoYXJlZCBtZW1vcnkuCi0gKiBXZSBrZWVwIGEgYm9vbGVhbiBmbGFnIGZvciBlYWNo IHBvc3NpYmxlICJyZWFzb24iLCBzbyB0aGF0IGRpZmZlcmVudAotICogcmVhc29ucyBjYW4g YmUgc2lnbmFsZWQgdG8gYSBwcm9jZXNzIGNvbmN1cnJlbnRseS4gIChIb3dldmVyLCBpZiB0 aGUgc2FtZQotICogcmVhc29uIGlzIHNpZ25hbGVkIG1vcmUgdGhhbiBvbmNlIG5lYXJseSBz aW11bHRhbmVvdXNseSwgdGhlIHByb2Nlc3MgbWF5Ci0gKiBvYnNlcnZlIGl0IG9ubHkgb25j ZS4pCisgKiBTdGF0ZSBmb3IgdGhlIFByb2NTaWduYWxCYXJyaWVyIG1lY2hhbmlzbSBhbmQg cXVlcnkgY2FuY2VsbGF0aW9uLgogICoKLSAqIEVhY2ggcHJvY2VzcyB0aGF0IHdhbnRzIHRv IHJlY2VpdmUgc2lnbmFscyByZWdpc3RlcnMgaXRzIHByb2Nlc3MgSUQKLSAqIGluIHRoZSBQ cm9jU2lnbmFsU2xvdHMgYXJyYXkuIFRoZSBhcnJheSBpcyBpbmRleGVkIGJ5IFByb2NOdW1i ZXIgdG8gbWFrZQotICogc2xvdCBhbGxvY2F0aW9uIHNpbXBsZSwgYW5kIHRvIGF2b2lkIGhh dmluZyB0byBzZWFyY2ggdGhlIGFycmF5IHdoZW4geW91Ci0gKiBrbm93IHRoZSBQcm9jTnVt YmVyIG9mIHRoZSBwcm9jZXNzIHlvdSdyZSBzaWduYWxpbmcuICAoV2UgZG8gc3VwcG9ydAot ICogc2lnbmFsaW5nIHdpdGhvdXQgUHJvY051bWJlciwgYnV0IGl0J3MgYSBiaXQgbGVzcyBl ZmZpY2llbnQuKQorICogRWFjaCBwcm9jZXNzIHRoYXQgd2FudHMgdG8gcGFydGljaXBhdGUg aW4gYmFycmllcnMgb3IgcXVlcnkgY2FuY2VsbGF0aW9uCisgKiByZWdpc3RlcnMgaXRzIHBy b2Nlc3MgSUQgaW4gdGhlIFByb2NTaWduYWxTbG90cyBhcnJheS4gVGhlIGFycmF5IGlzIGlu ZGV4ZWQKKyAqIGJ5IFByb2NOdW1iZXIgdG8gbWFrZSBzbG90IGFsbG9jYXRpb24gc2ltcGxl LgogICoKICAqIFRoZSBmaWVsZHMgaW4gZWFjaCBzbG90IGFyZSBwcm90ZWN0ZWQgYnkgYSBz cGlubG9jaywgcHNzX211dGV4LiBwc3NfcGlkIGNhbgogICogYWxzbyBiZSByZWFkIHdpdGhv dXQgaG9sZGluZyB0aGUgc3BpbmxvY2ssIGFzIGEgcXVpY2sgcHJlbGltaW5hcnkgY2hlY2sK ICAqIHdoZW4gc2VhcmNoaW5nIGZvciBhIHBhcnRpY3VsYXIgUElEIGluIHRoZSBhcnJheS4K ICAqCi0gKiBwc3Nfc2lnbmFsRmxhZ3MgYXJlIGludGVuZGVkIHRvIGJlIHNldCBpbiBjYXNl cyB3aGVyZSB3ZSBkb24ndCBuZWVkIHRvCi0gKiBrZWVwIHRyYWNrIG9mIHdoZXRoZXIgb3Ig bm90IHRoZSB0YXJnZXQgcHJvY2VzcyBoYXMgaGFuZGxlZCB0aGUgc2lnbmFsLAotICogYnV0 IHNvbWV0aW1lcyB3ZSBuZWVkIGNvbmZpcm1hdGlvbiwgYXMgd2hlbiBtYWtpbmcgYSBnbG9i YWwgc3RhdGUgY2hhbmdlCi0gKiB0aGF0IGNhbm5vdCBiZSBjb25zaWRlcmVkIGNvbXBsZXRl IHVudGlsIGFsbCBiYWNrZW5kcyBoYXZlIHRha2VuIG5vdGljZQotICogb2YgaXQuIEZvciBz dWNoIHVzZSBjYXNlcywgd2Ugc2V0IGEgYml0IGluIHBzc19iYXJyaWVyQ2hlY2tNYXNrIGFu ZCB0aGVuCisgKiBQbGFpbiBpbnRlcnJ1cHRzIGFyZSBpbnRlbmRlZCB0byBiZSBzZXQgaW4g Y2FzZXMgd2hlcmUgd2UgZG9uJ3QgbmVlZCB0bworICoga2VlcCB0cmFjayBvZiB3aGV0aGVy IG9yIG5vdCB0aGUgdGFyZ2V0IHByb2Nlc3MgaGFzIGhhbmRsZWQgdGhlIHNpZ25hbCwgYnV0 CisgKiBzb21ldGltZXMgd2UgbmVlZCBjb25maXJtYXRpb24sIGFzIHdoZW4gbWFraW5nIGEg Z2xvYmFsIHN0YXRlIGNoYW5nZSB0aGF0CisgKiBjYW5ub3QgYmUgY29uc2lkZXJlZCBjb21w bGV0ZSB1bnRpbCBhbGwgYmFja2VuZHMgaGF2ZSB0YWtlbiBub3RpY2Ugb2YKKyAqIGl0LiBG b3Igc3VjaCB1c2UgY2FzZXMsIHdlIHNldCBhIGJpdCBpbiBwc3NfYmFycmllckNoZWNrTWFz ayBhbmQgdGhlbgogICogaW5jcmVtZW50IHRoZSBjdXJyZW50ICJiYXJyaWVyIGdlbmVyYXRp b24iOyB3aGVuIHRoZSBuZXcgYmFycmllciBnZW5lcmF0aW9uCiAgKiAob3IgZ3JlYXRlcikg YXBwZWFycyBpbiB0aGUgcHNzX2JhcnJpZXJHZW5lcmF0aW9uIGZsYWcgb2YgZXZlcnkgcHJv Y2VzcywKICAqIHdlIGtub3cgdGhhdCB0aGUgbWVzc2FnZSBoYXMgYmVlbiByZWNlaXZlZCBl dmVyeXdoZXJlLgpAQCAtNjUsNyArNTksNiBAQCB0eXBlZGVmIHN0cnVjdAogCXBnX2F0b21p Y191aW50MzIgcHNzX3BpZDsKIAlpbnQJCQlwc3NfY2FuY2VsX2tleV9sZW47IC8qIDAgbWVh bnMgbm8gY2FuY2VsbGF0aW9uIGlzIHBvc3NpYmxlICovCiAJdWludDgJCXBzc19jYW5jZWxf a2V5W01BWF9DQU5DRUxfS0VZX0xFTkdUSF07Ci0Jdm9sYXRpbGUgc2lnX2F0b21pY190IHBz c19zaWduYWxGbGFnc1tOVU1fUFJPQ1NJR05BTFNdOwogCXNsb2NrX3QJCXBzc19tdXRleDsJ CS8qIHByb3RlY3RzIHRoZSBhYm92ZSBmaWVsZHMgKi8KIAogCS8qIEJhcnJpZXItcmVsYXRl ZCBmaWVsZHMgKG5vdCBwcm90ZWN0ZWQgYnkgcHNzX211dGV4KSAqLwpAQCAtMTA1LDcgKzk4 LDYgQEAgc3RydWN0IFByb2NTaWduYWxIZWFkZXIKIE5PTl9FWEVDX1NUQVRJQyBQcm9jU2ln bmFsSGVhZGVyICpQcm9jU2lnbmFsID0gTlVMTDsKIHN0YXRpYyBQcm9jU2lnbmFsU2xvdCAq TXlQcm9jU2lnbmFsU2xvdCA9IE5VTEw7CiAKLXN0YXRpYyBib29sIENoZWNrUHJvY1NpZ25h bChQcm9jU2lnbmFsUmVhc29uIHJlYXNvbik7CiBzdGF0aWMgdm9pZCBDbGVhbnVwUHJvY1Np Z25hbFN0YXRlKGludCBzdGF0dXMsIERhdHVtIGFyZyk7CiBzdGF0aWMgdm9pZCBSZXNldFBy b2NTaWduYWxCYXJyaWVyQml0cyh1aW50MzIgZmxhZ3MpOwogCkBAIC0xNTAsNyArMTQyLDYg QEAgUHJvY1NpZ25hbFNobWVtSW5pdCh2b2lkKQogCQkJU3BpbkxvY2tJbml0KCZzbG90LT5w c3NfbXV0ZXgpOwogCQkJcGdfYXRvbWljX2luaXRfdTMyKCZzbG90LT5wc3NfcGlkLCAwKTsK IAkJCXNsb3QtPnBzc19jYW5jZWxfa2V5X2xlbiA9IDA7Ci0JCQlNZW1TZXQoc2xvdC0+cHNz X3NpZ25hbEZsYWdzLCAwLCBzaXplb2Yoc2xvdC0+cHNzX3NpZ25hbEZsYWdzKSk7CiAJCQlw Z19hdG9taWNfaW5pdF91NjQoJnNsb3QtPnBzc19iYXJyaWVyR2VuZXJhdGlvbiwgUEdfVUlO VDY0X01BWCk7CiAJCQlwZ19hdG9taWNfaW5pdF91MzIoJnNsb3QtPnBzc19iYXJyaWVyQ2hl Y2tNYXNrLCAwKTsKIAkJCUNvbmRpdGlvblZhcmlhYmxlSW5pdCgmc2xvdC0+cHNzX2JhcnJp ZXJDVik7CkBAIC0xODEsOSArMTcyLDYgQEAgUHJvY1NpZ25hbEluaXQoY29uc3QgdWludDgg KmNhbmNlbF9rZXksIGludCBjYW5jZWxfa2V5X2xlbikKIAkvKiBWYWx1ZSB1c2VkIGZvciBz YW5pdHkgY2hlY2sgYmVsb3cgKi8KIAlvbGRfcHNzX3BpZCA9IHBnX2F0b21pY19yZWFkX3Uz Migmc2xvdC0+cHNzX3BpZCk7CiAKLQkvKiBDbGVhciBvdXQgYW55IGxlZnRvdmVyIHNpZ25h bCByZWFzb25zICovCi0JTWVtU2V0KHNsb3QtPnBzc19zaWduYWxGbGFncywgMCwgTlVNX1BS T0NTSUdOQUxTICogc2l6ZW9mKHNpZ19hdG9taWNfdCkpOwotCiAJLyoKIAkgKiBJbml0aWFs aXplIGJhcnJpZXIgc3RhdGUuIFNpbmNlIHdlJ3JlIGEgYnJhbmQtbmV3IHByb2Nlc3MsIHRo ZXJlCiAJICogc2hvdWxkbid0IGJlIGFueSBsZWZ0b3ZlciBiYWNrZW5kLXByaXZhdGUgc3Rh dGUgdGhhdCBuZWVkcyB0byBiZQpAQCAtMjMyLDkgKzIyMCwxMCBAQCBDbGVhbnVwUHJvY1Np Z25hbFN0YXRlKGludCBzdGF0dXMsIERhdHVtIGFyZykKIAlQcm9jU2lnbmFsU2xvdCAqc2xv dCA9IE15UHJvY1NpZ25hbFNsb3Q7CiAKIAkvKgotCSAqIENsZWFyIE15UHJvY1NpZ25hbFNs b3QsIHNvIHRoYXQgYSBTSUdVU1IxIHJlY2VpdmVkIGFmdGVyIHRoaXMgcG9pbnQKLQkgKiB3 b24ndCB0cnkgdG8gYWNjZXNzIGl0IGFmdGVyIGl0J3Mgbm8gbG9uZ2VyIG91cnMgKGFuZCBw ZXJoYXBzIGV2ZW4KLQkgKiBhZnRlciB3ZSd2ZSB1bm1hcHBlZCB0aGUgc2hhcmVkIG1lbW9y eSBzZWdtZW50KS4KKwkgKiBDbGVhciBNeVByb2NTaWduYWxTbG90LCBzbyB0aGF0IGlmIElO VEVSUlVQVF9CQVJSSUVSIGlzIHJlY2VpdmVkIGFmdGVyCisJICogdGhpcyBwb2ludCwgUHJv Y2Vzc1Byb2NTaWduYWxCYXJyaWVyKCkgd29uJ3QgdHJ5IHRvIGFjY2VzcyBpdCBhZnRlcgor CSAqIGl0J3Mgbm8gbG9uZ2VyIG91cnMgKGFuZCBwZXJoYXBzIGV2ZW4gYWZ0ZXIgd2UndmUg dW5tYXBwZWQgdGhlIHNoYXJlZAorCSAqIG1lbW9yeSBzZWdtZW50KS4KIAkgKi8KIAlBc3Nl cnQoTXlQcm9jU2lnbmFsU2xvdCAhPSBOVUxMKTsKIAlNeVByb2NTaWduYWxTbG90ID0gTlVM TDsKQEAgLTI2OSw3MyArMjU4LDYgQEAgQ2xlYW51cFByb2NTaWduYWxTdGF0ZShpbnQgc3Rh dHVzLCBEYXR1bSBhcmcpCiAJQ29uZGl0aW9uVmFyaWFibGVCcm9hZGNhc3QoJnNsb3QtPnBz c19iYXJyaWVyQ1YpOwogfQogCi0vKgotICogU2VuZFByb2NTaWduYWwKLSAqCQlTZW5kIGEg c2lnbmFsIHRvIGEgUG9zdGdyZXMgcHJvY2VzcwotICoKLSAqIFByb3ZpZGluZyBwcm9jTnVt YmVyIGlzIG9wdGlvbmFsLCBidXQgaXQgd2lsbCBzcGVlZCB1cCB0aGUgb3BlcmF0aW9uLgot ICoKLSAqIE9uIHN1Y2Nlc3MgKGEgc2lnbmFsIHdhcyBzZW50KSwgemVybyBpcyByZXR1cm5l ZC4KLSAqIE9uIGVycm9yLCAtMSBpcyByZXR1cm5lZCwgYW5kIGVycm5vIGlzIHNldCAodHlw aWNhbGx5IHRvIEVTUkNIIG9yIEVQRVJNKS4KLSAqCi0gKiBOb3QgdG8gYmUgY29uZnVzZWQg d2l0aCBQcm9jU2VuZFNpZ25hbAotICovCi1pbnQKLVNlbmRQcm9jU2lnbmFsKHBpZF90IHBp ZCwgUHJvY1NpZ25hbFJlYXNvbiByZWFzb24sIFByb2NOdW1iZXIgcHJvY051bWJlcikKLXsK LQl2b2xhdGlsZSBQcm9jU2lnbmFsU2xvdCAqc2xvdDsKLQotCWlmIChwcm9jTnVtYmVyICE9 IElOVkFMSURfUFJPQ19OVU1CRVIpCi0JewotCQlBc3NlcnQocHJvY051bWJlciA8IE51bVBy b2NTaWduYWxTbG90cyk7Ci0JCXNsb3QgPSAmUHJvY1NpZ25hbC0+cHNoX3Nsb3RbcHJvY051 bWJlcl07Ci0KLQkJU3BpbkxvY2tBY3F1aXJlKCZzbG90LT5wc3NfbXV0ZXgpOwotCQlpZiAo cGdfYXRvbWljX3JlYWRfdTMyKCZzbG90LT5wc3NfcGlkKSA9PSBwaWQpCi0JCXsKLQkJCS8q IEF0b21pY2FsbHkgc2V0IHRoZSBwcm9wZXIgZmxhZyAqLwotCQkJc2xvdC0+cHNzX3NpZ25h bEZsYWdzW3JlYXNvbl0gPSB0cnVlOwotCQkJU3BpbkxvY2tSZWxlYXNlKCZzbG90LT5wc3Nf bXV0ZXgpOwotCQkJLyogU2VuZCBzaWduYWwgKi8KLQkJCXJldHVybiBraWxsKHBpZCwgU0lH VVNSMSk7Ci0JCX0KLQkJU3BpbkxvY2tSZWxlYXNlKCZzbG90LT5wc3NfbXV0ZXgpOwotCX0K LQllbHNlCi0JewotCQkvKgotCQkgKiBwcm9jTnVtYmVyIG5vdCBwcm92aWRlZCwgc28gc2Vh cmNoIHRoZSBhcnJheSB1c2luZyBwaWQuICBXZSBzZWFyY2gKLQkJICogdGhlIGFycmF5IGJh Y2sgdG8gZnJvbnQgc28gYXMgdG8gcmVkdWNlIHNlYXJjaCBvdmVyaGVhZC4gIFBhc3NpbmcK LQkJICogSU5WQUxJRF9QUk9DX05VTUJFUiBtZWFucyB0aGF0IHRoZSB0YXJnZXQgaXMgbW9z dCBsaWtlbHkgYW4KLQkJICogYXV4aWxpYXJ5IHByb2Nlc3MsIHdoaWNoIHdpbGwgaGF2ZSBh IHNsb3QgbmVhciB0aGUgZW5kIG9mIHRoZQotCQkgKiBhcnJheS4KLQkJICovCi0JCWludAkJ CWk7Ci0KLQkJZm9yIChpID0gTnVtUHJvY1NpZ25hbFNsb3RzIC0gMTsgaSA+PSAwOyBpLS0p Ci0JCXsKLQkJCXNsb3QgPSAmUHJvY1NpZ25hbC0+cHNoX3Nsb3RbaV07Ci0KLQkJCWlmIChw Z19hdG9taWNfcmVhZF91MzIoJnNsb3QtPnBzc19waWQpID09IHBpZCkKLQkJCXsKLQkJCQlT cGluTG9ja0FjcXVpcmUoJnNsb3QtPnBzc19tdXRleCk7Ci0JCQkJaWYgKHBnX2F0b21pY19y ZWFkX3UzMigmc2xvdC0+cHNzX3BpZCkgPT0gcGlkKQotCQkJCXsKLQkJCQkJLyogQXRvbWlj YWxseSBzZXQgdGhlIHByb3BlciBmbGFnICovCi0JCQkJCXNsb3QtPnBzc19zaWduYWxGbGFn c1tyZWFzb25dID0gdHJ1ZTsKLQkJCQkJU3BpbkxvY2tSZWxlYXNlKCZzbG90LT5wc3NfbXV0 ZXgpOwotCQkJCQkvKiBTZW5kIHNpZ25hbCAqLwotCQkJCQlyZXR1cm4ga2lsbChwaWQsIFNJ R1VTUjEpOwotCQkJCX0KLQkJCQlTcGluTG9ja1JlbGVhc2UoJnNsb3QtPnBzc19tdXRleCk7 Ci0JCQl9Ci0JCX0KLQl9Ci0KLQllcnJubyA9IEVTUkNIOwotCXJldHVybiAtMTsKLX0KLQog LyoKICAqIEVtaXRQcm9jU2lnbmFsQmFycmllcgogICoJCVNlbmQgYSBzaWduYWwgdG8gZXZl cnkgUG9zdGdyZXMgcHJvY2VzcwpAQCAtMzgwLDggKzMwMiw4IEBAIEVtaXRQcm9jU2lnbmFs QmFycmllcihQcm9jU2lnbmFsQmFycmllclR5cGUgdHlwZSkKIAkJcGdfYXRvbWljX2FkZF9m ZXRjaF91NjQoJlByb2NTaWduYWwtPnBzaF9iYXJyaWVyR2VuZXJhdGlvbiwgMSk7CiAKIAkv KgotCSAqIFNpZ25hbCBhbGwgdGhlIHByb2Nlc3Nlcywgc28gdGhhdCB0aGV5IHVwZGF0ZSB0 aGVpciBhZHZlcnRpc2VkIGJhcnJpZXIKLQkgKiBnZW5lcmF0aW9uLgorCSAqIFNlbmQgYW4g aW50ZXJydXB0IHRvIGFsbCB0aGUgcHJvY2Vzc2VzLCBzbyB0aGF0IHRoZXkgdXBkYXRlIHRo ZWlyCisJICogYWR2ZXJ0aXNlZCBiYXJyaWVyIGdlbmVyYXRpb24uCiAJICoKIAkgKiBDb25j dXJyZW5jeSBpcyBub3QgYSBwcm9ibGVtIGhlcmUuIEJhY2tlbmRzIHRoYXQgaGF2ZSBleGl0 ZWQgZG9uJ3QKIAkgKiBtYXR0ZXIsIGFuZCBuZXcgYmFja2VuZHMgdGhhdCBoYXZlIGpvaW5l ZCBzaW5jZSB3ZSBlbnRlcmVkIHRoaXMKQEAgLTM5MiwyNSArMzE0LDEyIEBAIEVtaXRQcm9j U2lnbmFsQmFycmllcihQcm9jU2lnbmFsQmFycmllclR5cGUgdHlwZSkKIAkgKiBiYWNrZW5k cyB0aGF0IG5lZWQgdG8gdXBkYXRlIHN0YXRlIC0gYnV0IHRoZXkgd29uJ3QgYWN0dWFsbHkg bmVlZCB0bwogCSAqIGNoYW5nZSBhbnkgc3RhdGUuCiAJICovCi0JZm9yIChpbnQgaSA9IE51 bVByb2NTaWduYWxTbG90cyAtIDE7IGkgPj0gMDsgaS0tKQorCWZvciAoUHJvY051bWJlciBw Z3Byb2NubyA9IDA7IHBncHJvY25vIDwgTnVtUHJvY1NpZ25hbFNsb3RzOyBwZ3Byb2Nubysr KQogCXsKLQkJdm9sYXRpbGUgUHJvY1NpZ25hbFNsb3QgKnNsb3QgPSAmUHJvY1NpZ25hbC0+ cHNoX3Nsb3RbaV07Ci0JCXBpZF90CQlwaWQgPSBwZ19hdG9taWNfcmVhZF91MzIoJnNsb3Qt PnBzc19waWQpOwotCi0JCWlmIChwaWQgIT0gMCkKLQkJewotCQkJU3BpbkxvY2tBY3F1aXJl KCZzbG90LT5wc3NfbXV0ZXgpOwotCQkJcGlkID0gcGdfYXRvbWljX3JlYWRfdTMyKCZzbG90 LT5wc3NfcGlkKTsKLQkJCWlmIChwaWQgIT0gMCkKLQkJCXsKLQkJCQkvKiBzZWUgU2VuZFBy b2NTaWduYWwgZm9yIGRldGFpbHMgKi8KLQkJCQlzbG90LT5wc3Nfc2lnbmFsRmxhZ3NbUFJP Q1NJR19CQVJSSUVSXSA9IHRydWU7Ci0JCQkJU3BpbkxvY2tSZWxlYXNlKCZzbG90LT5wc3Nf bXV0ZXgpOwotCQkJCWtpbGwocGlkLCBTSUdVU1IxKTsKLQkJCX0KLQkJCWVsc2UKLQkJCQlT cGluTG9ja1JlbGVhc2UoJnNsb3QtPnBzc19tdXRleCk7Ci0JCX0KKwkJaWYgKHBncHJvY25v ID09IE15UHJvY051bWJlcikKKwkJCVJhaXNlSW50ZXJydXB0KElOVEVSUlVQVF9CQVJSSUVS KTsKKwkJZWxzZQorCQkJU2VuZEludGVycnVwdChJTlRFUlJVUFRfQkFSUklFUiwgcGdwcm9j bm8pOwogCX0KIAogCXJldHVybiBnZW5lcmF0aW9uOwpAQCAtNDcwLDIzICszNzksNiBAQCBX YWl0Rm9yUHJvY1NpZ25hbEJhcnJpZXIodWludDY0IGdlbmVyYXRpb24pCiAJcGdfbWVtb3J5 X2JhcnJpZXIoKTsKIH0KIAotLyoKLSAqIEhhbmRsZSByZWNlaXB0IG9mIGFuIGludGVycnVw dCBpbmRpY2F0aW5nIGEgZ2xvYmFsIGJhcnJpZXIgZXZlbnQuCi0gKgotICogQWxsIHRoZSBh Y3R1YWwgd29yayBpcyBkZWZlcnJlZCB0byBQcm9jZXNzUHJvY1NpZ25hbEJhcnJpZXIoKSwg YmVjYXVzZSB3ZQotICogY2Fubm90IHNhZmVseSBhY2Nlc3MgdGhlIGJhcnJpZXIgZ2VuZXJh dGlvbiBpbnNpZGUgdGhlIHNpZ25hbCBoYW5kbGVyIGFzCi0gKiA2NGJpdCBhdG9taWNzIG1p Z2h0IHVzZSBzcGlubG9jayBiYXNlZCBlbXVsYXRpb24sIGV2ZW4gZm9yIHJlYWRzLiBBcyB0 aGlzCi0gKiByb3V0aW5lIG9ubHkgZ2V0cyBjYWxsZWQgd2hlbiBQUk9DU0lHX0JBUlJJRVIg aXMgc2VudCB0aGF0IHdvbid0IGNhdXNlIGEKLSAqIGxvdCBvZiB1bm5lY2Vzc2FyeSB3b3Jr LgotICovCi1zdGF0aWMgdm9pZAotSGFuZGxlUHJvY1NpZ25hbEJhcnJpZXJJbnRlcnJ1cHQo dm9pZCkKLXsKLQlJbnRlcnJ1cHRQZW5kaW5nID0gdHJ1ZTsKLQlQcm9jU2lnbmFsQmFycmll clBlbmRpbmcgPSB0cnVlOwotCS8qIGxhdGNoIHdpbGwgYmUgc2V0IGJ5IHByb2NzaWduYWxf c2lndXNyMV9oYW5kbGVyICovCi19Ci0KIC8qCiAgKiBQZXJmb3JtIGdsb2JhbCBiYXJyaWVy IHJlbGF0ZWQgaW50ZXJydXB0IGNoZWNraW5nLgogICoKQEAgLTUwMiwxMiArMzk0LDggQEAg UHJvY2Vzc1Byb2NTaWduYWxCYXJyaWVyKHZvaWQpCiAJdWludDY0CQlzaGFyZWRfZ2VuOwog CXZvbGF0aWxlIHVpbnQzMiBmbGFnczsKIAotCUFzc2VydChNeVByb2NTaWduYWxTbG90KTsK LQotCS8qIEV4aXQgcXVpY2tseSBpZiB0aGVyZSdzIG5vIHdvcmsgdG8gZG8uICovCi0JaWYg KCFQcm9jU2lnbmFsQmFycmllclBlbmRpbmcpCisJaWYgKE15UHJvY1NpZ25hbFNsb3QgPT0g TlVMTCkKIAkJcmV0dXJuOwotCVByb2NTaWduYWxCYXJyaWVyUGVuZGluZyA9IGZhbHNlOwog CiAJLyoKIAkgKiBJdCdzIG5vdCB1bmxpa2VseSB0byBwcm9jZXNzIG11bHRpcGxlIGJhcnJp ZXJzIGF0IG9uY2UsIGJlZm9yZSB0aGUKQEAgLTYzOSw2OCArNTI3LDcgQEAgc3RhdGljIHZv aWQKIFJlc2V0UHJvY1NpZ25hbEJhcnJpZXJCaXRzKHVpbnQzMiBmbGFncykKIHsKIAlwZ19h dG9taWNfZmV0Y2hfb3JfdTMyKCZNeVByb2NTaWduYWxTbG90LT5wc3NfYmFycmllckNoZWNr TWFzaywgZmxhZ3MpOwotCVByb2NTaWduYWxCYXJyaWVyUGVuZGluZyA9IHRydWU7Ci0JSW50 ZXJydXB0UGVuZGluZyA9IHRydWU7Ci19Ci0KLS8qCi0gKiBDaGVja1Byb2NTaWduYWwgLSBj aGVjayB0byBzZWUgaWYgYSBwYXJ0aWN1bGFyIHJlYXNvbiBoYXMgYmVlbgotICogc2lnbmFs ZWQsIGFuZCBjbGVhciB0aGUgc2lnbmFsIGZsYWcuICBTaG91bGQgYmUgY2FsbGVkIGFmdGVy IHJlY2VpdmluZwotICogU0lHVVNSMS4KLSAqLwotc3RhdGljIGJvb2wKLUNoZWNrUHJvY1Np Z25hbChQcm9jU2lnbmFsUmVhc29uIHJlYXNvbikKLXsKLQl2b2xhdGlsZSBQcm9jU2lnbmFs U2xvdCAqc2xvdCA9IE15UHJvY1NpZ25hbFNsb3Q7Ci0KLQlpZiAoc2xvdCAhPSBOVUxMKQot CXsKLQkJLyoKLQkJICogQ2FyZWZ1bCBoZXJlIC0tLSBkb24ndCBjbGVhciBmbGFnIGlmIHdl IGhhdmVuJ3Qgc2VlbiBpdCBzZXQuCi0JCSAqIHBzc19zaWduYWxGbGFncyBpcyBvZiB0eXBl ICJ2b2xhdGlsZSBzaWdfYXRvbWljX3QiIHRvIGFsbG93IHVzIHRvCi0JCSAqIHJlYWQgaXQg aGVyZSBzYWZlbHksIHdpdGhvdXQgaG9sZGluZyB0aGUgc3BpbmxvY2suCi0JCSAqLwotCQlp ZiAoc2xvdC0+cHNzX3NpZ25hbEZsYWdzW3JlYXNvbl0pCi0JCXsKLQkJCXNsb3QtPnBzc19z aWduYWxGbGFnc1tyZWFzb25dID0gZmFsc2U7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCX0K LQotCXJldHVybiBmYWxzZTsKLX0KLQotLyoKLSAqIHByb2NzaWduYWxfc2lndXNyMV9oYW5k bGVyIC0gaGFuZGxlIFNJR1VTUjEgc2lnbmFsLgotICovCi12b2lkCi1wcm9jc2lnbmFsX3Np Z3VzcjFfaGFuZGxlcihTSUdOQUxfQVJHUykKLXsKLQlpZiAoQ2hlY2tQcm9jU2lnbmFsKFBS T0NTSUdfQ0FUQ0hVUF9JTlRFUlJVUFQpKQotCQlIYW5kbGVDYXRjaHVwSW50ZXJydXB0KCk7 Ci0KLQlpZiAoQ2hlY2tQcm9jU2lnbmFsKFBST0NTSUdfTk9USUZZX0lOVEVSUlVQVCkpCi0J CUhhbmRsZU5vdGlmeUludGVycnVwdCgpOwotCi0JaWYgKENoZWNrUHJvY1NpZ25hbChQUk9D U0lHX1BBUkFMTEVMX01FU1NBR0UpKQotCQlIYW5kbGVQYXJhbGxlbE1lc3NhZ2VJbnRlcnJ1 cHQoKTsKLQotCWlmIChDaGVja1Byb2NTaWduYWwoUFJPQ1NJR19XQUxTTkRfSU5JVF9TVE9Q UElORykpCi0JCUhhbmRsZVdhbFNuZEluaXRTdG9wcGluZygpOwotCi0JaWYgKENoZWNrUHJv Y1NpZ25hbChQUk9DU0lHX0JBUlJJRVIpKQotCQlIYW5kbGVQcm9jU2lnbmFsQmFycmllcklu dGVycnVwdCgpOwotCi0JaWYgKENoZWNrUHJvY1NpZ25hbChQUk9DU0lHX0xPR19NRU1PUllf Q09OVEVYVCkpCi0JCUhhbmRsZUxvZ01lbW9yeUNvbnRleHRJbnRlcnJ1cHQoKTsKLQotCWlm IChDaGVja1Byb2NTaWduYWwoUFJPQ1NJR19QQVJBTExFTF9BUFBMWV9NRVNTQUdFKSkKLQkJ SGFuZGxlUGFyYWxsZWxBcHBseU1lc3NhZ2VJbnRlcnJ1cHQoKTsKLQotCWlmIChDaGVja1By b2NTaWduYWwoUFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVCkpCi0JCUhhbmRsZVJlY292ZXJ5 Q29uZmxpY3RJbnRlcnJ1cHQoKTsKLQotCVNldExhdGNoKE15TGF0Y2gpOworCVJhaXNlSW50 ZXJydXB0KElOVEVSUlVQVF9CQVJSSUVSKTsKIH0KIAogLyoKQEAgLTc1OSw2ICs1ODYsMTAg QEAgU2VuZENhbmNlbFJlcXVlc3QoaW50IGJhY2tlbmRQSUQsIGNvbnN0IHVpbnQ4ICpjYW5j ZWxfa2V5LCBpbnQgY2FuY2VsX2tleV9sZW4pCiAJCQkJLyoKIAkJCQkgKiBJZiB3ZSBoYXZl IHNldHNpZCgpLCBzaWduYWwgdGhlIGJhY2tlbmQncyB3aG9sZSBwcm9jZXNzCiAJCQkJICog Z3JvdXAKKwkJCQkgKgorCQkJCSAqIEZJWE1FOiBjb3VsZCB3ZSBzZW5kIElOVEVSUlVQVF9R VUVSWV9DQU5DRUwgaGVyZSBkaXJlY3RseT8KKwkJCQkgKiBXZSBkb24ndCBoYXZlIGEgUEdQ Uk9DIGVudHJ5IHlldCwgYnV0IHRoZSB0YXJnZXQgYmFja2VuZAorCQkJCSAqIHByZXN1bWFi bHkgZG9lcy4KIAkJCQkgKi8KICNpZmRlZiBIQVZFX1NFVFNJRAogCQkJCWtpbGwoLWJhY2tl bmRQSUQsIFNJR0lOVCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9z aG1fbXEuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NobV9tcS5jCmluZGV4IDNjZTYw NjhhYzU0Li5hYjk5NTA5MzE0MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9p cGMvc2htX21xLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2htX21xLmMKQEAg LTQsNyArNCw3IEBACiAgKgkgIHNpbmdsZS1yZWFkZXIsIHNpbmdsZS13cml0ZXIgc2hhcmVk IG1lbW9yeSBtZXNzYWdlIHF1ZXVlCiAgKgogICogQm90aCB0aGUgc2VuZGVyIGFuZCB0aGUg cmVjZWl2ZXIgbXVzdCBoYXZlIGEgUEdQUk9DOyB0aGVpciByZXNwZWN0aXZlCi0gKiBwcm9j ZXNzIGxhdGNoZXMgYXJlIHVzZWQgZm9yIHN5bmNocm9uaXphdGlvbi4gIE9ubHkgdGhlIHNl bmRlciBtYXkgc2VuZCwKKyAqIHByb2Nlc3MgaW50ZXJydXB0cyBhcmUgdXNlZCBmb3Igc3lu Y2hyb25pemF0aW9uLiAgT25seSB0aGUgc2VuZGVyIG1heSBzZW5kLAogICogYW5kIG9ubHkg dGhlIHJlY2VpdmVyIG1heSByZWNlaXZlLiAgVGhpcyBpcyBpbnRlbmRlZCB0byBhbGxvdyBh IHVzZXIKICAqIGJhY2tlbmQgdG8gY29tbXVuaWNhdGUgd2l0aCB3b3JrZXIgYmFja2VuZHMg dGhhdCBpdCBoYXMgcmVnaXN0ZXJlZC4KICAqCkBAIC0xOCw2ICsxOCw3IEBACiAKICNpbmNs dWRlICJwb3N0Z3Jlcy5oIgogCisjaW5jbHVkZSAiaXBjL2ludGVycnVwdC5oIgogI2luY2x1 ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInBvcnQv cGdfYml0dXRpbHMuaCIKQEAgLTQ0LDEwICs0NSwxMSBAQAogICoKICAqIG1xX2RldGFjaGVk IG5lZWRzIG5vIGxvY2tpbmcuICBJdCBjYW4gYmUgc2V0IGJ5IGVpdGhlciB0aGUgc2VuZGVy IG9yIHRoZQogICogcmVjZWl2ZXIsIGJ1dCBvbmx5IGV2ZXIgZnJvbSBmYWxzZSB0byB0cnVl LCBzbyByZWR1bmRhbnQgd3JpdGVzIGRvbid0Ci0gKiBtYXR0ZXIuICBJdCBpcyBpbXBvcnRh bnQgdGhhdCBpZiB3ZSBzZXQgbXFfZGV0YWNoZWQgYW5kIHRoZW4gc2V0IHRoZQotICogY291 bnRlcnBhcnR5J3MgbGF0Y2gsIHRoZSBjb3VudGVycGFydHkgbXVzdCBiZSBjZXJ0YWluIHRv IHNlZSB0aGUgY2hhbmdlCi0gKiBhZnRlciB3YWtpbmcgdXAuICBTaW5jZSBTZXRMYXRjaCBi ZWdpbnMgd2l0aCBhIG1lbW9yeSBiYXJyaWVyIGFuZCBSZXNldExhdGNoCi0gKiBlbmRzIHdp dGggb25lLCB0aGlzIHNob3VsZCBiZSBPSy4KKyAqIG1hdHRlci4gIEl0IGlzIGltcG9ydGFu dCB0aGF0IGlmIHdlIHNldCBtcV9kZXRhY2hlZCBhbmQgdGhlbiBzZW5kIHRoZQorICogaW50 ZXJydXB0IHRvIHRoZSBjb3VudGVycGFydHksIHRoZSBjb3VudGVycGFydHkgbXVzdCBiZSBj ZXJ0YWluIHRvIHNlZSB0aGUKKyAqIGNoYW5nZSBhZnRlciB3YWtpbmcgdXAuICBTaW5jZSBT ZW5kSW50ZXJydXB0IGJlZ2lucyB3aXRoIGEgbWVtb3J5IGJhcnJpZXIKKyAqIGFuZCBDbGVh ckludGVycnVwdCBlbmRzIHdpdGggb25lLCB0aGlzIHNob3VsZCBiZSBPSy4KKyAqIFhYWDog Tm8gZXhwbGljaXQgbWVtb3J5IGJhcnJpZXJzIGluIFNlbmRJbnRlcnJ1cHQvQ2xlYXJJbnRl cnJ1cHQsIGRvIHdlIG5lZWQgdG8gYWRkIHNvbWU/CiAgKgogICogbXFfcmluZ19zaXplIGFu ZCBtcV9yaW5nX29mZnNldCBuZXZlciBjaGFuZ2UgYWZ0ZXIgaW5pdGlhbGl6YXRpb24sIGFu ZAogICogY2FuIHRoZXJlZm9yZSBiZSByZWFkIHdpdGhvdXQgdGhlIGxvY2suCkBAIC0xMTIs NyArMTE0LDcgQEAgc3RydWN0IHNobV9tcQogICogeWV0IHVwZGF0ZWQgaW4gdGhlIHNoYXJl ZCBtZW1vcnkuICBXZSB3aWxsIG5vdCB1cGRhdGUgaXQgdW50aWwgdGhlIHdyaXR0ZW4KICAq IGRhdGEgaXMgMS80dGggb2YgdGhlIHJpbmcgc2l6ZSBvciB0aGUgdHVwbGUgcXVldWUgaXMg ZnVsbC4gIFRoaXMgd2lsbAogICogcHJldmVudCBmcmVxdWVudCBDUFUgY2FjaGUgbWlzc2Vz LCBhbmQgaXQgd2lsbCBhbHNvIGF2b2lkIGZyZXF1ZW50Ci0gKiBTZXRMYXRjaCgpIGNhbGxz LCB3aGljaCBhcmUgcXVpdGUgZXhwZW5zaXZlLgorICogU2VuZEludGVycnVwdCgpIGNhbGxz LCB3aGljaCBhcmUgcXVpdGUgZXhwZW5zaXZlLgogICoKICAqIG1xaF9wYXJ0aWFsX2J5dGVz LCBtcWhfZXhwZWN0ZWRfYnl0ZXMsIGFuZCBtcWhfbGVuZ3RoX3dvcmRfY29tcGxldGUKICAq IGFyZSB1c2VkIHRvIHRyYWNrIHRoZSBzdGF0ZSBvZiBub24tYmxvY2tpbmcgb3BlcmF0aW9u cy4gIFdoZW4gdGhlIGNhbGxlcgpAQCAtMjE0LDcgKzIxNiw3IEBAIHNobV9tcV9zZXRfcmVj ZWl2ZXIoc2htX21xICptcSwgUEdQUk9DICpwcm9jKQogCVNwaW5Mb2NrUmVsZWFzZSgmbXEt Pm1xX211dGV4KTsKIAogCWlmIChzZW5kZXIgIT0gTlVMTCkKLQkJU2V0TGF0Y2goJnNlbmRl ci0+cHJvY0xhdGNoKTsKKwkJU2VuZEludGVycnVwdChJTlRFUlJVUFRfV0FJVF9XQUtFVVAs IEdldE51bWJlckZyb21QR1Byb2Moc2VuZGVyKSk7CiB9CiAKIC8qCkBAIC0yMzIsNyArMjM0 LDcgQEAgc2htX21xX3NldF9zZW5kZXIoc2htX21xICptcSwgUEdQUk9DICpwcm9jKQogCVNw aW5Mb2NrUmVsZWFzZSgmbXEtPm1xX211dGV4KTsKIAogCWlmIChyZWNlaXZlciAhPSBOVUxM KQotCQlTZXRMYXRjaCgmcmVjZWl2ZXItPnByb2NMYXRjaCk7CisJCVNlbmRJbnRlcnJ1cHQo SU5URVJSVVBUX1dBSVRfV0FLRVVQLCBHZXROdW1iZXJGcm9tUEdQcm9jKHJlY2VpdmVyKSk7 CiB9CiAKIC8qCkBAIC0zNDEsMTYgKzM0MywxNSBAQCBzaG1fbXFfc2VuZChzaG1fbXFfaGFu ZGxlICptcWgsIFNpemUgbmJ5dGVzLCBjb25zdCB2b2lkICpkYXRhLCBib29sIG5vd2FpdCwK ICAqIFdyaXRlIGEgbWVzc2FnZSBpbnRvIGEgc2hhcmVkIG1lc3NhZ2UgcXVldWUsIGdhdGhl cmVkIGZyb20gbXVsdGlwbGUKICAqIGFkZHJlc3Nlcy4KICAqCi0gKiBXaGVuIG5vd2FpdCA9 IGZhbHNlLCB3ZSdsbCB3YWl0IG9uIG91ciBwcm9jZXNzIGxhdGNoIHdoZW4gdGhlIHJpbmcg YnVmZmVyCi0gKiBmaWxscyB1cCwgYW5kIHRoZW4gY29udGludWUgd3JpdGluZyBvbmNlIHRo ZSByZWNlaXZlciBoYXMgZHJhaW5lZCBzb21lIGRhdGEuCi0gKiBUaGUgcHJvY2VzcyBsYXRj aCBpcyByZXNldCBhZnRlciBlYWNoIHdhaXQuCisgKiBXaGVuIG5vd2FpdCA9IGZhbHNlLCB3 ZSdsbCB3YWl0IHdoZW4gdGhlIHJpbmcgYnVmZmVyIGZpbGxzIHVwLCBhbmQgdGhlbgorICog Y29udGludWUgd3JpdGluZyBvbmNlIHRoZSByZWNlaXZlciBoYXMgZHJhaW5lZCBzb21lIGRh dGEuCiAgKgotICogV2hlbiBub3dhaXQgPSB0cnVlLCB3ZSBkbyBub3QgbWFuaXB1bGF0ZSB0 aGUgc3RhdGUgb2YgdGhlIHByb2Nlc3MgbGF0Y2g7Ci0gKiBpbnN0ZWFkLCBpZiB0aGUgYnVm ZmVyIGJlY29tZXMgZnVsbCwgd2UgcmV0dXJuIFNITV9NUV9XT1VMRF9CTE9DSy4gIEluCi0g KiB0aGlzIGNhc2UsIHRoZSBjYWxsZXIgc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiBhZ2Fp biwgd2l0aCB0aGUgc2FtZQotICogYXJndW1lbnRzLCBlYWNoIHRpbWUgdGhlIHByb2Nlc3Mg bGF0Y2ggaXMgc2V0LiAgKE9uY2UgYmVndW4sIHRoZSBzZW5kaW5nCi0gKiBvZiBhIG1lc3Nh Z2UgY2Fubm90IGJlIGFib3J0ZWQgZXhjZXB0IGJ5IGRldGFjaGluZyBmcm9tIHRoZSBxdWV1 ZTsgY2hhbmdpbmcKLSAqIHRoZSBsZW5ndGggb3IgcGF5bG9hZCB3aWxsIGNvcnJ1cHQgdGhl IHF1ZXVlLikKKyAqIFdoZW4gbm93YWl0ID0gdHJ1ZSwgaWYgdGhlIGJ1ZmZlciBiZWNvbWVz IGZ1bGwsIHdlIHJldHVybgorICogU0hNX01RX1dPVUxEX0JMT0NLLiAgSW4gdGhpcyBjYXNl LCB0aGUgY2FsbGVyIHNob3VsZCBjYWxsIHRoaXMgZnVuY3Rpb24KKyAqIGFnYWluLCB3aXRo IHRoZSBzYW1lIGFyZ3VtZW50cywgZWFjaCB0aW1lIHRoZSBJTlRFUlJVUFRfV0FJVF9XQUtF VVAKKyAqIGludGVycnVwdCBpcyBzZXQuICAoT25jZSBiZWd1biwgdGhlIHNlbmRpbmcgb2Yg YSBtZXNzYWdlIGNhbm5vdCBiZSBhYm9ydGVkCisgKiBleGNlcHQgYnkgZGV0YWNoaW5nIGZy b20gdGhlIHF1ZXVlOyBjaGFuZ2luZyB0aGUgbGVuZ3RoIG9yIHBheWxvYWQgd2lsbAorICog Y29ycnVwdCB0aGUgcXVldWUuKQogICoKICAqIFdoZW4gZm9yY2VfZmx1c2ggPSB0cnVlLCB3 ZSBpbW1lZGlhdGVseSB1cGRhdGUgdGhlIHNobV9tcSdzIG1xX2J5dGVzX3dyaXR0ZW4KICAq IGFuZCBub3RpZnkgdGhlIHJlY2VpdmVyIChpZiBpdCBpcyBhbHJlYWR5IGF0dGFjaGVkKS4g IE90aGVyd2lzZSwgd2UgZG9uJ3QKQEAgLTUzOSw3ICs1NDAsNyBAQCBzaG1fbXFfc2VuZHYo c2htX21xX2hhbmRsZSAqbXFoLCBzaG1fbXFfaW92ZWMgKmlvdiwgaW50IGlvdmNudCwgYm9v bCBub3dhaXQsCiAJewogCQlzaG1fbXFfaW5jX2J5dGVzX3dyaXR0ZW4obXEsIG1xaC0+bXFo X3NlbmRfcGVuZGluZyk7CiAJCWlmIChyZWNlaXZlciAhPSBOVUxMKQotCQkJU2V0TGF0Y2go JnJlY2VpdmVyLT5wcm9jTGF0Y2gpOworCQkJU2VuZEludGVycnVwdChJTlRFUlJVUFRfV0FJ VF9XQUtFVVAsIEdldE51bWJlckZyb21QR1Byb2MocmVjZWl2ZXIpKTsKIAkJbXFoLT5tcWhf c2VuZF9wZW5kaW5nID0gMDsKIAl9CiAKQEAgLTU1NywxNiArNTU4LDE1IEBAIHNobV9tcV9z ZW5kdihzaG1fbXFfaGFuZGxlICptcWgsIHNobV9tcV9pb3ZlYyAqaW92LCBpbnQgaW92Y250 LCBib29sIG5vd2FpdCwKICAqIHdoaWxlIHN0aWxsIGFsbG93aW5nIGxvbmdlciBtZXNzYWdl cy4gIEluIGVpdGhlciBjYXNlLCB0aGUgcmV0dXJuIHZhbHVlCiAgKiByZW1haW5zIHZhbGlk IHVudGlsIHRoZSBuZXh0IHJlY2VpdmUgb3BlcmF0aW9uIGlzIHBlcmZvcm1lZCBvbiB0aGUg cXVldWUuCiAgKgotICogV2hlbiBub3dhaXQgPSBmYWxzZSwgd2UnbGwgd2FpdCBvbiBvdXIg cHJvY2VzcyBsYXRjaCB3aGVuIHRoZSByaW5nIGJ1ZmZlcgotICogaXMgZW1wdHkgYW5kIHdl IGhhdmUgbm90IHlldCByZWNlaXZlZCBhIGZ1bGwgbWVzc2FnZS4gIFRoZSBzZW5kZXIgd2ls bAotICogc2V0IG91ciBwcm9jZXNzIGxhdGNoIGFmdGVyIG1vcmUgZGF0YSBoYXMgYmVlbiB3 cml0dGVuLCBhbmQgd2UnbGwgcmVzdW1lCi0gKiBwcm9jZXNzaW5nLiAgRWFjaCBjYWxsIHdp bGwgdGhlcmVmb3JlIHJldHVybiBhIGNvbXBsZXRlIG1lc3NhZ2UKLSAqICh1bmxlc3MgdGhl IHNlbmRlciBkZXRhY2hlcyB0aGUgcXVldWUpLgorICogV2hlbiBub3dhaXQgPSBmYWxzZSwg d2UnbGwgd2hlbiB0aGUgcmluZyBidWZmZXIgaXMgZW1wdHkgYW5kIHdlIGhhdmUgbm90Cisg KiB5ZXQgcmVjZWl2ZWQgYSBmdWxsIG1lc3NhZ2UuICBUaGUgc2VuZGVyIHdpbGwgc2VuZCB1 cyBJTlRFUlJVUFRfV0FJVF9XQUtFVVAKKyAqIGFmdGVyIG1vcmUgZGF0YSBoYXMgYmVlbiB3 cml0dGVuLCBhbmQgd2UnbGwgcmVzdW1lIHByb2Nlc3NpbmcuICBFYWNoIGNhbGwKKyAqIHdp bGwgdGhlcmVmb3JlIHJldHVybiBhIGNvbXBsZXRlIG1lc3NhZ2UgKHVubGVzcyB0aGUgc2Vu ZGVyIGRldGFjaGVzIHRoZQorICogcXVldWUpLgogICoKLSAqIFdoZW4gbm93YWl0ID0gdHJ1 ZSwgd2UgZG8gbm90IG1hbmlwdWxhdGUgdGhlIHN0YXRlIG9mIHRoZSBwcm9jZXNzIGxhdGNo OwotICogaW5zdGVhZCwgd2hlbmV2ZXIgdGhlIGJ1ZmZlciBpcyBlbXB0eSBhbmQgd2UgbmVl ZCB0byByZWFkIGZyb20gaXQsIHdlCi0gKiByZXR1cm4gU0hNX01RX1dPVUxEX0JMT0NLLiAg SW4gdGhpcyBjYXNlLCB0aGUgY2FsbGVyIHNob3VsZCBjYWxsIHRoaXMKLSAqIGZ1bmN0aW9u IGFnYWluIGFmdGVyIHRoZSBwcm9jZXNzIGxhdGNoIGhhcyBiZWVuIHNldC4KKyAqIFdoZW4g bm93YWl0ID0gdHJ1ZSwgd2UgZG8gbm90IHdhaXQgd2hlbiB0aGUgYnVmZmVyIGlzIGVtcHR5 IGFuZCByZXR1cm4KKyAqIFNITV9NUV9XT1VMRF9CTE9DSyBpbnN0ZWFkLiAgSW4gdGhpcyBj YXNlLCB0aGUgY2FsbGVyIHNob3VsZCBjYWxsIHRoaXMKKyAqIGZ1bmN0aW9uIGFnYWluIGFm dGVyIElOVEVSUlVQVF9XQUlUX1dBS0VVUCBoYXMgYmVlbiBzZXQuCiAgKi8KIHNobV9tcV9y ZXN1bHQKIHNobV9tcV9yZWNlaXZlKHNobV9tcV9oYW5kbGUgKm1xaCwgU2l6ZSAqbmJ5dGVz cCwgdm9pZCAqKmRhdGFwLCBib29sIG5vd2FpdCkKQEAgLTYxOSw4ICs2MTksOCBAQCBzaG1f bXFfcmVjZWl2ZShzaG1fbXFfaGFuZGxlICptcWgsIFNpemUgKm5ieXRlc3AsIHZvaWQgKipk YXRhcCwgYm9vbCBub3dhaXQpCiAJICogSWYgd2UndmUgY29uc3VtZWQgYW4gYW1vdW50IG9m IGRhdGEgZ3JlYXRlciB0aGFuIDEvNHRoIG9mIHRoZSByaW5nCiAJICogc2l6ZSwgbWFyayBp dCBjb25zdW1lZCBpbiBzaGFyZWQgbWVtb3J5LiAgV2UgdHJ5IHRvIGF2b2lkIGRvaW5nIHRo aXMKIAkgKiB1bm5lY2Vzc2FyaWx5IHdoZW4gb25seSBhIHNtYWxsIGFtb3VudCBvZiBkYXRh IGhhcyBiZWVuIGNvbnN1bWVkLAotCSAqIGJlY2F1c2UgU2V0TGF0Y2goKSBpcyBmYWlybHkg ZXhwZW5zaXZlIGFuZCB3ZSBkb24ndCB3YW50IHRvIGRvIGl0IHRvbwotCSAqIG9mdGVuLgor CSAqIGJlY2F1c2UgU2VuZEludGVycnVwdCgpIGlzIGZhaXJseSBleHBlbnNpdmUgYW5kIHdl IGRvbid0IHdhbnQgdG8gZG8gaXQKKwkgKiB0b28gb2Z0ZW4uCiAJICovCiAJaWYgKG1xaC0+ bXFoX2NvbnN1bWVfcGVuZGluZyA+IG1xLT5tcV9yaW5nX3NpemUgLyA0KQogCXsKQEAgLTg5 NSw3ICs4OTUsNyBAQCBzaG1fbXFfZGV0YWNoX2ludGVybmFsKHNobV9tcSAqbXEpCiAJU3Bp bkxvY2tSZWxlYXNlKCZtcS0+bXFfbXV0ZXgpOwogCiAJaWYgKHZpY3RpbSAhPSBOVUxMKQot CQlTZXRMYXRjaCgmdmljdGltLT5wcm9jTGF0Y2gpOworCQlTZW5kSW50ZXJydXB0KElOVEVS UlVQVF9XQUlUX1dBS0VVUCwgR2V0TnVtYmVyRnJvbVBHUHJvYyh2aWN0aW0pKTsKIH0KIAog LyoKQEAgLTk5Myw3ICs5OTMsNyBAQCBzaG1fbXFfc2VuZF9ieXRlcyhzaG1fbXFfaGFuZGxl ICptcWgsIFNpemUgbmJ5dGVzLCBjb25zdCB2b2lkICpkYXRhLAogCQkJICogVGhlcmVmb3Jl LCB3ZSBjYW4gcmVhZCBpdCB3aXRob3V0IGFjcXVpcmluZyB0aGUgc3BpbmxvY2suCiAJCQkg Ki8KIAkJCUFzc2VydChtcWgtPm1xaF9jb3VudGVycGFydHlfYXR0YWNoZWQpOwotCQkJU2V0 TGF0Y2goJm1xLT5tcV9yZWNlaXZlci0+cHJvY0xhdGNoKTsKKwkJCVNlbmRJbnRlcnJ1cHQo SU5URVJSVVBUX1dBSVRfV0FLRVVQLCBHZXROdW1iZXJGcm9tUEdQcm9jKG1xLT5tcV9yZWNl aXZlcikpOwogCiAJCQkvKgogCQkJICogV2UgaGF2ZSBqdXN0IHVwZGF0ZWQgdGhlIG1xaF9z ZW5kX3BlbmRpbmcgYnl0ZXMgaW4gdGhlIHNoYXJlZApAQCAtMTAwMSw3ICsxMDAxLDcgQEAg c2htX21xX3NlbmRfYnl0ZXMoc2htX21xX2hhbmRsZSAqbXFoLCBTaXplIG5ieXRlcywgY29u c3Qgdm9pZCAqZGF0YSwKIAkJCSAqLwogCQkJbXFoLT5tcWhfc2VuZF9wZW5kaW5nID0gMDsK IAotCQkJLyogU2tpcCBtYW5pcHVsYXRpb24gb2Ygb3VyIGxhdGNoIGlmIG5vd2FpdCA9IHRy dWUuICovCisJCQkvKiBTa2lwIHdhaXRpbmcgaWYgbm93YWl0ID0gdHJ1ZS4gKi8KIAkJCWlm IChub3dhaXQpCiAJCQl7CiAJCQkJKmJ5dGVzX3dyaXR0ZW4gPSBzZW50OwpAQCAtMTAwOSwx NyArMTAwOSwxOCBAQCBzaG1fbXFfc2VuZF9ieXRlcyhzaG1fbXFfaGFuZGxlICptcWgsIFNp emUgbmJ5dGVzLCBjb25zdCB2b2lkICpkYXRhLAogCQkJfQogCiAJCQkvKgotCQkJICogV2Fp dCBmb3Igb3VyIGxhdGNoIHRvIGJlIHNldC4gIEl0IG1pZ2h0IGFscmVhZHkgYmUgc2V0IGZv ciBzb21lCisJCQkgKiBXYWl0IGZvciB0aGUgaW50ZXJydXB0LiAgSXQgbWlnaHQgYWxyZWFk eSBiZSBzZXQgZm9yIHNvbWUKIAkJCSAqIHVucmVsYXRlZCByZWFzb24sIGJ1dCB0aGF0J2xs IGp1c3QgcmVzdWx0IGluIG9uZSBleHRyYSB0cmlwCi0JCQkgKiB0aHJvdWdoIHRoZSBsb29w LiAgSXQncyB3b3J0aCBpdCB0byBhdm9pZCByZXNldHRpbmcgdGhlIGxhdGNoCi0JCQkgKiBh dCB0b3Agb2YgbG9vcCwgYmVjYXVzZSBzZXR0aW5nIGFuIGFscmVhZHktc2V0IGxhdGNoIGlz IG11Y2gKLQkJCSAqIGNoZWFwZXIgdGhhbiBzZXR0aW5nIG9uZSB0aGF0IGhhcyBiZWVuIHJl c2V0LgorCQkJICogdGhyb3VnaCB0aGUgbG9vcC4gIEl0J3Mgd29ydGggaXQgdG8gYXZvaWQg Y2xlYXJpbmcgdGhlCisJCQkgKiBpbnRlcnJ1cHQgYXQgdG9wIG9mIGxvb3AsIGJlY2F1c2Ug c2V0dGluZyBhbiBhbHJlYWR5LXNldAorCQkJICogaW50ZXJydXB0IGlzIG11Y2ggY2hlYXBl ciB0aGFuIHNldHRpbmcgb25lIHRoYXQgaGFzIGJlZW4gcmVzZXQuCiAJCQkgKi8KLQkJCSh2 b2lkKSBXYWl0TGF0Y2goTXlMYXRjaCwgV0xfTEFUQ0hfU0VUIHwgV0xfRVhJVF9PTl9QTV9E RUFUSCwgMCwKLQkJCQkJCQkgV0FJVF9FVkVOVF9NRVNTQUdFX1FVRVVFX1NFTkQpOworCQkJ KHZvaWQpIFdhaXRJbnRlcnJ1cHQoQ2hlY2tGb3JJbnRlcnJ1cHRzTWFzayB8IElOVEVSUlVQ VF9XQUlUX1dBS0VVUCwKKwkJCQkJCQkJIFdMX0lOVEVSUlVQVCB8IFdMX0VYSVRfT05fUE1f REVBVEgsIDAsCisJCQkJCQkJCSBXQUlUX0VWRU5UX01FU1NBR0VfUVVFVUVfU0VORCk7CiAK LQkJCS8qIFJlc2V0IHRoZSBsYXRjaCBzbyB3ZSBkb24ndCBzcGluLiAqLwotCQkJUmVzZXRM YXRjaChNeUxhdGNoKTsKKwkJCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgc28gd2UgZG9uJ3Qg c3Bpbi4gKi8KKwkJCUNsZWFySW50ZXJydXB0KElOVEVSUlVQVF9XQUlUX1dBS0VVUCk7CiAK IAkJCS8qIEFuIGludGVycnVwdCBtYXkgaGF2ZSBvY2N1cnJlZCB3aGlsZSB3ZSB3ZXJlIHdh aXRpbmcuICovCiAJCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwpAQCAtMTA1NCw3ICsxMDU1 LDcgQEAgc2htX21xX3NlbmRfYnl0ZXMoc2htX21xX2hhbmRsZSAqbXFoLCBTaXplIG5ieXRl cywgY29uc3Qgdm9pZCAqZGF0YSwKIAogCQkJLyoKIAkJCSAqIEZvciBlZmZpY2llbmN5LCB3 ZSBkb24ndCB1cGRhdGUgdGhlIGJ5dGVzIHdyaXR0ZW4gaW4gdGhlIHNoYXJlZAotCQkJICog bWVtb3J5IGFuZCBhbHNvIGRvbid0IHNldCB0aGUgcmVhZGVyJ3MgbGF0Y2ggaGVyZS4gIFJl ZmVyIHRvCisJCQkgKiBtZW1vcnkgYW5kIGFsc28gZG9uJ3Qgc2VuZCB0aGUgcmVhZGVyIGlu dGVycnVwdCBoZXJlLiAgUmVmZXIgdG8KIAkJCSAqIHRoZSBjb21tZW50cyBhdG9wIHRoZSBz aG1fbXFfaGFuZGxlIHN0cnVjdHVyZSBmb3IgbW9yZQogCQkJICogaW5mb3JtYXRpb24uCiAJ CQkgKi8KQEAgLTExNTAsMjUgKzExNTEsMjkgQEAgc2htX21xX3JlY2VpdmVfYnl0ZXMoc2ht X21xX2hhbmRsZSAqbXFoLCBTaXplIGJ5dGVzX25lZWRlZCwgYm9vbCBub3dhaXQsCiAJCQlt cWgtPm1xaF9jb25zdW1lX3BlbmRpbmcgPSAwOwogCQl9CiAKLQkJLyogU2tpcCBtYW5pcHVs YXRpb24gb2Ygb3VyIGxhdGNoIGlmIG5vd2FpdCA9IHRydWUuICovCisJCS8qIFNraXAgd2Fp dGluZyBpZiBub3dhaXQgPSB0cnVlLiAqLwogCQlpZiAobm93YWl0KQogCQkJcmV0dXJuIFNI TV9NUV9XT1VMRF9CTE9DSzsKIAogCQkvKgotCQkgKiBXYWl0IGZvciBvdXIgbGF0Y2ggdG8g YmUgc2V0LiAgSXQgbWlnaHQgYWxyZWFkeSBiZSBzZXQgZm9yIHNvbWUKKwkJICogV2FpdCBm b3IgdGhlIGludGVycnVwdCB0byBiZSBzZXQuICBJdCBtaWdodCBhbHJlYWR5IGJlIHNldCBm b3Igc29tZQogCQkgKiB1bnJlbGF0ZWQgcmVhc29uLCBidXQgdGhhdCdsbCBqdXN0IHJlc3Vs dCBpbiBvbmUgZXh0cmEgdHJpcCB0aHJvdWdoCi0JCSAqIHRoZSBsb29wLiAgSXQncyB3b3J0 aCBpdCB0byBhdm9pZCByZXNldHRpbmcgdGhlIGxhdGNoIGF0IHRvcCBvZgotCQkgKiBsb29w LCBiZWNhdXNlIHNldHRpbmcgYW4gYWxyZWFkeS1zZXQgbGF0Y2ggaXMgbXVjaCBjaGVhcGVy IHRoYW4KLQkJICogc2V0dGluZyBvbmUgdGhhdCBoYXMgYmVlbiByZXNldC4KKwkJICogdGhl IGxvb3AuICBJdCdzIHdvcnRoIGl0IHRvIGF2b2lkIGNsZWFyaW5nIHRoZSBpbnRlcnJ1cHQg YXQgdG9wIG9mCisJCSAqIGxvb3AsIGJlY2F1c2Ugc2V0dGluZyBhbiBhbHJlYWR5LXNldCBp bnRlcnJ1cHQgaXMgbXVjaCBjaGVhcGVyIHRoYW4KKwkJICogc2V0dGluZyBvbmUgdGhhdCBo YXMgYmVlbiBjbGVhcmVkLgogCQkgKi8KLQkJKHZvaWQpIFdhaXRMYXRjaChNeUxhdGNoLCBX TF9MQVRDSF9TRVQgfCBXTF9FWElUX09OX1BNX0RFQVRILCAwLAotCQkJCQkJIFdBSVRfRVZF TlRfTUVTU0FHRV9RVUVVRV9SRUNFSVZFKTsKKwkJKHZvaWQpIFdhaXRJbnRlcnJ1cHQoQ2hl Y2tGb3JJbnRlcnJ1cHRzTWFzayB8IElOVEVSUlVQVF9XQUlUX1dBS0VVUCwKKwkJCQkJCQkg V0xfSU5URVJSVVBUIHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwgMCwKKwkJCQkJCQkgV0FJVF9F VkVOVF9NRVNTQUdFX1FVRVVFX1JFQ0VJVkUpOwogCi0JCS8qIFJlc2V0IHRoZSBsYXRjaCBz byB3ZSBkb24ndCBzcGluLiAqLwotCQlSZXNldExhdGNoKE15TGF0Y2gpOwotCi0JCS8qIEFu IGludGVycnVwdCBtYXkgaGF2ZSBvY2N1cnJlZCB3aGlsZSB3ZSB3ZXJlIHdhaXRpbmcuICov CisJCS8qCisJCSAqIEhhbmRsZSBzdGFuZGFyZCBpbnRlcnJ1cHRzIHRoYXQgbWF5IGhhdmUg b2NjdXJyZWQgd2hpbGUgd2Ugd2VyZQorCQkgKiB3YWl0aW5nLgorCQkgKi8KIAkJQ0hFQ0tf Rk9SX0lOVEVSUlVQVFMoKTsKKworCQkvKiBDbGVhciB0aGUgaW50ZXJydXB0IHNvIHdlIGRv bid0IHNwaW4uICovCisJCUNsZWFySW50ZXJydXB0KElOVEVSUlVQVF9XQUlUX1dBS0VVUCk7 CiAJfQogfQogCkBAIC0xMjUwLDE0ICsxMjU1LDE4IEBAIHNobV9tcV93YWl0X2ludGVybmFs KHNobV9tcSAqbXEsIFBHUFJPQyAqKnB0ciwgQmFja2dyb3VuZFdvcmtlckhhbmRsZSAqaGFu ZGxlKQogCQl9CiAKIAkJLyogV2FpdCB0byBiZSBzaWduYWxlZC4gKi8KLQkJKHZvaWQpIFdh aXRMYXRjaChNeUxhdGNoLCBXTF9MQVRDSF9TRVQgfCBXTF9FWElUX09OX1BNX0RFQVRILCAw LAotCQkJCQkJIFdBSVRfRVZFTlRfTUVTU0FHRV9RVUVVRV9JTlRFUk5BTCk7CisJCSh2b2lk KSBXYWl0SW50ZXJydXB0KENoZWNrRm9ySW50ZXJydXB0c01hc2sgfCBJTlRFUlJVUFRfV0FJ VF9XQUtFVVAsCisJCQkJCQkJIFdMX0lOVEVSUlVQVCB8IFdMX0VYSVRfT05fUE1fREVBVEgs IDAsCisJCQkJCQkJIFdBSVRfRVZFTlRfTUVTU0FHRV9RVUVVRV9JTlRFUk5BTCk7CiAKLQkJ LyogUmVzZXQgdGhlIGxhdGNoIHNvIHdlIGRvbid0IHNwaW4uICovCi0JCVJlc2V0TGF0Y2go TXlMYXRjaCk7Ci0KLQkJLyogQW4gaW50ZXJydXB0IG1heSBoYXZlIG9jY3VycmVkIHdoaWxl IHdlIHdlcmUgd2FpdGluZy4gKi8KKwkJLyoKKwkJICogSGFuZGxlIHN0YW5kYXJkIGludGVy cnVwdHMgdGhhdCBtYXkgaGF2ZSBvY2N1cnJlZCB3aGlsZSB3ZSB3ZXJlCisJCSAqIHdhaXRp bmcuCisJCSAqLwogCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCisJCS8qIENsZWFyIHRo ZSBpbnRlcnJ1cHQgc28gd2UgZG9uJ3Qgc3Bpbi4gKi8KKwkJQ2xlYXJJbnRlcnJ1cHQoSU5U RVJSVVBUX1dBSVRfV0FLRVVQKTsKIAl9CiAKIAlyZXR1cm4gcmVzdWx0OwpAQCAtMTI5Myw3 ICsxMzAyLDcgQEAgc2htX21xX2luY19ieXRlc19yZWFkKHNobV9tcSAqbXEsIFNpemUgbikK IAkgKi8KIAlzZW5kZXIgPSBtcS0+bXFfc2VuZGVyOwogCUFzc2VydChzZW5kZXIgIT0gTlVM TCk7Ci0JU2V0TGF0Y2goJnNlbmRlci0+cHJvY0xhdGNoKTsKKwlTZW5kSW50ZXJydXB0KElO VEVSUlVQVF9XQUlUX1dBS0VVUCwgR2V0TnVtYmVyRnJvbVBHUHJvYyhzZW5kZXIpKTsKIH0K IAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NpZ25hbGZ1bmNz LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaWduYWxmdW5jcy5jCmluZGV4IDZmNzc1 OWNkNzIwLi44Yjg1MDUwNTNjMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9p cGMvc2lnbmFsZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaWduYWxm dW5jcy5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8c2lnbmFsLmg+CiAKICNpbmNs dWRlICJjYXRhbG9nL3BnX2F1dGhpZC5oIgorI2luY2x1ZGUgImlwYy9pbnRlcnJ1cHQuaCIK ICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRl ICJwb3N0bWFzdGVyL3N5c2xvZ2dlci5oIgpAQCAtMTEyLDYgKzExMyw3IEBAIHBnX3NpZ25h bF9iYWNrZW5kKGludCBwaWQsIGludCBzaWcpCiAJICovCiAKIAkvKiBJZiB3ZSBoYXZlIHNl dHNpZCgpLCBzaWduYWwgdGhlIGJhY2tlbmQncyB3aG9sZSBwcm9jZXNzIGdyb3VwICovCisJ ZWxvZyhMT0csICJzZW5kaW5nICVkIHRvICVkICglcykiLCBzaWcsIHBpZCwgKHNpZyA9PSBT SUdURVJNKSA/ICJTSUdURVJNIiA6ICJvdGhlciIpOwogI2lmZGVmIEhBVkVfU0VUU0lECiAJ aWYgKGtpbGwoLXBpZCwgc2lnKSkKICNlbHNlCkBAIC0yMDQsMTIgKzIwNiwxMiBAQCBwZ193 YWl0X3VudGlsX3Rlcm1pbmF0aW9uKGludCBwaWQsIGludDY0IHRpbWVvdXQpCiAJCS8qIFBy b2Nlc3MgaW50ZXJydXB0cywgaWYgYW55LCBiZWZvcmUgd2FpdGluZyAqLwogCQlDSEVDS19G T1JfSU5URVJSVVBUUygpOwogCi0JCSh2b2lkKSBXYWl0TGF0Y2goTXlMYXRjaCwKLQkJCQkJ CSBXTF9MQVRDSF9TRVQgfCBXTF9USU1FT1VUIHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwKLQkJ CQkJCSB3YWl0dGltZSwKLQkJCQkJCSBXQUlUX0VWRU5UX0JBQ0tFTkRfVEVSTUlOQVRJT04p OworCQkodm9pZCkgV2FpdEludGVycnVwdChDaGVja0ZvckludGVycnVwdHNNYXNrIHwgSU5U RVJSVVBUX1dBSVRfV0FLRVVQLAorCQkJCQkJCSBXTF9JTlRFUlJVUFQgfCBXTF9USU1FT1VU IHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwKKwkJCQkJCQkgd2FpdHRpbWUsCisJCQkJCQkJIFdB SVRfRVZFTlRfQkFDS0VORF9URVJNSU5BVElPTik7CiAKLQkJUmVzZXRMYXRjaChNeUxhdGNo KTsKKwkJQ2xlYXJJbnRlcnJ1cHQoSU5URVJSVVBUX1dBSVRfV0FLRVVQKTsKIAogCQlyZW1h aW5pbmd0aW1lIC09IHdhaXR0aW1lOwogCX0gd2hpbGUgKHJlbWFpbmluZ3RpbWUgPiAwKTsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NpbnZhbC5jIGIvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9pcGMvc2ludmFsLmMKaW5kZXggNTU1OWY3YzFjZmEuLmQwYWVkZTQw ZWU5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaW52YWwuYworKysg Yi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaW52YWwuYwpAQCAtMTUsMzAgKzE1LDEzIEBA CiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAogI2luY2x1ZGUgImFjY2Vzcy94YWN0LmgiCisj aW5jbHVkZSAiaXBjL2ludGVycnVwdC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgotI2lu Y2x1ZGUgInN0b3JhZ2UvbGF0Y2guaCIKICNpbmNsdWRlICJzdG9yYWdlL3NpbnZhbGFkdC5o IgogI2luY2x1ZGUgInV0aWxzL2ludmFsLmgiCiAKLQogdWludDY0CQlTaGFyZWRJbnZhbGlk TWVzc2FnZUNvdW50ZXI7CiAKLQotLyoKLSAqIEJlY2F1c2UgYmFja2VuZHMgc2l0dGluZyBp ZGxlIHdpbGwgbm90IGJlIHJlYWRpbmcgc2ludmFsIGV2ZW50cywgd2UKLSAqIG5lZWQgYSB3 YXkgdG8gZ2l2ZSBhbiBpZGxlIGJhY2tlbmQgYSBzd2lmdCBraWNrIGluIHRoZSByZWFyIGFu ZCBtYWtlCi0gKiBpdCBjYXRjaCB1cCBiZWZvcmUgdGhlIHNpbnZhbCBxdWV1ZSBvdmVyZmxv d3MgYW5kIGZvcmNlcyBpdCB0byBnbwotICogdGhyb3VnaCBhIGNhY2hlIHJlc2V0IGV4ZXJj aXNlLiAgVGhpcyBpcyBkb25lIGJ5IHNlbmRpbmcKLSAqIFBST0NTSUdfQ0FUQ0hVUF9JTlRF UlJVUFQgdG8gYW55IGJhY2tlbmQgdGhhdCBnZXRzIHRvbyBmYXIgYmVoaW5kLgotICoKLSAq IFRoZSBzaWduYWwgaGFuZGxlciB3aWxsIHNldCBhbiBpbnRlcnJ1cHQgcGVuZGluZyBmbGFn IGFuZCB3aWxsIHNldCB0aGUKLSAqIHByb2Nlc3NlcyBsYXRjaC4gV2hlbmV2ZXIgc3RhcnRp bmcgdG8gcmVhZCBmcm9tIHRoZSBjbGllbnQsIG9yIHdoZW4KLSAqIGludGVycnVwdGVkIHdo aWxlIGRvaW5nIHNvLCBQcm9jZXNzQ2xpZW50UmVhZEludGVycnVwdCgpIHdpbGwgY2FsbAot ICogUHJvY2Vzc0NhdGNodXBFdmVudCgpLgotICovCi12b2xhdGlsZSBzaWdfYXRvbWljX3Qg Y2F0Y2h1cEludGVycnVwdFBlbmRpbmcgPSBmYWxzZTsKLQotCiAvKgogICogU2VuZFNoYXJl ZEludmFsaWRNZXNzYWdlcwogICoJQWRkIHNoYXJlZC1jYWNoZS1pbnZhbGlkYXRpb24gbWVz c2FnZShzKSB0byB0aGUgZ2xvYmFsIFNJIG1lc3NhZ2UgcXVldWUuCkBAIC0xMzIsMzggKzEx NSwxMyBAQCBSZWNlaXZlU2hhcmVkSW52YWxpZE1lc3NhZ2VzKHZvaWQgKCppbnZhbEZ1bmN0 aW9uKSAoU2hhcmVkSW52YWxpZGF0aW9uTWVzc2FnZSAqbQogCSAqIGNhdGNodXAgc2lnbmFs IHRoaXMgd2F5IGF2b2lkcyBjcmVhdGluZyBzcGlrZXMgaW4gc3lzdGVtIGxvYWQgZm9yIHdo YXQKIAkgKiBzaG91bGQgYmUganVzdCBhIGJhY2tncm91bmQgbWFpbnRlbmFuY2UgYWN0aXZp dHkuCiAJICovCi0JaWYgKGNhdGNodXBJbnRlcnJ1cHRQZW5kaW5nKQorCWlmIChDb25zdW1l SW50ZXJydXB0KElOVEVSUlVQVF9TSU5WQUxfQ0FUQ0hVUCkpCiAJewotCQljYXRjaHVwSW50 ZXJydXB0UGVuZGluZyA9IGZhbHNlOwogCQllbG9nKERFQlVHNCwgInNpbnZhbCBjYXRjaHVw IGNvbXBsZXRlLCBjbGVhbmluZyBxdWV1ZSIpOwogCQlTSUNsZWFudXBRdWV1ZShmYWxzZSwg MCk7CiAJfQogfQogCi0KLS8qCi0gKiBIYW5kbGVDYXRjaHVwSW50ZXJydXB0Ci0gKgotICog VGhpcyBpcyBjYWxsZWQgd2hlbiBQUk9DU0lHX0NBVENIVVBfSU5URVJSVVBUIGlzIHJlY2Vp dmVkLgotICoKLSAqIFdlIHVzZWQgdG8gZGlyZWN0bHkgY2FsbCBQcm9jZXNzQ2F0Y2h1cEV2 ZW50IGRpcmVjdGx5IHdoZW4gaWRsZS4gVGhlc2UgZGF5cwotICogd2UganVzdCBzZXQgYSBm bGFnIHRvIGRvIGl0IGxhdGVyIGFuZCBub3RpZnkgdGhlIHByb2Nlc3Mgb2YgdGhhdCBmYWN0 IGJ5Ci0gKiBzZXR0aW5nIHRoZSBwcm9jZXNzJ3MgbGF0Y2guCi0gKi8KLXZvaWQKLUhhbmRs ZUNhdGNodXBJbnRlcnJ1cHQodm9pZCkKLXsKLQkvKgotCSAqIE5vdGU6IHRoaXMgaXMgY2Fs bGVkIGJ5IGEgU0lHTkFMIEhBTkRMRVIuIFlvdSBtdXN0IGJlIHZlcnkgd2FyeSB3aGF0Ci0J ICogeW91IGRvIGhlcmUuCi0JICovCi0KLQljYXRjaHVwSW50ZXJydXB0UGVuZGluZyA9IHRy dWU7Ci0KLQkvKiBtYWtlIHN1cmUgdGhlIGV2ZW50IGlzIHByb2Nlc3NlZCBpbiBkdWUgY291 cnNlICovCi0JU2V0TGF0Y2goTXlMYXRjaCk7Ci19Ci0KIC8qCiAgKiBQcm9jZXNzQ2F0Y2h1 cEludGVycnVwdAogICoKQEAgLTE3MywxNCArMTMxLDE1IEBAIEhhbmRsZUNhdGNodXBJbnRl cnJ1cHQodm9pZCkKIHZvaWQKIFByb2Nlc3NDYXRjaHVwSW50ZXJydXB0KHZvaWQpCiB7Ci0J d2hpbGUgKGNhdGNodXBJbnRlcnJ1cHRQZW5kaW5nKQorCWRvCiAJewogCQkvKgogCQkgKiBX aGF0IHdlIG5lZWQgdG8gZG8gaGVyZSBpcyBjYXVzZSBSZWNlaXZlU2hhcmVkSW52YWxpZE1l c3NhZ2VzKCkgdG8KIAkJICogcnVuLCB3aGljaCB3aWxsIGRvIHRoZSBuZWNlc3Nhcnkgd29y ayBhbmQgYWxzbyByZXNldCB0aGUKLQkJICogY2F0Y2h1cEludGVycnVwdFBlbmRpbmcgZmxh Zy4gIElmIHdlIGFyZSBpbnNpZGUgYSB0cmFuc2FjdGlvbiB3ZQotCQkgKiBjYW4ganVzdCBj YWxsIEFjY2VwdEludmFsaWRhdGlvbk1lc3NhZ2VzKCkgdG8gZG8gdGhpcy4gIElmIHdlCi0J CSAqIGFyZW4ndCwgd2Ugc3RhcnQgYW5kIGltbWVkaWF0ZWx5IGVuZCBhIHRyYW5zYWN0aW9u OyB0aGUgY2FsbCB0bworCQkgKiBJTlRFUlJVUFRfU0lOVkFMX0NBVENIVVAgZmxhZy4gKEZJ WE1FOiBhY3R1YWxseSBpdCdzIGFscmVhZHkgYmVlbgorCQkgKiBjbGVhcmVkKSBJZiB3ZSBh cmUgaW5zaWRlIGEgdHJhbnNhY3Rpb24gd2UgY2FuIGp1c3QgY2FsbAorCQkgKiBBY2NlcHRJ bnZhbGlkYXRpb25NZXNzYWdlcygpIHRvIGRvIHRoaXMuICBJZiB3ZSBhcmVuJ3QsIHdlIHN0 YXJ0CisJCSAqIGFuZCBpbW1lZGlhdGVseSBlbmQgYSB0cmFuc2FjdGlvbjsgdGhlIGNhbGwg dG8KIAkJICogQWNjZXB0SW52YWxpZGF0aW9uTWVzc2FnZXMoKSBoYXBwZW5zIGRvd24gaW5z aWRlIHRyYW5zYWN0aW9uIHN0YXJ0LgogCQkgKgogCQkgKiBJdCBpcyBhd2Z1bGx5IHRlbXB0 aW5nIHRvIGp1c3QgY2FsbCBBY2NlcHRJbnZhbGlkYXRpb25NZXNzYWdlcygpCkBAIC0xOTAs MTQgKzE0OSwxNSBAQCBQcm9jZXNzQ2F0Y2h1cEludGVycnVwdCh2b2lkKQogCQkgKi8KIAkJ aWYgKElzVHJhbnNhY3Rpb25PclRyYW5zYWN0aW9uQmxvY2soKSkKIAkJewotCQkJZWxvZyhE RUJVRzQsICJQcm9jZXNzQ2F0Y2h1cEV2ZW50IGluc2lkZSB0cmFuc2FjdGlvbiIpOworCQkJ ZWxvZyhERUJVRzQsICJQcm9jZXNzQ2F0Y2h1cEludGVycnVwdCBpbnNpZGUgdHJhbnNhY3Rp b24iKTsKIAkJCUFjY2VwdEludmFsaWRhdGlvbk1lc3NhZ2VzKCk7CiAJCX0KIAkJZWxzZQog CQl7Ci0JCQllbG9nKERFQlVHNCwgIlByb2Nlc3NDYXRjaHVwRXZlbnQgb3V0c2lkZSB0cmFu c2FjdGlvbiIpOworCQkJZWxvZyhERUJVRzQsICJQcm9jZXNzQ2F0Y2h1cEludGVycnVwdCBv dXRzaWRlIHRyYW5zYWN0aW9uIik7CiAJCQlTdGFydFRyYW5zYWN0aW9uQ29tbWFuZCgpOwog CQkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CiAJCX0KIAl9CisJd2hpbGUgKENvbnN1 bWVJbnRlcnJ1cHQoSU5URVJSVVBUX1NJTlZBTF9DQVRDSFVQKSk7CiB9CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaW52YWxhZHQuYyBiL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvaXBjL3NpbnZhbGFkdC5jCmluZGV4IGE3YTdjYzRmMGE5Li40MmM5ODdkY2I5MSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2ludmFsYWR0LmMKKysrIGIv c3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2ludmFsYWR0LmMKQEAgLTE3LDExICsxNywxMSBA QAogI2luY2x1ZGUgPHNpZ25hbC5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogCisjaW5jbHVk ZSAiaXBjL2ludGVycnVwdC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUg InN0b3JhZ2UvaXBjLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCiAjaW5jbHVkZSAi c3RvcmFnZS9wcm9jbnVtYmVyLmgiCi0jaW5jbHVkZSAic3RvcmFnZS9wcm9jc2lnbmFsLmgi CiAjaW5jbHVkZSAic3RvcmFnZS9zaG1lbS5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc2ludmFs YWR0LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zcGluLmgiCkBAIC0xMTgsNyArMTE4LDcgQEAK ICAqIHdlIGV4Y2VlZCBDTEVBTlVQX01JTi4gIFNob3VsZCBiZSBhIHBvd2VyIG9mIDIgZm9y IHNwZWVkLgogICoKICAqIFNJR19USFJFU0hPTEQ6IHRoZSBtaW5pbXVtIG51bWJlciBvZiBt ZXNzYWdlcyBhIGJhY2tlbmQgbXVzdCBoYXZlIGZhbGxlbgotICogYmVoaW5kIGJlZm9yZSB3 ZSdsbCBzZW5kIGl0IFBST0NTSUdfQ0FUQ0hVUF9JTlRFUlJVUFQuCisgKiBiZWhpbmQgYmVm b3JlIHdlJ2xsIHNlbmQgaXQgSU5URVJSVVBUX1NJTlZBTF9DQVRDSFVQLgogICoKICAqIFdS SVRFX1FVQU5UVU06IHRoZSBtYXggbnVtYmVyIG9mIG1lc3NhZ2VzIHRvIHB1c2ggaW50byB0 aGUgYnVmZmVyIHBlcgogICogaXRlcmF0aW9uIG9mIFNJSW5zZXJ0RGF0YUVudHJpZXMuICBO b25jcml0aWNhbCBidXQgc2hvdWxkIGJlIGxlc3MgdGhhbgpAQCAtMzE0LDYgKzMxNCwxNCBA QCBTaGFyZWRJbnZhbEJhY2tlbmRJbml0KGJvb2wgc2VuZE9ubHkpCiAKIAkvKiByZWdpc3Rl ciBleGl0IHJvdXRpbmUgdG8gbWFyayBteSBlbnRyeSBpbmFjdGl2ZSBhdCBleGl0ICovCiAJ b25fc2htZW1fZXhpdChDbGVhbnVwSW52YWxpZGF0aW9uU3RhdGUsIFBvaW50ZXJHZXREYXR1 bShzZWdQKSk7CisKKwkvKgorCSAqIGFsbCBwcm9jZXNzZXMgdGhhdCBwYXJ0aWNpcGF0ZSBp biBzaGFyZWQgaW52YWxpZGF0aW9ucyBtdXN0IGhhbmRsZQorCSAqIGNhdGNodXAgaW50ZXJy dXB0cyBwcm9tcHRseS4gKENsaWVudCBiYWNrZW5kcyB3aWxsIGRpc2FibGUgdGhpcyB3aGls ZQorCSAqIHByb2Nlc3NpbmcgYSBxdWVyeSwgYnV0IGVuYWJsZSBieSBkZWZhdWx0LikKKwkg Ki8KKwlTZXRJbnRlcnJ1cHRIYW5kbGVyKElOVEVSUlVQVF9TSU5WQUxfQ0FUQ0hVUCwgUHJv Y2Vzc0NhdGNodXBJbnRlcnJ1cHQpOworCUVuYWJsZUludGVycnVwdChJTlRFUlJVUFRfU0lO VkFMX0NBVENIVVApOwogfQogCiAvKgpAQCAtNTY1LDcgKzU3Myw3IEBAIFNJR2V0RGF0YUVu dHJpZXMoU2hhcmVkSW52YWxpZGF0aW9uTWVzc2FnZSAqZGF0YSwgaW50IGRhdGFzaXplKQog ICogbWluRnJlZSBpcyB0aGUgbWluaW11bSBudW1iZXIgb2YgbWVzc2FnZSBzbG90cyB0byBt YWtlIGZyZWUuCiAgKgogICogUG9zc2libGUgc2lkZSBlZmZlY3RzIG9mIHRoaXMgcm91dGlu ZSBpbmNsdWRlIG1hcmtpbmcgb25lIG9yIG1vcmUKLSAqIGJhY2tlbmRzIGFzICJyZXNldCIg aW4gdGhlIGFycmF5LCBhbmQgc2VuZGluZyBQUk9DU0lHX0NBVENIVVBfSU5URVJSVVBUCisg KiBiYWNrZW5kcyBhcyAicmVzZXQiIGluIHRoZSBhcnJheSwgYW5kIHNlbmRpbmcgSU5URVJS VVBUX1NJTlZBTF9DQVRDSFVQCiAgKiB0byBzb21lIGJhY2tlbmQgdGhhdCBzZWVtcyB0byBi ZSBnZXR0aW5nIHRvbyBmYXIgYmVoaW5kLiAgV2Ugc2lnbmFsIGF0CiAgKiBtb3N0IG9uZSBi YWNrZW5kIGF0IGEgdGltZSwgZm9yIHJlYXNvbnMgZXhwbGFpbmVkIGF0IHRoZSB0b3Agb2Yg dGhlIGZpbGUuCiAgKgpAQCAtNjU4LDggKzY2Niw4IEBAIFNJQ2xlYW51cFF1ZXVlKGJvb2wg Y2FsbGVySGFzV3JpdGVMb2NrLCBpbnQgbWluRnJlZSkKIAkJc2VnUC0+bmV4dFRocmVzaG9s ZCA9IChudW1Nc2dzIC8gQ0xFQU5VUF9RVUFOVFVNICsgMSkgKiBDTEVBTlVQX1FVQU5UVU07 CiAKIAkvKgotCSAqIExhc3RseSwgc2lnbmFsIGFueW9uZSB3aG8gbmVlZHMgYSBjYXRjaHVw IGludGVycnVwdC4gIFNpbmNlCi0JICogU2VuZFByb2NTaWduYWwoKSBtaWdodCBub3QgYmUg ZmFzdCwgd2UgZG9uJ3Qgd2FudCB0byBob2xkIGxvY2tzIHdoaWxlCisJICogTGFzdGx5LCBz aWduYWwgYW55b25lIHdobyBuZWVkcyBhIGNhdGNodXAgaW50ZXJydXB0LiAgU2VuZEludGVy cnVwdCgpCisJICogaXMgcHJldHR5IGZhc3QsIGJ1dCB3ZSBuZXZlcnRoZWxlc3MgZG9uJ3Qg d2FudCB0byBob2xkIGxvY2tzIHdoaWxlCiAJICogZXhlY3V0aW5nIGl0LgogCSAqLwogCWlm IChuZWVkU2lnKQpAQCAtNjcwLDggKzY3OCw4IEBAIFNJQ2xlYW51cFF1ZXVlKGJvb2wgY2Fs bGVySGFzV3JpdGVMb2NrLCBpbnQgbWluRnJlZSkKIAkJbmVlZFNpZy0+c2lnbmFsZWQgPSB0 cnVlOwogCQlMV0xvY2tSZWxlYXNlKFNJbnZhbFJlYWRMb2NrKTsKIAkJTFdMb2NrUmVsZWFz ZShTSW52YWxXcml0ZUxvY2spOwotCQllbG9nKERFQlVHNCwgInNlbmRpbmcgc2ludmFsIGNh dGNodXAgc2lnbmFsIHRvIFBJRCAlZCIsIChpbnQpIGhpc19waWQpOwotCQlTZW5kUHJvY1Np Z25hbChoaXNfcGlkLCBQUk9DU0lHX0NBVENIVVBfSU5URVJSVVBULCBoaXNfcHJvY051bWJl cik7CisJCWVsb2coREVCVUc0LCAic2VuZGluZyBzaW52YWwgY2F0Y2h1cCBpbnRlcnJ1cHQg dG8gYmFja2VuZCBQSUQgJWQiLCAoaW50KSBoaXNfcGlkKTsKKwkJU2VuZEludGVycnVwdChJ TlRFUlJVUFRfU0lOVkFMX0NBVENIVVAsIGhpc19wcm9jTnVtYmVyKTsKIAkJaWYgKGNhbGxl ckhhc1dyaXRlTG9jaykKIAkJCUxXTG9ja0FjcXVpcmUoU0ludmFsV3JpdGVMb2NrLCBMV19F WENMVVNJVkUpOwogCX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3N0 YW5kYnkuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3N0YW5kYnkuYwppbmRleCBkODNh ZmJmYjlkNi4uMGViNTE1NjViYmUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv aXBjL3N0YW5kYnkuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zdGFuZGJ5LmMK QEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJhY2Nlc3MveGxvZ2luc2VydC5oIgogI2lu Y2x1ZGUgImFjY2Vzcy94bG9ncmVjb3ZlcnkuaCIKICNpbmNsdWRlICJhY2Nlc3MveGxvZ3V0 aWxzLmgiCisjaW5jbHVkZSAiaXBjL2ludGVycnVwdC5oIgogI2luY2x1ZGUgIm1pc2NhZG1p bi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL3Nsb3Qu aCIKQEAgLTU5Niw3ICs1OTcsNyBAQCBSZXNvbHZlUmVjb3ZlcnlDb25mbGljdFdpdGhEYXRh YmFzZShPaWQgZGJpZCkKICAqIFJlc29sdmVSZWNvdmVyeUNvbmZsaWN0V2l0aExvY2sgaXMg Y2FsbGVkIGZyb20gUHJvY1NsZWVwKCkKICAqIHRvIHJlc29sdmUgY29uZmxpY3RzIHdpdGgg b3RoZXIgYmFja2VuZHMgaG9sZGluZyByZWxhdGlvbiBsb2Nrcy4KICAqCi0gKiBUaGUgV2Fp dExhdGNoIHNsZWVwIG5vcm1hbGx5IGRvbmUgaW4gUHJvY1NsZWVwKCkKKyAqIFRoZSBXYWl0 SW50ZXJydXB0IHNsZWVwIG5vcm1hbGx5IGRvbmUgaW4gUHJvY1NsZWVwKCkKICAqICh3aGVu IG5vdCBJbkhvdFN0YW5kYnkpIGlzIHBlcmZvcm1lZCBoZXJlLCBmb3IgY29kZSBjbGFyaXR5 LgogICoKICAqIFdlIGVpdGhlciByZXNvbHZlIGNvbmZsaWN0cyBpbW1lZGlhdGVseSBvciBz ZXQgYSB0aW1lb3V0IHRvIHdha2UgdXMgYXQKQEAgLTY5OCw3ICs2OTksMTEgQEAgUmVzb2x2 ZVJlY292ZXJ5Q29uZmxpY3RXaXRoTG9jayhMT0NLVEFHIGxvY2t0YWcsIGJvb2wgbG9nZ2lu Z19jb25mbGljdCkKIAl9CiAKIAkvKiBXYWl0IHRvIGJlIHNpZ25hbGVkIGJ5IHRoZSByZWxl YXNlIG9mIHRoZSBSZWxhdGlvbiBMb2NrICovCi0JUHJvY1dhaXRGb3JTaWduYWwoUEdfV0FJ VF9MT0NLIHwgbG9ja3RhZy5sb2NrdGFnX3R5cGUpOworCVdhaXRJbnRlcnJ1cHQoQ2hlY2tG b3JJbnRlcnJ1cHRzTWFzayB8IElOVEVSUlVQVF9XQUlUX1dBS0VVUCwKKwkJCQkgIFdMX0lO VEVSUlVQVCB8IFdMX0VYSVRfT05fUE1fREVBVEgsIDAsCisJCQkJICBQR19XQUlUX0xPQ0sg fCBsb2NrdGFnLmxvY2t0YWdfdHlwZSk7CisJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKwlD bGVhckludGVycnVwdChJTlRFUlJVUFRfV0FJVF9XQUtFVVApOwogCiAJLyoKIAkgKiBFeGl0 IGlmIGx0aW1lIGlzIHJlYWNoZWQuIFRoZW4gYWxsIHRoZSBiYWNrZW5kcyBob2xkaW5nIGNv bmZsaWN0aW5nCkBAIC03NDYsNyArNzUxLDExIEBAIFJlc29sdmVSZWNvdmVyeUNvbmZsaWN0 V2l0aExvY2soTE9DS1RBRyBsb2NrdGFnLCBib29sIGxvZ2dpbmdfY29uZmxpY3QpCiAJCSAq IHVudGlsIHRoZSByZWxhdGlvbiBsb2NrcyBhcmUgcmVsZWFzZWQgb3IgbHRpbWUgaXMgcmVh Y2hlZC4KIAkJICovCiAJCWdvdF9zdGFuZGJ5X2RlYWRsb2NrX3RpbWVvdXQgPSBmYWxzZTsK LQkJUHJvY1dhaXRGb3JTaWduYWwoUEdfV0FJVF9MT0NLIHwgbG9ja3RhZy5sb2NrdGFnX3R5 cGUpOworCQlXYWl0SW50ZXJydXB0KENoZWNrRm9ySW50ZXJydXB0c01hc2sgfAorCQkJCQkg IElOVEVSUlVQVF9XQUlUX1dBS0VVUCwgV0xfSU5URVJSVVBUIHwgV0xfRVhJVF9PTl9QTV9E RUFUSCwgMCwKKwkJCQkJICBQR19XQUlUX0xPQ0sgfCBsb2NrdGFnLmxvY2t0YWdfdHlwZSk7 CisJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisJCUNsZWFySW50ZXJydXB0KElOVEVSUlVQ VF9XQUlUX1dBS0VVUCk7CiAJfQogCiBjbGVhbnVwOgpAQCAtNzcyLDkgKzc4MSwxMCBAQCBj bGVhbnVwOgogICogV2UgZWl0aGVyIHJlc29sdmUgY29uZmxpY3RzIGltbWVkaWF0ZWx5IG9y IHNldCBhIHRpbWVvdXQgdG8gd2FrZSB1cyBhdAogICogdGhlIGxpbWl0IG9mIG91ciBwYXRp ZW5jZS4KICAqCi0gKiBSZXNvbHZlIGNvbmZsaWN0cyBieSBzZW5kaW5nIGEgUFJPQ1NJRyBz aWduYWwgdG8gYWxsIGJhY2tlbmRzIHRvIGNoZWNrIGlmCi0gKiB0aGV5IGhvbGQgb25lIG9m IHRoZSBidWZmZXIgcGlucyB0aGF0IGlzIGJsb2NraW5nIFN0YXJ0dXAgcHJvY2Vzcy4gSWYg c28sCi0gKiB0aG9zZSBiYWNrZW5kcyB3aWxsIHRha2UgYW4gYXBwcm9wcmlhdGUgZXJyb3Ig YWN0aW9uLCBFUlJPUiBvciBGQVRBTC4KKyAqIFJlc29sdmUgY29uZmxpY3RzIGJ5IHNlbmRp bmcgUkVDT1ZFUllfQ09ORkxJQ1RfQlVGRkVSUElOIHRvIGFsbAorICogYmFja2VuZHMgdG8g Y2hlY2sgaWYgdGhleSBob2xkIG9uZSBvZiB0aGUgYnVmZmVyIHBpbnMgdGhhdCBpcyBibG9j a2luZworICogU3RhcnR1cCBwcm9jZXNzLiBJZiBzbywgdGhvc2UgYmFja2VuZHMgd2lsbCB0 YWtlIGFuIGFwcHJvcHJpYXRlIGVycm9yCisgKiBhY3Rpb24sIEVSUk9SIG9yIEZBVEFMLgog ICoKICAqIFdlIGFsc28gbXVzdCBjaGVjayBmb3IgZGVhZGxvY2tzLiAgRGVhZGxvY2tzIG9j Y3VyIGJlY2F1c2UgaWYgcXVlcmllcwogICogd2FpdCBvbiBhIGxvY2ssIHRoYXQgbXVzdCBi ZSBiZWhpbmQgYW4gQWNjZXNzRXhjbHVzaXZlTG9jaywgd2hpY2ggY2FuIG9ubHkKQEAgLTgz OCw5ICs4NDgsMTcgQEAgUmVzb2x2ZVJlY292ZXJ5Q29uZmxpY3RXaXRoQnVmZmVyUGluKHZv aWQpCiAJICogV2UgYXNzdW1lIHRoYXQgb25seSBVbnBpbkJ1ZmZlcigpIGFuZCB0aGUgdGlt ZW91dCByZXF1ZXN0cyBlc3RhYmxpc2hlZAogCSAqIGFib3ZlIGNhbiB3YWtlIHVzIHVwIGhl cmUuIFdha2V1cFJlY292ZXJ5KCkgY2FsbGVkIGJ5IHdhbHJlY2VpdmVyIG9yCiAJICogU0lH SFVQIHNpZ25hbCBoYW5kbGVyLCBldGMgY2Fubm90IGRvIHRoYXQgYmVjYXVzZSBpdCB1c2Vz IHRoZSBkaWZmZXJlbnQKLQkgKiBsYXRjaCBmcm9tIHRoYXQgUHJvY1dhaXRGb3JTaWduYWwo KSB3YWl0cyBvbi4KKwkgKiBpbnRlcnJ1cHQgZmxhZy4KKwkgKgorCSAqIEZJWE1FOiBzZWVt cyBsaWtlIGEgc2hha3kgYXNzdW1wdGlvbi4gV2FrZXVwUmVjb3ZlcnkoKSBpbmRlZWQgdXNl cyBhCisJICogZGlmZmVyZW50IGludGVycnVwdCBmbGFnIChkaWZmZXJlbnQgbGF0Y2ggZWFy bGllciksIGJ1dCB0aGUgc2lnbmFsCisJICogaGFuZGxlcj8/CiAJICovCi0JUHJvY1dhaXRG b3JTaWduYWwoV0FJVF9FVkVOVF9CVUZGRVJfQ0xFQU5VUCk7CisJV2FpdEludGVycnVwdChD aGVja0ZvckludGVycnVwdHNNYXNrIHwgSU5URVJSVVBUX1dBSVRfV0FLRVVQLAorCQkJCSAg V0xfSU5URVJSVVBUIHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwgMCwKKwkJCQkgIFdBSVRfRVZF TlRfQlVGRkVSX0NMRUFOVVApOworCUNsZWFySW50ZXJydXB0KElOVEVSUlVQVF9XQUlUX1dB S0VVUCk7CisJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIAogCWlmIChnb3Rfc3RhbmRieV9k ZWxheV90aW1lb3V0KQogCQlTZW5kUmVjb3ZlcnlDb25mbGljdFdpdGhCdWZmZXJQaW4oUkVD T1ZFUllfQ09ORkxJQ1RfQlVGRkVSUElOKTsKQEAgLTkzNiw2ICs5NTQsNyBAQCB2b2lkCiBT dGFuZGJ5RGVhZExvY2tIYW5kbGVyKHZvaWQpCiB7CiAJZ290X3N0YW5kYnlfZGVhZGxvY2tf dGltZW91dCA9IHRydWU7CisJUmFpc2VJbnRlcnJ1cHQoSU5URVJSVVBUX1dBSVRfV0FLRVVQ KTsKIH0KIAogLyoKQEAgLTk0NSw2ICs5NjQsNyBAQCB2b2lkCiBTdGFuZGJ5VGltZW91dEhh bmRsZXIodm9pZCkKIHsKIAlnb3Rfc3RhbmRieV9kZWxheV90aW1lb3V0ID0gdHJ1ZTsKKwlS YWlzZUludGVycnVwdChJTlRFUlJVUFRfV0FJVF9XQUtFVVApOwogfQogCiAvKgpAQCAtOTU0 LDYgKzk3NCw3IEBAIHZvaWQKIFN0YW5kYnlMb2NrVGltZW91dEhhbmRsZXIodm9pZCkKIHsK IAlnb3Rfc3RhbmRieV9sb2NrX3RpbWVvdXQgPSB0cnVlOworCVJhaXNlSW50ZXJydXB0KElO VEVSUlVQVF9XQUlUX1dBS0VVUCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9zdG9yYWdlL2lwYy93YWl0ZXZlbnRzZXQuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBj L3dhaXRldmVudHNldC5jCmluZGV4IDc3MmUzNTBhMGMwLi5lOGE4ZDc0MzgwYSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvd2FpdGV2ZW50c2V0LmMKKysrIGIvc3Jj L2JhY2tlbmQvc3RvcmFnZS9pcGMvd2FpdGV2ZW50c2V0LmMKQEAgLTgsOCArOCw4IEBACiAg KiBwc2VsZWN0KCkgKGFzIG9wcG9zZWQgdG8gcGxhaW4gcG9sbCgpL3NlbGVjdCgpKS4KICAq CiAgKiBZb3UgY2FuIHdhaXQgZm9yOgotICogLSBhIGxhdGNoIGJlaW5nIHNldCBmcm9tIGFu b3RoZXIgcHJvY2VzcyBvciBmcm9tIHNpZ25hbCBoYW5kbGVyIGluIHRoZSBzYW1lCi0gKiAg IHByb2Nlc3MgKFdMX0xBVENIX1NFVCkKKyAqIC0gYW4gaW50ZXJydXB0IGZyb20gYW5vdGhl ciBwcm9jZXNzIG9yIGZyb20gc2lnbmFsIGhhbmRsZXIgaW4gdGhlIHNhbWUKKyAqICAgcHJv Y2VzcyAoV0xfSU5URVJSVVBUKQogICogLSBkYXRhIHRvIGJlY29tZSByZWFkYWJsZSBvciB3 cml0ZWFibGUgb24gYSBzb2NrZXQgKFdMX1NPQ0tFVF8qKQogICogLSBwb3N0bWFzdGVyIGRl YXRoIChXTF9QT1NUTUFTVEVSX0RFQVRIIG9yIFdMX0VYSVRfT05fUE1fREVBVEgpCiAgKiAt IHRpbWVvdXQgKFdMX1RJTUVPVVQpCkBAIC0xNywxNSArMTcsMTYgQEAKICAqIEltcGxlbWVu dGF0aW9uCiAgKiAtLS0tLS0tLS0tLS0tLQogICoKLSAqIFRoZSBwb2xsKCkgaW1wbGVtZW50 YXRpb24gdXNlcyB0aGUgc28tY2FsbGVkIHNlbGYtcGlwZSB0cmljayB0byBvdmVyY29tZSB0 aGUKLSAqIHJhY2UgY29uZGl0aW9uIGludm9sdmVkIHdpdGggcG9sbCgpIGFuZCBzZXR0aW5n IGEgZ2xvYmFsIGZsYWcgaW4gdGhlIHNpZ25hbAotICogaGFuZGxlci4gV2hlbiBhIGxhdGNo IGlzIHNldCBhbmQgdGhlIGN1cnJlbnQgcHJvY2VzcyBpcyB3YWl0aW5nIGZvciBpdCwgdGhl Ci0gKiBzaWduYWwgaGFuZGxlciB3YWtlcyB1cCB0aGUgcG9sbCgpIGluIFdhaXRMYXRjaCBi eSB3cml0aW5nIGEgYnl0ZSB0byBhIHBpcGUuCi0gKiBBIHNpZ25hbCBieSBpdHNlbGYgZG9l c24ndCBpbnRlcnJ1cHQgcG9sbCgpIG9uIGFsbCBwbGF0Zm9ybXMsIGFuZCBldmVuIG9uCi0g KiBwbGF0Zm9ybXMgd2hlcmUgaXQgZG9lcywgYSBzaWduYWwgdGhhdCBhcnJpdmVzIGp1c3Qg YmVmb3JlIHRoZSBwb2xsKCkgY2FsbAotICogZG9lcyBub3QgcHJldmVudCBwb2xsKCkgZnJv bSBlbnRlcmluZyBzbGVlcC4gQW4gaW5jb21pbmcgYnl0ZSBvbiBhIHBpcGUKLSAqIGhvd2V2 ZXIgcmVsaWFibHkgaW50ZXJydXB0cyB0aGUgc2xlZXAsIGFuZCBjYXVzZXMgcG9sbCgpIHRv IHJldHVybgotICogaW1tZWRpYXRlbHkgZXZlbiBpZiB0aGUgc2lnbmFsIGFycml2ZXMgYmVm b3JlIHBvbGwoKSBiZWdpbnMuCisgKiBUaGUgcG9sbCgpIGltcGxlbWVudGF0aW9uIHVzZXMg dGhlIHNvLWNhbGxlZCBzZWxmLXBpcGUgdHJpY2sgdG8gb3ZlcmNvbWUKKyAqIHRoZSByYWNl IGNvbmRpdGlvbiBpbnZvbHZlZCB3aXRoIHBvbGwoKSBhbmQgc2V0dGluZyBhIGdsb2JhbCBm bGFnIGluIHRoZQorICogc2lnbmFsIGhhbmRsZXIuIFdoZW4gYW4gaW50ZXJydXB0IGlzIHJl Y2VpdmVkIGFuZCB0aGUgY3VycmVudCBwcm9jZXNzIGlzCisgKiB3YWl0aW5nIHdhaXRpbmcg Zm9yIGl0LCB0aGUgc2lnbmFsIGhhbmRsZXIgd2FrZXMgdXAgdGhlIHBvbGwoKSBpbgorICog V2FpdEludGVycnVwdCBieSB3cml0aW5nIGEgYnl0ZSB0byBhIHBpcGUuICBBIHNpZ25hbCBi eSBpdHNlbGYgZG9lc24ndAorICogaW50ZXJydXB0IHBvbGwoKSBvbiBhbGwgcGxhdGZvcm1z LCBhbmQgZXZlbiBvbiBwbGF0Zm9ybXMgd2hlcmUgaXQgZG9lcywgYQorICogc2lnbmFsIHRo YXQgYXJyaXZlcyBqdXN0IGJlZm9yZSB0aGUgcG9sbCgpIGNhbGwgZG9lcyBub3QgcHJldmVu dCBwb2xsKCkKKyAqIGZyb20gZW50ZXJpbmcgc2xlZXAuIEFuIGluY29taW5nIGJ5dGUgb24g YSBwaXBlIGhvd2V2ZXIgcmVsaWFibHkgaW50ZXJydXB0cworICogdGhlIHNsZWVwLCBhbmQg Y2F1c2VzIHBvbGwoKSB0byByZXR1cm4gaW1tZWRpYXRlbHkgZXZlbiBpZiB0aGUgc2lnbmFs CisgKiBhcnJpdmVzIGJlZm9yZSBwb2xsKCkgYmVnaW5zLgogICoKICAqIFRoZSBlcG9sbCgp IGltcGxlbWVudGF0aW9uIG92ZXJjb21lcyB0aGUgcmFjZSB3aXRoIGEgZGlmZmVyZW50IHRl Y2huaXF1ZTogaXQKICAqIGtlZXBzIFNJR1VSRyBibG9ja2VkIGFuZCBjb25zdW1lcyBmcm9t IGEgc2lnbmFsZmQoKSBkZXNjcmlwdG9yIGluc3RlYWQuICBXZQpAQCAtNzMsNyArNzQsNyBA QAogI2luY2x1ZGUgInN0b3JhZ2UvZmQuaCIKICNpbmNsdWRlICJzdG9yYWdlL2lwYy5oIgog I2luY2x1ZGUgInN0b3JhZ2UvcG1zaWduYWwuaCIKLSNpbmNsdWRlICJzdG9yYWdlL2xhdGNo LmgiCisjaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCiAjaW5jbHVkZSAic3RvcmFnZS93YWl0 ZXZlbnRzZXQuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0 aWxzL3Jlc293bmVyLmgiCkBAIC0xMjgsMTMgKzEyOSwxMyBAQCBzdHJ1Y3QgV2FpdEV2ZW50 U2V0CiAJV2FpdEV2ZW50ICAqZXZlbnRzOwogCiAJLyoKLQkgKiBJZiBXTF9MQVRDSF9TRVQg aXMgc3BlY2lmaWVkIGluIGFueSB3YWl0IGV2ZW50LCBsYXRjaCBpcyBhIHBvaW50ZXIgdG8K LQkgKiBzYWlkIGxhdGNoLCBhbmQgbGF0Y2hfcG9zIHRoZSBvZmZzZXQgaW4gdGhlIC0+ZXZl bnRzIGFycmF5LiBUaGlzIGlzCi0JICogdXNlZnVsIGJlY2F1c2Ugd2UgY2hlY2sgdGhlIHN0 YXRlIG9mIHRoZSBsYXRjaCBiZWZvcmUgcGVyZm9ybWluZyBkb2luZwotCSAqIHN5c2NhbGxz IHJlbGF0ZWQgdG8gd2FpdGluZy4KKwkgKiBJZiBXTF9JTlRFUlJVUFQgaXMgc3BlY2lmaWVk IGluIGFueSB3YWl0IGV2ZW50LCBpbnRlcnJ1cHRNYXNrIGlzIHRoZQorCSAqIGludGVycnVw dHMgdG8gd2FpdCBmb3IsIGFuZCBpbnRlcnJ1cHRfcG9zIHRoZSBvZmZzZXQgaW4gdGhlIC0+ ZXZlbnRzCisJICogYXJyYXkuIFRoaXMgaXMgdXNlZnVsIGJlY2F1c2Ugd2UgY2hlY2sgdGhl IHN0YXRlIG9mIHBlbmRpbmcgaW50ZXJydXB0cworCSAqIGJlZm9yZSBwZXJmb3JtaW5nIHN5 c2NhbGxzIHJlbGF0ZWQgdG8gd2FpdGluZy4KIAkgKi8KLQlMYXRjaAkgICAqbGF0Y2g7Ci0J aW50CQkJbGF0Y2hfcG9zOworCXVpbnQzMgkJaW50ZXJydXB0X21hc2s7CisJaW50CQkJaW50 ZXJydXB0X3BvczsKIAogCS8qCiAJICogV0xfRVhJVF9PTl9QTV9ERUFUSCBpcyBjb252ZXJ0 ZWQgdG8gV0xfUE9TVE1BU1RFUl9ERUFUSCwgYnV0IHRoaXMgZmxhZwpAQCAtMTY3LDcgKzE2 OCw3IEBAIHN0cnVjdCBXYWl0RXZlbnRTZXQKIH07CiAKICNpZm5kZWYgV0lOMzIKLS8qIEFy ZSB3ZSBjdXJyZW50bHkgaW4gV2FpdExhdGNoPyBUaGUgc2lnbmFsIGhhbmRsZXIgd291bGQg bGlrZSB0byBrbm93LiAqLworLyogQXJlIHdlIGN1cnJlbnRseSBvbiBhIFdhaXRFdmVudFNl dD8gVGhlIHNpZ25hbCBoYW5kbGVyIHdvdWxkIGxpa2UgdG8ga25vdy4gKi8KIHN0YXRpYyB2 b2xhdGlsZSBzaWdfYXRvbWljX3Qgd2FpdGluZyA9IGZhbHNlOwogI2VuZGlmCiAKQEAgLTE4 Myw5ICsxODQsMTYgQEAgc3RhdGljIGludAlzZWxmcGlwZV93cml0ZWZkID0gLTE7CiAKIC8q IFByb2Nlc3Mgb3duaW5nIHRoZSBzZWxmLXBpcGUgLS0tIG5lZWRlZCBmb3IgY2hlY2tpbmcg cHVycG9zZXMgKi8KIHN0YXRpYyBpbnQJc2VsZnBpcGVfb3duZXJfcGlkID0gMDsKKyNlbmRp ZgorCisjaWZkZWYgV0FJVF9VU0VfV0lOMzIKK3N0YXRpYyBIQU5ETEUgTG9jYWxJbnRlcnJ1 cHRXYWtldXBFdmVudDsKKyNlbmRpZgogCiAvKiBQcml2YXRlIGZ1bmN0aW9uIHByb3RvdHlw ZXMgKi8KLXN0YXRpYyB2b2lkIGxhdGNoX3NpZ3VyZ19oYW5kbGVyKFNJR05BTF9BUkdTKTsK KworI2lmZGVmIFdBSVRfVVNFX1NFTEZfUElQRQorc3RhdGljIHZvaWQgaW50ZXJydXB0X3Np Z3VyZ19oYW5kbGVyKFNJR05BTF9BUkdTKTsKIHN0YXRpYyB2b2lkIHNlbmRTZWxmUGlwZUJ5 dGUodm9pZCk7CiAjZW5kaWYKIApAQCAtMjM1LDcgKzI0Myw3IEBAIFJlc291cmNlT3duZXJG b3JnZXRXYWl0RXZlbnRTZXQoUmVzb3VyY2VPd25lciBvd25lciwgV2FpdEV2ZW50U2V0ICpz ZXQpCiAgKiBJbml0aWFsaXplIHRoZSBwcm9jZXNzLWxvY2FsIHdhaXQgZXZlbnQgaW5mcmFz dHJ1Y3R1cmUuCiAgKgogICogVGhpcyBtdXN0IGJlIGNhbGxlZCBvbmNlIGR1cmluZyBzdGFy dHVwIG9mIGFueSBwcm9jZXNzIHRoYXQgY2FuIHdhaXQgb24KLSAqIGxhdGNoZXMsIGJlZm9y ZSBpdCBpc3N1ZXMgYW55IEluaXRMYXRjaCgpIG9yIE93bkxhdGNoKCkgY2FsbHMuCisgKiBp bnRlcnJ1cHRzLgogICovCiB2b2lkCiBJbml0aWFsaXplV2FpdEV2ZW50U3VwcG9ydCh2b2lk KQpAQCAtMjg1LDEyICsyOTMsMTIgQEAgSW5pdGlhbGl6ZVdhaXRFdmVudFN1cHBvcnQodm9p ZCkKIAogCS8qCiAJICogU2V0IHVwIHRoZSBzZWxmLXBpcGUgdGhhdCBhbGxvd3MgYSBzaWdu YWwgaGFuZGxlciB0byB3YWtlIHVwIHRoZQotCSAqIHBvbGwoKS9lcG9sbF93YWl0KCkgaW4g V2FpdExhdGNoLiBNYWtlIHRoZSB3cml0ZS1lbmQgbm9uLWJsb2NraW5nLCBzbwotCSAqIHRo YXQgU2V0TGF0Y2ggd29uJ3QgYmxvY2sgaWYgdGhlIGV2ZW50IGhhcyBhbHJlYWR5IGJlZW4g c2V0IG1hbnkgdGltZXMKLQkgKiBmaWxsaW5nIHRoZSBrZXJuZWwgYnVmZmVyLiBNYWtlIHRo ZSByZWFkLWVuZCBub24tYmxvY2tpbmcgdG9vLCBzbyB0aGF0Ci0JICogd2UgY2FuIGVhc2ls eSBjbGVhciB0aGUgcGlwZSBieSByZWFkaW5nIHVudGlsIEVBR0FJTiBvciBFV09VTERCTE9D Sy4KLQkgKiBBbHNvLCBtYWtlIGJvdGggRkRzIGNsb3NlLW9uLWV4ZWMsIHNpbmNlIHdlIHN1 cmVseSBkbyBub3Qgd2FudCBhbnkKLQkgKiBjaGlsZCBwcm9jZXNzZXMgbWVzc2luZyB3aXRo IHRoZW0uCisJICogcG9sbCgpL2Vwb2xsX3dhaXQoKSBpbiBXYWl0SW50ZXJydXB0LiBNYWtl IHRoZSB3cml0ZS1lbmQgbm9uLWJsb2NraW5nLAorCSAqIHNvIHRoYXQgU2VuZEludGVycnVw dCB3b24ndCBibG9jayBpZiB0aGUgZXZlbnQgaGFzIGFscmVhZHkgYmVlbiBzZXQKKwkgKiBt YW55IHRpbWVzIGZpbGxpbmcgdGhlIGtlcm5lbCBidWZmZXIuIE1ha2UgdGhlIHJlYWQtZW5k IG5vbi1ibG9ja2luZworCSAqIHRvbywgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGNsZWFyIHRo ZSBwaXBlIGJ5IHJlYWRpbmcgdW50aWwgRUFHQUlOIG9yCisJICogRVdPVUxEQkxPQ0suIEFs c28sIG1ha2UgYm90aCBGRHMgY2xvc2Utb24tZXhlYywgc2luY2Ugd2Ugc3VyZWx5IGRvIG5v dAorCSAqIHdhbnQgYW55IGNoaWxkIHByb2Nlc3NlcyBtZXNzaW5nIHdpdGggdGhlbS4KIAkg Ki8KIAlpZiAocGlwZShwaXBlZmQpIDwgMCkKIAkJZWxvZyhGQVRBTCwgInBpcGUoKSBmYWls ZWQ6ICVtIik7CkBAIC0zMTEsNyArMzE5LDcgQEAgSW5pdGlhbGl6ZVdhaXRFdmVudFN1cHBv cnQodm9pZCkKIAlSZXNlcnZlRXh0ZXJuYWxGRCgpOwogCVJlc2VydmVFeHRlcm5hbEZEKCk7 CiAKLQlwcXNpZ25hbChTSUdVUkcsIGxhdGNoX3NpZ3VyZ19oYW5kbGVyKTsKKwlwcXNpZ25h bChTSUdVUkcsIGludGVycnVwdF9zaWd1cmdfaGFuZGxlcik7CiAjZW5kaWYKIAogI2lmZGVm IFdBSVRfVVNFX1NJR05BTEZECkBAIC0zNDksNiArMzU3LDEyIEBAIEluaXRpYWxpemVXYWl0 RXZlbnRTdXBwb3J0KHZvaWQpCiAJLyogSWdub3JlIFNJR1VSRywgYmVjYXVzZSB3ZSdsbCBy ZWNlaXZlIGl0IHZpYSBrcXVldWUuICovCiAJcHFzaWduYWwoU0lHVVJHLCBTSUdfSUdOKTsK ICNlbmRpZgorCisjaWZkZWYgV0FJVF9VU0VfV0lOMzIKKwlMb2NhbEludGVycnVwdFdha2V1 cEV2ZW50ID0gQ3JlYXRlRXZlbnQoTlVMTCwgVFJVRSwgRkFMU0UsIE5VTEwpOworCWlmIChM b2NhbEludGVycnVwdFdha2V1cEV2ZW50ID09IE5VTEwpCisJCWVsb2coRVJST1IsICJDcmVh dGVFdmVudCBmYWlsZWQ6IGVycm9yIGNvZGUgJWx1IiwgR2V0TGFzdEVycm9yKCkpOworI2Vu ZGlmCiB9CiAKIC8qCkBAIC00MTIsNyArNDI2LDggQEAgQ3JlYXRlV2FpdEV2ZW50U2V0KFJl c291cmNlT3duZXIgcmVzb3duZXIsIGludCBuZXZlbnRzKQogCWRhdGEgKz0gTUFYQUxJR04o c2l6ZW9mKEhBTkRMRSkgKiBuZXZlbnRzKTsKICNlbmRpZgogCi0Jc2V0LT5sYXRjaCA9IE5V TEw7CisJc2V0LT5pbnRlcnJ1cHRfbWFzayA9IDA7CisJc2V0LT5pbnRlcnJ1cHRfcG9zID0g LTE7CiAJc2V0LT5uZXZlbnRzX3NwYWNlID0gbmV2ZW50czsKIAlzZXQtPmV4aXRfb25fcG9z dG1hc3Rlcl9kZWF0aCA9IGZhbHNlOwogCkBAIC00OTYsOSArNTExLDkgQEAgRnJlZVdhaXRF dmVudFNldChXYWl0RXZlbnRTZXQgKnNldCkKIAkJIGN1cl9ldmVudCA8IChzZXQtPmV2ZW50 cyArIHNldC0+bmV2ZW50cyk7CiAJCSBjdXJfZXZlbnQrKykKIAl7Ci0JCWlmIChjdXJfZXZl bnQtPmV2ZW50cyAmIFdMX0xBVENIX1NFVCkKKwkJaWYgKGN1cl9ldmVudC0+ZXZlbnRzICYg V0xfSU5URVJSVVBUKQogCQl7Ci0JCQkvKiB1c2VzIHRoZSBsYXRjaCdzIEhBTkRMRSAqLwor CQkJLyogdXNlcyB0aGUgcHJvY2VzcydzIHdha2V1cCBIQU5ETEUgKi8KIAkJfQogCQllbHNl IGlmIChjdXJfZXZlbnQtPmV2ZW50cyAmIFdMX1BPU1RNQVNURVJfREVBVEgpCiAJCXsKQEAg LTUzNSw3ICs1NTAsNyBAQCBGcmVlV2FpdEV2ZW50U2V0QWZ0ZXJGb3JrKFdhaXRFdmVudFNl dCAqc2V0KQogCiAvKiAtLS0KICAqIEFkZCBhbiBldmVudCB0byB0aGUgc2V0LiBQb3NzaWJs ZSBldmVudHMgYXJlOgotICogLSBXTF9MQVRDSF9TRVQ6IFdhaXQgZm9yIHRoZSBsYXRjaCB0 byBiZSBzZXQKKyAqIC0gV0xfSU5URVJSVVBUOiBXYWl0IGZvciB0aGUgaW50ZXJydXB0IHRv IGJlIHJhaXNlZAogICogLSBXTF9QT1NUTUFTVEVSX0RFQVRIOiBXYWl0IGZvciBwb3N0bWFz dGVyIHRvIGRpZQogICogLSBXTF9TT0NLRVRfUkVBREFCTEU6IFdhaXQgZm9yIHNvY2tldCB0 byBiZWNvbWUgcmVhZGFibGUsCiAgKgkgY2FuIGJlIGNvbWJpbmVkIGluIG9uZSBldmVudCB3 aXRoIG90aGVyIFdMX1NPQ0tFVF8qIGV2ZW50cwpAQCAtNTUzLDEwICs1NjgsNiBAQCBGcmVl V2FpdEV2ZW50U2V0QWZ0ZXJGb3JrKFdhaXRFdmVudFNldCAqc2V0KQogICogUmV0dXJucyB0 aGUgb2Zmc2V0IGluIFdhaXRFdmVudFNldC0+ZXZlbnRzIChzdGFydGluZyBmcm9tIDApLCB3 aGljaCBjYW4gYmUKICAqIHVzZWQgdG8gbW9kaWZ5IHByZXZpb3VzbHkgYWRkZWQgd2FpdCBl dmVudHMgdXNpbmcgTW9kaWZ5V2FpdEV2ZW50KCkuCiAgKgotICogSW4gdGhlIFdMX0xBVENI X1NFVCBjYXNlIHRoZSBsYXRjaCBtdXN0IGJlIG93bmVkIGJ5IHRoZSBjdXJyZW50IHByb2Nl c3MsCi0gKiBpLmUuIGl0IG11c3QgYmUgYSBwcm9jZXNzLWxvY2FsIGxhdGNoIGluaXRpYWxp emVkIHdpdGggSW5pdExhdGNoLCBvciBhCi0gKiBzaGFyZWQgbGF0Y2ggYXNzb2NpYXRlZCB3 aXRoIHRoZSBjdXJyZW50IHByb2Nlc3MgYnkgY2FsbGluZyBPd25MYXRjaC4KLSAqCiAgKiBJ biB0aGUgV0xfU09DS0VUX1JFQURBQkxFL1dSSVRFQUJMRS9DT05ORUNURUQvQUNDRVBUIGNh c2VzLCBFT0YgYW5kIGVycm9yCiAgKiBjb25kaXRpb25zIGNhdXNlIHRoZSBzb2NrZXQgdG8g YmUgcmVwb3J0ZWQgYXMgcmVhZGFibGUvd3JpdGFibGUvY29ubmVjdGVkLAogICogc28gdGhh dCB0aGUgY2FsbGVyIGNhbiBkZWFsIHdpdGggdGhlIGNvbmRpdGlvbi4KQEAgLTU2Niw3ICs1 NzcsNyBAQCBGcmVlV2FpdEV2ZW50U2V0QWZ0ZXJGb3JrKFdhaXRFdmVudFNldCAqc2V0KQog ICogZXZlbnRzLgogICovCiBpbnQKLUFkZFdhaXRFdmVudFRvU2V0KFdhaXRFdmVudFNldCAq c2V0LCB1aW50MzIgZXZlbnRzLCBwZ3NvY2tldCBmZCwgTGF0Y2ggKmxhdGNoLAorQWRkV2Fp dEV2ZW50VG9TZXQoV2FpdEV2ZW50U2V0ICpzZXQsIHVpbnQzMiBldmVudHMsIHBnc29ja2V0 IGZkLCB1aW50MzIgaW50ZXJydXB0TWFzaywKIAkJCQkgIHZvaWQgKnVzZXJfZGF0YSkKIHsK IAlXYWl0RXZlbnQgICpldmVudDsKQEAgLTU4MCwxOSArNTkxLDE2IEBAIEFkZFdhaXRFdmVu dFRvU2V0KFdhaXRFdmVudFNldCAqc2V0LCB1aW50MzIgZXZlbnRzLCBwZ3NvY2tldCBmZCwg TGF0Y2ggKmxhdGNoLAogCQlzZXQtPmV4aXRfb25fcG9zdG1hc3Rlcl9kZWF0aCA9IHRydWU7 CiAJfQogCi0JaWYgKGxhdGNoKQotCXsKLQkJaWYgKGxhdGNoLT5vd25lcl9waWQgIT0gTXlQ cm9jUGlkKQotCQkJZWxvZyhFUlJPUiwgImNhbm5vdCB3YWl0IG9uIGEgbGF0Y2ggb3duZWQg YnkgYW5vdGhlciBwcm9jZXNzIik7Ci0JCWlmIChzZXQtPmxhdGNoKQotCQkJZWxvZyhFUlJP UiwgImNhbm5vdCB3YWl0IG9uIG1vcmUgdGhhbiBvbmUgbGF0Y2giKTsKLQkJaWYgKChldmVu dHMgJiBXTF9MQVRDSF9TRVQpICE9IFdMX0xBVENIX1NFVCkKLQkJCWVsb2coRVJST1IsICJs YXRjaCBldmVudHMgb25seSBzdXBwb3J0IGJlaW5nIHNldCIpOwotCX0KLQllbHNlCisJLyoK KwkgKiBJdCBkb2Vzbid0IG1ha2UgbXVjaCBzZW5zZSB0byB3YWl0IGZvciBXTF9JTlRFUlJV UFQgd2l0aCBlbXB0eQorCSAqIGludGVycnVwdE1hc2ssIGJ1dCB3ZSBhbGxvdyBpdCBzbyB0 aGF0IHlvdSBjYW4gdXNlIE1vZGlmeUV2ZW50IHRvIHNldAorCSAqIHRoZSBpbnRlcnJ1cHRN YXNrIGxhdGVyLiBOb24temVybyBpbnRlcnJ1cHRNYXNrIGRvZXNuJ3QgbWFrZSBzZW5zZQor CSAqIHdpdGhvdXQgV0xfSU5URVJSVVBULCBob3dldmVyLgorCSAqLworCWlmIChpbnRlcnJ1 cHRNYXNrICE9IDApCiAJewotCQlpZiAoZXZlbnRzICYgV0xfTEFUQ0hfU0VUKQotCQkJZWxv ZyhFUlJPUiwgImNhbm5vdCB3YWl0IG9uIGxhdGNoIHdpdGhvdXQgYSBzcGVjaWZpZWQgbGF0 Y2giKTsKKwkJaWYgKChldmVudHMgJiBXTF9JTlRFUlJVUFQpICE9IFdMX0lOVEVSUlVQVCkK KwkJCWVsb2coRVJST1IsICJpbnRlcnJ1cHRlZCBldmVudHMgb25seSBzdXBwb3J0IGJlaW5n IHNldCIpOwogCX0KIAogCS8qIHdhaXRpbmcgZm9yIHNvY2tldCByZWFkaW5lc3Mgd2l0aG91 dCBhIHNvY2tldCBpbmRpY2F0ZXMgYSBidWcgKi8KQEAgLTYwOCwxMCArNjE2LDEwIEBAIEFk ZFdhaXRFdmVudFRvU2V0KFdhaXRFdmVudFNldCAqc2V0LCB1aW50MzIgZXZlbnRzLCBwZ3Nv Y2tldCBmZCwgTGF0Y2ggKmxhdGNoLAogCWV2ZW50LT5yZXNldCA9IGZhbHNlOwogI2VuZGlm CiAKLQlpZiAoZXZlbnRzID09IFdMX0xBVENIX1NFVCkKKwlpZiAoZXZlbnRzID09IFdMX0lO VEVSUlVQVCkKIAl7Ci0JCXNldC0+bGF0Y2ggPSBsYXRjaDsKLQkJc2V0LT5sYXRjaF9wb3Mg PSBldmVudC0+cG9zOworCQlzZXQtPmludGVycnVwdF9tYXNrID0gaW50ZXJydXB0TWFzazsK KwkJc2V0LT5pbnRlcnJ1cHRfcG9zID0gZXZlbnQtPnBvczsKICNpZiBkZWZpbmVkKFdBSVRf VVNFX1NFTEZfUElQRSkKIAkJZXZlbnQtPmZkID0gc2VsZnBpcGVfcmVhZGZkOwogI2VsaWYg ZGVmaW5lZChXQUlUX1VTRV9TSUdOQUxGRCkKQEAgLTY0NSwxNCArNjUzLDE0IEBAIEFkZFdh aXRFdmVudFRvU2V0KFdhaXRFdmVudFNldCAqc2V0LCB1aW50MzIgZXZlbnRzLCBwZ3NvY2tl dCBmZCwgTGF0Y2ggKmxhdGNoLAogfQogCiAvKgotICogQ2hhbmdlIHRoZSBldmVudCBtYXNr IGFuZCwgaW4gdGhlIFdMX0xBVENIX1NFVCBjYXNlLCB0aGUgbGF0Y2ggYXNzb2NpYXRlZAot ICogd2l0aCB0aGUgV2FpdEV2ZW50LiAgVGhlIGxhdGNoIG1heSBiZSBjaGFuZ2VkIHRvIE5V TEwgdG8gZGlzYWJsZSB0aGUgbGF0Y2gKLSAqIHRlbXBvcmFyaWx5LCBhbmQgdGhlbiBzZXQg YmFjayB0byBhIGxhdGNoIGxhdGVyLgorICogQ2hhbmdlIHRoZSBldmVudCBtYXNrIGFuZCwg aW4gdGhlIFdMX0lOVEVSUlVQVCBjYXNlLCB0aGUgaW50ZXJydXB0IG1hc2sKKyAqIGFzc29j aWF0ZWQgd2l0aCB0aGUgV2FpdEV2ZW50LiAgVGhlIGludGVycnVwdCBtYXNrIG1heSBiZSBj aGFuZ2VkIHRvIDAgdG8KKyAqIGRpc2FibGUgdGhlIHdha2V1cHMgb24gaW50ZXJydXB0cyB0 ZW1wb3JhcmlseSwgYW5kIHRoZW4gc2V0IGJhY2sgbGF0ZXIuCiAgKgogICogJ3BvcycgaXMg dGhlIGlkIHJldHVybmVkIGJ5IEFkZFdhaXRFdmVudFRvU2V0LgogICovCiB2b2lkCi1Nb2Rp ZnlXYWl0RXZlbnQoV2FpdEV2ZW50U2V0ICpzZXQsIGludCBwb3MsIHVpbnQzMiBldmVudHMs IExhdGNoICpsYXRjaCkKK01vZGlmeVdhaXRFdmVudChXYWl0RXZlbnRTZXQgKnNldCwgaW50 IHBvcywgdWludDMyIGV2ZW50cywgdWludDMyIGludGVycnVwdE1hc2spCiB7CiAJV2FpdEV2 ZW50ICAqZXZlbnQ7CiAjaWYgZGVmaW5lZChXQUlUX1VTRV9LUVVFVUUpCkBAIC02ODIsNDAg KzY5MCwzNCBAQCBNb2RpZnlXYWl0RXZlbnQoV2FpdEV2ZW50U2V0ICpzZXQsIGludCBwb3Ms IHVpbnQzMiBldmVudHMsIExhdGNoICpsYXRjaCkKIAl9CiAKIAkvKgotCSAqIElmIG5laXRo ZXIgdGhlIGV2ZW50IG1hc2sgbm9yIHRoZSBhc3NvY2lhdGVkIGxhdGNoIGNoYW5nZXMsIHJl dHVybgotCSAqIGVhcmx5LiBUaGF0J3MgYW4gaW1wb3J0YW50IG9wdGltaXphdGlvbiBmb3Ig c29tZSBzb2NrZXRzLCB3aGVyZQorCSAqIElmIG5laXRoZXIgdGhlIGV2ZW50IG1hc2sgbm9y IHRoZSBhc3NvY2lhdGVkIGludGVycnVwdCBtYXNrIGNoYW5nZXMsCisJICogcmV0dXJuIGVh cmx5LiBUaGF0J3MgYW4gaW1wb3J0YW50IG9wdGltaXphdGlvbiBmb3Igc29tZSBzb2NrZXRz LCB3aGVyZQogCSAqIE1vZGlmeVdhaXRFdmVudCBpcyBmcmVxdWVudGx5IHVzZWQgdG8gc3dp dGNoIGZyb20gd2FpdGluZyBmb3IgcmVhZHMgdG8KIAkgKiB3YWl0aW5nIG9uIHdyaXRlcy4K IAkgKi8KIAlpZiAoZXZlbnRzID09IGV2ZW50LT5ldmVudHMgJiYKLQkJKCEoZXZlbnQtPmV2 ZW50cyAmIFdMX0xBVENIX1NFVCkgfHwgc2V0LT5sYXRjaCA9PSBsYXRjaCkpCisJCSghKGV2 ZW50LT5ldmVudHMgJiBXTF9JTlRFUlJVUFQpIHx8IHNldC0+aW50ZXJydXB0X21hc2sgPT0g aW50ZXJydXB0TWFzaykpCiAJCXJldHVybjsKIAotCWlmIChldmVudC0+ZXZlbnRzICYgV0xf TEFUQ0hfU0VUICYmIGV2ZW50cyAhPSBldmVudC0+ZXZlbnRzKQotCQllbG9nKEVSUk9SLCAi Y2Fubm90IG1vZGlmeSBsYXRjaCBldmVudCIpOworCWlmIChldmVudC0+ZXZlbnRzICYgV0xf SU5URVJSVVBUICYmIGV2ZW50cyAhPSBldmVudC0+ZXZlbnRzKQorCQllbG9nKEVSUk9SLCAi Y2Fubm90IG1vZGlmeSBpbnRlcnJ1cHRzIGV2ZW50Iik7CiAKIAkvKiBGSVhNRTogdmFsaWRh dGUgZXZlbnQgbWFzayAqLwogCWV2ZW50LT5ldmVudHMgPSBldmVudHM7CiAKLQlpZiAoZXZl bnRzID09IFdMX0xBVENIX1NFVCkKKwlpZiAoZXZlbnRzID09IFdMX0lOVEVSUlVQVCkKIAl7 Ci0JCWlmIChsYXRjaCAmJiBsYXRjaC0+b3duZXJfcGlkICE9IE15UHJvY1BpZCkKLQkJCWVs b2coRVJST1IsICJjYW5ub3Qgd2FpdCBvbiBhIGxhdGNoIG93bmVkIGJ5IGFub3RoZXIgcHJv Y2VzcyIpOwotCQlzZXQtPmxhdGNoID0gbGF0Y2g7CisJCXNldC0+aW50ZXJydXB0X21hc2sg PSBpbnRlcnJ1cHRNYXNrOwogCiAJCS8qCi0JCSAqIE9uIFVuaXgsIHdlIGRvbid0IG5lZWQg dG8gbW9kaWZ5IHRoZSBrZXJuZWwgb2JqZWN0IGJlY2F1c2UgdGhlCi0JCSAqIHVuZGVybHlp bmcgcGlwZSAoaWYgdGhlcmUgaXMgb25lKSBpcyB0aGUgc2FtZSBmb3IgYWxsIGxhdGNoZXMg c28gd2UKLQkJICogY2FuIHJldHVybiBpbW1lZGlhdGVseS4gIE9uIFdpbmRvd3MsIHdlIG5l ZWQgdG8gdXBkYXRlIG91ciBhcnJheSBvZgotCQkgKiBoYW5kbGVzLCBidXQgd2UgbGVhdmUg dGhlIG9sZCBvbmUgaW4gcGxhY2UgYW5kIHRvbGVyYXRlIHNwdXJpb3VzCi0JCSAqIHdha2V1 cHMgaWYgdGhlIGxhdGNoIGlzIGRpc2FibGVkLgorCQkgKiBXZSBkb24ndCBib3RoZXIgdG8g YWRqdXN0IHRoZSBldmVudCB3aGVuIHRoZSBpbnRlcnJ1cHQgbWFzaworCQkgKiBjaGFuZ2Vz LiAgSXQgbWVhbnMgdGhhdCB3aGVuIGludGVycnVwdCBtYXNrIGlzIHNldCB0byAwLCB3ZSB3 aWxsCisJCSAqIGxpc3RlbiBvbiB0aGUga2VybmVsIG9iamVjdCB1bm5lY2Vzc2FyaWx5LCBh bmQgbWlnaHQgZ2V0IHNvbWUKKwkJICogc3B1cmlvdXMgd2FrZXVwcy4gVGhlIGludGVycnVw dCBzZW5kaW5nIGNvZGUgc2hvdWxkIG5vdCB3YWtlIHVzIHVwCisJCSAqIGlmIHRoZSBTTEVF UElOR19PTl9JTlRFUlJVUFRTIGJpdCBpcyBub3QgYXJtZWQsIHRob3VnaCwgc28gaXQKKwkJ ICogc2hvdWxkIGJlIHJhcmUuCiAJCSAqLwotI2lmIGRlZmluZWQoV0FJVF9VU0VfV0lOMzIp Ci0JCWlmICghbGF0Y2gpCi0JCQlyZXR1cm47Ci0jZWxzZQogCQlyZXR1cm47Ci0jZW5kaWYK IAl9CiAKICNpZiBkZWZpbmVkKFdBSVRfVVNFX0VQT0xMKQpAQCAtNzQ1LDkgKzc0Nyw4IEBA IFdhaXRFdmVudEFkanVzdEVwb2xsKFdhaXRFdmVudFNldCAqc2V0LCBXYWl0RXZlbnQgKmV2 ZW50LCBpbnQgYWN0aW9uKQogCWVwb2xsX2V2LmV2ZW50cyA9IEVQT0xMRVJSIHwgRVBPTExI VVA7CiAKIAkvKiBwcmVwYXJlIHBvbGxmZCBlbnRyeSBvbmNlICovCi0JaWYgKGV2ZW50LT5l dmVudHMgPT0gV0xfTEFUQ0hfU0VUKQorCWlmIChldmVudC0+ZXZlbnRzID09IFdMX0lOVEVS UlVQVCkKIAl7Ci0JCUFzc2VydChzZXQtPmxhdGNoICE9IE5VTEwpOwogCQllcG9sbF9ldi5l dmVudHMgfD0gRVBPTExJTjsKIAl9CiAJZWxzZSBpZiAoZXZlbnQtPmV2ZW50cyA9PSBXTF9Q T1NUTUFTVEVSX0RFQVRIKQpAQCAtNzk0LDkgKzc5NSw4IEBAIFdhaXRFdmVudEFkanVzdFBv bGwoV2FpdEV2ZW50U2V0ICpzZXQsIFdhaXRFdmVudCAqZXZlbnQpCiAJcG9sbGZkLT5mZCA9 IGV2ZW50LT5mZDsKIAogCS8qIHByZXBhcmUgcG9sbGZkIGVudHJ5IG9uY2UgKi8KLQlpZiAo ZXZlbnQtPmV2ZW50cyA9PSBXTF9MQVRDSF9TRVQpCisJaWYgKGV2ZW50LT5ldmVudHMgPT0g V0xfSU5URVJSVVBUKQogCXsKLQkJQXNzZXJ0KHNldC0+bGF0Y2ggIT0gTlVMTCk7CiAJCXBv bGxmZC0+ZXZlbnRzID0gUE9MTElOOwogCX0KIAllbHNlIGlmIChldmVudC0+ZXZlbnRzID09 IFdMX1BPU1RNQVNURVJfREVBVEgpCkBAIC04NTgsOSArODU4LDkgQEAgV2FpdEV2ZW50QWRq dXN0S3F1ZXVlQWRkUG9zdG1hc3RlcihzdHJ1Y3Qga2V2ZW50ICprX2V2LCBXYWl0RXZlbnQg KmV2ZW50KQogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKLVdhaXRFdmVudEFkanVzdEtxdWV1 ZUFkZExhdGNoKHN0cnVjdCBrZXZlbnQgKmtfZXYsIFdhaXRFdmVudCAqZXZlbnQpCitXYWl0 RXZlbnRBZGp1c3RLcXVldWVBZGRJbnRlcnJ1cHRXYWtldXAoc3RydWN0IGtldmVudCAqa19l diwgV2FpdEV2ZW50ICpldmVudCkKIHsKLQkvKiBGb3Igbm93IGxhdGNoIGNhbiBvbmx5IGJl IGFkZGVkLCBub3QgcmVtb3ZlZC4gKi8KKwkvKiBGb3Igbm93IGludGVycnVwdCB3YWtldXAg Y2FuIG9ubHkgYmUgYWRkZWQsIG5vdCByZW1vdmVkLiAqLwogCWtfZXYtPmlkZW50ID0gU0lH VVJHOwogCWtfZXYtPmZpbHRlciA9IEVWRklMVF9TSUdOQUw7CiAJa19ldi0+ZmxhZ3MgPSBF Vl9BREQ7CkBAIC04ODYsOCArODg2LDcgQEAgV2FpdEV2ZW50QWRqdXN0S3F1ZXVlKFdhaXRF dmVudFNldCAqc2V0LCBXYWl0RXZlbnQgKmV2ZW50LCBpbnQgb2xkX2V2ZW50cykKIAlpZiAo b2xkX2V2ZW50cyA9PSBldmVudC0+ZXZlbnRzKQogCQlyZXR1cm47CiAKLQlBc3NlcnQoZXZl bnQtPmV2ZW50cyAhPSBXTF9MQVRDSF9TRVQgfHwgc2V0LT5sYXRjaCAhPSBOVUxMKTsKLQlB c3NlcnQoZXZlbnQtPmV2ZW50cyA9PSBXTF9MQVRDSF9TRVQgfHwKKwlBc3NlcnQoZXZlbnQt PmV2ZW50cyA9PSBXTF9JTlRFUlJVUFQgfHwKIAkJICAgZXZlbnQtPmV2ZW50cyA9PSBXTF9Q T1NUTUFTVEVSX0RFQVRIIHx8CiAJCSAgIChldmVudC0+ZXZlbnRzICYgKFdMX1NPQ0tFVF9S RUFEQUJMRSB8CiAJCQkJCQkJIFdMX1NPQ0tFVF9XUklURUFCTEUgfApAQCAtOTAyLDEwICs5 MDEsMTAgQEAgV2FpdEV2ZW50QWRqdXN0S3F1ZXVlKFdhaXRFdmVudFNldCAqc2V0LCBXYWl0 RXZlbnQgKmV2ZW50LCBpbnQgb2xkX2V2ZW50cykKIAkJICovCiAJCVdhaXRFdmVudEFkanVz dEtxdWV1ZUFkZFBvc3RtYXN0ZXIoJmtfZXZbY291bnQrK10sIGV2ZW50KTsKIAl9Ci0JZWxz ZSBpZiAoZXZlbnQtPmV2ZW50cyA9PSBXTF9MQVRDSF9TRVQpCisJZWxzZSBpZiAoZXZlbnQt PmV2ZW50cyA9PSBXTF9JTlRFUlJVUFQpCiAJewotCQkvKiBXZSBkZXRlY3QgbGF0Y2ggd2Fr ZXVwIHVzaW5nIGEgc2lnbmFsIGV2ZW50LiAqLwotCQlXYWl0RXZlbnRBZGp1c3RLcXVldWVB ZGRMYXRjaCgma19ldltjb3VudCsrXSwgZXZlbnQpOworCQkvKiBXZSBkZXRlY3QgaW50ZXJy dXB0IHdha2V1cCB1c2luZyBhIHNpZ25hbCBldmVudC4gKi8KKwkJV2FpdEV2ZW50QWRqdXN0 S3F1ZXVlQWRkSW50ZXJydXB0V2FrZXVwKCZrX2V2W2NvdW50KytdLCBldmVudCk7CiAJfQog CWVsc2UKIAl7CkBAIC05ODUsMTAgKzk4NCwxMyBAQCBXYWl0RXZlbnRBZGp1c3RXaW4zMihX YWl0RXZlbnRTZXQgKnNldCwgV2FpdEV2ZW50ICpldmVudCkKIHsKIAlIQU5ETEUJICAgKmhh bmRsZSA9ICZzZXQtPmhhbmRsZXNbZXZlbnQtPnBvcyArIDFdOwogCi0JaWYgKGV2ZW50LT5l dmVudHMgPT0gV0xfTEFUQ0hfU0VUKQorCWlmIChldmVudC0+ZXZlbnRzID09IFdMX0lOVEVS UlVQVCkKIAl7Ci0JCUFzc2VydChzZXQtPmxhdGNoICE9IE5VTEwpOwotCQkqaGFuZGxlID0g c2V0LT5sYXRjaC0+ZXZlbnQ7CisJCS8qCisJCSAqIFdlIHJlZ2lzdGVyIHRoZSBldmVudCBl dmVuIGlmIGludGVycnVwdF9tYXNrIGlzIHplcm8uIFdlIG1pZ2h0IGdldAorCQkgKiBzb21l IHNwdXJpb3VzIHdha2V1cHMsIGJ1dCB0aGF0J3MgT0sKKwkJICovCisJCSpoYW5kbGUgPSBN eVByb2MgPyBNeVByb2MtPmludGVycnVwdFdha2V1cEV2ZW50IDogTG9jYWxJbnRlcnJ1cHRX YWtldXBFdmVudDsKIAl9CiAJZWxzZSBpZiAoZXZlbnQtPmV2ZW50cyA9PSBXTF9QT1NUTUFT VEVSX0RFQVRIKQogCXsKQEAgLTEwNDQsNiArMTA0Niw3IEBAIFdhaXRFdmVudFNldFdhaXQo V2FpdEV2ZW50U2V0ICpzZXQsIGxvbmcgdGltZW91dCwKIAlpbnN0cl90aW1lCXN0YXJ0X3Rp bWU7CiAJaW5zdHJfdGltZQljdXJfdGltZTsKIAlsb25nCQljdXJfdGltZW91dCA9IC0xOwor CWJvb2wJCXNsZWVwaW5nX2ZsYWdfYXJtZWQgPSBmYWxzZTsKIAogCUFzc2VydChuZXZlbnRz ID4gMCk7CiAKQEAgLTEwNjUsMTAwICsxMDY4LDExNyBAQCBXYWl0RXZlbnRTZXRXYWl0KFdh aXRFdmVudFNldCAqc2V0LCBsb25nIHRpbWVvdXQsCiAjaWZuZGVmIFdJTjMyCiAJd2FpdGlu ZyA9IHRydWU7CiAjZWxzZQotCS8qIEVuc3VyZSB0aGF0IHNpZ25hbHMgYXJlIHNlcnZpY2Vk IGV2ZW4gaWYgbGF0Y2ggaXMgYWxyZWFkeSBzZXQgKi8KKwkvKiBFbnN1cmUgdGhhdCBzaWdu YWxzIGFyZSBzZXJ2aWNlZCBldmVuIGlmIGludGVycnVwdCBpcyBhbHJlYWR5IHBlbmRpbmcg Ki8KIAlwZ3dpbjMyX2Rpc3BhdGNoX3F1ZXVlZF9zaWduYWxzKCk7CiAjZW5kaWYKLQl3aGls ZSAocmV0dXJuZWRfZXZlbnRzID09IDApCisKKwkvKgorCSAqIEF0b21pY2FsbHkgY2hlY2sg aWYgdGhlIGludGVycnVwdCBpcyBhbHJlYWR5IHBlbmRpbmcgYW5kIGFkdmVydGlzZSB0aGF0 CisJICogd2UgYXJlIGFib3V0IHRvIHN0YXJ0IHNsZWVwaW5nLiBJZiBpdCB3YXMgYWxyZWFk eSBwZW5kaW5nLCBhdm9pZAorCSAqIGJsb2NraW5nIGFsdG9nZXRoZXIuCisJICoKKwkgKiBJ ZiBzb21lb25lIHNldHMgdGhlIGludGVycnVwdCBmbGFnIGJldHdlZW4gdGhpcyBhbmQgdGhl CisJICogV2FpdEV2ZW50U2V0V2FpdEJsb2NrKCkgYmVsb3csIHRoZSBzZXR0ZXIgd2lsbCB3 cml0ZSBhIGJ5dGUgdG8gdGhlIHBpcGUKKwkgKiAob3Igc2lnbmFsIHVzIGFuZCB0aGUgc2ln bmFsIGhhbmRsZXIgd2lsbCBkbyB0aGF0KSwgYW5kIHRoZSByZWFkaW5lc3MKKwkgKiByb3V0 aW5lIHdpbGwgcmV0dXJuIGltbWVkaWF0ZWx5LgorCSAqLworCWlmIChzZXQtPmludGVycnVw dF9tYXNrICE9IDApCiAJewotCQlpbnQJCQlyYzsKKwkJdWludDMyCQlvbGRfbWFzazsKKwkJ Ym9vbAkJYWxyZWFkeV9wZW5kaW5nID0gZmFsc2U7CiAKIAkJLyoKLQkJICogQ2hlY2sgaWYg dGhlIGxhdGNoIGlzIHNldCBhbHJlYWR5IGZpcnN0LiAgSWYgc28sIHdlIGVpdGhlciBleGl0 Ci0JCSAqIGltbWVkaWF0ZWx5IG9yIGFzayB0aGUga2VybmVsIGZvciBmdXJ0aGVyIGV2ZW50 cyBhdmFpbGFibGUgcmlnaHQKLQkJICogbm93IHdpdGhvdXQgd2FpdGluZywgZGVwZW5kaW5n IG9uIGhvdyBtYW55IGV2ZW50cyB0aGUgY2FsbGVyIHdhbnRzLgotCQkgKgotCQkgKiBJZiBz b21lb25lIHNldHMgdGhlIGxhdGNoIGJldHdlZW4gdGhpcyBhbmQgdGhlCi0JCSAqIFdhaXRF dmVudFNldFdhaXRCbG9jaygpIGJlbG93LCB0aGUgc2V0dGVyIHdpbGwgd3JpdGUgYSBieXRl IHRvIHRoZQotCQkgKiBwaXBlIChvciBzaWduYWwgdXMgYW5kIHRoZSBzaWduYWwgaGFuZGxl ciB3aWxsIGRvIHRoYXQpLCBhbmQgdGhlCi0JCSAqIHJlYWRpbmVzcyByb3V0aW5lIHdpbGwg cmV0dXJuIGltbWVkaWF0ZWx5LgotCQkgKgotCQkgKiBPbiB1bml4LCBJZiB0aGVyZSdzIGEg cGVuZGluZyBieXRlIGluIHRoZSBzZWxmIHBpcGUsIHdlJ2xsIG5vdGljZQotCQkgKiB3aGVu ZXZlciBibG9ja2luZy4gT25seSBjbGVhcmluZyB0aGUgcGlwZSBpbiB0aGF0IGNhc2UgYXZv aWRzCi0JCSAqIGhhdmluZyB0byBkcmFpbiBpdCBldmVyeSB0aW1lIFdhaXRMYXRjaE9yU29j a2V0KCkgaXMgdXNlZC4gU2hvdWxkCi0JCSAqIHRoZSBwaXBlLWJ1ZmZlciBmaWxsIHVwIHdl J3JlIHN0aWxsIG9rLCBiZWNhdXNlIHRoZSBwaXBlIGlzIGluCi0JCSAqIG5vbmJsb2NraW5n IG1vZGUuIEl0J3MgdW5saWtlbHkgZm9yIHRoYXQgdG8gaGFwcGVuLCBiZWNhdXNlIHRoZQot CQkgKiBzZWxmIHBpcGUgaXNuJ3QgZmlsbGVkIHVubGVzcyB3ZSdyZSBibG9ja2luZyAod2Fp dGluZyA9IHRydWUpLCBvcgotCQkgKiBmcm9tIGluc2lkZSBhIHNpZ25hbCBoYW5kbGVyIGlu IGxhdGNoX3NpZ3VyZ19oYW5kbGVyKCkuCi0JCSAqCi0JCSAqIE9uIHdpbmRvd3MsIHdlJ2xs IGFsc28gbm90aWNlIGlmIHRoZXJlJ3MgYSBwZW5kaW5nIGV2ZW50IGZvciB0aGUKLQkJICog bGF0Y2ggd2hlbiBibG9ja2luZywgYnV0IHRoZXJlJ3Mgbm8gZGFuZ2VyIG9mIGFueXRoaW5n IGZpbGxpbmcgdXAsCi0JCSAqIGFzICJTZXR0aW5nIGFuIGV2ZW50IHRoYXQgaXMgYWxyZWFk eSBzZXQgaGFzIG5vIGVmZmVjdC4iLgotCQkgKgotCQkgKiBOb3RlOiB3ZSBhc3N1bWUgdGhh dCB0aGUga2VybmVsIGNhbGxzIGludm9sdmVkIGluIGxhdGNoIG1hbmFnZW1lbnQKLQkJICog d2lsbCBwcm92aWRlIGFkZXF1YXRlIHN5bmNocm9uaXphdGlvbiBvbiBtYWNoaW5lcyB3aXRo IHdlYWsgbWVtb3J5Ci0JCSAqIG9yZGVyaW5nLCBzbyB0aGF0IHdlIGNhbm5vdCBtaXNzIHNl ZWluZyBpc19zZXQgaWYgYSBub3RpZmljYXRpb24KLQkJICogaGFzIGFscmVhZHkgYmVlbiBx dWV1ZWQuCisJCSAqIFBlcmZvcm0gYSBwbGFpbiBhdG9taWMgcmVhZCBmaXJzdCBhcyBhIGZh c3QgcGF0aCBmb3IgdGhlIGNhc2UgdGhhdAorCQkgKiBhbiBpbnRlcnJ1cHQgaXMgYWxyZWFk eSBwZW5kaW5nLgogCQkgKi8KLQkJaWYgKHNldC0+bGF0Y2ggJiYgIXNldC0+bGF0Y2gtPmlz X3NldCkKKwkJb2xkX21hc2sgPSBwZ19hdG9taWNfcmVhZF91MzIoTXlQZW5kaW5nSW50ZXJy dXB0cyk7CisJCWFscmVhZHlfcGVuZGluZyA9ICgob2xkX21hc2sgJiBzZXQtPmludGVycnVw dF9tYXNrKSAhPSAwKTsKKworCQlpZiAoIWFscmVhZHlfcGVuZGluZykKIAkJewotCQkJLyog YWJvdXQgdG8gc2xlZXAgb24gYSBsYXRjaCAqLwotCQkJc2V0LT5sYXRjaC0+bWF5YmVfc2xl ZXBpbmcgPSB0cnVlOwotCQkJcGdfbWVtb3J5X2JhcnJpZXIoKTsKLQkJCS8qIGFuZCByZWNo ZWNrICovCisJCQkvKgorCQkJICogQXRvbWljYWxseSBzZXQgdGhlIFNMRUVQSU5HX09OX0lO VEVSUlVQVFMgYml0IGFuZCByZS1jaGVjayBpZgorCQkJICogYW4gaW50ZXJydXB0IGlzIGFs cmVhZHkgcGVuZGluZy4gVGhlIGF0b21pYyBvcCBwcm92aWRlcworCQkJICogc3luY2hyb25p emF0aW9uIHNvIHRoYXQgaWYgYW4gaW50ZXJydXB0IGJpdCBpcyBzZXQgYWZ0ZXIgdGhpcywK KwkJCSAqIHRoZSBzZXR0ZXIgd2lsbCB3YWtlIHVzIHVwLgorCQkJICovCisJCQlvbGRfbWFz ayA9IHBnX2F0b21pY19mZXRjaF9vcl91MzIoTXlQZW5kaW5nSW50ZXJydXB0cywgU0xFRVBJ TkdfT05fSU5URVJSVVBUUyk7CisJCQlhbHJlYWR5X3BlbmRpbmcgPSAoKG9sZF9tYXNrICYg c2V0LT5pbnRlcnJ1cHRfbWFzaykgIT0gMCk7CisKKwkJCS8qIHJlbWVtYmVyIHRvIGNsZWFy IHRoZSBTTEVFUElOR19PTl9JTlRFUlJVUFRTIGZsYWcgbGF0ZXIgKi8KKwkJCXNsZWVwaW5n X2ZsYWdfYXJtZWQgPSB0cnVlOwogCQl9CiAKLQkJaWYgKHNldC0+bGF0Y2ggJiYgc2V0LT5s YXRjaC0+aXNfc2V0KQorCQlpZiAoYWxyZWFkeV9wZW5kaW5nKQogCQl7CiAJCQlvY2N1cnJl ZF9ldmVudHMtPmZkID0gUEdJTlZBTElEX1NPQ0tFVDsKLQkJCW9jY3VycmVkX2V2ZW50cy0+ cG9zID0gc2V0LT5sYXRjaF9wb3M7CisJCQlvY2N1cnJlZF9ldmVudHMtPnBvcyA9IHNldC0+ aW50ZXJydXB0X3BvczsKIAkJCW9jY3VycmVkX2V2ZW50cy0+dXNlcl9kYXRhID0KLQkJCQlz ZXQtPmV2ZW50c1tzZXQtPmxhdGNoX3Bvc10udXNlcl9kYXRhOwotCQkJb2NjdXJyZWRfZXZl bnRzLT5ldmVudHMgPSBXTF9MQVRDSF9TRVQ7CisJCQkJc2V0LT5ldmVudHNbc2V0LT5pbnRl cnJ1cHRfcG9zXS51c2VyX2RhdGE7CisJCQlvY2N1cnJlZF9ldmVudHMtPmV2ZW50cyA9IFdM X0lOVEVSUlVQVDsKIAkJCW9jY3VycmVkX2V2ZW50cysrOwogCQkJcmV0dXJuZWRfZXZlbnRz Kys7CiAKLQkJCS8qIGNvdWxkIGhhdmUgYmVlbiBzZXQgYWJvdmUgKi8KLQkJCXNldC0+bGF0 Y2gtPm1heWJlX3NsZWVwaW5nID0gZmFsc2U7Ci0KLQkJCWlmIChyZXR1cm5lZF9ldmVudHMg PT0gbmV2ZW50cykKLQkJCQlicmVhazsJCQkvKiBvdXRwdXQgYnVmZmVyIGZ1bGwgYWxyZWFk eSAqLwotCiAJCQkvKgogCQkJICogRXZlbiB0aG91Z2ggd2UgYWxyZWFkeSBoYXZlIGFuIGV2 ZW50LCB3ZSdsbCBwb2xsIGp1c3Qgb25jZSB3aXRoCi0JCQkgKiB6ZXJvIHRpbWVvdXQgdG8g c2VlIHdoYXQgbm9uLWxhdGNoIGV2ZW50cyB3ZSBjYW4gZml0IGludG8gdGhlCi0JCQkgKiBv dXRwdXQgYnVmZmVyIGF0IHRoZSBzYW1lIHRpbWUuCisJCQkgKiB6ZXJvIHRpbWVvdXQgdG8g c2VlIHdoYXQgbm9uLWludGVycnVwdCBldmVudHMgd2UgY2FuIGZpdCBpbnRvCisJCQkgKiB0 aGUgb3V0cHV0IGJ1ZmZlciBhdCB0aGUgc2FtZSB0aW1lLgogCQkJICovCiAJCQljdXJfdGlt ZW91dCA9IDA7CiAJCQl0aW1lb3V0ID0gMDsKIAkJfQorCX0KIAorCWlmIChuZXZlbnRzID4g cmV0dXJuZWRfZXZlbnRzKQorCXsKIAkJLyoKIAkJICogV2FpdCBmb3IgZXZlbnRzIHVzaW5n IHRoZSByZWFkaW5lc3MgcHJpbWl0aXZlIGNob3NlbiBhdCB0aGUgdG9wIG9mCiAJCSAqIHRo aXMgZmlsZS4gSWYgLTEgaXMgcmV0dXJuZWQsIGEgdGltZW91dCBoYXMgb2NjdXJyZWQsIGlm IDAgd2UgaGF2ZQogCQkgKiB0byByZXRyeSwgZXZlcnl0aGluZyA+PSAxIGlzIHRoZSBudW1i ZXIgb2YgcmV0dXJuZWQgZXZlbnRzLgorCQkgKgorCQkgKiBPbiB1bml4LCBJZiB0aGVyZSdz IGEgcGVuZGluZyBieXRlIGluIHRoZSBzZWxmIHBpcGUsIHdlJ2xsIG5vdGljZQorCQkgKiB3 aGVuZXZlciBibG9ja2luZy4gT25seSBjbGVhcmluZyB0aGUgcGlwZSBpbiB0aGF0IGNhc2Ug YXZvaWRzCisJCSAqIGhhdmluZyB0byBkcmFpbiBpdCBldmVyeSB0aW1lIFdhaXRJbnRlcnJ1 cHRPclNvY2tldCgpIGlzIHVzZWQuCisJCSAqIFNob3VsZCB0aGUgcGlwZS1idWZmZXIgZmls bCB1cCB3ZSdyZSBzdGlsbCBvaywgYmVjYXVzZSB0aGUgcGlwZSBpcworCQkgKiBpbiBub25i bG9ja2luZyBtb2RlLiBJdCdzIHVubGlrZWx5IGZvciB0aGF0IHRvIGhhcHBlbiwgYmVjYXVz ZSB0aGUKKwkJICogc2VsZiBwaXBlIGlzbid0IGZpbGxlZCB1bmxlc3Mgd2UncmUgYmxvY2tp bmcgKHdhaXRpbmcgPSB0cnVlKSwgb3IKKwkJICogZnJvbSBpbnNpZGUgYSBzaWduYWwgaGFu ZGxlciBpbiBpbnRlcnJ1cHRfc2lndXJnX2hhbmRsZXIoKS4KKwkJICoKKwkJICogT24gd2lu ZG93cywgd2UnbGwgYWxzbyBub3RpY2UgaWYgdGhlcmUncyBhIHBlbmRpbmcgZXZlbnQgZm9y IHRoZQorCQkgKiBpbnRlcnJ1cHQgd2hlbiBibG9ja2luZywgYnV0IHRoZXJlJ3Mgbm8gZGFu Z2VyIG9mIGFueXRoaW5nIGZpbGxpbmcKKwkJICogdXAsIGFzICJTZXR0aW5nIGFuIGV2ZW50 IHRoYXQgaXMgYWxyZWFkeSBzZXQgaGFzIG5vIGVmZmVjdC4iLgogCQkgKi8KLQkJcmMgPSBX YWl0RXZlbnRTZXRXYWl0QmxvY2soc2V0LCBjdXJfdGltZW91dCwKLQkJCQkJCQkJICAgb2Nj dXJyZWRfZXZlbnRzLCBuZXZlbnRzIC0gcmV0dXJuZWRfZXZlbnRzKTsKKwkJZm9yICg7OykK KwkJeworCQkJaW50CQkJcmM7CiAKLQkJaWYgKHNldC0+bGF0Y2ggJiYKLQkJCXNldC0+bGF0 Y2gtPm1heWJlX3NsZWVwaW5nKQotCQkJc2V0LT5sYXRjaC0+bWF5YmVfc2xlZXBpbmcgPSBm YWxzZTsKKwkJCXJjID0gV2FpdEV2ZW50U2V0V2FpdEJsb2NrKHNldCwgY3VyX3RpbWVvdXQs CisJCQkJCQkJCQkgICBvY2N1cnJlZF9ldmVudHMsIG5ldmVudHMgLSByZXR1cm5lZF9ldmVu dHMpOwogCi0JCWlmIChyYyA9PSAtMSkKLQkJCWJyZWFrOwkJCQkvKiB0aW1lb3V0IG9jY3Vy cmVkICovCi0JCWVsc2UKLQkJCXJldHVybmVkX2V2ZW50cyArPSByYzsKKwkJCWlmIChyYyA9 PSAtMSkKKwkJCQlicmVhazsJCQkvKiB0aW1lb3V0IG9jY3VycmVkICovCisJCQllbHNlCisJ CQkJcmV0dXJuZWRfZXZlbnRzICs9IHJjOwogCi0JCS8qIElmIHdlJ3JlIG5vdCBkb25lLCB1 cGRhdGUgY3VyX3RpbWVvdXQgZm9yIG5leHQgaXRlcmF0aW9uICovCi0JCWlmIChyZXR1cm5l ZF9ldmVudHMgPT0gMCAmJiB0aW1lb3V0ID49IDApCi0JCXsKLQkJCUlOU1RSX1RJTUVfU0VU X0NVUlJFTlQoY3VyX3RpbWUpOwotCQkJSU5TVFJfVElNRV9TVUJUUkFDVChjdXJfdGltZSwg c3RhcnRfdGltZSk7Ci0JCQljdXJfdGltZW91dCA9IHRpbWVvdXQgLSAobG9uZykgSU5TVFJf VElNRV9HRVRfTUlMTElTRUMoY3VyX3RpbWUpOwotCQkJaWYgKGN1cl90aW1lb3V0IDw9IDAp CisJCQlpZiAocmV0dXJuZWRfZXZlbnRzID4gMCkKIAkJCQlicmVhazsKKworCQkJLyogSWYg d2UncmUgbm90IGRvbmUsIHVwZGF0ZSBjdXJfdGltZW91dCBmb3IgbmV4dCBpdGVyYXRpb24g Ki8KKwkJCWlmICh0aW1lb3V0ID49IDApCisJCQl7CisJCQkJSU5TVFJfVElNRV9TRVRfQ1VS UkVOVChjdXJfdGltZSk7CisJCQkJSU5TVFJfVElNRV9TVUJUUkFDVChjdXJfdGltZSwgc3Rh cnRfdGltZSk7CisJCQkJY3VyX3RpbWVvdXQgPSB0aW1lb3V0IC0gKGxvbmcpIElOU1RSX1RJ TUVfR0VUX01JTExJU0VDKGN1cl90aW1lKTsKKwkJCQlpZiAoY3VyX3RpbWVvdXQgPD0gMCkK KwkJCQkJYnJlYWs7CisJCQl9CiAJCX0KIAl9CisKKwkvKiBJZiB3ZSBzZXQgdGhlIFNMRUVQ SU5HX09OX0lOVEVSUlVQVFMgZmxhZywgcmVzZXQgaXQgYWdhaW4gKi8KKwlpZiAoc2xlZXBp bmdfZmxhZ19hcm1lZCkKKwkJcGdfYXRvbWljX2ZldGNoX2FuZF91MzIoTXlQZW5kaW5nSW50 ZXJydXB0cywgfigodWludDMyKSBTTEVFUElOR19PTl9JTlRFUlJVUFRTKSk7CisKICNpZm5k ZWYgV0lOMzIKIAl3YWl0aW5nID0gZmFsc2U7CiAjZW5kaWYKQEAgLTEyMjksMTYgKzEyNDks MTYgQEAgV2FpdEV2ZW50U2V0V2FpdEJsb2NrKFdhaXRFdmVudFNldCAqc2V0LCBpbnQgY3Vy X3RpbWVvdXQsCiAJCW9jY3VycmVkX2V2ZW50cy0+dXNlcl9kYXRhID0gY3VyX2V2ZW50LT51 c2VyX2RhdGE7CiAJCW9jY3VycmVkX2V2ZW50cy0+ZXZlbnRzID0gMDsKIAotCQlpZiAoY3Vy X2V2ZW50LT5ldmVudHMgPT0gV0xfTEFUQ0hfU0VUICYmCisJCWlmIChjdXJfZXZlbnQtPmV2 ZW50cyA9PSBXTF9JTlRFUlJVUFQgJiYKIAkJCWN1cl9lcG9sbF9ldmVudC0+ZXZlbnRzICYg KEVQT0xMSU4gfCBFUE9MTEVSUiB8IEVQT0xMSFVQKSkKIAkJewogCQkJLyogRHJhaW4gdGhl IHNpZ25hbGZkLiAqLwogCQkJZHJhaW4oKTsKIAotCQkJaWYgKHNldC0+bGF0Y2ggJiYgc2V0 LT5sYXRjaC0+bWF5YmVfc2xlZXBpbmcgJiYgc2V0LT5sYXRjaC0+aXNfc2V0KQorCQkJaWYg KHNldC0+aW50ZXJydXB0X21hc2sgIT0gMCAmJiAocGdfYXRvbWljX3JlYWRfdTMyKE15UGVu ZGluZ0ludGVycnVwdHMpICYgc2V0LT5pbnRlcnJ1cHRfbWFzaykgIT0gMCkKIAkJCXsKIAkJ CQlvY2N1cnJlZF9ldmVudHMtPmZkID0gUEdJTlZBTElEX1NPQ0tFVDsKLQkJCQlvY2N1cnJl ZF9ldmVudHMtPmV2ZW50cyA9IFdMX0xBVENIX1NFVDsKKwkJCQlvY2N1cnJlZF9ldmVudHMt PmV2ZW50cyA9IFdMX0lOVEVSUlVQVDsKIAkJCQlvY2N1cnJlZF9ldmVudHMrKzsKIAkJCQly ZXR1cm5lZF9ldmVudHMrKzsKIAkJCX0KQEAgLTEzOTEsMTMgKzE0MTEsMTMgQEAgV2FpdEV2 ZW50U2V0V2FpdEJsb2NrKFdhaXRFdmVudFNldCAqc2V0LCBpbnQgY3VyX3RpbWVvdXQsCiAJ CW9jY3VycmVkX2V2ZW50cy0+dXNlcl9kYXRhID0gY3VyX2V2ZW50LT51c2VyX2RhdGE7CiAJ CW9jY3VycmVkX2V2ZW50cy0+ZXZlbnRzID0gMDsKIAotCQlpZiAoY3VyX2V2ZW50LT5ldmVu dHMgPT0gV0xfTEFUQ0hfU0VUICYmCisJCWlmIChjdXJfZXZlbnQtPmV2ZW50cyA9PSBXTF9J TlRFUlJVUFQgJiYKIAkJCWN1cl9rcXVldWVfZXZlbnQtPmZpbHRlciA9PSBFVkZJTFRfU0lH TkFMKQogCQl7Ci0JCQlpZiAoc2V0LT5sYXRjaCAmJiBzZXQtPmxhdGNoLT5tYXliZV9zbGVl cGluZyAmJiBzZXQtPmxhdGNoLT5pc19zZXQpCisJCQlpZiAoc2V0LT5pbnRlcnJ1cHRfbWFz ayAhPSAwICYmIChwZ19hdG9taWNfcmVhZF91MzIoTXlQZW5kaW5nSW50ZXJydXB0cykgJiBz ZXQtPmludGVycnVwdF9tYXNrKSAhPSAwKQogCQkJewogCQkJCW9jY3VycmVkX2V2ZW50cy0+ ZmQgPSBQR0lOVkFMSURfU09DS0VUOwotCQkJCW9jY3VycmVkX2V2ZW50cy0+ZXZlbnRzID0g V0xfTEFUQ0hfU0VUOworCQkJCW9jY3VycmVkX2V2ZW50cy0+ZXZlbnRzID0gV0xfSU5URVJS VVBUOwogCQkJCW9jY3VycmVkX2V2ZW50cysrOwogCQkJCXJldHVybmVkX2V2ZW50cysrOwog CQkJfQpAQCAtMTUxMywxNiArMTUzMywxNiBAQCBXYWl0RXZlbnRTZXRXYWl0QmxvY2soV2Fp dEV2ZW50U2V0ICpzZXQsIGludCBjdXJfdGltZW91dCwKIAkJb2NjdXJyZWRfZXZlbnRzLT51 c2VyX2RhdGEgPSBjdXJfZXZlbnQtPnVzZXJfZGF0YTsKIAkJb2NjdXJyZWRfZXZlbnRzLT5l dmVudHMgPSAwOwogCi0JCWlmIChjdXJfZXZlbnQtPmV2ZW50cyA9PSBXTF9MQVRDSF9TRVQg JiYKKwkJaWYgKGN1cl9ldmVudC0+ZXZlbnRzID09IFdMX0lOVEVSUlVQVCAmJgogCQkJKGN1 cl9wb2xsZmQtPnJldmVudHMgJiAoUE9MTElOIHwgUE9MTEhVUCB8IFBPTExFUlIgfCBQT0xM TlZBTCkpKQogCQl7CiAJCQkvKiBUaGVyZSdzIGRhdGEgaW4gdGhlIHNlbGYtcGlwZSwgY2xl YXIgaXQuICovCiAJCQlkcmFpbigpOwogCi0JCQlpZiAoc2V0LT5sYXRjaCAmJiBzZXQtPmxh dGNoLT5tYXliZV9zbGVlcGluZyAmJiBzZXQtPmxhdGNoLT5pc19zZXQpCisJCQlpZiAoc2V0 LT5pbnRlcnJ1cHRfbWFzayAhPSAwICYmIChwZ19hdG9taWNfcmVhZF91MzIoTXlQZW5kaW5n SW50ZXJydXB0cykgJiBzZXQtPmludGVycnVwdF9tYXNrKSAhPSAwKQogCQkJewogCQkJCW9j Y3VycmVkX2V2ZW50cy0+ZmQgPSBQR0lOVkFMSURfU09DS0VUOwotCQkJCW9jY3VycmVkX2V2 ZW50cy0+ZXZlbnRzID0gV0xfTEFUQ0hfU0VUOworCQkJCW9jY3VycmVkX2V2ZW50cy0+ZXZl bnRzID0gV0xfSU5URVJSVVBUOwogCQkJCW9jY3VycmVkX2V2ZW50cysrOwogCQkJCXJldHVy bmVkX2V2ZW50cysrOwogCQkJfQpAQCAtMTYyMSw2ICsxNjQxLDE1IEBAIFdhaXRFdmVudFNl dFdhaXRCbG9jayhXYWl0RXZlbnRTZXQgKnNldCwgaW50IGN1cl90aW1lb3V0LAogCQkJY3Vy X2V2ZW50LT5yZXNldCA9IGZhbHNlOwogCQl9CiAKKwkJLyoKKwkJICogV2UgbmVlZCB0byB1 c2UgZGlmZmVyZW50IGV2ZW50IG9iamVjdCBkZXBlbmRpbmcgb24gd2hldGhlciAibG9jYWwi CisJCSAqIG9yICJzaGFyZWQgbWVtb3J5IiBpbnRlcnJ1cHRzIGFyZSBpbiB1c2UuIFRoZXJl J3Mgbm8gZWFzeSB3YXkgdG8KKwkJICogYWRqdXN0IGFsbCBleGlzdGluZyBXYWl0RXZlbnRT ZXQgd2hlbiB5b3Ugc3dpdGNoIGZyb20gbG9jYWwgdG8KKwkJICogc2hhcmVkIG9yIGJhY2ss IHNvIHdlIHJlZnJlc2ggaXQgb24gZXZlcnkgY2FsbC4KKwkJICovCisJCWlmIChjdXJfZXZl bnQtPmV2ZW50cyAmIFdMX0lOVEVSUlVQVCkKKwkJCVdhaXRFdmVudEFkanVzdFdpbjMyKHNl dCwgY3VyX2V2ZW50KTsKKwogCQkvKgogCQkgKiBXZSBhc3NvY2lhdGUgdGhlIHNvY2tldCB3 aXRoIGEgbmV3IGV2ZW50IGhhbmRsZSBmb3IgZWFjaAogCQkgKiBXYWl0RXZlbnRTZXQuICBG RF9DTE9TRSBpcyBvbmx5IGdlbmVyYXRlZCBvbmNlIGlmIHRoZSBvdGhlciBlbmQKQEAgLTE3 MjYsMTkgKzE3NTUsMTUgQEAgV2FpdEV2ZW50U2V0V2FpdEJsb2NrKFdhaXRFdmVudFNldCAq c2V0LCBpbnQgY3VyX3RpbWVvdXQsCiAJCW9jY3VycmVkX2V2ZW50cy0+dXNlcl9kYXRhID0g Y3VyX2V2ZW50LT51c2VyX2RhdGE7CiAJCW9jY3VycmVkX2V2ZW50cy0+ZXZlbnRzID0gMDsK IAotCQlpZiAoY3VyX2V2ZW50LT5ldmVudHMgPT0gV0xfTEFUQ0hfU0VUKQorCQlpZiAoY3Vy X2V2ZW50LT5ldmVudHMgPT0gV0xfSU5URVJSVVBUKQogCQl7Ci0JCQkvKgotCQkJICogV2Ug Y2Fubm90IHVzZSBzZXQtPmxhdGNoLT5ldmVudCB0byByZXNldCB0aGUgZmlyZWQgZXZlbnQg aWYgd2UKLQkJCSAqIGFyZW4ndCB3YWl0aW5nIG9uIHRoaXMgbGF0Y2ggbm93LgotCQkJICov CiAJCQlpZiAoIVJlc2V0RXZlbnQoc2V0LT5oYW5kbGVzW2N1cl9ldmVudC0+cG9zICsgMV0p KQogCQkJCWVsb2coRVJST1IsICJSZXNldEV2ZW50IGZhaWxlZDogZXJyb3IgY29kZSAlbHUi LCBHZXRMYXN0RXJyb3IoKSk7CiAKLQkJCWlmIChzZXQtPmxhdGNoICYmIHNldC0+bGF0Y2gt Pm1heWJlX3NsZWVwaW5nICYmIHNldC0+bGF0Y2gtPmlzX3NldCkKKwkJCWlmIChzZXQtPmlu dGVycnVwdF9tYXNrICE9IDAgJiYgKHBnX2F0b21pY19yZWFkX3UzMihNeVBlbmRpbmdJbnRl cnJ1cHRzKSAmIHNldC0+aW50ZXJydXB0X21hc2spICE9IDApCiAJCQl7CiAJCQkJb2NjdXJy ZWRfZXZlbnRzLT5mZCA9IFBHSU5WQUxJRF9TT0NLRVQ7Ci0JCQkJb2NjdXJyZWRfZXZlbnRz LT5ldmVudHMgPSBXTF9MQVRDSF9TRVQ7CisJCQkJb2NjdXJyZWRfZXZlbnRzLT5ldmVudHMg PSBXTF9JTlRFUlJVUFQ7CiAJCQkJb2NjdXJyZWRfZXZlbnRzKys7CiAJCQkJcmV0dXJuZWRf ZXZlbnRzKys7CiAJCQl9CkBAIC0xNzgzLDcgKzE4MDgsNyBAQCBXYWl0RXZlbnRTZXRXYWl0 QmxvY2soV2FpdEV2ZW50U2V0ICpzZXQsIGludCBjdXJfdGltZW91dCwKIAogCQkJCS8qLS0t LS0tCiAJCQkJICogV2FpdEZvck11bHRpcGxlT2JqZWN0cyBkb2Vzbid0IGd1YXJhbnRlZSB0 aGF0IGEgcmVhZCBldmVudAotCQkJCSAqIHdpbGwgYmUgcmV0dXJuZWQgaWYgdGhlIGxhdGNo IGlzIHNldCBhdCB0aGUgc2FtZSB0aW1lLiAgRXZlbgorCQkJCSAqIHdpbGwgYmUgcmV0dXJu ZWQgaWYgdGhlIGludGVycnVwdCBpcyBzZXQgYXQgdGhlIHNhbWUgdGltZS4gIEV2ZW4KIAkJ CQkgKiBpZiBpdCBkaWQsIHRoZSBjYWxsZXIgbWlnaHQgZHJvcCB0aGF0IGV2ZW50IGV4cGVj dGluZyBpdCB0bwogCQkJCSAqIHJlb2NjdXIgb24gbmV4dCBjYWxsLiAgU28sIHdlIG11c3Qg Zm9yY2UgdGhlIGV2ZW50IHRvIGJlCiAJCQkJICogcmVzZXQgaWYgdGhpcyBXYWl0RXZlbnRT ZXQgaXMgdXNlZCBhZ2FpbiBpbiBvcmRlciB0byBhdm9pZApAQCAtMTg4OSwxOCArMTkxNCwx NyBAQCBHZXROdW1SZWdpc3RlcmVkV2FpdEV2ZW50cyhXYWl0RXZlbnRTZXQgKnNldCkKICNp ZiBkZWZpbmVkKFdBSVRfVVNFX1NFTEZfUElQRSkKIAogLyoKLSAqIFNldExhdGNoIHVzZXMg U0lHVVJHIHRvIHdha2UgdXAgdGhlIHByb2Nlc3Mgd2FpdGluZyBvbiB0aGUgbGF0Y2guCi0g KgotICogV2FrZSB1cCBXYWl0TGF0Y2gsIGlmIHdlJ3JlIHdhaXRpbmcuCisgKiBXYWtldXBP dGhlclByb2MgYW5kIFdha3VwTXlQcm9jIHVzZSBTSUdVUkcgdG8gd2FrZSB1cCB0aGUgcHJv Y2VzcyB3YWl0aW5nCisgKiBmb3IgYW4gaW50ZXJydXB0CiAgKi8KIHN0YXRpYyB2b2lkCi1s YXRjaF9zaWd1cmdfaGFuZGxlcihTSUdOQUxfQVJHUykKK2ludGVycnVwdF9zaWd1cmdfaGFu ZGxlcihTSUdOQUxfQVJHUykKIHsKIAlpZiAod2FpdGluZykKIAkJc2VuZFNlbGZQaXBlQnl0 ZSgpOwogfQogCi0vKiBTZW5kIG9uZSBieXRlIHRvIHRoZSBzZWxmLXBpcGUsIHRvIHdha2Ug dXAgV2FpdExhdGNoICovCisvKiBTZW5kIG9uZSBieXRlIHRvIHRoZSBzZWxmLXBpcGUsIHRv IHdha2UgdXAgV2FpdEludGVycnVwdCAqLwogc3RhdGljIHZvaWQKIHNlbmRTZWxmUGlwZUJ5 dGUodm9pZCkKIHsKQEAgLTE5MTcsNyArMTk0MSw3IEBAIHJldHJ5OgogCiAJCS8qCiAJCSAq IElmIHRoZSBwaXBlIGlzIGZ1bGwsIHdlIGRvbid0IG5lZWQgdG8gcmV0cnksIHRoZSBkYXRh IHRoYXQncyB0aGVyZQotCQkgKiBhbHJlYWR5IGlzIGVub3VnaCB0byB3YWtlIHVwIFdhaXRM YXRjaC4KKwkJICogYWxyZWFkeSBpcyBlbm91Z2ggdG8gd2FrZSB1cCBXYWl0SW50ZXJydXB0 LgogCQkgKi8KIAkJaWYgKGVycm5vID09IEVBR0FJTiB8fCBlcnJubyA9PSBFV09VTERCTE9D SykKIAkJCXJldHVybjsKQEAgLTIwMDQsNyArMjAyOCw2IEBAIFJlc093bmVyUmVsZWFzZVdh aXRFdmVudFNldChEYXR1bSByZXMpCiAJRnJlZVdhaXRFdmVudFNldChzZXQpOwogfQogCi0j aWZuZGVmIFdJTjMyCiAvKgogICogV2FrZSB1cCBteSBwcm9jZXNzIGlmIGl0J3MgY3VycmVu dGx5IHNsZWVwaW5nIGluIFdhaXRFdmVudFNldFdhaXRCbG9jaygpCiAgKgpAQCAtMjAxNCwx MiArMjAzNywxMSBAQCBSZXNPd25lclJlbGVhc2VXYWl0RXZlbnRTZXQoRGF0dW0gcmVzKQog ICoKICAqIE5COiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGNyaXRpY2FsIHNlY3Rp b25zIGFuZCBzaWduYWwgaGFuZGxlcnMgc28KICAqIHRocm93aW5nIGFuIGVycm9yIGlzIG5v dCBhIGdvb2QgaWRlYS4KLSAqCi0gKiBPbiBXaW5kb3dzLCBMYXRjaCB1c2VzIFNldEV2ZW50 IGRpcmVjdGx5IGFuZCB0aGlzIGlzIG5vdCB1c2VkLgogICovCiB2b2lkCiBXYWtldXBNeVBy b2Modm9pZCkKIHsKKyNpZm5kZWYgV0lOMzIKICNpZiBkZWZpbmVkKFdBSVRfVVNFX1NFTEZf UElQRSkKIAlpZiAod2FpdGluZykKIAkJc2VuZFNlbGZQaXBlQnl0ZSgpOwpAQCAtMjAyNywx MiArMjA0OSwyOCBAQCBXYWtldXBNeVByb2Modm9pZCkKIAlpZiAod2FpdGluZykKIAkJa2ls bChNeVByb2NQaWQsIFNJR1VSRyk7CiAjZW5kaWYKKyNlbHNlCisJU2V0RXZlbnQoTXlQcm9j ID8gTXlQcm9jLT5pbnRlcnJ1cHRXYWtldXBFdmVudCA6IExvY2FsSW50ZXJydXB0V2FrZXVw RXZlbnQpOworI2VuZGlmCiB9CiAKIC8qIFNpbWlsYXIgdG8gV2FrZXVwTXlQcm9jLCBidXQg d2FrZSB1cCBhbm90aGVyIHByb2Nlc3MgKi8KIHZvaWQKLVdha2V1cE90aGVyUHJvYyhpbnQg cGlkKQorV2FrZXVwT3RoZXJQcm9jKFBHUFJPQyAqcHJvYykKIHsKLQlraWxsKHBpZCwgU0lH VVJHKTsKLX0KKwkvKgorCSAqIE5vdGU6IFRoaXMgY2FuIGFsc28gYmUgY2FsbGVkIGZyb20g dGhlIHBvc3RtYXN0ZXIsIHNvIGJlIGNhcmVmdWwgdG8gbm90CisJICogYXNzdW1lIHRoYXQg dGhlIGNvbnRlbnRzIG9mIHNoYXJlZCBtZW1vcnkgYXJlIHZhbGlkLiAgUmVhZGluZyB0aGUg J3BpZCcKKwkgKiAob3IgZXZlbnQgaGFuZGxlIG9uIFdpbmRvd3MpIGlzIHNhZmUgZW5vdWdo LgorCSAqLworI2lmbmRlZiBXSU4zMgorCWtpbGwocHJvYy0+cGlkLCBTSUdVUkcpOworI2Vs c2UKKwlTZXRFdmVudChwcm9jLT5pbnRlcnJ1cHRXYWtldXBFdmVudCk7CisKKwkvKgorCSAq IE5vdGUgdGhhdCB3ZSBzaWxlbnRseSBpZ25vcmUgYW55IGVycm9ycy4gV2UgbWlnaHQgYmUg aW4gYSBzaWduYWwKKwkgKiBoYW5kbGVyIG9yIG90aGVyIGNyaXRpY2FsIHBhdGggd2hlcmUg aXQncyBub3Qgc2FmZSB0byBjYWxsIGVsb2coKS4KKwkgKi8KICNlbmRpZgorfQpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2NvbmRpdGlvbl92YXJpYWJsZS5jIGIv c3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2NvbmRpdGlvbl92YXJpYWJsZS5jCmluZGV4IDFm MTZiM2Y3NDc1Li4wYmE4MzZjZjlmMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFn ZS9sbWdyL2NvbmRpdGlvbl92YXJpYWJsZS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv bG1nci9jb25kaXRpb25fdmFyaWFibGUuYwpAQCAtMjAsNiArMjAsNyBAQAogCiAjaW5jbHVk ZSA8bGltaXRzLmg+CiAKKyNpbmNsdWRlICJpcGMvaW50ZXJydXB0LmgiCiAjaW5jbHVkZSAi bWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicG9ydGFiaWxpdHkvaW5zdHJfdGltZS5oIgogI2lu Y2x1ZGUgInN0b3JhZ2UvY29uZGl0aW9uX3ZhcmlhYmxlLmgiCkBAIC0xNDksMjMgKzE1MCwy NCBAQCBDb25kaXRpb25WYXJpYWJsZVRpbWVkU2xlZXAoQ29uZGl0aW9uVmFyaWFibGUgKmN2 LCBsb25nIHRpbWVvdXQsCiAJCUlOU1RSX1RJTUVfU0VUX0NVUlJFTlQoc3RhcnRfdGltZSk7 CiAJCUFzc2VydCh0aW1lb3V0ID49IDAgJiYgdGltZW91dCA8PSBJTlRfTUFYKTsKIAkJY3Vy X3RpbWVvdXQgPSB0aW1lb3V0OwotCQl3YWl0X2V2ZW50cyA9IFdMX0xBVENIX1NFVCB8IFdM X1RJTUVPVVQgfCBXTF9FWElUX09OX1BNX0RFQVRIOworCQl3YWl0X2V2ZW50cyA9IFdMX0lO VEVSUlVQVCB8IFdMX1RJTUVPVVQgfCBXTF9FWElUX09OX1BNX0RFQVRIOwogCX0KIAllbHNl Ci0JCXdhaXRfZXZlbnRzID0gV0xfTEFUQ0hfU0VUIHwgV0xfRVhJVF9PTl9QTV9ERUFUSDsK KwkJd2FpdF9ldmVudHMgPSBXTF9JTlRFUlJVUFQgfCBXTF9FWElUX09OX1BNX0RFQVRIOwog CiAJd2hpbGUgKHRydWUpCiAJewogCQlib29sCQlkb25lID0gZmFsc2U7CiAKIAkJLyoKLQkJ ICogV2FpdCBmb3IgbGF0Y2ggdG8gYmUgc2V0LiAgKElmIHdlJ3JlIGF3YWtlbmVkIGZvciBz b21lIG90aGVyCi0JCSAqIHJlYXNvbiwgdGhlIGNvZGUgYmVsb3cgd2lsbCBjb3BlIGFueXdh eS4pCisJCSAqIFdhaXQgZm9yIGludGVycnVwdC4gIChJZiB3ZSdyZSBhd2FrZW5lZCBmb3Ig c29tZSBvdGhlciByZWFzb24sIHRoZQorCQkgKiBjb2RlIGJlbG93IHdpbGwgY29wZSBhbnl3 YXkuKQogCQkgKi8KLQkJKHZvaWQpIFdhaXRMYXRjaChNeUxhdGNoLCB3YWl0X2V2ZW50cywg Y3VyX3RpbWVvdXQsIHdhaXRfZXZlbnRfaW5mbyk7CisJCSh2b2lkKSBXYWl0SW50ZXJydXB0 KENoZWNrRm9ySW50ZXJydXB0c01hc2sgfCBJTlRFUlJVUFRfV0FJVF9XQUtFVVAsCisJCQkJ CQkJIHdhaXRfZXZlbnRzLCBjdXJfdGltZW91dCwgd2FpdF9ldmVudF9pbmZvKTsKIAotCQkv KiBSZXNldCBsYXRjaCBiZWZvcmUgZXhhbWluaW5nIHRoZSBzdGF0ZSBvZiB0aGUgd2FpdCBs aXN0LiAqLwotCQlSZXNldExhdGNoKE15TGF0Y2gpOworCQkvKiBDbGVhciB0aGUgZmxhZyBi ZWZvcmUgZXhhbWluaW5nIHRoZSBzdGF0ZSBvZiB0aGUgd2FpdCBsaXN0LiAqLworCQlDbGVh ckludGVycnVwdChJTlRFUlJVUFRfV0FJVF9XQUtFVVApOwogCiAJCS8qCiAJCSAqIElmIHRo aXMgcHJvY2VzcyBoYXMgYmVlbiB0YWtlbiBvdXQgb2YgdGhlIHdhaXQgbGlzdCwgdGhlbiB3 ZSBrbm93CkBAIC0xNzgsOSArMTgwLDEwIEBAIENvbmRpdGlvblZhcmlhYmxlVGltZWRTbGVl cChDb25kaXRpb25WYXJpYWJsZSAqY3YsIGxvbmcgdGltZW91dCwKIAkJICogdGhlIHdhaXQg bGlzdCBvbmx5IHdoZW4gdGhlIGNhbGxlciBjYWxscwogCQkgKiBDb25kaXRpb25WYXJpYWJs ZUNhbmNlbFNsZWVwLgogCQkgKgotCQkgKiBJZiB3ZSdyZSBzdGlsbCBpbiB0aGUgd2FpdCBs aXN0LCB0aGVuIHRoZSBsYXRjaCBtdXN0IGhhdmUgYmVlbiBzZXQKLQkJICogYnkgc29tZXRo aW5nIG90aGVyIHRoYW4gQ29uZGl0aW9uVmFyaWFibGVTaWduYWw7IHRob3VnaCB3ZSBkb24n dAotCQkgKiBndWFyYW50ZWUgbm90IHRvIHJldHVybiBzcHVyaW91c2x5LCB3ZSdsbCBhdm9p ZCB0aGlzIG9idmlvdXMgY2FzZS4KKwkJICogSWYgd2UncmUgc3RpbGwgaW4gdGhlIHdhaXQg bGlzdCwgdGhlbiB0aGUgaW50ZXJydXB0IG11c3QgaGF2ZSBiZWVuCisJCSAqIHNlbnQgYnkg c29tZXRoaW5nIG90aGVyIHRoYW4gQ29uZGl0aW9uVmFyaWFibGVTaWduYWw7IHRob3VnaCB3 ZQorCQkgKiBkb24ndCBndWFyYW50ZWUgbm90IHRvIHJldHVybiBzcHVyaW91c2x5LCB3ZSds bCBhdm9pZCB0aGlzIG9idmlvdXMKKwkJICogY2FzZS4KIAkJICovCiAJCVNwaW5Mb2NrQWNx dWlyZSgmY3YtPm11dGV4KTsKIAkJaWYgKCFwcm9jbGlzdF9jb250YWlucygmY3YtPndha2V1 cCwgTXlQcm9jTnVtYmVyLCBjdldhaXRMaW5rKSkKQEAgLTI2OCw5ICsyNzEsOSBAQCBDb25k aXRpb25WYXJpYWJsZVNpZ25hbChDb25kaXRpb25WYXJpYWJsZSAqY3YpCiAJCXByb2MgPSBw cm9jbGlzdF9wb3BfaGVhZF9ub2RlKCZjdi0+d2FrZXVwLCBjdldhaXRMaW5rKTsKIAlTcGlu TG9ja1JlbGVhc2UoJmN2LT5tdXRleCk7CiAKLQkvKiBJZiB3ZSBmb3VuZCBzb21lb25lIHNs ZWVwaW5nLCBzZXQgdGhlaXIgbGF0Y2ggdG8gd2FrZSB0aGVtIHVwLiAqLworCS8qIElmIHdl IGZvdW5kIHNvbWVvbmUgc2xlZXBpbmcsIHdha2UgdGhlbSB1cC4gKi8KIAlpZiAocHJvYyAh PSBOVUxMKQotCQlTZXRMYXRjaCgmcHJvYy0+cHJvY0xhdGNoKTsKKwkJU2VuZEludGVycnVw dChJTlRFUlJVUFRfV0FJVF9XQUtFVVAsIEdldE51bWJlckZyb21QR1Byb2MocHJvYykpOwog fQogCiAvKgpAQCAtMjk5LDggKzMwMiw4IEBAIENvbmRpdGlvblZhcmlhYmxlQnJvYWRjYXN0 KENvbmRpdGlvblZhcmlhYmxlICpjdikKIAkgKiBDViBhbmQgaW4gZG9pbmcgc28gcmVtb3Zl IG91ciBzZW50aW5lbCBlbnRyeS4gIEJ1dCB0aGF0J3MgZmluZTogc2luY2UKIAkgKiBDViB3 YWl0ZXJzIGFyZSBhbHdheXMgYWRkZWQgYW5kIHJlbW92ZWQgaW4gb3JkZXIsIHRoYXQgbXVz dCBtZWFuIHRoYXQKIAkgKiBldmVyeSBwcmV2aW91cyB3YWl0ZXIgaGFzIGJlZW4gd2FrZW5l ZCwgc28gd2UncmUgZG9uZS4gIFdlJ2xsIGdldCBhbgotCSAqIGV4dHJhICJzZXQiIG9uIG91 ciBsYXRjaCBmcm9tIHRoZSBzb21lb25lIGVsc2UncyBzaWduYWwsIHdoaWNoIGlzCi0JICog c2xpZ2h0bHkgaW5lZmZpY2llbnQgYnV0IGhhcm1sZXNzLgorCSAqIGV4dHJhIGludGVycnVw dCBmcm9tIHRoZSBzb21lb25lIGVsc2UncyBzaWduYWwsIHdoaWNoIGlzIHNsaWdodGx5CisJ ICogaW5lZmZpY2llbnQgYnV0IGhhcm1sZXNzLgogCSAqCiAJICogV2UgY2FuJ3QgaW5zZXJ0 IG91ciBjdldhaXRMaW5rIGFzIGEgc2VudGluZWwgaWYgaXQncyBhbHJlYWR5IGluIHVzZSBp bgogCSAqIHNvbWUgb3RoZXIgcHJvY2xpc3QuICBXaGlsZSB0aGF0J3Mgbm90IGV4cGVjdGVk IHRvIGJlIHRydWUgZm9yIHR5cGljYWwKQEAgLTMzMyw3ICszMzYsNyBAQCBDb25kaXRpb25W YXJpYWJsZUJyb2FkY2FzdChDb25kaXRpb25WYXJpYWJsZSAqY3YpCiAKIAkvKiBBd2FrZW4g Zmlyc3Qgd2FpdGVyLCBpZiB0aGVyZSB3YXMgb25lLiAqLwogCWlmIChwcm9jICE9IE5VTEwp Ci0JCVNldExhdGNoKCZwcm9jLT5wcm9jTGF0Y2gpOworCQlTZW5kSW50ZXJydXB0KElOVEVS UlVQVF9XQUlUX1dBS0VVUCwgR2V0TnVtYmVyRnJvbVBHUHJvYyhwcm9jKSk7CiAKIAl3aGls ZSAoaGF2ZV9zZW50aW5lbCkKIAl7CkBAIC0zNTcsNiArMzYwLDYgQEAgQ29uZGl0aW9uVmFy aWFibGVCcm9hZGNhc3QoQ29uZGl0aW9uVmFyaWFibGUgKmN2KQogCQlTcGluTG9ja1JlbGVh c2UoJmN2LT5tdXRleCk7CiAKIAkJaWYgKHByb2MgIT0gTlVMTCAmJiBwcm9jICE9IE15UHJv YykKLQkJCVNldExhdGNoKCZwcm9jLT5wcm9jTGF0Y2gpOworCQkJU2VuZEludGVycnVwdChJ TlRFUlJVUFRfV0FJVF9XQUtFVVAsIEdldE51bWJlckZyb21QR1Byb2MocHJvYykpOwogCX0K IH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcmVkaWNhdGUuYyBi L3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcmVkaWNhdGUuYwppbmRleCBmZTc1ZWFkMzUw MS4uZjk2MTA1NGE0YmEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9w cmVkaWNhdGUuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJlZGljYXRlLmMK QEAgLTIwNCw2ICsyMDQsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy90d29waGFzZV9ybWdyLmgi CiAjaW5jbHVkZSAiYWNjZXNzL3hhY3QuaCIKICNpbmNsdWRlICJhY2Nlc3MveGxvZy5oIgor I2luY2x1ZGUgImlwYy9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNp bmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJwb3J0L3BnX2xmaW5kLmgiCkBAIC0xNTg0 LDcgKzE1ODUsMTEgQEAgR2V0U2FmZVNuYXBzaG90KFNuYXBzaG90IG9yaWdTbmFwc2hvdCkK IAkJCQkgU3hhY3RJc1JPVW5zYWZlKE15U2VyaWFsaXphYmxlWGFjdCkpKQogCQl7CiAJCQlM V0xvY2tSZWxlYXNlKFNlcmlhbGl6YWJsZVhhY3RIYXNoTG9jayk7Ci0JCQlQcm9jV2FpdEZv clNpZ25hbChXQUlUX0VWRU5UX1NBRkVfU05BUFNIT1QpOworCQkJV2FpdEludGVycnVwdChD aGVja0ZvckludGVycnVwdHNNYXNrIHwgSU5URVJSVVBUX1dBSVRfV0FLRVVQLAorCQkJCQkJ ICBXTF9JTlRFUlJVUFQgfCBXTF9FWElUX09OX1BNX0RFQVRILCAwLAorCQkJCQkJICBXQUlU X0VWRU5UX1NBRkVfU05BUFNIT1QpOworCQkJQ2xlYXJJbnRlcnJ1cHQoSU5URVJSVVBUX1dB SVRfV0FLRVVQKTsKKwkJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CiAJCQlMV0xvY2tBY3F1 aXJlKFNlcmlhbGl6YWJsZVhhY3RIYXNoTG9jaywgTFdfRVhDTFVTSVZFKTsKIAkJfQogCQlN eVNlcmlhbGl6YWJsZVhhY3QtPmZsYWdzICY9IH5TWEFDVF9GTEFHX0RFRkVSUkFCTEVfV0FJ VElORzsKQEAgLTM2MTcsNyArMzYyMiw3IEBAIFJlbGVhc2VQcmVkaWNhdGVMb2Nrcyhib29s IGlzQ29tbWl0LCBib29sIGlzUmVhZE9ubHlTYWZlKQogCQkJICovCiAJCQlpZiAoU3hhY3RJ c0RlZmVycmFibGVXYWl0aW5nKHJvWGFjdCkgJiYKIAkJCQkoU3hhY3RJc1JPVW5zYWZlKHJv WGFjdCkgfHwgU3hhY3RJc1JPU2FmZShyb1hhY3QpKSkKLQkJCQlQcm9jU2VuZFNpZ25hbChy b1hhY3QtPnBncHJvY25vKTsKKwkJCQlTZW5kSW50ZXJydXB0KElOVEVSUlVQVF9XQUlUX1dB S0VVUCwgcm9YYWN0LT5wZ3Byb2Nubyk7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3Iv cHJvYy5jCmluZGV4IDI0MDViNTliNTAxLi4wYmU0OGJhNzk2ZiAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdl L2xtZ3IvcHJvYy5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL3R3b3Bo YXNlLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2d1dGlscy5oIgogI2luY2x1ZGUgImFjY2Vz cy94bG9nd2FpdC5oIgorI2luY2x1ZGUgImlwYy9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJt aXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVy L2F1dG92YWN1dW0uaCIKQEAgLTMxMCwxNCArMzExLDI4IEBAIEluaXRQcm9jR2xvYmFsKHZv aWQpCiAJCUFzc2VydChmcFB0ciA8PSBmcEVuZFB0cik7CiAKIAkJLyoKLQkJICogU2V0IHVw IHBlci1QR1BST0Mgc2VtYXBob3JlLCBsYXRjaCwgYW5kIGZwSW5mb0xvY2suICBQcmVwYXJl ZCB4YWN0Ci0JCSAqIGR1bW15IFBHUFJPQ3MgZG9uJ3QgbmVlZCB0aGVzZSB0aG91Z2ggLSB0 aGV5J3JlIG5ldmVyIGFzc29jaWF0ZWQKLQkJICogd2l0aCBhIHJlYWwgcHJvY2VzcworCQkg KiBTZXQgdXAgcGVyLVBHUFJPQyBzZW1hcGhvcmUsIGludGVycnVwdCB3YWtldXAgZXZlbnQg KG9uIFdpbmRvd3MpLAorCQkgKiBhbmQgZnBJbmZvTG9jay4gIFByZXBhcmVkIHhhY3QgZHVt bXkgUEdQUk9DcyBkb24ndCBuZWVkIHRoZXNlCisJCSAqIHRob3VnaCAtIHRoZXkncmUgbmV2 ZXIgYXNzb2NpYXRlZCB3aXRoIGEgcmVhbCBwcm9jZXNzCiAJCSAqLwogCQlpZiAoaSA8IE1h eEJhY2tlbmRzICsgTlVNX0FVWElMSUFSWV9QUk9DUykKIAkJeworI2lmZGVmIFdJTjMyCisJ CQlTRUNVUklUWV9BVFRSSUJVVEVTIHNhOworCisJCQkvKgorCQkJICogU2V0IHVwIHNlY3Vy aXR5IGF0dHJpYnV0ZXMgdG8gc3BlY2lmeSB0aGF0IHRoZSBldmVudHMgYXJlCisJCQkgKiBp bmhlcml0ZWQuCisJCQkgKi8KKwkJCVplcm9NZW1vcnkoJnNhLCBzaXplb2Yoc2EpKTsKKwkJ CXNhLm5MZW5ndGggPSBzaXplb2Yoc2EpOworCQkJc2EuYkluaGVyaXRIYW5kbGUgPSBUUlVF OworCisJCQlwcm9jLT5pbnRlcnJ1cHRXYWtldXBFdmVudCA9IENyZWF0ZUV2ZW50KCZzYSwg VFJVRSwgRkFMU0UsIE5VTEwpOworCQkJaWYgKHByb2MtPmludGVycnVwdFdha2V1cEV2ZW50 ID09IE5VTEwpCisJCQkJZWxvZyhFUlJPUiwgIkNyZWF0ZUV2ZW50IGZhaWxlZDogZXJyb3Ig Y29kZSAlbHUiLCBHZXRMYXN0RXJyb3IoKSk7CisjZW5kaWYKIAkJCXByb2MtPnNlbSA9IFBH U2VtYXBob3JlQ3JlYXRlKCk7Ci0JCQlJbml0U2hhcmVkTGF0Y2goJihwcm9jLT5wcm9jTGF0 Y2gpKTsKIAkJCUxXTG9ja0luaXRpYWxpemUoJihwcm9jLT5mcEluZm9Mb2NrKSwgTFdUUkFO Q0hFX0xPQ0tfRkFTVFBBVEgpOwogCQl9CiAKQEAgLTQ2Miw2ICs0NzcsOCBAQCBJbml0UHJv Y2Vzcyh2b2lkKQogCQkJCSBlcnJtc2coInNvcnJ5LCB0b28gbWFueSBjbGllbnRzIGFscmVh ZHkiKSkpOwogCX0KIAlNeVByb2NOdW1iZXIgPSBHZXROdW1iZXJGcm9tUEdQcm9jKE15UHJv Yyk7CisJaWYgKElzVW5kZXJQb3N0bWFzdGVyKQorCQlSZWdpc3RlclBvc3RtYXN0ZXJDaGls ZFByb2NOdW1iZXIoTXlQcm9jTnVtYmVyKTsKIAogCS8qCiAJICogQ3Jvc3MtY2hlY2sgdGhh dCB0aGUgUEdQUk9DIGlzIG9mIHRoZSB0eXBlIHdlIGV4cGVjdDsgaWYgdGhpcyB3ZXJlIG5v dApAQCAtNTMzLDEzICs1NTAsOCBAQCBJbml0UHJvY2Vzcyh2b2lkKQogCU15UHJvYy0+Y2xv Z0dyb3VwTWVtYmVyTHNuID0gSW52YWxpZFhMb2dSZWNQdHI7CiAJQXNzZXJ0KHBnX2F0b21p Y19yZWFkX3UzMigmTXlQcm9jLT5jbG9nR3JvdXBOZXh0KSA9PSBJTlZBTElEX1BST0NfTlVN QkVSKTsKIAotCS8qCi0JICogQWNxdWlyZSBvd25lcnNoaXAgb2YgdGhlIFBHUFJPQydzIGxh dGNoLCBzbyB0aGF0IHdlIGNhbiB1c2UgV2FpdExhdGNoCi0JICogb24gaXQuICBUaGF0IGFs bG93cyB1cyB0byByZXBvaW50IHRoZSBwcm9jZXNzIGxhdGNoLCB3aGljaCBzbyBmYXIKLQkg KiBwb2ludHMgdG8gcHJvY2VzcyBsb2NhbCBvbmUsIHRvIHRoZSBzaGFyZWQgb25lLgotCSAq LwotCU93bkxhdGNoKCZNeVByb2MtPnByb2NMYXRjaCk7Ci0JU3dpdGNoVG9TaGFyZWRMYXRj aCgpOworCS8qIFN0YXJ0IGFjY2VwdGluZyBpbnRlcnJ1cHRzIGZyb20gb3RoZXIgcHJvY2Vz c2VzICovCisJU3dpdGNoVG9TaGFyZWRJbnRlcnJ1cHRzKCk7CiAKIAkvKiBub3cgdGhhdCB3 ZSBoYXZlIGEgcHJvYywgcmVwb3J0IHdhaXQgZXZlbnRzIHRvIHNoYXJlZCBtZW1vcnkgKi8K IAlwZ3N0YXRfc2V0X3dhaXRfZXZlbnRfc3RvcmFnZSgmTXlQcm9jLT53YWl0X2V2ZW50X2lu Zm8pOwpAQCAtNjY5LDYgKzY4MSw4IEBAIEluaXRBdXhpbGlhcnlQcm9jZXNzKHZvaWQpCiAK IAlNeVByb2MgPSBhdXhwcm9jOwogCU15UHJvY051bWJlciA9IEdldE51bWJlckZyb21QR1By b2MoTXlQcm9jKTsKKwlpZiAoSXNVbmRlclBvc3RtYXN0ZXIpCisJCVJlZ2lzdGVyUG9zdG1h c3RlckNoaWxkUHJvY051bWJlcihNeVByb2NOdW1iZXIpOwogCiAJLyoKIAkgKiBJbml0aWFs aXplIGFsbCBmaWVsZHMgb2YgTXlQcm9jLCBleGNlcHQgZm9yIHRob3NlIHByZXZpb3VzbHkK QEAgLTcwMywxMyArNzE3LDggQEAgSW5pdEF1eGlsaWFyeVByb2Nlc3Modm9pZCkKIAl9CiAj ZW5kaWYKIAotCS8qCi0JICogQWNxdWlyZSBvd25lcnNoaXAgb2YgdGhlIFBHUFJPQydzIGxh dGNoLCBzbyB0aGF0IHdlIGNhbiB1c2UgV2FpdExhdGNoCi0JICogb24gaXQuICBUaGF0IGFs bG93cyB1cyB0byByZXBvaW50IHRoZSBwcm9jZXNzIGxhdGNoLCB3aGljaCBzbyBmYXIKLQkg KiBwb2ludHMgdG8gcHJvY2VzcyBsb2NhbCBvbmUsIHRvIHRoZSBzaGFyZWQgb25lLgotCSAq LwotCU93bkxhdGNoKCZNeVByb2MtPnByb2NMYXRjaCk7Ci0JU3dpdGNoVG9TaGFyZWRMYXRj aCgpOworCS8qIFN0YXJ0IGFjY2VwdGluZyBpbnRlcnJ1cHRzIGZyb20gb3RoZXIgcHJvY2Vz c2VzICovCisJU3dpdGNoVG9TaGFyZWRJbnRlcnJ1cHRzKCk7CiAKIAkvKiBub3cgdGhhdCB3 ZSBoYXZlIGEgcHJvYywgcmVwb3J0IHdhaXQgZXZlbnRzIHRvIHNoYXJlZCBtZW1vcnkgKi8K IAlwZ3N0YXRfc2V0X3dhaXRfZXZlbnRfc3RvcmFnZSgmTXlQcm9jLT53YWl0X2V2ZW50X2lu Zm8pOwpAQCAtOTkzLDIxICsxMDAyLDIwIEBAIFByb2NLaWxsKGludCBjb2RlLCBEYXR1bSBh cmcpCiAJfQogCiAJLyoKLQkgKiBSZXNldCBNeUxhdGNoIHRvIHRoZSBwcm9jZXNzIGxvY2Fs IG9uZS4gIFRoaXMgaXMgc28gdGhhdCBzaWduYWwKLQkgKiBoYW5kbGVycyBldCBhbCBjYW4g Y29udGludWUgdXNpbmcgdGhlIGxhdGNoIGFmdGVyIHRoZSBzaGFyZWQgbGF0Y2gKLQkgKiBp c24ndCBvdXJzIGFueW1vcmUuCisJICogUmVzZXQgaW50ZXJydXB0IHZlY3RvciB0byB0aGUg cHJvY2VzcyBsb2NhbCBvbmUuICBUaGlzIGlzIHNvIHRoYXQKKwkgKiBzaWduYWwgaGFuZGxl cnMgZXQgYWwgY2FuIGNvbnRpbnVlIHVzaW5nIGludGVycnVwdHMgYWZ0ZXIgdGhlIFBHUFJP QworCSAqIGVudHJ5IGlzbid0IG91cnMgYW55bW9yZS4KIAkgKgogCSAqIFNpbWlsYXJseSwg c3RvcCByZXBvcnRpbmcgd2FpdCBldmVudHMgdG8gTXlQcm9jLT53YWl0X2V2ZW50X2luZm8u CiAJICoKLQkgKiBBZnRlciB0aGF0IGNsZWFyIE15UHJvYyBhbmQgZGlzb3duIHRoZSBzaGFy ZWQgbGF0Y2guCisJICogQWZ0ZXIgdGhhdCBjbGVhciBNeVByb2MuCiAJICovCi0JU3dpdGNo QmFja1RvTG9jYWxMYXRjaCgpOworCVN3aXRjaFRvTG9jYWxJbnRlcnJ1cHRzKCk7CiAJcGdz dGF0X3Jlc2V0X3dhaXRfZXZlbnRfc3RvcmFnZSgpOwogCiAJcHJvYyA9IE15UHJvYzsKIAlN eVByb2MgPSBOVUxMOwogCU15UHJvY051bWJlciA9IElOVkFMSURfUFJPQ19OVU1CRVI7Ci0J RGlzb3duTGF0Y2goJnByb2MtPnByb2NMYXRjaCk7CiAKIAkvKiBNYXJrIHRoZSBwcm9jIG5v IGxvbmdlciBpbiB1c2UgKi8KIAlwcm9jLT5waWQgPSAwOwpAQCAtMTA2NiwxMyArMTA3NCwx MiBAQCBBdXhpbGlhcnlQcm9jS2lsbChpbnQgY29kZSwgRGF0dW0gYXJnKQogCUNvbmRpdGlv blZhcmlhYmxlQ2FuY2VsU2xlZXAoKTsKIAogCS8qIGxvb2sgYXQgdGhlIGVxdWl2YWxlbnQg UHJvY0tpbGwoKSBjb2RlIGZvciBjb21tZW50cyAqLwotCVN3aXRjaEJhY2tUb0xvY2FsTGF0 Y2goKTsKKwlTd2l0Y2hUb0xvY2FsSW50ZXJydXB0cygpOwogCXBnc3RhdF9yZXNldF93YWl0 X2V2ZW50X3N0b3JhZ2UoKTsKIAogCXByb2MgPSBNeVByb2M7CiAJTXlQcm9jID0gTlVMTDsK IAlNeVByb2NOdW1iZXIgPSBJTlZBTElEX1BST0NfTlVNQkVSOwotCURpc293bkxhdGNoKCZw cm9jLT5wcm9jTGF0Y2gpOwogCiAJU3BpbkxvY2tBY3F1aXJlKFByb2NTdHJ1Y3RMb2NrKTsK IApAQCAtMTM5OSwxOCArMTQwNiwxOCBAQCBQcm9jU2xlZXAoTE9DQUxMT0NLICpsb2NhbGxv Y2spCiAJfQogCiAJLyoKLQkgKiBJZiBzb21lYm9keSB3YWtlcyB1cyBiZXR3ZWVuIExXTG9j a1JlbGVhc2UgYW5kIFdhaXRMYXRjaCwgdGhlIGxhdGNoCi0JICogd2lsbCBub3Qgd2FpdC4g QnV0IGEgc2V0IGxhdGNoIGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4gdGhhdCB0aGUgbG9j awotCSAqIGlzIGZyZWUgbm93LCBhcyB0aGVyZSBhcmUgbWFueSBvdGhlciBzb3VyY2VzIGZv ciBsYXRjaCBzZXRzIHRoYW4KLQkgKiBzb21lYm9keSByZWxlYXNpbmcgdGhlIGxvY2suCisJ ICogSWYgc29tZWJvZHkgd2FrZXMgdXMgYmV0d2VlbiBMV0xvY2tSZWxlYXNlIGFuZCBXYWl0 SW50ZXJydXB0LAorCSAqIFdhaXRJbnRlcnJ1cHQgd2lsbCBub3Qgd2FpdC4gQnV0IGFuIGlu dGVycnVwdCBkb2VzIG5vdCBuZWNlc3NhcmlseSBtZWFuCisJICogdGhhdCB0aGUgbG9jayBp cyBmcmVlIG5vdywgYXMgdGhlcmUgYXJlIG1hbnkgb3RoZXIgc291cmNlcyBmb3IgdGhlCisJ ICogaW50ZXJydXB0IHRoYW4gc29tZWJvZHkgcmVsZWFzaW5nIHRoZSBsb2NrLgogCSAqCi0J ICogV2UgcHJvY2VzcyBpbnRlcnJ1cHRzIHdoZW5ldmVyIHRoZSBsYXRjaCBoYXMgYmVlbiBz ZXQsIHNvIGNhbmNlbC9kaWUKLQkgKiBpbnRlcnJ1cHRzIGFyZSBwcm9jZXNzZWQgcXVpY2ts eS4gVGhpcyBtZWFucyB3ZSBtdXN0IG5vdCBtaW5kIGxvc2luZwotCSAqIGNvbnRyb2wgdG8g YSBjYW5jZWwvZGllIGludGVycnVwdCBoZXJlLiAgV2UgZG9uJ3QsIGJlY2F1c2Ugd2UgaGF2 ZSBubwotCSAqIHNoYXJlZC1zdGF0ZS1jaGFuZ2Ugd29yayB0byBkbyBhZnRlciBiZWluZyBn cmFudGVkIHRoZSBsb2NrICh0aGUKLQkgKiBncmFudG9yIGRpZCBpdCBhbGwpLiAgV2UgZG8g aGF2ZSB0byB3b3JyeSBhYm91dCBjYW5jZWxpbmcgdGhlIGRlYWRsb2NrCi0JICogdGltZW91 dCBhbmQgdXBkYXRpbmcgdGhlIGxvY2FsbG9jayB0YWJsZSwgYnV0IGlmIHdlIGxvc2UgY29u dHJvbCB0byBhbgotCSAqIGVycm9yLCBMb2NrRXJyb3JDbGVhbnVwIHdpbGwgZml4IHRoYXQg dXAuCisJICogV2UgcHJvY2VzcyBpbnRlcnJ1cHRzIHdoZW5ldmVyIHRoZSBpbnRlcnJ1cHQg aGFzIGJlZW4gc2V0LCBzbworCSAqIGNhbmNlbC9kaWUgaW50ZXJydXB0cyBhcmUgcHJvY2Vz c2VkIHF1aWNrbHkuIFRoaXMgbWVhbnMgd2UgbXVzdCBub3QKKwkgKiBtaW5kIGxvc2luZyBj b250cm9sIHRvIGEgY2FuY2VsL2RpZSBpbnRlcnJ1cHQgaGVyZS4gIFdlIGRvbid0LCBiZWNh dXNlCisJICogd2UgaGF2ZSBubyBzaGFyZWQtc3RhdGUtY2hhbmdlIHdvcmsgdG8gZG8gYWZ0 ZXIgYmVpbmcgZ3JhbnRlZCB0aGUgbG9jaworCSAqICh0aGUgZ3JhbnRvciBkaWQgaXQgYWxs KS4gIFdlIGRvIGhhdmUgdG8gd29ycnkgYWJvdXQgY2FuY2VsaW5nIHRoZQorCSAqIGRlYWRs b2NrIHRpbWVvdXQgYW5kIHVwZGF0aW5nIHRoZSBsb2NhbGxvY2sgdGFibGUsIGJ1dCBpZiB3 ZSBsb3NlCisJICogY29udHJvbCB0byBhbiBlcnJvciwgTG9ja0Vycm9yQ2xlYW51cCB3aWxs IGZpeCB0aGF0IHVwLgogCSAqLwogCWRvCiAJewpAQCAtMTQ1Niw5ICsxNDYzLDEwIEBAIFBy b2NTbGVlcChMT0NBTExPQ0sgKmxvY2FsbG9jaykKIAkJfQogCQllbHNlCiAJCXsKLQkJCSh2 b2lkKSBXYWl0TGF0Y2goTXlMYXRjaCwgV0xfTEFUQ0hfU0VUIHwgV0xfRVhJVF9PTl9QTV9E RUFUSCwgMCwKLQkJCQkJCQkgUEdfV0FJVF9MT0NLIHwgbG9jYWxsb2NrLT50YWcubG9jay5s b2NrdGFnX3R5cGUpOwotCQkJUmVzZXRMYXRjaChNeUxhdGNoKTsKKwkJCSh2b2lkKSBXYWl0 SW50ZXJydXB0KENoZWNrRm9ySW50ZXJydXB0c01hc2sgfCBJTlRFUlJVUFRfV0FJVF9XQUtF VVAsCisJCQkJCQkJCSBXTF9JTlRFUlJVUFQgfCBXTF9FWElUX09OX1BNX0RFQVRILCAwLAor CQkJCQkJCQkgUEdfV0FJVF9MT0NLIHwgbG9jYWxsb2NrLT50YWcubG9jay5sb2NrdGFnX3R5 cGUpOworCQkJQ2xlYXJJbnRlcnJ1cHQoSU5URVJSVVBUX1dBSVRfV0FLRVVQKTsKIAkJCS8q IGNoZWNrIGZvciBkZWFkbG9ja3MgZmlyc3QsIGFzIHRoYXQncyBwcm9iYWJseSBsb2ctd29y dGh5ICovCiAJCQlpZiAoZ290X2RlYWRsb2NrX3RpbWVvdXQpCiAJCQl7CkBAIC0xNjY0LDgg KzE2NzIsOCBAQCBQcm9jU2xlZXAoTE9DQUxMT0NLICpsb2NhbGxvY2spCiAJLyoKIAkgKiBE aXNhYmxlIHRoZSB0aW1lcnMsIGlmIHRoZXkgYXJlIHN0aWxsIHJ1bm5pbmcuICBBcyBpbiBM b2NrRXJyb3JDbGVhbnVwLAogCSAqIHdlIG11c3QgcHJlc2VydmUgdGhlIExPQ0tfVElNRU9V VCBpbmRpY2F0b3IgZmxhZzogaWYgYSBsb2NrIHRpbWVvdXQgaGFzCi0JICogYWxyZWFkeSBj YXVzZWQgUXVlcnlDYW5jZWxQZW5kaW5nIHRvIGJlY29tZSBzZXQsIHdlIHdhbnQgdGhlIGNh bmNlbCB0bwotCSAqIGJlIHJlcG9ydGVkIGFzIGEgbG9jayB0aW1lb3V0LCBub3QgYSB1c2Vy IGNhbmNlbC4KKwkgKiBhbHJlYWR5IHJhaXNlZCBJTlRFUlJVUFRfUVVFUllfQ0FOQ0VMLCB3 ZSB3YW50IHRoZSBjYW5jZWwgdG8gYmUKKwkgKiByZXBvcnRlZCBhcyBhIGxvY2sgdGltZW91 dCwgbm90IGEgdXNlciBjYW5jZWwuCiAJICovCiAJaWYgKCFJbkhvdFN0YW5kYnkpCiAJewpA QCAtMTcwMiw3ICsxNzEwLDcgQEAgUHJvY1NsZWVwKExPQ0FMTE9DSyAqbG9jYWxsb2NrKQog CiAKIC8qCi0gKiBQcm9jV2FrZXVwIC0tIHdha2UgdXAgYSBwcm9jZXNzIGJ5IHNldHRpbmcg aXRzIGxhdGNoLgorICogUHJvY1dha2V1cCAtLSB3YWtlIHVwIGEgcHJvY2VzcyBieSBzZW5k aW5nIGl0IGFuIGludGVycnVwdC4KICAqCiAgKgkgQWxzbyByZW1vdmUgdGhlIHByb2Nlc3Mg ZnJvbSB0aGUgd2FpdCBxdWV1ZSBhbmQgc2V0IGl0cyBsaW5rcyBpbnZhbGlkLgogICoKQEAg LTE3MzEsNyArMTczOSw3IEBAIFByb2NXYWtldXAoUEdQUk9DICpwcm9jLCBQcm9jV2FpdFN0 YXR1cyB3YWl0U3RhdHVzKQogCXBnX2F0b21pY193cml0ZV91NjQoJk15UHJvYy0+d2FpdFN0 YXJ0LCAwKTsKIAogCS8qIEFuZCBhd2FrZW4gaXQgKi8KLQlTZXRMYXRjaCgmcHJvYy0+cHJv Y0xhdGNoKTsKKwlTZW5kSW50ZXJydXB0KElOVEVSUlVQVF9XQUlUX1dBS0VVUCwgR2V0TnVt YmVyRnJvbVBHUHJvYyhwcm9jKSk7CiB9CiAKIC8qCkBAIC0xODgzLDE0ICsxODkxLDEyIEBA IENoZWNrRGVhZExvY2tBbGVydCh2b2lkKQogCWdvdF9kZWFkbG9ja190aW1lb3V0ID0gdHJ1 ZTsKIAogCS8qCi0JICogSGF2ZSB0byBzZXQgdGhlIGxhdGNoIGFnYWluLCBldmVuIGlmIGhh bmRsZV9zaWdfYWxhcm0gYWxyZWFkeSBkaWQuIEJhY2sKLQkgKiB0aGVuIGdvdF9kZWFkbG9j a190aW1lb3V0IHdhc24ndCB5ZXQgc2V0Li4uIEl0J3MgdW5saWtlbHkgdGhhdCB0aGlzCi0J ICogZXZlciB3b3VsZCBiZSBhIHByb2JsZW0sIGJ1dCBzZXR0aW5nIGEgc2V0IGxhdGNoIGFn YWluIGlzIGNoZWFwLgotCSAqCi0JICogTm90ZSB0aGF0LCB3aGVuIHRoaXMgZnVuY3Rpb24g cnVucyBpbnNpZGUgcHJvY3NpZ25hbF9zaWd1c3IxX2hhbmRsZXIoKSwKLQkgKiB0aGUgaGFu ZGxlciBmdW5jdGlvbiBzZXRzIHRoZSBsYXRjaCBhZ2FpbiBhZnRlciB0aGUgbGF0Y2ggaXMg c2V0IGhlcmUuCisJICogSGF2ZSB0byByYWlzZSB0aGUgaW50ZXJydXB0IGFnYWluLCBldmVu IGlmIGhhbmRsZV9zaWdfYWxhcm0gYWxyZWFkeQorCSAqIGRpZC4gQmFjayB0aGVuIGdvdF9k ZWFkbG9ja190aW1lb3V0IHdhc24ndCB5ZXQgc2V0Li4uIEl0J3MgdW5saWtlbHkKKwkgKiB0 aGF0IHRoaXMgZXZlciB3b3VsZCBiZSBhIHByb2JsZW0sIGJ1dCByYWlzaW5nIGFuIGludGVy cnVwdCBhZ2FpbiBpcworCSAqIGNoZWFwLgogCSAqLwotCVNldExhdGNoKE15TGF0Y2gpOwor CVJhaXNlSW50ZXJydXB0KElOVEVSUlVQVF9XQUlUX1dBS0VVUCk7CiAJZXJybm8gPSBzYXZl X2Vycm5vOwogfQogCkBAIC0xOTY5LDM0ICsxOTc1LDYgQEAgR2V0TG9ja0hvbGRlcnNBbmRX YWl0ZXJzKExPQ0FMTE9DSyAqbG9jYWxsb2NrLCBTdHJpbmdJbmZvIGxvY2tfaG9sZGVyc19z YnVmLAogCX0KIH0KIAotLyoKLSAqIFByb2NXYWl0Rm9yU2lnbmFsIC0gd2FpdCBmb3IgYSBz aWduYWwgZnJvbSBhbm90aGVyIGJhY2tlbmQuCi0gKgotICogQXMgdGhpcyB1c2VzIHRoZSBn ZW5lcmljIHByb2Nlc3MgbGF0Y2ggdGhlIGNhbGxlciBoYXMgdG8gYmUgcm9idXN0IGFnYWlu c3QKLSAqIHVucmVsYXRlZCB3YWtldXBzOiBBbHdheXMgY2hlY2sgdGhhdCB0aGUgZGVzaXJl ZCBzdGF0ZSBoYXMgb2NjdXJyZWQsIGFuZAotICogd2FpdCBhZ2FpbiBpZiBub3QuCi0gKi8K LXZvaWQKLVByb2NXYWl0Rm9yU2lnbmFsKHVpbnQzMiB3YWl0X2V2ZW50X2luZm8pCi17Ci0J KHZvaWQpIFdhaXRMYXRjaChNeUxhdGNoLCBXTF9MQVRDSF9TRVQgfCBXTF9FWElUX09OX1BN X0RFQVRILCAwLAotCQkJCQkgd2FpdF9ldmVudF9pbmZvKTsKLQlSZXNldExhdGNoKE15TGF0 Y2gpOwotCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7Ci19Ci0KLS8qCi0gKiBQcm9jU2VuZFNp Z25hbCAtIHNldCB0aGUgbGF0Y2ggb2YgYSBiYWNrZW5kIGlkZW50aWZpZWQgYnkgUHJvY051 bWJlcgotICovCi12b2lkCi1Qcm9jU2VuZFNpZ25hbChQcm9jTnVtYmVyIHByb2NOdW1iZXIp Ci17Ci0JaWYgKHByb2NOdW1iZXIgPCAwIHx8IHByb2NOdW1iZXIgPj0gUHJvY0dsb2JhbC0+ YWxsUHJvY0NvdW50KQotCQllbG9nKEVSUk9SLCAicHJvY051bWJlciBvdXQgb2YgcmFuZ2Ui KTsKLQotCVNldExhdGNoKCZHZXRQR1Byb2NCeU51bWJlcihwcm9jTnVtYmVyKS0+cHJvY0xh dGNoKTsKLX0KLQogLyoKICAqIEJlY29tZUxvY2tHcm91cExlYWRlciAtIGRlc2lnbmF0ZSBw cm9jZXNzIGFzIGxvY2sgZ3JvdXAgbGVhZGVyCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvc3RvcmFnZS9zbWdyL3NtZ3IuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uvc21nci9zbWdy LmMKaW5kZXggMzc4YzJhMDNmMzkuLmRkOGIxZmMxMGY1IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9zdG9yYWdlL3NtZ3Ivc21nci5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uvc21n ci9zbWdyLmMKQEAgLTk5NCw3ICs5OTQsNyBAQCBzbWdyZmQoU01nclJlbGF0aW9uIHJlbG4s IEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sIHVpbnQzMiAqb2Zm KQogCSAqIFRoZSBjYWxsZXIgbmVlZHMgdG8gcHJldmVudCBpbnRlcnJ1cHRzIGZyb20gYmVp bmcgcHJvY2Vzc2VkLCBvdGhlcndpc2UKIAkgKiB0aGUgRkQgY291bGQgYmUgY2xvc2VkIHBy ZW1hdHVyZWx5LgogCSAqLwotCUFzc2VydCghSU5URVJSVVBUU19DQU5fQkVfUFJPQ0VTU0VE KCkpOworCUFzc2VydChDaGVja0ZvckludGVycnVwdHNNYXNrID09IDApOwogCiAJZmQgPSBz bWdyc3dbcmVsbi0+c21ncl93aGljaF0uc21ncl9mZChyZWxuLCBmb3JrbnVtLCBibG9ja251 bSwgb2ZmKTsKIApAQCAtMTA3Myw3ICsxMDczLDcgQEAgc21ncl9haW9fcmVvcGVuKFBnQWlv SGFuZGxlICppb2gpCiAJICogVGhlIGNhbGxlciBuZWVkcyB0byBwcmV2ZW50IGludGVycnVw dHMgZnJvbSBiZWluZyBwcm9jZXNzZWQsIG90aGVyd2lzZQogCSAqIHRoZSBGRCBjb3VsZCBi ZSBjbG9zZWQgYWdhaW4gYmVmb3JlIHdlIGdldCB0byBleGVjdXRpbmcgdGhlIElPLgogCSAq LwotCUFzc2VydCghSU5URVJSVVBUU19DQU5fQkVfUFJPQ0VTU0VEKCkpOworCUFzc2VydChD aGVja0ZvckludGVycnVwdHNNYXNrID09IDApOwogCiAJaWYgKHNkLT5zbWdyLmlzX3RlbXAp CiAJCXByb2NubyA9IHBnYWlvX2lvX2dldF9vd25lcihpb2gpOwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvc3RvcmFnZS9zeW5jL3N5bmMuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uvc3lu Yy9zeW5jLmMKaW5kZXggYjFhY2NjNjhiOTUuLmZiZWQ3ZDgyZTk4IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9zdG9yYWdlL3N5bmMvc3luYy5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3Jh Z2Uvc3luYy9zeW5jLmMKQEAgLTIyLDEyICsyMiwxMiBAQAogI2luY2x1ZGUgImFjY2Vzcy9j b21taXRfdHMuaCIKICNpbmNsdWRlICJhY2Nlc3MvbXVsdGl4YWN0LmgiCiAjaW5jbHVkZSAi YWNjZXNzL3hsb2cuaCIKKyNpbmNsdWRlICJpcGMvaW50ZXJydXB0LmgiCiAjaW5jbHVkZSAi bWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAicG9ydGFiaWxp dHkvaW5zdHJfdGltZS5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvYmd3cml0ZXIuaCIKICNp bmNsdWRlICJzdG9yYWdlL2ZkLmgiCi0jaW5jbHVkZSAic3RvcmFnZS9sYXRjaC5oIgogI2lu Y2x1ZGUgInN0b3JhZ2UvbWQuaCIKICNpbmNsdWRlICJ1dGlscy9oc2VhcmNoLmgiCiAjaW5j bHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKQEAgLTYxMSw4ICs2MTEsOCBAQCBSZWdpc3RlclN5 bmNSZXF1ZXN0KGNvbnN0IEZpbGVUYWcgKmZ0YWcsIFN5bmNSZXF1ZXN0VHlwZSB0eXBlLAog CQlpZiAocmV0IHx8ICghcmV0ICYmICFyZXRyeU9uRXJyb3IpKQogCQkJYnJlYWs7CiAKLQkJ V2FpdExhdGNoKE5VTEwsIFdMX0VYSVRfT05fUE1fREVBVEggfCBXTF9USU1FT1VULCAxMCwK LQkJCQkgIFdBSVRfRVZFTlRfUkVHSVNURVJfU1lOQ19SRVFVRVNUKTsKKwkJV2FpdEludGVy cnVwdCgwLCBXTF9FWElUX09OX1BNX0RFQVRIIHwgV0xfVElNRU9VVCwgMTAsCisJCQkJCSAg V0FJVF9FVkVOVF9SRUdJU1RFUl9TWU5DX1JFUVVFU1QpOwogCX0KIAogCXJldHVybiByZXQ7 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC90Y29wL2JhY2tlbmRfc3RhcnR1cC5jIGIvc3Jj L2JhY2tlbmQvdGNvcC9iYWNrZW5kX3N0YXJ0dXAuYwppbmRleCA5NGE3YjgzOTU2My4uMjI2 YTNmNDI1MzQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3AvYmFja2VuZF9zdGFydHVw LmMKKysrIGIvc3JjL2JhY2tlbmQvdGNvcC9iYWNrZW5kX3N0YXJ0dXAuYwpAQCAtMTk4LDYg KzE5OCwxNCBAQCBCYWNrZW5kSW5pdGlhbGl6ZShDbGllbnRTb2NrZXQgKmNsaWVudF9zb2Nr LCBDQUNfc3RhdGUgY2FjKQogCUluaXRpYWxpemVUaW1lb3V0cygpOwkJLyogZXN0YWJsaXNo ZXMgU0lHQUxSTSBoYW5kbGVyICovCiAJc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZTdGFy dHVwQmxvY2tTaWcsIE5VTEwpOwogCisJLyoKKwkgKiBGSVhNRTogaW5zdGFsbCBJTlRFUlJV UFRfVEVSTUlOQVRFIGhhbmRsZXIgYXQgbGVhc3Q/IE5vdCByZWFsbHkgbmVlZGVkCisJICog YmVjYXVzZSBubyBvbmUgZWxzZSBjYW4gc2VuZCB1cyBpbnRlcnJ1cHRzIHlldCwgYW5kIHdl IGRvbid0IHJhaXNlIHRoZW0KKwkgKiB3aXRoaW4gdGhlIGJhY2tlbmQgeWV0IGVpdGhlci4g QnV0IGlmIHdlIGNoYW5nZWQgcG9zdG1hc3RlciB0byBzZW5kCisJICogSU5URVJSVVBUX1RF Uk1JTkFURSBkaXJlY3RseSwgZm9yIGV4YW1wbGUsIHdlJ2QgbmVlZCB0byBoYW5kbGUgaXQK KwkgKiBhbHJlYWR5LgorCSAqLworCiAJLyoKIAkgKiBHZXQgdGhlIHJlbW90ZSBob3N0IG5h bWUgYW5kIHBvcnQgZm9yIGxvZ2dpbmcgYW5kIHN0YXR1cyBkaXNwbGF5LgogCSAqLwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jIGIvc3JjL2JhY2tlbmQvdGNv cC9wb3N0Z3Jlcy5jCmluZGV4IDA2YWUxZTNlZGJjLi5jYWRiNGJiMTM0YyAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3Rjb3Av cG9zdGdyZXMuYwpAQCAtNDAsNiArNDAsOCBAQAogI2luY2x1ZGUgImNvbW1hbmRzL2V4cGxh aW5fc3RhdGUuaCIKICNpbmNsdWRlICJjb21tYW5kcy9wcmVwYXJlLmgiCiAjaW5jbHVkZSAi Y29tbW9uL3BnX3BybmcuaCIKKyNpbmNsdWRlICJpcGMvaW50ZXJydXB0LmgiCisjaW5jbHVk ZSAiaXBjL3NpZ25hbF9oYW5kbGVycy5oIgogI2luY2x1ZGUgImppdC9qaXQuaCIKICNpbmNs dWRlICJsaWJwcS9saWJwcS5oIgogI2luY2x1ZGUgImxpYnBxL3BxZm9ybWF0LmgiCkBAIC01 NCw3ICs1Niw2IEBACiAjaW5jbHVkZSAicGdfZ2V0b3B0LmgiCiAjaW5jbHVkZSAicGdfdHJh Y2UuaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKLSNpbmNsdWRlICJwb3N0bWFzdGVyL2ludGVy cnVwdC5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvcG9zdG1hc3Rlci5oIgogI2luY2x1ZGUg InJlcGxpY2F0aW9uL2xvZ2ljYWxsYXVuY2hlci5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9u L2xvZ2ljYWx3b3JrZXIuaCIKQEAgLTE3OSw4ICsxODAsOCBAQCBzdGF0aWMgYm9vbCBJc1Ry YW5zYWN0aW9uRXhpdFN0bXQoTm9kZSAqcGFyc2V0cmVlKTsKIHN0YXRpYyBib29sIElzVHJh bnNhY3Rpb25FeGl0U3RtdExpc3QoTGlzdCAqcHN0bXRzKTsKIHN0YXRpYyBib29sIElzVHJh bnNhY3Rpb25TdG10TGlzdChMaXN0ICpwc3RtdHMpOwogc3RhdGljIHZvaWQgZHJvcF91bm5h bWVkX3N0bXQodm9pZCk7Ci1zdGF0aWMgdm9pZCBQcm9jZXNzUmVjb3ZlcnlDb25mbGljdElu dGVycnVwdHModm9pZCk7Ci1zdGF0aWMgdm9pZCBQcm9jZXNzUmVjb3ZlcnlDb25mbGljdElu dGVycnVwdChSZWNvdmVyeUNvbmZsaWN0UmVhc29uIHJlYXNvbik7CitzdGF0aWMgdm9pZCBQ cm9jZXNzUmVjb3ZlcnlDb25mbGljdEludGVycnVwdCh2b2lkKTsKK3N0YXRpYyB2b2lkIFBy b2Nlc3NSZWNvdmVyeUNvbmZsaWN0KFJlY292ZXJ5Q29uZmxpY3RSZWFzb24gcmVhc29uKTsK IHN0YXRpYyB2b2lkIHJlcG9ydF9yZWNvdmVyeV9jb25mbGljdChSZWNvdmVyeUNvbmZsaWN0 UmVhc29uIHJlYXNvbik7CiBzdGF0aWMgdm9pZCBsb2dfZGlzY29ubmVjdGlvbnMoaW50IGNv ZGUsIERhdHVtIGFyZyk7CiBzdGF0aWMgdm9pZCBlbmFibGVfc3RhdGVtZW50X3RpbWVvdXQo dm9pZCk7CkBAIC0zMzYsOCArMzM3LDYgQEAgaW50ZXJhY3RpdmVfZ2V0Yyh2b2lkKQogCiAJ YyA9IGdldGMoc3RkaW4pOwogCi0JUHJvY2Vzc0NsaWVudFJlYWRJbnRlcnJ1cHQoZmFsc2Up OwotCiAJcmV0dXJuIGM7CiB9CiAKQEAgLTM1NCwxMSArMzUzLDIzIEBAIFNvY2tldEJhY2tl bmQoU3RyaW5nSW5mbyBpbkJ1ZikKIHsKIAlpbnQJCQlxdHlwZTsKIAlpbnQJCQltYXhtc2ds ZW47CisJYm9vbAkJc2F2ZV9xdWVyeV9jYW5jZWxfZW5hYmxlZDsKKworCS8qCisJICogRG9u J3QgYWxsb3cgcXVlcnkgY2FuY2VsIGludGVycnVwdHMgd2hpbGUgcmVhZGluZyBpbnB1dCBm cm9tIHRoZQorCSAqIGNsaWVudCwgYmVjYXVzZSB3ZSBtaWdodCBsb3NlIHN5bmMgaW4gdGhl IEZFL0JFIHByb3RvY29sLiAgKERpZQorCSAqIGludGVycnVwdHMgYXJlIE9LLCBiZWNhdXNl IHdlIHdvbid0IHJlYWQgYW55IGZ1cnRoZXIgbWVzc2FnZXMgZnJvbSB0aGUKKwkgKiBjbGll bnQgaW4gdGhhdCBjYXNlLikKKwkgKgorCSAqIFNlZSBzaW1pbGFyIGxvZ2ljIGluIFByb2Nl c3NSZWNvdmVyeUNvbmZsaWN0SW50ZXJydXB0KCkuCisJICovCisJc2F2ZV9xdWVyeV9jYW5j ZWxfZW5hYmxlZCA9IChFbmFibGVkSW50ZXJydXB0c01hc2sgJiBJTlRFUlJVUFRfUVVFUllf Q0FOQ0VMKSAhPSAwOworCWlmIChzYXZlX3F1ZXJ5X2NhbmNlbF9lbmFibGVkKQorCQlEaXNh YmxlSW50ZXJydXB0KElOVEVSUlVQVF9RVUVSWV9DQU5DRUwpOwogCiAJLyoKIAkgKiBHZXQg bWVzc2FnZSB0eXBlIGNvZGUgZnJvbSB0aGUgZnJvbnRlbmQuCiAJICovCi0JSE9MRF9DQU5D RUxfSU5URVJSVVBUUygpOwogCXBxX3N0YXJ0bXNncmVhZCgpOwogCXF0eXBlID0gcHFfZ2V0 Ynl0ZSgpOwogCkBAIC00NjUsNyArNDc2LDkgQEAgU29ja2V0QmFja2VuZChTdHJpbmdJbmZv IGluQnVmKQogCSAqLwogCWlmIChwcV9nZXRtZXNzYWdlKGluQnVmLCBtYXhtc2dsZW4pKQog CQlyZXR1cm4gRU9GOwkJCQkvKiBzdWl0YWJsZSBtZXNzYWdlIGFscmVhZHkgbG9nZ2VkICov Ci0JUkVTVU1FX0NBTkNFTF9JTlRFUlJVUFRTKCk7CisKKwlpZiAoc2F2ZV9xdWVyeV9jYW5j ZWxfZW5hYmxlZCkKKwkJRW5hYmxlSW50ZXJydXB0KElOVEVSUlVQVF9RVUVSWV9DQU5DRUwp OwogCiAJcmV0dXJuIHF0eXBlOwogfQpAQCAtNDg5LDEwNCArNTAyLDYgQEAgUmVhZENvbW1h bmQoU3RyaW5nSW5mbyBpbkJ1ZikKIAlyZXR1cm4gcmVzdWx0OwogfQogCi0vKgotICogUHJv Y2Vzc0NsaWVudFJlYWRJbnRlcnJ1cHQoKSAtIFByb2Nlc3MgaW50ZXJydXB0cyBzcGVjaWZp YyB0byBjbGllbnQgcmVhZHMKLSAqCi0gKiBUaGlzIGlzIGNhbGxlZCBqdXN0IGJlZm9yZSBh bmQgYWZ0ZXIgbG93LWxldmVsIHJlYWRzLgotICogJ2Jsb2NrZWQnIGlzIHRydWUgaWYgbm8g ZGF0YSB3YXMgYXZhaWxhYmxlIHRvIHJlYWQgYW5kIHdlIHBsYW4gdG8gcmV0cnksCi0gKiBm YWxzZSBpZiBhYm91dCB0byByZWFkIG9yIGRvbmUgcmVhZGluZy4KLSAqCi0gKiBNdXN0IHBy ZXNlcnZlIGVycm5vIQotICovCi12b2lkCi1Qcm9jZXNzQ2xpZW50UmVhZEludGVycnVwdChi b29sIGJsb2NrZWQpCi17Ci0JaW50CQkJc2F2ZV9lcnJubyA9IGVycm5vOwotCi0JaWYgKERv aW5nQ29tbWFuZFJlYWQpCi0JewotCQkvKiBDaGVjayBmb3IgZ2VuZXJhbCBpbnRlcnJ1cHRz IHRoYXQgYXJyaXZlZCBiZWZvcmUvd2hpbGUgcmVhZGluZyAqLwotCQlDSEVDS19GT1JfSU5U RVJSVVBUUygpOwotCi0JCS8qIFByb2Nlc3Mgc2ludmFsIGNhdGNodXAgaW50ZXJydXB0cywg aWYgYW55ICovCi0JCWlmIChjYXRjaHVwSW50ZXJydXB0UGVuZGluZykKLQkJCVByb2Nlc3ND YXRjaHVwSW50ZXJydXB0KCk7Ci0KLQkJLyogUHJvY2VzcyBub3RpZnkgaW50ZXJydXB0cywg aWYgYW55ICovCi0JCWlmIChub3RpZnlJbnRlcnJ1cHRQZW5kaW5nKQotCQkJUHJvY2Vzc05v dGlmeUludGVycnVwdCh0cnVlKTsKLQl9Ci0JZWxzZSBpZiAoUHJvY0RpZVBlbmRpbmcpCi0J ewotCQkvKgotCQkgKiBXZSdyZSBkeWluZy4gIElmIHRoZXJlIGlzIG5vIGRhdGEgYXZhaWxh YmxlIHRvIHJlYWQsIHRoZW4gaXQncyBzYWZlCi0JCSAqIChhbmQgc2FuZSkgdG8gaGFuZGxl IHRoYXQgbm93LiAgSWYgd2UgaGF2ZW4ndCB0cmllZCB0byByZWFkIHlldCwKLQkJICogbWFr ZSBzdXJlIHRoZSBwcm9jZXNzIGxhdGNoIGlzIHNldCwgc28gdGhhdCBpZiB0aGVyZSBpcyBu byBkYXRhCi0JCSAqIHRoZW4gd2UnbGwgY29tZSBiYWNrIGhlcmUgYW5kIGRpZS4gIElmIHdl J3JlIGRvbmUgcmVhZGluZywgYWxzbwotCQkgKiBtYWtlIHN1cmUgdGhlIHByb2Nlc3MgbGF0 Y2ggaXMgc2V0LCBhcyB3ZSBtaWdodCd2ZSB1bmRlc2lyYWJseQotCQkgKiBjbGVhcmVkIGl0 IHdoaWxlIHJlYWRpbmcuCi0JCSAqLwotCQlpZiAoYmxvY2tlZCkKLQkJCUNIRUNLX0ZPUl9J TlRFUlJVUFRTKCk7Ci0JCWVsc2UKLQkJCVNldExhdGNoKE15TGF0Y2gpOwotCX0KLQotCWVy cm5vID0gc2F2ZV9lcnJubzsKLX0KLQotLyoKLSAqIFByb2Nlc3NDbGllbnRXcml0ZUludGVy cnVwdCgpIC0gUHJvY2VzcyBpbnRlcnJ1cHRzIHNwZWNpZmljIHRvIGNsaWVudCB3cml0ZXMK LSAqCi0gKiBUaGlzIGlzIGNhbGxlZCBqdXN0IGJlZm9yZSBhbmQgYWZ0ZXIgbG93LWxldmVs IHdyaXRlcy4KLSAqICdibG9ja2VkJyBpcyB0cnVlIGlmIG5vIGRhdGEgY291bGQgYmUgd3Jp dHRlbiBhbmQgd2UgcGxhbiB0byByZXRyeSwKLSAqIGZhbHNlIGlmIGFib3V0IHRvIHdyaXRl IG9yIGRvbmUgd3JpdGluZy4KLSAqCi0gKiBNdXN0IHByZXNlcnZlIGVycm5vIQotICovCi12 b2lkCi1Qcm9jZXNzQ2xpZW50V3JpdGVJbnRlcnJ1cHQoYm9vbCBibG9ja2VkKQotewotCWlu dAkJCXNhdmVfZXJybm8gPSBlcnJubzsKLQotCWlmIChQcm9jRGllUGVuZGluZykKLQl7Ci0J CS8qCi0JCSAqIFdlJ3JlIGR5aW5nLiAgSWYgaXQncyBub3QgcG9zc2libGUgdG8gd3JpdGUs IHRoZW4gd2Ugc2hvdWxkIGhhbmRsZQotCQkgKiB0aGF0IGltbWVkaWF0ZWx5LCBlbHNlIGEg c3R1Y2sgY2xpZW50IGNvdWxkIGluZGVmaW5pdGVseSBkZWxheSBvdXIKLQkJICogcmVzcG9u c2UgdG8gdGhlIHNpZ25hbC4gIElmIHdlIGhhdmVuJ3QgdHJpZWQgdG8gd3JpdGUgeWV0LCBt YWtlCi0JCSAqIHN1cmUgdGhlIHByb2Nlc3MgbGF0Y2ggaXMgc2V0LCBzbyB0aGF0IGlmIHRo ZSB3cml0ZSB3b3VsZCBibG9jawotCQkgKiB0aGVuIHdlJ2xsIGNvbWUgYmFjayBoZXJlIGFu ZCBkaWUuICBJZiB3ZSdyZSBkb25lIHdyaXRpbmcsIGFsc28KLQkJICogbWFrZSBzdXJlIHRo ZSBwcm9jZXNzIGxhdGNoIGlzIHNldCwgYXMgd2UgbWlnaHQndmUgdW5kZXNpcmFibHkKLQkJ ICogY2xlYXJlZCBpdCB3aGlsZSB3cml0aW5nLgotCQkgKi8KLQkJaWYgKGJsb2NrZWQpCi0J CXsKLQkJCS8qCi0JCQkgKiBEb24ndCBtZXNzIHdpdGggd2hlcmVUb1NlbmRPdXRwdXQgaWYg UHJvY2Vzc0ludGVycnVwdHMgd291bGRuJ3QKLQkJCSAqIHNlcnZpY2UgUHJvY0RpZVBlbmRp bmcuCi0JCQkgKi8KLQkJCWlmIChJbnRlcnJ1cHRIb2xkb2ZmQ291bnQgPT0gMCAmJiBDcml0 U2VjdGlvbkNvdW50ID09IDApCi0JCQl7Ci0JCQkJLyoKLQkJCQkgKiBXZSBkb24ndCB3YW50 IHRvIHNlbmQgdGhlIGNsaWVudCB0aGUgZXJyb3IgbWVzc2FnZSwgYXMgYSkKLQkJCQkgKiB0 aGF0IHdvdWxkIHBvc3NpYmx5IGJsb2NrIGFnYWluLCBhbmQgYikgaXQgd291bGQgbGlrZWx5 Ci0JCQkJICogbGVhZCB0byBsb3NzIG9mIHByb3RvY29sIHN5bmMgYmVjYXVzZSB3ZSBtYXkg aGF2ZSBhbHJlYWR5Ci0JCQkJICogc2VudCBhIHBhcnRpYWwgcHJvdG9jb2wgbWVzc2FnZS4K LQkJCQkgKi8KLQkJCQlpZiAod2hlcmVUb1NlbmRPdXRwdXQgPT0gRGVzdFJlbW90ZSkKLQkJ CQkJd2hlcmVUb1NlbmRPdXRwdXQgPSBEZXN0Tm9uZTsKLQotCQkJCUNIRUNLX0ZPUl9JTlRF UlJVUFRTKCk7Ci0JCQl9Ci0JCX0KLQkJZWxzZQotCQkJU2V0TGF0Y2goTXlMYXRjaCk7Ci0J fQotCi0JZXJybm8gPSBzYXZlX2Vycm5vOwotfQotCiAvKgogICogRG8gcmF3IHBhcnNpbmcg KG9ubHkpLgogICoKQEAgLTI5MTEsNyArMjgyNiw3IEBAIGRyb3BfdW5uYW1lZF9zdG10KHZv aWQpCiAgKiBFaXRoZXIgc29tZSBiYWNrZW5kIGhhcyBib3VnaHQgdGhlIGZhcm0sIG9yIHdl J3ZlIGJlZW4gdG9sZCB0byBzaHV0IGRvd24KICAqICJpbW1lZGlhdGVseSI7IHNvIHdlIG5l ZWQgdG8gc3RvcCB3aGF0IHdlJ3JlIGRvaW5nIGFuZCBleGl0LgogICovCi12b2lkCitzdGF0 aWMgdm9pZAogcXVpY2tkaWUoU0lHTkFMX0FSR1MpCiB7CiAJc2lnYWRkc2V0KCZCbG9ja1Np ZywgU0lHUVVJVCk7CS8qIHByZXZlbnQgbmVzdGVkIGNhbGxzICovCkBAIC0zMDA4LDUwICsy OTIzLDI2IEBAIHF1aWNrZGllKFNJR05BTF9BUkdTKQogICogU2h1dGRvd24gc2lnbmFsIGZy b20gcG9zdG1hc3RlcjogYWJvcnQgdHJhbnNhY3Rpb24gYW5kIGV4aXQKICAqIGF0IHNvb25l c3QgY29udmVuaWVudCB0aW1lCiAgKi8KLXZvaWQKK3N0YXRpYyB2b2lkCiBkaWUoU0lHTkFM X0FSR1MpCiB7Ci0JLyogRG9uJ3Qgam9nZ2xlIHRoZSBlbGJvdyBvZiBwcm9jX2V4aXQgKi8K LQlpZiAoIXByb2NfZXhpdF9pbnByb2dyZXNzKQotCXsKLQkJSW50ZXJydXB0UGVuZGluZyA9 IHRydWU7Ci0JCVByb2NEaWVQZW5kaW5nID0gdHJ1ZTsKLQl9Ci0KIAkvKiBmb3IgdGhlIGN1 bXVsYXRpdmUgc3RhdHMgc3lzdGVtICovCiAJcGdTdGF0U2Vzc2lvbkVuZENhdXNlID0gRElT Q09OTkVDVF9LSUxMRUQ7CiAKLQkvKiBJZiB3ZSdyZSBzdGlsbCBoZXJlLCB3YWtlbiBhbnl0 aGluZyB3YWl0aW5nIG9uIHRoZSBwcm9jZXNzIGxhdGNoICovCi0JU2V0TGF0Y2goTXlMYXRj aCk7CisJLyogRG9uJ3Qgam9nZ2xlIHRoZSBlbGJvdyBvZiBwcm9jX2V4aXQgKi8KKwlpZiAo cHJvY19leGl0X2lucHJvZ3Jlc3MpCisJCXJldHVybjsKKworCVJhaXNlSW50ZXJydXB0KElO VEVSUlVQVF9URVJNSU5BVEUpOwogCiAJLyoKIAkgKiBJZiB3ZSdyZSBpbiBzaW5nbGUgdXNl ciBtb2RlLCB3ZSB3YW50IHRvIHF1aXQgaW1tZWRpYXRlbHkgLSB3ZSBjYW4ndAotCSAqIHJl bHkgb24gbGF0Y2hlcyBhcyB0aGV5IHdvdWxkbid0IHdvcmsgd2hlbiBzdGRpbi9zdGRvdXQg aXMgYSBmaWxlLgorCSAqIHJlbHkgb24gaW50ZXJydXB0cyBhcyB0aGV5IHdvdWxkbid0IHdv cmsgd2hlbiBzdGRpbi9zdGRvdXQgaXMgYSBmaWxlLgogCSAqIFJhdGhlciB1Z2x5LCBidXQg aXQncyB1bmxpa2VseSB0byBiZSB3b3J0aHdoaWxlIHRvIGludmVzdCBtdWNoIG1vcmUKIAkg KiBlZmZvcnQganVzdCBmb3IgdGhlIGJlbmVmaXQgb2Ygc2luZ2xlIHVzZXIgbW9kZS4KIAkg Ki8KIAlpZiAoRG9pbmdDb21tYW5kUmVhZCAmJiB3aGVyZVRvU2VuZE91dHB1dCAhPSBEZXN0 UmVtb3RlKQotCQlQcm9jZXNzSW50ZXJydXB0cygpOwotfQotCi0vKgotICogUXVlcnktY2Fu Y2VsIHNpZ25hbCBmcm9tIHBvc3RtYXN0ZXI6IGFib3J0IGN1cnJlbnQgdHJhbnNhY3Rpb24K LSAqIGF0IHNvb25lc3QgY29udmVuaWVudCB0aW1lCi0gKi8KLXZvaWQKLVN0YXRlbWVudENh bmNlbEhhbmRsZXIoU0lHTkFMX0FSR1MpCi17Ci0JLyoKLQkgKiBEb24ndCBqb2dnbGUgdGhl IGVsYm93IG9mIHByb2NfZXhpdAotCSAqLwotCWlmICghcHJvY19leGl0X2lucHJvZ3Jlc3Mp Ci0JewotCQlJbnRlcnJ1cHRQZW5kaW5nID0gdHJ1ZTsKLQkJUXVlcnlDYW5jZWxQZW5kaW5n ID0gdHJ1ZTsKLQl9Ci0KLQkvKiBJZiB3ZSdyZSBzdGlsbCBoZXJlLCB3YWtlbiBhbnl0aGlu ZyB3YWl0aW5nIG9uIHRoZSBwcm9jZXNzIGxhdGNoICovCi0JU2V0TGF0Y2goTXlMYXRjaCk7 CisJCVByb2Nlc3NUZXJtaW5hdGVJbnRlcnJ1cHQoKTsKIH0KIAogLyogc2lnbmFsIGhhbmRs ZXIgZm9yIGZsb2F0aW5nIHBvaW50IGV4Y2VwdGlvbiAqLwpAQCAtMzA2OCwyMiArMjk1OSw4 NSBAQCBGbG9hdEV4Y2VwdGlvbkhhbmRsZXIoU0lHTkFMX0FSR1MpCiB9CiAKIC8qCi0gKiBU ZWxsIHRoZSBuZXh0IENIRUNLX0ZPUl9JTlRFUlJVUFRTKCkgdG8gY2hlY2sgZm9yIGEgcGFy dGljdWxhciB0eXBlIG9mIFhYWAotICogcmVjb3ZlcnkgY29uZmxpY3QuICBSdW5zIGluIGEg U0lHVVNSMSBoYW5kbGVyLgorICogU2V0IHRoZSAic3RhbmRhcmQiIHNldCBvZiBpbnRlcnJ1 cHQgaGFuZGxlcnMsIHRvIGhhbmRsZSBjb21tb24gaW50ZXJydXB0cworICogdGhhdCBzaG91 bGQgYmUgaGFuZGxlZCBieSBhbGwgb3IgbW9zdCBjaGlsZCBwcm9jZXNzZXMuCisgKgorICog VGhlIGNhbGxlciBtYXkgbW9kaWZ5IHRoZSBkZWZhdWx0cyBhZnRlciBjYWxsaW5nIHRoaXMg d2l0aCBmdXJ0aGVyCisgKiBTZXRJbnRlcnJ1cHRIYW5kbGVyKCkgb3IgRW5hYmxlL0Rpc2Fi bGVJbnRlcnJ1cHQoKSBjYWxscy4KICAqLwogdm9pZAotSGFuZGxlUmVjb3ZlcnlDb25mbGlj dEludGVycnVwdCh2b2lkKQorU2V0U3RhbmRhcmRJbnRlcnJ1cHRIYW5kbGVycyh2b2lkKQog ewotCWlmIChwZ19hdG9taWNfcmVhZF91MzIoJk15UHJvYy0+cGVuZGluZ1JlY292ZXJ5Q29u ZmxpY3RzKSAhPSAwKQotCQlJbnRlcnJ1cHRQZW5kaW5nID0gdHJ1ZTsKLQkvKiBsYXRjaCB3 aWxsIGJlIHNldCBieSBwcm9jc2lnbmFsX3NpZ3VzcjFfaGFuZGxlciAqLworCS8qIEFsbCBw cm9jZXNzZXMgc2hvdWxkIHJlYWN0IHRvIGJhcnJpZXJzIGFuZCBtZW1vcnkgY29udGV4dCBk ZWJ1Z2dpbmcgKi8KKwlTZXRJbnRlcnJ1cHRIYW5kbGVyKElOVEVSUlVQVF9CQVJSSUVSLCBQ cm9jZXNzUHJvY1NpZ25hbEJhcnJpZXIpOworCUVuYWJsZUludGVycnVwdChJTlRFUlJVUFRf QkFSUklFUik7CisJU2V0SW50ZXJydXB0SGFuZGxlcihJTlRFUlJVUFRfTE9HX01FTU9SWV9D T05URVhULCBQcm9jZXNzTG9nTWVtb3J5Q29udGV4dEludGVycnVwdCk7CisJRW5hYmxlSW50 ZXJydXB0KElOVEVSUlVQVF9MT0dfTUVNT1JZX0NPTlRFWFQpOworCisJLyoKKwkgKiBDYXRj aHVwIGludGVycnVwdHMgbXVzdCBiZSBoYW5kbGVkIGluIGFueXRoaW5nIHRoYXQgcGFydGlj aXBhdGVzIGluCisJICogc2hhcmVkIGludmFsaWRhdGlvbgorCSAqLworCS8qIFhYWDogZG9u ZSBpbiBzaW52YWxhZHQuYyAqLworCS8qIFNldEludGVycnVwdEhhbmRsZXIoSU5URVJSVVBU X1NJTlZBTF9DQVRDSFVQLCBQcm9jZXNzQ2F0Y2h1cEludGVycnVwdCk7ICovCisKKwkvKgor CSAqIEV2ZXJ5IHByb2Nlc3Mgc2hvdWxkIHJlYWN0IHRvIElOVEVSUlVQVF9URVJNSU5BVEUu IEJ1dCBtYW55IHByb2Nlc3NlcworCSAqIGRpc2FibGUgdGhpcyBhbmQgZG8gdGhlaXIgb3du IGNoZWNrcyBhdCBhcHByb3ByaWF0ZSB0aW1lcy4KKwkgKi8KKwlTZXRJbnRlcnJ1cHRIYW5k bGVyKElOVEVSUlVQVF9URVJNSU5BVEUsIFByb2Nlc3NUZXJtaW5hdGVJbnRlcnJ1cHQpOwor CUVuYWJsZUludGVycnVwdChJTlRFUlJVUFRfVEVSTUlOQVRFKTsKKworCS8qCisJICogQmFj a2VuZHMgYW5kIHByb2Nlc3NlcyB0aGF0IGNvbm5lY3QgdG8gYSBwYXJ0aWN1bGFyIGRhdGFi YXNlIGNhbgorCSAqIGNvbmZsaWN0IHdpdGggcmVjb3ZlcnkKKwkgKgorCSAqIHh4eDogU2V0 IHRoaXMgaW4gSW5pdFBvc3RncmVzIGlmIHdlJ3JlIGNvbm5lY3RpbmcgdG8gYSBwYXJ0aWN1 bGFyCisJICogZGF0YWJhc2U/CisJICovCisJU2V0SW50ZXJydXB0SGFuZGxlcihJTlRFUlJV UFRfUkVDT1ZFUllfQ09ORkxJQ1QsIFByb2Nlc3NSZWNvdmVyeUNvbmZsaWN0SW50ZXJydXB0 KTsKKwlFbmFibGVJbnRlcnJ1cHQoSU5URVJSVVBUX1JFQ09WRVJZX0NPTkZMSUNUKTsKKwor CS8qCisJICogQWxsIHByb2Nlc3NlcyBzaG91bGQgaGFuZGxlIGNvbmZpZyByZWxvYWRzLiBC dXQgdXN1YWxseSBvbmx5IGluCisJICogc3BlY2lmaWMgc3BvdHMsIGxpa2Ugd2hlbiBub3Qg aW4gYSB0cmFuc2FjdGlvbiwgc28gdGhpcyBpcyBkaXNhYmxlZCBieQorCSAqIGRlZmF1bHQu CisJICoKKwkgKiBUaGlzIHJlbGllcyBvbiB0aGUgU0lHSFVQIHNpZ25hbCBoYW5kbGVyIHRv IHJhaXNlCisJICogSU5URVJSVVBUX0NPTkZJR19SRUxPQUQgb24gU0lHSFVQLgorCSAqLwor CVNldEludGVycnVwdEhhbmRsZXIoSU5URVJSVVBUX0NPTkZJR19SRUxPQUQsIFByb2Nlc3ND b25maWdSZWxvYWRJbnRlcnJ1cHQpOwogfQogCiAvKgotICogQ2hlY2sgb25lIGluZGl2aWR1 YWwgY29uZmxpY3QgcmVhc29uLgorICogQ2hlY2sgZWFjaCBwb3NzaWJsZSByZWNvdmVyeSBj b25mbGljdCByZWFzb24uCiAgKi8KIHN0YXRpYyB2b2lkCi1Qcm9jZXNzUmVjb3ZlcnlDb25m bGljdEludGVycnVwdChSZWNvdmVyeUNvbmZsaWN0UmVhc29uIHJlYXNvbikKK1Byb2Nlc3NS ZWNvdmVyeUNvbmZsaWN0SW50ZXJydXB0KHZvaWQpCit7CisJdWludDMyCQlwZW5kaW5nOwor CisJLyogQXJlIGFueSByZWNvdmVyeSBjb25mbGljdHMgcGVuZGluZz8gKi8KKwlwZW5kaW5n ID0gcGdfYXRvbWljX3JlYWRfbWVtYmFycmllcl91MzIoJk15UHJvYy0+cGVuZGluZ1JlY292 ZXJ5Q29uZmxpY3RzKTsKKwlpZiAocGVuZGluZyA9PSAwKQorCQlyZXR1cm47CisKKwlmb3Ig KFJlY292ZXJ5Q29uZmxpY3RSZWFzb24gcmVhc29uID0gMDsKKwkJIHJlYXNvbiA8IE5VTV9S RUNPVkVSWV9DT05GTElDVF9SRUFTT05TOworCQkgcmVhc29uKyspCisJeworCQlpZiAoKHBl bmRpbmcgJiAoMSA8PCByZWFzb24pKSAhPSAwKQorCQl7CisJCQkvKiBjbGVhciB0aGUgZmxh ZyAqLworCQkJKHZvaWQpIHBnX2F0b21pY19mZXRjaF9hbmRfdTMyKCZNeVByb2MtPnBlbmRp bmdSZWNvdmVyeUNvbmZsaWN0cywgfigxIDw8IHJlYXNvbikpOworCisJCQlQcm9jZXNzUmVj b3ZlcnlDb25mbGljdChyZWFzb24pOworCQl9CisJfQorfQorCit2b2lkCitQcm9jZXNzUmVj b3ZlcnlDb25mbGljdChSZWNvdmVyeUNvbmZsaWN0UmVhc29uIHJlYXNvbikKIHsKIAlzd2l0 Y2ggKHJlYXNvbikKIAl7CkBAIC0zMjQ2LDE0ICszMjAwLDE0IEBAIHJlcG9ydF9yZWNvdmVy eV9jb25mbGljdChSZWNvdmVyeUNvbmZsaWN0UmVhc29uIHJlYXNvbikKIAkJaWYgKCFEb2lu Z0NvbW1hbmRSZWFkKQogCQl7CiAJCQkvKiBBdm9pZCBsb3Npbmcgc3luYyBpbiB0aGUgRkUv QkUgcHJvdG9jb2wuICovCi0JCQlpZiAoUXVlcnlDYW5jZWxIb2xkb2ZmQ291bnQgIT0gMCkK KwkJCWlmICghSU5URVJSVVBUU19DQU5fQkVfUFJPQ0VTU0VEKElOVEVSUlVQVF9RVUVSWV9D QU5DRUwpKQogCQkJewogCQkJCS8qCiAJCQkJICogUmUtYXJtIGFuZCBkZWZlciB0aGlzIGlu dGVycnVwdCB1bnRpbCBsYXRlci4gIFNlZSBzaW1pbGFyCiAJCQkJICogY29kZSBpbiBQcm9j ZXNzSW50ZXJydXB0cygpLgogCQkJCSAqLwogCQkJCSh2b2lkKSBwZ19hdG9taWNfZmV0Y2hf b3JfdTMyKCZNeVByb2MtPnBlbmRpbmdSZWNvdmVyeUNvbmZsaWN0cywgKDEgPDwgcmVhc29u KSk7Ci0JCQkJSW50ZXJydXB0UGVuZGluZyA9IHRydWU7CisJCQkJUmFpc2VJbnRlcnJ1cHQo SU5URVJSVVBUX1JFQ09WRVJZX0NPTkZMSUNUKTsKIAkJCQlyZXR1cm47CiAJCQl9CiAKQEAg LTMyODAsNjYgKzMyMzQsMzEgQEAgcmVwb3J0X3JlY292ZXJ5X2NvbmZsaWN0KFJlY292ZXJ5 Q29uZmxpY3RSZWFzb24gcmVhc29uKQogCQkJCQkgIiBkYXRhYmFzZSBhbmQgcmVwZWF0IHlv dXIgY29tbWFuZC4iKSkpOwogfQogCi0vKgotICogQ2hlY2sgZWFjaCBwb3NzaWJsZSByZWNv dmVyeSBjb25mbGljdCByZWFzb24uCi0gKi8KLXN0YXRpYyB2b2lkCi1Qcm9jZXNzUmVjb3Zl cnlDb25mbGljdEludGVycnVwdHModm9pZCkKK3ZvaWQKK1Byb2Nlc3NDb25maWdSZWxvYWRJ bnRlcnJ1cHQodm9pZCkKIHsKLQl1aW50MzIJCXBlbmRpbmc7CisJUHJvY2Vzc0NvbmZpZ0Zp bGUoUEdDX1NJR0hVUCk7Cit9CiAKK3ZvaWQKK1Byb2Nlc3NBc3luY05vdGlmeUludGVycnVw dCh2b2lkKQorewogCS8qCi0JICogV2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBqb2dn bGluZyB0aGUgZWxib3cgb2YgcHJvY19leGl0LCBiZWNhdXNlCi0JICogcHJvY19leGl0X3By ZXBhcmUoKSBob2xkcyBpbnRlcnJ1cHRzLCBzbyBQcm9jZXNzSW50ZXJydXB0cygpIHdvbid0 IGNhbGwKLQkgKiB1cy4KKwkgKiBUaGlzIGlzIG9ubHkgZW5hYmxlZCB3aGlsZSBEb2luZ0Nv bW1hbmRSZWFkLCBzbyB3ZSB3YW50IHRvIGZsdXNoIHRoZQorCSAqIGFzeW5jIG5vdGlmeSB0 byB0aGUgY2xpZW50IGltbWVkaWF0ZWx5CiAJICovCi0JQXNzZXJ0KCFwcm9jX2V4aXRfaW5w cm9ncmVzcyk7Ci0JQXNzZXJ0KEludGVycnVwdEhvbGRvZmZDb3VudCA9PSAwKTsKLQotCS8q IEFyZSBhbnkgcmVjb3ZlcnkgY29uZmxpY3QgcGVuZGluZz8gKi8KLQlwZW5kaW5nID0gcGdf YXRvbWljX3JlYWRfbWVtYmFycmllcl91MzIoJk15UHJvYy0+cGVuZGluZ1JlY292ZXJ5Q29u ZmxpY3RzKTsKLQlpZiAocGVuZGluZyA9PSAwKQotCQlyZXR1cm47Ci0KLQlmb3IgKFJlY292 ZXJ5Q29uZmxpY3RSZWFzb24gcmVhc29uID0gMDsKLQkJIHJlYXNvbiA8IE5VTV9SRUNPVkVS WV9DT05GTElDVF9SRUFTT05TOwotCQkgcmVhc29uKyspCi0JewotCQlpZiAoKHBlbmRpbmcg JiAoMSA8PCByZWFzb24pKSAhPSAwKQotCQl7Ci0JCQkvKiBjbGVhciB0aGUgZmxhZyAqLwot CQkJKHZvaWQpIHBnX2F0b21pY19mZXRjaF9hbmRfdTMyKCZNeVByb2MtPnBlbmRpbmdSZWNv dmVyeUNvbmZsaWN0cywgfigxIDw8IHJlYXNvbikpOwotCi0JCQlQcm9jZXNzUmVjb3ZlcnlD b25mbGljdEludGVycnVwdChyZWFzb24pOwotCQl9Ci0JfQorCUFzc2VydChEb2luZ0NvbW1h bmRSZWFkKTsKKwlQcm9jZXNzTm90aWZ5SW50ZXJydXB0KHRydWUpOwogfQogCi0vKgotICog UHJvY2Vzc0ludGVycnVwdHM6IG91dC1vZi1saW5lIHBvcnRpb24gb2YgQ0hFQ0tfRk9SX0lO VEVSUlVQVFMoKSBtYWNybwotICoKLSAqIElmIGFuIGludGVycnVwdCBjb25kaXRpb24gaXMg cGVuZGluZywgYW5kIGl0J3Mgc2FmZSB0byBzZXJ2aWNlIGl0LAotICogdGhlbiBjbGVhciB0 aGUgZmxhZyBhbmQgYWNjZXB0IHRoZSBpbnRlcnJ1cHQuICBDYWxsZWQgb25seSB3aGVuCi0g KiBJbnRlcnJ1cHRQZW5kaW5nIGlzIHRydWUuCi0gKgotICogTm90ZTogaWYgSU5URVJSVVBU U19DQU5fQkVfUFJPQ0VTU0VEKCkgaXMgdHJ1ZSwgdGhlbiBQcm9jZXNzSW50ZXJydXB0cwot ICogaXMgZ3VhcmFudGVlZCB0byBjbGVhciB0aGUgSW50ZXJydXB0UGVuZGluZyBmbGFnIGJl Zm9yZSByZXR1cm5pbmcuCi0gKiAoVGhpcyBpcyBub3QgdGhlIHNhbWUgYXMgZ3VhcmFudGVl aW5nIHRoYXQgaXQncyBzdGlsbCBjbGVhciB3aGVuIHdlCi0gKiByZXR1cm47IGFub3RoZXIg aW50ZXJydXB0IGNvdWxkIGhhdmUgYXJyaXZlZC4gIEJ1dCB3ZSBwcm9taXNlIHRoYXQKLSAq IGFueSBwcmUtZXhpc3Rpbmcgb25lIHdpbGwgaGF2ZSBiZWVuIHNlcnZpY2VkLikKLSAqLwog dm9pZAotUHJvY2Vzc0ludGVycnVwdHModm9pZCkKK1Byb2Nlc3NUZXJtaW5hdGVJbnRlcnJ1 cHQodm9pZCkKIHsKIAkvKiBPSyB0byBhY2NlcHQgYW55IGludGVycnVwdHMgbm93PyAqLwot CWlmIChJbnRlcnJ1cHRIb2xkb2ZmQ291bnQgIT0gMCB8fCBDcml0U2VjdGlvbkNvdW50ICE9 IDApCi0JCXJldHVybjsKLQlJbnRlcnJ1cHRQZW5kaW5nID0gZmFsc2U7CisJQXNzZXJ0KElu dGVycnVwdEhvbGRvZmZDb3VudCA9PSAwKTsKKwlBc3NlcnQoQ3JpdFNlY3Rpb25Db3VudCA9 PSAwKTsKIAotCWlmIChQcm9jRGllUGVuZGluZykKIAl7Ci0JCVByb2NEaWVQZW5kaW5nID0g ZmFsc2U7Ci0JCVF1ZXJ5Q2FuY2VsUGVuZGluZyA9IGZhbHNlOyAvKiBQcm9jRGllIHRydW1w cyBRdWVyeUNhbmNlbCAqLwogCQlMb2NrRXJyb3JDbGVhbnVwKCk7CiAJCS8qIEFzIGluIHF1 aWNrZGllLCBkb24ndCByaXNrIHNlbmRpbmcgdG8gY2xpZW50IGR1cmluZyBhdXRoICovCiAJ CWlmIChDbGllbnRBdXRoSW5Qcm9ncmVzcyAmJiB3aGVyZVRvU2VuZE91dHB1dCA9PSBEZXN0 UmVtb3RlKQpAQCAtMzM4OCw2NSArMzMwNyw1NSBAQCBQcm9jZXNzSW50ZXJydXB0cyh2b2lk KQogCQkJCQkoZXJyY29kZShFUlJDT0RFX0FETUlOX1NIVVRET1dOKSwKIAkJCQkJIGVycm1z ZygidGVybWluYXRpbmcgY29ubmVjdGlvbiBkdWUgdG8gYWRtaW5pc3RyYXRvciBjb21tYW5k IikpKTsKIAl9Cit9CiAKLQlpZiAoQ2hlY2tDbGllbnRDb25uZWN0aW9uUGVuZGluZykKLQl7 Ci0JCUNoZWNrQ2xpZW50Q29ubmVjdGlvblBlbmRpbmcgPSBmYWxzZTsKLQotCQkvKgotCQkg KiBDaGVjayBmb3IgbG9zdCBjb25uZWN0aW9uIGFuZCByZS1hcm0sIGlmIHN0aWxsIGNvbmZp Z3VyZWQsIGJ1dCBub3QKLQkJICogaWYgd2UndmUgYXJyaXZlZCBiYWNrIGF0IERvaW5nQ29t bWFuZFJlYWQgc3RhdGUuICBXZSBkb24ndCB3YW50IHRvCi0JCSAqIHdha2UgdXAgaWRsZSBz ZXNzaW9ucywgYW5kIHRoZXkgYWxyZWFkeSBrbm93IGhvdyB0byBkZXRlY3QgbG9zdAotCQkg KiBjb25uZWN0aW9ucy4KLQkJICovCi0JCWlmICghRG9pbmdDb21tYW5kUmVhZCAmJiBjbGll bnRfY29ubmVjdGlvbl9jaGVja19pbnRlcnZhbCA+IDApCi0JCXsKLQkJCWlmICghcHFfY2hl Y2tfY29ubmVjdGlvbigpKQotCQkJCUNsaWVudENvbm5lY3Rpb25Mb3N0ID0gdHJ1ZTsKLQkJ CWVsc2UKLQkJCQllbmFibGVfdGltZW91dF9hZnRlcihDTElFTlRfQ09OTkVDVElPTl9DSEVD S19USU1FT1VULAotCQkJCQkJCQkJIGNsaWVudF9jb25uZWN0aW9uX2NoZWNrX2ludGVydmFs KTsKLQkJfQotCX0KIAotCWlmIChDbGllbnRDb25uZWN0aW9uTG9zdCkKK3ZvaWQKK1Byb2Nl c3NDbGllbnRDaGVja1RpbWVvdXRJbnRlcnJ1cHQodm9pZCkKK3sKKwkvKgorCSAqIENoZWNr IGZvciBsb3N0IGNvbm5lY3Rpb24gYW5kIHJlLWFybSwgaWYgc3RpbGwgY29uZmlndXJlZCwg YnV0IG5vdCBpZgorCSAqIHdlJ3ZlIGFycml2ZWQgYmFjayBhdCBEb2luZ0NvbW1hbmRSZWFk IHN0YXRlLiAgV2UgZG9uJ3Qgd2FudCB0byB3YWtlIHVwCisJICogaWRsZSBzZXNzaW9ucywg YW5kIHRoZXkgYWxyZWFkeSBrbm93IGhvdyB0byBkZXRlY3QgbG9zdCBjb25uZWN0aW9ucy4K KwkgKi8KKwlpZiAoIURvaW5nQ29tbWFuZFJlYWQgJiYgY2xpZW50X2Nvbm5lY3Rpb25fY2hl Y2tfaW50ZXJ2YWwgPiAwKQogCXsKLQkJUXVlcnlDYW5jZWxQZW5kaW5nID0gZmFsc2U7IC8q IGxvc3QgY29ubmVjdGlvbiB0cnVtcHMgUXVlcnlDYW5jZWwgKi8KLQkJTG9ja0Vycm9yQ2xl YW51cCgpOwotCQkvKiBkb24ndCBzZW5kIHRvIGNsaWVudCwgd2UgYWxyZWFkeSBrbm93IHRo ZSBjb25uZWN0aW9uIHRvIGJlIGRlYWQuICovCi0JCXdoZXJlVG9TZW5kT3V0cHV0ID0gRGVz dE5vbmU7Ci0JCWVyZXBvcnQoRkFUQUwsCi0JCQkJKGVycmNvZGUoRVJSQ09ERV9DT05ORUNU SU9OX0ZBSUxVUkUpLAotCQkJCSBlcnJtc2coImNvbm5lY3Rpb24gdG8gY2xpZW50IGxvc3Qi KSkpOworCQlpZiAoIXBxX2NoZWNrX2Nvbm5lY3Rpb24oKSkKKwkJCVJhaXNlSW50ZXJydXB0 KElOVEVSUlVQVF9DTElFTlRfQ09OTkVDVElPTl9MT1NUKTsKKwkJZWxzZQorCQkJZW5hYmxl X3RpbWVvdXRfYWZ0ZXIoQ0xJRU5UX0NPTk5FQ1RJT05fQ0hFQ0tfVElNRU9VVCwKKwkJCQkJ CQkJIGNsaWVudF9jb25uZWN0aW9uX2NoZWNrX2ludGVydmFsKTsKIAl9Cit9CisKK3ZvaWQK K1Byb2Nlc3NDbGllbnRDb25uZWN0aW9uTG9zdCh2b2lkKQoreworCS8qIEZJWE1FOiBjaGVj ayBwcm9jZGllIGZpcnN0ICovCisKKwlDbGVhckludGVycnVwdChJTlRFUlJVUFRfUVVFUllf Q0FOQ0VMKTsgLyogbG9zdCBjb25uZWN0aW9uIHRydW1wcworCQkJCQkJCQkJCQkgKiBRdWVy eUNhbmNlbCAqLworCUxvY2tFcnJvckNsZWFudXAoKTsKKwkvKiBkb24ndCBzZW5kIHRvIGNs aWVudCwgd2UgYWxyZWFkeSBrbm93IHRoZSBjb25uZWN0aW9uIHRvIGJlIGRlYWQuICovCisJ d2hlcmVUb1NlbmRPdXRwdXQgPSBEZXN0Tm9uZTsKKwllcmVwb3J0KEZBVEFMLAorCQkJKGVy cmNvZGUoRVJSQ09ERV9DT05ORUNUSU9OX0ZBSUxVUkUpLAorCQkJIGVycm1zZygiY29ubmVj dGlvbiB0byBjbGllbnQgbG9zdCIpKSk7Cit9CiAKK3ZvaWQKK1Byb2Nlc3NRdWVyeUNhbmNl bEludGVycnVwdCh2b2lkKQorewogCS8qCi0JICogRG9uJ3QgYWxsb3cgcXVlcnkgY2FuY2Vs IGludGVycnVwdHMgd2hpbGUgcmVhZGluZyBpbnB1dCBmcm9tIHRoZQotCSAqIGNsaWVudCwg YmVjYXVzZSB3ZSBtaWdodCBsb3NlIHN5bmMgaW4gdGhlIEZFL0JFIHByb3RvY29sLiAgKERp ZQotCSAqIGludGVycnVwdHMgYXJlIE9LLCBiZWNhdXNlIHdlIHdvbid0IHJlYWQgYW55IGZ1 cnRoZXIgbWVzc2FnZXMgZnJvbSB0aGUKLQkgKiBjbGllbnQgaW4gdGhhdCBjYXNlLikKLQkg KgotCSAqIFNlZSBzaW1pbGFyIGxvZ2ljIGluIFByb2Nlc3NSZWNvdmVyeUNvbmZsaWN0SW50 ZXJydXB0cygpLgorCSAqIEZJWE1FOiBDaGVjayBjbGllbnQgY29ubmVjdGlvbiBsb3N0IGFu ZCB0ZXJtaW5hdGUgaW50ZXJydXB0cyBmaXJzdCwgc28KKwkgKiB0aGF0IGlmIHdlJ3JlIGFi b3V0IHRvIHRlcm1pbmF0ZSB0aGUgd2hvbGUgYmFja2VuZCBhbnl3YXksIHdlIGRvIHRoYXQK KwkgKiBzdHJhaWdodCBhd2F5IGFuZCBza2lwIHRoZSBxdWVyeSBjYW5jZWxsYXRpb24uCiAJ ICovCi0JaWYgKFF1ZXJ5Q2FuY2VsUGVuZGluZyAmJiBRdWVyeUNhbmNlbEhvbGRvZmZDb3Vu dCAhPSAwKQotCXsKLQkJLyoKLQkJICogUmUtYXJtIEludGVycnVwdFBlbmRpbmcgc28gdGhh dCB3ZSBwcm9jZXNzIHRoZSBjYW5jZWwgcmVxdWVzdCBhcwotCQkgKiBzb29uIGFzIHdlJ3Jl IGRvbmUgcmVhZGluZyB0aGUgbWVzc2FnZS4gIChYWFggdGhpcyBpcyBzZXJpb3VzbHkKLQkJ ICogdWdseTogaXQgY29tcGxpY2F0ZXMgSU5URVJSVVBUU19DQU5fQkVfUFJPQ0VTU0VEKCks IGFuZCBpdCBtZWFucyB3ZQotCQkgKiBjYW4ndCB1c2UgdGhhdCBtYWNybyBkaXJlY3RseSBh cyB0aGUgaW5pdGlhbCB0ZXN0IGluIHRoaXMgZnVuY3Rpb24sCi0JCSAqIG1lYW5pbmcgdGhh dCB0aGlzIGNvZGUgYWxzbyBjcmVhdGVzIG9wcG9ydHVuaXRpZXMgZm9yIG90aGVyIGJ1Z3Mg dG8KLQkJICogYXBwZWFyLikKLQkJICovCi0JCUludGVycnVwdFBlbmRpbmcgPSB0cnVlOwot CX0KLQllbHNlIGlmIChRdWVyeUNhbmNlbFBlbmRpbmcpCisKIAl7CiAJCWJvb2wJCWxvY2tf dGltZW91dF9vY2N1cnJlZDsKIAkJYm9vbAkJc3RtdF90aW1lb3V0X29jY3VycmVkOwogCi0J CVF1ZXJ5Q2FuY2VsUGVuZGluZyA9IGZhbHNlOwotCiAJCS8qCiAJCSAqIElmIExPQ0tfVElN RU9VVCBhbmQgU1RBVEVNRU5UX1RJTUVPVVQgaW5kaWNhdG9ycyBhcmUgYm90aCBzZXQsIHdl CiAJCSAqIG5lZWQgdG8gY2xlYXIgYm90aCwgc28gYWx3YXlzIGZldGNoIGJvdGguCkBAIC0z NDk5LDc2ICszNDA4LDY2IEBAIFByb2Nlc3NJbnRlcnJ1cHRzKHZvaWQpCiAJCQkJCSBlcnJt c2coImNhbmNlbGluZyBzdGF0ZW1lbnQgZHVlIHRvIHVzZXIgcmVxdWVzdCIpKSk7CiAJCX0K IAl9Cit9CiAKLQlpZiAocGdfYXRvbWljX3JlYWRfdTMyKCZNeVByb2MtPnBlbmRpbmdSZWNv dmVyeUNvbmZsaWN0cykgIT0gMCkKLQkJUHJvY2Vzc1JlY292ZXJ5Q29uZmxpY3RJbnRlcnJ1 cHRzKCk7CiAKLQlpZiAoSWRsZUluVHJhbnNhY3Rpb25TZXNzaW9uVGltZW91dFBlbmRpbmcp Cit2b2lkCitQcm9jZXNzSWRsZUluVHJhbnNhY3Rpb25TZXNzaW9uVGltZW91dEludGVycnVw dCh2b2lkKQoreworCS8qCisJICogSWYgdGhlIEdVQyBoYXMgYmVlbiByZXNldCB0byB6ZXJv LCBpZ25vcmUgdGhlIGludGVycnVwdC4gIFRoaXMgaXMKKwkgKiBpbXBvcnRhbnQgYmVjYXVz ZSB0aGUgR1VDIHVwZGF0ZSBpdHNlbGYgd29uJ3QgZGlzYWJsZSBhbnkgcGVuZGluZworCSAq IGludGVycnVwdC4gIFdlIG5lZWQgdG8gdW5zZXQgdGhlIGZsYWcgYmVmb3JlIHRoZSBpbmpl Y3Rpb24gcG9pbnQsCisJICogb3RoZXJ3aXNlIHdlIGNvdWxkIGxvb3AgaW4gaW50ZXJydXB0 cyBjaGVja2luZy4KKwkgKi8KKwlpZiAoSWRsZUluVHJhbnNhY3Rpb25TZXNzaW9uVGltZW91 dCA+IDApCiAJewotCQkvKgotCQkgKiBJZiB0aGUgR1VDIGhhcyBiZWVuIHJlc2V0IHRvIHpl cm8sIGlnbm9yZSB0aGUgc2lnbmFsLiAgVGhpcyBpcwotCQkgKiBpbXBvcnRhbnQgYmVjYXVz ZSB0aGUgR1VDIHVwZGF0ZSBpdHNlbGYgd29uJ3QgZGlzYWJsZSBhbnkgcGVuZGluZwotCQkg KiBpbnRlcnJ1cHQuICBXZSBuZWVkIHRvIHVuc2V0IHRoZSBmbGFnIGJlZm9yZSB0aGUgaW5q ZWN0aW9uIHBvaW50LAotCQkgKiBvdGhlcndpc2Ugd2UgY291bGQgbG9vcCBpbiBpbnRlcnJ1 cHRzIGNoZWNraW5nLgotCQkgKi8KLQkJSWRsZUluVHJhbnNhY3Rpb25TZXNzaW9uVGltZW91 dFBlbmRpbmcgPSBmYWxzZTsKLQkJaWYgKElkbGVJblRyYW5zYWN0aW9uU2Vzc2lvblRpbWVv dXQgPiAwKQotCQl7Ci0JCQlJTkpFQ1RJT05fUE9JTlQoImlkbGUtaW4tdHJhbnNhY3Rpb24t c2Vzc2lvbi10aW1lb3V0IiwgTlVMTCk7Ci0JCQllcmVwb3J0KEZBVEFMLAotCQkJCQkoZXJy Y29kZShFUlJDT0RFX0lETEVfSU5fVFJBTlNBQ1RJT05fU0VTU0lPTl9USU1FT1VUKSwKLQkJ CQkJIGVycm1zZygidGVybWluYXRpbmcgY29ubmVjdGlvbiBkdWUgdG8gaWRsZS1pbi10cmFu c2FjdGlvbiB0aW1lb3V0IikpKTsKLQkJfQorCQlJTkpFQ1RJT05fUE9JTlQoImlkbGUtaW4t dHJhbnNhY3Rpb24tc2Vzc2lvbi10aW1lb3V0IiwgTlVMTCk7CisJCWVyZXBvcnQoRkFUQUws CisJCQkJKGVycmNvZGUoRVJSQ09ERV9JRExFX0lOX1RSQU5TQUNUSU9OX1NFU1NJT05fVElN RU9VVCksCisJCQkJIGVycm1zZygidGVybWluYXRpbmcgY29ubmVjdGlvbiBkdWUgdG8gaWRs ZS1pbi10cmFuc2FjdGlvbiB0aW1lb3V0IikpKTsKIAl9Cit9CiAKLQlpZiAoVHJhbnNhY3Rp b25UaW1lb3V0UGVuZGluZykKK3ZvaWQKK1Byb2Nlc3NUcmFuc2FjdGlvblRpbWVvdXRJbnRl cnJ1cHQodm9pZCkKK3sKKwkvKiBBcyBhYm92ZSwgaWdub3JlIHRoZSBzaWduYWwgaWYgdGhl IEdVQyBoYXMgYmVlbiByZXNldCB0byB6ZXJvLiAqLworCWlmIChUcmFuc2FjdGlvblRpbWVv dXQgPiAwKQogCXsKLQkJLyogQXMgYWJvdmUsIGlnbm9yZSB0aGUgc2lnbmFsIGlmIHRoZSBH VUMgaGFzIGJlZW4gcmVzZXQgdG8gemVyby4gKi8KLQkJVHJhbnNhY3Rpb25UaW1lb3V0UGVu ZGluZyA9IGZhbHNlOwotCQlpZiAoVHJhbnNhY3Rpb25UaW1lb3V0ID4gMCkKLQkJewotCQkJ SU5KRUNUSU9OX1BPSU5UKCJ0cmFuc2FjdGlvbi10aW1lb3V0IiwgTlVMTCk7Ci0JCQllcmVw b3J0KEZBVEFMLAotCQkJCQkoZXJyY29kZShFUlJDT0RFX1RSQU5TQUNUSU9OX1RJTUVPVVQp LAotCQkJCQkgZXJybXNnKCJ0ZXJtaW5hdGluZyBjb25uZWN0aW9uIGR1ZSB0byB0cmFuc2Fj dGlvbiB0aW1lb3V0IikpKTsKLQkJfQorCQlJTkpFQ1RJT05fUE9JTlQoInRyYW5zYWN0aW9u LXRpbWVvdXQiLCBOVUxMKTsKKwkJZXJlcG9ydChGQVRBTCwKKwkJCQkoZXJyY29kZShFUlJD T0RFX1RSQU5TQUNUSU9OX1RJTUVPVVQpLAorCQkJCSBlcnJtc2coInRlcm1pbmF0aW5nIGNv bm5lY3Rpb24gZHVlIHRvIHRyYW5zYWN0aW9uIHRpbWVvdXQiKSkpOwogCX0KK30KIAotCWlm IChJZGxlU2Vzc2lvblRpbWVvdXRQZW5kaW5nKQordm9pZAorUHJvY2Vzc0lkbGVTZXNzaW9u VGltZW91dEludGVycnVwdCh2b2lkKQoreworCS8qIEFzIGFib3ZlLCBpZ25vcmUgdGhlIHNp Z25hbCBpZiB0aGUgR1VDIGhhcyBiZWVuIHJlc2V0IHRvIHplcm8uICovCisJaWYgKElkbGVT ZXNzaW9uVGltZW91dCA+IDApCiAJewotCQkvKiBBcyBhYm92ZSwgaWdub3JlIHRoZSBzaWdu YWwgaWYgdGhlIEdVQyBoYXMgYmVlbiByZXNldCB0byB6ZXJvLiAqLwotCQlJZGxlU2Vzc2lv blRpbWVvdXRQZW5kaW5nID0gZmFsc2U7Ci0JCWlmIChJZGxlU2Vzc2lvblRpbWVvdXQgPiAw KQotCQl7Ci0JCQlJTkpFQ1RJT05fUE9JTlQoImlkbGUtc2Vzc2lvbi10aW1lb3V0IiwgTlVM TCk7Ci0JCQllcmVwb3J0KEZBVEFMLAotCQkJCQkoZXJyY29kZShFUlJDT0RFX0lETEVfU0VT U0lPTl9USU1FT1VUKSwKLQkJCQkJIGVycm1zZygidGVybWluYXRpbmcgY29ubmVjdGlvbiBk dWUgdG8gaWRsZS1zZXNzaW9uIHRpbWVvdXQiKSkpOwotCQl9CisJCUlOSkVDVElPTl9QT0lO VCgiaWRsZS1zZXNzaW9uLXRpbWVvdXQiLCBOVUxMKTsKKwkJZXJlcG9ydChGQVRBTCwKKwkJ CQkoZXJyY29kZShFUlJDT0RFX0lETEVfU0VTU0lPTl9USU1FT1VUKSwKKwkJCQkgZXJybXNn KCJ0ZXJtaW5hdGluZyBjb25uZWN0aW9uIGR1ZSB0byBpZGxlLXNlc3Npb24gdGltZW91dCIp KSk7CiAJfQorfQogCit2b2lkCitQcm9jZXNzSWRsZVN0YXRzVGltZW91dEludGVycnVwdCh2 b2lkKQorewogCS8qCi0JICogSWYgdGhlcmUgYXJlIHBlbmRpbmcgc3RhdHMgdXBkYXRlcyBh bmQgd2UgY3VycmVudGx5IGFyZSB0cnVseSBpZGxlCi0JICogKG1hdGNoaW5nIHRoZSBjb25k aXRpb25zIGluIFBvc3RncmVzTWFpbigpLCByZXBvcnQgc3RhdHMgbm93LgorCSAqIFN0YXRz IHVwZGF0ZSB3YXMgcmVxdWVzdGVkLiBUaGlzIGhhbmRsZXIgaXMgb25seSBlbmFibGVkIHdo ZW4gd2UncmUKKwkgKiB0cnVseSBpZGxlLCB3aXRoIG5vIHRyYW5zYWN0aW9uIGluIHByb2dy ZXNzCiAJICovCi0JaWYgKElkbGVTdGF0c1VwZGF0ZVRpbWVvdXRQZW5kaW5nICYmCi0JCURv aW5nQ29tbWFuZFJlYWQgJiYgIUlzVHJhbnNhY3Rpb25PclRyYW5zYWN0aW9uQmxvY2soKSkK LQl7Ci0JCUlkbGVTdGF0c1VwZGF0ZVRpbWVvdXRQZW5kaW5nID0gZmFsc2U7Ci0JCXBnc3Rh dF9yZXBvcnRfc3RhdCh0cnVlKTsKLQl9Ci0KLQlpZiAoUHJvY1NpZ25hbEJhcnJpZXJQZW5k aW5nKQotCQlQcm9jZXNzUHJvY1NpZ25hbEJhcnJpZXIoKTsKLQotCWlmIChQYXJhbGxlbE1l c3NhZ2VQZW5kaW5nKQotCQlQcm9jZXNzUGFyYWxsZWxNZXNzYWdlcygpOwotCi0JaWYgKExv Z01lbW9yeUNvbnRleHRQZW5kaW5nKQotCQlQcm9jZXNzTG9nTWVtb3J5Q29udGV4dEludGVy cnVwdCgpOwotCi0JaWYgKFBhcmFsbGVsQXBwbHlNZXNzYWdlUGVuZGluZykKLQkJUHJvY2Vz c1BhcmFsbGVsQXBwbHlNZXNzYWdlcygpOworCS8qCisJICogRklYTUU6IGNoZWNrIHRoYXQg dGhpcyBpcyBjYWxsZWQgdW5kZXIgcmlnaHQgY29uZGl0aW9ucyBhbHNvIGluCisJICogd2Fs c2VuZGVycworCSAqLworCUFzc2VydCghSXNUcmFuc2FjdGlvbk9yVHJhbnNhY3Rpb25CbG9j aygpKTsKKwlwZ3N0YXRfcmVwb3J0X3N0YXQodHJ1ZSk7CiB9CiAKIC8qCkBAIC00MjMyLDkg KzQxMzEsMTMgQEAgUG9zdGdyZXNNYWluKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hh ciAqdXNlcm5hbWUpCiAKIAlBc3NlcnQoR2V0UHJvY2Vzc2luZ01vZGUoKSA9PSBJbml0UHJv Y2Vzc2luZyk7CiAKKwlIT0xEX0lOVEVSUlVQVFMoKTsKKwlTZXRTdGFuZGFyZEludGVycnVw dEhhbmRsZXJzKCk7CisKIAkvKgotCSAqIFNldCB1cCBzaWduYWwgaGFuZGxlcnMuICAoSW5p dFBvc3RtYXN0ZXJDaGlsZCBvciBJbml0U3RhbmRhbG9uZVByb2Nlc3MKLQkgKiBoYXMgYWxy ZWFkeSBzZXQgdXAgQmxvY2tTaWcgYW5kIG1hZGUgdGhhdCB0aGUgYWN0aXZlIHNpZ25hbCBt YXNrLikKKwkgKiBTZXQgdXAgc2lnbmFsIGFuZCBpbnRlcnJ1cHQgaGFuZGxlcnMuICAoSW5p dFBvc3RtYXN0ZXJDaGlsZCBvcgorCSAqIEluaXRTdGFuZGFsb25lUHJvY2VzcyBoYXMgYWxy ZWFkeSBzZXQgdXAgQmxvY2tTaWcgYW5kIG1hZGUgdGhhdCB0aGUKKwkgKiBhY3RpdmUgc2ln bmFsIG1hc2suKQogCSAqCiAJICogTm90ZSB0aGF0IHBvc3RtYXN0ZXIgYmxvY2tlZCBhbGwg c2lnbmFscyBiZWZvcmUgZm9ya2luZyBjaGlsZCBwcm9jZXNzLAogCSAqIHNvIHRoZXJlIGlz IG5vIHJhY2UgY29uZGl0aW9uIHdoZXJlYnkgd2UgbWlnaHQgcmVjZWl2ZSBhIHNpZ25hbCBi ZWZvcmUKQEAgLTQyNDcsMTMgKzQxNTAsMjUgQEAgUG9zdGdyZXNNYWluKGNvbnN0IGNoYXIg KmRibmFtZSwgY29uc3QgY2hhciAqdXNlcm5hbWUpCiAJICogYW4gaXNzdWUgZm9yIHNpZ25h bHMgdGhhdCBhcmUgbG9jYWxseSBnZW5lcmF0ZWQsIHN1Y2ggYXMgU0lHQUxSTSBhbmQKIAkg KiBTSUdQSVBFLikKIAkgKi8KKwlTZXRJbnRlcnJ1cHRIYW5kbGVyKElOVEVSUlVQVF9RVUVS WV9DQU5DRUwsIFByb2Nlc3NRdWVyeUNhbmNlbEludGVycnVwdCk7CisJRW5hYmxlSW50ZXJy dXB0KElOVEVSUlVQVF9RVUVSWV9DQU5DRUwpOworCiAJaWYgKGFtX3dhbHNlbmRlcikKKwl7 CisJCXBxc2lnbmFsKFNJR1RFUk0sIFNpZ25hbEhhbmRsZXJGb3JTaHV0ZG93blJlcXVlc3Qp OworCiAJCVdhbFNuZFNpZ25hbHMoKTsKKwl9CiAJZWxzZQogCXsKLQkJcHFzaWduYWwoU0lH SFVQLCBTaWduYWxIYW5kbGVyRm9yQ29uZmlnUmVsb2FkKTsKLQkJcHFzaWduYWwoU0lHSU5U LCBTdGF0ZW1lbnRDYW5jZWxIYW5kbGVyKTsJLyogY2FuY2VsIGN1cnJlbnQgcXVlcnkgKi8K LQkJcHFzaWduYWwoU0lHVEVSTSwgZGllKTsgLyogY2FuY2VsIGN1cnJlbnQgcXVlcnkgYW5k IGV4aXQgKi8KKwkJcHFzaWduYWwoU0lHSU5ULCBTaWduYWxIYW5kbGVyRm9yUXVlcnlDYW5j ZWwpOwkvKiBjYW5jZWwgY3VycmVudCBxdWVyeSAqLworCisJCS8qCisJCSAqIENhbmNlbCBj dXJyZW50IHF1ZXJ5IGFuZCBleGl0LiBUaGlzIGlzIGEgYml0IG1vcmUgY29tcGxpY2F0ZWQg aW4KKwkJICogYmFja2VuZCBwcm9jZXNzZXMuIHNvIHdlIHdlIGNhbm5vdCB1c2UKKwkJICog U2lnbmFsSGFuZGxlckZvclNodXRkb3duUmVxdWVzdCBoZXJlLgorCQkgKi8KKwkJcHFzaWdu YWwoU0lHVEVSTSwgZGllKTsgLyogKi8KIAogCQkvKgogCQkgKiBJbiBhIHBvc3RtYXN0ZXIg Y2hpbGQgYmFja2VuZCwgcmVwbGFjZSBTaWduYWxIYW5kbGVyRm9yQ3Jhc2hFeGl0CkBAIC00 MjY3LDcgKzQxODIsMTQgQEAgUG9zdGdyZXNNYWluKGNvbnN0IGNoYXIgKmRibmFtZSwgY29u c3QgY2hhciAqdXNlcm5hbWUpCiAJCQlwcXNpZ25hbChTSUdRVUlULCBxdWlja2RpZSk7CS8q IGhhcmQgY3Jhc2ggdGltZSAqLwogCQllbHNlCiAJCQlwcXNpZ25hbChTSUdRVUlULCBkaWUp OyAvKiBjYW5jZWwgY3VycmVudCBxdWVyeSBhbmQgZXhpdCAqLworCiAJCUluaXRpYWxpemVU aW1lb3V0cygpOwkvKiBlc3RhYmxpc2hlcyBTSUdBTFJNIGhhbmRsZXIgKi8KKwkJU2V0SW50 ZXJydXB0SGFuZGxlcihJTlRFUlJVUFRfVFJBTlNBQ1RJT05fVElNRU9VVCwgUHJvY2Vzc1Ry YW5zYWN0aW9uVGltZW91dEludGVycnVwdCk7CisJCUVuYWJsZUludGVycnVwdChJTlRFUlJV UFRfVFJBTlNBQ1RJT05fVElNRU9VVCk7CisJCVNldEludGVycnVwdEhhbmRsZXIoSU5URVJS VVBUX0lETEVfU0VTU0lPTl9USU1FT1VULCBQcm9jZXNzSWRsZVNlc3Npb25UaW1lb3V0SW50 ZXJydXB0KTsKKwkJRW5hYmxlSW50ZXJydXB0KElOVEVSUlVQVF9JRExFX1NFU1NJT05fVElN RU9VVCk7CisJCVNldEludGVycnVwdEhhbmRsZXIoSU5URVJSVVBUX0lETEVfSU5fVFJBTlNB Q1RJT05fU0VTU0lPTl9USU1FT1VULCBQcm9jZXNzSWRsZUluVHJhbnNhY3Rpb25TZXNzaW9u VGltZW91dEludGVycnVwdCk7CisJCUVuYWJsZUludGVycnVwdChJTlRFUlJVUFRfSURMRV9J Tl9UUkFOU0FDVElPTl9TRVNTSU9OX1RJTUVPVVQpOwogCiAJCS8qCiAJCSAqIElnbm9yZSBm YWlsdXJlIHRvIHdyaXRlIHRvIGZyb250ZW5kLiBOb3RlOiBpZiBmcm9udGVuZCBjbG9zZXMK QEAgLTQyNzYsMTEgKzQxOTgsMzEgQEAgUG9zdGdyZXNNYWluKGNvbnN0IGNoYXIgKmRibmFt ZSwgY29uc3QgY2hhciAqdXNlcm5hbWUpCiAJCSAqIG1pZHN0IG9mIG91dHB1dCBkdXJpbmcg d2hvLWtub3dzLXdoYXQgb3BlcmF0aW9uLi4uCiAJCSAqLwogCQlwcXNpZ25hbChTSUdQSVBF LCBTSUdfSUdOKTsKLQkJcHFzaWduYWwoU0lHVVNSMSwgcHJvY3NpZ25hbF9zaWd1c3IxX2hh bmRsZXIpOwotCQlwcXNpZ25hbChTSUdVU1IyLCBTSUdfSUdOKTsKIAkJcHFzaWduYWwoU0lH RlBFLCBGbG9hdEV4Y2VwdGlvbkhhbmRsZXIpOwogCX0KIAorCVNldEludGVycnVwdEhhbmRs ZXIoSU5URVJSVVBUX0NMSUVOVF9DSEVDS19USU1FT1VULCBQcm9jZXNzQ2xpZW50Q2hlY2tU aW1lb3V0SW50ZXJydXB0KTsKKwlTZXRJbnRlcnJ1cHRIYW5kbGVyKElOVEVSUlVQVF9DTElF TlRfQ09OTkVDVElPTl9MT1NULCBQcm9jZXNzQ2xpZW50Q29ubmVjdGlvbkxvc3QpOworCUVu YWJsZUludGVycnVwdChJTlRFUlJVUFRfQ0xJRU5UX0NIRUNLX1RJTUVPVVQpOworCUVuYWJs ZUludGVycnVwdChJTlRFUlJVUFRfQ0xJRU5UX0NPTk5FQ1RJT05fTE9TVCk7CisKKwkvKiBz dGF0cyB1cGRhdGVzIGFyZSBvbmx5IHNlbnQgd2hlbiB3ZSdyZSBpZGxlLCBzbyBkb24ndCBl bmFibGUgdGhpcyB5ZXQgKi8KKwlTZXRJbnRlcnJ1cHRIYW5kbGVyKElOVEVSUlVQVF9JRExF X1NUQVRTX1RJTUVPVVQsIFByb2Nlc3NJZGxlU3RhdHNUaW1lb3V0SW50ZXJydXB0KTsKKwor CS8qCisJICogQmFja2VuZHMgdGhhdCBjYW4gTElTVEVOIG5lZWQgdGhpcy4gKEl0IGlzIG9u bHkgZW5hYmxlZCB3aGVuIGlkbGUKKwkgKiBvdXRzaWRlIGEgdHJhbnNhY3Rpb24sIGhvd2V2 ZXIuKQorCSAqCisJICogRklYTUU6IHNob3VsZCBiZ3dvcmtlcnMgZG8gdGhpcyB0b28/IE9y IGl0J3MgdXAgdG8gdGhlbSB0byBzZXQgdXAgdGhlCisJICogaGFuZGxlciBpZiB0aGV5IExJ U1RFTj8KKwkgKi8KKwlTZXRJbnRlcnJ1cHRIYW5kbGVyKElOVEVSUlVQVF9BU1lOQ19OT1RJ RlksIFByb2Nlc3NBc3luY05vdGlmeUludGVycnVwdCk7CisKKwlTZXRJbnRlcnJ1cHRIYW5k bGVyKElOVEVSUlVQVF9QQVJBTExFTF9NRVNTQUdFLCBQcm9jZXNzUGFyYWxsZWxNZXNzYWdl cyk7CisJRW5hYmxlSW50ZXJydXB0KElOVEVSUlVQVF9QQVJBTExFTF9NRVNTQUdFKTsKKwor CVJFU1VNRV9JTlRFUlJVUFRTKCk7CisKIAkvKiBFYXJseSBpbml0aWFsaXphdGlvbiAqLwog CUJhc2VJbml0KCk7CiAKQEAgLTQ0NDgsMTEgKzQzOTAsMTQgQEAgUG9zdGdyZXNNYWluKGNv bnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqdXNlcm5hbWUpCiAJCSAqIGZvcmdldHRp bmcgYSB0aW1lb3V0IGNhbmNlbC4KIAkJICovCiAJCWRpc2FibGVfYWxsX3RpbWVvdXRzKGZh bHNlKTsJLyogZG8gZmlyc3QgdG8gYXZvaWQgcmFjZSBjb25kaXRpb24gKi8KLQkJUXVlcnlD YW5jZWxQZW5kaW5nID0gZmFsc2U7CisJCUNsZWFySW50ZXJydXB0KElOVEVSUlVQVF9RVUVS WV9DQU5DRUwpOwogCQlpZGxlX2luX3RyYW5zYWN0aW9uX3RpbWVvdXRfZW5hYmxlZCA9IGZh bHNlOwogCQlpZGxlX3Nlc3Npb25fdGltZW91dF9lbmFibGVkID0gZmFsc2U7CiAKIAkJLyog Tm90IHJlYWRpbmcgZnJvbSB0aGUgY2xpZW50IGFueW1vcmUuICovCisJCURpc2FibGVJbnRl cnJ1cHQoSU5URVJSVVBUX1NJTlZBTF9DQVRDSFVQKTsKKwkJRGlzYWJsZUludGVycnVwdChJ TlRFUlJVUFRfQVNZTkNfTk9USUZZKTsKKwkJRGlzYWJsZUludGVycnVwdChJTlRFUlJVUFRf SURMRV9TVEFUU19USU1FT1VUKTsKIAkJRG9pbmdDb21tYW5kUmVhZCA9IGZhbHNlOwogCiAJ CS8qIE1ha2Ugc3VyZSBsaWJwcSBpcyBpbiBhIGdvb2Qgc3RhdGUgKi8KQEAgLTQ2MzMsNyAr NDU3OCw3IEBAIFBvc3RncmVzTWFpbihjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIg KnVzZXJuYW1lKQogCQkJCSAqIHdlcmUgcmVjZWl2ZWQgZHVyaW5nIHRoZSBqdXN0LWZpbmlz aGVkIHRyYW5zYWN0aW9uLCB0aGV5J2xsCiAJCQkJICogYmUgc2VlbiBieSB0aGUgY2xpZW50 IGJlZm9yZSBSZWFkeUZvclF1ZXJ5IGlzLgogCQkJCSAqLwotCQkJCWlmIChub3RpZnlJbnRl cnJ1cHRQZW5kaW5nKQorCQkJCWlmIChDb25zdW1lSW50ZXJydXB0KElOVEVSUlVQVF9BU1lO Q19OT1RJRlkpKQogCQkJCQlQcm9jZXNzTm90aWZ5SW50ZXJydXB0KGZhbHNlKTsKIAogCQkJ CS8qCkBAIC00NzIyLDYgKzQ2NjcsMjggQEAgUG9zdGdyZXNNYWluKGNvbnN0IGNoYXIgKmRi bmFtZSwgY29uc3QgY2hhciAqdXNlcm5hbWUpCiAJCSAqLwogCQlEb2luZ0NvbW1hbmRSZWFk ID0gdHJ1ZTsKIAorCQkvKgorCQkgKiBMZXQgY2FjaGUgaW52YWwgY2F0Y2h1cCByZXF1ZXN0 cyB0byBiZSBwcm9jZXNzZWQgd2hpbGUgd2UncmUgaWRsZS4KKwkJICovCisJCUVuYWJsZUlu dGVycnVwdChJTlRFUlJVUFRfU0lOVkFMX0NBVENIVVApOworCisJCS8qCisJCSAqIFdoZW4g d2UncmUgdHJ1bHkgaWRsZSwgaS5lLiBubyB0cmFuc2FjdGlvbiBpbiBwcm9ncmVzcywgd2Ug Y2FuCisJCSAqIGFkZGl0aW9uYWxseSBwcm9jZXNzIGFueSBhc3luYyBMSVNURU4vTk9USUZZ IG1lc3NhZ2VzIGFuZCBzdGF0cworCQkgKiB1cGRhdGUgcmVxdWVzdHMuCisJCSAqLworCQlp ZiAoIUlzVHJhbnNhY3Rpb25PclRyYW5zYWN0aW9uQmxvY2soKSkKKwkJeworCQkJRW5hYmxl SW50ZXJydXB0KElOVEVSUlVQVF9BU1lOQ19OT1RJRlkpOworCQkJRW5hYmxlSW50ZXJydXB0 KElOVEVSUlVQVF9JRExFX1NUQVRTX1RJTUVPVVQpOworCQl9CisKKwkJLyoKKwkJICogSWYg YW55IG9mIHRoZSBuZXdseS1lbmFibGVkIGludGVycnVwdHMgYXJlIGFscmVhZHkgcGVuZGlu ZywgcHJvY2VzcworCQkgKiB0aGVtIG5vdy4KKwkJICovCisJCUNIRUNLX0ZPUl9JTlRFUlJV UFRTKCk7CisKIAkJLyoKIAkJICogKDMpIHJlYWQgYSBjb21tYW5kIChsb29wIGJsb2NrcyBo ZXJlKQogCQkgKi8KQEAgLTQ3NTEsMjIgKzQ3MTgsMjIgQEAgUG9zdGdyZXNNYWluKGNvbnN0 IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqdXNlcm5hbWUpCiAJCSAqCiAJCSAqIFF1ZXJ5 IGNhbmNlbCBpcyBzdXBwb3NlZCB0byBiZSBhIG5vLW9wIHdoZW4gdGhlcmUgaXMgbm8gcXVl cnkgaW4KIAkJICogcHJvZ3Jlc3MsIHNvIGlmIGEgcXVlcnkgY2FuY2VsIGFycml2ZWQgd2hp bGUgd2Ugd2VyZSBpZGxlLCBqdXN0Ci0JCSAqIHJlc2V0IFF1ZXJ5Q2FuY2VsUGVuZGluZy4g UHJvY2Vzc0ludGVycnVwdHMoKSBoYXMgdGhhdCBlZmZlY3Qgd2hlbgotCQkgKiBpdCdzIGNh bGxlZCB3aGVuIERvaW5nQ29tbWFuZFJlYWQgaXMgc2V0LCBzbyBjaGVjayBmb3IgaW50ZXJy dXB0cwotCQkgKiBiZWZvcmUgcmVzZXR0aW5nIERvaW5nQ29tbWFuZFJlYWQuCisJCSAqIHJl c2V0IElOVEVSUlVQVF9RVUVSWV9DQU5DRUwuIFByb2Nlc3NJbnRlcnJ1cHRzKCkgaGFzIHRo YXQgZWZmZWN0CisJCSAqIHdoZW4gaXQncyBjYWxsZWQgd2hlbiBEb2luZ0NvbW1hbmRSZWFk IGlzIHNldCwgc28gY2hlY2sgZm9yCisJCSAqIGludGVycnVwdHMgYmVmb3JlIHJlc2V0dGlu ZyBEb2luZ0NvbW1hbmRSZWFkLgogCQkgKi8KIAkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsK IAkJRG9pbmdDb21tYW5kUmVhZCA9IGZhbHNlOworCQlEaXNhYmxlSW50ZXJydXB0KElOVEVS UlVQVF9TSU5WQUxfQ0FUQ0hVUCk7CisJCURpc2FibGVJbnRlcnJ1cHQoSU5URVJSVVBUX0FT WU5DX05PVElGWSk7CisJCURpc2FibGVJbnRlcnJ1cHQoSU5URVJSVVBUX0lETEVfU1RBVFNf VElNRU9VVCk7CiAKIAkJLyoKIAkJICogKDYpIGNoZWNrIGZvciBhbnkgb3RoZXIgaW50ZXJl c3RpbmcgZXZlbnRzIHRoYXQgaGFwcGVuZWQgd2hpbGUgd2UKIAkJICogc2xlcHQuCiAJCSAq LwotCQlpZiAoQ29uZmlnUmVsb2FkUGVuZGluZykKLQkJewotCQkJQ29uZmlnUmVsb2FkUGVu ZGluZyA9IGZhbHNlOworCQlpZiAoQ29uc3VtZUludGVycnVwdChJTlRFUlJVUFRfQ09ORklH X1JFTE9BRCkpCiAJCQlQcm9jZXNzQ29uZmlnRmlsZShQR0NfU0lHSFVQKTsKLQkJfQogCiAJ CS8qCiAJCSAqICg3KSBwcm9jZXNzIHRoZSBjb21tYW5kLiAgQnV0IGlnbm9yZSBpdCBpZiB3 ZSdyZSBza2lwcGluZyB0aWxsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQv anNvbnBhdGhfZ3JhbS55IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25wYXRoX2dyYW0u eQppbmRleCA0NTQzNjI2ZmZjOC4uOTEyMGZlYWI3YmUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9qc29ucGF0aF9ncmFtLnkKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L2pzb25wYXRoX2dyYW0ueQpAQCAtMTgsOCArMTgsOCBAQAogCiAjaW5jbHVkZSAiY2F0 YWxvZy9wZ19jb2xsYXRpb24uaCIKICNpbmNsdWRlICJmbWdyLmgiCisjaW5jbHVkZSAiaXBj L2ludGVycnVwdC5oIgogI2luY2x1ZGUgImpzb25wYXRoX2ludGVybmFsLmgiCi0jaW5jbHVk ZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAibm9kZXMvcGdfbGlzdC5oIgogI2luY2x1ZGUg InJlZ2V4L3JlZ2V4LmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9tY3h0ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2FkdC9tY3h0ZnVuY3MuYwppbmRleCBjN2Y3YjhiYzJkZC4uMTg4MDM4YzlmNjggMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9tY3h0ZnVuY3MuYworKysgYi9zcmMv YmFja2VuZC91dGlscy9hZHQvbWN4dGZ1bmNzLmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNs dWRlICJwb3N0Z3Jlcy5oIgogCiAjaW5jbHVkZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUgImlw Yy9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJtYi9wZ193Y2hhci5oIgogI2luY2x1ZGUgInN0 b3JhZ2UvcHJvYy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY2FycmF5LmgiCkBAIC0yNjYs NyArMjY3LDYgQEAgcGdfbG9nX2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzKFBHX0ZVTkNUSU9O X0FSR1MpCiB7CiAJaW50CQkJcGlkID0gUEdfR0VUQVJHX0lOVDMyKDApOwogCVBHUFJPQwkg ICAqcHJvYzsKLQlQcm9jTnVtYmVyCXByb2NOdW1iZXIgPSBJTlZBTElEX1BST0NfTlVNQkVS OwogCiAJLyoKIAkgKiBTZWUgaWYgdGhlIHByb2Nlc3Mgd2l0aCBnaXZlbiBwaWQgaXMgYSBi YWNrZW5kIG9yIGFuIGF1eGlsaWFyeSBwcm9jZXNzLgpAQCAtMjk1LDE0ICsyOTUsNyBAQCBw Z19sb2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHMoUEdfRlVOQ1RJT05fQVJHUykKIAkJUEdf UkVUVVJOX0JPT0woZmFsc2UpOwogCX0KIAotCXByb2NOdW1iZXIgPSBHZXROdW1iZXJGcm9t UEdQcm9jKHByb2MpOwotCWlmIChTZW5kUHJvY1NpZ25hbChwaWQsIFBST0NTSUdfTE9HX01F TU9SWV9DT05URVhULCBwcm9jTnVtYmVyKSA8IDApCi0JewotCQkvKiBBZ2FpbiwganVzdCBh IHdhcm5pbmcgdG8gYWxsb3cgbG9vcHMgKi8KLQkJZXJlcG9ydChXQVJOSU5HLAotCQkJCShl cnJtc2coImNvdWxkIG5vdCBzZW5kIHNpZ25hbCB0byBwcm9jZXNzICVkOiAlbSIsIHBpZCkp KTsKLQkJUEdfUkVUVVJOX0JPT0woZmFsc2UpOwotCX0KKwlTZW5kSW50ZXJydXB0KElOVEVS UlVQVF9MT0dfTUVNT1JZX0NPTlRFWFQsIEdldE51bWJlckZyb21QR1Byb2MocHJvYykpOwog CiAJUEdfUkVUVVJOX0JPT0wodHJ1ZSk7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91 dGlscy9hZHQvbWlzYy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L21pc2MuYwppbmRleCAz MmE3ODdkN2RmNy4uOWY2NjAzNjM5MjEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9taXNjLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L21pc2MuYwpAQCAtMzAs NiArMzAsNyBAQAogI2luY2x1ZGUgImNvbW1hbmRzL3RhYmxlc3BhY2UuaCIKICNpbmNsdWRl ICJjb21tb24va2V5d29yZHMuaCIKICNpbmNsdWRlICJmdW5jYXBpLmgiCisjaW5jbHVkZSAi aXBjL2ludGVycnVwdC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgIm5v ZGVzL21pc2Nub2Rlcy5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV90eXBlLmgiCkBAIC0z OCw3ICszOSw2IEBACiAjaW5jbHVkZSAicG9zdG1hc3Rlci9zeXNsb2dnZXIuaCIKICNpbmNs dWRlICJyZXdyaXRlL3Jld3JpdGVIYW5kbGVyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9mZC5o IgotI2luY2x1ZGUgInN0b3JhZ2UvbGF0Y2guaCIKICNpbmNsdWRlICJ0Y29wL3Rjb3Bwcm90 LmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9mbWdy b2lkcy5oIgpAQCAtMzQ2LDE2ICszNDYsMTYgQEAgcGdfc2xlZXAoUEdfRlVOQ1RJT05fQVJH UykKIAl1c2VjcyA9IChpbnQ2NCkgTWluKHNlY3MsIChmbG9hdDgpIChQR19JTlQ2NF9NQVgg LyAyKSk7CiAKIAkvKgotCSAqIFdlIHNsZWVwIHVzaW5nIFdhaXRMYXRjaCwgdG8gZW5zdXJl IHRoYXQgd2UnbGwgd2FrZSB1cCBwcm9tcHRseSBpZiBhbgotCSAqIGltcG9ydGFudCBzaWdu YWwgKHN1Y2ggYXMgU0lHQUxSTSBvciBTSUdJTlQpIGFycml2ZXMuICBCZWNhdXNlCi0JICog V2FpdExhdGNoJ3MgdXBwZXIgbGltaXQgb2YgZGVsYXkgaXMgSU5UX01BWCBtaWxsaXNlY29u ZHMsIGFuZCB0aGUgdXNlcgotCSAqIG1pZ2h0IGFzayBmb3IgbW9yZSB0aGFuIHRoYXQsIHdl IHNsZWVwIGZvciBhdCBtb3N0IDEwIG1pbnV0ZXMgYW5kIHRoZW4KLQkgKiBsb29wLgorCSAq IFdlIHNsZWVwIHVzaW5nIFdhaXRJbnRlcnJ1cHQsIHRvIGVuc3VyZSB0aGF0IHdlJ2xsIHdh a2UgdXAgcHJvbXB0bHkgaWYKKwkgKiBhbiBpbXBvcnRhbnQgc2lnbmFsIChzdWNoIGFzIFNJ R0FMUk0gb3IgU0lHSU5UKSBhcnJpdmVzLiAgQmVjYXVzZQorCSAqIFdhaXRJbnRlcnJ1cHQn cyB1cHBlciBsaW1pdCBvZiBkZWxheSBpcyBJTlRfTUFYIG1pbGxpc2Vjb25kcywgYW5kIHRo ZQorCSAqIHVzZXIgbWlnaHQgYXNrIGZvciBtb3JlIHRoYW4gdGhhdCwgd2Ugc2xlZXAgZm9y IGF0IG1vc3QgMTAgbWludXRlcyBhbmQKKwkgKiB0aGVuIGxvb3AuCiAJICoKIAkgKiBCeSBj b21wdXRpbmcgdGhlIGludGVuZGVkIHN0b3AgdGltZSBpbml0aWFsbHksIHdlIGF2b2lkIGFj Y3VtdWxhdGlvbiBvZgogCSAqIGV4dHJhIGRlbGF5IGFjcm9zcyBtdWx0aXBsZSBzbGVlcHMu ICBUaGlzIGFsc28gZW5zdXJlcyB3ZSB3b24ndCBkZWxheQotCSAqIGxlc3MgdGhhbiB0aGUg c3BlY2lmaWVkIHRpbWUgd2hlbiBXYWl0TGF0Y2ggaXMgdGVybWluYXRlZCBlYXJseSBieSBh Ci0JICogbm9uLXF1ZXJ5LWNhbmNlbGluZyBzaWduYWwgc3VjaCBhcyBTSUdIVVAuCisJICog bGVzcyB0aGFuIHRoZSBzcGVjaWZpZWQgdGltZSB3aGVuIFdhaXRJbnRlcnJ1cHQgaXMgdGVy bWluYXRlZCBlYXJseSBieQorCSAqIGEgbm9uLXF1ZXJ5LWNhbmNlbGluZyBzaWduYWwgc3Vj aCBhcyBTSUdIVVAuCiAJICovCiAJZW5kdGltZSA9IEdldEN1cnJlbnRUaW1lc3RhbXAoKSAr IHVzZWNzOwogCkBAIC0zNzQsMTEgKzM3NCwxMCBAQCBwZ19zbGVlcChQR19GVU5DVElPTl9B UkdTKQogCQllbHNlCiAJCQlicmVhazsKIAotCQkodm9pZCkgV2FpdExhdGNoKE15TGF0Y2gs Ci0JCQkJCQkgV0xfTEFUQ0hfU0VUIHwgV0xfVElNRU9VVCB8IFdMX0VYSVRfT05fUE1fREVB VEgsCi0JCQkJCQkgZGVsYXlfbXMsCi0JCQkJCQkgV0FJVF9FVkVOVF9QR19TTEVFUCk7Ci0J CVJlc2V0TGF0Y2goTXlMYXRjaCk7CisJCSh2b2lkKSBXYWl0SW50ZXJydXB0KENoZWNrRm9y SW50ZXJydXB0c01hc2ssCisJCQkJCQkJIFdMX0lOVEVSUlVQVCB8IFdMX1RJTUVPVVQgfCBX TF9FWElUX09OX1BNX0RFQVRILAorCQkJCQkJCSBkZWxheV9tcywKKwkJCQkJCQkgV0FJVF9F VkVOVF9QR19TTEVFUCk7CiAJfQogCiAJUEdfUkVUVVJOX1ZPSUQoKTsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC90aW1lc3RhbXAuYyBiL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC90aW1lc3RhbXAuYwppbmRleCA4ZGViMjM2OTQ3MS4uZGY3NjU3MDMxYjIgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC90aW1lc3RhbXAuYworKysgYi9zcmMvYmFj a2VuZC91dGlscy9hZHQvdGltZXN0YW1wLmMKQEAgLTE3MzksMTAgKzE3MzksMTAgQEAgVGlt ZXN0YW1wRGlmZmVyZW5jZShUaW1lc3RhbXBUeiBzdGFydF90aW1lLCBUaW1lc3RhbXBUeiBz dG9wX3RpbWUsCiAgKiBUaW1lc3RhbXBEaWZmZXJlbmNlTWlsbGlzZWNvbmRzIC0tIGNvbnZl cnQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28KICAqIAkJdGltZXN0YW1wcyBpbnRvIGlu dGVnZXIgbWlsbGlzZWNvbmRzCiAgKgotICogVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCB0byBj YWxjdWxhdGUgYSB3YWl0IHRpbWVvdXQgZm9yIFdhaXRMYXRjaCgpCisgKiBUaGlzIGlzIHR5 cGljYWxseSB1c2VkIHRvIGNhbGN1bGF0ZSBhIHdhaXQgdGltZW91dCBmb3IgV2FpdEludGVy cnVwdCgpCiAgKiBvciBhIHJlbGF0ZWQgZnVuY3Rpb24uICBUaGUgY2hvaWNlIG9mICJsb25n IiBhcyB0aGUgcmVzdWx0IHR5cGUKICAqIGlzIHRvIGhhcm1vbml6ZSB3aXRoIHRoYXQ7IGZ1 cnRoZXJtb3JlLCB3ZSBjbGFtcCB0aGUgcmVzdWx0IHRvIGF0IG1vc3QKLSAqIElOVF9NQVgg bWlsbGlzZWNvbmRzLCBiZWNhdXNlIHRoYXQncyBhbGwgdGhhdCBXYWl0TGF0Y2goKSBhbGxv d3MuCisgKiBJTlRfTUFYIG1pbGxpc2Vjb25kcywgYmVjYXVzZSB0aGF0J3MgYWxsIHRoYXQg V2FpdEludGVycnVwdCgpIGFsbG93cy4KICAqCiAgKiBXZSBleHBlY3Qgc3RhcnRfdGltZSA8 PSBzdG9wX3RpbWUuICBJZiBub3QsIHdlIHJldHVybiB6ZXJvLAogICogc2luY2UgdGhlbiB3 ZSdyZSBhbHJlYWR5IHBhc3QgdGhlIHByZXZpb3VzbHkgZGV0ZXJtaW5lZCBzdG9wX3RpbWUu CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9lcnJvci9lbG9nLmMgYi9zcmMvYmFj a2VuZC91dGlscy9lcnJvci9lbG9nLmMKaW5kZXggYWE1MzBkMzY4NWUuLjdkMjRkYjk1MGRi IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9lcnJvci9lbG9nLmMKKysrIGIvc3Jj L2JhY2tlbmQvdXRpbHMvZXJyb3IvZWxvZy5jCkBAIC01MjYsNyArNTI2LDYgQEAgZXJyZmlu aXNoKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZW5vLCBjb25zdCBjaGFyICpmdW5j bmFtZSkKIAkJICogc2hvdWxkIG1ha2UgbGlmZSBlYXNpZXIgZm9yIG1vc3QuKQogCQkgKi8K IAkJSW50ZXJydXB0SG9sZG9mZkNvdW50ID0gMDsKLQkJUXVlcnlDYW5jZWxIb2xkb2ZmQ291 bnQgPSAwOwogCiAJCUNyaXRTZWN0aW9uQ291bnQgPSAwOwkvKiBzaG91bGQgYmUgdW5uZWNl c3NhcnksIGJ1dC4uLiAqLwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9pbml0 L2dsb2JhbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jCmluZGV4IDM2 YWQ3MDhiMzYwLi5hODc0NzUzMTlhMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMv aW5pdC9nbG9iYWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMK QEAgLTI5LDIwICsyOSw2IEBACiAKIFByb3RvY29sVmVyc2lvbiBGcm9udGVuZFByb3RvY29s OwogCi12b2xhdGlsZSBzaWdfYXRvbWljX3QgSW50ZXJydXB0UGVuZGluZyA9IGZhbHNlOwot dm9sYXRpbGUgc2lnX2F0b21pY190IFF1ZXJ5Q2FuY2VsUGVuZGluZyA9IGZhbHNlOwotdm9s YXRpbGUgc2lnX2F0b21pY190IFByb2NEaWVQZW5kaW5nID0gZmFsc2U7Ci12b2xhdGlsZSBz aWdfYXRvbWljX3QgQ2hlY2tDbGllbnRDb25uZWN0aW9uUGVuZGluZyA9IGZhbHNlOwotdm9s YXRpbGUgc2lnX2F0b21pY190IENsaWVudENvbm5lY3Rpb25Mb3N0ID0gZmFsc2U7Ci12b2xh dGlsZSBzaWdfYXRvbWljX3QgSWRsZUluVHJhbnNhY3Rpb25TZXNzaW9uVGltZW91dFBlbmRp bmcgPSBmYWxzZTsKLXZvbGF0aWxlIHNpZ19hdG9taWNfdCBUcmFuc2FjdGlvblRpbWVvdXRQ ZW5kaW5nID0gZmFsc2U7Ci12b2xhdGlsZSBzaWdfYXRvbWljX3QgSWRsZVNlc3Npb25UaW1l b3V0UGVuZGluZyA9IGZhbHNlOwotdm9sYXRpbGUgc2lnX2F0b21pY190IFByb2NTaWduYWxC YXJyaWVyUGVuZGluZyA9IGZhbHNlOwotdm9sYXRpbGUgc2lnX2F0b21pY190IExvZ01lbW9y eUNvbnRleHRQZW5kaW5nID0gZmFsc2U7Ci12b2xhdGlsZSBzaWdfYXRvbWljX3QgSWRsZVN0 YXRzVXBkYXRlVGltZW91dFBlbmRpbmcgPSBmYWxzZTsKLXZvbGF0aWxlIHVpbnQzMiBJbnRl cnJ1cHRIb2xkb2ZmQ291bnQgPSAwOwotdm9sYXRpbGUgdWludDMyIFF1ZXJ5Q2FuY2VsSG9s ZG9mZkNvdW50ID0gMDsKLXZvbGF0aWxlIHVpbnQzMiBDcml0U2VjdGlvbkNvdW50ID0gMDsK IAogaW50CQkJTXlQcm9jUGlkOwogcGdfdGltZV90CU15U3RhcnRUaW1lOwpAQCAtNTMsMTUg KzM5LDYgQEAgdWludDgJCU15Q2FuY2VsS2V5W01BWF9DQU5DRUxfS0VZX0xFTkdUSF07CiBp bnQJCQlNeUNhbmNlbEtleUxlbmd0aCA9IDA7CiBpbnQJCQlNeVBNQ2hpbGRTbG90OwogCi0v KgotICogTXlMYXRjaCBwb2ludHMgdG8gdGhlIGxhdGNoIHRoYXQgc2hvdWxkIGJlIHVzZWQg Zm9yIHNpZ25hbCBoYW5kbGluZyBieSB0aGUKLSAqIGN1cnJlbnQgcHJvY2Vzcy4gSXQgd2ls bCBlaXRoZXIgcG9pbnQgdG8gYSBwcm9jZXNzIGxvY2FsIGxhdGNoIGlmIHRoZQotICogY3Vy cmVudCBwcm9jZXNzIGRvZXMgbm90IGhhdmUgYSBQR1BST0MgZW50cnkgaW4gdGhhdCBtb21l bnQsIG9yIHRvCi0gKiBQR1BST0MtPnByb2NMYXRjaCBpZiBpdCBoYXMuIFRodXMgaXQgY2Fu IGFsd2F5cyBiZSB1c2VkIGluIHNpZ25hbCBoYW5kbGVycywKLSAqIHdpdGhvdXQgY2hlY2tp bmcgZm9yIGl0cyBleGlzdGVuY2UuCi0gKi8KLXN0cnVjdCBMYXRjaCAqTXlMYXRjaDsKLQog LyoKICAqIERhdGFEaXIgaXMgdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHRvcCBsZXZlbCBv ZiB0aGUgUEdEQVRBIGRpcmVjdG9yeSB0cmVlLgogICogRXhjZXB0IGR1cmluZyBlYXJseSBz dGFydHVwLCB0aGlzIGlzIGFsc28gdGhlIHNlcnZlcidzIHdvcmtpbmcgZGlyZWN0b3J5Owpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9taXNjaW5pdC5jIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvaW5pdC9taXNjaW5pdC5jCmluZGV4IDYwOGY3YWQ3YWJiLi44ZjVjYjg2 NDhlMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9taXNjaW5pdC5jCisr KyBiL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvbWlzY2luaXQuYwpAQCAtMzIsMTggKzMyLDE3 IEBACiAjaW5jbHVkZSAiYWNjZXNzL3BhcmFsbGVsLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9w Z19hdXRoaWQuaCIKICNpbmNsdWRlICJjb21tb24vZmlsZV9wZXJtLmgiCisjaW5jbHVkZSAi aXBjL3NpZ25hbF9oYW5kbGVycy5oIgogI2luY2x1ZGUgImxpYnBxL2xpYnBxLmgiCiAjaW5j bHVkZSAibGlicHEvcHFzaWduYWwuaCIKICNpbmNsdWRlICJtYi9wZ193Y2hhci5oIgogI2lu Y2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInBv c3RtYXN0ZXIvYXV0b3ZhY3V1bS5oIgotI2luY2x1ZGUgInBvc3RtYXN0ZXIvaW50ZXJydXB0 LmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9wb3N0bWFzdGVyLmgiCiAjaW5jbHVkZSAicmVw bGljYXRpb24vc2xvdHN5bmMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2ZkLmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9pcGMuaCIKLSNpbmNsdWRlICJzdG9yYWdlL2xhdGNoLmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9wZ19zaG1lbS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcG1zaWduYWwuaCIK ICNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKQEAgLTY2LDggKzY1LDYgQEAgQmFja2VuZFR5 cGUgTXlCYWNrZW5kVHlwZTsKIC8qIExpc3Qgb2YgbG9jayBmaWxlcyB0byBiZSByZW1vdmVk IGF0IHByb2MgZXhpdCAqLwogc3RhdGljIExpc3QgKmxvY2tfZmlsZXMgPSBOSUw7CiAKLXN0 YXRpYyBMYXRjaCBMb2NhbExhdGNoRGF0YTsKLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoJCWlnbm9y aW5nIHN5c3RlbSBpbmRleGVzIHN1cHBvcnQgc3R1ZmYKICAqCkBAIC0xMjYsMTAgKzEyMyw5 IEBAIEluaXRQb3N0bWFzdGVyQ2hpbGQodm9pZCkKIAlwcWluaXRtYXNrKCk7CiAjZW5kaWYK IAotCS8qIEluaXRpYWxpemUgcHJvY2Vzcy1sb2NhbCBsYXRjaCBzdXBwb3J0ICovCisJLyog SW5pdGlhbGl6ZSBwcm9jZXNzLWxvY2FsIGludGVycnVwdCBzdXBwb3J0ICovCiAJSW5pdGlh bGl6ZVdhaXRFdmVudFN1cHBvcnQoKTsKLQlJbml0UHJvY2Vzc0xvY2FsTGF0Y2goKTsKLQlJ bml0aWFsaXplTGF0Y2hXYWl0U2V0KCk7CisJSW5pdGlhbGl6ZUludGVycnVwdFdhaXRTZXQo KTsKIAogCS8qCiAJICogSWYgcG9zc2libGUsIG1ha2UgdGhpcyBwcm9jZXNzIGEgZ3JvdXAg bGVhZGVyLCBzbyB0aGF0IHRoZSBwb3N0bWFzdGVyCkBAIC0xNDMsMjUgKzEzOSwxMiBAQCBJ bml0UG9zdG1hc3RlckNoaWxkKHZvaWQpCiAjZW5kaWYKIAogCS8qCi0JICogUmVzZXQgc2ln bmFscyB0aGF0IGFyZSB1c2VkIGJ5IHBvc3RtYXN0ZXIgYnV0IG5vdCBieSBjaGlsZCBwcm9j ZXNzZXMuCisJICogU2V0IHN0YW5kYXJkIHNpZ25hbCBoYW5kbGVycyBzdWl0YWJsZSBmb3Ig bW9zdCBiYWNrZW5kIHByb2Nlc3Nlcy4KIAkgKgotCSAqIEN1cnJlbnRseSBqdXN0IFNJR0NI TEQuICBUaGUgaGFuZGxlcnMgZm9yIG90aGVyIHNpZ25hbHMgYXJlIG92ZXJyaWRkZW4KLQkg KiBsYXRlciwgZGVwZW5kaW5nIG9uIHRoZSBjaGlsZCBwcm9jZXNzIHR5cGUuCisJICogV2Ug ZG9uJ3QgdW5ibG9jayB0aGUgc2lnbmFscyB5ZXQsIHNvIHRoYXQgaWYgdGhlIHByb2Nlc3Mg bmVlZHMgc3BlY2lhbAorCSAqIHNpZ25hbCBoYW5kbGluZywgaXQgY2FuIGluc3RhbGwgY3Vz dG9tIGhhbmRsZXJzIGJlZm9yZSB1bmJsb2NraW5nLgogCSAqLwotCXBxc2lnbmFsKFNJR0NI TEQsIFNJR19ERkwpOyAvKiBzeXN0ZW0oKSByZXF1aXJlcyB0aGlzIHRvIGJlIFNJR19ERkwg cmF0aGVyCi0JCQkJCQkJCSAqIHRoYW4gU0lHX0lHTiBvbiBzb21lIHBsYXRmb3JtcyAqLwot Ci0JLyoKLQkgKiBFdmVyeSBwb3N0bWFzdGVyIGNoaWxkIHByb2Nlc3MgaXMgZXhwZWN0ZWQg dG8gcmVzcG9uZCBwcm9tcHRseSB0bwotCSAqIFNJR1FVSVQgYXQgYWxsIHRpbWVzLiAgVGhl cmVmb3JlIHdlIGNlbnRyYWxseSByZW1vdmUgU0lHUVVJVCBmcm9tCi0JICogQmxvY2tTaWcg YW5kIGluc3RhbGwgYSBzdWl0YWJsZSBzaWduYWwgaGFuZGxlci4gIChDbGllbnQtZmFjaW5n Ci0JICogcHJvY2Vzc2VzIG1heSBjaG9vc2UgdG8gcmVwbGFjZSB0aGlzIGRlZmF1bHQgY2hv aWNlIG9mIGhhbmRsZXIgd2l0aAotCSAqIHF1aWNrZGllKCkuKSAgQWxsIG90aGVyIGJsb2Nr YWJsZSBzaWduYWxzIHJlbWFpbiBibG9ja2VkIGZvciBub3cuCi0JICovCi0JcHFzaWduYWwo U0lHUVVJVCwgU2lnbmFsSGFuZGxlckZvckNyYXNoRXhpdCk7Ci0KLQlzaWdkZWxzZXQoJkJs b2NrU2lnLCBTSUdRVUlUKTsKLQlzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJkJsb2NrU2ln LCBOVUxMKTsKKwlTZXRQb3N0bWFzdGVyQ2hpbGRTaWduYWxIYW5kbGVycygpOwogCiAJLyoK IAkgKiBJdCBpcyB1cCB0byB0aGUgKk1haW4oKSBmdW5jdGlvbiB0byBzZXQgc2lnbmFsIGhh bmRsZXJzIGFwcHJvcHJpYXRlIGZvcgpAQCAtMjAxLDEwICsxODQsOSBAQCBJbml0U3RhbmRh bG9uZVByb2Nlc3MoY29uc3QgY2hhciAqYXJndjApCiAKIAlJbml0UHJvY2Vzc0dsb2JhbHMo KTsKIAotCS8qIEluaXRpYWxpemUgcHJvY2Vzcy1sb2NhbCBsYXRjaCBzdXBwb3J0ICovCisJ LyogSW5pdGlhbGl6ZSBwcm9jZXNzLWxvY2FsIGludGVycnVwdCBzdXBwb3J0ICovCiAJSW5p dGlhbGl6ZVdhaXRFdmVudFN1cHBvcnQoKTsKLQlJbml0UHJvY2Vzc0xvY2FsTGF0Y2goKTsK LQlJbml0aWFsaXplTGF0Y2hXYWl0U2V0KCk7CisJSW5pdGlhbGl6ZUludGVycnVwdFdhaXRT ZXQoKTsKIAogCS8qCiAJICogRm9yIGNvbnNpc3RlbmN5IHdpdGggSW5pdFBvc3RtYXN0ZXJD aGlsZCwgaW5pdGlhbGl6ZSBzaWduYWwgbWFzayBoZXJlLgpAQCAtMjI1LDQ4ICsyMDcsNiBA QCBJbml0U3RhbmRhbG9uZVByb2Nlc3MoY29uc3QgY2hhciAqYXJndjApCiAJCWdldF9wa2ds aWJfcGF0aChteV9leGVjX3BhdGgsIHBrZ2xpYl9wYXRoKTsKIH0KIAotdm9pZAotU3dpdGNo VG9TaGFyZWRMYXRjaCh2b2lkKQotewotCUFzc2VydChNeUxhdGNoID09ICZMb2NhbExhdGNo RGF0YSk7Ci0JQXNzZXJ0KE15UHJvYyAhPSBOVUxMKTsKLQotCU15TGF0Y2ggPSAmTXlQcm9j LT5wcm9jTGF0Y2g7Ci0KLQlpZiAoRmVCZVdhaXRTZXQpCi0JCU1vZGlmeVdhaXRFdmVudChG ZUJlV2FpdFNldCwgRmVCZVdhaXRTZXRMYXRjaFBvcywgV0xfTEFUQ0hfU0VULAotCQkJCQkJ TXlMYXRjaCk7Ci0KLQkvKgotCSAqIFNldCB0aGUgc2hhcmVkIGxhdGNoIGFzIHRoZSBsb2Nh bCBvbmUgbWlnaHQgaGF2ZSBiZWVuIHNldC4gVGhpcwotCSAqIHNob3VsZG4ndCBub3JtYWxs eSBiZSBuZWNlc3NhcnkgYXMgY29kZSBpcyBzdXBwb3NlZCB0byBjaGVjayB0aGUKLQkgKiBj b25kaXRpb24gYmVmb3JlIHdhaXRpbmcgZm9yIHRoZSBsYXRjaCwgYnV0IGEgYml0IGNhcmUg Y2FuJ3QgaHVydC4KLQkgKi8KLQlTZXRMYXRjaChNeUxhdGNoKTsKLX0KLQotdm9pZAotSW5p dFByb2Nlc3NMb2NhbExhdGNoKHZvaWQpCi17Ci0JTXlMYXRjaCA9ICZMb2NhbExhdGNoRGF0 YTsKLQlJbml0TGF0Y2goTXlMYXRjaCk7Ci19Ci0KLXZvaWQKLVN3aXRjaEJhY2tUb0xvY2Fs TGF0Y2godm9pZCkKLXsKLQlBc3NlcnQoTXlMYXRjaCAhPSAmTG9jYWxMYXRjaERhdGEpOwot CUFzc2VydChNeVByb2MgIT0gTlVMTCAmJiBNeUxhdGNoID09ICZNeVByb2MtPnByb2NMYXRj aCk7Ci0KLQlNeUxhdGNoID0gJkxvY2FsTGF0Y2hEYXRhOwotCi0JaWYgKEZlQmVXYWl0U2V0 KQotCQlNb2RpZnlXYWl0RXZlbnQoRmVCZVdhaXRTZXQsIEZlQmVXYWl0U2V0TGF0Y2hQb3Ms IFdMX0xBVENIX1NFVCwKLQkJCQkJCU15TGF0Y2gpOwotCi0JU2V0TGF0Y2goTXlMYXRjaCk7 Ci19Ci0KIC8qCiAgKiBSZXR1cm4gYSBodW1hbi1yZWFkYWJsZSBzdHJpbmcgcmVwcmVzZW50 YXRpb24gb2YgYSBCYWNrZW5kVHlwZS4KICAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91 dGlscy9pbml0L3Bvc3Rpbml0LmMgYi9zcmMvYmFja2VuZC91dGlscy9pbml0L3Bvc3Rpbml0 LmMKaW5kZXggM2Y0MDFmYWYzZGUuLmI2OWNkYzYyNzQzIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC91dGlscy9pbml0L3Bvc3Rpbml0LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvaW5p dC9wb3N0aW5pdC5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19k YXRhYmFzZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfZGJfcm9sZV9zZXR0aW5nLmgiCiAj aW5jbHVkZSAiY2F0YWxvZy9wZ190YWJsZXNwYWNlLmgiCisjaW5jbHVkZSAiaXBjL2ludGVy cnVwdC5oIgogI2luY2x1ZGUgImxpYnBxL2F1dGguaCIKICNpbmNsdWRlICJsaWJwcS9saWJw cS1iZS5oIgogI2luY2x1ZGUgIm1iL3BnX3djaGFyLmgiCkBAIC0xMzU3LDIwICsxMzU4LDE5 IEBAIFNodXRkb3duUG9zdGdyZXMoaW50IGNvZGUsIERhdHVtIGFyZykKIHN0YXRpYyB2b2lk CiBTdGF0ZW1lbnRUaW1lb3V0SGFuZGxlcih2b2lkKQogewotCWludAkJCXNpZyA9IFNJR0lO VDsKLQogCS8qCiAJICogRHVyaW5nIGF1dGhlbnRpY2F0aW9uIHRoZSB0aW1lb3V0IGlzIHVz ZWQgdG8gZGVhbCB3aXRoCiAJICogYXV0aGVudGljYXRpb25fdGltZW91dCAtIHdlIHdhbnQg dG8gcXVpdCBpbiByZXNwb25zZSB0byBzdWNoIHRpbWVvdXRzLgogCSAqLwogCWlmIChDbGll bnRBdXRoSW5Qcm9ncmVzcykKLQkJc2lnID0gU0lHVEVSTTsKKwkJUmFpc2VJbnRlcnJ1cHQo SU5URVJSVVBUX1RFUk1JTkFURSk7CisJZWxzZQorCQlSYWlzZUludGVycnVwdChJTlRFUlJV UFRfUVVFUllfQ0FOQ0VMKTsKIAotI2lmZGVmIEhBVkVfU0VUU0lECi0JLyogdHJ5IHRvIHNp Z25hbCB3aG9sZSBwcm9jZXNzIGdyb3VwICovCi0Ja2lsbCgtTXlQcm9jUGlkLCBzaWcpOwot I2VuZGlmCi0Ja2lsbChNeVByb2NQaWQsIHNpZyk7CisJLyoKKwkgKiBGSVhNRTogd2UgdXNl ZCB0byBzaWduYWwgdGhlIHdob2xlIHByb2Nlc3MgZ3JvdXAuIElzIHRoYXQgaW1wb3J0YW50 LCBpZgorCSAqIHdlJ3JlIGUuZy4gZXhlY3V0aW5nIGFyY2hpdmVfY29tbWFuZCA/CisJICov CiB9CiAKIC8qCkBAIC0xMzc5LDUxICsxMzc5LDM3IEBAIFN0YXRlbWVudFRpbWVvdXRIYW5k bGVyKHZvaWQpCiBzdGF0aWMgdm9pZAogTG9ja1RpbWVvdXRIYW5kbGVyKHZvaWQpCiB7Ci0j aWZkZWYgSEFWRV9TRVRTSUQKLQkvKiB0cnkgdG8gc2lnbmFsIHdob2xlIHByb2Nlc3MgZ3Jv dXAgKi8KLQlraWxsKC1NeVByb2NQaWQsIFNJR0lOVCk7Ci0jZW5kaWYKLQlraWxsKE15UHJv Y1BpZCwgU0lHSU5UKTsKKwlSYWlzZUludGVycnVwdChJTlRFUlJVUFRfUVVFUllfQ0FOQ0VM KTsKIH0KIAogc3RhdGljIHZvaWQKIFRyYW5zYWN0aW9uVGltZW91dEhhbmRsZXIodm9pZCkK IHsKLQlUcmFuc2FjdGlvblRpbWVvdXRQZW5kaW5nID0gdHJ1ZTsKLQlJbnRlcnJ1cHRQZW5k aW5nID0gdHJ1ZTsKLQlTZXRMYXRjaChNeUxhdGNoKTsKKwlSYWlzZUludGVycnVwdChJTlRF UlJVUFRfVFJBTlNBQ1RJT05fVElNRU9VVCk7CiB9CiAKIHN0YXRpYyB2b2lkCiBJZGxlSW5U cmFuc2FjdGlvblNlc3Npb25UaW1lb3V0SGFuZGxlcih2b2lkKQogewotCUlkbGVJblRyYW5z YWN0aW9uU2Vzc2lvblRpbWVvdXRQZW5kaW5nID0gdHJ1ZTsKLQlJbnRlcnJ1cHRQZW5kaW5n ID0gdHJ1ZTsKLQlTZXRMYXRjaChNeUxhdGNoKTsKKwlSYWlzZUludGVycnVwdChJTlRFUlJV UFRfSURMRV9JTl9UUkFOU0FDVElPTl9TRVNTSU9OX1RJTUVPVVQpOwogfQogCiBzdGF0aWMg dm9pZAogSWRsZVNlc3Npb25UaW1lb3V0SGFuZGxlcih2b2lkKQogewotCUlkbGVTZXNzaW9u VGltZW91dFBlbmRpbmcgPSB0cnVlOwotCUludGVycnVwdFBlbmRpbmcgPSB0cnVlOwotCVNl dExhdGNoKE15TGF0Y2gpOworCVJhaXNlSW50ZXJydXB0KElOVEVSUlVQVF9JRExFX1NFU1NJ T05fVElNRU9VVCk7CiB9CiAKIHN0YXRpYyB2b2lkCiBJZGxlU3RhdHNVcGRhdGVUaW1lb3V0 SGFuZGxlcih2b2lkKQogewotCUlkbGVTdGF0c1VwZGF0ZVRpbWVvdXRQZW5kaW5nID0gdHJ1 ZTsKLQlJbnRlcnJ1cHRQZW5kaW5nID0gdHJ1ZTsKLQlTZXRMYXRjaChNeUxhdGNoKTsKKwlS YWlzZUludGVycnVwdChJTlRFUlJVUFRfSURMRV9TVEFUU19USU1FT1VUKTsKIH0KIAogc3Rh dGljIHZvaWQKIENsaWVudENoZWNrVGltZW91dEhhbmRsZXIodm9pZCkKIHsKLQlDaGVja0Ns aWVudENvbm5lY3Rpb25QZW5kaW5nID0gdHJ1ZTsKLQlJbnRlcnJ1cHRQZW5kaW5nID0gdHJ1 ZTsKLQlTZXRMYXRjaChNeUxhdGNoKTsKKwlSYWlzZUludGVycnVwdChJTlRFUlJVUFRfQ0xJ RU5UX0NIRUNLX1RJTUVPVVQpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv dXRpbHMvbWlzYy90aW1lb3V0LmMgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL3RpbWVvdXQu YwppbmRleCBkZGJhNWRjNjA3Yy4uMWYzYWQzZGJmNTEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3V0aWxzL21pc2MvdGltZW91dC5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2Mv dGltZW91dC5jCkBAIC0xNyw3ICsxNyw2IEBACiAjaW5jbHVkZSA8c3lzL3RpbWUuaD4KIAog I2luY2x1ZGUgIm1pc2NhZG1pbi5oIgotI2luY2x1ZGUgInN0b3JhZ2UvbGF0Y2guaCIKICNp bmNsdWRlICJ1dGlscy90aW1lb3V0LmgiCiAjaW5jbHVkZSAidXRpbHMvdGltZXN0YW1wLmgi CiAKQEAgLTM3MCwxMiArMzY5LDYgQEAgaGFuZGxlX3NpZ19hbGFybShTSUdOQUxfQVJHUykK IAkgKi8KIAlIT0xEX0lOVEVSUlVQVFMoKTsKIAotCS8qCi0JICogU0lHQUxSTSBpcyBhbHdh eXMgY2F1c2UgZm9yIHdha2luZyBhbnl0aGluZyB3YWl0aW5nIG9uIHRoZSBwcm9jZXNzCi0J ICogbGF0Y2guCi0JICovCi0JU2V0TGF0Y2goTXlMYXRjaCk7Ci0KIAkvKgogCSAqIEFsd2F5 cyByZXNldCBzaWduYWxfcGVuZGluZywgZXZlbiBpZiAhYWxhcm1fZW5hYmxlZCwgc2luY2Ug aW5kZWVkIG5vCiAJICogc2lnbmFsIGlzIG5vdyBwZW5kaW5nLgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvdXRpbHMvbW1nci9tY3h0LmMgYi9zcmMvYmFja2VuZC91dGlscy9tbWdyL21j eHQuYwppbmRleCAwNzNiZGIzNWQyYS4uOTk2Y2FlMDViMjcgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3V0aWxzL21tZ3IvbWN4dC5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3Iv bWN4dC5jCkBAIC0xMzExLDM2ICsxMzExLDE2IEBAIE1lbW9yeUNvbnRleHRBbGxvY0V4dGVu ZGVkKE1lbW9yeUNvbnRleHQgY29udGV4dCwgU2l6ZSBzaXplLCBpbnQgZmxhZ3MpCiAJcmV0 dXJuIHJldDsKIH0KIAotLyoKLSAqIEhhbmRsZUxvZ01lbW9yeUNvbnRleHRJbnRlcnJ1cHQK LSAqCQlIYW5kbGUgcmVjZWlwdCBvZiBhbiBpbnRlcnJ1cHQgaW5kaWNhdGluZyBsb2dnaW5n IG9mIG1lbW9yeQotICoJCWNvbnRleHRzLgotICoKLSAqIEFsbCB0aGUgYWN0dWFsIHdvcmsg aXMgZGVmZXJyZWQgdG8gUHJvY2Vzc0xvZ01lbW9yeUNvbnRleHRJbnRlcnJ1cHQoKSwKLSAq IGJlY2F1c2Ugd2UgY2Fubm90IHNhZmVseSBlbWl0IGEgbG9nIG1lc3NhZ2UgaW5zaWRlIHRo ZSBzaWduYWwgaGFuZGxlci4KLSAqLwotdm9pZAotSGFuZGxlTG9nTWVtb3J5Q29udGV4dElu dGVycnVwdCh2b2lkKQotewotCUludGVycnVwdFBlbmRpbmcgPSB0cnVlOwotCUxvZ01lbW9y eUNvbnRleHRQZW5kaW5nID0gdHJ1ZTsKLQkvKiBsYXRjaCB3aWxsIGJlIHNldCBieSBwcm9j c2lnbmFsX3NpZ3VzcjFfaGFuZGxlciAqLwotfQotCiAvKgogICogUHJvY2Vzc0xvZ01lbW9y eUNvbnRleHRJbnRlcnJ1cHQKICAqIAkJUGVyZm9ybSBsb2dnaW5nIG9mIG1lbW9yeSBjb250 ZXh0cyBvZiB0aGlzIGJhY2tlbmQgcHJvY2Vzcy4KICAqCi0gKiBBbnkgYmFja2VuZCB0aGF0 IHBhcnRpY2lwYXRlcyBpbiBQcm9jU2lnbmFsIHNpZ25hbGluZyBtdXN0IGFycmFuZ2UKLSAq IHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBpZiB3ZSBzZWUgTG9nTWVtb3J5Q29udGV4dFBlbmRp bmcgc2V0LgotICogSXQgaXMgY2FsbGVkIGZyb20gQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKSwg d2hpY2ggaXMgZW5vdWdoIGJlY2F1c2UKLSAqIHRoZSB0YXJnZXQgcHJvY2VzcyBmb3IgbG9n Z2luZyBvZiBtZW1vcnkgY29udGV4dHMgaXMgYSBiYWNrZW5kLgorICogVGhpcyBpcyB0aGUg aGFuZGxlciBmb3IgSU5URVJSVVBUX0xPR19NRU1PUllfQ09OVEVYVCwgbm9ybWFsbHkgY2Fs bGVkIGZyb20KKyAqIENIRUNLX0ZPUl9JTlRFUlJVUFRTKCkuCiAgKi8KIHZvaWQKIFByb2Nl c3NMb2dNZW1vcnlDb250ZXh0SW50ZXJydXB0KHZvaWQpCiB7Ci0JTG9nTWVtb3J5Q29udGV4 dFBlbmRpbmcgPSBmYWxzZTsKLQogCS8qCiAJICogRXhpdCBpbW1lZGlhdGVseSBpZiBtZW1v cnkgY29udGV4dCBsb2dnaW5nIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MuIFRoaXMKIAkgKiBw cmV2ZW50cyByZWN1cnNpdmUgY2FsbHMsIHdoaWNoIGNvdWxkIG9jY3VyIGlmIGxvZ2dpbmcg aXMgcmVxdWVzdGVkCmRpZmYgLS1naXQgYS9zcmMvY29tbW9uL3NjcmFtLWNvbW1vbi5jIGIv c3JjL2NvbW1vbi9zY3JhbS1jb21tb24uYwppbmRleCAyNTlmYTU1NTRiNi4uMDBiOTJhN2Zl YTEgMTAwNjQ0Ci0tLSBhL3NyYy9jb21tb24vc2NyYW0tY29tbW9uLmMKKysrIGIvc3JjL2Nv bW1vbi9zY3JhbS1jb21tb24uYwpAQCAtMjMsNyArMjMsNyBAQAogI2luY2x1ZGUgImNvbW1v bi9obWFjLmgiCiAjaW5jbHVkZSAiY29tbW9uL3NjcmFtLWNvbW1vbi5oIgogI2lmbmRlZiBG Uk9OVEVORAotI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgImlwYy9pbnRlcnJ1 cHQuaCIKICNlbmRpZgogI2luY2x1ZGUgInBvcnQvcGdfYnN3YXAuaCIKIApkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvTWFrZWZpbGUgYi9zcmMvaW5jbHVkZS9NYWtlZmlsZQppbmRleCA0 ZWYwNjBlOTA1MC4uYjNmNWNkOTgwMzMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL01ha2Vm aWxlCisrKyBiL3NyYy9pbmNsdWRlL01ha2VmaWxlCkBAIC0yOCw2ICsyOCw3IEBAIFNVQkRJ UlMgPSBcCiAJZXhlY3V0b3IgXAogCWZlX3V0aWxzIFwKIAlmb3JlaWduIFwKKwlpcGMgXAog CWppdCBcCiAJbGliIFwKIAlsaWJwcSBcCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nl c3MvcGFyYWxsZWwuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9wYXJhbGxlbC5oCmluZGV4IDAx YmRmMmJlYzFmLi4yMWIwYjBhMWVjNyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNz L3BhcmFsbGVsLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3BhcmFsbGVsLmgKQEAgLTUz LDcgKzUzLDYgQEAgdHlwZWRlZiBzdHJ1Y3QgUGFyYWxsZWxXb3JrZXJDb250ZXh0CiAJc2ht X3RvYyAgICAqdG9jOwogfSBQYXJhbGxlbFdvcmtlckNvbnRleHQ7CiAKLWV4dGVybiBQR0RM TElNUE9SVCB2b2xhdGlsZSBzaWdfYXRvbWljX3QgUGFyYWxsZWxNZXNzYWdlUGVuZGluZzsK IGV4dGVybiBQR0RMTElNUE9SVCBpbnQgUGFyYWxsZWxXb3JrZXJOdW1iZXI7CiBleHRlcm4g UEdETExJTVBPUlQgYm9vbCBJbml0aWFsaXppbmdQYXJhbGxlbFdvcmtlcjsKIApAQCAtNzAs NyArNjksNiBAQCBleHRlcm4gdm9pZCBXYWl0Rm9yUGFyYWxsZWxXb3JrZXJzVG9GaW5pc2go UGFyYWxsZWxDb250ZXh0ICpwY3h0KTsKIGV4dGVybiB2b2lkIERlc3Ryb3lQYXJhbGxlbENv bnRleHQoUGFyYWxsZWxDb250ZXh0ICpwY3h0KTsKIGV4dGVybiBib29sIFBhcmFsbGVsQ29u dGV4dEFjdGl2ZSh2b2lkKTsKIAotZXh0ZXJuIHZvaWQgSGFuZGxlUGFyYWxsZWxNZXNzYWdl SW50ZXJydXB0KHZvaWQpOwogZXh0ZXJuIHZvaWQgUHJvY2Vzc1BhcmFsbGVsTWVzc2FnZXMo dm9pZCk7CiBleHRlcm4gdm9pZCBBdEVPWGFjdF9QYXJhbGxlbChib29sIGlzQ29tbWl0KTsK IGV4dGVybiB2b2lkIEF0RU9TdWJYYWN0X1BhcmFsbGVsKGJvb2wgaXNDb21taXQsIFN1YlRy YW5zYWN0aW9uSWQgbXlTdWJJZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5k cy9hc3luYy5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvYXN5bmMuaAppbmRleCAzYmFhZTdj YjhkYy4uYWNkOWFmYmNjNGIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2Fz eW5jLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvYXN5bmMuaApAQCAtMTMsMTEgKzEz LDggQEAKICNpZm5kZWYgQVNZTkNfSAogI2RlZmluZSBBU1lOQ19ICiAKLSNpbmNsdWRlIDxz aWduYWwuaD4KLQogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgVHJhY2Vfbm90aWZ5OwogZXh0 ZXJuIFBHRExMSU1QT1JUIGludCBtYXhfbm90aWZ5X3F1ZXVlX3BhZ2VzOwotZXh0ZXJuIFBH RExMSU1QT1JUIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBub3RpZnlJbnRlcnJ1cHRQZW5kaW5n OwogCiBleHRlcm4gU2l6ZSBBc3luY1NobWVtU2l6ZSh2b2lkKTsKIGV4dGVybiB2b2lkIEFz eW5jU2htZW1Jbml0KHZvaWQpOwpAQCAtNDAsOSArMzcsNiBAQCBleHRlcm4gdm9pZCBBdFN1 YkNvbW1pdF9Ob3RpZnkodm9pZCk7CiBleHRlcm4gdm9pZCBBdFN1YkFib3J0X05vdGlmeSh2 b2lkKTsKIGV4dGVybiB2b2lkIEF0UHJlcGFyZV9Ob3RpZnkodm9pZCk7CiAKLS8qIHNpZ25h bCBoYW5kbGVyIGZvciBpbmJvdW5kIG5vdGlmaWVzIChQUk9DU0lHX05PVElGWV9JTlRFUlJV UFQpICovCi1leHRlcm4gdm9pZCBIYW5kbGVOb3RpZnlJbnRlcnJ1cHQodm9pZCk7Ci0KIC8q IHByb2Nlc3MgaW50ZXJydXB0cyAqLwogZXh0ZXJuIHZvaWQgUHJvY2Vzc05vdGlmeUludGVy cnVwdChib29sIGZsdXNoKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvaXBjL2ludGVy cnVwdC5oIGIvc3JjL2luY2x1ZGUvaXBjL2ludGVycnVwdC5oCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40NDVhYjU0YzA0NQotLS0gL2Rldi9udWxsCisrKyBi L3NyYy9pbmNsdWRlL2lwYy9pbnRlcnJ1cHQuaApAQCAtMCwwICsxLDM2NCBAQAorLyotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKgorICogaW50ZXJydXB0LmgKKyAqCSAgSW50ZXItcHJvY2Vz cyBpbnRlcnJ1cHRzCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjQs IFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5 cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5p YQorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9pbmNsdWRlL2lwYy9pbnRlcnJ1 cHQuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpZm5kZWYgSVBDX0lO VEVSUlVQVF9ICisjZGVmaW5lIElQQ19JTlRFUlJVUFRfSAorCisjaW5jbHVkZSAicG9ydC9h dG9taWNzLmgiCisjaW5jbHVkZSAic3RvcmFnZS9wcm9jbnVtYmVyLmgiCisjaW5jbHVkZSAi c3RvcmFnZS93YWl0ZXZlbnRzZXQuaCIJLyogV0xfKiBhcmUgZGVmaW5lZCBpbiB3YWl0ZXZl bnRzZXQuaCAqLworCisvKgorICogRmxhZ3MgaW4gdGhlIHBlbmRpbmcgaW50ZXJydXB0cyBi aXRtYXNrLiBFYWNoIHZhbHVlIGlzIGEgZGlmZmVyZW50IGJpdCwgc28gdGhhdAorICogdGhl c2UgY2FuIGJlIGNvbnZlbmllbnRseSBPUidkIHRvZ2V0aGVyLgorICovCitlbnVtIEludGVy cnVwdFR5cGUKK3sKKwkvKgorCSAqIElOVEVSUlVQVF9XQUlUX1dBS0VVUCBpcyBzaGFyZWQg YnkgbWFueSB1c2UgY2FzZXMgdGhhdCBuZWVkIHRvIHdha2UgdXAKKwkgKiBhIHByb2Nlc3Ms IHdoaWNoIGRvbid0IG5lZWQgYSBkZWRpY2F0ZWQgaW50ZXJydXB0IGJpdC4KKwkgKi8KKwlJ TlRFUlJVUFRfV0FJVF9XQUtFVVAgPSAweDAwMDAwMDAxLAorCisKKwkvKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioKKwkgKiBTdGFuZGFyZCBpbnRlcnJ1cHRzIGhhbmRsZWQgdGhlIHNhbWUgYnkgbW9z dCBwcm9jZXNzZXMKKwkgKgorCSAqIE1vc3Qgb2YgdGhlc2UgYXJlIG5vcm1hbGx5IHByb2Nl c3NlZCBieSBDSEVDS19GT1JfSU5URVJSVVBUUygpIG9uY2UKKwkgKiBwcm9jZXNzIHN0YXJ0 dXAgaGFzIHJlYWNoZWQgU2V0U3RhbmRhcmRJbnRlcnJ1cHRzKCkuCisJICoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqLworCisJLyoKKwkgKiBCYWNrZW5kIGhhcyBiZWVuIHJlcXVlc3RlZCB0byB0ZXJt aW5hdGUgZ3JhY2VmdWxseS4KKwkgKgorCSAqIFRoaXMgaXMgcmFpc2VkIGJ5IHRoZSBTSUdU RVJNIHNpZ25hbCBoYW5kbGVyLCBvciBjYW4gYmUgc2VudCBkaXJlY3RseQorCSAqIGJ5IGFu b3RoZXIgYmFja2VuZCBlLmcuIHdpdGggcGdfdGVybWluYXRlX2JhY2tlbmQoKS4KKwkgKi8K KwlJTlRFUlJVUFRfVEVSTUlOQVRFID0gMHgwMDAwMDAwMiwKKworCS8qCisJICogQ2FuY2Vs IGN1cnJlbnQgcXVlcnksIGlmIGFueS4KKwkgKgorCSAqIFNlbnQgdG8gcmVndWxhciBiYWNr ZW5kcyBieSBwZ19jYW5jZWxfYmFja2VuZCgpLCBTSUdJTlQsIG9yIGluIHJlc3BvbnNlCisJ ICogdG8gYSBxdWVyeSBjYW5jZWxsYXRpb24gcGFja2V0LiAgU29tZSBvdGhlciBwcm9jZXNz ZXMgbGlrZSBhdXRvdmFjdXVtCisJICogd29ya2VycyBhbmQgbG9naWNhbCBkZWNvZGluZyBw cm9jZXNzZXMgYWxzbyByZWFjdCB0byB0aGlzLgorCSAqLworCUlOVEVSUlVQVF9RVUVSWV9D QU5DRUwgPSAweDAwMDAwMDA0LAorCisJLyoKKwkgKiBSZWNvdmVyeSBjb25mbGljdC4gVGhp cyBpcyBzZW50IGJ5IHRoZSBzdGFydHVwIHByb2Nlc3MgaW4gaG90IHN0YW5kYnkKKwkgKiBt b2RlIHdoZW4gYSBiYWNrZW5kIGhvbGRzIGJhY2sgdGhlIFdBTCByZXBsYXkgZm9yIHRvbyBs b25nLiBUaGUgcmVhc29uCisJICogZm9yIHRoZSBjb25mbGljdCBpbmRpY2F0ZWQgYnkgdGhl IFBHUFJPQy0+cGVuZGluZ1JlY292ZXJ5Q29uZmxpY3RzCisJICogYml0bWFzay4gQ29uZmxp Y3RzIGFyZSBnZW5lcmFsbHkgcmVzb2x2ZWQgYnkgdGVybWluYXRpbmcgdGhlIGN1cnJlbnQK KwkgKiBxdWVyeSBvciBzZXNzaW9uLiBUaGUgZXhhY3QgcmVhY3Rpb24gZGVwZW5kcyBvbiB0 aGUgcmVhc29uIGFuZCB3aGF0CisJICogc3RhdGUgdGhlIGJhY2tlbmQgaXMgaW4uCisJICov CisJSU5URVJSVVBUX1JFQ09WRVJZX0NPTkZMSUNUID0gMHgwMDAwMDAwOCwKKworCS8qCisJ ICogQ29uZmlnIGZpbGUgcmVsb2FkIGlzIHJlcXVlc3RlZC4KKwkgKgorCSAqIFRoaXMgaXMg bm9ybWFsbHkgZGlzYWJsZWQgYW5kIHRoZXJlZm9yZSBub3QgaGFuZGxlZCBhdAorCSAqIENI RUNLX0ZPUl9JTlRFUlJVUFRTKCkuIFRoZSAibWFpbiBsb29wIiBpbiBlYWNoIHByb2Nlc3Mg aXMgZXhwZWN0ZWQgdG8KKwkgKiBjaGVjayBmb3IgaXQgZXhwbGljaXRseS4KKwkgKi8KKwlJ TlRFUlJVUFRfQ09ORklHX1JFTE9BRCA9IDB4MDAwMDAwMTAsCisKKwkvKgorCSAqIExvZyBj dXJyZW50IG1lbW9yeSBjb250ZXh0cywgc2VudCBieSBwZ19sb2dfYmFja2VuZF9tZW1vcnlf Y29udGV4dHMoKQorCSAqLworCUlOVEVSUlVQVF9MT0dfTUVNT1JZX0NPTlRFWFQgPSAweDAw MDAwMDIwLAorCisJLyoKKwkgKiBwcm9jc2lnbmFsIGdsb2JhbCBiYXJyaWVyIGludGVycnVw dAorCSAqLworCUlOVEVSUlVQVF9CQVJSSUVSID0gMHgwMDAwMDA0MCwKKworCisJLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqCisJICogSW50ZXJydXB0cyB1c2VkIGJ5IGNsaWVudCBiYWNrZW5kcyBh bmQgbW9zdCBvdGhlciBwcm9jZXNzZXMgdGhhdAorCSAqIGNvbm5lY3QgdG8gYSBwYXJ0aWN1 bGFyIGRhdGFiYXNlLgorCSAqCisJICogTW9zdCBvZiB0aGVzZSBhcmUgYWxzbyBwcm9jZXNz ZWQgYnkgQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKSBvbmNlIHByb2Nlc3MKKwkgKiBzdGFydHVw IGhhcyByZWFjaGVkIFNldFN0YW5kYXJkSW50ZXJydXB0cygpLgorCSAqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKi8KKworCS8qIFJhaXNlZCBieSB0aW1lcnMgKi8KKwlJTlRFUlJVUFRfVFJBTlNBQ1RJ T05fVElNRU9VVCA9IDB4MDAwMDAwODAsCisJSU5URVJSVVBUX0lETEVfU0VTU0lPTl9USU1F T1VUID0gMHgwMDAwMDEwMCwKKwlJTlRFUlJVUFRfSURMRV9JTl9UUkFOU0FDVElPTl9TRVNT SU9OX1RJTUVPVVQgPSAweDAwMDAwMjAwLAorCUlOVEVSUlVQVF9DTElFTlRfQ0hFQ0tfVElN RU9VVCA9IDB4MDAwMDA0MDAsCisKKwkvKiBSYWlzZWQgYnkgdGltZXIgd2hpbGUgaWRsZSwg dG8gc2VuZCBhIHN0YXRzIHVwZGF0ZSAqLworCUlOVEVSUlVQVF9JRExFX1NUQVRTX1RJTUVP VVQgPSAweDAwMDAwODAwLAorCisJLyogUmFpc2VkIHN5bmNocm9ub3VzbHkgd2hlbiB0aGUg Y2xpZW50IGNvbm5lY3Rpb24gaXMgbG9zdCAqLworCUlOVEVSUlVQVF9DTElFTlRfQ09OTkVD VElPTl9MT1NUID0gMHgwMDAwMTAwMCwKKworCS8qCisJICogSU5URVJSVVBUX0FTWU5DX05P VElGWSBpcyBzZW50IHRvIG5vdGlmeSBiYWNrZW5kcyB0aGF0IGhhdmUgcmVnaXN0ZXJlZAor CSAqIHRvIExJU1RFTiBvbiBhbnkgY2hhbm5lbHMgdGhhdCB0aGV5IG1pZ2h0IGhhdmUgbWVz c2FnZXMgdGhleSBuZWVkIHRvCisJICogZGVsaXZlciB0byB0aGUgZnJvbnRlbmQuIEl0IGlz IGFsc28gcHJvY2Vzc2VkIHdoZW5ldmVyIHN0YXJ0aW5nIHRvIHJlYWQKKwkgKiBmcm9tIHRo ZSBjbGllbnQgb3Igd2hpbGUgZG9pbmcgc28sIGJ1dCBvbmx5IHdoZW4gdGhlcmUgaXMgbm8K KwkgKiB0cmFuc2FjdGlvbiBpbiBwcm9ncmVzcy4KKwkgKi8KKwlJTlRFUlJVUFRfQVNZTkNf Tk9USUZZID0gMHgwMDAwMjAwMCwKKworCS8qCisJICogQmVjYXVzZSBiYWNrZW5kcyBzaXR0 aW5nIGlkbGUgd2lsbCBub3QgYmUgcmVhZGluZyBzaW52YWwgZXZlbnRzLCB3ZQorCSAqIG5l ZWQgYSB3YXkgdG8gZ2l2ZSBhbiBpZGxlIGJhY2tlbmQgYSBzd2lmdCBraWNrIGluIHRoZSBy ZWFyIGFuZCBtYWtlIGl0CisJICogY2F0Y2ggdXAgYmVmb3JlIHRoZSBzaW52YWwgcXVldWUg b3ZlcmZsb3dzIGFuZCBmb3JjZXMgaXQgdG8gZ28gdGhyb3VnaAorCSAqIGEgY2FjaGUgcmVz ZXQgZXhlcmNpc2UuICBUaGlzIGlzIGRvbmUgYnkgc2VuZGluZworCSAqIElOVEVSUlVQVF9T SU5WQUxfQ0FUQ0hVUCB0byBhbnkgYmFja2VuZCB0aGF0IGdldHMgdG9vIGZhciBiZWhpbmQu CisJICoKKwkgKiBUaGUgaW50ZXJydXB0IGlzIHByb2Nlc3NlZCB3aGVuZXZlciBzdGFydGlu ZyB0byByZWFkIGZyb20gdGhlIGNsaWVudCwKKwkgKiBvciB3aGVuIGludGVycnVwdGVkIHdo aWxlIGRvaW5nIHNvLgorCSAqLworCUlOVEVSUlVQVF9TSU5WQUxfQ0FUQ0hVUCA9IDB4MDAw MDQwMDAsCisKKwkvKiBNZXNzYWdlIGZyb20gYSBjb29wZXJhdGluZyBwYXJhbGxlbCBiYWNr ZW5kIG9yIGFwcGx5IHdvcmtlciAqLworCUlOVEVSUlVQVF9QQVJBTExFTF9NRVNTQUdFID0g MHgwMDAwODAwMCwKKworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJICogUHJvY2Vzcy1zcGVj aWZpYyBpbnRlcnJ1cHRzCisJICoKKwkgKiBTb21lIHByb2Nlc3NlcyBuZWVkIGRlZGljYXRl ZCBpbnRlcnJ1cHRzIGZvciB2YXJpb3VzIHB1cnBvc2VzLiAgSWdub3JlZAorCSAqIGJ5IG90 aGVyIHByb2Nlc3Nlcy4KKwkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkvKiBhc2sgd2Fsc2Vu ZGVycyB0byBwcmVwYXJlIGZvciBzaHV0ZG93biAgKi8KKwlJTlRFUlJVUFRfV0FMU05EX0lO SVRfU1RPUFBJTkcgPSAweDAwMDEwMDAwLAorCisJLyogVE9ETzogZG9jdW1lbnQgdGhlIGRp ZmZlcmVuY2Ugd2l0aCBJTlRFUlJVUFRfV0FMU05EX0lOSVRfU1RPUFBJTkcgKi8KKwlJTlRF UlJVUFRfV0FMU05EX1NUT1AgPSAweDAwMDIwMDAwLAorCisJLyoKKwkgKiBJTlRFUlJVUFRf V0FMX0FSUklWRUQgaXMgdXNlZCB0byB3YWtlIHVwIHRoZSBzdGFydHVwIHByb2Nlc3MsIHRv IHRlbGwKKwkgKiBpdCB0aGF0IGl0IHNob3VsZCBjb250aW51ZSBXQUwgcmVwbGF5LiBJdCdz IHNlbnQgYnkgV0FMIHJlY2VpdmVyIHdoZW4KKwkgKiBtb3JlIFdBTCBhcnJpdmVzLCBvciB3 aGVuIHByb21vdGlvbiBpcyByZXF1ZXN0ZWQuCisJICovCisJSU5URVJSVVBUX1dBTF9BUlJJ VkVEID0gMHgwMDA0MDAwMCwKKworCS8qIFdha2UgdXAgc3RhcnR1cCBwcm9jZXNzIHRvIGNo ZWNrIGZvciB0aGUgcHJvbW90aW9uIHNpZ25hbCBmaWxlICovCisJSU5URVJSVVBUX0NIRUNL X1BST01PVEUgPSAweDAwMDgwMDAwLAorCisJLyogc2VudCB0byBsb2dpY2FsIHJlcGxpY2F0 aW9uIGxhdW5jaGVyLCB3aGVuIGEgc3Vic2NyaXB0aW9uIGNoYW5nZXMgKi8KKwlJTlRFUlJV UFRfU1VCU0NSSVBUSU9OX0NIQU5HRSA9IDB4MDAxMDAwMDAsCisKKwkvKiBHcmFjZWZ1bCBz aHV0ZG93biByZXF1ZXN0IGZvciBhIHBhcmFsbGVsIGFwcGx5IHdvcmtlciAqLworCUlOVEVS UlVQVF9TSFVURE9XTl9QQVJBTExFTF9BUFBMWV9XT1JLRVIgPSAweDAwMjAwMDAwLAorCisJ LyoKKwkgKiBQZXJmb3JtIG9uZSBsYXN0IGNoZWNrcG9pbnQsIHRoZW4gc2h1dCBkb3duLiBP bmx5IHVzZWQgaW4gdGhlCisJICogY2hlY2twb2ludGVyIHByb2Nlc3MuCisJICovCisJSU5U RVJSVVBUX1NIVVRET1dOX1hMT0cgPSAweDAwNDAwMDAwLAorCisJSU5URVJSVVBUX1NIVVRE T1dOX1BHQVJDSCA9IDB4MDA4MDAwMDAsCisKKwkvKgorCSAqIFRoaXMgaXMgc2VudCB0byB0 aGUgYXV0b3ZhY3V1bSBsYXVuY2hlciB3aGVuIGFuIGF1dG92YWN1dW0gd29ya2VyIGV4aXRz CisJICovCisJSU5URVJSVVBUX0FVVE9WQUNVVU1fV09SS0VSX0ZJTklTSEVEID0gMHgwMTAw MDAwMCwKKworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJICogRW5kIG9mIGludGVycnVwdCBi aXRzCisJICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqLworCisJLyoKKwkgKiBTTEVFUElOR19PTl9JTlRF UlJVUFRTIGluZGljYXRlcyB0aGF0IHRoZSBiYWNrZW5kIGlzIGN1cnJlbnRseSBibG9ja2Vk CisJICogd2FpdGluZyBmb3IgYW4gaW50ZXJydXB0LiBJZiBzZXQsIHRoZSBiYWNrZW5kIG5l ZWRzIHRvIGJlIHdva2VuIHVwIHdoZW4KKwkgKiBhIGJpdCBpbiB0aGUgcGVuZGluZyBpbnRl cnJ1cHRzIG1hc2sgaXMgc2V0LiBJdCdzIHVzZWQgaW50ZXJuYWxseSBieQorCSAqIHRoZSBp bnRlcnJ1cHQgbWFjaGluZXJ5LCBhbmQgY2Fubm90IGJlIHVzZWQgZGlyZWN0bHkgaW4gdGhl IHB1YmxpYworCSAqIGZ1bmN0aW9ucy4gSXQncyBuYW1lZCBkaWZmZXJlbnRseSB0byBkaXN0 aW5ndWlzaCBpdCBmcm9tIHRoZSBhY3R1YWwKKwkgKiBpbnRlcnJ1cHQgZmxhZ3MuCisJICov CisJU0xFRVBJTkdfT05fSU5URVJSVVBUUyA9IDB4ODAwMDAwMDAsCisKKwkvKgorCSAqIE5P VEU6IEludGVycnVwdFR5cGVzIG11c3QgZml0IGluIGEgMzItYml0IGJpdG1hc2suIChJZiB3 ZSBoYWQgZWZmaWNpZW50CisJICogNjQtYml0IGF0b21pY3Mgb24gYWxsIHBsYXRmb3Jtcywg d2UgY291bGQgZWFzaWx5IGdvIHVwIHRvIDY0IGJpdHMpCisJICovCit9OworCit0eXBlZGVm IHVpbnQzMiBJbnRlcnJ1cHRNYXNrOworCitleHRlcm4gUEdETExJTVBPUlQgcGdfYXRvbWlj X3VpbnQzMiAqTXlQZW5kaW5nSW50ZXJydXB0czsKKworLyoKKyAqIFRlc3QgYW4gaW50ZXJy dXB0IGZsYWcgKG9yIGZsYWdzKS4KKyAqLworc3RhdGljIGlubGluZSBib29sCitJbnRlcnJ1 cHRQZW5kaW5nKEludGVycnVwdE1hc2sgaW50ZXJydXB0TWFzaykKK3sKKwkvKgorCSAqIE5v dGUgdGhhdCB0aGVyZSBpcyBubyBtZW1vcnkgYmFycmllciBoZXJlLiBUaGlzIGlzIHVzZWQg aW4KKwkgKiBDSEVDS19GT1JfSU5URVJSVVBUUygpLCBzbyB3ZSB3YW50IHRoaXMgdG8gYmUg YXMgY2hlYXAgYXMgcG9zc2libGUuCisJICoKKwkgKiBUaGF0IG1lYW5zIHRoYXQgaWYgdGhl IGludGVycnVwdCBpcyBjb25jdXJyZW50bHkgc2V0IGJ5IGFub3RoZXIKKwkgKiBwcm9jZXNz LCB3ZSBtaWdodCBtaXNzIGl0LiBUaGF0IHNob3VsZCBiZSBPSywgYmVjYXVzZSB0aGUgbmV4 dAorCSAqIFdhaXRJbnRlcnJ1cHQoKSBvciBlcXVpdmFsZW50IGNhbGwgYWN0cyBhcyBhIHN5 bmNocm9uaXphdGlvbiBiYXJyaWVyLgorCSAqIFdlIHdpbGwgc2VlIHRoZSB1cGRhdGVkIHZh bHVlIGJlZm9yZSBzbGVlcGluZy4KKwkgKi8KKwlyZXR1cm4gKHBnX2F0b21pY19yZWFkX3Uz MihNeVBlbmRpbmdJbnRlcnJ1cHRzKSAmIGludGVycnVwdE1hc2spICE9IDA7Cit9CisKKy8q CisgKiBDbGVhciBhbiBpbnRlcnJ1cHQgZmxhZyAob3IgZmxhZ3MpLgorICovCitzdGF0aWMg aW5saW5lIHZvaWQKK0NsZWFySW50ZXJydXB0KEludGVycnVwdE1hc2sgaW50ZXJydXB0TWFz aykKK3sKKwlwZ19hdG9taWNfZmV0Y2hfYW5kX3UzMihNeVBlbmRpbmdJbnRlcnJ1cHRzLCB+ aW50ZXJydXB0TWFzayk7Cit9CisKKy8qCisgKiBUZXN0IGFuZCBjbGVhciBhbiBpbnRlcnJ1 cHQgZmxhZyAob3IgZmxhZ3MpLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wKK0NvbnN1bWVJ bnRlcnJ1cHQoSW50ZXJydXB0TWFzayBpbnRlcnJ1cHRNYXNrKQoreworCWlmIChsaWtlbHko IUludGVycnVwdFBlbmRpbmcoaW50ZXJydXB0TWFzaykpKQorCQlyZXR1cm4gZmFsc2U7CisK KwlDbGVhckludGVycnVwdChpbnRlcnJ1cHRNYXNrKTsKKwlyZXR1cm4gdHJ1ZTsKK30KKwor ZXh0ZXJuIHZvaWQgUmFpc2VJbnRlcnJ1cHQoSW50ZXJydXB0TWFzayBpbnRlcnJ1cHRNYXNr KTsKK2V4dGVybiB2b2lkIFNlbmRJbnRlcnJ1cHQoSW50ZXJydXB0TWFzayBpbnRlcnJ1cHRN YXNrLCBQcm9jTnVtYmVyIHBncHJvY25vKTsKK2V4dGVybiBpbnQJV2FpdEludGVycnVwdChJ bnRlcnJ1cHRNYXNrIGludGVycnVwdE1hc2ssIGludCB3YWtlRXZlbnRzLCBsb25nIHRpbWVv dXQsCisJCQkJCQkgIHVpbnQzMiB3YWl0X2V2ZW50X2luZm8pOworZXh0ZXJuIGludAlXYWl0 SW50ZXJydXB0T3JTb2NrZXQoSW50ZXJydXB0TWFzayBpbnRlcnJ1cHRNYXNrLCBpbnQgd2Fr ZUV2ZW50cywgcGdzb2NrZXQgc29jaywKKwkJCQkJCQkJICBsb25nIHRpbWVvdXQsIHVpbnQz MiB3YWl0X2V2ZW50X2luZm8pOworZXh0ZXJuIHZvaWQgU3dpdGNoVG9Mb2NhbEludGVycnVw dHModm9pZCk7CitleHRlcm4gdm9pZCBTd2l0Y2hUb1NoYXJlZEludGVycnVwdHModm9pZCk7 CitleHRlcm4gdm9pZCBJbml0aWFsaXplSW50ZXJydXB0V2FpdFNldCh2b2lkKTsKKwordHlw ZWRlZiB2b2lkICgqcGdfaW50ZXJydXB0X2hhbmRsZXJfdCkgKHZvaWQpOworZXh0ZXJuIHZv aWQgU2V0SW50ZXJydXB0SGFuZGxlcihJbnRlcnJ1cHRNYXNrIGludGVycnVwdE1hc2ssIHBn X2ludGVycnVwdF9oYW5kbGVyX3QgaGFuZGxlcik7CisKK2V4dGVybiB2b2lkIEVuYWJsZUlu dGVycnVwdChJbnRlcnJ1cHRNYXNrIGludGVycnVwdE1hc2spOworZXh0ZXJuIHZvaWQgRGlz YWJsZUludGVycnVwdChJbnRlcnJ1cHRNYXNrIGludGVycnVwdE1hc2spOworCisvKiBmb3Ig ZXh0ZW5zaW9ucyAoVE9ETzogbm90IGltcGxlbWVudGVkKSAqLworZXh0ZXJuIHZvaWQgQWxs b2NhdGVEeW5hbWljSW50ZXJydXB0KCk7CisKKy8qIFN0YW5kYXJkIGludGVycnVwdCBoYW5k bGVycy4gRGVmaW5lZCBpbiB0Y29wL3Bvc3RncmVzLmMgKi8KK2V4dGVybiB2b2lkIFNldFN0 YW5kYXJkSW50ZXJydXB0SGFuZGxlcnModm9pZCk7CisKK2V4dGVybiB2b2lkIFByb2Nlc3NR dWVyeUNhbmNlbEludGVycnVwdCh2b2lkKTsKK2V4dGVybiB2b2lkIFByb2Nlc3NUZXJtaW5h dGVJbnRlcnJ1cHQodm9pZCk7CitleHRlcm4gdm9pZCBQcm9jZXNzQ29uZmlnUmVsb2FkSW50 ZXJydXB0KHZvaWQpOworZXh0ZXJuIHZvaWQgUHJvY2Vzc0FzeW5jTm90aWZ5SW50ZXJydXB0 KHZvaWQpOworZXh0ZXJuIHZvaWQgUHJvY2Vzc0lkbGVTdGF0c1RpbWVvdXRJbnRlcnJ1cHQo dm9pZCk7CitleHRlcm4gdm9pZCBQcm9jZXNzUmVjb3ZlcnlDb25mbGljdEludGVycnVwdHMo dm9pZCk7CitleHRlcm4gdm9pZCBQcm9jZXNzVHJhbnNhY3Rpb25UaW1lb3V0SW50ZXJydXB0 KHZvaWQpOworZXh0ZXJuIHZvaWQgUHJvY2Vzc0lkbGVTZXNzaW9uVGltZW91dEludGVycnVw dCh2b2lkKTsKK2V4dGVybiB2b2lkIFByb2Nlc3NJZGxlSW5UcmFuc2FjdGlvblNlc3Npb25U aW1lb3V0SW50ZXJydXB0KHZvaWQpOworZXh0ZXJuIHZvaWQgUHJvY2Vzc0NsaWVudENoZWNr VGltZW91dEludGVycnVwdCh2b2lkKTsKK2V4dGVybiB2b2lkIFByb2Nlc3NDbGllbnRDb25u ZWN0aW9uTG9zdCh2b2lkKTsKKworZXh0ZXJuIHZvaWQgUHJvY2Vzc0F1eFByb2Nlc3NTaHV0 ZG93bkludGVycnVwdCh2b2lkKTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAq CSAgQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKSBhbmQgZnJpZW5kcworICoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqLworCisKK2V4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSBJbnRlcnJ1cHRN YXNrIEVuYWJsZWRJbnRlcnJ1cHRzTWFzazsKK2V4dGVybiBQR0RMTElNUE9SVCB2b2xhdGls ZSBJbnRlcnJ1cHRNYXNrIENoZWNrRm9ySW50ZXJydXB0c01hc2s7CisKK2V4dGVybiB2b2lk IFByb2Nlc3NJbnRlcnJ1cHRzKHZvaWQpOworCisvKiBUZXN0IHdoZXRoZXIgYW4gaW50ZXJy dXB0IGlzIHBlbmRpbmcgKi8KKyNpZm5kZWYgV0lOMzIKKyNkZWZpbmUgSU5URVJSVVBUU19Q RU5ESU5HX0NPTkRJVElPTihtYXNrKSBcCisJKHVubGlrZWx5KEludGVycnVwdFBlbmRpbmco bWFzaykpKQorI2Vsc2UKKyNkZWZpbmUgSU5URVJSVVBUU19QRU5ESU5HX0NPTkRJVElPTiht YXNrKSBcCisJKHVubGlrZWx5KFVOQkxPQ0tFRF9TSUdOQUxfUVVFVUUoKSkgPyBcCisJIHBn d2luMzJfZGlzcGF0Y2hfcXVldWVkX3NpZ25hbHMoKSA6ICh2b2lkKSAwLAlcCisJIHVubGlr ZWx5KEludGVycnVwdFBlbmRpbmcobWFzaykpKQorI2VuZGlmCisKKy8qCisgKiBJcyBQcm9j ZXNzSW50ZXJydXB0cygpIGd1YXJhbnRlZWQgdG8gY2xlYXIgYWxsIHRoZSBiaXRzIGluICdt YXNrJz8KKyAqCisgKiAoVGhlIGludGVycnVwdCBoYW5kbGVyIG1heSByZS1yYWlzZSB0aGUg aW50ZXJydXB0LCB0aG91Z2gpCisgKi8KKyNkZWZpbmUgSU5URVJSVVBUU19DQU5fQkVfUFJP Q0VTU0VEKG1hc2spIFwKKwkoKChtYXNrKSAmIENoZWNrRm9ySW50ZXJydXB0c01hc2spID09 IChtYXNrKSkKKworLyogU2VydmljZSBpbnRlcnJ1cHQsIGlmIG9uZSBpcyBwZW5kaW5nIGFu ZCBpdCdzIHNhZmUgdG8gc2VydmljZSBpdCBub3cgKi8KKyNkZWZpbmUgQ0hFQ0tfRk9SX0lO VEVSUlVQVFMoKQkJCQkJXAorZG8geyBcCisJaWYgKElOVEVSUlVQVFNfUEVORElOR19DT05E SVRJT04oQ2hlY2tGb3JJbnRlcnJ1cHRzTWFzaykpIFwKKwkJUHJvY2Vzc0ludGVycnVwdHMo KTsJCQkJCQkJCQkJCVwKK30gd2hpbGUoMCkKKworCisvKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioKKyAqCSAgQ3JpdGljYWwgc2VjdGlvbiBhbmQgaW50ZXJydXB0IGhvbGRvZmYgbWVjaGFu aXNtCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIHRoZXNlIGFyZSBtYXJrZWQg dm9sYXRpbGUgYmVjYXVzZSB0aGV5IGFyZSBleGFtaW5lZCBieSBzaWduYWwgaGFuZGxlcnM6 ICovCisvKgorICogWFhYOiBpcyB0aGF0IHN0aWxsIHRydWU/IFNob3VsZCB3ZSB1c2UgbG9j YWwgdmFycyB0byBhdm9pZCByZXBlYXRlZCBhY2Nlc3MKKyAqIGUuZy4gaW5zaWRlIFJFU1VN RV9JTlRFUlJVUFRTKCkgPworICovCitleHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgdWlu dDMyIEludGVycnVwdEhvbGRvZmZDb3VudDsKK2V4dGVybiBQR0RMTElNUE9SVCB2b2xhdGls ZSB1aW50MzIgQ3JpdFNlY3Rpb25Db3VudDsKKworc3RhdGljIGlubGluZSB2b2lkCitIT0xE X0lOVEVSUlVQVFModm9pZCkKK3sKKwlJbnRlcnJ1cHRIb2xkb2ZmQ291bnQrKzsKKwlDaGVj a0ZvckludGVycnVwdHNNYXNrID0gKEludGVycnVwdE1hc2spIDA7Cit9CisKK3N0YXRpYyBp bmxpbmUgdm9pZAorUkVTVU1FX0lOVEVSUlVQVFModm9pZCkKK3sKKwlBc3NlcnQoQ2hlY2tG b3JJbnRlcnJ1cHRzTWFzayA9PSAwKTsKKwlBc3NlcnQoSW50ZXJydXB0SG9sZG9mZkNvdW50 ID4gMCk7CisJSW50ZXJydXB0SG9sZG9mZkNvdW50LS07CisJaWYgKEludGVycnVwdEhvbGRv ZmZDb3VudCA9PSAwICYmIENyaXRTZWN0aW9uQ291bnQgPT0gMCkKKwkJQ2hlY2tGb3JJbnRl cnJ1cHRzTWFzayA9IEVuYWJsZWRJbnRlcnJ1cHRzTWFzazsKKwllbHNlCisJCUFzc2VydChD aGVja0ZvckludGVycnVwdHNNYXNrID09IDApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQK K1NUQVJUX0NSSVRfU0VDVElPTih2b2lkKQoreworCUNyaXRTZWN0aW9uQ291bnQrKzsKKwlD aGVja0ZvckludGVycnVwdHNNYXNrID0gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitF TkRfQ1JJVF9TRUNUSU9OKHZvaWQpCit7CisJQXNzZXJ0KENyaXRTZWN0aW9uQ291bnQgPiAw KTsKKwlDcml0U2VjdGlvbkNvdW50LS07CisJaWYgKEludGVycnVwdEhvbGRvZmZDb3VudCA9 PSAwICYmIENyaXRTZWN0aW9uQ291bnQgPT0gMCkKKwkJQ2hlY2tGb3JJbnRlcnJ1cHRzTWFz ayA9IEVuYWJsZWRJbnRlcnJ1cHRzTWFzazsKKwllbHNlCisJCUFzc2VydChDaGVja0Zvcklu dGVycnVwdHNNYXNrID09IDApOworfQorCisjZW5kaWYJCQkJCQkJLyogSVBDX0lOVEVSUlVQ VF9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2ludGVycnVwdC5o IGIvc3JjL2luY2x1ZGUvaXBjL3NpZ25hbF9oYW5kbGVycy5oCnNpbWlsYXJpdHkgaW5kZXgg ODIlCnJlbmFtZSBmcm9tIHNyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvaW50ZXJydXB0LmgKcmVu YW1lIHRvIHNyYy9pbmNsdWRlL2lwYy9zaWduYWxfaGFuZGxlcnMuaAppbmRleCBlMTQ4MjYy NmRmZC4uY2JlOTE0M2NmZGYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIv aW50ZXJydXB0LmgKKysrIGIvc3JjL2luY2x1ZGUvaXBjL3NpZ25hbF9oYW5kbGVycy5oCkBA IC0yMSwxMiArMjEsMTAgQEAKIAogI2luY2x1ZGUgPHNpZ25hbC5oPgogCi1leHRlcm4gUEdE TExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IENvbmZpZ1JlbG9hZFBlbmRpbmc7Ci1l eHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IFNodXRkb3duUmVxdWVz dFBlbmRpbmc7Ci0KLWV4dGVybiB2b2lkIFByb2Nlc3NNYWluTG9vcEludGVycnVwdHModm9p ZCk7CitleHRlcm4gdm9pZCBTZXRQb3N0bWFzdGVyQ2hpbGRTaWduYWxIYW5kbGVycyh2b2lk KTsKIGV4dGVybiB2b2lkIFNpZ25hbEhhbmRsZXJGb3JDb25maWdSZWxvYWQoU0lHTkFMX0FS R1MpOwogZXh0ZXJuIHZvaWQgU2lnbmFsSGFuZGxlckZvckNyYXNoRXhpdChTSUdOQUxfQVJH Uyk7CiBleHRlcm4gdm9pZCBTaWduYWxIYW5kbGVyRm9yU2h1dGRvd25SZXF1ZXN0KFNJR05B TF9BUkdTKTsKK2V4dGVybiB2b2lkIFNpZ25hbEhhbmRsZXJGb3JRdWVyeUNhbmNlbChTSUdO QUxfQVJHUyk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbGlicHEvbGli cHEtYmUtZmUtaGVscGVycy5oIGIvc3JjL2luY2x1ZGUvbGlicHEvbGlicHEtYmUtZmUtaGVs cGVycy5oCmluZGV4IDg1ZDhiNjNmMDE5Li41M2Q4MGY0MGQxMCAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvbGlicHEvbGlicHEtYmUtZmUtaGVscGVycy5oCisrKyBiL3NyYy9pbmNsdWRl L2xpYnBxL2xpYnBxLWJlLWZlLWhlbHBlcnMuaApAQCAtMzAsMTAgKzMwLDkgQEAKICNpZm5k ZWYgTElCUFFfQkVfRkVfSEVMUEVSU19ICiAjZGVmaW5lIExJQlBRX0JFX0ZFX0hFTFBFUlNf SAogCisjaW5jbHVkZSAiaXBjL2ludGVycnVwdC5oIgogI2luY2x1ZGUgImxpYnBxL2xpYnBx LWJlLWZlLmgiCi0jaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9m ZC5oIgotI2luY2x1ZGUgInN0b3JhZ2UvbGF0Y2guaCIKICNpbmNsdWRlICJ1dGlscy90aW1l c3RhbXAuaCIKICNpbmNsdWRlICJ1dGlscy93YWl0X2V2ZW50LmgiCiAKQEAgLTE2Nyw4ICsx NjYsOCBAQCBsaWJwcXNydl9jb25uZWN0X2ludGVybmFsKFBHY29ubiAqY29ubiwgdWludDMy IHdhaXRfZXZlbnRfaW5mbykKIAkJcmV0dXJuOwogCiAJLyoKLQkgKiBXYWl0TGF0Y2hPclNv Y2tldCgpIGNhbiBjb25jZWl2YWJseSBmYWlsLCBoYW5kbGUgdGhhdCBjYXNlIGhlcmUgaW5z dGVhZAotCSAqIG9mIHJlcXVpcmluZyBhbGwgY2FsbGVycyB0byBkbyBzby4KKwkgKiBXYWl0 SW50ZXJydXB0T3JTb2NrZXQoKSBjYW4gY29uY2VpdmFibHkgZmFpbCwgaGFuZGxlIHRoYXQg Y2FzZSBoZXJlCisJICogaW5zdGVhZCBvZiByZXF1aXJpbmcgYWxsIGNhbGxlcnMgdG8gZG8g c28uCiAJICovCiAJUEdfVFJZKCk7CiAJewpAQCAtMTk5LDE4ICsxOTgsMTUgQEAgbGlicHFz cnZfY29ubmVjdF9pbnRlcm5hbChQR2Nvbm4gKmNvbm4sIHVpbnQzMiB3YWl0X2V2ZW50X2lu Zm8pCiAJCQllbHNlCiAJCQkJaW9fZmxhZyA9IFdMX1NPQ0tFVF9XUklURUFCTEU7CiAKLQkJ CXJjID0gV2FpdExhdGNoT3JTb2NrZXQoTXlMYXRjaCwKLQkJCQkJCQkJICAgV0xfRVhJVF9P Tl9QTV9ERUFUSCB8IFdMX0xBVENIX1NFVCB8IGlvX2ZsYWcsCi0JCQkJCQkJCSAgIFBRc29j a2V0KGNvbm4pLAotCQkJCQkJCQkgICAwLAotCQkJCQkJCQkgICB3YWl0X2V2ZW50X2luZm8p OworCQkJcmMgPSBXYWl0SW50ZXJydXB0T3JTb2NrZXQoQ2hlY2tGb3JJbnRlcnJ1cHRzTWFz aywKKwkJCQkJCQkJCSAgIFdMX0VYSVRfT05fUE1fREVBVEggfCBXTF9JTlRFUlJVUFQgfCBp b19mbGFnLAorCQkJCQkJCQkJICAgUFFzb2NrZXQoY29ubiksCisJCQkJCQkJCQkgICAwLAor CQkJCQkJCQkJICAgd2FpdF9ldmVudF9pbmZvKTsKIAogCQkJLyogSW50ZXJydXB0ZWQ/ICov Ci0JCQlpZiAocmMgJiBXTF9MQVRDSF9TRVQpCi0JCQl7Ci0JCQkJUmVzZXRMYXRjaChNeUxh dGNoKTsKKwkJCWlmIChyYyAmIFdMX0lOVEVSUlVQVCkKIAkJCQlDSEVDS19GT1JfSU5URVJS VVBUUygpOwotCQkJfQogCiAJCQkvKiBJZiBzb2NrZXQgaXMgcmVhZHksIGFkdmFuY2UgdGhl IGxpYnBxIHN0YXRlIG1hY2hpbmUgKi8KIAkJCWlmIChyYyAmIGlvX2ZsYWcpCkBAIC0zMjAs MTkgKzMxNiwxNiBAQCBsaWJwcXNydl9nZXRfcmVzdWx0KFBHY29ubiAqY29ubiwgdWludDMy IHdhaXRfZXZlbnRfaW5mbykKIAl7CiAJCWludAkJCXJjOwogCi0JCXJjID0gV2FpdExhdGNo T3JTb2NrZXQoTXlMYXRjaCwKLQkJCQkJCQkgICBXTF9FWElUX09OX1BNX0RFQVRIIHwgV0xf TEFUQ0hfU0VUIHwKLQkJCQkJCQkgICBXTF9TT0NLRVRfUkVBREFCTEUsCi0JCQkJCQkJICAg UFFzb2NrZXQoY29ubiksCi0JCQkJCQkJICAgMCwKLQkJCQkJCQkgICB3YWl0X2V2ZW50X2lu Zm8pOworCQlyYyA9IFdhaXRJbnRlcnJ1cHRPclNvY2tldChDaGVja0ZvckludGVycnVwdHNN YXNrLAorCQkJCQkJCQkgICBXTF9FWElUX09OX1BNX0RFQVRIIHwgV0xfSU5URVJSVVBUIHwK KwkJCQkJCQkJICAgV0xfU09DS0VUX1JFQURBQkxFLAorCQkJCQkJCQkgICBQUXNvY2tldChj b25uKSwKKwkJCQkJCQkJICAgMCwKKwkJCQkJCQkJICAgd2FpdF9ldmVudF9pbmZvKTsKIAog CQkvKiBJbnRlcnJ1cHRlZD8gKi8KLQkJaWYgKHJjICYgV0xfTEFUQ0hfU0VUKQotCQl7Ci0J CQlSZXNldExhdGNoKE15TGF0Y2gpOworCQlpZiAocmMgJiBXTF9JTlRFUlJVUFQpCiAJCQlD SEVDS19GT1JfSU5URVJSVVBUUygpOwotCQl9CiAKIAkJLyogQ29uc3VtZSB3aGF0ZXZlciBk YXRhIGlzIGF2YWlsYWJsZSBmcm9tIHRoZSBzb2NrZXQgKi8KIAkJaWYgKFBRY29uc3VtZUlu cHV0KGNvbm4pID09IDApCkBAIC0zODYsNyArMzc5LDcgQEAgbGlicHFzcnZfY2FuY2VsKFBH Y29ubiAqY29ubiwgVGltZXN0YW1wVHogZW5kdGltZSkKIAkJCVBvc3RncmVzUG9sbGluZ1N0 YXR1c1R5cGUgcG9sbHJlczsKIAkJCVRpbWVzdGFtcFR6IG5vdzsKIAkJCWxvbmcJCWN1cl90 aW1lb3V0OwotCQkJaW50CQkJd2FpdEV2ZW50cyA9IFdMX0xBVENIX1NFVCB8IFdMX1RJTUVP VVQgfCBXTF9FWElUX09OX1BNX0RFQVRIOworCQkJaW50CQkJd2FpdEV2ZW50cyA9IFdMX0lO VEVSUlVQVCB8IFdMX1RJTUVPVVQgfCBXTF9FWElUX09OX1BNX0RFQVRIOwogCiAJCQlwb2xs cmVzID0gUFFjYW5jZWxQb2xsKGNhbmNlbF9jb25uKTsKIAkJCWlmIChwb2xscmVzID09IFBH UkVTX1BPTExJTkdfT0spCkBAIC00MTUsMTAgKzQwOCw5IEBAIGxpYnBxc3J2X2NhbmNlbChQ R2Nvbm4gKmNvbm4sIFRpbWVzdGFtcFR6IGVuZHRpbWUpCiAJCQl9CiAKIAkJCS8qIFNsZWVw IHVudGlsIHRoZXJlJ3Mgc29tZXRoaW5nIHRvIGRvICovCi0JCQlXYWl0TGF0Y2hPclNvY2tl dChNeUxhdGNoLCB3YWl0RXZlbnRzLCBQUWNhbmNlbFNvY2tldChjYW5jZWxfY29ubiksCi0J CQkJCQkJICBjdXJfdGltZW91dCwgUEdfV0FJVF9DTElFTlQpOwotCi0JCQlSZXNldExhdGNo KE15TGF0Y2gpOworCQkJV2FpdEludGVycnVwdE9yU29ja2V0KENoZWNrRm9ySW50ZXJydXB0 c01hc2ssIHdhaXRFdmVudHMsCisJCQkJCQkJCSAgUFFjYW5jZWxTb2NrZXQoY2FuY2VsX2Nv bm4pLAorCQkJCQkJCQkgIGN1cl90aW1lb3V0LCBQR19XQUlUX0NMSUVOVCk7CiAKIAkJCUNI RUNLX0ZPUl9JTlRFUlJVUFRTKCk7CiAJCX0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2xp YnBxL2xpYnBxLmggYi9zcmMvaW5jbHVkZS9saWJwcS9saWJwcS5oCmluZGV4IDQxMmJjOTc1 OGZiLi4zNWZiZmY5YTc2MyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbGlicHEvbGlicHEu aAorKysgYi9zcmMvaW5jbHVkZS9saWJwcS9saWJwcS5oCkBAIC0xOCw3ICsxOCw3IEBACiAK ICNpbmNsdWRlICJsaWIvc3RyaW5naW5mby5oIgogI2luY2x1ZGUgImxpYnBxL2xpYnBxLWJl LmgiCi0jaW5jbHVkZSAic3RvcmFnZS9sYXRjaC5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvd2Fp dGV2ZW50c2V0LmgiCiAKIAogLyoKQEAgLTYxLDcgKzYxLDcgQEAgZXh0ZXJuIGNvbnN0IFBH RExMSU1QT1JUIFBRY29tbU1ldGhvZHMgKlBxQ29tbU1ldGhvZHM7CiBleHRlcm4gUEdETExJ TVBPUlQgV2FpdEV2ZW50U2V0ICpGZUJlV2FpdFNldDsKIAogI2RlZmluZSBGZUJlV2FpdFNl dFNvY2tldFBvcyAwCi0jZGVmaW5lIEZlQmVXYWl0U2V0TGF0Y2hQb3MgMQorI2RlZmluZSBG ZUJlV2FpdFNldEludGVycnVwdFBvcyAxCiAjZGVmaW5lIEZlQmVXYWl0U2V0TkV2ZW50cyAz CiAKIGV4dGVybiBpbnQJTGlzdGVuU2VydmVyUG9ydChpbnQgZmFtaWx5LCBjb25zdCBjaGFy ICpob3N0TmFtZSwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2xpYnBxL3BxbXEuaCBiL3Ny Yy9pbmNsdWRlL2xpYnBxL3BxbXEuaAppbmRleCBjNjJmZmZiNTk5OC4uM2JhMmI4MmIzYTgg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2xpYnBxL3BxbXEuaAorKysgYi9zcmMvaW5jbHVk ZS9saWJwcS9wcW1xLmgKQEAgLTE3LDcgKzE3LDcgQEAKICNpbmNsdWRlICJzdG9yYWdlL3No bV9tcS5oIgogCiBleHRlcm4gdm9pZCBwcV9yZWRpcmVjdF90b19zaG1fbXEoZHNtX3NlZ21l bnQgKnNlZywgc2htX21xX2hhbmRsZSAqbXFoKTsKLWV4dGVybiB2b2lkIHBxX3NldF9wYXJh bGxlbF9sZWFkZXIocGlkX3QgcGlkLCBQcm9jTnVtYmVyIHByb2NOdW1iZXIpOworZXh0ZXJu IHZvaWQgcHFfc2V0X3BhcmFsbGVsX2xlYWRlcihQcm9jTnVtYmVyIHByb2NOdW1iZXIpOwog CiBleHRlcm4gdm9pZCBwcV9wYXJzZV9lcnJvcm5vdGljZShTdHJpbmdJbmZvIG1zZywgRXJy b3JEYXRhICplZGF0YSk7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL21lc29uLmJ1aWxk IGIvc3JjL2luY2x1ZGUvbWVzb24uYnVpbGQKaW5kZXggYjk0MGM1Y2QzZDYuLmQwY2ZjYWVj ODRiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9tZXNvbi5idWlsZAorKysgYi9zcmMvaW5j bHVkZS9tZXNvbi5idWlsZApAQCAtMTM1LDYgKzEzNSw3IEBAIGhlYWRlcl9zdWJkaXJzID0g WwogICAnZXhlY3V0b3InLAogICAnZmVfdXRpbHMnLAogICAnZm9yZWlnbicsCisgICdpcGMn LAogICAnaml0JywKICAgJ2xpYicsCiAgICdsaWJwcScsCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9taXNjYWRtaW4uaCBiL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oCmluZGV4IGRiNTU5 YjM5YzRkLi40NDk0MmJiOTQ4ZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbWlzY2FkbWlu LmgKKysrIGIvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmgKQEAgLTI4LDEzMiArMjgsMTUgQEAK ICNpbmNsdWRlICJkYXRhdHlwZS90aW1lc3RhbXAuaCIgLyogZm9yIFRpbWVzdGFtcFR6ICov CiAjaW5jbHVkZSAicGd0aW1lLmgiCQkJCS8qIGZvciBwZ190aW1lX3QgKi8KIAotCi0jZGVm aW5lIEludmFsaWRQaWQJCQkJKC0xKQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgot ICoJICBTeXN0ZW0gaW50ZXJydXB0IGFuZCBjcml0aWNhbCBzZWN0aW9uIGhhbmRsaW5nCi0g KgotICogVGhlcmUgYXJlIHR3byB0eXBlcyBvZiBpbnRlcnJ1cHRzIHRoYXQgYSBydW5uaW5n IGJhY2tlbmQgbmVlZHMgdG8gYWNjZXB0Ci0gKiB3aXRob3V0IG1lc3NpbmcgdXAgaXRzIHN0 YXRlOiBRdWVyeUNhbmNlbCAoU0lHSU5UKSBhbmQgUHJvY0RpZSAoU0lHVEVSTSkuCi0gKiBJ biBib3RoIGNhc2VzLCB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gY2xlYW4gdXAgdGhlIGN1cnJl bnQgdHJhbnNhY3Rpb24KLSAqIGdyYWNlZnVsbHksIHNvIHdlIGNhbid0IHJlc3BvbmQgdG8g dGhlIGludGVycnVwdCBpbnN0YW50YW5lb3VzbHkgLS0tCi0gKiB0aGVyZSdzIG5vIGd1YXJh bnRlZSB0aGF0IGludGVybmFsIGRhdGEgc3RydWN0dXJlcyB3b3VsZCBiZSBzZWxmLWNvbnNp c3RlbnQKLSAqIGlmIHRoZSBjb2RlIGlzIGludGVycnVwdGVkIGF0IGFuIGFyYml0cmFyeSBp bnN0YW50LiAgSW5zdGVhZCwgdGhlIHNpZ25hbAotICogaGFuZGxlcnMgc2V0IGZsYWdzIHRo YXQgYXJlIGNoZWNrZWQgcGVyaW9kaWNhbGx5IGR1cmluZyBleGVjdXRpb24uCi0gKgotICog VGhlIENIRUNLX0ZPUl9JTlRFUlJVUFRTKCkgbWFjcm8gaXMgY2FsbGVkIGF0IHN0cmF0ZWdp Y2FsbHkgbG9jYXRlZCBzcG90cwotICogd2hlcmUgaXQgaXMgbm9ybWFsbHkgc2FmZSB0byBh Y2NlcHQgYSBjYW5jZWwgb3IgZGllIGludGVycnVwdC4gIEluIHNvbWUKLSAqIGNhc2VzLCB3 ZSBpbnZva2UgQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKSBpbnNpZGUgbG93LWxldmVsIHN1YnJv dXRpbmVzIHRoYXQKLSAqIG1pZ2h0IHNvbWV0aW1lcyBiZSBjYWxsZWQgaW4gY29udGV4dHMg dGhhdCBkbyAqbm90KiB3YW50IHRvIGFsbG93IGEgY2FuY2VsCi0gKiBvciBkaWUgaW50ZXJy dXB0LiAgVGhlIEhPTERfSU5URVJSVVBUUygpIGFuZCBSRVNVTUVfSU5URVJSVVBUUygpIG1h Y3JvcwotICogYWxsb3cgY29kZSB0byBlbnN1cmUgdGhhdCBubyBjYW5jZWwgb3IgZGllIGlu dGVycnVwdCB3aWxsIGJlIGFjY2VwdGVkLAotICogZXZlbiBpZiBDSEVDS19GT1JfSU5URVJS VVBUUygpIGdldHMgY2FsbGVkIGluIGEgc3Vicm91dGluZS4gIFRoZSBpbnRlcnJ1cHQKLSAq IHdpbGwgYmUgaGVsZCBvZmYgdW50aWwgQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKSBpcyBkb25l IG91dHNpZGUgYW55Ci0gKiBIT0xEX0lOVEVSUlVQVFMoKSAuLi4gUkVTVU1FX0lOVEVSUlVQ VFMoKSBzZWN0aW9uLgotICoKLSAqIFRoZXJlIGlzIGFsc28gYSBtZWNoYW5pc20gdG8gcHJl dmVudCBxdWVyeSBjYW5jZWwgaW50ZXJydXB0cywgd2hpbGUgc3RpbGwKLSAqIGFsbG93aW5n IGRpZSBpbnRlcnJ1cHRzOiBIT0xEX0NBTkNFTF9JTlRFUlJVUFRTKCkgYW5kCi0gKiBSRVNV TUVfQ0FOQ0VMX0lOVEVSUlVQVFMoKS4KLSAqCi0gKiBOb3RlIHRoYXQgUHJvY2Vzc0ludGVy cnVwdHMoKSBoYXMgYWxzbyBhY3F1aXJlZCBhIG51bWJlciBvZiB0YXNrcyB0aGF0Ci0gKiBk byBub3QgbmVjZXNzYXJpbHkgY2F1c2UgYSBxdWVyeS1jYW5jZWwtb3ItZGllIHJlc3BvbnNl LiAgSGVuY2UsIGl0J3MKLSAqIHBvc3NpYmxlIHRoYXQgaXQgd2lsbCBqdXN0IGNsZWFyIElu dGVycnVwdFBlbmRpbmcgYW5kIHJldHVybi4KLSAqCi0gKiBJTlRFUlJVUFRTX1BFTkRJTkdf Q09ORElUSU9OKCkgY2FuIGJlIGNoZWNrZWQgdG8gc2VlIHdoZXRoZXIgYW4KLSAqIGludGVy cnVwdCBuZWVkcyB0byBiZSBzZXJ2aWNlZCwgd2l0aG91dCB0cnlpbmcgdG8gZG8gc28gaW1t ZWRpYXRlbHkuCi0gKiBTb21lIGNhbGxlcnMgYXJlIGFsc28gaW50ZXJlc3RlZCBpbiBJTlRF UlJVUFRTX0NBTl9CRV9QUk9DRVNTRUQoKSwKLSAqIHdoaWNoIHRlbGxzIHdoZXRoZXIgUHJv Y2Vzc0ludGVycnVwdHMgaXMgc3VyZSB0byBjbGVhciB0aGUgaW50ZXJydXB0LgotICoKLSAq IFNwZWNpYWwgbWVjaGFuaXNtcyBhcmUgdXNlZCB0byBsZXQgYW4gaW50ZXJydXB0IGJlIGFj Y2VwdGVkIHdoZW4gd2UgYXJlCi0gKiB3YWl0aW5nIGZvciBhIGxvY2sgb3Igd2hlbiB3ZSBh cmUgd2FpdGluZyBmb3IgY29tbWFuZCBpbnB1dCAoYnV0LCBvZgotICogY291cnNlLCBvbmx5 IGlmIHRoZSBpbnRlcnJ1cHQgaG9sZG9mZiBjb3VudGVyIGlzIHplcm8pLiAgU2VlIHRoZQot ICogcmVsYXRlZCBjb2RlIGZvciBkZXRhaWxzLgotICoKLSAqIEEgbG9zdCBjb25uZWN0aW9u IGlzIGhhbmRsZWQgc2ltaWxhcmx5LCBhbHRob3VnaCB0aGUgbG9zcyBvZiBjb25uZWN0aW9u Ci0gKiBkb2VzIG5vdCByYWlzZSBhIHNpZ25hbCwgYnV0IGlzIGRldGVjdGVkIHdoZW4gd2Ug ZmFpbCB0byB3cml0ZSB0byB0aGUKLSAqIHNvY2tldC4gSWYgdGhlcmUgd2FzIGEgc2lnbmFs IGZvciBhIGJyb2tlbiBjb25uZWN0aW9uLCB3ZSBjb3VsZCBtYWtlIHVzZSBvZgotICogaXQg Ynkgc2V0dGluZyBDbGllbnRDb25uZWN0aW9uTG9zdCBpbiB0aGUgc2lnbmFsIGhhbmRsZXIu Ci0gKgotICogQSByZWxhdGVkLCBidXQgY29uY2VwdHVhbGx5IGRpc3RpbmN0LCBtZWNoYW5p c20gaXMgdGhlICJjcml0aWNhbCBzZWN0aW9uIgotICogbWVjaGFuaXNtLiAgQSBjcml0aWNh bCBzZWN0aW9uIG5vdCBvbmx5IGhvbGRzIG9mZiBjYW5jZWwvZGllIGludGVycnVwdHMsCi0g KiBidXQgY2F1c2VzIGFueSBlcmVwb3J0KEVSUk9SKSBvciBlcmVwb3J0KEZBVEFMKSB0byBi ZWNvbWUgZXJlcG9ydChQQU5JQykKLSAqIC0tLSB0aGF0IGlzLCBhIHN5c3RlbS13aWRlIHJl c2V0IGlzIGZvcmNlZC4gIE5lZWRsZXNzIHRvIHNheSwgb25seSByZWFsbHkKLSAqICpjcml0 aWNhbCogY29kZSBzaG91bGQgYmUgbWFya2VkIGFzIGEgY3JpdGljYWwgc2VjdGlvbiEJQ3Vy cmVudGx5LCB0aGlzCi0gKiBtZWNoYW5pc20gaXMgb25seSB1c2VkIGZvciBYTE9HLXJlbGF0 ZWQgY29kZS4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIGluIGdsb2Jh bHMuYyAqLwotLyogdGhlc2UgYXJlIG1hcmtlZCB2b2xhdGlsZSBiZWNhdXNlIHRoZXkgYXJl IHNldCBieSBzaWduYWwgaGFuZGxlcnM6ICovCi1leHRlcm4gUEdETExJTVBPUlQgdm9sYXRp bGUgc2lnX2F0b21pY190IEludGVycnVwdFBlbmRpbmc7Ci1leHRlcm4gUEdETExJTVBPUlQg dm9sYXRpbGUgc2lnX2F0b21pY190IFF1ZXJ5Q2FuY2VsUGVuZGluZzsKLWV4dGVybiBQR0RM TElNUE9SVCB2b2xhdGlsZSBzaWdfYXRvbWljX3QgUHJvY0RpZVBlbmRpbmc7Ci1leHRlcm4g UEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IElkbGVJblRyYW5zYWN0aW9uU2Vz c2lvblRpbWVvdXRQZW5kaW5nOwotZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxlIHNpZ19h dG9taWNfdCBUcmFuc2FjdGlvblRpbWVvdXRQZW5kaW5nOwotZXh0ZXJuIFBHRExMSU1QT1JU IHZvbGF0aWxlIHNpZ19hdG9taWNfdCBJZGxlU2Vzc2lvblRpbWVvdXRQZW5kaW5nOwotZXh0 ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBQcm9jU2lnbmFsQmFycmll clBlbmRpbmc7Ci1leHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IExv Z01lbW9yeUNvbnRleHRQZW5kaW5nOwotZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxlIHNp Z19hdG9taWNfdCBJZGxlU3RhdHNVcGRhdGVUaW1lb3V0UGVuZGluZzsKLQotZXh0ZXJuIFBH RExMSU1QT1JUIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBDaGVja0NsaWVudENvbm5lY3Rpb25Q ZW5kaW5nOwotZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBDbGll bnRDb25uZWN0aW9uTG9zdDsKLQotLyogdGhlc2UgYXJlIG1hcmtlZCB2b2xhdGlsZSBiZWNh dXNlIHRoZXkgYXJlIGV4YW1pbmVkIGJ5IHNpZ25hbCBoYW5kbGVyczogKi8KLWV4dGVybiBQ R0RMTElNUE9SVCB2b2xhdGlsZSB1aW50MzIgSW50ZXJydXB0SG9sZG9mZkNvdW50OwotZXh0 ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxlIHVpbnQzMiBRdWVyeUNhbmNlbEhvbGRvZmZDb3Vu dDsKLWV4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSB1aW50MzIgQ3JpdFNlY3Rpb25Db3Vu dDsKLQotLyogaW4gdGNvcC9wb3N0Z3Jlcy5jICovCi1leHRlcm4gdm9pZCBQcm9jZXNzSW50 ZXJydXB0cyh2b2lkKTsKLQotLyogVGVzdCB3aGV0aGVyIGFuIGludGVycnVwdCBpcyBwZW5k aW5nICovCi0jaWZuZGVmIFdJTjMyCi0jZGVmaW5lIElOVEVSUlVQVFNfUEVORElOR19DT05E SVRJT04oKSBcCi0JKHVubGlrZWx5KEludGVycnVwdFBlbmRpbmcpKQotI2Vsc2UKLSNkZWZp bmUgSU5URVJSVVBUU19QRU5ESU5HX0NPTkRJVElPTigpIFwKLQkodW5saWtlbHkoVU5CTE9D S0VEX1NJR05BTF9RVUVVRSgpKSA/IFwKLQkgcGd3aW4zMl9kaXNwYXRjaF9xdWV1ZWRfc2ln bmFscygpIDogKHZvaWQpIDAsIFwKLQkgdW5saWtlbHkoSW50ZXJydXB0UGVuZGluZykpCisv KgorICogWFhYOiBtYW55IGZpbGVzIGluY2x1ZGUgbWlzY2FkbWluLmggZm9yIENIRUNLX0ZP Ul9JTlRFUlJVUFRTKCkuIEtlZXAgdGhlbQorICogd29ya2luZyB3aXRob3V0IGNoYW5nZXMK KyAqLworI2lmbmRlZiBGUk9OVEVORAorI2luY2x1ZGUgImlwYy9pbnRlcnJ1cHQuaCIKICNl bmRpZgogCi0vKiBTZXJ2aWNlIGludGVycnVwdCwgaWYgb25lIGlzIHBlbmRpbmcgYW5kIGl0 J3Mgc2FmZSB0byBzZXJ2aWNlIGl0IG5vdyAqLwotI2RlZmluZSBDSEVDS19GT1JfSU5URVJS VVBUUygpIFwKLWRvIHsgXAotCWlmIChJTlRFUlJVUFRTX1BFTkRJTkdfQ09ORElUSU9OKCkp IFwKLQkJUHJvY2Vzc0ludGVycnVwdHMoKTsgXAotfSB3aGlsZSgwKQotCi0vKiBJcyBQcm9j ZXNzSW50ZXJydXB0cygpIGd1YXJhbnRlZWQgdG8gY2xlYXIgSW50ZXJydXB0UGVuZGluZz8g Ki8KLSNkZWZpbmUgSU5URVJSVVBUU19DQU5fQkVfUFJPQ0VTU0VEKCkgXAotCShJbnRlcnJ1 cHRIb2xkb2ZmQ291bnQgPT0gMCAmJiBDcml0U2VjdGlvbkNvdW50ID09IDAgJiYgXAotCSBR dWVyeUNhbmNlbEhvbGRvZmZDb3VudCA9PSAwKQotCi0jZGVmaW5lIEhPTERfSU5URVJSVVBU UygpICAoSW50ZXJydXB0SG9sZG9mZkNvdW50KyspCi0KLSNkZWZpbmUgUkVTVU1FX0lOVEVS UlVQVFMoKSBcCi1kbyB7IFwKLQlBc3NlcnQoSW50ZXJydXB0SG9sZG9mZkNvdW50ID4gMCk7 IFwKLQlJbnRlcnJ1cHRIb2xkb2ZmQ291bnQtLTsgXAotfSB3aGlsZSgwKQotCi0jZGVmaW5l IEhPTERfQ0FOQ0VMX0lOVEVSUlVQVFMoKSAgKFF1ZXJ5Q2FuY2VsSG9sZG9mZkNvdW50Kysp Ci0KLSNkZWZpbmUgUkVTVU1FX0NBTkNFTF9JTlRFUlJVUFRTKCkgXAotZG8geyBcCi0JQXNz ZXJ0KFF1ZXJ5Q2FuY2VsSG9sZG9mZkNvdW50ID4gMCk7IFwKLQlRdWVyeUNhbmNlbEhvbGRv ZmZDb3VudC0tOyBcCi19IHdoaWxlKDApCi0KLSNkZWZpbmUgU1RBUlRfQ1JJVF9TRUNUSU9O KCkgIChDcml0U2VjdGlvbkNvdW50KyspCi0KLSNkZWZpbmUgRU5EX0NSSVRfU0VDVElPTigp IFwKLWRvIHsgXAotCUFzc2VydChDcml0U2VjdGlvbkNvdW50ID4gMCk7IFwKLQlDcml0U2Vj dGlvbkNvdW50LS07IFwKLX0gd2hpbGUoMCkKKyNkZWZpbmUgSW52YWxpZFBpZAkJCQkoLTEp CiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xOTEsNyArNzQsNiBAQCBleHRl cm4gUEdETExJTVBPUlQgaW50IE15UHJvY1BpZDsKIGV4dGVybiBQR0RMTElNUE9SVCBwZ190 aW1lX3QgTXlTdGFydFRpbWU7CiBleHRlcm4gUEdETExJTVBPUlQgVGltZXN0YW1wVHogTXlT dGFydFRpbWVzdGFtcDsKIGV4dGVybiBQR0RMTElNUE9SVCBzdHJ1Y3QgUG9ydCAqTXlQcm9j UG9ydDsKLWV4dGVybiBQR0RMTElNUE9SVCBzdHJ1Y3QgTGF0Y2ggKk15TGF0Y2g7CiBleHRl cm4gUEdETExJTVBPUlQgdWludDggTXlDYW5jZWxLZXlbXTsKIGV4dGVybiBQR0RMTElNUE9S VCBpbnQgTXlDYW5jZWxLZXlMZW5ndGg7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IE15UE1D aGlsZFNsb3Q7CkBAIC0zMjQsOSArMjA2LDYgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIGNoYXIg KkRhdGFiYXNlUGF0aDsKIC8qIG5vdyBpbiB1dGlscy9pbml0L21pc2Npbml0LmMgKi8KIGV4 dGVybiB2b2lkIEluaXRQb3N0bWFzdGVyQ2hpbGQodm9pZCk7CiBleHRlcm4gdm9pZCBJbml0 U3RhbmRhbG9uZVByb2Nlc3MoY29uc3QgY2hhciAqYXJndjApOwotZXh0ZXJuIHZvaWQgSW5p dFByb2Nlc3NMb2NhbExhdGNoKHZvaWQpOwotZXh0ZXJuIHZvaWQgU3dpdGNoVG9TaGFyZWRM YXRjaCh2b2lkKTsKLWV4dGVybiB2b2lkIFN3aXRjaEJhY2tUb0xvY2FsTGF0Y2godm9pZCk7 CiAKIC8qCiAgKiBNeUJhY2tlbmRUeXBlIGluZGljYXRlcyB3aGF0IGtpbmQgb2YgYSBiYWNr ZW5kIHRoaXMgaXMuCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2Jnd29y a2VyLmggYi9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2Jnd29ya2VyLmgKaW5kZXggNzQxOGU2 NGUxOWIuLjUzYWUxMDcyMmRlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wb3N0bWFzdGVy L2Jnd29ya2VyLmgKKysrIGIvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9iZ3dvcmtlci5oCkBA IC02Niw2ICs2NiwxNCBAQAogICovCiAjZGVmaW5lIEJHV09SS0VSX0lOVEVSUlVQVElCTEUJ CQkweDAwMDQKIAorLyoKKyAqIER5bmFtaWMgd29ya2VycyBjcmVhdGVkIHdpdGggc2hhcmVk IG1lbW9yeSBhY2Nlc3MgdXN1YWxseSBzZW5kIGFuIGludGVycnVwdAorICogdG8gdGhlIGNy ZWF0aW5nIGJhY2tlbmQgd2hlbiB0aGV5IHN0YXJ0IGFuZCBzdG9wLCBhbGxvd2luZworICog V2FpdEZvckJhY2tncm91bmRXb3JrZXJ7U3RhcnR1cCxTaHV0ZG93bn0oKSB0byB3b3JrLiAg U3VjaCBub3RpZmljYXRpb25zCisgKiBjYW4gYmUgc3VwcHJlc3NlZCB3aXRoIHRoaXMgZmxh Zy4KKyAqLworI2RlZmluZSBCR1dPUktFUl9OT19OT1RJRlkJCQkJCQkJMHgwMDA4CisKIC8q CiAgKiBUaGlzIGNsYXNzIGlzIHVzZWQgaW50ZXJuYWxseSBmb3IgcGFyYWxsZWwgcXVlcmll cywgdG8ga2VlcCB0cmFjayBvZiB0aGUKICAqIG51bWJlciBvZiBhY3RpdmUgcGFyYWxsZWwg d29ya2VycyBhbmQgbWFrZSBzdXJlIHdlIG5ldmVyIGxhdW5jaCBtb3JlIHRoYW4KQEAgLTEw NCw3ICsxMTIsNyBAQCB0eXBlZGVmIHN0cnVjdCBCYWNrZ3JvdW5kV29ya2VyCiAJY2hhcgkJ Ymd3X2Z1bmN0aW9uX25hbWVbQkdXX01BWExFTl07CiAJRGF0dW0JCWJnd19tYWluX2FyZzsK IAljaGFyCQliZ3dfZXh0cmFbQkdXX0VYVFJBTEVOXTsKLQlwaWRfdAkJYmd3X25vdGlmeV9w aWQ7IC8qIFNJR1VTUjEgdGhpcyBiYWNrZW5kIG9uIHN0YXJ0L3N0b3AgKi8KKwlwaWRfdAkJ Ymd3X25vdGlmeV9waWQ7IC8qIG5vdCB1c2VkICovCiB9IEJhY2tncm91bmRXb3JrZXI7CiAK IHR5cGVkZWYgZW51bSBCZ3dIYW5kbGVTdGF0dXMKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3Bvc3RtYXN0ZXIvYmd3b3JrZXJfaW50ZXJuYWxzLmggYi9zcmMvaW5jbHVkZS9wb3N0bWFz dGVyL2Jnd29ya2VyX2ludGVybmFscy5oCmluZGV4IGI3ODljYWY0MDM0Li44ZGNhOWY4NDMz OSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9iZ3dvcmtlcl9pbnRlcm5h bHMuaAorKysgYi9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2Jnd29ya2VyX2ludGVybmFscy5o CkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSAiZGF0YXR5cGUvdGltZXN0YW1wLmgiCiAj aW5jbHVkZSAibGliL2lsaXN0LmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9iZ3dvcmtlci5o IgorI2luY2x1ZGUgInN0b3JhZ2UvcHJvY251bWJlci5oIgogCiAvKiBHVUMgb3B0aW9ucyAq LwogCkBAIC00Nyw5ICs0OCwxMCBAQCBleHRlcm4gdm9pZCBCYWNrZ3JvdW5kV29ya2VyU3Rh dGVDaGFuZ2UoYm9vbCBhbGxvd19uZXdfd29ya2Vycyk7CiBleHRlcm4gdm9pZCBGb3JnZXRC YWNrZ3JvdW5kV29ya2VyKFJlZ2lzdGVyZWRCZ1dvcmtlciAqcncpOwogZXh0ZXJuIHZvaWQg UmVwb3J0QmFja2dyb3VuZFdvcmtlclBJRChSZWdpc3RlcmVkQmdXb3JrZXIgKnJ3KTsKIGV4 dGVybiB2b2lkIFJlcG9ydEJhY2tncm91bmRXb3JrZXJFeGl0KFJlZ2lzdGVyZWRCZ1dvcmtl ciAqcncpOwotZXh0ZXJuIHZvaWQgQmFja2dyb3VuZFdvcmtlclN0b3BOb3RpZmljYXRpb25z KHBpZF90IHBpZCk7CitleHRlcm4gdm9pZCBCYWNrZ3JvdW5kV29ya2VyU3RvcE5vdGlmaWNh dGlvbnMoaW50IHBtY2hpbGQpOwogZXh0ZXJuIHZvaWQgRm9yZ2V0VW5zdGFydGVkQmFja2dy b3VuZFdvcmtlcnModm9pZCk7CiBleHRlcm4gdm9pZCBSZXNldEJhY2tncm91bmRXb3JrZXJD cmFzaFRpbWVzKHZvaWQpOworZXh0ZXJuIFByb2NOdW1iZXIgR2V0Tm90aWZ5UHJvY051bWJl ckZvclJlZ2lzdGVyZWRXb3JrZXIoUmVnaXN0ZXJlZEJnV29ya2VyICpydyk7CiAKIC8qIEVu dHJ5IHBvaW50IGZvciBiYWNrZ3JvdW5kIHdvcmtlciBwcm9jZXNzZXMgKi8KIHBnX25vcmV0 dXJuIGV4dGVybiB2b2lkIEJhY2tncm91bmRXb3JrZXJNYWluKGNvbnN0IHZvaWQgKnN0YXJ0 dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pOwpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvcG9zdG1hc3Rlci9zdGFydHVwLmggYi9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL3N0 YXJ0dXAuaAppbmRleCA0ZDFlMTIxMzFkMy4uZGZiMmIwYjY1Y2YgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL3Bvc3RtYXN0ZXIvc3RhcnR1cC5oCisrKyBiL3NyYy9pbmNsdWRlL3Bvc3Rt YXN0ZXIvc3RhcnR1cC5oCkBAIC0yNSwxMiArMjUsMTAgQEAKIAogZXh0ZXJuIFBHRExMSU1Q T1JUIGludCBsb2dfc3RhcnR1cF9wcm9ncmVzc19pbnRlcnZhbDsKIAotZXh0ZXJuIHZvaWQg UHJvY2Vzc1N0YXJ0dXBQcm9jSW50ZXJydXB0cyh2b2lkKTsKK2V4dGVybiB2b2lkIFN0YXJ0 dXBQcm9jQ2hlY2tQb3N0bWFzdGVyRGVhdGgodm9pZCk7CiBwZ19ub3JldHVybiBleHRlcm4g dm9pZCBTdGFydHVwUHJvY2Vzc01haW4oY29uc3Qgdm9pZCAqc3RhcnR1cF9kYXRhLCBzaXpl X3Qgc3RhcnR1cF9kYXRhX2xlbik7CiBleHRlcm4gdm9pZCBQcmVSZXN0b3JlQ29tbWFuZCh2 b2lkKTsKIGV4dGVybiB2b2lkIFBvc3RSZXN0b3JlQ29tbWFuZCh2b2lkKTsKLWV4dGVybiBi b29sIElzUHJvbW90ZVNpZ25hbGVkKHZvaWQpOwotZXh0ZXJuIHZvaWQgUmVzZXRQcm9tb3Rl U2lnbmFsZWQodm9pZCk7CiAKIGV4dGVybiB2b2lkIGVuYWJsZV9zdGFydHVwX3Byb2dyZXNz X3RpbWVvdXQodm9pZCk7CiBleHRlcm4gdm9pZCBkaXNhYmxlX3N0YXJ0dXBfcHJvZ3Jlc3Nf dGltZW91dCh2b2lkKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xv Z2ljYWx3b3JrZXIuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWx3b3JrZXIu aAppbmRleCA3ZDc0OGEyOGRhOC4uMzgyMjY5MDAxY2YgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWx3b3JrZXIuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBs aWNhdGlvbi9sb2dpY2Fsd29ya2VyLmgKQEAgLTEyLDEwICsxMiw2IEBACiAjaWZuZGVmIExP R0lDQUxXT1JLRVJfSAogI2RlZmluZSBMT0dJQ0FMV09SS0VSX0gKIAotI2luY2x1ZGUgPHNp Z25hbC5oPgotCi1leHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IFBh cmFsbGVsQXBwbHlNZXNzYWdlUGVuZGluZzsKLQogZXh0ZXJuIHZvaWQgQXBwbHlXb3JrZXJN YWluKERhdHVtIG1haW5fYXJnKTsKIGV4dGVybiB2b2lkIFBhcmFsbGVsQXBwbHlXb3JrZXJN YWluKERhdHVtIG1haW5fYXJnKTsKIGV4dGVybiB2b2lkIFRhYmxlU3luY1dvcmtlck1haW4o RGF0dW0gbWFpbl9hcmcpOwpAQCAtMjQsNyArMjAsNiBAQCBleHRlcm4gdm9pZCBTZXF1ZW5j ZVN5bmNXb3JrZXJNYWluKERhdHVtIG1haW5fYXJnKTsKIGV4dGVybiBib29sIElzTG9naWNh bFdvcmtlcih2b2lkKTsKIGV4dGVybiBib29sIElzTG9naWNhbFBhcmFsbGVsQXBwbHlXb3Jr ZXIodm9pZCk7CiAKLWV4dGVybiB2b2lkIEhhbmRsZVBhcmFsbGVsQXBwbHlNZXNzYWdlSW50 ZXJydXB0KHZvaWQpOwogZXh0ZXJuIHZvaWQgUHJvY2Vzc1BhcmFsbGVsQXBwbHlNZXNzYWdl cyh2b2lkKTsKIAogZXh0ZXJuIHZvaWQgTG9naWNhbFJlcFdvcmtlcnNXYWtldXBBdENvbW1p dChPaWQgc3ViaWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vc2xv dC5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vc2xvdC5oCmluZGV4IDcyZjhiZTYyOWYz Li40YjQ3MDlmNmUyYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vc2xv dC5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Nsb3QuaApAQCAtMjE1LDcgKzIx NSw3IEBAIHR5cGVkZWYgc3RydWN0IFJlcGxpY2F0aW9uU2xvdAogCS8qIGlzIHNvbWVib2R5 IHBlcmZvcm1pbmcgaW8gb24gdGhpcyBzbG90PyAqLwogCUxXTG9jawkJaW9faW5fcHJvZ3Jl c3NfbG9jazsKIAotCS8qIENvbmRpdGlvbiB2YXJpYWJsZSBzaWduYWxlZCB3aGVuIGFjdGl2 ZV9waWQgY2hhbmdlcyAqLworCS8qIENvbmRpdGlvbiB2YXJpYWJsZSBzaWduYWxlZCB3aGVu IGFjdGl2ZV9wcm9jIGNoYW5nZXMgKi8KIAlDb25kaXRpb25WYXJpYWJsZSBhY3RpdmVfY3Y7 CiAKIAkvKiBhbGwgdGhlIHJlbWFpbmluZyBkYXRhIGlzIG9ubHkgdXNlZCBmb3IgbG9naWNh bCBzbG90cyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd2Fsc2Vu ZGVyLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93YWxzZW5kZXIuaAppbmRleCBhNGRm M2I4ZTBhZS4uNjliOTViYjI3ZWMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0 aW9uL3dhbHNlbmRlci5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dhbHNlbmRl ci5oCkBAIC00Niw3ICs0Niw2IEBAIGV4dGVybiB2b2lkIFdhbFNuZFNobWVtSW5pdCh2b2lk KTsKIGV4dGVybiB2b2lkIFdhbFNuZFdha2V1cChib29sIHBoeXNpY2FsLCBib29sIGxvZ2lj YWwpOwogZXh0ZXJuIHZvaWQgV2FsU25kSW5pdFN0b3BwaW5nKHZvaWQpOwogZXh0ZXJuIHZv aWQgV2FsU25kV2FpdFN0b3BwaW5nKHZvaWQpOwotZXh0ZXJuIHZvaWQgSGFuZGxlV2FsU25k SW5pdFN0b3BwaW5nKHZvaWQpOwogZXh0ZXJuIHZvaWQgV2FsU25kUnFzdEZpbGVSZWxvYWQo dm9pZCk7CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93YWxz ZW5kZXJfcHJpdmF0ZS5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd2Fsc2VuZGVyX3By aXZhdGUuaAppbmRleCA1ZGU2NzRkNTQxMC4uYzE4YjY0MzU5ZGYgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dhbHNlbmRlcl9wcml2YXRlLmgKKysrIGIvc3JjL2lu Y2x1ZGUvcmVwbGljYXRpb24vd2Fsc2VuZGVyX3ByaXZhdGUuaApAQCAtNDAsNiArNDAsOCBA QCB0eXBlZGVmIGVudW0gV2FsU25kU3RhdGUKICAqLwogdHlwZWRlZiBzdHJ1Y3QgV2FsU25k CiB7CisJUHJvY051bWJlcglwZ3Byb2NubzsJCS8qIHRoaXMgd2Fsc2VuZGVyJ3MgUHJvY051 bWJlciwgb3IgaW52YWxpZCBpZgorCQkJCQkJCQkgKiBub3QgYWN0aXZlICovCiAJcGlkX3QJ CXBpZDsJCQkvKiB0aGlzIHdhbHNlbmRlcidzIFBJRCwgb3IgMCBpZiBub3QgYWN0aXZlICov CiAKIAlXYWxTbmRTdGF0ZSBzdGF0ZTsJCQkvKiB0aGlzIHdhbHNlbmRlcidzIHN0YXRlICov CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJuYWwu aCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dvcmtlcl9pbnRlcm5hbC5oCmluZGV4IGMx Mjg1ZmRkMWJjLi40YjY0NDllOTc0YSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGlj YXRpb24vd29ya2VyX2ludGVybmFsLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v d29ya2VyX2ludGVybmFsLmgKQEAgLTc5LDkgKzc5LDEwIEBAIHR5cGVkZWYgc3RydWN0IExv Z2ljYWxSZXBXb3JrZXIKIAlGaWxlU2V0ICAgICpzdHJlYW1fZmlsZXNldDsKIAogCS8qCi0J ICogUElEIG9mIGxlYWRlciBhcHBseSB3b3JrZXIgaWYgdGhpcyBzbG90IGlzIHVzZWQgZm9y IGEgcGFyYWxsZWwgYXBwbHkKLQkgKiB3b3JrZXIsIEludmFsaWRQaWQgb3RoZXJ3aXNlLgor CSAqIExlYWRlciBhcHBseSB3b3JrZXIgaWYgdGhpcyBzbG90IGlzIHVzZWQgZm9yIGEgcGFy YWxsZWwgYXBwbHkgd29ya2VyLAorCSAqIElOVkFMSURfUFJPQ19OVU1CRVIvSW52YWxpZFBp ZCBvdGhlcndpc2UuCiAJICovCisJUHJvY051bWJlcglsZWFkZXJfcGdwcm9jbm87CiAJcGlk X3QJCWxlYWRlcl9waWQ7CiAKIAkvKiBJbmRpY2F0ZXMgd2hldGhlciBhcHBseSBjYW4gYmUg cGVyZm9ybWVkIGluIHBhcmFsbGVsLiAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3Rv cmFnZS9sYXRjaC5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9sYXRjaC5oCmRlbGV0ZWQgZmls ZSBtb2RlIDEwMDY0NAppbmRleCBmYmRhZGM4Njk1OS4uMDAwMDAwMDAwMDAKLS0tIGEvc3Jj L2luY2x1ZGUvc3RvcmFnZS9sYXRjaC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQwICswLDAg QEAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoKLSAqIGxhdGNoLmgKLSAqCSAgUm91dGlu ZXMgZm9yIGludGVycHJvY2VzcyBsYXRjaGVzCi0gKgotICogQSBsYXRjaCBpcyBhIGJvb2xl YW4gdmFyaWFibGUsIHdpdGggb3BlcmF0aW9ucyB0aGF0IGxldCBwcm9jZXNzZXMgc2xlZXAK LSAqIHVudGlsIGl0IGlzIHNldC4gQSBsYXRjaCBjYW4gYmUgc2V0IGZyb20gYW5vdGhlciBw cm9jZXNzLCBvciBhIHNpZ25hbAotICogaGFuZGxlciB3aXRoaW4gdGhlIHNhbWUgcHJvY2Vz cy4KLSAqCi0gKiBUaGUgbGF0Y2ggaW50ZXJmYWNlIGlzIGEgcmVsaWFibGUgcmVwbGFjZW1l bnQgZm9yIHRoZSBjb21tb24gcGF0dGVybiBvZgotICogdXNpbmcgcGdfdXNsZWVwKCkgb3Ig c2VsZWN0KCkgdG8gd2FpdCB1bnRpbCBhIHNpZ25hbCBhcnJpdmVzLCB3aGVyZSB0aGUKLSAq IHNpZ25hbCBoYW5kbGVyIHNldHMgYSBmbGFnIHZhcmlhYmxlLiBCZWNhdXNlIG9uIHNvbWUg cGxhdGZvcm1zIGFuCi0gKiBpbmNvbWluZyBzaWduYWwgZG9lc24ndCBpbnRlcnJ1cHQgc2xl ZXAsIGFuZCBldmVuIG9uIHBsYXRmb3JtcyB3aGVyZSBpdAotICogZG9lcyB0aGVyZSBpcyBh IHJhY2UgY29uZGl0aW9uIGlmIHRoZSBzaWduYWwgYXJyaXZlcyBqdXN0IGJlZm9yZQotICog ZW50ZXJpbmcgdGhlIHNsZWVwLCB0aGUgY29tbW9uIHBhdHRlcm4gbXVzdCBwZXJpb2RpY2Fs bHkgd2FrZSB1cCBhbmQKLSAqIHBvbGwgdGhlIGZsYWcgdmFyaWFibGUuIFRoZSBwc2VsZWN0 KCkgc3lzdGVtIGNhbGwgd2FzIGludmVudGVkIHRvIHNvbHZlCi0gKiB0aGlzIHByb2JsZW0s IGJ1dCBpdCBpcyBub3QgcG9ydGFibGUgZW5vdWdoLiBMYXRjaGVzIGFyZSBkZXNpZ25lZCB0 bwotICogb3ZlcmNvbWUgdGhlc2UgbGltaXRhdGlvbnMsIGFsbG93aW5nIHlvdSB0byBzbGVl cCB3aXRob3V0IHBvbGxpbmcgYW5kCi0gKiBlbnN1cmluZyBxdWljayByZXNwb25zZSB0byBz aWduYWxzIGZyb20gb3RoZXIgcHJvY2Vzc2VzLgotICoKLSAqIFRoZXJlIGFyZSB0d28ga2lu ZHMgb2YgbGF0Y2hlczogbG9jYWwgYW5kIHNoYXJlZC4gQSBsb2NhbCBsYXRjaCBpcwotICog aW5pdGlhbGl6ZWQgYnkgSW5pdExhdGNoLCBhbmQgY2FuIG9ubHkgYmUgc2V0IGZyb20gdGhl IHNhbWUgcHJvY2Vzcy4KLSAqIEEgbG9jYWwgbGF0Y2ggY2FuIGJlIHVzZWQgdG8gd2FpdCBm b3IgYSBzaWduYWwgdG8gYXJyaXZlLCBieSBjYWxsaW5nCi0gKiBTZXRMYXRjaCBpbiB0aGUg c2lnbmFsIGhhbmRsZXIuIEEgc2hhcmVkIGxhdGNoIHJlc2lkZXMgaW4gc2hhcmVkIG1lbW9y eSwKLSAqIGFuZCBtdXN0IGJlIGluaXRpYWxpemVkIGF0IHBvc3RtYXN0ZXIgc3RhcnR1cCBi eSBJbml0U2hhcmVkTGF0Y2guIEJlZm9yZQotICogYSBzaGFyZWQgbGF0Y2ggY2FuIGJlIHdh aXRlZCBvbiwgaXQgbXVzdCBiZSBhc3NvY2lhdGVkIHdpdGggYSBwcm9jZXNzCi0gKiB3aXRo IE93bkxhdGNoLiBPbmx5IHRoZSBwcm9jZXNzIG93bmluZyB0aGUgbGF0Y2ggY2FuIHdhaXQg b24gaXQsIGJ1dCBhbnkKLSAqIHByb2Nlc3MgY2FuIHNldCBpdC4KLSAqCi0gKiBUaGVyZSBh cmUgdGhyZWUgYmFzaWMgb3BlcmF0aW9ucyBvbiBhIGxhdGNoOgotICoKLSAqIFNldExhdGNo CQktIFNldHMgdGhlIGxhdGNoCi0gKiBSZXNldExhdGNoCS0gQ2xlYXJzIHRoZSBsYXRjaCwg YWxsb3dpbmcgaXQgdG8gYmUgc2V0IGFnYWluCi0gKiBXYWl0TGF0Y2gJLSBXYWl0cyBmb3Ig dGhlIGxhdGNoIHRvIGJlY29tZSBzZXQKLSAqCi0gKiBXYWl0TGF0Y2ggaW5jbHVkZXMgYSBw cm92aXNpb24gZm9yIHRpbWVvdXRzICh3aGljaCBzaG91bGQgYmUgYXZvaWRlZAotICogd2hl biBwb3NzaWJsZSwgYXMgdGhleSBpbmN1ciBleHRyYSBvdmVyaGVhZCkgYW5kIGEgcHJvdmlz aW9uIGZvcgotICogcG9zdG1hc3RlciBjaGlsZCBwcm9jZXNzZXMgdG8gd2FrZSB1cCBpbW1l ZGlhdGVseSBvbiBwb3N0bWFzdGVyIGRlYXRoLgotICogU2VlIGxhdGNoLmMgZm9yIGRldGFp bGVkIHNwZWNpZmljYXRpb25zIGZvciB0aGUgZXhwb3J0ZWQgZnVuY3Rpb25zLgotICoKLSAq IFRoZSBjb3JyZWN0IHBhdHRlcm4gdG8gd2FpdCBmb3IgZXZlbnQocykgaXM6Ci0gKgotICog Zm9yICg7OykKLSAqIHsKLSAqCSAgIFJlc2V0TGF0Y2goKTsKLSAqCSAgIGlmICh3b3JrIHRv IGRvKQotICoJCSAgIERvIFN0dWZmKCk7Ci0gKgkgICBXYWl0TGF0Y2goKTsKLSAqIH0KLSAq Ci0gKiBJdCdzIGltcG9ydGFudCB0byByZXNldCB0aGUgbGF0Y2ggKmJlZm9yZSogY2hlY2tp bmcgaWYgdGhlcmUncyB3b3JrIHRvCi0gKiBkby4gT3RoZXJ3aXNlLCBpZiBzb21lb25lIHNl dHMgdGhlIGxhdGNoIGJldHdlZW4gdGhlIGNoZWNrIGFuZCB0aGUKLSAqIFJlc2V0TGF0Y2gg Y2FsbCwgeW91IHdpbGwgbWlzcyBpdCBhbmQgV2FpdCB3aWxsIGluY29ycmVjdGx5IGJsb2Nr LgotICoKLSAqIEFub3RoZXIgdmFsaWQgY29kaW5nIHBhdHRlcm4gbG9va3MgbGlrZToKLSAq Ci0gKiBmb3IgKDs7KQotICogewotICoJICAgaWYgKHdvcmsgdG8gZG8pCi0gKgkJICAgRG8g U3R1ZmYoKTsgLy8gaW4gcGFydGljdWxhciwgZXhpdCBsb29wIGlmIHNvbWUgY29uZGl0aW9u IHNhdGlzZmllZAotICoJICAgV2FpdExhdGNoKCk7Ci0gKgkgICBSZXNldExhdGNoKCk7Ci0g KiB9Ci0gKgotICogVGhpcyBpcyB1c2VmdWwgdG8gcmVkdWNlIGxhdGNoIHRyYWZmaWMgaWYg aXQncyBleHBlY3RlZCB0aGF0IHRoZSBsb29wJ3MKLSAqIHRlcm1pbmF0aW9uIGNvbmRpdGlv biB3aWxsIG9mdGVuIGJlIHNhdGlzZmllZCBpbiB0aGUgZmlyc3QgaXRlcmF0aW9uOwotICog dGhlIGNvc3QgaXMgYW4gZXh0cmEgbG9vcCBpdGVyYXRpb24gYmVmb3JlIGJsb2NraW5nIHdo ZW4gaXQgaXMgbm90LgotICogV2hhdCBtdXN0IGJlIGF2b2lkZWQgaXMgcGxhY2luZyBhbnkg Y2hlY2tzIGZvciBhc3luY2hyb25vdXMgZXZlbnRzIGFmdGVyCi0gKiBXYWl0TGF0Y2ggYW5k IGJlZm9yZSBSZXNldExhdGNoLCBhcyB0aGF0IGNyZWF0ZXMgYSByYWNlIGNvbmRpdGlvbi4K LSAqCi0gKiBUbyB3YWtlIHVwIHRoZSB3YWl0ZXIsIHlvdSBtdXN0IGZpcnN0IHNldCBhIGds b2JhbCBmbGFnIG9yIHNvbWV0aGluZwotICogZWxzZSB0aGF0IHRoZSB3YWl0IGxvb3AgdGVz dHMgaW4gdGhlICJpZiAod29yayB0byBkbykiIHBhcnQsIGFuZCBjYWxsCi0gKiBTZXRMYXRj aCAqYWZ0ZXIqIHRoYXQuIFNldExhdGNoIGlzIGRlc2lnbmVkIHRvIHJldHVybiBxdWlja2x5 IGlmIHRoZQotICogbGF0Y2ggaXMgYWxyZWFkeSBzZXQuCi0gKgotICogT24gc29tZSBwbGF0 Zm9ybXMsIHNpZ25hbHMgd2lsbCBub3QgaW50ZXJydXB0IHRoZSBsYXRjaCB3YWl0IHByaW1p dGl2ZQotICogYnkgdGhlbXNlbHZlcy4gIFRoZXJlZm9yZSwgaXQgaXMgY3JpdGljYWwgdGhh dCBhbnkgc2lnbmFsIGhhbmRsZXIgdGhhdAotICogaXMgbWVhbnQgdG8gdGVybWluYXRlIGEg V2FpdExhdGNoIHdhaXQgY2FsbHMgU2V0TGF0Y2guCi0gKgotICogTm90ZSB0aGF0IHVzZSBv ZiB0aGUgcHJvY2VzcyBsYXRjaCAoUEdQUk9DLnByb2NMYXRjaCkgaXMgZ2VuZXJhbGx5IGJl dHRlcgotICogdGhhbiBhbiBhZC1ob2Mgc2hhcmVkIGxhdGNoIGZvciBzaWduYWxpbmcgYXV4 aWxpYXJ5IHByb2Nlc3Nlcy4gIFRoaXMgaXMKLSAqIGJlY2F1c2UgZ2VuZXJpYyBzaWduYWwg aGFuZGxlcnMgd2lsbCBjYWxsIFNldExhdGNoIG9uIHRoZSBwcm9jZXNzIGxhdGNoCi0gKiBv bmx5LCBzbyB1c2luZyBhbnkgbGF0Y2ggb3RoZXIgdGhhbiB0aGUgcHJvY2VzcyBsYXRjaCBl ZmZlY3RpdmVseSBwcmVjbHVkZXMKLSAqIHVzZSBvZiBhbnkgZ2VuZXJpYyBoYW5kbGVyLgot ICoKLSAqCi0gKiBTZWUgYWxzbyBXYWl0RXZlbnRTZXRzIGluIHdhaXRldmVudHNldC5oLiBU aGV5IGFsbG93IHRvIHdhaXQgZm9yIGxhdGNoZXMKLSAqIGJlaW5nIHNldCBhbmQgYWRkaXRp b25hbCBldmVudHMgLSBwb3N0bWFzdGVyIGR5aW5nIGFuZCBzb2NrZXQgcmVhZGluZXNzIG9m Ci0gKiBzZXZlcmFsIHNvY2tldHMgY3VycmVudGx5IC0gYXQgdGhlIHNhbWUgdGltZS4gIE9u IG1hbnkgcGxhdGZvcm1zIHVzaW5nIGEKLSAqIGxvbmcgbGl2ZWQgZXZlbnQgc2V0IGlzIG1v cmUgZWZmaWNpZW50IHRoYW4gdXNpbmcgV2FpdExhdGNoIG9yCi0gKiBXYWl0TGF0Y2hPclNv Y2tldC4KLSAqCi0gKgotICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjYsIFBv c3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCi0gKiBQb3J0aW9ucyBDb3B5cmln aHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQot ICoKLSAqIHNyYy9pbmNsdWRlL3N0b3JhZ2UvbGF0Y2guaAotICoKLSAqLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQotICovCi0jaWZuZGVmIExBVENIX0gKLSNkZWZpbmUgTEFUQ0hfSAotCi0jaW5j bHVkZSA8c2lnbmFsLmg+Ci0KLSNpbmNsdWRlICJzdG9yYWdlL3dhaXRldmVudHNldC5oIgkv KiBmb3IgV0xfKiBhcmd1bWVudHMgdG8gV2FpdExhdGNoICovCi0KLS8qCi0gKiBMYXRjaCBz dHJ1Y3R1cmUgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgb3BhcXVlIGFuZCBvbmx5IGFjY2Vzc2Vk IHRocm91Z2gKLSAqIHRoZSBwdWJsaWMgZnVuY3Rpb25zLiBJdCBpcyBkZWZpbmVkIGhlcmUg dG8gYWxsb3cgZW1iZWRkaW5nIExhdGNoZXMgYXMKLSAqIHBhcnQgb2YgYmlnZ2VyIHN0cnVj dHMuCi0gKi8KLXR5cGVkZWYgc3RydWN0IExhdGNoCi17Ci0Jc2lnX2F0b21pY190IGlzX3Nl dDsKLQlzaWdfYXRvbWljX3QgbWF5YmVfc2xlZXBpbmc7Ci0JYm9vbAkJaXNfc2hhcmVkOwot CWludAkJCW93bmVyX3BpZDsKLSNpZmRlZiBXSU4zMgotCUhBTkRMRQkJZXZlbnQ7Ci0jZW5k aWYKLX0gTGF0Y2g7Ci0KLS8qCi0gKiBwcm90b3R5cGVzIGZvciBmdW5jdGlvbnMgaW4gbGF0 Y2guYwotICovCi1leHRlcm4gdm9pZCBJbml0TGF0Y2goTGF0Y2ggKmxhdGNoKTsKLWV4dGVy biB2b2lkIEluaXRTaGFyZWRMYXRjaChMYXRjaCAqbGF0Y2gpOwotZXh0ZXJuIHZvaWQgT3du TGF0Y2goTGF0Y2ggKmxhdGNoKTsKLWV4dGVybiB2b2lkIERpc293bkxhdGNoKExhdGNoICps YXRjaCk7Ci1leHRlcm4gdm9pZCBTZXRMYXRjaChMYXRjaCAqbGF0Y2gpOwotZXh0ZXJuIHZv aWQgUmVzZXRMYXRjaChMYXRjaCAqbGF0Y2gpOwotCi1leHRlcm4gaW50CVdhaXRMYXRjaChM YXRjaCAqbGF0Y2gsIGludCB3YWtlRXZlbnRzLCBsb25nIHRpbWVvdXQsCi0JCQkJCSAgdWlu dDMyIHdhaXRfZXZlbnRfaW5mbyk7Ci1leHRlcm4gaW50CVdhaXRMYXRjaE9yU29ja2V0KExh dGNoICpsYXRjaCwgaW50IHdha2VFdmVudHMsCi0JCQkJCQkJICBwZ3NvY2tldCBzb2NrLCBs b25nIHRpbWVvdXQsIHVpbnQzMiB3YWl0X2V2ZW50X2luZm8pOwotZXh0ZXJuIHZvaWQgSW5p dGlhbGl6ZUxhdGNoV2FpdFNldCh2b2lkKTsKLQotI2VuZGlmCQkJCQkJCS8qIExBVENIX0gg Ki8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcG1zaWduYWwuaCBiL3NyYy9p bmNsdWRlL3N0b3JhZ2UvcG1zaWduYWwuaAppbmRleCAyMDZmYjc4ZjhhNS4uOGJmZWQ3ZWU2 ODAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcG1zaWduYWwuaAorKysgYi9z cmMvaW5jbHVkZS9zdG9yYWdlL3Btc2lnbmFsLmgKQEAgLTI0LDYgKzI0LDggQEAKICNpbmNs dWRlIDxzeXMvcHJvY2N0bC5oPgogI2VuZGlmCiAKKyNpbmNsdWRlICJzdG9yYWdlL3Byb2Nu dW1iZXIuaCIKKwogLyoKICAqIFJlYXNvbnMgZm9yIHNpZ25hbGluZyB0aGUgcG9zdG1hc3Rl ci4gIFdlIGNhbiBjb3BlIHdpdGggc2ltdWx0YW5lb3VzCiAgKiBzaWduYWxzIGZvciBkaWZm ZXJlbnQgcmVhc29ucy4gIElmIHRoZSBzYW1lIHJlYXNvbiBpcyBzaWduYWxlZCBtdWx0aXBs ZQpAQCAtNzYsNiArNzgsOSBAQCBleHRlcm4gdm9pZCBNYXJrUG9zdG1hc3RlckNoaWxkU2xv dEFzc2lnbmVkKGludCBzbG90KTsKIGV4dGVybiBib29sIE1hcmtQb3N0bWFzdGVyQ2hpbGRT bG90VW5hc3NpZ25lZChpbnQgc2xvdCk7CiBleHRlcm4gYm9vbCBJc1Bvc3RtYXN0ZXJDaGls ZFdhbFNlbmRlcihpbnQgc2xvdCk7CiBleHRlcm4gdm9pZCBSZWdpc3RlclBvc3RtYXN0ZXJD aGlsZEFjdGl2ZSh2b2lkKTsKK2V4dGVybiB2b2lkIFJlZ2lzdGVyUG9zdG1hc3RlckNoaWxk UHJvY051bWJlcihQcm9jTnVtYmVyIHByb2Nubyk7CitleHRlcm4gdm9pZCBVbnJlZ2lzdGVy UG9zdG1hc3RlckNoaWxkUHJvY051bWJlcihQcm9jTnVtYmVyIHByb2Nubyk7CitleHRlcm4g UHJvY051bWJlciBHZXRQTUNoaWxkUHJvY051bWJlcihpbnQgc2xvdCk7CiBleHRlcm4gdm9p ZCBNYXJrUG9zdG1hc3RlckNoaWxkV2FsU2VuZGVyKHZvaWQpOwogZXh0ZXJuIGJvb2wgUG9z dG1hc3RlcklzQWxpdmVJbnRlcm5hbCh2b2lkKTsKIGV4dGVybiB2b2lkIFBvc3RtYXN0ZXJE ZWF0aFNpZ25hbEluaXQodm9pZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdl L3Byb2MuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvYy5oCmluZGV4IDA5MDQ3MWMxMTQ0 Li43MWFjNzdmOTZlMCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jLmgK KysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jLmgKQEAgLTE3LDcgKzE3LDYgQEAKICNp bmNsdWRlICJhY2Nlc3MvY2xvZy5oIgogI2luY2x1ZGUgImFjY2Vzcy94bG9nZGVmcy5oIgog I2luY2x1ZGUgImxpYi9pbGlzdC5oIgotI2luY2x1ZGUgInN0b3JhZ2UvbGF0Y2guaCIKICNp bmNsdWRlICJzdG9yYWdlL2xvY2suaCIKICNpbmNsdWRlICJzdG9yYWdlL3BnX3NlbWEuaCIK ICNpbmNsdWRlICJzdG9yYWdlL3Byb2NsaXN0X3R5cGVzLmgiCkBAIC0xODksOSArMTg4LDYg QEAgc3RydWN0IFBHUFJPQwogCVBHU2VtYXBob3JlIHNlbTsJCQkvKiBPTkUgc2VtYXBob3Jl IHRvIHNsZWVwIG9uICovCiAJUHJvY1dhaXRTdGF0dXMgd2FpdFN0YXR1czsKIAotCUxhdGNo CQlwcm9jTGF0Y2g7CQkvKiBnZW5lcmljIGxhdGNoIGZvciBwcm9jZXNzICovCi0KLQogCVRy YW5zYWN0aW9uSWQgeGlkOwkJCS8qIGlkIG9mIHRvcC1sZXZlbCB0cmFuc2FjdGlvbiBjdXJy ZW50bHkgYmVpbmcKIAkJCQkJCQkJICogZXhlY3V0ZWQgYnkgdGhpcyBwcm9jLCBpZiBydW5u aW5nIGFuZCBYSUQKIAkJCQkJCQkJICogaXMgYXNzaWduZWQ7IGVsc2UgSW52YWxpZFRyYW5z YWN0aW9uSWQuCkBAIC0yMzUsMTUgKzIzMSw2IEBAIHN0cnVjdCBQR1BST0MKIAogCWJvb2wJ CWlzUmVndWxhckJhY2tlbmQ7CS8qIHRydWUgaWYgaXQncyBhIHJlZ3VsYXIgYmFja2VuZC4g Ki8KIAotCS8qCi0JICogV2hpbGUgaW4gaG90IHN0YW5kYnkgbW9kZSwgc2hvd3MgdGhhdCBh IGNvbmZsaWN0IHNpZ25hbCBoYXMgYmVlbiBzZW50Ci0JICogZm9yIHRoZSBjdXJyZW50IHRy YW5zYWN0aW9uLiBTZXQvY2xlYXJlZCB3aGlsZSBob2xkaW5nIFByb2NBcnJheUxvY2ssCi0J ICogdGhvdWdoIG5vdCByZXF1aXJlZC4gQWNjZXNzZWQgd2l0aG91dCBsb2NrLCBpZiBuZWVk ZWQuCi0JICoKLQkgKiBUaGlzIGlzIGEgYml0bWFzayBvZiBSZWNvdmVyeUNvbmZsaWN0UmVh c29ucwotCSAqLwotCXBnX2F0b21pY191aW50MzIgcGVuZGluZ1JlY292ZXJ5Q29uZmxpY3Rz OwotCiAJLyoKIAkgKiBJbmZvIGFib3V0IExXTG9jayB0aGUgcHJvY2VzcyBpcyBjdXJyZW50 bHkgd2FpdGluZyBmb3IsIGlmIGFueS4KIAkgKgpAQCAtMzM1LDYgKzMyMiwyMyBAQCBzdHJ1 Y3QgUEdQUk9DCiAJUEdQUk9DCSAgICpsb2NrR3JvdXBMZWFkZXI7CS8qIGxvY2sgZ3JvdXAg bGVhZGVyLCBpZiBJJ20gYSBtZW1iZXIgKi8KIAlkbGlzdF9oZWFkCWxvY2tHcm91cE1lbWJl cnM7CS8qIGxpc3Qgb2YgbWVtYmVycywgaWYgSSdtIGEgbGVhZGVyICovCiAJZGxpc3Rfbm9k ZQlsb2NrR3JvdXBMaW5rOwkvKiBteSBtZW1iZXIgbGluaywgaWYgSSdtIGEgbWVtYmVyICov CisKKwkvKiBCaXQgbWFzayBvZiBwZW5kaW5nIGludGVycnVwdHMsIHdhaXRpbmcgdG8gYmUg cHJvY2Vzc2VkICovCisJcGdfYXRvbWljX3VpbnQzMiBwZW5kaW5nSW50ZXJydXB0czsKKwor CS8qCisJICogV2hpbGUgaW4gaG90IHN0YW5kYnkgbW9kZSwgc2hvd3MgdGhhdCBhIGNvbmZs aWN0IHNpZ25hbCBoYXMgYmVlbiBzZW50CisJICogZm9yIHRoZSBjdXJyZW50IHRyYW5zYWN0 aW9uLiBTZXQvY2xlYXJlZCB3aGlsZSBob2xkaW5nIFByb2NBcnJheUxvY2ssCisJICogdGhv dWdoIG5vdCByZXF1aXJlZC4gQWNjZXNzZWQgd2l0aG91dCBsb2NrLCBpZiBuZWVkZWQuCisJ ICoKKwkgKiBUaGlzIGlzIGEgYml0bWFzayBvZiBSZWNvdmVyeUNvbmZsaWN0UmVhc29ucy4K KwkgKi8KKwlwZ19hdG9taWNfdWludDMyIHBlbmRpbmdSZWNvdmVyeUNvbmZsaWN0czsKKwor I2lmZGVmIFdJTjMyCisJLyogRXZlbnQgaGFuZGxlIHRvIHdha2UgdXAgdGhlIHByb2Nlc3Mg d2hlbiBzZW5kaW5nIGFuIGludGVycnVwdCAqLworCUhBTkRMRQkJaW50ZXJydXB0V2FrZXVw RXZlbnQ7CisjZW5kaWYKIH07CiAKIC8qIE5PVEU6ICJ0eXBlZGVmIHN0cnVjdCBQR1BST0Mg UEdQUk9DIiBhcHBlYXJzIGluIHN0b3JhZ2UvbG9jay5oLiAqLwpAQCAtNDM3LDYgKzQ0MSw4 IEBAIHR5cGVkZWYgc3RydWN0IFBST0NfSERSCiAJICovCiAJUHJvY051bWJlcgl3YWx3cml0 ZXJQcm9jOwogCVByb2NOdW1iZXIJY2hlY2twb2ludGVyUHJvYzsKKwlQcm9jTnVtYmVyCXdh bHJlY2VpdmVyUHJvYzsKKwlQcm9jTnVtYmVyCXN0YXJ0dXBQcm9jOwogCiAJLyogQ3VycmVu dCBzaGFyZWQgZXN0aW1hdGUgb2YgYXBwcm9wcmlhdGUgc3BpbnNfcGVyX2RlbGF5IHZhbHVl ICovCiAJaW50CQkJc3BpbnNfcGVyX2RlbGF5OwpAQCAtNTIwLDkgKzUyNiw2IEBAIGV4dGVy biB2b2lkIEdldExvY2tIb2xkZXJzQW5kV2FpdGVycyhMT0NBTExPQ0sgKmxvY2FsbG9jaywK IAkJCQkJCQkJCSBTdHJpbmdJbmZvIGxvY2tfd2FpdGVyc19zYnVmLAogCQkJCQkJCQkJIGlu dCAqbG9ja0hvbGRlcnNOdW0pOwogCi1leHRlcm4gdm9pZCBQcm9jV2FpdEZvclNpZ25hbCh1 aW50MzIgd2FpdF9ldmVudF9pbmZvKTsKLWV4dGVybiB2b2lkIFByb2NTZW5kU2lnbmFsKFBy b2NOdW1iZXIgcHJvY051bWJlcik7Ci0KIGV4dGVybiBQR1BST0MgKkF1eGlsaWFyeVBpZEdl dFByb2MoaW50IHBpZCk7CiAKIGV4dGVybiB2b2lkIEJlY29tZUxvY2tHcm91cExlYWRlcih2 b2lkKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY2FycmF5LmggYi9z cmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NhcnJheS5oCmluZGV4IGM1YWIxNTc0ZmUzLi5iNzIw MWQxYTkxNyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jYXJyYXkuaAor KysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NhcnJheS5oCkBAIC03OCw3ICs3OCw3IEBA IGV4dGVybiBWaXJ0dWFsVHJhbnNhY3Rpb25JZCAqR2V0Q3VycmVudFZpcnR1YWxYSURzKFRy YW5zYWN0aW9uSWQgbGltaXRYbWluLAogCQkJCQkJCQkJCQkJICAgaW50ICpudnhpZHMpOwog ZXh0ZXJuIFZpcnR1YWxUcmFuc2FjdGlvbklkICpHZXRDb25mbGljdGluZ1ZpcnR1YWxYSURz KFRyYW5zYWN0aW9uSWQgbGltaXRYbWluLCBPaWQgZGJPaWQpOwogCi1leHRlcm4gYm9vbCBT aWduYWxSZWNvdmVyeUNvbmZsaWN0KFBHUFJPQyAqcHJvYywgcGlkX3QgcGlkLCBSZWNvdmVy eUNvbmZsaWN0UmVhc29uIHJlYXNvbik7CitleHRlcm4gYm9vbCBTaWduYWxSZWNvdmVyeUNv bmZsaWN0KFBHUFJPQyAqcHJvYywgUmVjb3ZlcnlDb25mbGljdFJlYXNvbiByZWFzb24pOwog ZXh0ZXJuIGJvb2wgU2lnbmFsUmVjb3ZlcnlDb25mbGljdFdpdGhWaXJ0dWFsWElEKFZpcnR1 YWxUcmFuc2FjdGlvbklkIHZ4aWQsIFJlY292ZXJ5Q29uZmxpY3RSZWFzb24gcmVhc29uKTsK IGV4dGVybiB2b2lkIFNpZ25hbFJlY292ZXJ5Q29uZmxpY3RXaXRoRGF0YWJhc2UoT2lkIGRh dGFiYXNlaWQsIFJlY292ZXJ5Q29uZmxpY3RSZWFzb24gcmVhc29uKTsKIApkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFsLmggYi9zcmMvaW5jbHVkZS9zdG9y YWdlL3Byb2NzaWduYWwuaAppbmRleCAzNDhmYmE1M2E5My4uMThiMjhiN2I3MDQgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oCisrKyBiL3NyYy9pbmNs dWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oCkBAIC0xNCwzNSArMTQsNiBAQAogI2lmbmRlZiBQ Uk9DU0lHTkFMX0gKICNkZWZpbmUgUFJPQ1NJR05BTF9ICiAKLSNpbmNsdWRlICJzdG9yYWdl L3Byb2NudW1iZXIuaCIKLQotCi0vKgotICogUmVhc29ucyBmb3Igc2lnbmFsaW5nIGEgUG9z dGdyZXMgY2hpbGQgcHJvY2VzcyAoYSBiYWNrZW5kIG9yIGFuIGF1eGlsaWFyeQotICogcHJv Y2VzcywgbGlrZSBjaGVja3BvaW50ZXIpLiAgV2UgY2FuIGNvcGUgd2l0aCBjb25jdXJyZW50 IHNpZ25hbHMgZm9yIGRpZmZlcmVudAotICogcmVhc29ucy4gIEhvd2V2ZXIsIGlmIHRoZSBz YW1lIHJlYXNvbiBpcyBzaWduYWxlZCBtdWx0aXBsZSB0aW1lcyBpbiBxdWljawotICogc3Vj Y2Vzc2lvbiwgdGhlIHByb2Nlc3MgaXMgbGlrZWx5IHRvIG9ic2VydmUgb25seSBvbmUgbm90 aWZpY2F0aW9uIG9mIGl0LgotICogVGhpcyBpcyBva2F5IGZvciB0aGUgcHJlc2VudCB1c2Vz LgotICoKLSAqIEFsc28sIGJlY2F1c2Ugb2YgcmFjZSBjb25kaXRpb25zLCBpdCdzIGltcG9y dGFudCB0aGF0IGFsbCB0aGUgc2lnbmFscyBiZQotICogZGVmaW5lZCBzbyB0aGF0IG5vIGhh cm0gaXMgZG9uZSBpZiBhIHByb2Nlc3MgbWlzdGFrZW5seSByZWNlaXZlcyBvbmUuCi0gKi8K LXR5cGVkZWYgZW51bQotewotCVBST0NTSUdfQ0FUQ0hVUF9JTlRFUlJVUFQsCS8qIHNpbnZh bCBjYXRjaHVwIGludGVycnVwdCAqLwotCVBST0NTSUdfTk9USUZZX0lOVEVSUlVQVCwJLyog bGlzdGVuL25vdGlmeSBpbnRlcnJ1cHQgKi8KLQlQUk9DU0lHX1BBUkFMTEVMX01FU1NBR0Us CS8qIG1lc3NhZ2UgZnJvbSBjb29wZXJhdGluZyBwYXJhbGxlbCBiYWNrZW5kICovCi0JUFJP Q1NJR19XQUxTTkRfSU5JVF9TVE9QUElORywJLyogYXNrIHdhbHNlbmRlcnMgdG8gcHJlcGFy ZSBmb3Igc2h1dGRvd24gICovCi0JUFJPQ1NJR19CQVJSSUVSLAkJCS8qIGdsb2JhbCBiYXJy aWVyIGludGVycnVwdCAgKi8KLQlQUk9DU0lHX0xPR19NRU1PUllfQ09OVEVYVCwgLyogYXNr IGJhY2tlbmQgdG8gbG9nIHRoZSBtZW1vcnkgY29udGV4dHMgKi8KLQlQUk9DU0lHX1BBUkFM TEVMX0FQUExZX01FU1NBR0UsIC8qIE1lc3NhZ2UgZnJvbSBwYXJhbGxlbCBhcHBseSB3b3Jr ZXJzICovCi0JUFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVCwJLyogYmFja2VuZCBpcyBibG9j a2luZyByZWNvdmVyeSwgY2hlY2sKLQkJCQkJCQkJICogUEdQUk9DLT5wZW5kaW5nUmVjb3Zl cnlDb25mbGljdHMgZm9yIHRoZQotCQkJCQkJCQkgKiByZWFzb24gKi8KLX0gUHJvY1NpZ25h bFJlYXNvbjsKLQotI2RlZmluZSBOVU1fUFJPQ1NJR05BTFMgKFBST0NTSUdfUkVDT1ZFUllf Q09ORkxJQ1QgKyAxKQotCiB0eXBlZGVmIGVudW0KIHsKIAlQUk9DU0lHTkFMX0JBUlJJRVJf U01HUlJFTEVBU0UsIC8qIGFzayBzbWdyIHRvIGNsb3NlIGZpbGVzICovCkBAIC02NywxNiAr MzgsMTIgQEAgZXh0ZXJuIFNpemUgUHJvY1NpZ25hbFNobWVtU2l6ZSh2b2lkKTsKIGV4dGVy biB2b2lkIFByb2NTaWduYWxTaG1lbUluaXQodm9pZCk7CiAKIGV4dGVybiB2b2lkIFByb2NT aWduYWxJbml0KGNvbnN0IHVpbnQ4ICpjYW5jZWxfa2V5LCBpbnQgY2FuY2VsX2tleV9sZW4p OwotZXh0ZXJuIGludAlTZW5kUHJvY1NpZ25hbChwaWRfdCBwaWQsIFByb2NTaWduYWxSZWFz b24gcmVhc29uLAotCQkJCQkJICAgUHJvY051bWJlciBwcm9jTnVtYmVyKTsKIGV4dGVybiB2 b2lkIFNlbmRDYW5jZWxSZXF1ZXN0KGludCBiYWNrZW5kUElELCBjb25zdCB1aW50OCAqY2Fu Y2VsX2tleSwgaW50IGNhbmNlbF9rZXlfbGVuKTsKIAogZXh0ZXJuIHVpbnQ2NCBFbWl0UHJv Y1NpZ25hbEJhcnJpZXIoUHJvY1NpZ25hbEJhcnJpZXJUeXBlIHR5cGUpOwogZXh0ZXJuIHZv aWQgV2FpdEZvclByb2NTaWduYWxCYXJyaWVyKHVpbnQ2NCBnZW5lcmF0aW9uKTsKIGV4dGVy biB2b2lkIFByb2Nlc3NQcm9jU2lnbmFsQmFycmllcih2b2lkKTsKIAotZXh0ZXJuIHZvaWQg cHJvY3NpZ25hbF9zaWd1c3IxX2hhbmRsZXIoU0lHTkFMX0FSR1MpOwotCiAvKiBQcm9jU2ln bmFsSGVhZGVyIGlzIGFuIG9wYXF1ZSBzdHJ1Y3QsIGRldGFpbHMga25vd24gb25seSB3aXRo aW4gcHJvY3NpZ25hbC5jICovCiB0eXBlZGVmIHN0cnVjdCBQcm9jU2lnbmFsSGVhZGVyIFBy b2NTaWduYWxIZWFkZXI7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc2lu dmFsLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3NpbnZhbC5oCmluZGV4IDRkMzNmZGNhYmUx Li42Y2VjYmZkOWNmOCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9zaW52YWwu aAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3NpbnZhbC5oCkBAIC0xMzcsMTYgKzEzNywx MSBAQCB0eXBlZGVmIHVuaW9uCiAvKiBDb3VudGVyIG9mIG1lc3NhZ2VzIHByb2Nlc3NlZDsg ZG9uJ3Qgd29ycnkgYWJvdXQgb3ZlcmZsb3cuICovCiBleHRlcm4gUEdETExJTVBPUlQgdWlu dDY0IFNoYXJlZEludmFsaWRNZXNzYWdlQ291bnRlcjsKIAotZXh0ZXJuIFBHRExMSU1QT1JU IHZvbGF0aWxlIHNpZ19hdG9taWNfdCBjYXRjaHVwSW50ZXJydXB0UGVuZGluZzsKLQogZXh0 ZXJuIHZvaWQgU2VuZFNoYXJlZEludmFsaWRNZXNzYWdlcyhjb25zdCBTaGFyZWRJbnZhbGlk YXRpb25NZXNzYWdlICptc2dzLAogCQkJCQkJCQkJICBpbnQgbik7CiBleHRlcm4gdm9pZCBS ZWNlaXZlU2hhcmVkSW52YWxpZE1lc3NhZ2VzKHZvaWQgKCppbnZhbEZ1bmN0aW9uKSAoU2hh cmVkSW52YWxpZGF0aW9uTWVzc2FnZSAqbXNnKSwKIAkJCQkJCQkJCQkgdm9pZCAoKnJlc2V0 RnVuY3Rpb24pICh2b2lkKSk7CiAKLS8qIHNpZ25hbCBoYW5kbGVyIGZvciBjYXRjaHVwIGV2 ZW50cyAoUFJPQ1NJR19DQVRDSFVQX0lOVEVSUlVQVCkgKi8KLWV4dGVybiB2b2lkIEhhbmRs ZUNhdGNodXBJbnRlcnJ1cHQodm9pZCk7Ci0KIC8qCiAgKiBlbmFibGUvZGlzYWJsZSBwcm9j ZXNzaW5nIG9mIGNhdGNodXAgZXZlbnRzIGRpcmVjdGx5IGZyb20gc2lnbmFsIGhhbmRsZXIu CiAgKiBUaGUgZW5hYmxlIHJvdXRpbmUgZmlyc3QgcGVyZm9ybXMgcHJvY2Vzc2luZyBvZiBh bnkgY2F0Y2h1cCBldmVudHMgdGhhdApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFn ZS93YWl0ZXZlbnRzZXQuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvd2FpdGV2ZW50c2V0LmgK aW5kZXggNTM0MTI2N2YwYTAuLjZmNjdhZmFlMThmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9zdG9yYWdlL3dhaXRldmVudHNldC5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvd2Fp dGV2ZW50c2V0LmgKQEAgLTMsMTYgKzMsMTUgQEAKICAqIHdhaXRldmVudHNldC5oCiAgKgkJ cHBvbGwoKSAvIHBzZWxlY3QoKSBsaWtlIGludGVyZmFjZSBmb3Igd2FpdGluZyBmb3IgZXZl bnRzCiAgKgotICogV2FpdEV2ZW50U2V0cyBhbGxvdyB0byB3YWl0IGZvciBsYXRjaGVzIGJl aW5nIHNldCBhbmQgYWRkaXRpb25hbCBldmVudHMgLQorICogV2FpdEV2ZW50U2V0cyBhbGxv dyB0byB3YWl0IGZvciBpbnRlcnJ1cHRzIGJlaW5nIHNldCBhbmQgYWRkaXRpb25hbCBldmVu dHMgLQogICogcG9zdG1hc3RlciBkeWluZyBhbmQgc29ja2V0IHJlYWRpbmVzcyBvZiBzZXZl cmFsIHNvY2tldHMgY3VycmVudGx5IC0gYXQgdGhlCiAgKiBzYW1lIHRpbWUuICBPbiBtYW55 IHBsYXRmb3JtcyB1c2luZyBhIGxvbmcgbGl2ZWQgZXZlbnQgc2V0IGlzIG1vcmUKLSAqIGVm ZmljaWVudCB0aGFuIHVzaW5nIFdhaXRMYXRjaCBvciBXYWl0TGF0Y2hPclNvY2tldC4KKyAq IGVmZmljaWVudCB0aGFuIHVzaW5nIFdhaXRJbnRlcnJ1cHQgb3IgV2FpdEludGVycnVwdE9y U29ja2V0LgogICoKLSAqIFdhaXRFdmVudFNldFdhaXQgaW5jbHVkZXMgYSBwcm92aXNpb24g Zm9yIHRpbWVvdXRzICh3aGljaCBzaG91bGQgYmUgYXZvaWRlZAorICogV2FpdEludGVycnVw dCBpbmNsdWRlcyBhIHByb3Zpc2lvbiBmb3IgdGltZW91dHMgKHdoaWNoIHNob3VsZCBiZSBh dm9pZGVkCiAgKiB3aGVuIHBvc3NpYmxlLCBhcyB0aGV5IGluY3VyIGV4dHJhIG92ZXJoZWFk KSBhbmQgYSBwcm92aXNpb24gZm9yIHBvc3RtYXN0ZXIKICAqIGNoaWxkIHByb2Nlc3NlcyB0 byB3YWtlIHVwIGltbWVkaWF0ZWx5IG9uIHBvc3RtYXN0ZXIgZGVhdGguICBTZWUKLSAqIHN0 b3JhZ2UvaXBjL3dhaXRldmVudHNldC5jIGZvciBkZXRhaWxlZCBzcGVjaWZpY2F0aW9ucyBm b3IgdGhlIGV4cG9ydGVkCi0gKiBmdW5jdGlvbnMuCisgKiBpcGMvaW50ZXJydXB0LmMgZm9y IGRldGFpbGVkIHNwZWNpZmljYXRpb25zIGZvciB0aGUgZXhwb3J0ZWQgZnVuY3Rpb25zLgog ICoKICAqCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNiwgUG9zdGdyZVNR TCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKQEAgLTI1LDEzICsyNCwxMyBAQAogI2lmbmRl ZiBXQUlURVZFTlRTRVRfSAogI2RlZmluZSBXQUlURVZFTlRTRVRfSAogCi0jaW5jbHVkZSAi dXRpbHMvcmVzb3duZXIuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3Byb2NudW1iZXIuaCIKIAog LyoKLSAqIEJpdG1hc2tzIGZvciBldmVudHMgdGhhdCBtYXkgd2FrZS11cCBXYWl0TGF0Y2go KSwgV2FpdExhdGNoT3JTb2NrZXQoKSwgb3IKLSAqIFdhaXRFdmVudFNldFdhaXQoKS4KKyAq IEJpdG1hc2tzIGZvciBldmVudHMgdGhhdCBtYXkgd2FrZS11cCBXYWl0SW50ZXJydXB0KCks CisgKiBXYWl0SW50ZXJydXB0T3JTb2NrZXQoKSwgb3IgV2FpdEV2ZW50U2V0V2FpdCgpLgog ICovCi0jZGVmaW5lIFdMX0xBVENIX1NFVAkJICgxIDw8IDApCisjZGVmaW5lIFdMX0lOVEVS UlVQVAkJICgxIDw8IDApCiAjZGVmaW5lIFdMX1NPQ0tFVF9SRUFEQUJMRQkgKDEgPDwgMSkK ICNkZWZpbmUgV0xfU09DS0VUX1dSSVRFQUJMRSAgKDEgPDwgMikKICNkZWZpbmUgV0xfVElN RU9VVAkJCSAoMSA8PCAzKQkvKiBub3QgZm9yIFdhaXRFdmVudFNldFdhaXQoKSAqLwpAQCAt NzAsMjkgKzY5LDMzIEBAIHR5cGVkZWYgc3RydWN0IFdhaXRFdmVudAogLyogZm9yd2FyZCBk ZWNsYXJhdGlvbnMgdG8gYXZvaWQgZXhwb3Npbmcgd2FpdGV2ZW50c2V0LmMgaW1wbGVtZW50 YXRpb24gZGV0YWlscyAqLwogdHlwZWRlZiBzdHJ1Y3QgV2FpdEV2ZW50U2V0IFdhaXRFdmVu dFNldDsKIAotc3RydWN0IExhdGNoOworc3RydWN0IFBHUFJPQzsKIAogLyoKICAqIHByb3Rv dHlwZXMgZm9yIGZ1bmN0aW9ucyBpbiB3YWl0ZXZlbnRzZXQuYwogICovCiBleHRlcm4gdm9p ZCBJbml0aWFsaXplV2FpdEV2ZW50U3VwcG9ydCh2b2lkKTsKKyNpZmRlZiBXSU4zMgorZXh0 ZXJuIEhBTkRMRSBDcmVhdGVTaGFyZWRXYWtldXBIYW5kbGUodm9pZCk7CisjZW5kaWYKIAot ZXh0ZXJuIFdhaXRFdmVudFNldCAqQ3JlYXRlV2FpdEV2ZW50U2V0KFJlc291cmNlT3duZXIg cmVzb3duZXIsIGludCBuZXZlbnRzKTsKK3N0cnVjdCBSZXNvdXJjZU93bmVyRGF0YTsKKwor ZXh0ZXJuIFdhaXRFdmVudFNldCAqQ3JlYXRlV2FpdEV2ZW50U2V0KHN0cnVjdCBSZXNvdXJj ZU93bmVyRGF0YSAqcmVzb3duZXIsIGludCBuZXZlbnRzKTsKIGV4dGVybiB2b2lkIEZyZWVX YWl0RXZlbnRTZXQoV2FpdEV2ZW50U2V0ICpzZXQpOwogZXh0ZXJuIHZvaWQgRnJlZVdhaXRF dmVudFNldEFmdGVyRm9yayhXYWl0RXZlbnRTZXQgKnNldCk7CiBleHRlcm4gaW50CUFkZFdh aXRFdmVudFRvU2V0KFdhaXRFdmVudFNldCAqc2V0LCB1aW50MzIgZXZlbnRzLCBwZ3NvY2tl dCBmZCwKLQkJCQkJCQkgIHN0cnVjdCBMYXRjaCAqbGF0Y2gsIHZvaWQgKnVzZXJfZGF0YSk7 CisJCQkJCQkJICB1aW50MzIgaW50ZXJydXB0TWFzaywgdm9pZCAqdXNlcl9kYXRhKTsKIGV4 dGVybiB2b2lkIE1vZGlmeVdhaXRFdmVudChXYWl0RXZlbnRTZXQgKnNldCwgaW50IHBvcywg dWludDMyIGV2ZW50cywKLQkJCQkJCQlzdHJ1Y3QgTGF0Y2ggKmxhdGNoKTsKKwkJCQkJCQl1 aW50MzIgaW50ZXJydXB0TWFzayk7CiBleHRlcm4gaW50CVdhaXRFdmVudFNldFdhaXQoV2Fp dEV2ZW50U2V0ICpzZXQsIGxvbmcgdGltZW91dCwKIAkJCQkJCQkgV2FpdEV2ZW50ICpvY2N1 cnJlZF9ldmVudHMsIGludCBuZXZlbnRzLAogCQkJCQkJCSB1aW50MzIgd2FpdF9ldmVudF9p bmZvKTsKIGV4dGVybiBpbnQJR2V0TnVtUmVnaXN0ZXJlZFdhaXRFdmVudHMoV2FpdEV2ZW50 U2V0ICpzZXQpOwogZXh0ZXJuIGJvb2wgV2FpdEV2ZW50U2V0Q2FuUmVwb3J0Q2xvc2VkKHZv aWQpOwogCi0jaWZuZGVmIFdJTjMyCisvKiBsb3cgbGV2ZWwgZnVuY3Rpb25zIHVzZWQgdG8g aW1wbGVtZW50IFNlbmRJbnRlcnJ1cHQgKi8KIGV4dGVybiB2b2lkIFdha2V1cE15UHJvYyh2 b2lkKTsKLWV4dGVybiB2b2lkIFdha2V1cE90aGVyUHJvYyhpbnQgcGlkKTsKLSNlbmRpZgor ZXh0ZXJuIHZvaWQgV2FrZXVwT3RoZXJQcm9jKHN0cnVjdCBQR1BST0MgKnByb2MpOwogCiAj ZW5kaWYJCQkJCQkJLyogV0FJVEVWRU5UU0VUX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL3Rjb3AvdGNvcHByb3QuaCBiL3NyYy9pbmNsdWRlL3Rjb3AvdGNvcHByb3QuaAppbmRl eCA1YmM1YmNmYjIwZC4uNzdhYjk1MGVhZTIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Rj b3AvdGNvcHByb3QuaAorKysgYi9zcmMvaW5jbHVkZS90Y29wL3Rjb3Bwcm90LmgKQEAgLTE2 LDcgKzE2LDYgQEAKIAogI2luY2x1ZGUgIm5vZGVzL3BhcmFtcy5oIgogI2luY2x1ZGUgIm5v ZGVzL3BsYW5ub2Rlcy5oIgotI2luY2x1ZGUgInN0b3JhZ2UvcHJvY3NpZ25hbC5oIgogI2lu Y2x1ZGUgInV0aWxzL2d1Yy5oIgogI2luY2x1ZGUgInV0aWxzL3F1ZXJ5ZW52aXJvbm1lbnQu aCIKIApAQCAtNzAsMTMgKzY5LDcgQEAgZXh0ZXJuIExpc3QgKnBnX3BsYW5fcXVlcmllcyhM aXN0ICpxdWVyeXRyZWVzLCBjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcsCiAJCQkJCQkJIGlu dCBjdXJzb3JPcHRpb25zLAogCQkJCQkJCSBQYXJhbUxpc3RJbmZvIGJvdW5kUGFyYW1zKTsK IAotZXh0ZXJuIHZvaWQgZGllKFNJR05BTF9BUkdTKTsKLXBnX25vcmV0dXJuIGV4dGVybiB2 b2lkIHF1aWNrZGllKFNJR05BTF9BUkdTKTsKLWV4dGVybiB2b2lkIFN0YXRlbWVudENhbmNl bEhhbmRsZXIoU0lHTkFMX0FSR1MpOwogcGdfbm9yZXR1cm4gZXh0ZXJuIHZvaWQgRmxvYXRF eGNlcHRpb25IYW5kbGVyKFNJR05BTF9BUkdTKTsKLWV4dGVybiB2b2lkIEhhbmRsZVJlY292 ZXJ5Q29uZmxpY3RJbnRlcnJ1cHQodm9pZCk7Ci1leHRlcm4gdm9pZCBQcm9jZXNzQ2xpZW50 UmVhZEludGVycnVwdChib29sIGJsb2NrZWQpOwotZXh0ZXJuIHZvaWQgUHJvY2Vzc0NsaWVu dFdyaXRlSW50ZXJydXB0KGJvb2wgYmxvY2tlZCk7CiAKIGV4dGVybiB2b2lkIHByb2Nlc3Nf cG9zdGdyZXNfc3dpdGNoZXMoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwKIAkJCQkJCQkJCSAg R3VjQ29udGV4dCBjdHgsIGNvbnN0IGNoYXIgKipkYm5hbWUpOwpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvdXRpbHMvbWVtdXRpbHMuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL21lbXV0aWxz LmgKaW5kZXggMTFhYjE3MTdhMTYuLjVkNDc2NDNlYjc3IDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS91dGlscy9tZW11dGlscy5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL21lbXV0aWxz LmgKQEAgLTEwMSw3ICsxMDEsNiBAQCBleHRlcm4gdm9pZCBNZW1vcnlDb250ZXh0Q2hlY2so TWVtb3J5Q29udGV4dCBjb250ZXh0KTsKICNkZWZpbmUgTWVtb3J5Q29udGV4dENvcHlBbmRT ZXRJZGVudGlmaWVyKGN4dCwgaWQpIFwKIAlNZW1vcnlDb250ZXh0U2V0SWRlbnRpZmllcihj eHQsIE1lbW9yeUNvbnRleHRTdHJkdXAoY3h0LCBpZCkpCiAKLWV4dGVybiB2b2lkIEhhbmRs ZUxvZ01lbW9yeUNvbnRleHRJbnRlcnJ1cHQodm9pZCk7CiBleHRlcm4gdm9pZCBQcm9jZXNz TG9nTWVtb3J5Q29udGV4dEludGVycnVwdCh2b2lkKTsKIAogLyoKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL3V0aWxzL3Bnc3RhdF9pbnRlcm5hbC5oIGIvc3JjL2luY2x1ZGUvdXRpbHMv cGdzdGF0X2ludGVybmFsLmgKaW5kZXggOWI4ZmJhZTAwZWQuLjJjZjgwOWNkN2MyIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9wZ3N0YXRfaW50ZXJuYWwuaAorKysgYi9zcmMv aW5jbHVkZS91dGlscy9wZ3N0YXRfaW50ZXJuYWwuaApAQCAtMTUsNiArMTUsNyBAQAogCiAK ICNpbmNsdWRlICJjb21tb24vaGFzaGZuX3Vuc3RhYmxlLmgiCisjaW5jbHVkZSAiaXBjL2lu dGVycnVwdC5oIgogI2luY2x1ZGUgImxpYi9kc2hhc2guaCIKICNpbmNsdWRlICJsaWIvaWxp c3QuaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKZGlmZiAtLWdpdCBhL3NyYy9wb3J0L3BnX251 bWEuYyBiL3NyYy9wb3J0L3BnX251bWEuYwppbmRleCBkNTc0YTY4NmI0Mi4uMWRmNWVlMzAz M2YgMTAwNjQ0Ci0tLSBhL3NyYy9wb3J0L3BnX251bWEuYworKysgYi9zcmMvcG9ydC9wZ19u dW1hLmMKQEAgLTE2LDcgKzE2LDEwIEBACiAjaW5jbHVkZSAiYy5oIgogI2luY2x1ZGUgPHVu aXN0ZC5oPgogCi0jaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaWZuZGVmIEZST05URU5ECisj aW5jbHVkZSAicG9zdGdyZXMuaCIKKyNpbmNsdWRlICJpcGMvaW50ZXJydXB0LmgiCisjZW5k aWYKICNpbmNsdWRlICJwb3J0L3BnX251bWEuaCIKIAogLyoKQEAgLTg3LDcgKzkwLDkgQEAg cGdfbnVtYV9xdWVyeV9wYWdlcyhpbnQgcGlkLCB1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lk ICoqcGFnZXMsIGludCAqc3RhdHVzKQogCQl1bnNpZ25lZCBsb25nIGNvdW50X2NodW5rID0g TWluKGNvdW50IC0gbmV4dCwKIAkJCQkJCQkJCQlOVU1BX1FVRVJZX0NIVU5LX1NJWkUpOwog CisjaWZuZGVmIEZST05URU5ECiAJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisjZW5kaWYK IAogCQkvKgogCQkgKiBCYWlsIG91dCBpZiBhbnkgb2YgdGhlIGNodW5rcyBlcnJvcnMgb3V0 IChyZXQ8MCkuIFdlIGlnbm9yZSAocmV0PjApCmRpZmYgLS1naXQgYS9zcmMvcG9ydC9wZ3Ns ZWVwLmMgYi9zcmMvcG9ydC9wZ3NsZWVwLmMKaW5kZXggNGMzMWU1MDNlYjEuLjBiZDUwYmRi MjNmIDEwMDY0NAotLS0gYS9zcmMvcG9ydC9wZ3NsZWVwLmMKKysrIGIvc3JjL3BvcnQvcGdz bGVlcC5jCkBAIC0zMiwxMCArMzIsMTAgQEAKICAqCiAgKiBDQVVUSU9OOiBJdCdzIG5vdCBh IGdvb2QgaWRlYSB0byB1c2UgbG9uZyBzbGVlcHMgaW4gdGhlIGJhY2tlbmQuICBUaGV5IHdp bGwKICAqIHNpbGVudGx5IHJldHVybiBlYXJseSBpZiBhIHNpZ25hbCBpcyBjYXVnaHQsIGJ1 dCB0aGF0IGRvZXNuJ3QgaW5jbHVkZQotICogbGF0Y2hlcyBiZWluZyBzZXQgb24gbW9zdCBP U2VzLCBhbmQgZXZlbiBzaWduYWwgaGFuZGxlcnMgdGhhdCBzZXQgTXlMYXRjaAotICogbWln aHQgaGFwcGVuIHRvIHJ1biBiZWZvcmUgdGhlIHNsZWVwIGJlZ2lucywgYWxsb3dpbmcgdGhl IGZ1bGwgZGVsYXkuCi0gKiBCZXR0ZXIgcHJhY3RpY2UgaXMgdG8gdXNlIFdhaXRMYXRjaCgp IHdpdGggYSB0aW1lb3V0LCBzbyB0aGF0IGJhY2tlbmRzCi0gKiByZXNwb25kIHRvIGxhdGNo ZXMgYW5kIHNpZ25hbHMgcHJvbXB0bHkuCisgKiBpbnRlcnJ1cHRzIGJlaW5nIHJlY2VpdmVk IG9uIG1vc3QgT1NlcywgYW5kIGV2ZW4gc2lnbmFsIGhhbmRsZXJzIHRoYXQgcmFpc2UKKyAq IGFuIGludGVycnVwdCBtaWdodCBoYXBwZW4gdG8gcnVuIGJlZm9yZSB0aGUgc2xlZXAgYmVn aW5zLCBhbGxvd2luZyB0aGUgZnVsbAorICogZGVsYXkuICBCZXR0ZXIgcHJhY3RpY2UgaXMg dG8gdXNlIFdhaXRJbnRlcnJ1cHQoKSB3aXRoIGEgdGltZW91dCwgc28gdGhhdAorICogYmFj a2VuZHMgcmVzcG9uZCB0byBpbnRlcnJ1cHRzIGFuZCBzaWduYWxzIHByb21wdGx5LgogICov CiB2b2lkCiBwZ191c2xlZXAobG9uZyBtaWNyb3NlYykKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L2lzb2xhdGlvbi9pc29sYXRpb250ZXN0ZXIuYyBiL3NyYy90ZXN0L2lzb2xhdGlvbi9pc29s YXRpb250ZXN0ZXIuYwppbmRleCBhMGFlYzA0ZDk5NC4uNzc3ZDAwMjgzZGEgMTAwNjQ0Ci0t LSBhL3NyYy90ZXN0L2lzb2xhdGlvbi9pc29sYXRpb250ZXN0ZXIuYworKysgYi9zcmMvdGVz dC9pc29sYXRpb24vaXNvbGF0aW9udGVzdGVyLmMKQEAgLTc2Miw3ICs3NjIsNyBAQCB0cnlf Y29tcGxldGVfc3RlcHMoVGVzdFNwZWMgKnRlc3RzcGVjLCBQZXJtdXRhdGlvblN0ZXAgKip3 YWl0aW5nLAogCXsKIAkJaW50CQkJdyA9IDA7CiAKLQkJLyogUmVzZXQgbGF0Y2g7IHdlIG9u bHkgY2FyZSBhYm91dCBub3RpY2VzIHJlY2VpdmVkIHdpdGhpbiBsb29wLiAqLworCQkvKiBS ZXNldCBmbGFnOyB3ZSBvbmx5IGNhcmUgYWJvdXQgbm90aWNlcyByZWNlaXZlZCB3aXRoaW4g bG9vcC4gKi8KIAkJYW55X25ld19ub3RpY2UgPSBmYWxzZTsKIAogCQkvKiBMaWtld2lzZSwg dGhlc2UgdmFyaWFibGVzIHJlc2V0IGZvciBlYWNoIHJldHJ5LiAqLwpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NobV9tcS9zZXR1cC5jIGIvc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X3NobV9tcS9zZXR1cC5jCmluZGV4IGJhMmZkNzQ2ZDczLi5kNzRlZDQxNDgzOSAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NobV9tcS9zZXR1cC5jCisrKyBi L3NyYy90ZXN0L21vZHVsZXMvdGVzdF9zaG1fbXEvc2V0dXAuYwpAQCAtMTUsNiArMTUsNyBA QAogCiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAorI2luY2x1ZGUgImlwYy9pbnRlcnJ1cHQu aCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNs dWRlICJwb3N0bWFzdGVyL2Jnd29ya2VyLmgiCkBAIC0xMzMsNiArMTM0LDcgQEAgc2V0dXBf ZHluYW1pY19zaGFyZWRfbWVtb3J5KGludDY0IHF1ZXVlX3NpemUsIGludCBud29ya2VycywK IAogCS8qIFNldCB1cCB0aGUgaGVhZGVyIHJlZ2lvbi4gKi8KIAloZHIgPSBzaG1fdG9jX2Fs bG9jYXRlKHRvYywgc2l6ZW9mKHRlc3Rfc2htX21xX2hlYWRlcikpOworCWhkci0+bGVhZGVy X3Byb2NfbnVtYmVyID0gTXlQcm9jTnVtYmVyOwogCVNwaW5Mb2NrSW5pdCgmaGRyLT5tdXRl eCk7CiAJaGRyLT53b3JrZXJzX3RvdGFsID0gbndvcmtlcnM7CiAJaGRyLT53b3JrZXJzX2F0 dGFjaGVkID0gMDsKQEAgLTIyMiw4ICsyMjQsNiBAQCBzZXR1cF9iYWNrZ3JvdW5kX3dvcmtl cnMoaW50IG53b3JrZXJzLCBkc21fc2VnbWVudCAqc2VnKQogCXNwcmludGYod29ya2VyLmJn d19mdW5jdGlvbl9uYW1lLCAidGVzdF9zaG1fbXFfbWFpbiIpOwogCXNucHJpbnRmKHdvcmtl ci5iZ3dfdHlwZSwgQkdXX01BWExFTiwgInRlc3Rfc2htX21xIik7CiAJd29ya2VyLmJnd19t YWluX2FyZyA9IFVJbnQzMkdldERhdHVtKGRzbV9zZWdtZW50X2hhbmRsZShzZWcpKTsKLQkv KiBzZXQgYmd3X25vdGlmeV9waWQsIHNvIHdlIGNhbiBkZXRlY3QgaWYgdGhlIHdvcmtlciBz dG9wcyAqLwotCXdvcmtlci5iZ3dfbm90aWZ5X3BpZCA9IE15UHJvY1BpZDsKIAogCS8qIFJl Z2lzdGVyIHRoZSB3b3JrZXJzLiAqLwogCWZvciAoaSA9IDA7IGkgPCBud29ya2VyczsgKytp KQpAQCAtMjYzLDYgKzI2Myw5IEBAIHdhaXRfZm9yX3dvcmtlcnNfdG9fYmVjb21lX3JlYWR5 KHdvcmtlcl9zdGF0ZSAqd3N0YXRlLAogCXsKIAkJaW50CQkJd29ya2Vyc19yZWFkeTsKIAor CQkvKiBDbGVhciB0aGUgaW50ZXJydXB0IGZsYWcgc28gd2UgZG9uJ3Qgc3Bpbi4gKi8KKwkJ Q2xlYXJJbnRlcnJ1cHQoSU5URVJSVVBUX1dBSVRfV0FLRVVQKTsKKwogCQkvKiBJZiBhbGwg dGhlIHdvcmtlcnMgYXJlIHJlYWR5LCB3ZSBoYXZlIHN1Y2NlZWRlZC4gKi8KIAkJU3Bpbkxv Y2tBY3F1aXJlKCZoZHItPm11dGV4KTsKIAkJd29ya2Vyc19yZWFkeSA9IGhkci0+d29ya2Vy c19yZWFkeTsKQEAgLTI4NSwxMSArMjg4LDkgQEAgd2FpdF9mb3Jfd29ya2Vyc190b19iZWNv bWVfcmVhZHkod29ya2VyX3N0YXRlICp3c3RhdGUsCiAJCQl3ZV9iZ3dvcmtlcl9zdGFydHVw ID0gV2FpdEV2ZW50RXh0ZW5zaW9uTmV3KCJUZXN0U2htTXFCZ1dvcmtlclN0YXJ0dXAiKTsK IAogCQkvKiBXYWl0IHRvIGJlIHNpZ25hbGVkLiAqLwotCQkodm9pZCkgV2FpdExhdGNoKE15 TGF0Y2gsIFdMX0xBVENIX1NFVCB8IFdMX0VYSVRfT05fUE1fREVBVEgsIDAsCi0JCQkJCQkg d2VfYmd3b3JrZXJfc3RhcnR1cCk7Ci0KLQkJLyogUmVzZXQgdGhlIGxhdGNoIHNvIHdlIGRv bid0IHNwaW4uICovCi0JCVJlc2V0TGF0Y2goTXlMYXRjaCk7CisJCSh2b2lkKSBXYWl0SW50 ZXJydXB0KENoZWNrRm9ySW50ZXJydXB0c01hc2sgfCBJTlRFUlJVUFRfV0FJVF9XQUtFVVAs CisJCQkJCQkJIFdMX0lOVEVSUlVQVCB8IFdMX0VYSVRfT05fUE1fREVBVEgsIDAsCisJCQkJ CQkJIHdlX2Jnd29ya2VyX3N0YXJ0dXApOwogCiAJCS8qIEFuIGludGVycnVwdCBtYXkgaGF2 ZSBvY2N1cnJlZCB3aGlsZSB3ZSB3ZXJlIHdhaXRpbmcuICovCiAJCUNIRUNLX0ZPUl9JTlRF UlJVUFRTKCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc2htX21xL3Rl c3QuYyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9zaG1fbXEvdGVzdC5jCmluZGV4IGZlMTc5 NGM2MDc3Li5kODY3NWFjMTQyMyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X3NobV9tcS90ZXN0LmMKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NobV9tcS90ZXN0 LmMKQEAgLTE0LDcgKzE0LDcgQEAKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCiAjaW5jbHVk ZSAiZm1nci5oIgotI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgImlwYy9pbnRl cnJ1cHQuaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJ2YXJhdHQuaCIKIApA QCAtMTcwLDYgKzE3MCw4IEBAIHRlc3Rfc2htX21xX3BpcGVsaW5lZChQR19GVU5DVElPTl9B UkdTKQogCXsKIAkJYm9vbAkJd2FpdCA9IHRydWU7CiAKKwkJQ2xlYXJJbnRlcnJ1cHQoSU5U RVJSVVBUX1dBSVRfV0FLRVVQKTsKKwogCQkvKgogCQkgKiBJZiB3ZSBoYXZlbid0IHlldCBz ZW50IHRoZSBtZXNzYWdlIHRoZSByZXF1aXNpdGUgbnVtYmVyIG9mIHRpbWVzLAogCQkgKiB0 cnkgYWdhaW4gdG8gc2VuZCBpdCBub3cuICBOb3RlIHRoYXQgd2hlbiBzaG1fbXFfc2VuZCgp IHJldHVybnMKQEAgLTIzNCwxMyArMjM2LDEzIEBAIHRlc3Rfc2htX21xX3BpcGVsaW5lZChQ R19GVU5DVElPTl9BUkdTKQogCiAJCQkvKgogCQkJICogSWYgd2UgbWFkZSBubyBwcm9ncmVz cywgd2FpdCBmb3Igb25lIG9mIHRoZSBvdGhlciBwcm9jZXNzZXMgdG8KLQkJCSAqIHdoaWNo IHdlIGFyZSBjb25uZWN0ZWQgdG8gc2V0IG91ciBsYXRjaCwgaW5kaWNhdGluZyB0aGF0IHRo ZXkKLQkJCSAqIGhhdmUgcmVhZCBvciB3cml0dGVuIGRhdGEgYW5kIHRoZXJlZm9yZSB0aGVy ZSBtYXkgbm93IGJlIHdvcmsKLQkJCSAqIGZvciB1cyB0byBkby4KKwkJCSAqIHdoaWNoIHdl IGFyZSBjb25uZWN0ZWQgdG8gc2VuZCB1cyB0aGUgSU5URVJSVVBUX1dBSVRfV0FLRVVQCisJ CQkgKiBpbnRlcnJ1cHQsIGluZGljYXRpbmcgdGhhdCB0aGV5IGhhdmUgcmVhZCBvciB3cml0 dGVuIGRhdGEgYW5kCisJCQkgKiB0aGVyZWZvcmUgdGhlcmUgbWF5IG5vdyBiZSB3b3JrIGZv ciB1cyB0byBkby4KIAkJCSAqLwotCQkJKHZvaWQpIFdhaXRMYXRjaChNeUxhdGNoLCBXTF9M QVRDSF9TRVQgfCBXTF9FWElUX09OX1BNX0RFQVRILCAwLAotCQkJCQkJCSB3ZV9tZXNzYWdl X3F1ZXVlKTsKLQkJCVJlc2V0TGF0Y2goTXlMYXRjaCk7CisJCQkodm9pZCkgV2FpdEludGVy cnVwdChDaGVja0ZvckludGVycnVwdHNNYXNrIHwgSU5URVJSVVBUX1dBSVRfV0FLRVVQLAor CQkJCQkJCQkgV0xfSU5URVJSVVBUIHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwgMCwKKwkJCQkJ CQkJIHdlX21lc3NhZ2VfcXVldWUpOwogCQkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIAkJ fQogCX0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9zaG1fbXEvdGVzdF9z aG1fbXEuaCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9zaG1fbXEvdGVzdF9zaG1fbXEuaApp bmRleCBiNmEwMjkwMjg5Yy4uNmYwODI2YmUzNDAgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21v ZHVsZXMvdGVzdF9zaG1fbXEvdGVzdF9zaG1fbXEuaAorKysgYi9zcmMvdGVzdC9tb2R1bGVz L3Rlc3Rfc2htX21xL3Rlc3Rfc2htX21xLmgKQEAgLTI4LDYgKzI4LDggQEAKICAqLwogdHlw ZWRlZiBzdHJ1Y3QKIHsKKwlQcm9jTnVtYmVyCWxlYWRlcl9wcm9jX251bWJlcjsKKwogCXNs b2NrX3QJCW11dGV4OwogCWludAkJCXdvcmtlcnNfdG90YWw7CiAJaW50CQkJd29ya2Vyc19h dHRhY2hlZDsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9zaG1fbXEvd29y a2VyLmMgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc2htX21xL3dvcmtlci5jCmluZGV4IDM2 OGU0ZjNmMjM0Li5jNzViNWVkYWFmYSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X3NobV9tcS93b3JrZXIuYworKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc2htX21x L3dvcmtlci5jCkBAIC0xOSw3ICsxOSw3IEBACiAKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgog Ci0jaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAiaXBjL2ludGVycnVwdC5oIgog I2luY2x1ZGUgInN0b3JhZ2UvaXBjLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jYXJyYXku aCIKICNpbmNsdWRlICJzdG9yYWdlL3NobV9tcS5oIgpAQCAtNTIsMTUgKzUyLDEyIEBAIHRl c3Rfc2htX21xX21haW4oRGF0dW0gbWFpbl9hcmcpCiAJc2htX21xX2hhbmRsZSAqb3V0cWg7 CiAJdm9sYXRpbGUgdGVzdF9zaG1fbXFfaGVhZGVyICpoZHI7CiAJaW50CQkJbXl3b3JrZXJu dW1iZXI7Ci0JUEdQUk9DCSAgICpyZWdpc3RyYW50OwogCiAJLyoKLQkgKiBFc3RhYmxpc2gg c2lnbmFsIGhhbmRsZXJzLgotCSAqCi0JICogV2Ugd2FudCBDSEVDS19GT1JfSU5URVJSVVBU UygpIHRvIGtpbGwgb2ZmIHRoaXMgd29ya2VyIHByb2Nlc3MganVzdCBhcwotCSAqIGl0IHdv dWxkIGEgbm9ybWFsIHVzZXIgYmFja2VuZC4gIFRvIG1ha2UgdGhhdCBoYXBwZW4sIHdlIHVz ZSBkaWUoKS4KKwkgKiBUaGUgc3RhbmRhcmQgaW50ZXJydXB0IGFuZCBzaWduYWwgaGFuZGxl cnMgYXJlIE9LIGZvciB1cywgaW4gcGFydGljdWxhcgorCSAqIHdlIHdhbnQgQ0hFQ0tfRk9S X0lOVEVSUlVQVFMoKSB0byBraWxsIG9mZiB0aGlzIHdvcmtlciBwcm9jZXNzIGp1c3QgYXMK KwkgKiBpdCB3b3VsZCBhIG5vcm1hbCB1c2VyIGJhY2tlbmQuIEp1c3QgdW5ibG9jayBzaWdu YWxzLgogCSAqLwotCXBxc2lnbmFsKFNJR1RFUk0sIGRpZSk7CiAJQmFja2dyb3VuZFdvcmtl clVuYmxvY2tTaWduYWxzKCk7CiAKIAkvKgpAQCAtMTIyLDEzICsxMTksNyBAQCB0ZXN0X3No bV9tcV9tYWluKERhdHVtIG1haW5fYXJnKQogCVNwaW5Mb2NrQWNxdWlyZSgmaGRyLT5tdXRl eCk7CiAJKytoZHItPndvcmtlcnNfcmVhZHk7CiAJU3BpbkxvY2tSZWxlYXNlKCZoZHItPm11 dGV4KTsKLQlyZWdpc3RyYW50ID0gQmFja2VuZFBpZEdldFByb2MoTXlCZ3dvcmtlckVudHJ5 LT5iZ3dfbm90aWZ5X3BpZCk7Ci0JaWYgKHJlZ2lzdHJhbnQgPT0gTlVMTCkKLQl7Ci0JCWVs b2coREVCVUcxLCAicmVnaXN0cmFudCBiYWNrZW5kIGhhcyBleGl0ZWQgcHJlbWF0dXJlbHki KTsKLQkJcHJvY19leGl0KDEpOwotCX0KLQlTZXRMYXRjaCgmcmVnaXN0cmFudC0+cHJvY0xh dGNoKTsKKwlTZW5kSW50ZXJydXB0KElOVEVSUlVQVF9XQUlUX1dBS0VVUCwgaGRyLT5sZWFk ZXJfcHJvY19udW1iZXIpOwogCiAJLyogRG8gdGhlIHdvcmsuICovCiAJY29weV9tZXNzYWdl cyhpbnFoLCBvdXRxaCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3dvcmtlcl9z cGkvd29ya2VyX3NwaS5jIGIvc3JjL3Rlc3QvbW9kdWxlcy93b3JrZXJfc3BpL3dvcmtlcl9z cGkuYwppbmRleCBkMWU0YTJiZDk1Mi4uOGY5ZmE5ZTE4MzQgMTAwNjQ0Ci0tLSBhL3NyYy90 ZXN0L21vZHVsZXMvd29ya2VyX3NwaS93b3JrZXJfc3BpLmMKKysrIGIvc3JjL3Rlc3QvbW9k dWxlcy93b3JrZXJfc3BpL3dvcmtlcl9zcGkuYwpAQCAtNCw4ICs0LDggQEAKICAqCQlTYW1w bGUgYmFja2dyb3VuZCB3b3JrZXIgY29kZSB0aGF0IGRlbW9uc3RyYXRlcyB2YXJpb3VzIGNv ZGluZwogICoJCXBhdHRlcm5zOiBlc3RhYmxpc2hpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9u OyBzdGFydGluZyBhbmQgY29tbWl0dGluZwogICoJCXRyYW5zYWN0aW9uczsgdXNpbmcgR1VD IHZhcmlhYmxlcywgYW5kIGhlZWRpbmcgU0lHSFVQIHRvIHJlcmVhZAotICoJCXRoZSBjb25m aWd1cmF0aW9uIGZpbGU7IHJlcG9ydGluZyB0byBwZ19zdGF0X2FjdGl2aXR5OyB1c2luZyB0 aGUKLSAqCQlwcm9jZXNzIGxhdGNoIHRvIHNsZWVwIGFuZCBleGl0IGluIGNhc2Ugb2YgcG9z dG1hc3RlciBkZWF0aC4KKyAqCQl0aGUgY29uZmlndXJhdGlvbiBmaWxlOyByZXBvcnRpbmcg dG8gcGdfc3RhdF9hY3Rpdml0eTsgdXNpbmcKKyAqCQlXYWl0SW50ZXJydXB0IHRvIHNsZWVw IGFuZCBleGl0IGluIGNhc2Ugb2YgcG9zdG1hc3RlciBkZWF0aC4KICAqCiAgKiBUaGlzIGNv ZGUgY29ubmVjdHMgdG8gYSBkYXRhYmFzZSwgY3JlYXRlcyBhIHNjaGVtYSBhbmQgdGFibGUs IGFuZCBzdW1tYXJpemVzCiAgKiB0aGUgbnVtYmVycyBjb250YWluZWQgdGhlcmVpbi4gIFRv IHNlZSBpdCB3b3JraW5nLCBpbnNlcnQgYW4gaW5pdGlhbCB2YWx1ZQpAQCAtMjMsMTAgKzIz LDggQEAKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCiAvKiBUaGVzZSBhcmUgYWx3YXlzIG5l Y2Vzc2FyeSBmb3IgYSBiZ3dvcmtlciAqLwotI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2lu Y2x1ZGUgImlwYy9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL2Jnd29ya2Vy LmgiCi0jaW5jbHVkZSAicG9zdG1hc3Rlci9pbnRlcnJ1cHQuaCIKLSNpbmNsdWRlICJzdG9y YWdlL2xhdGNoLmgiCiAKIC8qIHRoZXNlIGhlYWRlcnMgYXJlIHVzZWQgYnkgdGhpcyBwYXJ0 aWN1bGFyIHdvcmtlcidzIGNvZGUgKi8KICNpbmNsdWRlICJhY2Nlc3MveGFjdC5oIgpAQCAt MTU1LDExICsxNTMsMTAgQEAgd29ya2VyX3NwaV9tYWluKERhdHVtIG1haW5fYXJnKQogCXAg Kz0gc2l6ZW9mKE9pZCk7CiAJbWVtY3B5KCZmbGFncywgcCwgc2l6ZW9mKGJpdHMzMikpOwog Ci0JLyogRXN0YWJsaXNoIHNpZ25hbCBoYW5kbGVycyBiZWZvcmUgdW5ibG9ja2luZyBzaWdu YWxzLiAqLwotCXBxc2lnbmFsKFNJR0hVUCwgU2lnbmFsSGFuZGxlckZvckNvbmZpZ1JlbG9h ZCk7Ci0JcHFzaWduYWwoU0lHVEVSTSwgZGllKTsKLQotCS8qIFdlJ3JlIG5vdyByZWFkeSB0 byByZWNlaXZlIHNpZ25hbHMgKi8KKwkvKgorCSAqIFRoZSBzdGFuZGFyZCBpbnRlcnJ1cHQg YW5kIHNpZ25hbCBoYW5kbGVycyBhcmUgT0sgZm9yIHVzOyB1bmJsb2NrCisJICogc2lnbmFs cy4KKwkgKi8KIAlCYWNrZ3JvdW5kV29ya2VyVW5ibG9ja1NpZ25hbHMoKTsKIAogCS8qIENv bm5lY3QgdG8gb3VyIGRhdGFiYXNlICovCkBAIC0yMTMsMjYgKzIxMCwyNSBAQCB3b3JrZXJf c3BpX21haW4oRGF0dW0gbWFpbl9hcmcpCiAKIAkJLyoKIAkJICogQmFja2dyb3VuZCB3b3Jr ZXJzIG11c3RuJ3QgY2FsbCB1c2xlZXAoKSBvciBhbnkgZGlyZWN0IGVxdWl2YWxlbnQ6Ci0J CSAqIGluc3RlYWQsIHRoZXkgbWF5IHdhaXQgb24gdGhlaXIgcHJvY2VzcyBsYXRjaCwgd2hp Y2ggc2xlZXBzIGFzCi0JCSAqIG5lY2Vzc2FyeSwgYnV0IGlzIGF3YWtlbmVkIGlmIHBvc3Rt YXN0ZXIgZGllcy4gIFRoYXQgd2F5IHRoZQotCQkgKiBiYWNrZ3JvdW5kIHByb2Nlc3MgZ29l cyBhd2F5IGltbWVkaWF0ZWx5IGluIGFuIGVtZXJnZW5jeS4KKwkJICogaW5zdGVhZCwgdGhl eSBtYXkgdXNlIFdhaXRJbnRlcnJ1cHQsIHdoaWNoIHNsZWVwcyBhcyBuZWNlc3NhcnksIGJ1 dAorCQkgKiBpcyBhd2FrZW5lZCBpZiBwb3N0bWFzdGVyIGRpZXMuICBUaGF0IHdheSB0aGUg YmFja2dyb3VuZCBwcm9jZXNzCisJCSAqIGdvZXMgYXdheSBpbW1lZGlhdGVseSBpbiBhbiBl bWVyZ2VuY3kuCiAJCSAqLwotCQkodm9pZCkgV2FpdExhdGNoKE15TGF0Y2gsCi0JCQkJCQkg V0xfTEFUQ0hfU0VUIHwgV0xfVElNRU9VVCB8IFdMX0VYSVRfT05fUE1fREVBVEgsCi0JCQkJ CQkgd29ya2VyX3NwaV9uYXB0aW1lICogMTAwMEwsCi0JCQkJCQkgd29ya2VyX3NwaV93YWl0 X2V2ZW50X21haW4pOwotCQlSZXNldExhdGNoKE15TGF0Y2gpOworCQkodm9pZCkgV2FpdElu dGVycnVwdChDaGVja0ZvckludGVycnVwdHNNYXNrIHwKKwkJCQkJCQkgSU5URVJSVVBUX0NP TkZJR19SRUxPQUQsCisJCQkJCQkJIFdMX0lOVEVSUlVQVCB8IFdMX1RJTUVPVVQgfCBXTF9F WElUX09OX1BNX0RFQVRILAorCQkJCQkJCSB3b3JrZXJfc3BpX25hcHRpbWUgKiAxMDAwTCwK KwkJCQkJCQkgd29ya2VyX3NwaV93YWl0X2V2ZW50X21haW4pOwogCiAJCUNIRUNLX0ZPUl9J TlRFUlJVUFRTKCk7CiAKIAkJLyoKLQkJICogSW4gY2FzZSBvZiBhIFNJR0hVUCwganVzdCBy ZWxvYWQgdGhlIGNvbmZpZ3VyYXRpb24uCisJCSAqIFJlbG9hZCBjb25maWd1cmF0aW9uIGlm IHJlcXVlc3RlZC4gIFRoaXMgaXMgbm90IGRvbmUgYnkKKwkJICogQ0hFQ0tfRk9SX0lOVEVS UlVQVFMoKSBiZWNhdXNlIHdlIG9ubHkgd2FudCBpdCB0byBoYXBwZW4gaGVyZSBpbgorCQkg KiB0aGUgbWFpbiBsb29wLgogCQkgKi8KLQkJaWYgKENvbmZpZ1JlbG9hZFBlbmRpbmcpCi0J CXsKLQkJCUNvbmZpZ1JlbG9hZFBlbmRpbmcgPSBmYWxzZTsKKwkJaWYgKENvbnN1bWVJbnRl cnJ1cHQoSU5URVJSVVBUX0NPTkZJR19SRUxPQUQpKQogCQkJUHJvY2Vzc0NvbmZpZ0ZpbGUo UEdDX1NJR0hVUCk7Ci0JCX0KIAogCQkvKgogCQkgKiBTdGFydCBhIHRyYW5zYWN0aW9uIG9u IHdoaWNoIHdlIGNhbiBydW4gcXVlcmllcy4gIE5vdGUgdGhhdCBlYWNoCkBAIC0zNjYsNyAr MzYyLDYgQEAgX1BHX2luaXQodm9pZCkKIAl3b3JrZXIuYmd3X3Jlc3RhcnRfdGltZSA9IEJH V19ORVZFUl9SRVNUQVJUOwogCXNwcmludGYod29ya2VyLmJnd19saWJyYXJ5X25hbWUsICJ3 b3JrZXJfc3BpIik7CiAJc3ByaW50Zih3b3JrZXIuYmd3X2Z1bmN0aW9uX25hbWUsICJ3b3Jr ZXJfc3BpX21haW4iKTsKLQl3b3JrZXIuYmd3X25vdGlmeV9waWQgPSAwOwogCiAJLyoKIAkg KiBOb3cgZmlsbCBpbiB3b3JrZXItc3BlY2lmaWMgZGF0YSwgYW5kIGRvIHRoZSBhY3R1YWwg cmVnaXN0cmF0aW9ucy4KQEAgLTQyMCw4ICs0MTUsNiBAQCB3b3JrZXJfc3BpX2xhdW5jaChQ R19GVU5DVElPTl9BUkdTKQogCXNucHJpbnRmKHdvcmtlci5iZ3dfbmFtZSwgQkdXX01BWExF TiwgIndvcmtlcl9zcGkgZHluYW1pYyB3b3JrZXIgJWQiLCBpKTsKIAlzbnByaW50Zih3b3Jr ZXIuYmd3X3R5cGUsIEJHV19NQVhMRU4sICJ3b3JrZXJfc3BpIGR5bmFtaWMiKTsKIAl3b3Jr ZXIuYmd3X21haW5fYXJnID0gSW50MzJHZXREYXR1bShpKTsKLQkvKiBzZXQgYmd3X25vdGlm eV9waWQgc28gdGhhdCB3ZSBjYW4gdXNlIFdhaXRGb3JCYWNrZ3JvdW5kV29ya2VyU3RhcnR1 cCAqLwotCXdvcmtlci5iZ3dfbm90aWZ5X3BpZCA9IE15UHJvY1BpZDsKIAogCS8qIGV4dHJh Y3QgZmxhZ3MsIGlmIGFueSAqLwogCW5kaW0gPSBBUlJfTkRJTShhcnIpOwpkaWZmIC0tZ2l0 IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdAppbmRleCA2OTkwZjFiZDZmNy4uYjQzYzEwMWY5MTYgMTAwNjQ0 Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29s cy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0xMzI0LDYgKzEzMjQsOCBAQCBJbnRlZ2Vy CiBJbnRlZ2VyU2V0CiBJbnRlcm5hbERlZmF1bHRBQ0wKIEludGVybmFsR3JhbnQKK0ludGVy cnVwdE1hc2sKK0ludGVycnVwdFR5cGUKIEludGVydmFsCiBJbnRlcnZhbEFnZ1N0YXRlCiBJ bnRvQ2xhdXNlCkBAIC0xNTYxLDcgKzE1NjMsNiBAQCBMWjRTdGF0ZQogTGFiZWxQcm92aWRl cgogTGFnVHJhY2tlcgogTGFyZ2VPYmplY3REZXNjCi1MYXRjaAogTGF1bmNoZXJMYXN0U3Rh cnRUaW1lc0VudHJ5CiBMZXJwRnVuYwogTGV4RGVzY3IKQEAgLTIwMjUsNiArMjAyNiw3IEBA IFBMeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemVfdAogUEx5X2Vsb2dfaW1wbF90CiBQTUNo aWxkCiBQTUNoaWxkUG9vbAorUE1DaGlsZFNsb3REYXRhCiBQTUlOSURVTVBfQ0FMTEJBQ0tf SU5GT1JNQVRJT04KIFBNSU5JRFVNUF9FWENFUFRJT05fSU5GT1JNQVRJT04KIFBNSU5JRFVN UF9VU0VSX1NUUkVBTV9JTkZPUk1BVElPTgotLSAKMi40Ny4zCgo= --------------bKtygjyKfjKbO6KbJdMaMR2R--