Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1vHVNC-009Ypr-Js for pgsql-hackers@arkaria.postgresql.org; Fri, 07 Nov 2025 22:56:03 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1vHVNB-00Gxcb-3w for pgsql-hackers@arkaria.postgresql.org; Fri, 07 Nov 2025 22:56:01 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1vHVNA-00GxcS-Jd for pgsql-hackers@lists.postgresql.org; Fri, 07 Nov 2025 22:56:00 +0000 Received: from mail-lj1-x233.google.com ([2a00:1450:4864:20::233]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vHVN7-006ZC2-2g for pgsql-hackers@postgresql.org; Fri, 07 Nov 2025 22:55:59 +0000 Received: by mail-lj1-x233.google.com with SMTP id 38308e7fff4ca-36295d53a10so10173461fa.0 for ; Fri, 07 Nov 2025 14:55:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762556155; x=1763160955; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=2gj+ICM8z1YNSyIySgdhxntIb7sni1QikLIz9bNgpUQ=; b=Fw04U73JaGcOrCeUJYbbu8RxpuxQThUc4JbGbohWKh6ylzvtp9LY3oQgDcP7HrJBfT E5U9QP1vlFdQvazdI8IrSIQd8Hct46y4hh0Oql08HfvbO6H/HFww+e1VDZlA5ySGywkp /Kl2usooJ0vJ9Bv4A7+rRqncFczAtTOiDAnu4cPd0a7sNOYE182viYsuYr/oSCq0aPax mXijaH3ZP9OiexHstGifBUuqwxfbZy832Eg2GaVhGgeLZfPMc/k/eRrf8RrUdUkgytby wRQfIvjG6ZtdcRYrtIGiE+9cI/yp/SYTdpfM+Ehh57LeOAW9a0JpmEB346ZW+WugjCJq GiXQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762556155; x=1763160955; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=2gj+ICM8z1YNSyIySgdhxntIb7sni1QikLIz9bNgpUQ=; b=izTAVOhWMAK87HGtflFOFvEsZSLZJYbRKtDHS/p1p99dRr6zFSBibmJR5X1C3NoGwC NSFIOW92DunN4d4+UHb3FOFagKimiwnb3veJYCLRttdYbcRfvdqeF3idA8rpyGZ12T7Z 8ETix2M+dpDB34gadDJCxVernryTuO9kCCzGQmhgoisF0+M+n/2WKNldv8pQrJZQZ8+V K2YTB6SxYjdFJN+DHOBAHUbfY6j2x5zRC/giD1MWKEsFQ6Jrodf7pz0IdfPC2OyxZXv4 k2By1SPPJwiIKO6BqYUxu2p6rgbjOTPmEIh9z8VsniqT52Rt6HnXnTuv+UZvazdSUMDv NZDw== X-Gm-Message-State: AOJu0YylJbWf9ank42k656SFigIAxfIbtlSgjKfjQR958AJaRdmnqnBE 9uuJOs2bczsG5uUIq8jYuI6anRFQ84T59RS5vc1g90nJyBS5Td1Cco+EjslChHjK/1gQDT0njLV c/oggXd448qBLK2kGOeRySfePqwg6ZRa7WWJr X-Gm-Gg: ASbGnctPsJLnplPSd/O77hTPuypSONfT2FSETGP/s1MzXx4ArMDe+uf7HRCI9VxfCb7 lLKlupD8AXUXNEwPBnm0VH/bpeYtXKYAe66PXQpqbRYKUdDtjC+uHZb5So4WPWofroLyNriHFmQ 2OHMWlpIgXWChIger1560/OaCNjKYEbtD6SYaQyv5IExnW8GR7seM7IA7IL+JNzj+SXVcHDlXGr HGjDQ7ZguU1N0BEj5WgNpydzXiHAJQvO5twaQ9hZZrAF5nJCz6K2BtA97q6Gmug8/mGYb8USC1P D19kFGifz9dkg2SLAKDaQBBvMxyw0G9SadWLEvqPphh2CAmaP4+AZ/6aeUejAXNAz4bkQluYVQA = X-Google-Smtp-Source: AGHT+IFjLbcKztP9AY4WWxn8LB40bQRleeRNeOCXmdcTR6+pWhlQKFz+4rlG8p2i3Ypq97YEyV7dSAMV5yr/AfQ9o1k= X-Received: by 2002:a05:6512:2345:b0:594:2df2:84b6 with SMTP id 2adb3069b0e04-5945f1671ebmr217523e87.18.1762556155234; Fri, 07 Nov 2025 14:55:55 -0800 (PST) MIME-Version: 1.0 References: <54FAE93D-E156-4684-9352-1CEDE6BD4A1C@yesql.se> <5bxhxniyvjyfldi7yjxcnxkl3i2ghci2grjyeclrbkfqnyhowk@dfkqzbvtbpml> <3eb40b3e-45c7-426a-b7f8-81f7d05a9b53@oss.nttdata.com> <74105887-E4EF-4CA2-9F0A-3C0CE05BF632@yesql.se> <437100f2-dd86-42e6-830c-5ff413a25e8e@oss.nttdata.com> <2a796830-de2d-4030-b480-d673f6cc5d94@eisentraut.org> <02E42650-0C66-4B49-93CA-1B0A5B73E7FD@yesql.se> In-Reply-To: From: Rahila Syed Date: Sat, 8 Nov 2025 04:25:42 +0530 X-Gm-Features: AWmQ_bkWDSrGRtOfV120cXUjUz5holsDmTE74YikWjocAN0qS9yiEzTPWLkCUYw Message-ID: Subject: Re: Enhancing Memory Context Statistics Reporting To: PostgreSQL Hackers Cc: Daniel Gustafsson , torikoshia Content-Type: multipart/mixed; boundary="00000000000087ac25064309151f" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000087ac25064309151f Content-Type: multipart/alternative; boundary="00000000000087ac23064309151d" --00000000000087ac23064309151d Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, I have attached a version 40 patch that has been rebased onto the latest master branch, as CFbot indicated a rebase was needed. The test module patch is unchanged. Thank you, Rahila Syed On Tue, Oct 28, 2025 at 11:06=E2=80=AFAM Rahila Syed wrote: > Hi, > > PFA an updated v39 patch which is ready for review in the upcoming > commitfest. > > >> v35 works fine on my environment. >> I ran the same test and haven=E2=80=99t encountered the crash anymore. >> > > Thank you for testing and confirming the fix. > > >> The addition of the following code appears to have resolved the issue: >> >> +memstats_dsa_cleanup(char *key) >> +{ >> + MemoryStatsDSHashEntry *entry; >> + >> + entry =3D dshash_find(MemoryStatsDsHash, key, true); >> > > Yes, without this code, the dsa memory was being freed in the timeout pat= h > without acquiring a lock. > > Since you seem to make a next version patch, I understand v35 is an >> interim patch, >> so this isn=E2=80=99t a major concern, but I encountered trailing whites= pace >> warnings when applying the patches. >> > $ git apply >> 0001-v35-0001-Add-pg_get_process_memory_context-function.patch >> 0001-v35-0001-Add-pg_get_process_memory_context-function.patch:705: >> trailing whitespace. >> 0001-v35-0001-Add-pg_get_process_memory_context-function.patch:1066: >> trailing whitespace. >> >> > Thanks, should be fixed now. > > The updated patch contains the following changes. These changes are > addressing some review comments > discussed off list and a couple of bugs found while doing injection point= s > tests. > > 1. > All the changes made to MemoryContextStatsInternal and > MemoryContextStatsDetail are removed. > Instead of modifying these functions, I have written a separate function > MemoryContextStatsCounter > that takes care of counting statistics. This approach ensures that the > existing functions remain unchanged. > > 2. Changes to ensure that the wait loop does not exceed the prescribed > wait time. > Additional exit condition has been added to the infinite loop that waits > for request completion. > This allows the pg_get_memoy_context_statistics function to return if the > elapsed time goes beyond > a set limit i.e the following timeout. > > 3. The user facing timeout is removed as that would complicate the user > interface. CFIs > are called frequently and the requests are likely to be addressed promptl= y. > A predefined macro MEMORY_CONTEXT_STATS_TIMEOUT 5 (secs) is used for > timeout > instead. This would also remove the possibility of a user setting very > low timeouts, which > could cause requests to be incomplete and result in NULL outputs. > > 4. Miscellaneous cleanups to improve comments and remove left over > comments from older > versions. Also, removed an unnecessary argument from the > PublishMemoryContext function. > > 5. Addressed Torikoshias suggestion to change the order of columns to mat= ch > pg_backend_memory_contexts. > > 6. Attached is a test module that tests error handling by introducing > errors using > injection points. I have resolved a few bugs, so the memory monitoring > function > now runs correctly after the previous request ended with an error. > > Thank you, > Rahila Syed > --00000000000087ac23064309151d Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi,

I have attached a version 40 patch = that has been rebased onto the
latest master branch, as CFbot indicated= a rebase was needed.
The test module patch is unchanged.

Thank y= ou,
Rahila Syed

On Tue, Oct 28, 2025 at 11:06= =E2=80=AFAM Rahila Syed <rahil= asyed90@gmail.com> wrote:
Hi,

PFA an update= d v39 patch which is ready for review in the upcoming commitfest.=C2=A0
=

v35 works fine on my environment.
I ran the same test and haven=E2=80=99t encountered the crash anymore.
<= /blockquote>

Thank you for testing and confirming the fix.
=C2= =A0
The addition of the following code appears to have resolved the issue:

=C2=A0 =C2=A0+memstats_dsa_cleanup(char *key)
=C2=A0 =C2=A0+{
=C2=A0 =C2=A0+=C2=A0 =C2=A0MemoryStatsDSHashEntry *entry;
=C2=A0 =C2=A0+
=C2=A0 =C2=A0+=C2=A0 =C2=A0entry =3D dshash_find(MemoryStatsDsHash, key, tr= ue);

Yes, without this code, the dsa memory was be= ing freed in the timeout path
without acquiring a lock.=C2=A0=C2=A0
<= br>
Since you seem to make a next version patch, I understand v35 is an
interim patch,
so this isn=E2=80=99t a major concern, but I encountered trailing whitespac= e
warnings when applying the patches.=C2=A0
=C2=A0 =C2=A0$ git apply
0001-v35-0001-Add-pg_get_process_memory_context-function.patch
=C2=A0 =C2=A00001-v35-0001-Add-pg_get_process_memory_context-function.patch= :705:
trailing whitespace.
=C2=A0 =C2=A00001-v35-0001-Add-pg_get_process_memory_context-function.patch= :1066:
trailing whitespace.

=C2=A0
Thanks, should be fixed now.

= The updated patch contains the following changes. These changes are address= ing some review comments
discussed off list=C2=A0and a couple of bugs f= ound while doing injection points tests.

1.
All the changes = made to MemoryContextStatsInternal and MemoryContextStatsDetail are removed= .
Instead of modifying these functions, I have written a separate functi= on MemoryContextStatsCounter
that takes care of counting statistics. Thi= s approach ensures that the existing functions remain unchanged.

2. Changes to ensure that the wait loop doe= s not exceed the prescribed wait time.
Additional exit condition has bee= n added to the infinite loop that waits for request completion.
This al= lows the pg_get_memoy_context_statistics function to return if the elapsed = time goes beyond
a set limit i.e the following timeout.

3= . The user facing timeout is removed as that would complicate the user inte= rface. CFIs
are called frequently and the requests are likely to be addr= essed promptly.
A predefined macro MEMORY_CONTEXT_STATS_TIMEOUT 5 (secs)= =C2=A0 is used for timeout
instead.=C2=A0 This would also remove the possibility of a user setting very low timeouts,= which
could cause requests to be incomplete and result in NULL outputs= .

4. Miscellaneous cleanups to improve comments and remove left over = comments from older
versions. Also, removed an unnecessary argument from= the PublishMemoryContext function.

5. Addressed Torikosh= ias suggestion to change the order of columns to match
pg_backend_memory= _contexts.

6. Attached is a test module that tests error handling by= introducing errors using
injection points. I have resolved a few bugs, = so the memory monitoring function
now runs correctly after the previous request ended with an er= ror.

Thank you,
Rahila Syed
--00000000000087ac23064309151d-- --00000000000087ac25064309151f Content-Type: application/octet-stream; name="v40-0001-Add-function-to-report-memory-context-statistics.patch" Content-Disposition: attachment; filename="v40-0001-Add-function-to-report-memory-context-statistics.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhpgccan0 RnJvbSBjOGNkZGY1OWMzZDliMWY2OTY3YWNkODZlYzc5OTQ1YmFjMDZjMmYwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSYWhpbGEgU3llZCA8cmFoaWxhc3llZC45MEBnbWFpbC5jb20+ CkRhdGU6IFNhdCwgOCBOb3YgMjAyNSAwNDowNjoyMSArMDUzMApTdWJqZWN0OiBbUEFUQ0hdIEFk ZCBmdW5jdGlvbiB0byByZXBvcnQgbWVtb3J5IGNvbnRleHQgc3RhdGlzdGljcwoKVGhpcyBhZGRz IGEgZnVuY3Rpb24gZm9yIHJldHJpZXZpbmcgbWVtb3J5IGNvbnRleHQgc3RhdGlzdGljcwphbmQg aW5mb3JtYXRpb24gZnJvbSBiYWNrZW5kcyBhcyB3ZWxsIGFzIGF1eGlsaWFyeSBwcm9jZXNzZXMu ClRoZSBpbnRlbmRlZCB1c2VjYXNlIGlzIGNsdXN0ZXIgZGVidWdnaW5nIHdoZW4gdW5kZXIgbWVt b3J5CnByZXNzdXJlIG9yIHVuYW50aWNpcGF0ZWQgbWVtb3J5IHVzYWdlIGNoYXJhY3RlcmlzdGlj cy4KCldoZW4gY2FsbGluZyB0aGUgZnVuY3Rpb24gaXQgc2VuZHMgYSBzaWduYWwgdG8gdGhlIHNw ZWNpZmllZApwcm9jZXNzIHRvIHN1Ym1pdCBzdGF0aXN0aWNzIHJlZ2FyZGluZyBpdHMgbWVtb3J5 IGNvbnRleHRzCmludG8gZHluYW1pYyBzaGFyZWQgbWVtb3J5LiAgRWFjaCBtZW1vcnkgY29udGV4 dCBpcyByZXR1cm5lZAppbiBkZXRhaWwsIGZvbGxvd2VkIGJ5IGEgY3VtdWxhdGl2ZSB0b3RhbCBp biBjYXNlIHRoZSBudW1iZXIKb2YgY29udGV4dHMgZXhjZWVkIHRoZSBtYXggYWxsb2NhdGVkIGFt b3VudCBvZiBzaGFyZWQgbWVtb3J5LgpFYWNoIHByb2Nlc3MgaXMgbGltaXRlZCB0byB1c2UgYXQg bW9zdCAxTWIgbWVtb3J5IGZvciB0aGlzLgoKQSBzdW1tYXJ5IGNhbiBhbHNvIGJlIGV4cGxpY2l0 bHkgcmVxdWVzdGVkIGJ5IHRoZSB1c2VyLCB0aGlzCndpbGwgcmV0dXJuIHRoZSBUb3BNZW1vcnlD b250ZXh0IGFuZCBhIGN1bXVsYXRpdmUgdG90YWwgb2YKYWxsIGxvd2VyIGNvbnRleHRzLgoKSW4g b3JkZXIgdG8gbm90IGJsb2NrIG9uIGJ1c3kgcHJvY2Vzc2VzLCB3ZSBoYXZlIGhhcmRjb2RlZAp0 aGUgbnVtYmVyIG9mIHNlY29uZHMgZHVyaW5nIHdoaWNoIHRvIHJldHJ5IGJlZm9yZSB0aW1pbmcg b3V0LgpJbiB0aGUgY2FzZSB3aGVyZSBubyBzdGF0aXN0aWNzIGFyZSBwdWJsaXNoZWQgd2l0aGlu IHRoZSBzZXQKdGltZW91dCwgTlVMTCBpcyByZXR1cm5lZAotLS0KIGRvYy9zcmMvc2dtbC9mdW5j L2Z1bmMtYWRtaW4uc2dtbCAgICAgICAgICAgICB8IDE1NyArKysKIHNyYy9iYWNrZW5kL2NhdGFs b2cvc3lzdGVtX3ZpZXdzLnNxbCAgICAgICAgICB8ICAgNSArCiBzcmMvYmFja2VuZC9wb3N0bWFz dGVyL2F1dG92YWN1dW0uYyAgICAgICAgICAgfCAgIDQgKwogc3JjL2JhY2tlbmQvcG9zdG1hc3Rl ci9jaGVja3BvaW50ZXIuYyAgICAgICAgIHwgICA0ICsKIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIv aW50ZXJydXB0LmMgICAgICAgICAgICB8ICAgNCArCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bn YXJjaC5jICAgICAgICAgICAgICAgfCAgIDQgKwogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9zdGFy dHVwLmMgICAgICAgICAgICAgIHwgICA0ICsKIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvd2Fsc3Vt bWFyaXplci5jICAgICAgICB8ICAgNCArCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMg ICAgICAgICAgICAgICAgfCAgIDMgKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25h bC5jICAgICAgICAgIHwgICAzICsKIHNyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMgICAg ICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMgICAgICAgICAg ICAgICAgICAgfCAgIDMgKwogLi4uL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFtZXMudHh0 ICAgICAgIHwgICAyICsKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9tY3h0ZnVuY3MuYyAgICAgICAg ICAgICB8IDkxMCArKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xv YmFscy5jICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC91dGlscy9pbml0L3Bvc3Rp bml0LmMgICAgICAgICAgICAgfCAgIDcgKwogc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9tY3h0LmMg ICAgICAgICAgICAgICAgIHwgIDI5ICsKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQg ICAgICAgICAgICAgICB8ICAxMCArCiBzcmMvaW5jbHVkZS9taXNjYWRtaW4uaCAgICAgICAgICAg ICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvc3RvcmFnZS9sd2xvY2tsaXN0LmggICAg ICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oICAgICAg ICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS91dGlscy9tZW11dGlscy5oICAgICAgICAgICAg ICAgICAgfCAgODEgKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0ICAg ICAgICB8ICAxOSArCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9zeXN2aWV3cy5zcWwgICAgICAgICAg ICAgfCAgMTggKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAg IHwgICAzICsKIDI1IGZpbGVzIGNoYW5nZWQsIDEyNTUgaW5zZXJ0aW9ucygrKSwgMjQgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1hZG1pbi5zZ21sIGIv ZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1hZG1pbi5zZ21sCmluZGV4IDFiNDY1YmM4YmE3Li5hNWM2 NjgzNzI0MSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1hZG1pbi5zZ21sCisr KyBiL2RvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtYWRtaW4uc2dtbApAQCAtMjUxLDYgKzI1MSwxMzAg QEAKICAgICAgICAgPGxpdGVyYWw+ZmFsc2U8L2xpdGVyYWw+IGlzIHJldHVybmVkLgogICAgICAg IDwvcGFyYT48L2VudHJ5PgogICAgICAgPC9yb3c+CisKKyAgICAgIDxyb3c+CisgICAgICAgPGVu dHJ5IHJvbGU9ImZ1bmNfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImZ1bmNfc2lnbmF0dXJlIj4K KyAgICAgICAgPGluZGV4dGVybT4KKyAgICAgICAgIDxwcmltYXJ5PnBnX2dldF9wcm9jZXNzX21l bW9yeV9jb250ZXh0czwvcHJpbWFyeT4KKyAgICAgICAgPC9pbmRleHRlcm0+CisgICAgICAgIDxm dW5jdGlvbj5wZ19nZXRfcHJvY2Vzc19tZW1vcnlfY29udGV4dHM8L2Z1bmN0aW9uPiAoIDxwYXJh bWV0ZXI+cGlkPC9wYXJhbWV0ZXI+IDx0eXBlPmludGVnZXI8L3R5cGU+LCA8cGFyYW1ldGVyPnN1 bW1hcnk8L3BhcmFtZXRlcj4gPHR5cGU+Ym9vbGVhbjwvdHlwZT4gKQorICAgICAgICA8cmV0dXJu dmFsdWU+c2V0b2YgcmVjb3JkPC9yZXR1cm52YWx1ZT4KKyAgICAgICAgKCA8cGFyYW1ldGVyPm5h bWU8L3BhcmFtZXRlcj4gPHR5cGU+dGV4dDwvdHlwZT4sCisgICAgICAgIDxwYXJhbWV0ZXI+aWRl bnQ8L3BhcmFtZXRlcj4gPHR5cGU+dGV4dDwvdHlwZT4sCisgICAgICAgIDxwYXJhbWV0ZXI+dHlw ZTwvcGFyYW1ldGVyPiA8dHlwZT50ZXh0PC90eXBlPiwKKyAgICAgICAgPHBhcmFtZXRlcj5sZXZl bDwvcGFyYW1ldGVyPiA8dHlwZT5pbnRlZ2VyPC90eXBlPiwKKyAgICAgICAgPHBhcmFtZXRlcj5w YXRoPC9wYXJhbWV0ZXI+IDx0eXBlPmludGVnZXJbXTwvdHlwZT4sCisgICAgICAgIDxwYXJhbWV0 ZXI+dG90YWxfYnl0ZXM8L3BhcmFtZXRlcj4gPHR5cGU+YmlnaW50PC90eXBlPiwKKyAgICAgICAg PHBhcmFtZXRlcj50b3RhbF9uYmxvY2tzPC9wYXJhbWV0ZXI+IDx0eXBlPmJpZ2ludDwvdHlwZT4s CisgICAgICAgIDxwYXJhbWV0ZXI+ZnJlZV9ieXRlczwvcGFyYW1ldGVyPiA8dHlwZT5iaWdpbnQ8 L3R5cGU+LAorICAgICAgICA8cGFyYW1ldGVyPmZyZWVfY2h1bmtzPC9wYXJhbWV0ZXI+IDx0eXBl PmJpZ2ludDwvdHlwZT4sCisgICAgICAgIDxwYXJhbWV0ZXI+dXNlZF9ieXRlczwvcGFyYW1ldGVy PiA8dHlwZT5iaWdpbnQ8L3R5cGU+LAorICAgICAgICA8cGFyYW1ldGVyPm51bV9hZ2dfY29udGV4 dHM8L3BhcmFtZXRlcj4gPHR5cGU+aW50ZWdlcjwvdHlwZT4gKQorICAgICAgIDwvcGFyYT4KKyAg ICAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHJlcXVlc3RzIHRvIGRp c3BsYXkgdGhlIG1lbW9yeSBjb250ZXh0cyBvZiBhCisgICAgICAgIDxwcm9kdWN0bmFtZT5Qb3N0 Z3JlU1FMPC9wcm9kdWN0bmFtZT4gcHJvY2VzcyB3aXRoIHRoZSBzcGVjaWZpZWQKKyAgICAgICAg cHJvY2VzcyBJRC4gIFRoZSBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBzZW5kIHJlcXVlc3RzIHRv IGJhY2tlbmRzIGFzCisgICAgICAgIHdlbGwgYXMgPGdsb3NzdGVybSBsaW5rZW5kPSJnbG9zc2Fy eS1hdXhpbGlhcnktcHJvYyI+YXV4aWxpYXJ5IHByb2Nlc3NlczwvZ2xvc3N0ZXJtPi4KKyAgICAg ICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIFRoZSByZXR1cm5lZCByZWNvcmQgY29u dGFpbnMgZXh0ZW5kZWQgc3RhdGlzdGljcyBwZXIgZWFjaCBtZW1vcnkKKyAgICAgICAgY29udGV4 dDoKKyAgICAgICAgPGl0ZW1pemVkbGlzdCBzcGFjaW5nPSJjb21wYWN0Ij4KKyAgICAgICAgIDxs aXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgPHBhcmFtZXRlcj5uYW1lPC9w YXJhbWV0ZXI+IC0gVGhlIG5hbWUgb2YgdGhlIG1lbW9yeSBjb250ZXh0LgorICAgICAgICAgIDwv cGFyYT4KKyAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAg ICAgPHBhcmE+CisgICAgICAgICAgIDxwYXJhbWV0ZXI+aWRlbnQ8L3BhcmFtZXRlcj4gLSBNZW1v cnkgY29udGV4dCBJRCAoaWYgYW55KS4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICA8L2xp c3RpdGVtPgorICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAg ICA8cGFyYW1ldGVyPnR5cGU8L3BhcmFtZXRlcj4gLSBUaGUgdHlwZSBvZiBtZW1vcnkgY29udGV4 dCwgcG9zc2libGUKKyAgICAgICAgICAgdmFsdWVzIGFyZTogQWxsb2NTZXQsIEdlbmVyYXRpb24s IFNsYWIgYW5kIEJ1bXAuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgPC9saXN0aXRlbT4K KyAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgPHBhcmFt ZXRlcj5sZXZlbDwvcGFyYW1ldGVyPiAtIFRoZSBsZXZlbCBpbiB0aGUgdHJlZSBvZiB0aGUgY3Vy cmVudAorICAgICAgICAgICBtZW1vcnkgY29udGV4dC4KKyAgICAgICAgICA8L3BhcmE+CisgICAg ICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgor ICAgICAgICAgICA8cGFyYW1ldGVyPnBhdGg8L3BhcmFtZXRlcj4gLSBNZW1vcnkgY29udGV4dHMg YXJlIG9yZ2FuaXplZCBpbiBhCisgICAgICAgICAgIHRyZWUgbW9kZWwgd2l0aCBUb3BNZW1vcnlD b250ZXh0IGFzIHRoZSByb290LCBhbmQgYWxsIG90aGVyIG1lbW9yeQorICAgICAgICAgICBjb250 ZXh0cyBhcyBub2RlcyBpbiB0aGUgdHJlZS4gVGhlIDxwYXJhbWV0ZXI+cGF0aDwvcGFyYW1ldGVy PgorICAgICAgICAgICBkaXNwbGF5cyB0aGUgcGF0aCBmcm9tIHRoZSByb290IHRvIHRoZSBjdXJy ZW50IG1lbW9yeSBjb250ZXh0LiBUaGUKKyAgICAgICAgICAgcGF0aCBpcyBsaW1pdGVkIHRvIDEw MCBjaGlsZHJlbiBwZXIgbm9kZSwgd2hpY2ggZWFjaCBub2RlIGxpbWl0ZWQKKyAgICAgICAgICAg dG8gYSBtYXggZGVwdGggb2YgMTAwLCB0byBwcmVzZXJ2ZSBtZW1vcnkgZHVyaW5nIHJlcG9ydGlu Zy4gVGhlCisgICAgICAgICAgIHByaW50ZWQgcGF0aCB3aWxsIGFsc28gYmUgbGltaXRlZCB0byAx MDAgbm9kZXMgY291bnRpbmcgZnJvbSB0aGUKKyAgICAgICAgICAgVG9wTWVtb3J5Q29udGV4dC4K KyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgPGxpc3Rp dGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICA8cGFyYW1ldGVyPnRvdGFsX2J5dGVz PC9wYXJhbWV0ZXI+IC0gVGhlIHRvdGFsIG51bWJlciBvZiBieXRlcworICAgICAgICAgICBhbGxv Y2F0ZWQgdG8gdGhpcyBtZW1vcnkgY29udGV4dC4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAg ICA8L2xpc3RpdGVtPgorICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAg ICAgICAgICA8cGFyYW1ldGVyPnRvdGFsX25ibG9ja3M8L3BhcmFtZXRlcj4gLSBUaGUgdG90YWwg bnVtYmVyIG9mIGJsb2NrcworICAgICAgICAgICB1c2VkIGZvciB0aGUgYWxsb2NhdGVkIG1lbW9y eS4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgPGxp c3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICA8cGFyYW1ldGVyPmZyZWVfYnl0 ZXM8L3BhcmFtZXRlcj4gLSBUaGUgYW1vdW50IG9mIGZyZWUgbWVtb3J5IGluCisgICAgICAgICAg IHRoaXMgbWVtb3J5IGNvbnRleHQuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgPC9saXN0 aXRlbT4KKyAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAg PHBhcmFtZXRlcj5mcmVlX2NodW5rczwvcGFyYW1ldGVyPiAtIFRoZSBudW1iZXIgb2YgY2h1bmtz IHRoYXQKKyAgICAgICAgICAgPHBhcmFtZXRlcj5mcmVlX2J5dGVzPC9wYXJhbWV0ZXI+IGNvcnJl c3BvbmRzIHRvLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAg ICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgIDxwYXJhbWV0ZXI+ dXNlZF9ieXRlczwvcGFyYW1ldGVyPiAtIFRoZSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMKKyAgICAg ICAgICAgY3VycmVudGx5IG9jY3VwaWVkLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgIDwv bGlzdGl0ZW0+CisgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAg ICAgIDxwYXJhbWV0ZXI+bnVtX2FnZ19jb250ZXh0czwvcGFyYW1ldGVyPiAtIFRoZSBudW1iZXIg b2YgbWVtb3J5CisgICAgICAgICAgIGNvbnRleHRzIGFnZ3JlZ2F0ZWQgaW4gdGhlIGRpc3BsYXll ZCBzdGF0aXN0aWNzLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgIDwvbGlzdGl0ZW0+Cisg ICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAg ICAgICAgV2hlbiA8cGFyYW1ldGVyPnN1bW1hcnk8L3BhcmFtZXRlcj4gaXMgPGxpdGVyYWw+dHJ1 ZTwvbGl0ZXJhbD4sIHN0YXRpc3RpY3MKKyAgICAgICAgZm9yIG1lbW9yeSBjb250ZXh0cyBhdCBs ZXZlbHMgMSBhbmQgMiBhcmUgZGlzcGxheWVkLCB3aXRoIGxldmVsIDEKKyAgICAgICAgcmVwcmVz ZW50aW5nIHRoZSByb290IG5vZGUgKGkuZS4sIDxsaXRlcmFsPlRvcE1lbW9yeUNvbnRleHQ8L2xp dGVyYWw+KS4KKyAgICAgICAgU3RhdGlzdGljcyBmb3IgY29udGV4dHMgb24gbGV2ZWwgMiBhbmQg YmVsb3cgYXJlIGFnZ3JlZ2F0ZXMgb2YgYWxsCisgICAgICAgIGNoaWxkIGNvbnRleHRzJyBzdGF0 aXN0aWNzLCB3aGVyZSA8bGl0ZXJhbD5udW1fYWdnX2NvbnRleHRzPC9saXRlcmFsPgorICAgICAg ICBpbmRpY2F0ZSB0aGUgbnVtYmVyIGFnZ3JlZ2F0ZWQgY2hpbGQgY29udGV4dHMuICBXaGVuCisg ICAgICAgIDxwYXJhbWV0ZXI+c3VtbWFyeTwvcGFyYW1ldGVyPiBpcyA8bGl0ZXJhbD5mYWxzZTwv bGl0ZXJhbD4sCisgICAgICAgIDxsaXRlcmFsPnRoZSBudW1fYWdnX2NvbnRleHRzPC9saXRlcmFs PiB2YWx1ZSBpcyA8bGl0ZXJhbD4xPC9saXRlcmFsPiwKKyAgICAgICAgaW5kaWNhdGluZyB0aGF0 IGluZGl2aWR1YWwgc3RhdGlzdGljcyBhcmUgYmVpbmcgZGlzcGxheWVkLgorICAgICAgIDwvcGFy YT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgQWZ0ZXIgcmVjZWl2aW5nIG1lbW9yeSBjb250ZXh0 IHN0YXRpc3RpY3MgZnJvbSB0aGUgdGFyZ2V0IHByb2Nlc3MsIGl0CisgICAgICAgIHJldHVybnMg dGhlIHJlc3VsdHMgYXMgb25lIHJvdyBwZXIgY29udGV4dC4gIElmIGFsbCB0aGUgY29udGV4dHMg ZG9uJ3QKKyAgICAgICAgZml0IHdpdGhpbiB0aGUgcHJlLWRldGVybWluZWQgc2l6ZSBsaW1pdCwg dGhlIHJlbWFpbmluZyBjb250ZXh0CisgICAgICAgIHN0YXRpc3RpY3MgYXJlIGFnZ3JlZ2F0ZWQg YW5kIGEgY3VtdWxhdGl2ZSB0b3RhbCBpcyBkaXNwbGF5ZWQuICBUaGUKKyAgICAgICAgPGxpdGVy YWw+bnVtX2FnZ19jb250ZXh0czwvbGl0ZXJhbD4gY29sdW1uIGluZGljYXRlcyB0aGUgbnVtYmVy IG9mCisgICAgICAgIGNvbnRleHRzIGFnZ3JlZ2F0ZWQgaW4gdGhlIGRpc3BsYXllZCBzdGF0aXN0 aWNzLiAgV2hlbgorICAgICAgICA8bGl0ZXJhbD5udW1fYWdnX2NvbnRleHRzPC9saXRlcmFsPiBp cyA8bGl0ZXJhbD4xPC9saXRlcmFsPiBpdCBtZWFucworICAgICAgICB0aGF0IHRoZSBjb250ZXh0 IHN0YXRpc3RpY3MgYXJlIGRpc3BsYXllZCBzZXBhcmF0ZWx5LgorICAgICAgIDwvcGFyYT48L2Vu dHJ5PgorICAgICAgPC9yb3c+CiAgICAgIDwvdGJvZHk+CiAgICAgPC90Z3JvdXA+CiAgICA8L3Rh YmxlPgpAQCAtMzAyLDYgKzQyNiwzOSBAQCBMT0c6ICBHcmFuZCB0b3RhbDogMTY1MTkyMCBieXRl cyBpbiAyMDEgYmxvY2tzOyA2MjIzNjAgZnJlZSAoODggY2h1bmtzKTsgMTAyOTU2MAogICAgIGJl Y2F1c2UgaXQgbWF5IGdlbmVyYXRlIGEgbGFyZ2UgbnVtYmVyIG9mIGxvZyBtZXNzYWdlcy4KICAg IDwvcGFyYT4KIAorICAgPHBhcmE+CisgICAgPGZ1bmN0aW9uPnBnX2dldF9wcm9jZXNzX21lbW9y eV9jb250ZXh0czwvZnVuY3Rpb24+IGNhbiBiZSB1c2VkIHRvIHJlcXVlc3QKKyAgICBtZW1vcnkg Y29udGV4dHMgc3RhdGlzdGljcyBvZiBhbnkgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1 Y3RuYW1lPgorICAgIHByb2Nlc3MuICBGb3IgZXhhbXBsZToKKzxwcm9ncmFtbGlzdGluZz4KK3Bv c3RncmVzPSMgU0VMRUNUICogRlJPTSBwZ19nZXRfcHJvY2Vzc19tZW1vcnlfY29udGV4dHMoCisg IChTRUxFQ1QgcGlkIEZST00gcGdfc3RhdF9hY3Rpdml0eQorICAgIFdIRVJFIGJhY2tlbmRfdHlw ZSA9ICdjaGVja3BvaW50ZXInKSwKKyAgZmFsc2UpIExJTUlUIDE7CistWyBSRUNPUkQgMSBdLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK25hbWUgICAgICAgICAgICAgfCBUb3BN ZW1vcnlDb250ZXh0CitpZGVudCAgICAgICAgICAgIHwKK3R5cGUgICAgICAgICAgICAgfCBBbGxv Y1NldAorbGV2ZWwgICAgICAgICAgICB8IDEKK3BhdGggICAgICAgICAgICAgfCB7MX0KK3RvdGFs X2J5dGVzICAgICAgfCA5MDMwNAordG90YWxfbmJsb2NrcyAgICB8IDMKK2ZyZWVfYnl0ZXMgICAg ICAgfCAyODgwCitmcmVlX2NodW5rcyAgICAgIHwgMQordXNlZF9ieXRlcyAgICAgICB8IDg3NDI0 CitudW1fYWdnX2NvbnRleHRzIHwgMQorPC9wcm9ncmFtbGlzdGluZz4KKyAgICA8bm90ZT4KKyAg ICAgPHBhcmE+CisgICAgICBXaGlsZSA8ZnVuY3Rpb24+cGdfZ2V0X3Byb2Nlc3NfbWVtb3J5X2Nv bnRleHRzPC9mdW5jdGlvbj4gY2FuIGJlIHVzZWQgdG8KKyAgICAgIHF1ZXJ5IG1lbW9yeSBjb250 ZXh0cyBvZiB0aGUgbG9jYWwgYmFja2VuZCwKKyAgICAgIDxzdHJ1Y3RuYW1lPnBnX2JhY2tlbmRf bWVtb3J5X2NvbnRleHRzPC9zdHJ1Y3RuYW1lPgorICAgICAgKHNlZSA8eHJlZiBsaW5rZW5kPSJ2 aWV3LXBnLWJhY2tlbmQtbWVtb3J5LWNvbnRleHRzIi8+IGZvciBtb3JlIGRldGFpbHMpCisgICAg ICB3aWxsIGJlIGxlc3MgcmVzb3VyY2UgaW50ZW5zaXZlIHdoZW4gb25seSB0aGUgbG9jYWwgYmFj a2VuZCBpcyBvZiBpbnRlcmVzdC4KKyAgICAgPC9wYXJhPgorICAgIDwvbm90ZT4KKyAgIDwvcGFy YT4KKwogICA8L3NlY3QyPgogCiAgIDxzZWN0MiBpZD0iZnVuY3Rpb25zLWFkbWluLWJhY2t1cCI+ CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92aWV3cy5zcWwgYi9zcmMv YmFja2VuZC9jYXRhbG9nL3N5c3RlbV92aWV3cy5zcWwKaW5kZXggMDU5ZTg3NzhjYTcuLmM2M2Zk Njc4M2JkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92aWV3cy5zcWwK KysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsCkBAIC02OTIsNiArNjky LDExIEBAIEdSQU5UIFNFTEVDVCBPTiBwZ19iYWNrZW5kX21lbW9yeV9jb250ZXh0cyBUTyBwZ19y ZWFkX2FsbF9zdGF0czsKIFJFVk9LRSBFWEVDVVRFIE9OIEZVTkNUSU9OIHBnX2dldF9iYWNrZW5k X21lbW9yeV9jb250ZXh0cygpIEZST00gUFVCTElDOwogR1JBTlQgRVhFQ1VURSBPTiBGVU5DVElP TiBwZ19nZXRfYmFja2VuZF9tZW1vcnlfY29udGV4dHMoKSBUTyBwZ19yZWFkX2FsbF9zdGF0czsK IAorUkVWT0tFIEVYRUNVVEUgT04gRlVOQ1RJT04KKwlwZ19nZXRfcHJvY2Vzc19tZW1vcnlfY29u dGV4dHMoaW50ZWdlciwgYm9vbGVhbikgRlJPTSBQVUJMSUM7CitHUkFOVCBFWEVDVVRFIE9OIEZV TkNUSU9OCisJcGdfZ2V0X3Byb2Nlc3NfbWVtb3J5X2NvbnRleHRzKGludGVnZXIsIGJvb2xlYW4p IFRPIHBnX3JlYWRfYWxsX3N0YXRzOworCiAtLSBTdGF0aXN0aWNzIHZpZXdzCiAKIENSRUFURSBW SUVXIHBnX3N0YXRfYWxsX3RhYmxlcyBBUwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1h c3Rlci9hdXRvdmFjdXVtLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0uYwpp bmRleCBlZDE5Yzc0YmIxOS4uMzRiZGI4OGZhN2YgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bv c3RtYXN0ZXIvYXV0b3ZhY3V1bS5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3Zh Y3V1bS5jCkBAIC03OTEsNiArNzkxLDEwIEBAIFByb2Nlc3NBdXRvVmFjTGF1bmNoZXJJbnRlcnJ1 cHRzKHZvaWQpCiAJaWYgKExvZ01lbW9yeUNvbnRleHRQZW5kaW5nKQogCQlQcm9jZXNzTG9nTWVt b3J5Q29udGV4dEludGVycnVwdCgpOwogCisJLyogUHVibGlzaCBtZW1vcnkgY29udGV4dHMgb2Yg dGhpcyBwcm9jZXNzICovCisJaWYgKFB1Ymxpc2hNZW1vcnlDb250ZXh0UGVuZGluZykKKwkJUHJv Y2Vzc0dldE1lbW9yeUNvbnRleHRJbnRlcnJ1cHQoKTsKKwogCS8qIFByb2Nlc3Mgc2ludmFsIGNh dGNodXAgaW50ZXJydXB0cyB0aGF0IGhhcHBlbmVkIHdoaWxlIHNsZWVwaW5nICovCiAJUHJvY2Vz c0NhdGNodXBJbnRlcnJ1cHQoKTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0 ZXIvY2hlY2twb2ludGVyLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2NoZWNrcG9pbnRlci5j CmluZGV4IGU4NGU4NjYzZTk2Li41YjNlMDg4MDViZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv cG9zdG1hc3Rlci9jaGVja3BvaW50ZXIuYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2No ZWNrcG9pbnRlci5jCkBAIC02NzksNiArNjc5LDEwIEBAIFByb2Nlc3NDaGVja3BvaW50ZXJJbnRl cnJ1cHRzKHZvaWQpCiAJLyogUGVyZm9ybSBsb2dnaW5nIG9mIG1lbW9yeSBjb250ZXh0cyBvZiB0 aGlzIHByb2Nlc3MgKi8KIAlpZiAoTG9nTWVtb3J5Q29udGV4dFBlbmRpbmcpCiAJCVByb2Nlc3NM b2dNZW1vcnlDb250ZXh0SW50ZXJydXB0KCk7CisKKwkvKiBQdWJsaXNoIG1lbW9yeSBjb250ZXh0 cyBvZiB0aGlzIHByb2Nlc3MgKi8KKwlpZiAoUHVibGlzaE1lbW9yeUNvbnRleHRQZW5kaW5nKQor CQlQcm9jZXNzR2V0TWVtb3J5Q29udGV4dEludGVycnVwdCgpOwogfQogCiAvKgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9pbnRlcnJ1cHQuYyBiL3NyYy9iYWNrZW5kL3Bvc3Rt YXN0ZXIvaW50ZXJydXB0LmMKaW5kZXggYmE2M2I4NGRmYzUuLjI5NDU0YjhiZjhhIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2ludGVycnVwdC5jCisrKyBiL3NyYy9iYWNrZW5k L3Bvc3RtYXN0ZXIvaW50ZXJydXB0LmMKQEAgLTQ4LDYgKzQ4LDEwIEBAIFByb2Nlc3NNYWluTG9v cEludGVycnVwdHModm9pZCkKIAkvKiBQZXJmb3JtIGxvZ2dpbmcgb2YgbWVtb3J5IGNvbnRleHRz IG9mIHRoaXMgcHJvY2VzcyAqLwogCWlmIChMb2dNZW1vcnlDb250ZXh0UGVuZGluZykKIAkJUHJv Y2Vzc0xvZ01lbW9yeUNvbnRleHRJbnRlcnJ1cHQoKTsKKworCS8qIFB1Ymxpc2ggbWVtb3J5IGNv bnRleHRzIG9mIHRoaXMgcHJvY2VzcyAqLworCWlmIChQdWJsaXNoTWVtb3J5Q29udGV4dFBlbmRp bmcpCisJCVByb2Nlc3NHZXRNZW1vcnlDb250ZXh0SW50ZXJydXB0KCk7CiB9CiAKIC8qCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3BnYXJjaC5jIGIvc3JjL2JhY2tlbmQvcG9z dG1hc3Rlci9wZ2FyY2guYwppbmRleCBjZTZiNTI5OTMyNC4uZmRkMzg1ZTQ5MmQgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcGdhcmNoLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9z dG1hc3Rlci9wZ2FyY2guYwpAQCAtODcxLDYgKzg3MSwxMCBAQCBQcm9jZXNzUGdBcmNoSW50ZXJy dXB0cyh2b2lkKQogCWlmIChMb2dNZW1vcnlDb250ZXh0UGVuZGluZykKIAkJUHJvY2Vzc0xvZ01l bW9yeUNvbnRleHRJbnRlcnJ1cHQoKTsKIAorCS8qIFB1Ymxpc2ggbWVtb3J5IGNvbnRleHRzIG9m IHRoaXMgcHJvY2VzcyAqLworCWlmIChQdWJsaXNoTWVtb3J5Q29udGV4dFBlbmRpbmcpCisJCVBy b2Nlc3NHZXRNZW1vcnlDb250ZXh0SW50ZXJydXB0KCk7CisKIAlpZiAoQ29uZmlnUmVsb2FkUGVu ZGluZykKIAl7CiAJCWNoYXIJICAgKmFyY2hpdmVMaWIgPSBwc3RyZHVwKFhMb2dBcmNoaXZlTGli cmFyeSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3N0YXJ0dXAuYyBiL3Ny Yy9iYWNrZW5kL3Bvc3RtYXN0ZXIvc3RhcnR1cC5jCmluZGV4IDI3ZTg2Y2YzOTNmLi43MTQ5YTY3 ZmNiYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9zdGFydHVwLmMKKysrIGIv c3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9zdGFydHVwLmMKQEAgLTE5Miw2ICsxOTIsMTAgQEAgUHJv Y2Vzc1N0YXJ0dXBQcm9jSW50ZXJydXB0cyh2b2lkKQogCS8qIFBlcmZvcm0gbG9nZ2luZyBvZiBt ZW1vcnkgY29udGV4dHMgb2YgdGhpcyBwcm9jZXNzICovCiAJaWYgKExvZ01lbW9yeUNvbnRleHRQ ZW5kaW5nKQogCQlQcm9jZXNzTG9nTWVtb3J5Q29udGV4dEludGVycnVwdCgpOworCisJLyogUHVi bGlzaCBtZW1vcnkgY29udGV4dHMgb2YgdGhpcyBwcm9jZXNzICovCisJaWYgKFB1Ymxpc2hNZW1v cnlDb250ZXh0UGVuZGluZykKKwkJUHJvY2Vzc0dldE1lbW9yeUNvbnRleHRJbnRlcnJ1cHQoKTsK IH0KIAogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dhbHN1bW1hcml6ZXIu YyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvd2Fsc3VtbWFyaXplci5jCmluZGV4IGM0YTg4OGEw ODFjLi4wMGYwM2IzNmVkOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci93YWxz dW1tYXJpemVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci93YWxzdW1tYXJpemVyLmMK QEAgLTg3OSw2ICs4NzksMTAgQEAgUHJvY2Vzc1dhbFN1bW1hcml6ZXJJbnRlcnJ1cHRzKHZvaWQp CiAJLyogUGVyZm9ybSBsb2dnaW5nIG9mIG1lbW9yeSBjb250ZXh0cyBvZiB0aGlzIHByb2Nlc3Mg Ki8KIAlpZiAoTG9nTWVtb3J5Q29udGV4dFBlbmRpbmcpCiAJCVByb2Nlc3NMb2dNZW1vcnlDb250 ZXh0SW50ZXJydXB0KCk7CisKKwkvKiBQdWJsaXNoIG1lbW9yeSBjb250ZXh0cyBvZiB0aGlzIHBy b2Nlc3MgKi8KKwlpZiAoUHVibGlzaE1lbW9yeUNvbnRleHRQZW5kaW5nKQorCQlQcm9jZXNzR2V0 TWVtb3J5Q29udGV4dEludGVycnVwdCgpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvc3RvcmFnZS9pcGMvaXBjaS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jCmlu ZGV4IGIyM2QwYzE5MzYwLi5hNWVkNThhMThjNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3Rv cmFnZS9pcGMvaXBjaS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYwpAQCAt NTIsNiArNTIsNyBAQAogI2luY2x1ZGUgInN0b3JhZ2Uvc2ludmFsYWR0LmgiCiAjaW5jbHVkZSAi dXRpbHMvZ3VjLmgiCiAjaW5jbHVkZSAidXRpbHMvaW5qZWN0aW9uX3BvaW50LmgiCisjaW5jbHVk ZSAidXRpbHMvbWVtdXRpbHMuaCIKIAogLyogR1VDcyAqLwogaW50CQkJc2hhcmVkX21lbW9yeV90 eXBlID0gREVGQVVMVF9TSEFSRURfTUVNT1JZX1RZUEU7CkBAIC0xNDAsNiArMTQxLDcgQEAgQ2Fs Y3VsYXRlU2htZW1TaXplKHZvaWQpCiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFNsb3RTeW5jU2ht ZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBBaW9TaG1lbVNpemUoKSk7CiAJc2l6 ZSA9IGFkZF9zaXplKHNpemUsIFdhaXRMU05TaG1lbVNpemUoKSk7CisJc2l6ZSA9IGFkZF9zaXpl KHNpemUsIE1lbW9yeUNvbnRleHRLZXlzU2htZW1TaXplKCkgKyBzaXplb2YoTFdMb2NrUGFkZGVk KSk7CiAKIAkvKiBpbmNsdWRlIGFkZGl0aW9uYWwgcmVxdWVzdGVkIHNobWVtIGZyb20gcHJlbG9h ZCBsaWJyYXJpZXMgKi8KIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgdG90YWxfYWRkaW5fcmVxdWVz dCk7CkBAIC0zMjgsNiArMzMwLDcgQEAgQ3JlYXRlT3JBdHRhY2hTaG1lbVN0cnVjdHModm9pZCkK IAlJbmplY3Rpb25Qb2ludFNobWVtSW5pdCgpOwogCUFpb1NobWVtSW5pdCgpOwogCVdhaXRMU05T aG1lbUluaXQoKTsKKwlNZW1vcnlDb250ZXh0S2V5c1NobWVtSW5pdCgpOwogfQogCiAvKgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jCmluZGV4IDA4NzgyMTMxMWNjLi44OTYzMjg1Y2Mx MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jCisrKyBi L3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYwpAQCAtNjkxLDYgKzY5MSw5IEBA IHByb2NzaWduYWxfc2lndXNyMV9oYW5kbGVyKFNJR05BTF9BUkdTKQogCWlmIChDaGVja1Byb2NT aWduYWwoUFJPQ1NJR19MT0dfTUVNT1JZX0NPTlRFWFQpKQogCQlIYW5kbGVMb2dNZW1vcnlDb250 ZXh0SW50ZXJydXB0KCk7CiAKKwlpZiAoQ2hlY2tQcm9jU2lnbmFsKFBST0NTSUdfR0VUX01FTU9S WV9DT05URVhUKSkKKwkJSGFuZGxlR2V0TWVtb3J5Q29udGV4dEludGVycnVwdCgpOworCiAJaWYg KENoZWNrUHJvY1NpZ25hbChQUk9DU0lHX1BBUkFMTEVMX0FQUExZX01FU1NBR0UpKQogCQlIYW5k bGVQYXJhbGxlbEFwcGx5TWVzc2FnZUludGVycnVwdCgpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2Mu YwppbmRleCAxNTA0ZmFmZTZkOC4uYzVlNjkxNTE3NTYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3N0b3JhZ2UvbG1nci9wcm9jLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2Mu YwpAQCAtNTEsNiArNTEsNyBAQAogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY3NpZ25hbC5oIgogI2lu Y2x1ZGUgInN0b3JhZ2Uvc3Bpbi5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc3RhbmRieS5oIgorI2lu Y2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVkZSAidXRpbHMvdGltZW91dC5oIgogI2lu Y2x1ZGUgInV0aWxzL3RpbWVzdGFtcC5oIgogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC90Y29w L3Bvc3RncmVzLmMgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKaW5kZXggMmJkODkxMDI2 ODYuLmRhOGYyYjk3OTg2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMK KysrIGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCkBAIC0zNTQ5LDYgKzM1NDksOSBAQCBQ cm9jZXNzSW50ZXJydXB0cyh2b2lkKQogCWlmIChMb2dNZW1vcnlDb250ZXh0UGVuZGluZykKIAkJ UHJvY2Vzc0xvZ01lbW9yeUNvbnRleHRJbnRlcnJ1cHQoKTsKIAorCWlmIChQdWJsaXNoTWVtb3J5 Q29udGV4dFBlbmRpbmcpCisJCVByb2Nlc3NHZXRNZW1vcnlDb250ZXh0SW50ZXJydXB0KCk7CisK IAlpZiAoUGFyYWxsZWxBcHBseU1lc3NhZ2VQZW5kaW5nKQogCQlQcm9jZXNzUGFyYWxsZWxBcHBs eU1lc3NhZ2VzKCk7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93 YWl0X2V2ZW50X25hbWVzLnR4dCBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZl bnRfbmFtZXMudHh0CmluZGV4IGMxYWM3MWZmN2YyLi42NDRkOGQ5ODhlMSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50eHQKKysrIGIvc3Jj L2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50eHQKQEAgLTE2Miw2ICsx NjIsNyBAQCBXQUxfUkVDRUlWRVJfRVhJVAkiV2FpdGluZyBmb3IgdGhlIFdBTCByZWNlaXZlciB0 byBleGl0LiIKIFdBTF9SRUNFSVZFUl9XQUlUX1NUQVJUCSJXYWl0aW5nIGZvciBzdGFydHVwIHBy b2Nlc3MgdG8gc2VuZCBpbml0aWFsIGRhdGEgZm9yIHN0cmVhbWluZyByZXBsaWNhdGlvbi4iCiBX QUxfU1VNTUFSWV9SRUFEWQkiV2FpdGluZyBmb3IgYSBuZXcgV0FMIHN1bW1hcnkgdG8gYmUgZ2Vu ZXJhdGVkLiIKIFhBQ1RfR1JPVVBfVVBEQVRFCSJXYWl0aW5nIGZvciB0aGUgZ3JvdXAgbGVhZGVy IHRvIHVwZGF0ZSB0cmFuc2FjdGlvbiBzdGF0dXMgYXQgdHJhbnNhY3Rpb24gZW5kLiIKK01FTV9D WFRfUFVCTElTSAkiV2FpdGluZyBmb3IgYSBwcm9jZXNzIHRvIHB1Ymxpc2ggbWVtb3J5IGluZm9y bWF0aW9uLiIKIAogQUJJX2NvbXBhdGliaWxpdHk6CiAKQEAgLTQwNCw2ICs0MDUsNyBAQCBTdWJ0 cmFuc1NMUlUJIldhaXRpbmcgdG8gYWNjZXNzIHRoZSBzdWItdHJhbnNhY3Rpb24gU0xSVSBjYWNo ZS4iCiBYYWN0U0xSVQkiV2FpdGluZyB0byBhY2Nlc3MgdGhlIHRyYW5zYWN0aW9uIHN0YXR1cyBT TFJVIGNhY2hlLiIKIFBhcmFsbGVsVmFjdXVtRFNBCSJXYWl0aW5nIGZvciBwYXJhbGxlbCB2YWN1 dW0gZHluYW1pYyBzaGFyZWQgbWVtb3J5IGFsbG9jYXRpb24uIgogQWlvVXJpbmdDb21wbGV0aW9u CSJXYWl0aW5nIGZvciBhbm90aGVyIHByb2Nlc3MgdG8gY29tcGxldGUgSU8gdmlhIGlvX3VyaW5n LiIKK01lbW9yeUNvbnRleHRSZXBvcnRpbmdLZXlzCSJXYWl0aW5nIGZvciBhbm90aGVyIHByb2Nl c3MgdG8gY29tcGxldGUgcmVhZGluZyBvciB3cml0aW5nIHRoZSBtZW1vcnkgcmVwb3J0aW5nIGtl eXMuIgogCiAjIE5vICJBQklfY29tcGF0aWJpbGl0eSIgcmVnaW9uIGhlcmUgYXMgV2FpdEV2ZW50 TFdMb2NrIGhhcyBpdHMgb3duIEMgY29kZS4KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L21jeHRmdW5jcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L21jeHRmdW5jcy5jCmlu ZGV4IGZlNmRjZTljYmEzLi5hNjJmM2Q2ZGM5MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L21jeHRmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9tY3h0ZnVuY3Mu YwpAQCAtMTUsMjAgKzE1LDUxIEBACiAKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCisjaW5jbHVk ZSAiYWNjZXNzL3R3b3BoYXNlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19hdXRoaWRfZC5oIgog I2luY2x1ZGUgImZ1bmNhcGkuaCIKICNpbmNsdWRlICJtYi9wZ193Y2hhci5oIgorI2luY2x1ZGUg Im1pc2NhZG1pbi5oIgorI2luY2x1ZGUgInN0b3JhZ2UvZHNtX3JlZ2lzdHJ5LmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9wcm9jLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIKKyNpbmNs dWRlICJ1dGlscy9hY2wuaCIKICNpbmNsdWRlICJ1dGlscy9hcnJheS5oIgogI2luY2x1ZGUgInV0 aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvaHNlYXJjaC5oIgorI2luY2x1ZGUgInV0 aWxzL2luamVjdGlvbl9wb2ludC5oIgorI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCisjaW5j bHVkZSAidXRpbHMvd2FpdF9ldmVudF90eXBlcy5oIgorCisjZGVmaW5lIENMSUVOVF9LRVlfU0la RSA2NAorCitzdGF0aWMgTFdMb2NrICpjbGllbnRfa2V5c19sb2NrID0gTlVMTDsKK3N0YXRpYyBp bnQgKmNsaWVudF9rZXlzID0gTlVMTDsKK3N0YXRpYyBkc2hhc2hfdGFibGUgKk1lbW9yeVN0YXRz RHNIYXNoID0gTlVMTDsKK3N0YXRpYyBkc2FfYXJlYSAqTWVtb3J5U3RhdHNEc2FBcmVhID0gTlVM TDsKKworc3RhdGljIHZvaWQgbWVtc3RhdHNfZHNhX2NsZWFudXAoY2hhciAqa2V5KTsKK3N0YXRp YyBjb25zdCBjaGFyICpDb250ZXh0VHlwZVRvU3RyaW5nKE5vZGVUYWcgdHlwZSk7CitzdGF0aWMg dm9pZCBQdWJsaXNoTWVtb3J5Q29udGV4dChNZW1vcnlTdGF0c0VudHJ5ICptZW1jeHRfaW5mbywK KwkJCQkJCQkJIGludCBjdXJyX2lkLCBNZW1vcnlDb250ZXh0IGNvbnRleHQsCisJCQkJCQkJCSBM aXN0ICpwYXRoLAorCQkJCQkJCQkgTWVtb3J5Q29udGV4dENvdW50ZXJzIHN0YXQsCisJCQkJCQkJ CSBpbnQgbnVtX2NvbnRleHRzKTsKK3N0YXRpYyBMaXN0ICpjb21wdXRlX2NvbnRleHRfcGF0aChN ZW1vcnlDb250ZXh0IGMsIEhUQUIgKmNvbnRleHRfaWRfbG9va3VwKTsKK3N0YXRpYyB2b2lkIGVu ZF9tZW1vcnljb250ZXh0X3JlcG9ydGluZyhNZW1vcnlTdGF0c0RTSGFzaEVudHJ5ICplbnRyeSwg TWVtb3J5Q29udGV4dCBvbGRjb250ZXh0LAorCQkJCQkJCQkJCUhUQUIgKmNvbnRleHRfaWRfbG9v a3VwKTsKIAogLyogLS0tLS0tLS0tLQogICogVGhlIG1heCBieXRlcyBmb3Igc2hvd2luZyBpZGVu dGlmaWVycyBvZiBNZW1vcnlDb250ZXh0LgorICogVGhpcyBpcyB1c2VkIGJ5IHBnX2dldF9iYWNr ZW5kX21lbW9yeV9jb250ZXh0IC0gdmlldyB1c2VkIGZvciBsb2NhbCBiYWNrZW5kLgogICogLS0t LS0tLS0tLQogICovCiAjZGVmaW5lIE1FTU9SWV9DT05URVhUX0lERU5UX0RJU1BMQVlfU0laRQkx MDI0CiAKKyNkZWZpbmUgTUFYX1BBVEhfRElTUExBWV9MRU5HVEgJMTAwCisvKiBUaW1lb3V0IGlu IHNlY29uZHMgKi8KKyNkZWZpbmUgTUVNT1JZX1NUQVRTX01BWF9USU1FT1VUIDUKKwogLyoKICAq IE1lbW9yeUNvbnRleHRJZAogICoJCVVzZWQgZm9yIHN0b3JhZ2Ugb2YgdHJhbnNpZW50IGlkZW50 aWZpZXJzIGZvcgpAQCAtODksNyArMTIwLDcgQEAgUHV0TWVtb3J5Q29udGV4dHNTdGF0c1R1cGxl U3RvcmUoVHVwbGVzdG9yZXN0YXRlICp0dXBzdG9yZSwKIAkgKi8KIAlmb3IgKE1lbW9yeUNvbnRl eHQgY3VyID0gY29udGV4dDsgY3VyICE9IE5VTEw7IGN1ciA9IGN1ci0+cGFyZW50KQogCXsKLQkJ TWVtb3J5Q29udGV4dElkICplbnRyeTsKKwkJTWVtb3J5U3RhdHNDb250ZXh0SWQgKmVudHJ5Owog CQlib29sCQlmb3VuZDsKIAogCQllbnRyeSA9IGhhc2hfc2VhcmNoKGNvbnRleHRfaWRfbG9va3Vw LCAmY3VyLCBIQVNIX0ZJTkQsICZmb3VuZCk7CkBAIC0xNDMsMjQgKzE3NCw3IEBAIFB1dE1lbW9y eUNvbnRleHRzU3RhdHNUdXBsZVN0b3JlKFR1cGxlc3RvcmVzdGF0ZSAqdHVwc3RvcmUsCiAJZWxz ZQogCQludWxsc1sxXSA9IHRydWU7CiAKLQlzd2l0Y2ggKGNvbnRleHQtPnR5cGUpCi0JewotCQlj YXNlIFRfQWxsb2NTZXRDb250ZXh0OgotCQkJdHlwZSA9ICJBbGxvY1NldCI7Ci0JCQlicmVhazsK LQkJY2FzZSBUX0dlbmVyYXRpb25Db250ZXh0OgotCQkJdHlwZSA9ICJHZW5lcmF0aW9uIjsKLQkJ CWJyZWFrOwotCQljYXNlIFRfU2xhYkNvbnRleHQ6Ci0JCQl0eXBlID0gIlNsYWIiOwotCQkJYnJl YWs7Ci0JCWNhc2UgVF9CdW1wQ29udGV4dDoKLQkJCXR5cGUgPSAiQnVtcCI7Ci0JCQlicmVhazsK LQkJZGVmYXVsdDoKLQkJCXR5cGUgPSAiPz8/IjsKLQkJCWJyZWFrOwotCX0KKwl0eXBlID0gQ29u dGV4dFR5cGVUb1N0cmluZyhjb250ZXh0LT50eXBlKTsKIAogCXZhbHVlc1syXSA9IENTdHJpbmdH ZXRUZXh0RGF0dW0odHlwZSk7CiAJdmFsdWVzWzNdID0gSW50MzJHZXREYXR1bShsaXN0X2xlbmd0 aChwYXRoKSk7CS8qIGxldmVsICovCkBAIC0xNzUsNiArMTg5LDM4IEBAIFB1dE1lbW9yeUNvbnRl eHRzU3RhdHNUdXBsZVN0b3JlKFR1cGxlc3RvcmVzdGF0ZSAqdHVwc3RvcmUsCiAJbGlzdF9mcmVl KHBhdGgpOwogfQogCisvKgorICogQ29udGV4dFR5cGVUb1N0cmluZworICoJCVJldHVybnMgYSB0 ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIGEgY29udGV4dCB0eXBlCisgKgorICogVGhpcyBzaG91 bGQgY292ZXIgdGhlIHNhbWUgdHlwZXMgYXMgTWVtb3J5Q29udGV4dElzVmFsaWQuCisgKi8KK2Nv bnN0IGNoYXIgKgorQ29udGV4dFR5cGVUb1N0cmluZyhOb2RlVGFnIHR5cGUpCit7CisJY29uc3Qg Y2hhciAqY29udGV4dF90eXBlOworCisJc3dpdGNoICh0eXBlKQorCXsKKwkJY2FzZSBUX0FsbG9j U2V0Q29udGV4dDoKKwkJCWNvbnRleHRfdHlwZSA9ICJBbGxvY1NldCI7CisJCQlicmVhazsKKwkJ Y2FzZSBUX0dlbmVyYXRpb25Db250ZXh0OgorCQkJY29udGV4dF90eXBlID0gIkdlbmVyYXRpb24i OworCQkJYnJlYWs7CisJCWNhc2UgVF9TbGFiQ29udGV4dDoKKwkJCWNvbnRleHRfdHlwZSA9ICJT bGFiIjsKKwkJCWJyZWFrOworCQljYXNlIFRfQnVtcENvbnRleHQ6CisJCQljb250ZXh0X3R5cGUg PSAiQnVtcCI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWNvbnRleHRfdHlwZSA9ICI/Pz8i OworCQkJYnJlYWs7CisJfQorCXJldHVybiBjb250ZXh0X3R5cGU7Cit9CisKIC8qCiAgKiBwZ19n ZXRfYmFja2VuZF9tZW1vcnlfY29udGV4dHMKICAqCQlTUUwgU1JGIHNob3dpbmcgYmFja2VuZCBt ZW1vcnkgY29udGV4dC4KQEAgLTE4OSw3ICsyMzUsNyBAQCBwZ19nZXRfYmFja2VuZF9tZW1vcnlf Y29udGV4dHMoUEdfRlVOQ1RJT05fQVJHUykKIAlIVEFCCSAgICpjb250ZXh0X2lkX2xvb2t1cDsK IAogCWN0bC5rZXlzaXplID0gc2l6ZW9mKE1lbW9yeUNvbnRleHQpOwotCWN0bC5lbnRyeXNpemUg PSBzaXplb2YoTWVtb3J5Q29udGV4dElkKTsKKwljdGwuZW50cnlzaXplID0gc2l6ZW9mKE1lbW9y eVN0YXRzQ29udGV4dElkKTsKIAljdGwuaGN4dCA9IEN1cnJlbnRNZW1vcnlDb250ZXh0OwogCiAJ Y29udGV4dF9pZF9sb29rdXAgPSBoYXNoX2NyZWF0ZSgicGdfZ2V0X2JhY2tlbmRfbWVtb3J5X2Nv bnRleHRzIiwKQEAgLTIxNiw3ICsyNjIsNyBAQCBwZ19nZXRfYmFja2VuZF9tZW1vcnlfY29udGV4 dHMoUEdfRlVOQ1RJT05fQVJHUykKIAogCWZvcmVhY2hfcHRyKE1lbW9yeUNvbnRleHREYXRhLCBj dXIsIGNvbnRleHRzKQogCXsKLQkJTWVtb3J5Q29udGV4dElkICplbnRyeTsKKwkJTWVtb3J5U3Rh dHNDb250ZXh0SWQgKmVudHJ5OwogCQlib29sCQlmb3VuZDsKIAogCQkvKgpAQCAtMjI0LDggKzI3 MCw4IEBAIHBnX2dldF9iYWNrZW5kX21lbW9yeV9jb250ZXh0cyhQR19GVU5DVElPTl9BUkdTKQog CQkgKiBQdXRNZW1vcnlDb250ZXh0c1N0YXRzVHVwbGVTdG9yZSBuZWVkcyB0aGlzIHRvIHBvcHVs YXRlIHRoZSAicGF0aCIKIAkJICogY29sdW1uIHdpdGggdGhlIHBhcmVudCBjb250ZXh0X2lkcy4K IAkJICovCi0JCWVudHJ5ID0gKE1lbW9yeUNvbnRleHRJZCAqKSBoYXNoX3NlYXJjaChjb250ZXh0 X2lkX2xvb2t1cCwgJmN1ciwKLQkJCQkJCQkJCQkJCUhBU0hfRU5URVIsICZmb3VuZCk7CisJCWVu dHJ5ID0gKE1lbW9yeVN0YXRzQ29udGV4dElkICopIGhhc2hfc2VhcmNoKGNvbnRleHRfaWRfbG9v a3VwLCAmY3VyLAorCQkJCQkJCQkJCQkJCSBIQVNIX0VOVEVSLCAmZm91bmQpOwogCQllbnRyeS0+ Y29udGV4dF9pZCA9IGNvbnRleHRfaWQrKzsKIAkJQXNzZXJ0KCFmb3VuZCk7CiAKQEAgLTMwNSwz ICszNTEsODIxIEBAIHBnX2xvZ19iYWNrZW5kX21lbW9yeV9jb250ZXh0cyhQR19GVU5DVElPTl9B UkdTKQogCiAJUEdfUkVUVVJOX0JPT0wodHJ1ZSk7CiB9CisKKy8qCisgKiBwZ19nZXRfcHJvY2Vz c19tZW1vcnlfY29udGV4dHMKKyAqCQlTaWduYWwgYSBiYWNrZW5kIG9yIGFuIGF1eGlsaWFyeSBw cm9jZXNzIHRvIHNlbmQgaXRzIG1lbW9yeSBjb250ZXh0cywKKyAqCQl3YWl0IGZvciB0aGUgcmVz dWx0cyBhbmQgZGlzcGxheSB0aGVtLgorICoKKyAqIEJ5IGRlZmF1bHQsIG9ubHkgc3VwZXJ1c2Vy cyBvciB1c2VycyB3aXRoIFJPTEVfUEdfUkVBRF9BTExfU1RBVFMgYXJlIGFsbG93ZWQKKyAqIHRv IHNpZ25hbCBhIHByb2Nlc3MgdG8gcmV0dXJuIHRoZSBtZW1vcnkgY29udGV4dHMuIFRoaXMgaXMg YmVjYXVzZSBhbGxvd2luZworICogYW55IHVzZXJzIHRvIGlzc3VlIHRoaXMgcmVxdWVzdCBhdCBh biB1bmJvdW5kZWQgcmF0ZSB3b3VsZCBjYXVzZSBsb3RzIG9mCisgKiByZXF1ZXN0cyB0byBiZSBz ZW50LCB3aGljaCBjYW4gbGVhZCB0byBkZW5pYWwgb2Ygc2VydmljZS4gQWRkaXRpb25hbCByb2xl cworICogY2FuIGJlIHBlcm1pdHRlZCB3aXRoIEdSQU5ULgorICoKKyAqIE9uIHJlY2VpcHQgb2Yg dGhpcyBzaWduYWwsIGEgYmFja2VuZCBvciBhbiBhdXhpbGlhcnkgcHJvY2VzcyBzZXRzIHRoZSBm bGFnCisgKiBpbiB0aGUgc2lnbmFsIGhhbmRsZXIsIHdoaWNoIGNhdXNlcyB0aGUgbmV4dCBDSEVD S19GT1JfSU5URVJSVVBUUygpCisgKiBvciBwcm9jZXNzLXNwZWNpZmljIGludGVycnVwdCBoYW5k bGVyIHRvIGNvcHkgdGhlIG1lbW9yeSBjb250ZXh0IGRldGFpbHMKKyAqIHRvIGEgZHluYW1pYyBz aGFyZWQgbWVtb3J5IHNwYWNlLgorICoKKyAqIFdlIGhhdmUgZGVmaW5lZCBhIGxpbWl0IG9uIERT QSBtZW1vcnkgdGhhdCBjb3VsZCBiZSBhbGxvY2F0ZWQgcGVyIHByb2Nlc3MgLQorICogaWYgdGhl IHByb2Nlc3MgaGFzIG1vcmUgbWVtb3J5IGNvbnRleHRzIHRoYW4gd2hhdCBjYW4gZml0IGluIHRo ZSBhbGxvY2F0ZWQKKyAqIHNpemUsIHRoZSBleGNlc3MgY29udGV4dHMgYXJlIHN1bW1hcml6ZWQg YW5kIHJlcHJlc2VudGVkIGFzIGN1bXVsYXRpdmUgdG90YWwKKyAqIGF0IHRoZSBlbmQgb2YgdGhl IGJ1ZmZlci4KKyAqCisgKiBBZnRlciBzZW5kaW5nIHRoZSBzaWduYWwsIHdhaXQgb24gYSBjb25k aXRpb24gdmFyaWFibGUuIFRoZSBwdWJsaXNoaW5nCisgKiBiYWNrZW5kLCBhZnRlciBjb3B5aW5n IHRoZSBkYXRhIHRvIHNoYXJlZCBtZW1vcnksIHNlbmRzIHNpZ25hbCBvbiB0aGF0CisgKiBjb25k aXRpb24gdmFyaWFibGUuIFRoZXJlIGlzIG9uZSBjb25kaXRpb24gdmFyaWFibGUgcGVyIGNsaWVu dCBwcm9jZXNzLgorICogT25jZSB0aGUgY29uZGl0aW9uIHZhcmlhYmxlIGlzIHNpZ25hbGxlZCwg Y2hlY2sgaWYgdGhlIGxhdGVzdCBtZW1vcnkgY29udGV4dAorICogaW5mb3JtYXRpb24gaXMgYXZh aWxhYmxlIGFuZCBkaXNwbGF5LgorICoKKyAqIElmIHRoZSBwdWJsaXNoaW5nIGJhY2tlbmQgZG9l cyBub3QgcmVzcG9uZCBiZWZvcmUgdGhlIGNvbmRpdGlvbiB2YXJpYWJsZQorICogdGltZXMgb3V0 LCB3aGljaCBpcyBzZXQgdG8gYSBwcmVkZWZpbmVkIHZhbHVlIE1FTU9SWV9TVEFUU19NQVhfVElN RU9VVCwgZ2l2ZSB1cAorICogYW5kIHJldHVybiBOVUxMLgorICovCitEYXR1bQorcGdfZ2V0X3By b2Nlc3NfbWVtb3J5X2NvbnRleHRzKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJaW50CQkJcGlkID0g UEdfR0VUQVJHX0lOVDMyKDApOworCWJvb2wJCXN1bW1hcnkgPSBQR19HRVRBUkdfQk9PTCgxKTsK KwlQR1BST0MJICAgKnByb2M7CisJUHJvY051bWJlcglwcm9jTnVtYmVyID0gSU5WQUxJRF9QUk9D X05VTUJFUjsKKwlib29sCQlwcm9jX2lzX2F1eCA9IGZhbHNlOworCVJldHVyblNldEluZm8gKnJz aW5mbyA9IChSZXR1cm5TZXRJbmZvICopIGZjaW5mby0+cmVzdWx0aW5mbzsKKwlNZW1vcnlTdGF0 c0VudHJ5ICptZW1jeHRfaW5mbzsKKwlNZW1vcnlTdGF0c0RTSGFzaEVudHJ5ICplbnRyeTsKKwli b29sCQlmb3VuZDsKKwljaGFyCQlrZXlbQ0xJRU5UX0tFWV9TSVpFXTsKKwlUaW1lc3RhbXBUeiBz dGFydF90aW1lc3RhbXA7CisKKwkvKgorCSAqIFNlZSBpZiB0aGUgcHJvY2VzcyB3aXRoIGdpdmVu IHBpZCBpcyBhIGJhY2tlbmQgb3IgYW4gYXV4aWxpYXJ5IHByb2Nlc3MKKwkgKiBhbmQgcmVtZW1i ZXIgdGhlIHR5cGUgZm9yIHdoZW4gd2UgcmVxdWVyeSB0aGUgcHJvY2VzcyBsYXRlci4KKwkgKi8K Kwlwcm9jID0gQmFja2VuZFBpZEdldFByb2MocGlkKTsKKwlpZiAocHJvYyA9PSBOVUxMKQorCXsK KwkJcHJvYyA9IEF1eGlsaWFyeVBpZEdldFByb2MocGlkKTsKKwkJcHJvY19pc19hdXggPSB0cnVl OworCX0KKworCS8qCisJICogQmFja2VuZFBpZEdldFByb2MoKSBhbmQgQXV4aWxpYXJ5UGlkR2V0 UHJvYygpIHJldHVybiBOVUxMIGlmIHRoZSBwaWQKKwkgKiBpc24ndCB2YWxpZDsgdGhpcyBpcyBo b3dldmVyIG5vdCBhIHByb2JsZW0gYW5kIGxlYXZlIHdpdGggYSBXQVJOSU5HLgorCSAqIFNlZSBj b21tZW50IGluIHBnX2xvZ19iYWNrZW5kX21lbW9yeV9jb250ZXh0cyBmb3IgYSBkaXNjdXNzaW9u IG9uIHRoaXMuCisJICovCisJaWYgKHByb2MgPT0gTlVMTCkKKwl7CisJCS8qCisJCSAqIFRoaXMg aXMgYSB3YXJuaW5nIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBicmVhayBsb29wcy4KKwkJICov CisJCWVyZXBvcnQoV0FSTklORywKKwkJCQllcnJtc2coIlBJRCAlZCBpcyBub3QgYSBQb3N0Z3Jl U1FMIHNlcnZlciBwcm9jZXNzIiwgcGlkKSk7CisJCVBHX1JFVFVSTl9OVUxMKCk7CisJfQorCisJ SW5pdE1hdGVyaWFsaXplZFNSRihmY2luZm8sIDApOworCisJcHJvY051bWJlciA9IEdldE51bWJl ckZyb21QR1Byb2MocHJvYyk7CisKKwkvKgorCSAqIENyZWF0ZSBhIERTQSB0byBhbGxvY2F0ZSBt ZW1vcnkgZm9yIGNvcHlpbmcgbWVtb3J5IGNvbnRleHRzIHN0YXRpc3RpY3MuCisJICogQWxsb2Nh dGUgdGhlIG1lbW9yeSBpbiB0aGUgRFNBIGFuZCBzZW5kIGRzYSBwb2ludGVyIHRvIHRoZSBzZXJ2 ZXIKKwkgKiBwcm9jZXNzIGZvciBzdG9yaW5nIHRoZSBjb250ZXh0IHN0YXRpc3RpY3MuIElmIG51 bWJlciBvZiBjb250ZXh0cworCSAqIGV4Y2VlZCBhIHByZWRlZmluZWQgbGltaXQgKDFNQiksIGEg Y3VtdWxhdGl2ZSB0b3RhbCBpcyBzdG9yZWQgZm9yIHN1Y2gKKwkgKiBjb250ZXh0cy4KKwkgKgor CSAqIFRoZSBEU0EgaXMgY3JlYXRlZCBvbmNlIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIHNlcnZl ciwgYW5kIG9ubHkKKwkgKiBhdHRhY2hlZCBpbiBzdWJzZXF1ZW50IGNhbGxzLgorCSAqLworCWlm IChNZW1vcnlTdGF0c0RzYUFyZWEgPT0gTlVMTCkKKwkJTWVtb3J5U3RhdHNEc2FBcmVhID0gR2V0 TmFtZWREU0EoIm1lbW9yeV9jb250ZXh0X3N0YXRpc3RpY3NfZHNhIiwgJmZvdW5kKTsKKworCS8q CisJICogVGhlIGRzYSBwb2ludGVycyBjb250YWluaW5nIHN0YXRpc3RpY3MgZm9yIGVhY2ggY2xp ZW50IGFyZSBzdG9yZWQgaW4gYQorCSAqIGRzaGFzaCB0YWJsZS4gSW4gYWRkaXRpb24gdG8gZHNh IHBvaW50ZXIsIGVhY2ggZW50cnkgaW4gdGhpcyB0YWJsZSBhbHNvCisJICogY29udGFpbnMgaW5m b3JtYXRpb24gYWJvdXQgdGhlIHN0YXRpc3RpY3MsIGNvbmRpdGlvbiB2YXJpYWJsZSBmb3IKKwkg KiBzaWduYWxsaW5nIGJldHdlZW4gY2xpZW50IGFuZCB0aGUgc2VydmVyIGFuZCBtaXNjZWxsYW5l b3VzIGRhdGEKKwkgKiBzcGVjaWZpYyB0byBhIHJlcXVlc3QuIFRoZXJlIGlzIG9uZSBlbnRyeSBw ZXIgY2xpZW50IHJlcXVlc3QgaW4gdGhlCisJICogaGFzaCB0YWJsZS4KKwkgKi8KKwlpZiAoTWVt b3J5U3RhdHNEc0hhc2ggPT0gTlVMTCkKKwkJTWVtb3J5U3RhdHNEc0hhc2ggPSBHZXROYW1lZERT SGFzaCgibWVtb3J5X2NvbnRleHRfc3RhdGlzdGljc19kc2hhc2giLCAmbWVtY3R4X2RzaF9wYXJh bXMsICZmb3VuZCk7CisKKwlzbnByaW50ZihrZXksIHNpemVvZihrZXkpLCAiJWQiLCBNeVByb2NO dW1iZXIpOworCisJLyoKKwkgKiBDaGVjayBpZiB0aGUgcHVibGlzaGluZyBwcm9jZXNzIHNsb3Qg aXMgZW1wdHkgYW5kIHN0b3JlIHRoaXMgY2xpZW50cworCSAqIGtleSBpLmUgaXRzIHByb2NOdW1i ZXIuIFRoaXMgaW5mb3JtcyB0aGUgcHVibGlzaGluZyBwcm9jZXNzIHRoYXQgaXQgaXMKKwkgKiBz dXBwb3NlZCB0byB3cml0ZSBzdGF0aXN0aWNzIGluIHRoZSBoYXNoIGVudHJ5IGNvcnJlc3BvbmRp bmcgdG8gdGhpcworCSAqIGNsaWVudC4KKwkgKi8KKwlMV0xvY2tBY3F1aXJlKGNsaWVudF9rZXlz X2xvY2ssIExXX0VYQ0xVU0lWRSk7CisKKwkvKgorCSAqIFhYWC4gSWYgdGhlIHByb2Nlc3MgZXhp dHMgd2l0aG91dCBjbGVhbmluZyB1cCBpdHMgc2xvdCwgaS5lIGluIGNhc2Ugb2YKKwkgKiBhbiBh YnJ1cHQgY3Jhc2ggdGhlIGNsaWVudF9rZXlzIHNsb3Qgd29uJ3QgYmUgcmVzZXQgdGh1cyByZXN1 bHRpbmcgaW4KKwkgKiBmYWxzZSBuZWdhdGl2ZSBhbmQgV0FSTklORyB3b3VsZCBiZSB0aHJvd24g aW4gY2FzZSBhbm90aGVyIHByb2Nlc3Mgd2l0aAorCSAqIHNhbWUgc2xvdCBpbmRleCBpcyBxdWVy aWVkIGZvciBzdGF0aXN0aWNzLgorCSAqLworCWlmIChjbGllbnRfa2V5c1twcm9jTnVtYmVyXSA9 PSAtMSkKKwkJY2xpZW50X2tleXNbcHJvY051bWJlcl0gPSBNeVByb2NOdW1iZXI7CisJZWxzZQor CXsKKwkJTFdMb2NrUmVsZWFzZShjbGllbnRfa2V5c19sb2NrKTsKKwkJZXJlcG9ydChXQVJOSU5H LAorCQkJCWVycm1zZygic2VydmVyIHByb2Nlc3MgJWQgaXMgcHJvY2Vzc2luZyBwcmV2aW91cyBy ZXF1ZXN0IiwgcGlkKSk7CisJCVBHX1JFVFVSTl9OVUxMKCk7CisJfQorCUxXTG9ja1JlbGVhc2Uo Y2xpZW50X2tleXNfbG9jayk7CisKKwkvKgorCSAqIEluc2VydCBhbiBlbnRyeSBmb3IgdGhpcyBj bGllbnQgaW4gRFNIQVNIIHRhYmxlIHRoZSBmaXJzdCB0aW1lIHRoaXMKKwkgKiBmdW5jdGlvbiBp cyBjYWxsZWQuIFRoaXMgZW50cnkgaXMgZGVsZXRlZCB3aGVuIHRoZSBwcm9jZXNzIGV4aXRzIGlu CisJICogYmVmb3JlX3NobWVtX2V4aXQgY2FsbC4KKwkgKgorCSAqIGRzaGFzaF9maW5kX29yX2lu c2VydCBsb2NrcyB0aGUgZW50cnkgdG8gcHJldmVudCB0aGUgcHVibGlzaGVyIGZyb20KKwkgKiBy ZWFkaW5nIGJlZm9yZSBjbGllbnQgaGFzIHVwZGF0ZWQgdGhlIGVudHJ5LgorCSAqLworCWVudHJ5 ID0gZHNoYXNoX2ZpbmRfb3JfaW5zZXJ0KE1lbW9yeVN0YXRzRHNIYXNoLCBrZXksICZmb3VuZCk7 CisJaWYgKCFmb3VuZCkKKwl7CisJCWVudHJ5LT5zdGF0c193cml0dGVuID0gZmFsc2U7CisJCUNv bmRpdGlvblZhcmlhYmxlSW5pdCgmZW50cnktPm1lbWN4dF9jdik7CisJfQorCisJLyoKKwkgKiBB bGxvY2F0ZSAxTUIgb2YgbWVtb3J5IGZvciB0aGUgYmFja2VuZCB0byBwdWJsaXNoIGl0cyBzdGF0 aXN0aWNzIG9uCisJICogZXZlcnkgY2FsbCB0byB0aGlzIGZ1bmN0aW9uLiBUaGUgbWVtb3J5IGlz IGZyZWVkIGF0IHRoZSBlbmQgb2YgdGhlCisJICogZnVuY3Rpb24uCisJICovCisJZW50cnktPm1l bXN0YXRzX2RzYV9wb2ludGVyID0KKwkJZHNhX2FsbG9jYXRlMChNZW1vcnlTdGF0c0RzYUFyZWEs IE1FTU9SWV9DT05URVhUX1JFUE9SVF9NQVhfUEVSX0JBQ0tFTkQpOworCisJLyoKKwkgKiBTcGVj aWZ5IHdoZXRoZXIgYSBzdW1tYXJ5IG9mIHN0YXRpc3RpY3MgaXMgcmVxdWVzdGVkLCBiZWZvcmUg c2lnbmFsbGluZworCSAqIHRoZSBzZXJ2ZXIuCisJICovCisJZW50cnktPnN1bW1hcnkgPSBzdW1t YXJ5OworCisJLyoKKwkgKiBJbmRpY2F0ZSB3aGljaCBzZXJ2ZXIgcHJvY2VzcyBzdGF0aXN0aWNz IGFyZSBiZWluZyByZXF1ZXN0ZWQgZnJvbS4gSWYKKwkgKiB0aGlzIGNsaWVudCB0aW1lcyBvdXQg YmVmb3JlIHRoZSBsYXN0IHJlcXVlc3RlZCBwcm9jZXNzIGNhbiBwdWJsaXNoIGl0cworCSAqIHN0 YXRpc3RpY3MsIGl0IG1heSBzZW5kIGEgbmV3IHJlcXVlc3QgdG8gYW5vdGhlciBzZXJ2ZXIgcHJv Y2Vzcy4gU2luY2UKKwkgKiB0aGUgcHJldmlvdXMgc2VydmVyIHdhcyBub3RpZmllZCwgaXQgbWln aHQgYXR0ZW1wdCB0byByZWFkIHRoZSBzYW1lCisJICogY2xpZW50IGVudHJ5IGFuZCByZXNwb25k IGluY29ycmVjdGx5IHdpdGggaXRzIHN0YXRpc3RpY3MuIEJ5IHN0b3JpbmcKKwkgKiB0aGUgc2Vy dmVyIElEIGluIHRoZSBjbGllbnQgZW50cnksIHdlIHByZXZlbnQgYW55IHByZXZpb3VzbHkgc2ln bmFsbGVkCisJICogc2VydmVyIHByb2Nlc3MgZnJvbSB3cml0aW5nIGl0cyBzdGF0aXN0aWNzIGlu IHRoZSBzcGFjZSBtZWFudCBmb3IgdGhlCisJICogbmV3bHkgcmVxdWVzdGVkIHByb2Nlc3MuCisJ ICovCisJZW50cnktPnRhcmdldF9zZXJ2ZXJfaWQgPSBwaWQ7CisJZHNoYXNoX3JlbGVhc2VfbG9j ayhNZW1vcnlTdGF0c0RzSGFzaCwgZW50cnkpOworCisJLyoKKwkgKiBTZW5kIGEgc2lnbmFsIHRv IGEgUG9zdGdyZVNRTCBwcm9jZXNzLCBpbmZvcm1pbmcgaXQgd2Ugd2FudCBpdCB0bworCSAqIHBy b2R1Y2UgaW5mb3JtYXRpb24gYWJvdXQgaXRzIG1lbW9yeSBjb250ZXh0cy4KKwkgKi8KKwlpZiAo U2VuZFByb2NTaWduYWwocGlkLCBQUk9DU0lHX0dFVF9NRU1PUllfQ09OVEVYVCwgcHJvY051bWJl cikgPCAwKQorCXsKKwkJbWVtc3RhdHNfZHNhX2NsZWFudXAoa2V5KTsKKwkJZXJlcG9ydChXQVJO SU5HLAorCQkJCWVycm1zZygiY291bGQgbm90IHNlbmQgc2lnbmFsIHRvIHByb2Nlc3MgJWQ6ICVt IiwgcGlkKSk7CisJCVBHX1JFVFVSTl9OVUxMKCk7CisJfQorCXN0YXJ0X3RpbWVzdGFtcCA9IEdl dEN1cnJlbnRUaW1lc3RhbXAoKTsKKworCXdoaWxlICgxKQorCXsKKwkJbG9uZwkJZWxhcHNlZF90 aW1lOworCisJCWVudHJ5ID0gZHNoYXNoX2ZpbmRfb3JfaW5zZXJ0KE1lbW9yeVN0YXRzRHNIYXNo LCBrZXksICZmb3VuZCk7CisJCUFzc2VydChmb3VuZCk7CisKKwkJSU5KRUNUSU9OX1BPSU5UKCJt ZW1jb250ZXh0LWNsaWVudC1jcmFzaCIsIE5VTEwpOworCisJCW1lbWN4dF9pbmZvID0gKE1lbW9y eVN0YXRzRW50cnkgKikKKwkJCWRzYV9nZXRfYWRkcmVzcyhNZW1vcnlTdGF0c0RzYUFyZWEsIGVu dHJ5LT5tZW1zdGF0c19kc2FfcG9pbnRlcik7CisKKwkJLyoKKwkJICogV2UgZXhwZWN0IHRvIGNv bWUgb3V0IG9mIHNsZWVwIHdoZW4gdGhlIHJlcXVlc3RlZCBwcm9jZXNzIGhhcworCQkgKiBmaW5p c2hlZCBwdWJsaXNoaW5nIHRoZSBzdGF0aXN0aWNzLCB2ZXJpZmllZCB1c2luZyBhIGJvb2xlYW4K KwkJICogc3RhdHNfd3JpdHRlbi4KKwkJICoKKwkJICogTWFrZSBzdXJlIHRoYXQgdGhlIHN0YXRp c3RpY3MgYXJlIGFjdHVhbGx5IHdyaXR0ZW4gYnkgY2hlY2tpbmcgdGhhdAorCQkgKiB0aGUgbmFt ZSBvZiB0aGUgY29udGV4dCBpcyBub3QgTlVMTC4gVGhpcyBpcyBkb25lIHRvIGVuc3VyZSB0aGF0 CisJCSAqIHRoZSBzdWJzZXF1ZW50IHdhaXRzIGZvciBzdGF0aXN0aWNzIGRvIG5vdCByZXR1cm4g c3B1cmlvdXNseSBpZiB0aGUKKwkJICogcHJldmlvdXMgY2FsbCB0byB0aGUgZnVuY3Rpb24gZW5k ZWQgaW4gZXJyb3IgYW5kIHRodXMgY291bGQgbm90CisJCSAqIGNsZWFyIHRoZSBzdGF0c193cml0 dGVuIGZsYWcuCisJCSAqLworCQlpZiAoZW50cnktPnN0YXRzX3dyaXR0ZW4gJiYgbWVtY3h0X2lu Zm9bMF0ubmFtZVswXSAhPSAnXDAnKQorCQkJYnJlYWs7CisKKwkJZHNoYXNoX3JlbGVhc2VfbG9j ayhNZW1vcnlTdGF0c0RzSGFzaCwgZW50cnkpOworCisJCWVsYXBzZWRfdGltZSA9IFRpbWVzdGFt cERpZmZlcmVuY2VNaWxsaXNlY29uZHMoc3RhcnRfdGltZXN0YW1wLAorCQkJCQkJCQkJCQkJCSAg IEdldEN1cnJlbnRUaW1lc3RhbXAoKSk7CisJCS8qIFJldHVybiBpZiB3ZSBoYXZlIGFscmVhZHkg ZXhjZWVkZWQgdGhlIHRpbWVvdXQgKi8KKwkJaWYgKGVsYXBzZWRfdGltZSA+PSBNRU1PUllfU1RB VFNfTUFYX1RJTUVPVVQgKiAxMDAwKQorCQl7CisJCQltZW1zdGF0c19kc2FfY2xlYW51cChrZXkp OworCQkJUEdfUkVUVVJOX05VTEwoKTsKKwkJfQorCisJCS8qCisJCSAqIFJlY2hlY2sgdGhlIHN0 YXRlIG9mIHRoZSBiYWNrZW5kIGJlZm9yZSBzbGVlcGluZyBvbiB0aGUgY29uZGl0aW9uCisJCSAq IHZhcmlhYmxlIHRvIGVuc3VyZSB0aGUgcHJvY2VzcyBpcyBzdGlsbCBhbGl2ZS4gIE9ubHkgY2hl Y2sgdGhlCisJCSAqIHJlbGV2YW50IHByb2Nlc3MgdHlwZSBiYXNlZCBvbiB0aGUgZWFybGllciBQ SUQgY2hlY2suCisJCSAqLworCQlpZiAocHJvY19pc19hdXgpCisJCQlwcm9jID0gQXV4aWxpYXJ5 UGlkR2V0UHJvYyhwaWQpOworCQllbHNlCisJCQlwcm9jID0gQmFja2VuZFBpZEdldFByb2MocGlk KTsKKworCQkvKgorCQkgKiBUaGUgdGFyZ2V0IHNlcnZlciBwcm9jZXNzIGVuZGluZyBkdXJpbmcg bWVtb3J5IGNvbnRleHQgcHJvY2Vzc2luZworCQkgKiBpcyBub3QgYW4gZXJyb3IuCisJCSAqLwor CQlpZiAocHJvYyA9PSBOVUxMKQorCQl7CisJCQltZW1zdGF0c19kc2FfY2xlYW51cChrZXkpOwor CQkJQ29uZGl0aW9uVmFyaWFibGVDYW5jZWxTbGVlcCgpOworCQkJZXJlcG9ydChXQVJOSU5HLAor CQkJCQllcnJtc2coIlBJRCAlZCBpcyBubyBsb25nZXIgYSBQb3N0Z3JlU1FMIHNlcnZlciBwcm9j ZXNzIiwKKwkJCQkJCSAgIHBpZCkpOworCQkJUEdfUkVUVVJOX05VTEwoKTsKKwkJfQorCisJCUlO SkVDVElPTl9QT0lOVCgibWVtY29udGV4dC1jbGllbnQtY3Jhc2giLCBOVUxMKTsKKworCQkvKgor CQkgKiBXYWl0IGZvciBNRU1PUllfU1RBVFNfTUFYX1RJTUVPVVQuIElmIG5vIHN0YXRpc3RpY3Mg YXJlIGF2YWlsYWJsZQorCQkgKiB3aXRoaW4gdGhlIGFsbG93ZWQgdGltZSB0aGVuIHJldHVybiBO VUxMLiBUaGUgdGltZXIgaXMgZGVmaW5lZCBpbgorCQkgKiBtaWxsaXNlY29uZHMgc2luY2UgdGhh dCdzIHdoYXQgdGhlIGNvbmRpdGlvbiB2YXJpYWJsZSBzbGVlcCB1c2VzLgorCQkgKi8KKwkJaWYg KENvbmRpdGlvblZhcmlhYmxlVGltZWRTbGVlcCgmZW50cnktPm1lbWN4dF9jdiwKKwkJCQkJCQkJ CQkoTUVNT1JZX1NUQVRTX01BWF9USU1FT1VUICogMTAwMCksIFdBSVRfRVZFTlRfTUVNX0NYVF9Q VUJMSVNIKSkKKwkJeworCQkJLyogVGltZW91dCBoYXMgZXhwaXJlZCwgcmV0dXJuIE5VTEwgKi8K KwkJCW1lbXN0YXRzX2RzYV9jbGVhbnVwKGtleSk7CisJCQlDb25kaXRpb25WYXJpYWJsZUNhbmNl bFNsZWVwKCk7CisJCQlQR19SRVRVUk5fTlVMTCgpOworCQl9CisJfQorCisJLyoKKwkgKiBCYWNr ZW5kIGhhcyBmaW5pc2hlZCBwdWJsaXNoaW5nIHRoZSBzdGF0cywgcHJvamVjdCB0aGVtLgorCSAq LworI2RlZmluZSBQR19HRVRfUFJPQ0VTU19NRU1PUllfQ09OVEVYVFNfQ09MUwkxMQorCWZvciAo aW50IGkgPSAwOyBpIDwgZW50cnktPnRvdGFsX3N0YXRzOyBpKyspCisJeworCQlBcnJheVR5cGUg ICpwYXRoX2FycmF5OworCQlpbnQJCQlwYXRoX2xlbmd0aDsKKwkJRGF0dW0JCXZhbHVlc1tQR19H RVRfUFJPQ0VTU19NRU1PUllfQ09OVEVYVFNfQ09MU107CisJCWJvb2wJCW51bGxzW1BHX0dFVF9Q Uk9DRVNTX01FTU9SWV9DT05URVhUU19DT0xTXTsKKwkJRGF0dW0JICAgKnBhdGhfZGF0dW0gPSBO VUxMOworCisJCW1lbXNldCh2YWx1ZXMsIDAsIHNpemVvZih2YWx1ZXMpKTsKKwkJbWVtc2V0KG51 bGxzLCAwLCBzaXplb2YobnVsbHMpKTsKKworCQlBc3NlcnQobWVtY3h0X2luZm9baV0ubmFtZVsw XSAhPSAnXDAnKTsKKwkJdmFsdWVzWzBdID0gQ1N0cmluZ0dldFRleHREYXR1bShtZW1jeHRfaW5m b1tpXS5uYW1lKTsKKworCQlpZiAobWVtY3h0X2luZm9baV0uaWRlbnRbMF0gIT0gJ1wwJykKKwkJ CXZhbHVlc1sxXSA9IENTdHJpbmdHZXRUZXh0RGF0dW0obWVtY3h0X2luZm9baV0uaWRlbnQpOwor CQllbHNlCisJCQludWxsc1sxXSA9IHRydWU7CisKKwkJdmFsdWVzWzJdID0gQ1N0cmluZ0dldFRl eHREYXR1bShDb250ZXh0VHlwZVRvU3RyaW5nKG1lbWN4dF9pbmZvW2ldLnR5cGUpKTsKKwkJdmFs dWVzWzNdID0gSW50MzJHZXREYXR1bShtZW1jeHRfaW5mb1tpXS5sZXZlbHMpOworCisJCXBhdGhf bGVuZ3RoID0gbWVtY3h0X2luZm9baV0ucGF0aF9sZW5ndGg7CisJCXBhdGhfZGF0dW0gPSAoRGF0 dW0gKikgcGFsbG9jKHBhdGhfbGVuZ3RoICogc2l6ZW9mKERhdHVtKSk7CisJCWlmIChtZW1jeHRf aW5mb1tpXS5wYXRoWzBdICE9IDApCisJCXsKKwkJCWZvciAoaW50IGogPSAwOyBqIDwgcGF0aF9s ZW5ndGg7IGorKykKKwkJCQlwYXRoX2RhdHVtW2pdID0gSW50MzJHZXREYXR1bShtZW1jeHRfaW5m b1tpXS5wYXRoW2pdKTsKKwkJCXBhdGhfYXJyYXkgPSBjb25zdHJ1Y3RfYXJyYXlfYnVpbHRpbihw YXRoX2RhdHVtLCBwYXRoX2xlbmd0aCwgSU5UNE9JRCk7CisJCQl2YWx1ZXNbNF0gPSBQb2ludGVy R2V0RGF0dW0ocGF0aF9hcnJheSk7CisJCX0KKwkJZWxzZQorCQkJbnVsbHNbNF0gPSB0cnVlOwor CisJCXZhbHVlc1s1XSA9IEludDY0R2V0RGF0dW0obWVtY3h0X2luZm9baV0udG90YWxzcGFjZSk7 CisJCXZhbHVlc1s2XSA9IEludDY0R2V0RGF0dW0obWVtY3h0X2luZm9baV0ubmJsb2Nrcyk7CisJ CXZhbHVlc1s3XSA9IEludDY0R2V0RGF0dW0obWVtY3h0X2luZm9baV0uZnJlZXNwYWNlKTsKKwkJ dmFsdWVzWzhdID0gSW50NjRHZXREYXR1bShtZW1jeHRfaW5mb1tpXS5mcmVlY2h1bmtzKTsKKwkJ dmFsdWVzWzldID0gSW50NjRHZXREYXR1bShtZW1jeHRfaW5mb1tpXS50b3RhbHNwYWNlIC0KKwkJ CQkJCQkJICBtZW1jeHRfaW5mb1tpXS5mcmVlc3BhY2UpOworCQl2YWx1ZXNbMTBdID0gSW50MzJH ZXREYXR1bShtZW1jeHRfaW5mb1tpXS5udW1fYWdnX3N0YXRzKTsKKworCQl0dXBsZXN0b3JlX3B1 dHZhbHVlcyhyc2luZm8tPnNldFJlc3VsdCwgcnNpbmZvLT5zZXREZXNjLAorCQkJCQkJCSB2YWx1 ZXMsIG51bGxzKTsKKwl9CisJZHNoYXNoX3JlbGVhc2VfbG9jayhNZW1vcnlTdGF0c0RzSGFzaCwg ZW50cnkpOworCW1lbXN0YXRzX2RzYV9jbGVhbnVwKGtleSk7CisKKwlDb25kaXRpb25WYXJpYWJs ZUNhbmNlbFNsZWVwKCk7CisKKwlQR19SRVRVUk5fTlVMTCgpOworfQorCitzdGF0aWMgdm9pZAor bWVtc3RhdHNfZHNhX2NsZWFudXAoY2hhciAqa2V5KQoreworCU1lbW9yeVN0YXRzRFNIYXNoRW50 cnkgKmVudHJ5OworCisJZW50cnkgPSBkc2hhc2hfZmluZChNZW1vcnlTdGF0c0RzSGFzaCwga2V5 LCB0cnVlKTsKKworCUFzc2VydChNZW1vcnlTdGF0c0RzYUFyZWEgIT0gTlVMTCk7CisJZHNhX2Zy ZWUoTWVtb3J5U3RhdHNEc2FBcmVhLCBlbnRyeS0+bWVtc3RhdHNfZHNhX3BvaW50ZXIpOworCWVu dHJ5LT5tZW1zdGF0c19kc2FfcG9pbnRlciA9IEludmFsaWREc2FQb2ludGVyOworCWVudHJ5LT5z dGF0c193cml0dGVuID0gZmFsc2U7CisJZW50cnktPnRhcmdldF9zZXJ2ZXJfaWQgPSAwOworCisJ ZHNoYXNoX3JlbGVhc2VfbG9jayhNZW1vcnlTdGF0c0RzSGFzaCwgZW50cnkpOworfQordm9pZAor TWVtb3J5Q29udGV4dEtleXNTaG1lbUluaXQodm9pZCkKK3sKKwlib29sCQlmb3VuZDsKKworCWNs aWVudF9rZXlzID0gKGludCAqKQorCQlTaG1lbUluaXRTdHJ1Y3QoIk1lbW9yeUNvbnRleHRLZXlz IiwKKwkJCQkJCU1lbW9yeUNvbnRleHRLZXlzU2htZW1TaXplKCkgKyBzaXplb2YoTFdMb2NrUGFk ZGVkKSwgJmZvdW5kKTsKKwljbGllbnRfa2V5c19sb2NrID0gKExXTG9jayAqKSAoKGNoYXIgKikg Y2xpZW50X2tleXMgKyBNZW1vcnlDb250ZXh0S2V5c1NobWVtU2l6ZSgpKTsKKworCWlmICghZm91 bmQpCisJeworCQlNZW1TZXQoY2xpZW50X2tleXMsIC0xLCBNZW1vcnlDb250ZXh0S2V5c1NobWVt U2l6ZSgpKTsKKwkJTFdMb2NrSW5pdGlhbGl6ZShjbGllbnRfa2V5c19sb2NrLCBMV1RSQU5DSEVf TUVNT1JZX0NPTlRFWFRfS0VZUyk7CisJfQorfQorCitTaXplCitNZW1vcnlDb250ZXh0S2V5c1No bWVtU2l6ZSh2b2lkKQoreworCVNpemUJCXN6ID0gMDsKKwlTaXplCQlUb3RhbFByb2NzID0gMDsK KworCVRvdGFsUHJvY3MgPSBhZGRfc2l6ZShUb3RhbFByb2NzLCBOVU1fQVVYSUxJQVJZX1BST0NT KTsKKwlUb3RhbFByb2NzID0gYWRkX3NpemUoVG90YWxQcm9jcywgTWF4QmFja2VuZHMpOworCXN6 ID0gYWRkX3NpemUoc3osIG11bF9zaXplKFRvdGFsUHJvY3MsIHNpemVvZihpbnQpKSk7CisKKwly ZXR1cm4gc3o7Cit9CisKKy8qCisgKiBIYW5kbGVHZXRNZW1vcnlDb250ZXh0SW50ZXJydXB0Cisg KgkJSGFuZGxlIHJlY2VpcHQgb2YgYW4gaW50ZXJydXB0IGluZGljYXRpbmcgYSByZXF1ZXN0IHRv IHB1Ymxpc2ggbWVtb3J5CisgKgkJY29udGV4dHMgc3RhdGlzdGljcy4KKyAqCisgKiBBbGwgdGhl IGFjdHVhbCB3b3JrIGlzIGRlZmVycmVkIHRvIFByb2Nlc3NHZXRNZW1vcnlDb250ZXh0SW50ZXJy dXB0KCkgYXMKKyAqIHRoaXMgY2Fubm90IGJlIHBlcmZvcm1lZCBpbiBhIHNpZ25hbCBoYW5kbGVy LgorICovCit2b2lkCitIYW5kbGVHZXRNZW1vcnlDb250ZXh0SW50ZXJydXB0KHZvaWQpCit7CisJ SW50ZXJydXB0UGVuZGluZyA9IHRydWU7CisJUHVibGlzaE1lbW9yeUNvbnRleHRQZW5kaW5nID0g dHJ1ZTsKKwkvKiBsYXRjaCB3aWxsIGJlIHNldCBieSBwcm9jc2lnbmFsX3NpZ3VzcjFfaGFuZGxl ciAqLworfQorCisvKgorICogUHJvY2Vzc0dldE1lbW9yeUNvbnRleHRJbnRlcnJ1cHQKKyAqCQlH ZW5lcmF0ZSBpbmZvcm1hdGlvbiBhYm91dCBtZW1vcnkgY29udGV4dHMgdXNlZCBieSB0aGUgcHJv Y2Vzcy4KKyAqCisgKiBQZXJmb3JtcyBhIGJyZWFkdGggZmlyc3Qgc2VhcmNoIG9uIHRoZSBtZW1v cnkgY29udGV4dCB0cmVlLCB0aHVzIHBhcmVudHMKKyAqIHN0YXRpc3RpY3MgYXJlIHJlcG9ydGVk IGJlZm9yZSB0aGVpciBjaGlsZHJlbiBpbiB0aGUgbW9uaXRvcmluZyBmdW5jdGlvbgorICogb3V0 cHV0LgorICoKKyAqIFN0YXRpc3RpY3MgZm9yIGFsbCB0aGUgcHJvY2Vzc2VzIGFyZSBzaGFyZWQg dmlhIHRoZSBzYW1lIGR5bmFtaWMgc2hhcmVkCisgKiBhcmVhLiBJbmRpdmlkdWFsIHN0YXRpc3Rp Y3MgYXJlIHRyYWNrZWQgaW5kZXBlbmRlbnRseSBpbgorICogcGVyLXByb2Nlc3MgRFNBIHBvaW50 ZXJzLiBUaGVzZSBwb2ludGVycyBhcmUgc3RvcmVkIGluIGEgZHNoYXNoIHRhYmxlIHdpdGgKKyAq IGtleSBhcyByZXF1ZXN0aW5nIGNsaWVudHMgUHJvY051bWJlci4KKyAqCisgKiBXZSBjYWxjdWxh dGUgbWF4aW11bSBudW1iZXIgb2YgY29udGV4dCdzIHN0YXRpc3RpY3MgdGhhdCBjYW4gYmUgZGlz cGxheWVkCisgKiB1c2luZyBhIHByZS1kZXRlcm1pbmVkIGxpbWl0IGZvciBtZW1vcnkgYXZhaWxh YmxlIHBlciBwcm9jZXNzIGZvciB0aGlzCisgKiB1dGlsaXR5IGFuZCBtYXhpbXVtIHNpemUgb2Yg c3RhdGlzdGljcyBmb3IgZWFjaCBjb250ZXh0LiAgVGhlIHJlbWFpbmluZworICogY29udGV4dCBz dGF0aXN0aWNzIGlmIGFueSBhcmUgY2FwdHVyZWQgYXMgYSBjdW11bGF0aXZlIHRvdGFsIGF0IHRo ZSBlbmQgb2YKKyAqIGluZGl2aWR1YWwgY29udGV4dCdzIHN0YXRpc3RpY3MuCisgKgorICogSWYg c3VtbWFyeSBpcyB0cnVlLCB3ZSBjYXB0dXJlIHRoZSBsZXZlbCAxIGFuZCBsZXZlbCAyIGNvbnRl eHRzCisgKiBzdGF0aXN0aWNzLiAgRm9yIHRoYXQgd2UgdHJhdmVyc2UgdGhlIG1lbW9yeSBjb250 ZXh0IHRyZWUgcmVjdXJzaXZlbHkgaW4KKyAqIGRlcHRoIGZpcnN0IHNlYXJjaCBtYW5uZXIgdG8g Y292ZXIgYWxsIHRoZSBjaGlsZHJlbiBvZiBhIHBhcmVudCBjb250ZXh0LCB0bworICogYmUgYWJs ZSB0byBkaXNwbGF5IGEgY3VtdWxhdGl2ZSB0b3RhbCBvZiBtZW1vcnkgY29uc3VtcHRpb24gYnkg YSBwYXJlbnQgYXQKKyAqIGxldmVsIDIgYW5kIGFsbCBpdHMgY2hpbGRyZW4uCisgKi8KK3ZvaWQK K1Byb2Nlc3NHZXRNZW1vcnlDb250ZXh0SW50ZXJydXB0KHZvaWQpCit7CisJTGlzdAkgICAqY29u dGV4dHM7CisJSEFTSENUTAkJY3RsOworCUhUQUIJICAgKmNvbnRleHRfaWRfbG9va3VwOworCWlu dAkJCWNvbnRleHRfaWQgPSAwOworCU1lbW9yeVN0YXRzRW50cnkgKm1lbWluZm87CisJYm9vbAkJ c3VtbWFyeSA9IGZhbHNlOworCU1lbW9yeUNvbnRleHRDb3VudGVycyBzdGF0OworCWludAkJCW51 bV9pbmRpdmlkdWFsX3N0YXRzID0gMDsKKwlib29sCQlmb3VuZDsKKwlNZW1vcnlTdGF0c0RTSGFz aEVudHJ5ICplbnRyeTsKKwljaGFyCQlrZXlbQ0xJRU5UX0tFWV9TSVpFXTsKKwlpbnQJCQljbGll bnRQcm9jTnVtYmVyOworCU1lbW9yeUNvbnRleHQgbWVtc3RhdHNfY3R4ID0gTlVMTDsKKwlNZW1v cnlDb250ZXh0IG9sZGNvbnRleHQgPSBOVUxMOworCisJUHVibGlzaE1lbW9yeUNvbnRleHRQZW5k aW5nID0gZmFsc2U7CisKKwkvKgorCSAqIFJldHJlaXZlIHRoZSBjbGllbnQga2V5IGZvciBwdWJs aXNoaW5nIHN0YXRpc3RpY3MgYW5kIHJlc2V0IGl0IHRvIC0xLAorCSAqIHNvIG90aGVyIGNsaWVu dHMgY2FuIHJlcXVlc3QgbWVtb3J5IHN0YXRpc3RpY3MgZnJvbSB0aGlzIHByb2Nlc3MKKwkgKi8K KwlMV0xvY2tBY3F1aXJlKGNsaWVudF9rZXlzX2xvY2ssIExXX1NIQVJFRCk7CisJQXNzZXJ0KGNs aWVudF9rZXlzW015UHJvY051bWJlcl0gIT0gLTEpOworCWNsaWVudFByb2NOdW1iZXIgPSBjbGll bnRfa2V5c1tNeVByb2NOdW1iZXJdOworCWNsaWVudF9rZXlzW015UHJvY051bWJlcl0gPSAtMTsK KwlMV0xvY2tSZWxlYXNlKGNsaWVudF9rZXlzX2xvY2spOworCisJLyoKKwkgKiBDcmVhdGUgYSBu ZXcgbWVtb3J5IGNvbnRleHQgd2hpY2ggaXMgbm90IGEgcGFydCBvZiBUb3BNZW1vcnlDb250ZXh0 CisJICogdHJlZS4gVGhpcyBjb250ZXh0IGlzIHVzZWQgdG8gYWxsb2NhdGUgYWxsIG1lbW9yeSBp biB0aGlzIGZ1bmN0aW9uLgorCSAqIFRoaXMgaGVscHMgaW4ga2VlcGluZyB0aGUgbWVtb3J5IGFs bG9jYXRpb24gaW4gdGhpcyBmdW5jdGlvbiB0byByZXBvcnQKKwkgKiBtZW1vcnkgY29uc3VtcHRp b24gc3RhdGlzdGljcyBzZXBhcmF0ZS4gU28gdGhhdCBpdCBkb2VzIG5vdCBhZmZlY3QgdGhlCisJ ICogb3V0cHV0IG9mIHRoaXMgZnVuY3Rpb24uCisJICovCisJbWVtc3RhdHNfY3R4ID0gQWxsb2NT ZXRDb250ZXh0Q3JlYXRlKChNZW1vcnlDb250ZXh0KSBOVUxMLCAicHVibGlzaF9tZW1vcnlfY29u dGV4dF9zdGF0aXN0aWNzIiwKKwkJCQkJCQkJCQkgQUxMT0NTRVRfU01BTExfU0laRVMpOworCW9s ZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8obWVtc3RhdHNfY3R4KTsKKworCS8qCisJ ICogVGhlIGhhc2ggdGFibGUgaXMgdXNlZCBmb3IgY29uc3RydWN0aW5nICJwYXRoIiBjb2x1bW4g b2YgdGhlIHZpZXcsCisJICogc2ltaWxhciB0byBpdHMgbG9jYWwgYmFja2VuZCBjb3VudGVycGFy dC4KKwkgKi8KKwljdGwua2V5c2l6ZSA9IHNpemVvZihNZW1vcnlDb250ZXh0KTsKKwljdGwuZW50 cnlzaXplID0gc2l6ZW9mKE1lbW9yeVN0YXRzQ29udGV4dElkKTsKKwljdGwuaGN4dCA9IEN1cnJl bnRNZW1vcnlDb250ZXh0OworCisJY29udGV4dF9pZF9sb29rdXAgPSBoYXNoX2NyZWF0ZSgicGdf Z2V0X3JlbW90ZV9iYWNrZW5kX21lbW9yeV9jb250ZXh0cyIsCisJCQkJCQkJCQkyNTYsCisJCQkJ CQkJCQkmY3RsLAorCQkJCQkJCQkJSEFTSF9FTEVNIHwgSEFTSF9CTE9CUyB8IEhBU0hfQ09OVEVY VCk7CisKKwkvKiBMaXN0IG9mIGNvbnRleHRzIHRvIHByb2Nlc3MgaW4gdGhlIG5leHQgcm91bmQg LSBzdGFydCBhdCB0aGUgdG9wLiAqLworCWNvbnRleHRzID0gbGlzdF9tYWtlMShUb3BNZW1vcnlD b250ZXh0KTsKKworCS8qCisJICogSWYgRFNBIGV4aXN0cywgY3JlYXRlZCBieSBhbm90aGVyIHBy b2Nlc3MgcmVxdWVzdGluZyBzdGF0aXN0aWNzLCBhdHRhY2gKKwkgKiB0byBpdC4gV2UgZXhwZWN0 IHRoZSBjbGllbnQgcHJvY2VzcyB0byBjcmVhdGUgcmVxdWlyZWQgRFNBIGFuZCBEc2hhc2gKKwkg KiB0YWJsZS4KKwkgKi8KKwlpZiAoTWVtb3J5U3RhdHNEc2FBcmVhID09IE5VTEwpCisJCU1lbW9y eVN0YXRzRHNhQXJlYSA9IEdldE5hbWVkRFNBKCJtZW1vcnlfY29udGV4dF9zdGF0aXN0aWNzX2Rz YSIsICZmb3VuZCk7CisKKwlpZiAoTWVtb3J5U3RhdHNEc0hhc2ggPT0gTlVMTCkKKwkJTWVtb3J5 U3RhdHNEc0hhc2ggPSBHZXROYW1lZERTSGFzaCgibWVtb3J5X2NvbnRleHRfc3RhdGlzdGljc19k c2hhc2giLCAmbWVtY3R4X2RzaF9wYXJhbXMsICZmb3VuZCk7CisKKworCXNucHJpbnRmKGtleSwg Q0xJRU5UX0tFWV9TSVpFLCAiJWQiLCBjbGllbnRQcm9jTnVtYmVyKTsKKworCS8qCisJICogVGhl IGVudHJ5IGxvY2sgaXMgaGVsZCBieSBkc2hhc2hfZmluZF9vcl9pbnNlcnQgdG8gcHJvdGVjdCB3 cml0ZXMgdG8KKwkgKiBwcm9jZXNzIHNwZWNpZmljIG1lbW9yeS4gVHdvIGRpZmZlcmVudCBwcm9j ZXNzZXMgcHVibGlzaGluZyBzdGF0aXN0aWNzCisJICogZG8gbm90IGJsb2NrIGVhY2ggb3RoZXIu CisJICovCisJSU5KRUNUSU9OX1BPSU5UKCJtZW1jb250ZXh0LXNlcnZlci1jcmFzaCIsIE5VTEwp OworCWVudHJ5ID0gZHNoYXNoX2ZpbmRfb3JfaW5zZXJ0KE1lbW9yeVN0YXRzRHNIYXNoLCBrZXks ICZmb3VuZCk7CisKKwkvKgorCSAqIEVudHJ5IGhhcyBiZWVuIGRlbGV0ZWQgZHVlIHRvIGNsaWVu dCBwcm9jZXNzIGV4aXQuIE1ha2Ugc3VyZSB0aGF0IHRoZQorCSAqIGNsaWVudCBhbHdheXMgZGVs ZXRlcyB0aGUgZW50cnkgYWZ0ZXIgdGFraW5nIHJlcXVpcmVkIGxvY2sgb3IgdGhpcworCSAqIGZ1 bmN0aW9uIG1heSBlbmQgdXAgd3JpdGluZyB0byB1bmFsbG9jYXRlZCBtZW1vcnkuCisJICovCisJ aWYgKCFmb3VuZCkKKwl7CisJCWVudHJ5LT5zdGF0c193cml0dGVuID0gZmFsc2U7CisJCWVuZF9t ZW1vcnljb250ZXh0X3JlcG9ydGluZyhlbnRyeSwgb2xkY29udGV4dCwgY29udGV4dF9pZF9sb29r dXApOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBUaGUgY2xpZW50IGhhcyB0aW1lZCBvdXQg d2FpdGluZyBmb3IgdXMgdG8gd3JpdGUgc3RhdGlzdGljcyBhbmQgaXMKKwkgKiByZXF1ZXN0aW5n IHN0YXRpc3RpY3MgZnJvbSBzb21lIG90aGVyIHByb2Nlc3MKKwkgKi8KKwlpZiAoZW50cnktPnRh cmdldF9zZXJ2ZXJfaWQgIT0gTXlQcm9jUGlkKQorCXsKKwkJZW50cnktPnN0YXRzX3dyaXR0ZW4g PSBmYWxzZTsKKwkJZW5kX21lbW9yeWNvbnRleHRfcmVwb3J0aW5nKGVudHJ5LCBvbGRjb250ZXh0 LCBjb250ZXh0X2lkX2xvb2t1cCk7CisJCXJldHVybjsKKwl9CisJc3VtbWFyeSA9IGVudHJ5LT5z dW1tYXJ5OworCisJLyogU2hvdWxkIGJlIGFsbG9jYXRlZCBieSBhIGNsaWVudCBiYWNrZW5kIHRo YXQgaXMgcmVxdWVzdGluZyBzdGF0aXN0aWNzICovCisJQXNzZXJ0KGVudHJ5LT5tZW1zdGF0c19k c2FfcG9pbnRlciAhPSBJbnZhbGlkRHNhUG9pbnRlcik7CisJbWVtaW5mbyA9IChNZW1vcnlTdGF0 c0VudHJ5ICopCisJCWRzYV9nZXRfYWRkcmVzcyhNZW1vcnlTdGF0c0RzYUFyZWEsIGVudHJ5LT5t ZW1zdGF0c19kc2FfcG9pbnRlcik7CisKKwlpZiAoc3VtbWFyeSkKKwl7CisJCWludAkJCWN4dF9p ZCA9IDA7CisJCUxpc3QJICAgKnBhdGggPSBOSUw7CisJCU1lbW9yeVN0YXRzQ29udGV4dElkICpj b250ZXh0aWRfZW50cnk7CisKKwkJLyogQ29weSBUb3BNZW1vcnlDb250ZXh0IHN0YXRpc3RpY3Mg dG8gRFNBICovCisJCW1lbXNldCgmc3RhdCwgMCwgc2l6ZW9mKHN0YXQpKTsKKwkJKCpUb3BNZW1v cnlDb250ZXh0LT5tZXRob2RzLT5zdGF0cykgKFRvcE1lbW9yeUNvbnRleHQsIE5VTEwsIE5VTEws CisJCQkJCQkJCQkJCSAmc3RhdCwgdHJ1ZSk7CisJCXBhdGggPSBsY29uc19pbnQoMSwgcGF0aCk7 CisJCVB1Ymxpc2hNZW1vcnlDb250ZXh0KG1lbWluZm8sIGN4dF9pZCwgVG9wTWVtb3J5Q29udGV4 dCwgcGF0aCwgc3RhdCwKKwkJCQkJCQkgMSk7CisKKwkJY29udGV4dGlkX2VudHJ5ID0gKE1lbW9y eVN0YXRzQ29udGV4dElkICopIGhhc2hfc2VhcmNoKGNvbnRleHRfaWRfbG9va3VwLCAmVG9wTWVt b3J5Q29udGV4dCwKKwkJCQkJCQkJCQkJCQkJCSAgIEhBU0hfRU5URVIsICZmb3VuZCk7CisJCUFz c2VydCghZm91bmQpOworCisJCS8qCisJCSAqIGNvbnRleHQgaWQgc3RhcnRzIHdpdGggMQorCQkg Ki8KKwkJY29udGV4dGlkX2VudHJ5LT5jb250ZXh0X2lkID0gY3h0X2lkICsgMTsKKworCQkvKgor CQkgKiBDb3B5IHN0YXRpc3RpY3MgZm9yIGVhY2ggb2YgVG9wTWVtb3J5Q29udGV4dHMgY2hpbGRy ZW4uICBUaGlzCisJCSAqIGluY2x1ZGVzIHN0YXRpc3RpY3Mgb2YgYXQgbW9zdCAxMDAgY2hpbGRy ZW4gcGVyIG5vZGUsIHdpdGggZWFjaAorCQkgKiBjaGlsZCBub2RlIGxpbWl0ZWQgdG8gYSBkZXB0 aCBvZiAxMDAgaW4gaXRzIHN1YnRyZWUuCisJCSAqLworCQlmb3IgKE1lbW9yeUNvbnRleHQgYyA9 IFRvcE1lbW9yeUNvbnRleHQtPmZpcnN0Y2hpbGQ7IGMgIT0gTlVMTDsKKwkJCSBjID0gYy0+bmV4 dGNoaWxkKQorCQl7CisJCQlNZW1vcnlDb250ZXh0Q291bnRlcnMgZ3JhbmRfdG90YWxzOworCQkJ aW50CQkJbnVtX2NvbnRleHRzID0gMDsKKworCQkJcGF0aCA9IE5JTDsKKwkJCW1lbXNldCgmZ3Jh bmRfdG90YWxzLCAwLCBzaXplb2YoZ3JhbmRfdG90YWxzKSk7CisKKwkJCWN4dF9pZCsrOworCQkJ Y29udGV4dGlkX2VudHJ5ID0gKE1lbW9yeVN0YXRzQ29udGV4dElkICopIGhhc2hfc2VhcmNoKGNv bnRleHRfaWRfbG9va3VwLCAmYywKKwkJCQkJCQkJCQkJCQkJCQkgICBIQVNIX0VOVEVSLCAmZm91 bmQpOworCQkJQXNzZXJ0KCFmb3VuZCk7CisJCQljb250ZXh0aWRfZW50cnktPmNvbnRleHRfaWQg PSBjeHRfaWQgKyAxOworCisJCQlNZW1vcnlDb250ZXh0U3RhdHNDb3VudGVyKGMsICZncmFuZF90 b3RhbHMsICZudW1fY29udGV4dHMpOworCisJCQlwYXRoID0gY29tcHV0ZV9jb250ZXh0X3BhdGgo YywgY29udGV4dF9pZF9sb29rdXApOworCisJCQlQdWJsaXNoTWVtb3J5Q29udGV4dChtZW1pbmZv LCBjeHRfaWQsIGMsIHBhdGgsCisJCQkJCQkJCSBncmFuZF90b3RhbHMsIG51bV9jb250ZXh0cyk7 CisJCX0KKwkJZW50cnktPnRvdGFsX3N0YXRzID0gY3h0X2lkICsgMTsKKworCQllbnRyeS0+c3Rh dHNfd3JpdHRlbiA9IHRydWU7CisJCWVuZF9tZW1vcnljb250ZXh0X3JlcG9ydGluZyhlbnRyeSwg b2xkY29udGV4dCwgY29udGV4dF9pZF9sb29rdXApOworCQkvKiBOb3RpZnkgd2FpdGluZyBiYWNr ZW5kcyBhbmQgcmV0dXJuICovCisJCUNvbmRpdGlvblZhcmlhYmxlQnJvYWRjYXN0KCZlbnRyeS0+ bWVtY3h0X2N2KTsKKwkJcmV0dXJuOworCX0KKwlmb3JlYWNoX3B0cihNZW1vcnlDb250ZXh0RGF0 YSwgY3VyLCBjb250ZXh0cykKKwl7CisJCUxpc3QJICAgKnBhdGggPSBOSUw7CisJCU1lbW9yeVN0 YXRzQ29udGV4dElkICpjb250ZXh0aWRfZW50cnk7CisKKwkJY29udGV4dGlkX2VudHJ5ID0gKE1l bW9yeVN0YXRzQ29udGV4dElkICopIGhhc2hfc2VhcmNoKGNvbnRleHRfaWRfbG9va3VwLCAmY3Vy LAorCQkJCQkJCQkJCQkJCQkJICAgSEFTSF9FTlRFUiwgJmZvdW5kKTsKKwkJQXNzZXJ0KCFmb3Vu ZCk7CisKKwkJLyoKKwkJICogY29udGV4dCBpZCBzdGFydHMgd2l0aCAxCisJCSAqLworCQljb250 ZXh0aWRfZW50cnktPmNvbnRleHRfaWQgPSBjb250ZXh0X2lkICsgMTsKKworCQkvKgorCQkgKiBG aWd1cmUgb3V0IHRoZSB0cmFuc2llbnQgY29udGV4dF9pZCBvZiB0aGlzIGNvbnRleHQgYW5kIGVh Y2ggb2YgaXRzCisJCSAqIGFuY2VzdG9ycywgdG8gY29tcHV0ZSBhIHBhdGggZm9yIHRoaXMgY29u dGV4dC4KKwkJICovCisJCXBhdGggPSBjb21wdXRlX2NvbnRleHRfcGF0aChjdXIsIGNvbnRleHRf aWRfbG9va3VwKTsKKworCQkvKiBFeGFtaW5lIHRoZSBjb250ZXh0IHN0YXRzICovCisJCW1lbXNl dCgmc3RhdCwgMCwgc2l6ZW9mKHN0YXQpKTsKKwkJKCpjdXItPm1ldGhvZHMtPnN0YXRzKSAoY3Vy LCBOVUxMLCBOVUxMLCAmc3RhdCwgdHJ1ZSk7CisKKwkJLyogQWNjb3VudCBmb3Igc2F2aW5nIG9u ZSBzdGF0aXN0aWNzIHNsb3QgZm9yIGN1bXVsYXRpdmUgcmVwb3J0aW5nICovCisJCWlmIChjb250 ZXh0X2lkIDwgKE1BWF9NRU1PUllfQ09OVEVYVF9TVEFUU19OVU0gLSAxKSkKKwkJeworCQkJLyog Q29weSBzdGF0aXN0aWNzIHRvIERTQSBtZW1vcnkgKi8KKwkJCVB1Ymxpc2hNZW1vcnlDb250ZXh0 KG1lbWluZm8sIGNvbnRleHRfaWQsIGN1ciwgcGF0aCwgc3RhdCwgMSk7CisJCX0KKwkJZWxzZQor CQl7CisJCQltZW1pbmZvW01BWF9NRU1PUllfQ09OVEVYVF9TVEFUU19OVU0gLSAxXS50b3RhbHNw YWNlICs9IHN0YXQudG90YWxzcGFjZTsKKwkJCW1lbWluZm9bTUFYX01FTU9SWV9DT05URVhUX1NU QVRTX05VTSAtIDFdLm5ibG9ja3MgKz0gc3RhdC5uYmxvY2tzOworCQkJbWVtaW5mb1tNQVhfTUVN T1JZX0NPTlRFWFRfU1RBVFNfTlVNIC0gMV0uZnJlZXNwYWNlICs9IHN0YXQuZnJlZXNwYWNlOwor CQkJbWVtaW5mb1tNQVhfTUVNT1JZX0NPTlRFWFRfU1RBVFNfTlVNIC0gMV0uZnJlZWNodW5rcyAr PSBzdGF0LmZyZWVjaHVua3M7CisJCX0KKworCQkvKgorCQkgKiBEU0EgbWF4IGxpbWl0IHBlciBw cm9jZXNzIGlzIHJlYWNoZWQsIHdyaXRlIGFnZ3JlZ2F0ZSBvZiB0aGUKKwkJICogcmVtYWluaW5n IHN0YXRpc3RpY3MuCisJCSAqCisJCSAqIFdlIGNhbiBzdG9yZSBjb250ZXh0cyBmcm9tIDAgdG8g bWF4X3N0YXRzIC0gMS4gV2hlbiBjb250ZXh0X2lkIGlzCisJCSAqIGdyZWF0ZXIgdGhhbiBtYXhf c3RhdHMsIHdlIHN0b3AgcmVwb3J0aW5nIGluZGl2aWR1YWwgc3RhdGlzdGljcworCQkgKiB3aGVu IGNvbnRleHRfaWQgZXF1YWxzIG1heF9zdGF0cyAtIDIuIEFzIHdlIHVzZSBtYXhfc3RhdHMgLSAx IGFycmF5CisJCSAqIHNsb3QgZm9yIHJlcG9ydGluZyBjdW11bGF0aXZlIHN0YXRpc3RpY3Mgb3Ig IlJlbWFpbmluZyBUb3RhbHMiLgorCQkgKi8KKwkJaWYgKGNvbnRleHRfaWQgPT0gKE1BWF9NRU1P UllfQ09OVEVYVF9TVEFUU19OVU0gLSAyKSkKKwkJeworCQkJaW50CQkJbmFtZWxlbiA9IHN0cmxl bigiUmVtYWluaW5nIFRvdGFscyIpOworCisJCQludW1faW5kaXZpZHVhbF9zdGF0cyA9IGNvbnRl eHRfaWQgKyAxOworCQkJc3RybGNweShtZW1pbmZvW01BWF9NRU1PUllfQ09OVEVYVF9TVEFUU19O VU0gLSAxXS5uYW1lLCAiUmVtYWluaW5nIFRvdGFscyIsIG5hbWVsZW4gKyAxKTsKKwkJCW1lbWlu Zm9bTUFYX01FTU9SWV9DT05URVhUX1NUQVRTX05VTSAtIDFdLmlkZW50WzBdID0gJ1wwJzsKKwkJ CW1lbWluZm9bTUFYX01FTU9SWV9DT05URVhUX1NUQVRTX05VTSAtIDFdLnBhdGhbMF0gPSAwOwor CQkJbWVtaW5mb1tNQVhfTUVNT1JZX0NPTlRFWFRfU1RBVFNfTlVNIC0gMV0udHlwZSA9IDA7CisJ CX0KKwkJY29udGV4dF9pZCsrOworCisJCWZvciAoTWVtb3J5Q29udGV4dCBjID0gY3VyLT5maXJz dGNoaWxkOyBjICE9IE5VTEw7IGMgPSBjLT5uZXh0Y2hpbGQpCisJCQljb250ZXh0cyA9IGxhcHBl bmQoY29udGV4dHMsIGMpOworCX0KKworCS8qCisJICogU3RhdGlzdGljcyBhcmUgbm90IGFnZ3Jl Z2F0ZWQsIGkuZSBpbmRpdmlkdWFsIHN0YXRpc3RpY3MgcmVwb3J0ZWQgd2hlbgorCSAqIGNvbnRl eHRfaWQgPD0gbWF4X3N0YXRzLgorCSAqLworCWlmIChjb250ZXh0X2lkIDw9IE1BWF9NRU1PUllf Q09OVEVYVF9TVEFUU19OVU0pCisJeworCQllbnRyeS0+dG90YWxfc3RhdHMgPSBjb250ZXh0X2lk OworCQltZW1pbmZvW01BWF9NRU1PUllfQ09OVEVYVF9TVEFUU19OVU0gLSAxXS5udW1fYWdnX3N0 YXRzID0gMTsKKwl9CisJLyogUmVwb3J0IG51bWJlciBvZiBhZ2dyZWdhdGVkIG1lbW9yeSBjb250 ZXh0cyAqLworCWVsc2UKKwl7CisJCW1lbWluZm9bTUFYX01FTU9SWV9DT05URVhUX1NUQVRTX05V TSAtIDFdLm51bV9hZ2dfc3RhdHMgPSBjb250ZXh0X2lkIC0KKwkJCW51bV9pbmRpdmlkdWFsX3N0 YXRzOworCisJCS8qCisJCSAqIFRvdGFsIHN0YXRzIGVxdWFscyBudW1faW5kaXZpZHVhbF9zdGF0 cyArIDEgcmVjb3JkIGZvciBjdW11bGF0aXZlCisJCSAqIHN0YXRpc3RpY3MuCisJCSAqLworCQll bnRyeS0+dG90YWxfc3RhdHMgPSBudW1faW5kaXZpZHVhbF9zdGF0cyArIDE7CisJfQorCWVudHJ5 LT5zdGF0c193cml0dGVuID0gdHJ1ZTsKKwllbmRfbWVtb3J5Y29udGV4dF9yZXBvcnRpbmcoZW50 cnksIG9sZGNvbnRleHQsIGNvbnRleHRfaWRfbG9va3VwKTsKKwkvKiBOb3RpZnkgd2FpdGluZyBi YWNrZW5kcyBhbmQgcmV0dXJuICovCisJQ29uZGl0aW9uVmFyaWFibGVCcm9hZGNhc3QoJmVudHJ5 LT5tZW1jeHRfY3YpOworfQorCisvKgorICogQ2xlYW4gdXAgYmVmb3JlIGV4aXQgZnJvbSBQcm9j ZXNzR2V0TWVtb3J5Q29udGV4dEludGVycnVwdAorICovCitzdGF0aWMgdm9pZAorZW5kX21lbW9y eWNvbnRleHRfcmVwb3J0aW5nKE1lbW9yeVN0YXRzRFNIYXNoRW50cnkgKmVudHJ5LCBNZW1vcnlD b250ZXh0IG9sZGNvbnRleHQsIEhUQUIgKmNvbnRleHRfaWRfbG9va3VwKQoreworCU1lbW9yeUNv bnRleHQgY3Vycl9jdHggPSBDdXJyZW50TWVtb3J5Q29udGV4dDsKKworCWRzaGFzaF9yZWxlYXNl X2xvY2soTWVtb3J5U3RhdHNEc0hhc2gsIGVudHJ5KTsKKworCWhhc2hfZGVzdHJveShjb250ZXh0 X2lkX2xvb2t1cCk7CisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCU1lbW9y eUNvbnRleHRSZXNldChjdXJyX2N0eCk7Cit9CisKKy8qCisgKiBjb21wdXRlX2NvbnRleHRfcGF0 aAorICoKKyAqIEFwcGVuZCB0aGUgdHJhbnNpZW50IGNvbnRleHRfaWQgb2YgdGhpcyBjb250ZXh0 IGFuZCBlYWNoIG9mIGl0cyBhbmNlc3RvcnMKKyAqIHRvIGEgbGlzdCwgaW4gb3JkZXIgdG8gY29t cHV0ZSBhIHBhdGguCisgKi8KK3N0YXRpYyBMaXN0ICoKK2NvbXB1dGVfY29udGV4dF9wYXRoKE1l bW9yeUNvbnRleHQgYywgSFRBQiAqY29udGV4dF9pZF9sb29rdXApCit7CisJYm9vbAkJZm91bmQ7 CisJTGlzdAkgICAqcGF0aCA9IE5JTDsKKwlNZW1vcnlDb250ZXh0IGN1cl9jb250ZXh0OworCisJ Zm9yIChjdXJfY29udGV4dCA9IGM7IGN1cl9jb250ZXh0ICE9IE5VTEw7IGN1cl9jb250ZXh0ID0g Y3VyX2NvbnRleHQtPnBhcmVudCkKKwl7CisJCU1lbW9yeVN0YXRzQ29udGV4dElkICpjdXJfZW50 cnk7CisKKwkJY3VyX2VudHJ5ID0gaGFzaF9zZWFyY2goY29udGV4dF9pZF9sb29rdXAsICZjdXJf Y29udGV4dCwgSEFTSF9GSU5ELCAmZm91bmQpOworCisJCWlmICghZm91bmQpCisJCQllbG9nKEVS Uk9SLCAiaGFzaCB0YWJsZSBjb3JydXB0ZWQsIGNhbid0IGNvbnN0cnVjdCBwYXRoIHZhbHVlIik7 CisKKwkJcGF0aCA9IGxjb25zX2ludChjdXJfZW50cnktPmNvbnRleHRfaWQsIHBhdGgpOworCX0K KworCXJldHVybiBwYXRoOworfQorCisvKgorICogUHVibGlzaE1lbW9yeUNvbnRleHQKKyAqCisg KiBDb3B5IHRoZSBtZW1vcnkgY29udGV4dCBzdGF0aXN0aWNzIG9mIGEgc2luZ2xlIGNvbnRleHQg dG8gYSBEU0EgbWVtb3J5CisgKi8KK3N0YXRpYyB2b2lkCitQdWJsaXNoTWVtb3J5Q29udGV4dChN ZW1vcnlTdGF0c0VudHJ5ICptZW1jeHRfaW5mbywgaW50IGN1cnJfaWQsCisJCQkJCSBNZW1vcnlD b250ZXh0IGNvbnRleHQsIExpc3QgKnBhdGgsCisJCQkJCSBNZW1vcnlDb250ZXh0Q291bnRlcnMg c3RhdCwgaW50IG51bV9jb250ZXh0cykKK3sKKwljb25zdCBjaGFyICppZGVudCA9IGNvbnRleHQt PmlkZW50OworCWNvbnN0IGNoYXIgKm5hbWUgPSBjb250ZXh0LT5uYW1lOworCisJLyoKKwkgKiBU byBiZSBjb25zaXN0ZW50IHdpdGggbG9nZ2luZyBvdXRwdXQsIHdlIGxhYmVsIGR5bmFoYXNoIGNv bnRleHRzIHdpdGgKKwkgKiBqdXN0IHRoZSBoYXNoIHRhYmxlIG5hbWUgYXMgd2l0aCBNZW1vcnlD b250ZXh0U3RhdHNQcmludCgpLgorCSAqLworCWlmIChjb250ZXh0LT5pZGVudCAmJiBzdHJuY21w KGNvbnRleHQtPm5hbWUsICJkeW5haGFzaCIsIDgpID09IDApCisJeworCQluYW1lID0gY29udGV4 dC0+aWRlbnQ7CisJCWlkZW50ID0gTlVMTDsKKwl9CisKKwlpZiAobmFtZSAhPSBOVUxMKQorCXsK KwkJaW50CQkJbmFtZWxlbiA9IHN0cmxlbihuYW1lKTsKKworCQlpZiAoc3RybGVuKG5hbWUpID49 IE1FTU9SWV9DT05URVhUX05BTUVfU0hNRU1fU0laRSkKKwkJCW5hbWVsZW4gPSBwZ19tYmNsaXBs ZW4obmFtZSwgbmFtZWxlbiwKKwkJCQkJCQkJICAgTUVNT1JZX0NPTlRFWFRfTkFNRV9TSE1FTV9T SVpFIC0gMSk7CisKKwkJc3RybGNweShtZW1jeHRfaW5mb1tjdXJyX2lkXS5uYW1lLCBuYW1lLCBu YW1lbGVuICsgMSk7CisJfQorCWVsc2UKKwkJLyogQ2xlYXJpbmcgdGhlIGFycmF5ICovCisJCW1l bWN4dF9pbmZvW2N1cnJfaWRdLm5hbWVbMF0gPSAnXDAnOworCisJLyogVHJpbSBhbmQgY29weSB0 aGUgaWRlbnRpZmllciBpZiBpdCBpcyBub3Qgc2V0IHRvIE5VTEwgKi8KKwlpZiAoaWRlbnQgIT0g TlVMTCkKKwl7CisJCWludAkJCWlkbGVuID0gc3RybGVuKGNvbnRleHQtPmlkZW50KTsKKworCQkv KgorCQkgKiBTb21lIGlkZW50aWZpZXJzIHN1Y2ggYXMgU1FMIHF1ZXJ5IHN0cmluZyBjYW4gYmUg dmVyeSBsb25nLAorCQkgKiB0cnVuY2F0ZSBvdmVyc2l6ZSBpZGVudGlmaWVycy4KKwkJICovCisJ CWlmIChpZGxlbiA+PSBNRU1PUllfQ09OVEVYVF9JREVOVF9TSE1FTV9TSVpFKQorCQkJaWRsZW4g PSBwZ19tYmNsaXBsZW4oaWRlbnQsIGlkbGVuLAorCQkJCQkJCQkgTUVNT1JZX0NPTlRFWFRfSURF TlRfU0hNRU1fU0laRSAtIDEpOworCisJCXN0cmxjcHkobWVtY3h0X2luZm9bY3Vycl9pZF0uaWRl bnQsIGlkZW50LCBpZGxlbiArIDEpOworCX0KKwllbHNlCisJCW1lbWN4dF9pbmZvW2N1cnJfaWRd LmlkZW50WzBdID0gJ1wwJzsKKworCS8qIEFsbG9jYXRlIERTQSBtZW1vcnkgZm9yIHN0b3Jpbmcg cGF0aCBpbmZvcm1hdGlvbiAqLworCWlmIChwYXRoID09IE5JTCkKKwkJbWVtY3h0X2luZm9bY3Vy cl9pZF0ucGF0aFswXSA9IDA7CisJZWxzZQorCXsKKwkJaW50CQkJbGV2ZWxzID0gTWluKGxpc3Rf bGVuZ3RoKHBhdGgpLCBNQVhfUEFUSF9ESVNQTEFZX0xFTkdUSCk7CisKKwkJbWVtY3h0X2luZm9b Y3Vycl9pZF0ucGF0aF9sZW5ndGggPSBsZXZlbHM7CisJCW1lbWN4dF9pbmZvW2N1cnJfaWRdLmxl dmVscyA9IGxpc3RfbGVuZ3RoKHBhdGgpOworCisJCWZvcmVhY2hfaW50KGksIHBhdGgpCisJCXsK KwkJCW1lbWN4dF9pbmZvW2N1cnJfaWRdLnBhdGhbZm9yZWFjaF9jdXJyZW50X2luZGV4KGkpXSA9 IGk7CisJCQlpZiAoLS1sZXZlbHMgPT0gMCkKKwkJCQlicmVhazsKKwkJfQorCX0KKwltZW1jeHRf aW5mb1tjdXJyX2lkXS50eXBlID0gY29udGV4dC0+dHlwZTsKKwltZW1jeHRfaW5mb1tjdXJyX2lk XS50b3RhbHNwYWNlID0gc3RhdC50b3RhbHNwYWNlOworCW1lbWN4dF9pbmZvW2N1cnJfaWRdLm5i bG9ja3MgPSBzdGF0Lm5ibG9ja3M7CisJbWVtY3h0X2luZm9bY3Vycl9pZF0uZnJlZXNwYWNlID0g c3RhdC5mcmVlc3BhY2U7CisJbWVtY3h0X2luZm9bY3Vycl9pZF0uZnJlZWNodW5rcyA9IHN0YXQu ZnJlZWNodW5rczsKKwltZW1jeHRfaW5mb1tjdXJyX2lkXS5udW1fYWdnX3N0YXRzID0gbnVtX2Nv bnRleHRzOworfQorCit2b2lkCitBdFByb2NFeGl0X21lbXN0YXRzX2NsZWFudXAoaW50IGNvZGUs IERhdHVtIGFyZykKK3sKKwlpbnQJCQlpZHggPSBNeVByb2NOdW1iZXI7CisJTWVtb3J5U3RhdHNE U0hhc2hFbnRyeSAqZW50cnk7CisJY2hhcgkJa2V5W0NMSUVOVF9LRVlfU0laRV07CisJYm9vbAkJ Zm91bmQ7CisKKwlpZiAoTWVtb3J5U3RhdHNEc0hhc2ggIT0gTlVMTCkKKwl7CisJCXNucHJpbnRm KGtleSwgQ0xJRU5UX0tFWV9TSVpFLCAiJWQiLCBpZHgpOworCQllbnRyeSA9IGRzaGFzaF9maW5k X29yX2luc2VydChNZW1vcnlTdGF0c0RzSGFzaCwga2V5LCAmZm91bmQpOworCisJCWlmIChmb3Vu ZCkKKwkJeworCQkJaWYgKE1lbW9yeVN0YXRzRHNhQXJlYSAhPSBOVUxMICYmCisJCQkJRHNhUG9p bnRlcklzVmFsaWQoZW50cnktPm1lbXN0YXRzX2RzYV9wb2ludGVyKSkKKwkJCQlkc2FfZnJlZShN ZW1vcnlTdGF0c0RzYUFyZWEsIGVudHJ5LT5tZW1zdGF0c19kc2FfcG9pbnRlcik7CisJCX0KKwkJ ZHNoYXNoX2RlbGV0ZV9lbnRyeShNZW1vcnlTdGF0c0RzSGFzaCwgZW50cnkpOworCX0KKwlMV0xv Y2tBY3F1aXJlKGNsaWVudF9rZXlzX2xvY2ssIExXX0VYQ0xVU0lWRSk7CisJY2xpZW50X2tleXNb aWR4XSA9IC0xOworCUxXTG9ja1JlbGVhc2UoY2xpZW50X2tleXNfbG9jayk7Cit9CisKKy8qIFVz ZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMgKi8KK2RzYV9hcmVhICoKK3BnX2dldF9tZW1zdGF0c19k c2FfYXJlYSh2b2lkKQoreworCWlmIChNZW1vcnlTdGF0c0RzYUFyZWEgIT0gTlVMTCkKKwkJcmV0 dXJuIE1lbW9yeVN0YXRzRHNhQXJlYTsKKwllbHNlCisJCXJldHVybiBOVUxMOworfQpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMgYi9zcmMvYmFja2VuZC91dGls cy9pbml0L2dsb2JhbHMuYwppbmRleCBkMzFjYjQ1YTA1OC4uOTJiMDQ0NmI4MGMgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2luaXQvZ2xvYmFscy5jCkBAIC0zOSw2ICszOSw3IEBAIHZvbGF0aWxlIHNpZ19hdG9taWNf dCBUcmFuc2FjdGlvblRpbWVvdXRQZW5kaW5nID0gZmFsc2U7CiB2b2xhdGlsZSBzaWdfYXRvbWlj X3QgSWRsZVNlc3Npb25UaW1lb3V0UGVuZGluZyA9IGZhbHNlOwogdm9sYXRpbGUgc2lnX2F0b21p Y190IFByb2NTaWduYWxCYXJyaWVyUGVuZGluZyA9IGZhbHNlOwogdm9sYXRpbGUgc2lnX2F0b21p Y190IExvZ01lbW9yeUNvbnRleHRQZW5kaW5nID0gZmFsc2U7Cit2b2xhdGlsZSBzaWdfYXRvbWlj X3QgUHVibGlzaE1lbW9yeUNvbnRleHRQZW5kaW5nID0gZmFsc2U7CiB2b2xhdGlsZSBzaWdfYXRv bWljX3QgSWRsZVN0YXRzVXBkYXRlVGltZW91dFBlbmRpbmcgPSBmYWxzZTsKIHZvbGF0aWxlIHVp bnQzMiBJbnRlcnJ1cHRIb2xkb2ZmQ291bnQgPSAwOwogdm9sYXRpbGUgdWludDMyIFF1ZXJ5Q2Fu Y2VsSG9sZG9mZkNvdW50ID0gMDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQv cG9zdGluaXQuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvcG9zdGluaXQuYwppbmRleCA5OGY5 NTk4Y2Q3OC4uMjAyNDAzZWJjNjMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQv cG9zdGluaXQuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9pbml0L3Bvc3Rpbml0LmMKQEAgLTY1 OCw2ICs2NTgsMTMgQEAgQmFzZUluaXQodm9pZCkKIAkgKiBkcm9wIGVwaGVtZXJhbCBzbG90cywg d2hpY2ggaW4gdHVybiB0cmlnZ2VycyBzdGF0cyByZXBvcnRpbmcuCiAJICovCiAJUmVwbGljYXRp b25TbG90SW5pdGlhbGl6ZSgpOworCisJLyoKKwkgKiBUaGUgYmVmb3JlIHNobWVtIGV4aXQgY2Fs bGJhY2sgZnJlZXMgdGhlIERTQSBtZW1vcnkgb2NjdXBpZWQgYnkgdGhlCisJICogbGF0ZXN0IG1l bW9yeSBjb250ZXh0IHN0YXRpc3RpY3MgdGhhdCBjb3VsZCBiZSBwdWJsaXNoZWQgYnkgdGhpcyBw cm9jCisJICogaWYgcmVxdWVzdGVkLgorCSAqLworCWJlZm9yZV9zaG1lbV9leGl0KEF0UHJvY0V4 aXRfbWVtc3RhdHNfY2xlYW51cCwgMCk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv dXRpbHMvbW1nci9tY3h0LmMgYi9zcmMvYmFja2VuZC91dGlscy9tbWdyL21jeHQuYwppbmRleCA0 N2ZkNzc0YzdkMi4uNTZjMjA0OGM2N2EgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21t Z3IvbWN4dC5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvbWN4dC5jCkBAIC0xMDA4LDYg KzEwMDgsMzUgQEAgTWVtb3J5Q29udGV4dFN0YXRzSW50ZXJuYWwoTWVtb3J5Q29udGV4dCBjb250 ZXh0LCBpbnQgbGV2ZWwsCiAJfQogfQogCisKKy8qCisgKiBNZW1vcnlDb250ZXh0U3RhdHNDb3Vu dGVyCisgKgorICogQWNjdW11bGF0ZSBzdGF0aXN0aWNzIGNvdW50cyBpbnRvICp0b3RhbHMuIHRv dGFscyBzaG91bGQgbm90IGJlIE5VTEwuCisgKiBUaGlzIGludm9sdmVzIGEgbm9uLXJlY3Vyc2l2 ZSB0cmVlIHRyYXZlcnNhbC4KKyAqLwordm9pZAorTWVtb3J5Q29udGV4dFN0YXRzQ291bnRlcihN ZW1vcnlDb250ZXh0IGNvbnRleHQsIE1lbW9yeUNvbnRleHRDb3VudGVycyAqdG90YWxzLAorCQkJ CQkJICBpbnQgKm51bV9jb250ZXh0cykKK3sKKwlpbnQJCQlpY2hpbGQgPSAxOworCisJY29udGV4 dC0+bWV0aG9kcy0+c3RhdHMoY29udGV4dCwgTlVMTCwgTlVMTCwgdG90YWxzLCBmYWxzZSk7CisK Kwlmb3IgKE1lbW9yeUNvbnRleHQgY3VyciA9IGNvbnRleHQtPmZpcnN0Y2hpbGQ7CisJCSBjdXJy ICE9IE5VTEw7CisJCSBjdXJyID0gTWVtb3J5Q29udGV4dFRyYXZlcnNlTmV4dChjdXJyLCBjb250 ZXh0KSkKKwl7CisJCWN1cnItPm1ldGhvZHMtPnN0YXRzKGN1cnIsIE5VTEwsIE5VTEwsIHRvdGFs cywgZmFsc2UpOworCQlpY2hpbGQrKzsKKwl9CisKKwkvKgorCSAqIEFkZCB0aGUgY291bnQgb2Yg Y2hpbGRyZW4gY29udGV4dHMgd2hpY2ggYXJlIHRyYXZlcnNlZAorCSAqLworCSpudW1fY29udGV4 dHMgPSAqbnVtX2NvbnRleHRzICsgaWNoaWxkOworfQorCiAvKgogICogTWVtb3J5Q29udGV4dFN0 YXRzUHJpbnQKICAqCQlQcmludCBjYWxsYmFjayB1c2VkIGJ5IE1lbW9yeUNvbnRleHRTdGF0c0lu dGVybmFsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3Jj L2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCA1Y2Y5ZTEyZmNiOS4uYmI3MmI4NTQ1 N2QgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKKysrIGIvc3Jj L2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdApAQCAtODYxNyw2ICs4NjE3LDE2IEBACiAgIHBy b3JldHR5cGUgPT4gJ2Jvb2wnLCBwcm9hcmd0eXBlcyA9PiAnaW50NCcsCiAgIHByb3NyYyA9PiAn cGdfbG9nX2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzJyB9LAogCisjIHB1Ymxpc2hpbmcgbWVtb3J5 IGNvbnRleHRzIG9mIHRoZSBzcGVjaWZpZWQgcG9zdGdyZXMgcHJvY2VzcworeyBvaWQgPT4gJzIx NzMnLCBkZXNjciA9PiAncHVibGlzaCBtZW1vcnkgY29udGV4dHMgb2YgdGhlIHNwZWNpZmllZCBi YWNrZW5kJywKKyAgcHJvbmFtZSA9PiAncGdfZ2V0X3Byb2Nlc3NfbWVtb3J5X2NvbnRleHRzJywg cHJvdm9sYXRpbGUgPT4gJ3YnLAorICBwcm9yb3dzID0+ICcxMDAnLCBwcm9yZXRzZXQgPT4gJ3Qn LCBwcm9wYXJhbGxlbCA9PiAncicsCisgIHByb3JldHR5cGUgPT4gJ3JlY29yZCcsIHByb2FyZ3R5 cGVzID0+ICdpbnQ0IGJvb2wnLAorICBwcm9hbGxhcmd0eXBlcyA9PiAne2ludDQsYm9vbCx0ZXh0 LHRleHQsdGV4dCxpbnQ0LF9pbnQ0LGludDgsaW50OCxpbnQ4LGludDgsaW50OCxpbnQ0fScsCisg IHByb2FyZ21vZGVzID0+ICd7aSxpLG8sbyxvLG8sbyxvLG8sbyxvLG8sb30nLAorICBwcm9hcmdu YW1lcyA9PiAne3BpZCwgc3VtbWFyeSwgbmFtZSwgaWRlbnQsIHR5cGUsIGxldmVsLCBwYXRoLCB0 b3RhbF9ieXRlcywgdG90YWxfbmJsb2NrcywgZnJlZV9ieXRlcywgZnJlZV9jaHVua3MsIHVzZWRf Ynl0ZXMsIG51bV9hZ2dfY29udGV4dHN9JywKKyAgcHJvc3JjID0+ICdwZ19nZXRfcHJvY2Vzc19t ZW1vcnlfY29udGV4dHMnIH0sCisKICMgbm9uLXBlcnNpc3RlbnQgc2VyaWVzIGdlbmVyYXRvcgog eyBvaWQgPT4gJzEwNjYnLCBkZXNjciA9PiAnbm9uLXBlcnNpc3RlbnQgc2VyaWVzIGdlbmVyYXRv cicsCiAgIHByb25hbWUgPT4gJ2dlbmVyYXRlX3NlcmllcycsIHByb3Jvd3MgPT4gJzEwMDAnLApk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmggYi9zcmMvaW5jbHVkZS9taXNjYWRt aW4uaAppbmRleCA5YTdkNzMzZGRlZi4uYjc2ZjI0YmFlZDYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL21pc2NhZG1pbi5oCisrKyBiL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oCkBAIC05Niw2ICs5 Niw3IEBAIGV4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSBzaWdfYXRvbWljX3QgSWRsZVNlc3Np b25UaW1lb3V0UGVuZGluZzsKIGV4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSBzaWdfYXRvbWlj X3QgUHJvY1NpZ25hbEJhcnJpZXJQZW5kaW5nOwogZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxl IHNpZ19hdG9taWNfdCBMb2dNZW1vcnlDb250ZXh0UGVuZGluZzsKIGV4dGVybiBQR0RMTElNUE9S VCB2b2xhdGlsZSBzaWdfYXRvbWljX3QgSWRsZVN0YXRzVXBkYXRlVGltZW91dFBlbmRpbmc7Citl eHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IFB1Ymxpc2hNZW1vcnlDb250 ZXh0UGVuZGluZzsKIAogZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBD aGVja0NsaWVudENvbm5lY3Rpb25QZW5kaW5nOwogZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxl IHNpZ19hdG9taWNfdCBDbGllbnRDb25uZWN0aW9uTG9zdDsKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL3N0b3JhZ2UvbHdsb2NrbGlzdC5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9sd2xvY2tsaXN0 LmgKaW5kZXggNWIwY2UzODM0MDguLjYxM2U3NjljODRlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9zdG9yYWdlL2x3bG9ja2xpc3QuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2x3bG9ja2xp c3QuaApAQCAtMTM2LDMgKzEzNiw0IEBAIFBHX0xXTE9DS1RSQU5DSEUoU1VCVFJBTlNfU0xSVSwg U3VidHJhbnNTTFJVKQogUEdfTFdMT0NLVFJBTkNIRShYQUNUX1NMUlUsIFhhY3RTTFJVKQogUEdf TFdMT0NLVFJBTkNIRShQQVJBTExFTF9WQUNVVU1fRFNBLCBQYXJhbGxlbFZhY3V1bURTQSkKIFBH X0xXTE9DS1RSQU5DSEUoQUlPX1VSSU5HX0NPTVBMRVRJT04sIEFpb1VyaW5nQ29tcGxldGlvbikK K1BHX0xXTE9DS1RSQU5DSEUoTUVNT1JZX0NPTlRFWFRfS0VZUywgTWVtb3J5Q29udGV4dFJlcG9y dGluZ0tleXMpCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaCBi L3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oCmluZGV4IGFmZWViMWNhMDE5Li4zNDVk NWEwZWNiMSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFsLmgKKysr IGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFsLmgKQEAgLTM1LDYgKzM1LDcgQEAgdHlw ZWRlZiBlbnVtCiAJUFJPQ1NJR19XQUxTTkRfSU5JVF9TVE9QUElORywJLyogYXNrIHdhbHNlbmRl cnMgdG8gcHJlcGFyZSBmb3Igc2h1dGRvd24gICovCiAJUFJPQ1NJR19CQVJSSUVSLAkJCS8qIGds b2JhbCBiYXJyaWVyIGludGVycnVwdCAgKi8KIAlQUk9DU0lHX0xPR19NRU1PUllfQ09OVEVYVCwg LyogYXNrIGJhY2tlbmQgdG8gbG9nIHRoZSBtZW1vcnkgY29udGV4dHMgKi8KKwlQUk9DU0lHX0dF VF9NRU1PUllfQ09OVEVYVCwgLyogYXNrIGJhY2tlbmQgdG8gc2VuZCB0aGUgbWVtb3J5IGNvbnRl eHRzICovCiAJUFJPQ1NJR19QQVJBTExFTF9BUFBMWV9NRVNTQUdFLCAvKiBNZXNzYWdlIGZyb20g cGFyYWxsZWwgYXBwbHkgd29ya2VycyAqLwogCiAJLyogUmVjb3ZlcnkgY29uZmxpY3QgcmVhc29u cyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvbWVtdXRpbHMuaCBiL3NyYy9pbmNs dWRlL3V0aWxzL21lbXV0aWxzLmgKaW5kZXggN2JiZTVhMzY5NTkuLjJkNzIyMGNkZTQ1IDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9tZW11dGlscy5oCisrKyBiL3NyYy9pbmNsdWRlL3V0 aWxzL21lbXV0aWxzLmgKQEAgLTE4LDcgKzE4LDEwIEBACiAjZGVmaW5lIE1FTVVUSUxTX0gKIAog I2luY2x1ZGUgIm5vZGVzL21lbW5vZGVzLmgiCi0KKyNpbmNsdWRlICJzdG9yYWdlL2NvbmRpdGlv bl92YXJpYWJsZS5oIgorI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgorI2luY2x1ZGUgInV0aWxz L2RzYS5oIgorI2luY2x1ZGUgImxpYi9kc2hhc2guaCIKIAogLyoKICAqIE1heEFsbG9jU2l6ZSwg TWF4QWxsb2NIdWdlU2l6ZQpAQCAtNDgsNiArNTEsMjYgQEAKIAogI2RlZmluZSBBbGxvY0h1Z2VT aXplSXNWYWxpZChzaXplKQkoKFNpemUpIChzaXplKSA8PSBNYXhBbGxvY0h1Z2VTaXplKQogCisv KgorICogTWVtb3J5IENvbnRleHQgcmVwb3J0aW5nIHNpemUgbGltaXRzLgorICovCisKKy8qIE1h eCBsZW5ndGggb2YgY29udGV4dCBuYW1lIGFuZCBpZGVudCwgdG8ga2VlcCBpdCBjb25zaXN0ZW50 CisgKiB3aXRoIFByb2Nlc3NMb2dNZW1vcnlDb250ZXh0KCkKKyAqLworI2RlZmluZSBNRU1PUllf Q09OVEVYVF9JREVOVF9TSE1FTV9TSVpFIDEwMAorI2RlZmluZSBNRU1PUllfQ09OVEVYVF9OQU1F X1NITUVNX1NJWkUgMTAwCisKKy8qIE1heGltdW0gc2l6ZSAoaW4gYnl0ZXMpIG9mIERTQSBhcmVh IHBlciBwcm9jZXNzICovCisjZGVmaW5lIE1FTU9SWV9DT05URVhUX1JFUE9SVF9NQVhfUEVSX0JB Q0tFTkQgICgoc2l6ZV90KSAoMSAqIDEwMjQgKiAxMDI0KSkKKworLyoKKyAqIE1heGltdW0gc2l6 ZSBwZXIgY29udGV4dCBzdGF0aXN0aWNzLiBUaGUgaWRlbnRpZmllciBhbmQgbmFtZSBhcmUgc3Rh dGljYWxseQorICogYWxsb2NhdGVkIGFycmF5cyBvZiBzaXplIDEwMCBieXRlcy4KKyAqIFRoZSBw YXRoIGRlcHRoIGlzIGxpbWl0ZWQgdG8gMTAwIGxpa2UgZm9yIG1lbW9yeSBjb250ZXh0IGxvZ2dp bmcuCisgKi8KKyNkZWZpbmUgTUFYX01FTU9SWV9DT05URVhUX1NUQVRTX1NJWkUgKHNpemVvZihN ZW1vcnlTdGF0c0VudHJ5KSkKKyNkZWZpbmUgTUFYX01FTU9SWV9DT05URVhUX1NUQVRTX05VTSBN RU1PUllfQ09OVEVYVF9SRVBPUlRfTUFYX1BFUl9CQUNLRU5EIC8gTUFYX01FTU9SWV9DT05URVhU X1NUQVRTX1NJWkUKIAogLyoKICAqIFN0YW5kYXJkIHRvcC1sZXZlbCBtZW1vcnkgY29udGV4dHMu CkBAIC0xNDksNiArMTcyLDcgQEAgZXh0ZXJuIE1lbW9yeUNvbnRleHQgQnVtcENvbnRleHRDcmVh dGUoTWVtb3J5Q29udGV4dCBwYXJlbnQsCiAJCQkJCQkJCQkgICBTaXplIG1pbkNvbnRleHRTaXpl LAogCQkJCQkJCQkJICAgU2l6ZSBpbml0QmxvY2tTaXplLAogCQkJCQkJCQkJICAgU2l6ZSBtYXhC bG9ja1NpemUpOworZXh0ZXJuIGRzYV9hcmVhICpwZ19nZXRfbWVtc3RhdHNfZHNhX2FyZWEodm9p ZCk7CiAKIC8qCiAgKiBSZWNvbW1lbmRlZCBkZWZhdWx0IGFsbG9jIHBhcmFtZXRlcnMsIHN1aXRh YmxlIGZvciAib3JkaW5hcnkiIGNvbnRleHRzCkBAIC0zMTksNCArMzQzLDU5IEBAIHBnX21lbW9y eV9pc19hbGxfemVyb3MoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3QgbGVuKQogCXJldHVybiB0cnVl OwogfQogCisvKiBEeW5hbWljIHNoYXJlZCBtZW1vcnkgc3RhdGUgZm9yIHN0YXRpc3RpY3MgcGVy IGNvbnRleHQgKi8KK3R5cGVkZWYgc3RydWN0IE1lbW9yeVN0YXRzRW50cnkKK3sKKwljaGFyCQlu YW1lW01FTU9SWV9DT05URVhUX05BTUVfU0hNRU1fU0laRV07CisJY2hhcgkJaWRlbnRbTUVNT1JZ X0NPTlRFWFRfSURFTlRfU0hNRU1fU0laRV07CisJaW50CQkJcGF0aFsxMDBdOworCU5vZGVUYWcJ CXR5cGU7CisJaW50CQkJcGF0aF9sZW5ndGg7CisJaW50CQkJbGV2ZWxzOworCWludDY0CQl0b3Rh bHNwYWNlOworCWludDY0CQluYmxvY2tzOworCWludDY0CQlmcmVlc3BhY2U7CisJaW50NjQJCWZy ZWVjaHVua3M7CisJaW50CQkJbnVtX2FnZ19zdGF0czsKK30gTWVtb3J5U3RhdHNFbnRyeTsKKwor LyoKKyAqIFBlciBiYWNrZW5kIGR5bmFtaWMgc2hhcmVkIGhhc2ggZW50cnkgZm9yIG1lbW9yeSBj b250ZXh0IHN0YXRpc3RpY3MKKyAqIHJlcG9ydGluZy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgTWVt b3J5U3RhdHNEU0hhc2hFbnRyeQoreworCWNoYXIJCWtleVs2NF07CisJQ29uZGl0aW9uVmFyaWFi bGUgbWVtY3h0X2N2OworCWJvb2wJCXN0YXRzX3dyaXR0ZW47CisJaW50CQkJdGFyZ2V0X3NlcnZl cl9pZDsKKwlpbnQJCQl0b3RhbF9zdGF0czsKKwlib29sCQlzdW1tYXJ5OworCWRzYV9wb2ludGVy IG1lbXN0YXRzX2RzYV9wb2ludGVyOworfSBNZW1vcnlTdGF0c0RTSGFzaEVudHJ5OworCitzdGF0 aWMgY29uc3QgZHNoYXNoX3BhcmFtZXRlcnMgbWVtY3R4X2RzaF9wYXJhbXMgPSB7CisJb2Zmc2V0 b2YoTWVtb3J5U3RhdHNEU0hhc2hFbnRyeSwgbWVtY3h0X2N2KSwKKwlzaXplb2YoTWVtb3J5U3Rh dHNEU0hhc2hFbnRyeSksCisJZHNoYXNoX3N0cmNtcCwKKwlkc2hhc2hfc3RyaGFzaCwKKwlkc2hh c2hfc3RyY3B5Cit9OworCisvKgorICogVXNlZCBmb3Igc3RvcmFnZSBvZiB0cmFuc2llbnQgaWRl bnRpZmllcnMgZm9yIHBnX2dldF9iYWNrZW5kX21lbW9yeV9jb250ZXh0cworICovCit0eXBlZGVm IHN0cnVjdCBNZW1vcnlTdGF0c0NvbnRleHRJZAoreworCU1lbW9yeUNvbnRleHQgY29udGV4dDsK KwlpbnQJCQljb250ZXh0X2lkOworfSBNZW1vcnlTdGF0c0NvbnRleHRJZDsKKworZXh0ZXJuIHZv aWQgUHJvY2Vzc0dldE1lbW9yeUNvbnRleHRJbnRlcnJ1cHQodm9pZCk7CitleHRlcm4gdm9pZCBI YW5kbGVHZXRNZW1vcnlDb250ZXh0SW50ZXJydXB0KHZvaWQpOworZXh0ZXJuIHZvaWQgTWVtb3J5 Q29udGV4dEtleXNTaG1lbUluaXQodm9pZCk7CitleHRlcm4gU2l6ZSBNZW1vcnlDb250ZXh0S2V5 c1NobWVtU2l6ZSh2b2lkKTsKK2V4dGVybiB2b2lkIE1lbW9yeUNvbnRleHRTdGF0c0NvdW50ZXIo TWVtb3J5Q29udGV4dCBjb250ZXh0LCBNZW1vcnlDb250ZXh0Q291bnRlcnMgKnRvdGFscywKKwkJ CQkJCQkJCSAgaW50ICpudW1fY29udGV4dHMpOworZXh0ZXJuIHZvaWQgQXRQcm9jRXhpdF9tZW1z dGF0c19jbGVhbnVwKGludCBjb2RlLCBEYXR1bSBhcmcpOwogI2VuZGlmCQkJCQkJCS8qIE1FTVVU SUxTX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mu b3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKaW5kZXggM2IzN2Zh ZmE2NWIuLjIxYzY1YWQyZDEwIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3N5c3ZpZXdzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91 dApAQCAtMjMzLDMgKzIzMywyMiBAQCBzZWxlY3QgKiBmcm9tIHBnX3RpbWV6b25lX2FiYnJldnMg d2hlcmUgYWJicmV2ID0gJ0xNVCc7CiAgTE1UICAgIHwgQCA3IGhvdXJzIDUyIG1pbnMgNTggc2Vj cyBhZ28gfCBmCiAoMSByb3cpCiAKK0RPICQkCitERUNMQVJFCisgICAgYmdfd3JpdGVyX3BpZCBp bnQ7CisgICAgciBSRUNPUkQ7CitCRUdJTgorICAgICAgICBTRUxFQ1QgcGlkIGZyb20gcGdfc3Rh dF9hY3Rpdml0eSB3aGVyZSBiYWNrZW5kX3R5cGU9J2JhY2tncm91bmQgd3JpdGVyJworCSBJTlRP IGJnX3dyaXRlcl9waWQ7CisKKyAgICAgICAgc2VsZWN0IHR5cGUsIG5hbWUsIGlkZW50CisgICAg ICAgIGZyb20gcGdfZ2V0X3Byb2Nlc3NfbWVtb3J5X2NvbnRleHRzKGJnX3dyaXRlcl9waWQsIGZh bHNlKQorCSB3aGVyZSBwYXRoID0gJ3sxfScgaW50byByOworCVJBSVNFIE5PVElDRSAnJScsIHI7 CisgICAgICAgIHNlbGVjdCB0eXBlLCBuYW1lLCBpZGVudAorICAgICAgICBmcm9tIHBnX2dldF9w cm9jZXNzX21lbW9yeV9jb250ZXh0cyhwZ19iYWNrZW5kX3BpZCgpLCBmYWxzZSkKKwkgd2hlcmUg cGF0aCA9ICd7MX0nIGludG8gcjsKKwlSQUlTRSBOT1RJQ0UgJyUnLCByOworRU5EICQkOworTk9U SUNFOiAgKEFsbG9jU2V0LFRvcE1lbW9yeUNvbnRleHQsKQorTk9USUNFOiAgKEFsbG9jU2V0LFRv cE1lbW9yeUNvbnRleHQsKQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3lzdmll d3Muc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3lzdmlld3Muc3FsCmluZGV4IDY2MTc5ZjAy NmIzLi5jOWRhNGZjOGM5MCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3lzdmll d3Muc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N5c3ZpZXdzLnNxbApAQCAtMTAxLDMg KzEwMSwyMSBAQCBzZWxlY3QgY291bnQoZGlzdGluY3QgdXRjX29mZnNldCkgPj0gMjQgYXMgb2sg ZnJvbSBwZ190aW1lem9uZV9hYmJyZXZzOwogLS0gT25lIHNwZWNpZmljIGNhc2Ugd2UgY2FuIGNo ZWNrIHdpdGhvdXQgbXVjaCBmZWFyIG9mIGJyZWFrYWdlCiAtLSBpcyB0aGUgaGlzdG9yaWNhbCBs b2NhbC1tZWFuLXRpbWUgdmFsdWUgdXNlZCBmb3IgQW1lcmljYS9Mb3NfQW5nZWxlcy4KIHNlbGVj dCAqIGZyb20gcGdfdGltZXpvbmVfYWJicmV2cyB3aGVyZSBhYmJyZXYgPSAnTE1UJzsKKworRE8g JCQKK0RFQ0xBUkUKKyAgICBiZ193cml0ZXJfcGlkIGludDsKKyAgICByIFJFQ09SRDsKK0JFR0lO CisgICAgICAgIFNFTEVDVCBwaWQgZnJvbSBwZ19zdGF0X2FjdGl2aXR5IHdoZXJlIGJhY2tlbmRf dHlwZT0nYmFja2dyb3VuZCB3cml0ZXInCisJIElOVE8gYmdfd3JpdGVyX3BpZDsKKworICAgICAg ICBzZWxlY3QgdHlwZSwgbmFtZSwgaWRlbnQKKyAgICAgICAgZnJvbSBwZ19nZXRfcHJvY2Vzc19t ZW1vcnlfY29udGV4dHMoYmdfd3JpdGVyX3BpZCwgZmFsc2UpCisJIHdoZXJlIHBhdGggPSAnezF9 JyBpbnRvIHI7CisJUkFJU0UgTk9USUNFICclJywgcjsKKyAgICAgICAgc2VsZWN0IHR5cGUsIG5h bWUsIGlkZW50CisgICAgICAgIGZyb20gcGdfZ2V0X3Byb2Nlc3NfbWVtb3J5X2NvbnRleHRzKHBn X2JhY2tlbmRfcGlkKCksIGZhbHNlKQorCSB3aGVyZSBwYXRoID0gJ3sxfScgaW50byByOworCVJB SVNFIE5PVElDRSAnJScsIHI7CitFTkQgJCQ7CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4 IDQzMjUwOTI3N2M5Li4yOTkwYzgwN2Y0NSAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50 L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAg LTE2ODQsNiArMTY4NCw5IEBAIE1lbW9yeUNvbnRleHREYXRhCiBNZW1vcnlDb250ZXh0SWQKIE1l bW9yeUNvbnRleHRNZXRob2RJRAogTWVtb3J5Q29udGV4dE1ldGhvZHMKK01lbW9yeVN0YXRzQ29u dGV4dElkCitNZW1vcnlTdGF0c0VudHJ5CitNZW1vcnlTdGF0c0RTSGFzaEVudHJ5CiBNZW1vcnlT dGF0c1ByaW50RnVuYwogTWVyZ2VBY3Rpb24KIE1lcmdlQWN0aW9uU3RhdGUKLS0gCjIuMzQuMQoK --00000000000087ac25064309151f Content-Type: application/octet-stream; name="v2-0002-Test-module-to-test-memory-context-reporting-with-in.patch" Content-Disposition: attachment; filename="v2-0002-Test-module-to-test-memory-context-reporting-with-in.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhpgd4ls1 RnJvbSBlMjE4MzJjNjEwNTc0ZjQ4NDk2Yzk2MWE3MzE4MDcwYjcyMDU2OGRlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSYWhpbGEgU3llZCA8cmFoaWxhc3llZC45MEBnbWFpbC5jb20+ CkRhdGU6IFRodSwgMjMgT2N0IDIwMjUgMTg6MDE6MzYgKzA1MzAKU3ViamVjdDogW1BBVENIIDIv Ml0gVGVzdCBtb2R1bGUgdG8gdGVzdCBtZW1vcnkgY29udGV4dCByZXBvcnRpbmcgd2l0aAogaW5q ZWN0aW9uIHBvaW50cwoKLS0tCiBzcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlICAgICAgICAgICAg ICAgICAgICAgfCAgIDEgKwogLi4uL3Rlc3RfbWVtY29udGV4dF9yZXBvcnRpbmcvTWFrZWZpbGUg ICAgICAgIHwgIDMyICsrKysrCiAuLi4vdC8wMDFfbWVtY29udGV4dF9pbmoucGwgICAgICAgICAg ICAgICAgICAgfCAgNTggKysrKysrKysrCiAuLi4vdGVzdF9tZW1jb250ZXh0X3JlcG9ydGluZy0t MS4wLnNxbCAgICAgICAgfCAgMTEgKysKIC4uLi90ZXN0X21lbWNvbnRleHRfcmVwb3J0aW5nLmMg ICAgICAgICAgICAgICB8IDEyMyArKysrKysrKysrKysrKysrKysKIC4uLi90ZXN0X21lbWNvbnRl eHRfcmVwb3J0aW5nLmNvbnRyb2wgICAgICAgICB8ICAgNCArCiA2IGZpbGVzIGNoYW5nZWQsIDIy OSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X21lbWNvbnRleHRfcmVwb3J0aW5nL01ha2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X21lbWNvbnRleHRfcmVwb3J0aW5nL3QvMDAxX21lbWNvbnRleHRfaW5q LnBsCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X21lbWNvbnRleHRf cmVwb3J0aW5nL3Rlc3RfbWVtY29udGV4dF9yZXBvcnRpbmctLTEuMC5zcWwKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfbWVtY29udGV4dF9yZXBvcnRpbmcvdGVzdF9t ZW1jb250ZXh0X3JlcG9ydGluZy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X21lbWNvbnRleHRfcmVwb3J0aW5nL3Rlc3RfbWVtY29udGV4dF9yZXBvcnRpbmcuY29u dHJvbAoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUgYi9zcmMvdGVzdC9t b2R1bGVzL01ha2VmaWxlCmluZGV4IDkwMmE3OTU0MTAxLi5hMzFhMjU3OGMxOCAxMDA2NDQKLS0t IGEvc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZQorKysgYi9zcmMvdGVzdC9tb2R1bGVzL01ha2Vm aWxlCkBAIC0zMSw2ICszMSw3IEBAIFNVQkRJUlMgPSBcCiAJCSAgdGVzdF9qc29uX3BhcnNlciBc CiAJCSAgdGVzdF9sZmluZCBcCiAJCSAgdGVzdF9sd2xvY2tfdHJhbmNoZXMgXAorCQkgIHRlc3Rf bWVtY29udGV4dF9yZXBvcnRpbmcgXAogCQkgIHRlc3RfbWlzYyBcCiAJCSAgdGVzdF9vYXRfaG9v a3MgXAogCQkgIHRlc3RfcGFyc2VyIFwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVz dF9tZW1jb250ZXh0X3JlcG9ydGluZy9NYWtlZmlsZSBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9t ZW1jb250ZXh0X3JlcG9ydGluZy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uMDFhN2JhYTAyNjMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfbWVtY29udGV4dF9yZXBvcnRpbmcvTWFrZWZpbGUKQEAgLTAsMCArMSwzMiBAQAor IyBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfbWVtY29udGV4dF9yZXBvcnRpbmcvTWFrZWZpbGUKKwor RVhUUkFfSU5TVEFMTCA9IHNyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cworCitleHBv cnQgZW5hYmxlX2luamVjdGlvbl9wb2ludHMKK01PRFVMRV9iaWcgPSB0ZXN0X21lbWNvbnRleHRf cmVwb3J0aW5nCitPQkpTID0gXAorCSQoV0lOMzJSRVMpIFwKKwl0ZXN0X21lbWNvbnRleHRfcmVw b3J0aW5nLm8KK1BHRklMRURFU0MgPSAidGVzdF9tZW1jb250ZXh0X3JlcG9ydGluZyAtIHRlc3Qg Y29kZSBmb3IgbWVtb3J5IGNvbnRleHQgcmVwb3J0aW5nIgorCitFWFRFTlNJT04gPSB0ZXN0X21l bWNvbnRleHRfcmVwb3J0aW5nCitEQVRBID0gdGVzdF9tZW1jb250ZXh0X3JlcG9ydGluZy0tMS4w LnNxbAorCitSRUdSRVNTID0gdGVzdF9tZW1jb250ZXh0X3JlcG9ydGluZworCitpZmRlZiBVU0Vf UEdYUworUEdfQ09ORklHID0gcGdfY29uZmlnCitQR1hTIDo9ICQoc2hlbGwgJChQR19DT05GSUcp IC0tcGd4cykKK2luY2x1ZGUgJChQR1hTKQorZWxzZQorc3ViZGlyID0gc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X21lbWNvbnRleHRfcmVwb3J0aW5nCit0b3BfYnVpbGRkaXIgPSAuLi8uLi8uLi8uLgor aW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAoraW5jbHVkZSAkKHRv cF9zcmNkaXIpL2NvbnRyaWIvY29udHJpYi1nbG9iYWwubWsKK2VuZGlmCisKK2NoZWNrOgorCSQo cHJvdmVfY2hlY2spCisKK2luc3RhbGxjaGVjazoKKwkkKHByb3ZlX2luc3RhbGxjaGVjaykKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9tZW1jb250ZXh0X3JlcG9ydGluZy90LzAw MV9tZW1jb250ZXh0X2luai5wbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9tZW1jb250ZXh0X3Jl cG9ydGluZy90LzAwMV9tZW1jb250ZXh0X2luai5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMC4uNjlkODQ4OWViMzcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9t b2R1bGVzL3Rlc3RfbWVtY29udGV4dF9yZXBvcnRpbmcvdC8wMDFfbWVtY29udGV4dF9pbmoucGwK QEAgLTAsMCArMSw1OCBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjUsIFBvc3RncmVTUUwgR2xvYmFs IERldmVsb3BtZW50IEdyb3VwCisKKyMgVGVzdCBzdWl0ZSBmb3IgdGVzdGluZyBtZW1vcnkgY29u dGV4dCBzdGF0aXN0aWNzIHJlcG9ydGluZworCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZB VEFMID0+ICdhbGwnOworCit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0 Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOworCitpZiAoJEVOVntlbmFibGVf aW5qZWN0aW9uX3BvaW50c30gbmUgJ3llcycpCit7CisgICAgICAgcGxhbiBza2lwX2FsbCA9PiAn SW5qZWN0aW9uIHBvaW50cyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnVpbGQnOworfQorbXkgJHBz cWxfZXJyOworIyBDcmVhdGUgYW5kIHN0YXJ0IGEgY2x1c3RlciB3aXRoIG9uZSBub2RlCitteSAk bm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnbWFpbicpOworJG5vZGUtPmlu aXQoYWxsb3dzX3N0cmVhbWluZyA9PiAxKTsKKyMgbWF4X2Nvbm5lY3Rpb25zIG5lZWQgdG8gYmUg YnVtcGVkIGluIG9yZGVyIHRvIGFjY29tbW9kYXRlIGZvciBwZ2JlbmNoIGNsaWVudHMKKyMgYW5k IGxvZ19zdGF0ZW1lbnQgaXMgZGlhbGxlZCBkb3duIHNpbmNlIGl0IG90aGVyd2lzZSB3aWxsIGdl bmVyYXRlIGVub3Jtb3VzCisjIGFtb3VudHMgb2YgbG9nZ2luZy4gUGFnZSB2ZXJpZmljYXRpb24g ZmFpbHVyZXMgYXJlIHN0aWxsIGxvZ2dlZC4KKyRub2RlLT5hcHBlbmRfY29uZigKKyAgICAgICAn cG9zdGdyZXNxbC5jb25mJywKKyAgICAgICBxcVsKK21heF9jb25uZWN0aW9ucyA9IDEwMAorbG9n X3N0YXRlbWVudCA9IG5vbmUKK10pOworJG5vZGUtPnN0YXJ0OworJG5vZGUtPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAnQ1JFQVRFIEVYVEVOU0lPTiB0ZXN0X21lbWNvbnRleHRfcmVwb3J0aW5nOycp OworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnQ1JFQVRFIEVYVEVOU0lPTiBpbmplY3Rp b25fcG9pbnRzOycpOworIyBBdHRhY2hpbmcgdG8gYSBjbGllbnQgcHJvY2VzcyBpbmplY3Rpb24g cG9pbnQgdGhhdCB0aHJvd3MgYW4gZXJyb3IKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg InNlbGVjdCBpbmplY3Rpb25fcG9pbnRzX2F0dGFjaCgnbWVtY29udGV4dC1jbGllbnQtY3Jhc2gn LCAnZXJyb3InKTsiKTsKKworbXkgJHBpZCA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IlNFTEVDVCBwaWQgZnJvbSBwZ19zdGF0X2FjdGl2aXR5IHdoZXJlIGJhY2tlbmRfdHlwZT0nY2hl Y2twb2ludGVyJyIpOworcHJpbnQgIlBJRCI7CitwcmludCAkcGlkOworCisjQ2xpZW50IHNob3Vs ZCBoYXZlIHRocm93biBlcnJvcgorJG5vZGUtPnBzcWwoJ3Bvc3RncmVzJywgcXEoc2VsZWN0IHBn X2dldF9wcm9jZXNzX21lbW9yeV9jb250ZXh0cygkcGlkLCB0cnVlKTspLCBzdGRlcnIgPT4gXCRw c3FsX2Vycik7CitsaWtlICggJHBzcWxfZXJyLCBxci9lcnJvciB0cmlnZ2VyZWQgZm9yIGluamVj dGlvbiBwb2ludCBtZW1jb250ZXh0LWNsaWVudC1jcmFzaC8pOworCisjUXVlcnkgdGhlIHNhbWUg cHJvY2VzcyBhZnRlciBkZXRhY2hpbmcgdGhlIGluamVjdGlvbiBwb2ludCwgdXNpbmcgc29tZSBv dGhlciBjbGllbnQgYW5kIGl0IHNob3VsZCBzdWNjZWVkLgorJG5vZGUtPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAic2VsZWN0IGluamVjdGlvbl9wb2ludHNfZGV0YWNoKCdtZW1jb250ZXh0LWNsaWVu dC1jcmFzaCcpOyIpOworbXkgJHRvcGNvbnRleHRfbmFtZSA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgInNlbGVjdCBuYW1lIGZyb20gcGdfZ2V0X3Byb2Nlc3NfbWVtb3J5X2NvbnRleHRz KCRwaWQsIHRydWUpIHdoZXJlIHBhdGggPSAnezF9JzsiKTsKK29rKCR0b3Bjb250ZXh0X25hbWUg PSAnVG9wTWVtb3J5Q29udGV4dCcpOworCisjIEF0dGFjaGluZyB0byBhIHRhcmdldCBwcm9jZXNz IGluamVjdGlvbiBwb2ludCB0aGF0IHRocm93cyBhbiBlcnJvcgorJG5vZGUtPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAic2VsZWN0IGluamVjdGlvbl9wb2ludHNfYXR0YWNoKCdtZW1jb250ZXh0LXNl cnZlci1jcmFzaCcsICdlcnJvcicpOyIpOworCisjU2VydmVyIHNob3VsZCBoYXZlIHRocm93biBl cnJvcgorJG5vZGUtPnBzcWwoJ3Bvc3RncmVzJywgcXEoc2VsZWN0IHBnX2dldF9wcm9jZXNzX21l bW9yeV9jb250ZXh0cygkcGlkLCB0cnVlKTspLCBzdGRlcnIgPT4gXCRwc3FsX2Vycik7CisKKyNR dWVyeSB0aGUgc2FtZSBwcm9jZXNzIGFmdGVyIGRldGFjaGluZyB0aGUgaW5qZWN0aW9uIHBvaW50 LCB1c2luZyBzb21lIG90aGVyIGNsaWVudCBhbmQgaXQgc2hvdWxkIHN1Y2NlZWQuCiskbm9kZS0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJzZWxlY3QgaW5qZWN0aW9uX3BvaW50c19kZXRhY2goJ21l bWNvbnRleHQtc2VydmVyLWNyYXNoJyk7Iik7CiskdG9wY29udGV4dF9uYW1lID0gJG5vZGUtPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAic2VsZWN0IG5hbWUgZnJvbSBwZ19nZXRfcHJvY2Vzc19tZW1v cnlfY29udGV4dHMoJHBpZCwgdHJ1ZSkgd2hlcmUgcGF0aCA9ICd7MX0nOyIpOworb2soJHRvcGNv bnRleHRfbmFtZSA9ICdUb3BNZW1vcnlDb250ZXh0Jyk7Citkb25lX3Rlc3RpbmcoKTsKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9tZW1jb250ZXh0X3JlcG9ydGluZy90ZXN0X21l bWNvbnRleHRfcmVwb3J0aW5nLS0xLjAuc3FsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X21lbWNv bnRleHRfcmVwb3J0aW5nL3Rlc3RfbWVtY29udGV4dF9yZXBvcnRpbmctLTEuMC5zcWwKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjE4MWRhZjQyOWQwCi0tLSAvZGV2L251 bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X21lbWNvbnRleHRfcmVwb3J0aW5nL3Rlc3Rf bWVtY29udGV4dF9yZXBvcnRpbmctLTEuMC5zcWwKQEAgLTAsMCArMSwxMSBAQAorQ1JFQVRFIEZV TkNUSU9OIG1lbWNvbnRleHRfY3Jhc2hfc2VydmVyKCkKK1JFVFVSTlMgcGdfY2F0YWxvZy52b2lk CitBUyAnTU9EVUxFX1BBVEhOQU1FJyBMQU5HVUFHRSBDOworCitDUkVBVEUgRlVOQ1RJT04gbWVt Y29udGV4dF9jcmFzaF9jbGllbnQoKQorUkVUVVJOUyBwZ19jYXRhbG9nLnZvaWQKK0FTICdNT0RV TEVfUEFUSE5BTUUnIExBTkdVQUdFIEM7CisKK0NSRUFURSBGVU5DVElPTiBkc2FfZHVtcF9zcWwo KQorUkVUVVJOUyBiaWdpbnQKK0FTICdNT0RVTEVfUEFUSE5BTUUnIExBTkdVQUdFIEM7ICAKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9tZW1jb250ZXh0X3JlcG9ydGluZy90ZXN0 X21lbWNvbnRleHRfcmVwb3J0aW5nLmMgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfbWVtY29udGV4 dF9yZXBvcnRpbmcvdGVzdF9tZW1jb250ZXh0X3JlcG9ydGluZy5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45NTUxNTU1MjRjMgotLS0gL2Rldi9udWxsCisrKyBiL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9tZW1jb250ZXh0X3JlcG9ydGluZy90ZXN0X21lbWNvbnRleHRf cmVwb3J0aW5nLmMKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg KgorICogQ29weXJpZ2h0IChjKSAyMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBH cm91cAorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKiAgICAgICAgICAgICBzcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfbWVtY29udGV4dF9yZXBvcnRpbmcvdGVzdF9tZW1jb250ZXh0X3JlcG9ydGluZy5j CisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgor I2luY2x1ZGUgInV0aWxzL2luamVjdGlvbl9wb2ludC5oIgorI2luY2x1ZGUgImZ1bmNhcGkuaCIK KyNpbmNsdWRlICJ1dGlscy9pbmplY3Rpb25fcG9pbnQuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2Rz bV9yZWdpc3RyeS5oIgorCitQR19NT0RVTEVfTUFHSUM7CisKK2V4dGVybiBQR0RMTEVYUE9SVCB2 b2lkIGNyYXNoKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnByaXZhdGVfZGF0YSwgdm9p ZCAqYXJnKTsKKwordm9pZAorY3Jhc2goY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqcHJp dmF0ZV9kYXRhLCB2b2lkICphcmcpCit7CisJYWJvcnQoKTsKK30KKworLyoKKyAqIG1lbWNvbnRl eHRfY3Jhc2hfY2xpZW50CisgKgorICogRW5zdXJlIHRoYXQgdGhlIGNsaWVudCBwcm9jZXNzIGFi b3J0cyBpbiBiZXR3ZWVuIG1lbW9yeSBjb250ZXh0CisgKiByZXBvcnRpbmcuCisgKi8KK1BHX0ZV TkNUSU9OX0lORk9fVjEobWVtY29udGV4dF9jcmFzaF9jbGllbnQpOworRGF0dW0KK21lbWNvbnRl eHRfY3Jhc2hfY2xpZW50KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisjaWZkZWYgVVNFX0lOSkVDVElP Tl9QT0lOVFMKKwlJbmplY3Rpb25Qb2ludEF0dGFjaCgibWVtY29udGV4dC1jbGllbnQtY3Jhc2gi LAorCQkJCQkJICJ0ZXN0X21lbWNvbnRleHRfcmVwb3J0aW5nIiwgImNyYXNoIiwgTlVMTCwgMCk7 CisKKyNlbHNlCisJZWxvZyhFUlJPUiwKKwkJICJ0ZXN0IGlzIG5vdCB3b3JraW5nIGFzIGludGVu ZGVkIHdoZW4gaW5qZWN0aW9uIHBvaW50cyBhcmUgZGlzYWJsZWQiKTsKKyNlbmRpZgorCVBHX1JF VFVSTl9WT0lEKCk7Cit9CisKK1BHX0ZVTkNUSU9OX0lORk9fVjEobWVtY29udGV4dF9kZXRhY2hf Y2xpZW50KTsKK0RhdHVtCittZW1jb250ZXh0X2RldGFjaF9jbGllbnQoUEdfRlVOQ1RJT05fQVJH UykKK3sKKyNpZmRlZiBVU0VfSU5KRUNUSU9OX1BPSU5UUworCUluamVjdGlvblBvaW50RGV0YWNo KCJtZW1jb250ZXh0LWNsaWVudC1jcmFzaCIpOworCisjZWxzZQorCWVsb2coRVJST1IsCisJCSAi dGVzdCBpcyBub3Qgd29ya2luZyBhcyBpbnRlbmRlZCB3aGVuIGluamVjdGlvbiBwb2ludHMgYXJl IGRpc2FibGVkIik7CisjZW5kaWYKKwlQR19SRVRVUk5fVk9JRCgpOworfQorCisvKgorICogbWVt Y29udGV4dF9jcmFzaF9zZXJ2ZXIKKyAqCisgKiBFbnN1cmUgdGhhdCB0aGUgc2VydmVyIHByb2Nl c3MgY3Jhc2hlcyBpbiBiZXR3ZWVuIG1lbW9yeSBjb250ZXh0CisgKiByZXBvcnRpbmcuCisgKi8K K1BHX0ZVTkNUSU9OX0lORk9fVjEobWVtY29udGV4dF9jcmFzaF9zZXJ2ZXIpOworRGF0dW0KK21l bWNvbnRleHRfY3Jhc2hfc2VydmVyKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisjaWZkZWYgVVNFX0lO SkVDVElPTl9QT0lOVFMKKwlJbmplY3Rpb25Qb2ludEF0dGFjaCgibWVtY29udGV4dC1zZXJ2ZXIt Y3Jhc2giLAorCQkJCQkJICJ0ZXN0X21lbWNvbnRleHRfcmVwb3J0aW5nIiwgImNyYXNoIiwgTlVM TCwgMCk7CisKKyNlbHNlCisJZWxvZyhFUlJPUiwKKwkJICJ0ZXN0IGlzIG5vdCB3b3JraW5nIGFz IGludGVuZGVkIHdoZW4gaW5qZWN0aW9uIHBvaW50cyBhcmUgZGlzYWJsZWQiKTsKKyNlbmRpZgor CVBHX1JFVFVSTl9WT0lEKCk7Cit9CisKKy8qCisgKiBtZW1jb250ZXh0X2RldGFjaF9zZXJ2ZXIK KyAqCisgKiBEZXRhY2ggdGhlIGluamVjdGlvbiBwb2ludCB3aGljaCBjcmFzaGVzIHRoZSBzZXJ2 ZXIKKyAqIHJlcG9ydGluZy4KKyAqLworUEdfRlVOQ1RJT05fSU5GT19WMShtZW1jb250ZXh0X2Rl dGFjaF9zZXJ2ZXIpOworRGF0dW0KK21lbWNvbnRleHRfZGV0YWNoX3NlcnZlcihQR19GVU5DVElP Tl9BUkdTKQoreworI2lmZGVmIFVTRV9JTkpFQ1RJT05fUE9JTlRTCisJSW5qZWN0aW9uUG9pbnRE ZXRhY2goIm1lbWNvbnRleHQtc2VydmVyLWNyYXNoIik7CisKKyNlbHNlCisJZWxvZyhFUlJPUiwK KwkJICJ0ZXN0IGlzIG5vdCB3b3JraW5nIGFzIGludGVuZGVkIHdoZW4gaW5qZWN0aW9uIHBvaW50 cyBhcmUgZGlzYWJsZWQiKTsKKyNlbmRpZgorCVBHX1JFVFVSTl9WT0lEKCk7Cit9CisKKy8qCisg KiBkc2FfZHVtcF9zcWwKKyAqLworUEdfRlVOQ1RJT05fSU5GT19WMShkc2FfZHVtcF9zcWwpOwor RGF0dW0KK2RzYV9kdW1wX3NxbChQR19GVU5DVElPTl9BUkdTKQoreworCWJvb2wJCWZvdW5kOwor CXNpemVfdAkJdG90X3NpemU7CisJZHNhX2FyZWEgICAqbWVtc3RhdHNfZHNhX2FyZWE7CisKKwlt ZW1zdGF0c19kc2FfYXJlYSA9IHBnX2dldF9tZW1zdGF0c19kc2FfYXJlYSgpOworCisJaWYgKG1l bXN0YXRzX2RzYV9hcmVhID09IE5VTEwpCisJCW1lbXN0YXRzX2RzYV9hcmVhID0gR2V0TmFtZWRE U0EoIm1lbW9yeV9jb250ZXh0X3N0YXRpc3RpY3NfZHNhIiwgJmZvdW5kKTsKKworCXRvdF9zaXpl ID0gZHNhX2dldF90b3RhbF9zaXplKG1lbXN0YXRzX2RzYV9hcmVhKTsKKwlkc2FfZGV0YWNoKG1l bXN0YXRzX2RzYV9hcmVhKTsKKwlQR19SRVRVUk5fSU5UNjQodG90X3NpemUpOworfQpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X21lbWNvbnRleHRfcmVwb3J0aW5nL3Rlc3RfbWVt Y29udGV4dF9yZXBvcnRpbmcuY29udHJvbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9tZW1jb250 ZXh0X3JlcG9ydGluZy90ZXN0X21lbWNvbnRleHRfcmVwb3J0aW5nLmNvbnRyb2wKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQ4YjUwMTY4MmQ1Ci0tLSAvZGV2L251bGwK KysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X21lbWNvbnRleHRfcmVwb3J0aW5nL3Rlc3RfbWVt Y29udGV4dF9yZXBvcnRpbmcuY29udHJvbApAQCAtMCwwICsxLDQgQEAKK2NvbW1lbnQgPSAnVGVz dCBjb2RlIGZvciBtZW1jb250ZXh0IHJlcG9ydGluZycKK2RlZmF1bHRfdmVyc2lvbiA9ICcxLjAn Cittb2R1bGVfcGF0aG5hbWUgPSAnJGxpYmRpci90ZXN0X21lbWNvbnRleHRfcmVwb3J0aW5nJwor cmVsb2NhdGFibGUgPSB0cnVlCi0tIAoyLjM0LjEKCg== --00000000000087ac25064309151f--