Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sHJSo-005uhw-Qq for pgsql-hackers@arkaria.postgresql.org; Wed, 12 Jun 2024 08:36:16 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1sHJSn-00Eqyf-7i for pgsql-hackers@arkaria.postgresql.org; Wed, 12 Jun 2024 08:36:14 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sHJSm-00EqyX-LC for pgsql-hackers@lists.postgresql.org; Wed, 12 Jun 2024 08:36:13 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by magus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sHJSh-001ErX-P8 for pgsql-hackers@lists.postgresql.org; Wed, 12 Jun 2024 08:36:11 +0000 Received: from mail.postgrespro.ru (unknown [192.168.2.28]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) (Authenticated sender: i.kartyshov@postgrespro.ru) by mail.postgrespro.ru (Postfix/587) with ESMTPSA id E9B08E2102E; Wed, 12 Jun 2024 11:36:05 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1718181366; bh=N6p35UyhJpnFoD7ugCCRRIjiGoLTc/1yYWjwkzZipL0=; h=Date:From:To:Cc:Subject:In-Reply-To:References:User-Agent: Message-ID:From; b=5d0Hf0uBGXnqMAg/TyHExGNDIVE7DkebQ3Pbbu5Qcm0eG9/xDAEIBW57/824qMM5h dARFZLolsw0XvZr3aQFuyo6mimbt5/TYS2xvWAoVdHT91rSt02kUaHhle5p4Mwb1pM W+9RGO18zp7U3BwnMr1W0Cc3lTADve7d6en3rUTezSa+bRVR0Zkbr4HfAZG8gpp4xy A3qXn70xmePHzWIw1rZ73xqhRrn9qGzVfriVBKNxFE8XGv3wQpLhwH08xXd6ymOdDe FFeH/k6k9Uiw/ydEu5lCJNTOhDHB0sq+EV8UIgHUkIkdINn6LjQnGbTdy9qJ8X7Mov fwAyRBBTNwd+A== MIME-Version: 1.0 Date: Wed, 12 Jun 2024 11:36:05 +0300 From: Kartyshov Ivan To: Alexander Korotkov Cc: Heikki Linnakangas , Alvaro Herrera , Pavel Borisov , Bharath Rupireddy , Euler Taveira , Thomas Munro , Peter Eisentraut , Amit Kapila , Dilip Kumar , Peter Smith , pgsql-hackers@lists.postgresql.org Subject: Re: [HACKERS] make async slave to wait for lsn to be replayed In-Reply-To: References: <202404051815.eri4u5q6oj26@alvherre.pgsql> User-Agent: Roundcube Webmail/1.6.7 Message-ID: X-Sender: i.kartyshov@postgrespro.ru Content-Type: multipart/mixed; boundary="=_7a5d8e924515ae2bd1411123e87d4666" X-KSMG-AntiPhishing: NotDetected, bases: 2024/06/12 07:51:00 X-KSMG-AntiSpam-Interceptor-Info: not scanned X-KSMG-AntiSpam-Status: not scanned, disabled by settings X-KSMG-AntiVirus: Kaspersky Secure Mail Gateway, version 2.1.0.7854, bases: 2024/06/12 02:41:00 #25556789 X-KSMG-AntiVirus-Status: NotDetected, skipped X-KSMG-LinksScanning: not scanned, disabled by settings X-KSMG-Message-Action: skipped X-KSMG-Rule-ID: 1 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=_7a5d8e924515ae2bd1411123e87d4666 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8; format=flowed Hi, Alexander, Here, I made some improvements according to your discussion with Heikki. On 2024-04-11 18:09, Alexander Korotkov wrote: > On Thu, Apr 11, 2024 at 1:46 AM Heikki Linnakangas > wrote: >> In a nutshell, it's possible for the loop in WaitForLSN to exit >> without >> cleaning up the process from the heap. I was able to hit that by >> adding >> a delay after the addLSNWaiter() call: >> >> > TRAP: failed Assert("!procInfo->inHeap"), File: "../src/backend/commands/waitlsn.c", Line: 114, PID: 1936152 >> > postgres: heikki postgres [local] CALL(ExceptionalCondition+0xab)[0x55da1f68787b] >> > postgres: heikki postgres [local] CALL(+0x331ec8)[0x55da1f204ec8] >> > postgres: heikki postgres [local] CALL(WaitForLSN+0x139)[0x55da1f2052cc] >> > postgres: heikki postgres [local] CALL(pg_wal_replay_wait+0x18b)[0x55da1f2056e5] >> > postgres: heikki postgres [local] CALL(ExecuteCallStmt+0x46e)[0x55da1f18031a] >> > postgres: heikki postgres [local] CALL(standard_ProcessUtility+0x8cf)[0x55da1f4b26c9] >> >> I think there's a similar race condition if the timeout is reached at >> the same time that the startup process wakes up the process. > > Thank you for catching this. I think WaitForLSN() just needs to call > deleteLSNWaiter() unconditionally after exit from the loop. Fix and add injection point test on this race condition. > On Thu, Apr 11, 2024 at 1:46 AM Heikki Linnakangas > wrote: >> The docs could use some-copy-editing, but just to point out one issue: >> >> > There are also procedures to control the progress of recovery. >> >> That's copy-pasted from an earlier sentence at the table that lists >> functions like pg_promote(), pg_wal_replay_pause(), and >> pg_is_wal_replay_paused(). The pg_wal_replay_wait() doesn't control >> the >> progress of recovery like those functions do, it only causes the >> calling >> backend to wait. Fix documentation and add extra tests on multi-standby replication and cascade replication. -- Ivan Kartyshov Postgres Professional: www.postgrespro.com --=_7a5d8e924515ae2bd1411123e87d4666 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v18-0001-Implement-pg_wal_replay_wait-stored-procedure.patch Content-Disposition: attachment; filename=v18-0001-Implement-pg_wal_replay_wait-stored-procedure.patch; size=39439 Y29tbWl0IGRkYmVlMGU5ZmNkMWYwYTJhNzcwZDQ3NmFjZWY2Nzc0ODZmNjIzNjcKQXV0aG9yOiBp LmthcnR5c2hvdiA8aS5rYXJ0eXNob3ZAcG9zdHJnZXNwcm8ucnU+CkRhdGU6ICAgV2VkIEp1biAx MiAwMToyOTowMCAyMDI0ICswMzAwCgogICAgU3ViamVjdDogW1BBVENIIHYxOF0gSW1wbGVtZW50 IHBnX3dhbF9yZXBsYXlfd2FpdCgpIHN0b3JlZCBwcm9jZWR1cmUKICAgIAogICAgcGdfd2FsX3Jl cGxheV93YWl0KCkgaXMgdG8gYmUgdXNlZCBvbiBzdGFuZGJ5IGFuZCBzcGVjaWZpZXMgd2FpdGlu ZyBmb3IKICAgIHRoZSBzcGVjaWZpYyBXQUwgbG9jYXRpb24gdG8gYmUgcmVwbGF5ZWQgYmVmb3Jl IHN0YXJ0aW5nIHRoZSB0cmFuc2FjdGlvbi4KICAgIFRoaXMgb3B0aW9uIGlzIHVzZWZ1bCB3aGVu IHRoZSB1c2VyIG1ha2VzIHNvbWUgZGF0YSBjaGFuZ2VzIG9uIHByaW1hcnkgYW5kCiAgICBuZWVk cyBhIGd1YXJhbnRlZSB0byBzZWUgdGhlc2UgY2hhbmdlcyBvbiBzdGFuZGJ5LgogICAgCiAgICBU aGUgcXVldWUgb2Ygd2FpdGVycyBpcyBzdG9yZWQgaW4gdGhlIHNoYXJlZCBtZW1vcnkgYXJyYXkg c29ydGVkIGJ5IExTTi4KICAgIER1cmluZyByZXBsYXkgb2YgV0FMIHdhaXRlcnMgd2hvc2UgTFNO cyBhcmUgYWxyZWFkeSByZXBsYXllZCBhcmUgZGVsZXRlZCBmcm9tCiAgICB0aGUgc2hhcmVkIG1l bW9yeSBhcnJheSBhbmQgd29rZW4gdXAgYnkgc2V0dGluZyBvZiB0aGVpciBsYXRjaGVzLgogICAg CiAgICBwZ193YWxfcmVwbGF5X3dhaXQoKSBuZWVkcyB0byB3YWl0IHdpdGhvdXQgYW55IHNuYXBz aG90IGhlbGQuICBPdGhlcndpc2UsCiAgICB0aGUgc25hcHNob3QgY291bGQgcHJldmVudCB0aGUg cmVwbGF5IG9mIFdBTCByZWNvcmRzIGltcGx5aW5nIGEga2luZCBvZgogICAgc2VsZi1kZWFkbG9j ay4gIFRoaXMgaXMgd2h5IGl0IGlzIG9ubHkgcG9zc2libGUgdG8gaW1wbGVtZW50CiAgICBwZ193 YWxfcmVwbGF5X3dhaXQoKSBhcyBhIHByb2NlZHVyZSB3b3JraW5nIGluIGEgbm9uLWF0b21pYyBj b250ZXh0LAogICAgbm90IGEgZnVuY3Rpb24uCiAgICAKICAgIENhdHZlcnNpb24gaXMgYnVtcGVk LgogICAgCiAgICBEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL2ViMTJmOWIwMzg1MWJi MjU4M2FkYWI1ZGY5NTc5YjRiJTQwcG9zdGdyZXNwcm8ucnUKICAgIEF1dGhvcjogS2FydHlzaG92 IEl2YW4sIEFsZXhhbmRlciBLb3JvdGtvdgogICAgUmV2aWV3ZWQtYnk6IE1pY2hhZWwgUGFxdWll ciwgUGV0ZXIgRWlzZW50cmF1dCwgRGlsaXAgS3VtYXIsIEFtaXQgS2FwaWxhCiAgICBSZXZpZXdl ZC1ieTogQWxleGFuZGVyIExha2hpbiwgQmhhcmF0aCBSdXBpcmVkZHksIEV1bGVyIFRhdmVpcmEK ICAgIC0tLQogICAgIGRvYy9zcmMvc2dtbC9mdW5jLnNnbWwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8IDExMiArKysrKysrKysrKysKICAgICBzcmMvYmFja2VuZC9hY2Nlc3Mv dHJhbnNhbS94YWN0LmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDYgKwogICAgIHNyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg NyArCiAgICAgc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMgICAgICAg ICAgICAgICAgIHwgIDExICsrCiAgICAgc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fZnVuY3Rp b25zLnNxbCAgICAgICAgICAgICAgICAgIHwgICAzICsKICAgICBzcmMvYmFja2VuZC9jb21tYW5k cy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDMgKy0KICAgICBzcmMv YmFja2VuZC9jb21tYW5kcy9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg IDEgKwogICAgIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3dhaXRsc24uYyAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8IDM0NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAg ICAgc3JjL2JhY2tlbmQvbGliL3BhaXJpbmdoZWFwLmMgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHwgIDE4ICstCiAgICAgc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHwgICAzICsKICAgICBzcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3Iv cHJvYy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDYgKwogICAgIHNyYy9iYWNrZW5k L3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFtZXMudHh0ICAgICAgICAgICB8ICAgMiArCiAg ICAgc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCAgICAgICAgICAgICAgICAgICAgICAg ICAgIHwgICA1ICsKICAgICBzcmMvaW5jbHVkZS9jb21tYW5kcy93YWl0bHNuLmggICAgICAgICAg ICAgICAgICAgICAgICAgICAgfCAgNzcgKysrKysrKysrCiAgICAgc3JjL2luY2x1ZGUvbGliL3Bh aXJpbmdoZWFwLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzICsKICAgICBzcmMv aW5jbHVkZS9zdG9yYWdlL2x3bG9ja2xpc3QuaCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg IDEgKwogICAgIHNyYy90ZXN0L3JlY292ZXJ5L21lc29uLmJ1aWxkICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8ICAgMiArCiAgICAgc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wNDNfd2FsX3JlcGxh eV93YWl0LnBsICAgICAgICAgICAgICAgIHwgMTc2ICsrKysrKysrKysrKysrKysrKysKICAgICBz cmMvdGVzdC9yZWNvdmVyeS90LzA0NF93YWxfcmVwbGF5X3dhaXRfaW5qZWN0aW9uX3Rlc3QucGwg fCAgOTggKysrKysrKysrKysKICAgICBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAg ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKwogICAgIDIwIGZpbGVzIGNoYW5nZWQsIDg3 NyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dt bC9mdW5jLnNnbWwgYi9kb2Mvc3JjL3NnbWwvZnVuYy5zZ21sCmluZGV4IDE3YzQ0YmMzMzguLmIz NmM1YjJhZDggMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwKKysrIGIvZG9jL3Ny Yy9zZ21sL2Z1bmMuc2dtbApAQCAtMjg3NjIsNiArMjg3NjIsMTE4IEBAIHBvc3RncmVzPSMgU0VM RUNUICcwLzAnOjpwZ19sc24gKyBwZC5zZWdtZW50X251bWJlciAqIHBzLnNldHRpbmc6OmludCAr IDpvZmZzZXQKICAgICB0aGUgcGF1c2UsIHRoZSByYXRlIG9mIFdBTCBnZW5lcmF0aW9uIGFuZCBh dmFpbGFibGUgZGlzayBzcGFjZS4KICAgIDwvcGFyYT4KIAorICAgPHBhcmE+CisgICAgVGhlIHBy b2NlZHVyZSBzaG93biBpbiA8eHJlZiBsaW5rZW5kPSJwcm9jZWR1cmVzLXJlY292ZXJ5LWNvbnRy b2wtdGFibGUiLz4KKyAgICBjYW4gYmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgcmVjb3ZlcnkuCisg ICA8L3BhcmE+CisKKyAgIDx0YWJsZSBpZD0icHJvY2VkdXJlcy1yZWNvdmVyeS1jb250cm9sLXRh YmxlIj4KKyAgICA8dGl0bGU+UmVjb3ZlcnkgUHJvY2VkdXJlczwvdGl0bGU+CisgICAgPHRncm91 cCBjb2xzPSIxIj4KKyAgICAgPHRoZWFkPgorICAgICAgPHJvdz4KKyAgICAgICA8ZW50cnkgcm9s ZT0iZnVuY190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iZnVuY19zaWduYXR1cmUiPgorICAgICAg ICBQcm9jZWR1cmUKKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIERlc2Ny aXB0aW9uCisgICAgICAgPC9wYXJhPjwvZW50cnk+CisgICAgICA8L3Jvdz4KKyAgICAgPC90aGVh ZD4KKworICAgICA8dGJvZHk+CisgICAgICA8cm93PgorICAgICAgIDxlbnRyeSByb2xlPSJmdW5j X3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJmdW5jX3NpZ25hdHVyZSI+CisgICAgICAgIDxpbmRl eHRlcm0+CisgICAgICAgICA8cHJpbWFyeT5wZ193YWxfcmVwbGF5X3dhaXQ8L3ByaW1hcnk+Cisg ICAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgICA8ZnVuY3Rpb24+cGdfd2FsX3JlcGxheV93YWl0 PC9mdW5jdGlvbj4gKAorICAgICAgICAgIDxwYXJhbWV0ZXI+dGFyZ2V0X2xzbjwvcGFyYW1ldGVy PiA8dHlwZT5wZ19sc248L3R5cGU+LAorICAgICAgICAgIDxwYXJhbWV0ZXI+dGltZW91dDwvcGFy YW1ldGVyPiA8dHlwZT5iaWdpbnQ8L3R5cGU+IDxsaXRlcmFsPkRFRkFVTFQ8L2xpdGVyYWw+IDxs aXRlcmFsPjA8L2xpdGVyYWw+KQorICAgICAgICA8cmV0dXJudmFsdWU+dm9pZDwvcmV0dXJudmFs dWU+CisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBJZiA8cGFyYW1ldGVy PnRpbWVvdXQ8L3BhcmFtZXRlcj4gaXMgbm90IHNwZWNpZmllZCBvciB6ZXJvLCB0aGlzCisgICAg ICAgIHByb2NlZHVyZSByZXR1cm5zIG9uY2UgV0FMIGlzIHJlcGxheWVkIHVwdG8KKyAgICAgICAg PGxpdGVyYWw+dGFyZ2V0X2xzbjwvbGl0ZXJhbD4uCisgICAgICAgIElmIHRoZSA8cGFyYW1ldGVy PnRpbWVvdXQ8L3BhcmFtZXRlcj4gaXMgc3BlY2lmaWVkIChpbgorICAgICAgICBtaWxsaXNlY29u ZHMpIGFuZCBncmVhdGVyIHRoYW4gemVybywgdGhlIHByb2NlZHVyZSB3YWl0cyB1bnRpbCB0aGUK KyAgICAgICAgc2VydmVyIGFjdHVhbGx5IHJlcGxheXMgdGhlIFdBTCB1cHRvIDxsaXRlcmFsPnRh cmdldF9sc248L2xpdGVyYWw+IG9yCisgICAgICAgIHVudGlsIHRoZSBnaXZlbiB0aW1lIGhhcyBw YXNzZWQuIE9uIHRpbWVvdXQsIGFuIGVycm9yIGlzIGVtaXR0ZWQuCisgICAgICAgPC9wYXJhPjwv ZW50cnk+CisgICAgICA8L3Jvdz4KKyAgICAgPC90Ym9keT4KKyAgICA8L3Rncm91cD4KKyAgIDwv dGFibGU+CisKKyAgIDxwYXJhPgorICAgIDxmdW5jdGlvbj5wZ193YWxfcmVwbGF5X3dhaXQ8L2Z1 bmN0aW9uPiB3YWl0cyB0aWxsCisgICAgPHBhcmFtZXRlcj50YXJnZXRfbHNuPC9wYXJhbWV0ZXI+ IHRvIGJlIHJlcGxheWVkIG9uIHN0YW5kYnkuCisgICAgVGhhdCBpcywgYWZ0ZXIgdGhpcyBmdW5j dGlvbiBleGVjdXRpb24sIHRoZSB2YWx1ZSByZXR1cm5lZCBieQorICAgIDxmdW5jdGlvbj5wZ19s YXN0X3dhbF9yZXBsYXlfbHNuPC9mdW5jdGlvbj4gc2hvdWxkIGJlIGdyZWF0ZXIgb3IgZXF1YWwK KyAgICB0byB0aGUgPHBhcmFtZXRlcj50YXJnZXRfbHNuPC9wYXJhbWV0ZXI+IHZhbHVlLiAgVGhp cyBpcyB1c2VmdWwgdG8gYWNoaWV2ZQorICAgIHJlYWQteW91ci13cml0ZXMtY29uc2lzdGVuY3ks IHdoaWxlIHVzaW5nIGFzeW5jIHJlcGxpY2EgZm9yIHJlYWRzIGFuZAorICAgIHByaW1hcnkgZm9y IHdyaXRlcy4gIEluIHRoYXQgY2FzZSA8YWNyb255bT5sc248L2Fjcm9ueW0+IG9mIHRoZSBsYXN0 CisgICAgbW9kaWZpY2F0aW9uIHNob3VsZCBiZSBzdG9yZWQgb24gdGhlIGNsaWVudCBhcHBsaWNh dGlvbiBzaWRlIG9yIHRoZQorICAgIGNvbm5lY3Rpb24gcG9vbGVyIHNpZGUuCisgICA8L3BhcmE+ CisKKyAgIDxwYXJhPgorICAgIFlvdSBjYW4gdXNlIDxmdW5jdGlvbj5wZ193YWxfcmVwbGF5X3dh aXQ8L2Z1bmN0aW9uPiB0byB3YWl0IGZvcgorICAgIHRoZSA8dHlwZT5wZ19sc248L3R5cGU+IHZh bHVlLiAgRm9yIGV4YW1wbGUsIGFuIGFwcGxpY2F0aW9uIGNvdWxkIHVwZGF0ZQorICAgIHRoZSA8 bGl0ZXJhbD5tb3ZpZTwvbGl0ZXJhbD4gdGFibGUgYW5kIGdldCB0aGUgPGFjcm9ueW0+bHNuPC9h Y3JvbnltPiBhZnRlcgorICAgIGNoYW5nZXMganVzdCBtYWRlLiAgVGhpcyBleGFtcGxlIHVzZXMg PGZ1bmN0aW9uPnBnX2N1cnJlbnRfd2FsX2luc2VydF9sc248L2Z1bmN0aW9uPgorICAgIG9uIHBy aW1hcnkgc2VydmVyIHRvIGdldCB0aGUgPGFjcm9ueW0+bHNuPC9hY3JvbnltPiBnaXZlbiB0aGF0 CisgICAgPHZhcm5hbWU+c3luY2hyb25vdXNfY29tbWl0PC92YXJuYW1lPiBjb3VsZCBiZSBzZXQg dG8KKyAgICA8bGl0ZXJhbD5vZmY8L2xpdGVyYWw+LgorCisgICA8cHJvZ3JhbWxpc3Rpbmc+Citw b3N0Z3Jlcz0jIFVQREFURSBtb3ZpZSBTRVQgZ2VucmUgPSAnRHJhbWF0aWMnIFdIRVJFIGdlbnJl ID0gJ0RyYW1hJzsKK1VQREFURSAxMDAKK3Bvc3RncmVzPSMgU0VMRUNUIHBnX2N1cnJlbnRfd2Fs X2luc2VydF9sc24oKTsKK3BnX2N1cnJlbnRfd2FsX2luc2VydF9sc24KKy0tLS0tLS0tLS0tLS0t LS0tLS0tCiswLzMwNkVFMjAKKygxIHJvdykKKyAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisKKyAgIFRo ZW4gYW4gYXBwbGljYXRpb24gY291bGQgcnVuIDxmdW5jdGlvbj5wZ193YWxfcmVwbGF5X3dhaXQ8 L2Z1bmN0aW9uPgorICAgd2l0aCB0aGUgPGFjcm9ueW0+bHNuPC9hY3JvbnltPiBvYnRhaW5lZCBm cm9tIHByaW1hcnkuICBBZnRlciB0aGF0IHRoZQorICAgY2hhbmdlcyBtYWRlIG9mIHByaW1hcnkg c2hvdWxkIGJlIGd1YXJhbnRlZWQgdG8gYmUgdmlzaWJsZSBvbiByZXBsaWNhLgorCisgICA8cHJv Z3JhbWxpc3Rpbmc+Citwb3N0Z3Jlcz0jIENBTEwgcGdfd2FsX3JlcGxheV93YWl0KCcwLzMwNkVF MjAnKTsKK0NBTEwKK3Bvc3RncmVzPSMgU0VMRUNUICogRlJPTSBtb3ZpZSBXSEVSRSBnZW5yZSA9 ICdEcmFtYSc7CisgZ2VucmUKKy0tLS0tLS0KKygwIHJvd3MpCisgICA8L3Byb2dyYW1saXN0aW5n PgorCisgICBJdCBtYXkgYWxzbyBoYXBwZW4gdGhhdCB0YXJnZXQgPGFjcm9ueW0+bHNuPC9hY3Jv bnltPiBpcyBub3QgYWNoaWV2ZWQKKyAgIHdpdGhpbiB0aGUgdGltZW91dC4gIEluIHRoYXQgY2Fz ZSB0aGUgZXJyb3IgaXMgdGhyb3duLgorCisgICA8cHJvZ3JhbWxpc3Rpbmc+Citwb3N0Z3Jlcz0j IENBTEwgcGdfd2FsX3JlcGxheV93YWl0KCcwLzMwNkVFMjAnLCAxMDApOworRVJST1I6ICB0aW1l ZCBvdXQgd2hpbGUgd2FpdGluZyBmb3IgdGFyZ2V0IExTTiAwLzMwNkVFMjAgdG8gYmUgcmVwbGF5 ZWQ7IGN1cnJlbnQgcmVwbGF5IExTTiAwLzMwNkVBNjAKKyAgICA8L3Byb2dyYW1saXN0aW5nPgor CisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgICA8ZnVuY3Rpb24+cGdfd2FsX3JlcGxheV93 YWl0PC9mdW5jdGlvbj4gY2FuJ3QgYmUgdXNlZCB3aXRoaW4KKyAgICAgdGhlIHRyYW5zYWN0aW9u LCBhbm90aGVyIHByb2NlZHVyZSBvciBmdW5jdGlvbi4gIEFueSBvZiB0aGVtIGhvbGRzIGEKKyAg ICAgc25hcHNob3QsIHdoaWNoIGNvdWxkIHByZXZlbnQgdGhlIHJlcGxheSBvZiBXQUwgcmVjb3Jk cy4KKworICAgPHByb2dyYW1saXN0aW5nPgorcG9zdGdyZXM9IyBCRUdJTjsKK0JFR0lOCitwb3N0 Z3Jlcz0qIyBDQUxMIHBnX3dhbF9yZXBsYXlfd2FpdCgnMC8zMDZFRTIwJyk7CitFUlJPUjogIHBn X3dhbF9yZXBsYXlfd2FpdCgpIG11c3QgYmUgb25seSBjYWxsZWQgaW4gbm9uLWF0b21pYyBjb250 ZXh0CitERVRBSUw6ICBNYWtlIHN1cmUgcGdfd2FsX3JlcGxheV93YWl0KCkgaXNuJ3QgY2FsbGVk IHdpdGhpbiBhIHRyYW5zYWN0aW9uLCBhbm90aGVyIHByb2NlZHVyZSwgb3IgYSBmdW5jdGlvbi4K KyAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisKKyAgIDwvcGFyYT4KICAgPC9zZWN0Mj4KIAogICA8c2Vj dDIgaWQ9ImZ1bmN0aW9ucy1zbmFwc2hvdC1zeW5jaHJvbml6YXRpb24iPgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGFjdC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3Ry YW5zYW0veGFjdC5jCmluZGV4IDliZGExYWE2YmMuLmQ5NTQ2Zjc3NjEgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hhY3QuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv dHJhbnNhbS94YWN0LmMKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJjb21tYW5kcy9hc3lu Yy5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3RhYmxlY21kcy5oIgogI2luY2x1ZGUgImNvbW1hbmRz L3RyaWdnZXIuaCIKKyNpbmNsdWRlICJjb21tYW5kcy93YWl0bHNuLmgiCiAjaW5jbHVkZSAiY29t bW9uL3BnX3BybmcuaCIKICNpbmNsdWRlICJleGVjdXRvci9zcGkuaCIKICNpbmNsdWRlICJsaWJw cS9iZS1mc3N0dWJzLmgiCkBAIC0yNzcxLDYgKzI3NzIsMTEgQEAgQWJvcnRUcmFuc2FjdGlvbih2 b2lkKQogCSAqLwogCUxXTG9ja1JlbGVhc2VBbGwoKTsKIAorCS8qCisJICogQ2xlYW51cCB3YWl0 aW5nIGZvciBMU04gaWYgYW55LgorCSAqLworCVdhaXRMU05DbGVhbnVwKCk7CisKIAkvKiBDbGVh ciB3YWl0IGluZm9ybWF0aW9uIGFuZCBjb21tYW5kIHByb2dyZXNzIGluZGljYXRvciAqLwogCXBn c3RhdF9yZXBvcnRfd2FpdF9lbmQoKTsKIAlwZ3N0YXRfcHJvZ3Jlc3NfZW5kX2NvbW1hbmQoKTsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwppbmRleCAzMzBlMDU4YzVmLi5mZmMwZjNkMjM5IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMKKysrIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCkBAIC02Niw2ICs2Niw3IEBACiAjaW5jbHVkZSAi Y2F0YWxvZy9jYXR2ZXJzaW9uLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb250cm9sLmgiCiAj aW5jbHVkZSAiY2F0YWxvZy9wZ19kYXRhYmFzZS5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3dhaXRs c24uaCIKICNpbmNsdWRlICJjb21tb24vY29udHJvbGRhdGFfdXRpbHMuaCIKICNpbmNsdWRlICJj b21tb24vZmlsZV91dGlscy5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2luc3RydW1lbnQuaCIKQEAg LTYxMjksNiArNjEzMCwxMiBAQCBTdGFydHVwWExPRyh2b2lkKQogCVVwZGF0ZUNvbnRyb2xGaWxl KCk7CiAJTFdMb2NrUmVsZWFzZShDb250cm9sRmlsZUxvY2spOwogCisJLyoKKwkgKiBXYWtlIHVw IGFsbCB3YWl0ZXJzIGZvciByZXBsYXkgTFNOLiAgVGhleSBuZWVkIHRvIHJlcG9ydCBhbiBlcnJv ciB0aGF0CisJICogcmVjb3Zlcnkgd2FzIGVuZGVkIGJlZm9yZSBhY2hpZXZpbmcgdGhlIHRhcmdl dCBMU04uCisJICovCisJV2FpdExTTlNldExhdGNoZXMoSW52YWxpZFhMb2dSZWNQdHIpOworCiAJ LyoKIAkgKiBTaHV0ZG93biB0aGUgcmVjb3ZlcnkgZW52aXJvbm1lbnQuICBUaGlzIG11c3Qgb2Nj dXIgYWZ0ZXIKIAkgKiBSZWNvdmVyUHJlcGFyZWRUcmFuc2FjdGlvbnMoKSAoc2VlIG5vdGVzIGlu IGxvY2tfdHdvcGhhc2VfcmVjb3ZlcigpKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9n cmVjb3ZlcnkuYwppbmRleCBiNDViODMzMTcyLi5hOTY2MDNjZGQ3IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYworKysgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYwpAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUg ImJhY2t1cC9iYXNlYmFja3VwLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb250cm9sLmgiCiAj aW5jbHVkZSAiY29tbWFuZHMvdGFibGVzcGFjZS5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3dhaXRs c24uaCIKICNpbmNsdWRlICJjb21tb24vZmlsZV91dGlscy5oIgogI2luY2x1ZGUgIm1pc2NhZG1p bi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgpAQCAtMTgyOCw2ICsxODI5LDE2IEBAIFBlcmZvcm1X YWxSZWNvdmVyeSh2b2lkKQogCQkJCWJyZWFrOwogCQkJfQogCisJCQkvKgorCQkJICogSWYgd2Ug cmVwbGF5ZWQgYW4gTFNOIHRoYXQgc29tZW9uZSB3YXMgd2FpdGluZyBmb3IgdGhlbiB3YWxrCisJ CQkgKiBvdmVyIHRoZSBzaGFyZWQgbWVtb3J5IGFycmF5IGFuZCBzZXQgbGF0Y2hlcyB0byBub3Rp ZnkgdGhlCisJCQkgKiB3YWl0ZXJzLgorCQkJICovCisJCQlpZiAod2FpdExTTiAmJgorCQkJCShY TG9nUmVjb3ZlcnlDdGwtPmxhc3RSZXBsYXllZEVuZFJlY1B0ciA+PQorCQkJCSBwZ19hdG9taWNf cmVhZF91NjQoJndhaXRMU04tPm1pbldhaXRlZExTTikpKQorCQkJCVdhaXRMU05TZXRMYXRjaGVz KFhMb2dSZWNvdmVyeUN0bC0+bGFzdFJlcGxheWVkRW5kUmVjUHRyKTsKKwogCQkJLyogRWxzZSwg dHJ5IHRvIGZldGNoIHRoZSBuZXh0IFdBTCByZWNvcmQgKi8KIAkJCXJlY29yZCA9IFJlYWRSZWNv cmQoeGxvZ3ByZWZldGNoZXIsIExPRywgZmFsc2UsIHJlcGxheVRMSSk7CiAJCX0gd2hpbGUgKHJl Y29yZCAhPSBOVUxMKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX2Z1 bmN0aW9ucy5zcWwgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV9mdW5jdGlvbnMuc3FsCmlu ZGV4IGFlMDk5ZTMyOGMuLjYyM2I5NTM5YjEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFs b2cvc3lzdGVtX2Z1bmN0aW9ucy5zcWwKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1f ZnVuY3Rpb25zLnNxbApAQCAtNDE0LDYgKzQxNCw5IEBAIENSRUFURSBPUiBSRVBMQUNFIEZVTkNU SU9OCiAgIGpzb25fcG9wdWxhdGVfcmVjb3Jkc2V0KGJhc2UgYW55ZWxlbWVudCwgZnJvbV9qc29u IGpzb24sIHVzZV9qc29uX2FzX3RleHQgYm9vbGVhbiBERUZBVUxUIGZhbHNlKQogICBSRVRVUk5T IFNFVE9GIGFueWVsZW1lbnQgTEFOR1VBR0UgaW50ZXJuYWwgU1RBQkxFIFJPV1MgMTAwICBBUyAn anNvbl9wb3B1bGF0ZV9yZWNvcmRzZXQnIFBBUkFMTEVMIFNBRkU7CiAKK0NSRUFURSBPUiBSRVBM QUNFIFBST0NFRFVSRSBwZ193YWxfcmVwbGF5X3dhaXQodGFyZ2V0X2xzbiBwZ19sc24sIHRpbWVv dXQgaW50OCBERUZBVUxUIDApCisgIExBTkdVQUdFIGludGVybmFsIEFTICdwZ193YWxfcmVwbGF5 X3dhaXQnOworCiBDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBwZ19sb2dpY2FsX3Nsb3RfZ2V0 X2NoYW5nZXMoCiAgICAgSU4gc2xvdF9uYW1lIG5hbWUsIElOIHVwdG9fbHNuIHBnX2xzbiwgSU4g dXB0b19uY2hhbmdlcyBpbnQsIFZBUklBRElDIG9wdGlvbnMgdGV4dFtdIERFRkFVTFQgJ3t9JywK ICAgICBPVVQgbHNuIHBnX2xzbiwgT1VUIHhpZCB4aWQsIE9VVCBkYXRhIHRleHQpCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmlsZSBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L01ha2VmaWxlCmluZGV4IDQ4ZjczNDhmOTEuLmNlZGU5MGMzYjkgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2Vm aWxlCkBAIC02MSw2ICs2MSw3IEBAIE9CSlMgPSBcCiAJdmFjdXVtLm8gXAogCXZhY3V1bXBhcmFs bGVsLm8gXAogCXZhcmlhYmxlLm8gXAotCXZpZXcubworCXZpZXcubyBcCisJd2FpdGxzbi5vCiAK IGluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9zcmMvYmFja2VuZC9jb21tb24ubWsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL21lc29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv bWVzb24uYnVpbGQKaW5kZXggNmRkMDBhNGFiZC4uNzU0OWJlNWRjMyAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvbWVzb24uYnVpbGQKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv bWVzb24uYnVpbGQKQEAgLTUwLDQgKzUwLDUgQEAgYmFja2VuZF9zb3VyY2VzICs9IGZpbGVzKAog ICAndmFjdXVtcGFyYWxsZWwuYycsCiAgICd2YXJpYWJsZS5jJywKICAgJ3ZpZXcuYycsCisgICd3 YWl0bHNuLmMnLAogKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvd2FpdGxzbi5j IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvd2FpdGxzbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAuLmJkMjhhMmZlMzIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy93YWl0bHNuLmMKQEAgLTAsMCArMSwzNDQgQEAKKy8qLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICoKKyAqIHdhaXRsc24uYworICoJICBJbXBsZW1lbnRzIHdhaXRpbmcgZm9yIHRoZSBnaXZl biByZXBsYXkgTFNOLCB3aGljaCBpcyB1c2VkIGluCisgKgkgIENBTEwgcGdfd2FsX3JlcGxheV93 YWl0KHRhcmdldF9sc24gcGdfbHNuLCB0aW1lb3V0IGZsb2F0OCkuCisgKgorICogQ29weXJpZ2h0 IChjKSAyMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqIElE RU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3dhaXRsc24uYworICoKKyAq LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVk ZSA8ZmxvYXQuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNpbmNsdWRlICJwZ3N0YXQuaCIKKyNp bmNsdWRlICJhY2Nlc3MveGxvZy5oIgorI2luY2x1ZGUgImFjY2Vzcy94bG9ncmVjb3ZlcnkuaCIK KyNpbmNsdWRlICJjb21tYW5kcy93YWl0bHNuLmgiCisjaW5jbHVkZSAiZnVuY2FwaS5oIgorI2lu Y2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgInN0b3JhZ2UvbGF0Y2guaCIKKyNpbmNsdWRl ICJzdG9yYWdlL3Byb2MuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3NobWVtLmgiCisjaW5jbHVkZSAi dXRpbHMvZm1ncnByb3Rvcy5oIgorI2luY2x1ZGUgInV0aWxzL2luamVjdGlvbl9wb2ludC5oIgor I2luY2x1ZGUgInV0aWxzL3BnX2xzbi5oIgorI2luY2x1ZGUgInV0aWxzL3NuYXBtZ3IuaCIKKyNp bmNsdWRlICJ1dGlscy93YWl0X2V2ZW50X3R5cGVzLmgiCisKK3N0YXRpYyBpbnQJbHNuX2NtcChj b25zdCBwYWlyaW5naGVhcF9ub2RlICphLCBjb25zdCBwYWlyaW5naGVhcF9ub2RlICpiLAorCQkJ CQl2b2lkICphcmcpOworCitzdHJ1Y3QgV2FpdExTTlN0YXRlICp3YWl0TFNOID0gTlVMTDsKKwor LyogUmVwb3J0IHRoZSBhbW91bnQgb2Ygc2hhcmVkIG1lbW9yeSBzcGFjZSBuZWVkZWQgZm9yIFdh aXRMU05TdGF0ZS4gKi8KK1NpemUKK1dhaXRMU05TaG1lbVNpemUodm9pZCkKK3sKKwlTaXplCQlz aXplOworCisJc2l6ZSA9IG9mZnNldG9mKFdhaXRMU05TdGF0ZSwgcHJvY0luZm9zKTsKKwlzaXpl ID0gYWRkX3NpemUoc2l6ZSwgbXVsX3NpemUoTWF4QmFja2VuZHMsIHNpemVvZihXYWl0TFNOUHJv Y0luZm8pKSk7CisJcmV0dXJuIHNpemU7Cit9CisKKy8qIEluaXRpYWxpemUgdGhlIFdhaXRMU05T dGF0ZSBpbiB0aGUgc2hhcmVkIG1lbW9yeS4gKi8KK3ZvaWQKK1dhaXRMU05TaG1lbUluaXQodm9p ZCkKK3sKKwlib29sCQlmb3VuZDsKKworCXdhaXRMU04gPSAoV2FpdExTTlN0YXRlICopIFNobWVt SW5pdFN0cnVjdCgiV2FpdExTTlN0YXRlIiwKKwkJCQkJCQkJCQkJICAgV2FpdExTTlNobWVtU2l6 ZSgpLAorCQkJCQkJCQkJCQkgICAmZm91bmQpOworCWlmICghZm91bmQpCisJeworCQlwZ19hdG9t aWNfaW5pdF91NjQoJndhaXRMU04tPm1pbldhaXRlZExTTiwgUEdfVUlOVDY0X01BWCk7CisJCXBh aXJpbmdoZWFwX2luaXRpYWxpemUoJndhaXRMU04tPndhaXRlcnNIZWFwLCBsc25fY21wLCBOVUxM KTsKKwkJbWVtc2V0KCZ3YWl0TFNOLT5wcm9jSW5mb3MsIDAsIE1heEJhY2tlbmRzICogc2l6ZW9m KFdhaXRMU05Qcm9jSW5mbykpOworCX0KK30KKworLyoKKyAqIENvbXBhcmlzb24gZnVuY3Rpb24g Zm9yIHdhaXRMU04tPndhaXRlcnNIZWFwIGhlYXAuICBXYWl0aW5nIHByb2Nlc3NlcyBhcmUKKyAq IG9yZGVyZWQgYnkgbHNuLCBzbyB0aGF0IHRoZSB3YWl0ZXIgd2l0aCBzbWFsbGVzdCBsc24gaXMg YXQgdGhlIHRvcC4KKyAqLworc3RhdGljIGludAorbHNuX2NtcChjb25zdCBwYWlyaW5naGVhcF9u b2RlICphLCBjb25zdCBwYWlyaW5naGVhcF9ub2RlICpiLCB2b2lkICphcmcpCit7CisJY29uc3Qg V2FpdExTTlByb2NJbmZvICphcHJvYyA9IHBhaXJpbmdoZWFwX2NvbnN0X2NvbnRhaW5lcihXYWl0 TFNOUHJvY0luZm8sIHBoTm9kZSwgYSk7CisJY29uc3QgV2FpdExTTlByb2NJbmZvICpicHJvYyA9 IHBhaXJpbmdoZWFwX2NvbnN0X2NvbnRhaW5lcihXYWl0TFNOUHJvY0luZm8sIHBoTm9kZSwgYik7 CisKKwlpZiAoYXByb2MtPndhaXRMU04gPCBicHJvYy0+d2FpdExTTikKKwkJcmV0dXJuIDE7CisJ ZWxzZSBpZiAoYXByb2MtPndhaXRMU04gPiBicHJvYy0+d2FpdExTTikKKwkJcmV0dXJuIC0xOwor CWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBVcGRhdGUgd2FpdExTTi0+bWluV2FpdGVk TFNOIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBzdGF0ZSBvZgorICogd2FpdExTTi0+d2FpdGVy c0hlYXAuCisgKi8KK3N0YXRpYyB2b2lkCit1cGRhdGVNaW5XYWl0ZWRMU04odm9pZCkKK3sKKwlY TG9nUmVjUHRyCW1pbldhaXRlZExTTiA9IFBHX1VJTlQ2NF9NQVg7CisKKwlpZiAoIXBhaXJpbmdo ZWFwX2lzX2VtcHR5KCZ3YWl0TFNOLT53YWl0ZXJzSGVhcCkpCisJeworCQlwYWlyaW5naGVhcF9u b2RlICpub2RlID0gcGFpcmluZ2hlYXBfZmlyc3QoJndhaXRMU04tPndhaXRlcnNIZWFwKTsKKwor CQltaW5XYWl0ZWRMU04gPSBwYWlyaW5naGVhcF9jb250YWluZXIoV2FpdExTTlByb2NJbmZvLCBw aE5vZGUsIG5vZGUpLT53YWl0TFNOOworCX0KKworCXBnX2F0b21pY193cml0ZV91NjQoJndhaXRM U04tPm1pbldhaXRlZExTTiwgbWluV2FpdGVkTFNOKTsKK30KKworLyoKKyAqIFB1dCB0aGUgY3Vy cmVudCBwcm9jZXNzIGludG8gdGhlIGhlYXAgb2YgTFNOIHdhaXRlcnMuCisgKi8KK3N0YXRpYyB2 b2lkCithZGRMU05XYWl0ZXIoWExvZ1JlY1B0ciBsc24pCit7CisJV2FpdExTTlByb2NJbmZvICpw cm9jSW5mbyA9ICZ3YWl0TFNOLT5wcm9jSW5mb3NbTXlQcm9jTnVtYmVyXTsKKworCUxXTG9ja0Fj cXVpcmUoV2FpdExTTkxvY2ssIExXX0VYQ0xVU0lWRSk7CisKKwlBc3NlcnQoIXByb2NJbmZvLT5p bkhlYXApOworCisJcHJvY0luZm8tPnByb2NudW0gPSBNeVByb2NOdW1iZXI7CisJcHJvY0luZm8t PndhaXRMU04gPSBsc247CisKKwlwYWlyaW5naGVhcF9hZGQoJndhaXRMU04tPndhaXRlcnNIZWFw LCAmcHJvY0luZm8tPnBoTm9kZSk7CisJcHJvY0luZm8tPmluSGVhcCA9IHRydWU7CisJdXBkYXRl TWluV2FpdGVkTFNOKCk7CisKKwlMV0xvY2tSZWxlYXNlKFdhaXRMU05Mb2NrKTsKK30KKworLyoK KyAqIFJlbW92ZSB0aGUgY3VycmVudCBwcm9jZXNzIGZyb20gdGhlIGhlYXAgb2YgTFNOIHdhaXRl cnMgaWYgaXQncyB0aGVyZS4KKyAqLworc3RhdGljIHZvaWQKK2RlbGV0ZUxTTldhaXRlcih2b2lk KQoreworCVdhaXRMU05Qcm9jSW5mbyAqcHJvY0luZm8gPSAmd2FpdExTTi0+cHJvY0luZm9zW015 UHJvY051bWJlcl07CisKKwlMV0xvY2tBY3F1aXJlKFdhaXRMU05Mb2NrLCBMV19FWENMVVNJVkUp OworCisJaWYgKCFwcm9jSW5mby0+aW5IZWFwKQorCXsKKwkJTFdMb2NrUmVsZWFzZShXYWl0TFNO TG9jayk7CisJCXJldHVybjsKKwl9CisKKwlwYWlyaW5naGVhcF9yZW1vdmUoJndhaXRMU04tPndh aXRlcnNIZWFwLCAmcHJvY0luZm8tPnBoTm9kZSk7CisJcHJvY0luZm8tPmluSGVhcCA9IGZhbHNl OworCXVwZGF0ZU1pbldhaXRlZExTTigpOworCisJTFdMb2NrUmVsZWFzZShXYWl0TFNOTG9jayk7 Cit9CisKKy8qCisgKiBTZXQgbGF0Y2hlcyBvZiBMU04gd2FpdGVycyB3aG9zZSBMU04gaGFzIGJl ZW4gcmVwbGF5ZWQuICBTZXQgbGF0Y2hlcyBvZiBhbGwKKyAqIExTTiB3YWl0ZXJzIHdoZW4gSW52 YWxpZFhMb2dSZWNQdHIgaXMgZ2l2ZW4uCisgKi8KK3ZvaWQKK1dhaXRMU05TZXRMYXRjaGVzKFhM b2dSZWNQdHIgY3VycmVudExTTikKK3sKKwlpbnQJCQlpOworCWludAkJICAgKndha2VVcFByb2NO dW1zOworCWludAkJCW51bVdha2VVcFByb2NzID0gMDsKKworCXdha2VVcFByb2NOdW1zID0gcGFs bG9jKHNpemVvZihpbnQpICogTWF4QmFja2VuZHMpOworCisJTFdMb2NrQWNxdWlyZShXYWl0TFNO TG9jaywgTFdfRVhDTFVTSVZFKTsKKworCS8qCisJICogSXRlcmF0ZSB0aGUgcGFpcmluZyBoZWFw IG9mIHdhaXRpbmcgcHJvY2Vzc2VzIHRpbGwgd2UgZmluZCBMU04gbm90IHlldAorCSAqIHJlcGxh eWVkLiAgUmVjb3JkIHRoZSBwcm9jZXNzIG51bWJlcnMgdG8gc2V0IHRoZWlyIGxhdGNoZXMgbGF0 ZXIuCisJICovCisJd2hpbGUgKCFwYWlyaW5naGVhcF9pc19lbXB0eSgmd2FpdExTTi0+d2FpdGVy c0hlYXApKQorCXsKKwkJcGFpcmluZ2hlYXBfbm9kZSAqbm9kZSA9IHBhaXJpbmdoZWFwX2ZpcnN0 KCZ3YWl0TFNOLT53YWl0ZXJzSGVhcCk7CisJCVdhaXRMU05Qcm9jSW5mbyAqcHJvY0luZm8gPSBw YWlyaW5naGVhcF9jb250YWluZXIoV2FpdExTTlByb2NJbmZvLCBwaE5vZGUsIG5vZGUpOworCisJ CWlmICghWExvZ1JlY1B0cklzSW52YWxpZChjdXJyZW50TFNOKSAmJgorCQkJcHJvY0luZm8tPndh aXRMU04gPiBjdXJyZW50TFNOKQorCQkJYnJlYWs7CisKKwkJd2FrZVVwUHJvY051bXNbbnVtV2Fr ZVVwUHJvY3MrK10gPSBwcm9jSW5mby0+cHJvY251bTsKKwkJKHZvaWQpIHBhaXJpbmdoZWFwX3Jl bW92ZV9maXJzdCgmd2FpdExTTi0+d2FpdGVyc0hlYXApOworCQlwcm9jSW5mby0+aW5IZWFwID0g ZmFsc2U7CisJfQorCisJdXBkYXRlTWluV2FpdGVkTFNOKCk7CisKKwlMV0xvY2tSZWxlYXNlKFdh aXRMU05Mb2NrKTsKKworCS8qCisJICogU2V0IGxhdGNoZXMgZm9yIHByb2Nlc3Nlcywgd2hvc2Ug d2FpdGVkIExTTnMgYXJlIGFscmVhZHkgcmVwbGF5ZWQuIFRoaXMKKwkgKiBpbnZvbHZlcyBzcGlu bG9ja3MuICBTbywgd2Ugc2hvdWxkbid0IGRvIHRoaXMgdW5kZXIgYSBzcGlubG9jay4KKwkgKi8K Kwlmb3IgKGkgPSAwOyBpIDwgbnVtV2FrZVVwUHJvY3M7IGkrKykKKwl7CisJCVBHUFJPQwkgICAq YmFja2VuZDsKKworCQliYWNrZW5kID0gR2V0UEdQcm9jQnlOdW1iZXIod2FrZVVwUHJvY051bXNb aV0pOworCQlTZXRMYXRjaCgmYmFja2VuZC0+cHJvY0xhdGNoKTsKKwl9CisJcGZyZWUod2FrZVVw UHJvY051bXMpOworfQorCisvKgorICogRGVsZXRlIG91ciBpdGVtIGZyb20gc2htZW0gYXJyYXkg aWYgYW55LgorICovCit2b2lkCitXYWl0TFNOQ2xlYW51cCh2b2lkKQoreworCS8qCisJICogV2Ug ZG8gYSBmYXN0LXBhdGggY2hlY2sgb2YgdGhlICdpbkhlYXAnIGZsYWcgd2l0aG91dCB0aGUgbG9j ay4gIFRoaXMKKwkgKiBmbGFnIGlzIHNldCB0byB0cnVlIG9ubHkgYnkgdGhlIHByb2Nlc3MgaXRz ZWxmLiAgU28sIGl0J3Mgb25seSBwb3NzaWJsZQorCSAqIHRvIGdldCBhIGZhbHNlIHBvc2l0aXZl LiAgQnV0IHRoYXQgd2lsbCBiZSBlbGltaW5hdGVkIGJ5IGEgcmVjaGVjaworCSAqIGluc2lkZSBk ZWxldGVMU05XYWl0ZXIoKS4KKwkgKi8KKwlpZiAod2FpdExTTi0+cHJvY0luZm9zW015UHJvY051 bWJlcl0uaW5IZWFwKQorCQlkZWxldGVMU05XYWl0ZXIoKTsKK30KKworLyoKKyAqIFdhaXQgdXNp bmcgTXlMYXRjaCB0aWxsIHRoZSBnaXZlbiBMU04gaXMgcmVwbGF5ZWQsIHRoZSBwb3N0bWFzdGVy IGRpZXMgb3IKKyAqIHRpbWVvdXQgaGFwcGVucy4KKyAqLwordm9pZAorV2FpdEZvckxTTihYTG9n UmVjUHRyIHRhcmdldExTTiwgaW50NjQgdGltZW91dCkKK3sKKwlYTG9nUmVjUHRyCWN1cnJlbnRM U047CisJVGltZXN0YW1wVHogZW5kdGltZSA9IDA7CisKKwkvKiBTaG91bGRuJ3QgYmUgY2FsbGVk IHdoZW4gc2htZW0gaXNuJ3QgaW5pdGlhbGl6ZWQgKi8KKwlBc3NlcnQod2FpdExTTik7CisKKwkv KiBTaG91bGQgYmUgb25seSBjYWxsZWQgYnkgYSBiYWNrZW5kICovCisJQXNzZXJ0KE15QmFja2Vu ZFR5cGUgPT0gQl9CQUNLRU5EICYmIE15UHJvY051bWJlciA8PSBNYXhCYWNrZW5kcyk7CisKKwlp ZiAoIVJlY292ZXJ5SW5Qcm9ncmVzcygpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2Rl KEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCSBlcnJtc2co InJlY292ZXJ5IGlzIG5vdCBpbiBwcm9ncmVzcyIpLAorCQkJCSBlcnJoaW50KCJXYWl0aW5nIGZv ciBMU04gY2FuIG9ubHkgYmUgZXhlY3V0ZWQgZHVyaW5nIHJlY292ZXJ5LiIpKSk7CisKKwkvKiBJ ZiB0YXJnZXQgTFNOIGlzIGFscmVhZHkgcmVwbGF5ZWQsIGV4aXQgaW1tZWRpYXRlbHkgKi8KKwlp ZiAodGFyZ2V0TFNOIDw9IEdldFhMb2dSZXBsYXlSZWNQdHIoTlVMTCkpCisJCXJldHVybjsKKwor CWlmICh0aW1lb3V0ID4gMCkKKwkJZW5kdGltZSA9IFRpbWVzdGFtcFR6UGx1c01pbGxpc2Vjb25k cyhHZXRDdXJyZW50VGltZXN0YW1wKCksIHRpbWVvdXQpOworCisJYWRkTFNOV2FpdGVyKHRhcmdl dExTTik7CisKKwlmb3IgKDs7KQorCXsKKwkJaW50CQkJcmM7CisJCWludAkJCWxhdGNoX2V2ZW50 cyA9IFdMX0xBVENIX1NFVCB8IFdMX0VYSVRfT05fUE1fREVBVEg7CisJCWxvbmcJCWRlbGF5X21z ID0gMDsKKworCQkvKiBDaGVjayBpZiB0aGUgd2FpdGVkIExTTiBoYXMgYmVlbiByZXBsYXllZCAq LworCQljdXJyZW50TFNOID0gR2V0WExvZ1JlcGxheVJlY1B0cihOVUxMKTsKKwkJaWYgKHRhcmdl dExTTiA8PSBjdXJyZW50TFNOKQorCQkJYnJlYWs7CisKKwkJLyogUmVjaGVjayB0aGF0IHJlY292 ZXJ5IGlzIHN0aWxsIGluLXByb2dyZXNzICovCisJCWlmICghUmVjb3ZlcnlJblByb2dyZXNzKCkp CisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5f UFJFUkVRVUlTSVRFX1NUQVRFKSwKKwkJCQkJIGVycm1zZygicmVjb3ZlcnkgaXMgbm90IGluIHBy b2dyZXNzIiksCisJCQkJCSBlcnJkZXRhaWwoIlJlY292ZXJ5IGVuZGVkIGJlZm9yZSByZXBsYXlp bmcgdGhlIHRhcmdldCBMU04gJVgvJVg7IGxhc3QgcmVwbGF5IExTTiAlWC8lWC4iLAorCQkJCQkJ CSAgIExTTl9GT1JNQVRfQVJHUyh0YXJnZXRMU04pLAorCQkJCQkJCSAgIExTTl9GT1JNQVRfQVJH UyhjdXJyZW50TFNOKSkpKTsKKworCQlpZiAodGltZW91dCA+IDApCisJCXsKKwkJCWRlbGF5X21z ID0gKGVuZHRpbWUgLSBHZXRDdXJyZW50VGltZXN0YW1wKCkpIC8gMTAwMDsKKwkJCWxhdGNoX2V2 ZW50cyB8PSBXTF9USU1FT1VUOworCQkJaWYgKGRlbGF5X21zIDw9IDApCisJCQkJYnJlYWs7CisJ CX0KKworCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCisJCXJjID0gV2FpdExhdGNoKE15TGF0 Y2gsIGxhdGNoX2V2ZW50cywgZGVsYXlfbXMsCisJCQkJCSAgIFdBSVRfRVZFTlRfV0FJVF9GT1Jf V0FMX1JFUExBWSk7CisKKwkJaWYgKHJjICYgV0xfTEFUQ0hfU0VUKQorCQkJUmVzZXRMYXRjaChN eUxhdGNoKTsKKwl9CisKKwkvKgorCSAqIENoZWNrIGlmIHN0YXJ0dXAgcHJvY2VzcyBpcyBhbHJl YWR5IHJlcGxheWVkIHRhcmdldCBsc24KKwkgKi8KKwlJTkpFQ1RJT05fUE9JTlQoInBnLXdhbC1y ZXBsYXktd2FpdCIpOworCisJZGVsZXRlTFNOV2FpdGVyKCk7CisKKwlpZiAodGFyZ2V0TFNOID4g Y3VycmVudExTTikKKwl7CisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9R VUVSWV9DQU5DRUxFRCksCisJCQkJIGVycm1zZygidGltZWQgb3V0IHdoaWxlIHdhaXRpbmcgZm9y IHRhcmdldCBMU04gJVgvJVggdG8gYmUgcmVwbGF5ZWQ7IGN1cnJlbnQgcmVwbGF5IExTTiAlWC8l WCIsCisJCQkJCQlMU05fRk9STUFUX0FSR1ModGFyZ2V0TFNOKSwKKwkJCQkJCUxTTl9GT1JNQVRf QVJHUyhjdXJyZW50TFNOKSkpKTsKKwl9Cit9CisKK0RhdHVtCitwZ193YWxfcmVwbGF5X3dhaXQo UEdfRlVOQ1RJT05fQVJHUykKK3sKKwlYTG9nUmVjUHRyCXRhcmdldF9sc24gPSBQR19HRVRBUkdf TFNOKDApOworCWludDY0CQl0aW1lb3V0ID0gUEdfR0VUQVJHX0lOVDY0KDEpOworCUNhbGxDb250 ZXh0ICpjb250ZXh0ID0gKENhbGxDb250ZXh0ICopIGZjaW5mby0+Y29udGV4dDsKKworCWlmICh0 aW1lb3V0IDwgMCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX05VTUVS SUNfVkFMVUVfT1VUX09GX1JBTkdFKSwKKwkJCQkgZXJybXNnKCJcInRpbWVvdXRcIiBtdXN0IG5v dCBiZSBuZWdhdGl2ZSIpKSk7CisKKwkvKgorCSAqIFdlIGFyZSBnb2luZyB0byB3YWl0IGZvciB0 aGUgTFNOIHJlcGxheS4gIFdlIHNob3VsZCBmaXJzdCBjYXJlIHRoYXQgd2UKKwkgKiBkb24ndCBo b2xkIGEgc25hcHNob3QgYW5kIGNvcnJlc3BvbmRpbmdseSBvdXIgTXlQcm9jLT54bWluIGlzIGlu dmFsaWQuCisJICogT3RoZXJ3aXNlLCBvdXIgc25hcHNob3QgY291bGQgcHJldmVudCB0aGUgcmVw bGF5IG9mIFdBTCByZWNvcmRzCisJICogaW1wbHlpbmcgYSBraW5kIG9mIHNlbGYtZGVhZGxvY2su ICBUaGlzIGlzIHRoZSByZWFzb24gd2h5CisJICogcGdfd2FsX3JlcGxheV93YWl0KCkgaXMgYSBw cm9jZWR1cmUsIG5vdCBhIGZ1bmN0aW9uLgorCSAqCisJICogQXQgZmlyc3QsIHdlIGNoZWNrIHRo YXQgcGdfd2FsX3JlcGxheV93YWl0KCkgaXMgY2FsbGVkIGluIGEgbm9uLWF0b21pYworCSAqIGNv bnRleHQuICBUaGF0IGlzLCBhIHByb2NlZHVyZSBjYWxsIGlzbid0IHdyYXBwZWQgaW50byBhIHRy YW5zYWN0aW9uLAorCSAqIGFub3RoZXIgcHJvY2VkdXJlIGNhbGwsIG9yIGEgZnVuY3Rpb24gY2Fs bC4KKwkgKgorCSAqIFNlY29uZGx5LCBhY2NvcmRpbmcgdG8gUGxhbm5lZFN0bXRSZXF1aXJlc1Nu YXBzaG90KCksIGV2ZW4gaW4gYW4gYXRvbWljCisJICogY29udGV4dCwgQ2FsbFN0bXQgaXMgcHJv Y2Vzc2VkIHdpdGggYSBzbmFwc2hvdC4gIFRoYW5rZnVsbHksIHdlIGNhbiBwb3AKKwkgKiB0aGlz IHNuYXBzaG90LCBiZWNhdXNlIFBvcnRhbFJ1blV0aWxpdHkoKSBjYW4gdG9sZXJhdGUgdGhpcy4K KwkgKi8KKwlpZiAoY29udGV4dC0+YXRvbWljKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJj b2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCSBlcnJt c2coInBnX3dhbF9yZXBsYXlfd2FpdCgpIG11c3QgYmUgb25seSBjYWxsZWQgaW4gbm9uLWF0b21p YyBjb250ZXh0IiksCisJCQkJIGVycmRldGFpbCgiTWFrZSBzdXJlIHBnX3dhbF9yZXBsYXlfd2Fp dCgpIGlzbid0IGNhbGxlZCB3aXRoaW4gYSB0cmFuc2FjdGlvbiwgYW5vdGhlciBwcm9jZWR1cmUs IG9yIGEgZnVuY3Rpb24uIikpKTsKKworCWlmIChBY3RpdmVTbmFwc2hvdFNldCgpKQorCQlQb3BB Y3RpdmVTbmFwc2hvdCgpOworCUFzc2VydCghQWN0aXZlU25hcHNob3RTZXQoKSk7CisJSW52YWxp ZGF0ZUNhdGFsb2dTbmFwc2hvdCgpOworCUFzc2VydChNeVByb2MtPnhtaW4gPT0gSW52YWxpZFRy YW5zYWN0aW9uSWQpOworCisJKHZvaWQpIFdhaXRGb3JMU04odGFyZ2V0X2xzbiwgdGltZW91dCk7 CisKKwlQR19SRVRVUk5fVk9JRCgpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbGliL3Bh aXJpbmdoZWFwLmMgYi9zcmMvYmFja2VuZC9saWIvcGFpcmluZ2hlYXAuYwppbmRleCBmZTFkZWJh MTNlLi43ODU4ZTVlMDc2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9saWIvcGFpcmluZ2hlYXAu YworKysgYi9zcmMvYmFja2VuZC9saWIvcGFpcmluZ2hlYXAuYwpAQCAtNDQsMTIgKzQ0LDI2IEBA IHBhaXJpbmdoZWFwX2FsbG9jYXRlKHBhaXJpbmdoZWFwX2NvbXBhcmF0b3IgY29tcGFyZSwgdm9p ZCAqYXJnKQogCXBhaXJpbmdoZWFwICpoZWFwOwogCiAJaGVhcCA9IChwYWlyaW5naGVhcCAqKSBw YWxsb2Moc2l6ZW9mKHBhaXJpbmdoZWFwKSk7CisJcGFpcmluZ2hlYXBfaW5pdGlhbGl6ZShoZWFw LCBjb21wYXJlLCBhcmcpOworCisJcmV0dXJuIGhlYXA7Cit9CisKKy8qCisgKiBwYWlyaW5naGVh cF9pbml0aWFsaXplCisgKgorICogU2FtZSBhcyBwYWlyaW5naGVhcF9hbGxvY2F0ZSgpLCBidXQg aW5pdGlhbGl6ZXMgdGhlIHBhaXJpbmcgaGVhcCBpbi1wbGFjZQorICogcmF0aGVyIHRoYW4gYWxs b2NhdGluZyBhIG5ldyBjaHVuayBvZiBtZW1vcnkuICBVc2VmdWwgdG8gc3RvcmUgdGhlIHBhaXJp bmcKKyAqIGhlYXAgaW4gYSBzaGFyZWQgbWVtb3J5LgorICovCit2b2lkCitwYWlyaW5naGVhcF9p bml0aWFsaXplKHBhaXJpbmdoZWFwICpoZWFwLCBwYWlyaW5naGVhcF9jb21wYXJhdG9yIGNvbXBh cmUsCisJCQkJCSAgIHZvaWQgKmFyZykKK3sKIAloZWFwLT5waF9jb21wYXJlID0gY29tcGFyZTsK IAloZWFwLT5waF9hcmcgPSBhcmc7CiAKIAloZWFwLT5waF9yb290ID0gTlVMTDsKLQotCXJldHVy biBoZWFwOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBj aS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jCmluZGV4IDUyMWVkNTQxOGMuLjkw Yzg0ZmVjMjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYworKysg Yi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNs dWRlICJhY2Nlc3MveGxvZ3ByZWZldGNoZXIuaCIKICNpbmNsdWRlICJhY2Nlc3MveGxvZ3JlY292 ZXJ5LmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvYXN5bmMuaCIKKyNpbmNsdWRlICJjb21tYW5kcy93 YWl0bHNuLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCiAj aW5jbHVkZSAicG9zdG1hc3Rlci9hdXRvdmFjdXVtLmgiCkBAIC0xNTIsNiArMTUzLDcgQEAgQ2Fs Y3VsYXRlU2htZW1TaXplKGludCAqbnVtX3NlbWFwaG9yZXMpCiAJc2l6ZSA9IGFkZF9zaXplKHNp emUsIFdhaXRFdmVudEV4dGVuc2lvblNobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6 ZSwgSW5qZWN0aW9uUG9pbnRTaG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFNs b3RTeW5jU2htZW1TaXplKCkpOworCXNpemUgPSBhZGRfc2l6ZShzaXplLCBXYWl0TFNOU2htZW1T aXplKCkpOwogI2lmZGVmIEVYRUNfQkFDS0VORAogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBTaG1l bUJhY2tlbmRBcnJheVNpemUoKSk7CiAjZW5kaWYKQEAgLTM1Nyw2ICszNTksNyBAQCBDcmVhdGVP ckF0dGFjaFNobWVtU3RydWN0cyh2b2lkKQogCVN0YXRzU2htZW1Jbml0KCk7CiAJV2FpdEV2ZW50 RXh0ZW5zaW9uU2htZW1Jbml0KCk7CiAJSW5qZWN0aW9uUG9pbnRTaG1lbUluaXQoKTsKKwlXYWl0 TFNOU2htZW1Jbml0KCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdl L2xtZ3IvcHJvYy5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYwppbmRleCBjZTI5 ZGE5MDEyLi4xOGUwN2JmNzdkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3Iv cHJvYy5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKQEAgLTM2LDYgKzM2 LDcgQEAKICNpbmNsdWRlICJhY2Nlc3MvdHJhbnNhbS5oIgogI2luY2x1ZGUgImFjY2Vzcy90d29w aGFzZS5oIgogI2luY2x1ZGUgImFjY2Vzcy94bG9ndXRpbHMuaCIKKyNpbmNsdWRlICJjb21tYW5k cy93YWl0bHNuLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGdzdGF0Lmgi CiAjaW5jbHVkZSAicG9zdG1hc3Rlci9hdXRvdmFjdXVtLmgiCkBAIC04NjIsNiArODYzLDExIEBA IFByb2NLaWxsKGludCBjb2RlLCBEYXR1bSBhcmcpCiAJICovCiAJTFdMb2NrUmVsZWFzZUFsbCgp OwogCisJLyoKKwkgKiBDbGVhbnVwIHdhaXRpbmcgZm9yIExTTiBpZiBhbnkuCisJICovCisJV2Fp dExTTkNsZWFudXAoKTsKKwogCS8qIENhbmNlbCBhbnkgcGVuZGluZyBjb25kaXRpb24gdmFyaWFi bGUgc2xlZXAsIHRvbyAqLwogCUNvbmRpdGlvblZhcmlhYmxlQ2FuY2VsU2xlZXAoKTsKIApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50eHQg Yi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50X25hbWVzLnR4dAppbmRleCA4 N2NiY2EyODExLi5mMDc5ZDY2MGE0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hY3Rp dml0eS93YWl0X2V2ZW50X25hbWVzLnR4dAorKysgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0 eS93YWl0X2V2ZW50X25hbWVzLnR4dApAQCAtODcsNiArODcsNyBAQCBMSUJQUVdBTFJFQ0VJVkVS X0NPTk5FQ1QJIldhaXRpbmcgaW4gV0FMIHJlY2VpdmVyIHRvIGVzdGFibGlzaCBjb25uZWN0aW9u IHRvIHJlbQogTElCUFFXQUxSRUNFSVZFUl9SRUNFSVZFCSJXYWl0aW5nIGluIFdBTCByZWNlaXZl ciB0byByZWNlaXZlIGRhdGEgZnJvbSByZW1vdGUgc2VydmVyLiIKIFNTTF9PUEVOX1NFUlZFUgki V2FpdGluZyBmb3IgU1NMIHdoaWxlIGF0dGVtcHRpbmcgY29ubmVjdGlvbi4iCiBXQUlUX0ZPUl9T VEFOREJZX0NPTkZJUk1BVElPTgkiV2FpdGluZyBmb3IgV0FMIHRvIGJlIHJlY2VpdmVkIGFuZCBm bHVzaGVkIGJ5IHRoZSBwaHlzaWNhbCBzdGFuZGJ5LiIKK1dBSVRfRk9SX1dBTF9SRVBMQVkJIldh aXRpbmcgZm9yIGEgcmVwbGF5IG9mIHRoZSBwYXJ0aWN1bGFyIFdBTCBwb3NpdGlvbiBvbiB0aGUg cGh5c2ljYWwgc3RhbmRieS4iCiBXQUxfU0VOREVSX1dBSVRfRk9SX1dBTAkiV2FpdGluZyBmb3Ig V0FMIHRvIGJlIGZsdXNoZWQgaW4gV0FMIHNlbmRlciBwcm9jZXNzLiIKIFdBTF9TRU5ERVJfV1JJ VEVfREFUQQkiV2FpdGluZyBmb3IgYW55IGFjdGl2aXR5IHdoZW4gcHJvY2Vzc2luZyByZXBsaWVz IGZyb20gV0FMIHJlY2VpdmVyIGluIFdBTCBzZW5kZXIgcHJvY2Vzcy4iCiAKQEAgLTM0NSw2ICsz NDYsNyBAQCBXQUxTdW1tYXJpemVyCSJXYWl0aW5nIHRvIHJlYWQgb3IgdXBkYXRlIFdBTCBzdW1t YXJpemF0aW9uIHN0YXRlLiIKIERTTVJlZ2lzdHJ5CSJXYWl0aW5nIHRvIHJlYWQgb3IgdXBkYXRl IHRoZSBkeW5hbWljIHNoYXJlZCBtZW1vcnkgcmVnaXN0cnkuIgogSW5qZWN0aW9uUG9pbnQJIldh aXRpbmcgdG8gcmVhZCBvciB1cGRhdGUgaW5mb3JtYXRpb24gcmVsYXRlZCB0byBpbmplY3Rpb24g cG9pbnRzLiIKIFNlcmlhbENvbnRyb2wJIldhaXRpbmcgdG8gcmVhZCBvciB1cGRhdGUgc2hhcmVk IDxmaWxlbmFtZT5wZ19zZXJpYWw8L2ZpbGVuYW1lPiBzdGF0ZS4iCitXYWl0TFNOCSJXYWl0aW5n IHRvIHJlYWQgb3IgdXBkYXRlIHNoYXJlZCBXYWl0LWZvci1MU04gc3RhdGUuIgogCiAjCiAjIEVO RCBPRiBQUkVERUZJTkVEIExXTE9DS1MgKERPIE5PVCBDSEFOR0UgVEhJUyBMSU5FKQpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFs b2cvcGdfcHJvYy5kYXQKaW5kZXggNmE1NDc2ZDNjNC4uNWQ4M2M0ZTkxOSAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9n L3BnX3Byb2MuZGF0CkBAIC0xMjE1Niw2ICsxMjE1NiwxMSBAQAogICBwcm9yZXR0eXBlID0+ICdi eXRlYScsIHByb2FyZ3R5cGVzID0+ICdwZ19icmluX21pbm1heF9tdWx0aV9zdW1tYXJ5JywKICAg cHJvc3JjID0+ICdicmluX21pbm1heF9tdWx0aV9zdW1tYXJ5X3NlbmQnIH0sCiAKK3sgb2lkID0+ ICcxNjM4NycsIGRlc2NyID0+ICd3YWl0IGZvciBMU04gd2l0aCB0aW1lb3V0JywKKyAgcHJvbmFt ZSA9PiAncGdfd2FsX3JlcGxheV93YWl0JywgcHJva2luZCA9PiAncCcsIHByb3JldHR5cGUgPT4g J3ZvaWQnLAorICBwcm9hcmd0eXBlcyA9PiAncGdfbHNuIGludDgnLCBwcm9hcmduYW1lcyA9PiAn e3RhcmdldF9sc24sdGltZW91dH0nLAorICBwcm9zcmMgPT4gJ3BnX3dhbF9yZXBsYXlfd2FpdCcg fSwKKwogeyBvaWQgPT4gJzYyOTEnLCBkZXNjciA9PiAnYXJiaXRyYXJ5IHZhbHVlIGZyb20gYW1v bmcgaW5wdXQgdmFsdWVzJywKICAgcHJvbmFtZSA9PiAnYW55X3ZhbHVlJywgcHJva2luZCA9PiAn YScsIHByb2lzc3RyaWN0ID0+ICdmJywKICAgcHJvcmV0dHlwZSA9PiAnYW55ZWxlbWVudCcsIHBy b2FyZ3R5cGVzID0+ICdhbnllbGVtZW50JywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1h bmRzL3dhaXRsc24uaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3dhaXRsc24uaApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5kYTE3YjhiZTZmCi0tLSAvZGV2L251bGwKKysr IGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvd2FpdGxzbi5oCkBAIC0wLDAgKzEsNzcgQEAKKy8qLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICoKKyAqIHdhaXRsc24uaAorICoJICBEZWNsYXJhdGlvbnMgZm9yIExT TiByZXBsYXkgd2FpdGluZyByb3V0aW5lcy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjQsIFBv c3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICogc3JjL2luY2x1ZGUvY29t bWFuZHMvd2FpdGxzbi5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgV0FJ VF9MU05fSAorI2RlZmluZSBXQUlUX0xTTl9ICisKKyNpbmNsdWRlICJsaWIvcGFpcmluZ2hlYXAu aCIKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorI2luY2x1ZGUgInBvcnQvYXRvbWljcy5oIgorI2lu Y2x1ZGUgInN0b3JhZ2Uvc3Bpbi5oIgorI2luY2x1ZGUgInRjb3AvZGVzdC5oIgorCisvKgorICog V2FpdExTTlByb2NJbmZvIOKAkyB0aGUgc2hhcmVkIG1lbW9yeSBzdHJ1Y3R1cmUgcmVwcmVzZW50 aW5nIGluZm9ybWF0aW9uCisgKiBhYm91dCB0aGUgc2luZ2xlIHByb2Nlc3MsIHdoaWNoIG1heSB3 YWl0IGZvciBMU04gcmVwbGF5LiAgQW4gaXRlbSBvZgorICogd2FpdExTTi0+cHJvY0luZm9zIGFy cmF5LgorICovCit0eXBlZGVmIHN0cnVjdCBXYWl0TFNOUHJvY0luZm8KK3sKKwkvKgorCSAqIEEg cHJvY2VzcyBudW1iZXIsIHNhbWUgYXMgdGhlIGluZGV4IG9mIHRoaXMgaXRlbSBpbiB3YWl0TFNO LT5wcm9jSW5mb3MuCisJICogU3RvcmVkIGZvciBjb252ZW5pZW5jZS4KKwkgKi8KKwlpbnQJCQlw cm9jbnVtOworCisJLyogTFNOLCB3aGljaCB0aGlzIHByb2Nlc3MgaXMgd2FpdGluZyBmb3IgKi8K KwlYTG9nUmVjUHRyCXdhaXRMU047CisKKwkvKiBBIHBhaXJpbmcgaGVhcCBub2RlIGZvciBwYXJ0 aWNpcGF0aW9uIGluIHdhaXRMU04tPndhaXRlcnNIZWFwICovCisJcGFpcmluZ2hlYXBfbm9kZSBw aE5vZGU7CisKKwkvKiBBIGZsYWcgaW5kaWNhdGluZyB0aGF0IHRoaXMgaXRlbSBpcyBhZGRlZCB0 byB3YWl0TFNOLT53YWl0ZXJzSGVhcCAqLworCWJvb2wJCWluSGVhcDsKK30gV2FpdExTTlByb2NJ bmZvOworCisvKgorICogV2FpdExTTlN0YXRlIC0gdGhlIHNoYXJlZCBtZW1vcnkgc3RhdGUgZm9y IHRoZSByZXBsYXkgTFNOIHdhaXRpbmcgZmFjaWxpdHkuCisgKi8KK3R5cGVkZWYgc3RydWN0IFdh aXRMU05TdGF0ZQoreworCS8qCisJICogVGhlIG1pbmltdW0gTFNOIHZhbHVlIHNvbWUgcHJvY2Vz cyBpcyB3YWl0aW5nIGZvci4gIFVzZWQgZm9yIHRoZQorCSAqIGZhc3QtcGF0aCBjaGVja2luZyBp ZiB3ZSBuZWVkIHRvIHdha2UgdXAgYW55IHdhaXRlcnMgYWZ0ZXIgcmVwbGF5aW5nIGEKKwkgKiBX QUwgcmVjb3JkLiAgQ291bGQgYmUgcmVhZCBsb2NrLWxlc3MuICBVcGRhdGUgcHJvdGVjdGVkIGJ5 IFdhaXRMU05Mb2NrLgorCSAqLworCXBnX2F0b21pY191aW50NjQgbWluV2FpdGVkTFNOOworCisJ LyoKKwkgKiBBIHBhaXJpbmcgaGVhcCBvZiB3YWl0aW5nIHByb2Nlc3NlcyBvcmRlciBieSBMU04g dmFsdWVzIChsZWFzdCBMU04gaXMKKwkgKiBvbiB0b3ApLiAgUHJvdGVjdGVkIGJ5IFdhaXRMU05M b2NrLgorCSAqLworCXBhaXJpbmdoZWFwIHdhaXRlcnNIZWFwOworCisJLyoKKwkgKiBBbiBhcnJh eSB3aXRoIHBlci1wcm9jZXNzIGluZm9ybWF0aW9uLCBpbmRleGVkIGJ5IHRoZSBwcm9jZXNzIG51 bWJlci4KKwkgKiBQcm90ZWN0ZWQgYnkgV2FpdExTTkxvY2suCisJICovCisJV2FpdExTTlByb2NJ bmZvIHByb2NJbmZvc1tGTEVYSUJMRV9BUlJBWV9NRU1CRVJdOworfSBXYWl0TFNOU3RhdGU7CisK K2V4dGVybiBQR0RMTElNUE9SVCBzdHJ1Y3QgV2FpdExTTlN0YXRlICp3YWl0TFNOOworCitleHRl cm4gdm9pZCBXYWl0Rm9yTFNOKFhMb2dSZWNQdHIgdGFyZ2V0TFNOLCBpbnQ2NCB0aW1lb3V0KTsK K2V4dGVybiBTaXplIFdhaXRMU05TaG1lbVNpemUodm9pZCk7CitleHRlcm4gdm9pZCBXYWl0TFNO U2htZW1Jbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgV2FpdExTTlNldExhdGNoZXMoWExvZ1JlY1B0 ciBjdXJyZW50TFNOKTsKK2V4dGVybiB2b2lkIFdhaXRMU05DbGVhbnVwKHZvaWQpOworCisjZW5k aWYJCQkJCQkJLyogV0FJVF9MU05fSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbGliL3Bh aXJpbmdoZWFwLmggYi9zcmMvaW5jbHVkZS9saWIvcGFpcmluZ2hlYXAuaAppbmRleCA3ZWFkZTgx NTM1Li45ZTFjMjYwMzNhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9saWIvcGFpcmluZ2hlYXAu aAorKysgYi9zcmMvaW5jbHVkZS9saWIvcGFpcmluZ2hlYXAuaApAQCAtNzcsNiArNzcsOSBAQCB0 eXBlZGVmIHN0cnVjdCBwYWlyaW5naGVhcAogCiBleHRlcm4gcGFpcmluZ2hlYXAgKnBhaXJpbmdo ZWFwX2FsbG9jYXRlKHBhaXJpbmdoZWFwX2NvbXBhcmF0b3IgY29tcGFyZSwKIAkJCQkJCQkJCQkg dm9pZCAqYXJnKTsKK2V4dGVybiB2b2lkIHBhaXJpbmdoZWFwX2luaXRpYWxpemUocGFpcmluZ2hl YXAgKmhlYXAsCisJCQkJCQkJCSAgIHBhaXJpbmdoZWFwX2NvbXBhcmF0b3IgY29tcGFyZSwKKwkJ CQkJCQkJICAgdm9pZCAqYXJnKTsKIGV4dGVybiB2b2lkIHBhaXJpbmdoZWFwX2ZyZWUocGFpcmlu Z2hlYXAgKmhlYXApOwogZXh0ZXJuIHZvaWQgcGFpcmluZ2hlYXBfYWRkKHBhaXJpbmdoZWFwICpo ZWFwLCBwYWlyaW5naGVhcF9ub2RlICpub2RlKTsKIGV4dGVybiBwYWlyaW5naGVhcF9ub2RlICpw YWlyaW5naGVhcF9maXJzdChwYWlyaW5naGVhcCAqaGVhcCk7CmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9zdG9yYWdlL2x3bG9ja2xpc3QuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbHdsb2NrbGlz dC5oCmluZGV4IDg1ZjY1NjhiOWUuLmMyYmFiNWE3OTQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L3N0b3JhZ2UvbHdsb2NrbGlzdC5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbHdsb2NrbGlz dC5oCkBAIC04MywzICs4Myw0IEBAIFBHX0xXTE9DSyg0OSwgV0FMU3VtbWFyaXplcikKIFBHX0xX TE9DSyg1MCwgRFNNUmVnaXN0cnkpCiBQR19MV0xPQ0soNTEsIEluamVjdGlvblBvaW50KQogUEdf TFdMT0NLKDUyLCBTZXJpYWxDb250cm9sKQorUEdfTFdMT0NLKDUzLCBXYWl0TFNOKQpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvcmVjb3ZlcnkvbWVzb24uYnVpbGQgYi9zcmMvdGVzdC9yZWNvdmVyeS9t ZXNvbi5idWlsZAppbmRleCBiMWViNzdiMWVjLi4zZWZlNDY0NWFjIDEwMDY0NAotLS0gYS9zcmMv dGVzdC9yZWNvdmVyeS9tZXNvbi5idWlsZAorKysgYi9zcmMvdGVzdC9yZWNvdmVyeS9tZXNvbi5i dWlsZApAQCAtNTEsNiArNTEsOCBAQCB0ZXN0cyArPSB7CiAgICAgICAndC8wNDBfc3RhbmRieV9m YWlsb3Zlcl9zbG90c19zeW5jLnBsJywKICAgICAgICd0LzA0MV9jaGVja3BvaW50X2F0X3Byb21v dGUucGwnLAogICAgICAgJ3QvMDQyX2xvd19sZXZlbF9iYWNrdXAucGwnLAorICAgICAgJ3QvMDQz X3dhbF9yZXBsYXlfd2FpdC5wbCcsCisgICAgICAndC8wNDRfd2FsX3JlcGxheV93YWl0X2luamVj dGlvbl90ZXN0LnBsJywKICAgICBdLAogICB9LAogfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVj b3ZlcnkvdC8wNDNfd2FsX3JlcGxheV93YWl0LnBsIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wNDNf d2FsX3JlcGxheV93YWl0LnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAu Ljg2N2MzZGQ5NGEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWNvdmVyeS90LzA0M193 YWxfcmVwbGF5X3dhaXQucGwKQEAgLTAsMCArMSwxNzYgQEAKKyMgQ2hlY2tzIHdhaXRpbmcgZm9y IHRoZSBsc24gcmVwbGF5IG9uIHN0YW5kYnkgdXNpbmcKKyMgcGdfd2FsX3JlcGxheV93YWl0KCkg cHJvY2VkdXJlLgordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKKwordXNlIFBvc3RncmVTUUw6 OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6 TW9yZTsKKworIyBJbml0aWFsaXplIHByaW1hcnkgbm9kZQorbXkgJG5vZGVfcHJpbWFyeSA9IFBv c3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygncHJpbWFyeScpOworJG5vZGVfcHJpbWFyeS0+ aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+IDEpOworJG5vZGVfcHJpbWFyeS0+c3RhcnQ7CisKKyMg QW5kIHNvbWUgY29udGVudCBhbmQgdGFrZSBhIGJhY2t1cAorJG5vZGVfcHJpbWFyeS0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJMRSB3YWl0X3Rlc3QgQVMgU0VMRUNUIGdlbmVy YXRlX3NlcmllcygxLDEwKSBBUyBhIik7CitteSAkYmFja3VwX25hbWUgPSAnbXlfYmFja3VwJzsK KyRub2RlX3ByaW1hcnktPmJhY2t1cCgkYmFja3VwX25hbWUpOworCisjIENyZWF0ZSBhIHN0cmVh bWluZyBzdGFuZGJ5IHdpdGggYSAxIHNlY29uZCBkZWxheSBmcm9tIHRoZSBiYWNrdXAKK215ICRu b2RlX3N0YW5kYnkxID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdzdGFuZGJ5Jyk7 CitteSAkZGVsYXkgPSAxOworJG5vZGVfc3RhbmRieTEtPmluaXRfZnJvbV9iYWNrdXAoJG5vZGVf cHJpbWFyeSwgJGJhY2t1cF9uYW1lLAorCWhhc19zdHJlYW1pbmcgPT4gMSk7Ciskbm9kZV9zdGFu ZGJ5MS0+YXBwZW5kX2NvbmYoCisJJ3Bvc3RncmVzcWwuY29uZicsIHFxWworCXJlY292ZXJ5X21p bl9hcHBseV9kZWxheSA9ICcke2RlbGF5fXMnCitdKTsKKyRub2RlX3N0YW5kYnkxLT5zdGFydDsK KworIyBJCisjIE1ha2Ugc3VyZSB0aGF0IHBnX3dhbF9yZXBsYXlfd2FpdCgpIHdvcmtzOiBhZGQg bmV3IGNvbnRlbnQgdG8KKyMgcHJpbWFyeSBhbmQgbWVtb3JpemUgcHJpbWFyeSdzIGluc2VydCBM U04sIHRoZW4gd2FpdCBmb3IgdGhhdCBMU04gdG8gYmUKKyMgcmVwbGF5ZWQgb24gc3RhbmRieS4K KyRub2RlX3ByaW1hcnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyB3YWl0 X3Rlc3QgVkFMVUVTIChnZW5lcmF0ZV9zZXJpZXMoMTEsIDIwKSkiKTsKK215ICRsc24xID0KKyAg JG5vZGVfcHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgcGdfY3VycmVudF93 YWxfaW5zZXJ0X2xzbigpIik7CitteSAkb3V0cHV0ID0gJG5vZGVfc3RhbmRieTEtPnNhZmVfcHNx bCgKKwkncG9zdGdyZXMnLCBxcVsKKwlDQUxMIHBnX3dhbF9yZXBsYXlfd2FpdCgnJHtsc24xfScs IDEwMDAwMDApOworCVNFTEVDVCBwZ19sc25fY21wKHBnX2xhc3Rfd2FsX3JlcGxheV9sc24oKSwg JyR7bHNuMX0nOjpwZ19sc24pOworXSk7CisKKyMgTWFrZSBzdXJlIHRoZSBjdXJyZW50IExTTiBv biBzdGFuZGJ5IGlzIGF0IGxlYXN0IGFzIGJpZyBhcyB0aGUgTFNOIHdlCisjIG9ic2VydmVkIG9u IHByaW1hcnkncyBiZWZvcmUuCitvaygkb3V0cHV0ID49IDAsCisJInN0YW5kYnkgcmVhY2hlZCB0 aGUgc2FtZSBMU04gYXMgcHJpbWFyeSBhZnRlciBwZ193YWxfcmVwbGF5X3dhaXQoKSIpOworCisj IElJCisjIENoZWNrIHRoYXQgbmV3IGRhdGEgaXMgdmlzaWJsZSBhZnRlciBjYWxsaW5nIHBnX3dh bF9yZXBsYXlfd2FpdCgpCiskbm9kZV9wcmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwki SU5TRVJUIElOVE8gd2FpdF90ZXN0IFZBTFVFUyAoZ2VuZXJhdGVfc2VyaWVzKDIxLCAzMCkpIik7 CitteSAkbHNuMiA9CisgICRub2RlX3ByaW1hcnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VM RUNUIHBnX2N1cnJlbnRfd2FsX2luc2VydF9sc24oKSIpOworJG91dHB1dCA9ICRub2RlX3N0YW5k YnkxLT5zYWZlX3BzcWwoCisJJ3Bvc3RncmVzJywgcXFbCisJQ0FMTCBwZ193YWxfcmVwbGF5X3dh aXQoJyR7bHNuMn0nKTsKKwlTRUxFQ1QgY291bnQoKikgRlJPTSB3YWl0X3Rlc3Q7CitdKTsKKwor IyBNYWtlIHN1cmUgdGhlIGN1cnJlbnQgTFNOIG9uIHN0YW5kYnkgYW5kIGlzIHRoZSBzYW1lIGFz IHByaW1hcnkncyBMU04KK29rKCRvdXRwdXQgZXEgMzAsICJzdGFuZGJ5IHJlYWNoZWQgdGhlIHNh bWUgTFNOIGFzIHByaW1hcnkiKTsKKworIyBJSUkKKyMgQ2hlY2sgdHdvIHN0YW5kYnkgd2FpdGlu ZyBMU04KKyMgQ3JlYXRlIGEgc3RyZWFtaW5nIHNlY29uZCBzdGFuZGJ5IHdpdGggYSAxIHNlY29u ZCBkZWxheSBmcm9tIHRoZSBiYWNrdXAKK215ICRub2RlX3N0YW5kYnkyID0gUG9zdGdyZVNRTDo6 VGVzdDo6Q2x1c3Rlci0+bmV3KCdzdGFuZGJ5MicpOworJG5vZGVfc3RhbmRieTItPmluaXRfZnJv bV9iYWNrdXAoJG5vZGVfcHJpbWFyeSwgJGJhY2t1cF9uYW1lLAorCWhhc19zdHJlYW1pbmcgPT4g MSk7Ciskbm9kZV9zdGFuZGJ5Mi0+YXBwZW5kX2NvbmYoCisJJ3Bvc3RncmVzcWwuY29uZicsIHFx WworCXJlY292ZXJ5X21pbl9hcHBseV9kZWxheSA9ICcke2RlbGF5fXMnCitdKTsKKyRub2RlX3N0 YW5kYnkyLT5zdGFydDsKKworIyBDaGVjayB0aGF0IG5ldyBkYXRhIGlzIHZpc2libGUgYWZ0ZXIg Y2FsbGluZyBwZ193YWxfcmVwbGF5X3dhaXQoKQorJG5vZGVfcHJpbWFyeS0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCisJIklOU0VSVCBJTlRPIHdhaXRfdGVzdCBWQUxVRVMgKGdlbmVyYXRlX3Nlcmll cygzMSwgNDApKSIpOworJGxzbjIgPQorICAkbm9kZV9wcmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIlNFTEVDVCBwZ19jdXJyZW50X3dhbF9pbnNlcnRfbHNuKCkiKTsKKworJG91dHB1dCA9 ICRub2RlX3N0YW5kYnkxLT5zYWZlX3BzcWwoCisJJ3Bvc3RncmVzJywgcXFbCisJQ0FMTCBwZ193 YWxfcmVwbGF5X3dhaXQoJyR7bHNuMn0nKTsKKwlTRUxFQ1QgY291bnQoKikgRlJPTSB3YWl0X3Rl c3Q7CitdKTsKK215ICRvdXRwdXQyID0gJG5vZGVfc3RhbmRieTEtPnNhZmVfcHNxbCgKKwkncG9z dGdyZXMnLCBxcVsKKwlDQUxMIHBnX3dhbF9yZXBsYXlfd2FpdCgnJHtsc24yfScpOworCVNFTEVD VCBjb3VudCgqKSBGUk9NIHdhaXRfdGVzdDsKK10pOworCisjIE1ha2Ugc3VyZSB0aGUgY3VycmVu dCBMU04gb24gc3RhbmRieSBhbmQgc3RhbmRieTIgYXJlIHRoZSBzYW1lIGFzCisjIHByaW1hcnkn cyBMU04KK29rKCRvdXRwdXQgZXEgNDAsICJzdGFuZGJ5MSByZWFjaGVkIHRoZSBzYW1lIExTTiBh cyBwcmltYXJ5Iik7Citvaygkb3V0cHV0MiBlcSA0MCwgInN0YW5kYnkyIHJlYWNoZWQgdGhlIHNh bWUgTFNOIGFzIHByaW1hcnkiKTsKKworIyBJVgorIyBDcmVhdGUgYSBjYXNjYWRpbmcgc3RhbmRi eSB3YWl0aW5nIExTTgorJGJhY2t1cF9uYW1lID0gJ2Nhc19iYWNrdXAnOworJG5vZGVfc3RhbmRi eTEtPmJhY2t1cCgkYmFja3VwX25hbWUpOworCitteSAkY2FzY2FkaW5nX3N0YW5kYnkgPSBQb3N0 Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ2Nhc2NhZGluZ19zdGFuZGJ5Jyk7CiskY2FzY2Fk aW5nX3N0YW5kYnktPmluaXRfZnJvbV9iYWNrdXAoJG5vZGVfc3RhbmRieTEsICRiYWNrdXBfbmFt ZSwKKwloYXNfc3RyZWFtaW5nID0+IDEsCisJaGFzX3Jlc3RvcmluZyA9PiAxKTsKKworbXkgJGNh c2NhZGluZ19jb25uc3RyID0gJG5vZGVfc3RhbmRieTEtPmNvbm5zdHI7CiskY2FzY2FkaW5nX3N0 YW5kYnktPmFwcGVuZF9jb25mKAorCSdwb3N0Z3Jlc3FsLmNvbmYnLCBxcSgKKwlob3Rfc3RhbmRi eV9mZWVkYmFjayA9IG9uCisJcmVjb3ZlcnlfbWluX2FwcGx5X2RlbGF5ID0gJyR7ZGVsYXl9cycK KykpOworCiskY2FzY2FkaW5nX3N0YW5kYnktPnN0YXJ0OworCisjIENoZWNrIHRoYXQgbmV3IGRh dGEgaXMgdmlzaWJsZSBhZnRlciBjYWxsaW5nIHBnX3dhbF9yZXBsYXlfd2FpdCgpCiskbm9kZV9w cmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiSU5TRVJUIElOVE8gd2FpdF90ZXN0IFZB TFVFUyAoZ2VuZXJhdGVfc2VyaWVzKDQxLCA1MCkpIik7CiskbHNuMiA9CisgICRub2RlX3ByaW1h cnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHBnX2N1cnJlbnRfd2FsX2luc2VydF9s c24oKSIpOworCiskb3V0cHV0ID0gJG5vZGVfc3RhbmRieTEtPnNhZmVfcHNxbCgKKwkncG9zdGdy ZXMnLCBxcVsKKwlDQUxMIHBnX3dhbF9yZXBsYXlfd2FpdCgnJHtsc24yfScpOworCVNFTEVDVCBj b3VudCgqKSBGUk9NIHdhaXRfdGVzdDsKK10pOworJG91dHB1dDIgPSAkY2FzY2FkaW5nX3N0YW5k YnktPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxcVsKKwlDQUxMIHBnX3dhbF9yZXBsYXlfd2Fp dCgnJHtsc24yfScpOworCVNFTEVDVCBjb3VudCgqKSBGUk9NIHdhaXRfdGVzdDsKK10pOworCisj IE1ha2Ugc3VyZSB0aGUgY3VycmVudCBMU04gb24gc3RhbmRieSBhbmQgc3RhbmRieTIgYXJlIHRo ZSBzYW1lIGFzCisjIHByaW1hcnkncyBMU04KK29rKCRvdXRwdXQgZXEgNTAsICJzdGFuZGJ5MSBy ZWFjaGVkIHRoZSBzYW1lIExTTiBhcyBwcmltYXJ5Iik7Citvaygkb3V0cHV0MiBlcSA1MCwgImNh c2NhZGluZ19zdGFuZGJ5IHJlYWNoZWQgdGhlIHNhbWUgTFNOIGFzIHByaW1hcnkiKTsKKworIyBW CisjIENoZWNrIHRoYXQgd2FpdGluZyBmb3IgdW5yZWFjaGFibGUgTFNOIHRyaWdnZXJzIHRoZSB0 aW1lb3V0LiAgVGhlCisjIHVucmVhY2hhYmxlIExTTiBtdXN0IGJlIHdlbGwgaW4gYWR2YW5jZS4g IFNvIFdBTCByZWNvcmRzIGlzc3VlZCBieQorIyB0aGUgY29uY3VycmVudCBhdXRvdmFjdXVtIGNv dWxkIG5vdCBhZmZlY3QgdGhhdC4KK215ICRsc24zID0KKyAgJG5vZGVfcHJpbWFyeS0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBwZ19jdXJyZW50X3dhbF9pbnNlcnRfbHNuKCkgKyAx MDAwMDAwMDAwMCIpOworbXkgJHN0ZGVycjsKKyRub2RlX3N0YW5kYnkxLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKKwkiQ0FMTCBwZ193YWxfcmVwbGF5X3dhaXQoJyR7bHNuMn0nLCAxMCk7Iik7Cisk bm9kZV9zdGFuZGJ5MS0+cHNxbCgKKwkncG9zdGdyZXMnLAorCSJDQUxMIHBnX3dhbF9yZXBsYXlf d2FpdCgnJHtsc24zfScsIDEwMDApOyIsCisJc3RkZXJyID0+IFwkc3RkZXJyKTsKK29rKCAkc3Rk ZXJyID1+IC90aW1lZCBvdXQgd2hpbGUgd2FpdGluZyBmb3IgdGFyZ2V0IExTTi8sCisJImdldCB0 aW1lb3V0IG9uIHdhaXRpbmcgZm9yIHVucmVhY2hhYmxlIExTTiIpOworCisjIFZJCisjIENoZWNr IHRoYXQgdGhlIHN0YW5kYnkgcHJvbW90aW9uIHRlcm1pbmF0ZXMgdGhlIHdhaXQgb24gTFNOLiAg U3RhcnQKKyMgd2FpdGluZyBmb3IgdW5yZWFjaGFibGUgTFNOIHRoZW4gcHJvbW90ZS4gIENoZWNr IHRoZSBsb2cgZm9yIHRoZSByZWxldmFudAorIyBlcnJvciBtZXNzYWdlLgorbXkgJHBzcWxfc2Vz c2lvbiA9ICRub2RlX3N0YW5kYnkxLT5iYWNrZ3JvdW5kX3BzcWwoJ3Bvc3RncmVzJyk7CiskcHNx bF9zZXNzaW9uLT5xdWVyeV91bnRpbCgKKwlxci9zdGFydC8sIHFxWworCVxcZWNobyBzdGFydAor CUNBTEwgcGdfd2FsX3JlcGxheV93YWl0KCcke2xzbjN9Jyk7CitdKTsKKworbXkgJGxvZ19vZmZz ZXQgPSAtcyAkbm9kZV9zdGFuZGJ5MS0+bG9nZmlsZTsKKyRub2RlX3N0YW5kYnkxLT5wcm9tb3Rl OworJG5vZGVfc3RhbmRieTEtPndhaXRfZm9yX2xvZygncmVjb3ZlcnkgaXMgbm90IGluIHByb2dy ZXNzJywgJGxvZ19vZmZzZXQpOworCiskbm9kZV9zdGFuZGJ5MS0+c3RvcDsKKyRub2RlX3N0YW5k YnkyLT5zdG9wOworJG5vZGVfcHJpbWFyeS0+c3RvcDsKK2RvbmVfdGVzdGluZygpOwpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wNDRfd2FsX3JlcGxheV93YWl0X2luamVjdGlvbl90 ZXN0LnBsIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wNDRfd2FsX3JlcGxheV93YWl0X2luamVjdGlv bl90ZXN0LnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjI0MjllZjBk YTIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWNvdmVyeS90LzA0NF93YWxfcmVwbGF5 X3dhaXRfaW5qZWN0aW9uX3Rlc3QucGwKQEAgLTAsMCArMSw5OCBAQAorIyBDb3B5cmlnaHQgKGMp IDIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKK3VzZSBzdHJpY3Q7 Cit1c2Ugd2FybmluZ3MgRkFUQUwgPT4gJ2FsbCc7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1 c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUaW1lOjpIaVJlcyBxdyh1 c2xlZXApOwordXNlIFRlc3Q6Ok1vcmU7CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRlc3QgcmFjZSBjb25kaXRpb24gd2hlbiB0aW1lb3V0 IHJlYWNoZWQgYW5kIG5ldyB3YWwgcmVwbGF5ZWQgb24gc3RhbmRieS4KKyMKKyMgVGhpcyB0ZXN0 IHJlbGllcyBvbiBhbiBpbmplY3Rpb24gcG9pbnQgdGhhdCBjYXVzZSB0byB3YWl0IGJlZm9yZSBE ZWxldGUKKyMgZnJvbSBoZWFwIGFuZCB3YWl0IHdoZW4gbmV3IGxzbiBhZGRlZCB0byBoZWFwLgor IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworaWYg KCRFTlZ7ZW5hYmxlX2luamVjdGlvbl9wb2ludHN9IG5lICd5ZXMnKQoreworCXBsYW4gc2tpcF9h bGwgPT4gJ0luamVjdGlvbiBwb2ludHMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGJ1aWxkJzsKK30K KworIyBJbml0aWFsaXplIHByaW1hcnkgbm9kZS4KK215ICRub2RlX3ByaW1hcnkgPSBQb3N0Z3Jl U1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ21hc3RlcicpOworJG5vZGVfcHJpbWFyeS0+aW5pdChh bGxvd3Nfc3RyZWFtaW5nID0+IDEpOworJG5vZGVfcHJpbWFyeS0+YXBwZW5kX2NvbmYoCisJJ3Bv c3RncmVzcWwuY29uZicsIHFbCityZXN0YXJ0X2FmdGVyX2NyYXNoID0gb24KK10pOworJG5vZGVf cHJpbWFyeS0+c3RhcnQ7CisKK215ICRiYWNrdXBfbmFtZSA9ICdteV9iYWNrdXAnOworJG5vZGVf cHJpbWFyeS0+YmFja3VwKCRiYWNrdXBfbmFtZSk7CisKKyMgU2V0dXAgZmlyc3Qgc3RhbmRieS4K K215ICRub2RlX3N0YW5kYnkgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3N0YW5k YnkxJyk7Ciskbm9kZV9zdGFuZGJ5LT5pbml0X2Zyb21fYmFja3VwKCRub2RlX3ByaW1hcnksICRi YWNrdXBfbmFtZSwKKwloYXNfc3RyZWFtaW5nID0+IDEpOworJG5vZGVfc3RhbmRieS0+c3RhcnQ7 CisKKyMgU2V0dXAgc2Vjb25kIHN0YW5kYnkuCitteSAkbm9kZV9zdGFuZGJ5MiA9IFBvc3RncmVT UUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnc3RhbmRieTInKTsKKyRub2RlX3N0YW5kYnkyLT5pbml0 X2Zyb21fYmFja3VwKCRub2RlX3ByaW1hcnksICRiYWNrdXBfbmFtZSwKKwloYXNfc3RyZWFtaW5n ID0+IDEpOworJG5vZGVfc3RhbmRieTItPnN0YXJ0OworCisjIENyZWF0ZSB0YWJsZQorJG5vZGVf cHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdDUkVBVEUgVEFCTEUgcHJpbV90YWIgKGEg aW50KTsnKTsKKworIyBDcmVhdGUgZXh0ZW50aW9uIGluamVjdGlvbiBwb2ludAorJG5vZGVfcHJp bWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdDUkVBVEUgRVhURU5TSU9OIGluamVjdGlvbl9w b2ludHM7Jyk7CisjIFdhaXQgdW50aWwgdGhlIGV4dGVuc2lvbiBoYXMgYmVlbiBjcmVhdGVkIG9u IHRoZSBzdGFuZGJ5Ciskbm9kZV9wcmltYXJ5LT53YWl0X2Zvcl9yZXBsYXlfY2F0Y2h1cCgkbm9k ZV9zdGFuZGJ5KTsKKworIyBBdHRhY2ggdGhlIHBvaW50IGluIGJlZm9yZSBkZWxldGVMU05XYWl0 ZXIuCiskbm9kZV9zdGFuZGJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIGluamVj dGlvbl9wb2ludHNfYXR0YWNoKCdwZy13YWwtcmVwbGF5LXdhaXQnLCAnd2FpdCcpOyIpOworCisj IEdldCBsb2cgb2Zmc2V0CitteSAkbG9nc3RhcnQgPSAtcyAkbm9kZV9zdGFuZGJ5LT5sb2dmaWxl OworCisjIEdldCBjdXJyZW50IGxzbiBmcm9tIHByaW1hcnkKK215ICRsc25fcHIgPSAkbm9kZV9w cmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHBnX2N1cnJlbnRfd2FsX2lu c2VydF9sc24oKSArIDEwMDAwIik7CisKKyMgQ0FMTCBwZ193YWxfcmVwbGF5X3dhaXQgd2l0aCB0 aW1lb3V0IG9uIHN0YW5kYnkxCitteSAkcHNxbF9zZXNzaW9uMSA9ICRub2RlX3N0YW5kYnktPmJh Y2tncm91bmRfcHNxbCgncG9zdGdyZXMnKTsKKyRwc3FsX3Nlc3Npb24xLT5xdWVyeV91bnRpbCgK Kwlxci9zdGFydC8sIHFxWworCVxcZWNobyBzdGFydAorCUNBTEwgcGdfd2FsX3JlcGxheV93YWl0 KCcke2xzbl9wcn0nLDEwMDApOworXSk7CisKKyMgV2FpdCB0aWxsIHBnLXdhbC1yZXBsYXktd2Fp dCBhcHBlcmllZCBpbiBwZ19zdGF0X2FjdGl2aXR5Ciskbm9kZV9zdGFuZGJ5LT53YWl0X2Zvcl9l dmVudCgnY2xpZW50IGJhY2tlbmQnLCAncGctd2FsLXJlcGxheS13YWl0Jyk7CisKKyMgR2VuZXJh dGUgc29tZSBXQUwKKyRub2RlX3ByaW1hcnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnSU5TRVJU IElOVE8gcHJpbV90YWIgVkFMVUVTICgxKTsnKTsKKyRub2RlX3ByaW1hcnktPndhaXRfZm9yX3Jl cGxheV9jYXRjaHVwKCRub2RlX3N0YW5kYnkpOworJG5vZGVfcHJpbWFyeS0+d2FpdF9mb3JfcmVw bGF5X2NhdGNodXAoJG5vZGVfc3RhbmRieTIpOworCisjIENBTEwgcGdfd2FsX3JlcGxheV93YWl0 IHdpdGggdGltZW91dCBvbiBzdGFuZGJ5MgorbXkgJHBzcWxfc2Vzc2lvbjIgPSAkbm9kZV9zdGFu ZGJ5Mi0+YmFja2dyb3VuZF9wc3FsKCdwb3N0Z3JlcycpOworJHBzcWxfc2Vzc2lvbjItPnF1ZXJ5 X3VudGlsKAorCXFyL3N0YXJ0LywgcXFbCisJXFxlY2hvIHN0YXJ0CisJQ0FMTCBwZ193YWxfcmVw bGF5X3dhaXQoJyR7bHNuX3ByfScsMTAwMCk7CitdKTsKKworIyBXYWtlIHVwIHRvIGNoZWNrIHRo ZSBtZXNzYWdlCiskbm9kZV9zdGFuZGJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNU IGluamVjdGlvbl9wb2ludHNfd2FrZXVwKCdwZy13YWwtcmVwbGF5LXdhaXQnKTsiKTsKKworIyBD aGVjayB0aGUgbG9nCitvayggJG5vZGVfc3RhbmRieS0+bG9nX2NvbnRhaW5zKAorCQkidGltZWQg b3V0IHdoaWxlIHdhaXRpbmcgZm9yIHRhcmdldCBMU04iLCAkbG9nc3RhcnQpLAorCSJwZ193YWxf cmVwbGF5X3dhaXQgdGltZW91dCIpOworCitkb25lX3Rlc3RpbmcoKTsKZGlmZiAtLWdpdCBhL3Ny Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QKaW5kZXggNGY1NzA3OGQxMy4uODU4NTkxNThjYiAxMDA2NDQKLS0tIGEvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QKQEAgLTMxMDYsNiArMzEwNiw4IEBAIFdhaXRFdmVudElPCiBXYWl0RXZlbnRJUEMK IFdhaXRFdmVudFNldAogV2FpdEV2ZW50VGltZW91dAorV2FpdExTTlByb2NJbmZvCitXYWl0TFNO U3RhdGUKIFdhaXRQTVJlc3VsdAogV2FsQ2xvc2VNZXRob2QKIFdhbENvbXByZXNzaW9uCg== --=_7a5d8e924515ae2bd1411123e87d4666--