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 1lTQqY-00072e-Hx for pgsql-hackers@arkaria.postgresql.org; Mon, 05 Apr 2021 15:08:58 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1lTQqX-0002XV-Eb for pgsql-hackers@arkaria.postgresql.org; Mon, 05 Apr 2021 15:08:57 +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 1lTQqW-0002XO-Qw for pgsql-hackers@lists.postgresql.org; Mon, 05 Apr 2021 15:08:57 +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 1lTQqR-0005Oy-7M for pgsql-hackers@postgresql.org; Mon, 05 Apr 2021 15:08:55 +0000 Received: from hnk.local (p2350207-ipbf2126funabasi.chiba.ocn.ne.jp [114.167.184.207]) by oss.nttdata.com (Postfix) with ESMTPSA id 25AF762829; Tue, 6 Apr 2021 00:08:47 +0900 (JST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.102.3 at oss.nttdata.com Subject: Re: Get memory contexts of an arbitrary backend process To: torikoshia , Zhihong Yu Cc: Kyotaro Horiguchi , PostgreSQL-development , Tom Lane , gkokolatos@protonmail.com, kasahara.tatsuhito@gmail.com, Craig Ringer References: <1f259e90-08c8-2202-be66-f7ee05d22cd2@oss.nttdata.com> <20210331.151612.259240960686480846.horikyota.ntt@gmail.com> <65fbf059-bcff-1585-59a1-1ec6a6f5ac75@oss.nttdata.com> <6ab7b7f1-8dca-288f-5578-0a0716567341@oss.nttdata.com> From: Fujii Masao Message-ID: Date: Tue, 6 Apr 2021 00:08:46 +0900 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:78.0) Gecko/20100101 Thunderbird/78.9.0 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/mixed; boundary="------------80D55213E48B7C41B2FDF1C2" Content-Language: en-US List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------80D55213E48B7C41B2FDF1C2 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit On 2021/04/05 21:03, torikoshia wrote: > On 2021-04-05 12:59, Fujii Masao wrote: >> On 2021/04/05 12:20, Zhihong Yu wrote: > > Thanks for reviewing! > >>> + * On receipt of this signal, a backend sets the flag in the signal >>> + * handler, and then which causes the next CHECK_FOR_INTERRUPTS() > >>> I think the 'and then' is not needed: > > Although I wonder either would be fine, removed the words. > >>> +        * This is just a warning so a loop-through-resultset will not abort >>> +        * if one backend logged its memory contexts during the run. >>> >>> The pid given by arg 0 is not a PostgreSQL server process. Which other backend could it be ? >> >> This is the comment that I added wrongly. So the comment should be >> "This is just a warning so a loop-through-resultset will not abort >> if one backend terminated on its own during the run.", >> like pg_signal_backend(). Thought? > > +1. > > Attached v10 patch. Thanks for updating the patch! I updated the patch as follows. Could you check the attached patch? + Memory contexts will be logged based on the log configuration set. + See for more information. Those memory contexts are logged at LOG level, but they are not sent to a client whatever the setting of client_min_messages. I think this information should be documented. So I updated the document as follows. These memory contexts will be logged at LOG message level. They will appear in the server log based on the log configuration set (See for more information), but will not be sent to the client whatever the setting of . + Only superusers can log the memory contexts. We can read this description as "only superusers can request to log ...". But ISTM that we can also read this as "only superusers can log (dump) the memory contexts of its backend". Right? To avoid this confusion, I updated this description as follows. Only superusers can request to log the memory contexts. I added the following note about the performance overhead by this function. Note that frequent calls to this function could incur significant overhead, because it may generate a large number of log messages. I also added some comments. Regards, -- Fujii Masao Advanced Computing Technology Center Research and Development Headquarters NTT DATA CORPORATION --------------80D55213E48B7C41B2FDF1C2 Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="v11-0001-add-memorycontext-elog-print.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v11-0001-add-memorycontext-elog-print.patch" RnJvbSAxNjcwMGU0OTYzNTczN2M0NGYyMzQyYWFhNzk2MTgyNDkwNzdiMDIxIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBGdWppaSBNYXNhbyA8ZnVqaWlAcG9zdGdyZXNxbC5v cmc+CkRhdGU6IE1vbiwgNSBBcHIgMjAyMSAyMzo0NDozNiArMDkwMApTdWJqZWN0OiBbUEFU Q0ggdjExXSBBZnRlciBjb21taXQgM2U5OGMwYmFmYjI4ZGUsIHdlIGNhbiBkaXNwbGF5IHRo ZSB1c2FnZSBvZiAKIG1lbW9yeSBjb250ZXh0cyB1c2luZyBwZ19iYWNrZW5kX21lbW9yeV9j b250ZXh0cyBzeXN0ZW0gdmlldy4gSG93ZXZlciwgaXRzIAogdGFyZ2V0IHByb2Nlc3MgaXMg bGltaXRlZCB0byB0aGUgYmFja2VuZCB3aGljaCBpcyBzaG93aW5nIHRoZSB2aWV3LiBUaGlz IAogcGF0Y2ggaW50cm9kdWNlcyBwZ19sb2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHMocGlk KSB3aGljaCBsb2dzIG1lbW9yeSAKIGNvbnRleHRzIG9mIHRoZSBzcGVjaWZpZWQgYmFja2Vu ZCBwcm9jZXNzLgoKQ3VycmVudGx5IHRoZSBudW1iZXIgb2YgY2hpbGQgY29udGV4dHMgdG8g YmUgbG9nZ2VkIHBlciBwYXJlbnQgaXMgbGltaXRlZAp0byAxMDAuCkFzIHdpdGggTWVtb3J5 Q29udGV4dFN0YXRzKCksIGl0IHN1cHBvc2VzIHRoYXQgcHJhY3RpY2FsIGNhc2VzIHdoZXJl IHRoZQpkdW1wIGdldHMgbG9uZyB3aWxsIHR5cGljYWxseSBiZSBodWdlIG51bWJlcnMgb2Yg c2libGluZ3MgdW5kZXIgdGhlIHNhbWUKcGFyZW50IGNvbnRleHQ7IHdoaWxlIHRoZSBhZGRp dGlvbmFsIGRlYnVnZ2luZyB2YWx1ZSBmcm9tIHNlZWluZyBkZXRhaWxzCmFib3V0IGluZGl2 aWR1YWwgc2libGluZ3MgYmV5b25kIDEwMCB3aWxsIG5vdCBiZSBsYXJnZS4KLS0tCiBkb2Mv c3JjL3NnbWwvZnVuYy5zZ21sICAgICAgICAgICAgICAgICAgICAgICB8ICA1MiArKysrKysK IHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYyAgICAgICAgIHwgICA0ICsK IHNyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYyAgICAgICAgICAgICAgICAgIHwgICAzICsK IHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9tY3h0ZnVuY3MuYyAgICAgICAgICAgIHwgIDYwICsr KysrKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jICAgICAgICAgICAgIHwg ICAxICsKIHNyYy9iYWNrZW5kL3V0aWxzL21tZ3IvYXNldC5jICAgICAgICAgICAgICAgIHwg ICA4ICstCiBzcmMvYmFja2VuZC91dGlscy9tbWdyL2dlbmVyYXRpb24uYyAgICAgICAgICB8 ICAgOCArLQogc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9tY3h0LmMgICAgICAgICAgICAgICAg fCAxODAgKysrKysrKysrKysrKysrLS0tLQogc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9zbGFi LmMgICAgICAgICAgICAgICAgfCAgIDkgKy0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJv Yy5kYXQgICAgICAgICAgICAgIHwgICA2ICsKIHNyYy9pbmNsdWRlL21pc2NhZG1pbi5oICAg ICAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL25vZGVzL21lbW5vZGVz LmggICAgICAgICAgICAgICAgIHwgICA2ICstCiBzcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2Nz aWduYWwuaCAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS91dGlscy9tZW11dGls cy5oICAgICAgICAgICAgICAgICB8ICAgNSArLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9taXNjX2Z1bmN0aW9ucy5vdXQgfCAgMTMgKysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL21p c2NfZnVuY3Rpb25zLnNxbCAgICAgIHwgICA5ICsKIDE2IGZpbGVzIGNoYW5nZWQsIDMxOSBp bnNlcnRpb25zKCspLCA0NyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3Nn bWwvZnVuYy5zZ21sIGIvZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbAppbmRleCAzY2YyNDNhMTZh Li45ZmNlZTc0OTEwIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvZnVuYy5zZ21sCisrKyBi L2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwKQEAgLTI0OTEzLDYgKzI0OTEzLDI2IEBAIFNFTEVD VCBjb2xsYXRpb24gZm9yICgnZm9vJyBDT0xMQVRFICJkZV9ERSIpOwogICAgICAgIDwvcGFy YT48L2VudHJ5PgogICAgICAgPC9yb3c+CiAKKyAgICAgIDxyb3c+CisgICAgICAgPGVudHJ5 IHJvbGU9ImZ1bmNfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImZ1bmNfc2lnbmF0dXJlIj4K KyAgICAgICAgPGluZGV4dGVybT4KKyAgICAgICAgIDxwcmltYXJ5PnBnX2xvZ19iYWNrZW5k X21lbW9yeV9jb250ZXh0czwvcHJpbWFyeT4KKyAgICAgICAgPC9pbmRleHRlcm0+CisgICAg ICAgIDxmdW5jdGlvbj5wZ19sb2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHM8L2Z1bmN0aW9u PiAoIDxwYXJhbWV0ZXI+cGlkPC9wYXJhbWV0ZXI+IDx0eXBlPmludGVnZXI8L3R5cGU+ICkK KyAgICAgICAgPHJldHVybnZhbHVlPmJvb2xlYW48L3JldHVybnZhbHVlPgorICAgICAgIDwv cGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgUmVxdWVzdHMgdG8gbG9nIHRoZSBtZW1v cnkgY29udGV4dHMgd2hvc2UgYmFja2VuZCBwcm9jZXNzIGhhcworICAgICAgICB0aGUgc3Bl Y2lmaWVkIHByb2Nlc3MgSUQuICBUaGVzZSBtZW1vcnkgY29udGV4dHMgd2lsbCBiZSBsb2dn ZWQgYXQKKyAgICAgICAgPGxpdGVyYWw+TE9HPC9saXRlcmFsPiBtZXNzYWdlIGxldmVsLiBU aGV5IHdpbGwgYXBwZWFyIGluCisgICAgICAgIHRoZSBzZXJ2ZXIgbG9nIGJhc2VkIG9uIHRo ZSBsb2cgY29uZmlndXJhdGlvbiBzZXQKKyAgICAgICAgKFNlZSA8eHJlZiBsaW5rZW5kPSJy dW50aW1lLWNvbmZpZy1sb2dnaW5nIi8+IGZvciBtb3JlIGluZm9ybWF0aW9uKSwKKyAgICAg ICAgYnV0IHdpbGwgbm90IGJlIHNlbnQgdG8gdGhlIGNsaWVudCB3aGF0ZXZlciB0aGUgc2V0 dGluZyBvZgorICAgICAgICA8eHJlZiBsaW5rZW5kPSJndWMtY2xpZW50LW1pbi1tZXNzYWdl cyIvPi4KKyAgICAgICAgT25seSBzdXBlcnVzZXJzIGNhbiByZXF1ZXN0IHRvIGxvZyB0aGUg bWVtb3J5IGNvbnRleHRzLgorICAgICAgIDwvcGFyYT48L2VudHJ5PgorICAgICAgPC9yb3c+ CisKICAgICAgIDxyb3c+CiAgICAgICAgPGVudHJ5IHJvbGU9ImZ1bmNfdGFibGVfZW50cnki PjxwYXJhIHJvbGU9ImZ1bmNfc2lnbmF0dXJlIj4KICAgICAgICAgPGluZGV4dGVybT4KQEAg LTI0OTgzLDYgKzI1MDAzLDM4IEBAIFNFTEVDVCBjb2xsYXRpb24gZm9yICgnZm9vJyBDT0xM QVRFICJkZV9ERSIpOwogICAgIDxzdHJ1Y3RuYW1lPnBnX3N0YXRfYWN0aXZpdHk8L3N0cnVj dG5hbWU+IHZpZXcuCiAgICA8L3BhcmE+CiAKKyAgIDxwYXJhPgorICAgIDxmdW5jdGlvbj5w Z19sb2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHM8L2Z1bmN0aW9uPiBjYW4gYmUgdXNlZAor ICAgIHRvIGxvZyB0aGUgbWVtb3J5IGNvbnRleHRzIG9mIHRoZSBiYWNrZW5kIHByb2Nlc3Mu IEZvciBleGFtcGxlLAorPHByb2dyYW1saXN0aW5nPgorcG9zdGdyZXM9IyBTRUxFQ1QgcGdf bG9nX2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzKHBnX2JhY2tlbmRfcGlkKCkpOworIHBnX2xv Z19iYWNrZW5kX21lbW9yeV9jb250ZXh0cyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgdAorKDEgcm93KQorPC9wcm9ncmFtbGlzdGluZz4KK09uZSBtZXNzYWdlIGZv ciBlYWNoIG1lbW9yeSBjb250ZXh0IHdpbGwgYmUgbG9nZ2VkLiBGb3IgZXhhbXBsZToKKzxz Y3JlZW4+CitMT0c6ICBsb2dnaW5nIG1lbW9yeSBjb250ZXh0cyBvZiBQSUQgMTAzNzcKK1NU QVRFTUVOVDogIFNFTEVDVCBwZ19sb2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHMocGdfYmFj a2VuZF9waWQoKSk7CitMT0c6ICBsZXZlbDogMDsgVG9wTWVtb3J5Q29udGV4dDogODA4MDAg dG90YWwgaW4gNiBibG9ja3M7IDE0NDMyIGZyZWUgKDUgY2h1bmtzKTsgNjYzNjggdXNlZAor TE9HOiAgbGV2ZWw6IDE7IHBnc3RhdCBUYWJTdGF0dXNBcnJheSBsb29rdXAgaGFzaCB0YWJs ZTogODE5MiB0b3RhbCBpbiAxIGJsb2NrczsgMTQwOCBmcmVlICgwIGNodW5rcyk7IDY3ODQg dXNlZAorTE9HOiAgbGV2ZWw6IDE7IFRvcFRyYW5zYWN0aW9uQ29udGV4dDogODE5MiB0b3Rh bCBpbiAxIGJsb2NrczsgNzcyMCBmcmVlICgxIGNodW5rcyk7IDQ3MiB1c2VkCitMT0c6ICBs ZXZlbDogMTsgUm93RGVzY3JpcHRpb25Db250ZXh0OiA4MTkyIHRvdGFsIGluIDEgYmxvY2tz OyA2ODgwIGZyZWUgKDAgY2h1bmtzKTsgMTMxMiB1c2VkCitMT0c6ICBsZXZlbDogMTsgTWVz c2FnZUNvbnRleHQ6IDE2Mzg0IHRvdGFsIGluIDIgYmxvY2tzOyA1MTUyIGZyZWUgKDAgY2h1 bmtzKTsgMTEyMzIgdXNlZAorTE9HOiAgbGV2ZWw6IDE7IE9wZXJhdG9yIGNsYXNzIGNhY2hl OiA4MTkyIHRvdGFsIGluIDEgYmxvY2tzOyA1MTIgZnJlZSAoMCBjaHVua3MpOyA3NjgwIHVz ZWQKK0xPRzogIGxldmVsOiAxOyBzbWdyIHJlbGF0aW9uIHRhYmxlOiAxNjM4NCB0b3RhbCBp biAyIGJsb2NrczsgNDU0NCBmcmVlICgzIGNodW5rcyk7IDExODQwIHVzZWQKK0xPRzogIGxl dmVsOiAxOyBUcmFuc2FjdGlvbkFib3J0Q29udGV4dDogMzI3NjggdG90YWwgaW4gMSBibG9j a3M7IDMyNTA0IGZyZWUgKDAgY2h1bmtzKTsgMjY0IHVzZWQKKy4uLgorTE9HOiAgbGV2ZWw6 IDE7IEVycm9yQ29udGV4dDogODE5MiB0b3RhbCBpbiAxIGJsb2NrczsgNzkyOCBmcmVlICgz IGNodW5rcyk7IDI2NCB1c2VkCitMT0c6ICBHcmFuZCB0b3RhbDogMTY1MTkyMCBieXRlcyBp biAyMDEgYmxvY2tzOyA2MjIzNjAgZnJlZSAoODggY2h1bmtzKTsgMTAyOTU2MCB1c2VkCis8 L3NjcmVlbj4KKyAgICBGb3IgbW9yZSB0aGFuIDEwMCBjaGlsZCBjb250ZXh0cyB1bmRlciB0 aGUgc2FtZSBwYXJlbnQgb25lLAorICAgIDEwMCBjaGlsZCBjb250ZXh0cyBhbmQgYSBzdW1t YXJ5IG9mIHRoZSByZW1haW5pbmcgb25lcyB3aWxsIGJlIGxvZ2dlZC4KKyAgICBOb3RlIHRo YXQgZnJlcXVlbnQgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbiBjb3VsZCBpbmN1ciBzaWduaWZp Y2FudCBvdmVyaGVhZCwKKyAgICBiZWNhdXNlIGl0IG1heSBnZW5lcmF0ZSBhIGxhcmdlIG51 bWJlciBvZiBsb2cgbWVzc2FnZXMuCisgICA8L3BhcmE+CisKICAgPC9zZWN0Mj4KIAogICA8 c2VjdDIgaWQ9ImZ1bmN0aW9ucy1hZG1pbi1iYWNrdXAiPgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9p cGMvcHJvY3NpZ25hbC5jCmluZGV4IGM2YThkNDYxMWUuLmVhYzY4OTUxNDEgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYworKysgYi9zcmMvYmFj a2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNs dWRlICJzdG9yYWdlL3NobWVtLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zaW52YWwuaCIKICNp bmNsdWRlICJ0Y29wL3Rjb3Bwcm90LmgiCisjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIK IAogLyoKICAqIFRoZSBTSUdVU1IxIHNpZ25hbCBpcyBtdWx0aXBsZXhlZCB0byBzdXBwb3J0 IHNpZ25hbGluZyBtdWx0aXBsZSBldmVudApAQCAtNjU3LDYgKzY1OCw5IEBAIHByb2NzaWdu YWxfc2lndXNyMV9oYW5kbGVyKFNJR05BTF9BUkdTKQogCWlmIChDaGVja1Byb2NTaWduYWwo UFJPQ1NJR19CQVJSSUVSKSkKIAkJSGFuZGxlUHJvY1NpZ25hbEJhcnJpZXJJbnRlcnJ1cHQo KTsKIAorCWlmIChDaGVja1Byb2NTaWduYWwoUFJPQ1NJR19MT0dfTUVNT1JZX0NPTlRFWFQp KQorCQlIYW5kbGVMb2dNZW1vcnlDb250ZXh0SW50ZXJydXB0KCk7CisKIAlpZiAoQ2hlY2tQ cm9jU2lnbmFsKFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfREFUQUJBU0UpKQogCQlSZWNv dmVyeUNvbmZsaWN0SW50ZXJydXB0KFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfREFUQUJB U0UpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMgYi9zcmMv YmFja2VuZC90Y29wL3Bvc3RncmVzLmMKaW5kZXggYWQzNTFlMmZkMS4uMzMwZWM1YjAyOCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCisrKyBiL3NyYy9iYWNr ZW5kL3Rjb3AvcG9zdGdyZXMuYwpAQCAtMzMyNyw2ICszMzI3LDkgQEAgUHJvY2Vzc0ludGVy cnVwdHModm9pZCkKIAogCWlmIChQYXJhbGxlbE1lc3NhZ2VQZW5kaW5nKQogCQlIYW5kbGVQ YXJhbGxlbE1lc3NhZ2VzKCk7CisKKwlpZiAoTG9nTWVtb3J5Q29udGV4dFBlbmRpbmcpCisJ CVByb2Nlc3NMb2dNZW1vcnlDb250ZXh0SW50ZXJydXB0KCk7CiB9CiAKIApkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L21jeHRmdW5jcy5jIGIvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L21jeHRmdW5jcy5jCmluZGV4IGMwMmZhNDc1NTAuLmUyYjg3YTdlZDkgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9tY3h0ZnVuY3MuYworKysgYi9zcmMvYmFj a2VuZC91dGlscy9hZHQvbWN4dGZ1bmNzLmMKQEAgLTE4LDYgKzE4LDggQEAKICNpbmNsdWRl ICJmdW5jYXBpLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAibWIvcGdf d2NoYXIuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKKyNpbmNsdWRlICJzdG9yYWdl L3Byb2NhcnJheS5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAKIC8qIC0tLS0t LS0tLS0KQEAgLTYxLDcgKzYzLDcgQEAgUHV0TWVtb3J5Q29udGV4dHNTdGF0c1R1cGxlU3Rv cmUoVHVwbGVzdG9yZXN0YXRlICp0dXBzdG9yZSwKIAogCS8qIEV4YW1pbmUgdGhlIGNvbnRl eHQgaXRzZWxmICovCiAJbWVtc2V0KCZzdGF0LCAwLCBzaXplb2Yoc3RhdCkpOwotCSgqY29u dGV4dC0+bWV0aG9kcy0+c3RhdHMpIChjb250ZXh0LCBOVUxMLCAodm9pZCAqKSAmbGV2ZWws ICZzdGF0KTsKKwkoKmNvbnRleHQtPm1ldGhvZHMtPnN0YXRzKSAoY29udGV4dCwgTlVMTCwg KHZvaWQgKikgJmxldmVsLCAmc3RhdCwgdHJ1ZSk7CiAKIAltZW1zZXQodmFsdWVzLCAwLCBz aXplb2YodmFsdWVzKSk7CiAJbWVtc2V0KG51bGxzLCAwLCBzaXplb2YobnVsbHMpKTsKQEAg LTE1NSwzICsxNTcsNTkgQEAgcGdfZ2V0X2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzKFBHX0ZV TkNUSU9OX0FSR1MpCiAKIAlyZXR1cm4gKERhdHVtKSAwOwogfQorCisvKgorICogcGdfbG9n X2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzCisgKgkJU2lnbmFsIGEgYmFja2VuZCBwcm9jZXNz IHRvIGxvZyBpdHMgbWVtb3J5IGNvbnRleHRzLgorICoKKyAqIE9ubHkgc3VwZXJ1c2VycyBh cmUgYWxsb3dlZCB0byBzaWduYWwgdG8gbG9nIHRoZSBtZW1vcnkgY29udGV4dHMKKyAqIGJl Y2F1c2UgYWxsb3dpbmcgYW55IHVzZXJzIHRvIGlzc3VlIHRoaXMgcmVxdWVzdCBhdCBhbiB1 bmJvdW5kZWQKKyAqIHJhdGUgd291bGQgY2F1c2UgbG90cyBvZiBsb2cgbWVzc2FnZXMgYW5k IHdoaWNoIGNhbiBsZWFkIHRvCisgKiBkZW5pYWwgb2Ygc2VydmljZS4KKyAqCisgKiBPbiBy ZWNlaXB0IG9mIHRoaXMgc2lnbmFsLCBhIGJhY2tlbmQgc2V0cyB0aGUgZmxhZyBpbiB0aGUg c2lnbmFsCisgKiBoYW5kbGVyLCB3aGljaCBjYXVzZXMgdGhlIG5leHQgQ0hFQ0tfRk9SX0lO VEVSUlVQVFMoKSB0byBsb2cgdGhlCisgKiBtZW1vcnkgY29udGV4dHMuCisgKi8KK0RhdHVt CitwZ19sb2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHMoUEdfRlVOQ1RJT05fQVJHUykKK3sK KwlpbnQJCQlwaWQgPSBQR19HRVRBUkdfSU5UMzIoMCk7CisJUEdQUk9DCSAgICpwcm9jID0g QmFja2VuZFBpZEdldFByb2MocGlkKTsKKworCS8qCisJICogQmFja2VuZFBpZEdldFByb2Mg cmV0dXJucyBOVUxMIGlmIHRoZSBwaWQgaXNuJ3QgdmFsaWQ7IGJ1dCBieSB0aGUgdGltZQor CSAqIHdlIHJlYWNoIGtpbGwoKSwgYSBwcm9jZXNzIGZvciB3aGljaCB3ZSBnZXQgYSB2YWxp ZCBwcm9jIGhlcmUgbWlnaHQKKwkgKiBoYXZlIHRlcm1pbmF0ZWQgb24gaXRzIG93bi4gIFRo ZXJlJ3Mgbm8gd2F5IHRvIGFjcXVpcmUgYSBsb2NrIG9uIGFuCisJICogYXJiaXRyYXJ5IHBy b2Nlc3MgdG8gcHJldmVudCB0aGF0LiBCdXQgc2luY2UgdGhpcyBtZWNoYW5pc20gaXMgdXN1 YWxseQorCSAqIHVzZWQgdG8gZGVidWcgYSBiYWNrZW5kIHJ1bm5pbmcgYW5kIGNvbnN1bWlu ZyBsb3RzIG9mIG1lbW9yeSwgdGhhdCBpdAorCSAqIG1pZ2h0IGVuZCBvbiBpdHMgb3duIGZp cnN0IGFuZCBpdHMgbWVtb3J5IGNvbnRleHRzIGFyZSBub3QgbG9nZ2VkIGlzCisJICogbm90 IGEgcHJvYmxlbS4KKwkgKi8KKwlpZiAocHJvYyA9PSBOVUxMKQorCXsKKwkJLyoKKwkJICog VGhpcyBpcyBqdXN0IGEgd2FybmluZyBzbyBhIGxvb3AtdGhyb3VnaC1yZXN1bHRzZXQgd2ls bCBub3QgYWJvcnQKKwkJICogaWYgb25lIGJhY2tlbmQgdGVybWluYXRlZCBvbiBpdHMgb3du IGR1cmluZyB0aGUgcnVuLgorCQkgKi8KKwkJZXJlcG9ydChXQVJOSU5HLAorCQkJCShlcnJt c2coIlBJRCAlZCBpcyBub3QgYSBQb3N0Z3JlU1FMIHNlcnZlciBwcm9jZXNzIiwgcGlkKSkp OworCQlQR19SRVRVUk5fQk9PTChmYWxzZSk7CisJfQorCisJLyogT25seSBhbGxvdyBzdXBl cnVzZXJzIHRvIGxvZyBtZW1vcnkgY29udGV4dHMuICovCisJaWYgKCFzdXBlcnVzZXIoKSkK KwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOU1VGRklDSUVOVF9Q UklWSUxFR0UpLAorCQkJCSBlcnJtc2coIm11c3QgYmUgYSBzdXBlcnVzZXIgdG8gbG9nIG1l bW9yeSBjb250ZXh0cyIpKSk7CisKKwlpZiAoU2VuZFByb2NTaWduYWwocGlkLCBQUk9DU0lH X0xPR19NRU1PUllfQ09OVEVYVCwgcHJvYy0+YmFja2VuZElkKSA8IDApCisJeworCQkvKiBB Z2FpbiwganVzdCBhIHdhcm5pbmcgdG8gYWxsb3cgbG9vcHMgKi8KKwkJZXJlcG9ydChXQVJO SU5HLAorCQkJCShlcnJtc2coImNvdWxkIG5vdCBzZW5kIHNpZ25hbCB0byBwcm9jZXNzICVk OiAlbSIsIHBpZCkpKTsKKwkJUEdfUkVUVVJOX0JPT0woZmFsc2UpOworCX0KKworCVBHX1JF VFVSTl9CT09MKHRydWUpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5p dC9nbG9iYWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9pbml0L2dsb2JhbHMuYwppbmRleCBh OWYwZmMzMDE3Li4zODFkOWU1NDhkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9p bml0L2dsb2JhbHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9pbml0L2dsb2JhbHMuYwpA QCAtMzUsNiArMzUsNyBAQCB2b2xhdGlsZSBzaWdfYXRvbWljX3QgQ2xpZW50Q29ubmVjdGlv bkxvc3QgPSBmYWxzZTsKIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBJZGxlSW5UcmFuc2FjdGlv blNlc3Npb25UaW1lb3V0UGVuZGluZyA9IGZhbHNlOwogdm9sYXRpbGUgc2lnX2F0b21pY190 IElkbGVTZXNzaW9uVGltZW91dFBlbmRpbmcgPSBmYWxzZTsKIHZvbGF0aWxlIHNpZ19hdG9t aWNfdCBQcm9jU2lnbmFsQmFycmllclBlbmRpbmcgPSBmYWxzZTsKK3ZvbGF0aWxlIHNpZ19h dG9taWNfdCBMb2dNZW1vcnlDb250ZXh0UGVuZGluZyA9IGZhbHNlOwogdm9sYXRpbGUgdWlu dDMyIEludGVycnVwdEhvbGRvZmZDb3VudCA9IDA7CiB2b2xhdGlsZSB1aW50MzIgUXVlcnlD YW5jZWxIb2xkb2ZmQ291bnQgPSAwOwogdm9sYXRpbGUgdWludDMyIENyaXRTZWN0aW9uQ291 bnQgPSAwOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9hc2V0LmMgYi9z cmMvYmFja2VuZC91dGlscy9tbWdyL2FzZXQuYwppbmRleCBlYzZjMTMwZDBmLi43Nzg3MmU3 N2JjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9tbWdyL2FzZXQuYworKysgYi9z cmMvYmFja2VuZC91dGlscy9tbWdyL2FzZXQuYwpAQCAtMjcyLDcgKzI3Miw4IEBAIHN0YXRp YyBTaXplIEFsbG9jU2V0R2V0Q2h1bmtTcGFjZShNZW1vcnlDb250ZXh0IGNvbnRleHQsIHZv aWQgKnBvaW50ZXIpOwogc3RhdGljIGJvb2wgQWxsb2NTZXRJc0VtcHR5KE1lbW9yeUNvbnRl eHQgY29udGV4dCk7CiBzdGF0aWMgdm9pZCBBbGxvY1NldFN0YXRzKE1lbW9yeUNvbnRleHQg Y29udGV4dCwKIAkJCQkJCSAgTWVtb3J5U3RhdHNQcmludEZ1bmMgcHJpbnRmdW5jLCB2b2lk ICpwYXNzdGhydSwKLQkJCQkJCSAgTWVtb3J5Q29udGV4dENvdW50ZXJzICp0b3RhbHMpOwor CQkJCQkJICBNZW1vcnlDb250ZXh0Q291bnRlcnMgKnRvdGFscywKKwkJCQkJCSAgYm9vbCBw cmludF90b19zdGRlcnIpOwogCiAjaWZkZWYgTUVNT1JZX0NPTlRFWFRfQ0hFQ0tJTkcKIHN0 YXRpYyB2b2lkIEFsbG9jU2V0Q2hlY2soTWVtb3J5Q29udGV4dCBjb250ZXh0KTsKQEAgLTEz MzYsMTEgKzEzMzcsMTIgQEAgQWxsb2NTZXRJc0VtcHR5KE1lbW9yeUNvbnRleHQgY29udGV4 dCkKICAqIHByaW50ZnVuYzogaWYgbm90IE5VTEwsIHBhc3MgYSBodW1hbi1yZWFkYWJsZSBz dGF0cyBzdHJpbmcgdG8gdGhpcy4KICAqIHBhc3N0aHJ1OiBwYXNzIHRoaXMgcG9pbnRlciB0 aHJvdWdoIHRvIHByaW50ZnVuYy4KICAqIHRvdGFsczogaWYgbm90IE5VTEwsIGFkZCBzdGF0 cyBhYm91dCB0aGlzIGNvbnRleHQgaW50byAqdG90YWxzLgorICogcHJpbnRfdG9fc3RkZXJy OiBwcmludCBzdGF0cyB0byBzdGRlcnIgaWYgdHJ1ZSwgZWxvZyBvdGhlcndpc2UuCiAgKi8K IHN0YXRpYyB2b2lkCiBBbGxvY1NldFN0YXRzKE1lbW9yeUNvbnRleHQgY29udGV4dCwKIAkJ CSAgTWVtb3J5U3RhdHNQcmludEZ1bmMgcHJpbnRmdW5jLCB2b2lkICpwYXNzdGhydSwKLQkJ CSAgTWVtb3J5Q29udGV4dENvdW50ZXJzICp0b3RhbHMpCisJCQkgIE1lbW9yeUNvbnRleHRD b3VudGVycyAqdG90YWxzLCBib29sIHByaW50X3RvX3N0ZGVycikKIHsKIAlBbGxvY1NldAlz ZXQgPSAoQWxsb2NTZXQpIGNvbnRleHQ7CiAJU2l6ZQkJbmJsb2NrcyA9IDA7CkBAIC0xMzc5 LDcgKzEzODEsNyBAQCBBbGxvY1NldFN0YXRzKE1lbW9yeUNvbnRleHQgY29udGV4dCwKIAkJ CQkgIiV6dSB0b3RhbCBpbiAlemQgYmxvY2tzOyAlenUgZnJlZSAoJXpkIGNodW5rcyk7ICV6 dSB1c2VkIiwKIAkJCQkgdG90YWxzcGFjZSwgbmJsb2NrcywgZnJlZXNwYWNlLCBmcmVlY2h1 bmtzLAogCQkJCSB0b3RhbHNwYWNlIC0gZnJlZXNwYWNlKTsKLQkJcHJpbnRmdW5jKGNvbnRl eHQsIHBhc3N0aHJ1LCBzdGF0c19zdHJpbmcpOworCQlwcmludGZ1bmMoY29udGV4dCwgcGFz c3RocnUsIHN0YXRzX3N0cmluZywgcHJpbnRfdG9fc3RkZXJyKTsKIAl9CiAKIAlpZiAodG90 YWxzKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9nZW5lcmF0aW9uLmMg Yi9zcmMvYmFja2VuZC91dGlscy9tbWdyL2dlbmVyYXRpb24uYwppbmRleCAyYjkwMDM0NzY0 Li41ODRjZDYxNGRhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9tbWdyL2dlbmVy YXRpb24uYworKysgYi9zcmMvYmFja2VuZC91dGlscy9tbWdyL2dlbmVyYXRpb24uYwpAQCAt MTU1LDcgKzE1NSw4IEBAIHN0YXRpYyBTaXplIEdlbmVyYXRpb25HZXRDaHVua1NwYWNlKE1l bW9yeUNvbnRleHQgY29udGV4dCwgdm9pZCAqcG9pbnRlcik7CiBzdGF0aWMgYm9vbCBHZW5l cmF0aW9uSXNFbXB0eShNZW1vcnlDb250ZXh0IGNvbnRleHQpOwogc3RhdGljIHZvaWQgR2Vu ZXJhdGlvblN0YXRzKE1lbW9yeUNvbnRleHQgY29udGV4dCwKIAkJCQkJCQlNZW1vcnlTdGF0 c1ByaW50RnVuYyBwcmludGZ1bmMsIHZvaWQgKnBhc3N0aHJ1LAotCQkJCQkJCU1lbW9yeUNv bnRleHRDb3VudGVycyAqdG90YWxzKTsKKwkJCQkJCQlNZW1vcnlDb250ZXh0Q291bnRlcnMg KnRvdGFscywKKwkJCQkJCQlib29sIHByaW50X3RvX3N0ZGVycik7CiAKICNpZmRlZiBNRU1P UllfQ09OVEVYVF9DSEVDS0lORwogc3RhdGljIHZvaWQgR2VuZXJhdGlvbkNoZWNrKE1lbW9y eUNvbnRleHQgY29udGV4dCk7CkBAIC02NjUsNiArNjY2LDcgQEAgR2VuZXJhdGlvbklzRW1w dHkoTWVtb3J5Q29udGV4dCBjb250ZXh0KQogICogcHJpbnRmdW5jOiBpZiBub3QgTlVMTCwg cGFzcyBhIGh1bWFuLXJlYWRhYmxlIHN0YXRzIHN0cmluZyB0byB0aGlzLgogICogcGFzc3Ro cnU6IHBhc3MgdGhpcyBwb2ludGVyIHRocm91Z2ggdG8gcHJpbnRmdW5jLgogICogdG90YWxz OiBpZiBub3QgTlVMTCwgYWRkIHN0YXRzIGFib3V0IHRoaXMgY29udGV4dCBpbnRvICp0b3Rh bHMuCisgKiBwcmludF90b19zdGRlcnI6IHByaW50IHN0YXRzIHRvIHN0ZGVyciBpZiB0cnVl LCBlbG9nIG90aGVyd2lzZS4KICAqCiAgKiBYWFggZnJlZXNwYWNlIG9ubHkgYWNjb3VudHMg Zm9yIGVtcHR5IHNwYWNlIGF0IHRoZSBlbmQgb2YgdGhlIGJsb2NrLCBub3QKICAqIHNwYWNl IG9mIGZyZWVkIGNodW5rcyAod2hpY2ggaXMgdW5rbm93bikuCkBAIC02NzIsNyArNjc0LDcg QEAgR2VuZXJhdGlvbklzRW1wdHkoTWVtb3J5Q29udGV4dCBjb250ZXh0KQogc3RhdGljIHZv aWQKIEdlbmVyYXRpb25TdGF0cyhNZW1vcnlDb250ZXh0IGNvbnRleHQsCiAJCQkJTWVtb3J5 U3RhdHNQcmludEZ1bmMgcHJpbnRmdW5jLCB2b2lkICpwYXNzdGhydSwKLQkJCQlNZW1vcnlD b250ZXh0Q291bnRlcnMgKnRvdGFscykKKwkJCQlNZW1vcnlDb250ZXh0Q291bnRlcnMgKnRv dGFscywgYm9vbCBwcmludF90b19zdGRlcnIpCiB7CiAJR2VuZXJhdGlvbkNvbnRleHQgKnNl dCA9IChHZW5lcmF0aW9uQ29udGV4dCAqKSBjb250ZXh0OwogCVNpemUJCW5ibG9ja3MgPSAw OwpAQCAtNzA0LDcgKzcwNiw3IEBAIEdlbmVyYXRpb25TdGF0cyhNZW1vcnlDb250ZXh0IGNv bnRleHQsCiAJCQkJICIlenUgdG90YWwgaW4gJXpkIGJsb2NrcyAoJXpkIGNodW5rcyk7ICV6 dSBmcmVlICglemQgY2h1bmtzKTsgJXp1IHVzZWQiLAogCQkJCSB0b3RhbHNwYWNlLCBuYmxv Y2tzLCBuY2h1bmtzLCBmcmVlc3BhY2UsCiAJCQkJIG5mcmVlY2h1bmtzLCB0b3RhbHNwYWNl IC0gZnJlZXNwYWNlKTsKLQkJcHJpbnRmdW5jKGNvbnRleHQsIHBhc3N0aHJ1LCBzdGF0c19z dHJpbmcpOworCQlwcmludGZ1bmMoY29udGV4dCwgcGFzc3RocnUsIHN0YXRzX3N0cmluZywg cHJpbnRfdG9fc3RkZXJyKTsKIAl9CiAKIAlpZiAodG90YWxzKQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvdXRpbHMvbW1nci9tY3h0LmMgYi9zcmMvYmFja2VuZC91dGlscy9tbWdyL21j eHQuYwppbmRleCA4NDQ3MmI5MTU4Li42OTE5YTczMjgwIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC91dGlscy9tbWdyL21jeHQuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9tbWdyL21j eHQuYwpAQCAtMjMsNiArMjMsMTAgQEAKIAogI2luY2x1ZGUgIm1iL3BnX3djaGFyLmgiCiAj aW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCisjaW5j bHVkZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3Byb2NzaWdu YWwuaCIKKyNpbmNsdWRlICJ1dGlscy9mbWdycHJvdG9zLmgiCiAjaW5jbHVkZSAidXRpbHMv bWVtZGVidWcuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogCkBAIC01NSw5ICs1 OSwxMSBAQCBNZW1vcnlDb250ZXh0IFBvcnRhbENvbnRleHQgPSBOVUxMOwogc3RhdGljIHZv aWQgTWVtb3J5Q29udGV4dENhbGxSZXNldENhbGxiYWNrcyhNZW1vcnlDb250ZXh0IGNvbnRl eHQpOwogc3RhdGljIHZvaWQgTWVtb3J5Q29udGV4dFN0YXRzSW50ZXJuYWwoTWVtb3J5Q29u dGV4dCBjb250ZXh0LCBpbnQgbGV2ZWwsCiAJCQkJCQkJCQkgICBib29sIHByaW50LCBpbnQg bWF4X2NoaWxkcmVuLAotCQkJCQkJCQkJICAgTWVtb3J5Q29udGV4dENvdW50ZXJzICp0b3Rh bHMpOworCQkJCQkJCQkJICAgTWVtb3J5Q29udGV4dENvdW50ZXJzICp0b3RhbHMsCisJCQkJ CQkJCQkgICBib29sIHByaW50X3RvX3N0ZGVycik7CiBzdGF0aWMgdm9pZCBNZW1vcnlDb250 ZXh0U3RhdHNQcmludChNZW1vcnlDb250ZXh0IGNvbnRleHQsIHZvaWQgKnBhc3N0aHJ1LAot CQkJCQkJCQkJY29uc3QgY2hhciAqc3RhdHNfc3RyaW5nKTsKKwkJCQkJCQkJCWNvbnN0IGNo YXIgKnN0YXRzX3N0cmluZywKKwkJCQkJCQkJCWJvb2wgcHJpbnRfdG9fc3RkZXJyKTsKIAog LyoKICAqIFlvdSBzaG91bGQgbm90IGRvIG1lbW9yeSBhbGxvY2F0aW9ucyB3aXRoaW4gYSBj cml0aWNhbCBzZWN0aW9uLCBiZWNhdXNlCkBAIC00OTksMjggKzUwNSw1MiBAQCB2b2lkCiBN ZW1vcnlDb250ZXh0U3RhdHMoTWVtb3J5Q29udGV4dCBjb250ZXh0KQogewogCS8qIEEgaGFy ZC13aXJlZCBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuIGlzIHVzdWFsbHkgZ29v ZCBlbm91Z2ggKi8KLQlNZW1vcnlDb250ZXh0U3RhdHNEZXRhaWwoY29udGV4dCwgMTAwKTsK KwlNZW1vcnlDb250ZXh0U3RhdHNEZXRhaWwoY29udGV4dCwgMTAwLCB0cnVlKTsKIH0KIAog LyoKICAqIE1lbW9yeUNvbnRleHRTdGF0c0RldGFpbAogICoKICAqIEVudHJ5IHBvaW50IGZv ciB1c2UgaWYgeW91IHdhbnQgdG8gdmFyeSB0aGUgbnVtYmVyIG9mIGNoaWxkIGNvbnRleHRz IHNob3duLgorICoKKyAqIElmIHByaW50X3RvX3N0ZGVyciBpcyB0cnVlLCBwcmludCBzdGF0 aXN0aWNzIGFib3V0IHRoZSBtZW1vcnkgY29udGV4dHMKKyAqIHdpdGggZnByaW50ZihzdGRl cnIpLCBvdGhlcndpc2UgdXNlIGVyZXBvcnQoKS4KICAqLwogdm9pZAotTWVtb3J5Q29udGV4 dFN0YXRzRGV0YWlsKE1lbW9yeUNvbnRleHQgY29udGV4dCwgaW50IG1heF9jaGlsZHJlbikK K01lbW9yeUNvbnRleHRTdGF0c0RldGFpbChNZW1vcnlDb250ZXh0IGNvbnRleHQsIGludCBt YXhfY2hpbGRyZW4sCisJCQkJCQkgYm9vbCBwcmludF90b19zdGRlcnIpCiB7CiAJTWVtb3J5 Q29udGV4dENvdW50ZXJzIGdyYW5kX3RvdGFsczsKIAogCW1lbXNldCgmZ3JhbmRfdG90YWxz LCAwLCBzaXplb2YoZ3JhbmRfdG90YWxzKSk7CiAKLQlNZW1vcnlDb250ZXh0U3RhdHNJbnRl cm5hbChjb250ZXh0LCAwLCB0cnVlLCBtYXhfY2hpbGRyZW4sICZncmFuZF90b3RhbHMpOwor CU1lbW9yeUNvbnRleHRTdGF0c0ludGVybmFsKGNvbnRleHQsIDAsIHRydWUsIG1heF9jaGls ZHJlbiwgJmdyYW5kX3RvdGFscywgcHJpbnRfdG9fc3RkZXJyKTsKKworCWlmIChwcmludF90 b19zdGRlcnIpCisJCWZwcmludGYoc3RkZXJyLAorCQkJCSJHcmFuZCB0b3RhbDogJXp1IGJ5 dGVzIGluICV6ZCBibG9ja3M7ICV6dSBmcmVlICglemQgY2h1bmtzKTsgJXp1IHVzZWRcbiIs CisJCQkJZ3JhbmRfdG90YWxzLnRvdGFsc3BhY2UsIGdyYW5kX3RvdGFscy5uYmxvY2tzLAor CQkJCWdyYW5kX3RvdGFscy5mcmVlc3BhY2UsIGdyYW5kX3RvdGFscy5mcmVlY2h1bmtzLAor CQkJCWdyYW5kX3RvdGFscy50b3RhbHNwYWNlIC0gZ3JhbmRfdG90YWxzLmZyZWVzcGFjZSk7 CisJZWxzZQogCi0JZnByaW50ZihzdGRlcnIsCi0JCQkiR3JhbmQgdG90YWw6ICV6dSBieXRl cyBpbiAlemQgYmxvY2tzOyAlenUgZnJlZSAoJXpkIGNodW5rcyk7ICV6dSB1c2VkXG4iLAot CQkJZ3JhbmRfdG90YWxzLnRvdGFsc3BhY2UsIGdyYW5kX3RvdGFscy5uYmxvY2tzLAotCQkJ Z3JhbmRfdG90YWxzLmZyZWVzcGFjZSwgZ3JhbmRfdG90YWxzLmZyZWVjaHVua3MsCi0JCQln cmFuZF90b3RhbHMudG90YWxzcGFjZSAtIGdyYW5kX3RvdGFscy5mcmVlc3BhY2UpOworCQkv KgorCQkgKiBVc2UgTE9HX1NFUlZFUl9PTkxZIHRvIHByZXZlbnQgdGhlIG1lbW9yeSBjb250 ZXh0cyBmcm9tIGJlaW5nIHNlbnQKKwkJICogdG8gdGhlIGNvbm5lY3RlZCBjbGllbnQuCisJ CSAqCisJCSAqIFdlIGRvbid0IGJ1ZmZlciB0aGUgaW5mb3JtYXRpb24gYWJvdXQgYWxsIG1l bW9yeSBjb250ZXh0cyBpbiBhCisJCSAqIGJhY2tlbmQgaW50byBTdHJpbmdJbmZvIGFuZCBs b2cgaXQgYXMgb25lIG1lc3NhZ2UuIE90aGVyd2lzZSB3aGljaAorCQkgKiBtYXkgcmVxdWly ZSB0aGUgYnVmZmVyIHRvIGJlIGVubGFyZ2VkIHZlcnkgbXVjaCBhbmQgbGVhZCB0byBPT00K KwkJICogZXJyb3Igc2luY2UgdGhlcmUgY2FuIGJlIGEgbGFyZ2UgbnVtYmVyIG9mIG1lbW9y eSBjb250ZXh0cyBpbiBhCisJCSAqIGJhY2tlbmQuIEluc3RlYWQsIHdlIGxvZyBvbmUgbWVz c2FnZSBwZXIgbWVtb3J5IGNvbnRleHQuCisJCSAqLworCQllcmVwb3J0KExPR19TRVJWRVJf T05MWSwKKwkJCQkoZXJyaGlkZXN0bXQodHJ1ZSksCisJCQkJIGVycmhpZGVjb250ZXh0KHRy dWUpLAorCQkJCSBlcnJtc2dfaW50ZXJuYWwoIkdyYW5kIHRvdGFsOiAlenUgYnl0ZXMgaW4g JXpkIGJsb2NrczsgJXp1IGZyZWUgKCV6ZCBjaHVua3MpOyAlenUgdXNlZCIsCisJCQkJCQkJ CSBncmFuZF90b3RhbHMudG90YWxzcGFjZSwgZ3JhbmRfdG90YWxzLm5ibG9ja3MsCisJCQkJ CQkJCSBncmFuZF90b3RhbHMuZnJlZXNwYWNlLCBncmFuZF90b3RhbHMuZnJlZWNodW5rcywK KwkJCQkJCQkJIGdyYW5kX3RvdGFscy50b3RhbHNwYWNlIC0gZ3JhbmRfdG90YWxzLmZyZWVz cGFjZSkpKTsKIH0KIAogLyoKQEAgLTUzMyw3ICs1NjMsOCBAQCBNZW1vcnlDb250ZXh0U3Rh dHNEZXRhaWwoTWVtb3J5Q29udGV4dCBjb250ZXh0LCBpbnQgbWF4X2NoaWxkcmVuKQogc3Rh dGljIHZvaWQKIE1lbW9yeUNvbnRleHRTdGF0c0ludGVybmFsKE1lbW9yeUNvbnRleHQgY29u dGV4dCwgaW50IGxldmVsLAogCQkJCQkJICAgYm9vbCBwcmludCwgaW50IG1heF9jaGlsZHJl biwKLQkJCQkJCSAgIE1lbW9yeUNvbnRleHRDb3VudGVycyAqdG90YWxzKQorCQkJCQkJICAg TWVtb3J5Q29udGV4dENvdW50ZXJzICp0b3RhbHMsCisJCQkJCQkgICBib29sIHByaW50X3Rv X3N0ZGVycikKIHsKIAlNZW1vcnlDb250ZXh0Q291bnRlcnMgbG9jYWxfdG90YWxzOwogCU1l bW9yeUNvbnRleHQgY2hpbGQ7CkBAIC01NDUsNyArNTc2LDcgQEAgTWVtb3J5Q29udGV4dFN0 YXRzSW50ZXJuYWwoTWVtb3J5Q29udGV4dCBjb250ZXh0LCBpbnQgbGV2ZWwsCiAJY29udGV4 dC0+bWV0aG9kcy0+c3RhdHMoY29udGV4dCwKIAkJCQkJCQlwcmludCA/IE1lbW9yeUNvbnRl eHRTdGF0c1ByaW50IDogTlVMTCwKIAkJCQkJCQkodm9pZCAqKSAmbGV2ZWwsCi0JCQkJCQkJ dG90YWxzKTsKKwkJCQkJCQl0b3RhbHMsIHByaW50X3RvX3N0ZGVycik7CiAKIAkvKgogCSAq IEV4YW1pbmUgY2hpbGRyZW4uICBJZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG1heF9jaGlsZHJl biBvZiB0aGVtLCB3ZSBkbwpAQCAtNTYwLDExICs1OTEsMTMgQEAgTWVtb3J5Q29udGV4dFN0 YXRzSW50ZXJuYWwoTWVtb3J5Q29udGV4dCBjb250ZXh0LCBpbnQgbGV2ZWwsCiAJCWlmIChp Y2hpbGQgPCBtYXhfY2hpbGRyZW4pCiAJCQlNZW1vcnlDb250ZXh0U3RhdHNJbnRlcm5hbChj aGlsZCwgbGV2ZWwgKyAxLAogCQkJCQkJCQkJICAgcHJpbnQsIG1heF9jaGlsZHJlbiwKLQkJ CQkJCQkJCSAgIHRvdGFscyk7CisJCQkJCQkJCQkgICB0b3RhbHMsCisJCQkJCQkJCQkgICBw cmludF90b19zdGRlcnIpOwogCQllbHNlCiAJCQlNZW1vcnlDb250ZXh0U3RhdHNJbnRlcm5h bChjaGlsZCwgbGV2ZWwgKyAxLAogCQkJCQkJCQkJICAgZmFsc2UsIG1heF9jaGlsZHJlbiwK LQkJCQkJCQkJCSAgICZsb2NhbF90b3RhbHMpOworCQkJCQkJCQkJICAgJmxvY2FsX3RvdGFs cywKKwkJCQkJCQkJCSAgIHByaW50X3RvX3N0ZGVycik7CiAJfQogCiAJLyogRGVhbCB3aXRo IGV4Y2VzcyBjaGlsZHJlbiAqLwpAQCAtNTcyLDE4ICs2MDUsMzMgQEAgTWVtb3J5Q29udGV4 dFN0YXRzSW50ZXJuYWwoTWVtb3J5Q29udGV4dCBjb250ZXh0LCBpbnQgbGV2ZWwsCiAJewog CQlpZiAocHJpbnQpCiAJCXsKLQkJCWludAkJCWk7Ci0KLQkJCWZvciAoaSA9IDA7IGkgPD0g bGV2ZWw7IGkrKykKLQkJCQlmcHJpbnRmKHN0ZGVyciwgIiAgIik7Ci0JCQlmcHJpbnRmKHN0 ZGVyciwKLQkJCQkJIiVkIG1vcmUgY2hpbGQgY29udGV4dHMgY29udGFpbmluZyAlenUgdG90 YWwgaW4gJXpkIGJsb2NrczsgJXp1IGZyZWUgKCV6ZCBjaHVua3MpOyAlenUgdXNlZFxuIiwK LQkJCQkJaWNoaWxkIC0gbWF4X2NoaWxkcmVuLAotCQkJCQlsb2NhbF90b3RhbHMudG90YWxz cGFjZSwKLQkJCQkJbG9jYWxfdG90YWxzLm5ibG9ja3MsCi0JCQkJCWxvY2FsX3RvdGFscy5m cmVlc3BhY2UsCi0JCQkJCWxvY2FsX3RvdGFscy5mcmVlY2h1bmtzLAotCQkJCQlsb2NhbF90 b3RhbHMudG90YWxzcGFjZSAtIGxvY2FsX3RvdGFscy5mcmVlc3BhY2UpOworCQkJaWYgKHBy aW50X3RvX3N0ZGVycikKKwkJCXsKKwkJCQlpbnQJCQlpOworCisJCQkJZm9yIChpID0gMDsg aSA8PSBsZXZlbDsgaSsrKQorCQkJCQlmcHJpbnRmKHN0ZGVyciwgIiAgIik7CisJCQkJZnBy aW50ZihzdGRlcnIsCisJCQkJCQkiJWQgbW9yZSBjaGlsZCBjb250ZXh0cyBjb250YWluaW5n ICV6dSB0b3RhbCBpbiAlemQgYmxvY2tzOyAlenUgZnJlZSAoJXpkIGNodW5rcyk7ICV6dSB1 c2VkXG4iLAorCQkJCQkJaWNoaWxkIC0gbWF4X2NoaWxkcmVuLAorCQkJCQkJbG9jYWxfdG90 YWxzLnRvdGFsc3BhY2UsCisJCQkJCQlsb2NhbF90b3RhbHMubmJsb2NrcywKKwkJCQkJCWxv Y2FsX3RvdGFscy5mcmVlc3BhY2UsCisJCQkJCQlsb2NhbF90b3RhbHMuZnJlZWNodW5rcywK KwkJCQkJCWxvY2FsX3RvdGFscy50b3RhbHNwYWNlIC0gbG9jYWxfdG90YWxzLmZyZWVzcGFj ZSk7CisJCQl9CisJCQllbHNlCisJCQkJZXJlcG9ydChMT0dfU0VSVkVSX09OTFksCisJCQkJ CQkoZXJyaGlkZXN0bXQodHJ1ZSksCisJCQkJCQkgZXJyaGlkZWNvbnRleHQodHJ1ZSksCisJ CQkJCQkgZXJybXNnX2ludGVybmFsKCJsZXZlbDogJWQ7ICVkIG1vcmUgY2hpbGQgY29udGV4 dHMgY29udGFpbmluZyAlenUgdG90YWwgaW4gJXpkIGJsb2NrczsgJXp1IGZyZWUgKCV6ZCBj aHVua3MpOyAlenUgdXNlZCIsCisJCQkJCQkJCQkJIGxldmVsLAorCQkJCQkJCQkJCSBpY2hp bGQgLSBtYXhfY2hpbGRyZW4sCisJCQkJCQkJCQkJIGxvY2FsX3RvdGFscy50b3RhbHNwYWNl LAorCQkJCQkJCQkJCSBsb2NhbF90b3RhbHMubmJsb2NrcywKKwkJCQkJCQkJCQkgbG9jYWxf dG90YWxzLmZyZWVzcGFjZSwKKwkJCQkJCQkJCQkgbG9jYWxfdG90YWxzLmZyZWVjaHVua3Ms CisJCQkJCQkJCQkJIGxvY2FsX3RvdGFscy50b3RhbHNwYWNlIC0gbG9jYWxfdG90YWxzLmZy ZWVzcGFjZSkpKTsKIAkJfQogCiAJCWlmICh0b3RhbHMpCkBAIC02MDUsMTEgKzY1MywxMyBA QCBNZW1vcnlDb250ZXh0U3RhdHNJbnRlcm5hbChNZW1vcnlDb250ZXh0IGNvbnRleHQsIGlu dCBsZXZlbCwKICAqLwogc3RhdGljIHZvaWQKIE1lbW9yeUNvbnRleHRTdGF0c1ByaW50KE1l bW9yeUNvbnRleHQgY29udGV4dCwgdm9pZCAqcGFzc3RocnUsCi0JCQkJCQljb25zdCBjaGFy ICpzdGF0c19zdHJpbmcpCisJCQkJCQljb25zdCBjaGFyICpzdGF0c19zdHJpbmcsCisJCQkJ CQlib29sIHByaW50X3RvX3N0ZGVycikKIHsKIAlpbnQJCQlsZXZlbCA9ICooaW50ICopIHBh c3N0aHJ1OwogCWNvbnN0IGNoYXIgKm5hbWUgPSBjb250ZXh0LT5uYW1lOwogCWNvbnN0IGNo YXIgKmlkZW50ID0gY29udGV4dC0+aWRlbnQ7CisJY2hhcgkJdHJ1bmNhdGVkX2lkZW50WzEx MF07CiAJaW50CQkJaTsKIAogCS8qCkBAIC02MjMsOSArNjczLDggQEAgTWVtb3J5Q29udGV4 dFN0YXRzUHJpbnQoTWVtb3J5Q29udGV4dCBjb250ZXh0LCB2b2lkICpwYXNzdGhydSwKIAkJ aWRlbnQgPSBOVUxMOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBsZXZlbDsgaSsrKQotCQlm cHJpbnRmKHN0ZGVyciwgIiAgIik7Ci0JZnByaW50ZihzdGRlcnIsICIlczogJXMiLCBuYW1l LCBzdGF0c19zdHJpbmcpOworCXRydW5jYXRlZF9pZGVudFswXSA9ICdcMCc7CisKIAlpZiAo aWRlbnQpCiAJewogCQkvKgpAQCAtNjM3LDI0ICs2ODYsNDEgQEAgTWVtb3J5Q29udGV4dFN0 YXRzUHJpbnQoTWVtb3J5Q29udGV4dCBjb250ZXh0LCB2b2lkICpwYXNzdGhydSwKIAkJaW50 CQkJaWRsZW4gPSBzdHJsZW4oaWRlbnQpOwogCQlib29sCQl0cnVuY2F0ZWQgPSBmYWxzZTsK IAorCQlzdHJjcHkodHJ1bmNhdGVkX2lkZW50LCAiOiAiKTsKKwkJaSA9IHN0cmxlbih0cnVu Y2F0ZWRfaWRlbnQpOworCiAJCWlmIChpZGxlbiA+IDEwMCkKIAkJewogCQkJaWRsZW4gPSBw Z19tYmNsaXBsZW4oaWRlbnQsIGlkbGVuLCAxMDApOwogCQkJdHJ1bmNhdGVkID0gdHJ1ZTsK IAkJfQotCQlmcHJpbnRmKHN0ZGVyciwgIjogIik7CisKIAkJd2hpbGUgKGlkbGVuLS0gPiAw KQogCQl7CiAJCQl1bnNpZ25lZCBjaGFyIGMgPSAqaWRlbnQrKzsKIAogCQkJaWYgKGMgPCAn ICcpCiAJCQkJYyA9ICcgJzsKLQkJCWZwdXRjKGMsIHN0ZGVycik7CisJCQl0cnVuY2F0ZWRf aWRlbnRbaSsrXSA9IGM7CiAJCX0KKwkJdHJ1bmNhdGVkX2lkZW50W2ldID0gJ1wwJzsKKwog CQlpZiAodHJ1bmNhdGVkKQotCQkJZnByaW50ZihzdGRlcnIsICIuLi4iKTsKKwkJCXN0cmNh dCh0cnVuY2F0ZWRfaWRlbnQsICIuLi4iKTsKKwl9CisKKwlpZiAocHJpbnRfdG9fc3RkZXJy KQorCXsKKwkJZm9yIChpID0gMDsgaSA8IGxldmVsOyBpKyspCisJCQlmcHJpbnRmKHN0ZGVy ciwgIiAgIik7CisJCWZwcmludGYoc3RkZXJyLCAiJXM6ICVzJXNcbiIsIG5hbWUsIHN0YXRz X3N0cmluZywgdHJ1bmNhdGVkX2lkZW50KTsKIAl9Ci0JZnB1dGMoJ1xuJywgc3RkZXJyKTsK KwllbHNlCisJCWVyZXBvcnQoTE9HX1NFUlZFUl9PTkxZLAorCQkJCShlcnJoaWRlc3RtdCh0 cnVlKSwKKwkJCQkgZXJyaGlkZWNvbnRleHQodHJ1ZSksCisJCQkJIGVycm1zZ19pbnRlcm5h bCgibGV2ZWw6ICVkOyAlczogJXMlcyIsCisJCQkJCQkJCSBsZXZlbCwgbmFtZSwgc3RhdHNf c3RyaW5nLCB0cnVuY2F0ZWRfaWRlbnQpKSk7CiB9CiAKIC8qCkBAIC05NDYsNiArMTAxMiw1 MiBAQCBNZW1vcnlDb250ZXh0QWxsb2NFeHRlbmRlZChNZW1vcnlDb250ZXh0IGNvbnRleHQs IFNpemUgc2l6ZSwgaW50IGZsYWdzKQogCXJldHVybiByZXQ7CiB9CiAKKy8qCisgKiBIYW5k bGVMb2dNZW1vcnlDb250ZXh0SW50ZXJydXB0CisgKgkJSGFuZGxlIHJlY2VpcHQgb2YgYW4g aW50ZXJydXB0IGluZGljYXRpbmcgbG9nZ2luZyBvZiBtZW1vcnkKKyAqCQljb250ZXh0cy4K KyAqCisgKiBBbGwgdGhlIGFjdHVhbCB3b3JrIGlzIGRlZmVycmVkIHRvIFByb2Nlc3NMb2dN ZW1vcnlDb250ZXh0SW50ZXJydXB0KCksCisgKiBiZWNhdXNlIHdlIGNhbm5vdCBzYWZlbHkg ZW1pdCBhIGxvZyBtZXNzYWdlIGluc2lkZSB0aGUgc2lnbmFsIGhhbmRsZXIuCisgKi8KK3Zv aWQKK0hhbmRsZUxvZ01lbW9yeUNvbnRleHRJbnRlcnJ1cHQodm9pZCkKK3sKKwlJbnRlcnJ1 cHRQZW5kaW5nID0gdHJ1ZTsKKwlMb2dNZW1vcnlDb250ZXh0UGVuZGluZyA9IHRydWU7CisJ LyogbGF0Y2ggd2lsbCBiZSBzZXQgYnkgcHJvY3NpZ25hbF9zaWd1c3IxX2hhbmRsZXIgKi8K K30KKworLyoKKyAqIFByb2Nlc3NMb2dNZW1vcnlDb250ZXh0SW50ZXJydXB0CisgKiAJCVBl cmZvcm0gbG9nZ2luZyBvZiBtZW1vcnkgY29udGV4dHMgb2YgdGhpcyBiYWNrZW5kIHByb2Nl c3MuCisgKgorICogQW55IGJhY2tlbmQgdGhhdCBwYXJ0aWNpcGF0ZXMgaW4gUHJvY1NpZ25h bCBzaWduYWxpbmcgbXVzdCBhcnJhbmdlCisgKiB0byBjYWxsIHRoaXMgZnVuY3Rpb24gaWYg d2Ugc2VlIExvZ01lbW9yeUNvbnRleHRQZW5kaW5nIHNldC4KKyAqIEl0IGlzIGNhbGxlZCBm cm9tIENIRUNLX0ZPUl9JTlRFUlJVUFRTKCksIHdoaWNoIGlzIGVub3VnaCBiZWNhdXNlCisg KiB0aGUgdGFyZ2V0IHByb2Nlc3MgZm9yIGxvZ2dpbmcgb2YgbWVtb3J5IGNvbnRleHRzIGlz IGEgYmFja2VuZC4KKyAqLwordm9pZAorUHJvY2Vzc0xvZ01lbW9yeUNvbnRleHRJbnRlcnJ1 cHQodm9pZCkKK3sKKwlMb2dNZW1vcnlDb250ZXh0UGVuZGluZyA9IGZhbHNlOworCisJZXJl cG9ydChMT0csCisJCQkoZXJybXNnKCJsb2dnaW5nIG1lbW9yeSBjb250ZXh0cyBvZiBQSUQg JWQiLCBNeVByb2NQaWQpKSk7CisKKwkvKgorCSAqIFdoZW4gYSBiYWNrZW5kIHByb2Nlc3Mg aXMgY29uc3VtaW5nIGh1Z2UgbWVtb3J5LCBsb2dnaW5nIGFsbCBpdHMgbWVtb3J5CisJICog Y29udGV4dHMgbWlnaHQgb3ZlcnJ1biBhdmFpbGFibGUgZGlzayBzcGFjZS4gVG8gcHJldmVu dCB0aGlzLCB3ZSBsaW1pdAorCSAqIHRoZSBudW1iZXIgb2YgY2hpbGQgY29udGV4dHMgdG8g bG9nIHBlciBwYXJlbnQgdG8gMTAwLgorCSAqCisJICogQXMgd2l0aCBNZW1vcnlDb250ZXh0 U3RhdHMoKSwgd2Ugc3VwcG9zZSB0aGF0IHByYWN0aWNhbCBjYXNlcyB3aGVyZSB0aGUKKwkg KiBkdW1wIGdldHMgbG9uZyB3aWxsIHR5cGljYWxseSBiZSBodWdlIG51bWJlcnMgb2Ygc2li bGluZ3MgdW5kZXIgdGhlCisJICogc2FtZSBwYXJlbnQgY29udGV4dDsgd2hpbGUgdGhlIGFk ZGl0aW9uYWwgZGVidWdnaW5nIHZhbHVlIGZyb20gc2VlaW5nCisJICogZGV0YWlscyBhYm91 dCBpbmRpdmlkdWFsIHNpYmxpbmdzIGJleW9uZCAxMDAgd2lsbCBub3QgYmUgbGFyZ2UuCisJ ICovCisJTWVtb3J5Q29udGV4dFN0YXRzRGV0YWlsKFRvcE1lbW9yeUNvbnRleHQsIDEwMCwg ZmFsc2UpOworfQorCiB2b2lkICoKIHBhbGxvYyhTaXplIHNpemUpCiB7CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC91dGlscy9tbWdyL3NsYWIuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL21t Z3Ivc2xhYi5jCmluZGV4IDkyMTNiZTdjOTUuLjU1M2RkN2Y2NjcgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3V0aWxzL21tZ3Ivc2xhYi5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21t Z3Ivc2xhYi5jCkBAIC0xMzUsNyArMTM1LDggQEAgc3RhdGljIFNpemUgU2xhYkdldENodW5r U3BhY2UoTWVtb3J5Q29udGV4dCBjb250ZXh0LCB2b2lkICpwb2ludGVyKTsKIHN0YXRpYyBi b29sIFNsYWJJc0VtcHR5KE1lbW9yeUNvbnRleHQgY29udGV4dCk7CiBzdGF0aWMgdm9pZCBT bGFiU3RhdHMoTWVtb3J5Q29udGV4dCBjb250ZXh0LAogCQkJCQkgIE1lbW9yeVN0YXRzUHJp bnRGdW5jIHByaW50ZnVuYywgdm9pZCAqcGFzc3RocnUsCi0JCQkJCSAgTWVtb3J5Q29udGV4 dENvdW50ZXJzICp0b3RhbHMpOworCQkJCQkgIE1lbW9yeUNvbnRleHRDb3VudGVycyAqdG90 YWxzLAorCQkJCQkgIGJvb2wgcHJpbnRfdG9fc3RkZXJyKTsKICNpZmRlZiBNRU1PUllfQ09O VEVYVF9DSEVDS0lORwogc3RhdGljIHZvaWQgU2xhYkNoZWNrKE1lbW9yeUNvbnRleHQgY29u dGV4dCk7CiAjZW5kaWYKQEAgLTYzMiwxMSArNjMzLDEzIEBAIFNsYWJJc0VtcHR5KE1lbW9y eUNvbnRleHQgY29udGV4dCkKICAqIHByaW50ZnVuYzogaWYgbm90IE5VTEwsIHBhc3MgYSBo dW1hbi1yZWFkYWJsZSBzdGF0cyBzdHJpbmcgdG8gdGhpcy4KICAqIHBhc3N0aHJ1OiBwYXNz IHRoaXMgcG9pbnRlciB0aHJvdWdoIHRvIHByaW50ZnVuYy4KICAqIHRvdGFsczogaWYgbm90 IE5VTEwsIGFkZCBzdGF0cyBhYm91dCB0aGlzIGNvbnRleHQgaW50byAqdG90YWxzLgorICog cHJpbnRfdG9fc3RkZXJyOiBwcmludCBzdGF0cyB0byBzdGRlcnIgaWYgdHJ1ZSwgZWxvZyBv dGhlcndpc2UuCiAgKi8KIHN0YXRpYyB2b2lkCiBTbGFiU3RhdHMoTWVtb3J5Q29udGV4dCBj b250ZXh0LAogCQkgIE1lbW9yeVN0YXRzUHJpbnRGdW5jIHByaW50ZnVuYywgdm9pZCAqcGFz c3RocnUsCi0JCSAgTWVtb3J5Q29udGV4dENvdW50ZXJzICp0b3RhbHMpCisJCSAgTWVtb3J5 Q29udGV4dENvdW50ZXJzICp0b3RhbHMsCisJCSAgYm9vbCBwcmludF90b19zdGRlcnIpCiB7 CiAJU2xhYkNvbnRleHQgKnNsYWIgPSBjYXN0Tm9kZShTbGFiQ29udGV4dCwgY29udGV4dCk7 CiAJU2l6ZQkJbmJsb2NrcyA9IDA7CkBAIC02NzEsNyArNjc0LDcgQEAgU2xhYlN0YXRzKE1l bW9yeUNvbnRleHQgY29udGV4dCwKIAkJCQkgIiV6dSB0b3RhbCBpbiAlemQgYmxvY2tzOyAl enUgZnJlZSAoJXpkIGNodW5rcyk7ICV6dSB1c2VkIiwKIAkJCQkgdG90YWxzcGFjZSwgbmJs b2NrcywgZnJlZXNwYWNlLCBmcmVlY2h1bmtzLAogCQkJCSB0b3RhbHNwYWNlIC0gZnJlZXNw YWNlKTsKLQkJcHJpbnRmdW5jKGNvbnRleHQsIHBhc3N0aHJ1LCBzdGF0c19zdHJpbmcpOwor CQlwcmludGZ1bmMoY29udGV4dCwgcGFzc3RocnUsIHN0YXRzX3N0cmluZywgcHJpbnRfdG9f c3RkZXJyKTsKIAl9CiAKIAlpZiAodG90YWxzKQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQK aW5kZXggNjlmZmQwYzNmNC4uNzNjMjJjOGI0ZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2Mu ZGF0CkBAIC03OTQ2LDYgKzc5NDYsMTIgQEAKICAgcHJvYXJnbmFtZXMgPT4gJ3tuYW1lLCBp ZGVudCwgcGFyZW50LCBsZXZlbCwgdG90YWxfYnl0ZXMsIHRvdGFsX25ibG9ja3MsIGZyZWVf Ynl0ZXMsIGZyZWVfY2h1bmtzLCB1c2VkX2J5dGVzfScsCiAgIHByb3NyYyA9PiAncGdfZ2V0 X2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzJyB9LAogCisjIGxvZ2dpbmcgbWVtb3J5IGNvbnRl eHRzIG9mIHRoZSBzcGVjaWZpZWQgYmFja2VuZAoreyBvaWQgPT4gJzQ1NDMnLCBkZXNjciA9 PiAnbG9nIG1lbW9yeSBjb250ZXh0cyBvZiB0aGUgc3BlY2lmaWVkIGJhY2tlbmQnLAorICBw cm9uYW1lID0+ICdwZ19sb2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHMnLAorICBwcm92b2xh dGlsZSA9PiAndicsIHByb3JldHR5cGUgPT4gJ2Jvb2wnLAorICBwcm9hcmd0eXBlcyA9PiAn aW50NCcsIHByb3NyYyA9PiAncGdfbG9nX2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzJyB9LAor CiAjIG5vbi1wZXJzaXN0ZW50IHNlcmllcyBnZW5lcmF0b3IKIHsgb2lkID0+ICcxMDY2Jywg ZGVzY3IgPT4gJ25vbi1wZXJzaXN0ZW50IHNlcmllcyBnZW5lcmF0b3InLAogICBwcm9uYW1l ID0+ICdnZW5lcmF0ZV9zZXJpZXMnLCBwcm9yb3dzID0+ICcxMDAwJywKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oIGIvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmgKaW5k ZXggNmY4MjUxZTBiMC4uOTUyMDJkMzdhZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbWlz Y2FkbWluLmgKKysrIGIvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmgKQEAgLTg0LDYgKzg0LDcg QEAgZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBQcm9jRGllUGVu ZGluZzsKIGV4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSBzaWdfYXRvbWljX3QgSWRsZUlu VHJhbnNhY3Rpb25TZXNzaW9uVGltZW91dFBlbmRpbmc7CiBleHRlcm4gUEdETExJTVBPUlQg dm9sYXRpbGUgc2lnX2F0b21pY190IElkbGVTZXNzaW9uVGltZW91dFBlbmRpbmc7CiBleHRl cm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IFByb2NTaWduYWxCYXJyaWVy UGVuZGluZzsKK2V4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSBzaWdfYXRvbWljX3QgTG9n TWVtb3J5Q29udGV4dFBlbmRpbmc7CiAKIGV4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSBz aWdfYXRvbWljX3QgQ2hlY2tDbGllbnRDb25uZWN0aW9uUGVuZGluZzsKIGV4dGVybiBQR0RM TElNUE9SVCB2b2xhdGlsZSBzaWdfYXRvbWljX3QgQ2xpZW50Q29ubmVjdGlvbkxvc3Q7CmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9tZW1ub2Rlcy5oIGIvc3JjL2luY2x1ZGUv bm9kZXMvbWVtbm9kZXMuaAppbmRleCA5MzMxZWY4MGZkLi5lNmE3NTdkNmEwIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9tZW1ub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25v ZGVzL21lbW5vZGVzLmgKQEAgLTUyLDcgKzUyLDggQEAgdHlwZWRlZiBzdHJ1Y3QgTWVtb3J5 Q29udGV4dENvdW50ZXJzCiAgKi8KIAogdHlwZWRlZiB2b2lkICgqTWVtb3J5U3RhdHNQcmlu dEZ1bmMpIChNZW1vcnlDb250ZXh0IGNvbnRleHQsIHZvaWQgKnBhc3N0aHJ1LAotCQkJCQkJ CQkJICBjb25zdCBjaGFyICpzdGF0c19zdHJpbmcpOworCQkJCQkJCQkJICBjb25zdCBjaGFy ICpzdGF0c19zdHJpbmcsCisJCQkJCQkJCQkgIGJvb2wgcHJpbnRfdG9fc3RkZXJyKTsKIAog dHlwZWRlZiBzdHJ1Y3QgTWVtb3J5Q29udGV4dE1ldGhvZHMKIHsKQEAgLTY2LDcgKzY3LDgg QEAgdHlwZWRlZiBzdHJ1Y3QgTWVtb3J5Q29udGV4dE1ldGhvZHMKIAlib29sCQkoKmlzX2Vt cHR5KSAoTWVtb3J5Q29udGV4dCBjb250ZXh0KTsKIAl2b2lkCQkoKnN0YXRzKSAoTWVtb3J5 Q29udGV4dCBjb250ZXh0LAogCQkJCQkJICBNZW1vcnlTdGF0c1ByaW50RnVuYyBwcmludGZ1 bmMsIHZvaWQgKnBhc3N0aHJ1LAotCQkJCQkJICBNZW1vcnlDb250ZXh0Q291bnRlcnMgKnRv dGFscyk7CisJCQkJCQkgIE1lbW9yeUNvbnRleHRDb3VudGVycyAqdG90YWxzLAorCQkJCQkJ ICBib29sIHByaW50X3RvX3N0ZGVycik7CiAjaWZkZWYgTUVNT1JZX0NPTlRFWFRfQ0hFQ0tJ TkcKIAl2b2lkCQkoKmNoZWNrKSAoTWVtb3J5Q29udGV4dCBjb250ZXh0KTsKICNlbmRpZgpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFsLmggYi9zcmMvaW5j bHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaAppbmRleCA0YWU3ZGMzM2I4Li5lZWMxODZiZTJl IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaAorKysgYi9z cmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaApAQCAtMzQsNiArMzQsNyBAQCB0eXBl ZGVmIGVudW0KIAlQUk9DU0lHX1BBUkFMTEVMX01FU1NBR0UsCS8qIG1lc3NhZ2UgZnJvbSBj b29wZXJhdGluZyBwYXJhbGxlbCBiYWNrZW5kICovCiAJUFJPQ1NJR19XQUxTTkRfSU5JVF9T VE9QUElORywJLyogYXNrIHdhbHNlbmRlcnMgdG8gcHJlcGFyZSBmb3Igc2h1dGRvd24gICov CiAJUFJPQ1NJR19CQVJSSUVSLAkJCS8qIGdsb2JhbCBiYXJyaWVyIGludGVycnVwdCAgKi8K KwlQUk9DU0lHX0xPR19NRU1PUllfQ09OVEVYVCwgLyogYXNrIGJhY2tlbmQgdG8gbG9nIHRo ZSBtZW1vcnkgY29udGV4dHMgKi8KIAogCS8qIFJlY292ZXJ5IGNvbmZsaWN0IHJlYXNvbnMg Ki8KIAlQUk9DU0lHX1JFQ09WRVJZX0NPTkZMSUNUX0RBVEFCQVNFLApkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvdXRpbHMvbWVtdXRpbHMuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL21lbXV0 aWxzLmgKaW5kZXggMzZhYWU0ZTUxYy4uZmY4NzIyNzRkNCAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvdXRpbHMvbWVtdXRpbHMuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9tZW11dGls cy5oCkBAIC04NCw3ICs4NCw4IEBAIGV4dGVybiBNZW1vcnlDb250ZXh0IE1lbW9yeUNvbnRl eHRHZXRQYXJlbnQoTWVtb3J5Q29udGV4dCBjb250ZXh0KTsKIGV4dGVybiBib29sIE1lbW9y eUNvbnRleHRJc0VtcHR5KE1lbW9yeUNvbnRleHQgY29udGV4dCk7CiBleHRlcm4gU2l6ZSBN ZW1vcnlDb250ZXh0TWVtQWxsb2NhdGVkKE1lbW9yeUNvbnRleHQgY29udGV4dCwgYm9vbCBy ZWN1cnNlKTsKIGV4dGVybiB2b2lkIE1lbW9yeUNvbnRleHRTdGF0cyhNZW1vcnlDb250ZXh0 IGNvbnRleHQpOwotZXh0ZXJuIHZvaWQgTWVtb3J5Q29udGV4dFN0YXRzRGV0YWlsKE1lbW9y eUNvbnRleHQgY29udGV4dCwgaW50IG1heF9jaGlsZHJlbik7CitleHRlcm4gdm9pZCBNZW1v cnlDb250ZXh0U3RhdHNEZXRhaWwoTWVtb3J5Q29udGV4dCBjb250ZXh0LCBpbnQgbWF4X2No aWxkcmVuLAorCQkJCQkJCQkJIGJvb2wgcHJpbnRfdG9fc3RkZXJyKTsKIGV4dGVybiB2b2lk IE1lbW9yeUNvbnRleHRBbGxvd0luQ3JpdGljYWxTZWN0aW9uKE1lbW9yeUNvbnRleHQgY29u dGV4dCwKIAkJCQkJCQkJCQkJCWJvb2wgYWxsb3cpOwogCkBAIC0xNDQsNiArMTQ1LDggQEAg ZXh0ZXJuIHZvaWQgTWVtb3J5Q29udGV4dENyZWF0ZShNZW1vcnlDb250ZXh0IG5vZGUsCiAJ CQkJCQkJCU1lbW9yeUNvbnRleHQgcGFyZW50LAogCQkJCQkJCQljb25zdCBjaGFyICpuYW1l KTsKIAorZXh0ZXJuIHZvaWQgSGFuZGxlTG9nTWVtb3J5Q29udGV4dEludGVycnVwdCh2b2lk KTsKK2V4dGVybiB2b2lkIFByb2Nlc3NMb2dNZW1vcnlDb250ZXh0SW50ZXJydXB0KHZvaWQp OwogCiAvKgogICogTWVtb3J5LWNvbnRleHQtdHlwZS1zcGVjaWZpYyBmdW5jdGlvbnMKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvbWlzY19mdW5jdGlvbnMub3V0 IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9taXNjX2Z1bmN0aW9ucy5vdXQKaW5kZXgg ZDNhY2I5OGQwNC4uZTg0NTA0MmQzOCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9taXNjX2Z1bmN0aW9ucy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9taXNjX2Z1bmN0aW9ucy5vdXQKQEAgLTEzMyw2ICsxMzMsMTkgQEAgRVJST1I6ICBm dW5jdGlvbiBudW1fbnVsbHMoKSBkb2VzIG5vdCBleGlzdAogTElORSAxOiBTRUxFQ1QgbnVt X251bGxzKCk7CiAgICAgICAgICAgICAgICBeCiBISU5UOiAgTm8gZnVuY3Rpb24gbWF0Y2hl cyB0aGUgZ2l2ZW4gbmFtZSBhbmQgYXJndW1lbnQgdHlwZXMuIFlvdSBtaWdodCBuZWVkIHRv IGFkZCBleHBsaWNpdCB0eXBlIGNhc3RzLgorLS0KKy0tIHBnX2xvZ19iYWNrZW5kX21lbW9y eV9jb250ZXh0cygpCistLQorLS0gTWVtb3J5IGNvbnRleHRzIGFyZSBsb2dnZWQgYW5kIHRo ZXkgYXJlIG5vdCByZXR1cm5lZCB0byB0aGUgZnVuY3Rpb24uCistLSBGdXJ0aGVybW9yZSwg dGhlaXIgY29udGVudHMgY2FuIHZhcnkgZGVwZW5kaW5nIG9uIHRoZSB0aW1pbmcuIEhvd2V2 ZXIsCistLSB3ZSBjYW4gYXQgbGVhc3QgdmVyaWZ5IHRoYXQgdGhlIGNvZGUgZG9lc24ndCBm YWlsLgorLS0KK1NFTEVDVCAqIEZST00gcGdfbG9nX2JhY2tlbmRfbWVtb3J5X2NvbnRleHRz KHBnX2JhY2tlbmRfcGlkKCkpOworIHBnX2xvZ19iYWNrZW5kX21lbW9yeV9jb250ZXh0cyAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorCiAtLQog LS0gVGVzdCBzb21lIGJ1aWx0LWluIFNSRnMKIC0tCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9y ZWdyZXNzL3NxbC9taXNjX2Z1bmN0aW9ucy5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9t aXNjX2Z1bmN0aW9ucy5zcWwKaW5kZXggMDk0ZThmODI5Ni4uYTM5ODM0OWFmYyAxMDA2NDQK LS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvbWlzY19mdW5jdGlvbnMuc3FsCisrKyBiL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL21pc2NfZnVuY3Rpb25zLnNxbApAQCAtMzAsNiArMzAsMTUg QEAgU0VMRUNUIG51bV9udWxscyhWQVJJQURJQyAne30nOjppbnRbXSk7CiBTRUxFQ1QgbnVt X25vbm51bGxzKCk7CiBTRUxFQ1QgbnVtX251bGxzKCk7CiAKKy0tCistLSBwZ19sb2dfYmFj a2VuZF9tZW1vcnlfY29udGV4dHMoKQorLS0KKy0tIE1lbW9yeSBjb250ZXh0cyBhcmUgbG9n Z2VkIGFuZCB0aGV5IGFyZSBub3QgcmV0dXJuZWQgdG8gdGhlIGZ1bmN0aW9uLgorLS0gRnVy dGhlcm1vcmUsIHRoZWlyIGNvbnRlbnRzIGNhbiB2YXJ5IGRlcGVuZGluZyBvbiB0aGUgdGlt aW5nLiBIb3dldmVyLAorLS0gd2UgY2FuIGF0IGxlYXN0IHZlcmlmeSB0aGF0IHRoZSBjb2Rl IGRvZXNuJ3QgZmFpbC4KKy0tCitTRUxFQ1QgKiBGUk9NIHBnX2xvZ19iYWNrZW5kX21lbW9y eV9jb250ZXh0cyhwZ19iYWNrZW5kX3BpZCgpKTsKKwogLS0KIC0tIFRlc3Qgc29tZSBidWls dC1pbiBTUkZzCiAtLQotLSAKMi4yNy4wCgo= --------------80D55213E48B7C41B2FDF1C2--