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.96) (envelope-from ) id 1vyYCC-000CqO-1X for pgsql-hackers@arkaria.postgresql.org; Fri, 06 Mar 2026 16:38:36 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vyYCA-0063uc-26 for pgsql-hackers@arkaria.postgresql.org; Fri, 06 Mar 2026 16:38:35 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vyYC9-0063uU-39 for pgsql-hackers@lists.postgresql.org; Fri, 06 Mar 2026 16:38:34 +0000 Received: from lahtoruutu.iki.fi ([2a0b:5c81:1c1::37]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1vyYC6-00000000nYe-32Pd for pgsql-hackers@lists.postgresql.org; Fri, 06 Mar 2026 16:38:33 +0000 Received: from [10.0.2.15] (unknown [130.41.208.2]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange x25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: hlinnaka) by lahtoruutu.iki.fi (Postfix) with ESMTPSA id 4fSBtC50QKz49Q6d; Fri, 06 Mar 2026 18:38:27 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1772815108; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=B/kyPe7Dul0mQsrDEELHNd/612t+gud/NPnM4hDhv74=; b=IhDj1ZY8CSKoYbaHlOhYkNolw6Qmv581jzhQ82mUvuCa538wjju9gBhLcnG8CCMhryjIOl LSG13vhfk5H9rBkxIukbTXN+0PoyeN4DmqJeDHTE8lD8SVpnEJmZSfmgqBPOK4ZxEHPHox B15CbSiuNWqKyZ6vae19imkkNaOxMjtS8ryHtf7ZCCIzISXjD+yhLgSAw/fc8lzRna+WLK VDdiDTUa9cSjVQJ7lu0t1aFvSa5UJYcE6SJDPjh8usoIrM4J/EmzSvrEwkatnzvN3xwRAS CuGf/Ogx1+H4Z5XWscF5gcXfQlStmjhD55Q4qPb7cEvCSarPz6FnEIEcAHomIA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1772815108; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=B/kyPe7Dul0mQsrDEELHNd/612t+gud/NPnM4hDhv74=; b=UnlwJa2se50iwRtFTxgT/a25XfUps06AxgYKzlXQLYhNAlBeonxfjW59TzzuBvjIZvcKaY GXEbiw/Xthj6PlW2xKRDrhnku0EPYqRxL3Gc05tOMqqKawLmqeff+1ry9sqJysUcGkVc0l gdZpxxfO7ZPYXHqAb4x1MeYpU+b3mF+qztXKzU5X/meO4mRnXci1wPX2Fp6/wCPPKEV/rW sBVA3fhjsa3bwzHbDnju0zmnMNqbAtw2FsBIVIAXRx8mvMpEXUEzRzEjKyZy1I/+zp1hqe QeHKbl6zVa1H5GefyiJdG4tbI1BF9CLUaIz0R5Y9Y+DiXglKVW9GRjdBP64dAw== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=hlinnaka smtp.mailfrom=hlinnaka@iki.fi ARC-Seal: i=1; a=rsa-sha256; d=iki.fi; s=lahtoruutu; cv=none; t=1772815108; b=tgsLomcqj/Wy55YhzUComKLEfyZUbJOyp2ODsE00OI0hA9OfEtJjF+mhJdp05tPLCOYH45 CHrRA3qPNj52RYwxQeoheNc9W6iVxuuZ8xc4hUhyuGTMRPt7uYJKpmdxqKv1TwPV65uYFN Iht5e8q2tB6puFzR1Fs0mH9dDtbw52uCAvQIloAyq8jwNzF42IO2cQUuArxwMsC3czzUhW 2C20Ezs+lMtGkPqOH+kp82HKxyhflZUyar/4ZnJ37c2jkk9dKWDgWapNV2dbW6qhHrHIjS pnyk9Pc+Z+bfZpHCuX+D8j2EPdKYLct/0ZFI66LESaOiH3gzWzlspjXYVW1mDQ== Content-Type: multipart/mixed; boundary="------------6DOUXzvh1RbqxauLI7u89V9p" Message-ID: Date: Fri, 6 Mar 2026 18:38:26 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Rework SLRU I/O errors handle From: Heikki Linnakangas To: =?UTF-8?Q?=C3=81lvaro_Herrera?= Cc: Maxim Orlov , Postgres hackers References: <202603061507.6ynh6qimlcma@alvherre.pgsql> <74f5dc14-29fd-46d9-ba8b-2844328d7bdf@iki.fi> Content-Language: en-US In-Reply-To: <74f5dc14-29fd-46d9-ba8b-2844328d7bdf@iki.fi> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------6DOUXzvh1RbqxauLI7u89V9p Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 06/03/2026 18:22, Heikki Linnakangas wrote: > On 06/03/2026 17:33, Álvaro Herrera wrote: >> I'm not a fan of the split.  I think it all these patches should be >> pushed as a single commit, and avoid introducing xact_errmsg_for_io_error >> as an exposed function.  I think that doesn't make a lot of sense.  Each >> SLRU should have a correct and appropriate error reporting callback. > > Agreed. > >> The comment added in 0005 is bogus too.  It mentions >> InvalidTransactionId, >> but the problem is not that the value is 0 but rather that we get no >> pointer.  Also, in all other callbacks the pointer is asserted to not be >> NULL, so why don't we do the same here, and avoid an error message >> that's not going to help anyone?  I see however that in the patch we're >> passing a NULL to SlruReportIOError(), which means if you get an IO >> error with any SLRU other than xact, you're going to get either a crash >> on the assertion, or (on non-debug builds) a crash on dereferencing the >> NULL pointer. > > Hmm, I thought we could just never pass a NULL pointer, but if a Write > fails, slru.c has no context where to pull that opaque_data. Perhaps we > should just not call the callback in that case. > > I'm starting to feel that what SlruReportIOError() currently uses as the > errdetail, could well be the main error message, and the callback could > provide the errdetail. I.e. swap the errmsg and errdetail we have now. > That way, we can just leave out the errdetail for Write failures. The > current errmsg we have for Write failures is pretty bad: "ERROR: could > not access status of transaction 0". What's currently the errdetail, > e.g. "Could not read from file \"%s\" at offset %d: %m", is a lot more > informative. Attached version that does that. As another data point, we have a lot of error messages like "could not open file \"%s\": %m" in the source tree. slru.c was the only place where that was in the errdetail() part. - Heikki --------------6DOUXzvh1RbqxauLI7u89V9p Content-Type: text/x-patch; charset=UTF-8; name="v2-0001-Add-a-callback-for-I-O-error-messages-in-SLRUs.patch" Content-Disposition: attachment; filename*0="v2-0001-Add-a-callback-for-I-O-error-messages-in-SLRUs.patch" Content-Transfer-Encoding: base64 RnJvbSBmOTM2NjExNjdiNTAxZTdhZGU5NDk3NmQzNzQzZGNjYWRkM2JiZWQwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IEZyaSwgNiBNYXIgMjAyNiAxODozNDoyOSArMDIwMApT dWJqZWN0OiBbUEFUQ0ggdjIgMS8xXSBBZGQgYSBjYWxsYmFjayBmb3IgSS9PIGVycm9yIG1l c3NhZ2VzIGluIFNMUlVzCk1JTUUtVmVyc2lvbjogMS4wCkNvbnRlbnQtVHlwZTogdGV4dC9w bGFpbjsgY2hhcnNldD1VVEYtOApDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CgpI aXN0b3JpY2FsbHksIGFsbCBTTFJVcyB3ZXJlIGFkZHJlc3NlZCBieSB0cmFuc2FjdGlvbiBJ RHMsIGJ1dCB0aGF0Cmhhc24ndCBiZWVuIHRydWUgZm9yIGxvbmcgdGltZS4gSG93ZXZlciwg dGhlIGVycm9yIG1lc3NhZ2Ugb24gSS9PCmVycm9yIHN0aWxsIGFsd2F5cyB0YWxrZWQgYWJv dXQgYWNjZXNzaW5nIGEgdHJhbnNhY3Rpb24gSUQuCgpUaGlzIGNvbW1pdCBhZGRzIGEgY2Fs bGJhY2sgdGhhdCBhbGxvdyBzdWJzeXN0ZW1zIHRvIGNvbnN0cnVjdCB0aGVpcgpvd24gZXJy b3IgbWVzc2FnZXMsIHdoaWNoIGNhbiB0aGVuIGNvcnJlY3RseSByZWZlciB0byBhIHRyYW5z YWN0aW9uCklELCBhIG11bHRpeGlkIG9yIHdoYXRldmVyIGVsc2UgaXMgdXNlZCB0byBhZGRy ZXNzIHRoZSBTTFJVLgoKQXV0aG9yOiBNYXhpbSBPcmxvdiA8b3Jsb3ZtZ0BnbWFpbC5jb20+ ClJldmlld2VkLWJ5OiDDgWx2YXJvIEhlcnJlcmEgPGFsdmhlcnJlQGt1cmlsZW11LmRlPgpE aXNjdXNzaW9uOiBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkL0NBQ0c9 ZXpaWmZ1cmhZVis2NmNldWJ4UUF5V3F2OXZhVWkweW9PNC10NDhPRTV4YzBEUUBtYWlsLmdt YWlsLmNvbQotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2Nsb2cuYyAgICAgICAg ICAgICB8IDE3ICsrKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2NvbW1pdF90cy5j ICAgICAgICB8IDEzICsrLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0 LmMgICAgICAgIHwgNDggKysrKysrKystLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2Ft L3NscnUuYyAgICAgICAgICAgICB8IDgwICsrKysrKysrKystLS0tLS0tLS0KIHNyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL3N1YnRyYW5zLmMgICAgICAgICB8IDE0ICsrKy0KIHNyYy9i YWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMgICAgICAgICAgICAgICAgICB8IDIwICsrKy0tCiBz cmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJlZGljYXRlLmMgICAgICAgICAgfCAxNCArKyst CiBzcmMvaW5jbHVkZS9hY2Nlc3Mvc2xydS5oICAgICAgICAgICAgICAgICAgICAgfCAxNSAr KystCiAuLi4vbW9kdWxlcy90ZXN0X3NscnUvZXhwZWN0ZWQvdGVzdF9zbHJ1Lm91dCAgfCAg NCArCiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc2xydS9zcWwvdGVzdF9zbHJ1LnNxbCAgfCAg MyArCiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc2xydS90ZXN0X3NscnUtLTEuMC5zcWwgfCAg MiArLQogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NscnUvdGVzdF9zbHJ1LmMgICAgICAgIHwg MTUgKysrLQogMTIgZmlsZXMgY2hhbmdlZCwgMTc4IGluc2VydGlvbnMoKyksIDY3IGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2Nsb2cu YyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2Nsb2cuYwppbmRleCBiNWMzOGJiYjE2 Mi4uNjgxODlkZTQ2NDUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2Ft L2Nsb2cuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jbG9nLmMKQEAgLTEx MSw2ICsxMTEsNyBAQCBzdGF0aWMgU2xydUN0bERhdGEgWGFjdEN0bERhdGE7CiAKIAogc3Rh dGljIGJvb2wgQ0xPR1BhZ2VQcmVjZWRlcyhpbnQ2NCBwYWdlMSwgaW50NjQgcGFnZTIpOwor c3RhdGljIGludCBjbG9nX2VycmRldGFpbF9mb3JfaW9fZXJyb3IoY29uc3Qgdm9pZCAqb3Bh cXVlX2RhdGEpOwogc3RhdGljIHZvaWQgV3JpdGVUcnVuY2F0ZVhsb2dSZWMoaW50NjQgcGFn ZW5vLCBUcmFuc2FjdGlvbklkIG9sZGVzdFhhY3QsCiAJCQkJCQkJCSBPaWQgb2xkZXN0WGFj dERiKTsKIHN0YXRpYyB2b2lkIFRyYW5zYWN0aW9uSWRTZXRQYWdlU3RhdHVzKFRyYW5zYWN0 aW9uSWQgeGlkLCBpbnQgbnN1YnhpZHMsCkBAIC0zODEsOCArMzgyLDcgQEAgVHJhbnNhY3Rp b25JZFNldFBhZ2VTdGF0dXNJbnRlcm5hbChUcmFuc2FjdGlvbklkIHhpZCwgaW50IG5zdWJ4 aWRzLAogCSAqIHdyaXRlLWJ1c3ksIHNpbmNlIHdlIGRvbid0IGNhcmUgaWYgdGhlIHVwZGF0 ZSByZWFjaGVzIGRpc2sgc29vbmVyIHRoYW4KIAkgKiB3ZSB0aGluay4KIAkgKi8KLQlzbG90 bm8gPSBTaW1wbGVMcnVSZWFkUGFnZShYYWN0Q3RsLCBwYWdlbm8sICFYTG9nUmVjUHRySXNW YWxpZChsc24pLAotCQkJCQkJCSAgIHhpZCk7CisJc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBh Z2UoWGFjdEN0bCwgcGFnZW5vLCAhWExvZ1JlY1B0cklzVmFsaWQobHNuKSwgJnhpZCk7CiAK IAkvKgogCSAqIFNldCB0aGUgbWFpbiB0cmFuc2FjdGlvbiBpZCwgaWYgYW55LgpAQCAtNzQz LDcgKzc0Myw3IEBAIFRyYW5zYWN0aW9uSWRHZXRTdGF0dXMoVHJhbnNhY3Rpb25JZCB4aWQs IFhMb2dSZWNQdHIgKmxzbikKIAogCS8qIGxvY2sgaXMgYWNxdWlyZWQgYnkgU2ltcGxlTHJ1 UmVhZFBhZ2VfUmVhZE9ubHkgKi8KIAotCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdlX1Jl YWRPbmx5KFhhY3RDdGwsIHBhZ2VubywgeGlkKTsKKwlzbG90bm8gPSBTaW1wbGVMcnVSZWFk UGFnZV9SZWFkT25seShYYWN0Q3RsLCBwYWdlbm8sICZ4aWQpOwogCWJ5dGVwdHIgPSBYYWN0 Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10gKyBieXRlbm87CiAKIAlzdGF0dXMg PSAoKmJ5dGVwdHIgPj4gYnNoaWZ0KSAmIENMT0dfWEFDVF9CSVRNQVNLOwpAQCAtODA3LDYg KzgwNyw3IEBAIENMT0dTaG1lbUluaXQodm9pZCkKIAlBc3NlcnQodHJhbnNhY3Rpb25fYnVm ZmVycyAhPSAwKTsKIAogCVhhY3RDdGwtPlBhZ2VQcmVjZWRlcyA9IENMT0dQYWdlUHJlY2Vk ZXM7CisJWGFjdEN0bC0+ZXJyZGV0YWlsX2Zvcl9pb19lcnJvciA9IGNsb2dfZXJyZGV0YWls X2Zvcl9pb19lcnJvcjsKIAlTaW1wbGVMcnVJbml0KFhhY3RDdGwsICJ0cmFuc2FjdGlvbiIs IENMT0dTaG1lbUJ1ZmZlcnMoKSwgQ0xPR19MU05TX1BFUl9QQUdFLAogCQkJCSAgInBnX3hh Y3QiLCBMV1RSQU5DSEVfWEFDVF9CVUZGRVIsCiAJCQkJICBMV1RSQU5DSEVfWEFDVF9TTFJV LCBTWU5DX0hBTkRMRVJfQ0xPRywgZmFsc2UpOwpAQCAtODgyLDcgKzg4Myw3IEBAIFRyaW1D TE9HKHZvaWQpCiAJCWludAkJCXNsb3RubzsKIAkJY2hhcgkgICAqYnl0ZXB0cjsKIAotCQlz bG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZShYYWN0Q3RsLCBwYWdlbm8sIGZhbHNlLCB4aWQp OworCQlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZShYYWN0Q3RsLCBwYWdlbm8sIGZhbHNl LCAmeGlkKTsKIAkJYnl0ZXB0ciA9IFhhY3RDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xv dG5vXSArIGJ5dGVubzsKIAogCQkvKiBaZXJvIHNvLWZhci11bnVzZWQgcG9zaXRpb25zIGlu IHRoZSBjdXJyZW50IGJ5dGUgKi8KQEAgLTEwMzMsNiArMTAzNCwxNCBAQCBDTE9HUGFnZVBy ZWNlZGVzKGludDY0IHBhZ2UxLCBpbnQ2NCBwYWdlMikKIAkJCVRyYW5zYWN0aW9uSWRQcmVj ZWRlcyh4aWQxLCB4aWQyICsgQ0xPR19YQUNUU19QRVJfUEFHRSAtIDEpKTsKIH0KIAorc3Rh dGljIGludAorY2xvZ19lcnJkZXRhaWxfZm9yX2lvX2Vycm9yKGNvbnN0IHZvaWQgKm9wYXF1 ZV9kYXRhKQoreworCVRyYW5zYWN0aW9uSWQgeGlkID0gKihjb25zdCBUcmFuc2FjdGlvbklk ICopIG9wYXF1ZV9kYXRhOworCisJcmV0dXJuIGVycmRldGFpbCgiQ291bGQgbm90IGFjY2Vz cyBjb21taXQgc3RhdHVzIG9mIHRyYW5zYWN0aW9uICV1LiIsIHhpZCk7Cit9CisKIAogLyoK ICAqIFdyaXRlIGEgVFJVTkNBVEUgeGxvZyByZWNvcmQKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL2NvbW1pdF90cy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3Ry YW5zYW0vY29tbWl0X3RzLmMKaW5kZXggNmZhMjE3OGYxZGQuLjZlMWM4MGI0NGIzIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jb21taXRfdHMuYworKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jb21taXRfdHMuYwpAQCAtMTE1LDYgKzExNSw3 IEBAIHN0YXRpYyB2b2lkIFRyYW5zYWN0aW9uSWRTZXRDb21taXRUcyhUcmFuc2FjdGlvbklk IHhpZCwgVGltZXN0YW1wVHogdHMsCiAJCQkJCQkJCQkgUmVwbE9yaWdpbklkIG5vZGVpZCwg aW50IHNsb3Rubyk7CiBzdGF0aWMgdm9pZCBlcnJvcl9jb21taXRfdHNfZGlzYWJsZWQodm9p ZCk7CiBzdGF0aWMgYm9vbCBDb21taXRUc1BhZ2VQcmVjZWRlcyhpbnQ2NCBwYWdlMSwgaW50 NjQgcGFnZTIpOworc3RhdGljIGludCBjb21taXRfdHNfZXJyZGV0YWlsX2Zvcl9pb19lcnJv cihjb25zdCB2b2lkICpvcGFxdWVfZGF0YSk7CiBzdGF0aWMgdm9pZCBBY3RpdmF0ZUNvbW1p dFRzKHZvaWQpOwogc3RhdGljIHZvaWQgRGVhY3RpdmF0ZUNvbW1pdFRzKHZvaWQpOwogc3Rh dGljIHZvaWQgV3JpdGVUcnVuY2F0ZVhsb2dSZWMoaW50NjQgcGFnZW5vLCBUcmFuc2FjdGlv bklkIG9sZGVzdFhpZCk7CkBAIC0yMjcsNyArMjI4LDcgQEAgU2V0WGlkQ29tbWl0VHNJblBh Z2UoVHJhbnNhY3Rpb25JZCB4aWQsIGludCBuc3VieGlkcywKIAogCUxXTG9ja0FjcXVpcmUo bG9jaywgTFdfRVhDTFVTSVZFKTsKIAotCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdlKENv bW1pdFRzQ3RsLCBwYWdlbm8sIHRydWUsIHhpZCk7CisJc2xvdG5vID0gU2ltcGxlTHJ1UmVh ZFBhZ2UoQ29tbWl0VHNDdGwsIHBhZ2VubywgdHJ1ZSwgJnhpZCk7CiAKIAlUcmFuc2FjdGlv bklkU2V0Q29tbWl0VHMoeGlkLCB0cywgbm9kZWlkLCBzbG90bm8pOwogCWZvciAoaSA9IDA7 IGkgPCBuc3VieGlkczsgaSsrKQpAQCAtMzMyLDcgKzMzMyw3IEBAIFRyYW5zYWN0aW9uSWRH ZXRDb21taXRUc0RhdGEoVHJhbnNhY3Rpb25JZCB4aWQsIFRpbWVzdGFtcFR6ICp0cywKIAl9 CiAKIAkvKiBsb2NrIGlzIGFjcXVpcmVkIGJ5IFNpbXBsZUxydVJlYWRQYWdlX1JlYWRPbmx5 ICovCi0Jc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2VfUmVhZE9ubHkoQ29tbWl0VHNDdGws IHBhZ2VubywgeGlkKTsKKwlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZV9SZWFkT25seShD b21taXRUc0N0bCwgcGFnZW5vLCAmeGlkKTsKIAltZW1jcHkoJmVudHJ5LAogCQkgICBDb21t aXRUc0N0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dICsKIAkJICAgU2l6ZU9mQ29t bWl0VGltZXN0YW1wRW50cnkgKiBlbnRyeW5vLApAQCAtNTUxLDYgKzU1Miw3IEBAIENvbW1p dFRzU2htZW1Jbml0KHZvaWQpCiAJQXNzZXJ0KGNvbW1pdF90aW1lc3RhbXBfYnVmZmVycyAh PSAwKTsKIAogCUNvbW1pdFRzQ3RsLT5QYWdlUHJlY2VkZXMgPSBDb21taXRUc1BhZ2VQcmVj ZWRlczsKKwlDb21taXRUc0N0bC0+ZXJyZGV0YWlsX2Zvcl9pb19lcnJvciA9IGNvbW1pdF90 c19lcnJkZXRhaWxfZm9yX2lvX2Vycm9yOwogCVNpbXBsZUxydUluaXQoQ29tbWl0VHNDdGws ICJjb21taXRfdGltZXN0YW1wIiwgQ29tbWl0VHNTaG1lbUJ1ZmZlcnMoKSwgMCwKIAkJCQkg ICJwZ19jb21taXRfdHMiLCBMV1RSQU5DSEVfQ09NTUlUVFNfQlVGRkVSLAogCQkJCSAgTFdU UkFOQ0hFX0NPTU1JVFRTX1NMUlUsCkBAIC05NTksNiArOTYxLDEzIEBAIENvbW1pdFRzUGFn ZVByZWNlZGVzKGludDY0IHBhZ2UxLCBpbnQ2NCBwYWdlMikKIAkJCVRyYW5zYWN0aW9uSWRQ cmVjZWRlcyh4aWQxLCB4aWQyICsgQ09NTUlUX1RTX1hBQ1RTX1BFUl9QQUdFIC0gMSkpOwog fQogCitzdGF0aWMgaW50Citjb21taXRfdHNfZXJyZGV0YWlsX2Zvcl9pb19lcnJvcihjb25z dCB2b2lkICpvcGFxdWVfZGF0YSkKK3sKKwlUcmFuc2FjdGlvbklkIHhpZCA9ICooY29uc3Qg VHJhbnNhY3Rpb25JZCAqKSBvcGFxdWVfZGF0YTsKKworCXJldHVybiBlcnJkZXRhaWwoIkNv dWxkIG5vdCBhY2Nlc3MgY29tbWl0IHRpbWVzdGFtcCBvZiB0cmFuc2FjdGlvbiAldS4iLCB4 aWQpOworfQogCiAvKgogICogV3JpdGUgYSBUUlVOQ0FURSB4bG9nIHJlY29yZApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYwppbmRleCA4YTVjOTgxOGVkNi4uNmY3 ZjM5ZDRlNTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRp eGFjdC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jCkBA IC0zMTUsNiArMzE1LDggQEAgc3RhdGljIHZvaWQgbVhhY3RDYWNoZVB1dChNdWx0aVhhY3RJ ZCBtdWx0aSwgaW50IG5tZW1iZXJzLAogLyogbWFuYWdlbWVudCBvZiBTTFJVIGluZnJhc3Ry dWN0dXJlICovCiBzdGF0aWMgYm9vbCBNdWx0aVhhY3RPZmZzZXRQYWdlUHJlY2VkZXMoaW50 NjQgcGFnZTEsIGludDY0IHBhZ2UyKTsKIHN0YXRpYyBib29sIE11bHRpWGFjdE1lbWJlclBh Z2VQcmVjZWRlcyhpbnQ2NCBwYWdlMSwgaW50NjQgcGFnZTIpOworc3RhdGljIGludCBNdWx0 aVhhY3RPZmZzZXRJb0Vycm9yRGV0YWlsKGNvbnN0IHZvaWQgKm9wYXF1ZV9kYXRhKTsKK3N0 YXRpYyBpbnQgTXVsdGlYYWN0TWVtYmVySW9FcnJvckRldGFpbChjb25zdCB2b2lkICpvcGFx dWVfZGF0YSk7CiBzdGF0aWMgdm9pZCBFeHRlbmRNdWx0aVhhY3RPZmZzZXQoTXVsdGlYYWN0 SWQgbXVsdGkpOwogc3RhdGljIHZvaWQgRXh0ZW5kTXVsdGlYYWN0TWVtYmVyKE11bHRpWGFj dE9mZnNldCBvZmZzZXQsIGludCBubWVtYmVycyk7CiBzdGF0aWMgdm9pZCBTZXRPbGRlc3RP ZmZzZXQodm9pZCk7CkBAIC04MzYsNyArODM4LDcgQEAgUmVjb3JkTmV3TXVsdGlYYWN0KE11 bHRpWGFjdElkIG11bHRpLCBNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0LAogCSAqIGVub3VnaCB0 aGF0IGEgTXVsdGlYYWN0SWQgaXMgcmVhbGx5IGludm9sdmVkLiAgUGVyaGFwcyBzb21lZGF5 IHdlJ2xsCiAJICogdGFrZSB0aGUgdHJvdWJsZSB0byBnZW5lcmFsaXplIHRoZSBzbHJ1LmMg ZXJyb3IgcmVwb3J0aW5nIGNvZGUuCiAJICovCi0Jc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBh Z2UoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBwYWdlbm8sIHRydWUsIG11bHRpKTsKKwlzbG90bm8g PSBTaW1wbGVMcnVSZWFkUGFnZShNdWx0aVhhY3RPZmZzZXRDdGwsIHBhZ2VubywgdHJ1ZSwg Jm11bHRpKTsKIAlvZmZwdHIgPSAoTXVsdGlYYWN0T2Zmc2V0ICopIE11bHRpWGFjdE9mZnNl dEN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dOwogCW9mZnB0ciArPSBlbnRyeW5v OwogCkBAIC04NjUsNyArODY3LDcgQEAgUmVjb3JkTmV3TXVsdGlYYWN0KE11bHRpWGFjdElk IG11bHRpLCBNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0LAogCQlsb2NrID0gU2ltcGxlTHJ1R2V0 QmFua0xvY2soTXVsdGlYYWN0T2Zmc2V0Q3RsLCBuZXh0X3BhZ2Vubyk7CiAJCUxXTG9ja0Fj cXVpcmUobG9jaywgTFdfRVhDTFVTSVZFKTsKIAotCQlzbG90bm8gPSBTaW1wbGVMcnVSZWFk UGFnZShNdWx0aVhhY3RPZmZzZXRDdGwsIG5leHRfcGFnZW5vLCB0cnVlLCBuZXh0KTsKKwkJ c2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2UoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBuZXh0X3Bh Z2VubywgdHJ1ZSwgJm5leHQpOwogCQluZXh0X29mZnB0ciA9IChNdWx0aVhhY3RPZmZzZXQg KikgTXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub107CiAJ CW5leHRfb2ZmcHRyICs9IG5leHRfZW50cnlubzsKIAl9CkBAIC05MTksNyArOTIxLDggQEAg UmVjb3JkTmV3TXVsdGlYYWN0KE11bHRpWGFjdElkIG11bHRpLCBNdWx0aVhhY3RPZmZzZXQg b2Zmc2V0LAogCQkJCUxXTG9ja0FjcXVpcmUobG9jaywgTFdfRVhDTFVTSVZFKTsKIAkJCQlw cmV2bG9jayA9IGxvY2s7CiAJCQl9Ci0JCQlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZShN dWx0aVhhY3RNZW1iZXJDdGwsIHBhZ2VubywgdHJ1ZSwgbXVsdGkpOworCQkJc2xvdG5vID0g U2ltcGxlTHJ1UmVhZFBhZ2UoTXVsdGlYYWN0TWVtYmVyQ3RsLCBwYWdlbm8sIHRydWUsCisJ CQkJCQkJCQkgICAmb2Zmc2V0KTsKIAkJCXByZXZfcGFnZW5vID0gcGFnZW5vOwogCQl9CiAK QEAgLTEyNDQsNyArMTI0Nyw3IEBAIEdldE11bHRpWGFjdElkTWVtYmVycyhNdWx0aVhhY3RJ ZCBtdWx0aSwgTXVsdGlYYWN0TWVtYmVyICoqbWVtYmVycywKIAlMV0xvY2tBY3F1aXJlKGxv Y2ssIExXX0VYQ0xVU0lWRSk7CiAKIAkvKiByZWFkIHRoaXMgbXVsdGkncyBvZmZzZXQgKi8K LQlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZShNdWx0aVhhY3RPZmZzZXRDdGwsIHBhZ2Vu bywgdHJ1ZSwgbXVsdGkpOworCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdlKE11bHRpWGFj dE9mZnNldEN0bCwgcGFnZW5vLCB0cnVlLCAmbXVsdGkpOwogCW9mZnB0ciA9IChNdWx0aVhh Y3RPZmZzZXQgKikgTXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Ns b3Rub107CiAJb2ZmcHRyICs9IGVudHJ5bm87CiAJb2Zmc2V0ID0gKm9mZnB0cjsKQEAgLTEy ODIsNyArMTI4NSw3IEBAIEdldE11bHRpWGFjdElkTWVtYmVycyhNdWx0aVhhY3RJZCBtdWx0 aSwgTXVsdGlYYWN0TWVtYmVyICoqbWVtYmVycywKIAkJCQlMV0xvY2tBY3F1aXJlKG5ld2xv Y2ssIExXX0VYQ0xVU0lWRSk7CiAJCQkJbG9jayA9IG5ld2xvY2s7CiAJCQl9Ci0JCQlzbG90 bm8gPSBTaW1wbGVMcnVSZWFkUGFnZShNdWx0aVhhY3RPZmZzZXRDdGwsIHBhZ2VubywgdHJ1 ZSwgdG1wTVhhY3QpOworCQkJc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2UoTXVsdGlYYWN0 T2Zmc2V0Q3RsLCBwYWdlbm8sIHRydWUsICZ0bXBNWGFjdCk7CiAJCX0KIAogCQlvZmZwdHIg PSAoTXVsdGlYYWN0T2Zmc2V0ICopIE11bHRpWGFjdE9mZnNldEN0bC0+c2hhcmVkLT5wYWdl X2J1ZmZlcltzbG90bm9dOwpAQCAtMTM0Nyw3ICsxMzUwLDggQEAgR2V0TXVsdGlYYWN0SWRN ZW1iZXJzKE11bHRpWGFjdElkIG11bHRpLCBNdWx0aVhhY3RNZW1iZXIgKiptZW1iZXJzLAog CQkJCWxvY2sgPSBuZXdsb2NrOwogCQkJfQogCi0JCQlzbG90bm8gPSBTaW1wbGVMcnVSZWFk UGFnZShNdWx0aVhhY3RNZW1iZXJDdGwsIHBhZ2VubywgdHJ1ZSwgbXVsdGkpOworCQkJc2xv dG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2UoTXVsdGlYYWN0TWVtYmVyQ3RsLCBwYWdlbm8sIHRy dWUsCisJCQkJCQkJCQkgICAmb2Zmc2V0KTsKIAkJCXByZXZfcGFnZW5vID0gcGFnZW5vOwog CQl9CiAKQEAgLTE3NzksNiArMTc4Myw5IEBAIE11bHRpWGFjdFNobWVtSW5pdCh2b2lkKQog CU11bHRpWGFjdE9mZnNldEN0bC0+UGFnZVByZWNlZGVzID0gTXVsdGlYYWN0T2Zmc2V0UGFn ZVByZWNlZGVzOwogCU11bHRpWGFjdE1lbWJlckN0bC0+UGFnZVByZWNlZGVzID0gTXVsdGlY YWN0TWVtYmVyUGFnZVByZWNlZGVzOwogCisJTXVsdGlYYWN0T2Zmc2V0Q3RsLT5lcnJkZXRh aWxfZm9yX2lvX2Vycm9yID0gTXVsdGlYYWN0T2Zmc2V0SW9FcnJvckRldGFpbDsKKwlNdWx0 aVhhY3RNZW1iZXJDdGwtPmVycmRldGFpbF9mb3JfaW9fZXJyb3IgPSBNdWx0aVhhY3RNZW1i ZXJJb0Vycm9yRGV0YWlsOworCiAJU2ltcGxlTHJ1SW5pdChNdWx0aVhhY3RPZmZzZXRDdGws CiAJCQkJICAibXVsdGl4YWN0X29mZnNldCIsIG11bHRpeGFjdF9vZmZzZXRfYnVmZmVycywg MCwKIAkJCQkgICJwZ19tdWx0aXhhY3Qvb2Zmc2V0cyIsIExXVFJBTkNIRV9NVUxUSVhBQ1RP RkZTRVRfQlVGRkVSLApAQCAtMTkyOCw3ICsxOTM1LDcgQEAgVHJpbU11bHRpWGFjdCh2b2lk KQogCQlpZiAoZW50cnlubyA9PSAwIHx8IG5leHRNWGFjdCA9PSBGaXJzdE11bHRpWGFjdElk KQogCQkJc2xvdG5vID0gU2ltcGxlTHJ1WmVyb1BhZ2UoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBw YWdlbm8pOwogCQllbHNlCi0JCQlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZShNdWx0aVhh Y3RPZmZzZXRDdGwsIHBhZ2VubywgdHJ1ZSwgbmV4dE1YYWN0KTsKKwkJCXNsb3RubyA9IFNp bXBsZUxydVJlYWRQYWdlKE11bHRpWGFjdE9mZnNldEN0bCwgcGFnZW5vLCB0cnVlLCAmbmV4 dE1YYWN0KTsKIAkJb2ZmcHRyID0gKE11bHRpWGFjdE9mZnNldCAqKSBNdWx0aVhhY3RPZmZz ZXRDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXTsKIAkJb2ZmcHRyICs9IGVudHJ5 bm87CiAKQEAgLTE5NjMsNyArMTk3MCw3IEBAIFRyaW1NdWx0aVhhY3Qodm9pZCkKIAogCQlM V0xvY2tBY3F1aXJlKGxvY2ssIExXX0VYQ0xVU0lWRSk7CiAJCW1lbWJlcm9mZiA9IE1YT2Zm c2V0VG9NZW1iZXJPZmZzZXQob2Zmc2V0KTsKLQkJc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBh Z2UoTXVsdGlYYWN0TWVtYmVyQ3RsLCBwYWdlbm8sIHRydWUsIG9mZnNldCk7CisJCXNsb3Ru byA9IFNpbXBsZUxydVJlYWRQYWdlKE11bHRpWGFjdE1lbWJlckN0bCwgcGFnZW5vLCB0cnVl LCAmb2Zmc2V0KTsKIAkJeGlkcHRyID0gKFRyYW5zYWN0aW9uSWQgKikKIAkJCShNdWx0aVhh Y3RNZW1iZXJDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXSArIG1lbWJlcm9mZik7 CiAKQEAgLTI0OTcsNyArMjUwNCw3IEBAIGZpbmRfbXVsdGl4YWN0X3N0YXJ0KE11bHRpWGFj dElkIG11bHRpLCBNdWx0aVhhY3RPZmZzZXQgKnJlc3VsdCkKIAkJcmV0dXJuIGZhbHNlOwog CiAJLyogbG9jayBpcyBhY3F1aXJlZCBieSBTaW1wbGVMcnVSZWFkUGFnZV9SZWFkT25seSAq LwotCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdlX1JlYWRPbmx5KE11bHRpWGFjdE9mZnNl dEN0bCwgcGFnZW5vLCBtdWx0aSk7CisJc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2VfUmVh ZE9ubHkoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBwYWdlbm8sICZtdWx0aSk7CiAJb2ZmcHRyID0g KE11bHRpWGFjdE9mZnNldCAqKSBNdWx0aVhhY3RPZmZzZXRDdGwtPnNoYXJlZC0+cGFnZV9i dWZmZXJbc2xvdG5vXTsKIAlvZmZwdHIgKz0gZW50cnlubzsKIAlvZmZzZXQgPSAqb2ZmcHRy OwpAQCAtMjgwOCw2ICsyODE1LDI5IEBAIE11bHRpWGFjdE1lbWJlclBhZ2VQcmVjZWRlcyhp bnQ2NCBwYWdlMSwgaW50NjQgcGFnZTIpCiAJcmV0dXJuIHBhZ2UxIDwgcGFnZTI7CiB9CiAK Ky8qCisgKiBDdXN0b20gSU8gZXJybXNnIGZvciBNdWx0aVhhY3RPZmZzZXQuCisgKi8KK3N0 YXRpYyBpbmxpbmUgaW50CitNdWx0aVhhY3RPZmZzZXRJb0Vycm9yRGV0YWlsKGNvbnN0IHZv aWQgKm9wYXF1ZV9kYXRhKQoreworCU11bHRpWGFjdElkIG11bHRpeGlkID0gKihjb25zdCBN dWx0aVhhY3RJZCAqKSBvcGFxdWVfZGF0YTsKKworCXJldHVybiBlcnJkZXRhaWwoIkNvdWxk IG5vdCBhY2Nlc3Mgb2Zmc2V0IG9mIG11bHRpeGFjdCAldS4iLCBtdWx0aXhpZCk7Cit9CisK Ky8qCisgKiBDdXN0b20gSU8gZXJybXNnIGZvciBNdWx0aVhhY3RNZW1iZXIuCisgKi8KK3N0 YXRpYyBpbmxpbmUgaW50CitNdWx0aVhhY3RNZW1iZXJJb0Vycm9yRGV0YWlsKGNvbnN0IHZv aWQgKm9wYXF1ZV9kYXRhKQoreworCU11bHRpWGFjdE9mZnNldCBteG9mZiA9ICooY29uc3Qg TXVsdGlYYWN0T2Zmc2V0ICopIG9wYXF1ZV9kYXRhOworCisJcmV0dXJuIGVycmRldGFpbCgi Y291bGQgbm90IGFjY2VzcyBtdWx0aXhhY3QgbWVtYmVyIGF0IG9mZnNldCAlIiBQUkl1NjQg Ii4iLAorCQkJCQkgbXhvZmYpOworfQorCiAvKgogICogRGVjaWRlIHdoaWNoIG9mIHR3byBN dWx0aVhhY3RJZHMgaXMgZWFybGllci4KICAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h Y2Nlc3MvdHJhbnNhbS9zbHJ1LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9zbHJ1 LmMKaW5kZXggNTQ5YzdlM2U2NGIuLjhiYTNlYWVlMDFlIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3MvdHJhbnNhbS9zbHJ1LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3Ry YW5zYW0vc2xydS5jCkBAIC0xODEsNyArMTgxLDggQEAgc3RhdGljIHZvaWQgU2xydUludGVy bmFsV3JpdGVQYWdlKFNscnVDdGwgY3RsLCBpbnQgc2xvdG5vLCBTbHJ1V3JpdGVBbGwgZmRh dGEpOwogc3RhdGljIGJvb2wgU2xydVBoeXNpY2FsUmVhZFBhZ2UoU2xydUN0bCBjdGwsIGlu dDY0IHBhZ2VubywgaW50IHNsb3Rubyk7CiBzdGF0aWMgYm9vbCBTbHJ1UGh5c2ljYWxXcml0 ZVBhZ2UoU2xydUN0bCBjdGwsIGludDY0IHBhZ2VubywgaW50IHNsb3RubywKIAkJCQkJCQkJ ICBTbHJ1V3JpdGVBbGwgZmRhdGEpOwotc3RhdGljIHZvaWQgU2xydVJlcG9ydElPRXJyb3Io U2xydUN0bCBjdGwsIGludDY0IHBhZ2VubywgVHJhbnNhY3Rpb25JZCB4aWQpOworc3RhdGlj IHZvaWQgU2xydVJlcG9ydElPRXJyb3IoU2xydUN0bCBjdGwsIGludDY0IHBhZ2VubywKKwkJ CQkJCQkgIGNvbnN0IHZvaWQgKm9wYXF1ZV9kYXRhKTsKIHN0YXRpYyBpbnQJU2xydVNlbGVj dExSVVBhZ2UoU2xydUN0bCBjdGwsIGludDY0IHBhZ2Vubyk7CiAKIHN0YXRpYyBib29sIFNs cnVTY2FuRGlyQ2JEZWxldGVDdXRvZmYoU2xydUN0bCBjdGwsIGNoYXIgKmZpbGVuYW1lLApA QCAtMjU3LDYgKzI1OCw5IEBAIFNpbXBsZUxydUluaXQoU2xydUN0bCBjdGwsIGNvbnN0IGNo YXIgKm5hbWUsIGludCBuc2xvdHMsIGludCBubHNucywKIAlib29sCQlmb3VuZDsKIAlpbnQJ CQluYmFua3MgPSBuc2xvdHMgLyBTTFJVX0JBTktfU0laRTsKIAorCS8qIE1ha2Ugc3VyZSBj YWxsYmFja3MgYXJlIHNldCB1cCAqLworCUFzc2VydChjdGwtPlBhZ2VQcmVjZWRlcyAhPSBO VUxMKTsKKwogCUFzc2VydChuc2xvdHMgPD0gU0xSVV9NQVhfQUxMT1dFRF9CVUZGRVJTKTsK IAogCXNoYXJlZCA9IChTbHJ1U2hhcmVkKSBTaG1lbUluaXRTdHJ1Y3QobmFtZSwKQEAgLTUx NSw4ICs1MTksOSBAQCBTaW1wbGVMcnVXYWl0SU8oU2xydUN0bCBjdGwsIGludCBzbG90bm8p CiAgKiB0aGF0IG1vZGlmaWNhdGlvbiBvZiB0aGUgcGFnZSBpcyBzYWZlLiAgSWYgd3JpdGVf b2sgaXMgZmFsc2UgdGhlbiB3ZQogICogd2lsbCBub3QgcmV0dXJuIHRoZSBwYWdlIHVudGls IGl0IGlzIG5vdCB1bmRlcmdvaW5nIGFjdGl2ZSBJL08uCiAgKgotICogVGhlIHBhc3NlZC1p biB4aWQgaXMgdXNlZCBvbmx5IGZvciBlcnJvciByZXBvcnRpbmcsIGFuZCBtYXkgYmUKLSAq IEludmFsaWRUcmFuc2FjdGlvbklkIGlmIG5vIHNwZWNpZmljIHhpZCBpcyBhc3NvY2lhdGVk IHdpdGggdGhlIGFjdGlvbi4KKyAqIE9uIGVycm9yLCB0aGUgcGFzc2VkLWluICdvcGFxdWVf ZGF0YScgaXMgcGFzc2VkIHRvIHRoZQorICogJ2Vycm1zZ19mb3JfaW9fZXJyb3InIGNhbGxi YWNrLCB0byBwcm92aWRlIGRldGFpbHMgb24gdGhlIG9wZXJhdGlvbiB0aGF0CisgKiBmYWls ZWQuICBJdCBpcyBvbmx5IHVzZWQgZm9yIGVycm9yIHJlcG9ydGluZy4KICAqCiAgKiBSZXR1 cm4gdmFsdWUgaXMgdGhlIHNoYXJlZC1idWZmZXIgc2xvdCBudW1iZXIgbm93IGhvbGRpbmcg dGhlIHBhZ2UuCiAgKiBUaGUgYnVmZmVyJ3MgTFJVIGFjY2VzcyBpbmZvIGlzIHVwZGF0ZWQu CkBAIC01MjUsNyArNTMwLDcgQEAgU2ltcGxlTHJ1V2FpdElPKFNscnVDdGwgY3RsLCBpbnQg c2xvdG5vKQogICovCiBpbnQKIFNpbXBsZUxydVJlYWRQYWdlKFNscnVDdGwgY3RsLCBpbnQ2 NCBwYWdlbm8sIGJvb2wgd3JpdGVfb2ssCi0JCQkJICBUcmFuc2FjdGlvbklkIHhpZCkKKwkJ CQkgIGNvbnN0IHZvaWQgKm9wYXF1ZV9kYXRhKQogewogCVNscnVTaGFyZWQJc2hhcmVkID0g Y3RsLT5zaGFyZWQ7CiAJTFdMb2NrCSAgICpiYW5rbG9jayA9IFNpbXBsZUxydUdldEJhbmtM b2NrKGN0bCwgcGFnZW5vKTsKQEAgLTYwMSw3ICs2MDYsNyBAQCBTaW1wbGVMcnVSZWFkUGFn ZShTbHJ1Q3RsIGN0bCwgaW50NjQgcGFnZW5vLCBib29sIHdyaXRlX29rLAogCiAJCS8qIE5v dyBpdCdzIG9rYXkgdG8gZXJlcG9ydCBpZiB3ZSBmYWlsZWQgKi8KIAkJaWYgKCFvaykKLQkJ CVNscnVSZXBvcnRJT0Vycm9yKGN0bCwgcGFnZW5vLCB4aWQpOworCQkJU2xydVJlcG9ydElP RXJyb3IoY3RsLCBwYWdlbm8sIG9wYXF1ZV9kYXRhKTsKIAogCQlTbHJ1UmVjZW50bHlVc2Vk KHNoYXJlZCwgc2xvdG5vKTsKIApAQCAtNjE3LDggKzYyMiw5IEBAIFNpbXBsZUxydVJlYWRQ YWdlKFNscnVDdGwgY3RsLCBpbnQ2NCBwYWdlbm8sIGJvb2wgd3JpdGVfb2ssCiAgKiBUaGUg cGFnZSBudW1iZXIgbXVzdCBjb3JyZXNwb25kIHRvIGFuIGFscmVhZHktaW5pdGlhbGl6ZWQg cGFnZS4KICAqIFRoZSBjYWxsZXIgbXVzdCBpbnRlbmQgb25seSByZWFkLW9ubHkgYWNjZXNz IHRvIHRoZSBwYWdlLgogICoKLSAqIFRoZSBwYXNzZWQtaW4geGlkIGlzIHVzZWQgb25seSBm b3IgZXJyb3IgcmVwb3J0aW5nLCBhbmQgbWF5IGJlCi0gKiBJbnZhbGlkVHJhbnNhY3Rpb25J ZCBpZiBubyBzcGVjaWZpYyB4aWQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBhY3Rpb24uCisg KiBPbiBlcnJvciwgdGhlIHBhc3NlZC1pbiAnb3BhcXVlX2RhdGEnIGlzIHBhc3NlZCB0byB0 aGUKKyAqICdlcnJtc2dfZm9yX2lvX2Vycm9yJyBjYWxsYmFjaywgdG8gcHJvdmlkZSBkZXRh aWxzIG9uIHRoZSBvcGVyYXRpb24gdGhhdAorICogZmFpbGVkLiAgSXQgaXMgb25seSB1c2Vk IGZvciBlcnJvciByZXBvcnRpbmcuCiAgKgogICogUmV0dXJuIHZhbHVlIGlzIHRoZSBzaGFy ZWQtYnVmZmVyIHNsb3QgbnVtYmVyIG5vdyBob2xkaW5nIHRoZSBwYWdlLgogICogVGhlIGJ1 ZmZlcidzIExSVSBhY2Nlc3MgaW5mbyBpcyB1cGRhdGVkLgpAQCAtNjI3LDcgKzYzMyw3IEBA IFNpbXBsZUxydVJlYWRQYWdlKFNscnVDdGwgY3RsLCBpbnQ2NCBwYWdlbm8sIGJvb2wgd3Jp dGVfb2ssCiAgKiBJdCBpcyB1bnNwZWNpZmllZCB3aGV0aGVyIHRoZSBsb2NrIHdpbGwgYmUg c2hhcmVkIG9yIGV4Y2x1c2l2ZS4KICAqLwogaW50Ci1TaW1wbGVMcnVSZWFkUGFnZV9SZWFk T25seShTbHJ1Q3RsIGN0bCwgaW50NjQgcGFnZW5vLCBUcmFuc2FjdGlvbklkIHhpZCkKK1Np bXBsZUxydVJlYWRQYWdlX1JlYWRPbmx5KFNscnVDdGwgY3RsLCBpbnQ2NCBwYWdlbm8sIGNv bnN0IHZvaWQgKm9wYXF1ZV9kYXRhKQogewogCVNscnVTaGFyZWQJc2hhcmVkID0gY3RsLT5z aGFyZWQ7CiAJTFdMb2NrCSAgICpiYW5rbG9jayA9IFNpbXBsZUxydUdldEJhbmtMb2NrKGN0 bCwgcGFnZW5vKTsKQEAgLTY1OSw3ICs2NjUsNyBAQCBTaW1wbGVMcnVSZWFkUGFnZV9SZWFk T25seShTbHJ1Q3RsIGN0bCwgaW50NjQgcGFnZW5vLCBUcmFuc2FjdGlvbklkIHhpZCkKIAlM V0xvY2tSZWxlYXNlKGJhbmtsb2NrKTsKIAlMV0xvY2tBY3F1aXJlKGJhbmtsb2NrLCBMV19F WENMVVNJVkUpOwogCi0JcmV0dXJuIFNpbXBsZUxydVJlYWRQYWdlKGN0bCwgcGFnZW5vLCB0 cnVlLCB4aWQpOworCXJldHVybiBTaW1wbGVMcnVSZWFkUGFnZShjdGwsIHBhZ2VubywgdHJ1 ZSwgb3BhcXVlX2RhdGEpOwogfQogCiAvKgpAQCAtNjgyLDYgKzY4OCw3IEBAIFNscnVJbnRl cm5hbFdyaXRlUGFnZShTbHJ1Q3RsIGN0bCwgaW50IHNsb3RubywgU2xydVdyaXRlQWxsIGZk YXRhKQogCWJvb2wJCW9rOwogCiAJQXNzZXJ0KHNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5v XSAhPSBTTFJVX1BBR0VfRU1QVFkpOworCiAJQXNzZXJ0KExXTG9ja0hlbGRCeU1lSW5Nb2Rl KFNpbXBsZUxydUdldEJhbmtMb2NrKGN0bCwgcGFnZW5vKSwgTFdfRVhDTFVTSVZFKSk7CiAK IAkvKiBJZiBhIHdyaXRlIGlzIGluIHByb2dyZXNzLCB3YWl0IGZvciBpdCB0byBmaW5pc2gg Ki8KQEAgLTczOSw3ICs3NDYsNyBAQCBTbHJ1SW50ZXJuYWxXcml0ZVBhZ2UoU2xydUN0bCBj dGwsIGludCBzbG90bm8sIFNscnVXcml0ZUFsbCBmZGF0YSkKIAogCS8qIE5vdyBpdCdzIG9r YXkgdG8gZXJlcG9ydCBpZiB3ZSBmYWlsZWQgKi8KIAlpZiAoIW9rKQotCQlTbHJ1UmVwb3J0 SU9FcnJvcihjdGwsIHBhZ2VubywgSW52YWxpZFRyYW5zYWN0aW9uSWQpOworCQlTbHJ1UmVw b3J0SU9FcnJvcihjdGwsIHBhZ2VubywgTlVMTCk7CiAKIAkvKiBJZiBwYXJ0IG9mIGEgY2hl Y2twb2ludCwgY291bnQgdGhpcyBhcyBhIFNMUlUgYnVmZmVyIHdyaXR0ZW4uICovCiAJaWYg KGZkYXRhKQpAQCAtNzkzLDE0ICs4MDAsMTQgQEAgU2ltcGxlTHJ1RG9lc1BoeXNpY2FsUGFn ZUV4aXN0KFNscnVDdGwgY3RsLCBpbnQ2NCBwYWdlbm8pCiAJCS8qIHJlcG9ydCBlcnJvciBu b3JtYWxseSAqLwogCQlzbHJ1X2VycmNhdXNlID0gU0xSVV9PUEVOX0ZBSUxFRDsKIAkJc2xy dV9lcnJubyA9IGVycm5vOwotCQlTbHJ1UmVwb3J0SU9FcnJvcihjdGwsIHBhZ2VubywgMCk7 CisJCVNscnVSZXBvcnRJT0Vycm9yKGN0bCwgcGFnZW5vLCBOVUxMKTsKIAl9CiAKIAlpZiAo KGVuZHBvcyA9IGxzZWVrKGZkLCAwLCBTRUVLX0VORCkpIDwgMCkKIAl7CiAJCXNscnVfZXJy Y2F1c2UgPSBTTFJVX1NFRUtfRkFJTEVEOwogCQlzbHJ1X2Vycm5vID0gZXJybm87Ci0JCVNs cnVSZXBvcnRJT0Vycm9yKGN0bCwgcGFnZW5vLCAwKTsKKwkJU2xydVJlcG9ydElPRXJyb3Io Y3RsLCBwYWdlbm8sIE5VTEwpOwogCX0KIAogCXJlc3VsdCA9IGVuZHBvcyA+PSAob2ZmX3Qp IChvZmZzZXQgKyBCTENLU1opOwpAQCAtMTA3MCw3ICsxMDc3LDcgQEAgU2xydVBoeXNpY2Fs V3JpdGVQYWdlKFNscnVDdGwgY3RsLCBpbnQ2NCBwYWdlbm8sIGludCBzbG90bm8sIFNscnVX cml0ZUFsbCBmZGF0YSkKICAqIFNscnVQaHlzaWNhbFdyaXRlUGFnZS4gIENhbGwgdGhpcyBh ZnRlciBjbGVhbmluZyB1cCBzaGFyZWQtbWVtb3J5IHN0YXRlLgogICovCiBzdGF0aWMgdm9p ZAotU2xydVJlcG9ydElPRXJyb3IoU2xydUN0bCBjdGwsIGludDY0IHBhZ2VubywgVHJhbnNh Y3Rpb25JZCB4aWQpCitTbHJ1UmVwb3J0SU9FcnJvcihTbHJ1Q3RsIGN0bCwgaW50NjQgcGFn ZW5vLCBjb25zdCB2b2lkICpvcGFxdWVfZGF0YSkKIHsKIAlpbnQ2NAkJc2Vnbm8gPSBwYWdl bm8gLyBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UOwogCWludAkJCXJwYWdlbm8gPSBwYWdlbm8g JSBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UOwpAQCAtMTA4NCw1NCArMTA5MSw1NSBAQCBTbHJ1 UmVwb3J0SU9FcnJvcihTbHJ1Q3RsIGN0bCwgaW50NjQgcGFnZW5vLCBUcmFuc2FjdGlvbklk IHhpZCkKIAkJY2FzZSBTTFJVX09QRU5fRkFJTEVEOgogCQkJZXJlcG9ydChFUlJPUiwKIAkJ CQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCi0JCQkJCSBlcnJtc2coImNvdWxkIG5v dCBhY2Nlc3Mgc3RhdHVzIG9mIHRyYW5zYWN0aW9uICV1IiwgeGlkKSwKLQkJCQkJIGVycmRl dGFpbCgiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCI6ICVtLiIsIHBhdGgpKSk7CisJCQkJ CSBlcnJtc2coImNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiOiAlbSIsIHBhdGgpLAorCQkJ CQkgb3BhcXVlX2RhdGEgPyBjdGwtPmVycmRldGFpbF9mb3JfaW9fZXJyb3Iob3BhcXVlX2Rh dGEpIDogMCkpOwogCQkJYnJlYWs7CiAJCWNhc2UgU0xSVV9TRUVLX0ZBSUxFRDoKIAkJCWVy ZXBvcnQoRVJST1IsCiAJCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAotCQkJCQkg ZXJybXNnKCJjb3VsZCBub3QgYWNjZXNzIHN0YXR1cyBvZiB0cmFuc2FjdGlvbiAldSIsIHhp ZCksCi0JCQkJCSBlcnJkZXRhaWwoIkNvdWxkIG5vdCBzZWVrIGluIGZpbGUgXCIlc1wiIHRv IG9mZnNldCAlZDogJW0uIiwKLQkJCQkJCQkgICBwYXRoLCBvZmZzZXQpKSk7CisJCQkJCSBl cnJtc2coImNvdWxkIG5vdCBzZWVrIGluIGZpbGUgXCIlc1wiIHRvIG9mZnNldCAlZDogJW0i LAorCQkJCQkJCXBhdGgsIG9mZnNldCksCisJCQkJCSBvcGFxdWVfZGF0YSA/IGN0bC0+ZXJy ZGV0YWlsX2Zvcl9pb19lcnJvcihvcGFxdWVfZGF0YSkgOiAwKSk7CiAJCQlicmVhazsKIAkJ Y2FzZSBTTFJVX1JFQURfRkFJTEVEOgogCQkJaWYgKGVycm5vKQogCQkJCWVyZXBvcnQoRVJS T1IsCiAJCQkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKLQkJCQkJCSBlcnJtc2co ImNvdWxkIG5vdCBhY2Nlc3Mgc3RhdHVzIG9mIHRyYW5zYWN0aW9uICV1IiwgeGlkKSwKLQkJ CQkJCSBlcnJkZXRhaWwoIkNvdWxkIG5vdCByZWFkIGZyb20gZmlsZSBcIiVzXCIgYXQgb2Zm c2V0ICVkOiAlbS4iLAotCQkJCQkJCQkgICBwYXRoLCBvZmZzZXQpKSk7CisJCQkJCQkgZXJy bXNnKCJjb3VsZCBub3QgcmVhZCBmcm9tIGZpbGUgXCIlc1wiIGF0IG9mZnNldCAlZDogJW0i LAorCQkJCQkJCQlwYXRoLCBvZmZzZXQpLAorCQkJCQkJIG9wYXF1ZV9kYXRhID8gY3RsLT5l cnJkZXRhaWxfZm9yX2lvX2Vycm9yKG9wYXF1ZV9kYXRhKSA6IDApKTsKIAkJCWVsc2UKIAkJ CQllcmVwb3J0KEVSUk9SLAotCQkJCQkJKGVycm1zZygiY291bGQgbm90IGFjY2VzcyBzdGF0 dXMgb2YgdHJhbnNhY3Rpb24gJXUiLCB4aWQpLAotCQkJCQkJIGVycmRldGFpbCgiQ291bGQg bm90IHJlYWQgZnJvbSBmaWxlIFwiJXNcIiBhdCBvZmZzZXQgJWQ6IHJlYWQgdG9vIGZldyBi eXRlcy4iLCBwYXRoLCBvZmZzZXQpKSk7CisJCQkJCQkoZXJybXNnKCJjb3VsZCBub3QgcmVh ZCBmcm9tIGZpbGUgXCIlc1wiIGF0IG9mZnNldCAlZDogcmVhZCB0b28gZmV3IGJ5dGVzIiwK KwkJCQkJCQkJcGF0aCwgb2Zmc2V0KSwKKwkJCQkJCSBvcGFxdWVfZGF0YSA/IGN0bC0+ZXJy ZGV0YWlsX2Zvcl9pb19lcnJvcihvcGFxdWVfZGF0YSkgOiAwKSk7CiAJCQlicmVhazsKIAkJ Y2FzZSBTTFJVX1dSSVRFX0ZBSUxFRDoKIAkJCWlmIChlcnJubykKIAkJCQllcmVwb3J0KEVS Uk9SLAogCQkJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCi0JCQkJCQkgZXJybXNn KCJjb3VsZCBub3QgYWNjZXNzIHN0YXR1cyBvZiB0cmFuc2FjdGlvbiAldSIsIHhpZCksCi0J CQkJCQkgZXJyZGV0YWlsKCJDb3VsZCBub3Qgd3JpdGUgdG8gZmlsZSBcIiVzXCIgYXQgb2Zm c2V0ICVkOiAlbS4iLAotCQkJCQkJCQkgICBwYXRoLCBvZmZzZXQpKSk7CisJCQkJCQkgZXJy bXNnKCJDb3VsZCBub3Qgd3JpdGUgdG8gZmlsZSBcIiVzXCIgYXQgb2Zmc2V0ICVkOiAlbSIs CisJCQkJCQkJCXBhdGgsIG9mZnNldCksCisJCQkJCQkgb3BhcXVlX2RhdGEgPyBjdGwtPmVy cmRldGFpbF9mb3JfaW9fZXJyb3Iob3BhcXVlX2RhdGEpIDogMCkpOwogCQkJZWxzZQogCQkJ CWVyZXBvcnQoRVJST1IsCi0JCQkJCQkoZXJybXNnKCJjb3VsZCBub3QgYWNjZXNzIHN0YXR1 cyBvZiB0cmFuc2FjdGlvbiAldSIsIHhpZCksCi0JCQkJCQkgZXJyZGV0YWlsKCJDb3VsZCBu b3Qgd3JpdGUgdG8gZmlsZSBcIiVzXCIgYXQgb2Zmc2V0ICVkOiB3cm90ZSB0b28gZmV3IGJ5 dGVzLiIsCi0JCQkJCQkJCSAgIHBhdGgsIG9mZnNldCkpKTsKKwkJCQkJCShlcnJtc2coIkNv dWxkIG5vdCB3cml0ZSB0byBmaWxlIFwiJXNcIiBhdCBvZmZzZXQgJWQ6IHdyb3RlIHRvbyBm ZXcgYnl0ZXMuIiwKKwkJCQkJCQkJcGF0aCwgb2Zmc2V0KSwKKwkJCQkJCSBvcGFxdWVfZGF0 YSA/IGN0bC0+ZXJyZGV0YWlsX2Zvcl9pb19lcnJvcihvcGFxdWVfZGF0YSkgOiAwKSk7CiAJ CQlicmVhazsKIAkJY2FzZSBTTFJVX0ZTWU5DX0ZBSUxFRDoKIAkJCWVyZXBvcnQoZGF0YV9z eW5jX2VsZXZlbChFUlJPUiksCiAJCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAot CQkJCQkgZXJybXNnKCJjb3VsZCBub3QgYWNjZXNzIHN0YXR1cyBvZiB0cmFuc2FjdGlvbiAl dSIsIHhpZCksCi0JCQkJCSBlcnJkZXRhaWwoIkNvdWxkIG5vdCBmc3luYyBmaWxlIFwiJXNc IjogJW0uIiwKLQkJCQkJCQkgICBwYXRoKSkpOworCQkJCQkgZXJybXNnKCJjb3VsZCBub3Qg ZnN5bmMgZmlsZSBcIiVzXCI6ICVtIiwKKwkJCQkJCQkgICBwYXRoKSwKKwkJCQkJIG9wYXF1 ZV9kYXRhID8gY3RsLT5lcnJkZXRhaWxfZm9yX2lvX2Vycm9yKG9wYXF1ZV9kYXRhKSA6IDAp KTsKIAkJCWJyZWFrOwogCQljYXNlIFNMUlVfQ0xPU0VfRkFJTEVEOgogCQkJZXJlcG9ydChF UlJPUiwKIAkJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCi0JCQkJCSBlcnJtc2co ImNvdWxkIG5vdCBhY2Nlc3Mgc3RhdHVzIG9mIHRyYW5zYWN0aW9uICV1IiwgeGlkKSwKLQkJ CQkJIGVycmRldGFpbCgiQ291bGQgbm90IGNsb3NlIGZpbGUgXCIlc1wiOiAlbS4iLAotCQkJ CQkJCSAgIHBhdGgpKSk7CisJCQkJCSBlcnJtc2coImNvdWxkIG5vdCBjbG9zZSBmaWxlIFwi JXNcIjogJW0iLAorCQkJCQkJCSAgIHBhdGgpLAorCQkJCQkgb3BhcXVlX2RhdGEgPyBjdGwt PmVycmRldGFpbF9mb3JfaW9fZXJyb3Iob3BhcXVlX2RhdGEpIDogMCkpOwogCQkJYnJlYWs7 CiAJCWRlZmF1bHQ6CiAJCQkvKiBjYW4ndCBnZXQgaGVyZSwgd2UgdHJ1c3QgKi8KQEAgLTE0 MTEsNyArMTQxOSw3IEBAIFNpbXBsZUxydVdyaXRlQWxsKFNscnVDdGwgY3RsLCBib29sIGFs bG93X3JlZGlydGllZCkKIAkJfQogCX0KIAlpZiAoIW9rKQotCQlTbHJ1UmVwb3J0SU9FcnJv cihjdGwsIHBhZ2VubywgSW52YWxpZFRyYW5zYWN0aW9uSWQpOworCQlTbHJ1UmVwb3J0SU9F cnJvcihjdGwsIHBhZ2VubywgTlVMTCk7CiAKIAkvKiBFbnN1cmUgdGhhdCBkaXJlY3Rvcnkg ZW50cmllcyBmb3IgbmV3IGZpbGVzIGFyZSBvbiBkaXNrLiAqLwogCWlmIChjdGwtPnN5bmNf aGFuZGxlciAhPSBTWU5DX0hBTkRMRVJfTk9ORSkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL3N1YnRyYW5zLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNh bS9zdWJ0cmFucy5jCmluZGV4IGMwOTg3ZjQzZjExLi44NmM1YjVjMDViZCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vc3VidHJhbnMuYworKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvdHJhbnNhbS9zdWJ0cmFucy5jCkBAIC03NSw2ICs3NSw3IEBAIHN0YXRp YyBTbHJ1Q3RsRGF0YSBTdWJUcmFuc0N0bERhdGE7CiAKIAogc3RhdGljIGJvb2wgU3ViVHJh bnNQYWdlUHJlY2VkZXMoaW50NjQgcGFnZTEsIGludDY0IHBhZ2UyKTsKK3N0YXRpYyBpbnQg c3VidHJhbnNfZXJyZGV0YWlsX2Zvcl9pb19lcnJvcihjb25zdCB2b2lkICpvcGFxdWVfZGF0 YSk7CiAKIAogLyoKQEAgLTk1LDcgKzk2LDcgQEAgU3ViVHJhbnNTZXRQYXJlbnQoVHJhbnNh Y3Rpb25JZCB4aWQsIFRyYW5zYWN0aW9uSWQgcGFyZW50KQogCWxvY2sgPSBTaW1wbGVMcnVH ZXRCYW5rTG9jayhTdWJUcmFuc0N0bCwgcGFnZW5vKTsKIAlMV0xvY2tBY3F1aXJlKGxvY2ss IExXX0VYQ0xVU0lWRSk7CiAKLQlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZShTdWJUcmFu c0N0bCwgcGFnZW5vLCB0cnVlLCB4aWQpOworCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdl KFN1YlRyYW5zQ3RsLCBwYWdlbm8sIHRydWUsICZ4aWQpOwogCXB0ciA9IChUcmFuc2FjdGlv bklkICopIFN1YlRyYW5zQ3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub107CiAJcHRy ICs9IGVudHJ5bm87CiAKQEAgLTEzNSw3ICsxMzYsNyBAQCBTdWJUcmFuc0dldFBhcmVudChU cmFuc2FjdGlvbklkIHhpZCkKIAogCS8qIGxvY2sgaXMgYWNxdWlyZWQgYnkgU2ltcGxlTHJ1 UmVhZFBhZ2VfUmVhZE9ubHkgKi8KIAotCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdlX1Jl YWRPbmx5KFN1YlRyYW5zQ3RsLCBwYWdlbm8sIHhpZCk7CisJc2xvdG5vID0gU2ltcGxlTHJ1 UmVhZFBhZ2VfUmVhZE9ubHkoU3ViVHJhbnNDdGwsIHBhZ2VubywgJnhpZCk7CiAJcHRyID0g KFRyYW5zYWN0aW9uSWQgKikgU3ViVHJhbnNDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xv dG5vXTsKIAlwdHIgKz0gZW50cnlubzsKIApAQCAtMjQwLDYgKzI0MSw3IEBAIFNVQlRSQU5T U2htZW1Jbml0KHZvaWQpCiAJQXNzZXJ0KHN1YnRyYW5zYWN0aW9uX2J1ZmZlcnMgIT0gMCk7 CiAKIAlTdWJUcmFuc0N0bC0+UGFnZVByZWNlZGVzID0gU3ViVHJhbnNQYWdlUHJlY2VkZXM7 CisJU3ViVHJhbnNDdGwtPmVycmRldGFpbF9mb3JfaW9fZXJyb3IgPSBzdWJ0cmFuc19lcnJk ZXRhaWxfZm9yX2lvX2Vycm9yOwogCVNpbXBsZUxydUluaXQoU3ViVHJhbnNDdGwsICJzdWJ0 cmFuc2FjdGlvbiIsIFNVQlRSQU5TU2htZW1CdWZmZXJzKCksIDAsCiAJCQkJICAicGdfc3Vi dHJhbnMiLCBMV1RSQU5DSEVfU1VCVFJBTlNfQlVGRkVSLAogCQkJCSAgTFdUUkFOQ0hFX1NV QlRSQU5TX1NMUlUsIFNZTkNfSEFORExFUl9OT05FLCBmYWxzZSk7CkBAIC00MTksMyArNDIx LDExIEBAIFN1YlRyYW5zUGFnZVByZWNlZGVzKGludDY0IHBhZ2UxLCBpbnQ2NCBwYWdlMikK IAlyZXR1cm4gKFRyYW5zYWN0aW9uSWRQcmVjZWRlcyh4aWQxLCB4aWQyKSAmJgogCQkJVHJh bnNhY3Rpb25JZFByZWNlZGVzKHhpZDEsIHhpZDIgKyBTVUJUUkFOU19YQUNUU19QRVJfUEFH RSAtIDEpKTsKIH0KKworc3RhdGljIGludAorc3VidHJhbnNfZXJyZGV0YWlsX2Zvcl9pb19l cnJvcihjb25zdCB2b2lkICpvcGFxdWVfZGF0YSkKK3sKKwlUcmFuc2FjdGlvbklkIHhpZCA9 ICooY29uc3QgVHJhbnNhY3Rpb25JZCAqKSBvcGFxdWVfZGF0YTsKKworCXJldHVybiBlcnJk ZXRhaWwoIkNvdWxkIG5vdCBhY2Nlc3Mgc3VidHJhbnNhY3Rpb24gc3RhdHVzIG9mIHRyYW5z YWN0aW9uICV1LiIsIHhpZCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5k cy9hc3luYy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYwppbmRleCAwYjZkMTE5 ZGFkMC4uMDkzYzkxZWE3ZjYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Fz eW5jLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYwpAQCAtNTcwLDYgKzU3 MCw3IEBAIGJvb2wJCVRyYWNlX25vdGlmeSA9IGZhbHNlOwogaW50CQkJbWF4X25vdGlmeV9x dWV1ZV9wYWdlcyA9IDEwNDg1NzY7CiAKIC8qIGxvY2FsIGZ1bmN0aW9uIHByb3RvdHlwZXMg Ki8KK3N0YXRpYyBpbnQgYXN5bmNRdWV1ZUVycmRldGFpbEZvcklvRXJyb3IoY29uc3Qgdm9p ZCAqb3BhcXVlX2RhdGEpOwogc3RhdGljIGlubGluZSBpbnQ2NCBhc3luY1F1ZXVlUGFnZURp ZmYoaW50NjQgcCwgaW50NjQgcSk7CiBzdGF0aWMgaW5saW5lIGJvb2wgYXN5bmNRdWV1ZVBh Z2VQcmVjZWRlcyhpbnQ2NCBwLCBpbnQ2NCBxKTsKIHN0YXRpYyBpbmxpbmUgdm9pZCBHbG9i YWxDaGFubmVsS2V5SW5pdChHbG9iYWxDaGFubmVsS2V5ICprZXksIE9pZCBkYm9pZCwKQEAg LTYxMCw2ICs2MTEsMTUgQEAgc3RhdGljIHVpbnQzMiBub3RpZmljYXRpb25faGFzaChjb25z dCB2b2lkICprZXksIFNpemUga2V5c2l6ZSk7CiBzdGF0aWMgaW50CW5vdGlmaWNhdGlvbl9t YXRjaChjb25zdCB2b2lkICprZXkxLCBjb25zdCB2b2lkICprZXkyLCBTaXplIGtleXNpemUp Owogc3RhdGljIHZvaWQgQ2xlYXJQZW5kaW5nQWN0aW9uc0FuZE5vdGlmaWVzKHZvaWQpOwog CitzdGF0aWMgaW50Cithc3luY1F1ZXVlRXJyZGV0YWlsRm9ySW9FcnJvcihjb25zdCB2b2lk ICpvcGFxdWVfZGF0YSkKK3sKKwljb25zdCBRdWV1ZVBvc2l0aW9uICpwb3NpdGlvbiA9IG9w YXF1ZV9kYXRhOworCisJcmV0dXJuIGVycm1zZygiY291bGQgbm90IGFjY2VzcyBhc3luYyBx dWV1ZSBhdCBwYWdlICUiIFBSSWQ2NCIsIG9mZnNldCAlZCIsCisJCQkJICBwb3NpdGlvbi0+ cGFnZSwgcG9zaXRpb24tPm9mZnNldCk7Cit9CisKIC8qCiAgKiBDb21wdXRlIHRoZSBkaWZm ZXJlbmNlIGJldHdlZW4gdHdvIHF1ZXVlIHBhZ2UgbnVtYmVycy4KICAqIFByZXZpb3VzbHkg dGhpcyBmdW5jdGlvbiBhY2NvdW50ZWQgZm9yIGEgd3JhcGFyb3VuZC4KQEAgLTgzMCw2ICs4 NDAsNyBAQCBBc3luY1NobWVtSW5pdCh2b2lkKQogCSAqIG5hbWVzIGFyZSB1c2VkIGluIG9y ZGVyIHRvIGF2b2lkIHdyYXBhcm91bmQuCiAJICovCiAJTm90aWZ5Q3RsLT5QYWdlUHJlY2Vk ZXMgPSBhc3luY1F1ZXVlUGFnZVByZWNlZGVzOworCU5vdGlmeUN0bC0+ZXJyZGV0YWlsX2Zv cl9pb19lcnJvciA9IGFzeW5jUXVldWVFcnJkZXRhaWxGb3JJb0Vycm9yOwogCVNpbXBsZUxy dUluaXQoTm90aWZ5Q3RsLCAibm90aWZ5Iiwgbm90aWZ5X2J1ZmZlcnMsIDAsCiAJCQkJICAi cGdfbm90aWZ5IiwgTFdUUkFOQ0hFX05PVElGWV9CVUZGRVIsIExXVFJBTkNIRV9OT1RJRllf U0xSVSwKIAkJCQkgIFNZTkNfSEFORExFUl9OT05FLCB0cnVlKTsKQEAgLTIwNjgsOCArMjA3 OSw3IEBAIGFzeW5jUXVldWVBZGRFbnRyaWVzKExpc3RDZWxsICpuZXh0Tm90aWZ5KQogCWlm IChRVUVVRV9QT1NfSVNfWkVSTyhxdWV1ZV9oZWFkKSkKIAkJc2xvdG5vID0gU2ltcGxlTHJ1 WmVyb1BhZ2UoTm90aWZ5Q3RsLCBwYWdlbm8pOwogCWVsc2UKLQkJc2xvdG5vID0gU2ltcGxl THJ1UmVhZFBhZ2UoTm90aWZ5Q3RsLCBwYWdlbm8sIHRydWUsCi0JCQkJCQkJCSAgIEludmFs aWRUcmFuc2FjdGlvbklkKTsKKwkJc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2UoTm90aWZ5 Q3RsLCBwYWdlbm8sIHRydWUsICZxdWV1ZV9oZWFkKTsKIAogCS8qIE5vdGUgd2UgbWFyayB0 aGUgcGFnZSBkaXJ0eSBiZWZvcmUgd3JpdGluZyBpbiBpdCAqLwogCU5vdGlmeUN0bC0+c2hh cmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10gPSB0cnVlOwpAQCAtMjczOSw4ICsyNzQ5LDcgQEAg YXN5bmNRdWV1ZVByb2Nlc3NQYWdlRW50cmllcyhRdWV1ZVBvc2l0aW9uICpjdXJyZW50LAog CWFsaWduYXMoQXN5bmNRdWV1ZUVudHJ5KSBjaGFyIGxvY2FsX2J1ZltRVUVVRV9QQUdFU0la RV07CiAJY2hhcgkgICAqbG9jYWxfYnVmX2VuZCA9IGxvY2FsX2J1ZjsKIAotCXNsb3RubyA9 IFNpbXBsZUxydVJlYWRQYWdlX1JlYWRPbmx5KE5vdGlmeUN0bCwgY3VycGFnZSwKLQkJCQkJ CQkJCQlJbnZhbGlkVHJhbnNhY3Rpb25JZCk7CisJc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBh Z2VfUmVhZE9ubHkoTm90aWZ5Q3RsLCBjdXJwYWdlLCBjdXJyZW50KTsKIAlwYWdlX2J1ZmZl ciA9IE5vdGlmeUN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dOwogCiAJZG8KQEAg LTI5OTgsOCArMzAwNyw3IEBAIEFzeW5jTm90aWZ5RnJlZXplWGlkcyhUcmFuc2FjdGlvbklk IG5ld0Zyb3plblhpZCkKIAogCQkJbG9jayA9IFNpbXBsZUxydUdldEJhbmtMb2NrKE5vdGlm eUN0bCwgcGFnZW5vKTsKIAkJCUxXTG9ja0FjcXVpcmUobG9jaywgTFdfRVhDTFVTSVZFKTsK LQkJCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdlKE5vdGlmeUN0bCwgcGFnZW5vLCB0cnVl LAotCQkJCQkJCQkJICAgSW52YWxpZFRyYW5zYWN0aW9uSWQpOworCQkJc2xvdG5vID0gU2lt cGxlTHJ1UmVhZFBhZ2UoTm90aWZ5Q3RsLCBwYWdlbm8sIHRydWUsICZwb3MpOwogCQkJcGFn ZV9idWZmZXIgPSBOb3RpZnlDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXTsKIAkJ CWN1cnBhZ2UgPSBwYWdlbm87CiAJCX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvbG1nci9wcmVkaWNhdGUuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcmVkaWNh dGUuYwppbmRleCBmZTc1ZWFkMzUwMS4uYTU0OGUwMWY4OTAgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3N0b3JhZ2UvbG1nci9wcmVkaWNhdGUuYworKysgYi9zcmMvYmFja2VuZC9zdG9y YWdlL2xtZ3IvcHJlZGljYXRlLmMKQEAgLTQ0Miw2ICs0NDIsNyBAQCBzdGF0aWMgdm9pZCBS ZWxlYXNlUldDb25mbGljdChSV0NvbmZsaWN0IGNvbmZsaWN0KTsKIHN0YXRpYyB2b2lkIEZs YWdTeGFjdFVuc2FmZShTRVJJQUxJWkFCTEVYQUNUICpzeGFjdCk7CiAKIHN0YXRpYyBib29s IFNlcmlhbFBhZ2VQcmVjZWRlc0xvZ2ljYWxseShpbnQ2NCBwYWdlMSwgaW50NjQgcGFnZTIp Oworc3RhdGljIGludCBzZXJpYWxfZXJyZGV0YWlsX2Zvcl9pb19lcnJvcihjb25zdCB2b2lk ICpvcGFxdWVfZGF0YSk7CiBzdGF0aWMgdm9pZCBTZXJpYWxJbml0KHZvaWQpOwogc3RhdGlj IHZvaWQgU2VyaWFsQWRkKFRyYW5zYWN0aW9uSWQgeGlkLCBTZXJDb21taXRTZXFObyBtaW5D b25mbGljdENvbW1pdFNlcU5vKTsKIHN0YXRpYyBTZXJDb21taXRTZXFObyBTZXJpYWxHZXRN aW5Db25mbGljdENvbW1pdFNlcU5vKFRyYW5zYWN0aW9uSWQgeGlkKTsKQEAgLTc0Miw2ICs3 NDMsMTQgQEAgU2VyaWFsUGFnZVByZWNlZGVzTG9naWNhbGx5KGludDY0IHBhZ2UxLCBpbnQ2 NCBwYWdlMikKIAkJCVRyYW5zYWN0aW9uSWRQcmVjZWRlcyh4aWQxLCB4aWQyICsgU0VSSUFM X0VOVFJJRVNQRVJQQUdFIC0gMSkpOwogfQogCitzdGF0aWMgaW50CitzZXJpYWxfZXJyZGV0 YWlsX2Zvcl9pb19lcnJvcihjb25zdCB2b2lkICpvcGFxdWVfZGF0YSkKK3sKKwlUcmFuc2Fj dGlvbklkIHhpZCA9ICooY29uc3QgVHJhbnNhY3Rpb25JZCAqKSBvcGFxdWVfZGF0YTsKKwor CXJldHVybiBlcnJkZXRhaWwoIkNvdWxkIG5vdCBhY2Nlc3Mgc2VyaWFsaXphYmxlIENTTiBv ZiB0cmFuc2FjdGlvbiAldS4iLCB4aWQpOworfQorCiAjaWZkZWYgVVNFX0FTU0VSVF9DSEVD S0lORwogc3RhdGljIHZvaWQKIFNlcmlhbFBhZ2VQcmVjZWRlc0xvZ2ljYWxseVVuaXRUZXN0 cyh2b2lkKQpAQCAtODExLDYgKzgyMCw3IEBAIFNlcmlhbEluaXQodm9pZCkKIAkgKiBTZXQg dXAgU0xSVSBtYW5hZ2VtZW50IG9mIHRoZSBwZ19zZXJpYWwgZGF0YS4KIAkgKi8KIAlTZXJp YWxTbHJ1Q3RsLT5QYWdlUHJlY2VkZXMgPSBTZXJpYWxQYWdlUHJlY2VkZXNMb2dpY2FsbHk7 CisJU2VyaWFsU2xydUN0bC0+ZXJyZGV0YWlsX2Zvcl9pb19lcnJvciA9IHNlcmlhbF9lcnJk ZXRhaWxfZm9yX2lvX2Vycm9yOwogCVNpbXBsZUxydUluaXQoU2VyaWFsU2xydUN0bCwgInNl cmlhbGl6YWJsZSIsCiAJCQkJICBzZXJpYWxpemFibGVfYnVmZmVycywgMCwgInBnX3Nlcmlh bCIsCiAJCQkJICBMV1RSQU5DSEVfU0VSSUFMX0JVRkZFUiwgTFdUUkFOQ0hFX1NFUklBTF9T TFJVLApAQCAtOTMwLDcgKzk0MCw3IEBAIFNlcmlhbEFkZChUcmFuc2FjdGlvbklkIHhpZCwg U2VyQ29tbWl0U2VxTm8gbWluQ29uZmxpY3RDb21taXRTZXFObykKIAllbHNlCiAJewogCQlM V0xvY2tBY3F1aXJlKGxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0JCXNsb3RubyA9IFNpbXBsZUxy dVJlYWRQYWdlKFNlcmlhbFNscnVDdGwsIHRhcmdldFBhZ2UsIHRydWUsIHhpZCk7CisJCXNs b3RubyA9IFNpbXBsZUxydVJlYWRQYWdlKFNlcmlhbFNscnVDdGwsIHRhcmdldFBhZ2UsIHRy dWUsICZ4aWQpOwogCX0KIAogCVNlcmlhbFZhbHVlKHNsb3RubywgeGlkKSA9IG1pbkNvbmZs aWN0Q29tbWl0U2VxTm87CkBAIC05NzQsNyArOTg0LDcgQEAgU2VyaWFsR2V0TWluQ29uZmxp Y3RDb21taXRTZXFObyhUcmFuc2FjdGlvbklkIHhpZCkKIAkgKiBidXQgd2lsbCByZXR1cm4g d2l0aCB0aGF0IGxvY2sgaGVsZCwgd2hpY2ggbXVzdCB0aGVuIGJlIHJlbGVhc2VkLgogCSAq LwogCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdlX1JlYWRPbmx5KFNlcmlhbFNscnVDdGws Ci0JCQkJCQkJCQkJU2VyaWFsUGFnZSh4aWQpLCB4aWQpOworCQkJCQkJCQkJCVNlcmlhbFBh Z2UoeGlkKSwgJnhpZCk7CiAJdmFsID0gU2VyaWFsVmFsdWUoc2xvdG5vLCB4aWQpOwogCUxX TG9ja1JlbGVhc2UoU2ltcGxlTHJ1R2V0QmFua0xvY2soU2VyaWFsU2xydUN0bCwgU2VyaWFs UGFnZSh4aWQpKSk7CiAJcmV0dXJuIHZhbDsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9zbHJ1LmggYi9zcmMvaW5jbHVkZS9hY2Nlc3Mvc2xydS5oCmluZGV4IDRjYjhmNDc4 ZmNlLi44ZDNmZTU5Mjk5ZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3NscnUu aAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3Mvc2xydS5oCkBAIC0xMyw2ICsxMyw3IEBACiAj aWZuZGVmIFNMUlVfSAogI2RlZmluZSBTTFJVX0gKIAorI2luY2x1ZGUgImFjY2Vzcy90cmFu c2FtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2dkZWZzLmgiCiAjaW5jbHVkZSAic3RvcmFn ZS9sd2xvY2suaCIKICNpbmNsdWRlICJzdG9yYWdlL3N5bmMuaCIKQEAgLTE0MSw2ICsxNDIs MTYgQEAgdHlwZWRlZiBzdHJ1Y3QgU2xydUN0bERhdGEKIAkgKi8KIAlib29sCQkoKlBhZ2VQ cmVjZWRlcykgKGludDY0LCBpbnQ2NCk7CiAKKwkvKgorCSAqIENhbGxiYWNrIHRvIHByb3Zp ZGUgbW9yZSBkZXRhaWxzIG9uIGFuIEkvTyBlcnJvci4gIFRoaXMgaXMgY2FsbGVkIGFzCisJ ICogcGFydCBvZiBlcmVwb3J0KCksIGFuZCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgZXhw ZWN0ZWQgdG8gY2FsbAorCSAqIGVycmRldGFpbCgpIHRvIHByb3ZpZGUgbW9yZSBkZXRhaWxz LgorCSAqCisJICogVGhlIG9wYXF1ZV9kYXRhIGFyZ3VtZW50IGhlcmUgaXMgdGhlIGFyZ3Vt ZW50IHBhc3NlZCB0byB0aGUKKwkgKiBTaW1wbGVMcnVSZWFkUGFnZSgpIGZ1bmN0aW9uLgor CSAqLworCWludAkJCSgqZXJyZGV0YWlsX2Zvcl9pb19lcnJvcikoY29uc3Qgdm9pZCAqb3Bh cXVlX2RhdGEpOworCiAJLyoKIAkgKiBEaXIgaXMgc2V0IGR1cmluZyBTaW1wbGVMcnVJbml0 IGFuZCBkb2VzIG5vdCBjaGFuZ2UgdGhlcmVhZnRlci4gU2luY2UKIAkgKiBpdCdzIGFsd2F5 cyB0aGUgc2FtZSwgaXQgZG9lc24ndCBuZWVkIHRvIGJlIGluIHNoYXJlZCBtZW1vcnkuCkBA IC0xNzQsOSArMTg1LDkgQEAgZXh0ZXJuIHZvaWQgU2ltcGxlTHJ1SW5pdChTbHJ1Q3RsIGN0 bCwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5zbG90cywgaW50IG5sc25zLAogZXh0ZXJuIGlu dAlTaW1wbGVMcnVaZXJvUGFnZShTbHJ1Q3RsIGN0bCwgaW50NjQgcGFnZW5vKTsKIGV4dGVy biB2b2lkIFNpbXBsZUxydVplcm9BbmRXcml0ZVBhZ2UoU2xydUN0bCBjdGwsIGludDY0IHBh Z2Vubyk7CiBleHRlcm4gaW50CVNpbXBsZUxydVJlYWRQYWdlKFNscnVDdGwgY3RsLCBpbnQ2 NCBwYWdlbm8sIGJvb2wgd3JpdGVfb2ssCi0JCQkJCQkJICBUcmFuc2FjdGlvbklkIHhpZCk7 CisJCQkJCQkJICBjb25zdCB2b2lkICpvcGFxdWVfZGF0YSk7CiBleHRlcm4gaW50CVNpbXBs ZUxydVJlYWRQYWdlX1JlYWRPbmx5KFNscnVDdGwgY3RsLCBpbnQ2NCBwYWdlbm8sCi0JCQkJ CQkJCQkgICBUcmFuc2FjdGlvbklkIHhpZCk7CisJCQkJCQkJCQkgICBjb25zdCB2b2lkICpv cGFxdWVfZGF0YSk7CiBleHRlcm4gdm9pZCBTaW1wbGVMcnVXcml0ZVBhZ2UoU2xydUN0bCBj dGwsIGludCBzbG90bm8pOwogZXh0ZXJuIHZvaWQgU2ltcGxlTHJ1V3JpdGVBbGwoU2xydUN0 bCBjdGwsIGJvb2wgYWxsb3dfcmVkaXJ0aWVkKTsKICNpZmRlZiBVU0VfQVNTRVJUX0NIRUNL SU5HCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc2xydS9leHBlY3RlZC90 ZXN0X3NscnUub3V0IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NscnUvZXhwZWN0ZWQvdGVz dF9zbHJ1Lm91dAppbmRleCAxODVjNTZlNWQ2Mi4uN2FlMWIwZDRhOTggMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L21vZHVsZXMvdGVzdF9zbHJ1L2V4cGVjdGVkL3Rlc3Rfc2xydS5vdXQKKysr IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NscnUvZXhwZWN0ZWQvdGVzdF9zbHJ1Lm91dApA QCAtMjMsNiArMjMsMTAgQEAgU0VMRUNUIHRlc3Rfc2xydV9wYWdlX2V4aXN0cygxMjM0NSk7 CiAgdAogKDEgcm93KQogCistLSBUZXN0IHJlYWQgZmFpbHVyZQorU0VMRUNUIHRlc3Rfc2xy dV9wYWdlX3JlYWQoNTQzMjEsIGZhbHNlLCAnMTIzJzo6eGlkKTsKK0VSUk9SOiAgY291bGQg bm90IG9wZW4gZmlsZSAicGdfdGVzdF9zbHJ1LzAwMDAwMDAwMDAwMDZBMSI6IE5vIHN1Y2gg ZmlsZSBvciBkaXJlY3RvcnkKK0RFVEFJTDogIENvdWxkIG5vdCBhY2Nlc3MgdGVzdF9zbHJ1 IGVudHJ5IDEyMy4KIC0tIDQ4IGV4dHJhIHBhZ2VzCiBTRUxFQ1QgY291bnQodGVzdF9zbHJ1 X3BhZ2Vfd3JpdGUoYSwgJ1Rlc3QgU0xSVScpKQogICBGUk9NIGdlbmVyYXRlX3Nlcmllcygx MjM0NiwgMTIzOTMsIDEpIGFzIGE7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rl c3Rfc2xydS9zcWwvdGVzdF9zbHJ1LnNxbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9zbHJ1 L3NxbC90ZXN0X3NscnUuc3FsCmluZGV4IGIxYjM3NjU4MWFiLi5jNjQ1NGM1YmY4MiAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NscnUvc3FsL3Rlc3Rfc2xydS5zcWwK KysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NscnUvc3FsL3Rlc3Rfc2xydS5zcWwKQEAg LTUsNiArNSw5IEBAIFNFTEVDVCB0ZXN0X3NscnVfcGFnZV93cml0ZSgxMjM0NSwgJ1Rlc3Qg U0xSVScpOwogU0VMRUNUIHRlc3Rfc2xydV9wYWdlX3JlYWQoMTIzNDUpOwogU0VMRUNUIHRl c3Rfc2xydV9wYWdlX2V4aXN0cygxMjM0NSk7CiAKKy0tIFRlc3QgcmVhZCBmYWlsdXJlCitT RUxFQ1QgdGVzdF9zbHJ1X3BhZ2VfcmVhZCg1NDMyMSwgZmFsc2UsICcxMjMnOjp4aWQpOwor CiAtLSA0OCBleHRyYSBwYWdlcwogU0VMRUNUIGNvdW50KHRlc3Rfc2xydV9wYWdlX3dyaXRl KGEsICdUZXN0IFNMUlUnKSkKICAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMTIzNDYsIDEyMzkz LCAxKSBhcyBhOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NscnUvdGVz dF9zbHJ1LS0xLjAuc3FsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NscnUvdGVzdF9zbHJ1 LS0xLjAuc3FsCmluZGV4IGFiZWNiNWUyMTgzLi4yMTQ4ZTcyMDRlYyAxMDA2NDQKLS0tIGEv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NscnUvdGVzdF9zbHJ1LS0xLjAuc3FsCisrKyBiL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9zbHJ1L3Rlc3Rfc2xydS0tMS4wLnNxbApAQCAtNyw3ICs3 LDcgQEAgQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gdGVzdF9zbHJ1X3BhZ2Vfd3JpdGVh bGwoKSBSRVRVUk5TIFZPSUQKICAgQVMgJ01PRFVMRV9QQVRITkFNRScsICd0ZXN0X3NscnVf cGFnZV93cml0ZWFsbCcgTEFOR1VBR0UgQzsKIENSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9O IHRlc3Rfc2xydV9wYWdlX3N5bmMoYmlnaW50KSBSRVRVUk5TIFZPSUQKICAgQVMgJ01PRFVM RV9QQVRITkFNRScsICd0ZXN0X3NscnVfcGFnZV9zeW5jJyBMQU5HVUFHRSBDOwotQ1JFQVRF IE9SIFJFUExBQ0UgRlVOQ1RJT04gdGVzdF9zbHJ1X3BhZ2VfcmVhZChiaWdpbnQsIGJvb2wg REVGQVVMVCB0cnVlKSBSRVRVUk5TIHRleHQKK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9O IHRlc3Rfc2xydV9wYWdlX3JlYWQoYmlnaW50LCBib29sIERFRkFVTFQgdHJ1ZSwgeGlkIERF RkFVTFQgJzAnKSBSRVRVUk5TIHRleHQKICAgQVMgJ01PRFVMRV9QQVRITkFNRScsICd0ZXN0 X3NscnVfcGFnZV9yZWFkJyBMQU5HVUFHRSBDOwogQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJ T04gdGVzdF9zbHJ1X3BhZ2VfcmVhZG9ubHkoYmlnaW50KSBSRVRVUk5TIHRleHQKICAgQVMg J01PRFVMRV9QQVRITkFNRScsICd0ZXN0X3NscnVfcGFnZV9yZWFkb25seScgTEFOR1VBR0Ug QzsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9zbHJ1L3Rlc3Rfc2xydS5j IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NscnUvdGVzdF9zbHJ1LmMKaW5kZXggNGRjNzRl MTk2MjAuLmU0YmQyYWYwYmY1IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf c2xydS90ZXN0X3NscnUuYworKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc2xydS90ZXN0 X3NscnUuYwpAQCAtOTMsMTQgKzkzLDE0IEBAIHRlc3Rfc2xydV9wYWdlX3JlYWQoUEdfRlVO Q1RJT05fQVJHUykKIHsKIAlpbnQ2NAkJcGFnZW5vID0gUEdfR0VUQVJHX0lOVDY0KDApOwog CWJvb2wJCXdyaXRlX29rID0gUEdfR0VUQVJHX0JPT0woMSk7CisJVHJhbnNhY3Rpb25JZCB4 aWQgPSBQR19HRVRBUkdfVFJBTlNBQ1RJT05JRCgyKTsKIAljaGFyCSAgICpkYXRhID0gTlVM TDsKIAlpbnQJCQlzbG90bm87CiAJTFdMb2NrCSAgICpsb2NrID0gU2ltcGxlTHJ1R2V0QmFu a0xvY2soVGVzdFNscnVDdGwsIHBhZ2Vubyk7CiAKIAkvKiBmaW5kIHBhZ2UgaW4gYnVmZmVy cywgcmVhZGluZyBpdCBpZiBuZWNlc3NhcnkgKi8KIAlMV0xvY2tBY3F1aXJlKGxvY2ssIExX X0VYQ0xVU0lWRSk7Ci0Jc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2UoVGVzdFNscnVDdGws IHBhZ2VubywKLQkJCQkJCQkgICB3cml0ZV9vaywgSW52YWxpZFRyYW5zYWN0aW9uSWQpOwor CXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdlKFRlc3RTbHJ1Q3RsLCBwYWdlbm8sIHdyaXRl X29rLCAmeGlkKTsKIAlkYXRhID0gKGNoYXIgKikgVGVzdFNscnVDdGwtPnNoYXJlZC0+cGFn ZV9idWZmZXJbc2xvdG5vXTsKIAlMV0xvY2tSZWxlYXNlKGxvY2spOwogCkBAIC0xMTgsNyAr MTE4LDcgQEAgdGVzdF9zbHJ1X3BhZ2VfcmVhZG9ubHkoUEdfRlVOQ1RJT05fQVJHUykKIAkv KiBmaW5kIHBhZ2UgaW4gYnVmZmVycywgcmVhZGluZyBpdCBpZiBuZWNlc3NhcnkgKi8KIAlz bG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZV9SZWFkT25seShUZXN0U2xydUN0bCwKIAkJCQkJ CQkJCQlwYWdlbm8sCi0JCQkJCQkJCQkJSW52YWxpZFRyYW5zYWN0aW9uSWQpOworCQkJCQkJ CQkJCU5VTEwpOwogCUFzc2VydChMV0xvY2tIZWxkQnlNZShsb2NrKSk7CiAJZGF0YSA9IChj aGFyICopIFRlc3RTbHJ1Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub107CiAJTFdM b2NrUmVsZWFzZShsb2NrKTsKQEAgLTIxMCw2ICsyMTAsMTQgQEAgdGVzdF9zbHJ1X3BhZ2Vf cHJlY2VkZXNfbG9naWNhbGx5KGludDY0IHBhZ2UxLCBpbnQ2NCBwYWdlMikKIAlyZXR1cm4g cGFnZTEgPCBwYWdlMjsKIH0KIAorc3RhdGljIGludAordGVzdF9zbHJ1X2VycmRldGFpbF9m b3JfaW9fZXJyb3IoY29uc3Qgdm9pZCAqb3BhcXVlX2RhdGEpCit7CisJVHJhbnNhY3Rpb25J ZCB4aWQgPSAqKGNvbnN0IFRyYW5zYWN0aW9uSWQgKikgb3BhcXVlX2RhdGE7CisKKwlyZXR1 cm4gZXJyZGV0YWlsKCJDb3VsZCBub3QgYWNjZXNzIHRlc3Rfc2xydSBlbnRyeSAldS4iLCB4 aWQpOworfQorCiBzdGF0aWMgdm9pZAogdGVzdF9zbHJ1X3NobWVtX3N0YXJ0dXAodm9pZCkK IHsKQEAgLTI0NSw2ICsyNTMsNyBAQCB0ZXN0X3NscnVfc2htZW1fc3RhcnR1cCh2b2lkKQog CX0KIAogCVRlc3RTbHJ1Q3RsLT5QYWdlUHJlY2VkZXMgPSB0ZXN0X3NscnVfcGFnZV9wcmVj ZWRlc19sb2dpY2FsbHk7CisJVGVzdFNscnVDdGwtPmVycmRldGFpbF9mb3JfaW9fZXJyb3Ig PSB0ZXN0X3NscnVfZXJyZGV0YWlsX2Zvcl9pb19lcnJvcjsKIAlTaW1wbGVMcnVJbml0KFRl c3RTbHJ1Q3RsLCAiVGVzdFNMUlUiLAogCQkJCSAgTlVNX1RFU1RfQlVGRkVSUywgMCwgc2xy dV9kaXJfbmFtZSwKIAkJCQkgIHRlc3RfYnVmZmVyX3RyYW5jaGVfaWQsIHRlc3RfdHJhbmNo ZV9pZCwgU1lOQ19IQU5ETEVSX05PTkUsCi0tIAoyLjQ3LjMKCg== --------------6DOUXzvh1RbqxauLI7u89V9p--