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 1jLZlJ-0005KP-Dp for pgsql-hackers@arkaria.postgresql.org; Mon, 06 Apr 2020 21:58:34 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1jLZlI-0005Uv-AB for pgsql-hackers@arkaria.postgresql.org; Mon, 06 Apr 2020 21:58:32 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jLZlH-0005Uo-SJ for pgsql-hackers@lists.postgresql.org; Mon, 06 Apr 2020 21:58:32 +0000 Received: from cyclops.postgrespro.ru ([93.174.131.138] helo=mail.postgrespro.ru) by magus.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1jLZl9-0005kv-Vy for pgsql-hackers@lists.postgresql.org; Mon, 06 Apr 2020 21:58:31 +0000 Received: from localhost (localhost [127.0.0.1]) by mail.postgrespro.ru (Postfix) with ESMTP id B9E0821C591E for ; Tue, 7 Apr 2020 00:58:21 +0300 (MSK) X-Virus-Scanned: Debian amavisd-new at postgrespro.ru X-Spam-Flag: NO X-Spam-Score: 0 X-Spam-Level: X-Spam-Status: No, score=x tagged_above=-99 required=4 WHITELISTED tests=[] autolearn=unavailable Received: from mail.postgrespro.ru (cyclops.l.postgrespro.ru [192.168.27.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) by mail.postgrespro.ru (Postfix) with ESMTPSA id 8239F21C5856 for ; Tue, 7 Apr 2020 00:58:20 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1586210300; bh=xnmaBbdwQwyrExW7E7cT/tfhUACLilk/6Iflp8bL5Uc=; h=Date:From:To:Subject:In-Reply-To:References; b=HAkIr/WNZeWRgjhv5EIPSI/SPeKt6aCPOoKiYwf90NsEoA8xjMrpPu54HiCVEbJnv 64LsUPCjfgmImYrHuvWBHS44vSCyyX7iAkja5Bzgm96WSYRjT8Jmpu2L/NGdh0b02X 8FMrNJk/iFcf/5e3zO+O9AgnLWFeRa2ihbX/aDvM= MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_ad5015c09796dcef50d3c319cd95b140" Content-Transfer-Encoding: 8bit Date: Tue, 07 Apr 2020 00:58:18 +0300 From: Kartyshov Ivan To: pgsql-hackers@lists.postgresql.org Subject: Re: [HACKERS] make async slave to wait for lsn to be replayed In-Reply-To: References: <80f267591b373db5588d580fdfb432f0@postgrespro.ru> <20200306.145445.1788163547829857988.horikyota.ntt@gmail.com> <3cc883048264c2e9af022033925ff8db@postgrespro.ru> <674ad239b725a11d89c21574e44e376b@postgrespro.ru> <69a363498b76cd079ae19c4ee93bced0@postgrespro.ru> <06bfb1e542a25c3ebfc4232be4d49555@postgrespro.ru> User-Agent: Roundcube Webmail/1.4.0 Message-ID: <9d112e474c311b6b4c20566314283638@postgrespro.ru> X-Sender: i.kartyshov@postgrespro.ru List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --=_ad5015c09796dcef50d3c319cd95b140 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8; format=flowed On 2020-04-04 03:14, Alexander Korotkov wrote: > I think that now we would be fine with single LSN and single TIMEOUT. > In future we may add multiple LSNs/TIMEOUTs or/and support for > expressions as LSNs/TIMEOUTs if we figure out it's necessary. > > I also think it's good to couple waiting for lsn with beginning of > transaction is good idea. Separate WAIT FOR LSN statement called in > the middle of transaction looks problematic for me. Imagine we have RR > isolation and already acquired the snapshot. Then out snapshot can > block applying wal records, which we are waiting for. That would be > implicit deadlock. It would be nice to evade such deadlocks by > design. Ok, here is a new version of patch with single LSN and TIMEOUT. Synopsis ========== BEGIN [ WORK | TRANSACTION ] [ transaction_mode [, ...] ] [WAIT FOR LSN 'lsn' [ TIMEOUT 'value']] and START TRANSACTION [ transaction_mode [, ...] ] [WAIT FOR LSN 'lsn' [ TIMEOUT 'value']] where lsn is result of pg_current_wal_flush_lsn on master. and value is uint time interval in milliseconds. Description ========== BEGIN/START...WAIT FOR - pause the start of transaction until a specified LSN has been replayed. (Don’t open transaction if lsn is not reached on timeout). How to use it ========== WAIT FOR LSN ‘LSN’ [, timeout in ms]; # Before starting transaction, wait until LSN 0/84832E8 is replayed. Wait time is not limited here because a timeout was not specified BEGIN WAIT FOR LSN '0/84832E8'; # Before starting transaction, wait until LSN 0/84832E8 is replayed. Limit the wait time with 10 seconds, and if LSN is not reached by then, don't start the transaction. START TRANSACTION WAIT FOR LSN '0/8DFFB88' TIMEOUT 10000; # Same as previous, but with transaction isolation level = REPEATABLE READ BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ WAIT FOR LSN '0/815C0F1' TIMEOUT 10000; Notice: WAIT FOR will release on PostmasterDeath or Interruption events if they come earlier than LSN or timeout. Testing the implementation ====================== The implementation was tested with src/test/recovery/t/020_begin_wait.pl -- Ivan Kartyshov Postgres Professional: http://www.postgrespro.com The Russian Postgres Company --=_ad5015c09796dcef50d3c319cd95b140 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=begin_waitfor_v6.patch Content-Disposition: attachment; filename=begin_waitfor_v6.patch; size=29070 ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvYmVnaW4uc2dtbCBiL2RvYy9zcmMvc2dtbC9y ZWYvYmVnaW4uc2dtbAppbmRleCBjMjNiYmZiNGU3MS4uN2E3MTc2OWNkOGYgMTAwNjQ0Ci0tLSBh L2RvYy9zcmMvc2dtbC9yZWYvYmVnaW4uc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL2JlZ2lu LnNnbWwKQEAgLTIxLDcgKzIxLDcgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAKICA8cmVm c3lub3BzaXNkaXY+CiA8c3lub3BzaXM+Ci1CRUdJTiBbIFdPUksgfCBUUkFOU0FDVElPTiBdIFsg PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRyYW5zYWN0aW9uX21vZGU8L3JlcGxhY2Vh YmxlPiBbLCAuLi5dIF0KK0JFR0lOIFsgV09SSyB8IFRSQU5TQUNUSU9OIF0gWyA8cmVwbGFjZWFi bGUgY2xhc3M9InBhcmFtZXRlciI+dHJhbnNhY3Rpb25fbW9kZTwvcmVwbGFjZWFibGU+IFssIC4u Ll0gXSBbIFdBSVQgRk9SIExTTiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bHNuX3Zh bHVlPC9yZXBsYWNlYWJsZT4gW1RJTUVPVVQgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIi Pm51bWJlcl9vZl9taWxsaXNlY29uZHM8L3JlcGxhY2VhYmxlPiBdIF0KIAogPHBocmFzZT53aGVy ZSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+dHJhbnNhY3Rpb25fbW9kZTwvcmVwbGFj ZWFibGU+IGlzIG9uZSBvZjo8L3BocmFzZT4KIApAQCAtNjMsNiArNjMsMTYgQEAgQkVHSU4gWyBX T1JLIHwgVFJBTlNBQ1RJT04gXSBbIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj50cmFu c2FjdGlvbl9tb2RlPC8KICAgIDx4cmVmIGxpbmtlbmQ9InNxbC1zZXQtdHJhbnNhY3Rpb24iLz4K ICAgIHdhcyBleGVjdXRlZC4KICAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhlIDxsaXRlcmFs PldBSVQgRk9SPC9saXRlcmFsPiBjbGF1c2UgYWxsb3dzIHRvIHdhaXQgZm9yIHRoZSB0YXJnZXQg bG9nCisgICBzZXF1ZW5jZSBudW1iZXIgKDxhY3JvbnltPkxTTjwvYWNyb255bT4pIHRvIGJlIHJl cGxheWVkIG9uIHN0YW5kYnkgYmVmb3JlCisgICBzdGFydGluZyB0aGUgdHJhbnNhY3Rpb24gaW4g PHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZXMKKyAgIHdpdGgg bWFzdGVyLXN0YW5kYnkgYXN5bmNocm9ub3VzIHJlcGxpY2F0aW9uLiBXYWl0IHRpbWUgY2FuIGJl IGxpbWl0ZWQgYnkKKyAgIHNwZWNpZnlpbmcgYSB0aW1lb3V0LCB3aGljaCBpcyBtZWFzdXJlZCBp biBtaWxsaXNlY29uZHMgYW5kIG11c3QgYmUgYW4KKyAgIGludGVnZXIuIFdhaXRpbmcgY2FuIGJl IGludGVycnVwdGVkIHVzaW5nIDxsaXRlcmFsPkN0cmwrQzwvbGl0ZXJhbD4sIG9yIGJ5CisgICBz aHV0dGluZyBkb3duIHRoZSA8bGl0ZXJhbD5wb3N0Z3JlczwvbGl0ZXJhbD4gc2VydmVyLgorICA8 L3BhcmE+CiAgPC9yZWZzZWN0MT4KIAogIDxyZWZzZWN0MT4KQEAgLTE0Niw2ICsxNTYsMTAgQEAg QkVHSU47CiAgICBkaWZmZXJlbnQgcHVycG9zZSBpbiBlbWJlZGRlZCBTUUwuIFlvdSBhcmUgYWR2 aXNlZCB0byBiZSBjYXJlZnVsCiAgICBhYm91dCB0aGUgdHJhbnNhY3Rpb24gc2VtYW50aWNzIHdo ZW4gcG9ydGluZyBkYXRhYmFzZSBhcHBsaWNhdGlvbnMuCiAgIDwvcGFyYT4KKworICA8cGFyYT4K KyAgIFRoZXJlIGlzIG5vIDxjb21tYW5kPldBSVQgRk9SPC9jb21tYW5kPiBjbGF1c2UgaW4gdGhl IFNRTCBzdGFuZGFyZC4KKyAgPC9wYXJhPgogIDwvcmVmc2VjdDE+CiAKICA8cmVmc2VjdDE+CmRp ZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL3N0YXJ0X3RyYW5zYWN0aW9uLnNnbWwgYi9kb2Mv c3JjL3NnbWwvcmVmL3N0YXJ0X3RyYW5zYWN0aW9uLnNnbWwKaW5kZXggZDZjZDFkNDE3NzkuLmY1 NDEyYzJjYTdiIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3N0YXJ0X3RyYW5zYWN0aW9u LnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9zdGFydF90cmFuc2FjdGlvbi5zZ21sCkBAIC0y MSw3ICsyMSw3IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogCiAgPHJlZnN5bm9wc2lzZGl2 PgogPHN5bm9wc2lzPgotU1RBUlQgVFJBTlNBQ1RJT04gWyA8cmVwbGFjZWFibGUgY2xhc3M9InBh cmFtZXRlciI+dHJhbnNhY3Rpb25fbW9kZTwvcmVwbGFjZWFibGU+IFssIC4uLl0gXQorU1RBUlQg VFJBTlNBQ1RJT04gWyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+dHJhbnNhY3Rpb25f bW9kZTwvcmVwbGFjZWFibGU+IFssIC4uLl0gXSBbIFdBSVQgRk9SIExTTiA8cmVwbGFjZWFibGUg Y2xhc3M9InBhcmFtZXRlciI+bHNuX3ZhbHVlPC9yZXBsYWNlYWJsZT4gW1RJTUVPVVQgPHJlcGxh Y2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm51bWJlcl9vZl9taWxsaXNlY29uZHM8L3JlcGxhY2Vh YmxlPiBdIF0KIAogPHBocmFzZT53aGVyZSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ dHJhbnNhY3Rpb25fbW9kZTwvcmVwbGFjZWFibGU+IGlzIG9uZSBvZjo8L3BocmFzZT4KIApAQCAt NDAsNiArNDAsMTYgQEAgU1RBUlQgVFJBTlNBQ1RJT04gWyA8cmVwbGFjZWFibGUgY2xhc3M9InBh cmFtZXRlciI+dHJhbnNhY3Rpb25fbW9kZTwvcmVwbGFjZWFibGUKICAgIGNoYXJhY3RlcmlzdGlj cywgYXMgaWYgPHhyZWYgbGlua2VuZD0ic3FsLXNldC10cmFuc2FjdGlvbiIvPiB3YXMgZXhlY3V0 ZWQuIFRoaXMgaXMgdGhlIHNhbWUKICAgIGFzIHRoZSA8eHJlZiBsaW5rZW5kPSJzcWwtYmVnaW4i Lz4gY29tbWFuZC4KICAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhlIDxsaXRlcmFsPldBSVQg Rk9SPC9saXRlcmFsPiBjbGF1c2UgYWxsb3dzIHRvIHdhaXQgZm9yIHRoZSB0YXJnZXQgbG9nCisg ICBzZXF1ZW5jZSBudW1iZXIgKDxhY3JvbnltPkxTTjwvYWNyb255bT4pIHRvIGJlIHJlcGxheWVk IG9uIHN0YW5kYnkgYmVmb3JlCisgICBzdGFydGluZyB0aGUgdHJhbnNhY3Rpb24gaW4gPHByb2R1 Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZXMKKyAgIHdpdGggbWFzdGVy LXN0YW5kYnkgYXN5bmNocm9ub3VzIHJlcGxpY2F0aW9uLiBXYWl0IHRpbWUgY2FuIGJlIGxpbWl0 ZWQgYnkKKyAgIHNwZWNpZnlpbmcgYSB0aW1lb3V0LCB3aGljaCBpcyBtZWFzdXJlZCBpbiBtaWxs aXNlY29uZHMgYW5kIG11c3QgYmUgYW4KKyAgIGludGVnZXIuIFdhaXRpbmcgY2FuIGJlIGludGVy cnVwdGVkIHVzaW5nIDxsaXRlcmFsPkN0cmwrQzwvbGl0ZXJhbD4sIG9yIGJ5CisgICBzaHV0dGlu ZyBkb3duIHRoZSA8bGl0ZXJhbD5wb3N0Z3JlczwvbGl0ZXJhbD4gc2VydmVyLgorICA8L3BhcmE+ CiAgPC9yZWZzZWN0MT4KIAogIDxyZWZzZWN0MT4KQEAgLTc4LDYgKzg4LDEwIEBAIFNUQVJUIFRS QU5TQUNUSU9OIFsgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRyYW5zYWN0aW9uX21v ZGU8L3JlcGxhY2VhYmxlCiAgICBvbWl0dGVkLgogICA8L3BhcmE+CiAKKyAgPHBhcmE+CisgICBU aGVyZSBpcyBubyA8Y29tbWFuZD5XQUlUIEZPUjwvY29tbWFuZD4gY2xhdXNlIGluIHRoZSBTUUwg c3RhbmRhcmQuCisgIDwvcGFyYT4KKwogICA8cGFyYT4KICAgIFNlZSBhbHNvIHRoZSBjb21wYXRp YmlsaXR5IHNlY3Rpb24gb2YgPHhyZWYgbGlua2VuZD0ic3FsLXNldC10cmFuc2FjdGlvbiIvPi4K ICAgPC9wYXJhPgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCmluZGV4IGFiZjk1NGJhMzkyLi5k Mjg1NmM4ODk0MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5j CisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwpAQCAtNDIsNiArNDIsNyBA QAogI2luY2x1ZGUgImNhdGFsb2cvcGdfZGF0YWJhc2UuaCIKICNpbmNsdWRlICJjb21tYW5kcy9w cm9ncmVzcy5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3RhYmxlc3BhY2UuaCIKKyNpbmNsdWRlICJj b21tYW5kcy93YWl0LmgiCiAjaW5jbHVkZSAiY29tbW9uL2NvbnRyb2xkYXRhX3V0aWxzLmgiCiAj aW5jbHVkZSAiZXhlY3V0b3IvaW5zdHJ1bWVudC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgpA QCAtNzMzMiw2ICs3MzMzLDE1IEBAIFN0YXJ0dXBYTE9HKHZvaWQpCiAJCQkJCWJyZWFrOwogCQkJ CX0KIAorCQkJCS8qCisJCQkJICogSWYgd2UgcmVwbGF5ZWQgYW4gTFNOIHRoYXQgc29tZW9uZSB3 YXMgd2FpdGluZyBmb3IsCisJCQkJICogc2V0IGxhdGNoZXMgaW4gc2hhcmVkIG1lbW9yeSBhcnJh eSB0byBub3RpZnkgdGhlIHdhaXRlci4KKwkJCQkgKi8KKwkJCQlpZiAoWExvZ0N0bC0+bGFzdFJl cGxheWVkRW5kUmVjUHRyID49IEdldE1pbldhaXQoKSkKKwkJCQl7CisJCQkJCVdhaXRTZXRMYXRj aChYTG9nQ3RsLT5sYXN0UmVwbGF5ZWRFbmRSZWNQdHIpOworCQkJCX0KKwogCQkJCS8qIEVsc2Us IHRyeSB0byBmZXRjaCB0aGUgbmV4dCBXQUwgcmVjb3JkICovCiAJCQkJcmVjb3JkID0gUmVhZFJl Y29yZCh4bG9ncmVhZGVyLCBMT0csIGZhbHNlKTsKIAkJCX0gd2hpbGUgKHJlY29yZCAhPSBOVUxM KTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvTWFrZWZpbGUKaW5kZXggZDQ4MTVkM2NlNjUuLjliMzEwOTI2YzEyIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9j b21tYW5kcy9NYWtlZmlsZQpAQCAtNTcsNiArNTcsNyBAQCBPQkpTID0gXAogCXVzZXIubyBcCiAJ dmFjdXVtLm8gXAogCXZhcmlhYmxlLm8gXAotCXZpZXcubworCXZpZXcubyBcCisJd2FpdC5vCiAK IGluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9zcmMvYmFja2VuZC9jb21tb24ubWsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL3dhaXQuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3dhaXQu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNjYyNDVkNDM4ODIKLS0t IC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy93YWl0LmMKQEAgLTAsMCArMSwy NzkgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHdhaXQuYworICoJICBJbXBsZW1lbnRz IFdBSVQgRk9SLCB3aGljaCBhbGxvd3Mgd2FpdGluZyBmb3IgZXZlbnRzIHN1Y2ggYXMKKyAqCSAg dGltZSBwYXNzaW5nIG9yIExTTiBoYXZpbmcgYmVlbiByZXBsYXllZCBvbiByZXBsaWNhLgorICoK KyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIwLCBQb3N0Z3JlU1FMIEdsb2JhbCBE ZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDIwLCBSZWdlbnRz IG9mIFBvc3RncmVzUHJvCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQv Y29tbWFuZHMvd2FpdC5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUg PGZsb2F0Lmg+CisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgInBvc3RncmVzLmgiCisjaW5j bHVkZSAicGdzdGF0LmgiCisjaW5jbHVkZSAiZm1nci5oIgorI2luY2x1ZGUgImFjY2Vzcy90cmFu c2FtLmgiCisjaW5jbHVkZSAiYWNjZXNzL3hhY3QuaCIKKyNpbmNsdWRlICJhY2Nlc3MveGxvZ2Rl ZnMuaCIKKyNpbmNsdWRlICJhY2Nlc3MveGxvZy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlw ZS5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3dhaXQuaCIKKyNpbmNsdWRlICJmdW5jYXBpLmgiCisj aW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAic3RvcmFnZS9iYWNrZW5kaWQuaCIKKyNp bmNsdWRlICJzdG9yYWdlL2lwYy5oIgorI2luY2x1ZGUgInN0b3JhZ2UvbGF0Y2guaCIKKyNpbmNs dWRlICJzdG9yYWdlL3Btc2lnbmFsLmgiCisjaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCisjaW5j bHVkZSAic3RvcmFnZS9zaG1lbS5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc3Bpbi5oIgorI2luY2x1 ZGUgInN0b3JhZ2Uvc2ludmFsYWR0LmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNp bmNsdWRlICJ1dGlscy9wZ19sc24uaCIKKyNpbmNsdWRlICJ1dGlscy90aW1lc3RhbXAuaCIKKyNp bmNsdWRlICJleGVjdXRvci9zcGkuaCIKKyNpbmNsdWRlICJ1dGlscy9mbWdycHJvdG9zLmgiCisK Ky8qIEFkZCB0byAvIGRlbGV0ZSBmcm9tIHNoYXJlZCBtZW1vcnkgYXJyYXkgKi8KK3N0YXRpYyB2 b2lkIEFkZEV2ZW50KFhMb2dSZWNQdHIgbHNuX3RvX3dhaXQpOworc3RhdGljIHZvaWQgRGVsZXRl RXZlbnQodm9pZCk7CisKKy8qIFNoYXJlZCBtZW1vcnkgc3RydWN0dXJlICovCit0eXBlZGVmIHN0 cnVjdAoreworCWludAkJCWJhY2tlbmRfbWF4aWQ7CisJWExvZ1JlY1B0cgltaW5fbHNuOworCXNs b2NrX3QJCW11dGV4OworCVhMb2dSZWNQdHIJd2FpdGVkX2xzbltGTEVYSUJMRV9BUlJBWV9NRU1C RVJdOworfSBXYWl0U3RhdGU7CisKK3N0YXRpYyB2b2xhdGlsZSBXYWl0U3RhdGUgKnN0YXRlOwor CisvKiBBZGQgdGhlIGV2ZW50IG9mIHRoZSBjdXJyZW50IGJhY2tlbmQgdG8gdGhlIHNoYXJlZCBt ZW1vcnkgYXJyYXkgKi8KK3N0YXRpYyB2b2lkCitBZGRFdmVudChYTG9nUmVjUHRyIGxzbl90b193 YWl0KQoreworCVNwaW5Mb2NrQWNxdWlyZSgmc3RhdGUtPm11dGV4KTsKKwlpZiAoc3RhdGUtPmJh Y2tlbmRfbWF4aWQgPCBNeUJhY2tlbmRJZCkKKwkJc3RhdGUtPmJhY2tlbmRfbWF4aWQgPSBNeUJh Y2tlbmRJZDsKKworCXN0YXRlLT53YWl0ZWRfbHNuW015QmFja2VuZElkXSA9IGxzbl90b193YWl0 OworCisJaWYgKGxzbl90b193YWl0IDwgc3RhdGUtPm1pbl9sc24pCisJCXN0YXRlLT5taW5fbHNu ID0gbHNuX3RvX3dhaXQ7CisJU3BpbkxvY2tSZWxlYXNlKCZzdGF0ZS0+bXV0ZXgpOworfQorCisv KgorICogRGVsZXRlIGV2ZW50IG9mIHRoZSBjdXJyZW50IGJhY2tlbmQgZnJvbSB0aGUgc2hhcmVk IG1lbW9yeSBhcnJheS4KKyAqCisgKiBUT0RPOiBDb25zaWRlciBzdGF0ZSBjbGVhbnVwIG9uIGJh Y2tlbmQgZmFpbHVyZS4KKyAqIENoZWNrOgorICogMSkgbm9tYWx8c21hcnR8ZmFzdHxpbW1lZGlh dGUgc3RvcAorICogMikgU0lHS0lMTCBhbmQgU0lHVEVSTQorICovCitzdGF0aWMgdm9pZAorRGVs ZXRlRXZlbnQodm9pZCkKK3sKKwlpbnQJCQlpOworCVhMb2dSZWNQdHIJbHNuX3RvX2RlbGV0ZSA9 IHN0YXRlLT53YWl0ZWRfbHNuW015QmFja2VuZElkXTsKKworCXN0YXRlLT53YWl0ZWRfbHNuW015 QmFja2VuZElkXSA9IEludmFsaWRYTG9nUmVjUHRyOworCisJU3BpbkxvY2tBY3F1aXJlKCZzdGF0 ZS0+bXV0ZXgpOworCisJLyogSWYgd2UgbmVlZCB0byBjaG9vc2UgdGhlIG5leHQgbWluX2xzbiwg dXBkYXRlIHN0YXRlLT5taW5fbHNuICovCisJaWYgKHN0YXRlLT5taW5fbHNuID09IGxzbl90b19k ZWxldGUpCisJeworCQlzdGF0ZS0+bWluX2xzbiA9IFBHX1VJTlQ2NF9NQVg7CisJCWZvciAoaSA9 IDI7IGkgPD0gc3RhdGUtPmJhY2tlbmRfbWF4aWQ7IGkrKykKKwkJCWlmIChzdGF0ZS0+d2FpdGVk X2xzbltpXSAhPSBJbnZhbGlkWExvZ1JlY1B0ciAmJgorCQkJCXN0YXRlLT53YWl0ZWRfbHNuW2ld IDwgc3RhdGUtPm1pbl9sc24pCisJCQkJc3RhdGUtPm1pbl9sc24gPSBzdGF0ZS0+d2FpdGVkX2xz bltpXTsKKwl9CisKKwlpZiAoc3RhdGUtPmJhY2tlbmRfbWF4aWQgPT0gTXlCYWNrZW5kSWQpCisJ CWZvciAoaSA9IChNeUJhY2tlbmRJZCk7IGkgPj0gMjsgaS0tKQorCQkJaWYgKHN0YXRlLT53YWl0 ZWRfbHNuW2ldICE9IEludmFsaWRYTG9nUmVjUHRyKQorCQkJeworCQkJCXN0YXRlLT5iYWNrZW5k X21heGlkID0gaTsKKwkJCQlicmVhazsKKwkJCX0KKworCVNwaW5Mb2NrUmVsZWFzZSgmc3RhdGUt Pm11dGV4KTsKK30KKworLyoKKyAqIFJlcG9ydCBhbW91bnQgb2Ygc2hhcmVkIG1lbW9yeSBzcGFj ZSBuZWVkZWQgZm9yIFdhaXRTdGF0ZQorICovCitTaXplCitXYWl0U2htZW1TaXplKHZvaWQpCit7 CisJU2l6ZQkJc2l6ZTsKKworCXNpemUgPSBvZmZzZXRvZihXYWl0U3RhdGUsIHdhaXRlZF9sc24p OworCXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShNYXhCYWNrZW5kcyArIDEsIHNpemVv ZihYTG9nUmVjUHRyKSkpOworCXJldHVybiBzaXplOworfQorCisvKiBJbml0IGFycmF5IG9mIGV2 ZW50cyBpbiBzaGFyZWQgbWVtb3J5ICovCit2b2lkCitXYWl0U2htZW1Jbml0KHZvaWQpCit7CisJ Ym9vbAkJZm91bmQ7CisJdWludDMyCQlpOworCisJc3RhdGUgPSAoV2FpdFN0YXRlICopIFNobWVt SW5pdFN0cnVjdCgicGdfd2FpdF9sc24iLAorCQkJCQkJCQkJCSAgV2FpdFNobWVtU2l6ZSgpLAor CQkJCQkJCQkJCSAgJmZvdW5kKTsKKwlpZiAoIWZvdW5kKQorCXsKKwkJU3BpbkxvY2tJbml0KCZz dGF0ZS0+bXV0ZXgpOworCisJCWZvciAoaSA9IDA7IGkgPCAoTWF4QmFja2VuZHMgKyAxKTsgaSsr KQorCQkJc3RhdGUtPndhaXRlZF9sc25baV0gPSBJbnZhbGlkWExvZ1JlY1B0cjsKKworCQlzdGF0 ZS0+YmFja2VuZF9tYXhpZCA9IDA7CisJCXN0YXRlLT5taW5fbHNuID0gUEdfVUlOVDY0X01BWDsK Kwl9Cit9CisKKy8qIFNldCBhbGwgbGF0Y2hlcyBpbiBzaGFyZWQgbWVtb3J5IHRvIHNpZ25hbCB0 aGF0IG5ldyBMU04gaGFzIGJlZW4gcmVwbGF5ZWQgKi8KK3ZvaWQKK1dhaXRTZXRMYXRjaChYTG9n UmVjUHRyIGN1cl9sc24pCit7CisJdWludDMyCQlpOworCWludCAJCWJhY2tlbmRfbWF4aWQ7CisJ UEdQUk9DCSAgICpiYWNrZW5kOworCisJU3BpbkxvY2tBY3F1aXJlKCZzdGF0ZS0+bXV0ZXgpOwor CWJhY2tlbmRfbWF4aWQgPSBzdGF0ZS0+YmFja2VuZF9tYXhpZDsKKwlTcGluTG9ja1JlbGVhc2Uo JnN0YXRlLT5tdXRleCk7CisKKwlmb3IgKGkgPSAyOyBpIDw9IGJhY2tlbmRfbWF4aWQ7IGkrKykK Kwl7CisJCWJhY2tlbmQgPSBCYWNrZW5kSWRHZXRQcm9jKGkpOworCQlpZiAoc3RhdGUtPndhaXRl ZF9sc25baV0gIT0gMCkKKwkJeworCQkJaWYgKGJhY2tlbmQgJiYgc3RhdGUtPndhaXRlZF9sc25b aV0gPD0gY3VyX2xzbikKKwkJCQlTZXRMYXRjaCgmYmFja2VuZC0+cHJvY0xhdGNoKTsKKwkJfQor CX0KK30KKworLyogR2V0IG1pbmltYWwgTFNOIHRoYXQgd2lsbCBiZSBuZXh0ICovCitYTG9nUmVj UHRyCitHZXRNaW5XYWl0KHZvaWQpCit7CisJcmV0dXJuIHN0YXRlLT5taW5fbHNuOworfQorCisv KgorICogT24gV0FJVCB1c2UgTXlMYXRjaCB0byB3YWl0IHRpbGwgTFNOIGlzIHJlcGxheWVkLAor ICogcG9zdG1hc3RlciBkaWVzIG9yIHRpbWVvdXQgaGFwcGVucy4KKyAqLworaW50CitXYWl0VXRp bGl0eShYTG9nUmVjUHRyIGxzbiwgY29uc3QgZmxvYXQ4IHNlY3MpCit7CisJWExvZ1JlY1B0cglj dXJfbHNuID0gR2V0WExvZ1JlcGxheVJlY1B0cihOVUxMKTsKKwlpbnQJCQlsYXRjaF9ldmVudHM7 CisJZmxvYXQ4CQllbmR0aW1lOworCXVpbnQJCXJlcyA9IDA7CisKKyNkZWZpbmUgR2V0Tm93Rmxv YXQoKQkoKGZsb2F0OCkgR2V0Q3VycmVudFRpbWVzdGFtcCgpIC8gMTAwMDAwMC4wKQorCWVuZHRp bWUgPSBHZXROb3dGbG9hdCgpICsgc2VjczsKKworbGF0Y2hfZXZlbnRzID0gV0xfTEFUQ0hfU0VU IHwgV0xfVElNRU9VVCB8IFdMX0VYSVRfT05fUE1fREVBVEg7CisKKwkvKiBKdXN0IGNoZWNrIGlm IHdlIHJlYWNoZWQgKi8KKwlpZiAobHNuIDw9IGN1cl9sc24pCisJCXJldHVybiAobHNuIDw9IGN1 cl9sc24pOworCisJQWRkRXZlbnQobHNuKTsKKworCWZvciAoOzspCisJeworCQlpbnQJCQlyYzsK KwkJZmxvYXQ4CQlkZWxheSA9IDA7CisJCWxvbmcJCWRlbGF5X21zOworCisJCWlmIChzZWNzID4g MCkKKwkJCWRlbGF5ID0gZW5kdGltZSAtIEdldE5vd0Zsb2F0KCk7CisJCWVsc2UgaWYgKHNlY3Mg PT0gMCkKKwkJCS8qCisJCQkqIElmIHdlIHdhaXQgZm9yZXZlciwgdGhlbiAxIG1pbnV0ZSB0aW1l b3V0IHRvIGNoZWNrCisJCQkqIGZvciBJbnRlcnVwdHMuCisJCQkqLworCQkJZGVsYXkgPSA2MDsK KworCQlpZiAoZGVsYXkgPiAwLjApCisJCQlkZWxheV9tcyA9IChsb25nKSBjZWlsKGRlbGF5ICog MTAwMC4wKTsKKwkJZWxzZQorCQkJYnJlYWs7CisKKwkJLyoKKwkJICogSWYgcmVjZWl2ZWQgYW4g aW50ZXJydXB0aW9uIGZyb20gQ0hFQ0tfRk9SX0lOVEVSUlVQVFMsCisJCSAqIHRoZW4gZGVsZXRl IHRoZSBjdXJyZW50IGV2ZW50IGZyb20gYXJyYXkuCisJCSAqLworCQlpZiAoSW50ZXJydXB0UGVu ZGluZykKKwkJeworCQkJRGVsZXRlRXZlbnQoKTsKKwkJCVByb2Nlc3NJbnRlcnJ1cHRzKCk7CisJ CX0KKworCQkvKiBJZiBwb3N0bWFzdGVyIGRpZXMsIGZpbmlzaCBpbW1lZGlhdGVseSAqLworCQlp ZiAoIVBvc3RtYXN0ZXJJc0FsaXZlKCkpCisJCQlicmVhazsKKworCQlyYyA9IFdhaXRMYXRjaChN eUxhdGNoLCBsYXRjaF9ldmVudHMsIGRlbGF5X21zLAorCQkJCQkgICBXQUlUX0VWRU5UX0NMSUVO VF9SRUFEKTsKKworCQlSZXNldExhdGNoKE15TGF0Y2gpOworCisJCWlmIChyYyAmIFdMX0xBVENI X1NFVCkKKwkJCWN1cl9sc24gPSBHZXRYTG9nUmVwbGF5UmVjUHRyKE5VTEwpOworCisJCS8qIElm IExTTiBoYXMgYmVlbiByZXBsYXllZCAqLworCQlpZiAobHNuIDw9IGN1cl9sc24pCisJCQlicmVh azsKKwl9CisKKwlEZWxldGVFdmVudCgpOworCisJaWYgKGxzbiA+IGN1cl9sc24pCisJCWVsb2co Tk9USUNFLCJMU04gaXMgbm90IHJlYWNoZWQuIFRyeSB0byBpbmNyZWFzZSB3YWl0IHRpbWUuIik7 CisJZWxzZQorCQlyZXMgPSAxOworCisJcmV0dXJuIHJlczsKK30KKworLyogSW1wbGVtZW50YXRp b24gb2YgV0FJVCBGT1IgKi8KK2ludAorV2FpdE1haW4oV2FpdFN0bXQgKnN0bXQsIERlc3RSZWNl aXZlciAqZGVzdCkKK3sKKwlUdXBsZURlc2MJdHVwZGVzYzsKKwlUdXBPdXRwdXRTdGF0ZSAqdHN0 YXRlOworCWludAkJCXJlcyA9IDA7CisKKwlyZXMgPSBXYWl0VXRpbGl0eShEYXR1bUdldExTTigK KwkJCQkgIERpcmVjdEZ1bmN0aW9uQ2FsbDEocGdfbHNuX2luLENTdHJpbmdHZXREYXR1bShzdG10 LT5sc24pKSksCisJCQkJICAoZmxvYXQ4KXN0bXQtPmRlbGF5LzEwMDApOworCisJLyogTmVlZCBh IHR1cGxlIGRlc2NyaXB0b3IgcmVwcmVzZW50aW5nIGEgc2luZ2xlIFRFWFQgY29sdW1uICovCisJ dHVwZGVzYyA9IENyZWF0ZVRlbXBsYXRlVHVwbGVEZXNjKDEpOworCVR1cGxlRGVzY0luaXRFbnRy eSh0dXBkZXNjLCAoQXR0ck51bWJlcikgMSwgIkxTTiByZWFjaGVkIiwgVEVYVE9JRCwgLTEsIDAp OworCS8qIFByZXBhcmUgZm9yIHByb2plY3Rpb24gb2YgdHVwbGVzICovCisJdHN0YXRlID0gYmVn aW5fdHVwX291dHB1dF90dXBkZXNjKGRlc3QsIHR1cGRlc2MsICZUVFNPcHNNaW5pbWFsVHVwbGUp OworCisJLyogU2VuZCBpdCAqLworCWRvX3RleHRfb3V0cHV0X29uZWxpbmUodHN0YXRlLCByZXM/ InQiOiJmIik7CisJZW5kX3R1cF9vdXRwdXQodHN0YXRlKTsKKwlyZXR1cm4gcmVzOworfQpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVz L291dGZ1bmNzLmMKaW5kZXggZjRhZWNkY2JjZGEuLmIzMTYwZWIyMDRhIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL291dGZ1 bmNzLmMKQEAgLTI3NjIsNiArMjc2MiwyOCBAQCBfb3V0RGVmRWxlbShTdHJpbmdJbmZvIHN0ciwg Y29uc3QgRGVmRWxlbSAqbm9kZSkKIAlXUklURV9MT0NBVElPTl9GSUVMRChsb2NhdGlvbik7CiB9 CiAKK3N0YXRpYyB2b2lkCitfb3V0V2FpdFN0bXQoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IFdhaXRT dG10ICpub2RlKQoreworCVdSSVRFX05PREVfVFlQRSgiV0FJVFNUTVQiKTsKKworCVdSSVRFX1NU UklOR19GSUVMRChsc24pOworCVdSSVRFX1VJTlRfRklFTEQoZGVsYXkpOworfQorCitzdGF0aWMg dm9pZAorX291dFRyYW5zYWN0aW9uU3RtdChTdHJpbmdJbmZvIHN0ciwgY29uc3QgVHJhbnNhY3Rp b25TdG10ICpub2RlKQoreworCVdSSVRFX05PREVfVFlQRSgiVFJBTlNBQ1RJT05TVE1UIik7CisK KwlXUklURV9TVFJJTkdfRklFTEQoc2F2ZXBvaW50X25hbWUpOworCVdSSVRFX1NUUklOR19GSUVM RChnaWQpOworCVdSSVRFX05PREVfRklFTEQob3B0aW9ucyk7CisJV1JJVEVfQk9PTF9GSUVMRChj aGFpbik7CisJV1JJVEVfRU5VTV9GSUVMRChraW5kLCBUcmFuc2FjdGlvblN0bXRLaW5kKTsKKwlX UklURV9OT0RFX0ZJRUxEKHdhaXQpOworfQorCiBzdGF0aWMgdm9pZAogX291dFRhYmxlTGlrZUNs YXVzZShTdHJpbmdJbmZvIHN0ciwgY29uc3QgVGFibGVMaWtlQ2xhdXNlICpub2RlKQogewpAQCAt NDMwOCw2ICs0MzMwLDEyIEBAIG91dE5vZGUoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IHZvaWQgKm9i aikKIAkJCWNhc2UgVF9QYXJ0aXRpb25SYW5nZURhdHVtOgogCQkJCV9vdXRQYXJ0aXRpb25SYW5n ZURhdHVtKHN0ciwgb2JqKTsKIAkJCQlicmVhazsKKwkJCWNhc2UgVF9XYWl0U3RtdDoKKwkJCQlf b3V0V2FpdFN0bXQoc3RyLCBvYmopOworCQkJCWJyZWFrOworCQkJY2FzZSBUX1RyYW5zYWN0aW9u U3RtdDoKKwkJCQlfb3V0VHJhbnNhY3Rpb25TdG10KHN0ciwgb2JqKTsKKwkJCQlicmVhazsKIAog CQkJZGVmYXVsdDoKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2VyL2FuYWx5emUuYyBi L3NyYy9iYWNrZW5kL3BhcnNlci9hbmFseXplLmMKaW5kZXggNjY3NjQxMjg0MmIuLjhlYmExMWM2 MjIxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvYW5hbHl6ZS5jCisrKyBiL3NyYy9i YWNrZW5kL3BhcnNlci9hbmFseXplLmMKQEAgLTMyNiw3ICszMjYsNiBAQCB0cmFuc2Zvcm1TdG10 KFBhcnNlU3RhdGUgKnBzdGF0ZSwgTm9kZSAqcGFyc2VUcmVlKQogCQkJcmVzdWx0ID0gdHJhbnNm b3JtQ2FsbFN0bXQocHN0YXRlLAogCQkJCQkJCQkJICAgKENhbGxTdG10ICopIHBhcnNlVHJlZSk7 CiAJCQlicmVhazsKLQogCQlkZWZhdWx0OgogCiAJCQkvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvcGFyc2VyL2dyYW0ueSBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKaW5kZXggMzQ0OWMy NmJkMTEuLjE1Njg3OGQ4ZjczIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55 CisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKQEAgLTU5Miw2ICs1OTIsOCBAQCBzdGF0 aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxp YXNlcywgTm9kZSAqcXVlcnkpOwogJXR5cGUgPHBhcnRib3VuZHNwZWM+IFBhcnRpdGlvbkJvdW5k U3BlYwogJXR5cGUgPGxpc3Q+CQloYXNoX3BhcnRib3VuZAogJXR5cGUgPGRlZmVsdD4JCWhhc2hf cGFydGJvdW5kX2VsZW0KKyV0eXBlIDxpdmFsPgkJd2FpdF90aW1lCisldHlwZSA8bm9kZT4JCXdh aXRfZm9yCiAKIC8qCiAgKiBOb24ta2V5d29yZCB0b2tlbiB0eXBlcy4gIFRoZXNlIGFyZSBoYXJk LXdpcmVkIGludG8gdGhlICJmbGV4IiBsZXhlci4KQEAgLTY2MSw3ICs2NjMsNyBAQCBzdGF0aWMg Tm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNl cywgTm9kZSAqcXVlcnkpOwogCiAJTEFCRUwgTEFOR1VBR0UgTEFSR0VfUCBMQVNUX1AgTEFURVJB TF9QCiAJTEVBRElORyBMRUFLUFJPT0YgTEVBU1QgTEVGVCBMRVZFTCBMSUtFIExJTUlUIExJU1RF TiBMT0FEIExPQ0FMCi0JTE9DQUxUSU1FIExPQ0FMVElNRVNUQU1QIExPQ0FUSU9OIExPQ0tfUCBM T0NLRUQgTE9HR0VECisJTE9DQUxUSU1FIExPQ0FMVElNRVNUQU1QIExPQ0FUSU9OIExPQ0tfUCBM T0NLRUQgTE9HR0VEIExTTgogCiAJTUFQUElORyBNQVRDSCBNQVRFUklBTElaRUQgTUFYVkFMVUUg TUVUSE9EIE1JTlVURV9QIE1JTlZBTFVFIE1PREUgTU9OVEhfUCBNT1ZFCiAKQEAgLTY5Miw3ICs2 OTQsNyBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFt ZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogCVNVQlNDUklQVElPTiBTVUJTVFJJTkcg U1VQUE9SVCBTWU1NRVRSSUMgU1lTSUQgU1lTVEVNX1AKIAogCVRBQkxFIFRBQkxFUyBUQUJMRVNB TVBMRSBUQUJMRVNQQUNFIFRFTVAgVEVNUExBVEUgVEVNUE9SQVJZIFRFWFRfUCBUSEVOCi0JVElF UyBUSU1FIFRJTUVTVEFNUCBUTyBUUkFJTElORyBUUkFOU0FDVElPTiBUUkFOU0ZPUk0KKwlUSUVT IFRJTUUgVElNRU9VVCBUSU1FU1RBTVAgVE8gVFJBSUxJTkcgVFJBTlNBQ1RJT04gVFJBTlNGT1JN CiAJVFJFQVQgVFJJR0dFUiBUUklNIFRSVUVfUAogCVRSVU5DQVRFIFRSVVNURUQgVFlQRV9QIFRZ UEVTX1AKIApAQCAtNzAyLDcgKzcwNCw4IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmll d1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7CiAJVkFD VVVNIFZBTElEIFZBTElEQVRFIFZBTElEQVRPUiBWQUxVRV9QIFZBTFVFUyBWQVJDSEFSIFZBUklB RElDIFZBUllJTkcKIAlWRVJCT1NFIFZFUlNJT05fUCBWSUVXIFZJRVdTIFZPTEFUSUxFCiAKLQlX SEVOIFdIRVJFIFdISVRFU1BBQ0VfUCBXSU5ET1cgV0lUSCBXSVRISU4gV0lUSE9VVCBXT1JLIFdS QVBQRVIgV1JJVEUKKwlXQUlUIFdIRU4gV0hFUkUgV0hJVEVTUEFDRV9QIFdJTkRPVworCVdJVEgg V0lUSElOIFdJVEhPVVQgV09SSyBXUkFQUEVSIFdSSVRFCiAKIAlYTUxfUCBYTUxBVFRSSUJVVEVT IFhNTENPTkNBVCBYTUxFTEVNRU5UIFhNTEVYSVNUUyBYTUxGT1JFU1QgWE1MTkFNRVNQQUNFUwog CVhNTFBBUlNFIFhNTFBJIFhNTFJPT1QgWE1MU0VSSUFMSVpFIFhNTFRBQkxFCkBAIC05OTQ2LDE4 ICs5OTQ5LDIwIEBAIFRyYW5zYWN0aW9uU3RtdDoKIAkJCQkJbi0+Y2hhaW4gPSAkMzsKIAkJCQkJ JCQgPSAoTm9kZSAqKW47CiAJCQkJfQotCQkJfCBCRUdJTl9QIG9wdF90cmFuc2FjdGlvbiB0cmFu c2FjdGlvbl9tb2RlX2xpc3Rfb3JfZW1wdHkKKwkJCXwgQkVHSU5fUCBvcHRfdHJhbnNhY3Rpb24g dHJhbnNhY3Rpb25fbW9kZV9saXN0X29yX2VtcHR5IHdhaXRfZm9yCiAJCQkJewogCQkJCQlUcmFu c2FjdGlvblN0bXQgKm4gPSBtYWtlTm9kZShUcmFuc2FjdGlvblN0bXQpOwogCQkJCQluLT5raW5k ID0gVFJBTlNfU1RNVF9CRUdJTjsKIAkJCQkJbi0+b3B0aW9ucyA9ICQzOworCQkJCQluLT53YWl0 ID0gJDQ7CiAJCQkJCSQkID0gKE5vZGUgKiluOwogCQkJCX0KLQkJCXwgU1RBUlQgVFJBTlNBQ1RJ T04gdHJhbnNhY3Rpb25fbW9kZV9saXN0X29yX2VtcHR5CisJCQl8IFNUQVJUIFRSQU5TQUNUSU9O IHRyYW5zYWN0aW9uX21vZGVfbGlzdF9vcl9lbXB0eSB3YWl0X2ZvcgogCQkJCXsKIAkJCQkJVHJh bnNhY3Rpb25TdG10ICpuID0gbWFrZU5vZGUoVHJhbnNhY3Rpb25TdG10KTsKIAkJCQkJbi0+a2lu ZCA9IFRSQU5TX1NUTVRfU1RBUlQ7CiAJCQkJCW4tPm9wdGlvbnMgPSAkMzsKKwkJCQkJbi0+d2Fp dCA9ICQ0OwogCQkJCQkkJCA9IChOb2RlICopbjsKIAkJCQl9CiAJCQl8IENPTU1JVCBvcHRfdHJh bnNhY3Rpb24gb3B0X3RyYW5zYWN0aW9uX2NoYWluCkBAIC0xNDE4Nyw2ICsxNDE5MiwzMSBAQCB4 bWxfcGFzc2luZ19tZWNoOgogCQkJfCBCWSBWQUxVRV9QCiAJCTsKIAorLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqCisgKgorICoJCVNVQlFVRVJZOgorICoJCQkJV0FJVCBGT1IgPGV2ZW50PgorICoJCQkJ ZXZlbnQgaXMgb25lIG9mOgorICoJCQkJCUxTTiB2YWx1ZSBUSU1FT1VUIGRlbGF5CisgKgkJCQkJ VElNRU9VVCBkZWxheQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3dhaXRfZm9yOgorCQkJ V0FJVCBGT1IgTFNOIFNjb25zdCB3YWl0X3RpbWUKKwkJCQl7CisJCQkJCVdhaXRTdG10ICpuID0g bWFrZU5vZGUoV2FpdFN0bXQpOworCQkJCQluLT5sc24gPSAkNDsKKwkJCQkJbi0+ZGVsYXkgPSAk NTsKKwkJCQkJJCQgPSAoTm9kZSAqKW47CisJCQkJfQorCQkJfCAvKiBFTVBUWSAqLwkJeyAkJCA9 IE5VTEw7IH0KKwkJOworCit3YWl0X3RpbWU6CisJCQlUSU1FT1VUIEljb25zdAkJeyAkJCA9ICQy OyB9CisJCQl8IC8qIEVNUFRZICovCQl7ICQkID0gMDsgfQorCQk7CisKIAogLyoKICAqIEFnZ3Jl Z2F0ZSBkZWNvcmF0aW9uIGNsYXVzZXMKQEAgLTE1MzM4LDYgKzE1MzY4LDcgQEAgdW5yZXNlcnZl ZF9rZXl3b3JkOgogCQkJfCBMT0NLX1AKIAkJCXwgTE9DS0VECiAJCQl8IExPR0dFRAorCQkJfCBM U04KIAkJCXwgTUFQUElORwogCQkJfCBNQVRDSAogCQkJfCBNQVRFUklBTElaRUQKQEAgLTE1NDY1 LDYgKzE1NDk2LDcgQEAgdW5yZXNlcnZlZF9rZXl3b3JkOgogCQkJfCBURU1QT1JBUlkKIAkJCXwg VEVYVF9QCiAJCQl8IFRJRVMKKwkJCXwgVElNRU9VVAogCQkJfCBUUkFOU0FDVElPTgogCQkJfCBU UkFOU0ZPUk0KIAkJCXwgVFJJR0dFUgpAQCAtMTU0OTEsNiArMTU1MjMsNyBAQCB1bnJlc2VydmVk X2tleXdvcmQ6CiAJCQl8IFZJRVcKIAkJCXwgVklFV1MKIAkJCXwgVk9MQVRJTEUKKwkJCXwgV0FJ VAogCQkJfCBXSElURVNQQUNFX1AKIAkJCXwgV0lUSElOCiAJCQl8IFdJVEhPVVQKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv aXBjL2lwY2kuYwppbmRleCA0MjdiMGQ1OWNkZS4uYmI4YWYzNDk4MDggMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lw Yy9pcGNpLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJhY2Nlc3Mvc3VidHJhbnMuaCIK ICNpbmNsdWRlICJhY2Nlc3MvdHdvcGhhc2UuaCIKICNpbmNsdWRlICJjb21tYW5kcy9hc3luYy5o IgorI2luY2x1ZGUgImNvbW1hbmRzL3dhaXQuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNp bmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL2F1dG92YWN1dW0uaCIKQEAg LTE0Nyw2ICsxNDgsNyBAQCBDcmVhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVzKHZvaWQpCiAJ CXNpemUgPSBhZGRfc2l6ZShzaXplLCBCVHJlZVNobWVtU2l6ZSgpKTsKIAkJc2l6ZSA9IGFkZF9z aXplKHNpemUsIFN5bmNTY2FuU2htZW1TaXplKCkpOwogCQlzaXplID0gYWRkX3NpemUoc2l6ZSwg QXN5bmNTaG1lbVNpemUoKSk7CisJCXNpemUgPSBhZGRfc2l6ZShzaXplLCBXYWl0U2htZW1TaXpl KCkpOwogI2lmZGVmIEVYRUNfQkFDS0VORAogCQlzaXplID0gYWRkX3NpemUoc2l6ZSwgU2htZW1C YWNrZW5kQXJyYXlTaXplKCkpOwogI2VuZGlmCkBAIC0yNjQsNiArMjY2LDExIEBAIENyZWF0ZVNo YXJlZE1lbW9yeUFuZFNlbWFwaG9yZXModm9pZCkKIAlTeW5jU2NhblNobWVtSW5pdCgpOwogCUFz eW5jU2htZW1Jbml0KCk7CiAKKwkvKgorCSAqIEluaXQgYXJyYXkgb2YgTGF0Y2hlcyBpbiBzaGFy ZWQgbWVtb3J5IGZvciBXQUlUCisJICovCisJV2FpdFNobWVtSW5pdCgpOworCiAjaWZkZWYgRVhF Q19CQUNLRU5ECiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMg Yi9zcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYwppbmRleCBiMWY3ZjZlMmQwMS4uNzM0NTUxM2Rl NTUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCisrKyBiL3NyYy9iYWNr ZW5kL3Rjb3AvdXRpbGl0eS5jCkBAIC0xNSw2ICsxNSw3IEBACiAgKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K ICAqLwogI2luY2x1ZGUgInBvc3RncmVzLmgiCisjaW5jbHVkZSA8ZmxvYXQuaD4KIAogI2luY2x1 ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMuaCIKICNpbmNsdWRlICJhY2Nlc3MvcmVsb3B0aW9ucy5o IgpAQCAtNTcsNiArNTgsNyBAQAogI2luY2x1ZGUgImNvbW1hbmRzL3VzZXIuaCIKICNpbmNsdWRl ICJjb21tYW5kcy92YWN1dW0uaCIKICNpbmNsdWRlICJjb21tYW5kcy92aWV3LmgiCisjaW5jbHVk ZSAiY29tbWFuZHMvd2FpdC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBh cnNlci9wYXJzZV91dGlsY21kLmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9iZ3dyaXRlci5oIgpA QCAtNzAsNiArNzIsOSBAQAogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogI2luY2x1ZGUg InV0aWxzL3JlbC5oIgogI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCisjaW5jbHVkZSAiZXhl Y3V0b3Ivc3BpLmgiCisjaW5jbHVkZSAidXRpbHMvZm1ncnByb3Rvcy5oIgorI2luY2x1ZGUgInV0 aWxzL3BnX2xzbi5oIgogCiAvKiBIb29rIGZvciBwbHVnaW5zIHRvIGdldCBjb250cm9sIGluIFBy b2Nlc3NVdGlsaXR5KCkgKi8KIFByb2Nlc3NVdGlsaXR5X2hvb2tfdHlwZSBQcm9jZXNzVXRpbGl0 eV9ob29rID0gTlVMTDsKQEAgLTU5MSw2ICs1OTYsMTEgQEAgc3RhbmRhcmRfUHJvY2Vzc1V0aWxp dHkoUGxhbm5lZFN0bXQgKnBzdG10LAogCQkJCQljYXNlIFRSQU5TX1NUTVRfU1RBUlQ6CiAJCQkJ CQl7CiAJCQkJCQkJTGlzdENlbGwgICAqbGM7CisJCQkJCQkJV2FpdFN0bXQgICAqd2FpdHN0bXQg PSAoV2FpdFN0bXQgKikgc3RtdC0+d2FpdDsKKworCQkJCQkJCS8qIElmIG5lZWRlZCB0byBXQUlU IEZPUiBzb21ldGhpbmcgYnV0IGZhaWxlZCAqLworCQkJCQkJCWlmIChzdG10LT53YWl0ICYmIFdh aXRNYWluKHdhaXRzdG10LCBkZXN0KSA9PSAwKQorCQkJCQkJCQlicmVhazsKIAogCQkJCQkJCUJl Z2luVHJhbnNhY3Rpb25CbG9jaygpOwogCQkJCQkJCWZvcmVhY2gobGMsIHN0bXQtPm9wdGlvbnMp CkBAIC0yNzE4LDYgKzI3MjgsMTAgQEAgQ3JlYXRlQ29tbWFuZFRhZyhOb2RlICpwYXJzZXRyZWUp CiAJCQl0YWcgPSBDTURUQUdfTk9USUZZOwogCQkJYnJlYWs7CiAKKwkJY2FzZSBUX1dhaXRTdG10 OgorCQkJdGFnID0gQ01EVEFHX1dBSVQ7CisJCQlicmVhazsKKwogCQljYXNlIFRfTGlzdGVuU3Rt dDoKIAkJCXRhZyA9IENNRFRBR19MSVNURU47CiAJCQlicmVhazsKQEAgLTMzNTcsNiArMzM3MSwx MCBAQCBHZXRDb21tYW5kTG9nTGV2ZWwoTm9kZSAqcGFyc2V0cmVlKQogCQkJbGV2ID0gTE9HU1RN VF9BTEw7CiAJCQlicmVhazsKIAorCQljYXNlIFRfV2FpdFN0bXQ6CisJCQlsZXYgPSBMT0dTVE1U X0FMTDsKKwkJCWJyZWFrOworCiAJCWNhc2UgVF9MaXN0ZW5TdG10OgogCQkJbGV2ID0gTE9HU1RN VF9BTEw7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3dhaXQu aCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3dhaXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMC4uZTYxMmViNjEzOGMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVk ZS9jb21tYW5kcy93YWl0LmgKQEAgLTAsMCArMSwyNSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg KgorICogd2FpdC5oCisgKgkgIHByb3RvdHlwZXMgZm9yIGNvbW1hbmRzL3dhaXQuYworICoKKyAq IFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIwLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZl bG9wbWVudCBHcm91cCAgICAgICAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAyMCwgUmVn ZW50cyBvZiBQb3N0Z3Jlc1BybyAKKyAqCisgKiBzcmMvaW5jbHVkZS9jb21tYW5kcy93YWl0LmgK KyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBXQUlUX0gKKyNkZWZpbmUgV0FJ VF9ICisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKyNpbmNsdWRlICJ0Y29wL2Rlc3QuaCIKKworZXh0 ZXJuIGludCBXYWl0VXRpbGl0eShYTG9nUmVjUHRyIGxzbiwgY29uc3QgZmxvYXQ4IGRlbGF5KTsK K2V4dGVybiBTaXplIFdhaXRTaG1lbVNpemUodm9pZCk7CitleHRlcm4gdm9pZCBXYWl0U2htZW1J bml0KHZvaWQpOworZXh0ZXJuIHZvaWQgV2FpdFNldExhdGNoKFhMb2dSZWNQdHIgY3VyX2xzbik7 CitleHRlcm4gWExvZ1JlY1B0ciBHZXRNaW5XYWl0KHZvaWQpOworZXh0ZXJuIGludCBXYWl0TWFp bihXYWl0U3RtdCAqc3RtdCwgRGVzdFJlY2VpdmVyICpkZXN0KTsKKworI2VuZGlmICAgLyogV0FJ VF9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5oIGIvc3JjL2luY2x1 ZGUvbm9kZXMvbm9kZXMuaAppbmRleCA4YTc2YWZlOGNjYi4uMzQ4ZGU3NmM1ZjQgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL25vZGVzL25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvbm9k ZXMuaApAQCAtNDg4LDYgKzQ4OCw3IEBAIHR5cGVkZWYgZW51bSBOb2RlVGFnCiAJVF9Ecm9wUmVw bGljYXRpb25TbG90Q21kLAogCVRfU3RhcnRSZXBsaWNhdGlvbkNtZCwKIAlUX1RpbWVMaW5lSGlz dG9yeUNtZCwKKwlUX1dhaXRTdG10LAogCVRfU1FMQ21kLAogCiAJLyoKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9k ZXMuaAppbmRleCBjZDZmMWJlNjQzNS4uMzA2YjJlZjRkZjkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL25vZGVzL3BhcnNlbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVz LmgKQEAgLTMwNTgsNiArMzA1OCw3IEBAIHR5cGVkZWYgc3RydWN0IFRyYW5zYWN0aW9uU3RtdAog CWNoYXIJICAgKnNhdmVwb2ludF9uYW1lOyAvKiBmb3Igc2F2ZXBvaW50IGNvbW1hbmRzICovCiAJ Y2hhcgkgICAqZ2lkOwkJCS8qIGZvciB0d28tcGhhc2UtY29tbWl0IHJlbGF0ZWQgY29tbWFuZHMg Ki8KIAlib29sCQljaGFpbjsJCQkvKiBBTkQgQ0hBSU4gb3B0aW9uICovCisJTm9kZQkJKndhaXQ7 CQkJLyogV0FJVCBjbGF1c2U6IGxpc3Qgb2YgZXZlbnRzIHRvIHdhaXQgZm9yICovCiB9IFRyYW5z YWN0aW9uU3RtdDsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzU2Nyw0ICszNTY4 LDE3IEBAIHR5cGVkZWYgc3RydWN0IERyb3BTdWJzY3JpcHRpb25TdG10CiAJRHJvcEJlaGF2aW9y IGJlaGF2aW9yOwkJLyogUkVTVFJJQ1Qgb3IgQ0FTQ0FERSBiZWhhdmlvciAqLwogfSBEcm9wU3Vi c2NyaXB0aW9uU3RtdDsKIAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoJCVdBSVQgRk9S IFN0YXRlbWVudCArIFdBSVQgRk9SIGNsYXVzZSBvZiBCRUdJTiBzdGF0ZW1lbnQKKyAqCQlUT0RP OiBpZiB3ZSBvbmx5IHBpY2sgb25lLCByZW1vdmUgdGhlIG90aGVyCisgKiAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgV2FpdFN0bXQKK3sKKwlOb2RlVGFnCQl0 eXBlOworCWNoYXIJICAgKmxzbjsJCS8qIFdBSVQgRk9SIExTTiAqLworCXVpbnQJCQlkZWxheTsJ CS8qIFdBSVQgRk9SIFRJTUVTVEFNUCBvciBUSU1FICovCit9IFdhaXRTdG10OworCiAjZW5kaWYJ CQkJCQkJLyogUEFSU0VOT0RFU19IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wYXJzZXIv a3dsaXN0LmggYi9zcmMvaW5jbHVkZS9wYXJzZXIva3dsaXN0LmgKaW5kZXggMDhmMjJjZTIxMWQu LjZlMTg0OGZlNGNjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wYXJzZXIva3dsaXN0LmgKKysr IGIvc3JjL2luY2x1ZGUvcGFyc2VyL2t3bGlzdC5oCkBAIC0yNDMsNiArMjQzLDcgQEAgUEdfS0VZ V09SRCgibG9jYXRpb24iLCBMT0NBVElPTiwgVU5SRVNFUlZFRF9LRVlXT1JEKQogUEdfS0VZV09S RCgibG9jayIsIExPQ0tfUCwgVU5SRVNFUlZFRF9LRVlXT1JEKQogUEdfS0VZV09SRCgibG9ja2Vk IiwgTE9DS0VELCBVTlJFU0VSVkVEX0tFWVdPUkQpCiBQR19LRVlXT1JEKCJsb2dnZWQiLCBMT0dH RUQsIFVOUkVTRVJWRURfS0VZV09SRCkKK1BHX0tFWVdPUkQoImxzbiIsIExTTiwgVU5SRVNFUlZF RF9LRVlXT1JEKQogUEdfS0VZV09SRCgibWFwcGluZyIsIE1BUFBJTkcsIFVOUkVTRVJWRURfS0VZ V09SRCkKIFBHX0tFWVdPUkQoIm1hdGNoIiwgTUFUQ0gsIFVOUkVTRVJWRURfS0VZV09SRCkKIFBH X0tFWVdPUkQoIm1hdGVyaWFsaXplZCIsIE1BVEVSSUFMSVpFRCwgVU5SRVNFUlZFRF9LRVlXT1JE KQpAQCAtNDEwLDYgKzQxMSw3IEBAIFBHX0tFWVdPUkQoInRleHQiLCBURVhUX1AsIFVOUkVTRVJW RURfS0VZV09SRCkKIFBHX0tFWVdPUkQoInRoZW4iLCBUSEVOLCBSRVNFUlZFRF9LRVlXT1JEKQog UEdfS0VZV09SRCgidGllcyIsIFRJRVMsIFVOUkVTRVJWRURfS0VZV09SRCkKIFBHX0tFWVdPUkQo InRpbWUiLCBUSU1FLCBDT0xfTkFNRV9LRVlXT1JEKQorUEdfS0VZV09SRCgidGltZW91dCIsIFRJ TUVPVVQsIFVOUkVTRVJWRURfS0VZV09SRCkKIFBHX0tFWVdPUkQoInRpbWVzdGFtcCIsIFRJTUVT VEFNUCwgQ09MX05BTUVfS0VZV09SRCkKIFBHX0tFWVdPUkQoInRvIiwgVE8sIFJFU0VSVkVEX0tF WVdPUkQpCiBQR19LRVlXT1JEKCJ0cmFpbGluZyIsIFRSQUlMSU5HLCBSRVNFUlZFRF9LRVlXT1JE KQpAQCAtNDUwLDYgKzQ1Miw3IEBAIFBHX0tFWVdPUkQoInZlcnNpb24iLCBWRVJTSU9OX1AsIFVO UkVTRVJWRURfS0VZV09SRCkKIFBHX0tFWVdPUkQoInZpZXciLCBWSUVXLCBVTlJFU0VSVkVEX0tF WVdPUkQpCiBQR19LRVlXT1JEKCJ2aWV3cyIsIFZJRVdTLCBVTlJFU0VSVkVEX0tFWVdPUkQpCiBQ R19LRVlXT1JEKCJ2b2xhdGlsZSIsIFZPTEFUSUxFLCBVTlJFU0VSVkVEX0tFWVdPUkQpCitQR19L RVlXT1JEKCJ3YWl0IiwgV0FJVCwgVU5SRVNFUlZFRF9LRVlXT1JEKQogUEdfS0VZV09SRCgid2hl biIsIFdIRU4sIFJFU0VSVkVEX0tFWVdPUkQpCiBQR19LRVlXT1JEKCJ3aGVyZSIsIFdIRVJFLCBS RVNFUlZFRF9LRVlXT1JEKQogUEdfS0VZV09SRCgid2hpdGVzcGFjZSIsIFdISVRFU1BBQ0VfUCwg VU5SRVNFUlZFRF9LRVlXT1JEKQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdGNvcC9jbWR0YWds aXN0LmggYi9zcmMvaW5jbHVkZS90Y29wL2NtZHRhZ2xpc3QuaAppbmRleCA4ZWYwZjU1ZTc0OC4u NDMwYmI1YzcxNzEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Rjb3AvY21kdGFnbGlzdC5oCisr KyBiL3NyYy9pbmNsdWRlL3Rjb3AvY21kdGFnbGlzdC5oCkBAIC0yMTYsMyArMjE2LDQgQEAgUEdf Q01EVEFHKENNRFRBR19UUlVOQ0FURV9UQUJMRSwgIlRSVU5DQVRFIFRBQkxFIiwgZmFsc2UsIGZh bHNlLCBmYWxzZSkKIFBHX0NNRFRBRyhDTURUQUdfVU5MSVNURU4sICJVTkxJU1RFTiIsIGZhbHNl LCBmYWxzZSwgZmFsc2UpCiBQR19DTURUQUcoQ01EVEFHX1VQREFURSwgIlVQREFURSIsIGZhbHNl LCBmYWxzZSwgdHJ1ZSkKIFBHX0NNRFRBRyhDTURUQUdfVkFDVVVNLCAiVkFDVVVNIiwgZmFsc2Us IGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfV0FJVCwgIldBSVQgRk9SIiwgZmFsc2Us IGZhbHNlLCBmYWxzZSkKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDIwX2JlZ2lu X3dhaXQucGwgYi9zcmMvdGVzdC9yZWNvdmVyeS90LzAyMF9iZWdpbl93YWl0LnBsCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wMzNlNjU0NThiZgotLS0gL2Rldi9udWxs CisrKyBiL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDIwX2JlZ2luX3dhaXQucGwKQEAgLTAsMCArMSwx MjEgQEAKKyMgQ2hlY2tzIFdBSVQgRk9SCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOworCit1 c2UgUG9zdGdyZXNOb2RlOwordXNlIFRlc3RMaWI7Cit1c2UgVGVzdDo6TW9yZSB0ZXN0cyA9PiA2 OworCisjIEluaXRpYWxpemUgbWFzdGVyIG5vZGUKK215ICRub2RlX21hc3RlciA9IGdldF9uZXdf bm9kZSgnbWFzdGVyJyk7Ciskbm9kZV9tYXN0ZXItPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAx KTsKKyRub2RlX21hc3Rlci0+c3RhcnQ7CisKKyMgQW5kIHNvbWUgY29udGVudCBhbmQgdGFrZSBh IGJhY2t1cAorJG5vZGVfbWFzdGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFRB QkxFIHdhaXRfdGVzdCBBUyBTRUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEsMTApIEFTIGEiKTsKK215 ICRiYWNrdXBfbmFtZSA9ICdteV9iYWNrdXAnOworJG5vZGVfbWFzdGVyLT5iYWNrdXAoJGJhY2t1 cF9uYW1lKTsKKworIyBDcmVhdGUgYSBzdHJlYW1pbmcgc3RhbmRieSB3aXRoIGEgMSBzZWNvbmQg ZGVsYXkgZnJvbSB0aGUgYmFja3VwCitteSAkbm9kZV9zdGFuZGJ5ID0gZ2V0X25ld19ub2RlKCdz dGFuZGJ5Jyk7CitteSAkZGVsYXkgICAgICAgID0gMTsKKyRub2RlX3N0YW5kYnktPmluaXRfZnJv bV9iYWNrdXAoJG5vZGVfbWFzdGVyLCAkYmFja3VwX25hbWUsCisJaGFzX3N0cmVhbWluZyA9PiAx KTsKKyRub2RlX3N0YW5kYnktPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCBxcVsKKwly ZWNvdmVyeV9taW5fYXBwbHlfZGVsYXkgPSAnJHtkZWxheX1zJworXSk7Ciskbm9kZV9zdGFuZGJ5 LT5zdGFydDsKKworCisKKyMgTWFrZSBzdXJlIHRoYXQgV0FJVCBGT1IgTFNOIHdvcmtzOiBhZGQg bmV3IGNvbnRlbnQgdG8gbWFzdGVyIGFuZCBtZW1vcml6ZQorIyBtYXN0ZXIncyBuZXcgTFNOLCB0 aGVuIHdhaXQgZm9yIG1hc3RlcidzIExTTiBvbiBzdGFuZGJ5LiBQcm92ZSB0aGF0IFdBSVQgaXMK KyMgYWJsZSB0byBzZXR1cCBhbiBpbmZpbml0ZSB3YWl0aW5nIGxvb3AgYW5kIGV4aXQgaXQgaWYg Z2l2ZW4gbm8gd2FpdCB0aW1lb3V0LgorJG5vZGVfbWFzdGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKKwkiSU5TRVJUIElOVE8gd2FpdF90ZXN0IFZBTFVFUyAoZ2VuZXJhdGVfc2VyaWVzKDExLCAy MCkpIik7CitteSAkbHNuMSA9ICRub2RlX21hc3Rlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJT RUxFQ1QgcGdfY3VycmVudF93YWxfbHNuKCkiKTsKKyRub2RlX3N0YW5kYnktPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiQkVHSU4gV0FJVCBGT1IgTFNOICckbHNuMSciKTsKKworIyBHZXQgdGhlIGN1 cnJlbnQgTFNOIG9uIHN0YW5kYnkgYW5kIG1ha2Ugc3VyZSBpdCdzIHRoZSBzYW1lIGFzIG1hc3Rl cidzIExTTgorbXkgJGxzbl9zdGFuZGJ5ID0gJG5vZGVfc3RhbmRieS0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsCisJIlNFTEVDVCBwZ19sYXN0X3dhbF9yZXBsYXlfbHNuKCkiKTsKK215ICRjb21wYXJl X2xzbnMgPSAkbm9kZV9zdGFuZGJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHBn X2xzbl9jbXAoJyRsc25fc3RhbmRieSc6OnBnX2xzbiwgJyRsc24xJzo6cGdfbHNuKSIpOworb2so JGNvbXBhcmVfbHNucyBlcSAwLCAic3RhbmRieSByZWFjaGVkIHRoZSBzYW1lIExTTiBhcyBtYXN0 ZXIgYWZ0ZXIgV0FJVCIpOworCisKKworIyBDaGVjayB0aGF0IHRpbWVvdXRzIHdvcmsgb24gdGhl aXIgb3duIGFuZCBsZXQgdXMgd2FpdCBmb3Igc3BlY2lmaWVkIHRpbWUgKDFzKQorbXkgJGN1cnJl bnRfdGltZSA9ICRub2RlX3N0YW5kYnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIG5v dygpIik7CitteSAkb25lX3NlY29uZCA9IDEwMDA7ICMgaW4gbWlsbGlzZWNvbmRzCitteSAkc3Rh cnRfdGltZSA9IHRpbWUoKTsKKyMgV2hpbGUgd2UncmUgYXQgaXQsIGFsc28gbWFrZSBzdXJlIHRo YXQgdGhlIHN5bnRheCB3aXRoIGNvbW1hcyB3b3JrcyBmaW5lIGFuZAorIyB0aGF0IGJ5IGRlZmF1 bHQgd2UgdXNlIFdBSVQgRk9SIEFMTCBzdHJhdGVneSwgd2hpY2ggbWVhbnMgd2FpdGluZyBmb3Ig bWF4IHRpbWUKKyRub2RlX3N0YW5kYnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJCRUdJTiBX QUlUIEZPUiBMU04gJzAvRkZGRkZGRkYnIFRJTUVPVVQgJG9uZV9zZWNvbmQiKTsKK215ICR0aW1l X3dhaXRlZCA9ICh0aW1lKCkgLSAkc3RhcnRfdGltZSkgKiAxMDAwOyAjIGNvbnZlcnQgdG8gbWls bGlzZWNvbmRzCitvaygkdGltZV93YWl0ZWQgPj0gJG9uZV9zZWNvbmQsICJXQUlUIEZPUiBUSU1F T1VUIHdhaXRzIGZvciBlbm91Z2ggdGltZSIpOworCisjIE5vdywgY2hlY2sgdGhhdCB0aW1lb3V0 cyB3b3JrIGFzIGV4cGVjdGVkIHdoZW4gd2FpdGluZyBmb3IgTFNOCiskbm9kZV9tYXN0ZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyB3YWl0X3Rlc3QgVkFMVUVTIChnZW5l cmF0ZV9zZXJpZXMoMjEsIDMwKSkiKTsKK215ICRsc24yID0gJG5vZGVfbWFzdGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBwZ19jdXJyZW50X3dhbF9sc24oKSIpOworbXkgJHJlYWNo ZWRfbHNuID0gJG5vZGVfc3RhbmRieS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkJFR0lOIFdB SVQgRk9SIExTTiAnJGxzbjInIFRJTUVPVVQgMSIpOworb2soJHJlYWNoZWRfbHNuIGVxICJmIiwg IldBSVQgZG9lc24ndCByZWFjaCBMU04gaWYgZ2l2ZW4gdG9vIGxpdHRsZSB3YWl0IHRpbWUiKTsK KworCisjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUT0RPOiByZW1vdmUgdGhpcyB0ZXN0IGlm IHdlIHJlbW92ZSB0aGUgc3RhbmRhbG9uZSAiV0FJVCBGT1IiIGNvbW1hbmQKKyM9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CisjIFdlIG5lZWQgdG8gY2hlY2sgdGhhdCBXQUlUIHdvcmtzIGZpbmUgaW5z aWRlIHRyYW5zYWN0aW9ucy4gRm9yIHRoYXQsIGxldCdzCisjIGdldCB0d28gTFNOcyB0aGF0IHdp bGwgY29ycmVzcG9uZCB0byB0d28gZGlmZmVyZW50IG1heCB2YWx1ZXMgaW4gb3VyIHRhYmxlLgor JG5vZGVfbWFzdGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiSU5TRVJUIElOVE8gd2FpdF90 ZXN0IFZBTFVFUyAoZ2VuZXJhdGVfc2VyaWVzKDMxLCA0MCkpIik7CitteSAkbHNuMyA9ICRub2Rl X21hc3Rlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgcGdfY3VycmVudF93YWxfbHNu KCkiKTsKKyRub2RlX21hc3Rlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIklOU0VSVCBJTlRP IHdhaXRfdGVzdCBWQUxVRVMgKGdlbmVyYXRlX3Nlcmllcyg0MSwgNTApKSIpOworbXkgJGxzbjQg PSAkbm9kZV9tYXN0ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHBnX2N1cnJlbnRf d2FsX2xzbigpIik7CisKKworIyBHZXQgbXVsdGlwbGUgTFNOcyBmb3IgdGVzdGluZyBXQUlUIEZP UiBBTlkgLyBXQUlUIEZPUiBBTEwKKyRub2RlX21hc3Rlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs CisJIklOU0VSVCBJTlRPIHdhaXRfdGVzdCBWQUxVRVMgKGdlbmVyYXRlX3Nlcmllcyg1MSwgNjAp KSIpOworbXkgJGxzbjUgPSAkbm9kZV9tYXN0ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VM RUNUIHBnX2N1cnJlbnRfd2FsX2xzbigpIik7Ciskbm9kZV9tYXN0ZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLAorCSJJTlNFUlQgSU5UTyB3YWl0X3Rlc3QgVkFMVUVTIChnZW5lcmF0ZV9zZXJpZXMo NjEsIDcwMDAwKSkiKTsKK215ICRsc242ID0gJG5vZGVfbWFzdGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIlNFTEVDVCBwZ19jdXJyZW50X3dhbF9sc24oKSIpOworJG5vZGVfbWFzdGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKKwkiSU5TRVJUIElOVE8gd2FpdF90ZXN0IFZBTFVFUyAoZ2VuZXJh dGVfc2VyaWVzKDYxLCA4MDAwMDApKSIpOworbXkgJGxzbjcgPSAkbm9kZV9tYXN0ZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHBnX2N1cnJlbnRfd2FsX2xzbigpIik7CisKKyMgQ2hl Y2sgdGhhdCBXQUlUIEZPUiB3b3JrcyBmaW5lCiskbm9kZV9zdGFuZGJ5LT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKKwkiQkVHSU4gV0FJVCBGT1IgTFNOICckbHNuNSciKTsKKyRsc25fc3RhbmRieSA9 ICRub2RlX3N0YW5kYnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGdfbGFzdF93 YWxfcmVwbGF5X2xzbigpIik7CiskY29tcGFyZV9sc25zID0gJG5vZGVfc3RhbmRieS0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBwZ19sc25fY21wKCckbHNuX3N0YW5kYnknOjpwZ19s c24sICckbHNuNSc6OnBnX2xzbikiKTsKK29rKCRjb21wYXJlX2xzbnMgZ2UgMCwKKwkiV0FJVCBG T1IgQU5ZIG1ha2VzIHVzIHJlYWNoIGF0IGxlYXN0IHRoZSBtaW5pbXVtIExTTiBmcm9tIHRoZSBs aXN0Iik7CiskY29tcGFyZV9sc25zID0gJG5vZGVfc3RhbmRieS0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCisJIlNFTEVDVCBwZ19sc25fY21wKCckbHNuX3N0YW5kYnknOjpwZ19sc24sICckbHNuNyc6 OnBnX2xzbikiKTsKKyMgVE9ETzogQ291bGQgdGhpcyBzb21laG93IGZhaWwgZHVlIHRvIHRoZSBt YWNoaW5lIGJlaW5nIHZlcnkgZmFzdCBhdCBhcHBseWluZyBMU04/CitvaygkY29tcGFyZV9sc25z IGx0IDAsCisJIldBSVQgRk9SIEFOWSBkaWRuJ3QgbWFrZSB1cyByZWFjaCB0aGUgbWF4aW11bSBM U04gZnJvbSB0aGUgbGlzdCIpOworCisjIENoZWNrIHRoYXQgV0FJVCBGT1Igd29ya3MgZmluZQor JG5vZGVfc3RhbmRieS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkJFR0lOIFdBSVQgRk9SIExT TiAnJGxzbjcnIik7CiskbHNuX3N0YW5kYnkgPSAkbm9kZV9zdGFuZGJ5LT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKKwkiU0VMRUNUIHBnX2xhc3Rfd2FsX3JlcGxheV9sc24oKSIpOworJGNvbXBhcmVf bHNucyA9ICRub2RlX3N0YW5kYnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGdf bHNuX2NtcCgnJGxzbl9zdGFuZGJ5Jzo6cGdfbHNuLCAnJGxzbjcnOjpwZ19sc24pIik7Citvaygk Y29tcGFyZV9sc25zIGVxIDAsCisJIldBSVQgRk9SIG1ha2VzIHVzIHJlYWNoIHRoZSBtYXhpbXVt IExTTiIpOworCisKKworJG5vZGVfc3RhbmRieS0+c3RvcDsKKyRub2RlX21hc3Rlci0+c3RvcDsK --=_ad5015c09796dcef50d3c319cd95b140--