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 1kLi9P-00020B-0D for pgsql-hackers@arkaria.postgresql.org; Fri, 25 Sep 2020 07:28:15 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1kLi9N-0004Nw-Tj for pgsql-hackers@arkaria.postgresql.org; Fri, 25 Sep 2020 07:28:13 +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 1kLi9N-0004No-Ja for pgsql-hackers@lists.postgresql.org; Fri, 25 Sep 2020 07:28:13 +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 1kLi9G-00057l-Ib for pgsql-hackers@postgresql.org; Fri, 25 Sep 2020 07:28:13 +0000 Received: from oss.nttdata.com (localhost [127.0.0.1]) by oss.nttdata.com (Postfix) with ESMTP id F2D9C62311; Fri, 25 Sep 2020 16:28:02 +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="=_f2a319592cec4289249bc566b14b1b9d" Date: Fri, 25 Sep 2020 16:28:02 +0900 From: torikoshia To: Michael Paquier , tomas.vondra@2ndquadrant.com, Kasahara Tatsuhito Cc: Tom Lane , PostgreSQL-development Subject: Re: Get memory contexts of an arbitrary backend process In-Reply-To: <20200924040149.GH28585@paquier.xyz> References: <0271f440ac77f2a4180e0e56ebd944d1@oss.nttdata.com> <4a39f13d6496ea4686bbac4254154fe8@oss.nttdata.com> <640735.1599154807@sss.pgh.pa.us> <20200904124619.k2dgu7dty7awb6cu@development> <8865138e1c262d54e8a67a71b4a538aa@oss.nttdata.com> <20200924040149.GH28585@paquier.xyz> 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: Precedence: bulk --=_f2a319592cec4289249bc566b14b1b9d Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed Hi, Thanks for all your comments, I updated the patch. On Tue, Sep 1, 2020 at 12:03 AM Kasahara Tatsuhito wrote: > - How about managing the status of signal send/receive and dump > operations on a shared hash or others ? > Sending and receiving signals, dumping memory information, and > referencing dump information all work asynchronously. > Therefore, it would be good to have management information to > check > the status of each process. > A simple idea is that .. > - send a signal to dump to a PID, it first record following > information into the shared hash. > pid (specified pid) > loc (dump location, currently might be ASAP) > recv (did the pid process receive a signal? first false) > dumped (did the pid process dump a mem information? first > false) > - specified process receive the signal, update the status in the > shared hash, then dumped at specified location. > - specified process finish dump mem information, update the > status > in the shared hash. I added a shared hash table consisted of minimal members mainly for managing whether the file is dumped or not. Some members like 'loc' seem useful in the future, but I haven't added them since it's not essential at this point. On 2020-09-01 10:54, Andres Freund wrote: >> CREATE VIEW pg_backend_memory_contexts AS >> - SELECT * FROM pg_get_backend_memory_contexts(); >> + SELECT * FROM pg_get_backend_memory_contexts(-1); > > -1 is odd. Why not use NULL or even 0? Changed it from -1 to NULL. >> + rc = fwrite(&name_len, sizeof(int), 1, fpout); >> + rc = fwrite(name, name_len, 1, fpout); >> + rc = fwrite(&idlen, sizeof(int), 1, fpout); >> + rc = fwrite(clipped_ident, idlen, 1, fpout); >> + rc = fwrite(&level, sizeof(int), 1, fpout); >> + rc = fwrite(&parent_len, sizeof(int), 1, fpout); >> + rc = fwrite(parent, parent_len, 1, fpout); >> + (void) rc; /* we'll check >> for error with ferror */ >> + >> + } > This format is not descriptive. How about serializing to json or > something? Or at least having field names? Added field names for each value. >> + while (true) >> + { >> + CHECK_FOR_INTERRUPTS(); >> + >> + pg_usleep(10000L); >> + > > Need better signalling back/forth here. Added a shared hash table that has a flag for managing whether the file is dumped or not. I modified it to use this flag. >> + /* >> + * Open a temp file to dump the current memory context. >> + */ >> + fpout = AllocateFile(tmpfile, PG_BINARY_W); >> + if (fpout == NULL) >> + { >> + ereport(LOG, >> + (errcode_for_file_access(), >> + errmsg("could not write temporary >> memory context file \"%s\": %m", >> + tmpfile))); >> + return; >> + } > > Probably should be opened with O_CREAT | O_TRUNC? AllocateFile() calls fopen() and AFAIU fopen() with mode "w" corresponds to open() with "O_WRONLY | O_CREAT | O_TRUNC". Do you mean I should not use fopen() here? On 2020-09-24 13:01, Michael Paquier wrote: > On Thu, Sep 10, 2020 at 09:11:21PM +0900, Kasahara Tatsuhito wrote: >> I think it's fine to have an interface to delete in an emergency, but >> I agree that >> users shouldn't be made aware of the existence or deletion of dump >> files, basically. > > Per the CF bot, the number of tests needs to be tweaked, because we > test each entry filtered out with is_deeply(), meaning that the number > of tests needs to be updated to reflect that if the filtered list is > changed: > t/010_pg_basebackup.pl ... 104/109 # Looks like you planned 109 tests > but ran 110. > t/010_pg_basebackup.pl ... Dubious, test returned 255 (wstat 65280, > 0xff00) > All 109 subtests passed > > Simple enough to fix. Incremented the number of tests. Any thoughts? Regards, -- Atsushi Torikoshi NTT DATA CORPORATION --=_f2a319592cec4289249bc566b14b1b9d Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=0002-Enabled-pg_get_backend_memory_contexts-to-collect-ar.patch Content-Disposition: attachment; filename=0002-Enabled-pg_get_backend_memory_contexts-to-collect-ar.patch; size=24808 RnJvbSA0ZDNmZjI1NGE2MzQ4OTVlOGMyM2M4M2JiNjNmNTE5YTE0Nzg1ZjA2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBdHN1c2hpIFRvcmlrb3NoaSA8dG9yaWtvc2hpYUBvc3MubnR0 ZGF0YS5jb20+CkRhdGU6IEZyaSwgMjUgU2VwIDIwMjAgMTE6MzQ6MzggKzA5MDAKU3ViamVjdDog W1BBVENIXSBFbmFibGVkIHBnX2dldF9iYWNrZW5kX21lbW9yeV9jb250ZXh0cygpIHRvIGNvbGxl Y3QKYXJiaXRyYXJ5IGJhY2tlbmQgcHJvY2VzcydzIG1lbW9yeSBjb250ZXh0cy4KClByZXZpc291 bHksIHBnX2dldF9iYWNrZW5kX21lbW9yeV9jb250ZXh0cygpIGNvdWxkIG9ubHkgZ2V0IHRoZQps b2NhbCBtZW1vcnkgY29udGV4dHMuIFRoaXMgcGF0Y2ggZW5hYmxlcyB0byBnZXQgbWVtb3J5IGNv bnRleHRzCm9mIHRoZSBhcmJpdHJhcnkgcHJvY2VzcyB3aGljaCBQSUQgaXMgc3BlY2lmaWVkIGJ5 IHRoZSBhcmd1bWVudC4KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMgICAg ICAgICAgICB8ICAgNyArCiBzcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92aWV3cy5zcWwgICAg ICAgICB8ICAgNCArLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vYmFzZWJhY2t1cC5jICAgICAg ICAgfCAgIDMgKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jICAgICAgICAgICAgICAg fCAgIDIgKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jICAgICAgICAgfCAg IDQgKwogc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jICAgICAgICAgICAgICAgICAgfCAgIDUg Kwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L21jeHRmdW5jcy5jICAgICAgICAgICAgfCAzODEgKysr KysrKysrKysrKysrKysrLQogc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMgICAgICAg ICAgICAgfCAgIDEgKwogc3JjL2Jpbi9pbml0ZGIvaW5pdGRiLmMgICAgICAgICAgICAgICAgICAg ICAgfCAgIDMgKy0KIHNyYy9iaW4vcGdfYmFzZWJhY2t1cC90LzAxMF9wZ19iYXNlYmFja3VwLnBs IHwgICA0ICstCiBzcmMvYmluL3BnX3Jld2luZC9maWxlbWFwLmMgICAgICAgICAgICAgICAgICB8 ICAgMyArCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgICAgICAgICAgICB8ICAx MCArLQogc3JjL2luY2x1ZGUvbWlzY2FkbWluLmggICAgICAgICAgICAgICAgICAgICAgfCAgIDEg Kwogc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFsLmggICAgICAgICAgICAgfCAgIDEgKwog c3JjL2luY2x1ZGUvdXRpbHMvbWN4dGZ1bmNzLmggICAgICAgICAgICAgICAgfCAgNDQgKysrCiBz cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dCAgICAgICAgICB8ICAgMiArLQogMTYg ZmlsZXMgY2hhbmdlZCwgNDQ4IGluc2VydGlvbnMoKyksIDI3IGRlbGV0aW9ucygtKQogY3JlYXRl IG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL3V0aWxzL21jeHRmdW5jcy5oCgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3Ry YW5zYW0veGxvZy5jCmluZGV4IDYxNzU0MzEyZTIuLmY2ZWFkODBkMmQgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv dHJhbnNhbS94bG9nLmMKQEAgLTc3LDYgKzc3LDcgQEAKICNpbmNsdWRlICJ1dGlscy9wc19zdGF0 dXMuaCIKICNpbmNsdWRlICJ1dGlscy9yZWxtYXBwZXIuaCIKICNpbmNsdWRlICJ1dGlscy9wZ19y dXNhZ2UuaCIKKyNpbmNsdWRlICJ1dGlscy9tY3h0ZnVuY3MuaCIKICNpbmNsdWRlICJ1dGlscy9z bmFwbWdyLmgiCiAjaW5jbHVkZSAidXRpbHMvdGltZXN0YW1wLmgiCiAKQEAgLTY5ODUsNiArNjk4 NiwxMiBAQCBTdGFydHVwWExPRyh2b2lkKQogCQkgKi8KIAkJcGdzdGF0X3Jlc2V0X2FsbCgpOwog CisJCS8qCisJCSAqIFJlc2V0IGR1bXBlZCBmaWxlcyBpbiBwZ19tZW11c2FnZSwgYmVjYXVzZSB0 YXJnZXQgcHJvY2Vzc2VzIGRvCisJCSAqIG5vdCBleGlzdCBhbnkgbW9yZS4KKwkJICovCisJCXBn X21lbXVzYWdlX3Jlc2V0KCk7CisKIAkJLyoKIAkJICogSWYgdGhlcmUgd2FzIGEgYmFja3VwIGxh YmVsIGZpbGUsIGl0J3MgZG9uZSBpdHMgam9iIGFuZCB0aGUgaW5mbwogCQkgKiBoYXMgbm93IGJl ZW4gcHJvcGFnYXRlZCBpbnRvIHBnX2NvbnRyb2wuICBXZSBtdXN0IGdldCByaWQgb2YgdGhlCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92aWV3cy5zcWwgYi9zcmMvYmFj a2VuZC9jYXRhbG9nL3N5c3RlbV92aWV3cy5zcWwKaW5kZXggZWQ0ZjNmMTQyZC4uYWRmZGUwZWY1 YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsCisrKyBi L3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbApAQCAtNTU1LDEwICs1NTUsMTAg QEAgUkVWT0tFIEFMTCBPTiBwZ19zaG1lbV9hbGxvY2F0aW9ucyBGUk9NIFBVQkxJQzsKIFJFVk9L RSBFWEVDVVRFIE9OIEZVTkNUSU9OIHBnX2dldF9zaG1lbV9hbGxvY2F0aW9ucygpIEZST00gUFVC TElDOwogCiBDUkVBVEUgVklFVyBwZ19iYWNrZW5kX21lbW9yeV9jb250ZXh0cyBBUwotICAgIFNF TEVDVCAqIEZST00gcGdfZ2V0X2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzKCk7CisgICAgU0VMRUNU ICogRlJPTSBwZ19nZXRfYmFja2VuZF9tZW1vcnlfY29udGV4dHMoTlVMTCk7CiAKIFJFVk9LRSBB TEwgT04gcGdfYmFja2VuZF9tZW1vcnlfY29udGV4dHMgRlJPTSBQVUJMSUM7Ci1SRVZPS0UgRVhF Q1VURSBPTiBGVU5DVElPTiBwZ19nZXRfYmFja2VuZF9tZW1vcnlfY29udGV4dHMoKSBGUk9NIFBV QkxJQzsKK1JFVk9LRSBFWEVDVVRFIE9OIEZVTkNUSU9OIHBnX2dldF9iYWNrZW5kX21lbW9yeV9j b250ZXh0cyBGUk9NIFBVQkxJQzsKIAogLS0gU3RhdGlzdGljcyB2aWV3cwogCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9iYXNlYmFja3VwLmMgYi9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9iYXNlYmFja3VwLmMKaW5kZXggYjg5ZGYwMWZhNy4uM2VkYjU5MTk1MiAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vYmFzZWJhY2t1cC5jCisrKyBiL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2Jhc2ViYWNrdXAuYwpAQCAtMTg0LDYgKzE4NCw5IEBAIHN0YXRpYyBj b25zdCBjaGFyICpjb25zdCBleGNsdWRlRGlyQ29udGVudHNbXSA9CiAJLyogQ29udGVudHMgemVy b2VkIG9uIHN0YXJ0dXAsIHNlZSBTdGFydHVwU1VCVFJBTlMoKS4gKi8KIAkicGdfc3VidHJhbnMi LAogCisJLyogU2tpcCBtZW1vcnkgY29udGV4dCBkdW1wZWQgZmlsZXMuICovCisJInBnX21lbXVz YWdlIiwKKwogCS8qIGVuZCBvZiBsaXN0ICovCiAJTlVMTAogfTsKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2ku YwppbmRleCA5NmMyYWFhYmJkLi45MmYyMWFkMmJmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9z dG9yYWdlL2lwYy9pcGNpLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jCkBA IC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jc2lnbmFsLmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9zaW52YWxhZHQuaCIKICNpbmNsdWRlICJzdG9yYWdlL3NwaW4uaCIKKyNpbmNs dWRlICJ1dGlscy9tY3h0ZnVuY3MuaCIKICNpbmNsdWRlICJ1dGlscy9zbmFwbWdyLmgiCiAKIC8q IEdVQ3MgKi8KQEAgLTI2Nyw2ICsyNjgsNyBAQCBDcmVhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhv cmVzKHZvaWQpCiAJQlRyZWVTaG1lbUluaXQoKTsKIAlTeW5jU2NhblNobWVtSW5pdCgpOwogCUFz eW5jU2htZW1Jbml0KCk7CisJTWN4dER1bXBTaG1lbUluaXQoKTsKIAogI2lmZGVmIEVYRUNfQkFD S0VORAogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMg Yi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMKaW5kZXggZmZlNjdhY2VhMS4u Y2U2YzY3ZDlmMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25h bC5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYwpAQCAtMjgsNiAr MjgsNyBAQAogI2luY2x1ZGUgInN0b3JhZ2Uvc2htZW0uaCIKICNpbmNsdWRlICJzdG9yYWdlL3Np bnZhbC5oIgogI2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKKyNpbmNsdWRlICJ1dGlscy9tY3h0 ZnVuY3MuaCIKIAogLyoKICAqIFRoZSBTSUdVU1IxIHNpZ25hbCBpcyBtdWx0aXBsZXhlZCB0byBz dXBwb3J0IHNpZ25hbGluZyBtdWx0aXBsZSBldmVudApAQCAtNTY3LDYgKzU2OCw5IEBAIHByb2Nz aWduYWxfc2lndXNyMV9oYW5kbGVyKFNJR05BTF9BUkdTKQogCWlmIChDaGVja1Byb2NTaWduYWwo UFJPQ1NJR19CQVJSSUVSKSkKIAkJSGFuZGxlUHJvY1NpZ25hbEJhcnJpZXJJbnRlcnJ1cHQoKTsK IAorCWlmIChDaGVja1Byb2NTaWduYWwoUFJPQ1NJR19EVU1QX01FTU9SWSkpCisJCUhhbmRsZVBy b2NTaWduYWxEdW1wTWVtb3J5KCk7CisKIAlpZiAoQ2hlY2tQcm9jU2lnbmFsKFBST0NTSUdfUkVD T1ZFUllfQ09ORkxJQ1RfREFUQUJBU0UpKQogCQlSZWNvdmVyeUNvbmZsaWN0SW50ZXJydXB0KFBS T0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfREFUQUJBU0UpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC90Y29wL3Bvc3RncmVzLmMgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKaW5kZXgg NDExY2ZhZGJmZi4uZThmNDE3NWM0OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdGNvcC9wb3N0 Z3Jlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYwpAQCAtNzUsNiArNzUsNyBA QAogI2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKICNpbmNsdWRlICJ0Y29wL3V0aWxpdHkuaCIK ICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlscy9tY3h0ZnVuY3Mu aCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3BzX3N0YXR1 cy5oIgogI2luY2x1ZGUgInV0aWxzL3NuYXBtZ3IuaCIKQEAgLTUzOSw2ICs1NDAsMTAgQEAgUHJv Y2Vzc0NsaWVudFJlYWRJbnRlcnJ1cHQoYm9vbCBibG9ja2VkKQogCQkvKiBQcm9jZXNzIG5vdGlm eSBpbnRlcnJ1cHRzLCBpZiBhbnkgKi8KIAkJaWYgKG5vdGlmeUludGVycnVwdFBlbmRpbmcpCiAJ CQlQcm9jZXNzTm90aWZ5SW50ZXJydXB0KCk7CisKKwkJLyogUHJvY2VzcyBtZW1vcnkgY29udGV4 dHMgZHVtcCBpbnRlcnJ1cHRzLCBpZiBhbnkgKi8KKwkJaWYgKFByb2NTaWduYWxEdW1wTWVtb3J5 UGVuZGluZykKKwkJCVByb2Nlc3NEdW1wTWVtb3J5SW50ZXJydXB0KCk7CiAJfQogCWVsc2UgaWYg KFByb2NEaWVQZW5kaW5nKQogCXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9t Y3h0ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9tY3h0ZnVuY3MuYwppbmRleCA1MGUx YjA3ZmYwLi5lYjJlZmFjMzA0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvbWN4 dGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L21jeHRmdW5jcy5jCkBAIC0xNSwz MCArMTUsNDUgQEAKIAogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKKyNpbmNsdWRlIDxzeXMvc3Rh dC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSAiY29tbW9uL2xvZ2dpbmcuaCIK ICNpbmNsdWRlICJmdW5jYXBpLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAi bWIvcGdfd2NoYXIuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2xhdGNoLmgiCisjaW5jbHVkZSAic3Rv cmFnZS9wcm9jLmgiCisjaW5jbHVkZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIKKyNpbmNsdWRlICJz dG9yYWdlL3Byb2NzaWduYWwuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3NobWVtLmgiCiAjaW5jbHVk ZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9tY3h0ZnVuY3MuaCIKKworLyog VGhlIG1heCBieXRlcyBmb3Igc2hvd2luZyBuYW1lcyBhbmQgaWRlbnRpZmllcnMgb2YgTWVtb3J5 Q29udGV4dC4gKi8KKyNkZWZpbmUgTUVNT1JZX0NPTlRFWFRfRElTUExBWV9TSVpFCTEwMjQKKwor LyogTnVtYmVyIG9mIGNvbHVtbnMgaW4gcGdfYmFja2VuZF9tZW1vcnlfY29udGV4dHMgdmlldyAq LworI2RlZmluZSBQR19HRVRfQkFDS0VORF9NRU1PUllfQ09OVEVYVFNfQ09MUwk5CisKKy8qIEhh c2ggZm9yIG1hbmFnaW5nIHRoZSBzdGF0dXMgb2YgbWVtb3J5IGNvbnRleHQgZHVtcC4gKi8KK3N0 YXRpYyBIVEFCICptY3h0ZHVtcEhhc2ggPSBOVUxMOwogCi0vKiAtLS0tLS0tLS0tCi0gKiBUaGUg bWF4IGJ5dGVzIGZvciBzaG93aW5nIGlkZW50aWZpZXJzIG9mIE1lbW9yeUNvbnRleHQuCi0gKiAt LS0tLS0tLS0tCi0gKi8KLSNkZWZpbmUgTUVNT1JZX0NPTlRFWFRfSURFTlRfRElTUExBWV9TSVpF CTEwMjQKIAogLyoKICAqIFB1dE1lbW9yeUNvbnRleHRzU3RhdHNUdXBsZVN0b3JlCiAgKgkJT25l IHJlY3Vyc2lvbiBsZXZlbCBmb3IgcGdfZ2V0X2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzLgorICoK KyAqIE5vdGU6IFdoZW4gZnBvdXQgaXMgbm90IE5VTEwsIGZlcnJvcigpIGNoZWNrIG11c3QgYmUg ZG9uZSBieSB0aGUgY2FsbGVyLgogICovCiBzdGF0aWMgdm9pZAogUHV0TWVtb3J5Q29udGV4dHNT dGF0c1R1cGxlU3RvcmUoVHVwbGVzdG9yZXN0YXRlICp0dXBzdG9yZSwKIAkJCQkJCQkJVHVwbGVE ZXNjIHR1cGRlc2MsIE1lbW9yeUNvbnRleHQgY29udGV4dCwKLQkJCQkJCQkJY29uc3QgY2hhciAq cGFyZW50LCBpbnQgbGV2ZWwpCisJCQkJCQkJCWNvbnN0IGNoYXIgKnBhcmVudCwgaW50IGxldmVs LCBGSUxFICpmcG91dCkKIHsKLSNkZWZpbmUgUEdfR0VUX0JBQ0tFTkRfTUVNT1JZX0NPTlRFWFRT X0NPTFMJOQotCiAJRGF0dW0JCXZhbHVlc1tQR19HRVRfQkFDS0VORF9NRU1PUllfQ09OVEVYVFNf Q09MU107CiAJYm9vbAkJbnVsbHNbUEdfR0VUX0JBQ0tFTkRfTUVNT1JZX0NPTlRFWFRTX0NPTFNd OworCWNoYXIJCWNsaXBwZWRfaWRlbnRbTUVNT1JZX0NPTlRFWFRfRElTUExBWV9TSVpFXTsKIAlN ZW1vcnlDb250ZXh0Q291bnRlcnMgc3RhdDsKIAlNZW1vcnlDb250ZXh0IGNoaWxkOwogCWNvbnN0 IGNoYXIgKm5hbWU7CkBAIC03NCwxNCArODksMTIgQEAgUHV0TWVtb3J5Q29udGV4dHNTdGF0c1R1 cGxlU3RvcmUoVHVwbGVzdG9yZXN0YXRlICp0dXBzdG9yZSwKIAlpZiAoaWRlbnQpCiAJewogCQlp bnQJCWlkbGVuID0gc3RybGVuKGlkZW50KTsKLQkJY2hhcgkJY2xpcHBlZF9pZGVudFtNRU1PUllf Q09OVEVYVF9JREVOVF9ESVNQTEFZX1NJWkVdOwotCiAJCS8qCiAJCSAqIFNvbWUgaWRlbnRpZmll cnMgc3VjaCBhcyBTUUwgcXVlcnkgc3RyaW5nIGNhbiBiZSB2ZXJ5IGxvbmcsCiAJCSAqIHRydW5j YXRlIG92ZXJzaXplIGlkZW50aWZpZXJzLgogCQkgKi8KLQkJaWYgKGlkbGVuID49IE1FTU9SWV9D T05URVhUX0lERU5UX0RJU1BMQVlfU0laRSkKLQkJCWlkbGVuID0gcGdfbWJjbGlwbGVuKGlkZW50 LCBpZGxlbiwgTUVNT1JZX0NPTlRFWFRfSURFTlRfRElTUExBWV9TSVpFIC0gMSk7CisJCWlmIChp ZGxlbiA+PSBNRU1PUllfQ09OVEVYVF9ESVNQTEFZX1NJWkUpCisJCQlpZGxlbiA9IHBnX21iY2xp cGxlbihpZGVudCwgaWRsZW4sIE1FTU9SWV9DT05URVhUX0RJU1BMQVlfU0laRSAtIDEpOwogCiAJ CW1lbWNweShjbGlwcGVkX2lkZW50LCBpZGVudCwgaWRsZW4pOwogCQljbGlwcGVkX2lkZW50W2lk bGVuXSA9ICdcMCc7CkBAIC0xMDEsMTIgKzExNCw0NCBAQCBQdXRNZW1vcnlDb250ZXh0c1N0YXRz VHVwbGVTdG9yZShUdXBsZXN0b3Jlc3RhdGUgKnR1cHN0b3JlLAogCXZhbHVlc1s2XSA9IEludDY0 R2V0RGF0dW0oc3RhdC5mcmVlc3BhY2UpOwogCXZhbHVlc1s3XSA9IEludDY0R2V0RGF0dW0oc3Rh dC5mcmVlY2h1bmtzKTsKIAl2YWx1ZXNbOF0gPSBJbnQ2NEdldERhdHVtKHN0YXQudG90YWxzcGFj ZSAtIHN0YXQuZnJlZXNwYWNlKTsKLQl0dXBsZXN0b3JlX3B1dHZhbHVlcyh0dXBzdG9yZSwgdHVw ZGVzYywgdmFsdWVzLCBudWxscyk7CisKKwlpZihmcG91dCA9PSBOVUxMKQorCQkvKgorCQkgKiBT aW5jZSBwZ19nZXRfYmFja2VuZF9tZW1vcnlfY29udGV4dHMoKSBpcyBjYWxsZWQgZnJvbSBsb2Nh bCBwcm9jZXNzLAorCQkgKiBzaW1wbHkgcHV0IHR1cGxlcy4KKwkJICovCisJCXR1cGxlc3RvcmVf cHV0dmFsdWVzKHR1cHN0b3JlLCB0dXBkZXNjLCB2YWx1ZXMsIG51bGxzKTsKKworCWVsc2UKKwl7 CisJCS8qCisJCSAqIFdyaXRlIG91dCB0aGUgY3VycmVudCBtZW1vcnkgY29udGV4dCBpbmZvcm1h dGlvbiBpbiB0aGUgZm9ybSBvZgorCQkgKiAia2V5OiB2YWx1ZSIgcGFpcnMgdG8gdGhlIGZpbGUg c3BlY2lmaWVkIGJ5IHRoZSBjYWxsZXIgb2YKKwkJICogcGdfZ2V0X2JhY2tlbmRfbWVtb3J5X2Nv bnRleHRzKCkuCisJCSAqLworCisJCS8qCisJCSAqIE1ha2UgZWFjaCBtZW1vcnkgY29udGV4dCBp bmZvcm1hdGlvbiBzdGFydHMgd2l0aCAnRCcuCisJCSAqIFRoaXMgaXMgY2hlY2tlZCBieSB0aGUg Y2FsbGVyIHdoZW4gcmVhZGluZyB0aGUgZmlsZS4KKwkJICovCisJCWZwdXRjKCdEJywgZnBvdXQp OworCisJCWZwcmludGYoZnBvdXQsCisJCQkibmFtZTogJXMsIGlkZW50OiAlcywgcGFyZW50OiAl cywgbGV2ZWw6ICVkLCB0b3RhbF9ieXRlczogJWx1LCB0b3RhbF9uYmxvY2tzOiAlbHUsIGZyZWVf Ynl0ZXM6ICVsdSwgZnJlZV9jaHVua3M6ICVsdSwgdXNlZF9ieXRlczogJWx1LFxuIiwKKwkJCW5h bWUsCisJCQlpZGVudCA/IGNsaXBwZWRfaWRlbnQgOiAibm9uZSIsCisJCQlwYXJlbnQgPyBwYXJl bnQgOiAibm9uZSIsIGxldmVsLAorCQkJc3RhdC50b3RhbHNwYWNlLAorCQkJc3RhdC5uYmxvY2tz LAorCQkJc3RhdC5mcmVlc3BhY2UsCisJCQlzdGF0LmZyZWVjaHVua3MsCisJCQlzdGF0LnRvdGFs c3BhY2UgLSBzdGF0LmZyZWVzcGFjZSk7CisJfQogCiAJZm9yIChjaGlsZCA9IGNvbnRleHQtPmZp cnN0Y2hpbGQ7IGNoaWxkICE9IE5VTEw7IGNoaWxkID0gY2hpbGQtPm5leHRjaGlsZCkKIAl7CiAJ CVB1dE1lbW9yeUNvbnRleHRzU3RhdHNUdXBsZVN0b3JlKHR1cHN0b3JlLCB0dXBkZXNjLAotCQkJ CQkJCQkgIGNoaWxkLCBuYW1lLCBsZXZlbCArIDEpOworCQkJCQkJCQkgIGNoaWxkLCBuYW1lLCBs ZXZlbCArIDEsIGZwb3V0KTsKIAl9CiB9CiAKQEAgLTExNyw2ICsxNjIsOCBAQCBQdXRNZW1vcnlD b250ZXh0c1N0YXRzVHVwbGVTdG9yZShUdXBsZXN0b3Jlc3RhdGUgKnR1cHN0b3JlLAogRGF0dW0K IHBnX2dldF9iYWNrZW5kX21lbW9yeV9jb250ZXh0cyhQR19GVU5DVElPTl9BUkdTKQogeworCWlu dAkJCWRzdF9waWQgPSBQR19BUkdJU05VTEwoMCkgPyAtMSA6IFBHX0dFVEFSR19JTlQzMigwKTsK KwogCVJldHVyblNldEluZm8gKnJzaW5mbyA9IChSZXR1cm5TZXRJbmZvICopIGZjaW5mby0+cmVz dWx0aW5mbzsKIAlUdXBsZURlc2MJdHVwZGVzYzsKIAlUdXBsZXN0b3Jlc3RhdGUgKnR1cHN0b3Jl OwpAQCAtMTQ3LDExICsxOTQsMzEzIEBAIHBnX2dldF9iYWNrZW5kX21lbW9yeV9jb250ZXh0cyhQ R19GVU5DVElPTl9BUkdTKQogCiAJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOwog Ci0JUHV0TWVtb3J5Q29udGV4dHNTdGF0c1R1cGxlU3RvcmUodHVwc3RvcmUsIHR1cGRlc2MsCi0J CQkJCQkJCVRvcE1lbW9yeUNvbnRleHQsIE5VTEwsIDApOworCS8qCisJICogSWYgdGhlIHRhcmdl dCBpcyBsb2NhbCBwcm9jZXNzLCBzaW1wbHkgbG9vayBpbnRvIG1lbW9yeSBjb250ZXh0cworCSAq IHJlY3Vyc2l2ZWx5LgorCSAqLworCWlmIChkc3RfcGlkID09IC0xIHx8IGRzdF9waWQgPT0gTXlQ cm9jUGlkKQorCQlQdXRNZW1vcnlDb250ZXh0c1N0YXRzVHVwbGVTdG9yZSh0dXBzdG9yZSwgdHVw ZGVzYywKKwkJCQkJCQkJVG9wTWVtb3J5Q29udGV4dCwgIiIsIDAsIE5VTEwpOworCisJLyoKKwkg KiBTZW5kIHNpZ25hbCBmb3IgZHVtcGluZyBtZW1vcnkgY29udGV4dHMgdG8gdGhlIHRhcmdldCBw cm9jZXNzLAorCSAqIGFuZCByZWFkIHRoZSBkdW1wZWQgZmlsZS4KKwkgKi8KKwllbHNlCisJewor CQlGSUxFCSAgIAkqZnBpbjsKKwkJY2hhcgkJdG1wZmlsZVtNQVhQR1BBVEhdOworCQljaGFyCQlk dW1wZmlsZVtNQVhQR1BBVEhdOworCQlib29sCQlmb3VuZDsKKwkJbWN4dGR1bXBFbnRyeSAgKmVu dHJ5OworCQlzdHJ1Y3QgCQlzdGF0IHN0YXRfdG1wOworCQlQR1BST0MJICAgCSpwcm9jOworCQlp bnQJCWZvcm1hdF9pZDsKKworCQlzbnByaW50Zih0bXBmaWxlLCBzaXplb2YodG1wZmlsZSksICIl cy8lZC50bXAiLCBQR19NRU1VU0FHRV9ESVIsIGRzdF9waWQpOworCQlzbnByaW50ZihkdW1wZmls ZSwgc2l6ZW9mKGR1bXBmaWxlKSwgIiVzLyVkIiwgUEdfTUVNVVNBR0VfRElSLCBkc3RfcGlkKTsK KworCQkvKgorCQkgKiBTaW5jZSB3ZSBhbGxvdyBvbmx5IG9uZSBzZXNzaW9uIGNhbiByZXF1ZXN0 IHRvIGR1bXAgIG1lbW9yeSBjb250ZXh0IGF0CisJCSAqIHRoZSBzYW1lIHRpbWUsIGNoZWNrIHdo ZXRoZXIgdGhlIGR1bXAgZmlsZXMgYWxyZWFkeSBleGlzdC4KKwkJICovCisJCXdoaWxlIChzdGF0 KGR1bXBmaWxlLCAmc3RhdF90bXApID09IDAgfHwgc3RhdCh0bXBmaWxlLCAmc3RhdF90bXApID09 IDApCisJCXsKKwkJCXBnX3VzbGVlcCgxMDAwMDAwTCk7CisJCX0KKworCQllbnRyeSA9IChtY3h0 ZHVtcEVudHJ5ICopIGhhc2hfc2VhcmNoKG1jeHRkdW1wSGFzaCwgJmRzdF9waWQsIEhBU0hfRU5U RVIsICZmb3VuZCk7CisKKwkJaWYgKCFmb3VuZCkKKwkJeworCQkJZW50cnktPmlzX2R1bXBlZCA9 IGZhbHNlOworCQkJZW50cnktPnNyY19waWQgPSBNeVByb2NQaWQ7CisJCX0KKworCQkvKiBDaGVj ayB3aGV0aGVyIHRoZSB0YXJnZXQgcHJvY2VzcyBpcyBQb3N0Z3JlU1FMIGJhY2tlbmQgcHJvY2Vz cyAqLworCQkvKiBUT0RPOiBDaGVjayBhbHNvIHdoZXRoZXIgYmFja2VuZCBvciBub3QuICovCisJ CXByb2MgPSBCYWNrZW5kUGlkR2V0UHJvYyhkc3RfcGlkKTsKKworCQlpZiAocHJvYyA9PSBOVUxM KQorCQl7CisJCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJCShlcnJtc2coIlBJRCAlZCBpcyBub3Qg YSBQb3N0Z3JlU1FMIHNlcnZlciBwcm9jZXNzIiwgZHN0X3BpZCkpKTsKKwkJCXJldHVybiAoRGF0 dW0pIDE7CisJCX0KKworCQlTZW5kUHJvY1NpZ25hbChkc3RfcGlkLCBQUk9DU0lHX0RVTVBfTUVN T1JZLCBJbnZhbGlkQmFja2VuZElkKTsKKworCQkvKiBXYWl0IHVudGlsIHRhcmdldCBwcm9jZXNz IGZpbmlzaGVkIGR1bXBpbmcgZmlsZS4gKi8KKwkJd2hpbGUgKCFlbnRyeS0+aXNfZHVtcGVkKQor CQl7CisJCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCQkJcGdfdXNsZWVwKDEwMDAwTCk7CisJ CX0KKworCQlpZiAoKGZwaW4gPSBBbGxvY2F0ZUZpbGUoZHVtcGZpbGUsICJyIikpID09IE5VTEwp CisJCXsKKwkJCWlmIChlcnJubyAhPSBFTk9FTlQpCisJCQkJZXJlcG9ydChMT0csIChlcnJjb2Rl X2Zvcl9maWxlX2FjY2VzcygpLAorCQkJCQkgZXJybXNnKCJjb3VsZCBub3Qgb3BlbiBtZW1vcnkg Y29udGV4dCBkdW1wIGZpbGUgXCIlc1wiOiAlbSIsCisJCQkJCQlkdW1wZmlsZSkpKTsKKwkJfQor CisJCS8qIFZlcmlmeSBpdCdzIG9mIHRoZSBleHBlY3RlZCBmb3JtYXQuICovCisJCWlmIChmcmVh ZCgmZm9ybWF0X2lkLCAxLCBzaXplb2YoZm9ybWF0X2lkKSwgZnBpbikgIT0gc2l6ZW9mKGZvcm1h dF9pZCkgfHwKKwkJCWZvcm1hdF9pZCAhPSBQR19NRU1DT05URVhUX0ZJTEVfRk9STUFUX0lEKQor CQl7CisJCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJCShlcnJtc2coImNvcnJ1cHRlZCBtZW1vcnkg Y29udGV4dCBkdW1wIGZpbGUgXCIlc1wiIiwgZHVtcGZpbGUpKSk7CisJCQlnb3RvIGRvbmU7CisJ CX0KKworCQl3aGlsZSAodHJ1ZSkKKwkJeworCQkJRGF0dW0JCXZhbHVlc1tQR19HRVRfQkFDS0VO RF9NRU1PUllfQ09OVEVYVFNfQ09MU107CisJCQlib29sCQludWxsc1tQR19HRVRfQkFDS0VORF9N RU1PUllfQ09OVEVYVFNfQ09MU107CisJCQljaGFyIAkJbmFtZVtNRU1PUllfQ09OVEVYVF9ESVNQ TEFZX1NJWkVdOworCQkJY2hhciAJCXBhcmVudFtNRU1PUllfQ09OVEVYVF9ESVNQTEFZX1NJWkVd OworCQkJY2hhciAJCWNsaXBwZWRfaWRlbnRbTUVNT1JZX0NPTlRFWFRfRElTUExBWV9TSVpFXTsK KwkJCWludCAJCWxldmVsOworCQkJU2l6ZQl0b3RhbF9ieXRlczsKKwkJCVNpemUJdG90YWxfbmJs b2NrczsKKwkJCVNpemUJZnJlZV9ieXRlczsKKwkJCVNpemUJZnJlZV9jaHVua3M7CisJCQlTaXpl CXVzZWRfYnl0ZXM7CisKKwkJCW1lbXNldCh2YWx1ZXMsIDAsIHNpemVvZih2YWx1ZXMpKTsKKwkJ CW1lbXNldChudWxscywgMCwgc2l6ZW9mKG51bGxzKSk7CisKKwkJCXN3aXRjaCAoZmdldGMoZnBp bikpCisJCQl7CisJCQkJLyogJ0QnCUEgbWVtb3J5IGNvbnRleHQgaW5mb3JtYXRpb24gZm9sbG93 cy4gKi8KKwkJCQljYXNlICdEJzoKKwkJCQkJaWYgKGZzY2FuZihmcGluLCAibmFtZTogJTEwMjNb XixdLCBpZGVudDogJTEwMjNbXixdLCBwYXJlbnQ6ICUxMDIzW14sXSwgbGV2ZWw6ICVkLCB0b3Rh bF9ieXRlczogJWx1LCB0b3RhbF9uYmxvY2tzOiAlbHUsIGZyZWVfYnl0ZXM6ICVsdSwgZnJlZV9j aHVua3M6ICVsdSwgdXNlZF9ieXRlczogJWx1LFxuIiwKKwkJCQkJCW5hbWUsIGNsaXBwZWRfaWRl bnQsIHBhcmVudCwgJmxldmVsLCAmdG90YWxfYnl0ZXMsICZ0b3RhbF9uYmxvY2tzLAorCQkJCQkJ CSZmcmVlX2J5dGVzLCAmZnJlZV9jaHVua3MsICZ1c2VkX2J5dGVzKQorCQkJCQkJIT0gUEdfR0VU X0JBQ0tFTkRfTUVNT1JZX0NPTlRFWFRTX0NPTFMpCisJCQkJCXsKKwkJCQkJCWVyZXBvcnQoV0FS TklORywKKwkJCQkJCQkoZXJybXNnKCJjb3JydXB0ZWQgbWVtb3J5IGNvbnRleHQgZHVtcCBmaWxl IFwiJXNcIiIsCisJCQkJCQkJCWR1bXBmaWxlKSkpOworCQkJCQkJZ290byBkb25lOworCQkJCQl9 CisKKwkJCQkJdmFsdWVzWzBdID0gQ1N0cmluZ0dldFRleHREYXR1bShuYW1lKTsKKworCQkJCQlp ZiAoc3RyY21wKGNsaXBwZWRfaWRlbnQsICJub25lIikpCisJCQkJCQl2YWx1ZXNbMV0gPSBDU3Ry aW5nR2V0VGV4dERhdHVtKGNsaXBwZWRfaWRlbnQpOworCQkJCQllbHNlCisJCQkJCQludWxsc1sx XSA9IHRydWU7CisKKwkJCQkJaWYgKHN0cmNtcChwYXJlbnQsICJub25lIikpCisJCQkJCQl2YWx1 ZXNbMl0gPSBDU3RyaW5nR2V0VGV4dERhdHVtKHBhcmVudCk7CisJCQkJCWVsc2UKKwkJCQkJCW51 bGxzWzJdID0gdHJ1ZTsKKworCQkJCQl2YWx1ZXNbM10gPSBJbnQzMkdldERhdHVtKGxldmVsKTsK KwkJCQkJdmFsdWVzWzRdID0gSW50NjRHZXREYXR1bSh0b3RhbF9ieXRlcyk7CisJCQkJCXZhbHVl c1s1XSA9IEludDY0R2V0RGF0dW0odG90YWxfbmJsb2Nrcyk7CisJCQkJCXZhbHVlc1s2XSA9IElu dDY0R2V0RGF0dW0oZnJlZV9ieXRlcyk7CisJCQkJCXZhbHVlc1s3XSA9IEludDY0R2V0RGF0dW0o ZnJlZV9jaHVua3MpOworCQkJCQl2YWx1ZXNbOF0gPSBJbnQ2NEdldERhdHVtKHVzZWRfYnl0ZXMp OworCisJCQkJCXR1cGxlc3RvcmVfcHV0dmFsdWVzKHR1cHN0b3JlLCB0dXBkZXNjLCB2YWx1ZXMs IG51bGxzKTsKKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlICdFJzoKKwkJCQkJZ290byBkb25lOwor CisJCQkJZGVmYXVsdDoKKwkJCQkJZXJlcG9ydChXQVJOSU5HLAorCQkJCQkJCShlcnJtc2coImNv cnJ1cHRlZCBtZW1vcnkgY29udGV4dCBkdW1wIGZpbGUgXCIlc1wiIiwKKwkJCQkJCQkJZHVtcGZp bGUpKSk7CisJCQkJCWdvdG8gZG9uZTsKKwkJCX0KKwkJfQorZG9uZToKKwkJRnJlZUZpbGUoZnBp bik7CisJCXVubGluayhkdW1wZmlsZSk7CisKKwkJaWYgKGhhc2hfc2VhcmNoKG1jeHRkdW1wSGFz aCwgJmRzdF9waWQsIEhBU0hfUkVNT1ZFLCBOVUxMKSA9PSBOVUxMKQorCQkJZWxvZyhFUlJPUiwg Imhhc2ggdGFibGUgY29ycnVwdGVkIik7CisJCWVsc2UKKwkJCWVsb2coSU5GTywgInN1Y2Nlc3Nl ZCBkZWxldGluZyBoYXNoIGVudHJ5Iik7CisJfQogCiAJLyogY2xlYW4gdXAgYW5kIHJldHVybiB0 aGUgdHVwbGVzdG9yZSAqLwogCXR1cGxlc3RvcmVfZG9uZXN0b3JpbmcodHVwc3RvcmUpOwogCiAJ cmV0dXJuIChEYXR1bSkgMDsKIH0KKworLyoKKyAqIGR1bXBfbWVtb3J5X2NvbnRleHRzCisgKiAJ CUR1bXBpbmcgbG9jYWwgbWVtb3J5IGNvbnRleHRzIHRvIGEgZmlsZS4KKyAqIAkJVGhpcyBmdW5j dGlvbiBkb2VzIG5vdCBkZWxldGUgZHVtcGVkIGZpbGUsIGFzIGl0IGlzIGludGVuZGVkIHRvIGJl IHJlYWQKKyAqIAkJYnkgYW5vdGhlciBwcm9jZXNzLgorICovCitzdGF0aWMgdm9pZAorZHVtcF9t ZW1vcnlfY29udGV4dHModm9pZCkKK3sKKwlGSUxFCQkqZnBvdXQ7CisJY2hhcgkJdG1wZmlsZVtN QVhQR1BBVEhdOworCWNoYXIJCWR1bXBmaWxlW01BWFBHUEFUSF07CisJbWN4dGR1bXBFbnRyeQkq ZW50cnk7CisJaW50CQlmb3JtYXRfaWQ7CisKKwlzbnByaW50Zih0bXBmaWxlLCBzaXplb2YodG1w ZmlsZSksICIlcy8lZC50bXAiLCBQR19NRU1VU0FHRV9ESVIsIE15UHJvY1BpZCk7CisJc25wcmlu dGYoZHVtcGZpbGUsIHNpemVvZihkdW1wZmlsZSksICIlcy8lZCIsIFBHX01FTVVTQUdFX0RJUiwg TXlQcm9jUGlkKTsKKworCWVudHJ5ID0gKG1jeHRkdW1wRW50cnkgKikgaGFzaF9zZWFyY2gobWN4 dGR1bXBIYXNoLCAmTXlQcm9jUGlkLCBIQVNIX0ZJTkQsIE5VTEwpOworCisJQXNzZXJ0KGVudHJ5 KTsKKworCWZwb3V0ID0gQWxsb2NhdGVGaWxlKHRtcGZpbGUsICJ3Iik7CisKKwlpZiAoZnBvdXQg PT0gTlVMTCkKKwl7CisJCWVyZXBvcnQoTE9HLAorCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2Vz cygpLAorCQkJCSBlcnJtc2coImNvdWxkIG5vdCB3cml0ZSB0ZW1wb3JhcnkgbWVtb3J5IGNvbnRl eHQgZmlsZSBcIiVzXCI6ICVtIiwKKwkJCQkJCXRtcGZpbGUpKSk7CisJCXJldHVybjsKKwl9CisK Kwlmb3JtYXRfaWQgPSBQR19NRU1DT05URVhUX0ZJTEVfRk9STUFUX0lEOworCWZ3cml0ZSgmZm9y bWF0X2lkLCBzaXplb2YoZm9ybWF0X2lkKSwgMSwgZnBvdXQpOworCisJLyogTG9vayBpbnRvIGVh Y2ggbWVtb3J5IGNvbnRleHQgZnJvbSBUb3BNZW1vcnlDb250ZXh0IHJlY3Vyc2l2ZWx5LiAqLwor CVB1dE1lbW9yeUNvbnRleHRzU3RhdHNUdXBsZVN0b3JlKE5VTEwsIE5VTEwsCisJCQkJCQkJVG9w TWVtb3J5Q29udGV4dCwgTlVMTCwgMCwgZnBvdXQpOworCisJLyogTm8gbW9yZSBvdXRwdXQgdG8g YmUgZG9uZS4gQ2xvc2UgdGhlIHRtcCBmaWxlIGFuZCByZW5hbWUgaXQuICovCisJZnB1dGMoJ0Un LCBmcG91dCk7CisKKwlpZiAoZmVycm9yKGZwb3V0KSkKKwl7CisJCWVyZXBvcnQoTE9HLAorCQkJ CShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAorCQkJCSBlcnJtc2coImNvdWxkIG5vdCB3cml0 ZSB0ZW1wb3JhcnkgbWVtb3J5IGNvbnRleHQgZHVtcCBmaWxlIFwiJXNcIjogJW0iLAorCQkJCQkJ dG1wZmlsZSkpKTsKKwkJRnJlZUZpbGUoZnBvdXQpOworCQl1bmxpbmsodG1wZmlsZSk7CisJfQor CWVsc2UgaWYgKEZyZWVGaWxlKGZwb3V0KSA8IDApCisJeworCQllcmVwb3J0KExPRywKKwkJCQko ZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKKwkJCQkgZXJybXNnKCJjb3VsZCBub3QgY2xvc2Ug dGVtcG9yYXJ5IG1lbW9yeSBjb250ZXh0IGR1bXAgZmlsZSBcIiVzXCI6ICVtIiwKKwkJCQkJCXRt cGZpbGUpKSk7CisJCXVubGluayh0bXBmaWxlKTsKKwl9CisJZWxzZSBpZiAocmVuYW1lKHRtcGZp bGUsIGR1bXBmaWxlKSA8IDApCisJeworCQllcmVwb3J0KExPRywKKwkJCQkoZXJyY29kZV9mb3Jf ZmlsZV9hY2Nlc3MoKSwKKwkJCQkgZXJybXNnKCJjb3VsZCBub3QgcmVuYW1lIGR1bXAgZmlsZSBc IiVzXCIgdG8gXCIlc1wiOiAlbSIsCisJCQkJCQl0bXBmaWxlLCBkdW1wZmlsZSkpKTsKKwkJdW5s aW5rKHRtcGZpbGUpOworCX0KKworCWVudHJ5LT5pc19kdW1wZWQgPSB0cnVlOworfQorCisvKgor ICogUHJvY2Vzc0R1bXBNZW1vcnlJbnRlcnJ1cHQKKyAqCQlUaGUgcG9ydGlvbiBvZiBtZW1vcnkg Y29udGV4dCBkdW1wIGludGVycnVwdCBoYW5kbGluZyB0aGF0IHJ1bnMKKyAqCQlvdXRzaWRlIG9m IHRoZSBzaWduYWwgaGFuZGxlci4KKyAqLwordm9pZAorUHJvY2Vzc0R1bXBNZW1vcnlJbnRlcnJ1 cHQodm9pZCkKK3sKKwlQcm9jU2lnbmFsRHVtcE1lbW9yeVBlbmRpbmcgPSBmYWxzZTsKKwlkdW1w X21lbW9yeV9jb250ZXh0cygpOworfQorCisvKgorICogSGFuZGxlUHJvY1NpZ25hbER1bXBNZW1v cnkKKyAqIAkJSGFuZGxlIHJlY2VpcHQgb2YgYW4gaW50ZXJydXB0IGluZGljYXRpbmcgYSBtZW1v cnkgY29udGV4dCBkdW1wLgorICoJCVNpZ25hbCBoYW5kbGVyIHBvcnRpb24gb2YgaW50ZXJydXB0 IGhhbmRsaW5nLgorICovCit2b2lkCitIYW5kbGVQcm9jU2lnbmFsRHVtcE1lbW9yeSh2b2lkKQor eworCVByb2NTaWduYWxEdW1wTWVtb3J5UGVuZGluZyA9IHRydWU7CisKKwkvKiBtYWtlIHN1cmUg dGhlIGV2ZW50IGlzIHByb2Nlc3NlZCBpbiBkdWUgY291cnNlICovCisJU2V0TGF0Y2goTXlMYXRj aCk7Cit9CisKKy8qCisgKiBNY3h0RHVtcFNobWVtSW5pdAorICogCQlJbml0aWFsaXplIG1jeHRk dW1wIGhhc2ggdGFibGUKKyAqLwordm9pZAorTWN4dER1bXBTaG1lbUluaXQodm9pZCkKK3sKKwlI QVNIQ1RMCQlpbmZvOworCisJTWVtU2V0KCZpbmZvLCAwLCBzaXplb2YoaW5mbykpOworCWluZm8u a2V5c2l6ZSA9IHNpemVvZihwaWRfdCk7CisJaW5mby5lbnRyeXNpemUgPSBzaXplb2YobWN4dGR1 bXBFbnRyeSk7CisKKwltY3h0ZHVtcEhhc2ggPSBTaG1lbUluaXRIYXNoKCJtY3h0ZHVtcCBoYXNo IiwKKwkJCQkJCQkJICAgU0hNRU1fTUVNQ09OVEVYVF9TSVpFLAorCQkJCQkJCQkgICBTSE1FTV9N RU1DT05URVhUX1NJWkUsCisJCQkJCQkJCSAgICZpbmZvLAorCQkJCQkJCQkgICBIQVNIX0VMRU0g fCBIQVNIX0JMT0JTKTsKK30KKworLyoKKyAqIHBnX21lbXVzYWdlX3Jlc2V0CisgKgkgCVJlbW92 ZSB0aGUgbWVtb3J5IGNvbnRleHQgZHVtcCBmaWxlcy4KKyAqLwordm9pZAorcGdfbWVtdXNhZ2Vf cmVzZXQodm9pZCkKK3sKKwlESVIJCSpkaXI7CisJc3RydWN0IAlkaXJlbnQgKmR1bXBmaWxlOwor CisJZGlyID0gQWxsb2NhdGVEaXIoUEdfTUVNVVNBR0VfRElSKTsKKwl3aGlsZSAoKGR1bXBmaWxl ID0gUmVhZERpcihkaXIsIFBHX01FTVVTQUdFX0RJUikpICE9IE5VTEwpCisJeworCQljaGFyCQlk dW1wZmlsZXBhdGhbMzJdOworCisJCWlmIChzdHJjbXAoZHVtcGZpbGUtPmRfbmFtZSwgIi4iKSA9 PSAwIHx8IHN0cmNtcChkdW1wZmlsZS0+ZF9uYW1lLCAiLi4iKSA9PSAwKQorCQkJY29udGludWU7 CisKKwkJc3ByaW50ZihkdW1wZmlsZXBhdGgsICIlcy8lcyIsIFBHX01FTVVTQUdFX0RJUiwgZHVt cGZpbGUtPmRfbmFtZSk7CisKKwkJZXJlcG9ydChERUJVRzIsCisJCQkJKGVycm1zZygicmVtb3Zp bmcgZmlsZSBcIiVzXCIiLCBkdW1wZmlsZXBhdGgpKSk7CisKKwkJaWYgKHVubGluayhkdW1wZmls ZXBhdGgpIDwgMCkKKwkJeworCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGVfZm9yX2Zp bGVfYWNjZXNzKCksCisJCQkJCSBlcnJtc2coImNvdWxkIG5vdCByZW1vdmUgZmlsZSBcIiVzXCI6 ICVtIiwgZHVtcGZpbGVwYXRoKSkpOworCQl9CisJfQorCUZyZWVEaXIoZGlyKTsKK30KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jIGIvc3JjL2JhY2tlbmQvdXRp bHMvaW5pdC9nbG9iYWxzLmMKaW5kZXggNmFiODIxNjgzOS4uNDYzMzM3ZjY2MSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRp bHMvaW5pdC9nbG9iYWxzLmMKQEAgLTMzLDYgKzMzLDcgQEAgdm9sYXRpbGUgc2lnX2F0b21pY190 IFByb2NEaWVQZW5kaW5nID0gZmFsc2U7CiB2b2xhdGlsZSBzaWdfYXRvbWljX3QgQ2xpZW50Q29u bmVjdGlvbkxvc3QgPSBmYWxzZTsKIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBJZGxlSW5UcmFuc2Fj dGlvblNlc3Npb25UaW1lb3V0UGVuZGluZyA9IGZhbHNlOwogdm9sYXRpbGUgc2lnX2F0b21pY190 IFByb2NTaWduYWxCYXJyaWVyUGVuZGluZyA9IGZhbHNlOwordm9sYXRpbGUgc2lnX2F0b21pY190 IFByb2NTaWduYWxEdW1wTWVtb3J5UGVuZGluZyA9IGZhbHNlOwogdm9sYXRpbGUgdWludDMyIElu dGVycnVwdEhvbGRvZmZDb3VudCA9IDA7CiB2b2xhdGlsZSB1aW50MzIgUXVlcnlDYW5jZWxIb2xk b2ZmQ291bnQgPSAwOwogdm9sYXRpbGUgdWludDMyIENyaXRTZWN0aW9uQ291bnQgPSAwOwpkaWZm IC0tZ2l0IGEvc3JjL2Jpbi9pbml0ZGIvaW5pdGRiLmMgYi9zcmMvYmluL2luaXRkYi9pbml0ZGIu YwppbmRleCAxMThiMjgyZDFjLi45NTNhN2M2ODJkIDEwMDY0NAotLS0gYS9zcmMvYmluL2luaXRk Yi9pbml0ZGIuYworKysgYi9zcmMvYmluL2luaXRkYi9pbml0ZGIuYwpAQCAtMjIxLDcgKzIyMSw4 IEBAIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzdWJkaXJzW10gPSB7CiAJInBnX3hhY3QiLAog CSJwZ19sb2dpY2FsIiwKIAkicGdfbG9naWNhbC9zbmFwc2hvdHMiLAotCSJwZ19sb2dpY2FsL21h cHBpbmdzIgorCSJwZ19sb2dpY2FsL21hcHBpbmdzIiwKKwkicGdfbWVtdXNhZ2UiCiB9OwogCiAK ZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC90LzAxMF9wZ19iYXNlYmFja3VwLnBs IGIvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3QvMDEwX3BnX2Jhc2ViYWNrdXAucGwKaW5kZXggZjY3 NGE3Yzk0ZS4uMzQwYTgwZmMxMSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3Qv MDEwX3BnX2Jhc2ViYWNrdXAucGwKKysrIGIvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3QvMDEwX3Bn X2Jhc2ViYWNrdXAucGwKQEAgLTYsNyArNiw3IEBAIHVzZSBGaWxlOjpCYXNlbmFtZSBxdyhiYXNl bmFtZSBkaXJuYW1lKTsKIHVzZSBGaWxlOjpQYXRoIHF3KHJtdHJlZSk7CiB1c2UgUG9zdGdyZXNO b2RlOwogdXNlIFRlc3RMaWI7Ci11c2UgVGVzdDo6TW9yZSB0ZXN0cyA9PiAxMDk7Cit1c2UgVGVz dDo6TW9yZSB0ZXN0cyA9PiAxMTA7CiAKIHByb2dyYW1faGVscF9vaygncGdfYmFzZWJhY2t1cCcp OwogcHJvZ3JhbV92ZXJzaW9uX29rKCdwZ19iYXNlYmFja3VwJyk7CkBAIC0xMjQsNyArMTI0LDcg QEAgaXNfZGVlcGx5KAogCiAjIENvbnRlbnRzIG9mIHRoZXNlIGRpcmVjdG9yaWVzIHNob3VsZCBu b3QgYmUgY29waWVkLgogZm9yZWFjaCBteSAkZGlybmFtZSAoCi0JcXcocGdfZHluc2htZW0gcGdf bm90aWZ5IHBnX3JlcGxzbG90IHBnX3NlcmlhbCBwZ19zbmFwc2hvdHMgcGdfc3RhdF90bXAgcGdf c3VidHJhbnMpCisJcXcocGdfZHluc2htZW0gcGdfbm90aWZ5IHBnX3JlcGxzbG90IHBnX3Nlcmlh bCBwZ19zbmFwc2hvdHMgcGdfc3RhdF90bXAgcGdfc3VidHJhbnMgcGdfbWVtdXNhZ2UpCiAgICkK IHsKIAlpc19kZWVwbHkoCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3Jld2luZC9maWxlbWFwLmMg Yi9zcmMvYmluL3BnX3Jld2luZC9maWxlbWFwLmMKaW5kZXggMWFiYzI1NzE3Ny4uZmYzMzM4ZTli ZSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19yZXdpbmQvZmlsZW1hcC5jCisrKyBiL3NyYy9iaW4v cGdfcmV3aW5kL2ZpbGVtYXAuYwpAQCAtODUsNiArODUsOSBAQCBzdGF0aWMgY29uc3QgY2hhciAq ZXhjbHVkZURpckNvbnRlbnRzW10gPQogCS8qIENvbnRlbnRzIHplcm9lZCBvbiBzdGFydHVwLCBz ZWUgU3RhcnR1cFNVQlRSQU5TKCkuICovCiAJInBnX3N1YnRyYW5zIiwKIAorCS8qIFNraXAgbWVt b3J5IGNvbnRleHQgZHVtcGVkIGZpbGVzLiAqLworCSJwZ19tZW11c2FnZSIsCisKIAkvKiBlbmQg b2YgbGlzdCAqLwogCU5VTEwKIH07CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3Bn X3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCBmNDhmNWZi NGQ5Li5lN2VlYjFlNWQ2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2Mu ZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTc4MTUsMTEgKzc4 MTUsMTEgQEAKIAogIyBtZW1vcnkgY29udGV4dCBvZiBsb2NhbCBiYWNrZW5kCiB7IG9pZCA9PiAn MjI4MicsIGRlc2NyID0+ICdpbmZvcm1hdGlvbiBhYm91dCBhbGwgbWVtb3J5IGNvbnRleHRzIG9m IGxvY2FsIGJhY2tlbmQnLAotICBwcm9uYW1lID0+ICdwZ19nZXRfYmFja2VuZF9tZW1vcnlfY29u dGV4dHMnLCBwcm9yb3dzID0+ICcxMDAnLCBwcm9yZXRzZXQgPT4gJ3QnLAotICBwcm92b2xhdGls ZSA9PiAndicsIHByb3BhcmFsbGVsID0+ICdyJywgcHJvcmV0dHlwZSA9PiAncmVjb3JkJywgcHJv YXJndHlwZXMgPT4gJycsCi0gIHByb2FsbGFyZ3R5cGVzID0+ICd7dGV4dCx0ZXh0LHRleHQsaW50 NCxpbnQ4LGludDgsaW50OCxpbnQ4LGludDh9JywKLSAgcHJvYXJnbW9kZXMgPT4gJ3tvLG8sbyxv LG8sbyxvLG8sb30nLAotICBwcm9hcmduYW1lcyA9PiAne25hbWUsIGlkZW50LCBwYXJlbnQsIGxl dmVsLCB0b3RhbF9ieXRlcywgdG90YWxfbmJsb2NrcywgZnJlZV9ieXRlcywgZnJlZV9jaHVua3Ms IHVzZWRfYnl0ZXN9JywKKyAgcHJvbmFtZSA9PiAncGdfZ2V0X2JhY2tlbmRfbWVtb3J5X2NvbnRl eHRzJywgcHJvcm93cyA9PiAnMTAwJywgcHJvaXNzdHJpY3QgPT4gJ2YnLAorICBwcm9yZXRzZXQg PT4gJ3QnLCBwcm92b2xhdGlsZSA9PiAndicsIHByb3BhcmFsbGVsID0+ICdyJywgcHJvcmV0dHlw ZSA9PiAncmVjb3JkJywKKyAgcHJvYXJndHlwZXMgPT4gJ2ludDQnLCBwcm9hbGxhcmd0eXBlcyA9 PiAne2ludDQsdGV4dCx0ZXh0LHRleHQsaW50NCxpbnQ4LGludDgsaW50OCxpbnQ4LGludDh9JywK KyAgcHJvYXJnbW9kZXMgPT4gJ3tpLG8sbyxvLG8sbyxvLG8sbyxvfScsCisgIHByb2FyZ25hbWVz ID0+ICd7cGlkLCBuYW1lLCBpZGVudCwgcGFyZW50LCBsZXZlbCwgdG90YWxfYnl0ZXMsIHRvdGFs X25ibG9ja3MsIGZyZWVfYnl0ZXMsIGZyZWVfY2h1bmtzLCB1c2VkX2J5dGVzfScsCiAgIHByb3Ny YyA9PiAncGdfZ2V0X2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzJyB9LAogCiAjIG5vbi1wZXJzaXN0 ZW50IHNlcmllcyBnZW5lcmF0b3IKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5o IGIvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmgKaW5kZXggNzJlMzM1MjM5OC4uODEyMDMyYmIxNSAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmgKKysrIGIvc3JjL2luY2x1ZGUvbWlz Y2FkbWluLmgKQEAgLTgzLDYgKzgzLDcgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxlIHNp Z19hdG9taWNfdCBRdWVyeUNhbmNlbFBlbmRpbmc7CiBleHRlcm4gUEdETExJTVBPUlQgdm9sYXRp bGUgc2lnX2F0b21pY190IFByb2NEaWVQZW5kaW5nOwogZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0 aWxlIHNpZ19hdG9taWNfdCBJZGxlSW5UcmFuc2FjdGlvblNlc3Npb25UaW1lb3V0UGVuZGluZzsK IGV4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSBzaWdfYXRvbWljX3QgUHJvY1NpZ25hbEJhcnJp ZXJQZW5kaW5nOworZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBQcm9j U2lnbmFsRHVtcE1lbW9yeVBlbmRpbmc7CiAKIGV4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSBz aWdfYXRvbWljX3QgQ2xpZW50Q29ubmVjdGlvbkxvc3Q7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFs LmgKaW5kZXggNWNiMzk2OTdmMy4uNWRiOTJhOWE1MiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv c3RvcmFnZS9wcm9jc2lnbmFsLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFs LmgKQEAgLTM0LDYgKzM0LDcgQEAgdHlwZWRlZiBlbnVtCiAJUFJPQ1NJR19QQVJBTExFTF9NRVNT QUdFLAkvKiBtZXNzYWdlIGZyb20gY29vcGVyYXRpbmcgcGFyYWxsZWwgYmFja2VuZCAqLwogCVBS T0NTSUdfV0FMU05EX0lOSVRfU1RPUFBJTkcsCS8qIGFzayB3YWxzZW5kZXJzIHRvIHByZXBhcmUg Zm9yIHNodXRkb3duICAqLwogCVBST0NTSUdfQkFSUklFUiwJCQkvKiBnbG9iYWwgYmFycmllciBp bnRlcnJ1cHQgICovCisJUFJPQ1NJR19EVU1QX01FTU9SWSwJCS8qIHJlcXVlc3QgZHVtcGluZyBt ZW1vcnkgY29udGV4dCBpbnRlcnJ1cHQgKi8KIAogCS8qIFJlY292ZXJ5IGNvbmZsaWN0IHJlYXNv bnMgKi8KIAlQUk9DU0lHX1JFQ09WRVJZX0NPTkZMSUNUX0RBVEFCQVNFLApkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvdXRpbHMvbWN4dGZ1bmNzLmggYi9zcmMvaW5jbHVkZS91dGlscy9tY3h0ZnVu Y3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi43NWFmOTJhMmNmCi0t LSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvbWN4dGZ1bmNzLmgKQEAgLTAsMCAr MSw0NCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogbWN4dGZ1bmNzLmgKKyAqCSAgRGVj bGFyYXRpb25zIGZvciBzaG93aW5nIGJhY2tlbmQgbWVtb3J5IGNvbnRleHQuCisgKgorICogUG9y dGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjAsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3Bt ZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhl IFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJ ICBzcmMvYmFja2VuZC91dGlscy9tY3h0ZnVuY3MuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICovCisjaWZuZGVmIE1DWFRfSAorI2RlZmluZSBNQ1hUX0gKKworLyogRGlyZWN0b3J5IHRvIHN0 b3JlIGR1bXBlZCBtZW1vcnkgZmlsZXMgKi8KKyNkZWZpbmUgUEdfTUVNVVNBR0VfRElSCQkicGdf bWVtdXNhZ2UiCisKKyNkZWZpbmUgUEdfTUVNQ09OVEVYVF9GSUxFX0ZPUk1BVF9JRAkweDAxQjVC QzlFCisKKy8qCisgKiBTaXplIG9mIHRoZSBzaG1lbSBoYXNoIHRhYmxlIHNpemUobm90IGEgaGFy ZCBsaW1pdCkuCisgKgorICogQWx0aG91Z2ggaXQgbWF5IGJlIGJldHRlciB0byBpbmNyZWFzZSB0 aGlzIG51bWJlciBpbiB0aGUgZnV0dXJlIChlLmcuLAorICogYWRkaW5nIHZpZXdzIGZvciBhbGwg dGhlIGJhY2tlbmQgcHJvY2VzcyBvZiBtZW1vcnkgY29udGV4dHMpLCBjdXJyZW50bHkKKyAqIHNt YWxsIG51bWJlciB3b3VsZCBiZSBlbm91Z2guCisgKi8KKyNkZWZpbmUgU0hNRU1fTUVNQ09OVEVY VF9TSVpFCQkgNjQKKwordHlwZWRlZiBzdHJ1Y3QgbWN4dGR1bXBFbnRyeQoreworCXBpZF90CQlk c3RfcGlkOwkJLyogcGlkIG9mIHRoZSBzaWduYWwgcmVjZWl2ZXIgKi8KKwlwaWRfdAkJc3JjX3Bp ZDsJCS8qIHBpZCBvZiB0aGUgc2lnbmFsIHNlbmRlciAqLworCWJvb2wJCWlzX2R1bXBlZDsJCS8q IGlzIGR1bXBlZCB0byBhIGZpbGU/ICovCit9IG1jeHRkdW1wRW50cnk7CisKK2V4dGVybiB2b2lk IFByb2Nlc3NEdW1wTWVtb3J5SW50ZXJydXB0KHZvaWQpOworZXh0ZXJuIHZvaWQgSGFuZGxlUHJv Y1NpZ25hbER1bXBNZW1vcnkodm9pZCk7CitleHRlcm4gdm9pZCBNY3h0RHVtcFNobWVtSW5pdCh2 b2lkKTsKK2V4dGVybiB2b2lkIHBnX21lbXVzYWdlX3Jlc2V0KHZvaWQpOworCisjZW5kaWYJCQkJ CQkJLyogTUNYVF9IICovCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1 bGVzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVsZXMub3V0CmluZGV4IDJhMThk YzQyM2UuLmNhMWNiMGU3ODYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv cnVsZXMub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVsZXMub3V0CkBAIC0x MzMzLDcgKzEzMzMsNyBAQCBwZ19iYWNrZW5kX21lbW9yeV9jb250ZXh0c3wgU0VMRUNUIHBnX2dl dF9iYWNrZW5kX21lbW9yeV9jb250ZXh0cy5uYW1lLAogICAgIHBnX2dldF9iYWNrZW5kX21lbW9y eV9jb250ZXh0cy5mcmVlX2J5dGVzLAogICAgIHBnX2dldF9iYWNrZW5kX21lbW9yeV9jb250ZXh0 cy5mcmVlX2NodW5rcywKICAgICBwZ19nZXRfYmFja2VuZF9tZW1vcnlfY29udGV4dHMudXNlZF9i eXRlcwotICAgRlJPTSBwZ19nZXRfYmFja2VuZF9tZW1vcnlfY29udGV4dHMoKSBwZ19nZXRfYmFj a2VuZF9tZW1vcnlfY29udGV4dHMobmFtZSwgaWRlbnQsIHBhcmVudCwgbGV2ZWwsIHRvdGFsX2J5 dGVzLCB0b3RhbF9uYmxvY2tzLCBmcmVlX2J5dGVzLCBmcmVlX2NodW5rcywgdXNlZF9ieXRlcyk7 CisgICBGUk9NIHBnX2dldF9iYWNrZW5kX21lbW9yeV9jb250ZXh0cyhOVUxMOjppbnRlZ2VyKSBw Z19nZXRfYmFja2VuZF9tZW1vcnlfY29udGV4dHMobmFtZSwgaWRlbnQsIHBhcmVudCwgbGV2ZWws IHRvdGFsX2J5dGVzLCB0b3RhbF9uYmxvY2tzLCBmcmVlX2J5dGVzLCBmcmVlX2NodW5rcywgdXNl ZF9ieXRlcyk7CiBwZ19jb25maWd8IFNFTEVDVCBwZ19jb25maWcubmFtZSwKICAgICBwZ19jb25m aWcuc2V0dGluZwogICAgRlJPTSBwZ19jb25maWcoKSBwZ19jb25maWcobmFtZSwgc2V0dGluZyk7 Ci0tIAoyLjE4LjEKCg== --=_f2a319592cec4289249bc566b14b1b9d--