Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jqcED-0001Ly-Ml for pgsql-hackers@arkaria.postgresql.org; Wed, 01 Jul 2020 12:52:42 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1jqcEC-000491-Ha for pgsql-hackers@arkaria.postgresql.org; Wed, 01 Jul 2020 12:52:40 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jqcEC-00048u-0R for pgsql-hackers@lists.postgresql.org; Wed, 01 Jul 2020 12:52:40 +0000 Received: from smtp-fw-6002.amazon.com ([52.95.49.90]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jqcE8-0002GB-K0 for pgsql-hackers@postgresql.org; Wed, 01 Jul 2020 12:52:38 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.com; i=@amazon.com; q=dns/txt; s=amazon201209; t=1593607957; x=1625143957; h=to:cc:references:from:message-id:date:mime-version: in-reply-to:subject; bh=ISX+pC8Qm32CiaY/StmZggBBXqJv+0zNHQ/+PEiW8jM=; b=tjf4UZqLlSUnnTnhxVv369HFgjhwN/AQgyn99YDT/l1a1+lpenrN2x5q uw24YpkDoiRT0Ue2sy/pBpnk7UWajCj7ssz8XIh1yiUz/x6TZCidPjcQH 7pl+SQrd3PQ+aQG+Om+sfpZijjFHK62Gxsqu0AXLDLtkMT5gbdQL7VnFq 8=; IronPort-SDR: okygLIN6a6HTMeK10b0eJgFBcOIU0icr2WRH9hYBYlaUDqFScq9/3nUPyDDxA6isbx4FsFtUU8 MOAduDretwbA== X-Amazon-filename: v1-0002-Add-Standby-Recovery-Conflicts-Info.patch X-IronPort-AV: E=Sophos;i="5.75,300,1589241600"; d="scan'208";a="39446568" Subject: Re: Add Information during standby recovery conflicts Received: from iad12-co-svc-p1-lb1-vlan3.amazon.com (HELO email-inbound-relay-1a-67b371d8.us-east-1.amazon.com) ([10.43.8.6]) by smtp-border-fw-out-6002.iad6.amazon.com with ESMTP; 01 Jul 2020 12:52:35 +0000 Received: from EX13MTAUEA002.ant.amazon.com (iad55-ws-svc-p15-lb9-vlan3.iad.amazon.com [10.40.159.166]) by email-inbound-relay-1a-67b371d8.us-east-1.amazon.com (Postfix) with ESMTPS id 6BF09A23A7; Wed, 1 Jul 2020 12:52:34 +0000 (UTC) Received: from EX13D03EUC003.ant.amazon.com (10.43.164.192) by EX13MTAUEA002.ant.amazon.com (10.43.61.77) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 1 Jul 2020 12:52:33 +0000 Received: from 38f9d36c4abb.ant.amazon.com (10.43.162.85) by EX13D03EUC003.ant.amazon.com (10.43.164.192) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 1 Jul 2020 12:52:30 +0000 To: Masahiko Sawada CC: PostgreSQL-development References: <9a60178c-a853-1440-2cdc-c3af916cff59@amazon.com> From: "Drouvot, Bertrand" Message-ID: Date: Wed, 1 Jul 2020 14:52:26 +0200 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:68.0) Gecko/20100101 Thunderbird/68.9.0 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/mixed; boundary="------------70589D56CA4915589B4A3F10" Content-Language: en-US X-Originating-IP: [10.43.162.85] X-ClientProxiedBy: EX13D22UWC002.ant.amazon.com (10.43.162.29) To EX13D03EUC003.ant.amazon.com (10.43.164.192) List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --------------70589D56CA4915589B4A3F10 Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 8bit Hey, On 6/29/20 10:55 AM, Masahiko Sawada wrote: > CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you can confirm the sender and know the content is safe. > > > > On Thu, 18 Jun 2020 at 16:28, Drouvot, Bertrand wrote: >> Hi hackers, >> >> I've attached a patch to add information during standby recovery conflicts. >> The motive behind is to be able to get some information: >> >> On the apply side >> On the blocker(s) side >> >> Motivation: >> >> When a standby recovery conflict occurs it could be useful to get more information to be able to dive deep on the root cause and find a way to avoid/mitigate new occurrences. > I think this is a good feature. Like log_lock_waits, it will help the > users to investigate recovery conflict issues. exactly, thanks for looking at it. > >> Adding this information would make the investigations easier, it could help answering questions like: >> >> On which LSN was the WAL apply blocked? >> What was the purpose of the bocked WAL record? >> On which relation (if any) was the blocked WAL record related to? >> What was the blocker(s) doing? >> When did the blocker(s) started their queries (if any)? >> What was the blocker(s) waiting for? on which wait event? >> >> Technical context and proposal: >> >> There is 2 points in this patch: >> >> Add the information about the blocked WAL record. This is done in standby.c (ResolveRecoveryConflictWithVirtualXIDs, ResolveRecoveryConflictWithDatabase, StandbyTimeoutHandler) > I think we already have the information about the WAL record being > applied in errcontext. right, but it won’t be displayed in case log_error_verbosity is set to terse. Or did you had in mind to try to avoid using the new “current_replayed_xlog” in xlog.c? > > I wonder if we can show the recovery conflict information in the main > LOG message, the blocker information in errdetail, and use errcontext > with regard to WAL record information. For example: > > LOG: process 500 waiting for recovery conflict on snapshot > DETAIL: conflicting transition id: 100, 200, 300 > CONTEXT: WAL redo at 0/3001970 for Heap2/CLEAN: remxid 506 Not sure at all if it would be possible to put all the information at the same time. For example in case of shared buffer pin conflict, the blocker is currently known “only” during the RecoveryConflictInterrupt call (so still not known yet when we can “already” report the blocked LSN information). It might also happen that the blocker(s) will never get interrupted (was not blocking anymore before max_standby_streaming_delay has been reached): then it would not be possible to display all the information here (aka when it is interrupted) while we still want to be warned that the WAL replay has been blocked. > >> Outcome Example: >> >> 2020-06-15 06:48:23.774 UTC [6971] LOG: wal record apply is blocked by 2 connection(s), reason: User query might have needed to see row versions that must be removed. >> 2020-06-15 06:48:23.774 UTC [6971] LOG: blocked wal record rmgr: Heap2, lsn: 0/038E2678, received at: 2020-06-15 06:48:23.774098+00, desc: CLEAN, relation: rel 1663/13586/16652 fork main blk 0 >> 2020-06-15 06:48:54.773 UTC [7088] LOG: about to interrupt pid: 7088, backend_type: client backend, state: active, wait_event_type: Timeout, wait_event: PgSleep, query_start: 2020-06-15 06:48:14.87672+00 > I'm concerned that the above information on the process who is about > to be interrupted is very detailed but I'm not sure it will be helpful > for the users. If the blocker is waiting on something lock, the > information should be logged by log_lock_waits. The blocker could also be in “idle in transaction”, say for example, on the standby (with hot_standby_feedback set to off): standby> begin; standby> SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; standby> select * from bdt; on the master: master> update bdt set generate_series = 15; master> vacuum verbose bdt; would produce: 2020-07-01 09:18:55.256 UTC [32751] LOG:  about to interrupt pid: 32751, backend_type: client backend, state: idle in transaction, wait_event_type: Client, wait_event: ClientRead, query_start: 2020-07-01 09:18:17.390572+00 2020-07-01 09:18:55.256 UTC [32751] DETAIL:  statement: select * from bdt; I think those information are useful to have (might get rid of wait_event_type though: done in the new attached patch). > Also the canceled > backend will emit the ERROR log with the message "canceling statement > due to conflict with recovery”, and its pid can be logged at the log > prefix. The user can know who has been canceled by recovery conflicts > and the query. Right, we can also get rid of the pid and the query in the new log message too (done in the new attached patch). > Probably we need to consider having a time threshold (or boolean to > turn on/off) to emit this information to the server logs. Otherwise, > we will end up writing every conflict information, making the log > dirty needlessly. good point, I do agree (done in the new attached patch). Bertrand > > Regards, > > -- > Masahiko Sawada http://www.2ndQuadrant.com/ > PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services --------------70589D56CA4915589B4A3F10 Content-Type: text/plain; charset="UTF-8"; x-mac-type=0; x-mac-creator=0; name="v1-0002-Add-Standby-Recovery-Conflicts-Info.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v1-0002-Add-Standby-Recovery-Conflicts-Info.patch" IGRvYy9zcmMvc2dtbC9jb25maWcuc2dtbCAgICAgICAgICAgICAgICAgICAgICB8IDE1ICsr KysrKwogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jICAgICAgICAgICAgIHwg IDMgKysKIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcGdzdGF0LmMgICAgICAgICAgICAgICB8 IDMxICsrKysrKysrKysrCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMg ICAgICAgICAgfCAzNiArKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9z dGFuZGJ5LmMgICAgICAgICAgICAgfCA3NiArKysrKysrKysrKysrKysrKysrKysrKysrKysK IHNyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYyAgICAgICAgICAgICAgICAgICB8IDU0ICsr KysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjLmMgICAgICAg ICAgICAgICAgICB8IDEwICsrKy0KIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNx bC5jb25mLnNhbXBsZSB8ICAxICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy94bG9nLmggICAgICAg ICAgICAgICAgICAgICB8ICAxICsKIHNyYy9pbmNsdWRlL3Bnc3RhdC5oICAgICAgICAgICAg ICAgICAgICAgICAgICB8ICAxICsKIHNyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5o ICAgICAgICAgICAgICB8ICAxICsKIHNyYy9pbmNsdWRlL3N0b3JhZ2Uvc3RhbmRieS5oICAg ICAgICAgICAgICAgICB8ICAxICsKIHNyYy9pbmNsdWRlL3Rjb3AvdGNvcHByb3QuaCAgICAg ICAgICAgICAgICAgICB8ICAxICsKIDEzIGZpbGVzIGNoYW5nZWQsIDIzMCBpbnNlcnRpb25z KCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5z Z21sIGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCmluZGV4IGFjYThmNzNhNTAuLjU1ODBl YTY5NzggMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbAorKysgYi9kb2Mv c3JjL3NnbWwvY29uZmlnLnNnbWwKQEAgLTY3NjMsNiArNjc2MywyMSBAQCBsb2dfbGluZV9w cmVmaXggPSAnJW0gWyVwXSAlcSV1QCVkLyVhICcKICAgICAgIDwvbGlzdGl0ZW0+CiAgICAg IDwvdmFybGlzdGVudHJ5PgogCisgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1sb2ctcmVj b3ZlcnktY29uZmxpY3RzIiB4cmVmbGFiZWw9ImxvZ19yZWNvdmVyeV9jb25mbGljdHMiPgor ICAgICAgPHRlcm0+PHZhcm5hbWU+bG9nX3JlY292ZXJ5X2NvbmZsaWN0czwvdmFybmFtZT4g KDx0eXBlPmJvb2xlYW48L3R5cGU+KQorICAgICAgPGluZGV4dGVybT4KKyAgICAgICA8cHJp bWFyeT48dmFybmFtZT5sb2dfcmVjb3ZlcnlfY29uZmxpY3RzPC92YXJuYW1lPiBjb25maWd1 cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAg PC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBDb250 cm9scyB3aGV0aGVyIGRldGFpbGVkIGluZm9ybWF0aW9uIGlzIHByb2R1Y2VkIHdoZW4gYSBj b25mbGljdAorICAgICAgICBvY2N1cnMgZHVyaW5nIHN0YW5kYnkgcmVjb3ZlcnkuIFRoZSBk ZWZhdWx0IGlzIDxsaXRlcmFsPm9uPC9saXRlcmFsPi4KKyAgICAgICAgT25seSBzdXBlcnVz ZXJzIGNhbiBjaGFuZ2UgdGhpcyBzZXR0aW5nLgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwv bGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICAgIDx2YXJsaXN0ZW50cnkg aWQ9Imd1Yy1sb2ctcGFyYW1ldGVyLW1heC1sZW5ndGgiIHhyZWZsYWJlbD0ibG9nX3BhcmFt ZXRlcl9tYXhfbGVuZ3RoIj4KICAgICAgIDx0ZXJtPjx2YXJuYW1lPmxvZ19wYXJhbWV0ZXJf bWF4X2xlbmd0aDwvdmFybmFtZT4gKDx0eXBlPmludGVnZXI8L3R5cGU+KQogICAgICAgPGlu ZGV4dGVybT4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cu YyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwppbmRleCA1NWNhYzE4NmRj Li5kM2Y5MjNmOTUxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94 bG9nLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCkBAIC04ODAs NiArODgwLDggQEAgc3RhdGljIGJvb2wgaG9sZGluZ0FsbExvY2tzID0gZmFsc2U7CiAjaWZk ZWYgV0FMX0RFQlVHCiBzdGF0aWMgTWVtb3J5Q29udGV4dCB3YWxEZWJ1Z0N4dCA9IE5VTEw7 CiAjZW5kaWYKKy8qIEZvciBMb2dCbG9ja2VkV2FsUmVjb3JkSW5mbyAqLworWExvZ1JlYWRl clN0YXRlICpjdXJyZW50X3JlcGxheWVkX3hsb2cgPSBOVUxMOwogCiBzdGF0aWMgdm9pZCBy ZWFkUmVjb3ZlcnlTaWduYWxGaWxlKHZvaWQpOwogc3RhdGljIHZvaWQgdmFsaWRhdGVSZWNv dmVyeVBhcmFtZXRlcnModm9pZCk7CkBAIC03MzE5LDYgKzczMjEsNyBAQCBTdGFydHVwWExP Ryh2b2lkKQogCQkJCQlUcmFuc2FjdGlvbklkSXNWYWxpZChyZWNvcmQtPnhsX3hpZCkpCiAJ CQkJCVJlY29yZEtub3duQXNzaWduZWRUcmFuc2FjdGlvbklkcyhyZWNvcmQtPnhsX3hpZCk7 CiAKKwkJCQljdXJyZW50X3JlcGxheWVkX3hsb2cgPSB4bG9ncmVhZGVyOwogCQkJCS8qIE5v dyBhcHBseSB0aGUgV0FMIHJlY29yZCBpdHNlbGYgKi8KIAkJCQlSbWdyVGFibGVbcmVjb3Jk LT54bF9ybWlkXS5ybV9yZWRvKHhsb2dyZWFkZXIpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9wb3N0bWFzdGVyL3Bnc3RhdC5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wZ3N0 YXQuYwppbmRleCAzMDkzNzhhZTU0Li41MTNjOWNkNjQzIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9wb3N0bWFzdGVyL3Bnc3RhdC5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIv cGdzdGF0LmMKQEAgLTY2MzMsNiArNjYzMywzNyBAQCBwZ3N0YXRfZGJfcmVxdWVzdGVkKE9p ZCBkYXRhYmFzZWlkKQogCXJldHVybiBmYWxzZTsKIH0KIAorLyogLS0tLS0tLS0tLQorICog cGdzdGF0X2dldF9zdGF0ZV9uYW1lKCkgLQorICoKKyAqCVJldHVybiBhIHN0cmluZyByZXBy ZXNlbnRpbmcgdGhlIGN1cnJlbnQgYmFja2VuZCBzdGF0ZS4KKyAqIC0tLS0tLS0tLS0KKyAq LworY29uc3QgY2hhciAqCitwZ3N0YXRfZ2V0X3N0YXRlX25hbWUoQmFja2VuZFN0YXRlIGJh Y2tlbmRfc3RhdGUpCit7CisJc3dpdGNoIChiYWNrZW5kX3N0YXRlKQorCXsKKwkJY2FzZSBT VEFURV9JRExFOgorCQkJcmV0dXJuICJpZGxlIjsKKwkJY2FzZSBTVEFURV9SVU5OSU5HOgor CQkJcmV0dXJuICJhY3RpdmUiOworCQljYXNlIFNUQVRFX0lETEVJTlRSQU5TQUNUSU9OOgor CQkJcmV0dXJuICJpZGxlIGluIHRyYW5zYWN0aW9uIjsKKwkJY2FzZSBTVEFURV9GQVNUUEFU SDoKKwkJCXJldHVybiAiZmFzdHBhdGggZnVuY3Rpb24gY2FsbCI7CisJCWNhc2UgU1RBVEVf SURMRUlOVFJBTlNBQ1RJT05fQUJPUlRFRDoKKwkJCXJldHVybiAiaWRsZSBpbiB0cmFuc2Fj dGlvbiAoYWJvcnRlZCkiOworCQljYXNlIFNUQVRFX0RJU0FCTEVEOgorCQkJcmV0dXJuICJk aXNhYmxlZCI7CisJCWNhc2UgU1RBVEVfVU5ERUZJTkVEOgorCQkJcmV0dXJuICIiOworCQlk ZWZhdWx0OgorCQkJQXNzZXJ0KDApOworCX0KKwlyZXR1cm4gIiI7Cit9CisKIC8qCiAgKiBD b252ZXJ0IGEgcG90ZW50aWFsbHkgdW5zYWZlbHkgdHJ1bmNhdGVkIGFjdGl2aXR5IHN0cmlu ZyAoc2VlCiAgKiBQZ0JhY2tlbmRTdGF0dXMuc3RfYWN0aXZpdHlfcmF3J3MgZG9jdW1lbnRh dGlvbikgaW50byBhIGNvcnJlY3RseSB0cnVuY2F0ZWQKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBj L3Byb2NzaWduYWwuYwppbmRleCBjODA5MTk2ZDA2Li4yZDU4ODZmZjgwIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMKKysrIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jCkBAIC01NzYsMyArNTc2LDM5IEBAIHByb2Nz aWduYWxfc2lndXNyMV9oYW5kbGVyKFNJR05BTF9BUkdTKQogCiAJZXJybm8gPSBzYXZlX2Vy cm5vOwogfQorCitleHRlcm4gY29uc3QgY2hhciAqZ2V0X3Byb2NzaWduYWxfcmVhc29uX2Rl c2MoUHJvY1NpZ25hbFJlYXNvbiByZWFzb24pCisJeworCQljb25zdCBjaGFyICpyZWFzb25E ZXNjID0gInVua25vd24gcmVhc29uIjsKKworCQlzd2l0Y2ggKHJlYXNvbikKKwkJeworCQkJ Y2FzZSBQUk9DU0lHX1JFQ09WRVJZX0NPTkZMSUNUX0JVRkZFUlBJTjoKKwkJCQlyZWFzb25E ZXNjID0gIlVzZXIgd2FzIGhvbGRpbmcgc2hhcmVkIGJ1ZmZlciBwaW4gZm9yIHRvbyBsb25n LiI7CisJCQkJYnJlYWs7CisJCQljYXNlIFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfTE9D SzoKKwkJCQlyZWFzb25EZXNjID0gIlVzZXIgd2FzIGhvbGRpbmcgYSByZWxhdGlvbiBsb2Nr IGZvciB0b28gbG9uZy4iOworCQkJCWJyZWFrOworCQkJY2FzZSBQUk9DU0lHX1JFQ09WRVJZ X0NPTkZMSUNUX1RBQkxFU1BBQ0U6CisJCQkJcmVhc29uRGVzYyA9ICJVc2VyIHdhcyBvciBt aWdodCBoYXZlIGJlZW4gdXNpbmcgdGFibGVzcGFjZSB0aGF0IG11c3QgYmUgZHJvcHBlZC4i OworCQkJCWJyZWFrOworCQkJY2FzZSBQUk9DU0lHX1JFQ09WRVJZX0NPTkZMSUNUX1NOQVBT SE9UOgorCQkJCXJlYXNvbkRlc2MgPSAiVXNlciBxdWVyeSBtaWdodCBoYXZlIG5lZWRlZCB0 byBzZWUgcm93IHZlcnNpb25zIHRoYXQgbXVzdCBiZSByZW1vdmVkLiI7CisJCQkJYnJlYWs7 CisJCQljYXNlIFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfU1RBUlRVUF9ERUFETE9DSzoK KwkJCQlyZWFzb25EZXNjID0gIlVzZXIgdHJhbnNhY3Rpb24gY2F1c2VkIGJ1ZmZlciBkZWFk bG9jayB3aXRoIHJlY292ZXJ5LiI7CisJCQkJYnJlYWs7CisJCQljYXNlIFBST0NTSUdfUkVD T1ZFUllfQ09ORkxJQ1RfREFUQUJBU0U6CisJCQkJcmVhc29uRGVzYyA9ICJVc2VyIHdhcyBj b25uZWN0ZWQgdG8gYSBkYXRhYmFzZSB0aGF0IG11c3QgYmUgZHJvcHBlZC4iOworCQkJCWJy ZWFrOworCQkJY2FzZSBQUk9DU0lHX0NBVENIVVBfSU5URVJSVVBUOgorCQkJY2FzZSBQUk9D U0lHX05PVElGWV9JTlRFUlJVUFQ6CisJCQljYXNlIFBST0NTSUdfUEFSQUxMRUxfTUVTU0FH RToKKwkJCWNhc2UgUFJPQ1NJR19XQUxTTkRfSU5JVF9TVE9QUElORzoKKwkJCWNhc2UgTlVN X1BST0NTSUdOQUxTOgorCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJ fQorCXJldHVybiByZWFzb25EZXNjOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3Rv cmFnZS9pcGMvc3RhbmRieS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc3RhbmRieS5j CmluZGV4IDllMGQ1ZWMyNTcuLjJlYzJiMzdmY2YgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3N0b3JhZ2UvaXBjL3N0YW5kYnkuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9z dGFuZGJ5LmMKQEAgLTE2LDYgKzE2LDcgQEAKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICov CiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKKyNpbmNsdWRlICJhY2Nlc3Mvcm1nci5oIgogI2lu Y2x1ZGUgImFjY2Vzcy90cmFuc2FtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3R3b3BoYXNlLmgi CiAjaW5jbHVkZSAiYWNjZXNzL3hhY3QuaCIKQEAgLTM0LDYgKzM1LDcgQEAKICNpbmNsdWRl ICJ1dGlscy9wc19zdGF0dXMuaCIKICNpbmNsdWRlICJ1dGlscy90aW1lb3V0LmgiCiAjaW5j bHVkZSAidXRpbHMvdGltZXN0YW1wLmgiCisjaW5jbHVkZSAiYWNjZXNzL3hsb2dfaW50ZXJu YWwuaCIKIAogLyogVXNlci1zZXR0YWJsZSBHVUMgcGFyYW1ldGVycyAqLwogaW50CQkJdmFj dXVtX2RlZmVyX2NsZWFudXBfYWdlOwpAQCAtMjE1LDYgKzIxNyw1NyBAQCBXYWl0RXhjZWVk c01heFN0YW5kYnlEZWxheSh1aW50MzIgd2FpdF9ldmVudF9pbmZvKQogCXJldHVybiBmYWxz ZTsKIH0KIAorLyoKKyAqIERpc3BsYXkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHdhbCByZWNv cmQKKyAqIGFwcGx5IGJlaW5nIGJsb2NrZWQKKyAqLworc3RhdGljIHZvaWQKK0xvZ0Jsb2Nr ZWRXYWxSZWNvcmRJbmZvKGludCBudW1fd2FpdGxpc3RfZW50cmllcywgUHJvY1NpZ25hbFJl YXNvbiByZWFzb24pCit7CisJUmVsRmlsZU5vZGUgcm5vZGU7CisJRm9ya051bWJlciBmb3Jr bnVtOworCUJsb2NrTnVtYmVyIGJsa251bTsKKwl1aW50NjQgd2FsX3JlY29yZF9sc247CisJ VGltZXN0YW1wVHogcnRpbWU7CisJYm9vbCBmcm9tU3RyZWFtOworCWNoYXIgKnJlY2VpcHRf dGltZV9zdHI7CisJUm1ncklkIHJtZ3JJZCA9IC0xOworCXVpbnQ4IGluZm8gPSAwOworCWNv bnN0IGNoYXIgKnJtX25hbWU7CisJY29uc3QgY2hhciAqcm1faW5mbzsKKwljaGFyICp3YWxf cmVjb3JkX2luZm9fc3RyOworCisJaWYgKG51bV93YWl0bGlzdF9lbnRyaWVzID4gMCkKKwkJ ZXJlcG9ydChMT0csIChlcnJtc2coIndhbCByZWNvcmQgYXBwbHkgaXMgYmxvY2tlZCBieSAl ZCBjb25uZWN0aW9uKHMpLCByZWFzb246ICVzIiwKKwkJCQkJbnVtX3dhaXRsaXN0X2VudHJp ZXMsIGdldF9wcm9jc2lnbmFsX3JlYXNvbl9kZXNjKHJlYXNvbikpKSk7CisJZWxzZQorCQll cmVwb3J0KExPRywgKGVycm1zZygid2FsIHJlY29yZCBhcHBseSBpcyBibG9ja2VkLCByZWFz b246ICVzIiwKKwkJCQkJZ2V0X3Byb2NzaWduYWxfcmVhc29uX2Rlc2MocmVhc29uKSkpKTsK KworCXdhbF9yZWNvcmRfbHNuID0gY3VycmVudF9yZXBsYXllZF94bG9nLT5SZWFkUmVjUHRy OworCXJtZ3JJZCA9IFhMb2dSZWNHZXRSbWlkKGN1cnJlbnRfcmVwbGF5ZWRfeGxvZyk7CisJ aW5mbyA9IFhMb2dSZWNHZXRJbmZvKGN1cnJlbnRfcmVwbGF5ZWRfeGxvZykgJiB+WExSX0lO Rk9fTUFTSzsKKworCXJtX25hbWUgPSBSbWdyVGFibGVbcm1ncklkXS5ybV9uYW1lOworCXJt X2luZm8gPSBSbWdyVGFibGVbcm1ncklkXS5ybV9pZGVudGlmeShpbmZvKTsKKworCUdldFhM b2dSZWNlaXB0VGltZSgmcnRpbWUsICZmcm9tU3RyZWFtKTsKKwlyZWNlaXB0X3RpbWVfc3Ry ID0gcHN0cmR1cCh0aW1lc3RhbXB0el90b19zdHIocnRpbWUpKTsKKwl3YWxfcmVjb3JkX2lu Zm9fc3RyID0gcHNwcmludGYoImJsb2NrZWQgd2FsIHJlY29yZCBybWdyOiAlcywgbHNuOiAl WC8lMDhYLCByZWNlaXZlZCBhdDogJXMsIGRlc2M6ICVzIiwgcm1fbmFtZSwgKHVpbnQzMikg KHdhbF9yZWNvcmRfbHNuID4+IDMyKSwgKHVpbnQzMikgd2FsX3JlY29yZF9sc24sIHJlY2Vp cHRfdGltZV9zdHIsIHJtX2luZm8pOworCisJaWYgKFhMb2dSZWNHZXRCbG9ja1RhZyhjdXJy ZW50X3JlcGxheWVkX3hsb2csIDAsICZybm9kZSwgJmZvcmtudW0sICZibGtudW0pKQorCQll cmVwb3J0KExPRywgKGVycm1zZygiJXMsIHJlbGF0aW9uOiByZWwgJXUvJXUvJXUgZm9yayAl cyBibGsgJXUiLAorCQkJCQl3YWxfcmVjb3JkX2luZm9fc3RyLAorCQkJCQlybm9kZS5zcGNO b2RlLCBybm9kZS5kYk5vZGUsIHJub2RlLnJlbE5vZGUsCisJCQkJCWZvcmtOYW1lc1tmb3Jr bnVtXSwKKwkJCQkJYmxrbnVtKSkpOworCWVsc2UKKwkJZXJlcG9ydChMT0csIChlcnJtc2co IiVzIiwgd2FsX3JlY29yZF9pbmZvX3N0cikpKTsKKworCXBmcmVlKHdhbF9yZWNvcmRfaW5m b19zdHIpOworCXBmcmVlKHJlY2VpcHRfdGltZV9zdHIpOworfQorCiAvKgogICogVGhpcyBp cyB0aGUgbWFpbiBleGVjdXRpb25lciBmb3IgYW55IHF1ZXJ5IGJhY2tlbmQgdGhhdCBjb25m bGljdHMgd2l0aAogICogcmVjb3ZlcnkgcHJvY2Vzc2luZy4gSnVkZ2VtZW50IGhhcyBhbHJl YWR5IGJlZW4gcGFzc2VkIG9uIGl0IHdpdGhpbgpAQCAtMjMyLDYgKzI4NSw4IEBAIFJlc29s dmVSZWNvdmVyeUNvbmZsaWN0V2l0aFZpcnR1YWxYSURzKFZpcnR1YWxUcmFuc2FjdGlvbklk ICp3YWl0bGlzdCwKIHsKIAlUaW1lc3RhbXBUeiB3YWl0U3RhcnQgPSAwOwogCWNoYXIJICAg Km5ld19zdGF0dXM7CisJVmlydHVhbFRyYW5zYWN0aW9uSWQgKnRtcFdhaXRsaXN0OworCWlu dCBudW1fd2FpdGxpc3RfZW50cmllczsKIAogCS8qIEZhc3QgZXhpdCwgdG8gYXZvaWQgYSBr ZXJuZWwgY2FsbCBpZiB0aGVyZSdzIG5vIHdvcmsgdG8gYmUgZG9uZS4gKi8KIAlpZiAoIVZp cnR1YWxUcmFuc2FjdGlvbklkSXNWYWxpZCgqd2FpdGxpc3QpKQpAQCAtMjQxLDYgKzI5Niwx OCBAQCBSZXNvbHZlUmVjb3ZlcnlDb25mbGljdFdpdGhWaXJ0dWFsWElEcyhWaXJ0dWFsVHJh bnNhY3Rpb25JZCAqd2FpdGxpc3QsCiAJCXdhaXRTdGFydCA9IEdldEN1cnJlbnRUaW1lc3Rh bXAoKTsKIAluZXdfc3RhdHVzID0gTlVMTDsJCQkvKiB3ZSBoYXZlbid0IGNoYW5nZWQgdGhl IHBzIGRpc3BsYXkgKi8KIAorCXRtcFdhaXRsaXN0ID0gd2FpdGxpc3Q7CisJd2hpbGUgKFZp cnR1YWxUcmFuc2FjdGlvbklkSXNWYWxpZCgqdG1wV2FpdGxpc3QpKQorCXsKKwkJdG1wV2Fp dGxpc3QrKzsKKwl9CisKKwludW1fd2FpdGxpc3RfZW50cmllcyA9ICh0bXBXYWl0bGlzdCAt IHdhaXRsaXN0KTsKKworCS8qIGRpc3BsYXkgd2FsIHJlY29yZCBpbmZvcm1hdGlvbiAqLwor CWlmIChsb2dfcmVjb3ZlcnlfY29uZmxpY3RzKQorCQlMb2dCbG9ja2VkV2FsUmVjb3JkSW5m byhudW1fd2FpdGxpc3RfZW50cmllcywgcmVhc29uKTsKKwogCXdoaWxlIChWaXJ0dWFsVHJh bnNhY3Rpb25JZElzVmFsaWQoKndhaXRsaXN0KSkKIAl7CiAJCS8qIHJlc2V0IHN0YW5kYnlX YWl0X3VzIGZvciBlYWNoIHhhY3Qgd2Ugd2FpdCBmb3IgKi8KQEAgLTM3MCw2ICs0MzcsMTEg QEAgUmVzb2x2ZVJlY292ZXJ5Q29uZmxpY3RXaXRoRGF0YWJhc2UoT2lkIGRiaWQpCiAJICog YmxvY2sgZHVyaW5nIEluaXRQb3N0Z3JlcygpIGFuZCB0aGVuIGRpc2Nvbm5lY3Qgd2hlbiB0 aGV5IHNlZSB0aGUKIAkgKiBkYXRhYmFzZSBoYXMgYmVlbiByZW1vdmVkLgogCSAqLworCisJ LyogZGlzcGxheSB3YWwgcmVjb3JkIGluZm9ybWF0aW9uICovCisJaWYgKGxvZ19yZWNvdmVy eV9jb25mbGljdHMpCisJCUxvZ0Jsb2NrZWRXYWxSZWNvcmRJbmZvKENvdW50REJCYWNrZW5k cyhkYmlkKSwgUFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVF9EQVRBQkFTRSk7CisKIAl3aGls ZSAoQ291bnREQkJhY2tlbmRzKGRiaWQpID4gMCkKIAl7CiAJCUNhbmNlbERCQmFja2VuZHMo ZGJpZCwgUFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVF9EQVRBQkFTRSwgdHJ1ZSk7CkBAIC02 MDksNiArNjgxLDEwIEBAIFN0YW5kYnlUaW1lb3V0SGFuZGxlcih2b2lkKQogCS8qIGZvcmdl dCBhbnkgcGVuZGluZyBTVEFOREJZX0RFQURMT0NLX1RJTUVPVVQgcmVxdWVzdCAqLwogCWRp c2FibGVfdGltZW91dChTVEFOREJZX0RFQURMT0NLX1RJTUVPVVQsIGZhbHNlKTsKIAorCS8q IGRpc3BsYXkgd2FsIHJlY29yZCBpbmZvcm1hdGlvbiAqLworCWlmIChsb2dfcmVjb3Zlcnlf Y29uZmxpY3RzKQorCQlMb2dCbG9ja2VkV2FsUmVjb3JkSW5mbygtMSwgUFJPQ1NJR19SRUNP VkVSWV9DT05GTElDVF9CVUZGRVJQSU4pOworCiAJU2VuZFJlY292ZXJ5Q29uZmxpY3RXaXRo QnVmZmVyUGluKFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfQlVGRkVSUElOKTsKIH0KIApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jIGIvc3JjL2JhY2tlbmQv dGNvcC9wb3N0Z3Jlcy5jCmluZGV4IGM5NDI0ZjE2N2MuLjM3ZjFhYmY4MDIgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYworKysgYi9zcmMvYmFja2VuZC90Y29w L3Bvc3RncmVzLmMKQEAgLTk4LDYgKzk4LDkgQEAgaW50CQkJbG9nX3N0YXRlbWVudCA9IExP R1NUTVRfTk9ORTsKIC8qIEdVQyB2YXJpYWJsZSBmb3IgbWF4aW11bSBzdGFjayBkZXB0aCAo bWVhc3VyZWQgaW4ga2lsb2J5dGVzKSAqLwogaW50CQkJbWF4X3N0YWNrX2RlcHRoID0gMTAw OwogCisvKiBHVUMgdmFyaWFibGUgZm9yIHN0YW5kYnkgcmVjb3ZlcnkgY29uZmxpY3RzIGlu Zm9ybWF0aW9uICovCitib29sCQkJbG9nX3JlY292ZXJ5X2NvbmZsaWN0cyA9IHRydWU7CisK IC8qIHdhaXQgTiBzZWNvbmRzIHRvIGFsbG93IGF0dGFjaCBmcm9tIGEgZGVidWdnZXIgKi8K IGludAkJCVBvc3RBdXRoRGVsYXkgPSAwOwogCkBAIC0xMjYsNiArMTI5LDggQEAgY2hhcgkg ICAqc3RhY2tfYmFzZV9wdHIgPSBOVUxMOwogY2hhcgkgICAqcmVnaXN0ZXJfc3RhY2tfYmFz ZV9wdHIgPSBOVUxMOwogI2VuZGlmCiAKKyNkZWZpbmUgVUlOVDMyX0FDQ0VTU19PTkNFKHZh cikgICAgICAgICAgICAgICgodWludDMyKSgqKCh2b2xhdGlsZSB1aW50MzIgKikmKHZhcikp KSkKKwogLyoKICAqIEZsYWcgdG8ga2VlcCB0cmFjayBvZiB3aGV0aGVyIHdlIGhhdmUgc3Rh cnRlZCBhIHRyYW5zYWN0aW9uLgogICogRm9yIGV4dGVuZGVkIHF1ZXJ5IHByb3RvY29sIHRo aXMgaGFzIHRvIGJlIHJlbWVtYmVyZWQgYWNyb3NzIG1lc3NhZ2VzLgpAQCAtMTkxLDYgKzE5 Niw3IEBAIHN0YXRpYyB2b2lkIGRyb3BfdW5uYW1lZF9zdG10KHZvaWQpOwogc3RhdGljIHZv aWQgbG9nX2Rpc2Nvbm5lY3Rpb25zKGludCBjb2RlLCBEYXR1bSBhcmcpOwogc3RhdGljIHZv aWQgZW5hYmxlX3N0YXRlbWVudF90aW1lb3V0KHZvaWQpOwogc3RhdGljIHZvaWQgZGlzYWJs ZV9zdGF0ZW1lbnRfdGltZW91dCh2b2lkKTsKK3N0YXRpYyB2b2lkIExvZ0Jsb2NraW5nV2Fs UmVjb3JkQXBwbHlJbmZvKHZvaWQpOwogCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTI4ODYsNiAr Mjg5Miw1MiBAQCBGbG9hdEV4Y2VwdGlvbkhhbmRsZXIoU0lHTkFMX0FSR1MpCiAJCQkJCSAg ICJpbnZhbGlkIG9wZXJhdGlvbiwgc3VjaCBhcyBkaXZpc2lvbiBieSB6ZXJvLiIpKSk7CiB9 CiAKKy8qCisgKiBEaXNwbGF5IGluZm9ybWF0aW9uIGFib3V0IHRoZSBiYWNrZW5kCisgKiBh Ym91dCB0byBiZSBpbnRlcnJ1cHRlZCBkdWUgdG8gcmVjb3ZlcnkgY29uZmxpY3QKKyAqLwor dm9pZAorTG9nQmxvY2tpbmdXYWxSZWNvcmRBcHBseUluZm8odm9pZCkKK3sKKworCVBnQmFj a2VuZFN0YXR1cyAqYmVlbnRyeTsKKwlpbnQgICAgICAgICAgICAgICAgICAgICBudW1fYmFj a2VuZHMgPSBwZ3N0YXRfZmV0Y2hfc3RhdF9udW1iYWNrZW5kcygpOworCWludCAgICAgICAg ICAgICAgICAgICAgIGN1cnJfYmFja2VuZDsKKwl1aW50MzIgcmF3X3dhaXRfZXZlbnQ7CisJ Y29uc3QgY2hhciAqd2FpdF9ldmVudCA9IE5VTEw7CisJY29uc3QgY2hhciAqYWN0aXZpdHlf c3RhcnQ7CisJY29uc3QgY2hhciAqYmFja2VuZF9zdGF0ZV9uYW1lOworCWNvbnN0IGNoYXIg KmJhY2tlbmRfdHlwZTsKKworCUFzc2VydChNeVByb2MgIT0gTlVMTCk7CisJLyoKKwkgKiBN YWtlIHN1cmUgYW55IHN0YXRzIHNuYXBzaG90IGlzIHRocm93biBhd2F5CisJICovCisJcGdz dGF0X2NsZWFyX3NuYXBzaG90KCk7CisKKwlmb3IgKGN1cnJfYmFja2VuZCA9IDE7IGN1cnJf YmFja2VuZCA8PSBudW1fYmFja2VuZHM7IGN1cnJfYmFja2VuZCsrKQorCXsKKwkJYmVlbnRy eSA9IHBnc3RhdF9mZXRjaF9zdGF0X2JlZW50cnkoY3Vycl9iYWNrZW5kKTsKKwkJaWYgKGJl ZW50cnktPnN0X3Byb2NwaWQgIT0gTXlQcm9jLT5waWQpCisJCQljb250aW51ZTsKKworCQli YWNrZW5kX3N0YXRlX25hbWUgPSBwZ3N0YXRfZ2V0X3N0YXRlX25hbWUoYmVlbnRyeS0+c3Rf c3RhdGUpOworCQliYWNrZW5kX3R5cGUgPSBHZXRCYWNrZW5kVHlwZURlc2MoYmVlbnRyeS0+ c3RfYmFja2VuZFR5cGUpOworCQlhY3Rpdml0eV9zdGFydCA9IHRpbWVzdGFtcHR6X3RvX3N0 cihiZWVudHJ5LT5zdF9hY3Rpdml0eV9zdGFydF90aW1lc3RhbXApOworCisJCXJhd193YWl0 X2V2ZW50ID0gVUlOVDMyX0FDQ0VTU19PTkNFKE15UHJvYy0+d2FpdF9ldmVudF9pbmZvKTsK KwkJd2FpdF9ldmVudCA9IHBnc3RhdF9nZXRfd2FpdF9ldmVudChyYXdfd2FpdF9ldmVudCk7 CisKKwkJZXJlcG9ydChMT0csCisJCQkoZXJybXNnKCJhYm91dCB0byBiZSBpbnRlcnJ1cHRl ZDogYmFja2VuZF90eXBlOiAlcywgc3RhdGU6ICVzLCB3YWl0X2V2ZW50OiAlcywgcXVlcnlf c3RhcnQ6ICVzIiwKKwkJCQliYWNrZW5kX3R5cGUsIGJhY2tlbmRfc3RhdGVfbmFtZSwgd2Fp dF9ldmVudCA/IHdhaXRfZXZlbnQgOiAibm9uZSIsIGFjdGl2aXR5X3N0YXJ0KSkpOworCX0K KwkvKgorCSAqIE1ha2Ugc3VyZSBhbnkgc3RhdHMgc25hcHNob3QgaXMgdGhyb3duIGF3YXkK KwkgKi8KKwlwZ3N0YXRfY2xlYXJfc25hcHNob3QoKTsKK30KKwogLyoKICAqIFJlY292ZXJ5 Q29uZmxpY3RJbnRlcnJ1cHQ6IG91dC1vZi1saW5lIHBvcnRpb24gb2YgcmVjb3ZlcnkgY29u ZmxpY3QKICAqIGhhbmRsaW5nIGZvbGxvd2luZyByZWNlaXB0IG9mIFNJR1VTUjEuIERlc2ln bmVkIHRvIGJlIHNpbWlsYXIgdG8gZGllKCkKQEAgLTI5ODYsNiArMzAzOCw4IEBAIFJlY292 ZXJ5Q29uZmxpY3RJbnRlcnJ1cHQoUHJvY1NpZ25hbFJlYXNvbiByZWFzb24pCiAJCQkJCSAo aW50KSByZWFzb24pOwogCQl9CiAKKwkJaWYgKGxvZ19yZWNvdmVyeV9jb25mbGljdHMpCisJ CQlMb2dCbG9ja2luZ1dhbFJlY29yZEFwcGx5SW5mbygpOwogCQlBc3NlcnQoUmVjb3ZlcnlD b25mbGljdFBlbmRpbmcgJiYgKFF1ZXJ5Q2FuY2VsUGVuZGluZyB8fCBQcm9jRGllUGVuZGlu ZykpOwogCiAJCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Yy5j IGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWMuYwppbmRleCAyZjNlMGE3MGUwLi43YWE1 NWRiNWFmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Yy5jCisrKyBi L3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjLmMKQEAgLTE1OTQsNyArMTU5NCwxNSBAQCBz dGF0aWMgc3RydWN0IGNvbmZpZ19ib29sIENvbmZpZ3VyZU5hbWVzQm9vbFtdID0KIAkJZmFs c2UsCiAJCU5VTEwsIE5VTEwsIE5VTEwKIAl9LAotCisJeworCQl7ImxvZ19yZWNvdmVyeV9j b25mbGljdHMiLCBQR0NfU1VTRVQsIExPR0dJTkdfV0hBVCwKKwkJCWdldHRleHRfbm9vcCgi TG9ncyBzdGFuZGJ5IHJlY292ZXJ5IGNvbmZsaWN0cy4iKSwKKwkJCU5VTEwKKwkJfSwKKwkJ JmxvZ19yZWNvdmVyeV9jb25mbGljdHMsCisJCXRydWUsCisJCU5VTEwsIE5VTEwsIE5VTEwK Kwl9LAogCXsKIAkJeyJsb2dfaG9zdG5hbWUiLCBQR0NfU0lHSFVQLCBMT0dHSU5HX1dIQVQs CiAJCQlnZXR0ZXh0X25vb3AoIkxvZ3MgdGhlIGhvc3QgbmFtZSBpbiB0aGUgY29ubmVjdGlv biBsb2dzLiIpLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jl c3FsLmNvbmYuc2FtcGxlIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNv bmYuc2FtcGxlCmluZGV4IGFjMDJiZDBjMDAuLjEwMDk1MDZlZmYgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQorKysgYi9zcmMv YmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKQEAgLTU0OCw2ICs1 NDgsNyBAQAogCQkJCQkjICAgJSUgPSAnJScKIAkJCQkJIyBlLmcuICc8JXUlJSVkPiAnCiAj bG9nX2xvY2tfd2FpdHMgPSBvZmYJCQkjIGxvZyBsb2NrIHdhaXRzID49IGRlYWRsb2NrX3Rp bWVvdXQKKyNsb2dfcmVjb3ZlcnlfY29uZmxpY3RzID0gb24JCSMgbG9nIHN0YW5kYnkgcmVj b3ZlcnkgY29uZmxpY3RzCiAjbG9nX3BhcmFtZXRlcl9tYXhfbGVuZ3RoID0gLTEJCSMgd2hl biBsb2dnaW5nIHN0YXRlbWVudHMsIGxpbWl0IGxvZ2dlZAogCQkJCQkjIGJpbmQtcGFyYW1l dGVyIHZhbHVlcyB0byBOIGJ5dGVzOwogCQkJCQkjIC0xIG1lYW5zIHByaW50IGluIGZ1bGws IDAgZGlzYWJsZXMKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9nLmggYi9z cmMvaW5jbHVkZS9hY2Nlc3MveGxvZy5oCmluZGV4IGU5MTdkZmU5MmQuLmVhZmQ0MjAxZGIg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9nLmgKKysrIGIvc3JjL2luY2x1 ZGUvYWNjZXNzL3hsb2cuaApAQCAtMTAwLDYgKzEwMCw3IEBAIHR5cGVkZWYgZW51bQogZXh0 ZXJuIFhMb2dSZWNQdHIgUHJvY0xhc3RSZWNQdHI7CiBleHRlcm4gWExvZ1JlY1B0ciBYYWN0 TGFzdFJlY0VuZDsKIGV4dGVybiBQR0RMTElNUE9SVCBYTG9nUmVjUHRyIFhhY3RMYXN0Q29t bWl0RW5kOworZXh0ZXJuIFhMb2dSZWFkZXJTdGF0ZSAqY3VycmVudF9yZXBsYXllZF94bG9n OwogCiBleHRlcm4gYm9vbCByZWFjaGVkQ29uc2lzdGVuY3k7CiAKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL3Bnc3RhdC5oIGIvc3JjL2luY2x1ZGUvcGdzdGF0LmgKaW5kZXggYzU1ZGMx NDgxYy4uMmZjYTc2OWJjOSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcGdzdGF0LmgKKysr IGIvc3JjL2luY2x1ZGUvcGdzdGF0LmgKQEAgLTEzMzQsNiArMTMzNCw3IEBAIGV4dGVybiBQ Z1N0YXRfVGFibGVTdGF0dXMgKmZpbmRfdGFic3RhdF9lbnRyeShPaWQgcmVsX2lkKTsKIGV4 dGVybiBQZ1N0YXRfQmFja2VuZEZ1bmN0aW9uRW50cnkgKmZpbmRfZnVuY3N0YXRfZW50cnko T2lkIGZ1bmNfaWQpOwogCiBleHRlcm4gdm9pZCBwZ3N0YXRfaW5pdHN0YXRzKFJlbGF0aW9u IHJlbCk7CitleHRlcm4gY29uc3QgY2hhciAqcGdzdGF0X2dldF9zdGF0ZV9uYW1lKEJhY2tl bmRTdGF0ZSBiYWNrZW5kX3N0YXRlKTsKIAogZXh0ZXJuIGNoYXIgKnBnc3RhdF9jbGlwX2Fj dGl2aXR5KGNvbnN0IGNoYXIgKnJhd19hY3Rpdml0eSk7CiAKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9j c2lnbmFsLmgKaW5kZXggYTBjMGJjM2NlNS4uYzU3NDEzYjA2ZCAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFsLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFn ZS9wcm9jc2lnbmFsLmgKQEAgLTcwLDUgKzcwLDYgQEAgZXh0ZXJuIHZvaWQgV2FpdEZvclBy b2NTaWduYWxCYXJyaWVyKHVpbnQ2NCBnZW5lcmF0aW9uKTsKIGV4dGVybiB2b2lkIFByb2Nl c3NQcm9jU2lnbmFsQmFycmllcih2b2lkKTsKIAogZXh0ZXJuIHZvaWQgcHJvY3NpZ25hbF9z aWd1c3IxX2hhbmRsZXIoU0lHTkFMX0FSR1MpOworZXh0ZXJuIGNvbnN0IGNoYXIgKmdldF9w cm9jc2lnbmFsX3JlYXNvbl9kZXNjKFByb2NTaWduYWxSZWFzb24gcmVhc29uKTsKIAogI2Vu ZGlmCQkJCQkJCS8qIFBST0NTSUdOQUxfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv c3RvcmFnZS9zdGFuZGJ5LmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3N0YW5kYnkuaAppbmRl eCBjZmJlNDI2ZTVhLi4wYTk5YWQzZjQwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9y YWdlL3N0YW5kYnkuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3N0YW5kYnkuaApAQCAt MjMsNiArMjMsNyBAQAogZXh0ZXJuIGludAl2YWN1dW1fZGVmZXJfY2xlYW51cF9hZ2U7CiBl eHRlcm4gaW50CW1heF9zdGFuZGJ5X2FyY2hpdmVfZGVsYXk7CiBleHRlcm4gaW50CW1heF9z dGFuZGJ5X3N0cmVhbWluZ19kZWxheTsKK2V4dGVybiBib29sCWxvZ19yZWNvdmVyeV9jb25m bGljdHM7CiAKIGV4dGVybiB2b2lkIEluaXRSZWNvdmVyeVRyYW5zYWN0aW9uRW52aXJvbm1l bnQodm9pZCk7CiBleHRlcm4gdm9pZCBTaHV0ZG93blJlY292ZXJ5VHJhbnNhY3Rpb25FbnZp cm9ubWVudCh2b2lkKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Rjb3AvdGNvcHByb3Qu aCBiL3NyYy9pbmNsdWRlL3Rjb3AvdGNvcHByb3QuaAppbmRleCBiZDMwNjA3YjA3Li5lNzM2 MDJjYTJlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS90Y29wL3Rjb3Bwcm90LmgKKysrIGIv c3JjL2luY2x1ZGUvdGNvcC90Y29wcHJvdC5oCkBAIC0yOSw2ICsyOSw3IEBAIGV4dGVybiBD b21tYW5kRGVzdCB3aGVyZVRvU2VuZE91dHB1dDsKIGV4dGVybiBQR0RMTElNUE9SVCBjb25z dCBjaGFyICpkZWJ1Z19xdWVyeV9zdHJpbmc7CiBleHRlcm4gaW50CW1heF9zdGFja19kZXB0 aDsKIGV4dGVybiBpbnQJUG9zdEF1dGhEZWxheTsKK2V4dGVybiBib29sCWxvZ19yZWNvdmVy eV9jb25mbGljdHM7CiAKIC8qIEdVQy1jb25maWd1cmFibGUgcGFyYW1ldGVycyAqLwogCg== --------------70589D56CA4915589B4A3F10--