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 1knB4V-0008Pf-CP for pgsql-hackers@arkaria.postgresql.org; Thu, 10 Dec 2020 01:48:43 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1knB3y-0002CO-Qn for pgsql-hackers@arkaria.postgresql.org; Thu, 10 Dec 2020 01:48:10 +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 1knB3y-0002CH-GK for pgsql-hackers@lists.postgresql.org; Thu, 10 Dec 2020 01:48:10 +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 1knB3u-0006Qg-Ee for pgsql-hackers@postgresql.org; Thu, 10 Dec 2020 01:48:10 +0000 Received: from oss.nttdata.com (localhost [127.0.0.1]) by oss.nttdata.com (Postfix) with ESMTP id 240926275F; Thu, 10 Dec 2020 10:48:00 +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="=_cee82612103ea33c80fbdd734cdb3e99" Date: Thu, 10 Dec 2020 10:48:00 +0900 From: torikoshia To: Tom Lane , Fujii Masao Cc: Georgios Kokolatos , pgsql-hackers@postgresql.org Subject: Re: Get memory contexts of an arbitrary backend process In-Reply-To: <83ff0aff04fffc95cbd1fc1637a0fccc@oss.nttdata.com> References: <0271f440ac77f2a4180e0e56ebd944d1@oss.nttdata.com> <270ec80dbbebfb5c6f2b9fdd7a7858b5@oss.nttdata.com> <160502083340.7362.4386116585349115146.pgcf@coridan.postgresql.org> <064d510f2d33edc37dfd6b8f3b6bd30e@oss.nttdata.com> <1685539.1606959410@sss.pgh.pa.us> <83ff0aff04fffc95cbd1fc1637a0fccc@oss.nttdata.com> Message-ID: <28e1feb71b94ac9918830bc4a0c1844f@oss.nttdata.com> 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: Precedence: bulk --=_cee82612103ea33c80fbdd734cdb3e99 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed On 2020-12-04 19:16, torikoshia wrote: > On 2020-12-03 10:36, Tom Lane wrote: >> Fujii Masao writes: >>> I'm starting to study how this feature behaves. At first, when I >>> executed >>> the following query, the function never returned. ISTM that since >>> the autovacuum launcher cannot respond to the request of memory >>> contexts dump, the function keeps waiting infinity. Is this a bug? >>> Probably we should exclude non-backend proceses from the target >>> processes to dump? Sorry if this was already discussed. >> >>> SELECT pg_get_backend_memory_contexts(pid) FROM >>> pg_stat_activity; > > Thanks for trying it! > > It was not discussed explicitly, and I was going to do it later > as commented. > >> + /* TODO: Check also whether backend or not. */ > >> >> FWIW, I think this patch is fundamentally unsafe. It's got a >> lot of the same problems that I complained about w.r.t. the >> nearby proposal to allow cross-backend stack trace dumping. >> It does avoid the trap of thinking that it can do work in >> a signal handler, but instead it supposes that it can do >> work involving very high-level objects such as shared hash tables >> in anyplace that might execute CHECK_FOR_INTERRUPTS. That's >> never going to be safe: the only real expectation the system >> has is that CHECK_FOR_INTERRUPTS is called at places where our >> state is sane enough that a transaction abort can clean up. >> Trying to do things like taking LWLocks is going to lead to >> deadlocks or worse. We need not even get into the hard questions, >> such as what happens when one process or the other exits >> unexpectedly. > > Thanks for reviewing! > > I may misunderstand something, but the dumper works not at > CHECK_FOR_INTERRUPTS but during the client read, i.e., > ProcessClientReadInterrupt(). > > Is it also unsafe? > > > BTW, since there was a comment that the shared hash table > used too much memory, I'm now rewriting this patch not to use > the shared hash table but a simpler static shared memory struct. Attached a rewritten patch. Accordingly, I also slightly modified the basic design as below. --- # Communication flow between the dumper and the requester - (1) When requesting memory context dumping, the dumper changes the struct on the shared memory state from 'ACCEPTABLE' to 'REQUESTING'. - (2) The dumper sends the signal to the dumper process and wait on the latch. - (3) When the dumper noticed the signal, it changes the state to 'DUMPING'. - (4) When the dumper completes dumping, it changes the state to 'DONE' and set the latch. - (5) The requestor reads the dump file and shows it to the user. Finally, the requestor removes the dump file and reset the shared memory state to 'ACCEPTABLE'. # Query cancellation - When the requestor cancels dumping, e.g. signaling using ctrl-C, the requestor changes the state of the shared memory to 'CANCELING'. - The dumper checks the state when it tries to change the state to 'DONE' at (4), and if the state is 'CANCELING', it initializes the dump file and reset the shared memory state to 'ACCEPTABLE'. # Cleanup dump file and the shared memory - In the normal case, the dumper removes the dump file and resets the shared memory entry as described in (5). - When something like query cancellation or process termination happens on the dumper after (1) and before (3), in other words, the state is 'REQUESTING', the requestor does the cleanup. - When something happens on the dumper or the requestor after (3) and before (4), in other words, the state is 'DUMPING', the dumper does the cleanup. Specifically, if the requestor cancels the query, it just changes the state to 'CANCELING' and the dumper notices it and cleans up things later. OTOH, when the dumper fails to dump, it cleans up the dump file and reset the shared memory state. - When something happens on the requestor after (4), i.e., the state is 'DONE', the requestor does the cleanup. - In the case of receiving SIGKILL or power failure, all dump files are removed in the crash recovery process. --- > >> I also find the idea that this should be the same SQL function >> as pg_get_backend_memory_contexts to be a seriously bad decision. >> That means that it's not possible to GRANT the right to examine >> only your own process's memory --- with this proposal, that means >> granting the right to inspect every other process as well. >> >> Beyond that, the fact that there's no way to restrict the capability >> to just, say, other processes owned by the same user means that >> it's not really safe to GRANT to non-superusers anyway. Even with >> such a restriction added, things are problematic, since for example >> it would be possible to inquire into the workings of a >> security-definer function executing in another process that >> nominally is owned by your user. > > I'm going to change the function name and restrict the executor to > superusers. Is it enough? In the attached patch, I changed the function name to pg_get_target_backend_memory_contexts() for now. Regards, --=_cee82612103ea33c80fbdd734cdb3e99 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v5-0001-Add-pg_get_target_backend_memory_contexts-to-coll.patch Content-Disposition: attachment; filename=v5-0001-Add-pg_get_target_backend_memory_contexts-to-coll.patch; size=33497 RnJvbSAxMjBiMmMzM2UyYjI5NTMwNWRlZGM2MzkyMTE4M2MxMDNlNjVkZGM2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBdHN1c2hpIFRvcmlrb3NoaSA8dG9yaWtvc2hpYUBvc3MubnR0 ZGF0YS5jb20+CkRhdGU6IFRodSwgOSBEZWMgMjAyMCAwOTo1MjoxNSArMDkwMApTdWJqZWN0OiBb UEFUQ0ggdjVdIEFkZCBwZ19nZXRfdGFyZ2V0X2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzKCgpIHRv IGNvbGxlY3QKIGFyYml0cmFyeSBiYWNrZW5kIHByb2Nlc3MncyBtZW1vcnkgY29udGV4dHMuCgpB ZnRlciBjb21taXQgM2U5OGMwYmFmYjI4ZGUsIHdlIGNhbiBkaXNwbGF5IHRoZSB1c2FnZSBvZiB0 aGUKbWVtb3J5IGNvbnRleHRzIHVzaW5nIHBnX2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzIHN5c3Rl bQp2aWV3LiBIb3dldmVyLCBpdHMgdGFyZ2V0IGlzIGxpbWl0ZWQgdG8gdGhlIHByb2Nlc3MgYXR0 YWNoZWQKdG8gdGhlIGN1cnJlbnQgc2Vzc2lvbi4KVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHBnX2dl dF90YXJnZXRfYmFja2VuZF9tZW1vcnlfY29udGV4dHMoKQphbmQgbWFrZXMgaXQgcG9zc2libGUg dG8gY29sbGVjdCBtZW1vcnkgY29udGV4dHMgb2YgdGhlCnNwZWNpZmllZCBwcm9jZXNzLgotLS0K IHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYyAgICAgICAgICAgIHwgICA3ICsKIHNy Yy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbCAgICAgICAgIHwgICAzICstCiBzcmMv YmFja2VuZC9wb3N0bWFzdGVyL3Bnc3RhdC5jICAgICAgICAgICAgICB8ICAgMyArCiBzcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9iYXNlYmFja3VwLmMgICAgICAgICB8ICAgMyArCiBzcmMvYmFja2Vu ZC9zdG9yYWdlL2lwYy9pcGNpLmMgICAgICAgICAgICAgICB8ICAgMiArCiBzcmMvYmFja2VuZC9z dG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMgICAgICAgICB8ICAgNCArCiBzcmMvYmFja2VuZC9zdG9y YWdlL2xtZ3IvbHdsb2NrbmFtZXMudHh0ICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC90Y29wL3Bv c3RncmVzLmMgICAgICAgICAgICAgICAgICB8ICAgNSArCiBzcmMvYmFja2VuZC91dGlscy9hZHQv bWN4dGZ1bmNzLmMgICAgICAgICAgICB8IDY5MSArKysrKysrKysrKysrKysrKystCiBzcmMvYmFj a2VuZC91dGlscy9pbml0L2dsb2JhbHMuYyAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmluL2lu aXRkYi9pbml0ZGIuYyAgICAgICAgICAgICAgICAgICAgICB8ICAgMyArLQogc3JjL2Jpbi9wZ19i YXNlYmFja3VwL3QvMDEwX3BnX2Jhc2ViYWNrdXAucGwgfCAgIDQgKy0KIHNyYy9iaW4vcGdfcmV3 aW5kL2ZpbGVtYXAuYyAgICAgICAgICAgICAgICAgIHwgICAzICsKIHNyYy9pbmNsdWRlL2NhdGFs b2cvcGdfcHJvYy5kYXQgICAgICAgICAgICAgIHwgIDEyICstCiBzcmMvaW5jbHVkZS9taXNjYWRt aW4uaCAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9wZ3N0YXQuaCAg ICAgICAgICAgICAgICAgICAgICAgICB8ICAgMyArLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9j c2lnbmFsLmggICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvdXRpbHMvbWN4dGZ1bmNz LmggICAgICAgICAgICAgICAgfCAgNDQgKysKIDE4IGZpbGVzIGNoYW5nZWQsIDc3MCBpbnNlcnRp b25zKCspLCAyMSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS91 dGlscy9tY3h0ZnVuY3MuaAoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2Ft L3hsb2cuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwppbmRleCA3ZTgxY2U0 ZjE3Li4yNDc0YTM2YWMxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94 bG9nLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCkBAIC03Myw2ICs3 Myw3IEBACiAjaW5jbHVkZSAic3RvcmFnZS9zeW5jLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRp bnMuaCIKICNpbmNsdWRlICJ1dGlscy9ndWMuaCIKKyNpbmNsdWRlICJ1dGlscy9tY3h0ZnVuY3Mu aCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3BzX3N0YXR1 cy5oIgogI2luY2x1ZGUgInV0aWxzL3JlbG1hcHBlci5oIgpAQCAtNjk4Miw2ICs2OTgzLDEyIEBA IFN0YXJ0dXBYTE9HKHZvaWQpCiAJCSAqLwogCQlwZ3N0YXRfcmVzZXRfYWxsKCk7CiAKKwkJLyoK KwkJICogUmVzZXQgZHVtcCBmaWxlcyBpbiBwZ19tZW11c2FnZSwgYmVjYXVzZSB0YXJnZXQgcHJv Y2Vzc2VzIGRvCisJCSAqIG5vdCBleGlzdCBhbnkgbW9yZS4KKwkJICovCisJCVJlbW92ZU1lbWN4 dEZpbGUoMCk7CisKIAkJLyoKIAkJICogSWYgdGhlcmUgd2FzIGEgYmFja3VwIGxhYmVsIGZpbGUs IGl0J3MgZG9uZSBpdHMgam9iIGFuZCB0aGUgaW5mbwogCQkgKiBoYXMgbm93IGJlZW4gcHJvcGFn YXRlZCBpbnRvIHBnX2NvbnRyb2wuICBXZSBtdXN0IGdldCByaWQgb2YgdGhlCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92aWV3cy5zcWwgYi9zcmMvYmFja2VuZC9jYXRh bG9nL3N5c3RlbV92aWV3cy5zcWwKaW5kZXggYjE0MGMyMTBiYy4uNzdlOTdmNDgwNSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsCisrKyBiL3NyYy9iYWNr ZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbApAQCAtNTU4LDcgKzU1OCw4IEBAIENSRUFURSBW SUVXIHBnX2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzIEFTCiAgICAgU0VMRUNUICogRlJPTSBwZ19n ZXRfYmFja2VuZF9tZW1vcnlfY29udGV4dHMoKTsKIAogUkVWT0tFIEFMTCBPTiBwZ19iYWNrZW5k X21lbW9yeV9jb250ZXh0cyBGUk9NIFBVQkxJQzsKLVJFVk9LRSBFWEVDVVRFIE9OIEZVTkNUSU9O IHBnX2dldF9iYWNrZW5kX21lbW9yeV9jb250ZXh0cygpIEZST00gUFVCTElDOworUkVWT0tFIEVY RUNVVEUgT04gRlVOQ1RJT04gcGdfZ2V0X2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzIEZST00gUFVC TElDOworUkVWT0tFIEVYRUNVVEUgT04gRlVOQ1RJT04gcGdfZ2V0X3RhcmdldF9iYWNrZW5kX21l bW9yeV9jb250ZXh0cyBGUk9NIFBVQkxJQzsKIAogLS0gU3RhdGlzdGljcyB2aWV3cwogCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bnc3RhdC5jIGIvc3JjL2JhY2tlbmQvcG9z dG1hc3Rlci9wZ3N0YXQuYwppbmRleCA3Yzc1YTI1ZDIxLi42YmQ0NzFhZjJmIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bnc3RhdC5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3Rt YXN0ZXIvcGdzdGF0LmMKQEAgLTQwNDIsNiArNDA0Miw5IEBAIHBnc3RhdF9nZXRfd2FpdF9pcGMo V2FpdEV2ZW50SVBDIHcpCiAJCWNhc2UgV0FJVF9FVkVOVF9YQUNUX0dST1VQX1VQREFURToKIAkJ CWV2ZW50X25hbWUgPSAiWGFjdEdyb3VwVXBkYXRlIjsKIAkJCWJyZWFrOworCQljYXNlIFdBSVRf RVZFTlRfRFVNUF9NRU1PUllfQ09OVEVYVDoKKwkJCWV2ZW50X25hbWUgPSAiRHVtcE1lbW9yeUNv bnRleHQiOworCQkJYnJlYWs7CiAJCQkvKiBubyBkZWZhdWx0IGNhc2UsIHNvIHRoYXQgY29tcGls ZXIgd2lsbCB3YXJuICovCiAJfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9iYXNlYmFja3VwLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9iYXNlYmFja3VwLmMKaW5k ZXggMWQ4ZDE3NDJhNy4uYzY1YTFiNGY2NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vYmFzZWJhY2t1cC5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2Jhc2ViYWNr dXAuYwpAQCAtMTg0LDYgKzE4NCw5IEBAIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBleGNsdWRl RGlyQ29udGVudHNbXSA9CiAJLyogQ29udGVudHMgemVyb2VkIG9uIHN0YXJ0dXAsIHNlZSBTdGFy dHVwU1VCVFJBTlMoKS4gKi8KIAkicGdfc3VidHJhbnMiLAogCisJLyogU2tpcCBtZW1vcnkgY29u dGV4dCBkdW1wIGZpbGVzLiAqLworCSJwZ19tZW11c2FnZSIsCisKIAkvKiBlbmQgb2YgbGlzdCAq LwogCU5VTEwKIH07CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMg Yi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMKaW5kZXggOTZjMmFhYWJiZC4uOTJmMjFh ZDJiZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jCisrKyBiL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYwpAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUg InN0b3JhZ2UvcHJvY3NpZ25hbC5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc2ludmFsYWR0LmgiCiAj aW5jbHVkZSAic3RvcmFnZS9zcGluLmgiCisjaW5jbHVkZSAidXRpbHMvbWN4dGZ1bmNzLmgiCiAj aW5jbHVkZSAidXRpbHMvc25hcG1nci5oIgogCiAvKiBHVUNzICovCkBAIC0yNjcsNiArMjY4LDcg QEAgQ3JlYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBob3Jlcyh2b2lkKQogCUJUcmVlU2htZW1Jbml0 KCk7CiAJU3luY1NjYW5TaG1lbUluaXQoKTsKIAlBc3luY1NobWVtSW5pdCgpOworCU1jeHREdW1w U2htZW1Jbml0KCk7CiAKICNpZmRlZiBFWEVDX0JBQ0tFTkQKIApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMv cHJvY3NpZ25hbC5jCmluZGV4IGZmZTY3YWNlYTEuLjJiMWRkZDNhMGQgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYworKysgYi9zcmMvYmFja2VuZC9zdG9y YWdlL2lwYy9wcm9jc2lnbmFsLmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJzdG9yYWdl L3NobWVtLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zaW52YWwuaCIKICNpbmNsdWRlICJ0Y29wL3Rj b3Bwcm90LmgiCisjaW5jbHVkZSAidXRpbHMvbWN4dGZ1bmNzLmgiCiAKIC8qCiAgKiBUaGUgU0lH VVNSMSBzaWduYWwgaXMgbXVsdGlwbGV4ZWQgdG8gc3VwcG9ydCBzaWduYWxpbmcgbXVsdGlwbGUg ZXZlbnQKQEAgLTU2Nyw2ICs1NjgsOSBAQCBwcm9jc2lnbmFsX3NpZ3VzcjFfaGFuZGxlcihTSUdO QUxfQVJHUykKIAlpZiAoQ2hlY2tQcm9jU2lnbmFsKFBST0NTSUdfQkFSUklFUikpCiAJCUhhbmRs ZVByb2NTaWduYWxCYXJyaWVySW50ZXJydXB0KCk7CiAKKwlpZiAoQ2hlY2tQcm9jU2lnbmFsKFBS T0NTSUdfRFVNUF9NRU1DWFQpKQorCQlIYW5kbGVQcm9jU2lnbmFsRHVtcE1lbW9yeUNvbnRleHQo KTsKKwogCWlmIChDaGVja1Byb2NTaWduYWwoUFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVF9EQVRB QkFTRSkpCiAJCVJlY292ZXJ5Q29uZmxpY3RJbnRlcnJ1cHQoUFJPQ1NJR19SRUNPVkVSWV9DT05G TElDVF9EQVRBQkFTRSk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9s d2xvY2tuYW1lcy50eHQgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbHdsb2NrbmFtZXMudHh0 CmluZGV4IDc3NDI5MmZkOTQuLjZiNGZmNmYwOGIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvbG1nci9sd2xvY2tuYW1lcy50eHQKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdy L2x3bG9ja25hbWVzLnR4dApAQCAtNTMsMyArNTMsNCBAQCBYYWN0VHJ1bmNhdGlvbkxvY2sJCQkJ CTQ0CiAjIDQ1IHdhcyBYYWN0VHJ1bmNhdGlvbkxvY2sgdW50aWwgcmVtb3ZhbCBvZiBCYWNrZW5k UmFuZG9tTG9jawogV3JhcExpbWl0c1ZhY3V1bUxvY2sJCQkJNDYKIE5vdGlmeVF1ZXVlVGFpbExv Y2sJCQkJCTQ3CitNY3h0RHVtcExvY2sJCQkJCTQ4CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC90 Y29wL3Bvc3RncmVzLmMgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKaW5kZXggMzY3OTc5 OWU1MC4uOWQ3ZjI0NThjMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5j CisrKyBiL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYwpAQCAtNzUsNiArNzUsNyBAQAogI2lu Y2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKICNpbmNsdWRlICJ0Y29wL3V0aWxpdHkuaCIKICNpbmNs dWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlscy9tY3h0ZnVuY3MuaCIKICNp bmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3BzX3N0YXR1cy5oIgog I2luY2x1ZGUgInV0aWxzL3NuYXBtZ3IuaCIKQEAgLTUzOSw2ICs1NDAsMTAgQEAgUHJvY2Vzc0Ns aWVudFJlYWRJbnRlcnJ1cHQoYm9vbCBibG9ja2VkKQogCQkvKiBQcm9jZXNzIG5vdGlmeSBpbnRl cnJ1cHRzLCBpZiBhbnkgKi8KIAkJaWYgKG5vdGlmeUludGVycnVwdFBlbmRpbmcpCiAJCQlQcm9j ZXNzTm90aWZ5SW50ZXJydXB0KCk7CisKKwkJLyogUHJvY2VzcyBtZW1vcnkgY29udGV4dHMgZHVt cCBpbnRlcnJ1cHRzLCBpZiBhbnkgKi8KKwkJaWYgKFByb2NTaWduYWxEdW1wTWVtb3J5Q29udGV4 dFBlbmRpbmcpCisJCQlQcm9jZXNzRHVtcE1lbW9yeUNvbnRleHRJbnRlcnJ1cHQoKTsKIAl9CiAJ ZWxzZSBpZiAoUHJvY0RpZVBlbmRpbmcpCiAJewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L21jeHRmdW5jcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L21jeHRmdW5jcy5jCmlu ZGV4IDUwZTFiMDdmZjAuLmQyZmZjODhjMzcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9tY3h0ZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvbWN4dGZ1bmNzLmMK QEAgLTE1LDMwICsxNSwxMDEgQEAKIAogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKKyNpbmNsdWRl IDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSAiY29tbW9uL2xv Z2dpbmcuaCIKICNpbmNsdWRlICJmdW5jYXBpLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAj aW5jbHVkZSAibWIvcGdfd2NoYXIuaCIKKyNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJz dG9yYWdlL2lwYy5oIgorI2luY2x1ZGUgInN0b3JhZ2UvbGF0Y2guaCIKKyNpbmNsdWRlICJzdG9y YWdlL3Byb2MuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3Byb2NhcnJheS5oIgorI2luY2x1ZGUgInN0 b3JhZ2UvcHJvY3NpZ25hbC5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc2htZW0uaCIKICNpbmNsdWRl ICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL21jeHRmdW5jcy5oIgorCisvKiBU aGUgbWF4IGJ5dGVzIGZvciBzaG93aW5nIG5hbWVzIGFuZCBpZGVudGlmaWVycyBvZiBNZW1vcnlD b250ZXh0LiAqLworI2RlZmluZSBNRU1PUllfQ09OVEVYVF9ESVNQTEFZX1NJWkUJMTAyNAorCisv KiBOdW1iZXIgb2YgY29sdW1ucyBpbiBwZ19iYWNrZW5kX21lbW9yeV9jb250ZXh0cyB2aWV3ICov CisjZGVmaW5lIFBHX0dFVF9CQUNLRU5EX01FTU9SWV9DT05URVhUU19DT0xTCTkKIAotLyogLS0t LS0tLS0tLQotICogVGhlIG1heCBieXRlcyBmb3Igc2hvd2luZyBpZGVudGlmaWVycyBvZiBNZW1v cnlDb250ZXh0LgotICogLS0tLS0tLS0tLQorLyogU2hhcmVkIG1lbW9yeSBzdHJ1Y3QgZm9yIG1h bmFnaW5nIHRoZSBzdGF0dXMgb2YgbWVtb3J5IGNvbnRleHQgZHVtcC4gKi8KK3N0YXRpYyBtY3h0 ZHVtcFNobWVtU3RydWN0ICptY3h0ZHVtcFNobWVtID0gIE5VTEw7CisKKworLyoKKyAqIE1jeHRS ZXFLaWxsCisgKgkJRXJyb3IgY2xlYW51cCBjYWxsYmFjayBmb3IgbWVtb3J5IGNvbnRleHQgcmVx dWVzdG9yLgogICovCi0jZGVmaW5lIE1FTU9SWV9DT05URVhUX0lERU5UX0RJU1BMQVlfU0laRQkx MDI0CitzdGF0aWMgdm9pZAorTWN4dFJlcUtpbGwoaW50IGNvZGUsIERhdHVtIGFyZykKK3sKKwlp bnQJCWRzdF9waWQgPSBEYXR1bUdldEludDMyKGFyZyk7CisKKwlMV0xvY2tBY3F1aXJlKE1jeHRE dW1wTG9jaywgTFdfRVhDTFVTSVZFKTsKKworCWlmIChtY3h0ZHVtcFNobWVtLT5zcmNfcGlkICE9 IE15UHJvY1BpZCkKKwl7CisJCS8qCisJCSAqIElmIHRoZSByZXF1ZXN0b3IgaXMgbm90IG1lLCBz aW1wbHkgZXhpdC4KKwkJICovCisJCUxXTG9ja1JlbGVhc2UoTWN4dER1bXBMb2NrKTsKKwkJcmV0 dXJuOworCX0KKworCWlmIChtY3h0ZHVtcFNobWVtLT5kdW1wX3N0YXR1cyA9PSBNQ1hURFVNUFNU QVRVU19SRVFVRVNUSU5HKQorCXsKKwkJLyoKKwkJICogU2luY2UgdGhlIGR1bXBlciBoYXMgbm90 IHJlY2VpdmVkIHRoZSBkdW1wIG9yZGVyIHlldCwgY2xlYW4gdXAKKwkJICogdGhpbmdzIGJ5IG15 c2VsZi4KKwkJICovCisJCW1jeHRkdW1wU2htZW0tPmRzdF9waWQgPSAwOworCQltY3h0ZHVtcFNo bWVtLT5zcmNfcGlkID0gMDsKKwkJbWN4dGR1bXBTaG1lbS0+ZHVtcF9zdGF0dXMgPSBNQ1hURFVN UFNUQVRVU19BQ0NFUFRBQkxFOworCX0KKwllbHNlIGlmIChtY3h0ZHVtcFNobWVtLT5kdW1wX3N0 YXR1cyA9PSBNQ1hURFVNUFNUQVRVU19EVU1QSU5HKQorCXsKKwkJLyoKKwkJICogU2luY2UgdGhl IGR1bXBlciBoYXMgcmVjZWl2ZWQgdGhlIHJlcXVlc3QgYWxyZWFkeSwKKwkJICogcmVxdWVzdG9y IGp1c3QgY2hhbmdlIHRoZSBzdGF0dXMgYW5kIHRoZSBkdW1wZXIgY2xlYW5zIHVwCisJCSAqIHRo aW5ncyBsYXRlci4KKwkJICovCisJCW1jeHRkdW1wU2htZW0tPmR1bXBfc3RhdHVzID0gTUNYVERV TVBTVEFUVVNfQ0FOQ0VMSU5HOworCX0KKwllbHNlIGlmIChtY3h0ZHVtcFNobWVtLT5kdW1wX3N0 YXR1cyA9PSBNQ1hURFVNUFNUQVRVU19ET05FKQorCXsKKwkJLyoKKwkJICogU2luY2UgdGhlIGR1 bXBlciBoYXMgYWxyZWFkeSBmaW5pc2hlZCBkdW1waW5nLCBjbGVhbiB1cCB0aGluZ3MKKwkJICog YnkgbXlzZWxmLgorCQkgKi8KKwkJbWN4dGR1bXBTaG1lbS0+ZHN0X3BpZCA9IDA7CisJCW1jeHRk dW1wU2htZW0tPnNyY19waWQgPSAwOworCQltY3h0ZHVtcFNobWVtLT5kdW1wX3N0YXR1cyA9IE1D WFREVU1QU1RBVFVTX0FDQ0VQVEFCTEU7CisKKwkJUmVtb3ZlTWVtY3h0RmlsZShkc3RfcGlkKTsK Kwl9CisJTFdMb2NrUmVsZWFzZShNY3h0RHVtcExvY2spOworfQogCiAvKgogICogUHV0TWVtb3J5 Q29udGV4dHNTdGF0c1R1cGxlU3RvcmUKICAqCQlPbmUgcmVjdXJzaW9uIGxldmVsIGZvciBwZ19n ZXRfYmFja2VuZF9tZW1vcnlfY29udGV4dHMuCisgKgorICogTm90ZTogV2hlbiBmcG91dCBpcyBu b3QgTlVMTCwgZmVycm9yKCkgY2hlY2sgbXVzdCBiZSBkb25lIGJ5IHRoZSBjYWxsZXIuCiAgKi8K IHN0YXRpYyB2b2lkCiBQdXRNZW1vcnlDb250ZXh0c1N0YXRzVHVwbGVTdG9yZShUdXBsZXN0b3Jl c3RhdGUgKnR1cHN0b3JlLAogCQkJCQkJCQlUdXBsZURlc2MgdHVwZGVzYywgTWVtb3J5Q29udGV4 dCBjb250ZXh0LAotCQkJCQkJCQljb25zdCBjaGFyICpwYXJlbnQsIGludCBsZXZlbCkKKwkJCQkJ CQkJY29uc3QgY2hhciAqcGFyZW50LCBpbnQgbGV2ZWwsIEZJTEUgKmZwb3V0KQogewotI2RlZmlu ZSBQR19HRVRfQkFDS0VORF9NRU1PUllfQ09OVEVYVFNfQ09MUwk5Ci0KIAlEYXR1bQkJdmFsdWVz W1BHX0dFVF9CQUNLRU5EX01FTU9SWV9DT05URVhUU19DT0xTXTsKIAlib29sCQludWxsc1tQR19H RVRfQkFDS0VORF9NRU1PUllfQ09OVEVYVFNfQ09MU107CisJY2hhcgkJY2xpcHBlZF9pZGVudFtN RU1PUllfQ09OVEVYVF9ESVNQTEFZX1NJWkVdOwogCU1lbW9yeUNvbnRleHRDb3VudGVycyBzdGF0 OwogCU1lbW9yeUNvbnRleHQgY2hpbGQ7CiAJY29uc3QgY2hhciAqbmFtZTsKQEAgLTc0LDE0ICsx NDUsMTIgQEAgUHV0TWVtb3J5Q29udGV4dHNTdGF0c1R1cGxlU3RvcmUoVHVwbGVzdG9yZXN0YXRl ICp0dXBzdG9yZSwKIAlpZiAoaWRlbnQpCiAJewogCQlpbnQJCWlkbGVuID0gc3RybGVuKGlkZW50 KTsKLQkJY2hhcgkJY2xpcHBlZF9pZGVudFtNRU1PUllfQ09OVEVYVF9JREVOVF9ESVNQTEFZX1NJ WkVdOwotCiAJCS8qCiAJCSAqIFNvbWUgaWRlbnRpZmllcnMgc3VjaCBhcyBTUUwgcXVlcnkgc3Ry aW5nIGNhbiBiZSB2ZXJ5IGxvbmcsCiAJCSAqIHRydW5jYXRlIG92ZXJzaXplIGlkZW50aWZpZXJz LgogCQkgKi8KLQkJaWYgKGlkbGVuID49IE1FTU9SWV9DT05URVhUX0lERU5UX0RJU1BMQVlfU0la RSkKLQkJCWlkbGVuID0gcGdfbWJjbGlwbGVuKGlkZW50LCBpZGxlbiwgTUVNT1JZX0NPTlRFWFRf SURFTlRfRElTUExBWV9TSVpFIC0gMSk7CisJCWlmIChpZGxlbiA+PSBNRU1PUllfQ09OVEVYVF9E SVNQTEFZX1NJWkUpCisJCQlpZGxlbiA9IHBnX21iY2xpcGxlbihpZGVudCwgaWRsZW4sIE1FTU9S WV9DT05URVhUX0RJU1BMQVlfU0laRSAtIDEpOwogCiAJCW1lbWNweShjbGlwcGVkX2lkZW50LCBp ZGVudCwgaWRsZW4pOwogCQljbGlwcGVkX2lkZW50W2lkbGVuXSA9ICdcMCc7CkBAIC0xMDEsMTgg KzE3MCwxOTggQEAgUHV0TWVtb3J5Q29udGV4dHNTdGF0c1R1cGxlU3RvcmUoVHVwbGVzdG9yZXN0 YXRlICp0dXBzdG9yZSwKIAl2YWx1ZXNbNl0gPSBJbnQ2NEdldERhdHVtKHN0YXQuZnJlZXNwYWNl KTsKIAl2YWx1ZXNbN10gPSBJbnQ2NEdldERhdHVtKHN0YXQuZnJlZWNodW5rcyk7CiAJdmFsdWVz WzhdID0gSW50NjRHZXREYXR1bShzdGF0LnRvdGFsc3BhY2UgLSBzdGF0LmZyZWVzcGFjZSk7Ci0J dHVwbGVzdG9yZV9wdXR2YWx1ZXModHVwc3RvcmUsIHR1cGRlc2MsIHZhbHVlcywgbnVsbHMpOwor CisJLyoKKwkgKiBTaW5jZSBwZ19nZXRfYmFja2VuZF9tZW1vcnlfY29udGV4dHMoKSBpcyBjYWxs ZWQgZnJvbSBsb2NhbCBwcm9jZXNzLAorCSAqIHNpbXBseSBwdXQgdHVwbGVzLgorCSAqLworCWlm KGZwb3V0ID09IE5VTEwpCisJCXR1cGxlc3RvcmVfcHV0dmFsdWVzKHR1cHN0b3JlLCB0dXBkZXNj LCB2YWx1ZXMsIG51bGxzKTsKKworCS8qCisJICogV3JpdGUgb3V0IHRoZSBjdXJyZW50IG1lbW9y eSBjb250ZXh0IGluZm9ybWF0aW9uIGluIHRoZSBmb3JtIG9mCisJICogImtleTogdmFsdWUiIHBh aXJzIHRvIHRoZSBmaWxlIHNwZWNpZmllZCBieSB0aGUgcmVxdWVzdG9yLgorCSAqLworCWVsc2UK Kwl7CisJCS8qCisJCSAqIE1ha2UgZWFjaCBtZW1vcnkgY29udGV4dCBpbmZvcm1hdGlvbiBzdGFy dHMgd2l0aCAnRCcuCisJCSAqIFRoaXMgaXMgY2hlY2tlZCBieSB0aGUgcmVxdWVzdG9yIHdoZW4g cmVhZGluZyB0aGUgZmlsZS4KKwkJICovCisJCWZwdXRjKCdEJywgZnBvdXQpOworCisJCWZwcmlu dGYoZnBvdXQsCisJCQkibmFtZTogJXMsIGlkZW50OiAlcywgcGFyZW50OiAlcywgbGV2ZWw6ICVk LCB0b3RhbF9ieXRlczogJWx1LCBcCisJCQl0b3RhbF9uYmxvY2tzOiAlbHUsIGZyZWVfYnl0ZXM6 ICVsdSwgZnJlZV9jaHVua3M6ICVsdSwgdXNlZF9ieXRlczogJWx1LFxuIiwKKwkJCW5hbWUsCisJ CQlpZGVudCA/IGNsaXBwZWRfaWRlbnQgOiAibm9uZSIsCisJCQlwYXJlbnQgPyBwYXJlbnQgOiAi bm9uZSIsIGxldmVsLAorCQkJc3RhdC50b3RhbHNwYWNlLAorCQkJc3RhdC5uYmxvY2tzLAorCQkJ c3RhdC5mcmVlc3BhY2UsCisJCQlzdGF0LmZyZWVjaHVua3MsCisJCQlzdGF0LnRvdGFsc3BhY2Ug LSBzdGF0LmZyZWVzcGFjZSk7CisJfQogCiAJZm9yIChjaGlsZCA9IGNvbnRleHQtPmZpcnN0Y2hp bGQ7IGNoaWxkICE9IE5VTEw7IGNoaWxkID0gY2hpbGQtPm5leHRjaGlsZCkKIAl7CiAJCVB1dE1l bW9yeUNvbnRleHRzU3RhdHNUdXBsZVN0b3JlKHR1cHN0b3JlLCB0dXBkZXNjLAotCQkJCQkJCQkg IGNoaWxkLCBuYW1lLCBsZXZlbCArIDEpOworCQkJCQkJCQkgIGNoaWxkLCBuYW1lLCBsZXZlbCAr IDEsIGZwb3V0KTsKIAl9CiB9CiAKKy8qCisgKiBTZXR1cE1jeHRkdW1wU2hlbQorICogCQlTZXR1 cCBzaGFyZWQgbWVtb3J5IHN0cnVjdCBmb3IgZHVtcGluZyBzcGVjaWZpZWQgUElELgorICovCitz dGF0aWMgdm9pZAorU2V0dXBNY3h0ZHVtcFNobWVtKGludCBwaWQpCit7CisJLyoKKwkgKiBXZSBv bmx5IGFsbG93IG9uZSBzZXNzaW9uIHBlciB0YXJnZXQgcHJvY2VzcyB0byByZXF1ZXN0IG1lbW9y eQorCSAqIGNvbnRleHRzIGR1bXAgYXQgYSB0aW1lLgorCSAqIElmIHNvbWVvbmUgdXNlcyBtY3h0 ZHVtcFNobWVtLCB3YWl0IHVudGlsIGl0IHdhcyBjaGFuZ2VkIHRvIGFjY2VwdGFibGUuCisJICov CisJd2hpbGUgKHRydWUpCisJeworCQlMV0xvY2tBY3F1aXJlKE1jeHREdW1wTG9jaywgTFdfRVhD TFVTSVZFKTsKKworCQlpZiAobWN4dGR1bXBTaG1lbS0+ZHVtcF9zdGF0dXMgPT0gTUNYVERVTVBT VEFUVVNfQUNDRVBUQUJMRSkKKwkJeworCQkJbWN4dGR1bXBTaG1lbS0+ZHVtcF9zdGF0dXMgPSBN Q1hURFVNUFNUQVRVU19SRVFVRVNUSU5HOworCQkJbWN4dGR1bXBTaG1lbS0+c3JjX3BpZCA9IE15 UHJvY1BpZDsKKwkJCW1jeHRkdW1wU2htZW0tPmRzdF9waWQgPSBwaWQ7CisKKwkJCUxXTG9ja1Jl bGVhc2UoTWN4dER1bXBMb2NrKTsKKworCQkJcmV0dXJuOworCQl9CisJCWVsc2UKKwkJeworCQkJ ZXJlcG9ydChJTkZPLAorCQkJCQkoZXJybXNnKCJQSUQgJWQgaXMgbG9va2VkIHVwIGJ5IGFub3Ro ZXIgcHJvY2VzcyIsIHBpZCkpKTsKKworCQkJTFdMb2NrUmVsZWFzZShNY3h0RHVtcExvY2spOwor CisJCQlwZ191c2xlZXAoNTAwMDAwMEwpOworCQl9CisJfQorfQorCisvKgorICogUHV0RHVtcGVk VmFsdWVzT25UdXBsZXN0b3JlCisgKgkJUmVhZCBzcGVjaWZpZWQgbWVtb3J5IGNvbnRleHQgZHVt cCBmaWxlIGFuZCBwdXQgaXRzIHZhbHVlcworICoJCW9uIHRoZSB0dXBsZXN0b3JlLgorICovCitz dGF0aWMgdm9pZAorUHV0RHVtcGVkVmFsdWVzT25UdXBsZXN0b3JlKGNoYXIgKmR1bXBmaWxlLCBU dXBsZXN0b3Jlc3RhdGUgKnR1cHN0b3JlLAorCQkJCQkJCQlUdXBsZURlc2MgdHVwZGVzYywgaW50 IHBpZCkKK3sKKwlGSUxFCSAJKmZwaW47CisJaW50CQlmb3JtYXRfaWQ7CisKKwlpZiAoKGZwaW4g PSBBbGxvY2F0ZUZpbGUoZHVtcGZpbGUsICJyIikpID09IE5VTEwpCisJeworCQlpZiAoZXJybm8g IT0gRU5PRU5UKQorCQkJZXJlcG9ydChMT0csIChlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAor CQkJCWVycm1zZygiY291bGQgbm90IG9wZW4gbWVtb3J5IGNvbnRleHQgZHVtcCBmaWxlIFwiJXNc IjogJW0iLAorCQkJCQlkdW1wZmlsZSkpKTsKKwl9CisKKwkvKiBWZXJpZnkgaXQncyBvZiB0aGUg ZXhwZWN0ZWQgZm9ybWF0LiAqLworCWlmIChmcmVhZCgmZm9ybWF0X2lkLCAxLCBzaXplb2YoZm9y bWF0X2lkKSwgZnBpbikgIT0gc2l6ZW9mKGZvcm1hdF9pZCkgfHwKKwkJZm9ybWF0X2lkICE9IFBH X01DWFRfRklMRV9GT1JNQVRfSUQpCisJeworCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJKGVycm1z ZygiY29ycnVwdGVkIG1lbW9yeSBjb250ZXh0IGR1bXAgZmlsZSBcIiVzXCIiLCBkdW1wZmlsZSkp KTsKKwkJZ290byBkb25lOworCX0KKworCS8qIFJlYWQgZHVtcCBmaWxlIGFuZCBwdXQgdmFsdWVz IG9uIHR1cGxlIHN0b3JlLiAqLworCXdoaWxlICh0cnVlKQorCXsKKwkJRGF0dW0JCXZhbHVlc1tQ R19HRVRfQkFDS0VORF9NRU1PUllfQ09OVEVYVFNfQ09MU107CisJCWJvb2wJCW51bGxzW1BHX0dF VF9CQUNLRU5EX01FTU9SWV9DT05URVhUU19DT0xTXTsKKwkJY2hhciAJCW5hbWVbTUVNT1JZX0NP TlRFWFRfRElTUExBWV9TSVpFXTsKKwkJY2hhciAJCXBhcmVudFtNRU1PUllfQ09OVEVYVF9ESVNQ TEFZX1NJWkVdOworCQljaGFyIAkJY2xpcHBlZF9pZGVudFtNRU1PUllfQ09OVEVYVF9ESVNQTEFZ X1NJWkVdOworCQlpbnQgCQlsZXZlbDsKKwkJU2l6ZQl0b3RhbF9ieXRlczsKKwkJU2l6ZQl0b3Rh bF9uYmxvY2tzOworCQlTaXplCWZyZWVfYnl0ZXM7CisJCVNpemUJZnJlZV9jaHVua3M7CisJCVNp emUJdXNlZF9ieXRlczsKKworCQltZW1zZXQodmFsdWVzLCAwLCBzaXplb2YodmFsdWVzKSk7CisJ CW1lbXNldChudWxscywgMCwgc2l6ZW9mKG51bGxzKSk7CisKKwkJc3dpdGNoIChmZ2V0YyhmcGlu KSkKKwkJeworCQkJLyogJ0QnCUEgbWVtb3J5IGNvbnRleHQgaW5mb3JtYXRpb24gZm9sbG93cyAq LworCQkJY2FzZSAnRCc6CisJCQkJaWYgKGZzY2FuZihmcGluLCAibmFtZTogJTEwMjNbXixdLCBp ZGVudDogJTEwMjNbXixdLCBwYXJlbnQ6ICUxMDIzW14sXSwgXAorCQkJCQlsZXZlbDogJWQsIHRv dGFsX2J5dGVzOiAlbHUsIHRvdGFsX25ibG9ja3M6ICVsdSwgXAorCQkJCQlmcmVlX2J5dGVzOiAl bHUsIGZyZWVfY2h1bmtzOiAlbHUsIHVzZWRfYnl0ZXM6ICVsdSxcbiIsCisJCQkJCW5hbWUsIGNs aXBwZWRfaWRlbnQsIHBhcmVudCwgJmxldmVsLCAmdG90YWxfYnl0ZXMsICZ0b3RhbF9uYmxvY2tz LAorCQkJCQkJJmZyZWVfYnl0ZXMsICZmcmVlX2NodW5rcywgJnVzZWRfYnl0ZXMpCisJCQkJCSE9 IFBHX0dFVF9CQUNLRU5EX01FTU9SWV9DT05URVhUU19DT0xTKQorCQkJCXsKKwkJCQkJZXJlcG9y dChXQVJOSU5HLAorCQkJCQkJKGVycm1zZygiY29ycnVwdGVkIG1lbW9yeSBjb250ZXh0IGR1bXAg ZmlsZSBcIiVzXCIiLAorCQkJCQkJCWR1bXBmaWxlKSkpOworCQkJCQlnb3RvIGRvbmU7CisJCQkJ fQorCisJCQkJdmFsdWVzWzBdID0gQ1N0cmluZ0dldFRleHREYXR1bShuYW1lKTsKKworCQkJCWlm IChzdHJjbXAoY2xpcHBlZF9pZGVudCwgIm5vbmUiKSkKKwkJCQkJdmFsdWVzWzFdID0gQ1N0cmlu Z0dldFRleHREYXR1bShjbGlwcGVkX2lkZW50KTsKKwkJCQllbHNlCisJCQkJCW51bGxzWzFdID0g dHJ1ZTsKKworCQkJCWlmIChzdHJjbXAocGFyZW50LCAibm9uZSIpKQorCQkJCQl2YWx1ZXNbMl0g PSBDU3RyaW5nR2V0VGV4dERhdHVtKHBhcmVudCk7CisJCQkJZWxzZQorCQkJCQludWxsc1syXSA9 IHRydWU7CisKKwkJCQl2YWx1ZXNbM10gPSBJbnQzMkdldERhdHVtKGxldmVsKTsKKwkJCQl2YWx1 ZXNbNF0gPSBJbnQ2NEdldERhdHVtKHRvdGFsX2J5dGVzKTsKKwkJCQl2YWx1ZXNbNV0gPSBJbnQ2 NEdldERhdHVtKHRvdGFsX25ibG9ja3MpOworCQkJCXZhbHVlc1s2XSA9IEludDY0R2V0RGF0dW0o ZnJlZV9ieXRlcyk7CisJCQkJdmFsdWVzWzddID0gSW50NjRHZXREYXR1bShmcmVlX2NodW5rcyk7 CisJCQkJdmFsdWVzWzhdID0gSW50NjRHZXREYXR1bSh1c2VkX2J5dGVzKTsKKworCQkJCXR1cGxl c3RvcmVfcHV0dmFsdWVzKHR1cHN0b3JlLCB0dXBkZXNjLCB2YWx1ZXMsIG51bGxzKTsKKwkJCQli cmVhazsKKworCQkJY2FzZSAnRSc6CisJCQkJZ290byBkb25lOworCisJCQlkZWZhdWx0OgorCQkJ CWVyZXBvcnQoV0FSTklORywKKwkJCQkJCShlcnJtc2coImNvcnJ1cHRlZCBtZW1vcnkgY29udGV4 dCBkdW1wIGZpbGUgXCIlc1wiIiwKKwkJCQkJCQlkdW1wZmlsZSkpKTsKKwkJCQlnb3RvIGRvbmU7 CisJCX0KKwl9Citkb25lOgorCUZyZWVGaWxlKGZwaW4pOworCXVubGluayhkdW1wZmlsZSk7CisK KwlMV0xvY2tBY3F1aXJlKE1jeHREdW1wTG9jaywgTFdfRVhDTFVTSVZFKTsKKworCUFzc2VydCht Y3h0ZHVtcFNobWVtLT5zcmNfcGlkID09IE15UHJvY1BpZCk7CisKKwltY3h0ZHVtcFNobWVtLT5k c3RfcGlkID0gMDsKKwltY3h0ZHVtcFNobWVtLT5zcmNfcGlkID0gMDsKKwltY3h0ZHVtcFNobWVt LT5kdW1wX3N0YXR1cyA9IE1DWFREVU1QU1RBVFVTX0FDQ0VQVEFCTEU7CisKKwlMV0xvY2tSZWxl YXNlKE1jeHREdW1wTG9jayk7Cit9CisKIC8qCiAgKiBwZ19nZXRfYmFja2VuZF9tZW1vcnlfY29u dGV4dHMKLSAqCQlTUUwgU1JGIHNob3dpbmcgYmFja2VuZCBtZW1vcnkgY29udGV4dC4KKyAqCQlT UUwgU1JGIHNob3dpbmcgbG9jYWwgYmFja2VuZCBtZW1vcnkgY29udGV4dC4KICAqLwogRGF0dW0K IHBnX2dldF9iYWNrZW5kX21lbW9yeV9jb250ZXh0cyhQR19GVU5DVElPTl9BUkdTKQpAQCAtMTQ4 LDEwICszOTcsNDIyIEBAIHBnX2dldF9iYWNrZW5kX21lbW9yeV9jb250ZXh0cyhQR19GVU5DVElP Tl9BUkdTKQogCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKIAogCVB1dE1lbW9y eUNvbnRleHRzU3RhdHNUdXBsZVN0b3JlKHR1cHN0b3JlLCB0dXBkZXNjLAotCQkJCQkJCQlUb3BN ZW1vcnlDb250ZXh0LCBOVUxMLCAwKTsKKwkJCQkJCQlUb3BNZW1vcnlDb250ZXh0LCAiIiwgMCwg TlVMTCk7CisKKwkvKiBjbGVhbiB1cCBhbmQgcmV0dXJuIHRoZSB0dXBsZXN0b3JlICovCisJdHVw bGVzdG9yZV9kb25lc3RvcmluZyh0dXBzdG9yZSk7CisKKwlyZXR1cm4gKERhdHVtKSAwOworfQor CisvKgorICogcGdfZ2V0X3RhcmdldF9iYWNrZW5kX21lbW9yeV9jb250ZXh0cworICoJCVNRTCBT UkYgc2hvd2luZyBzcGVjaWZpZWQgcHJvY2VzcydzIGJhY2tlbmQgbWVtb3J5IGNvbnRleHQuCisg Ki8KK0RhdHVtCitwZ19nZXRfdGFyZ2V0X2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzKFBHX0ZVTkNU SU9OX0FSR1MpCit7CisJaW50CQlkc3RfcGlkID0gUEdfR0VUQVJHX0lOVDMyKDApOworCisJUmV0 dXJuU2V0SW5mbyAqcnNpbmZvID0gKFJldHVyblNldEluZm8gKikgZmNpbmZvLT5yZXN1bHRpbmZv OworCVR1cGxlRGVzYwl0dXBkZXNjOworCVR1cGxlc3RvcmVzdGF0ZSAqdHVwc3RvcmU7CisJTWVt b3J5Q29udGV4dCBwZXJfcXVlcnlfY3R4OworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKwlj aGFyCQlkdW1wZmlsZVtNQVhQR1BBVEhdOworCVBHUFJPQwkgCSpwcm9jOworCVBnQmFja2VuZFN0 YXR1cyAqYmVlbnRyeTsKKworCWlmIChkc3RfcGlkID09IE15UHJvY1BpZCkKKwl7CisJCXBnX2dl dF9iYWNrZW5kX21lbW9yeV9jb250ZXh0cyhmY2luZm8pOworCQlyZXR1cm4gKERhdHVtKSAwOwor CX0KKworCXNucHJpbnRmKGR1bXBmaWxlLCBzaXplb2YoZHVtcGZpbGUpLCAiJXMvJWQiLCBQR19N RU1VU0FHRV9ESVIsIGRzdF9waWQpOworCisJLyogY2hlY2sgdG8gc2VlIGlmIGNhbGxlciBzdXBw b3J0cyB1cyByZXR1cm5pbmcgYSB0dXBsZXN0b3JlICovCisJaWYgKHJzaW5mbyA9PSBOVUxMIHx8 ICFJc0EocnNpbmZvLCBSZXR1cm5TZXRJbmZvKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJy Y29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJIGVycm1zZygic2V0LXZh bHVlZCBmdW5jdGlvbiBjYWxsZWQgaW4gY29udGV4dCB0aGF0IGNhbm5vdCBhY2NlcHQgYSBzZXQi KSkpOworCWlmICghKHJzaW5mby0+YWxsb3dlZE1vZGVzICYgU0ZSTV9NYXRlcmlhbGl6ZSkpCisJ CWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JU RUQpLAorCQkJCSBlcnJtc2coIm1hdGVyaWFsaXplIG1vZGUgcmVxdWlyZWQsIGJ1dCBpdCBpcyBu b3QgYWxsb3dlZCBpbiB0aGlzIGNvbnRleHQiKSkpOworCisJLyogQnVpbGQgYSB0dXBsZSBkZXNj cmlwdG9yIGZvciBvdXIgcmVzdWx0IHR5cGUgKi8KKwlpZiAoZ2V0X2NhbGxfcmVzdWx0X3R5cGUo ZmNpbmZvLCBOVUxMLCAmdHVwZGVzYykgIT0gVFlQRUZVTkNfQ09NUE9TSVRFKQorCQllbG9nKEVS Uk9SLCAicmV0dXJuIHR5cGUgbXVzdCBiZSBhIHJvdyB0eXBlIik7CisKKwlwZXJfcXVlcnlfY3R4 ID0gcnNpbmZvLT5lY29udGV4dC0+ZWN4dF9wZXJfcXVlcnlfbWVtb3J5OworCW9sZGNvbnRleHQg PSBNZW1vcnlDb250ZXh0U3dpdGNoVG8ocGVyX3F1ZXJ5X2N0eCk7CisKKwl0dXBzdG9yZSA9IHR1 cGxlc3RvcmVfYmVnaW5faGVhcCh0cnVlLCBmYWxzZSwgd29ya19tZW0pOworCXJzaW5mby0+cmV0 dXJuTW9kZSA9IFNGUk1fTWF0ZXJpYWxpemU7CisJcnNpbmZvLT5zZXRSZXN1bHQgPSB0dXBzdG9y ZTsKKwlyc2luZm8tPnNldERlc2MgPSB0dXBkZXNjOworCisJTWVtb3J5Q29udGV4dFN3aXRjaFRv KG9sZGNvbnRleHQpOworCisJLyoKKwkgKiBDaGVjayB3aGV0aGVyIHRoZSB0YXJnZXQgcHJvY2Vz cyBpcyBQb3N0Z3JlU1FMIGJhY2tlbmQgcHJvY2Vzcy4KKwkgKiBCeSB0aGUgdGltZSB3ZSByZWFj aCBTZW5kUHJvY1NpZ25hbCgpLCBhIHByb2Nlc3MgZm9yIHdoaWNoIHdlIGdldAorCSAqIGEgdmFs aWQgcHJvYyBoZXJlIG1pZ2h0IGhhdmUgdGVybWluYXRlZCBvciBnb3Qgc3R1Y2suCisJICogSW4g dGhlc2UgY2FzZXMsIHVzZXJzIGFyZSBleHBlY3RlZCB0byBjYW5jZWwgdGhlIGR1bXAgcmVxdWVz dC4KKwkgKi8KKwlwcm9jID0gQmFja2VuZFBpZEdldFByb2MoZHN0X3BpZCk7CisKKwlpZiAocHJv YyA9PSBOVUxMKQorCXsKKwkJZXJlcG9ydChXQVJOSU5HLAorCQkJCShlcnJtc2coIlBJRCAlZCBp cyBub3QgYSBQb3N0Z3JlU1FMIHNlcnZlciBwcm9jZXNzIiwgZHN0X3BpZCkpKTsKKworCQlyZXR1 cm4gKERhdHVtKSAxOworCX0KKworCWJlZW50cnkgPSBwZ3N0YXRfZmV0Y2hfc3RhdF9iZWVudHJ5 KHByb2MtPmJhY2tlbmRJZCk7CisKKwlpZiAoYmVlbnRyeS0+c3RfYmFja2VuZFR5cGUgIT0gQl9C QUNLRU5EKQorCXsKKwkJZXJlcG9ydChXQVJOSU5HLAorCQkJCShlcnJtc2coIlBJRCAlZCBpcyBu b3QgYSBQb3N0Z3JlU1FMIGJhY2tlbmQgcHJvY2VzcyIsIGRzdF9waWQpKSk7CisKKwkJcmV0dXJu IChEYXR1bSkgMTsKKwl9CisKKwkvKgorCSAqIFRoZSBFTlNVUkUgc3R1ZmYgZW5zdXJlcyB3ZSBj bGVhbiB1cCB0aGUgc2hhcmVkIG1lbW9yeSBzdHJ1Y3QgYW5kIGZpbGVzCisJICogb24gZmFpbHVy ZS4KKwkgKi8KKwlQR19FTlNVUkVfRVJST1JfQ0xFQU5VUChNY3h0UmVxS2lsbCwgKERhdHVtKSBJ bnQzMkdldERhdHVtKGRzdF9waWQpKTsKKwl7CisJCVNldHVwTWN4dGR1bXBTaG1lbShkc3RfcGlk KTsKKworCQlTZW5kUHJvY1NpZ25hbChkc3RfcGlkLCBQUk9DU0lHX0RVTVBfTUVNQ1hULCBJbnZh bGlkQmFja2VuZElkKTsKKworCQkvKiBXYWl0IHVudGlsIHRhcmdldCBwcm9jZXNzIGZpbmlzaGVz IGR1bXBpbmcgZmlsZS4gKi8KKwkJZm9yICg7OykKKwkJeworCQkJLyogQ2hlY2sgZm9yIGR1bXAg Y2FuY2VsIHJlcXVlc3QuICovCisJCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCisJCQkvKiBN dXN0IHJlc2V0IHRoZSBsYXRjaCBiZWZvcmUgdGVzdGluZyBzdGF0ZS4gKi8KKwkJCVJlc2V0TGF0 Y2goTXlMYXRjaCk7CisKKwkJCUxXTG9ja0FjcXVpcmUoTWN4dER1bXBMb2NrLCBMV19TSEFSRUQp OworCisJCQlpZiAobWN4dGR1bXBTaG1lbS0+c3JjX3BpZCAhPSBNeVByb2NQaWQpCisJCQl7CisJ CQkJLyoKKwkJCQkgKiBJdCBzZWVtcyB0aGUgZHVtcGVyIGZhaWxzIGFuZCBzdWJzZXF1ZW50bHkg YW5vdGhlcgorCQkJCSAqIHByb2Nlc3MgaXMgcmVxdWVzdGluZyBkdW1waW5nLgorCQkJCSAqLwor CQkJCWVyZXBvcnQoSU5GTywKKwkJCQkJKGVycm1zZygiVGhlIHJlcXVlc3QgaGFzIGZhaWxlZCBh bmQgbm93IFBJRCAlZCBpcyByZXF1c3RpbmcgZHVtcGluZy4iLAorCQkJCQkJbWN4dGR1bXBTaG1l bS0+c3JjX3BpZCkpKTsKKworCQkJCUxXTG9ja1JlbGVhc2UoTWN4dER1bXBMb2NrKTsKKwkJCQl0 dXBsZXN0b3JlX2RvbmVzdG9yaW5nKHR1cHN0b3JlKTsKKworCQkJCXJldHVybiAoRGF0dW0pIDA7 CisJCQl9CisJCQllbHNlIGlmIChtY3h0ZHVtcFNobWVtLT5kdW1wX3N0YXR1cyA9PSBNQ1hURFVN UFNUQVRVU19BQ0NFUFRBQkxFKQorCQkJeworCQkJCS8qCisJCQkJICogRHVtcGVyIHNlZW1zIHRv IGNsZWFuIHVwIHRoZSBlbnJ5IGJlY2F1c2Ugb2YgZmFpbHVyZXMgb3IKKwkJCQkgKiBjYW5jZWxs YXRpb24uCisJCQkJICogU2luY2UgdGhlIGR1bXBlciBoYXMgYWxyZWFkeSByZW1vdmVkIHRoZSBk dW1wIGZpbGUsCisJCQkJICogc2ltcGx5IGV4aXQuCisJCQkJICovCisJCQkJTFdMb2NrUmVsZWFz ZShNY3h0RHVtcExvY2spOworCQkJCXR1cGxlc3RvcmVfZG9uZXN0b3JpbmcodHVwc3RvcmUpOwor CisJCQkJcmV0dXJuIChEYXR1bSkgMDsKKwkJCX0KKwkJCWVsc2UgaWYgKG1jeHRkdW1wU2htZW0t PmR1bXBfc3RhdHVzID09IE1DWFREVU1QU1RBVFVTX0NBTkNFTElORykKKwkJCXsKKwkJCQkvKgor CQkJCSAqIFJlcXVlc3QgaGFzIGJlZW4gY2FuY2VsZWQuIEV4aXQgd2l0aG91dCBkdW1waW5nLgor CQkJCSAqLworCQkJCUxXTG9ja1JlbGVhc2UoTWN4dER1bXBMb2NrKTsKKwkJCQl0dXBsZXN0b3Jl X2RvbmVzdG9yaW5nKHR1cHN0b3JlKTsKKworCQkJCXJldHVybiAoRGF0dW0pIDA7CisJCQl9CisK KwkJCWVsc2UgaWYgKG1jeHRkdW1wU2htZW0tPmR1bXBfc3RhdHVzID09IE1DWFREVU1QU1RBVFVT X0RPTkUpCisJCQl7CisJCQkJLyogRHVtcGluZyBoYXMgY29tcGxldGVkLiAqLworCQkJCUxXTG9j a1JlbGVhc2UoTWN4dER1bXBMb2NrKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCS8qCisJCQkgKiBU aGUgZHVtcGVyIG11c3QgYmUgaW4gdGhlIG1pZGRsZSBvZiBhIGR1bXBpbmcgb3IgdGhlIHJlcXVl c3QKKwkJCSAqIGhhc24ndCBiZWVuIHJlYWNoZWQgeWV0LgorCQkJICovCisJCQlBc3NlcnQobWN4 dGR1bXBTaG1lbS0+ZHVtcF9zdGF0dXMgPT0gTUNYVERVTVBTVEFUVVNfUkVRVUVTVElORyB8fAor CQkJCW1jeHRkdW1wU2htZW0tPmR1bXBfc3RhdHVzID09IE1DWFREVU1QU1RBVFVTX0RVTVBJTkcp OworCisJCQlMV0xvY2tSZWxlYXNlKE1jeHREdW1wTG9jayk7CisKKwkJCS8qCisJCQkgKiBXYWl0 LiBXZSBleHBlY3QgdG8gZ2V0IGEgbGF0Y2ggc2lnbmFsIGJhY2sgZnJvbSB0aGUgZHVtcGVyLgor CQkJICogVXNlIGEgdGltZW91dCB0byBlbmFibGUgY2FuY2VsbGF0aW9uLgorCQkJICovCisJCQko dm9pZCkgV2FpdExhdGNoKE15TGF0Y2gsCisJCQkJCVdMX0xBVENIX1NFVCB8IFdMX1RJTUVPVVQg fCBXTF9FWElUX09OX1BNX0RFQVRILAorCQkJCQkxMDAwTCwgV0FJVF9FVkVOVF9EVU1QX01FTU9S WV9DT05URVhUKTsKKwkJfQorCX0KKwlQR19FTkRfRU5TVVJFX0VSUk9SX0NMRUFOVVAoTWN4dFJl cUtpbGwsIChEYXR1bSkgSW50MzJHZXREYXR1bShkc3RfcGlkKSk7CisKKwkvKiBSZWFkIHZhbHVl cyBmcm9tIHRoZSBkdW1wIGZpbGUgYW5kIHB1dCB0aGVtIG9uIHR1cGxlc3RvcmUuICovCisJUHV0 RHVtcGVkVmFsdWVzT25UdXBsZXN0b3JlKGR1bXBmaWxlLCB0dXBzdG9yZSwgdHVwZGVzYywgZHN0 X3BpZCk7CiAKIAkvKiBjbGVhbiB1cCBhbmQgcmV0dXJuIHRoZSB0dXBsZXN0b3JlICovCiAJdHVw bGVzdG9yZV9kb25lc3RvcmluZyh0dXBzdG9yZSk7CiAKIAlyZXR1cm4gKERhdHVtKSAwOwogfQor CisvKgorICogZHVtcF9tZW1vcnlfY29udGV4dHMKKyAqIAkJRHVtcCBsb2NhbCBtZW1vcnkgY29u dGV4dHMgdG8gYSBmaWxlLgorICovCitzdGF0aWMgdm9pZAorZHVtcF9tZW1vcnlfY29udGV4dHMo dm9pZCkKK3sKKwlGSUxFCQkqZnBvdXQ7CisJY2hhcgkJZHVtcGZpbGVbTUFYUEdQQVRIXTsKKwlp bnQJCWZvcm1hdF9pZDsKKwlwaWRfdAkJc3JjX3BpZDsKKwlQR1BST0MJIAkqc3JjX3Byb2M7CisK KwlzbnByaW50ZihkdW1wZmlsZSwgc2l6ZW9mKGR1bXBmaWxlKSwgIiVzLyVkIiwgUEdfTUVNVVNB R0VfRElSLCBNeVByb2NQaWQpOworCisJTFdMb2NrQWNxdWlyZShNY3h0RHVtcExvY2ssIExXX0VY Q0xVU0lWRSk7CisKKwlpZiAobWN4dGR1bXBTaG1lbS0+ZHVtcF9zdGF0dXMgPT0gTUNYVERVTVBT VEFUVVNfQUNDRVBUQUJMRSkKKwl7CisJCS8qCisJCSAqIFRoZSByZXF1ZXN0b3IgY2FuY2VsZWQg dGhlIHJlcXVlc3QgYW5kIGluaXRpYWxpemVkCisJCSAqIHRoZSBzaGFyZWQgbWVtb3J5LiBTaW1w bHkgZXhpdC4KKwkJICovCisJCUxXTG9ja1JlbGVhc2UoTWN4dER1bXBMb2NrKTsKKworCQlyZXR1 cm47CisJfQorCisJaWYgKG1jeHRkdW1wU2htZW0tPmR1bXBfc3RhdHVzID09IE1DWFREVU1QU1RB VFVTX0NBTkNFTElORykKKwl7CisJCS8qCisJCSAqIFRoZSByZXF1ZXN0b3IgY2FuY2VsZWQgdGhl IHJlcXVlc3QuCisJCSAqIEluaXRpYWxpemUgdGhlIHNoYXJlZCBtZW1vcnkgYW5kIGV4aXQuCisJ CSAqLworCQltY3h0ZHVtcFNobWVtLT5kc3RfcGlkID0gMDsKKwkJbWN4dGR1bXBTaG1lbS0+c3Jj X3BpZCA9IDA7CisJCW1jeHRkdW1wU2htZW0tPmR1bXBfc3RhdHVzID0gTUNYVERVTVBTVEFUVVNf QUNDRVBUQUJMRTsKKworCQlMV0xvY2tSZWxlYXNlKE1jeHREdW1wTG9jayk7CisKKwkJcmV0dXJu OworCX0KKworCUFzc2VydChtY3h0ZHVtcFNobWVtLT5kdW1wX3N0YXR1cyA9IE1DWFREVU1QU1RB VFVTX1JFUVVFU1RJTkcpOworCisJbWN4dGR1bXBTaG1lbS0+ZHVtcF9zdGF0dXMgPSBNQ1hURFVN UFNUQVRVU19EVU1QSU5HOworCXNyY19waWQgPSBtY3h0ZHVtcFNobWVtLT5zcmNfcGlkOworCisJ TFdMb2NrUmVsZWFzZShNY3h0RHVtcExvY2spOworCisJZnBvdXQgPSBBbGxvY2F0ZUZpbGUoZHVt cGZpbGUsICJ3Iik7CisKKwlpZiAoZnBvdXQgPT0gTlVMTCkKKwl7CisJCWVyZXBvcnQoTE9HLAor CQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAorCQkJCSBlcnJtc2coImNvdWxkIG5vdCB3 cml0ZSBtZW1vcnkgY29udGV4dCBmaWxlIFwiJXNcIjogJW0iLAorCQkJCQkJZHVtcGZpbGUpKSk7 CisJCUZyZWVGaWxlKGZwb3V0KTsKKworCQlMV0xvY2tBY3F1aXJlKE1jeHREdW1wTG9jaywgTFdf RVhDTFVTSVZFKTsKKworCQltY3h0ZHVtcFNobWVtLT5kc3RfcGlkID0gMDsKKwkJbWN4dGR1bXBT aG1lbS0+c3JjX3BpZCA9IDA7CisJCW1jeHRkdW1wU2htZW0tPmR1bXBfc3RhdHVzID0gTUNYVERV TVBTVEFUVVNfQUNDRVBUQUJMRTsKKworCQlMV0xvY2tSZWxlYXNlKE1jeHREdW1wTG9jayk7CisK KwkJcmV0dXJuOworCX0KKwlmb3JtYXRfaWQgPSBQR19NQ1hUX0ZJTEVfRk9STUFUX0lEOworCWZ3 cml0ZSgmZm9ybWF0X2lkLCBzaXplb2YoZm9ybWF0X2lkKSwgMSwgZnBvdXQpOworCisJLyogTG9v ayBpbnRvIGVhY2ggbWVtb3J5IGNvbnRleHQgZnJvbSBUb3BNZW1vcnlDb250ZXh0IHJlY3Vyc2l2 ZWx5LiAqLworCVB1dE1lbW9yeUNvbnRleHRzU3RhdHNUdXBsZVN0b3JlKE5VTEwsIE5VTEwsCisJ CQkJCQkJVG9wTWVtb3J5Q29udGV4dCwgTlVMTCwgMCwgZnBvdXQpOworCisJLyoKKwkgKiBNYWtl IGR1bXAgZmlsZSBlbmRzIHdpdGggJ0UnLgorCSAqIFRoaXMgaXMgY2hlY2tlZCBieSB0aGUgcmVx dWVzdG9yIGxhdGVyLgorCSAqLworCWZwdXRjKCdFJywgZnBvdXQpOworCisJaWYgKGZlcnJvcihm cG91dCkpCisJeworCQllcmVwb3J0KExPRywKKwkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3Mo KSwKKwkJCQkgZXJybXNnKCJjb3VsZCBub3Qgd3JpdGUgZHVtcCBmaWxlIFwiJXNcIjogJW0iLAor CQkJCQkJZHVtcGZpbGUpKSk7CisJCUZyZWVGaWxlKGZwb3V0KTsKKwkJdW5saW5rKGR1bXBmaWxl KTsKKworCQlMV0xvY2tBY3F1aXJlKE1jeHREdW1wTG9jaywgTFdfRVhDTFVTSVZFKTsKKworCQlt Y3h0ZHVtcFNobWVtLT5kc3RfcGlkID0gMDsKKwkJbWN4dGR1bXBTaG1lbS0+c3JjX3BpZCA9IDA7 CisJCW1jeHRkdW1wU2htZW0tPmR1bXBfc3RhdHVzID0gTUNYVERVTVBTVEFUVVNfQUNDRVBUQUJM RTsKKworCQlMV0xvY2tSZWxlYXNlKE1jeHREdW1wTG9jayk7CisKKwkJcmV0dXJuOworCX0KKwor CS8qIE5vIG1vcmUgb3V0cHV0IHRvIGJlIGRvbmUuIENsb3NlIGZpbGUuICovCisJZWxzZSBpZiAo RnJlZUZpbGUoZnBvdXQpIDwgMCkKKwl7CisJCWVyZXBvcnQoTE9HLAorCQkJCShlcnJjb2RlX2Zv cl9maWxlX2FjY2VzcygpLAorCQkJCSBlcnJtc2coImNvdWxkIG5vdCBjbG9zZSBkdW1wIGZpbGUg XCIlc1wiOiAlbSIsCisJCQkJCQlkdW1wZmlsZSkpKTsKKwl9CisKKwlMV0xvY2tBY3F1aXJlKE1j eHREdW1wTG9jaywgTFdfRVhDTFVTSVZFKTsKKworCWlmIChtY3h0ZHVtcFNobWVtLT5kdW1wX3N0 YXR1cyA9PSBNQ1hURFVNUFNUQVRVU19DQU5DRUxJTkcpCisJeworCQkvKiBEdXJpbmcgZHVtcGlu ZywgdGhlIHJlcXVlc3RvciBjYW5jZWxlZCB0aGUgcmVxdWVzdC4gKi8KKwkJdW5saW5rKGR1bXBm aWxlKTsKKworCQltY3h0ZHVtcFNobWVtLT5kc3RfcGlkID0gMDsKKwkJbWN4dGR1bXBTaG1lbS0+ c3JjX3BpZCA9IDA7CisJCW1jeHRkdW1wU2htZW0tPmR1bXBfc3RhdHVzID0gTUNYVERVTVBTVEFU VVNfQUNDRVBUQUJMRTsKKworCQlMV0xvY2tSZWxlYXNlKE1jeHREdW1wTG9jayk7CisKKwkJcmV0 dXJuOworCX0KKworCS8qIER1bXBpbmcgaGFzIHN1Y2NlZWRlZCwgbm90aWZ5IGl0IHRvIHRoZSBy ZXF1ZXN0b3IuICovCisJbWN4dGR1bXBTaG1lbS0+ZHVtcF9zdGF0dXMgPSBNQ1hURFVNUFNUQVRV U19ET05FOworCUxXTG9ja1JlbGVhc2UoTWN4dER1bXBMb2NrKTsKKwlzcmNfcHJvYyA9IEJhY2tl bmRQaWRHZXRQcm9jKHNyY19waWQpOworCVNldExhdGNoKCYoc3JjX3Byb2MtPnByb2NMYXRjaCkp OworCisJcmV0dXJuOworfQorCisvKgorICogUHJvY2Vzc0R1bXBNZW1vcnlDb250ZXh0SW50ZXJy dXB0CisgKgkJVGhlIHBvcnRpb24gb2YgbWVtb3J5IGNvbnRleHQgZHVtcCBpbnRlcnJ1cHQgaGFu ZGxpbmcgdGhhdCBydW5zCisgKgkJb3V0c2lkZSBvZiB0aGUgc2lnbmFsIGhhbmRsZXIuCisgKi8K K3ZvaWQKK1Byb2Nlc3NEdW1wTWVtb3J5Q29udGV4dEludGVycnVwdCh2b2lkKQoreworCVByb2NT aWduYWxEdW1wTWVtb3J5Q29udGV4dFBlbmRpbmcgPSBmYWxzZTsKKwlkdW1wX21lbW9yeV9jb250 ZXh0cygpOworfQorCisvKgorICogSGFuZGxlUHJvY1NpZ25hbER1bXBNZW1vcnlDb250ZXh0Cisg KiAJCUhhbmRsZSByZWNlaXB0IG9mIGFuIGludGVycnVwdCBpbmRpY2F0aW5nIGEgbWVtb3J5IGNv bnRleHQgZHVtcC4KKyAqCQlTaWduYWwgaGFuZGxlciBwb3J0aW9uIG9mIGludGVycnVwdCBoYW5k bGluZy4KKyAqLwordm9pZAorSGFuZGxlUHJvY1NpZ25hbER1bXBNZW1vcnlDb250ZXh0KHZvaWQp Cit7CisJUHJvY1NpZ25hbER1bXBNZW1vcnlDb250ZXh0UGVuZGluZyA9IHRydWU7Cit9CisKKy8q CisgKiBNY3h0RHVtcFNobWVtSW5pdAorICogCQlJbml0aWFsaXplIG1jeHRkdW1wIHNoYXJlZCBt ZW1vcnkgc3RydWN0LgorICovCit2b2lkCitNY3h0RHVtcFNobWVtSW5pdCh2b2lkKQoreworCWJv b2wJCWZvdW5kOworCisJbWN4dGR1bXBTaG1lbSA9IChtY3h0ZHVtcFNobWVtU3RydWN0ICopCisJ CVNobWVtSW5pdFN0cnVjdCgiTWVtb3J5IENvbnRleHQgRHVtcCBEYXRhIiwKKwkJCQkJCXNpemVv ZihtY3h0ZHVtcFNobWVtU3RydWN0KSwKKwkJCQkJCSZmb3VuZCk7CisJaWYgKCFmb3VuZCkKKwl7 CisJCW1jeHRkdW1wU2htZW0tPmRzdF9waWQgPSAwOworCQltY3h0ZHVtcFNobWVtLT5zcmNfcGlk ID0gMDsKKwkJbWN4dGR1bXBTaG1lbS0+ZHVtcF9zdGF0dXMgPSBNQ1hURFVNUFNUQVRVU19BQ0NF UFRBQkxFOworCX0KK30KKworLyoKKyAqIFJlbW92ZU1lbWN4dEZpbGUKKyAqCSAJUmVtb3ZlIGR1 bXAgZmlsZXMuCisgKi8KK3ZvaWQKK1JlbW92ZU1lbWN4dEZpbGUoaW50IHBpZCkKK3sKKwlESVIJ CSpkaXI7CisJc3RydWN0IAlkaXJlbnQgKmR1bXBmaWxlOworCisJaWYgKHBpZCA9PSAwKQorCXsK KwkJLyogZGVsZXRlIGFsbCBkdW1wIGZpbGVzICovCisJCWRpciA9IEFsbG9jYXRlRGlyKFBHX01F TVVTQUdFX0RJUik7CisJCXdoaWxlICgoZHVtcGZpbGUgPSBSZWFkRGlyKGRpciwgUEdfTUVNVVNB R0VfRElSKSkgIT0gTlVMTCkKKwkJeworCQkJY2hhcgkJZHVtcGZpbGVwYXRoWzMyXTsKKworCQkJ aWYgKHN0cmNtcChkdW1wZmlsZS0+ZF9uYW1lLCAiLiIpID09IDAgfHwgc3RyY21wKGR1bXBmaWxl LT5kX25hbWUsICIuLiIpID09IDApCisJCQkJY29udGludWU7CisKKwkJCXNwcmludGYoZHVtcGZp bGVwYXRoLCAiJXMvJXMiLCBQR19NRU1VU0FHRV9ESVIsIGR1bXBmaWxlLT5kX25hbWUpOworCisJ CQllcmVwb3J0KERFQlVHMiwKKwkJCQkJKGVycm1zZygicmVtb3ZpbmcgZmlsZSBcIiVzXCIiLCBk dW1wZmlsZXBhdGgpKSk7CisKKwkJCWlmICh1bmxpbmsoZHVtcGZpbGVwYXRoKSA8IDApCisJCQl7 CisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCisJ CQkJCSBlcnJtc2coImNvdWxkIG5vdCByZW1vdmUgZmlsZSBcIiVzXCI6ICVtIiwgZHVtcGZpbGVw YXRoKSkpOworCQkJfQorCQl9CisJCUZyZWVEaXIoZGlyKTsKKwl9CisJZWxzZQorCXsKKwkJLyog ZGVsZXRlIHNwZWNpZmllZCBkdW1wIGZpbGUgKi8KKwkJY2hhcgkJc3RyX3BpZFsxMl07CisJCWNo YXIJCWR1bXBmaWxlcGF0aFszMl07CisJCXN0cnVjdCAJCXN0YXQgc3RhdF90bXA7CisKKwkJcGdf bHRvYShwaWQsIHN0cl9waWQpOworCQlzcHJpbnRmKGR1bXBmaWxlcGF0aCwgIiVzLyVzIiwgUEdf TUVNVVNBR0VfRElSLCBzdHJfcGlkKTsKKworCQllcmVwb3J0KERFQlVHMiwKKwkJCQkoZXJybXNn KCJyZW1vdmluZyBmaWxlIFwiJXNcIiIsIGR1bXBmaWxlcGF0aCkpKTsKKworCQlpZiAoc3RhdChk dW1wZmlsZXBhdGgsICZzdGF0X3RtcCkgPT0gMCkKKwkJeworCQkJaWYgKHVubGluayhkdW1wZmls ZXBhdGgpIDwgMCkKKwkJCXsKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZV9mb3Jf ZmlsZV9hY2Nlc3MoKSwKKwkJCQkJIGVycm1zZygiY291bGQgbm90IHJlbW92ZSBmaWxlIFwiJXNc IjogJW0iLCBkdW1wZmlsZXBhdGgpKSk7CisJCQl9CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC91dGlscy9pbml0L2dsb2JhbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQv Z2xvYmFscy5jCmluZGV4IDZhYjgyMTY4MzkuLjI4OGViOGJjMGMgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQv Z2xvYmFscy5jCkBAIC0zMyw2ICszMyw3IEBAIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBQcm9jRGll UGVuZGluZyA9IGZhbHNlOwogdm9sYXRpbGUgc2lnX2F0b21pY190IENsaWVudENvbm5lY3Rpb25M b3N0ID0gZmFsc2U7CiB2b2xhdGlsZSBzaWdfYXRvbWljX3QgSWRsZUluVHJhbnNhY3Rpb25TZXNz aW9uVGltZW91dFBlbmRpbmcgPSBmYWxzZTsKIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBQcm9jU2ln bmFsQmFycmllclBlbmRpbmcgPSBmYWxzZTsKK3ZvbGF0aWxlIHNpZ19hdG9taWNfdCBQcm9jU2ln bmFsRHVtcE1lbW9yeUNvbnRleHRQZW5kaW5nID0gZmFsc2U7CiB2b2xhdGlsZSB1aW50MzIgSW50 ZXJydXB0SG9sZG9mZkNvdW50ID0gMDsKIHZvbGF0aWxlIHVpbnQzMiBRdWVyeUNhbmNlbEhvbGRv ZmZDb3VudCA9IDA7CiB2b2xhdGlsZSB1aW50MzIgQ3JpdFNlY3Rpb25Db3VudCA9IDA7CmRpZmYg LS1naXQgYS9zcmMvYmluL2luaXRkYi9pbml0ZGIuYyBiL3NyYy9iaW4vaW5pdGRiL2luaXRkYi5j CmluZGV4IGVlM2JmYTgyZjQuLjUyY2RiMjYyNzIgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vaW5pdGRi L2luaXRkYi5jCisrKyBiL3NyYy9iaW4vaW5pdGRiL2luaXRkYi5jCkBAIC0yMjEsNyArMjIxLDgg QEAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHN1YmRpcnNbXSA9IHsKIAkicGdfeGFjdCIsCiAJ InBnX2xvZ2ljYWwiLAogCSJwZ19sb2dpY2FsL3NuYXBzaG90cyIsCi0JInBnX2xvZ2ljYWwvbWFw cGluZ3MiCisJInBnX2xvZ2ljYWwvbWFwcGluZ3MiLAorCSJwZ19tZW11c2FnZSIKIH07CiAKIApk aWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3QvMDEwX3BnX2Jhc2ViYWNrdXAucGwg Yi9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvdC8wMTBfcGdfYmFzZWJhY2t1cC5wbAppbmRleCBmNjc0 YTdjOTRlLi4zNDBhODBmYzExIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvdC8w MTBfcGdfYmFzZWJhY2t1cC5wbAorKysgYi9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvdC8wMTBfcGdf YmFzZWJhY2t1cC5wbApAQCAtNiw3ICs2LDcgQEAgdXNlIEZpbGU6OkJhc2VuYW1lIHF3KGJhc2Vu YW1lIGRpcm5hbWUpOwogdXNlIEZpbGU6OlBhdGggcXcocm10cmVlKTsKIHVzZSBQb3N0Z3Jlc05v ZGU7CiB1c2UgVGVzdExpYjsKLXVzZSBUZXN0OjpNb3JlIHRlc3RzID0+IDEwOTsKK3VzZSBUZXN0 OjpNb3JlIHRlc3RzID0+IDExMDsKIAogcHJvZ3JhbV9oZWxwX29rKCdwZ19iYXNlYmFja3VwJyk7 CiBwcm9ncmFtX3ZlcnNpb25fb2soJ3BnX2Jhc2ViYWNrdXAnKTsKQEAgLTEyNCw3ICsxMjQsNyBA QCBpc19kZWVwbHkoCiAKICMgQ29udGVudHMgb2YgdGhlc2UgZGlyZWN0b3JpZXMgc2hvdWxkIG5v dCBiZSBjb3BpZWQuCiBmb3JlYWNoIG15ICRkaXJuYW1lICgKLQlxdyhwZ19keW5zaG1lbSBwZ19u b3RpZnkgcGdfcmVwbHNsb3QgcGdfc2VyaWFsIHBnX3NuYXBzaG90cyBwZ19zdGF0X3RtcCBwZ19z dWJ0cmFucykKKwlxdyhwZ19keW5zaG1lbSBwZ19ub3RpZnkgcGdfcmVwbHNsb3QgcGdfc2VyaWFs IHBnX3NuYXBzaG90cyBwZ19zdGF0X3RtcCBwZ19zdWJ0cmFucyBwZ19tZW11c2FnZSkKICAgKQog ewogCWlzX2RlZXBseSgKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfcmV3aW5kL2ZpbGVtYXAuYyBi L3NyYy9iaW4vcGdfcmV3aW5kL2ZpbGVtYXAuYwppbmRleCBiYTM0ZGJhYzE0Li5jNGE3OTUyOGFj IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3Jld2luZC9maWxlbWFwLmMKKysrIGIvc3JjL2Jpbi9w Z19yZXdpbmQvZmlsZW1hcC5jCkBAIC0xMTksNiArMTE5LDkgQEAgc3RhdGljIGNvbnN0IGNoYXIg KmV4Y2x1ZGVEaXJDb250ZW50c1tdID0KIAkvKiBDb250ZW50cyB6ZXJvZWQgb24gc3RhcnR1cCwg c2VlIFN0YXJ0dXBTVUJUUkFOUygpLiAqLwogCSJwZ19zdWJ0cmFucyIsCiAKKwkvKiBTa2lwIG1l bW9yeSBjb250ZXh0IGR1bXBlZCBmaWxlcy4gKi8KKwkicGdfbWVtdXNhZ2UiLAorCiAJLyogZW5k IG9mIGxpc3QgKi8KIAlOVUxMCiB9OwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9w Z19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKaW5kZXggZmMyMjAy Yjg0My4uNzA2MDRmYWVmYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9j LmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBAIC03ODQ0LDE1ICs3 ODQ0LDI1IEBACiAKICMgbWVtb3J5IGNvbnRleHQgb2YgbG9jYWwgYmFja2VuZAogeyBvaWQgPT4g JzIyODInLAotICBkZXNjciA9PiAnaW5mb3JtYXRpb24gYWJvdXQgYWxsIG1lbW9yeSBjb250ZXh0 cyBvZiBsb2NhbCBiYWNrZW5kJywKICAgcHJvbmFtZSA9PiAncGdfZ2V0X2JhY2tlbmRfbWVtb3J5 X2NvbnRleHRzJywgcHJvcm93cyA9PiAnMTAwJywKICAgcHJvcmV0c2V0ID0+ICd0JywgcHJvdm9s YXRpbGUgPT4gJ3YnLCBwcm9wYXJhbGxlbCA9PiAncicsCiAgIHByb3JldHR5cGUgPT4gJ3JlY29y ZCcsIHByb2FyZ3R5cGVzID0+ICcnLAogICBwcm9hbGxhcmd0eXBlcyA9PiAne3RleHQsdGV4dCx0 ZXh0LGludDQsaW50OCxpbnQ4LGludDgsaW50OCxpbnQ4fScsCiAgIHByb2FyZ21vZGVzID0+ICd7 byxvLG8sbyxvLG8sbyxvLG99JywKICAgcHJvYXJnbmFtZXMgPT4gJ3tuYW1lLCBpZGVudCwgcGFy ZW50LCBsZXZlbCwgdG90YWxfYnl0ZXMsIHRvdGFsX25ibG9ja3MsIGZyZWVfYnl0ZXMsIGZyZWVf Y2h1bmtzLCB1c2VkX2J5dGVzfScsCisgIGRlc2NyID0+ICdpbmZvcm1hdGlvbiBhYm91dCBhbGwg bWVtb3J5IGNvbnRleHRzIG9mIGxvY2FsIGJhY2tlbmQnLAogICBwcm9zcmMgPT4gJ3BnX2dldF9i YWNrZW5kX21lbW9yeV9jb250ZXh0cycgfSwKIAorIyBtZW1vcnkgY29udGV4dCBvZiBzcGVjaWZp ZWQgYmFja2VuZAoreyBvaWQgPT4gJzI4NjAnLAorICBkZXNjciA9PiAnaW5mb3JtYXRpb24gYWJv dXQgYWxsIG1lbW9yeSBjb250ZXh0cyBvZiBzcGVjaWZpZWQgYmFja2VuZCcsCisgIHByb25hbWUg PT4gJ3BnX2dldF90YXJnZXRfYmFja2VuZF9tZW1vcnlfY29udGV4dHMnLCBwcm9yb3dzID0+ICcx MDAnLCBwcm9pc3N0cmljdCA9PiAnZicsCisgIHByb3JldHNldCA9PiAndCcsIHByb3ZvbGF0aWxl ID0+ICd2JywgcHJvcGFyYWxsZWwgPT4gJ3InLCBwcm9yZXR0eXBlID0+ICdyZWNvcmQnLAorICBw cm9hcmd0eXBlcyA9PiAnaW50NCcsIHByb2FsbGFyZ3R5cGVzID0+ICd7aW50NCx0ZXh0LHRleHQs dGV4dCxpbnQ0LGludDgsaW50OCxpbnQ4LGludDgsaW50OH0nLAorICBwcm9hcmdtb2RlcyA9PiAn e2ksbyxvLG8sbyxvLG8sbyxvLG99JywKKyAgcHJvYXJnbmFtZXMgPT4gJ3twaWQsIG5hbWUsIGlk ZW50LCBwYXJlbnQsIGxldmVsLCB0b3RhbF9ieXRlcywgdG90YWxfbmJsb2NrcywgZnJlZV9ieXRl cywgZnJlZV9jaHVua3MsIHVzZWRfYnl0ZXN9JywKKyAgcHJvc3JjID0+ICdwZ19nZXRfdGFyZ2V0 X2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzJyB9LAorCiAjIG5vbi1wZXJzaXN0ZW50IHNlcmllcyBn ZW5lcmF0b3IKIHsgb2lkID0+ICcxMDY2JywgZGVzY3IgPT4gJ25vbi1wZXJzaXN0ZW50IHNlcmll cyBnZW5lcmF0b3InLAogICBwcm9uYW1lID0+ICdnZW5lcmF0ZV9zZXJpZXMnLCBwcm9yb3dzID0+ ICcxMDAwJywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oIGIvc3JjL2luY2x1 ZGUvbWlzY2FkbWluLmgKaW5kZXggNzJlMzM1MjM5OC4uMWZmMDNiODZhMCAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvbWlzY2FkbWluLmgKKysrIGIvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmgKQEAg LTgzLDYgKzgzLDcgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBR dWVyeUNhbmNlbFBlbmRpbmc7CiBleHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21p Y190IFByb2NEaWVQZW5kaW5nOwogZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxlIHNpZ19hdG9t aWNfdCBJZGxlSW5UcmFuc2FjdGlvblNlc3Npb25UaW1lb3V0UGVuZGluZzsKIGV4dGVybiBQR0RM TElNUE9SVCB2b2xhdGlsZSBzaWdfYXRvbWljX3QgUHJvY1NpZ25hbEJhcnJpZXJQZW5kaW5nOwor ZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBQcm9jU2lnbmFsRHVtcE1l bW9yeUNvbnRleHRQZW5kaW5nOwogCiBleHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0 b21pY190IENsaWVudENvbm5lY3Rpb25Mb3N0OwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9w Z3N0YXQuaCBiL3NyYy9pbmNsdWRlL3Bnc3RhdC5oCmluZGV4IDU5NTQwNjhkZWMuLjI2MmFkYmI3 ODIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Bnc3RhdC5oCisrKyBiL3NyYy9pbmNsdWRlL3Bn c3RhdC5oCkBAIC05NjQsNyArOTY0LDggQEAgdHlwZWRlZiBlbnVtCiAJV0FJVF9FVkVOVF9SRVBM SUNBVElPTl9TTE9UX0RST1AsCiAJV0FJVF9FVkVOVF9TQUZFX1NOQVBTSE9ULAogCVdBSVRfRVZF TlRfU1lOQ19SRVAsCi0JV0FJVF9FVkVOVF9YQUNUX0dST1VQX1VQREFURQorCVdBSVRfRVZFTlRf WEFDVF9HUk9VUF9VUERBVEUsCisJV0FJVF9FVkVOVF9EVU1QX01FTU9SWV9DT05URVhUCiB9IFdh aXRFdmVudElQQzsKIAogLyogLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3Rv cmFnZS9wcm9jc2lnbmFsLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaAppbmRl eCA1Y2IzOTY5N2YzLi5kNGE3YWUwNzYxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdl L3Byb2NzaWduYWwuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaApAQCAt MzQsNiArMzQsNyBAQCB0eXBlZGVmIGVudW0KIAlQUk9DU0lHX1BBUkFMTEVMX01FU1NBR0UsCS8q IG1lc3NhZ2UgZnJvbSBjb29wZXJhdGluZyBwYXJhbGxlbCBiYWNrZW5kICovCiAJUFJPQ1NJR19X QUxTTkRfSU5JVF9TVE9QUElORywJLyogYXNrIHdhbHNlbmRlcnMgdG8gcHJlcGFyZSBmb3Igc2h1 dGRvd24gICovCiAJUFJPQ1NJR19CQVJSSUVSLAkJCS8qIGdsb2JhbCBiYXJyaWVyIGludGVycnVw dCAgKi8KKwlQUk9DU0lHX0RVTVBfTUVNQ1hULAkJLyogcmVxdWVzdCBkdW1waW5nIG1lbW9yeSBj b250ZXh0IGludGVycnVwdCAqLwogCiAJLyogUmVjb3ZlcnkgY29uZmxpY3QgcmVhc29ucyAqLwog CVBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfREFUQUJBU0UsCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS91dGlscy9tY3h0ZnVuY3MuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL21jeHRmdW5jcy5oCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmVmZjJjNjJjYmIKLS0tIC9kZXYv bnVsbAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9tY3h0ZnVuY3MuaApAQCAtMCwwICsxLDQ0IEBA CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBtY3h0ZnVuY3MuaAorICoJICBEZWNsYXJhdGlv bnMgZm9yIHNob3dpbmcgYmFja2VuZCBtZW1vcnkgY29udGV4dC4KKyAqCisgKiBQb3J0aW9ucyBD b3B5cmlnaHQgKGMpIDE5OTYtMjAyMCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3Jv dXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVy c2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9i YWNrZW5kL3V0aWxzL21jeHRmdW5jcy5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNp Zm5kZWYgTUNYVF9ICisjZGVmaW5lIE1DWFRfSAorCisvKiBEaXJlY3RvcnkgdG8gc3RvcmUgZHVt cGVkIG1lbW9yeSBmaWxlcyAqLworI2RlZmluZSBQR19NRU1VU0FHRV9ESVIJCSJwZ19tZW11c2Fn ZSIKKworI2RlZmluZSBQR19NQ1hUX0ZJTEVfRk9STUFUX0lECTB4MDFCNUJDOUUKKwordHlwZWRl ZiBlbnVtIE1jeHREdW1wU3RhdHVzCit7CisJTUNYVERVTVBTVEFUVVNfQUNDRVBUQUJMRSwJCS8q IG5vIG9uZSBpcyByZXF1ZXN0aW5nIGR1bXBpbmcgKi8KKwlNQ1hURFVNUFNUQVRVU19SRVFVRVNU SU5HLAkJLyogcmVxdWVzdCBoYXMgYmVlbiBpc3N1ZWQsIGJ1dCBkdW1wZXIgaGFzIG5vdCByZWNl aXZlZCBpdCB5ZXQgKi8KKwlNQ1hURFVNUFNUQVRVU19EVU1QSU5HLAkJCS8qIGR1bXBlciBpcyBk dW1waW5nIGZpbGVzICovCisJTUNYVERVTVBTVEFUVVNfRE9ORSwJCQkvKiBkdW1wZXIgaGFzIGZp bmlzaGVkIGR1bXBpbmcgYW5kIHRoZSByZXF1ZXN0b3IgaXMgd29ya2luZyAqLworCU1DWFREVU1Q U1RBVFVTX0NBTkNFTElORwkJLyogcmVxdWVzdG9yIGNhbmNlbGVkIHRoZSBkdW1waW5nICovCit9 IE1jeHREdW1wU3RhdHVzOworCit0eXBlZGVmIHN0cnVjdCBtY3h0ZHVtcFNobWVtU3RydWN0Cit7 CisJcGlkX3QJCWRzdF9waWQ7CQkvKiBwaWQgb2YgdGhlIHNpZ25hbCByZWNlaXZlciAqLworCXBp ZF90CQlzcmNfcGlkOwkJLyogcGlkIG9mIHRoZSBzaWduYWwgc2VuZGVyICovCisJTWN4dER1bXBT dGF0dXMJZHVtcF9zdGF0dXM7CQkvKiBkdW1wIHN0YXR1cyAqLworfSBtY3h0ZHVtcFNobWVtU3Ry dWN0OworCitleHRlcm4gdm9pZCBQcm9jZXNzRHVtcE1lbW9yeUNvbnRleHRJbnRlcnJ1cHQodm9p ZCk7CitleHRlcm4gdm9pZCBIYW5kbGVQcm9jU2lnbmFsRHVtcE1lbW9yeUNvbnRleHQodm9pZCk7 CitleHRlcm4gdm9pZCBNY3h0RHVtcFNobWVtSW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIFJlbW92 ZU1jeHREdW1wRmlsZShpbnQpOworZXh0ZXJuIHZvaWQgUmVtb3ZlTWVtY3h0RmlsZShpbnQpOwor I2VuZGlmCQkJCQkJCS8qIE1DWFRfSCAqLwotLSAKMi4xOC4xCgo= --=_cee82612103ea33c80fbdd734cdb3e99--