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 1lODlS-0003jC-MJ for pgsql-hackers@arkaria.postgresql.org; Mon, 22 Mar 2021 06:10:11 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1lODlQ-00078X-Kv for pgsql-hackers@arkaria.postgresql.org; Mon, 22 Mar 2021 06:10:08 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lODlP-00078Q-Sa for pgsql-hackers@lists.postgresql.org; Mon, 22 Mar 2021 06:10:08 +0000 Received: from oss.nttdata.com ([49.212.34.109]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lODlK-0004kX-HL for pgsql-hackers@postgresql.org; Mon, 22 Mar 2021 06:10:06 +0000 Received: from oss.nttdata.com (localhost [127.0.0.1]) by oss.nttdata.com (Postfix) with ESMTP id 8A0B1625A8; Mon, 22 Mar 2021 15:09:58 +0900 (JST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.102.3 at oss.nttdata.com MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_10100efbdd2f510a47f8fc12d3842d09" Date: Mon, 22 Mar 2021 15:09:58 +0900 From: torikoshia To: Fujii Masao Cc: PostgreSQL-development , Tom Lane , Georgios Kokolatos , Kasahara Tatsuhito , craig@2ndquadrant.com Subject: Re: Get memory contexts of an arbitrary backend process In-Reply-To: <49232304-1269-b2d4-c2ca-4b8683b29156@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> <28e1feb71b94ac9918830bc4a0c1844f@oss.nttdata.com> <9a59401241e9269254e70c8e0ef1cc7a@oss.nttdata.com> <4ae7b086a5b49fdfec7c1154d6fc7a40@oss.nttdata.com> <40c1a4b19ad03beacee2642a3cd61c14@oss.nttdata.com> <9a50371e15e741e295accabc72a41df1@oss.nttdata.com> <70ae4b79eb8b0dcf42161c80a00e3f22@oss.nttdata.com> <49232304-1269-b2d4-c2ca-4b8683b29156@oss.nttdata.com> Message-ID: <2322ae15a675ba13368491ced3ea5fb4@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: Archived-At: Precedence: bulk --=_10100efbdd2f510a47f8fc12d3842d09 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8; format=flowed On 2021-03-18 15:09, Fujii Masao wrote: Thanks for your comments! > On 2021/03/17 22:24, torikoshia wrote: >> I remade the patch and introduced a function >> pg_print_backend_memory_contexts(PID) which prints the memory contexts >> of >> the specified PID to elog. > > Thanks for the patch! > > >>   =# SELECT pg_print_backend_memory_contexts(450855); >> >>   ** log output ** >>   2021-03-17 15:21:01.942 JST [450855] LOG:  Printing memory contexts >> of PID 450855 >>   2021-03-17 15:21:01.942 JST [450855] LOG:  level: 0 >> TopMemoryContext: 68720 total in 5 blocks; 16312 free (15 chunks); >> 52408 used >>   2021-03-17 15:21:01.942 JST [450855] LOG:  level: 1 Prepared >> Queries: 65536 total in 4 blocks; 35088 free (14 chunks); 30448 used >>   2021-03-17 15:21:01.942 JST [450855] LOG:  level: 1 pgstat >> TabStatusArray lookup hash table: 8192 total in 1 blocks; 1408 free (0 >> chunks); 6784 used >>   ..(snip).. >>   2021-03-17 15:21:01.942 JST [450855] LOG:  level: 2 >> CachedPlanSource: 4096 total in 3 blocks; 680 free (0 chunks); 3416 >> used: PREPARE hoge_200 AS SELECT * FROM pgbench_accounts WHERE aid = >> 1111111111111111111111111111111111111... >>   2021-03-17 15:21:01.942 JST [450855] LOG:  level: 3 >> CachedPlanQuery: 4096 total in 3 blocks; 464 free (0 chunks); 3632 >> used >>   ..(snip).. >>   2021-03-17 15:21:01.945 JST [450855] LOG:  level: 1 Timezones: >> 104128 total in 2 blocks; 2584 free (0 chunks); 101544 used >>   2021-03-17 15:21:01.945 JST [450855] LOG:  level: 1 ErrorContext: >> 8192 total in 1 blocks; 7928 free (5 chunks); 264 used >>   2021-03-17 15:21:01.945 JST [450855] LOG:  Grand total: 2802080 >> bytes in 1399 blocks; 480568 free (178 chunks); 2321512 used >> >> >> As above, the output is almost the same as MemoryContextStatsPrint() >> except for the way of expression of the level. >> MemoryContextStatsPrint() uses indents, but >> pg_print_backend_memory_contexts() writes it as "level: %d". > > This format looks better to me. > > >> Since there was discussion about enlarging StringInfo may cause >> errors on OOM[1], this patch calls elog for each context. >> >> As with MemoryContextStatsPrint(), each context shows 100 >> children at most. >> I once thought it should be configurable, but something like >> pg_print_backend_memory_contexts(PID, num_children) needs to send >> the 'num_children' from requestor to dumper and it seems to require >> another infrastructure. >> Creating a new GUC for this seems overkill. >> If MemoryContextStatsPrint(), i.e. showing 100 children at most is >> enough, this hard limit may be acceptable. > > Can't this number be passed via shared memory? The attached patch uses static shared memory to pass the number. As documented, the current implementation allows that when multiple pg_print_backend_memory_contexts() called in succession or simultaneously, max_children can be the one of another pg_print_backend_memory_contexts(). I had tried to avoid this by adding some state information and using before_shmem_exit() in case of process termination for cleaning up the state information as in the patch I presented earlier, but since kill() returns success before the dumper called signal handler, it seemed there were times when we couldn't clean up the state. Since this happens only when multiple pg_print_backend_memory_contexts() are called and their specified number of children are different, and the effect is just the not intended number of children to print, it might be acceptable. Or it might be better to wait for some seconds if num_chilren on shared memory is not the initialized value(meaning some other process is requesting to print memory contexts). >> Only superusers can call pg_print_backend_memory_contexts(). > > + /* Only allow superusers to signal superuser-owned backends. */ > + if (superuser_arg(proc->roleId) && !superuser()) > > The patch seems to allow even non-superuser to request to print the > memory > contexts if the target backend is owned by non-superuser. Is this > intentional? > I think that only superuser should be allowed to execute > pg_print_backend_memory_contexts() whoever owns the target backend. > Because that function can cause lots of log messages. Thanks, it's not intentional, modified it. >> I'm going to add documentation and regression tests. Added them. Regards, --=_10100efbdd2f510a47f8fc12d3842d09 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v2-0001-add-memorycontext-elog-print.patch Content-Disposition: attachment; filename=v2-0001-add-memorycontext-elog-print.patch; size=27829 ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwgYi9kb2Mvc3JjL3NnbWwvZnVuYy5z Z21sCmluZGV4IDk0OTJhM2M2YjkuLmU4MzRiOTIzZTQgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dt bC9mdW5jLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbApAQCAtMjQ3ODEsNiArMjQ3 ODEsMzMgQEAgU0VMRUNUIGNvbGxhdGlvbiBmb3IgKCdmb28nIENPTExBVEUgImRlX0RFIik7CiAg ICAgICAgPC9wYXJhPjwvZW50cnk+CiAgICAgICA8L3Jvdz4KIAorICAgICAgPHJvdz4KKyAgICAg ICA8ZW50cnkgcm9sZT0iZnVuY190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iZnVuY19zaWduYXR1 cmUiPgorICAgICAgICA8aW5kZXh0ZXJtPgorICAgICAgICAgPHByaW1hcnk+cGdfcHJpbnRfYmFj a2VuZF9tZW1vcnlfY29udGV4dHM8L3ByaW1hcnk+CisgICAgICAgIDwvaW5kZXh0ZXJtPgorICAg ICAgICA8ZnVuY3Rpb24+cGdfcHJpbnRfYmFja2VuZF9tZW1vcnlfY29udGV4dHM8L2Z1bmN0aW9u PiAoCisgICAgICAgICAgPHBhcmFtZXRlcj5waWQ8L3BhcmFtZXRlcj4gPHR5cGU+aW50ZWdlcjwv dHlwZT4sCisgICAgICAgICAgPHBhcmFtZXRlcj5tYXhfY2hpbGRyZW48L3BhcmFtZXRlcj4gPHR5 cGU+aW50ZWdlcjwvdHlwZT4gKQorICAgICAgICA8cmV0dXJudmFsdWU+Ym9vbGVhbjwvcmV0dXJu dmFsdWU+CisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBQcmludHMgdGhl IG1lbW9yeSBjb250ZXh0cyB3aG9zZSBiYWNrZW5kIHByb2Nlc3MgaGFzIHRoZSBzcGVjaWZpZWQK KyAgICAgICAgcHJvY2VzcyBJRC4KKyAgICAgICAgPHBhcmFtZXRlcj5tYXhfY2hpbGRyZW48L3Bh cmFtZXRlcj4gbGltaXRzIHRoZSBtYXggbnVtYmVyIG9mIGNoaWxkcmVuCisgICAgICAgIHRvIHBy aW50IHBlciBvbmUgcGFyZW50IGNvbnRleHQuCisgICAgICAgIE5vdGUgdGhhdCB3aGVuIG11bHRp cGxlCisgICAgICAgIDxmdW5jdGlvbj5wZ19wcmludF9iYWNrZW5kX21lbW9yeV9jb250ZXh0czwv ZnVuY3Rpb24+IGNhbGxlZCBpbgorICAgICAgICBzdWNjZXNzaW9uIG9yIHNpbXVsdGFuZW91c2x5 LCA8cGFyYW1ldGVyPm1heF9jaGlsZHJlbjwvcGFyYW1ldGVyPiBjYW4KKyAgICAgICAgYmUgdGhl IG9uZSBvZiBhbm90aGVyCisgICAgICAgIDxmdW5jdGlvbj5wZ19wcmludF9iYWNrZW5kX21lbW9y eV9jb250ZXh0czwvZnVuY3Rpb24+LgorICAgICAgICBCYWNrdHJhY2Ugd2lsbCBiZSBwcmludGVk IGJhc2VkIG9uIHRoZSBsb2cgY29uZmlndXJhdGlvbiBzZXQuIFNlZQorICAgICAgICA8eHJlZiBs aW5rZW5kPSJydW50aW1lLWNvbmZpZy1sb2dnaW5nIi8+IGZvciBtb3JlIGluZm9ybWF0aW9uLgor ICAgICAgICBPbmx5IHN1cGVydXNlcnMgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbiBldmVuIHdoZW4g dGhlIHNwZWNpZmllZCBwcm9jZXNzCisgICAgICAgIGlzIG5vbi1zdXBlcnVzZXIgYmFja2VuZC4K KyAgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAgICAgIDwvcm93PgorCiAgICAgICA8cm93PgogICAg ICAgIDxlbnRyeSByb2xlPSJmdW5jX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJmdW5jX3NpZ25h dHVyZSI+CiAgICAgICAgIDxpbmRleHRlcm0+CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9y YWdlL2lwYy9pcGNpLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMKaW5kZXggM2U0 ZWM1M2E5Ny4uNzg1Mzc0NzE5ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMv aXBjaS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYwpAQCAtNDYsNiArNDYs NyBAQAogI2luY2x1ZGUgInN0b3JhZ2Uvc2ludmFsYWR0LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9z cGluLmgiCiAjaW5jbHVkZSAidXRpbHMvc25hcG1nci5oIgorI2luY2x1ZGUgInV0aWxzL21lbXV0 aWxzLmgiCiAKIC8qIEdVQ3MgKi8KIGludAkJCXNoYXJlZF9tZW1vcnlfdHlwZSA9IERFRkFVTFRf U0hBUkVEX01FTU9SWV9UWVBFOwpAQCAtMjY5LDYgKzI3MCw3IEBAIENyZWF0ZVNoYXJlZE1lbW9y eUFuZFNlbWFwaG9yZXModm9pZCkKIAlCVHJlZVNobWVtSW5pdCgpOwogCVN5bmNTY2FuU2htZW1J bml0KCk7CiAJQXN5bmNTaG1lbUluaXQoKTsKKwlNY3h0UHJpbnRTaG1lbUluaXQoKTsKIAogI2lm ZGVmIEVYRUNfQkFDS0VORAogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9w cm9jc2lnbmFsLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMKaW5kZXgg YzZhOGQ0NjExZS4uZGFiYjIwMjViMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9p cGMvcHJvY3NpZ25hbC5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwu YwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgInN0b3JhZ2Uvc2htZW0uaCIKICNpbmNsdWRl ICJzdG9yYWdlL3NpbnZhbC5oIgogI2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKKyNpbmNsdWRl ICJ1dGlscy9tZW11dGlscy5oIgogCiAvKgogICogVGhlIFNJR1VTUjEgc2lnbmFsIGlzIG11bHRp cGxleGVkIHRvIHN1cHBvcnQgc2lnbmFsaW5nIG11bHRpcGxlIGV2ZW50CkBAIC00NDAsNiArNDQx LDIwIEBAIEhhbmRsZVByb2NTaWduYWxCYXJyaWVySW50ZXJydXB0KHZvaWQpCiAJLyogbGF0Y2gg d2lsbCBiZSBzZXQgYnkgcHJvY3NpZ25hbF9zaWd1c3IxX2hhbmRsZXIgKi8KIH0KIAorLyoKKyAq IEhhbmRsZVByb2NTaWduYWxQcmludE1lbW9yeUNvbnRleHQKKyAqCisgKiBIYW5kbGUgcmVjZWlw dCBvZiBhbiBpbnRlcnJ1cHQgaW5kaWNhdGluZyBwcmludCBtZW1vcnkgY29udGV4dC4KKyAqIFNp Z25hbCBoYW5kbGVyIHBvcnRpb24gb2YgaW50ZXJydXB0IGhhbmRsaW5nLgorICovCitzdGF0aWMg dm9pZAorSGFuZGxlUHJvY1NpZ25hbFByaW50TWVtb3J5Q29udGV4dCh2b2lkKQoreworCUludGVy cnVwdFBlbmRpbmcgPSB0cnVlOworCVByaW50TWVtb3J5Q29udGV4dFBlbmRpbmcgPSB0cnVlOwor CS8qIGxhdGNoIHdpbGwgYmUgc2V0IGJ5IHByb2NzaWduYWxfc2lndXNyMV9oYW5kbGVyICovCit9 CisKIC8qCiAgKiBQZXJmb3JtIGdsb2JhbCBiYXJyaWVyIHJlbGF0ZWQgaW50ZXJydXB0IGNoZWNr aW5nLgogICoKQEAgLTU4MCw2ICs1OTUsMjkgQEAgUHJvY2Vzc1Byb2NTaWduYWxCYXJyaWVyKHZv aWQpCiAJQ29uZGl0aW9uVmFyaWFibGVCcm9hZGNhc3QoJk15UHJvY1NpZ25hbFNsb3QtPnBzc19i YXJyaWVyQ1YpOwogfQogCisvKgorICogUHJvY2Vzc1ByaW50TWVtb3J5Q29udGV4dEludGVycnVw dAorICoJCVRoZSBwb3J0aW9uIG9mIHByaW50IG1lbW9yeSBjb250ZXh0IGludGVycnVwdCBoYW5k bGluZyB0aGF0IHJ1bnMKKyAqCQlvdXRzaWRlIG9mIHRoZSBzaWduYWwgaGFuZGxlci4KKyAqLwor dm9pZAorUHJvY2Vzc1ByaW50TWVtb3J5Q29udGV4dEludGVycnVwdCh2b2lkKQoreworCWludAkJ bWF4X2NoaWxkcmVuOworCisJUHJpbnRNZW1vcnlDb250ZXh0UGVuZGluZyA9IGZhbHNlOworCisJ TFdMb2NrQWNxdWlyZShNY3h0UHJpbnRMb2NrLCBMV19TSEFSRUQpOworCW1heF9jaGlsZHJlbiA9 ICpNYXhDaGlsZHJlblBlckNvbnRleHQ7CisJTFdMb2NrUmVsZWFzZShNY3h0UHJpbnRMb2NrKTsK KworCWVyZXBvcnQoTE9HLAorCQkoZXJybXNnKCJQcmludGluZyBtZW1vcnkgY29udGV4dHMgb2Yg UElEICVkLiBNYXggbnVtYmVyIG9mIGNoaWxkcmVuIHBlciBjb250ZXh0IGlzICVkIiwgTXlQcm9j UGlkLCBtYXhfY2hpbGRyZW4pKSk7CisKKwlNZW1vcnlDb250ZXh0U3RhdHNEZXRhaWwoVG9wTWVt b3J5Q29udGV4dCwgbWF4X2NoaWxkcmVuLCBmYWxzZSk7Cit9CisKKwogLyoKICAqIElmIGl0IHR1 cm5zIG91dCB0aGF0IHdlIGNvdWxkbid0IGFic29yYiBvbmUgb3IgbW9yZSBiYXJyaWVyIHR5cGVz LCBlaXRoZXIKICAqIGJlY2F1c2UgdGhlIGJhcnJpZXItcHJvY2Vzc2luZyBmdW5jdGlvbnMgcmV0 dXJuZWQgZmFsc2Ugb3IgZHVlIHRvIGFuIGVycm9yLApAQCAtNjc1LDYgKzcxMyw5IEBAIHByb2Nz aWduYWxfc2lndXNyMV9oYW5kbGVyKFNJR05BTF9BUkdTKQogCWlmIChDaGVja1Byb2NTaWduYWwo UFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVF9CVUZGRVJQSU4pKQogCQlSZWNvdmVyeUNvbmZsaWN0 SW50ZXJydXB0KFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfQlVGRkVSUElOKTsKIAorCWlmIChD aGVja1Byb2NTaWduYWwoUFJPQ1NJR19QUklOVF9NRU1PUllfQ09OVEVYVCkpCisJCUhhbmRsZVBy b2NTaWduYWxQcmludE1lbW9yeUNvbnRleHQoKTsKKwogCVNldExhdGNoKE15TGF0Y2gpOwogCiAJ ZXJybm8gPSBzYXZlX2Vycm5vOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdy L2x3bG9ja25hbWVzLnR4dCBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9sd2xvY2tuYW1lcy50 eHQKaW5kZXggNmM3Y2Y2YzI5NS4uZjJhYTE4NTJiMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv c3RvcmFnZS9sbWdyL2x3bG9ja25hbWVzLnR4dAorKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xt Z3IvbHdsb2NrbmFtZXMudHh0CkBAIC01MywzICs1Myw0IEBAIFhhY3RUcnVuY2F0aW9uTG9jawkJ CQkJNDQKICMgNDUgd2FzIFhhY3RUcnVuY2F0aW9uTG9jayB1bnRpbCByZW1vdmFsIG9mIEJhY2tl bmRSYW5kb21Mb2NrCiBXcmFwTGltaXRzVmFjdXVtTG9jawkJCQk0NgogTm90aWZ5UXVldWVUYWls TG9jawkJCQkJNDcKK01jeHRQcmludExvY2sJCQkJCQk0OApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvdGNvcC9wb3N0Z3Jlcy5jIGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCmluZGV4IDJi MWI2ODEwOWYuLjZmZTQ3ZDEyMjkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdy ZXMuYworKysgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKQEAgLTMyOTUsNiArMzI5NSw5 IEBAIFByb2Nlc3NJbnRlcnJ1cHRzKHZvaWQpCiAKIAlpZiAoUGFyYWxsZWxNZXNzYWdlUGVuZGlu ZykKIAkJSGFuZGxlUGFyYWxsZWxNZXNzYWdlcygpOworCisJaWYgKFByaW50TWVtb3J5Q29udGV4 dFBlbmRpbmcpCisJCVByb2Nlc3NQcmludE1lbW9yeUNvbnRleHRJbnRlcnJ1cHQoKTsKIH0KIAog CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvbWN4dGZ1bmNzLmMgYi9zcmMvYmFj a2VuZC91dGlscy9hZHQvbWN4dGZ1bmNzLmMKaW5kZXggYzAyZmE0NzU1MC4uMDdhOTVkZDExNSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L21jeHRmdW5jcy5jCisrKyBiL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9tY3h0ZnVuY3MuYwpAQCAtNjEsNyArNjEsNyBAQCBQdXRNZW1vcnlD b250ZXh0c1N0YXRzVHVwbGVTdG9yZShUdXBsZXN0b3Jlc3RhdGUgKnR1cHN0b3JlLAogCiAJLyog RXhhbWluZSB0aGUgY29udGV4dCBpdHNlbGYgKi8KIAltZW1zZXQoJnN0YXQsIDAsIHNpemVvZihz dGF0KSk7Ci0JKCpjb250ZXh0LT5tZXRob2RzLT5zdGF0cykgKGNvbnRleHQsIE5VTEwsICh2b2lk ICopICZsZXZlbCwgJnN0YXQpOworCSgqY29udGV4dC0+bWV0aG9kcy0+c3RhdHMpIChjb250ZXh0 LCBOVUxMLCAodm9pZCAqKSAmbGV2ZWwsICZzdGF0LCB0cnVlKTsKIAogCW1lbXNldCh2YWx1ZXMs IDAsIHNpemVvZih2YWx1ZXMpKTsKIAltZW1zZXQobnVsbHMsIDAsIHNpemVvZihudWxscykpOwpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMgYi9zcmMvYmFja2Vu ZC91dGlscy9pbml0L2dsb2JhbHMuYwppbmRleCA3M2UwYTY3MmFlLi4zMmZlOTcxMzg2IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9pbml0L2dsb2JhbHMuYworKysgYi9zcmMvYmFja2Vu ZC91dGlscy9pbml0L2dsb2JhbHMuYwpAQCAtMzQsNiArMzQsNyBAQCB2b2xhdGlsZSBzaWdfYXRv bWljX3QgQ2xpZW50Q29ubmVjdGlvbkxvc3QgPSBmYWxzZTsKIHZvbGF0aWxlIHNpZ19hdG9taWNf dCBJZGxlSW5UcmFuc2FjdGlvblNlc3Npb25UaW1lb3V0UGVuZGluZyA9IGZhbHNlOwogdm9sYXRp bGUgc2lnX2F0b21pY190IElkbGVTZXNzaW9uVGltZW91dFBlbmRpbmcgPSBmYWxzZTsKIHZvbGF0 aWxlIHNpZ19hdG9taWNfdCBQcm9jU2lnbmFsQmFycmllclBlbmRpbmcgPSBmYWxzZTsKK3ZvbGF0 aWxlIHNpZ19hdG9taWNfdCBQcmludE1lbW9yeUNvbnRleHRQZW5kaW5nID0gZmFsc2U7CiB2b2xh dGlsZSB1aW50MzIgSW50ZXJydXB0SG9sZG9mZkNvdW50ID0gMDsKIHZvbGF0aWxlIHVpbnQzMiBR dWVyeUNhbmNlbEhvbGRvZmZDb3VudCA9IDA7CiB2b2xhdGlsZSB1aW50MzIgQ3JpdFNlY3Rpb25D b3VudCA9IDA7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9tbWdyL2FzZXQuYyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL21tZ3IvYXNldC5jCmluZGV4IGVjNmMxMzBkMGYuLjhlN2ZlMDlhMGYg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvYXNldC5jCisrKyBiL3NyYy9iYWNr ZW5kL3V0aWxzL21tZ3IvYXNldC5jCkBAIC0yNzIsNyArMjcyLDggQEAgc3RhdGljIFNpemUgQWxs b2NTZXRHZXRDaHVua1NwYWNlKE1lbW9yeUNvbnRleHQgY29udGV4dCwgdm9pZCAqcG9pbnRlcik7 CiBzdGF0aWMgYm9vbCBBbGxvY1NldElzRW1wdHkoTWVtb3J5Q29udGV4dCBjb250ZXh0KTsKIHN0 YXRpYyB2b2lkIEFsbG9jU2V0U3RhdHMoTWVtb3J5Q29udGV4dCBjb250ZXh0LAogCQkJCQkJICBN ZW1vcnlTdGF0c1ByaW50RnVuYyBwcmludGZ1bmMsIHZvaWQgKnBhc3N0aHJ1LAotCQkJCQkJICBN ZW1vcnlDb250ZXh0Q291bnRlcnMgKnRvdGFscyk7CisJCQkJCQkgIE1lbW9yeUNvbnRleHRDb3Vu dGVycyAqdG90YWxzLAorCQkJCQkJICBib29sIGlzX2RzdF9zdGRlcnIpOwogCiAjaWZkZWYgTUVN T1JZX0NPTlRFWFRfQ0hFQ0tJTkcKIHN0YXRpYyB2b2lkIEFsbG9jU2V0Q2hlY2soTWVtb3J5Q29u dGV4dCBjb250ZXh0KTsKQEAgLTEzMzYsMTEgKzEzMzcsMTIgQEAgQWxsb2NTZXRJc0VtcHR5KE1l bW9yeUNvbnRleHQgY29udGV4dCkKICAqIHByaW50ZnVuYzogaWYgbm90IE5VTEwsIHBhc3MgYSBo dW1hbi1yZWFkYWJsZSBzdGF0cyBzdHJpbmcgdG8gdGhpcy4KICAqIHBhc3N0aHJ1OiBwYXNzIHRo aXMgcG9pbnRlciB0aHJvdWdoIHRvIHByaW50ZnVuYy4KICAqIHRvdGFsczogaWYgbm90IE5VTEws IGFkZCBzdGF0cyBhYm91dCB0aGlzIGNvbnRleHQgaW50byAqdG90YWxzLgorICogaXNfZHN0X3N0 ZGVycjogaXMgdGhlIG91dHB1dCBzaG91bGQgYmUgc3RkZXJyIG9yIGVsb2cuCiAgKi8KIHN0YXRp YyB2b2lkCiBBbGxvY1NldFN0YXRzKE1lbW9yeUNvbnRleHQgY29udGV4dCwKIAkJCSAgTWVtb3J5 U3RhdHNQcmludEZ1bmMgcHJpbnRmdW5jLCB2b2lkICpwYXNzdGhydSwKLQkJCSAgTWVtb3J5Q29u dGV4dENvdW50ZXJzICp0b3RhbHMpCisJCQkgIE1lbW9yeUNvbnRleHRDb3VudGVycyAqdG90YWxz LCBib29sIGlzX2RzdF9zdGRlcnIpCiB7CiAJQWxsb2NTZXQJc2V0ID0gKEFsbG9jU2V0KSBjb250 ZXh0OwogCVNpemUJCW5ibG9ja3MgPSAwOwpAQCAtMTM3OSw3ICsxMzgxLDcgQEAgQWxsb2NTZXRT dGF0cyhNZW1vcnlDb250ZXh0IGNvbnRleHQsCiAJCQkJICIlenUgdG90YWwgaW4gJXpkIGJsb2Nr czsgJXp1IGZyZWUgKCV6ZCBjaHVua3MpOyAlenUgdXNlZCIsCiAJCQkJIHRvdGFsc3BhY2UsIG5i bG9ja3MsIGZyZWVzcGFjZSwgZnJlZWNodW5rcywKIAkJCQkgdG90YWxzcGFjZSAtIGZyZWVzcGFj ZSk7Ci0JCXByaW50ZnVuYyhjb250ZXh0LCBwYXNzdGhydSwgc3RhdHNfc3RyaW5nKTsKKwkJcHJp bnRmdW5jKGNvbnRleHQsIHBhc3N0aHJ1LCBzdGF0c19zdHJpbmcsIGlzX2RzdF9zdGRlcnIpOwog CX0KIAogCWlmICh0b3RhbHMpCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9tbWdyL2dl bmVyYXRpb24uYyBiL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvZ2VuZXJhdGlvbi5jCmluZGV4IDJi OTAwMzQ3NjQuLmIyODYzMDhhYTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3Iv Z2VuZXJhdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvZ2VuZXJhdGlvbi5jCkBA IC0xNTUsNyArMTU1LDggQEAgc3RhdGljIFNpemUgR2VuZXJhdGlvbkdldENodW5rU3BhY2UoTWVt b3J5Q29udGV4dCBjb250ZXh0LCB2b2lkICpwb2ludGVyKTsKIHN0YXRpYyBib29sIEdlbmVyYXRp b25Jc0VtcHR5KE1lbW9yeUNvbnRleHQgY29udGV4dCk7CiBzdGF0aWMgdm9pZCBHZW5lcmF0aW9u U3RhdHMoTWVtb3J5Q29udGV4dCBjb250ZXh0LAogCQkJCQkJCU1lbW9yeVN0YXRzUHJpbnRGdW5j IHByaW50ZnVuYywgdm9pZCAqcGFzc3RocnUsCi0JCQkJCQkJTWVtb3J5Q29udGV4dENvdW50ZXJz ICp0b3RhbHMpOworCQkJCQkJCU1lbW9yeUNvbnRleHRDb3VudGVycyAqdG90YWxzLAorCQkJCQkJ CWJvb2wgaXNfZHN0X3N0ZGVycik7CiAKICNpZmRlZiBNRU1PUllfQ09OVEVYVF9DSEVDS0lORwog c3RhdGljIHZvaWQgR2VuZXJhdGlvbkNoZWNrKE1lbW9yeUNvbnRleHQgY29udGV4dCk7CkBAIC02 NjUsNiArNjY2LDcgQEAgR2VuZXJhdGlvbklzRW1wdHkoTWVtb3J5Q29udGV4dCBjb250ZXh0KQog ICogcHJpbnRmdW5jOiBpZiBub3QgTlVMTCwgcGFzcyBhIGh1bWFuLXJlYWRhYmxlIHN0YXRzIHN0 cmluZyB0byB0aGlzLgogICogcGFzc3RocnU6IHBhc3MgdGhpcyBwb2ludGVyIHRocm91Z2ggdG8g cHJpbnRmdW5jLgogICogdG90YWxzOiBpZiBub3QgTlVMTCwgYWRkIHN0YXRzIGFib3V0IHRoaXMg Y29udGV4dCBpbnRvICp0b3RhbHMuCisgKiBpc19kc3Rfc3RkZXJyOiBpcyB0aGUgb3V0cHV0IHNo b3VsZCBiZSBzdGRlcnIgb3IgZWxvZy4KICAqCiAgKiBYWFggZnJlZXNwYWNlIG9ubHkgYWNjb3Vu dHMgZm9yIGVtcHR5IHNwYWNlIGF0IHRoZSBlbmQgb2YgdGhlIGJsb2NrLCBub3QKICAqIHNwYWNl IG9mIGZyZWVkIGNodW5rcyAod2hpY2ggaXMgdW5rbm93bikuCkBAIC02NzIsNyArNjc0LDcgQEAg R2VuZXJhdGlvbklzRW1wdHkoTWVtb3J5Q29udGV4dCBjb250ZXh0KQogc3RhdGljIHZvaWQKIEdl bmVyYXRpb25TdGF0cyhNZW1vcnlDb250ZXh0IGNvbnRleHQsCiAJCQkJTWVtb3J5U3RhdHNQcmlu dEZ1bmMgcHJpbnRmdW5jLCB2b2lkICpwYXNzdGhydSwKLQkJCQlNZW1vcnlDb250ZXh0Q291bnRl cnMgKnRvdGFscykKKwkJCQlNZW1vcnlDb250ZXh0Q291bnRlcnMgKnRvdGFscywgYm9vbCBpc19k c3Rfc3RkZXJyKQogewogCUdlbmVyYXRpb25Db250ZXh0ICpzZXQgPSAoR2VuZXJhdGlvbkNvbnRl eHQgKikgY29udGV4dDsKIAlTaXplCQluYmxvY2tzID0gMDsKQEAgLTcwNCw3ICs3MDYsNyBAQCBH ZW5lcmF0aW9uU3RhdHMoTWVtb3J5Q29udGV4dCBjb250ZXh0LAogCQkJCSAiJXp1IHRvdGFsIGlu ICV6ZCBibG9ja3MgKCV6ZCBjaHVua3MpOyAlenUgZnJlZSAoJXpkIGNodW5rcyk7ICV6dSB1c2Vk IiwKIAkJCQkgdG90YWxzcGFjZSwgbmJsb2NrcywgbmNodW5rcywgZnJlZXNwYWNlLAogCQkJCSBu ZnJlZWNodW5rcywgdG90YWxzcGFjZSAtIGZyZWVzcGFjZSk7Ci0JCXByaW50ZnVuYyhjb250ZXh0 LCBwYXNzdGhydSwgc3RhdHNfc3RyaW5nKTsKKwkJcHJpbnRmdW5jKGNvbnRleHQsIHBhc3N0aHJ1 LCBzdGF0c19zdHJpbmcsIGlzX2RzdF9zdGRlcnIpOwogCX0KIAogCWlmICh0b3RhbHMpCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9tbWdyL21jeHQuYyBiL3NyYy9iYWNrZW5kL3V0aWxz L21tZ3IvbWN4dC5jCmluZGV4IDg0NDcyYjkxNTguLjUzODljZjQ1MDcgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3V0aWxzL21tZ3IvbWN4dC5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3Iv bWN4dC5jCkBAIC0yMyw2ICsyMywxMCBAQAogCiAjaW5jbHVkZSAibWIvcGdfd2NoYXIuaCIKICNp bmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKKyNpbmNsdWRl ICJzdG9yYWdlL3Byb2NhcnJheS5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcHJvY3NpZ25hbC5oIgor I2luY2x1ZGUgInV0aWxzL2ZtZ3Jwcm90b3MuaCIKICNpbmNsdWRlICJ1dGlscy9tZW1kZWJ1Zy5o IgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAKQEAgLTM3LDYgKzQxLDEyIEBACiAgKi8K IE1lbW9yeUNvbnRleHQgQ3VycmVudE1lbW9yeUNvbnRleHQgPSBOVUxMOwogCisvKgorICogTWF4 Q2hpbGRyZW5QZXJDb250ZXh0CisgKiAJCU1heCBudW1iZXIgb2YgY2hpbGRyZW4gdG8gcHJpbnQg cGVyIG9uZSBwYXJlbnQgY29udGV4dC4KKyAqLworaW50IAkqTWF4Q2hpbGRyZW5QZXJDb250ZXh0 ID0gTlVMTDsKKwogLyoKICAqIFN0YW5kYXJkIHRvcC1sZXZlbCBjb250ZXh0cy4gRm9yIGEgZGVz Y3JpcHRpb24gb2YgdGhlIHB1cnBvc2Ugb2YgZWFjaAogICogb2YgdGhlc2UgY29udGV4dHMsIHJl ZmVyIHRvIHNyYy9iYWNrZW5kL3V0aWxzL21tZ3IvUkVBRE1FCkBAIC01NSw5ICs2NSwxMSBAQCBN ZW1vcnlDb250ZXh0IFBvcnRhbENvbnRleHQgPSBOVUxMOwogc3RhdGljIHZvaWQgTWVtb3J5Q29u dGV4dENhbGxSZXNldENhbGxiYWNrcyhNZW1vcnlDb250ZXh0IGNvbnRleHQpOwogc3RhdGljIHZv aWQgTWVtb3J5Q29udGV4dFN0YXRzSW50ZXJuYWwoTWVtb3J5Q29udGV4dCBjb250ZXh0LCBpbnQg bGV2ZWwsCiAJCQkJCQkJCQkgICBib29sIHByaW50LCBpbnQgbWF4X2NoaWxkcmVuLAotCQkJCQkJ CQkJICAgTWVtb3J5Q29udGV4dENvdW50ZXJzICp0b3RhbHMpOworCQkJCQkJCQkJICAgTWVtb3J5 Q29udGV4dENvdW50ZXJzICp0b3RhbHMsCisJCQkJCQkJCQkgICBib29sIGlzX2RzdF9zdGRlcnIp Owogc3RhdGljIHZvaWQgTWVtb3J5Q29udGV4dFN0YXRzUHJpbnQoTWVtb3J5Q29udGV4dCBjb250 ZXh0LCB2b2lkICpwYXNzdGhydSwKLQkJCQkJCQkJCWNvbnN0IGNoYXIgKnN0YXRzX3N0cmluZyk7 CisJCQkJCQkJCQljb25zdCBjaGFyICpzdGF0c19zdHJpbmcsCisJCQkJCQkJCQlib29sIGlzX2Rz dF9zdGRlcnIpOwogCiAvKgogICogWW91IHNob3VsZCBub3QgZG8gbWVtb3J5IGFsbG9jYXRpb25z IHdpdGhpbiBhIGNyaXRpY2FsIHNlY3Rpb24sIGJlY2F1c2UKQEAgLTQ4Nyw2ICs0OTksODkgQEAg TWVtb3J5Q29udGV4dE1lbUFsbG9jYXRlZChNZW1vcnlDb250ZXh0IGNvbnRleHQsIGJvb2wgcmVj dXJzZSkKIAlyZXR1cm4gdG90YWw7CiB9CiAKKy8qCisgKiBNY3h0UHJpbnRTaG1lbUluaXQKKyAq CSAJSW5pdGlhbGl6ZSBzaGFyZWQgbWVtb3J5IGFyZWEKKyAqLwordm9pZAorTWN4dFByaW50U2ht ZW1Jbml0KHZvaWQpCit7CisJYm9vbAkJZm91bmQ7CisKKwlNYXhDaGlsZHJlblBlckNvbnRleHQg ID0gKGludCAqKQorCQlTaG1lbUluaXRTdHJ1Y3QoIk1heCBudW1iZXIgb2YgY2hpbGRyZW4gcGVy IGNvbnRleHQiLAorCQkJCQkJc2l6ZW9mKGludCksCisJCQkJCQkmZm91bmQpOworCWlmICghZm91 bmQpCisJeworCQkqTWF4Q2hpbGRyZW5QZXJDb250ZXh0ID0gMDsKKwl9Cit9CisKKy8qCisgKiBw Z19wcmludF9iYWNrZW5kX21lbW9yeV9jb250ZXh0cworICoJCVByaW50IG1lbW9yeSBjb250ZXh0 cyBvZiB0aGUgc3BlY2lmaWVkIGJhY2tlbmQgcHJvY2Vzcy4KKyAqLworRGF0dW0KK3BnX3ByaW50 X2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJaW50CQlwaWQg PSBQR19HRVRBUkdfSU5UMzIoMCk7CisJaW50CQltYXhfY2hpbGRyZW4gPSBQR19HRVRBUkdfSU5U MzIoMSk7CisKKwlQR1BST0MJCSpwcm9jID0gQmFja2VuZFBpZEdldFByb2MocGlkKTsKKworCWlm KG1heF9jaGlsZHJlbiA8PSAwKQorCXsKKwkJZXJlcG9ydChXQVJOSU5HLAorCQkJCShlcnJtc2co IiVkIGlzIGludmFsaWQgdmFsdWUiLCBtYXhfY2hpbGRyZW4pLAorCQkJCSBlcnJoaW50KCJzZWNv bmQgcGFyYW1ldGVyIGlzIHRoZSBudW1iZXIgb2YgY29udGV4dCBhbmQgaXQgbXVzdCBiZSBzZXQg dG8gYSB2YWx1ZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMSIpKSk7CisKKwkJUEdfUkVUVVJO X0JPT0woZmFsc2UpOworCX0KKworCS8qCisJICogQ2hlY2sgd2hldGhlciB0aGUgdGFyZ2V0IHBy b2Nlc3MgaXMgUG9zdGdyZVNRTCBiYWNrZW5kIHByb2Nlc3MuCisJICovCisJaWYgKHByb2MgPT0g TlVMTCkKKwl7CisJCS8qCisJCSAqIEFjY29yZGluZyB0byB0aGUgdGhyZWFkIGJlbG93LCBpdCBt aWdodCBiZSBiZXR0ZXIgdG8KKwkJICogY2hhbmdlIHRoaXMgbWVzc2FnZS4KKwkJICoKKwkJICog aHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC9DQUxqMkFDVzdSci1SN21CY0JR aVhXUHAlM0RKVjVjaGFqalRkdWRMaUY1WWNwVy1CbUhoZyU0MG1haWwuZ21haWwuY29tCisJCSAq CisJCSAqIFVudGlsIHRoZSBjb25jbHVzaW9uIG9mIHRoZSBkaXNjdXNzaW9uLCBvdXRwdXQgdGhl IHNhbWUKKwkJICogbWVzc2FnZSBhcyBwZ19jYW5jZWxfYmFja2VuZCgpLgorCQkgKi8KKwkJZXJl cG9ydChXQVJOSU5HLAorCQkJCShlcnJtc2coIlBJRCAlZCBpcyBub3QgYSBQb3N0Z3JlU1FMIHNl cnZlciBwcm9jZXNzIiwgcGlkKSkpOworCisJCVBHX1JFVFVSTl9CT09MKGZhbHNlKTsKKwl9CisK KwkvKiBPbmx5IGFsbG93IHN1cGVydXNlcnMgdG8gcHJpbnQgbWVtb3J5IGNvbnRleHRzLiAqLwor CWlmICghc3VwZXJ1c2VyKCkpCisJeworCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJKGVycm1zZygi bXVzdCBiZSBhIHN1cGVydXNlciB0byBwcmludCBtZW1vcnkgY29udGV4dHMiKSkpOworCQlQR19S RVRVUk5fQk9PTChmYWxzZSk7CisJfQorCisJTFdMb2NrQWNxdWlyZShNY3h0UHJpbnRMb2NrLCBM V19FWENMVVNJVkUpOworCSpNYXhDaGlsZHJlblBlckNvbnRleHQgPSBtYXhfY2hpbGRyZW47CisJ TFdMb2NrUmVsZWFzZShNY3h0UHJpbnRMb2NrKTsKKworCWlmKCFTZW5kUHJvY1NpZ25hbChwaWQs IFBST0NTSUdfUFJJTlRfTUVNT1JZX0NPTlRFWFQsIEludmFsaWRCYWNrZW5kSWQpKQorCQlQR19S RVRVUk5fQk9PTCh0cnVlKTsKKwllbHNlCisJeworCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJKGVy cm1zZygiZmFpbGVkIHRvIHNlbmQgc2lnbmFsOiAlbSIpKSk7CisKKwkJUEdfUkVUVVJOX0JPT0wo ZmFsc2UpOworCX0KK30KKwogLyoKICAqIE1lbW9yeUNvbnRleHRTdGF0cwogICoJCVByaW50IHN0 YXRpc3RpY3MgYWJvdXQgdGhlIG5hbWVkIGNvbnRleHQgYW5kIGFsbCBpdHMgZGVzY2VuZGFudHMu CkBAIC00OTksNyArNTk0LDcgQEAgdm9pZAogTWVtb3J5Q29udGV4dFN0YXRzKE1lbW9yeUNvbnRl eHQgY29udGV4dCkKIHsKIAkvKiBBIGhhcmQtd2lyZWQgbGltaXQgb24gdGhlIG51bWJlciBvZiBj aGlsZHJlbiBpcyB1c3VhbGx5IGdvb2QgZW5vdWdoICovCi0JTWVtb3J5Q29udGV4dFN0YXRzRGV0 YWlsKGNvbnRleHQsIDEwMCk7CisJTWVtb3J5Q29udGV4dFN0YXRzRGV0YWlsKGNvbnRleHQsIDEw MCwgdHJ1ZSk7CiB9CiAKIC8qCkBAIC01MDgsMTkgKzYwMywyOCBAQCBNZW1vcnlDb250ZXh0U3Rh dHMoTWVtb3J5Q29udGV4dCBjb250ZXh0KQogICogRW50cnkgcG9pbnQgZm9yIHVzZSBpZiB5b3Ug d2FudCB0byB2YXJ5IHRoZSBudW1iZXIgb2YgY2hpbGQgY29udGV4dHMgc2hvd24uCiAgKi8KIHZv aWQKLU1lbW9yeUNvbnRleHRTdGF0c0RldGFpbChNZW1vcnlDb250ZXh0IGNvbnRleHQsIGludCBt YXhfY2hpbGRyZW4pCitNZW1vcnlDb250ZXh0U3RhdHNEZXRhaWwoTWVtb3J5Q29udGV4dCBjb250 ZXh0LCBpbnQgbWF4X2NoaWxkcmVuLCBib29sIGlzX2RzdF9zdGRlcnIpCiB7CiAJTWVtb3J5Q29u dGV4dENvdW50ZXJzIGdyYW5kX3RvdGFsczsKIAogCW1lbXNldCgmZ3JhbmRfdG90YWxzLCAwLCBz aXplb2YoZ3JhbmRfdG90YWxzKSk7CiAKLQlNZW1vcnlDb250ZXh0U3RhdHNJbnRlcm5hbChjb250 ZXh0LCAwLCB0cnVlLCBtYXhfY2hpbGRyZW4sICZncmFuZF90b3RhbHMpOworCU1lbW9yeUNvbnRl eHRTdGF0c0ludGVybmFsKGNvbnRleHQsIDAsIHRydWUsIG1heF9jaGlsZHJlbiwgJmdyYW5kX3Rv dGFscywgaXNfZHN0X3N0ZGVycik7CiAKLQlmcHJpbnRmKHN0ZGVyciwKLQkJCSJHcmFuZCB0b3Rh bDogJXp1IGJ5dGVzIGluICV6ZCBibG9ja3M7ICV6dSBmcmVlICglemQgY2h1bmtzKTsgJXp1IHVz ZWRcbiIsCi0JCQlncmFuZF90b3RhbHMudG90YWxzcGFjZSwgZ3JhbmRfdG90YWxzLm5ibG9ja3Ms Ci0JCQlncmFuZF90b3RhbHMuZnJlZXNwYWNlLCBncmFuZF90b3RhbHMuZnJlZWNodW5rcywKLQkJ CWdyYW5kX3RvdGFscy50b3RhbHNwYWNlIC0gZ3JhbmRfdG90YWxzLmZyZWVzcGFjZSk7CisJaWYg KGlzX2RzdF9zdGRlcnIpCisJCWZwcmludGYoc3RkZXJyLAorCQkJCSJHcmFuZCB0b3RhbDogJXp1 IGJ5dGVzIGluICV6ZCBibG9ja3M7ICV6dSBmcmVlICglemQgY2h1bmtzKTsgJXp1IHVzZWRcbiIs CisJCQkJZ3JhbmRfdG90YWxzLnRvdGFsc3BhY2UsIGdyYW5kX3RvdGFscy5uYmxvY2tzLAorCQkJ CWdyYW5kX3RvdGFscy5mcmVlc3BhY2UsIGdyYW5kX3RvdGFscy5mcmVlY2h1bmtzLAorCQkJCWdy YW5kX3RvdGFscy50b3RhbHNwYWNlIC0gZ3JhbmRfdG90YWxzLmZyZWVzcGFjZSk7CisJZWxzZQor CQllcmVwb3J0KExPR19TRVJWRVJfT05MWSwKKwkJCQkoZXJyaGlkZXN0bXQodHJ1ZSksCisJCQkJ ZXJyaGlkZWNvbnRleHQodHJ1ZSksCisJCQkJZXJybXNnX2ludGVybmFsKCJHcmFuZCB0b3RhbDog JXp1IGJ5dGVzIGluICV6ZCBibG9ja3M7ICV6dSBmcmVlICglemQgY2h1bmtzKTsgJXp1IHVzZWQi LAorCQkJCWdyYW5kX3RvdGFscy50b3RhbHNwYWNlLCBncmFuZF90b3RhbHMubmJsb2NrcywKKwkJ CQlncmFuZF90b3RhbHMuZnJlZXNwYWNlLCBncmFuZF90b3RhbHMuZnJlZWNodW5rcywKKwkJCQln cmFuZF90b3RhbHMudG90YWxzcGFjZSAtIGdyYW5kX3RvdGFscy5mcmVlc3BhY2UpKSk7CiB9CiAK IC8qCkBAIC01MzMsNyArNjM3LDggQEAgTWVtb3J5Q29udGV4dFN0YXRzRGV0YWlsKE1lbW9yeUNv bnRleHQgY29udGV4dCwgaW50IG1heF9jaGlsZHJlbikKIHN0YXRpYyB2b2lkCiBNZW1vcnlDb250 ZXh0U3RhdHNJbnRlcm5hbChNZW1vcnlDb250ZXh0IGNvbnRleHQsIGludCBsZXZlbCwKIAkJCQkJ CSAgIGJvb2wgcHJpbnQsIGludCBtYXhfY2hpbGRyZW4sCi0JCQkJCQkgICBNZW1vcnlDb250ZXh0 Q291bnRlcnMgKnRvdGFscykKKwkJCQkJCSAgIE1lbW9yeUNvbnRleHRDb3VudGVycyAqdG90YWxz LAorCQkJCQkJICAgYm9vbCBpc19kc3Rfc3RkZXJyKQogewogCU1lbW9yeUNvbnRleHRDb3VudGVy cyBsb2NhbF90b3RhbHM7CiAJTWVtb3J5Q29udGV4dCBjaGlsZDsKQEAgLTU0NSw3ICs2NTAsNyBA QCBNZW1vcnlDb250ZXh0U3RhdHNJbnRlcm5hbChNZW1vcnlDb250ZXh0IGNvbnRleHQsIGludCBs ZXZlbCwKIAljb250ZXh0LT5tZXRob2RzLT5zdGF0cyhjb250ZXh0LAogCQkJCQkJCXByaW50ID8g TWVtb3J5Q29udGV4dFN0YXRzUHJpbnQgOiBOVUxMLAogCQkJCQkJCSh2b2lkICopICZsZXZlbCwK LQkJCQkJCQl0b3RhbHMpOworCQkJCQkJCXRvdGFscywgaXNfZHN0X3N0ZGVycik7CiAKIAkvKgog CSAqIEV4YW1pbmUgY2hpbGRyZW4uICBJZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG1heF9jaGlsZHJl biBvZiB0aGVtLCB3ZSBkbwpAQCAtNTYwLDExICs2NjUsMTMgQEAgTWVtb3J5Q29udGV4dFN0YXRz SW50ZXJuYWwoTWVtb3J5Q29udGV4dCBjb250ZXh0LCBpbnQgbGV2ZWwsCiAJCWlmIChpY2hpbGQg PCBtYXhfY2hpbGRyZW4pCiAJCQlNZW1vcnlDb250ZXh0U3RhdHNJbnRlcm5hbChjaGlsZCwgbGV2 ZWwgKyAxLAogCQkJCQkJCQkJICAgcHJpbnQsIG1heF9jaGlsZHJlbiwKLQkJCQkJCQkJCSAgIHRv dGFscyk7CisJCQkJCQkJCQkgICB0b3RhbHMsCisJCQkJCQkJCQkgICBpc19kc3Rfc3RkZXJyKTsK IAkJZWxzZQogCQkJTWVtb3J5Q29udGV4dFN0YXRzSW50ZXJuYWwoY2hpbGQsIGxldmVsICsgMSwK IAkJCQkJCQkJCSAgIGZhbHNlLCBtYXhfY2hpbGRyZW4sCi0JCQkJCQkJCQkgICAmbG9jYWxfdG90 YWxzKTsKKwkJCQkJCQkJCSAgICZsb2NhbF90b3RhbHMsCisJCQkJCQkJCQkgICBpc19kc3Rfc3Rk ZXJyKTsKIAl9CiAKIAkvKiBEZWFsIHdpdGggZXhjZXNzIGNoaWxkcmVuICovCkBAIC01NzQsMTYg KzY4MSwzMSBAQCBNZW1vcnlDb250ZXh0U3RhdHNJbnRlcm5hbChNZW1vcnlDb250ZXh0IGNvbnRl eHQsIGludCBsZXZlbCwKIAkJewogCQkJaW50CQkJaTsKIAotCQkJZm9yIChpID0gMDsgaSA8PSBs ZXZlbDsgaSsrKQotCQkJCWZwcmludGYoc3RkZXJyLCAiICAiKTsKLQkJCWZwcmludGYoc3RkZXJy LAotCQkJCQkiJWQgbW9yZSBjaGlsZCBjb250ZXh0cyBjb250YWluaW5nICV6dSB0b3RhbCBpbiAl emQgYmxvY2tzOyAlenUgZnJlZSAoJXpkIGNodW5rcyk7ICV6dSB1c2VkXG4iLAotCQkJCQlpY2hp bGQgLSBtYXhfY2hpbGRyZW4sCi0JCQkJCWxvY2FsX3RvdGFscy50b3RhbHNwYWNlLAotCQkJCQls b2NhbF90b3RhbHMubmJsb2NrcywKLQkJCQkJbG9jYWxfdG90YWxzLmZyZWVzcGFjZSwKLQkJCQkJ bG9jYWxfdG90YWxzLmZyZWVjaHVua3MsCi0JCQkJCWxvY2FsX3RvdGFscy50b3RhbHNwYWNlIC0g bG9jYWxfdG90YWxzLmZyZWVzcGFjZSk7CisJCQlpZiAoaXNfZHN0X3N0ZGVycikKKwkJCXsKKwkJ CQlmb3IgKGkgPSAwOyBpIDw9IGxldmVsOyBpKyspCisJCQkJCWZwcmludGYoc3RkZXJyLCAiICAi KTsKKwkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJCSIlZCBtb3JlIGNoaWxkIGNvbnRleHRzIGNv bnRhaW5pbmcgJXp1IHRvdGFsIGluICV6ZCBibG9ja3M7ICV6dSBmcmVlICglemQgY2h1bmtzKTsg JXp1IHVzZWRcbiIsCisJCQkJCQlpY2hpbGQgLSBtYXhfY2hpbGRyZW4sCisJCQkJCQlsb2NhbF90 b3RhbHMudG90YWxzcGFjZSwKKwkJCQkJCWxvY2FsX3RvdGFscy5uYmxvY2tzLAorCQkJCQkJbG9j YWxfdG90YWxzLmZyZWVzcGFjZSwKKwkJCQkJCWxvY2FsX3RvdGFscy5mcmVlY2h1bmtzLAorCQkJ CQkJbG9jYWxfdG90YWxzLnRvdGFsc3BhY2UgLSBsb2NhbF90b3RhbHMuZnJlZXNwYWNlKTsKKwkJ CX0KKwkJCWVsc2UKKwkJCQllcmVwb3J0KExPR19TRVJWRVJfT05MWSwKKwkJCQkJCShlcnJoaWRl c3RtdCh0cnVlKSwKKwkJCQkJCWVycmhpZGVjb250ZXh0KHRydWUpLAorCQkJCQkJZXJybXNnX2lu dGVybmFsKCJsZXZlbDogJWQgJWQgbW9yZSBjaGlsZCBjb250ZXh0cyBjb250YWluaW5nICV6dSB0 b3RhbCBpbiAlemQgYmxvY2tzOyAlenUgZnJlZSAoJXpkIGNodW5rcyk7ICV6dSB1c2VkIiwKKwkJ CQkJCWxldmVsLAorCQkJCQkJaWNoaWxkIC0gbWF4X2NoaWxkcmVuLAorCQkJCQkJbG9jYWxfdG90 YWxzLnRvdGFsc3BhY2UsCisJCQkJCQlsb2NhbF90b3RhbHMubmJsb2NrcywKKwkJCQkJCWxvY2Fs X3RvdGFscy5mcmVlc3BhY2UsCisJCQkJCQlsb2NhbF90b3RhbHMuZnJlZWNodW5rcywKKwkJCQkJ CWxvY2FsX3RvdGFscy50b3RhbHNwYWNlIC0gbG9jYWxfdG90YWxzLmZyZWVzcGFjZSkpKTsKIAkJ fQogCiAJCWlmICh0b3RhbHMpCkBAIC02MDUsMTIgKzcyNywxNCBAQCBNZW1vcnlDb250ZXh0U3Rh dHNJbnRlcm5hbChNZW1vcnlDb250ZXh0IGNvbnRleHQsIGludCBsZXZlbCwKICAqLwogc3RhdGlj IHZvaWQKIE1lbW9yeUNvbnRleHRTdGF0c1ByaW50KE1lbW9yeUNvbnRleHQgY29udGV4dCwgdm9p ZCAqcGFzc3RocnUsCi0JCQkJCQljb25zdCBjaGFyICpzdGF0c19zdHJpbmcpCisJCQkJCQljb25z dCBjaGFyICpzdGF0c19zdHJpbmcsCisJCQkJCQlib29sIGlzX2RzdF9zdGRlcnIpCiB7CiAJaW50 CQkJbGV2ZWwgPSAqKGludCAqKSBwYXNzdGhydTsKIAljb25zdCBjaGFyICpuYW1lID0gY29udGV4 dC0+bmFtZTsKIAljb25zdCBjaGFyICppZGVudCA9IGNvbnRleHQtPmlkZW50OwogCWludAkJCWk7 CisJY2hhcgkJdHJ1bmNhdGVkX2lkZW50WzExMF07CiAKIAkvKgogCSAqIEl0IHNlZW1zIHByZWZl cmFibGUgdG8gbGFiZWwgZHluYWhhc2ggY29udGV4dHMgd2l0aCBqdXN0IHRoZSBoYXNoIHRhYmxl CkBAIC02MjMsMTEgKzc0NywxMSBAQCBNZW1vcnlDb250ZXh0U3RhdHNQcmludChNZW1vcnlDb250 ZXh0IGNvbnRleHQsIHZvaWQgKnBhc3N0aHJ1LAogCQlpZGVudCA9IE5VTEw7CiAJfQogCi0JZm9y IChpID0gMDsgaSA8IGxldmVsOyBpKyspCi0JCWZwcmludGYoc3RkZXJyLCAiICAiKTsKLQlmcHJp bnRmKHN0ZGVyciwgIiVzOiAlcyIsIG5hbWUsIHN0YXRzX3N0cmluZyk7CisJdHJ1bmNhdGVkX2lk ZW50WzBdID0gJ1wwJzsKKwogCWlmIChpZGVudCkKIAl7CisJCWNoYXIJZGVsaW1pdGVyW10gPSAi OiAiOwogCQkvKgogCQkgKiBTb21lIGNvbnRleHRzIG1heSBoYXZlIHZlcnkgbG9uZyBpZGVudGlm aWVycyAoZS5nLiwgU1FMIHF1ZXJpZXMpLgogCQkgKiBBcmJpdHJhcmlseSB0cnVuY2F0ZSBhdCAx MDAgYnl0ZXMsIGJ1dCBiZSBjYXJlZnVsIG5vdCB0byBicmVhawpAQCAtNjM3LDI0ICs3NjEsNDIg QEAgTWVtb3J5Q29udGV4dFN0YXRzUHJpbnQoTWVtb3J5Q29udGV4dCBjb250ZXh0LCB2b2lkICpw YXNzdGhydSwKIAkJaW50CQkJaWRsZW4gPSBzdHJsZW4oaWRlbnQpOwogCQlib29sCQl0cnVuY2F0 ZWQgPSBmYWxzZTsKIAorCQlzdHJjYXQodHJ1bmNhdGVkX2lkZW50LCBkZWxpbWl0ZXIpOworCiAJ CWlmIChpZGxlbiA+IDEwMCkKIAkJewogCQkJaWRsZW4gPSBwZ19tYmNsaXBsZW4oaWRlbnQsIGlk bGVuLCAxMDApOwogCQkJdHJ1bmNhdGVkID0gdHJ1ZTsKIAkJfQotCQlmcHJpbnRmKHN0ZGVyciwg IjogIik7CisKKwkJaSA9IHN0cmxlbihkZWxpbWl0ZXIpOworCiAJCXdoaWxlIChpZGxlbi0tID4g MCkKIAkJewogCQkJdW5zaWduZWQgY2hhciBjID0gKmlkZW50Kys7CiAKIAkJCWlmIChjIDwgJyAn KQogCQkJCWMgPSAnICc7Ci0JCQlmcHV0YyhjLCBzdGRlcnIpOworCQkJdHJ1bmNhdGVkX2lkZW50 W2krK10gPSBjOwogCQl9CisJCXRydW5jYXRlZF9pZGVudFtpXSA9ICdcMCc7CisKIAkJaWYgKHRy dW5jYXRlZCkKLQkJCWZwcmludGYoc3RkZXJyLCAiLi4uIik7CisJCQlzdHJjYXQodHJ1bmNhdGVk X2lkZW50LCAiLi4uIik7CisJfQorCisJaWYgKGlzX2RzdF9zdGRlcnIpCisJeworCQlmb3IgKGkg PSAwOyBpIDwgbGV2ZWw7IGkrKykKKwkJCWZwcmludGYoc3RkZXJyLCAiICAiKTsKKwkJZnByaW50 ZihzdGRlcnIsICIlczogJXMlc1xuIiwgbmFtZSwgc3RhdHNfc3RyaW5nLCB0cnVuY2F0ZWRfaWRl bnQpOwogCX0KLQlmcHV0YygnXG4nLCBzdGRlcnIpOworCWVsc2UKKwkJZXJlcG9ydChMT0dfU0VS VkVSX09OTFksCisJCQkJKGVycmhpZGVzdG10KHRydWUpLAorCQkJCSBlcnJoaWRlY29udGV4dCh0 cnVlKSwKKwkJCQkgZXJybXNnX2ludGVybmFsKCJsZXZlbDogJWQgJXM6ICVzJXMiLAorCQkJCQkJ CQkJIGxldmVsLCBuYW1lLCBzdGF0c19zdHJpbmcsIHRydW5jYXRlZF9pZGVudCkpKTsKIH0KIAog LyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3Ivc2xhYi5jIGIvc3JjL2JhY2tl bmQvdXRpbHMvbW1nci9zbGFiLmMKaW5kZXggOTIxM2JlN2M5NS4uNDc5YjA4YmVkZCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9zbGFiLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRp bHMvbW1nci9zbGFiLmMKQEAgLTEzNSw3ICsxMzUsOCBAQCBzdGF0aWMgU2l6ZSBTbGFiR2V0Q2h1 bmtTcGFjZShNZW1vcnlDb250ZXh0IGNvbnRleHQsIHZvaWQgKnBvaW50ZXIpOwogc3RhdGljIGJv b2wgU2xhYklzRW1wdHkoTWVtb3J5Q29udGV4dCBjb250ZXh0KTsKIHN0YXRpYyB2b2lkIFNsYWJT dGF0cyhNZW1vcnlDb250ZXh0IGNvbnRleHQsCiAJCQkJCSAgTWVtb3J5U3RhdHNQcmludEZ1bmMg cHJpbnRmdW5jLCB2b2lkICpwYXNzdGhydSwKLQkJCQkJICBNZW1vcnlDb250ZXh0Q291bnRlcnMg KnRvdGFscyk7CisJCQkJCSAgTWVtb3J5Q29udGV4dENvdW50ZXJzICp0b3RhbHMsCisJCQkJCSAg Ym9vbCBpc19kc3Rfc3RkZXJyKTsKICNpZmRlZiBNRU1PUllfQ09OVEVYVF9DSEVDS0lORwogc3Rh dGljIHZvaWQgU2xhYkNoZWNrKE1lbW9yeUNvbnRleHQgY29udGV4dCk7CiAjZW5kaWYKQEAgLTYz MiwxMSArNjMzLDEzIEBAIFNsYWJJc0VtcHR5KE1lbW9yeUNvbnRleHQgY29udGV4dCkKICAqIHBy aW50ZnVuYzogaWYgbm90IE5VTEwsIHBhc3MgYSBodW1hbi1yZWFkYWJsZSBzdGF0cyBzdHJpbmcg dG8gdGhpcy4KICAqIHBhc3N0aHJ1OiBwYXNzIHRoaXMgcG9pbnRlciB0aHJvdWdoIHRvIHByaW50 ZnVuYy4KICAqIHRvdGFsczogaWYgbm90IE5VTEwsIGFkZCBzdGF0cyBhYm91dCB0aGlzIGNvbnRl eHQgaW50byAqdG90YWxzLgorICogaXNfZHN0X3N0ZGVycjogaXMgdGhlIG91dHB1dCBzaG91bGQg YmUgc3RkZXJyIG9yIGVsb2cuCiAgKi8KIHN0YXRpYyB2b2lkCiBTbGFiU3RhdHMoTWVtb3J5Q29u dGV4dCBjb250ZXh0LAogCQkgIE1lbW9yeVN0YXRzUHJpbnRGdW5jIHByaW50ZnVuYywgdm9pZCAq cGFzc3RocnUsCi0JCSAgTWVtb3J5Q29udGV4dENvdW50ZXJzICp0b3RhbHMpCisJCSAgTWVtb3J5 Q29udGV4dENvdW50ZXJzICp0b3RhbHMsCisJCSAgYm9vbCBpc19kc3Rfc3RkZXJyKQogewogCVNs YWJDb250ZXh0ICpzbGFiID0gY2FzdE5vZGUoU2xhYkNvbnRleHQsIGNvbnRleHQpOwogCVNpemUJ CW5ibG9ja3MgPSAwOwpAQCAtNjcxLDcgKzY3NCw3IEBAIFNsYWJTdGF0cyhNZW1vcnlDb250ZXh0 IGNvbnRleHQsCiAJCQkJICIlenUgdG90YWwgaW4gJXpkIGJsb2NrczsgJXp1IGZyZWUgKCV6ZCBj aHVua3MpOyAlenUgdXNlZCIsCiAJCQkJIHRvdGFsc3BhY2UsIG5ibG9ja3MsIGZyZWVzcGFjZSwg ZnJlZWNodW5rcywKIAkJCQkgdG90YWxzcGFjZSAtIGZyZWVzcGFjZSk7Ci0JCXByaW50ZnVuYyhj b250ZXh0LCBwYXNzdGhydSwgc3RhdHNfc3RyaW5nKTsKKwkJcHJpbnRmdW5jKGNvbnRleHQsIHBh c3N0aHJ1LCBzdGF0c19zdHJpbmcsIGlzX2RzdF9zdGRlcnIpOwogCX0KIAogCWlmICh0b3RhbHMp CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1 ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCA5MzM5M2ZjZmQ0Li5mZjZhOWQyMTg2IDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRl L2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTc5MTcsNiArNzkxNywxMiBAQAogICBwcm9hcmduYW1l cyA9PiAne25hbWUsIGlkZW50LCBwYXJlbnQsIGxldmVsLCB0b3RhbF9ieXRlcywgdG90YWxfbmJs b2NrcywgZnJlZV9ieXRlcywgZnJlZV9jaHVua3MsIHVzZWRfYnl0ZXN9JywKICAgcHJvc3JjID0+ ICdwZ19nZXRfYmFja2VuZF9tZW1vcnlfY29udGV4dHMnIH0sCiAKKyMgcHJpbnQgbWVtb3J5IGNv bnRleHQgb2Ygc3BlY2lmaWVkIGJhY2tlbmQKK3sgb2lkID0+ICc0NTQzJywgZGVzY3IgPT4gJ3By aW50IG1lbW9yeSBjb250ZXh0cyBvZiBzcGVjaWZpZWQgYmFja2VuZCcsCisgIHByb25hbWUgPT4g J3BnX3ByaW50X2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzJywKKyAgcHJvdm9sYXRpbGUgPT4gJ3Yn LCBwcm9yZXR0eXBlID0+ICdib29sJywKKyAgcHJvYXJndHlwZXMgPT4gJ2ludDQgaW50NCcsIHBy b3NyYyA9PiAncGdfcHJpbnRfYmFja2VuZF9tZW1vcnlfY29udGV4dHMnIH0sCisKICMgbm9uLXBl cnNpc3RlbnQgc2VyaWVzIGdlbmVyYXRvcgogeyBvaWQgPT4gJzEwNjYnLCBkZXNjciA9PiAnbm9u LXBlcnNpc3RlbnQgc2VyaWVzIGdlbmVyYXRvcicsCiAgIHByb25hbWUgPT4gJ2dlbmVyYXRlX3Nl cmllcycsIHByb3Jvd3MgPT4gJzEwMDAnLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbWlzY2Fk bWluLmggYi9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaAppbmRleCAwMTM4NTBhYzI4Li43MTFkNmMy MDg5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaAorKysgYi9zcmMvaW5jbHVk ZS9taXNjYWRtaW4uaApAQCAtODQsNiArODQsNyBAQCBleHRlcm4gUEdETExJTVBPUlQgdm9sYXRp bGUgc2lnX2F0b21pY190IFByb2NEaWVQZW5kaW5nOwogZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0 aWxlIHNpZ19hdG9taWNfdCBJZGxlSW5UcmFuc2FjdGlvblNlc3Npb25UaW1lb3V0UGVuZGluZzsK IGV4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSBzaWdfYXRvbWljX3QgSWRsZVNlc3Npb25UaW1l b3V0UGVuZGluZzsKIGV4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSBzaWdfYXRvbWljX3QgUHJv Y1NpZ25hbEJhcnJpZXJQZW5kaW5nOworZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxlIHNpZ19h dG9taWNfdCBQcmludE1lbW9yeUNvbnRleHRQZW5kaW5nOwogCiBleHRlcm4gUEdETExJTVBPUlQg dm9sYXRpbGUgc2lnX2F0b21pY190IENsaWVudENvbm5lY3Rpb25Mb3N0OwogCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9ub2Rlcy9tZW1ub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvbWVtbm9k ZXMuaAppbmRleCA5MzMxZWY4MGZkLi44N2E4NTAxYzM3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9ub2Rlcy9tZW1ub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL21lbW5vZGVzLmgKQEAg LTUyLDcgKzUyLDggQEAgdHlwZWRlZiBzdHJ1Y3QgTWVtb3J5Q29udGV4dENvdW50ZXJzCiAgKi8K IAogdHlwZWRlZiB2b2lkICgqTWVtb3J5U3RhdHNQcmludEZ1bmMpIChNZW1vcnlDb250ZXh0IGNv bnRleHQsIHZvaWQgKnBhc3N0aHJ1LAotCQkJCQkJCQkJICBjb25zdCBjaGFyICpzdGF0c19zdHJp bmcpOworCQkJCQkJCQkJICBjb25zdCBjaGFyICpzdGF0c19zdHJpbmcsCisJCQkJCQkJCQkgIGJv b2wgaXNfZHN0X3N0ZGVycik7CiAKIHR5cGVkZWYgc3RydWN0IE1lbW9yeUNvbnRleHRNZXRob2Rz CiB7CkBAIC02Niw3ICs2Nyw4IEBAIHR5cGVkZWYgc3RydWN0IE1lbW9yeUNvbnRleHRNZXRob2Rz CiAJYm9vbAkJKCppc19lbXB0eSkgKE1lbW9yeUNvbnRleHQgY29udGV4dCk7CiAJdm9pZAkJKCpz dGF0cykgKE1lbW9yeUNvbnRleHQgY29udGV4dCwKIAkJCQkJCSAgTWVtb3J5U3RhdHNQcmludEZ1 bmMgcHJpbnRmdW5jLCB2b2lkICpwYXNzdGhydSwKLQkJCQkJCSAgTWVtb3J5Q29udGV4dENvdW50 ZXJzICp0b3RhbHMpOworCQkJCQkJICBNZW1vcnlDb250ZXh0Q291bnRlcnMgKnRvdGFscywKKwkJ CQkJCSAgYm9vbCBpc19kc3Rfc3RkZXJyKTsKICNpZmRlZiBNRU1PUllfQ09OVEVYVF9DSEVDS0lO RwogCXZvaWQJCSgqY2hlY2spIChNZW1vcnlDb250ZXh0IGNvbnRleHQpOwogI2VuZGlmCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaCBiL3NyYy9pbmNsdWRlL3N0 b3JhZ2UvcHJvY3NpZ25hbC5oCmluZGV4IDRhZTdkYzMzYjguLjBiZmUyOTA0NzcgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oCisrKyBiL3NyYy9pbmNsdWRlL3N0 b3JhZ2UvcHJvY3NpZ25hbC5oCkBAIC0zNCw2ICszNCw4IEBAIHR5cGVkZWYgZW51bQogCVBST0NT SUdfUEFSQUxMRUxfTUVTU0FHRSwJLyogbWVzc2FnZSBmcm9tIGNvb3BlcmF0aW5nIHBhcmFsbGVs IGJhY2tlbmQgKi8KIAlQUk9DU0lHX1dBTFNORF9JTklUX1NUT1BQSU5HLAkvKiBhc2sgd2Fsc2Vu ZGVycyB0byBwcmVwYXJlIGZvciBzaHV0ZG93biAgKi8KIAlQUk9DU0lHX0JBUlJJRVIsCQkJLyog Z2xvYmFsIGJhcnJpZXIgaW50ZXJydXB0ICAqLworCVBST0NTSUdfUFJJTlRfTUVNT1JZX0NPTlRF WFQsCQkvKiBhc2sgc3BlY2lmaWVkIGJhY2tlbmQgdG8gcHJpbnQgdGhlCisJCQkJCQkJbWVtb3J5 IGNvbnRleHQgKi8KIAogCS8qIFJlY292ZXJ5IGNvbmZsaWN0IHJlYXNvbnMgKi8KIAlQUk9DU0lH X1JFQ09WRVJZX0NPTkZMSUNUX0RBVEFCQVNFLApAQCAtNjksNiArNzEsNyBAQCBleHRlcm4gaW50 CVNlbmRQcm9jU2lnbmFsKHBpZF90IHBpZCwgUHJvY1NpZ25hbFJlYXNvbiByZWFzb24sCiBleHRl cm4gdWludDY0IEVtaXRQcm9jU2lnbmFsQmFycmllcihQcm9jU2lnbmFsQmFycmllclR5cGUgdHlw ZSk7CiBleHRlcm4gdm9pZCBXYWl0Rm9yUHJvY1NpZ25hbEJhcnJpZXIodWludDY0IGdlbmVyYXRp b24pOwogZXh0ZXJuIHZvaWQgUHJvY2Vzc1Byb2NTaWduYWxCYXJyaWVyKHZvaWQpOworZXh0ZXJu IHZvaWQgUHJvY2Vzc1ByaW50TWVtb3J5Q29udGV4dEludGVycnVwdCh2b2lkKTsKIAogZXh0ZXJu IHZvaWQgcHJvY3NpZ25hbF9zaWd1c3IxX2hhbmRsZXIoU0lHTkFMX0FSR1MpOwogCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS91dGlscy9tZW11dGlscy5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvbWVt dXRpbHMuaAppbmRleCAzNmFhZTRlNTFjLi5kYjYzOGMyZjNmIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS91dGlscy9tZW11dGlscy5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL21lbXV0aWxzLmgK QEAgLTYzLDYgKzYzLDkgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIE1lbW9yeUNvbnRleHQgQ3VyVHJh bnNhY3Rpb25Db250ZXh0OwogLyogVGhpcyBpcyBhIHRyYW5zaWVudCBsaW5rIHRvIHRoZSBhY3Rp dmUgcG9ydGFsJ3MgbWVtb3J5IGNvbnRleHQ6ICovCiBleHRlcm4gUEdETExJTVBPUlQgTWVtb3J5 Q29udGV4dCBQb3J0YWxDb250ZXh0OwogCisKK2V4dGVybiBpbnQgKk1heENoaWxkcmVuUGVyQ29u dGV4dDsKKwogLyogQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgbWFjcm8gKi8KICNkZWZpbmUgTWVt b3J5Q29udGV4dFJlc2V0QW5kRGVsZXRlQ2hpbGRyZW4oY3R4KSBNZW1vcnlDb250ZXh0UmVzZXQo Y3R4KQogCkBAIC04NCw5ICs4NywxMSBAQCBleHRlcm4gTWVtb3J5Q29udGV4dCBNZW1vcnlDb250 ZXh0R2V0UGFyZW50KE1lbW9yeUNvbnRleHQgY29udGV4dCk7CiBleHRlcm4gYm9vbCBNZW1vcnlD b250ZXh0SXNFbXB0eShNZW1vcnlDb250ZXh0IGNvbnRleHQpOwogZXh0ZXJuIFNpemUgTWVtb3J5 Q29udGV4dE1lbUFsbG9jYXRlZChNZW1vcnlDb250ZXh0IGNvbnRleHQsIGJvb2wgcmVjdXJzZSk7 CiBleHRlcm4gdm9pZCBNZW1vcnlDb250ZXh0U3RhdHMoTWVtb3J5Q29udGV4dCBjb250ZXh0KTsK LWV4dGVybiB2b2lkIE1lbW9yeUNvbnRleHRTdGF0c0RldGFpbChNZW1vcnlDb250ZXh0IGNvbnRl eHQsIGludCBtYXhfY2hpbGRyZW4pOworZXh0ZXJuIHZvaWQgTWVtb3J5Q29udGV4dFN0YXRzRGV0 YWlsKE1lbW9yeUNvbnRleHQgY29udGV4dCwgaW50IG1heF9jaGlsZHJlbiwKKwkJCQkJCQkJCQli b29sIGlzX2RzdF9zdGRlcnIpOwogZXh0ZXJuIHZvaWQgTWVtb3J5Q29udGV4dEFsbG93SW5Dcml0 aWNhbFNlY3Rpb24oTWVtb3J5Q29udGV4dCBjb250ZXh0LAogCQkJCQkJCQkJCQkJYm9vbCBhbGxv dyk7CitleHRlcm4gdm9pZCBNY3h0UHJpbnRTaG1lbUluaXQodm9pZCk7CiAKICNpZmRlZiBNRU1P UllfQ09OVEVYVF9DSEVDS0lORwogZXh0ZXJuIHZvaWQgTWVtb3J5Q29udGV4dENoZWNrKE1lbW9y eUNvbnRleHQgY29udGV4dCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfbWlz Yy90LzAwMl9wcmludF9tZW1vcnlfY29udGV4dF92YWxpZGF0aW9uLnBsIGIvc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X21pc2MvdC8wMDJfcHJpbnRfbWVtb3J5X2NvbnRleHRfdmFsaWRhdGlvbi5wbApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi42MWUzMTg4MDZmCi0tLSAvZGV2 L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X21pc2MvdC8wMDJfcHJpbnRfbWVtb3J5 X2NvbnRleHRfdmFsaWRhdGlvbi5wbApAQCAtMCwwICsxLDg5IEBACit1c2Ugc3RyaWN0OwordXNl IHdhcm5pbmdzOwordXNlIFBvc3RncmVzTm9kZTsKK3VzZSBUZXN0TGliOwordXNlIFRlc3Q6Ok1v cmUgdGVzdHMgPT4gNDsKKworIyBTZXQgdXAgbm9kZSB3aXRoIGxvZ2dpbmcgY29sbGVjdG9yCitt eSAkbm9kZSA9IGdldF9uZXdfbm9kZSgncHJpbWFyeScpOworJG5vZGUtPmluaXQoKTsKKyRub2Rl LT5hcHBlbmRfY29uZigKKwkncG9zdGdyZXNxbC5jb25mJywgcXF7CisJbG9nZ2luZ19jb2xsZWN0 b3IgPSBvbgorCWxjX21lc3NhZ2VzID0gJ0MnCisJfSk7CisKKyRub2RlLT5zdGFydCgpOworCisj IFZlcmlmeSB0aGF0IGxvZyBvdXRwdXQgZ2V0cyB0byB0aGUgZmlsZQorJG5vZGUtPnBzcWwoJ3Bv c3RncmVzJywgJ3NlbGVjdCBwZ19wcmludF9iYWNrZW5kX21lbW9yeV9jb250ZXh0cyhwZ19iYWNr ZW5kX3BpZCgpLCAxMDApJyk7CisKKyMgbWlnaHQgbmVlZCB0byByZXRyeSBpZiBsb2dnaW5nIGNv bGxlY3RvciBwcm9jZXNzIGlzIHNsb3cuLi4KK215ICRtYXhfYXR0ZW1wdHMgPSAxODAgKiAxMDsK KworbXkgJGN1cnJlbnRfbG9nZmlsZXM7Citmb3IgKG15ICRhdHRlbXB0cyA9IDA7ICRhdHRlbXB0 cyA8ICRtYXhfYXR0ZW1wdHM7ICRhdHRlbXB0cysrKQoreworCWV2YWwgeworCQkkY3VycmVudF9s b2dmaWxlcyA9IHNsdXJwX2ZpbGUoJG5vZGUtPmRhdGFfZGlyIC4gJy9jdXJyZW50X2xvZ2ZpbGVz Jyk7CisJfTsKKwlsYXN0IHVubGVzcyAkQDsKKwl1c2xlZXAoMTAwXzAwMCk7Cit9CitkaWUgJEAg aWYgJEA7CisKK25vdGUgImN1cnJlbnRfbG9nZmlsZXMgPSAkY3VycmVudF9sb2dmaWxlcyI7CisK K2xpa2UoCisJJGN1cnJlbnRfbG9nZmlsZXMsCisJcXJ8XnN0ZGVyciBsb2cvcG9zdGdyZXNxbC0u KmxvZyR8LAorCSdjdXJyZW50X2xvZ2ZpbGVzIGlzIHNhbmUnKTsKKworbXkgJGxmbmFtZSA9ICRj dXJyZW50X2xvZ2ZpbGVzOworJGxmbmFtZSA9fiBzL15zdGRlcnIgLy87CitjaG9tcCAkbGZuYW1l OworCitteSAkbG9nZmlsZTsKK215ICRwcmludF9jb3VudDsKKworIyBWZXJpZnkgdGhhdCB0aGUg YmFja3RyYWNlcyBvZiB0aGUgcHJvY2Vzc2VzIGFyZSBsb2dnZWQgaW50byBsb2dmaWxlLgorZm9y IChteSAkYXR0ZW1wdHMgPSAwOyAkYXR0ZW1wdHMgPCAkbWF4X2F0dGVtcHRzOyAkYXR0ZW1wdHMr KykKK3sKKwkkbG9nZmlsZSA9ICRub2RlLT5kYXRhX2RpciAuICcvJyAuICRsZm5hbWU7CisJY2hv bXAgJGxvZ2ZpbGU7CisJcHJpbnQgImZpbGUgaXMgJGxvZ2ZpbGUiOworCW9wZW4gbXkgJGZoLCAn PCcsICRsb2dmaWxlCisJICBvciBkaWUgIkNvdWxkIG5vdCBvcGVuICckbG9nZmlsZScgJCEiOwor CXdoaWxlIChteSAkbGluZSA9IDwkZmg+KQorCXsKKwkJY2hvbXAgJGxpbmU7CisJCWlmICgkbGlu ZSA9fiBtL0dyYW5kIHRvdGFsOiBcZCsgYnl0ZXMgaW4gXGQrIGJsb2Nrcy8pCisJCXsKKwkJCSRw cmludF9jb3VudCsrOworCQl9CisJfQorCWxhc3QgaWYgJHByaW50X2NvdW50ID09IDE7CisJdXNs ZWVwKDEwMF8wMDApOworfQorCitpcygkcHJpbnRfY291bnQsIDEsICdmb3VuZCBleHBlY3RlZCBt ZW1vcnkgY29udGV4dCBwcmludCBpbiB0aGUgbG9nIGZpbGUnKTsKKworbXkgJG91dHB1dDsKKwor JG5vZGUtPnBzcWwoJ3Bvc3RncmVzJywgJ3NlbGVjdCBwZ19wcmludF9iYWNrZW5kX21lbW9yeV9j b250ZXh0cyhwZ19iYWNrZW5kX3BpZCgpLCAwKScsCisJCXN0ZGVyciA9PiBcJG91dHB1dCk7CisK K2xpa2UoCisJJG91dHB1dCwKKwlxci8wIGlzIGludmFsaWQgdmFsdWUvLAorCSdtYXhfY2hpbGRy ZW4gbXVzdCBiZSBzZXQgdG8gYSB2YWx1ZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMScpOwor Ciskbm9kZS0+cHNxbCgncG9zdGdyZXMnLCAnc2VsZWN0IHBnX3ByaW50X2JhY2tlbmRfbWVtb3J5 X2NvbnRleHRzKDEsIDEwKScsCisJc3RkZXJyID0+IFwkb3V0cHV0KTsKKworbGlrZSgKKwkkb3V0 cHV0LAorCXFyL1BJRCAxIGlzIG5vdCBhIFBvc3RncmVTUUwgc2VydmVyIHByb2Nlc3MvLAorCSd0 YXJnZXQgUElEIGlzIG5vdCBQb3N0Z3JlU1FMIHNlcnZlciBwcm9jZXNzJyk7CisKKyRub2RlLT5z dG9wKCdmYXN0Jyk7Cg== --=_10100efbdd2f510a47f8fc12d3842d09--