Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lRE5N-0004C2-Aq for pgsql-hackers@arkaria.postgresql.org; Tue, 30 Mar 2021 13:07:09 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1lRE5M-00068C-8a for pgsql-hackers@arkaria.postgresql.org; Tue, 30 Mar 2021 13:07:08 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lRE5L-000685-U3 for pgsql-hackers@lists.postgresql.org; Tue, 30 Mar 2021 13:07:08 +0000 Received: from oss.nttdata.com ([49.212.34.109]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lRE5H-0006in-U3 for pgsql-hackers@postgresql.org; Tue, 30 Mar 2021 13:07:07 +0000 Received: from oss.nttdata.com (localhost [127.0.0.1]) by oss.nttdata.com (Postfix) with ESMTP id 1D1AD6243D; Tue, 30 Mar 2021 22:06:58 +0900 (JST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.102.3 at oss.nttdata.com MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_696b6d435d6345cceba8ea9d8f49d364" Date: Tue, 30 Mar 2021 22:06:58 +0900 From: torikoshia To: Fujii Masao Cc: Kyotaro Horiguchi , pgsql-hackers@postgresql.org, tgl@sss.pgh.pa.us, gkokolatos@protonmail.com, kasahara.tatsuhito@gmail.com, craig@2ndquadrant.com Subject: Re: Get memory contexts of an arbitrary backend process In-Reply-To: <168dbd34-c081-b832-e795-ffcd7c5be35c@oss.nttdata.com> References: <20210326.131721.583838520933682740.horikyota.ntt@gmail.com> <20210326.132836.985270106396322831.horikyota.ntt@gmail.com> <20210326.140851.1169798659519899419.horikyota.ntt@gmail.com> <168dbd34-c081-b832-e795-ffcd7c5be35c@oss.nttdata.com> Message-ID: X-Sender: torikoshia@oss.nttdata.com User-Agent: Roundcube Webmail/1.1.9 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=_696b6d435d6345cceba8ea9d8f49d364 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed On 2021-03-30 02:28, Fujii Masao wrote: Thanks for reviewing and kind suggestions! >> It adds pg_log_backend_memory_contexts(pid) which logs memory contexts >> of the specified backend process. >> >> The number of child contexts to be logged per parent is limited to 100 >> as with MemoryContextStats(). >> >> As written in commit 7b5ef8f2d07, which limits the verbosity of >> memory context statistics dumps, it supposes that practical cases >> where the dump gets long will typically be huge numbers of >> siblings under the same parent context; while the additional >> debugging value from seeing details about individual siblings >> beyond 100 will not be large. >> >> Thoughts? > > I'm OK with 100. We should comment why we chose 100 for that. Added following comments. + /* + * When a backend process is consuming huge memory, logging all its + * memory contexts might overrun available disk space. To prevent + * this, we limit the number of child contexts per parent to 100. + * + * As with MemoryContextStats(), we suppose that practical cases + * where the dump gets long will typically be huge numbers of + * siblings under the same parent context; while the additional + * debugging value from seeing details about individual siblings + * beyond 100 will not be large. + */ + MemoryContextStatsDetail(TopMemoryContext, 100, false); > > Here are some review comments. > > Isn't it better to move HandleProcSignalLogMemoryContext() and > ProcessLogMemoryContextInterrupt() to mcxt.c from procsignal.c > (like the functions for notify interrupt are defined in async.c) > because they are the functions for memory contexts? Agreed. Also renamed HandleProcSignalLogMemoryContext to HandleLogMemoryContextInterrupt. > + * HandleProcSignalLogMemoryContext > + * > + * Handle receipt of an interrupt indicating log memory context. > + * Signal handler portion of interrupt handling. > > IMO it's better to comment why we need to separate the function into > two, > i.e., HandleProcSignalLogMemoryContext() and > ProcessLogMemoryContextInterrupt(), > like the comment for other similar function explains. What about the > followings? Thanks! Changed them to the suggested one. > ------------------------------- > HandleLogMemoryContextInterrupt > > Handle receipt of an interrupt indicating logging of memory contexts. > > All the actual work is deferred to ProcessLogMemoryContextInterrupt(), > because we cannot safely emit a log message inside the signal handler. > ------------------------------- > ProcessLogMemoryContextInterrupt > > Perform logging of memory contexts of this backend process. > > Any backend that participates in ProcSignal signaling must arrange to > call this function if we see LogMemoryContextPending set. It is called > from CHECK_FOR_INTERRUPTS(), which is enough because the target process > for logging of memory contexts is a backend. > ------------------------------- > > > + if (CheckProcSignal(PROCSIG_LOG_MEMORY_CONTEXT)) > + HandleProcSignalLogMemoryContext(); > + > if (CheckProcSignal(PROCSIG_BARRIER)) > HandleProcSignalBarrierInterrupt(); > > The code for memory context logging interrupt came after barrier > interrupt > in other places, e.g., procsignal.h. Why is this order of code > different? Fixed. > +/* > + * pg_log_backend_memory_contexts > + * Print memory context of the specified backend process. > > Isn't it better to move pg_log_backend_memory_contexts() to mcxtfuncs.c > from mcxt.c because this is the SQL function memory contexts? Agreed. > IMO we should comment why we allow only superuser to call this > function. > What about the following? Thanks! Modified the patch according to the suggestions. > ----------------- > Signal a backend process to log its memory contexts. > > Only superusers are allowed to signal to log the memory contexts > because allowing any users to issue this request at an unbounded rate > would cause lots of log messages and which can lead to denial of > service. > ----------------- > > + PGPROC *proc = BackendPidGetProc(pid); > + > + /* Check whether the target process is PostgreSQL backend process. */ > + if (proc == NULL) > > What about adding more comments as follows? > > --------------------------------- > + /* > + * BackendPidGetProc returns NULL if the pid isn't valid; but by the > time > + * we reach kill(), a process for which we get a valid proc here > might > + * have terminated on its own. There's no way to acquire a lock on > an > + * arbitrary process to prevent that. But since this mechanism is > usually > + * used to debug a backend running and consuming lots of memory, > + * that it might end on its own first and its memory contexts are not > + * logged is not a problem. > + */ > + if (proc == NULL) > + { > + /* > + * This is just a warning so a loop-through-resultset will not abort > + * if one backend logged its memory contexts during the run. > + */ > + ereport(WARNING, > --------------------------------- > > + ereport(ERROR, > + (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), > + errmsg("must be a superuser to log memory contexts"))); > + PG_RETURN_BOOL(false); > > This PG_RETURN_BOOL(false) is unnecessary because ereport() will emit > an ERROR? > > +$node->psql('postgres', 'select > pg_log_backend_memory_contexts(pg_backend_pid())'); > + > +my $logfile = slurp_file($node->logfile); > +like($logfile, qr/Grand total: \d+ bytes in \d+ blocks/, > + 'found expected memory context print in the log file'); > > Isn't there the case where the memory contexts have not been logged yet > when slurp_file() is called? It's rare, though. If there is the risk > for that, > we should wait for the memory contexts to be actually logged? > > BTW, I agree that we should have the regression test that calls > pg_log_backend_memory_contexts() and checks, e.g., that it doesn't > cause > segmentation fault. But I'm just wondering if it's a bit overkill to > make perl > scriptand start new node to test only this function... OK, I removed the perl TAP test and added a regression test running pg_log_backend_memory_contexts(pg_backend_pid()) and checking it returns 't'. Regards. --=_696b6d435d6345cceba8ea9d8f49d364 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v6-0001-add-memorycontext-elog-print.patch Content-Disposition: attachment; filename=v6-0001-add-memorycontext-elog-print.patch; size=26843 RnJvbSA3NmEwYmUxYTY5NzkzOWUyNTY4ZWMzOWViNjM2NWNmZmQ3OTU2OWJmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBdHN1c2hpIFRvcmlrb3NoaSA8dG9yaWtvc2hpYUBvc3MubnR0 ZGF0YS5jb20+CkRhdGU6IFR1ZSwgMzAgTWFyIDIwMjEgMDE6NTg6MTggKzA5MDAKU3ViamVjdDog W1BBVENIXSBBZnRlciBjb21taXQgM2U5OGMwYmFmYjI4ZGUsIHdlIGNhbiBkaXNwbGF5IHRoZSB1 c2FnZSBvZgogbWVtb3J5IGNvbnRleHRzIHVzaW5nIHBnX2JhY2tlbmRfbWVtb3J5X2NvbnRleHRz IHN5c3RlbSB2aWV3LiBIb3dldmVyLCBpdHMKIHRhcmdldCBwcm9jZXNzIGlzIGxpbWl0ZWQgdG8g dGhlIGJhY2tlbmQgd2hpY2ggaXMgc2hvd2luZyB0aGUgdmlldy4gVGhpcwogcGF0Y2ggaW50cm9k dWNlcyBwZ19sb2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHMocGlkKSB3aGljaCBsb2dzIG1lbW9y eQogY29udGV4dHMgb2YgdGhlIHNwZWNpZmllZCBiYWNrZW5kIHByb2Nlc3MuCgpDdXJyZW50bHkg dGhlIG51bWJlciBvZiBjaGlsZCBjb250ZXh0cyB0byBiZSBsb2dnZWQgcGVyIHBhcmVudCBpcyBs aW1pdGVkCnRvIDEwMC4KQXMgd2l0aCBNZW1vcnlDb250ZXh0U3RhdHMoKSwgaXQgc3VwcG9zZXMg dGhhdCBwcmFjdGljYWwgY2FzZXMgd2hlcmUgdGhlCmR1bXAgZ2V0cyBsb25nIHdpbGwgdHlwaWNh bGx5IGJlIGh1Z2UgbnVtYmVycyBvZiBzaWJsaW5ncyB1bmRlciB0aGUgc2FtZQpwYXJlbnQgY29u dGV4dDsgd2hpbGUgdGhlIGFkZGl0aW9uYWwgZGVidWdnaW5nIHZhbHVlIGZyb20gc2VlaW5nIGRl dGFpbHMKYWJvdXQgaW5kaXZpZHVhbCBzaWJsaW5ncyBiZXlvbmQgMTAwIHdpbGwgbm90IGJlIGxh cmdlLgotLS0KIGRvYy9zcmMvc2dtbC9mdW5jLnNnbWwgICAgICAgICAgICAgICAgICAgICAgIHwg IDIwICsrKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jICAgICAgICAgfCAg IDQgKwogc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jICAgICAgICAgICAgICAgICAgfCAgIDMg Kwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L21jeHRmdW5jcy5jICAgICAgICAgICAgfCAgNTcgKysr KysrLQogc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMgICAgICAgICAgICAgfCAgIDEg Kwogc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9hc2V0LmMgICAgICAgICAgICAgICAgfCAgIDggKy0K IHNyYy9iYWNrZW5kL3V0aWxzL21tZ3IvZ2VuZXJhdGlvbi5jICAgICAgICAgIHwgICA4ICstCiBz cmMvYmFja2VuZC91dGlscy9tbWdyL21jeHQuYyAgICAgICAgICAgICAgICB8IDE2MyArKysrKysr KysrKysrKystLS0tCiBzcmMvYmFja2VuZC91dGlscy9tbWdyL3NsYWIuYyAgICAgICAgICAgICAg ICB8ICAgOSArLQogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCAgICAgICAgICAgICAg fCAgIDYgKwogc3JjL2luY2x1ZGUvbWlzY2FkbWluLmggICAgICAgICAgICAgICAgICAgICAgfCAg IDEgKwogc3JjL2luY2x1ZGUvbm9kZXMvbWVtbm9kZXMuaCAgICAgICAgICAgICAgICAgfCAgIDYg Ky0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oICAgICAgICAgICAgIHwgICAzICsK IHNyYy9pbmNsdWRlL3V0aWxzL21lbXV0aWxzLmggICAgICAgICAgICAgICAgIHwgICA0ICstCiBz cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL21pc2NfZnVuY3Rpb25zLm91dCB8ICAxMyArKwogc3Jj L3Rlc3QvcmVncmVzcy9zcWwvbWlzY19mdW5jdGlvbnMuc3FsICAgICAgfCAgIDkgKwogMTYgZmls ZXMgY2hhbmdlZCwgMjcwIGluc2VydGlvbnMoKyksIDQ1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdp dCBhL2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwgYi9kb2Mvc3JjL3NnbWwvZnVuYy5zZ21sCmluZGV4 IGZiZjYwNjJkMGEuLjQ4OWVmNWNkOTUgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9mdW5jLnNn bWwKKysrIGIvZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbApAQCAtMjQ4MzIsNiArMjQ4MzIsMjYgQEAg U0VMRUNUIGNvbGxhdGlvbiBmb3IgKCdmb28nIENPTExBVEUgImRlX0RFIik7CiAgICAgICAgPC9w YXJhPjwvZW50cnk+CiAgICAgICA8L3Jvdz4KIAorICAgICAgPHJvdz4KKyAgICAgICA8ZW50cnkg cm9sZT0iZnVuY190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iZnVuY19zaWduYXR1cmUiPgorICAg ICAgICA8aW5kZXh0ZXJtPgorICAgICAgICAgPHByaW1hcnk+cGdfbG9nX2JhY2tlbmRfbWVtb3J5 X2NvbnRleHRzPC9wcmltYXJ5PgorICAgICAgICA8L2luZGV4dGVybT4KKyAgICAgICAgPGZ1bmN0 aW9uPnBnX2xvZ19iYWNrZW5kX21lbW9yeV9jb250ZXh0czwvZnVuY3Rpb24+ICggPHBhcmFtZXRl cj5waWQ8L3BhcmFtZXRlcj4gPHR5cGU+aW50ZWdlcjwvdHlwZT4gKQorICAgICAgICA8cmV0dXJu dmFsdWU+Ym9vbGVhbjwvcmV0dXJudmFsdWU+CisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJh PgorICAgICAgICBMb2cgdGhlIG1lbW9yeSBjb250ZXh0cyB3aG9zZSBiYWNrZW5kIHByb2Nlc3Mg aGFzIHRoZSBzcGVjaWZpZWQKKyAgICAgICAgcHJvY2VzcyBJRC4KKyAgICAgICAgTWVtb3J5IGNv bnRleHRzIHdpbGwgYmUgbG9nZ2VkIGJhc2VkIG9uIHRoZSBsb2cgY29uZmlndXJhdGlvbiBzZXQu CisgICAgICAgIFNlZSA8eHJlZiBsaW5rZW5kPSJydW50aW1lLWNvbmZpZy1sb2dnaW5nIi8+IGZv ciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICBUaGUgbnVtYmVyIG9mIGNoaWxkIGNvbnRleHRz IHBlciBwYXJlbnQgaXMgbGltaXRlZCB0byAxMDAuCisgICAgICAgIEZvciBtb3JlIHRoYW4gMTAw IGNvbnRleHRzLCBhIHN1bW1hcnkgd2lsbCBiZSBzaG93bi4KKyAgICAgICAgT25seSBzdXBlcnVz ZXJzIGNhbiBsb2cgdGhlIG1lbW9yeSBjb250ZXh0cyBldmVuIHdoZW4gdGhlIHNwZWNpZmllZAor ICAgICAgICBwcm9jZXNzIGlzIG5vbi1zdXBlcnVzZXIgYmFja2VuZC4KKyAgICAgICA8L3BhcmE+ PC9lbnRyeT4KKyAgICAgIDwvcm93PgorCiAgICAgICA8cm93PgogICAgICAgIDxlbnRyeSByb2xl PSJmdW5jX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJmdW5jX3NpZ25hdHVyZSI+CiAgICAgICAg IDxpbmRleHRlcm0+CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jc2ln bmFsLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMKaW5kZXggYzZhOGQ0 NjExZS4uZWFjNjg5NTE0MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJv Y3NpZ25hbC5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYwpAQCAt MzAsNiArMzAsNyBAQAogI2luY2x1ZGUgInN0b3JhZ2Uvc2htZW0uaCIKICNpbmNsdWRlICJzdG9y YWdlL3NpbnZhbC5oIgogI2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKKyNpbmNsdWRlICJ1dGls cy9tZW11dGlscy5oIgogCiAvKgogICogVGhlIFNJR1VTUjEgc2lnbmFsIGlzIG11bHRpcGxleGVk IHRvIHN1cHBvcnQgc2lnbmFsaW5nIG11bHRpcGxlIGV2ZW50CkBAIC02NTcsNiArNjU4LDkgQEAg cHJvY3NpZ25hbF9zaWd1c3IxX2hhbmRsZXIoU0lHTkFMX0FSR1MpCiAJaWYgKENoZWNrUHJvY1Np Z25hbChQUk9DU0lHX0JBUlJJRVIpKQogCQlIYW5kbGVQcm9jU2lnbmFsQmFycmllckludGVycnVw dCgpOwogCisJaWYgKENoZWNrUHJvY1NpZ25hbChQUk9DU0lHX0xPR19NRU1PUllfQ09OVEVYVCkp CisJCUhhbmRsZUxvZ01lbW9yeUNvbnRleHRJbnRlcnJ1cHQoKTsKKwogCWlmIChDaGVja1Byb2NT aWduYWwoUFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVF9EQVRBQkFTRSkpCiAJCVJlY292ZXJ5Q29u ZmxpY3RJbnRlcnJ1cHQoUFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVF9EQVRBQkFTRSk7CiAKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYyBiL3NyYy9iYWNrZW5kL3Rjb3Av cG9zdGdyZXMuYwppbmRleCAyYjFiNjgxMDlmLi5hZmFmM2IxY2NlIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC90Y29wL3Bvc3RncmVzLmMKKysrIGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5j CkBAIC0zMjk1LDYgKzMyOTUsOSBAQCBQcm9jZXNzSW50ZXJydXB0cyh2b2lkKQogCiAJaWYgKFBh cmFsbGVsTWVzc2FnZVBlbmRpbmcpCiAJCUhhbmRsZVBhcmFsbGVsTWVzc2FnZXMoKTsKKworCWlm IChMb2dNZW1vcnlDb250ZXh0UGVuZGluZykKKwkJUHJvY2Vzc0xvZ01lbW9yeUNvbnRleHRJbnRl cnJ1cHQoKTsKIH0KIAogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvbWN4dGZ1 bmNzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvbWN4dGZ1bmNzLmMKaW5kZXggYzAyZmE0NzU1 MC4uMmRiZGFiNDA2YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L21jeHRmdW5j cy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9tY3h0ZnVuY3MuYwpAQCAtMTgsNiArMTgs OCBAQAogI2luY2x1ZGUgImZ1bmNhcGkuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNs dWRlICJtYi9wZ193Y2hhci5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgorI2luY2x1ZGUg InN0b3JhZ2UvcHJvY2FycmF5LmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKIAogLyog LS0tLS0tLS0tLQpAQCAtNjEsNyArNjMsNyBAQCBQdXRNZW1vcnlDb250ZXh0c1N0YXRzVHVwbGVT dG9yZShUdXBsZXN0b3Jlc3RhdGUgKnR1cHN0b3JlLAogCiAJLyogRXhhbWluZSB0aGUgY29udGV4 dCBpdHNlbGYgKi8KIAltZW1zZXQoJnN0YXQsIDAsIHNpemVvZihzdGF0KSk7Ci0JKCpjb250ZXh0 LT5tZXRob2RzLT5zdGF0cykgKGNvbnRleHQsIE5VTEwsICh2b2lkICopICZsZXZlbCwgJnN0YXQp OworCSgqY29udGV4dC0+bWV0aG9kcy0+c3RhdHMpIChjb250ZXh0LCBOVUxMLCAodm9pZCAqKSAm bGV2ZWwsICZzdGF0LCB0cnVlKTsKIAogCW1lbXNldCh2YWx1ZXMsIDAsIHNpemVvZih2YWx1ZXMp KTsKIAltZW1zZXQobnVsbHMsIDAsIHNpemVvZihudWxscykpOwpAQCAtMTU1LDMgKzE1Nyw1NiBA QCBwZ19nZXRfYmFja2VuZF9tZW1vcnlfY29udGV4dHMoUEdfRlVOQ1RJT05fQVJHUykKIAogCXJl dHVybiAoRGF0dW0pIDA7CiB9CisKKy8qCisgKiBwZ19sb2dfYmFja2VuZF9tZW1vcnlfY29udGV4 dHMKKyAqCQlTaWduYWwgYSBiYWNrZW5kIHByb2Nlc3MgdG8gbG9nIGl0cyBtZW1vcnkgY29udGV4 dHMuCisgKgorICoJT25seSBzdXBlcnVzZXJzIGFyZSBhbGxvd2VkIHRvIHNpZ25hbCB0byBsb2cg dGhlIG1lbW9yeSBjb250ZXh0cworICoJYmVjYXVzZSBhbGxvd2luZyBhbnkgdXNlcnMgdG8gaXNz dWUgdGhpcyByZXF1ZXN0IGF0IGFuIHVuYm91bmRlZAorICoJcmF0ZSB3b3VsZCBjYXVzZSBsb3Rz IG9mIGxvZyBtZXNzYWdlcyBhbmQgd2hpY2ggY2FuIGxlYWQgdG8KKyAqCWRlbmlhbCBvZiBzZXJ2 aWNlLgorICovCitEYXR1bQorcGdfbG9nX2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzKFBHX0ZVTkNU SU9OX0FSR1MpCit7CisJaW50CQlwaWQgPSBQR19HRVRBUkdfSU5UMzIoMCk7CisJUEdQUk9DCQkq cHJvYyA9IEJhY2tlbmRQaWRHZXRQcm9jKHBpZCk7CisKKwkvKgorCSAqIEJhY2tlbmRQaWRHZXRQ cm9jIHJldHVybnMgTlVMTCBpZiB0aGUgcGlkIGlzbid0IHZhbGlkOyBidXQgYnkgdGhlCisJICog dGltZSB3ZSByZWFjaCBraWxsKCksIGEgcHJvY2VzcyBmb3Igd2hpY2ggd2UgZ2V0IGEgdmFsaWQg cHJvYyBoZXJlCisJICogbWlnaHQgaGF2ZSB0ZXJtaW5hdGVkIG9uIGl0cyBvd24uICBUaGVyZSdz IG5vIHdheSB0byBhY3F1aXJlIGEKKwkgKiBsb2NrIG9uIGFuIGFyYml0cmFyeSBwcm9jZXNzIHRv IHByZXZlbnQgdGhhdC4gQnV0IHNpbmNlIHRoaXMKKwkgKiBtZWNoYW5pc20gaXMgdXN1YWxseSB1 c2VkIHRvIGRlYnVnIGEgYmFja2VuZCBydW5uaW5nIGFuZCBjb25zdW1pbmcKKwkgKiBsb3RzIG9m IG1lbW9yeSwgdGhhdCBpdCBtaWdodCBlbmQgb24gaXRzIG93biBmaXJzdCBhbmQgaXRzIG1lbW9y eQorCSAqIGNvbnRleHRzIGFyZSBub3QgbG9nZ2VkIGlzIG5vdCBhIHByb2JsZW0uCisJICovCisJ aWYgKHByb2MgPT0gTlVMTCkKKwl7CisJCS8qCisJCSAqIFRoaXMgaXMganVzdCBhIHdhcm5pbmcg c28gYSBsb29wLXRocm91Z2gtcmVzdWx0c2V0IHdpbGwgbm90IGFib3J0CisJCSAqIGlmIG9uZSBi YWNrZW5kIGxvZ2dlZCBpdHMgbWVtb3J5IGNvbnRleHRzIGR1cmluZyB0aGUgcnVuLgorCQkgKi8K KwkJZXJlcG9ydChXQVJOSU5HLAorCQkJCShlcnJtc2coIlBJRCAlZCBpcyBub3QgYSBQb3N0Z3Jl U1FMIHNlcnZlciBwcm9jZXNzIiwgcGlkKSkpOworCisJCVBHX1JFVFVSTl9CT09MKGZhbHNlKTsK Kwl9CisKKwkvKiBPbmx5IGFsbG93IHN1cGVydXNlcnMgdG8gbG9nIG1lbW9yeSBjb250ZXh0cy4g Ki8KKwlpZiAoIXN1cGVydXNlcigpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVS UkNPREVfSU5TVUZGSUNJRU5UX1BSSVZJTEVHRSksCisJCQkJIGVycm1zZygibXVzdCBiZSBhIHN1 cGVydXNlciB0byBsb2cgbWVtb3J5IGNvbnRleHRzIikpKTsKKworCWlmKCFTZW5kUHJvY1NpZ25h bChwaWQsIFBST0NTSUdfTE9HX01FTU9SWV9DT05URVhULCBwcm9jLT5iYWNrZW5kSWQpKQorCQlQ R19SRVRVUk5fQk9PTCh0cnVlKTsKKwllbHNlCisJeworCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJ KGVycm1zZygiY291bGQgbm90IHNlbmQgc2lnbmFsIHRvIHByb2Nlc3MgJWQ6ICVtIiwgcGlkKSkp OworCisJCVBHX1JFVFVSTl9CT09MKGZhbHNlKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC91dGlscy9pbml0L2dsb2JhbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFs cy5jCmluZGV4IDczZTBhNjcyYWUuLjZjMjcwNjVmOTYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3V0aWxzL2luaXQvZ2xvYmFscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFs cy5jCkBAIC0zNCw2ICszNCw3IEBAIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBDbGllbnRDb25uZWN0 aW9uTG9zdCA9IGZhbHNlOwogdm9sYXRpbGUgc2lnX2F0b21pY190IElkbGVJblRyYW5zYWN0aW9u U2Vzc2lvblRpbWVvdXRQZW5kaW5nID0gZmFsc2U7CiB2b2xhdGlsZSBzaWdfYXRvbWljX3QgSWRs ZVNlc3Npb25UaW1lb3V0UGVuZGluZyA9IGZhbHNlOwogdm9sYXRpbGUgc2lnX2F0b21pY190IFBy b2NTaWduYWxCYXJyaWVyUGVuZGluZyA9IGZhbHNlOwordm9sYXRpbGUgc2lnX2F0b21pY190IExv Z01lbW9yeUNvbnRleHRQZW5kaW5nID0gZmFsc2U7CiB2b2xhdGlsZSB1aW50MzIgSW50ZXJydXB0 SG9sZG9mZkNvdW50ID0gMDsKIHZvbGF0aWxlIHVpbnQzMiBRdWVyeUNhbmNlbEhvbGRvZmZDb3Vu dCA9IDA7CiB2b2xhdGlsZSB1aW50MzIgQ3JpdFNlY3Rpb25Db3VudCA9IDA7CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC91dGlscy9tbWdyL2FzZXQuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3Iv YXNldC5jCmluZGV4IGVjNmMxMzBkMGYuLjk4MGMwOTI1NTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3V0aWxzL21tZ3IvYXNldC5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvYXNldC5j CkBAIC0yNzIsNyArMjcyLDggQEAgc3RhdGljIFNpemUgQWxsb2NTZXRHZXRDaHVua1NwYWNlKE1l bW9yeUNvbnRleHQgY29udGV4dCwgdm9pZCAqcG9pbnRlcik7CiBzdGF0aWMgYm9vbCBBbGxvY1Nl dElzRW1wdHkoTWVtb3J5Q29udGV4dCBjb250ZXh0KTsKIHN0YXRpYyB2b2lkIEFsbG9jU2V0U3Rh dHMoTWVtb3J5Q29udGV4dCBjb250ZXh0LAogCQkJCQkJICBNZW1vcnlTdGF0c1ByaW50RnVuYyBw cmludGZ1bmMsIHZvaWQgKnBhc3N0aHJ1LAotCQkJCQkJICBNZW1vcnlDb250ZXh0Q291bnRlcnMg KnRvdGFscyk7CisJCQkJCQkgIE1lbW9yeUNvbnRleHRDb3VudGVycyAqdG90YWxzLAorCQkJCQkJ ICBib29sIGlzX2RzdF9zdGRlcnIpOwogCiAjaWZkZWYgTUVNT1JZX0NPTlRFWFRfQ0hFQ0tJTkcK IHN0YXRpYyB2b2lkIEFsbG9jU2V0Q2hlY2soTWVtb3J5Q29udGV4dCBjb250ZXh0KTsKQEAgLTEz MzYsMTEgKzEzMzcsMTIgQEAgQWxsb2NTZXRJc0VtcHR5KE1lbW9yeUNvbnRleHQgY29udGV4dCkK ICAqIHByaW50ZnVuYzogaWYgbm90IE5VTEwsIHBhc3MgYSBodW1hbi1yZWFkYWJsZSBzdGF0cyBz dHJpbmcgdG8gdGhpcy4KICAqIHBhc3N0aHJ1OiBwYXNzIHRoaXMgcG9pbnRlciB0aHJvdWdoIHRv IHByaW50ZnVuYy4KICAqIHRvdGFsczogaWYgbm90IE5VTEwsIGFkZCBzdGF0cyBhYm91dCB0aGlz IGNvbnRleHQgaW50byAqdG90YWxzLgorICogaXNfZHN0X3N0ZGVycjogaXMgdGhlIG91dHB1dCBp cyBzdGRlcnIgb3IgZWxvZy4KICAqLwogc3RhdGljIHZvaWQKIEFsbG9jU2V0U3RhdHMoTWVtb3J5 Q29udGV4dCBjb250ZXh0LAogCQkJICBNZW1vcnlTdGF0c1ByaW50RnVuYyBwcmludGZ1bmMsIHZv aWQgKnBhc3N0aHJ1LAotCQkJICBNZW1vcnlDb250ZXh0Q291bnRlcnMgKnRvdGFscykKKwkJCSAg TWVtb3J5Q29udGV4dENvdW50ZXJzICp0b3RhbHMsIGJvb2wgaXNfZHN0X3N0ZGVycikKIHsKIAlB bGxvY1NldAlzZXQgPSAoQWxsb2NTZXQpIGNvbnRleHQ7CiAJU2l6ZQkJbmJsb2NrcyA9IDA7CkBA IC0xMzc5LDcgKzEzODEsNyBAQCBBbGxvY1NldFN0YXRzKE1lbW9yeUNvbnRleHQgY29udGV4dCwK IAkJCQkgIiV6dSB0b3RhbCBpbiAlemQgYmxvY2tzOyAlenUgZnJlZSAoJXpkIGNodW5rcyk7ICV6 dSB1c2VkIiwKIAkJCQkgdG90YWxzcGFjZSwgbmJsb2NrcywgZnJlZXNwYWNlLCBmcmVlY2h1bmtz LAogCQkJCSB0b3RhbHNwYWNlIC0gZnJlZXNwYWNlKTsKLQkJcHJpbnRmdW5jKGNvbnRleHQsIHBh c3N0aHJ1LCBzdGF0c19zdHJpbmcpOworCQlwcmludGZ1bmMoY29udGV4dCwgcGFzc3RocnUsIHN0 YXRzX3N0cmluZywgaXNfZHN0X3N0ZGVycik7CiAJfQogCiAJaWYgKHRvdGFscykKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvZ2VuZXJhdGlvbi5jIGIvc3JjL2JhY2tlbmQvdXRp bHMvbW1nci9nZW5lcmF0aW9uLmMKaW5kZXggMmI5MDAzNDc2NC4uYjI4NjMwOGFhNCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9nZW5lcmF0aW9uLmMKKysrIGIvc3JjL2JhY2tl bmQvdXRpbHMvbW1nci9nZW5lcmF0aW9uLmMKQEAgLTE1NSw3ICsxNTUsOCBAQCBzdGF0aWMgU2l6 ZSBHZW5lcmF0aW9uR2V0Q2h1bmtTcGFjZShNZW1vcnlDb250ZXh0IGNvbnRleHQsIHZvaWQgKnBv aW50ZXIpOwogc3RhdGljIGJvb2wgR2VuZXJhdGlvbklzRW1wdHkoTWVtb3J5Q29udGV4dCBjb250 ZXh0KTsKIHN0YXRpYyB2b2lkIEdlbmVyYXRpb25TdGF0cyhNZW1vcnlDb250ZXh0IGNvbnRleHQs CiAJCQkJCQkJTWVtb3J5U3RhdHNQcmludEZ1bmMgcHJpbnRmdW5jLCB2b2lkICpwYXNzdGhydSwK LQkJCQkJCQlNZW1vcnlDb250ZXh0Q291bnRlcnMgKnRvdGFscyk7CisJCQkJCQkJTWVtb3J5Q29u dGV4dENvdW50ZXJzICp0b3RhbHMsCisJCQkJCQkJYm9vbCBpc19kc3Rfc3RkZXJyKTsKIAogI2lm ZGVmIE1FTU9SWV9DT05URVhUX0NIRUNLSU5HCiBzdGF0aWMgdm9pZCBHZW5lcmF0aW9uQ2hlY2so TWVtb3J5Q29udGV4dCBjb250ZXh0KTsKQEAgLTY2NSw2ICs2NjYsNyBAQCBHZW5lcmF0aW9uSXNF bXB0eShNZW1vcnlDb250ZXh0IGNvbnRleHQpCiAgKiBwcmludGZ1bmM6IGlmIG5vdCBOVUxMLCBw YXNzIGEgaHVtYW4tcmVhZGFibGUgc3RhdHMgc3RyaW5nIHRvIHRoaXMuCiAgKiBwYXNzdGhydTog cGFzcyB0aGlzIHBvaW50ZXIgdGhyb3VnaCB0byBwcmludGZ1bmMuCiAgKiB0b3RhbHM6IGlmIG5v dCBOVUxMLCBhZGQgc3RhdHMgYWJvdXQgdGhpcyBjb250ZXh0IGludG8gKnRvdGFscy4KKyAqIGlz X2RzdF9zdGRlcnI6IGlzIHRoZSBvdXRwdXQgc2hvdWxkIGJlIHN0ZGVyciBvciBlbG9nLgogICoK ICAqIFhYWCBmcmVlc3BhY2Ugb25seSBhY2NvdW50cyBmb3IgZW1wdHkgc3BhY2UgYXQgdGhlIGVu ZCBvZiB0aGUgYmxvY2ssIG5vdAogICogc3BhY2Ugb2YgZnJlZWQgY2h1bmtzICh3aGljaCBpcyB1 bmtub3duKS4KQEAgLTY3Miw3ICs2NzQsNyBAQCBHZW5lcmF0aW9uSXNFbXB0eShNZW1vcnlDb250 ZXh0IGNvbnRleHQpCiBzdGF0aWMgdm9pZAogR2VuZXJhdGlvblN0YXRzKE1lbW9yeUNvbnRleHQg Y29udGV4dCwKIAkJCQlNZW1vcnlTdGF0c1ByaW50RnVuYyBwcmludGZ1bmMsIHZvaWQgKnBhc3N0 aHJ1LAotCQkJCU1lbW9yeUNvbnRleHRDb3VudGVycyAqdG90YWxzKQorCQkJCU1lbW9yeUNvbnRl eHRDb3VudGVycyAqdG90YWxzLCBib29sIGlzX2RzdF9zdGRlcnIpCiB7CiAJR2VuZXJhdGlvbkNv bnRleHQgKnNldCA9IChHZW5lcmF0aW9uQ29udGV4dCAqKSBjb250ZXh0OwogCVNpemUJCW5ibG9j a3MgPSAwOwpAQCAtNzA0LDcgKzcwNiw3IEBAIEdlbmVyYXRpb25TdGF0cyhNZW1vcnlDb250ZXh0 IGNvbnRleHQsCiAJCQkJICIlenUgdG90YWwgaW4gJXpkIGJsb2NrcyAoJXpkIGNodW5rcyk7ICV6 dSBmcmVlICglemQgY2h1bmtzKTsgJXp1IHVzZWQiLAogCQkJCSB0b3RhbHNwYWNlLCBuYmxvY2tz LCBuY2h1bmtzLCBmcmVlc3BhY2UsCiAJCQkJIG5mcmVlY2h1bmtzLCB0b3RhbHNwYWNlIC0gZnJl ZXNwYWNlKTsKLQkJcHJpbnRmdW5jKGNvbnRleHQsIHBhc3N0aHJ1LCBzdGF0c19zdHJpbmcpOwor CQlwcmludGZ1bmMoY29udGV4dCwgcGFzc3RocnUsIHN0YXRzX3N0cmluZywgaXNfZHN0X3N0ZGVy cik7CiAJfQogCiAJaWYgKHRvdGFscykKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21t Z3IvbWN4dC5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9tY3h0LmMKaW5kZXggODQ0NzJiOTE1 OC4uZjFlZDYxZTVhZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9tY3h0LmMK KysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9tY3h0LmMKQEAgLTIzLDYgKzIzLDEwIEBACiAK ICNpbmNsdWRlICJtYi9wZ193Y2hhci5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1 ZGUgInN0b3JhZ2UvcHJvYy5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcHJvY2FycmF5LmgiCisjaW5j bHVkZSAic3RvcmFnZS9wcm9jc2lnbmFsLmgiCisjaW5jbHVkZSAidXRpbHMvZm1ncnByb3Rvcy5o IgogI2luY2x1ZGUgInV0aWxzL21lbWRlYnVnLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMu aCIKIApAQCAtNTUsOSArNTksMTEgQEAgTWVtb3J5Q29udGV4dCBQb3J0YWxDb250ZXh0ID0gTlVM TDsKIHN0YXRpYyB2b2lkIE1lbW9yeUNvbnRleHRDYWxsUmVzZXRDYWxsYmFja3MoTWVtb3J5Q29u dGV4dCBjb250ZXh0KTsKIHN0YXRpYyB2b2lkIE1lbW9yeUNvbnRleHRTdGF0c0ludGVybmFsKE1l bW9yeUNvbnRleHQgY29udGV4dCwgaW50IGxldmVsLAogCQkJCQkJCQkJICAgYm9vbCBwcmludCwg aW50IG1heF9jaGlsZHJlbiwKLQkJCQkJCQkJCSAgIE1lbW9yeUNvbnRleHRDb3VudGVycyAqdG90 YWxzKTsKKwkJCQkJCQkJCSAgIE1lbW9yeUNvbnRleHRDb3VudGVycyAqdG90YWxzLAorCQkJCQkJ CQkJICAgYm9vbCBpc19kc3Rfc3RkZXJyKTsKIHN0YXRpYyB2b2lkIE1lbW9yeUNvbnRleHRTdGF0 c1ByaW50KE1lbW9yeUNvbnRleHQgY29udGV4dCwgdm9pZCAqcGFzc3RocnUsCi0JCQkJCQkJCQlj b25zdCBjaGFyICpzdGF0c19zdHJpbmcpOworCQkJCQkJCQkJY29uc3QgY2hhciAqc3RhdHNfc3Ry aW5nLAorCQkJCQkJCQkJYm9vbCBpc19kc3Rfc3RkZXJyKTsKIAogLyoKICAqIFlvdSBzaG91bGQg bm90IGRvIG1lbW9yeSBhbGxvY2F0aW9ucyB3aXRoaW4gYSBjcml0aWNhbCBzZWN0aW9uLCBiZWNh dXNlCkBAIC00OTksNyArNTA1LDcgQEAgdm9pZAogTWVtb3J5Q29udGV4dFN0YXRzKE1lbW9yeUNv bnRleHQgY29udGV4dCkKIHsKIAkvKiBBIGhhcmQtd2lyZWQgbGltaXQgb24gdGhlIG51bWJlciBv ZiBjaGlsZHJlbiBpcyB1c3VhbGx5IGdvb2QgZW5vdWdoICovCi0JTWVtb3J5Q29udGV4dFN0YXRz RGV0YWlsKGNvbnRleHQsIDEwMCk7CisJTWVtb3J5Q29udGV4dFN0YXRzRGV0YWlsKGNvbnRleHQs IDEwMCwgdHJ1ZSk7CiB9CiAKIC8qCkBAIC01MDgsMTkgKzUxNCwyOCBAQCBNZW1vcnlDb250ZXh0 U3RhdHMoTWVtb3J5Q29udGV4dCBjb250ZXh0KQogICogRW50cnkgcG9pbnQgZm9yIHVzZSBpZiB5 b3Ugd2FudCB0byB2YXJ5IHRoZSBudW1iZXIgb2YgY2hpbGQgY29udGV4dHMgc2hvd24uCiAgKi8K IHZvaWQKLU1lbW9yeUNvbnRleHRTdGF0c0RldGFpbChNZW1vcnlDb250ZXh0IGNvbnRleHQsIGlu dCBtYXhfY2hpbGRyZW4pCitNZW1vcnlDb250ZXh0U3RhdHNEZXRhaWwoTWVtb3J5Q29udGV4dCBj b250ZXh0LCBpbnQgbWF4X2NoaWxkcmVuLCBib29sIGlzX2RzdF9zdGRlcnIpCiB7CiAJTWVtb3J5 Q29udGV4dENvdW50ZXJzIGdyYW5kX3RvdGFsczsKIAogCW1lbXNldCgmZ3JhbmRfdG90YWxzLCAw LCBzaXplb2YoZ3JhbmRfdG90YWxzKSk7CiAKLQlNZW1vcnlDb250ZXh0U3RhdHNJbnRlcm5hbChj b250ZXh0LCAwLCB0cnVlLCBtYXhfY2hpbGRyZW4sICZncmFuZF90b3RhbHMpOworCU1lbW9yeUNv bnRleHRTdGF0c0ludGVybmFsKGNvbnRleHQsIDAsIHRydWUsIG1heF9jaGlsZHJlbiwgJmdyYW5k X3RvdGFscywgaXNfZHN0X3N0ZGVycik7CiAKLQlmcHJpbnRmKHN0ZGVyciwKLQkJCSJHcmFuZCB0 b3RhbDogJXp1IGJ5dGVzIGluICV6ZCBibG9ja3M7ICV6dSBmcmVlICglemQgY2h1bmtzKTsgJXp1 IHVzZWRcbiIsCi0JCQlncmFuZF90b3RhbHMudG90YWxzcGFjZSwgZ3JhbmRfdG90YWxzLm5ibG9j a3MsCi0JCQlncmFuZF90b3RhbHMuZnJlZXNwYWNlLCBncmFuZF90b3RhbHMuZnJlZWNodW5rcywK LQkJCWdyYW5kX3RvdGFscy50b3RhbHNwYWNlIC0gZ3JhbmRfdG90YWxzLmZyZWVzcGFjZSk7CisJ aWYgKGlzX2RzdF9zdGRlcnIpCisJCWZwcmludGYoc3RkZXJyLAorCQkJCSJHcmFuZCB0b3RhbDog JXp1IGJ5dGVzIGluICV6ZCBibG9ja3M7ICV6dSBmcmVlICglemQgY2h1bmtzKTsgJXp1IHVzZWRc biIsCisJCQkJZ3JhbmRfdG90YWxzLnRvdGFsc3BhY2UsIGdyYW5kX3RvdGFscy5uYmxvY2tzLAor CQkJCWdyYW5kX3RvdGFscy5mcmVlc3BhY2UsIGdyYW5kX3RvdGFscy5mcmVlY2h1bmtzLAorCQkJ CWdyYW5kX3RvdGFscy50b3RhbHNwYWNlIC0gZ3JhbmRfdG90YWxzLmZyZWVzcGFjZSk7CisJZWxz ZQorCQllcmVwb3J0KExPR19TRVJWRVJfT05MWSwKKwkJCQkoZXJyaGlkZXN0bXQodHJ1ZSksCisJ CQkJZXJyaGlkZWNvbnRleHQodHJ1ZSksCisJCQkJZXJybXNnX2ludGVybmFsKCJHcmFuZCB0b3Rh bDogJXp1IGJ5dGVzIGluICV6ZCBibG9ja3M7ICV6dSBmcmVlICglemQgY2h1bmtzKTsgJXp1IHVz ZWQiLAorCQkJCWdyYW5kX3RvdGFscy50b3RhbHNwYWNlLCBncmFuZF90b3RhbHMubmJsb2NrcywK KwkJCQlncmFuZF90b3RhbHMuZnJlZXNwYWNlLCBncmFuZF90b3RhbHMuZnJlZWNodW5rcywKKwkJ CQlncmFuZF90b3RhbHMudG90YWxzcGFjZSAtIGdyYW5kX3RvdGFscy5mcmVlc3BhY2UpKSk7CiB9 CiAKIC8qCkBAIC01MzMsNyArNTQ4LDggQEAgTWVtb3J5Q29udGV4dFN0YXRzRGV0YWlsKE1lbW9y eUNvbnRleHQgY29udGV4dCwgaW50IG1heF9jaGlsZHJlbikKIHN0YXRpYyB2b2lkCiBNZW1vcnlD b250ZXh0U3RhdHNJbnRlcm5hbChNZW1vcnlDb250ZXh0IGNvbnRleHQsIGludCBsZXZlbCwKIAkJ CQkJCSAgIGJvb2wgcHJpbnQsIGludCBtYXhfY2hpbGRyZW4sCi0JCQkJCQkgICBNZW1vcnlDb250 ZXh0Q291bnRlcnMgKnRvdGFscykKKwkJCQkJCSAgIE1lbW9yeUNvbnRleHRDb3VudGVycyAqdG90 YWxzLAorCQkJCQkJICAgYm9vbCBpc19kc3Rfc3RkZXJyKQogewogCU1lbW9yeUNvbnRleHRDb3Vu dGVycyBsb2NhbF90b3RhbHM7CiAJTWVtb3J5Q29udGV4dCBjaGlsZDsKQEAgLTU0NSw3ICs1NjEs NyBAQCBNZW1vcnlDb250ZXh0U3RhdHNJbnRlcm5hbChNZW1vcnlDb250ZXh0IGNvbnRleHQsIGlu dCBsZXZlbCwKIAljb250ZXh0LT5tZXRob2RzLT5zdGF0cyhjb250ZXh0LAogCQkJCQkJCXByaW50 ID8gTWVtb3J5Q29udGV4dFN0YXRzUHJpbnQgOiBOVUxMLAogCQkJCQkJCSh2b2lkICopICZsZXZl bCwKLQkJCQkJCQl0b3RhbHMpOworCQkJCQkJCXRvdGFscywgaXNfZHN0X3N0ZGVycik7CiAKIAkv KgogCSAqIEV4YW1pbmUgY2hpbGRyZW4uICBJZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG1heF9jaGls ZHJlbiBvZiB0aGVtLCB3ZSBkbwpAQCAtNTYwLDExICs1NzYsMTMgQEAgTWVtb3J5Q29udGV4dFN0 YXRzSW50ZXJuYWwoTWVtb3J5Q29udGV4dCBjb250ZXh0LCBpbnQgbGV2ZWwsCiAJCWlmIChpY2hp bGQgPCBtYXhfY2hpbGRyZW4pCiAJCQlNZW1vcnlDb250ZXh0U3RhdHNJbnRlcm5hbChjaGlsZCwg bGV2ZWwgKyAxLAogCQkJCQkJCQkJICAgcHJpbnQsIG1heF9jaGlsZHJlbiwKLQkJCQkJCQkJCSAg IHRvdGFscyk7CisJCQkJCQkJCQkgICB0b3RhbHMsCisJCQkJCQkJCQkgICBpc19kc3Rfc3RkZXJy KTsKIAkJZWxzZQogCQkJTWVtb3J5Q29udGV4dFN0YXRzSW50ZXJuYWwoY2hpbGQsIGxldmVsICsg MSwKIAkJCQkJCQkJCSAgIGZhbHNlLCBtYXhfY2hpbGRyZW4sCi0JCQkJCQkJCQkgICAmbG9jYWxf dG90YWxzKTsKKwkJCQkJCQkJCSAgICZsb2NhbF90b3RhbHMsCisJCQkJCQkJCQkgICBpc19kc3Rf c3RkZXJyKTsKIAl9CiAKIAkvKiBEZWFsIHdpdGggZXhjZXNzIGNoaWxkcmVuICovCkBAIC01NzQs MTYgKzU5MiwzMSBAQCBNZW1vcnlDb250ZXh0U3RhdHNJbnRlcm5hbChNZW1vcnlDb250ZXh0IGNv bnRleHQsIGludCBsZXZlbCwKIAkJewogCQkJaW50CQkJaTsKIAotCQkJZm9yIChpID0gMDsgaSA8 PSBsZXZlbDsgaSsrKQotCQkJCWZwcmludGYoc3RkZXJyLCAiICAiKTsKLQkJCWZwcmludGYoc3Rk ZXJyLAotCQkJCQkiJWQgbW9yZSBjaGlsZCBjb250ZXh0cyBjb250YWluaW5nICV6dSB0b3RhbCBp biAlemQgYmxvY2tzOyAlenUgZnJlZSAoJXpkIGNodW5rcyk7ICV6dSB1c2VkXG4iLAotCQkJCQlp Y2hpbGQgLSBtYXhfY2hpbGRyZW4sCi0JCQkJCWxvY2FsX3RvdGFscy50b3RhbHNwYWNlLAotCQkJ CQlsb2NhbF90b3RhbHMubmJsb2NrcywKLQkJCQkJbG9jYWxfdG90YWxzLmZyZWVzcGFjZSwKLQkJ CQkJbG9jYWxfdG90YWxzLmZyZWVjaHVua3MsCi0JCQkJCWxvY2FsX3RvdGFscy50b3RhbHNwYWNl IC0gbG9jYWxfdG90YWxzLmZyZWVzcGFjZSk7CisJCQlpZiAoaXNfZHN0X3N0ZGVycikKKwkJCXsK KwkJCQlmb3IgKGkgPSAwOyBpIDw9IGxldmVsOyBpKyspCisJCQkJCWZwcmludGYoc3RkZXJyLCAi ICAiKTsKKwkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJCSIlZCBtb3JlIGNoaWxkIGNvbnRleHRz IGNvbnRhaW5pbmcgJXp1IHRvdGFsIGluICV6ZCBibG9ja3M7ICV6dSBmcmVlICglemQgY2h1bmtz KTsgJXp1IHVzZWRcbiIsCisJCQkJCQlpY2hpbGQgLSBtYXhfY2hpbGRyZW4sCisJCQkJCQlsb2Nh bF90b3RhbHMudG90YWxzcGFjZSwKKwkJCQkJCWxvY2FsX3RvdGFscy5uYmxvY2tzLAorCQkJCQkJ bG9jYWxfdG90YWxzLmZyZWVzcGFjZSwKKwkJCQkJCWxvY2FsX3RvdGFscy5mcmVlY2h1bmtzLAor CQkJCQkJbG9jYWxfdG90YWxzLnRvdGFsc3BhY2UgLSBsb2NhbF90b3RhbHMuZnJlZXNwYWNlKTsK KwkJCX0KKwkJCWVsc2UKKwkJCQllcmVwb3J0KExPR19TRVJWRVJfT05MWSwKKwkJCQkJCShlcnJo aWRlc3RtdCh0cnVlKSwKKwkJCQkJCWVycmhpZGVjb250ZXh0KHRydWUpLAorCQkJCQkJZXJybXNn X2ludGVybmFsKCJsZXZlbDogJWQgJWQgbW9yZSBjaGlsZCBjb250ZXh0cyBjb250YWluaW5nICV6 dSB0b3RhbCBpbiAlemQgYmxvY2tzOyAlenUgZnJlZSAoJXpkIGNodW5rcyk7ICV6dSB1c2VkIiwK KwkJCQkJCWxldmVsLAorCQkJCQkJaWNoaWxkIC0gbWF4X2NoaWxkcmVuLAorCQkJCQkJbG9jYWxf dG90YWxzLnRvdGFsc3BhY2UsCisJCQkJCQlsb2NhbF90b3RhbHMubmJsb2NrcywKKwkJCQkJCWxv Y2FsX3RvdGFscy5mcmVlc3BhY2UsCisJCQkJCQlsb2NhbF90b3RhbHMuZnJlZWNodW5rcywKKwkJ CQkJCWxvY2FsX3RvdGFscy50b3RhbHNwYWNlIC0gbG9jYWxfdG90YWxzLmZyZWVzcGFjZSkpKTsK IAkJfQogCiAJCWlmICh0b3RhbHMpCkBAIC02MDUsMTEgKzYzOCwxMyBAQCBNZW1vcnlDb250ZXh0 U3RhdHNJbnRlcm5hbChNZW1vcnlDb250ZXh0IGNvbnRleHQsIGludCBsZXZlbCwKICAqLwogc3Rh dGljIHZvaWQKIE1lbW9yeUNvbnRleHRTdGF0c1ByaW50KE1lbW9yeUNvbnRleHQgY29udGV4dCwg dm9pZCAqcGFzc3RocnUsCi0JCQkJCQljb25zdCBjaGFyICpzdGF0c19zdHJpbmcpCisJCQkJCQlj b25zdCBjaGFyICpzdGF0c19zdHJpbmcsCisJCQkJCQlib29sIGlzX2RzdF9zdGRlcnIpCiB7CiAJ aW50CQkJbGV2ZWwgPSAqKGludCAqKSBwYXNzdGhydTsKIAljb25zdCBjaGFyICpuYW1lID0gY29u dGV4dC0+bmFtZTsKIAljb25zdCBjaGFyICppZGVudCA9IGNvbnRleHQtPmlkZW50OworCWNoYXIJ CXRydW5jYXRlZF9pZGVudFsxMTBdOwogCWludAkJCWk7CiAKIAkvKgpAQCAtNjIzLDkgKzY1OCw4 IEBAIE1lbW9yeUNvbnRleHRTdGF0c1ByaW50KE1lbW9yeUNvbnRleHQgY29udGV4dCwgdm9pZCAq cGFzc3RocnUsCiAJCWlkZW50ID0gTlVMTDsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgbGV2ZWw7 IGkrKykKLQkJZnByaW50ZihzdGRlcnIsICIgICIpOwotCWZwcmludGYoc3RkZXJyLCAiJXM6ICVz IiwgbmFtZSwgc3RhdHNfc3RyaW5nKTsKKwl0cnVuY2F0ZWRfaWRlbnRbMF0gPSAnXDAnOworCiAJ aWYgKGlkZW50KQogCXsKIAkJLyoKQEAgLTYzNywyNCArNjcxLDQyIEBAIE1lbW9yeUNvbnRleHRT dGF0c1ByaW50KE1lbW9yeUNvbnRleHQgY29udGV4dCwgdm9pZCAqcGFzc3RocnUsCiAJCWludAkJ CWlkbGVuID0gc3RybGVuKGlkZW50KTsKIAkJYm9vbAkJdHJ1bmNhdGVkID0gZmFsc2U7CiAKKwkJ c3RyY3B5KHRydW5jYXRlZF9pZGVudCwgIjogIik7CisKIAkJaWYgKGlkbGVuID4gMTAwKQogCQl7 CiAJCQlpZGxlbiA9IHBnX21iY2xpcGxlbihpZGVudCwgaWRsZW4sIDEwMCk7CiAJCQl0cnVuY2F0 ZWQgPSB0cnVlOwogCQl9Ci0JCWZwcmludGYoc3RkZXJyLCAiOiAiKTsKKworCQlpID0gc3RybGVu KHRydW5jYXRlZF9pZGVudCk7CisKIAkJd2hpbGUgKGlkbGVuLS0gPiAwKQogCQl7CiAJCQl1bnNp Z25lZCBjaGFyIGMgPSAqaWRlbnQrKzsKIAogCQkJaWYgKGMgPCAnICcpCiAJCQkJYyA9ICcgJzsK LQkJCWZwdXRjKGMsIHN0ZGVycik7CisJCQl0cnVuY2F0ZWRfaWRlbnRbaSsrXSA9IGM7CiAJCX0K KwkJdHJ1bmNhdGVkX2lkZW50W2ldID0gJ1wwJzsKKwogCQlpZiAodHJ1bmNhdGVkKQotCQkJZnBy aW50ZihzdGRlcnIsICIuLi4iKTsKKwkJCXN0cmNhdCh0cnVuY2F0ZWRfaWRlbnQsICIuLi4iKTsK IAl9Ci0JZnB1dGMoJ1xuJywgc3RkZXJyKTsKKworCWlmIChpc19kc3Rfc3RkZXJyKQorCXsKKwkJ Zm9yIChpID0gMDsgaSA8IGxldmVsOyBpKyspCisJCQlmcHJpbnRmKHN0ZGVyciwgIiAgIik7CisJ CWZwcmludGYoc3RkZXJyLCAiJXM6ICVzJXNcbiIsIG5hbWUsIHN0YXRzX3N0cmluZywgdHJ1bmNh dGVkX2lkZW50KTsKKwl9CisJZWxzZQorCQllcmVwb3J0KExPR19TRVJWRVJfT05MWSwKKwkJCQko ZXJyaGlkZXN0bXQodHJ1ZSksCisJCQkJIGVycmhpZGVjb250ZXh0KHRydWUpLAorCQkJCSBlcnJt c2dfaW50ZXJuYWwoImxldmVsOiAlZCAlczogJXMlcyIsCisJCQkJCQkJCQkgbGV2ZWwsIG5hbWUs IHN0YXRzX3N0cmluZywgdHJ1bmNhdGVkX2lkZW50KSkpOwogfQogCiAvKgpAQCAtOTQ2LDYgKzk5 OCw1MyBAQCBNZW1vcnlDb250ZXh0QWxsb2NFeHRlbmRlZChNZW1vcnlDb250ZXh0IGNvbnRleHQs IFNpemUgc2l6ZSwgaW50IGZsYWdzKQogCXJldHVybiByZXQ7CiB9CiAKKy8qCisgKiBIYW5kbGVM b2dNZW1vcnlDb250ZXh0SW50ZXJydXB0CisgKgkJSGFuZGxlIHJlY2VpcHQgb2YgYW4gaW50ZXJy dXB0IGluZGljYXRpbmcgbG9nZ2luZyBvZiBtZW1vcnkKKyAqCQljb250ZXh0cy4KKyAqCisgKglB bGwgdGhlIGFjdHVhbCB3b3JrIGlzIGRlZmVycmVkIHRvIFByb2Nlc3NMb2dNZW1vcnlDb250ZXh0 SW50ZXJydXB0KCksCisgKgliZWNhdXNlIHdlIGNhbm5vdCBzYWZlbHkgZW1pdCBhIGxvZyBtZXNz YWdlIGluc2lkZSB0aGUgc2lnbmFsIGhhbmRsZXIuCisgKi8KK3ZvaWQKK0hhbmRsZUxvZ01lbW9y eUNvbnRleHRJbnRlcnJ1cHQodm9pZCkKK3sKKwlJbnRlcnJ1cHRQZW5kaW5nID0gdHJ1ZTsKKwlM b2dNZW1vcnlDb250ZXh0UGVuZGluZyA9IHRydWU7CisJLyogbGF0Y2ggd2lsbCBiZSBzZXQgYnkg cHJvY3NpZ25hbF9zaWd1c3IxX2hhbmRsZXIgKi8KK30KKworLyoKKyAqIFByb2Nlc3NMb2dNZW1v cnlDb250ZXh0SW50ZXJydXB0CisgKiAJCVBlcmZvcm0gbG9nZ2luZyBvZiBtZW1vcnkgY29udGV4 dHMgb2YgdGhpcyBiYWNrZW5kIHByb2Nlc3MuCisgKgorICoJQW55IGJhY2tlbmQgdGhhdCBwYXJ0 aWNpcGF0ZXMgaW4gUHJvY1NpZ25hbCBzaWduYWxpbmcgbXVzdCBhcnJhbmdlCisgKgl0byBjYWxs IHRoaXMgZnVuY3Rpb24gaWYgd2Ugc2VlIExvZ01lbW9yeUNvbnRleHRQZW5kaW5nIHNldC4KKyAq CUl0IGlzIGNhbGxlZCBmcm9tIENIRUNLX0ZPUl9JTlRFUlJVUFRTKCksIHdoaWNoIGlzIGVub3Vn aCBiZWNhdXNlCisgKgl0aGUgdGFyZ2V0IHByb2Nlc3MgZm9yIGxvZ2dpbmcgb2YgbWVtb3J5IGNv bnRleHRzIGlzIGEgYmFja2VuZC4KKyAqLwordm9pZAorUHJvY2Vzc0xvZ01lbW9yeUNvbnRleHRJ bnRlcnJ1cHQodm9pZCkKK3sKKwlMb2dNZW1vcnlDb250ZXh0UGVuZGluZyA9IGZhbHNlOworCisJ ZXJlcG9ydChMT0csCisJCShlcnJtc2coIkxvZ2dpbmcgbWVtb3J5IGNvbnRleHRzIG9mIFBJRCAl ZCIsIE15UHJvY1BpZCkpKTsKKworCS8qCisJICogV2hlbiBhIGJhY2tlbmQgcHJvY2VzcyBpcyBj b25zdW1pbmcgaHVnZSBtZW1vcnksIGxvZ2dpbmcgYWxsIGl0cworCSAqIG1lbW9yeSBjb250ZXh0 cyBtaWdodCBvdmVycnVuIGF2YWlsYWJsZSBkaXNrIHNwYWNlLiBUbyBwcmV2ZW50CisJICogdGhp cywgd2UgbGltaXQgdGhlIG51bWJlciBvZiBjaGlsZCBjb250ZXh0cyBwZXIgcGFyZW50IHRvIDEw MC4KKwkgKgorCSAqIEFzIHdpdGggTWVtb3J5Q29udGV4dFN0YXRzKCksIHdlIHN1cHBvc2UgdGhh dCBwcmFjdGljYWwgY2FzZXMKKwkgKiB3aGVyZSB0aGUgZHVtcCBnZXRzIGxvbmcgd2lsbCB0eXBp Y2FsbHkgYmUgaHVnZSBudW1iZXJzIG9mCisJICogc2libGluZ3MgdW5kZXIgdGhlIHNhbWUgcGFy ZW50IGNvbnRleHQ7IHdoaWxlIHRoZSBhZGRpdGlvbmFsCisJICogZGVidWdnaW5nIHZhbHVlIGZy b20gc2VlaW5nIGRldGFpbHMgYWJvdXQgaW5kaXZpZHVhbCBzaWJsaW5ncworCSAqIGJleW9uZCAx MDAgd2lsbCBub3QgYmUgbGFyZ2UuCisJICovCisJTWVtb3J5Q29udGV4dFN0YXRzRGV0YWlsKFRv cE1lbW9yeUNvbnRleHQsIDEwMCwgZmFsc2UpOworfQorCiB2b2lkICoKIHBhbGxvYyhTaXplIHNp emUpCiB7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9tbWdyL3NsYWIuYyBiL3NyYy9i YWNrZW5kL3V0aWxzL21tZ3Ivc2xhYi5jCmluZGV4IDkyMTNiZTdjOTUuLjQ3OWIwOGJlZGQgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3Ivc2xhYi5jCisrKyBiL3NyYy9iYWNrZW5k L3V0aWxzL21tZ3Ivc2xhYi5jCkBAIC0xMzUsNyArMTM1LDggQEAgc3RhdGljIFNpemUgU2xhYkdl dENodW5rU3BhY2UoTWVtb3J5Q29udGV4dCBjb250ZXh0LCB2b2lkICpwb2ludGVyKTsKIHN0YXRp YyBib29sIFNsYWJJc0VtcHR5KE1lbW9yeUNvbnRleHQgY29udGV4dCk7CiBzdGF0aWMgdm9pZCBT bGFiU3RhdHMoTWVtb3J5Q29udGV4dCBjb250ZXh0LAogCQkJCQkgIE1lbW9yeVN0YXRzUHJpbnRG dW5jIHByaW50ZnVuYywgdm9pZCAqcGFzc3RocnUsCi0JCQkJCSAgTWVtb3J5Q29udGV4dENvdW50 ZXJzICp0b3RhbHMpOworCQkJCQkgIE1lbW9yeUNvbnRleHRDb3VudGVycyAqdG90YWxzLAorCQkJ CQkgIGJvb2wgaXNfZHN0X3N0ZGVycik7CiAjaWZkZWYgTUVNT1JZX0NPTlRFWFRfQ0hFQ0tJTkcK IHN0YXRpYyB2b2lkIFNsYWJDaGVjayhNZW1vcnlDb250ZXh0IGNvbnRleHQpOwogI2VuZGlmCkBA IC02MzIsMTEgKzYzMywxMyBAQCBTbGFiSXNFbXB0eShNZW1vcnlDb250ZXh0IGNvbnRleHQpCiAg KiBwcmludGZ1bmM6IGlmIG5vdCBOVUxMLCBwYXNzIGEgaHVtYW4tcmVhZGFibGUgc3RhdHMgc3Ry aW5nIHRvIHRoaXMuCiAgKiBwYXNzdGhydTogcGFzcyB0aGlzIHBvaW50ZXIgdGhyb3VnaCB0byBw cmludGZ1bmMuCiAgKiB0b3RhbHM6IGlmIG5vdCBOVUxMLCBhZGQgc3RhdHMgYWJvdXQgdGhpcyBj b250ZXh0IGludG8gKnRvdGFscy4KKyAqIGlzX2RzdF9zdGRlcnI6IGlzIHRoZSBvdXRwdXQgc2hv dWxkIGJlIHN0ZGVyciBvciBlbG9nLgogICovCiBzdGF0aWMgdm9pZAogU2xhYlN0YXRzKE1lbW9y eUNvbnRleHQgY29udGV4dCwKIAkJICBNZW1vcnlTdGF0c1ByaW50RnVuYyBwcmludGZ1bmMsIHZv aWQgKnBhc3N0aHJ1LAotCQkgIE1lbW9yeUNvbnRleHRDb3VudGVycyAqdG90YWxzKQorCQkgIE1l bW9yeUNvbnRleHRDb3VudGVycyAqdG90YWxzLAorCQkgIGJvb2wgaXNfZHN0X3N0ZGVycikKIHsK IAlTbGFiQ29udGV4dCAqc2xhYiA9IGNhc3ROb2RlKFNsYWJDb250ZXh0LCBjb250ZXh0KTsKIAlT aXplCQluYmxvY2tzID0gMDsKQEAgLTY3MSw3ICs2NzQsNyBAQCBTbGFiU3RhdHMoTWVtb3J5Q29u dGV4dCBjb250ZXh0LAogCQkJCSAiJXp1IHRvdGFsIGluICV6ZCBibG9ja3M7ICV6dSBmcmVlICgl emQgY2h1bmtzKTsgJXp1IHVzZWQiLAogCQkJCSB0b3RhbHNwYWNlLCBuYmxvY2tzLCBmcmVlc3Bh Y2UsIGZyZWVjaHVua3MsCiAJCQkJIHRvdGFsc3BhY2UgLSBmcmVlc3BhY2UpOwotCQlwcmludGZ1 bmMoY29udGV4dCwgcGFzc3RocnUsIHN0YXRzX3N0cmluZyk7CisJCXByaW50ZnVuYyhjb250ZXh0 LCBwYXNzdGhydSwgc3RhdHNfc3RyaW5nLCBpc19kc3Rfc3RkZXJyKTsKIAl9CiAKIAlpZiAodG90 YWxzKQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9p bmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKaW5kZXggYmZiODllMDU3NS4uODA0OTU4NzcwNyAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5j bHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBAIC03OTQ2LDYgKzc5NDYsMTIgQEAKICAgcHJvYXJn bmFtZXMgPT4gJ3tuYW1lLCBpZGVudCwgcGFyZW50LCBsZXZlbCwgdG90YWxfYnl0ZXMsIHRvdGFs X25ibG9ja3MsIGZyZWVfYnl0ZXMsIGZyZWVfY2h1bmtzLCB1c2VkX2J5dGVzfScsCiAgIHByb3Ny YyA9PiAncGdfZ2V0X2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzJyB9LAogCisjIGxvZyBtZW1vcnkg Y29udGV4dHMgb2YgdGhlIHNwZWNpZmllZCBiYWNrZW5kCit7IG9pZCA9PiAnNDU0MycsIGRlc2Ny ID0+ICdsb2cgbWVtb3J5IGNvbnRleHRzIG9mIHRoZSBzcGVjaWZpZWQgYmFja2VuZCcsCisgIHBy b25hbWUgPT4gJ3BnX2xvZ19iYWNrZW5kX21lbW9yeV9jb250ZXh0cycsCisgIHByb3ZvbGF0aWxl ID0+ICd2JywgcHJvcmV0dHlwZSA9PiAnYm9vbCcsCisgIHByb2FyZ3R5cGVzID0+ICdpbnQ0Jywg cHJvc3JjID0+ICdwZ19sb2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHMnIH0sCisKICMgbm9uLXBl cnNpc3RlbnQgc2VyaWVzIGdlbmVyYXRvcgogeyBvaWQgPT4gJzEwNjYnLCBkZXNjciA9PiAnbm9u LXBlcnNpc3RlbnQgc2VyaWVzIGdlbmVyYXRvcicsCiAgIHByb25hbWUgPT4gJ2dlbmVyYXRlX3Nl cmllcycsIHByb3Jvd3MgPT4gJzEwMDAnLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbWlzY2Fk bWluLmggYi9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaAppbmRleCAwMTM4NTBhYzI4Li4wODE4MjI4 MjNjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaAorKysgYi9zcmMvaW5jbHVk ZS9taXNjYWRtaW4uaApAQCAtODQsNiArODQsNyBAQCBleHRlcm4gUEdETExJTVBPUlQgdm9sYXRp bGUgc2lnX2F0b21pY190IFByb2NEaWVQZW5kaW5nOwogZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0 aWxlIHNpZ19hdG9taWNfdCBJZGxlSW5UcmFuc2FjdGlvblNlc3Npb25UaW1lb3V0UGVuZGluZzsK IGV4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSBzaWdfYXRvbWljX3QgSWRsZVNlc3Npb25UaW1l b3V0UGVuZGluZzsKIGV4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSBzaWdfYXRvbWljX3QgUHJv Y1NpZ25hbEJhcnJpZXJQZW5kaW5nOworZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxlIHNpZ19h dG9taWNfdCBMb2dNZW1vcnlDb250ZXh0UGVuZGluZzsKIAogZXh0ZXJuIFBHRExMSU1QT1JUIHZv bGF0aWxlIHNpZ19hdG9taWNfdCBDbGllbnRDb25uZWN0aW9uTG9zdDsKIApkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvbm9kZXMvbWVtbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL21lbW5vZGVz LmgKaW5kZXggOTMzMWVmODBmZC4uODdhODUwMWMzNyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv bm9kZXMvbWVtbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9tZW1ub2Rlcy5oCkBAIC01 Miw3ICs1Miw4IEBAIHR5cGVkZWYgc3RydWN0IE1lbW9yeUNvbnRleHRDb3VudGVycwogICovCiAK IHR5cGVkZWYgdm9pZCAoKk1lbW9yeVN0YXRzUHJpbnRGdW5jKSAoTWVtb3J5Q29udGV4dCBjb250 ZXh0LCB2b2lkICpwYXNzdGhydSwKLQkJCQkJCQkJCSAgY29uc3QgY2hhciAqc3RhdHNfc3RyaW5n KTsKKwkJCQkJCQkJCSAgY29uc3QgY2hhciAqc3RhdHNfc3RyaW5nLAorCQkJCQkJCQkJICBib29s IGlzX2RzdF9zdGRlcnIpOwogCiB0eXBlZGVmIHN0cnVjdCBNZW1vcnlDb250ZXh0TWV0aG9kcwog ewpAQCAtNjYsNyArNjcsOCBAQCB0eXBlZGVmIHN0cnVjdCBNZW1vcnlDb250ZXh0TWV0aG9kcwog CWJvb2wJCSgqaXNfZW1wdHkpIChNZW1vcnlDb250ZXh0IGNvbnRleHQpOwogCXZvaWQJCSgqc3Rh dHMpIChNZW1vcnlDb250ZXh0IGNvbnRleHQsCiAJCQkJCQkgIE1lbW9yeVN0YXRzUHJpbnRGdW5j IHByaW50ZnVuYywgdm9pZCAqcGFzc3RocnUsCi0JCQkJCQkgIE1lbW9yeUNvbnRleHRDb3VudGVy cyAqdG90YWxzKTsKKwkJCQkJCSAgTWVtb3J5Q29udGV4dENvdW50ZXJzICp0b3RhbHMsCisJCQkJ CQkgIGJvb2wgaXNfZHN0X3N0ZGVycik7CiAjaWZkZWYgTUVNT1JZX0NPTlRFWFRfQ0hFQ0tJTkcK IAl2b2lkCQkoKmNoZWNrKSAoTWVtb3J5Q29udGV4dCBjb250ZXh0KTsKICNlbmRpZgpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFsLmggYi9zcmMvaW5jbHVkZS9zdG9y YWdlL3Byb2NzaWduYWwuaAppbmRleCA0YWU3ZGMzM2I4Li41NWVhNzEwNGIzIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9y YWdlL3Byb2NzaWduYWwuaApAQCAtMzQsNiArMzQsOCBAQCB0eXBlZGVmIGVudW0KIAlQUk9DU0lH X1BBUkFMTEVMX01FU1NBR0UsCS8qIG1lc3NhZ2UgZnJvbSBjb29wZXJhdGluZyBwYXJhbGxlbCBi YWNrZW5kICovCiAJUFJPQ1NJR19XQUxTTkRfSU5JVF9TVE9QUElORywJLyogYXNrIHdhbHNlbmRl cnMgdG8gcHJlcGFyZSBmb3Igc2h1dGRvd24gICovCiAJUFJPQ1NJR19CQVJSSUVSLAkJCS8qIGds b2JhbCBiYXJyaWVyIGludGVycnVwdCAgKi8KKwlQUk9DU0lHX0xPR19NRU1PUllfQ09OVEVYVCwJ CS8qIGFzayBzcGVjaWZpZWQgYmFja2VuZCB0byBsb2cgdGhlCisJCQkJCQkJbWVtb3J5IGNvbnRl eHRzICovCiAKIAkvKiBSZWNvdmVyeSBjb25mbGljdCByZWFzb25zICovCiAJUFJPQ1NJR19SRUNP VkVSWV9DT05GTElDVF9EQVRBQkFTRSwKQEAgLTY5LDYgKzcxLDcgQEAgZXh0ZXJuIGludAlTZW5k UHJvY1NpZ25hbChwaWRfdCBwaWQsIFByb2NTaWduYWxSZWFzb24gcmVhc29uLAogZXh0ZXJuIHVp bnQ2NCBFbWl0UHJvY1NpZ25hbEJhcnJpZXIoUHJvY1NpZ25hbEJhcnJpZXJUeXBlIHR5cGUpOwog ZXh0ZXJuIHZvaWQgV2FpdEZvclByb2NTaWduYWxCYXJyaWVyKHVpbnQ2NCBnZW5lcmF0aW9uKTsK IGV4dGVybiB2b2lkIFByb2Nlc3NQcm9jU2lnbmFsQmFycmllcih2b2lkKTsKK2V4dGVybiB2b2lk IFByb2Nlc3NMb2dNZW1vcnlDb250ZXh0SW50ZXJydXB0KHZvaWQpOwogCiBleHRlcm4gdm9pZCBw cm9jc2lnbmFsX3NpZ3VzcjFfaGFuZGxlcihTSUdOQUxfQVJHUyk7CiAKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL3V0aWxzL21lbXV0aWxzLmggYi9zcmMvaW5jbHVkZS91dGlscy9tZW11dGlscy5o CmluZGV4IDM2YWFlNGU1MWMuLjFlYmY1Nzk3Y2IgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0 aWxzL21lbXV0aWxzLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvbWVtdXRpbHMuaApAQCAtODQs NyArODQsOCBAQCBleHRlcm4gTWVtb3J5Q29udGV4dCBNZW1vcnlDb250ZXh0R2V0UGFyZW50KE1l bW9yeUNvbnRleHQgY29udGV4dCk7CiBleHRlcm4gYm9vbCBNZW1vcnlDb250ZXh0SXNFbXB0eShN ZW1vcnlDb250ZXh0IGNvbnRleHQpOwogZXh0ZXJuIFNpemUgTWVtb3J5Q29udGV4dE1lbUFsbG9j YXRlZChNZW1vcnlDb250ZXh0IGNvbnRleHQsIGJvb2wgcmVjdXJzZSk7CiBleHRlcm4gdm9pZCBN ZW1vcnlDb250ZXh0U3RhdHMoTWVtb3J5Q29udGV4dCBjb250ZXh0KTsKLWV4dGVybiB2b2lkIE1l bW9yeUNvbnRleHRTdGF0c0RldGFpbChNZW1vcnlDb250ZXh0IGNvbnRleHQsIGludCBtYXhfY2hp bGRyZW4pOworZXh0ZXJuIHZvaWQgTWVtb3J5Q29udGV4dFN0YXRzRGV0YWlsKE1lbW9yeUNvbnRl eHQgY29udGV4dCwgaW50IG1heF9jaGlsZHJlbiwKKwkJCQkJCQkJCQlib29sIGlzX2RzdF9zdGRl cnIpOwogZXh0ZXJuIHZvaWQgTWVtb3J5Q29udGV4dEFsbG93SW5Dcml0aWNhbFNlY3Rpb24oTWVt b3J5Q29udGV4dCBjb250ZXh0LAogCQkJCQkJCQkJCQkJYm9vbCBhbGxvdyk7CiAKQEAgLTE0NCw2 ICsxNDUsNyBAQCBleHRlcm4gdm9pZCBNZW1vcnlDb250ZXh0Q3JlYXRlKE1lbW9yeUNvbnRleHQg bm9kZSwKIAkJCQkJCQkJTWVtb3J5Q29udGV4dCBwYXJlbnQsCiAJCQkJCQkJCWNvbnN0IGNoYXIg Km5hbWUpOwogCitleHRlcm4gdm9pZCBIYW5kbGVMb2dNZW1vcnlDb250ZXh0SW50ZXJydXB0KHZv aWQpOwogCiAvKgogICogTWVtb3J5LWNvbnRleHQtdHlwZS1zcGVjaWZpYyBmdW5jdGlvbnMKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvbWlzY19mdW5jdGlvbnMub3V0IGIv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9taXNjX2Z1bmN0aW9ucy5vdXQKaW5kZXggZDNhY2I5 OGQwNC4uZTg0NTA0MmQzOCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9t aXNjX2Z1bmN0aW9ucy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9taXNjX2Z1 bmN0aW9ucy5vdXQKQEAgLTEzMyw2ICsxMzMsMTkgQEAgRVJST1I6ICBmdW5jdGlvbiBudW1fbnVs bHMoKSBkb2VzIG5vdCBleGlzdAogTElORSAxOiBTRUxFQ1QgbnVtX251bGxzKCk7CiAgICAgICAg ICAgICAgICBeCiBISU5UOiAgTm8gZnVuY3Rpb24gbWF0Y2hlcyB0aGUgZ2l2ZW4gbmFtZSBhbmQg YXJndW1lbnQgdHlwZXMuIFlvdSBtaWdodCBuZWVkIHRvIGFkZCBleHBsaWNpdCB0eXBlIGNhc3Rz LgorLS0KKy0tIHBnX2xvZ19iYWNrZW5kX21lbW9yeV9jb250ZXh0cygpCistLQorLS0gTWVtb3J5 IGNvbnRleHRzIGFyZSBsb2dnZWQgYW5kIHRoZXkgYXJlIG5vdCByZXR1cm5lZCB0byB0aGUgZnVu Y3Rpb24uCistLSBGdXJ0aGVybW9yZSwgdGhlaXIgY29udGVudHMgY2FuIHZhcnkgZGVwZW5kaW5n IG9uIHRoZSB0aW1pbmcuIEhvd2V2ZXIsCistLSB3ZSBjYW4gYXQgbGVhc3QgdmVyaWZ5IHRoYXQg dGhlIGNvZGUgZG9lc24ndCBmYWlsLgorLS0KK1NFTEVDVCAqIEZST00gcGdfbG9nX2JhY2tlbmRf bWVtb3J5X2NvbnRleHRzKHBnX2JhY2tlbmRfcGlkKCkpOworIHBnX2xvZ19iYWNrZW5kX21lbW9y eV9jb250ZXh0cyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdAorKDEgcm93 KQorCiAtLQogLS0gVGVzdCBzb21lIGJ1aWx0LWluIFNSRnMKIC0tCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9yZWdyZXNzL3NxbC9taXNjX2Z1bmN0aW9ucy5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9taXNjX2Z1bmN0aW9ucy5zcWwKaW5kZXggMDk0ZThmODI5Ni4uYTM5ODM0OWFmYyAxMDA2NDQK LS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvbWlzY19mdW5jdGlvbnMuc3FsCisrKyBiL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL21pc2NfZnVuY3Rpb25zLnNxbApAQCAtMzAsNiArMzAsMTUgQEAgU0VM RUNUIG51bV9udWxscyhWQVJJQURJQyAne30nOjppbnRbXSk7CiBTRUxFQ1QgbnVtX25vbm51bGxz KCk7CiBTRUxFQ1QgbnVtX251bGxzKCk7CiAKKy0tCistLSBwZ19sb2dfYmFja2VuZF9tZW1vcnlf Y29udGV4dHMoKQorLS0KKy0tIE1lbW9yeSBjb250ZXh0cyBhcmUgbG9nZ2VkIGFuZCB0aGV5IGFy ZSBub3QgcmV0dXJuZWQgdG8gdGhlIGZ1bmN0aW9uLgorLS0gRnVydGhlcm1vcmUsIHRoZWlyIGNv bnRlbnRzIGNhbiB2YXJ5IGRlcGVuZGluZyBvbiB0aGUgdGltaW5nLiBIb3dldmVyLAorLS0gd2Ug Y2FuIGF0IGxlYXN0IHZlcmlmeSB0aGF0IHRoZSBjb2RlIGRvZXNuJ3QgZmFpbC4KKy0tCitTRUxF Q1QgKiBGUk9NIHBnX2xvZ19iYWNrZW5kX21lbW9yeV9jb250ZXh0cyhwZ19iYWNrZW5kX3BpZCgp KTsKKwogLS0KIC0tIFRlc3Qgc29tZSBidWlsdC1pbiBTUkZzCiAtLQotLSAKMi4xOC4xCgo= --=_696b6d435d6345cceba8ea9d8f49d364--